From 6a612e33245a6f613acbcdadf79bf718189af58c Mon Sep 17 00:00:00 2001 From: Ryan Ahearn Date: Fri, 22 Mar 2019 11:20:19 -0400 Subject: [PATCH 1/2] Remove gems from version control --- .bundle/config | 4 - vendor/bundle/ruby/2.2.0/bin/bayes.rb | 23 - vendor/bundle/ruby/2.2.0/bin/jekyll | 23 - vendor/bundle/ruby/2.2.0/bin/kramdown | 23 - vendor/bundle/ruby/2.2.0/bin/listen | 23 - .../ruby/2.2.0/bin/posix-spawn-benchmark | 23 - vendor/bundle/ruby/2.2.0/bin/redcarpet | 23 - vendor/bundle/ruby/2.2.0/bin/rougify | 23 - vendor/bundle/ruby/2.2.0/bin/safe_yaml | 23 - vendor/bundle/ruby/2.2.0/bin/sass | 23 - vendor/bundle/ruby/2.2.0/bin/sass-convert | 23 - vendor/bundle/ruby/2.2.0/bin/scss | 23 - vendor/bundle/ruby/2.2.0/bin/summarize.rb | 23 - .../ruby/2.2.0/cache/blankslate-2.1.2.4.gem | Bin 6144 -> 0 bytes .../ruby/2.2.0/cache/celluloid-0.16.0.gem | Bin 52736 -> 0 bytes .../2.2.0/cache/classifier-reborn-2.0.3.gem | Bin 23040 -> 0 bytes .../ruby/2.2.0/cache/coffee-script-2.4.1.gem | Bin 6656 -> 0 bytes .../cache/coffee-script-source-1.9.1.1.gem | Bin 58368 -> 0 bytes .../bundle/ruby/2.2.0/cache/colorator-0.1.gem | Bin 7680 -> 0 bytes .../bundle/ruby/2.2.0/cache/execjs-2.5.2.gem | Bin 16896 -> 0 bytes .../ruby/2.2.0/cache/fast-stemmer-1.0.2.gem | Bin 11776 -> 0 bytes vendor/bundle/ruby/2.2.0/cache/ffi-1.9.8.gem | Bin 881152 -> 0 bytes .../2.2.0/cache/guides_style_18f-0.0.1.gem | Bin 39936 -> 0 bytes .../bundle/ruby/2.2.0/cache/hitimes-1.2.2.gem | Bin 32256 -> 0 bytes .../bundle/ruby/2.2.0/cache/jekyll-2.5.3.gem | Bin 58368 -> 0 bytes .../2.2.0/cache/jekyll-coffeescript-1.0.1.gem | Bin 4608 -> 0 bytes .../ruby/2.2.0/cache/jekyll-gist-1.2.1.gem | Bin 8192 -> 0 bytes .../2.2.0/cache/jekyll-paginate-1.1.0.gem | Bin 11776 -> 0 bytes .../cache/jekyll-sass-converter-1.3.0.gem | Bin 5632 -> 0 bytes .../ruby/2.2.0/cache/jekyll-watch-1.2.1.gem | Bin 5632 -> 0 bytes .../ruby/2.2.0/cache/kramdown-1.7.0.gem | Bin 237568 -> 0 bytes .../bundle/ruby/2.2.0/cache/liquid-2.6.2.gem | Bin 46592 -> 0 bytes .../bundle/ruby/2.2.0/cache/listen-2.10.0.gem | Bin 26112 -> 0 bytes .../ruby/2.2.0/cache/mercenary-0.3.5.gem | Bin 16896 -> 0 bytes .../bundle/ruby/2.2.0/cache/parslet-1.5.0.gem | Bin 49152 -> 0 bytes .../ruby/2.2.0/cache/posix-spawn-0.3.11.gem | Bin 29696 -> 0 bytes .../ruby/2.2.0/cache/pygments.rb-0.6.3.gem | Bin 1892352 -> 0 bytes .../ruby/2.2.0/cache/rb-fsevent-0.9.4.gem | Bin 128000 -> 0 bytes .../ruby/2.2.0/cache/rb-inotify-0.9.5.gem | Bin 14336 -> 0 bytes .../ruby/2.2.0/cache/redcarpet-3.2.3.gem | Bin 54272 -> 0 bytes .../bundle/ruby/2.2.0/cache/rouge-1.9.1.gem | Bin 174592 -> 0 bytes .../ruby/2.2.0/cache/safe_yaml-1.0.4.gem | Bin 30208 -> 0 bytes .../bundle/ruby/2.2.0/cache/sass-3.4.13.gem | Bin 335872 -> 0 bytes .../bundle/ruby/2.2.0/cache/timers-4.0.1.gem | Bin 14848 -> 0 bytes vendor/bundle/ruby/2.2.0/cache/toml-0.1.2.gem | Bin 10240 -> 0 bytes .../ruby/2.2.0/cache/yajl-ruby-1.2.3.gem | Bin 550400 -> 0 bytes .../fast-stemmer-1.0.2/gem.build_complete | 0 .../2.2.0/fast-stemmer-1.0.2/gem_make.out | 554 - .../2.2.0/fast-stemmer-1.0.2/stemmer.bundle | Bin 14248 -> 0 bytes .../2.2.0/ffi-1.9.8/ffi_c.bundle | Bin 178444 -> 0 bytes .../2.2.0/ffi-1.9.8/gem.build_complete | 0 .../2.2.0/ffi-1.9.8/gem_make.out | 56 - .../x86_64-darwin-14/2.2.0/ffi-1.9.8/mkmf.log | 402 - .../2.2.0/hitimes-1.2.2/gem.build_complete | 0 .../2.2.0/hitimes-1.2.2/gem_make.out | 16 - .../hitimes-1.2.2/hitimes/2.2/hitimes.bundle | Bin 19504 -> 0 bytes .../posix-spawn-0.3.11/gem.build_complete | 0 .../2.2.0/posix-spawn-0.3.11/gem_make.out | 11 - .../posix-spawn-0.3.11/posix_spawn_ext.bundle | Bin 18820 -> 0 bytes .../2.2.0/redcarpet-3.2.3/gem.build_complete | 0 .../2.2.0/redcarpet-3.2.3/gem_make.out | 69 - .../2.2.0/redcarpet-3.2.3/redcarpet.bundle | Bin 101568 -> 0 bytes .../2.2.0/yajl-ruby-1.2.3/gem.build_complete | 0 .../2.2.0/yajl-ruby-1.2.3/gem_make.out | 174 - .../2.2.0/yajl-ruby-1.2.3/yajl/yajl.bundle | Bin 56396 -> 0 bytes .../ruby/2.2.0/gems/blankslate-2.1.2.4/README | 31 - .../2.2.0/gems/blankslate-2.1.2.4/Rakefile | 13 - .../2.2.0/gems/blankslate-2.1.2.4/VERSION | 1 - .../blankslate-2.1.2.4/blankslate.gemspec | 22 - .../gems/blankslate-2.1.2.4/lib/blankslate.rb | 109 - .../spec/blankslate_spec.rb | 39 - .../2.2.0/gems/celluloid-0.16.0/LICENSE.txt | 20 - .../2.2.0/gems/celluloid-0.16.0/README.md | 172 - .../gems/celluloid-0.16.0/lib/celluloid.rb | 516 - .../celluloid-0.16.0/lib/celluloid/actor.rb | 362 - .../lib/celluloid/actor_system.rb | 107 - .../lib/celluloid/autostart.rb | 3 - .../lib/celluloid/call_chain.rb | 13 - .../celluloid-0.16.0/lib/celluloid/calls.rb | 151 - .../celluloid-0.16.0/lib/celluloid/cell.rb | 89 - .../lib/celluloid/condition.rb | 89 - .../lib/celluloid/core_ext.rb | 9 - .../lib/celluloid/cpu_counter.rb | 34 - .../lib/celluloid/evented_mailbox.rb | 73 - .../lib/celluloid/exceptions.rb | 23 - .../celluloid-0.16.0/lib/celluloid/fiber.rb | 32 - .../celluloid-0.16.0/lib/celluloid/fsm.rb | 186 - .../celluloid-0.16.0/lib/celluloid/future.rb | 108 - .../lib/celluloid/handlers.rb | 41 - .../lib/celluloid/internal_pool.rb | 159 - .../celluloid-0.16.0/lib/celluloid/legacy.rb | 9 - .../celluloid-0.16.0/lib/celluloid/links.rb | 36 - .../celluloid-0.16.0/lib/celluloid/logger.rb | 93 - .../celluloid-0.16.0/lib/celluloid/logging.rb | 5 - .../lib/celluloid/logging/incident.rb | 21 - .../lib/celluloid/logging/incident_logger.rb | 129 - .../celluloid/logging/incident_reporter.rb | 48 - .../lib/celluloid/logging/log_event.rb | 20 - .../lib/celluloid/logging/ring_buffer.rb | 65 - .../celluloid-0.16.0/lib/celluloid/mailbox.rb | 156 - .../celluloid-0.16.0/lib/celluloid/method.rb | 32 - .../lib/celluloid/notifications.rb | 83 - .../lib/celluloid/pool_manager.rb | 146 - .../celluloid-0.16.0/lib/celluloid/probe.rb | 73 - .../lib/celluloid/properties.rb | 24 - .../lib/celluloid/proxies/abstract_proxy.rb | 20 - .../lib/celluloid/proxies/actor_proxy.rb | 38 - .../lib/celluloid/proxies/async_proxy.rb | 31 - .../lib/celluloid/proxies/block_proxy.rb | 29 - .../lib/celluloid/proxies/cell_proxy.rb | 68 - .../lib/celluloid/proxies/future_proxy.rb | 35 - .../lib/celluloid/proxies/sync_proxy.rb | 36 - .../lib/celluloid/receivers.rb | 63 - .../lib/celluloid/registry.rb | 57 - .../lib/celluloid/responses.rb | 44 - .../celluloid-0.16.0/lib/celluloid/rspec.rb | 13 - .../lib/celluloid/rspec/actor_examples.rb | 1054 - .../celluloid/rspec/example_actor_class.rb | 109 - .../lib/celluloid/rspec/mailbox_examples.rb | 84 - .../lib/celluloid/rspec/task_examples.rb | 49 - .../celluloid-0.16.0/lib/celluloid/signals.rb | 23 - .../lib/celluloid/stack_dump.rb | 133 - .../lib/celluloid/supervision_group.rb | 169 - .../lib/celluloid/supervisor.rb | 22 - .../lib/celluloid/system_events.rb | 66 - .../lib/celluloid/task_set.rb | 49 - .../celluloid-0.16.0/lib/celluloid/tasks.rb | 176 - .../lib/celluloid/tasks/task_fiber.rb | 43 - .../lib/celluloid/tasks/task_thread.rb | 53 - .../celluloid-0.16.0/lib/celluloid/test.rb | 3 - .../celluloid-0.16.0/lib/celluloid/thread.rb | 40 - .../lib/celluloid/thread_handle.rb | 50 - .../celluloid-0.16.0/lib/celluloid/uuid.rb | 38 - .../spec/celluloid/actor_spec.rb | 5 - .../spec/celluloid/actor_system_spec.rb | 69 - .../spec/celluloid/block_spec.rb | 54 - .../spec/celluloid/calls_spec.rb | 42 - .../spec/celluloid/condition_spec.rb | 76 - .../spec/celluloid/cpu_counter_spec.rb | 82 - .../spec/celluloid/evented_mailbox_spec.rb | 34 - .../spec/celluloid/fsm_spec.rb | 107 - .../spec/celluloid/future_spec.rb | 32 - .../spec/celluloid/internal_pool_spec.rb | 52 - .../spec/celluloid/links_spec.rb | 45 - .../celluloid/logging/ring_buffer_spec.rb | 38 - .../spec/celluloid/mailbox_spec.rb | 5 - .../spec/celluloid/notifications_spec.rb | 120 - .../spec/celluloid/pool_spec.rb | 92 - .../spec/celluloid/probe_spec.rb | 121 - .../spec/celluloid/properties_spec.rb | 42 - .../spec/celluloid/registry_spec.rb | 64 - .../spec/celluloid/stack_dump_spec.rb | 64 - .../spec/celluloid/supervision_group_spec.rb | 65 - .../spec/celluloid/supervisor_spec.rb | 103 - .../spec/celluloid/tasks/task_fiber_spec.rb | 5 - .../spec/celluloid/tasks/task_thread_spec.rb | 5 - .../spec/celluloid/thread_handle_spec.rb | 26 - .../spec/celluloid/timer_spec.rb | 48 - .../spec/celluloid/uuid_spec.rb | 11 - .../gems/celluloid-0.16.0/spec/spec_helper.rb | 44 - .../gems/classifier-reborn-2.0.3/LICENSE | 429 - .../classifier-reborn-2.0.3/README.markdown | 114 - .../gems/classifier-reborn-2.0.3/bin/bayes.rb | 36 - .../classifier-reborn-2.0.3/bin/summarize.rb | 16 - .../lib/classifier-reborn.rb | 30 - .../lib/classifier-reborn/bayes.rb | 138 - .../lib/classifier-reborn/category_namer.rb | 15 - .../classifier-reborn/extensions/hasher.rb | 134 - .../classifier-reborn/extensions/vector.rb | 79 - .../extensions/vector_serialize.rb | 20 - .../lib/classifier-reborn/lsi.rb | 317 - .../lib/classifier-reborn/lsi/content_node.rb | 86 - .../lib/classifier-reborn/lsi/summarizer.rb | 33 - .../lib/classifier-reborn/lsi/word_list.rb | 36 - .../lib/classifier-reborn/version.rb | 3 - .../2.2.0/gems/coffee-script-2.4.1/LICENSE | 22 - .../2.2.0/gems/coffee-script-2.4.1/README.md | 43 - .../coffee-script-2.4.1/lib/coffee-script.rb | 1 - .../coffee-script-2.4.1/lib/coffee_script.rb | 81 - .../lib/coffee_script/coffee-script.js | 6628 ------ .../lib/coffee_script/source.rb | 7 - .../ruby/2.2.0/gems/colorator-0.1/Gemfile | 2 - .../ruby/2.2.0/gems/colorator-0.1/LICENSE | 21 - .../2.2.0/gems/colorator-0.1/README.markdown | 36 - .../ruby/2.2.0/gems/colorator-0.1/Rakefile | 146 - .../gems/colorator-0.1/colorator.gemspec | 66 - .../2.2.0/gems/colorator-0.1/lib/colorator.rb | 18 - .../colorator-0.1/lib/colorator/core_ext.rb | 10 - .../spec/colorator/core_ext_spec.rb | 18 - .../gems/colorator-0.1/spec/spec_helper.rb | 9 - .../ruby/2.2.0/gems/execjs-2.5.2/LICENSE | 21 - .../ruby/2.2.0/gems/execjs-2.5.2/README.md | 80 - .../2.2.0/gems/execjs-2.5.2/lib/execjs.rb | 6 - .../lib/execjs/disabled_runtime.rb | 29 - .../lib/execjs/duktape_runtime.rb | 68 - .../gems/execjs-2.5.2/lib/execjs/encoding.rb | 26 - .../lib/execjs/external_runtime.rb | 241 - .../gems/execjs-2.5.2/lib/execjs/module.rb | 42 - .../lib/execjs/ruby_racer_runtime.rb | 114 - .../lib/execjs/ruby_rhino_runtime.rb | 97 - .../gems/execjs-2.5.2/lib/execjs/runtime.rb | 55 - .../gems/execjs-2.5.2/lib/execjs/runtimes.rb | 86 - .../lib/execjs/support/jsc_runner.js | 18 - .../lib/execjs/support/jscript_runner.js | 22 - .../execjs-2.5.2/lib/execjs/support/json2.js | 481 - .../lib/execjs/support/node_runner.js | 20 - .../lib/execjs/support/spidermonkey_runner.js | 18 - .../gems/execjs-2.5.2/lib/execjs/version.rb | 3 - .../2.2.0/gems/fast-stemmer-1.0.2/LICENSE | 20 - .../ruby/2.2.0/gems/fast-stemmer-1.0.2/README | 25 - .../2.2.0/gems/fast-stemmer-1.0.2/Rakefile | 36 - .../2.2.0/gems/fast-stemmer-1.0.2/VERSION.yml | 5 - .../fast-stemmer-1.0.2/ext/.RUBYARCHDIR.time | 0 .../gems/fast-stemmer-1.0.2/ext/Makefile | 260 - .../gems/fast-stemmer-1.0.2/ext/extconf.rb | 3 - .../gems/fast-stemmer-1.0.2/ext/porter.c | 441 - .../gems/fast-stemmer-1.0.2/ext/porter.o | Bin 25916 -> 0 bytes .../gems/fast-stemmer-1.0.2/ext/porter_wrap.c | 42 - .../gems/fast-stemmer-1.0.2/ext/porter_wrap.o | Bin 4332 -> 0 bytes .../fast-stemmer-1.0.2/ext/stemmer.bundle | Bin 14248 -> 0 bytes .../fast-stemmer-1.0.2/lib/fast-stemmer.rb | 1 - .../fast-stemmer-1.0.2/lib/fast_stemmer.rb | 7 - .../fast-stemmer-1.0.2/lib/stemmer.bundle | Bin 14248 -> 0 bytes .../test/fast_stemmer_test.rb | 19 - .../bundle/ruby/2.2.0/gems/ffi-1.9.8/COPYING | 49 - .../bundle/ruby/2.2.0/gems/ffi-1.9.8/LICENSE | 24 - .../ruby/2.2.0/gems/ffi-1.9.8/README.md | 109 - .../bundle/ruby/2.2.0/gems/ffi-1.9.8/Rakefile | 224 - .../ffi-1.9.8/ext/ffi_c/.RUBYARCHDIR.time | 0 .../gems/ffi-1.9.8/ext/ffi_c/AbstractMemory.c | 1032 - .../gems/ffi-1.9.8/ext/ffi_c/AbstractMemory.h | 175 - .../gems/ffi-1.9.8/ext/ffi_c/AbstractMemory.o | Bin 216824 -> 0 bytes .../gems/ffi-1.9.8/ext/ffi_c/ArrayType.c | 162 - .../gems/ffi-1.9.8/ext/ffi_c/ArrayType.h | 59 - .../gems/ffi-1.9.8/ext/ffi_c/ArrayType.o | Bin 9256 -> 0 bytes .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Buffer.c | 365 - .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Buffer.o | Bin 19956 -> 0 bytes .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Call.c | 530 - .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Call.h | 93 - .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Call.o | Bin 25272 -> 0 bytes .../gems/ffi-1.9.8/ext/ffi_c/ClosurePool.c | 283 - .../gems/ffi-1.9.8/ext/ffi_c/ClosurePool.h | 57 - .../gems/ffi-1.9.8/ext/ffi_c/ClosurePool.o | Bin 9548 -> 0 bytes .../gems/ffi-1.9.8/ext/ffi_c/DataConverter.c | 91 - .../gems/ffi-1.9.8/ext/ffi_c/DataConverter.o | Bin 5260 -> 0 bytes .../gems/ffi-1.9.8/ext/ffi_c/DynamicLibrary.c | 337 - .../gems/ffi-1.9.8/ext/ffi_c/DynamicLibrary.h | 98 - .../gems/ffi-1.9.8/ext/ffi_c/DynamicLibrary.o | Bin 14204 -> 0 bytes .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Function.c | 1000 - .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Function.h | 87 - .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Function.o | Bin 39984 -> 0 bytes .../gems/ffi-1.9.8/ext/ffi_c/FunctionInfo.c | 271 - .../gems/ffi-1.9.8/ext/ffi_c/FunctionInfo.o | Bin 15868 -> 0 bytes .../gems/ffi-1.9.8/ext/ffi_c/LastError.c | 184 - .../gems/ffi-1.9.8/ext/ffi_c/LastError.h | 47 - .../gems/ffi-1.9.8/ext/ffi_c/LastError.o | Bin 5820 -> 0 bytes .../gems/ffi-1.9.8/ext/ffi_c/LongDouble.c | 63 - .../gems/ffi-1.9.8/ext/ffi_c/LongDouble.h | 51 - .../gems/ffi-1.9.8/ext/ffi_c/LongDouble.o | Bin 7724 -> 0 bytes .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Makefile | 260 - .../gems/ffi-1.9.8/ext/ffi_c/MappedType.c | 168 - .../gems/ffi-1.9.8/ext/ffi_c/MappedType.h | 59 - .../gems/ffi-1.9.8/ext/ffi_c/MappedType.o | Bin 11356 -> 0 bytes .../gems/ffi-1.9.8/ext/ffi_c/MemoryPointer.c | 197 - .../gems/ffi-1.9.8/ext/ffi_c/MemoryPointer.h | 53 - .../gems/ffi-1.9.8/ext/ffi_c/MemoryPointer.o | Bin 12412 -> 0 bytes .../gems/ffi-1.9.8/ext/ffi_c/MethodHandle.c | 360 - .../gems/ffi-1.9.8/ext/ffi_c/MethodHandle.h | 55 - .../gems/ffi-1.9.8/ext/ffi_c/MethodHandle.o | Bin 9760 -> 0 bytes .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Platform.c | 121 - .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Platform.h | 45 - .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Platform.o | Bin 4192 -> 0 bytes .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Pointer.c | 508 - .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Pointer.h | 63 - .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Pointer.o | Bin 25644 -> 0 bytes .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Struct.c | 829 - .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Struct.h | 106 - .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Struct.o | Bin 46528 -> 0 bytes .../ffi-1.9.8/ext/ffi_c/StructByReference.c | 190 - .../ffi-1.9.8/ext/ffi_c/StructByReference.h | 50 - .../ffi-1.9.8/ext/ffi_c/StructByReference.o | Bin 12908 -> 0 bytes .../gems/ffi-1.9.8/ext/ffi_c/StructByValue.c | 150 - .../gems/ffi-1.9.8/ext/ffi_c/StructByValue.h | 55 - .../gems/ffi-1.9.8/ext/ffi_c/StructByValue.o | Bin 11508 -> 0 bytes .../gems/ffi-1.9.8/ext/ffi_c/StructLayout.c | 698 - .../gems/ffi-1.9.8/ext/ffi_c/StructLayout.o | Bin 35104 -> 0 bytes .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Thread.c | 352 - .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Thread.h | 95 - .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Thread.o | Bin 4964 -> 0 bytes .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Type.c | 397 - .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Type.h | 62 - .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Type.o | Bin 39212 -> 0 bytes .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Types.c | 139 - .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Types.h | 89 - .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Types.o | Bin 10108 -> 0 bytes .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Variadic.c | 280 - .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/Variadic.o | Bin 17532 -> 0 bytes .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/compat.h | 83 - .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/extconf.h | 7 - .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/extconf.rb | 64 - .../ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ffi.c | 98 - .../ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ffi.o | Bin 4016 -> 0 bytes .../gems/ffi-1.9.8/ext/ffi_c/ffi_c.bundle | Bin 178444 -> 0 bytes .../gems/ffi-1.9.8/ext/ffi_c/libffi.bsd.mk | 34 - .../gems/ffi-1.9.8/ext/ffi_c/libffi.darwin.mk | 95 - .../gems/ffi-1.9.8/ext/ffi_c/libffi.gnu.mk | 31 - .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi.mk | 13 - .../gems/ffi-1.9.8/ext/ffi_c/libffi.vc.mk | 26 - .../gems/ffi-1.9.8/ext/ffi_c/libffi.vc64.mk | 26 - .../gems/ffi-1.9.8/ext/ffi_c/libffi/ChangeLog | 4600 ----- .../ext/ffi_c/libffi/ChangeLog.libffi | 584 - .../ext/ffi_c/libffi/ChangeLog.libgcj | 40 - .../ffi-1.9.8/ext/ffi_c/libffi/ChangeLog.v1 | 764 - .../gems/ffi-1.9.8/ext/ffi_c/libffi/LICENSE | 21 - .../ffi-1.9.8/ext/ffi_c/libffi/Makefile.am | 196 - .../ffi-1.9.8/ext/ffi_c/libffi/Makefile.in | 1820 -- .../ffi-1.9.8/ext/ffi_c/libffi/Makefile.vc | 141 - .../ffi-1.9.8/ext/ffi_c/libffi/Makefile.vc64 | 141 - .../gems/ffi-1.9.8/ext/ffi_c/libffi/README | 342 - .../ffi-1.9.8/ext/ffi_c/libffi/acinclude.m4 | 92 - .../ffi-1.9.8/ext/ffi_c/libffi/aclocal.m4 | 1873 -- .../ffi-1.9.8/ext/ffi_c/libffi/build-ios.sh | 67 - .../gems/ffi-1.9.8/ext/ffi_c/libffi/compile | 143 - .../ffi-1.9.8/ext/ffi_c/libffi/config.guess | 1501 -- .../ffi-1.9.8/ext/ffi_c/libffi/config.sub | 1705 -- .../gems/ffi-1.9.8/ext/ffi_c/libffi/configure | 17191 ---------------- .../ffi-1.9.8/ext/ffi_c/libffi/configure.ac | 496 - .../ffi-1.9.8/ext/ffi_c/libffi/configure.host | 11 - .../gems/ffi-1.9.8/ext/ffi_c/libffi/depcomp | 630 - .../ext/ffi_c/libffi/doc/libffi.info | 593 - .../ext/ffi_c/libffi/doc/libffi.texi | 600 - .../ffi-1.9.8/ext/ffi_c/libffi/doc/stamp-vti | 4 - .../ext/ffi_c/libffi/doc/version.texi | 4 - .../ffi-1.9.8/ext/ffi_c/libffi/fficonfig.h.in | 199 - .../ffi-1.9.8/ext/ffi_c/libffi/fficonfig.hw | 57 - .../ext/ffi_c/libffi/include/Makefile.am | 9 - .../ext/ffi_c/libffi/include/Makefile.in | 487 - .../ext/ffi_c/libffi/include/ffi.h.in | 427 - .../ext/ffi_c/libffi/include/ffi.h.vc | 427 - .../ext/ffi_c/libffi/include/ffi.h.vc64 | 427 - .../ext/ffi_c/libffi/include/ffi_common.h | 126 - .../ffi-1.9.8/ext/ffi_c/libffi/install-sh | 520 - .../ffi-1.9.8/ext/ffi_c/libffi/libffi.pc.in | 10 - .../ext/ffi_c/libffi/libtool-version | 29 - .../gems/ffi-1.9.8/ext/ffi_c/libffi/ltmain.sh | 9636 --------- .../ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 | 176 - .../ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 | 195 - .../libffi/m4/ax_check_compiler_flags.m4 | 76 - .../ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 | 63 - .../ext/ffi_c/libffi/m4/ax_configure_args.m4 | 70 - .../ext/ffi_c/libffi/m4/ax_enable_builddir.m4 | 300 - .../ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 | 215 - .../ext/ffi_c/libffi/m4/ax_gcc_x86_cpuid.m4 | 79 - .../ffi-1.9.8/ext/ffi_c/libffi/m4/libtool.m4 | 7831 ------- .../ext/ffi_c/libffi/m4/ltoptions.m4 | 369 - .../ffi-1.9.8/ext/ffi_c/libffi/m4/ltsugar.m4 | 123 - .../ext/ffi_c/libffi/m4/ltversion.m4 | 23 - .../ext/ffi_c/libffi/m4/lt~obsolete.m4 | 98 - .../ext/ffi_c/libffi/man/Makefile.am | 8 - .../ext/ffi_c/libffi/man/Makefile.in | 466 - .../gems/ffi-1.9.8/ext/ffi_c/libffi/man/ffi.3 | 31 - .../ffi-1.9.8/ext/ffi_c/libffi/man/ffi_call.3 | 103 - .../ext/ffi_c/libffi/man/ffi_prep_cif.3 | 66 - .../gems/ffi-1.9.8/ext/ffi_c/libffi/mdate-sh | 201 - .../gems/ffi-1.9.8/ext/ffi_c/libffi/missing | 376 - .../gems/ffi-1.9.8/ext/ffi_c/libffi/msvcc.sh | 197 - .../ext/ffi_c/libffi/src/alpha/ffi.c | 284 - .../ext/ffi_c/libffi/src/alpha/ffitarget.h | 48 - .../ext/ffi_c/libffi/src/alpha/osf.S | 387 - .../ffi-1.9.8/ext/ffi_c/libffi/src/arm/ffi.c | 728 - .../ext/ffi_c/libffi/src/arm/ffitarget.h | 65 - .../ext/ffi_c/libffi/src/arm/gentramp.sh | 118 - .../ffi-1.9.8/ext/ffi_c/libffi/src/arm/sysv.S | 497 - .../ext/ffi_c/libffi/src/arm/trampoline.S | 4450 ---- .../ext/ffi_c/libffi/src/avr32/ffi.c | 423 - .../ext/ffi_c/libffi/src/avr32/ffitarget.h | 50 - .../ext/ffi_c/libffi/src/avr32/sysv.S | 208 - .../ffi-1.9.8/ext/ffi_c/libffi/src/closures.c | 615 - .../ffi-1.9.8/ext/ffi_c/libffi/src/cris/ffi.c | 383 - .../ext/ffi_c/libffi/src/cris/ffitarget.h | 51 - .../ext/ffi_c/libffi/src/cris/sysv.S | 215 - .../ffi-1.9.8/ext/ffi_c/libffi/src/debug.c | 59 - .../ffi-1.9.8/ext/ffi_c/libffi/src/dlmalloc.c | 5161 ----- .../ffi-1.9.8/ext/ffi_c/libffi/src/frv/eabi.S | 128 - .../ffi-1.9.8/ext/ffi_c/libffi/src/frv/ffi.c | 292 - .../ext/ffi_c/libffi/src/frv/ffitarget.h | 57 - .../ffi-1.9.8/ext/ffi_c/libffi/src/ia64/ffi.c | 582 - .../ext/ffi_c/libffi/src/ia64/ffitarget.h | 50 - .../ext/ffi_c/libffi/src/ia64/ia64_flags.h | 40 - .../ext/ffi_c/libffi/src/ia64/unix.S | 560 - .../ext/ffi_c/libffi/src/java_raw_api.c | 356 - .../ffi-1.9.8/ext/ffi_c/libffi/src/m32r/ffi.c | 232 - .../ext/ffi_c/libffi/src/m32r/ffitarget.h | 48 - .../ext/ffi_c/libffi/src/m32r/sysv.S | 121 - .../ffi-1.9.8/ext/ffi_c/libffi/src/m68k/ffi.c | 288 - .../ext/ffi_c/libffi/src/m68k/ffitarget.h | 49 - .../ext/ffi_c/libffi/src/m68k/sysv.S | 270 - .../ffi-1.9.8/ext/ffi_c/libffi/src/mips/ffi.c | 1036 - .../ext/ffi_c/libffi/src/mips/ffitarget.h | 242 - .../ffi-1.9.8/ext/ffi_c/libffi/src/mips/n32.S | 591 - .../ffi-1.9.8/ext/ffi_c/libffi/src/mips/o32.S | 381 - .../ext/ffi_c/libffi/src/moxie/eabi.S | 128 - .../ext/ffi_c/libffi/src/moxie/ffi.c | 276 - .../ffi-1.9.8/ext/ffi_c/libffi/src/pa/ffi.c | 719 - .../ext/ffi_c/libffi/src/pa/ffitarget.h | 78 - .../ext/ffi_c/libffi/src/pa/hpux32.S | 368 - .../ffi-1.9.8/ext/ffi_c/libffi/src/pa/linux.S | 357 - .../ext/ffi_c/libffi/src/powerpc/aix.S | 328 - .../ffi_c/libffi/src/powerpc/aix_closure.S | 445 - .../ext/ffi_c/libffi/src/powerpc/asm.h | 125 - .../ext/ffi_c/libffi/src/powerpc/darwin.S | 383 - .../ffi_c/libffi/src/powerpc/darwin_closure.S | 575 - .../ext/ffi_c/libffi/src/powerpc/ffi.c | 1448 -- .../ext/ffi_c/libffi/src/powerpc/ffi_darwin.c | 1359 -- .../ext/ffi_c/libffi/src/powerpc/ffitarget.h | 139 - .../ext/ffi_c/libffi/src/powerpc/linux64.S | 187 - .../libffi/src/powerpc/linux64_closure.S | 236 - .../ffi_c/libffi/src/powerpc/ppc_closure.S | 327 - .../ext/ffi_c/libffi/src/powerpc/sysv.S | 219 - .../ffi-1.9.8/ext/ffi_c/libffi/src/prep_cif.c | 177 - .../ffi-1.9.8/ext/ffi_c/libffi/src/raw_api.c | 254 - .../ffi-1.9.8/ext/ffi_c/libffi/src/s390/ffi.c | 780 - .../ext/ffi_c/libffi/src/s390/ffitarget.h | 62 - .../ext/ffi_c/libffi/src/s390/sysv.S | 434 - .../ffi-1.9.8/ext/ffi_c/libffi/src/sh/ffi.c | 716 - .../ext/ffi_c/libffi/src/sh/ffitarget.h | 49 - .../ffi-1.9.8/ext/ffi_c/libffi/src/sh/sysv.S | 850 - .../ffi-1.9.8/ext/ffi_c/libffi/src/sh64/ffi.c | 468 - .../ext/ffi_c/libffi/src/sh64/ffitarget.h | 53 - .../ext/ffi_c/libffi/src/sh64/sysv.S | 539 - .../ext/ffi_c/libffi/src/sparc/ffi.c | 669 - .../ext/ffi_c/libffi/src/sparc/ffitarget.h | 68 - .../ffi-1.9.8/ext/ffi_c/libffi/src/sparc/v8.S | 313 - .../ffi-1.9.8/ext/ffi_c/libffi/src/sparc/v9.S | 307 - .../ffi-1.9.8/ext/ffi_c/libffi/src/types.c | 77 - .../ext/ffi_c/libffi/src/x86/darwin.S | 444 - .../ext/ffi_c/libffi/src/x86/darwin64.S | 416 - .../ffi-1.9.8/ext/ffi_c/libffi/src/x86/ffi.c | 644 - .../ext/ffi_c/libffi/src/x86/ffi64.c | 635 - .../ext/ffi_c/libffi/src/x86/ffitarget.h | 121 - .../ext/ffi_c/libffi/src/x86/freebsd.S | 458 - .../ffi-1.9.8/ext/ffi_c/libffi/src/x86/sysv.S | 468 - .../ext/ffi_c/libffi/src/x86/unix64.S | 426 - .../ext/ffi_c/libffi/src/x86/win32.S | 1065 - .../ext/ffi_c/libffi/src/x86/win64.S | 468 - .../ext/ffi_c/libffi/testsuite/Makefile.am | 80 - .../ext/ffi_c/libffi/testsuite/Makefile.in | 500 - .../ffi_c/libffi/testsuite/config/default.exp | 1 - .../ffi_c/libffi/testsuite/lib/libffi-dg.exp | 300 - .../ext/ffi_c/libffi/testsuite/lib/libffi.exp | 350 - .../libffi/testsuite/lib/target-libpath.exp | 263 - .../ffi_c/libffi/testsuite/lib/wrapper.exp | 45 - .../libffi/testsuite/libffi.call/call.exp | 32 - .../testsuite/libffi.call/closure_fn0.c | 89 - .../testsuite/libffi.call/closure_fn1.c | 81 - .../testsuite/libffi.call/closure_fn2.c | 81 - .../testsuite/libffi.call/closure_fn3.c | 82 - .../testsuite/libffi.call/closure_fn4.c | 89 - .../testsuite/libffi.call/closure_fn5.c | 92 - .../testsuite/libffi.call/closure_fn6.c | 90 - .../testsuite/libffi.call/closure_loc_fn0.c | 95 - .../testsuite/libffi.call/closure_stdcall.c | 64 - .../libffi/testsuite/libffi.call/cls_12byte.c | 94 - .../libffi/testsuite/libffi.call/cls_16byte.c | 95 - .../libffi/testsuite/libffi.call/cls_18byte.c | 96 - .../libffi/testsuite/libffi.call/cls_19byte.c | 102 - .../testsuite/libffi.call/cls_1_1byte.c | 89 - .../libffi/testsuite/libffi.call/cls_20byte.c | 91 - .../testsuite/libffi.call/cls_20byte1.c | 93 - .../libffi/testsuite/libffi.call/cls_24byte.c | 113 - .../libffi/testsuite/libffi.call/cls_2byte.c | 90 - .../testsuite/libffi.call/cls_3_1byte.c | 95 - .../libffi/testsuite/libffi.call/cls_3byte1.c | 90 - .../libffi/testsuite/libffi.call/cls_3byte2.c | 90 - .../testsuite/libffi.call/cls_4_1byte.c | 98 - .../libffi/testsuite/libffi.call/cls_4byte.c | 90 - .../testsuite/libffi.call/cls_5_1_byte.c | 109 - .../libffi/testsuite/libffi.call/cls_5byte.c | 98 - .../libffi/testsuite/libffi.call/cls_64byte.c | 124 - .../testsuite/libffi.call/cls_6_1_byte.c | 113 - .../libffi/testsuite/libffi.call/cls_6byte.c | 99 - .../testsuite/libffi.call/cls_7_1_byte.c | 117 - .../libffi/testsuite/libffi.call/cls_7byte.c | 97 - .../libffi/testsuite/libffi.call/cls_8byte.c | 88 - .../libffi/testsuite/libffi.call/cls_9byte1.c | 90 - .../libffi/testsuite/libffi.call/cls_9byte2.c | 91 - .../testsuite/libffi.call/cls_align_double.c | 93 - .../testsuite/libffi.call/cls_align_float.c | 91 - .../libffi.call/cls_align_longdouble.c | 92 - .../libffi.call/cls_align_longdouble_split.c | 134 - .../libffi.call/cls_align_longdouble_split2.c | 117 - .../testsuite/libffi.call/cls_align_pointer.c | 95 - .../testsuite/libffi.call/cls_align_sint16.c | 91 - .../testsuite/libffi.call/cls_align_sint32.c | 91 - .../testsuite/libffi.call/cls_align_sint64.c | 92 - .../testsuite/libffi.call/cls_align_uint16.c | 91 - .../testsuite/libffi.call/cls_align_uint32.c | 91 - .../testsuite/libffi.call/cls_align_uint64.c | 93 - .../testsuite/libffi.call/cls_dbls_struct.c | 66 - .../libffi/testsuite/libffi.call/cls_double.c | 43 - .../testsuite/libffi.call/cls_double_va.c | 60 - .../libffi/testsuite/libffi.call/cls_float.c | 42 - .../testsuite/libffi.call/cls_longdouble.c | 105 - .../testsuite/libffi.call/cls_longdouble_va.c | 60 - .../testsuite/libffi.call/cls_multi_schar.c | 74 - .../testsuite/libffi.call/cls_multi_sshort.c | 74 - .../libffi.call/cls_multi_sshortchar.c | 86 - .../testsuite/libffi.call/cls_multi_uchar.c | 91 - .../testsuite/libffi.call/cls_multi_ushort.c | 74 - .../libffi.call/cls_multi_ushortchar.c | 86 - .../testsuite/libffi.call/cls_pointer.c | 74 - .../testsuite/libffi.call/cls_pointer_stack.c | 140 - .../libffi/testsuite/libffi.call/cls_schar.c | 44 - .../libffi/testsuite/libffi.call/cls_sint.c | 42 - .../libffi/testsuite/libffi.call/cls_sshort.c | 42 - .../libffi/testsuite/libffi.call/cls_uchar.c | 42 - .../libffi/testsuite/libffi.call/cls_uint.c | 43 - .../testsuite/libffi.call/cls_ulonglong.c | 47 - .../libffi/testsuite/libffi.call/cls_ushort.c | 43 - .../testsuite/libffi.call/err_bad_abi.c | 36 - .../testsuite/libffi.call/err_bad_typedef.c | 26 - .../libffi/testsuite/libffi.call/ffitest.h | 153 - .../libffi/testsuite/libffi.call/float.c | 59 - .../libffi/testsuite/libffi.call/float1.c | 58 - .../libffi/testsuite/libffi.call/float2.c | 58 - .../libffi/testsuite/libffi.call/float3.c | 72 - .../libffi/testsuite/libffi.call/float4.c | 62 - .../testsuite/libffi.call/huge_struct.c | 342 - .../ffi_c/libffi/testsuite/libffi.call/many.c | 69 - .../libffi/testsuite/libffi.call/many_win32.c | 63 - .../libffi/testsuite/libffi.call/negint.c | 53 - .../testsuite/libffi.call/nested_struct.c | 152 - .../testsuite/libffi.call/nested_struct1.c | 161 - .../testsuite/libffi.call/nested_struct10.c | 133 - .../testsuite/libffi.call/nested_struct2.c | 110 - .../testsuite/libffi.call/nested_struct3.c | 111 - .../testsuite/libffi.call/nested_struct4.c | 111 - .../testsuite/libffi.call/nested_struct5.c | 112 - .../testsuite/libffi.call/nested_struct6.c | 131 - .../testsuite/libffi.call/nested_struct7.c | 111 - .../testsuite/libffi.call/nested_struct8.c | 131 - .../testsuite/libffi.call/nested_struct9.c | 131 - .../libffi/testsuite/libffi.call/problem1.c | 90 - .../libffi/testsuite/libffi.call/promotion.c | 59 - .../libffi/testsuite/libffi.call/pyobjc-tc.c | 114 - .../libffi/testsuite/libffi.call/return_dbl.c | 35 - .../testsuite/libffi.call/return_dbl1.c | 43 - .../testsuite/libffi.call/return_dbl2.c | 42 - .../libffi/testsuite/libffi.call/return_fl.c | 35 - .../libffi/testsuite/libffi.call/return_fl1.c | 36 - .../libffi/testsuite/libffi.call/return_fl2.c | 49 - .../libffi/testsuite/libffi.call/return_fl3.c | 42 - .../libffi/testsuite/libffi.call/return_ldl.c | 34 - .../libffi/testsuite/libffi.call/return_ll.c | 41 - .../libffi/testsuite/libffi.call/return_ll1.c | 43 - .../libffi/testsuite/libffi.call/return_sc.c | 36 - .../libffi/testsuite/libffi.call/return_sl.c | 38 - .../libffi/testsuite/libffi.call/return_uc.c | 38 - .../libffi/testsuite/libffi.call/return_ul.c | 38 - .../testsuite/libffi.call/stret_large.c | 145 - .../testsuite/libffi.call/stret_large2.c | 148 - .../testsuite/libffi.call/stret_medium.c | 124 - .../testsuite/libffi.call/stret_medium2.c | 125 - .../libffi/testsuite/libffi.call/strlen.c | 44 - .../testsuite/libffi.call/strlen_win32.c | 44 - .../libffi/testsuite/libffi.call/struct1.c | 65 - .../libffi/testsuite/libffi.call/struct2.c | 67 - .../libffi/testsuite/libffi.call/struct3.c | 59 - .../libffi/testsuite/libffi.call/struct4.c | 63 - .../libffi/testsuite/libffi.call/struct5.c | 65 - .../libffi/testsuite/libffi.call/struct6.c | 64 - .../libffi/testsuite/libffi.call/struct7.c | 74 - .../libffi/testsuite/libffi.call/struct8.c | 80 - .../libffi/testsuite/libffi.call/struct9.c | 67 - .../testsuite/libffi.call/testclosure.c | 70 - .../testsuite/libffi.special/ffitestcxx.h | 96 - .../testsuite/libffi.special/special.exp | 35 - .../testsuite/libffi.special/unwindtest.cc | 124 - .../libffi.special/unwindtest_ffi_call.cc | 53 - .../ffi-1.9.8/ext/ffi_c/libffi/texinfo.tex | 7210 ------- .../2.2.0/gems/ffi-1.9.8/ext/ffi_c/rbffi.h | 57 - .../gems/ffi-1.9.8/ext/ffi_c/rbffi_endian.h | 59 - .../gems/ffi-1.9.8/ext/ffi_c/win32/stdbool.h | 8 - .../gems/ffi-1.9.8/ext/ffi_c/win32/stdint.h | 201 - .../ruby/2.2.0/gems/ffi-1.9.8/ffi.gemspec | 22 - .../ruby/2.2.0/gems/ffi-1.9.8/gen/Rakefile | 30 - .../ruby/2.2.0/gems/ffi-1.9.8/lib/ffi.rb | 32 - .../gems/ffi-1.9.8/lib/ffi/autopointer.rb | 194 - .../2.2.0/gems/ffi-1.9.8/lib/ffi/buffer.rb | 4 - .../2.2.0/gems/ffi-1.9.8/lib/ffi/callback.rb | 4 - .../ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/enum.rb | 179 - .../2.2.0/gems/ffi-1.9.8/lib/ffi/errno.rb | 43 - .../ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/ffi.rb | 44 - .../ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/io.rb | 62 - .../2.2.0/gems/ffi-1.9.8/lib/ffi/library.rb | 519 - .../gems/ffi-1.9.8/lib/ffi/managedstruct.rb | 84 - .../gems/ffi-1.9.8/lib/ffi/memorypointer.rb | 1 - .../2.2.0/gems/ffi-1.9.8/lib/ffi/platform.rb | 153 - .../lib/ffi/platform/aarch64-linux/types.conf | 104 - .../lib/ffi/platform/arm-linux/types.conf | 104 - .../lib/ffi/platform/i386-cygwin/types.conf | 3 - .../lib/ffi/platform/i386-darwin/types.conf | 100 - .../lib/ffi/platform/i386-freebsd/types.conf | 152 - .../lib/ffi/platform/i386-gnu/types.conf | 107 - .../lib/ffi/platform/i386-linux/types.conf | 103 - .../lib/ffi/platform/i386-netbsd/types.conf | 126 - .../lib/ffi/platform/i386-openbsd/types.conf | 128 - .../lib/ffi/platform/i386-solaris/types.conf | 122 - .../lib/ffi/platform/i386-windows/types.conf | 105 - .../lib/ffi/platform/ia64-linux/types.conf | 104 - .../lib/ffi/platform/mips-linux/types.conf | 102 - .../ffi/platform/mips64el-linux/types.conf | 104 - .../lib/ffi/platform/mipsel-linux/types.conf | 102 - .../lib/ffi/platform/powerpc-aix/types.conf | 180 - .../ffi/platform/powerpc-darwin/types.conf | 100 - .../lib/ffi/platform/powerpc-linux/types.conf | 100 - .../ffi/platform/powerpc64-linux/types.conf | 104 - .../lib/ffi/platform/s390-linux/types.conf | 102 - .../lib/ffi/platform/s390x-linux/types.conf | 102 - .../lib/ffi/platform/sparc-linux/types.conf | 102 - .../lib/ffi/platform/sparc-solaris/types.conf | 128 - .../ffi/platform/sparcv9-solaris/types.conf | 128 - .../lib/ffi/platform/x86_64-cygwin/types.conf | 3 - .../lib/ffi/platform/x86_64-darwin/types.conf | 126 - .../ffi/platform/x86_64-freebsd/types.conf | 128 - .../lib/ffi/platform/x86_64-linux/types.conf | 102 - .../lib/ffi/platform/x86_64-netbsd/types.conf | 128 - .../ffi/platform/x86_64-openbsd/types.conf | 128 - .../ffi/platform/x86_64-solaris/types.conf | 122 - .../ffi/platform/x86_64-windows/types.conf | 27 - .../2.2.0/gems/ffi-1.9.8/lib/ffi/pointer.rb | 134 - .../2.2.0/gems/ffi-1.9.8/lib/ffi/struct.rb | 373 - .../lib/ffi/struct_layout_builder.rb | 222 - .../lib/ffi/tools/const_generator.rb | 229 - .../gems/ffi-1.9.8/lib/ffi/tools/generator.rb | 60 - .../ffi-1.9.8/lib/ffi/tools/generator_task.rb | 36 - .../lib/ffi/tools/struct_generator.rb | 194 - .../lib/ffi/tools/types_generator.rb | 135 - .../2.2.0/gems/ffi-1.9.8/lib/ffi/types.rb | 190 - .../2.2.0/gems/ffi-1.9.8/lib/ffi/union.rb | 43 - .../2.2.0/gems/ffi-1.9.8/lib/ffi/variadic.rb | 78 - .../2.2.0/gems/ffi-1.9.8/lib/ffi/version.rb | 4 - .../2.2.0/gems/ffi-1.9.8/lib/ffi_c.bundle | Bin 178444 -> 0 bytes .../2.2.0/gems/ffi-1.9.8/libtest/Benchmark.c | 52 - .../2.2.0/gems/ffi-1.9.8/libtest/BoolTest.c | 34 - .../2.2.0/gems/ffi-1.9.8/libtest/BufferTest.c | 31 - .../gems/ffi-1.9.8/libtest/ClosureTest.c | 205 - .../2.2.0/gems/ffi-1.9.8/libtest/EnumTest.c | 51 - .../gems/ffi-1.9.8/libtest/FunctionTest.c | 70 - .../2.2.0/gems/ffi-1.9.8/libtest/GNUmakefile | 149 - .../gems/ffi-1.9.8/libtest/GlobalVariable.c | 62 - .../gems/ffi-1.9.8/libtest/LastErrorTest.c | 21 - .../2.2.0/gems/ffi-1.9.8/libtest/NumberTest.c | 132 - .../gems/ffi-1.9.8/libtest/PointerTest.c | 63 - .../gems/ffi-1.9.8/libtest/ReferenceTest.c | 23 - .../2.2.0/gems/ffi-1.9.8/libtest/StringTest.c | 34 - .../2.2.0/gems/ffi-1.9.8/libtest/StructTest.c | 243 - .../2.2.0/gems/ffi-1.9.8/libtest/UnionTest.c | 43 - .../gems/ffi-1.9.8/libtest/VariadicTest.c | 62 - .../gems/ffi-1.9.8/spec/ffi/LICENSE.SPECS | 22 - .../ffi-1.9.8/spec/ffi/async_callback_spec.rb | 35 - .../gems/ffi-1.9.8/spec/ffi/bool_spec.rb | 32 - .../gems/ffi-1.9.8/spec/ffi/buffer_spec.rb | 279 - .../gems/ffi-1.9.8/spec/ffi/callback_spec.rb | 773 - .../ffi-1.9.8/spec/ffi/custom_param_type.rb | 37 - .../ffi-1.9.8/spec/ffi/custom_type_spec.rb | 74 - .../2.2.0/gems/ffi-1.9.8/spec/ffi/dup_spec.rb | 52 - .../gems/ffi-1.9.8/spec/ffi/enum_spec.rb | 423 - .../gems/ffi-1.9.8/spec/ffi/errno_spec.rb | 20 - .../2.2.0/gems/ffi-1.9.8/spec/ffi/ffi_spec.rb | 28 - .../ffi-1.9.8/spec/ffi/fixtures/Benchmark.c | 52 - .../ffi-1.9.8/spec/ffi/fixtures/BoolTest.c | 34 - .../ffi-1.9.8/spec/ffi/fixtures/BufferTest.c | 31 - .../ffi-1.9.8/spec/ffi/fixtures/ClosureTest.c | 190 - .../ffi-1.9.8/spec/ffi/fixtures/EnumTest.c | 51 - .../spec/ffi/fixtures/FunctionTest.c | 58 - .../ffi-1.9.8/spec/ffi/fixtures/GNUmakefile | 149 - .../spec/ffi/fixtures/GlobalVariable.c | 62 - .../spec/ffi/fixtures/LastErrorTest.c | 21 - .../ffi-1.9.8/spec/ffi/fixtures/NumberTest.c | 132 - .../ffi-1.9.8/spec/ffi/fixtures/PointerTest.c | 63 - .../spec/ffi/fixtures/ReferenceTest.c | 23 - .../ffi-1.9.8/spec/ffi/fixtures/StringTest.c | 34 - .../ffi-1.9.8/spec/ffi/fixtures/StructTest.c | 243 - .../ffi-1.9.8/spec/ffi/fixtures/UnionTest.c | 43 - .../spec/ffi/fixtures/VariadicTest.c | 99 - .../ffi-1.9.8/spec/ffi/fixtures/classes.rb | 438 - .../gems/ffi-1.9.8/spec/ffi/function_spec.rb | 92 - .../2.2.0/gems/ffi-1.9.8/spec/ffi/io_spec.rb | 16 - .../gems/ffi-1.9.8/spec/ffi/library_spec.rb | 276 - .../gems/ffi-1.9.8/spec/ffi/long_double.rb | 30 - .../ffi-1.9.8/spec/ffi/managed_struct_spec.rb | 67 - .../ffi-1.9.8/spec/ffi/memorypointer_spec.rb | 78 - .../gems/ffi-1.9.8/spec/ffi/number_spec.rb | 247 - .../gems/ffi-1.9.8/spec/ffi/platform_spec.rb | 114 - .../gems/ffi-1.9.8/spec/ffi/pointer_spec.rb | 275 - .../spec/ffi/rbx/attach_function_spec.rb | 33 - .../spec/ffi/rbx/memory_pointer_spec.rb | 130 - .../ffi-1.9.8/spec/ffi/rbx/spec_helper.rb | 6 - .../ffi-1.9.8/spec/ffi/rbx/struct_spec.rb | 18 - .../gems/ffi-1.9.8/spec/ffi/spec_helper.rb | 95 - .../gems/ffi-1.9.8/spec/ffi/string_spec.rb | 118 - .../gems/ffi-1.9.8/spec/ffi/strptr_spec.rb | 50 - .../ffi-1.9.8/spec/ffi/struct_by_ref_spec.rb | 43 - .../spec/ffi/struct_callback_spec.rb | 69 - .../spec/ffi/struct_initialize_spec.rb | 35 - .../ffi-1.9.8/spec/ffi/struct_packed_spec.rb | 50 - .../gems/ffi-1.9.8/spec/ffi/struct_spec.rb | 882 - .../gems/ffi-1.9.8/spec/ffi/typedef_spec.rb | 91 - .../gems/ffi-1.9.8/spec/ffi/union_spec.rb | 67 - .../gems/ffi-1.9.8/spec/ffi/variadic_spec.rb | 113 - .../ruby/2.2.0/gems/ffi-1.9.8/spec/spec.opts | 3 - .../guides_style_18f-0.0.1/CONTRIBUTING.md | 19 - .../gems/guides_style_18f-0.0.1/LICENSE.md | 31 - .../gems/guides_style_18f-0.0.1/README.md | 100 - .../assets/favicons/18f-center-114.png | Bin 2483 -> 0 bytes .../assets/favicons/18f-center-144.png | Bin 2802 -> 0 bytes .../assets/favicons/18f-center-16.png | Bin 465 -> 0 bytes .../assets/favicons/18f-center-192.png | Bin 1122 -> 0 bytes .../assets/favicons/18f-center-200.png | Bin 1157 -> 0 bytes .../assets/favicons/18f-center-32.png | Bin 851 -> 0 bytes .../assets/favicons/18f-center-57.png | Bin 1382 -> 0 bytes .../assets/favicons/18f-center-72.png | Bin 1527 -> 0 bytes .../assets/favicons/favicon.ico | Bin 51262 -> 0 bytes .../assets/favicons/favicon.png | Bin 2309 -> 0 bytes .../assets/img/18f-logo.png | Bin 1394 -> 0 bytes .../assets/js/accordion.js | 53 - .../assets/js/html5shiv.js | 301 - .../assets/js/respond.js | 341 - .../lib/guides_style_18f.rb | 8 - .../lib/guides_style_18f/assets.rb | 35 - .../lib/guides_style_18f/generator.rb | 12 - .../lib/guides_style_18f/includes.rb | 19 - .../guides_style_18f/includes/analytics.html | 16 - .../lib/guides_style_18f/includes/footer.html | 9 - .../lib/guides_style_18f/includes/header.html | 21 - .../guides_style_18f/includes/scripts.html | 5 - .../guides_style_18f/includes/sidebar.html | 30 - .../lib/guides_style_18f/layouts.rb | 37 - .../lib/guides_style_18f/layouts/default.html | 40 - .../lib/guides_style_18f/sass.rb | 12 - .../sass/_guides_style_18f_custom.scss | 50 - .../sass/_guides_style_18f_main.scss | 606 - .../sass/_guides_style_18f_syntax.scss | 60 - .../sass/guides_style_18f.scss | 3 - .../lib/guides_style_18f/version.rb | 5 - .../ruby/2.2.0/gems/hitimes-1.2.2/.travis.yml | 11 - .../2.2.0/gems/hitimes-1.2.2/CONTRIBUTING.md | 45 - .../ruby/2.2.0/gems/hitimes-1.2.2/HISTORY.md | 97 - .../ruby/2.2.0/gems/hitimes-1.2.2/LICENSE | 16 - .../2.2.0/gems/hitimes-1.2.2/Manifest.txt | 45 - .../ruby/2.2.0/gems/hitimes-1.2.2/README.md | 163 - .../ruby/2.2.0/gems/hitimes-1.2.2/Rakefile | 25 - .../gems/hitimes-1.2.2/examples/benchmarks.rb | 113 - .../gems/hitimes-1.2.2/examples/stats.rb | 31 - .../c/.RUBYARCHDIR.-.hitimes.-.2.2.time | 0 .../gems/hitimes-1.2.2/ext/hitimes/c/Makefile | 260 - .../hitimes-1.2.2/ext/hitimes/c/extconf.rb | 24 - .../ext/hitimes/c/hitimes.bundle | Bin 19504 -> 0 bytes .../hitimes-1.2.2/ext/hitimes/c/hitimes.c | 21 - .../hitimes-1.2.2/ext/hitimes/c/hitimes.o | Bin 2588 -> 0 bytes .../hitimes/c/hitimes_instant_clock_gettime.c | 28 - .../hitimes/c/hitimes_instant_clock_gettime.o | Bin 1008 -> 0 bytes .../ext/hitimes/c/hitimes_instant_osx.c | 45 - .../ext/hitimes/c/hitimes_instant_osx.o | Bin 3428 -> 0 bytes .../ext/hitimes/c/hitimes_instant_windows.c | 27 - .../ext/hitimes/c/hitimes_instant_windows.o | Bin 1004 -> 0 bytes .../ext/hitimes/c/hitimes_interval.c | 370 - .../ext/hitimes/c/hitimes_interval.h | 73 - .../ext/hitimes/c/hitimes_interval.o | Bin 14480 -> 0 bytes .../ext/hitimes/c/hitimes_stats.c | 269 - .../ext/hitimes/c/hitimes_stats.h | 30 - .../ext/hitimes/c/hitimes_stats.o | Bin 11112 -> 0 bytes .../ext/hitimes/java/src/hitimes/Hitimes.java | 54 - .../java/src/hitimes/HitimesInterval.java | 181 - .../java/src/hitimes/HitimesService.java | 16 - .../java/src/hitimes/HitimesStats.java | 112 - .../2.2.0/gems/hitimes-1.2.2/lib/hitimes.rb | 47 - .../lib/hitimes/2.2/hitimes.bundle | Bin 19504 -> 0 bytes .../gems/hitimes-1.2.2/lib/hitimes/metric.rb | 118 - .../lib/hitimes/mutexed_stats.rb | 32 - .../gems/hitimes-1.2.2/lib/hitimes/paths.rb | 53 - .../gems/hitimes-1.2.2/lib/hitimes/stats.rb | 58 - .../hitimes-1.2.2/lib/hitimes/timed_metric.rb | 176 - .../lib/hitimes/timed_value_metric.rb | 233 - .../hitimes-1.2.2/lib/hitimes/value_metric.rb | 71 - .../gems/hitimes-1.2.2/lib/hitimes/version.rb | 8 - .../gems/hitimes-1.2.2/spec/hitimes_spec.rb | 14 - .../gems/hitimes-1.2.2/spec/interval_spec.rb | 136 - .../gems/hitimes-1.2.2/spec/metric_spec.rb | 28 - .../hitimes-1.2.2/spec/mutex_stats_spec.rb | 36 - .../gems/hitimes-1.2.2/spec/paths_spec.rb | 11 - .../gems/hitimes-1.2.2/spec/spec_helper.rb | 11 - .../gems/hitimes-1.2.2/spec/stats_spec.rb | 98 - .../hitimes-1.2.2/spec/timed_metric_spec.rb | 155 - .../spec/timed_value_metric_spec.rb | 171 - .../hitimes-1.2.2/spec/value_metric_spec.rb | 108 - .../gems/hitimes-1.2.2/spec/version_spec.rb | 7 - .../gems/hitimes-1.2.2/tasks/default.rake | 276 - .../gems/hitimes-1.2.2/tasks/extension.rake | 38 - .../2.2.0/gems/hitimes-1.2.2/tasks/this.rb | 214 - .../ruby/2.2.0/gems/jekyll-2.5.3/LICENSE | 21 - .../2.2.0/gems/jekyll-2.5.3/README.markdown | 36 - .../ruby/2.2.0/gems/jekyll-2.5.3/bin/jekyll | 42 - .../2.2.0/gems/jekyll-2.5.3/lib/jekyll.rb | 172 - .../gems/jekyll-2.5.3/lib/jekyll/cleaner.rb | 95 - .../jekyll-2.5.3/lib/jekyll/collection.rb | 188 - .../gems/jekyll-2.5.3/lib/jekyll/command.rb | 66 - .../jekyll-2.5.3/lib/jekyll/commands/build.rb | 75 - .../jekyll-2.5.3/lib/jekyll/commands/docs.rb | 30 - .../lib/jekyll/commands/doctor.rb | 84 - .../jekyll-2.5.3/lib/jekyll/commands/help.rb | 33 - .../jekyll-2.5.3/lib/jekyll/commands/new.rb | 82 - .../jekyll-2.5.3/lib/jekyll/commands/serve.rb | 136 - .../jekyll-2.5.3/lib/jekyll/configuration.rb | 276 - .../gems/jekyll-2.5.3/lib/jekyll/converter.rb | 48 - .../lib/jekyll/converters/identity.rb | 21 - .../lib/jekyll/converters/markdown.rb | 83 - .../converters/markdown/kramdown_parser.rb | 29 - .../converters/markdown/maruku_parser.rb | 55 - .../converters/markdown/rdiscount_parser.rb | 33 - .../converters/markdown/redcarpet_parser.rb | 103 - .../lib/jekyll/converters/textile.rb | 56 - .../jekyll-2.5.3/lib/jekyll/convertible.rb | 268 - .../jekyll-2.5.3/lib/jekyll/deprecator.rb | 61 - .../gems/jekyll-2.5.3/lib/jekyll/document.rb | 280 - .../gems/jekyll-2.5.3/lib/jekyll/draft.rb | 40 - .../jekyll-2.5.3/lib/jekyll/entry_filter.rb | 72 - .../gems/jekyll-2.5.3/lib/jekyll/errors.rb | 9 - .../gems/jekyll-2.5.3/lib/jekyll/excerpt.rb | 114 - .../gems/jekyll-2.5.3/lib/jekyll/filters.rb | 351 - .../lib/jekyll/frontmatter_defaults.rb | 180 - .../gems/jekyll-2.5.3/lib/jekyll/generator.rb | 4 - .../gems/jekyll-2.5.3/lib/jekyll/layout.rb | 45 - .../jekyll-2.5.3/lib/jekyll/layout_reader.rb | 53 - .../lib/jekyll/liquid_extensions.rb | 22 - .../jekyll-2.5.3/lib/jekyll/log_adapter.rb | 102 - .../gems/jekyll-2.5.3/lib/jekyll/mime.types | 95 - .../gems/jekyll-2.5.3/lib/jekyll/page.rb | 167 - .../gems/jekyll-2.5.3/lib/jekyll/plugin.rb | 77 - .../jekyll-2.5.3/lib/jekyll/plugin_manager.rb | 92 - .../gems/jekyll-2.5.3/lib/jekyll/post.rb | 313 - .../gems/jekyll-2.5.3/lib/jekyll/publisher.rb | 21 - .../jekyll-2.5.3/lib/jekyll/related_posts.rb | 58 - .../gems/jekyll-2.5.3/lib/jekyll/renderer.rb | 154 - .../gems/jekyll-2.5.3/lib/jekyll/site.rb | 511 - .../jekyll-2.5.3/lib/jekyll/static_file.rb | 104 - .../gems/jekyll-2.5.3/lib/jekyll/stevenson.rb | 58 - .../jekyll-2.5.3/lib/jekyll/tags/highlight.rb | 125 - .../jekyll-2.5.3/lib/jekyll/tags/include.rb | 171 - .../jekyll-2.5.3/lib/jekyll/tags/post_url.rb | 91 - .../2.2.0/gems/jekyll-2.5.3/lib/jekyll/url.rb | 122 - .../gems/jekyll-2.5.3/lib/jekyll/utils.rb | 125 - .../gems/jekyll-2.5.3/lib/jekyll/version.rb | 3 - .../lib/jekyll-coffeescript.rb | 9 - .../lib/jekyll-coffeescript/version.rb | 5 - .../lib/jekyll/converters/coffeescript.rb | 20 - .../2.2.0/gems/jekyll-gist-1.2.1/.gitignore | 22 - .../ruby/2.2.0/gems/jekyll-gist-1.2.1/.rspec | 2 - .../2.2.0/gems/jekyll-gist-1.2.1/.travis.yml | 8 - .../ruby/2.2.0/gems/jekyll-gist-1.2.1/Gemfile | 4 - .../gems/jekyll-gist-1.2.1/History.markdown | 23 - .../2.2.0/gems/jekyll-gist-1.2.1/LICENSE.txt | 22 - .../2.2.0/gems/jekyll-gist-1.2.1/README.md | 49 - .../2.2.0/gems/jekyll-gist-1.2.1/Rakefile | 2 - .../jekyll-gist-1.2.1/jekyll-gist.gemspec | 24 - .../gems/jekyll-gist-1.2.1/lib/jekyll-gist.rb | 7 - .../lib/jekyll-gist/gist_tag.rb | 49 - .../lib/jekyll-gist/version.rb | 5 - .../gems/jekyll-gist-1.2.1/script/bootstrap | 3 - .../gems/jekyll-gist-1.2.1/script/cibuild | 3 - .../jekyll-gist-1.2.1/spec/gist_tag_spec.rb | 90 - .../jekyll-gist-1.2.1/spec/spec_helper.rb | 43 - .../gems/jekyll-paginate-1.1.0/.gitignore | 16 - .../2.2.0/gems/jekyll-paginate-1.1.0/.rspec | 2 - .../gems/jekyll-paginate-1.1.0/.travis.yml | 21 - .../2.2.0/gems/jekyll-paginate-1.1.0/Gemfile | 4 - .../jekyll-paginate-1.1.0/History.markdown | 9 - .../gems/jekyll-paginate-1.1.0/LICENSE.txt | 22 - .../gems/jekyll-paginate-1.1.0/README.md | 31 - .../2.2.0/gems/jekyll-paginate-1.1.0/Rakefile | 1 - .../jekyll-paginate.gemspec | 24 - .../lib/jekyll-paginate.rb | 8 - .../lib/jekyll-paginate/pager.rb | 137 - .../lib/jekyll-paginate/pagination.rb | 86 - .../lib/jekyll-paginate/version.rb | 5 - .../jekyll-paginate-1.1.0/script/bootstrap | 3 - .../gems/jekyll-paginate-1.1.0/script/cibuild | 3 - .../jekyll-paginate-1.1.0/script/unbundle | 8 - .../jekyll-paginate-1.1.0/spec/pager_spec.rb | 134 - .../spec/pagination_spec.rb | 0 .../spec/source/_posts/2014-05-20-blah.html | 0 .../spec/source/_posts/2014-05-21-bleh.html | 0 .../spec/source/_posts/2014-05-22-humor.html | 0 .../source/_posts/2014-05-23-hey-there.html | 0 .../source/_posts/2014-05-24-whateva.html | 0 .../spec/source/_posts/2014-05-25-oh-yes.html | 0 .../spec/source/contacts/index.html | 2 - .../spec/source/index.html | 2 - .../jekyll-paginate-1.1.0/spec/spec_helper.rb | 97 - .../lib/jekyll-sass-converter.rb | 6 - .../lib/jekyll-sass-converter/version.rb | 3 - .../lib/jekyll/converters/sass.rb | 20 - .../lib/jekyll/converters/scss.rb | 101 - .../jekyll-watch-1.2.1/lib/jekyll-watch.rb | 2 - .../lib/jekyll/commands/watch.rb | 28 - .../jekyll-watch-1.2.1/lib/jekyll/watcher.rb | 97 - .../ruby/2.2.0/gems/kramdown-1.7.0/AUTHORS | 1 - .../2.2.0/gems/kramdown-1.7.0/CONTRIBUTERS | 40 - .../ruby/2.2.0/gems/kramdown-1.7.0/COPYING | 30 - .../ruby/2.2.0/gems/kramdown-1.7.0/README.md | 68 - .../ruby/2.2.0/gems/kramdown-1.7.0/Rakefile | 270 - .../ruby/2.2.0/gems/kramdown-1.7.0/VERSION | 1 - .../kramdown-1.7.0/benchmark/benchmark.rb | 43 - .../kramdown-1.7.0/benchmark/benchmark.sh | 74 - .../kramdown-1.7.0/benchmark/generate_data.rb | 119 - .../kramdown-1.7.0/benchmark/mdbasics.text | 306 - .../kramdown-1.7.0/benchmark/mdsyntax.text | 888 - .../gems/kramdown-1.7.0/benchmark/testing.sh | 12 - .../gems/kramdown-1.7.0/benchmark/timing.sh | 10 - .../2.2.0/gems/kramdown-1.7.0/bin/kramdown | 67 - .../data/kramdown/document.html | 22 - .../data/kramdown/document.latex | 50 - .../gems/kramdown-1.7.0/doc/_design.scss | 441 - .../ruby/2.2.0/gems/kramdown-1.7.0/doc/bg.png | Bin 56156 -> 0 bytes .../gems/kramdown-1.7.0/doc/default.scss | 192 - .../gems/kramdown-1.7.0/doc/default.template | 68 - .../kramdown-1.7.0/doc/documentation.page | 84 - .../kramdown-1.7.0/doc/documentation.template | 29 - .../2.2.0/gems/kramdown-1.7.0/doc/index.page | 109 - .../gems/kramdown-1.7.0/doc/installation.page | 89 - .../gems/kramdown-1.7.0/doc/links.markdown | 6 - .../2.2.0/gems/kramdown-1.7.0/doc/metainfo | 3 - .../2.2.0/gems/kramdown-1.7.0/doc/news.feed | 9 - .../2.2.0/gems/kramdown-1.7.0/doc/news.page | 29 - .../gems/kramdown-1.7.0/doc/options.page | 49 - .../gems/kramdown-1.7.0/doc/quickref.page | 599 - .../gems/kramdown-1.7.0/doc/sidebar.template | 19 - .../gems/kramdown-1.7.0/doc/sitemap.sitemap | 5 - .../2.2.0/gems/kramdown-1.7.0/doc/syntax.page | 1737 -- .../2.2.0/gems/kramdown-1.7.0/doc/tests.page | 104 - .../2.2.0/gems/kramdown-1.7.0/doc/virtual | 14 - .../2.2.0/gems/kramdown-1.7.0/lib/kramdown.rb | 10 - .../lib/kramdown/compatibility.rb | 36 - .../kramdown-1.7.0/lib/kramdown/converter.rb | 66 - .../lib/kramdown/converter/base.rb | 260 - .../lib/kramdown/converter/html.rb | 460 - .../lib/kramdown/converter/kramdown.rb | 429 - .../lib/kramdown/converter/latex.rb | 613 - .../converter/math_engine/itex2mml.rb | 39 - .../kramdown/converter/math_engine/mathjax.rb | 48 - .../converter/math_engine/mathjaxnode.rb | 48 - .../kramdown/converter/math_engine/ritex.rb | 38 - .../lib/kramdown/converter/pdf.rb | 625 - .../kramdown/converter/remove_html_tags.rb | 55 - .../kramdown/converter/syntax_highlighter.rb | 53 - .../converter/syntax_highlighter/coderay.rb | 78 - .../converter/syntax_highlighter/minted.rb | 35 - .../converter/syntax_highlighter/rouge.rb | 37 - .../lib/kramdown/converter/toc.rb | 69 - .../kramdown-1.7.0/lib/kramdown/document.rb | 144 - .../kramdown-1.7.0/lib/kramdown/element.rb | 518 - .../gems/kramdown-1.7.0/lib/kramdown/error.rb | 17 - .../kramdown-1.7.0/lib/kramdown/options.rb | 585 - .../kramdown-1.7.0/lib/kramdown/parser.rb | 27 - .../lib/kramdown/parser/base.rb | 134 - .../kramdown-1.7.0/lib/kramdown/parser/gfm.rb | 63 - .../lib/kramdown/parser/html.rb | 590 - .../lib/kramdown/parser/kramdown.rb | 362 - .../kramdown/parser/kramdown/abbreviation.rb | 75 - .../lib/kramdown/parser/kramdown/autolink.rb | 37 - .../kramdown/parser/kramdown/blank_line.rb | 30 - .../parser/kramdown/block_boundary.rb | 33 - .../kramdown/parser/kramdown/blockquote.rb | 39 - .../lib/kramdown/parser/kramdown/codeblock.rb | 55 - .../lib/kramdown/parser/kramdown/codespan.rb | 44 - .../lib/kramdown/parser/kramdown/emphasis.rb | 61 - .../lib/kramdown/parser/kramdown/eob.rb | 26 - .../kramdown/parser/kramdown/escaped_chars.rb | 25 - .../kramdown/parser/kramdown/extensions.rb | 202 - .../lib/kramdown/parser/kramdown/footnote.rb | 63 - .../lib/kramdown/parser/kramdown/header.rb | 59 - .../parser/kramdown/horizontal_rule.rb | 27 - .../lib/kramdown/parser/kramdown/html.rb | 163 - .../kramdown/parser/kramdown/html_entity.rb | 33 - .../kramdown/parser/kramdown/line_break.rb | 25 - .../lib/kramdown/parser/kramdown/link.rb | 143 - .../lib/kramdown/parser/kramdown/list.rb | 248 - .../lib/kramdown/parser/kramdown/math.rb | 54 - .../lib/kramdown/parser/kramdown/paragraph.rb | 51 - .../kramdown/parser/kramdown/smart_quotes.rb | 174 - .../lib/kramdown/parser/kramdown/table.rb | 171 - .../parser/kramdown/typographic_symbol.rb | 44 - .../lib/kramdown/parser/markdown.rb | 56 - .../gems/kramdown-1.7.0/lib/kramdown/utils.rb | 58 - .../lib/kramdown/utils/configurable.rb | 44 - .../lib/kramdown/utils/entities.rb | 347 - .../kramdown-1.7.0/lib/kramdown/utils/html.rb | 77 - .../lib/kramdown/utils/ordered_hash.rb | 87 - .../lib/kramdown/utils/string_scanner.rb | 82 - .../lib/kramdown/utils/unidecoder.rb | 48 - .../kramdown-1.7.0/lib/kramdown/version.rb | 15 - .../gems/kramdown-1.7.0/man/man1/kramdown.1 | 466 - .../ruby/2.2.0/gems/kramdown-1.7.0/setup.rb | 1585 -- .../gems/kramdown-1.7.0/test/run_tests.rb | 46 - .../gems/kramdown-1.7.0/test/test_files.rb | 352 - .../gems/kramdown-1.7.0/test/test_location.rb | 219 - .../test/test_string_scanner_kramdown.rb | 30 - .../testcases/block/01_blank_line/spaces.html | 1 - .../testcases/block/01_blank_line/spaces.text | 3 - .../testcases/block/01_blank_line/tabs.html | 1 - .../testcases/block/01_blank_line/tabs.text | 6 - .../testcases/block/02_eob/beginning.html | 1 - .../testcases/block/02_eob/beginning.text | 3 - .../test/testcases/block/02_eob/end.html | 1 - .../test/testcases/block/02_eob/end.text | 3 - .../test/testcases/block/02_eob/middle.html | 1 - .../test/testcases/block/02_eob/middle.text | 5 - .../block/03_paragraph/indented.html | 18 - .../block/03_paragraph/indented.html.gfm | 18 - .../block/03_paragraph/indented.text | 19 - .../block/03_paragraph/no_newline_at_end.html | 5 - .../block/03_paragraph/no_newline_at_end.text | 5 - .../block/03_paragraph/one_para.html | 1 - .../block/03_paragraph/one_para.text | 1 - .../block/03_paragraph/two_para.html | 4 - .../block/03_paragraph/two_para.text | 4 - .../testcases/block/04_header/atx_header.html | 51 - .../testcases/block/04_header/atx_header.text | 48 - .../atx_header_no_newline_at_end.html | 1 - .../atx_header_no_newline_at_end.text | 1 - .../block/04_header/header_type_offset.html | 11 - .../04_header/header_type_offset.kramdown | 12 - .../block/04_header/header_type_offset.latex | 12 - .../04_header/header_type_offset.options | 2 - .../block/04_header/header_type_offset.text | 13 - .../block/04_header/setext_header.html | 32 - .../block/04_header/setext_header.text | 39 - .../setext_header_no_newline_at_end.html | 1 - .../setext_header_no_newline_at_end.text | 2 - .../block/04_header/with_auto_id_prefix.html | 3 - .../04_header/with_auto_id_prefix.options | 2 - .../block/04_header/with_auto_id_prefix.text | 3 - .../04_header/with_auto_id_stripping.html | 1 - .../04_header/with_auto_id_stripping.options | 1 - .../04_header/with_auto_id_stripping.text | 1 - .../block/04_header/with_auto_ids.html | 21 - .../block/04_header/with_auto_ids.options | 2 - .../block/04_header/with_auto_ids.text | 24 - .../block/05_blockquote/indented.html | 25 - .../block/05_blockquote/indented.text | 14 - .../testcases/block/05_blockquote/lazy.html | 34 - .../testcases/block/05_blockquote/lazy.text | 20 - .../testcases/block/05_blockquote/nested.html | 10 - .../testcases/block/05_blockquote/nested.text | 6 - .../05_blockquote/no_newline_at_end.html | 4 - .../05_blockquote/no_newline_at_end.text | 2 - .../block/05_blockquote/very_long_line.html | 3 - .../block/05_blockquote/very_long_line.text | 1 - .../block/05_blockquote/with_code_blocks.html | 15 - .../block/05_blockquote/with_code_blocks.text | 11 - .../06_codeblock/disable-highlighting.html | 4 - .../06_codeblock/disable-highlighting.options | 1 - .../06_codeblock/disable-highlighting.text | 4 - .../testcases/block/06_codeblock/error.html | 4 - .../testcases/block/06_codeblock/error.text | 4 - .../highlighting-minted-with-opts.latex | 9 - .../highlighting-minted-with-opts.options | 4 - .../highlighting-minted-with-opts.text | 5 - .../06_codeblock/highlighting-minted.latex | 8 - .../06_codeblock/highlighting-minted.options | 3 - .../06_codeblock/highlighting-minted.text | 4 - .../block/06_codeblock/highlighting-opts.html | 6 - .../06_codeblock/highlighting-opts.options | 7 - .../block/06_codeblock/highlighting-opts.text | 4 - .../06_codeblock/highlighting-rouge.html | 6 - .../06_codeblock/highlighting-rouge.options | 3 - .../06_codeblock/highlighting-rouge.text | 4 - .../block/06_codeblock/highlighting.html | 6 - .../block/06_codeblock/highlighting.options | 5 - .../block/06_codeblock/highlighting.text | 4 - .../block/06_codeblock/issue_gh45.html | 164 - .../block/06_codeblock/issue_gh45.test | 188 - .../testcases/block/06_codeblock/lazy.html | 4 - .../testcases/block/06_codeblock/lazy.text | 5 - .../block/06_codeblock/no_newline_at_end.html | 2 - .../block/06_codeblock/no_newline_at_end.text | 1 - .../06_codeblock/no_newline_at_end_1.html | 2 - .../06_codeblock/no_newline_at_end_1.text | 2 - .../testcases/block/06_codeblock/normal.html | 13 - .../testcases/block/06_codeblock/normal.text | 10 - .../block/06_codeblock/tilde_syntax.html | 7 - .../block/06_codeblock/tilde_syntax.text | 9 - .../block/06_codeblock/whitespace.html | 3 - .../block/06_codeblock/whitespace.text | 3 - .../block/06_codeblock/with_blank_line.html | 13 - .../block/06_codeblock/with_blank_line.text | 12 - .../block/06_codeblock/with_eob_marker.html | 6 - .../block/06_codeblock/with_eob_marker.text | 5 - .../block/06_codeblock/with_ial.html | 6 - .../block/06_codeblock/with_ial.text | 5 - .../with_lang_in_fenced_block.html | 24 - .../with_lang_in_fenced_block.options | 2 - .../with_lang_in_fenced_block.text | 33 - ...h_lang_in_fenced_block_name_with_dash.html | 3 - ...ang_in_fenced_block_name_with_dash.options | 2 - ...h_lang_in_fenced_block_name_with_dash.text | 4 - .../block/07_horizontal_rule/error.html | 7 - .../block/07_horizontal_rule/error.html.19 | 7 - .../block/07_horizontal_rule/error.text | 7 - .../block/07_horizontal_rule/normal.html | 19 - .../block/07_horizontal_rule/normal.text | 20 - .../block/07_horizontal_rule/sepspaces.html | 3 - .../block/07_horizontal_rule/sepspaces.text | 3 - .../block/07_horizontal_rule/septabs.html | 3 - .../block/07_horizontal_rule/septabs.text | 3 - .../testcases/block/08_list/escaping.html | 17 - .../testcases/block/08_list/escaping.text | 17 - .../testcases/block/08_list/item_ial.html | 10 - .../testcases/block/08_list/item_ial.text | 8 - .../test/testcases/block/08_list/lazy.html | 39 - .../test/testcases/block/08_list/lazy.text | 29 - .../testcases/block/08_list/list_and_hr.html | 9 - .../testcases/block/08_list/list_and_hr.text | 5 - .../block/08_list/list_and_others.html | 40 - .../block/08_list/list_and_others.text | 26 - .../test/testcases/block/08_list/mixed.html | 117 - .../test/testcases/block/08_list/mixed.text | 66 - .../test/testcases/block/08_list/nested.html | 17 - .../test/testcases/block/08_list/nested.text | 7 - .../block/08_list/other_first_element.html | 39 - .../block/08_list/other_first_element.text | 18 - .../testcases/block/08_list/simple_ol.html | 19 - .../testcases/block/08_list/simple_ol.text | 13 - .../testcases/block/08_list/simple_ul.html | 48 - .../testcases/block/08_list/simple_ul.text | 36 - .../testcases/block/08_list/single_item.html | 3 - .../testcases/block/08_list/single_item.text | 1 - .../block/08_list/special_cases.html | 62 - .../block/08_list/special_cases.text | 40 - .../test/testcases/block/09_html/comment.html | 18 - .../test/testcases/block/09_html/comment.text | 15 - .../block/09_html/content_model/deflists.html | 6 - .../09_html/content_model/deflists.options | 1 - .../block/09_html/content_model/deflists.text | 6 - .../block/09_html/content_model/tables.html | 14 - .../09_html/content_model/tables.options | 1 - .../block/09_html/content_model/tables.text | 14 - .../block/09_html/html5_attributes.html | 13 - .../block/09_html/html5_attributes.text | 13 - .../block/09_html/html_after_block.html | 7 - .../block/09_html/html_after_block.text | 5 - .../block/09_html/html_and_codeblocks.html | 15 - .../block/09_html/html_and_codeblocks.options | 1 - .../block/09_html/html_and_codeblocks.text | 13 - .../block/09_html/html_and_headers.html | 5 - .../block/09_html/html_and_headers.text | 6 - .../block/09_html/html_to_native/code.html | 10 - .../block/09_html/html_to_native/code.text | 9 - .../block/09_html/html_to_native/comment.html | 7 - .../block/09_html/html_to_native/comment.text | 8 - .../09_html/html_to_native/emphasis.html | 6 - .../09_html/html_to_native/emphasis.text | 6 - .../block/09_html/html_to_native/entity.html | 1 - .../block/09_html/html_to_native/entity.text | 1 - .../block/09_html/html_to_native/header.html | 6 - .../09_html/html_to_native/header.options | 2 - .../block/09_html/html_to_native/header.text | 6 - .../block/09_html/html_to_native/list_dl.html | 8 - .../block/09_html/html_to_native/list_dl.text | 8 - .../block/09_html/html_to_native/list_ol.html | 15 - .../block/09_html/html_to_native/list_ol.text | 17 - .../block/09_html/html_to_native/list_ul.html | 19 - .../block/09_html/html_to_native/list_ul.text | 22 - .../block/09_html/html_to_native/options | 1 - .../09_html/html_to_native/paragraph.html | 3 - .../09_html/html_to_native/paragraph.text | 4 - .../09_html/html_to_native/table_normal.html | 12 - .../09_html/html_to_native/table_normal.text | 12 - .../09_html/html_to_native/table_simple.html | 61 - .../09_html/html_to_native/table_simple.text | 71 - .../09_html/html_to_native/typography.html | 1 - .../09_html/html_to_native/typography.html.19 | 1 - .../09_html/html_to_native/typography.text | 1 - .../block/09_html/invalid_html_1.html | 5 - .../block/09_html/invalid_html_1.text | 5 - .../block/09_html/invalid_html_2.html | 5 - .../block/09_html/invalid_html_2.text | 5 - .../block/09_html/markdown_attr.html | 38 - .../block/09_html/markdown_attr.text | 38 - .../testcases/block/09_html/not_parsed.html | 24 - .../testcases/block/09_html/not_parsed.text | 24 - .../testcases/block/09_html/parse_as_raw.html | 35 - .../block/09_html/parse_as_raw.htmlinput | 34 - .../block/09_html/parse_as_raw.options | 1 - .../testcases/block/09_html/parse_as_raw.text | 33 - .../block/09_html/parse_as_span.html | 12 - .../block/09_html/parse_as_span.htmlinput | 12 - .../block/09_html/parse_as_span.options | 1 - .../block/09_html/parse_as_span.text | 9 - .../block/09_html/parse_block_html.html | 21 - .../block/09_html/parse_block_html.options | 1 - .../block/09_html/parse_block_html.text | 17 - .../block/09_html/processing_instruction.html | 13 - .../block/09_html/processing_instruction.text | 12 - .../test/testcases/block/09_html/simple.html | 64 - .../testcases/block/09_html/simple.html.19 | 64 - .../testcases/block/09_html/simple.options | 1 - .../test/testcases/block/09_html/simple.text | 59 - .../testcases/block/09_html/textarea.html | 8 - .../testcases/block/09_html/textarea.text | 8 - .../test/testcases/block/10_ald/simple.html | 2 - .../test/testcases/block/10_ald/simple.text | 8 - .../block/11_ial/auto_id_and_ial.html | 1 - .../block/11_ial/auto_id_and_ial.options | 1 - .../block/11_ial/auto_id_and_ial.text | 2 - .../test/testcases/block/11_ial/nested.html | 11 - .../test/testcases/block/11_ial/nested.text | 15 - .../test/testcases/block/11_ial/simple.html | 29 - .../test/testcases/block/11_ial/simple.text | 41 - .../testcases/block/12_extension/comment.html | 8 - .../testcases/block/12_extension/comment.text | 12 - .../testcases/block/12_extension/ignored.html | 8 - .../testcases/block/12_extension/ignored.text | 8 - .../block/12_extension/nomarkdown.html | 10 - .../block/12_extension/nomarkdown.kramdown | 20 - .../block/12_extension/nomarkdown.latex | 13 - .../block/12_extension/nomarkdown.text | 21 - .../testcases/block/12_extension/options.html | 21 - .../testcases/block/12_extension/options.text | 21 - .../block/12_extension/options2.html | 10 - .../block/12_extension/options2.text | 5 - .../block/12_extension/options3.html | 7 - .../block/12_extension/options3.text | 7 - .../definition_at_beginning.html | 1 - .../definition_at_beginning.text | 1 - .../block/13_definition_list/deflist_ial.html | 4 - .../block/13_definition_list/deflist_ial.text | 4 - .../block/13_definition_list/item_ial.html | 12 - .../block/13_definition_list/item_ial.text | 8 - .../13_definition_list/multiple_terms.html | 13 - .../13_definition_list/multiple_terms.text | 10 - .../block/13_definition_list/no_def_list.html | 2 - .../block/13_definition_list/no_def_list.text | 2 - .../13_definition_list/para_wrapping.html | 10 - .../13_definition_list/para_wrapping.text | 6 - .../13_definition_list/separated_by_eob.html | 8 - .../13_definition_list/separated_by_eob.text | 5 - .../block/13_definition_list/simple.html | 10 - .../block/13_definition_list/simple.text | 10 - .../13_definition_list/styled_terms.html | 4 - .../13_definition_list/styled_terms.text | 2 - .../13_definition_list/too_much_space.html | 3 - .../13_definition_list/too_much_space.text | 4 - .../block/13_definition_list/with_blocks.html | 38 - .../block/13_definition_list/with_blocks.text | 24 - .../test/testcases/block/14_table/errors.html | 8 - .../test/testcases/block/14_table/errors.text | 9 - .../testcases/block/14_table/escaping.html | 52 - .../testcases/block/14_table/escaping.text | 19 - .../test/testcases/block/14_table/footer.html | 65 - .../test/testcases/block/14_table/footer.text | 25 - .../test/testcases/block/14_table/header.html | 96 - .../test/testcases/block/14_table/header.text | 32 - .../testcases/block/14_table/no_table.html | 3 - .../testcases/block/14_table/no_table.text | 3 - .../test/testcases/block/14_table/simple.html | 177 - .../testcases/block/14_table/simple.html.19 | 177 - .../test/testcases/block/14_table/simple.text | 49 - .../block/14_table/table_with_footnote.html | 25 - .../block/14_table/table_with_footnote.latex | 11 - .../block/14_table/table_with_footnote.text | 6 - .../test/testcases/block/15_math/gh_128.html | 2 - .../test/testcases/block/15_math/gh_128.text | 1 - .../testcases/block/15_math/itex2mml.html | 1 - .../testcases/block/15_math/itex2mml.options | 1 - .../testcases/block/15_math/itex2mml.text | 1 - .../block/15_math/mathjax_preview.html | 4 - .../block/15_math/mathjax_preview.options | 2 - .../block/15_math/mathjax_preview.text | 5 - .../block/15_math/mathjax_preview_simple.html | 4 - .../15_math/mathjax_preview_simple.options | 2 - .../block/15_math/mathjax_preview_simple.text | 5 - .../block/15_math/mathjaxnode.html.19 | 27 - .../block/15_math/mathjaxnode.options | 1 - .../testcases/block/15_math/mathjaxnode.text | 1 - .../15_math/mathjaxnode_notexhints.html.19 | 23 - .../15_math/mathjaxnode_notexhints.options | 3 - .../block/15_math/mathjaxnode_notexhints.text | 1 - .../15_math/mathjaxnode_semantics.html.19 | 32 - .../15_math/mathjaxnode_semantics.options | 3 - .../block/15_math/mathjaxnode_semantics.text | 1 - .../test/testcases/block/15_math/normal.html | 29 - .../test/testcases/block/15_math/normal.text | 30 - .../test/testcases/block/15_math/ritex.html | 1 - .../testcases/block/15_math/ritex.options | 1 - .../test/testcases/block/15_math/ritex.text | 1 - .../test/testcases/block/16_toc/no_toc.html | 14 - .../test/testcases/block/16_toc/no_toc.text | 16 - .../testcases/block/16_toc/toc_exclude.html | 35 - .../block/16_toc/toc_exclude.options | 1 - .../testcases/block/16_toc/toc_exclude.text | 19 - .../testcases/block/16_toc/toc_levels.html | 24 - .../testcases/block/16_toc/toc_levels.options | 2 - .../testcases/block/16_toc/toc_levels.text | 16 - .../block/16_toc/toc_with_footnotes.html | 13 - .../block/16_toc/toc_with_footnotes.options | 1 - .../block/16_toc/toc_with_footnotes.text | 6 - .../test/testcases/encoding.html | 46 - .../test/testcases/encoding.text | 28 - .../test/testcases/span/01_link/empty.html | 5 - .../test/testcases/span/01_link/empty.text | 5 - .../span/01_link/empty_title.htmlinput | 3 - .../testcases/span/01_link/empty_title.text | 7 - .../testcases/span/01_link/image_in_a.html | 5 - .../testcases/span/01_link/image_in_a.text | 5 - .../testcases/span/01_link/imagelinks.html | 15 - .../testcases/span/01_link/imagelinks.text | 18 - .../test/testcases/span/01_link/inline.html | 46 - .../testcases/span/01_link/inline.html.19 | 46 - .../test/testcases/span/01_link/inline.text | 48 - .../testcases/span/01_link/link_defs.html | 9 - .../testcases/span/01_link/link_defs.text | 27 - .../span/01_link/link_defs_with_ial.html | 4 - .../span/01_link/link_defs_with_ial.text | 16 - .../01_link/links_with_angle_brackets.html | 3 - .../01_link/links_with_angle_brackets.text | 3 - .../testcases/span/01_link/reference.html | 37 - .../testcases/span/01_link/reference.html.19 | 37 - .../testcases/span/01_link/reference.options | 3 - .../testcases/span/01_link/reference.text | 53 - .../testcases/span/02_emphasis/empty.html | 3 - .../testcases/span/02_emphasis/empty.text | 3 - .../testcases/span/02_emphasis/errors.html | 9 - .../testcases/span/02_emphasis/errors.text | 9 - .../testcases/span/02_emphasis/nesting.html | 41 - .../testcases/span/02_emphasis/nesting.text | 36 - .../testcases/span/02_emphasis/normal.html | 48 - .../testcases/span/02_emphasis/normal.text | 48 - .../testcases/span/03_codespan/empty.html | 5 - .../testcases/span/03_codespan/empty.text | 5 - .../testcases/span/03_codespan/errors.html | 1 - .../testcases/span/03_codespan/errors.text | 1 - .../03_codespan/highlighting-minted.latex | 2 - .../03_codespan/highlighting-minted.options | 1 - .../span/03_codespan/highlighting-minted.text | 1 - .../span/03_codespan/highlighting-rouge.html | 1 - .../03_codespan/highlighting-rouge.options | 1 - .../span/03_codespan/highlighting-rouge.text | 1 - .../span/03_codespan/highlighting.html | 1 - .../span/03_codespan/highlighting.text | 1 - .../testcases/span/03_codespan/normal.html | 16 - .../testcases/span/03_codespan/normal.text | 16 - .../span/04_footnote/definitions.html | 17 - .../span/04_footnote/definitions.latex | 17 - .../span/04_footnote/definitions.text | 24 - .../span/04_footnote/footnote_nr.html | 12 - .../span/04_footnote/footnote_nr.latex | 2 - .../span/04_footnote/footnote_nr.options | 1 - .../span/04_footnote/footnote_nr.text | 4 - .../span/04_footnote/inside_footnote.html | 17 - .../span/04_footnote/inside_footnote.text | 9 - .../testcases/span/04_footnote/markers.html | 46 - .../testcases/span/04_footnote/markers.latex | 23 - .../testcases/span/04_footnote/markers.text | 27 - .../testcases/span/04_footnote/placement.html | 11 - .../testcases/span/04_footnote/placement.text | 8 - .../testcases/span/05_html/across_lines.html | 1 - .../testcases/span/05_html/across_lines.text | 2 - .../test/testcases/span/05_html/button.html | 7 - .../test/testcases/span/05_html/button.text | 7 - .../test/testcases/span/05_html/invalid.html | 1 - .../test/testcases/span/05_html/invalid.text | 1 - .../span/05_html/link_with_mailto.html | 1 - .../span/05_html/link_with_mailto.text | 1 - .../testcases/span/05_html/markdown_attr.html | 6 - .../testcases/span/05_html/markdown_attr.text | 6 - .../test/testcases/span/05_html/normal.html | 43 - .../test/testcases/span/05_html/normal.text | 43 - .../span/05_html/raw_span_elements.html | 2 - .../span/05_html/raw_span_elements.text | 2 - .../testcases/span/abbreviations/abbrev.html | 21 - .../testcases/span/abbreviations/abbrev.text | 34 - .../span/abbreviations/abbrev_defs.html | 2 - .../span/abbreviations/abbrev_defs.text | 5 - .../testcases/span/autolinks/url_links.html | 14 - .../testcases/span/autolinks/url_links.text | 15 - .../testcases/span/escaped_chars/normal.html | 47 - .../testcases/span/escaped_chars/normal.text | 47 - .../testcases/span/extension/comment.html | 6 - .../testcases/span/extension/comment.text | 6 - .../testcases/span/extension/ignored.html | 1 - .../testcases/span/extension/ignored.text | 1 - .../testcases/span/extension/nomarkdown.html | 1 - .../testcases/span/extension/nomarkdown.text | 1 - .../testcases/span/extension/options.html | 1 - .../testcases/span/extension/options.text | 1 - .../test/testcases/span/ial/simple.html | 6 - .../test/testcases/span/ial/simple.text | 6 - .../testcases/span/line_breaks/normal.html | 11 - .../testcases/span/line_breaks/normal.latex | 12 - .../testcases/span/line_breaks/normal.text | 11 - .../test/testcases/span/math/itex2mml.html | 1 - .../test/testcases/span/math/itex2mml.options | 1 - .../test/testcases/span/math/itex2mml.text | 1 - .../testcases/span/math/mathjaxnode.html.19 | 27 - .../testcases/span/math/mathjaxnode.options | 1 - .../test/testcases/span/math/mathjaxnode.text | 1 - .../test/testcases/span/math/normal.html | 10 - .../test/testcases/span/math/normal.text | 10 - .../test/testcases/span/math/ritex.html | 1 - .../test/testcases/span/math/ritex.options | 1 - .../test/testcases/span/math/ritex.text | 1 - .../span/text_substitutions/entities.html | 6 - .../span/text_substitutions/entities.options | 1 - .../span/text_substitutions/entities.text | 6 - .../text_substitutions/entities_as_char.html | 1 - .../entities_as_char.html.19 | 1 - .../entities_as_char.options | 2 - .../text_substitutions/entities_as_char.text | 1 - .../text_substitutions/entities_as_input.html | 1 - .../entities_as_input.options | 1 - .../text_substitutions/entities_as_input.text | 1 - .../text_substitutions/entities_numeric.html | 1 - .../entities_numeric.options | 1 - .../text_substitutions/entities_numeric.text | 1 - .../text_substitutions/entities_symbolic.html | 1 - .../entities_symbolic.options | 1 - .../text_substitutions/entities_symbolic.text | 1 - .../span/text_substitutions/greaterthan.html | 1 - .../span/text_substitutions/greaterthan.text | 1 - .../span/text_substitutions/lowerthan.html | 1 - .../span/text_substitutions/lowerthan.text | 1 - .../span/text_substitutions/typography.html | 30 - .../text_substitutions/typography.options | 1 - .../span/text_substitutions/typography.text | 30 - .../test/testcases_gfm/atx_header.html | 3 - .../test/testcases_gfm/atx_header.text | 3 - .../backticks_disable_highlighting.html | 2 - .../backticks_disable_highlighting.options | 1 - .../backticks_disable_highlighting.text | 3 - .../test/testcases_gfm/backticks_syntax.html | 20 - .../test/testcases_gfm/backticks_syntax.text | 19 - .../test/testcases_gfm/hard_line_breaks.html | 3 - .../test/testcases_gfm/hard_line_breaks.text | 3 - .../testcases_gfm/hard_line_breaks_off.html | 2 - .../hard_line_breaks_off.options | 1 - .../testcases_gfm/hard_line_breaks_off.text | 2 - .../two_para_hard_line_breaks.html | 4 - .../two_para_hard_line_breaks.text | 4 - .../ruby/2.2.0/gems/liquid-2.6.2/History.md | 123 - .../ruby/2.2.0/gems/liquid-2.6.2/MIT-LICENSE | 20 - .../ruby/2.2.0/gems/liquid-2.6.2/README.md | 50 - .../liquid-2.6.2/lib/extras/liquid_view.rb | 51 - .../2.2.0/gems/liquid-2.6.2/lib/liquid.rb | 69 - .../gems/liquid-2.6.2/lib/liquid/block.rb | 126 - .../gems/liquid-2.6.2/lib/liquid/condition.rb | 120 - .../gems/liquid-2.6.2/lib/liquid/context.rb | 267 - .../gems/liquid-2.6.2/lib/liquid/document.rb | 17 - .../gems/liquid-2.6.2/lib/liquid/drop.rb | 61 - .../gems/liquid-2.6.2/lib/liquid/errors.rb | 12 - .../liquid-2.6.2/lib/liquid/extensions.rb | 62 - .../liquid-2.6.2/lib/liquid/file_system.rb | 62 - .../gems/liquid-2.6.2/lib/liquid/htmltags.rb | 73 - .../liquid-2.6.2/lib/liquid/interrupts.rb | 17 - .../gems/liquid-2.6.2/lib/liquid/module_ex.rb | 62 - .../lib/liquid/standardfilters.rb | 272 - .../gems/liquid-2.6.2/lib/liquid/strainer.rb | 53 - .../2.2.0/gems/liquid-2.6.2/lib/liquid/tag.rb | 26 - .../liquid-2.6.2/lib/liquid/tags/assign.rb | 35 - .../liquid-2.6.2/lib/liquid/tags/break.rb | 21 - .../liquid-2.6.2/lib/liquid/tags/capture.rb | 36 - .../gems/liquid-2.6.2/lib/liquid/tags/case.rb | 79 - .../liquid-2.6.2/lib/liquid/tags/comment.rb | 9 - .../liquid-2.6.2/lib/liquid/tags/continue.rb | 21 - .../liquid-2.6.2/lib/liquid/tags/cycle.rb | 59 - .../liquid-2.6.2/lib/liquid/tags/decrement.rb | 39 - .../gems/liquid-2.6.2/lib/liquid/tags/for.rb | 142 - .../gems/liquid-2.6.2/lib/liquid/tags/if.rb | 79 - .../liquid-2.6.2/lib/liquid/tags/ifchanged.rb | 20 - .../liquid-2.6.2/lib/liquid/tags/include.rb | 93 - .../liquid-2.6.2/lib/liquid/tags/increment.rb | 35 - .../gems/liquid-2.6.2/lib/liquid/tags/raw.rb | 22 - .../liquid-2.6.2/lib/liquid/tags/unless.rb | 33 - .../gems/liquid-2.6.2/lib/liquid/template.rb | 156 - .../gems/liquid-2.6.2/lib/liquid/utils.rb | 30 - .../gems/liquid-2.6.2/lib/liquid/variable.rb | 57 - .../gems/liquid-2.6.2/lib/liquid/version.rb | 4 - .../liquid-2.6.2/test/liquid/assign_test.rb | 21 - .../liquid-2.6.2/test/liquid/block_test.rb | 58 - .../liquid-2.6.2/test/liquid/capture_test.rb | 40 - .../test/liquid/condition_test.rb | 127 - .../liquid-2.6.2/test/liquid/context_test.rb | 478 - .../liquid-2.6.2/test/liquid/drop_test.rb | 180 - .../test/liquid/error_handling_test.rb | 81 - .../test/liquid/file_system_test.rb | 29 - .../liquid-2.6.2/test/liquid/filter_test.rb | 125 - .../test/liquid/hash_ordering_test.rb | 25 - .../test/liquid/module_ex_test.rb | 87 - .../liquid-2.6.2/test/liquid/output_test.rb | 116 - .../test/liquid/parsing_quirks_test.rb | 52 - .../liquid-2.6.2/test/liquid/regexp_test.rb | 44 - .../liquid-2.6.2/test/liquid/security_test.rb | 64 - .../test/liquid/standard_filter_test.rb | 251 - .../liquid-2.6.2/test/liquid/strainer_test.rb | 52 - .../test/liquid/tags/break_tag_test.rb | 16 - .../test/liquid/tags/continue_tag_test.rb | 16 - .../test/liquid/tags/for_tag_test.rb | 297 - .../test/liquid/tags/html_tag_test.rb | 63 - .../test/liquid/tags/if_else_tag_test.rb | 166 - .../test/liquid/tags/include_tag_test.rb | 166 - .../test/liquid/tags/increment_tag_test.rb | 24 - .../test/liquid/tags/raw_tag_test.rb | 24 - .../test/liquid/tags/standard_tag_test.rb | 295 - .../test/liquid/tags/statements_test.rb | 134 - .../test/liquid/tags/unless_else_tag_test.rb | 26 - .../liquid-2.6.2/test/liquid/template_test.rb | 146 - .../liquid-2.6.2/test/liquid/variable_test.rb | 186 - .../gems/liquid-2.6.2/test/test_helper.rb | 29 - .../2.2.0/gems/listen-2.10.0/CHANGELOG.md | 1 - .../2.2.0/gems/listen-2.10.0/CONTRIBUTING.md | 38 - .../ruby/2.2.0/gems/listen-2.10.0/LICENSE.txt | 22 - .../ruby/2.2.0/gems/listen-2.10.0/README.md | 338 - .../ruby/2.2.0/gems/listen-2.10.0/bin/listen | 12 - .../2.2.0/gems/listen-2.10.0/lib/listen.rb | 76 - .../gems/listen-2.10.0/lib/listen/adapter.rb | 45 - .../listen-2.10.0/lib/listen/adapter/base.rb | 99 - .../listen-2.10.0/lib/listen/adapter/bsd.rb | 106 - .../lib/listen/adapter/darwin.rb | 53 - .../listen-2.10.0/lib/listen/adapter/linux.rb | 104 - .../lib/listen/adapter/polling.rb | 36 - .../listen-2.10.0/lib/listen/adapter/tcp.rb | 88 - .../lib/listen/adapter/windows.rb | 99 - .../gems/listen-2.10.0/lib/listen/change.rb | 59 - .../gems/listen-2.10.0/lib/listen/cli.rb | 73 - .../listen-2.10.0/lib/listen/directory.rb | 78 - .../gems/listen-2.10.0/lib/listen/file.rb | 78 - .../lib/listen/internals/logging.rb | 35 - .../lib/listen/internals/thread_pool.rb | 19 - .../gems/listen-2.10.0/lib/listen/listener.rb | 357 - .../gems/listen-2.10.0/lib/listen/options.rb | 23 - .../lib/listen/queue_optimizer.rb | 114 - .../gems/listen-2.10.0/lib/listen/record.rb | 134 - .../listen-2.10.0/lib/listen/record/entry.rb | 51 - .../lib/listen/record/symlink_detector.rb | 39 - .../gems/listen-2.10.0/lib/listen/silencer.rb | 97 - .../gems/listen-2.10.0/lib/listen/tcp.rb | 8 - .../lib/listen/tcp/broadcaster.rb | 79 - .../listen-2.10.0/lib/listen/tcp/message.rb | 50 - .../gems/listen-2.10.0/lib/listen/version.rb | 3 - .../2.2.0/gems/mercenary-0.3.5/.gitignore | 17 - .../ruby/2.2.0/gems/mercenary-0.3.5/.rspec | 2 - .../2.2.0/gems/mercenary-0.3.5/.travis.yml | 15 - .../ruby/2.2.0/gems/mercenary-0.3.5/Gemfile | 4 - .../gems/mercenary-0.3.5/History.markdown | 107 - .../2.2.0/gems/mercenary-0.3.5/LICENSE.txt | 22 - .../ruby/2.2.0/gems/mercenary-0.3.5/README.md | 250 - .../ruby/2.2.0/gems/mercenary-0.3.5/Rakefile | 1 - .../mercenary-0.3.5/examples/help_dialogue.rb | 46 - .../gems/mercenary-0.3.5/examples/logging.rb | 39 - .../gems/mercenary-0.3.5/examples/trace.rb | 21 - .../gems/mercenary-0.3.5/lib/mercenary.rb | 21 - .../mercenary-0.3.5/lib/mercenary/command.rb | 280 - .../mercenary-0.3.5/lib/mercenary/option.rb | 87 - .../lib/mercenary/presenter.rb | 80 - .../mercenary-0.3.5/lib/mercenary/program.rb | 53 - .../mercenary-0.3.5/lib/mercenary/version.rb | 3 - .../gems/mercenary-0.3.5/mercenary.gemspec | 24 - .../gems/mercenary-0.3.5/script/bootstrap | 7 - .../2.2.0/gems/mercenary-0.3.5/script/cibuild | 6 - .../2.2.0/gems/mercenary-0.3.5/script/console | 3 - .../gems/mercenary-0.3.5/script/examples | 18 - .../gems/mercenary-0.3.5/spec/command_spec.rb | 98 - .../gems/mercenary-0.3.5/spec/option_spec.rb | 83 - .../mercenary-0.3.5/spec/presenter_spec.rb | 39 - .../gems/mercenary-0.3.5/spec/program_spec.rb | 19 - .../gems/mercenary-0.3.5/spec/spec_helper.rb | 14 - .../ruby/2.2.0/gems/parslet-1.5.0/HISTORY.txt | 211 - .../ruby/2.2.0/gems/parslet-1.5.0/LICENSE | 23 - .../ruby/2.2.0/gems/parslet-1.5.0/README | 70 - .../ruby/2.2.0/gems/parslet-1.5.0/Rakefile | 30 - .../parslet-1.5.0/example/boolean_algebra.rb | 70 - .../2.2.0/gems/parslet-1.5.0/example/calc.rb | 153 - .../gems/parslet-1.5.0/example/capture.rb | 49 - .../gems/parslet-1.5.0/example/comments.rb | 35 - .../parslet-1.5.0/example/deepest_errors.rb | 131 - .../parslet-1.5.0/example/documentation.rb | 18 - .../parslet-1.5.0/example/email_parser.rb | 52 - .../2.2.0/gems/parslet-1.5.0/example/empty.rb | 13 - .../2.2.0/gems/parslet-1.5.0/example/erb.rb | 47 - .../gems/parslet-1.5.0/example/ignore.rb | 33 - .../gems/parslet-1.5.0/example/ip_address.rb | 125 - .../2.2.0/gems/parslet-1.5.0/example/json.rb | 128 - .../2.2.0/gems/parslet-1.5.0/example/local.rb | 34 - .../2.2.0/gems/parslet-1.5.0/example/mathn.rb | 44 - .../gems/parslet-1.5.0/example/minilisp.rb | 94 - .../gems/parslet-1.5.0/example/modularity.rb | 47 - .../parslet-1.5.0/example/nested_errors.rb | 132 - .../example/output/boolean_algebra.out | 4 - .../parslet-1.5.0/example/output/calc.out | 1 - .../parslet-1.5.0/example/output/capture.out | 3 - .../parslet-1.5.0/example/output/comments.out | 8 - .../example/output/deepest_errors.out | 54 - .../example/output/documentation.err | 4 - .../example/output/documentation.out | 1 - .../example/output/email_parser.out | 2 - .../parslet-1.5.0/example/output/empty.err | 1 - .../gems/parslet-1.5.0/example/output/erb.out | 7 - .../parslet-1.5.0/example/output/ignore.out | 1 - .../example/output/ignore_whitespace.out | 1 - .../example/output/ip_address.out | 9 - .../parslet-1.5.0/example/output/json.out | 5 - .../parslet-1.5.0/example/output/local.out | 3 - .../parslet-1.5.0/example/output/mathn.out | 4 - .../parslet-1.5.0/example/output/minilisp.out | 5 - .../example/output/modularity.out | 0 .../example/output/nested_errors.out | 54 - .../parslet-1.5.0/example/output/parens.out | 8 - .../parslet-1.5.0/example/output/readme.out | 1 - .../parslet-1.5.0/example/output/scopes.out | 1 - .../parslet-1.5.0/example/output/seasons.out | 28 - .../parslet-1.5.0/example/output/sentence.out | 1 - .../example/output/simple_xml.out | 2 - .../example/output/string_parser.out | 3 - .../gems/parslet-1.5.0/example/parens.rb | 42 - .../gems/parslet-1.5.0/example/readme.rb | 30 - .../gems/parslet-1.5.0/example/scopes.rb | 15 - .../gems/parslet-1.5.0/example/seasons.rb | 46 - .../gems/parslet-1.5.0/example/sentence.rb | 36 - .../gems/parslet-1.5.0/example/simple.lit | 3 - .../gems/parslet-1.5.0/example/simple_xml.rb | 54 - .../parslet-1.5.0/example/string_parser.rb | 77 - .../2.2.0/gems/parslet-1.5.0/example/test.lit | 4 - .../2.2.0/gems/parslet-1.5.0/lib/parslet.rb | 270 - .../gems/parslet-1.5.0/lib/parslet/atoms.rb | 34 - .../lib/parslet/atoms/alternative.rb | 50 - .../parslet-1.5.0/lib/parslet/atoms/base.rb | 151 - .../lib/parslet/atoms/can_flatten.rb | 137 - .../lib/parslet/atoms/capture.rb | 38 - .../lib/parslet/atoms/context.rb | 91 - .../parslet-1.5.0/lib/parslet/atoms/dsl.rb | 109 - .../lib/parslet/atoms/dynamic.rb | 32 - .../parslet-1.5.0/lib/parslet/atoms/entity.rb | 41 - .../lib/parslet/atoms/lookahead.rb | 49 - .../parslet-1.5.0/lib/parslet/atoms/named.rb | 32 - .../parslet-1.5.0/lib/parslet/atoms/re.rb | 38 - .../lib/parslet/atoms/repetition.rb | 78 - .../parslet-1.5.0/lib/parslet/atoms/scope.rb | 26 - .../lib/parslet/atoms/sequence.rb | 45 - .../parslet-1.5.0/lib/parslet/atoms/str.rb | 38 - .../lib/parslet/atoms/visitor.rb | 89 - .../gems/parslet-1.5.0/lib/parslet/cause.rb | 94 - .../parslet-1.5.0/lib/parslet/convenience.rb | 33 - .../lib/parslet/error_reporter.rb | 7 - .../lib/parslet/error_reporter/deepest.rb | 95 - .../lib/parslet/error_reporter/tree.rb | 57 - .../gems/parslet-1.5.0/lib/parslet/export.rb | 162 - .../parslet-1.5.0/lib/parslet/expression.rb | 51 - .../lib/parslet/expression/treetop.rb | 92 - .../gems/parslet-1.5.0/lib/parslet/parser.rb | 67 - .../gems/parslet-1.5.0/lib/parslet/pattern.rb | 114 - .../lib/parslet/pattern/binding.rb | 49 - .../parslet-1.5.0/lib/parslet/rig/rspec.rb | 51 - .../gems/parslet-1.5.0/lib/parslet/scope.rb | 42 - .../gems/parslet-1.5.0/lib/parslet/slice.rb | 101 - .../gems/parslet-1.5.0/lib/parslet/source.rb | 62 - .../lib/parslet/source/line_cache.rb | 95 - .../parslet-1.5.0/lib/parslet/transform.rb | 236 - .../lib/parslet/transform/context.rb | 32 - .../2.2.0/gems/posix-spawn-0.3.11/.gitignore | 6 - .../2.2.0/gems/posix-spawn-0.3.11/COPYING | 28 - .../2.2.0/gems/posix-spawn-0.3.11/Gemfile | 2 - .../2.2.0/gems/posix-spawn-0.3.11/HACKING | 26 - .../2.2.0/gems/posix-spawn-0.3.11/README.md | 260 - .../2.2.0/gems/posix-spawn-0.3.11/Rakefile | 43 - .../ruby/2.2.0/gems/posix-spawn-0.3.11/TODO | 23 - .../bin/posix-spawn-benchmark | 117 - .../posix-spawn-0.3.11/ext/.RUBYARCHDIR.time | 0 .../gems/posix-spawn-0.3.11/ext/extconf.rb | 11 - .../gems/posix-spawn-0.3.11/ext/posix-spawn.c | 482 - .../gems/posix-spawn-0.3.11/ext/posix-spawn.o | Bin 26112 -> 0 bytes .../ext/posix_spawn_ext.bundle | Bin 18820 -> 0 bytes .../posix-spawn-0.3.11/lib/posix-spawn.rb | 1 - .../posix-spawn-0.3.11/lib/posix/spawn.rb | 545 - .../lib/posix/spawn/child.rb | 283 - .../lib/posix/spawn/version.rb | 5 - .../posix-spawn-0.3.11/posix-spawn.gemspec | 25 - .../posix-spawn-0.3.11/test/test_backtick.rb | 36 - .../posix-spawn-0.3.11/test/test_child.rb | 236 - .../posix-spawn-0.3.11/test/test_helper.rb | 9 - .../posix-spawn-0.3.11/test/test_popen.rb | 17 - .../posix-spawn-0.3.11/test/test_spawn.rb | 398 - .../posix-spawn-0.3.11/test/test_system.rb | 28 - .../2.2.0/gems/pygments.rb-0.6.3/.gitignore | 6 - .../2.2.0/gems/pygments.rb-0.6.3/CHANGELOG.md | 71 - .../ruby/2.2.0/gems/pygments.rb-0.6.3/Gemfile | 2 - .../ruby/2.2.0/gems/pygments.rb-0.6.3/LICENSE | 17 - .../2.2.0/gems/pygments.rb-0.6.3/README.md | 121 - .../2.2.0/gems/pygments.rb-0.6.3/Rakefile | 66 - .../2.2.0/gems/pygments.rb-0.6.3/bench.rb | 22 - .../gems/pygments.rb-0.6.3/cache-lexers.rb | 8 - .../ruby/2.2.0/gems/pygments.rb-0.6.3/lexers | Bin 39087 -> 0 bytes .../gems/pygments.rb-0.6.3/lib/pygments.rb | 8 - .../pygments.rb-0.6.3/lib/pygments/lexer.rb | 148 - .../pygments.rb-0.6.3/lib/pygments/mentos.py | 351 - .../pygments.rb-0.6.3/lib/pygments/popen.rb | 420 - .../pygments.rb-0.6.3/lib/pygments/version.rb | 3 - .../pygments.rb-0.6.3/pygments.rb.gemspec | 25 - .../gems/pygments.rb-0.6.3/test/test_data.c | 2581 --- .../gems/pygments.rb-0.6.3/test/test_data.py | 514 - .../test/test_data_generated | 2582 --- .../pygments.rb-0.6.3/test/test_pygments.rb | 287 - .../vendor/custom_lexers/github.py | 565 - .../vendor/pygments-main/AUTHORS | 172 - .../vendor/pygments-main/CHANGES | 941 - .../vendor/pygments-main/LICENSE | 25 - .../vendor/pygments-main/MANIFEST.in | 6 - .../vendor/pygments-main/Makefile | 56 - .../vendor/pygments-main/REVISION | 1 - .../vendor/pygments-main/TODO | 15 - .../vendor/pygments-main/doc/Makefile | 153 - .../pygments-main/doc/_static/favicon.ico | Bin 16958 -> 0 bytes .../pygments-main/doc/_static/logo_new.png | Bin 40944 -> 0 bytes .../pygments-main/doc/_static/logo_only.png | Bin 16424 -> 0 bytes .../doc/_templates/docssidebar.html | 3 - .../doc/_templates/indexsidebar.html | 25 - .../doc/_themes/pygments14/layout.html | 98 - .../doc/_themes/pygments14/static/bodybg.png | Bin 51903 -> 0 bytes .../doc/_themes/pygments14/static/docbg.png | Bin 61296 -> 0 bytes .../_themes/pygments14/static/listitem.png | Bin 207 -> 0 bytes .../doc/_themes/pygments14/static/logo.png | Bin 26933 -> 0 bytes .../doc/_themes/pygments14/static/pocoo.png | Bin 2154 -> 0 bytes .../pygments14/static/pygments14.css_t | 401 - .../doc/_themes/pygments14/theme.conf | 15 - .../vendor/pygments-main/doc/conf.py | 249 - .../vendor/pygments-main/doc/docs/api.rst | 316 - .../vendor/pygments-main/doc/docs/authors.rst | 4 - .../pygments-main/doc/docs/changelog.rst | 1 - .../vendor/pygments-main/doc/docs/cmdline.rst | 145 - .../doc/docs/filterdevelopment.rst | 70 - .../vendor/pygments-main/doc/docs/filters.rst | 41 - .../doc/docs/formatterdevelopment.rst | 169 - .../pygments-main/doc/docs/formatters.rst | 48 - .../vendor/pygments-main/doc/docs/index.rst | 66 - .../pygments-main/doc/docs/integrate.rst | 44 - .../vendor/pygments-main/doc/docs/java.rst | 70 - .../doc/docs/lexerdevelopment.rst | 602 - .../vendor/pygments-main/doc/docs/lexers.rst | 69 - .../pygments-main/doc/docs/moinmoin.rst | 39 - .../vendor/pygments-main/doc/docs/plugins.rst | 93 - .../pygments-main/doc/docs/quickstart.rst | 205 - .../pygments-main/doc/docs/rstdirective.rst | 22 - .../vendor/pygments-main/doc/docs/styles.rst | 143 - .../vendor/pygments-main/doc/docs/tokens.rst | 352 - .../vendor/pygments-main/doc/docs/unicode.rst | 50 - .../vendor/pygments-main/doc/download.rst | 41 - .../vendor/pygments-main/doc/faq.rst | 143 - .../vendor/pygments-main/doc/index.rst | 53 - .../vendor/pygments-main/doc/languages.rst | 151 - .../vendor/pygments-main/doc/make.bat | 190 - .../vendor/pygments-main/doc/pygmentize.1 | 94 - .../pygments-main/external/autopygmentize | 81 - .../external/lasso-builtins-generator-9.lasso | 144 - .../external/markdown-processor.py | 67 - .../pygments-main/external/moin-parser.py | 112 - .../pygments-main/external/pygments.bashcomp | 38 - .../pygments-main/external/rst-directive.py | 82 - .../vendor/pygments-main/ez_setup.py | 382 - .../vendor/pygments-main/pygmentize | 7 - .../vendor/pygments-main/pygments/__init__.py | 91 - .../vendor/pygments-main/pygments/cmdline.py | 454 - .../vendor/pygments-main/pygments/console.py | 74 - .../vendor/pygments-main/pygments/filter.py | 74 - .../pygments/filters/__init__.py | 358 - .../pygments-main/pygments/formatter.py | 95 - .../pygments/formatters/__init__.py | 70 - .../pygments/formatters/_mapping.py | 103 - .../pygments/formatters/bbcode.py | 109 - .../pygments-main/pygments/formatters/html.py | 839 - .../pygments-main/pygments/formatters/img.py | 560 - .../pygments/formatters/latex.py | 470 - .../pygments/formatters/other.py | 162 - .../pygments-main/pygments/formatters/rtf.py | 150 - .../pygments-main/pygments/formatters/svg.py | 154 - .../pygments/formatters/terminal.py | 152 - .../pygments/formatters/terminal256.py | 222 - .../vendor/pygments-main/pygments/lexer.py | 785 - .../pygments-main/pygments/lexers/__init__.py | 263 - .../pygments/lexers/_asybuiltins.py | 1645 -- .../pygments/lexers/_clbuiltins.py | 232 - .../pygments/lexers/_cocoabuiltins.py | 73 - .../pygments/lexers/_lassobuiltins.py | 5182 ----- .../pygments/lexers/_luabuiltins.py | 255 - .../pygments-main/pygments/lexers/_mapping.py | 405 - .../pygments/lexers/_openedgebuiltins.py | 562 - .../pygments/lexers/_phpbuiltins.py | 4759 ----- .../pygments/lexers/_postgres_builtins.py | 233 - .../pygments/lexers/_robotframeworklexer.py | 558 - .../pygments/lexers/_scilab_builtins.py | 40 - .../pygments/lexers/_sourcemodbuiltins.py | 1077 - .../pygments/lexers/_stan_builtins.py | 454 - .../pygments/lexers/_vimbuiltins.py | 13 - .../pygments-main/pygments/lexers/agile.py | 2552 --- .../pygments-main/pygments/lexers/asm.py | 435 - .../pygments-main/pygments/lexers/compiled.py | 5192 ----- .../pygments-main/pygments/lexers/dalvik.py | 125 - .../pygments-main/pygments/lexers/dotnet.py | 683 - .../pygments-main/pygments/lexers/foxpro.py | 428 - .../pygments/lexers/functional.py | 3671 ---- .../pygments-main/pygments/lexers/github.py | 565 - .../pygments-main/pygments/lexers/graph.py | 81 - .../pygments-main/pygments/lexers/hdl.py | 355 - .../pygments-main/pygments/lexers/inferno.py | 96 - .../pygments-main/pygments/lexers/jvm.py | 1527 -- .../pygments-main/pygments/lexers/math.py | 2286 -- .../pygments-main/pygments/lexers/other.py | 4492 ---- .../pygments-main/pygments/lexers/parsers.py | 778 - .../pygments-main/pygments/lexers/qbasic.py | 157 - .../pygments-main/pygments/lexers/rdf.py | 99 - .../pygments-main/pygments/lexers/shell.py | 427 - .../pygments-main/pygments/lexers/special.py | 99 - .../pygments-main/pygments/lexers/sql.py | 592 - .../pygments/lexers/templates.py | 2060 -- .../pygments-main/pygments/lexers/text.py | 2055 -- .../pygments-main/pygments/lexers/web.py | 4510 ---- .../vendor/pygments-main/pygments/modeline.py | 40 - .../vendor/pygments-main/pygments/plugin.py | 74 - .../vendor/pygments-main/pygments/scanner.py | 104 - .../pygments-main/pygments/sphinxext.py | 153 - .../vendor/pygments-main/pygments/style.py | 118 - .../pygments-main/pygments/styles/__init__.py | 74 - .../pygments-main/pygments/styles/autumn.py | 65 - .../pygments-main/pygments/styles/borland.py | 51 - .../pygments-main/pygments/styles/bw.py | 49 - .../pygments-main/pygments/styles/colorful.py | 81 - .../pygments-main/pygments/styles/default.py | 73 - .../pygments-main/pygments/styles/emacs.py | 72 - .../pygments-main/pygments/styles/friendly.py | 72 - .../pygments-main/pygments/styles/fruity.py | 42 - .../pygments-main/pygments/styles/igor.py | 29 - .../pygments-main/pygments/styles/manni.py | 75 - .../pygments-main/pygments/styles/monokai.py | 106 - .../pygments-main/pygments/styles/murphy.py | 80 - .../pygments-main/pygments/styles/native.py | 65 - .../pygments/styles/paraiso_dark.py | 125 - .../pygments/styles/paraiso_light.py | 125 - .../pygments-main/pygments/styles/pastie.py | 75 - .../pygments-main/pygments/styles/perldoc.py | 69 - .../pygments-main/pygments/styles/rrt.py | 33 - .../pygments-main/pygments/styles/tango.py | 141 - .../pygments-main/pygments/styles/trac.py | 63 - .../pygments-main/pygments/styles/vim.py | 63 - .../pygments-main/pygments/styles/vs.py | 38 - .../pygments-main/pygments/styles/xcode.py | 51 - .../vendor/pygments-main/pygments/token.py | 198 - .../pygments-main/pygments/unistring.py | 141 - .../vendor/pygments-main/pygments/util.py | 291 - .../pygments-main/scripts/check_sources.py | 226 - .../scripts/detect_missing_analyse_text.py | 33 - .../vendor/pygments-main/scripts/epydoc.css | 280 - .../pygments-main/scripts/find_codetags.py | 213 - .../pygments-main/scripts/find_error.py | 173 - .../vendor/pygments-main/scripts/get_vimkw.py | 43 - .../vendor/pygments-main/scripts/pylintrc | 301 - .../pygments-main/scripts/vim2pygments.py | 935 - .../vendor/pygments-main/setup.cfg | 7 - .../vendor/pygments-main/setup.py | 90 - .../pygments-main/tests/dtds/HTML4-f.dtd | 37 - .../pygments-main/tests/dtds/HTML4-s.dtd | 869 - .../vendor/pygments-main/tests/dtds/HTML4.dcl | 88 - .../vendor/pygments-main/tests/dtds/HTML4.dtd | 1092 - .../vendor/pygments-main/tests/dtds/HTML4.soc | 9 - .../pygments-main/tests/dtds/HTMLlat1.ent | 195 - .../pygments-main/tests/dtds/HTMLspec.ent | 77 - .../pygments-main/tests/dtds/HTMLsym.ent | 241 - .../examplefiles/99_bottles_of_beer.chpl | 118 - .../tests/examplefiles/AcidStateAdvanced.hs | 209 - .../tests/examplefiles/AlternatingGroup.mu | 102 - .../pygments-main/tests/examplefiles/BOM.js | 1 - .../tests/examplefiles/CPDictionary.j | 611 - .../tests/examplefiles/Config.in.cache | 1973 -- .../tests/examplefiles/Constants.mo | 158 - .../tests/examplefiles/DancingSudoku.lhs | 411 - .../tests/examplefiles/Deflate.fs | 578 - .../tests/examplefiles/Error.pmod | 38 - .../tests/examplefiles/Errors.scala | 18 - .../tests/examplefiles/FakeFile.pike | 360 - .../Get-CommandDefinitionHtml.ps1 | 66 - .../tests/examplefiles/IPDispatchC.nc | 104 - .../tests/examplefiles/IPDispatchP.nc | 671 - .../tests/examplefiles/Intro.java | 1660 -- .../pygments-main/tests/examplefiles/Makefile | 1131 - .../tests/examplefiles/Object.st | 4394 ---- .../tests/examplefiles/OrderedMap.hx | 584 - .../tests/examplefiles/RoleQ.pm6 | 23 - .../tests/examplefiles/SmallCheck.hs | 378 - .../tests/examplefiles/Sorting.mod | 470 - .../tests/examplefiles/Sudoku.lhs | 382 - .../tests/examplefiles/addressbook.proto | 30 - .../tests/examplefiles/antlr_ANTLRv3.g | 608 - .../tests/examplefiles/antlr_throws | 1 - .../tests/examplefiles/apache2.conf | 393 - .../tests/examplefiles/as3_test.as | 143 - .../tests/examplefiles/as3_test2.as | 46 - .../tests/examplefiles/as3_test3.as | 3 - .../tests/examplefiles/aspx-cs_example | 27 - .../tests/examplefiles/autoit_submit.au3 | 25 - .../tests/examplefiles/badcase.java | 2 - .../tests/examplefiles/batchfile.bat | 49 - .../tests/examplefiles/bigtest.nsi | 308 - .../tests/examplefiles/boot-9.scm | 1557 -- .../tests/examplefiles/ca65_example | 284 - .../tests/examplefiles/cbmbas_example | 9 - .../pygments-main/tests/examplefiles/cells.ps | Bin 8648 -> 0 bytes .../pygments-main/tests/examplefiles/ceval.c | 2604 --- .../tests/examplefiles/cheetah_example.html | 13 - .../tests/examplefiles/classes.dylan | 125 - .../examplefiles/clojure-weird-keywords.clj | 5 - .../tests/examplefiles/condensed_ruby.rb | 10 - .../tests/examplefiles/coq_RelationClasses | 447 - .../tests/examplefiles/core.cljs | 52 - .../tests/examplefiles/database.pytb | 20 - .../tests/examplefiles/de.MoinMoin.po | 2461 --- .../pygments-main/tests/examplefiles/demo.ahk | 181 - .../pygments-main/tests/examplefiles/demo.cfm | 50 - .../pygments-main/tests/examplefiles/demo.hbs | 12 - .../examplefiles/django_sample.html+django | 68 - .../pygments-main/tests/examplefiles/dwarf.cw | 17 - .../tests/examplefiles/ember.handlebars | 33 - .../tests/examplefiles/erl_session | 10 - .../tests/examplefiles/escape_semicolon.clj | 1 - .../tests/examplefiles/evil_regex.js | 48 - .../tests/examplefiles/example.Rd | 78 - .../tests/examplefiles/example.als | 217 - .../tests/examplefiles/example.bug | 54 - .../tests/examplefiles/example.c | 2080 -- .../tests/examplefiles/example.ceylon | 52 - .../tests/examplefiles/example.chai | 6 - .../tests/examplefiles/example.clay | 33 - .../tests/examplefiles/example.cls | 15 - .../tests/examplefiles/example.cob | 3556 ---- .../tests/examplefiles/example.coffee | 27 - .../tests/examplefiles/example.cpp | 2363 --- .../tests/examplefiles/example.e | 124 - .../tests/examplefiles/example.f90 | 8 - .../tests/examplefiles/example.feature | 16 - .../tests/examplefiles/example.gd | 23 - .../tests/examplefiles/example.gi | 64 - .../tests/examplefiles/example.groovy | 2 - .../tests/examplefiles/example.gs | 106 - .../tests/examplefiles/example.gst | 7 - .../tests/examplefiles/example.hs | 27 - .../tests/examplefiles/example.hx | 185 - .../tests/examplefiles/example.i6t | 32 - .../tests/examplefiles/example.i7x | 45 - .../tests/examplefiles/example.inf | 374 - .../tests/examplefiles/example.j | 564 - .../tests/examplefiles/example.jag | 48 - .../tests/examplefiles/example.java | 16 - .../tests/examplefiles/example.kal | 75 - .../tests/examplefiles/example.kt | 47 - .../tests/examplefiles/example.lagda | 19 - .../tests/examplefiles/example.liquid | 42 - .../tests/examplefiles/example.lua | 250 - .../tests/examplefiles/example.ma | 8 - .../tests/examplefiles/example.monkey | 152 - .../tests/examplefiles/example.moo | 26 - .../tests/examplefiles/example.moon | 629 - .../tests/examplefiles/example.mq4 | 187 - .../tests/examplefiles/example.mqh | 123 - .../tests/examplefiles/example.msc | 43 - .../tests/examplefiles/example.ni | 57 - .../tests/examplefiles/example.nim | 1010 - .../tests/examplefiles/example.nix | 80 - .../tests/examplefiles/example.ns2 | 69 - .../tests/examplefiles/example.pas | 2708 --- .../tests/examplefiles/example.pp | 8 - .../tests/examplefiles/example.prg | 161 - .../tests/examplefiles/example.rb | 1852 -- .../tests/examplefiles/example.red | 257 - .../tests/examplefiles/example.reds | 150 - .../tests/examplefiles/example.reg | 19 - .../tests/examplefiles/example.rexx | 50 - .../tests/examplefiles/example.rhtml | 561 - .../tests/examplefiles/example.rkt | 743 - .../tests/examplefiles/example.rpf | 4 - .../tests/examplefiles/example.sh | 22 - .../tests/examplefiles/example.sh-session | 19 - .../tests/examplefiles/example.shell-session | 45 - .../tests/examplefiles/example.slim | 31 - .../tests/examplefiles/example.sls | 51 - .../tests/examplefiles/example.sml | 156 - .../tests/examplefiles/example.snobol | 15 - .../tests/examplefiles/example.stan | 110 - .../tests/examplefiles/example.tea | 34 - .../tests/examplefiles/example.todotxt | 9 - .../tests/examplefiles/example.ts | 28 - .../tests/examplefiles/example.u | 548 - .../tests/examplefiles/example.weechatlog | 9 - .../tests/examplefiles/example.xhtml | 376 - .../tests/examplefiles/example.xtend | 34 - .../tests/examplefiles/example.yaml | 302 - .../tests/examplefiles/example2.aspx | 29 - .../tests/examplefiles/example2.msc | 79 - .../tests/examplefiles/exampleScript.cfc | 241 - .../tests/examplefiles/exampleTag.cfc | 18 - .../tests/examplefiles/example_elixir.ex | 205 - .../tests/examplefiles/example_file.fy | 128 - .../tests/examplefiles/firefox.mak | 586 - .../tests/examplefiles/flipflop.sv | 19 - .../pygments-main/tests/examplefiles/foo.sce | 6 - .../tests/examplefiles/format.ml | 1213 -- .../tests/examplefiles/fucked_up.rb | 77 - .../tests/examplefiles/function.mu | 1 - .../tests/examplefiles/functional.rst | 1472 -- .../tests/examplefiles/garcia-wachs.kk | 133 - .../tests/examplefiles/genclass.clj | 510 - .../examplefiles/genshi_example.xml+genshi | 193 - .../genshitext_example.genshitext | 33 - .../tests/examplefiles/glsl.frag | 7 - .../tests/examplefiles/glsl.vert | 13 - .../tests/examplefiles/grammar-test.p6 | 22 - .../tests/examplefiles/hash_syntax.rb | 5 - .../pygments-main/tests/examplefiles/hello.at | 6 - .../tests/examplefiles/hello.golo | 5 - .../tests/examplefiles/hello.lsl | 12 - .../tests/examplefiles/hello.smali | 40 - .../pygments-main/tests/examplefiles/hello.sp | 9 - .../tests/examplefiles/html+php_faulty.php | 1 - .../tests/examplefiles/http_request_example | 15 - .../tests/examplefiles/http_response_example | 29 - .../tests/examplefiles/hybris_File.hy | 174 - .../tests/examplefiles/idl_sample.pro | 73 - .../tests/examplefiles/iex_example | 23 - .../tests/examplefiles/inet_pton6.dg | 71 - .../pygments-main/tests/examplefiles/intro.ik | 24 - .../pygments-main/tests/examplefiles/ints.php | 10 - .../tests/examplefiles/intsyn.fun | 675 - .../tests/examplefiles/intsyn.sig | 286 - .../tests/examplefiles/irb_heredoc | 8 - .../pygments-main/tests/examplefiles/irc.lsp | 214 - .../tests/examplefiles/java.properties | 16 - .../tests/examplefiles/jbst_example1.jbst | 28 - .../tests/examplefiles/jbst_example2.jbst | 45 - .../tests/examplefiles/jinjadesignerdoc.rst | 713 - .../tests/examplefiles/json.lasso | 301 - .../tests/examplefiles/json.lasso9 | 213 - .../tests/examplefiles/language.hy | 165 - .../tests/examplefiles/lighttpd_config.conf | 13 - .../pygments-main/tests/examplefiles/limbo.b | 456 - .../tests/examplefiles/linecontinuation.py | 47 - .../tests/examplefiles/livescript-demo.ls | 43 - .../tests/examplefiles/logos_example.xm | 28 - .../tests/examplefiles/ltmain.sh | 2849 --- .../tests/examplefiles/main.cmake | 44 - .../tests/examplefiles/markdown.lsp | 679 - .../tests/examplefiles/matlab_noreturn | 3 - .../tests/examplefiles/matlab_sample | 30 - .../examplefiles/matlabsession_sample.txt | 37 - .../tests/examplefiles/metagrammar.treetop | 455 - .../tests/examplefiles/minehunt.qml | 112 - .../tests/examplefiles/minimal.ns2 | 4 - .../examplefiles/moin_SyntaxReference.txt | 340 - .../tests/examplefiles/multiline_regexes.rb | 38 - .../tests/examplefiles/nanomsg.intr | 95 - .../tests/examplefiles/nasm_aoutso.asm | 96 - .../tests/examplefiles/nasm_objexe.asm | 30 - .../tests/examplefiles/nemerle_sample.n | 87 - .../tests/examplefiles/nginx_nginx.conf | 118 - .../tests/examplefiles/numbers.c | 12 - .../tests/examplefiles/objc_example.m | 179 - .../tests/examplefiles/openedge_example | 34 - .../tests/examplefiles/pawn_example | 25 - .../tests/examplefiles/perl_misc | 62 - .../tests/examplefiles/perl_perl5db | 998 - .../tests/examplefiles/perl_regex-delims | 120 - .../tests/examplefiles/perlfunc.1 | 856 - .../tests/examplefiles/phpMyAdmin.spec | 163 - .../tests/examplefiles/phpcomplete.vim | 567 - .../tests/examplefiles/pleac.in.rb | 1223 -- .../tests/examplefiles/postgresql_test.txt | 47 - .../tests/examplefiles/pppoe.applescript | 10 - .../tests/examplefiles/psql_session.txt | 122 - .../tests/examplefiles/py3_test.txt | 2 - .../tests/examplefiles/py3tb_test.py3tb | 4 - .../tests/examplefiles/pycon_test.pycon | 14 - .../tests/examplefiles/pytb_test2.pytb | 2 - .../tests/examplefiles/pytb_test3.pytb | 4 - .../tests/examplefiles/python25-bsd.mak | 234 - .../tests/examplefiles/qbasic_example | 2 - .../tests/examplefiles/qsort.prolog | 13 - .../examplefiles/r-console-transcript.Rout | 38 - .../tests/examplefiles/r6rs-comments.scm | 23 - .../tests/examplefiles/ragel-cpp_rlscan | 280 - .../tests/examplefiles/ragel-cpp_snippet | 2 - .../pygments-main/tests/examplefiles/regex.js | 22 - .../tests/examplefiles/reversi.lsp | 427 - .../examplefiles/robotframework_test.txt | 39 - .../tests/examplefiles/rql-queries.rql | 34 - .../tests/examplefiles/ruby_func_def.rb | 11 - .../tests/examplefiles/rust_example.rs | 233 - .../tests/examplefiles/scilab.sci | 30 - .../tests/examplefiles/scope.cirru | 43 - .../tests/examplefiles/session.dylan-console | 9 - .../tests/examplefiles/sibling.prolog | 19 - .../tests/examplefiles/simple.md | 747 - .../tests/examplefiles/smarty_example.html | 209 - .../tests/examplefiles/source.lgt | 343 - .../tests/examplefiles/sources.list | 62 - .../tests/examplefiles/sparql.rq | 23 - .../tests/examplefiles/sphere.pov | 18 - .../examplefiles/sqlite3.sqlite3-console | 27 - .../tests/examplefiles/squid.conf | 30 - .../tests/examplefiles/string.jl | 1031 - .../tests/examplefiles/string_delimiters.d | 21 - .../tests/examplefiles/stripheredoc.sh | 3 - .../tests/examplefiles/swig_java.swg | 1329 -- .../tests/examplefiles/swig_std_vector.i | 225 - .../pygments-main/tests/examplefiles/test.R | 185 - .../pygments-main/tests/examplefiles/test.adb | 211 - .../tests/examplefiles/test.agda | 102 - .../pygments-main/tests/examplefiles/test.apl | 26 - .../pygments-main/tests/examplefiles/test.asy | 131 - .../pygments-main/tests/examplefiles/test.awk | 121 - .../pygments-main/tests/examplefiles/test.bb | 95 - .../pygments-main/tests/examplefiles/test.bmx | 145 - .../pygments-main/tests/examplefiles/test.boo | 39 - .../pygments-main/tests/examplefiles/test.bro | 250 - .../pygments-main/tests/examplefiles/test.cs | 374 - .../pygments-main/tests/examplefiles/test.css | 54 - .../pygments-main/tests/examplefiles/test.cu | 36 - .../pygments-main/tests/examplefiles/test.cyp | 123 - .../pygments-main/tests/examplefiles/test.d | 135 - .../tests/examplefiles/test.dart | 23 - .../pygments-main/tests/examplefiles/test.dtd | 89 - .../tests/examplefiles/test.ebnf | 31 - .../pygments-main/tests/examplefiles/test.ec | 605 - .../pygments-main/tests/examplefiles/test.ecl | 58 - .../pygments-main/tests/examplefiles/test.eh | 315 - .../pygments-main/tests/examplefiles/test.erl | 169 - .../tests/examplefiles/test.evoque | 33 - .../pygments-main/tests/examplefiles/test.fan | 818 - .../pygments-main/tests/examplefiles/test.flx | 57 - .../pygments-main/tests/examplefiles/test.gdc | 13 - .../tests/examplefiles/test.groovy | 97 - .../tests/examplefiles/test.html | 339 - .../pygments-main/tests/examplefiles/test.idr | 93 - .../pygments-main/tests/examplefiles/test.ini | 10 - .../tests/examplefiles/test.java | 653 - .../pygments-main/tests/examplefiles/test.jsp | 24 - .../tests/examplefiles/test.maql | 45 - .../tests/examplefiles/test.mask | 41 - .../pygments-main/tests/examplefiles/test.mod | 374 - .../pygments-main/tests/examplefiles/test.moo | 51 - .../pygments-main/tests/examplefiles/test.myt | 166 - .../pygments-main/tests/examplefiles/test.nim | 93 - .../pygments-main/tests/examplefiles/test.opa | 10 - .../pygments-main/tests/examplefiles/test.p6 | 252 - .../pygments-main/tests/examplefiles/test.pan | 54 - .../pygments-main/tests/examplefiles/test.pas | 743 - .../pygments-main/tests/examplefiles/test.php | 507 - .../pygments-main/tests/examplefiles/test.pig | 148 - .../tests/examplefiles/test.plot | 333 - .../pygments-main/tests/examplefiles/test.ps1 | 108 - .../pygments-main/tests/examplefiles/test.pwn | 253 - .../tests/examplefiles/test.pypylog | 1839 -- .../pygments-main/tests/examplefiles/test.r3 | 114 - .../pygments-main/tests/examplefiles/test.rb | 177 - .../tests/examplefiles/test.rhtml | 43 - .../pygments-main/tests/examplefiles/test.rsl | 111 - .../tests/examplefiles/test.scaml | 8 - .../pygments-main/tests/examplefiles/test.ssp | 12 - .../tests/examplefiles/test.swift | 65 - .../tests/examplefiles/test.tcsh | 830 - .../pygments-main/tests/examplefiles/test.vb | 407 - .../tests/examplefiles/test.vhdl | 161 - .../pygments-main/tests/examplefiles/test.xqy | 138 - .../pygments-main/tests/examplefiles/test.xsl | 23 - .../pygments-main/tests/examplefiles/test.zep | 33 - .../tests/examplefiles/test2.pypylog | 120 - .../tests/examplefiles/truncated.pytb | 15 - .../tests/examplefiles/type.lisp | 1218 -- .../tests/examplefiles/underscore.coffee | 603 - .../tests/examplefiles/unicode.applescript | 5 - .../tests/examplefiles/unicode.go | 10 - .../tests/examplefiles/unicodedoc.py | 11 - .../tests/examplefiles/unix-io.lid | 37 - .../tests/examplefiles/vbnet_test.bas | 29 - .../tests/examplefiles/vctreestatus_hg | 4 - .../pygments-main/tests/examplefiles/vimrc | 21 - .../tests/examplefiles/webkit-transition.css | 3 - .../tests/examplefiles/while.pov | 13 - .../tests/examplefiles/wiki.factor | 384 - .../tests/examplefiles/xml_example | 1897 -- .../tests/examplefiles/zmlrpc.f90 | 798 - .../vendor/pygments-main/tests/run.py | 44 - .../pygments-main/tests/string_asserts.py | 22 - .../vendor/pygments-main/tests/support.py | 15 - .../vendor/pygments-main/tests/support/tags | 36 - .../pygments-main/tests/test_basic_api.py | 309 - .../vendor/pygments-main/tests/test_cfm.py | 46 - .../vendor/pygments-main/tests/test_clexer.py | 236 - .../pygments-main/tests/test_cmdline.py | 106 - .../pygments-main/tests/test_examplefiles.py | 110 - .../tests/test_html_formatter.py | 180 - .../tests/test_latex_formatter.py | 57 - .../pygments-main/tests/test_lexers_other.py | 68 - .../tests/test_objectiveclexer.py | 81 - .../pygments-main/tests/test_perllexer.py | 137 - .../pygments-main/tests/test_qbasiclexer.py | 43 - .../pygments-main/tests/test_regexlexer.py | 54 - .../pygments-main/tests/test_rtf_formatter.py | 109 - .../tests/test_string_asserts.py | 39 - .../vendor/pygments-main/tests/test_token.py | 46 - .../pygments-main/tests/test_using_api.py | 40 - .../vendor/pygments-main/tests/test_util.py | 135 - .../vendor/simplejson/.gitignore | 10 - .../vendor/simplejson/.travis.yml | 5 - .../vendor/simplejson/CHANGES.txt | 291 - .../vendor/simplejson/LICENSE.txt | 19 - .../vendor/simplejson/MANIFEST.in | 5 - .../vendor/simplejson/README.rst | 19 - .../vendor/simplejson/conf.py | 179 - .../vendor/simplejson/index.rst | 628 - .../vendor/simplejson/scripts/make_docs.py | 18 - .../vendor/simplejson/setup.py | 104 - .../vendor/simplejson/simplejson/__init__.py | 510 - .../vendor/simplejson/simplejson/_speedups.c | 2745 --- .../vendor/simplejson/simplejson/decoder.py | 425 - .../vendor/simplejson/simplejson/encoder.py | 567 - .../simplejson/simplejson/ordered_dict.py | 119 - .../vendor/simplejson/simplejson/scanner.py | 77 - .../simplejson/simplejson/tests/__init__.py | 67 - .../simplejson/tests/test_bigint_as_string.py | 55 - .../simplejson/tests/test_check_circular.py | 30 - .../simplejson/tests/test_decimal.py | 66 - .../simplejson/tests/test_decode.py | 83 - .../simplejson/tests/test_default.py | 9 - .../simplejson/simplejson/tests/test_dump.py | 67 - .../tests/test_encode_basestring_ascii.py | 46 - .../simplejson/tests/test_encode_for_html.py | 32 - .../simplejson/tests/test_errors.py | 34 - .../simplejson/simplejson/tests/test_fail.py | 91 - .../simplejson/simplejson/tests/test_float.py | 19 - .../simplejson/tests/test_indent.py | 86 - .../simplejson/tests/test_item_sort_key.py | 20 - .../simplejson/tests/test_namedtuple.py | 121 - .../simplejson/simplejson/tests/test_pass1.py | 76 - .../simplejson/simplejson/tests/test_pass2.py | 14 - .../simplejson/simplejson/tests/test_pass3.py | 20 - .../simplejson/tests/test_recursion.py | 67 - .../simplejson/tests/test_scanstring.py | 117 - .../simplejson/tests/test_separators.py | 42 - .../simplejson/tests/test_speedups.py | 20 - .../simplejson/simplejson/tests/test_tuple.py | 49 - .../simplejson/tests/test_unicode.py | 109 - .../vendor/simplejson/simplejson/tool.py | 39 - .../2.2.0/gems/rb-fsevent-0.9.4/.gitignore | 13 - .../ruby/2.2.0/gems/rb-fsevent-0.9.4/Gemfile | 6 - .../2.2.0/gems/rb-fsevent-0.9.4/Guardfile | 8 - .../2.2.0/gems/rb-fsevent-0.9.4/LICENSE.txt | 22 - .../2.2.0/gems/rb-fsevent-0.9.4/README.md | 245 - .../ruby/2.2.0/gems/rb-fsevent-0.9.4/Rakefile | 32 - .../gems/rb-fsevent-0.9.4/bin/fsevent_watch | Bin 131920 -> 0 bytes .../rb-fsevent-0.9.4/bin/fsevent_watch_10_5 | Bin 164576 -> 0 bytes .../2.2.0/gems/rb-fsevent-0.9.4/ext/LICENSE | 21 - .../ext/fsevent_watch/TSICTString.c | 394 - .../ext/fsevent_watch/TSICTString.h | 74 - .../rb-fsevent-0.9.4/ext/fsevent_watch/cli.c | 202 - .../rb-fsevent-0.9.4/ext/fsevent_watch/cli.h | 45 - .../ext/fsevent_watch/common.h | 22 - .../ext/fsevent_watch/compat.c | 25 - .../ext/fsevent_watch/compat.h | 47 - .../ext/fsevent_watch/defines.h | 40 - .../rb-fsevent-0.9.4/ext/fsevent_watch/main.c | 489 - .../gems/rb-fsevent-0.9.4/ext/rakefile.rb | 225 - .../gems/rb-fsevent-0.9.4/lib/rb-fsevent.rb | 3 - .../lib/rb-fsevent/fsevent.rb | 114 - .../lib/rb-fsevent/version.rb | 5 - .../gems/rb-fsevent-0.9.4/rb-fsevent.gemspec | 24 - .../spec/fixtures/custom 'path/.gitignore | 0 .../spec/fixtures/folder1/file1.txt | 0 .../spec/fixtures/folder1/folder2/file2.txt | 0 .../spec/rb-fsevent/fsevent_spec.rb | 88 - .../gems/rb-fsevent-0.9.4/spec/spec_helper.rb | 23 - .../2.2.0/gems/rb-inotify-0.9.5/.yardopts | 4 - .../2.2.0/gems/rb-inotify-0.9.5/MIT-LICENSE | 20 - .../2.2.0/gems/rb-inotify-0.9.5/README.md | 66 - .../ruby/2.2.0/gems/rb-inotify-0.9.5/Rakefile | 54 - .../ruby/2.2.0/gems/rb-inotify-0.9.5/VERSION | 1 - .../gems/rb-inotify-0.9.5/lib/rb-inotify.rb | 17 - .../rb-inotify-0.9.5/lib/rb-inotify/event.rb | 146 - .../rb-inotify-0.9.5/lib/rb-inotify/native.rb | 31 - .../lib/rb-inotify/native/flags.rb | 89 - .../lib/rb-inotify/notifier.rb | 318 - .../lib/rb-inotify/watcher.rb | 88 - .../gems/rb-inotify-0.9.5/rb-inotify.gemspec | 52 - .../ruby/2.2.0/gems/redcarpet-3.2.3/COPYING | 14 - .../ruby/2.2.0/gems/redcarpet-3.2.3/Gemfile | 9 - .../gems/redcarpet-3.2.3/README.markdown | 350 - .../ruby/2.2.0/gems/redcarpet-3.2.3/Rakefile | 60 - .../2.2.0/gems/redcarpet-3.2.3/bin/redcarpet | 43 - .../ext/redcarpet/.RUBYARCHDIR.time | 0 .../redcarpet-3.2.3/ext/redcarpet/Makefile | 260 - .../redcarpet-3.2.3/ext/redcarpet/autolink.c | 296 - .../redcarpet-3.2.3/ext/redcarpet/autolink.h | 49 - .../redcarpet-3.2.3/ext/redcarpet/autolink.o | Bin 15584 -> 0 bytes .../redcarpet-3.2.3/ext/redcarpet/buffer.c | 196 - .../redcarpet-3.2.3/ext/redcarpet/buffer.h | 83 - .../redcarpet-3.2.3/ext/redcarpet/buffer.o | Bin 11176 -> 0 bytes .../redcarpet-3.2.3/ext/redcarpet/extconf.rb | 6 - .../redcarpet-3.2.3/ext/redcarpet/houdini.h | 29 - .../ext/redcarpet/houdini_href_e.c | 108 - .../ext/redcarpet/houdini_href_e.o | Bin 4140 -> 0 bytes .../ext/redcarpet/houdini_html_e.c | 83 - .../ext/redcarpet/houdini_html_e.o | Bin 6212 -> 0 bytes .../gems/redcarpet-3.2.3/ext/redcarpet/html.c | 770 - .../gems/redcarpet-3.2.3/ext/redcarpet/html.h | 78 - .../gems/redcarpet-3.2.3/ext/redcarpet/html.o | Bin 42476 -> 0 bytes .../ext/redcarpet/html_blocks.h | 229 - .../ext/redcarpet/html_smartypants.c | 445 - .../ext/redcarpet/html_smartypants.o | Bin 36548 -> 0 bytes .../redcarpet-3.2.3/ext/redcarpet/markdown.c | 2904 --- .../redcarpet-3.2.3/ext/redcarpet/markdown.h | 141 - .../redcarpet-3.2.3/ext/redcarpet/markdown.o | Bin 128248 -> 0 bytes .../ext/redcarpet/rc_markdown.c | 165 - .../ext/redcarpet/rc_markdown.o | Bin 17556 -> 0 bytes .../redcarpet-3.2.3/ext/redcarpet/rc_render.c | 529 - .../redcarpet-3.2.3/ext/redcarpet/rc_render.o | Bin 58988 -> 0 bytes .../ext/redcarpet/redcarpet.bundle | Bin 101568 -> 0 bytes .../redcarpet-3.2.3/ext/redcarpet/redcarpet.h | 30 - .../redcarpet-3.2.3/ext/redcarpet/stack.c | 62 - .../redcarpet-3.2.3/ext/redcarpet/stack.h | 26 - .../redcarpet-3.2.3/ext/redcarpet/stack.o | Bin 4620 -> 0 bytes .../gems/redcarpet-3.2.3/lib/redcarpet.bundle | Bin 101568 -> 0 bytes .../gems/redcarpet-3.2.3/lib/redcarpet.rb | 92 - .../redcarpet-3.2.3/lib/redcarpet/compat.rb | 76 - .../lib/redcarpet/render_man.rb | 65 - .../lib/redcarpet/render_strip.rb | 48 - .../gems/redcarpet-3.2.3/redcarpet.gemspec | 68 - .../gems/redcarpet-3.2.3/test/benchmark.rb | 24 - .../test/custom_render_test.rb | 28 - .../gems/redcarpet-3.2.3/test/html5_test.rb | 69 - .../redcarpet-3.2.3/test/html_render_test.rb | 240 - .../test/html_toc_render_test.rb | 49 - .../redcarpet-3.2.3/test/markdown_test.rb | 323 - .../test/pathological_inputs_test.rb | 34 - .../test/redcarpet_compat_test.rb | 38 - .../redcarpet-3.2.3/test/safe_render_test.rb | 36 - .../redcarpet-3.2.3/test/smarty_html_test.rb | 45 - .../redcarpet-3.2.3/test/smarty_pants_test.rb | 48 - .../test/stripdown_render_test.rb | 40 - .../gems/redcarpet-3.2.3/test/test_helper.rb | 29 - .../ruby/2.2.0/gems/rouge-1.9.1/Gemfile | 23 - .../ruby/2.2.0/gems/rouge-1.9.1/LICENSE | 186 - .../ruby/2.2.0/gems/rouge-1.9.1/bin/rougify | 16 - .../ruby/2.2.0/gems/rouge-1.9.1/lib/rouge.rb | 57 - .../2.2.0/gems/rouge-1.9.1/lib/rouge/cli.rb | 363 - .../gems/rouge-1.9.1/lib/rouge/demos/apache | 21 - .../rouge-1.9.1/lib/rouge/demos/applescript | 2 - .../2.2.0/gems/rouge-1.9.1/lib/rouge/demos/c | 8 - .../gems/rouge-1.9.1/lib/rouge/demos/clojure | 5 - .../rouge-1.9.1/lib/rouge/demos/coffeescript | 5 - .../rouge-1.9.1/lib/rouge/demos/common_lisp | 1 - .../gems/rouge-1.9.1/lib/rouge/demos/conf | 4 - .../gems/rouge-1.9.1/lib/rouge/demos/cpp | 8 - .../gems/rouge-1.9.1/lib/rouge/demos/csharp | 5 - .../gems/rouge-1.9.1/lib/rouge/demos/css | 4 - .../gems/rouge-1.9.1/lib/rouge/demos/dart | 6 - .../gems/rouge-1.9.1/lib/rouge/demos/diff | 7 - .../gems/rouge-1.9.1/lib/rouge/demos/elixir | 1 - .../gems/rouge-1.9.1/lib/rouge/demos/erb | 1 - .../gems/rouge-1.9.1/lib/rouge/demos/erlang | 7 - .../gems/rouge-1.9.1/lib/rouge/demos/factor | 5 - .../gems/rouge-1.9.1/lib/rouge/demos/gherkin | 17 - .../gems/rouge-1.9.1/lib/rouge/demos/glsl | 14 - .../2.2.0/gems/rouge-1.9.1/lib/rouge/demos/go | 7 - .../gems/rouge-1.9.1/lib/rouge/demos/groovy | 9 - .../gems/rouge-1.9.1/lib/rouge/demos/haml | 5 - .../rouge-1.9.1/lib/rouge/demos/handlebars | 7 - .../gems/rouge-1.9.1/lib/rouge/demos/haskell | 6 - .../gems/rouge-1.9.1/lib/rouge/demos/html | 8 - .../gems/rouge-1.9.1/lib/rouge/demos/http | 14 - .../gems/rouge-1.9.1/lib/rouge/demos/ini | 4 - .../2.2.0/gems/rouge-1.9.1/lib/rouge/demos/io | 11 - .../gems/rouge-1.9.1/lib/rouge/demos/java | 5 - .../rouge-1.9.1/lib/rouge/demos/javascript | 1 - .../gems/rouge-1.9.1/lib/rouge/demos/json | 1 - .../gems/rouge-1.9.1/lib/rouge/demos/json-doc | 1 - .../gems/rouge-1.9.1/lib/rouge/demos/liquid | 11 - .../lib/rouge/demos/literate_coffeescript | 3 - .../lib/rouge/demos/literate_haskell | 7 - .../gems/rouge-1.9.1/lib/rouge/demos/llvm | 20 - .../gems/rouge-1.9.1/lib/rouge/demos/lua | 12 - .../gems/rouge-1.9.1/lib/rouge/demos/make | 6 - .../gems/rouge-1.9.1/lib/rouge/demos/markdown | 4 - .../gems/rouge-1.9.1/lib/rouge/demos/matlab | 6 - .../rouge-1.9.1/lib/rouge/demos/moonscript | 16 - .../gems/rouge-1.9.1/lib/rouge/demos/nginx | 5 - .../gems/rouge-1.9.1/lib/rouge/demos/nim | 27 - .../rouge-1.9.1/lib/rouge/demos/objective_c | 14 - .../gems/rouge-1.9.1/lib/rouge/demos/ocaml | 12 - .../gems/rouge-1.9.1/lib/rouge/demos/perl | 5 - .../gems/rouge-1.9.1/lib/rouge/demos/php | 3 - .../rouge-1.9.1/lib/rouge/demos/plaintext | 1 - .../rouge-1.9.1/lib/rouge/demos/powershell | 49 - .../gems/rouge-1.9.1/lib/rouge/demos/prolog | 9 - .../rouge-1.9.1/lib/rouge/demos/properties | 7 - .../gems/rouge-1.9.1/lib/rouge/demos/puppet | 6 - .../gems/rouge-1.9.1/lib/rouge/demos/python | 6 - .../gems/rouge-1.9.1/lib/rouge/demos/qml | 9 - .../2.2.0/gems/rouge-1.9.1/lib/rouge/demos/r | 8 - .../gems/rouge-1.9.1/lib/rouge/demos/racket | 24 - .../gems/rouge-1.9.1/lib/rouge/demos/ruby | 9 - .../gems/rouge-1.9.1/lib/rouge/demos/rust | 12 - .../gems/rouge-1.9.1/lib/rouge/demos/sass | 3 - .../gems/rouge-1.9.1/lib/rouge/demos/scala | 3 - .../gems/rouge-1.9.1/lib/rouge/demos/scheme | 4 - .../gems/rouge-1.9.1/lib/rouge/demos/scss | 5 - .../gems/rouge-1.9.1/lib/rouge/demos/sed | 4 - .../gems/rouge-1.9.1/lib/rouge/demos/shell | 2 - .../gems/rouge-1.9.1/lib/rouge/demos/slim | 17 - .../rouge-1.9.1/lib/rouge/demos/smalltalk | 6 - .../gems/rouge-1.9.1/lib/rouge/demos/sml | 4 - .../gems/rouge-1.9.1/lib/rouge/demos/sql | 1 - .../gems/rouge-1.9.1/lib/rouge/demos/swift | 5 - .../gems/rouge-1.9.1/lib/rouge/demos/tcl | 1 - .../gems/rouge-1.9.1/lib/rouge/demos/tex | 1 - .../gems/rouge-1.9.1/lib/rouge/demos/toml | 9 - .../gems/rouge-1.9.1/lib/rouge/demos/tulip | 14 - .../2.2.0/gems/rouge-1.9.1/lib/rouge/demos/vb | 4 - .../gems/rouge-1.9.1/lib/rouge/demos/viml | 5 - .../gems/rouge-1.9.1/lib/rouge/demos/xml | 2 - .../gems/rouge-1.9.1/lib/rouge/demos/yaml | 4 - .../gems/rouge-1.9.1/lib/rouge/formatter.rb | 50 - .../rouge-1.9.1/lib/rouge/formatters/html.rb | 117 - .../lib/rouge/formatters/html_inline.rb | 20 - .../lib/rouge/formatters/html_linewise.rb | 31 - .../rouge-1.9.1/lib/rouge/formatters/null.rb | 19 - .../lib/rouge/formatters/terminal256.rb | 176 - .../2.2.0/gems/rouge-1.9.1/lib/rouge/lexer.rb | 443 - .../rouge-1.9.1/lib/rouge/lexers/apache.rb | 68 - .../lib/rouge/lexers/apache/keywords.yml | 453 - .../lib/rouge/lexers/apple_script.rb | 367 - .../gems/rouge-1.9.1/lib/rouge/lexers/c.rb | 212 - .../rouge-1.9.1/lib/rouge/lexers/clojure.rb | 112 - .../lib/rouge/lexers/coffeescript.rb | 174 - .../lib/rouge/lexers/common_lisp.rb | 345 - .../gems/rouge-1.9.1/lib/rouge/lexers/conf.rb | 24 - .../gems/rouge-1.9.1/lib/rouge/lexers/cpp.rb | 66 - .../rouge-1.9.1/lib/rouge/lexers/csharp.rb | 88 - .../gems/rouge-1.9.1/lib/rouge/lexers/css.rb | 271 - .../gems/rouge-1.9.1/lib/rouge/lexers/dart.rb | 104 - .../gems/rouge-1.9.1/lib/rouge/lexers/diff.rb | 34 - .../rouge-1.9.1/lib/rouge/lexers/elixir.rb | 108 - .../gems/rouge-1.9.1/lib/rouge/lexers/erb.rb | 56 - .../rouge-1.9.1/lib/rouge/lexers/erlang.rb | 118 - .../rouge-1.9.1/lib/rouge/lexers/factor.rb | 302 - .../rouge-1.9.1/lib/rouge/lexers/gherkin.rb | 137 - .../lib/rouge/lexers/gherkin/keywords.rb | 14 - .../gems/rouge-1.9.1/lib/rouge/lexers/glsl.rb | 135 - .../gems/rouge-1.9.1/lib/rouge/lexers/go.rb | 178 - .../rouge-1.9.1/lib/rouge/lexers/groovy.rb | 104 - .../gems/rouge-1.9.1/lib/rouge/lexers/haml.rb | 228 - .../lib/rouge/lexers/handlebars.rb | 79 - .../rouge-1.9.1/lib/rouge/lexers/haskell.rb | 183 - .../gems/rouge-1.9.1/lib/rouge/lexers/html.rb | 94 - .../gems/rouge-1.9.1/lib/rouge/lexers/http.rb | 80 - .../gems/rouge-1.9.1/lib/rouge/lexers/ini.rb | 57 - .../gems/rouge-1.9.1/lib/rouge/lexers/io.rb | 68 - .../gems/rouge-1.9.1/lib/rouge/lexers/java.rb | 76 - .../lib/rouge/lexers/javascript.rb | 297 - .../rouge-1.9.1/lib/rouge/lexers/liquid.rb | 287 - .../lib/rouge/lexers/literate_coffeescript.rb | 33 - .../lib/rouge/lexers/literate_haskell.rb | 36 - .../gems/rouge-1.9.1/lib/rouge/lexers/llvm.rb | 84 - .../gems/rouge-1.9.1/lib/rouge/lexers/lua.rb | 122 - .../lib/rouge/lexers/lua/builtins.rb | 22 - .../gems/rouge-1.9.1/lib/rouge/lexers/make.rb | 116 - .../rouge-1.9.1/lib/rouge/lexers/markdown.rb | 154 - .../rouge-1.9.1/lib/rouge/lexers/matlab.rb | 74 - .../lib/rouge/lexers/matlab/builtins.rb | 11 - .../lib/rouge/lexers/moonscript.rb | 110 - .../rouge-1.9.1/lib/rouge/lexers/nginx.rb | 71 - .../gems/rouge-1.9.1/lib/rouge/lexers/nim.rb | 152 - .../lib/rouge/lexers/objective_c.rb | 197 - .../rouge-1.9.1/lib/rouge/lexers/ocaml.rb | 111 - .../gems/rouge-1.9.1/lib/rouge/lexers/perl.rb | 197 - .../gems/rouge-1.9.1/lib/rouge/lexers/php.rb | 173 - .../lib/rouge/lexers/php/builtins.rb | 204 - .../lib/rouge/lexers/plain_text.rb | 25 - .../lib/rouge/lexers/powershell.rb | 96 - .../rouge-1.9.1/lib/rouge/lexers/prolog.rb | 64 - .../lib/rouge/lexers/properties.rb | 55 - .../rouge-1.9.1/lib/rouge/lexers/puppet.rb | 128 - .../rouge-1.9.1/lib/rouge/lexers/python.rb | 228 - .../gems/rouge-1.9.1/lib/rouge/lexers/qml.rb | 72 - .../gems/rouge-1.9.1/lib/rouge/lexers/r.rb | 56 - .../rouge-1.9.1/lib/rouge/lexers/racket.rb | 542 - .../gems/rouge-1.9.1/lib/rouge/lexers/ruby.rb | 415 - .../gems/rouge-1.9.1/lib/rouge/lexers/rust.rb | 191 - .../gems/rouge-1.9.1/lib/rouge/lexers/sass.rb | 74 - .../lib/rouge/lexers/sass/common.rb | 180 - .../rouge-1.9.1/lib/rouge/lexers/scala.rb | 142 - .../rouge-1.9.1/lib/rouge/lexers/scheme.rb | 112 - .../gems/rouge-1.9.1/lib/rouge/lexers/scss.rb | 34 - .../gems/rouge-1.9.1/lib/rouge/lexers/sed.rb | 170 - .../rouge-1.9.1/lib/rouge/lexers/shell.rb | 152 - .../gems/rouge-1.9.1/lib/rouge/lexers/slim.rb | 228 - .../rouge-1.9.1/lib/rouge/lexers/smalltalk.rb | 116 - .../gems/rouge-1.9.1/lib/rouge/lexers/sml.rb | 347 - .../gems/rouge-1.9.1/lib/rouge/lexers/sql.rb | 140 - .../rouge-1.9.1/lib/rouge/lexers/swift.rb | 159 - .../gems/rouge-1.9.1/lib/rouge/lexers/tcl.rb | 192 - .../gems/rouge-1.9.1/lib/rouge/lexers/tex.rb | 72 - .../gems/rouge-1.9.1/lib/rouge/lexers/toml.rb | 71 - .../rouge-1.9.1/lib/rouge/lexers/tulip.rb | 75 - .../gems/rouge-1.9.1/lib/rouge/lexers/vb.rb | 164 - .../gems/rouge-1.9.1/lib/rouge/lexers/viml.rb | 101 - .../lib/rouge/lexers/viml/keywords.rb | 12 - .../gems/rouge-1.9.1/lib/rouge/lexers/xml.rb | 59 - .../gems/rouge-1.9.1/lib/rouge/lexers/yaml.rb | 364 - .../lib/rouge/plugins/redcarpet.rb | 30 - .../gems/rouge-1.9.1/lib/rouge/regex_lexer.rb | 439 - .../rouge-1.9.1/lib/rouge/template_lexer.rb | 22 - .../rouge-1.9.1/lib/rouge/text_analyzer.rb | 48 - .../2.2.0/gems/rouge-1.9.1/lib/rouge/theme.rb | 195 - .../rouge-1.9.1/lib/rouge/themes/base16.rb | 130 - .../rouge-1.9.1/lib/rouge/themes/colorful.rb | 67 - .../rouge-1.9.1/lib/rouge/themes/github.rb | 71 - .../rouge-1.9.1/lib/rouge/themes/molokai.rb | 82 - .../rouge-1.9.1/lib/rouge/themes/monokai.rb | 92 - .../lib/rouge/themes/monokai_sublime.rb | 90 - .../lib/rouge/themes/thankful_eyes.rb | 71 - .../2.2.0/gems/rouge-1.9.1/lib/rouge/token.rb | 182 - .../2.2.0/gems/rouge-1.9.1/lib/rouge/util.rb | 101 - .../gems/rouge-1.9.1/lib/rouge/version.rb | 7 - .../ruby/2.2.0/gems/rouge-1.9.1/rouge.gemspec | 18 - .../2.2.0/gems/safe_yaml-1.0.4/.gitignore | 1 - .../2.2.0/gems/safe_yaml-1.0.4/.travis.yml | 48 - .../2.2.0/gems/safe_yaml-1.0.4/CHANGES.md | 149 - .../ruby/2.2.0/gems/safe_yaml-1.0.4/Gemfile | 11 - .../2.2.0/gems/safe_yaml-1.0.4/LICENSE.txt | 22 - .../ruby/2.2.0/gems/safe_yaml-1.0.4/README.md | 191 - .../ruby/2.2.0/gems/safe_yaml-1.0.4/Rakefile | 26 - .../2.2.0/gems/safe_yaml-1.0.4/bin/safe_yaml | 75 - .../bundle_install_all_ruby_versions.sh | 11 - .../gems/safe_yaml-1.0.4/lib/safe_yaml.rb | 94 - .../safe_yaml-1.0.4/lib/safe_yaml/deep.rb | 34 - .../lib/safe_yaml/libyaml_checker.rb | 36 - .../safe_yaml-1.0.4/lib/safe_yaml/load.rb | 181 - .../lib/safe_yaml/parse/date.rb | 35 - .../lib/safe_yaml/parse/hexadecimal.rb | 12 - .../lib/safe_yaml/parse/sexagesimal.rb | 26 - .../lib/safe_yaml/psych_handler.rb | 99 - .../lib/safe_yaml/psych_resolver.rb | 52 - .../safe_yaml-1.0.4/lib/safe_yaml/resolver.rb | 94 - .../lib/safe_yaml/safe_to_ruby_visitor.rb | 29 - .../lib/safe_yaml/syck_hack.rb | 36 - .../lib/safe_yaml/syck_node_monkeypatch.rb | 43 - .../lib/safe_yaml/syck_resolver.rb | 38 - .../lib/safe_yaml/transform.rb | 41 - .../lib/safe_yaml/transform/to_boolean.rb | 21 - .../lib/safe_yaml/transform/to_date.rb | 13 - .../lib/safe_yaml/transform/to_float.rb | 33 - .../lib/safe_yaml/transform/to_integer.rb | 26 - .../lib/safe_yaml/transform/to_nil.rb | 18 - .../lib/safe_yaml/transform/to_symbol.rb | 17 - .../safe_yaml/transform/transformation_map.rb | 47 - .../safe_yaml-1.0.4/lib/safe_yaml/version.rb | 3 - .../run_specs_all_ruby_versions.sh | 38 - .../gems/safe_yaml-1.0.4/safe_yaml.gemspec | 19 - .../safe_yaml-1.0.4/spec/exploit.1.9.2.yaml | 2 - .../safe_yaml-1.0.4/spec/exploit.1.9.3.yaml | 2 - .../gems/safe_yaml-1.0.4/spec/issue48.txt | 20 - .../gems/safe_yaml-1.0.4/spec/issue49.yml | 0 .../spec/libyaml_checker_spec.rb | 69 - .../spec/psych_resolver_spec.rb | 10 - .../safe_yaml-1.0.4/spec/resolver_specs.rb | 278 - .../safe_yaml-1.0.4/spec/safe_yaml_spec.rb | 731 - .../gems/safe_yaml-1.0.4/spec/spec_helper.rb | 42 - .../spec/support/exploitable_back_door.rb | 29 - .../spec/syck_resolver_spec.rb | 10 - .../spec/transform/base64_spec.rb | 11 - .../spec/transform/to_date_spec.rb | 60 - .../spec/transform/to_float_spec.rb | 42 - .../spec/transform/to_integer_spec.rb | 64 - .../spec/transform/to_symbol_spec.rb | 51 - .../gems/safe_yaml-1.0.4/spec/yaml_spec.rb | 15 - .../ruby/2.2.0/gems/sass-3.4.13/.yardopts | 11 - .../2.2.0/gems/sass-3.4.13/CONTRIBUTING.md | 3 - .../ruby/2.2.0/gems/sass-3.4.13/MIT-LICENSE | 20 - .../ruby/2.2.0/gems/sass-3.4.13/README.md | 221 - .../ruby/2.2.0/gems/sass-3.4.13/REVISION | 1 - .../ruby/2.2.0/gems/sass-3.4.13/Rakefile | 370 - .../ruby/2.2.0/gems/sass-3.4.13/VERSION | 1 - .../ruby/2.2.0/gems/sass-3.4.13/VERSION_DATE | 1 - .../ruby/2.2.0/gems/sass-3.4.13/VERSION_NAME | 1 - .../ruby/2.2.0/gems/sass-3.4.13/bin/sass | 13 - .../2.2.0/gems/sass-3.4.13/bin/sass-convert | 12 - .../ruby/2.2.0/gems/sass-3.4.13/bin/scss | 13 - .../gems/sass-3.4.13/extra/update_watch.rb | 13 - .../ruby/2.2.0/gems/sass-3.4.13/init.rb | 18 - .../ruby/2.2.0/gems/sass-3.4.13/lib/sass.rb | 102 - .../gems/sass-3.4.13/lib/sass/cache_stores.rb | 15 - .../sass-3.4.13/lib/sass/cache_stores/base.rb | 88 - .../lib/sass/cache_stores/chain.rb | 34 - .../lib/sass/cache_stores/filesystem.rb | 60 - .../lib/sass/cache_stores/memory.rb | 47 - .../sass-3.4.13/lib/sass/cache_stores/null.rb | 25 - .../gems/sass-3.4.13/lib/sass/callbacks.rb | 67 - .../2.2.0/gems/sass-3.4.13/lib/sass/css.rb | 407 - .../2.2.0/gems/sass-3.4.13/lib/sass/engine.rb | 1182 -- .../gems/sass-3.4.13/lib/sass/environment.rb | 208 - .../2.2.0/gems/sass-3.4.13/lib/sass/error.rb | 198 - .../2.2.0/gems/sass-3.4.13/lib/sass/exec.rb | 9 - .../gems/sass-3.4.13/lib/sass/exec/base.rb | 199 - .../sass-3.4.13/lib/sass/exec/sass_convert.rb | 269 - .../sass-3.4.13/lib/sass/exec/sass_scss.rb | 455 - .../gems/sass-3.4.13/lib/sass/features.rb | 47 - .../gems/sass-3.4.13/lib/sass/importers.rb | 22 - .../sass-3.4.13/lib/sass/importers/base.rb | 182 - .../lib/sass/importers/filesystem.rb | 217 - .../2.2.0/gems/sass-3.4.13/lib/sass/logger.rb | 12 - .../gems/sass-3.4.13/lib/sass/logger/base.rb | 30 - .../sass-3.4.13/lib/sass/logger/log_level.rb | 45 - .../2.2.0/gems/sass-3.4.13/lib/sass/media.rb | 210 - .../2.2.0/gems/sass-3.4.13/lib/sass/plugin.rb | 133 - .../sass-3.4.13/lib/sass/plugin/compiler.rb | 571 - .../lib/sass/plugin/configuration.rb | 118 - .../sass-3.4.13/lib/sass/plugin/generic.rb | 15 - .../gems/sass-3.4.13/lib/sass/plugin/merb.rb | 48 - .../gems/sass-3.4.13/lib/sass/plugin/rack.rb | 60 - .../gems/sass-3.4.13/lib/sass/plugin/rails.rb | 47 - .../lib/sass/plugin/staleness_checker.rb | 199 - .../gems/sass-3.4.13/lib/sass/railtie.rb | 10 - .../2.2.0/gems/sass-3.4.13/lib/sass/repl.rb | 57 - .../2.2.0/gems/sass-3.4.13/lib/sass/root.rb | 7 - .../2.2.0/gems/sass-3.4.13/lib/sass/script.rb | 66 - .../sass-3.4.13/lib/sass/script/css_lexer.rb | 33 - .../sass-3.4.13/lib/sass/script/css_parser.rb | 34 - .../sass-3.4.13/lib/sass/script/functions.rb | 2652 --- .../gems/sass-3.4.13/lib/sass/script/lexer.rb | 456 - .../sass-3.4.13/lib/sass/script/parser.rb | 638 - .../gems/sass-3.4.13/lib/sass/script/tree.rb | 16 - .../lib/sass/script/tree/funcall.rb | 306 - .../lib/sass/script/tree/interpolation.rb | 118 - .../lib/sass/script/tree/list_literal.rb | 78 - .../lib/sass/script/tree/literal.rb | 45 - .../lib/sass/script/tree/map_literal.rb | 64 - .../sass-3.4.13/lib/sass/script/tree/node.rb | 109 - .../lib/sass/script/tree/operation.rb | 115 - .../lib/sass/script/tree/selector.rb | 26 - .../sass/script/tree/string_interpolation.rb | 104 - .../lib/sass/script/tree/unary_operation.rb | 69 - .../lib/sass/script/tree/variable.rb | 57 - .../gems/sass-3.4.13/lib/sass/script/value.rb | 11 - .../lib/sass/script/value/arg_list.rb | 36 - .../sass-3.4.13/lib/sass/script/value/base.rb | 240 - .../sass-3.4.13/lib/sass/script/value/bool.rb | 35 - .../lib/sass/script/value/color.rb | 680 - .../lib/sass/script/value/helpers.rb | 262 - .../sass-3.4.13/lib/sass/script/value/list.rb | 113 - .../sass-3.4.13/lib/sass/script/value/map.rb | 70 - .../sass-3.4.13/lib/sass/script/value/null.rb | 44 - .../lib/sass/script/value/number.rb | 530 - .../lib/sass/script/value/string.rb | 97 - .../2.2.0/gems/sass-3.4.13/lib/sass/scss.rb | 16 - .../sass-3.4.13/lib/sass/scss/css_parser.rb | 57 - .../gems/sass-3.4.13/lib/sass/scss/parser.rb | 1211 -- .../gems/sass-3.4.13/lib/sass/scss/rx.rb | 141 - .../sass-3.4.13/lib/sass/scss/script_lexer.rb | 15 - .../lib/sass/scss/script_parser.rb | 25 - .../lib/sass/scss/static_parser.rb | 368 - .../gems/sass-3.4.13/lib/sass/selector.rb | 326 - .../lib/sass/selector/abstract_sequence.rb | 109 - .../lib/sass/selector/comma_sequence.rb | 177 - .../sass-3.4.13/lib/sass/selector/pseudo.rb | 266 - .../sass-3.4.13/lib/sass/selector/sequence.rb | 636 - .../sass-3.4.13/lib/sass/selector/simple.rb | 114 - .../lib/sass/selector/simple_sequence.rb | 344 - .../2.2.0/gems/sass-3.4.13/lib/sass/shared.rb | 76 - .../gems/sass-3.4.13/lib/sass/source/map.rb | 211 - .../sass-3.4.13/lib/sass/source/position.rb | 39 - .../gems/sass-3.4.13/lib/sass/source/range.rb | 41 - .../2.2.0/gems/sass-3.4.13/lib/sass/stack.rb | 120 - .../gems/sass-3.4.13/lib/sass/supports.rb | 227 - .../sass-3.4.13/lib/sass/tree/at_root_node.rb | 83 - .../sass-3.4.13/lib/sass/tree/charset_node.rb | 22 - .../sass-3.4.13/lib/sass/tree/comment_node.rb | 82 - .../sass-3.4.13/lib/sass/tree/content_node.rb | 9 - .../lib/sass/tree/css_import_node.rb | 60 - .../sass-3.4.13/lib/sass/tree/debug_node.rb | 18 - .../lib/sass/tree/directive_node.rb | 59 - .../sass-3.4.13/lib/sass/tree/each_node.rb | 24 - .../sass-3.4.13/lib/sass/tree/error_node.rb | 18 - .../sass-3.4.13/lib/sass/tree/extend_node.rb | 43 - .../sass-3.4.13/lib/sass/tree/for_node.rb | 36 - .../lib/sass/tree/function_node.rb | 45 - .../gems/sass-3.4.13/lib/sass/tree/if_node.rb | 52 - .../sass-3.4.13/lib/sass/tree/import_node.rb | 74 - .../lib/sass/tree/keyframe_rule_node.rb | 15 - .../sass-3.4.13/lib/sass/tree/media_node.rb | 48 - .../lib/sass/tree/mixin_def_node.rb | 38 - .../sass-3.4.13/lib/sass/tree/mixin_node.rb | 52 - .../gems/sass-3.4.13/lib/sass/tree/node.rb | 238 - .../sass-3.4.13/lib/sass/tree/prop_node.rb | 171 - .../sass-3.4.13/lib/sass/tree/return_node.rb | 19 - .../sass-3.4.13/lib/sass/tree/root_node.rb | 44 - .../sass-3.4.13/lib/sass/tree/rule_node.rb | 146 - .../lib/sass/tree/supports_node.rb | 38 - .../sass-3.4.13/lib/sass/tree/trace_node.rb | 33 - .../lib/sass/tree/variable_node.rb | 36 - .../lib/sass/tree/visitors/base.rb | 72 - .../lib/sass/tree/visitors/check_nesting.rb | 177 - .../lib/sass/tree/visitors/convert.rb | 338 - .../lib/sass/tree/visitors/cssize.rb | 373 - .../lib/sass/tree/visitors/deep_copy.rb | 107 - .../lib/sass/tree/visitors/extend.rb | 68 - .../lib/sass/tree/visitors/perform.rb | 557 - .../lib/sass/tree/visitors/set_options.rb | 139 - .../lib/sass/tree/visitors/to_css.rb | 381 - .../sass-3.4.13/lib/sass/tree/warn_node.rb | 18 - .../sass-3.4.13/lib/sass/tree/while_node.rb | 18 - .../2.2.0/gems/sass-3.4.13/lib/sass/util.rb | 1376 -- .../lib/sass/util/cross_platform_random.rb | 19 - .../lib/sass/util/multibyte_string_scanner.rb | 157 - .../lib/sass/util/normalized_map.rb | 130 - .../sass-3.4.13/lib/sass/util/ordered_hash.rb | 192 - .../sass-3.4.13/lib/sass/util/subset_map.rb | 110 - .../gems/sass-3.4.13/lib/sass/util/test.rb | 9 - .../gems/sass-3.4.13/lib/sass/version.rb | 124 - .../ruby/2.2.0/gems/sass-3.4.13/rails/init.rb | 1 - .../gems/sass-3.4.13/test/sass/cache_test.rb | 131 - .../sass-3.4.13/test/sass/callbacks_test.rb | 61 - .../sass-3.4.13/test/sass/compiler_test.rb | 236 - .../sass-3.4.13/test/sass/conversion_test.rb | 2067 -- .../sass-3.4.13/test/sass/css2sass_test.rb | 509 - .../sass-3.4.13/test/sass/data/hsl-rgb.txt | 319 - .../sass-3.4.13/test/sass/encoding_test.rb | 219 - .../gems/sass-3.4.13/test/sass/engine_test.rb | 3315 --- .../gems/sass-3.4.13/test/sass/exec_test.rb | 86 - .../gems/sass-3.4.13/test/sass/extend_test.rb | 1707 -- .../test_staleness_check_across_importers.css | 1 - ...test_staleness_check_across_importers.scss | 1 - .../sass-3.4.13/test/sass/functions_test.rb | 1971 -- .../sass-3.4.13/test/sass/importer_test.rb | 421 - .../gems/sass-3.4.13/test/sass/logger_test.rb | 58 - .../sass-3.4.13/test/sass/mock_importer.rb | 49 - .../test/sass/more_results/more1.css | 9 - .../more_results/more1_with_line_comments.css | 26 - .../test/sass/more_results/more_import.css | 29 - .../sass/more_templates/_more_partial.sass | 2 - .../test/sass/more_templates/more1.sass | 23 - .../test/sass/more_templates/more_import.sass | 11 - .../gems/sass-3.4.13/test/sass/plugin_test.rb | 556 - .../sass-3.4.13/test/sass/results/alt.css | 4 - .../sass-3.4.13/test/sass/results/basic.css | 9 - .../sass/results/cached_import_option.css | 3 - .../sass-3.4.13/test/sass/results/compact.css | 5 - .../sass-3.4.13/test/sass/results/complex.css | 86 - .../test/sass/results/compressed.css | 1 - .../test/sass/results/expanded.css | 19 - .../test/sass/results/filename_fn.css | 3 - .../gems/sass-3.4.13/test/sass/results/if.css | 3 - .../sass-3.4.13/test/sass/results/import.css | 31 - .../test/sass/results/import_charset.css | 5 - .../test/sass/results/import_charset_1_8.css | 5 - .../sass/results/import_charset_ibm866.css | 5 - .../test/sass/results/import_content.css | 1 - .../test/sass/results/line_numbers.css | 49 - .../sass-3.4.13/test/sass/results/mixins.css | 95 - .../test/sass/results/multiline.css | 24 - .../sass-3.4.13/test/sass/results/nested.css | 22 - .../sass-3.4.13/test/sass/results/options.css | 1 - .../test/sass/results/parent_ref.css | 13 - .../sass-3.4.13/test/sass/results/script.css | 16 - .../test/sass/results/scss_import.css | 31 - .../test/sass/results/scss_importee.css | 2 - .../subdir/nested_subdir/nested_subdir.css | 1 - .../test/sass/results/subdir/subdir.css | 3 - .../sass-3.4.13/test/sass/results/units.css | 11 - .../sass-3.4.13/test/sass/results/warn.css | 0 .../test/sass/results/warn_imported.css | 0 .../test/sass/script_conversion_test.rb | 353 - .../gems/sass-3.4.13/test/sass/script_test.rb | 1177 -- .../sass-3.4.13/test/sass/scss/css_test.rb | 1256 -- .../sass-3.4.13/test/sass/scss/rx_test.rb | 156 - .../sass-3.4.13/test/sass/scss/scss_test.rb | 4119 ---- .../sass-3.4.13/test/sass/scss/test_helper.rb | 37 - .../sass-3.4.13/test/sass/source_map_test.rb | 977 - .../test/sass/superselector_test.rb | 210 - .../_cached_import_option_partial.scss | 1 - .../sass/templates/_double_import_loop2.sass | 1 - .../sass/templates/_filename_fn_import.scss | 11 - .../templates/_imported_charset_ibm866.sass | 4 - .../templates/_imported_charset_utf8.sass | 4 - .../sass/templates/_imported_content.sass | 3 - .../test/sass/templates/_partial.sass | 2 - .../_same_name_different_partiality.scss | 1 - .../sass-3.4.13/test/sass/templates/alt.sass | 16 - .../test/sass/templates/basic.sass | 23 - .../test/sass/templates/bork1.sass | 2 - .../test/sass/templates/bork2.sass | 2 - .../test/sass/templates/bork3.sass | 2 - .../test/sass/templates/bork4.sass | 2 - .../test/sass/templates/bork5.sass | 3 - .../sass/templates/cached_import_option.scss | 3 - .../test/sass/templates/compact.sass | 17 - .../test/sass/templates/complex.sass | 305 - .../test/sass/templates/compressed.sass | 15 - .../sass/templates/double_import_loop1.sass | 1 - .../test/sass/templates/expanded.sass | 17 - .../test/sass/templates/filename_fn.scss | 18 - .../sass-3.4.13/test/sass/templates/if.sass | 11 - .../test/sass/templates/import.sass | 12 - .../test/sass/templates/import_charset.sass | 9 - .../sass/templates/import_charset_1_8.sass | 6 - .../sass/templates/import_charset_ibm866.sass | 11 - .../test/sass/templates/import_content.sass | 4 - .../test/sass/templates/importee.less | 2 - .../test/sass/templates/importee.sass | 19 - .../test/sass/templates/line_numbers.sass | 13 - .../test/sass/templates/mixin_bork.sass | 5 - .../test/sass/templates/mixins.sass | 76 - .../test/sass/templates/multiline.sass | 20 - .../test/sass/templates/nested.sass | 25 - .../test/sass/templates/nested_bork1.sass | 2 - .../test/sass/templates/nested_bork2.sass | 2 - .../test/sass/templates/nested_bork3.sass | 2 - .../test/sass/templates/nested_bork4.sass | 2 - .../test/sass/templates/nested_import.sass | 2 - .../sass/templates/nested_mixin_bork.sass | 6 - .../test/sass/templates/options.sass | 2 - .../test/sass/templates/parent_ref.sass | 25 - .../templates/same_name_different_ext.sass | 2 - .../templates/same_name_different_ext.scss | 1 - .../same_name_different_partiality.scss | 1 - .../test/sass/templates/script.sass | 101 - .../test/sass/templates/scss_import.scss | 12 - .../test/sass/templates/scss_importee.scss | 1 - .../sass/templates/single_import_loop.sass | 1 - .../sass/templates/subdir/import_up1.scss | 1 - .../sass/templates/subdir/import_up2.scss | 1 - .../subdir/nested_subdir/_nested_partial.sass | 2 - .../subdir/nested_subdir/nested_subdir.sass | 3 - .../test/sass/templates/subdir/subdir.sass | 6 - .../test/sass/templates/units.sass | 11 - .../sass-3.4.13/test/sass/templates/warn.sass | 3 - .../test/sass/templates/warn_imported.sass | 4 - .../gems/sass-3.4.13/test/sass/test_helper.rb | 8 - .../util/multibyte_string_scanner_test.rb | 147 - .../test/sass/util/normalized_map_test.rb | 51 - .../test/sass/util/subset_map_test.rb | 91 - .../gems/sass-3.4.13/test/sass/util_test.rb | 471 - .../test/sass/value_helpers_test.rb | 179 - .../gems/sass-3.4.13/test/test_helper.rb | 109 - .../sass-3.4.13/vendor/listen/CHANGELOG.md | 1 - .../sass-3.4.13/vendor/listen/CONTRIBUTING.md | 38 - .../gems/sass-3.4.13/vendor/listen/Gemfile | 20 - .../gems/sass-3.4.13/vendor/listen/Guardfile | 8 - .../gems/sass-3.4.13/vendor/listen/LICENSE | 20 - .../gems/sass-3.4.13/vendor/listen/README.md | 349 - .../gems/sass-3.4.13/vendor/listen/Rakefile | 5 - .../sass-3.4.13/vendor/listen/Vagrantfile | 96 - .../sass-3.4.13/vendor/listen/lib/listen.rb | 54 - .../vendor/listen/lib/listen/adapter.rb | 327 - .../vendor/listen/lib/listen/adapters/bsd.rb | 75 - .../listen/lib/listen/adapters/darwin.rb | 48 - .../listen/lib/listen/adapters/linux.rb | 81 - .../listen/lib/listen/adapters/polling.rb | 58 - .../listen/lib/listen/adapters/windows.rb | 91 - .../listen/lib/listen/directory_record.rb | 406 - .../vendor/listen/lib/listen/listener.rb | 323 - .../vendor/listen/lib/listen/turnstile.rb | 32 - .../vendor/listen/lib/listen/version.rb | 3 - .../sass-3.4.13/vendor/listen/listen.gemspec | 28 - .../vendor/listen/spec/listen/adapter_spec.rb | 149 - .../listen/spec/listen/adapters/bsd_spec.rb | 36 - .../spec/listen/adapters/darwin_spec.rb | 37 - .../listen/spec/listen/adapters/linux_spec.rb | 47 - .../spec/listen/adapters/polling_spec.rb | 68 - .../spec/listen/adapters/windows_spec.rb | 30 - .../spec/listen/directory_record_spec.rb | 1250 -- .../listen/spec/listen/listener_spec.rb | 258 - .../listen/spec/listen/turnstile_spec.rb | 56 - .../vendor/listen/spec/listen_spec.rb | 67 - .../vendor/listen/spec/spec_helper.rb | 25 - .../listen/spec/support/adapter_helper.rb | 666 - .../spec/support/directory_record_helper.rb | 57 - .../listen/spec/support/fixtures_helper.rb | 29 - .../listen/spec/support/listeners_helper.rb | 179 - .../listen/spec/support/platform_helper.rb | 15 - .../2.2.0/gems/timers-4.0.1/.coveralls.yml | 1 - .../ruby/2.2.0/gems/timers-4.0.1/.gitignore | 17 - .../ruby/2.2.0/gems/timers-4.0.1/.rspec | 5 - .../ruby/2.2.0/gems/timers-4.0.1/.travis.yml | 17 - .../ruby/2.2.0/gems/timers-4.0.1/AUTHORS.md | 15 - .../ruby/2.2.0/gems/timers-4.0.1/CHANGES.md | 45 - .../ruby/2.2.0/gems/timers-4.0.1/Gemfile | 10 - .../ruby/2.2.0/gems/timers-4.0.1/LICENSE | 23 - .../ruby/2.2.0/gems/timers-4.0.1/README.md | 96 - .../ruby/2.2.0/gems/timers-4.0.1/Rakefile | 7 - .../2.2.0/gems/timers-4.0.1/lib/timers.rb | 5 - .../gems/timers-4.0.1/lib/timers/events.rb | 115 - .../gems/timers-4.0.1/lib/timers/group.rb | 118 - .../gems/timers-4.0.1/lib/timers/timer.rb | 128 - .../gems/timers-4.0.1/lib/timers/version.rb | 3 - .../gems/timers-4.0.1/lib/timers/wait.rb | 48 - .../gems/timers-4.0.1/spec/cancel_spec.rb | 46 - .../gems/timers-4.0.1/spec/events_spec.rb | 57 - .../gems/timers-4.0.1/spec/every_spec.rb | 19 - .../gems/timers-4.0.1/spec/group_spec.rb | 254 - .../timers-4.0.1/spec/performance_spec.rb | 83 - .../gems/timers-4.0.1/spec/spec_helper.rb | 19 - .../gems/timers-4.0.1/spec/strict_spec.rb | 37 - .../gems/timers-4.0.1/spec/timeout_spec.rb | 29 - .../2.2.0/gems/timers-4.0.1/timers.gemspec | 23 - .../ruby/2.2.0/gems/toml-0.1.2/CHANGELOG.md | 11 - .../bundle/ruby/2.2.0/gems/toml-0.1.2/LICENSE | 21 - .../ruby/2.2.0/gems/toml-0.1.2/README.md | 65 - .../ruby/2.2.0/gems/toml-0.1.2/lib/toml.rb | 25 - .../gems/toml-0.1.2/lib/toml/generator.rb | 29 - .../2.2.0/gems/toml-0.1.2/lib/toml/key.rb | 10 - .../gems/toml-0.1.2/lib/toml/monkey_patch.rb | 87 - .../2.2.0/gems/toml-0.1.2/lib/toml/parser.rb | 99 - .../2.2.0/gems/toml-0.1.2/lib/toml/parslet.rb | 100 - .../2.2.0/gems/toml-0.1.2/lib/toml/table.rb | 10 - .../gems/toml-0.1.2/lib/toml/transformer.rb | 114 - .../2.2.0/gems/toml-0.1.2/lib/toml/version.rb | 3 - .../2.2.0/gems/yajl-ruby-1.2.3/.gitignore | 13 - .../ruby/2.2.0/gems/yajl-ruby-1.2.3/.rspec | 2 - .../2.2.0/gems/yajl-ruby-1.2.3/.travis.yml | 18 - .../2.2.0/gems/yajl-ruby-1.2.3/CHANGELOG.md | 332 - .../ruby/2.2.0/gems/yajl-ruby-1.2.3/Gemfile | 3 - .../2.2.0/gems/yajl-ruby-1.2.3/MIT-LICENSE | 20 - .../ruby/2.2.0/gems/yajl-ruby-1.2.3/README.md | 367 - .../ruby/2.2.0/gems/yajl-ruby-1.2.3/Rakefile | 2 - .../gems/yajl-ruby-1.2.3/benchmark/encode.rb | 72 - .../benchmark/encode_json_and_marshal.rb | 42 - .../benchmark/encode_json_and_yaml.rb | 53 - .../gems/yajl-ruby-1.2.3/benchmark/http.rb | 32 - .../gems/yajl-ruby-1.2.3/benchmark/parse.rb | 94 - .../benchmark/parse_json_and_marshal.rb | 50 - .../benchmark/parse_json_and_yaml.rb | 55 - .../yajl-ruby-1.2.3/benchmark/parse_stream.rb | 54 - .../benchmark/subjects/item.json | 1 - .../benchmark/subjects/ohai.json | 1216 -- .../benchmark/subjects/ohai.marshal_dump | Bin 18425 -> 0 bytes .../benchmark/subjects/ohai.yml | 975 - .../benchmark/subjects/twitter_search.json | 1 - .../benchmark/subjects/twitter_stream.json | 430 - .../benchmark/subjects/unicode.json | 1 - .../examples/encoding/chunked_encoding.rb | 27 - .../examples/encoding/one_shot.rb | 13 - .../examples/encoding/to_an_io.rb | 12 - .../examples/http/twitter_search_api.rb | 12 - .../examples/http/twitter_stream_api.rb | 26 - .../examples/parsing/from_file.rb | 14 - .../examples/parsing/from_stdin.rb | 9 - .../examples/parsing/from_string.rb | 13 - .../ext/yajl/.RUBYARCHDIR.-.yajl.time | 0 .../ext/yajl/api/yajl_common.h | 89 - .../yajl-ruby-1.2.3/ext/yajl/api/yajl_gen.h | 161 - .../yajl-ruby-1.2.3/ext/yajl/api/yajl_parse.h | 196 - .../ext/yajl/api/yajl_version.h | 23 - .../gems/yajl-ruby-1.2.3/ext/yajl/extconf.rb | 7 - .../gems/yajl-ruby-1.2.3/ext/yajl/yajl.c | 164 - .../yajl-ruby-1.2.3/ext/yajl/yajl_alloc.c | 65 - .../yajl-ruby-1.2.3/ext/yajl/yajl_alloc.h | 51 - .../gems/yajl-ruby-1.2.3/ext/yajl/yajl_buf.c | 119 - .../gems/yajl-ruby-1.2.3/ext/yajl/yajl_buf.h | 80 - .../yajl-ruby-1.2.3/ext/yajl/yajl_bytestack.h | 85 - .../yajl-ruby-1.2.3/ext/yajl/yajl_encode.c | 201 - .../yajl-ruby-1.2.3/ext/yajl/yajl_encode.h | 55 - .../gems/yajl-ruby-1.2.3/ext/yajl/yajl_ext.c | 941 - .../gems/yajl-ruby-1.2.3/ext/yajl/yajl_ext.h | 135 - .../gems/yajl-ruby-1.2.3/ext/yajl/yajl_gen.c | 344 - .../gems/yajl-ruby-1.2.3/ext/yajl/yajl_lex.c | 748 - .../gems/yajl-ruby-1.2.3/ext/yajl/yajl_lex.h | 146 - .../yajl-ruby-1.2.3/ext/yajl/yajl_parser.c | 450 - .../yajl-ruby-1.2.3/ext/yajl/yajl_parser.h | 84 - .../yajl-ruby-1.2.3/ext/yajl/yajl_version.c | 7 - .../2.2.0/gems/yajl-ruby-1.2.3/lib/yajl.rb | 76 - .../gems/yajl-ruby-1.2.3/lib/yajl/bzip2.rb | 11 - .../lib/yajl/bzip2/stream_reader.rb | 31 - .../lib/yajl/bzip2/stream_writer.rb | 14 - .../gems/yajl-ruby-1.2.3/lib/yajl/deflate.rb | 6 - .../lib/yajl/deflate/stream_reader.rb | 43 - .../lib/yajl/deflate/stream_writer.rb | 20 - .../gems/yajl-ruby-1.2.3/lib/yajl/gzip.rb | 6 - .../lib/yajl/gzip/stream_reader.rb | 30 - .../lib/yajl/gzip/stream_writer.rb | 13 - .../yajl-ruby-1.2.3/lib/yajl/http_stream.rb | 212 - .../gems/yajl-ruby-1.2.3/lib/yajl/json_gem.rb | 13 - .../lib/yajl/json_gem/encoding.rb | 50 - .../lib/yajl/json_gem/parsing.rb | 26 - .../gems/yajl-ruby-1.2.3/lib/yajl/version.rb | 3 - .../gems/yajl-ruby-1.2.3/script/bootstrap | 5 - .../spec/encoding/encoding_spec.rb | 315 - .../spec/global/global_spec.rb | 54 - .../spec/http/fixtures/http.bzip2.dump | Bin 4916 -> 0 bytes .../spec/http/fixtures/http.chunked.dump | 11 - .../spec/http/fixtures/http.deflate.dump | Bin 5517 -> 0 bytes .../spec/http/fixtures/http.error.dump | 12 - .../spec/http/fixtures/http.gzip.dump | Bin 5531 -> 0 bytes .../spec/http/fixtures/http.html.dump | 1220 -- .../spec/http/fixtures/http.raw.dump | 1226 -- .../spec/http/http_delete_spec.rb | 98 - .../spec/http/http_error_spec.rb | 32 - .../spec/http/http_get_spec.rb | 109 - .../spec/http/http_post_spec.rb | 123 - .../spec/http/http_put_spec.rb | 105 - .../spec/http/http_stream_options_spec.rb | 27 - .../compatibility_spec.rb | 207 - .../spec/parsing/active_support_spec.rb | 64 - .../spec/parsing/chunked_spec.rb | 96 - .../spec/parsing/fixtures/fail.15.json | 1 - .../spec/parsing/fixtures/fail.16.json | 1 - .../spec/parsing/fixtures/fail.17.json | 1 - .../spec/parsing/fixtures/fail.26.json | 1 - .../spec/parsing/fixtures/fail11.json | 1 - .../spec/parsing/fixtures/fail12.json | 1 - .../spec/parsing/fixtures/fail13.json | 1 - .../spec/parsing/fixtures/fail14.json | 1 - .../spec/parsing/fixtures/fail19.json | 1 - .../spec/parsing/fixtures/fail20.json | 1 - .../spec/parsing/fixtures/fail21.json | 1 - .../spec/parsing/fixtures/fail22.json | 1 - .../spec/parsing/fixtures/fail23.json | 1 - .../spec/parsing/fixtures/fail24.json | 1 - .../spec/parsing/fixtures/fail25.json | 1 - .../spec/parsing/fixtures/fail27.json | 2 - .../spec/parsing/fixtures/fail28.json | 2 - .../spec/parsing/fixtures/fail3.json | 1 - .../spec/parsing/fixtures/fail4.json | 1 - .../spec/parsing/fixtures/fail5.json | 1 - .../spec/parsing/fixtures/fail6.json | 1 - .../spec/parsing/fixtures/fail9.json | 1 - .../spec/parsing/fixtures/pass.array.json | 6 - .../pass.codepoints_from_unicode_org.json | 1 - .../spec/parsing/fixtures/pass.contacts.json | 1 - .../spec/parsing/fixtures/pass.db100.xml.json | 1 - .../parsing/fixtures/pass.db1000.xml.json | 1 - .../pass.dc_simple_with_comments.json | 11 - .../parsing/fixtures/pass.deep_arrays.json | 1 - .../pass.difficult_json_c_test_case.json | 1 - ...ficult_json_c_test_case_with_comments.json | 1 - .../spec/parsing/fixtures/pass.doubles.json | 1 - .../parsing/fixtures/pass.empty_array.json | 1 - .../parsing/fixtures/pass.empty_string.json | 1 - .../fixtures/pass.escaped_bulgarian.json | 4 - .../parsing/fixtures/pass.escaped_foobar.json | 1 - .../spec/parsing/fixtures/pass.item.json | 1 - .../fixtures/pass.json-org-sample1.json | 23 - .../fixtures/pass.json-org-sample2.json | 11 - .../fixtures/pass.json-org-sample3.json | 26 - .../fixtures/pass.json-org-sample4-nows.json | 88 - .../fixtures/pass.json-org-sample4.json | 89 - .../fixtures/pass.json-org-sample5.json | 27 - .../parsing/fixtures/pass.map-spain.xml.json | 1 - .../fixtures/pass.ns-invoice100.xml.json | 1 - .../parsing/fixtures/pass.ns-soap.xml.json | 1 - .../parsing/fixtures/pass.numbers-fp-4k.json | 6 - .../parsing/fixtures/pass.numbers-fp-64k.json | 61 - .../parsing/fixtures/pass.numbers-int-4k.json | 11 - .../fixtures/pass.numbers-int-64k.json | 154 - .../parsing/fixtures/pass.twitter-search.json | 1 - .../fixtures/pass.twitter-search2.json | 1 - .../spec/parsing/fixtures/pass.unicode.json | 3315 --- .../spec/parsing/fixtures/pass.yelp.json | 1 - .../spec/parsing/fixtures/pass1.json | 56 - .../spec/parsing/fixtures/pass2.json | 1 - .../spec/parsing/fixtures/pass3.json | 6 - .../spec/parsing/fixtures_spec.rb | 40 - .../spec/parsing/large_number_spec.rb | 60 - .../spec/parsing/one_off_spec.rb | 97 - .../2.2.0/gems/yajl-ruby-1.2.3/spec/rcov.opts | 3 - .../gems/yajl-ruby-1.2.3/spec/spec_helper.rb | 13 - .../gems/yajl-ruby-1.2.3/tasks/compile.rake | 35 - .../gems/yajl-ruby-1.2.3/tasks/rspec.rake | 16 - .../gems/yajl-ruby-1.2.3/yajl-ruby.gemspec | 26 - .../specifications/blankslate-2.1.2.4.gemspec | 33 - .../specifications/celluloid-0.16.0.gemspec | 48 - .../classifier-reborn-2.0.3.gemspec | 42 - .../coffee-script-2.4.1.gemspec | 41 - .../coffee-script-source-1.9.1.1.gemspec | 21 - .../specifications/colorator-0.1.gemspec | 38 - .../2.2.0/specifications/execjs-2.5.2.gemspec | 33 - .../specifications/fast-stemmer-1.0.2.gemspec | 23 - .../2.2.0/specifications/ffi-1.9.8.gemspec | 46 - .../guides_style_18f-0.0.1.gemspec | 44 - .../specifications/hitimes-1.2.2.gemspec | 49 - .../2.2.0/specifications/jekyll-2.5.3.gemspec | 127 - .../jekyll-coffeescript-1.0.1.gemspec | 43 - .../specifications/jekyll-gist-1.2.1.gemspec | 40 - .../jekyll-paginate-1.1.0.gemspec | 40 - .../jekyll-sass-converter-1.3.0.gemspec | 43 - .../specifications/jekyll-watch-1.2.1.gemspec | 43 - .../specifications/kramdown-1.7.0.gemspec | 53 - .../2.2.0/specifications/liquid-2.6.2.gemspec | 20 - .../specifications/listen-2.10.0.gemspec | 44 - .../specifications/mercenary-0.3.5.gemspec | 38 - .../specifications/parslet-1.5.0.gemspec | 57 - .../specifications/posix-spawn-0.3.11.gemspec | 40 - .../specifications/pygments.rb-0.6.3.gemspec | 38 - .../specifications/rb-fsevent-0.9.4.gemspec | 38 - .../specifications/rb-inotify-0.9.5.gemspec | 36 - .../specifications/redcarpet-3.2.3.gemspec | 44 - .../2.2.0/specifications/rouge-1.9.1.gemspec | 23 - .../specifications/safe_yaml-1.0.4.gemspec | 23 - .../2.2.0/specifications/sass-3.4.13.gemspec | 42 - .../2.2.0/specifications/timers-4.0.1.gemspec | 38 - .../2.2.0/specifications/toml-0.1.2.gemspec | 38 - .../specifications/yajl-ruby-1.2.3.gemspec | 44 - 3115 files changed, 484273 deletions(-) delete mode 100644 .bundle/config delete mode 100755 vendor/bundle/ruby/2.2.0/bin/bayes.rb delete mode 100755 vendor/bundle/ruby/2.2.0/bin/jekyll delete mode 100755 vendor/bundle/ruby/2.2.0/bin/kramdown delete mode 100755 vendor/bundle/ruby/2.2.0/bin/listen delete mode 100755 vendor/bundle/ruby/2.2.0/bin/posix-spawn-benchmark delete mode 100755 vendor/bundle/ruby/2.2.0/bin/redcarpet delete mode 100755 vendor/bundle/ruby/2.2.0/bin/rougify delete mode 100755 vendor/bundle/ruby/2.2.0/bin/safe_yaml delete mode 100755 vendor/bundle/ruby/2.2.0/bin/sass delete mode 100755 vendor/bundle/ruby/2.2.0/bin/sass-convert delete mode 100755 vendor/bundle/ruby/2.2.0/bin/scss delete mode 100755 vendor/bundle/ruby/2.2.0/bin/summarize.rb delete mode 100644 vendor/bundle/ruby/2.2.0/cache/blankslate-2.1.2.4.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/celluloid-0.16.0.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/classifier-reborn-2.0.3.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/coffee-script-2.4.1.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/coffee-script-source-1.9.1.1.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/colorator-0.1.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/execjs-2.5.2.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/fast-stemmer-1.0.2.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/ffi-1.9.8.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/guides_style_18f-0.0.1.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/hitimes-1.2.2.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/jekyll-2.5.3.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/jekyll-coffeescript-1.0.1.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/jekyll-gist-1.2.1.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/jekyll-paginate-1.1.0.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/jekyll-sass-converter-1.3.0.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/jekyll-watch-1.2.1.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/kramdown-1.7.0.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/liquid-2.6.2.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/listen-2.10.0.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/mercenary-0.3.5.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/parslet-1.5.0.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/posix-spawn-0.3.11.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/pygments.rb-0.6.3.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/rb-fsevent-0.9.4.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/rb-inotify-0.9.5.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/redcarpet-3.2.3.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/rouge-1.9.1.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/safe_yaml-1.0.4.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/sass-3.4.13.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/timers-4.0.1.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/toml-0.1.2.gem delete mode 100644 vendor/bundle/ruby/2.2.0/cache/yajl-ruby-1.2.3.gem delete mode 100644 vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/fast-stemmer-1.0.2/gem.build_complete delete mode 100644 vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/fast-stemmer-1.0.2/gem_make.out delete mode 100755 vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/fast-stemmer-1.0.2/stemmer.bundle delete mode 100755 vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/ffi-1.9.8/ffi_c.bundle delete mode 100644 vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/ffi-1.9.8/gem.build_complete delete mode 100644 vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/ffi-1.9.8/gem_make.out delete mode 100644 vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/ffi-1.9.8/mkmf.log delete mode 100644 vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/hitimes-1.2.2/gem.build_complete delete mode 100644 vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/hitimes-1.2.2/gem_make.out delete mode 100755 vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/hitimes-1.2.2/hitimes/2.2/hitimes.bundle delete mode 100644 vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/posix-spawn-0.3.11/gem.build_complete delete mode 100644 vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/posix-spawn-0.3.11/gem_make.out delete mode 100755 vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/posix-spawn-0.3.11/posix_spawn_ext.bundle delete mode 100644 vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/redcarpet-3.2.3/gem.build_complete delete mode 100644 vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/redcarpet-3.2.3/gem_make.out delete mode 100755 vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/redcarpet-3.2.3/redcarpet.bundle delete mode 100644 vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/yajl-ruby-1.2.3/gem.build_complete delete mode 100644 vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/yajl-ruby-1.2.3/gem_make.out delete mode 100755 vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/yajl-ruby-1.2.3/yajl/yajl.bundle delete mode 100644 vendor/bundle/ruby/2.2.0/gems/blankslate-2.1.2.4/README delete mode 100644 vendor/bundle/ruby/2.2.0/gems/blankslate-2.1.2.4/Rakefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/blankslate-2.1.2.4/VERSION delete mode 100644 vendor/bundle/ruby/2.2.0/gems/blankslate-2.1.2.4/blankslate.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/gems/blankslate-2.1.2.4/lib/blankslate.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/blankslate-2.1.2.4/spec/blankslate_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/LICENSE.txt delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/README.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/actor.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/actor_system.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/autostart.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/call_chain.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/calls.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/cell.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/condition.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/core_ext.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/cpu_counter.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/evented_mailbox.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/exceptions.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/fiber.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/fsm.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/future.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/handlers.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/internal_pool.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/legacy.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/links.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logger.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging/incident.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging/incident_logger.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging/incident_reporter.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging/log_event.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging/ring_buffer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/mailbox.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/method.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/notifications.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/pool_manager.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/probe.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/properties.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/abstract_proxy.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/actor_proxy.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/async_proxy.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/block_proxy.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/cell_proxy.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/future_proxy.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/sync_proxy.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/receivers.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/registry.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/responses.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/rspec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/rspec/actor_examples.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/rspec/example_actor_class.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/rspec/mailbox_examples.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/rspec/task_examples.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/signals.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/stack_dump.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/supervision_group.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/supervisor.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/system_events.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/task_set.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/tasks.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/tasks/task_fiber.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/tasks/task_thread.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/thread.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/thread_handle.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/uuid.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/actor_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/actor_system_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/block_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/calls_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/condition_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/cpu_counter_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/evented_mailbox_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/fsm_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/future_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/internal_pool_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/links_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/logging/ring_buffer_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/mailbox_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/notifications_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/pool_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/probe_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/properties_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/registry_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/stack_dump_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/supervision_group_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/supervisor_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/tasks/task_fiber_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/tasks/task_thread_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/thread_handle_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/timer_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/uuid_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/spec_helper.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/LICENSE delete mode 100644 vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/README.markdown delete mode 100755 vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/bin/bayes.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/bin/summarize.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/bayes.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/category_namer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/extensions/hasher.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/extensions/vector.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/extensions/vector_serialize.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/lsi.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/lsi/content_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/lsi/summarizer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/lsi/word_list.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/version.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/coffee-script-2.4.1/LICENSE delete mode 100644 vendor/bundle/ruby/2.2.0/gems/coffee-script-2.4.1/README.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/coffee-script-2.4.1/lib/coffee-script.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/coffee-script-2.4.1/lib/coffee_script.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/coffee-script-source-1.9.1.1/lib/coffee_script/coffee-script.js delete mode 100644 vendor/bundle/ruby/2.2.0/gems/coffee-script-source-1.9.1.1/lib/coffee_script/source.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/colorator-0.1/Gemfile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/colorator-0.1/LICENSE delete mode 100644 vendor/bundle/ruby/2.2.0/gems/colorator-0.1/README.markdown delete mode 100644 vendor/bundle/ruby/2.2.0/gems/colorator-0.1/Rakefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/colorator-0.1/colorator.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/gems/colorator-0.1/lib/colorator.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/colorator-0.1/lib/colorator/core_ext.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/colorator-0.1/spec/colorator/core_ext_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/colorator-0.1/spec/spec_helper.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/LICENSE delete mode 100644 vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/README.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/disabled_runtime.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/duktape_runtime.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/encoding.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/external_runtime.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/module.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/ruby_racer_runtime.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/ruby_rhino_runtime.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/runtime.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/runtimes.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/support/jsc_runner.js delete mode 100644 vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/support/jscript_runner.js delete mode 100644 vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/support/json2.js delete mode 100644 vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/support/node_runner.js delete mode 100644 vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/support/spidermonkey_runner.js delete mode 100644 vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/version.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/LICENSE delete mode 100644 vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/README delete mode 100644 vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/Rakefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/VERSION.yml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/.RUBYARCHDIR.time delete mode 100644 vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/Makefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/extconf.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/porter.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/porter.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/porter_wrap.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/porter_wrap.o delete mode 100755 vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/stemmer.bundle delete mode 100644 vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/lib/fast-stemmer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/lib/fast_stemmer.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/lib/stemmer.bundle delete mode 100755 vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/test/fast_stemmer_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/COPYING delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/LICENSE delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/README.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/Rakefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/.RUBYARCHDIR.time delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/AbstractMemory.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/AbstractMemory.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/AbstractMemory.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ArrayType.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ArrayType.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ArrayType.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Buffer.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Buffer.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Call.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Call.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Call.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ClosurePool.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ClosurePool.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ClosurePool.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/DataConverter.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/DataConverter.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/DynamicLibrary.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/DynamicLibrary.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/DynamicLibrary.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Function.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Function.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Function.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/FunctionInfo.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/FunctionInfo.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/LastError.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/LastError.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/LastError.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/LongDouble.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/LongDouble.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/LongDouble.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Makefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MappedType.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MappedType.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MappedType.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MemoryPointer.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MemoryPointer.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MemoryPointer.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MethodHandle.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MethodHandle.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MethodHandle.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Platform.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Platform.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Platform.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Pointer.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Pointer.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Pointer.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Struct.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Struct.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Struct.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/StructByReference.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/StructByReference.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/StructByReference.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/StructByValue.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/StructByValue.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/StructByValue.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/StructLayout.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/StructLayout.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Thread.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Thread.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Thread.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Type.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Type.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Type.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Types.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Types.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Types.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Variadic.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Variadic.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/compat.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/extconf.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/extconf.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ffi.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ffi.o delete mode 100755 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ffi_c.bundle delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi.bsd.mk delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi.darwin.mk delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi.gnu.mk delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi.mk delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi.vc.mk delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi.vc64.mk delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/ChangeLog delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/ChangeLog.libffi delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/ChangeLog.libgcj delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/ChangeLog.v1 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/LICENSE delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/Makefile.am delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/Makefile.in delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/Makefile.vc delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/Makefile.vc64 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/README delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/acinclude.m4 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/aclocal.m4 delete mode 100755 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/build-ios.sh delete mode 100755 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/compile delete mode 100755 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/config.guess delete mode 100755 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/config.sub delete mode 100755 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/configure delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/configure.ac delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/configure.host delete mode 100755 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/depcomp delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/doc/libffi.info delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/doc/libffi.texi delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/doc/stamp-vti delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/doc/version.texi delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/fficonfig.h.in delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/fficonfig.hw delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/include/Makefile.am delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/include/Makefile.in delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/include/ffi.h.in delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/include/ffi.h.vc delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/include/ffi.h.vc64 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/include/ffi_common.h delete mode 100755 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/install-sh delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/libffi.pc.in delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/libtool-version delete mode 100755 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/ltmain.sh delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_check_compiler_flags.m4 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_configure_args.m4 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_gcc_x86_cpuid.m4 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/libtool.m4 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ltoptions.m4 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ltsugar.m4 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ltversion.m4 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/lt~obsolete.m4 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/man/Makefile.am delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/man/Makefile.in delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/man/ffi.3 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/man/ffi_call.3 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/man/ffi_prep_cif.3 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/mdate-sh delete mode 100755 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/missing delete mode 100755 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/msvcc.sh delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/alpha/ffi.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/alpha/ffitarget.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/alpha/osf.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/arm/ffi.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/arm/ffitarget.h delete mode 100755 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/arm/gentramp.sh delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/arm/sysv.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/arm/trampoline.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/avr32/ffi.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/avr32/ffitarget.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/avr32/sysv.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/closures.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/cris/ffi.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/cris/ffitarget.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/cris/sysv.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/debug.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/dlmalloc.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/frv/eabi.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/frv/ffi.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/frv/ffitarget.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/ia64/ffi.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/ia64/ffitarget.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/ia64/ia64_flags.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/ia64/unix.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/java_raw_api.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/m32r/ffi.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/m32r/ffitarget.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/m32r/sysv.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/m68k/ffi.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/m68k/ffitarget.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/m68k/sysv.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/mips/ffi.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/mips/ffitarget.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/mips/n32.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/mips/o32.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/moxie/eabi.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/moxie/ffi.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/pa/ffi.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/pa/ffitarget.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/pa/hpux32.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/pa/linux.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/aix.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/aix_closure.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/asm.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/darwin.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/darwin_closure.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/ffi.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/ffitarget.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/linux64.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/linux64_closure.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/ppc_closure.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/sysv.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/prep_cif.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/raw_api.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/s390/ffi.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/s390/ffitarget.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/s390/sysv.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sh/ffi.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sh/ffitarget.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sh/sysv.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sh64/ffi.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sh64/ffitarget.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sh64/sysv.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sparc/ffi.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sparc/ffitarget.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sparc/v8.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sparc/v9.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/types.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/darwin.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/darwin64.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/ffi.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/ffi64.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/ffitarget.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/freebsd.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/sysv.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/unix64.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/win32.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/win64.S delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/Makefile.am delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/Makefile.in delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/config/default.exp delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/lib/libffi.exp delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/lib/wrapper.exp delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/call.exp delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn0.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn1.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn2.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn3.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn4.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn5.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn6.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_loc_fn0.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_stdcall.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_double.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_float.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_schar.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshort.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshortchar.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_uchar.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushort.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushortchar.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_schar.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_sint.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_sshort.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_abi.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/float.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/float1.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/float2.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/float3.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/float4.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/many.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/negint.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/problem1.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc-tc.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.special/special.exp delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest.cc delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/texinfo.tex delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/rbffi.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/rbffi_endian.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/win32/stdbool.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/win32/stdint.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ffi.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/gen/Rakefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/autopointer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/buffer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/callback.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/enum.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/errno.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/ffi.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/io.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/library.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/managedstruct.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/memorypointer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/aarch64-linux/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/arm-linux/types.conf delete mode 100755 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-cygwin/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-darwin/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-freebsd/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-gnu/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-linux/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-netbsd/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-openbsd/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-solaris/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-windows/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/ia64-linux/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/mips-linux/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/mips64el-linux/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/mipsel-linux/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/powerpc-aix/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/powerpc-darwin/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/powerpc-linux/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/powerpc64-linux/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/s390-linux/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/s390x-linux/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/sparc-linux/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/sparc-solaris/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/sparcv9-solaris/types.conf delete mode 100755 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-cygwin/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-darwin/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-freebsd/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-linux/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-netbsd/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-openbsd/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-solaris/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-windows/types.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/pointer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/struct.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/struct_layout_builder.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/tools/const_generator.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/tools/generator.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/tools/generator_task.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/tools/struct_generator.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/tools/types_generator.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/types.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/union.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/variadic.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/version.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi_c.bundle delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/Benchmark.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/BoolTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/BufferTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/ClosureTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/EnumTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/FunctionTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/GNUmakefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/GlobalVariable.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/LastErrorTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/NumberTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/PointerTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/ReferenceTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/StringTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/StructTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/UnionTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/VariadicTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/LICENSE.SPECS delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/async_callback_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/bool_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/buffer_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/callback_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/custom_param_type.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/custom_type_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/dup_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/enum_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/errno_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/ffi_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/Benchmark.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/BoolTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/BufferTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/ClosureTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/EnumTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/FunctionTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/GNUmakefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/GlobalVariable.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/LastErrorTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/NumberTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/PointerTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/ReferenceTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/StringTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/StructTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/UnionTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/VariadicTest.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/classes.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/function_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/io_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/library_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/long_double.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/managed_struct_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/memorypointer_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/number_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/platform_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/pointer_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/rbx/attach_function_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/rbx/memory_pointer_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/rbx/spec_helper.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/rbx/struct_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/spec_helper.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/string_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/strptr_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/struct_by_ref_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/struct_callback_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/struct_initialize_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/struct_packed_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/struct_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/typedef_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/union_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/variadic_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/spec.opts delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/CONTRIBUTING.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/LICENSE.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/README.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/favicons/18f-center-114.png delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/favicons/18f-center-144.png delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/favicons/18f-center-16.png delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/favicons/18f-center-192.png delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/favicons/18f-center-200.png delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/favicons/18f-center-32.png delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/favicons/18f-center-57.png delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/favicons/18f-center-72.png delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/favicons/favicon.ico delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/favicons/favicon.png delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/img/18f-logo.png delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/js/accordion.js delete mode 100755 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/js/html5shiv.js delete mode 100755 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/js/respond.js delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/assets.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/generator.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/includes.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/includes/analytics.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/includes/footer.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/includes/header.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/includes/scripts.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/includes/sidebar.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/layouts.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/layouts/default.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/sass.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/sass/_guides_style_18f_custom.scss delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/sass/_guides_style_18f_main.scss delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/sass/_guides_style_18f_syntax.scss delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/sass/guides_style_18f.scss delete mode 100644 vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/version.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/.travis.yml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/CONTRIBUTING.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/HISTORY.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/LICENSE delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/Manifest.txt delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/README.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/Rakefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/examples/benchmarks.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/examples/stats.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/.RUBYARCHDIR.-.hitimes.-.2.2.time delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/Makefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/extconf.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes.bundle delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_instant_clock_gettime.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_instant_clock_gettime.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_instant_osx.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_instant_osx.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_instant_windows.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_instant_windows.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_interval.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_interval.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_interval.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_stats.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_stats.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_stats.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/java/src/hitimes/Hitimes.java delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/java/src/hitimes/HitimesInterval.java delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/java/src/hitimes/HitimesService.java delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/java/src/hitimes/HitimesStats.java delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/2.2/hitimes.bundle delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/metric.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/mutexed_stats.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/paths.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/stats.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/timed_metric.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/timed_value_metric.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/value_metric.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/version.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/hitimes_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/interval_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/metric_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/mutex_stats_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/paths_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/spec_helper.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/stats_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/timed_metric_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/timed_value_metric_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/value_metric_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/version_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/tasks/default.rake delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/tasks/extension.rake delete mode 100644 vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/tasks/this.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/LICENSE delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/README.markdown delete mode 100755 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/bin/jekyll delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/cleaner.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/collection.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/command.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/commands/build.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/commands/docs.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/commands/doctor.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/commands/help.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/commands/new.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/commands/serve.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/configuration.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converter.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/identity.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/markdown.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/markdown/kramdown_parser.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/markdown/maruku_parser.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/markdown/rdiscount_parser.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/markdown/redcarpet_parser.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/textile.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/convertible.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/deprecator.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/document.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/draft.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/entry_filter.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/errors.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/excerpt.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/filters.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/frontmatter_defaults.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/generator.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/layout.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/layout_reader.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/liquid_extensions.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/log_adapter.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/mime.types delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/page.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/plugin.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/plugin_manager.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/post.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/publisher.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/related_posts.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/renderer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/site.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/static_file.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/stevenson.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/tags/highlight.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/tags/include.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/tags/post_url.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/url.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/utils.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/version.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-coffeescript-1.0.1/lib/jekyll-coffeescript.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-coffeescript-1.0.1/lib/jekyll-coffeescript/version.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-coffeescript-1.0.1/lib/jekyll/converters/coffeescript.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/.gitignore delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/.rspec delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/.travis.yml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/Gemfile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/History.markdown delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/LICENSE.txt delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/README.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/Rakefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/jekyll-gist.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/lib/jekyll-gist.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/lib/jekyll-gist/gist_tag.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/lib/jekyll-gist/version.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/script/bootstrap delete mode 100755 vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/script/cibuild delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/spec/gist_tag_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/spec/spec_helper.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/.gitignore delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/.rspec delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/.travis.yml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/Gemfile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/History.markdown delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/LICENSE.txt delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/README.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/Rakefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/jekyll-paginate.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/lib/jekyll-paginate.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/lib/jekyll-paginate/pager.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/lib/jekyll-paginate/pagination.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/lib/jekyll-paginate/version.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/script/bootstrap delete mode 100755 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/script/cibuild delete mode 100755 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/script/unbundle delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/spec/pager_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/spec/pagination_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/spec/source/_posts/2014-05-20-blah.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/spec/source/_posts/2014-05-21-bleh.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/spec/source/_posts/2014-05-22-humor.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/spec/source/_posts/2014-05-23-hey-there.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/spec/source/_posts/2014-05-24-whateva.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/spec/source/_posts/2014-05-25-oh-yes.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/spec/source/contacts/index.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/spec/source/index.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-paginate-1.1.0/spec/spec_helper.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-sass-converter-1.3.0/lib/jekyll-sass-converter.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-sass-converter-1.3.0/lib/jekyll-sass-converter/version.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-sass-converter-1.3.0/lib/jekyll/converters/sass.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-sass-converter-1.3.0/lib/jekyll/converters/scss.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-watch-1.2.1/lib/jekyll-watch.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-watch-1.2.1/lib/jekyll/commands/watch.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/jekyll-watch-1.2.1/lib/jekyll/watcher.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/AUTHORS delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/CONTRIBUTERS delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/COPYING delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/README.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/Rakefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/VERSION delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/benchmark/benchmark.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/benchmark/benchmark.sh delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/benchmark/generate_data.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/benchmark/mdbasics.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/benchmark/mdsyntax.text delete mode 100755 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/benchmark/testing.sh delete mode 100755 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/benchmark/timing.sh delete mode 100755 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/bin/kramdown delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/data/kramdown/document.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/data/kramdown/document.latex delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/_design.scss delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/bg.png delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/default.scss delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/default.template delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/documentation.page delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/documentation.template delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/index.page delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/installation.page delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/links.markdown delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/metainfo delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/news.feed delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/news.page delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/options.page delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/quickref.page delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/sidebar.template delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/sitemap.sitemap delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/syntax.page delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/tests.page delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/virtual delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/compatibility.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/converter.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/converter/base.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/converter/html.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/converter/kramdown.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/converter/latex.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/converter/math_engine/itex2mml.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/converter/math_engine/mathjax.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/converter/math_engine/mathjaxnode.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/converter/math_engine/ritex.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/converter/pdf.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/converter/remove_html_tags.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/converter/syntax_highlighter.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/converter/syntax_highlighter/coderay.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/converter/syntax_highlighter/minted.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/converter/syntax_highlighter/rouge.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/converter/toc.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/document.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/element.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/error.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/options.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/base.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/gfm.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/html.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/kramdown.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/kramdown/abbreviation.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/kramdown/autolink.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/kramdown/blank_line.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/kramdown/block_boundary.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/kramdown/blockquote.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/kramdown/codeblock.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/kramdown/codespan.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/kramdown/emphasis.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/kramdown/eob.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/kramdown/escaped_chars.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/kramdown/extensions.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/kramdown/footnote.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/kramdown/header.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/kramdown/horizontal_rule.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/kramdown/html.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/kramdown/html_entity.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/kramdown/line_break.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/kramdown/link.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/kramdown/list.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/kramdown/math.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/kramdown/paragraph.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/kramdown/smart_quotes.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/kramdown/table.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/kramdown/typographic_symbol.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/parser/markdown.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/utils.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/utils/configurable.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/utils/entities.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/utils/html.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/utils/ordered_hash.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/utils/string_scanner.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/utils/unidecoder.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/lib/kramdown/version.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/man/man1/kramdown.1 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/setup.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/run_tests.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/test_files.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/test_location.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/test_string_scanner_kramdown.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/01_blank_line/spaces.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/01_blank_line/spaces.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/01_blank_line/tabs.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/01_blank_line/tabs.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/02_eob/beginning.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/02_eob/beginning.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/02_eob/end.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/02_eob/end.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/02_eob/middle.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/02_eob/middle.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/03_paragraph/indented.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/03_paragraph/indented.html.gfm delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/03_paragraph/indented.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/03_paragraph/no_newline_at_end.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/03_paragraph/no_newline_at_end.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/03_paragraph/one_para.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/03_paragraph/one_para.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/03_paragraph/two_para.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/03_paragraph/two_para.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/04_header/atx_header.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/04_header/atx_header.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/04_header/atx_header_no_newline_at_end.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/04_header/atx_header_no_newline_at_end.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/04_header/header_type_offset.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/04_header/header_type_offset.kramdown delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/04_header/header_type_offset.latex delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/04_header/header_type_offset.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/04_header/header_type_offset.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/04_header/setext_header.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/04_header/setext_header.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/04_header/setext_header_no_newline_at_end.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/04_header/setext_header_no_newline_at_end.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/04_header/with_auto_id_prefix.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/04_header/with_auto_id_prefix.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/04_header/with_auto_id_prefix.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/04_header/with_auto_id_stripping.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/04_header/with_auto_id_stripping.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/04_header/with_auto_id_stripping.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/04_header/with_auto_ids.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/04_header/with_auto_ids.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/04_header/with_auto_ids.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/05_blockquote/indented.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/05_blockquote/indented.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/05_blockquote/lazy.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/05_blockquote/lazy.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/05_blockquote/nested.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/05_blockquote/nested.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/05_blockquote/no_newline_at_end.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/05_blockquote/no_newline_at_end.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/05_blockquote/very_long_line.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/05_blockquote/very_long_line.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/05_blockquote/with_code_blocks.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/05_blockquote/with_code_blocks.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/disable-highlighting.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/disable-highlighting.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/disable-highlighting.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/error.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/error.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/highlighting-minted-with-opts.latex delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/highlighting-minted-with-opts.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/highlighting-minted-with-opts.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/highlighting-minted.latex delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/highlighting-minted.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/highlighting-minted.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/highlighting-opts.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/highlighting-opts.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/highlighting-opts.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/highlighting-rouge.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/highlighting-rouge.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/highlighting-rouge.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/highlighting.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/highlighting.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/highlighting.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/issue_gh45.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/issue_gh45.test delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/lazy.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/lazy.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/no_newline_at_end.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/no_newline_at_end.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/no_newline_at_end_1.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/no_newline_at_end_1.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/normal.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/normal.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/tilde_syntax.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/tilde_syntax.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/whitespace.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/whitespace.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/with_blank_line.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/with_blank_line.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/with_eob_marker.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/with_eob_marker.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/with_ial.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/with_ial.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_name_with_dash.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_name_with_dash.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_name_with_dash.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/07_horizontal_rule/error.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/07_horizontal_rule/error.html.19 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/07_horizontal_rule/error.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/07_horizontal_rule/normal.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/07_horizontal_rule/normal.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/07_horizontal_rule/sepspaces.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/07_horizontal_rule/sepspaces.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/07_horizontal_rule/septabs.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/07_horizontal_rule/septabs.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/08_list/escaping.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/08_list/escaping.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/08_list/item_ial.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/08_list/item_ial.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/08_list/lazy.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/08_list/lazy.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/08_list/list_and_hr.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/08_list/list_and_hr.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/08_list/list_and_others.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/08_list/list_and_others.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/08_list/mixed.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/08_list/mixed.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/08_list/nested.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/08_list/nested.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/08_list/other_first_element.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/08_list/other_first_element.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/08_list/simple_ol.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/08_list/simple_ol.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/08_list/simple_ul.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/08_list/simple_ul.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/08_list/single_item.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/08_list/single_item.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/08_list/special_cases.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/08_list/special_cases.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/comment.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/comment.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/content_model/deflists.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/content_model/deflists.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/content_model/deflists.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/content_model/tables.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/content_model/tables.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/content_model/tables.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html5_attributes.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html5_attributes.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_after_block.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_after_block.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_and_codeblocks.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_and_codeblocks.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_and_codeblocks.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_and_headers.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_and_headers.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/code.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/code.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/comment.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/comment.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/emphasis.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/emphasis.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/entity.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/entity.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/header.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/header.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/header.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/list_dl.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/list_dl.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/list_ol.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/list_ol.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/list_ul.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/list_ul.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/paragraph.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/paragraph.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/table_normal.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/table_normal.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/table_simple.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/table_simple.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/typography.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/typography.html.19 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/html_to_native/typography.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/invalid_html_1.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/invalid_html_1.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/invalid_html_2.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/invalid_html_2.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/markdown_attr.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/markdown_attr.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/not_parsed.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/not_parsed.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_raw.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_raw.htmlinput delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_raw.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_raw.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_span.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_span.htmlinput delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_span.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_span.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_block_html.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_block_html.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_block_html.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/processing_instruction.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/processing_instruction.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/simple.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/simple.html.19 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/simple.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/simple.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/textarea.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/textarea.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/10_ald/simple.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/10_ald/simple.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/auto_id_and_ial.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/auto_id_and_ial.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/auto_id_and_ial.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/nested.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/nested.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/simple.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/simple.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/comment.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/comment.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/ignored.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/ignored.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/nomarkdown.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/nomarkdown.kramdown delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/nomarkdown.latex delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/nomarkdown.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/options.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/options.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/options2.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/options2.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/options3.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/options3.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/definition_at_beginning.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/definition_at_beginning.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/deflist_ial.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/deflist_ial.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/item_ial.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/item_ial.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/multiple_terms.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/multiple_terms.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/no_def_list.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/no_def_list.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/para_wrapping.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/para_wrapping.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/separated_by_eob.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/separated_by_eob.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/simple.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/simple.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/styled_terms.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/styled_terms.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/too_much_space.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/too_much_space.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/with_blocks.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/with_blocks.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/errors.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/errors.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/escaping.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/escaping.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/footer.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/footer.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/header.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/header.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/no_table.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/no_table.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/simple.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/simple.html.19 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/simple.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/table_with_footnote.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/table_with_footnote.latex delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/table_with_footnote.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/gh_128.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/gh_128.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/itex2mml.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/itex2mml.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/itex2mml.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjax_preview.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjax_preview.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjax_preview.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjax_preview_simple.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjax_preview_simple.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjax_preview_simple.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode.html.19 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode_notexhints.html.19 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode_notexhints.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode_notexhints.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode_semantics.html.19 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode_semantics.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode_semantics.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/normal.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/normal.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/ritex.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/ritex.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/ritex.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/no_toc.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/no_toc.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_exclude.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_exclude.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_exclude.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_levels.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_levels.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_levels.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_with_footnotes.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_with_footnotes.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_with_footnotes.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/encoding.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/encoding.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/empty.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/empty.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/empty_title.htmlinput delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/empty_title.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/image_in_a.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/image_in_a.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/imagelinks.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/imagelinks.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/inline.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/inline.html.19 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/inline.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/link_defs.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/link_defs.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/link_defs_with_ial.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/link_defs_with_ial.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/links_with_angle_brackets.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/links_with_angle_brackets.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/reference.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/reference.html.19 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/reference.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/reference.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/empty.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/empty.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/errors.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/errors.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/nesting.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/nesting.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/normal.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/normal.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/empty.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/empty.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/errors.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/errors.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting-minted.latex delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting-minted.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting-minted.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting-rouge.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting-rouge.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting-rouge.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/normal.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/normal.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/definitions.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/definitions.latex delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/definitions.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/footnote_nr.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/footnote_nr.latex delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/footnote_nr.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/footnote_nr.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/inside_footnote.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/inside_footnote.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/markers.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/markers.latex delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/markers.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/placement.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/placement.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/across_lines.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/across_lines.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/button.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/button.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/invalid.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/invalid.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/link_with_mailto.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/link_with_mailto.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/markdown_attr.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/markdown_attr.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/normal.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/normal.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/raw_span_elements.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/raw_span_elements.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/abbreviations/abbrev.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/abbreviations/abbrev.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/abbreviations/abbrev_defs.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/abbreviations/abbrev_defs.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/autolinks/url_links.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/autolinks/url_links.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/escaped_chars/normal.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/escaped_chars/normal.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/comment.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/comment.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/ignored.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/ignored.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/nomarkdown.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/nomarkdown.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/options.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/options.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/ial/simple.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/ial/simple.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/line_breaks/normal.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/line_breaks/normal.latex delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/line_breaks/normal.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/itex2mml.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/itex2mml.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/itex2mml.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/mathjaxnode.html.19 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/mathjaxnode.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/mathjaxnode.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/normal.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/normal.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/ritex.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/ritex.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/ritex.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_char.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_char.html.19 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_char.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_char.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_input.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_input.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_input.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_numeric.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_numeric.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_numeric.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_symbolic.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_symbolic.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_symbolic.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/greaterthan.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/greaterthan.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/lowerthan.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/lowerthan.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/typography.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/typography.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/typography.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/atx_header.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/atx_header.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/backticks_disable_highlighting.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/backticks_disable_highlighting.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/backticks_disable_highlighting.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/backticks_syntax.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/backticks_syntax.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/hard_line_breaks.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/hard_line_breaks.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/hard_line_breaks_off.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/hard_line_breaks_off.options delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/hard_line_breaks_off.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/two_para_hard_line_breaks.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/two_para_hard_line_breaks.text delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/History.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/MIT-LICENSE delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/README.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/extras/liquid_view.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/block.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/condition.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/context.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/document.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/drop.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/errors.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/extensions.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/file_system.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/htmltags.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/interrupts.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/module_ex.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/standardfilters.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/strainer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tag.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/assign.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/break.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/capture.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/case.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/comment.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/continue.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/cycle.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/decrement.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/for.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/if.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/ifchanged.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/include.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/increment.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/raw.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/unless.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/template.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/utils.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/variable.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/version.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/assign_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/block_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/capture_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/condition_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/context_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/drop_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/error_handling_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/file_system_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/filter_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/hash_ordering_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/module_ex_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/output_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/parsing_quirks_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/regexp_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/security_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/standard_filter_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/strainer_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/break_tag_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/continue_tag_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/for_tag_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/html_tag_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/if_else_tag_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/include_tag_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/increment_tag_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/raw_tag_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/standard_tag_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/statements_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/unless_else_tag_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/template_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/variable_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/test_helper.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/CHANGELOG.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/CONTRIBUTING.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/LICENSE.txt delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/README.md delete mode 100755 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/bin/listen delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/base.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/bsd.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/darwin.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/linux.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/polling.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/tcp.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/windows.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/change.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/cli.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/directory.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/file.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/internals/logging.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/internals/thread_pool.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/listener.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/options.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/queue_optimizer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/record.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/record/entry.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/record/symlink_detector.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/silencer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/tcp.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/tcp/broadcaster.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/tcp/message.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/version.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/.gitignore delete mode 100644 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/.rspec delete mode 100644 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/.travis.yml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/Gemfile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/History.markdown delete mode 100644 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/LICENSE.txt delete mode 100644 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/README.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/Rakefile delete mode 100755 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/examples/help_dialogue.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/examples/logging.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/examples/trace.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/lib/mercenary.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/lib/mercenary/command.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/lib/mercenary/option.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/lib/mercenary/presenter.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/lib/mercenary/program.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/lib/mercenary/version.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/mercenary.gemspec delete mode 100755 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/script/bootstrap delete mode 100755 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/script/cibuild delete mode 100755 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/script/console delete mode 100755 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/script/examples delete mode 100644 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/spec/command_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/spec/option_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/spec/presenter_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/spec/program_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/spec/spec_helper.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/HISTORY.txt delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/LICENSE delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/README delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/Rakefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/boolean_algebra.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/calc.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/capture.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/comments.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/deepest_errors.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/documentation.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/email_parser.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/empty.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/erb.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/ignore.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/ip_address.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/json.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/local.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/mathn.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/minilisp.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/modularity.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/nested_errors.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/boolean_algebra.out delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/calc.out delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/capture.out delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/comments.out delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/deepest_errors.out delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/documentation.err delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/documentation.out delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/email_parser.out delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/empty.err delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/erb.out delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/ignore.out delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/ignore_whitespace.out delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/ip_address.out delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/json.out delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/local.out delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/mathn.out delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/minilisp.out delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/modularity.out delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/nested_errors.out delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/parens.out delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/readme.out delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/scopes.out delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/seasons.out delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/sentence.out delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/simple_xml.out delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/string_parser.out delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/parens.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/readme.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/scopes.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/seasons.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/sentence.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/simple.lit delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/simple_xml.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/string_parser.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/test.lit delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/alternative.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/base.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/can_flatten.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/capture.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/context.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/dsl.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/dynamic.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/entity.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/lookahead.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/named.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/re.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/repetition.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/scope.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/sequence.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/str.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/visitor.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/cause.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/convenience.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/error_reporter.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/error_reporter/deepest.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/error_reporter/tree.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/export.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/expression.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/expression/treetop.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/parser.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/pattern.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/pattern/binding.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/rig/rspec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/scope.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/slice.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/source.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/source/line_cache.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/transform.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/transform/context.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/.gitignore delete mode 100644 vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/COPYING delete mode 100644 vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/Gemfile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/HACKING delete mode 100644 vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/README.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/Rakefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/TODO delete mode 100755 vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/bin/posix-spawn-benchmark delete mode 100644 vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/ext/.RUBYARCHDIR.time delete mode 100644 vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/ext/extconf.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/ext/posix-spawn.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/ext/posix-spawn.o delete mode 100755 vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/ext/posix_spawn_ext.bundle delete mode 100644 vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/lib/posix-spawn.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/lib/posix/spawn.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/lib/posix/spawn/child.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/lib/posix/spawn/version.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/posix-spawn.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/test/test_backtick.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/test/test_child.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/test/test_helper.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/test/test_popen.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/test/test_spawn.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/test/test_system.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/.gitignore delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/CHANGELOG.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/Gemfile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/LICENSE delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/README.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/Rakefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/bench.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/cache-lexers.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/lexers delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/lib/pygments.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/lib/pygments/lexer.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/lib/pygments/mentos.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/lib/pygments/popen.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/lib/pygments/version.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/pygments.rb.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/test/test_data.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/test/test_data.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/test/test_data_generated delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/test/test_pygments.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/custom_lexers/github.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/AUTHORS delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/CHANGES delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/LICENSE delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/MANIFEST.in delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/Makefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/REVISION delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/TODO delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/Makefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_static/favicon.ico delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_static/logo_new.png delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_static/logo_only.png delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_templates/docssidebar.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_templates/indexsidebar.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_themes/pygments14/layout.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_themes/pygments14/static/bodybg.png delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_themes/pygments14/static/docbg.png delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_themes/pygments14/static/listitem.png delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_themes/pygments14/static/logo.png delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_themes/pygments14/static/pocoo.png delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_themes/pygments14/static/pygments14.css_t delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_themes/pygments14/theme.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/conf.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/api.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/authors.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/changelog.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/cmdline.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/filterdevelopment.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/filters.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/formatterdevelopment.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/formatters.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/index.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/integrate.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/java.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/lexerdevelopment.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/lexers.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/moinmoin.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/plugins.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/quickstart.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/rstdirective.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/styles.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/tokens.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/unicode.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/download.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/faq.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/index.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/languages.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/make.bat delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/pygmentize.1 delete mode 100755 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/external/autopygmentize delete mode 100755 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/external/lasso-builtins-generator-9.lasso delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/external/markdown-processor.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/external/moin-parser.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/external/pygments.bashcomp delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/external/rst-directive.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/ez_setup.py delete mode 100755 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygmentize delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/__init__.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/cmdline.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/console.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/filter.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/filters/__init__.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/formatter.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/formatters/__init__.py delete mode 100755 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/formatters/_mapping.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/formatters/bbcode.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/formatters/html.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/formatters/img.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/formatters/latex.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/formatters/other.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/formatters/rtf.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/formatters/svg.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/formatters/terminal.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/formatters/terminal256.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexer.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/__init__.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/_asybuiltins.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/_clbuiltins.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/_cocoabuiltins.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/_lassobuiltins.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/_luabuiltins.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/_mapping.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/_openedgebuiltins.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/_phpbuiltins.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/_postgres_builtins.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/_robotframeworklexer.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/_scilab_builtins.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/_sourcemodbuiltins.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/_stan_builtins.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/_vimbuiltins.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/agile.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/asm.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/compiled.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/dalvik.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/dotnet.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/foxpro.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/functional.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/github.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/graph.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/hdl.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/inferno.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/jvm.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/math.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/other.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/parsers.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/qbasic.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/rdf.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/shell.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/special.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/sql.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/templates.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/text.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/lexers/web.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/modeline.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/plugin.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/scanner.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/sphinxext.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/style.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/styles/__init__.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/styles/autumn.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/styles/borland.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/styles/bw.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/styles/colorful.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/styles/default.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/styles/emacs.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/styles/friendly.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/styles/fruity.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/styles/igor.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/styles/manni.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/styles/monokai.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/styles/murphy.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/styles/native.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/styles/paraiso_dark.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/styles/paraiso_light.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/styles/pastie.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/styles/perldoc.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/styles/rrt.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/styles/tango.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/styles/trac.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/styles/vim.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/styles/vs.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/styles/xcode.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/token.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/unistring.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/pygments/util.py delete mode 100755 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/scripts/check_sources.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/scripts/detect_missing_analyse_text.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/scripts/epydoc.css delete mode 100755 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/scripts/find_codetags.py delete mode 100755 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/scripts/find_error.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/scripts/get_vimkw.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/scripts/pylintrc delete mode 100755 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/scripts/vim2pygments.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/setup.cfg delete mode 100755 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/setup.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTML4-f.dtd delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTML4-s.dtd delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTML4.dcl delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTML4.dtd delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTML4.soc delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTMLlat1.ent delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTMLspec.ent delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTMLsym.ent delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/99_bottles_of_beer.chpl delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/AcidStateAdvanced.hs delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/AlternatingGroup.mu delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/BOM.js delete mode 100755 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/CPDictionary.j delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Config.in.cache delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Constants.mo delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/DancingSudoku.lhs delete mode 100755 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Deflate.fs delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Error.pmod delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Errors.scala delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/FakeFile.pike delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Get-CommandDefinitionHtml.ps1 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/IPDispatchC.nc delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/IPDispatchP.nc delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Intro.java delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Makefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Object.st delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/OrderedMap.hx delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/RoleQ.pm6 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/SmallCheck.hs delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Sorting.mod delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Sudoku.lhs delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/addressbook.proto delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/antlr_ANTLRv3.g delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/antlr_throws delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/apache2.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/as3_test.as delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/as3_test2.as delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/as3_test3.as delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/aspx-cs_example delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/autoit_submit.au3 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/badcase.java delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/batchfile.bat delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/bigtest.nsi delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/boot-9.scm delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ca65_example delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/cbmbas_example delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/cells.ps delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ceval.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/cheetah_example.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/classes.dylan delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/clojure-weird-keywords.clj delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/condensed_ruby.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/coq_RelationClasses delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/core.cljs delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/database.pytb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/de.MoinMoin.po delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/demo.ahk delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/demo.cfm delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/demo.hbs delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/django_sample.html+django delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/dwarf.cw delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ember.handlebars delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/erl_session delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/escape_semicolon.clj delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/evil_regex.js delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.Rd delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.als delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.bug delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.ceylon delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.chai delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.clay delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.cls delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.cob delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.coffee delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.cpp delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.e delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.f90 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.feature delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.gd delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.gi delete mode 100755 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.groovy delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.gs delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.gst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.hs delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.hx delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.i6t delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.i7x delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.inf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.j delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.jag delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.java delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.kal delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.kt delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.lagda delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.liquid delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.lua delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.ma delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.monkey delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.moo delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.moon delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.mq4 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.mqh delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.msc delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.ni delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.nim delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.nix delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.ns2 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.pas delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.pp delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.prg delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.red delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.reds delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.reg delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.rexx delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.rhtml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.rkt delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.rpf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.sh delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.sh-session delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.shell-session delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.slim delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.sls delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.sml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.snobol delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.stan delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.tea delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.todotxt delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.ts delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.u delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.weechatlog delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.xhtml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.xtend delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.yaml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example2.aspx delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example2.msc delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/exampleScript.cfc delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/exampleTag.cfc delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example_elixir.ex delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example_file.fy delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/firefox.mak delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/flipflop.sv delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/foo.sce delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/format.ml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/fucked_up.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/function.mu delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/functional.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/garcia-wachs.kk delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/genclass.clj delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/genshi_example.xml+genshi delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/genshitext_example.genshitext delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/glsl.frag delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/glsl.vert delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/grammar-test.p6 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/hash_syntax.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/hello.at delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/hello.golo delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/hello.lsl delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/hello.smali delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/hello.sp delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/html+php_faulty.php delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/http_request_example delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/http_response_example delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/hybris_File.hy delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/idl_sample.pro delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/iex_example delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/inet_pton6.dg delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/intro.ik delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ints.php delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/intsyn.fun delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/intsyn.sig delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/irb_heredoc delete mode 100755 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/irc.lsp delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/java.properties delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/jbst_example1.jbst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/jbst_example2.jbst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/jinjadesignerdoc.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/json.lasso delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/json.lasso9 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/language.hy delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/lighttpd_config.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/limbo.b delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/linecontinuation.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/livescript-demo.ls delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/logos_example.xm delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ltmain.sh delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/main.cmake delete mode 100755 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/markdown.lsp delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/matlab_noreturn delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/matlab_sample delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/matlabsession_sample.txt delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/metagrammar.treetop delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/minehunt.qml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/minimal.ns2 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/moin_SyntaxReference.txt delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/multiline_regexes.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/nanomsg.intr delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/nasm_aoutso.asm delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/nasm_objexe.asm delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/nemerle_sample.n delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/nginx_nginx.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/numbers.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/objc_example.m delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/openedge_example delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/pawn_example delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/perl_misc delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/perl_perl5db delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/perl_regex-delims delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/perlfunc.1 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/phpMyAdmin.spec delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/phpcomplete.vim delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/pleac.in.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/postgresql_test.txt delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/pppoe.applescript delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/psql_session.txt delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/py3_test.txt delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/py3tb_test.py3tb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/pycon_test.pycon delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/pytb_test2.pytb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/pytb_test3.pytb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/python25-bsd.mak delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/qbasic_example delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/qsort.prolog delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/r-console-transcript.Rout delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/r6rs-comments.scm delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ragel-cpp_rlscan delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ragel-cpp_snippet delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/regex.js delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/reversi.lsp delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/robotframework_test.txt delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/rql-queries.rql delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ruby_func_def.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/rust_example.rs delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/scilab.sci delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/scope.cirru delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/session.dylan-console delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/sibling.prolog delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/simple.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/smarty_example.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/source.lgt delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/sources.list delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/sparql.rq delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/sphere.pov delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/sqlite3.sqlite3-console delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/squid.conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/string.jl delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/string_delimiters.d delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/stripheredoc.sh delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/swig_java.swg delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/swig_std_vector.i delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.R delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.adb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.agda delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.apl delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.asy delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.awk delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.bb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.bmx delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.boo delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.bro delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.cs delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.cu delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.cyp delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.d delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.dart delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.dtd delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.ebnf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.ec delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.ecl delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.eh delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.erl delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.evoque delete mode 100755 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.fan delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.flx delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.gdc delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.groovy delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.idr delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.ini delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.java delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.jsp delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.maql delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.mask delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.mod delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.moo delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.myt delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.nim delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.opa delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.p6 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.pan delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.pas delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.php delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.pig delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.plot delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.ps1 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.pwn delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.pypylog delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.r3 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.rhtml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.rsl delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.scaml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.ssp delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.swift delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.tcsh delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.vb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.vhdl delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.xqy delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.xsl delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.zep delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test2.pypylog delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/truncated.pytb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/type.lisp delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/underscore.coffee delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/unicode.applescript delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/unicode.go delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/unicodedoc.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/unix-io.lid delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/vbnet_test.bas delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/vctreestatus_hg delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/vimrc delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/webkit-transition.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/while.pov delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/wiki.factor delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/xml_example delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/zmlrpc.f90 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/run.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/string_asserts.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/support.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/support/tags delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_basic_api.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_cfm.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_clexer.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_cmdline.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_examplefiles.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_html_formatter.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_latex_formatter.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_lexers_other.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_objectiveclexer.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_perllexer.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_qbasiclexer.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_regexlexer.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_rtf_formatter.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_string_asserts.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_token.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_using_api.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_util.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/.gitignore delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/.travis.yml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/CHANGES.txt delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/LICENSE.txt delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/MANIFEST.in delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/README.rst delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/conf.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/index.rst delete mode 100755 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/scripts/make_docs.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/setup.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/__init__.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/_speedups.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/decoder.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/encoder.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/ordered_dict.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/scanner.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/__init__.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_bigint_as_string.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_check_circular.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_decimal.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_decode.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_default.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_dump.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_encode_for_html.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_errors.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_fail.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_float.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_indent.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_item_sort_key.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_namedtuple.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_pass1.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_pass2.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_pass3.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_recursion.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_scanstring.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_separators.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_speedups.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_tuple.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_unicode.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tool.py delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/.gitignore delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/Gemfile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/Guardfile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/LICENSE.txt delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/README.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/Rakefile delete mode 100755 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/bin/fsevent_watch delete mode 100755 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/bin/fsevent_watch_10_5 delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/LICENSE delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/TSICTString.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/TSICTString.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/cli.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/cli.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/common.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/compat.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/compat.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/defines.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/main.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/rakefile.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/lib/rb-fsevent.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/lib/rb-fsevent/fsevent.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/lib/rb-fsevent/version.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/rb-fsevent.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/spec/fixtures/custom 'path/.gitignore delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/spec/fixtures/folder1/file1.txt delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/spec/fixtures/folder1/folder2/file2.txt delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/spec/rb-fsevent/fsevent_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/spec/spec_helper.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/.yardopts delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/MIT-LICENSE delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/README.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/Rakefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/VERSION delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/lib/rb-inotify.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/lib/rb-inotify/event.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/lib/rb-inotify/native.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/lib/rb-inotify/native/flags.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/lib/rb-inotify/notifier.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/lib/rb-inotify/watcher.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/rb-inotify.gemspec delete mode 100755 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/COPYING delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/Gemfile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/README.markdown delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/Rakefile delete mode 100755 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/bin/redcarpet delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/.RUBYARCHDIR.time delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/Makefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/autolink.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/autolink.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/autolink.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/buffer.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/buffer.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/buffer.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/extconf.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/houdini.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/houdini_href_e.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/houdini_href_e.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/houdini_html_e.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/houdini_html_e.o delete mode 100755 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/html.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/html.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/html.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/html_blocks.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/html_smartypants.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/html_smartypants.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/markdown.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/markdown.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/markdown.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/rc_markdown.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/rc_markdown.o delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/rc_render.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/rc_render.o delete mode 100755 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/redcarpet.bundle delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/redcarpet.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/stack.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/stack.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/ext/redcarpet/stack.o delete mode 100755 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/lib/redcarpet.bundle delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/lib/redcarpet.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/lib/redcarpet/compat.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/lib/redcarpet/render_man.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/lib/redcarpet/render_strip.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/redcarpet.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/test/benchmark.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/test/custom_render_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/test/html5_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/test/html_render_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/test/html_toc_render_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/test/markdown_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/test/pathological_inputs_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/test/redcarpet_compat_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/test/safe_render_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/test/smarty_html_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/test/smarty_pants_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/test/stripdown_render_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/test/test_helper.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/Gemfile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/LICENSE delete mode 100755 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/bin/rougify delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/cli.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/apache delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/applescript delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/clojure delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/coffeescript delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/common_lisp delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/conf delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/cpp delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/csharp delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/dart delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/diff delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/elixir delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/erb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/erlang delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/factor delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/gherkin delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/glsl delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/go delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/groovy delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/haml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/handlebars delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/haskell delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/html delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/http delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/ini delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/io delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/java delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/javascript delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/json-doc delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/liquid delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/literate_coffeescript delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/literate_haskell delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/llvm delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/lua delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/make delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/markdown delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/matlab delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/moonscript delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/nginx delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/nim delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/objective_c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/ocaml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/perl delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/php delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/plaintext delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/powershell delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/prolog delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/properties delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/puppet delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/python delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/qml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/r delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/racket delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/ruby delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/rust delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/scala delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/scheme delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/scss delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/sed delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/shell delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/slim delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/smalltalk delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/sml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/sql delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/swift delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/tcl delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/tex delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/toml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/tulip delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/vb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/viml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/xml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/yaml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/formatter.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/formatters/html.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/formatters/html_inline.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/formatters/html_linewise.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/formatters/null.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/formatters/terminal256.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/apache.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/apache/keywords.yml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/apple_script.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/c.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/clojure.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/coffeescript.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/common_lisp.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/conf.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/cpp.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/csharp.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/css.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/dart.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/diff.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/elixir.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/erb.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/erlang.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/factor.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/gherkin.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/gherkin/keywords.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/glsl.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/go.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/groovy.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/haml.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/handlebars.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/haskell.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/html.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/http.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/ini.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/io.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/java.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/javascript.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/liquid.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/literate_coffeescript.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/literate_haskell.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/llvm.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/lua.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/lua/builtins.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/make.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/markdown.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/matlab.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/matlab/builtins.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/moonscript.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/nginx.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/nim.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/objective_c.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/ocaml.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/perl.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/php.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/php/builtins.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/plain_text.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/powershell.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/prolog.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/properties.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/puppet.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/python.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/qml.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/r.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/racket.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/ruby.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/rust.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/sass.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/sass/common.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/scala.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/scheme.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/scss.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/sed.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/shell.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/slim.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/smalltalk.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/sml.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/sql.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/swift.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/tcl.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/tex.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/toml.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/tulip.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/vb.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/viml.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/viml/keywords.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/xml.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/yaml.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/plugins/redcarpet.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/regex_lexer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/template_lexer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/text_analyzer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/theme.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/base16.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/colorful.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/github.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/molokai.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/monokai.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/monokai_sublime.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/thankful_eyes.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/token.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/util.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/version.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/rouge.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/.gitignore delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/.travis.yml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/CHANGES.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/Gemfile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/LICENSE.txt delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/README.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/Rakefile delete mode 100755 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/bin/safe_yaml delete mode 100755 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/bundle_install_all_ruby_versions.sh delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/deep.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/libyaml_checker.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/load.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/parse/date.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/parse/hexadecimal.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/parse/sexagesimal.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/psych_handler.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/psych_resolver.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/resolver.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/safe_to_ruby_visitor.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/syck_hack.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/syck_node_monkeypatch.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/syck_resolver.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/to_boolean.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/to_date.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/to_float.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/to_integer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/to_nil.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/to_symbol.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/transformation_map.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/version.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/run_specs_all_ruby_versions.sh delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/safe_yaml.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/exploit.1.9.2.yaml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/exploit.1.9.3.yaml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/issue48.txt delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/issue49.yml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/libyaml_checker_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/psych_resolver_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/resolver_specs.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/safe_yaml_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/spec_helper.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/support/exploitable_back_door.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/syck_resolver_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/transform/base64_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/transform/to_date_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/transform/to_float_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/transform/to_integer_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/transform/to_symbol_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/yaml_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/.yardopts delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/CONTRIBUTING.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/MIT-LICENSE delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/README.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/REVISION delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/Rakefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/VERSION delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/VERSION_DATE delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/VERSION_NAME delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/bin/sass delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/bin/sass-convert delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/bin/scss delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/extra/update_watch.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/init.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/cache_stores.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/cache_stores/base.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/cache_stores/chain.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/cache_stores/filesystem.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/cache_stores/memory.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/cache_stores/null.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/callbacks.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/css.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/engine.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/environment.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/error.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/exec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/exec/base.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/exec/sass_convert.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/exec/sass_scss.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/features.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/importers.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/importers/base.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/importers/filesystem.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/logger.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/logger/base.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/logger/log_level.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/media.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/compiler.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/configuration.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/generic.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/merb.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/rack.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/rails.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/staleness_checker.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/railtie.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/repl.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/root.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/css_lexer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/css_parser.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/functions.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/lexer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/parser.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/funcall.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/interpolation.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/list_literal.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/literal.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/map_literal.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/operation.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/selector.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/string_interpolation.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/unary_operation.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/variable.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/arg_list.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/base.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/bool.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/color.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/helpers.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/list.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/map.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/null.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/number.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/string.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss/css_parser.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss/parser.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss/rx.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss/script_lexer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss/script_parser.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss/static_parser.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector/abstract_sequence.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector/comma_sequence.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector/pseudo.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector/sequence.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector/simple.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector/simple_sequence.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/shared.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/source/map.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/source/position.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/source/range.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/stack.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/supports.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/at_root_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/charset_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/comment_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/content_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/css_import_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/debug_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/directive_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/each_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/error_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/extend_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/for_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/function_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/if_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/import_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/keyframe_rule_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/media_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/mixin_def_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/mixin_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/prop_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/return_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/root_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/rule_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/supports_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/trace_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/variable_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/base.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/check_nesting.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/convert.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/cssize.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/deep_copy.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/extend.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/set_options.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/to_css.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/warn_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/while_node.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util/cross_platform_random.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util/multibyte_string_scanner.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util/normalized_map.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util/ordered_hash.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util/subset_map.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util/test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/version.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/rails/init.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/cache_test.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/callbacks_test.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/compiler_test.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/conversion_test.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/css2sass_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/data/hsl-rgb.txt delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/encoding_test.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/engine_test.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/exec_test.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/extend_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/fixtures/test_staleness_check_across_importers.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/fixtures/test_staleness_check_across_importers.scss delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/functions_test.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/importer_test.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/logger_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/mock_importer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/more_results/more1.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/more_results/more1_with_line_comments.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/more_results/more_import.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/more_templates/_more_partial.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/more_templates/more1.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/more_templates/more_import.sass delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/plugin_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/alt.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/basic.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/cached_import_option.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/compact.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/complex.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/compressed.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/expanded.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/filename_fn.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/if.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/import.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/import_charset.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/import_charset_1_8.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/import_charset_ibm866.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/import_content.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/line_numbers.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/mixins.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/multiline.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/nested.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/options.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/parent_ref.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/script.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/scss_import.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/scss_importee.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/subdir/nested_subdir/nested_subdir.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/subdir/subdir.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/units.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/warn.css delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/warn_imported.css delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/script_conversion_test.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/script_test.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/scss/css_test.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/scss/rx_test.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/scss/scss_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/scss/test_helper.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/source_map_test.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/superselector_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_cached_import_option_partial.scss delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_double_import_loop2.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_filename_fn_import.scss delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_imported_charset_ibm866.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_imported_charset_utf8.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_imported_content.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_partial.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_same_name_different_partiality.scss delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/alt.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/basic.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/bork1.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/bork2.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/bork3.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/bork4.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/bork5.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/cached_import_option.scss delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/compact.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/complex.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/compressed.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/double_import_loop1.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/expanded.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/filename_fn.scss delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/if.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/import.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/import_charset.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/import_charset_1_8.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/import_charset_ibm866.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/import_content.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/importee.less delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/importee.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/line_numbers.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/mixin_bork.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/mixins.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/multiline.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested_bork1.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested_bork2.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested_bork3.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested_bork4.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested_import.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested_mixin_bork.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/options.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/parent_ref.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/same_name_different_ext.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/same_name_different_ext.scss delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/same_name_different_partiality.scss delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/script.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/scss_import.scss delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/scss_importee.scss delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/single_import_loop.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/subdir/import_up1.scss delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/subdir/import_up2.scss delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/subdir/nested_subdir/_nested_partial.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/subdir/nested_subdir/nested_subdir.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/subdir/subdir.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/units.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/warn.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/warn_imported.sass delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/test_helper.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/util/multibyte_string_scanner_test.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/util/normalized_map_test.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/util/subset_map_test.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/util_test.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/value_helpers_test.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/test_helper.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/CHANGELOG.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/CONTRIBUTING.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/Gemfile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/Guardfile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/LICENSE delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/README.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/Rakefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/Vagrantfile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/adapter.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/adapters/bsd.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/adapters/darwin.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/adapters/linux.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/adapters/polling.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/adapters/windows.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/directory_record.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/listener.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/turnstile.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/version.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/listen.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/adapter_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/adapters/bsd_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/adapters/darwin_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/adapters/linux_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/adapters/polling_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/adapters/windows_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/directory_record_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/listener_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/turnstile_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/spec_helper.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/support/adapter_helper.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/support/directory_record_helper.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/support/fixtures_helper.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/support/listeners_helper.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/support/platform_helper.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/.coveralls.yml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/.gitignore delete mode 100644 vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/.rspec delete mode 100644 vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/.travis.yml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/AUTHORS.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/CHANGES.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/Gemfile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/LICENSE delete mode 100644 vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/README.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/Rakefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/lib/timers.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/lib/timers/events.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/lib/timers/group.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/lib/timers/timer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/lib/timers/version.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/lib/timers/wait.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/cancel_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/events_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/every_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/group_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/performance_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/spec_helper.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/strict_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/timeout_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/timers.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/CHANGELOG.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/LICENSE delete mode 100644 vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/README.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/generator.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/key.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/monkey_patch.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/parser.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/parslet.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/table.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/transformer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/version.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/.gitignore delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/.rspec delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/.travis.yml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/CHANGELOG.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/Gemfile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/MIT-LICENSE delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/README.md delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/Rakefile delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/encode.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/encode_json_and_marshal.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/encode_json_and_yaml.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/http.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/parse.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/parse_json_and_marshal.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/parse_json_and_yaml.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/parse_stream.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/subjects/item.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/subjects/ohai.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/subjects/ohai.marshal_dump delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/subjects/ohai.yml delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/subjects/twitter_search.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/subjects/twitter_stream.json delete mode 100755 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/subjects/unicode.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/encoding/chunked_encoding.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/encoding/one_shot.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/encoding/to_an_io.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/http/twitter_search_api.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/http/twitter_stream_api.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/parsing/from_file.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/parsing/from_stdin.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/parsing/from_string.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/.RUBYARCHDIR.-.yajl.time delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/api/yajl_common.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/api/yajl_gen.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/api/yajl_parse.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/api/yajl_version.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/extconf.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_alloc.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_alloc.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_buf.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_buf.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_bytestack.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_encode.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_encode.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_ext.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_ext.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_gen.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_lex.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_lex.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_parser.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_parser.h delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_version.c delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/bzip2.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/bzip2/stream_reader.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/bzip2/stream_writer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/deflate.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/deflate/stream_reader.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/deflate/stream_writer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/gzip.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/gzip/stream_reader.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/gzip/stream_writer.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/http_stream.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/json_gem.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/json_gem/encoding.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/json_gem/parsing.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/version.rb delete mode 100755 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/script/bootstrap delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/encoding/encoding_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/global/global_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/fixtures/http.bzip2.dump delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/fixtures/http.chunked.dump delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/fixtures/http.deflate.dump delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/fixtures/http.error.dump delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/fixtures/http.gzip.dump delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/fixtures/http.html.dump delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/fixtures/http.raw.dump delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/http_delete_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/http_error_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/http_get_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/http_post_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/http_put_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/http_stream_options_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/json_gem_compatibility/compatibility_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/active_support_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/chunked_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail.15.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail.16.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail.17.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail.26.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail11.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail12.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail13.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail14.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail19.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail20.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail21.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail22.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail23.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail24.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail25.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail27.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail28.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail3.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail4.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail5.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail6.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail9.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.array.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.codepoints_from_unicode_org.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.contacts.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.db100.xml.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.db1000.xml.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.dc_simple_with_comments.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.deep_arrays.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.difficult_json_c_test_case.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.difficult_json_c_test_case_with_comments.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.doubles.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.empty_array.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.empty_string.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.escaped_bulgarian.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.escaped_foobar.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.item.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.json-org-sample1.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.json-org-sample2.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.json-org-sample3.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.json-org-sample4-nows.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.json-org-sample4.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.json-org-sample5.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.map-spain.xml.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.ns-invoice100.xml.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.ns-soap.xml.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.numbers-fp-4k.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.numbers-fp-64k.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.numbers-int-4k.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.numbers-int-64k.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.twitter-search.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.twitter-search2.json delete mode 100755 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.unicode.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.yelp.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass1.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass2.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass3.json delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/large_number_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/one_off_spec.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/rcov.opts delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/spec_helper.rb delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/tasks/compile.rake delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/tasks/rspec.rake delete mode 100644 vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/yajl-ruby.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/blankslate-2.1.2.4.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/celluloid-0.16.0.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/classifier-reborn-2.0.3.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/coffee-script-2.4.1.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/coffee-script-source-1.9.1.1.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/colorator-0.1.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/execjs-2.5.2.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/fast-stemmer-1.0.2.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/ffi-1.9.8.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/guides_style_18f-0.0.1.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/hitimes-1.2.2.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/jekyll-2.5.3.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/jekyll-coffeescript-1.0.1.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/jekyll-gist-1.2.1.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/jekyll-paginate-1.1.0.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/jekyll-sass-converter-1.3.0.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/jekyll-watch-1.2.1.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/kramdown-1.7.0.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/liquid-2.6.2.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/listen-2.10.0.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/mercenary-0.3.5.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/parslet-1.5.0.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/posix-spawn-0.3.11.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/pygments.rb-0.6.3.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/rb-fsevent-0.9.4.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/rb-inotify-0.9.5.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/redcarpet-3.2.3.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/rouge-1.9.1.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/safe_yaml-1.0.4.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/sass-3.4.13.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/timers-4.0.1.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/toml-0.1.2.gemspec delete mode 100644 vendor/bundle/ruby/2.2.0/specifications/yajl-ruby-1.2.3.gemspec diff --git a/.bundle/config b/.bundle/config deleted file mode 100644 index b3fe903..0000000 --- a/.bundle/config +++ /dev/null @@ -1,4 +0,0 @@ ---- -BUNDLE_FROZEN: '1' -BUNDLE_PATH: vendor/bundle -BUNDLE_DISABLE_SHARED_GEMS: '1' diff --git a/vendor/bundle/ruby/2.2.0/bin/bayes.rb b/vendor/bundle/ruby/2.2.0/bin/bayes.rb deleted file mode 100755 index 57bc449..0000000 --- a/vendor/bundle/ruby/2.2.0/bin/bayes.rb +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'classifier-reborn' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -version = ">= 0" - -if ARGV.first - str = ARGV.first - str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding - if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then - version = $1 - ARGV.shift - end -end - -gem 'classifier-reborn', version -load Gem.bin_path('classifier-reborn', 'bayes.rb', version) diff --git a/vendor/bundle/ruby/2.2.0/bin/jekyll b/vendor/bundle/ruby/2.2.0/bin/jekyll deleted file mode 100755 index 5c71b03..0000000 --- a/vendor/bundle/ruby/2.2.0/bin/jekyll +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'jekyll' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -version = ">= 0" - -if ARGV.first - str = ARGV.first - str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding - if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then - version = $1 - ARGV.shift - end -end - -gem 'jekyll', version -load Gem.bin_path('jekyll', 'jekyll', version) diff --git a/vendor/bundle/ruby/2.2.0/bin/kramdown b/vendor/bundle/ruby/2.2.0/bin/kramdown deleted file mode 100755 index 5e76025..0000000 --- a/vendor/bundle/ruby/2.2.0/bin/kramdown +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'kramdown' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -version = ">= 0" - -if ARGV.first - str = ARGV.first - str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding - if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then - version = $1 - ARGV.shift - end -end - -gem 'kramdown', version -load Gem.bin_path('kramdown', 'kramdown', version) diff --git a/vendor/bundle/ruby/2.2.0/bin/listen b/vendor/bundle/ruby/2.2.0/bin/listen deleted file mode 100755 index 89fc16f..0000000 --- a/vendor/bundle/ruby/2.2.0/bin/listen +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'listen' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -version = ">= 0" - -if ARGV.first - str = ARGV.first - str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding - if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then - version = $1 - ARGV.shift - end -end - -gem 'listen', version -load Gem.bin_path('listen', 'listen', version) diff --git a/vendor/bundle/ruby/2.2.0/bin/posix-spawn-benchmark b/vendor/bundle/ruby/2.2.0/bin/posix-spawn-benchmark deleted file mode 100755 index 1bdace9..0000000 --- a/vendor/bundle/ruby/2.2.0/bin/posix-spawn-benchmark +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'posix-spawn' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -version = ">= 0" - -if ARGV.first - str = ARGV.first - str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding - if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then - version = $1 - ARGV.shift - end -end - -gem 'posix-spawn', version -load Gem.bin_path('posix-spawn', 'posix-spawn-benchmark', version) diff --git a/vendor/bundle/ruby/2.2.0/bin/redcarpet b/vendor/bundle/ruby/2.2.0/bin/redcarpet deleted file mode 100755 index 9a16bbf..0000000 --- a/vendor/bundle/ruby/2.2.0/bin/redcarpet +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'redcarpet' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -version = ">= 0" - -if ARGV.first - str = ARGV.first - str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding - if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then - version = $1 - ARGV.shift - end -end - -gem 'redcarpet', version -load Gem.bin_path('redcarpet', 'redcarpet', version) diff --git a/vendor/bundle/ruby/2.2.0/bin/rougify b/vendor/bundle/ruby/2.2.0/bin/rougify deleted file mode 100755 index 67b6c8e..0000000 --- a/vendor/bundle/ruby/2.2.0/bin/rougify +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'rouge' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -version = ">= 0" - -if ARGV.first - str = ARGV.first - str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding - if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then - version = $1 - ARGV.shift - end -end - -gem 'rouge', version -load Gem.bin_path('rouge', 'rougify', version) diff --git a/vendor/bundle/ruby/2.2.0/bin/safe_yaml b/vendor/bundle/ruby/2.2.0/bin/safe_yaml deleted file mode 100755 index c77af8e..0000000 --- a/vendor/bundle/ruby/2.2.0/bin/safe_yaml +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'safe_yaml' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -version = ">= 0" - -if ARGV.first - str = ARGV.first - str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding - if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then - version = $1 - ARGV.shift - end -end - -gem 'safe_yaml', version -load Gem.bin_path('safe_yaml', 'safe_yaml', version) diff --git a/vendor/bundle/ruby/2.2.0/bin/sass b/vendor/bundle/ruby/2.2.0/bin/sass deleted file mode 100755 index 2ade46c..0000000 --- a/vendor/bundle/ruby/2.2.0/bin/sass +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'sass' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -version = ">= 0" - -if ARGV.first - str = ARGV.first - str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding - if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then - version = $1 - ARGV.shift - end -end - -gem 'sass', version -load Gem.bin_path('sass', 'sass', version) diff --git a/vendor/bundle/ruby/2.2.0/bin/sass-convert b/vendor/bundle/ruby/2.2.0/bin/sass-convert deleted file mode 100755 index 2c1393c..0000000 --- a/vendor/bundle/ruby/2.2.0/bin/sass-convert +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'sass' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -version = ">= 0" - -if ARGV.first - str = ARGV.first - str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding - if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then - version = $1 - ARGV.shift - end -end - -gem 'sass', version -load Gem.bin_path('sass', 'sass-convert', version) diff --git a/vendor/bundle/ruby/2.2.0/bin/scss b/vendor/bundle/ruby/2.2.0/bin/scss deleted file mode 100755 index 6be603a..0000000 --- a/vendor/bundle/ruby/2.2.0/bin/scss +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'sass' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -version = ">= 0" - -if ARGV.first - str = ARGV.first - str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding - if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then - version = $1 - ARGV.shift - end -end - -gem 'sass', version -load Gem.bin_path('sass', 'scss', version) diff --git a/vendor/bundle/ruby/2.2.0/bin/summarize.rb b/vendor/bundle/ruby/2.2.0/bin/summarize.rb deleted file mode 100755 index ef1d50b..0000000 --- a/vendor/bundle/ruby/2.2.0/bin/summarize.rb +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'classifier-reborn' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -version = ">= 0" - -if ARGV.first - str = ARGV.first - str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding - if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then - version = $1 - ARGV.shift - end -end - -gem 'classifier-reborn', version -load Gem.bin_path('classifier-reborn', 'summarize.rb', version) diff --git a/vendor/bundle/ruby/2.2.0/cache/blankslate-2.1.2.4.gem b/vendor/bundle/ruby/2.2.0/cache/blankslate-2.1.2.4.gem deleted file mode 100644 index 0b13d061369338085122261a7ceb5cfab5652e06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6144 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 diff --git a/vendor/bundle/ruby/2.2.0/cache/classifier-reborn-2.0.3.gem b/vendor/bundle/ruby/2.2.0/cache/classifier-reborn-2.0.3.gem deleted file mode 100644 index b7e3b74b61a8a5afe7faf5e8e2fe8569d037a30c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23040 zcmeFYQ;;q^5H>irZQHhOp0RD)wr$&sWMkN#)Q%*x3G#LU9R#=*+L%E|hlo|%=6 zjT4B7>HjW+{*UvzxwslR|7VhirJ0%S|55Qjwg0d5|GRJh!@2)y`2SZ$!Wbx^jkByj zAfPwu{~VT?kOE!}j6Rwx$n3^J#kN|T;-IZWmm&B9m5#~QM`{FzHaFFgzHV}t6WUxa z$Apf;N>whO?r!}B_VVz>kpsf*1f*^Kp~Dmtgexw@LBsGSMLezGSw%#rV99eyi48*& zb=a<978ZTIBZ3f@smIcf7fF%nU>%@$QoULS{s4Ez0f&A20M3Q3^3$&>Dh{L}JpDdYT!?%0(6uS*}3IxAM zX^VhWgQ>|}`_?fXxg_N*;g^A8L!XkK3fYOEEnL~K0yMzp94erDKqxbWQ5Ls9o3^hY zj5?@emo1QI>V$XpNSX@RM(9S@Jgb7h;6Z{x4tR#925&G-Y0-X=Pawx|MzMahV?8_w zBt5x@$aRC7XJ=MX#oiI61lh*Q=zqrFl1gPA!KcPNKp?cG&~c(*9Z&PBRJFr|nuC(jGry7vL9ghaVGU{#Y*u;{;^rj`8%f0@0#?+@gmw^-oRB zN~@Zg<)BW|8SQ12IA+;{ub*Jx3YBCrdFt&pY4&%Ww{(4G4Z=v$ha8P$?D^C5*GusK zmV|AsM8sr4%EVfALmvl#06IxwRbc+Vx*PwWx9fky{{Im0|2_O?V`F0ZKjA+s2iyOT z|Nl>{hW~;8*M2@8+hdC!zw~pT#2n5A*>Y5uhq5^2&cz$f#ZMpZWV~KJX#6x%B4oxW zhCoUzxS#LWcVFh_j6lMZR$Blon>-GR!O`36+Z_w{m&wK9VGGKL{!hstyE|Kly?&op zkL}0xx7Xc&-LLKee_MQBZ@+n8@BRw}`FGd5oj$)F=ARz@gL}obhrvRf*<_P|Y;?sMx)OgC2D}nn%;?_RpQ->6aOR~Wq4X32c@pls3QFOOu zR>{pqLZ|sx0anJ8P2cQH%w^9^z|15`9g54@ocp|QUIx0hAU~72kB5bY#eZEd6=OX- z+>tW}W-4?~bj(&(r_#)_H8j{+G@PO!<0G3Bu}jS~OM}5(CGDU%-r0 z-0~69>J;Xwh?p&8HQwP{IR|8OV^$m-R$;d-JuDBd*#_h#{%Co9BQbz}>*UOsRw`Om zvSl&`t2bFa%3A?u#pGr=n5WqoNBJGwy<8tMqqEBu9eBop{nn%OG1(91CMr(_9A|CfjkW z`bMgI#Qm?bO8JqTdULeF@^Fo(Rr-5zB!eZd~>W|6p*2J%pJE;c`~qngz79gq^=#G-4mVQHlVN~^hMN)J{Uwqui@8XYkl zN^w64Npy)C79)OW=0x&Zapls1F%BjhN4oRCvB>gB_himH+nnbXxtmz%*yj^}5!bwN z{z!u`ew*Lj0c9<=JUKOt5^bE-Vz~D5eJ@lgFC)|+?aH$lHyxe&LjOo5Cv+oV%7?N- zjlgW+805KTkn#(vLkuBZeN}Ddp=Mc}ty0V$P7N#W3;#LMhgTA8iVJccEi_SA{==IA zhJ+Lv5RE0wC}Ydz5RF9%t7Zw9KoDFJAp~r>+b~ZFXL6wV7+>9ymPZ%+%MVl*@&Sv< zN`WaVN?+-zP$%nJvb2%{8f(R7d(lm&+cXKR(vk^!DkK8fT++O6pQQvYU^YhpAJ?5%Vc(BWl=~(n@1(2y5mF!ewC|`I{ z6D?S>sIj7%XvUUnTC-OukM_w|I>>It@eR2xU*7j63#Y_+(Cf7eWD_6&h0J7Rmdtp5 z1>&G!SUu2c8rI z)tK#}s$`DVjIv01w={=zH5N|Rtrg!^3m#s*>&b-+c_c9VP9S5844q@lku9`uQ7t!i z=?K)_AC(s(?D6Huw!&m~V6_l$;%eo79lA$s{t$616?+ubGhkwtcb1B#W7%5Jtqkns zEmf!pFc7k0I^}JUVqYtUKjBOvO(l!oDL5k|NVjlB+#%^GIaqXB10vnB{SqWj4jF7yzRFR2eKJwa3-f{d zMSj@oAXIfYRvN72ZP<5bL{U<0)Q^kCRB@RCP#QmoTp;0@3_eBWN)KYE+@~=3(Xps> zuc5Agr-~gP!`s1R2s1fDttZ+)V?z^3YnEcVb7vo57LnwMWw8832$z899FCbaxj{Ii zZF-;3APiH9>bRW0081AsEBRu^wJyvlzA`(SSWM98x+iWjbm?tKLs*Nj9c`-Io^aYM z2k!88TgEUc7eKb5KBAEEm_jvHRKVe@Y-2TSHOMHWKdO}jN`HEdlgx)Nj6F~2#~QrdjgIZIxZIO{TD05d=|Bngopzfts*B*exznrOR8 zuSy4C9+qX7AA~Oh@mCPTC@LP%u!hXtnjnoI?8IMjL**+J(=D^v{s(H^8%3B2*}dgj z)YH1iq2!fHu9hG+%E2Dv#@MmGHgf4oeu>d6R>%=pOo+e?()f)6)RA;?%=Y>{#8H3sNoBXO;J?m;TM(6T7+9%k+BzR24y)rR8`@=eSp~!NM%DqXbbB z+(jVStYejtO+BaX7j0H38+98vb%r%G=` zGl8*Lj1=hU#^{Q5k5b7Cy=oFpMr!pPGn;%`=h-`^R876|a`UQC@DFzW;*J>XPsyCABttcJF1WPs}E z`i>qh-J4ELBMVCwcDncaGFtYQDuLb2?u_IJCX4j3N^W~ zhHkh~f{>#YFJ1APk*le<5lw0bfWrBca+n6Yx=iAhCWtAd3NUF0@@()Cdn&-9RA_@l zWYslZFlxEL)Z3S}=t9ea`W;L;u#~*c|}7O{A|C8M2YZ1@p!TEi*T`b&_2OUOgyKjFcN6WM#Da zIGyS#=_oGQK8$s|l6WO#JR8cW*f8hs^uTU-n43%u_e4f&+H~1*YaxOSoJ%x>t)aW{ z72(sqh3ZdHrTW7~F|3Q_g{DhKTg9&u$%)y3q+nEOnijur`D+O+aVeD8^H7M+1_aj; zVeH4^zi1wBQlW=rp#wKlR89{RDiNm9+=!;>aG$3k9f`wT1wL=W;AE44kF~>0CFV(J zK(hr|f`WA1qN||o8af)2(tD=Is90@sAnW5dWfU6{k|mi@2gi}~{E?}F59m( z1aHZ+G&FPSAO#lY{*Fk;r}_STUxFX>^!x&h;PLsG5(osmoS&a8K3PznK0KLxd>qb8 z&i7qpNlH>OCM5LvhZS@jET1LB6A<$A4S?FNxf{4j$D~4v4MO9s7qvsNIA2pZDlvgJ z*$Tx;{nccS#eFM1y&u;3=3r70FRSn`UZBtVVaH}ZDk45A`$Fj=d7<6XAk!$F76iE6FGHN|#-O3HzckZU13okW0E zO(|MM`Dd+1$Kr-s)yWrKlbKGJ)l#l?dfh$`eszI_|wPZ9)TYX&rA z^N)BMQgf&t#T-!Dmo7bZj?_%A>9EQ2r@RxBfcO!MJ+9$}4%U=WAMQ1xRjsF$g#DU3 z`z-8VN9slo$i6XOChZIHv7EhN-mAk%pY?#Sth^0-ut@#`35>tuk!=qVePnvk6TK6R z%I&`4WhVm=$b)?ohTGGDyoH`nz#QIGP8?ExoIfURm(wAC53cp|Bf!jx)@b(LAx4?6 z1uhqNP_pW_{zKOa<9fq;2A?PV?90B$AWJg3cAM#IR6@S;4t#_ax%~u#?7AW*nUkAg zI(J2qj%tV-+{(wW3$xY3dP)v;J71DW)|9~s3x0i2m4*E<t&j+d}joL%ot!)4*-g$2*h6=Xgk~QTCncM_#8r4JJ6nsC@M7?BPC980 z^W@I}QM&%|6NsgP;wh5K3D}c`L6rzDcpXS*m9d%yYwp;E+=|c@#rIB+LNa$IB5_)Y zn3sGU_9<|&5cp6*o3L{Ap>S2b@C^N<9w!DfhN0ct_A}e8)pT7mYS?AbHVT4~G~5uk z`&o(^^xxRzkVXmI_>?B^Sa{hRa&<&60gbM)p4|S8>a`*66i%E8V+pjyjzgh;&z{9| zwzn!2>a8Ua=+ZPiB&u`nHQ*2Io{!I5m+#aVyQ{LM%j3+Jb0K#`?%ox+D;Y_aVTqR+Axz1n1~JUqEgg2 zS+!o|MylyD&_S6CrKf`h9Wuy#s~B++@Ae z24V}ER?RgKe^bC2H#I7AB!4H-@fnn;Va-b^ZrrRvvy*Z}ex1$)TYk}H?qK#C`o-!# zX|6DuIGxk8?ywyY44szo0QMLz)WMV?5koT-7n=$hD~DQPGt#LZU3phTUN#}g1_6d$ z5G4djaMeo%cm={Sx0~Wtqf#pFgbeS)%o5mv{)TB;cnOqz6-~n@c=b5H0>(%#c)p$( zVSu($#hPpyeGa1oPb+kj+TvviE$K zm7Odk`I^LrmpW^du*(@u)+HQFBpqND`Iu^yX6cTPSC72x57^@y`r@iOyw`M&)&LO? zU!%R&Wt?hKVJCVVzUUFkDV`?^1W@O|6F+IaS5~SF8*v2^A2u>%XOK8Ekj>)o{h>tCfL#Z#@vdjb`;*QN23# zL-rXLLgzU<%^*GBLktyJX?aJIOirourMkaC@C4-*LxzKRsjC!xQe5#f%QVT%wM-ow zg?RGLF5qrNhhotg0Aog}anRCSes%74dn-6o1aev_45QIb(~~*yvnp&xY=GY7`0_{K zbJRTi&C-bXsT&oCDrxf+>_hq{U(7N4>?gTd#P=yqi;9?2C12)LH4P^O&k9%(balZ~l%wVe2_6(zyD6Vdg{WPgjQkk>43|`l=+_K!tq$|33Suo;Z$fac# z2?0wQ#Hi6A9kNtBi3u$cmq`bk!AiOBm1jM-e3?4yfUJr=olG4pN70Ql9i-e?O7a=H z%zCr*`hW<1R2DQRZ_v|%yYo#`GRkphfyzS84h%-@dL{L}dtGN%ekdXCDIZ;#e+%AD z$kp7Y{MvnUk6ufg19p*@eA794Er+{o)5y^sUWeCiY)*+)H8JiSD~s%| zbb(2hLwYPh%;4U=?^H}&JyY+_TOX3hQ@`}fR*L_mr9;Xt5b1Hw0%Ld;J(EQ&T)v!; zA!pS5cyZv^%q8Wik6uJ9TM*UMbB3Hae{!K0od1d?znMbyDln?&w6Db*#Rho?+pl)% zkwlG9uCP_Oo;@wW(ai_~3zG)6j_yt-XBPEk84_qy;qoWU(aQ7r_IXwqe^pPDWEz(n zI|$uDD@WBe@kLG+pW-n()**TT_z*RhVnSasvcDK3)I?C(iWKo?v4T?I!*%GVTdG+~ zMJYgFwFDvFGH3U`>o|#ypn%<3m^5SV)3bNqRT_+=;mF%lBb^k-87tFnCa{Zs-fBA9 ziH>{%;OJAny$l$1^{G~^lHZ0f{eyTBwl7uO$uN&IZYS7WdnNEmiK4cd<(UIErEbGI zQk*5dUQZ~PHJYo)+7{)2dMG0$LTnp-JryR`R~{G9Gx)JI5>z6Mz4*MbR5;!>t;$qS z=(SguuMu>Ip!1-ThZ77Q^? zHURTAGECALzzsAjNj)+pp(5^UmQ}+w(ZXb+*&g(LgiT!q{z+`4J1gai*0_Y!RYGq7 zR|9S#OfRf(IKRruc^OP)fp-=eA+8UBxD<;)6y+OQ4=M^gzfoLGmY)W9x#$_jx*EP3EKiqH@4H0mNSxqJ}Ky5$f~hPuYekK-h@xUFe+Sljm{gFq(T$Is^0 z0Xo)-R6NEcr~nbeOxU91R{XgT!h5~|5Sdna2a=mLs6~wo#=@g@N}Np-JV0S+eSTot zU`Iw}k7a<&=vv$gp>Y-)3Py{=DDG#*X<=ocm!{T9r!6X8xL?_4nKvUZHC_KVYnUE$ zqBkEEJ^FL}6dZiHCUh1`CVt4SnyBjsIZs6ypCiUVM{E(`D|I+P1Mp|GSGsziz54T+ zX7vHEy<%=J0up#|0#}UsXA2p2YEavT*b(F2QaG*Ls`jIynjV_w$S99;+eSAy70R!= zFQASEdS^Kyz+O;PUIrO~ZOiB!Ovwd6F6M=$^C_p;XPvW}?geYHH8o>1A-hhj6q{Sj zM&X>0#MyvS-QVAKIdh?iO0a3EnK4I5#Su%^JGQq@hRx+0HfmRiWvi42mBwkM^i3{@ z)D3*l3bO|pY$SQ*l6Z+$C7KqeX=$j)$&=j zf&DU68wfXU8(f@=AY5mz-QW)21l(e?bgA-Zl8{A{?m0_PGEb9*Gem_N`cNd)*&8)x zMrp(1@W3mUf*llnI?Z1qCBv2;$g>0|Vc1Aht5#FfPHxcKg5`L5Se~vJ=hhJenVEBX zQ7%ktBZi4RG(5{qwBn?A#4MfGC@rKgL?c2y!FWM+)1*PLb(;J^9pQqYDIP^g#@u}v zfgHa6loRT4-*LO<_s$hcTa_Yq%w17!-m29qpuvQ3nTr$6%tSmhs4pQw zPPcuxJNF)rc1q4@`O#Y0HubM4eJRHIsk%X*5}f;lZh>AYP^Va+bjbwSj>A`%x> zx%&gPXbeAc676>39i2NW=)7Yh!BT+jC;84Q{LMq%Y+CJ()f!XJnuim$3&=TTNU)rj*Wh4xyzDB4}AtZO1XtHpb#0u&gkmq=WB>&3NCv<%T%+cA&!YCfV_H(fhB ztBNQPJ@{1hN*D9G01XR$)(!pe?%cwmyfP5h#;s{DLxR6UJCT$VZb62|HHL-z2W{^U z6PCJN+>yoTA@xnRG|68<{ch{yj>Kzi2rCP8c66$kD&moY$I|RvC{P|}H5s-$qfuOe zsXBGPw7o*DZm{Pn)u?LeykBTWv+a=8thH7Ol+U(59)$HxSM#}hvlIDdzKVj~t09*d z&59x)=DkMiJhFM%3TR%vOWvDH)!5JuvxkS)sI|kQ=QDxw=|Uq@lV#IKd*u36*hWM(nyx)uwkkM5Y>nbq%t(+D{w6jlHSv(Mg2M)yq6QH@6d7^Ms^AqL(SOUe zuTT_lMI}`3B)(Q4-^n8nx>kc@HA4_zir^6YynycOeqvcA42@hxRIKRh^t0agsh`ML zF5zp(()XhK-r6K1EKPB%>EXl3n`q@J@&{QpqU|A~ip?hNPPpD$rk`jlFQ99HDC5Af z&_9zNjc505#jYhN*-93ZwujC$a+i@I@!pq=k#L|ewOWqPx$oT{pl}S41-x}-Uc#%^ zuhLp3CK?A!+CS}+^@d*mTQvD1QB%xz!v|5}cz#6S=n^%Zw-2FdNNcTZFxXqs)Z|Gq z2BTtaqeQNyyw&A=$3Q|Sag;;NepO;7@q@Tgg>qDPVEfQ6Zdb1+b@R3-~V za$PE)FkOPWnORgQs>fFkO8p#4{Ve3Glgri2B*ZLcrg3v`AssJCkq1-FG8q1lwJ(O* zH%y4}1Ga&$eWygRg4LOc9`(q~{$he_PBt0q%Z|Yos*HP=K+1+iBc>wn-_m99n}Bod zJ_9Q&|I|*8AS@PU<#+rIYbQ-6Ux4idN^NUe>%Xe$s#L(H`SWs~GLl%dI*Xx7vMsiB zOkS4*Hlw**$UhxF6zbNWJ@QDC^f_pQBd)b6MpcQyy`E@1L%saHn$6ozBW_B49Ss}q zxFaoth4#*puP)1-fwS;&nIz35ItdEmClt9^0-nu$7z}N=nDwbH4}-9_$Y&Zo6UF6S z2EG;u2bQL%uYQu(z?15;1NYF9Yx!6lh~zS9(=)jqn9$msj^&*wAW29$iIxxj;90mM zLJ^uJg+Oyh>&!7!tv^WYYUCN>d8y@%;!ddUcLc{cxeurF&bGLQ$we!k9E}sPmtc(@ z%u(={Ts*Peya*(xAA0kubp=-otX(%4HU7}=>{>)8R7Mqclpl;&U(v9!nwVa&0nvUQ zke;arRK)*9#FB=n8V7r`m`C$^0zbsB{<&cuB0;T0m@6i`BDIv#KnrwZI5G95Dgn-I zHyaI$C%lNYsUo&EDeXuw=fEG#D&U&SCuHwWFt71w~xr5B+=umrfz{Gq@B{{wD6$1(WcyH93WB}Ie@EuYRYIJ58-v1*Yg#Jo zKTtOdEt9yRSJ_? zOi<^(hKsD+b^F!uZHcW1@@RT7YAEKb&>HlNYfvREL$Jfx)2wRAocX>S-O zDV_G_)kPPlKr48M%Q-ZD{p&y3dpH;@sfhU2((NHQ(byC$`gwh+@Nmz0?!U9&>-_vr zba?Q%N`Du~DwaZxJUU>bNG3|x$~-bn#MD9qPuQs9Q5Pl|1!6N2=w~q)pDvXw^bbi!lCGt6yPm{hl+~Mw75d%CeZ-DWp|r@8R-1io zZ?CVf|2VQ;oR4`(KiStga^4a@GH#S6EVGl2gAMkEt6an(Y%dk(jLw%H2^wWFG|wA1 z1GZeU(W(K4CWq`h)^+8}kgI$W@}v}UxlNn}ZpfPdIK|e9$Gq@Vp19ob#d42x0?ULo z-wHc{0Y*U~p>+kT(b-{W4OOu~AN9j7%OrvJ`Vj2Qs`C%kV=a;l4LpN=HYU_&X09jJ4vhMf>4@bj3_Z+Jp#w)vAFF8louy(3h*GWRp<-ug&uk{Rd_+5aC_~2`d&56+C7=c68upXe1_Z=h$}a#*x(PmjZu_`y#mBsQs;1!JNScXi0Thi zeR7hgPCdsk!*%f7>7!A-D!3`2G9-Z;eGKdw`2wx?q|*w@@yUw4a#fNFElGit6eD_R zt&iTOnb(ghr!ZGbyl{41HdY5QEuLL;supg4CUd6HYswdEO-&>@bna8Y$*AvGIQB7J zTCB3#A6d1nlyDJ9nIQK#D^6WQ%osq~WfHT7QQT7#qWlRC`c0j07uQ)QcUuAud@7#; zS+Bk@WZoun2(xkw=u!OG84M?ot4s8MM87Z@m)C9dPebf2o9IWhvhV~yp~eGlv{0dLO< zt@aiFn%*3L;VUOp*bI$%`gNYax-nXSAl>g^>6H}@6CPFH-)c==I$(6bZlX?33F$Jn z-u+p_SRzyV>To8S|K-8O{S`?5)0`3kz+xDfU`2;eZ>gG)Xq9c3>_l)@p0Z5RKr7Ej zvs7u*?g`WBAzN&G8IO0(X!2#%ko&A+iDF6RJjh1-PQhA{FnKE5H)ILAC|`XUP)Uv; zF%-P#_x1@M5W76ll0o}=Y6-!^E*HHPw_AAPXX_%z*~Sn>F>OxPE7L#2oBk1 znb9l-4q55Ac)tfud|QqKOH`}C1(HXw!51qJx*se>fw zM^NW`AwNj?>C?b$-jUkD#qn#_qhi|vdEI=2=){=xqxaY7tQN6?ia@MCgF={b1@OAA zDb5GU;@^z$+UB!%Lpq(SpM3|ZuY`;G}q=-4XI_gI{wAq=o02rAz#L?1(&!z^$>b4cu$_rBka{7#R;J=6bWe}$M1 zz<&jN-rjzf|Nh?o^C5iu70mk8*)A7{tNmIbfv>ky#e^w5nH5h;mYcvxgh~HYfA^|R zxZh)(iGN?Zw$0)9jU#E-dx;4{y<(NmIgZ1aWVbO`R<3m?cMfv%YWbfM7-@ei2vr~n4Uv&z9Mv+ zd-#0n|C@=mS1!R6V9j#@h1N*tsQF8&Wd-%`L3%X5P6V-mng#E=%xFdNDAo7IT*g4G z=R#zkbO8St_n%0ctCvN|cFInJr!}gLu6}UbHrU0~V4VJntZdfH{m_56-8(k9xkRwo zDa)x)o|D7!}8R4kJt_wV-t zRXHD35pzQ-gBt@GFK=c(%GSGa`)@%%e-w-rev1%v!+di8!JMiA!Sq!lP$J~CQC-7* zfQ^u3AO`{QtO@t`E1+xz8yvPSa1XI5r|<(&Eaem2GU ze1hImdjo+p;$NBGe|4;Poe7vO$1 zCB)?EaP=YPj54AlEM(W`0o)-g7K4$g`YKIZxPew@n$fEl5b~_HhY+P zIFgq?KB4dZrR@FXJw-ACaDOFwc|N%~xUPs`#+AJ@ObIEe=ySR_xE$hu@ZNj2GSAGZ z3f2Gnl1PYuAc5p^pV$D>8Mf;6_O&@};=NF^Nzm`g7!csB(;^m-9JEndJ88=H{X3HM{~wzmR6n zhNl+fMfC39OtkG11|mp;QlYdbx;SA}3Hl^RjsFL|4P>r`qhIeHuWeYL!Ln7>?oUSQ zZ-7O@!t-N*g-3*KNY~e|>)GusV#BTt@XgFY*XiSPVHd~*7g$~Pzy&u>x#xkWs z`&Wx*^TKE?cbXxpKr`Y14grDQX^`IZ%PPC(WkOBpklMfo?84GTX>)c+jp`j`uaEmW z;gjDl>epY729%#GYn-*INn%nQNb1Z4(O2W9rs0be=ViMi*D+ApAJA`wHrvxy^Tpx& z1Sk^l3opC7qL=JJ#{U#~r90p2X&Kh=LRXw8pEcUE_noj%3e zP)Kd_JFpja<+hCLb;Mi+vr(yO9Q1LVe(|H_BW%UI-jBnLTma{|JRz&UXSCuz%YAg` zy%y(lHdmB^`n24ZkS&1^Eg?^g7(Tz!?rpW0DXZdlyxj&h>ZsfPOYpl@XEK7q>YKpd zZ(adHxwZZG%0s~NWwLK`QGLS%C)Fos;S6DzN=nB2M(1lG#rEs(ToMvV?bS1y{QR3o zU{L?ft3N1_v>rZ=rwiH^4;TV;pE^rl22j6 z(%rw}SPd@v>u^-H@;{g)52p=chk)XEdc+q{Uv}R~CiyF#5x>v&modhQ=-0xSS&lBG z{RXe+m=E2x*k#GW3K<^H3LP7Jav%)iw?XAO7$lqa$H5<%V@~_u(@WlTXB|u5vNnfp zk-PD1iK0;-*eWv$a9DbpD{w89?E_T9B}&@ruxVyjPPjTnc7Vf;Ak*ntTy}C()32e6 z#ovJ6mU)41+gHVHUJrrpmTl3A(%nPF@9ysH*WcFfi+{WY|F(NS85Y{!I5d5j;Juo7 z8shQH<&Wp)lNF)tJlaedf0+~`sM?^%rwy&_JHZfTKjNs}MTX9V)mQN(gFcpNl&wXl zZSv|D$pAlQe0l?q(vDQEEw9p;4CgUwdef?%7Ru~kwEUB-D+sF#MqcJ3Dn>KKlzF&X zshd^6XmZ~W?V?HxKyFZ^u35aI;<&hkx5<#PIx)wJ_VgJ&ieY&VO*Q;I4 zzjF=pO5OMXeOa`Bcek&tPf76a=51Je#H*5uitHD82k^@u*$4tq5)gcHQ6&wtj2W zA!TD%)Ia*Fx~Geybq6yQEDsHtP|E)EOZ@NAVC2`}b@XRTXaN4<*N)6*?d!Ljm+4_8~1;H__N;NMg5*801rSVy88d`^hGE!L6rx44~=6JVk{o zvo!V|ZVC&37LZ6hQ92uJB81^IfAk01pUwy}fl$`MI+TDE$3}`q-mF zWihs=FnzeHRcd5yx8Nr9n6hB4&q;=_5w9h0G7s_9ep%7X&}lNfo@^qnv0aNhi*rC# z(UOM@d)q)`==Sy+o(}f~SdN?v5!Mqdb+OSHb64AnA&vzcCnR#a zuPl+yMR7A~s$n(5@}9ciP5($1+}ZiMT_OHH?*)8yEc5UE9s{n=JOq2b4+qx_ej-|Z z4%NzOP@Pi6F9Tn|CX95b{*P~$r zPEl3b^AV!EW$kD^+S=tG9<^&;x4}_ge)vHtG2mvN*20_D*U-aBLDKP8Ca-G-?MR= z;PJ`RW%Y=m>VE@3pTKyt54JLMa#W(I^1S}-;#u`D`Ml$D-`r}-Zj`XsZY_uz;iq@` zTPAm>)jmMS8D%mb+s?lIutPfNwJ$)rTzC;ndh;fdB4Oau^Ukuo9`L;k55Aa zbMCI4Am+QAU@=zM_xToy;Htlz-t^8GoXS~tGa<`sQ8Q6l+2{U%^f%<+H9-bEO|BSQ zL5jgMKwFr3dUpkDcey}%(#fspiNGeI3#_eu(Cm$CnQ6?oNUN#f>21h%yY-wUquO{Ys}r&*0Nq;y($L>Mos5_bY&_4bCiF4}EM*zwfeK^mdz^l6tv zho!P$g}wFLdHc#KGGs|Mf~@jc)d?)x{< zm2*iDq0_v&@^;S+aH?K+=luR&x`NZ@R^E>%F5D3}5T_n1EV8>l>0>m-OcDxcdot4_Tso zE+?giEQ@rlqXs0O4ZZKBX`*3H_RWCsdOE~NKyQY{zx?``vP5uFiqHpA6p5xW4q#!W zgZV9p?lrpW{iGVun)%cst48&5^Jf|Pl22oLP7#3(nCqver_X`qq^2c}a=3PBmkdNN z|43$Six-xcAYUwgdP=-b!LX!6s7g3CzA(ssZ9?ai?`aX~Hw1S&>dVRqpl_ECPc!s>$CU1gVQx`Plv?Ak`-P+D|=R zOStGcUPvg9?J;`9xJ?h=)iI{#?rII!V%Pc&tsTd~t(D>S{d04R;_mKonF9WUtk_%+~ zKNZ#mcU8Z68NN09nAel8}9>*l~W3qnHYWPs&&PN`JpF*$A=%W|8Iu1Amk$ukSn{zPvy7z5%

%NVrBjzN_Ws++N%2vNd0<%{qwn+rp7C}$udW-M{wv-pf z;0b)*0$y4|G9>r#^8-BI?oXbMwk?!MI16!$3MuJk#IBsoox|l!(-M6XmMwl%?!oaa zHLh&_J9>f31hVpup8z;2e(qnFFl){Pgv7S7 ztBKjU)5f1k`}OC`(!$qxIq&JJul_3HKljp)dVC0+ykGas+1d5C^r7S+5EJT&vAYf>M}aNcW-eiD$FnNbN&ZuDiP;l4b2rs8g+*h%F&a9k z8fhDqx)LHf_dwQZ`%>Sg7OScRn?64CU?{5Hjqrp4km%b5XyZm$Z6b>Cceq_i8^1zQg3HojJMLH`EeM*I00Ptd*O9HUdOiDw>R`n(Z7!G4^RX zpP9b?nIAjR+M680>aGr!t)oAbGD+|qX8)tI;NAB@^%^HKqq#8~d=6iZ{zn9F+{k?h zEd6%bE}$?awAuExWNtd$C9Pkc>Bz+U`zHA@$}lhaS!2_VGR%kN6y0$kQgbU;i^$=k#|%h_}*UIBP5C*A&#=X^o*J;3kA|B-K`PfHV_L zaW;@`aD5QG9_reY$_Zc7Hsl^tTHIDrN_u$BkkQY`FpfYOD8xK{g4{H47ovT7hyM`T z$<06CD@nI-_ebeggsCCE;NCBY>4@9s{Pf9#Qw;2+uCGn< zd@}t9AyG;zg>@|76{ka)0v=Ynm&tA?!XZdmCYRzf7d8sDz?llE?m)Y!ZHQ9;wt%*- zX>WG(1HRwOa60=*GBqlf9g+3^GE8^Nic6_w3-ow;u|ljFy&jOJdy#%ToayKH`f zFx756M3YPI(Ey_?K{T#{q}JmBo02P>z<&@XFyF<*9ug$JaVMP6^GxHds}1Dbh9LR_ z<03bYQ)b(8L1seKj)S0nS>2}bROJ82rtJJSI>pvlDx3B; z${70+znydr0-f>edBKjHf+&v^nxS-%)=qA>PMk%u>Ehopa}P{f<$LAdWLe4k+a;2_ zP2cOf^HFWB2Q=c!UKDKfYER224#8GThEgyUsC+M8Cyu%a#%;e=g2&hKY{lp*s1D0? z`{H_?)(6*#%*8?a*Qw%9Rv~BJPcny5_CYShHfYSK%?h_l<;4fp0O2@j`7QgT$G(-z zlK@~Z;j%& zB%f5~;8A}v3Lu%7qrvyitcjbiuSgVN|2*`|Fw$TFb>x=iwC8k}u=VBV;j*B>Igwu*M#tRrxO}E}&O|%_trv9RYQpTP`GGM0OLMABMNhHI z6&l^fO8(Q)v5{z#SPf3getXvUPEe*C64z#1pw>wsQ+=Tp|Ks27tcuWr)0=|oL38lv zJ+0qbO+(aN0f!w9R2_{`QG21b&|>bZRnGrb6LP-F=0`d4#+`j5)vEZBPwrH{69l$& z2@mgF2q85}b*M08c}lT|ZQ+2HtaD_n1EC)mKu^G^q3k&XSL!Gkw7GX1;62Yap=#Bl z)<1T`f3}gI9O_2d7!Ei0 z*USC~@?m8wWtcQ|%#^YUf^J0mgE?*serOs+GHtCH#d*lfm0|D&;d^D->_XyMVp_HaBb3VJ;#?{H1GTb)|UviT=!)nAsu?+qglTPXXjkK{u>wlbiulezay# zAK&i3pKmYLR&#?RNZ!xvv8db>HAlfM$v=X}xca(%EL}OJN6>ho`zatEEY>VHE9mLk zsn*ZU6{H;6oaup#45~X`^y_lkHEyGkfy_^w>NJcJUSzGAL%#y3Np!^x;*la!oRBxMhhGa@L%w;7i+O{?O#9r!8xLQ z<__PVKXTS4GBE>rdRMy7ho+4$Ig35PfiQ0_!f3=}B>K9uB7M{e(wzI5&X#b##d%xa zNE(`Hj90Pf)oC!}Gw=>ss*ks?J!2u+$I zRk{@E_yW>iKw2oFh2Ek;x(X8Mgx(R5CM5I{ilJkuf)pWA4Mn6#36T$mLV$6IBq9fQfYXe8s})YqFW}>K9Hrt$&AL2;RM}BIUH-S+ujw zg1k^l&&`r9{6VsL8smWk`FHO1=DM1?ceRUKbxorN(nPn|+8Kuxe~LrH)Zmc&9m?xX z4k=0a4m?7m#4HLnANWgtySINNl5N|@7+6!;@=Yb8J+{ubT=X~)I!22YH=Lmg7n_l4 zD`y0al~XF+Fg&D(TX6aYXB-UFhRC&_IIgphnx1I*6Dk8LHR;Tm^1i?JFuC<*B~$s^ zV2-%+(-C05rn8DRe6%_Hz5O<3TI$7k7|6H|@4vhGJlFdWpd`J#ylzK+mJYj)kMdHt z_~fv9Ak0a4xu~ZEUN%b&?%jK72Hk#a=^R?U+g(s`@v5gmn^zCH^`{)jDvK z0m5ar*a!6r&arT);hteUw%X69*nNQM-r!-f0A;N|@!*?u^$uEj(zb;3O&{jilsM`# zQy^DY^LO?z#un3vG9LSMwJvP8AX^K`>4nmJG~d+?wBtSsz{#VzIOR_NNK%$qJJp`kYGbB`_YS|`b!JOz5VYQ>ErC*%)0S`=)=*zi9&sy2L_SM@ewZBh z^GH#AiSvTp9X(->B0G;{Qv%8H$!9%Sjum=ng~9okhrLjirx7-hedS0C@`>uqR!|m- zv%cxW$5rF%NI$I|Q?UYs&RjCT=mEC)%g;maL)YFGi%44$z5jkO^iUY>~Z1eHD~hmpmVro?1KQ2j(!7jpe_-y?3G{nUZ4 zhRF*)vlX{<&H%Vg9#oejGQ{G5z_oc=>05}dzHgDnf#yd|U@muag@V0?Ai3fX=h*|7 z9>gP`Io}KzX<8Qt)5|ug%{yvb1Hf2^7H5edg2`5f#=f;3|WUxpc zQQ89!f1&N!<>Vi`_txR`xE$+~ULp{Fl$uh(a>KKYka&UhVq{}ci@e-AEeuxFTM4@I zPZ(EOqs)@!3g{oZ4yXNy_fs11Wt;G0`rXAf{o9i zq=EKl#t@Ekw|$zRi{bk8h7X+u&4FfR0^5_o6F|EjGI)94TbmuLj<3?cJr%3OEWei>ow^~ZC( z_^Yymd&MkSg*^jKXFrD7KK;I*pN%^oTe>5lSJBJ4|3jNwL;$rI8=t%-(S2>}{DTBe z#Ce&yh#^Mn9zbq`W&Wcjc#Lt!S`_J0oj3aiB@fX7JSds;e4~E-IiJjsEjQnecx9Gx z%PQqr#h~Mg*t)00FQQ$jQi7@!E3qS=R9O~JYVYGym?5P6zjOM;D zaR|CH-*q_MJ_Bc&zu0}98rX2A*8EBnsn^Y=h(ljHEzr18G zkSik72Hf?~t;0U9mU_3{1DvEHw{Wy8oNA}ME$Q61P5Ueo-5J{5!|$$&4+?SXz^1lL z@qe+Te`-2WfmA^4l5Ha*t^L&hl6+h`zx^gm_1;hlE;IT0a5b%AdXXoS0?YJ(?B?-J znLBCM>`i{9rQPF3T6d<_sxj?43aV7e9UoywTED&$TOA3)1BAXJfXAWO;aNbjS=WhE zo|PeSBi^y(aF*Wy^MYZIXhWeA(v1Hae1Khglv;1+!euhgB-*a9>XRVmrSYT`@U|?g z#b=GIUwD%rWec8X+-MoK+0>_wX3ih`7UEQU3+Y*x!D5Do9!O71oZeS z4Wzg}Fq_7DDZd3c=rDGl=#cGpqv*^uv<2Nsx)BJ^l{<~RGKUmmn?)IPiGqwOc+Gw^ z=AARx*0x@~3@Q?Es3o13z9p@kEq7o$MDggYRT?5`8FjgzNEKVquQCFzW_#$?StOsh{^7KU49c+>xUZoy+QIK3=+`CEG9*S zwE0e(2s#~=uwgI02#f1&fm8Gqx1$7TKK#7lpNrsbvdU7m?EsG3OS>*JlILDMdvvK_ zt8KY?z~oUOA0xu|xsg}zU`KZLSgmFU149GW(XEXUK0?_59BI6(W9*EC{q4@AkVrk3 zXx*3aIbfEV!Fz~Bh{&@Z#O^xvAo0gf7kGQ{! zR)JIfbIVV}g|1VsB`Ko~7&~^Zc83jdSgLmmb=T3ThT#qJKk4i?n754f-i}4uz%Bt|G|HhlD#kY|NKW; z`TKwTuYaUV{?Gq%O%@4s(O{qoE-I1y#3Wu;HaZ$}PWiVUr)>Y^#|lDgF^x)g&H+#I z&@OQT@L_3>5J^mk19x5!!@7zbhZkKFeNnl_`#eH{hkB0lJqs|&Jy`JI&@~u!7A5t~ z0?LovGUeOBNq1sWE1*{*Evdevkz2P|3cphpWq0AbpEmp5eUBKfZhC%a%{%RQWMtDM z*4a(U;3*l>5Mmvi^Ghu72QyBZqzjTpvN5rL~3t}1ht@jf%{ c;aA|kz#k=lX5T;3aDR&YN#IWc|1$~v3zpTaNdN!< diff --git a/vendor/bundle/ruby/2.2.0/cache/coffee-script-2.4.1.gem b/vendor/bundle/ruby/2.2.0/cache/coffee-script-2.4.1.gem deleted file mode 100644 index 7e4066d154ea10afb712728aedc0b541c6ceb05a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6656 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 diff --git a/vendor/bundle/ruby/2.2.0/cache/execjs-2.5.2.gem b/vendor/bundle/ruby/2.2.0/cache/execjs-2.5.2.gem deleted file mode 100644 index c5eb409f4a250f269d5a72f025735e62314f53b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16896 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 diff --git a/vendor/bundle/ruby/2.2.0/cache/ffi-1.9.8.gem b/vendor/bundle/ruby/2.2.0/cache/ffi-1.9.8.gem deleted file mode 100644 index ae4a6141cabf4b17a62341a13600aae1faeb6cae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 881152 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 z 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

TxKX< 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

^JHqIJ|n{q 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

|P@;t2xOj8?GAvfpDmWEW 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 diff --git a/vendor/bundle/ruby/2.2.0/cache/guides_style_18f-0.0.1.gem b/vendor/bundle/ruby/2.2.0/cache/guides_style_18f-0.0.1.gem deleted file mode 100644 index ebcae6a1153d1d8544a4af0940c19adc5704d468..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39936 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 E0X<3~t^fc4 diff --git a/vendor/bundle/ruby/2.2.0/cache/hitimes-1.2.2.gem b/vendor/bundle/ruby/2.2.0/cache/hitimes-1.2.2.gem deleted file mode 100644 index 3a4d09a19dcce22810c9be9e3e68eed012c3119b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32256 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 p(kzQ_YW~u1-x`@SHe)~y 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 F@LwG4d8q&Z diff --git a/vendor/bundle/ruby/2.2.0/cache/jekyll-2.5.3.gem b/vendor/bundle/ruby/2.2.0/cache/jekyll-2.5.3.gem deleted file mode 100644 index 99c628210c978dc975712391bdd4152da0ef78ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58368 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 L{~+)`j=;YGy8%6M diff --git a/vendor/bundle/ruby/2.2.0/cache/jekyll-coffeescript-1.0.1.gem b/vendor/bundle/ruby/2.2.0/cache/jekyll-coffeescript-1.0.1.gem deleted file mode 100644 index 7856fcbfe11c8c6faa35d7b6e2e5256d03718daf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4608 zcmc~zElEsCEJ@T$uVSDTFaQD*6B7my4Fu@4p`nQxgQ1a$fq}W9fw_?pgMp#3iLo(* zf&r}@glukUaY8f@({lvJcp)zuyWQItIz3l3<=`TX4kyPoKO84+xal+L?OX3Vcc;iL+JE=t?byrnzOFbFYEVAm z&6zi6jL-9&aS3#h-)R=FZnmF6@J9B9p1I}rfgB+NbF(|8i z*_g*%XBxRi@biRE6S7UzykB;>H*@X|s@osB_~RLwc_jGT6cymMf zo}TH)HTYh$Ei}A7OTl!(g2D$5jNdi%c7EFM)MmD$g}@WrlXAaaGj5m@m%OvVJ7Ak+ zvu(z*%X?>@iw@Q(U|(J(X#Z1u<-5f9o?9Pl|H!tPZ?{|iL9^Kx`G$Mbllw2fvOoEq zCAMet9&v#SF{|?I%q+U+zEk`7dDY~jhq9Q$6>c3UZZ+N_y|+O0K*>5Y_v6Ol5fi5t zZIaw~VezEOP08&YvH!ADjhyyoPT|N75Dl1prz9+zmv{YyH&!jjHmj^mS#f*M>4aVT zvZn_IB^WVZ+iWi1(RQG4`-7gk-+ofBoz;5zV^;b!f3Ib@^gOHjQ(MmQUn#u&U#EOk z(b=@l=%%dopG^(P)D)?4x-$8NlnjjxcLevnJDcw4#S$=r?|Zb!Ty zrKT=fxk+@*#Z&R|f!mjMjNbaM=$m0SB=BH!w3aMKAx2O$|rOe|n@(MEUU}<9e;G}@QRFH_V0J-fzB1hC+Bo~$2;AstBqgyaIgF1jmAf> zt1f*z;i%yvj><`%v-^7|H|}WpQgdHHb(ZqSKl>h5*(uge|6=R^v3l;hdD`<`;TZ}1X~c$U6!iu3L(&TIF%>z=bNnz*5){b`F%XmwDo z^;fpjCh0n-G!NAtG-h1&)wg%)su^z2UKyIyv6t-sf4%;Tie|9T&{|9vlbsc`H6 z^NsIs3OxAvEwkkN4+iHAF|%*1TYC2A`9Jj$J`nm1@Zo7;B{s;eGzcpZo z{gOt3P>mk0&;wuFf&&;_1e87IC2u`fai~IRy1{~+ys)Dj$un4u<}Ao~=oA;4Dyqhv z>7FyMtEN$q9$97BlI@M>|3$!ZL&_a7T=bTUwJD7lcHWr^1Lz+em^&r z^Qc;W>8-RYHFoysCXJ&BR&g#SDmH95PuG`CoFxc*+FB;C<|pJDR3bN56I4n*9n z2-;b7e2UlKcfSjE-_?7czrJFB%=-C%JG$KW)YRNx&o)!89wZsy;{#QuR}#e~jfTYMEHq>|2joozMY-&3(4ELRzpHLPIqx%X;g zx%5Y`MVFmLZduKm#y^2YPk(hnvTW;}pa9=jQYpP+C*B;-zVT&)#oj9~G#2G3{)*eI zD)4RHm;KdVl0IAejkdp>$(s~>@%Ndeh{a;bzONLY_e{#Ywy|x7?d4cO$75b6S2=2m zbnS^wh?;w1XTXMY(a$D`niL&QD42TjdHJcbpN!S7wp?1oNQ1x~HF7irMnhmU1O{;k F0004K#Tx(s diff --git a/vendor/bundle/ruby/2.2.0/cache/jekyll-gist-1.2.1.gem b/vendor/bundle/ruby/2.2.0/cache/jekyll-gist-1.2.1.gem deleted file mode 100644 index 93af5cb08dd178ec2f16b305bc1627c41043750a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8192 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 diff --git a/vendor/bundle/ruby/2.2.0/cache/jekyll-paginate-1.1.0.gem b/vendor/bundle/ruby/2.2.0/cache/jekyll-paginate-1.1.0.gem deleted file mode 100644 index 9c7111c57a3bd9a0def9ba968786c055ca4f107f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11776 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 Njlkas{7*vQe*totbj|<( diff --git a/vendor/bundle/ruby/2.2.0/cache/jekyll-sass-converter-1.3.0.gem b/vendor/bundle/ruby/2.2.0/cache/jekyll-sass-converter-1.3.0.gem deleted file mode 100644 index 0ee1b77606b67eca7088d79a8fbbc81d02dd64f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5632 zcmeH~c{~){8plaOq)6AkHJ0pyF@!96WoM*!$UYg_#%^Yqco7Kkogj_r9NdJ^wuCe9q^b^PJx~=lh)F=^Oxq!vbKkE*P4h zWx($S0)c3L_uuWPmzP%p(a0-+K=Sg+ATUsw1}Lux0x8i50e@CNe;gO-9{}_F9unHs z*%|T2h9l+w)c&uv{aDqY2c0cmQ3A#^EPmfXHxo@QoIXgz0`=V|PI%O42 zjtB_X$}lzo2H(F`^e#@kGY^I!g@~(}E`#APIe5fJTD^h?YqbleuZ&V6HT>*q-y(v} zTr5k+bJw|RcSLch>w82`^KjMQn=^dg>c4&-)^mnPlQ`8*U>z;*{0fVOyfVk-xwx5H zx3x5@_PE;W1ak7Mr~{ZnTE^M=>Z=B|Q)d_a#rdtp^FV0<@iXa+Rd&($jK(%+#jk%3 z;TqTRb>?=uH8Ldu8x zh;%Uc*`o5VKQe634|=H4pyN-kj7QXgcR4M_TQri~+tW8j0~-P<{$X2A6$i}tvvb3< zbNf%onns(D_{86wyZa9uUMpaRF9c4*c`CR8$BK4Jm^Zi2f{{Wnte`i1*!X z_hBrGModd8*f`)kc_+Ca%lS~izv9zM6NOs`hY()hZWz~Av1G2VXXj8 zf8Vu%Y@VA@Z%Yrn$?LX!i%IIkCR%N%Wcl*v$Ae=zZ~d+PJ7v3uTrGKzfIXhW8anCFP-#K!P=NWZBH4Pq2y- z@$T8Ara(f8Q}g}y+25Fp2LV<3`q=*KrLt^?{KSy0ot_Y}gxR`i-;*WfjF|0n(kxY| zGecd%x#G6MC^|lR*B4jiHreb&wk&w=G=x{lZ;X`aeC5QE5~!IUG{aa|XGux|(0$Fa zdwLOcR6)WgA<;(f1x>S1%nrM$)=H*M|9jS74yl`@(&4jc+TnKUyNze4Z-O>@?F`>E z=l3VgCDzFWf#O9m`U)f%5k*0}W7Q1w273p7>EjAp>9^GCWC>=ls4%`p8(FE9q~2Ui znwKUUzX5)3DMEo4r%yl=1LVvXzi9J(1kxa<$li;G`)_X4eRxeW- zwKl!663a`o7X-nU0apl;`3Z&+jnU5W)(VnDQ|M(cRP zH=kFl0df++-uK=dI^&YyD^$hwx8QYYTvP` zB0xVCJ z!dPsX6!AP-%Y3{WEj2ocUn)Zbx{ViWf)4{v>7MbyGD%OGrr5;n4j>KdZ5Zh`ZieBn zy?+c@hblH~lUT7RSL|*^P3Xz*Y@$->XiV_*Y&3j-2B?nb_$dlFxjH*}_#-|2WrJXz zh@bNc`2B12Z~lKkki627{0{=lALsv{vfoDs{gMBjlhi6Wv>0`_ZnhyDrSWbWa*B#* z`h$^H8+)^PCU@bj2XhxSRDYOQ$@n+kwZ zdVYKjPOWuLBLjUvAveb6l$+u{0aDA?9$60*b_<>Qq$(C#!n+hICzpRE;;r$mpqF)) z-PTUxk}u^z#(U%dm8pE*UIi=RL7NwMu3EJ*7U=efFfU~btU4CNS?^Z))}}H-d_6?R zDpV!~EIk?AakA7dV&ps5Hm*V+D>CI9A|)T7iE6aKbV6 diff --git a/vendor/bundle/ruby/2.2.0/cache/jekyll-watch-1.2.1.gem b/vendor/bundle/ruby/2.2.0/cache/jekyll-watch-1.2.1.gem deleted file mode 100644 index d655c5ce4734217b072fc86d47052619067a6480..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5632 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�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

3s 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 CvLkT- diff --git a/vendor/bundle/ruby/2.2.0/cache/liquid-2.6.2.gem b/vendor/bundle/ruby/2.2.0/cache/liquid-2.6.2.gem deleted file mode 100644 index b054548b1c290faef2624526575b0abd14735221..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46592 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 diff --git a/vendor/bundle/ruby/2.2.0/cache/listen-2.10.0.gem b/vendor/bundle/ruby/2.2.0/cache/listen-2.10.0.gem deleted file mode 100644 index 61a9eabf6e3e0c87b98252368ee0271116a414fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26112 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 diff --git a/vendor/bundle/ruby/2.2.0/cache/mercenary-0.3.5.gem b/vendor/bundle/ruby/2.2.0/cache/mercenary-0.3.5.gem deleted file mode 100644 index cea99d059cf719a4bab5f8207e97ff11f29f06ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16896 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 diff --git a/vendor/bundle/ruby/2.2.0/cache/pygments.rb-0.6.3.gem b/vendor/bundle/ruby/2.2.0/cache/pygments.rb-0.6.3.gem deleted file mode 100644 index 2ed06d04ae121e220eae0af5cc820baf1c21fa00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1892352 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 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 *YfBKQpFfkS%8He4yREvE(ED`tTZ z8b&6dki~~A_^9{XQSfCEoXTKZ8_8T#?sJLLpu&phe+iPE+X~wJ+E6a`F!zUxNT;18 zT{8q~B)GzTKx8;^O3d>ExeT>TZ5* z{(xt>IywhVVW%O1?}uq%G#7M;?8S)sH3NM~Olo0x*S1Ea*IEjoDQW(4_@y#_IVJAHl+ARbmA$rSLtK}m#UZ{#2^3tfVbKT70&`47UKVC9M^5! zEq}kcwDnK~qjXCTBlobZ`el-=M&v6)80F;VpcBSAP&7$){dE|1;i5?1 zUL>8$H)7`=u7w^fr@E0di#&xDr6Q@!W}7y**bFuVXI+-P7{TG&wH*G0Ul^zLNP&gO zMoVn!3C%v5Er;cijzM|o`txNR4ojh+>=Xllg#tbWN;WAmP;wm~FNe`6BsOWA!bC}Q z$sM6sUWr^$L@;-mXaa-ybg0JDUAYk=O3~FQuN9vpf@x89B;VP>fiRm4_fVKnt=Fb) z^VN9rL>8&=35IckI1rOU3$EbWd`+YUCt^rz&z@5)KibJiMEloXtcoVGTfX*UMLZpe zv%?S+VMJoU*BgyB>D7y*5^x#go{ooj*s$49C z>G4cFR2G!;ix4c!z0f#fOeU_M>Mk2f?={chHjvWX=CmqEA_C@nIBt#z4#8?$2!mYh{mhOx|mP38ID`Wu1{J>kY zoOT?G5kq2M3Bd67b|>&6ViUAPF8AWG6@>9AS=%I6^tK&BGb9~ zdA?3yl3$@$5BL)C6pyFgpV=1|h`bgf*N#hk+}y(+FBvFn^p~SHI!{BvY$GW@=;8ut ze2@zKpp@Ii3vgtE`eO0$LN>vLzqlx}et_vZJXsnvjvwXmAVx%1jt(4xC1gVRCv`5J zKdwdf?tlf82bDv=f6EO(>(B-+`tnjgoLbjL3|(>nE_gE3nmmWdb`YhK_9N{Qxwl}r z$nrF#I&0)hm4OZXi8WI3pYb__1{v@>nDK(JJ)r9lS`Ik%bPb;y(5BQ{Xt08nafLZa zsJdeT$1AK3=wNCr`f8E(_X2l-=kqaV?2@go^J1rxCR^;ldUUi!2bwx{{3rfB7~+R* zS8V2in|%11D>oDq`jrEa7#!nRnBKC6krun?IJV#PFpw3ZSSaTa;Vj_|MA={%9!o*6 z&6tX*grLoXWD5Y;1ts!hh&j>4$WBr?f6}F)y&)`}cYM==60yQvjkPeB8(xBYWoX+V z!o!$(n07~5_W=s`8GaB3GqO^I!Vk`+H_O+aK8ueV$fTCc?Gv{R52$z=9aEvUYw>Xa z9ya7nfkizKkvL_&g*zzM6z9PkDoj7X^tbTD44MhjhB6g7^dy@gX$#9G5uxRpAVLfy z@I*L(i}DG{`$If}ea<0>PV|JH=-N{e1f+Nz%)Ar9o;-S_x7z{j!~@OX&J1qMc!D>s zM4e&2SV+wFvABr)V;n?fMJqs6c&~V0bCf@A@6E|su9TVlJyF>|B^_^kUvfqJLC=! zFQc~97?^$slrHcp&m2rx3sD8O2Ry;Ki+gcVQGoFN?S(|FS9<)~4hEKkXNw%4@Fwz` zIRxBb%|Ka@5DECp0^N((djUrcfr>2oi|gcI z0LKyf7O{cq*bR?&vyDZ3A*`E2!5u8=#H1sR zTvdP&6V}5;9K^i{Lk4ovN5TbfgPE+GC}5~Xx-VQsO7h6+Z1nSm#qI)al0^0r4aZLx z@)<;adU!(g0k1O84|xfT!-Ma^KO?h@tSBaB3y}UqN!sqQ_9bo4fH?Ggt}`z#Xas)1 zmJZe;fnmixkRCqrMB5}q)DKW$=(swX!K2W6bW9c$1sMDkyy0dQq&1=Vdkad4d)e zF5-F!D;jZ)BEq12>>4=418|73W*Ek^vB+ZEi}zx=dgHqwiPTj<)2>A9@N7Z&T>NP3 zg5<3sX@I{Z+`bo#CX%l&eg~c z{u{nSB8Cs6>&aY|c;h?HHW87CXtOBV3{B=#qCrj?s1u!wmn1~w@IHD}qtF`_$O=nC z#c`%MYvyE&zBvevbz|hK$bR55J95}F6Jf&G;mEXff6)yrmYP;{z*ELq%Bcl27ainI zfL^01hgGGu-?V_v=vI^vQ1x+5-C@ghG+Dy1M;udNTr%?I+2P_x*oWP*hG2*#Rudn;tlg6mD$|F}np##wg#Fr+7MjZt+se z6A7-ra0AE#Q`<7Q$Y!+tXvBjd2TR7Vpsz57L`F6SZ>||b)0ltiJ5Jm|oU58Be&L0Q zK=N5>-b#vt3wGv&D;2_zti*7?E`d8979h>UcYAs4B4+P-l=HOP$8)agSe8uS0V6#a zFch(w9exgslHg3*L+AOibUu%aOlpA67$$mz;BZZt$ho?>SUgSyEVIGPN^yg6XoN6) zbln3c)UI?3!#haHSgwM)@=*7HsKH$$%!QO~{naN=7x{^~=mbpC-V~79=wdLetqUDn z$->(s`2rV|6~Xu1ywv1U_HpQh!hGnqfS&GR(a=z>mGnG?ZxkC!W2^td6Qb;6B z&{M0qt%u5fMC^x~TbYgJL}%63REnDtoBFs8cH0UNe+Q0f<9}46Ah}r&$Wy3_1Kqs* z?LRxr9kGqqmh-hlbd7}+{YzeUAvUn-l8bSlZI1+q;!4R}u%kgDf0A{l1pgB8B!8K4 zO-B@s;EJt=rf(EG3q_UkC^OF}Ct6<&X`Ms?AYOPvKAFCtQa<82^Dz3xc_eHS9xlK& zxVZQMh~yP|mUJw$#a09OZ$K--eK`>Bg3=asUguuyS^|fAQ8=7{=7vao z>^gKWS-jnE`jRDM(J7!f-W{h8dEANR7YGUZN3+&T3eOYt&5vvn$2=}Thg2{4Sme2T zTyzQVUEWs`4zfr*;NQ`12ZaQ<)dgd`2R8#mOne2MJO)q9!_6;GHsR)Yx@`@m6Z{!& zaLwZ)IocKP5!*&d^&`xdPL=I33%5}s^EfJxCD4iJvkkmCBo3Cauv|A+&tVEQ?T5%Q zJSju2WjUA}MInlrdR@H3SL^GMfh961;C1Rnv^|Nte$*F%lQ3_RwN~e1CQ4Lgov+g* z9OBKe2^uC8i~utS&wx^Zm~VWrzTWnt<71pguZb%8W(aLVVj^gKfPKW*y9f&pfwhq2 zOD`<&74pnQ+w(|%N7_w*5zP&R9G&I@o519$^R%y+#s;lYGNl;#9}KtLJ-*1qA89HJ zC6G1%E6E#`*iV=mL;-w{*7QOK1PkRTQsU%o^US6&R{-8OqW7v{E>eNJi=^IomZNmB z_Ke6{la;R6n#s)ajv|((x%PLLexXsw8O*q;(AL1|~Pk#J-(W zklSz9frTlu8`wOR!;X@ph#MEMNZ-PRw2i<6g`nZU){aKRq=Jih0}Mn0zc&8R@prN7 zi@LUl(xRsIfQYXsClml{ahr=u5?;JVOPN&11wlf`eQ67vEay0dJ)Q0xDWJtS7fBX! zLN$|dBn2G^Ear2pGUjWK8er=@qMH8 zwMc9T&pA`jRO%uuJQ7t-@_5u31N2FUK=NX946o!AM(iCPRl>}p7A937d_d$_QzTq0 zq9jsB(E?GN0)#4jIphh_1B>!+Lo&f~F9VW=tlq7|>?u>1GSMa9fi^LML0xMwmge2$ zR4*JrgmB|zhlY-OM7XOVXv92JHYL>Z@Lg20g$O&SN^jmvcYwfl7CN~SzF%bHPA-#S|$#tTf>5zJ-;0ELcBCXoGyX_;*)h=-7 z6k;7DX^6W?DnB1kR_^_{dtDz zdbZ}ed#1H}H>sB+6Qu`Q&twA<7e6t^=tVvc#~NLqpE6@XpC5E6M;krm3c$2aJV}+B>2ZcCPH-0^@{QbX zHrat88dQs&hnpvI1j1Z5A!CL7tVl-*qc|yUd4!Ff;toj4S>YlLRFt;bA8&nvS^s!L6r~jdIlTzp0R)CJbR_m5D+CnI zNz=`Pyn;DnjK5R>89}XUZh&es-RZlZz)@ zz@wB#)a`75B!WmI>nJLk#2T^@XV$O}_f;c)(PXnc97fE$zZB;;aP8h3Gq(eeSW{zVzcN z93o6XxdfiKi#TS1-b^++P!91^=cPc-BS!8iH+OVcx0`uv0p!zEHKS(mskscXL?NMZ zB6OEzoL?xtKXm~pAxbwbH&1u0fxi`c$K5PXx1SwDX6U!s+0M&- z*80?pf@s5SByfSm%i0;tWu$--|J-Q*%V*B}KXkR#aQeo$-<8L&@BdgMC9_WYhxp4S6kAqG7yOgO#KSz?sm!&d7v9Qr!A*0P^}@^4v_6q z)^3O|CW%F0)C6KIn7YMC4rWfMgDhocB++`hBp^ee1jG9*CFUvtv{FoSfLsFdmigab zi0N(9GtFEejwBRw5h)$aH9#MLON~=Jp4zrI>#z_LEp210v4Mt(nW_;E3%(l~8En;7 z$EjmCnPW|~a9A}1Lvtf-O)V3wmVvH14zw9neRc3w-^56Jlc@=4L`?ju#vmp?@`I|r zITp9g&{K6YU|VM=WkDPTvG;tfi`}I};_7ftfze2o{|ZB6brFtE;WL zNf!q*LO`l(8{yPUAe!lKYJhQ|c)DUt#)ddGZSV!~0tc|D8kvic(lo|xF$ICZk63k8 zJylHrP3R9e0;)vK)Ci{siwxLcY`V$VMBBvF1c%i$Fi=PMY>YG73I=^+MXauYF~TfU zW1JY1x~hpPk}*gEa0>hkzHc%$)<$@yt#5)eGBPzZ(KgT*2Gwf@xB|+k3Zkkb%r(%5 zP(d5P85o(vL?I6l-iu+)v~b|P5#%SrDOJbpQRcRZ;0NO~lpz=YUrU+zMMW9qn$XAL6D~41gR$BwBs=iel7Mm0p zRK2k_shJ=wQ_~```~R3gG3WfRr>d{5fipIdaB}?}dHlirzeWm7_A}>yxwUI#|C#^) zj)$~DLSYhNBEOnC8%Sj8)zpd=>4rEgNm87W2TTmq4X}3pmL7JVUi;u4FLyf|FCg4| z!wY)QG(3^pyhP^s1v*L2^`3lSyvYBpuJ>Q@%-#P<)%=_C_#^p$-4FNw$*ozt=AZum zcRVYZR!;Y7GMfxD8g&$puNn%|j80!%nWA zSbhb531lC&n}@_cD^EuWD{BwB%K*(Nx8EE z-p_OJAlB2}%Wlr7NUD}((>(|*?u0D3+rlrl$Zg_IQ#&9fQJa;dC4dEwjfCL=uz6T4 z5*h%OoQgXYXWA?_BOYatsg0F06Z|1tZzq?j+r!}2WQ0)^{9>9X4%9PocY729=}-Hq zI+1Ynba5s{gW&-;?LlQ=C9vX%0ZR~WEVdEEii7-YuxQ)^0a($wg1P;PV29=i!$dC3 z+*Juvu$(F{$|qzpmbCM=g6pqna{_P4G0@K?4M;fTA!dC3t-j z>8=C68D|)hw^OK)ywc$kwG-mrfu2S}c~B9uKWggaSoGKlD7Z_Y8xzB1JJmwelF=Z>6>447Ysf}|7M1N#b)zzJW2n4nT zQaZV4!m!(Ty4wMM0HL0oFzKtXFnBo~TNn#18;FNGJjWXWgB&~R3bzz{IKqWa^cXd7 zCwDhj#4iT&bt;Fc)_wYK=(K~nq4Q70#-d2jhwO5U zo^|64!=nCdPz$AuLk3O}XF4D99M>1W2{~6Q-aEkiyIno7^~l z6ojIA&~**-XJ6{MU8M8H4>x*YhGJl-O| z31h{r(J@ItXvSP3JR>$@Awvs2RrXDY=@Xum?BNJ^wNGt3McM}97Xu1CI~55~PSSWb zXIaQ&-7kwn3iR)nh?Ed4)b!XmXSpbb&R-U7I^16>9eOeGPf~)#LkHYBi$)rYe_1Rv z%&&{2i1?V22PKmCDbngFM|)TpILgmi6lD1SWkFzwf3+CXGYKpNc?S7ulST&bKWx@8 z)L$tO?4n4uX~E>pfPU%W=(cZ4_~D0kX>@GkmvD5PnmwjG&*#b?!a?V%Il+*ov0p+# z!~9hs{QKd7N9b|EBnM|VcmBD-?02;JH5#-CV#txJh##23^gy=~J6BF~M3!^q zzXHc)FBqJ#;vioEEdxEAqy#*f+F25j!^zoA!Jv%j?1~lln5%GqIVI9>fIm>OnUgt) zAoNSlzz~0CC`3{sZx@@@vfyv9k06rFoaI18tzQ-d3GzoBWa^kevLy23oPnf6QI$rZ zAEBy%AUaE1c~V?kMVi!6?UXFa2mz@~7!}JXdYBM}Qb88=1d(GZ5#tc)q=OmT?S-ef z0>b_d#vpK9r!TrexiDLpl#qb<1%&ieH{*oSb)i|wK`BNY1fNQl9Ca424b?UNnA1#9 z#+wrzBK-Xl9HPVhiRL#g0MAttWNDcnt`W{X??FNNm&E`9{!A$-rR%xM0e&a(14_a_ zV+kTj{}ESUpg&WjS(5pjynzA!y&f?o-2bFMz~BB%U-+GDneGcSc`&=oXm21dD9@1| zc1EJ)XtR2P_Mc=j6G`Wp6D3(65)hhce3{kZ;rRat!XT+V&eEjj?4?L*uw*3NYR;08 z^{!v?pA=|z$&m9p$Qs&DrU+70WIQCRWOEOQQwrO!2SswQ*@e*sKahQ4&^rz76yf#J zd(rKcu72ogFH^gpP*-`9Ih?Y2BO2k{c}kM*TJuCl9g;RUw{$|%AAc>Kpn;|tYKLy4 z1KRGCra9wG36H6EAckTiZDyb>KYD!T4;4X5a3+MmX8--E{ofKfLexgm-pbp_#?4g% z{PVBcn15~mmsz_;ZkGSA)Y^4&|M>s?O%E0LZ{tSziNy$Q!eEwycS3-`E6iaG`u?Bi zpXZ9kx+kKnj3%0}29k3sB**MY84Vg*?kS7ATa{(9jfsch>;< z0Ma3m59wV2F3QWB&7k_xbP-TKH;dLw zb)LEp8q0b<;vjMNd{pJD?O0tX#CCbu(|zfcCPU?^;|vqndy;xO+y`xqF5- zVV}JPVeSJu1c{oO`aWG~@*7Ou_d$St1Yjr8@OPRg_yLB)5p6I{Kvw`c0#e5O&+_1B z*kSof`Ixu1>vH$tb(Zyv0sKTQKmb1x;3t4KFr?1Y^L81Na5UE_X06F+mmQz=I=kz4Db(3nXoL7Z4XUKn(qkpRSj`OnRd zlyVJhZ&(c4{-&_Yu%GGB=j_270POkzE8qcp%-=J$<@ zlyc27K#~}=y}@<|=dW^I{`?LjQ13U%;^bn`He^fU=kJgaD6vDH z$^qI5=s2KcT59H6HO`bSW6qvoV}KFhCqkOV0|FcmGagghM?mp^Bw_Cb)B_2;>mH*`Eg7O(#?y}ZJu<@2=61;2;(7F}Z_W8%ec8&{ zGXn6B10q5)CGo%n#ZNE>^}c$cLkEaMIcLK%EeFJcnK@_wlm|RcUVsOmKs)$In2Eic zL?0j#=rSwtj7yfzmET|C!LQ_+lKFI8?YbPrL)$oe#x%U^7P=P zIDII~@<(m*mpq`?+|rIIZwEZ+CH#oJi$w1UEF~}S^TgNut33FnOvk>EzuknZ0lyvK z12kbyqHQDsd?1=Z?900Gd}tg0IA^z|R`u&!s} zCQ&;i0(E&a9*hTnmIuGYzJx)dV=LD){7!%m&;+C%6ol{r@Wq_>9e&l~e+&Dc;sLXq zQajbdXLwlGC|-!WjfA}weg|V>8v#@D49}vm`OokG$~Me%VPD0r(XoT09d7}!1De=1 zi%9$+m~uYHv(m5r9oYXA52%;(x6?g=;{m{l;BB3lrgvl_&{enK=WkH`BOXAR8QN8# zZGkL@m9AQ(+p(Mb1KyH^eKsLHfc4J(0?)lb?ssDUGdy@i&%3;J-lGPfFSL#VtV9w4 z+;1u94S}}q4W3SM!)zXq%LnTn+SQ6pTPbr9+2%T1x!Ms&5XGfp8(G9fPhT+24H?Yn+R0ZukZ|8wo;Z8rUC04>I*9| zs7!kbQ2v_5_N}`)yYW^4AD{_9laO|!MCJp*n6nJeM8p1{#QrlLz;Z)d7?kstQWA+D<7Rv%!wVQW{|@Z4c|f+W!ZL5gpv$|dH1iicXGqBc?Vx!C5a2=c#1B;a zia=fW3ct|G?j4Bp08k(xctWTOpab-@^Ku+{dphiZjtYnfXwvpaB5HA5`^H4i)&=4~ zc^=v!$o=U*ZI2?4)zCizE^&(kGQyxX;`?+<*qaxn=k;Uin!tF_1bEN{a5qg-5d3?T z=23MYEx$k&2Gy6gknzj%SmZcx_H;M`{D6pnCT9`o^YsK4M$RuFd;_3(3~HO+@Hb$e z%>$^5vjbWSXcq}fF`y2*$8}#ZbuYnK@DkvCIY~kA?@{Wy7kvy`IzQs)w#eDT(bKUP z;0HtmG&zeVY`Gdo*qC{{F{qvq3TOxBKWBIN8GcIp6XZR#LqJ#MK_7Sl z>i@;$ECTpnjMCIS@0+Ks`vZPzYU-T**xn8ofZrA12Q*10Hciqcj1C=nnKg7wpqMMw$iCE)T~Ms1w^_{+{t~P8pS& zoxOu5DH+H^&wxDiY=T6S(}eJYfT@0pr!_X6J^sP@4<3|qii(OVe?7Zht0&Og0TBRA zc#+5(B_cwA2euqV{fiiQpxvPu^ZV=$e;NCNHETK;?_~h&PXYF)0B6Gl`bj4EcLRaC zvKCK^)0}Jmn=Su5;$u{3_W}C558#0>zzxZdME-yd03HAu^WuFu#LB!Brupya-2XCm zdQs61n!-YW{RzPSWCEr7Sp@h}TaRC;Go=ea`H@oonMeAhlz&S^S@hfecslR^FM))2 zB7lMdAp!aK=!z~pH?!!!Yj^m|*l7h0KOCz<2iM8DX~+^ zDsar6OaDQ5AhB4l{Rp-f9{_M3B4IuZ=m?;rfR3RA_|u5zpcnj|JoqK{g$DW^^kpS@ zOl=jY+v*9FY5-m`L4MQ{XdV{esYOKojGXp!`_lrk_5kiyJitsKV?IuzlaRQ2CQfm6 z6Hak=;#aUr{th1ey3H%fchHv?;c03g6R2y;iBz?f0DBdQNW7@4A<)&;;O9?cpIz^N z)&_v^U^#38YdoOixk)U8329;C(2>T!9 zjqrejVRd`Z%69yzW!;1z?hg~ENw`CJJ0{NZwNHdDZ=DFkz9obSG~w4QQu|kU@XK{Y zcE?>Eiz_nlEL9H(^Q&@+^QsGojMari`s!jL9pD3PO(~JOrfh`%-kpBxrAyynezb@G znYsDbJYZhYb_Cln2yl;`;q4$o+-H}!LEIDPR=l1F=Wm|4u&Rj=A^03G$+GdU@Bn^? zen1N_bF3?}8mM(}mnY+wR-_UZSELhJEAJB*R6QUvSLFddA;13r9beR%&9{rve* zHp>AN2FM2U*VjXSrgKL?o^mj*eCx|y)PI(*bu zdqoU9r{4QwGm`p z5y)a?!UrrnBp+SE3ztL^R+YvPv1JKF-p5JAW#uWvrR8^tODfU{td*I=i(^9HW9aDM z+FB9@T~jy3pfU|yv-?-|lG*EDP{xNc6ZA{UUC6-xI$%|H|AkdAMnIj9UlML0UKXt* zMv7NM>_mW_7%N*yh?C318}sk{nf(d!0JeE72|M)Aj{!NCuXfSvkS{uomo7d>ka!e9 z6n+#*TvZxNOR$W?xu0NMhc_v&ewb{Pg;TZ3z=aBWQtgX+lt?s_<-eH6+_ z&_@mGn`Z&#EMZ#K!((5g_(x$#P;0ik%3s6XO-L3GvG5_$^qIx$IA5 ze?PJw7sD`rUWL>_hliC4juX}wo*_yXhY=-;FA_xn4_24P5cx~56Zpz*;5iQL z>7b#brCeKs>&ehpj=Z+^JA45s?GDRGJb-=cB%nLARCKkD%g?-z60aVPUQ1#C}~N zhZwI6uy0HwCaR?nlQfbDx3m)QF0%ITsHv#Q`j<8aZBOUvndl#Boipn&dEho|nCnH* z$@3%P@(&R=791lg0v^Z}hCm(=Bp*fKS9)0dm9@3s_00C~6vUwZH?ZAZp{HReb(K8Y z9=EOle_cL@5U-R)Oi)QD-rST*OvK$L-qN~3yuJC_Xo^8h-^LXRQ2#!ULH#!TsA#C} zsUFm9*`Dn*xb=a{m{E>9Q9sw4sGa8zco0Zbd3cPd@bDBtt|$c0Wvbdi_4nBw=i&j` z4+gd~*xr;$<+x0Rp(@!e;M#s&@jf14C)`xMOH5QxCMIbn5^w7y5R-M|MpN{o`_5|| zp~Qcfm4`LQJkg?cXO;urJbUk$=>s?7mK+bFZmtheGyeclE&m8X<>5&@r>6AZX>D;(3dCc*?(4^{U7Clso=KuB+c7Hw={2#-qML5MeF|R$Q{GT zj}~i;XW(a;&yZsrY0_$$WsBdLN(<*JkbNpOl(QBzSt z?9g@$$9=M&cmSZAjLeKhSVjH{?8a3UJnQ)@=osn9{?AaJ-HrM0^M58kvw0woLGeLZ zG<+7pcVyWd%0F-&1N!>IwS*HGRJI}$T-$(h5#-T-tN%Osp_G@QtO#w3&`)s7EK(=^ zMqV?3K7~+bgYq@p2k^gf{{#7+3%N2m@jho1vfhZn-nHmbu6@UxieFb(`XOm&zFeqyK&V*)29ConX{7!YwB z!_bBS5eF~}!T%r{X88yPL-z)Mov zAP;h0Xx_zCXj!H{$?s>DiH4jGIbCu-ZoaAyNI2Mv{p=q^ImT3}0a~MO( zmtram4azqR1IkAX!p9LBl&@qyPcCfx4VCvl+xq@_{{80<&wp`tb8xeCweykK=j!k; z=JCt(U)HXblUuiD*7+||YviQppo9$qp^=9X>I;cQ zE8wyXz4c~Ib<8CE@7lv8sF=^&r)BN|^smK`s4!7iIl)T?Pi;LM!#gTA*2Q!Z(mw0p zx`ej6s)=vQr-uiwayta{PX=^&@yidgrFPPmYhTsM-MsN|^Np-9Chx&b9@Sh?MpVi! zy27ae{yEOudqyL7x#qvM3|!#5R0a5eIOZj!Q#3YXFy7!vJd$TuIt}0h&9+d%` z;Jf`V(^n~a$Kp@PJad%EQ|8i^ZmB1H9jXy^vcD1IVDBCKppc_nUXTLy;REu_`IKz% zp$TT7__^jt8O`*c#a$aaD8%SCckCcV)P3^jd@26S;n7l}_;V+V03XGl5)5n$DgM0t z-;r%^Dck}1wB}Z_PL-{@n@B{<`>(C5IOnr1+9I^X`cP4vfOfp0&~a6IB>e7W#p}CY zF<-OO=M9WpDy@0@lcV+Mq{U+MGraGu`4ort4R%|K6XPd4%u+3-_$)L0l}F9)mgrN* z3PjgE`}9ey-d0L^GJmPsiiJg*!YwQOnBl+u*+`*yuM znB(}a!9Z*Ekkdx}1!tbzl)W5h(C2pXm7Sc9=eJzZ^u_tb!Iur5CY%X-N>fi9AJhy} zI{4W7+vxa-Yio=`)_0u><=_!ZG8H9yb`^U8%DP-Q5&y`NWn_ij5xFZ-Q5{i<;`yzw zyYX8D*p@M$DqYO#kMd=h<(%&|D+~WG>y<~oE(sh{S=ey9Q?fg2p(uy9UHu~S_k5y- zg%cXV7KGPkYvyh7=WRdniFr7t;+sH!;1`GX#YqMiwH4J~vM-mu@KjX7`1}Em?`cWg zH{>k+I`bYVwOjg0cuVYC<>BEWqoPvuX|kA(n(Dk=Brajg5P`U!G=L1O0cDV=SN6Ta zH-33Z;Fm|GtCpFCFga%(vf-+lw*@PlDfUY*PE^WK5wU=y!YEHJo(<#2j0r_ zDGxCQ^g38}G+z!g-d~?7G8D>nrX=&gA=6e7|8CjWuiEnJUiB8UJ4R_38yk;w+8?X$ zPPl%3#nQ7H>Cz;ioacOtFO@FjTiqqC(k>Vl7oQjI^L(33?BLb(tEOMH!?T97i^gTW zSw41U)lOJ`PD&nis%FC1v#!@O z%HH07pdyw2yucQ*r8egUtVq*X+oC5W5}2*$Ef4gBK3x8~#^9mn>7g$tIVS3jFDkLu zM@$Gt_h$Ny9+eh3V6l0FL9oFDgNom{-TY0=Z}tyx2jX8aOf)$XRQ|yI@SQ~m zvkuumj+5_gE*)OT9M{&8KA)Zjv+$gjfUgqY@;dv>SIee{1Vh{Q?6{$%4?{yY#f)lL zJ*XReUk0UF+ge6=adxd7TH3KN%vwFFv-f6F70(f~^nTIU2aDaa5(f6D#4T_8)Z01S zb;4kvwnL3`2}bE~a&o7%v@{PtX()kXW>Ao0d-i090r4Jo;PkW5rjT-J1~*x@vu0Fj z6M18Grz$Lchj8 z;!=H&4h3zl*uhKkl0}}UCpup)$6JoCQTxD{%fEE8)VGWJtVU-(%cgRlJ&o74A2!^$%?dSp4yI=Jk!QcAlSo1}KTd#&MubH2_7b}N}h`W5!_8rU4Z z8dQ+E_<*`!`uEi55)&RSe8*@HGdz_!YwzGNNJlz)PvXYH{M~*-Lz|Pda=&VhKNj?~ zuD#Q-eo_4cUb_>^gBP#eY9t-9e!q2DP>_d+rV~~a)AHCO$r7^r4PxND)tOt9;lsI6Wpc_uBrS|aP_cX8#y?uNjezUIqP!-`Er z`5R&wSw>pwC5*JE!_=-DHuv6f;=0-BWMmq#H|pi3`fJG_eb@8E2C4INvXUk+YJqoB zon4pp8z#b@;5iyK^{B<&p68gqXOHjKIpX(tmCMZ-Um3m#y4DDnV~b;yCZrw?yg%dl zs4K0c&9uGursbj9FQXdV+rgk#aVzgmruXf-ri#uJUqfgPHxgTTVsKZB@OedtD`_^e zYM<9SFK}8TLAS|k`?hUZ+?JfiMgD`nSJQSp2#q|!kCx}!forSZNm=*Kia-WEQ@u1ZCffYxjnclZW%GZeJIQJKR%?n!z z`Uk@RfhZ#*qu$_n@p0$i!`mi%E-Zenche~Pe3ih8)TIaq0)TjMI{spW&OA_&XEn@a zxE`}m<5+_q%-`mJFnj{P5jJrx_vpw$&c6cmQ!mEu{KMX7ZZMx(zRU0diIO+QPu?8IP9Bv_%@&#vTNZipuyj&$6z)HGDga_r@uITOaVbd-;hfwP>O>M32TMfIY#D?11`RaT~G3-Gx^1iEijCXBfa>2>O^sWsT9t#x<6OHfpHCMNc z9A3-c=Sy@faF=&nq$wN!{jhSaN%Y-}>vWQYR?a(PTYSGpnZJ5omZ{Ng-W9WId;dVX zU{74&#G)W243EZnfeQ6^Z{F|}nj>Y{$BNr>E4Ek~3`9$CkMwEI`97?^-k&6CK4M9C zq(U_R0+&jrNS)}%n=e{qb9b-nSH1LIGqrA-xh}-y z);)Ah?nqgm>ivG@{W$jyL4$5OiwXI?TrM|X?Nv%$S9H}Wz}4Im%T+(Tj$P{BWQi%~ zbFQ7w0-YXvywq6ovRgfVK*ZQSC8^=O9#`sHj}M-&yDj`fT#LRF#|Jit*%(so1N~HJ z>6t8^S9g*{6kb46IA;Aug_y*h5>3w)a(9M4>y`0-C&j>)R`Im(dl`FGQOjhGd|lQO zWwS_)y@KCrow7ni8uz5E%UvTMzsLF>_2vNOe0mNeTXFhqdb5Q)ALdF$ytLOeitzVI z6jHL6N`1Mc<+Po1qhqcfm&@nw%HcOgUzUxH1xzx7?s6(vogZ`ox$KOyCL&qdOGqvr+4PTxsVUu^TTpqUL z_^wVp3H5}*+MVl!u0O!>N_;N5C^2BUyQTLbMl$l+*}~9ce6lqKPlv zqxG{#yY*u?Xbci21XaeL*>LX0@Ram_Z+!aHaC6ghTdCmfVkm0Qd0GX0ZG*QDjFxt) z2%pq^b*5mbC%+@(`R)KEsj8^FhJ&fN&Sffb0bg|T{PF(t_t6w|Ca2!ndN%(zy?i(oFOK2=8BJu)ST|i_I19{%Dj2H0th=MxeuF&-`IO}USr*Idd}W2 z4?N=X+-{;9_Af58i{d-v&SvZIDsh{e`9C>tQ4^#eV-epkFnM(O!EgCiAySwpPxr|1 zF^QmJ@l#&xpi*r@+?J8d)_^wx-6D;Sb=FVBI&KZ*gpc{YWX$t-$|^r_Po!__h7U{A zDsF>DKHTE7Q~u-@*AP=tvxWiF{`t+Av#U3{uAC7m9 zYHo;88u{e&?sz!;H7{H9)p7NL1&3B&Xg>Uq5h=jN?jvP*p|C?5?eziOgGOaMva5$a z@qhZH&L=$@mvMi)g>q{4&Zm*_{ddBuzU&{ZFZy<*DKoQvSMU+nqYF4DFivb{$`QWB}p`SNuPryE}!ztG=J$0rvo@4CqT zg}Q}oyM1F%{MKQMy8GKV>qrcKh#v$>(ZR8^3u}6`L@SdcQhHu;`(%L3O*wpIL2D1C zDHnHtGRzgR`N1Bqfm=F)EiLtfLs5Q-alz}w$F0Y%J`6j=#w$hTctlI!*|V{{yEcL( z=vDxF37B1kz6!Q>N+#Ev+$dp-P>&tmFCK0t{4H57Psk%1)Gxy`x-5?5A@-Tfqg zrdX8cxI=`?g`V*4FNpzRp_|@QJ*9rM+tByzD zLoeRYT+Cn3wZJU3mo~+Gd6?Pr3eiG`UaN^*E?ucgMo$_)VpLB3RHKX$0CA?|3!W=?#L|qy;q-IB9 zWZY6la_+@I9ll6*-jQw@s1t{CYcTWIznYBL;(K%LI?Z}>{B==oi|0C#vP}gkA=Q~W z%9~9rOplmF<`H_@^LtwP2(&6*W1RFnhgUD-GBZ?6)W{N zbN-&~?0#h_GHGqAmzCC>*fH9v0D36FI7@?5ody)aZ8C7hK+EID#J=7Hxsa~tUC%>G zMAHtKZ7<(&_T`3-P!S^+^N3qYJIuG4wQXrWz|}uE;^EWavwU3b(8pmmm_LwdOZxUi zWpf-r<<`SbsDrzW^p)I?^Gy`{_a~ za^nH^b$tGPc0jd#M|-5nUgC?T!Q_EX%gi%`rlz2hOzrDgjEecs&GP9vYxUbqgH${! zY&}|BCtlqWAGi}9cy(!*if(J*z)~O+L~T4@mVekGvsv%eG18#CR7;7&y(4_(aOLuV zQx41JjaWVGAC>pX+;iOeK3x0mVD;CJ&nu)ghnj&{ur9Yv{kr(&#`17(?0`bq;Xv^K z-+>FxyC&_}Yov0dG>wz7!4=^S6Tme z8b;`6e{CqGa{xwouwr^$Qj?O#$jv~%ofThc2~J)$15RU$pN#NzK3aJxLb*!*#q z!!q`TY%7jbRMW=xW|fSM4IUdlc4~q_oow|w981GikF#CwcZ4r6@MxU5f+^dIm&0Zv zm-nc5@Q1P2T-)EcE;Y>M9$%e)6a z)`;fSMv`^c_$2eC*O{>3%eb+%o7JA34$U%o zxWQtjQ`V#FHN8y};~I_>No((ga1ak%6tF}eX%!N;dMyGT~RjSiq&Qb|sXX#00uI$A6}Z_Qqg?fe9Zd)|u< zoDC}I@Ob<^d1uv@Xh!5*Dio8%0i1nJheO9ekD$s7I5RbzTr zGbAFl6u(?%IaMW-eyB&siO=j!f+7d^#Xkybt(4$qvc9)VOKixhJP04>q>`bRkagx> z!glH~v7x)k#Wh7Q3yKq%j%Z$TxpXP%Xyuu~2O1q>`@VQ_?!$=LN-g_D`&3p&FTr`; z4j=iV*05V!E}zp+y8PK!b|{})>-_N#s=OP47Pxcgo%}b&#TYtjs!wY;LKoca$H*)c zu#l5<^-&&rV)^-v&*j`#MJt{T@g2RaKsE48YL$5fv&3C&3lE#0t-mv4UbR<9{kDC6 zZ^TBKbj~lXT3*z^aHQMykmS&!>^)t%Vf~Yj-R zJu_6Pq;d62K*vkTH64XDlH(6wuj#;e`fN%}7P;Bj`>@&B`@-OOo>$*Gjf4i8nq8GW zdHSd0o!5KzJU!G28bXmITd?ybyXM86(KcGX&afe^zbmp>??`|SIPP1ozf zwQlsWZAG-Di@K|G8yl*CssiO$smT5OTyb%6l8W}F?E~sUOO8HIaTf#m63f@VU*g@l zLYwVGsnyb8btTEO3j0&n+{Kej^Ut63<*%^j4`-AXSl_b?XgxQLge#r|bVkKi*?xMJI~}t9LCgau!#&NNdH^*48o-_ve4k zetk*rvp!&&yStI23f(c)mUJ72#ml0bo6Tcux|}V)j~=}5)wlHno%stEw%{^)+?H=< z2X>toIQ`hV_Ur{tQ&Zl!r@?G2r@rI(!|NXM51W|YR6g*{MAMw)JcXUwBFrnVRvztxwz7fbcX`XiOENziRBVIxTA|5 zzpp;$`?=L1LoDpEbzO{FRAR&P=O$|XJ~iSG?r8~R+zEZ1n=2m`7nhbFcyPn=xBh*p zwF@qA047^m9a(~Ff15XW_dyzec;&07PoEw)Td5Q+?-mu&mz@0U%^RNn#5L*p+3E=m z!QOgOnayItr#n8{tm8VH;V6^m9FGUhs;;hXzuZg52)kzKrZ8^{QP33t%X3^qO4JHws3Z_d=eE9HTr*MDrE{6l=A9Bs#`3;UWgzi0IcK7S& z919uc`X-sE*w}BiUva}0Pi}jtglpxDxt-e)nzHBWiCzl_-w%?3wU!0=_Vb==-X=>w z30^PxEqnJ>j>}dWZp;?jD{eWM?JUe$(3tVKYbY(^l6d7py#EP1^Jf17=hu(x_iisQ z7_Y`ZNj%Hyt6VC(SMF)HTtMh3;YrG~o)VG1J6^+Fi+tZ`v^A@krAWla=-%Lp4`=GT z88<3L{1hD4wqyQ1=LWBUV?B9w`XZ*LH|)Bb~ zNFM1LIexWwk+eJZ$2{w^>qr~$&#mla=dWiy_WW?Av|GK{L}kW!b9anh(S*;AZ7Q@D z27@18tQaemI}{6emF48Ax-{M4M!HdCP>SF{vR7J`OX4GuXlIknapE|9gl3mHuC-C} z;ITuOCf2C)ZM$>>48QSx>jRfII)2#Ir+R<+S-`0=-qGB zd_OZ6myCqwe=ekAORG~NTvqAW?6YC#Qe_93!TTCr>(&fK?_thbVNjE#+BC-_T76yIOErKDA`Zm{~9_OtB3Fv+)m_r&5uYjGnfxUR^? zy;TwqFPYtFlImc0e=@$kxt^LotU0J)LX_IGl;ae3!2jx*t(K~R2TN5l&OFIKdh2wt z^zoROV#O2EXQc;Kbn2b4le%M~IkWPE#S316CCZ#>MROw%6 zrKD=brE;a4EemikQ|Zrr+~08I)Tz-L2kg+s{*~w7?ZFzg`Rv}kTh}CG_~^k~YgtNK z4?oC%^>FR=KG{Xqf}Dv-Ns6(DUfkBsZDLAoT6v-BX>F~pUbq|>42*9-Pqa|B?;Ol= zP`8kZ{FH0+G$dY#pt$O^!v2T-S&}j)ro8 zfY-k@X58fCK2=Xcobf#V%xx)b5oWJq0~*hW^k#W`4dvWarOT2S+6o%^(4-%C-?8Ey zTSvy8Bz%9^zWGx;{_ZVSHv#OxEiu#V3>ue&-psG@{dYD!yuje-Wx^mIYv56DNwU2h6JNoF_fZyjb+O^?YA=?AH^>LwN2Maqk zum*gBMN~+nm&>tdV@Oe$iU%i*8@`R5Iw_5qi45 zM)FZ^`l0K$X{EDmwkg{zv)JDHYEAmMw~pJ+ZAk;tD?6?(wh=4x+xp72J>5^f-;6We&AUBp`^m%%)J}7+&n@j`zl~vAeV_o z>z2oTC-6accI~-+$0Jo%q5oCzsh)SoCS!`$$<&RRJzRQ>#sBoyz4wB(l=$NvWvbQl zuJz{WgYj9cMp>36Rh^TCg(br~;BIqsb2f9q?loF{FH>Ll;73`mgbCv7qY}dxIoXY0 zMOI*+KM7V<;_E&yknS41Oc02e+r@R4&!-n&!n9WVd}aT4InQ_83p_$58+$!>^zFT! ztRSKNOkIZSrmd8=K1ZiqsIm5W7Fud5sc*QIgw|IKQHf`PrZDKOH}vgOb7x+sY2*ED zW+fYEYN&+yd?yg?Hf1$7v6`Azs9k@0{PM(BP;UL_N4)aJyQ*iWpRbfYqhPaaE8_!cTOJ3cN&l+WuA9*-x^D@z z&tGK!#uD4y}mp1WPwD+UIgxtvndU~~{gQwS)kCxW2 z7Kz$s7;`JH+J1@pH|qMRJ)7AZeAG=A1vo^w+fBYM)MtOay?TQ>^TO6LhBP8ypXFDD z`RjY;ZGV`~bgHyOc;&HU$7EDgBt;5xKy7`M(~>D!!^(JH&#}C7u)$mR8c>(_t*_+| z*DBqz`9qiP1yy_9$_rHjH;ry*GgbgmrqHH>rT(;1_>$Fe^_t;YwqiUi20@8?qU|iL zxNEQ6NHV&;fSH+@5OYZ|SpDec^JQ1hYXCX@L}@!vrv-NUJX`O|M6f;@wAyo5640qZ z&`=$wghwTnl|iC+!!*unCq3Y1q!j{M=S92G!xvyx@t%zjuIN-^Wn9xBnXgdC>+|N( zj%61>v)gptaC5^g@1~HFuK_ZVx}l0*b&lV2+0Hz^()3ZqwK?O2{H`dqCNH+plI(Y_ zg4*X#TZ#eIUdFT5>mzeS2?xi42QIH)rU&Vkk7fjWx-uuRY%r)V=(ZdMBhZ;ZE}iX% zb%HZ%ud45*t&HqAey1;ze>5aXo}ItL&}o&SPqC-D{IY0ccM%nnMaHg%6sAagKJ6eRt)lt-L42HR&NqUy zta_}2R#KykwDij13ZM_V_BHR_wJ!Q*RaMm`*EKfjoO^LtFxPEqxE~Xv=#$}kqy7Fd z(E5R3u~b3hfpc@o$&)8}CUrk+1zxc86XQCof8Y2dd;Algm`}^7uQj&b*%28X?Qu}b zR!;u3MgsWVNbryuki=YFpP0UNSA4h-R77rW?iN8~&evYM9KX4RG~OPG$vJrgIw8DB zA7rGZmXVTr*05Jo@Gkp@wc&Pt@r&c7qU(%ABHV|g8lHHp0^j+=IlT_3-2w_E&<*eK zW_j(%t(_;U z`o_TA`=u&r*m19WQI`^7u{ZTXg?x=$ zqtRq&P(w?5N)HpG(o+n#+HxC?t3EFh0}l)@J`f!7vD5VB;}o;WyNAY{Q+pH}o}2F- zj`8E=kC%3^5ct~u0NlhqgxcenRzgy`K|oTayIV@>RHR$FOHo2VKtNhRx}+r*5QApv z?pk1hr8~~-=leV7{O7fDz3XB#Tjsz7v! zd+)pgGCf-|z*q_g`E&IFs77&>rYu>dsvN2$D3QHB<>@YgB2T(?#_W|8^78WB)Vm8e zRg1`?+*~FwSe~Nt4R_HOWDzq|O*3|M!}^1y!t^E;LWEn#i-mFuD`7k)4NutHFrOEV zW{A~S4QJ_xzAX9eDMAjf;$DwV3eG=rRFxo`gTMXTmYT~)Cu=V%t!+cIQ+FugeC``4CnUuM-bXm}zhqcZ#FR=L=`#V)4#g?mb! zv3~mzcY;}#WM2T$v`<5YVce_|dbZ!X;^lO{D;(CkUoZY-rb8Vhq%y8SU(Jq+?ysSt z&qIqTro76~AyHkOF9h@S7zmBVmkI1FEG%YKEVj@8WN}W=#dkI7(6&>2W{mgKkjJ6 z=Lt^+PuQ6n)(f-sxpDAvB2(NdK{T7FuqCx7S3^%GOj_J;X)Mqi{0T>Uy4_V;ZSJ&h z_MXGgMAr~38lZ%|cbd`IV_aI=aOeikLc871<}H6~*b#(kgb z5yM-}Tv(gm5eUx*uj*uLO}&Q2k$y*dAt$_7h2&LVylU!0;z~X1>(vM96N1T`x^~vg zANnajJRJN|>KKhFalV%GkMS_n;D2prCfO=vVtQhSX`RbYqBQkQcFPgihjvzL32V$EEnlR@g84uO(@Pz<|9zS<|ke zU|*tsJgA(?;y2S-n+o=(@^kJ^)NnN}Qvdwg=E*7w7svh8vn!KZQ|MvAw=!B)A+GC) zZ!mbiA@{@ypFY6VgaqPcJ~Z)*3#NngrSo<+>EliuBR%zWxD&{c>pU7>>0EH9OfkBBT(tTVJ*?d(o z85DJKsXuCT^2ekeUV6XPc-W`#gp=inGvm!v!EVZ*04B?!LOfm;O+x7l_G(+E!_Yp} zqR}(PABDf|c!uKD~WVTDtAap7B9sIBKK<6g{iqxw%aCc3=1W{l+*A zZgR&h)2#?Tta$~lGn@I+dc)Q1RF|gpl*0HbZH}?(Vh}UfqPJB&gjsoXt#iVx&KXF`8Yd@K( zs`fzH!23m}xB3)m?W|2yMV|58+CN#1b`tdjNNP3PH@H8d0mnufk+PftcCE z^qPy&(Md17UzCpj;DL*$zudS3nYjS<{HAx9EwM=X-<$PmyH-1a=3zXnQ;aYf6J||< z$IHnFiPlEvmnsV1OC6N=)N#WdOg(P^hHXSRsxT7SZCx(cM^?EA2ihObOl&vRgoU!K zxi=AnzuBB|tko&1O5pgVS%e|KGQRvrIEg`A%pFG28_#QNZT{xu&^V@-OK~B&X!116 zN61X{>H&5b&djflrpe)1W(!*>`L${T>iC*6-)tvqMnRpk%EHz+v3)Houuq%QEO!d= zQYT$Re&5QhYK;Iw=bN>7i;g7Mk|u==(=>vzS)$wP@n%d7^EFpO%d2CFgCY2Ck9jB;nzvA?S@0eH)2@}S{=j>=)_p-_~wIKsR+K7_E>_)HqN=L zceQ^G{Zsa<+U%++7;$#@;d$1pfdS6mZD%7ZbDd35rX%jdO4F&d0#gqizo0T$?$F-r zjrI+6d?CBVzsNbnW+9>-hCSF)*>r4FYC!?h92(yinayl1Ba5{0Q!a#^&*1?ZNS>fY zN({XP9#>$le(mm_2!p{q*u~#qp@%hS-m)Y_?pw_}dVQ#w=6;ln5hQA@fty-t%%EpAw$b+$$lzGJj={XYt8 z;s7g#Ypf~W*+d0L zjjFZ=R)X}wwU{KN6MIk7$Gcn~5G63@MT`$dc_ByYcY_=v+(ovV5_~ax(2fCCkTaTd9E#-(o+AzUlDd|uNa9Ki`tjRz07_JSuhfP1B6K{ z$0Cuno@{xofLd+0xM1orb3!DG*=;Mw(*byf-FqDn<70y`HtJ+*eC!e$9WG7cSfvO| z58hOS-R}gOgVKHBMfJ$&yXS20ntjb$|Dip-{DIdiDt0KDeX}92@F#lMvDI$+aMVja zZ~fhZ@0O8LVX5zjPh1@6`q3$?5m;2j#H)WaOxBfH>9{0q{zUPQUQsj0Q@M6W)m{sU zz|?WgudgG7d--JA94CexZ!ar|e7|v(?;wgaCWB&bu6`{p^U-UiU}owyP)TPD(uf}@ z>6!Dj>WUF+^rfYin6?FGIrOE_CtWzme2Ub}^bJjnzh#Rzy?HayxDtrp+;u+HCDpK# z|Jd4y9x*o1x`<>qO6gJrrqZk=0VyBz0py$UsS8k)_&P+LlNoUfjx z%}Gm0^h>z&GVE_t_S8rWtBqpj1#&hUJSzOPw8YqF^-SZ=tasi0JHp?Dt*7EUqyG){ z3P=w(H@Eye4von>wSpJ1wK(_YZS zf<~#s3>?sPzF4MkhUYMs~wxgdd_mv*_H`a*@+wuW;Uo>pX_lC8Zl=?wjXXnN!j;`#`4>vA|;kY!+$XX z;vT2@EN{4Y|H?0SScZ%E-7d!$?wO_M9G&N$)S1gMjS-;q0J&B(ia6j_%1EC>_>ka_UVED zM+)w)c^mTXXz@kduw0v0kW-iSNG6BEk_hK{@zUYzJRLuSmW8Yf+A0y{0eGYRFVg9& zt)({^fD73IirnBl`>*++E${Ig7gvEHwF4jE>dd%Lb_Ind;(6#T+{(r!!W);1sQvJr zFx87T@~)|)u98J0MN0Kl*qV>PB22&^+wW* zrO$ljpn!HuI3x?c=hwfsw!`eC1`{U9O0{VH(9d6?Z?G}GY2|3Z2Qwx`W;#xS=^XNU zlLLA~<%%B^R$*~PufB>~%8PV>?)_-3B|UBsJnDbkQr^ncbwGMHDvz_+9iQ`);T?f# zEO+0V*+y5Sv5w<#-dJ;GOY@*MS3-D&0!PEDO_M?1KECl*T&8A`nMM3lN_>B*8l}YV z13cyG=30aTJ@=WI$`H+~T_tv$&WuExQ5>!MU4LRb^C;f8zx@=Ygp^|yb=SN%-&OFU zL}v%OVKhM!&$n)Ouo1Fc^b(eG|5;KJi;1W~!{;DRbE8roKCSvkF%UbW4IQsEc*`kz z^O{944m#n_6yf)6-Evja=1gmYr6YBD>8&jKW>eEe(}~W)v+jNdyvKboGtMY+8@^jg z;w*_1GRf;HwqSH-!k=FN1$jyy<5k~a%B5JMr#Fw72%1$pIP+FeitH^iFXq`;ThkjA znDj~C!FoN?i)2(CF|493N@Tr%fBNrV#jg05I@81N5?bZnRH z)i?IMA#7}H<7pgHsC#C#(x(O%jVEc(af6;NugBGSN8)bCkzyGPtFJiDH+$vjl>L0X zGa@RhP-hFvhEBa3sOElTZoYKGFP-I|(qA)BqZ{$uQ9!IJ7&s~ZYi*lt%(M8&;ya(J ze7rlGd+3C|A7UokkiV-4Z*Nj7GIzD$FOFVK`M10xE5N z814c+(cdVH8edxaw%?40hgUhEu<2Pv zgQ%bFqJ0Xt;WvU+9CKNGIbLZcHehhbmOxa+AM7Eit%c z=+=)s)va4~Xc_X#dQmdQmH?`kH``3fGfMmye1#(<^%DXe19T?}j-*W|>5s%3pbBMK z{#i1*xX}~w9ygL@uf|d{D(S*xURm(P-XF1VQD-F~=6!=YipJ&jK9#0VZ6z76b$g`p z(lO$_ZRdcgjmzo zMpbfmhdwjOtNs?ZQsTd>Z{s3c{}~FQ%x?tDpCe+?o0yg9VZ13wo@F3C-mnAR?ruF=2%^Tc!2_-- zBp|SMNi(O-!75>IVQA>4A&_ln^$par-9+*&&-9o$)%YA1Qs}Ap$>mo;4)%SVj@O=M zi=nI4jd4#^_?B2JJcEQ)SV;oCy}he4^5^F}YCik=g`EiwruJi*m-RJW%2gfu&0hNH zIXI0+4{~K(8;lK<@g7YC?(H&|A2l_~FNI~lJ}I3X&ZxXVGih4U8>cbRRhWM}OJ+1- zHI}6}mmt3~*u0Yj22DWbP#WvJ*p`Jlo&?CT)_gG`L6l;W?K3I^vLbywy>pL9C1xQJ zw2%02_s>X^^C0e>Wsw5bo5^fknk$9=>7VC2?5&Jkrj@_HDA7ntN|H!>ZuwC^7yiiH z8q?fk*n1$l?Q*LjRuMj4nPJ;4q4_6jBJkFkLF#ONnQz4n8>(c!b~D6!SSncdBh{@w zZ;#skg-+RER`Ji;!?l;l#pAi<_Pu3_w4N zpoB*g?d}3JLrY7`Ls&R*n>+}5-IsO!i{*wd*b^2Lxb=Pgp-Y;%@S*V$jDPe9h~aQ5 zb?WroI)Z1(gW33vRjKEi^0FwqH*x#1Q5bOawldK0x;GZ>@~WR|a= z<}l2;W4rfF+lf&aT|7%RfSAAR6+9Y$!QUr!(?=}!b_Ff?!n% z&g6wM3QTz?kNu(g9t1z{ZqYnL@Ecs_dshyAvY_FnJ^x^1W8?dT@;hL|*nZhXwvWt( zg6}p*y0Z^1M-hX#k}gxid6u)r`i0D&x+RjrU$OZqV{LUsVSCRXALtSJz7p+@@t7Dr zne4B|VVLi<5Ic|wGO`uRpX1!?O|ex_Cbx}xx{_L<*n~y*|MmiW>_)IP&U@3Gw&O)A z<>M$s)4<(DU+5(_kGIMTkPQ8|G~qG}H#RjTGp?Gl zPti&%JRfPS6ll;xj~tuAy9I}MEvu(Cyfg2bD_=^`!%>MrA0N*D{B-G+5h)NUc^v{8`7U!~C8eBST=dV)2AP2In`LV_miRpZ%Vqj?}TUvtP{3WpbrwcsXg#skc8b=-}7NCvYf$ zP546--~&~HwOO1eN0fYJSzVW~+%Q*YY6ZSUBo~HZ!*PX3&Vt)KY-&~OhB)LlV*c;T z9;v?*{=s_f&&KkS1&k6-;%L(fcA~B>^bB_2aOr2p%i{DUs<6t1$;fOLKG*p&jM_`+ zfpJlzQQ~70SD-^SRY$fwweULDSqUI^_YT#sIV93;(`!_VbIe_S(xJvh#^6#(l^Sx4+gF))bY~ zHW|Do!Mvh5oF-)rW-PO=Ym)d0AIFS;m=Zf{12Msotmd`j!5PiW+JhbjQDjbN2x$W> zFt;+LI29AZ$Sj8HbKSv$gx>qmjqtR}EVL(!@48@@zEG7C7jH4p)9baVm8{m1H!ur2-dv2*2#481Bd-@`dQKcupHkJMvzuX!se#6k;)uQur`i zF&%b1`-ePB0w~6e7#tYzVnt`o7H~BXDdxVZ+{!gOHwfTX|pV_k}r^nVD93ooDiKbG`+mtDjJKgC5S;M$bRCv zfGK<4u0us%bmCI58XF&cdgq4H>BkPJAaeD)o@PiDo+kpafzb4-uMgqn+rPzmb0d{` z01@bz5u6qJh|3I98?~>|P?!~cyzB6GqhH5=ry2nJt7#_HL^m86Jw4^wn+pY&TPq`a z507StMwcIGkZ-B7EG$3fqLlJI5fzO!E>|Jn>k!gtNLVj{jtoACl=xvvMN3PjCa$OF)tYsp zHL_K=FZ?r)_(K-D1`h<%;fLzhMmIdgL`OsIcg(g0iF>@863RO&EGlX$Ev;M($xieQ ze5@QJe0O)fM))Anmo!G{kqK9oFinAhepumS8z7ijsUQ$;{?6rnDG*_5@8y_gnmpKJ{#sUk_5-N$ zX~xeb#VM9#lUTtU8Zg_O5y+j=2`3@zE0MGbOGXiG$8 z`es^_rqKA4ldMJEIm{rQU!WLUer3*V&tPF)h_AyP2oDJ96|zM z=~rpQ_}B?*crtWWM!bd7sNKI^SW=IbosG?hE>wp>img5Qq$5qWE^s0%}?JS}I zP2BcCO!K=j{Xj0l(BI{U7Fq@w%!l|2e~ijT21`^V5vSQ7x-t4t4a#}Ko~5N?!EupF z=TS;z-qgc!sOxHa6aEwMADZYP1SGf-9ON+?fv2@O)~Ma+*+(k6dUQFNnQOb}FAOma z)LZ%6$MDdRR2c@Mq6QRNo@q)G6+9=0#J5bE35ZSO*Enq zm%qrfmjcuU2?@kP&z^PW4R8K)86WIhcdrXLbIDd=74i&dKW_5s&@2)F#F{IU&l>UE zwPK$P@`!3cC}voCxtlIA(A#&*21h%0Qf_sXZjTU>BDQ~%fK|RM})92 zSEj9(^7K*rR?J+UB2Kk#2ER(5ez>0*2l4#ykZX`Hx>aASMeMEcOr`h?obZk(3urBi z=3DPbiJ@A20)lE^i3Ly2veME(JGPsnaawhxsHI3*rk(V7r!; zytLhAQO?F1JC_2QSL4Fe@F8*3RC4cbotp4Z*KVfof zaa525ITq$AyQJ4L<@1cXN|Mg`2pt&<%Hq$^6NIa+GaEfv4u?FPOdVhS@bp zT1uxO4~6_;3}%G&Gb)FIU#Qn3t^%cSKmMi^`R{;|(CXQhYKrv?NFtm3-_9)#x(?|| zSuWnoxKXLGW%-xLLEWeh(qyj+C8TI0K0^BAWs%E=4vY@#a*GggnjZ>lY4!%5bor;s zd&I<0-(wdw>4y8vgvYf1Kl{74Xcwh)2q5?=pEsLlO+Fu_W0us?R2~8`hXw-;g({Ay zvYce?*S~e9O=cbPENy2BIpzfh!1swacJ8Tph^po;srN|=g~f-H9C-|%;LpJBOPUi^ z?OA5N%gS^V4p}5#CkuS3(41#LrQra4kt-VQ?CcC4?y+M_BEBpK?AHv6Lsap%@#oJ- z3<8KuBI`0WI%HoWSG)MD3!<(c=ybZW_({E}R0`jN@Qzhhwr%{G$LD|6=n-cC=tDX$ zJF9+CVT8sQfn00xyxEl#Bo%wKO&JyQi(7$yQGVMz+bOE&m?ya zy9j8^#;_1T7^5o@`BQihNF(t*Oxjex=E|fz4!VnLvn1bwd#y^CSz*O%2+v*~_6cNB zn7H)4Fq}|jO2b-b55a`VsA92+jkBi;3neeLUjLAVF;d4CaRBJ82CvD>8CF$bIRJ9_ zeLg;f(Vt*gz?n9H5VE9?pVk<3<*n?n@i=-U!LGGZrIpm;BEE?0rJYIa9~O71^%UWz zz}L^r$$Uu$@gWlLnGR=|wr6;@sF^aLIrJgt1QHoghIa)1=te1u>?z;vjeqx*m8vzF zYHn^kA&K(!z7wjAhd`jQF!*mlOvq3YKsjnEDtl2*zSKS)&SZxx`0md?Ce#<$(x)XY zeD>x;#P!1K6KQp`ZTpV6kLy6-`X+>-K$W}|Q3wi$tAnJlO0$yGC<;`QK%El>$%8@G z9Dje_?Q!(8nLjmh1UyzoHZIc!d9gAhTLKRRAfaw%692_fQ_-itmZYHO^USwIE$|D; zD?eHo=@#}CYSUiV)69zc=V+me%HGGA^bmTu9=!c1dr0rATRHuiffc4m7BL_q=7&=~1>5Aup?&foK8R}&`L)`c>XnnlBN=&1OlBQoMkd+xp?2?gQ&{I zy?bkMC;%_RVuxd9y_|J)ns57|fZ?-;LW-{atE!@J8VcsMo-h9IJ=i!n5t_M8O-<>- z52u|{5_`UDzxE!!_e)5#L(x?M^(w|df*z}9V^MNQz#Ukt4V`LLc(j?BHAaPiFse6O zv0gokvsslc*!XT-R=+Ej8jcr+BjdVy2C&*ZfB{tAD&K($_rW-aoPpwmkCpWueE=(U zJrb>h5d>hHuN!gNb*0%M^0ep_+|=+KYnhSe*9xaRfo7f#HF#=q>D z*wuIgr0Ie;Mt}BT_w6aE>*>v6Q*3z}7eA?n!C8z_=Ecw`n%_qjl3_snW3)NyjI5x~ z*+x(Qo23AdavZgCtTFjiGi*TC=EP--?JK-fKO(=Ympekj z&9SU0h`OI6@7V*R3LDpO<9WT((;MFt&E4d0R9b$>wj_sGcNd)v8pEq=ITwIH60;kd8M&Whos;<{hBZsID&r zpk#4&5|GeIq5(@gcIO0N_K^KocWD;9Vm}`3EwxW9vh(dP;Dq5ozIg$Z0ts(=F>Q!< z7e@!p7|axnM#DCT4wIz6+HN+VXq6S%=B9msB+Xj#j#go1Cad_`W9855prP}nVX^}4 z+hn8yGmYY;q5wUl!x7a@;BxhRH^EmraR2XMccYEnuE((!)D<6{5c2BZ{e-TW{i=uH z6>42^3s8!Dyw={Kq0e^jVpiU|#`Zg+HWQ|Iuh>y7td(3do4;f2(m!xWK>k#E;3!N2 zDM9;q2U3U4Y%H$cB0dm3L>`se0++>U{5N}DC3W+%U3w#aUL;JO67tG={&IF2iz2v= z-C>1_8~W3hREgX-*-eD|%d>Q~0wF45KW5=>;P;;!rtDD)%$<+x)1DV{TMqx%ppcan z(SacY8J0t0ANXd@3X-Bj1pck8AZcso-Y1 zlBIbQeLiyEp*_%p)1k^7lODMBn^0AoZ*)b_K#~8(nW*=%3qI#QcW`?SD*s2IAVfvU*iy}vqu1Bh*gJ}lKW^&&wn7;NsFq*A zRVz!kec6(7pR>tF=k4UAr7iz=s3o}l^MFl6uS;DE)rVCSHR;OPTX6B#$IU)Eog_hx zhnP2TplG_OY;iB)k5!$t`zR{hAcv+LWZS{;v6Eo-;~wtq%;t>)*MeMEz-E9C14NlU{_ zL>QV_RmKRq9P3_pgRh$xyynVV7KRYa_*?fBk7Z8Qj$*Gi=|4?$)KwJUQ ztoicg%fR5^HfBkSQGw{LRSEj|d>X#usNz55u|yuxHq@bDOi4*e+2WI~m z+j^L;cvaD7*WO)rQmmGuL+q#*OA*zi5I3|06@_z?J)3*j@96v(ick^*A3I_aw(g$& zHPp7&2*~4^&_$%{MIT9(sd9O7salKoZs}E%o*tbRD@pMkPARkM$k%TFJYq}DZ}!Hc z1N5If=DF;TBLZ-igXZ>>Y;Bjvsz07wRii#z0U;cXvTM~;x)#+a8}@a{2?g^(U9bo0 zeuLSa@hu5UYTxkK*cW!TvxvcofYk#LS6xev=o*GtPZ>cJq^`lNo|%>X;xJz21w2H8 z{!HO_Oj;V%GPYru%(q>OJu%(`!}fT8Ce)5b>d#ULBz@fy}s0(>Ey1)N}rIBChvc!b_EIMy!ZSA}EQGP@O z7A<#2ivAwc%7L#zx>B9-EHBWC=|Fq-SdDnCzV@7RUSD7$iE?r}gL|5;tdD9#`3^Mc ze9J#m<3k_>nl`m(qkTo$4i0o1BO$28KQt`Kr@x%^UX077Si@S*mzS5L^by8Xi)Eg4$?EBK zwIpP3kEMPEHPW}uhwGWvq!$R`d=Sz+If$&%q&bk~um!jAf-i)&W#K*>KiS(3-yA}3 zPR1zOFj2{)VJ`8k+@G90D%rnH`3!>o43>0nMqZV({*Te12`K54r)=$wr0VURf<6}<~ z*KYaTAt}{Fp^rdpP*U1)>?({37@L~1YK(GZX?hgpbD}{8p9lyjG*`yg=d*b7rgE99 zM;_WcqDVW3>PVOjqxPA9A|N)Sbt`x2g}dVd&M#ZUyHIOYdy&jbL3zWQ?@8erxtjEi zEv^Zy_Rmw+?-%V^Tn9_CvRgVDggGzdc1`dgM_Sa(W3lY7ALVbU zZ{&QRH4scIXIG9ju|G|D#r%&s_{GGGQ}D{gefEYrJLO)zel7cjkS>w8-@}M_f@=2$ z0-=fcy-duU=iXT6L<# z6d)6v?;0GgmfgNqTk=Y%%8Pn8Z%yANQ2U71-f_Y?Ym6xa_}=c4R}kD-8Ab+qk`z%v z&Wrl^BGahx_ZyrL1vcbI%d)$E8)>%Br?osh_>%*&8`Tz7-v55xC*NC8@Mx>>dN_nU z$YAaj#@7&e@fU;1zsh6-0>tS=-QSlaH@(cg?lq)`g&6k60_fx!UqBXP*X|rJ2YXN>u1;UTb)E6+9;8m`wJPP_T zR{KG!{43OGPAB}0ynK9KiqP7W|4b_;OYKusj-&l`@!;F@ZP9MT-ky}#@um)@@3$y{ ziin3uL2+?$r;TkGci%_?i}F{0$D{fA`J(>q@nXekISHZbo$f;09A-qgaMK}_FI*z@ zGMQ#6?UyFgQi?OQ4hxvT*}{ox&ujhcif>HSXm~hZ+3{JoJRudt@%``RgrKX_aSg+T zxw+@S&a#9SLyoX)$+fd9o{MTXfB(zOw5z@kpINTXkX2g@XdabGntG)b!e2b#vzll8 z&-=);sv2tGS*NfcLdO)p9pyuqR&+76rTZW3_rKD=H#PM$tL^en%VsjVU`2lZyHEW_ zBh%A8Mxt=lf+ka5|E+>l2Zu;}|89t3Syfeh9Ifb!BjJh77HwOXENnIl72^Y6$$(> z)`o)+<`}^FQ{V49jvu3^etGS@r?XeBp_NyYOYg$rC2Z8bcxMVtHgI(0A|N1mI=+yB zEolYeECK`7%oO?M>Fw=ae>$I@kzo(U&=1U(=6{)h(_1$4F~6~)VFdMqaYnj)b4u|a zq8U?-^>wmrEn+43+Co zIL1azeoXj_=i)mQ(Hf={goTB{$tfrvlgC7rm6hpP@CCPrAlrhjcy*g?`DS|lAq%{c zbz4sRAAJ1HQc+RC!Vr9(Ygk#s*|@jovc0oo1t=ow7=GeIr@jIxH0$!}%9(gV*yw-_ z<=&MU=chEjdOgk+{x3c^?jE-bJqe_Q>?k>h7A0q)w|8Y>94AxLD9z5ysPU%8)L|0< z209&+-*&2@rG;?N4{mSY3n}+#GDU%D|KQ-rbgiv(2q`Mmf`WoREh4LW4<|^eeLOwK zbhX&O$nGY;8{?`n9%R7^k9rCIg2nsdfNj zM%xGkOZ%cl@@sS8!QI97oN9lp8O!u?|NNBUMcc?fB(mlwB$juvQaSC+Vk;q^7zw{& zOBlAxZUGNSF0XtT8raUE>7_a!w+v;UZggeffBH1HSp{{5%jQ?Oe?wiJg1>))ps+CM zhUknNhB`>P2IzfQgY7@$*-JrK5Zt|~7?_OLtoi$;V7<^9jkR{m`sV=pwCwDLAi~8R zTzG>-)we9CYjeQxORMf?W@mf$pmpM6Vs>_Rk>Ib`_yg9Bg7DWq_`PUp^oU#pW(2ct z$b{GY>J@gRy5X$_CT}Bo{%Pp{?FBFnD#GwOg3nw0l;g_1Qzx5rS;b}e7Ojew{en=U z%;3|wTwgeOJ?#>)r0KkRpD8m;`c7h_rUYYjbd=qTUaRN_QTU<8c@!!8*WVurXDuts zCMNV}z|1{X{@gDF3FweJ2qHia#t!oTY+~iJ>laz)RCymCVN`y|%gaCa@i}|kLU6Q$ zDpBYAuV-@%hBWE7H#fDR&5oeJo}8T-{H^~%7MdmUHXN8VXW4Iq(+~d#w>nUrsGOn| zb^qhN+g4kflr+<77Sds@FnsyCTy7^n36zefPC1rO8u8P`d`SJ*&~%GhIu+GIXo(og z7mE}5z|NKoXxOYu8Nsag-exAWZayW#^uIZo^deXmdAousXP#`` z`s0Vp(a{kqH!$?^Q|(<`P~;&Kggou=Y@9{#h4nzu`st}R0I%Xl@L>Q3oPrd~AaTC7 zwY8;7HfUp?=sk#uiK+YXV}EC5Wkp&4Y^ZNA#9=cteD(M3WXQOffkWlRg`csZp@^uo zv~>A8vcfDr4E)mUxs|xSYu+5Uxw%QXwX;(m%>dydSs^x}TQj<&%MkM!U6sD(9UW_; zF*t$ftyH=tR6fS^O%_p4K}fbA{%J8)C*ZNn{kOf%IRJy9^mo3cwNc7!tu4%B{IHAq zQ$|)+fg!gI;zuDl#>c;Z6^)IJ#hU8s1f2dU`T-Y!vI_k1N=!`bd0Joh9+UarQweG5 z5KW@@%14sBb4?yqi^z6uJ|_O&Z@0a&MDOQ3dYZ<^$3u;T&p~~7Vb=u^eWuC7R)gC; z!u#;=$>Q9N z*-ab#BmXX=!dOlMGUc1ZmnHxGNbNBwMTRMlQmjkT174wxl>rkm`=7JqGTwWXlQTO} zaB6{<&Uvxn?k(+CE$yQx z&3k)$FAa~spKj4<_SJBI96_}$lnG94{Z^697Cq`Rq8fV`0E?aY5R9s~oh~;2U_9W7 zuaqclPqd8$m$S*1oNaQHtmVx}F~b1*c-~?=(H4CX%D(7gLunA@xBvajP9YR$zq_*&eZI*<`3PakOTqTMid0=) z9j=YKU|yStdgna%YYI;dW7P{;x`%!tZ@`cwT7{0^5PxJ0_0pI2(=Zhhc|S4K6x%C} zv!IFT3yIH^4A7rk1hgO?i)Z`K$jA#B7=q{!9RiVgBrtXIE{J$-x8^*nkB&UJ+Jfm6 z4_J;kTmpi}Z4oTndeCG4d)Y`-PK5vTVycjxcnNLoD{!OWq7g_+K=$$>h>q>;(ge{1 zZImZoHDQZ~{QM}p@YDu`NFIJbW2ukD!3|!uJ%~N)hQJG~gW7)IThR}_{DBi+ju=V^ z&xC5VMk^Pu1Hec{k54-TP((8Cc>DLtO5WaNvnekbBY3W1<*z-4&-T-D6)(Feg|6Ev zr(){4h8=i$LmW)mZxIn#(4*ztMmF#;T?Ki;ps8y{*!ExE z{=lm1n>mZ0AYM8!Q4C4?AS_&Re}`!M@veH`EzuGh2mc6ORZB|%CKwVbWZD~`P&%j} zh?8&3)TO%^A;fD&Ph(A+|B~EaV5MQPnGUbZNj(L9aiqV*YQI)Y6_{mQQ%{L)?1jpy~5vT6b;q*nW3K zz9Gxc;35J+gWedz?@;D;L)1qDZWY5IxAkM0!;j)RB-Mi}v(&-0gXQjr&EYTCH_ zYm{^q$xm~W`Ps4_H;Cfcb&(>O?I7Ae03`tgj>&&{i}fD*0AN%ocz9;@fA9bZir|Ul z$zYm_!r1(LtOx4jD7w#I3WoSP%VyKbx2#+dO}emjV`wk`x+G}6eJgWq`tzLQ3D>w7 zRTfXvi(GniiO>}wboQisPZsc8-@Z-w*VUyMVg4x$xb7{O8a6ieS7XCt7V?;^(OHwE zNEAJ_Lw)T@`zgWrE!NbJ5CuOwXHoLjCvS3QPMNU$D2?&H?PR+pq-?aOOk!yDxlO3S zq6{1uKzu}t2b^;A@bGN;J44SpO^l86d=~taxyhZtZ^I_8&_~-mZ(2|p1ZCzS*0Hr^ z|2Q6la(E)O!?OC1*LRUezh8f_f8BGf=P+;&{bX--+3`=kNgW9_al{m#=E`TR^Gqgrh3z$j(l7QzS=D% zI7~@N@#OPoKDfGp<^DxOrN7`UG)r5%Udqe_zOU}r_?40x=5!GDqBSX{uD&)3a08C~aZVL}U3T`XF5re2tNlRT78tFN!&0fI$IU;_y2)&)GL3Lzwf0(yiah(P)L{QQ-j9Vatdc9L>))K^u!hqN6nRLnlx zZkYPnVEW`0!Yc`&?-&WUCqR)QirAMQed255o4`^G-*~I{+ z?2x3iDG(xWs;5+CiJY!(0Iq1<-v^YoBt?G{HRA1Y?HG&F5)WZfY1-F-!r3-{g?2~i z{i1sqxHmH-4x}M6QsjMZ_FOLjs|^5FFKNCf2i&VL3i~hY08b;p;Rn!td3mY*6&u9% zgZQ|(Xu!Z4E=@tko}ZsL0oEhZ!6L_py1Vs9{0HM3%h;CSceDqjqO#eGEE60lqIrz{W=T`nJb-&71Ve! z_qBV!Yq%evJ~ib zK(^r~gr{w7*^lbWJG;6T8XSbKz#1Pow#!;jqDC-XlXShf(>O z?022h-vk1|Bf>EVr6-5H<5b|8r?{n&e&R0|?k+kam5pWNSj+BEuN z`f9s=&-UWt;!;qktE=^uRuWsm{STY~G+u zF%;*-1{D1TKX_KOnH^)ts3sBS<} zJ2c~5M3`gw8~U}J%1It~e-DqMZ{eu&1)izI2MFQz*KsEEfB_nve9+;KOfMmN=6Th?BCt~pm#R|$PF z`hY?ZvUN6NK@J9kN3Lidd<{TWWn&W)-9Jws(9Qw(gb?u%+bU(FOa8n`65(XO7!+7F zTH3{u^IxdhJMEt4TDo5HE^7RCe9mNAJe`PM*c?=}M#Py`W1U*W1Zt$~MyD%`>fx2S zIqa!5wR=dH1$EuGBqZRIdOpGmm7ScN6qJxKInOuZ0R$j02tW)g`aV2gN(hzS9CbTP zvMtgFMnfKh_qf#hlz>Pu#A^>k->vUcpVkEXG|S&4{8_0t!oZQfJ1Z2Ez zuAj|=h7HN}Ij;d?XI)(#{3je9Y=D%7{{tD16NrE|O4YEAVp(a{3|)QGaph=U{>lyi z;K@k!2g>-hPT>IKd8gZ zBHjA$>Wx-G4V6H+cJ{)TjGDt7EV0?L27-J;W8=r3Wzp%mIq`|{aXIdE+#b4$1wisw ze)%%Cvcdpxk8ihMy0?YgL@n8VN~BJJ zPKy8i8Mm3SsI6A~`Db-9;~mRZ^5e+G(YU-ezsrb_M#iz5A~WX?lauU3|LIJKA>j)0 ztMF+8Yww*!eAAtAE=StY(ZmsUs3h;Ui_Oh~?JSD+RNxEadH(vwi9H~`{rhMGd8{K( zV=9OQ%b)lMiNOtOtS)Ph?QH1Tnn3=z=+%D5amubmkuFI%|s!VKoWK9u*bBzn*b zkLYvdhUIc+6`V#S0vdmNWBBF&svO~o_7PZRruN&AwCP_>oI^wV&;900>Aq+=>WpmZ z+RP)D+OCwI=fi>%?GDBIXn4*(weCI0aqJw@1D+d3b}F2Yk9`&Az}Z5z#9Yq;+Na)) zp%dgcdx~o!Jt-fdqKJ~On7%w&&m6Ma?#y-nf^L8hS;{ z5eWXPFny=LEkskoYpq^@t~3|!CeajKIqmF^8-V6cjy2~ze_#l)1FKOfLu;Z$$?#1o ztO$7$Rx*_C7Q)T%#+=}URn}zHXvK$n9b#jkm6AN)K}iF!DCO%iA~|imsN_c?VJc0N zbT=adpovf3(4U{AlsYE?wpJXLnu|SapPV#-+f_?)NnOxb=6$C2zas+pB`VT0vl!Qp zq0ow7EWu&}6=hRC8`rVMR3PI=5lUk8LyH+2m|mfl)ZKcTtY{}dV*uXX(D-@p1%h|^ z)};*{6@sO24%>oAq>i^g0YSpW>?+~!<>-lDA|H+lf&NqUrAP-XRul!V+0Cd*HG#aFKcTh_pC{zVh&1( zHQ`D|9NtBOpk(J6Tqf{nPrI)HZqQkt9fmQAd-&p^6P#6xu}+tWyT#I@E5@p&d^ixT zcD^f(qGspr6|dI3y*4<3VE8uB`!q+rlB9vx&g?kvY;QB9S?dn|;})-DJ1V}boD%$radsGqU;He^#Xt;h$KCKnB6*38lV$av?FOb3r!u3OK#uljo)H6Q*P zjxA??OE}{?RtYHOuxu3Vx0`g@d#e=kCMLsD^$LU-fJeNQq>+hx;C-(}GBhGZ6BrX# zOA#B+3LO9l_PEV?JarKsG{Me!+Sgz*TWQ1PQn2ZMg4V7gQd^TplFZr|*EyKq@0d>d zM@{MwXVl-ekI=Z|-7*xC?S-#1LUOPoim6#kBA%$iK!n-jh>FsU@0(jHHj*@>x-^<~HY8%$BZE=&havNb$<{Lr1(Zx}3=9fiyEhhE%H0|$S0t*AaaEkKL zR<~rAe-mm{jp+h|9A}gamhYB_XjMYMw1D9~UJ%<)9#hH@vgT-!z)#xr%BIL*7Ne6$ zK_=puo&p^^G#H?jp#3K|+%RXF#7%b4<1;jrX}lhLu0w!~#M^HN)DG57JxOe^2w`ct zu6t1#uC;b58gBfR+q8I|_Oar}N4|XqJ*K`biHzN0Z(pV{B@QTjdwsZFV>$5YHE*f! zmlr8R?zx*4+ilpPvd;%}*`e}E=mvcC)=48){I2D*n5E>|xTxg>@{%8TxlBG__(6>q zjL?ihYT@;HaZG`^rAr3QEefJ5~-7-*z1ilm9p5>~6glM(w=uI=>9 z#Mtg09(rq{_)uIOm`J7F2;HW4+x4^)`V{WZ2$bo^^tlnoVeOzQtqSk9#=r%O=5V@d zOv$82zKIEMV5_ZTM=lfILWxK}X8|cpFd?o zE0wn!$$vqJr9(&fd$g9bhEx5$>}wx7LfLQm=5E{=rKq1s;BWPkd{!^+4cdL)6buUN z@r&fnZ3fls-F;^o-o1X`e9Lm5V88980t089Wo@c8pHh!1*j2uqD*T;XZaw}X4N%aT zIq2|$#&3fWzU)v2Kf81g%)4cAzdUOmlVcZc3KK9NM%cHCh|eJ?{|*mV>WDqWeil@z zU-C@YbSpi5+hjrB<#tCrE{cWKi z{|Q1N9_ugsm$RKGgF>JEU|8ttOmf)xz8d>~l4 zG-bU^;~Md|;(tbr@qWRjiK|Nnev&$56}@@6(~{^XnJdh|&@`_}lQ{4ZqFOTf0_%H~ zr}(WplCNa)vbJaWlbd)>{ku)AzJdwJp(IbBwn=*YxaGlIgCkIfowfD48*_?ZN_4dK z>^qmHwmj=s9&L-Q37TyUIgnDg{E|u8;@Yp8fz|Ovm)e1ZvULV(32%1CibMkYT%)=> zZYvoP?9i_TmEfztRgK=ZHXZp|>@$(L(58V^zJ^ijYF!YG{_HzJBBINH&f442@L`2$ zTLB9Uzx$x(!@AQ*e<k{B*}0F(Hea>dc~J7 zUv`sR--$l=BR3kiGa$uy|1$02hK8T0>jB&`dp=-B&u|Rss8NW*Kiibf1;JP|G|YL< zTZ+cFye@?k2PSRS}Z-mEx@EwQc@aVaQglMZQ=lJpidrLgb*i!dDlo-`9+FaW=00l2hJ_xpIq-s zCe?ti#?4s{<2w(yoY`BOX#H~s(s#ZtE-t36e4K^@dTmFS0htL!zLMOa>O@6`xbZBw z0lSjEzJ4Jc)|#g{(tqiiMt{g#Kjz$g*LRxI_{Zod)L|z!Z)xXDD^;MltpB9+*;%M~ z&0TBcrXPqo1y;o<9Ke$YZ)z(k*(^s`#;=NkUJx@7>GD!op}h}z`-&r{NGzdfbs$jy z>)3&WF_r=JEi(LfONzzmpgu`+#G|3uyl@!DbseiWp zf)*Fn;WiEYgfw1RX*Od10r&;>B)PCohdHX(sAF9_FPRy;qSyTH#`~~Y8WsB@c8G6A)j9oK08a#A?hk*u;Hx2nbX%BRmYS@AU zFdx8+jvyVGOa4wyP71S6@bURwn&zKcTb_RUFtFM>0=0exfV7{;3y{cbsFQ?u1>B?2 z`m%*9S(UT{o2PHjTc4FwkF2%xc$kA~_@|weE&nr0DysRf+KlvRh%PaxB>7Vb^9EIz zUaIN~MMhjf?alSPWy+E6fqlj&U>8Ubb^|^{9Rwzb1+M$>?7%L5X6Up3z1@5oqtu8S#L7 z@x^!J%vB|>+|839>a@ra(dP-+mrB;&G~|8s>;UEc{P{CtW{!i!$Je|7*Q9A)>W`Z! zv&XOpSUl&>y5NHs+Z69a)&Rb>WvZSmgM@jSb>2Ibg3WaHNl+8D&Fml(3JR^}!?gfy z)3z=19{Y#ZOtY5^mH_t2Y<@llz>)^sTJ{vN4JwQ?!j;*MQ1Pxbyko5xK*hwr$&>S$o`MNYW`HHP(LU~d{9VcHeFh>VUa+%YHEAXq zh2Tq`aAANiMb?fHk?Cpguf5x36L$Z%<9tie*$g0+2@3{%mv-M9z6MU0H z_~54@g98c1`;S8}+@GhD+dPo7s2;uo5yf)PSqdl!Mw;kfJwt_yfp#0=f+3Lc1g6IZ z;O5Yd+(!-O0o>7X17xFR(-o(!31D!XvqAtP(E%hSd9>{l8qJI|8pec$)^UOGUwNQ^ z3?f-zScHJbKRf>X$=?>s@y!hu3{ItXv8ib2U`bKa!}(DB=DpGe$qq|lQ0`{TYIFOl z9!@;w?Bm|u>-oc-W=d>No2NI6R7 zQrr}!0~_goA_?EbdyEqy&qU6blpvD_A8>n~K4V!lhEwQm_YX)mtXuJCkQV}^@-hB% z9UqrUb+`}@Uoag?Y3_y#bg3L*l*t$$GB-8SQ=j$#9-#Kuxr?y zANpO~zezRk10nC&M~C{i#s0E(F>5#?c^iX^C~%?J!|A4C*k1`1|A1 z%mMD=CsI&mu-%#r|45zi(Wl2D%Hqwdv}sRz9^44#H3fcwjJR?!w~dVrRm7zF6{oR6 z)7y#yX5yHgX(M4~>igAWDl)D&#*I<^(>koZYc3p(1Z_<@4prJh16{u!nMu+RP>Z_J z9hjDqW)8a!Le0|w&rKP!8oJ2I%!F73ncKWd!>1OXGD_T(?*P^TTLd}8=*jtIK&;pB z$qhbC%zAuZhsC=z1(=DMRa17?${C{fvUJrV`E*#tHdQ)g*8RZJ!|?UOp*JV9Uzk=- z_{%#vb!k!NpW)ZYCWjOyL0Yy+jnQ;X$jO~1SN-Lf|Y z3asT+A4s6K^vz`fxT10oPxXuhJ?$0KUR&>|J>tf9g7@;ecua|VuH)hP>h$cB6>dI1S?4Rax|F_zAs?mE#WP}!iO(3n1`vs7 zWZP9G=EH#*j1DhnJG6G?dv~LA$=ps|Hy%UAQBLYPU}J8f zYD4i7o1Rv)<9DqS48qCy!Nx1srjYZyOiQoK03ilCFfBVi zDab}3*1Vs&qe3GHt3hgVh>fLv`V(;JbS>>W|K;^7r_+x6H&VBb290UP#$9rG7D4pM zKJB0Uc9Fh6zFZy^qYwz;c@tt`c&jiFX?8`AfTvTLkuxCsAhxzAm2Pc|w>G;2NYBnM z>l^YkaYHi$~k49<_&eWmn z1)>XytIZrO@6;ah8lVsE1`wKd2Px^bcjgelE9xQ{+ZOlR&FdgtDpCy+Q)+YD$DIr^ z7a(i6`} z7n!);+7by>B5t*{KCE2fIS&xoSMygu7T2XCQ3!UwZ=T=*e0V!k=OuEbVk-Oqhdd*; zM{1Y9rREi`qv&&d&8{GhC$M|@pVPcrLxW z3DFKwRD2K|q<@B^c8F&!fe}ecW60@Z++S$XM@sn=EEZ_(8n7IXjqRN63p+01 zM=>(D1&u9?=-eq#PVxMR0izo$2X_-Dv-Sq%)-~vztd<1^9+~@2ybHhI1UX+gC zS{rzl>6v%Q?aTzfJaiY>?4G=)>_~L>#vgl%;rp6!q}ESL!N5Gba~B|PwIsV#onU)-D3y8-H6r$z;UdYaBnmEv>$RH=3=h`&0)8Vjz$14@7GqeeU-YNgy6@N z?C`k*xkJprDt*ah%QE^Z8S4`eBL%rJ6&Xw+|Mt|Qhn#?S|v*?g?A8k z$24m;;uv0#T&^c$uloX7!fG+%U7J4yQkAJoYbWtb4W=h3B61-OKY0VoGU0GF4*Nz| zR3D?d9N{}Oetj$g z&(ptN0C9o}&iF8Vb#_`?TaP3AQZtKXpddEQ;Vvo|Hk23(W9xT~Wn5+-{RC35Z`J(> z=tkss$@-jQHRhB@n^_fti30+;6^17ZWd3mvXPVs-Y+h||Z&MED6mk5MjD6&)`jEp& zcillETVf}|K_22cq&N}Gq2K=WE-XAB{qZBZZ$m3(<7ZYzMnTwP0)AtE#{9ih75J5yB1t6enBv<|&2#QEcgTDuyBe@D}lI*zlzZp}c%-NtIvL~m2 z4ddhEW0FX<*EN{ydbT#R05aC~lHwCU&ZKDI;WIl* z)@UL249Qqwxt*_7D6~v=$ftoh6oKKkyk){oSfjhtQ23^T*np`i7L^9|c7Y|_P~XcV{`|(r zKob-d9egg~9fys9)&`B7#|f1^hN_HvfART8_&Ynexh0jIw!eQqupaRh1n52|u_w)$ zb6>K5O-G}8={e32p?Cuk5MR)%ak8HdZc{P!bUxB+wLG?JSD5OLP_1?mO2Pi$fX;R@ zGUx_w3j7jkc1H5(W%w+~arKuk`8r;RXw0y06$6R1U{fqc34>$aIj!}%n09bcJ(@d= z{DW%AWUsp^qVFv$>DzX5SB*O1q~pm2IY;OU!7kkt|l(-~WK%m3rG z!1@RcwLdOPzn)q@VW-`hCUGEDNyayKMv9hZz`boPZxrb{@sJaOwMx4Ekwv%ze&4%b zi82Lf2~zp-3tj%w6bQR(#7?w(>XYBc2wEi_i%ju(`+?wl?8&Lw+`8%BX+j#5WN{~xY1d2ip;M;X-$*hlLMkZsDx~hI73#)x7j*xd*a<5v^dOv=y&qW z&SK8Bs~jQerotp+TQy!m{`?*@XToa)Uo}gw!h8)6qg13`87Y8iN}W=qIL=#r$TJ8V zA=Yl1jH`!-Uhh|hJxLmE4I_d#sf^pjKZpJ4E|!jIBT;tI=*_9$8aIAqyi*n)6mY*H z>|0abjIHO_yw|@*bEr~PK>WJS{_Mb~2gAIW?*_V=yYeYgQ@d~lWlQ%UAN4WmgGuEA z=P1_L`23PTe2mdP`s#YpbiOZFNydiI)Fv(xAg%KltR(%z7eB9Sk0SQqh!FrMEwtkI zQ}TY_Vp`?*yZm-05GFR^o4fSp6zmC@lV#=rKtp5g0Xv4|-$KH|%z*GSQ%)ok024I; zW~JgfD>7h~gdgx9-yuE4U2C2+tQ`IIy4>_>TO@sgNj6V4QVU=xMT8|?T#|fNRTZ}$ z7Vnb_2hMs~?0l_VPwvzz#x)uKBgroGP2#Uq;l5tGZ<2hJ=?4WIDJo;T@Yo|KT&|SK zBPYwpwm9Jn70Qs+b?F2Yf_&b@ffOHs9Mu=8%wDbntG74{&EP<>b0D(iq{ZP^W@Tsp zz$JS);Ugh&@dl2=?bOO5u}_Z z!*_e0E`rgjqsnrR58|L@A;u=cMJ+9vs+(2~B$j&eAug9^w<>!H&+F~2SNueFrA@ZF zXhIR#+)qjJ-Nuuj>aQsPC}4Ty=k(Vi?MTz(z97(d?-zM60mo3;*zfbV-$FFhf7_Ho zaC7Vk|DdKCI818@u&ndAt(u=HCVU}>6T9r3SiAZ5`fFuwg68F@ zxp>ZJ5rnV8l)z>_Db{eJGpyjFx0A%Q+iE$C%XTE_RoSRr$Izx@gWwI$pVm zVZfa!$^(G?A*+u-*A*|{KK{9t-Fc0( zHQ;~(a~^brcKQwiv%>k?%tADYvZZ}U@D=_ zK2LGYBj20D3;|ok%f$Chu1ozxm{08Gi9(94J)`LvbfW|95L)Wz-#Kn5Kd-CT??La; zI}Ymwx2ik)C7X}*kKViK*1YT^?&GE`wSmn@Z#>T*)o%YFj-f-VylZ3(sUk2S+KEk+FELM>rPLCjAw>_-TvkvJdy4KO^O}g_4`EdCLlkJ1$ikxRx zkCNbi^#7=#sky#r zRrgOmY-@(n`?;uFNJe({g3i++E02ZMBaNvm_tz^&iX0pqegk2ojW+NCzX1jDoS=I^ z&Ax%He%tfbuY5v(3hB@g&q27wDHZAJir+(5516-m=XNL)2a0^Dldnaz#d%s6_p3L} z)gLknIa&v-Pt(}(?jMhN!V?)nOo!#npFx((eD@o{iFf&Bb?DH-23?s;?vu*_R9(}q zH`_rCkq?or{(;Gr3!3%-8t{|U&1)fObJJZe6@ z1#}Nt{PlCJ2zjrz*0TA%&#EuJ_pTm=Dx?Vf^B{O?hl`EwDvOdNs{_6_?I57JVCT^e~_b>>x|W5+;> z^UPrfU^Gu-6e$E`-oZu;M-vH*ASb6iQv{#=Mtsku}vJPb24IO%-hs}x7+A# zJw&hS8LG)+<9|=Hi3Qz=7TMaRE{^oS)=>aRqwVPrf~_N8z!3;ZVif0o?9+pPHtOS@ z*%xzd{@Sat9H7X9i{!6k8n?>fVTOU=+CRNXI^4M}6a5Z>w?M<&9ajF0w0+|0+8I7i`Q3C1uVPc6a&AROOm{-xmX}1m2 zPuGEr$*LwVh{pq{=_|RjJMc5cURwAKfW)dF6}0jeM)&FF^SbXn4ZK>(i}49QZ#q_q zjq)vrEITj!tPhBx3Eo)}cD?(BXk+zD**-v2Z=LiVIDKNQHux}e?Yr7&K6lgG_M{G} zMk@I`QgFF$W(Vd#p_i_~e8TKY5Fwv->yh>EnQ&d6P(55s!oV8B@VQOLTgftm;reN% zx*m(-13%G}q4tb-HGx0(yf4(r|Jpp~nKlqsmcfOe=v|tpFZO1?Yg@e4%Qvc`p)#t^ zaVXc8a(;ykKS|XpQ6mgDLwa7N8}ArG0&A$oJfIcR&b=-JDq_;w-t1_7jr-nhUHfjL zRZqo(J8zCh3gt_ujP~{(esH*6xFL{v8>qwbD;sw@o4n5YciOGYGdz)zS3h+Y30K~; zUvL+1{W7_4@;#7`H8}e|NwMO5_se|ld`|cC_^mam_p^ojH6i!gD+;xfwTx$Ld|A20 z0A`N}y6h;)p;M5?D~oV`=>{-CCMf$`1Qp60zO2wB6$R=x28!_a?@#lGKihWHBVX~n z1FCnq@3Z*e6YO1Zm?DJXo7L5j-WYHp@#C|rXF<})>{!c>khDwY3x?K7Y1& zIlI&uaN&A)u6hWZ%Kf@2Z?et}6NS|KL5>|eKj=@^XDId5 zAr7DGlTb!#!2q=CTh6BxWi#`98XuI3(YI~_$$JUFccd?9oRErjO zMg3+LK_pW9y9GeS_l~RQt}>>$e-YKH?bjT{2e;b`Vg6k>PNkcg+8#eXv*bDczIpMc zN+RTV$cjG|(5CO29#ZuVp9Tm}oFAjaF8fLI*oipuVaVp7Oabiibu3W*=Z8&m>F}-L z1bdGYgmg@5CVB;>G+L42s58KXjeZ$*!PzC2l7||eU1t=ly6EL)61Q(TJ>7FDAkpu9J}JY1zG zjmL_Hf)X-3XvGgOw+sgD&cuSNcIv}WhqGJp#L%-iF6iMV2A~ z1hmT+#~RD}aM=$o&!DZ1jW^pZF|Z&W5=|5nXd#X0Ix)hZNs~y3#B#K@k;pgg<~(G^ zqRjtfJbK-;SEOI2!2mSJ#D(W;p~%XF`vNst_qsnn0s^l;Uxxyc!MHUkL6PAJa~h`X zJZfnwKp@8L3^=C{FK7~N#V(cr^3Qr6P_I9Qjq(Ydo(2U)HseK#njU3qD6T!=B`9s6 zlF3s*F~=MiWJ6jOU2r1g?MeWL;YBrixLS!d1qy|l!E#s6AeIlLVt`ln;V22Ww#A3M zfEBqM>n!>g!Zd3DDtUnbIi{t{g7O;wv=<#XmLzwRjWVA7uHX#P!IuZ0NgOIh1s2FI z=%1-AGGO=Wm^#!@^DYP%#!z}_lU805m?QobzuXC=Ad%F~qXncV@%P97c(ZeQDBW6R zCOh7UA{Ag*SwH$-bd>*;uPvCQsQ>j(NXP&E6S03x_HPl6A|&{)_uU)+IMl!8_j7s4 z|M{&fh3Los_5Ss{dzte;u-Ldq1-B3Xt0`$IR>{8(Mfq>V+uFs-)q}^)&(_)6#q%AP z^Ba2?9xGQ%9*cLLZ#?ZSd7NBrT`gQ)ocy@mTx|dQ(f@0O7bwDlg8#e%<-ffO^70D( z&wc;y=jZ1a6hfin{Xc8&f3J7}wn9tsMo`NM|waN+nUhYuz2g85cmMG@ux;V-|VBn8-m?WX$b9e@lZ4;v~{K#gao6DZi_i zHyisEyKZl}cO0UgcW!T{N9*he3mKCRTzI>;p@&!5K*>?qU`Wc;h~w=3Ci&}d!Y=ku zxRt7^XqSu)bIVAJ&%X2p;CvBlcAVomnLMrd1V>4F)j# zpRexKm)SE`iX9R;J1odD&&!c$Nhg9BtVL1i%>R(75Y&&)$p{^q-QT1FgJ8ioWKRF$ zlx5JX;o&P#csvw_{J|4v6^5P^={O_V;Bxk!fMdRG&N>tnQ?_Z_Z%CXH>!ezr{gd`) zRyW-!;Etqv-c2;j>XsB341mYm;*1=0s z&TC+rLx$zf)^#%D)>}=FGV0UWSh)TR0<=iq_l%x2d&P+~7JW_Ji{l()2DR27vy0Oq zN-I!FEr;tC!&RF+6Cv;S7IQ&6Sxc)&tIq87_ShU|AW~>lP7qL&9Ue=KAdy1a$uoP+cRx&$ zgXqm)M|i;lZf;s-gbiXq7{~SH3pOlg%+emPp6f~SgSHop$ALk&?=E;2J5RYQ_nT7K zl9?=EsrA4Vdcv8sd86j!)SGx<8V!~k#kAvp3YQ71A9>{G?OLs)-*4c-zf^!|z#m=T zAg+VC|E6sWbv6G1n9e1$_QKKO`BUTL;QQghCLd6%vOYG6phgDo*&VzTY^t*I*#2iN zl~a@dW$wDv#HfJ;P4N9deUldzK65lV#q#aryHTI^7EP~^v%ypj0%Pvq%wmx(EA9}Q zu!?i&U7OD$J*3N}r^7s*T+u@pJ9ceJa(JzjG^1uOhMXBOt^6)MaJn|Yr_XzQ(lM7o zrhYZ%B3NTSQ@UU7(Ggl8^6tZduVt3T*SL3!QzIIm&Eu0e+Hb?ig@4Gjcl4z+!u@@? z$ywy9V*hHv6h9U#+B?MgG>j80wfBDv0NhkF$YFqlc0qx5KM?mZc`t72bD24{`@eVd z0h?6wR%!-@%!I|}{27o8aXAkn_L?Jc3CT|MZoRFyC)S zMLDPY7fUN#d4fy?G%-i1NFzfdojf~B)2Y5`t&aX}0>!LtpO#Dr!2kgj0$hjhz{3Zr%spHI|ezdwbz8Vea7j$!OO&4xM0S)CJiIzJ2OC>!HX5NAP9Gq8rk` z9FGweC`)&bp9o*sq~^G2Jr|ekx@);^Xq`J=8kKD_J-FAnqqJ9#<1mN!!mC{&0Y~aP zv=cXI#x=HLkBX^JC$6I0P~_WZ*%sG*IM=!Io+nc$X|P$y4bd+i@;jD+X*{6okqM2f zYroVQ&1x2X?3v}!S&HI5D~^BVaCgv{R%;2sf7EY(h7dunpAmS(d+T)1y+C{-hbqLoCqBKCZGQ}qLTeE|I$RW>ahwbsMo%j0L@2Tc-x29~)DY?nKXg!NZ zzc^|UGt5klhW<l%*{mU}u?Uv+!2o^8h+oGErk_BVK_v*|84r^l)xgwo9uvgR6X zmZ(nGhFy=6>cbMesQct_jv}>N?>n8@4jlGUKh&vw8E&m;UCXE3?`zQK5lDupv7A9% zOurorhtDWyX~wJw+`g?*>m+=Ze*0y&>cDkTUc0J2BdUNJ9^m>4#x#eQ44LdM?(2zbX3+0TF?Yl= zNWOx{?|*+jH0Xtkn1?2DW2--Lct*t|RysihURaXfCWBJx-77zCsr$V$w#93v8`HME zp3Af;5P~plKkTp) z&5jnrLEPKn>{S;Y5mxbec6FH$m_fG4@97gqbVhVF zT}C4Hk=Gyt7FoY0(`v`uDw?^rDSYy{=c-OSTMjUR57I!rDvRa!pTkr{6xzG~t(ea7cAee75l~6FIxT2@16PG35caXv@G9-5>Kn@BWvn7lx>yBj`8dy%wOIvoenK`0d-qAwI4`zZnj{y*r|zycE5~~ zYeH1$hmNUNM(XpF(H?x^i95BLUY;0~eN)|S2h#AFP-}FZt7=h}GN5DbZ~p26iYtAn znAGJ@Q;wP8vs3T(*8O0++q*9L_HJ6I%nRUHzZdsW)ow5 zH0r5W?Q8d}WGi1@{3KJiuEUo)So%zkxhjyN;yrQMKs`H2!BJI9WA|WpBSJ9auOG6% zWyeLTZ9AK=KJ3>)FxkqZjP(8Y;HFb%{jg&)rdP=UFmhhjs89CL=WBX~1Uw`#^U4D2 zycT=3kqbB2G9S#Ab$ijv8ZQeg%u4c!idYKu6J%0D_@hcpRUA3a|AKJjoBOWNo5J%pS3s_ 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%0DqgkOY-^C-Cv{?^xK{a^FD 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

ggd*)v1l; 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%0D`+5m#VtT=SFvYMZuW0B^ny+4FZmP2 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 z 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�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⋙ve{*}WCt+5*Xu8({#syXa@ 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%0D-m9`)E+K8Khbwd|T2+`!OTtfuV!~ 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�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

sNW5_E|Ug+aT@T1!L>u76{f?H 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≫)wr}sDVYfG%t!yy;VQ`m`sct6%_U*0{`8}JK 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�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

3}h1ILnB0JyjKX676}s6t9-8m%77EaHYDB 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%0DUa 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 pz4BI9f;puwm2Z8?}@c$nK{u_MIZbtwB diff --git a/vendor/bundle/ruby/2.2.0/cache/sass-3.4.13.gem b/vendor/bundle/ruby/2.2.0/cache/sass-3.4.13.gem deleted file mode 100644 index 3dd0329997fa33cf7751fc9fa0fd39d749128e09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 335872 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

c!2=^gWsMs>wldq$P$3CoE(kWjZ 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 diff --git a/vendor/bundle/ruby/2.2.0/cache/timers-4.0.1.gem b/vendor/bundle/ruby/2.2.0/cache/timers-4.0.1.gem deleted file mode 100644 index 4c72e589fc212d7bf6a02b237fab25a2f453204e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14848 zcmeIZMQ|p(vL$HdGBYzXQ<h`?F z%}q*?At`kvolq!_Y=65LnHsqmF`9dU{JV_#A7f`{2l+4mkNvA>VQ1w8VPR!wW@qMN z=KQZX3mZEdD+n?3zbm2tvtL(d7bB;CQgXNW{oCgM4E#&^|118#=l0)|`#Q# zFd+Vp$f{uATk1RZ3(UyAF9t^MjcF89!}{TaVl8SL8-Y;uP=yO!1Q&^%oeh}C5Y~>3s>mXQc{TXQ5C_`3K6=)pT zGRGdG%-ttdZCi9AXVRzC^84WPQpaZNi!@I=$jcqlcv*?z`qnM^WCM`cdycldDs%{$ zWB|nwW||?YJwx4LI!eW(52Rv4L<+>DpdxBdOagNDU-P$dNk?%#WRUFnaEj&ptLv_> zE;J27d7adBdk4+jH$N+c0Uv=m)doekq1@UJQo$>`uW!V%pN|F6uDxp8&xt=FwhD#Q zlox1k(7|Fr!BNx2J%)=zTx*+tKobt_<;gY}aouVhwfXZ%Z9SHL$KmT-?h2+J+K==e z-l*7oAEGRL>eyi!0#IV$XD^mPa`K@nF~nNuV_DT^p|oVM0+|3PR+PnMxM9thO|i@R z$%HY0TG&l6dx8lH)Wj2(cGvu_xuwPWN%Tx}wua<0iE?Lu+F41;k{GNOe28+f4qA*x zGp-*K+dq_+bgRiF?Q3TYS|AZA?o68aq?MsT;}_HyWh^pwj)0F|KL%az=QlwcKQ(`X=qlmR#&Dsxe5KbuqXFxBIx4*~TR(5lKFz^NfanNW z#rbl?GT3fP*Fyb18-b30QKa)d5oN6$WYYf9knH;=jccn%ne3{Gf@7z}Sx!;l?NYu` z>;HZ{ihEp{59{0s5jEK+{@j<_vu3ps)7oz)XxI3Ia>Jqj!g{|^KH|HuEV>}(vY|H}Vt9BlvL|9{7N|7)NB&HtA^wtqHS z8x4Cyd%;?6v}7v8x+hw5+gq}@W2Rj%tFM|jN59}fEzY$+6FD_TV`#5 zt;>T4Oz#Vyp-h9HedZ`b>M-S-x=y}2z#Ff;o6Vg=w7c8&7SF9VGw;6r*$%g&cYcKE zy5&4za2$`TiTgP;3DDbiv*mju$Ib4`ef{DI$ecHFoIDdfV#eM2!@290AP%pT;1$i? zDqV)o1#IIrV1}}GM2@MxF1i2-;(`B~KTI-#CGmGKc7_wUFFV2v0T)DlJxi0fi7y97 zxhDIG8`^ad-bL@y<= z54R@me8=MpKIP_t2Kb^0%$au6|90QldV2Q@SMd0WhaJ77HL=OT_gG`gIaT_(%)0T& zpc|d`BxA?(c%ku`;VWYheBl1nY6Lw-0AWe|wC}yrG`ObGl;zg3fiiuU@#Xm$&QpcXtUGp)zhR zKMZ=2uzdRveW;}v#84ioVQPhb8;#WZ;CQGfFa9~6*4>rwZ8YC>FDUlIAU>opbQsKo zYVwR;nyy|8{BsGN^pkB(q4or@O#kk#3sf+`#|JvRim&+LE&CdMajm=qgSc=Kf#^3WJ1_(CLyU?K3e0d~jF`8RF+adJEGykwFRrdIuCng|(8ExCR08bSyE}#`O?X^AvV`BJpra#WGemz4 zS$4Vt!pN}Fg*q=8O&UKCM{Ze9_q`e+08qZ9K{j>4 zP7JRhCII_tV*E3iknn;~rIPje2|Jj5ganuLh5piUH-_SnO~Z_!84(y@4uQ;Vh3P#W zm|g-9^7I`Dn7IRt3>H>_$OU0_9#Uo*Na&8{56tby7FptVN zar-NQ6O2Ekf=RJK&Y#ypur^#`55J1Ue+I7gDU*?_=jVcvKr6r&u*|p z?QuYb4Oh#7#RR`D|zvXqpsm#em^%s4w$aa_<3CUG%E zm!%XkE32 zPJC0k^tjeslyxL}_eY}7hzI`@{;GZUjptKr{}S~MGw8#->i=yf`o)3S1O3j+=kxV7Q=}mYeKMmUZ_wE7*DzeS+_GfYCxjC6 z!wDY5Ajbv-P6eGkysvL>WfT6GS_Z+wZpu^O-I?9n%fs94m14!OQ|}ho!eJw6q97JzB)> z_)Fv*4vcX*K3RROq2v;R`W zYXWZVPVKwDvi|ehkL8K%YzTqm#L<)?MW&u%=)RlR)kK?%9 z?$s>e2hL|9>*B@YqWhAn#D<=rj*@XCcz)AVsrl5no zH9w@dyrt*?;KTXj?PYXMcH`cJhUCD2IR_`duh--I+U+a!^Up;-fdE+EU`sfm83k-k zYT+M91>4RCM|(8yYSTzPM1((P{AwFc1|Cd;VdrBA>NTLtP6o>A;t=K6s#ePCSdKX2PgO zpk@!x#_rx|KC6Y96lRht1%J#ST3_zEc!WZD`g(!wCS)rf1p5nhABciN{+ePX0~5b} zxo8?dPcsjLmIS##pt}f}Y7qi%<}C~anKK~?R(;$szU^4so;>)icVD@F-UthbwBr4F zWZCxqf>_S42FaVixB?;TZEgZTLR`-JZX z6=;uA;y`A{RAfEoCN7~`uwXgNFrPRRR4&Fv8d!Jkfg%kHH%t>9_E@$?T*+feo-j6T zgM0yxWXec|d|KD|3r(nvj7$R!jm9u4-dhmyrTVw2KSHaNvxD%@1~d)JU=gg64g_4s z=1bj2=0a&UEvXYas8~fnda*qFggJCwC~+TX_3sUD!lD^^u#~?C<1C{>8wDL)#P29$ z4tq^&f1|blY1}P}X>iBo2<;7Hh~C3HTBoMLR1(eg1r&;%{)v02DBcI1!d$Yyv?`00 zGiZ4uub9IN-#43#ABW%?X)R7;b%_7cYySnA!uC=p^Y9tMiKahgDu2-ZYTbojl+%|? zC#Cu{8(xSnvR*J2=uJ2vr`IWzTduJZ$$(d^Wn^Teey**)We^6bU!-{t5e)iy=x(s=F4z_uWSq!DbC1t=w zIk*p5cx4oEi${W!AEh=utiI4C5Z397{w{JJ6yJoh6j!)~(6T>;B&^E2!bB2DVjV{8 z>~)UM=Mzy#xOcG(Cbnn~vVPOoT)S@Z6p>2IM6w!GW;xf9**BRXz*J4ZMpsC&XSkh* zV{ORqVfG{!HWVTHR(wh^C=q8R(PIWO5c64ID_&yQO!gVgfpkFH1Kx?wpyO~ZS9JD;08Tn0kE;MLs)T;DFY)DG z?gyE63q)6doLpo5>c@+gMY4QTg)!Iw+Ix)ApJ8sVyFqK5>bFc^>FfqS&2jh9q123| zzE5z@HV2pZnf_0IVLe0iDaSfJb5I`*P%d=B-1mxvC@ZX0DI;7&BM`E=WKlN7I`es? zq9u0mY$`660u!f%A!AcMq1W_Q741kAB}6og zZ&tY296Oc?a0pPGNBR9Vqm&JPJ~d>c8C0xba9z{~;fDObOBz ze8ebp*U*-$r?h&Y(7N|E$ZXDsU?${;eP?HPE0B;JcyTdI3WsO1V($RV3}GffJ#rGY z-2)l&Mc0{AYfhleZMFxgj*sW6N9~5@NG^N~>R0g)z}`LN4Ld0g!PNv4OF*ZKc~K9`xg1X>*q_r3Xojxc^>nvL@I~Q2>KB^cLwZUT1t{tJAtVmPErQn zc?J6l=in4Ee3THYshU#dXf_<*nbMn`(0!H=BO)+NRerss%o}kSML@_en_9NEP{wGc zFu;iAo=@JiRF7Jl6*drrCfdNOuMaW9KSeac`Wko(r(Tipg2>gS_M2q*dCZUaa{jS^ z7Mf{M;|*2L^iJ*@rH9ZOA99=Yc%C2tQGq>+{GIj5nI26rgJRC?mH}~1$eKUkUDcz9 zI-B;VCRK|1(qab{%#&+is|%mfI|agUj5zFpuw^I$<@W>vAr`hR2RDk2akR4Fd`mC?6x3zI{Xxx4X zn?h5@9o|Ah>W+?yBEeU{+9qN>Of$r8i}g!Lg+FH%#72tda--z69P+F%FpbdafnK~NCZjZg&wZ6xN3^RB;vF&=4wwl`;5W7Fu-n=ku0aL zt$nNci-BB?t^%Cxa%zKgKP$Nrp;}5PK8lT^GQ&lI$4KKA9+3M&UM1WaCOtn$jhW`B zyR&zbKab7kd5|zd2yaGbG(dy}XGRTuxE=AN? zjq92vttsaLtBD1QkTOEFofWBYl;F>V3y*q<&4QUs2ZFL}QW)Slm#!^WmxOdFtGGB_ zE;%d~Eti#2IP{gS%+jbE+;h;LO>D(#P;wKjPrh$E>Uf(fIN_1ee|AjF;JDzA?a*fY zE0Mg=V}}sPCRHd)bd|zI1Vq}EVj%D@0V@MYP;vV-mGi>)rrBUXZaVVSQ-zIE|!nyg7K*Ts3o)!y|GQE{f7zYqW zDD+H@R)4|NGec;XvY735abXUnG7j#ozY=7VjWexaN z7caAxD@#JCC+)P9JYi#k5UI(!Gy|N=3OF-F_cxKk!T3jfm0UTh$%-q9y%bouR#!-l}&8dE6M|_wcuGN(S1sWgxJK{x>YRrOFT?Si^RbK zM+tuAQT`<1Q=tx4=PpUMLg~P-5@J&)rRY=6I);gs@&jd?iL4bncf_@z;2_0_BApZC z&@ur=IVcCl9OG2%puA98R(DZy)|f_FA2ME zmNVTjPsw-)dDnxcN#Snh>lCoAvb!}&zk!WmYQxG@?qLLs+6)s+Zj1;QWKbtZTS+s! z$Z0gXfO3TS##w-<=op_l_3`KBB`hQayOl6pUgnytzf}2pPh@5mlJ{W|TjM6xYWjHb zG5a6Ni3);RX3wvYhs&tkNe~&Gu_i@>l>VADOJ)Ztx|b`81-~3FUG@iY(UDx#HI_At zH9bz-_otXoQ3F;#9#OzX75L~$-Vd8uz``?o}*mL1uZkJ~&?`5c<~VH3W(JrPo^ zzK^{~X`exvMwGE5oekzDs5X>zhP{sCU7GxpyvE85_o&Zwu73*{z?lWr5&q;~D{c8mp zzTOb%x_s9g)&Pv$>jdwO?;TULBgca%zL&8)q_%UxBIk?e*bGNupXh8z^|%baappVr z5^0;vFG28|g|L(I_^pj^g6D{PPhMzRZNwip4u@8S^@BZQ zZvv`9LJ+w+RV+!YXY#fNnFqcU1QR+(Xk9!aR)}U;Ys=HXt_usyumzB{fcWxcri^eT zV`O{)I5T{8jvr;l zLn3#t6t&Wxl2G8MfMm9fkbX6pvKic-FAhK?Rm{7J#3a->X1oqp875^X zrZ68ZvlIJJY4#8lmS&jz(sf|tV*V`-yxM=QPKf1EqfXT%P3T%dpX`_MZ5g9+f0}8 z(#Pe7Q4Gf9rQuTDZ_8Q?5>D}03C#FUG7c1gR}**jejo?}H}M+EARZH?~}_y%)xOHu*LPv!C^`xn-24jXXw@z7Nmm>VuX4RJy8jRW-| z>8J5n^@ZkPCFLxw1w*m}HMaYwl66d2cV-afrn>(@(_?FDvP&!9Fys@!InR6UoBeQiR`uSF;EV-<(k8hd*5z$}z z3t2ro#3A5lOFF-~TqDB}0xY$GHrk|$l>%Vh*!-)N0Dve#k{8jm<8-%^$W0eI^H8u3 zw_25#{-P`7V(`;{`;fOIFP~=MReYC}hD=3)U%K+#3^)_+UCc{4U6wnijxgSj@Ru%w z=n6uBsMu(#6ZS>&UMsOc`c8UdY-IPPiD1E!kU>O$UN-T)>Y)6i7!^Tv+{)~9d~OUu zj)GvIW7);6*g2xq(g&juNO!(qjKzc#MfUj(xi46w-;@qq(cb~y&A$0DzZc0|Pg!bU zT^(?;(DAs8@c$`~=ieeX!#f+MSdW3M7Jnz$$6GnZDOG>v)0M2qMVBd z0Y^pnRxnN`X-YIdw3G^MB2{0)VhwpKF_u5rb96JSCp0E1zm&WoMo)q?I8Xlwm-P92 zWYn?)m0}lvr*q%MAHL70Q^@#hTbn-@?Rf1 z%1o%Nh627S@!GxR0j7SP(lpSp3f^@{`4VIa`^)SbQbq2k#P+|=>z#Pd#bl(nIWg{C zltK<0ECYqeq=}ZIx>brd&=?E+ub!40WRH3DKny0-&NdBSEJ zZ9cM~Xf_PLm7JQY%`Hf?tN+W;iq74QTM`qu1)Mowaz8Qe4-;&{AIX?a|DN9?q*N3O z%R&YMg%ze2*V@9}^BAh~ZD4o#3_eB~Q?9$aHx$5uBXcyM`#bRC>+=g~>+1Ub^Q1TK zOY%}Nhf;Qu&B!ZVA*jr!0C|ELz2wZk2$M-BKo&<+Icg@=Ix9yP;Aja@FUal&)92Ed z?iZz)u*Hh!J6eviGt9?R0p{4Pc>HZ7tmzV_jh|gT$qG;dAKdek`4$WX=CtJnmCe7G z`G2Nq18WGo=xc%hJQOkYd?&f%xuDxO?k6yXtJE*?^g7`Y&`9@Wy~_npC$S+(*SKr@ zS_zkAmg@?ghqMOIyRg-uOwAe0DpOD^ah7#i^X}?xHO>DFaCdDQq#3?GqI)lT#33oI zHQ*uY;pZp#x>UqIZn97Q*gDlp{4y9$(Lgj zImXKWrh9|@XA&Y7Jyda>dD>(F$u1gW*fRASc5j@(4F{O$=#Dic69QIcUB1P^?j_$s z&XXubK|0sXZGkY$PIt?~fMWldJBgpK23Aq)SIo3oc z7^|lu5cyz)BxiEa%EHie#TNMSZBmGGSk&J{RUyj4Ryn^xJEEY!k@0|By;v(foFG9} z^)SdKY)6~6GI61LN3q@MnwMFlEB8p@H+!n4*|Zh71d!I)?+qw~xV2i0%N#tnO-(L1 zk`S7BILampCE5PTm(ZyeuA)-OqQpy5VL^Sgwf1eKiR~4Pmnulz6EdpEN7evX`(fBv z4pl`XP|+ugrZPlq{<}<8Lc#t}aT@ZmdnEdki$bK78S9?+Mz6^T6(ZAxh9E~C(IN2` z;N%Z-y0KyOEC6X113RiUr!*~oOmf}xOH0)4goPa%T*;8wW96FA`o+$KM6rx$x1QWR;VHj+Bb|nEAkW!M!NcFznu=h z$h4B1r^e97%d{~Cxaioko~M>hzn`Oqxlr*qWcIZ^#g?~zW8*kOuDc`SI?7PK-kr8)J-fLSxP!a^1WNr`B?r9k7I^@r?2FG2}Zn z2hU+gTO8naF;CCzv+kJ6<>z0U8ngj*OnoGh#+XdI>628`9GPEZwnR-RGFxSqfO(TR zg%2lYhc>NOC=a>H+Su7#x1P|DVHZUjprDg(=paarNXxF zKq7&b{dsSCFE>8n7=hZ(_q`w9QXxBP$9kT4)Q9I;^hZ5VP!_683Vc(oH4w3aMms;G z$HIPMnO4!bL=K>QT&a~O3(o+0!8R53m$M`MdM8Vj^LvhcBPmAP?MYqG6jrnGbuqLj zIG8Yw4ty(<#(_sXEAG}OqG{$9KbpbT;Dmvd;g1#m(c~E&hp6sS$e*lA08U6IFDZaz z`a$}|ZKR|eETE@0ya^ViZfRO0z>zmeAVS~c7CIN2NdXEiN_^mWra*j{!WS}o87MGFMwKZG2m-US+RoXV*9J8Iv<}ALP=Vv>2bMve_3Dfx;z$n4m?V7)> zJMY((*+O3u>8(GQ_i}*c@{P;go+q--Hc0&{Fjjs_gR)U<*ii*! zATx&mnzm?yXs(+uvjjLRHthmUcsV+Tj8@Mg1C76qb`wyfci&;#w|oUbSLppWY+ok& zj*fNV+LB^_!PP7<;w0rP70d2gQF)?0KHI_lBoQfV2gza(UbJi5ux_xCm@vDZl^$bh zcOJGsGQZNVs=I6QB{Ji$XV7HpPA+nFZ#AN{Z`Y-@=y+@|<1Y zp5w;loIQ7U>&%NQdFm+5_Sw?2u#seDFth_yAXV4J(Dk%!ZJx~sPs!8u)2$OY>mW$? zLU)CQRxSm>X5i&DGmu-ARjHF78~VjWV{S(|s$ZS&MAGpM(H`kSZD%~h?zI~8m}YJd z&<4zy$*--SQUStkS@2X%IWx!ynm-(B!qIRnEJlE0KRWAQE=OQ1O_A_rcrEf8?v) zO@8Y-jy)fY#G#cZPbd3B{V_FqpdZSAl(^<6VckTPUHd~P>qJrD_iLiS;(+gpnX-e* z3rRta%bdRzpRRQq0iv6_@OwEs@CQVz@1tDNaO=4a;31aXJ!HAxFqcVOLSSvAa@Ft_ zzq(0dpXZ7_Z9CkXAn9BEn=X=oFqDJ;${OOa-bfljGZELojGcl;Zq{*l;g6H_1NUj$ zkwOA~N~+~^CTe4AOqcC=jGJ*xl^(S!!`7~F+XD4Fm8A5X3U6o{hiOd4)AX$8FxRZp zymk>7dWOF)@R zAk;!#J+QNF8~8$;H#pk_F1_l9A|jtf$f0? z>VT&(1(^^KWz%KK5@)EV<~60I%F%c|`%^hIr98NW!?6t8K~kR5x4W!KN{9kY^5K9a zdLL4c1Gf4+aPt|<>A-35H1?i%Td4t<<`e@}6@-&XC&q7-f5(zDsIT z+p*yANjyeREDiJ8dH;sKL%8Y-I4Z-dbR?pSR=A$e+{1l< zf?%PcYk_MJD9wz4H_jN24wlcKB)*%nL|NafLgzBdTc*GFHW(;Pspd-!6*Otu);drGD*i5Bbvb92o|>99LItYJR{^FH;p? zDB9XM!mrl)PY)I})O<*!T|riPiL)4rqs+}BNt_~;O?UFh<#dRw@;r`Ga15x(*Ka}) zigL<)idYXQ$WIY7v2;KK|2P4f7|SoT28PP&!h5t-Osu6leie3hCDcT0)C@G>=iToZ z8%B18y8toXn5?B$WE#11E22Xxy;3=zDUYw>2x=?G-z}Z_x;x3mD0@}Sf^isAm7%Bh zX6XybE#wc^`rw}@(Pj@bgd?(2F}dYG=r#GBW&4W!c1E%8{5*ZvPf$VJ?||xMDJQ_I zZ!h4E0qJ*9&JTb#?I(F_J`ELgo->_1r`=f6=V7;Q#01&TJ*K8T%$2T585tg_V~8j< z=&uy}IXP6>!v{XDCskFv^$7bwvO~mG`HaZi`z3A9S;cYnSNp;!oRwMS>`kgoWDh*z zC@>5B@A0hCH_3R$3)Odz${5jqv^$`LsO^n{8L};KDK)i85Z`u0o_PJqGY(&Vxt!Pg zz%MtZUSQ{v!3dD(uxac(?xNn}3gm{6s9v1E;%2u=41yoJG{CImh_48MVW8eB+oZ(L z>0LD}QFJm;G%#0gg)MlyX6Qi4_`5M8hV&1q8Mw-iHH1%=8pzX5Bl4}wKbKR(p1VwI z!WNzUE?nE=#-ll1hu-S+n4&BTs6)?Xuedp=zaSaxgfKYu3&>yzzCF_QauAzDd!sv6 z)hI$I&gYCdoBsZu-wy2vPD4Bi-}?7EM;eF1X0eGP|I@-!XyHoYXh z7|R>#qIdJA{7Tt;)kLbvRGRmtsfJ7SjN3f^f_Q|$&M1fLqX2;zW#8m#6eXjgkQ3vD zvIaLZX1#WzrA$fjNDj-KP$o=Q^ev`_U~bh%oN3#pJ=cn5gHv(`WjXVwJ>aY7O?`hG zwd8@$3GK(fd7Dc9QA5|`n&%`1rOBfMd{1?it@mwPZgl?A@>|Xed;j$NN9y>G+yx|o zkggD9`d@XA|Ed3P1WYV`n^-%$+B!3O8rjePAKH4@cCKGtcN%#W|-6lL42>i0Jn%<-zlw>U-Zlh@4hOE&vwrija7nN?&; z&eGS9{|(8AYE;b`W@&#(G`bsw=g5m6?5~zop4jm-WQ|Pg_or}E?@LslN^MTU@0*+} zve|70Rqe>IIkvnjzHPx^!P3DV3H3QuE0wLCIuojPbh&mI#z3ps5SK%q38hZ6w*uSy ZE(HC*g7$v~`40mBLEt|K{Lew){{iyy=x_i4 diff --git a/vendor/bundle/ruby/2.2.0/cache/toml-0.1.2.gem b/vendor/bundle/ruby/2.2.0/cache/toml-0.1.2.gem deleted file mode 100644 index 3eb6918a4913aeddec45ecf3e54a664369a5e900..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10240 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 diff --git a/vendor/bundle/ruby/2.2.0/cache/yajl-ruby-1.2.3.gem b/vendor/bundle/ruby/2.2.0/cache/yajl-ruby-1.2.3.gem deleted file mode 100644 index f3f449b5296281a5fd7ded8db7b08711250d815e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 550400 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

!I={wc=U~+v3#11=-k)b<-6xmiVXUN znF5RFO;i08Bv)BGLNLpOg@8IQr_X568PwKoU7tr$1)qkWE!s(JMV7v^Amx#)SHEXS zDOagn!7}A@@<#@zKW3UHC|KB6>XrK~@Fe+lOE97X3YrGBH|I!Ef)WL4kJi#?_a}Z= z0yqZR1@owZse^O?rFc+$4=m=_r3Pk9*Bwk|>BaC<1}QXO^E7`c30^)VaIlOs-^DTv zR0&%e;0aACmjebE0o3qUW<+UZjYcRGxmw;dU;{;w2rQI>qV+?Y)5&UE*QoXMJ_*8?{4s?kSy5NEH=*$H+9W5yv18@W7B_$FX31&@@q~& z%??9Ff1t00{#%fcr+}m8FUF-OuN|dIv^0++KORI44lNn-K2BXV3x5`K$1v6vK)CM& z>37+Kri}t`4IPB>v?S{go?CbRU3C!dc}J3y?`;wL-`jou!&DHAwKm^&wD)Fcy6YM! zIo^!31O-b{L5nz)EX&$x7k^bVMPH5`FrP=1nK=K4F4r;U5XG2YLr!6}36m0d^4#wK z27a^0F%>%)F~KQWfiCoBAJL^TkXpksH&y4NYTYpBd=N(BO&p^E5-W8vAud(fJc*Dw zp^8Yo3Q=`)gEF}wIV3RjcrtPIp9q*ttCS!1rFxE=`W@6;p0T3Bv=y$Ea)kA{C>*3& zSmKY8nPqacM@nx$fo$7iXKHM_4hd!>=;oUL%ws>T>y`Rb=64URpD4% z+sJ~@A3pqs^(~9DwMQz3)6qq1Hwb51%*n~sPwtO34UnZk2;9_lQwf2;O7%Y&UfN2P zw%|xKWt5_}<@1~zBPqoTfk?ILTKOj%fZAh<=TO0}8sx$C-jrPn=S-q)G5m8MWk-NYnN61hN*i5}_0ce8(*# z=k2mB`mLjnwepsG$wZ~ehT7Jq`%FFm=u0X{McG3wqg9fYtR;diHn`4iA!);IXeV7{ z(51Qyy_Je?-747FH!a6@$E#3QW*;A$$P3*s8*|AgxyJ!y*sf_P?}MB_Jivq?kH>qY z8MHFBgO9RR&uHnSD$M-r9ZOD)JLa4}9Wqt+>!A`_aTLcjRJYB|zn0 zCi_v*6}=$KOoQ##-x_HB*mi$r~>5k}6d=WmGYfTPvQU>#8TK46eW3GTh8JkKhG?`e}RRz>7`Qg2p9 zkZn^GjrI?w4HZ=@hYxY4?k^@-Vpmjt0Uvlq)LG9T8f|X zz&*n`NkPt(!1s|%QkBJ4Ivq$8nx}ayWKp|w%IwPJ1A$TI_^+!qVCcF5?!x22VCk&i z4^ZF=22mK)Zv_%CCxt0O7ev7bc>drB=M=(yxOy(_L?bHP|xioBO0 zjpzJPRa_NF$QAmPaiS)?2Qs*aWvIvPre=Dtl>$T!_~%%b`FN1uCK|~Ll*ZAz#>vTC zw5~P%km@Tbjl)2MrC@g5R^Q#5X`wQ5LrZJ|h zmY^jPvsF(@$K)A zZ_�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%0Dk+8@N9{l2P9w#* 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

@KbnL0GW> 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 (J9{i{d!(^mfm?ySY=Lv;O84NP-6G(Hrgzxmh2 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

yUt)t6Y+F_a#fnY$+7mH=G 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�y_s*t}o= zcK(b1zpuSgNS4)wBFA#AdviF=Inw*j{d!w#cfMg|+uL4AEwy&_J~z*wMBf+u-y4Rd zef!py+%j?K>K;r^HSaG1P@FX5sB8bFv%ib>nClwq@{Ww39#*+qYRydz-~5v9oZlqo zSd^J*-5j^=?>LVtlG2|m zIc2Ch`ZeFNTTA}Mu(fX6Z}JScJvNQ6xHebA?k6)@_Zb_KD`xlYT?jZkVBGJ3j;r^7B}G#U$TcQCa>}eQulg(yArMlk;!pC#rK>8#ul9FEpUU)_-#-N`sNvBpS#7HSB z(_$oIm`R?ov9qoX=h344nd#NSBUk;&H^#%s?+hygwuw>GVt15fuu)*0UpFn+Q&HQi zPQyrVq+$2iJhJe5yMO+_JpYH!`Gc!4!6Ox_#-$4JBayUBqg7)#_yEU4^_WZ*T7)YV zH?0Glyc8CL@edT=&)fe6B!EGo{{xjyqp%r(bugL#Kmja{!u$t>@+k&Di)&CdXo^mP zVX`Zp`_T9AcJ3?rc}9|BIF5=jVx?=aGU6^IC4ux1AqkX1_%Q|iT8e=cqEry~4OGfo zKh)>od%hMdAW#qnx!vEMk<_RLET}@MTwJJC!>dS=M59qXe)I^8wni!lRh9Xcmq01^ zfAk32Hc%K;)+6a71*Ur>6)531YTWm4A)`=&%0!_mh1l0LtwN*L7y6q>%F2MBN`>%u zc4h7aHSl{&|LTy zW-TRM_?v$Iw@RW^5dC3LfdC5gc)sc8>-qBaRRBH`E7j8TRpb9#Unr8wG#HGnN#bLe zx)4)Y0svyF0>(2f*}zAWe6NTu!xjuIDDBX4p%g69MND*Dwgn- zYKc-Q^sk1G7_5wxBwm0ax;Pr}G2cL3Q8t9MMuL&y#z2NkfsDf@lfi-@YkZ9+gJCA) zsDdoIxMBGBB;R&K)Qgsi3w^)^A2LFj5Z*wBIL9}cN~47`C|o+7#r6MOoTKZ2`~x$E z<8QX1OLyj5-$>5)5G@Wc^if^W`nwWQq>GA|QwkGv*fM&IM!;nymlX2OyK?*I%6W_5 zOw`5AUmDcrABL-?!k<-Yc^of2A|_dm#wDZ`k@4~(N;GjW-1hSOMgr=4d_{e5Hm<0Y z_+E%r3id4#Sv78f$a=KR5DZm&R)Lu?N`7O(IY~&QiTvt z6)TiF8735Cj}atJ^8iN#5)4&=Ed)F)K}#_NMWFO5MP*=b;j1wnBEi7c0$QSgkBF7v z-_X#|_gCYM)}ep%^PkypagiwuGL`eXn)A&jQHrBTa_AemB*63#=f~Zml6iAfigJsR z^)YyEYIadvY%znC#}uZj?+%sB_fW~aEmShIIBXtW7|TygW-_&k_{1VgcF`T8@{0O` zKxJ-ZT0~Y1OBi053=W(8WL&|FR_iW9WePZ(5vc;8L?;0Q^bkNz0AYm+)Jhy+(TBow z;7TxD3MDj%937BrAi8|#2EZvMKtc83DIKcNAW{u{h)>`T6R0r_5=#8<{4wx7z&frK zNMIQ#ge1T=4u~c391sU?fXV>tFaRoP@1Zh7izHmYWPr)}Ixv}2UZleq)cEW&K|Cje zn#qbzikGE*jhIZ4#Al_5$q}jLtoT%%D`TlRW%=T}!{in91%b)p@?u`Do-2>fV2P7t zMdcBUvY6aUF_{TZK_Bi=KCYB$H5fSZ)LI#a-vca5Ee2o;$4Zlwh*FK93O%9(9aJNb zoFOP+*Fppo1~CRsR1}d(OSIrQqSuHB{05{?C{hD-Ldh6F8$*Psq8P(9z9ZQ8XJ~<< zK#`}^`p}#n#Y?;a9s{hw0C=RlhsPLHtw%C1ATq$z5K_AWi2Z#19kHm(K>ukK7yNiR zTUHibl$)918bLiXBvP6c41tyQbdW8X62?cX_8WAkw|)} z27t?^u-ROgzJN+&bGa1uI~ssksZfY1knD4n%8mGbgtSyD2#LTHV3_aIqBAjt5L3&P zQpGit0K~h9@7+gl-t@u$BifLxS5ee z&k$fed~!X*El5v#T$hxcoyLmI%8reN;!P|wCRO*PN>7*X)jsJdDmE@PHAk$^Q0A5k z3-jVt#YH809_fZl%_k{cQFaiLQc@u!N?ul8uF&%{%ae4O?C3~wq4+XMDGtyH4M3=$ zj1cMrJ|=>aP8^hVprnNIm0Atp`B3H|s6UYW5Q$O;K2i!H4bh=^D3YmEBH(Po?)j7m zs7wwI0~DO2LinN_lY=cg6oEof93muC7nqz6YR0irOpVHrVt{xY3Q%x=eRu;|DZq*g zAS0?Fwk3Eqn82b%K1_#O9TzB0Bh;m;7W~ui-rUk^shrPfQsa~ z@|cWBQ8BKLlBlENQEhVkS9!GY=t507FQzQ7D4oxgNvQIyj10GU({mMZvwP;m1xATetp z?H8%B5-ku}WqJa9paj3LWe*uL7rYJ~dz;)Tw=hpe?;TA5>un1L8tuc102Y(ZVY2;-0Q%=NW#BNlNTO6BP|6fY z4yylHZ2*nPPEEOiHUL*C)f)T;HUXdqA^skOfF4}2ifJ^TPT=h-Uu(gMPyK3v0QL(i zE&tOs^SrXxr!o9HD3b*#xrE0{N(s-<=4utmX-RyVMx%RQVL=b25t(OM6tF8$scb6u zqKZJG6(gVtmntf*LE#19eKP3Mt#NlYheGGDgEkJhd`!MZ;{ZusW)e3&n}Kmy3|cuY zIU-r3r+u-;0he#9KFOviF)yBmV}+5)Y1k!UPNvRN`dPD)a1du{PVOe6O2Jszt2&DQ-pXlSe6ao9R2Gy$J9R?JE zz|-(P!)Ht2HxCeDx*Nzd0oK~(@(ksD1Aus?M1iDVkY)nR&ey>y6uHGzS~k0kPATOk zW+^lE7)6YKv7F*6s;^G)RMIe{bBG{s+Sl$hhcSWH=AWsUglNlQ$;U=VW zBq_`+s=loJ@*Bmt2XX|=AtBtWfaD_s99ybT0IncZh7#gFj+Ftq9+Apb;5#swN(Js? z2mnKTaMIxLwq5~%CWBNTKunJLIRz?I681D0VEAY$r~tecE>r4?lzg0cL=RX6p)-?7 zi!sRhRVsi#ff_^Qpr9K-FTi380KNCgd=c14Bo~kuV0OL^Em>N!CZ5Ms$P1&j846uy zdA1-|f{MS!Gf&B2mgbZsh*D)SnHgxFE`gmd)rxP3yekR~0(mrQMmny@h%YHEri*iO z^Qh9ubZJ_^yL@QWhKRv}*PNTv5Qb+EjS5sCQQ`y!^#G#y>r=`1xZiXw6iGw@>;Uig z+1KC@Z)(i1y@n<>V97w>MJV}7z*@jR5P2w)it@pGu%d5Sp-7wtlnx%h0pq@=u?QVPa&XB*Rb!uP}^%0Q~yW75M@-6PEN}%DN4$V)T&Z}WXhD4 z=q|b0r-oALFbqDI!lqDZTsoKe&c%K>sz!L4ONajx8ufqV<$aa{$Uz|)C0ej)U84@- zam4rdwJ-6Z?HQ^e!(T;UV92;{U~bQGfWczXg4GEGnEp?$6QJK*KGHDCOLOyLOY-D$ za#{|BoQctjsCOqH(chDg=pQ2=UA|BIy#DDuCL*;y2 zDv)7#0SU-4kr)Pe1unTqT+LtHS`d|5Du8$Q(18GmMgTu*97BHkf%pJL6jA|pK^#+~ zd_<_0DvEJXuSVk23m_t}wG;RHYD9*r#hCgAqEmnscx}4EN`JE+k3>D?*L>N(&WBMPDR^xeB66DN4>2q?e_tOLS#aYK$gAtK+2IK18pm zCkTjAQ>aOzd|50%t*kJM8N*BWrX!RJ2`z!&O^0CoghesH z5p?uHeJTN5B^BriBO3s&P$Y#=)%jdi0W`0uCkSY&g&FaMMKWnoA+3xlmKCd` zqVmfwJw223(BB5&3b4jfC1Dl^CLF9qfl^Qm%Y?Q$_YmT^gwnVYph*sZC-w0oa8Sy@ ziK>LA0Dh+*0r*y|^c{{q3p(O}^dF56!SjSJAHw1xJSeeJOaa{uRL}@PA zOR*aT5@3b+njZq1f5j4}`Y+=z)^`rGNbuR!_5wIKzD0oOf2vkqtnc+^06s&a;fKMf zM0m;kJf@sNO-~W?HRT#CDJ?m!>=N4nMktNTfT8ATTpEi)W703$4uq?f#bB3A2RpS| z7_0#SpD2W^CJMPVg#n$#X1$Ku60G7Nz#x5%9ssh$XjXKQEKX9$m1@K(SV?J74(p4( z(!6}L^_w4;B}J1lxgtMTmsF-o6qd1ha_l;y&lL;JZ+slMSl@UF0G^-jHz@$zN^x$>15vAlCPOkA_=T|h@s+N_V59=MR6|(vfHJiTT!jGy z@?`+ppjf5o1^^7O;I3_^93er4Na_Xn1(=;L+pOoyQP$nzv6#SPMbIMCG9>YmJVs_( zTqZY1!q?pfBCjYp2tPnFaQzH=)N18y-ERlp$VliG;40eZc1p?Riu3CV~c-x)e8ny^r4wK5c$YMU5 zT7XGqApVQtkB%(BrEzEsD&q!9fg70TgNBFrFTk&IgrU)I**3p0jgpYcPmuG(X;`9K zkRnEligdioOb%EKHWdsJoynoFIXDe46B zwG9QXvFdzM&K1=JA?1|iQzaU8Ava%|g35)$3}s|aQpu%KPBZ`{ltRv9l=&|kefE|* zi5}V}%Mq}@N(Fv{e^@c067YRhD#fLQ90P?Ec%b=jD+Edf5DYLF8O_H>-na}95tE3x zgJ35>W#=Z(#GR%F)g!15)!%@11Xz35jwTqdl}S+r`j+p1fa&=J#DjWsFmiEPPC{N% zf+8Y`5v>bPOwN>w^mpgULwyg7)Y}3hUneTZvIT`Ku|~-)j!rHV=IZiww+_ZDstE#& z3Do37VWudP8YeA}BC~M01kcc3dhG}UgeB&Mg@plZJvett2F1RPxx#LF|_okk|eSwC0UrK`%aph2?C8mRg^|A3a2UANwL%yY4uRw?o+eFN)td$7$!p^)LN((you*QfW;TUeC~bE10Jdd8$$L4EC!gJVA=k) z3Df82`phW4fJ4RvXrdNPj4Vn}$n)5D$@K%*_YT)*&_6naAeT-3oPh&rG%6KIRmzHk ziX2FXuYa~ne^_}4Z2R>h2Y%qjKM1ZLmm68e7Z%H+^HbwfVq=qN>WuPi-DO;#NoR0q zEH;zLq|sR%>cz|f5rmH~*pD)Gm;wm#nK~sBB_phmB4oEg_|vsG4#eu~#_{t%e*IW} z0-^&rSwplR{6|T~i1w2OvfCv3Fk#M3L;D4ou}@C)ssA1>HEu{ZF5gvs0#0gTd8Q;U zIyvrSpq5dSQut|kX_@H}YC)L}m2o0Q`Ul`y=urbL&H&v8M;inVRGz_a5up-B^drn}UYCIQ z01PkfA#C9TggQ>+yS+!GqSxPD_=2eJCgC^&EW*n`NhMRc?}HLZkAPraz+`|K3X-5- zo9%pleojx|(4v{CJbFq-7KfZzo)ak&$KD}74_x27ck%SM;{s4AA13H@E|qZ}+3&N4 z_G8c(NQ6?YkwFbs5H|WO2Ad8D)D7sm7}W>Q)OtIStaSImzWR$Qp}-ns9Y|C!ep^2R2J*4ln6lV z$$&mlIpAcuxfUTDQ!7weNGvQwgI`0B;Clh_zi=&0f)2Eq4E?ysI?(3ZOA5dy6fQw2 z3*BDk%#-XI7Fx6T~v>-29npKpXOU~ndu~OFMd%91`DiMXJvLf@O{KEJWE;~10 zn2}JDejUnl)dKTLRaX=pgj5xm6;&L?$z*4gM(G%dxfwYbDaDEpB~1dqh_s4xF^9-s z1i{FVrDVJm5MPDuf0B^vS zz6XMs9PF~#n^b8;RsMTQ(14qG0bIV|u5E-Ii=l*P^+lc&V1E9m9r7nJ*SQLmc)lQ0 zlrB`@++?njrN$%p@~9Htt$^~1qJscsVPq*)oETA>E>kCFmX)P4GjlmHm-^?tIYWuK zWB#CKrBXgXR5)ZFJ}7BkUsS#^2#}pe0a0o-LM1d8Pyuw|4-plr2J@tq5%7Z#@S&NX z3gY+N;{X)_Sw^8$Dxe7fir`v>0x%_jY$Uj}g14X$yd<25S`Pbp(fl~TG<_W|I{Y$C zespG%ij^qkQ_6A#*~xmH?u&KNxeACHRz#wb8<|-mjFNkw`TPOpiofz+iwG3R36rQFQ3@>m6b;_3SJaMIMnEsmxPp zDdI#t>n<}21g`JhaD>#4Pc6t|aJdv3ok3?aKW9`z76*yJVE)PsjT*x~+D3rEpu*Je zpUp-9v_FJse~7RBpT$mqiY8Fvv(&NNv_!RB!Dgi^WM#>`%MuK7U>rgkol0d>SWE_u zdojVFZyIjLCg9(5Zb2~|r`xqXpu&&>bQX&S7D>>y2LV>W*BFiP6FV8)P*}QroAwDy z^zdkATv|?g1j;OqVnoESSSf7TbyNv~R+&#wx}w-Sbt>>H4G3vTNF+oebO=yq@H&{; zn|&k{L6VhzFJ^D9Q8HzP5#)RkIg*ifWB6TBY!L8^k0!H4;TkQkP{vGWF)48+7&|=xPr)?= z)*$a27R^NLbvXfC=-#8lq-yYPDL|t_0ZIfE<^})^u-+~YUv`PTLJ{bn@B;V(OwZQ= zKCzHbQ)N+f3OSxz#FHrt@!}-$R|!6mE<7?`FA_;v3pG#;AW?#rg~B|#L~KtPv}(}%jP(FKwTfZ_k8dBeH?$WD zu;ebc7oxqdC=g%*DcE}u{sjyMn5AGN2!0IB`uvK5(nw)^YHE5WqmY%U6i9hdvGJwi zJIq@UxW0E31+=#v2z(hRu2vL)p{H@VUqb3ZI)#BmYh@ZDSU@n!0w#+Mj@O$+5ri?f z3vUoc5Og8L*M$!+WGdUIFL0TqX_?|cx!#JjxCY+E z5YY{!3LwVm)V@#${&naN*Div-nQ;$@DDE(*A&x_<3F)~CLPvy;M*S}l*Ery;A*{#s zZ^BFCDy0TLkK-1KM3oX2rNr$Lkmzs$swNE0KhM4E`?1-vay9xEnF=sbUk90rm*${? zgd81(npUJtq$iY=lf`*oY_yWAU|CAe)T^T7RYhfVJdP=q$I#{4*xQHY71aa*%fvV} z8CU1Y?Y&cwZb8!~`nGM`wz1o`ZQHiF+qP}HciXnH+um*K^cQpS$2oIxZe}7TV*a|R zwW?xOWMx&7ISzdSu~kVvCWHueYQ54xiWJ$Ny>A?6 z{@(35Ok6p+1=?l&EVWPtoG77TP=*}P1O8AUbqYQd1YI9KVl(Wq93{C*N{`oH?Jocn zH5 zjdBDFG7Agnuwx{qUxk_Qy&SrjhY1oUkrJ$6b--~rF<%|bfELi48W(k_m+yYUDF2H> z*xBqf_-Bu-5OMQOD6QyUhY zO&5XeII|5@0YJwm*3AkL^c2<$gGX5FOt@5RN;3oFmdU@OyWNCgLMJ(t@@$GE#FZD4 znwl0+L^WNs3Y#g@Xr(%0ZJcu+kCUux%ZVX7#E?bJlPio)r*LaHTXhmhjGT={(-MDM z49EjrGWF=l&Y1whGZqb$KtYe*QSc;|BM?=sZ&n3YlKsLJ`qn?uVK_0Jv5uqQkGf=4 zPl=YFGosEv#WwB~NX3c4ss|{f`fXqY8kHgl^c=7$wubEqmq9h$fo#y|iLk8bo>CQE z13F&0PkmDv*;KR1r1uwz?^R4K9UnxTu&$&2(ENc8WsS}jUnQMC{1B0=<>3;}QOHF0 z?V{{1{7tB!p*Jx(Dr)4G9Z&xEn7L_^bE9}cS}|Ri^w%6B(t@LhIW&TAI^5nCA5c;i zK=nowYb>Sx_@fe4$v2OUUCM+5u!WBZg>*}rU@Ys0uN^an=s({-K59H;cp|NSXBYd5 zlh4@K2@`K0<1G0Gf@vsNDX=TmiEa?o15cTFrU>Oi#}KJBFir`7Vs$`*jLgGX*hcDl)!u@(y)AvSOfFJ9HmS6%NmFZ+1wkS7c`IYI@ERJiovNItEhfTml1Iyk=IeAm~Nf4!=E6;w)ML|k>v(KGUi zH%61JXPpCzyn00)V)0;<2PP85N6;z? zA6!ASJ@Q|U^-0~P#aIUUJ+T+VOAa|g*?N@`C{}m-4?32tx`QYF4XaV=K!LS1BCZKS zt}-6*_<1!8PQ*jmptp2@z28B>03mLI7#ii<7j7&XJ-jsP*h$mFku%^IWnl!ceG%_~ zA9?7Sj-QaK7}`ojf)Vmtl&CUvZ@G_^aEJ=_HE8zpWb1n)t#&DGP^Cy^M|eO{p!Q=P z@sN_<6Vf;h(qO~D!@D98cs^NyiZZ@@E24a8sQhpW#~~UJMHj%p_UKDMq(blePS4c0 z<+Hx_{-bvM6=E#nq@xBtA<@6CqUfe4#YCYjop5Uh6swMk8x1a}Ms5~f*1*iFlsy`i z52>Q*@pWV;To_dVm#+=Pin*q0B2Mih2c07^1Qq^n6ALDBez78I0@&x3>6Mq2l z-!M6Jg3VKeS9Q<=g!o3VY9lbYnZKhL4HJxNsXg&C?W~d{Ipb!^TrS|@k_E~Y%~5Xw zusJGp!I|p%=5|DsAc`}t#EdW0-LdF^@EB4WG!vlPnX6Z9#&#F2dguVa;5S>THf>S7 zV{I|3(8%QM_|#$A#CZ1r!z$YQ-S$@AdJZyD#*kS>#RDcEK3*+dA|o5tDiN1DJ(IuP zbDt>$3WpSOo_gUV9m77we&;}Tbs~?i=R(O0XoCQIP)06lgc?{VoCPIe-%Ri?q=Z#^ z(j;P#Gsw_?%eU!TzPYmV6q5ZH=?b9arD55jkg9OxBB096Bv1;uJ`qDSf$?CyvVEw~ zya}_Sl>tELhMJ62-PoD@y|GT8gK%SV0iqaviLak9DIO&XZ)()xfctw_5xb5Ye}OQ|Zb;mGG~gAsK#4?-tcU+RdO(o!-qI~-uI zgp?REUd$Owe5QoCi<(emMNF5q8w}Ai1o9yknP<+RI%or5KD(nCcE>b8T!1;K0;wN$ zL7*p50}Zt}%}fKX;k4SyK&UZ2>_7@+c5=Z;H+QyR+z3t5VWO7+SvKK1EY&Df`i?!@ zcj}@>m8n5YM3HiAcB@q0y_UYVr49TS%@hKt&n7lZlb#`#j3&de;SN+LqKUXA4VZD{ zggHO()(5Hz7nleel>+xXKnL$PsWcQ0{^>e&STpK9)~9d;TKwUSEuhCpMp=MZCU|Br z`K@?Pf%KTJ3J(;wz(`-zZ!_=SVBm(6jF|4lC^2M*GGo7lh92-m?|P(oy2}j&G9?#p z6?&nZJzJ+pNhN#_I($xQo12E30VYBGw^L zBt08#L_J?FjY6nkq4IMt&V(5Y7dp+8$xk2`HR&}NJiu)$J6oK3nEFS(rW2f-$Nx5u zgruB;%?ADyZ7nAH@T2t`i}2zk=fmJ&G;Aw@$#>>tBqRCp&R_~&h6GK&tz()F3RBd} z%)-!4q)1CzbfP?ziB=Q&G-8?5?ZJ6xnM4x{8>KLdq-jC>%S9~lSlIc;vifR~DYpM=D zpc05!A`q~TJE5qx{5`wVW=j!E3-i>}OPsaw<99?rLvijI&$M)N?S1P6>oX zWT*?{EOSIge1I>=9aTAdM_6^> zMjP~aC_ri`xmoX^Q?=Vu*tNC1AyNVa&71m&>SqBwC5z`8U!mgV&O`g-!20gMvqm>0 zkCQPtndSTXw|b|VqOJ~`^&X#T&Key-K#a<+l%Z{wo8oru_)hWHJuT*oz$%Nu-^_KY z)gcrnEnT-tFl{$EuZwcd|P&JDKppKlIMO z!1@t~p)WT7h`3#ocCGBpEMYs=Ip<(qKOczS+;m2LZV2%x!V7cFSVM(4d}V|ltx>N? z3MP-ID%k?D`7w z3K+k}nFk>~{ACs3@uA2jAeEeSrlOTP++19b`)04!q$mlSX1;<9eao2|=n=#h0Kq-2 zh5XYf_~b~D;gMYh27HZc@#j;zsT`DNa>8}8!>J2x^Fk%{etFrb{~}ryit>6P>e;*8>zc7p;9btR zV_}#t;?ccTK1Ql05axp(Tg_@nAgygd=JwK9fv1NooRmmJY%NS2;Qr)bSK(!iXfih4 zz-kQ+-rlW3tF||;l?t_MCO5GoF=>ckmJIX0smPqs;0@4UBfj%QAc?|r=AHvP-3Sez z3S8Xu*J;kf7d{+Xt+B|%Vzsx6)HC=)T{3RMRvJv^bV)onb}KcP=eKg76&@TNi&!_Y zQr5YCUJj(XqYLT{J`M4$^l2;yEZ?3yG~kw-YN9omyp37B6X+hMae@I2d1Jw8M$a-P zm!4Nh-PhW%!L06t7!Ir0$LrCO987iQC{L4Zi|=h5gGB<$dg&y z2^jh+agvM>pGU4|#Z4DDD1s}Tnw(NMs!W?WLN8E#dS#reX`#{wy8UB$(9 zwe#qH4#os4gY>v@W}6D$pf2#WjztnSJk84r!w@vk`f}f=7`(Q@%YreCYg*(Ju zK-JmxvP~<(ABvi%SHo{kt}M!&+|r~==XTy{wWwM+!z(c0urhwT5gM}#$)5(YLm`QY zi(e;n!(Ngyzk?ei_;I=7rN*SFACt!d*I9rD`XEBNOUpw!tyc5ai~Tirx++ZBwIZ$R zYF+NE8(Jo9nptW=3yI72ow%vU7cH5{#vAehy{5LBec9?+mp31j!7qrnR$8(&T32<; zO%>2ag~(Z4cmBYr-QskDRxAXwE^^N-RcPxIE8aP|J@X%yEuaVTroDO(j&9z6mStVF z%~#Jh4Bb{$=$#kWxbTA*f4UB9%?%PCitc`b`~9-kZK@=5cf*lY#?f!*-2`8Hur6t^ zx@?ArtaL&OI^lBCh%twaet_ZXFo8J+u|b&CgCBsSA>Ky+J05-FMVDj)H8}c3+`)LG zj%IcG;H5D_7p@7rmnM*^W}YHT97GBda4O%(Erab(ak2ZvX0H#B6pVFY;ZI$<0YKhI;yhNC3fw z7evd3j3MgyyrApK)qA*QO7O?QQj4Ifny*AIq`6|5T|wvB)bT;DzZv@;GgF@FA8gDS zOwTQDtj&`BS$P`xF(RpRFz*-5IA^+59@Lxg9opGNSKz&E<7MlRHH&&Ge%EGdEQ44QU?#8QV=7XD3lNx(QhTOP4)5DQmVRY`&;AUwD#`9@Gb`BGZfw)Iug}fj78P=9v6$FNWP3w*C z_1RG^m0Mu-2eJV+hEuiAEx3Lt2Y3UPI#-PS5xw)=ZBA6L1*qzydI-q_jQJ3*9ibau z0;Y1^m>3jBO~hM-ANE$(>N*Air<;UdX080$&~BE)?Lp1P^ws1_rB|`r$9p?U_pABr z6<=tm_#($Odubz8OPiP8EmrA~msi;zT*N2;01MHvWn+TOJ*G*o$w zUY^YMf<7!xgH6du)FVVGB0fdX%|XpclhC^|3hFbW^vT1Gx7y%rol-KtLqQmK2=p6O zSIY@kmg$5O1V`Z7Z~x0mm?J=*8Dg1*b<>(jbwl|u{1(9BI_J|LY`8rR_Omf|AihL@ zO?PYQ)N;rtt2Fslm(;bks$X0qeXm@Es+77JpgzaB4GY;8K;g`>Q67rD{@AGZmF8L5?)J9ank?q;6J)DNFnc%j)#CiZQhB zA3s-0F?_T_GxR~0pcDoL=8s%^OznxX^1(Y&Dc%-y^qHl%zNWb?yRN?6WT$@br-fzk zVL0ZAXxf5g?Z$A>lB{dD0<*Ecv-kMOTH113Kl~c^^Ro*4*67$^Qe$}^JrdbdT7NW( z$=fBmf%FozF05u$fC2Mq$)m^Q!pPTCCDgL&f}3_N{-mDQAg(PFnUDjtL6P|%dCQD-R-P@j zlLX1H6~@tS+s7t|t8JB^w4%MQ`{)A0)Xsv>jD9gEHwMK$>Lcg`ZGM{Jmr1#?3k&stLx>B8jf2oj@i! z{9f8Fjo9@MH8Z`w_L>CfFt;Vw*0#ATbh3ucm!sE>q@rOmj~(bxm@`SIcV~?@ubKM2 zE0dVu434C&(lj@MYd}dut)~m|u~ulcZ5oCzNRCsr@}tgSC_- zQpJ(TAU6JinDPow^QqNzS*DVKiD3B*sR6w~~DbK0)<@ORgnsqW@9?(b6dys&~i zNV9By&-`7CX^|8VzFf5|_as@Odw8RVSW|FY3&8_Te!G@=Yh^tJbJlxQ7{x~vE&cau zm?(_V=v%)Dnxb%~I(jXPDg3zg3q>{As#@dpH~HjPtAVd>6dG+Uew#X5^W-O*7t-ZtQ`FWF3^{ zcLw<}1GK}5HhGO8>Kz8y{~+i;PPug_{YF#Y0_p5%aJ0#A>ULQ3j1ys8pGxLv9=z~n z=yh+c&8q~nrr7o5M(3NmrY$+ypiobl{#=t%+;N6ai~7^vu7yQYY|c9Q1ZESfzeQAh z-cf#g7y4Xnu5Allh>-=Vc?gQ|XW7{hagT`$B#bvBBEy}O6*eE6yW%FBj+VA64<)xO zXw*&c7)@aZjvowyqHhxvx4X__X9$_z9l20$El=}ctPI6tXGi*v5-%6sZZ*Rs$LRY` z?RpJba?=ZpSB1Rau7#6_=G%O=gOpZ6lF>N@BthIbQ=<_UphCdG>|RyAEb+`l$P2}r z1NK|m|0T}bW+-p-Shm92vT?z#sv>J}LelCNnbuLm@FuEcV&b?8af-@5$=P01sstKxL@sSMOqtW02Z`R>!0uhELtDj^t7R+|VS>jYj zhc9JlDkFJ|*`nO4vq~IXnbwD^P5XXYHV;cN|5&|(Bo#)uiXl34$dc=}*Olw;_j51s zP@T`sF6Wr69&cyb)2Yh#?->a#Ic+Dcp8P&j(2i`CcC%7-hu>6kf6*>Zen42~V(rPh zy{+%70<(aD_nHDl7~$(AE7nW$0_zuaOy4gV)5M4-VSK`Nu3?YFBjyd@%LcSSQ3t(` z*ENRu6{%6?Y5}2J4uJcT_IaTd91%rVSLf<>53j#B>*EXWl14 zmQYRxe-)-UeeRvsay59K+PaYul7KhK&T7D;P1%GH$tABbz2&kTyK#U-`jV7^V*81$ zt63SQZrJDAwx0(0R%l$g_NU!+3+n>+4DXGrM9F^j&HN zQCyUAV5Lnf00)K5GRL>liBP(q>LMzoX%9u)A*K7u2wCe9G#<34s)s5GoN0F~eR` zR1NM|Y$YOCq?4;*7SCEG0j?`>Ja+ThT)H6aP>ui9Y@m!CfO=$UdB-c-rpqx-`3`_j zXDfe=9x`~$UNL;<@XKYXVQc~_0IE@Je=fWLSq?x$j(ZCYQzsq}8{bKdA5r#ixS#x~ z5<`9o`%H=n!y3#90VgRT#UDaLs~P}=ThuV%F_9RET<^=T)5D$d6Q9^Vie}IFT{6)n zYol!37TEy-LR7=H-q7j^GV*jYBnRYruo`G9sTtu)TjLOfURYqSs7$-l{T2J;Z-2l3 z@3;x3ui+NniC)J?%y%oVu)Q{8|Mhm4#S+)j9gcSRAeU} zaZjh4+aRlcUbYTdWbwn6h|Y_4rh)|mcuH~s__+a0sDv%S7Netv?1 z7#=J-SZw;cn5nmlRf7T{?PIQD>k?;1@yuW1|M?at@Be-WvmtMG;V`9|06g5S~p z`Q^SBH_ZPH-D)*QpH&{7lge}1dRVfMag-P?Ozp{;kSK2LM7{<~1ib+V6s2oA$EGj< zUq@2je?&BN+aja^o=<*A+};3tCoH`S*#XBlg%(fS6gC#L!yY)q70iu3NO7&qAj00? zcoF5^)-fCp(dL*y>qqYYfgO`*!TK^qF+l$*$;Yq*LJO<|g6t_23ErDJQz8*9BH?34 z&&)wF*e3El4~gZII9Nwo_|U7ng@@k91P}8odWgh{6iHGn`7etEMf`U^lP^sSFO5`v zZAn9!C{%2eH{`&|oq8ExDnGG&Id}@3k7}BE`NVpFNAgqx^w^=fFz^EW?XxQ zc5rvfiCgt<1z;nE4~Us4FpCg+&cFNE#|b!8;v}a10#e`#j}XXg9>pc6N#ALMK#q%v zX7Fx8Kq!nSOmLBs7?3Jk45B^wEp5ci1z}ClNEfcgL+5h4bLxNDa>~EcE&qLl@b*pp z@cl*69Ca6BiWIZpcDny{k`_1X5AwzTW%WW371RIy0`b*5a!JnxPGQ~-aL5J|K zu@hyra?i02xB6*fjO135pPPlS0wai&+uX^X^dZ-PFN}Us;t2^L^HwPjmPrdCHyXN;$t;G*r))^ysWb;p%W zN4G#v{7oStEpb3H&XR>P&R^1QMvl>{kpU*eje|LnwT#B&V3i09bV3h;fid;35ou`- zif(G50T8c;jCo=YIKva&E>26uV4(|fW|5o^#l7u@2g)GIpGbWFTir> zLQl*P5bLTIL*7U(C~>*3_fcRzI-z>K!LW~`1c%v6#6BVHsx7Y@z=1yot47^ZQ#ufm zA-xw&vvbqAn1C5L%)3XtvN(3R+1iEcOU5N##3G#PzIe-9mR2LiUb!I+DL!B09CelO z#+E^Tm^Km9Q7iiEI<9X_tE$3^z=P~~<;MjLt%0i`T@&6J0>)eNGz^)Ij1yr^4NTU+ zhWq)o%71grEw+=n2oH(FFdvRqR?Z*S(zDGBiJvbfpRc^0UbvN|**o%0k)}GQeKPuv zdb7QzaWdfFzH@KlXT1d*u3GH8OKUtN2sfCY>WR0CZ*@Z@KWm@)z>k}Mx(8rGc&^~8 zVh-=I0#)@jjO~;YZmCc!)ood352y^coi%xq)Dy%ffvj9|w8}Mn7`TMp<9InMn8%*) zcI&8VJLBmiWYayyz~0OF^KtDEk>XkvcNaJcdTer`e zmsq(WhHuof0sL>kk!_pSy0U8LN`T`%*my?fgC?7^5BBg*TADLyEZyGOo!jzatZj+5 z3yTK;K{M~a*x`bN)%~OsLI5$my!CIO7@d*$Y3U|yX!8&u3I(Ts4J76!ZI@D;l6DGC zYo5Mlf8yaCs~VT+Bse_C7_Z|r&g`)AoBR75tcdl#m!SbpD;-DE!$ZkndF_P49-a>+ zW0hMZ~pyit-}x zz!nDnyQ{O{@n8z0sB}sKK(SDOiFM!Vl%KjPvCuBNf|D#xSMFK5I7CeG zdqju?)Ww?JL%=wHCebW`uoJOzglR(NMG0Y&p;O85C9R#zHgJA*Lf+pBF~r5D;d#I< zTQdFvH0f~uQ5$A{z|jhmhHu!QwCx_T=?PskS^AYE$Z|;c(8S7IUFXkiyml&c%_QW0 z+H1Pds9MF_^z!|my~1P}@CLnJ-N;jpdlZ@xMExED)qarhE+`|wQ*^kbRQ@ZpaRTek z))fsbW>@jv_`@}?29v*xaWV{kakk8PQazk$m!qPPyJ@B%#}>JxNq4d#9nUqCA!ryALJc)GoIqIr z(E4oFb4ifW7q+hEwz*RB~hAI zPo1_K9)x@iQVRxY@I4~qywA-BQRQ2XDY(ZDfG|dqR3mnx#+RI^2v0@xMAfAs0t-i< zBcv*`7lsiQoJ#)=`?tiI*oOiW_nanCn(RRhr!!mp1uQQ!pGP_|u0dS`_{NW;C~l@5 zRT^*3mZL08jF24f8TVhA}z)cS6zx;4E<9- zRerAGx-BjYVSI`829CO5W3+KP&nq(i{Ys!rc#zWr+D*1p4ujnNV;Y-vgD5_;$wScx z##WZwPP=|bx#bd%h3t;D))&K*179uKEy|zIgdSDI`m_uT0;6WO4`ct-t(bO@bH#v9Zf|E(gNT)XH*`#3I>=mYZd*nQ5-j z2!@9+^GQ7C+sC!dj6|D`BM}3T4iE>) z-{7wVSDkM35A^x|N>MQII|;{+eYO!Z6cjj^>q8`Yi4nBG*N7J&HQv_%602`czCtK~ z6#ly*;f5;u2D0~tjY)NG&1VS3RTX-BPD>MAX<58~*5~2;6Z>^xK~KALq)AbOt-9pA zz{9MSw^Z<|Q)syrx9pMxD4UV8d$(hmU8T)zovz&-|6gh1JbJcOjt8vRus=86cJyeW zB$E%*XxOl?P$X$FIvJ7dhC^%vSit>6i+8bYAZ#DV%Q_CEKi7E+?c!++76uJlBs^<9 zsE+b*bu$~@r`^{}a0uL=ft8F;L6j{8;UM4stH#nz!BOoM@Up&HFLt}u;V%n=Ki~i$ z4)xZi4BdVXhoreO`#?K;41Sor9yDs2RL#W;X=$3*?Ut=KPY>5$-b%3gTVZSH_jn^Q zy!r$4`jEC+%#bcFY4XP7{*PO@Gd5GzYsB?`%p$wiqFI)M^ z);rXSVA}n+dwrM*g`mm5PH^Sr)!sSkJ1YAt?%rSWcITC0lyCoA??}186)(X%83FeX zFl~@529nSOpRIu0Y=zO4W)j&KJ|__Ku#e$zr&uu+u7EKoLjL0d@_zq~#;9GI!sFkA z>T9%9Xb(CEXqLw@lFw+jz58%?@4#<|OOx@{!Tj9R9N~axx#c30O{JD<`xDUfzwwA! z-k>0vjM9yv)VvVKF=q*Z{mTvLFjh)*7!lExIHy2#@!3#}U^IpIgr{Wt9*mrX`T}S# zcq??jPJ(`X0Ac(XgmR zxMso$E4iX?fKxx+9&G`VZI@xY<9$KPCO%elyPX(|x27~vt+4xvFxjF%&9Rzw(Ma^4wb}2Rh$3Wy$X=@G(Bt61Kezg^@6YLg_7i4? zbZ8)s-IT~C+xBDbmyZu0A3hD@m>D@(8JXGH*Z_=7tn7^J07Az9 z4Yd4EL%KS<7&`rsO3>uLTTZ8povu z!U!w!o=uDaDc^{$eRg`v709kUf1~8+g)2o_`r&V8*S2}|d4+bJcJbImp!ao?7I*!= z%(_Hvv;i&)Bb=k1(-I^q+w?r+z`4b6e^aM#hf3Vo@Ne&Gm^Hy6wXDA5TtQoVd9_K^ z;o~Ak%|6jd7#)c9-$ZpJu(HTNsVp+itR-b*q+?7_%VLr*G>pruR9t{)MN@mrRu^0L z9i)24KhkHiQ99UGV$t}Vr{iA#ne+b8O0I6XEelaaY;Y#w!BecwxP?qY7^g;3x!sC+ zaBhgiJ%g=!DKzl}6h;hDCketJk!3slfh4GG+PLJ^`cR)&Ao?=xzlA{mN3YU<6ZhX7 P_-_vUHwXULbKw600cnHx diff --git a/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/fast-stemmer-1.0.2/gem.build_complete b/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/fast-stemmer-1.0.2/gem.build_complete deleted file mode 100644 index e69de29..0000000 diff --git a/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/fast-stemmer-1.0.2/gem_make.out b/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/fast-stemmer-1.0.2/gem_make.out deleted file mode 100644 index 46795e3..0000000 --- a/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/fast-stemmer-1.0.2/gem_make.out +++ /dev/null @@ -1,554 +0,0 @@ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/bin/ruby -r ./siteconf20180423-68206-svtpdb.rb extconf.rb -creating Makefile - -make "DESTDIR=" clean - -make "DESTDIR=" -compiling porter.c -porter.c:233:19: warning: passing 'const char [6]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - { if (ends(z, "\04" "sses")) z->k -= 2; else - ^~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:234:19: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\03" "ies")) setto(z, "\01" "i"); else - ^~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:234:42: warning: passing 'const char [3]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\03" "ies")) setto(z, "\01" "i"); else - ^~~~~~~~~ -porter.c:196:46: note: passing argument to parameter 's' here -static void setto(struct stemmer * z, char * s) - ^ -porter.c:237:16: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\03" "eed")) { if (m(z) > 0) z->k--; } else - ^~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:238:17: warning: passing 'const char [4]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if ((ends(z, "\02" "ed") || ends(z, "\03" "ing")) && vowelinstem(z)) - ^~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:238:40: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if ((ends(z, "\02" "ed") || ends(z, "\03" "ing")) && vowelinstem(z)) - ^~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:240:19: warning: passing 'const char [4]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\02" "at")) setto(z, "\03" "ate"); else - ^~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:240:41: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\02" "at")) setto(z, "\03" "ate"); else - ^~~~~~~~~~~ -porter.c:196:46: note: passing argument to parameter 's' here -static void setto(struct stemmer * z, char * s) - ^ -porter.c:241:19: warning: passing 'const char [4]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\02" "bl")) setto(z, "\03" "ble"); else - ^~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:241:41: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\02" "bl")) setto(z, "\03" "ble"); else - ^~~~~~~~~~~ -porter.c:196:46: note: passing argument to parameter 's' here -static void setto(struct stemmer * z, char * s) - ^ -porter.c:242:19: warning: passing 'const char [4]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\02" "iz")) setto(z, "\03" "ize"); else - ^~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:242:41: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\02" "iz")) setto(z, "\03" "ize"); else - ^~~~~~~~~~~ -porter.c:196:46: note: passing argument to parameter 's' here -static void setto(struct stemmer * z, char * s) - ^ -porter.c:249:52: warning: passing 'const char [3]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - else if (m(z) == 1 && cvc(z, z->k)) setto(z, "\01" "e"); - ^~~~~~~~~ -porter.c:196:46: note: passing argument to parameter 's' here -static void setto(struct stemmer * z, char * s) - ^ -porter.c:257:16: warning: passing 'const char [3]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\01" "y") && vowelinstem(z)) z->b[z->k] = 'i'; - ^~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:267:26: warning: passing 'const char [9]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'a': if (ends(z, "\07" "ational")) { r(z, "\03" "ate"); break; } - ^~~~~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:267:51: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'a': if (ends(z, "\07" "ational")) { r(z, "\03" "ate"); break; } - ^~~~~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:268:26: warning: passing 'const char [8]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\06" "tional")) { r(z, "\04" "tion"); break; } - ^~~~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:268:50: warning: passing 'const char [6]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\06" "tional")) { r(z, "\04" "tion"); break; } - ^~~~~~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:270:26: warning: passing 'const char [6]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'c': if (ends(z, "\04" "enci")) { r(z, "\04" "ence"); break; } - ^~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:270:48: warning: passing 'const char [6]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'c': if (ends(z, "\04" "enci")) { r(z, "\04" "ence"); break; } - ^~~~~~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:271:26: warning: passing 'const char [6]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\04" "anci")) { r(z, "\04" "ance"); break; } - ^~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:271:48: warning: passing 'const char [6]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\04" "anci")) { r(z, "\04" "ance"); break; } - ^~~~~~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:273:26: warning: passing 'const char [6]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'e': if (ends(z, "\04" "izer")) { r(z, "\03" "ize"); break; } - ^~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:273:48: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'e': if (ends(z, "\04" "izer")) { r(z, "\03" "ize"); break; } - ^~~~~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:275:26: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'l': if (ends(z, "\03" "bli")) { r(z, "\03" "ble"); break; } /*-DEPARTURE-*/ - ^~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:275:47: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'l': if (ends(z, "\03" "bli")) { r(z, "\03" "ble"); break; } /*-DEPARTURE-*/ - ^~~~~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:280:26: warning: passing 'const char [6]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\04" "alli")) { r(z, "\02" "al"); break; } - ^~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:280:48: warning: passing 'const char [4]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\04" "alli")) { r(z, "\02" "al"); break; } - ^~~~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:281:26: warning: passing 'const char [7]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\05" "entli")) { r(z, "\03" "ent"); break; } - ^~~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:281:49: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\05" "entli")) { r(z, "\03" "ent"); break; } - ^~~~~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:282:26: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\03" "eli")) { r(z, "\01" "e"); break; } - ^~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:282:47: warning: passing 'const char [3]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\03" "eli")) { r(z, "\01" "e"); break; } - ^~~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:283:26: warning: passing 'const char [7]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\05" "ousli")) { r(z, "\03" "ous"); break; } - ^~~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:283:49: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\05" "ousli")) { r(z, "\03" "ous"); break; } - ^~~~~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:285:26: warning: passing 'const char [9]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'o': if (ends(z, "\07" "ization")) { r(z, "\03" "ize"); break; } - ^~~~~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:285:51: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'o': if (ends(z, "\07" "ization")) { r(z, "\03" "ize"); break; } - ^~~~~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:286:26: warning: passing 'const char [7]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\05" "ation")) { r(z, "\03" "ate"); break; } - ^~~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:286:49: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\05" "ation")) { r(z, "\03" "ate"); break; } - ^~~~~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:287:26: warning: passing 'const char [6]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\04" "ator")) { r(z, "\03" "ate"); break; } - ^~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:287:48: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\04" "ator")) { r(z, "\03" "ate"); break; } - ^~~~~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:289:26: warning: passing 'const char [7]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 's': if (ends(z, "\05" "alism")) { r(z, "\02" "al"); break; } - ^~~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:289:49: warning: passing 'const char [4]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 's': if (ends(z, "\05" "alism")) { r(z, "\02" "al"); break; } - ^~~~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:290:26: warning: passing 'const char [9]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\07" "iveness")) { r(z, "\03" "ive"); break; } - ^~~~~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:290:51: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\07" "iveness")) { r(z, "\03" "ive"); break; } - ^~~~~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:291:26: warning: passing 'const char [9]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\07" "fulness")) { r(z, "\03" "ful"); break; } - ^~~~~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:291:51: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\07" "fulness")) { r(z, "\03" "ful"); break; } - ^~~~~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:292:26: warning: passing 'const char [9]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\07" "ousness")) { r(z, "\03" "ous"); break; } - ^~~~~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:292:51: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\07" "ousness")) { r(z, "\03" "ous"); break; } - ^~~~~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:294:26: warning: passing 'const char [7]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 't': if (ends(z, "\05" "aliti")) { r(z, "\02" "al"); break; } - ^~~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:294:49: warning: passing 'const char [4]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 't': if (ends(z, "\05" "aliti")) { r(z, "\02" "al"); break; } - ^~~~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:295:26: warning: passing 'const char [7]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\05" "iviti")) { r(z, "\03" "ive"); break; } - ^~~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:295:49: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\05" "iviti")) { r(z, "\03" "ive"); break; } - ^~~~~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:296:26: warning: passing 'const char [8]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\06" "biliti")) { r(z, "\03" "ble"); break; } - ^~~~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:296:50: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\06" "biliti")) { r(z, "\03" "ble"); break; } - ^~~~~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:298:26: warning: passing 'const char [6]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'g': if (ends(z, "\04" "logi")) { r(z, "\03" "log"); break; } /*-DEPARTURE-*/ - ^~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:298:48: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'g': if (ends(z, "\04" "logi")) { r(z, "\03" "log"); break; } /*-DEPARTURE-*/ - ^~~~~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:308:26: warning: passing 'const char [7]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'e': if (ends(z, "\05" "icate")) { r(z, "\02" "ic"); break; } - ^~~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:308:49: warning: passing 'const char [4]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'e': if (ends(z, "\05" "icate")) { r(z, "\02" "ic"); break; } - ^~~~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:309:26: warning: passing 'const char [7]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\05" "ative")) { r(z, "\00" ""); break; } - ^~~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:309:49: warning: passing 'const char [2]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\05" "ative")) { r(z, "\00" ""); break; } - ^~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:310:26: warning: passing 'const char [7]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\05" "alize")) { r(z, "\02" "al"); break; } - ^~~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:310:49: warning: passing 'const char [4]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\05" "alize")) { r(z, "\02" "al"); break; } - ^~~~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:312:26: warning: passing 'const char [7]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'i': if (ends(z, "\05" "iciti")) { r(z, "\02" "ic"); break; } - ^~~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:312:49: warning: passing 'const char [4]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'i': if (ends(z, "\05" "iciti")) { r(z, "\02" "ic"); break; } - ^~~~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:314:26: warning: passing 'const char [6]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'l': if (ends(z, "\04" "ical")) { r(z, "\02" "ic"); break; } - ^~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:314:48: warning: passing 'const char [4]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'l': if (ends(z, "\04" "ical")) { r(z, "\02" "ic"); break; } - ^~~~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:315:26: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\03" "ful")) { r(z, "\00" ""); break; } - ^~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:315:47: warning: passing 'const char [2]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\03" "ful")) { r(z, "\00" ""); break; } - ^~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:317:26: warning: passing 'const char [6]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 's': if (ends(z, "\04" "ness")) { r(z, "\00" ""); break; } - ^~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:317:48: warning: passing 'const char [2]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 's': if (ends(z, "\04" "ness")) { r(z, "\00" ""); break; } - ^~~~~~~~ -porter.c:205:42: note: passing argument to parameter 's' here -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - ^ -porter.c:325:29: warning: passing 'const char [4]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - { case 'a': if (ends(z, "\02" "al")) break; return; - ^~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:326:29: warning: passing 'const char [6]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'c': if (ends(z, "\04" "ance")) break; - ^~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:327:29: warning: passing 'const char [6]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\04" "ence")) break; return; - ^~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:328:29: warning: passing 'const char [4]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'e': if (ends(z, "\02" "er")) break; return; - ^~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:329:29: warning: passing 'const char [4]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'i': if (ends(z, "\02" "ic")) break; return; - ^~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:330:29: warning: passing 'const char [6]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'l': if (ends(z, "\04" "able")) break; - ^~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:331:29: warning: passing 'const char [6]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\04" "ible")) break; return; - ^~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:332:29: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'n': if (ends(z, "\03" "ant")) break; - ^~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:333:29: warning: passing 'const char [7]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\05" "ement")) break; - ^~~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:334:29: warning: passing 'const char [6]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\04" "ment")) break; - ^~~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:335:29: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\03" "ent")) break; return; - ^~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:336:29: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'o': if (ends(z, "\03" "ion") && (z->b[z->j] == 's' || z->b[z->j] == 't')) break; - ^~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:337:29: warning: passing 'const char [4]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\02" "ou")) break; return; - ^~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:339:29: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 's': if (ends(z, "\03" "ism")) break; return; - ^~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:340:29: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 't': if (ends(z, "\03" "ate")) break; - ^~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:341:29: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - if (ends(z, "\03" "iti")) break; return; - ^~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:342:29: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'u': if (ends(z, "\03" "ous")) break; return; - ^~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:343:29: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'v': if (ends(z, "\03" "ive")) break; return; - ^~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -porter.c:344:29: warning: passing 'const char [5]' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - case 'z': if (ends(z, "\03" "ize")) break; return; - ^~~~~~~~~~~ -porter.c:182:44: note: passing argument to parameter 's' here -static int ends(struct stemmer * z, char * s) - ^ -89 warnings generated. -compiling porter_wrap.c -porter_wrap.c:20:17: warning: unused variable 'i' [-Wunused-variable] - size_t length, i; - ^ -porter_wrap.c:30:39: warning: implicit conversion loses integer precision: 'unsigned long' to 'int' [-Wshorten-64-to-32] - length = stem(&z, word, strlen(word)-1); - ~~~~ ~~~~~~~~~~~~^~ -2 warnings generated. -linking shared-object stemmer.bundle - -make "DESTDIR=" install -/usr/bin/install -c -m 0755 stemmer.bundle ./.gem.20180423-68206-elh2jj diff --git a/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/fast-stemmer-1.0.2/stemmer.bundle b/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/fast-stemmer-1.0.2/stemmer.bundle deleted file mode 100755 index bd7289934fb9460f1458cf239bb500966661ba04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14248 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ν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 Bzsdjr diff --git a/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/yajl-ruby-1.2.3/gem.build_complete b/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/yajl-ruby-1.2.3/gem.build_complete deleted file mode 100644 index e69de29..0000000 diff --git a/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/yajl-ruby-1.2.3/gem_make.out b/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/yajl-ruby-1.2.3/gem_make.out deleted file mode 100644 index ee61add..0000000 --- a/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/yajl-ruby-1.2.3/gem_make.out +++ /dev/null @@ -1,174 +0,0 @@ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/bin/ruby -r ./siteconf20180423-68206-1abmxws.rb extconf.rb -creating Makefile - -make "DESTDIR=" clean - -make "DESTDIR=" -compiling yajl.c -compiling yajl_alloc.c -compiling yajl_buf.c -compiling yajl_encode.c -compiling yajl_ext.c -yajl_ext.c:42:19: warning: implicit conversion loses integer precision: 'long' to 'int' [-Wshorten-64-to-32] - int len = RARRAY_LEN(wrapper->builderStack); - ~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:900:6: note: expanded from macro 'RARRAY_LEN' - (long)((RBASIC(a)->flags >> RARRAY_EMBED_LEN_SHIFT) & \ - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -yajl_ext.c:42:19: warning: implicit conversion loses integer precision: 'long' to 'int' [-Wshorten-64-to-32] - int len = RARRAY_LEN(wrapper->builderStack); - ~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:902:25: note: expanded from macro 'RARRAY_LEN' - RARRAY(a)->as.heap.len) - ~~~~~~~~~~~~~~~~~~~^~~ -yajl_ext.c:47:19: warning: implicit conversion loses integer precision: 'long' to 'int' [-Wshorten-64-to-32] - int len = RARRAY_LEN(wrapper->builderStack); - ~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:900:6: note: expanded from macro 'RARRAY_LEN' - (long)((RBASIC(a)->flags >> RARRAY_EMBED_LEN_SHIFT) & \ - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -yajl_ext.c:47:19: warning: implicit conversion loses integer precision: 'long' to 'int' [-Wshorten-64-to-32] - int len = RARRAY_LEN(wrapper->builderStack); - ~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:902:25: note: expanded from macro 'RARRAY_LEN' - RARRAY(a)->as.heap.len) - ~~~~~~~~~~~~~~~~~~~^~~ -yajl_ext.c:83:11: warning: implicit conversion loses integer precision: 'long' to 'int' [-Wshorten-64-to-32] - len = RARRAY_LEN(wrapper->builderStack); - ~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:900:6: note: expanded from macro 'RARRAY_LEN' - (long)((RBASIC(a)->flags >> RARRAY_EMBED_LEN_SHIFT) & \ - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -yajl_ext.c:83:11: warning: implicit conversion loses integer precision: 'long' to 'int' [-Wshorten-64-to-32] - len = RARRAY_LEN(wrapper->builderStack); - ~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:902:25: note: expanded from macro 'RARRAY_LEN' - RARRAY(a)->as.heap.len) - ~~~~~~~~~~~~~~~~~~~^~~ -yajl_ext.c:201:19: warning: implicit conversion loses integer precision: 'long' to 'unsigned int' [-Wshorten-64-to-32] - len = RSTRING_LEN(str); - ~ ^~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:863:6: note: expanded from macro 'RSTRING_LEN' - RSTRING_EMBED_LEN(str) : \ - ^~~~~~~~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:859:6: note: expanded from macro 'RSTRING_EMBED_LEN' - (long)((RBASIC(str)->flags >> RSTRING_EMBED_LEN_SHIFT) & \ - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -yajl_ext.c:201:19: warning: implicit conversion loses integer precision: 'long' to 'unsigned int' [-Wshorten-64-to-32] - len = RSTRING_LEN(str); - ~ ^~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:864:28: note: expanded from macro 'RSTRING_LEN' - RSTRING(str)->as.heap.len) - ~~~~~~~~~~~~~~~~~~~~~~^~~ -yajl_ext.c:209:19: warning: implicit conversion loses integer precision: 'long' to 'unsigned int' [-Wshorten-64-to-32] - len = RSTRING_LEN(obj); - ~ ^~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:863:6: note: expanded from macro 'RSTRING_LEN' - RSTRING_EMBED_LEN(str) : \ - ^~~~~~~~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:859:6: note: expanded from macro 'RSTRING_EMBED_LEN' - (long)((RBASIC(str)->flags >> RSTRING_EMBED_LEN_SHIFT) & \ - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -yajl_ext.c:209:19: warning: implicit conversion loses integer precision: 'long' to 'unsigned int' [-Wshorten-64-to-32] - len = RSTRING_LEN(obj); - ~ ^~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:864:28: note: expanded from macro 'RSTRING_LEN' - RSTRING(str)->as.heap.len) - ~~~~~~~~~~~~~~~~~~~~~~^~~ -yajl_ext.c:217:23: warning: implicit conversion loses integer precision: 'long' to 'unsigned int' [-Wshorten-64-to-32] - len = RSTRING_LEN(str); - ~ ^~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:863:6: note: expanded from macro 'RSTRING_LEN' - RSTRING_EMBED_LEN(str) : \ - ^~~~~~~~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:859:6: note: expanded from macro 'RSTRING_EMBED_LEN' - (long)((RBASIC(str)->flags >> RSTRING_EMBED_LEN_SHIFT) & \ - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -yajl_ext.c:217:23: warning: implicit conversion loses integer precision: 'long' to 'unsigned int' [-Wshorten-64-to-32] - len = RSTRING_LEN(str); - ~ ^~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:864:28: note: expanded from macro 'RSTRING_LEN' - RSTRING(str)->as.heap.len) - ~~~~~~~~~~~~~~~~~~~~~~^~~ -yajl_ext.c:223:23: warning: implicit conversion loses integer precision: 'long' to 'unsigned int' [-Wshorten-64-to-32] - len = RSTRING_LEN(str); - ~ ^~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:863:6: note: expanded from macro 'RSTRING_LEN' - RSTRING_EMBED_LEN(str) : \ - ^~~~~~~~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:859:6: note: expanded from macro 'RSTRING_EMBED_LEN' - (long)((RBASIC(str)->flags >> RSTRING_EMBED_LEN_SHIFT) & \ - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -yajl_ext.c:223:23: warning: implicit conversion loses integer precision: 'long' to 'unsigned int' [-Wshorten-64-to-32] - len = RSTRING_LEN(str); - ~ ^~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:864:28: note: expanded from macro 'RSTRING_LEN' - RSTRING(str)->as.heap.len) - ~~~~~~~~~~~~~~~~~~~~~~^~~ -yajl_ext.c:492:15: warning: implicit conversion loses integer precision: 'long' to 'unsigned int' [-Wshorten-64-to-32] - len = RSTRING_LEN(input); - ~ ^~~~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:863:6: note: expanded from macro 'RSTRING_LEN' - RSTRING_EMBED_LEN(str) : \ - ^~~~~~~~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:859:6: note: expanded from macro 'RSTRING_EMBED_LEN' - (long)((RBASIC(str)->flags >> RSTRING_EMBED_LEN_SHIFT) & \ - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -yajl_ext.c:492:15: warning: implicit conversion loses integer precision: 'long' to 'unsigned int' [-Wshorten-64-to-32] - len = RSTRING_LEN(input); - ~ ^~~~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:864:28: note: expanded from macro 'RSTRING_LEN' - RSTRING(str)->as.heap.len) - ~~~~~~~~~~~~~~~~~~~~~~^~~ -yajl_ext.c:498:19: warning: implicit conversion loses integer precision: 'long' to 'unsigned int' [-Wshorten-64-to-32] - len = RSTRING_LEN(parsed); - ~ ^~~~~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:863:6: note: expanded from macro 'RSTRING_LEN' - RSTRING_EMBED_LEN(str) : \ - ^~~~~~~~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:859:6: note: expanded from macro 'RSTRING_EMBED_LEN' - (long)((RBASIC(str)->flags >> RSTRING_EMBED_LEN_SHIFT) & \ - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -yajl_ext.c:498:19: warning: implicit conversion loses integer precision: 'long' to 'unsigned int' [-Wshorten-64-to-32] - len = RSTRING_LEN(parsed); - ~ ^~~~~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:864:28: note: expanded from macro 'RSTRING_LEN' - RSTRING(str)->as.heap.len) - ~~~~~~~~~~~~~~~~~~~~~~^~~ -yajl_ext.c:538:15: warning: implicit conversion loses integer precision: 'long' to 'unsigned int' [-Wshorten-64-to-32] - len = RSTRING_LEN(chunk); - ~ ^~~~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:863:6: note: expanded from macro 'RSTRING_LEN' - RSTRING_EMBED_LEN(str) : \ - ^~~~~~~~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:859:6: note: expanded from macro 'RSTRING_EMBED_LEN' - (long)((RBASIC(str)->flags >> RSTRING_EMBED_LEN_SHIFT) & \ - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -yajl_ext.c:538:15: warning: implicit conversion loses integer precision: 'long' to 'unsigned int' [-Wshorten-64-to-32] - len = RSTRING_LEN(chunk); - ~ ^~~~~~~~~~~~~~~~~~ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/ruby.h:864:28: note: expanded from macro 'RSTRING_LEN' - RSTRING(str)->as.heap.len) - ~~~~~~~~~~~~~~~~~~~~~~^~~ -20 warnings generated. -compiling yajl_gen.c -yajl_gen.c:295:5: warning: implicit conversion from enumeration type 'yajl_gen_state' to different enumeration type 'yajl_gen_status' [-Wenum-conversion] - DECREMENT_DEPTH; - ^~~~~~~~~~~~~~~ -yajl_gen.c:181:48: note: expanded from macro 'DECREMENT_DEPTH' - if (--(g->depth) >= YAJL_MAX_DEPTH) return yajl_gen_error; - ~~~~~~ ^~~~~~~~~~~~~~ -yajl_gen.c:321:5: warning: implicit conversion from enumeration type 'yajl_gen_state' to different enumeration type 'yajl_gen_status' [-Wenum-conversion] - DECREMENT_DEPTH; - ^~~~~~~~~~~~~~~ -yajl_gen.c:181:48: note: expanded from macro 'DECREMENT_DEPTH' - if (--(g->depth) >= YAJL_MAX_DEPTH) return yajl_gen_error; - ~~~~~~ ^~~~~~~~~~~~~~ -2 warnings generated. -compiling yajl_lex.c -compiling yajl_parser.c -compiling yajl_version.c -linking shared-object yajl/yajl.bundle - -make "DESTDIR=" install -/usr/bin/install -c -m 0755 yajl.bundle ./.gem.20180423-68206-q60wwt/yajl diff --git a/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/yajl-ruby-1.2.3/yajl/yajl.bundle b/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/yajl-ruby-1.2.3/yajl/yajl.bundle deleted file mode 100755 index 333f58ccd5ff8daf5087d1e647a00cbd0a04e5a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56396 zcmeHw3w%_?z5m%fNO**e3K#`p#UP*%5*`W?Bnt`bVuDdXv4We|hD7pmv&*9h1~(B7 z>)N#SRcl*nt);ECxoy>mNE1O4sE>$z=UGxPh+%x`}4o-=vl#K)(S6vYy+C`vM({&*JlQj{i`^t%Mls5nJ&x#s6BoX?zM zUk$NP5g0s`L_A={elC~Sy}~O13^Tvfe%!Bb88-x=*PYD#hSYJd zITmgb7FOnvEciv!NBmqB?y5Ss2O-S-D(>QZu7ND*M_5?7!)fU&t@nB=YnE`|)A;>Z zB;D4B2as3JsdCk?tS+goa@Bb~$al~D zBs=0y^zui1u9X0$%eAC7DmB8f{8Afu;Dv&Qu$kW!;YWtcRaJbp^i_bKeyyS$2pjoP zesd{+_?=#^vFWqj%LA?u;R&C;T+52R#ghB!`F&LIlldiVOkb3e+gz@a`e-dXo!?=> z&nEIqR7QRVXU359#DT}<%6HDaAurcCpE)Z^voH%|aeh9>BsU|k;n1v1@&X;TTgfoH z35%ZwyaIwMdPq^y;1-96%!-Hc0PNWc|H~AmFWd_8&@UbC^iVt_V9sQ&J-@Uqin6K) zufcGmc!mu9>A|@tCw;QnH}>%Rs~&$K9d4-T9r5?0MEDu z^=?o7ICoWXWsQ4jadlOdd*!$c&$8-q9$!hNyPk}dW5;KV&&V8CRart0xd6i@qiiKG zxN`oJ4gBM>_d+@rWt^|xBMIlNtoORBGiDgbSh|dKit-n5iKVM8xwACGZlqF_D-nwF zy8`lWfH_*=W59K=pZ}egzyt`vW>%MOiZ^2=BFow6S9tE?ao)H=BxF|#CUKH z7^^c=J7(IzRUs!Do55+6qhls@Z3@gx?zc1tP7UM~SXGpDWHVVK^C+s!zzx~Kn=I>UZopx)>3Zy$BLeUW{!{SLcp@iwD8h~P_bNY#es@W>H3`F0AVki3L{eWs)7h_|mJ zFf+#ySdkVfOa;v-?ORL|AikW412Y#=S{&*D&Lh%&y8IW1%5PJYa_g{Mh4FU;CtX>t zD4S^zYQ+YcAvyrHKiWWz@ zn<+m~jS+~-p(eq0HM7l5g_VTrP-iDQI%dX_OXZ2zJJiEHb zsUCHzrwW>mSQ{UNr_;YCS@B(F@90HiR%c)qi)1T-NUBqvmApey?15hPz}y7&WnP}@ zTk3()uLlPV&Yf~-*=JL>dDEPMWyz9MeK%5=OoVoIXdddp=mHd7zCExe!5P0MIamE4 zUp=KQFH)4e`0|82wLAfY$uo8&*c4J-rntyg5zki~&sQ(X*CeD?JL#hQPP1_D4@(K9 z#FO{!)Kf@Z;8Y}HSKAhcFkV);e#Nv$cJ(!< zy4Rul+8pZY){eZLi+q`xJM!L8^3XV4l+~7p6c0kF&IWzx4pf=EtVq`G&_#gx!4Yr5 zu&W(e`(^psg9*dz*5?v>sqGEz#~O~0T%KZmZl|-f-~IWP_apB&XD{-4vTdFL!Fd*Y zFn5?GcZ#OI<=Gi(183`VZEAaaD8UgN=tIUf^t)hv!E63*>xP8X^?9#5f_Xc`IjA-# zN)#o0Ei9jtB?FfC$TC7&hQQK6E*D8lA6Q<53)&Zln%9-9p31izaRgSkK|dC>!qTNx zP+7vo5%6`XFT+))&U){VNF)*(g!F;S8gL2if+S)0ksZ?{vVV*0zvK2>$^I0#Pbd3h z+@4ML2MqRmx&3muhgS-HV8S%?A3e*{QQGeThvic)&n?-*mZh2G8Lk)n3^Jv7dXQ-k z63Gv^yYkh)Y4h&jLdjPT#mEHeKplhi-nkG>Uhr-dqk1A7pKCdhs~&S&cI1veL9)zO zkC1rH9f8scmE4Y}3r`_9ya!VgcEbOv=kxytPX+Nm{#7LMb3D)BDZ=wSo;G18{I7a; z{x^7)fyUe)8S8VJU46%){xdJ@NM2LK+SnY23afsem-VsGhnc~IF%8-Ai@bxJkymC0 zb4Mt-Q;vB;Ar}Hte={dI@d`8qZMo`4THy&a9l_jmi^HM!IB|@BN1VfQz!6;isx~{GrzkP7`c?JV2<4=rOjGtL zim&>HVD6YCrN?ghke-{{&RqAPJwfiPde(fsVXR;_U!qbV^{{seOXH z<*P^A|JKL)e8<|qK}1TRpmTEs@m>CA@AlvpE6w%Q)vwM5=e}zr4WO?dp0j@STRZah zC@6rYop50T4c52>eQ$;K!)0wGlB6ihuU3z>YrXolt`0B|IOr?=D8eatGpy3{#d* zqu>|zJ1hwM2|@#tw+&48?#O#b30uMBA!2e#c}Lz`(~+L)x7hG1I$ogh;+SvAX5tg| zW$n^q(3;4OyeX&h)GsL4)_cDVr49GZv-~wrJrs_IGUj54W!aWD`U?yoNYf4-jYQB+ zq!|W`=(@%rYHDhjkun{|<~B$|Yh0)(kAUU-$k~78`PqMi=D))Ke9DWb`dnuqsl7X)cc+@PVXmd&c+Rq3 z4euXpXg}W2-gTt?uHb$6{o_yf?;G`(V;mL3CzN{*Gg9t@vAK%M{r+2G z#*fgDW$@DyZ$)r5aYiMhs-WN&YLnCs?EokofoUVjD{xse2K|lzMg@}!i0(!5R1+^` zp3~x)L7r2|^T*uts|v>85RCl5h-<;X85od`K*K4}N*<`2e1nq)!3jf`IT-A{0L_db z0q6m>DxQWHS)gfOP+bWQbYt&_1)>4y^*qE6D6Zh713bh$8A2Pzy}!-9Ut!*tVUnf1 zfCdpccvt%hvlL`=ArJ9egwVY{;9k?X*CU+wFC?+HjeGZkx5(H!1kpBjY52CSJ=Re? z;BP2IVA?ZeG(~)aA;km=L))5K0t?gOP^Ucrf9)Uh7}E`$Bw!%vMgzPRg{o+8vM@xl zlt{L4k|ms^!a&kWB)y2_$2y6FNK{Ue%SrMKB=_qiOLdYFL~;u!xtx;>H;@z&NpFf} zvQ835Bv){fQ*M_12pJ;#*Xnsm)JYD)UptJsD`dK#le}jju@VWB*lrevvcH8$Ug9LJ zoa6-qNf>R^Rty#t?I$|P4~S#~CwYkMJGlM3uuXuy;#7A)0kbgIa|C@|v@G?h_NTv7%Q@55F_W!Xbj%z8 zPD;njG%|A4RYSBt7b3hGk5#E;ssnsI>!`L64D&Ir@NZAmrN`&H4z)|4PwVm&>v5Bv zY!yQNax3jH(WK{ourCNyrQ49~Hfnl<1)cf9ysrFU!KSP>^&qv_2_ync8y)^gvagS$ zBd^Pn13~oJIuJ~>Ih4S_;!O_!m&x8iI^zj&b_R06SY4P5|IQ=ZlDtz9Xri@o8|bXh zZG*7;SsR}Nfb#%rM_8*nIsQ{%xu4q5l5&hlLT>4OmFIJ*^oR2O(>JXB;?M8-rlD zm5PytcsCbCahMeaG-BE(#fS}s_VkUc&=4eaBf_#}zRqMsn`~`bPF-GLQkVrjsO?8k zC{*LM6b_SW$D60JBHDj41|5)HC&K=b!UhVuHlw>%vf2vNW7;AFAb!5y1wo%Jq_PCL zu>^X|;crXDT(u=%t!^VfzFy)C3_H?c^QE2_xD}k+oPq1LEuf`^+GJl}EX69?%?K4vA-%aU z1-sg$kkG)%hJmaQD&qb~{j>Hs=&^7MnLbv8ppfZ8a6m->3qr&nHAHhz?15=M3KX1_ zjg}cTeJvbK<8P_Y^9r5n5iF}RZPPjnz|(&!*;|MOQk%oSB01UnEoWdTiK?H|zay24 zD~yG*J0PBAY59Q_q#78nKt7!x>GHWw<|z4gu^bkd_C6+KNYg85E|I2>5fu{pDtFw) z9rwXeDpS7t8S?!kc=CKdK_QXTB1$9Wn-o&p4u8sbAzY2+$MSc}JY(j<`4rt8o0j22s&s?<_s=MPd&23=Ih)3QGfpj!yv72A1BuGQ=I{C zdK%=XJ$u9H?BX4Pc>9ioBqW1nE1ojY2W%k*WX$^DHmrqW%jB=<01197gk;YnhYUSjr&P?8vCcV43K99VxqRVXTwyP&uJ#?rCwP|yZlt8@=BJ@zd z5G-gDy$Sm6Txya|Y0n~zBanwZlVi!=c&FM64Q87oumFp2N3|2^Go67o*f8+5I)V#c z)&4w!La%NO_+Hh5L`lubq}yqhjQHZ=Lcz5QuVle^A2k95V2|EvI<1d8sGsBwx3`k0 zrhqE!qKep;(Z>d{Q~7A0IuYg?M3uHkFGB~a_AlY?49vya_D=7`ES|umFEAI9#jL{r zMWzpIS142Oo#p<9J+^-LMR;DnGmX`|kqVftmt%h-koZFk!W@Cgj^JfiP*WKkIHSKl zOF5v09psyMiwrdIL8I?$+}EM|9y0p=mivy^eJ5KDoWIL`C+fZ%jK1~Ucc||Bp3!#! z_wA$!Dj*WWHM7z5{26YnaoeFi$X5O$ z+6*|c)aqKxCO$+`2`|<-^pt+;k59>sI_(ferfy^0kPXzKr!ngyLC%K{ZA$eApr+tC z9#S;1{rUQ%_FRHdX1phk?iaE0=NSnB=((dK69SS?H%rdfG4j`t&7; z^zA^opP9d?AI34!J2N3eRAy&jx`U61QyduiHtoOXqL3BL+QU}=hw)AOtq-uJvGxyb zj;+W8?RG?H6}|nGO|xWSAJ$GGf;MTN_J=o(3+*W#MU?lM$g{@g1-TuW=sT!Nhcv zGti4q+mgMN6q$E!kDRL+=Ov7DF*q+K&SS#27{@8j&?w}Q4SGb!er-81!1X09pM0DDHIiv{fV%)+SWQggG z#i0&(i2XB~kHq%3EkqU2``e!qJVSqrQ5eR`bb3VlJEuz30(~e_+55g7rH;1m#{E6a zXWntDU!Zew(rB)i(|>)kw@Qo;TQEM{qrEVgX5QW;G|DvziW2bcajZS1*c8Q+i_uw& zb{oZ^wiCS>n~~gjWPtBD=BqyJIwHAGVnrrv zcUBwiN2MXTY)~A}djnbu;d3nL8XaD_J&nc^d3&HKx1lTA41QDw+LG(}n#Hf(M_ zwp8^G?Rmz)dmEfS$J{`se<7Tael}aAWSy7>9JmN`K_d*lPIZV$}m<8 zt7OGI?C1rM`$`BLi~|P75n^Ou{8Iztb+L>a09k~7ioyR%DxZ9Y?v@dj4vOaT`*6(K zpC9mbhOegH+Ay9&c~GN13^DPMRX!v%5*tpA2%TP2sD!YRg5zsbw%xru+*fqh0I#ro zJ$*5<@(dc2e4I{UE+;OGMtmtEMjju*q7fHfHB*3#5gU3kO4901tlYGQ=gaXa+F?r1 zcd{wO4$v;uX^(0L;mRrmCbb`FYfq8@*)ay~%^060Nk|Iz$3 zVTOlAuNA49M%Ch7l0je|(?)f{9?BXL7TVgQbNE8k1uWE5r-`6g$kK}Yfz9_>_-PB~ zLJ+}8Pt1TI+Gt>W3lfakrB+3{8kjbT`#;Y7aqdaG2L3yd4I4ze3_K>o{Ee`aJGu4r z&_3g>@ZT-`DXg))seO#R;g2LPi(_XZ@2B`n`?WeO?UDD9kf*Wsf`k^ZglH{OS?V6) zj?3Y=8T;wfWPi$MyC8d!WM>2`TOjXbI9L6scGZ#Y@0%2ME-ux zEV?`&!!nF1zL7n}ckj8x=a0r$DC3(H8{bu@$M-y2q&4O5!gGo5qG){GlSTesVHQ1q zo3X%R%HQms;(LM$_3QNIXVijodDhAJ7R1Ik=k)mAVT-Y*{Ea`C_$EZ-Q)GO9y_Pbn z=kHxC-FkFgsIn`I# zFl8;Mm=ldD23bnguA8k01=sDc*rOg{|+>bddRxvIOry#xIh0cyV znnNJbiBF;3CRTP@EVipnIV`e>H?=^0DV6N%vuQBG>D2MA?Vz-P>OSNWDWd?|yKgZ& zh00eo)8K@iALZlQU}7Q3W{RJvXiohik!brt?g;pK&R=A*Fr2++^v3Zj_Sa5gA?}r2 zk{Jdcd0lq&nn-9He4}f7z z%wXxA%ktyDyD>H1I|IY+>$CP7+xLRNA6Oy_1RL5}WasXWPGn;Z+L3zMj&5k1ed>^O zPZyThKSmK_I{}BSTDDTDZ?@sZMz;BZyiMAp6Hv;6t26L86ANkRQ(y>;yeTW$K$U*}M%p_d{X{Sg4`Ei4fA|9XA0bO6+?zSY!HQz*kB*ayZE9YZ z??RmIgti#BwzLb8mh$HL7&p-4!t*0MEqHdIPkjdu)n}7FKz$OQMK`VMLlV?sU24z~ z@gGmB@3XlSaa(`3%i}G#X0+MaDA>9o2t}}tN*S92V}2)mQpS_j?}Iz7M~u$f=YPf_sE(j0*~L57!qNs0B4VJj+qqjv_dOZZS77aVM|YbGL@-Ibp5Fy@LNh@LEw2x zdqH3cl;v;QuJLU6%+BH3BX5(k4D(?6lJW}r>inR)1?N5SIff0nZn1#CIx26YR+~i( z7&~X+C&Z3e-2+xkO>m?atSB{sd`RD*C4)&zhCvV3aV;6ZtV~NtJJzKN?Kq4QFlYys z5Ms6C^Gw5eEwSH@2K1z^nvtFU%eEXO17v*oW4eXfn_+R28! zdPUrc9z3QZ8k>N6Lyet|IuV8nat5*$xP=|4l&;bGU3WIN#)hB?Y-8f5f}Le(2(ClP zUV}0zZ>DDYcbs2zoH_~eMn;T<|LIdx*X=M6pem`w#1?2(Ne>qY|e z?@!HY3wk2{Q&gc(#CwPPPbB!RM4{Zzi)t{lvZ6|D)$8;9yu@M;Se7?aU8Uz2cT1k!^b$-o zH>CwZuil6oOYl;(FyR~ntDD({sm&;@c2G=Xz zd4?jKjUt>$MaX{o`tTXcbL6eDfx>I@X@ z(ehtMZ!I#za$%tT-_Qwa#~;QM#zXeA>I3a@u-^5Z zR>~#1@kBJYqF5g0ZSoyxlh>e4UK|Z{4=PF6?hM|+dT(cF15_;P+ZJtUO)M^r2KqBt z7~>IDwHMmp`_KkYMKNECHdw9?6a=2()s>~QAW+WQ-#KHcaIpr#8%=6|hkBsTGBdf9 z5~^vshJ#ePV`ara@K9FjztPjY_iX#{L=X1?3p)Ba>z;hB$AJoxqJcscZ z#~bGUmfG8#w&y!#1^(Ap!e$laOV9W5?7{O99$D5g z<%{|kVI4U7WImd{#lDqyrYTEUL5j~Z>})+Yl*4ME9Ps#Mb7YU0MnwyvqnWS9p!BBD z;3bTc1Cn&s8A(y|WFQwRjVK|;9|eTOqSfv4&NhsIZlw{Bp?&=YuYY3vQ_BX+yGB#t z92H~RJ*ae%rwZ!gg_ zw=I!HU(RSw~lvX58 zwmWJk#&h?{@!aJ!>YqU4xok+_KGyEMKtq4V%9jyd%A6_Q7wE;EFAmRV&Lr0t=*1(R zPR!WQCi=Z!&+X-qbKEpE?Jv`EOn{n4pG_{uY}rPuIY|<}1ZY=#N&f5$X6gX-_Lb@r zMgu;^YaQ|O(n39NwDG+==#9&9(e)hqUVE>dzSlnK4BVZbwiQ(v!ySAKgX3o%Gg0A@ zNO6e(%rt>hg~`{iI;f3d)6n@?e5a#=IMHp(RqL@_RXPgCiS@l_IUb|*^7SZAD-QZ$ zxh_@PNSTmPv9o1#i9l?BAEhUXp%iNXHyfP({kma)*Erw7ek;C@rejEU>{h9H+w*Y* z+1WwaKt2ju?H$yqpkvEZrgT}?y@A#;KRB)ALh^Ofw3Q_%Dt`p>{{})qi#kN{+S!g) zGV+1J%0zqM4t%|i&Ag*X=9F#qS1|A{0KRyqeQvvYOBz1245vl;QN%$9dRkoh0={!|eGvDE-r^*KY$e$-W^eeEk z4$B3<82L0z9*6jF76h)ehJ72#C(>zG^Aw(fdYJ-i<2?AVcy|4fWMgfd0S7%L&%$xa zHmiTE4D}!!Vr3K>CjAz|kCqxbW(|?L3`HmXn2TLLOd3|Bc4NrzXGY387@H46fZCTs zc?O^o$vm0iWF}RnVyj8T{B0>xXk3K`BeED3>H`N9C0C)3x0;g~j#Z&!8`dRSJRy7fiM(1He}qPxMRzqzjJ5H8IOqu)#1drnFPEXdc*&gaP$m2l-pEc~ zzLYaxE}7%R71fE|Ac+xVI~;UDK6x5LvmmX{;RF>v;%qohb;9#l=qpG-D&7_hJ$Z?S zo`uyuWdYiZ)o2ku?MokFw?Q0e=SCdBkcYQqJWbb|(=^tYrqpvu6OMljrv|K%&RJ$J zvNrw(nl|G|f-TP4^am;c|C)4c>8yuqW1Cf_`KsE!_Wf=oXzlSfynR+mt@YkM@CnU8 za>@HJ^X@iyllp|NfcJ=FuuY=?)~29wo{4iMgG=KKBAV;D+mg;Pwok*3s=kc^G-F;ox=kU(YDI8HCKe{dy4@6F3>4v#k4 zCr;tf@&;|l>Cu`Rw3uj^)L5adH%0RyzOjv|?z`cjtH!ecU#l9?+!V87BHg&$6wTe{ zXqFnInftZTP}3~rW^FtH=4dP+UfxpQ+w~=M81nQdb%|@vUIn|U^~bqHr-DU?=4^{CG|(xL-~~cEhug2`b%=XhFoKGopogP zEl_eLJHy&UH-J(l<840c7MVu%}8i!@9w zX3gUJ)c-*Dd8w`^#3S8<)UZeoKF6iA4Gy|=cEOQJ=QlFgCUS|D&QB;q(Hyf_eJs|c zF|l6QL#&lO#XA4ASjV4RtR5EY7npcO^ZGa;Q(pi1Y!7)o0LR$8ZXuT*@=9Y{j9XaA zZvlI~{9zAWL%EDf12Y3m9J;c5Q{`PZnF@%Fs}g0hL`zr1l4KbD-v|f22^xP|N_yx6 zV@4eIE$C#Gezt5kHf*VYbd3wpx8b12+zJpY19Qw`(CAIhzS`RK zA9@DUWi-}CRjTYN7L~P;P9ErrUCyGj`b%Y~ywjo#EnozE+)g)wi{aDdLi4CK8W(k@ z5QZXP3R%Te<6ZL6tHD}ATs7#*EmjTo{hq5v931p&unmq(HU2Ks_)~I;RgD88jbg@V zh_x&x*1pkL$IDntM68q{J=OvlD^ak-U4442U-b|xuY8}7kId`6bS^m592=PFCiIfj z)4J|4Qe>u^l@!dNA=`gv(vaW7LD!In0b)gA)(~`Bh=PrTf6VogN(VYONX)-j88qEV zNjyq%Qw8I0EZHB5WP@U{m6P@fpOoE)MR8RZF4HB7FzHa!S$k`y(j_0zeeZe|7a*ncod z<>_Up!U397KY@8KB^0AI;ZeW0*tbvu7#rVG7VZj!3m3&kj@tzqCcAxu!&773?KGWG z8YWkHhYP97>7qWtVjY*Ep=$gdD6;m`oRnliQ3eXOt2jXG>vULl*l{#`^e*k0-y*Rc zv)E!&<9;u`n=EJzk7VilSqm-o6tp;0ixIb~7UBt(>|>Tri~m@P@8SRqi}k+y;fjsd z7Dpt`-*!sH2Oiy6mo|Pv%GT=b{*wvbLxBa`@qHJrgTm2P>>D5=9Lma5Mw1(232!`8 zR;e`(EjhtU4*GJMEKrq{&@2SN)I07HHuX+sM#>d1HV5IaHDI-3!Y7f4`I+-+B=WC# zh%fQE^Rsi~_u>&~6*eP@<_6G`{al{Cr_PQ4zamd(;_)WZPJVwA=9$8g`&VBR=C-3f z=jYioxD(F{j&YiiFloKgAL%3Smwjm%X{5Mcb_hzpr}a&7A1UsT#E>%*p&&8qy@4e9 zT(l8d#n0my@0Xs&}(b>K#uLk(6?(7=tEk-@%=*> zJ2UsBYIL_CK7{!>44mtP-$FDNbPj4c+GQ+V(-pi|(($<^goBIXlUpnfwW$s)!$T4L zG1RjcsR<7!;Ij)_Sm&NNmkItw{%vvUfqeC)g$Qqt-0Hx0CH5Wo=Dq_dp*;jw|4SqS%zskQ zG_;OFY8`=xNKB)<{3nLKK%;u=jLzI($p=|&{u7twT4#0V2JajiU{beFc{|rS`y+h3 zy-59&BhW;2{$oQoV{K2d&hGNR+yaS#J^#y4Q^TiOUDgZzJHhY89qqzUKrIk zy1!t`%RZbGJf7s~Ti%RYJCYq!_IZxxP5HakzZdkm>W8@UEfAy9? zK4oXFb;i!T(SOYk&WO+_MmX)Fc6dkHH%uIw({L)q+Y9eLzTRs4j@*<6TR2H=&spzH zX>bJVEx{F*NT+kkK5vb2zXM+s4Y{V_%Rb)3hA&fm7pTWMVSia4)Z^)9cLe%7;v7@b1UI`!!&z;z8pPzmiM3WRn|AW`iw>_Kn*)!5y}X*{^@h?k|yYnb*2 zjNwIj!v)_HG-y91r{JVv1C2gf0Isw(gE&svBlFW2IuSgOIET6pafWju-J`O0J5@Tv z1~$5x$NM>ymT=>H)IA2BMsRXBv_k9 zf&h2&;3H6L<8E~Kj({_VKofmf7HVTIJ>};fL`wsaMt-U_!P>YTIl`${d@0A`h|S1) znUN06=X%b_SdkH&&`Yweqb)RZe3oW>ZByp7U+_Y@82 zR$=ds9gNiCe$BD=0(q$PZ52Xo0iZAY*hc`~p^iY#Wa2asp2>nT(nTH0n=G1WsuDwM zO)kAcwI&xz=Ns7CW9ht^r;~QkiQg^=1KWyp3x>7vB?c(Qyw0p64U@e&)(3Y)-bA>j zC*T#D&uQ)Kt};eWGhUE8=)>Wh5W8jp_qVX4EX;o?_s5m!J8>=2Vuo;&CXahAgFI?> z%>pvZW19${&>_5ps^+qYrK6icYAFQ;yP}+0=cE$2c7+`kgd3W4 z))rW->vD-7wpz7ES>g*?{ga1Vn=)7|(ek6Rc^h40=u2MtWGZR?>Im3bDjSQKU#uoH z(RsVj%Pg2K(UUBoV-yp`KTK4t9N&dw=>AwLS{;MRj)D;ALN=z5U;Zps2sdmZ%sv@G zrZz!AvG2{kKN+R{gTi8enGt@*2v;M7uZ7*dOkyshSO>9KW3&DT8Wo`W;O>X3^Y+x= zW$#ExhZvO*`{th4hS`V=?NA$T%*i&^coN+&1$}50OE{~3xE>@2%78yjK(&Wgo5$eI zs;$b}@ur!Wri5;Wqg_o%XCL1~3(_Ef%~Y^dBTqaLD}WO}_qCwh4=YTWI+l+JHY z_zAAQZaU%{6wXHrmPFRRVcbq)=>w~Ga$w$M^f^;@`G)#GYEb9lV|V;HgMj=?21o=; zIR=%;0{^=S>dxHt6O(zwO@GH!0NwH{Y*0Gs+ssH=3uE&mNRoCh1Wv6lv@Pbyy;&gN zCqifit5xCMtg#ONNn>XNgVXqschV5f{R-kvx3y{Mcp-8JbD#7T7A-I)NFZ-FdGpVw zrj6#_2e|iNVQi+Ux^@W3DsR3K8CZgmPl0~1AmFZ{m^L-VE9AtPxb)*Klz3yK;U;b8AM?48fvbJ@F)y>Djk z`RsiQdoN_~Z?X3x_P&F?i`ct_z3F@I$cS?Gu3+yw*}ICpYuLMvy*=#hW$$I|jr$Qm z`)&5Vo4wbtH{B-`8F4RrH?sGA?7g17H?a5p?EL_HH?#Nm*!w~Dewe)`*HUE zF?(-h?^Z6nzpCELSfdyZ`PlkIh~ z-AlH=k!=Op=r5s#YRGm4*=S-_kxjO5k!?QN3dvSUwpnCbL$++PeV1(G$@V1KMv;xq zPlkq)?RByZAlnCIqZ8Z}pOZ}?TN0{s=m<2j;!?8xoopFoqZ6eSv&puPY>UYDI@zkp zM)&Af_{p}JY>$$SzQ3w?hHOuf?N4NToNNck_C2yCp(_ooC)*IRts&buvU$ly1roZG zY#3oGp(3(fLAG1ShO@ueSR$K)Y%|DKOg8$4ykZ&IGRW3Qwsf+6mu#1kZ6n!I$@W{a z^&%U6v7w>6>jcnE3Nfa zmEm1oSLOD)6-FVr*_4&VcUHMdeC4ikkK3)Ij8X+|w#%p4<}Sb=;nM>Z*VVae$`tx5 zgQt6XJ-(XKV#HA8uCZlLvw_3d>wWd^vM9Z~rrzgqyNZ_;S5_65RJoN!9%WIDvS^XA zXt=VdTv=42Eb=Og#wpX46s3={NExRL$6ujKR(f+D{I6=d%G{;3Wg@li8nPq7!@U)i z^|ty7mfITlGPlQ8!O}b2HcjLsGi&^WiIc9mcJdVajG4K4vy=+=iutvM#6F3Sr57;?rKH_k(X3f z;l>Wd<1Q{!N{g$il%?*K^@_LF#ahgKZCo6Rxw--$D*FfQ;RCufL7dVT{-HO-ksjjRk_Cn|QU*tsQh-bY4))ZH}>y^wb zWkkI)tJYUjW~=s9c`Ko3wmI`|oNL4126UHt>ur@aOdU~r?&50bg_rcXq^h=bsjb$- zyiOAkG`y;+q!=McuZ!#JE0@$j-MzIa)S5Cx0R67cP_nYFMAGZPvD#Npx^FACaU~(n z&Ks4P#Wf?nq9PRAYAUOQcZM<_733_@R@M_?z1!=n8^h@F=Ui>j<|>p>hGMfRbBpIH z@)i|ktZo}QqJE?eidbBOY%haOl-X*0)g}15vQ*-}8psv-5Ov#jn|)3`QdI2q)!Rmt z*~)zMS7W*Gmbh!&o?>q$N|lAGB+{DVDqeN3vlV;s_ZsWG#H=1UDThpJ#>%`i!9#2| zl$cUbyuw!FuJ;n_GIyP~fY=>OOzTPsw^5ww^CkQg+_aovRb)aS2uCW>vP6~&(7Qs@>HVQGb}5_PF~CGzIY(Ah`B2$o#W zq5(#c@}V^yZD1!NDlRA9BNzElEqHp&#KawbESEO=OVLrjLZ4$jtBb49#Z^P;c+DDv zN?%5eI7#2*zROohRgA|=-Jp9#U2P3iC`0+LQlg`&1dXk(7Ule3Cr1N{dQDAN2HM%$ z5^B|{BPM;em9qvDIpggY<$H|ugc6|(=ju&FWf_WWF?ii#{hzI;-zZPzk_xY_0?o{5 z+gSFyqYqar5BhGm$Hh3{FKDwrP|d0V>zh1Kxlz=(j=i25B=J6n%(dTUH5GlT`_Qj?YtLgYKd>P!(DN6{$s+ zU5;)F6{XtksVudP0zw0bR*T7hbToty?I1!TW!~DQs0+nj^am(>7LHVjbwBKnj>{Ut z0*-;7u@yz!y#DZ>idswCD05FTS~2)SK0Miahg0u{_#m$`Tggf&Vrgv^wUZ;S8#!9x zDo9LqGD-ofl-0%PSDd7q=pt<+$Dm@OmaHBrh>ATPR6_JNq$@oHT#Q*74Xx>S4|~Ie z6Mlz<$^Vuy#{TSYGGoliOpGp>2?Kv(`0T%END8f367(O#IKs<*0>l~=pOTP>09gED zKT3%O|Nh;6ha;3G+BL^AuQE|2k4(&8=x2FzVWI^ow_MOS!E(70XDPPCTj+1p=fjg8 z`S<3@PWkSqj8dM4Nxw|c=U9|DI^MQ1PKnEjSK>2K2v{h$boawrV2Tpog5}}1ixf-q zASJQxVkKeY#Sqh__#4WXD)EJbm4t@DN?g%pO1y2TlGr>{iR&7wSQ>^YaSb-`xaC<_TdYi2U>yW|}aE3v-MxuMuXBFy{z!zA*0)W`!_4!n|9U_X)FE zn2!nbNnt)C%vNE(EX-GhxlG7sufW~H{79G$!heG>9~9e3z~Y>aXn9ToM{#|Hw9l=qiXpp^ZAVDod3@zju$+$t zabsXwcdRKZ_LT8Ww&n|STrMnDVl5KeX-i#8eDG2laL$PTEX_G(E33*7!dK!dpoKoPc6X}46?ORf(;fPG1~(ur>Mzwy>Qi& zQ;v;H@@SSG9_)b1(2tU1aY?NQLQ?M9NQmvS0&F6Hm1XRKkzWgg?&?yk006d1SY1c3 zO~SgB1Um)9-T=Wa3opK6&q^283Oy{$K7%7|P$FEn!Ktp6G1iPuJ}N)uuEWBOZxMP| z*15^`m~_Rm@p!CiLkA$EI36=?2fO$hsY}n&dgzOD?=3jaa1t-US(vkMZu?GaF zZsD|~6k6b6x}^yx?A=zlu>4<6;SR?*iV{C&bQEzk#PhPKEE|vQS|VL9UD%5Ecyelv zahgC*k4mRn*K$uK&+$g#h9Y%Qf>CzZAV=U$Mi1UDK(@kBmqDv^aMxqsrOf4J^{Y*| z)??oe*;|4(1u~S5UJo{>>GS}(b{Sl0?*?@io7^ZE^4w?el$tG^Xg@nfy|j4LGVCYH zYIc|f^p&i1t)P7Ix_2zE~f=cxKU;TPPIE#-LR)-u!p8XS_?Gy#IC_dQ z8!S1Q4Wl!`yskT``vQ@!`4=fljwL~P^kPLRgn2Rp7|Y1-VbR+Gvul!~q`^$b<bEVG|^d|+q z#F8GLFR>qClAjTmk)!yT^)CfmQf1N;=B20geBzY+ceXF3C_+06m1^ugnUSdgqp(*`Fd^Y)g2!2NSeFEH*{8~i( zw_sz9@E3q#c@Z%lpZ4{ejA5#|7O8YVoBf4z4i1MG0`_%!2>)k=p~l) znI?K8Ci)gZ|Ei#uSkf1n(r?5>pL!*a;C(?av7|T3Z!U#5q=)Ejg8rzWmsrvp%a7=d znCOc}a)#F4TpuKs^v3)Wy%7_Av!Kru^b$*Yn{^ev|PZ^T5OGma=FvB|caBoNIafxq@EebER()^ksrx;&Y|9P3G}833`domA+ZfKPl)XK395W z3XgxgpqE(EmvL`he!oGfsfz^MWc z7dTB|S|=cSo4|zvj}rJUfineOBk*K_ez)uV85coBL3k7~x;DrKzDR7a%eK8NG z^i&8uM&LSu3j|&vFx?qT;Tr^ABk+2GejfCdmypYXB+d4wr566?NPI!|Dm9lSkf1f z1wS(8;$_6FJ-m*2D^Cmh!vahC9PX{t8!^#mPUQh!6!a2H`czYYX2e9FgY`lBy(Z`- zJ^(C4&HN=l#l+8u8NcZ)I6i{r^2`xf(zlTXKQiXxWyD0U*vS`Xa8o(G#N?HZ$C!Si zH)5hsok`S+GC zdLt(K!-9T}pqE(EH;DBV!gKL5Vxq4r;Snqp^b$*YV|+w!#6-VQ(0c^E#FE}-O1}{k zeVd@aPv&1>NuO$>H)5ji65)R&=p{Z^`ffr02SG2fq^~l?FYz{nzY=Sx${HSk!k9_-Kv&mI!)@CH+3EL(q>f(HrsE z(!UJ+jOlLz?kWALb&S38sfb@<89#=7>?h+lVq^Rf&<{l*xqmbW`(K3Re$a4%3sX41 zNdngioFlN@f5{iPOZXQHEcZw55;zs(5c+KpI8)#s3M}^%UI6Zo^wbIeHw2dJ{T~Y4 zEc{Oh`WAuvpk7jb4hwvVz;eC&DuHu^!e1wFk-$!Y<@)li0yhZ%I|XhLc#XhvJ@)$o z%k|Y?08@VCdg<>4mg|ol0?YNp_XL*fgP#d3*Z2D4IxgZT*XuF_mg{db1(xe+w+SrQ z$LP>;=`chb6xn6WqV7dO2I!Kh?XkOk|2rSoYt`S(Sw-g90 z*H20Wmg^zQ1(xd@-w{}@SNvRtAH(C@BCuRfcvoP#KJbO~&*b4#vG2>|De!QCGbeHX zSpv)XwOe30Uv3gu&VQd0Sk7m62rTEPe-l{FH+x}So#L1C$14Sv^TAwT(q}oIo-eQ* zAG-yX<6W=7a{PLqz;ZnLh{R$%xk+F-K72u7Io|6OSdQP`5m=7LJ`z}tuTBXp$4eJs z-Ja4f$3LS5mgAYJ0?YBr4Fb#Y!tDaf{=Zsa*`MDnuCCk2-MXRD+a{nHx) z%l_?T z0v8F~B5;+!tpW!HZWH(i0(T0$S>P^#cM7~u;Ex3E7Wjm~n!tlE6Xh@PIDwA|Tqv-d zG`a0--lfT=9?=s3qR;hN6QT- zya~o0?T&HbXV00Fe#~2(@8$=)<%w<_D`rQznTa#p%*5esGU*I2owko2*OrJ*vr0Q1 z(AMpAGMj)npwFy^v-uqJllk1v&gC;JJC)CD`k8!&#EE=n7w7SrJ$f3SL3T|PI|I(3 ze)yZv>8HM#>lu%G3t#g&Z=*9i;B9aar?ZVN{7ARK<+QWht-&-1KrYr zpJFByJ;Ke9IJ-@Dd1#yL(bL*dB#W5&$x;;uvndom3O}BeDYsAHc6kPy0>vJ_)?L`C zYeLb4;?6L6&YC=;2do*2o~)KI_DHpKmFbK^e>D<{J)>4(r@N`$ zz#U$6P8}JiuN$~CKV{DCC?{Ms#qZh?-dupuJ9vb1>|Jrfk?yGytrjC-_g2xhPjqs= z9#`f-*vx~NijWMmG<*}n;2(cPMS=vEiROT%!9~}I)r(Z>--Cz~_B`#nt3filn>@+S za)tZ0zL7jpJhG5s7azFr)Dku%lzH4UHE|qHq)!GP(@+De@fPF0XH(7P{!pFr+>Du?4kiECsx} zu`hAVZtSZTvm*=NbGwn@SyoL=P$k+W*68q-sIsQC%2&o4r?K3LwNv!U;2pOyC8BP# zn<34SQ~Mw{GtB>MTxRibcb3R`=C!fTj-3eYjgri)z^idtcQlG zBKc?KJw8(pO~Z<>3ymgO%* zLxhYGk>SqTuOUFjh(O$I`!#`)NeV3Pzx|rP$RGud-jaLv@DoLTapj=AOZRICL|zd| z35LP)#@(+W68Vi1@q2mM{l2U&(0G*fBe=Nr8|jZJ9yykv%VOE^Pc)G_MqXv2jH4*> zCq>4UkcI$dwLZEpdYrG`Gfwun)y3Wl>S1**{5nvBLrnicj13(TLF$GK!Eq;}s}?t0 zo199kYVmb%G#cKTngVi1b5L=)tbv%12U(JFqvkhK8WfK#4cKE!gRmS|^Bj_kp>HCH zN92GIn}kqn93x%wF;7v*4VTU0-chfs3e!9T6X{HMzZ#tD+-`KGv2i)Ht zZ*GnzvcsnP|D&mrK3?N`7dy%qZk6;2zBwTC>)91`i0+;@Q=Fe+=)H=ZP8e2eq|^Bs zhORgI6oO5#^pT~UUhCffw`Lgnh~i&1aN&&wAA%UBx#SSjjs80gQh1uF6E}*1@W0)N zffd*}^wT^`dS_`KXz0`V^HWOA5$VX AFaQ7m diff --git a/vendor/bundle/ruby/2.2.0/gems/blankslate-2.1.2.4/README b/vendor/bundle/ruby/2.2.0/gems/blankslate-2.1.2.4/README deleted file mode 100644 index fcd3f87..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/blankslate-2.1.2.4/README +++ /dev/null @@ -1,31 +0,0 @@ -BlankSlate -=== - -BlankSlate provides an abstract base class with no predefined -methods (except for \_\_send__ and \_\_id__). -BlankSlate is useful as a base class when writing classes that -depend upon method_missing (e.g. dynamic proxies). - -Copyright 2004, 2006 by Jim Weirich (jim@weirichhouse.org). -All rights reserved. - - -Extracted from Builder because, for no conceivable reason, -blankslate isn't in its own gem. Gemified by David Masover, -moved to gemcutter by Jack Danger Canty (gemcutter@6brand.com -if you'd like to own this gem). - -Explanation on extraction from David Masover: - -So, Builder seems to have the most complete implementation of -BlankSlate, short of Ruby 1.9's BasicObject. The problem is, -this is part of Builder, and still inside the Builder gem. - -It's especially frustrating, because the Builder source -(lib/builder/blankslate.rb) seems to acknowledge that there -should be a separate gem. But the only reference I can find -refers to onestepback.org's gem repository, which isn't working. - -So I built my own. I'll try to keep it up to date with Builder. -The first three parts of the version number are -the Builder version; the last part is my revision. \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/blankslate-2.1.2.4/Rakefile b/vendor/bundle/ruby/2.2.0/gems/blankslate-2.1.2.4/Rakefile deleted file mode 100644 index 3464d64..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/blankslate-2.1.2.4/Rakefile +++ /dev/null @@ -1,13 +0,0 @@ - -require 'bundler' -Bundler::GemHelper.install_tasks - -task :default => :spec - -require 'rake/testtask' -Rake::TestTask.new(:spec) do |test| - test.libs << '.' - test.ruby_opts = ['-rubygems'] - test.pattern = 'spec/*_spec.rb' - test.verbose = true -end diff --git a/vendor/bundle/ruby/2.2.0/gems/blankslate-2.1.2.4/VERSION b/vendor/bundle/ruby/2.2.0/gems/blankslate-2.1.2.4/VERSION deleted file mode 100644 index 7ac8e7a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/blankslate-2.1.2.4/VERSION +++ /dev/null @@ -1 +0,0 @@ -2.1.2.4 \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/blankslate-2.1.2.4/blankslate.gemspec b/vendor/bundle/ruby/2.2.0/gems/blankslate-2.1.2.4/blankslate.gemspec deleted file mode 100644 index dded1b8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/blankslate-2.1.2.4/blankslate.gemspec +++ /dev/null @@ -1,22 +0,0 @@ -# -*- encoding: utf-8 -*- -$:.push File.expand_path("../lib", __FILE__) -require "blankslate" - -Gem::Specification.new do |s| - s.name = "blankslate" - s.version = File.read('VERSION') - s.platform = Gem::Platform::RUBY - s.summary = 'BlankSlate extracted from Builder.' - s.email = 'rubygems@6brand.com' - s.authors = ['Jim Weirich', 'David Masover', 'Jack Danger Canty'] - s.email = "rubygems@6brand.com" - s.homepage = "http://github.com/masover/blankslate" - - s.add_development_dependency 'rspec' - s.add_development_dependency 'bundler' - - s.files = `git ls-files`.split("\n") - s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") - s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) } - s.require_paths = ["lib"] -end diff --git a/vendor/bundle/ruby/2.2.0/gems/blankslate-2.1.2.4/lib/blankslate.rb b/vendor/bundle/ruby/2.2.0/gems/blankslate-2.1.2.4/lib/blankslate.rb deleted file mode 100644 index a90d5f7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/blankslate-2.1.2.4/lib/blankslate.rb +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/env ruby -#-- -# Copyright 2004, 2006 by Jim Weirich (jim@weirichhouse.org). -# All rights reserved. - -# Permission is granted for use, copying, modification, distribution, -# and distribution of modified versions of this work as long as the -# above copyright notice is included. -#++ - -###################################################################### -# BlankSlate provides an abstract base class with no predefined -# methods (except for \_\_send__ and \_\_id__). -# BlankSlate is useful as a base class when writing classes that -# depend upon method_missing (e.g. dynamic proxies). -# -class BlankSlate - class << self - - # Hide the method named +name+ in the BlankSlate class. Don't - # hide +instance_eval+ or any method beginning with "__". - def hide(name) - if instance_methods.map(&:to_sym).include?(name.to_sym) and - name !~ /^(__|instance_eval|object_id)/ - @hidden_methods ||= {} - @hidden_methods[name.to_sym] = instance_method(name) - undef_method name - end - end - - def find_hidden_method(name) - @hidden_methods ||= {} - @hidden_methods[name] || superclass.find_hidden_method(name) - end - - # Redefine a previously hidden method so that it may be called on a blank - # slate object. - def reveal(name) - hidden_method = find_hidden_method(name) - fail "Don't know how to reveal method '#{name}'" unless hidden_method - define_method(name, hidden_method) - end - end - - instance_methods.each { |m| hide(m) } -end - -###################################################################### -# Since Ruby is very dynamic, methods added to the ancestors of -# BlankSlate after BlankSlate is defined will show up in the -# list of available BlankSlate methods. We handle this by defining a -# hook in the Object and Kernel classes that will hide any method -# defined after BlankSlate has been loaded. -# -module Kernel - class << self - alias_method :blank_slate_method_added, :method_added - - # Detect method additions to Kernel and remove them in the - # BlankSlate class. - def method_added(name) - result = blank_slate_method_added(name) - return result if self != Kernel - BlankSlate.hide(name) - result - end - end -end - -###################################################################### -# Same as above, except in Object. -# -class Object - class << self - alias_method :blank_slate_method_added, :method_added - - # Detect method additions to Object and remove them in the - # BlankSlate class. - def method_added(name) - result = blank_slate_method_added(name) - return result if self != Object - BlankSlate.hide(name) - result - end - - def find_hidden_method(name) - nil - end - end -end - -###################################################################### -# Also, modules included into Object need to be scanned and have their -# instance methods removed from blank slate. In theory, modules -# included into Kernel would have to be removed as well, but a -# "feature" of Ruby prevents late includes into modules from being -# exposed in the first place. -# -class Module - alias blankslate_original_append_features append_features - def append_features(mod) - result = blankslate_original_append_features(mod) - return result if mod != Object - instance_methods.each do |name| - BlankSlate.hide(name) - end - result - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/blankslate-2.1.2.4/spec/blankslate_spec.rb b/vendor/bundle/ruby/2.2.0/gems/blankslate-2.1.2.4/spec/blankslate_spec.rb deleted file mode 100644 index 03c8913..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/blankslate-2.1.2.4/spec/blankslate_spec.rb +++ /dev/null @@ -1,39 +0,0 @@ -require 'blankslate' -require 'rspec' - -describe BlankSlate do - let(:blank_slate) { BlankSlate.new } - - def call(obj, meth, *args) - BlankSlate.find_hidden_method(meth).bind(obj).call(*args) - end - - describe "cleanliness" do - it "should not have many methods" do - BlankSlate.instance_methods. - map(&:to_s).sort. - should == ["__id__", "__send__", "instance_eval", "object_id"] - end - end - - context "when methods are added to Object" do - after(:each) { - class Object - undef :foo - end - } - - it "should still be blank" do - class Object - def foo - end - end - Object.new.foo - - lambda { - BlankSlate.new.foo - }.should raise_error(NoMethodError) - end - - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/LICENSE.txt b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/LICENSE.txt deleted file mode 100644 index 992a348..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/LICENSE.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2011-2014 Tony Arcieri - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/README.md b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/README.md deleted file mode 100644 index b1d1dfe..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/README.md +++ /dev/null @@ -1,172 +0,0 @@ -![Celluloid](https://raw.github.com/celluloid/celluloid-logos/master/celluloid/celluloid.png) -========= -[![Gem Version](https://badge.fury.io/rb/celluloid.png)](http://rubygems.org/gems/celluloid) -[![Build Status](https://secure.travis-ci.org/celluloid/celluloid.png?branch=master)](http://travis-ci.org/celluloid/celluloid) -[![Code Climate](https://codeclimate.com/github/celluloid/celluloid.png)](https://codeclimate.com/github/celluloid/celluloid) -[![Coverage Status](https://coveralls.io/repos/celluloid/celluloid/badge.png?branch=master)](https://coveralls.io/r/celluloid/celluloid) - -> "I thought of objects being like biological cells and/or individual -> computers on a network, only able to communicate with messages" -> _--Alan Kay, creator of Smalltalk, on the meaning of "object oriented programming"_ - -Celluloid provides a simple and natural way to build fault-tolerant concurrent -programs in Ruby. With Celluloid, you can build systems out of concurrent -objects just as easily as you build sequential programs out of regular objects. -Recommended for any developer, including novices, Celluloid should help ease -your worries about building multithreaded Ruby programs. - -Much of the difficulty with building concurrent programs in Ruby arises because -the object-oriented mechanisms for structuring code, such as classes and -inheritance, are separate from the concurrency mechanisms, such as threads and -locks. Celluloid combines these into a single structure, an active object -running within a thread, called an "actor", or in Celluloid vernacular, a "cell". - -By combining concurrency with object oriented programming, Celluloid frees you -up from worry about where to use threads and locks. Celluloid combines them -together into a single concurrent object oriented programming model, -encapsulating state in concurrent objects and thus avoiding many of the -problems associated with multithreaded programming. Celluloid provides many -features which make concurrent programming simple, easy, and fun: - -* __Automatic "deadlock-free" synchronization:__ Celluloid uses a concurrent - object model which combines method dispatch and thread synchronization. - Each actor is a concurrent object running in its own thread, and every method - invocation is wrapped in a fiber that can be suspended whenever it calls - out to other actors, and resumed when the response is available. This means - methods which are waiting for responses from other actors, external messages, - or other system events (including I/O with Celluloid::IO) can be suspended - and will never block other methods that are ready to run. This won't prevent - bugs in Celluloid, bugs in other thread-safe libraries you use, and even - certain "dangerous" features of Celluloid from causing your program to - deadlock, but in general, programs built with Celluloid will be naturally - immune to deadlocks. - -* __Fault-tolerance:__ Celluloid has taken to heart many of Erlang's ideas - about fault-tolerance in order to enable self-healing applications. - The central idea: have you tried turning it off and on again? Celluloid - takes care of rebooting subcomponents of your application when they crash, - whether it's a single actor, or large (potentially multi-tiered) groups of - actors that are all interdependent. This means rather than worrying about - rescuing every last exception, you can just sit back, relax, and let parts - of your program crash, knowing Celluloid will automatically reboot them in - a clean state. Celluloid provides its own implementation of the core - fault-tolerance concepts in Erlang including [linking](https://github.com/celluloid/celluloid/wiki/Linking), - [supervisors](https://github.com/celluloid/celluloid/wiki/Supervisors), - and [supervision groups](https://github.com/celluloid/celluloid/wiki/Supervision-Groups). - -* __[Futures](https://github.com/celluloid/celluloid/wiki/futures):__ - Ever wanted to call a method "in the background" and retrieve the - value it returns later? Celluloid futures do just that. It's like - calling ahead to a restaurant to place an order, so they can work - on preparing your food while you're on your way to pick it up. - When you ask for a method's return value, it's returned immediately - if the method has already completed, or otherwise the current method is - suspended until the value becomes available. - -You can also build distributed systems with Celluloid using its -[sister project DCell](https://github.com/celluloid/dcell). Evented IO similar -to EventMachine (with a synchronous API instead of callback/deferrable soup) -is available through the [Celluloid::IO](https://github.com/celluloid/celluloid-io) -library. - -Like Celluloid? [Join the mailing list/Google Group](http://groups.google.com/group/celluloid-ruby) -or visit us on IRC at #celluloid on freenode - -### Is it any good? - -[Yes](http://news.ycombinator.com/item?id=3067434) - -### Is It "Production Readyâ„¢"? - -Yes, many users are now running Celluloid in production by using -[Sidekiq](http://sidekiq.org) and [Adhearsion](http://adhearsion.com/) - -Documentation -------------- - -[Please see the Celluloid Wiki](https://github.com/celluloid/celluloid/wiki) -for more detailed documentation and usage notes. - -The following API documentation is also available: - -* [YARD API documentation](http://rubydoc.info/gems/celluloid/frames) -* [Celluloid module (primary API)](http://rubydoc.info/gems/celluloid/Celluloid) -* [Celluloid class methods](http://rubydoc.info/gems/celluloid/Celluloid/ClassMethods) -* [All Celluloid classes](http://rubydoc.info/gems/celluloid/index) - -Related Projects ----------------- - -Celluloid is the parent project of a related ecosystem of other projects. If you -like Celluloid we definitely recommend you check them out: - -* [Celluloid::IO][celluloid-io]: "Evented" IO support for Celluloid actors -* [Celluloid::ZMQ][celluloid-zmq]: "Evented" 0MQ support for Celluloid actors -* [DCell][dcell]: The Celluloid actor protocol distributed over 0MQ -* [Reel][reel]: An "evented" web server based on Celluloid::IO -* [Lattice][lattice]: A concurrent realtime web framework based on Celluloid::IO -* [nio4r][nio4r]: "New IO for Ruby": high performance IO selectors -* [Timers][timers]: A generic Ruby timer library for event-based systems - -[celluloid-io]: https://github.com/celluloid/celluloid-io/ -[celluloid-zmq]: https://github.com/celluloid/celluloid-zmq/ -[dcell]: https://github.com/celluloid/dcell/ -[reel]: https://github.com/celluloid/reel/ -[lattice]: https://github.com/celluloid/lattice/ -[nio4r]: https://github.com/celluloid/nio4r/ -[timers]: https://github.com/celluloid/timers/ - -Installation ------------- - -Add this line to your application's Gemfile: - -```ruby -gem 'celluloid' -``` - -And then execute: - - $ bundle - -Or install it yourself as: - - $ gem install celluloid - -Inside of your Ruby program, require Celluloid with: - -```ruby -require 'celluloid/autostart' -``` - -Supported Platforms -------------------- - -Celluloid works on Ruby 1.9.3, 2.0.0, JRuby 1.6+, and Rubinius 2.0. - -JRuby or Rubinius are the preferred platforms as they support true thread-level -parallelism when executing Ruby code, whereas MRI/YARV is constrained by a global -interpreter lock (GIL) and can only execute one thread at a time. - -Celluloid requires Ruby 1.9 mode on all interpreters. - -Additional Reading ------------------- - -* [Concurrent Object-Oriented Programming in Python with - ATOM](http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=11A3EACE78AAFF6D6D62A64118AFCA7C?doi=10.1.1.47.5074&rep=rep1&type=pdf): - a similar system to Celluloid written in Python - -Contributing to Celluloid -------------------------- - -* Fork this repository on github -* Make your changes and send us a pull request -* If we like them we'll merge them -* If we've accepted a patch, feel free to ask for commit access - -License -------- - -Copyright (c) 2011-2014 Tony Arcieri. Distributed under the MIT License. See -LICENSE.txt for further details. diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid.rb deleted file mode 100644 index 36f7519..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid.rb +++ /dev/null @@ -1,516 +0,0 @@ -require 'logger' -require 'thread' -require 'timeout' -require 'set' - -module Celluloid - # Expose all instance methods as singleton methods - extend self - - VERSION = '0.16.0' - - # Linking times out after 5 seconds - LINKING_TIMEOUT = 5 - - # Warning message added to Celluloid objects accessed outside their actors - BARE_OBJECT_WARNING_MESSAGE = "WARNING: BARE CELLULOID OBJECT " - - class << self - attr_writer :actor_system # Default Actor System - attr_accessor :logger # Thread-safe logger class - attr_accessor :task_class # Default task type to use - attr_accessor :shutdown_timeout # How long actors have to terminate - - def actor_system - if Thread.current.celluloid? - Thread.current[:celluloid_actor_system] or raise Error, "actor system not running" - else - Thread.current[:celluloid_actor_system] || @actor_system or raise Error, "Celluloid is not yet started; use Celluloid.boot" - end - end - - def included(klass) - klass.send :extend, ClassMethods - klass.send :include, InstanceMethods - - klass.send :extend, Properties - - klass.property :mailbox_class, :default => Celluloid::Mailbox - klass.property :proxy_class, :default => Celluloid::CellProxy - klass.property :task_class, :default => Celluloid.task_class - klass.property :mailbox_size - - klass.property :exclusive_actor, :default => false - klass.property :exclusive_methods, :multi => true - klass.property :execute_block_on_receiver, - :default => [:after, :every, :receive], - :multi => true - - klass.property :finalizer - klass.property :exit_handler_name - - klass.send(:define_singleton_method, :trap_exit) do |*args| - exit_handler_name(*args) - end - - klass.send(:define_singleton_method, :exclusive) do |*args| - if args.any? - exclusive_methods(*exclusive_methods, *args) - else - exclusive_actor true - end - end - end - - # Are we currently inside of an actor? - def actor? - !!Thread.current[:celluloid_actor] - end - - # Retrieve the mailbox for the current thread or lazily initialize it - def mailbox - Thread.current[:celluloid_mailbox] ||= Celluloid::Mailbox.new - end - - # Generate a Universally Unique Identifier - def uuid - UUID.generate - end - - # Obtain the number of CPUs in the system - def cores - CPUCounter.cores - end - alias_method :cpus, :cores - alias_method :ncpus, :cores - - # Perform a stack dump of all actors to the given output object - def stack_dump(output = STDERR) - actor_system.stack_dump.print(output) - end - alias_method :dump, :stack_dump - - # Detect if a particular call is recursing through multiple actors - def detect_recursion - actor = Thread.current[:celluloid_actor] - return unless actor - - task = Thread.current[:celluloid_task] - return unless task - - chain_id = CallChain.current_id - actor.tasks.to_a.any? { |t| t != task && t.chain_id == chain_id } - end - - # Define an exception handler for actor crashes - def exception_handler(&block) - Logger.exception_handler(&block) - end - - def suspend(status, waiter) - task = Thread.current[:celluloid_task] - if task && !Celluloid.exclusive? - waiter.before_suspend(task) if waiter.respond_to?(:before_suspend) - Task.suspend(status) - else - waiter.wait - end - end - - def boot - init - start - end - - def init - @actor_system = ActorSystem.new - end - - def start - actor_system.start - end - - def running? - actor_system && actor_system.running? - end - - def register_shutdown - return if @shutdown_registered - # Terminate all actors at exit - at_exit do - if defined?(RUBY_ENGINE) && RUBY_ENGINE == "ruby" && RUBY_VERSION >= "1.9" - # workaround for MRI bug losing exit status in at_exit block - # http://bugs.ruby-lang.org/issues/5218 - exit_status = $!.status if $!.is_a?(SystemExit) - Celluloid.shutdown - exit exit_status if exit_status - else - Celluloid.shutdown - end - end - @shutdown_registered = true - end - - # Shut down all running actors - def shutdown - actor_system.shutdown - end - - def version - VERSION - end - end - - # Class methods added to classes which include Celluloid - module ClassMethods - # Create a new actor - def new(*args, &block) - proxy = Cell.new(allocate, behavior_options, actor_options).proxy - proxy._send_(:initialize, *args, &block) - proxy - end - alias_method :spawn, :new - - # Create a new actor and link to the current one - def new_link(*args, &block) - raise NotActorError, "can't link outside actor context" unless Celluloid.actor? - - proxy = Cell.new(allocate, behavior_options, actor_options).proxy - Actor.link(proxy) - proxy._send_(:initialize, *args, &block) - proxy - end - alias_method :spawn_link, :new_link - - # Create a supervisor which ensures an instance of an actor will restart - # an actor if it fails - def supervise(*args, &block) - Supervisor.supervise(self, *args, &block) - end - - # Create a supervisor which ensures an instance of an actor will restart - # an actor if it fails, and keep the actor registered under a given name - def supervise_as(name, *args, &block) - Supervisor.supervise_as(name, self, *args, &block) - end - - # Create a new pool of workers. Accepts the following options: - # - # * size: how many workers to create. Default is worker per CPU core - # * args: array of arguments to pass when creating a worker - # - def pool(options = {}) - PoolManager.new(self, options) - end - - # Same as pool, but links to the pool manager - def pool_link(options = {}) - PoolManager.new_link(self, options) - end - - # Run an actor in the foreground - def run(*args, &block) - Actor.join(new(*args, &block)) - end - - def actor_system - Celluloid.actor_system - end - - # Configuration options for Actor#new - def actor_options - { - :actor_system => actor_system, - :mailbox_class => mailbox_class, - :mailbox_size => mailbox_size, - :task_class => task_class, - :exclusive => exclusive_actor, - } - end - - def behavior_options - { - :proxy_class => proxy_class, - :exclusive_methods => exclusive_methods, - :exit_handler_name => exit_handler_name, - :finalizer => finalizer, - :receiver_block_executions => execute_block_on_receiver, - } - end - - def ===(other) - other.kind_of? self - end - end - - # These are methods we don't want added to the Celluloid singleton but to be - # defined on all classes that use Celluloid - module InstanceMethods - # Obtain the bare Ruby object the actor is wrapping. This is useful for - # only a limited set of use cases like runtime metaprogramming. Interacting - # directly with the bare object foregoes any kind of thread safety that - # Celluloid would ordinarily provide you, and the object is guaranteed to - # be shared with at least the actor thread. Tread carefully. - # - # Bare objects can be identified via #inspect output: - # - # >> actor - # => # - # >> actor.bare_object - # => # - # - def bare_object; self; end - alias_method :wrapped_object, :bare_object - - # Are we being invoked in a different thread from our owner? - def leaked? - @celluloid_owner != Thread.current[:celluloid_actor] - end - - def tap - yield current_actor - current_actor - end - - # Obtain the name of the current actor - def registered_name - Actor.registered_name - end - alias_method :name, :registered_name - - def inspect - return "..." if Celluloid.detect_recursion - - str = "#<" - - if leaked? - str << Celluloid::BARE_OBJECT_WARNING_MESSAGE - else - str << "Celluloid::CellProxy" - end - - str << "(#{self.class}:0x#{object_id.to_s(16)})" - str << " " unless instance_variables.empty? - - instance_variables.each do |ivar| - next if ivar == Celluloid::OWNER_IVAR - str << "#{ivar}=#{instance_variable_get(ivar).inspect} " - end - - str.sub!(/\s$/, '>') - end - end - - # - # The following methods are available on both the Celluloid singleton and - # directly inside of all classes that include Celluloid - # - - # Raise an exception in sender context, but stay running - def abort(cause) - cause = case cause - when String then RuntimeError.new(cause) - when Exception then cause - else raise TypeError, "Exception object/String expected, but #{cause.class} received" - end - raise AbortError.new(cause) - end - - # Terminate this actor - def terminate - Thread.current[:celluloid_actor].behavior_proxy.terminate! - end - - # Send a signal with the given name to all waiting methods - def signal(name, value = nil) - Thread.current[:celluloid_actor].signal name, value - end - - # Wait for the given signal - def wait(name) - Thread.current[:celluloid_actor].wait name - end - - # Obtain the current_actor - def current_actor - Actor.current - end - - # Obtain the UUID of the current call chain - def call_chain_id - CallChain.current_id - end - - # Obtain the running tasks for this actor - def tasks - Thread.current[:celluloid_actor].tasks.to_a - end - - # Obtain the Celluloid::Links for this actor - def links - Thread.current[:celluloid_actor].links - end - - # Watch for exit events from another actor - def monitor(actor) - Actor.monitor(actor) - end - - # Stop waiting for exit events from another actor - def unmonitor(actor) - Actor.unmonitor(actor) - end - - # Link this actor to another, allowing it to crash or react to errors - def link(actor) - Actor.link(actor) - end - - # Remove links to another actor - def unlink(actor) - Actor.unlink(actor) - end - - # Are we monitoring another actor? - def monitoring?(actor) - Actor.monitoring?(actor) - end - - # Is this actor linked to another? - def linked_to?(actor) - Actor.linked_to?(actor) - end - - # Receive an asynchronous message via the actor protocol - def receive(timeout = nil, &block) - actor = Thread.current[:celluloid_actor] - if actor - actor.receive(timeout, &block) - else - Celluloid.mailbox.receive(timeout, &block) - end - end - - # Sleep letting the actor continue processing messages - def sleep(interval) - actor = Thread.current[:celluloid_actor] - if actor - actor.sleep(interval) - else - Kernel.sleep interval - end - end - - # Timeout on task suspension (eg Sync calls to other actors) - def timeout(duration) - Thread.current[:celluloid_actor].timeout(duration) do - yield - end - end - - # Run given block in an exclusive mode: all synchronous calls block the whole - # actor, not only current message processing. - def exclusive(&block) - Thread.current[:celluloid_task].exclusive(&block) - end - - # Are we currently exclusive - def exclusive? - task = Thread.current[:celluloid_task] - task && task.exclusive? - end - - # Call a block after a given interval, returning a Celluloid::Timer object - def after(interval, &block) - Thread.current[:celluloid_actor].after(interval, &block) - end - - # Call a block every given interval, returning a Celluloid::Timer object - def every(interval, &block) - Thread.current[:celluloid_actor].every(interval, &block) - end - - # Perform a blocking or computationally intensive action inside an - # asynchronous thread pool, allowing the sender to continue processing other - # messages in its mailbox in the meantime - def defer(&block) - # This implementation relies on the present implementation of - # Celluloid::Future, which uses a thread from InternalPool to run the block - Future.new(&block).value - end - - # Handle async calls within an actor itself - def async(meth = nil, *args, &block) - Thread.current[:celluloid_actor].behavior_proxy.async meth, *args, &block - end - - # Handle calls to future within an actor itself - def future(meth = nil, *args, &block) - Thread.current[:celluloid_actor].behavior_proxy.future meth, *args, &block - end -end - -if defined?(JRUBY_VERSION) && JRUBY_VERSION == "1.7.3" - raise "Celluloid is broken on JRuby 1.7.3. Please upgrade to 1.7.4+" -end - -require 'celluloid/exceptions' - -require 'celluloid/calls' -require 'celluloid/call_chain' -require 'celluloid/condition' -require 'celluloid/thread' -require 'celluloid/core_ext' -require 'celluloid/cpu_counter' -require 'celluloid/fiber' -require 'celluloid/fsm' -require 'celluloid/internal_pool' -require 'celluloid/links' -require 'celluloid/logger' -require 'celluloid/mailbox' -require 'celluloid/evented_mailbox' -require 'celluloid/method' -require 'celluloid/properties' -require 'celluloid/handlers' -require 'celluloid/receivers' -require 'celluloid/registry' -require 'celluloid/responses' -require 'celluloid/signals' -require 'celluloid/stack_dump' -require 'celluloid/system_events' -require 'celluloid/tasks' -require 'celluloid/task_set' -require 'celluloid/thread_handle' -require 'celluloid/uuid' - -require 'celluloid/proxies/abstract_proxy' -require 'celluloid/proxies/sync_proxy' -require 'celluloid/proxies/cell_proxy' -require 'celluloid/proxies/actor_proxy' -require 'celluloid/proxies/async_proxy' -require 'celluloid/proxies/future_proxy' -require 'celluloid/proxies/block_proxy' - -require 'celluloid/actor' -require 'celluloid/cell' -require 'celluloid/future' -require 'celluloid/actor_system' -require 'celluloid/pool_manager' -require 'celluloid/supervision_group' -require 'celluloid/supervisor' -require 'celluloid/notifications' -require 'celluloid/logging' - -require 'celluloid/legacy' unless defined?(CELLULOID_FUTURE) - -$CELLULOID_MONITORING = false - -# Configure default systemwide settings -Celluloid.task_class = Celluloid::TaskFiber -Celluloid.logger = Logger.new(STDERR) -Celluloid.shutdown_timeout = 10 - -unless $CELLULOID_TEST - Celluloid.register_shutdown - Celluloid.init -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/actor.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/actor.rb deleted file mode 100644 index 88c9cba..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/actor.rb +++ /dev/null @@ -1,362 +0,0 @@ - -require 'timers' - -module Celluloid - # Actors are Celluloid's concurrency primitive. They're implemented as - # normal Ruby objects wrapped in threads which communicate with asynchronous - # messages. - class Actor - attr_reader :behavior, :proxy, :tasks, :links, :mailbox, :thread, :name, :timers - attr_writer :exit_handler - - class << self - extend Forwardable - - def_delegators "Celluloid.actor_system", :[], :[]=, :delete, :registered, :clear_registry - - # Obtain the current actor - def current - actor = Thread.current[:celluloid_actor] - raise NotActorError, "not in actor scope" unless actor - actor.behavior_proxy - end - - # Obtain the name of the current actor - def registered_name - actor = Thread.current[:celluloid_actor] - raise NotActorError, "not in actor scope" unless actor - actor.name - end - - # Invoke a method on the given actor via its mailbox - def call(mailbox, meth, *args, &block) - proxy = SyncProxy.new(mailbox, "UnknownClass") - proxy.method_missing(meth, *args, &block) - end - - # Invoke a method asynchronously on an actor via its mailbox - def async(mailbox, meth, *args, &block) - proxy = AsyncProxy.new(mailbox, "UnknownClass") - proxy.method_missing(meth, *args, &block) - end - - # Call a method asynchronously and retrieve its value later - def future(mailbox, meth, *args, &block) - proxy = FutureProxy.new(mailbox, "UnknownClass") - proxy.method_missing(meth, *args, &block) - end - - # Obtain all running actors in the system - def all - Celluloid.actor_system.running - end - - # Watch for exit events from another actor - def monitor(actor) - raise NotActorError, "can't link outside actor context" unless Celluloid.actor? - Thread.current[:celluloid_actor].linking_request(actor, :link) - end - - # Stop waiting for exit events from another actor - def unmonitor(actor) - raise NotActorError, "can't link outside actor context" unless Celluloid.actor? - Thread.current[:celluloid_actor].linking_request(actor, :unlink) - end - - # Link to another actor - def link(actor) - monitor actor - Thread.current[:celluloid_actor].links << actor - end - - # Unlink from another actor - def unlink(actor) - unmonitor actor - Thread.current[:celluloid_actor].links.delete actor - end - - # Are we monitoring the given actor? - def monitoring?(actor) - actor.links.include? Actor.current - end - - # Are we bidirectionally linked to the given actor? - def linked_to?(actor) - monitoring?(actor) && Thread.current[:celluloid_actor].links.include?(actor) - end - - # Forcibly kill a given actor - def kill(actor) - actor.thread.kill - actor.mailbox.shutdown if actor.mailbox.alive? - end - - # Wait for an actor to terminate - def join(actor, timeout = nil) - actor.thread.join(timeout) - actor - end - end - - def initialize(behavior, options) - @behavior = behavior - - @actor_system = options.fetch(:actor_system) - @mailbox = options.fetch(:mailbox_class, Mailbox).new - @mailbox.max_size = options.fetch(:mailbox_size, nil) - - @task_class = options[:task_class] || Celluloid.task_class - @exit_handler = method(:default_exit_handler) - @exclusive = options.fetch(:exclusive, false) - - @tasks = TaskSet.new - @links = Links.new - @signals = Signals.new - @timers = Timers::Group.new - @receivers = Receivers.new(@timers) - @handlers = Handlers.new - @running = false - @name = nil - - handle(SystemEvent) do |message| - handle_system_event message - end - end - - def start - @running = true - @thread = ThreadHandle.new(@actor_system, :actor) do - setup_thread - run - end - - @proxy = ActorProxy.new(@thread, @mailbox) - Celluloid::Probe.actor_created(self) if $CELLULOID_MONITORING - end - - def behavior_proxy - @behavior.proxy - end - - def setup_thread - Thread.current[:celluloid_actor] = self - Thread.current[:celluloid_mailbox] = @mailbox - end - - # Run the actor loop - def run - while @running - begin - @timers.wait do |interval| - interval = 0 if interval and interval < 0 - - if message = @mailbox.check(interval) - handle_message(message) - - break unless @running - end - end - rescue MailboxShutdown - @running = false - end - end - - shutdown - rescue Exception => ex - handle_crash(ex) - raise unless ex.is_a? StandardError - end - - # Terminate this actor - def terminate - @running = false - end - - # Perform a linking request with another actor - def linking_request(receiver, type) - Celluloid.exclusive do - receiver.mailbox << LinkingRequest.new(Actor.current, type) - system_events = [] - - Timers::Wait.for(LINKING_TIMEOUT) do |remaining| - begin - message = @mailbox.receive(remaining) do |msg| - msg.is_a?(LinkingResponse) && - msg.actor.mailbox.address == receiver.mailbox.address && - msg.type == type - end - rescue TimeoutError - next # IO reactor did something, no message in queue yet. - end - - if message.instance_of? LinkingResponse - Celluloid::Probe.actors_linked(self, receiver) if $CELLULOID_MONITORING - - # We're done! - system_events.each { |ev| @mailbox << ev } - - return - elsif message.is_a? SystemEvent - # Queue up pending system events to be processed after we've successfully linked - system_events << message - else raise "Unexpected message type: #{message.class}. Expected LinkingResponse, NilClass, SystemEvent." - end - end - - raise TimeoutError, "linking timeout of #{LINKING_TIMEOUT} seconds exceeded" - end - end - - # Send a signal with the given name to all waiting methods - def signal(name, value = nil) - @signals.broadcast name, value - end - - # Wait for the given signal - def wait(name) - @signals.wait name - end - - def handle(*patterns, &block) - @handlers.handle(*patterns, &block) - end - - # Receive an asynchronous message - def receive(timeout = nil, &block) - loop do - message = @receivers.receive(timeout, &block) - break message unless message.is_a?(SystemEvent) - - handle_system_event(message) - end - end - - # Schedule a block to run at the given time - def after(interval, &block) - @timers.after(interval) { task(:timer, &block) } - end - - # Schedule a block to run at the given time - def every(interval, &block) - @timers.every(interval) { task(:timer, &block) } - end - - def timeout(duration) - bt = caller - task = Task.current - timer = @timers.after(duration) do - exception = Task::TimeoutError.new("execution expired") - exception.set_backtrace bt - task.resume exception - end - yield - ensure - timer.cancel if timer - end - - class Sleeper - def initialize(timers, interval) - @timers = timers - @interval = interval - end - - def before_suspend(task) - @timers.after(@interval) { task.resume } - end - - def wait - Kernel.sleep(@interval) - end - end - - # Sleep for the given amount of time - def sleep(interval) - sleeper = Sleeper.new(@timers, interval) - Celluloid.suspend(:sleeping, sleeper) - end - - # Handle standard low-priority messages - def handle_message(message) - unless @handlers.handle_message(message) - unless @receivers.handle_message(message) - Logger.debug "Discarded message (unhandled): #{message}" if $CELLULOID_DEBUG - end - end - message - end - - # Handle high-priority system event messages - def handle_system_event(event) - if event.instance_of? ExitEvent - handle_exit_event(event) - elsif event.instance_of? LinkingRequest - event.process(links) - elsif event.instance_of? NamingRequest - @name = event.name - Celluloid::Probe.actor_named(self) if $CELLULOID_MONITORING - elsif event.instance_of? TerminationRequest - terminate - elsif event.instance_of? SignalConditionRequest - event.call - else - Logger.debug "Discarded message (unhandled): #{message}" if $CELLULOID_DEBUG - end - end - - # Handle exit events received by this actor - def handle_exit_event(event) - @links.delete event.actor - - @exit_handler.call(event) - end - - def default_exit_handler(event) - raise event.reason if event.reason - end - - # Handle any exceptions that occur within a running actor - def handle_crash(exception) - # TODO: add meta info - Logger.crash("Actor crashed!", exception) - shutdown ExitEvent.new(behavior_proxy, exception) - rescue => ex - Logger.crash("ERROR HANDLER CRASHED!", ex) - end - - # Handle cleaning up this actor after it exits - def shutdown(exit_event = ExitEvent.new(behavior_proxy)) - @behavior.shutdown - cleanup exit_event - ensure - Thread.current[:celluloid_actor] = nil - Thread.current[:celluloid_mailbox] = nil - end - - # Clean up after this actor - def cleanup(exit_event) - Celluloid::Probe.actor_died(self) if $CELLULOID_MONITORING - @mailbox.shutdown - @links.each do |actor| - if actor.mailbox.alive? - actor.mailbox << exit_event - end - end - - tasks.to_a.each(&:terminate) - rescue => ex - # TODO: metadata - Logger.crash("CLEANUP CRASHED!", ex) - end - - # Run a method inside a task unless it's exclusive - def task(task_type, meta = nil) - @task_class.new(task_type, meta) { - if @exclusive - Celluloid.exclusive { yield } - else - yield - end - }.resume - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/actor_system.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/actor_system.rb deleted file mode 100644 index b3ae460..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/actor_system.rb +++ /dev/null @@ -1,107 +0,0 @@ -module Celluloid - class ActorSystem - extend Forwardable - - def initialize - @internal_pool = InternalPool.new - @registry = Registry.new - end - attr_reader :registry - - # Launch default services - # FIXME: We should set up the supervision hierarchy here - def start - within do - Celluloid::Notifications::Fanout.supervise_as :notifications_fanout - Celluloid::IncidentReporter.supervise_as :default_incident_reporter, STDERR - end - true - end - - def within - old = Thread.current[:celluloid_actor_system] - Thread.current[:celluloid_actor_system] = self - yield - ensure - Thread.current[:celluloid_actor_system] = old - end - - def get_thread - @internal_pool.get do - Thread.current[:celluloid_actor_system] = self - yield - end - end - - def stack_dump - Celluloid::StackDump.new(@internal_pool) - end - - def_delegators "@registry", :[], :get, :[]=, :set, :delete - - def registered - @registry.names - end - - def clear_registry - @registry.clear - end - - def running - actors = [] - @internal_pool.each do |t| - next unless t.role == :actor - actors << t.actor.behavior_proxy if t.actor && t.actor.respond_to?(:behavior_proxy) - end - actors - end - - def running? - @internal_pool.running? - end - - # Shut down all running actors - def shutdown - actors = running - Timeout.timeout(shutdown_timeout) do - Logger.debug "Terminating #{actors.size} #{(actors.size > 1) ? 'actors' : 'actor'}..." if actors.size > 0 - - # Actors cannot self-terminate, you must do it for them - actors.each do |actor| - begin - actor.terminate! - rescue DeadActorError - end - end - - actors.each do |actor| - begin - Actor.join(actor) - rescue DeadActorError - end - end - - @internal_pool.shutdown - end - rescue Timeout::Error - Logger.error("Couldn't cleanly terminate all actors in #{shutdown_timeout} seconds!") - actors.each do |actor| - begin - Actor.kill(actor) - rescue DeadActorError, MailboxDead - end - end - ensure - @internal_pool.kill - clear_registry - end - - def assert_inactive - @internal_pool.assert_inactive - end - - def shutdown_timeout - Celluloid.shutdown_timeout - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/autostart.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/autostart.rb deleted file mode 100644 index 4978516..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/autostart.rb +++ /dev/null @@ -1,3 +0,0 @@ -require 'celluloid' - -Celluloid.start diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/call_chain.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/call_chain.rb deleted file mode 100644 index 97d2284..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/call_chain.rb +++ /dev/null @@ -1,13 +0,0 @@ -module Celluloid - class CallChain - def self.current_id=(value) - Thread.current[:celluloid_chain_id] = value - task = Thread.current[:celluloid_task] - task.chain_id = value if task - end - - def self.current_id - Thread.current[:celluloid_chain_id] - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/calls.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/calls.rb deleted file mode 100644 index 0fcb30c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/calls.rb +++ /dev/null @@ -1,151 +0,0 @@ -module Celluloid - # Calls represent requests to an actor - class Call - attr_reader :method, :arguments, :block - - def initialize(method, arguments = [], block = nil) - @method, @arguments = method, arguments - if block - if Celluloid.exclusive? - # FIXME: nicer exception - raise "Cannot execute blocks on sender in exclusive mode" - end - @block = BlockProxy.new(self, Celluloid.mailbox, block) - else - @block = nil - end - end - - def execute_block_on_receiver - @block && @block.execution = :receiver - end - - def dispatch(obj) - check(obj) - _block = @block && @block.to_proc - obj.public_send(@method, *@arguments, &_block) - end - - def check(obj) - raise NoMethodError, "undefined method `#{@method}' for #{obj.inspect}" unless obj.respond_to? @method - - begin - arity = obj.method(@method).arity - rescue NameError - return - end - - if arity >= 0 - raise ArgumentError, "wrong number of arguments (#{@arguments.size} for #{arity})" if @arguments.size != arity - elsif arity < -1 - mandatory_args = -arity - 1 - raise ArgumentError, "wrong number of arguments (#{@arguments.size} for #{mandatory_args}+)" if arguments.size < mandatory_args - end - rescue => ex - raise AbortError.new(ex) - end - end - - # Synchronous calls wait for a response - class SyncCall < Call - attr_reader :sender, :task, :chain_id - - def initialize(sender, method, arguments = [], block = nil, task = Thread.current[:celluloid_task], chain_id = CallChain.current_id) - super(method, arguments, block) - - @sender = sender - @task = task - @chain_id = chain_id || Celluloid.uuid - end - - def dispatch(obj) - CallChain.current_id = @chain_id - result = super(obj) - respond SuccessResponse.new(self, result) - rescue Exception => ex - # Exceptions that occur during synchronous calls are reraised in the - # context of the sender - respond ErrorResponse.new(self, ex) - - # Aborting indicates a protocol error on the part of the sender - # It should crash the sender, but the exception isn't reraised - # Otherwise, it's a bug in this actor and should be reraised - raise unless ex.is_a?(AbortError) - ensure - CallChain.current_id = nil - end - - def cleanup - exception = DeadActorError.new("attempted to call a dead actor") - respond ErrorResponse.new(self, exception) - end - - def respond(message) - @sender << message - end - - def response - Celluloid.suspend(:callwait, self) - end - - def value - response.value - end - - def wait - loop do - message = Celluloid.mailbox.receive do |msg| - msg.respond_to?(:call) and msg.call == self - end - - if message.is_a?(SystemEvent) - Thread.current[:celluloid_actor].handle_system_event(message) - else - # FIXME: add check for receiver block execution - if message.respond_to?(:value) - # FIXME: disable block execution if on :sender and (exclusive or outside of task) - # probably now in Call - break message - else - message.dispatch - end - end - end - end - end - - # Asynchronous calls don't wait for a response - class AsyncCall < Call - - def dispatch(obj) - CallChain.current_id = Celluloid.uuid - super(obj) - rescue AbortError => ex - # Swallow aborted async calls, as they indicate the sender made a mistake - Logger.debug("#{obj.class}: async call `#@method` aborted!\n#{Logger.format_exception(ex.cause)}") - ensure - CallChain.current_id = nil - end - - end - - class BlockCall - def initialize(block_proxy, sender, arguments, task = Thread.current[:celluloid_task]) - @block_proxy = block_proxy - @sender = sender - @arguments = arguments - @task = task - end - attr_reader :task - - def call - @block_proxy.call - end - - def dispatch - response = @block_proxy.block.call(*@arguments) - @sender << BlockResponse.new(self, response) - end - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/cell.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/cell.rb deleted file mode 100644 index e49008b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/cell.rb +++ /dev/null @@ -1,89 +0,0 @@ -module Celluloid - OWNER_IVAR = :@celluloid_owner # reference to owning actor - - # Wrap the given subject with an Cell - class Cell - class ExitHandler - def initialize(behavior, subject, method_name) - @behavior = behavior - @subject = subject - @method_name = method_name - end - - def call(event) - @behavior.task(:exit_handler, @method_name) do - @subject.send(@method_name, event.actor, event.reason) - end - end - end - - def initialize(subject, options, actor_options) - @actor = Actor.new(self, actor_options) - @subject = subject - @receiver_block_executions = options[:receiver_block_executions] - @exclusive_methods = options[:exclusive_methods] - @finalizer = options[:finalizer] - - @subject.instance_variable_set(OWNER_IVAR, @actor) - - if exit_handler_name = options[:exit_handler_name] - @actor.exit_handler = ExitHandler.new(self, @subject, exit_handler_name) - end - - @actor.handle(Call) do |message| - invoke(message) - end - @actor.handle(BlockCall) do |message| - task(:invoke_block) { message.dispatch } - end - @actor.handle(BlockResponse, Response) do |message| - message.dispatch - end - - @actor.start - @proxy = (options[:proxy_class] || CellProxy).new(@actor.proxy, @actor.mailbox, @subject.class.to_s) - end - attr_reader :proxy, :subject - - def invoke(call) - meth = call.method - if meth == :__send__ - meth = call.arguments.first - end - if @receiver_block_executions && meth - if @receiver_block_executions.include?(meth.to_sym) - call.execute_block_on_receiver - end - end - - task(:call, meth, :dangerous_suspend => meth == :initialize) { - call.dispatch(@subject) - } - end - - def task(task_type, method_name = nil, meta = nil, &block) - meta ||= {} - meta.merge!(:method_name => method_name) - @actor.task(task_type, meta) do - if @exclusive_methods && method_name && @exclusive_methods.include?(method_name.to_sym) - Celluloid.exclusive { yield } - else - yield - end - end - end - - # Run the user-defined finalizer, if one is set - def shutdown - return unless @finalizer && @subject.respond_to?(@finalizer, true) - - task(:finalizer, @finalizer, :dangerous_suspend => true) do - begin - @subject.__send__(@finalizer) - rescue => ex - Logger.crash("#{@subject.class} finalizer crashed!", ex) - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/condition.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/condition.rb deleted file mode 100644 index 2ea0f88..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/condition.rb +++ /dev/null @@ -1,89 +0,0 @@ -module Celluloid - class ConditionError < Celluloid::Error; end - - # ConditionVariable-like signaling between tasks and threads - class Condition - class Waiter - def initialize(condition, task, mailbox, timeout) - @condition = condition - @task = task - @mailbox = mailbox - @timeout = timeout - end - attr_reader :condition, :task - - def <<(message) - @mailbox << message - end - - def wait - begin - message = @mailbox.receive(@timeout) do |msg| - msg.is_a?(SignalConditionRequest) && msg.task == Thread.current - end - rescue TimeoutError - raise ConditionError, "timeout after #{@timeout.inspect} seconds" - end until message - - message.value - end - end - - def initialize - @mutex = Mutex.new - @waiters = [] - end - - # Wait for the given signal and return the associated value - def wait(timeout = nil) - raise ConditionError, "cannot wait for signals while exclusive" if Celluloid.exclusive? - - if actor = Thread.current[:celluloid_actor] - task = Task.current - if timeout - bt = caller - timer = actor.timers.after(timeout) do - exception = ConditionError.new("timeout after #{timeout.inspect} seconds") - exception.set_backtrace bt - task.resume exception - end - end - else - task = Thread.current - end - waiter = Waiter.new(self, task, Celluloid.mailbox, timeout) - - @mutex.synchronize do - @waiters << waiter - end - - result = Celluloid.suspend :condwait, waiter - timer.cancel if timer - raise result if result.is_a? ConditionError - result - end - - # Send a signal to the first task waiting on this condition - def signal(value = nil) - @mutex.synchronize do - if waiter = @waiters.shift - waiter << SignalConditionRequest.new(waiter.task, value) - else - Logger.with_backtrace(caller(3)) do |logger| - logger.debug("Celluloid::Condition signaled spuriously") - end - end - end - end - - # Broadcast a value to all waiting tasks and threads - def broadcast(value = nil) - @mutex.synchronize do - @waiters.each { |waiter| waiter << SignalConditionRequest.new(waiter.task, value) } - @waiters.clear - end - end - - alias_method :inspect, :to_s - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/core_ext.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/core_ext.rb deleted file mode 100644 index 378a279..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/core_ext.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'celluloid/fiber' - -class Thread - attr_accessor :uuid_counter, :uuid_limit - - def celluloid? - false - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/cpu_counter.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/cpu_counter.rb deleted file mode 100644 index fd616e9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/cpu_counter.rb +++ /dev/null @@ -1,34 +0,0 @@ -module Celluloid - module CPUCounter - class << self - def cores - @cores ||= count_cores - end - - private - - def count_cores - result = from_env || from_sysdev || from_sysctl - Integer(result.to_s[/\d+/], 10) if result - end - - def from_env - result = ENV['NUMBER_OF_PROCESSORS'] - result if result - end - - def from_sysdev - ::IO.read('/sys/devices/system/cpu/present').split('-').last.to_i + 1 - rescue Errno::ENOENT - result = Dir['/sys/devices/system/cpu/cpu*'].count { |n| n =~ /cpu\d+/ } - result unless result.zero? - end - - def from_sysctl - result = `sysctl -n hw.ncpu` - result if $?.success? - rescue Errno::ENOENT - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/evented_mailbox.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/evented_mailbox.rb deleted file mode 100644 index 0567a57..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/evented_mailbox.rb +++ /dev/null @@ -1,73 +0,0 @@ -module Celluloid - # An alternative implementation of Celluloid::Mailbox using Reactor - class EventedMailbox < Celluloid::Mailbox - attr_reader :reactor - - def initialize(reactor_class) - super() - # @condition won't be used in the class. - @reactor = reactor_class.new - end - - # Add a message to the Mailbox - def <<(message) - @mutex.lock - begin - if mailbox_full || @dead - dead_letter(message) - return - end - if message.is_a?(SystemEvent) - # SystemEvents are high priority messages so they get added to the - # head of our message queue instead of the end - @messages.unshift message - else - @messages << message - end - - current_actor = Thread.current[:celluloid_actor] - @reactor.wakeup unless current_actor && current_actor.mailbox == self - rescue IOError - Logger.crash "reactor crashed", $! - dead_letter(message) - ensure - @mutex.unlock rescue nil - end - nil - end - - # Receive a message from the Mailbox - def check(timeout = nil, &block) - # Get a message if it is available and process it immediately if possible: - if message = next_message(block) - return message - end - - # ... otherwise, run the reactor once, either blocking or will return - # after the given timeout: - @reactor.run_once(timeout) - - # No message was received: - return nil - rescue IOError - raise MailboxShutdown, "mailbox shutdown called during receive" - end - - # Obtain the next message from the mailbox that matches the given block - def next_message(block) - @mutex.lock - begin - super(&block) - ensure - @mutex.unlock rescue nil - end - end - - # Cleanup any IO objects this Mailbox may be using - def shutdown - super do - @reactor.shutdown - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/exceptions.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/exceptions.rb deleted file mode 100644 index eda5d0e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/exceptions.rb +++ /dev/null @@ -1,23 +0,0 @@ -module Celluloid - # Base class of all Celluloid errors - Error = Class.new(StandardError) - - # Don't do Actor-like things outside Actor scope - NotActorError = Class.new(Celluloid::Error) - - # Trying to do something to a dead actor - DeadActorError = Class.new(Celluloid::Error) - - # A timeout occured before the given request could complete - TimeoutError = Class.new(Celluloid::Error) - - # The sender made an error, not the current actor - class AbortError < Celluloid::Error - attr_reader :cause - - def initialize(cause) - @cause = cause - super "caused by #{cause.inspect}: #{cause.to_s}" - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/fiber.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/fiber.rb deleted file mode 100644 index a5b5ff1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/fiber.rb +++ /dev/null @@ -1,32 +0,0 @@ -# Fibers are hard... let's go shopping! -begin - require 'fiber' -rescue LoadError => ex - if defined? JRUBY_VERSION - if RUBY_VERSION < "1.9.2" - raise LoadError, "Celluloid requires JRuby 1.9 mode. Please pass the --1.9 flag or set JRUBY_OPTS=--1.9" - end - - # Fibers are broken on JRuby 1.6.5. This works around the issue - if JRUBY_VERSION[/^1\.6\.5/] - require 'jruby' - org.jruby.ext.fiber.FiberExtLibrary.new.load(JRuby.runtime, false) - class org::jruby::ext::fiber::ThreadFiber - field_accessor :state - end - - class Fiber - def alive? - JRuby.reference(self).state != org.jruby.ext.fiber.ThreadFiberState::FINISHED - end - end - else - # Just in case subsequent JRuby releases have broken fibers :/ - raise ex - end - elsif defined?(RUBY_ENGINE) && RUBY_ENGINE == "rbx" - raise LoadError, "Celluloid requires Rubinius 1.9 mode. Please pass the -X19 flag." - else - raise ex - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/fsm.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/fsm.rb deleted file mode 100644 index 02b2ce5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/fsm.rb +++ /dev/null @@ -1,186 +0,0 @@ -module Celluloid - # Simple finite state machines with integrated Celluloid timeout support - # Inspired by Erlang's gen_fsm (http://www.erlang.org/doc/man/gen_fsm.html) - # - # Basic usage: - # - # class MyMachine - # include Celluloid::FSM # NOTE: this does NOT pull in the Celluloid module - # end - # - # Inside an actor: - # - # # - # machine = MyMachine.new(current_actor) - module FSM - class UnattachedError < Celluloid::Error; end # Not attached to an actor - - DEFAULT_STATE = :default # Default state name unless one is explicitly set - - # Included hook to extend class methods - def self.included(klass) - klass.send :extend, ClassMethods - end - - module ClassMethods - # Obtain or set the default state - # Passing a state name sets the default state - def default_state(new_default = nil) - if new_default - @default_state = new_default.to_sym - else - defined?(@default_state) ? @default_state : DEFAULT_STATE - end - end - - # Obtain the valid states for this FSM - def states - @states ||= {} - end - - # Declare an FSM state and optionally provide a callback block to fire - # Options: - # * to: a state or array of states this state can transition to - def state(*args, &block) - if args.last.is_a? Hash - # Stringify keys :/ - options = args.pop.inject({}) { |h,(k,v)| h[k.to_s] = v; h } - else - options = {} - end - - args.each do |name| - name = name.to_sym - default_state name if options['default'] - states[name] = State.new(name, options['to'], &block) - end - end - end - - attr_reader :actor - - # Be kind and call super if you must redefine initialize - def initialize(actor = nil) - @state = self.class.default_state - @delayed_transition = nil - @actor = actor - @actor ||= Celluloid.current_actor if Celluloid.actor? - end - - # Obtain the current state of the FSM - attr_reader :state - - # Attach this FSM to an actor. This allows FSMs to wait for and initiate - # events in the context of a particular actor - def attach(actor) - @actor = actor - end - alias_method :actor=, :attach - - # Transition to another state - # Options: - # * delay: don't transition immediately, wait the given number of seconds. - # This will return a Celluloid::Timer object you can use to - # cancel the pending state transition. - # - # Note: making additional state transitions will cancel delayed transitions - def transition(state_name, options = {}) - new_state = validate_and_sanitize_new_state(state_name) - return unless new_state - - if handle_delayed_transitions(new_state, options[:delay]) - return @delayed_transition - end - - transition_with_callbacks!(new_state) - end - - # Immediate state transition with no sanity checks, or callbacks. "Dangerous!" - def transition!(state_name) - @state = state_name - end - - protected - - def validate_and_sanitize_new_state(state_name) - state_name = state_name.to_sym - - return if current_state_name == state_name - - if current_state and not current_state.valid_transition? state_name - valid = current_state.transitions.map(&:to_s).join(", ") - raise ArgumentError, "#{self.class} can't change state from '#{@state}' to '#{state_name}', only to: #{valid}" - end - - new_state = states[state_name] - - unless new_state - return if state_name == default_state - raise ArgumentError, "invalid state for #{self.class}: #{state_name}" - end - - new_state - end - - def transition_with_callbacks!(state_name) - transition! state_name.name - state_name.call(self) - end - - def states - self.class.states - end - - def default_state - self.class.default_state - end - - def current_state - states[@state] - end - - def current_state_name - current_state && current_state.name || '' - end - - def handle_delayed_transitions(new_state, delay) - if delay - raise UnattachedError, "can't delay unless attached" unless @actor - @delayed_transition.cancel if @delayed_transition - - @delayed_transition = @actor.after(delay) do - transition_with_callbacks!(new_state) - end - - return @delayed_transition - end - - if defined?(@delayed_transition) and @delayed_transition - @delayed_transition.cancel - @delayed_transition = nil - end - end - - # FSM states as declared by Celluloid::FSM.state - class State - attr_reader :name, :transitions - - def initialize(name, transitions = nil, &block) - @name, @block = name, block - @transitions = nil - @transitions = Array(transitions).map { |t| t.to_sym } if transitions - end - - def call(obj) - obj.instance_eval(&@block) if @block - end - - def valid_transition?(new_state) - # All transitions are allowed unless expressly - return true unless @transitions - - @transitions.include? new_state.to_sym - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/future.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/future.rb deleted file mode 100644 index 6d72169..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/future.rb +++ /dev/null @@ -1,108 +0,0 @@ -require 'thread' - -module Celluloid - # Celluloid::Future objects allow methods and blocks to run in the - # background, their values requested later - class Future - def self.new(*args, &block) - return super unless block - - future = new - Celluloid::ThreadHandle.new(Celluloid.actor_system, :future) do - begin - call = SyncCall.new(future, :call, args) - call.dispatch(block) - rescue - # Exceptions in blocks will get raised when the value is retrieved - end - end - future - end - - attr_reader :address - - def initialize - @address = Celluloid.uuid - @mutex = Mutex.new - @ready = false - @result = nil - @forwards = nil - end - - # Check if this future has a value yet - def ready? - @ready - end - - # Obtain the value for this Future - def value(timeout = nil) - ready = result = nil - - begin - @mutex.lock - - if @ready - ready = true - result = @result - else - case @forwards - when Array - @forwards << Celluloid.mailbox - when NilClass - @forwards = Celluloid.mailbox - else - @forwards = [@forwards, Celluloid.mailbox] - end - end - ensure - @mutex.unlock - end - - unless ready - result = Celluloid.receive(timeout) do |msg| - msg.is_a?(Future::Result) && msg.future == self - end - end - - if result - result.value - else - raise TimeoutError, "Timed out" - end - end - alias_method :call, :value - - # Signal this future with the given result value - def signal(value) - result = Result.new(value, self) - - @mutex.synchronize do - raise "the future has already happened!" if @ready - - if @forwards - @forwards.is_a?(Array) ? @forwards.each { |f| f << result } : @forwards << result - end - - @result = result - @ready = true - end - end - alias_method :<<, :signal - - # Inspect this Celluloid::Future - alias_method :inspect, :to_s - - # Wrapper for result values to distinguish them in mailboxes - class Result - attr_reader :future - - def initialize(result, future) - @result, @future = result, future - end - - def value - @result.value - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/handlers.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/handlers.rb deleted file mode 100644 index 7567835..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/handlers.rb +++ /dev/null @@ -1,41 +0,0 @@ -require 'set' - -module Celluloid - class Handlers - def initialize - @handlers = Set.new - end - - def handle(*patterns, &block) - patterns.each do |pattern| - handler = Handler.new pattern, block - @handlers << handler - end - end - - # Handle incoming messages - def handle_message(message) - if handler = @handlers.find { |h| h.match(message) } - handler.call message - handler - end - end - end - - # Methods blocking on a call to receive - class Handler - def initialize(pattern, block) - @pattern = pattern - @block = block - end - - # Match a message with this receiver's block - def match(message) - @pattern === message - end - - def call(message) - @block.call message - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/internal_pool.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/internal_pool.rb deleted file mode 100644 index 342d1c9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/internal_pool.rb +++ /dev/null @@ -1,159 +0,0 @@ -require 'thread' - -module Celluloid - # Maintain a thread pool FOR SPEED!! - class InternalPool - attr_accessor :max_idle - - def initialize - @mutex = Mutex.new - @idle_threads = [] - @all_threads = [] - @busy_size = 0 - @idle_size = 0 - - # TODO: should really adjust this based on usage - @max_idle = 16 - @running = true - end - - def busy_size - @busy_size - end - - def idle_size - @idle_size - end - - def assert_running - raise Error, "Thread pool is not running" unless running? - end - - def assert_inactive - if active? - message = "Thread pool is still active" - if defined?(JRUBY_VERSION) - Celluloid.logger.warn message - else - raise Error, message - end - end - end - - def running? - @running - end - - def active? - busy_size + idle_size > 0 - end - - def each - to_a.each {|thread| yield thread } - end - - def to_a - @mutex.synchronize { @all_threads.dup } - end - - # Get a thread from the pool, running the given block - def get(&block) - @mutex.synchronize do - assert_running - - begin - if @idle_threads.empty? - thread = create - else - thread = @idle_threads.pop - @idle_size = @idle_threads.length - end - end until thread.status # handle crashed threads - - thread.busy = true - @busy_size += 1 - thread[:celluloid_queue] << block - thread - end - end - - # Return a thread to the pool - def put(thread) - @mutex.synchronize do - thread.busy = false - if idle_size + 1 >= @max_idle - thread[:celluloid_queue] << nil - @busy_size -= 1 - @all_threads.delete(thread) - else - @idle_threads.push thread - @busy_size -= 1 - @idle_size = @idle_threads.length - clean_thread_locals(thread) - end - end - end - - def shutdown - @mutex.synchronize do - finalize - @all_threads.each do |thread| - thread[:celluloid_queue] << nil - end - @all_threads.clear - @idle_threads.clear - @busy_size = 0 - @idle_size = 0 - end - end - - def kill - @mutex.synchronize do - finalize - @running = false - - @all_threads.shift.kill until @all_threads.empty? - @idle_threads.clear - @busy_size = 0 - @idle_size = 0 - end - end - - private - - # Create a new thread with an associated queue of procs to run - def create - queue = Queue.new - thread = Thread.new do - while proc = queue.pop - begin - proc.call - rescue => ex - Logger.crash("thread crashed", ex) - end - - put thread - end - end - - thread[:celluloid_queue] = queue - # @idle_threads << thread - @all_threads << thread - thread - end - - # Clean the thread locals of an incoming thread - def clean_thread_locals(thread) - thread.keys.each do |key| - next if key == :celluloid_queue - - # Ruby seems to lack an API for deleting thread locals. WTF, Ruby? - thread[key] = nil - end - end - - def finalize - @max_idle = 0 - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/legacy.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/legacy.rb deleted file mode 100644 index 654866c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/legacy.rb +++ /dev/null @@ -1,9 +0,0 @@ -class Thread - def self.mailbox - Celluloid.mailbox - end - - def self.receive(timeout = nil, &block) - Celluloid.receive(timeout, &block) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/links.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/links.rb deleted file mode 100644 index 8ec8e1a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/links.rb +++ /dev/null @@ -1,36 +0,0 @@ -module Celluloid - # Linked actors send each other system events - class Links - include Enumerable - - def initialize - @links = {} - end - - # Add an actor to the current links - def <<(actor) - @links[actor.mailbox.address] = actor - end - - # Do links include the given actor? - def include?(actor) - @links.has_key? actor.mailbox.address - end - - # Remove an actor from the links - def delete(actor) - @links.delete actor.mailbox.address - end - - # Iterate through all links - def each - @links.each { |_, actor| yield(actor) } - end - - # Generate a string representation - def inspect - links = self.map(&:inspect).join(',') - "#<#{self.class}[#{links}]>" - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logger.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logger.rb deleted file mode 100644 index 95aad91..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logger.rb +++ /dev/null @@ -1,93 +0,0 @@ -module Celluloid - module Logger - class WithBacktrace - def initialize(backtrace) - @backtrace = backtrace - end - - def debug(string) - Celluloid.logger.debug(decorate(string)) - end - - def info(string) - Celluloid.logger.info(decorate(string)) - end - - def warn(string) - Celluloid.logger.warn(decorate(string)) - end - - def error(string) - Celluloid.logger.error(decorate(string)) - end - - def decorate(string) - [string, @backtrace].join("\n\t") - end - end - - @exception_handlers = [] - module_function - - def with_backtrace(backtrace) - yield WithBacktrace.new(backtrace) if Celluloid.logger - end - - # Send a debug message - def debug(string) - Celluloid.logger.debug(string) if Celluloid.logger - end - - # Send a info message - def info(string) - Celluloid.logger.info(string) if Celluloid.logger - end - - # Send a warning message - def warn(string) - Celluloid.logger.warn(string) if Celluloid.logger - end - - # Send an error message - def error(string) - Celluloid.logger.error(string) if Celluloid.logger - end - - # Handle a crash - def crash(string, exception) - string << "\n" << format_exception(exception) - error string - - @exception_handlers.each do |handler| - begin - handler.call(exception) - rescue => ex - error "EXCEPTION HANDLER CRASHED:\n" << format_exception(ex) - end - end - end - - # Note a deprecation - def deprecate(message) - trace = caller.join("\n\t") - warn "DEPRECATION WARNING: #{message}\n\t#{trace}" - end - - # Define an exception handler - # NOTE: These should be defined at application start time - def exception_handler(&block) - @exception_handlers << block - nil - end - - # Format an exception message - def format_exception(exception) - str = "#{exception.class}: #{exception.to_s}\n\t" - if exception.backtrace - str << exception.backtrace.join("\n\t") - else - str << "EMPTY BACKTRACE\n\t" - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging.rb deleted file mode 100644 index c9c7123..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging.rb +++ /dev/null @@ -1,5 +0,0 @@ -require 'celluloid/logging/log_event' -require 'celluloid/logging/incident' -require 'celluloid/logging/ring_buffer' -require 'celluloid/logging/incident_logger' -require 'celluloid/logging/incident_reporter' diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging/incident.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging/incident.rb deleted file mode 100644 index c7b341a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging/incident.rb +++ /dev/null @@ -1,21 +0,0 @@ -module Celluloid - # Wraps all events and context for a single incident. - class Incident - attr_accessor :pid - attr_accessor :events, :triggering_event - - def initialize(events, triggering_event=nil) - @events = events - @triggering_event = triggering_event - @pid = $$ - end - - # Merge two incidents together. This may be useful if two incidents occur at the same time. - def merge(*other_incidents) - merged_events = other_incidents.flatten.inject(events) do |events, incident| - events += incident.events - end - Incident.new(merged_events.sort, triggering_event) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging/incident_logger.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging/incident_logger.rb deleted file mode 100644 index 21ef0e3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging/incident_logger.rb +++ /dev/null @@ -1,129 +0,0 @@ -require 'logger' -module Celluloid - # A logger that holds all messages in circular buffers, then flushes the buffers - # when an event occurs at a configurable severity threshold. - # - # Unlike ruby's Logger, this class only supports a single progname. - class IncidentLogger - module Severity - include ::Logger::Severity - - TRACE = -1 - - def severity_to_string(severity) - case severity - when TRACE then 'TRACE' - when DEBUG then 'DEBUG' - when INFO then 'INFO' - when WARN then 'WARN' - when ERROR then 'ERROR' - when FATAL then 'FATAL' - when UNKNOWN then 'UNKNOWN' - end - end - - end - include Severity - - # The progname (facility) for this instance. - attr_accessor :progname - - # The logging level. Messages below this severity will not be logged at all. - attr_accessor :level - - # The incident threshold. Messages at or above this severity will generate an - # incident and be published to incident reporters. - attr_accessor :threshold - - # The buffer size limit. Each log level will retain this number of messages - # at maximum. - attr_accessor :sizelimit - - attr_accessor :buffers - - # Create a new IncidentLogger. - def initialize(progname=nil, options={}) - @progname = progname || "default" - @level = options[:level] || DEBUG - @threshold = options[:threshold] || ERROR - @sizelimit = options[:sizelimit] || 100 - - @buffer_mutex = Mutex.new - @buffers = Hash.new do |progname_hash, _progname| - @buffer_mutex.synchronize do - progname_hash[_progname] = Hash.new do |severity_hash, severity| - severity_hash[severity] = RingBuffer.new(@sizelimit) - end - end - end - - # When the IncidentLogger itself encounters an error, it falls back to logging to stderr - @fallback_logger = ::Logger.new(STDERR) - @fallback_logger.progname = "FALLBACK" - end - - # add an event. - def add(severity, message=nil, progname=nil, &block) - progname ||= @progname - severity ||= UNKNOWN - - if severity < @level - return event.id - end - - if message.nil? && !block_given? - message = progname - progname = @progname - end - - event = LogEvent.new(severity, message, progname, &block) - - @buffers[progname][severity] << event - - if severity >= @threshold - begin - Celluloid::Notifications.notifier.async.publish(incident_topic, create_incident(event)) - rescue => ex - @fallback_logger.error(ex) - end - end - event.id - end - alias :log :add - - # See docs for Logger#info - def trace (progname=nil, &block); add(TRACE, nil, progname, &block); end - def debug (progname=nil, &block); add(DEBUG, nil, progname, &block); end - def info (progname=nil, &block); add(INFO, nil, progname, &block); end - def warn (progname=nil, &block); add(WARN, nil, progname, &block); end - def error (progname=nil, &block); add(ERROR, nil, progname, &block); end - def fatal (progname=nil, &block); add(FATAL, nil, progname, &block); end - def unknown (progname=nil, &block); add(UNKNOWN, nil, progname, &block); end - - def flush - messages = [] - @buffer_mutex.synchronize do - @buffers.each do |progname, severities| - severities.each do |severity, buffer| - messages += buffer.flush - end - end - end - messages.sort - end - - def clear - @buffer_mutex.synchronize do - @buffers.each { |buffer| buffer.clear } - end - end - - def create_incident(event=nil) - Incident.new(flush, event) - end - - def incident_topic - "log.incident.#{@progname}" - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging/incident_reporter.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging/incident_reporter.rb deleted file mode 100644 index f9004bb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging/incident_reporter.rb +++ /dev/null @@ -1,48 +0,0 @@ -require 'logger' -module Celluloid - # Subscribes to log incident topics to report on them. - class IncidentReporter - include Celluloid - include Celluloid::Notifications - - # get the time from the event - class Formatter < ::Logger::Formatter - def call(severity, time, progname, msg) - super(severity, msg.time, progname, msg.message) - end - end - - def initialize(*args) - subscribe(/log\.incident/, :report) - @logger = ::Logger.new(*args) - @logger.formatter = Formatter.new - @silenced = false - end - - def report(topic, incident) - return if @silenced - - header = "INCIDENT" - header << " AT #{incident.triggering_event.time}" if incident.triggering_event - @logger << header - @logger << "\n" - @logger << "====================\n" - incident.events.each do |event| - @logger.add(event.severity, event, event.progname) - end - @logger << "====================\n" - end - - def silence - @silenced = true - end - - def unsilence - @silenced = false - end - - def silenced? - @silenced - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging/log_event.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging/log_event.rb deleted file mode 100644 index 92189b5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging/log_event.rb +++ /dev/null @@ -1,20 +0,0 @@ -module Celluloid - # Wraps a single log event. - class LogEvent - attr_accessor :id, :severity, :message, :progname, :time - - def initialize(severity, message, progname, time=Time.now, &block) - # This id should be ordered. For now relies on Celluloid::UUID to be ordered. - # May want to use a generation/counter strategy for independence of uuid. - @id = Celluloid::UUID.generate - @severity = severity - @message = block_given? ? yield : message - @progname = progname - @time = time - end - - def <=>(other) - @id <=> other.id - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging/ring_buffer.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging/ring_buffer.rb deleted file mode 100644 index 25dc466..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/logging/ring_buffer.rb +++ /dev/null @@ -1,65 +0,0 @@ -module Celluloid - class RingBuffer - def initialize(size) - @size = size - @start = 0 - @count = 0 - @buffer = Array.new(size) - @mutex = Mutex.new - end - - def full? - @count == @size - end - - def empty? - @count == 0 - end - - def push(value) - @mutex.synchronize do - stop = (@start + @count) % @size - @buffer[stop] = value - if full? - @start = (@start + 1) % @size - else - @count += 1 - end - value - end - end - alias :<< :push - - def shift - @mutex.synchronize do - remove_element - end - end - - def flush - values = [] - @mutex.synchronize do - while !empty? - values << remove_element - end - end - values - end - - def clear - @buffer = Array.new(@size) - @start = 0 - @count = 0 - end - - private - - def remove_element - return nil if empty? - value, @buffer[@start] = @buffer[@start], nil - @start = (@start + 1) % @size - @count -= 1 - value - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/mailbox.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/mailbox.rb deleted file mode 100644 index ccca364..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/mailbox.rb +++ /dev/null @@ -1,156 +0,0 @@ -require 'thread' - -module Celluloid - class MailboxDead < Celluloid::Error; end # you can't receive from the dead - class MailboxShutdown < Celluloid::Error; end # raised if the mailbox can no longer be used - - # Actors communicate with asynchronous messages. Messages are buffered in - # Mailboxes until Actors can act upon them. - class Mailbox - include Enumerable - - # A unique address at which this mailbox can be found - attr_reader :address - attr_accessor :max_size - - def initialize - @address = Celluloid.uuid - @messages = [] - @mutex = Mutex.new - @dead = false - @condition = ConditionVariable.new - @max_size = nil - end - - # Add a message to the Mailbox - def <<(message) - @mutex.lock - begin - if mailbox_full || @dead - dead_letter(message) - return - end - if message.is_a?(SystemEvent) - # SystemEvents are high priority messages so they get added to the - # head of our message queue instead of the end - @messages.unshift message - else - @messages << message - end - - @condition.signal - nil - ensure - @mutex.unlock rescue nil - end - end - - # Receive a message from the Mailbox. May return nil and may return before - # the specified timeout. - def check(timeout = nil, &block) - message = nil - - @mutex.lock - begin - raise MailboxDead, "attempted to receive from a dead mailbox" if @dead - - Timers::Wait.for(timeout) do |remaining| - message = next_message(&block) - - break message if message - - @condition.wait(@mutex, remaining) - end - ensure - @mutex.unlock rescue nil - end - - return message - end - - # Receive a letter from the mailbox. Guaranteed to return a message. If - # timeout is exceeded, raise a TimeoutError. - def receive(timeout = nil, &block) - Timers::Wait.for(timeout) do |remaining| - if message = check(timeout, &block) - return message - end - end - - raise TimeoutError.new("receive timeout exceeded") - end - - # Shut down this mailbox and clean up its contents - def shutdown - raise MailboxDead, "mailbox already shutdown" if @dead - - @mutex.lock - begin - yield if block_given? - messages = @messages - @messages = [] - @dead = true - ensure - @mutex.unlock rescue nil - end - - messages.each do |msg| - dead_letter msg - msg.cleanup if msg.respond_to? :cleanup - end - true - end - - # Is the mailbox alive? - def alive? - !@dead - end - - # Cast to an array - def to_a - @mutex.synchronize { @messages.dup } - end - - # Iterate through the mailbox - def each(&block) - to_a.each(&block) - end - - # Inspect the contents of the Mailbox - def inspect - "#<#{self.class}:#{object_id.to_s(16)} @messages=[#{map { |m| m.inspect }.join(', ')}]>" - end - - # Number of messages in the Mailbox - def size - @mutex.synchronize { @messages.size } - end - - private - - # Retrieve the next message in the mailbox - def next_message - message = nil - - if block_given? - index = @messages.index do |msg| - yield(msg) || msg.is_a?(SystemEvent) - end - - message = @messages.slice!(index, 1).first if index - else - message = @messages.shift - end - - message - end - - def dead_letter(message) - Logger.debug "Discarded message (mailbox is dead): #{message}" if $CELLULOID_DEBUG - end - - def mailbox_full - @max_size && @messages.size >= @max_size - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/method.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/method.rb deleted file mode 100644 index 73d3412..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/method.rb +++ /dev/null @@ -1,32 +0,0 @@ -module Celluloid - # Method handles that route through an actor proxy - class Method - - def initialize(proxy, name) - raise NameError, "undefined method `#{name}'" unless proxy.respond_to? name - - @proxy, @name = proxy, name - @klass = @proxy.class - end - - def arity - @proxy.method_missing(:method, @name).arity - end - - def name - @proxy.method_missing(:method, @name).name - end - - def parameters - @proxy.method_missing(:method, @name).parameters - end - - def call(*args, &block) - @proxy.__send__(@name, *args, &block) - end - - def inspect - "#" - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/notifications.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/notifications.rb deleted file mode 100644 index 90c018f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/notifications.rb +++ /dev/null @@ -1,83 +0,0 @@ -module Celluloid - module Notifications - def self.notifier - Actor[:notifications_fanout] or raise DeadActorError, "notifications fanout actor not running" - end - - def publish(pattern, *args) - Celluloid::Notifications.notifier.publish(pattern, *args) - end - - def subscribe(pattern, method) - Celluloid::Notifications.notifier.subscribe(Actor.current, pattern, method) - end - - def unsubscribe(*args) - Celluloid::Notifications.notifier.unsubscribe(*args) - end - - class Fanout - include Celluloid - trap_exit :prune - - def initialize - @subscribers = [] - @listeners_for = {} - end - - def subscribe(actor, pattern, method) - subscriber = Subscriber.new(actor, pattern, method).tap do |s| - @subscribers << s - end - link actor - @listeners_for.clear - subscriber - end - - def unsubscribe(subscriber) - @subscribers.reject! { |s| s.matches?(subscriber) } - @listeners_for.clear - end - - def publish(pattern, *args) - listeners_for(pattern).each { |s| s.publish(pattern, *args) } - end - - def listeners_for(pattern) - @listeners_for[pattern] ||= @subscribers.select { |s| s.subscribed_to?(pattern) } - end - - def listening?(pattern) - listeners_for(pattern).any? - end - - def prune(actor, reason=nil) - @subscribers.reject! { |s| s.actor == actor } - @listeners_for.clear - end - end - - class Subscriber - attr_accessor :actor, :pattern, :method - - def initialize(actor, pattern, method) - @actor = actor - @pattern = pattern - @method = method - end - - def publish(pattern, *args) - actor.async method, pattern, *args - end - - def subscribed_to?(pattern) - !pattern || @pattern === pattern.to_s - end - - def matches?(subscriber_or_pattern) - self === subscriber_or_pattern || - @pattern && @pattern === subscriber_or_pattern - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/pool_manager.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/pool_manager.rb deleted file mode 100644 index 01f8ad5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/pool_manager.rb +++ /dev/null @@ -1,146 +0,0 @@ -require 'set' - -module Celluloid - # Manages a fixed-size pool of workers - # Delegates work (i.e. methods) and supervises workers - # Don't use this class directly. Instead use MyKlass.pool - class PoolManager - include Celluloid - trap_exit :__crash_handler__ - finalizer :__shutdown__ - - def initialize(worker_class, options = {}) - @size = options[:size] || [Celluloid.cores || 2, 2].max - raise ArgumentError, "minimum pool size is 2" if @size < 2 - - @worker_class = worker_class - @args = options[:args] ? Array(options[:args]) : [] - - @idle = @size.times.map { worker_class.new_link(*@args) } - - # FIXME: Another data structure (e.g. Set) would be more appropriate - # here except it causes MRI to crash :o - @busy = [] - end - - def __shutdown__ - terminators = (@idle + @busy).map do |actor| - begin - actor.future(:terminate) - rescue DeadActorError - end - end - - terminators.compact.each { |terminator| terminator.value rescue nil } - end - - def _send_(method, *args, &block) - worker = __provision_worker__ - - begin - worker._send_ method, *args, &block - rescue DeadActorError # if we get a dead actor out of the pool - wait :respawn_complete - worker = __provision_worker__ - retry - rescue Exception => ex - abort ex - ensure - if worker.alive? - @idle << worker - @busy.delete worker - end - end - end - - def name - _send_ @mailbox, :name - end - - def is_a?(klass) - _send_ :is_a?, klass - end - - def kind_of?(klass) - _send_ :kind_of?, klass - end - - def methods(include_ancestors = true) - _send_ :methods, include_ancestors - end - - def to_s - _send_ :to_s - end - - def inspect - _send_ :inspect - end - - def size - @size - end - - def size=(new_size) - new_size = [0, new_size].max - - if new_size > size - delta = new_size - size - delta.times { @idle << @worker_class.new_link(*@args) } - else - (size - new_size).times do - worker = __provision_worker__ - unlink worker - @busy.delete worker - worker.terminate - end - end - @size = new_size - end - - def busy_size - @busy.length - end - - def idle_size - @idle.length - end - - # Provision a new worker - def __provision_worker__ - Task.current.guard_warnings = true - while @idle.empty? - # Wait for responses from one of the busy workers - response = exclusive { receive { |msg| msg.is_a?(Response) } } - Thread.current[:celluloid_actor].handle_message(response) - end - - worker = @idle.shift - @busy << worker - - worker - end - - # Spawn a new worker for every crashed one - def __crash_handler__(actor, reason) - @busy.delete actor - @idle.delete actor - return unless reason - - @idle << @worker_class.new_link(*@args) - signal :respawn_complete - end - - def respond_to?(method, include_private = false) - super || @worker_class.instance_methods.include?(method.to_sym) - end - - def method_missing(method, *args, &block) - if respond_to?(method) - _send_ method, *args, &block - else - super - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/probe.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/probe.rb deleted file mode 100644 index 011c2eb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/probe.rb +++ /dev/null @@ -1,73 +0,0 @@ -require 'celluloid' - -$CELLULOID_MONITORING = true - -module Celluloid - class Probe - include Celluloid - include Celluloid::Notifications - - NOTIFICATIONS_TOPIC_BASE = 'celluloid.events.%s' - INITIAL_EVENTS = Queue.new - - class << self - def run - # spawn the actor if not found - supervise_as(:probe_actor) unless Actor[:probe_actor] && Actor[:probe_actor].alive? - end - - def actor_created(actor) - trigger_event(:actor_created, actor) - end - - def actor_named(actor) - trigger_event(:actor_named, actor) - end - - def actor_died(actor) - trigger_event(:actor_died, actor) - end - - def actors_linked(a, b) - a = find_actor(a) - b = find_actor(b) - trigger_event(:actors_linked, a, b) - end - - private - - def trigger_event(name, *args) - return unless $CELLULOID_MONITORING - probe_actor = Actor[:probe_actor] - if probe_actor - probe_actor.async.dispatch_event(name, args) - else - INITIAL_EVENTS << [name, args] - end - end - - def find_actor(obj) - if obj.__send__(:class) == Actor - obj - elsif owner = obj.instance_variable_get(OWNER_IVAR) - owner - end - end - end - - def initialize - async.first_run - end - - def first_run - until INITIAL_EVENTS.size == 0 - event = INITIAL_EVENTS.pop - dispatch_event(*event) - end - end - - def dispatch_event(cmd, args) - publish(NOTIFICATIONS_TOPIC_BASE % cmd, args) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/properties.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/properties.rb deleted file mode 100644 index fb3ded2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/properties.rb +++ /dev/null @@ -1,24 +0,0 @@ -module Celluloid - # Properties define inheritable attributes of classes, somewhat similar to - # Rails cattr_*/mattr_* or class_attribute - module Properties - def property(name, opts = {}) - default = opts.fetch(:default, nil) - multi = opts.fetch(:multi, false) - ivar_name = "@#{name}".to_sym - - ancestors.first.send(:define_singleton_method, name) do |value = nil, *extra| - if value - value = value ? [value, *send(name), *extra].uniq : [] if multi - instance_variable_set(ivar_name, value) - elsif instance_variables.include?(ivar_name) - instance_variable_get(ivar_name) - elsif superclass.respond_to? name - superclass.send(name) - else - default - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/abstract_proxy.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/abstract_proxy.rb deleted file mode 100644 index 6a79acb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/abstract_proxy.rb +++ /dev/null @@ -1,20 +0,0 @@ -module Celluloid - # Base class of all Celluloid proxies - class AbstractProxy < BasicObject - # Used for reflecting on proxy objects themselves - def __class__; AbstractProxy; end - - # Needed for storing proxies in data structures - needed = [:object_id, :__id__, :hash] - instance_methods - if needed.any? - include ::Kernel.dup.module_eval { - undef_method(*(instance_methods - needed)) - self - } - - # rubinius bug? These methods disappear when we include hacked kernel - define_method :==, ::BasicObject.instance_method(:==) unless instance_methods.include?(:==) - alias_method(:equal?, :==) unless instance_methods.include?(:equal?) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/actor_proxy.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/actor_proxy.rb deleted file mode 100644 index 29d2468..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/actor_proxy.rb +++ /dev/null @@ -1,38 +0,0 @@ -module Celluloid - # A proxy which controls the Actor lifecycle - class ActorProxy < AbstractProxy - attr_reader :thread, :mailbox - - # Used for reflecting on proxy objects themselves - def __class__; ActorProxy; end - - def initialize(thread, mailbox) - @thread = thread - @mailbox = mailbox - end - - def inspect - # TODO: use a system event to fetch actor state: tasks? - "#" - rescue DeadActorError - "#" - end - - def alive? - @mailbox.alive? - end - - # Terminate the associated actor - def terminate - terminate! - Actor.join(self) - nil - end - - # Terminate the associated actor asynchronously - def terminate! - ::Kernel.raise DeadActorError, "actor already terminated" unless alive? - @mailbox << TerminationRequest.new - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/async_proxy.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/async_proxy.rb deleted file mode 100644 index a498741..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/async_proxy.rb +++ /dev/null @@ -1,31 +0,0 @@ -module Celluloid - # A proxy which sends asynchronous calls to an actor - class AsyncProxy < AbstractProxy - attr_reader :mailbox - - # Used for reflecting on proxy objects themselves - def __class__; AsyncProxy; end - - def initialize(mailbox, klass) - @mailbox, @klass = mailbox, klass - end - - def inspect - "#" - end - - def method_missing(meth, *args, &block) - if @mailbox == ::Thread.current[:celluloid_mailbox] - args.unshift meth - meth = :__send__ - end - - if block_given? - # FIXME: nicer exception - raise "Cannot use blocks with async yet" - end - - @mailbox << AsyncCall.new(meth, args, block) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/block_proxy.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/block_proxy.rb deleted file mode 100644 index fea213a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/block_proxy.rb +++ /dev/null @@ -1,29 +0,0 @@ -module Celluloid - class BlockProxy - def initialize(call, mailbox, block) - @call = call - @mailbox = mailbox - @block = block - @execution = :sender - end - attr_writer :execution - attr_reader :call, :block - - def to_proc - if @execution == :sender - lambda do |*values| - if task = Thread.current[:celluloid_task] - @mailbox << BlockCall.new(self, Actor.current.mailbox, values) - # TODO: if respond fails, the Task will never be resumed - task.suspend(:invokeblock) - else - # FIXME: better exception - raise "No task to suspend" - end - end - else - @block - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/cell_proxy.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/cell_proxy.rb deleted file mode 100644 index 140ff95..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/cell_proxy.rb +++ /dev/null @@ -1,68 +0,0 @@ -module Celluloid - # A proxy object returned from Celluloid::Actor.new/new_link which converts - # the normal Ruby method protocol into an inter-actor message protocol - class CellProxy < SyncProxy - # Used for reflecting on proxy objects themselves - def __class__; CellProxy; end - - def initialize(actor_proxy, mailbox, klass) - super(mailbox, klass) - @actor_proxy = actor_proxy - @sync_proxy = SyncProxy.new(mailbox, klass) - @async_proxy = AsyncProxy.new(mailbox, klass) - @future_proxy = FutureProxy.new(mailbox, klass) - end - - def _send_(meth, *args, &block) - method_missing :__send__, meth, *args, &block - end - - def inspect - method_missing :inspect - rescue DeadActorError - "#" - end - - def method(name) - Method.new(self, name) - end - - alias_method :sync, :method_missing - - # Obtain an async proxy or explicitly invoke a named async method - def async(method_name = nil, *args, &block) - if method_name - @async_proxy.method_missing method_name, *args, &block - else - @async_proxy - end - end - - # Obtain a future proxy or explicitly invoke a named future method - def future(method_name = nil, *args, &block) - if method_name - @future_proxy.method_missing method_name, *args, &block - else - @future_proxy - end - end - - def alive? - @actor_proxy.alive? - end - - def thread - @actor_proxy.thread - end - - # Terminate the associated actor - def terminate - @actor_proxy.terminate - end - - # Terminate the associated actor asynchronously - def terminate! - @actor_proxy.terminate! - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/future_proxy.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/future_proxy.rb deleted file mode 100644 index 51d4456..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/future_proxy.rb +++ /dev/null @@ -1,35 +0,0 @@ -module Celluloid - # A proxy which creates future calls to an actor - class FutureProxy < AbstractProxy - attr_reader :mailbox - - # Used for reflecting on proxy objects themselves - def __class__; FutureProxy; end - - def initialize(mailbox, klass) - @mailbox, @klass = mailbox, klass - end - - def inspect - "#" - end - - def method_missing(meth, *args, &block) - unless @mailbox.alive? - raise DeadActorError, "attempted to call a dead actor" - end - - if block_given? - # FIXME: nicer exception - raise "Cannot use blocks with futures yet" - end - - future = Future.new - call = SyncCall.new(future, meth, args, block) - - @mailbox << call - - future - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/sync_proxy.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/sync_proxy.rb deleted file mode 100644 index 1636239..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/proxies/sync_proxy.rb +++ /dev/null @@ -1,36 +0,0 @@ -module Celluloid - # A proxy which sends synchronous calls to an actor - class SyncProxy < AbstractProxy - attr_reader :mailbox - - # Used for reflecting on proxy objects themselves - def __class__; SyncProxy; end - - def initialize(mailbox, klass) - @mailbox, @klass = mailbox, klass - end - - def inspect - "#" - end - - def respond_to?(meth, include_private = false) - __class__.instance_methods.include?(meth) || method_missing(:respond_to?, meth, include_private) - end - - def method_missing(meth, *args, &block) - unless @mailbox.alive? - raise DeadActorError, "attempted to call a dead actor" - end - - if @mailbox == ::Thread.current[:celluloid_mailbox] - args.unshift meth - meth = :__send__ - end - - call = SyncCall.new(::Celluloid.mailbox, meth, args, block) - @mailbox << call - call.value - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/receivers.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/receivers.rb deleted file mode 100644 index 668f100..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/receivers.rb +++ /dev/null @@ -1,63 +0,0 @@ -require 'set' - -require 'timers' - -module Celluloid - # Allow methods to directly interact with the actor protocol - class Receivers - def initialize(timers) - @receivers = Set.new - @timers = timers - end - - # Receive an asynchronous message - def receive(timeout = nil, &block) - if Celluloid.exclusive? - Celluloid.mailbox.receive(timeout, &block) - else - receiver = Receiver.new block - - if timeout - receiver.timer = @timers.after(timeout) do - @receivers.delete receiver - receiver.resume - end - end - - @receivers << receiver - Task.suspend :receiving - end - end - - # Handle incoming messages - def handle_message(message) - receiver = @receivers.find { |r| r.match(message) } - return unless receiver - - @receivers.delete receiver - receiver.timer.cancel if receiver.timer - receiver.resume message - message - end - end - - # Methods blocking on a call to receive - class Receiver - attr_accessor :timer - - def initialize(block) - @block = block - @task = Task.current - @timer = nil - end - - # Match a message with this receiver's block - def match(message) - @block ? @block.call(message) : true - end - - def resume(message = nil) - @task.resume message - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/registry.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/registry.rb deleted file mode 100644 index c0544d4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/registry.rb +++ /dev/null @@ -1,57 +0,0 @@ -require 'thread' - -module Celluloid - # The Registry allows us to refer to specific actors by human-meaningful names - class Registry - def initialize - @registry = {} - @registry_lock = Mutex.new - end - - # Register an Actor - def []=(name, actor) - actor_singleton = class << actor; self; end - unless actor_singleton.ancestors.include? AbstractProxy - raise TypeError, "not an actor" - end - - @registry_lock.synchronize do - @registry[name.to_sym] = actor - end - - actor.mailbox << NamingRequest.new(name.to_sym) - end - - # Retrieve an actor by name - def [](name) - @registry_lock.synchronize do - @registry[name.to_sym] - end - end - - alias_method :get, :[] - alias_method :set, :[]= - - def delete(name) - @registry_lock.synchronize do - @registry.delete name.to_sym - end - end - - # List all registered actors by name - def names - @registry_lock.synchronize { @registry.keys } - end - - # removes and returns all registered actors as a hash of `name => actor` - # can be used in testing to clear the registry - def clear - hash = nil - @registry_lock.synchronize do - hash = @registry.dup - @registry.clear - end - hash - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/responses.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/responses.rb deleted file mode 100644 index 2215f4b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/responses.rb +++ /dev/null @@ -1,44 +0,0 @@ -module Celluloid - # Responses to calls - class Response - attr_reader :call, :value - - def initialize(call, value) - @call, @value = call, value - end - - def dispatch - @call.task.resume self - end - end - - # Call completed successfully - class SuccessResponse < Response; end - - # Call was aborted due to sender error - class ErrorResponse < Response - def value - ex = super - ex = ex.cause if ex.is_a? AbortError - - if ex.backtrace - ex.backtrace << "(celluloid):0:in `remote procedure call'" - ex.backtrace.concat(caller) - end - - raise ex - end - end - - class BlockResponse - def initialize(call, result) - @call = call - @result = result - end - - def dispatch - @call.task.resume(@result) - end - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/rspec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/rspec.rb deleted file mode 100644 index 2b3e227..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/rspec.rb +++ /dev/null @@ -1,13 +0,0 @@ -require 'celluloid/rspec/example_actor_class' -require 'celluloid/rspec/actor_examples' -require 'celluloid/rspec/mailbox_examples' -require 'celluloid/rspec/task_examples' - -module Celluloid - # Timer accuracy enforced by the tests (50ms) - TIMER_QUANTUM = 0.05 -end - -$CELLULOID_DEBUG = true - -require 'celluloid/test' diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/rspec/actor_examples.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/rspec/actor_examples.rb deleted file mode 100644 index c075072..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/rspec/actor_examples.rb +++ /dev/null @@ -1,1054 +0,0 @@ -shared_examples "a Celluloid Actor" do |included_module| - describe "using Fibers" do - include_examples "Celluloid::Actor examples", included_module, Celluloid::TaskFiber - end - describe "using Threads" do - include_examples "Celluloid::Actor examples", included_module, Celluloid::TaskThread - end -end - -shared_examples "Celluloid::Actor examples" do |included_module, task_klass| - class ExampleCrash < StandardError - attr_accessor :foo - end - - let(:actor_class) { ExampleActorClass.create(included_module, task_klass) } - - it "returns the actor's class, not the proxy's" do - actor = actor_class.new "Troy McClure" - actor.class.should eq(actor_class) - end - - it "compares with the actor's class in a case statement" do - case actor_class.new("Troy McClure") - when actor_class - true - else - false - end.should be_true - end - - it "can be stored in hashes" do - actor = actor_class.new "Troy McClure" - actor.hash.should_not eq(Kernel.hash) - actor.object_id.should_not eq(Kernel.object_id) - end - - it "implements respond_to? correctly" do - actor = actor_class.new 'Troy McClure' - actor.should respond_to(:alive?) - end - - it "supports synchronous calls" do - actor = actor_class.new "Troy McClure" - actor.greet.should eq("Hi, I'm Troy McClure") - end - - it "supports synchronous calls with blocks" do - actor = actor_class.new "Blocky Ralboa" - - block_executed = false - actor.run { block_executed = true } - block_executed.should be_true - end - - it "supports synchronous calls via #method" do - method = actor_class.new("Troy McClure").method(:greet) - method.call.should eq("Hi, I'm Troy McClure") - end - - it "supports #arity calls via #method" do - method = actor_class.new("Troy McClure").method(:greet) - method.arity.should be(0) - - method = actor_class.new("Troy McClure").method(:change_name) - method.arity.should be(1) - end - - it "supports #name calls via #method" do - method = actor_class.new("Troy McClure").method(:greet) - method.name.should == :greet - end - - it "supports #parameters via #method" do - method = actor_class.new("Troy McClure").method(:greet) - method.parameters.should == [] - - method = actor_class.new("Troy McClure").method(:change_name) - method.parameters.should == [[:req, :new_name]] - end - - it "supports future(:method) syntax for synchronous future calls" do - actor = actor_class.new "Troy McClure" - future = actor.future :greet - future.value.should eq("Hi, I'm Troy McClure") - end - - it "supports future.method syntax for synchronous future calls" do - actor = actor_class.new "Troy McClure" - future = actor.future.greet - future.value.should eq("Hi, I'm Troy McClure") - end - - it "handles circular synchronous calls" do - klass = Class.new do - include included_module - task_class task_klass - - def greet_by_proxy(actor) - actor.greet - end - - def to_s - "a ponycopter!" - end - end - - ponycopter = klass.new - actor = actor_class.new ponycopter - ponycopter.greet_by_proxy(actor).should eq("Hi, I'm a ponycopter!") - end - - it "detects recursion" do - klass1 = Class.new do - include included_module - task_class task_klass - - def recursion_test(recurse_through = nil) - if recurse_through - recurse_through.recursion_thunk(Celluloid::Actor.current) - else - Celluloid.detect_recursion - end - end - end - - klass2 = Class.new do - include included_module - task_class task_klass - - def recursion_thunk(other) - other.recursion_test - end - end - - actor1 = klass1.new - actor2 = klass2.new - - actor1.recursion_test.should be_false - actor1.recursion_test(actor2).should be_true - end - - it "properly handles method_missing" do - actor = actor_class.new "Method Missing" - actor.should respond_to(:first) - actor.first.should be :bar - end - - it "properly handles respond_to with include_private" do - actor = actor_class.new "Method missing privates" - actor.respond_to?(:zomg_private).should be_false - actor.respond_to?(:zomg_private, true).should be_true - end - - it "warns about suspending the initialize" do - klass = Class.new do - include included_module - task_class task_klass - - def initialize - sleep 0.1 - end - end - - Celluloid.logger.should_receive(:warn).with(/Dangerously suspending task: type=:call, meta={:method_name=>:initialize}, status=:sleeping/) - - actor = klass.new - actor.terminate - Celluloid::Actor.join(actor) unless defined?(JRUBY_VERSION) - end - - it "calls the user defined finalizer" do - actor = actor_class.new "Mr. Bean" - actor.wrapped_object.should_receive(:my_finalizer) - actor.terminate - Celluloid::Actor.join(actor) - end - - it "warns about suspending the finalizer" do - klass = Class.new do - include included_module - task_class task_klass - - finalizer :cleanup - - def cleanup - sleep 0.1 - end - end - - Celluloid.logger.should_receive(:warn).with(/Dangerously suspending task: type=:finalizer, meta={:method_name=>:cleanup}, status=:sleeping/) - - actor = klass.new - actor.terminate - Celluloid::Actor.join(actor) - end - - it "supports async(:method) syntax for asynchronous calls" do - actor = actor_class.new "Troy McClure" - actor.async :change_name, "Charlie Sheen" - actor.greet.should eq("Hi, I'm Charlie Sheen") - end - - it "supports async.method syntax for asynchronous calls" do - actor = actor_class.new "Troy McClure" - actor.async.change_name "Charlie Sheen" - actor.greet.should eq("Hi, I'm Charlie Sheen") - end - - it "supports async.method syntax for asynchronous calls to itself" do - actor = actor_class.new "Troy McClure" - actor.change_name_async "Charlie Sheen" - actor.greet.should eq("Hi, I'm Charlie Sheen") - end - - it "allows an actor to call private methods asynchronously" do - actor = actor_class.new "Troy McClure" - actor.call_private - actor.private_called.should be_true - end - - it "knows if it's inside actor scope" do - Celluloid.should_not be_actor - actor = actor_class.new "Troy McClure" - actor.run do - Celluloid.actor? - end.should be_false - actor.run_on_receiver do - Celluloid.actor? - end.should be_true - actor.should be_actor - end - - it "inspects properly" do - actor = actor_class.new "Troy McClure" - actor.inspect.should match(/Celluloid::CellProxy\(/) - actor.inspect.should match(/#{actor_class}/) - actor.inspect.should include('@name="Troy McClure"') - actor.inspect.should_not include("@celluloid") - end - - it "inspects properly when dead" do - actor = actor_class.new "Troy McClure" - actor.terminate - actor.inspect.should match(/Celluloid::CellProxy\(/) - actor.inspect.should match(/#{actor_class}/) - actor.inspect.should include('dead') - end - - it "supports recursive inspect with other actors" do - klass = Class.new do - include included_module - task_class task_klass - - attr_accessor :other - - def initialize(other = nil) - @other = other - end - end - - itchy = klass.new - scratchy = klass.new(itchy) - itchy.other = scratchy - - inspection = itchy.inspect - inspection.should match(/Celluloid::CellProxy\(/) - inspection.should include("...") - end - - it "allows access to the wrapped object" do - actor = actor_class.new "Troy McClure" - actor.wrapped_object.should be_a actor_class - end - - it "warns about leaked wrapped objects via #inspect" do - actor = actor_class.new "Troy McClure" - - actor.inspect.should_not include Celluloid::BARE_OBJECT_WARNING_MESSAGE - actor.inspect_thunk.should_not include Celluloid::BARE_OBJECT_WARNING_MESSAGE - actor.wrapped_object.inspect.should include Celluloid::BARE_OBJECT_WARNING_MESSAGE - end - - it "can override #send" do - actor = actor_class.new "Troy McClure" - actor.send('foo').should eq('oof') - end - - context "when executing under JRuby" do - let(:klass) { - Class.new do - include included_module - task_class task_klass - - def current_thread_name - java_thread.get_name - end - - def java_thread - Thread.current.to_java.getNativeThread - end - end - } - - it "sets execution info" do - klass.new.current_thread_name.should == "Class#current_thread_name" - end - - it "unsets execution info after task completion" do - klass.new.java_thread.get_name.should == "" - end - end if RUBY_PLATFORM == "java" - - context "mocking methods" do - let(:actor) { actor_class.new "Troy McClure" } - - before do - actor.wrapped_object.should_receive(:external_hello).once.and_return "World" - end - - it "works externally via the proxy" do - actor.external_hello.should eq("World") - end - - it "works internally when called on self" do - actor.internal_hello.should eq("World") - end - end - - context :exceptions do - it "reraises exceptions which occur during synchronous calls in the sender" do - actor = actor_class.new "James Dean" # is this in bad taste? - - expect do - actor.crash - end.to raise_exception(ExampleCrash) - end - - it "includes both sender and receiver in exception traces" do - example_receiver = Class.new do - include included_module - task_class task_klass - - define_method(:receiver_method) do - raise ExampleCrash, "the spec purposely crashed me :(" - end - end - - excample_caller = Class.new do - include included_module - task_class task_klass - - define_method(:sender_method) do - example_receiver.new.receiver_method - end - end - - ex = nil - begin - excample_caller.new.sender_method - rescue => ex - end - - ex.should be_a ExampleCrash - ex.backtrace.grep(/`sender_method'/).should be_true - ex.backtrace.grep(/`receiver_method'/).should be_true - end - - it "raises DeadActorError if methods are synchronously called on a dead actor" do - actor = actor_class.new "James Dean" - actor.crash rescue nil - - sleep 0.1 # hax to prevent a race between exit handling and the next call - - expect do - actor.greet - end.to raise_exception(Celluloid::DeadActorError) - end - end - - context :abort do - it "raises exceptions in the sender but keeps running" do - actor = actor_class.new "Al Pacino" - - expect do - actor.crash_with_abort "You die motherfucker!", :bar - end.to raise_exception(ExampleCrash, "You die motherfucker!") - - actor.should be_alive - end - - it "converts strings to runtime errors" do - actor = actor_class.new "Al Pacino" - expect do - actor.crash_with_abort_raw "foo" - end.to raise_exception(RuntimeError, "foo") - end - - it "crashes the sender if we pass neither String nor Exception" do - actor = actor_class.new "Al Pacino" - expect do - actor.crash_with_abort_raw 10 - end.to raise_exception(TypeError, "Exception object/String expected, but Fixnum received") - - Celluloid::Actor.join(actor) - actor.should_not be_alive - end - end - - context :termination do - it "terminates" do - actor = actor_class.new "Arnold Schwarzenegger" - actor.should be_alive - actor.terminate - Celluloid::Actor.join(actor) - actor.should_not be_alive - end - - it "can be terminated by a SyncCall" do - actor = actor_class.new "Arnold Schwarzenegger" - actor.should be_alive - actor.shutdown - Celluloid::Actor.join(actor) - actor.should_not be_alive - end - - it "kills" do # THOU SHALT ALWAYS KILL - actor = actor_class.new "Woody Harrelson" - actor.should be_alive - Celluloid::Actor.kill(actor) - Celluloid::Actor.join(actor) - actor.should_not be_alive - end - - it "raises DeadActorError if called after terminated" do - actor = actor_class.new "Arnold Schwarzenegger" - actor.terminate - - expect do - actor.greet - end.to raise_exception(Celluloid::DeadActorError) - end - - it "terminates cleanly on Celluloid shutdown" do - Celluloid::Actor.stub(:kill).and_call_original - - actor = actor_class.new "Arnold Schwarzenegger" - - Celluloid.shutdown - Celluloid::Actor.should_not have_received(:kill) - end - - it "raises the right DeadActorError if terminate! called after terminated" do - actor = actor_class.new "Arnold Schwarzenegger" - actor.terminate - - expect do - actor.terminate! - end.to raise_exception(Celluloid::DeadActorError, "actor already terminated") - end - - it "logs a warning when terminating tasks" do - Celluloid.logger.should_receive(:warn).with(/^Terminating task: type=:call, meta={:method_name=>:sleepy}, status=:sleeping\n/) - - actor = actor_class.new "Arnold Schwarzenegger" - actor.async.sleepy 10 - actor.greet # make sure the actor has started sleeping - - actor.terminate - end - end - - context :current_actor do - it "knows the current actor" do - actor = actor_class.new "Roger Daltrey" - actor.current_actor.should eq actor - end - - it "raises NotActorError if called outside an actor" do - expect do - Celluloid.current_actor - end.to raise_exception(Celluloid::NotActorError) - end - end - - context :linking do - before :each do - @kevin = actor_class.new "Kevin Bacon" # Some six degrees action here - @charlie = actor_class.new "Charlie Sheen" - end - - let(:supervisor_class) do - Class.new do # like a boss - include included_module - task_class task_klass - trap_exit :lambaste_subordinate - - def initialize(name) - @name = name - @subordinate_lambasted = false - end - - def subordinate_lambasted?; @subordinate_lambasted; end - - def lambaste_subordinate(actor, reason) - @subordinate_lambasted = true - end - end - end - - it "links to other actors" do - @kevin.link @charlie - @kevin.monitoring?(@charlie).should be_true - @kevin.linked_to?(@charlie).should be_true - @charlie.monitoring?(@kevin).should be_true - @charlie.linked_to?(@kevin).should be_true - end - - it "unlinks from other actors" do - @kevin.link @charlie - @kevin.unlink @charlie - - @kevin.monitoring?(@charlie).should be_false - @kevin.linked_to?(@charlie).should be_false - @charlie.monitoring?(@kevin).should be_false - @charlie.linked_to?(@kevin).should be_false - end - - it "monitors other actors unidirectionally" do - @kevin.monitor @charlie - - @kevin.monitoring?(@charlie).should be_true - @kevin.linked_to?(@charlie).should be_false - @charlie.monitoring?(@kevin).should be_false - @charlie.linked_to?(@kevin).should be_false - end - - it "unmonitors other actors" do - @kevin.monitor @charlie - @kevin.unmonitor @charlie - - @kevin.monitoring?(@charlie).should be_false - @kevin.linked_to?(@charlie).should be_false - @charlie.monitoring?(@kevin).should be_false - @charlie.linked_to?(@kevin).should be_false - end - - it "traps exit messages from other actors" do - chuck = supervisor_class.new "Chuck Lorre" - chuck.link @charlie - - expect do - @charlie.crash - end.to raise_exception(ExampleCrash) - - sleep 0.1 # hax to prevent a race between exit handling and the next call - chuck.should be_subordinate_lambasted - end - - it "traps exit messages from other actors in subclasses" do - supervisor_subclass = Class.new(supervisor_class) - chuck = supervisor_subclass.new "Chuck Lorre" - chuck.link @charlie - - expect do - @charlie.crash - end.to raise_exception(ExampleCrash) - - sleep 0.1 # hax to prevent a race between exit handling and the next call - chuck.should be_subordinate_lambasted - end - - it "unlinks from a dead linked actor" do - chuck = supervisor_class.new "Chuck Lorre" - chuck.link @charlie - - expect do - @charlie.crash - end.to raise_exception(ExampleCrash) - - sleep 0.1 # hax to prevent a race between exit handling and the next call - chuck.links.count.should be(0) - end - end - - context :signaling do - before do - @signaler = Class.new do - include included_module - task_class task_klass - - def initialize - @waiting = false - @signaled = false - end - - def wait_for_signal - raise "already signaled" if @signaled - - @waiting = true - value = wait :ponycopter - - @waiting = false - @signaled = true - value - end - - def send_signal(value) - signal :ponycopter, value - end - - def waiting?; @waiting end - def signaled?; @signaled end - end - end - - it "allows methods within the same object to signal each other" do - obj = @signaler.new - obj.should_not be_signaled - - obj.async.wait_for_signal - obj.should_not be_signaled - obj.should be_waiting - - obj.send_signal :foobar - obj.should be_signaled - obj.should_not be_waiting - end - - it "sends values along with signals" do - obj = @signaler.new - obj.should_not be_signaled - - future = obj.future(:wait_for_signal) - - obj.should be_waiting - obj.should_not be_signaled - - obj.send_signal(:foobar).should be_true - future.value.should be(:foobar) - end - end - - context :exclusive do - subject do - Class.new do - include included_module - task_class task_klass - - attr_reader :tasks - - def initialize - @tasks = [] - end - - def log_task(task) - @tasks << task - end - - def exclusive_with_block_log_task(task) - exclusive do - sleep Celluloid::TIMER_QUANTUM - log_task(task) - end - end - - def exclusive_log_task(task) - sleep Celluloid::TIMER_QUANTUM - log_task(task) - end - exclusive :exclusive_log_task - - def check_not_exclusive - Celluloid.exclusive? - end - - def check_exclusive - exclusive { Celluloid.exclusive? } - end - - def nested_exclusive_example - exclusive { exclusive { nil }; Celluloid.exclusive? } - end - end.new - end - - it "executes methods in the proper order with block form" do - subject.async.exclusive_with_block_log_task(:one) - subject.async.log_task(:two) - sleep Celluloid::TIMER_QUANTUM * 2 - subject.tasks.should eq([:one, :two]) - end - - it "executes methods in the proper order with a class-level annotation" do - subject.async.exclusive_log_task :one - subject.async.log_task :two - sleep Celluloid::TIMER_QUANTUM * 2 - subject.tasks.should eq([:one, :two]) - end - - it "knows when it's in exclusive mode" do - subject.check_not_exclusive.should be_false - subject.check_exclusive.should be_true - end - - it "remains in exclusive mode inside nested blocks" do - subject.nested_exclusive_example.should be_true - end - end - - context "exclusive classes" do - subject do - Class.new do - include included_module - task_class task_klass - exclusive - - attr_reader :tasks - - def initialize - @tasks = [] - end - - def eat_donuts - sleep Celluloid::TIMER_QUANTUM - @tasks << 'donuts' - end - - def drink_coffee - @tasks << 'coffee' - end - end - end - - it "executes two methods in an exclusive order" do - actor = subject.new - actor.async.eat_donuts - actor.async.drink_coffee - sleep Celluloid::TIMER_QUANTUM * 2 - actor.tasks.should eq(['donuts', 'coffee']) - end - end - - context :receiving do - before do - @receiver = Class.new do - include included_module - task_class task_klass - execute_block_on_receiver :signal_myself - - def signal_myself(obj, &block) - current_actor.mailbox << obj - receive(&block) - end - end - end - - let(:receiver) { @receiver.new } - let(:message) { Object.new } - - it "allows unconditional receive" do - receiver.signal_myself(message).should eq(message) - end - - it "allows arbitrary selective receive" do - received_obj = receiver.signal_myself(message) { |o| o == message } - received_obj.should eq(message) - end - - it "times out after the given interval", :pending => ENV['CI'] do - interval = 0.1 - started_at = Time.now - - receiver.receive(interval) { false }.should be_nil - (Time.now - started_at).should be_within(Celluloid::TIMER_QUANTUM).of interval - end - end - - context :timers do - before do - @klass = Class.new do - include included_module - task_class task_klass - - def initialize - @sleeping = false - @fired = false - end - - def do_sleep(n) - @sleeping = true - sleep n - @sleeping = false - end - - def sleeping?; @sleeping end - - def fire_after(n) - after(n) { @fired = true } - end - - def fire_every(n) - @fired = 0 - every(n) { @fired += 1 } - end - - def fired?; !!@fired end - def fired; @fired end - end - end - - it "suspends execution of a method (but not the actor) for a given time" do - actor = @klass.new - - # Sleep long enough to ensure we're actually seeing behavior when asleep - # but not so long as to delay the test suite unnecessarily - interval = Celluloid::TIMER_QUANTUM * 10 - started_at = Time.now - - future = actor.future(:do_sleep, interval) - sleep(interval / 2) # wonky! :/ - actor.should be_sleeping - - future.value - (Time.now - started_at).should be_within(Celluloid::TIMER_QUANTUM).of interval - end - - it "schedules timers which fire in the future" do - actor = @klass.new - - interval = Celluloid::TIMER_QUANTUM * 10 - - actor.fire_after(interval) - actor.should_not be_fired - - sleep(interval + Celluloid::TIMER_QUANTUM) # wonky! #/ - actor.should be_fired - end - - it "schedules recurring timers which fire in the future" do - actor = @klass.new - - interval = Celluloid::TIMER_QUANTUM * 10 - - actor.fire_every(interval) - actor.fired.should be_zero - - sleep(interval + Celluloid::TIMER_QUANTUM) # wonky! #/ - actor.fired.should be 1 - - 2.times { sleep(interval + Celluloid::TIMER_QUANTUM) } # wonky! #/ - actor.fired.should be 3 - end - - it "cancels timers before they fire" do - actor = @klass.new - - interval = Celluloid::TIMER_QUANTUM * 10 - - timer = actor.fire_after(interval) - actor.should_not be_fired - timer.cancel - - sleep(interval + Celluloid::TIMER_QUANTUM) # wonky! #/ - actor.should_not be_fired - end - - it "allows delays from outside the actor" do - actor = @klass.new - - interval = Celluloid::TIMER_QUANTUM * 10 - fired = false - - actor.after(interval) do - fired = true - end - fired.should be_false - - sleep(interval + Celluloid::TIMER_QUANTUM) # wonky! #/ - fired.should be_true - end - end - - context :tasks do - before do - @klass = Class.new do - include included_module - task_class task_klass - attr_reader :blocker - - def initialize - @blocker = Blocker.new - end - - def blocking_call - @blocker.block - end - end - - class Blocker - include Celluloid - - def block - wait :unblock - end - - def unblock - signal :unblock - end - end - end - - it "knows which tasks are waiting on calls to other actors" do - actor = @klass.new - - tasks = actor.tasks - tasks.size.should be 1 - - actor.future(:blocking_call) - sleep 0.1 # hax! waiting for ^^^ call to actually start - - tasks = actor.tasks - tasks.size.should be 2 - - blocking_task = tasks.find { |t| t.status != :running } - blocking_task.should be_a task_klass - blocking_task.status.should be :callwait - - actor.blocker.unblock - sleep 0.1 # hax again :( - actor.tasks.size.should be 1 - end - end - - context :mailbox_class do - class ExampleMailbox < Celluloid::Mailbox; end - - subject do - Class.new do - include included_module - task_class task_klass - mailbox_class ExampleMailbox - end - end - - it "uses user-specified mailboxes" do - subject.new.mailbox.should be_a ExampleMailbox - end - - it "retains custom mailboxes when subclassed" do - subclass = Class.new(subject) - subclass.new.mailbox.should be_a ExampleMailbox - end - end - - context :mailbox_size do - subject do - Class.new do - include included_module - task_class task_klass - mailbox_size 100 - end - end - - it "configures the mailbox limit" do - subject.new.mailbox.max_size.should == 100 - end - end - - context :proxy_class do - class ExampleProxy < Celluloid::CellProxy - def subclass_proxy? - true - end - end - - subject do - Class.new do - include included_module - task_class task_klass - proxy_class ExampleProxy - end - end - - it "uses user-specified proxy" do - subject.new.should be_subclass_proxy - end - - it "retains custom proxy when subclassed" do - subclass = Class.new(subject) - subclass.new.should be_subclass_proxy - end - end - - context :task_class do - class ExampleTask < Celluloid::TaskFiber; end - - subject do - Class.new do - include included_module - task_class ExampleTask - end - end - - it "overrides the task class" do - subject.new.tasks.first.should be_a ExampleTask - end - - it "retains custom task classes when subclassed" do - subclass = Class.new(subject) - subclass.new.tasks.first.should be_a ExampleTask - end - end - - context :timeouts do - let :actor_class do - Class.new do - include included_module - - def name - sleep 0.5 - :foo - end - - def ask_name_with_timeout(other, duration) - timeout(duration) { other.name } - end - end - end - - it "allows timing out tasks, raising Celluloid::Task::TimeoutError" do - a1 = actor_class.new - a2 = actor_class.new - - expect { a1.ask_name_with_timeout a2, 0.3 }.to raise_error(Celluloid::Task::TimeoutError) - end - - it "does not raise when it completes in time" do - a1 = actor_class.new - a2 = actor_class.new - - a1.ask_name_with_timeout(a2, 0.6).should == :foo - end - end - - context "raw message sends" do - it "logs on unhandled messages" do - Celluloid.logger.should_receive(:debug).with("Discarded message (unhandled): first") - - actor = actor_class.new "Irma Gladden" - actor.mailbox << :first - sleep Celluloid::TIMER_QUANTUM - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/rspec/example_actor_class.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/rspec/example_actor_class.rb deleted file mode 100644 index d8450a2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/rspec/example_actor_class.rb +++ /dev/null @@ -1,109 +0,0 @@ -module ExampleActorClass - def self.create(included_module, task_klass) - Class.new do - include included_module - task_class task_klass - attr_reader :name - finalizer :my_finalizer - execute_block_on_receiver :run_on_receiver - - def initialize(name) - @name = name - @delegate = [:bar] - end - - def sleepy(duration) - sleep duration - end - - def change_name(new_name) - @name = new_name - end - - def change_name_async(new_name) - async.change_name new_name - end - - def greet - "Hi, I'm #{@name}" - end - - def actor? - Celluloid.actor? - end - - def run(*args) - yield(*args) - end - - def run_on_receiver(*args) - yield(*args) - end - - def crash - raise ExampleCrash, "the spec purposely crashed me :(" - end - - def crash_with_abort(reason, foo = nil) - example_crash = ExampleCrash.new(reason) - example_crash.foo = foo - abort example_crash - end - - def crash_with_abort_raw(reason) - abort reason - end - - def internal_hello - external_hello - end - - def external_hello - "Hello" - end - - def inspect_thunk - inspect - end - - def send(string) - string.reverse - end - - def shutdown - terminate - end - - def method_missing(method_name, *args, &block) - if delegates?(method_name) - @delegate.send method_name, *args, &block - else - super - end - end - - def respond_to?(method_name, include_private = false) - super || delegates?(method_name) - end - - def call_private - async.zomg_private - end - - def zomg_private - @private_called = true - end - private :zomg_private - attr_reader :private_called - - def my_finalizer - end - - private - - def delegates?(method_name) - @delegate.respond_to?(method_name) - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/rspec/mailbox_examples.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/rspec/mailbox_examples.rb deleted file mode 100644 index d8fd193..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/rspec/mailbox_examples.rb +++ /dev/null @@ -1,84 +0,0 @@ -shared_context "a Celluloid Mailbox" do - after do - Celluloid.logger.stub(:debug) - subject.shutdown if subject.alive? - end - - it "receives messages" do - message = :ohai - - subject << message - subject.receive.should == message - end - - it "prioritizes system events over other messages" do - subject << :dummy1 - subject << :dummy2 - - subject << Celluloid::SystemEvent.new - subject.receive.should be_a(Celluloid::SystemEvent) - end - - it "selectively receives messages with a block" do - class Foo; end - class Bar; end - class Baz; end - - foo, bar, baz = Foo.new, Bar.new, Baz.new - - subject << baz - subject << foo - subject << bar - - subject.receive { |msg| msg.is_a? Foo }.should eq(foo) - subject.receive { |msg| msg.is_a? Bar }.should eq(bar) - subject.receive.should eq(baz) - end - - it "waits for a given timeout interval" do - interval = 0.1 - started_at = Time.now - - expect do - subject.receive(interval) { false } - end.to raise_exception(Celluloid::TimeoutError) - - (Time.now - started_at).should be_within(Celluloid::TIMER_QUANTUM).of interval - end - - it "has a size" do - subject.should respond_to(:size) - subject.size.should be_zero - subject << :foo - subject << :foo - subject.should have(2).entries - end - - it "discards messages received when when full" do - subject.max_size = 2 - subject << :first - subject << :second - subject << :third - subject.to_a.should =~ [:first, :second] - end - - it "logs discarded messages" do - Celluloid.logger.should_receive(:debug).with("Discarded message (mailbox is dead): third") - - subject.max_size = 2 - subject << :first - subject << :second - subject << :third - end - - it "discard messages when dead" do - Celluloid.logger.should_receive(:debug).with("Discarded message (mailbox is dead): first") - Celluloid.logger.should_receive(:debug).with("Discarded message (mailbox is dead): second") - Celluloid.logger.should_receive(:debug).with("Discarded message (mailbox is dead): third") - - subject << :first - subject << :second - subject.shutdown - subject << :third - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/rspec/task_examples.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/rspec/task_examples.rb deleted file mode 100644 index 23dbbd7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/rspec/task_examples.rb +++ /dev/null @@ -1,49 +0,0 @@ -class MockActor - attr_reader :tasks - - def initialize - @tasks = [] - end - - def setup_thread - end -end - -shared_context "a Celluloid Task" do |task_class| - let(:task_type) { :foobar } - let(:suspend_state) { :doing_something } - let(:actor) { MockActor.new } - - subject { task_class.new(task_type, {}) { Celluloid::Task.suspend(suspend_state) } } - - before :each do - Thread.current[:celluloid_actor_system] = Celluloid.actor_system - Thread.current[:celluloid_actor] = actor - end - - after :each do - Thread.current[:celluloid_actor] = nil - Thread.current[:celluloid_actor_system] = nil - end - - it "begins with status :new" do - subject.status.should be :new - end - - it "resumes" do - subject.should be_running - subject.resume - subject.status.should eq(suspend_state) - subject.resume - subject.should_not be_running - end - - it "raises exceptions outside" do - task = task_class.new(task_type, {}) do - raise "failure" - end - expect do - task.resume - end.to raise_exception("failure") - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/signals.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/signals.rb deleted file mode 100644 index 09bb0ce..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/signals.rb +++ /dev/null @@ -1,23 +0,0 @@ -module Celluloid - # Event signaling between methods of the same object - class Signals - def initialize - @conditions = {} - end - - # Wait for the given signal and return the associated value - def wait(name) - raise "cannot wait for signals while exclusive" if Celluloid.exclusive? - - @conditions[name] ||= Condition.new - @conditions[name].wait - end - - # Send a signal to all method calls waiting for the given name - def broadcast(name, value = nil) - if condition = @conditions.delete(name) - condition.broadcast(value) - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/stack_dump.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/stack_dump.rb deleted file mode 100644 index 5c9e599..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/stack_dump.rb +++ /dev/null @@ -1,133 +0,0 @@ -module Celluloid - class StackDump - module DisplayBacktrace - def display_backtrace(backtrace, output, indent = nil) - backtrace ||= ["EMPTY BACKTRACE"] - backtrace.each do |line| - output << indent if indent - output << "\t" << line << "\n" - end - output << "\n\n" - end - end - - class TaskState < Struct.new(:task_class, :type, :meta, :status, :backtrace) - end - - class ActorState - include DisplayBacktrace - attr_accessor :name, :id, :cell - attr_accessor :status, :tasks - attr_accessor :backtrace - - def dump - string = "" - string << "Celluloid::Actor 0x#{id.to_s(16)}" - string << " [#{name}]" if name - string << "\n" - - if cell - string << cell.dump - string << "\n" - end - - if status == :idle - string << "State: Idle (waiting for messages)\n" - display_backtrace backtrace, string - else - string << "State: Running (executing tasks)\n" - display_backtrace backtrace, string - string << "\tTasks:\n" - - tasks.each_with_index do |task, i| - string << "\t #{i+1}) #{task.task_class}[#{task.type}]: #{task.status}\n" - string << "\t #{task.meta.inspect}\n" - display_backtrace task.backtrace, string, "\t" - end - end - - string - end - end - - class CellState < Struct.new(:subject_id, :subject_class) - def dump - "Celluloid::Cell 0x#{subject_id.to_s(16)}: #{subject_class}" - end - end - - class ThreadState < Struct.new(:thread_id, :backtrace, :role) - include DisplayBacktrace - - def dump - string = "" - string << "Thread 0x#{thread_id.to_s(16)} (#{role}):\n" - display_backtrace backtrace, string - string - end - end - - attr_accessor :actors, :threads - - def initialize(internal_pool) - @internal_pool = internal_pool - - @actors = [] - @threads = [] - - snapshot - end - - def snapshot - @internal_pool.each do |thread| - if thread.role == :actor - @actors << snapshot_actor(thread.actor) if thread.actor - else - @threads << snapshot_thread(thread) - end - end - end - - def snapshot_actor(actor) - state = ActorState.new - state.id = actor.object_id - - # TODO: delegate to the behavior - if actor.behavior.is_a?(Cell) - state.cell = snapshot_cell(actor.behavior) - end - - tasks = actor.tasks - if tasks.empty? - state.status = :idle - else - state.status = :running - state.tasks = tasks.to_a.map { |t| TaskState.new(t.class, t.type, t.meta, t.status, t.backtrace) } - end - - state.backtrace = actor.thread.backtrace if actor.thread - state - end - - def snapshot_cell(behavior) - state = CellState.new - state.subject_id = behavior.subject.object_id - state.subject_class = behavior.subject.class - state - end - - def snapshot_thread(thread) - ThreadState.new(thread.object_id, thread.backtrace, thread.role) - end - - def print(output = STDERR) - @actors.each do |actor| - output.print actor.dump - end - - @threads.each do |thread| - output.print thread.dump - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/supervision_group.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/supervision_group.rb deleted file mode 100644 index 1171da3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/supervision_group.rb +++ /dev/null @@ -1,169 +0,0 @@ -module Celluloid - # Supervise collections of actors as a group - class SupervisionGroup - include Celluloid - trap_exit :restart_actor - - class << self - - # Actors or sub-applications to be supervised - def blocks - @blocks ||= [] - end - - # Start this application (and watch it with a supervisor) - def run!(registry = nil) - group = new(registry) do |_group| - blocks.each do |block| - block.call(_group) - end - end - group - end - - # Run the application in the foreground with a simple watchdog - def run(registry = nil) - loop do - supervisor = run!(registry) - - # Take five, toplevel supervisor - sleep 5 while supervisor.alive? - - Logger.error "!!! Celluloid::SupervisionGroup #{self} crashed. Restarting..." - end - end - - # Register an actor class or a sub-group to be launched and supervised - # Available options are: - # - # * as: register this application in the Celluloid::Actor[] directory - # * args: start the actor with the given arguments - def supervise(klass, options = {}) - blocks << lambda do |group| - group.add klass, options - end - end - - # Register a pool of actors to be launched on group startup - # Available options are: - # - # * as: register this application in the Celluloid::Actor[] directory - # * args: start the actor pool with the given arguments - def pool(klass, options = {}) - blocks << lambda do |group| - group.pool klass, options - end - end - end - - finalizer :finalize - - # Start the group - def initialize(registry = nil) - @members = [] - @registry = registry || Celluloid.actor_system.registry - - yield current_actor if block_given? - end - - execute_block_on_receiver :initialize, :supervise, :supervise_as - - def supervise(klass, *args, &block) - add(klass, :args => args, :block => block) - end - - def supervise_as(name, klass, *args, &block) - add(klass, :args => args, :block => block, :as => name) - end - - def pool(klass, options = {}) - options[:method] = 'pool_link' - add(klass, options) - end - - def add(klass, options) - member = Member.new(@registry, klass, options) - @members << member - member.actor - end - - def actors - @members.map(&:actor) - end - - def [](actor_name) - @registry[actor_name] - end - - # Restart a crashed actor - def restart_actor(actor, reason) - member = @members.find do |_member| - _member.actor == actor - end - raise "a group member went missing. This shouldn't be!" unless member - - if reason - member.restart - else - member.cleanup - @members.delete(member) - end - end - - # A member of the group - class Member - def initialize(registry, klass, options = {}) - @registry = registry - @klass = klass - - # Stringify keys :/ - options = options.inject({}) { |h,(k,v)| h[k.to_s] = v; h } - - @name = options['as'] - @block = options['block'] - @args = options['args'] ? Array(options['args']) : [] - @method = options['method'] || 'new_link' - @pool = @method == 'pool_link' - @pool_size = options['size'] if @pool - - start - end - attr_reader :name, :actor - - def start - # when it is a pool, then we don't splat the args - # and we need to extract the pool size if set - if @pool - options = {:args => @args} - options[:size] = @pool_size if @pool_size - @args = [options] - end - @actor = @klass.send(@method, *@args, &@block) - @registry[@name] = @actor if @name - end - - def restart - @actor = nil - cleanup - - start - end - - def terminate - cleanup - @actor.terminate if @actor - rescue DeadActorError - end - - def cleanup - @registry.delete(@name) if @name - end - end - - private - - def finalize - @members.reverse_each(&:terminate) if @members - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/supervisor.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/supervisor.rb deleted file mode 100644 index 852ca76..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/supervisor.rb +++ /dev/null @@ -1,22 +0,0 @@ -module Celluloid - # Supervisors are actors that watch over other actors and restart them if - # they crash - class Supervisor - class << self - # Define the root of the supervision tree - attr_accessor :root - - def supervise(klass, *args, &block) - SupervisionGroup.new do |group| - group.supervise klass, *args, &block - end - end - - def supervise_as(name, klass, *args, &block) - SupervisionGroup.new do |group| - group.supervise_as name, klass, *args, &block - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/system_events.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/system_events.rb deleted file mode 100644 index 954f915..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/system_events.rb +++ /dev/null @@ -1,66 +0,0 @@ -module Celluloid - # High-priority internal system events - class SystemEvent; end - - # Request to link with another actor - class LinkingRequest < SystemEvent - attr_reader :actor, :type - - def initialize(actor, type) - @actor, @type = actor, type.to_sym - raise ArgumentError, "type must be link or unlink" unless [:link, :unlink].include?(@type) - end - - def process(links) - case type - when :link then links << actor - when :unlink then links.delete actor - end - - actor.mailbox << LinkingResponse.new(Actor.current, type) - end - end - - # Response to a link request - class LinkingResponse - attr_reader :actor, :type - - def initialize(actor, type) - @actor, @type = actor, type.to_sym - raise ArgumentError, "type must be link or unlink" unless [:link, :unlink].include?(@type) - end - end - - # An actor has exited for the given reason - class ExitEvent < SystemEvent - attr_reader :actor, :reason - - def initialize(actor, reason = nil) - @actor, @reason = actor, reason - end - end - - # Name an actor at the time it's registered - class NamingRequest < SystemEvent - attr_reader :name - - def initialize(name) - @name = name - end - end - - # Request for an actor to terminate - class TerminationRequest < SystemEvent; end - - # Signal a condition - class SignalConditionRequest < SystemEvent - def initialize(task, value) - @task, @value = task, value - end - attr_reader :task, :value - - def call - @task.resume(@value) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/task_set.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/task_set.rb deleted file mode 100644 index 7bfe273..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/task_set.rb +++ /dev/null @@ -1,49 +0,0 @@ -require 'set' -require 'forwardable' - -module Celluloid - if defined? JRUBY_VERSION - require 'jruby/synchronized' - - class TaskSet - extend Forwardable - include JRuby::Synchronized - - def_delegators :@tasks, :<<, :delete, :first, :empty?, :to_a - - def initialize - @tasks = Set.new - end - end - elsif defined? Rubinius - class TaskSet - def initialize - @tasks = Set.new - end - - def <<(task) - Rubinius.synchronize(self) { @tasks << task } - end - - def delete(task) - Rubinius.synchronize(self) { @tasks.delete task } - end - - def first - Rubinius.synchronize(self) { @tasks.first } - end - - def empty? - Rubinius.synchronize(self) { @tasks.empty? } - end - - def to_a - Rubinius.synchronize(self) { @tasks.to_a } - end - end - else - # Assume we're on MRI, where we have the GIL. But what about IronRuby? - # Or MacRuby. Do people care? This will break Celluloid::StackDumps - TaskSet = Set - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/tasks.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/tasks.rb deleted file mode 100644 index dc2e459..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/tasks.rb +++ /dev/null @@ -1,176 +0,0 @@ -module Celluloid - # Asked to do task-related things outside a task - class NotTaskError < Celluloid::Error; end - - # Trying to resume a dead task - class DeadTaskError < Celluloid::Error; end - - # Errors which should be resumed automatically - class ResumableError < Celluloid::Error; end - - # Tasks are interruptable/resumable execution contexts used to run methods - class Task - class TerminatedError < ResumableError; end # kill a running task after terminate - - class TimeoutError < ResumableError; end # kill a running task after timeout - - # Obtain the current task - def self.current - Thread.current[:celluloid_task] or raise NotTaskError, "not within a task context" - end - - # Suspend the running task, deferring to the scheduler - def self.suspend(status) - Task.current.suspend(status) - end - - attr_reader :type, :meta, :status - attr_accessor :chain_id, :guard_warnings - - # Create a new task - def initialize(type, meta) - @type = type - @meta = meta - @status = :new - - @exclusive = false - @dangerous_suspend = @meta ? @meta.delete(:dangerous_suspend) : false - @guard_warnings = false - - actor = Thread.current[:celluloid_actor] - @chain_id = CallChain.current_id - - raise NotActorError, "can't create tasks outside of actors" unless actor - guard "can't create tasks inside of tasks" if Thread.current[:celluloid_task] - - create do - begin - @status = :running - actor.setup_thread - - name_current_thread thread_metadata - - Thread.current[:celluloid_task] = self - CallChain.current_id = @chain_id - - actor.tasks << self - yield - rescue Task::TerminatedError - # Task was explicitly terminated - ensure - name_current_thread nil - @status = :dead - actor.tasks.delete self - end - end - end - - def create(&block) - raise "Implement #{self.class}#create" - end - - # Suspend the current task, changing the status to the given argument - def suspend(status) - raise "Cannot suspend while in exclusive mode" if exclusive? - raise "Cannot suspend a task from outside of itself" unless Task.current == self - - @status = status - - if $CELLULOID_DEBUG && @dangerous_suspend - Logger.with_backtrace(caller[2...8]) do |logger| - logger.warn "Dangerously suspending task: type=#{@type.inspect}, meta=#{@meta.inspect}, status=#{@status.inspect}" - end - end - - value = signal - - @status = :running - raise value if value.is_a?(Celluloid::ResumableError) - - value - end - - # Resume a suspended task, giving it a value to return if needed - def resume(value = nil) - guard "Cannot resume a task from inside of a task" if Thread.current[:celluloid_task] - deliver(value) - nil - end - - # Execute a code block in exclusive mode. - def exclusive - if @exclusive - yield - else - begin - @exclusive = true - yield - ensure - @exclusive = false - end - end - end - - # Terminate this task - def terminate - raise "Cannot terminate an exclusive task" if exclusive? - - if running? - Logger.with_backtrace(backtrace) do |logger| - logger.warn "Terminating task: type=#{@type.inspect}, meta=#{@meta.inspect}, status=#{@status.inspect}" - end - exception = Task::TerminatedError.new("task was terminated") - exception.set_backtrace(caller) - resume exception - else - raise DeadTaskError, "task is already dead" - end - end - - # Is this task running in exclusive mode? - def exclusive? - @exclusive - end - - def backtrace - end - - # Is the current task still running? - def running?; @status != :dead; end - - # Nicer string inspect for tasks - def inspect - "#<#{self.class}:0x#{object_id.to_s(16)} @type=#{@type.inspect}, @meta=#{@meta.inspect}, @status=#{@status.inspect}>" - end - - def guard(message) - if @guard_warnings - Logger.warn message if $CELLULOID_DEBUG - else - raise message if $CELLULOID_DEBUG - end - end - - private - - def name_current_thread(new_name) - return unless RUBY_PLATFORM == "java" - if new_name.nil? - new_name = Thread.current[:celluloid_original_thread_name] - Thread.current[:celluloid_original_thread_name] = nil - else - Thread.current[:celluloid_original_thread_name] = Thread.current.to_java.getNativeThread.get_name - end - Thread.current.to_java.getNativeThread.set_name(new_name) - end - - def thread_metadata - method = @meta && @meta[:method_name] || "" - klass = Thread.current[:celluloid_actor] && Thread.current[:celluloid_actor].behavior.subject.bare_object.class || "" - format("[Celluloid] %s#%s", klass, method) - end - end -end - -require 'celluloid/tasks/task_fiber' -require 'celluloid/tasks/task_thread' diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/tasks/task_fiber.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/tasks/task_fiber.rb deleted file mode 100644 index 935763a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/tasks/task_fiber.rb +++ /dev/null @@ -1,43 +0,0 @@ -module Celluloid - class FiberStackError < Celluloid::Error; end - - # Tasks with a Fiber backend - class TaskFiber < Task - - def create - queue = Thread.current[:celluloid_queue] - actor_system = Thread.current[:celluloid_actor_system] - @fiber = Fiber.new do - # FIXME: cannot use the writer as specs run inside normal Threads - Thread.current[:celluloid_role] = :actor - Thread.current[:celluloid_queue] = queue - Thread.current[:celluloid_actor_system] = actor_system - yield - end - end - - def signal - Fiber.yield - end - - # Resume a suspended task, giving it a value to return if needed - def deliver(value) - @fiber.resume value - rescue SystemStackError => ex - raise FiberStackError, "#{ex} (please see https://github.com/celluloid/celluloid/wiki/Fiber-stack-errors)" - rescue FiberError => ex - raise DeadTaskError, "cannot resume a dead task (#{ex})" - end - - # Terminate this task - def terminate - super - rescue FiberError - # If we're getting this the task should already be dead - end - - def backtrace - ["#{self.class} backtrace unavailable. Please try `Celluloid.task_class = Celluloid::TaskThread` if you need backtraces here."] - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/tasks/task_thread.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/tasks/task_thread.rb deleted file mode 100644 index 8ea9196..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/tasks/task_thread.rb +++ /dev/null @@ -1,53 +0,0 @@ -module Celluloid - # Tasks with a Thread backend - class TaskThread < Task - # Run the given block within a task - def initialize(type, meta) - @resume_queue = Queue.new - @exception_queue = Queue.new - @yield_mutex = Mutex.new - @yield_cond = ConditionVariable.new - - super - end - - def create - # TODO: move this to ActorSystem#get_thread (ThreadHandle inside InternalPool) - @thread = ThreadHandle.new(Thread.current[:celluloid_actor_system], :task) do - begin - ex = @resume_queue.pop - raise ex if ex.is_a?(Task::TerminatedError) - - yield - rescue Exception => ex - @exception_queue << ex - ensure - @yield_cond.signal - end - end - end - - def signal - @yield_cond.signal - @resume_queue.pop - end - - def deliver(value) - raise DeadTaskError, "cannot resume a dead task" unless @thread.alive? - - @yield_mutex.synchronize do - @resume_queue.push(value) - @yield_cond.wait(@yield_mutex) - while @exception_queue.size > 0 - raise @exception_queue.pop - end - end - rescue ThreadError - raise DeadTaskError, "cannot resume a dead task" - end - - def backtrace - @thread.backtrace - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/test.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/test.rb deleted file mode 100644 index bd65e88..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/test.rb +++ /dev/null @@ -1,3 +0,0 @@ -$CELLULOID_TEST = true - -require 'celluloid' diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/thread.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/thread.rb deleted file mode 100644 index 9392e6b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/thread.rb +++ /dev/null @@ -1,40 +0,0 @@ -require 'celluloid/fiber' - -module Celluloid - class Thread < ::Thread - def celluloid? - true - end - - attr_accessor :busy - - # Obtain the role of this thread - def role - self[:celluloid_role] - end - - def role=(role) - self[:celluloid_role] = role - end - - # Obtain the Celluloid::Actor object for this thread - def actor - self[:celluloid_actor] - end - - # Obtain the Celluloid task object for this thread - def task - self[:celluloid_task] - end - - # Obtain the Celluloid mailbox for this thread - def mailbox - self[:celluloid_mailbox] - end - - # Obtain the call chain ID for this thread - def call_chain_id - self[:celluloid_chain_id] - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/thread_handle.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/thread_handle.rb deleted file mode 100644 index 28003a0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/thread_handle.rb +++ /dev/null @@ -1,50 +0,0 @@ -module Celluloid - # An abstraction around threads from the InternalPool which ensures we don't - # accidentally do things to threads which have been returned to the pool, - # such as, say, killing them - class ThreadHandle - def initialize(actor_system, role = nil) - @mutex = Mutex.new - @join = ConditionVariable.new - - @thread = actor_system.get_thread do - Thread.current.role = role - begin - yield - ensure - @mutex.synchronize do - @thread = nil - @join.broadcast - end - end - end - end - - # Is the thread running? - def alive? - @mutex.synchronize { @thread.alive? if @thread } - end - - # Forcibly kill the thread - def kill - !!@mutex.synchronize { @thread.kill if @thread } - self - end - - # Join to a running thread, blocking until it terminates - def join(limit = nil) - raise ThreadError, "Target thread must not be current thread" if @thread == Thread.current - @mutex.synchronize { @join.wait(@mutex, limit) if @thread } - self - end - - # Obtain the backtrace for this thread - def backtrace - @thread.backtrace - rescue NoMethodError - # undefined method `backtrace' for nil:NilClass - # Swallow this in case this ThreadHandle was terminated and @thread was - # set to nil - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/uuid.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/uuid.rb deleted file mode 100644 index b5d64c6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/lib/celluloid/uuid.rb +++ /dev/null @@ -1,38 +0,0 @@ -require 'securerandom' - -module Celluloid - # Clearly Ruby doesn't have enough UUID libraries - # This one aims to be fast and simple with good support for multiple threads - # If there's a better UUID library I can use with similar multithreaded - # performance, I certainly wouldn't mind using a gem for this! - module UUID - values = SecureRandom.hex(9).match(/(.{8})(.{4})(.{3})(.{3})/) - PREFIX = "#{values[1]}-#{values[2]}-4#{values[3]}-8#{values[4]}".freeze - BLOCK_SIZE = 0x10000 - - @counter = 0 - @counter_mutex = Mutex.new - - def self.generate - thread = Thread.current - - unless thread.uuid_limit - @counter_mutex.synchronize do - block_base = @counter - @counter += BLOCK_SIZE - thread.uuid_counter = block_base - thread.uuid_limit = @counter - 1 - end - end - - counter = thread.uuid_counter - if thread.uuid_counter >= thread.uuid_limit - thread.uuid_counter = thread.uuid_limit = nil - else - thread.uuid_counter += 1 - end - - "#{PREFIX}-#{sprintf("%012x", counter)}".freeze - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/actor_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/actor_spec.rb deleted file mode 100644 index 5ae6c3f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/actor_spec.rb +++ /dev/null @@ -1,5 +0,0 @@ -require 'spec_helper' - -describe Celluloid, actor_system: :global do - it_behaves_like "a Celluloid Actor", Celluloid -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/actor_system_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/actor_system_spec.rb deleted file mode 100644 index fffc559..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/actor_system_spec.rb +++ /dev/null @@ -1,69 +0,0 @@ -require 'spec_helper' - -describe Celluloid::ActorSystem do - class TestActor - include Celluloid - end - - it "supports non-global ActorSystem" do - subject.within do - Celluloid.actor_system.should == subject - end - end - - it "starts default actors" do - subject.start - - subject.registered.should == [:notifications_fanout, :default_incident_reporter] - end - - it "support getting threads" do - queue = Queue.new - thread = subject.get_thread do - Celluloid.actor_system.should == subject - queue << nil - end - queue.pop - end - - it "allows a stack dump" do - subject.stack_dump.should be_a(Celluloid::StackDump) - end - - it "returns named actors" do - subject.registered.should be_empty - - subject.within do - TestActor.supervise_as :test - end - - subject.registered.should == [:test] - end - - it "returns running actors" do - subject.running.should be_empty - - first = subject.within do - TestActor.new - end - - second = subject.within do - TestActor.new - end - - subject.running.should == [first, second] - end - - it "shuts down" do - subject.shutdown - - lambda { subject.get_thread }. - should raise_error("Thread pool is not running") - end - - it "warns nicely when no actor system is started" do - lambda { TestActor.new }. - should raise_error("Celluloid is not yet started; use Celluloid.boot") - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/block_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/block_spec.rb deleted file mode 100644 index fc6ac85..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/block_spec.rb +++ /dev/null @@ -1,54 +0,0 @@ -require 'spec_helper' - -describe "Blocks", actor_system: :global do - class MyBlockActor - include Celluloid - - def initialize(name) - @name = name - end - attr_reader :name - - def ask_for_something(other) - sender_actor = current_actor - $data << [:outside, @name, current_actor.name] - other.do_something_and_callback do |value| - $data << [:yielded, @name, current_actor.name] - $data << self.receive_result(:self) - $data << current_actor.receive_result(:current_actor) - $data << sender_actor.receive_result(:sender) - "somevalue" - end - end - - def do_something_and_callback - $data << [:something, @name, current_actor.name] - $data << yield(:foo) - end - - def receive_result(result) - [result, @name, current_actor.name] - end - end - - it "works" do - $data = [] - - a1 = MyBlockActor.new("one") - a2 = MyBlockActor.new("two") - - a1.ask_for_something a2 - - expected = [ - [:outside, "one", "one"], - [:something, "two", "two"], - [:yielded, "one", "one"], - [:self, "one", "one"], - [:current_actor, "one", "one"], - [:sender, "one", "one"], - "somevalue", - ] - - $data.should eq(expected) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/calls_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/calls_spec.rb deleted file mode 100644 index c7b8e14..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/calls_spec.rb +++ /dev/null @@ -1,42 +0,0 @@ -require 'spec_helper' - -describe Celluloid::SyncCall, actor_system: :global do - class CallExampleActor - include Celluloid - - def initialize(next_actor = nil) - @next = next_actor - end - - def actual_method; end - - def chained_call_ids - [call_chain_id, @next.call_chain_id] - end - end - - let(:actor) { CallExampleActor.new } - - it "aborts with NoMethodError when a nonexistent method is called" do - expect do - actor.the_method_that_wasnt_there - end.to raise_exception(NoMethodError) - - actor.should be_alive - end - - it "aborts with ArgumentError when a method is called with too many arguments" do - expect do - actor.actual_method("with too many arguments") - end.to raise_exception(ArgumentError) - - actor.should be_alive - end - - it "preserves call chains across synchronous calls" do - actor2 = CallExampleActor.new(actor) - - uuid, next_actor_uuid = actor2.chained_call_ids - uuid.should eq next_actor_uuid - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/condition_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/condition_spec.rb deleted file mode 100644 index 12ef65e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/condition_spec.rb +++ /dev/null @@ -1,76 +0,0 @@ -require 'spec_helper' - -describe Celluloid::Condition, actor_system: :global do - class ConditionExample - include Celluloid - - attr_reader :condition, :signaled_times - - def initialize - @condition = Condition.new - - @waiting = false - @signaled_times = 0 - end - - def signal_condition(condition, value) - condition.signal value - end - - def wait_for_condition(timeout = nil) - @waiting = true - begin - value = @condition.wait(timeout) - @signaled_times += 1 - ensure - @waiting = false - end - - value - end - - def waiting?; @waiting end - end - - let(:actor) { ConditionExample.new } - after { actor.terminate rescue nil } - - it "sends signals" do - 3.times { actor.async.wait_for_condition } - actor.signaled_times.should be_zero - - actor.condition.signal - actor.signaled_times.should be(1) - end - - it "broadcasts signals" do - 3.times { actor.async.wait_for_condition } - actor.signaled_times.should be_zero - - actor.condition.broadcast - actor.signaled_times.should be(3) - end - - it "sends values along with signals" do - future = actor.future(:wait_for_condition) - actor.condition.signal(:example_value) - future.value.should be(:example_value) - end - - it "supports waiting outside actors" do - condition = Celluloid::Condition.new - actor.async.signal_condition condition, :value - condition.wait.should eq(:value) - end - - it "times out inside normal Threads" do - condition = Celluloid::Condition.new - lambda { condition.wait(1) }. - should raise_error(Celluloid::ConditionError) - end - - it "times out inside Tasks" do - lambda { actor.wait_for_condition(1) }. - should raise_error(Celluloid::ConditionError) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/cpu_counter_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/cpu_counter_spec.rb deleted file mode 100644 index 4bb934e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/cpu_counter_spec.rb +++ /dev/null @@ -1,82 +0,0 @@ -require 'spec_helper' - -describe Celluloid::CPUCounter do - describe :cores do - subject { described_class.cores } - - let(:num_cores) { 1024 } - - before do - described_class.stub(:`) { fail 'backtick stub called' } - ::IO.stub(:open).and_raise('IO.open stub called!') - described_class.instance_variable_set('@cores', nil) - end - - after { ENV['NUMBER_OF_PROCESSORS'] = nil } - - context 'from valid env value' do - before { ENV['NUMBER_OF_PROCESSORS'] = num_cores.to_s } - it { should eq num_cores } - end - - context 'from invalid env value' do - before { ENV['NUMBER_OF_PROCESSORS'] = '' } - specify { expect { subject }.to raise_error(ArgumentError) } - end - - context 'with no env value' do - before { ENV['NUMBER_OF_PROCESSORS'] = nil } - - context 'when /sys/devices/system/cpu/present exists' do - before do - ::IO.should_receive(:read).with('/sys/devices/system/cpu/present') - .and_return("dunno-whatever-#{num_cores - 1}") - end - it { should eq num_cores } - end - - context 'when /sys/devices/system/cpu/present does NOT exist' do - before do - ::IO.should_receive(:read).with('/sys/devices/system/cpu/present') - .and_raise(Errno::ENOENT) - end - - context 'when /sys/devices/system/cpu/cpu* files exist' do - before do - cpu_entries = (1..num_cores).map { |n| "cpu#{n}" } - cpu_entries << 'non-cpu-entry-to-ignore' - Dir.should_receive(:[]).with('/sys/devices/system/cpu/cpu*') - .and_return(cpu_entries) - end - it { should eq num_cores } - end - - context 'when /sys/devices/system/cpu/cpu* files DO NOT exist' do - before do - Dir.should_receive(:[]).with('/sys/devices/system/cpu/cpu*') - .and_return([]) - end - - context 'when sysctl blows up' do - before { described_class.stub(:`).and_raise(Errno::EINTR) } - specify { expect { subject }.to raise_error } - end - - context 'when sysctl fails' do - before { described_class.stub(:`).and_return(`false`) } - it { should be nil } - end - - context 'when sysctl succeeds' do - before do - described_class.should_receive(:`).with('sysctl -n hw.ncpu') - .and_return(num_cores.to_s) - `true` - end - it { should eq num_cores } - end - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/evented_mailbox_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/evented_mailbox_spec.rb deleted file mode 100644 index 253175a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/evented_mailbox_spec.rb +++ /dev/null @@ -1,34 +0,0 @@ -require 'spec_helper' - -class TestEventedMailbox < Celluloid::EventedMailbox - class Reactor - def initialize - @condition = ConditionVariable.new - @mutex = Mutex.new - end - - def wakeup - @mutex.synchronize do - @condition.signal - end - end - - def run_once(timeout) - @mutex.synchronize do - @condition.wait(@mutex, timeout) - end - end - - def shutdown - end - end - - def initialize - super(Reactor) - end -end - -describe Celluloid::EventedMailbox do - subject { TestEventedMailbox.new } - it_behaves_like "a Celluloid Mailbox" -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/fsm_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/fsm_spec.rb deleted file mode 100644 index ea9cc81..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/fsm_spec.rb +++ /dev/null @@ -1,107 +0,0 @@ -require 'spec_helper' - -describe Celluloid::FSM, actor_system: :global do - before :all do - class TestMachine - include Celluloid::FSM - - def initialize - super - @fired = false - end - - state :callbacked do - @fired = true - end - - state :pre_done, :to => :done - state :another, :done - - def fired?; @fired end - end - - class DummyActor - include Celluloid - end - - class CustomDefaultMachine - include Celluloid::FSM - - default_state :foobar - end - end - - subject { TestMachine.new } - - it "starts in the default state" do - subject.state.should eq(TestMachine.default_state) - end - - it "transitions between states" do - subject.state.should_not be :done - subject.transition :done - subject.state.should be :done - end - - it "fires callbacks for states" do - subject.should_not be_fired - subject.transition :callbacked - subject.should be_fired - end - - it "allows custom default states" do - CustomDefaultMachine.new.state.should be :foobar - end - - it "supports constraints on valid state transitions" do - subject.transition :pre_done - expect { subject.transition :another }.to raise_exception ArgumentError - end - - it "transitions to states after a specified delay" do - interval = Celluloid::TIMER_QUANTUM * 10 - - subject.attach DummyActor.new - subject.transition :another - subject.transition :done, :delay => interval - - subject.state.should be :another - sleep interval + Celluloid::TIMER_QUANTUM - - subject.state.should be :done - end - - it "cancels delayed state transitions if another transition is made" do - interval = Celluloid::TIMER_QUANTUM * 10 - - subject.attach DummyActor.new - subject.transition :another - subject.transition :done, :delay => interval - - subject.state.should be :another - subject.transition :pre_done - sleep interval + Celluloid::TIMER_QUANTUM - - subject.state.should be :pre_done - end - - context "actor is not set" do - context "transition is delayed" do - it "raises an unattached error" do - expect { subject.transition :another, :delay => 100 } \ - .to raise_error(Celluloid::FSM::UnattachedError) - end - end - end - - context "transitioning to an invalid state" do - it "raises an argument error" do - expect { subject.transition :invalid_state }.to raise_error(ArgumentError) - end - - it "should not call transition! if the state is :default" do - subject.should_not_receive :transition! - subject.transition :default - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/future_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/future_spec.rb deleted file mode 100644 index 9201b80..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/future_spec.rb +++ /dev/null @@ -1,32 +0,0 @@ -require 'spec_helper' - -describe Celluloid::Future, actor_system: :global do - it "creates future objects that can be retrieved later" do - future = Celluloid::Future.new { 40 + 2 } - future.value.should == 42 - end - - it "passes arguments to future blocks" do - future = Celluloid::Future.new(40) { |n| n + 2 } - future.value.should == 42 - end - - it "reraises exceptions that occur when the value is retrieved" do - class ExampleError < StandardError; end - - future = Celluloid::Future.new { raise ExampleError, "oh noes crash!" } - expect { future.value }.to raise_exception(ExampleError) - end - - it "knows if it's got a value yet" do - future = Celluloid::Future.new { sleep Celluloid::TIMER_QUANTUM * 5 } - future.should_not be_ready - sleep Celluloid::TIMER_QUANTUM * 6 - future.should be_ready - end - - it "raises TimeoutError when the future times out" do - future = Celluloid::Future.new { sleep 2 } - expect { future.value(1) }.to raise_exception(Celluloid::TimeoutError) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/internal_pool_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/internal_pool_spec.rb deleted file mode 100644 index f372fcb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/internal_pool_spec.rb +++ /dev/null @@ -1,52 +0,0 @@ -require 'spec_helper' - -describe Celluloid::InternalPool do - it "gets threads from the pool" do - subject.get { sleep 1 }.should be_a Thread - end - - it "puts threads back into the pool" do - subject.idle_size.should be_zero - subject.busy_size.should be_zero - - queue = Queue.new - subject.get { queue.pop } - - subject.idle_size.should be_zero - subject.busy_size.should eq 1 - - queue << nil - sleep 0.01 # hax - - subject.idle_size.should eq 1 - subject.busy_size.should eq 0 - end - - it "cleans thread locals from old threads" do - thread = subject.get { Thread.current[:foo] = :bar } - - sleep 0.01 #hax - thread[:foo].should be_nil - end - - it "doesn't fail if a third-party thread is spawned" do - subject.idle_size.should be_zero - subject.busy_size.should be_zero - - subject.get { ::Thread.new { sleep 0.5 } }.should be_a(Celluloid::Thread) - - sleep 0.01 # hax - - subject.idle_size.should eq 1 - subject.busy_size.should eq 0 - end - - it "doesn't leak dead threads" do - subject.max_idle = 0 # Instruct the pool to immediately shut down the thread. - subject.get { true }.should be_a(Celluloid::Thread) - - sleep 0.01 # hax - - subject.to_a.should have(0).items - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/links_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/links_spec.rb deleted file mode 100644 index a67b828..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/links_spec.rb +++ /dev/null @@ -1,45 +0,0 @@ -require 'spec_helper' - -describe Celluloid::Links do - subject { Celluloid::Links.new } - - let(:mailbox_mock) do - Class.new(Array) do - attr_reader :address - def initialize address - @address = address - end - end - end - - let(:first_actor) do - Struct.new(:mailbox).new(mailbox_mock.new('foo123')) - end - - let(:second_actor) do - Struct.new(:mailbox).new(mailbox_mock.new('bar456')) - end - - it 'is Enumerable' do - subject.should be_an(Enumerable) - end - - it 'adds actors by their mailbox address' do - subject.include?(first_actor).should be_false - subject << first_actor - subject.include?(first_actor).should be_true - end - - it 'removes actors by their mailbox address' do - subject << first_actor - subject.include?(first_actor).should be_true - subject.delete first_actor - subject.include?(first_actor).should be_false - end - - it 'iterates over all actors' do - subject << first_actor - subject << second_actor - subject.inject([]) { |all, a| all << a }.should == [first_actor, second_actor] - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/logging/ring_buffer_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/logging/ring_buffer_spec.rb deleted file mode 100644 index d9efb15..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/logging/ring_buffer_spec.rb +++ /dev/null @@ -1,38 +0,0 @@ -require 'spec_helper' - -describe Celluloid::RingBuffer do - subject { Celluloid::RingBuffer.new(2) } - - it { should be_empty } - it { should_not be_full } - - it 'should push and shift' do - subject.push('foo') - subject.push('foo2') - subject.shift.should eq('foo') - subject.shift.should eq('foo2') - end - - it 'should push past the end' do - subject.push('foo') - subject.push('foo2') - subject.push('foo3') - subject.should be_full - end - - it 'should shift the most recent' do - (1..5).each { |i| subject.push(i) } - subject.shift.should be 4 - subject.shift.should be 5 - subject.shift.should be_nil - end - - it 'should return nil when shifting empty' do - subject.should be_empty - subject.shift.should be_nil - end - - it 'should be thread-safe' do - #TODO how to test? - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/mailbox_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/mailbox_spec.rb deleted file mode 100644 index 1b65779..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/mailbox_spec.rb +++ /dev/null @@ -1,5 +0,0 @@ -require 'spec_helper' - -describe Celluloid::Mailbox do - it_behaves_like "a Celluloid Mailbox" -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/notifications_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/notifications_spec.rb deleted file mode 100644 index df581a2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/notifications_spec.rb +++ /dev/null @@ -1,120 +0,0 @@ -require 'spec_helper' - -describe Celluloid::Notifications, actor_system: :global do - class Admirer - include Celluloid - include Celluloid::Notifications - - attr_reader :mourning - attr_reader :mourning_count - - def someone_died(topic, name) - @mourning = name - @mourning_count ||= 0 - @mourning_count += 1 - end - end - - class President - include Celluloid - include Celluloid::Notifications - - def die - publish("death", "Mr. President") - end - end - - it 'notifies relevant subscribers' do - marilyn = Admirer.new - jackie = Admirer.new - - marilyn.subscribe("death", :someone_died) - jackie.subscribe("alive", :someone_died) - - president = President.new - - president.die - marilyn.mourning.should eq("Mr. President") - jackie.mourning.should_not eq("Mr. President") - end - - it 'allows multiple subscriptions from the same actor' do - marilyn = Admirer.new - - marilyn.subscribe("death", :someone_died) - marilyn.subscribe("death", :someone_died) - - president = President.new - - president.die - marilyn.mourning_count.should be(2) - end - - - it 'notifies subscribers' do - marilyn = Admirer.new - jackie = Admirer.new - - marilyn.subscribe("death", :someone_died) - jackie.subscribe("death", :someone_died) - - president = President.new - - president.die - marilyn.mourning.should eq("Mr. President") - jackie.mourning.should eq("Mr. President") - end - - it 'publishes even if there are no subscribers' do - president = President.new - president.die - end - - it 'allows regex subscriptions' do - marilyn = Admirer.new - - marilyn.subscribe(/(death|assassination)/, :someone_died) - - president = President.new - president.die - marilyn.mourning.should eq("Mr. President") - end - - it 'allows unsubscribing' do - marilyn = Admirer.new - - subscription = marilyn.subscribe("death", :someone_died) - marilyn.unsubscribe(subscription) - - president = President.new - president.die - marilyn.mourning.should be_nil - end - - it 'prunes dead subscriptions' do - marilyn = Admirer.new - jackie = Admirer.new - - marilyn.subscribe("death", :someone_died) - jackie.subscribe("death", :someone_died) - - listeners = Celluloid::Notifications.notifier.listeners_for("death").size - marilyn.terminate - after_listeners = Celluloid::Notifications.notifier.listeners_for("death").size - - after_listeners.should == listeners - 1 - end - - it 'prunes multiple subscriptions from a dead actor' do - marilyn = Admirer.new - - marilyn.subscribe("death", :someone_died) - marilyn.subscribe("death", :someone_died) - - listeners = Celluloid::Notifications.notifier.listeners_for("death").size - marilyn.terminate - after_listeners = Celluloid::Notifications.notifier.listeners_for("death").size - - after_listeners.should eq(listeners - 2) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/pool_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/pool_spec.rb deleted file mode 100644 index 713382d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/pool_spec.rb +++ /dev/null @@ -1,92 +0,0 @@ -require 'spec_helper' - -describe "Celluloid.pool", actor_system: :global do - class ExampleError < StandardError; end - - class MyWorker - include Celluloid - - def process(queue = nil) - if queue - queue << :done - else - :done - end - end - - def sleepy_work - t = Time.now.to_f - sleep 0.25 - t - end - - def crash - raise ExampleError, "zomgcrash" - end - end - - def test_concurrency_of(pool) - baseline = Time.now.to_f - values = 10.times.map { pool.future.sleepy_work }.map(&:value) - values.select {|t| t - baseline < 0.1 }.length - end - - subject { MyWorker.pool } - - it "processes work units synchronously" do - subject.process.should be :done - end - - it "processes work units asynchronously" do - queue = Queue.new - subject.async.process(queue) - queue.pop.should be :done - end - - it "handles crashes" do - expect { subject.crash }.to raise_error(ExampleError) - subject.process.should be :done - end - - it "uses a fixed-sized number of threads" do - subject # eagerly evaluate the pool to spawn it - - actors = Celluloid::Actor.all - 100.times.map { subject.future(:process) }.map(&:value) - - new_actors = Celluloid::Actor.all - actors - new_actors.should eq [] - end - - it "terminates" do - expect { subject.terminate }.to_not raise_exception - end - - it "handles many requests" do - futures = 10.times.map do - subject.future.process - end - futures.map(&:value) - end - - context "#size=" do - subject { MyWorker.pool size: 4 } - - it "should adjust the pool size up", pending: 'flaky' do - expect(test_concurrency_of(subject)).to eq(4) - - subject.size = 6 - subject.size.should == 6 - - test_concurrency_of(subject).should == 6 - end - - it "should adjust the pool size down" do - test_concurrency_of(subject).should == 4 - - subject.size = 2 - subject.size.should == 2 - test_concurrency_of(subject).should == 2 - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/probe_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/probe_spec.rb deleted file mode 100644 index 937652a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/probe_spec.rb +++ /dev/null @@ -1,121 +0,0 @@ -require 'spec_helper' - -class DummyActor; include Celluloid; end - -class TestProbeClient - include Celluloid - include Celluloid::Notifications - - attr_reader :buffer - - def initialize() - @condition = Condition.new - subscribe(/celluloid\.events\..+/, :event_received) - @buffer = [] - end - - def wait - @condition.wait - end - - def wait_event(topic, expected_actor1 = nil, expected_actor2 = nil) - loop do - wait - while ev = @buffer.shift() - if (ev[0] == topic) && (ev[1].mailbox.address == expected_actor1.mailbox.address) && - (expected_actor2.nil? || (ev[2].mailbox.address == expected_actor2.mailbox.address) ) - return ev - end - end - end - end - - def event_received(topic, args) - @buffer << [topic, args[0], args[1]] - @condition.signal - end -end - -describe "Probe", actor_system: :global do - describe 'on boot' do - it 'should capture system actor spawn' do - client = TestProbeClient.new - Celluloid::Probe.run - create_events = [] - received_named_events = { - :default_incident_reporter => nil, - :notifications_fanout => nil - } - # wait for the events we seek - Timeout.timeout(5) do - loop do - client.wait - while ev = client.buffer.shift - if ev[0] == 'celluloid.events.actor_created' - create_events << ev - elsif ev[0] == 'celluloid.events.actor_named' - if received_named_events.keys.include?(ev[1].name) - received_named_events[ev[1].name] = ev[1].mailbox.address - end - end - end - if received_named_events.all?{|_, v| v != nil } - break - end - end - end - received_named_events.all?{|_, v| v != nil }.should == true - # now check we got the create events for every actors - received_named_events.each do |_, mailbox_address| - found = create_events.detect{|_, aa| aa.mailbox.address == mailbox_address } - found.should_not == nil - end - end - end - - describe 'after boot' do - it 'should send a notification when an actor is spawned' do - client = TestProbeClient.new - Celluloid::Probe.run - a = DummyActor.new - event = Timeout.timeout(5) do - client.wait_event('celluloid.events.actor_created', a) - end - event.should_not == nil - end - - it 'should send a notification when an actor is named' do - client = TestProbeClient.new - Celluloid::Probe.run - a = DummyActor.new - Celluloid::Actor['a name'] = a - event = Timeout.timeout(5) do - client.wait_event('celluloid.events.actor_named', a) - end - event.should_not == nil - end - - it 'should send a notification when actor dies' do - client = TestProbeClient.new - Celluloid::Probe.run - a = DummyActor.new - a.terminate - event = Timeout.timeout(5) do - client.wait_event('celluloid.events.actor_died', a) - end - event.should_not == nil - end - - it 'should send a notification when actors are linked' do - client = TestProbeClient.new - Celluloid::Probe.run - a = DummyActor.new - b = DummyActor.new - a.link(b) - event = Timeout.timeout(5) do - client.wait_event('celluloid.events.actors_linked', a, b) - end - event.should_not == nil - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/properties_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/properties_spec.rb deleted file mode 100644 index c31998b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/properties_spec.rb +++ /dev/null @@ -1,42 +0,0 @@ -require 'spec_helper' - -describe Celluloid::Properties do - let(:default_value) { 42 } - let(:changed_value) { 43 } - - let(:example_class) do - Class.new do - extend Celluloid::Properties - property :baz, :default => 42 - end - end - - let(:example_subclass) do - Class.new(example_class) - end - - let(:example_subclass_subclass) do - Class.new(example_subclass) - end - - it "adds properties to classes" do - example_class.baz.should eq default_value - example_class.baz changed_value - example_class.baz.should eq changed_value - end - - it "allows properties to be inherited" do - example_subclass.baz.should eq default_value - example_subclass.baz changed_value - example_subclass.baz.should eq changed_value - example_class.baz.should eq default_value - end - - it "allows properties to be deeply inherited" do - example_subclass_subclass.baz.should eq default_value - example_subclass_subclass.baz changed_value - example_subclass_subclass.baz.should eq changed_value - example_subclass.baz.should eq default_value - example_class.baz.should eq default_value - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/registry_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/registry_spec.rb deleted file mode 100644 index 2584590..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/registry_spec.rb +++ /dev/null @@ -1,64 +0,0 @@ -require 'spec_helper' - -describe Celluloid::Registry, actor_system: :global do - class Marilyn - include Celluloid - - def sing_for(person) - "o/~ Happy birthday, #{person}" - end - end - - it "registers Actors" do - Celluloid::Actor[:marilyn] = Marilyn.new - Celluloid::Actor[:marilyn].sing_for("Mr. President").should == "o/~ Happy birthday, Mr. President" - end - - it "refuses to register non-Actors" do - expect do - Celluloid::Actor[:impostor] = Object.new - end.to raise_error TypeError - end - - it "lists all registered actors" do - Celluloid::Actor[:marilyn] = Marilyn.new - Celluloid::Actor.registered.should include :marilyn - end - - it "knows its name once registered" do - Celluloid::Actor[:marilyn] = Marilyn.new - Celluloid::Actor[:marilyn].registered_name.should == :marilyn - end - - describe :delete do - before do - Celluloid::Actor[:marilyn] ||= Marilyn.new - end - - it "removes reference to actors' name from the registry" do - Celluloid::Actor.delete(:marilyn) - Celluloid::Actor.registered.should_not include :marilyn - end - - it "returns actor removed from the registry" do - rval = Celluloid::Actor.delete(:marilyn) - rval.should be_kind_of(Marilyn) - end - end - - describe :clear do - it "should return a hash of registered actors and remove them from the registry" do - Celluloid::Actor[:marilyn] ||= Marilyn.new - rval = Celluloid::Actor.clear_registry - begin - rval.should be_kind_of(Hash) - rval.should have_key(:marilyn) - rval[:marilyn].wrapped_object.should be_instance_of(Marilyn) - Celluloid::Actor.registered.should be_empty - ensure - # Repopulate the registry once we're done - rval.each { |key, actor| Celluloid::Actor[key] = actor } - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/stack_dump_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/stack_dump_spec.rb deleted file mode 100644 index 9a39028..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/stack_dump_spec.rb +++ /dev/null @@ -1,64 +0,0 @@ -require 'spec_helper' - -describe Celluloid::StackDump do - let(:actor_system) do - Celluloid::ActorSystem.new - end - - subject do - actor_system.stack_dump - end - - class BlockingActor - include Celluloid - - def blocking - Kernel.sleep - end - end - - before(:each) do - [Celluloid::TaskFiber, Celluloid::TaskThread].each do |task_klass| - actor_klass = Class.new(BlockingActor) do - task_class task_klass - end - actor = actor_system.within do - actor_klass.new - end - actor.async.blocking - end - - @active_thread = actor_system.get_thread do - sleep - end - @active_thread.role = :other_thing - @idle_thread = actor_system.get_thread do - end - - sleep 0.01 - end - - describe '#actors' do - it 'should include all actors' do - subject.actors.size.should == actor_system.running.size - end - end - - describe '#threads' do - it 'should include threads that are not actors', pending: 'flaky' do - expect(subject.threads.size).to eq(3) - end - - it 'should include idle threads' do - subject.threads.map(&:thread_id).should include(@idle_thread.object_id) - end - - it 'should include threads checked out of the pool for roles other than :actor' do - subject.threads.map(&:thread_id).should include(@active_thread.object_id) - end - - it 'should have the correct roles', pending: 'flaky' do - expect(subject.threads.map(&:role)).to include(nil, :other_thing, :task) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/supervision_group_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/supervision_group_spec.rb deleted file mode 100644 index b8fb5e5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/supervision_group_spec.rb +++ /dev/null @@ -1,65 +0,0 @@ -require 'spec_helper' - -describe Celluloid::SupervisionGroup, actor_system: :global do - before :all do - class MyActor - include Celluloid - - def running?; :yep; end - end - - class MyGroup < Celluloid::SupervisionGroup - supervise MyActor, :as => :example - end - end - - it "runs applications" do - MyGroup.run! - sleep 0.01 # startup time hax - - Celluloid::Actor[:example].should be_running - end - - it "accepts a private actor registry" do - my_registry = Celluloid::Registry.new - MyGroup.run!(my_registry) - sleep 0.01 - - my_registry[:example].should be_running - end - - it "removes actors from the registry when terminating" do - group = MyGroup.run! - group.terminate - Celluloid::Actor[:example].should be_nil - end - - context "pool" do - before :all do - class MyActor - attr_reader :args - def initialize *args - @args = *args - end - end - class MyGroup - pool MyActor, :as => :example_pool, :args => 'foo', :size => 3 - end - end - - it "runs applications and passes pool options and actor args" do - MyGroup.run! - sleep 0.001 # startup time hax - - Celluloid::Actor[:example_pool].should be_running - Celluloid::Actor[:example_pool].args.should eq ['foo'] - Celluloid::Actor[:example_pool].size.should be 3 - end - - it "allows external access to the internal registry" do - supervisor = MyGroup.run! - - supervisor[:example].should be_a MyActor - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/supervisor_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/supervisor_spec.rb deleted file mode 100644 index 1c5440c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/supervisor_spec.rb +++ /dev/null @@ -1,103 +0,0 @@ -require 'spec_helper' - -describe Celluloid::Supervisor, actor_system: :global do - class SubordinateDead < StandardError; end - - class Subordinate - include Celluloid - attr_reader :state - - def initialize(state) - @state = state - end - - def crack_the_whip - case @state - when :idle - @state = :working - else raise SubordinateDead, "the spec purposely crashed me :(" - end - end - end - - it "restarts actors when they die" do - supervisor = Celluloid::Supervisor.supervise(Subordinate, :idle) - subordinate = supervisor.actors.first - subordinate.state.should be(:idle) - - subordinate.crack_the_whip - subordinate.state.should be(:working) - - expect do - subordinate.crack_the_whip - end.to raise_exception(SubordinateDead) - sleep 0.1 # hax to prevent race :( - subordinate.should_not be_alive - - new_subordinate = supervisor.actors.first - new_subordinate.should_not eq subordinate - new_subordinate.state.should eq :idle - end - - it "registers actors and reregisters them when they die" do - Celluloid::Supervisor.supervise_as(:subordinate, Subordinate, :idle) - subordinate = Celluloid::Actor[:subordinate] - subordinate.state.should be(:idle) - - subordinate.crack_the_whip - subordinate.state.should be(:working) - - expect do - subordinate.crack_the_whip - end.to raise_exception(SubordinateDead) - sleep 0.1 # hax to prevent race :( - subordinate.should_not be_alive - - new_subordinate = Celluloid::Actor[:subordinate] - new_subordinate.should_not eq subordinate - new_subordinate.state.should eq :idle - end - - it "creates supervisors via Actor.supervise" do - supervisor = Subordinate.supervise(:working) - subordinate = supervisor.actors.first - subordinate.state.should be(:working) - - expect do - subordinate.crack_the_whip - end.to raise_exception(SubordinateDead) - sleep 0.1 # hax to prevent race :( - subordinate.should_not be_alive - - new_subordinate = supervisor.actors.first - new_subordinate.should_not eq subordinate - new_subordinate.state.should eq :working - end - - it "creates supervisors and registers actors via Actor.supervise_as" do - supervisor = Subordinate.supervise_as(:subordinate, :working) - subordinate = Celluloid::Actor[:subordinate] - subordinate.state.should be(:working) - - expect do - subordinate.crack_the_whip - end.to raise_exception(SubordinateDead) - sleep 0.1 # hax to prevent race :( - subordinate.should_not be_alive - - new_subordinate = supervisor.actors.first - new_subordinate.should_not eq subordinate - new_subordinate.state.should be(:working) - end - - it "removes an actor if it terminates cleanly" do - supervisor = Subordinate.supervise(:working) - subordinate = supervisor.actors.first - - supervisor.actors.should == [subordinate] - - subordinate.terminate - - supervisor.actors.should be_empty - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/tasks/task_fiber_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/tasks/task_fiber_spec.rb deleted file mode 100644 index 9d8fccc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/tasks/task_fiber_spec.rb +++ /dev/null @@ -1,5 +0,0 @@ -require 'spec_helper' - -describe Celluloid::TaskFiber, actor_system: :within do - it_behaves_like "a Celluloid Task", Celluloid::TaskFiber -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/tasks/task_thread_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/tasks/task_thread_spec.rb deleted file mode 100644 index 2d12b96..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/tasks/task_thread_spec.rb +++ /dev/null @@ -1,5 +0,0 @@ -require 'spec_helper' - -describe Celluloid::TaskThread, actor_system: :within do - it_behaves_like "a Celluloid Task", Celluloid::TaskThread -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/thread_handle_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/thread_handle_spec.rb deleted file mode 100644 index 54e325e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/thread_handle_spec.rb +++ /dev/null @@ -1,26 +0,0 @@ -require 'spec_helper' - -describe Celluloid::ThreadHandle do - let(:actor_system) do - Celluloid::ActorSystem.new - end - - it "knows thread liveliness" do - queue = Queue.new - handle = Celluloid::ThreadHandle.new(actor_system) { queue.pop } - handle.should be_alive - - queue << :die - - sleep 0.01 # hax - handle.should_not be_alive - end - - it "joins to thread handles" do - Celluloid::ThreadHandle.new(actor_system) { sleep 0.01 }.join - end - - it "supports passing a role" do - Celluloid::ThreadHandle.new(actor_system, :useful) { Thread.current.role.should == :useful }.join - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/timer_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/timer_spec.rb deleted file mode 100644 index a40a52e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/timer_spec.rb +++ /dev/null @@ -1,48 +0,0 @@ -require 'spec_helper' - -class EveryActor - include Celluloid - - def initialize - @trace = [] - @times = [] - @start = Time.now - - every(1) { log(1) } - every(2) { log(2) } - every(1) { log(11) } - every(2) { log(22) } - end - - def log(t) - @trace << t - - offset = Time.now - @start - @times << offset - - # puts "log(#{t}) @ #{offset}" - end - - attr :trace - attr :times -end - -describe Celluloid::Actor do - it "run every(t) task several times" do - Celluloid.boot - - every_actor = EveryActor.new - - sleep 5.5 - - times = every_actor.times - trace = every_actor.trace - - Celluloid.shutdown - - expect(trace.count(1)).to be == 5 - expect(trace.count(11)).to be == 5 - expect(trace.count(2)).to be == 2 - expect(trace.count(22)).to be == 2 - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/uuid_spec.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/uuid_spec.rb deleted file mode 100644 index 77c48b3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/celluloid/uuid_spec.rb +++ /dev/null @@ -1,11 +0,0 @@ -require 'spec_helper' - -describe Celluloid::UUID do - U = Celluloid::UUID - - it "generates unique IDs across the BLOCK_SIZE boundary" do - upper_bound = U::BLOCK_SIZE * 2 + 10 - uuids = (1..upper_bound).map{ U.generate } - uuids.size.should == uuids.uniq.size - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/spec_helper.rb b/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/spec_helper.rb deleted file mode 100644 index 830eeb2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/celluloid-0.16.0/spec/spec_helper.rb +++ /dev/null @@ -1,44 +0,0 @@ -require 'coveralls' -Coveralls.wear! - -require 'rubygems' -require 'bundler/setup' -require 'celluloid/rspec' -require 'celluloid/probe' - -logfile = File.open(File.expand_path("../../log/test.log", __FILE__), 'a') -logfile.sync = true - -Celluloid.logger = Logger.new(logfile) - -Celluloid.shutdown_timeout = 1 - -Dir['./spec/support/*.rb'].map {|f| require f } - -RSpec.configure do |config| - config.filter_run :focus => true - config.run_all_when_everything_filtered = true - - config.around do |ex| - Celluloid.actor_system = nil - Thread.list.each do |thread| - next if thread == Thread.current - thread.kill - end - - ex.run - end - - config.around actor_system: :global do |ex| - Celluloid.boot - ex.run - Celluloid.shutdown - end - - config.around actor_system: :within do |ex| - Celluloid::ActorSystem.new.within do - ex.run - end - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/LICENSE b/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/LICENSE deleted file mode 100644 index cf14acc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/LICENSE +++ /dev/null @@ -1,429 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/README.markdown b/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/README.markdown deleted file mode 100644 index ca954d4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/README.markdown +++ /dev/null @@ -1,114 +0,0 @@ -## Welcome to Classifier Reborn - -Classifier is a general module to allow Bayesian and other types of classifications. - -Classifier Reborn is a fork of cardmagic/classifier under more active development. - -## Download - -Add this line to your application's Gemfile: - - gem 'classifier-reborn' - -And then execute: - - $ bundle - -Or install it yourself as: - - $ gem install classifier-reborn - -## Dependencies - -The only runtime dependency you'll need to install is Roman Shterenzon's fast-stemmer gem: - - gem install fast-stemmer - -This should install automatically with RubyGems. - -If you would like to speed up LSI classification by at least 10x, please install the following libraries: - -* [GNU GSL](http://www.gnu.org/software/gsl) -* [rb-gsl](https://rubygems.org/gems/rb-gsl) - -Notice that LSI will work without these libraries, but as soon as they are installed, Classifier will make use of them. No configuration changes are needed, we like to keep things ridiculously easy for you. - -## Bayes - -A Bayesian classifier by Lucas Carlson. Bayesian Classifiers are accurate, fast, and have modest memory requirements. - -### Usage - -```ruby -require 'classifier-reborn' -b = ClassifierReborn::Bayes.new 'Interesting', 'Uninteresting' -b.train_interesting "here are some good words. I hope you love them" -b.train_uninteresting "here are some bad words, I hate you" -b.classify "I hate bad words and you" # returns 'Uninteresting' - -require 'madeleine' # use madeline to persist the data -m = SnapshotMadeleine.new("bayes_data") { - ClassifierReborn::Bayes.new 'Interesting', 'Uninteresting' -} -m.system.train_interesting "here are some good words. I hope you love them" -m.system.train_uninteresting "here are some bad words, I hate you" -m.take_snapshot -m.system.classify "I love you" # returns 'Interesting' -``` - -Using Madeleine, your application can persist the learned data over time. - -### Bayesian Classification - -* http://www.process.com/precisemail/bayesian_filtering.htm -* http://en.wikipedia.org/wiki/Bayesian_filtering -* http://www.paulgraham.com/spam.html - -## LSI - -A Latent Semantic Indexer by David Fayram. Latent Semantic Indexing engines -are not as fast or as small as Bayesian classifiers, but are more flexible, providing -fast search and clustering detection as well as semantic analysis of the text that -theoretically simulates human learning. - -### Usage - -```ruby -require 'classifier-reborn' -lsi = ClassifierReborn::LSI.new -strings = [ ["This text deals with dogs. Dogs.", :dog], - ["This text involves dogs too. Dogs! ", :dog], - ["This text revolves around cats. Cats.", :cat], - ["This text also involves cats. Cats!", :cat], - ["This text involves birds. Birds.",:bird ]] -strings.each {|x| lsi.add_item x.first, x.last} - -lsi.search("dog", 3) -# returns => ["This text deals with dogs. Dogs.", "This text involves dogs too. Dogs! ", -# "This text also involves cats. Cats!"] - -lsi.find_related(strings[2], 2) -# returns => ["This text revolves around cats. Cats.", "This text also involves cats. Cats!"] - -lsi.classify "This text is also about dogs!" -# returns => :dog -``` - -Please see the ClassifierReborn::LSI documentation for more information. It is possible to index, search and classify -with more than just simple strings. - -### Latent Semantic Indexing - -* http://www.c2.com/cgi/wiki?LatentSemanticIndexing -* http://www.chadfowler.com/index.cgi/Computing/LatentSemanticIndexing.rdoc -* http://en.wikipedia.org/wiki/Latent_semantic_analysis - -## Authors - -* Lucas Carlson (lucas@rufy.com) -* David Fayram II (dfayram@gmail.com) -* Cameron McBride (cameron.mcbride@gmail.com) -* Ivan Acosta-Rubio (ivan@softwarecriollo.com) -* Parker Moore (email@byparker.com) - -This library is released under the terms of the GNU LGPL. See LICENSE for more details. diff --git a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/bin/bayes.rb b/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/bin/bayes.rb deleted file mode 100755 index ee0c477..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/bin/bayes.rb +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env ruby - -begin - require 'rubygems' - require 'classifier' -rescue - require 'classifier' -end - -require 'madeleine' - -m = SnapshotMadeleine.new(File.expand_path("~/.bayes_data")) { - ClassifierReborn::Bayes.new 'Interesting', 'Uninteresting' -} - -case ARGV[0] -when "add" - case ARGV[1].downcase - when "interesting" - m.system.train_interesting File.open(ARGV[2]).read - puts "#{ARGV[2]} has been classified as interesting" - when "uninteresting" - m.system.train_uninteresting File.open(ARGV[2]).read - puts "#{ARGV[2]} has been classified as uninteresting" - else - puts "Invalid category: choose between interesting and uninteresting" - exit(1) - end -when "classify" - puts m.system.classify(File.open(ARGV[1]).read) -else - puts "Invalid option: choose add [category] [file] or clasify [file]" - exit(-1) -end - -m.take_snapshot diff --git a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/bin/summarize.rb b/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/bin/summarize.rb deleted file mode 100755 index 4de6ef2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/bin/summarize.rb +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env ruby - -begin - require 'rubygems' - require 'classifier' -rescue - require 'classifier' -end - -require 'open-uri' - -num = ARGV[1].to_i -num = num < 1 ? 10 : num - -text = open(ARGV.first).read -puts text.gsub(/<[^>]+>/,"").gsub(/[\s]+/," ").summary(num) diff --git a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn.rb b/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn.rb deleted file mode 100644 index 7555dc9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn.rb +++ /dev/null @@ -1,30 +0,0 @@ -#-- -# Copyright (c) 2005 Lucas Carlson -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -#++ -# Author:: Lucas Carlson (mailto:lucas@rufy.com) -# Copyright:: Copyright (c) 2005 Lucas Carlson -# License:: LGPL - -require 'rubygems' -require_relative 'classifier-reborn/category_namer' -require_relative 'classifier-reborn/bayes' -require_relative 'classifier-reborn/lsi' \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/bayes.rb b/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/bayes.rb deleted file mode 100644 index ce032e4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/bayes.rb +++ /dev/null @@ -1,138 +0,0 @@ -# Author:: Lucas Carlson (mailto:lucas@rufy.com) -# Copyright:: Copyright (c) 2005 Lucas Carlson -# License:: LGPL - -require_relative 'category_namer' - -module ClassifierReborn - class Bayes - # The class can be created with one or more categories, each of which will be - # initialized and given a training method. E.g., - # b = ClassifierReborn::Bayes.new 'Interesting', 'Uninteresting', 'Spam' - def initialize(*categories) - @categories = Hash.new - categories.each { |category| @categories[CategoryNamer.prepare_name(category)] = Hash.new } - @total_words = 0 - @category_counts = Hash.new(0) - @category_word_count = Hash.new - end - - # Provides a general training method for all categories specified in Bayes#new - # For example: - # b = ClassifierReborn::Bayes.new 'This', 'That', 'the_other' - # b.train :this, "This text" - # b.train "that", "That text" - # b.train "The other", "The other text" - def train(category, text) - category = CategoryNamer.prepare_name(category) - @category_word_count[category] ||= 0 - @category_counts[category] += 1 - Hasher.word_hash(text).each do |word, count| - @categories[category][word] ||= 0 - @categories[category][word] += count - @category_word_count[category] += count - @total_words += count - end - end - - # Provides a untraining method for all categories specified in Bayes#new - # Be very careful with this method. - # - # For example: - # b = ClassifierReborn::Bayes.new 'This', 'That', 'the_other' - # b.train :this, "This text" - # b.untrain :this, "This text" - def untrain(category, text) - category = CategoryNamer.prepare_name(category) - @category_word_count[category] ||= 0 - @category_counts[category] -= 1 - Hasher.word_hash(text).each do |word, count| - if @total_words >= 0 - orig = @categories[category][word] || 0 - @categories[category][word] ||= 0 - @categories[category][word] -= count - if @categories[category][word] <= 0 - @categories[category].delete(word) - count = orig - end - - if @category_word_count[category] >= count - @category_word_count[category] -= count - end - @total_words -= count - end - end - end - - # Returns the scores in each category the provided +text+. E.g., - # b.classifications "I hate bad words and you" - # => {"Uninteresting"=>-12.6997928013932, "Interesting"=>-18.4206807439524} - # The largest of these scores (the one closest to 0) is the one picked out by #classify - def classifications(text) - score = Hash.new - word_hash = Hasher.word_hash(text) - training_count = @category_counts.values.reduce(:+).to_f - @categories.each do |category, category_words| - score[category.to_s] = 0 - total = (@category_word_count[category] || 1).to_f - word_hash.each do |word, count| - s = category_words.has_key?(word) ? category_words[word] : 0.1 - score[category.to_s] += Math.log(s/total) - end - # now add prior probability for the category - s = @category_counts.has_key?(category) ? @category_counts[category] : 0.1 - score[category.to_s] += Math.log(s / training_count) - end - return score - end - - # Returns the classification of the provided +text+, which is one of the - # categories given in the initializer. E.g., - # b.classify "I hate bad words and you" - # => 'Uninteresting' - def classify(text) - (classifications(text).sort_by { |a| -a[1] })[0][0] - end - - # Provides training and untraining methods for the categories specified in Bayes#new - # For example: - # b = ClassifierReborn::Bayes.new 'This', 'That', 'the_other' - # b.train_this "This text" - # b.train_that "That text" - # b.untrain_that "That text" - # b.train_the_other "The other text" - def method_missing(name, *args) - cleaned_name = name.to_s.gsub(/(un)?train_([\w]+)/, '\2') - category = CategoryNamer.prepare_name(cleaned_name) - if @categories.has_key? category - args.each { |text| eval("#{$1}train(category, text)") } - elsif name.to_s =~ /(un)?train_([\w]+)/ - raise StandardError, "No such category: #{category}" - else - super #raise StandardError, "No such method: #{name}" - end - end - - # Provides a list of category names - # For example: - # b.categories - # => ['This', 'That', 'the_other'] - def categories # :nodoc: - @categories.keys.collect {|c| c.to_s} - end - - # Allows you to add categories to the classifier. - # For example: - # b.add_category "Not spam" - # - # WARNING: Adding categories to a trained classifier will - # result in an undertrained category that will tend to match - # more criteria than the trained selective categories. In short, - # try to initialize your categories at initialization. - def add_category(category) - @categories[CategoryNamer.prepare_name(category)] = Hash.new - end - - alias append_category add_category - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/category_namer.rb b/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/category_namer.rb deleted file mode 100644 index 6a28336..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/category_namer.rb +++ /dev/null @@ -1,15 +0,0 @@ -# Author:: Lucas Carlson (mailto:lucas@rufy.com) -# Copyright:: Copyright (c) 2005 Lucas Carlson -# License:: LGPL - -require 'fast_stemmer' -require 'classifier-reborn/extensions/hasher' - -module ClassifierReborn - module CategoryNamer - extend self - def prepare_name(name) - name.to_s.gsub("_"," ").capitalize.intern - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/extensions/hasher.rb b/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/extensions/hasher.rb deleted file mode 100644 index cc16336..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/extensions/hasher.rb +++ /dev/null @@ -1,134 +0,0 @@ -# Author:: Lucas Carlson (mailto:lucas@rufy.com) -# Copyright:: Copyright (c) 2005 Lucas Carlson -# License:: LGPL - -require "set" - -module ClassifierReborn - module Hasher - extend self - - # Removes common punctuation symbols, returning a new string. - # E.g., - # "Hello (greeting's), with {braces} < >...?".without_punctuation - # => "Hello greetings with braces " - def without_punctuation(str) - str .tr( ',?.!;:"@#$%^&*()_=+[]{}\|<>/`~', " " ) .tr( "'\-", "") - end - - # Return a Hash of strings => ints. Each word in the string is stemmed, - # interned, and indexes to its frequency in the document. - def word_hash(str) - word_hash = clean_word_hash(str) - symbol_hash = word_hash_for_symbols(str.gsub(/[\w]/," ").split) - return clean_word_hash(str).merge(symbol_hash) - end - - # Return a word hash without extra punctuation or short symbols, just stemmed words - def clean_word_hash(str) - word_hash_for_words str.gsub(/[^\w\s]/,"").split - end - - def word_hash_for_words(words) - d = Hash.new(0) - words.each do |word| - word.downcase! - if ! CORPUS_SKIP_WORDS.include?(word) && word.length > 2 - d[word.stem.intern] += 1 - end - end - return d - end - - def word_hash_for_symbols(words) - d = Hash.new(0) - words.each do |word| - d[word.intern] += 1 - end - return d - end - - CORPUS_SKIP_WORDS = Set.new(%w[ - a - again - all - along - are - also - an - and - as - at - but - by - came - can - cant - couldnt - did - didn - didnt - do - doesnt - dont - ever - first - from - have - her - here - him - how - i - if - in - into - is - isnt - it - itll - just - last - least - like - most - my - new - no - not - now - of - on - or - should - sinc - so - some - th - than - this - that - the - their - then - those - to - told - too - true - try - until - url - us - were - when - whether - while - with - within - yes - you - youll - ]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/extensions/vector.rb b/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/extensions/vector.rb deleted file mode 100644 index e7f9599..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/extensions/vector.rb +++ /dev/null @@ -1,79 +0,0 @@ -# Author:: Ernest Ellingson -# Copyright:: Copyright (c) 2005 - -# These are extensions to the std-lib 'matrix' to allow an all ruby SVD - -require 'matrix' - -class Matrix - def Matrix.diag(s) - Matrix.diagonal(*s) - end - - alias :trans :transpose - - def SV_decomp(maxSweeps = 20) - if self.row_size >= self.column_size - q = self.trans * self - else - q = self * self.trans - end - - qrot = q.dup - v = Matrix.identity(q.row_size) - azrot = nil - mzrot = nil - cnt = 0 - s_old = nil - mu = nil - - while true do - cnt += 1 - for row in (0...qrot.row_size-1) do - for col in (1..qrot.row_size-1) do - next if row == col - h = Math.atan((2 * qrot[row,col])/(qrot[row,row]-qrot[col,col]))/2.0 - hcos = Math.cos(h) - hsin = Math.sin(h) - mzrot = Matrix.identity(qrot.row_size) - mzrot[row,row] = hcos - mzrot[row,col] = -hsin - mzrot[col,row] = hsin - mzrot[col,col] = hcos - qrot = mzrot.trans * qrot * mzrot - v = v * mzrot - end - end - s_old = qrot.dup if cnt == 1 - sum_qrot = 0.0 - if cnt > 1 - qrot.row_size.times do |r| - sum_qrot += (qrot[r,r]-s_old[r,r]).abs if (qrot[r,r]-s_old[r,r]).abs > 0.001 - end - s_old = qrot.dup - end - break if (sum_qrot <= 0.001 and cnt > 1) or cnt >= maxSweeps - end # of do while true - s = [] - qrot.row_size.times do |r| - s << Math.sqrt(qrot[r,r]) - end - #puts "cnt = #{cnt}" - if self.row_size >= self.column_size - mu = self * v * Matrix.diagonal(*s).inverse - return [mu, v, s] - else - puts v.row_size - puts v.column_size - puts self.row_size - puts self.column_size - puts s.size - - mu = (self.trans * v * Matrix.diagonal(*s).inverse) - return [mu, v, s] - end - end - def []=(i,j,val) - @rows[i][j] = val - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/extensions/vector_serialize.rb b/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/extensions/vector_serialize.rb deleted file mode 100644 index 71d8d66..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/extensions/vector_serialize.rb +++ /dev/null @@ -1,20 +0,0 @@ -module GSL - - class Vector - def _dump(v) - Marshal.dump( self.to_a ) - end - - def self._load(arr) - arry = Marshal.load(arr) - return GSL::Vector.alloc(arry) - end - - end - - class Matrix - class < false - # - def initialize(options = {}) - @auto_rebuild = true unless options[:auto_rebuild] == false - @word_list, @items = WordList.new, {} - @version, @built_at_version = 0, -1 - end - - # Returns true if the index needs to be rebuilt. The index needs - # to be built after all informaton is added, but before you start - # using it for search, classification and cluster detection. - def needs_rebuild? - (@items.keys.size > 1) && (@version != @built_at_version) - end - - # Adds an item to the index. item is assumed to be a string, but - # any item may be indexed so long as it responds to #to_s or if - # you provide an optional block explaining how the indexer can - # fetch fresh string data. This optional block is passed the item, - # so the item may only be a reference to a URL or file name. - # - # For example: - # lsi = ClassifierReborn::LSI.new - # lsi.add_item "This is just plain text" - # lsi.add_item "/home/me/filename.txt" { |x| File.read x } - # ar = ActiveRecordObject.find( :all ) - # lsi.add_item ar, *ar.categories { |x| ar.content } - # - def add_item( item, *categories, &block ) - clean_word_hash = Hasher.clean_word_hash(block ? block.call(item) : item.to_s) - @items[item] = ContentNode.new(clean_word_hash, *categories) - @version += 1 - build_index if @auto_rebuild - end - - # A less flexible shorthand for add_item that assumes - # you are passing in a string with no categorries. item - # will be duck typed via to_s . - # - def <<( item ) - add_item item - end - - # Returns the categories for a given indexed items. You are free to add and remove - # items from this as you see fit. It does not invalide an index to change its categories. - def categories_for(item) - return [] unless @items[item] - return @items[item].categories - end - - # Removes an item from the database, if it is indexed. - # - def remove_item( item ) - if @items.key? item - @items.delete item - @version += 1 - end - end - - # Returns an array of items that are indexed. - def items - @items.keys - end - - # Returns the categories for a given indexed items. You are free to add and remove - # items from this as you see fit. It does not invalide an index to change its categories. - def categories_for(item) - return [] unless @items[item] - return @items[item].categories - end - - # This function rebuilds the index if needs_rebuild? returns true. - # For very large document spaces, this indexing operation may take some - # time to complete, so it may be wise to place the operation in another - # thread. - # - # As a rule, indexing will be fairly swift on modern machines until - # you have well over 500 documents indexed, or have an incredibly diverse - # vocabulary for your documents. - # - # The optional parameter "cutoff" is a tuning parameter. When the index is - # built, a certain number of s-values are discarded from the system. The - # cutoff parameter tells the indexer how many of these values to keep. - # A value of 1 for cutoff means that no semantic analysis will take place, - # turning the LSI class into a simple vector search engine. - def build_index( cutoff=0.75 ) - return unless needs_rebuild? - make_word_list - - doc_list = @items.values - tda = doc_list.collect { |node| node.raw_vector_with( @word_list ) } - - if $GSL - tdm = GSL::Matrix.alloc(*tda).trans - ntdm = build_reduced_matrix(tdm, cutoff) - - ntdm.size[1].times do |col| - vec = GSL::Vector.alloc( ntdm.column(col) ).row - doc_list[col].lsi_vector = vec - doc_list[col].lsi_norm = vec.normalize - end - else - tdm = Matrix.rows(tda).trans - ntdm = build_reduced_matrix(tdm, cutoff) - - ntdm.row_size.times do |col| - doc_list[col].lsi_vector = ntdm.column(col) if doc_list[col] - doc_list[col].lsi_norm = ntdm.column(col).normalize if doc_list[col] - end - end - - @built_at_version = @version - end - - # This method returns max_chunks entries, ordered by their average semantic rating. - # Essentially, the average distance of each entry from all other entries is calculated, - # the highest are returned. - # - # This can be used to build a summary service, or to provide more information about - # your dataset's general content. For example, if you were to use categorize on the - # results of this data, you could gather information on what your dataset is generally - # about. - def highest_relative_content( max_chunks=10 ) - return [] if needs_rebuild? - - avg_density = Hash.new - @items.each_key { |x| avg_density[x] = proximity_array_for_content(x).inject(0.0) { |x,y| x + y[1]} } - - avg_density.keys.sort_by { |x| avg_density[x] }.reverse[0..max_chunks-1].map - end - - # This function is the primitive that find_related and classify - # build upon. It returns an array of 2-element arrays. The first element - # of this array is a document, and the second is its "score", defining - # how "close" it is to other indexed items. - # - # These values are somewhat arbitrary, having to do with the vector space - # created by your content, so the magnitude is interpretable but not always - # meaningful between indexes. - # - # The parameter doc is the content to compare. If that content is not - # indexed, you can pass an optional block to define how to create the - # text data. See add_item for examples of how this works. - def proximity_array_for_content( doc, &block ) - return [] if needs_rebuild? - - content_node = node_for_content( doc, &block ) - result = - @items.keys.collect do |item| - if $GSL - val = content_node.search_vector * @items[item].search_vector.col - else - val = (Matrix[content_node.search_vector] * @items[item].search_vector)[0] - end - [item, val] - end - result.sort_by { |x| x[1] }.reverse - end - - # Similar to proximity_array_for_content, this function takes similar - # arguments and returns a similar array. However, it uses the normalized - # calculated vectors instead of their full versions. This is useful when - # you're trying to perform operations on content that is much smaller than - # the text you're working with. search uses this primitive. - def proximity_norms_for_content( doc, &block ) - return [] if needs_rebuild? - - content_node = node_for_content( doc, &block ) - result = - @items.keys.collect do |item| - if $GSL - val = content_node.search_norm * @items[item].search_norm.col - else - val = (Matrix[content_node.search_norm] * @items[item].search_norm)[0] - end - [item, val] - end - result.sort_by { |x| x[1] }.reverse - end - - # This function allows for text-based search of your index. Unlike other functions - # like find_related and classify, search only takes short strings. It will also ignore - # factors like repeated words. It is best for short, google-like search terms. - # A search will first priortize lexical relationships, then semantic ones. - # - # While this may seem backwards compared to the other functions that LSI supports, - # it is actually the same algorithm, just applied on a smaller document. - def search( string, max_nearest=3 ) - return [] if needs_rebuild? - carry = proximity_norms_for_content( string ) - result = carry.collect { |x| x[0] } - return result[0..max_nearest-1] - end - - # This function takes content and finds other documents - # that are semantically "close", returning an array of documents sorted - # from most to least relavant. - # max_nearest specifies the number of documents to return. A value of - # 0 means that it returns all the indexed documents, sorted by relavence. - # - # This is particularly useful for identifing clusters in your document space. - # For example you may want to identify several "What's Related" items for weblog - # articles, or find paragraphs that relate to each other in an essay. - def find_related( doc, max_nearest=3, &block ) - carry = - proximity_array_for_content( doc, &block ).reject { |pair| pair[0] == doc } - result = carry.collect { |x| x[0] } - return result[0..max_nearest-1] - end - - # This function uses a voting system to categorize documents, based on - # the categories of other documents. It uses the same logic as the - # find_related function to find related documents, then returns the - # most obvious category from this list. - # - # cutoff signifies the number of documents to consider when clasifying - # text. A cutoff of 1 means that every document in the index votes on - # what category the document is in. This may not always make sense. - # - def classify( doc, cutoff=0.30, &block ) - icutoff = (@items.size * cutoff).round - carry = proximity_array_for_content( doc, &block ) - carry = carry[0..icutoff-1] - votes = {} - carry.each do |pair| - categories = @items[pair[0]].categories - categories.each do |category| - votes[category] ||= 0.0 - votes[category] += pair[1] - end - end - - ranking = votes.keys.sort_by { |x| votes[x] } - return ranking[-1] - end - - # Prototype, only works on indexed documents. - # I have no clue if this is going to work, but in theory - # it's supposed to. - def highest_ranked_stems( doc, count=3 ) - raise "Requested stem ranking on non-indexed content!" unless @items[doc] - arr = node_for_content(doc).lsi_vector.to_a - top_n = arr.sort.reverse[0..count-1] - return top_n.collect { |x| @word_list.word_for_index(arr.index(x))} - end - - private - def build_reduced_matrix( matrix, cutoff=0.75 ) - # TODO: Check that M>=N on these dimensions! Transpose helps assure this - u, v, s = matrix.SV_decomp - - # TODO: Better than 75% term, please. :\ - s_cutoff = s.sort.reverse[(s.size * cutoff).round - 1] - s.size.times do |ord| - s[ord] = 0.0 if s[ord] < s_cutoff - end - # Reconstruct the term document matrix, only with reduced rank - u * ($GSL ? GSL::Matrix : ::Matrix).diag( s ) * v.trans - end - - def node_for_content(item, &block) - if @items[item] - return @items[item] - else - clean_word_hash = Hasher.clean_word_hash(block ? block.call(item) : item.to_s) - - cn = ContentNode.new(clean_word_hash, &block) # make the node and extract the data - - unless needs_rebuild? - cn.raw_vector_with( @word_list ) # make the lsi raw and norm vectors - end - end - - return cn - end - - def make_word_list - @word_list = WordList.new - @items.each_value do |node| - node.word_hash.each_key { |key| @word_list.add_word key } - end - end - - end -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/lsi/content_node.rb b/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/lsi/content_node.rb deleted file mode 100644 index fd1806f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/lsi/content_node.rb +++ /dev/null @@ -1,86 +0,0 @@ -# Author:: David Fayram (mailto:dfayram@lensmen.net) -# Copyright:: Copyright (c) 2005 David Fayram II -# License:: LGPL - -module ClassifierReborn - -# This is an internal data structure class for the LSI node. Save for -# raw_vector_with, it should be fairly straightforward to understand. -# You should never have to use it directly. - class ContentNode - attr_accessor :raw_vector, :raw_norm, - :lsi_vector, :lsi_norm, - :categories - - attr_reader :word_hash - # If text_proc is not specified, the source will be duck-typed - # via source.to_s - def initialize( word_hash, *categories ) - @categories = categories || [] - @word_hash = word_hash - end - - # Use this to fetch the appropriate search vector. - def search_vector - @lsi_vector || @raw_vector - end - - # Use this to fetch the appropriate search vector in normalized form. - def search_norm - @lsi_norm || @raw_norm - end - - # Creates the raw vector out of word_hash using word_list as the - # key for mapping the vector space. - def raw_vector_with( word_list ) - if $GSL - vec = GSL::Vector.alloc(word_list.size) - else - vec = Array.new(word_list.size, 0) - end - - @word_hash.each_key do |word| - vec[word_list[word]] = @word_hash[word] if word_list[word] - end - - # Perform the scaling transform and force floating point arithmetic - if $GSL - sum = 0.0 - vec.collect{|v| sum += v} - total_words = sum - else - total_words = vec.reduce(0, :+).to_f - end - - total_unique_words = 0 - - if $GSL - vec.each { |word| total_unique_words += 1 if word != 0 } - else - total_unique_words = vec.count{ |word| word != 0 } - end - - # Perform first-order association transform if this vector has more - # then one word in it. - if total_words > 1.0 && total_unique_words > 1 - weighted_total = 0.0 - vec.each do |term| - if ( term > 0 ) - weighted_total += (( term / total_words ) * Math.log( term / total_words )) - end - end - vec = vec.collect { |val| Math.log( val + 1 ) / -weighted_total } - end - - if $GSL - @raw_norm = vec.normalize - @raw_vector = vec - else - @raw_norm = Vector[*vec].normalize - @raw_vector = Vector[*vec] - end - end - - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/lsi/summarizer.rb b/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/lsi/summarizer.rb deleted file mode 100644 index af09ad4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/lsi/summarizer.rb +++ /dev/null @@ -1,33 +0,0 @@ -# Author:: Lucas Carlson (mailto:lucas@rufy.com) -# Copyright:: Copyright (c) 2005 Lucas Carlson -# License:: LGPL - -module ClassifierReborn - module Summarizer - extend self - - def summary( str, count=10, separator=" [...] " ) - perform_lsi split_sentences(str), count, separator - end - - def paragraph_summary( str, count=1, separator=" [...] " ) - perform_lsi split_paragraphs(str), count, separator - end - - def split_sentences(str) - str.split /(\.|\!|\?)/ # TODO: make this less primitive - end - - def split_paragraphs(str) - str.split /(\n\n|\r\r|\r\n\r\n)/ # TODO: make this less primitive - end - - def perform_lsi(chunks, count, separator) - lsi = ClassifierReborn::LSI.new :auto_rebuild => false - chunks.each { |chunk| lsi << chunk unless chunk.strip.empty? || chunk.strip.split.size == 1 } - lsi.build_index - summaries = lsi.highest_relative_content count - return summaries.reject { |chunk| !summaries.include? chunk }.map { |x| x.strip }.join(separator) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/lsi/word_list.rb b/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/lsi/word_list.rb deleted file mode 100644 index 5a618c1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/lsi/word_list.rb +++ /dev/null @@ -1,36 +0,0 @@ -# Author:: David Fayram (mailto:dfayram@lensmen.net) -# Copyright:: Copyright (c) 2005 David Fayram II -# License:: LGPL - -module ClassifierReborn - # This class keeps a word => index mapping. It is used to map stemmed words - # to dimensions of a vector. - - class WordList - def initialize - @location_table = Hash.new - end - - # Adds a word (if it is new) and assigns it a unique dimension. - def add_word(word) - term = word - @location_table[term] = @location_table.size unless @location_table[term] - end - - # Returns the dimension of the word or nil if the word is not in the space. - def [](lookup) - term = lookup - @location_table[term] - end - - def word_for_index(ind) - @location_table.invert[ind] - end - - # Returns the number of words mapped. - def size - @location_table.size - end - - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/version.rb b/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/version.rb deleted file mode 100644 index 98eb69e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/classifier-reborn-2.0.3/lib/classifier-reborn/version.rb +++ /dev/null @@ -1,3 +0,0 @@ -module ClassifierReborn - VERSION = '2.0.3' -end diff --git a/vendor/bundle/ruby/2.2.0/gems/coffee-script-2.4.1/LICENSE b/vendor/bundle/ruby/2.2.0/gems/coffee-script-2.4.1/LICENSE deleted file mode 100644 index 35f79f5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/coffee-script-2.4.1/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2010 Joshua Peek - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/bundle/ruby/2.2.0/gems/coffee-script-2.4.1/README.md b/vendor/bundle/ruby/2.2.0/gems/coffee-script-2.4.1/README.md deleted file mode 100644 index a76e8e2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/coffee-script-2.4.1/README.md +++ /dev/null @@ -1,43 +0,0 @@ -Ruby CoffeeScript -================= - -Ruby CoffeeScript is a bridge to the official CoffeeScript compiler. - - CoffeeScript.compile File.read("script.coffee") - - -Installation ------------- - - gem install coffee-script - -*Note: This compiler library has replaced the original CoffeeScript - compiler that was written in Ruby.* - - -Dependencies ------------- - -This library depends on the `coffee-script-source` gem which is -updated any time a new version of CoffeeScript is released. (The -`coffee-script-source` gem's version number is synced with each -official CoffeeScript release.) This way you can build against -different versions of CoffeeScript by requiring the correct version of -the `coffee-script-source` gem. - -In addition, you can use this library with unreleased versions of -CoffeeScript by setting the `COFFEESCRIPT_SOURCE_PATH` environment -variable: - - export COFFEESCRIPT_SOURCE_PATH=/path/to/coffee-script/extras/coffee-script.js - -### JSON - -The `json` library is also required but is not explicitly stated as a -gem dependency. If you're on Ruby 1.8 you'll need to install the -`json` or `json_pure` gem. On Ruby 1.9, `json` is included in the -standard library. - -### ExecJS - -The [ExecJS](https://github.com/sstephenson/execjs) library is used to automatically choose the best JavaScript engine for your platform. Check out its [README](https://github.com/sstephenson/execjs/blob/master/README.md) for a complete list of supported engines. diff --git a/vendor/bundle/ruby/2.2.0/gems/coffee-script-2.4.1/lib/coffee-script.rb b/vendor/bundle/ruby/2.2.0/gems/coffee-script-2.4.1/lib/coffee-script.rb deleted file mode 100644 index a8186cf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/coffee-script-2.4.1/lib/coffee-script.rb +++ /dev/null @@ -1 +0,0 @@ -require 'coffee_script' diff --git a/vendor/bundle/ruby/2.2.0/gems/coffee-script-2.4.1/lib/coffee_script.rb b/vendor/bundle/ruby/2.2.0/gems/coffee-script-2.4.1/lib/coffee_script.rb deleted file mode 100644 index 072a00f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/coffee-script-2.4.1/lib/coffee_script.rb +++ /dev/null @@ -1,81 +0,0 @@ -require 'execjs' -require 'coffee_script/source' - -module CoffeeScript - Error = ExecJS::Error - EngineError = ExecJS::RuntimeError - CompilationError = ExecJS::ProgramError - - module Source - def self.path - @path ||= ENV['COFFEESCRIPT_SOURCE_PATH'] || bundled_path - end - - def self.path=(path) - @contents = @version = @bare_option = @context = nil - @path = path - end - - COMPILE_FUNCTION_SOURCE = <<-JS - ;function compile(script, options) { - try { - return CoffeeScript.compile(script, options); - } catch (err) { - if (err instanceof SyntaxError && err.location) { - throw new SyntaxError([ - err.filename || "[stdin]", - err.location.first_line + 1, - err.location.first_column + 1 - ].join(":") + ": " + err.message) - } else { - throw err; - } - } - } - JS - - def self.contents - @contents ||= File.read(path) + COMPILE_FUNCTION_SOURCE - end - - def self.version - @version ||= contents[/CoffeeScript Compiler v([\d.]+)/, 1] - end - - def self.bare_option - @bare_option ||= contents.match(/noWrap/) ? 'noWrap' : 'bare' - end - - def self.context - @context ||= ExecJS.compile(contents) - end - end - - class << self - def engine - end - - def engine=(engine) - end - - def version - Source.version - end - - # Compile a script (String or IO) to JavaScript. - def compile(script, options = {}) - script = script.read if script.respond_to?(:read) - - if options.key?(:bare) - elsif options.key?(:no_wrap) - options[:bare] = options[:no_wrap] - else - options[:bare] = false - end - - # Stringify keys - options = options.inject({}) { |h, (k, v)| h[k.to_s] = v; h } - Source.context.call("compile", script, options) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/coffee-script-source-1.9.1.1/lib/coffee_script/coffee-script.js b/vendor/bundle/ruby/2.2.0/gems/coffee-script-source-1.9.1.1/lib/coffee_script/coffee-script.js deleted file mode 100644 index d9ff2b6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/coffee-script-source-1.9.1.1/lib/coffee_script/coffee-script.js +++ /dev/null @@ -1,6628 +0,0 @@ -/** - * CoffeeScript Compiler v1.9.1 - * http://coffeescript.org - * - * Copyright 2011, Jeremy Ashkenas - * Released under the MIT License - */ -(function(root) { - var CoffeeScript = function() { - function require(path){ return require[path]; } - require['./helpers'] = (function() { - var exports = {}, module = {exports: exports}; - // Generated by CoffeeScript 1.9.1 -(function() { - var buildLocationData, extend, flatten, ref, repeat, syntaxErrorToString; - - exports.starts = function(string, literal, start) { - return literal === string.substr(start, literal.length); - }; - - exports.ends = function(string, literal, back) { - var len; - len = literal.length; - return literal === string.substr(string.length - len - (back || 0), len); - }; - - exports.repeat = repeat = function(str, n) { - var res; - res = ''; - while (n > 0) { - if (n & 1) { - res += str; - } - n >>>= 1; - str += str; - } - return res; - }; - - exports.compact = function(array) { - var i, item, len1, results; - results = []; - for (i = 0, len1 = array.length; i < len1; i++) { - item = array[i]; - if (item) { - results.push(item); - } - } - return results; - }; - - exports.count = function(string, substr) { - var num, pos; - num = pos = 0; - if (!substr.length) { - return 1 / 0; - } - while (pos = 1 + string.indexOf(substr, pos)) { - num++; - } - return num; - }; - - exports.merge = function(options, overrides) { - return extend(extend({}, options), overrides); - }; - - extend = exports.extend = function(object, properties) { - var key, val; - for (key in properties) { - val = properties[key]; - object[key] = val; - } - return object; - }; - - exports.flatten = flatten = function(array) { - var element, flattened, i, len1; - flattened = []; - for (i = 0, len1 = array.length; i < len1; i++) { - element = array[i]; - if (element instanceof Array) { - flattened = flattened.concat(flatten(element)); - } else { - flattened.push(element); - } - } - return flattened; - }; - - exports.del = function(obj, key) { - var val; - val = obj[key]; - delete obj[key]; - return val; - }; - - exports.some = (ref = Array.prototype.some) != null ? ref : function(fn) { - var e, i, len1; - for (i = 0, len1 = this.length; i < len1; i++) { - e = this[i]; - if (fn(e)) { - return true; - } - } - return false; - }; - - exports.invertLiterate = function(code) { - var line, lines, maybe_code; - maybe_code = true; - lines = (function() { - var i, len1, ref1, results; - ref1 = code.split('\n'); - results = []; - for (i = 0, len1 = ref1.length; i < len1; i++) { - line = ref1[i]; - if (maybe_code && /^([ ]{4}|[ ]{0,3}\t)/.test(line)) { - results.push(line); - } else if (maybe_code = /^\s*$/.test(line)) { - results.push(line); - } else { - results.push('# ' + line); - } - } - return results; - })(); - return lines.join('\n'); - }; - - buildLocationData = function(first, last) { - if (!last) { - return first; - } else { - return { - first_line: first.first_line, - first_column: first.first_column, - last_line: last.last_line, - last_column: last.last_column - }; - } - }; - - exports.addLocationDataFn = function(first, last) { - return function(obj) { - if (((typeof obj) === 'object') && (!!obj['updateLocationDataIfMissing'])) { - obj.updateLocationDataIfMissing(buildLocationData(first, last)); - } - return obj; - }; - }; - - exports.locationDataToString = function(obj) { - var locationData; - if (("2" in obj) && ("first_line" in obj[2])) { - locationData = obj[2]; - } else if ("first_line" in obj) { - locationData = obj; - } - if (locationData) { - return ((locationData.first_line + 1) + ":" + (locationData.first_column + 1) + "-") + ((locationData.last_line + 1) + ":" + (locationData.last_column + 1)); - } else { - return "No location data"; - } - }; - - exports.baseFileName = function(file, stripExt, useWinPathSep) { - var parts, pathSep; - if (stripExt == null) { - stripExt = false; - } - if (useWinPathSep == null) { - useWinPathSep = false; - } - pathSep = useWinPathSep ? /\\|\// : /\//; - parts = file.split(pathSep); - file = parts[parts.length - 1]; - if (!(stripExt && file.indexOf('.') >= 0)) { - return file; - } - parts = file.split('.'); - parts.pop(); - if (parts[parts.length - 1] === 'coffee' && parts.length > 1) { - parts.pop(); - } - return parts.join('.'); - }; - - exports.isCoffee = function(file) { - return /\.((lit)?coffee|coffee\.md)$/.test(file); - }; - - exports.isLiterate = function(file) { - return /\.(litcoffee|coffee\.md)$/.test(file); - }; - - exports.throwSyntaxError = function(message, location) { - var error; - error = new SyntaxError(message); - error.location = location; - error.toString = syntaxErrorToString; - error.stack = error.toString(); - throw error; - }; - - exports.updateSyntaxError = function(error, code, filename) { - if (error.toString === syntaxErrorToString) { - error.code || (error.code = code); - error.filename || (error.filename = filename); - error.stack = error.toString(); - } - return error; - }; - - syntaxErrorToString = function() { - var codeLine, colorize, colorsEnabled, end, filename, first_column, first_line, last_column, last_line, marker, ref1, ref2, ref3, ref4, start; - if (!(this.code && this.location)) { - return Error.prototype.toString.call(this); - } - ref1 = this.location, first_line = ref1.first_line, first_column = ref1.first_column, last_line = ref1.last_line, last_column = ref1.last_column; - if (last_line == null) { - last_line = first_line; - } - if (last_column == null) { - last_column = first_column; - } - filename = this.filename || '[stdin]'; - codeLine = this.code.split('\n')[first_line]; - start = first_column; - end = first_line === last_line ? last_column + 1 : codeLine.length; - marker = codeLine.slice(0, start).replace(/[^\s]/g, ' ') + repeat('^', end - start); - if (typeof process !== "undefined" && process !== null) { - colorsEnabled = ((ref2 = process.stdout) != null ? ref2.isTTY : void 0) && !((ref3 = process.env) != null ? ref3.NODE_DISABLE_COLORS : void 0); - } - if ((ref4 = this.colorful) != null ? ref4 : colorsEnabled) { - colorize = function(str) { - return "\x1B[1;31m" + str + "\x1B[0m"; - }; - codeLine = codeLine.slice(0, start) + colorize(codeLine.slice(start, end)) + codeLine.slice(end); - marker = colorize(marker); - } - return filename + ":" + (first_line + 1) + ":" + (first_column + 1) + ": error: " + this.message + "\n" + codeLine + "\n" + marker; - }; - - exports.nameWhitespaceCharacter = function(string) { - switch (string) { - case ' ': - return 'space'; - case '\n': - return 'newline'; - case '\r': - return 'carriage return'; - case '\t': - return 'tab'; - default: - return string; - } - }; - -}).call(this); - - return module.exports; -})();require['./rewriter'] = (function() { - var exports = {}, module = {exports: exports}; - // Generated by CoffeeScript 1.9.1 -(function() { - var BALANCED_PAIRS, CALL_CLOSERS, EXPRESSION_CLOSE, EXPRESSION_END, EXPRESSION_START, IMPLICIT_CALL, IMPLICIT_END, IMPLICIT_FUNC, IMPLICIT_UNSPACED_CALL, INVERSES, LINEBREAKS, SINGLE_CLOSERS, SINGLE_LINERS, generate, k, left, len, ref, rite, - indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, - slice = [].slice; - - generate = function(tag, value, origin) { - var tok; - tok = [tag, value]; - tok.generated = true; - if (origin) { - tok.origin = origin; - } - return tok; - }; - - exports.Rewriter = (function() { - function Rewriter() {} - - Rewriter.prototype.rewrite = function(tokens1) { - this.tokens = tokens1; - this.removeLeadingNewlines(); - this.closeOpenCalls(); - this.closeOpenIndexes(); - this.normalizeLines(); - this.tagPostfixConditionals(); - this.addImplicitBracesAndParens(); - this.addLocationDataToGeneratedTokens(); - return this.tokens; - }; - - Rewriter.prototype.scanTokens = function(block) { - var i, token, tokens; - tokens = this.tokens; - i = 0; - while (token = tokens[i]) { - i += block.call(this, token, i, tokens); - } - return true; - }; - - Rewriter.prototype.detectEnd = function(i, condition, action) { - var levels, ref, ref1, token, tokens; - tokens = this.tokens; - levels = 0; - while (token = tokens[i]) { - if (levels === 0 && condition.call(this, token, i)) { - return action.call(this, token, i); - } - if (!token || levels < 0) { - return action.call(this, token, i - 1); - } - if (ref = token[0], indexOf.call(EXPRESSION_START, ref) >= 0) { - levels += 1; - } else if (ref1 = token[0], indexOf.call(EXPRESSION_END, ref1) >= 0) { - levels -= 1; - } - i += 1; - } - return i - 1; - }; - - Rewriter.prototype.removeLeadingNewlines = function() { - var i, k, len, ref, tag; - ref = this.tokens; - for (i = k = 0, len = ref.length; k < len; i = ++k) { - tag = ref[i][0]; - if (tag !== 'TERMINATOR') { - break; - } - } - if (i) { - return this.tokens.splice(0, i); - } - }; - - Rewriter.prototype.closeOpenCalls = function() { - var action, condition; - condition = function(token, i) { - var ref; - return ((ref = token[0]) === ')' || ref === 'CALL_END') || token[0] === 'OUTDENT' && this.tag(i - 1) === ')'; - }; - action = function(token, i) { - return this.tokens[token[0] === 'OUTDENT' ? i - 1 : i][0] = 'CALL_END'; - }; - return this.scanTokens(function(token, i) { - if (token[0] === 'CALL_START') { - this.detectEnd(i + 1, condition, action); - } - return 1; - }); - }; - - Rewriter.prototype.closeOpenIndexes = function() { - var action, condition; - condition = function(token, i) { - var ref; - return (ref = token[0]) === ']' || ref === 'INDEX_END'; - }; - action = function(token, i) { - return token[0] = 'INDEX_END'; - }; - return this.scanTokens(function(token, i) { - if (token[0] === 'INDEX_START') { - this.detectEnd(i + 1, condition, action); - } - return 1; - }); - }; - - Rewriter.prototype.indexOfTag = function() { - var fuzz, i, j, k, pattern, ref, ref1; - i = arguments[0], pattern = 2 <= arguments.length ? slice.call(arguments, 1) : []; - fuzz = 0; - for (j = k = 0, ref = pattern.length; 0 <= ref ? k < ref : k > ref; j = 0 <= ref ? ++k : --k) { - while (this.tag(i + j + fuzz) === 'HERECOMMENT') { - fuzz += 2; - } - if (pattern[j] == null) { - continue; - } - if (typeof pattern[j] === 'string') { - pattern[j] = [pattern[j]]; - } - if (ref1 = this.tag(i + j + fuzz), indexOf.call(pattern[j], ref1) < 0) { - return -1; - } - } - return i + j + fuzz - 1; - }; - - Rewriter.prototype.looksObjectish = function(j) { - var end, index; - if (this.indexOfTag(j, '@', null, ':') > -1 || this.indexOfTag(j, null, ':') > -1) { - return true; - } - index = this.indexOfTag(j, EXPRESSION_START); - if (index > -1) { - end = null; - this.detectEnd(index + 1, (function(token) { - var ref; - return ref = token[0], indexOf.call(EXPRESSION_END, ref) >= 0; - }), (function(token, i) { - return end = i; - })); - if (this.tag(end + 1) === ':') { - return true; - } - } - return false; - }; - - Rewriter.prototype.findTagsBackwards = function(i, tags) { - var backStack, ref, ref1, ref2, ref3, ref4, ref5; - backStack = []; - while (i >= 0 && (backStack.length || (ref2 = this.tag(i), indexOf.call(tags, ref2) < 0) && ((ref3 = this.tag(i), indexOf.call(EXPRESSION_START, ref3) < 0) || this.tokens[i].generated) && (ref4 = this.tag(i), indexOf.call(LINEBREAKS, ref4) < 0))) { - if (ref = this.tag(i), indexOf.call(EXPRESSION_END, ref) >= 0) { - backStack.push(this.tag(i)); - } - if ((ref1 = this.tag(i), indexOf.call(EXPRESSION_START, ref1) >= 0) && backStack.length) { - backStack.pop(); - } - i -= 1; - } - return ref5 = this.tag(i), indexOf.call(tags, ref5) >= 0; - }; - - Rewriter.prototype.addImplicitBracesAndParens = function() { - var stack, start; - stack = []; - start = null; - return this.scanTokens(function(token, i, tokens) { - var endImplicitCall, endImplicitObject, forward, inImplicit, inImplicitCall, inImplicitControl, inImplicitObject, newLine, nextTag, offset, prevTag, prevToken, ref, ref1, ref2, ref3, ref4, ref5, s, sameLine, stackIdx, stackTag, stackTop, startIdx, startImplicitCall, startImplicitObject, startsLine, tag; - tag = token[0]; - prevTag = (prevToken = i > 0 ? tokens[i - 1] : [])[0]; - nextTag = (i < tokens.length - 1 ? tokens[i + 1] : [])[0]; - stackTop = function() { - return stack[stack.length - 1]; - }; - startIdx = i; - forward = function(n) { - return i - startIdx + n; - }; - inImplicit = function() { - var ref, ref1; - return (ref = stackTop()) != null ? (ref1 = ref[2]) != null ? ref1.ours : void 0 : void 0; - }; - inImplicitCall = function() { - var ref; - return inImplicit() && ((ref = stackTop()) != null ? ref[0] : void 0) === '('; - }; - inImplicitObject = function() { - var ref; - return inImplicit() && ((ref = stackTop()) != null ? ref[0] : void 0) === '{'; - }; - inImplicitControl = function() { - var ref; - return inImplicit && ((ref = stackTop()) != null ? ref[0] : void 0) === 'CONTROL'; - }; - startImplicitCall = function(j) { - var idx; - idx = j != null ? j : i; - stack.push([ - '(', idx, { - ours: true - } - ]); - tokens.splice(idx, 0, generate('CALL_START', '(')); - if (j == null) { - return i += 1; - } - }; - endImplicitCall = function() { - stack.pop(); - tokens.splice(i, 0, generate('CALL_END', ')', ['', 'end of input', token[2]])); - return i += 1; - }; - startImplicitObject = function(j, startsLine) { - var idx, val; - if (startsLine == null) { - startsLine = true; - } - idx = j != null ? j : i; - stack.push([ - '{', idx, { - sameLine: true, - startsLine: startsLine, - ours: true - } - ]); - val = new String('{'); - val.generated = true; - tokens.splice(idx, 0, generate('{', val, token)); - if (j == null) { - return i += 1; - } - }; - endImplicitObject = function(j) { - j = j != null ? j : i; - stack.pop(); - tokens.splice(j, 0, generate('}', '}', token)); - return i += 1; - }; - if (inImplicitCall() && (tag === 'IF' || tag === 'TRY' || tag === 'FINALLY' || tag === 'CATCH' || tag === 'CLASS' || tag === 'SWITCH')) { - stack.push([ - 'CONTROL', i, { - ours: true - } - ]); - return forward(1); - } - if (tag === 'INDENT' && inImplicit()) { - if (prevTag !== '=>' && prevTag !== '->' && prevTag !== '[' && prevTag !== '(' && prevTag !== ',' && prevTag !== '{' && prevTag !== 'TRY' && prevTag !== 'ELSE' && prevTag !== '=') { - while (inImplicitCall()) { - endImplicitCall(); - } - } - if (inImplicitControl()) { - stack.pop(); - } - stack.push([tag, i]); - return forward(1); - } - if (indexOf.call(EXPRESSION_START, tag) >= 0) { - stack.push([tag, i]); - return forward(1); - } - if (indexOf.call(EXPRESSION_END, tag) >= 0) { - while (inImplicit()) { - if (inImplicitCall()) { - endImplicitCall(); - } else if (inImplicitObject()) { - endImplicitObject(); - } else { - stack.pop(); - } - } - start = stack.pop(); - } - if ((indexOf.call(IMPLICIT_FUNC, tag) >= 0 && token.spaced || tag === '?' && i > 0 && !tokens[i - 1].spaced) && (indexOf.call(IMPLICIT_CALL, nextTag) >= 0 || indexOf.call(IMPLICIT_UNSPACED_CALL, nextTag) >= 0 && !((ref = tokens[i + 1]) != null ? ref.spaced : void 0) && !((ref1 = tokens[i + 1]) != null ? ref1.newLine : void 0))) { - if (tag === '?') { - tag = token[0] = 'FUNC_EXIST'; - } - startImplicitCall(i + 1); - return forward(2); - } - if (indexOf.call(IMPLICIT_FUNC, tag) >= 0 && this.indexOfTag(i + 1, 'INDENT', null, ':') > -1 && !this.findTagsBackwards(i, ['CLASS', 'EXTENDS', 'IF', 'CATCH', 'SWITCH', 'LEADING_WHEN', 'FOR', 'WHILE', 'UNTIL'])) { - startImplicitCall(i + 1); - stack.push(['INDENT', i + 2]); - return forward(3); - } - if (tag === ':') { - s = (function() { - var ref2; - switch (false) { - case ref2 = this.tag(i - 1), indexOf.call(EXPRESSION_END, ref2) < 0: - return start[1]; - case this.tag(i - 2) !== '@': - return i - 2; - default: - return i - 1; - } - }).call(this); - while (this.tag(s - 2) === 'HERECOMMENT') { - s -= 2; - } - this.insideForDeclaration = nextTag === 'FOR'; - startsLine = s === 0 || (ref2 = this.tag(s - 1), indexOf.call(LINEBREAKS, ref2) >= 0) || tokens[s - 1].newLine; - if (stackTop()) { - ref3 = stackTop(), stackTag = ref3[0], stackIdx = ref3[1]; - if ((stackTag === '{' || stackTag === 'INDENT' && this.tag(stackIdx - 1) === '{') && (startsLine || this.tag(s - 1) === ',' || this.tag(s - 1) === '{')) { - return forward(1); - } - } - startImplicitObject(s, !!startsLine); - return forward(2); - } - if (inImplicitObject() && indexOf.call(LINEBREAKS, tag) >= 0) { - stackTop()[2].sameLine = false; - } - newLine = prevTag === 'OUTDENT' || prevToken.newLine; - if (indexOf.call(IMPLICIT_END, tag) >= 0 || indexOf.call(CALL_CLOSERS, tag) >= 0 && newLine) { - while (inImplicit()) { - ref4 = stackTop(), stackTag = ref4[0], stackIdx = ref4[1], (ref5 = ref4[2], sameLine = ref5.sameLine, startsLine = ref5.startsLine); - if (inImplicitCall() && prevTag !== ',') { - endImplicitCall(); - } else if (inImplicitObject() && !this.insideForDeclaration && sameLine && tag !== 'TERMINATOR' && prevTag !== ':') { - endImplicitObject(); - } else if (inImplicitObject() && tag === 'TERMINATOR' && prevTag !== ',' && !(startsLine && this.looksObjectish(i + 1))) { - if (nextTag === 'HERECOMMENT') { - return forward(1); - } - endImplicitObject(); - } else { - break; - } - } - } - if (tag === ',' && !this.looksObjectish(i + 1) && inImplicitObject() && !this.insideForDeclaration && (nextTag !== 'TERMINATOR' || !this.looksObjectish(i + 2))) { - offset = nextTag === 'OUTDENT' ? 1 : 0; - while (inImplicitObject()) { - endImplicitObject(i + offset); - } - } - return forward(1); - }); - }; - - Rewriter.prototype.addLocationDataToGeneratedTokens = function() { - return this.scanTokens(function(token, i, tokens) { - var column, line, nextLocation, prevLocation, ref, ref1; - if (token[2]) { - return 1; - } - if (!(token.generated || token.explicit)) { - return 1; - } - if (token[0] === '{' && (nextLocation = (ref = tokens[i + 1]) != null ? ref[2] : void 0)) { - line = nextLocation.first_line, column = nextLocation.first_column; - } else if (prevLocation = (ref1 = tokens[i - 1]) != null ? ref1[2] : void 0) { - line = prevLocation.last_line, column = prevLocation.last_column; - } else { - line = column = 0; - } - token[2] = { - first_line: line, - first_column: column, - last_line: line, - last_column: column - }; - return 1; - }); - }; - - Rewriter.prototype.normalizeLines = function() { - var action, condition, indent, outdent, starter; - starter = indent = outdent = null; - condition = function(token, i) { - var ref, ref1, ref2, ref3; - return token[1] !== ';' && (ref = token[0], indexOf.call(SINGLE_CLOSERS, ref) >= 0) && !(token[0] === 'TERMINATOR' && (ref1 = this.tag(i + 1), indexOf.call(EXPRESSION_CLOSE, ref1) >= 0)) && !(token[0] === 'ELSE' && starter !== 'THEN') && !(((ref2 = token[0]) === 'CATCH' || ref2 === 'FINALLY') && (starter === '->' || starter === '=>')) || (ref3 = token[0], indexOf.call(CALL_CLOSERS, ref3) >= 0) && this.tokens[i - 1].newLine; - }; - action = function(token, i) { - return this.tokens.splice((this.tag(i - 1) === ',' ? i - 1 : i), 0, outdent); - }; - return this.scanTokens(function(token, i, tokens) { - var j, k, ref, ref1, ref2, tag; - tag = token[0]; - if (tag === 'TERMINATOR') { - if (this.tag(i + 1) === 'ELSE' && this.tag(i - 1) !== 'OUTDENT') { - tokens.splice.apply(tokens, [i, 1].concat(slice.call(this.indentation()))); - return 1; - } - if (ref = this.tag(i + 1), indexOf.call(EXPRESSION_CLOSE, ref) >= 0) { - tokens.splice(i, 1); - return 0; - } - } - if (tag === 'CATCH') { - for (j = k = 1; k <= 2; j = ++k) { - if (!((ref1 = this.tag(i + j)) === 'OUTDENT' || ref1 === 'TERMINATOR' || ref1 === 'FINALLY')) { - continue; - } - tokens.splice.apply(tokens, [i + j, 0].concat(slice.call(this.indentation()))); - return 2 + j; - } - } - if (indexOf.call(SINGLE_LINERS, tag) >= 0 && this.tag(i + 1) !== 'INDENT' && !(tag === 'ELSE' && this.tag(i + 1) === 'IF')) { - starter = tag; - ref2 = this.indentation(tokens[i]), indent = ref2[0], outdent = ref2[1]; - if (starter === 'THEN') { - indent.fromThen = true; - } - tokens.splice(i + 1, 0, indent); - this.detectEnd(i + 2, condition, action); - if (tag === 'THEN') { - tokens.splice(i, 1); - } - return 1; - } - return 1; - }); - }; - - Rewriter.prototype.tagPostfixConditionals = function() { - var action, condition, original; - original = null; - condition = function(token, i) { - var prevTag, tag; - tag = token[0]; - prevTag = this.tokens[i - 1][0]; - return tag === 'TERMINATOR' || (tag === 'INDENT' && indexOf.call(SINGLE_LINERS, prevTag) < 0); - }; - action = function(token, i) { - if (token[0] !== 'INDENT' || (token.generated && !token.fromThen)) { - return original[0] = 'POST_' + original[0]; - } - }; - return this.scanTokens(function(token, i) { - if (token[0] !== 'IF') { - return 1; - } - original = token; - this.detectEnd(i + 1, condition, action); - return 1; - }); - }; - - Rewriter.prototype.indentation = function(origin) { - var indent, outdent; - indent = ['INDENT', 2]; - outdent = ['OUTDENT', 2]; - if (origin) { - indent.generated = outdent.generated = true; - indent.origin = outdent.origin = origin; - } else { - indent.explicit = outdent.explicit = true; - } - return [indent, outdent]; - }; - - Rewriter.prototype.generate = generate; - - Rewriter.prototype.tag = function(i) { - var ref; - return (ref = this.tokens[i]) != null ? ref[0] : void 0; - }; - - return Rewriter; - - })(); - - BALANCED_PAIRS = [['(', ')'], ['[', ']'], ['{', '}'], ['INDENT', 'OUTDENT'], ['CALL_START', 'CALL_END'], ['PARAM_START', 'PARAM_END'], ['INDEX_START', 'INDEX_END'], ['STRING_START', 'STRING_END'], ['REGEX_START', 'REGEX_END']]; - - exports.INVERSES = INVERSES = {}; - - EXPRESSION_START = []; - - EXPRESSION_END = []; - - for (k = 0, len = BALANCED_PAIRS.length; k < len; k++) { - ref = BALANCED_PAIRS[k], left = ref[0], rite = ref[1]; - EXPRESSION_START.push(INVERSES[rite] = left); - EXPRESSION_END.push(INVERSES[left] = rite); - } - - EXPRESSION_CLOSE = ['CATCH', 'THEN', 'ELSE', 'FINALLY'].concat(EXPRESSION_END); - - IMPLICIT_FUNC = ['IDENTIFIER', 'SUPER', ')', 'CALL_END', ']', 'INDEX_END', '@', 'THIS']; - - IMPLICIT_CALL = ['IDENTIFIER', 'NUMBER', 'STRING', 'STRING_START', 'JS', 'REGEX', 'REGEX_START', 'NEW', 'PARAM_START', 'CLASS', 'IF', 'TRY', 'SWITCH', 'THIS', 'BOOL', 'NULL', 'UNDEFINED', 'UNARY', 'YIELD', 'UNARY_MATH', 'SUPER', 'THROW', '@', '->', '=>', '[', '(', '{', '--', '++']; - - IMPLICIT_UNSPACED_CALL = ['+', '-']; - - IMPLICIT_END = ['POST_IF', 'FOR', 'WHILE', 'UNTIL', 'WHEN', 'BY', 'LOOP', 'TERMINATOR']; - - SINGLE_LINERS = ['ELSE', '->', '=>', 'TRY', 'FINALLY', 'THEN']; - - SINGLE_CLOSERS = ['TERMINATOR', 'CATCH', 'FINALLY', 'ELSE', 'OUTDENT', 'LEADING_WHEN']; - - LINEBREAKS = ['TERMINATOR', 'INDENT', 'OUTDENT']; - - CALL_CLOSERS = ['.', '?.', '::', '?::']; - -}).call(this); - - return module.exports; -})();require['./lexer'] = (function() { - var exports = {}, module = {exports: exports}; - // Generated by CoffeeScript 1.9.1 -(function() { - var BOM, BOOL, CALLABLE, CODE, COFFEE_ALIASES, COFFEE_ALIAS_MAP, COFFEE_KEYWORDS, COMMENT, COMPARE, COMPOUND_ASSIGN, HERECOMMENT_ILLEGAL, HEREDOC_DOUBLE, HEREDOC_INDENT, HEREDOC_SINGLE, HEREGEX, HEREGEX_OMIT, IDENTIFIER, INDENTABLE_CLOSERS, INDEXABLE, INVALID_ESCAPE, INVERSES, JSTOKEN, JS_FORBIDDEN, JS_KEYWORDS, LEADING_BLANK_LINE, LINE_BREAK, LINE_CONTINUER, LOGIC, Lexer, MATH, MULTI_DENT, NOT_REGEX, NUMBER, OPERATOR, POSSIBLY_DIVISION, REGEX, REGEX_FLAGS, REGEX_ILLEGAL, RELATION, RESERVED, Rewriter, SHIFT, SIMPLE_STRING_OMIT, STRICT_PROSCRIBED, STRING_DOUBLE, STRING_OMIT, STRING_SINGLE, STRING_START, TRAILING_BLANK_LINE, TRAILING_SPACES, UNARY, UNARY_MATH, VALID_FLAGS, WHITESPACE, compact, count, invertLiterate, key, locationDataToString, ref, ref1, repeat, starts, throwSyntaxError, - indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; - - ref = require('./rewriter'), Rewriter = ref.Rewriter, INVERSES = ref.INVERSES; - - ref1 = require('./helpers'), count = ref1.count, starts = ref1.starts, compact = ref1.compact, repeat = ref1.repeat, invertLiterate = ref1.invertLiterate, locationDataToString = ref1.locationDataToString, throwSyntaxError = ref1.throwSyntaxError; - - exports.Lexer = Lexer = (function() { - function Lexer() {} - - Lexer.prototype.tokenize = function(code, opts) { - var consumed, end, i, ref2; - if (opts == null) { - opts = {}; - } - this.literate = opts.literate; - this.indent = 0; - this.baseIndent = 0; - this.indebt = 0; - this.outdebt = 0; - this.indents = []; - this.ends = []; - this.tokens = []; - this.chunkLine = opts.line || 0; - this.chunkColumn = opts.column || 0; - code = this.clean(code); - i = 0; - while (this.chunk = code.slice(i)) { - consumed = this.identifierToken() || this.commentToken() || this.whitespaceToken() || this.lineToken() || this.stringToken() || this.numberToken() || this.regexToken() || this.jsToken() || this.literalToken(); - ref2 = this.getLineAndColumnFromChunk(consumed), this.chunkLine = ref2[0], this.chunkColumn = ref2[1]; - i += consumed; - if (opts.untilBalanced && this.ends.length === 0) { - return { - tokens: this.tokens, - index: i - }; - } - } - this.closeIndentation(); - if (end = this.ends.pop()) { - this.error("missing " + end.tag, end.origin[2]); - } - if (opts.rewrite === false) { - return this.tokens; - } - return (new Rewriter).rewrite(this.tokens); - }; - - Lexer.prototype.clean = function(code) { - if (code.charCodeAt(0) === BOM) { - code = code.slice(1); - } - code = code.replace(/\r/g, '').replace(TRAILING_SPACES, ''); - if (WHITESPACE.test(code)) { - code = "\n" + code; - this.chunkLine--; - } - if (this.literate) { - code = invertLiterate(code); - } - return code; - }; - - Lexer.prototype.identifierToken = function() { - var colon, colonOffset, forcedIdentifier, id, idLength, input, match, poppedToken, prev, ref2, ref3, ref4, ref5, tag, tagToken; - if (!(match = IDENTIFIER.exec(this.chunk))) { - return 0; - } - input = match[0], id = match[1], colon = match[2]; - idLength = id.length; - poppedToken = void 0; - if (id === 'own' && this.tag() === 'FOR') { - this.token('OWN', id); - return id.length; - } - if (id === 'from' && this.tag() === 'YIELD') { - this.token('FROM', id); - return id.length; - } - ref2 = this.tokens, prev = ref2[ref2.length - 1]; - forcedIdentifier = colon || (prev != null) && (((ref3 = prev[0]) === '.' || ref3 === '?.' || ref3 === '::' || ref3 === '?::') || !prev.spaced && prev[0] === '@'); - tag = 'IDENTIFIER'; - if (!forcedIdentifier && (indexOf.call(JS_KEYWORDS, id) >= 0 || indexOf.call(COFFEE_KEYWORDS, id) >= 0)) { - tag = id.toUpperCase(); - if (tag === 'WHEN' && (ref4 = this.tag(), indexOf.call(LINE_BREAK, ref4) >= 0)) { - tag = 'LEADING_WHEN'; - } else if (tag === 'FOR') { - this.seenFor = true; - } else if (tag === 'UNLESS') { - tag = 'IF'; - } else if (indexOf.call(UNARY, tag) >= 0) { - tag = 'UNARY'; - } else if (indexOf.call(RELATION, tag) >= 0) { - if (tag !== 'INSTANCEOF' && this.seenFor) { - tag = 'FOR' + tag; - this.seenFor = false; - } else { - tag = 'RELATION'; - if (this.value() === '!') { - poppedToken = this.tokens.pop(); - id = '!' + id; - } - } - } - } - if (indexOf.call(JS_FORBIDDEN, id) >= 0) { - if (forcedIdentifier) { - tag = 'IDENTIFIER'; - id = new String(id); - id.reserved = true; - } else if (indexOf.call(RESERVED, id) >= 0) { - this.error("reserved word '" + id + "'", { - length: id.length - }); - } - } - if (!forcedIdentifier) { - if (indexOf.call(COFFEE_ALIASES, id) >= 0) { - id = COFFEE_ALIAS_MAP[id]; - } - tag = (function() { - switch (id) { - case '!': - return 'UNARY'; - case '==': - case '!=': - return 'COMPARE'; - case '&&': - case '||': - return 'LOGIC'; - case 'true': - case 'false': - return 'BOOL'; - case 'break': - case 'continue': - return 'STATEMENT'; - default: - return tag; - } - })(); - } - tagToken = this.token(tag, id, 0, idLength); - tagToken.variable = !forcedIdentifier; - if (poppedToken) { - ref5 = [poppedToken[2].first_line, poppedToken[2].first_column], tagToken[2].first_line = ref5[0], tagToken[2].first_column = ref5[1]; - } - if (colon) { - colonOffset = input.lastIndexOf(':'); - this.token(':', ':', colonOffset, colon.length); - } - return input.length; - }; - - Lexer.prototype.numberToken = function() { - var binaryLiteral, lexedLength, match, number, octalLiteral; - if (!(match = NUMBER.exec(this.chunk))) { - return 0; - } - number = match[0]; - lexedLength = number.length; - if (/^0[BOX]/.test(number)) { - this.error("radix prefix in '" + number + "' must be lowercase", { - offset: 1 - }); - } else if (/E/.test(number) && !/^0x/.test(number)) { - this.error("exponential notation in '" + number + "' must be indicated with a lowercase 'e'", { - offset: number.indexOf('E') - }); - } else if (/^0\d*[89]/.test(number)) { - this.error("decimal literal '" + number + "' must not be prefixed with '0'", { - length: lexedLength - }); - } else if (/^0\d+/.test(number)) { - this.error("octal literal '" + number + "' must be prefixed with '0o'", { - length: lexedLength - }); - } - if (octalLiteral = /^0o([0-7]+)/.exec(number)) { - number = '0x' + parseInt(octalLiteral[1], 8).toString(16); - } - if (binaryLiteral = /^0b([01]+)/.exec(number)) { - number = '0x' + parseInt(binaryLiteral[1], 2).toString(16); - } - this.token('NUMBER', number, 0, lexedLength); - return lexedLength; - }; - - Lexer.prototype.stringToken = function() { - var $, attempt, delimiter, doc, end, heredoc, i, indent, indentRegex, match, quote, ref2, ref3, regex, token, tokens; - quote = (STRING_START.exec(this.chunk) || [])[0]; - if (!quote) { - return 0; - } - regex = (function() { - switch (quote) { - case "'": - return STRING_SINGLE; - case '"': - return STRING_DOUBLE; - case "'''": - return HEREDOC_SINGLE; - case '"""': - return HEREDOC_DOUBLE; - } - })(); - heredoc = quote.length === 3; - ref2 = this.matchWithInterpolations(regex, quote), tokens = ref2.tokens, end = ref2.index; - $ = tokens.length - 1; - delimiter = quote.charAt(0); - if (heredoc) { - indent = null; - doc = ((function() { - var j, len, results; - results = []; - for (i = j = 0, len = tokens.length; j < len; i = ++j) { - token = tokens[i]; - if (token[0] === 'NEOSTRING') { - results.push(token[1]); - } - } - return results; - })()).join('#{}'); - while (match = HEREDOC_INDENT.exec(doc)) { - attempt = match[1]; - if (indent === null || (0 < (ref3 = attempt.length) && ref3 < indent.length)) { - indent = attempt; - } - } - if (indent) { - indentRegex = RegExp("^" + indent, "gm"); - } - this.mergeInterpolationTokens(tokens, { - delimiter: delimiter - }, (function(_this) { - return function(value, i) { - value = _this.formatString(value); - if (i === 0) { - value = value.replace(LEADING_BLANK_LINE, ''); - } - if (i === $) { - value = value.replace(TRAILING_BLANK_LINE, ''); - } - if (indentRegex) { - value = value.replace(indentRegex, ''); - } - return value; - }; - })(this)); - } else { - this.mergeInterpolationTokens(tokens, { - delimiter: delimiter - }, (function(_this) { - return function(value, i) { - value = _this.formatString(value); - value = value.replace(SIMPLE_STRING_OMIT, function(match, offset) { - if ((i === 0 && offset === 0) || (i === $ && offset + match.length === value.length)) { - return ''; - } else { - return ' '; - } - }); - return value; - }; - })(this)); - } - return end; - }; - - Lexer.prototype.commentToken = function() { - var comment, here, match; - if (!(match = this.chunk.match(COMMENT))) { - return 0; - } - comment = match[0], here = match[1]; - if (here) { - if (match = HERECOMMENT_ILLEGAL.exec(comment)) { - this.error("block comments cannot contain " + match[0], { - offset: match.index, - length: match[0].length - }); - } - if (here.indexOf('\n') >= 0) { - here = here.replace(RegExp("\\n" + (repeat(' ', this.indent)), "g"), '\n'); - } - this.token('HERECOMMENT', here, 0, comment.length); - } - return comment.length; - }; - - Lexer.prototype.jsToken = function() { - var match, script; - if (!(this.chunk.charAt(0) === '`' && (match = JSTOKEN.exec(this.chunk)))) { - return 0; - } - this.token('JS', (script = match[0]).slice(1, -1), 0, script.length); - return script.length; - }; - - Lexer.prototype.regexToken = function() { - var body, closed, end, flags, index, match, origin, prev, ref2, ref3, ref4, regex, tokens; - switch (false) { - case !(match = REGEX_ILLEGAL.exec(this.chunk)): - this.error("regular expressions cannot begin with " + match[2], { - offset: match.index + match[1].length - }); - break; - case !(match = this.matchWithInterpolations(HEREGEX, '///')): - tokens = match.tokens, index = match.index; - break; - case !(match = REGEX.exec(this.chunk)): - regex = match[0], body = match[1], closed = match[2]; - this.validateEscapes(body, { - isRegex: true, - offsetInChunk: 1 - }); - index = regex.length; - ref2 = this.tokens, prev = ref2[ref2.length - 1]; - if (prev) { - if (prev.spaced && (ref3 = prev[0], indexOf.call(CALLABLE, ref3) >= 0)) { - if (!closed || POSSIBLY_DIVISION.test(regex)) { - return 0; - } - } else if (ref4 = prev[0], indexOf.call(NOT_REGEX, ref4) >= 0) { - return 0; - } - } - if (!closed) { - this.error('missing / (unclosed regex)'); - } - break; - default: - return 0; - } - flags = REGEX_FLAGS.exec(this.chunk.slice(index))[0]; - end = index + flags.length; - origin = this.makeToken('REGEX', null, 0, end); - switch (false) { - case !!VALID_FLAGS.test(flags): - this.error("invalid regular expression flags " + flags, { - offset: index, - length: flags.length - }); - break; - case !(regex || tokens.length === 1): - if (body == null) { - body = this.formatHeregex(tokens[0][1]); - } - this.token('REGEX', "" + (this.makeDelimitedLiteral(body, { - delimiter: '/' - })) + flags, 0, end, origin); - break; - default: - this.token('REGEX_START', '(', 0, 0, origin); - this.token('IDENTIFIER', 'RegExp', 0, 0); - this.token('CALL_START', '(', 0, 0); - this.mergeInterpolationTokens(tokens, { - delimiter: '"', - double: true - }, this.formatHeregex); - if (flags) { - this.token(',', ',', index, 0); - this.token('STRING', '"' + flags + '"', index, flags.length); - } - this.token(')', ')', end, 0); - this.token('REGEX_END', ')', end, 0); - } - return end; - }; - - Lexer.prototype.lineToken = function() { - var diff, indent, match, noNewlines, size; - if (!(match = MULTI_DENT.exec(this.chunk))) { - return 0; - } - indent = match[0]; - this.seenFor = false; - size = indent.length - 1 - indent.lastIndexOf('\n'); - noNewlines = this.unfinished(); - if (size - this.indebt === this.indent) { - if (noNewlines) { - this.suppressNewlines(); - } else { - this.newlineToken(0); - } - return indent.length; - } - if (size > this.indent) { - if (noNewlines) { - this.indebt = size - this.indent; - this.suppressNewlines(); - return indent.length; - } - if (!this.tokens.length) { - this.baseIndent = this.indent = size; - return indent.length; - } - diff = size - this.indent + this.outdebt; - this.token('INDENT', diff, indent.length - size, size); - this.indents.push(diff); - this.ends.push({ - tag: 'OUTDENT' - }); - this.outdebt = this.indebt = 0; - this.indent = size; - } else if (size < this.baseIndent) { - this.error('missing indentation', { - offset: indent.length - }); - } else { - this.indebt = 0; - this.outdentToken(this.indent - size, noNewlines, indent.length); - } - return indent.length; - }; - - Lexer.prototype.outdentToken = function(moveOut, noNewlines, outdentLength) { - var decreasedIndent, dent, lastIndent, ref2; - decreasedIndent = this.indent - moveOut; - while (moveOut > 0) { - lastIndent = this.indents[this.indents.length - 1]; - if (!lastIndent) { - moveOut = 0; - } else if (lastIndent === this.outdebt) { - moveOut -= this.outdebt; - this.outdebt = 0; - } else if (lastIndent < this.outdebt) { - this.outdebt -= lastIndent; - moveOut -= lastIndent; - } else { - dent = this.indents.pop() + this.outdebt; - if (outdentLength && (ref2 = this.chunk[outdentLength], indexOf.call(INDENTABLE_CLOSERS, ref2) >= 0)) { - decreasedIndent -= dent - moveOut; - moveOut = dent; - } - this.outdebt = 0; - this.pair('OUTDENT'); - this.token('OUTDENT', moveOut, 0, outdentLength); - moveOut -= dent; - } - } - if (dent) { - this.outdebt -= moveOut; - } - while (this.value() === ';') { - this.tokens.pop(); - } - if (!(this.tag() === 'TERMINATOR' || noNewlines)) { - this.token('TERMINATOR', '\n', outdentLength, 0); - } - this.indent = decreasedIndent; - return this; - }; - - Lexer.prototype.whitespaceToken = function() { - var match, nline, prev, ref2; - if (!((match = WHITESPACE.exec(this.chunk)) || (nline = this.chunk.charAt(0) === '\n'))) { - return 0; - } - ref2 = this.tokens, prev = ref2[ref2.length - 1]; - if (prev) { - prev[match ? 'spaced' : 'newLine'] = true; - } - if (match) { - return match[0].length; - } else { - return 0; - } - }; - - Lexer.prototype.newlineToken = function(offset) { - while (this.value() === ';') { - this.tokens.pop(); - } - if (this.tag() !== 'TERMINATOR') { - this.token('TERMINATOR', '\n', offset, 0); - } - return this; - }; - - Lexer.prototype.suppressNewlines = function() { - if (this.value() === '\\') { - this.tokens.pop(); - } - return this; - }; - - Lexer.prototype.literalToken = function() { - var match, prev, ref2, ref3, ref4, ref5, ref6, tag, token, value; - if (match = OPERATOR.exec(this.chunk)) { - value = match[0]; - if (CODE.test(value)) { - this.tagParameters(); - } - } else { - value = this.chunk.charAt(0); - } - tag = value; - ref2 = this.tokens, prev = ref2[ref2.length - 1]; - if (value === '=' && prev) { - if (!prev[1].reserved && (ref3 = prev[1], indexOf.call(JS_FORBIDDEN, ref3) >= 0)) { - this.error("reserved word '" + prev[1] + "' can't be assigned", prev[2]); - } - if ((ref4 = prev[1]) === '||' || ref4 === '&&') { - prev[0] = 'COMPOUND_ASSIGN'; - prev[1] += '='; - return value.length; - } - } - if (value === ';') { - this.seenFor = false; - tag = 'TERMINATOR'; - } else if (indexOf.call(MATH, value) >= 0) { - tag = 'MATH'; - } else if (indexOf.call(COMPARE, value) >= 0) { - tag = 'COMPARE'; - } else if (indexOf.call(COMPOUND_ASSIGN, value) >= 0) { - tag = 'COMPOUND_ASSIGN'; - } else if (indexOf.call(UNARY, value) >= 0) { - tag = 'UNARY'; - } else if (indexOf.call(UNARY_MATH, value) >= 0) { - tag = 'UNARY_MATH'; - } else if (indexOf.call(SHIFT, value) >= 0) { - tag = 'SHIFT'; - } else if (indexOf.call(LOGIC, value) >= 0 || value === '?' && (prev != null ? prev.spaced : void 0)) { - tag = 'LOGIC'; - } else if (prev && !prev.spaced) { - if (value === '(' && (ref5 = prev[0], indexOf.call(CALLABLE, ref5) >= 0)) { - if (prev[0] === '?') { - prev[0] = 'FUNC_EXIST'; - } - tag = 'CALL_START'; - } else if (value === '[' && (ref6 = prev[0], indexOf.call(INDEXABLE, ref6) >= 0)) { - tag = 'INDEX_START'; - switch (prev[0]) { - case '?': - prev[0] = 'INDEX_SOAK'; - } - } - } - token = this.makeToken(tag, value); - switch (value) { - case '(': - case '{': - case '[': - this.ends.push({ - tag: INVERSES[value], - origin: token - }); - break; - case ')': - case '}': - case ']': - this.pair(value); - } - this.tokens.push(token); - return value.length; - }; - - Lexer.prototype.tagParameters = function() { - var i, stack, tok, tokens; - if (this.tag() !== ')') { - return this; - } - stack = []; - tokens = this.tokens; - i = tokens.length; - tokens[--i][0] = 'PARAM_END'; - while (tok = tokens[--i]) { - switch (tok[0]) { - case ')': - stack.push(tok); - break; - case '(': - case 'CALL_START': - if (stack.length) { - stack.pop(); - } else if (tok[0] === '(') { - tok[0] = 'PARAM_START'; - return this; - } else { - return this; - } - } - } - return this; - }; - - Lexer.prototype.closeIndentation = function() { - return this.outdentToken(this.indent); - }; - - Lexer.prototype.matchWithInterpolations = function(regex, delimiter) { - var close, column, firstToken, index, lastToken, line, nested, offsetInChunk, open, ref2, ref3, ref4, str, strPart, tokens; - tokens = []; - offsetInChunk = delimiter.length; - if (this.chunk.slice(0, offsetInChunk) !== delimiter) { - return null; - } - str = this.chunk.slice(offsetInChunk); - while (true) { - strPart = regex.exec(str)[0]; - this.validateEscapes(strPart, { - isRegex: delimiter.charAt(0) === '/', - offsetInChunk: offsetInChunk - }); - tokens.push(this.makeToken('NEOSTRING', strPart, offsetInChunk)); - str = str.slice(strPart.length); - offsetInChunk += strPart.length; - if (str.slice(0, 2) !== '#{') { - break; - } - ref2 = this.getLineAndColumnFromChunk(offsetInChunk + 1), line = ref2[0], column = ref2[1]; - ref3 = new Lexer().tokenize(str.slice(1), { - line: line, - column: column, - untilBalanced: true - }), nested = ref3.tokens, index = ref3.index; - index += 1; - open = nested[0], close = nested[nested.length - 1]; - open[0] = open[1] = '('; - close[0] = close[1] = ')'; - close.origin = ['', 'end of interpolation', close[2]]; - if (((ref4 = nested[1]) != null ? ref4[0] : void 0) === 'TERMINATOR') { - nested.splice(1, 1); - } - tokens.push(['TOKENS', nested]); - str = str.slice(index); - offsetInChunk += index; - } - if (str.slice(0, delimiter.length) !== delimiter) { - this.error("missing " + delimiter, { - length: delimiter.length - }); - } - firstToken = tokens[0], lastToken = tokens[tokens.length - 1]; - firstToken[2].first_column -= delimiter.length; - lastToken[2].last_column += delimiter.length; - if (lastToken[1].length === 0) { - lastToken[2].last_column -= 1; - } - return { - tokens: tokens, - index: offsetInChunk + delimiter.length - }; - }; - - Lexer.prototype.mergeInterpolationTokens = function(tokens, options, fn) { - var converted, firstEmptyStringIndex, firstIndex, i, j, lastToken, len, locationToken, lparen, plusToken, ref2, rparen, tag, token, tokensToPush, value; - if (tokens.length > 1) { - lparen = this.token('STRING_START', '(', 0, 0); - } - firstIndex = this.tokens.length; - for (i = j = 0, len = tokens.length; j < len; i = ++j) { - token = tokens[i]; - tag = token[0], value = token[1]; - switch (tag) { - case 'TOKENS': - if (value.length === 2) { - continue; - } - locationToken = value[0]; - tokensToPush = value; - break; - case 'NEOSTRING': - converted = fn(token[1], i); - if (converted.length === 0) { - if (i === 0) { - firstEmptyStringIndex = this.tokens.length; - } else { - continue; - } - } - if (i === 2 && (firstEmptyStringIndex != null)) { - this.tokens.splice(firstEmptyStringIndex, 2); - } - token[0] = 'STRING'; - token[1] = this.makeDelimitedLiteral(converted, options); - locationToken = token; - tokensToPush = [token]; - } - if (this.tokens.length > firstIndex) { - plusToken = this.token('+', '+'); - plusToken[2] = { - first_line: locationToken[2].first_line, - first_column: locationToken[2].first_column, - last_line: locationToken[2].first_line, - last_column: locationToken[2].first_column - }; - } - (ref2 = this.tokens).push.apply(ref2, tokensToPush); - } - if (lparen) { - lastToken = tokens[tokens.length - 1]; - lparen.origin = [ - 'STRING', null, { - first_line: lparen[2].first_line, - first_column: lparen[2].first_column, - last_line: lastToken[2].last_line, - last_column: lastToken[2].last_column - } - ]; - rparen = this.token('STRING_END', ')'); - return rparen[2] = { - first_line: lastToken[2].last_line, - first_column: lastToken[2].last_column, - last_line: lastToken[2].last_line, - last_column: lastToken[2].last_column - }; - } - }; - - Lexer.prototype.pair = function(tag) { - var lastIndent, prev, ref2, ref3, wanted; - ref2 = this.ends, prev = ref2[ref2.length - 1]; - if (tag !== (wanted = prev != null ? prev.tag : void 0)) { - if ('OUTDENT' !== wanted) { - this.error("unmatched " + tag); - } - ref3 = this.indents, lastIndent = ref3[ref3.length - 1]; - this.outdentToken(lastIndent, true); - return this.pair(tag); - } - return this.ends.pop(); - }; - - Lexer.prototype.getLineAndColumnFromChunk = function(offset) { - var column, lastLine, lineCount, ref2, string; - if (offset === 0) { - return [this.chunkLine, this.chunkColumn]; - } - if (offset >= this.chunk.length) { - string = this.chunk; - } else { - string = this.chunk.slice(0, +(offset - 1) + 1 || 9e9); - } - lineCount = count(string, '\n'); - column = this.chunkColumn; - if (lineCount > 0) { - ref2 = string.split('\n'), lastLine = ref2[ref2.length - 1]; - column = lastLine.length; - } else { - column += string.length; - } - return [this.chunkLine + lineCount, column]; - }; - - Lexer.prototype.makeToken = function(tag, value, offsetInChunk, length) { - var lastCharacter, locationData, ref2, ref3, token; - if (offsetInChunk == null) { - offsetInChunk = 0; - } - if (length == null) { - length = value.length; - } - locationData = {}; - ref2 = this.getLineAndColumnFromChunk(offsetInChunk), locationData.first_line = ref2[0], locationData.first_column = ref2[1]; - lastCharacter = Math.max(0, length - 1); - ref3 = this.getLineAndColumnFromChunk(offsetInChunk + lastCharacter), locationData.last_line = ref3[0], locationData.last_column = ref3[1]; - token = [tag, value, locationData]; - return token; - }; - - Lexer.prototype.token = function(tag, value, offsetInChunk, length, origin) { - var token; - token = this.makeToken(tag, value, offsetInChunk, length); - if (origin) { - token.origin = origin; - } - this.tokens.push(token); - return token; - }; - - Lexer.prototype.tag = function() { - var ref2, token; - ref2 = this.tokens, token = ref2[ref2.length - 1]; - return token != null ? token[0] : void 0; - }; - - Lexer.prototype.value = function() { - var ref2, token; - ref2 = this.tokens, token = ref2[ref2.length - 1]; - return token != null ? token[1] : void 0; - }; - - Lexer.prototype.unfinished = function() { - var ref2; - return LINE_CONTINUER.test(this.chunk) || ((ref2 = this.tag()) === '\\' || ref2 === '.' || ref2 === '?.' || ref2 === '?::' || ref2 === 'UNARY' || ref2 === 'MATH' || ref2 === 'UNARY_MATH' || ref2 === '+' || ref2 === '-' || ref2 === 'YIELD' || ref2 === '**' || ref2 === 'SHIFT' || ref2 === 'RELATION' || ref2 === 'COMPARE' || ref2 === 'LOGIC' || ref2 === 'THROW' || ref2 === 'EXTENDS'); - }; - - Lexer.prototype.formatString = function(str) { - return str.replace(STRING_OMIT, '$1'); - }; - - Lexer.prototype.formatHeregex = function(str) { - return str.replace(HEREGEX_OMIT, '$1$2'); - }; - - Lexer.prototype.validateEscapes = function(str, options) { - var before, hex, invalidEscape, match, message, octal, ref2, unicode; - if (options == null) { - options = {}; - } - match = INVALID_ESCAPE.exec(str); - if (!match) { - return; - } - match[0], before = match[1], octal = match[2], hex = match[3], unicode = match[4]; - if (options.isRegex && octal && octal.charAt(0) !== '0') { - return; - } - message = octal ? "octal escape sequences are not allowed" : "invalid escape sequence"; - invalidEscape = "\\" + (octal || hex || unicode); - return this.error(message + " " + invalidEscape, { - offset: ((ref2 = options.offsetInChunk) != null ? ref2 : 0) + match.index + before.length, - length: invalidEscape.length - }); - }; - - Lexer.prototype.makeDelimitedLiteral = function(body, options) { - var regex; - if (options == null) { - options = {}; - } - if (body === '' && options.delimiter === '/') { - body = '(?:)'; - } - regex = RegExp("(\\\\\\\\)|(\\\\0(?=[1-7]))|\\\\?(" + options.delimiter + ")|\\\\?(?:(\\n)|(\\r)|(\\u2028)|(\\u2029))|(\\\\.)", "g"); - body = body.replace(regex, function(match, backslash, nul, delimiter, lf, cr, ls, ps, other) { - switch (false) { - case !backslash: - if (options.double) { - return backslash + backslash; - } else { - return backslash; - } - case !nul: - return '\\x00'; - case !delimiter: - return "\\" + delimiter; - case !lf: - return '\\n'; - case !cr: - return '\\r'; - case !ls: - return '\\u2028'; - case !ps: - return '\\u2029'; - case !other: - if (options.double) { - return "\\" + other; - } else { - return other; - } - } - }); - return "" + options.delimiter + body + options.delimiter; - }; - - Lexer.prototype.error = function(message, options) { - var first_column, first_line, location, ref2, ref3, ref4; - if (options == null) { - options = {}; - } - location = 'first_line' in options ? options : ((ref3 = this.getLineAndColumnFromChunk((ref2 = options.offset) != null ? ref2 : 0), first_line = ref3[0], first_column = ref3[1], ref3), { - first_line: first_line, - first_column: first_column, - last_column: first_column + ((ref4 = options.length) != null ? ref4 : 1) - 1 - }); - return throwSyntaxError(message, location); - }; - - return Lexer; - - })(); - - JS_KEYWORDS = ['true', 'false', 'null', 'this', 'new', 'delete', 'typeof', 'in', 'instanceof', 'return', 'throw', 'break', 'continue', 'debugger', 'yield', 'if', 'else', 'switch', 'for', 'while', 'do', 'try', 'catch', 'finally', 'class', 'extends', 'super']; - - COFFEE_KEYWORDS = ['undefined', 'then', 'unless', 'until', 'loop', 'of', 'by', 'when']; - - COFFEE_ALIAS_MAP = { - and: '&&', - or: '||', - is: '==', - isnt: '!=', - not: '!', - yes: 'true', - no: 'false', - on: 'true', - off: 'false' - }; - - COFFEE_ALIASES = (function() { - var results; - results = []; - for (key in COFFEE_ALIAS_MAP) { - results.push(key); - } - return results; - })(); - - COFFEE_KEYWORDS = COFFEE_KEYWORDS.concat(COFFEE_ALIASES); - - RESERVED = ['case', 'default', 'function', 'var', 'void', 'with', 'const', 'let', 'enum', 'export', 'import', 'native', 'implements', 'interface', 'package', 'private', 'protected', 'public', 'static']; - - STRICT_PROSCRIBED = ['arguments', 'eval', 'yield*']; - - JS_FORBIDDEN = JS_KEYWORDS.concat(RESERVED).concat(STRICT_PROSCRIBED); - - exports.RESERVED = RESERVED.concat(JS_KEYWORDS).concat(COFFEE_KEYWORDS).concat(STRICT_PROSCRIBED); - - exports.STRICT_PROSCRIBED = STRICT_PROSCRIBED; - - BOM = 65279; - - IDENTIFIER = /^(?!\d)((?:(?!\s)[$\w\x7f-\uffff])+)([^\n\S]*:(?!:))?/; - - NUMBER = /^0b[01]+|^0o[0-7]+|^0x[\da-f]+|^\d*\.?\d+(?:e[+-]?\d+)?/i; - - OPERATOR = /^(?:[-=]>|[-+*\/%<>&|^!?=]=|>>>=?|([-+:])\1|([&|<>*\/%])\2=?|\?(\.|::)|\.{2,3})/; - - WHITESPACE = /^[^\n\S]+/; - - COMMENT = /^###([^#][\s\S]*?)(?:###[^\n\S]*|###$)|^(?:\s*#(?!##[^#]).*)+/; - - CODE = /^[-=]>/; - - MULTI_DENT = /^(?:\n[^\n\S]*)+/; - - JSTOKEN = /^`[^\\`]*(?:\\.[^\\`]*)*`/; - - STRING_START = /^(?:'''|"""|'|")/; - - STRING_SINGLE = /^(?:[^\\']|\\[\s\S])*/; - - STRING_DOUBLE = /^(?:[^\\"#]|\\[\s\S]|\#(?!\{))*/; - - HEREDOC_SINGLE = /^(?:[^\\']|\\[\s\S]|'(?!''))*/; - - HEREDOC_DOUBLE = /^(?:[^\\"#]|\\[\s\S]|"(?!"")|\#(?!\{))*/; - - STRING_OMIT = /((?:\\\\)+)|\\[^\S\n]*\n\s*/g; - - SIMPLE_STRING_OMIT = /\s*\n\s*/g; - - HEREDOC_INDENT = /\n+([^\n\S]*)(?=\S)/g; - - REGEX = /^\/(?!\/)((?:[^[\/\n\\]|\\[^\n]|\[(?:\\[^\n]|[^\]\n\\])*\])*)(\/)?/; - - REGEX_FLAGS = /^\w*/; - - VALID_FLAGS = /^(?!.*(.).*\1)[imgy]*$/; - - HEREGEX = /^(?:[^\\\/#]|\\[\s\S]|\/(?!\/\/)|\#(?!\{))*/; - - HEREGEX_OMIT = /((?:\\\\)+)|\\(\s)|\s+(?:#.*)?/g; - - REGEX_ILLEGAL = /^(\/|\/{3}\s*)(\*)/; - - POSSIBLY_DIVISION = /^\/=?\s/; - - HERECOMMENT_ILLEGAL = /\*\//; - - LINE_CONTINUER = /^\s*(?:,|\??\.(?![.\d])|::)/; - - INVALID_ESCAPE = /((?:^|[^\\])(?:\\\\)*)\\(?:(0[0-7]|[1-7])|(x(?![\da-fA-F]{2}).{0,2})|(u(?![\da-fA-F]{4}).{0,4}))/; - - LEADING_BLANK_LINE = /^[^\n\S]*\n/; - - TRAILING_BLANK_LINE = /\n[^\n\S]*$/; - - TRAILING_SPACES = /\s+$/; - - COMPOUND_ASSIGN = ['-=', '+=', '/=', '*=', '%=', '||=', '&&=', '?=', '<<=', '>>=', '>>>=', '&=', '^=', '|=', '**=', '//=', '%%=']; - - UNARY = ['NEW', 'TYPEOF', 'DELETE', 'DO']; - - UNARY_MATH = ['!', '~']; - - LOGIC = ['&&', '||', '&', '|', '^']; - - SHIFT = ['<<', '>>', '>>>']; - - COMPARE = ['==', '!=', '<', '>', '<=', '>=']; - - MATH = ['*', '/', '%', '//', '%%']; - - RELATION = ['IN', 'OF', 'INSTANCEOF']; - - BOOL = ['TRUE', 'FALSE']; - - CALLABLE = ['IDENTIFIER', ')', ']', '?', '@', 'THIS', 'SUPER']; - - INDEXABLE = CALLABLE.concat(['NUMBER', 'STRING', 'STRING_END', 'REGEX', 'REGEX_END', 'BOOL', 'NULL', 'UNDEFINED', '}', '::']); - - NOT_REGEX = INDEXABLE.concat(['++', '--']); - - LINE_BREAK = ['INDENT', 'OUTDENT', 'TERMINATOR']; - - INDENTABLE_CLOSERS = [')', '}', ']']; - -}).call(this); - - return module.exports; -})();require['./parser'] = (function() { - var exports = {}, module = {exports: exports}; - /* parser generated by jison 0.4.15 */ -/* - Returns a Parser object of the following structure: - - Parser: { - yy: {} - } - - Parser.prototype: { - yy: {}, - trace: function(), - symbols_: {associative list: name ==> number}, - terminals_: {associative list: number ==> name}, - productions_: [...], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$), - table: [...], - defaultActions: {...}, - parseError: function(str, hash), - parse: function(input), - - lexer: { - EOF: 1, - parseError: function(str, hash), - setInput: function(input), - input: function(), - unput: function(str), - more: function(), - less: function(n), - pastInput: function(), - upcomingInput: function(), - showPosition: function(), - test_match: function(regex_match_array, rule_index), - next: function(), - lex: function(), - begin: function(condition), - popState: function(), - _currentRules: function(), - topState: function(), - pushState: function(condition), - - options: { - ranges: boolean (optional: true ==> token location info will include a .range[] member) - flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match) - backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code) - }, - - performAction: function(yy, yy_, $avoiding_name_collisions, YY_START), - rules: [...], - conditions: {associative list: name ==> set}, - } - } - - - token location info (@$, _$, etc.): { - first_line: n, - last_line: n, - first_column: n, - last_column: n, - range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) - } - - - the parseError function receives a 'hash' object with these members for lexer and parser errors: { - text: (matched text) - token: (the produced terminal token, if any) - line: (yylineno) - } - while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: { - loc: (yylloc) - expected: (string describing the set of expected tokens) - recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) - } -*/ -var parser = (function(){ -var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,20],$V1=[1,75],$V2=[1,71],$V3=[1,76],$V4=[1,77],$V5=[1,73],$V6=[1,74],$V7=[1,50],$V8=[1,52],$V9=[1,53],$Va=[1,54],$Vb=[1,55],$Vc=[1,45],$Vd=[1,46],$Ve=[1,27],$Vf=[1,60],$Vg=[1,61],$Vh=[1,70],$Vi=[1,43],$Vj=[1,26],$Vk=[1,58],$Vl=[1,59],$Vm=[1,57],$Vn=[1,38],$Vo=[1,44],$Vp=[1,56],$Vq=[1,65],$Vr=[1,66],$Vs=[1,67],$Vt=[1,68],$Vu=[1,42],$Vv=[1,64],$Vw=[1,29],$Vx=[1,30],$Vy=[1,31],$Vz=[1,32],$VA=[1,33],$VB=[1,34],$VC=[1,35],$VD=[1,78],$VE=[1,6,26,34,108],$VF=[1,88],$VG=[1,81],$VH=[1,80],$VI=[1,79],$VJ=[1,82],$VK=[1,83],$VL=[1,84],$VM=[1,85],$VN=[1,86],$VO=[1,87],$VP=[1,91],$VQ=[1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,135,136,141,142,143,144,145,146,147],$VR=[1,97],$VS=[1,98],$VT=[1,99],$VU=[1,100],$VV=[1,102],$VW=[1,103],$VX=[1,96],$VY=[2,112],$VZ=[1,6,25,26,34,55,60,63,72,73,74,75,77,79,80,84,90,91,92,97,99,108,110,111,112,116,117,132,135,136,141,142,143,144,145,146,147],$V_=[2,79],$V$=[1,108],$V01=[2,58],$V11=[1,112],$V21=[1,117],$V31=[1,118],$V41=[1,120],$V51=[1,6,25,26,34,46,55,60,63,72,73,74,75,77,79,80,84,90,91,92,97,99,108,110,111,112,116,117,132,135,136,141,142,143,144,145,146,147],$V61=[2,76],$V71=[1,6,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,135,136,141,142,143,144,145,146,147],$V81=[1,155],$V91=[1,157],$Va1=[1,152],$Vb1=[1,6,25,26,34,46,55,60,63,72,73,74,75,77,79,80,84,86,90,91,92,97,99,108,110,111,112,116,117,132,135,136,139,140,141,142,143,144,145,146,147,148],$Vc1=[2,95],$Vd1=[1,6,25,26,34,49,55,60,63,72,73,74,75,77,79,80,84,90,91,92,97,99,108,110,111,112,116,117,132,135,136,141,142,143,144,145,146,147],$Ve1=[1,6,25,26,34,46,49,55,60,63,72,73,74,75,77,79,80,84,86,90,91,92,97,99,108,110,111,112,116,117,123,124,132,135,136,139,140,141,142,143,144,145,146,147,148],$Vf1=[1,206],$Vg1=[1,205],$Vh1=[1,6,25,26,34,38,55,60,63,72,73,74,75,77,79,80,84,90,91,92,97,99,108,110,111,112,116,117,132,135,136,141,142,143,144,145,146,147],$Vi1=[2,56],$Vj1=[1,216],$Vk1=[6,25,26,55,60],$Vl1=[6,25,26,46,55,60,63],$Vm1=[1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,135,136,142,144,145,146,147],$Vn1=[1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132],$Vo1=[72,73,74,75,77,80,90,91],$Vp1=[1,235],$Vq1=[2,133],$Vr1=[1,6,25,26,34,46,55,60,63,72,73,74,75,77,79,80,84,90,91,92,97,99,108,110,111,112,116,117,123,124,132,135,136,141,142,143,144,145,146,147],$Vs1=[1,244],$Vt1=[6,25,26,60,92,97],$Vu1=[1,6,25,26,34,55,60,63,79,84,92,97,99,108,117,132],$Vv1=[1,6,25,26,34,55,60,63,79,84,92,97,99,108,111,117,132],$Vw1=[123,124],$Vx1=[60,123,124],$Vy1=[1,255],$Vz1=[6,25,26,60,84],$VA1=[6,25,26,49,60,84],$VB1=[1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,135,136,144,145,146,147],$VC1=[11,28,30,32,33,36,37,40,41,42,43,44,51,52,53,57,58,79,82,85,89,94,95,96,102,106,107,110,112,114,116,125,131,133,134,135,136,137,139,140],$VD1=[2,122],$VE1=[6,25,26],$VF1=[2,57],$VG1=[1,268],$VH1=[1,269],$VI1=[1,6,25,26,34,55,60,63,79,84,92,97,99,104,105,108,110,111,112,116,117,127,129,132,135,136,141,142,143,144,145,146,147],$VJ1=[26,127,129],$VK1=[1,6,26,34,55,60,63,79,84,92,97,99,108,111,117,132],$VL1=[2,71],$VM1=[1,291],$VN1=[1,292],$VO1=[1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,127,132,135,136,141,142,143,144,145,146,147],$VP1=[1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,112,116,117,132],$VQ1=[1,303],$VR1=[1,304],$VS1=[6,25,26,60],$VT1=[1,6,25,26,34,55,60,63,79,84,92,97,99,104,108,110,111,112,116,117,132,135,136,141,142,143,144,145,146,147],$VU1=[25,60]; -var parser = {trace: function trace() { }, -yy: {}, -symbols_: {"error":2,"Root":3,"Body":4,"Line":5,"TERMINATOR":6,"Expression":7,"Statement":8,"Return":9,"Comment":10,"STATEMENT":11,"Value":12,"Invocation":13,"Code":14,"Operation":15,"Assign":16,"If":17,"Try":18,"While":19,"For":20,"Switch":21,"Class":22,"Throw":23,"Block":24,"INDENT":25,"OUTDENT":26,"Identifier":27,"IDENTIFIER":28,"AlphaNumeric":29,"NUMBER":30,"String":31,"STRING":32,"STRING_START":33,"STRING_END":34,"Regex":35,"REGEX":36,"REGEX_START":37,"REGEX_END":38,"Literal":39,"JS":40,"DEBUGGER":41,"UNDEFINED":42,"NULL":43,"BOOL":44,"Assignable":45,"=":46,"AssignObj":47,"ObjAssignable":48,":":49,"ThisProperty":50,"RETURN":51,"HERECOMMENT":52,"PARAM_START":53,"ParamList":54,"PARAM_END":55,"FuncGlyph":56,"->":57,"=>":58,"OptComma":59,",":60,"Param":61,"ParamVar":62,"...":63,"Array":64,"Object":65,"Splat":66,"SimpleAssignable":67,"Accessor":68,"Parenthetical":69,"Range":70,"This":71,".":72,"?.":73,"::":74,"?::":75,"Index":76,"INDEX_START":77,"IndexValue":78,"INDEX_END":79,"INDEX_SOAK":80,"Slice":81,"{":82,"AssignList":83,"}":84,"CLASS":85,"EXTENDS":86,"OptFuncExist":87,"Arguments":88,"SUPER":89,"FUNC_EXIST":90,"CALL_START":91,"CALL_END":92,"ArgList":93,"THIS":94,"@":95,"[":96,"]":97,"RangeDots":98,"..":99,"Arg":100,"SimpleArgs":101,"TRY":102,"Catch":103,"FINALLY":104,"CATCH":105,"THROW":106,"(":107,")":108,"WhileSource":109,"WHILE":110,"WHEN":111,"UNTIL":112,"Loop":113,"LOOP":114,"ForBody":115,"FOR":116,"BY":117,"ForStart":118,"ForSource":119,"ForVariables":120,"OWN":121,"ForValue":122,"FORIN":123,"FOROF":124,"SWITCH":125,"Whens":126,"ELSE":127,"When":128,"LEADING_WHEN":129,"IfBlock":130,"IF":131,"POST_IF":132,"UNARY":133,"UNARY_MATH":134,"-":135,"+":136,"YIELD":137,"FROM":138,"--":139,"++":140,"?":141,"MATH":142,"**":143,"SHIFT":144,"COMPARE":145,"LOGIC":146,"RELATION":147,"COMPOUND_ASSIGN":148,"$accept":0,"$end":1}, -terminals_: {2:"error",6:"TERMINATOR",11:"STATEMENT",25:"INDENT",26:"OUTDENT",28:"IDENTIFIER",30:"NUMBER",32:"STRING",33:"STRING_START",34:"STRING_END",36:"REGEX",37:"REGEX_START",38:"REGEX_END",40:"JS",41:"DEBUGGER",42:"UNDEFINED",43:"NULL",44:"BOOL",46:"=",49:":",51:"RETURN",52:"HERECOMMENT",53:"PARAM_START",55:"PARAM_END",57:"->",58:"=>",60:",",63:"...",72:".",73:"?.",74:"::",75:"?::",77:"INDEX_START",79:"INDEX_END",80:"INDEX_SOAK",82:"{",84:"}",85:"CLASS",86:"EXTENDS",89:"SUPER",90:"FUNC_EXIST",91:"CALL_START",92:"CALL_END",94:"THIS",95:"@",96:"[",97:"]",99:"..",102:"TRY",104:"FINALLY",105:"CATCH",106:"THROW",107:"(",108:")",110:"WHILE",111:"WHEN",112:"UNTIL",114:"LOOP",116:"FOR",117:"BY",121:"OWN",123:"FORIN",124:"FOROF",125:"SWITCH",127:"ELSE",129:"LEADING_WHEN",131:"IF",132:"POST_IF",133:"UNARY",134:"UNARY_MATH",135:"-",136:"+",137:"YIELD",138:"FROM",139:"--",140:"++",141:"?",142:"MATH",143:"**",144:"SHIFT",145:"COMPARE",146:"LOGIC",147:"RELATION",148:"COMPOUND_ASSIGN"}, -productions_: [0,[3,0],[3,1],[4,1],[4,3],[4,2],[5,1],[5,1],[8,1],[8,1],[8,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[24,2],[24,3],[27,1],[29,1],[29,1],[31,1],[31,3],[35,1],[35,3],[39,1],[39,1],[39,1],[39,1],[39,1],[39,1],[39,1],[16,3],[16,4],[16,5],[47,1],[47,3],[47,5],[47,1],[48,1],[48,1],[48,1],[9,2],[9,1],[10,1],[14,5],[14,2],[56,1],[56,1],[59,0],[59,1],[54,0],[54,1],[54,3],[54,4],[54,6],[61,1],[61,2],[61,3],[61,1],[62,1],[62,1],[62,1],[62,1],[66,2],[67,1],[67,2],[67,2],[67,1],[45,1],[45,1],[45,1],[12,1],[12,1],[12,1],[12,1],[12,1],[68,2],[68,2],[68,2],[68,2],[68,1],[68,1],[76,3],[76,2],[78,1],[78,1],[65,4],[83,0],[83,1],[83,3],[83,4],[83,6],[22,1],[22,2],[22,3],[22,4],[22,2],[22,3],[22,4],[22,5],[13,3],[13,3],[13,1],[13,2],[87,0],[87,1],[88,2],[88,4],[71,1],[71,1],[50,2],[64,2],[64,4],[98,1],[98,1],[70,5],[81,3],[81,2],[81,2],[81,1],[93,1],[93,3],[93,4],[93,4],[93,6],[100,1],[100,1],[100,1],[101,1],[101,3],[18,2],[18,3],[18,4],[18,5],[103,3],[103,3],[103,2],[23,2],[69,3],[69,5],[109,2],[109,4],[109,2],[109,4],[19,2],[19,2],[19,2],[19,1],[113,2],[113,2],[20,2],[20,2],[20,2],[115,2],[115,4],[115,2],[118,2],[118,3],[122,1],[122,1],[122,1],[122,1],[120,1],[120,3],[119,2],[119,2],[119,4],[119,4],[119,4],[119,6],[119,6],[21,5],[21,7],[21,4],[21,6],[126,1],[126,2],[128,3],[128,4],[130,3],[130,5],[17,1],[17,3],[17,3],[17,3],[15,2],[15,2],[15,2],[15,2],[15,2],[15,2],[15,3],[15,2],[15,2],[15,2],[15,2],[15,2],[15,3],[15,3],[15,3],[15,3],[15,3],[15,3],[15,3],[15,3],[15,3],[15,5],[15,4],[15,3]], -performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { -/* this == yyval */ - -var $0 = $$.length - 1; -switch (yystate) { -case 1: -return this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Block); -break; -case 2: -return this.$ = $$[$0]; -break; -case 3: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(yy.Block.wrap([$$[$0]])); -break; -case 4: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].push($$[$0])); -break; -case 5: -this.$ = $$[$0-1]; -break; -case 6: case 7: case 8: case 9: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 27: case 32: case 34: case 45: case 46: case 47: case 48: case 56: case 57: case 67: case 68: case 69: case 70: case 75: case 76: case 79: case 83: case 89: case 133: case 134: case 136: case 166: case 167: case 183: case 189: -this.$ = $$[$0]; -break; -case 10: case 25: case 26: case 28: case 30: case 33: case 35: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0])); -break; -case 23: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Block); -break; -case 24: case 31: case 90: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-1]); -break; -case 29: case 146: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Parens($$[$0-1])); -break; -case 36: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Undefined); -break; -case 37: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Null); -break; -case 38: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Bool($$[$0])); -break; -case 39: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Assign($$[$0-2], $$[$0])); -break; -case 40: -this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Assign($$[$0-3], $$[$0])); -break; -case 41: -this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Assign($$[$0-4], $$[$0-1])); -break; -case 42: case 72: case 77: case 78: case 80: case 81: case 82: case 168: case 169: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0])); -break; -case 43: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Assign(yy.addLocationDataFn(_$[$0-2])(new yy.Value($$[$0-2])), $$[$0], 'object')); -break; -case 44: -this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Assign(yy.addLocationDataFn(_$[$0-4])(new yy.Value($$[$0-4])), $$[$0-1], 'object')); -break; -case 49: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Return($$[$0])); -break; -case 50: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Return); -break; -case 51: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Comment($$[$0])); -break; -case 52: -this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Code($$[$0-3], $$[$0], $$[$0-1])); -break; -case 53: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Code([], $$[$0], $$[$0-1])); -break; -case 54: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])('func'); -break; -case 55: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])('boundfunc'); -break; -case 58: case 95: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([]); -break; -case 59: case 96: case 128: case 170: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]); -break; -case 60: case 97: case 129: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].concat($$[$0])); -break; -case 61: case 98: case 130: -this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-3].concat($$[$0])); -break; -case 62: case 99: case 132: -this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])($$[$0-5].concat($$[$0-2])); -break; -case 63: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Param($$[$0])); -break; -case 64: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Param($$[$0-1], null, true)); -break; -case 65: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Param($$[$0-2], $$[$0])); -break; -case 66: case 135: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Expansion); -break; -case 71: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Splat($$[$0-1])); -break; -case 73: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].add($$[$0])); -break; -case 74: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Value($$[$0-1], [].concat($$[$0]))); -break; -case 84: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Access($$[$0])); -break; -case 85: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Access($$[$0], 'soak')); -break; -case 86: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([yy.addLocationDataFn(_$[$0-1])(new yy.Access(new yy.Literal('prototype'))), yy.addLocationDataFn(_$[$0])(new yy.Access($$[$0]))]); -break; -case 87: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([yy.addLocationDataFn(_$[$0-1])(new yy.Access(new yy.Literal('prototype'), 'soak')), yy.addLocationDataFn(_$[$0])(new yy.Access($$[$0]))]); -break; -case 88: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Access(new yy.Literal('prototype'))); -break; -case 91: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(yy.extend($$[$0], { - soak: true - })); -break; -case 92: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Index($$[$0])); -break; -case 93: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Slice($$[$0])); -break; -case 94: -this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Obj($$[$0-2], $$[$0-3].generated)); -break; -case 100: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Class); -break; -case 101: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Class(null, null, $$[$0])); -break; -case 102: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Class(null, $$[$0])); -break; -case 103: -this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Class(null, $$[$0-1], $$[$0])); -break; -case 104: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Class($$[$0])); -break; -case 105: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Class($$[$0-1], null, $$[$0])); -break; -case 106: -this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Class($$[$0-2], $$[$0])); -break; -case 107: -this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Class($$[$0-3], $$[$0-1], $$[$0])); -break; -case 108: case 109: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Call($$[$0-2], $$[$0], $$[$0-1])); -break; -case 110: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Call('super', [new yy.Splat(new yy.Literal('arguments'))])); -break; -case 111: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Call('super', $$[$0])); -break; -case 112: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(false); -break; -case 113: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(true); -break; -case 114: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([]); -break; -case 115: case 131: -this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-2]); -break; -case 116: case 117: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value(new yy.Literal('this'))); -break; -case 118: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Value(yy.addLocationDataFn(_$[$0-1])(new yy.Literal('this')), [yy.addLocationDataFn(_$[$0])(new yy.Access($$[$0]))], 'this')); -break; -case 119: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Arr([])); -break; -case 120: -this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Arr($$[$0-2])); -break; -case 121: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])('inclusive'); -break; -case 122: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])('exclusive'); -break; -case 123: -this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Range($$[$0-3], $$[$0-1], $$[$0-2])); -break; -case 124: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Range($$[$0-2], $$[$0], $$[$0-1])); -break; -case 125: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Range($$[$0-1], null, $$[$0])); -break; -case 126: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Range(null, $$[$0], $$[$0-1])); -break; -case 127: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Range(null, null, $$[$0])); -break; -case 137: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([].concat($$[$0-2], $$[$0])); -break; -case 138: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Try($$[$0])); -break; -case 139: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Try($$[$0-1], $$[$0][0], $$[$0][1])); -break; -case 140: -this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Try($$[$0-2], null, null, $$[$0])); -break; -case 141: -this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Try($$[$0-3], $$[$0-2][0], $$[$0-2][1], $$[$0])); -break; -case 142: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([$$[$0-1], $$[$0]]); -break; -case 143: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([yy.addLocationDataFn(_$[$0-1])(new yy.Value($$[$0-1])), $$[$0]]); -break; -case 144: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([null, $$[$0]]); -break; -case 145: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Throw($$[$0])); -break; -case 147: -this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Parens($$[$0-2])); -break; -case 148: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While($$[$0])); -break; -case 149: -this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.While($$[$0-2], { - guard: $$[$0] - })); -break; -case 150: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While($$[$0], { - invert: true - })); -break; -case 151: -this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.While($$[$0-2], { - invert: true, - guard: $$[$0] - })); -break; -case 152: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].addBody($$[$0])); -break; -case 153: case 154: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0].addBody(yy.addLocationDataFn(_$[$0-1])(yy.Block.wrap([$$[$0-1]])))); -break; -case 155: -this.$ = yy.addLocationDataFn(_$[$0], _$[$0])($$[$0]); -break; -case 156: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While(yy.addLocationDataFn(_$[$0-1])(new yy.Literal('true'))).addBody($$[$0])); -break; -case 157: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While(yy.addLocationDataFn(_$[$0-1])(new yy.Literal('true'))).addBody(yy.addLocationDataFn(_$[$0])(yy.Block.wrap([$$[$0]])))); -break; -case 158: case 159: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0-1], $$[$0])); -break; -case 160: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0], $$[$0-1])); -break; -case 161: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({ - source: yy.addLocationDataFn(_$[$0])(new yy.Value($$[$0])) - }); -break; -case 162: -this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({ - source: yy.addLocationDataFn(_$[$0-2])(new yy.Value($$[$0-2])), - step: $$[$0] - }); -break; -case 163: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])((function () { - $$[$0].own = $$[$0-1].own; - $$[$0].name = $$[$0-1][0]; - $$[$0].index = $$[$0-1][1]; - return $$[$0]; - }())); -break; -case 164: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0]); -break; -case 165: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])((function () { - $$[$0].own = true; - return $$[$0]; - }())); -break; -case 171: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([$$[$0-2], $$[$0]]); -break; -case 172: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({ - source: $$[$0] - }); -break; -case 173: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({ - source: $$[$0], - object: true - }); -break; -case 174: -this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({ - source: $$[$0-2], - guard: $$[$0] - }); -break; -case 175: -this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({ - source: $$[$0-2], - guard: $$[$0], - object: true - }); -break; -case 176: -this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({ - source: $$[$0-2], - step: $$[$0] - }); -break; -case 177: -this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])({ - source: $$[$0-4], - guard: $$[$0-2], - step: $$[$0] - }); -break; -case 178: -this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])({ - source: $$[$0-4], - step: $$[$0-2], - guard: $$[$0] - }); -break; -case 179: -this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Switch($$[$0-3], $$[$0-1])); -break; -case 180: -this.$ = yy.addLocationDataFn(_$[$0-6], _$[$0])(new yy.Switch($$[$0-5], $$[$0-3], $$[$0-1])); -break; -case 181: -this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Switch(null, $$[$0-1])); -break; -case 182: -this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])(new yy.Switch(null, $$[$0-3], $$[$0-1])); -break; -case 184: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].concat($$[$0])); -break; -case 185: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([[$$[$0-1], $$[$0]]]); -break; -case 186: -this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])([[$$[$0-2], $$[$0-1]]]); -break; -case 187: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0-1], $$[$0], { - type: $$[$0-2] - })); -break; -case 188: -this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])($$[$0-4].addElse(yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0-1], $$[$0], { - type: $$[$0-2] - })))); -break; -case 190: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].addElse($$[$0])); -break; -case 191: case 192: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0], yy.addLocationDataFn(_$[$0-2])(yy.Block.wrap([$$[$0-2]])), { - type: $$[$0-1], - statement: true - })); -break; -case 193: case 194: case 197: case 198: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op($$[$0-1], $$[$0])); -break; -case 195: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('-', $$[$0])); -break; -case 196: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('+', $$[$0])); -break; -case 199: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-2].concat($$[$0-1]), $$[$0])); -break; -case 200: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('--', $$[$0])); -break; -case 201: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('++', $$[$0])); -break; -case 202: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('--', $$[$0-1], null, true)); -break; -case 203: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('++', $$[$0-1], null, true)); -break; -case 204: -this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Existence($$[$0-1])); -break; -case 205: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op('+', $$[$0-2], $$[$0])); -break; -case 206: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op('-', $$[$0-2], $$[$0])); -break; -case 207: case 208: case 209: case 210: case 211: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0])); -break; -case 212: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])((function () { - if ($$[$0-1].charAt(0) === '!') { - return new yy.Op($$[$0-1].slice(1), $$[$0-2], $$[$0]).invert(); - } else { - return new yy.Op($$[$0-1], $$[$0-2], $$[$0]); - } - }())); -break; -case 213: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Assign($$[$0-2], $$[$0], $$[$0-1])); -break; -case 214: -this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Assign($$[$0-4], $$[$0-1], $$[$0-3])); -break; -case 215: -this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Assign($$[$0-3], $$[$0], $$[$0-2])); -break; -case 216: -this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Extends($$[$0-2], $$[$0])); -break; -} -}, -table: [{1:[2,1],3:1,4:2,5:3,7:4,8:5,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{1:[3]},{1:[2,2],6:$VD},o($VE,[2,3]),o($VE,[2,6],{118:69,109:89,115:90,110:$Vq,112:$Vr,116:$Vt,132:$VF,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),o($VE,[2,7],{118:69,109:92,115:93,110:$Vq,112:$Vr,116:$Vt,132:$VP}),o($VQ,[2,11],{87:94,68:95,76:101,72:$VR,73:$VS,74:$VT,75:$VU,77:$VV,80:$VW,90:$VX,91:$VY}),o($VQ,[2,12],{76:101,87:104,68:105,72:$VR,73:$VS,74:$VT,75:$VU,77:$VV,80:$VW,90:$VX,91:$VY}),o($VQ,[2,13]),o($VQ,[2,14]),o($VQ,[2,15]),o($VQ,[2,16]),o($VQ,[2,17]),o($VQ,[2,18]),o($VQ,[2,19]),o($VQ,[2,20]),o($VQ,[2,21]),o($VQ,[2,22]),o($VQ,[2,8]),o($VQ,[2,9]),o($VQ,[2,10]),o($VZ,$V_,{46:[1,106]}),o($VZ,[2,80]),o($VZ,[2,81]),o($VZ,[2,82]),o($VZ,[2,83]),o([1,6,25,26,34,38,55,60,63,72,73,74,75,77,79,80,84,90,92,97,99,108,110,111,112,116,117,132,135,136,141,142,143,144,145,146,147],[2,110],{88:107,91:$V$}),o([6,25,55,60],$V01,{54:109,61:110,62:111,27:113,50:114,64:115,65:116,28:$V1,63:$V11,82:$Vh,95:$V21,96:$V31}),{24:119,25:$V41},{7:121,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:123,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:124,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:125,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:127,8:126,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,138:[1,128],139:$VB,140:$VC},{12:130,13:131,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:132,50:63,64:47,65:48,67:129,69:23,70:24,71:25,82:$Vh,89:$Vj,94:$Vk,95:$Vl,96:$Vm,107:$Vp},{12:130,13:131,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:132,50:63,64:47,65:48,67:133,69:23,70:24,71:25,82:$Vh,89:$Vj,94:$Vk,95:$Vl,96:$Vm,107:$Vp},o($V51,$V61,{86:[1,137],139:[1,134],140:[1,135],148:[1,136]}),o($VQ,[2,189],{127:[1,138]}),{24:139,25:$V41},{24:140,25:$V41},o($VQ,[2,155]),{24:141,25:$V41},{7:142,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,143],27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o($V71,[2,100],{39:22,69:23,70:24,71:25,64:47,65:48,29:49,35:51,27:62,50:63,31:72,12:130,13:131,45:132,24:144,67:146,25:$V41,28:$V1,30:$V2,32:$V3,33:$V4,36:$V5,37:$V6,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,82:$Vh,86:[1,145],89:$Vj,94:$Vk,95:$Vl,96:$Vm,107:$Vp}),{7:147,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,141,142,143,144,145,146,147],[2,50],{12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,9:18,10:19,45:21,39:22,69:23,70:24,71:25,56:28,67:36,130:37,109:39,113:40,115:41,64:47,65:48,29:49,35:51,27:62,50:63,118:69,31:72,8:122,7:148,11:$V0,28:$V1,30:$V2,32:$V3,33:$V4,36:$V5,37:$V6,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,51:$Vc,52:$Vd,53:$Ve,57:$Vf,58:$Vg,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,114:$Vs,125:$Vu,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC}),o($VQ,[2,51]),o($V51,[2,77]),o($V51,[2,78]),o($VZ,[2,32]),o($VZ,[2,33]),o($VZ,[2,34]),o($VZ,[2,35]),o($VZ,[2,36]),o($VZ,[2,37]),o($VZ,[2,38]),{4:149,5:3,7:4,8:5,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,150],27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:151,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:$V81,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,63:$V91,64:47,65:48,66:156,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,93:153,94:$Vk,95:$Vl,96:$Vm,97:$Va1,100:154,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o($VZ,[2,116]),o($VZ,[2,117],{27:158,28:$V1}),{25:[2,54]},{25:[2,55]},o($Vb1,[2,72]),o($Vb1,[2,75]),{7:159,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:160,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:161,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:163,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:162,25:$V41,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{27:168,28:$V1,50:169,64:170,65:171,70:164,82:$Vh,95:$V21,96:$Vm,120:165,121:[1,166],122:167},{119:172,123:[1,173],124:[1,174]},o([6,25,60,84],$Vc1,{31:72,83:175,47:176,48:177,10:178,27:179,29:180,50:181,28:$V1,30:$V2,32:$V3,33:$V4,52:$Vd,95:$V21}),o($Vd1,[2,26]),o($Vd1,[2,27]),o($VZ,[2,30]),{12:130,13:182,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:132,50:63,64:47,65:48,67:183,69:23,70:24,71:25,82:$Vh,89:$Vj,94:$Vk,95:$Vl,96:$Vm,107:$Vp},o($Ve1,[2,25]),o($Vd1,[2,28]),{4:184,5:3,7:4,8:5,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o($VE,[2,5],{7:4,8:5,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,9:18,10:19,45:21,39:22,69:23,70:24,71:25,56:28,67:36,130:37,109:39,113:40,115:41,64:47,65:48,29:49,35:51,27:62,50:63,118:69,31:72,5:185,11:$V0,28:$V1,30:$V2,32:$V3,33:$V4,36:$V5,37:$V6,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,51:$Vc,52:$Vd,53:$Ve,57:$Vf,58:$Vg,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,110:$Vq,112:$Vr,114:$Vs,116:$Vt,125:$Vu,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC}),o($VQ,[2,204]),{7:186,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:187,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:188,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:189,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:190,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:191,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:192,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:193,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:194,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o($VQ,[2,154]),o($VQ,[2,159]),{7:195,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o($VQ,[2,153]),o($VQ,[2,158]),{88:196,91:$V$},o($Vb1,[2,73]),{91:[2,113]},{27:197,28:$V1},{27:198,28:$V1},o($Vb1,[2,88],{27:199,28:$V1}),{27:200,28:$V1},o($Vb1,[2,89]),{7:202,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,63:$Vf1,64:47,65:48,67:36,69:23,70:24,71:25,78:201,81:203,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,98:204,99:$Vg1,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{76:207,77:$VV,80:$VW},{88:208,91:$V$},o($Vb1,[2,74]),{6:[1,210],7:209,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,211],27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o($Vh1,[2,111]),{7:214,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:$V81,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,63:$V91,64:47,65:48,66:156,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,92:[1,212],93:213,94:$Vk,95:$Vl,96:$Vm,100:154,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o([6,25],$Vi1,{59:217,55:[1,215],60:$Vj1}),o($Vk1,[2,59]),o($Vk1,[2,63],{46:[1,219],63:[1,218]}),o($Vk1,[2,66]),o($Vl1,[2,67]),o($Vl1,[2,68]),o($Vl1,[2,69]),o($Vl1,[2,70]),{27:158,28:$V1},{7:214,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:$V81,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,63:$V91,64:47,65:48,66:156,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,93:153,94:$Vk,95:$Vl,96:$Vm,97:$Va1,100:154,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o($VQ,[2,53]),{4:221,5:3,7:4,8:5,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,26:[1,220],27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,135,136,142,143,144,145,146,147],[2,193],{118:69,109:89,115:90,141:$VI}),{109:92,110:$Vq,112:$Vr,115:93,116:$Vt,118:69,132:$VP},o($Vm1,[2,194],{118:69,109:89,115:90,141:$VI,143:$VK}),o($Vm1,[2,195],{118:69,109:89,115:90,141:$VI,143:$VK}),o($Vm1,[2,196],{118:69,109:89,115:90,141:$VI,143:$VK}),o($VQ,[2,197],{118:69,109:92,115:93}),o($Vn1,[2,198],{118:69,109:89,115:90,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),{7:222,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o($VQ,[2,200],{72:$V61,73:$V61,74:$V61,75:$V61,77:$V61,80:$V61,90:$V61,91:$V61}),{68:95,72:$VR,73:$VS,74:$VT,75:$VU,76:101,77:$VV,80:$VW,87:94,90:$VX,91:$VY},{68:105,72:$VR,73:$VS,74:$VT,75:$VU,76:101,77:$VV,80:$VW,87:104,90:$VX,91:$VY},o($Vo1,$V_),o($VQ,[2,201],{72:$V61,73:$V61,74:$V61,75:$V61,77:$V61,80:$V61,90:$V61,91:$V61}),o($VQ,[2,202]),o($VQ,[2,203]),{6:[1,225],7:223,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,224],27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:226,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{24:227,25:$V41,131:[1,228]},o($VQ,[2,138],{103:229,104:[1,230],105:[1,231]}),o($VQ,[2,152]),o($VQ,[2,160]),{25:[1,232],109:89,110:$Vq,112:$Vr,115:90,116:$Vt,118:69,132:$VF,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO},{126:233,128:234,129:$Vp1},o($VQ,[2,101]),{7:236,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o($V71,[2,104],{24:237,25:$V41,72:$V61,73:$V61,74:$V61,75:$V61,77:$V61,80:$V61,90:$V61,91:$V61,86:[1,238]}),o($Vn1,[2,145],{118:69,109:89,115:90,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),o($Vn1,[2,49],{118:69,109:89,115:90,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),{6:$VD,108:[1,239]},{4:240,5:3,7:4,8:5,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o([6,25,60,97],$Vq1,{118:69,109:89,115:90,98:241,63:[1,242],99:$Vg1,110:$Vq,112:$Vr,116:$Vt,132:$VF,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),o($Vr1,[2,119]),o([6,25,97],$Vi1,{59:243,60:$Vs1}),o($Vt1,[2,128]),{7:214,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:$V81,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,63:$V91,64:47,65:48,66:156,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,93:245,94:$Vk,95:$Vl,96:$Vm,100:154,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o($Vt1,[2,134]),o($Vt1,[2,135]),o($Ve1,[2,118]),{24:246,25:$V41,109:89,110:$Vq,112:$Vr,115:90,116:$Vt,118:69,132:$VF,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO},o($Vu1,[2,148],{118:69,109:89,115:90,110:$Vq,111:[1,247],112:$Vr,116:$Vt,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),o($Vu1,[2,150],{118:69,109:89,115:90,110:$Vq,111:[1,248],112:$Vr,116:$Vt,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),o($VQ,[2,156]),o($Vv1,[2,157],{118:69,109:89,115:90,110:$Vq,112:$Vr,116:$Vt,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),o([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,132,135,136,141,142,143,144,145,146,147],[2,161],{117:[1,249]}),o($Vw1,[2,164]),{27:168,28:$V1,50:169,64:170,65:171,82:$Vh,95:$V21,96:$V31,120:250,122:167},o($Vw1,[2,170],{60:[1,251]}),o($Vx1,[2,166]),o($Vx1,[2,167]),o($Vx1,[2,168]),o($Vx1,[2,169]),o($VQ,[2,163]),{7:252,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:253,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o([6,25,84],$Vi1,{59:254,60:$Vy1}),o($Vz1,[2,96]),o($Vz1,[2,42],{49:[1,256]}),o($Vz1,[2,45]),o($VA1,[2,46]),o($VA1,[2,47]),o($VA1,[2,48]),{38:[1,257],68:105,72:$VR,73:$VS,74:$VT,75:$VU,76:101,77:$VV,80:$VW,87:104,90:$VX,91:$VY},o($Vo1,$V61),{6:$VD,34:[1,258]},o($VE,[2,4]),o($VB1,[2,205],{118:69,109:89,115:90,141:$VI,142:$VJ,143:$VK}),o($VB1,[2,206],{118:69,109:89,115:90,141:$VI,142:$VJ,143:$VK}),o($Vm1,[2,207],{118:69,109:89,115:90,141:$VI,143:$VK}),o($Vm1,[2,208],{118:69,109:89,115:90,141:$VI,143:$VK}),o([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,144,145,146,147],[2,209],{118:69,109:89,115:90,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK}),o([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,145,146],[2,210],{118:69,109:89,115:90,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,147:$VO}),o([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,146],[2,211],{118:69,109:89,115:90,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,147:$VO}),o([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,145,146,147],[2,212],{118:69,109:89,115:90,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL}),o($Vv1,[2,192],{118:69,109:89,115:90,110:$Vq,112:$Vr,116:$Vt,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),o($Vv1,[2,191],{118:69,109:89,115:90,110:$Vq,112:$Vr,116:$Vt,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),o($Vh1,[2,108]),o($Vb1,[2,84]),o($Vb1,[2,85]),o($Vb1,[2,86]),o($Vb1,[2,87]),{79:[1,259]},{63:$Vf1,79:[2,92],98:260,99:$Vg1,109:89,110:$Vq,112:$Vr,115:90,116:$Vt,118:69,132:$VF,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO},{79:[2,93]},{7:261,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,79:[2,127],82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o($VC1,[2,121]),o($VC1,$VD1),o($Vb1,[2,91]),o($Vh1,[2,109]),o($Vn1,[2,39],{118:69,109:89,115:90,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),{7:262,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:263,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o($Vh1,[2,114]),o([6,25,92],$Vi1,{59:264,60:$Vs1}),o($Vt1,$Vq1,{118:69,109:89,115:90,63:[1,265],110:$Vq,112:$Vr,116:$Vt,132:$VF,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),{56:266,57:$Vf,58:$Vg},o($VE1,$VF1,{62:111,27:113,50:114,64:115,65:116,61:267,28:$V1,63:$V11,82:$Vh,95:$V21,96:$V31}),{6:$VG1,25:$VH1},o($Vk1,[2,64]),{7:270,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o($VI1,[2,23]),{6:$VD,26:[1,271]},o($Vn1,[2,199],{118:69,109:89,115:90,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),o($Vn1,[2,213],{118:69,109:89,115:90,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),{7:272,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:273,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o($Vn1,[2,216],{118:69,109:89,115:90,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),o($VQ,[2,190]),{7:274,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o($VQ,[2,139],{104:[1,275]}),{24:276,25:$V41},{24:279,25:$V41,27:277,28:$V1,65:278,82:$Vh},{126:280,128:234,129:$Vp1},{26:[1,281],127:[1,282],128:283,129:$Vp1},o($VJ1,[2,183]),{7:285,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,101:284,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o($VK1,[2,102],{118:69,109:89,115:90,24:286,25:$V41,110:$Vq,112:$Vr,116:$Vt,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),o($VQ,[2,105]),{7:287,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o($VZ,[2,146]),{6:$VD,26:[1,288]},{7:289,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o([11,28,30,32,33,36,37,40,41,42,43,44,51,52,53,57,58,82,85,89,94,95,96,102,106,107,110,112,114,116,125,131,133,134,135,136,137,139,140],$VD1,{6:$VL1,25:$VL1,60:$VL1,97:$VL1}),{6:$VM1,25:$VN1,97:[1,290]},o([6,25,26,92,97],$VF1,{12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,9:18,10:19,45:21,39:22,69:23,70:24,71:25,56:28,67:36,130:37,109:39,113:40,115:41,64:47,65:48,29:49,35:51,27:62,50:63,118:69,31:72,8:122,66:156,7:214,100:293,11:$V0,28:$V1,30:$V2,32:$V3,33:$V4,36:$V5,37:$V6,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,51:$Vc,52:$Vd,53:$Ve,57:$Vf,58:$Vg,63:$V91,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,110:$Vq,112:$Vr,114:$Vs,116:$Vt,125:$Vu,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC}),o($VE1,$Vi1,{59:294,60:$Vs1}),o($VO1,[2,187]),{7:295,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:296,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:297,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o($Vw1,[2,165]),{27:168,28:$V1,50:169,64:170,65:171,82:$Vh,95:$V21,96:$V31,122:298},o([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,112,116,132],[2,172],{118:69,109:89,115:90,111:[1,299],117:[1,300],135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),o($VP1,[2,173],{118:69,109:89,115:90,111:[1,301],135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),{6:$VQ1,25:$VR1,84:[1,302]},o([6,25,26,84],$VF1,{31:72,48:177,10:178,27:179,29:180,50:181,47:305,28:$V1,30:$V2,32:$V3,33:$V4,52:$Vd,95:$V21}),{7:306,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,307],27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o($VZ,[2,31]),o($Vd1,[2,29]),o($Vb1,[2,90]),{7:308,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,79:[2,125],82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{79:[2,126],109:89,110:$Vq,112:$Vr,115:90,116:$Vt,118:69,132:$VF,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO},o($Vn1,[2,40],{118:69,109:89,115:90,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),{26:[1,309],109:89,110:$Vq,112:$Vr,115:90,116:$Vt,118:69,132:$VF,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO},{6:$VM1,25:$VN1,92:[1,310]},o($Vt1,$VL1),{24:311,25:$V41},o($Vk1,[2,60]),{27:113,28:$V1,50:114,61:312,62:111,63:$V11,64:115,65:116,82:$Vh,95:$V21,96:$V31},o($VS1,$V01,{61:110,62:111,27:113,50:114,64:115,65:116,54:313,28:$V1,63:$V11,82:$Vh,95:$V21,96:$V31}),o($Vk1,[2,65],{118:69,109:89,115:90,110:$Vq,112:$Vr,116:$Vt,132:$VF,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),o($VI1,[2,24]),{26:[1,314],109:89,110:$Vq,112:$Vr,115:90,116:$Vt,118:69,132:$VF,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO},o($Vn1,[2,215],{118:69,109:89,115:90,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),{24:315,25:$V41,109:89,110:$Vq,112:$Vr,115:90,116:$Vt,118:69,132:$VF,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO},{24:316,25:$V41},o($VQ,[2,140]),{24:317,25:$V41},{24:318,25:$V41},o($VT1,[2,144]),{26:[1,319],127:[1,320],128:283,129:$Vp1},o($VQ,[2,181]),{24:321,25:$V41},o($VJ1,[2,184]),{24:322,25:$V41,60:[1,323]},o($VU1,[2,136],{118:69,109:89,115:90,110:$Vq,112:$Vr,116:$Vt,132:$VF,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),o($VQ,[2,103]),o($VK1,[2,106],{118:69,109:89,115:90,24:324,25:$V41,110:$Vq,112:$Vr,116:$Vt,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),{108:[1,325]},{97:[1,326],109:89,110:$Vq,112:$Vr,115:90,116:$Vt,118:69,132:$VF,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO},o($Vr1,[2,120]),{7:214,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,63:$V91,64:47,65:48,66:156,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,100:327,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:214,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:$V81,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,63:$V91,64:47,65:48,66:156,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,93:328,94:$Vk,95:$Vl,96:$Vm,100:154,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o($Vt1,[2,129]),{6:$VM1,25:$VN1,26:[1,329]},o($Vv1,[2,149],{118:69,109:89,115:90,110:$Vq,112:$Vr,116:$Vt,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),o($Vv1,[2,151],{118:69,109:89,115:90,110:$Vq,112:$Vr,116:$Vt,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),o($Vv1,[2,162],{118:69,109:89,115:90,110:$Vq,112:$Vr,116:$Vt,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),o($Vw1,[2,171]),{7:330,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:331,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:332,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o($Vr1,[2,94]),{10:178,27:179,28:$V1,29:180,30:$V2,31:72,32:$V3,33:$V4,47:333,48:177,50:181,52:$Vd,95:$V21},o($VS1,$Vc1,{31:72,47:176,48:177,10:178,27:179,29:180,50:181,83:334,28:$V1,30:$V2,32:$V3,33:$V4,52:$Vd,95:$V21}),o($Vz1,[2,97]),o($Vz1,[2,43],{118:69,109:89,115:90,110:$Vq,112:$Vr,116:$Vt,132:$VF,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),{7:335,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{79:[2,124],109:89,110:$Vq,112:$Vr,115:90,116:$Vt,118:69,132:$VF,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO},o($VQ,[2,41]),o($Vh1,[2,115]),o($VQ,[2,52]),o($Vk1,[2,61]),o($VE1,$Vi1,{59:336,60:$Vj1}),o($VQ,[2,214]),o($VO1,[2,188]),o($VQ,[2,141]),o($VT1,[2,142]),o($VT1,[2,143]),o($VQ,[2,179]),{24:337,25:$V41},{26:[1,338]},o($VJ1,[2,185],{6:[1,339]}),{7:340,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},o($VQ,[2,107]),o($VZ,[2,147]),o($VZ,[2,123]),o($Vt1,[2,130]),o($VE1,$Vi1,{59:341,60:$Vs1}),o($Vt1,[2,131]),o([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,132],[2,174],{118:69,109:89,115:90,117:[1,342],135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),o($VP1,[2,176],{118:69,109:89,115:90,111:[1,343],135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),o($Vn1,[2,175],{118:69,109:89,115:90,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),o($Vz1,[2,98]),o($VE1,$Vi1,{59:344,60:$Vy1}),{26:[1,345],109:89,110:$Vq,112:$Vr,115:90,116:$Vt,118:69,132:$VF,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO},{6:$VG1,25:$VH1,26:[1,346]},{26:[1,347]},o($VQ,[2,182]),o($VJ1,[2,186]),o($VU1,[2,137],{118:69,109:89,115:90,110:$Vq,112:$Vr,116:$Vt,132:$VF,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),{6:$VM1,25:$VN1,26:[1,348]},{7:349,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{7:350,8:122,9:18,10:19,11:$V0,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:$V1,29:49,30:$V2,31:72,32:$V3,33:$V4,35:51,36:$V5,37:$V6,39:22,40:$V7,41:$V8,42:$V9,43:$Va,44:$Vb,45:21,50:63,51:$Vc,52:$Vd,53:$Ve,56:28,57:$Vf,58:$Vg,64:47,65:48,67:36,69:23,70:24,71:25,82:$Vh,85:$Vi,89:$Vj,94:$Vk,95:$Vl,96:$Vm,102:$Vn,106:$Vo,107:$Vp,109:39,110:$Vq,112:$Vr,113:40,114:$Vs,115:41,116:$Vt,118:69,125:$Vu,130:37,131:$Vv,133:$Vw,134:$Vx,135:$Vy,136:$Vz,137:$VA,139:$VB,140:$VC},{6:$VQ1,25:$VR1,26:[1,351]},o($Vz1,[2,44]),o($Vk1,[2,62]),o($VQ,[2,180]),o($Vt1,[2,132]),o($Vn1,[2,177],{118:69,109:89,115:90,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),o($Vn1,[2,178],{118:69,109:89,115:90,135:$VG,136:$VH,141:$VI,142:$VJ,143:$VK,144:$VL,145:$VM,146:$VN,147:$VO}),o($Vz1,[2,99])], -defaultActions: {60:[2,54],61:[2,55],96:[2,113],203:[2,93]}, -parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - throw new Error(str); - } -}, -parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer; - sharedState.yy.parser = this; - if (typeof lexer.yylloc == 'undefined') { - lexer.yylloc = {}; - } - var yyloc = lexer.yylloc; - lstack.push(yyloc); - var ranges = lexer.options && lexer.options.ranges; - if (typeof sharedState.yy.parseError === 'function') { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function popStack(n) { - stack.length = stack.length - 2 * n; - vstack.length = vstack.length - n; - lstack.length = lstack.length - n; - } - _token_stack: - function lex() { - var token; - token = lexer.lex() || EOF; - if (typeof token !== 'number') { - token = self.symbols_[token] || token; - } - return token; - } - var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == 'undefined') { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === 'undefined' || !action.length || !action[0]) { - var errStr = ''; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push('\'' + this.terminals_[p] + '\''); - } - } - if (lexer.showPosition) { - errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; - } else { - errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); - } - this.parseError(errStr, { - text: lexer.match, - token: this.terminals_[symbol] || symbol, - line: lexer.yylineno, - loc: yyloc, - expected: expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer.yytext); - lstack.push(lexer.yylloc); - stack.push(action[1]); - symbol = null; - if (!preErrorSymbol) { - yyleng = lexer.yyleng; - yytext = lexer.yytext; - yylineno = lexer.yylineno; - yyloc = lexer.yylloc; - if (recovering > 0) { - recovering--; - } - } else { - symbol = preErrorSymbol; - preErrorSymbol = null; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== 'undefined') { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; -}}; - -function Parser () { - this.yy = {}; -} -Parser.prototype = parser;parser.Parser = Parser; -return new Parser; -})(); - - -if (typeof require !== 'undefined' && typeof exports !== 'undefined') { -exports.parser = parser; -exports.Parser = parser.Parser; -exports.parse = function () { return parser.parse.apply(parser, arguments); }; -exports.main = function commonjsMain(args) { - if (!args[1]) { - console.log('Usage: '+args[0]+' FILE'); - process.exit(1); - } - var source = require('fs').readFileSync(require('path').normalize(args[1]), "utf8"); - return exports.parser.parse(source); -}; -if (typeof module !== 'undefined' && require.main === module) { - exports.main(process.argv.slice(1)); -} -} - return module.exports; -})();require['./scope'] = (function() { - var exports = {}, module = {exports: exports}; - // Generated by CoffeeScript 1.9.1 -(function() { - var Scope, - indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; - - exports.Scope = Scope = (function() { - function Scope(parent, expressions, method, referencedVars) { - var ref, ref1; - this.parent = parent; - this.expressions = expressions; - this.method = method; - this.referencedVars = referencedVars; - this.variables = [ - { - name: 'arguments', - type: 'arguments' - } - ]; - this.positions = {}; - if (!this.parent) { - this.utilities = {}; - } - this.root = (ref = (ref1 = this.parent) != null ? ref1.root : void 0) != null ? ref : this; - } - - Scope.prototype.add = function(name, type, immediate) { - if (this.shared && !immediate) { - return this.parent.add(name, type, immediate); - } - if (Object.prototype.hasOwnProperty.call(this.positions, name)) { - return this.variables[this.positions[name]].type = type; - } else { - return this.positions[name] = this.variables.push({ - name: name, - type: type - }) - 1; - } - }; - - Scope.prototype.namedMethod = function() { - var ref; - if (((ref = this.method) != null ? ref.name : void 0) || !this.parent) { - return this.method; - } - return this.parent.namedMethod(); - }; - - Scope.prototype.find = function(name) { - if (this.check(name)) { - return true; - } - this.add(name, 'var'); - return false; - }; - - Scope.prototype.parameter = function(name) { - if (this.shared && this.parent.check(name, true)) { - return; - } - return this.add(name, 'param'); - }; - - Scope.prototype.check = function(name) { - var ref; - return !!(this.type(name) || ((ref = this.parent) != null ? ref.check(name) : void 0)); - }; - - Scope.prototype.temporary = function(name, index, single) { - if (single == null) { - single = false; - } - if (single) { - return (index + parseInt(name, 36)).toString(36).replace(/\d/g, 'a'); - } else { - return name + (index || ''); - } - }; - - Scope.prototype.type = function(name) { - var i, len, ref, v; - ref = this.variables; - for (i = 0, len = ref.length; i < len; i++) { - v = ref[i]; - if (v.name === name) { - return v.type; - } - } - return null; - }; - - Scope.prototype.freeVariable = function(name, options) { - var index, ref, temp; - if (options == null) { - options = {}; - } - index = 0; - while (true) { - temp = this.temporary(name, index, options.single); - if (!(this.check(temp) || indexOf.call(this.root.referencedVars, temp) >= 0)) { - break; - } - index++; - } - if ((ref = options.reserve) != null ? ref : true) { - this.add(temp, 'var', true); - } - return temp; - }; - - Scope.prototype.assign = function(name, value) { - this.add(name, { - value: value, - assigned: true - }, true); - return this.hasAssignments = true; - }; - - Scope.prototype.hasDeclarations = function() { - return !!this.declaredVariables().length; - }; - - Scope.prototype.declaredVariables = function() { - var v; - return ((function() { - var i, len, ref, results; - ref = this.variables; - results = []; - for (i = 0, len = ref.length; i < len; i++) { - v = ref[i]; - if (v.type === 'var') { - results.push(v.name); - } - } - return results; - }).call(this)).sort(); - }; - - Scope.prototype.assignedVariables = function() { - var i, len, ref, results, v; - ref = this.variables; - results = []; - for (i = 0, len = ref.length; i < len; i++) { - v = ref[i]; - if (v.type.assigned) { - results.push(v.name + " = " + v.type.value); - } - } - return results; - }; - - return Scope; - - })(); - -}).call(this); - - return module.exports; -})();require['./nodes'] = (function() { - var exports = {}, module = {exports: exports}; - // Generated by CoffeeScript 1.9.1 -(function() { - var Access, Arr, Assign, Base, Block, Call, Class, Code, CodeFragment, Comment, Existence, Expansion, Extends, For, HEXNUM, IDENTIFIER, IS_REGEX, IS_STRING, If, In, Index, LEVEL_ACCESS, LEVEL_COND, LEVEL_LIST, LEVEL_OP, LEVEL_PAREN, LEVEL_TOP, Literal, NEGATE, NO, NUMBER, Obj, Op, Param, Parens, RESERVED, Range, Return, SIMPLENUM, STRICT_PROSCRIBED, Scope, Slice, Splat, Switch, TAB, THIS, Throw, Try, UTILITIES, Value, While, YES, addLocationDataFn, compact, del, ends, extend, flatten, fragmentsToText, isComplexOrAssignable, isLiteralArguments, isLiteralThis, locationDataToString, merge, multident, parseNum, ref1, ref2, some, starts, throwSyntaxError, unfoldSoak, utility, - extend1 = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, - hasProp = {}.hasOwnProperty, - indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, - slice = [].slice; - - Error.stackTraceLimit = Infinity; - - Scope = require('./scope').Scope; - - ref1 = require('./lexer'), RESERVED = ref1.RESERVED, STRICT_PROSCRIBED = ref1.STRICT_PROSCRIBED; - - ref2 = require('./helpers'), compact = ref2.compact, flatten = ref2.flatten, extend = ref2.extend, merge = ref2.merge, del = ref2.del, starts = ref2.starts, ends = ref2.ends, some = ref2.some, addLocationDataFn = ref2.addLocationDataFn, locationDataToString = ref2.locationDataToString, throwSyntaxError = ref2.throwSyntaxError; - - exports.extend = extend; - - exports.addLocationDataFn = addLocationDataFn; - - YES = function() { - return true; - }; - - NO = function() { - return false; - }; - - THIS = function() { - return this; - }; - - NEGATE = function() { - this.negated = !this.negated; - return this; - }; - - exports.CodeFragment = CodeFragment = (function() { - function CodeFragment(parent, code) { - var ref3; - this.code = "" + code; - this.locationData = parent != null ? parent.locationData : void 0; - this.type = (parent != null ? (ref3 = parent.constructor) != null ? ref3.name : void 0 : void 0) || 'unknown'; - } - - CodeFragment.prototype.toString = function() { - return "" + this.code + (this.locationData ? ": " + locationDataToString(this.locationData) : ''); - }; - - return CodeFragment; - - })(); - - fragmentsToText = function(fragments) { - var fragment; - return ((function() { - var j, len1, results; - results = []; - for (j = 0, len1 = fragments.length; j < len1; j++) { - fragment = fragments[j]; - results.push(fragment.code); - } - return results; - })()).join(''); - }; - - exports.Base = Base = (function() { - function Base() {} - - Base.prototype.compile = function(o, lvl) { - return fragmentsToText(this.compileToFragments(o, lvl)); - }; - - Base.prototype.compileToFragments = function(o, lvl) { - var node; - o = extend({}, o); - if (lvl) { - o.level = lvl; - } - node = this.unfoldSoak(o) || this; - node.tab = o.indent; - if (o.level === LEVEL_TOP || !node.isStatement(o)) { - return node.compileNode(o); - } else { - return node.compileClosure(o); - } - }; - - Base.prototype.compileClosure = function(o) { - var args, argumentsNode, func, jumpNode, meth, parts, ref3; - if (jumpNode = this.jumps()) { - jumpNode.error('cannot use a pure statement in an expression'); - } - o.sharedScope = true; - func = new Code([], Block.wrap([this])); - args = []; - if ((argumentsNode = this.contains(isLiteralArguments)) || this.contains(isLiteralThis)) { - args = [new Literal('this')]; - if (argumentsNode) { - meth = 'apply'; - args.push(new Literal('arguments')); - } else { - meth = 'call'; - } - func = new Value(func, [new Access(new Literal(meth))]); - } - parts = (new Call(func, args)).compileNode(o); - if (func.isGenerator || ((ref3 = func.base) != null ? ref3.isGenerator : void 0)) { - parts.unshift(this.makeCode("(yield* ")); - parts.push(this.makeCode(")")); - } - return parts; - }; - - Base.prototype.cache = function(o, level, isComplex) { - var complex, ref, sub; - complex = isComplex != null ? isComplex(this) : this.isComplex(); - if (complex) { - ref = new Literal(o.scope.freeVariable('ref')); - sub = new Assign(ref, this); - if (level) { - return [sub.compileToFragments(o, level), [this.makeCode(ref.value)]]; - } else { - return [sub, ref]; - } - } else { - ref = level ? this.compileToFragments(o, level) : this; - return [ref, ref]; - } - }; - - Base.prototype.cacheToCodeFragments = function(cacheValues) { - return [fragmentsToText(cacheValues[0]), fragmentsToText(cacheValues[1])]; - }; - - Base.prototype.makeReturn = function(res) { - var me; - me = this.unwrapAll(); - if (res) { - return new Call(new Literal(res + ".push"), [me]); - } else { - return new Return(me); - } - }; - - Base.prototype.contains = function(pred) { - var node; - node = void 0; - this.traverseChildren(false, function(n) { - if (pred(n)) { - node = n; - return false; - } - }); - return node; - }; - - Base.prototype.lastNonComment = function(list) { - var i; - i = list.length; - while (i--) { - if (!(list[i] instanceof Comment)) { - return list[i]; - } - } - return null; - }; - - Base.prototype.toString = function(idt, name) { - var tree; - if (idt == null) { - idt = ''; - } - if (name == null) { - name = this.constructor.name; - } - tree = '\n' + idt + name; - if (this.soak) { - tree += '?'; - } - this.eachChild(function(node) { - return tree += node.toString(idt + TAB); - }); - return tree; - }; - - Base.prototype.eachChild = function(func) { - var attr, child, j, k, len1, len2, ref3, ref4; - if (!this.children) { - return this; - } - ref3 = this.children; - for (j = 0, len1 = ref3.length; j < len1; j++) { - attr = ref3[j]; - if (this[attr]) { - ref4 = flatten([this[attr]]); - for (k = 0, len2 = ref4.length; k < len2; k++) { - child = ref4[k]; - if (func(child) === false) { - return this; - } - } - } - } - return this; - }; - - Base.prototype.traverseChildren = function(crossScope, func) { - return this.eachChild(function(child) { - var recur; - recur = func(child); - if (recur !== false) { - return child.traverseChildren(crossScope, func); - } - }); - }; - - Base.prototype.invert = function() { - return new Op('!', this); - }; - - Base.prototype.unwrapAll = function() { - var node; - node = this; - while (node !== (node = node.unwrap())) { - continue; - } - return node; - }; - - Base.prototype.children = []; - - Base.prototype.isStatement = NO; - - Base.prototype.jumps = NO; - - Base.prototype.isComplex = YES; - - Base.prototype.isChainable = NO; - - Base.prototype.isAssignable = NO; - - Base.prototype.unwrap = THIS; - - Base.prototype.unfoldSoak = NO; - - Base.prototype.assigns = NO; - - Base.prototype.updateLocationDataIfMissing = function(locationData) { - if (this.locationData) { - return this; - } - this.locationData = locationData; - return this.eachChild(function(child) { - return child.updateLocationDataIfMissing(locationData); - }); - }; - - Base.prototype.error = function(message) { - return throwSyntaxError(message, this.locationData); - }; - - Base.prototype.makeCode = function(code) { - return new CodeFragment(this, code); - }; - - Base.prototype.wrapInBraces = function(fragments) { - return [].concat(this.makeCode('('), fragments, this.makeCode(')')); - }; - - Base.prototype.joinFragmentArrays = function(fragmentsList, joinStr) { - var answer, fragments, i, j, len1; - answer = []; - for (i = j = 0, len1 = fragmentsList.length; j < len1; i = ++j) { - fragments = fragmentsList[i]; - if (i) { - answer.push(this.makeCode(joinStr)); - } - answer = answer.concat(fragments); - } - return answer; - }; - - return Base; - - })(); - - exports.Block = Block = (function(superClass1) { - extend1(Block, superClass1); - - function Block(nodes) { - this.expressions = compact(flatten(nodes || [])); - } - - Block.prototype.children = ['expressions']; - - Block.prototype.push = function(node) { - this.expressions.push(node); - return this; - }; - - Block.prototype.pop = function() { - return this.expressions.pop(); - }; - - Block.prototype.unshift = function(node) { - this.expressions.unshift(node); - return this; - }; - - Block.prototype.unwrap = function() { - if (this.expressions.length === 1) { - return this.expressions[0]; - } else { - return this; - } - }; - - Block.prototype.isEmpty = function() { - return !this.expressions.length; - }; - - Block.prototype.isStatement = function(o) { - var exp, j, len1, ref3; - ref3 = this.expressions; - for (j = 0, len1 = ref3.length; j < len1; j++) { - exp = ref3[j]; - if (exp.isStatement(o)) { - return true; - } - } - return false; - }; - - Block.prototype.jumps = function(o) { - var exp, j, jumpNode, len1, ref3; - ref3 = this.expressions; - for (j = 0, len1 = ref3.length; j < len1; j++) { - exp = ref3[j]; - if (jumpNode = exp.jumps(o)) { - return jumpNode; - } - } - }; - - Block.prototype.makeReturn = function(res) { - var expr, len; - len = this.expressions.length; - while (len--) { - expr = this.expressions[len]; - if (!(expr instanceof Comment)) { - this.expressions[len] = expr.makeReturn(res); - if (expr instanceof Return && !expr.expression) { - this.expressions.splice(len, 1); - } - break; - } - } - return this; - }; - - Block.prototype.compileToFragments = function(o, level) { - if (o == null) { - o = {}; - } - if (o.scope) { - return Block.__super__.compileToFragments.call(this, o, level); - } else { - return this.compileRoot(o); - } - }; - - Block.prototype.compileNode = function(o) { - var answer, compiledNodes, fragments, index, j, len1, node, ref3, top; - this.tab = o.indent; - top = o.level === LEVEL_TOP; - compiledNodes = []; - ref3 = this.expressions; - for (index = j = 0, len1 = ref3.length; j < len1; index = ++j) { - node = ref3[index]; - node = node.unwrapAll(); - node = node.unfoldSoak(o) || node; - if (node instanceof Block) { - compiledNodes.push(node.compileNode(o)); - } else if (top) { - node.front = true; - fragments = node.compileToFragments(o); - if (!node.isStatement(o)) { - fragments.unshift(this.makeCode("" + this.tab)); - fragments.push(this.makeCode(";")); - } - compiledNodes.push(fragments); - } else { - compiledNodes.push(node.compileToFragments(o, LEVEL_LIST)); - } - } - if (top) { - if (this.spaced) { - return [].concat(this.joinFragmentArrays(compiledNodes, '\n\n'), this.makeCode("\n")); - } else { - return this.joinFragmentArrays(compiledNodes, '\n'); - } - } - if (compiledNodes.length) { - answer = this.joinFragmentArrays(compiledNodes, ', '); - } else { - answer = [this.makeCode("void 0")]; - } - if (compiledNodes.length > 1 && o.level >= LEVEL_LIST) { - return this.wrapInBraces(answer); - } else { - return answer; - } - }; - - Block.prototype.compileRoot = function(o) { - var exp, fragments, i, j, len1, name, prelude, preludeExps, ref3, ref4, rest; - o.indent = o.bare ? '' : TAB; - o.level = LEVEL_TOP; - this.spaced = true; - o.scope = new Scope(null, this, null, (ref3 = o.referencedVars) != null ? ref3 : []); - ref4 = o.locals || []; - for (j = 0, len1 = ref4.length; j < len1; j++) { - name = ref4[j]; - o.scope.parameter(name); - } - prelude = []; - if (!o.bare) { - preludeExps = (function() { - var k, len2, ref5, results; - ref5 = this.expressions; - results = []; - for (i = k = 0, len2 = ref5.length; k < len2; i = ++k) { - exp = ref5[i]; - if (!(exp.unwrap() instanceof Comment)) { - break; - } - results.push(exp); - } - return results; - }).call(this); - rest = this.expressions.slice(preludeExps.length); - this.expressions = preludeExps; - if (preludeExps.length) { - prelude = this.compileNode(merge(o, { - indent: '' - })); - prelude.push(this.makeCode("\n")); - } - this.expressions = rest; - } - fragments = this.compileWithDeclarations(o); - if (o.bare) { - return fragments; - } - return [].concat(prelude, this.makeCode("(function() {\n"), fragments, this.makeCode("\n}).call(this);\n")); - }; - - Block.prototype.compileWithDeclarations = function(o) { - var assigns, declars, exp, fragments, i, j, len1, post, ref3, ref4, ref5, rest, scope, spaced; - fragments = []; - post = []; - ref3 = this.expressions; - for (i = j = 0, len1 = ref3.length; j < len1; i = ++j) { - exp = ref3[i]; - exp = exp.unwrap(); - if (!(exp instanceof Comment || exp instanceof Literal)) { - break; - } - } - o = merge(o, { - level: LEVEL_TOP - }); - if (i) { - rest = this.expressions.splice(i, 9e9); - ref4 = [this.spaced, false], spaced = ref4[0], this.spaced = ref4[1]; - ref5 = [this.compileNode(o), spaced], fragments = ref5[0], this.spaced = ref5[1]; - this.expressions = rest; - } - post = this.compileNode(o); - scope = o.scope; - if (scope.expressions === this) { - declars = o.scope.hasDeclarations(); - assigns = scope.hasAssignments; - if (declars || assigns) { - if (i) { - fragments.push(this.makeCode('\n')); - } - fragments.push(this.makeCode(this.tab + "var ")); - if (declars) { - fragments.push(this.makeCode(scope.declaredVariables().join(', '))); - } - if (assigns) { - if (declars) { - fragments.push(this.makeCode(",\n" + (this.tab + TAB))); - } - fragments.push(this.makeCode(scope.assignedVariables().join(",\n" + (this.tab + TAB)))); - } - fragments.push(this.makeCode(";\n" + (this.spaced ? '\n' : ''))); - } else if (fragments.length && post.length) { - fragments.push(this.makeCode("\n")); - } - } - return fragments.concat(post); - }; - - Block.wrap = function(nodes) { - if (nodes.length === 1 && nodes[0] instanceof Block) { - return nodes[0]; - } - return new Block(nodes); - }; - - return Block; - - })(Base); - - exports.Literal = Literal = (function(superClass1) { - extend1(Literal, superClass1); - - function Literal(value1) { - this.value = value1; - } - - Literal.prototype.makeReturn = function() { - if (this.isStatement()) { - return this; - } else { - return Literal.__super__.makeReturn.apply(this, arguments); - } - }; - - Literal.prototype.isAssignable = function() { - return IDENTIFIER.test(this.value); - }; - - Literal.prototype.isStatement = function() { - var ref3; - return (ref3 = this.value) === 'break' || ref3 === 'continue' || ref3 === 'debugger'; - }; - - Literal.prototype.isComplex = NO; - - Literal.prototype.assigns = function(name) { - return name === this.value; - }; - - Literal.prototype.jumps = function(o) { - if (this.value === 'break' && !((o != null ? o.loop : void 0) || (o != null ? o.block : void 0))) { - return this; - } - if (this.value === 'continue' && !(o != null ? o.loop : void 0)) { - return this; - } - }; - - Literal.prototype.compileNode = function(o) { - var answer, code, ref3; - code = this.value === 'this' ? ((ref3 = o.scope.method) != null ? ref3.bound : void 0) ? o.scope.method.context : this.value : this.value.reserved ? "\"" + this.value + "\"" : this.value; - answer = this.isStatement() ? "" + this.tab + code + ";" : code; - return [this.makeCode(answer)]; - }; - - Literal.prototype.toString = function() { - return ' "' + this.value + '"'; - }; - - return Literal; - - })(Base); - - exports.Undefined = (function(superClass1) { - extend1(Undefined, superClass1); - - function Undefined() { - return Undefined.__super__.constructor.apply(this, arguments); - } - - Undefined.prototype.isAssignable = NO; - - Undefined.prototype.isComplex = NO; - - Undefined.prototype.compileNode = function(o) { - return [this.makeCode(o.level >= LEVEL_ACCESS ? '(void 0)' : 'void 0')]; - }; - - return Undefined; - - })(Base); - - exports.Null = (function(superClass1) { - extend1(Null, superClass1); - - function Null() { - return Null.__super__.constructor.apply(this, arguments); - } - - Null.prototype.isAssignable = NO; - - Null.prototype.isComplex = NO; - - Null.prototype.compileNode = function() { - return [this.makeCode("null")]; - }; - - return Null; - - })(Base); - - exports.Bool = (function(superClass1) { - extend1(Bool, superClass1); - - Bool.prototype.isAssignable = NO; - - Bool.prototype.isComplex = NO; - - Bool.prototype.compileNode = function() { - return [this.makeCode(this.val)]; - }; - - function Bool(val1) { - this.val = val1; - } - - return Bool; - - })(Base); - - exports.Return = Return = (function(superClass1) { - extend1(Return, superClass1); - - function Return(expression) { - this.expression = expression; - } - - Return.prototype.children = ['expression']; - - Return.prototype.isStatement = YES; - - Return.prototype.makeReturn = THIS; - - Return.prototype.jumps = THIS; - - Return.prototype.compileToFragments = function(o, level) { - var expr, ref3; - expr = (ref3 = this.expression) != null ? ref3.makeReturn() : void 0; - if (expr && !(expr instanceof Return)) { - return expr.compileToFragments(o, level); - } else { - return Return.__super__.compileToFragments.call(this, o, level); - } - }; - - Return.prototype.compileNode = function(o) { - var answer, exprIsYieldReturn, ref3; - answer = []; - exprIsYieldReturn = (ref3 = this.expression) != null ? typeof ref3.isYieldReturn === "function" ? ref3.isYieldReturn() : void 0 : void 0; - if (!exprIsYieldReturn) { - answer.push(this.makeCode(this.tab + ("return" + (this.expression ? " " : "")))); - } - if (this.expression) { - answer = answer.concat(this.expression.compileToFragments(o, LEVEL_PAREN)); - } - if (!exprIsYieldReturn) { - answer.push(this.makeCode(";")); - } - return answer; - }; - - return Return; - - })(Base); - - exports.Value = Value = (function(superClass1) { - extend1(Value, superClass1); - - function Value(base, props, tag) { - if (!props && base instanceof Value) { - return base; - } - this.base = base; - this.properties = props || []; - if (tag) { - this[tag] = true; - } - return this; - } - - Value.prototype.children = ['base', 'properties']; - - Value.prototype.add = function(props) { - this.properties = this.properties.concat(props); - return this; - }; - - Value.prototype.hasProperties = function() { - return !!this.properties.length; - }; - - Value.prototype.bareLiteral = function(type) { - return !this.properties.length && this.base instanceof type; - }; - - Value.prototype.isArray = function() { - return this.bareLiteral(Arr); - }; - - Value.prototype.isRange = function() { - return this.bareLiteral(Range); - }; - - Value.prototype.isComplex = function() { - return this.hasProperties() || this.base.isComplex(); - }; - - Value.prototype.isAssignable = function() { - return this.hasProperties() || this.base.isAssignable(); - }; - - Value.prototype.isSimpleNumber = function() { - return this.bareLiteral(Literal) && SIMPLENUM.test(this.base.value); - }; - - Value.prototype.isString = function() { - return this.bareLiteral(Literal) && IS_STRING.test(this.base.value); - }; - - Value.prototype.isRegex = function() { - return this.bareLiteral(Literal) && IS_REGEX.test(this.base.value); - }; - - Value.prototype.isAtomic = function() { - var j, len1, node, ref3; - ref3 = this.properties.concat(this.base); - for (j = 0, len1 = ref3.length; j < len1; j++) { - node = ref3[j]; - if (node.soak || node instanceof Call) { - return false; - } - } - return true; - }; - - Value.prototype.isNotCallable = function() { - return this.isSimpleNumber() || this.isString() || this.isRegex() || this.isArray() || this.isRange() || this.isSplice() || this.isObject(); - }; - - Value.prototype.isStatement = function(o) { - return !this.properties.length && this.base.isStatement(o); - }; - - Value.prototype.assigns = function(name) { - return !this.properties.length && this.base.assigns(name); - }; - - Value.prototype.jumps = function(o) { - return !this.properties.length && this.base.jumps(o); - }; - - Value.prototype.isObject = function(onlyGenerated) { - if (this.properties.length) { - return false; - } - return (this.base instanceof Obj) && (!onlyGenerated || this.base.generated); - }; - - Value.prototype.isSplice = function() { - var lastProp, ref3; - ref3 = this.properties, lastProp = ref3[ref3.length - 1]; - return lastProp instanceof Slice; - }; - - Value.prototype.looksStatic = function(className) { - var ref3; - return this.base.value === className && this.properties.length === 1 && ((ref3 = this.properties[0].name) != null ? ref3.value : void 0) !== 'prototype'; - }; - - Value.prototype.unwrap = function() { - if (this.properties.length) { - return this; - } else { - return this.base; - } - }; - - Value.prototype.cacheReference = function(o) { - var base, bref, name, nref, ref3; - ref3 = this.properties, name = ref3[ref3.length - 1]; - if (this.properties.length < 2 && !this.base.isComplex() && !(name != null ? name.isComplex() : void 0)) { - return [this, this]; - } - base = new Value(this.base, this.properties.slice(0, -1)); - if (base.isComplex()) { - bref = new Literal(o.scope.freeVariable('base')); - base = new Value(new Parens(new Assign(bref, base))); - } - if (!name) { - return [base, bref]; - } - if (name.isComplex()) { - nref = new Literal(o.scope.freeVariable('name')); - name = new Index(new Assign(nref, name.index)); - nref = new Index(nref); - } - return [base.add(name), new Value(bref || base.base, [nref || name])]; - }; - - Value.prototype.compileNode = function(o) { - var fragments, j, len1, prop, props; - this.base.front = this.front; - props = this.properties; - fragments = this.base.compileToFragments(o, (props.length ? LEVEL_ACCESS : null)); - if ((this.base instanceof Parens || props.length) && SIMPLENUM.test(fragmentsToText(fragments))) { - fragments.push(this.makeCode('.')); - } - for (j = 0, len1 = props.length; j < len1; j++) { - prop = props[j]; - fragments.push.apply(fragments, prop.compileToFragments(o)); - } - return fragments; - }; - - Value.prototype.unfoldSoak = function(o) { - return this.unfoldedSoak != null ? this.unfoldedSoak : this.unfoldedSoak = (function(_this) { - return function() { - var fst, i, ifn, j, len1, prop, ref, ref3, ref4, snd; - if (ifn = _this.base.unfoldSoak(o)) { - (ref3 = ifn.body.properties).push.apply(ref3, _this.properties); - return ifn; - } - ref4 = _this.properties; - for (i = j = 0, len1 = ref4.length; j < len1; i = ++j) { - prop = ref4[i]; - if (!prop.soak) { - continue; - } - prop.soak = false; - fst = new Value(_this.base, _this.properties.slice(0, i)); - snd = new Value(_this.base, _this.properties.slice(i)); - if (fst.isComplex()) { - ref = new Literal(o.scope.freeVariable('ref')); - fst = new Parens(new Assign(ref, fst)); - snd.base = ref; - } - return new If(new Existence(fst), snd, { - soak: true - }); - } - return false; - }; - })(this)(); - }; - - return Value; - - })(Base); - - exports.Comment = Comment = (function(superClass1) { - extend1(Comment, superClass1); - - function Comment(comment1) { - this.comment = comment1; - } - - Comment.prototype.isStatement = YES; - - Comment.prototype.makeReturn = THIS; - - Comment.prototype.compileNode = function(o, level) { - var code, comment; - comment = this.comment.replace(/^(\s*)# /gm, "$1 * "); - code = "/*" + (multident(comment, this.tab)) + (indexOf.call(comment, '\n') >= 0 ? "\n" + this.tab : '') + " */"; - if ((level || o.level) === LEVEL_TOP) { - code = o.indent + code; - } - return [this.makeCode("\n"), this.makeCode(code)]; - }; - - return Comment; - - })(Base); - - exports.Call = Call = (function(superClass1) { - extend1(Call, superClass1); - - function Call(variable, args1, soak) { - this.args = args1 != null ? args1 : []; - this.soak = soak; - this.isNew = false; - this.isSuper = variable === 'super'; - this.variable = this.isSuper ? null : variable; - if (variable instanceof Value && variable.isNotCallable()) { - variable.error("literal is not a function"); - } - } - - Call.prototype.children = ['variable', 'args']; - - Call.prototype.newInstance = function() { - var base, ref3; - base = ((ref3 = this.variable) != null ? ref3.base : void 0) || this.variable; - if (base instanceof Call && !base.isNew) { - base.newInstance(); - } else { - this.isNew = true; - } - return this; - }; - - Call.prototype.superReference = function(o) { - var accesses, base, bref, klass, method, name, nref, variable; - method = o.scope.namedMethod(); - if (method != null ? method.klass : void 0) { - klass = method.klass, name = method.name, variable = method.variable; - if (klass.isComplex()) { - bref = new Literal(o.scope.parent.freeVariable('base')); - base = new Value(new Parens(new Assign(bref, klass))); - variable.base = base; - variable.properties.splice(0, klass.properties.length); - } - if (name.isComplex() || (name instanceof Index && name.index.isAssignable())) { - nref = new Literal(o.scope.parent.freeVariable('name')); - name = new Index(new Assign(nref, name.index)); - variable.properties.pop(); - variable.properties.push(name); - } - accesses = [new Access(new Literal('__super__'))]; - if (method["static"]) { - accesses.push(new Access(new Literal('constructor'))); - } - accesses.push(nref != null ? new Index(nref) : name); - return (new Value(bref != null ? bref : klass, accesses)).compile(o); - } else if (method != null ? method.ctor : void 0) { - return method.name + ".__super__.constructor"; - } else { - return this.error('cannot call super outside of an instance method.'); - } - }; - - Call.prototype.superThis = function(o) { - var method; - method = o.scope.method; - return (method && !method.klass && method.context) || "this"; - }; - - Call.prototype.unfoldSoak = function(o) { - var call, ifn, j, left, len1, list, ref3, ref4, rite; - if (this.soak) { - if (this.variable) { - if (ifn = unfoldSoak(o, this, 'variable')) { - return ifn; - } - ref3 = new Value(this.variable).cacheReference(o), left = ref3[0], rite = ref3[1]; - } else { - left = new Literal(this.superReference(o)); - rite = new Value(left); - } - rite = new Call(rite, this.args); - rite.isNew = this.isNew; - left = new Literal("typeof " + (left.compile(o)) + " === \"function\""); - return new If(left, new Value(rite), { - soak: true - }); - } - call = this; - list = []; - while (true) { - if (call.variable instanceof Call) { - list.push(call); - call = call.variable; - continue; - } - if (!(call.variable instanceof Value)) { - break; - } - list.push(call); - if (!((call = call.variable.base) instanceof Call)) { - break; - } - } - ref4 = list.reverse(); - for (j = 0, len1 = ref4.length; j < len1; j++) { - call = ref4[j]; - if (ifn) { - if (call.variable instanceof Call) { - call.variable = ifn; - } else { - call.variable.base = ifn; - } - } - ifn = unfoldSoak(o, call, 'variable'); - } - return ifn; - }; - - Call.prototype.compileNode = function(o) { - var arg, argIndex, compiledArgs, compiledArray, fragments, j, len1, preface, ref3, ref4; - if ((ref3 = this.variable) != null) { - ref3.front = this.front; - } - compiledArray = Splat.compileSplattedArray(o, this.args, true); - if (compiledArray.length) { - return this.compileSplat(o, compiledArray); - } - compiledArgs = []; - ref4 = this.args; - for (argIndex = j = 0, len1 = ref4.length; j < len1; argIndex = ++j) { - arg = ref4[argIndex]; - if (argIndex) { - compiledArgs.push(this.makeCode(", ")); - } - compiledArgs.push.apply(compiledArgs, arg.compileToFragments(o, LEVEL_LIST)); - } - fragments = []; - if (this.isSuper) { - preface = this.superReference(o) + (".call(" + (this.superThis(o))); - if (compiledArgs.length) { - preface += ", "; - } - fragments.push(this.makeCode(preface)); - } else { - if (this.isNew) { - fragments.push(this.makeCode('new ')); - } - fragments.push.apply(fragments, this.variable.compileToFragments(o, LEVEL_ACCESS)); - fragments.push(this.makeCode("(")); - } - fragments.push.apply(fragments, compiledArgs); - fragments.push(this.makeCode(")")); - return fragments; - }; - - Call.prototype.compileSplat = function(o, splatArgs) { - var answer, base, fun, idt, name, ref; - if (this.isSuper) { - return [].concat(this.makeCode((this.superReference(o)) + ".apply(" + (this.superThis(o)) + ", "), splatArgs, this.makeCode(")")); - } - if (this.isNew) { - idt = this.tab + TAB; - return [].concat(this.makeCode("(function(func, args, ctor) {\n" + idt + "ctor.prototype = func.prototype;\n" + idt + "var child = new ctor, result = func.apply(child, args);\n" + idt + "return Object(result) === result ? result : child;\n" + this.tab + "})("), this.variable.compileToFragments(o, LEVEL_LIST), this.makeCode(", "), splatArgs, this.makeCode(", function(){})")); - } - answer = []; - base = new Value(this.variable); - if ((name = base.properties.pop()) && base.isComplex()) { - ref = o.scope.freeVariable('ref'); - answer = answer.concat(this.makeCode("(" + ref + " = "), base.compileToFragments(o, LEVEL_LIST), this.makeCode(")"), name.compileToFragments(o)); - } else { - fun = base.compileToFragments(o, LEVEL_ACCESS); - if (SIMPLENUM.test(fragmentsToText(fun))) { - fun = this.wrapInBraces(fun); - } - if (name) { - ref = fragmentsToText(fun); - fun.push.apply(fun, name.compileToFragments(o)); - } else { - ref = 'null'; - } - answer = answer.concat(fun); - } - return answer = answer.concat(this.makeCode(".apply(" + ref + ", "), splatArgs, this.makeCode(")")); - }; - - return Call; - - })(Base); - - exports.Extends = Extends = (function(superClass1) { - extend1(Extends, superClass1); - - function Extends(child1, parent1) { - this.child = child1; - this.parent = parent1; - } - - Extends.prototype.children = ['child', 'parent']; - - Extends.prototype.compileToFragments = function(o) { - return new Call(new Value(new Literal(utility('extend', o))), [this.child, this.parent]).compileToFragments(o); - }; - - return Extends; - - })(Base); - - exports.Access = Access = (function(superClass1) { - extend1(Access, superClass1); - - function Access(name1, tag) { - this.name = name1; - this.name.asKey = true; - this.soak = tag === 'soak'; - } - - Access.prototype.children = ['name']; - - Access.prototype.compileToFragments = function(o) { - var name; - name = this.name.compileToFragments(o); - if (IDENTIFIER.test(fragmentsToText(name))) { - name.unshift(this.makeCode(".")); - } else { - name.unshift(this.makeCode("[")); - name.push(this.makeCode("]")); - } - return name; - }; - - Access.prototype.isComplex = NO; - - return Access; - - })(Base); - - exports.Index = Index = (function(superClass1) { - extend1(Index, superClass1); - - function Index(index1) { - this.index = index1; - } - - Index.prototype.children = ['index']; - - Index.prototype.compileToFragments = function(o) { - return [].concat(this.makeCode("["), this.index.compileToFragments(o, LEVEL_PAREN), this.makeCode("]")); - }; - - Index.prototype.isComplex = function() { - return this.index.isComplex(); - }; - - return Index; - - })(Base); - - exports.Range = Range = (function(superClass1) { - extend1(Range, superClass1); - - Range.prototype.children = ['from', 'to']; - - function Range(from1, to1, tag) { - this.from = from1; - this.to = to1; - this.exclusive = tag === 'exclusive'; - this.equals = this.exclusive ? '' : '='; - } - - Range.prototype.compileVariables = function(o) { - var isComplex, ref3, ref4, ref5, ref6, step; - o = merge(o, { - top: true - }); - isComplex = del(o, 'isComplex'); - ref3 = this.cacheToCodeFragments(this.from.cache(o, LEVEL_LIST, isComplex)), this.fromC = ref3[0], this.fromVar = ref3[1]; - ref4 = this.cacheToCodeFragments(this.to.cache(o, LEVEL_LIST, isComplex)), this.toC = ref4[0], this.toVar = ref4[1]; - if (step = del(o, 'step')) { - ref5 = this.cacheToCodeFragments(step.cache(o, LEVEL_LIST, isComplex)), this.step = ref5[0], this.stepVar = ref5[1]; - } - ref6 = [this.fromVar.match(NUMBER), this.toVar.match(NUMBER)], this.fromNum = ref6[0], this.toNum = ref6[1]; - if (this.stepVar) { - return this.stepNum = this.stepVar.match(NUMBER); - } - }; - - Range.prototype.compileNode = function(o) { - var cond, condPart, from, gt, idx, idxName, known, lt, namedIndex, ref3, ref4, stepPart, to, varPart; - if (!this.fromVar) { - this.compileVariables(o); - } - if (!o.index) { - return this.compileArray(o); - } - known = this.fromNum && this.toNum; - idx = del(o, 'index'); - idxName = del(o, 'name'); - namedIndex = idxName && idxName !== idx; - varPart = idx + " = " + this.fromC; - if (this.toC !== this.toVar) { - varPart += ", " + this.toC; - } - if (this.step !== this.stepVar) { - varPart += ", " + this.step; - } - ref3 = [idx + " <" + this.equals, idx + " >" + this.equals], lt = ref3[0], gt = ref3[1]; - condPart = this.stepNum ? parseNum(this.stepNum[0]) > 0 ? lt + " " + this.toVar : gt + " " + this.toVar : known ? ((ref4 = [parseNum(this.fromNum[0]), parseNum(this.toNum[0])], from = ref4[0], to = ref4[1], ref4), from <= to ? lt + " " + to : gt + " " + to) : (cond = this.stepVar ? this.stepVar + " > 0" : this.fromVar + " <= " + this.toVar, cond + " ? " + lt + " " + this.toVar + " : " + gt + " " + this.toVar); - stepPart = this.stepVar ? idx + " += " + this.stepVar : known ? namedIndex ? from <= to ? "++" + idx : "--" + idx : from <= to ? idx + "++" : idx + "--" : namedIndex ? cond + " ? ++" + idx + " : --" + idx : cond + " ? " + idx + "++ : " + idx + "--"; - if (namedIndex) { - varPart = idxName + " = " + varPart; - } - if (namedIndex) { - stepPart = idxName + " = " + stepPart; - } - return [this.makeCode(varPart + "; " + condPart + "; " + stepPart)]; - }; - - Range.prototype.compileArray = function(o) { - var args, body, cond, hasArgs, i, idt, j, post, pre, range, ref3, ref4, result, results, vars; - if (this.fromNum && this.toNum && Math.abs(this.fromNum - this.toNum) <= 20) { - range = (function() { - results = []; - for (var j = ref3 = +this.fromNum, ref4 = +this.toNum; ref3 <= ref4 ? j <= ref4 : j >= ref4; ref3 <= ref4 ? j++ : j--){ results.push(j); } - return results; - }).apply(this); - if (this.exclusive) { - range.pop(); - } - return [this.makeCode("[" + (range.join(', ')) + "]")]; - } - idt = this.tab + TAB; - i = o.scope.freeVariable('i', { - single: true - }); - result = o.scope.freeVariable('results'); - pre = "\n" + idt + result + " = [];"; - if (this.fromNum && this.toNum) { - o.index = i; - body = fragmentsToText(this.compileNode(o)); - } else { - vars = (i + " = " + this.fromC) + (this.toC !== this.toVar ? ", " + this.toC : ''); - cond = this.fromVar + " <= " + this.toVar; - body = "var " + vars + "; " + cond + " ? " + i + " <" + this.equals + " " + this.toVar + " : " + i + " >" + this.equals + " " + this.toVar + "; " + cond + " ? " + i + "++ : " + i + "--"; - } - post = "{ " + result + ".push(" + i + "); }\n" + idt + "return " + result + ";\n" + o.indent; - hasArgs = function(node) { - return node != null ? node.contains(isLiteralArguments) : void 0; - }; - if (hasArgs(this.from) || hasArgs(this.to)) { - args = ', arguments'; - } - return [this.makeCode("(function() {" + pre + "\n" + idt + "for (" + body + ")" + post + "}).apply(this" + (args != null ? args : '') + ")")]; - }; - - return Range; - - })(Base); - - exports.Slice = Slice = (function(superClass1) { - extend1(Slice, superClass1); - - Slice.prototype.children = ['range']; - - function Slice(range1) { - this.range = range1; - Slice.__super__.constructor.call(this); - } - - Slice.prototype.compileNode = function(o) { - var compiled, compiledText, from, fromCompiled, ref3, to, toStr; - ref3 = this.range, to = ref3.to, from = ref3.from; - fromCompiled = from && from.compileToFragments(o, LEVEL_PAREN) || [this.makeCode('0')]; - if (to) { - compiled = to.compileToFragments(o, LEVEL_PAREN); - compiledText = fragmentsToText(compiled); - if (!(!this.range.exclusive && +compiledText === -1)) { - toStr = ', ' + (this.range.exclusive ? compiledText : SIMPLENUM.test(compiledText) ? "" + (+compiledText + 1) : (compiled = to.compileToFragments(o, LEVEL_ACCESS), "+" + (fragmentsToText(compiled)) + " + 1 || 9e9")); - } - } - return [this.makeCode(".slice(" + (fragmentsToText(fromCompiled)) + (toStr || '') + ")")]; - }; - - return Slice; - - })(Base); - - exports.Obj = Obj = (function(superClass1) { - extend1(Obj, superClass1); - - function Obj(props, generated) { - this.generated = generated != null ? generated : false; - this.objects = this.properties = props || []; - } - - Obj.prototype.children = ['properties']; - - Obj.prototype.compileNode = function(o) { - var answer, dynamicIndex, hasDynamic, i, idt, indent, j, join, k, key, l, lastNoncom, len1, len2, len3, node, oref, prop, props, ref3, value; - props = this.properties; - if (this.generated) { - for (j = 0, len1 = props.length; j < len1; j++) { - node = props[j]; - if (node instanceof Value) { - node.error('cannot have an implicit value in an implicit object'); - } - } - } - for (dynamicIndex = k = 0, len2 = props.length; k < len2; dynamicIndex = ++k) { - prop = props[dynamicIndex]; - if ((prop.variable || prop).base instanceof Parens) { - break; - } - } - hasDynamic = dynamicIndex < props.length; - idt = o.indent += TAB; - lastNoncom = this.lastNonComment(this.properties); - answer = []; - if (hasDynamic) { - oref = o.scope.freeVariable('obj'); - answer.push(this.makeCode("(\n" + idt + oref + " = ")); - } - answer.push(this.makeCode("{" + (props.length === 0 || dynamicIndex === 0 ? '}' : '\n'))); - for (i = l = 0, len3 = props.length; l < len3; i = ++l) { - prop = props[i]; - if (i === dynamicIndex) { - if (i !== 0) { - answer.push(this.makeCode("\n" + idt + "}")); - } - answer.push(this.makeCode(',\n')); - } - join = i === props.length - 1 || i === dynamicIndex - 1 ? '' : prop === lastNoncom || prop instanceof Comment ? '\n' : ',\n'; - indent = prop instanceof Comment ? '' : idt; - if (hasDynamic && i < dynamicIndex) { - indent += TAB; - } - if (prop instanceof Assign && prop.variable instanceof Value && prop.variable.hasProperties()) { - prop.variable.error('Invalid object key'); - } - if (prop instanceof Value && prop["this"]) { - prop = new Assign(prop.properties[0].name, prop, 'object'); - } - if (!(prop instanceof Comment)) { - if (i < dynamicIndex) { - if (!(prop instanceof Assign)) { - prop = new Assign(prop, prop, 'object'); - } - (prop.variable.base || prop.variable).asKey = true; - } else { - if (prop instanceof Assign) { - key = prop.variable; - value = prop.value; - } else { - ref3 = prop.base.cache(o), key = ref3[0], value = ref3[1]; - } - prop = new Assign(new Value(new Literal(oref), [new Access(key)]), value); - } - } - if (indent) { - answer.push(this.makeCode(indent)); - } - answer.push.apply(answer, prop.compileToFragments(o, LEVEL_TOP)); - if (join) { - answer.push(this.makeCode(join)); - } - } - if (hasDynamic) { - answer.push(this.makeCode(",\n" + idt + oref + "\n" + this.tab + ")")); - } else { - if (props.length !== 0) { - answer.push(this.makeCode("\n" + this.tab + "}")); - } - } - if (this.front && !hasDynamic) { - return this.wrapInBraces(answer); - } else { - return answer; - } - }; - - Obj.prototype.assigns = function(name) { - var j, len1, prop, ref3; - ref3 = this.properties; - for (j = 0, len1 = ref3.length; j < len1; j++) { - prop = ref3[j]; - if (prop.assigns(name)) { - return true; - } - } - return false; - }; - - return Obj; - - })(Base); - - exports.Arr = Arr = (function(superClass1) { - extend1(Arr, superClass1); - - function Arr(objs) { - this.objects = objs || []; - } - - Arr.prototype.children = ['objects']; - - Arr.prototype.compileNode = function(o) { - var answer, compiledObjs, fragments, index, j, len1, obj; - if (!this.objects.length) { - return [this.makeCode('[]')]; - } - o.indent += TAB; - answer = Splat.compileSplattedArray(o, this.objects); - if (answer.length) { - return answer; - } - answer = []; - compiledObjs = (function() { - var j, len1, ref3, results; - ref3 = this.objects; - results = []; - for (j = 0, len1 = ref3.length; j < len1; j++) { - obj = ref3[j]; - results.push(obj.compileToFragments(o, LEVEL_LIST)); - } - return results; - }).call(this); - for (index = j = 0, len1 = compiledObjs.length; j < len1; index = ++j) { - fragments = compiledObjs[index]; - if (index) { - answer.push(this.makeCode(", ")); - } - answer.push.apply(answer, fragments); - } - if (fragmentsToText(answer).indexOf('\n') >= 0) { - answer.unshift(this.makeCode("[\n" + o.indent)); - answer.push(this.makeCode("\n" + this.tab + "]")); - } else { - answer.unshift(this.makeCode("[")); - answer.push(this.makeCode("]")); - } - return answer; - }; - - Arr.prototype.assigns = function(name) { - var j, len1, obj, ref3; - ref3 = this.objects; - for (j = 0, len1 = ref3.length; j < len1; j++) { - obj = ref3[j]; - if (obj.assigns(name)) { - return true; - } - } - return false; - }; - - return Arr; - - })(Base); - - exports.Class = Class = (function(superClass1) { - extend1(Class, superClass1); - - function Class(variable1, parent1, body1) { - this.variable = variable1; - this.parent = parent1; - this.body = body1 != null ? body1 : new Block; - this.boundFuncs = []; - this.body.classBody = true; - } - - Class.prototype.children = ['variable', 'parent', 'body']; - - Class.prototype.determineName = function() { - var decl, ref3, tail; - if (!this.variable) { - return null; - } - ref3 = this.variable.properties, tail = ref3[ref3.length - 1]; - decl = tail ? tail instanceof Access && tail.name.value : this.variable.base.value; - if (indexOf.call(STRICT_PROSCRIBED, decl) >= 0) { - this.variable.error("class variable name may not be " + decl); - } - return decl && (decl = IDENTIFIER.test(decl) && decl); - }; - - Class.prototype.setContext = function(name) { - return this.body.traverseChildren(false, function(node) { - if (node.classBody) { - return false; - } - if (node instanceof Literal && node.value === 'this') { - return node.value = name; - } else if (node instanceof Code) { - if (node.bound) { - return node.context = name; - } - } - }); - }; - - Class.prototype.addBoundFunctions = function(o) { - var bvar, j, len1, lhs, ref3; - ref3 = this.boundFuncs; - for (j = 0, len1 = ref3.length; j < len1; j++) { - bvar = ref3[j]; - lhs = (new Value(new Literal("this"), [new Access(bvar)])).compile(o); - this.ctor.body.unshift(new Literal(lhs + " = " + (utility('bind', o)) + "(" + lhs + ", this)")); - } - }; - - Class.prototype.addProperties = function(node, name, o) { - var acc, assign, base, exprs, func, props; - props = node.base.properties.slice(0); - exprs = (function() { - var results; - results = []; - while (assign = props.shift()) { - if (assign instanceof Assign) { - base = assign.variable.base; - delete assign.context; - func = assign.value; - if (base.value === 'constructor') { - if (this.ctor) { - assign.error('cannot define more than one constructor in a class'); - } - if (func.bound) { - assign.error('cannot define a constructor as a bound function'); - } - if (func instanceof Code) { - assign = this.ctor = func; - } else { - this.externalCtor = o.classScope.freeVariable('class'); - assign = new Assign(new Literal(this.externalCtor), func); - } - } else { - if (assign.variable["this"]) { - func["static"] = true; - } else { - acc = base.isComplex() ? new Index(base) : new Access(base); - assign.variable = new Value(new Literal(name), [new Access(new Literal('prototype')), acc]); - if (func instanceof Code && func.bound) { - this.boundFuncs.push(base); - func.bound = false; - } - } - } - } - results.push(assign); - } - return results; - }).call(this); - return compact(exprs); - }; - - Class.prototype.walkBody = function(name, o) { - return this.traverseChildren(false, (function(_this) { - return function(child) { - var cont, exps, i, j, len1, node, ref3; - cont = true; - if (child instanceof Class) { - return false; - } - if (child instanceof Block) { - ref3 = exps = child.expressions; - for (i = j = 0, len1 = ref3.length; j < len1; i = ++j) { - node = ref3[i]; - if (node instanceof Assign && node.variable.looksStatic(name)) { - node.value["static"] = true; - } else if (node instanceof Value && node.isObject(true)) { - cont = false; - exps[i] = _this.addProperties(node, name, o); - } - } - child.expressions = exps = flatten(exps); - } - return cont && !(child instanceof Class); - }; - })(this)); - }; - - Class.prototype.hoistDirectivePrologue = function() { - var expressions, index, node; - index = 0; - expressions = this.body.expressions; - while ((node = expressions[index]) && node instanceof Comment || node instanceof Value && node.isString()) { - ++index; - } - return this.directives = expressions.splice(0, index); - }; - - Class.prototype.ensureConstructor = function(name) { - if (!this.ctor) { - this.ctor = new Code; - if (this.externalCtor) { - this.ctor.body.push(new Literal(this.externalCtor + ".apply(this, arguments)")); - } else if (this.parent) { - this.ctor.body.push(new Literal(name + ".__super__.constructor.apply(this, arguments)")); - } - this.ctor.body.makeReturn(); - this.body.expressions.unshift(this.ctor); - } - this.ctor.ctor = this.ctor.name = name; - this.ctor.klass = null; - return this.ctor.noReturn = true; - }; - - Class.prototype.compileNode = function(o) { - var args, argumentsNode, func, jumpNode, klass, lname, name, ref3, superClass; - if (jumpNode = this.body.jumps()) { - jumpNode.error('Class bodies cannot contain pure statements'); - } - if (argumentsNode = this.body.contains(isLiteralArguments)) { - argumentsNode.error("Class bodies shouldn't reference arguments"); - } - name = this.determineName() || '_Class'; - if (name.reserved) { - name = "_" + name; - } - lname = new Literal(name); - func = new Code([], Block.wrap([this.body])); - args = []; - o.classScope = func.makeScope(o.scope); - this.hoistDirectivePrologue(); - this.setContext(name); - this.walkBody(name, o); - this.ensureConstructor(name); - this.addBoundFunctions(o); - this.body.spaced = true; - this.body.expressions.push(lname); - if (this.parent) { - superClass = new Literal(o.classScope.freeVariable('superClass', { - reserve: false - })); - this.body.expressions.unshift(new Extends(lname, superClass)); - func.params.push(new Param(superClass)); - args.push(this.parent); - } - (ref3 = this.body.expressions).unshift.apply(ref3, this.directives); - klass = new Parens(new Call(func, args)); - if (this.variable) { - klass = new Assign(this.variable, klass); - } - return klass.compileToFragments(o); - }; - - return Class; - - })(Base); - - exports.Assign = Assign = (function(superClass1) { - extend1(Assign, superClass1); - - function Assign(variable1, value1, context, options) { - var forbidden, name, ref3; - this.variable = variable1; - this.value = value1; - this.context = context; - this.param = options && options.param; - this.subpattern = options && options.subpattern; - forbidden = (ref3 = (name = this.variable.unwrapAll().value), indexOf.call(STRICT_PROSCRIBED, ref3) >= 0); - if (forbidden && this.context !== 'object') { - this.variable.error("variable name may not be \"" + name + "\""); - } - } - - Assign.prototype.children = ['variable', 'value']; - - Assign.prototype.isStatement = function(o) { - return (o != null ? o.level : void 0) === LEVEL_TOP && (this.context != null) && indexOf.call(this.context, "?") >= 0; - }; - - Assign.prototype.assigns = function(name) { - return this[this.context === 'object' ? 'value' : 'variable'].assigns(name); - }; - - Assign.prototype.unfoldSoak = function(o) { - return unfoldSoak(o, this, 'variable'); - }; - - Assign.prototype.compileNode = function(o) { - var answer, compiledName, isValue, j, name, properties, prototype, ref3, ref4, ref5, ref6, ref7, val, varBase; - if (isValue = this.variable instanceof Value) { - if (this.variable.isArray() || this.variable.isObject()) { - return this.compilePatternMatch(o); - } - if (this.variable.isSplice()) { - return this.compileSplice(o); - } - if ((ref3 = this.context) === '||=' || ref3 === '&&=' || ref3 === '?=') { - return this.compileConditional(o); - } - if ((ref4 = this.context) === '**=' || ref4 === '//=' || ref4 === '%%=') { - return this.compileSpecialMath(o); - } - } - if (this.value instanceof Code) { - if (this.value["static"]) { - this.value.klass = this.variable.base; - this.value.name = this.variable.properties[0]; - this.value.variable = this.variable; - } else if (((ref5 = this.variable.properties) != null ? ref5.length : void 0) >= 2) { - ref6 = this.variable.properties, properties = 3 <= ref6.length ? slice.call(ref6, 0, j = ref6.length - 2) : (j = 0, []), prototype = ref6[j++], name = ref6[j++]; - if (((ref7 = prototype.name) != null ? ref7.value : void 0) === 'prototype') { - this.value.klass = new Value(this.variable.base, properties); - this.value.name = name; - this.value.variable = this.variable; - } - } - } - if (!this.context) { - varBase = this.variable.unwrapAll(); - if (!varBase.isAssignable()) { - this.variable.error("\"" + (this.variable.compile(o)) + "\" cannot be assigned"); - } - if (!(typeof varBase.hasProperties === "function" ? varBase.hasProperties() : void 0)) { - if (this.param) { - o.scope.add(varBase.value, 'var'); - } else { - o.scope.find(varBase.value); - } - } - } - val = this.value.compileToFragments(o, LEVEL_LIST); - compiledName = this.variable.compileToFragments(o, LEVEL_LIST); - if (this.context === 'object') { - return compiledName.concat(this.makeCode(": "), val); - } - answer = compiledName.concat(this.makeCode(" " + (this.context || '=') + " "), val); - if (o.level <= LEVEL_LIST) { - return answer; - } else { - return this.wrapInBraces(answer); - } - }; - - Assign.prototype.compilePatternMatch = function(o) { - var acc, assigns, code, expandedIdx, fragments, i, idx, isObject, ivar, j, len1, name, obj, objects, olen, ref, ref3, ref4, ref5, ref6, ref7, ref8, rest, top, val, value, vvar, vvarText; - top = o.level === LEVEL_TOP; - value = this.value; - objects = this.variable.base.objects; - if (!(olen = objects.length)) { - code = value.compileToFragments(o); - if (o.level >= LEVEL_OP) { - return this.wrapInBraces(code); - } else { - return code; - } - } - isObject = this.variable.isObject(); - if (top && olen === 1 && !((obj = objects[0]) instanceof Splat)) { - if (obj instanceof Assign) { - ref3 = obj, (ref4 = ref3.variable, idx = ref4.base), obj = ref3.value; - } else { - idx = isObject ? obj["this"] ? obj.properties[0].name : obj : new Literal(0); - } - acc = IDENTIFIER.test(idx.unwrap().value || 0); - value = new Value(value); - value.properties.push(new (acc ? Access : Index)(idx)); - if (ref5 = obj.unwrap().value, indexOf.call(RESERVED, ref5) >= 0) { - obj.error("assignment to a reserved word: " + (obj.compile(o))); - } - return new Assign(obj, value, null, { - param: this.param - }).compileToFragments(o, LEVEL_TOP); - } - vvar = value.compileToFragments(o, LEVEL_LIST); - vvarText = fragmentsToText(vvar); - assigns = []; - expandedIdx = false; - if (!IDENTIFIER.test(vvarText) || this.variable.assigns(vvarText)) { - assigns.push([this.makeCode((ref = o.scope.freeVariable('ref')) + " = ")].concat(slice.call(vvar))); - vvar = [this.makeCode(ref)]; - vvarText = ref; - } - for (i = j = 0, len1 = objects.length; j < len1; i = ++j) { - obj = objects[i]; - idx = i; - if (isObject) { - if (obj instanceof Assign) { - ref6 = obj, (ref7 = ref6.variable, idx = ref7.base), obj = ref6.value; - } else { - if (obj.base instanceof Parens) { - ref8 = new Value(obj.unwrapAll()).cacheReference(o), obj = ref8[0], idx = ref8[1]; - } else { - idx = obj["this"] ? obj.properties[0].name : obj; - } - } - } - if (!expandedIdx && obj instanceof Splat) { - name = obj.name.unwrap().value; - obj = obj.unwrap(); - val = olen + " <= " + vvarText + ".length ? " + (utility('slice', o)) + ".call(" + vvarText + ", " + i; - if (rest = olen - i - 1) { - ivar = o.scope.freeVariable('i', { - single: true - }); - val += ", " + ivar + " = " + vvarText + ".length - " + rest + ") : (" + ivar + " = " + i + ", [])"; - } else { - val += ") : []"; - } - val = new Literal(val); - expandedIdx = ivar + "++"; - } else if (!expandedIdx && obj instanceof Expansion) { - if (rest = olen - i - 1) { - if (rest === 1) { - expandedIdx = vvarText + ".length - 1"; - } else { - ivar = o.scope.freeVariable('i', { - single: true - }); - val = new Literal(ivar + " = " + vvarText + ".length - " + rest); - expandedIdx = ivar + "++"; - assigns.push(val.compileToFragments(o, LEVEL_LIST)); - } - } - continue; - } else { - name = obj.unwrap().value; - if (obj instanceof Splat || obj instanceof Expansion) { - obj.error("multiple splats/expansions are disallowed in an assignment"); - } - if (typeof idx === 'number') { - idx = new Literal(expandedIdx || idx); - acc = false; - } else { - acc = isObject && IDENTIFIER.test(idx.unwrap().value || 0); - } - val = new Value(new Literal(vvarText), [new (acc ? Access : Index)(idx)]); - } - if ((name != null) && indexOf.call(RESERVED, name) >= 0) { - obj.error("assignment to a reserved word: " + (obj.compile(o))); - } - assigns.push(new Assign(obj, val, null, { - param: this.param, - subpattern: true - }).compileToFragments(o, LEVEL_LIST)); - } - if (!(top || this.subpattern)) { - assigns.push(vvar); - } - fragments = this.joinFragmentArrays(assigns, ', '); - if (o.level < LEVEL_LIST) { - return fragments; - } else { - return this.wrapInBraces(fragments); - } - }; - - Assign.prototype.compileConditional = function(o) { - var fragments, left, ref3, right; - ref3 = this.variable.cacheReference(o), left = ref3[0], right = ref3[1]; - if (!left.properties.length && left.base instanceof Literal && left.base.value !== "this" && !o.scope.check(left.base.value)) { - this.variable.error("the variable \"" + left.base.value + "\" can't be assigned with " + this.context + " because it has not been declared before"); - } - if (indexOf.call(this.context, "?") >= 0) { - o.isExistentialEquals = true; - return new If(new Existence(left), right, { - type: 'if' - }).addElse(new Assign(right, this.value, '=')).compileToFragments(o); - } else { - fragments = new Op(this.context.slice(0, -1), left, new Assign(right, this.value, '=')).compileToFragments(o); - if (o.level <= LEVEL_LIST) { - return fragments; - } else { - return this.wrapInBraces(fragments); - } - } - }; - - Assign.prototype.compileSpecialMath = function(o) { - var left, ref3, right; - ref3 = this.variable.cacheReference(o), left = ref3[0], right = ref3[1]; - return new Assign(left, new Op(this.context.slice(0, -1), right, this.value)).compileToFragments(o); - }; - - Assign.prototype.compileSplice = function(o) { - var answer, exclusive, from, fromDecl, fromRef, name, ref3, ref4, ref5, to, valDef, valRef; - ref3 = this.variable.properties.pop().range, from = ref3.from, to = ref3.to, exclusive = ref3.exclusive; - name = this.variable.compile(o); - if (from) { - ref4 = this.cacheToCodeFragments(from.cache(o, LEVEL_OP)), fromDecl = ref4[0], fromRef = ref4[1]; - } else { - fromDecl = fromRef = '0'; - } - if (to) { - if (from instanceof Value && from.isSimpleNumber() && to instanceof Value && to.isSimpleNumber()) { - to = to.compile(o) - fromRef; - if (!exclusive) { - to += 1; - } - } else { - to = to.compile(o, LEVEL_ACCESS) + ' - ' + fromRef; - if (!exclusive) { - to += ' + 1'; - } - } - } else { - to = "9e9"; - } - ref5 = this.value.cache(o, LEVEL_LIST), valDef = ref5[0], valRef = ref5[1]; - answer = [].concat(this.makeCode("[].splice.apply(" + name + ", [" + fromDecl + ", " + to + "].concat("), valDef, this.makeCode(")), "), valRef); - if (o.level > LEVEL_TOP) { - return this.wrapInBraces(answer); - } else { - return answer; - } - }; - - return Assign; - - })(Base); - - exports.Code = Code = (function(superClass1) { - extend1(Code, superClass1); - - function Code(params, body, tag) { - this.params = params || []; - this.body = body || new Block; - this.bound = tag === 'boundfunc'; - this.isGenerator = !!this.body.contains(function(node) { - var ref3; - return node instanceof Op && ((ref3 = node.operator) === 'yield' || ref3 === 'yield*'); - }); - } - - Code.prototype.children = ['params', 'body']; - - Code.prototype.isStatement = function() { - return !!this.ctor; - }; - - Code.prototype.jumps = NO; - - Code.prototype.makeScope = function(parentScope) { - return new Scope(parentScope, this.body, this); - }; - - Code.prototype.compileNode = function(o) { - var answer, boundfunc, code, exprs, i, j, k, l, len1, len2, len3, len4, len5, len6, lit, m, p, param, params, q, r, ref, ref3, ref4, ref5, ref6, ref7, ref8, splats, uniqs, val, wasEmpty, wrapper; - if (this.bound && ((ref3 = o.scope.method) != null ? ref3.bound : void 0)) { - this.context = o.scope.method.context; - } - if (this.bound && !this.context) { - this.context = '_this'; - wrapper = new Code([new Param(new Literal(this.context))], new Block([this])); - boundfunc = new Call(wrapper, [new Literal('this')]); - boundfunc.updateLocationDataIfMissing(this.locationData); - return boundfunc.compileNode(o); - } - o.scope = del(o, 'classScope') || this.makeScope(o.scope); - o.scope.shared = del(o, 'sharedScope'); - o.indent += TAB; - delete o.bare; - delete o.isExistentialEquals; - params = []; - exprs = []; - ref4 = this.params; - for (j = 0, len1 = ref4.length; j < len1; j++) { - param = ref4[j]; - if (!(param instanceof Expansion)) { - o.scope.parameter(param.asReference(o)); - } - } - ref5 = this.params; - for (k = 0, len2 = ref5.length; k < len2; k++) { - param = ref5[k]; - if (!(param.splat || param instanceof Expansion)) { - continue; - } - ref6 = this.params; - for (l = 0, len3 = ref6.length; l < len3; l++) { - p = ref6[l]; - if (!(p instanceof Expansion) && p.name.value) { - o.scope.add(p.name.value, 'var', true); - } - } - splats = new Assign(new Value(new Arr((function() { - var len4, m, ref7, results; - ref7 = this.params; - results = []; - for (m = 0, len4 = ref7.length; m < len4; m++) { - p = ref7[m]; - results.push(p.asReference(o)); - } - return results; - }).call(this))), new Value(new Literal('arguments'))); - break; - } - ref7 = this.params; - for (m = 0, len4 = ref7.length; m < len4; m++) { - param = ref7[m]; - if (param.isComplex()) { - val = ref = param.asReference(o); - if (param.value) { - val = new Op('?', ref, param.value); - } - exprs.push(new Assign(new Value(param.name), val, '=', { - param: true - })); - } else { - ref = param; - if (param.value) { - lit = new Literal(ref.name.value + ' == null'); - val = new Assign(new Value(param.name), param.value, '='); - exprs.push(new If(lit, val)); - } - } - if (!splats) { - params.push(ref); - } - } - wasEmpty = this.body.isEmpty(); - if (splats) { - exprs.unshift(splats); - } - if (exprs.length) { - (ref8 = this.body.expressions).unshift.apply(ref8, exprs); - } - for (i = q = 0, len5 = params.length; q < len5; i = ++q) { - p = params[i]; - params[i] = p.compileToFragments(o); - o.scope.parameter(fragmentsToText(params[i])); - } - uniqs = []; - this.eachParamName(function(name, node) { - if (indexOf.call(uniqs, name) >= 0) { - node.error("multiple parameters named " + name); - } - return uniqs.push(name); - }); - if (!(wasEmpty || this.noReturn)) { - this.body.makeReturn(); - } - code = 'function'; - if (this.isGenerator) { - code += '*'; - } - if (this.ctor) { - code += ' ' + this.name; - } - code += '('; - answer = [this.makeCode(code)]; - for (i = r = 0, len6 = params.length; r < len6; i = ++r) { - p = params[i]; - if (i) { - answer.push(this.makeCode(", ")); - } - answer.push.apply(answer, p); - } - answer.push(this.makeCode(') {')); - if (!this.body.isEmpty()) { - answer = answer.concat(this.makeCode("\n"), this.body.compileWithDeclarations(o), this.makeCode("\n" + this.tab)); - } - answer.push(this.makeCode('}')); - if (this.ctor) { - return [this.makeCode(this.tab)].concat(slice.call(answer)); - } - if (this.front || (o.level >= LEVEL_ACCESS)) { - return this.wrapInBraces(answer); - } else { - return answer; - } - }; - - Code.prototype.eachParamName = function(iterator) { - var j, len1, param, ref3, results; - ref3 = this.params; - results = []; - for (j = 0, len1 = ref3.length; j < len1; j++) { - param = ref3[j]; - results.push(param.eachName(iterator)); - } - return results; - }; - - Code.prototype.traverseChildren = function(crossScope, func) { - if (crossScope) { - return Code.__super__.traverseChildren.call(this, crossScope, func); - } - }; - - return Code; - - })(Base); - - exports.Param = Param = (function(superClass1) { - extend1(Param, superClass1); - - function Param(name1, value1, splat) { - var name, ref3; - this.name = name1; - this.value = value1; - this.splat = splat; - if (ref3 = (name = this.name.unwrapAll().value), indexOf.call(STRICT_PROSCRIBED, ref3) >= 0) { - this.name.error("parameter name \"" + name + "\" is not allowed"); - } - } - - Param.prototype.children = ['name', 'value']; - - Param.prototype.compileToFragments = function(o) { - return this.name.compileToFragments(o, LEVEL_LIST); - }; - - Param.prototype.asReference = function(o) { - var name, node; - if (this.reference) { - return this.reference; - } - node = this.name; - if (node["this"]) { - name = node.properties[0].name.value; - if (name.reserved) { - name = "_" + name; - } - node = new Literal(o.scope.freeVariable(name)); - } else if (node.isComplex()) { - node = new Literal(o.scope.freeVariable('arg')); - } - node = new Value(node); - if (this.splat) { - node = new Splat(node); - } - node.updateLocationDataIfMissing(this.locationData); - return this.reference = node; - }; - - Param.prototype.isComplex = function() { - return this.name.isComplex(); - }; - - Param.prototype.eachName = function(iterator, name) { - var atParam, j, len1, node, obj, ref3; - if (name == null) { - name = this.name; - } - atParam = function(obj) { - return iterator("@" + obj.properties[0].name.value, obj); - }; - if (name instanceof Literal) { - return iterator(name.value, name); - } - if (name instanceof Value) { - return atParam(name); - } - ref3 = name.objects; - for (j = 0, len1 = ref3.length; j < len1; j++) { - obj = ref3[j]; - if (obj instanceof Assign) { - this.eachName(iterator, obj.value.unwrap()); - } else if (obj instanceof Splat) { - node = obj.name.unwrap(); - iterator(node.value, node); - } else if (obj instanceof Value) { - if (obj.isArray() || obj.isObject()) { - this.eachName(iterator, obj.base); - } else if (obj["this"]) { - atParam(obj); - } else { - iterator(obj.base.value, obj.base); - } - } else if (!(obj instanceof Expansion)) { - obj.error("illegal parameter " + (obj.compile())); - } - } - }; - - return Param; - - })(Base); - - exports.Splat = Splat = (function(superClass1) { - extend1(Splat, superClass1); - - Splat.prototype.children = ['name']; - - Splat.prototype.isAssignable = YES; - - function Splat(name) { - this.name = name.compile ? name : new Literal(name); - } - - Splat.prototype.assigns = function(name) { - return this.name.assigns(name); - }; - - Splat.prototype.compileToFragments = function(o) { - return this.name.compileToFragments(o); - }; - - Splat.prototype.unwrap = function() { - return this.name; - }; - - Splat.compileSplattedArray = function(o, list, apply) { - var args, base, compiledNode, concatPart, fragments, i, index, j, last, len1, node; - index = -1; - while ((node = list[++index]) && !(node instanceof Splat)) { - continue; - } - if (index >= list.length) { - return []; - } - if (list.length === 1) { - node = list[0]; - fragments = node.compileToFragments(o, LEVEL_LIST); - if (apply) { - return fragments; - } - return [].concat(node.makeCode((utility('slice', o)) + ".call("), fragments, node.makeCode(")")); - } - args = list.slice(index); - for (i = j = 0, len1 = args.length; j < len1; i = ++j) { - node = args[i]; - compiledNode = node.compileToFragments(o, LEVEL_LIST); - args[i] = node instanceof Splat ? [].concat(node.makeCode((utility('slice', o)) + ".call("), compiledNode, node.makeCode(")")) : [].concat(node.makeCode("["), compiledNode, node.makeCode("]")); - } - if (index === 0) { - node = list[0]; - concatPart = node.joinFragmentArrays(args.slice(1), ', '); - return args[0].concat(node.makeCode(".concat("), concatPart, node.makeCode(")")); - } - base = (function() { - var k, len2, ref3, results; - ref3 = list.slice(0, index); - results = []; - for (k = 0, len2 = ref3.length; k < len2; k++) { - node = ref3[k]; - results.push(node.compileToFragments(o, LEVEL_LIST)); - } - return results; - })(); - base = list[0].joinFragmentArrays(base, ', '); - concatPart = list[index].joinFragmentArrays(args, ', '); - last = list[list.length - 1]; - return [].concat(list[0].makeCode("["), base, list[index].makeCode("].concat("), concatPart, last.makeCode(")")); - }; - - return Splat; - - })(Base); - - exports.Expansion = Expansion = (function(superClass1) { - extend1(Expansion, superClass1); - - function Expansion() { - return Expansion.__super__.constructor.apply(this, arguments); - } - - Expansion.prototype.isComplex = NO; - - Expansion.prototype.compileNode = function(o) { - return this.error('Expansion must be used inside a destructuring assignment or parameter list'); - }; - - Expansion.prototype.asReference = function(o) { - return this; - }; - - Expansion.prototype.eachName = function(iterator) {}; - - return Expansion; - - })(Base); - - exports.While = While = (function(superClass1) { - extend1(While, superClass1); - - function While(condition, options) { - this.condition = (options != null ? options.invert : void 0) ? condition.invert() : condition; - this.guard = options != null ? options.guard : void 0; - } - - While.prototype.children = ['condition', 'guard', 'body']; - - While.prototype.isStatement = YES; - - While.prototype.makeReturn = function(res) { - if (res) { - return While.__super__.makeReturn.apply(this, arguments); - } else { - this.returns = !this.jumps({ - loop: true - }); - return this; - } - }; - - While.prototype.addBody = function(body1) { - this.body = body1; - return this; - }; - - While.prototype.jumps = function() { - var expressions, j, jumpNode, len1, node; - expressions = this.body.expressions; - if (!expressions.length) { - return false; - } - for (j = 0, len1 = expressions.length; j < len1; j++) { - node = expressions[j]; - if (jumpNode = node.jumps({ - loop: true - })) { - return jumpNode; - } - } - return false; - }; - - While.prototype.compileNode = function(o) { - var answer, body, rvar, set; - o.indent += TAB; - set = ''; - body = this.body; - if (body.isEmpty()) { - body = this.makeCode(''); - } else { - if (this.returns) { - body.makeReturn(rvar = o.scope.freeVariable('results')); - set = "" + this.tab + rvar + " = [];\n"; - } - if (this.guard) { - if (body.expressions.length > 1) { - body.expressions.unshift(new If((new Parens(this.guard)).invert(), new Literal("continue"))); - } else { - if (this.guard) { - body = Block.wrap([new If(this.guard, body)]); - } - } - } - body = [].concat(this.makeCode("\n"), body.compileToFragments(o, LEVEL_TOP), this.makeCode("\n" + this.tab)); - } - answer = [].concat(this.makeCode(set + this.tab + "while ("), this.condition.compileToFragments(o, LEVEL_PAREN), this.makeCode(") {"), body, this.makeCode("}")); - if (this.returns) { - answer.push(this.makeCode("\n" + this.tab + "return " + rvar + ";")); - } - return answer; - }; - - return While; - - })(Base); - - exports.Op = Op = (function(superClass1) { - var CONVERSIONS, INVERSIONS; - - extend1(Op, superClass1); - - function Op(op, first, second, flip) { - if (op === 'in') { - return new In(first, second); - } - if (op === 'do') { - return this.generateDo(first); - } - if (op === 'new') { - if (first instanceof Call && !first["do"] && !first.isNew) { - return first.newInstance(); - } - if (first instanceof Code && first.bound || first["do"]) { - first = new Parens(first); - } - } - this.operator = CONVERSIONS[op] || op; - this.first = first; - this.second = second; - this.flip = !!flip; - return this; - } - - CONVERSIONS = { - '==': '===', - '!=': '!==', - 'of': 'in', - 'yieldfrom': 'yield*' - }; - - INVERSIONS = { - '!==': '===', - '===': '!==' - }; - - Op.prototype.children = ['first', 'second']; - - Op.prototype.isSimpleNumber = NO; - - Op.prototype.isYield = function() { - var ref3; - return (ref3 = this.operator) === 'yield' || ref3 === 'yield*'; - }; - - Op.prototype.isYieldReturn = function() { - return this.isYield() && this.first instanceof Return; - }; - - Op.prototype.isUnary = function() { - return !this.second; - }; - - Op.prototype.isComplex = function() { - var ref3; - return !(this.isUnary() && ((ref3 = this.operator) === '+' || ref3 === '-') && this.first instanceof Value && this.first.isSimpleNumber()); - }; - - Op.prototype.isChainable = function() { - var ref3; - return (ref3 = this.operator) === '<' || ref3 === '>' || ref3 === '>=' || ref3 === '<=' || ref3 === '===' || ref3 === '!=='; - }; - - Op.prototype.invert = function() { - var allInvertable, curr, fst, op, ref3; - if (this.isChainable() && this.first.isChainable()) { - allInvertable = true; - curr = this; - while (curr && curr.operator) { - allInvertable && (allInvertable = curr.operator in INVERSIONS); - curr = curr.first; - } - if (!allInvertable) { - return new Parens(this).invert(); - } - curr = this; - while (curr && curr.operator) { - curr.invert = !curr.invert; - curr.operator = INVERSIONS[curr.operator]; - curr = curr.first; - } - return this; - } else if (op = INVERSIONS[this.operator]) { - this.operator = op; - if (this.first.unwrap() instanceof Op) { - this.first.invert(); - } - return this; - } else if (this.second) { - return new Parens(this).invert(); - } else if (this.operator === '!' && (fst = this.first.unwrap()) instanceof Op && ((ref3 = fst.operator) === '!' || ref3 === 'in' || ref3 === 'instanceof')) { - return fst; - } else { - return new Op('!', this); - } - }; - - Op.prototype.unfoldSoak = function(o) { - var ref3; - return ((ref3 = this.operator) === '++' || ref3 === '--' || ref3 === 'delete') && unfoldSoak(o, this, 'first'); - }; - - Op.prototype.generateDo = function(exp) { - var call, func, j, len1, param, passedParams, ref, ref3; - passedParams = []; - func = exp instanceof Assign && (ref = exp.value.unwrap()) instanceof Code ? ref : exp; - ref3 = func.params || []; - for (j = 0, len1 = ref3.length; j < len1; j++) { - param = ref3[j]; - if (param.value) { - passedParams.push(param.value); - delete param.value; - } else { - passedParams.push(param); - } - } - call = new Call(exp, passedParams); - call["do"] = true; - return call; - }; - - Op.prototype.compileNode = function(o) { - var answer, isChain, lhs, ref3, ref4, rhs; - isChain = this.isChainable() && this.first.isChainable(); - if (!isChain) { - this.first.front = this.front; - } - if (this.operator === 'delete' && o.scope.check(this.first.unwrapAll().value)) { - this.error('delete operand may not be argument or var'); - } - if (((ref3 = this.operator) === '--' || ref3 === '++') && (ref4 = this.first.unwrapAll().value, indexOf.call(STRICT_PROSCRIBED, ref4) >= 0)) { - this.error("cannot increment/decrement \"" + (this.first.unwrapAll().value) + "\""); - } - if (this.isYield()) { - return this.compileYield(o); - } - if (this.isUnary()) { - return this.compileUnary(o); - } - if (isChain) { - return this.compileChain(o); - } - switch (this.operator) { - case '?': - return this.compileExistence(o); - case '**': - return this.compilePower(o); - case '//': - return this.compileFloorDivision(o); - case '%%': - return this.compileModulo(o); - default: - lhs = this.first.compileToFragments(o, LEVEL_OP); - rhs = this.second.compileToFragments(o, LEVEL_OP); - answer = [].concat(lhs, this.makeCode(" " + this.operator + " "), rhs); - if (o.level <= LEVEL_OP) { - return answer; - } else { - return this.wrapInBraces(answer); - } - } - }; - - Op.prototype.compileChain = function(o) { - var fragments, fst, ref3, shared; - ref3 = this.first.second.cache(o), this.first.second = ref3[0], shared = ref3[1]; - fst = this.first.compileToFragments(o, LEVEL_OP); - fragments = fst.concat(this.makeCode(" " + (this.invert ? '&&' : '||') + " "), shared.compileToFragments(o), this.makeCode(" " + this.operator + " "), this.second.compileToFragments(o, LEVEL_OP)); - return this.wrapInBraces(fragments); - }; - - Op.prototype.compileExistence = function(o) { - var fst, ref; - if (this.first.isComplex()) { - ref = new Literal(o.scope.freeVariable('ref')); - fst = new Parens(new Assign(ref, this.first)); - } else { - fst = this.first; - ref = fst; - } - return new If(new Existence(fst), ref, { - type: 'if' - }).addElse(this.second).compileToFragments(o); - }; - - Op.prototype.compileUnary = function(o) { - var op, parts, plusMinus; - parts = []; - op = this.operator; - parts.push([this.makeCode(op)]); - if (op === '!' && this.first instanceof Existence) { - this.first.negated = !this.first.negated; - return this.first.compileToFragments(o); - } - if (o.level >= LEVEL_ACCESS) { - return (new Parens(this)).compileToFragments(o); - } - plusMinus = op === '+' || op === '-'; - if ((op === 'new' || op === 'typeof' || op === 'delete') || plusMinus && this.first instanceof Op && this.first.operator === op) { - parts.push([this.makeCode(' ')]); - } - if ((plusMinus && this.first instanceof Op) || (op === 'new' && this.first.isStatement(o))) { - this.first = new Parens(this.first); - } - parts.push(this.first.compileToFragments(o, LEVEL_OP)); - if (this.flip) { - parts.reverse(); - } - return this.joinFragmentArrays(parts, ''); - }; - - Op.prototype.compileYield = function(o) { - var op, parts; - parts = []; - op = this.operator; - if (o.scope.parent == null) { - this.error('yield statements must occur within a function generator.'); - } - if (indexOf.call(Object.keys(this.first), 'expression') >= 0 && !(this.first instanceof Throw)) { - if (this.isYieldReturn()) { - parts.push(this.first.compileToFragments(o, LEVEL_TOP)); - } else if (this.first.expression != null) { - parts.push(this.first.expression.compileToFragments(o, LEVEL_OP)); - } - } else { - parts.push([this.makeCode("(" + op + " ")]); - parts.push(this.first.compileToFragments(o, LEVEL_OP)); - parts.push([this.makeCode(")")]); - } - return this.joinFragmentArrays(parts, ''); - }; - - Op.prototype.compilePower = function(o) { - var pow; - pow = new Value(new Literal('Math'), [new Access(new Literal('pow'))]); - return new Call(pow, [this.first, this.second]).compileToFragments(o); - }; - - Op.prototype.compileFloorDivision = function(o) { - var div, floor; - floor = new Value(new Literal('Math'), [new Access(new Literal('floor'))]); - div = new Op('/', this.first, this.second); - return new Call(floor, [div]).compileToFragments(o); - }; - - Op.prototype.compileModulo = function(o) { - var mod; - mod = new Value(new Literal(utility('modulo', o))); - return new Call(mod, [this.first, this.second]).compileToFragments(o); - }; - - Op.prototype.toString = function(idt) { - return Op.__super__.toString.call(this, idt, this.constructor.name + ' ' + this.operator); - }; - - return Op; - - })(Base); - - exports.In = In = (function(superClass1) { - extend1(In, superClass1); - - function In(object, array) { - this.object = object; - this.array = array; - } - - In.prototype.children = ['object', 'array']; - - In.prototype.invert = NEGATE; - - In.prototype.compileNode = function(o) { - var hasSplat, j, len1, obj, ref3; - if (this.array instanceof Value && this.array.isArray() && this.array.base.objects.length) { - ref3 = this.array.base.objects; - for (j = 0, len1 = ref3.length; j < len1; j++) { - obj = ref3[j]; - if (!(obj instanceof Splat)) { - continue; - } - hasSplat = true; - break; - } - if (!hasSplat) { - return this.compileOrTest(o); - } - } - return this.compileLoopTest(o); - }; - - In.prototype.compileOrTest = function(o) { - var cmp, cnj, i, item, j, len1, ref, ref3, ref4, ref5, sub, tests; - ref3 = this.object.cache(o, LEVEL_OP), sub = ref3[0], ref = ref3[1]; - ref4 = this.negated ? [' !== ', ' && '] : [' === ', ' || '], cmp = ref4[0], cnj = ref4[1]; - tests = []; - ref5 = this.array.base.objects; - for (i = j = 0, len1 = ref5.length; j < len1; i = ++j) { - item = ref5[i]; - if (i) { - tests.push(this.makeCode(cnj)); - } - tests = tests.concat((i ? ref : sub), this.makeCode(cmp), item.compileToFragments(o, LEVEL_ACCESS)); - } - if (o.level < LEVEL_OP) { - return tests; - } else { - return this.wrapInBraces(tests); - } - }; - - In.prototype.compileLoopTest = function(o) { - var fragments, ref, ref3, sub; - ref3 = this.object.cache(o, LEVEL_LIST), sub = ref3[0], ref = ref3[1]; - fragments = [].concat(this.makeCode(utility('indexOf', o) + ".call("), this.array.compileToFragments(o, LEVEL_LIST), this.makeCode(", "), ref, this.makeCode(") " + (this.negated ? '< 0' : '>= 0'))); - if (fragmentsToText(sub) === fragmentsToText(ref)) { - return fragments; - } - fragments = sub.concat(this.makeCode(', '), fragments); - if (o.level < LEVEL_LIST) { - return fragments; - } else { - return this.wrapInBraces(fragments); - } - }; - - In.prototype.toString = function(idt) { - return In.__super__.toString.call(this, idt, this.constructor.name + (this.negated ? '!' : '')); - }; - - return In; - - })(Base); - - exports.Try = Try = (function(superClass1) { - extend1(Try, superClass1); - - function Try(attempt, errorVariable, recovery, ensure) { - this.attempt = attempt; - this.errorVariable = errorVariable; - this.recovery = recovery; - this.ensure = ensure; - } - - Try.prototype.children = ['attempt', 'recovery', 'ensure']; - - Try.prototype.isStatement = YES; - - Try.prototype.jumps = function(o) { - var ref3; - return this.attempt.jumps(o) || ((ref3 = this.recovery) != null ? ref3.jumps(o) : void 0); - }; - - Try.prototype.makeReturn = function(res) { - if (this.attempt) { - this.attempt = this.attempt.makeReturn(res); - } - if (this.recovery) { - this.recovery = this.recovery.makeReturn(res); - } - return this; - }; - - Try.prototype.compileNode = function(o) { - var catchPart, ensurePart, placeholder, tryPart; - o.indent += TAB; - tryPart = this.attempt.compileToFragments(o, LEVEL_TOP); - catchPart = this.recovery ? (placeholder = new Literal('_error'), this.errorVariable ? this.recovery.unshift(new Assign(this.errorVariable, placeholder)) : void 0, [].concat(this.makeCode(" catch ("), placeholder.compileToFragments(o), this.makeCode(") {\n"), this.recovery.compileToFragments(o, LEVEL_TOP), this.makeCode("\n" + this.tab + "}"))) : !(this.ensure || this.recovery) ? [this.makeCode(' catch (_error) {}')] : []; - ensurePart = this.ensure ? [].concat(this.makeCode(" finally {\n"), this.ensure.compileToFragments(o, LEVEL_TOP), this.makeCode("\n" + this.tab + "}")) : []; - return [].concat(this.makeCode(this.tab + "try {\n"), tryPart, this.makeCode("\n" + this.tab + "}"), catchPart, ensurePart); - }; - - return Try; - - })(Base); - - exports.Throw = Throw = (function(superClass1) { - extend1(Throw, superClass1); - - function Throw(expression) { - this.expression = expression; - } - - Throw.prototype.children = ['expression']; - - Throw.prototype.isStatement = YES; - - Throw.prototype.jumps = NO; - - Throw.prototype.makeReturn = THIS; - - Throw.prototype.compileNode = function(o) { - return [].concat(this.makeCode(this.tab + "throw "), this.expression.compileToFragments(o), this.makeCode(";")); - }; - - return Throw; - - })(Base); - - exports.Existence = Existence = (function(superClass1) { - extend1(Existence, superClass1); - - function Existence(expression) { - this.expression = expression; - } - - Existence.prototype.children = ['expression']; - - Existence.prototype.invert = NEGATE; - - Existence.prototype.compileNode = function(o) { - var cmp, cnj, code, ref3; - this.expression.front = this.front; - code = this.expression.compile(o, LEVEL_OP); - if (IDENTIFIER.test(code) && !o.scope.check(code)) { - ref3 = this.negated ? ['===', '||'] : ['!==', '&&'], cmp = ref3[0], cnj = ref3[1]; - code = "typeof " + code + " " + cmp + " \"undefined\" " + cnj + " " + code + " " + cmp + " null"; - } else { - code = code + " " + (this.negated ? '==' : '!=') + " null"; - } - return [this.makeCode(o.level <= LEVEL_COND ? code : "(" + code + ")")]; - }; - - return Existence; - - })(Base); - - exports.Parens = Parens = (function(superClass1) { - extend1(Parens, superClass1); - - function Parens(body1) { - this.body = body1; - } - - Parens.prototype.children = ['body']; - - Parens.prototype.unwrap = function() { - return this.body; - }; - - Parens.prototype.isComplex = function() { - return this.body.isComplex(); - }; - - Parens.prototype.compileNode = function(o) { - var bare, expr, fragments; - expr = this.body.unwrap(); - if (expr instanceof Value && expr.isAtomic()) { - expr.front = this.front; - return expr.compileToFragments(o); - } - fragments = expr.compileToFragments(o, LEVEL_PAREN); - bare = o.level < LEVEL_OP && (expr instanceof Op || expr instanceof Call || (expr instanceof For && expr.returns)); - if (bare) { - return fragments; - } else { - return this.wrapInBraces(fragments); - } - }; - - return Parens; - - })(Base); - - exports.For = For = (function(superClass1) { - extend1(For, superClass1); - - function For(body, source) { - var ref3; - this.source = source.source, this.guard = source.guard, this.step = source.step, this.name = source.name, this.index = source.index; - this.body = Block.wrap([body]); - this.own = !!source.own; - this.object = !!source.object; - if (this.object) { - ref3 = [this.index, this.name], this.name = ref3[0], this.index = ref3[1]; - } - if (this.index instanceof Value) { - this.index.error('index cannot be a pattern matching expression'); - } - this.range = this.source instanceof Value && this.source.base instanceof Range && !this.source.properties.length; - this.pattern = this.name instanceof Value; - if (this.range && this.index) { - this.index.error('indexes do not apply to range loops'); - } - if (this.range && this.pattern) { - this.name.error('cannot pattern match over range loops'); - } - if (this.own && !this.object) { - this.name.error('cannot use own with for-in'); - } - this.returns = false; - } - - For.prototype.children = ['body', 'source', 'guard', 'step']; - - For.prototype.compileNode = function(o) { - var body, bodyFragments, compare, compareDown, declare, declareDown, defPart, defPartFragments, down, forPartFragments, guardPart, idt1, increment, index, ivar, kvar, kvarAssign, last, lvar, name, namePart, ref, ref3, ref4, resultPart, returnResult, rvar, scope, source, step, stepNum, stepVar, svar, varPart; - body = Block.wrap([this.body]); - ref3 = body.expressions, last = ref3[ref3.length - 1]; - if ((last != null ? last.jumps() : void 0) instanceof Return) { - this.returns = false; - } - source = this.range ? this.source.base : this.source; - scope = o.scope; - if (!this.pattern) { - name = this.name && (this.name.compile(o, LEVEL_LIST)); - } - index = this.index && (this.index.compile(o, LEVEL_LIST)); - if (name && !this.pattern) { - scope.find(name); - } - if (index) { - scope.find(index); - } - if (this.returns) { - rvar = scope.freeVariable('results'); - } - ivar = (this.object && index) || scope.freeVariable('i', { - single: true - }); - kvar = (this.range && name) || index || ivar; - kvarAssign = kvar !== ivar ? kvar + " = " : ""; - if (this.step && !this.range) { - ref4 = this.cacheToCodeFragments(this.step.cache(o, LEVEL_LIST, isComplexOrAssignable)), step = ref4[0], stepVar = ref4[1]; - stepNum = stepVar.match(NUMBER); - } - if (this.pattern) { - name = ivar; - } - varPart = ''; - guardPart = ''; - defPart = ''; - idt1 = this.tab + TAB; - if (this.range) { - forPartFragments = source.compileToFragments(merge(o, { - index: ivar, - name: name, - step: this.step, - isComplex: isComplexOrAssignable - })); - } else { - svar = this.source.compile(o, LEVEL_LIST); - if ((name || this.own) && !IDENTIFIER.test(svar)) { - defPart += "" + this.tab + (ref = scope.freeVariable('ref')) + " = " + svar + ";\n"; - svar = ref; - } - if (name && !this.pattern) { - namePart = name + " = " + svar + "[" + kvar + "]"; - } - if (!this.object) { - if (step !== stepVar) { - defPart += "" + this.tab + step + ";\n"; - } - if (!(this.step && stepNum && (down = parseNum(stepNum[0]) < 0))) { - lvar = scope.freeVariable('len'); - } - declare = "" + kvarAssign + ivar + " = 0, " + lvar + " = " + svar + ".length"; - declareDown = "" + kvarAssign + ivar + " = " + svar + ".length - 1"; - compare = ivar + " < " + lvar; - compareDown = ivar + " >= 0"; - if (this.step) { - if (stepNum) { - if (down) { - compare = compareDown; - declare = declareDown; - } - } else { - compare = stepVar + " > 0 ? " + compare + " : " + compareDown; - declare = "(" + stepVar + " > 0 ? (" + declare + ") : " + declareDown + ")"; - } - increment = ivar + " += " + stepVar; - } else { - increment = "" + (kvar !== ivar ? "++" + ivar : ivar + "++"); - } - forPartFragments = [this.makeCode(declare + "; " + compare + "; " + kvarAssign + increment)]; - } - } - if (this.returns) { - resultPart = "" + this.tab + rvar + " = [];\n"; - returnResult = "\n" + this.tab + "return " + rvar + ";"; - body.makeReturn(rvar); - } - if (this.guard) { - if (body.expressions.length > 1) { - body.expressions.unshift(new If((new Parens(this.guard)).invert(), new Literal("continue"))); - } else { - if (this.guard) { - body = Block.wrap([new If(this.guard, body)]); - } - } - } - if (this.pattern) { - body.expressions.unshift(new Assign(this.name, new Literal(svar + "[" + kvar + "]"))); - } - defPartFragments = [].concat(this.makeCode(defPart), this.pluckDirectCall(o, body)); - if (namePart) { - varPart = "\n" + idt1 + namePart + ";"; - } - if (this.object) { - forPartFragments = [this.makeCode(kvar + " in " + svar)]; - if (this.own) { - guardPart = "\n" + idt1 + "if (!" + (utility('hasProp', o)) + ".call(" + svar + ", " + kvar + ")) continue;"; - } - } - bodyFragments = body.compileToFragments(merge(o, { - indent: idt1 - }), LEVEL_TOP); - if (bodyFragments && (bodyFragments.length > 0)) { - bodyFragments = [].concat(this.makeCode("\n"), bodyFragments, this.makeCode("\n")); - } - return [].concat(defPartFragments, this.makeCode("" + (resultPart || '') + this.tab + "for ("), forPartFragments, this.makeCode(") {" + guardPart + varPart), bodyFragments, this.makeCode(this.tab + "}" + (returnResult || ''))); - }; - - For.prototype.pluckDirectCall = function(o, body) { - var base, defs, expr, fn, idx, j, len1, ref, ref3, ref4, ref5, ref6, ref7, ref8, ref9, val; - defs = []; - ref3 = body.expressions; - for (idx = j = 0, len1 = ref3.length; j < len1; idx = ++j) { - expr = ref3[idx]; - expr = expr.unwrapAll(); - if (!(expr instanceof Call)) { - continue; - } - val = (ref4 = expr.variable) != null ? ref4.unwrapAll() : void 0; - if (!((val instanceof Code) || (val instanceof Value && ((ref5 = val.base) != null ? ref5.unwrapAll() : void 0) instanceof Code && val.properties.length === 1 && ((ref6 = (ref7 = val.properties[0].name) != null ? ref7.value : void 0) === 'call' || ref6 === 'apply')))) { - continue; - } - fn = ((ref8 = val.base) != null ? ref8.unwrapAll() : void 0) || val; - ref = new Literal(o.scope.freeVariable('fn')); - base = new Value(ref); - if (val.base) { - ref9 = [base, val], val.base = ref9[0], base = ref9[1]; - } - body.expressions[idx] = new Call(base, expr.args); - defs = defs.concat(this.makeCode(this.tab), new Assign(ref, fn).compileToFragments(o, LEVEL_TOP), this.makeCode(';\n')); - } - return defs; - }; - - return For; - - })(While); - - exports.Switch = Switch = (function(superClass1) { - extend1(Switch, superClass1); - - function Switch(subject, cases, otherwise) { - this.subject = subject; - this.cases = cases; - this.otherwise = otherwise; - } - - Switch.prototype.children = ['subject', 'cases', 'otherwise']; - - Switch.prototype.isStatement = YES; - - Switch.prototype.jumps = function(o) { - var block, conds, j, jumpNode, len1, ref3, ref4, ref5; - if (o == null) { - o = { - block: true - }; - } - ref3 = this.cases; - for (j = 0, len1 = ref3.length; j < len1; j++) { - ref4 = ref3[j], conds = ref4[0], block = ref4[1]; - if (jumpNode = block.jumps(o)) { - return jumpNode; - } - } - return (ref5 = this.otherwise) != null ? ref5.jumps(o) : void 0; - }; - - Switch.prototype.makeReturn = function(res) { - var j, len1, pair, ref3, ref4; - ref3 = this.cases; - for (j = 0, len1 = ref3.length; j < len1; j++) { - pair = ref3[j]; - pair[1].makeReturn(res); - } - if (res) { - this.otherwise || (this.otherwise = new Block([new Literal('void 0')])); - } - if ((ref4 = this.otherwise) != null) { - ref4.makeReturn(res); - } - return this; - }; - - Switch.prototype.compileNode = function(o) { - var block, body, cond, conditions, expr, fragments, i, idt1, idt2, j, k, len1, len2, ref3, ref4, ref5; - idt1 = o.indent + TAB; - idt2 = o.indent = idt1 + TAB; - fragments = [].concat(this.makeCode(this.tab + "switch ("), (this.subject ? this.subject.compileToFragments(o, LEVEL_PAREN) : this.makeCode("false")), this.makeCode(") {\n")); - ref3 = this.cases; - for (i = j = 0, len1 = ref3.length; j < len1; i = ++j) { - ref4 = ref3[i], conditions = ref4[0], block = ref4[1]; - ref5 = flatten([conditions]); - for (k = 0, len2 = ref5.length; k < len2; k++) { - cond = ref5[k]; - if (!this.subject) { - cond = cond.invert(); - } - fragments = fragments.concat(this.makeCode(idt1 + "case "), cond.compileToFragments(o, LEVEL_PAREN), this.makeCode(":\n")); - } - if ((body = block.compileToFragments(o, LEVEL_TOP)).length > 0) { - fragments = fragments.concat(body, this.makeCode('\n')); - } - if (i === this.cases.length - 1 && !this.otherwise) { - break; - } - expr = this.lastNonComment(block.expressions); - if (expr instanceof Return || (expr instanceof Literal && expr.jumps() && expr.value !== 'debugger')) { - continue; - } - fragments.push(cond.makeCode(idt2 + 'break;\n')); - } - if (this.otherwise && this.otherwise.expressions.length) { - fragments.push.apply(fragments, [this.makeCode(idt1 + "default:\n")].concat(slice.call(this.otherwise.compileToFragments(o, LEVEL_TOP)), [this.makeCode("\n")])); - } - fragments.push(this.makeCode(this.tab + '}')); - return fragments; - }; - - return Switch; - - })(Base); - - exports.If = If = (function(superClass1) { - extend1(If, superClass1); - - function If(condition, body1, options) { - this.body = body1; - if (options == null) { - options = {}; - } - this.condition = options.type === 'unless' ? condition.invert() : condition; - this.elseBody = null; - this.isChain = false; - this.soak = options.soak; - } - - If.prototype.children = ['condition', 'body', 'elseBody']; - - If.prototype.bodyNode = function() { - var ref3; - return (ref3 = this.body) != null ? ref3.unwrap() : void 0; - }; - - If.prototype.elseBodyNode = function() { - var ref3; - return (ref3 = this.elseBody) != null ? ref3.unwrap() : void 0; - }; - - If.prototype.addElse = function(elseBody) { - if (this.isChain) { - this.elseBodyNode().addElse(elseBody); - } else { - this.isChain = elseBody instanceof If; - this.elseBody = this.ensureBlock(elseBody); - this.elseBody.updateLocationDataIfMissing(elseBody.locationData); - } - return this; - }; - - If.prototype.isStatement = function(o) { - var ref3; - return (o != null ? o.level : void 0) === LEVEL_TOP || this.bodyNode().isStatement(o) || ((ref3 = this.elseBodyNode()) != null ? ref3.isStatement(o) : void 0); - }; - - If.prototype.jumps = function(o) { - var ref3; - return this.body.jumps(o) || ((ref3 = this.elseBody) != null ? ref3.jumps(o) : void 0); - }; - - If.prototype.compileNode = function(o) { - if (this.isStatement(o)) { - return this.compileStatement(o); - } else { - return this.compileExpression(o); - } - }; - - If.prototype.makeReturn = function(res) { - if (res) { - this.elseBody || (this.elseBody = new Block([new Literal('void 0')])); - } - this.body && (this.body = new Block([this.body.makeReturn(res)])); - this.elseBody && (this.elseBody = new Block([this.elseBody.makeReturn(res)])); - return this; - }; - - If.prototype.ensureBlock = function(node) { - if (node instanceof Block) { - return node; - } else { - return new Block([node]); - } - }; - - If.prototype.compileStatement = function(o) { - var answer, body, child, cond, exeq, ifPart, indent; - child = del(o, 'chainChild'); - exeq = del(o, 'isExistentialEquals'); - if (exeq) { - return new If(this.condition.invert(), this.elseBodyNode(), { - type: 'if' - }).compileToFragments(o); - } - indent = o.indent + TAB; - cond = this.condition.compileToFragments(o, LEVEL_PAREN); - body = this.ensureBlock(this.body).compileToFragments(merge(o, { - indent: indent - })); - ifPart = [].concat(this.makeCode("if ("), cond, this.makeCode(") {\n"), body, this.makeCode("\n" + this.tab + "}")); - if (!child) { - ifPart.unshift(this.makeCode(this.tab)); - } - if (!this.elseBody) { - return ifPart; - } - answer = ifPart.concat(this.makeCode(' else ')); - if (this.isChain) { - o.chainChild = true; - answer = answer.concat(this.elseBody.unwrap().compileToFragments(o, LEVEL_TOP)); - } else { - answer = answer.concat(this.makeCode("{\n"), this.elseBody.compileToFragments(merge(o, { - indent: indent - }), LEVEL_TOP), this.makeCode("\n" + this.tab + "}")); - } - return answer; - }; - - If.prototype.compileExpression = function(o) { - var alt, body, cond, fragments; - cond = this.condition.compileToFragments(o, LEVEL_COND); - body = this.bodyNode().compileToFragments(o, LEVEL_LIST); - alt = this.elseBodyNode() ? this.elseBodyNode().compileToFragments(o, LEVEL_LIST) : [this.makeCode('void 0')]; - fragments = cond.concat(this.makeCode(" ? "), body, this.makeCode(" : "), alt); - if (o.level >= LEVEL_COND) { - return this.wrapInBraces(fragments); - } else { - return fragments; - } - }; - - If.prototype.unfoldSoak = function() { - return this.soak && this; - }; - - return If; - - })(Base); - - UTILITIES = { - extend: function(o) { - return "function(child, parent) { for (var key in parent) { if (" + (utility('hasProp', o)) + ".call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }"; - }, - bind: function() { - return 'function(fn, me){ return function(){ return fn.apply(me, arguments); }; }'; - }, - indexOf: function() { - return "[].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }"; - }, - modulo: function() { - return "function(a, b) { return (+a % (b = +b) + b) % b; }"; - }, - hasProp: function() { - return '{}.hasOwnProperty'; - }, - slice: function() { - return '[].slice'; - } - }; - - LEVEL_TOP = 1; - - LEVEL_PAREN = 2; - - LEVEL_LIST = 3; - - LEVEL_COND = 4; - - LEVEL_OP = 5; - - LEVEL_ACCESS = 6; - - TAB = ' '; - - IDENTIFIER = /^(?!\d)[$\w\x7f-\uffff]+$/; - - SIMPLENUM = /^[+-]?\d+$/; - - HEXNUM = /^[+-]?0x[\da-f]+/i; - - NUMBER = /^[+-]?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)$/i; - - IS_STRING = /^['"]/; - - IS_REGEX = /^\//; - - utility = function(name, o) { - var ref, root; - root = o.scope.root; - if (name in root.utilities) { - return root.utilities[name]; - } else { - ref = root.freeVariable(name); - root.assign(ref, UTILITIES[name](o)); - return root.utilities[name] = ref; - } - }; - - multident = function(code, tab) { - code = code.replace(/\n/g, '$&' + tab); - return code.replace(/\s+$/, ''); - }; - - parseNum = function(x) { - if (x == null) { - return 0; - } else if (x.match(HEXNUM)) { - return parseInt(x, 16); - } else { - return parseFloat(x); - } - }; - - isLiteralArguments = function(node) { - return node instanceof Literal && node.value === 'arguments' && !node.asKey; - }; - - isLiteralThis = function(node) { - return (node instanceof Literal && node.value === 'this' && !node.asKey) || (node instanceof Code && node.bound) || (node instanceof Call && node.isSuper); - }; - - isComplexOrAssignable = function(node) { - return node.isComplex() || (typeof node.isAssignable === "function" ? node.isAssignable() : void 0); - }; - - unfoldSoak = function(o, parent, name) { - var ifn; - if (!(ifn = parent[name].unfoldSoak(o))) { - return; - } - parent[name] = ifn.body; - ifn.body = new Value(parent); - return ifn; - }; - -}).call(this); - - return module.exports; -})();require['./sourcemap'] = (function() { - var exports = {}, module = {exports: exports}; - // Generated by CoffeeScript 1.9.1 -(function() { - var LineMap, SourceMap; - - LineMap = (function() { - function LineMap(line1) { - this.line = line1; - this.columns = []; - } - - LineMap.prototype.add = function(column, arg, options) { - var sourceColumn, sourceLine; - sourceLine = arg[0], sourceColumn = arg[1]; - if (options == null) { - options = {}; - } - if (this.columns[column] && options.noReplace) { - return; - } - return this.columns[column] = { - line: this.line, - column: column, - sourceLine: sourceLine, - sourceColumn: sourceColumn - }; - }; - - LineMap.prototype.sourceLocation = function(column) { - var mapping; - while (!((mapping = this.columns[column]) || (column <= 0))) { - column--; - } - return mapping && [mapping.sourceLine, mapping.sourceColumn]; - }; - - return LineMap; - - })(); - - SourceMap = (function() { - var BASE64_CHARS, VLQ_CONTINUATION_BIT, VLQ_SHIFT, VLQ_VALUE_MASK; - - function SourceMap() { - this.lines = []; - } - - SourceMap.prototype.add = function(sourceLocation, generatedLocation, options) { - var base, column, line, lineMap; - if (options == null) { - options = {}; - } - line = generatedLocation[0], column = generatedLocation[1]; - lineMap = ((base = this.lines)[line] || (base[line] = new LineMap(line))); - return lineMap.add(column, sourceLocation, options); - }; - - SourceMap.prototype.sourceLocation = function(arg) { - var column, line, lineMap; - line = arg[0], column = arg[1]; - while (!((lineMap = this.lines[line]) || (line <= 0))) { - line--; - } - return lineMap && lineMap.sourceLocation(column); - }; - - SourceMap.prototype.generate = function(options, code) { - var buffer, i, j, lastColumn, lastSourceColumn, lastSourceLine, len, len1, lineMap, lineNumber, mapping, needComma, ref, ref1, v3, writingline; - if (options == null) { - options = {}; - } - if (code == null) { - code = null; - } - writingline = 0; - lastColumn = 0; - lastSourceLine = 0; - lastSourceColumn = 0; - needComma = false; - buffer = ""; - ref = this.lines; - for (lineNumber = i = 0, len = ref.length; i < len; lineNumber = ++i) { - lineMap = ref[lineNumber]; - if (lineMap) { - ref1 = lineMap.columns; - for (j = 0, len1 = ref1.length; j < len1; j++) { - mapping = ref1[j]; - if (!(mapping)) { - continue; - } - while (writingline < mapping.line) { - lastColumn = 0; - needComma = false; - buffer += ";"; - writingline++; - } - if (needComma) { - buffer += ","; - needComma = false; - } - buffer += this.encodeVlq(mapping.column - lastColumn); - lastColumn = mapping.column; - buffer += this.encodeVlq(0); - buffer += this.encodeVlq(mapping.sourceLine - lastSourceLine); - lastSourceLine = mapping.sourceLine; - buffer += this.encodeVlq(mapping.sourceColumn - lastSourceColumn); - lastSourceColumn = mapping.sourceColumn; - needComma = true; - } - } - } - v3 = { - version: 3, - file: options.generatedFile || '', - sourceRoot: options.sourceRoot || '', - sources: options.sourceFiles || [''], - names: [], - mappings: buffer - }; - if (options.inline) { - v3.sourcesContent = [code]; - } - return JSON.stringify(v3, null, 2); - }; - - VLQ_SHIFT = 5; - - VLQ_CONTINUATION_BIT = 1 << VLQ_SHIFT; - - VLQ_VALUE_MASK = VLQ_CONTINUATION_BIT - 1; - - SourceMap.prototype.encodeVlq = function(value) { - var answer, nextChunk, signBit, valueToEncode; - answer = ''; - signBit = value < 0 ? 1 : 0; - valueToEncode = (Math.abs(value) << 1) + signBit; - while (valueToEncode || !answer) { - nextChunk = valueToEncode & VLQ_VALUE_MASK; - valueToEncode = valueToEncode >> VLQ_SHIFT; - if (valueToEncode) { - nextChunk |= VLQ_CONTINUATION_BIT; - } - answer += this.encodeBase64(nextChunk); - } - return answer; - }; - - BASE64_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; - - SourceMap.prototype.encodeBase64 = function(value) { - return BASE64_CHARS[value] || (function() { - throw new Error("Cannot Base64 encode value: " + value); - })(); - }; - - return SourceMap; - - })(); - - module.exports = SourceMap; - -}).call(this); - - return module.exports; -})();require['./coffee-script'] = (function() { - var exports = {}, module = {exports: exports}; - // Generated by CoffeeScript 1.9.1 -(function() { - var Lexer, SourceMap, base, compile, ext, formatSourcePosition, fs, getSourceMap, helpers, i, len, lexer, parser, path, ref, sourceMaps, vm, withPrettyErrors, - hasProp = {}.hasOwnProperty, - indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; - - fs = require('fs'); - - vm = require('vm'); - - path = require('path'); - - Lexer = require('./lexer').Lexer; - - parser = require('./parser').parser; - - helpers = require('./helpers'); - - SourceMap = require('./sourcemap'); - - exports.VERSION = '1.9.1'; - - exports.FILE_EXTENSIONS = ['.coffee', '.litcoffee', '.coffee.md']; - - exports.helpers = helpers; - - withPrettyErrors = function(fn) { - return function(code, options) { - var err; - if (options == null) { - options = {}; - } - try { - return fn.call(this, code, options); - } catch (_error) { - err = _error; - throw helpers.updateSyntaxError(err, code, options.filename); - } - }; - }; - - exports.compile = compile = withPrettyErrors(function(code, options) { - var answer, currentColumn, currentLine, extend, fragment, fragments, header, i, js, len, map, merge, newLines, token, tokens; - merge = helpers.merge, extend = helpers.extend; - options = extend({}, options); - if (options.sourceMap) { - map = new SourceMap; - } - tokens = lexer.tokenize(code, options); - options.referencedVars = (function() { - var i, len, results; - results = []; - for (i = 0, len = tokens.length; i < len; i++) { - token = tokens[i]; - if (token.variable) { - results.push(token[1]); - } - } - return results; - })(); - fragments = parser.parse(tokens).compileToFragments(options); - currentLine = 0; - if (options.header) { - currentLine += 1; - } - if (options.shiftLine) { - currentLine += 1; - } - currentColumn = 0; - js = ""; - for (i = 0, len = fragments.length; i < len; i++) { - fragment = fragments[i]; - if (options.sourceMap) { - if (fragment.locationData) { - map.add([fragment.locationData.first_line, fragment.locationData.first_column], [currentLine, currentColumn], { - noReplace: true - }); - } - newLines = helpers.count(fragment.code, "\n"); - currentLine += newLines; - if (newLines) { - currentColumn = fragment.code.length - (fragment.code.lastIndexOf("\n") + 1); - } else { - currentColumn += fragment.code.length; - } - } - js += fragment.code; - } - if (options.header) { - header = "Generated by CoffeeScript " + this.VERSION; - js = "// " + header + "\n" + js; - } - if (options.sourceMap) { - answer = { - js: js - }; - answer.sourceMap = map; - answer.v3SourceMap = map.generate(options, code); - return answer; - } else { - return js; - } - }); - - exports.tokens = withPrettyErrors(function(code, options) { - return lexer.tokenize(code, options); - }); - - exports.nodes = withPrettyErrors(function(source, options) { - if (typeof source === 'string') { - return parser.parse(lexer.tokenize(source, options)); - } else { - return parser.parse(source); - } - }); - - exports.run = function(code, options) { - var answer, dir, mainModule, ref; - if (options == null) { - options = {}; - } - mainModule = require.main; - mainModule.filename = process.argv[1] = options.filename ? fs.realpathSync(options.filename) : '.'; - mainModule.moduleCache && (mainModule.moduleCache = {}); - dir = options.filename ? path.dirname(fs.realpathSync(options.filename)) : fs.realpathSync('.'); - mainModule.paths = require('module')._nodeModulePaths(dir); - if (!helpers.isCoffee(mainModule.filename) || require.extensions) { - answer = compile(code, options); - code = (ref = answer.js) != null ? ref : answer; - } - return mainModule._compile(code, mainModule.filename); - }; - - exports["eval"] = function(code, options) { - var Module, _module, _require, createContext, i, isContext, js, k, len, o, r, ref, ref1, ref2, ref3, sandbox, v; - if (options == null) { - options = {}; - } - if (!(code = code.trim())) { - return; - } - createContext = (ref = vm.Script.createContext) != null ? ref : vm.createContext; - isContext = (ref1 = vm.isContext) != null ? ref1 : function(ctx) { - return options.sandbox instanceof createContext().constructor; - }; - if (createContext) { - if (options.sandbox != null) { - if (isContext(options.sandbox)) { - sandbox = options.sandbox; - } else { - sandbox = createContext(); - ref2 = options.sandbox; - for (k in ref2) { - if (!hasProp.call(ref2, k)) continue; - v = ref2[k]; - sandbox[k] = v; - } - } - sandbox.global = sandbox.root = sandbox.GLOBAL = sandbox; - } else { - sandbox = global; - } - sandbox.__filename = options.filename || 'eval'; - sandbox.__dirname = path.dirname(sandbox.__filename); - if (!(sandbox !== global || sandbox.module || sandbox.require)) { - Module = require('module'); - sandbox.module = _module = new Module(options.modulename || 'eval'); - sandbox.require = _require = function(path) { - return Module._load(path, _module, true); - }; - _module.filename = sandbox.__filename; - ref3 = Object.getOwnPropertyNames(require); - for (i = 0, len = ref3.length; i < len; i++) { - r = ref3[i]; - if (r !== 'paths') { - _require[r] = require[r]; - } - } - _require.paths = _module.paths = Module._nodeModulePaths(process.cwd()); - _require.resolve = function(request) { - return Module._resolveFilename(request, _module); - }; - } - } - o = {}; - for (k in options) { - if (!hasProp.call(options, k)) continue; - v = options[k]; - o[k] = v; - } - o.bare = true; - js = compile(code, o); - if (sandbox === global) { - return vm.runInThisContext(js); - } else { - return vm.runInContext(js, sandbox); - } - }; - - exports.register = function() { - return require('./register'); - }; - - if (require.extensions) { - ref = this.FILE_EXTENSIONS; - for (i = 0, len = ref.length; i < len; i++) { - ext = ref[i]; - if ((base = require.extensions)[ext] == null) { - base[ext] = function() { - throw new Error("Use CoffeeScript.register() or require the coffee-script/register module to require " + ext + " files."); - }; - } - } - } - - exports._compileFile = function(filename, sourceMap) { - var answer, err, raw, stripped; - if (sourceMap == null) { - sourceMap = false; - } - raw = fs.readFileSync(filename, 'utf8'); - stripped = raw.charCodeAt(0) === 0xFEFF ? raw.substring(1) : raw; - try { - answer = compile(stripped, { - filename: filename, - sourceMap: sourceMap, - literate: helpers.isLiterate(filename) - }); - } catch (_error) { - err = _error; - throw helpers.updateSyntaxError(err, stripped, filename); - } - return answer; - }; - - lexer = new Lexer; - - parser.lexer = { - lex: function() { - var tag, token; - token = parser.tokens[this.pos++]; - if (token) { - tag = token[0], this.yytext = token[1], this.yylloc = token[2]; - parser.errorToken = token.origin || token; - this.yylineno = this.yylloc.first_line; - } else { - tag = ''; - } - return tag; - }, - setInput: function(tokens) { - parser.tokens = tokens; - return this.pos = 0; - }, - upcomingInput: function() { - return ""; - } - }; - - parser.yy = require('./nodes'); - - parser.yy.parseError = function(message, arg) { - var errorLoc, errorTag, errorText, errorToken, token, tokens; - token = arg.token; - errorToken = parser.errorToken, tokens = parser.tokens; - errorTag = errorToken[0], errorText = errorToken[1], errorLoc = errorToken[2]; - errorText = (function() { - switch (false) { - case errorToken !== tokens[tokens.length - 1]: - return 'end of input'; - case errorTag !== 'INDENT' && errorTag !== 'OUTDENT': - return 'indentation'; - case errorTag !== 'IDENTIFIER' && errorTag !== 'NUMBER' && errorTag !== 'STRING' && errorTag !== 'STRING_START' && errorTag !== 'REGEX' && errorTag !== 'REGEX_START': - return errorTag.replace(/_START$/, '').toLowerCase(); - default: - return helpers.nameWhitespaceCharacter(errorText); - } - })(); - return helpers.throwSyntaxError("unexpected " + errorText, errorLoc); - }; - - formatSourcePosition = function(frame, getSourceMapping) { - var as, column, fileLocation, fileName, functionName, isConstructor, isMethodCall, line, methodName, source, tp, typeName; - fileName = void 0; - fileLocation = ''; - if (frame.isNative()) { - fileLocation = "native"; - } else { - if (frame.isEval()) { - fileName = frame.getScriptNameOrSourceURL(); - if (!fileName) { - fileLocation = (frame.getEvalOrigin()) + ", "; - } - } else { - fileName = frame.getFileName(); - } - fileName || (fileName = ""); - line = frame.getLineNumber(); - column = frame.getColumnNumber(); - source = getSourceMapping(fileName, line, column); - fileLocation = source ? fileName + ":" + source[0] + ":" + source[1] : fileName + ":" + line + ":" + column; - } - functionName = frame.getFunctionName(); - isConstructor = frame.isConstructor(); - isMethodCall = !(frame.isToplevel() || isConstructor); - if (isMethodCall) { - methodName = frame.getMethodName(); - typeName = frame.getTypeName(); - if (functionName) { - tp = as = ''; - if (typeName && functionName.indexOf(typeName)) { - tp = typeName + "."; - } - if (methodName && functionName.indexOf("." + methodName) !== functionName.length - methodName.length - 1) { - as = " [as " + methodName + "]"; - } - return "" + tp + functionName + as + " (" + fileLocation + ")"; - } else { - return typeName + "." + (methodName || '') + " (" + fileLocation + ")"; - } - } else if (isConstructor) { - return "new " + (functionName || '') + " (" + fileLocation + ")"; - } else if (functionName) { - return functionName + " (" + fileLocation + ")"; - } else { - return fileLocation; - } - }; - - sourceMaps = {}; - - getSourceMap = function(filename) { - var answer, ref1; - if (sourceMaps[filename]) { - return sourceMaps[filename]; - } - if (ref1 = path != null ? path.extname(filename) : void 0, indexOf.call(exports.FILE_EXTENSIONS, ref1) < 0) { - return; - } - answer = exports._compileFile(filename, true); - return sourceMaps[filename] = answer.sourceMap; - }; - - Error.prepareStackTrace = function(err, stack) { - var frame, frames, getSourceMapping; - getSourceMapping = function(filename, line, column) { - var answer, sourceMap; - sourceMap = getSourceMap(filename); - if (sourceMap) { - answer = sourceMap.sourceLocation([line - 1, column - 1]); - } - if (answer) { - return [answer[0] + 1, answer[1] + 1]; - } else { - return null; - } - }; - frames = (function() { - var j, len1, results; - results = []; - for (j = 0, len1 = stack.length; j < len1; j++) { - frame = stack[j]; - if (frame.getFunction() === exports.run) { - break; - } - results.push(" at " + (formatSourcePosition(frame, getSourceMapping))); - } - return results; - })(); - return (err.toString()) + "\n" + (frames.join('\n')) + "\n"; - }; - -}).call(this); - - return module.exports; -})();require['./browser'] = (function() { - var exports = {}, module = {exports: exports}; - // Generated by CoffeeScript 1.9.1 -(function() { - var CoffeeScript, compile, runScripts, - indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; - - CoffeeScript = require('./coffee-script'); - - CoffeeScript.require = require; - - compile = CoffeeScript.compile; - - CoffeeScript["eval"] = function(code, options) { - if (options == null) { - options = {}; - } - if (options.bare == null) { - options.bare = true; - } - return eval(compile(code, options)); - }; - - CoffeeScript.run = function(code, options) { - if (options == null) { - options = {}; - } - options.bare = true; - options.shiftLine = true; - return Function(compile(code, options))(); - }; - - if (typeof window === "undefined" || window === null) { - return; - } - - if ((typeof btoa !== "undefined" && btoa !== null) && (typeof JSON !== "undefined" && JSON !== null) && (typeof unescape !== "undefined" && unescape !== null) && (typeof encodeURIComponent !== "undefined" && encodeURIComponent !== null)) { - compile = function(code, options) { - var js, ref, v3SourceMap; - if (options == null) { - options = {}; - } - options.sourceMap = true; - options.inline = true; - ref = CoffeeScript.compile(code, options), js = ref.js, v3SourceMap = ref.v3SourceMap; - return js + "\n//# sourceMappingURL=data:application/json;base64," + (btoa(unescape(encodeURIComponent(v3SourceMap)))) + "\n//# sourceURL=coffeescript"; - }; - } - - CoffeeScript.load = function(url, callback, options, hold) { - var xhr; - if (options == null) { - options = {}; - } - if (hold == null) { - hold = false; - } - options.sourceFiles = [url]; - xhr = window.ActiveXObject ? new window.ActiveXObject('Microsoft.XMLHTTP') : new window.XMLHttpRequest(); - xhr.open('GET', url, true); - if ('overrideMimeType' in xhr) { - xhr.overrideMimeType('text/plain'); - } - xhr.onreadystatechange = function() { - var param, ref; - if (xhr.readyState === 4) { - if ((ref = xhr.status) === 0 || ref === 200) { - param = [xhr.responseText, options]; - if (!hold) { - CoffeeScript.run.apply(CoffeeScript, param); - } - } else { - throw new Error("Could not load " + url); - } - if (callback) { - return callback(param); - } - } - }; - return xhr.send(null); - }; - - runScripts = function() { - var coffees, coffeetypes, execute, fn, i, index, j, len, s, script, scripts; - scripts = window.document.getElementsByTagName('script'); - coffeetypes = ['text/coffeescript', 'text/literate-coffeescript']; - coffees = (function() { - var j, len, ref, results; - results = []; - for (j = 0, len = scripts.length; j < len; j++) { - s = scripts[j]; - if (ref = s.type, indexOf.call(coffeetypes, ref) >= 0) { - results.push(s); - } - } - return results; - })(); - index = 0; - execute = function() { - var param; - param = coffees[index]; - if (param instanceof Array) { - CoffeeScript.run.apply(CoffeeScript, param); - index++; - return execute(); - } - }; - fn = function(script, i) { - var options, source; - options = { - literate: script.type === coffeetypes[1] - }; - source = script.src || script.getAttribute('data-src'); - if (source) { - return CoffeeScript.load(source, function(param) { - coffees[i] = param; - return execute(); - }, options, true); - } else { - options.sourceFiles = ['embedded']; - return coffees[i] = [script.innerHTML, options]; - } - }; - for (i = j = 0, len = coffees.length; j < len; i = ++j) { - script = coffees[i]; - fn(script, i); - } - return execute(); - }; - - if (window.addEventListener) { - window.addEventListener('DOMContentLoaded', runScripts, false); - } else { - window.attachEvent('onload', runScripts); - } - -}).call(this); - - return module.exports; -})(); - return require['./coffee-script']; - }(); - - if (typeof define === 'function' && define.amd) { - define(function() { return CoffeeScript; }); - } else { - root.CoffeeScript = CoffeeScript; - } -}(this)); \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/coffee-script-source-1.9.1.1/lib/coffee_script/source.rb b/vendor/bundle/ruby/2.2.0/gems/coffee-script-source-1.9.1.1/lib/coffee_script/source.rb deleted file mode 100644 index 6780554..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/coffee-script-source-1.9.1.1/lib/coffee_script/source.rb +++ /dev/null @@ -1,7 +0,0 @@ -module CoffeeScript - module Source - def self.bundled_path - File.expand_path("../coffee-script.js", __FILE__) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/Gemfile b/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/Gemfile deleted file mode 100644 index 3be9c3c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/Gemfile +++ /dev/null @@ -1,2 +0,0 @@ -source "https://rubygems.org" -gemspec diff --git a/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/LICENSE b/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/LICENSE deleted file mode 100644 index b3b6be9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License - -Copyright (c) Parker Moore - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/README.markdown b/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/README.markdown deleted file mode 100644 index 52e4171..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/README.markdown +++ /dev/null @@ -1,36 +0,0 @@ -# colorator - -Colorize your text for the terminal - -## Example - -```ruby -"this string".red -# => \e[31mthis string\e[0m -"my string".blue -# => \e[34mthis string\e[0m -# etc... -``` - -## Supported Colors - -- black -- red -- green -- yellow -- blue -- magenta -- cyan -- white -- bold - -## Why - -There are a bunch of gems that provide functionality like this, but none have -as simple an API as this. Just call `"string".color` and your text will be -colorized. - -## License - -MIT. Written as a single Ruby file by Brandon Mathis, converted into a gem by -Parker Moore. diff --git a/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/Rakefile b/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/Rakefile deleted file mode 100644 index ba802dc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/Rakefile +++ /dev/null @@ -1,146 +0,0 @@ -require 'rubygems' -require 'rake' -require 'date' - -############################################################################# -# -# Helper functions -# -############################################################################# - -def name - @name ||= Dir['*.gemspec'].first.split('.').first -end - -def version - line = File.read("lib/#{name}.rb")[/^\s*VERSION\s*=\s*.*/] - line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1] -end - -def date - Date.today.to_s -end - -def rubyforge_project - name -end - -def gemspec_file - "#{name}.gemspec" -end - -def gem_file - "#{name}-#{version}.gem" -end - -def replace_header(head, header_name) - head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"} -end - -############################################################################# -# -# Standard tasks -# -############################################################################# - -task :default => :spec - -require 'rspec/core/rake_task' -RSpec::Core::RakeTask.new(:spec) - -desc "Generate RCov test coverage and open in your browser" -task :coverage do - require 'rcov' - sh "rm -fr coverage" - sh "rcov test/test_*.rb" - sh "open coverage/index.html" -end - -require 'rdoc/task' -Rake::RDocTask.new do |rdoc| - rdoc.rdoc_dir = 'rdoc' - rdoc.title = "#{name} #{version}" - rdoc.rdoc_files.include('README*') - rdoc.rdoc_files.include('lib/**/*.rb') -end - -desc "Open an irb session preloaded with this library" -task :console do - sh "irb -rubygems -r ./lib/#{name}.rb" -end - -############################################################################# -# -# Custom tasks (add your own tasks here) -# -############################################################################# - - - -############################################################################# -# -# Packaging tasks -# -############################################################################# - -desc "Create tag v#{version} and build and push #{gem_file} to Rubygems" -task :release => :build do - unless `git branch` =~ /^\* master$/ - puts "You must be on the master branch to release!" - exit! - end - sh "git commit --allow-empty -a -m 'Release #{version}'" - sh "git tag v#{version}" - sh "git push origin master" - sh "git push origin v#{version}" - sh "gem push pkg/#{name}-#{version}.gem" -end - -desc "Build #{gem_file} into the pkg directory" -task :build => :gemspec do - sh "mkdir -p pkg" - sh "gem build #{gemspec_file}" - sh "mv #{gem_file} pkg" -end - -desc "Generate #{gemspec_file}" -task :gemspec => :validate do - # read spec file and split out manifest section - spec = File.read(gemspec_file) - head, manifest, tail = spec.split(" # = MANIFEST =\n") - - # replace name version and date - replace_header(head, :name) - replace_header(head, :version) - replace_header(head, :date) - #comment this out if your rubyforge_project has a different name - replace_header(head, :rubyforge_project) - - # determine file list from git ls-files - files = `git ls-files`. - split("\n"). - sort. - reject { |file| file =~ /^\./ }. - reject { |file| file =~ /^(rdoc|pkg)/ }. - map { |file| " #{file}" }. - join("\n") - - # piece file back together and write - manifest = " s.files = %w[\n#{files}\n ]\n" - spec = [head, manifest, tail].join(" # = MANIFEST =\n") - File.open(gemspec_file, 'w') { |io| io.write(spec) } - puts "Updated #{gemspec_file}" -end - -desc "Validate #{gemspec_file}" -task :validate do - libfiles = Dir['lib/*'] - ["lib/#{name}.rb", "lib/#{name}"] - unless libfiles.empty? - puts "Directory `lib` should only contain a `#{name}.rb` file and `#{name}` dir." - exit! - end - unless Dir['VERSION*'].empty? - puts "A `VERSION` file at root level violates Gem best practices." - exit! - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/colorator.gemspec b/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/colorator.gemspec deleted file mode 100644 index 0e3106b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/colorator.gemspec +++ /dev/null @@ -1,66 +0,0 @@ -## This is the rakegem gemspec template. Make sure you read and understand -## all of the comments. Some sections require modification, and others can -## be deleted if you don't need them. Once you understand the contents of -## this file, feel free to delete any comments that begin with two hash marks. -## You can find comprehensive Gem::Specification documentation, at -## http://docs.rubygems.org/read/chapter/20 -Gem::Specification.new do |s| - s.specification_version = 2 if s.respond_to? :specification_version= - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.rubygems_version = '1.3.5' - - ## Leave these as is they will be modified for you by the rake gemspec task. - ## If your rubyforge_project name is different, then edit it and comment out - ## the sub! line in the Rakefile - s.name = 'colorator' - s.version = '0.1' - s.date = '2013-04-13' - s.license = 'MIT' - - ## Make sure your summary is short. The description may be as long - ## as you like. - s.summary = "String core extensions for terminal coloring." - s.description = "Colorize your text in the terminal." - - ## List the primary authors. If there are a bunch of authors, it's probably - ## better to set the email to an email list or something. If you don't have - ## a custom homepage, consider using your GitHub URL or the like. - s.authors = ["Parker Moore", "Brandon Mathis"] - s.email = ["parkrmoore@gmail.com", "brandon@imathis.com"] - s.homepage = 'https://github.com/octopress/colorator' - - ## This gets added to the $LOAD_PATH so that 'lib/NAME.rb' can be required as - ## require 'NAME.rb' or'/lib/NAME/file.rb' can be as require 'NAME/file.rb' - s.require_paths = %w[lib] - - ## Specify any RDoc options here. You'll want to add your README and - ## LICENSE files to the extra_rdoc_files list. - s.rdoc_options = ["--charset=UTF-8"] - s.extra_rdoc_files = %w[README.markdown LICENSE] - - ## List your development dependencies here. Development dependencies are - ## those that are only needed during development - s.add_development_dependency('rake', '~> 10.0') - s.add_development_dependency('rspec', '~> 2.13.0') - - ## Leave this section as-is. It will be automatically generated from the - ## contents of your Git repository via the gemspec task. DO NOT REMOVE - ## THE MANIFEST COMMENTS, they are used as delimiters by the task. - # = MANIFEST = - s.files = %w[ - Gemfile - LICENSE - README.markdown - Rakefile - colorator.gemspec - lib/colorator.rb - lib/colorator/core_ext.rb - spec/colorator/core_ext_spec.rb - spec/spec_helper.rb - ] - # = MANIFEST = - - ## Test files will be grabbed from the file list. Make sure the path glob - ## matches what you actually use. - s.test_files = s.files.select { |path| path =~ /^spec\/.*_spec\.rb/ } -end diff --git a/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/lib/colorator.rb b/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/lib/colorator.rb deleted file mode 100644 index ceebe37..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/lib/colorator.rb +++ /dev/null @@ -1,18 +0,0 @@ -$:.unshift File.dirname(__FILE__) - -module Colorator - VERSION = "0.1" - ANSI_COLORS = { - :black => 30, - :red => 31, - :green => 32, - :yellow => 33, - :blue => 34, - :magenta => 35, - :cyan => 36, - :white => 37, - :bold => 1 - } -end - -require "colorator/core_ext" diff --git a/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/lib/colorator/core_ext.rb b/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/lib/colorator/core_ext.rb deleted file mode 100644 index f2fbcf4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/lib/colorator/core_ext.rb +++ /dev/null @@ -1,10 +0,0 @@ -class String - # colorization - def colorize(color_code) - "\e[#{color_code}m#{self}\e[0m" - end - - Colorator::ANSI_COLORS.each do |key, value| - define_method(key) { colorize(value) } - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/spec/colorator/core_ext_spec.rb b/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/spec/colorator/core_ext_spec.rb deleted file mode 100644 index 7fc4168..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/spec/colorator/core_ext_spec.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'spec_helper' - -describe String do - let(:string) { "i am a test string, y'know?" } - - it "contains all the methods from Colorator::ANSI_COLORS" do - Colorator::ANSI_COLORS.keys.each do |color| - string.methods.should include(color) - end - end - - it "colors the text properly" do - Colorator::ANSI_COLORS.each do |color, code| - string.send(color.to_sym).should include(code.to_s) - string.send(color.to_sym).should eq("\e[#{code}m#{string}\e[0m") - end - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/spec/spec_helper.rb b/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/spec/spec_helper.rb deleted file mode 100644 index 09db7a4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/colorator-0.1/spec/spec_helper.rb +++ /dev/null @@ -1,9 +0,0 @@ -$:.unshift File.join(File.dirname(__FILE__), *%w{ .. lib }) - -require 'rspec/autorun' -require 'colorator' - -RSpec.configure do |config| - config.treat_symbols_as_metadata_keys_with_true_values = true - config.order = 'random' -end diff --git a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/LICENSE b/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/LICENSE deleted file mode 100644 index c9efe51..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) 2015 Sam Stephenson -Copyright (c) 2015 Josh Peek - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/README.md b/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/README.md deleted file mode 100644 index a499236..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/README.md +++ /dev/null @@ -1,80 +0,0 @@ -ExecJS -====== - -ExecJS lets you run JavaScript code from Ruby. It automatically picks -the best runtime available to evaluate your JavaScript program, then -returns the result to you as a Ruby object. - -ExecJS supports these runtimes: - -* [therubyracer](https://github.com/cowboyd/therubyracer) - Google V8 - embedded within Ruby -* [therubyrhino](https://github.com/cowboyd/therubyrhino) - Mozilla - Rhino embedded within JRuby -* [Duktape.rb](https://github.com/judofyr/duktape.rb) - Duktape JavaScript interpreter -* [Node.js](http://nodejs.org/) -* Apple JavaScriptCore - Included with Mac OS X -* [Microsoft Windows Script Host](http://msdn.microsoft.com/en-us/library/9bbdkx3k.aspx) (JScript) - -A short example: - -``` ruby -require "execjs" -ExecJS.eval "'red yellow blue'.split(' ')" -# => ["red", "yellow", "blue"] -``` - -A longer example, demonstrating how to invoke the CoffeeScript compiler: - -``` ruby -require "execjs" -require "open-uri" -source = open("http://coffeescript.org/extras/coffee-script.js").read - -context = ExecJS.compile(source) -context.call("CoffeeScript.compile", "square = (x) -> x * x", bare: true) -# => "var square;\nsquare = function(x) {\n return x * x;\n};" -``` - -# Installation - -``` -$ gem install execjs -``` - - -# FAQ - -**Why can't I use CommonJS `require()` inside ExecJS?** - -ExecJS provides a lowest common denominator interface to any JavaScript runtime. -Use ExecJS when it doesn't matter which JavaScript interpreter your code runs -in. If you want to access the Node API, you should check another library like -[commonjs.rb](https://github.com/cowboyd/commonjs.rb) designed to provide a -consistent interface. - -**Why can't I use `setTimeout`?** - -For similar reasons as modules, not all runtimes guarantee a full JavaScript -event loop. So `setTimeout`, `setInterval` and other timers are not defined. - -**Why can't I use ES5 features?** - -Some runtimes like Node will implement many of the latest ES5 features. However -older stock runtimes like JSC on OSX and JScript on Windows may not. You should -only count on ES3 features being available. Prefer feature checking these APIs -rather than hard coding support for specific runtimes. - -**Can ExecJS be used to sandbox scripts?** - -No, ExecJS shouldn't be used for any security related sandboxing. Since runtimes -are automatically detected, each runtime has different sandboxing properties. -You shouldn't use `ExecJS.eval` on any inputs you wouldn't feel comfortable Ruby -`eval()`ing. - - -# License - -Copyright (c) 2015 Sam Stephenson and Josh Peek. - -Released under the MIT license. See `LICENSE` for details. diff --git a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs.rb b/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs.rb deleted file mode 100644 index e6a3d09..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs.rb +++ /dev/null @@ -1,6 +0,0 @@ -require "execjs/module" -require "execjs/runtimes" - -module ExecJS - self.runtime ||= Runtimes.autodetect -end diff --git a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/disabled_runtime.rb b/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/disabled_runtime.rb deleted file mode 100644 index dc67e82..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/disabled_runtime.rb +++ /dev/null @@ -1,29 +0,0 @@ -require "execjs/runtime" - -module ExecJS - class DisabledRuntime < Runtime - def name - "Disabled" - end - - def exec(source) - raise Error, "ExecJS disabled" - end - - def eval(source) - raise Error, "ExecJS disabled" - end - - def compile(source) - raise Error, "ExecJS disabled" - end - - def deprecated? - true - end - - def available? - true - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/duktape_runtime.rb b/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/duktape_runtime.rb deleted file mode 100644 index cfbc7f9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/duktape_runtime.rb +++ /dev/null @@ -1,68 +0,0 @@ -require "execjs/runtime" -require "json" - -module ExecJS - class DuktapeRuntime < Runtime - class Context < Runtime::Context - def initialize(runtime, source = "") - @ctx = Duktape::Context.new(complex_object: nil) - @ctx.exec_string(encode(source), '(execjs)') - rescue Exception => e - raise wrap_error(e) - end - - def exec(source, options = {}) - return unless /\S/ =~ source - @ctx.eval_string("(function(){#{encode(source)}})()", '(execjs)') - rescue Exception => e - raise wrap_error(e) - end - - def eval(source, options = {}) - return unless /\S/ =~ source - @ctx.eval_string("(#{encode(source)})", '(execjs)') - rescue Exception => e - raise wrap_error(e) - end - - def call(identifier, *args) - @ctx.call_prop(identifier.split("."), *args) - rescue Exception => e - raise wrap_error(e) - end - - private - def wrap_error(e) - klass = case e - when Duktape::SyntaxError - RuntimeError - when Duktape::Error - ProgramError - when Duktape::InternalError - RuntimeError - end - - if klass - re = / \(line (\d+)\)$/ - lineno = e.message[re, 1] || 1 - error = klass.new(e.message.sub(re, "")) - error.set_backtrace(["(execjs):#{lineno}"] + e.backtrace) - error - else - e - end - end - end - - def name - "Duktape" - end - - def available? - require "duktape" - true - rescue LoadError - false - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/encoding.rb b/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/encoding.rb deleted file mode 100644 index 406fb0d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/encoding.rb +++ /dev/null @@ -1,26 +0,0 @@ -module ExecJS - # Encodes strings as UTF-8 - module Encoding - if RUBY_ENGINE == 'jruby' || RUBY_ENGINE == 'rbx' - # workaround for jruby bug http://jira.codehaus.org/browse/JRUBY-6588 - # workaround for rbx bug https://github.com/rubinius/rubinius/issues/1729 - def encode(string) - if string.encoding.name == 'ASCII-8BIT' - data = string.dup - data.force_encoding('UTF-8') - - unless data.valid_encoding? - raise ::Encoding::UndefinedConversionError, "Could not encode ASCII-8BIT data #{string.dump} as UTF-8" - end - else - data = string.encode('UTF-8') - end - data - end - else - def encode(string) - string.encode('UTF-8') - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/external_runtime.rb b/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/external_runtime.rb deleted file mode 100644 index 8a924d6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/external_runtime.rb +++ /dev/null @@ -1,241 +0,0 @@ -require "tmpdir" -require "execjs/runtime" - -module ExecJS - class ExternalRuntime < Runtime - class Context < Runtime::Context - def initialize(runtime, source = "") - source = encode(source) - - @runtime = runtime - @source = source - - # Test compile context source - exec("") - end - - def eval(source, options = {}) - source = encode(source) - - if /\S/ =~ source - exec("return eval(#{::JSON.generate("(#{source})", quirks_mode: true)})") - end - end - - def exec(source, options = {}) - source = encode(source) - source = "#{@source}\n#{source}" if @source != "" - source = @runtime.compile_source(source) - - tmpfile = write_to_tempfile(source) - - if ExecJS.cygwin? - filepath = `cygpath -m #{tmpfile.path}`.rstrip - else - filepath = tmpfile.path - end - - begin - extract_result(@runtime.exec_runtime(filepath), filepath) - ensure - File.unlink(tmpfile) - end - end - - def call(identifier, *args) - eval "#{identifier}.apply(this, #{::JSON.generate(args)})" - end - - protected - # See Tempfile.create on Ruby 2.1 - def create_tempfile(basename) - tmpfile = nil - Dir::Tmpname.create(basename) do |tmpname| - mode = File::WRONLY | File::CREAT | File::EXCL - tmpfile = File.open(tmpname, mode, 0600) - end - tmpfile - end - - def write_to_tempfile(contents) - tmpfile = create_tempfile(['execjs', 'js']) - tmpfile.write(contents) - tmpfile.close - tmpfile - end - - def extract_result(output, filename) - status, value, stack = output.empty? ? [] : ::JSON.parse(output, create_additions: false) - if status == "ok" - value - else - stack ||= "" - real_filename = File.realpath(filename) - stack = stack.split("\n").map do |line| - line.sub(" at ", "") - .sub(real_filename, "(execjs)") - .sub(filename, "(execjs)") - .strip - end - stack.reject! { |line| ["eval code", "eval@[native code]"].include?(line) } - stack.shift unless stack[0].to_s.include?("(execjs)") - error_class = value =~ /SyntaxError:/ ? RuntimeError : ProgramError - error = error_class.new(value) - error.set_backtrace(stack + caller) - raise error - end - end - end - - attr_reader :name - - def initialize(options) - @name = options[:name] - @command = options[:command] - @runner_path = options[:runner_path] - @encoding = options[:encoding] - @deprecated = !!options[:deprecated] - @binary = nil - - @popen_options = {} - @popen_options[:external_encoding] = @encoding if @encoding - @popen_options[:internal_encoding] = ::Encoding.default_internal || 'UTF-8' - - if @runner_path - instance_eval generate_compile_method(@runner_path) - end - end - - def available? - require 'json' - binary ? true : false - end - - def deprecated? - @deprecated - end - - private - def binary - @binary ||= which(@command) - end - - def locate_executable(cmd) - if ExecJS.windows? && File.extname(cmd) == "" - cmd << ".exe" - end - - if File.executable? cmd - cmd - else - path = ENV['PATH'].split(File::PATH_SEPARATOR).find { |p| - full_path = File.join(p, cmd) - File.executable?(full_path) && File.file?(full_path) - } - path && File.expand_path(cmd, path) - end - end - - protected - def generate_compile_method(path) - <<-RUBY - def compile_source(source) - <<-RUNNER - #{IO.read(path)} - RUNNER - end - RUBY - end - - def json2_source - @json2_source ||= IO.read(ExecJS.root + "/support/json2.js") - end - - def encode_source(source) - encoded_source = encode_unicode_codepoints(source) - ::JSON.generate("(function(){ #{encoded_source} })()", quirks_mode: true) - end - - def encode_unicode_codepoints(str) - str.gsub(/[\u0080-\uffff]/) do |ch| - "\\u%04x" % ch.codepoints.to_a - end - end - - if ExecJS.windows? - def exec_runtime(filename) - path = Dir::Tmpname.create(['execjs', 'json']) {} - begin - command = binary.split(" ") << filename - `#{shell_escape(*command)} 2>&1 > #{path}` - output = File.open(path, 'rb', @popen_options) { |f| f.read } - ensure - File.unlink(path) if path - end - - if $?.success? - output - else - raise exec_runtime_error(output) - end - end - - def shell_escape(*args) - # see http://technet.microsoft.com/en-us/library/cc723564.aspx#XSLTsection123121120120 - args.map { |arg| - arg = %Q("#{arg.gsub('"','""')}") if arg.match(/[&|()<>^ "]/) - arg - }.join(" ") - end - elsif RUBY_ENGINE == 'jruby' - require 'shellwords' - - def exec_runtime(filename) - command = "#{Shellwords.join(binary.split(' ') << filename)} 2>&1" - io = IO.popen(command, @popen_options) - output = io.read - io.close - - if $?.success? - output - else - raise exec_runtime_error(output) - end - end - else - def exec_runtime(filename) - io = IO.popen(binary.split(' ') << filename, @popen_options.merge({err: [:child, :out]})) - output = io.read - io.close - - if $?.success? - output - else - raise exec_runtime_error(output) - end - end - end - # Internally exposed for Context. - public :exec_runtime - - def exec_runtime_error(output) - error = RuntimeError.new(output) - lines = output.split("\n") - lineno = lines[0][/:(\d+)$/, 1] if lines[0] - lineno ||= 1 - error.set_backtrace(["(execjs):#{lineno}"] + caller) - error - end - - def which(command) - Array(command).find do |name| - name, args = name.split(/\s+/, 2) - path = locate_executable(name) - - next unless path - - args ? "#{path} #{args}" : path - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/module.rb b/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/module.rb deleted file mode 100644 index 8b2566a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/module.rb +++ /dev/null @@ -1,42 +0,0 @@ -require "execjs/version" -require "rbconfig" - -module ExecJS - class Error < ::StandardError; end - class RuntimeError < Error; end - class ProgramError < Error; end - class RuntimeUnavailable < RuntimeError; end - - class << self - attr_reader :runtime - - def runtime=(runtime) - raise RuntimeUnavailable, "#{runtime.name} is unavailable on this system" unless runtime.available? - @runtime = runtime - end - - def exec(source) - runtime.exec(source) - end - - def eval(source) - runtime.eval(source) - end - - def compile(source) - runtime.compile(source) - end - - def root - @root ||= File.expand_path("..", __FILE__) - end - - def windows? - @windows ||= RbConfig::CONFIG["host_os"] =~ /mswin|mingw/ - end - - def cygwin? - @cygwin ||= RbConfig::CONFIG["host_os"] =~ /cygwin/ - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/ruby_racer_runtime.rb b/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/ruby_racer_runtime.rb deleted file mode 100644 index eee99fb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/ruby_racer_runtime.rb +++ /dev/null @@ -1,114 +0,0 @@ -require "execjs/runtime" - -module ExecJS - class RubyRacerRuntime < Runtime - class Context < Runtime::Context - def initialize(runtime, source = "") - source = encode(source) - - lock do - @v8_context = ::V8::Context.new - - begin - @v8_context.eval(source) - rescue ::V8::JSError => e - raise wrap_error(e) - end - end - end - - def exec(source, options = {}) - source = encode(source) - - if /\S/ =~ source - eval "(function(){#{source}})()", options - end - end - - def eval(source, options = {}) - source = encode(source) - - if /\S/ =~ source - lock do - begin - unbox @v8_context.eval("(#{source})") - rescue ::V8::JSError => e - raise wrap_error(e) - end - end - end - end - - def call(properties, *args) - lock do - begin - unbox @v8_context.eval(properties).call(*args) - rescue ::V8::JSError => e - raise wrap_error(e) - end - end - end - - def unbox(value) - case value - when ::V8::Function - nil - when ::V8::Array - value.map { |v| unbox(v) } - when ::V8::Object - value.inject({}) do |vs, (k, v)| - vs[k] = unbox(v) unless v.is_a?(::V8::Function) - vs - end - when String - value.force_encoding('UTF-8') - else - value - end - end - - private - def lock - result, exception = nil, nil - V8::C::Locker() do - begin - result = yield - rescue Exception => e - exception = e - end - end - - if exception - raise exception - else - result - end - end - - def wrap_error(e) - error_class = e.value["name"] == "SyntaxError" ? RuntimeError : ProgramError - - stack = e.value["stack"] || "" - stack = stack.split("\n") - stack.shift - stack = [e.message[/:\d+:\d+/, 0]].compact if stack.empty? - stack = stack.map { |line| line.sub(" at ", "").sub("", "(execjs)").strip } - - error = error_class.new(e.value.to_s) - error.set_backtrace(stack + caller) - error - end - end - - def name - "therubyracer (V8)" - end - - def available? - require "v8" - true - rescue LoadError - false - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/ruby_rhino_runtime.rb b/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/ruby_rhino_runtime.rb deleted file mode 100644 index 13b7b3b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/ruby_rhino_runtime.rb +++ /dev/null @@ -1,97 +0,0 @@ -require "execjs/runtime" - -module ExecJS - class RubyRhinoRuntime < Runtime - class Context < Runtime::Context - def initialize(runtime, source = "") - source = encode(source) - - @rhino_context = ::Rhino::Context.new - fix_memory_limit! @rhino_context - @rhino_context.eval(source) - rescue Exception => e - raise wrap_error(e) - end - - def exec(source, options = {}) - source = encode(source) - - if /\S/ =~ source - eval "(function(){#{source}})()", options - end - end - - def eval(source, options = {}) - source = encode(source) - - if /\S/ =~ source - unbox @rhino_context.eval("(#{source})") - end - rescue Exception => e - raise wrap_error(e) - end - - def call(properties, *args) - unbox @rhino_context.eval(properties).call(*args) - rescue Exception => e - raise wrap_error(e) - end - - def unbox(value) - case value = ::Rhino::to_ruby(value) - when Java::OrgMozillaJavascript::NativeFunction - nil - when Java::OrgMozillaJavascript::NativeObject - value.inject({}) do |vs, (k, v)| - case v - when Java::OrgMozillaJavascript::NativeFunction, ::Rhino::JS::Function - nil - else - vs[k] = unbox(v) - end - vs - end - when Array - value.map { |v| unbox(v) } - else - value - end - end - - def wrap_error(e) - return e unless e.is_a?(::Rhino::JSError) - - error_class = e.message == "syntax error" ? RuntimeError : ProgramError - - stack = e.backtrace - stack = stack.map { |line| line.sub(" at ", "").sub("", "(execjs)").strip } - stack.unshift("(execjs):1") if e.javascript_backtrace.empty? - - error = error_class.new(e.value.to_s) - error.set_backtrace(stack) - error - end - - private - # Disables bytecode compiling which limits you to 64K scripts - def fix_memory_limit!(context) - if context.respond_to?(:optimization_level=) - context.optimization_level = -1 - else - context.instance_eval { @native.setOptimizationLevel(-1) } - end - end - end - - def name - "therubyrhino (Rhino)" - end - - def available? - require "rhino" - true - rescue LoadError - false - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/runtime.rb b/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/runtime.rb deleted file mode 100644 index f64b67f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/runtime.rb +++ /dev/null @@ -1,55 +0,0 @@ -require "execjs/encoding" - -module ExecJS - # Abstract base class for runtimes - class Runtime - class Context - include Encoding - - def initialize(runtime, source = "") - end - - def exec(source, options = {}) - raise NotImplementedError - end - - def eval(source, options = {}) - raise NotImplementedError - end - - def call(properties, *args) - raise NotImplementedError - end - end - - def name - raise NotImplementedError - end - - def context_class - self.class::Context - end - - def exec(source) - context = context_class.new(self) - context.exec(source) - end - - def eval(source) - context = context_class.new(self) - context.eval(source) - end - - def compile(source) - context_class.new(self, source) - end - - def deprecated? - false - end - - def available? - raise NotImplementedError - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/runtimes.rb b/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/runtimes.rb deleted file mode 100644 index 5079a48..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/runtimes.rb +++ /dev/null @@ -1,86 +0,0 @@ -require "execjs/module" -require "execjs/disabled_runtime" -require "execjs/duktape_runtime" -require "execjs/external_runtime" -require "execjs/ruby_racer_runtime" -require "execjs/ruby_rhino_runtime" - -module ExecJS - module Runtimes - Disabled = DisabledRuntime.new - - Duktape = DuktapeRuntime.new - - RubyRacer = RubyRacerRuntime.new - - RubyRhino = RubyRhinoRuntime.new - - Node = ExternalRuntime.new( - name: "Node.js (V8)", - command: ["nodejs", "node"], - runner_path: ExecJS.root + "/support/node_runner.js", - encoding: 'UTF-8' - ) - - JavaScriptCore = ExternalRuntime.new( - name: "JavaScriptCore", - command: "/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc", - runner_path: ExecJS.root + "/support/jsc_runner.js" - ) - - SpiderMonkey = Spidermonkey = ExternalRuntime.new( - name: "SpiderMonkey", - command: "js", - runner_path: ExecJS.root + "/support/spidermonkey_runner.js", - deprecated: true - ) - - JScript = ExternalRuntime.new( - name: "JScript", - command: "cscript //E:jscript //Nologo //U", - runner_path: ExecJS.root + "/support/jscript_runner.js", - encoding: 'UTF-16LE' # CScript with //U returns UTF-16LE - ) - - - def self.autodetect - from_environment || best_available || - raise(RuntimeUnavailable, "Could not find a JavaScript runtime. " + - "See https://github.com/rails/execjs for a list of available runtimes.") - end - - def self.best_available - runtimes.reject(&:deprecated?).find(&:available?) - end - - def self.from_environment - if name = ENV["EXECJS_RUNTIME"] - raise RuntimeUnavailable, "#{name} runtime is not defined" unless const_defined?(name) - runtime = const_get(name) - - raise RuntimeUnavailable, "#{runtime.name} runtime is not available on this system" unless runtime.available? - runtime - end - end - - def self.names - @names ||= constants.inject({}) { |h, name| h.merge(const_get(name) => name) }.values - end - - def self.runtimes - @runtimes ||= [ - RubyRacer, - RubyRhino, - Duktape, - JavaScriptCore, - Node, - SpiderMonkey, - JScript - ] - end - end - - def self.runtimes - Runtimes.runtimes - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/support/jsc_runner.js b/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/support/jsc_runner.js deleted file mode 100644 index c57a944..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/support/jsc_runner.js +++ /dev/null @@ -1,18 +0,0 @@ -(function(program, execJS) { execJS(program) })(function() { #{source} -}, function(program) { - var output; - try { - result = program(); - if (typeof result == 'undefined' && result !== null) { - print('["ok"]'); - } else { - try { - print(JSON.stringify(['ok', result])); - } catch (err) { - print(JSON.stringify(['err', '' + err, err.stack])); - } - } - } catch (err) { - print(JSON.stringify(['err', '' + err, err.stack])); - } -}); diff --git a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/support/jscript_runner.js b/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/support/jscript_runner.js deleted file mode 100644 index fc92b4a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/support/jscript_runner.js +++ /dev/null @@ -1,22 +0,0 @@ -(function(program, execJS) { execJS(program) })(function() { - return eval(#{encode_source(source)}); -}, function(program) { - #{json2_source} - var output, print = function(string) { - WScript.Echo(string); - }; - try { - result = program(); - if (typeof result == 'undefined' && result !== null) { - print('["ok"]'); - } else { - try { - print(JSON.stringify(['ok', result])); - } catch (err) { - print(JSON.stringify(['err', err.name + ': ' + err.message, err.stack])); - } - } - } catch (err) { - print(JSON.stringify(['err', err.name + ': ' + err.message, err.stack])); - } -}); diff --git a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/support/json2.js b/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/support/json2.js deleted file mode 100644 index fb8fe0a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/support/json2.js +++ /dev/null @@ -1,481 +0,0 @@ -/* - http://www.JSON.org/json2.js - 2011-01-18 - - Public Domain. - - NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. - - See http://www.JSON.org/js.html - - - This code should be minified before deployment. - See http://javascript.crockford.com/jsmin.html - - USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO - NOT CONTROL. - - - This file creates a global JSON object containing two methods: stringify - and parse. - - JSON.stringify(value, replacer, space) - value any JavaScript value, usually an object or array. - - replacer an optional parameter that determines how object - values are stringified for objects. It can be a - function or an array of strings. - - space an optional parameter that specifies the indentation - of nested structures. If it is omitted, the text will - be packed without extra whitespace. If it is a number, - it will specify the number of spaces to indent at each - level. If it is a string (such as '\t' or ' '), - it contains the characters used to indent at each level. - - This method produces a JSON text from a JavaScript value. - - When an object value is found, if the object contains a toJSON - method, its toJSON method will be called and the result will be - stringified. A toJSON method does not serialize: it returns the - value represented by the name/value pair that should be serialized, - or undefined if nothing should be serialized. The toJSON method - will be passed the key associated with the value, and this will be - bound to the value - - For example, this would serialize Dates as ISO strings. - - Date.prototype.toJSON = function (key) { - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - return this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z'; - }; - - You can provide an optional replacer method. It will be passed the - key and value of each member, with this bound to the containing - object. The value that is returned from your method will be - serialized. If your method returns undefined, then the member will - be excluded from the serialization. - - If the replacer parameter is an array of strings, then it will be - used to select the members to be serialized. It filters the results - such that only members with keys listed in the replacer array are - stringified. - - Values that do not have JSON representations, such as undefined or - functions, will not be serialized. Such values in objects will be - dropped; in arrays they will be replaced with null. You can use - a replacer function to replace those with JSON values. - JSON.stringify(undefined) returns undefined. - - The optional space parameter produces a stringification of the - value that is filled with line breaks and indentation to make it - easier to read. - - If the space parameter is a non-empty string, then that string will - be used for indentation. If the space parameter is a number, then - the indentation will be that many spaces. - - Example: - - text = JSON.stringify(['e', {pluribus: 'unum'}]); - // text is '["e",{"pluribus":"unum"}]' - - - text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t'); - // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' - - text = JSON.stringify([new Date()], function (key, value) { - return this[key] instanceof Date ? - 'Date(' + this[key] + ')' : value; - }); - // text is '["Date(---current time---)"]' - - - JSON.parse(text, reviver) - This method parses a JSON text to produce an object or array. - It can throw a SyntaxError exception. - - The optional reviver parameter is a function that can filter and - transform the results. It receives each of the keys and values, - and its return value is used instead of the original value. - If it returns what it received, then the structure is not modified. - If it returns undefined then the member is deleted. - - Example: - - // Parse the text. Values that look like ISO date strings will - // be converted to Date objects. - - myData = JSON.parse(text, function (key, value) { - var a; - if (typeof value === 'string') { - a = -/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); - if (a) { - return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], - +a[5], +a[6])); - } - } - return value; - }); - - myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { - var d; - if (typeof value === 'string' && - value.slice(0, 5) === 'Date(' && - value.slice(-1) === ')') { - d = new Date(value.slice(5, -1)); - if (d) { - return d; - } - } - return value; - }); - - - This is a reference implementation. You are free to copy, modify, or - redistribute. -*/ - -/*jslint evil: true, strict: false, regexp: false */ - -/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply, - call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, - getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, - lastIndex, length, parse, prototype, push, replace, slice, stringify, - test, toJSON, toString, valueOf -*/ - - -// Create a JSON object only if one does not already exist. We create the -// methods in a closure to avoid creating global variables. - -(function (global) { - if (!global.JSON) { - global.JSON = {}; - } - - var JSON = global.JSON; - - "use strict"; - - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - if (typeof Date.prototype.toJSON !== 'function') { - - Date.prototype.toJSON = function (key) { - - return isFinite(this.valueOf()) ? - this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z' : null; - }; - - String.prototype.toJSON = - Number.prototype.toJSON = - Boolean.prototype.toJSON = function (key) { - return this.valueOf(); - }; - } - - var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - gap, - indent, - meta = { // table of character substitutions - '\b': '\\b', - '\t': '\\t', - '\n': '\\n', - '\f': '\\f', - '\r': '\\r', - '"' : '\\"', - '\\': '\\\\' - }, - rep; - - - function quote(string) { - -// If the string contains no control characters, no quote characters, and no -// backslash characters, then we can safely slap some quotes around it. -// Otherwise we must also replace the offending characters with safe escape -// sequences. - - escapable.lastIndex = 0; - return escapable.test(string) ? '"' + string.replace(escapable, function (a) { - var c = meta[a]; - return typeof c === 'string' ? c : - '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }) + '"' : '"' + string + '"'; - } - - - function str(key, holder) { - -// Produce a string from holder[key]. - - var i, // The loop counter. - k, // The member key. - v, // The member value. - length, - mind = gap, - partial, - value = holder[key]; - -// If the value has a toJSON method, call it to obtain a replacement value. - - if (value && typeof value === 'object' && - typeof value.toJSON === 'function') { - value = value.toJSON(key); - } - -// If we were called with a replacer function, then call the replacer to -// obtain a replacement value. - - if (typeof rep === 'function') { - value = rep.call(holder, key, value); - } - -// What happens next depends on the value's type. - - switch (typeof value) { - case 'string': - return quote(value); - - case 'number': - -// JSON numbers must be finite. Encode non-finite numbers as null. - - return isFinite(value) ? String(value) : 'null'; - - case 'boolean': - case 'null': - -// If the value is a boolean or null, convert it to a string. Note: -// typeof null does not produce 'null'. The case is included here in -// the remote chance that this gets fixed someday. - - return String(value); - -// If the type is 'object', we might be dealing with an object or an array or -// null. - - case 'object': - -// Due to a specification blunder in ECMAScript, typeof null is 'object', -// so watch out for that case. - - if (!value) { - return 'null'; - } - -// Make an array to hold the partial results of stringifying this object value. - - gap += indent; - partial = []; - -// Is the value an array? - - if (Object.prototype.toString.apply(value) === '[object Array]') { - -// The value is an array. Stringify every element. Use null as a placeholder -// for non-JSON values. - - length = value.length; - for (i = 0; i < length; i += 1) { - partial[i] = str(i, value) || 'null'; - } - -// Join all of the elements together, separated with commas, and wrap them in -// brackets. - - v = partial.length === 0 ? '[]' : gap ? - '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : - '[' + partial.join(',') + ']'; - gap = mind; - return v; - } - -// If the replacer is an array, use it to select the members to be stringified. - - if (rep && typeof rep === 'object') { - length = rep.length; - for (i = 0; i < length; i += 1) { - k = rep[i]; - if (typeof k === 'string') { - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } else { - -// Otherwise, iterate through all of the keys in the object. - - for (k in value) { - if (Object.hasOwnProperty.call(value, k)) { - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } - -// Join all of the member texts together, separated with commas, -// and wrap them in braces. - - v = partial.length === 0 ? '{}' : gap ? - '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : - '{' + partial.join(',') + '}'; - gap = mind; - return v; - } - } - -// If the JSON object does not yet have a stringify method, give it one. - - if (typeof JSON.stringify !== 'function') { - JSON.stringify = function (value, replacer, space) { - -// The stringify method takes a value and an optional replacer, and an optional -// space parameter, and returns a JSON text. The replacer can be a function -// that can replace values, or an array of strings that will select the keys. -// A default replacer method can be provided. Use of the space parameter can -// produce text that is more easily readable. - - var i; - gap = ''; - indent = ''; - -// If the space parameter is a number, make an indent string containing that -// many spaces. - - if (typeof space === 'number') { - for (i = 0; i < space; i += 1) { - indent += ' '; - } - -// If the space parameter is a string, it will be used as the indent string. - - } else if (typeof space === 'string') { - indent = space; - } - -// If there is a replacer, it must be a function or an array. -// Otherwise, throw an error. - - rep = replacer; - if (replacer && typeof replacer !== 'function' && - (typeof replacer !== 'object' || - typeof replacer.length !== 'number')) { - throw new Error('JSON.stringify'); - } - -// Make a fake root object containing our value under the key of ''. -// Return the result of stringifying the value. - - return str('', {'': value}); - }; - } - - -// If the JSON object does not yet have a parse method, give it one. - - if (typeof JSON.parse !== 'function') { - JSON.parse = function (text, reviver) { - -// The parse method takes a text and an optional reviver function, and returns -// a JavaScript value if the text is a valid JSON text. - - var j; - - function walk(holder, key) { - -// The walk method is used to recursively walk the resulting structure so -// that modifications can be made. - - var k, v, value = holder[key]; - if (value && typeof value === 'object') { - for (k in value) { - if (Object.hasOwnProperty.call(value, k)) { - v = walk(value, k); - if (v !== undefined) { - value[k] = v; - } else { - delete value[k]; - } - } - } - } - return reviver.call(holder, key, value); - } - - -// Parsing happens in four stages. In the first stage, we replace certain -// Unicode characters with escape sequences. JavaScript handles many characters -// incorrectly, either silently deleting them, or treating them as line endings. - - text = String(text); - cx.lastIndex = 0; - if (cx.test(text)) { - text = text.replace(cx, function (a) { - return '\\u' + - ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }); - } - -// In the second stage, we run the text against regular expressions that look -// for non-JSON patterns. We are especially concerned with '()' and 'new' -// because they can cause invocation, and '=' because it can cause mutation. -// But just to be safe, we want to reject all unexpected forms. - -// We split the second stage into 4 regexp operations in order to work around -// crippling inefficiencies in IE's and Safari's regexp engines. First we -// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we -// replace all simple value tokens with ']' characters. Third, we delete all -// open brackets that follow a colon or comma or that begin the text. Finally, -// we look to see that the remaining characters are only whitespace or ']' or -// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. - - if (/^[\],:{}\s]*$/ - .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') - .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') - .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { - -// In the third stage we use the eval function to compile the text into a -// JavaScript structure. The '{' operator is subject to a syntactic ambiguity -// in JavaScript: it can begin a block or an object literal. We wrap the text -// in parens to eliminate the ambiguity. - - j = eval('(' + text + ')'); - -// In the optional fourth stage, we recursively walk the new structure, passing -// each name/value pair to a reviver function for possible transformation. - - return typeof reviver === 'function' ? - walk({'': j}, '') : j; - } - -// If the text is not JSON parseable, then a SyntaxError is thrown. - - throw new SyntaxError('JSON.parse'); - }; - } -}(this)); diff --git a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/support/node_runner.js b/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/support/node_runner.js deleted file mode 100644 index ab0c6ec..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/support/node_runner.js +++ /dev/null @@ -1,20 +0,0 @@ -(function(program, execJS) { execJS(program) })(function(global, module, exports, require, console, setTimeout, setInterval, clearTimeout, clearInterval, setImmediate, clearImmediate) { #{source} -}, function(program) { - var output, print = function(string) { - process.stdout.write('' + string); - }; - try { - result = program(); - if (typeof result == 'undefined' && result !== null) { - print('["ok"]'); - } else { - try { - print(JSON.stringify(['ok', result])); - } catch (err) { - print(JSON.stringify(['err', '' + err, err.stack])); - } - } - } catch (err) { - print(JSON.stringify(['err', '' + err, err.stack])); - } -}); diff --git a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/support/spidermonkey_runner.js b/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/support/spidermonkey_runner.js deleted file mode 100644 index c57a944..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/support/spidermonkey_runner.js +++ /dev/null @@ -1,18 +0,0 @@ -(function(program, execJS) { execJS(program) })(function() { #{source} -}, function(program) { - var output; - try { - result = program(); - if (typeof result == 'undefined' && result !== null) { - print('["ok"]'); - } else { - try { - print(JSON.stringify(['ok', result])); - } catch (err) { - print(JSON.stringify(['err', '' + err, err.stack])); - } - } - } catch (err) { - print(JSON.stringify(['err', '' + err, err.stack])); - } -}); diff --git a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/version.rb b/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/version.rb deleted file mode 100644 index 2c8b468..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/version.rb +++ /dev/null @@ -1,3 +0,0 @@ -module ExecJS - VERSION = "2.5.2" -end diff --git a/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/LICENSE b/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/LICENSE deleted file mode 100644 index f24d50f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2008 Roman Shterenzon - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/README b/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/README deleted file mode 100644 index f695145..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/README +++ /dev/null @@ -1,25 +0,0 @@ -Fast-stemmer is simply a wrapping around multithreaded -Porter stemming algorithm. - -This gem adds a String#stem method, and it conflicts with the stemmer gem. -It's in order of magnitude faster (and uses much less memory) than the latter. - -For the original work please see: -http://tartarus.org/~martin/PorterStemmer/ - -Gemfile: - gem 'fast-stemmer' - -Usage: - - require 'rubygems' - require 'fast_stemmer' - - Stemmer::stem_word('running') # -> 'run' - 'running'.stem # -> 'run' - - -COPYRIGHT -========= - -Copyright (c) 2008 Roman Shterenzon. See LICENSE for details. diff --git a/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/Rakefile b/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/Rakefile deleted file mode 100644 index 537c5d4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/Rakefile +++ /dev/null @@ -1,36 +0,0 @@ -require 'rake' - -begin - require 'jeweler' - Jeweler::Tasks.new do |s| - s.name = "fast-stemmer" - s.summary = %Q{Fast Porter stemmer based on a C version of algorithm} - s.email = "romanbsd@yahoo.com" - s.homepage = "http://github.com/romanbsd/fast-stemmer" - s.description = s.summary - s.authors = ["Roman Shterenzon"] - s.extensions = ['ext/extconf.rb'] - s.files = FileList["[A-Z]*", "{ext,lib,test}/**/*"] - end - Jeweler::RubygemsDotOrgTasks.new -rescue LoadError - puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com" -end - -require 'rdoc/task' -Rake::RDocTask.new do |rdoc| - rdoc.rdoc_dir = 'rdoc' - rdoc.title = 'fast-stemmer' - rdoc.options << '--line-numbers' << '--inline-source' - rdoc.rdoc_files.include('README*') - rdoc.rdoc_files.include('lib/**/*.rb') -end - -require 'rake/testtask' -Rake::TestTask.new(:test) do |t| - t.libs << 'lib' << 'test' - t.pattern = 'test/**/*_test.rb' - t.verbose = false -end - -task :default => :test diff --git a/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/VERSION.yml b/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/VERSION.yml deleted file mode 100644 index 4a08c4f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/VERSION.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -:major: 1 -:minor: 0 -:patch: 2 -:build: diff --git a/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/.RUBYARCHDIR.time b/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/.RUBYARCHDIR.time deleted file mode 100644 index e69de29..0000000 diff --git a/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/Makefile b/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/Makefile deleted file mode 100644 index 71f95ac..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/Makefile +++ /dev/null @@ -1,260 +0,0 @@ - -SHELL = /bin/sh - -# V=0 quiet, V=1 verbose. other values don't work. -V = 0 -Q1 = $(V:1=) -Q = $(Q1:0=@) -ECHO1 = $(V:1=@:) -ECHO = $(ECHO1:0=@echo) -NULLCMD = : - -#### Start of system configuration section. #### - -srcdir = . -topdir = /Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0 -hdrdir = $(topdir) -arch_hdrdir = /Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/x86_64-darwin14 -PATH_SEPARATOR = : -VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby -prefix = $(DESTDIR)/Users/elainekamlley/.rvm/rubies/ruby-2.2.0 -rubysitearchprefix = $(rubylibprefix)/$(sitearch) -rubyarchprefix = $(rubylibprefix)/$(arch) -rubylibprefix = $(libdir)/$(RUBY_BASE_NAME) -exec_prefix = $(prefix) -vendorarchhdrdir = $(vendorhdrdir)/$(sitearch) -sitearchhdrdir = $(sitehdrdir)/$(sitearch) -rubyarchhdrdir = $(rubyhdrdir)/$(arch) -vendorhdrdir = $(rubyhdrdir)/vendor_ruby -sitehdrdir = $(rubyhdrdir)/site_ruby -rubyhdrdir = $(includedir)/$(RUBY_VERSION_NAME) -vendorarchdir = $(vendorlibdir)/$(sitearch) -vendorlibdir = $(vendordir)/$(ruby_version) -vendordir = $(rubylibprefix)/vendor_ruby -sitearchdir = $(DESTDIR)./.gem.20180423-68206-elh2jj -sitelibdir = $(DESTDIR)./.gem.20180423-68206-elh2jj -sitedir = $(rubylibprefix)/site_ruby -rubyarchdir = $(rubylibdir)/$(arch) -rubylibdir = $(rubylibprefix)/$(ruby_version) -sitearchincludedir = $(includedir)/$(sitearch) -archincludedir = $(includedir)/$(arch) -sitearchlibdir = $(libdir)/$(sitearch) -archlibdir = $(libdir)/$(arch) -ridir = $(datarootdir)/$(RI_BASE_NAME) -mandir = $(datarootdir)/man -localedir = $(datarootdir)/locale -libdir = $(exec_prefix)/lib -psdir = $(docdir) -pdfdir = $(docdir) -dvidir = $(docdir) -htmldir = $(docdir) -infodir = $(datarootdir)/info -docdir = $(datarootdir)/doc/$(PACKAGE) -oldincludedir = $(DESTDIR)/usr/include -includedir = $(prefix)/include -localstatedir = $(prefix)/var -sharedstatedir = $(prefix)/com -sysconfdir = $(prefix)/etc -datadir = $(datarootdir) -datarootdir = $(prefix)/share -libexecdir = $(exec_prefix)/libexec -sbindir = $(exec_prefix)/sbin -bindir = $(exec_prefix)/bin -archdir = $(rubyarchdir) - - -CC = gcc -CXX = g++ -LIBRUBY = $(LIBRUBY_SO) -LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a -LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME) -LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static -framework CoreFoundation -empty = -OUTFLAG = -o $(empty) -COUTFLAG = -o $(empty) - -RUBY_EXTCONF_H = -cflags = $(optflags) $(debugflags) $(warnflags) -optflags = -O3 -fno-fast-math -debugflags = -ggdb3 -warnflags = -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens -CCDLFLAGS = -fno-common -CFLAGS = $(CCDLFLAGS) $(cflags) -fno-common -pipe $(ARCH_FLAG) -INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir) -DEFS = -CPPFLAGS = -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT $(DEFS) $(cppflags) -CXXFLAGS = $(CCDLFLAGS) $(cxxflags) $(ARCH_FLAG) -ldflags = -L. -fstack-protector -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -dldflags = -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -ARCH_FLAG = -DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG) -LDSHARED = $(CC) -dynamic -bundle -LDSHAREDXX = $(CXX) -dynamic -bundle -AR = ar -EXEEXT = - -RUBY_INSTALL_NAME = $(RUBY_BASE_NAME) -RUBY_SO_NAME = ruby.2.2.0 -RUBYW_INSTALL_NAME = -RUBY_VERSION_NAME = $(RUBY_BASE_NAME)-$(ruby_version) -RUBYW_BASE_NAME = rubyw -RUBY_BASE_NAME = ruby - -arch = x86_64-darwin14 -sitearch = $(arch) -ruby_version = 2.2.0 -ruby = $(bindir)/$(RUBY_BASE_NAME) -RUBY = $(ruby) -ruby_headers = $(hdrdir)/ruby.h $(hdrdir)/ruby/ruby.h $(hdrdir)/ruby/defines.h $(hdrdir)/ruby/missing.h $(hdrdir)/ruby/intern.h $(hdrdir)/ruby/st.h $(hdrdir)/ruby/subst.h $(arch_hdrdir)/ruby/config.h - -RM = rm -f -RM_RF = $(RUBY) -run -e rm -- -rf -RMDIRS = rmdir -p -MAKEDIRS = mkdir -p -INSTALL = /usr/bin/install -c -INSTALL_PROG = $(INSTALL) -m 0755 -INSTALL_DATA = $(INSTALL) -m 644 -COPY = cp -TOUCH = exit > - -#### End of system configuration section. #### - -preload = - -libpath = /usr/local/opt/libyaml/lib /usr/local/opt/readline/lib /usr/local/opt/libksba/lib /usr/local/opt/openssl/lib . $(libdir) -LIBPATH = -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L. -L$(libdir) -DEFFILE = - -CLEANFILES = mkmf.log -DISTCLEANFILES = -DISTCLEANDIRS = - -extout = -extout_prefix = -target_prefix = -LOCAL_LIBS = -LIBS = $(LIBRUBYARG_SHARED) -lpthread -ldl -lobjc -ORIG_SRCS = porter.c porter_wrap.c -SRCS = $(ORIG_SRCS) -OBJS = porter.o porter_wrap.o -HDRS = -TARGET = stemmer -TARGET_NAME = stemmer -TARGET_ENTRY = Init_$(TARGET_NAME) -DLLIB = $(TARGET).bundle -EXTSTATIC = -STATIC_LIB = - -TIMESTAMP_DIR = . -BINDIR = $(bindir) -RUBYCOMMONDIR = $(sitedir)$(target_prefix) -RUBYLIBDIR = $(sitelibdir)$(target_prefix) -RUBYARCHDIR = $(sitearchdir)$(target_prefix) -HDRDIR = $(rubyhdrdir)/ruby$(target_prefix) -ARCHHDRDIR = $(rubyhdrdir)/$(arch)/ruby$(target_prefix) - -TARGET_SO = $(DLLIB) -CLEANLIBS = $(TARGET).bundle -CLEANOBJS = *.o *.bak - -all: $(DLLIB) -static: $(STATIC_LIB) -.PHONY: all install static install-so install-rb -.PHONY: clean clean-so clean-static clean-rb - -clean-static:: -clean-rb-default:: -clean-rb:: -clean-so:: -clean: clean-so clean-static clean-rb-default clean-rb - -$(Q)$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) .*.time - -distclean-rb-default:: -distclean-rb:: -distclean-so:: -distclean-static:: -distclean: clean distclean-so distclean-static distclean-rb-default distclean-rb - -$(Q)$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log - -$(Q)$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES) - -$(Q)$(RMDIRS) $(DISTCLEANDIRS) 2> /dev/null || true - -realclean: distclean -install: install-so install-rb - -install-so: $(DLLIB) $(TIMESTAMP_DIR)/.RUBYARCHDIR.time - $(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR) -clean-static:: - -$(Q)$(RM) $(STATIC_LIB) -install-rb: pre-install-rb install-rb-default -install-rb-default: pre-install-rb-default -pre-install-rb: Makefile -pre-install-rb-default: Makefile -pre-install-rb-default: - @$(NULLCMD) -$(TIMESTAMP_DIR)/.RUBYARCHDIR.time: - $(Q) $(MAKEDIRS) $(@D) $(RUBYARCHDIR) - $(Q) $(TOUCH) $@ - -site-install: site-install-so site-install-rb -site-install-so: install-so -site-install-rb: install-rb - -.SUFFIXES: .c .m .cc .mm .cxx .cpp .o .S - -.cc.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< - -.cc.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $< - -.mm.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< - -.mm.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $< - -.cxx.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< - -.cxx.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $< - -.cpp.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< - -.cpp.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $< - -.c.o: - $(ECHO) compiling $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $< - -.c.S: - $(ECHO) translating $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $< - -.m.o: - $(ECHO) compiling $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $< - -.m.S: - $(ECHO) translating $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $< - -$(DLLIB): $(OBJS) Makefile - $(ECHO) linking shared-object $(DLLIB) - -$(Q)$(RM) $(@) - $(Q) $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS) - $(Q) $(POSTLINK) - - - -$(OBJS): $(HDRS) $(ruby_headers) diff --git a/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/extconf.rb b/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/extconf.rb deleted file mode 100644 index f1b3002..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/extconf.rb +++ /dev/null @@ -1,3 +0,0 @@ -require 'mkmf' -RbConfig::MAKEFILE_CONFIG['CC'] = ENV['CC'] if ENV['CC'] -create_makefile('stemmer') diff --git a/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/porter.c b/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/porter.c deleted file mode 100644 index 746006e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/porter.c +++ /dev/null @@ -1,441 +0,0 @@ - -/* This is the Porter stemming algorithm, coded up as thread-safe ANSI C - by the author. - - It may be be regarded as cononical, in that it follows the algorithm - presented in - - Porter, 1980, An algorithm for suffix stripping, Program, Vol. 14, - no. 3, pp 130-137, - - only differing from it at the points maked --DEPARTURE-- below. - - See also http://www.tartarus.org/~martin/PorterStemmer - - The algorithm as described in the paper could be exactly replicated - by adjusting the points of DEPARTURE, but this is barely necessary, - because (a) the points of DEPARTURE are definitely improvements, and - (b) no encoding of the Porter stemmer I have seen is anything like - as exact as this version, even with the points of DEPARTURE! - - You can compile it on Unix with 'gcc -O3 -o stem stem.c' after which - 'stem' takes a list of inputs and sends the stemmed equivalent to - stdout. - - The algorithm as encoded here is particularly fast. - - Release 2 (the more old-fashioned, non-thread-safe version may be - regarded as release 1.) -*/ - -#include /* for malloc, free */ -#include /* for memcmp, memmove */ - -/* You will probably want to move the following declarations to a central - header file. -*/ - -struct stemmer; - -extern struct stemmer * create_stemmer(void); -extern void free_stemmer(struct stemmer * z); - -extern int stem(struct stemmer * z, char * b, int k); - - - -/* The main part of the stemming algorithm starts here. -*/ - -#define TRUE 1 -#define FALSE 0 - -/* stemmer is a structure for a few local bits of data, -*/ - -struct stemmer { - char * b; /* buffer for word to be stemmed */ - int k; /* offset to the end of the string */ - int j; /* a general offset into the string */ -}; - - -/* Member b is a buffer holding a word to be stemmed. The letters are in - b[0], b[1] ... ending at b[z->k]. Member k is readjusted downwards as - the stemming progresses. Zero termination is not in fact used in the - algorithm. - - Note that only lower case sequences are stemmed. Forcing to lower case - should be done before stem(...) is called. - - - Typical usage is: - - struct stemmer * z = create_stemmer(); - char b[] = "pencils"; - int res = stem(z, b, 6); - /- stem the 7 characters of b[0] to b[6]. The result, res, - will be 5 (the 's' is removed). -/ - free_stemmer(z); -*/ - - -extern struct stemmer * create_stemmer(void) -{ - return (struct stemmer *) malloc(sizeof(struct stemmer)); - /* assume malloc succeeds */ -} - -extern void free_stemmer(struct stemmer * z) -{ - free(z); -} - - -/* cons(z, i) is TRUE <=> b[i] is a consonant. ('b' means 'z->b', but here - and below we drop 'z->' in comments. -*/ - -static int cons(struct stemmer * z, int i) -{ switch (z->b[i]) - { case 'a': case 'e': case 'i': case 'o': case 'u': return FALSE; - case 'y': return (i == 0) ? TRUE : !cons(z, i - 1); - default: return TRUE; - } -} - -/* m(z) measures the number of consonant sequences between 0 and j. if c is - a consonant sequence and v a vowel sequence, and <..> indicates arbitrary - presence, - - gives 0 - vc gives 1 - vcvc gives 2 - vcvcvc gives 3 - .... -*/ - -static int m(struct stemmer * z) -{ int n = 0; - int i = 0; - int j = z->j; - while(TRUE) - { if (i > j) return n; - if (! cons(z, i)) break; i++; - } - i++; - while(TRUE) - { while(TRUE) - { if (i > j) return n; - if (cons(z, i)) break; - i++; - } - i++; - n++; - while(TRUE) - { if (i > j) return n; - if (! cons(z, i)) break; - i++; - } - i++; - } -} - -/* vowelinstem(z) is TRUE <=> 0,...j contains a vowel */ - -static int vowelinstem(struct stemmer * z) -{ - int j = z->j; - int i; for (i = 0; i <= j; i++) if (! cons(z, i)) return TRUE; - return FALSE; -} - -/* doublec(z, j) is TRUE <=> j,(j-1) contain a double consonant. */ - -static int doublec(struct stemmer * z, int j) -{ - char * b = z->b; - if (j < 1) return FALSE; - if (b[j] != b[j - 1]) return FALSE; - return cons(z, j); -} - -/* cvc(z, i) is TRUE <=> i-2,i-1,i has the form consonant - vowel - consonant - and also if the second c is not w,x or y. this is used when trying to - restore an e at the end of a short word. e.g. - - cav(e), lov(e), hop(e), crim(e), but - snow, box, tray. - -*/ - -static int cvc(struct stemmer * z, int i) -{ if (i < 2 || !cons(z, i) || cons(z, i - 1) || !cons(z, i - 2)) return FALSE; - { int ch = z->b[i]; - if (ch == 'w' || ch == 'x' || ch == 'y') return FALSE; - } - return TRUE; -} - -/* ends(z, s) is TRUE <=> 0,...k ends with the string s. */ - -static int ends(struct stemmer * z, char * s) -{ int length = s[0]; - char * b = z->b; - int k = z->k; - if (s[length] != b[k]) return FALSE; /* tiny speed-up */ - if (length > k + 1) return FALSE; - if (memcmp(b + k - length + 1, s + 1, length) != 0) return FALSE; - z->j = k-length; - return TRUE; -} - -/* setto(z, s) sets (j+1),...k to the characters in the string s, readjusting - k. */ - -static void setto(struct stemmer * z, char * s) -{ int length = s[0]; - int j = z->j; - memmove(z->b + j + 1, s + 1, length); - z->k = j+length; -} - -/* r(z, s) is used further down. */ - -static void r(struct stemmer * z, char * s) { if (m(z) > 0) setto(z, s); } - -/* step1ab(z) gets rid of plurals and -ed or -ing. e.g. - - caresses -> caress - ponies -> poni - ties -> ti - caress -> caress - cats -> cat - - feed -> feed - agreed -> agree - disabled -> disable - - matting -> mat - mating -> mate - meeting -> meet - milling -> mill - messing -> mess - - meetings -> meet - -*/ - -static void step1ab(struct stemmer * z) -{ - char * b = z->b; - if (b[z->k] == 's') - { if (ends(z, "\04" "sses")) z->k -= 2; else - if (ends(z, "\03" "ies")) setto(z, "\01" "i"); else - if (b[z->k - 1] != 's') z->k--; - } - if (ends(z, "\03" "eed")) { if (m(z) > 0) z->k--; } else - if ((ends(z, "\02" "ed") || ends(z, "\03" "ing")) && vowelinstem(z)) - { z->k = z->j; - if (ends(z, "\02" "at")) setto(z, "\03" "ate"); else - if (ends(z, "\02" "bl")) setto(z, "\03" "ble"); else - if (ends(z, "\02" "iz")) setto(z, "\03" "ize"); else - if (doublec(z, z->k)) - { z->k--; - { int ch = b[z->k]; - if (ch == 'l' || ch == 's' || ch == 'z') z->k++; - } - } - else if (m(z) == 1 && cvc(z, z->k)) setto(z, "\01" "e"); - } -} - -/* step1c(z) turns terminal y to i when there is another vowel in the stem. */ - -static void step1c(struct stemmer * z) -{ - if (ends(z, "\01" "y") && vowelinstem(z)) z->b[z->k] = 'i'; -} - - -/* step2(z) maps double suffices to single ones. so -ization ( = -ize plus - -ation) maps to -ize etc. note that the string before the suffix must give - m(z) > 0. */ - -static void step2(struct stemmer * z) { switch (z->b[z->k-1]) -{ - case 'a': if (ends(z, "\07" "ational")) { r(z, "\03" "ate"); break; } - if (ends(z, "\06" "tional")) { r(z, "\04" "tion"); break; } - break; - case 'c': if (ends(z, "\04" "enci")) { r(z, "\04" "ence"); break; } - if (ends(z, "\04" "anci")) { r(z, "\04" "ance"); break; } - break; - case 'e': if (ends(z, "\04" "izer")) { r(z, "\03" "ize"); break; } - break; - case 'l': if (ends(z, "\03" "bli")) { r(z, "\03" "ble"); break; } /*-DEPARTURE-*/ - - /* To match the published algorithm, replace this line with - case 'l': if (ends(z, "\04" "abli")) { r(z, "\04" "able"); break; } */ - - if (ends(z, "\04" "alli")) { r(z, "\02" "al"); break; } - if (ends(z, "\05" "entli")) { r(z, "\03" "ent"); break; } - if (ends(z, "\03" "eli")) { r(z, "\01" "e"); break; } - if (ends(z, "\05" "ousli")) { r(z, "\03" "ous"); break; } - break; - case 'o': if (ends(z, "\07" "ization")) { r(z, "\03" "ize"); break; } - if (ends(z, "\05" "ation")) { r(z, "\03" "ate"); break; } - if (ends(z, "\04" "ator")) { r(z, "\03" "ate"); break; } - break; - case 's': if (ends(z, "\05" "alism")) { r(z, "\02" "al"); break; } - if (ends(z, "\07" "iveness")) { r(z, "\03" "ive"); break; } - if (ends(z, "\07" "fulness")) { r(z, "\03" "ful"); break; } - if (ends(z, "\07" "ousness")) { r(z, "\03" "ous"); break; } - break; - case 't': if (ends(z, "\05" "aliti")) { r(z, "\02" "al"); break; } - if (ends(z, "\05" "iviti")) { r(z, "\03" "ive"); break; } - if (ends(z, "\06" "biliti")) { r(z, "\03" "ble"); break; } - break; - case 'g': if (ends(z, "\04" "logi")) { r(z, "\03" "log"); break; } /*-DEPARTURE-*/ - - /* To match the published algorithm, delete this line */ - -} } - -/* step3(z) deals with -ic-, -full, -ness etc. similar strategy to step2. */ - -static void step3(struct stemmer * z) { switch (z->b[z->k]) -{ - case 'e': if (ends(z, "\05" "icate")) { r(z, "\02" "ic"); break; } - if (ends(z, "\05" "ative")) { r(z, "\00" ""); break; } - if (ends(z, "\05" "alize")) { r(z, "\02" "al"); break; } - break; - case 'i': if (ends(z, "\05" "iciti")) { r(z, "\02" "ic"); break; } - break; - case 'l': if (ends(z, "\04" "ical")) { r(z, "\02" "ic"); break; } - if (ends(z, "\03" "ful")) { r(z, "\00" ""); break; } - break; - case 's': if (ends(z, "\04" "ness")) { r(z, "\00" ""); break; } - break; -} } - -/* step4(z) takes off -ant, -ence etc., in context vcvc. */ - -static void step4(struct stemmer * z) -{ switch (z->b[z->k-1]) - { case 'a': if (ends(z, "\02" "al")) break; return; - case 'c': if (ends(z, "\04" "ance")) break; - if (ends(z, "\04" "ence")) break; return; - case 'e': if (ends(z, "\02" "er")) break; return; - case 'i': if (ends(z, "\02" "ic")) break; return; - case 'l': if (ends(z, "\04" "able")) break; - if (ends(z, "\04" "ible")) break; return; - case 'n': if (ends(z, "\03" "ant")) break; - if (ends(z, "\05" "ement")) break; - if (ends(z, "\04" "ment")) break; - if (ends(z, "\03" "ent")) break; return; - case 'o': if (ends(z, "\03" "ion") && (z->b[z->j] == 's' || z->b[z->j] == 't')) break; - if (ends(z, "\02" "ou")) break; return; - /* takes care of -ous */ - case 's': if (ends(z, "\03" "ism")) break; return; - case 't': if (ends(z, "\03" "ate")) break; - if (ends(z, "\03" "iti")) break; return; - case 'u': if (ends(z, "\03" "ous")) break; return; - case 'v': if (ends(z, "\03" "ive")) break; return; - case 'z': if (ends(z, "\03" "ize")) break; return; - default: return; - } - if (m(z) > 1) z->k = z->j; -} - -/* step5(z) removes a final -e if m(z) > 1, and changes -ll to -l if - m(z) > 1. */ - -static void step5(struct stemmer * z) -{ - char * b = z->b; - z->j = z->k; - if (b[z->k] == 'e') - { int a = m(z); - if (a > 1 || a == 1 && !cvc(z, z->k - 1)) z->k--; - } - if (b[z->k] == 'l' && doublec(z, z->k) && m(z) > 1) z->k--; -} - -/* In stem(z, b, k), b is a char pointer, and the string to be stemmed is - from b[0] to b[k] inclusive. Possibly b[k+1] == '\0', but it is not - important. The stemmer adjusts the characters b[0] ... b[k] and returns - the new end-point of the string, k'. Stemming never increases word - length, so 0 <= k' <= k. -*/ - -extern int stem(struct stemmer * z, char * b, int k) -{ - if (k <= 1) return k; /*-DEPARTURE-*/ - z->b = b; z->k = k; /* copy the parameters into z */ - - /* With this line, strings of length 1 or 2 don't go through the - stemming process, although no mention is made of this in the - published algorithm. Remove the line to match the published - algorithm. */ - - step1ab(z); step1c(z); step2(z); step3(z); step4(z); step5(z); - return z->k; -} - -/*--------------------stemmer definition ends here------------------------*/ -#if 0 -#include -#include /* for malloc, free */ -#include /* for isupper, islower, tolower */ - -static char * s; /* buffer for words tobe stemmed */ - -#define INC 50 /* size units in which s is increased */ -static int i_max = INC; /* maximum offset in s */ - -#define LETTER(ch) (isupper(ch) || islower(ch)) - -void stemfile(struct stemmer * z, FILE * f) -{ while(TRUE) - { int ch = getc(f); - if (ch == EOF) return; - if (LETTER(ch)) - { int i = 0; - while(TRUE) - { if (i == i_max) - { i_max += INC; - s = realloc(s, i_max + 1); - } - ch = tolower(ch); /* forces lower case */ - - s[i] = ch; i++; - ch = getc(f); - if (!LETTER(ch)) { ungetc(ch,f); break; } - } - s[stem(z, s, i - 1) + 1] = 0; - /* the previous line calls the stemmer and uses its result to - zero-terminate the string in s */ - printf("%s",s); - } - else putchar(ch); - } -} - -int main(int argc, char * argv[]) -{ int i; - - struct stemmer * z = create_stemmer(); - - s = (char *) malloc(i_max + 1); - for (i = 1; i < argc; i++) - { FILE * f = fopen(argv[i],"r"); - if (f == 0) { fprintf(stderr,"File %s not found\n",argv[i]); exit(1); } - stemfile(z, f); - } - free(s); - - free_stemmer(z); - - return 0; -} -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/porter.o b/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/porter.o deleted file mode 100644 index c80365f3cdda96b8b534827e8ccb28b6e88a7f52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25916 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

ocvx_-B4d2xG9%%YZuqoEzVsO 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

f- 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 Niko0@g)|Jb{|%GY2G#%o diff --git a/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/porter_wrap.c b/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/porter_wrap.c deleted file mode 100644 index d3f4b41..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/porter_wrap.c +++ /dev/null @@ -1,42 +0,0 @@ -#include - -#ifndef RSTRING_PTR -#define RSTRING_PTR(str) (RSTRING(str)->ptr) -#endif - -extern struct stemmer * create_stemmer(void); -extern void free_stemmer(struct stemmer * z); -extern int stem(struct stemmer * z, char * b, int k); - -/* copied from porter.c */ -struct stemmer { - char * b; /* buffer for word to be stemmed */ - int k; /* offset to the end of the string */ - int j; /* a general offset into the string */ -}; - -static VALUE stem_word(VALUE self, VALUE arg) -{ - size_t length, i; - char *word; - struct stemmer z; - VALUE str, rv; - - str = StringValue(arg); - word = malloc(RSTRING_LEN(str) + 1); - strncpy(word, RSTRING_PTR(str), RSTRING_LEN(str)); - word[RSTRING_LEN(str)] = '\0'; - - length = stem(&z, word, strlen(word)-1); - word[length+1] = 0; - rv = rb_str_new2(word); - free(word); - return rv; -} - -VALUE mStemmer; - -void Init_stemmer(void) { - mStemmer = rb_define_module("Stemmer"); - rb_define_module_function(mStemmer, "stem_word", stem_word, 1); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/porter_wrap.o b/vendor/bundle/ruby/2.2.0/gems/fast-stemmer-1.0.2/ext/porter_wrap.o deleted file mode 100644 index efb79e3171c41b94215de9ce979864337b9c2c34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4332 zcma)9ZERat8Gg^bzP1x5juR(oN?GG--MVhrF6r3XeY7#O!_LyKBxwd?-QA6Sop`mc zt$XdXDU4MOAVQWgA&~Y9P5j~qlMvF-nE27MstAO{#1Djo#KL#k7y=1O#mCC?-g~aU z8bn|DocH6r=Q;2BxbHds$v@wHFGM6%LWL4QNoZW5fVQK2gN^@#F7|j0liUaNZK(s3 zxJ20q()GG|w(iNEK6muvb1mJM{w)Q@<6-{>fPS_G=sYu@bUp9X?UJ=94Z7Zm=i>~? z_J@LgPme2|D&osmE0wC{n|1w2W-jAvM6bztgwruAOwfU@kNkbp+{}f%kZ3 z=8>jLRCcf>Ki(A|96Lhv@ygZwmU!o-cdx{|$cx`eTjCiD3%0q;`_mcU7v<#ck$699 zpSXv+C0@xYR=K$w?^St*?vcIzF4yzP0dJqtWlKEUuog|{X1vX=^-A=4LABLe;#G{i z8)A2SKAxN|-6~$Kv0xb$)9J?hm5lF@3~1La#s|FmO6_L6ak-ygmU#OA#lv~78Tq>2 zu+EgMg04>=XT<8|QimVX-iAs4P|{mdo3Xk)5ghwks~y2M+Ocn9#&wtpWH zBEQM?XrAYik-_!EE&BzUT*-ZjO&m%r*>WFVQP-BeT*X!bQ;~2_U;Ll4nhsKw{ z5eJ<>VPYIE?8~vrBMIr&>11~8ciD}H|B4=0xmR}0O@!Hv5B;9CjS)6}mq*F2{ovFe zSu2841LL1%nYe%E@yz^ecJ)tV*|o-IcH`Mi7b&-PCAS{Db~(`qU%DDy-5h@>kXwHw zmc4NiNOG(TzWgY`s?xOwfEi$=ho+Ax%FiLzU5(c0;#$6(3OCS zki6!N6E`sIo7uHrdblrLIiiYYD+2Kyr`P_HUA;W^$;?w3{nQ(?b+b}2ZF0c%GgZ4l znOd!ECZ?z7k0q8(+bLD8#KF|Q)V{=B`7%D_-ibGt(!JQn73-I&`{hI1bHx z*lGJ1Z=u*qngrMyuy$bn`S$go$)DV;O<`=yy#?{>;r zr8+Kw?uBy9auFRCv354OOLvYI=rr+=&$tW93ya|v>r2R`1;fTitTVb^cLxEpm#IXP z?kU1Kl3X+;X`n4!=6rAemQ-l@>88IFPD#$^m`Tu6p3thFlj1eW1?n0UkUOIRr75A`W+Q%nNMK_QQB|4W=-kb|d#5(n#6n zd9fP5w?iG~+49u5ZKN3_Mi^}d8Q}F#2ABWvs+D9Ld>-s=*#ff;!l&_*X%)%W# zs{aO3r(pONig+UMHLy@vn+FSiA5}~Q)NtrKkhqu7R0@3$!lzgXs$mMVIq*YNT3CA? ztcPDLcZsap`%`F)BXaNy{Tz}z#+(|9jEN~V^b1&c2r;8l- z78MVsjPOk2FGGEh)zM8>FGGEd)!|`mVEhkIE3CSGhilCi8u=*Xn9?`;FgPPA{WN+Q zydV9PXn6FfFAwxlAOl4UsN-lWLJaJ5_jewm`Xmvb2(*Cs>BfK^DUI*vR{p;mZq0Pd zeO^Fm_2yalxsZqJPHepUG6C}uyE$L;f$=lzdEbL`CQpnxucDXKdE?wP&1)qSCmOqn zHxUHqPMVY|@24Sf8+OsK)Wx|O5@%x~))xxD2(R6+zaQo5KW?}r@rg3g*yojx^dl>| z#C}Iuy6*Y$I4=2qxmE3jz?anHz*Oi}GzsyqXg_K`g&eQg^2$uv%N4#DOSmoheoT7z zW68>w8wKymlqPPabi=XJeq(9>f%`fw&We-P-S;RF`=^$8UIOn0|2jC*Wb!O{0Gy9y7(5M*{Y&lw2i^8QRG8dI+~c?Pf#da; zLjMD4^I9hh%btW9I>x86G;s z;ADiGWGLH@t?lYZ>$;^@*;dzDt++G@4WUwv?tW-h7Gp)3ab(L!X?Wyu_xn5d+{^>q z?H~R0ubj{4-1B>%-}#-#J?Gq+H!hwYE?~@LW{edgk3+sYpRpK9N>?Gz$YadqT4h_a zij%S*CD|wwIBYVQVPgc_(k{JHiF zbF3t-OZwEGUnD>zm&;rKf7vT8(FKu0B@^P1kCvy4fpwb*HSG@Hezw(`W zpVzBwEiY@{DNe?t?lE*ZU&vE78%C7S^@Nz-Z=BV4{izFl4|uUcu3elkT?k2%z{ z4s}S54(CaoA4AuvD$J&a3mxtga;tS}Fx=vZTc^tLC8p?k%eI2(d2{HB)b-o%9|{JQ zU}%LsdU)6#zxlVQ<7Ha<6UBgHU7;_@t&yo(uvUFPRAtv*lhwLHSv`@egrOl>wH3AJ zKMX;6XU)`MIodtUYwU2c)IvZ=oi(4zJ+ox8_S~uJ^M`pDSG=^t7 z;`a~Ns=gkl`k_NT3RkK}T!~F&4C+qxliChn51a~6Gb58ouUM8|T&gWn8X1$?PQY<) z($+e#K3rv2Uvucq(qMr%t5($#bAiOVYCFQcQfvnnXj{Bx$fj;9va4^~Vw$A>8>}S# zV30^s5r838`EJwhnp*~>@75AS{j+)^@q2_@I~eN%7xN-lwhn~ClJugi zEvgSuG{-|;Fua1%;3bBXX51?no_mQgL3gH0UEKrcS{&62*3Q+!)o`Xp9Zu|#xHq#M zdV3bPTjp3EvW}B>COUpWyp}@9!m}lr@kd)KvD3e7xSMV&sh7|U*L)9kS70xlb;~+)ueJ`2Jd^Ew+qkeowajK zP1S16TuoM2V@@4&c5Gv|SpSyQwd$E#_nF15)_GgQ6*cj7noU(OIBmVLu9oS%pN;-q z#k~tnuDRudNQ#C=YKlYcPEF+C*u~wJc^+=HBV0&x&*AQtrTw)9TJ*r<(F+r$9VOT# z+2fNYp>cM1QM=vrruM!wKBvIeZY{8P*m~n@OwoaY$PIF<<_%xth__tCygY_M^)l_` z5~q2vq_)qnU_=MTNS(bFbQNT!ST`U?w0i*ZzaV+q;nu3>5-;m2u|43|b|}4a^w34# zy!g$#AeVd)bbE)hH|{V+FIc3`7H-j6;E`fMGHE(2W64tdZjaRV5UR!e9+J1;T2F-7 zinP%|VRQu_gyKSIMz=$Pe8yZ(uzL zM?esbGyHIoA3p=#881b6=M>1T!yf7TUEJiIh_YFh9z84<9u8mYh(}6kDSi^w>PvA< z48na_aiRm3$Rtt@OY-(e=}^7bi%|R?9APm!kPlPca$&b_Y7nN@lPTH|Cl&}(M@gao zuqj>LH%6+PEM(r|GTkOAb{>!;dWcNTG)&d1rxKrF;9z#d{s_Kk@IZ1QX0zT(YXJ>J zIer%(MWq-Se!V^#MrTlqK8*J0R@%#m)f2s3!N98Sc}l zK8cM#trA}F!K=#T^$6aNbl$8?-d>#-`yqHDeiy{ReGOhDw}5U8n34IIAGwwH|1C}o z6mmTQQ63pDjebrw=6L)h#FO1=S!3wGO7x$n>3G*-Ig8&MA^HzM#|{Cl4ijx7(H=<48aAE) zJ>`SofDoKZgtdkTscQ_cGHj<7HOvkGtL*S{l7zj@$!E6O7QJFo z#<1sjFL4^-!LH{v+6&T-km|NX7FvVhc`)Etg28YZZ39!2jLje{)Wbqb%5eS_5GdGx zz&nM4ZR=35MLCOj*UZ+UU5`i4UnT9BOG|is>^Y20yW6teZtBtcBK%GMGjAwYz`}6~BvL>Z9S2AX+gpb47Ez?O7a)mA zj@Qc9@ScGLwKw^AS|1huROn-=c~t203h5S3im4!_zM6J#tB`g}F@L7C$4%1T2Fb40 zVOxiFKiNYIncgt?d8^Qb7juLr`PtxALgR&x9w1U|a)yz?WR#Xa^$eOthTDtGtrtRg z*-#B8YRgn@@o{vz zz8wD#I!uV(il{@>5}8P%<0zOu#UGN|D!}MJh*!u)7=y=D8Qqfd%4q5Q8H~j68mz-+ zdtuWq-@mg8&D%LC?!-Rck5&?x~X8p#PXnI$}2Uy6^jspU<6ujT)a6+XE2c6)ie}7A4QXopjJ^+O6gh*J%T#@K+5ve;-`do!^V$Op$&as%WCr z`E{zVRrBb6$yA9Rv+bEN3+rmJ>%dQbFFi0}U>r!~B3@Qz(jIX!f=W}%({1?>YGMYw z128SvLV`D@1z$-EK9?of4KGHz@lSX`qb0Fj5HSWb?}f^DrD^=UgCiuJm7YMarT6Pg z^z*FFdQhH{s%h={^q#=xyKARx>ag|5strf5?&KEmAe7vI665wP3d?y-+w_@Uz9vfP ztd0}U$SX5wxBMkdC;sn%xAkjU-#JaY?m{}(gJ%Aut7Y_v_OBqC%V$-#ik%P_+3g zm0d4?A2E}j{9SV?2;r+^{h`Tp5v9GJIErqmJc15-=z!W&ckm^IogK{R@2vZ(cJ-aam*H@A+;W4gE-l1RD$E#4yD5?X_V^g;N`&mP~_mpBSB9M>HkWBL!3gbNQO z#zp(4r7Vt)CB=5F3ziZOa*GEY9h05$mg4^IlJFG=J{}kS)3jRLD-=39ZZCFpY??w_ zu}-p;ZODvvc3aGF>Al2yu;a@$RNHGukX}h?n*E2}HF!l3caiQ0fjFID5fJl<&n0d8 zV`!r`{m1G(j^6`Y}O|5%dFs_7c3oGYZp^};W@>*PHbrLg&`bta;^UGJiu94mwK>q- zh`94_dQ(xNk69@ZkfP|Iy%P~w6K!TbKlKTFAB*y=D2GM)k|&Sa1V$q;8iBu81jb)i{4J_$LKS`++sJ=Z?`pvB!f`LL zVk6tlHWp8)ay2z83c*tV`*1-Ma1&NSnBsH$HV`&L$9w@?lmM+5U*&3Ua5XAT_?@oH z7ibLQS_Jg@m!Z3w!hScuAc8=ZE`T4;yZp*#7yXK!^z0*K+&;NB)qBI-+;Y?k39sTO zp*1?@cW>AVR8J-s{)dq7ZdP!a15y3TWihpA1hW&FIURmaXoU7npK(2Nhne+_$KA>q zdf++*(0n}ls<{2W@x{e`rOUfaI?Cv7?JWMeK;NPGg$|cujP6A<@!7zea1~Q@)d?Pd zx|AuygYI@HJq(zBS76}8r+c7cVj>Z~43A8l^v?+Wp8_U*0|)q5=`(x|r1XN&H*iCL z9qyAT5l;1I;#B`Sy1zx*2bk(NaDcr2<(!+=&%{apS)qSG=o`49zb{8W6K^CTk#ggI z2)xYrzXkkq@!vp~Z%7Mq;YR)&IGLvSS0Pg(oZ4SS2omAkf1yv8w50#6z===#uOL$* zob(NR7352ZArkR3+jAHA<3Kdx*(h)$KI;u!)CZK&j|&a|X`B#ljHeQT8{?ylaP<8; zVj$6P+)3W(|E~cAN@jVg!7~%D&B0gY;B`7q7I_Nb31kFs&%qzb!Rb;uv%X*E;Qx_> z&je0wDo3tBu0)=NJR5lqGXCzs<|5NII#ShND__D~S?h!=XJz4Q<;W`H8d*g+iRmk; zv4$F}CzX8NymZC9gpyt>iIufV3PO5)BsQ&#RPr_Pk|qAK|EAawXbv?6yq-Y$`mm=F zf2qK2dSjruydmsw^eX%h7UlXMEY>T&V0lx0Ff>yvtTQX|CyQC-_@`GnBQr{Knfvm8 z+4$R3BI*dR|EC-H0?+?J#azw8GuP(k`VD^%_wLjMD4^I9hh%btW9I>x86G;s z;ADiGWGLH@t?lYZ>$;^@*;dzDt++G@4WUwv?tW-h7Gp)3ab(L!X?Wyu_xn5d+{^>q z?H~R0ubj{4-1B>%-}#-#J?Gq+H!hwYE?~@LW{edgk3+sYpRpK9N>?Gz$YadqT4h_a zij%S*CD|wwIBYVQVPgc_(k{JHiF zbF3t-OZwEGUnD>zm&;rKf7vT8(FKu0B@^P1kCvy4fpwb*HSG@Hezw(`W zpVzBwEiY@{DNe?t?lE*ZU&vE78%C7S^@Nz-Z=BV4{izFl4|uUcu3elkT?k2%z{ z4s}S54(CaoA4AuvD$J&a3mxtga;tS}Fx=vZTc^tLC8p?k%eI2(d2{HB)b-o%9|{JQ zU}%LsdU)6#zxlVQ<7Ha<6UBgHU7;_@t&yo(uvUFPRAtv*lhwLHSv`@egrOl>wH3AJ zKMX;6XU)`MIodtUYwU2c)IvZ=oi(4zJ+ox8_S~uJ^M`pDSG=^t7 z;`a~Ns=gkl`k_NT3RkK}T!~F&4C+qxliChn51a~6Gb58ouUM8|T&gWn8X1$?PQY<) z($+e#K3rv2Uvucq(qMr%t5($#bAiOVYCFQcQfvnnXj{Bx$fj;9va4^~Vw$A>8>}S# zV30^s5r838`EJwhnp*~>@75AS{j+)^@q2_@I~eN%7xN-lwhn~ClJugi zEvgSuG{-|;Fua1%;3bBXX51?no_mQgL3gH0UEKrcS{&62*3Q+!)o`Xp9Zu|#xHq#M zdV3bPTjp3EvW}B>COUpWyp}@9!m}lr@kd)KvD3e7xSMV&sh7|U*L)9kS70xlb;~+)ueJ`2Jd^Ew+qkeowajK zP1S16TuoM2V@@4&c5Gv|SpSyQwd$E#_nF15)_GgQ6*cj7noU(OIBmVLu9oS%pN;-q z#k~tnuDRudNQ#C=YKlYcPEF+C*u~wJc^+=HBV0&x&*AQtrTw)9TJ*r<(F+r$9VOT# z+2fNYp>cM1QM=vrruM!wKBvIeZY{8P*m~n@OwoaY$PIF<<_%xth__tCygY_M^)l_` z5~q2vq_)qnU_=MTNS(bFbQNT!ST`U?w0i*ZzaV+q;nu3>5-;m2u|43|b|}4a^w34# zy!g$#AeVd)bbE)hH|{V+FIc3`7H-j6;E`fMGHE(2W64tdZjaRV5UR!e9+J1;T2F-7 zinP%|VRQu_gyKSIMz=$Pe8yZ(uzL zM?esbGyHIoA3p=#881b6=M>1T!yf7TUEJiIh_YFh9z84<9u8mYh(}6kDSi^w>PvA< z48na_aiRm3$Rtt@OY-(e=}^7bi%|R?9APm!kPlPca$&b_Y7nN@lPTH|Cl&}(M@gao zuqj>LH%6+PEM(r|GTkOAb{>!;dWcNTG)&d1rxKrF;9z#d{s_Kk@IZ1QX0zT(YXJ>J zIer%(MWq-Se!V^#MrTlqK8*J0R@%#m)f2s3!N98Sc}l zK8cM#trA}F!K=#T^$6aNbl$8?-d>#-`yqHDeiy{ReGOhDw}5U8n34IIAGwwH|1C}o z6mmTQQ63pDjebrw=6L)h#FO1=S!3wGO7x$n>3G*-Ig8&MA^HzM#|{Cl4ijx7(H=<48aAE) zJ>`SofDoKZgtdkTscQ_cGHj<7HOvkGtL*S{l7zj@$!E6O7QJFo z#<1sjFL4^-!LH{v+6&T-km|NX7FvVhc`)Etg28YZZ39!2jLje{)Wbqb%5eS_5GdGx zz&nM4ZR=35MLCOj*UZ+UU5`i4UnT9BOG|is>^Y20yW6teZtBtcBK%GMGjAwYz`}6~BvL>Z9S2AX+gpb47Ez?O7a)mA zj@Qc9@ScGLwKw^AS|1huROn-=c~t203h5S3im4!_zM6J#tB`g}F@L7C$4%1T2Fb40 zVOxiFKiNYIncgt?d8^Qb7juLr`PtxALgR&x9w1U|a)yz?WR#Xa^$eOthTDtGtrtRg z*-#B8YRgn@@o{vz zz8wD#I!uV(il{@>5}8P%<0zOu#UGN|D!}MJh*!u)7=y=D8Qqfd%4q5Q8H~j68mz-+ zdtuWq-@mg8&D%LC?!-Rck5&?x~X8p#PXnI$}2Uy6^jspU<6ujT)a6+XE2c6)ie}7A4QXopjJ^+O6gh*J%T#@K+5ve;-`do!^V$Op$&as%WCr z`E{zVRrBb6$yA9Rv+bEN3+rmJ>%dQbFFi0}U>r!~B3@Qz(jIX!f=W}%({1?>YGMYw z128SvLV`D@1z$-EK9?of4KGHz@lSX`qb0Fj5HSWb?}f^DrD^=UgCiuJm7YMarT6Pg z^z*FFdQhH{s%h={^q#=xyKARx>ag|5strf5?&KEmAe7vI665wP3d?y-+w_@Uz9vfP ztd0}U$SX5wxBMkdC;sn%xAkjU-#JaY?m{}(gJ%Aut7Y_v_OBqC%V$-#ik%P_+3g zm0d4?A2E}j{9SV?2;r+^{h`Tp5v9GJIErqmJc15-=z!W&ckm^IogK{R@2vZ(cJ-aam*H@A+;W4gE-l1RD$E#4yD5?X_V^g;N`&mP~_mpBSB9M>HkWBL!3gbNQO z#zp(4r7Vt)CB=5F3ziZOa*GEY9h05$mg4^IlJFG=J{}kS)3jRLD-=39ZZCFpY??w_ zu}-p;ZODvvc3aGF>Al2yu;a@$RNHGukX}h?n*E2}HF!l3caiQ0fjFID5fJl<&n0d8 zV`!r`{m1G(j^6`Y}O|5%dFs_7c3oGYZp^};W@>*PHbrLg&`bta;^UGJiu94mwK>q- zh`94_dQ(xNk69@ZkfP|Iy%P~w6K!TbKlKTFAB*y=D2GM)k|&Sa1V$q;8iBu81jb)i{4J_$LKS`++sJ=Z?`pvB!f`LL zVk6tlHWp8)ay2z83c*tV`*1-Ma1&NSnBsH$HV`&L$9w@?lmM+5U*&3Ua5XAT_?@oH z7ibLQS_Jg@m!Z3w!hScuAc8=ZE`T4;yZp*#7yXK!^z0*K+&;NB)qBI-+;Y?k39sTO zp*1?@cW>AVR8J-s{)dq7ZdP!a15y3TWihpA1hW&FIURmaXoU7npK(2Nhne+_$KA>q zdf++*(0n}ls<{2W@x{e`rOUfaI?Cv7?JWMeK;NPGg$|cujP6A<@!7zea1~Q@)d?Pd zx|AuygYI@HJq(zBS76}8r+c7cVj>Z~43A8l^v?+Wp8_U*0|)q5=`(x|r1XN&H*iCL z9qyAT5l;1I;#B`Sy1zx*2bk(NaDcr2<(!+=&%{apS)qSG=o`49zb{8W6K^CTk#ggI z2)xYrzXkkq@!vp~Z%7Mq;YR)&IGLvSS0Pg(oZ4SS2omAkf1yv8w50#6z===#uOL$* zob(NR7352ZArkR3+jAHA<3Kdx*(h)$KI;u!)CZK&j|&a|X`B#ljHeQT8{?ylaP<8; zVj$6P+)3W(|E~cAN@jVg!7~%D&B0gY;B`7q7I_Nb31kFs&%qzb!Rb;uv%X*E;Qx_> z&je0wDo3tBu0)=NJR5lqGXCzs<|5NII#ShND__D~S?h!=XJz4Q<;W`H8d*g+iRmk; zv4$F}CzX8NymZC9gpyt>iIufV3PO5)BsQ&#RPr_Pk|qAK|EAawXbv?6yq-Y$`mm=F zf2qK2dSjruydmsw^eX%h7UlXMEY>T&V0lx0Ff>yvtTQX|CyQC-_@`GnBQr{Knfvm8 z+4$R3BI*dR|EC-H0?+?J#azw8GuP(k`VD^%_w 'ride', - 'forestalled' => 'forestal', - 'combined' => 'combin', - 'ran' => 'ran', - 'seen' => 'seen', - 'excused' => 'excus' - } - end - - def test_stems - @stems.each {|stem| assert_equal(stem[1], stem[0].stem)} - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/COPYING b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/COPYING deleted file mode 100644 index 7622318..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/COPYING +++ /dev/null @@ -1,49 +0,0 @@ -Copyright (c) 2008-2013, Ruby FFI project contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Ruby FFI project nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -libffi, used by this project, is licensed under the MIT license: - -libffi - Copyright (c) 1996-2011 Anthony Green, Red Hat, Inc and others. -See source files for details. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -``Software''), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/LICENSE b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/LICENSE deleted file mode 100644 index ef147e6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2008-2013, Ruby FFI project contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Ruby FFI project nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/README.md b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/README.md deleted file mode 100644 index ec4a57f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/README.md +++ /dev/null @@ -1,109 +0,0 @@ -# ruby-ffi https://wiki.github.com/ffi/ffi [![Build Status](https://travis-ci.org/ffi/ffi.png?branch=master)](https://travis-ci.org/ffi/ffi) - -## Description - -Ruby-FFI is a ruby extension for programmatically loading dynamic -libraries, binding functions within them, and calling those functions -from Ruby code. Moreover, a Ruby-FFI extension works without changes -on Ruby and JRuby. [Discover why you should write your next extension -using Ruby-FFI](https://wiki.github.com/ffi/ffi/why-use-ffi). - -## Features/problems - -* Intuitive DSL -* Supports all C native types -* C structs (also nested), enums and global variables -* Callbacks from C to ruby -* Automatic garbage collection of native memory - -## Synopsis - -```ruby -require 'ffi' - -module MyLib - extend FFI::Library - ffi_lib 'c' - attach_function :puts, [ :string ], :int -end - -MyLib.puts 'Hello, World using libc!' -``` - -For less minimalistic and more sane examples you may look at: - -* the samples/ folder -* the examples on the [wiki](https://wiki.github.com/ffi/ffi) -* the projects using FFI listed on this page (https://wiki.github.com/ffi/ffi/projects-using-ffi) - -## Requirements - -You need a sane building environment in order to compile the extension. -At a minimum, you will need: -* A C compiler (e.g. Xcode on OSX, gcc on everything else) -* libffi development library - this is commonly in the libffi-dev or libffi-devel - -## Installation - -From rubygems: - - [sudo] gem install ffi - -or from the git repository on github: - - git clone git://github.com/ffi/ffi.git - cd ffi - rake gem:install - -## License - -The ffi library is covered by the BSD license, also see the LICENSE file. -The specs are shared with Rubyspec and are licensed by the same license -as Rubyspec, see the LICENSE.SPECS file. - -## Credits - -The following people have submitted code, bug reports, or otherwise contributed to the success of this project: - -* Alban Peignier -* Aman Gupta -* Andrea Fazzi -* Andreas Niederl -* Andrew Cholakian -* Antonio Terceiro -* Brian Candler -* Brian D. Burns -* Bryan Kearney -* Charlie Savage -* Chikanaga Tomoyuki -* Hongli Lai -* Ian MacLeod -* Jake Douglas -* Jean-Dominique Morani -* Jeremy Hinegardner -* Jesús García Sáez -* Joe Khoobyar -* Jurij Smakov -* KISHIMOTO, Makoto -* Kim Burgestrand -* Lars Kanis -* Luc Heinrich -* Luis Lavena -* Matijs van Zuijlen -* Matthew King -* Mike Dalessio -* NARUSE, Yui -* Park Heesob -* Shin Yee -* Stephen Bannasch -* Suraj N. Kurapati -* Sylvain Daubert -* Victor Costan -* beoran@gmail.com -* ctide -* emboss -* hobophobe -* meh -* postmodern -* wycats@gmail.com -* Wayne Meissner diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/Rakefile b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/Rakefile deleted file mode 100644 index 0dfdebb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/Rakefile +++ /dev/null @@ -1,224 +0,0 @@ -require 'rubygems/tasks' -require 'rbconfig' -require 'rake/clean' - -USE_RAKE_COMPILER = (RUBY_PLATFORM =~ /java/) ? false : true -if USE_RAKE_COMPILER - require 'rake/extensiontask' -end - -require 'date' -require 'fileutils' -require 'rbconfig' -require 'rspec/core/rake_task' -require 'rubygems/package_task' - -RSpec::Core::RakeTask.new(:spec => :compile) do |config| - config.rspec_opts = YAML.load_file 'spec/spec.opts' -end - - -LIBEXT = case RbConfig::CONFIG['host_os'].downcase - when /darwin/ - "dylib" - when /mswin|mingw/ - "dll" - else - RbConfig::CONFIG['DLEXT'] - end - -CPU = case RbConfig::CONFIG['host_cpu'].downcase - when /i[3456]86/ - # Darwin always reports i686, even when running in 64bit mode - if RbConfig::CONFIG['host_os'] =~ /darwin/ && 0xfee1deadbeef.is_a?(Fixnum) - "x86_64" - else - "i386" - end - - when /amd64|x86_64/ - "x86_64" - - when /ppc64|powerpc64/ - "powerpc64" - - when /ppc|powerpc/ - "powerpc" - - when /^arm/ - "arm" - - else - RbConfig::CONFIG['host_cpu'] - end - -OS = case RbConfig::CONFIG['host_os'].downcase - when /linux/ - "linux" - when /darwin/ - "darwin" - when /freebsd/ - "freebsd" - when /openbsd/ - "openbsd" - when /sunos|solaris/ - "solaris" - when /mswin|mingw/ - "win32" - else - RbConfig::CONFIG['host_os'].downcase - end - -GMAKE = system('which gmake >/dev/null') && 'gmake' || 'make' - -LIBTEST = "build/libtest.#{LIBEXT}" -BUILD_DIR = "build" -BUILD_EXT_DIR = File.join(BUILD_DIR, "#{RbConfig::CONFIG['arch']}", 'ffi_c', RUBY_VERSION) - -def gem_spec - @gem_spec ||= Gem::Specification.load('ffi.gemspec') -end - -TEST_DEPS = [ LIBTEST ] -if RUBY_PLATFORM == "java" - desc "Run all specs" - task :specs, [:options] => TEST_DEPS do |t, args| - sh %{#{Gem.ruby} -w -S rspec #{args.options || Dir["spec/ffi/*_spec.rb"].join(" ")} -fs --color} - end - desc "Run rubinius specs" - task :rbxspecs => TEST_DEPS do - sh %{#{Gem.ruby} -w -S rspec #{Dir["spec/ffi/rbx/*_spec.rb"].join(" ")} -fs --color} - end -else - TEST_DEPS.unshift :compile - desc "Run all specs" - task :specs, [:options] => TEST_DEPS do |t, args| - ENV["MRI_FFI"] = "1" - sh %{#{Gem.ruby} -w -Ilib -I#{BUILD_EXT_DIR} -S rspec #{args.options || Dir["spec/ffi/*_spec.rb"].join(" ")} -fs --color} - end - desc "Run rubinius specs" - task :rbxspecs => TEST_DEPS do - ENV["MRI_FFI"] = "1" - sh %{#{Gem.ruby} -w -Ilib -I#{BUILD_EXT_DIR} -S rspec #{Dir["spec/ffi/rbx/*_spec.rb"].join(" ")} -fs --color} - end -end - -desc "Build all packages" -task :package => 'gem:package' - -CLOBBER.include 'build' -CLOBBER.include FileList['lib/**/ffi_c.so'] -CLOBBER.include FileList["lib/**/ffi_c.#{RbConfig::CONFIG['DLEXT']}"] -CLOBBER.include 'lib/ffi/types.conf' -CLOBBER.include 'conftest.dSYM' -CLOBBER.include 'pkg' -CLOBBER.include 'spec/ffi/fixtures/libtest.dylib' - -task :distclean => :clobber - -desc "Build the native test lib" -file "build/libtest.#{LIBEXT}" => FileList['libtest/**/*.[ch]'] do - sh %{#{GMAKE} -f libtest/GNUmakefile CPU=#{CPU} OS=#{OS} } -end - - -desc "Build test helper lib" -task :libtest => "build/libtest.#{LIBEXT}" - -desc "Test the extension" -task :test => [ :spec ] - - -namespace :bench do - ITER = ENV['ITER'] ? ENV['ITER'].to_i : 100000 - bench_libs = "-Ilib -I#{BUILD_DIR}" unless RUBY_PLATFORM == "java" - bench_files = Dir["bench/bench_*.rb"].reject { |f| f == "bench_helper.rb" } - bench_files.each do |bench| - task File.basename(bench, ".rb")[6..-1] => TEST_DEPS do - sh %{#{Gem.ruby} #{bench_libs} #{bench} #{ITER}} - end - end - task :all => TEST_DEPS do - bench_files.each do |bench| - sh %{#{Gem.ruby} #{bench_libs} #{bench}} - end - end -end - -task 'spec:run' => TEST_DEPS -task 'spec:specdoc' => TEST_DEPS - -task :default => :specs - -namespace 'java' do - - java_gem_spec = Gem::Specification.new do |s| - s.name = gem_spec.name - s.version = gem_spec.version - s.author = gem_spec.author - s.email = gem_spec.email - s.homepage = gem_spec.homepage - s.summary = gem_spec.summary - s.description = gem_spec.description - s.files = %w(LICENSE COPYING README.md Rakefile) - s.has_rdoc = false - s.license = gem_spec.license - s.platform = 'java' - end - - Gem::PackageTask.new(java_gem_spec) do |pkg| - pkg.need_zip = true - pkg.need_tar = true - pkg.package_dir = 'pkg' - end -end - -task 'gem:java' => 'java:gem' - - -if USE_RAKE_COMPILER - Rake::ExtensionTask.new('ffi_c', gem_spec) do |ext| - ext.name = 'ffi_c' # indicate the name of the extension. - # ext.lib_dir = BUILD_DIR # put binaries into this folder. - ext.tmp_dir = BUILD_DIR # temporary folder used during compilation. - ext.cross_compile = true # enable cross compilation (requires cross compile toolchain) - ext.cross_platform = %w[i386-mingw32 x64-mingw32] # forces the Windows platform instead of the default one - end - - task 'gem:win32' => ['gem:win32-x64', 'gem:win32-i386'] - - task 'gem:win32-i386' do - sh("rake cross native:i386-mingw32 gem RUBY_CC_VERSION='1.8.7:1.9.3:2.0.0:2.1.5:2.2.1'") || raise("win32-i386 build failed!") - end - - task 'gem:win32-x64' do - sh("rake cross native:x64-mingw32 gem RUBY_CC_VERSION='2.0.0:2.1.5:2.2.1'") || raise("win32-x64 build failed!") - end - - (ENV['RUBY_CC_VERSION'] || '1.8.7:1.9.3:2.0.0:2.1.5:2.2.1' ).to_s.split(':').each do |ruby_version| - task "copy:ffi_c:i386-mingw32:#{ruby_version}" do |t| - sh "i686-w64-mingw32-strip -S #{BUILD_DIR}/i386-mingw32/stage/lib/#{ruby_version[/^\d+\.\d+/]}/ffi_c.so" - end - end - - (ENV['RUBY_CC_VERSION'] || '2.0.0:2.1.5:2.2.1' ).to_s.split(':').each do |ruby_version| - task "copy:ffi_c:x64-mingw32:#{ruby_version}" do |t| - sh "x86_64-w64-mingw32-strip -S #{BUILD_DIR}/x64-mingw32/stage/lib/#{ruby_version[/^\d+\.\d+/]}/ffi_c.so" - end - end -end - -Gem::Tasks.new do |t| - t.scm.tag.format = '%s' -end - -begin - require 'yard' - - namespace :doc do - YARD::Rake::YardocTask.new do |yard| - end - end -rescue LoadError - warn "[warn] YARD unavailable" -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/.RUBYARCHDIR.time b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/.RUBYARCHDIR.time deleted file mode 100644 index e69de29..0000000 diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/AbstractMemory.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/AbstractMemory.c deleted file mode 100644 index 156d7cf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/AbstractMemory.c +++ /dev/null @@ -1,1032 +0,0 @@ -/* - * Copyright (c) 2008, 2009, Wayne Meissner - * Copyright (C) 2009 Jake Douglas - * Copyright (C) 2008 Luc Heinrich - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#ifndef _MSC_VER -# include -# include -# include -#else -# include "win32/stdbool.h" -# include "win32/stdint.h" -#endif - -#include -#include - -#include "rbffi.h" -#include "compat.h" -#include "AbstractMemory.h" -#include "Pointer.h" -#include "Function.h" -#include "LongDouble.h" - - -static inline char* memory_address(VALUE self); -VALUE rbffi_AbstractMemoryClass = Qnil; -static VALUE NullPointerErrorClass = Qnil; -static ID id_to_ptr = 0, id_plus = 0, id_call = 0; - -static VALUE -memory_allocate(VALUE klass) -{ - AbstractMemory* memory; - VALUE obj; - obj = Data_Make_Struct(klass, AbstractMemory, NULL, -1, memory); - memory->flags = MEM_RD | MEM_WR; - - return obj; -} -#define VAL(x, swap) (unlikely(((memory->flags & MEM_SWAP) != 0)) ? swap((x)) : (x)) - -#define NUM_OP(name, type, toNative, fromNative, swap) \ -static void memory_op_put_##name(AbstractMemory* memory, long off, VALUE value); \ -static void \ -memory_op_put_##name(AbstractMemory* memory, long off, VALUE value) \ -{ \ - type tmp = (type) VAL(toNative(value), swap); \ - checkWrite(memory); \ - checkBounds(memory, off, sizeof(type)); \ - memcpy(memory->address + off, &tmp, sizeof(tmp)); \ -} \ -static VALUE memory_put_##name(VALUE self, VALUE offset, VALUE value); \ -static VALUE \ -memory_put_##name(VALUE self, VALUE offset, VALUE value) \ -{ \ - AbstractMemory* memory; \ - Data_Get_Struct(self, AbstractMemory, memory); \ - memory_op_put_##name(memory, NUM2LONG(offset), value); \ - return self; \ -} \ -static VALUE memory_write_##name(VALUE self, VALUE value); \ -static VALUE \ -memory_write_##name(VALUE self, VALUE value) \ -{ \ - AbstractMemory* memory; \ - Data_Get_Struct(self, AbstractMemory, memory); \ - memory_op_put_##name(memory, 0, value); \ - return self; \ -} \ -static VALUE memory_op_get_##name(AbstractMemory* memory, long off); \ -static VALUE \ -memory_op_get_##name(AbstractMemory* memory, long off) \ -{ \ - type tmp; \ - checkRead(memory); \ - checkBounds(memory, off, sizeof(type)); \ - memcpy(&tmp, memory->address + off, sizeof(tmp)); \ - return fromNative(VAL(tmp, swap)); \ -} \ -static VALUE memory_get_##name(VALUE self, VALUE offset); \ -static VALUE \ -memory_get_##name(VALUE self, VALUE offset) \ -{ \ - AbstractMemory* memory; \ - Data_Get_Struct(self, AbstractMemory, memory); \ - return memory_op_get_##name(memory, NUM2LONG(offset)); \ -} \ -static VALUE memory_read_##name(VALUE self); \ -static VALUE \ -memory_read_##name(VALUE self) \ -{ \ - AbstractMemory* memory; \ - Data_Get_Struct(self, AbstractMemory, memory); \ - return memory_op_get_##name(memory, 0); \ -} \ -static MemoryOp memory_op_##name = { memory_op_get_##name, memory_op_put_##name }; \ -\ -static VALUE memory_put_array_of_##name(VALUE self, VALUE offset, VALUE ary); \ -static VALUE \ -memory_put_array_of_##name(VALUE self, VALUE offset, VALUE ary) \ -{ \ - long count = RARRAY_LEN(ary); \ - long off = NUM2LONG(offset); \ - AbstractMemory* memory = MEMORY(self); \ - long i; \ - checkWrite(memory); \ - checkBounds(memory, off, count * sizeof(type)); \ - for (i = 0; i < count; i++) { \ - type tmp = (type) VAL(toNative(RARRAY_PTR(ary)[i]), swap); \ - memcpy(memory->address + off + (i * sizeof(type)), &tmp, sizeof(tmp)); \ - } \ - return self; \ -} \ -static VALUE memory_write_array_of_##name(VALUE self, VALUE ary); \ -static VALUE \ -memory_write_array_of_##name(VALUE self, VALUE ary) \ -{ \ - return memory_put_array_of_##name(self, INT2FIX(0), ary); \ -} \ -static VALUE memory_get_array_of_##name(VALUE self, VALUE offset, VALUE length); \ -static VALUE \ -memory_get_array_of_##name(VALUE self, VALUE offset, VALUE length) \ -{ \ - long count = NUM2LONG(length); \ - long off = NUM2LONG(offset); \ - AbstractMemory* memory = MEMORY(self); \ - VALUE retVal = rb_ary_new2(count); \ - long i; \ - checkRead(memory); \ - checkBounds(memory, off, count * sizeof(type)); \ - for (i = 0; i < count; ++i) { \ - type tmp; \ - memcpy(&tmp, memory->address + off + (i * sizeof(type)), sizeof(tmp)); \ - rb_ary_push(retVal, fromNative(VAL(tmp, swap))); \ - } \ - return retVal; \ -} \ -static VALUE memory_read_array_of_##name(VALUE self, VALUE length); \ -static VALUE \ -memory_read_array_of_##name(VALUE self, VALUE length) \ -{ \ - return memory_get_array_of_##name(self, INT2FIX(0), length); \ -} - -#define NOSWAP(x) (x) -#define bswap16(x) (((x) >> 8) & 0xff) | (((x) << 8) & 0xff00); -static inline int16_t -SWAPS16(int16_t x) -{ - return bswap16(x); -} - -static inline uint16_t -SWAPU16(uint16_t x) -{ - return bswap16(x); -} - -#if !defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 3) -#define bswap32(x) \ - (((x << 24) & 0xff000000) | \ - ((x << 8) & 0x00ff0000) | \ - ((x >> 8) & 0x0000ff00) | \ - ((x >> 24) & 0x000000ff)) - -#define bswap64(x) \ - (((x << 56) & 0xff00000000000000ULL) | \ - ((x << 40) & 0x00ff000000000000ULL) | \ - ((x << 24) & 0x0000ff0000000000ULL) | \ - ((x << 8) & 0x000000ff00000000ULL) | \ - ((x >> 8) & 0x00000000ff000000ULL) | \ - ((x >> 24) & 0x0000000000ff0000ULL) | \ - ((x >> 40) & 0x000000000000ff00ULL) | \ - ((x >> 56) & 0x00000000000000ffULL)) - -static inline int32_t -SWAPS32(int32_t x) -{ - return bswap32(x); -} - -static inline uint32_t -SWAPU32(uint32_t x) -{ - return bswap32(x); -} - -static inline int64_t -SWAPS64(int64_t x) -{ - return bswap64(x); -} - -static inline uint64_t -SWAPU64(uint64_t x) -{ - return bswap64(x); -} - -#else -# define SWAPS32(x) ((int32_t) __builtin_bswap32(x)) -# define SWAPU32(x) ((uint32_t) __builtin_bswap32(x)) -# define SWAPS64(x) ((int64_t) __builtin_bswap64(x)) -# define SWAPU64(x) ((uint64_t) __builtin_bswap64(x)) -#endif - -#if LONG_MAX > INT_MAX -# define SWAPSLONG SWAPS64 -# define SWAPULONG SWAPU64 -#else -# define SWAPSLONG SWAPS32 -# define SWAPULONG SWAPU32 -#endif - -NUM_OP(int8, int8_t, NUM2INT, INT2NUM, NOSWAP); -NUM_OP(uint8, uint8_t, NUM2UINT, UINT2NUM, NOSWAP); -NUM_OP(int16, int16_t, NUM2INT, INT2NUM, SWAPS16); -NUM_OP(uint16, uint16_t, NUM2UINT, UINT2NUM, SWAPU16); -NUM_OP(int32, int32_t, NUM2INT, INT2NUM, SWAPS32); -NUM_OP(uint32, uint32_t, NUM2UINT, UINT2NUM, SWAPU32); -NUM_OP(int64, int64_t, NUM2LL, LL2NUM, SWAPS64); -NUM_OP(uint64, uint64_t, NUM2ULL, ULL2NUM, SWAPU64); -NUM_OP(long, long, NUM2LONG, LONG2NUM, SWAPSLONG); -NUM_OP(ulong, unsigned long, NUM2ULONG, ULONG2NUM, SWAPULONG); -NUM_OP(float32, float, NUM2DBL, rb_float_new, NOSWAP); -NUM_OP(float64, double, NUM2DBL, rb_float_new, NOSWAP); -NUM_OP(longdouble, long double, rbffi_num2longdouble, rbffi_longdouble_new, NOSWAP); - -static inline void* -get_pointer_value(VALUE value) -{ - const int type = TYPE(value); - if (type == T_DATA && rb_obj_is_kind_of(value, rbffi_PointerClass)) { - return memory_address(value); - } else if (type == T_NIL) { - return NULL; - } else if (type == T_FIXNUM) { - return (void *) (uintptr_t) FIX2ULONG(value); - } else if (type == T_BIGNUM) { - return (void *) (uintptr_t) NUM2ULL(value); - } else if (rb_respond_to(value, id_to_ptr)) { - return MEMORY_PTR(rb_funcall2(value, id_to_ptr, 0, NULL)); - } else { - rb_raise(rb_eArgError, "value is not a pointer"); - return NULL; - } -} - -NUM_OP(pointer, void *, get_pointer_value, rbffi_Pointer_NewInstance, NOSWAP); - -static inline uint8_t -rbffi_bool_value(VALUE value) -{ - return RTEST(value); -} - -static inline VALUE -rbffi_bool_new(uint8_t value) -{ - return (value & 1) != 0 ? Qtrue : Qfalse; -} - -NUM_OP(bool, unsigned char, rbffi_bool_value, rbffi_bool_new, NOSWAP); - - -/* - * call-seq: memory.clear - * Set the memory to all-zero. - * @return [self] - */ -static VALUE -memory_clear(VALUE self) -{ - AbstractMemory* ptr = MEMORY(self); - memset(ptr->address, 0, ptr->size); - return self; -} - -/* - * call-seq: memory.size - * Return memory size in bytes (alias: #total) - * @return [Numeric] - */ -static VALUE -memory_size(VALUE self) -{ - AbstractMemory* ptr; - - Data_Get_Struct(self, AbstractMemory, ptr); - - return LONG2NUM(ptr->size); -} - -/* - * call-seq: memory.get_string(offset, length=nil) - * Return string contained in memory. - * @param [Numeric] offset point in buffer to start from - * @param [Numeric] length string's length in bytes. If nil, a (memory size - offset) length string is returned). - * @return [String] - * @raise {IndexError} if +length+ is too great - * @raise {NullPointerError} if memory not initialized - */ -static VALUE -memory_get_string(int argc, VALUE* argv, VALUE self) -{ - VALUE length = Qnil, offset = Qnil; - AbstractMemory* ptr = MEMORY(self); - long off, len; - char* end; - int nargs = rb_scan_args(argc, argv, "11", &offset, &length); - - off = NUM2LONG(offset); - len = nargs > 1 && length != Qnil ? NUM2LONG(length) : (ptr->size - off); - checkRead(ptr); - checkBounds(ptr, off, len); - - end = memchr(ptr->address + off, 0, len); - return rb_tainted_str_new((char *) ptr->address + off, - (end != NULL ? end - ptr->address - off : len)); -} - -/* - * call-seq: memory.get_array_of_string(offset, count=nil) - * Return an array of strings contained in memory. - * @param [Numeric] offset point in memory to start from - * @param [Numeric] count number of strings to get. If nil, return all strings - * @return [Array] - * @raise {IndexError} if +offset+ is too great - * @raise {NullPointerError} if memory not initialized - */ -static VALUE -memory_get_array_of_string(int argc, VALUE* argv, VALUE self) -{ - VALUE offset = Qnil, countnum = Qnil, retVal = Qnil; - AbstractMemory* ptr; - long off; - int count; - - rb_scan_args(argc, argv, "11", &offset, &countnum); - off = NUM2LONG(offset); - count = (countnum == Qnil ? 0 : NUM2INT(countnum)); - retVal = rb_ary_new2(count); - - Data_Get_Struct(self, AbstractMemory, ptr); - checkRead(ptr); - - if (countnum != Qnil) { - int i; - - checkBounds(ptr, off, count * sizeof (char*)); - - for (i = 0; i < count; ++i) { - const char* strptr = *((const char**) (ptr->address + off) + i); - rb_ary_push(retVal, (strptr == NULL ? Qnil : rb_tainted_str_new2(strptr))); - } - - } else { - checkBounds(ptr, off, sizeof (char*)); - for ( ; off < ptr->size - (long) sizeof (void *); off += (long) sizeof (void *)) { - const char* strptr = *(const char**) (ptr->address + off); - if (strptr == NULL) { - break; - } - rb_ary_push(retVal, rb_tainted_str_new2(strptr)); - } - } - - return retVal; -} - -/* - * call-seq: memory.read_array_of_string(count=nil) - * Return an array of strings contained in memory. Same as: - * memory.get_array_of_string(0, count) - * @param [Numeric] count number of strings to get. If nil, return all strings - * @return [Array] - */ -static VALUE -memory_read_array_of_string(int argc, VALUE* argv, VALUE self) -{ - VALUE* rargv = ALLOCA_N(VALUE, argc + 1); - int i; - - rargv[0] = INT2FIX(0); - for (i = 0; i < argc; i++) { - rargv[i + 1] = argv[i]; - } - - return memory_get_array_of_string(argc + 1, rargv, self); -} - - -/* - * call-seq: memory.put_string(offset, str) - * @param [Numeric] offset - * @param [String] str - * @return [self] - * @raise {SecurityError} when writing unsafe string to memory - * @raise {IndexError} if +offset+ is too great - * @raise {NullPointerError} if memory not initialized - * Put a string in memory. - */ -static VALUE -memory_put_string(VALUE self, VALUE offset, VALUE str) -{ - AbstractMemory* ptr = MEMORY(self); - long off, len; - - Check_Type(str, T_STRING); - off = NUM2LONG(offset); - len = RSTRING_LEN(str); - - checkWrite(ptr); - checkBounds(ptr, off, len + 1); - - memcpy(ptr->address + off, RSTRING_PTR(str), len); - *((char *) ptr->address + off + len) = '\0'; - - return self; -} - -/* - * call-seq: memory.get_bytes(offset, length) - * Return string contained in memory. - * @param [Numeric] offset point in buffer to start from - * @param [Numeric] length string's length in bytes. - * @return [String] - * @raise {IndexError} if +length+ is too great - * @raise {NullPointerError} if memory not initialized - */ -static VALUE -memory_get_bytes(VALUE self, VALUE offset, VALUE length) -{ - AbstractMemory* ptr = MEMORY(self); - long off, len; - - off = NUM2LONG(offset); - len = NUM2LONG(length); - - checkRead(ptr); - checkBounds(ptr, off, len); - - return rb_tainted_str_new((char *) ptr->address + off, len); -} - -/* - * call-seq: memory.put_bytes(offset, str, index=0, length=nil) - * Put a string in memory. - * @param [Numeric] offset point in buffer to start from - * @param [String] str string to put to memory - * @param [Numeric] index - * @param [Numeric] length string's length in bytes. If nil, a (memory size - offset) length string is returned). - * @return [self] - * @raise {IndexError} if +length+ is too great - * @raise {NullPointerError} if memory not initialized - * @raise {RangeError} if +index+ is negative, or if index+length is greater than size of string - * @raise {SecurityError} when writing unsafe string to memory - */ -static VALUE -memory_put_bytes(int argc, VALUE* argv, VALUE self) -{ - AbstractMemory* ptr = MEMORY(self); - VALUE offset = Qnil, str = Qnil, rbIndex = Qnil, rbLength = Qnil; - long off, len, idx; - int nargs = rb_scan_args(argc, argv, "22", &offset, &str, &rbIndex, &rbLength); - - Check_Type(str, T_STRING); - - off = NUM2LONG(offset); - idx = nargs > 2 ? NUM2LONG(rbIndex) : 0; - if (idx < 0) { - rb_raise(rb_eRangeError, "index canot be less than zero"); - return Qnil; - } - len = nargs > 3 ? NUM2LONG(rbLength) : (RSTRING_LEN(str) - idx); - if ((idx + len) > RSTRING_LEN(str)) { - rb_raise(rb_eRangeError, "index+length is greater than size of string"); - return Qnil; - } - - checkWrite(ptr); - checkBounds(ptr, off, len); - - if (rb_safe_level() >= 1 && OBJ_TAINTED(str)) { - rb_raise(rb_eSecurityError, "Writing unsafe string to memory"); - return Qnil; - } - memcpy(ptr->address + off, RSTRING_PTR(str) + idx, len); - - return self; -} - -/* - * call-seq: memory.read_bytes(length) - * @param [Numeric] length of string to return - * @return [String] - * equivalent to : - * memory.get_bytes(0, length) - */ -static VALUE -memory_read_bytes(VALUE self, VALUE length) -{ - return memory_get_bytes(self, INT2FIX(0), length); -} - -/* - * call-seq: memory.write_bytes(str, index=0, length=nil) - * @param [String] str string to put to memory - * @param [Numeric] index - * @param [Numeric] length string's length in bytes. If nil, a (memory size - offset) length string is returned). - * @return [self] - * equivalent to : - * memory.put_bytes(0, str, index, length) - */ -static VALUE -memory_write_bytes(int argc, VALUE* argv, VALUE self) -{ - VALUE* wargv = ALLOCA_N(VALUE, argc + 1); - int i; - - wargv[0] = INT2FIX(0); - for (i = 0; i < argc; i++) { - wargv[i + 1] = argv[i]; - } - - return memory_put_bytes(argc + 1, wargv, self); -} - -/* - * call-seq: memory.type_size - * @return [Numeric] type size in bytes - * Get the memory's type size. - */ -static VALUE -memory_type_size(VALUE self) -{ - AbstractMemory* ptr; - - Data_Get_Struct(self, AbstractMemory, ptr); - - return INT2NUM(ptr->typeSize); -} - -/* - * Document-method: [] - * call-seq: memory[idx] - * @param [Numeric] idx index to access in memory - * @return - * Memory read accessor. - */ -static VALUE -memory_aref(VALUE self, VALUE idx) -{ - AbstractMemory* ptr; - VALUE rbOffset = Qnil; - - Data_Get_Struct(self, AbstractMemory, ptr); - - rbOffset = ULONG2NUM(NUM2ULONG(idx) * ptr->typeSize); - - return rb_funcall2(self, id_plus, 1, &rbOffset); -} - -static inline char* -memory_address(VALUE obj) -{ - return ((AbstractMemory *) DATA_PTR(obj))->address; -} - -static VALUE -memory_copy_from(VALUE self, VALUE rbsrc, VALUE rblen) -{ - AbstractMemory* dst; - - Data_Get_Struct(self, AbstractMemory, dst); - - memcpy(dst->address, rbffi_AbstractMemory_Cast(rbsrc, rbffi_AbstractMemoryClass)->address, NUM2INT(rblen)); - - return self; -} - -AbstractMemory* -rbffi_AbstractMemory_Cast(VALUE obj, VALUE klass) -{ - if (rb_obj_is_kind_of(obj, klass)) { - AbstractMemory* memory; - Data_Get_Struct(obj, AbstractMemory, memory); - return memory; - } - - rb_raise(rb_eArgError, "Invalid Memory object"); - return NULL; -} - -void -rbffi_AbstractMemory_Error(AbstractMemory *mem, int op) -{ - VALUE rbErrorClass = mem->address == NULL ? NullPointerErrorClass : rb_eRuntimeError; - if (op == MEM_RD) { - rb_raise(rbErrorClass, "invalid memory read at address=%p", mem->address); - } else if (op == MEM_WR) { - rb_raise(rbErrorClass, "invalid memory write at address=%p", mem->address); - } else { - rb_raise(rbErrorClass, "invalid memory access at address=%p", mem->address); - } -} - -static VALUE -memory_op_get_strptr(AbstractMemory* ptr, long offset) -{ - void* tmp = NULL; - - if (ptr != NULL && ptr->address != NULL) { - checkRead(ptr); - checkBounds(ptr, offset, sizeof(tmp)); - memcpy(&tmp, ptr->address + offset, sizeof(tmp)); - } - - return tmp != NULL ? rb_tainted_str_new2(tmp) : Qnil; -} - -static void -memory_op_put_strptr(AbstractMemory* ptr, long offset, VALUE value) -{ - rb_raise(rb_eArgError, "Cannot set :string fields"); -} - -static MemoryOp memory_op_strptr = { memory_op_get_strptr, memory_op_put_strptr }; - - -MemoryOps rbffi_AbstractMemoryOps = { - &memory_op_int8, /*.int8 */ - &memory_op_uint8, /* .uint8 */ - &memory_op_int16, /* .int16 */ - &memory_op_uint16, /* .uint16 */ - &memory_op_int32, /* .int32 */ - &memory_op_uint32, /* .uint32 */ - &memory_op_int64, /* .int64 */ - &memory_op_uint64, /* .uint64 */ - &memory_op_long, /* .slong */ - &memory_op_ulong, /* .uslong */ - &memory_op_float32, /* .float32 */ - &memory_op_float64, /* .float64 */ - &memory_op_longdouble, /* .longdouble */ - &memory_op_pointer, /* .pointer */ - &memory_op_strptr, /* .strptr */ - &memory_op_bool /* .boolOp */ -}; - -void -rbffi_AbstractMemory_Init(VALUE moduleFFI) -{ - /* - * Document-class: FFI::AbstractMemory - * - * {AbstractMemory} is the base class for many memory management classes such as {Buffer}. - * - * This class has a lot of methods to work with integers : - * * put_intsize(offset, value) - * * get_intsize(offset) - * * put_uintsize(offset, value) - * * get_uintsize(offset) - * * writeuintsize(value) - * * read_intsize - * * write_uintsize(value) - * * read_uintsize - * * put_array_of_intsize(offset, ary) - * * get_array_of_intsize(offset, length) - * * put_array_of_uintsize(offset, ary) - * * get_array_of_uintsize(offset, length) - * * write_array_of_intsize(ary) - * * read_array_of_intsize(length) - * * write_array_of_uintsize(ary) - * * read_array_of_uintsize(length) - * where _size_ is 8, 16, 32 or 64. Same methods exist for long type. - * - * Aliases exist : _char_ for _int8_, _short_ for _int16_, _int_ for _int32_ and long_long for _int64_. - * - * Others methods are listed below. - */ - VALUE classMemory = rb_define_class_under(moduleFFI, "AbstractMemory", rb_cObject); - rbffi_AbstractMemoryClass = classMemory; - /* - * Document-variable: FFI::AbstractMemory - */ - rb_global_variable(&rbffi_AbstractMemoryClass); - rb_define_alloc_func(classMemory, memory_allocate); - - NullPointerErrorClass = rb_define_class_under(moduleFFI, "NullPointerError", rb_eRuntimeError); - /* Document-variable: NullPointerError */ - rb_global_variable(&NullPointerErrorClass); - - -#undef INT -#define INT(type) \ - rb_define_method(classMemory, "put_" #type, memory_put_##type, 2); \ - rb_define_method(classMemory, "get_" #type, memory_get_##type, 1); \ - rb_define_method(classMemory, "put_u" #type, memory_put_u##type, 2); \ - rb_define_method(classMemory, "get_u" #type, memory_get_u##type, 1); \ - rb_define_method(classMemory, "write_" #type, memory_write_##type, 1); \ - rb_define_method(classMemory, "read_" #type, memory_read_##type, 0); \ - rb_define_method(classMemory, "write_u" #type, memory_write_u##type, 1); \ - rb_define_method(classMemory, "read_u" #type, memory_read_u##type, 0); \ - rb_define_method(classMemory, "put_array_of_" #type, memory_put_array_of_##type, 2); \ - rb_define_method(classMemory, "get_array_of_" #type, memory_get_array_of_##type, 2); \ - rb_define_method(classMemory, "put_array_of_u" #type, memory_put_array_of_u##type, 2); \ - rb_define_method(classMemory, "get_array_of_u" #type, memory_get_array_of_u##type, 2); \ - rb_define_method(classMemory, "write_array_of_" #type, memory_write_array_of_##type, 1); \ - rb_define_method(classMemory, "read_array_of_" #type, memory_read_array_of_##type, 1); \ - rb_define_method(classMemory, "write_array_of_u" #type, memory_write_array_of_u##type, 1); \ - rb_define_method(classMemory, "read_array_of_u" #type, memory_read_array_of_u##type, 1); - - INT(int8); - INT(int16); - INT(int32); - INT(int64); - INT(long); - -#define ALIAS(name, old) \ - rb_define_alias(classMemory, "put_" #name, "put_" #old); \ - rb_define_alias(classMemory, "get_" #name, "get_" #old); \ - rb_define_alias(classMemory, "put_u" #name, "put_u" #old); \ - rb_define_alias(classMemory, "get_u" #name, "get_u" #old); \ - rb_define_alias(classMemory, "write_" #name, "write_" #old); \ - rb_define_alias(classMemory, "read_" #name, "read_" #old); \ - rb_define_alias(classMemory, "write_u" #name, "write_u" #old); \ - rb_define_alias(classMemory, "read_u" #name, "read_u" #old); \ - rb_define_alias(classMemory, "put_array_of_" #name, "put_array_of_" #old); \ - rb_define_alias(classMemory, "get_array_of_" #name, "get_array_of_" #old); \ - rb_define_alias(classMemory, "put_array_of_u" #name, "put_array_of_u" #old); \ - rb_define_alias(classMemory, "get_array_of_u" #name, "get_array_of_u" #old); \ - rb_define_alias(classMemory, "write_array_of_" #name, "write_array_of_" #old); \ - rb_define_alias(classMemory, "read_array_of_" #name, "read_array_of_" #old); \ - rb_define_alias(classMemory, "write_array_of_u" #name, "write_array_of_u" #old); \ - rb_define_alias(classMemory, "read_array_of_u" #name, "read_array_of_u" #old); - - ALIAS(char, int8); - ALIAS(short, int16); - ALIAS(int, int32); - ALIAS(long_long, int64); - - /* - * Document-method: put_float32 - * call-seq: memory.put_float32offset, value) - * @param [Numeric] offset - * @param [Numeric] value - * @return [self] - * Put +value+ as a 32-bit float in memory at offset +offset+ (alias: #put_float). - */ - rb_define_method(classMemory, "put_float32", memory_put_float32, 2); - /* - * Document-method: get_float32 - * call-seq: memory.get_float32(offset) - * @param [Numeric] offset - * @return [Float] - * Get a 32-bit float from memory at offset +offset+ (alias: #get_float). - */ - rb_define_method(classMemory, "get_float32", memory_get_float32, 1); - rb_define_alias(classMemory, "put_float", "put_float32"); - rb_define_alias(classMemory, "get_float", "get_float32"); - /* - * Document-method: write_float - * call-seq: memory.write_float(value) - * @param [Numeric] value - * @return [self] - * Write +value+ as a 32-bit float in memory. - * - * Same as: - * memory.put_float(0, value) - */ - rb_define_method(classMemory, "write_float", memory_write_float32, 1); - /* - * Document-method: read_float - * call-seq: memory.read_float - * @return [Float] - * Read a 32-bit float from memory. - * - * Same as: - * memory.get_float(0) - */ - rb_define_method(classMemory, "read_float", memory_read_float32, 0); - /* - * Document-method: put_array_of_float32 - * call-seq: memory.put_array_of_float32(offset, ary) - * @param [Numeric] offset - * @param [Array] ary - * @return [self] - * Put values from +ary+ as 32-bit floats in memory from offset +offset+ (alias: #put_array_of_float). - */ - rb_define_method(classMemory, "put_array_of_float32", memory_put_array_of_float32, 2); - /* - * Document-method: get_array_of_float32 - * call-seq: memory.get_array_of_float32(offset, length) - * @param [Numeric] offset - * @param [Numeric] length number of Float to get - * @return [Array] - * Get 32-bit floats in memory from offset +offset+ (alias: #get_array_of_float). - */ - rb_define_method(classMemory, "get_array_of_float32", memory_get_array_of_float32, 2); - /* - * Document-method: write_array_of_float - * call-seq: memory.write_array_of_float(ary) - * @param [Array] ary - * @return [self] - * Write values from +ary+ as 32-bit floats in memory. - * - * Same as: - * memory.put_array_of_float(0, ary) - */ - rb_define_method(classMemory, "write_array_of_float", memory_write_array_of_float32, 1); - /* - * Document-method: read_array_of_float - * call-seq: memory.read_array_of_float(length) - * @param [Numeric] length number of Float to read - * @return [Array] - * Read 32-bit floats from memory. - * - * Same as: - * memory.get_array_of_float(0, ary) - */ - rb_define_method(classMemory, "read_array_of_float", memory_read_array_of_float32, 1); - rb_define_alias(classMemory, "put_array_of_float", "put_array_of_float32"); - rb_define_alias(classMemory, "get_array_of_float", "get_array_of_float32"); - /* - * Document-method: put_float64 - * call-seq: memory.put_float64(offset, value) - * @param [Numeric] offset - * @param [Numeric] value - * @return [self] - * Put +value+ as a 64-bit float (double) in memory at offset +offset+ (alias: #put_double). - */ - rb_define_method(classMemory, "put_float64", memory_put_float64, 2); - /* - * Document-method: get_float64 - * call-seq: memory.get_float64(offset) - * @param [Numeric] offset - * @return [Float] - * Get a 64-bit float (double) from memory at offset +offset+ (alias: #get_double). - */ - rb_define_method(classMemory, "get_float64", memory_get_float64, 1); - rb_define_alias(classMemory, "put_double", "put_float64"); - rb_define_alias(classMemory, "get_double", "get_float64"); - /* - * Document-method: write_double - * call-seq: memory.write_double(value) - * @param [Numeric] value - * @return [self] - * Write +value+ as a 64-bit float (double) in memory. - * - * Same as: - * memory.put_double(0, value) - */ - rb_define_method(classMemory, "write_double", memory_write_float64, 1); - /* - * Document-method: read_double - * call-seq: memory.read_double - * @return [Float] - * Read a 64-bit float (double) from memory. - * - * Same as: - * memory.get_double(0) - */ - rb_define_method(classMemory, "read_double", memory_read_float64, 0); - /* - * Document-method: put_array_of_float64 - * call-seq: memory.put_array_of_float64(offset, ary) - * @param [Numeric] offset - * @param [Array] ary - * @return [self] - * Put values from +ary+ as 64-bit floats (doubles) in memory from offset +offset+ (alias: #put_array_of_double). - */ - rb_define_method(classMemory, "put_array_of_float64", memory_put_array_of_float64, 2); - /* - * Document-method: get_array_of_float64 - * call-seq: memory.get_array_of_float64(offset, length) - * @param [Numeric] offset - * @param [Numeric] length number of Float to get - * @return [Array] - * Get 64-bit floats (doubles) in memory from offset +offset+ (alias: #get_array_of_double). - */ - rb_define_method(classMemory, "get_array_of_float64", memory_get_array_of_float64, 2); - /* - * Document-method: write_array_of_double - * call-seq: memory.write_array_of_double(ary) - * @param [Array] ary - * @return [self] - * Write values from +ary+ as 64-bit floats (doubles) in memory. - * - * Same as: - * memory.put_array_of_double(0, ary) - */ - rb_define_method(classMemory, "write_array_of_double", memory_write_array_of_float64, 1); - /* - * Document-method: read_array_of_double - * call-seq: memory.read_array_of_double(length) - * @param [Numeric] length number of Float to read - * @return [Array] - * Read 64-bit floats (doubles) from memory. - * - * Same as: - * memory.get_array_of_double(0, ary) - */ - rb_define_method(classMemory, "read_array_of_double", memory_read_array_of_float64, 1); - rb_define_alias(classMemory, "put_array_of_double", "put_array_of_float64"); - rb_define_alias(classMemory, "get_array_of_double", "get_array_of_float64"); - /* - * Document-method: put_pointer - * call-seq: memory.put_pointer(offset, value) - * @param [Numeric] offset - * @param [nil,Pointer, Integer, #to_ptr] value - * @return [self] - * Put +value+ in memory from +offset+.. - */ - rb_define_method(classMemory, "put_pointer", memory_put_pointer, 2); - /* - * Document-method: get_pointer - * call-seq: memory.get_pointer(offset) - * @param [Numeric] offset - * @return [Pointer] - * Get a {Pointer} to the memory from +offset+. - */ - rb_define_method(classMemory, "get_pointer", memory_get_pointer, 1); - /* - * Document-method: write_pointer - * call-seq: memory.write_pointer(value) - * @param [nil,Pointer, Integer, #to_ptr] value - * @return [self] - * Write +value+ in memory. - * - * Equivalent to: - * memory.put_pointer(0, value) - */ - rb_define_method(classMemory, "write_pointer", memory_write_pointer, 1); - /* - * Document-method: read_pointer - * call-seq: memory.read_pointer - * @return [Pointer] - * Get a {Pointer} to the memory from base address. - * - * Equivalent to: - * memory.get_pointer(0) - */ - rb_define_method(classMemory, "read_pointer", memory_read_pointer, 0); - /* - * Document-method: put_array_of_pointer - * call-seq: memory.put_array_of_pointer(offset, ary) - * @param [Numeric] offset - * @param [Array<#to_ptr>] ary - * @return [self] - * Put an array of {Pointer} into memory from +offset+. - */ - rb_define_method(classMemory, "put_array_of_pointer", memory_put_array_of_pointer, 2); - /* - * Document-method: get_array_of_pointer - * call-seq: memory.get_array_of_pointer(offset, length) - * @param [Numeric] offset - * @param [Numeric] length - * @return [Array] - * Get an array of {Pointer} of length +length+ from +offset+. - */ - rb_define_method(classMemory, "get_array_of_pointer", memory_get_array_of_pointer, 2); - /* - * Document-method: write_array_of_pointer - * call-seq: memory.write_array_of_pointer(ary) - * @param [Array<#to_ptr>] ary - * @return [self] - * Write an array of {Pointer} into memory from +offset+. - * - * Same as : - * memory.put_array_of_pointer(0, ary) - */ - rb_define_method(classMemory, "write_array_of_pointer", memory_write_array_of_pointer, 1); - /* - * Document-method: read_array_of_pointer - * call-seq: memory.read_array_of_pointer(length) - * @param [Numeric] length - * @return [Array] - * Read an array of {Pointer} of length +length+. - * - * Same as: - * memory.get_array_of_pointer(0, length) - */ - rb_define_method(classMemory, "read_array_of_pointer", memory_read_array_of_pointer, 1); - - rb_define_method(classMemory, "get_string", memory_get_string, -1); - rb_define_method(classMemory, "put_string", memory_put_string, 2); - rb_define_method(classMemory, "get_bytes", memory_get_bytes, 2); - rb_define_method(classMemory, "put_bytes", memory_put_bytes, -1); - rb_define_method(classMemory, "read_bytes", memory_read_bytes, 1); - rb_define_method(classMemory, "write_bytes", memory_write_bytes, -1); - rb_define_method(classMemory, "get_array_of_string", memory_get_array_of_string, -1); - - rb_define_method(classMemory, "clear", memory_clear, 0); - rb_define_method(classMemory, "total", memory_size, 0); - rb_define_alias(classMemory, "size", "total"); - rb_define_method(classMemory, "type_size", memory_type_size, 0); - rb_define_method(classMemory, "[]", memory_aref, 1); - rb_define_method(classMemory, "__copy_from__", memory_copy_from, 2); - - id_to_ptr = rb_intern("to_ptr"); - id_call = rb_intern("call"); - id_plus = rb_intern("+"); -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/AbstractMemory.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/AbstractMemory.h deleted file mode 100644 index 1119288..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/AbstractMemory.h +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Copyright (c) 2008, 2009, Wayne Meissner - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef RBFFI_ABSTRACTMEMORY_H -#define RBFFI_ABSTRACTMEMORY_H - -#ifndef _MSC_VER -#include -#endif -#include -#ifndef _MSC_VER -#include -#endif - -#include "compat.h" -#include "Types.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -#define MEM_RD 0x01 -#define MEM_WR 0x02 -#define MEM_CODE 0x04 -#define MEM_SWAP 0x08 -#define MEM_EMBED 0x10 - -typedef struct AbstractMemory_ AbstractMemory; - -typedef struct { - VALUE (*get)(AbstractMemory* ptr, long offset); - void (*put)(AbstractMemory* ptr, long offset, VALUE value); -} MemoryOp; - -typedef struct { - MemoryOp* int8; - MemoryOp* uint8; - MemoryOp* int16; - MemoryOp* uint16; - MemoryOp* int32; - MemoryOp* uint32; - MemoryOp* int64; - MemoryOp* uint64; - MemoryOp* slong; - MemoryOp* uslong; - MemoryOp* float32; - MemoryOp* float64; - MemoryOp* longdouble; - MemoryOp* pointer; - MemoryOp* strptr; - MemoryOp* boolOp; -} MemoryOps; - -struct AbstractMemory_ { - char* address; /* Use char* instead of void* to ensure adding to it works correctly */ - long size; - int flags; - int typeSize; -}; - - -extern VALUE rbffi_AbstractMemoryClass; -extern MemoryOps rbffi_AbstractMemoryOps; - -extern void rbffi_AbstractMemory_Init(VALUE ffiModule); - -extern AbstractMemory* rbffi_AbstractMemory_Cast(VALUE obj, VALUE klass); - -extern void rbffi_AbstractMemory_Error(AbstractMemory *, int op); - -static inline void -checkBounds(AbstractMemory* mem, long off, long len) -{ - if (unlikely((off | len | (off + len) | (mem->size - (off + len))) < 0)) { - rb_raise(rb_eIndexError, "Memory access offset=%ld size=%ld is out of bounds", - off, len); - } -} - -static inline void -checkRead(AbstractMemory* mem) -{ - if (unlikely((mem->flags & MEM_RD) == 0)) { - rbffi_AbstractMemory_Error(mem, MEM_RD); - } -} - -static inline void -checkWrite(AbstractMemory* mem) -{ - if (unlikely((mem->flags & MEM_WR) == 0)) { - rbffi_AbstractMemory_Error(mem, MEM_WR); - } -} - -static inline MemoryOp* -get_memory_op(Type* type) -{ - switch (type->nativeType) { - case NATIVE_INT8: - return rbffi_AbstractMemoryOps.int8; - case NATIVE_UINT8: - return rbffi_AbstractMemoryOps.uint8; - case NATIVE_INT16: - return rbffi_AbstractMemoryOps.int16; - case NATIVE_UINT16: - return rbffi_AbstractMemoryOps.uint16; - case NATIVE_INT32: - return rbffi_AbstractMemoryOps.int32; - case NATIVE_UINT32: - return rbffi_AbstractMemoryOps.uint32; - case NATIVE_INT64: - return rbffi_AbstractMemoryOps.int64; - case NATIVE_UINT64: - return rbffi_AbstractMemoryOps.uint64; - case NATIVE_LONG: - return rbffi_AbstractMemoryOps.slong; - case NATIVE_ULONG: - return rbffi_AbstractMemoryOps.uslong; - case NATIVE_FLOAT32: - return rbffi_AbstractMemoryOps.float32; - case NATIVE_FLOAT64: - return rbffi_AbstractMemoryOps.float64; - case NATIVE_LONGDOUBLE: - return rbffi_AbstractMemoryOps.longdouble; - case NATIVE_POINTER: - return rbffi_AbstractMemoryOps.pointer; - case NATIVE_STRING: - return rbffi_AbstractMemoryOps.strptr; - case NATIVE_BOOL: - return rbffi_AbstractMemoryOps.boolOp; - default: - return NULL; - } -} - -#define MEMORY(obj) rbffi_AbstractMemory_Cast((obj), rbffi_AbstractMemoryClass) -#define MEMORY_PTR(obj) MEMORY((obj))->address -#define MEMORY_LEN(obj) MEMORY((obj))->size - - - -#ifdef __cplusplus -} -#endif - -#endif /* RBFFI_ABSTRACTMEMORY_H */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/AbstractMemory.o b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/AbstractMemory.o deleted file mode 100644 index 28fb452baf6c822138567a78b70dc362805b467c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216824 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 qS@+6prB@4G3+@uUp04hD6I}z~P4o BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include -#include "ArrayType.h" - -static VALUE array_type_s_allocate(VALUE klass); -static VALUE array_type_initialize(VALUE self, VALUE rbComponentType, VALUE rbLength); -static void array_type_mark(ArrayType *); -static void array_type_free(ArrayType *); - -VALUE rbffi_ArrayTypeClass = Qnil; - -static VALUE -array_type_s_allocate(VALUE klass) -{ - ArrayType* array; - VALUE obj; - - obj = Data_Make_Struct(klass, ArrayType, array_type_mark, array_type_free, array); - - array->base.nativeType = NATIVE_ARRAY; - array->base.ffiType = xcalloc(1, sizeof(*array->base.ffiType)); - array->base.ffiType->type = FFI_TYPE_STRUCT; - array->base.ffiType->size = 0; - array->base.ffiType->alignment = 0; - array->rbComponentType = Qnil; - - return obj; -} - -static void -array_type_mark(ArrayType *array) -{ - rb_gc_mark(array->rbComponentType); -} - -static void -array_type_free(ArrayType *array) -{ - xfree(array->base.ffiType); - xfree(array->ffiTypes); - xfree(array); -} - - -/* - * call-seq: initialize(component_type, length) - * @param [Type] component_type - * @param [Numeric] length - * @return [self] - * A new instance of ArrayType. - */ -static VALUE -array_type_initialize(VALUE self, VALUE rbComponentType, VALUE rbLength) -{ - ArrayType* array; - int i; - - Data_Get_Struct(self, ArrayType, array); - - array->length = NUM2UINT(rbLength); - array->rbComponentType = rbComponentType; - Data_Get_Struct(rbComponentType, Type, array->componentType); - - array->ffiTypes = xcalloc(array->length + 1, sizeof(*array->ffiTypes)); - array->base.ffiType->elements = array->ffiTypes; - array->base.ffiType->size = array->componentType->ffiType->size * array->length; - array->base.ffiType->alignment = array->componentType->ffiType->alignment; - - for (i = 0; i < array->length; ++i) { - array->ffiTypes[i] = array->componentType->ffiType; - } - - return self; -} - -/* - * call-seq: length - * @return [Numeric] - * Get array's length - */ -static VALUE -array_type_length(VALUE self) -{ - ArrayType* array; - - Data_Get_Struct(self, ArrayType, array); - - return UINT2NUM(array->length); -} - -/* - * call-seq: element_type - * @return [Type] - * Get element type. - */ -static VALUE -array_type_element_type(VALUE self) -{ - ArrayType* array; - - Data_Get_Struct(self, ArrayType, array); - - return array->rbComponentType; -} - -void -rbffi_ArrayType_Init(VALUE moduleFFI) -{ - VALUE ffi_Type; - - ffi_Type = rbffi_TypeClass; - - /* - * Document-class: FFI::ArrayType < FFI::Type - * - * This is a typed array. The type is a {NativeType native type}. - */ - rbffi_ArrayTypeClass = rb_define_class_under(moduleFFI, "ArrayType", ffi_Type); - /* - * Document-variable: FFI::ArrayType - */ - rb_global_variable(&rbffi_ArrayTypeClass); - /* - * Document-constant: FFI::Type::Array - */ - rb_define_const(ffi_Type, "Array", rbffi_ArrayTypeClass); - - rb_define_alloc_func(rbffi_ArrayTypeClass, array_type_s_allocate); - rb_define_method(rbffi_ArrayTypeClass, "initialize", array_type_initialize, 2); - rb_define_method(rbffi_ArrayTypeClass, "length", array_type_length, 0); - rb_define_method(rbffi_ArrayTypeClass, "elem_type", array_type_element_type, 0); -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ArrayType.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ArrayType.h deleted file mode 100644 index 356ffb1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ArrayType.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2009, Wayne Meissner - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef RBFFI_ARRAYTYPE_H -#define RBFFI_ARRAYTYPE_H - -#include -#include -#include "Type.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -typedef struct ArrayType_ { - Type base; - int length; - ffi_type** ffiTypes; - Type* componentType; - VALUE rbComponentType; -} ArrayType; - -extern void rbffi_ArrayType_Init(VALUE moduleFFI); -extern VALUE rbffi_ArrayTypeClass; - - -#ifdef __cplusplus -} -#endif - -#endif /* RBFFI_ARRAYTYPE_H */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ArrayType.o b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ArrayType.o deleted file mode 100644 index e4a6197b6592c9c91da82241742289a97ba0c307..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9256 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 - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _MSC_VER -# include -# include -#else -# include "win32/stdbool.h" -# include "win32/stdint.h" -#endif -#include -#include -#include "rbffi.h" -#include "rbffi_endian.h" -#include "AbstractMemory.h" - -#define BUFFER_EMBED_MAXLEN (8) -typedef struct Buffer { - AbstractMemory memory; - - union { - VALUE rbParent; /* link to parent buffer */ - char* storage; /* start of malloc area */ - long embed[BUFFER_EMBED_MAXLEN / sizeof(long)]; /* storage for tiny allocations */ - } data; -} Buffer; - -static VALUE buffer_allocate(VALUE klass); -static VALUE buffer_initialize(int argc, VALUE* argv, VALUE self); -static void buffer_release(Buffer* ptr); -static void buffer_mark(Buffer* ptr); -static VALUE buffer_free(VALUE self); - -static VALUE BufferClass = Qnil; - -static VALUE -buffer_allocate(VALUE klass) -{ - Buffer* buffer; - VALUE obj; - - obj = Data_Make_Struct(klass, Buffer, NULL, buffer_release, buffer); - buffer->data.rbParent = Qnil; - buffer->memory.flags = MEM_RD | MEM_WR; - - return obj; -} - -static void -buffer_release(Buffer* ptr) -{ - if ((ptr->memory.flags & MEM_EMBED) == 0 && ptr->data.storage != NULL) { - xfree(ptr->data.storage); - ptr->data.storage = NULL; - } - - xfree(ptr); -} - -/* - * call-seq: initialize(size, count=1, clear=false) - * @param [Integer, Symbol, #size] Type or size in bytes of a buffer cell - * @param [Fixnum] count number of cell in the Buffer - * @param [Boolean] clear if true, set the buffer to all-zero - * @return [self] - * @raise {NoMemoryError} if failed to allocate memory for Buffer - * A new instance of Buffer. - */ -static VALUE -buffer_initialize(int argc, VALUE* argv, VALUE self) -{ - VALUE rbSize = Qnil, rbCount = Qnil, rbClear = Qnil; - Buffer* p; - int nargs; - - Data_Get_Struct(self, Buffer, p); - - nargs = rb_scan_args(argc, argv, "12", &rbSize, &rbCount, &rbClear); - p->memory.typeSize = rbffi_type_size(rbSize); - p->memory.size = p->memory.typeSize * (nargs > 1 ? NUM2LONG(rbCount) : 1); - - if (p->memory.size > BUFFER_EMBED_MAXLEN) { - p->data.storage = xmalloc(p->memory.size + 7); - if (p->data.storage == NULL) { - rb_raise(rb_eNoMemError, "Failed to allocate memory size=%lu bytes", p->memory.size); - return Qnil; - } - - /* ensure the memory is aligned on at least a 8 byte boundary */ - p->memory.address = (void *) (((uintptr_t) p->data.storage + 0x7) & (uintptr_t) ~0x7UL); - - if (p->memory.size > 0 && (nargs < 3 || RTEST(rbClear))) { - memset(p->memory.address, 0, p->memory.size); - } - - } else { - p->memory.flags |= MEM_EMBED; - p->memory.address = (void *) &p->data.embed[0]; - } - - if (rb_block_given_p()) { - return rb_ensure(rb_yield, self, buffer_free, self); - } - - return self; -} - -/* - * call-seq: initialize_copy(other) - * @return [self] - * DO NOT CALL THIS METHOD. - */ -static VALUE -buffer_initialize_copy(VALUE self, VALUE other) -{ - AbstractMemory* src; - Buffer* dst; - - Data_Get_Struct(self, Buffer, dst); - src = rbffi_AbstractMemory_Cast(other, BufferClass); - if ((dst->memory.flags & MEM_EMBED) == 0 && dst->data.storage != NULL) { - xfree(dst->data.storage); - } - dst->data.storage = xmalloc(src->size + 7); - if (dst->data.storage == NULL) { - rb_raise(rb_eNoMemError, "failed to allocate memory size=%lu bytes", src->size); - return Qnil; - } - - dst->memory.address = (void *) (((uintptr_t) dst->data.storage + 0x7) & (uintptr_t) ~0x7UL); - dst->memory.size = src->size; - dst->memory.typeSize = src->typeSize; - - /* finally, copy the actual buffer contents */ - memcpy(dst->memory.address, src->address, src->size); - - return self; -} - -static VALUE -buffer_alloc_inout(int argc, VALUE* argv, VALUE klass) -{ - return buffer_initialize(argc, argv, buffer_allocate(klass)); -} - -static VALUE -slice(VALUE self, long offset, long len) -{ - Buffer* ptr; - Buffer* result; - VALUE obj = Qnil; - - Data_Get_Struct(self, Buffer, ptr); - checkBounds(&ptr->memory, offset, len); - - obj = Data_Make_Struct(BufferClass, Buffer, buffer_mark, -1, result); - result->memory.address = ptr->memory.address + offset; - result->memory.size = len; - result->memory.flags = ptr->memory.flags; - result->memory.typeSize = ptr->memory.typeSize; - result->data.rbParent = self; - - return obj; -} - -/* - * call-seq: + offset - * @param [Numeric] offset - * @return [Buffer] a new instance of Buffer pointing from offset until end of previous buffer. - * Add a Buffer with an offset - */ -static VALUE -buffer_plus(VALUE self, VALUE rbOffset) -{ - Buffer* ptr; - long offset = NUM2LONG(rbOffset); - - Data_Get_Struct(self, Buffer, ptr); - - return slice(self, offset, ptr->memory.size - offset); -} - -/* - * call-seq: slice(offset, length) - * @param [Numeric] offset - * @param [Numeric] length - * @return [Buffer] a new instance of Buffer - * Slice an existing Buffer. - */ -static VALUE -buffer_slice(VALUE self, VALUE rbOffset, VALUE rbLength) -{ - return slice(self, NUM2LONG(rbOffset), NUM2LONG(rbLength)); -} - -/* - * call-seq: inspect - * @return [String] - * Inspect a Buffer. - */ -static VALUE -buffer_inspect(VALUE self) -{ - char tmp[100]; - Buffer* ptr; - - Data_Get_Struct(self, Buffer, ptr); - - snprintf(tmp, sizeof(tmp), "#", ptr, ptr->memory.address, ptr->memory.size); - - return rb_str_new2(tmp); -} - - -#if BYTE_ORDER == LITTLE_ENDIAN -# define SWAPPED_ORDER BIG_ENDIAN -#else -# define SWAPPED_ORDER LITTLE_ENDIAN -#endif - -/* - * Set or get endianness of Buffer. - * @overload order - * @return [:big, :little] - * Get endianness of Buffer. - * @overload order(order) - * @param [:big, :little, :network] order - * @return [self] - * Set endinaness of Buffer (+:network+ is an alias for +:big+). - */ -static VALUE -buffer_order(int argc, VALUE* argv, VALUE self) -{ - Buffer* ptr; - - Data_Get_Struct(self, Buffer, ptr); - if (argc == 0) { - int order = (ptr->memory.flags & MEM_SWAP) == 0 ? BYTE_ORDER : SWAPPED_ORDER; - return order == BIG_ENDIAN ? ID2SYM(rb_intern("big")) : ID2SYM(rb_intern("little")); - } else { - VALUE rbOrder = Qnil; - int order = BYTE_ORDER; - - if (rb_scan_args(argc, argv, "1", &rbOrder) < 1) { - rb_raise(rb_eArgError, "need byte order"); - } - if (SYMBOL_P(rbOrder)) { - ID id = SYM2ID(rbOrder); - if (id == rb_intern("little")) { - order = LITTLE_ENDIAN; - - } else if (id == rb_intern("big") || id == rb_intern("network")) { - order = BIG_ENDIAN; - } - } - if (order != BYTE_ORDER) { - Buffer* p2; - VALUE retval = slice(self, 0, ptr->memory.size); - - Data_Get_Struct(retval, Buffer, p2); - p2->memory.flags |= MEM_SWAP; - return retval; - } - - return self; - } -} - -/* Only used to free the buffer if the yield in the initializer throws an exception */ -static VALUE -buffer_free(VALUE self) -{ - Buffer* ptr; - - Data_Get_Struct(self, Buffer, ptr); - if ((ptr->memory.flags & MEM_EMBED) == 0 && ptr->data.storage != NULL) { - xfree(ptr->data.storage); - ptr->data.storage = NULL; - } - - return self; -} - -static void -buffer_mark(Buffer* ptr) -{ - rb_gc_mark(ptr->data.rbParent); -} - -void -rbffi_Buffer_Init(VALUE moduleFFI) -{ - VALUE ffi_AbstractMemory = rbffi_AbstractMemoryClass; - - /* - * Document-class: FFI::Buffer < FFI::AbstractMemory - * - * A Buffer is a function argument type. It should be use with functions playing with C arrays. - */ - BufferClass = rb_define_class_under(moduleFFI, "Buffer", ffi_AbstractMemory); - - /* - * Document-variable: FFI::Buffer - */ - rb_global_variable(&BufferClass); - rb_define_alloc_func(BufferClass, buffer_allocate); - - /* - * Document-method: alloc_inout - * call-seq: alloc_inout(*args) - * Create a new Buffer for in and out arguments (alias : new_inout). - */ - rb_define_singleton_method(BufferClass, "alloc_inout", buffer_alloc_inout, -1); - /* - * Document-method: alloc_out - * call-seq: alloc_out(*args) - * Create a new Buffer for out arguments (alias : new_out). - */ - rb_define_singleton_method(BufferClass, "alloc_out", buffer_alloc_inout, -1); - /* - * Document-method: alloc_in - * call-seq: alloc_in(*args) - * Create a new Buffer for in arguments (alias : new_in). - */ - rb_define_singleton_method(BufferClass, "alloc_in", buffer_alloc_inout, -1); - rb_define_alias(rb_singleton_class(BufferClass), "new_in", "alloc_in"); - rb_define_alias(rb_singleton_class(BufferClass), "new_out", "alloc_out"); - rb_define_alias(rb_singleton_class(BufferClass), "new_inout", "alloc_inout"); - - rb_define_method(BufferClass, "initialize", buffer_initialize, -1); - rb_define_method(BufferClass, "initialize_copy", buffer_initialize_copy, 1); - rb_define_method(BufferClass, "order", buffer_order, -1); - rb_define_method(BufferClass, "inspect", buffer_inspect, 0); - rb_define_alias(BufferClass, "length", "total"); - rb_define_method(BufferClass, "+", buffer_plus, 1); - rb_define_method(BufferClass, "slice", buffer_slice, 2); -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Buffer.o b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Buffer.o deleted file mode 100644 index faf71ae19b5f04c3b0122bd83f80e7ded7500ba2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19956 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 - * Copyright (c) 2009, Mike Dalessio - * Copyright (c) 2009, Aman Gupta. - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _MSC_VER -#include -#endif -#include -#include -#ifndef _MSC_VER -# include -# include -#else -# include "win32/stdbool.h" -# include "win32/stdint.h" -#endif -#include -#include -#if defined(HAVE_NATIVETHREAD) && (defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)) && !defined(_WIN32) -# include -# include -#endif -#include -#include "extconf.h" -#include "rbffi.h" -#include "compat.h" -#include "AbstractMemory.h" -#include "Pointer.h" -#include "Struct.h" -#include "Function.h" -#include "Type.h" -#include "LastError.h" -#include "Call.h" -#include "MappedType.h" -#include "Thread.h" -#include "LongDouble.h" - -#ifdef USE_RAW -# ifndef __i386__ -# error "RAW argument packing only supported on i386" -# endif - -#define INT8_ADJ (4) -#define INT16_ADJ (4) -#define INT32_ADJ (4) -#define INT64_ADJ (8) -#define LONG_ADJ (sizeof(long)) -#define FLOAT32_ADJ (4) -#define FLOAT64_ADJ (8) -#define ADDRESS_ADJ (sizeof(void *)) -#define LONGDOUBLE_ADJ (ffi_type_longdouble.alignment) - -#endif /* USE_RAW */ - -#ifdef USE_RAW -# define ADJ(p, a) ((p) = (FFIStorage*) (((char *) p) + a##_ADJ)) -#else -# define ADJ(p, a) (++(p)) -#endif - -static void* callback_param(VALUE proc, VALUE cbinfo); -static inline void* getPointer(VALUE value, int type); - -static ID id_to_ptr, id_map_symbol, id_to_native; - -void -rbffi_SetupCallParams(int argc, VALUE* argv, int paramCount, Type** paramTypes, - FFIStorage* paramStorage, void** ffiValues, - VALUE* callbackParameters, int callbackCount, VALUE enums) -{ - VALUE callbackProc = Qnil; - FFIStorage* param = ¶mStorage[0]; - int i, argidx, cbidx, argCount; - - if (unlikely(paramCount != -1 && paramCount != argc)) { - if (argc == (paramCount - 1) && callbackCount == 1 && rb_block_given_p()) { - callbackProc = rb_block_proc(); - } else { - rb_raise(rb_eArgError, "wrong number of arguments (%d for %d)", argc, paramCount); - } - } - - argCount = paramCount != -1 ? paramCount : argc; - - for (i = 0, argidx = 0, cbidx = 0; i < argCount; ++i) { - Type* paramType = paramTypes[i]; - int type; - - - if (unlikely(paramType->nativeType == NATIVE_MAPPED)) { - VALUE values[] = { argv[argidx], Qnil }; - argv[argidx] = rb_funcall2(((MappedType *) paramType)->rbConverter, id_to_native, 2, values); - paramType = ((MappedType *) paramType)->type; - } - - type = argidx < argc ? TYPE(argv[argidx]) : T_NONE; - ffiValues[i] = param; - - switch (paramType->nativeType) { - - case NATIVE_INT8: - if (unlikely(type == T_SYMBOL && enums != Qnil)) { - VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); - param->s8 = NUM2INT(value); - } else { - param->s8 = NUM2INT(argv[argidx]); - } - - ++argidx; - ADJ(param, INT8); - break; - - case NATIVE_INT16: - if (unlikely(type == T_SYMBOL && enums != Qnil)) { - VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); - param->s16 = NUM2INT(value); - - } else { - param->s16 = NUM2INT(argv[argidx]); - } - - ++argidx; - ADJ(param, INT16); - break; - - case NATIVE_INT32: - if (unlikely(type == T_SYMBOL && enums != Qnil)) { - VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); - param->s32 = NUM2INT(value); - - } else { - param->s32 = NUM2INT(argv[argidx]); - } - - ++argidx; - ADJ(param, INT32); - break; - - case NATIVE_BOOL: - if (type != T_TRUE && type != T_FALSE) { - rb_raise(rb_eTypeError, "wrong argument type (expected a boolean parameter)"); - } - param->s8 = argv[argidx++] == Qtrue; - ADJ(param, INT8); - break; - - case NATIVE_UINT8: - if (unlikely(type == T_SYMBOL && enums != Qnil)) { - VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); - param->u8 = NUM2UINT(value); - } else { - param->u8 = NUM2UINT(argv[argidx]); - } - - ADJ(param, INT8); - ++argidx; - break; - - case NATIVE_UINT16: - if (unlikely(type == T_SYMBOL && enums != Qnil)) { - VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); - param->u16 = NUM2UINT(value); - } else { - param->u16 = NUM2UINT(argv[argidx]); - } - - ADJ(param, INT16); - ++argidx; - break; - - case NATIVE_UINT32: - if (unlikely(type == T_SYMBOL && enums != Qnil)) { - VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); - param->u32 = NUM2UINT(value); - } else { - param->u32 = NUM2UINT(argv[argidx]); - } - - ADJ(param, INT32); - ++argidx; - break; - - case NATIVE_INT64: - if (unlikely(type == T_SYMBOL && enums != Qnil)) { - VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); - param->i64 = NUM2LL(value); - } else { - param->i64 = NUM2LL(argv[argidx]); - } - - ADJ(param, INT64); - ++argidx; - break; - - case NATIVE_UINT64: - if (unlikely(type == T_SYMBOL && enums != Qnil)) { - VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); - param->u64 = NUM2ULL(value); - } else { - param->u64 = NUM2ULL(argv[argidx]); - } - - ADJ(param, INT64); - ++argidx; - break; - - case NATIVE_LONG: - if (unlikely(type == T_SYMBOL && enums != Qnil)) { - VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); - *(ffi_sarg *) param = NUM2LONG(value); - } else { - *(ffi_sarg *) param = NUM2LONG(argv[argidx]); - } - - ADJ(param, LONG); - ++argidx; - break; - - case NATIVE_ULONG: - if (unlikely(type == T_SYMBOL && enums != Qnil)) { - VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); - *(ffi_arg *) param = NUM2ULONG(value); - } else { - *(ffi_arg *) param = NUM2ULONG(argv[argidx]); - } - - ADJ(param, LONG); - ++argidx; - break; - - case NATIVE_FLOAT32: - if (unlikely(type == T_SYMBOL && enums != Qnil)) { - VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); - param->f32 = (float) NUM2DBL(value); - } else { - param->f32 = (float) NUM2DBL(argv[argidx]); - } - - ADJ(param, FLOAT32); - ++argidx; - break; - - case NATIVE_FLOAT64: - if (unlikely(type == T_SYMBOL && enums != Qnil)) { - VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); - param->f64 = NUM2DBL(value); - } else { - param->f64 = NUM2DBL(argv[argidx]); - } - - ADJ(param, FLOAT64); - ++argidx; - break; - - case NATIVE_LONGDOUBLE: - if (unlikely(type == T_SYMBOL && enums != Qnil)) { - VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); - param->ld = rbffi_num2longdouble(value); - } else { - param->ld = rbffi_num2longdouble(argv[argidx]); - } - - ADJ(param, LONGDOUBLE); - ++argidx; - break; - - - case NATIVE_STRING: - if (type == T_NIL) { - param->ptr = NULL; - - } else { - if (rb_safe_level() >= 1 && OBJ_TAINTED(argv[argidx])) { - rb_raise(rb_eSecurityError, "Unsafe string parameter"); - } - - param->ptr = StringValueCStr(argv[argidx]); - } - - ADJ(param, ADDRESS); - ++argidx; - break; - - case NATIVE_POINTER: - case NATIVE_BUFFER_IN: - case NATIVE_BUFFER_OUT: - case NATIVE_BUFFER_INOUT: - param->ptr = getPointer(argv[argidx++], type); - ADJ(param, ADDRESS); - break; - - - case NATIVE_FUNCTION: - case NATIVE_CALLBACK: - if (callbackProc != Qnil) { - param->ptr = callback_param(callbackProc, callbackParameters[cbidx++]); - } else { - param->ptr = callback_param(argv[argidx], callbackParameters[cbidx++]); - ++argidx; - } - ADJ(param, ADDRESS); - break; - - case NATIVE_STRUCT: - ffiValues[i] = getPointer(argv[argidx++], type); - break; - - default: - rb_raise(rb_eArgError, "Invalid parameter type: %d", paramType->nativeType); - } - } -} - - -typedef struct BlockingCall_ { - rbffi_frame_t* frame; - void* function; - FunctionType* info; - void **ffiValues; - void* retval; - void* params; -#if !(defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)) - void* stkretval; -#endif -} BlockingCall; - -static VALUE -call_blocking_function(void* data) -{ - BlockingCall* b = (BlockingCall *) data; - b->frame->has_gvl = false; - ffi_call(&b->info->ffi_cif, FFI_FN(b->function), b->retval, b->ffiValues); - b->frame->has_gvl = true; - - return Qnil; -} - -static VALUE -do_blocking_call(void *data) -{ - rbffi_thread_blocking_region(call_blocking_function, data, (void *) -1, NULL); - - return Qnil; -} - -static VALUE -save_frame_exception(void *data, VALUE exc) -{ - rbffi_frame_t* frame = (rbffi_frame_t *) data; - frame->exc = exc; - return Qnil; -} - -VALUE -rbffi_CallFunction(int argc, VALUE* argv, void* function, FunctionType* fnInfo) -{ - void* retval; - void** ffiValues; - FFIStorage* params; - VALUE rbReturnValue; - rbffi_frame_t frame = { 0 }; - - retval = alloca(MAX(fnInfo->ffi_cif.rtype->size, FFI_SIZEOF_ARG)); - - if (unlikely(fnInfo->blocking)) { - BlockingCall* bc; - - /* - * due to the way thread switching works on older ruby variants, we - * cannot allocate anything passed to the blocking function on the stack - */ -#if defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL) - ffiValues = ALLOCA_N(void *, fnInfo->parameterCount); - params = ALLOCA_N(FFIStorage, fnInfo->parameterCount); - bc = ALLOCA_N(BlockingCall, 1); - bc->retval = retval; -#else - ffiValues = ALLOC_N(void *, fnInfo->parameterCount); - params = ALLOC_N(FFIStorage, fnInfo->parameterCount); - bc = ALLOC_N(BlockingCall, 1); - bc->retval = xmalloc(MAX(fnInfo->ffi_cif.rtype->size, FFI_SIZEOF_ARG)); - bc->stkretval = retval; -#endif - bc->info = fnInfo; - bc->function = function; - bc->ffiValues = ffiValues; - bc->params = params; - bc->frame = &frame; - - rbffi_SetupCallParams(argc, argv, - fnInfo->parameterCount, fnInfo->parameterTypes, params, ffiValues, - fnInfo->callbackParameters, fnInfo->callbackCount, fnInfo->rbEnums); - - rbffi_frame_push(&frame); - rb_rescue2(do_blocking_call, (VALUE) bc, save_frame_exception, (VALUE) &frame, rb_eException, (VALUE) 0); - rbffi_frame_pop(&frame); - -#if !(defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)) - memcpy(bc->stkretval, bc->retval, MAX(bc->info->ffi_cif.rtype->size, FFI_SIZEOF_ARG)); - xfree(bc->params); - xfree(bc->ffiValues); - xfree(bc->retval); - xfree(bc); -#endif - - } else { - - ffiValues = ALLOCA_N(void *, fnInfo->parameterCount); - params = ALLOCA_N(FFIStorage, fnInfo->parameterCount); - - rbffi_SetupCallParams(argc, argv, - fnInfo->parameterCount, fnInfo->parameterTypes, params, ffiValues, - fnInfo->callbackParameters, fnInfo->callbackCount, fnInfo->rbEnums); - - rbffi_frame_push(&frame); - ffi_call(&fnInfo->ffi_cif, FFI_FN(function), retval, ffiValues); - rbffi_frame_pop(&frame); - } - - if (unlikely(!fnInfo->ignoreErrno)) { - rbffi_save_errno(); - } - - if (RTEST(frame.exc) && frame.exc != Qnil) { - rb_exc_raise(frame.exc); - } - - RB_GC_GUARD(rbReturnValue) = rbffi_NativeValue_ToRuby(fnInfo->returnType, fnInfo->rbReturnType, retval); - RB_GC_GUARD(fnInfo->rbReturnType); - - return rbReturnValue; -} - -static inline void* -getPointer(VALUE value, int type) -{ - if (likely(type == T_DATA && rb_obj_is_kind_of(value, rbffi_AbstractMemoryClass))) { - - return ((AbstractMemory *) DATA_PTR(value))->address; - - } else if (type == T_DATA && rb_obj_is_kind_of(value, rbffi_StructClass)) { - - AbstractMemory* memory = ((Struct *) DATA_PTR(value))->pointer; - return memory != NULL ? memory->address : NULL; - - } else if (type == T_STRING) { - - return StringValuePtr(value); - - } else if (type == T_NIL) { - - return NULL; - - } else if (rb_respond_to(value, id_to_ptr)) { - - VALUE ptr = rb_funcall2(value, id_to_ptr, 0, NULL); - if (rb_obj_is_kind_of(ptr, rbffi_AbstractMemoryClass) && TYPE(ptr) == T_DATA) { - return ((AbstractMemory *) DATA_PTR(ptr))->address; - } - rb_raise(rb_eArgError, "to_ptr returned an invalid pointer"); - } - - rb_raise(rb_eArgError, ":pointer argument is not a valid pointer"); - return NULL; -} - -Invoker -rbffi_GetInvoker(FunctionType *fnInfo) -{ - return rbffi_CallFunction; -} - - -static void* -callback_param(VALUE proc, VALUE cbInfo) -{ - VALUE callback ; - if (unlikely(proc == Qnil)) { - return NULL ; - } - - /* Handle Function pointers here */ - if (rb_obj_is_kind_of(proc, rbffi_FunctionClass)) { - AbstractMemory* ptr; - Data_Get_Struct(proc, AbstractMemory, ptr); - return ptr->address; - } - - callback = rbffi_Function_ForProc(cbInfo, proc); - RB_GC_GUARD(callback); - - return ((AbstractMemory *) DATA_PTR(callback))->address; -} - - -void -rbffi_Call_Init(VALUE moduleFFI) -{ - id_to_ptr = rb_intern("to_ptr"); - id_to_native = rb_intern("to_native"); - id_map_symbol = rb_intern("__map_symbol"); -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Call.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Call.h deleted file mode 100644 index 0b971f2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Call.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2009, Wayne Meissner - * Copyright (c) 2009, Luc Heinrich - * Copyright (c) 2009, Mike Dalessio - * Copyright (c) 2009, Aman Gupta. - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef RBFFI_CALL_H -#define RBFFI_CALL_H - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(__i386__) && \ - (defined(HAVE_RAW_API) || defined(USE_INTERNAL_LIBFFI)) && \ - !defined(_WIN32) && !defined(__WIN32__) -# define USE_RAW -#endif - -#if (defined(__i386__) || defined(__x86_64__)) && !(defined(_WIN32) || defined(__WIN32__)) -# define BYPASS_FFI 1 -#endif - -typedef union { -#ifdef USE_RAW - signed int s8, s16, s32; - unsigned int u8, u16, u32; -#else - signed char s8; - unsigned char u8; - signed short s16; - unsigned short u16; - signed int s32; - unsigned int u32; -#endif - signed long long i64; - unsigned long long u64; - signed long sl; - unsigned long ul; - void* ptr; - float f32; - double f64; - long double ld; -} FFIStorage; - -extern void rbffi_Call_Init(VALUE moduleFFI); - -extern void rbffi_SetupCallParams(int argc, VALUE* argv, int paramCount, Type** paramTypes, - FFIStorage* paramStorage, void** ffiValues, - VALUE* callbackParameters, int callbackCount, VALUE enums); - -struct FunctionType_; -extern VALUE rbffi_CallFunction(int argc, VALUE* argv, void* function, struct FunctionType_* fnInfo); - -typedef VALUE (*Invoker)(int argc, VALUE* argv, void* function, struct FunctionType_* fnInfo); - -Invoker rbffi_GetInvoker(struct FunctionType_* fnInfo); - -extern VALUE rbffi_GetEnumValue(VALUE enums, VALUE value); -extern int rbffi_GetSignedIntValue(VALUE value, int type, int minValue, int maxValue, const char* typeName, VALUE enums); - -#ifdef __cplusplus -} -#endif - -#endif /* RBFFI_CALL_H */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Call.o b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Call.o deleted file mode 100644 index beb152a36bc4abd1effb325054fbf9b243793367..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25272 zcmbt+3wTu3wf{bIat<@e0tkYINeIlq1TYT_3J!TpLP|)|d8DAc zO29HrvDDgDYeib?E#A^z+FGk(VA*2+Fr$H{=c=)-e)E=q2;?h z-#2?b_F8MNz4qgrv-h6!i}(Nf@esxol_9}T!>@!A4}Q3=!tY=fM+Z-CG}$Xj2iKXE zCWK8!Kf@$hC=?5CiU|TB6soPPuT9bt+mdTyWRHsVtYT~jv9e4+C|#jYQ#2N7>u5E} z413bfyCVPeP=N?w8%RRGF&a(bg+hybwZ0_dtf*H>lEo-y@}k(KUZGHPxG~-uf|HyL zdpG&27h57x5g3QlWStmhWl3a!i_%_uXA{p)x3}eLQ>{wG@ANon#)5;|YiMkYgu5x8 z1O0n;vZ?o)(7LL~vLlf}?X`8Zbdo^2z3)#o)!r5DpolGsYoFg0a67FMQMGSNZpb;TPy8a9Tb>Goa{_P#C* zPPuY>vCUnX_Tr*1R*6pcbh0Z+N7MXk>fG4X&=d>BJ3igk(Hsf|7fC^arz9o(%U{ZP ze_nSBV|G(8&0ctYs3n4`nwjb2_mrsLdTDQ&Y0s2qEQhi65+`W&=e7=RF+F}IOHAqg z4ioMOn(zSp6GaU0ZvwL2B;w5Gf>Q*2P}GNn^YJ?jdKO897<&w{gkMYyZAO~(%fgR_ zrx*gjuKcR=CtmU00{KT&zs z*YjcjV-)ek)+b{Q-`o#fyZeVAH&MBdvKF}({kd}Y1=pR=5wo|_6KFaOTYCbDrz%VP zD@*@+vhomFbB)_YfJAmI?Jc;}Gw*8Gt|O>P={vr;A8lP9XnNY;TZOW-jvpKnn|pKw zWDhFwm5Jj$FRMqX#y#)ZV!op^JpDbFhR0?f9S(H9GgfqTw8@(pH(vMnAAYyLzu&d% zG4OgzdR`sZ!Y^-1`3IIKW?t$Ywzs^$=h7(GXIGKqdvl*4(3JHVzjCVoJiPJs3y0<( ze+{-+@75;+3BB(Ho$9c5pTFk=yKDDww2+P$A@ za}pf|UFs(4Qpw`3pbdIn9ozHqP}lBxRITJV>6w3gxX*RB-bbC|Uv~f4#*D82`lpWO zkw-Uw*x%1XvHO_pG<)YC-!|RfJLKSy_(XpK!|dgEV+EL>XmS|m?|H8vW=y16mk*aG zP(Ig36Hv9|ANThM6Myz6{=m7IxQ<~G!f&AmCQPAVZ`kwtiqMiqBu_dywE2 zI8D`^EUW9=Lw$#aBX!Dsyp!+_^3Us?b0uC<8|YUkIG_zMx4|3XSD^o7aNgEEuFuzB zqWW160rM))#)JNzr|NIlECXhQ$oOYydzt@%p4iFeQ4$6`0jPTu!B z+=eY1bNqW}eG2wU%|T#xW?2Ab+LM_BlqOt;{{zfDrN?^fo?Mi8nOocU00z;|@q6sO z{{HI$=YP=O|3%=9_zeTyh+i4-SMhrbxD#+W>e()Sgv;OEm=iw<{mJ+d-iJK-{6No7 zH7osz5B!O>7kfU|T)Un{Q_{4$>p6}%<4dh747lO%exA3v2y1Fq40A;V=7NQGK7oA~ za;3-m9_He_i^wMgdTjW9l3n`C(r0CsKXGEvVq@*^oEQ?j4o@aCV-2oHPvF_Y8LJ05 zJXW1J*K=NpFC(D#T(ZR{zrMh~ck4wS(ASGFB~9_adx9RP==OHb-*d`NPbRUe{k>|> zdCa?)oN>eS9FHtd*>72!bb%U`Zu_FeE!T*DBFS&rm;OBJ_a~n7C+bdF8uX-j)^*b{ z*Obb`_#Hrj_4H^8Pad~ZEL=-Y`FoDLa8tM#NW2=DaweGghrg+2Qy_7{zc=ewE|Tdv ze=#uSsbJzlAaUNGIO{)tJ}WQ<^XgMOp12qJn1YrS27AA>2k4^S`*r~Yd!L{&>e_uD z5qmfI@vLmGO1z9`=Nex%4-x9@LA(xdBA9s7-y1&_OuQWwUDC?h@x(o_fhqYkfWLR^ zWB$Y?8BEvi<0w77aFhOoIids@C_0uz=?(2)i+%(t z{!B86C_K&_|Gnxn3*BhXs2xq`_V=9h`+I9VXtsRQ0?$`?y~ODFbfmMR)zcB**cgs@ zI$Jyqk=FRea7QfaDV*5sY3Yo3CN@uDrj*R{(A&1hQyAXV6>f@!n>`Jl#?H?6a6^Zu ztASp3W8ugYR@V`2XbF4F6{lnd3v_fhw6`@UIo#a!D2K&5LtR+=0qAImwRMN_#=Ehh zD-_+lv9YsV9>!Oe>4!1Yp^?O6Z z#`gB`=Hjl-NUWu^y{)sjHQv@7juv-^JDNKq#f|Zf=Js%LB;L5Wc!qa|x1_i=yfIqb z($ZE`>YeMIQ;dZ@qC!n9(iq~-cZAxSLro1$>%**_+9ci)ZEK}^B9{dgG31K)080sr z$rk}z?yC)~stm1K0R@2vme(0UQ=5gNLFW+ui96=q$VY^uEH`tz($pC<;u!M zth%mzb?C;HhW2P!;IT+tq8)ARf{AVtZZYvdRaNDpfUmYPROPE#X7UyX>X+A5g%$^W zO9TU91tUemWF#eOR#%m;2&SmitgNgE_=2Gte_(MfqaGQGV%)Yhw1=8HJEF0uX}LDE ze8uugiLWSMT8RqsTGWOrg1(v>NmQ*^REMS#S-dSJAz~)7sw!x9iv!7$_}a3Ns`AxVSOzLqRILnF)=Qmg41pEPeL+bt4_GKlN;>Wf z)>woYG^t@mT~c++7ga8n#PSu3ETzDJu-v?&sytxj@do0t#=H{`hiJxRix&q%iv!g) zwIN@5fKxTAYgTcjZh4>{BZ4GQny)UHltJuGf~Jdx#x}Of7eqB08_=`NQC~~Om-88u zqY&gU+IAaFq0J2utY(IY3dNWJn1Wk7XrgDy6JQ}Kl(Q^^OotdR zAktXT*@5|!rrt;+XH_+Hb%mQvnIxVpgeEgSy%9n-qqwVZgv0jEh8W{n?G3F_wxPWN zI}Fw34biqH7M%m<`Ha}Kz9GWmbCOm$BZ~RUtV5hIOj&XK+7MP=pjB#o0LQ96l^Shl z@peY{pcbgMK(M(p-q?;Ax!E)#NVHQ;tTWQk8fNDDZVWfC^^tHxGol@9U|qC7u)ZN0 zYVB@kp>o_DS$Gpo^;Bb1BLzpRw8T4_Vz>*T?$`^6G*e!kx6Sp=rZF%JK*0HCEzL1ZA~$bVkCJkw`};YsB`=2HLbj zJZmtCHpSRt5iN>AXaGe$X%&q)9wv-E(}gH27gp$I9vVQghUVr-7~PC_BC2o=jT>Jh zo?NgOP!-miMr{kXH%D1#OG`8y zL$kGnBjJvwZ~$}urX*P%{#3jz5^hH2m(x~3D`dN%y^$BZqKlax05NO7n5>3U39}$G zsC-;g6eu=PGpB|>Kh-u+N9H>mkuU{wJ&VS8ccob&hKCTiWula6j(W64sIjdh$}m$z z+OWlf?U4=emH2|i8ltSRtrb6r!A^|I;hCG+dW;AbYrySJ=t&*OnH(XAq0?>|ltz*< z;&nDF7-{4Lg^KzMCos`SG%5lUXV_jS`hR`wCmL zL=@dFAXt210ZP(3Sn0kmF2MqBr#nu6}I-c zKu;!F5fNk=e@MM6STg=#EywC3U9|#&Rlye_7+WSFSldPG$W{W&R7 zWTiwmU0!RC$a=#Psd-DFBdyxjd`qC;OR}W@U$yE{BlIlrpum#0S7sW@Xq2_03@NIx zngUTq+2zZUTCGVBEk6Vj%`m(s({RS{{e{qa(K0OC!m>Y+Hg0gu5>T=B;Y~i$T9MU! zd6EAVS&vvEb(Xq7YDEuQC*U9jeNklHXNhE3@ruqk$Lf?BA`y}GbxUN;I|9wM+8`rT zipWZeWHj#NjF!w0c~XcxWfhbm@`}j%-+xPFG~d@`Y?^?BMDq$nZWP+9FK^{Gk+u8Z z5_v>uKY4j8zZY4rTwX*MbB$r$95SL?EVAbPTOw^jJ9c?1S0HjoXg_j!E58z1zrVZ) zoeQMPVclvnDt!ea3u$>6S3p2Klt}cq7OQ5Qd1{AUDh{!tWmf;%d?4l$q>6?lD-?a7#gUfPE zD+ujbfja5n3ofusB$;Mv)n;mCR9$Kvv?_6l#_U zw1n1AH}ofA;IyT6Yo=DlgV%>b>y)LnCQ~b8Ms^D6WL)c|Rx+;j=^oYyEm?^{pXeSE zLed^)&s#+Jq~0JC>TiTr&}!9;M;)o%YKhcIbeqM>Y*mr?-h+)HXdX~m)qs;sO&Xj2*Szs6^(S-U0h<+j`2j~z> zD~Gh~SxQb0Od!Wm2%!SFoSmhp2It~_onsLYak^lXvD{%&06ZgCx{)&nq>Hv?-Ijp1 zM*$+J=p=4t*eI*);g+{3azs*_v5~`Iem<%@YJ?IPHW^61#qF-YVZ3YjFX&B24^ zgjw8$i36G?$845KRy*X7GM=E!Rv@BqrfeggH)SR($W7)>%~9$`;rS+qH#TF_A#Jue zmo6Hkln$#KRiCpu=h1Tb=%s>6VYS%GK=4Ya2;!C!mwF8pz@IUOrIKZqC%lR?Q-oo9 zmSqvd>;bhz=cAfjXGv(>nK_w4)JNwkJjmCNN4&0st$EZDb8HqiKFxUnWPOmbb|Ud-US!M!B7S+p(u zk!fu|J;rNvfbKAU$}KvfL+nF-2*3-u#i70?^oIN-g?UagpG#rNL;LnDb&}&8GMM86 z62);5sm<{bQq_@-YG*m}k!p^KNOeaU(jkt8NbQd0NF9!wk!CySEh)#*jnwJbjWpNs zRiuXFKajc{k0NzDorF=(mz^)Sc_D5Y(P51u?eZ&u?wlgaTn5T z#{r}{jzdVD4mxg<>!72VhJy}Kx*Qjf<~iO(I@Iw2(qRreiXQG5iFAZx0@BfrQltfr z8<381EJHfhu^Q<(mh%WeR#vGa4#*rmNEOHDk=h(z<>|MPs%BSsk}_|0eh<~t9!CVsqY&OedA%q&n$c z#LaTj0b=b(NbUfgRjh9X(Cp6R#HJzg1!8-3T2{!)a_RR|c9!!zvfbYW?pCr?d)_yI zQ9u+8OE%x;A|Q0t&V~}(`2xh9!{LoK4#@)C@v;{Wb7#*m9)av>u(GdX#tGmr5I%<) zF9QE>!sjyM55TFm+1E4Ue}GdL$)3lISAp**d_FV&0{mr?{{%BW1pXS~3z#tqMN#Fl z7or7$Q;o8H%oqcloXRd|#(3bT39n$rMBs0d?jmNC0H?R?>`FxI$1tiZ`ZEA_ML!3i z+4R2=uWgwEXC)+r<20xYquQu3BUpamJWn-rF}4+J@4 zt5@uK_kwtua#kzuyq6%KjpA)LEBSeU0>Q;@Q9OBnk;EFMkU2L%LF-1c6WTdTa=QUM zISY-Ifd2({4yqUe{y5=_>_#*2ql8zwjRuAvIZO{S<~Br*%ash1FroF z$!V18EXq9!aKKr{`yllr=S*ho7iOHZ+{Sk#K0Du_S7RD8&N&`~PA#9o&pEfy_%$FM z$9G;|V!RGWW5PLaj`1GwbHty&(8xhK^#1I;!EclSUqr=!V!crgxQXxuT}CS)^#dvc@ z#Bnu0uLcCUul!8)FlQ;K(Y!inap0OC$t1jFxyo|K0u;Jd8MlJ97eCic%ys28Yqi_RfhP_s61-VF zb3xeNQTWgr?>7m`8DEveuc;;cl0y7zuc4cvtzV&b0JWB~G}}`s3MD=ZFoDE8o!~1E zWtnz)i4SF&CGMo0b{pMWmGKm2BB+aa?jhnq8{L^j&VwT7VamD9X8O-{ZWB3AP)?JL zdWg_zGIJ)9Lv+!0l(Om!pDHgVZ@u)>kVL!3(!aU^v)FP+ugU!NEf_H{^pQ0O2VK1!HBd9Gx z#-_>Lo**hT-S)+W>qxTuPxK$VqBX$jvfZwD>AzNOL>G4>Eg^2D;{6cZ9?;%8Sp5QJ zyadzt0V$;-??m}@jl|E!Y~C4=`Yrgv3dPh`p?G&dhbuoSlxL7~0>X3+!w<@A+I`5S zYYKj4^lWwxQnmu#_t?zWK*;@?5sQ~N22og!7UQayD70Kr?mKYB z_q^jE!4=s|8(#e69uLp`jrVz&b%D*My)QiCX7@<5FLJY_D0dmS;;+16NN`0qjUEZ< zqPi5)lMZ+26lt7rfLhxgwkP zrIfPDhNA=Wva-y$O_RG0+>`5M?s@LXG`ZivGjEoePx8!}vr%d-IsjedqU}xZC6(FG;Q^`n26vYfE^tJ2I)tJZR- zf!Dgndjb+>t*4fd2JH**+8#FRBX=8k7ow*Lp6ND2!Q;LTYPJWwYh}sP!4hR>&2UzUc>@UpY=9b#0TQTVX@3TV10 zJY@|a{s8;7Uz=0w)QhlJwhLT7;r@x6xQ<5aG4lR`qIl_Hfe%;4=Ew!^v)l{1!`QZ& zrCx*-pYpcxQnTnb%ICao3e8qoYe3U`1>|YA&iWGQSICiV3cX#F{SGv}P}p|x{Ia3Q z3hTJ8^h`Ha$ox>OG^u2|NuV;H9---a{4(-yV|39aH}d2r z+Y*eL!LFw-BfnC}-zuQoPRy`z4~>4#rB7Hq=4Pp9(%O-M(``7}7LKI+_kr%TV5c9K zdkE6We?ZWLEsx5joS&P4QU*Q7wiOu}N7+7sxh#2{%{mxI_ep8nI)--;2IxTAAV=MP zVR$Q~Ut-faBKmBy1harezH(hRz|=WNbDKKP-(?sWkSv zs5pU53)}dQ3oYhxB^)BBw=3)DC@ry>hrwydC&d!GZoR%vF9x>+Yq2hEttz!(#4KZ2) zO+U;}Yo5s?`n24bdP1IFW39u(wDu=rNB0VOo|9HP_`zpd@!~B?3oWTl9O6rkJocF_ zNN@ILt@%M*Mk}EyhvVt>D5*&ipjSyWQu2f`t$$jvGFyyR3Q~-Q`1>f7bawX50{?St#zht?h-e1G` zu(1#%73BkLVk@{HNA#e7QuIc;H_~4baeklwBeBT*M`Bw?Q+vGG{F9RveE; zie)xN+CWBI*__z}InmA0Vm=z9=J4>YCuitZh5t?BqIo3>CdSdGIkSskF@_V|;TTwG zNXj)cO&h>51jYZAKwv(ChAEpI&!z@1gBz~pf4?!ga{3Z7$w6;22F|P|&zx^eJW7sH zM6+zn0iVrFJ&#QwN4BkW6tiX7^dpq2U)%0gUuCB>w_dGH1xE>L*xSxh^!b#k`?j}m zc#$m?^nPu$uD-?WOSRlP^!aM<_7-iFu6}?makoBS^N^G`3+3qQ7oCT6ulkROSJQQM zZ*IMoyG%c&z70B0SHD2CzEpk7%-)w<57~<#vZ07PU0d$ODwbC}tp+2G6s}E}}+O^LDc|+ZYB(fjHOoOP+?$u_)>NHenr~1g&dTlJ2 z^MRexMxcf^UA@mn0Ri&LR+3d8u))I1TMudDfYt+p8>Ya!ijYif^J-HODrFzVNBz4E z;nCX=iraUhTp|5}vd>ieE~Kx~)!zu|Gpdk2cUy||Nh$rfDgB%RFMhP`khHc}u@5!P z{oNF}OPKo$%q>N5QT%6ar)rDhdt|jfLbc%RXQ^86p;{vUkBXf-1nT__)8L<|#QT#a zK4F#kv?=gY5;&d|cwMnmCxL}8Ljci!Q@HdFk4LGl-jf=S&nWi&rg%TZ$Ls2DA^z@V zYVcn&+|QfxKcw=1j`GLp>i3m;UH!$jdRdz<$lAVz+9KFrqT2oywY^$b58CXgHFasd z70s~qh*bKTEZ|kMf)5CXelHzDG$*JBx9r!({6s5+f$8(L(fgW@9j3l++ovtjW7@Tc&<3w)v(#I53fdg&@7OM+cIH{S`l3=lK;n5-NSGZM z5~nN)RE2C-rr0zv$*31J$6T02{CjS%M|hyLE9uD8fsP0xmSci0PBH30V7Q}JFN4LM z%BiHIDE1?(Sd=(Uy<grFn{TdVRevM)3ve~xM z9Rc0%@D`eO6!on7YqE>keIC*JC$(!h+^@L_9@4yeiM9|uWE46YCVchbEiKwa%zSDL zWNbe={CX4`(`hy$F$*kT(bBC57vkzYnYHy^f)ZMfXUCEeHWT+KDz8Obf=|S z{!(r3Qf<*vOs&KWBQ#~W&^wgNOFGzg#L*C5&Yi*;(2Mzi-34-8}oBOk~;xNaz7UQZv)~rYs_tc z(~$p3K)l0`Sp$e~G#1?ih_i!5Re&=A7XnTKECIyB))-nY#uM0>ae&wH4UpoH4TuwlMem~#@d?_Z^MLSU%=3c&v7iqM`c6T|0ZA_`_{#*JHc32W zU-0t;-zI2Uz#;oD0aAHC74%_2e?`!D0Fr$=XG3yp1iwnqbpD6zOa{cC7K`Wz63Km} znf$i^uLb=wAn{KM{$qm1l*09I2c-7f2uS_@T0k$^L8l}5XTT|dbeyda@Gd}Xx)tpJ zoB&A2---~&xqxGV(wVw3fX4vG1AZNl_-gzD5qXm2sg^>Is0^TR!Z33d)@uYfxQ zY!t9uz$pR_5%3)hYOXKf8Ub&_{6PHQAr1(&ep0|62zZ--%>phLa2g=#p)EK(FW@l& z4+ywJz;yyH6wo6e0N3w;F|v0K<7^#fGWz0@fuCG|If(W(;GjI}`d7*aEziTAfgPgd zq1mw{4;i`svP0ODdpZvZTCR`$UD%fgd+DE>WKSOHy;0EeFz-*G@4`>6|5TxTqUCzb zRFN;&Z@wY&0r)i!E^mW|66^iwzHbnj*t^-!Phyk^wZ4={*41#_~kimn`TIyG6YU*xwMdD?rR9+ z0~cv3_=jLbmbq3lfF)Oa1~AiiQOJcT{{Vi7e7(%W1;#o(? zd90HJC_sE)E6l%$V&bNW<|y7WXxs+t~- z^XoMOzcxmtnBT3yhi#ILZSF#lG7DwwcS#+}450;R!>VchhENNA7=$wELvf+@aCg`w z$$oPq$EoHbR&ji=L|Wq8W)?*|44lB{H9~FC5WW`E9O`V5Ei1O=NEguxMH<@h39GKde}S-eQovl(V3!_lUAcm|E!{|~?}EHVH9 diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ClosurePool.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ClosurePool.c deleted file mode 100644 index 5499b40..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ClosurePool.c +++ /dev/null @@ -1,283 +0,0 @@ -/* - * Copyright (c) 2009, 2010 Wayne Meissner - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _MSC_VER -#include -#endif -#include -#if defined(__CYGWIN__) || !defined(_WIN32) -# include -#endif -#include -#ifndef _MSC_VER -# include -# include -#else -# include "win32/stdbool.h" -# include "win32/stdint.h" -#endif -#if defined(__CYGWIN__) || !defined(_WIN32) -# include -#else -# include -# define _WINSOCKAPI_ -# include -#endif -#include -#include - -#if defined(_MSC_VER) && !defined(INT8_MIN) -# include "win32/stdint.h" -#endif -#include -#include "rbffi.h" -#include "compat.h" - -#include "Function.h" -#include "Types.h" -#include "Type.h" -#include "LastError.h" -#include "Call.h" - -#include "ClosurePool.h" - - -#ifndef roundup -# define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) -#endif -#ifdef _WIN32 - typedef char* caddr_t; -#endif - -typedef struct Memory { - void* code; - void* data; - struct Memory* next; -} Memory; - -struct ClosurePool_ { - void* ctx; - int closureSize; - bool (*prep)(void* ctx, void *code, Closure* closure, char* errbuf, size_t errbufsize); - struct Memory* blocks; /* Keeps track of all the allocated memory for this pool */ - Closure* list; - long refcnt; -}; - -static long pageSize; - -static void* allocatePage(void); -static bool freePage(void *); -static bool protectPage(void *); - -ClosurePool* -rbffi_ClosurePool_New(int closureSize, - bool (*prep)(void* ctx, void *code, Closure* closure, char* errbuf, size_t errbufsize), - void* ctx) -{ - ClosurePool* pool; - - pool = xcalloc(1, sizeof(*pool)); - pool->closureSize = closureSize; - pool->ctx = ctx; - pool->prep = prep; - pool->refcnt = 1; - - return pool; -} - -void -cleanup_closure_pool(ClosurePool* pool) -{ - Memory* memory; - - for (memory = pool->blocks; memory != NULL; ) { - Memory* next = memory->next; - freePage(memory->code); - free(memory->data); - free(memory); - memory = next; - } - xfree(pool); -} - -void -rbffi_ClosurePool_Free(ClosurePool* pool) -{ - if (pool != NULL) { - long refcnt = --(pool->refcnt); - if (refcnt == 0) { - cleanup_closure_pool(pool); - } - } -} - -Closure* -rbffi_Closure_Alloc(ClosurePool* pool) -{ - Closure *list = NULL; - Memory* block = NULL; - caddr_t code = NULL; - char errmsg[256]; - int nclosures; - long trampolineSize; - int i; - - if (pool->list != NULL) { - Closure* closure = pool->list; - pool->list = pool->list->next; - pool->refcnt++; - - return closure; - } - - trampolineSize = roundup(pool->closureSize, 8); - nclosures = (int) (pageSize / trampolineSize); - block = calloc(1, sizeof(*block)); - list = calloc(nclosures, sizeof(*list)); - code = allocatePage(); - - if (block == NULL || list == NULL || code == NULL) { - snprintf(errmsg, sizeof(errmsg), "failed to allocate a page. errno=%d (%s)", errno, strerror(errno)); - goto error; - } - - for (i = 0; i < nclosures; ++i) { - Closure* closure = &list[i]; - closure->next = &list[i + 1]; - closure->pool = pool; - closure->code = (code + (i * trampolineSize)); - - if (!(*pool->prep)(pool->ctx, closure->code, closure, errmsg, sizeof(errmsg))) { - goto error; - } - } - - if (!protectPage(code)) { - goto error; - } - - /* Track the allocated page + Closure memory area */ - block->data = list; - block->code = code; - block->next = pool->blocks; - pool->blocks = block; - - /* Thread the new block onto the free list, apart from the first one. */ - list[nclosures - 1].next = pool->list; - pool->list = list->next; - pool->refcnt++; - - /* Use the first one as the new handle */ - return list; - -error: - free(block); - free(list); - if (code != NULL) { - freePage(code); - } - - - rb_raise(rb_eRuntimeError, "%s", errmsg); - return NULL; -} - -void -rbffi_Closure_Free(Closure* closure) -{ - if (closure != NULL) { - ClosurePool* pool = closure->pool; - long refcnt; - /* Just push it on the front of the free list */ - closure->next = pool->list; - pool->list = closure; - refcnt = --(pool->refcnt); - if (refcnt == 0) { - cleanup_closure_pool(pool); - } - } -} - -void* -rbffi_Closure_CodeAddress(Closure* handle) -{ - return handle->code; -} - - -static long -getPageSize() -{ -#if !defined(__CYGWIN__) && (defined(_WIN32) || defined(__WIN32__)) - SYSTEM_INFO si; - GetSystemInfo(&si); - return si.dwPageSize; -#else - return sysconf(_SC_PAGESIZE); -#endif -} - -static void* -allocatePage(void) -{ -#if !defined(__CYGWIN__) && (defined(_WIN32) || defined(__WIN32__)) - return VirtualAlloc(NULL, pageSize, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); -#else - caddr_t page = mmap(NULL, pageSize, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); - return (page != (caddr_t) -1) ? page : NULL; -#endif -} - -static bool -freePage(void *addr) -{ -#if !defined(__CYGWIN__) && (defined(_WIN32) || defined(__WIN32__)) - return VirtualFree(addr, 0, MEM_RELEASE); -#else - return munmap(addr, pageSize) == 0; -#endif -} - -static bool -protectPage(void* page) -{ -#if !defined(__CYGWIN__) && (defined(_WIN32) || defined(__WIN32__)) - DWORD oldProtect; - return VirtualProtect(page, pageSize, PAGE_EXECUTE_READ, &oldProtect); -#else - return mprotect(page, pageSize, PROT_READ | PROT_EXEC) == 0; -#endif -} - -void -rbffi_ClosurePool_Init(VALUE module) -{ - pageSize = getPageSize(); -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ClosurePool.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ClosurePool.h deleted file mode 100644 index b842375..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ClosurePool.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2009, 2010 Wayne Meissner - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef RUBYFFI_CLOSUREPOOL_H -#define RUBYFFI_CLOSUREPOOL_H - -typedef struct ClosurePool_ ClosurePool; -typedef struct Closure_ Closure; - -struct Closure_ { - void* info; /* opaque handle for storing closure-instance specific data */ - void* function; /* closure-instance specific function, called by custom trampoline */ - void* code; /* The native trampoline code location */ - struct ClosurePool_* pool; - Closure* next; -}; - -void rbffi_ClosurePool_Init(VALUE module); - -ClosurePool* rbffi_ClosurePool_New(int closureSize, - bool (*prep)(void* ctx, void *code, Closure* closure, char* errbuf, size_t errbufsize), - void* ctx); - -void rbffi_ClosurePool_Free(ClosurePool *); - -Closure* rbffi_Closure_Alloc(ClosurePool *); -void rbffi_Closure_Free(Closure *); - -void* rbffi_Closure_GetCodeAddress(Closure *); - -#endif /* RUBYFFI_CLOSUREPOOL_H */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ClosurePool.o b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ClosurePool.o deleted file mode 100644 index be2adc7f86dcec699a0b90c8a09b28ed05823346..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9548 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 diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/DataConverter.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/DataConverter.c deleted file mode 100644 index 2d5b827..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/DataConverter.c +++ /dev/null @@ -1,91 +0,0 @@ - -#include - -#include -#include "rbffi.h" - -#include "Type.h" -#include "MappedType.h" - - -VALUE rbffi_DataConverterClass = Qnil; -static ID id_native_type_ivar; - -/* - * Get native type. - * @overload native_type(type) - * @param [String, Symbol, Type] type - * @return [Type] - * Get native type from +type+. - * @overload native_type - * @raise {NotImplementedError} This method must be overriden. - */ -static VALUE -conv_native_type(int argc, VALUE* argv, VALUE self) -{ - if (argc == 0) { - if (!rb_ivar_defined(self, id_native_type_ivar)) { - rb_raise(rb_eNotImpError, "native_type method not overridden and no native_type set"); - } - - return rb_ivar_get(self, id_native_type_ivar); - - } else if (argc == 1) { - VALUE type = rbffi_Type_Find(argv[0]); - - rb_ivar_set(self, id_native_type_ivar, type); - - return type; - - } else { - rb_raise(rb_eArgError, "incorrect arguments"); - } -} - -/* - * call-seq: to_native(value, ctx) - * @param value - * @param ctx - * @return [value] - * Convert to a native type. - */ -static VALUE -conv_to_native(VALUE self, VALUE value, VALUE ctx) -{ - return value; -} - -/* - * call-seq: from_native(value, ctx) - * @param value - * @param ctx - * @return [value] - * Convert from a native type. - */ -static VALUE -conv_from_native(VALUE self, VALUE value, VALUE ctx) -{ - return value; -} - - - -void -rbffi_DataConverter_Init(VALUE moduleFFI) -{ - /* - * Document-module: FFI::DataConverter - * This module is used to extend somes classes and give then a common API. - * - * Most of methods defined here must be overriden. - */ - rbffi_DataConverterClass = rb_define_module_under(moduleFFI, "DataConverter"); - - rb_define_method(rbffi_DataConverterClass, "native_type", conv_native_type, -1); - rb_define_method(rbffi_DataConverterClass, "to_native", conv_to_native, 2); - rb_define_method(rbffi_DataConverterClass, "from_native", conv_from_native, 2); - - id_native_type_ivar = rb_intern("@native_type"); -} - - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/DataConverter.o b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/DataConverter.o deleted file mode 100644 index dc8c50c28fd70fe4e6f11dcca1a3789dfd466901..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5260 zcma)ATWlOx89uYSGv4)O?ZhN;V%%=i04>e#I&PxIrD^Qi3A?FNoYZ!$M#*$9v+IT3 zS!;H7Ne~i|LMmJQD{L5`HY=$CBmPbUYPde zdBzE|>K#o88skzM@xQR<^AzI$M^I2Jvh-7uVfagLBB>?80hnVd{UF&D<^|c{gK0nVV^vFj``|8roBd88 z8AtFOgg>^Jm>m`(g+SVN^LVJy7N>`NX}P#daJSzUQ)};~t{gfE=vx$(S|daO74??7 zvV){wY@(&s-gG?HkFdvt&x3MkGmmvQJNTEc*GE!Uj;Qc?t-l$|ojc_0>w|X+%5Qq< z@$}k_OPh*)-{sBvTx$IgB`~-4zSH65>-M~-J2QRm>|e>AT7Q^F^txwFt-a04o8$wSQ1<7onE{7$f z>6anws_uxQU{xzFKjnAv@v(|wuT=9fvuekxK(k8uykW*NCaGe6$C_b_l9{VomXWh# z8LL>Y7^Ynl)2pjxBQ`g;bTWqcTB&NrCKKa{@z_1NG7hKst?=eB&~Y(LUJN8kr+=F zjY=(9D3sy{5|fF;NnFSz={aF#iMGtqOgV!KtXwsVvAS6+6-^@_E19-fnx0!ch5#Lc zVVQaWO&c>)4CvN@U8dP}`MlS+%X(2AeY;Vf zOGn?zHsw>%VKo>X+BF*8rff%v5jZG<(e&`q-4FJCt}lQKAh=Vchl5cPak1@#_2Irg zuxbL)+qJ0?$M%`sM^QOzPP7}_ql&;T$DYRZ5pEA5Wu#By;PN=w;@mfgelbTcV$dNu zS7AB)ezBit?jfc`Xpn(#gE@*P&=(2L^IQc_K=DgF%9EiNL3+aSTm>h-Puisq@D7~N zeg(2l>~bXNma4J>d4!Np5Uh|`H^C@pv_FDK|NcmD3e!O?^mn|}aCn0Rv~S^2mbMYV z2m$omjn|wMpU1nW3~^D4FOc|Ch)+t9oFndTAA`_KAUfIh%1lJq-C0yMC`)_EbV&Ab z5UfOT#3vx;J?j;)Uu=pZ>~0bV<^Wk9kuWcTl`xL@JBSj-5hJ*5C5#kB=oHLqsL#pm zCrF8IV;2PD1CjEl6X>$@(3ryB)1(f!A?3(ys2(fpgUU7{-p{cBc#D9l3B5 zv{SsiN$R`|UU0Q^2Gb%ErC~d_1nmf13;ssC3=OWWZG%PHBzK8Ghuy!xaOtr7SFW4= z6O6BX<+M=F4=F?aJ>jcBp*ruAc)sy3s;M?NIX@w$qeD*zW(N2(L;A^)yzlr?p0c@q zGnYc&M8QjVw2@cXkIUGuc=Q9E{}{hJkz+vE@Klr!qXT#=G7n3JBWUP7A&z6gAd+O1(pSRaLcyx-842oJmeghPrRq?l2PxU8i z;rP#3{w~w2py+384HRcx{A-T9qsDq#e;k(aEGTAg>Lf$UuufkC zO`+%rTh!d-W;|B4)0Nd@mQ}T6oH1<`Jt=P#@ByGZg)qLz^Z2HrO1z``*5zsM9qf+m yFQ%zCD^sc&!m;@vwjNiaOZ`tkZeH>m$qiq?SC)Pp|1 BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include -#ifndef _MSC_VER -# include -#endif -#if (defined(_WIN32) || defined(__WIN32__)) && !defined(__CYGWIN__) -# include -# define _WINSOCKAPI_ -# include -#else -# include -#endif -#include -#if defined(_MSC_VER) && !defined(INT8_MIN) -# include "win32/stdint.h" -#endif - -#include - -#include "rbffi.h" -#include "compat.h" -#include "AbstractMemory.h" -#include "Pointer.h" -#include "DynamicLibrary.h" - -typedef struct LibrarySymbol_ { - Pointer base; - VALUE library; - VALUE name; -} LibrarySymbol; - -static VALUE library_initialize(VALUE self, VALUE libname, VALUE libflags); -static void library_free(Library* lib); - - -static VALUE symbol_allocate(VALUE klass); -static VALUE symbol_new(VALUE library, void* address, VALUE name); -static void symbol_mark(LibrarySymbol* sym); - -static VALUE LibraryClass = Qnil, SymbolClass = Qnil; - -#if (defined(_WIN32) || defined(__WIN32__)) && !defined(__CYGWIN__) -static void* dl_open(const char* name, int flags); -static void dl_error(char* buf, int size); -#define dl_sym(handle, name) GetProcAddress(handle, name) -#define dl_close(handle) FreeLibrary(handle) -#else -# define dl_open(name, flags) dlopen(name, flags != 0 ? flags : RTLD_LAZY) -# define dl_error(buf, size) do { snprintf(buf, size, "%s", dlerror()); } while(0) -# define dl_sym(handle, name) dlsym(handle, name) -# define dl_close(handle) dlclose(handle) -#endif - -static VALUE -library_allocate(VALUE klass) -{ - Library* library; - return Data_Make_Struct(klass, Library, NULL, library_free, library); -} - -/* - * call-seq: DynamicLibrary.open(libname, libflags) - * @param libname (see #initialize) - * @param libflags (see #initialize) - * @return [FFI::DynamicLibrary] - * @raise {LoadError} if +libname+ cannot be opened - * Open a library. - */ -static VALUE -library_open(VALUE klass, VALUE libname, VALUE libflags) -{ - return library_initialize(library_allocate(klass), libname, libflags); -} - -/* - * call-seq: initialize(libname, libflags) - * @param [String] libname name of library to open - * @param [Fixnum] libflags flags for library to open - * @return [FFI::DynamicLibrary] - * @raise {LoadError} if +libname+ cannot be opened - * A new DynamicLibrary instance. - */ -static VALUE -library_initialize(VALUE self, VALUE libname, VALUE libflags) -{ - Library* library; - int flags; - - Check_Type(libflags, T_FIXNUM); - - Data_Get_Struct(self, Library, library); - flags = libflags != Qnil ? NUM2UINT(libflags) : 0; - - library->handle = dl_open(libname != Qnil ? StringValueCStr(libname) : NULL, flags); - if (library->handle == NULL) { - char errmsg[1024]; - dl_error(errmsg, sizeof(errmsg)); - rb_raise(rb_eLoadError, "Could not open library '%s': %s", - libname != Qnil ? StringValueCStr(libname) : "[current process]", - errmsg); - } -#ifdef __CYGWIN__ - // On Cygwin 1.7.17 "dlsym(dlopen(0,0), 'getpid')" fails. (dlerror: "No such process") - // As a workaround we can use "dlsym(RTLD_DEFAULT, 'getpid')" instead. - // Since 0 == RTLD_DEFAULT we won't call dl_close later. - if (libname == Qnil) { - dl_close(library->handle); - library->handle = RTLD_DEFAULT; - } -#endif - rb_iv_set(self, "@name", libname != Qnil ? libname : rb_str_new2("[current process]")); - return self; -} - -static VALUE -library_dlsym(VALUE self, VALUE name) -{ - Library* library; - void* address = NULL; - Check_Type(name, T_STRING); - - Data_Get_Struct(self, Library, library); - address = dl_sym(library->handle, StringValueCStr(name)); - - return address != NULL ? symbol_new(self, address, name) : Qnil; -} - -/* - * call-seq: last_error - * @return [String] library's last error string - */ -static VALUE -library_dlerror(VALUE self) -{ - char errmsg[1024]; - dl_error(errmsg, sizeof(errmsg)); - return rb_tainted_str_new2(errmsg); -} - -static void -library_free(Library* library) -{ - /* dlclose() on MacOS tends to segfault - avoid it */ -#ifndef __APPLE__ - if (library->handle != NULL) { - dl_close(library->handle); - } -#endif - xfree(library); -} - -#if (defined(_WIN32) || defined(__WIN32__)) && !defined(__CYGWIN__) -static void* -dl_open(const char* name, int flags) -{ - if (name == NULL) { - return GetModuleHandle(NULL); - } else { - return LoadLibraryExA(name, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); - } -} - -static void -dl_error(char* buf, int size) -{ - FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), - 0, buf, size, NULL); -} -#endif - -static VALUE -symbol_allocate(VALUE klass) -{ - LibrarySymbol* sym; - VALUE obj = Data_Make_Struct(klass, LibrarySymbol, NULL, -1, sym); - sym->name = Qnil; - sym->library = Qnil; - sym->base.rbParent = Qnil; - - return obj; -} - - -/* - * call-seq: initialize_copy(other) - * @param [Object] other - * @return [nil] - * DO NOT CALL THIS METHOD - */ -static VALUE -symbol_initialize_copy(VALUE self, VALUE other) -{ - rb_raise(rb_eRuntimeError, "cannot duplicate symbol"); - return Qnil; -} - -static VALUE -symbol_new(VALUE library, void* address, VALUE name) -{ - LibrarySymbol* sym; - VALUE obj = Data_Make_Struct(SymbolClass, LibrarySymbol, symbol_mark, -1, sym); - - sym->base.memory.address = address; - sym->base.memory.size = LONG_MAX; - sym->base.memory.typeSize = 1; - sym->base.memory.flags = MEM_RD | MEM_WR; - sym->library = library; - sym->name = name; - - return obj; -} - -static void -symbol_mark(LibrarySymbol* sym) -{ - rb_gc_mark(sym->library); - rb_gc_mark(sym->name); -} - -/* - * call-seq: inspect - * @return [String] - * Inspect. - */ -static VALUE -symbol_inspect(VALUE self) -{ - LibrarySymbol* sym; - char buf[256]; - - Data_Get_Struct(self, LibrarySymbol, sym); - snprintf(buf, sizeof(buf), "#", - StringValueCStr(sym->name), sym->base.memory.address); - return rb_str_new2(buf); -} - -void -rbffi_DynamicLibrary_Init(VALUE moduleFFI) -{ - /* - * Document-class: FFI::DynamicLibrary - */ - LibraryClass = rb_define_class_under(moduleFFI, "DynamicLibrary", rb_cObject); - rb_global_variable(&LibraryClass); - /* - * Document-class: FFI::DynamicLibrary::Symbol < FFI::Pointer - * - * An instance of this class represents a library symbol. It may be a {Pointer pointer} to - * a function or to a variable. - */ - SymbolClass = rb_define_class_under(LibraryClass, "Symbol", rbffi_PointerClass); - rb_global_variable(&SymbolClass); - - /* - * Document-const: FFI::NativeLibrary - * Backward compatibility for FFI::DynamicLibrary - */ - rb_define_const(moduleFFI, "NativeLibrary", LibraryClass); /* backwards compat library */ - rb_define_alloc_func(LibraryClass, library_allocate); - rb_define_singleton_method(LibraryClass, "open", library_open, 2); - rb_define_singleton_method(LibraryClass, "last_error", library_dlerror, 0); - rb_define_method(LibraryClass, "initialize", library_initialize, 2); - /* - * Document-method: find_symbol - * call-seq: find_symbol(name) - * @param [String] name library symbol's name - * @return [FFI::DynamicLibrary::Symbol] library symbol - */ - rb_define_method(LibraryClass, "find_symbol", library_dlsym, 1); - /* - * Document-method: find_function - * call-seq: find_function(name) - * @param [String] name library function's name - * @return [FFI::DynamicLibrary::Symbol] library function symbol - */ - rb_define_method(LibraryClass, "find_function", library_dlsym, 1); - /* - * Document-method: find_variable - * call-seq: find_variable(name) - * @param [String] name library variable's name - * @return [FFI::DynamicLibrary::Symbol] library variable symbol - */ - rb_define_method(LibraryClass, "find_variable", library_dlsym, 1); - rb_define_method(LibraryClass, "last_error", library_dlerror, 0); - rb_define_attr(LibraryClass, "name", 1, 0); - - rb_define_alloc_func(SymbolClass, symbol_allocate); - rb_undef_method(SymbolClass, "new"); - rb_define_method(SymbolClass, "inspect", symbol_inspect, 0); - rb_define_method(SymbolClass, "initialize_copy", symbol_initialize_copy, 1); - -#define DEF(x) rb_define_const(LibraryClass, "RTLD_" #x, UINT2NUM(RTLD_##x)) - DEF(LAZY); - DEF(NOW); - DEF(GLOBAL); - DEF(LOCAL); - DEF(NOLOAD); - DEF(NODELETE); - DEF(FIRST); - DEF(DEEPBIND); - DEF(MEMBER); - DEF(BINDING_MASK); - DEF(LOCATION_MASK); - DEF(ALL_MASK); -#undef DEF - -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/DynamicLibrary.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/DynamicLibrary.h deleted file mode 100644 index 97bf7bc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/DynamicLibrary.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (c) 2008-2010 Wayne Meissner - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _LIBRARY_H -#define _LIBRARY_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* if these aren't defined (eg. windows), we need sensible defaults */ -#ifndef RTLD_LAZY -#define RTLD_LAZY 1 -#endif - -#ifndef RTLD_NOW -#define RTLD_NOW 2 -#endif - -#ifndef RTLD_LOCAL -#define RTLD_LOCAL 4 -#endif - -#ifndef RTLD_GLOBAL -#define RTLD_GLOBAL 8 -#endif - -/* If these aren't defined, they're not supported so define as 0 */ -#ifndef RTLD_NOLOAD -#define RTLD_NOLOAD 0 -#endif - -#ifndef RTLD_NODELETE -#define RTLD_NODELETE 0 -#endif - -#ifndef RTLD_FIRST -#define RTLD_FIRST 0 -#endif - -#ifndef RTLD_DEEPBIND -#define RTLD_DEEPBIND 0 -#endif - -#ifndef RTLD_MEMBER -#define RTLD_MEMBER 0 -#endif - -/* convenience */ -#ifndef RTLD_BINDING_MASK -#define RTLD_BINDING_MASK (RTLD_LAZY | RTLD_NOW) -#endif - -#ifndef RTLD_LOCATION_MASK -#define RTLD_LOCATION_MASK (RTLD_LOCAL | RTLD_GLOBAL) -#endif - -#ifndef RTLD_ALL_MASK -#define RTLD_ALL_MASK (RTLD_BINDING_MASK | RTLD_LOCATION_MASK | RTLD_NOLOAD | RTLD_NODELETE | RTLD_FIRST | RTLD_DEEPBIND | RTLD_MEMBER) -#endif - -typedef struct Library { - void* handle; -} Library; - -extern void rbffi_DynamicLibrary_Init(VALUE ffiModule); - -#ifdef __cplusplus -} -#endif - -#endif /* _LIBRARY_H */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/DynamicLibrary.o b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/DynamicLibrary.o deleted file mode 100644 index 7bac67b352d16c39960161878044aa810f5410f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14204 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 U9%q>JL1^BEMKV*75KWr@2kiKK@Bjb+ diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Function.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Function.c deleted file mode 100644 index a18b1b3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Function.c +++ /dev/null @@ -1,1000 +0,0 @@ -/* - * Copyright (c) 2009-2011 Wayne Meissner - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _MSC_VER -#include -#endif -#include -#ifndef _WIN32 -# include -# include -#endif - -#include -#ifndef _MSC_VER -# include -# include -#else -# include "win32/stdbool.h" -# if !defined(INT8_MIN) -# include "win32/stdint.h" -# endif -#endif -#include - -#include -#if defined(HAVE_NATIVETHREAD) && !defined(_WIN32) -#include -#endif -#include - -#include "rbffi.h" -#include "compat.h" - -#include "AbstractMemory.h" -#include "Pointer.h" -#include "Struct.h" -#include "Platform.h" -#include "Type.h" -#include "LastError.h" -#include "Call.h" -#include "ClosurePool.h" -#include "MappedType.h" -#include "Thread.h" -#include "LongDouble.h" -#include "MethodHandle.h" -#include "Function.h" - -typedef struct Function_ { - Pointer base; - FunctionType* info; - MethodHandle* methodHandle; - bool autorelease; - Closure* closure; - VALUE rbProc; - VALUE rbFunctionInfo; -} Function; - -static void function_mark(Function *); -static void function_free(Function *); -static VALUE function_init(VALUE self, VALUE rbFunctionInfo, VALUE rbProc); -static void callback_invoke(ffi_cif* cif, void* retval, void** parameters, void* user_data); -static bool callback_prep(void* ctx, void* code, Closure* closure, char* errmsg, size_t errmsgsize); -static void* callback_with_gvl(void* data); -static VALUE invoke_callback(void* data); -static VALUE save_callback_exception(void* data, VALUE exc); - -#define DEFER_ASYNC_CALLBACK 1 - - -#if defined(DEFER_ASYNC_CALLBACK) -static VALUE async_cb_event(void *); -static VALUE async_cb_call(void *); -#endif - -#ifdef HAVE_RB_THREAD_CALL_WITH_GVL -extern void *rb_thread_call_with_gvl(void *(*func)(void *), void *data1); -#endif - -VALUE rbffi_FunctionClass = Qnil; - -#if defined(DEFER_ASYNC_CALLBACK) -static VALUE async_cb_thread = Qnil; -#endif - -static ID id_call = 0, id_to_native = 0, id_from_native = 0, id_cbtable = 0, id_cb_ref = 0; - -struct gvl_callback { - Closure* closure; - void* retval; - void** parameters; - bool done; - rbffi_frame_t *frame; -#if defined(DEFER_ASYNC_CALLBACK) - struct gvl_callback* next; -# ifndef _WIN32 - pthread_cond_t async_cond; - pthread_mutex_t async_mutex; -# else - HANDLE async_event; -# endif -#endif -}; - - -#if defined(DEFER_ASYNC_CALLBACK) -static struct gvl_callback* async_cb_list = NULL; -# ifndef _WIN32 - static pthread_mutex_t async_cb_mutex = PTHREAD_MUTEX_INITIALIZER; - static pthread_cond_t async_cb_cond = PTHREAD_COND_INITIALIZER; -# if !(defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)) - static int async_cb_pipe[2]; -# endif -# else - static HANDLE async_cb_cond; - static CRITICAL_SECTION async_cb_lock; -# if !(defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)) - static int async_cb_pipe[2]; -# endif -# endif -#endif - - -static VALUE -function_allocate(VALUE klass) -{ - Function *fn; - VALUE obj; - - obj = Data_Make_Struct(klass, Function, function_mark, function_free, fn); - - fn->base.memory.flags = MEM_RD; - fn->base.rbParent = Qnil; - fn->rbProc = Qnil; - fn->rbFunctionInfo = Qnil; - fn->autorelease = true; - - return obj; -} - -static void -function_mark(Function *fn) -{ - rb_gc_mark(fn->base.rbParent); - rb_gc_mark(fn->rbProc); - rb_gc_mark(fn->rbFunctionInfo); -} - -static void -function_free(Function *fn) -{ - if (fn->methodHandle != NULL) { - rbffi_MethodHandle_Free(fn->methodHandle); - } - - if (fn->closure != NULL && fn->autorelease) { - rbffi_Closure_Free(fn->closure); - } - - xfree(fn); -} - -/* - * @param [Type, Symbol] return_type return type for the function - * @param [Array] param_types array of parameters types - * @param [Hash] options see {FFI::FunctionType} for available options - * @return [self] - * A new Function instance. - * - * Define a function from a Proc or a block. - * - * @overload initialize(return_type, param_types, options = {}) { |i| ... } - * @yieldparam i parameters for the function - * @overload initialize(return_type, param_types, proc, options = {}) - * @param [Proc] proc - */ -static VALUE -function_initialize(int argc, VALUE* argv, VALUE self) -{ - - VALUE rbReturnType = Qnil, rbParamTypes = Qnil, rbProc = Qnil, rbOptions = Qnil; - VALUE rbFunctionInfo = Qnil; - VALUE infoArgv[3]; - int nargs; - - nargs = rb_scan_args(argc, argv, "22", &rbReturnType, &rbParamTypes, &rbProc, &rbOptions); - - /* - * Callback with block, - * e.g. Function.new(:int, [ :int ]) { |i| blah } - * or Function.new(:int, [ :int ], { :convention => :stdcall }) { |i| blah } - */ - if (rb_block_given_p()) { - if (nargs > 3) { - rb_raise(rb_eArgError, "cannot create function with both proc/address and block"); - } - rbOptions = rbProc; - rbProc = rb_block_proc(); - } else { - /* Callback with proc, or Function with address - * e.g. Function.new(:int, [ :int ], Proc.new { |i| }) - * Function.new(:int, [ :int ], Proc.new { |i| }, { :convention => :stdcall }) - * Function.new(:int, [ :int ], addr) - * Function.new(:int, [ :int ], addr, { :convention => :stdcall }) - */ - } - - infoArgv[0] = rbReturnType; - infoArgv[1] = rbParamTypes; - infoArgv[2] = rbOptions; - rbFunctionInfo = rb_class_new_instance(rbOptions != Qnil ? 3 : 2, infoArgv, rbffi_FunctionTypeClass); - - function_init(self, rbFunctionInfo, rbProc); - - return self; -} - -/* - * call-seq: initialize_copy(other) - * @return [nil] - * DO NOT CALL THIS METHOD - */ -static VALUE -function_initialize_copy(VALUE self, VALUE other) -{ - rb_raise(rb_eRuntimeError, "cannot duplicate function instances"); - return Qnil; -} - -VALUE -rbffi_Function_NewInstance(VALUE rbFunctionInfo, VALUE rbProc) -{ - return function_init(function_allocate(rbffi_FunctionClass), rbFunctionInfo, rbProc); -} - -VALUE -rbffi_Function_ForProc(VALUE rbFunctionInfo, VALUE proc) -{ - VALUE callback, cbref, cbTable; - Function* fp; - - cbref = RTEST(rb_ivar_defined(proc, id_cb_ref)) ? rb_ivar_get(proc, id_cb_ref) : Qnil; - /* If the first callback reference has the same function function signature, use it */ - if (cbref != Qnil && CLASS_OF(cbref) == rbffi_FunctionClass) { - Data_Get_Struct(cbref, Function, fp); - if (fp->rbFunctionInfo == rbFunctionInfo) { - return cbref; - } - } - - cbTable = RTEST(rb_ivar_defined(proc, id_cbtable)) ? rb_ivar_get(proc, id_cbtable) : Qnil; - if (cbTable != Qnil && (callback = rb_hash_aref(cbTable, rbFunctionInfo)) != Qnil) { - return callback; - } - - /* No existing function for the proc with that signature, create a new one and cache it */ - callback = rbffi_Function_NewInstance(rbFunctionInfo, proc); - if (cbref == Qnil) { - /* If there is no other cb already cached for this proc, we can use the ivar slot */ - rb_ivar_set(proc, id_cb_ref, callback); - } else { - /* The proc instance has been used as more than one type of callback, store extras in a hash */ - cbTable = rb_hash_new(); - rb_ivar_set(proc, id_cbtable, cbTable); - rb_hash_aset(cbTable, rbFunctionInfo, callback); - } - - return callback; -} - -static VALUE -function_init(VALUE self, VALUE rbFunctionInfo, VALUE rbProc) -{ - Function* fn = NULL; - - Data_Get_Struct(self, Function, fn); - - fn->rbFunctionInfo = rbFunctionInfo; - - Data_Get_Struct(fn->rbFunctionInfo, FunctionType, fn->info); - - if (rb_obj_is_kind_of(rbProc, rbffi_PointerClass)) { - Pointer* orig; - Data_Get_Struct(rbProc, Pointer, orig); - fn->base.memory = orig->memory; - fn->base.rbParent = rbProc; - - } else if (rb_obj_is_kind_of(rbProc, rb_cProc) || rb_respond_to(rbProc, id_call)) { - if (fn->info->closurePool == NULL) { - fn->info->closurePool = rbffi_ClosurePool_New(sizeof(ffi_closure), callback_prep, fn->info); - if (fn->info->closurePool == NULL) { - rb_raise(rb_eNoMemError, "failed to create closure pool"); - } - } - -#if defined(DEFER_ASYNC_CALLBACK) - if (async_cb_thread == Qnil) { -#if !(defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)) && defined(_WIN32) - _pipe(async_cb_pipe, 1024, O_BINARY); -#elif !(defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)) - pipe(async_cb_pipe); - fcntl(async_cb_pipe[0], F_SETFL, fcntl(async_cb_pipe[0], F_GETFL) | O_NONBLOCK); - fcntl(async_cb_pipe[1], F_SETFL, fcntl(async_cb_pipe[1], F_GETFL) | O_NONBLOCK); -#endif - async_cb_thread = rb_thread_create(async_cb_event, NULL); - } - -#endif - - fn->closure = rbffi_Closure_Alloc(fn->info->closurePool); - fn->closure->info = fn; - fn->base.memory.address = fn->closure->code; - fn->base.memory.size = sizeof(*fn->closure); - fn->autorelease = true; - - } else { - rb_raise(rb_eTypeError, "wrong argument type %s, expected pointer or proc", - rb_obj_classname(rbProc)); - } - - fn->rbProc = rbProc; - - return self; -} - -/* - * call-seq: call(*args) - * @param [Array] args function arguments - * @return [FFI::Type] - * Call the function - */ -static VALUE -function_call(int argc, VALUE* argv, VALUE self) -{ - Function* fn; - - Data_Get_Struct(self, Function, fn); - - return (*fn->info->invoke)(argc, argv, fn->base.memory.address, fn->info); -} - -/* - * call-seq: attach(m, name) - * @param [Module] m - * @param [String] name - * @return [self] - * Attach a Function to the Module +m+ as +name+. - */ -static VALUE -function_attach(VALUE self, VALUE module, VALUE name) -{ - Function* fn; - char var[1024]; - - Data_Get_Struct(self, Function, fn); - - if (fn->info->parameterCount == -1) { - rb_raise(rb_eRuntimeError, "cannot attach variadic functions"); - return Qnil; - } - - if (!rb_obj_is_kind_of(module, rb_cModule)) { - rb_raise(rb_eRuntimeError, "trying to attach function to non-module"); - return Qnil; - } - - if (fn->methodHandle == NULL) { - fn->methodHandle = rbffi_MethodHandle_Alloc(fn->info, fn->base.memory.address); - } - - /* - * Stash the Function in a module variable so it does not get garbage collected - */ - snprintf(var, sizeof(var), "@@%s", StringValueCStr(name)); - rb_cv_set(module, var, self); - - rb_define_singleton_method(module, StringValueCStr(name), - rbffi_MethodHandle_CodeAddress(fn->methodHandle), -1); - - - rb_define_method(module, StringValueCStr(name), - rbffi_MethodHandle_CodeAddress(fn->methodHandle), -1); - - return self; -} - -/* - * call-seq: autorelease = autorelease - * @param [Boolean] autorelease - * @return [self] - * Set +autorelease+ attribute (See {Pointer}). - */ -static VALUE -function_set_autorelease(VALUE self, VALUE autorelease) -{ - Function* fn; - - Data_Get_Struct(self, Function, fn); - - fn->autorelease = RTEST(autorelease); - - return self; -} - -static VALUE -function_autorelease_p(VALUE self) -{ - Function* fn; - - Data_Get_Struct(self, Function, fn); - - return fn->autorelease ? Qtrue : Qfalse; -} - -/* - * call-seq: free - * @return [self] - * Free memory allocated by Function. - */ -static VALUE -function_release(VALUE self) -{ - Function* fn; - - Data_Get_Struct(self, Function, fn); - - if (fn->closure == NULL) { - rb_raise(rb_eRuntimeError, "cannot free function which was not allocated"); - } - - rbffi_Closure_Free(fn->closure); - fn->closure = NULL; - - return self; -} - -static void -callback_invoke(ffi_cif* cif, void* retval, void** parameters, void* user_data) -{ - struct gvl_callback cb = { 0 }; - - cb.closure = (Closure *) user_data; - cb.retval = retval; - cb.parameters = parameters; - cb.done = false; - cb.frame = rbffi_frame_current(); - - if (cb.frame != NULL) cb.frame->exc = Qnil; - if (cb.frame != NULL && cb.frame->has_gvl) { - callback_with_gvl(&cb); - -#if defined(HAVE_RB_THREAD_CALL_WITH_GVL) - } else if (cb.frame != NULL) { - rb_thread_call_with_gvl(callback_with_gvl, &cb); -#endif -#if defined(DEFER_ASYNC_CALLBACK) && !defined(_WIN32) - } else { - bool empty = false; - - pthread_mutex_init(&cb.async_mutex, NULL); - pthread_cond_init(&cb.async_cond, NULL); - - /* Now signal the async callback thread */ - pthread_mutex_lock(&async_cb_mutex); - empty = async_cb_list == NULL; - cb.next = async_cb_list; - async_cb_list = &cb; - -#if !(defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)) - pthread_mutex_unlock(&async_cb_mutex); - /* Only signal if the list was empty */ - if (empty) { - char c; - write(async_cb_pipe[1], &c, 1); - } -#else - pthread_cond_signal(&async_cb_cond); - pthread_mutex_unlock(&async_cb_mutex); -#endif - - /* Wait for the thread executing the ruby callback to signal it is done */ - pthread_mutex_lock(&cb.async_mutex); - while (!cb.done) { - pthread_cond_wait(&cb.async_cond, &cb.async_mutex); - } - pthread_mutex_unlock(&cb.async_mutex); - pthread_cond_destroy(&cb.async_cond); - pthread_mutex_destroy(&cb.async_mutex); - -#elif defined(DEFER_ASYNC_CALLBACK) && defined(_WIN32) - } else { - bool empty = false; - - cb.async_event = CreateEvent(NULL, FALSE, FALSE, NULL); - - /* Now signal the async callback thread */ - EnterCriticalSection(&async_cb_lock); - empty = async_cb_list == NULL; - cb.next = async_cb_list; - async_cb_list = &cb; - LeaveCriticalSection(&async_cb_lock); - -#if !(defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)) - /* Only signal if the list was empty */ - if (empty) { - char c; - write(async_cb_pipe[1], &c, 1); - } -#else - SetEvent(async_cb_cond); -#endif - - /* Wait for the thread executing the ruby callback to signal it is done */ - WaitForSingleObject(cb.async_event, INFINITE); - CloseHandle(cb.async_event); -#endif - } -} - -#if defined(DEFER_ASYNC_CALLBACK) -struct async_wait { - void* cb; - bool stop; -}; - -static VALUE async_cb_wait(void *); -static void async_cb_stop(void *); - -#if defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL) -static VALUE -async_cb_event(void* unused) -{ - struct async_wait w = { 0 }; - - w.stop = false; - while (!w.stop) { -#if defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL) - rb_thread_call_without_gvl(async_cb_wait, &w, async_cb_stop, &w); -#else - rb_thread_blocking_region(async_cb_wait, &w, async_cb_stop, &w); -#endif - if (w.cb != NULL) { - /* Start up a new ruby thread to run the ruby callback */ - rb_thread_create(async_cb_call, w.cb); - } - } - - return Qnil; -} - -#elif defined(_WIN32) -static VALUE -async_cb_event(void* unused) -{ - while (true) { - struct gvl_callback* cb; - char buf[64]; - fd_set rfds; - - FD_ZERO(&rfds); - FD_SET(async_cb_pipe[0], &rfds); - rb_thread_select(async_cb_pipe[0] + 1, &rfds, NULL, NULL, NULL); - read(async_cb_pipe[0], buf, sizeof(buf)); - - EnterCriticalSection(&async_cb_lock); - cb = async_cb_list; - async_cb_list = NULL; - LeaveCriticalSection(&async_cb_lock); - - while (cb != NULL) { - struct gvl_callback* next = cb->next; - /* Start up a new ruby thread to run the ruby callback */ - rb_thread_create(async_cb_call, cb); - cb = next; - } - } - - return Qnil; -} -#else -static VALUE -async_cb_event(void* unused) -{ - while (true) { - struct gvl_callback* cb; - char buf[64]; - - if (read(async_cb_pipe[0], buf, sizeof(buf)) < 0) { - rb_thread_wait_fd(async_cb_pipe[0]); - while (read(async_cb_pipe[0], buf, sizeof (buf)) < 0) { - if (rb_io_wait_readable(async_cb_pipe[0]) != Qtrue) { - return Qfalse; - } - } - } - - pthread_mutex_lock(&async_cb_mutex); - cb = async_cb_list; - async_cb_list = NULL; - pthread_mutex_unlock(&async_cb_mutex); - - while (cb != NULL) { - struct gvl_callback* next = cb->next; - /* Start up a new ruby thread to run the ruby callback */ - rb_thread_create(async_cb_call, cb); - cb = next; - } - } - - return Qnil; -} -#endif - -#ifdef _WIN32 -static VALUE -async_cb_wait(void *data) -{ - struct async_wait* w = (struct async_wait *) data; - - w->cb = NULL; - - EnterCriticalSection(&async_cb_lock); - - while (!w->stop && async_cb_list == NULL) { - LeaveCriticalSection(&async_cb_lock); - WaitForSingleObject(async_cb_cond, INFINITE); - EnterCriticalSection(&async_cb_lock); - } - - if (async_cb_list != NULL) { - w->cb = async_cb_list; - async_cb_list = async_cb_list->next; - } - - LeaveCriticalSection(&async_cb_lock); - - return Qnil; -} - -static void -async_cb_stop(void *data) -{ - struct async_wait* w = (struct async_wait *) data; - - EnterCriticalSection(&async_cb_lock); - w->stop = true; - LeaveCriticalSection(&async_cb_lock); - SetEvent(async_cb_cond); -} - -#else -static VALUE -async_cb_wait(void *data) -{ - struct async_wait* w = (struct async_wait *) data; - - w->cb = NULL; - - pthread_mutex_lock(&async_cb_mutex); - - while (!w->stop && async_cb_list == NULL) { - pthread_cond_wait(&async_cb_cond, &async_cb_mutex); - } - - if (async_cb_list != NULL) { - w->cb = async_cb_list; - async_cb_list = async_cb_list->next; - } - - pthread_mutex_unlock(&async_cb_mutex); - - return Qnil; -} - -static void -async_cb_stop(void *data) -{ - struct async_wait* w = (struct async_wait *) data; - - pthread_mutex_lock(&async_cb_mutex); - w->stop = true; - pthread_cond_signal(&async_cb_cond); - pthread_mutex_unlock(&async_cb_mutex); -} -#endif - -static VALUE -async_cb_call(void *data) -{ - struct gvl_callback* cb = (struct gvl_callback *) data; - - callback_with_gvl(data); - - /* Signal the original native thread that the ruby code has completed */ -#ifdef _WIN32 - SetEvent(cb->async_event); -#else - pthread_mutex_lock(&cb->async_mutex); - cb->done = true; - pthread_cond_signal(&cb->async_cond); - pthread_mutex_unlock(&cb->async_mutex); -#endif - - return Qnil; -} - -#endif - -static void * -callback_with_gvl(void* data) -{ - rb_rescue2(invoke_callback, (VALUE) data, save_callback_exception, (VALUE) data, rb_eException, (VALUE) 0); - return NULL; -} - -static VALUE -invoke_callback(void* data) -{ - struct gvl_callback* cb = (struct gvl_callback *) data; - - Function* fn = (Function *) cb->closure->info; - FunctionType *cbInfo = fn->info; - Type* returnType = cbInfo->returnType; - void* retval = cb->retval; - void** parameters = cb->parameters; - VALUE* rbParams; - VALUE rbReturnType = cbInfo->rbReturnType; - VALUE rbReturnValue; - int i; - - rbParams = ALLOCA_N(VALUE, cbInfo->parameterCount); - for (i = 0; i < cbInfo->parameterCount; ++i) { - VALUE param; - Type* paramType = cbInfo->parameterTypes[i]; - VALUE rbParamType = rb_ary_entry(cbInfo->rbParameterTypes, i); - - if (unlikely(paramType->nativeType == NATIVE_MAPPED)) { - rbParamType = ((MappedType *) paramType)->rbType; - paramType = ((MappedType *) paramType)->type; - } - - switch (paramType->nativeType) { - case NATIVE_INT8: - param = INT2NUM(*(int8_t *) parameters[i]); - break; - case NATIVE_UINT8: - param = UINT2NUM(*(uint8_t *) parameters[i]); - break; - case NATIVE_INT16: - param = INT2NUM(*(int16_t *) parameters[i]); - break; - case NATIVE_UINT16: - param = UINT2NUM(*(uint16_t *) parameters[i]); - break; - case NATIVE_INT32: - param = INT2NUM(*(int32_t *) parameters[i]); - break; - case NATIVE_UINT32: - param = UINT2NUM(*(uint32_t *) parameters[i]); - break; - case NATIVE_INT64: - param = LL2NUM(*(int64_t *) parameters[i]); - break; - case NATIVE_UINT64: - param = ULL2NUM(*(uint64_t *) parameters[i]); - break; - case NATIVE_LONG: - param = LONG2NUM(*(long *) parameters[i]); - break; - case NATIVE_ULONG: - param = ULONG2NUM(*(unsigned long *) parameters[i]); - break; - case NATIVE_FLOAT32: - param = rb_float_new(*(float *) parameters[i]); - break; - case NATIVE_FLOAT64: - param = rb_float_new(*(double *) parameters[i]); - break; - case NATIVE_LONGDOUBLE: - param = rbffi_longdouble_new(*(long double *) parameters[i]); - break; - case NATIVE_STRING: - param = (*(void **) parameters[i] != NULL) ? rb_tainted_str_new2(*(char **) parameters[i]) : Qnil; - break; - case NATIVE_POINTER: - param = rbffi_Pointer_NewInstance(*(void **) parameters[i]); - break; - case NATIVE_BOOL: - param = (*(uint8_t *) parameters[i]) ? Qtrue : Qfalse; - break; - - case NATIVE_FUNCTION: - case NATIVE_CALLBACK: - case NATIVE_STRUCT: - param = rbffi_NativeValue_ToRuby(paramType, rbParamType, parameters[i]); - break; - - default: - param = Qnil; - break; - } - - /* Convert the native value into a custom ruby value */ - if (unlikely(cbInfo->parameterTypes[i]->nativeType == NATIVE_MAPPED)) { - VALUE values[] = { param, Qnil }; - param = rb_funcall2(((MappedType *) cbInfo->parameterTypes[i])->rbConverter, id_from_native, 2, values); - } - - rbParams[i] = param; - } - - rbReturnValue = rb_funcall2(fn->rbProc, id_call, cbInfo->parameterCount, rbParams); - RB_GC_GUARD_PTR(rbParams); - - if (unlikely(returnType->nativeType == NATIVE_MAPPED)) { - VALUE values[] = { rbReturnValue, Qnil }; - rbReturnValue = rb_funcall2(((MappedType *) returnType)->rbConverter, id_to_native, 2, values); - rbReturnType = ((MappedType *) returnType)->rbType; - returnType = ((MappedType* ) returnType)->type; - } - - if (rbReturnValue == Qnil || TYPE(rbReturnValue) == T_NIL) { - memset(retval, 0, returnType->ffiType->size); - } else switch (returnType->nativeType) { - case NATIVE_INT8: - case NATIVE_INT16: - case NATIVE_INT32: - *((ffi_sarg *) retval) = NUM2INT(rbReturnValue); - break; - case NATIVE_UINT8: - case NATIVE_UINT16: - case NATIVE_UINT32: - *((ffi_arg *) retval) = NUM2UINT(rbReturnValue); - break; - case NATIVE_INT64: - *((int64_t *) retval) = NUM2LL(rbReturnValue); - break; - case NATIVE_UINT64: - *((uint64_t *) retval) = NUM2ULL(rbReturnValue); - break; - case NATIVE_LONG: - *((ffi_sarg *) retval) = NUM2LONG(rbReturnValue); - break; - case NATIVE_ULONG: - *((ffi_arg *) retval) = NUM2ULONG(rbReturnValue); - break; - case NATIVE_FLOAT32: - *((float *) retval) = (float) NUM2DBL(rbReturnValue); - break; - case NATIVE_FLOAT64: - *((double *) retval) = NUM2DBL(rbReturnValue); - break; - case NATIVE_POINTER: - if (TYPE(rbReturnValue) == T_DATA && rb_obj_is_kind_of(rbReturnValue, rbffi_PointerClass)) { - *((void **) retval) = ((AbstractMemory *) DATA_PTR(rbReturnValue))->address; - } else { - /* Default to returning NULL if not a value pointer object. handles nil case as well */ - *((void **) retval) = NULL; - } - break; - - case NATIVE_BOOL: - *((ffi_arg *) retval) = rbReturnValue == Qtrue; - break; - - case NATIVE_FUNCTION: - case NATIVE_CALLBACK: - if (TYPE(rbReturnValue) == T_DATA && rb_obj_is_kind_of(rbReturnValue, rbffi_PointerClass)) { - - *((void **) retval) = ((AbstractMemory *) DATA_PTR(rbReturnValue))->address; - - } else if (rb_obj_is_kind_of(rbReturnValue, rb_cProc) || rb_respond_to(rbReturnValue, id_call)) { - VALUE function; - - function = rbffi_Function_ForProc(rbReturnType, rbReturnValue); - - *((void **) retval) = ((AbstractMemory *) DATA_PTR(function))->address; - } else { - *((void **) retval) = NULL; - } - break; - - case NATIVE_STRUCT: - if (TYPE(rbReturnValue) == T_DATA && rb_obj_is_kind_of(rbReturnValue, rbffi_StructClass)) { - AbstractMemory* memory = ((Struct *) DATA_PTR(rbReturnValue))->pointer; - - if (memory->address != NULL) { - memcpy(retval, memory->address, returnType->ffiType->size); - - } else { - memset(retval, 0, returnType->ffiType->size); - } - - } else { - memset(retval, 0, returnType->ffiType->size); - } - break; - - default: - *((ffi_arg *) retval) = 0; - break; - } - - return Qnil; -} - -static VALUE -save_callback_exception(void* data, VALUE exc) -{ - struct gvl_callback* cb = (struct gvl_callback *) data; - - memset(cb->retval, 0, ((Function *) cb->closure->info)->info->returnType->ffiType->size); - if (cb->frame != NULL) cb->frame->exc = exc; - - return Qnil; -} - -static bool -callback_prep(void* ctx, void* code, Closure* closure, char* errmsg, size_t errmsgsize) -{ - FunctionType* fnInfo = (FunctionType *) ctx; - ffi_status ffiStatus; - - ffiStatus = ffi_prep_closure(code, &fnInfo->ffi_cif, callback_invoke, closure); - if (ffiStatus != FFI_OK) { - snprintf(errmsg, errmsgsize, "ffi_prep_closure failed. status=%#x", ffiStatus); - return false; - } - - return true; -} - -void -rbffi_Function_Init(VALUE moduleFFI) -{ - rbffi_FunctionInfo_Init(moduleFFI); - /* - * Document-class: FFI::Function < FFI::Pointer - */ - rbffi_FunctionClass = rb_define_class_under(moduleFFI, "Function", rbffi_PointerClass); - - rb_global_variable(&rbffi_FunctionClass); - rb_define_alloc_func(rbffi_FunctionClass, function_allocate); - - rb_define_method(rbffi_FunctionClass, "initialize", function_initialize, -1); - rb_define_method(rbffi_FunctionClass, "initialize_copy", function_initialize_copy, 1); - rb_define_method(rbffi_FunctionClass, "call", function_call, -1); - rb_define_method(rbffi_FunctionClass, "attach", function_attach, 2); - rb_define_method(rbffi_FunctionClass, "free", function_release, 0); - rb_define_method(rbffi_FunctionClass, "autorelease=", function_set_autorelease, 1); - /* - * call-seq: autorelease - * @return [Boolean] - * Get +autorelease+ attribute. - * Synonymous for {#autorelease?}. - */ - rb_define_method(rbffi_FunctionClass, "autorelease", function_autorelease_p, 0); - /* - * call-seq: autorelease? - * @return [Boolean] +autorelease+ attribute - * Get +autorelease+ attribute. - */ - rb_define_method(rbffi_FunctionClass, "autorelease?", function_autorelease_p, 0); - - id_call = rb_intern("call"); - id_cbtable = rb_intern("@__ffi_callback_table__"); - id_cb_ref = rb_intern("@__ffi_callback__"); - id_to_native = rb_intern("to_native"); - id_from_native = rb_intern("from_native"); -#if defined(_WIN32) - InitializeCriticalSection(&async_cb_lock); - async_cb_cond = CreateEvent(NULL, FALSE, FALSE, NULL); -#endif -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Function.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Function.h deleted file mode 100644 index 052aaf6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Function.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2009, Wayne Meissner - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef RBFFI_FUNCTION_H -#define RBFFI_FUNCTION_H - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef _MSC_VER -# include -#else -# include "win32/stdbool.h" -#endif - -#include - -typedef struct FunctionType_ FunctionType; - -#include "Type.h" -#include "Call.h" -#include "ClosurePool.h" - -struct FunctionType_ { - Type type; /* The native type of a FunctionInfo object */ - VALUE rbReturnType; - VALUE rbParameterTypes; - - Type* returnType; - Type** parameterTypes; - NativeType* nativeParameterTypes; - ffi_type* ffiReturnType; - ffi_type** ffiParameterTypes; - ffi_cif ffi_cif; - Invoker invoke; - ClosurePool* closurePool; - int parameterCount; - int flags; - ffi_abi abi; - int callbackCount; - VALUE* callbackParameters; - VALUE rbEnums; - bool ignoreErrno; - bool blocking; - bool hasStruct; -}; - -extern VALUE rbffi_FunctionTypeClass, rbffi_FunctionClass; - -void rbffi_Function_Init(VALUE moduleFFI); -VALUE rbffi_Function_NewInstance(VALUE functionInfo, VALUE proc); -VALUE rbffi_Function_ForProc(VALUE cbInfo, VALUE proc); -void rbffi_FunctionInfo_Init(VALUE moduleFFI); - -#ifdef __cplusplus -} -#endif - -#endif /* RBFFI_FUNCTION_H */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Function.o b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Function.o deleted file mode 100644 index 3b76934090f503e364e6c1c229bbdacbc9653899..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39984 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 - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _MSC_VER -# include -#endif -#include -#include - -#ifndef _MSC_VER -# include -# include -#else -# include "win32/stdbool.h" -#endif - -#include -#include - -#include -#include "rbffi.h" -#include "compat.h" - -#include "AbstractMemory.h" -#include "Types.h" -#include "Type.h" -#include "StructByValue.h" -#include "Function.h" - -static VALUE fntype_allocate(VALUE klass); -static VALUE fntype_initialize(int argc, VALUE* argv, VALUE self); -static void fntype_mark(FunctionType*); -static void fntype_free(FunctionType *); - -VALUE rbffi_FunctionTypeClass = Qnil; - -static VALUE -fntype_allocate(VALUE klass) -{ - FunctionType* fnInfo; - VALUE obj = Data_Make_Struct(klass, FunctionType, fntype_mark, fntype_free, fnInfo); - - fnInfo->type.ffiType = &ffi_type_pointer; - fnInfo->type.nativeType = NATIVE_FUNCTION; - fnInfo->rbReturnType = Qnil; - fnInfo->rbParameterTypes = Qnil; - fnInfo->rbEnums = Qnil; - fnInfo->invoke = rbffi_CallFunction; - fnInfo->closurePool = NULL; - - return obj; -} - -static void -fntype_mark(FunctionType* fnInfo) -{ - rb_gc_mark(fnInfo->rbReturnType); - rb_gc_mark(fnInfo->rbParameterTypes); - rb_gc_mark(fnInfo->rbEnums); - if (fnInfo->callbackCount > 0 && fnInfo->callbackParameters != NULL) { - rb_gc_mark_locations(&fnInfo->callbackParameters[0], &fnInfo->callbackParameters[fnInfo->callbackCount]); - } -} - -static void -fntype_free(FunctionType* fnInfo) -{ - xfree(fnInfo->parameterTypes); - xfree(fnInfo->ffiParameterTypes); - xfree(fnInfo->nativeParameterTypes); - xfree(fnInfo->callbackParameters); - if (fnInfo->closurePool != NULL) { - rbffi_ClosurePool_Free(fnInfo->closurePool); - } - xfree(fnInfo); -} - -/* - * call-seq: initialize(return_type, param_types, options={}) - * @param [Type, Symbol] return_type return type for the function - * @param [Array] param_types array of parameters types - * @param [Hash] options - * @option options [Boolean] :blocking set to true if the C function is a blocking call - * @option options [Symbol] :convention calling convention see {FFI::Library#calling_convention} - * @option options [FFI::Enums] :enums - * @return [self] - * A new FunctionType instance. - */ -static VALUE -fntype_initialize(int argc, VALUE* argv, VALUE self) -{ - FunctionType *fnInfo; - ffi_status status; - VALUE rbReturnType = Qnil, rbParamTypes = Qnil, rbOptions = Qnil; - VALUE rbEnums = Qnil, rbConvention = Qnil, rbBlocking = Qnil; -#if defined(X86_WIN32) - VALUE rbConventionStr; -#endif - int i, nargs; - - nargs = rb_scan_args(argc, argv, "21", &rbReturnType, &rbParamTypes, &rbOptions); - if (nargs >= 3 && rbOptions != Qnil) { - rbConvention = rb_hash_aref(rbOptions, ID2SYM(rb_intern("convention"))); - rbEnums = rb_hash_aref(rbOptions, ID2SYM(rb_intern("enums"))); - rbBlocking = rb_hash_aref(rbOptions, ID2SYM(rb_intern("blocking"))); - } - - Check_Type(rbParamTypes, T_ARRAY); - - Data_Get_Struct(self, FunctionType, fnInfo); - fnInfo->parameterCount = (int) RARRAY_LEN(rbParamTypes); - fnInfo->parameterTypes = xcalloc(fnInfo->parameterCount, sizeof(*fnInfo->parameterTypes)); - fnInfo->ffiParameterTypes = xcalloc(fnInfo->parameterCount, sizeof(ffi_type *)); - fnInfo->nativeParameterTypes = xcalloc(fnInfo->parameterCount, sizeof(*fnInfo->nativeParameterTypes)); - fnInfo->rbParameterTypes = rb_ary_new2(fnInfo->parameterCount); - fnInfo->rbEnums = rbEnums; - fnInfo->blocking = RTEST(rbBlocking); - fnInfo->hasStruct = false; - - for (i = 0; i < fnInfo->parameterCount; ++i) { - VALUE entry = rb_ary_entry(rbParamTypes, i); - VALUE type = rbffi_Type_Lookup(entry); - - if (!RTEST(type)) { - VALUE typeName = rb_funcall2(entry, rb_intern("inspect"), 0, NULL); - rb_raise(rb_eTypeError, "Invalid parameter type (%s)", RSTRING_PTR(typeName)); - } - - if (rb_obj_is_kind_of(type, rbffi_FunctionTypeClass)) { - REALLOC_N(fnInfo->callbackParameters, VALUE, fnInfo->callbackCount + 1); - fnInfo->callbackParameters[fnInfo->callbackCount++] = type; - } - - if (rb_obj_is_kind_of(type, rbffi_StructByValueClass)) { - fnInfo->hasStruct = true; - } - - rb_ary_push(fnInfo->rbParameterTypes, type); - Data_Get_Struct(type, Type, fnInfo->parameterTypes[i]); - fnInfo->ffiParameterTypes[i] = fnInfo->parameterTypes[i]->ffiType; - fnInfo->nativeParameterTypes[i] = fnInfo->parameterTypes[i]->nativeType; - } - - fnInfo->rbReturnType = rbffi_Type_Lookup(rbReturnType); - if (!RTEST(fnInfo->rbReturnType)) { - VALUE typeName = rb_funcall2(rbReturnType, rb_intern("inspect"), 0, NULL); - rb_raise(rb_eTypeError, "Invalid return type (%s)", RSTRING_PTR(typeName)); - } - - if (rb_obj_is_kind_of(fnInfo->rbReturnType, rbffi_StructByValueClass)) { - fnInfo->hasStruct = true; - } - - Data_Get_Struct(fnInfo->rbReturnType, Type, fnInfo->returnType); - fnInfo->ffiReturnType = fnInfo->returnType->ffiType; - - -#if defined(X86_WIN32) - rbConventionStr = (rbConvention != Qnil) ? rb_funcall2(rbConvention, rb_intern("to_s"), 0, NULL) : Qnil; - fnInfo->abi = (rbConventionStr != Qnil && strcmp(StringValueCStr(rbConventionStr), "stdcall") == 0) - ? FFI_STDCALL : FFI_DEFAULT_ABI; -#else - fnInfo->abi = FFI_DEFAULT_ABI; -#endif - - status = ffi_prep_cif(&fnInfo->ffi_cif, fnInfo->abi, fnInfo->parameterCount, - fnInfo->ffiReturnType, fnInfo->ffiParameterTypes); - switch (status) { - case FFI_BAD_ABI: - rb_raise(rb_eArgError, "Invalid ABI specified"); - case FFI_BAD_TYPEDEF: - rb_raise(rb_eArgError, "Invalid argument type specified"); - case FFI_OK: - break; - default: - rb_raise(rb_eArgError, "Unknown FFI error"); - } - - fnInfo->invoke = rbffi_GetInvoker(fnInfo); - - return self; -} - -/* - * call-seq: result_type - * @return [Type] - * Get the return type of the function type - */ -static VALUE -fntype_result_type(VALUE self) -{ - FunctionType* ft; - - Data_Get_Struct(self, FunctionType, ft); - - return ft->rbReturnType; -} - -/* - * call-seq: param_types - * @return [Array] - * Get parameters types. - */ -static VALUE -fntype_param_types(VALUE self) -{ - FunctionType* ft; - - Data_Get_Struct(self, FunctionType, ft); - - return rb_ary_dup(ft->rbParameterTypes); -} - -void -rbffi_FunctionInfo_Init(VALUE moduleFFI) -{ - VALUE ffi_Type; - - ffi_Type = rbffi_TypeClass; - - /* - * Document-class: FFI::FunctionType < FFI::Type - */ - rbffi_FunctionTypeClass = rb_define_class_under(moduleFFI, "FunctionType",ffi_Type); - rb_global_variable(&rbffi_FunctionTypeClass); - /* - * Document-const: FFI::CallbackInfo = FFI::FunctionType - */ - rb_define_const(moduleFFI, "CallbackInfo", rbffi_FunctionTypeClass); - /* - * Document-const: FFI::FunctionInfo = FFI::FunctionType - */ - rb_define_const(moduleFFI, "FunctionInfo", rbffi_FunctionTypeClass); - /* - * Document-const: FFI::Type::Function = FFI::FunctionType - */ - rb_define_const(ffi_Type, "Function", rbffi_FunctionTypeClass); - - rb_define_alloc_func(rbffi_FunctionTypeClass, fntype_allocate); - rb_define_method(rbffi_FunctionTypeClass, "initialize", fntype_initialize, -1); - rb_define_method(rbffi_FunctionTypeClass, "result_type", fntype_result_type, 0); - rb_define_method(rbffi_FunctionTypeClass, "param_types", fntype_param_types, 0); - -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/FunctionInfo.o b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/FunctionInfo.o deleted file mode 100644 index f0bd1f09730b6b86c2790b2edf59bb91734a81cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15868 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 - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _MSC_VER -# include -#endif -#include -#include -#ifndef _MSC_VER -# include -# include -#else -# include "win32/stdbool.h" -#endif -#include -#include - -#include "LastError.h" - -#if defined(HAVE_NATIVETHREAD) && !defined(_WIN32) && !defined(__WIN32__) -# include -# define USE_PTHREAD_LOCAL -#endif - -typedef struct ThreadData { - int td_errno; -} ThreadData; - -#if defined(USE_PTHREAD_LOCAL) -static pthread_key_t threadDataKey; -#endif - -static inline ThreadData* thread_data_get(void); - -#if defined(USE_PTHREAD_LOCAL) - -static ThreadData* -thread_data_init(void) -{ - ThreadData* td = xcalloc(1, sizeof(ThreadData)); - - pthread_setspecific(threadDataKey, td); - - return td; -} - - -static inline ThreadData* -thread_data_get(void) -{ - ThreadData* td = pthread_getspecific(threadDataKey); - return td != NULL ? td : thread_data_init(); -} - -static void -thread_data_free(void *ptr) -{ - xfree(ptr); -} - -#else -static ID id_thread_data; - -static ThreadData* -thread_data_init(void) -{ - ThreadData* td; - VALUE obj; - - obj = Data_Make_Struct(rb_cObject, ThreadData, NULL, -1, td); - rb_thread_local_aset(rb_thread_current(), id_thread_data, obj); - - return td; -} - -static inline ThreadData* -thread_data_get() -{ - VALUE obj = rb_thread_local_aref(rb_thread_current(), id_thread_data); - - if (obj != Qnil && TYPE(obj) == T_DATA) { - return (ThreadData *) DATA_PTR(obj); - } - - return thread_data_init(); -} - -#endif - - -/* - * call-seq: error - * @return [Numeric] - * Get +errno+ value. - */ -static VALUE -get_last_error(VALUE self) -{ - return INT2NUM(thread_data_get()->td_errno); -} - - -/* - * call-seq: error(error) - * @param [Numeric] error - * @return [nil] - * Set +errno+ value. - */ -static VALUE -set_last_error(VALUE self, VALUE error) -{ - -#ifdef _WIN32 - SetLastError(NUM2INT(error)); -#else - errno = NUM2INT(error); -#endif - - return Qnil; -} - - -void -rbffi_save_errno(void) -{ - int error = 0; - -#ifdef _WIN32 - error = GetLastError(); -#else - error = errno; -#endif - - thread_data_get()->td_errno = error; -} - - -void -rbffi_LastError_Init(VALUE moduleFFI) -{ - /* - * Document-module: FFI::LastError - * This module defines a couple of method to set and get +errno+ - * for current thread. - */ - VALUE moduleError = rb_define_module_under(moduleFFI, "LastError"); - - rb_define_module_function(moduleError, "error", get_last_error, 0); - rb_define_module_function(moduleError, "error=", set_last_error, 1); - -#if defined(USE_PTHREAD_LOCAL) - pthread_key_create(&threadDataKey, thread_data_free); -#else - id_thread_data = rb_intern("ffi_thread_local_data"); -#endif /* USE_PTHREAD_LOCAL */ -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/LastError.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/LastError.h deleted file mode 100644 index ee1dfbb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/LastError.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2008, 2009, Wayne Meissner - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef RBFFI_LASTERROR_H -#define RBFFI_LASTERROR_H - -#ifdef __cplusplus -extern "C" { -#endif - - -void rbffi_LastError_Init(VALUE moduleFFI); - -void rbffi_save_errno(void); - -#ifdef __cplusplus -} -#endif - -#endif /* RBFFI_LASTERROR_H */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/LastError.o b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/LastError.o deleted file mode 100644 index f2d0c13a0d863b1e02e005e1d81c478af6e78b5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5820 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 diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/LongDouble.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/LongDouble.c deleted file mode 100644 index a21883a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/LongDouble.c +++ /dev/null @@ -1,63 +0,0 @@ -#include "LongDouble.h" -#include -#include -#include - -#if defined (__CYGWIN__) || defined(__INTERIX) -# define strtold(str, endptr) ((long double) strtod((str), (endptr))) -#endif /* defined (__CYGWIN__) */ - -static VALUE rb_cBigDecimal = Qnil; -static VALUE bigdecimal_load(VALUE unused); -static VALUE bigdecimal_failed(VALUE value); - -VALUE -rbffi_longdouble_new(long double ld) -{ - if (!RTEST(rb_cBigDecimal)) { - /* allow fallback if the bigdecimal library is unavailable in future ruby versions */ - rb_cBigDecimal = rb_rescue(bigdecimal_load, Qnil, bigdecimal_failed, rb_cObject); - } - - if (RTEST(rb_cBigDecimal) && rb_cBigDecimal != rb_cObject) { - char buf[128]; - return rb_funcall(rb_cBigDecimal, rb_intern("new"), 1, rb_str_new(buf, sprintf(buf, "%.35Le", ld))); - } - - /* Fall through to handling as a float */ - return rb_float_new(ld); -} - -long double -rbffi_num2longdouble(VALUE value) -{ - if (TYPE(value) == T_FLOAT) { - return rb_num2dbl(value); - } - - if (!RTEST(rb_cBigDecimal) && rb_const_defined(rb_cObject, rb_intern("BigDecimal"))) { - rb_cBigDecimal = rb_const_get(rb_cObject, rb_intern("BigDecimal")); - } - - if (RTEST(rb_cBigDecimal) && rb_cBigDecimal != rb_cObject && RTEST(rb_obj_is_kind_of(value, rb_cBigDecimal))) { - VALUE s = rb_funcall(value, rb_intern("to_s"), 1, rb_str_new2("E")); - return strtold(RSTRING_PTR(s), NULL); - } - - /* Fall through to handling as a float */ - return rb_num2dbl(value); -} - - -static VALUE -bigdecimal_load(VALUE unused) -{ - rb_require("bigdecimal"); - return rb_const_get(rb_cObject, rb_intern("BigDecimal")); -} - -static VALUE -bigdecimal_failed(VALUE value) -{ - return value; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/LongDouble.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/LongDouble.h deleted file mode 100644 index 2e52ccb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/LongDouble.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2012, Wayne Meissner - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef RBFFI_LONGDOUBLE_H -#define RBFFI_LONGDOUBLE_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef _MSC_VER -#define strtold strtod -#endif - -extern VALUE rbffi_longdouble_new(long double ld); -extern long double rbffi_num2longdouble(VALUE value); - -#ifdef __cplusplus -} -#endif - -#endif /* RBFFI_LONGDOUBLE_H */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/LongDouble.o b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/LongDouble.o deleted file mode 100644 index 276007136cf335c885564f62882df3d125cf0d6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7724 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 diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Makefile b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Makefile deleted file mode 100644 index 5333992..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Makefile +++ /dev/null @@ -1,260 +0,0 @@ - -SHELL = /bin/sh - -# V=0 quiet, V=1 verbose. other values don't work. -V = 0 -Q1 = $(V:1=) -Q = $(Q1:0=@) -ECHO1 = $(V:1=@:) -ECHO = $(ECHO1:0=@echo) -NULLCMD = : - -#### Start of system configuration section. #### - -srcdir = . -topdir = /Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0 -hdrdir = $(topdir) -arch_hdrdir = /Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/x86_64-darwin14 -PATH_SEPARATOR = : -VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby -prefix = $(DESTDIR)/Users/elainekamlley/.rvm/rubies/ruby-2.2.0 -rubysitearchprefix = $(rubylibprefix)/$(sitearch) -rubyarchprefix = $(rubylibprefix)/$(arch) -rubylibprefix = $(libdir)/$(RUBY_BASE_NAME) -exec_prefix = $(prefix) -vendorarchhdrdir = $(vendorhdrdir)/$(sitearch) -sitearchhdrdir = $(sitehdrdir)/$(sitearch) -rubyarchhdrdir = $(rubyhdrdir)/$(arch) -vendorhdrdir = $(rubyhdrdir)/vendor_ruby -sitehdrdir = $(rubyhdrdir)/site_ruby -rubyhdrdir = $(includedir)/$(RUBY_VERSION_NAME) -vendorarchdir = $(vendorlibdir)/$(sitearch) -vendorlibdir = $(vendordir)/$(ruby_version) -vendordir = $(rubylibprefix)/vendor_ruby -sitearchdir = $(DESTDIR)./.gem.20180423-68206-141lfcp -sitelibdir = $(DESTDIR)./.gem.20180423-68206-141lfcp -sitedir = $(rubylibprefix)/site_ruby -rubyarchdir = $(rubylibdir)/$(arch) -rubylibdir = $(rubylibprefix)/$(ruby_version) -sitearchincludedir = $(includedir)/$(sitearch) -archincludedir = $(includedir)/$(arch) -sitearchlibdir = $(libdir)/$(sitearch) -archlibdir = $(libdir)/$(arch) -ridir = $(datarootdir)/$(RI_BASE_NAME) -mandir = $(datarootdir)/man -localedir = $(datarootdir)/locale -libdir = $(exec_prefix)/lib -psdir = $(docdir) -pdfdir = $(docdir) -dvidir = $(docdir) -htmldir = $(docdir) -infodir = $(datarootdir)/info -docdir = $(datarootdir)/doc/$(PACKAGE) -oldincludedir = $(DESTDIR)/usr/include -includedir = $(prefix)/include -localstatedir = $(prefix)/var -sharedstatedir = $(prefix)/com -sysconfdir = $(prefix)/etc -datadir = $(datarootdir) -datarootdir = $(prefix)/share -libexecdir = $(exec_prefix)/libexec -sbindir = $(exec_prefix)/sbin -bindir = $(exec_prefix)/bin -archdir = $(rubyarchdir) - - -CC = gcc -CXX = g++ -LIBRUBY = $(LIBRUBY_SO) -LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a -LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME) -LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static -framework CoreFoundation -empty = -OUTFLAG = -o $(empty) -COUTFLAG = -o $(empty) - -RUBY_EXTCONF_H = extconf.h -cflags = $(optflags) $(debugflags) $(warnflags) -optflags = -O3 -fno-fast-math -debugflags = -ggdb3 -warnflags = -CCDLFLAGS = -fno-common -CFLAGS = $(CCDLFLAGS) $(cflags) -fno-common -pipe $(ARCH_FLAG) -INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir) -I/usr/include/ffi -DEFS = -CPPFLAGS = -DRUBY_EXTCONF_H=\"$(RUBY_EXTCONF_H)\" -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT $(DEFS) $(cppflags) -CXXFLAGS = $(CCDLFLAGS) $(cxxflags) $(ARCH_FLAG) -ldflags = -L. -fstack-protector -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -dldflags = -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -ARCH_FLAG = -DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG) -LDSHARED = $(CC) -dynamic -bundle -LDSHAREDXX = $(CXX) -dynamic -bundle -AR = ar -EXEEXT = - -RUBY_INSTALL_NAME = $(RUBY_BASE_NAME) -RUBY_SO_NAME = ruby.2.2.0 -RUBYW_INSTALL_NAME = -RUBY_VERSION_NAME = $(RUBY_BASE_NAME)-$(ruby_version) -RUBYW_BASE_NAME = rubyw -RUBY_BASE_NAME = ruby - -arch = x86_64-darwin14 -sitearch = $(arch) -ruby_version = 2.2.0 -ruby = $(bindir)/$(RUBY_BASE_NAME) -RUBY = $(ruby) -ruby_headers = $(hdrdir)/ruby.h $(hdrdir)/ruby/ruby.h $(hdrdir)/ruby/defines.h $(hdrdir)/ruby/missing.h $(hdrdir)/ruby/intern.h $(hdrdir)/ruby/st.h $(hdrdir)/ruby/subst.h $(arch_hdrdir)/ruby/config.h $(RUBY_EXTCONF_H) - -RM = rm -f -RM_RF = $(RUBY) -run -e rm -- -rf -RMDIRS = rmdir -p -MAKEDIRS = mkdir -p -INSTALL = /usr/bin/install -c -INSTALL_PROG = $(INSTALL) -m 0755 -INSTALL_DATA = $(INSTALL) -m 644 -COPY = cp -TOUCH = exit > - -#### End of system configuration section. #### - -preload = - -libpath = /usr/local/opt/libyaml/lib /usr/local/opt/readline/lib /usr/local/opt/libksba/lib /usr/local/opt/openssl/lib . $(libdir) -LIBPATH = -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L. -L$(libdir) -DEFFILE = - -CLEANFILES = mkmf.log -DISTCLEANFILES = -DISTCLEANDIRS = - -extout = -extout_prefix = -target_prefix = -LOCAL_LIBS = -LIBS = $(LIBRUBYARG_SHARED) -lffi -lpthread -ldl -lobjc -ORIG_SRCS = AbstractMemory.c ArrayType.c Buffer.c Call.c ClosurePool.c DataConverter.c DynamicLibrary.c ffi.c Function.c FunctionInfo.c LastError.c LongDouble.c MappedType.c MemoryPointer.c MethodHandle.c Platform.c Pointer.c Struct.c StructByReference.c StructByValue.c StructLayout.c Thread.c Type.c Types.c Variadic.c -SRCS = $(ORIG_SRCS) -OBJS = AbstractMemory.o ArrayType.o Buffer.o Call.o ClosurePool.o DataConverter.o DynamicLibrary.o ffi.o Function.o FunctionInfo.o LastError.o LongDouble.o MappedType.o MemoryPointer.o MethodHandle.o Platform.o Pointer.o Struct.o StructByReference.o StructByValue.o StructLayout.o Thread.o Type.o Types.o Variadic.o -HDRS = $(srcdir)/AbstractMemory.h $(srcdir)/ArrayType.h $(srcdir)/Call.h $(srcdir)/ClosurePool.h $(srcdir)/compat.h $(srcdir)/DynamicLibrary.h $(srcdir)/extconf.h $(srcdir)/Function.h $(srcdir)/LastError.h $(srcdir)/LongDouble.h $(srcdir)/MappedType.h $(srcdir)/MemoryPointer.h $(srcdir)/MethodHandle.h $(srcdir)/Platform.h $(srcdir)/Pointer.h $(srcdir)/rbffi.h $(srcdir)/rbffi_endian.h $(srcdir)/Struct.h $(srcdir)/StructByReference.h $(srcdir)/StructByValue.h $(srcdir)/Thread.h $(srcdir)/Type.h $(srcdir)/Types.h -TARGET = ffi_c -TARGET_NAME = ffi_c -TARGET_ENTRY = Init_$(TARGET_NAME) -DLLIB = $(TARGET).bundle -EXTSTATIC = -STATIC_LIB = - -TIMESTAMP_DIR = . -BINDIR = $(bindir) -RUBYCOMMONDIR = $(sitedir)$(target_prefix) -RUBYLIBDIR = $(sitelibdir)$(target_prefix) -RUBYARCHDIR = $(sitearchdir)$(target_prefix) -HDRDIR = $(rubyhdrdir)/ruby$(target_prefix) -ARCHHDRDIR = $(rubyhdrdir)/$(arch)/ruby$(target_prefix) - -TARGET_SO = $(DLLIB) -CLEANLIBS = $(TARGET).bundle -CLEANOBJS = *.o *.bak - -all: $(DLLIB) -static: $(STATIC_LIB) -.PHONY: all install static install-so install-rb -.PHONY: clean clean-so clean-static clean-rb - -clean-static:: -clean-rb-default:: -clean-rb:: -clean-so:: -clean: clean-so clean-static clean-rb-default clean-rb - -$(Q)$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) .*.time - -distclean-rb-default:: -distclean-rb:: -distclean-so:: -distclean-static:: -distclean: clean distclean-so distclean-static distclean-rb-default distclean-rb - -$(Q)$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log - -$(Q)$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES) - -$(Q)$(RMDIRS) $(DISTCLEANDIRS) 2> /dev/null || true - -realclean: distclean -install: install-so install-rb - -install-so: $(DLLIB) $(TIMESTAMP_DIR)/.RUBYARCHDIR.time - $(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR) -clean-static:: - -$(Q)$(RM) $(STATIC_LIB) -install-rb: pre-install-rb install-rb-default -install-rb-default: pre-install-rb-default -pre-install-rb: Makefile -pre-install-rb-default: Makefile -pre-install-rb-default: - @$(NULLCMD) -$(TIMESTAMP_DIR)/.RUBYARCHDIR.time: - $(Q) $(MAKEDIRS) $(@D) $(RUBYARCHDIR) - $(Q) $(TOUCH) $@ - -site-install: site-install-so site-install-rb -site-install-so: install-so -site-install-rb: install-rb - -.SUFFIXES: .c .m .cc .mm .cxx .cpp .o .S - -.cc.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< - -.cc.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $< - -.mm.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< - -.mm.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $< - -.cxx.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< - -.cxx.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $< - -.cpp.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< - -.cpp.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $< - -.c.o: - $(ECHO) compiling $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $< - -.c.S: - $(ECHO) translating $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $< - -.m.o: - $(ECHO) compiling $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $< - -.m.S: - $(ECHO) translating $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $< - -$(DLLIB): $(OBJS) Makefile - $(ECHO) linking shared-object $(DLLIB) - -$(Q)$(RM) $(@) - $(Q) $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS) - $(Q) $(POSTLINK) - - - -$(OBJS): $(HDRS) $(ruby_headers) diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MappedType.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MappedType.c deleted file mode 100644 index d1a4189..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MappedType.c +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright (c) 2010, Wayne Meissner - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include - -#include -#include "rbffi.h" - -#include "Type.h" -#include "MappedType.h" - - -static VALUE mapped_allocate(VALUE); -static VALUE mapped_initialize(VALUE, VALUE); -static void mapped_mark(MappedType *); -static ID id_native_type, id_to_native, id_from_native; - -VALUE rbffi_MappedTypeClass = Qnil; - -static VALUE -mapped_allocate(VALUE klass) -{ - MappedType* m; - - VALUE obj = Data_Make_Struct(klass, MappedType, mapped_mark, -1, m); - - m->rbConverter = Qnil; - m->rbType = Qnil; - m->type = NULL; - m->base.nativeType = NATIVE_MAPPED; - m->base.ffiType = &ffi_type_void; - - return obj; -} - -/* - * call-seq: initialize(converter) - * @param [#native_type, #to_native, #from_native] converter +converter+ must respond to - * all these methods - * @return [self] - */ -static VALUE -mapped_initialize(VALUE self, VALUE rbConverter) -{ - MappedType* m = NULL; - - if (!rb_respond_to(rbConverter, id_native_type)) { - rb_raise(rb_eNoMethodError, "native_type method not implemented"); - } - - if (!rb_respond_to(rbConverter, id_to_native)) { - rb_raise(rb_eNoMethodError, "to_native method not implemented"); - } - - if (!rb_respond_to(rbConverter, id_from_native)) { - rb_raise(rb_eNoMethodError, "from_native method not implemented"); - } - - Data_Get_Struct(self, MappedType, m); - m->rbType = rb_funcall2(rbConverter, id_native_type, 0, NULL); - if (!(rb_obj_is_kind_of(m->rbType, rbffi_TypeClass))) { - rb_raise(rb_eTypeError, "native_type did not return instance of FFI::Type"); - } - - m->rbConverter = rbConverter; - Data_Get_Struct(m->rbType, Type, m->type); - m->base.ffiType = m->type->ffiType; - - return self; -} - -static void -mapped_mark(MappedType* m) -{ - rb_gc_mark(m->rbType); - rb_gc_mark(m->rbConverter); -} - -/* - * call-seq: mapped_type.native_type - * @return [Type] - * Get native type of mapped type. - */ -static VALUE -mapped_native_type(VALUE self) -{ - MappedType*m = NULL; - Data_Get_Struct(self, MappedType, m); - - return m->rbType; -} - -/* - * call-seq: mapped_type.to_native(*args) - * @param args depends on {FFI::DataConverter} used to initialize +self+ - */ -static VALUE -mapped_to_native(int argc, VALUE* argv, VALUE self) -{ - MappedType*m = NULL; - - Data_Get_Struct(self, MappedType, m); - - return rb_funcall2(m->rbConverter, id_to_native, argc, argv); -} - -/* - * call-seq: mapped_type.from_native(*args) - * @param args depends on {FFI::DataConverter} used to initialize +self+ - */ -static VALUE -mapped_from_native(int argc, VALUE* argv, VALUE self) -{ - MappedType*m = NULL; - - Data_Get_Struct(self, MappedType, m); - - return rb_funcall2(m->rbConverter, id_from_native, argc, argv); -} - -void -rbffi_MappedType_Init(VALUE moduleFFI) -{ - /* - * Document-class: FFI::Type::Mapped < FFI::Type - */ - rbffi_MappedTypeClass = rb_define_class_under(rbffi_TypeClass, "Mapped", rbffi_TypeClass); - - rb_global_variable(&rbffi_MappedTypeClass); - - id_native_type = rb_intern("native_type"); - id_to_native = rb_intern("to_native"); - id_from_native = rb_intern("from_native"); - - rb_define_alloc_func(rbffi_MappedTypeClass, mapped_allocate); - rb_define_method(rbffi_MappedTypeClass, "initialize", mapped_initialize, 1); - rb_define_method(rbffi_MappedTypeClass, "type", mapped_native_type, 0); - rb_define_method(rbffi_MappedTypeClass, "native_type", mapped_native_type, 0); - rb_define_method(rbffi_MappedTypeClass, "to_native", mapped_to_native, -1); - rb_define_method(rbffi_MappedTypeClass, "from_native", mapped_from_native, -1); -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MappedType.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MappedType.h deleted file mode 100644 index 4b26cc1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MappedType.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2010, Wayne Meissner - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef RBFFI_MAPPEDTYPE_H -#define RBFFI_MAPPEDTYPE_H - - -#include - -#ifdef __cplusplus -extern "C" { -#endif - - -typedef struct MappedType_ { - Type base; - Type* type; - VALUE rbConverter; - VALUE rbType; - -} MappedType; - -void rbffi_MappedType_Init(VALUE moduleFFI); - -extern VALUE rbffi_MappedTypeClass; - - -#ifdef __cplusplus -} -#endif - -#endif /* RBFFI_MAPPEDTYPE_H */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MappedType.o b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MappedType.o deleted file mode 100644 index deaa6df316ab2ae047a2b3feb067f55ea4d23cca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11356 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 - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _MSC_VER -# include -# include -#else -# include "win32/stdbool.h" -# include "win32/stdint.h" -#endif -#include -#include -#include "rbffi.h" -#include "AbstractMemory.h" -#include "Pointer.h" -#include "MemoryPointer.h" - - -static VALUE memptr_allocate(VALUE klass); -static void memptr_release(Pointer* ptr); -static VALUE memptr_malloc(VALUE self, long size, long count, bool clear); -static VALUE memptr_free(VALUE self); - -VALUE rbffi_MemoryPointerClass; - -#define MEMPTR(obj) ((MemoryPointer *) rbffi_AbstractMemory_Cast(obj, rbffi_MemoryPointerClass)) - -VALUE -rbffi_MemoryPointer_NewInstance(long size, long count, bool clear) -{ - return memptr_malloc(memptr_allocate(rbffi_MemoryPointerClass), size, count, clear); -} - -static VALUE -memptr_allocate(VALUE klass) -{ - Pointer* p; - VALUE obj = Data_Make_Struct(klass, Pointer, NULL, memptr_release, p); - p->rbParent = Qnil; - p->memory.flags = MEM_RD | MEM_WR; - - return obj; -} - -/* - * call-seq: initialize(size, count=1, clear=true) - * @param [Fixnum, Bignum, Symbol, FFI::Type] size size of a memory cell (in bytes, or type whom size will be used) - * @param [Numeric] count number of cells in memory - * @param [Boolean] clear set memory to all-zero if +true+ - * @return [self] - * A new instance of FFI::MeoryPointer. - */ -static VALUE -memptr_initialize(int argc, VALUE* argv, VALUE self) -{ - VALUE size = Qnil, count = Qnil, clear = Qnil; - int nargs = rb_scan_args(argc, argv, "12", &size, &count, &clear); - - memptr_malloc(self, rbffi_type_size(size), nargs > 1 ? NUM2LONG(count) : 1, - RTEST(clear) || clear == Qnil); - - if (rb_block_given_p()) { - return rb_ensure(rb_yield, self, memptr_free, self); - } - - return self; -} - -static VALUE -memptr_malloc(VALUE self, long size, long count, bool clear) -{ - Pointer* p; - unsigned long msize; - - Data_Get_Struct(self, Pointer, p); - - msize = size * count; - - p->storage = xmalloc(msize + 7); - if (p->storage == NULL) { - rb_raise(rb_eNoMemError, "Failed to allocate memory size=%ld bytes", msize); - return Qnil; - } - p->autorelease = true; - p->memory.typeSize = (int) size; - p->memory.size = msize; - /* ensure the memory is aligned on at least a 8 byte boundary */ - p->memory.address = (char *) (((uintptr_t) p->storage + 0x7) & (uintptr_t) ~0x7UL);; - p->allocated = true; - - if (clear && p->memory.size > 0) { - memset(p->memory.address, 0, p->memory.size); - } - - return self; -} - -static VALUE -memptr_free(VALUE self) -{ - Pointer* ptr; - - Data_Get_Struct(self, Pointer, ptr); - - if (ptr->allocated) { - if (ptr->storage != NULL) { - xfree(ptr->storage); - ptr->storage = NULL; - } - ptr->allocated = false; - } - - return self; -} - -static void -memptr_release(Pointer* ptr) -{ - if (ptr->autorelease && ptr->allocated && ptr->storage != NULL) { - xfree(ptr->storage); - ptr->storage = NULL; - } - xfree(ptr); -} - -/* - * call-seq: from_string(s) - * @param [String] s string - * @return [MemoryPointer] - * Create a {MemoryPointer} with +s+ inside. - */ -static VALUE -memptr_s_from_string(VALUE klass, VALUE to_str) -{ - VALUE s = StringValue(to_str); - VALUE args[] = { INT2FIX(1), LONG2NUM(RSTRING_LEN(s) + 1), Qfalse }; - VALUE obj = rb_class_new_instance(3, args, klass); - rb_funcall(obj, rb_intern("put_string"), 2, INT2FIX(0), s); - - return obj; -} - -void -rbffi_MemoryPointer_Init(VALUE moduleFFI) -{ - VALUE ffi_Pointer; - - ffi_Pointer = rbffi_PointerClass; - - /* - * Document-class: FFI::MemoryPointer < FFI::Pointer - * A MemoryPointer is a specific {Pointer}. It points to a memory composed of cells. All cells have the - * same size. - * - * @example Create a new MemoryPointer - * mp = FFI::MemoryPointer.new(:long, 16) # Create a pointer on a memory of 16 long ints. - * @example Create a new MemoryPointer from a String - * mp1 = FFI::MemoryPointer.from_string("this is a string") - * # same as: - * mp2 = FFI::MemoryPointer.new(:char,16) - * mp2.put_string("this is a string") - */ - rbffi_MemoryPointerClass = rb_define_class_under(moduleFFI, "MemoryPointer", ffi_Pointer); - rb_global_variable(&rbffi_MemoryPointerClass); - - rb_define_alloc_func(rbffi_MemoryPointerClass, memptr_allocate); - rb_define_method(rbffi_MemoryPointerClass, "initialize", memptr_initialize, -1); - rb_define_singleton_method(rbffi_MemoryPointerClass, "from_string", memptr_s_from_string, 1); -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MemoryPointer.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MemoryPointer.h deleted file mode 100644 index 1257683..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MemoryPointer.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2008, 2009, Wayne Meissner - * Copyright (c) 2008, Luc Heinrich - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef RBFFI_MEMORYPOINTER_H -#define RBFFI_MEMORYPOINTER_H - -#ifndef _MSC_VER -# include -#else -# include "win32/stdbool.h" -#endif -#include - -#ifdef __cplusplus -extern "C" { -#endif - - extern void rbffi_MemoryPointer_Init(VALUE moduleFFI); - extern VALUE rbffi_MemoryPointerClass; - extern VALUE rbffi_MemoryPointer_NewInstance(long size, long count, bool clear); -#ifdef __cplusplus -} -#endif - -#endif /* RBFFI_MEMORYPOINTER_H */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MemoryPointer.o b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MemoryPointer.o deleted file mode 100644 index d8501a57037009d17c4d43687dd5a0ee9cadc2a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12412 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 BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _MSC_VER -#include -#endif -#include -#ifndef _WIN32 -# include -#endif -#include -#ifndef _MSC_VER -# include -# include -#else -# include "win32/stdint.h" -# include "win32/stdbool.h" -#endif -#ifndef _WIN32 -# include -#endif -#include -#include -#if defined(HAVE_NATIVETHREAD) && !defined(_WIN32) && !defined(__WIN32__) -# include -#endif - -#include -#include "rbffi.h" -#include "compat.h" - -#include "Function.h" -#include "Types.h" -#include "Type.h" -#include "LastError.h" -#include "Call.h" -#include "ClosurePool.h" -#include "MethodHandle.h" - - -#define MAX_METHOD_FIXED_ARITY (6) - -#ifndef roundup -# define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) -#endif -#ifdef _WIN32 - typedef char* caddr_t; -#endif - -#ifdef USE_RAW -# define METHOD_CLOSURE ffi_raw_closure -# define METHOD_PARAMS ffi_raw* -#else -# define METHOD_CLOSURE ffi_closure -# define METHOD_PARAMS void** -#endif - - - -static bool prep_trampoline(void* ctx, void* code, Closure* closure, char* errmsg, size_t errmsgsize); -static long trampoline_size(void); - -#if defined(__x86_64__) && (defined(__linux__) || defined(__APPLE__)) -# define CUSTOM_TRAMPOLINE 1 -#endif - - -struct MethodHandle { - Closure* closure; -}; - -static ClosurePool* defaultClosurePool; - - -MethodHandle* -rbffi_MethodHandle_Alloc(FunctionType* fnInfo, void* function) -{ - MethodHandle* handle; - Closure* closure = rbffi_Closure_Alloc(defaultClosurePool); - if (closure == NULL) { - rb_raise(rb_eNoMemError, "failed to allocate closure from pool"); - return NULL; - } - - handle = xcalloc(1, sizeof(*handle)); - handle->closure = closure; - closure->info = fnInfo; - closure->function = function; - - return handle; -} - -void -rbffi_MethodHandle_Free(MethodHandle* handle) -{ - if (handle != NULL) { - rbffi_Closure_Free(handle->closure); - } -} - -void* -rbffi_MethodHandle_CodeAddress(MethodHandle* handle) -{ - return handle->closure->code; -} - -#ifndef CUSTOM_TRAMPOLINE -static void attached_method_invoke(ffi_cif* cif, void* retval, METHOD_PARAMS parameters, void* user_data); - -static ffi_type* methodHandleParamTypes[] = { - &ffi_type_sint, - &ffi_type_pointer, - &ffi_type_ulong, -}; - -static ffi_cif mh_cif; - -static bool -prep_trampoline(void* ctx, void* code, Closure* closure, char* errmsg, size_t errmsgsize) -{ - ffi_status ffiStatus; - -#if defined(USE_RAW) - ffiStatus = ffi_prep_raw_closure(code, &mh_cif, attached_method_invoke, closure); -#else - ffiStatus = ffi_prep_closure(code, &mh_cif, attached_method_invoke, closure); -#endif - if (ffiStatus != FFI_OK) { - snprintf(errmsg, errmsgsize, "ffi_prep_closure failed. status=%#x", ffiStatus); - return false; - } - - return true; -} - - -static long -trampoline_size(void) -{ - return sizeof(METHOD_CLOSURE); -} - -/* - * attached_method_invoke is used functions with more than 6 parameters, or - * with struct param or return values - */ -static void -attached_method_invoke(ffi_cif* cif, void* mretval, METHOD_PARAMS parameters, void* user_data) -{ - Closure* handle = (Closure *) user_data; - FunctionType* fnInfo = (FunctionType *) handle->info; - -#ifdef USE_RAW - int argc = parameters[0].sint; - VALUE* argv = *(VALUE **) ¶meters[1]; -#else - int argc = *(int *) parameters[0]; - VALUE* argv = *(VALUE **) parameters[1]; -#endif - - *(VALUE *) mretval = (*fnInfo->invoke)(argc, argv, handle->function, fnInfo); -} - -#endif - - - -#if defined(CUSTOM_TRAMPOLINE) -#if defined(__x86_64__) - -static VALUE custom_trampoline(int argc, VALUE* argv, VALUE self, Closure*); - -#define TRAMPOLINE_CTX_MAGIC (0xfee1deadcafebabe) -#define TRAMPOLINE_FUN_MAGIC (0xfeedfacebeeff00d) - -/* - * This is a hand-coded trampoline to speedup entry from ruby to the FFI translation - * layer for x86_64 arches. - * - * Since a ruby function has exactly 3 arguments, and the first 6 arguments are - * passed in registers for x86_64, we can tack on a context pointer by simply - * putting a value in %rcx, then jumping to the C trampoline code. - * - * This results in approx a 30% speedup for x86_64 FFI dispatch - */ -__asm__( - ".text\n\t" - ".globl ffi_trampoline\n\t" - ".globl _ffi_trampoline\n\t" - "ffi_trampoline:\n\t" - "_ffi_trampoline:\n\t" - "movabsq $0xfee1deadcafebabe, %rcx\n\t" - "movabsq $0xfeedfacebeeff00d, %r11\n\t" - "jmpq *%r11\n\t" - ".globl ffi_trampoline_end\n\t" - "ffi_trampoline_end:\n\t" - ".globl _ffi_trampoline_end\n\t" - "_ffi_trampoline_end:\n\t" -); - -static VALUE -custom_trampoline(int argc, VALUE* argv, VALUE self, Closure* handle) -{ - FunctionType* fnInfo = (FunctionType *) handle->info; - VALUE rbReturnValue; - - RB_GC_GUARD(rbReturnValue) = (*fnInfo->invoke)(argc, argv, handle->function, fnInfo); - RB_GC_GUARD_PTR(argv); - RB_GC_GUARD(self); - - return rbReturnValue; -} - -#elif defined(__i386__) && 0 - -static VALUE custom_trampoline(caddr_t args, Closure*); -#define TRAMPOLINE_CTX_MAGIC (0xfee1dead) -#define TRAMPOLINE_FUN_MAGIC (0xbeefcafe) - -/* - * This is a hand-coded trampoline to speedup entry from ruby to the FFI translation - * layer for i386 arches. - * - * This does not make a discernable difference vs a raw closure, so for now, - * it is not enabled. - */ -__asm__( - ".text\n\t" - ".globl ffi_trampoline\n\t" - ".globl _ffi_trampoline\n\t" - "ffi_trampoline:\n\t" - "_ffi_trampoline:\n\t" - "subl $12, %esp\n\t" - "leal 16(%esp), %eax\n\t" - "movl %eax, (%esp)\n\t" - "movl $0xfee1dead, 4(%esp)\n\t" - "movl $0xbeefcafe, %eax\n\t" - "call *%eax\n\t" - "addl $12, %esp\n\t" - "ret\n\t" - ".globl ffi_trampoline_end\n\t" - "ffi_trampoline_end:\n\t" - ".globl _ffi_trampoline_end\n\t" - "_ffi_trampoline_end:\n\t" -); - -static VALUE -custom_trampoline(caddr_t args, Closure* handle) -{ - FunctionType* fnInfo = (FunctionType *) handle->info; - return (*fnInfo->invoke)(*(int *) args, *(VALUE **) (args + 4), handle->function, fnInfo); -} - -#endif /* __x86_64__ else __i386__ */ - -extern void ffi_trampoline(int argc, VALUE* argv, VALUE self); -extern void ffi_trampoline_end(void); -static int trampoline_offsets(long *, long *); - -static long trampoline_ctx_offset, trampoline_func_offset; - -static long -trampoline_offset(int off, const long value) -{ - caddr_t ptr; - for (ptr = (caddr_t) &ffi_trampoline + off; ptr < (caddr_t) &ffi_trampoline_end; ++ptr) { - if (*(long *) ptr == value) { - return ptr - (caddr_t) &ffi_trampoline; - } - } - - return -1; -} - -static int -trampoline_offsets(long* ctxOffset, long* fnOffset) -{ - *ctxOffset = trampoline_offset(0, TRAMPOLINE_CTX_MAGIC); - if (*ctxOffset == -1) { - return -1; - } - - *fnOffset = trampoline_offset(0, TRAMPOLINE_FUN_MAGIC); - if (*fnOffset == -1) { - return -1; - } - - return 0; -} - -static bool -prep_trampoline(void* ctx, void* code, Closure* closure, char* errmsg, size_t errmsgsize) -{ - caddr_t ptr = (caddr_t) code; - - memcpy(ptr, &ffi_trampoline, trampoline_size()); - /* Patch the context and function addresses into the stub code */ - *(intptr_t *)(ptr + trampoline_ctx_offset) = (intptr_t) closure; - *(intptr_t *)(ptr + trampoline_func_offset) = (intptr_t) custom_trampoline; - - return true; -} - -static long -trampoline_size(void) -{ - return (caddr_t) &ffi_trampoline_end - (caddr_t) &ffi_trampoline; -} - -#endif /* CUSTOM_TRAMPOLINE */ - - -void -rbffi_MethodHandle_Init(VALUE module) -{ -#ifndef CUSTOM_TRAMPOLINE - ffi_status ffiStatus; -#endif - - defaultClosurePool = rbffi_ClosurePool_New((int) trampoline_size(), prep_trampoline, NULL); - -#if defined(CUSTOM_TRAMPOLINE) - if (trampoline_offsets(&trampoline_ctx_offset, &trampoline_func_offset) != 0) { - rb_raise(rb_eFatal, "Could not locate offsets in trampoline code"); - } -#else - ffiStatus = ffi_prep_cif(&mh_cif, FFI_DEFAULT_ABI, 3, &ffi_type_ulong, - methodHandleParamTypes); - if (ffiStatus != FFI_OK) { - rb_raise(rb_eFatal, "ffi_prep_cif failed. status=%#x", ffiStatus); - } - -#endif -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MethodHandle.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MethodHandle.h deleted file mode 100644 index c3341bf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MethodHandle.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2009, Wayne Meissner - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef RBFFI_METHODHANDLE_H -#define RBFFI_METHODHANDLE_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include "Function.h" - - -typedef struct MethodHandlePool MethodHandlePool; -typedef struct MethodHandle MethodHandle; - - -MethodHandle* rbffi_MethodHandle_Alloc(FunctionType* fnInfo, void* function); -void rbffi_MethodHandle_Free(MethodHandle* handle); -void* rbffi_MethodHandle_CodeAddress(MethodHandle* handle); -void rbffi_MethodHandle_Init(VALUE module); - -#ifdef __cplusplus -} -#endif - -#endif /* RBFFI_METHODHANDLE_H */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MethodHandle.o b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/MethodHandle.o deleted file mode 100644 index 7654268fa00b1a04db4e0ea18c3fd0d36082395d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9760 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 diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Platform.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Platform.c deleted file mode 100644 index 1305ad2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Platform.c +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (c) 2008-2010 Wayne Meissner - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _MSC_VER -# include -#endif -# include -#ifndef _MSC_VER -# include -# include -#else -# include "win32/stdint.h" -# include "win32/stdbool.h" -#endif -#include -#include -#include "rbffi_endian.h" -#include "Platform.h" - -#if defined(__GNU__) || defined(__GLIBC__) -# include -#endif - -static VALUE PlatformModule = Qnil; - -/* - * Determine the cpu type at compile time - useful for MacOSX where the the - * system installed ruby incorrectly reports 'host_cpu' as 'powerpc' when running - * on intel. - */ -#if defined(__x86_64__) || defined(__x86_64) || defined(__amd64) || defined(_M_X64) || defined(_M_AMD64) -# define CPU "x86_64" - -#elif defined(__i386__) || defined(__i386) || defined(_M_IX86) -# define CPU "i386" - -#elif defined(__ppc64__) || defined(__powerpc64__) || defined(_M_PPC) -# define CPU "ppc64" - -#elif defined(__ppc__) || defined(__powerpc__) || defined(__powerpc) -# define CPU "ppc" - -/* Need to check for __sparcv9 first, because __sparc will be defined either way. */ -#elif defined(__sparcv9__) || defined(__sparcv9) -# define CPU "sparcv9" - -#elif defined(__sparc__) || defined(__sparc) -# define CPU "sparc" - -#elif defined(__arm__) || defined(__arm) -# define CPU "arm" - -#elif defined(__mips__) || defined(__mips) -# define CPU "mips" - -#elif defined(__s390__) -# define CPU "s390" - -#else -# define CPU "unknown" -#endif - -static void -export_primitive_types(VALUE module) -{ -#define S(name, T) do { \ - typedef struct { char c; T v; } s; \ - rb_define_const(module, #name "_ALIGN", INT2NUM((sizeof(s) - sizeof(T)) * 8)); \ - rb_define_const(module, #name "_SIZE", INT2NUM(sizeof(T)* 8)); \ -} while(0) - S(INT8, char); - S(INT16, short); - S(INT32, int); - S(INT64, long long); - S(LONG, long); - S(FLOAT, float); - S(DOUBLE, double); - S(ADDRESS, void*); -#undef S -} - -void -rbffi_Platform_Init(VALUE moduleFFI) -{ - PlatformModule = rb_define_module_under(moduleFFI, "Platform"); - rb_define_const(PlatformModule, "BYTE_ORDER", INT2FIX(BYTE_ORDER)); - rb_define_const(PlatformModule, "LITTLE_ENDIAN", INT2FIX(LITTLE_ENDIAN)); - rb_define_const(PlatformModule, "BIG_ENDIAN", INT2FIX(BIG_ENDIAN)); - rb_define_const(PlatformModule, "CPU", rb_str_new2(CPU)); -#if defined(__GNU__) || defined(__GLIBC__) - rb_define_const(PlatformModule, "GNU_LIBC", rb_str_new2(LIBC_SO)); -#endif - export_primitive_types(PlatformModule); -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Platform.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Platform.h deleted file mode 100644 index 5575e34..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Platform.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2008-2010 Wayne Meissner - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef RBFFI_PLATFORM_H -#define RBFFI_PLATFORM_H - -#ifdef __cplusplus -extern "C" { -#endif - - extern void rbffi_Platform_Init(VALUE moduleFFI); - - -#ifdef __cplusplus -} -#endif - -#endif /* RBFFI_PLATFORM_H */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Platform.o b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Platform.o deleted file mode 100644 index e8a5f4d76efc2ee5507f445907de77cbb02123a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4192 zcmcInS!^3s6n*1mGO1IOHcg?>AR~$>2-`_WOA8e0G)`^mEW}P}3TW^$b_eWn@RFv0 zpr`^Vpt5`*B!m$Aj)V|G0>qAhAC?aU5e; zo@TxqPLSUjaL4>AX{%sVkLAm&OvLJOU#q_oUn!lnQ*6)A;p5LCj+bw~p0Uy;quS0_ z;QaP+T2CBje&DMenm?BB4d&CC@9+QQ%a%*?>1<7}TL(=mr|XHa<`D|;dI&IhRgav{ z_v3r;7_@y493+M{b{=0k!Bz(>N7!ktaaVM}l7vNCpNhpJ3Om)!2SYNdw#z)VX-6cYL{R6JrFTnOxN<|N=b~)rK0-O%vf|r zB;u)5BC1Cx$KsJmF&f|Pn7gKD#p1TD`qmKI#NogkI`=ewHZEc{i9r)bg z1`OMQw~jPm*fyM)n%vE(ZQ9^?Vk(kiRN6K?HZ?nnOl2PI*bR}fv6*Nx$t{j&HwmFp z$03pV`Jxd>B=$}O7K}>OEL(x?p~28#U~{&JtvI-S5Kida?V;hbmd7cS72(+`qQgcp zjrDv@x>PJ0hr;va3dXT$mcxa*nKP>41;fgfE8$Gt$`y@prJgwy9u5tM2EzrTR1N3z zW^gF9J+v*1n*w=ycKH<(z;X zu2t%eX_-X^@m?b@?fAq*6rU2`cOsJ9BeC)LzRB4MeLNA_%>V`)KvRSS8WG94iP5P< z(<900=&pDqp(kVU@syx0>eYE8Yo?2Owro{vRoMqhormvEk(>OV{F{P`Xej|5=A7X(WsR*${GGXuiM{y;wk<$ z%35qPt`Xt($NSFrUEp(J4|T5>@jkboT%6UL&~}l}2h;0O+rbxEJR&dL!uG=eiTX#VD@fZntxBb6*1Bc@$;8=K-iL%{z%$k8+cuz64*W zZ=+hLeu!FAKSw>HeuKJ8{S~#M(o5ay2BKHbM%|-cfLart43t;%Ttmv!RfclySF~Gg zO-TqG08%J7W$#gHDcPsgL$*mlzQ<5GUu&G;gFUAMdQLtm=%y^sW4b`SjM8atoDJNW zExclgcZErY7I8UBgO`Tr*d=x;&`uNiUMHF+GIc_(MH*Z}TE*_WP|&khS;ww&-HcEc zdzIdvF6}Nv(RscR<-yWzr@`rylYWp2Pm5zH- zsIpL^oyWv>M4bxC4al^z#d=QeNeoe|?0Dz^T@##v#coI9afxm@a&X)~2*ta8)gJFU z^)s(mt$X{m9ndvzzpC{$jB|isK6?~xt#_lUZIX`r>KZVYs$ED;s z-R!&A{{m z#tsuKuzwXaWMB>z#Z5`wA0rfa1Qp@5|3LQ-5(@k*RD{#~CA^n9Q}Z~o<>5rY ku_sPblsuR4OOZ1wV)Qvd(} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Pointer.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Pointer.c deleted file mode 100644 index edd931c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Pointer.c +++ /dev/null @@ -1,508 +0,0 @@ -/* - * Copyright (c) 2008, 2009, Wayne Meissner - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _MSC_VER -# include -# include -#else -# include "win32/stdint.h" -# include "win32/stdbool.h" -#endif -#include -#include -#include "rbffi.h" -#include "rbffi_endian.h" -#include "AbstractMemory.h" -#include "Pointer.h" - -#define POINTER(obj) rbffi_AbstractMemory_Cast((obj), rbffi_PointerClass) - -VALUE rbffi_PointerClass = Qnil; -VALUE rbffi_NullPointerSingleton = Qnil; - -static void ptr_release(Pointer* ptr); -static void ptr_mark(Pointer* ptr); - -VALUE -rbffi_Pointer_NewInstance(void* addr) -{ - Pointer* p; - VALUE obj; - - if (addr == NULL) { - return rbffi_NullPointerSingleton; - } - - obj = Data_Make_Struct(rbffi_PointerClass, Pointer, NULL, -1, p); - p->memory.address = addr; - p->memory.size = LONG_MAX; - p->memory.flags = (addr == NULL) ? 0 : (MEM_RD | MEM_WR); - p->memory.typeSize = 1; - p->rbParent = Qnil; - - return obj; -} - -static VALUE -ptr_allocate(VALUE klass) -{ - Pointer* p; - VALUE obj; - - obj = Data_Make_Struct(klass, Pointer, ptr_mark, ptr_release, p); - p->rbParent = Qnil; - p->memory.flags = MEM_RD | MEM_WR; - - return obj; -} - -/* - * @overload initialize(pointer) - * @param [Pointer] pointer another pointer to initialize from - * Create a new pointer from another {Pointer}. - * @overload initialize(type, address) - * @param [Type] type type for pointer - * @param [Integer] address base address for pointer - * Create a new pointer from a {Type} and a base adresse - * @return [self] - * A new instance of Pointer. - */ -static VALUE -ptr_initialize(int argc, VALUE* argv, VALUE self) -{ - Pointer* p; - VALUE rbType = Qnil, rbAddress = Qnil; - int typeSize = 1; - - Data_Get_Struct(self, Pointer, p); - - switch (rb_scan_args(argc, argv, "11", &rbType, &rbAddress)) { - case 1: - rbAddress = rbType; - typeSize = 1; - break; - case 2: - typeSize = rbffi_type_size(rbType); - break; - default: - rb_raise(rb_eArgError, "Invalid arguments"); - } - - switch (TYPE(rbAddress)) { - case T_FIXNUM: - case T_BIGNUM: - p->memory.address = (void*) (uintptr_t) NUM2LL(rbAddress); - p->memory.size = LONG_MAX; - if (p->memory.address == NULL) { - p->memory.flags = 0; - } - break; - - default: - if (rb_obj_is_kind_of(rbAddress, rbffi_PointerClass)) { - Pointer* orig; - - p->rbParent = rbAddress; - Data_Get_Struct(rbAddress, Pointer, orig); - p->memory = orig->memory; - } else { - rb_raise(rb_eTypeError, "wrong argument type, expected Integer or FFI::Pointer"); - } - break; - } - - p->memory.typeSize = typeSize; - - return self; -} - -/* - * call-seq: ptr.initialize_copy(other) - * @param [Pointer] other source for cloning or dupping - * @return [self] - * @raise {RuntimeError} if +other+ is an unbounded memory area, or is unreable/unwritable - * @raise {NoMemError} if failed to allocate memory for new object - * DO NOT CALL THIS METHOD. - * - * This method is internally used by #dup and #clone. Memory contents is copied from +other+. - */ -static VALUE -ptr_initialize_copy(VALUE self, VALUE other) -{ - AbstractMemory* src; - Pointer* dst; - - Data_Get_Struct(self, Pointer, dst); - src = POINTER(other); - if (src->size == LONG_MAX) { - rb_raise(rb_eRuntimeError, "cannot duplicate unbounded memory area"); - return Qnil; - } - - if ((dst->memory.flags & (MEM_RD | MEM_WR)) != (MEM_RD | MEM_WR)) { - rb_raise(rb_eRuntimeError, "cannot duplicate unreadable/unwritable memory area"); - return Qnil; - } - - if (dst->storage != NULL) { - xfree(dst->storage); - dst->storage = NULL; - } - - dst->storage = xmalloc(src->size + 7); - if (dst->storage == NULL) { - rb_raise(rb_eNoMemError, "failed to allocate memory size=%lu bytes", src->size); - return Qnil; - } - - dst->allocated = true; - dst->autorelease = true; - dst->memory.address = (void *) (((uintptr_t) dst->storage + 0x7) & (uintptr_t) ~0x7UL); - dst->memory.size = src->size; - dst->memory.typeSize = src->typeSize; - - /* finally, copy the actual memory contents */ - memcpy(dst->memory.address, src->address, src->size); - - return self; -} - -static VALUE -slice(VALUE self, long offset, long size) -{ - AbstractMemory* ptr; - Pointer* p; - VALUE retval; - - Data_Get_Struct(self, AbstractMemory, ptr); - checkBounds(ptr, offset, size == LONG_MAX ? 1 : size); - - retval = Data_Make_Struct(rbffi_PointerClass, Pointer, ptr_mark, -1, p); - - p->memory.address = ptr->address + offset; - p->memory.size = size; - p->memory.flags = ptr->flags; - p->memory.typeSize = ptr->typeSize; - p->rbParent = self; - - return retval; -} - -/* - * Document-method: + - * call-seq: ptr + offset - * @param [Numeric] offset - * @return [Pointer] - * Return a new {Pointer} from an existing pointer and an +offset+. - */ -static VALUE -ptr_plus(VALUE self, VALUE offset) -{ - AbstractMemory* ptr; - long off = NUM2LONG(offset); - - Data_Get_Struct(self, AbstractMemory, ptr); - - return slice(self, off, ptr->size == LONG_MAX ? LONG_MAX : ptr->size - off); -} - -/* - * call-seq: ptr.slice(offset, length) - * @param [Numeric] offset - * @param [Numeric] length - * @return [Pointer] - * Return a new {Pointer} from an existing one. This pointer points on same contents - * from +offset+ for a length +length+. - */ -static VALUE -ptr_slice(VALUE self, VALUE rbOffset, VALUE rbLength) -{ - return slice(self, NUM2LONG(rbOffset), NUM2LONG(rbLength)); -} - -/* - * call-seq: ptr.inspect - * @return [String] - * Inspect pointer object. - */ -static VALUE -ptr_inspect(VALUE self) -{ - char buf[100]; - Pointer* ptr; - - Data_Get_Struct(self, Pointer, ptr); - - if (ptr->memory.size != LONG_MAX) { - snprintf(buf, sizeof(buf), "#<%s address=%p size=%lu>", - rb_obj_classname(self), ptr->memory.address, ptr->memory.size); - } else { - snprintf(buf, sizeof(buf), "#<%s address=%p>", rb_obj_classname(self), ptr->memory.address); - } - - return rb_str_new2(buf); -} - -/* - * Document-method: null? - * call-seq: ptr.null? - * @return [Boolean] - * Return +true+ if +self+ is a {NULL} pointer. - */ -static VALUE -ptr_null_p(VALUE self) -{ - Pointer* ptr; - - Data_Get_Struct(self, Pointer, ptr); - - return ptr->memory.address == NULL ? Qtrue : Qfalse; -} - -/* - * Document-method: == - * call-seq: ptr == other - * @param [Pointer] other - * Check equality between +self+ and +other+. Equality is tested on {#address}. - */ -static VALUE -ptr_equals(VALUE self, VALUE other) -{ - Pointer* ptr; - - Data_Get_Struct(self, Pointer, ptr); - - if (NIL_P(other)) { - return ptr->memory.address == NULL ? Qtrue : Qfalse; - } - - return ptr->memory.address == POINTER(other)->address ? Qtrue : Qfalse; -} - -/* - * call-seq: ptr.address - * @return [Numeric] pointer's base address - * Return +self+'s base address (alias: #to_i). - */ -static VALUE -ptr_address(VALUE self) -{ - Pointer* ptr; - - Data_Get_Struct(self, Pointer, ptr); - - return ULL2NUM((uintptr_t) ptr->memory.address); -} - -#if BYTE_ORDER == LITTLE_ENDIAN -# define SWAPPED_ORDER BIG_ENDIAN -#else -# define SWAPPED_ORDER LITTLE_ENDIAN -#endif - -/* - * Get or set +self+'s endianness - * @overload order - * @return [:big, :little] endianness of +self+ - * @overload order(order) - * @param [Symbol] order endianness to set (+:little+, +:big+ or +:network+). +:big+ and +:network+ - * are synonymous. - * @return [self] - */ -static VALUE -ptr_order(int argc, VALUE* argv, VALUE self) -{ - Pointer* ptr; - - Data_Get_Struct(self, Pointer, ptr); - if (argc == 0) { - int order = (ptr->memory.flags & MEM_SWAP) == 0 ? BYTE_ORDER : SWAPPED_ORDER; - return order == BIG_ENDIAN ? ID2SYM(rb_intern("big")) : ID2SYM(rb_intern("little")); - } else { - VALUE rbOrder = Qnil; - int order = BYTE_ORDER; - - if (rb_scan_args(argc, argv, "1", &rbOrder) < 1) { - rb_raise(rb_eArgError, "need byte order"); - } - if (SYMBOL_P(rbOrder)) { - ID id = SYM2ID(rbOrder); - if (id == rb_intern("little")) { - order = LITTLE_ENDIAN; - - } else if (id == rb_intern("big") || id == rb_intern("network")) { - order = BIG_ENDIAN; - } - } - if (order != BYTE_ORDER) { - Pointer* p2; - VALUE retval = slice(self, 0, ptr->memory.size); - - Data_Get_Struct(retval, Pointer, p2); - p2->memory.flags |= MEM_SWAP; - return retval; - } - - return self; - } -} - - -/* - * call-seq: ptr.free - * @return [self] - * Free memory pointed by +self+. - */ -static VALUE -ptr_free(VALUE self) -{ - Pointer* ptr; - - Data_Get_Struct(self, Pointer, ptr); - - if (ptr->allocated) { - if (ptr->storage != NULL) { - xfree(ptr->storage); - ptr->storage = NULL; - } - ptr->allocated = false; - - } else { - VALUE caller = rb_funcall(rb_funcall(Qnil, rb_intern("caller"), 0), rb_intern("first"), 0); - - rb_warn("calling free on non allocated pointer %s from %s", RSTRING_PTR(ptr_inspect(self)), RSTRING_PTR(rb_str_to_str(caller))); - } - - return self; -} - -static VALUE -ptr_type_size(VALUE self) -{ - Pointer* ptr; - - Data_Get_Struct(self, Pointer, ptr); - - return INT2NUM(ptr->memory.typeSize); -} - -/* - * call-seq: ptr.autorelease = autorelease - * @param [Boolean] autorelease - * @return [Boolean] +autorelease+ - * Set +autorelease+ attribute. See also Autorelease section. - */ -static VALUE -ptr_autorelease(VALUE self, VALUE autorelease) -{ - Pointer* ptr; - - Data_Get_Struct(self, Pointer, ptr); - ptr->autorelease = autorelease == Qtrue; - - return autorelease; -} - -/* - * call-seq: ptr.autorelease? - * @return [Boolean] - * Get +autorelease+ attribute. See also Autorelease section. - */ -static VALUE -ptr_autorelease_p(VALUE self) -{ - Pointer* ptr; - - Data_Get_Struct(self, Pointer, ptr); - - return ptr->autorelease ? Qtrue : Qfalse; -} - - -static void -ptr_release(Pointer* ptr) -{ - if (ptr->autorelease && ptr->allocated && ptr->storage != NULL) { - xfree(ptr->storage); - ptr->storage = NULL; - } - xfree(ptr); -} - -static void -ptr_mark(Pointer* ptr) -{ - rb_gc_mark(ptr->rbParent); -} - -void -rbffi_Pointer_Init(VALUE moduleFFI) -{ - VALUE rbNullAddress = ULL2NUM(0); - VALUE ffi_AbstractMemory = rbffi_AbstractMemoryClass; - - /* - * Document-class: FFI::Pointer < FFI::AbstractMemory - * Pointer class is used to manage C pointers with ease. A {Pointer} object is defined by his - * {#address} (as a C pointer). It permits additions with an integer for pointer arithmetic. - * - * ==Autorelease - * A pointer object may autorelease his contents when freed (by default). This behaviour may be - * changed with {#autorelease=} method. - */ - rbffi_PointerClass = rb_define_class_under(moduleFFI, "Pointer", ffi_AbstractMemory); - /* - * Document-variable: Pointer - */ - rb_global_variable(&rbffi_PointerClass); - - rb_define_alloc_func(rbffi_PointerClass, ptr_allocate); - rb_define_method(rbffi_PointerClass, "initialize", ptr_initialize, -1); - rb_define_method(rbffi_PointerClass, "initialize_copy", ptr_initialize_copy, 1); - rb_define_method(rbffi_PointerClass, "inspect", ptr_inspect, 0); - rb_define_method(rbffi_PointerClass, "to_s", ptr_inspect, 0); - rb_define_method(rbffi_PointerClass, "+", ptr_plus, 1); - rb_define_method(rbffi_PointerClass, "slice", ptr_slice, 2); - rb_define_method(rbffi_PointerClass, "null?", ptr_null_p, 0); - rb_define_method(rbffi_PointerClass, "address", ptr_address, 0); - rb_define_alias(rbffi_PointerClass, "to_i", "address"); - rb_define_method(rbffi_PointerClass, "==", ptr_equals, 1); - rb_define_method(rbffi_PointerClass, "order", ptr_order, -1); - rb_define_method(rbffi_PointerClass, "autorelease=", ptr_autorelease, 1); - rb_define_method(rbffi_PointerClass, "autorelease?", ptr_autorelease_p, 0); - rb_define_method(rbffi_PointerClass, "free", ptr_free, 0); - rb_define_method(rbffi_PointerClass, "type_size", ptr_type_size, 0); - - rbffi_NullPointerSingleton = rb_class_new_instance(1, &rbNullAddress, rbffi_PointerClass); - /* - * NULL pointer - */ - rb_define_const(rbffi_PointerClass, "NULL", rbffi_NullPointerSingleton); -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Pointer.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Pointer.h deleted file mode 100644 index 2d86851..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Pointer.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2008, 2009, Wayne Meissner - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef RBFFI_POINTER_H -#define RBFFI_POINTER_H - -#ifndef _MSC_VER -# include -#else -# include "win32/stdbool.h" -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#include "AbstractMemory.h" - -extern void rbffi_Pointer_Init(VALUE moduleFFI); -extern VALUE rbffi_Pointer_NewInstance(void* addr); -extern VALUE rbffi_PointerClass; -extern VALUE rbffi_NullPointerSingleton; - -typedef struct Pointer { - AbstractMemory memory; - VALUE rbParent; - char* storage; /* start of malloc area */ - bool autorelease; - bool allocated; -} Pointer; - -#ifdef __cplusplus -} -#endif - -#endif /* RBFFI_POINTER_H */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Pointer.o b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Pointer.o deleted file mode 100644 index 65f4ab386a938d89fa125ed69041985fe3bef927..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25644 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%0D6~XmLE&b*Ov{p@9m?eGLYKs3 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 - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#ifndef _MSC_VER -# include -# include -# include -#else -# include "win32/stdbool.h" -# include "win32/stdint.h" -#endif -#include -#include "rbffi.h" -#include "compat.h" -#include "AbstractMemory.h" -#include "Pointer.h" -#include "MemoryPointer.h" -#include "Function.h" -#include "Types.h" -#include "Function.h" -#include "StructByValue.h" -#include "ArrayType.h" -#include "MappedType.h" -#include "Struct.h" - -typedef struct InlineArray_ { - VALUE rbMemory; - VALUE rbField; - - AbstractMemory* memory; - StructField* field; - MemoryOp *op; - Type* componentType; - ArrayType* arrayType; - int length; -} InlineArray; - - -static void struct_mark(Struct *); -static void struct_free(Struct *); -static VALUE struct_class_layout(VALUE klass); -static void struct_malloc(Struct* s); -static void inline_array_mark(InlineArray *); -static void store_reference_value(StructField* f, Struct* s, VALUE value); - -VALUE rbffi_StructClass = Qnil; - -VALUE rbffi_StructInlineArrayClass = Qnil; -VALUE rbffi_StructLayoutCharArrayClass = Qnil; - -static ID id_pointer_ivar = 0, id_layout_ivar = 0; -static ID id_get = 0, id_put = 0, id_to_ptr = 0, id_to_s = 0, id_layout = 0; - -static inline char* -memory_address(VALUE self) -{ - return ((AbstractMemory *)DATA_PTR((self)))->address; -} - -static VALUE -struct_allocate(VALUE klass) -{ - Struct* s; - VALUE obj = Data_Make_Struct(klass, Struct, struct_mark, struct_free, s); - - s->rbPointer = Qnil; - s->rbLayout = Qnil; - - return obj; -} - -/* - * call-seq: initialize - * @overload initialize(pointer, *args) - * @param [AbstractMemory] pointer - * @param [Array] args - * @return [self] - */ -static VALUE -struct_initialize(int argc, VALUE* argv, VALUE self) -{ - Struct* s; - VALUE rbPointer = Qnil, rest = Qnil, klass = CLASS_OF(self); - int nargs; - - Data_Get_Struct(self, Struct, s); - - nargs = rb_scan_args(argc, argv, "01*", &rbPointer, &rest); - - /* Call up into ruby code to adjust the layout */ - if (nargs > 1) { - s->rbLayout = rb_funcall2(CLASS_OF(self), id_layout, (int) RARRAY_LEN(rest), RARRAY_PTR(rest)); - } else { - s->rbLayout = struct_class_layout(klass); - } - - if (!rb_obj_is_kind_of(s->rbLayout, rbffi_StructLayoutClass)) { - rb_raise(rb_eRuntimeError, "Invalid Struct layout"); - } - - Data_Get_Struct(s->rbLayout, StructLayout, s->layout); - - if (rbPointer != Qnil) { - s->pointer = MEMORY(rbPointer); - s->rbPointer = rbPointer; - } else { - struct_malloc(s); - } - - return self; -} - -/* - * call-seq: initialize_copy(other) - * @return [nil] - * DO NOT CALL THIS METHOD - */ -static VALUE -struct_initialize_copy(VALUE self, VALUE other) -{ - Struct* src; - Struct* dst; - - Data_Get_Struct(self, Struct, dst); - Data_Get_Struct(other, Struct, src); - if (dst == src) { - return self; - } - - dst->rbLayout = src->rbLayout; - dst->layout = src->layout; - - /* - * A new MemoryPointer instance is allocated here instead of just calling - * #dup on rbPointer, since the Pointer may not know its length, or may - * be longer than just this struct. - */ - if (src->pointer->address != NULL) { - dst->rbPointer = rbffi_MemoryPointer_NewInstance(1, src->layout->size, false); - dst->pointer = MEMORY(dst->rbPointer); - memcpy(dst->pointer->address, src->pointer->address, src->layout->size); - } else { - dst->rbPointer = src->rbPointer; - dst->pointer = src->pointer; - } - - if (src->layout->referenceFieldCount > 0) { - dst->rbReferences = ALLOC_N(VALUE, dst->layout->referenceFieldCount); - memcpy(dst->rbReferences, src->rbReferences, dst->layout->referenceFieldCount * sizeof(VALUE)); - } - - return self; -} - -static VALUE -struct_class_layout(VALUE klass) -{ - VALUE layout; - if (!rb_ivar_defined(klass, id_layout_ivar)) { - rb_raise(rb_eRuntimeError, "no Struct layout configured for %s", rb_class2name(klass)); - } - - layout = rb_ivar_get(klass, id_layout_ivar); - if (!rb_obj_is_kind_of(layout, rbffi_StructLayoutClass)) { - rb_raise(rb_eRuntimeError, "invalid Struct layout for %s", rb_class2name(klass)); - } - - return layout; -} - -static StructLayout* -struct_layout(VALUE self) -{ - Struct* s = (Struct *) DATA_PTR(self); - if (s->layout != NULL) { - return s->layout; - } - - if (s->layout == NULL) { - s->rbLayout = struct_class_layout(CLASS_OF(self)); - Data_Get_Struct(s->rbLayout, StructLayout, s->layout); - } - - return s->layout; -} - -static Struct* -struct_validate(VALUE self) -{ - Struct* s; - Data_Get_Struct(self, Struct, s); - - if (struct_layout(self) == NULL) { - rb_raise(rb_eRuntimeError, "struct layout == null"); - } - - if (s->pointer == NULL) { - struct_malloc(s); - } - - return s; -} - -static void -struct_malloc(Struct* s) -{ - if (s->rbPointer == Qnil) { - s->rbPointer = rbffi_MemoryPointer_NewInstance(s->layout->size, 1, true); - - } else if (!rb_obj_is_kind_of(s->rbPointer, rbffi_AbstractMemoryClass)) { - rb_raise(rb_eRuntimeError, "invalid pointer in struct"); - } - - s->pointer = (AbstractMemory *) DATA_PTR(s->rbPointer); -} - -static void -struct_mark(Struct *s) -{ - rb_gc_mark(s->rbPointer); - rb_gc_mark(s->rbLayout); - if (s->rbReferences != NULL) { - rb_gc_mark_locations(&s->rbReferences[0], &s->rbReferences[s->layout->referenceFieldCount]); - } -} - -static void -struct_free(Struct* s) -{ - xfree(s->rbReferences); - xfree(s); -} - - -static void -store_reference_value(StructField* f, Struct* s, VALUE value) -{ - if (unlikely(f->referenceIndex == -1)) { - rb_raise(rb_eRuntimeError, "put_reference_value called for non-reference type"); - return; - } - if (s->rbReferences == NULL) { - int i; - s->rbReferences = ALLOC_N(VALUE, s->layout->referenceFieldCount); - for (i = 0; i < s->layout->referenceFieldCount; ++i) { - s->rbReferences[i] = Qnil; - } - } - - s->rbReferences[f->referenceIndex] = value; -} - - -static VALUE -struct_field(Struct* s, VALUE fieldName) -{ - StructLayout* layout = s->layout; - VALUE rbField; - - if (likely(SYMBOL_P(fieldName) && st_lookup(layout->fieldSymbolTable, fieldName, (st_data_t *) &rbField))) { - return rbField; - } - - // TODO does this ever return anything? - rbField = rb_hash_aref(layout->rbFieldMap, fieldName); - if (rbField == Qnil) { - VALUE str = rb_funcall2(fieldName, id_to_s, 0, NULL); - rb_raise(rb_eArgError, "No such field '%s'", StringValuePtr(str)); - } - - return rbField; -} - -/* - * call-seq: struct[field_name] - * @param field_name field to access - * Acces to a Struct field. - */ -static VALUE -struct_aref(VALUE self, VALUE fieldName) -{ - Struct* s; - VALUE rbField; - StructField* f; - - s = struct_validate(self); - - rbField = struct_field(s, fieldName); - f = (StructField *) DATA_PTR(rbField); - - if (f->get != NULL) { - return (*f->get)(f, s); - - } else if (f->memoryOp != NULL) { - return (*f->memoryOp->get)(s->pointer, f->offset); - - } else { - - /* call up to the ruby code to fetch the value */ - return rb_funcall2(rbField, id_get, 1, &s->rbPointer); - } -} - -/* - * call-seq: []=(field_name, value) - * @param field_name field to access - * @param value value to set to +field_name+ - * @return [value] - * Set a field in Struct. - */ -static VALUE -struct_aset(VALUE self, VALUE fieldName, VALUE value) -{ - Struct* s; - VALUE rbField; - StructField* f; - - - s = struct_validate(self); - - rbField = struct_field(s, fieldName); - f = (StructField *) DATA_PTR(rbField); - if (f->put != NULL) { - (*f->put)(f, s, value); - - } else if (f->memoryOp != NULL) { - - (*f->memoryOp->put)(s->pointer, f->offset, value); - - } else { - /* call up to the ruby code to set the value */ - VALUE argv[2]; - argv[0] = s->rbPointer; - argv[1] = value; - rb_funcall2(rbField, id_put, 2, argv); - } - - if (f->referenceRequired) { - store_reference_value(f, s, value); - } - - return value; -} - -/* - * call-seq: pointer= pointer - * @param [AbstractMemory] pointer - * @return [self] - * Make Struct point to +pointer+. - */ -static VALUE -struct_set_pointer(VALUE self, VALUE pointer) -{ - Struct* s; - StructLayout* layout; - AbstractMemory* memory; - - if (!rb_obj_is_kind_of(pointer, rbffi_AbstractMemoryClass)) { - rb_raise(rb_eTypeError, "wrong argument type %s (expected Pointer or Buffer)", - rb_obj_classname(pointer)); - return Qnil; - } - - - Data_Get_Struct(self, Struct, s); - Data_Get_Struct(pointer, AbstractMemory, memory); - layout = struct_layout(self); - - if ((int) layout->base.ffiType->size > memory->size) { - rb_raise(rb_eArgError, "memory of %ld bytes too small for struct %s (expected at least %ld)", - memory->size, rb_obj_classname(self), (long) layout->base.ffiType->size); - } - - s->pointer = MEMORY(pointer); - s->rbPointer = pointer; - rb_ivar_set(self, id_pointer_ivar, pointer); - - return self; -} - -/* - * call-seq: pointer - * @return [AbstractMemory] - * Get pointer to Struct contents. - */ -static VALUE -struct_get_pointer(VALUE self) -{ - Struct* s; - - Data_Get_Struct(self, Struct, s); - - return s->rbPointer; -} - -/* - * call-seq: layout= layout - * @param [StructLayout] layout - * @return [self] - * Set the Struct's layout. - */ -static VALUE -struct_set_layout(VALUE self, VALUE layout) -{ - Struct* s; - Data_Get_Struct(self, Struct, s); - - if (!rb_obj_is_kind_of(layout, rbffi_StructLayoutClass)) { - rb_raise(rb_eTypeError, "wrong argument type %s (expected %s)", - rb_obj_classname(layout), rb_class2name(rbffi_StructLayoutClass)); - return Qnil; - } - - Data_Get_Struct(layout, StructLayout, s->layout); - rb_ivar_set(self, id_layout_ivar, layout); - - return self; -} - -/* - * call-seq: layout - * @return [StructLayout] - * Get the Struct's layout. - */ -static VALUE -struct_get_layout(VALUE self) -{ - Struct* s; - - Data_Get_Struct(self, Struct, s); - - return s->rbLayout; -} - -/* - * call-seq: null? - * @return [Boolean] - * Test if Struct's pointer is NULL - */ -static VALUE -struct_null_p(VALUE self) -{ - Struct* s; - - Data_Get_Struct(self, Struct, s); - - return s->pointer->address == NULL ? Qtrue : Qfalse; -} - -/* - * (see Pointer#order) - */ -static VALUE -struct_order(int argc, VALUE* argv, VALUE self) -{ - Struct* s; - - Data_Get_Struct(self, Struct, s); - if (argc == 0) { - return rb_funcall(s->rbPointer, rb_intern("order"), 0); - - } else { - VALUE retval = rb_obj_dup(self); - VALUE rbPointer = rb_funcall2(s->rbPointer, rb_intern("order"), argc, argv); - struct_set_pointer(retval, rbPointer); - - return retval; - } -} - -static VALUE -inline_array_allocate(VALUE klass) -{ - InlineArray* array; - VALUE obj; - - obj = Data_Make_Struct(klass, InlineArray, inline_array_mark, -1, array); - array->rbField = Qnil; - array->rbMemory = Qnil; - - return obj; -} - -static void -inline_array_mark(InlineArray* array) -{ - rb_gc_mark(array->rbField); - rb_gc_mark(array->rbMemory); -} - -/* - * Document-method: FFI::Struct::InlineArray#initialize - * call-seq: initialize(memory, field) - * @param [AbstractMemory] memory - * @param [StructField] field - * @return [self] - */ -static VALUE -inline_array_initialize(VALUE self, VALUE rbMemory, VALUE rbField) -{ - InlineArray* array; - - Data_Get_Struct(self, InlineArray, array); - array->rbMemory = rbMemory; - array->rbField = rbField; - - Data_Get_Struct(rbMemory, AbstractMemory, array->memory); - Data_Get_Struct(rbField, StructField, array->field); - Data_Get_Struct(array->field->rbType, ArrayType, array->arrayType); - Data_Get_Struct(array->arrayType->rbComponentType, Type, array->componentType); - - array->op = get_memory_op(array->componentType); - if (array->op == NULL && array->componentType->nativeType == NATIVE_MAPPED) { - array->op = get_memory_op(((MappedType *) array->componentType)->type); - } - - array->length = array->arrayType->length; - - return self; -} - -/* - * call-seq: size - * @return [Numeric] - * Get size - */ -static VALUE -inline_array_size(VALUE self) -{ - InlineArray* array; - - Data_Get_Struct(self, InlineArray, array); - - return UINT2NUM(((ArrayType *) array->field->type)->length); -} - -static int -inline_array_offset(InlineArray* array, int index) -{ - if (index < 0 || (index >= array->length && array->length > 0)) { - rb_raise(rb_eIndexError, "index %d out of bounds", index); - } - - return (int) array->field->offset + (index * (int) array->componentType->ffiType->size); -} - -/* - * call-seq: [](index) - * @param [Numeric] index - * @return [Type, Struct] - */ -static VALUE -inline_array_aref(VALUE self, VALUE rbIndex) -{ - InlineArray* array; - - Data_Get_Struct(self, InlineArray, array); - - if (array->op != NULL) { - VALUE rbNativeValue = array->op->get(array->memory, - inline_array_offset(array, NUM2INT(rbIndex))); - if (unlikely(array->componentType->nativeType == NATIVE_MAPPED)) { - return rb_funcall(((MappedType *) array->componentType)->rbConverter, - rb_intern("from_native"), 2, rbNativeValue, Qnil); - } else { - return rbNativeValue; - } - - } else if (array->componentType->nativeType == NATIVE_STRUCT) { - VALUE rbOffset = INT2NUM(inline_array_offset(array, NUM2INT(rbIndex))); - VALUE rbLength = INT2NUM(array->componentType->ffiType->size); - VALUE rbPointer = rb_funcall(array->rbMemory, rb_intern("slice"), 2, rbOffset, rbLength); - - return rb_class_new_instance(1, &rbPointer, ((StructByValue *) array->componentType)->rbStructClass); - } else { - - rb_raise(rb_eArgError, "get not supported for %s", rb_obj_classname(array->arrayType->rbComponentType)); - return Qnil; - } -} - -/* - * call-seq: []=(index, value) - * @param [Numeric] index - * @param [Type, Struct] - * @return [value] - */ -static VALUE -inline_array_aset(VALUE self, VALUE rbIndex, VALUE rbValue) -{ - InlineArray* array; - - Data_Get_Struct(self, InlineArray, array); - - if (array->op != NULL) { - if (unlikely(array->componentType->nativeType == NATIVE_MAPPED)) { - rbValue = rb_funcall(((MappedType *) array->componentType)->rbConverter, - rb_intern("to_native"), 2, rbValue, Qnil); - } - array->op->put(array->memory, inline_array_offset(array, NUM2INT(rbIndex)), - rbValue); - - } else if (array->componentType->nativeType == NATIVE_STRUCT) { - int offset = inline_array_offset(array, NUM2INT(rbIndex)); - Struct* s; - - if (!rb_obj_is_kind_of(rbValue, rbffi_StructClass)) { - rb_raise(rb_eTypeError, "argument not an instance of struct"); - return Qnil; - } - - checkWrite(array->memory); - checkBounds(array->memory, offset, array->componentType->ffiType->size); - - Data_Get_Struct(rbValue, Struct, s); - checkRead(s->pointer); - checkBounds(s->pointer, 0, array->componentType->ffiType->size); - - memcpy(array->memory->address + offset, s->pointer->address, array->componentType->ffiType->size); - - } else { - ArrayType* arrayType; - Data_Get_Struct(array->field->rbType, ArrayType, arrayType); - - rb_raise(rb_eArgError, "set not supported for %s", rb_obj_classname(arrayType->rbComponentType)); - return Qnil; - } - - return rbValue; -} - -/* - * call-seq: each - * Yield block for each element of +self+. - */ -static VALUE -inline_array_each(VALUE self) -{ - InlineArray* array; - - int i; - - Data_Get_Struct(self, InlineArray, array); - - for (i = 0; i < array->length; ++i) { - rb_yield(inline_array_aref(self, INT2FIX(i))); - } - - return self; -} - -/* - * call-seq: to_a - * @return [Array] - * Convert +self+ to an array. - */ -static VALUE -inline_array_to_a(VALUE self) -{ - InlineArray* array; - VALUE obj; - int i; - - Data_Get_Struct(self, InlineArray, array); - obj = rb_ary_new2(array->length); - - - for (i = 0; i < array->length; ++i) { - rb_ary_push(obj, inline_array_aref(self, INT2FIX(i))); - } - - return obj; -} - -/* - * Document-method: FFI::StructLayout::CharArray#to_s - * call-seq: to_s - * @return [String] - * Convert +self+ to a string. - */ -static VALUE -inline_array_to_s(VALUE self) -{ - InlineArray* array; - VALUE argv[2]; - - Data_Get_Struct(self, InlineArray, array); - - if (array->componentType->nativeType != NATIVE_INT8 && array->componentType->nativeType != NATIVE_UINT8) { - VALUE dummy = Qnil; - return rb_call_super(0, &dummy); - } - - argv[0] = UINT2NUM(array->field->offset); - argv[1] = UINT2NUM(array->length); - - return rb_funcall2(array->rbMemory, rb_intern("get_string"), 2, argv); -} - -/* - * call-seq: to_ptr - * @return [AbstractMemory] - * Get pointer to +self+ content. - */ -static VALUE -inline_array_to_ptr(VALUE self) -{ - InlineArray* array; - - Data_Get_Struct(self, InlineArray, array); - - return rb_funcall(array->rbMemory, rb_intern("slice"), 2, - UINT2NUM(array->field->offset), UINT2NUM(array->arrayType->base.ffiType->size)); -} - - -void -rbffi_Struct_Init(VALUE moduleFFI) -{ - VALUE StructClass; - - rbffi_StructLayout_Init(moduleFFI); - - /* - * Document-class: FFI::Struct - * - * A FFI::Struct means to mirror a C struct. - * - * A Struct is defined as: - * class MyStruct < FFI::Struct - * layout :value1, :int, - * :value2, :double - * end - * and is used as: - * my_struct = MyStruct.new - * my_struct[:value1] = 12 - * - * For more information, see http://github.com/ffi/ffi/wiki/Structs - */ - rbffi_StructClass = rb_define_class_under(moduleFFI, "Struct", rb_cObject); - StructClass = rbffi_StructClass; // put on a line alone to help RDoc - rb_global_variable(&rbffi_StructClass); - - /* - * Document-class: FFI::Struct::InlineArray - */ - rbffi_StructInlineArrayClass = rb_define_class_under(rbffi_StructClass, "InlineArray", rb_cObject); - rb_global_variable(&rbffi_StructInlineArrayClass); - - /* - * Document-class: FFI::StructLayout::CharArray < FFI::Struct::InlineArray - */ - rbffi_StructLayoutCharArrayClass = rb_define_class_under(rbffi_StructLayoutClass, "CharArray", - rbffi_StructInlineArrayClass); - rb_global_variable(&rbffi_StructLayoutCharArrayClass); - - - rb_define_alloc_func(StructClass, struct_allocate); - rb_define_method(StructClass, "initialize", struct_initialize, -1); - rb_define_method(StructClass, "initialize_copy", struct_initialize_copy, 1); - rb_define_method(StructClass, "order", struct_order, -1); - - rb_define_alias(rb_singleton_class(StructClass), "alloc_in", "new"); - rb_define_alias(rb_singleton_class(StructClass), "alloc_out", "new"); - rb_define_alias(rb_singleton_class(StructClass), "alloc_inout", "new"); - rb_define_alias(rb_singleton_class(StructClass), "new_in", "new"); - rb_define_alias(rb_singleton_class(StructClass), "new_out", "new"); - rb_define_alias(rb_singleton_class(StructClass), "new_inout", "new"); - - rb_define_method(StructClass, "pointer", struct_get_pointer, 0); - rb_define_private_method(StructClass, "pointer=", struct_set_pointer, 1); - - rb_define_method(StructClass, "layout", struct_get_layout, 0); - rb_define_private_method(StructClass, "layout=", struct_set_layout, 1); - - rb_define_method(StructClass, "[]", struct_aref, 1); - rb_define_method(StructClass, "[]=", struct_aset, 2); - rb_define_method(StructClass, "null?", struct_null_p, 0); - - rb_include_module(rbffi_StructInlineArrayClass, rb_mEnumerable); - rb_define_alloc_func(rbffi_StructInlineArrayClass, inline_array_allocate); - rb_define_method(rbffi_StructInlineArrayClass, "initialize", inline_array_initialize, 2); - rb_define_method(rbffi_StructInlineArrayClass, "[]", inline_array_aref, 1); - rb_define_method(rbffi_StructInlineArrayClass, "[]=", inline_array_aset, 2); - rb_define_method(rbffi_StructInlineArrayClass, "each", inline_array_each, 0); - rb_define_method(rbffi_StructInlineArrayClass, "size", inline_array_size, 0); - rb_define_method(rbffi_StructInlineArrayClass, "to_a", inline_array_to_a, 0); - rb_define_method(rbffi_StructInlineArrayClass, "to_ptr", inline_array_to_ptr, 0); - - rb_define_method(rbffi_StructLayoutCharArrayClass, "to_s", inline_array_to_s, 0); - rb_define_alias(rbffi_StructLayoutCharArrayClass, "to_str", "to_s"); - - id_pointer_ivar = rb_intern("@pointer"); - id_layout_ivar = rb_intern("@layout"); - id_layout = rb_intern("layout"); - id_get = rb_intern("get"); - id_put = rb_intern("put"); - id_to_ptr = rb_intern("to_ptr"); - id_to_s = rb_intern("to_s"); -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Struct.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Struct.h deleted file mode 100644 index 85e8263..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Struct.h +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (c) 2008, 2009, Wayne Meissner - * Copyright (c) 2009, Luc Heinrich - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef RBFFI_STRUCT_H -#define RBFFI_STRUCT_H - -#include "extconf.h" -#include "AbstractMemory.h" -#include "Type.h" -#ifdef RUBY_1_9 -#include -#else -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif - - extern void rbffi_Struct_Init(VALUE ffiModule); - extern void rbffi_StructLayout_Init(VALUE ffiModule); - typedef struct StructField_ StructField; - typedef struct StructLayout_ StructLayout; - typedef struct Struct_ Struct; - - struct StructField_ { - Type* type; - unsigned int offset; - - int referenceIndex; - - bool referenceRequired; - VALUE rbType; - VALUE rbName; - - VALUE (*get)(StructField* field, Struct* s); - void (*put)(StructField* field, Struct* s, VALUE value); - - MemoryOp* memoryOp; - }; - - struct StructLayout_ { - Type base; - StructField** fields; - int fieldCount; - int size; - int align; - ffi_type** ffiTypes; - struct st_table* fieldSymbolTable; - - /** The number of reference tracking fields in this struct */ - int referenceFieldCount; - - VALUE rbFieldNames; - VALUE rbFieldMap; - VALUE rbFields; - }; - - struct Struct_ { - StructLayout* layout; - AbstractMemory* pointer; - VALUE* rbReferences; - - VALUE rbLayout; - VALUE rbPointer; - }; - - extern VALUE rbffi_StructClass, rbffi_StructLayoutClass; - extern VALUE rbffi_StructLayoutFieldClass, rbffi_StructLayoutFunctionFieldClass; - extern VALUE rbffi_StructLayoutArrayFieldClass; - extern VALUE rbffi_StructInlineArrayClass; - extern VALUE rbffi_StructLayoutCharArrayClass; - -#ifdef __cplusplus -} -#endif - -#endif /* RBFFI_STRUCT_H */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Struct.o b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Struct.o deleted file mode 100644 index 4c5b422ae49f289595b0196783cda9e4cb19c778..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46528 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

)JtJEjK+5@^WRA78bpSYhUr-@fGp4A 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 sDJ00TISFauANkTY&@Ty>{3( -#endif -#include -#include -#ifndef _MSC_VER -# include -# include -#else -# include "win32/stdbool.h" -# include "win32/stdint.h" -#endif -#include -#include - -#include -#include "rbffi.h" -#include "compat.h" - -#include "Pointer.h" -#include "Struct.h" -#include "StructByReference.h" - - -#define FFI_ALIGN(v, a) (((((size_t) (v))-1) | ((a)-1))+1) - -static VALUE sbr_allocate(VALUE); -static VALUE sbr_initialize(VALUE, VALUE); -static void sbr_mark(StructByReference *); - -VALUE rbffi_StructByReferenceClass = Qnil; - -static VALUE -sbr_allocate(VALUE klass) -{ - StructByReference* sbr; - - VALUE obj = Data_Make_Struct(klass, StructByReference, sbr_mark, -1, sbr); - - sbr->rbStructClass = Qnil; - - return obj; -} - -/* - * call-seq: initialize(struc_class) - * @param [Struct] struct_calss - * @return [self] - * A new instance of StructByReference. - */ -static VALUE -sbr_initialize(VALUE self, VALUE rbStructClass) -{ - StructByReference* sbr = NULL; - - if (!rb_class_inherited_p(rbStructClass, rbffi_StructClass)) { - rb_raise(rb_eTypeError, "wrong type (expected subclass of FFI::Struct)"); - } - - Data_Get_Struct(self, StructByReference, sbr); - sbr->rbStructClass = rbStructClass; - - return self; -} - -static void -sbr_mark(StructByReference *sbr) -{ - rb_gc_mark(sbr->rbStructClass); -} - - -/* - * call-seq: struct_class - * @return [Struct] - * Get +struct_class+. - */ -static VALUE -sbr_struct_class(VALUE self) -{ - StructByReference* sbr; - - Data_Get_Struct(self, StructByReference, sbr); - - return sbr->rbStructClass; -} - -/* - * call-seq: native_type - * @return [Class] - * Always get {FFI::Type}::POINTER. - */ -static VALUE -sbr_native_type(VALUE self) -{ - return rb_const_get(rbffi_TypeClass, rb_intern("POINTER")); -} - -/* - * call-seq: to_native(value, ctx) - * @param [nil, Struct] value - * @param [nil] ctx - * @return [AbstractMemory] Pointer on +value+. - */ -static VALUE -sbr_to_native(VALUE self, VALUE value, VALUE ctx) -{ - StructByReference* sbr; - Struct* s; - - if (unlikely(value == Qnil)) { - return rbffi_NullPointerSingleton; - } - - Data_Get_Struct(self, StructByReference, sbr); - if (!rb_obj_is_kind_of(value, sbr->rbStructClass)) { - rb_raise(rb_eTypeError, "wrong argument type %s (expected %s)", - rb_obj_classname(value), - RSTRING_PTR(rb_class_name(sbr->rbStructClass))); - } - - Data_Get_Struct(value, Struct, s); - - return s->rbPointer; -} - -/* - * call-seq: from_native(value, ctx) - * @param [AbstractMemory] value - * @param [nil] ctx - * @return [Struct] - * Create a struct from content of memory +value+. - */ -static VALUE -sbr_from_native(VALUE self, VALUE value, VALUE ctx) -{ - StructByReference* sbr; - - Data_Get_Struct(self, StructByReference, sbr); - - return rb_class_new_instance(1, &value, sbr->rbStructClass); -} - - -void -rbffi_StructByReference_Init(VALUE moduleFFI) -{ - /* - * Document-class: FFI::StructByReference - * This class includes {FFI::DataConverter} module. - */ - rbffi_StructByReferenceClass = rb_define_class_under(moduleFFI, "StructByReference", rb_cObject); - rb_global_variable(&rbffi_StructByReferenceClass); - rb_include_module(rbffi_StructByReferenceClass, rb_const_get(moduleFFI, rb_intern("DataConverter"))); - - rb_define_alloc_func(rbffi_StructByReferenceClass, sbr_allocate); - rb_define_method(rbffi_StructByReferenceClass, "initialize", sbr_initialize, 1); - rb_define_method(rbffi_StructByReferenceClass, "struct_class", sbr_struct_class, 0); - rb_define_method(rbffi_StructByReferenceClass, "native_type", sbr_native_type, 0); - rb_define_method(rbffi_StructByReferenceClass, "to_native", sbr_to_native, 2); - rb_define_method(rbffi_StructByReferenceClass, "from_native", sbr_from_native, 2); -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/StructByReference.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/StructByReference.h deleted file mode 100644 index cf797af..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/StructByReference.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2009, Wayne Meissner - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * The name of the author or authors may not be used to endorse or promote - * products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef RBFFI_STRUCTBYREFERENCE_H -#define RBFFI_STRUCTBYREFERENCE_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct StructByReference_ { - VALUE rbStructClass; -} StructByReference; - -void rbffi_StructByReference_Init(VALUE moduleFFI); - -extern VALUE rbffi_StructByReferenceClass; - -#ifdef __cplusplus -} -#endif - -#endif /* RBFFI_STRUCTBYREFERENCE_H */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/StructByReference.o b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/StructByReference.o deleted file mode 100644 index 9394500c929e1dd30516ea4b19e377b87f736d54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12908 zcma)C3v^snx!xydW-@bTax!U>CWWS*zGzxa(g*ZqOFMaWrkx~hUQL1aFiB35v6GoN zkG8>OskC^Bxk$Yi1(%}2Mb}k9@w(6}U@eM*OHuH#R9qMFs#nCN;PQ$OmTxAM0mBE#g zJbW^`t4WBnRsf_M#q%omuGbPfem-J7lZQt#R6^h_d#MrKe}&V>v6II+aL`TUM-784}(U zlAMh162>IV8*c*;Cd;22B;^%AdDQtAzY|XFMlT++%tE zF35a6E29WCi_%XaK3PRcd~2cRLpC4=7%6Fp{RH+D+VgFUore%{utT`%qDPKyvL*S# zAr9gHa}7o2ejOejh|IkbnRk4 zcj*mu4-|A?23hX*!)5Ag!^e;PmST|kiO#+HRf^`K*C{*qbs1*l@kd|76{7||D?)l) zCp&WT^$C8pR9^rhWq9SvTzWjJ7?}?myH26DLWIo!6guRTGY`%mzVsrn^ z?JrRO@_a?+@-LO=3{OJ-CEo9%`GpLYv^O%pR}2<-_u{5&AeYIH<=SWa?Fl<$r^am7 ziT8(&bn2v?$=Ml}NF{QKcrtN=&9KD6)EZ01v4W@Kxx`7^qB)f1(w1P^L?%70=u??= zYBEFyp=SH^j6IgK$3xltC@&vMPlUR=qq}yA`ZuscebL^*u6`y;#WR!nX*-n@#n)wv zJgm!ZVBwjWq#cUIhI>K?Gn+`KLOWYGwQdSE!+C15W#=X^ty_1tZrQM~fvsb#Z77Rk zZFVw_S@A@CI+?U*+h)?4+(bH=NViSq6XSNa?WCO=PiNXj^QrNq-ImFZ&bDo7-O{?L zZPK33woObVS~j=tY~9g@_c!9KF_sx6ydb3=JYz{pM?RHJOs0^CL@LLI!?B?*6tckB znUs|nx5naQQ#Olsvi_m=qt@Yxcrt5C8rfH5Dv^{z#AZ(jI@;6I)fo*Bc3C~)frCQU z9UbW%>an_G;r&t&>mxytg%A`h29EZ$_r;2e3>@m}h=yaIhhmOlcdRe$*bNN!M|)+YgI0gn{;rWj zs#v(cKYUa%k?=r7(I_-jsH#1>9}QHx?r5PV{vOQJI*9fUb~p|?`g#t%i3E2g)v(AC{R9m+cs|p-c+pa8D6*!EO{f?%X;XPPz z!P(Mcoqa>?=m#0HdeSA^5st;$!yN~ex_hX%gE~O*?L*z&UHw+HT+lZ(xWJ@H))5K! zTVl+}irV}7Vyc83Xi_sA?hp6xA1G4NfRf4*A3fnihq^i$f0XG7&WwtOT|D6n9(-%z z>>~yOjYW%E%0}ba#2A}M#wWAv1fM7R+qr0bI-WVf#wRki&G?qCpC)D&&$1~yKEslB zip^lpGd2~^uz3D78;j4xSr(i<&f=L_mc^9KXXk!|Mf02QOsGicwm zJ)O?X_RX;P_;|*~N<~o&P>aH&*<1#1>OI`TD&v_DqoC-EvL1G-)%wDahDtDxRIf!pS$~l*An7dbCTBq!dX?<)^LDL@LXWyi5YS z66`2WprIs}A~u?s#0?ub$x$U-GfTr^oaN$J5@aD&0Cqwm4Kp^T>>?$1QphfEqi9`b zlrxmqEYi%G9t=83W@UX>7)pe|K9?wF`;nd59ms@~<83@P$HM>Oz&B%dgV91oIEj&5*F z1{L{PM|6ClqvPd{ZkN_Y)t8$*B~5)GpKwISKPAaW3ZjAwK`BSa9g{&t-tCA6l%uB$qStejb4(7aQvXp9m6w{7s#_eB z1wElucR3~ta{3{uDwr%7Vd{v{M@JvHkW)o&c0>ytt5QoGlfl)J+$wPeJ2@j<7D1_N zaEcu+QgX6Ns@|aTebQvV<7L4x&}y`GX02N{gAJFPHQEvnjySGlx*4tAyKI;LZT<=z zjOa^Qv{pBX#aZoIXs`DBLAqN}dWmOWqtLBiwihSL9#LAAt#q@B2BDAEV#`)ugoHkq zrkj30is1aiXommgINb2NG%iC$focT6SXHgEgUqbrQBplSz*ajk!bh-PTaQp`+`QNl zI;XC6%0ge~ly%>tRa5c$f`r(m1#1{E)^G*))Yu?Gf{SIf4tbfTQFNEDg3WdmUQQYE z`>zJsR1Xz}vO=0ew$iBzNv!e*c=#dd8TwUJhOyOjBDJO#u6CpR+AB-axULnMpnR=g z7Of4T&=qbNl7Nb?r!Jtx5YybGZLXzm8u1^6;RfoD&5&;_?+H|Q5c9q`YxeT#C&1py zhZ9>=X+<9ZON(u+iii&hJ5_ywG9RNU`*60&*R z6%YD!byiO29_$2m^cDA$TgH7o2SU5nt7fwC5U|o%3#b`a0qRCKV1;o6FknmpdYSJxm>^u* zXEftB@XYuypk{muu)_Evpl&<{=rW!LbQ?bh^ccSftTg@(=ruej?lbBD4P!N+-)IF4 z7`p(gjQxP7F$`F3OaRsx?*Lq4ybG|_crRd`aVKEC@kzkTjV}N$H@*tkWIPGD!uT2B zN<1?96~+; zz<_ZtV3qMjK-2gJV72ihz@YJKz#8Laz$JzkW2V+v4p?Wj0@fS50GApOzy{+8V54CJ zE;BNKmoe8_Ah$P=MWp%}fKP*Wt*^QR$m?2X&H+>Zx^OOB{W0htfk1mf58MknSo0Y` zwj}U*pxQq})2v<8>%I-*B}lZd;yAGWSKz3ic1aJ`zo3{$^~U;_z>ov&YkG(+{V#Aq z&82(mp9V#BYHpp?{}@a?nx=W+tbxP<@*P+US#1jjb+Z;JsxnGdzJf9lDl@1D8ymF) zdi|@ATtgD%d0C@&P_Nffl-4UPhDtCqGRmvggX)7|DDB!|l=f=9dVQU;?St(yFg!Z` zsMUwSevPaL09fE*K$jmfk9HZ+mwy+a5%Um4-par;;B@M*@8BWxZLN9?sM$AcUIq0= z#OOQ1%#T2JBj$eJh}XOqv=eS7*LF(I5^=_aM zUzfQXP9GCX#TG0cCnErhP@GvTIzqRT?prCt`83z6n#O}?^JOY|J z$GyeN^hDr^nMUI+?6Z%G)8jIb*`I9QV~c11*n!lmcVHM{T#pvYVGE#<3Rg-S8?Zmh1j=^ znU4eigXryE^Jl<389M{!A3*!5*xQ1p2blNN?nbjp(R)H>9cWtBeS4eDM&R{C@7rW9 z2i`+;`wkYM9&>#c-YQ+L7l7O@7lW=s3p4;Vk>47MwuT;l7I-U!!GfTM^eoU0son!H zgxlD?B53U7wZEO%U5wZM1krEvvOpSy@Jqw4hQGxH&V$r%1L($WY_Hk|)My+w*8$U` zV)QfK8Dwn?cujg}DHq0I&};$b^iUlOJP9UP<9L<%mBE$2RjMKHUKTXzQQtzAR%58qKWzRP>UQFk3t=-+PM1N%Xn@*YtpcMBuOa_$=l*F!$Nh6wI7~VY)&9yPhp7z@6dbCp z&gZzpPI7oNclfe$DA>J-?My*S`;YSuyViw~d<(I+(9X3z6N}nn z@JxJi!Vok^4&X*`6Fs^te4 zl-@TL$uAQTfl&quZ6oocUZ+HY#CCfO+FdJXLgg7MqAPlI=;ftb;1R(_I7%b`3}rTMzly~Sv{DV!M6Vplj!rA@-Z z??|+GIH#Airit@WdK#RQYI?WfXT`K!@pIFErAE?Mrov$~Ev2Fj{K(H@^wOrzk7=G_;#F9TOQnnzPtc3$i|5zH^d<8n(-!zI*>^3XFP;u-uw5^YuVhYI zqO78_&t%aO^nR(z@`WN7}*Hj)@*bKg>qNB>wanAKV z^g7vf;{NxabFHUxBa`xD z5EvJKR6#hig0L=~&4etQ1E%b_Dwq#dic7y=)7;k>|K?un`KWvKLvFX{$L@xs?jBF> zqpZTEwYskYs_=f)jZ+twev|t$&u3wib1(HgEU`DQh=U6Vp<*8WrW?KYxoeEO$*0E~ zayNRs=iTm;IP>v)ce`7SZ@UfD@4L^X!H51sZ>xLFw_FwOM*V?P2i)$f-AnWvZgTrz z0$&Z@5i&FMN4yu@Yd!|E8vO|}^I+@d(GBm2dzo?2z0vcKY(hXb0ZP9YZVc~I&jC@> zU8<&L{Wox7z=aCpPNk~WUp#fdqyP5I0XMeOcWS#m`txTlxR-eJ3)%&D&ByNd=zlmv zRaNN!qV2v3%!p(r+&Mi=&(+AuEB-72?^`#q;ih4wjhE#a? zY!gLq<3FvIX5ebzT44O{)A9=X5A#RMAAljM{}C`=aaz7D@g?BPz&{9Fk6qGz!1$$Z z&-;O?{Efhu1J6i43>*Z%6&UXlO&fr5X4kS3nEcmDIgOi@@I%K#|fl0>2y>b7c#?Cu5arsstu~G+yym()2eB zR?@!+jG^B2JTU2h0ZjU5r2YrMcqW>@BlX{q`ioNkB_VHmKas6`=Uy}Ia5}%d$dWrW*9FiD_m*0g-sGf@eCMs5Er&kk? zJA|7qqUl!a|4u1W>%A@Y6dYYEB(K)<7Ntk>>H0Np^0!a&^lggjS4XaC=&RvNodZM7 zstL%e1-OW1!(fW}FO=zTDbv&QQ*4iCsDwXIroX<7|45nr#xnh_WqNu}itGDySv+@? z@h8jtoh;M8QsysKrvFx%{$Lq@yo}#nRv)w8aDM}>_{)iZk>*?<|3ZzWuzWjK;z?|F zq=**N62XE+*U?%w8Fyte=?sO2zuPD9kDB=D4!; BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _MSC_VER -#include -#endif -#include -#include -#ifndef _MSC_VER -# include -# include -#else -# include "win32/stdbool.h" -# include "win32/stdint.h" -#endif -#include -#include - -#include -#include "rbffi.h" -#include "compat.h" - -#include "Type.h" -#include "StructByValue.h" -#include "Struct.h" - -#define FFI_ALIGN(v, a) (((((size_t) (v))-1) | ((a)-1))+1) - -static VALUE sbv_allocate(VALUE); -static VALUE sbv_initialize(VALUE, VALUE); -static void sbv_mark(StructByValue *); -static void sbv_free(StructByValue *); - -VALUE rbffi_StructByValueClass = Qnil; - -static VALUE -sbv_allocate(VALUE klass) -{ - StructByValue* sbv; - - VALUE obj = Data_Make_Struct(klass, StructByValue, sbv_mark, sbv_free, sbv); - - sbv->rbStructClass = Qnil; - sbv->rbStructLayout = Qnil; - sbv->base.nativeType = NATIVE_STRUCT; - - sbv->base.ffiType = xcalloc(1, sizeof(*sbv->base.ffiType)); - sbv->base.ffiType->size = 0; - sbv->base.ffiType->alignment = 1; - sbv->base.ffiType->type = FFI_TYPE_STRUCT; - - return obj; -} - -static VALUE -sbv_initialize(VALUE self, VALUE rbStructClass) -{ - StructByValue* sbv = NULL; - StructLayout* layout = NULL; - VALUE rbLayout = Qnil; - - rbLayout = rb_ivar_get(rbStructClass, rb_intern("@layout")); - if (!rb_obj_is_instance_of(rbLayout, rbffi_StructLayoutClass)) { - rb_raise(rb_eTypeError, "wrong type in @layout ivar (expected FFI::StructLayout)"); - } - - Data_Get_Struct(rbLayout, StructLayout, layout); - Data_Get_Struct(self, StructByValue, sbv); - sbv->rbStructClass = rbStructClass; - sbv->rbStructLayout = rbLayout; - - /* We can just use everything from the ffi_type directly */ - *sbv->base.ffiType = *layout->base.ffiType; - - return self; -} - -static void -sbv_mark(StructByValue *sbv) -{ - rb_gc_mark(sbv->rbStructClass); - rb_gc_mark(sbv->rbStructLayout); -} - -static void -sbv_free(StructByValue *sbv) -{ - xfree(sbv->base.ffiType); - xfree(sbv); -} - - -static VALUE -sbv_layout(VALUE self) -{ - StructByValue* sbv; - - Data_Get_Struct(self, StructByValue, sbv); - return sbv->rbStructLayout; -} - -static VALUE -sbv_struct_class(VALUE self) -{ - StructByValue* sbv; - - Data_Get_Struct(self, StructByValue, sbv); - - return sbv->rbStructClass; -} - -void -rbffi_StructByValue_Init(VALUE moduleFFI) -{ - rbffi_StructByValueClass = rb_define_class_under(moduleFFI, "StructByValue", rbffi_TypeClass); - rb_global_variable(&rbffi_StructByValueClass); - rb_define_const(rbffi_TypeClass, "Struct", rbffi_StructByValueClass); - - rb_define_alloc_func(rbffi_StructByValueClass, sbv_allocate); - rb_define_method(rbffi_StructByValueClass, "initialize", sbv_initialize, 1); - rb_define_method(rbffi_StructByValueClass, "layout", sbv_layout, 0); - rb_define_method(rbffi_StructByValueClass, "struct_class", sbv_struct_class, 0); -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/StructByValue.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/StructByValue.h deleted file mode 100644 index 07b2763..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/StructByValue.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2009, Wayne Meissner - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef RBFFI_STRUCTBYVALUE_H -#define RBFFI_STRUCTBYVALUE_H - -#include -#include "Type.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct StructByValue_ { - Type base; - VALUE rbStructClass; - VALUE rbStructLayout; -} StructByValue; - -void rbffi_StructByValue_Init(VALUE moduleFFI); - -extern VALUE rbffi_StructByValueClass; - -#ifdef __cplusplus -} -#endif - -#endif /* RBFFI_STRUCTBYVALUE_H */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/StructByValue.o b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/StructByValue.o deleted file mode 100644 index 85c6a2f8c92a4990d2bd2b5d45635c2e7a0389dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11508 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 - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include - -#ifndef _MSC_VER -# include -# include -# include -#else -# include "win32/stdbool.h" -# include "win32/stdint.h" -#endif -#include -#include "rbffi.h" -#include "compat.h" -#include "AbstractMemory.h" -#include "Pointer.h" -#include "MemoryPointer.h" -#include "Function.h" -#include "Types.h" -#include "StructByValue.h" -#include "ArrayType.h" -#include "Function.h" -#include "MappedType.h" -#include "Struct.h" - -#define FFI_ALIGN(v, a) (((((size_t) (v))-1) | ((a)-1))+1) - -static void struct_layout_mark(StructLayout *); -static void struct_layout_free(StructLayout *); -static void struct_field_mark(StructField* ); - -VALUE rbffi_StructLayoutFieldClass = Qnil; -VALUE rbffi_StructLayoutNumberFieldClass = Qnil, rbffi_StructLayoutPointerFieldClass = Qnil; -VALUE rbffi_StructLayoutStringFieldClass = Qnil; -VALUE rbffi_StructLayoutFunctionFieldClass = Qnil, rbffi_StructLayoutArrayFieldClass = Qnil; - -VALUE rbffi_StructLayoutClass = Qnil; - - -static VALUE -struct_field_allocate(VALUE klass) -{ - StructField* field; - VALUE obj; - - obj = Data_Make_Struct(klass, StructField, struct_field_mark, -1, field); - field->rbType = Qnil; - field->rbName = Qnil; - - return obj; -} - -static void -struct_field_mark(StructField* f) -{ - rb_gc_mark(f->rbType); - rb_gc_mark(f->rbName); -} - -/* - * call-seq: initialize(name, offset, type) - * @param [String,Symbol] name - * @param [Fixnum] offset - * @param [FFI::Type] type - * @return [self] - * A new FFI::StructLayout::Field instance. - */ -static VALUE -struct_field_initialize(int argc, VALUE* argv, VALUE self) -{ - VALUE rbOffset = Qnil, rbName = Qnil, rbType = Qnil; - StructField* field; - int nargs; - - Data_Get_Struct(self, StructField, field); - - nargs = rb_scan_args(argc, argv, "3", &rbName, &rbOffset, &rbType); - - if (TYPE(rbName) != T_SYMBOL && TYPE(rbName) != T_STRING) { - rb_raise(rb_eTypeError, "wrong argument type %s (expected Symbol/String)", - rb_obj_classname(rbName)); - } - - Check_Type(rbOffset, T_FIXNUM); - - if (!rb_obj_is_kind_of(rbType, rbffi_TypeClass)) { - rb_raise(rb_eTypeError, "wrong argument type %s (expected FFI::Type)", - rb_obj_classname(rbType)); - } - - field->offset = NUM2UINT(rbOffset); - field->rbName = (TYPE(rbName) == T_SYMBOL) ? rbName : rb_str_intern(rbName); - field->rbType = rbType; - Data_Get_Struct(field->rbType, Type, field->type); - field->memoryOp = get_memory_op(field->type); - field->referenceIndex = -1; - - switch (field->type->nativeType == NATIVE_MAPPED ? ((MappedType *) field->type)->type->nativeType : field->type->nativeType) { - case NATIVE_FUNCTION: - case NATIVE_CALLBACK: - case NATIVE_POINTER: - field->referenceRequired = true; - break; - - default: - field->referenceRequired = (rb_respond_to(self, rb_intern("reference_required?")) - && RTEST(rb_funcall2(self, rb_intern("reference_required?"), 0, NULL))) - || (rb_respond_to(rbType, rb_intern("reference_required?")) - && RTEST(rb_funcall2(rbType, rb_intern("reference_required?"), 0, NULL))); - break; - } - - return self; -} - -/* - * call-seq: offset - * @return [Numeric] - * Get the field offset. - */ -static VALUE -struct_field_offset(VALUE self) -{ - StructField* field; - Data_Get_Struct(self, StructField, field); - return UINT2NUM(field->offset); -} - -/* - * call-seq: size - * @return [Numeric] - * Get the field size. - */ -static VALUE -struct_field_size(VALUE self) -{ - StructField* field; - Data_Get_Struct(self, StructField, field); - return UINT2NUM(field->type->ffiType->size); -} - -/* - * call-seq: alignment - * @return [Numeric] - * Get the field alignment. - */ -static VALUE -struct_field_alignment(VALUE self) -{ - StructField* field; - Data_Get_Struct(self, StructField, field); - return UINT2NUM(field->type->ffiType->alignment); -} - -/* - * call-seq: type - * @return [Type] - * Get the field type. - */ -static VALUE -struct_field_type(VALUE self) -{ - StructField* field; - Data_Get_Struct(self, StructField, field); - - return field->rbType; -} - -/* - * call-seq: name - * @return [Symbol] - * Get the field name. - */ -static VALUE -struct_field_name(VALUE self) -{ - StructField* field; - Data_Get_Struct(self, StructField, field); - return field->rbName; -} - -/* - * call-seq: get(pointer) - * @param [AbstractMemory] pointer pointer on a {Struct} - * @return [Object] - * Get an object of type {#type} from memory pointed by +pointer+. - */ -static VALUE -struct_field_get(VALUE self, VALUE pointer) -{ - StructField* f; - - Data_Get_Struct(self, StructField, f); - if (f->memoryOp == NULL) { - rb_raise(rb_eArgError, "get not supported for %s", rb_obj_classname(f->rbType)); - return Qnil; - } - - return (*f->memoryOp->get)(MEMORY(pointer), f->offset); -} - -/* - * call-seq: put(pointer, value) - * @param [AbstractMemory] pointer pointer on a {Struct} - * @param [Object] value this object must be a kind of {#type} - * @return [self] - * Put an object to memory pointed by +pointer+. - */ -static VALUE -struct_field_put(VALUE self, VALUE pointer, VALUE value) -{ - StructField* f; - - Data_Get_Struct(self, StructField, f); - if (f->memoryOp == NULL) { - rb_raise(rb_eArgError, "put not supported for %s", rb_obj_classname(f->rbType)); - return self; - } - - (*f->memoryOp->put)(MEMORY(pointer), f->offset, value); - - return self; -} - -/* - * call-seq: get(pointer) - * @param [AbstractMemory] pointer pointer on a {Struct} - * @return [Function] - * Get a {Function} from memory pointed by +pointer+. - */ -static VALUE -function_field_get(VALUE self, VALUE pointer) -{ - StructField* f; - - Data_Get_Struct(self, StructField, f); - - return rbffi_Function_NewInstance(f->rbType, (*rbffi_AbstractMemoryOps.pointer->get)(MEMORY(pointer), f->offset)); -} - -/* - * call-seq: put(pointer, proc) - * @param [AbstractMemory] pointer pointer to a {Struct} - * @param [Function, Proc] proc - * @return [Function] - * Set a {Function} to memory pointed by +pointer+ as a function. - * - * If a Proc is submitted as +proc+, it is automatically transformed to a {Function}. - */ -static VALUE -function_field_put(VALUE self, VALUE pointer, VALUE proc) -{ - StructField* f; - VALUE value = Qnil; - - Data_Get_Struct(self, StructField, f); - - if (NIL_P(proc) || rb_obj_is_kind_of(proc, rbffi_FunctionClass)) { - value = proc; - } else if (rb_obj_is_kind_of(proc, rb_cProc) || rb_respond_to(proc, rb_intern("call"))) { - value = rbffi_Function_ForProc(f->rbType, proc); - } else { - rb_raise(rb_eTypeError, "wrong type (expected Proc or Function)"); - } - - (*rbffi_AbstractMemoryOps.pointer->put)(MEMORY(pointer), f->offset, value); - - return self; -} - -static inline bool -isCharArray(ArrayType* arrayType) -{ - return arrayType->componentType->nativeType == NATIVE_INT8 - || arrayType->componentType->nativeType == NATIVE_UINT8; -} - -/* - * call-seq: get(pointer) - * @param [AbstractMemory] pointer pointer on a {Struct} - * @return [FFI::StructLayout::CharArray, FFI::Struct::InlineArray] - * Get an array from a {Struct}. - */ -static VALUE -array_field_get(VALUE self, VALUE pointer) -{ - StructField* f; - ArrayType* array; - VALUE argv[2]; - - Data_Get_Struct(self, StructField, f); - Data_Get_Struct(f->rbType, ArrayType, array); - - argv[0] = pointer; - argv[1] = self; - - return rb_class_new_instance(2, argv, isCharArray(array) - ? rbffi_StructLayoutCharArrayClass : rbffi_StructInlineArrayClass); -} - -/* - * call-seq: put(pointer, value) - * @param [AbstractMemory] pointer pointer on a {Struct} - * @param [String, Array] value +value+ may be a String only if array's type is a kind of +int8+ - * @return [value] - * Set an array in a {Struct}. - */ -static VALUE -array_field_put(VALUE self, VALUE pointer, VALUE value) -{ - StructField* f; - ArrayType* array; - - - Data_Get_Struct(self, StructField, f); - Data_Get_Struct(f->rbType, ArrayType, array); - - if (isCharArray(array) && rb_obj_is_instance_of(value, rb_cString)) { - VALUE argv[2]; - - argv[0] = INT2FIX(f->offset); - argv[1] = value; - - rb_funcall2(pointer, rb_intern("put_string"), 2, argv); - - } else { -#ifdef notyet - MemoryOp* op; - int count = RARRAY_LEN(value); - int i; - AbstractMemory* memory = MEMORY(pointer); - - if (count > array->length) { - rb_raise(rb_eIndexError, "array too large"); - } - - /* clear the contents in case of a short write */ - checkWrite(memory); - checkBounds(memory, f->offset, f->type->ffiType->size); - if (count < array->length) { - memset(memory->address + f->offset + (count * array->componentType->ffiType->size), - 0, (array->length - count) * array->componentType->ffiType->size); - } - - /* now copy each element in */ - if ((op = get_memory_op(array->componentType)) != NULL) { - - for (i = 0; i < count; ++i) { - (*op->put)(memory, f->offset + (i * array->componentType->ffiType->size), rb_ary_entry(value, i)); - } - - } else if (array->componentType->nativeType == NATIVE_STRUCT) { - - for (i = 0; i < count; ++i) { - VALUE entry = rb_ary_entry(value, i); - Struct* s; - - if (!rb_obj_is_kind_of(entry, rbffi_StructClass)) { - rb_raise(rb_eTypeError, "array element not an instance of FFI::Struct"); - break; - } - - Data_Get_Struct(entry, Struct, s); - checkRead(s->pointer); - checkBounds(s->pointer, 0, array->componentType->ffiType->size); - - memcpy(memory->address + f->offset + (i * array->componentType->ffiType->size), - s->pointer->address, array->componentType->ffiType->size); - } - - } else { - rb_raise(rb_eNotImpError, "put not supported for arrays of type %s", rb_obj_classname(array->rbComponentType)); - } -#else - rb_raise(rb_eNotImpError, "cannot set array field"); -#endif - } - - return value; -} - - -static VALUE -struct_layout_allocate(VALUE klass) -{ - StructLayout* layout; - VALUE obj; - - obj = Data_Make_Struct(klass, StructLayout, struct_layout_mark, struct_layout_free, layout); - layout->rbFieldMap = Qnil; - layout->rbFieldNames = Qnil; - layout->rbFields = Qnil; - layout->fieldSymbolTable = st_init_numtable(); - layout->base.ffiType = xcalloc(1, sizeof(*layout->base.ffiType)); - layout->base.ffiType->size = 0; - layout->base.ffiType->alignment = 0; - layout->base.ffiType->type = FFI_TYPE_STRUCT; - - return obj; -} - -/* - * call-seq: initialize(fields, size, align) - * @param [Array] fields - * @param [Numeric] size - * @param [Numeric] align - * @return [self] - * A new StructLayout instance. - */ -static VALUE -struct_layout_initialize(VALUE self, VALUE fields, VALUE size, VALUE align) -{ - StructLayout* layout; - ffi_type* ltype; - int i; - - Data_Get_Struct(self, StructLayout, layout); - layout->fieldCount = (int) RARRAY_LEN(fields); - layout->rbFieldMap = rb_hash_new(); - layout->rbFieldNames = rb_ary_new2(layout->fieldCount); - layout->size = (int) FFI_ALIGN(NUM2INT(size), NUM2INT(align)); - layout->align = NUM2INT(align); - layout->fields = xcalloc(layout->fieldCount, sizeof(StructField *)); - layout->ffiTypes = xcalloc(layout->fieldCount + 1, sizeof(ffi_type *)); - layout->rbFields = rb_ary_new2(layout->fieldCount); - layout->referenceFieldCount = 0; - layout->base.ffiType->elements = layout->ffiTypes; - layout->base.ffiType->size = layout->size; - layout->base.ffiType->alignment = layout->align; - - ltype = layout->base.ffiType; - for (i = 0; i < (int) layout->fieldCount; ++i) { - VALUE rbField = rb_ary_entry(fields, i); - VALUE rbName; - StructField* field; - ffi_type* ftype; - - - if (!rb_obj_is_kind_of(rbField, rbffi_StructLayoutFieldClass)) { - rb_raise(rb_eTypeError, "wrong type for field %d.", i); - } - rbName = rb_funcall2(rbField, rb_intern("name"), 0, NULL); - - Data_Get_Struct(rbField, StructField, field); - layout->fields[i] = field; - - if (field->type == NULL || field->type->ffiType == NULL) { - rb_raise(rb_eRuntimeError, "type of field %d not supported", i); - } - - ftype = field->type->ffiType; - if (ftype->size == 0 && i < ((int) layout->fieldCount - 1)) { - rb_raise(rb_eTypeError, "type of field %d has zero size", i); - } - - if (field->referenceRequired) { - field->referenceIndex = layout->referenceFieldCount++; - } - - - layout->ffiTypes[i] = ftype->size > 0 ? ftype : NULL; - st_insert(layout->fieldSymbolTable, rbName, rbField); - rb_hash_aset(layout->rbFieldMap, rbName, rbField); - rb_ary_push(layout->rbFields, rbField); - rb_ary_push(layout->rbFieldNames, rbName); - } - - if (ltype->size == 0) { - rb_raise(rb_eRuntimeError, "Struct size is zero"); - } - - return self; -} - -/* - * call-seq: [](field) - * @param [Symbol] field - * @return [StructLayout::Field] - * Get a field from the layout. - */ -static VALUE -struct_layout_union_bang(VALUE self) -{ - static const ffi_type *alignment_types[] = { &ffi_type_sint8, &ffi_type_sint16, &ffi_type_sint32, &ffi_type_sint64, - &ffi_type_float, &ffi_type_double, &ffi_type_longdouble, NULL }; - StructLayout* layout; - ffi_type *t = NULL; - int count, i; - - Data_Get_Struct(self, StructLayout, layout); - - for (i = 0; alignment_types[i] != NULL; ++i) { - if (alignment_types[i]->alignment == layout->align) { - t = (ffi_type *) alignment_types[i]; - break; - } - } - if (t == NULL) { - rb_raise(rb_eRuntimeError, "cannot create libffi union representation for alignment %d", layout->align); - return Qnil; - } - - count = (int) layout->size / (int) t->size; - xfree(layout->ffiTypes); - layout->ffiTypes = xcalloc(count + 1, sizeof(ffi_type *)); - layout->base.ffiType->elements = layout->ffiTypes; - - for (i = 0; i < count; ++i) { - layout->ffiTypes[i] = t; - } - - return self; -} - -static VALUE -struct_layout_aref(VALUE self, VALUE field) -{ - StructLayout* layout; - - Data_Get_Struct(self, StructLayout, layout); - - return rb_hash_aref(layout->rbFieldMap, field); -} - -/* - * call-seq: fields - * @return [Array] - * Get fields list. - */ -static VALUE -struct_layout_fields(VALUE self) -{ - StructLayout* layout; - - Data_Get_Struct(self, StructLayout, layout); - - return rb_ary_dup(layout->rbFields); -} - -/* - * call-seq: members - * @return [Array] - * Get list of field names. - */ -static VALUE -struct_layout_members(VALUE self) -{ - StructLayout* layout; - - Data_Get_Struct(self, StructLayout, layout); - - return rb_ary_dup(layout->rbFieldNames); -} - -/* - * call-seq: to_a - * @return [Array] - * Get an array of fields. - */ -static VALUE -struct_layout_to_a(VALUE self) -{ - StructLayout* layout; - - Data_Get_Struct(self, StructLayout, layout); - - return rb_ary_dup(layout->rbFields); -} - -static void -struct_layout_mark(StructLayout *layout) -{ - rb_gc_mark(layout->rbFieldMap); - rb_gc_mark(layout->rbFieldNames); - rb_gc_mark(layout->rbFields); -} - -static void -struct_layout_free(StructLayout *layout) -{ - xfree(layout->ffiTypes); - xfree(layout->base.ffiType); - xfree(layout->fields); - st_free_table(layout->fieldSymbolTable); - xfree(layout); -} - - -void -rbffi_StructLayout_Init(VALUE moduleFFI) -{ - VALUE ffi_Type = rbffi_TypeClass; - - /* - * Document-class: FFI::StructLayout < FFI::Type - * - * This class aims at defining a struct layout. - */ - rbffi_StructLayoutClass = rb_define_class_under(moduleFFI, "StructLayout", ffi_Type); - rb_global_variable(&rbffi_StructLayoutClass); - - /* - * Document-class: FFI::StructLayout::Field - * A field in a {StructLayout}. - */ - rbffi_StructLayoutFieldClass = rb_define_class_under(rbffi_StructLayoutClass, "Field", rb_cObject); - rb_global_variable(&rbffi_StructLayoutFieldClass); - - /* - * Document-class: FFI::StructLayout::Number - * A numeric {Field} in a {StructLayout}. - */ - rbffi_StructLayoutNumberFieldClass = rb_define_class_under(rbffi_StructLayoutClass, "Number", rbffi_StructLayoutFieldClass); - rb_global_variable(&rbffi_StructLayoutNumberFieldClass); - - /* - * Document-class: FFI::StructLayout::String - * A string {Field} in a {StructLayout}. - */ - rbffi_StructLayoutStringFieldClass = rb_define_class_under(rbffi_StructLayoutClass, "String", rbffi_StructLayoutFieldClass); - rb_global_variable(&rbffi_StructLayoutStringFieldClass); - - /* - * Document-class: FFI::StructLayout::Pointer - * A pointer {Field} in a {StructLayout}. - */ - rbffi_StructLayoutPointerFieldClass = rb_define_class_under(rbffi_StructLayoutClass, "Pointer", rbffi_StructLayoutFieldClass); - rb_global_variable(&rbffi_StructLayoutPointerFieldClass); - - /* - * Document-class: FFI::StructLayout::Function - * A function pointer {Field} in a {StructLayout}. - */ - rbffi_StructLayoutFunctionFieldClass = rb_define_class_under(rbffi_StructLayoutClass, "Function", rbffi_StructLayoutFieldClass); - rb_global_variable(&rbffi_StructLayoutFunctionFieldClass); - - /* - * Document-class: FFI::StructLayout::Array - * An array {Field} in a {StructLayout}. - */ - rbffi_StructLayoutArrayFieldClass = rb_define_class_under(rbffi_StructLayoutClass, "Array", rbffi_StructLayoutFieldClass); - rb_global_variable(&rbffi_StructLayoutArrayFieldClass); - - rb_define_alloc_func(rbffi_StructLayoutFieldClass, struct_field_allocate); - rb_define_method(rbffi_StructLayoutFieldClass, "initialize", struct_field_initialize, -1); - rb_define_method(rbffi_StructLayoutFieldClass, "offset", struct_field_offset, 0); - rb_define_method(rbffi_StructLayoutFieldClass, "size", struct_field_size, 0); - rb_define_method(rbffi_StructLayoutFieldClass, "alignment", struct_field_alignment, 0); - rb_define_method(rbffi_StructLayoutFieldClass, "name", struct_field_name, 0); - rb_define_method(rbffi_StructLayoutFieldClass, "type", struct_field_type, 0); - rb_define_method(rbffi_StructLayoutFieldClass, "put", struct_field_put, 2); - rb_define_method(rbffi_StructLayoutFieldClass, "get", struct_field_get, 1); - - rb_define_method(rbffi_StructLayoutFunctionFieldClass, "put", function_field_put, 2); - rb_define_method(rbffi_StructLayoutFunctionFieldClass, "get", function_field_get, 1); - - rb_define_method(rbffi_StructLayoutArrayFieldClass, "get", array_field_get, 1); - rb_define_method(rbffi_StructLayoutArrayFieldClass, "put", array_field_put, 2); - - rb_define_alloc_func(rbffi_StructLayoutClass, struct_layout_allocate); - rb_define_method(rbffi_StructLayoutClass, "initialize", struct_layout_initialize, 3); - rb_define_method(rbffi_StructLayoutClass, "[]", struct_layout_aref, 1); - rb_define_method(rbffi_StructLayoutClass, "fields", struct_layout_fields, 0); - rb_define_method(rbffi_StructLayoutClass, "members", struct_layout_members, 0); - rb_define_method(rbffi_StructLayoutClass, "to_a", struct_layout_to_a, 0); - rb_define_method(rbffi_StructLayoutClass, "__union!", struct_layout_union_bang, 0); - -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/StructLayout.o b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/StructLayout.o deleted file mode 100644 index ce3ccce4dc6242756c84a4afa0c70b481290ae92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35104 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 diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Thread.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Thread.c deleted file mode 100644 index 32ae05f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Thread.c +++ /dev/null @@ -1,352 +0,0 @@ -/* - * Copyright (c) 2010 Wayne Meissner - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _MSC_VER -#include -#else -# include "win32/stdbool.h" -# include "win32/stdint.h" -#endif - -#if defined(__CYGWIN__) || !defined(_WIN32) -# include -# include -# include -# include -#else -# include -# define _WINSOCKAPI_ -# include -#endif -#include -#include "Thread.h" - -#ifdef _WIN32 -static volatile DWORD frame_thread_key = TLS_OUT_OF_INDEXES; -#else -static pthread_key_t thread_data_key; -struct thread_data { - rbffi_frame_t* frame; -}; -static inline struct thread_data* thread_data_get(void); - -#endif - -rbffi_frame_t* -rbffi_frame_current(void) -{ -#ifdef _WIN32 - return (rbffi_frame_t *) TlsGetValue(frame_thread_key); -#else - struct thread_data* td = (struct thread_data *) pthread_getspecific(thread_data_key); - return td != NULL ? td->frame : NULL; -#endif -} - -void -rbffi_frame_push(rbffi_frame_t* frame) -{ - memset(frame, 0, sizeof(*frame)); - frame->has_gvl = true; - frame->exc = Qnil; - -#ifdef _WIN32 - frame->prev = TlsGetValue(frame_thread_key); - TlsSetValue(frame_thread_key, frame); -#else - frame->td = thread_data_get(); - frame->prev = frame->td->frame; - frame->td->frame = frame; -#endif -} - -void -rbffi_frame_pop(rbffi_frame_t* frame) -{ -#ifdef _WIN32 - TlsSetValue(frame_thread_key, frame->prev); -#else - frame->td->frame = frame->prev; -#endif -} - -#if !(defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)) - -#if !defined(_WIN32) - -struct BlockingThread { - pthread_t tid; - VALUE (*fn)(void *); - void *data; - void (*ubf)(void *); - void *data2; - VALUE retval; - int wrfd; - int rdfd; -}; - -static void* -rbffi_blocking_thread(void* args) -{ - struct BlockingThread* thr = (struct BlockingThread *) args; - char c = 1; - VALUE retval; - - retval = (*thr->fn)(thr->data); - - pthread_testcancel(); - - thr->retval = retval; - - write(thr->wrfd, &c, sizeof(c)); - - return NULL; -} - -static VALUE -wait_for_thread(void *data) -{ - struct BlockingThread* thr = (struct BlockingThread *) data; - char c; - - if (read(thr->rdfd, &c, 1) < 1) { - rb_thread_wait_fd(thr->rdfd); - while (read(thr->rdfd, &c, 1) < 1 && rb_io_wait_readable(thr->rdfd) == Qtrue) { - ; - } - } - - return Qnil; -} - -static VALUE -cleanup_blocking_thread(void *data, VALUE exc) -{ - struct BlockingThread* thr = (struct BlockingThread *) data; - - if (thr->ubf != (void (*)(void *)) -1) { - (*thr->ubf)(thr->data2); - } else { - pthread_kill(thr->tid, SIGVTALRM); - } - - return exc; -} - -VALUE -rbffi_thread_blocking_region(VALUE (*func)(void *), void *data1, void (*ubf)(void *), void *data2) -{ - struct BlockingThread* thr; - int fd[2]; - VALUE exc; - - if (pipe(fd) < 0) { - rb_raise(rb_eSystemCallError, "pipe(2) failed"); - return Qnil; - } - fcntl(fd[0], F_SETFL, fcntl(fd[0], F_GETFL) | O_NONBLOCK); - - thr = ALLOC_N(struct BlockingThread, 1); - thr->rdfd = fd[0]; - thr->wrfd = fd[1]; - thr->fn = func; - thr->data = data1; - thr->ubf = ubf; - thr->data2 = data2; - thr->retval = Qnil; - - if (pthread_create(&thr->tid, NULL, rbffi_blocking_thread, thr) != 0) { - close(fd[0]); - close(fd[1]); - xfree(thr); - rb_raise(rb_eSystemCallError, "pipe(2) failed"); - return Qnil; - } - - exc = rb_rescue2(wait_for_thread, (VALUE) thr, cleanup_blocking_thread, (VALUE) thr, - rb_eException); - - pthread_join(thr->tid, NULL); - close(fd[1]); - close(fd[0]); - xfree(thr); - - if (exc != Qnil) { - rb_exc_raise(exc); - } - - return thr->retval; -} - -#else -/* win32 implementation */ - -struct BlockingThread { - HANDLE tid; - VALUE (*fn)(void *); - void *data; - void (*ubf)(void *); - void *data2; - VALUE retval; - int wrfd; - int rdfd; -}; - -static DWORD __stdcall -rbffi_blocking_thread(LPVOID args) -{ - struct BlockingThread* thr = (struct BlockingThread *) args; - char c = 1; - VALUE retval; - - retval = (*thr->fn)(thr->data); - thr->retval = retval; - - write(thr->wrfd, &c, sizeof(c)); - - return 0; -} - -static VALUE -wait_for_thread(void *data) -{ - struct BlockingThread* thr = (struct BlockingThread *) data; - char c, res; - fd_set rfds; - - FD_ZERO(&rfds); - FD_SET(thr->rdfd, &rfds); - rb_thread_select(thr->rdfd + 1, &rfds, NULL, NULL, NULL); - read(thr->rdfd, &c, 1); - return Qnil; -} - -static VALUE -cleanup_blocking_thread(void *data, VALUE exc) -{ - struct BlockingThread* thr = (struct BlockingThread *) data; - - if (thr->ubf != (void (*)(void *)) -1) { - (*thr->ubf)(thr->data2); - } else { - TerminateThread(thr->tid, 0); - } - - return exc; -} - -VALUE -rbffi_thread_blocking_region(VALUE (*func)(void *), void *data1, void (*ubf)(void *), void *data2) -{ - struct BlockingThread* thr; - int fd[2]; - VALUE exc; - DWORD state; - DWORD res; - - if (_pipe(fd, 1024, O_BINARY) == -1) { - rb_raise(rb_eSystemCallError, "_pipe() failed"); - return Qnil; - } - - thr = ALLOC_N(struct BlockingThread, 1); - thr->rdfd = fd[0]; - thr->wrfd = fd[1]; - thr->fn = func; - thr->data = data1; - thr->ubf = ubf; - thr->data2 = data2; - thr->retval = Qnil; - - thr->tid = CreateThread(NULL, 0, rbffi_blocking_thread, thr, 0, NULL); - if (!thr->tid) { - close(fd[0]); - close(fd[1]); - xfree(thr); - rb_raise(rb_eSystemCallError, "CreateThread() failed"); - return Qnil; - } - - exc = rb_rescue2(wait_for_thread, (VALUE) thr, cleanup_blocking_thread, (VALUE) thr, - rb_eException); - - /* The thread should be finished, already. */ - WaitForSingleObject(thr->tid, INFINITE); - CloseHandle(thr->tid); - close(fd[1]); - close(fd[0]); - xfree(thr); - - if (exc != Qnil) { - rb_exc_raise(exc); - } - - return thr->retval; -} - -#endif /* !_WIN32 */ - -#endif /* HAVE_RB_THREAD_BLOCKING_REGION */ - -#ifndef _WIN32 -static struct thread_data* thread_data_init(void); - -static inline struct thread_data* -thread_data_get(void) -{ - struct thread_data* td = (struct thread_data *) pthread_getspecific(thread_data_key); - return td != NULL ? td : thread_data_init(); -} - -static struct thread_data* -thread_data_init(void) -{ - struct thread_data* td = calloc(1, sizeof(struct thread_data)); - - pthread_setspecific(thread_data_key, td); - - return td; -} - -static void -thread_data_free(void *ptr) -{ - free(ptr); -} -#endif - -void -rbffi_Thread_Init(VALUE moduleFFI) -{ -#ifdef _WIN32 - frame_thread_key = TlsAlloc(); -#else - pthread_key_create(&thread_data_key, thread_data_free); -#endif -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Thread.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Thread.h deleted file mode 100644 index c51a5a9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Thread.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (c) 2010 Wayne Meissner - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef RBFFI_THREAD_H -#define RBFFI_THREAD_H - -#ifndef _MSC_VER -# include -#else -# include "win32/stdbool.h" -# include "win32/stdint.h" -#endif -#include -#include "extconf.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -#ifdef _WIN32 -# include -#else -# include -#endif - -typedef struct { -#ifdef _WIN32 - DWORD id; -#else - pthread_t id; -#endif - bool valid; - bool has_gvl; - VALUE exc; -} rbffi_thread_t; - -typedef struct rbffi_frame { -#ifndef _WIN32 - struct thread_data* td; -#endif - struct rbffi_frame* prev; - bool has_gvl; - VALUE exc; -} rbffi_frame_t; - -rbffi_frame_t* rbffi_frame_current(void); -void rbffi_frame_push(rbffi_frame_t* frame); -void rbffi_frame_pop(rbffi_frame_t* frame); - -#ifdef HAVE_RB_THREAD_CALL_WITHOUT_GVL -# define rbffi_thread_blocking_region rb_thread_call_without_gvl - -#elif defined(HAVE_RB_THREAD_BLOCKING_REGION) -# define rbffi_thread_blocking_region rb_thread_blocking_region - -#else - -VALUE rbffi_thread_blocking_region(VALUE (*func)(void *), void *data1, void (*ubf)(void *), void *data2); - -#endif - - -#ifdef __cplusplus -} -#endif - -#endif /* RBFFI_THREAD_H */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Thread.o b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Thread.o deleted file mode 100644 index 8fff9c32aa8562ea11640c4eee029e33d99fce83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4964 zcma)AU2Ggj9iP3uU7vmS-T5PFLSyGr1rnmDSar22M`uW@KOm>B&b9vsZyn-ibNmyEIjlDsR&i-1C0tr!0$gZ zyWYFlQbwBjf6i}acK-99x%=(EKm2bKV~WbqpaxOjr6!JwvKw`VH_odXCQP0Jl*F-?5-qAdh%Sek5T|BFt=ZZ$W zUOAb&0l+6-x!f$PRD1GM1Jf zeM2gbMi`Iho7fMzRSkINlCe<5QbmWx^Y($ndtc)HN#aS7&fJpA6ZPV`SmKC{-|uZ1 zA62;_uSG@ge`0=8RX4x=FvrNHRdgidF4X_X^ZrT)W3NG`vws?u3i(i_P}foAy20If znM$wyExrCQb@+gq^rdT#mR@Ib*AHEryT0%e*;CUK>9tSOZw=9e7$~18DBsicTm0zW z7>X(6LOMTSX6?rKrCYUqzou2cPF6k+)Y2=vc8hDWYxif?_4L|MD6`h{<<#SI*Q0v} zn3!Kvdi_)=y%w6g&gCn7zUeDRfX3$jPHlAWb40km(4;CA%Zz8U)8p|KvuYR1rTDQ# zU!pI5FmK^d_8#klkhuR?;_&C$HP8?43B^S+QJGrn>>^+n?mN=S3h9}9$Glvgg z6mm|^c+y;DR=Knoua)fLV#zGTizSBwDpy6M8x`pbH^X7|(wV8jS>uZfImiGD`C`s8^5v54*i0NYr@$(dpqFyCvAAL}W3XJdn0YSG zrc>Fe5mue24b}S@~$+wmp)eDb$5HUE1!*YYHB2Q*WHnJ zr33jW(9hIJrt^6C3*i91n7Wf?I@Jh?NLl+~I}r|p)q;u|35TIa{?ZRZzXx|iQxx8e zg*sg$Je%7*z@rdbD5ZuI3XL|fOCTTEo#}i8Z?x8a7Pw2O2&OFo7#e}>arBMQ+(<#z zXd?z8#I!nu_HN}+Cyg`{o<;u-!asz*oj$$x^Ff%p>d-JEq3!U{_=r0jeXx=-q;ksS zSTw&NTG@SEVvMIb$k1s2^c`pw{c~tl{Xw(=J&m?ipG6yDO+Tg%*N9giXube? z6$!`}Kf{jo!u?HZ~8r2Mq(>@B;je6P;b)v%pnSi?U2{c6rRQ92&!%Cpz zn_!kKEPQTfOWYCk+O?2eGfU!Dm#7;X+-e!k=Rc6Ft%{F zelnd=c6o?Y+7h0I@ zSIBRRTaAKN++nmE;tqqWS13MFV5={2DN=~-LvYty8QYMGn4q`W{lNj3+wA_R*vj4| z@s;yum~t+r#9Es|F9Bsg^m|Z0`S^dl$oVstio`AlhT7;|Nrn7|Q9qJ?v<_ZezoCo4 z7x54zKROrbTLMq6XG^@7;nyeqDCl`{@uWz2S5Xg2KZ<%@8vIIFOMv|fCPn!)(uS5Y z8hs}vS+lFjVkvLc3TDz?wUh1>YwOouqPnt7Z@MBLdK3Y@;%Vms_*BHQ1meMsM*hnu zu|%VKI{u6kx=HtyiHT8PXc6U7yTpIK1Xb27A|F2L2}R4aJf zm4t@tB&a?_je7N&1gCGZgvRvKn%44ttt<3LEjFfQ)LY84vin8ey+`lYc8BiKG!Cgg z|Mat3&%;_ffOqO+nsP#8FKewBaxZC4YKjhx`Y##~N~YFAuYem1==i>j{Q+~t&&1w0 zLGkmc_jORHyD9UabYDh;{px+1i>%uLMLhM+frdb5q@Hp($?_*>_d$FC;OLZyiBjSw zNonn~$E=c->qyv)1B?aMrls?EGl|=yHUa4Ot8A|tT9e^B# z?4CvZB;zs&FUQf6eM5+BOv-U7Uj(Hw-0}@DetDxortjppuQ$ld@TEomv%>IYLGK+b zl_Ji>JGaiSg0x?+pqyV9z BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _MSC_VER -#include -#endif - -#include -#include -#include -#include "rbffi.h" -#include "compat.h" -#include "Types.h" -#include "Type.h" - - -typedef struct BuiltinType_ { - Type type; - char* name; -} BuiltinType; - -static void builtin_type_free(BuiltinType *); - -VALUE rbffi_TypeClass = Qnil; - -static VALUE classBuiltinType = Qnil; -static VALUE moduleNativeType = Qnil; -static VALUE typeMap = Qnil, sizeMap = Qnil; -static ID id_find_type = 0, id_type_size = 0, id_size = 0; - -static VALUE -type_allocate(VALUE klass) -{ - Type* type; - VALUE obj = Data_Make_Struct(klass, Type, NULL, -1, type); - - type->nativeType = -1; - type->ffiType = &ffi_type_void; - - return obj; -} - -/* - * Document-method: initialize - * call-seq: initialize(value) - * @param [Fixnum,Type] value - * @return [self] - */ -static VALUE -type_initialize(VALUE self, VALUE value) -{ - Type* type; - Type* other; - - Data_Get_Struct(self, Type, type); - - if (FIXNUM_P(value)) { - type->nativeType = FIX2INT(value); - } else if (rb_obj_is_kind_of(value, rbffi_TypeClass)) { - Data_Get_Struct(value, Type, other); - type->nativeType = other->nativeType; - type->ffiType = other->ffiType; - } else { - rb_raise(rb_eArgError, "wrong type"); - } - - return self; -} - -/* - * call-seq: type.size - * @return [Fixnum] - * Return type's size, in bytes. - */ -static VALUE -type_size(VALUE self) -{ - Type *type; - - Data_Get_Struct(self, Type, type); - - return INT2FIX(type->ffiType->size); -} - -/* - * call-seq: type.alignment - * @return [Fixnum] - * Get Type alignment. - */ -static VALUE -type_alignment(VALUE self) -{ - Type *type; - - Data_Get_Struct(self, Type, type); - - return INT2FIX(type->ffiType->alignment); -} - -/* - * call-seq: type.inspect - * @return [String] - * Inspect {Type} object. - */ -static VALUE -type_inspect(VALUE self) -{ - char buf[100]; - Type *type; - - Data_Get_Struct(self, Type, type); - - snprintf(buf, sizeof(buf), "#<%s:%p size=%d alignment=%d>", - rb_obj_classname(self), type, (int) type->ffiType->size, (int) type->ffiType->alignment); - - return rb_str_new2(buf); -} - -static VALUE -builtin_type_new(VALUE klass, int nativeType, ffi_type* ffiType, const char* name) -{ - BuiltinType* type; - VALUE obj = Qnil; - - obj = Data_Make_Struct(klass, BuiltinType, NULL, builtin_type_free, type); - - type->name = strdup(name); - type->type.nativeType = nativeType; - type->type.ffiType = ffiType; - - return obj; -} - -static void -builtin_type_free(BuiltinType *type) -{ - free(type->name); - xfree(type); -} - -/* - * call-seq: type.inspect - * @return [String] - * Inspect {Type::Builtin} object. - */ -static VALUE -builtin_type_inspect(VALUE self) -{ - char buf[100]; - BuiltinType *type; - - Data_Get_Struct(self, BuiltinType, type); - snprintf(buf, sizeof(buf), "#<%s:%s size=%d alignment=%d>", - rb_obj_classname(self), type->name, (int) type->type.ffiType->size, type->type.ffiType->alignment); - - return rb_str_new2(buf); -} - -int -rbffi_type_size(VALUE type) -{ - int t = TYPE(type); - - if (t == T_FIXNUM || t == T_BIGNUM) { - return NUM2INT(type); - - } else if (t == T_SYMBOL) { - /* - * Try looking up directly in the type and size maps - */ - VALUE nType; - if ((nType = rb_hash_lookup(typeMap, type)) != Qnil) { - if (rb_obj_is_kind_of(nType, rbffi_TypeClass)) { - Type* type; - Data_Get_Struct(nType, Type, type); - return (int) type->ffiType->size; - - } else if (rb_respond_to(nType, id_size)) { - return NUM2INT(rb_funcall2(nType, id_size, 0, NULL)); - } - } - - /* Not found - call up to the ruby version to resolve */ - return NUM2INT(rb_funcall2(rbffi_FFIModule, id_type_size, 1, &type)); - - } else { - return NUM2INT(rb_funcall2(type, id_size, 0, NULL)); - } -} - -VALUE -rbffi_Type_Lookup(VALUE name) -{ - int t = TYPE(name); - if (t == T_SYMBOL || t == T_STRING) { - /* - * Try looking up directly in the type Map - */ - VALUE nType; - if ((nType = rb_hash_lookup(typeMap, name)) != Qnil && rb_obj_is_kind_of(nType, rbffi_TypeClass)) { - return nType; - } - } else if (rb_obj_is_kind_of(name, rbffi_TypeClass)) { - - return name; - } - - /* Nothing found - let caller handle raising exceptions */ - return Qnil; -} - -/** - * rbffi_Type_Find() is like rbffi_Type_Lookup, but an error is raised if the - * type is not found. - */ -VALUE -rbffi_Type_Find(VALUE name) -{ - VALUE rbType = rbffi_Type_Lookup(name); - - if (!RTEST(rbType)) { - VALUE s = rb_inspect(name); - rb_raise(rb_eTypeError, "invalid type, %s", RSTRING_PTR(s)); - RB_GC_GUARD(s); - } - - return rbType; -} - -void -rbffi_Type_Init(VALUE moduleFFI) -{ - /* - * Document-class: FFI::Type - * This class manages C types. - * - * It embbed {FFI::Type::Builtin} objects as constants (for names, - * see {FFI::NativeType}). - */ - rbffi_TypeClass = rb_define_class_under(moduleFFI, "Type", rb_cObject); - - /* - * Document-constant: FFI::TypeDefs - */ - rb_define_const(moduleFFI, "TypeDefs", typeMap = rb_hash_new()); - rb_define_const(moduleFFI, "SizeTypes", sizeMap = rb_hash_new()); - rb_global_variable(&typeMap); - rb_global_variable(&sizeMap); - id_find_type = rb_intern("find_type"); - id_type_size = rb_intern("type_size"); - id_size = rb_intern("size"); - - /* - * Document-class: FFI::Type::Builtin - * Class for Built-in types. - */ - classBuiltinType = rb_define_class_under(rbffi_TypeClass, "Builtin", rbffi_TypeClass); - /* - * Document-module: FFI::NativeType - * This module defines constants for native (C) types. - * - * ==Native type constants - * Native types are defined by constants : - * * INT8, SCHAR, CHAR - * * UINT8, UCHAR - * * INT16, SHORT, SSHORT - * * UINT16, USHORT - * * INT32,, INT, SINT - * * UINT32, UINT - * * INT64, LONG_LONG, SLONG_LONG - * * UINT64, ULONG_LONG - * * LONG, SLONG - * * ULONG - * * FLOAT32, FLOAT - * * FLOAT64, DOUBLE - * * POINTER - * * CALLBACK - * * FUNCTION - * * CHAR_ARRAY - * * BOOL - * * STRING (immutable string, nul terminated) - * * STRUCT (struct-b-value param or result) - * * ARRAY (array type definition) - * * MAPPED (custom native type) - * For function return type only : - * * VOID - * For function argument type only : - * * BUFFER_IN - * * BUFFER_OUT - * * VARARGS (function takes a variable number of arguments) - * - * All these constants are exported to {FFI} module prefixed with "TYPE_". - * They are objets from {FFI::Type::Builtin} class. - */ - moduleNativeType = rb_define_module_under(moduleFFI, "NativeType"); - - /* - * Document-global: FFI::Type - */ - rb_global_variable(&rbffi_TypeClass); - rb_global_variable(&classBuiltinType); - rb_global_variable(&moduleNativeType); - - rb_define_alloc_func(rbffi_TypeClass, type_allocate); - rb_define_method(rbffi_TypeClass, "initialize", type_initialize, 1); - rb_define_method(rbffi_TypeClass, "size", type_size, 0); - rb_define_method(rbffi_TypeClass, "alignment", type_alignment, 0); - rb_define_method(rbffi_TypeClass, "inspect", type_inspect, 0); - - /* Make Type::Builtin non-allocatable */ - rb_undef_method(CLASS_OF(classBuiltinType), "new"); - rb_define_method(classBuiltinType, "inspect", builtin_type_inspect, 0); - - rb_global_variable(&rbffi_TypeClass); - rb_global_variable(&classBuiltinType); - - /* Define all the builtin types */ - #define T(x, ffiType) do { \ - VALUE t = Qnil; \ - rb_define_const(rbffi_TypeClass, #x, t = builtin_type_new(classBuiltinType, NATIVE_##x, ffiType, #x)); \ - rb_define_const(moduleNativeType, #x, t); \ - rb_define_const(moduleFFI, "TYPE_" #x, t); \ - } while(0) - - #define A(old_type, new_type) do { \ - VALUE t = rb_const_get(rbffi_TypeClass, rb_intern(#old_type)); \ - rb_const_set(rbffi_TypeClass, rb_intern(#new_type), t); \ - } while(0) - - /* - * Document-constant: FFI::Type::Builtin::VOID - */ - T(VOID, &ffi_type_void); - T(INT8, &ffi_type_sint8); - A(INT8, SCHAR); - A(INT8, CHAR); - T(UINT8, &ffi_type_uint8); - A(UINT8, UCHAR); - - T(INT16, &ffi_type_sint16); - A(INT16, SHORT); - A(INT16, SSHORT); - T(UINT16, &ffi_type_uint16); - A(UINT16, USHORT); - T(INT32, &ffi_type_sint32); - A(INT32, INT); - A(INT32, SINT); - T(UINT32, &ffi_type_uint32); - A(UINT32, UINT); - T(INT64, &ffi_type_sint64); - A(INT64, LONG_LONG); - A(INT64, SLONG_LONG); - T(UINT64, &ffi_type_uint64); - A(UINT64, ULONG_LONG); - T(LONG, &ffi_type_slong); - A(LONG, SLONG); - T(ULONG, &ffi_type_ulong); - T(FLOAT32, &ffi_type_float); - A(FLOAT32, FLOAT); - T(FLOAT64, &ffi_type_double); - A(FLOAT64, DOUBLE); - T(LONGDOUBLE, &ffi_type_longdouble); - T(POINTER, &ffi_type_pointer); - T(STRING, &ffi_type_pointer); - T(BUFFER_IN, &ffi_type_pointer); - T(BUFFER_OUT, &ffi_type_pointer); - T(BUFFER_INOUT, &ffi_type_pointer); - T(BOOL, &ffi_type_uchar); - T(VARARGS, &ffi_type_void); -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Type.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Type.h deleted file mode 100644 index d5522ee..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Type.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2009, Wayne Meissner - * Copyright (C) 2009 Luc Heinrich - * - * This file is part of ruby-ffi. - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of the Evan Phoenix nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#ifndef RBFFI_TYPE_H -#define RBFFI_TYPE_H - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct Type_ Type; - -#include "Types.h" - -struct Type_ { - NativeType nativeType; - ffi_type* ffiType; -}; - -extern VALUE rbffi_TypeClass; -extern VALUE rbffi_Type_Lookup(VALUE type); -extern VALUE rbffi_Type_Find(VALUE type); - -#ifdef __cplusplus -} -#endif - -#endif /* RBFFI_TYPE_H */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Type.o b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Type.o deleted file mode 100644 index cf7c888900788030838be28d0ec93d03b2bb5114..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39212 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 diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Types.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Types.c deleted file mode 100644 index bccf894..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Types.c +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright (c) 2009, Wayne Meissner - * Copyright (c) 2009, Luc Heinrich - * Copyright (c) 2009, Aman Gupta. - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include "Pointer.h" -#include "rbffi.h" -#include "Function.h" -#include "StructByValue.h" -#include "Types.h" -#include "Struct.h" -#include "MappedType.h" -#include "MemoryPointer.h" -#include "LongDouble.h" - -static ID id_from_native = 0; - - -VALUE -rbffi_NativeValue_ToRuby(Type* type, VALUE rbType, const void* ptr) -{ - switch (type->nativeType) { - case NATIVE_VOID: - return Qnil; - case NATIVE_INT8: - return INT2NUM((signed char) *(ffi_sarg *) ptr); - case NATIVE_INT16: - return INT2NUM((signed short) *(ffi_sarg *) ptr); - case NATIVE_INT32: - return INT2NUM((signed int) *(ffi_sarg *) ptr); - case NATIVE_LONG: - return LONG2NUM((signed long) *(ffi_sarg *) ptr); - case NATIVE_INT64: - return LL2NUM(*(signed long long *) ptr); - - case NATIVE_UINT8: - return UINT2NUM((unsigned char) *(ffi_arg *) ptr); - case NATIVE_UINT16: - return UINT2NUM((unsigned short) *(ffi_arg *) ptr); - case NATIVE_UINT32: - return UINT2NUM((unsigned int) *(ffi_arg *) ptr); - case NATIVE_ULONG: - return ULONG2NUM((unsigned long) *(ffi_arg *) ptr); - case NATIVE_UINT64: - return ULL2NUM(*(unsigned long long *) ptr); - - case NATIVE_FLOAT32: - return rb_float_new(*(float *) ptr); - case NATIVE_FLOAT64: - return rb_float_new(*(double *) ptr); - - case NATIVE_LONGDOUBLE: - return rbffi_longdouble_new(*(long double *) ptr); - - case NATIVE_STRING: - return (*(void **) ptr != NULL) ? rb_tainted_str_new2(*(char **) ptr) : Qnil; - case NATIVE_POINTER: - return rbffi_Pointer_NewInstance(*(void **) ptr); - case NATIVE_BOOL: - return ((unsigned char) *(ffi_arg *) ptr) ? Qtrue : Qfalse; - - case NATIVE_FUNCTION: - case NATIVE_CALLBACK: { - return *(void **) ptr != NULL - ? rbffi_Function_NewInstance(rbType, rbffi_Pointer_NewInstance(*(void **) ptr)) - : Qnil; - } - - case NATIVE_STRUCT: { - StructByValue* sbv = (StructByValue *)type; - AbstractMemory* mem; - VALUE rbMemory = rbffi_MemoryPointer_NewInstance(1, sbv->base.ffiType->size, false); - - Data_Get_Struct(rbMemory, AbstractMemory, mem); - memcpy(mem->address, ptr, sbv->base.ffiType->size); - RB_GC_GUARD(rbMemory); - RB_GC_GUARD(rbType); - - return rb_class_new_instance(1, &rbMemory, sbv->rbStructClass); - } - - case NATIVE_MAPPED: { - /* - * For mapped types, first convert to the real native type, then upcall to - * ruby to convert to the expected return type - */ - MappedType* m = (MappedType *) type; - VALUE values[2], rbReturnValue; - - values[0] = rbffi_NativeValue_ToRuby(m->type, m->rbType, ptr); - values[1] = Qnil; - - - rbReturnValue = rb_funcall2(m->rbConverter, id_from_native, 2, values); - RB_GC_GUARD(values[0]); - RB_GC_GUARD(rbType); - - return rbReturnValue; - } - - default: - rb_raise(rb_eRuntimeError, "Unknown type: %d", type->nativeType); - return Qnil; - } -} - -void -rbffi_Types_Init(VALUE moduleFFI) -{ - id_from_native = rb_intern("from_native"); -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Types.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Types.h deleted file mode 100644 index 0d4806f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Types.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (c) 2008, 2009, Wayne Meissner - * Copyright (c) 2009, Luc Heinrich - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef RBFFI_TYPES_H -#define RBFFI_TYPES_H - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - NATIVE_VOID, - NATIVE_INT8, - NATIVE_UINT8, - NATIVE_INT16, - NATIVE_UINT16, - NATIVE_INT32, - NATIVE_UINT32, - NATIVE_INT64, - NATIVE_UINT64, - NATIVE_LONG, - NATIVE_ULONG, - NATIVE_FLOAT32, - NATIVE_FLOAT64, - NATIVE_LONGDOUBLE, - NATIVE_POINTER, - NATIVE_CALLBACK, - NATIVE_FUNCTION, - NATIVE_BUFFER_IN, - NATIVE_BUFFER_OUT, - NATIVE_BUFFER_INOUT, - NATIVE_CHAR_ARRAY, - NATIVE_BOOL, - - /** An immutable string. Nul terminated, but only copies in to the native function */ - NATIVE_STRING, - - /** The function takes a variable number of arguments */ - NATIVE_VARARGS, - - /** Struct-by-value param or result */ - NATIVE_STRUCT, - - /** An array type definition */ - NATIVE_ARRAY, - - /** Custom native type */ - NATIVE_MAPPED, -} NativeType; - -#include -#include "Type.h" - -VALUE rbffi_NativeValue_ToRuby(Type* type, VALUE rbType, const void* ptr); -void rbffi_Types_Init(VALUE moduleFFI); - -#ifdef __cplusplus -} -#endif - -#endif /* RBFFI_TYPES_H */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Types.o b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Types.o deleted file mode 100644 index a99eba34a06f08c3cef613fc2142ecd2e3042e1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10108 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 diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Variadic.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Variadic.c deleted file mode 100644 index 0027be2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Variadic.c +++ /dev/null @@ -1,280 +0,0 @@ -/* - * Copyright (c) 2008-2010 Wayne Meissner - * Copyright (C) 2009 Andrea Fazzi - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _MSC_VER -#include -#endif -#include - -#include -#ifndef _MSC_VER -# include -# include -#else -# include "win32/stdbool.h" -# include "win32/stdint.h" -#endif -#include - -#include -#include "rbffi.h" -#include "compat.h" - -#include "AbstractMemory.h" -#include "Pointer.h" -#include "Types.h" -#include "Type.h" -#include "LastError.h" -#include "MethodHandle.h" -#include "Call.h" -#include "Thread.h" - -typedef struct VariadicInvoker_ { - VALUE rbAddress; - VALUE rbReturnType; - VALUE rbEnums; - - Type* returnType; - ffi_abi abi; - void* function; - int paramCount; -} VariadicInvoker; - - -static VALUE variadic_allocate(VALUE klass); -static VALUE variadic_initialize(VALUE self, VALUE rbFunction, VALUE rbParameterTypes, - VALUE rbReturnType, VALUE options); -static void variadic_mark(VariadicInvoker *); - -static VALUE classVariadicInvoker = Qnil; - - -static VALUE -variadic_allocate(VALUE klass) -{ - VariadicInvoker *invoker; - VALUE obj = Data_Make_Struct(klass, VariadicInvoker, variadic_mark, -1, invoker); - - invoker->rbAddress = Qnil; - invoker->rbEnums = Qnil; - invoker->rbReturnType = Qnil; - - return obj; -} - -static void -variadic_mark(VariadicInvoker *invoker) -{ - rb_gc_mark(invoker->rbEnums); - rb_gc_mark(invoker->rbAddress); - rb_gc_mark(invoker->rbReturnType); -} - -static VALUE -variadic_initialize(VALUE self, VALUE rbFunction, VALUE rbParameterTypes, VALUE rbReturnType, VALUE options) -{ - VariadicInvoker* invoker = NULL; - VALUE retval = Qnil; - VALUE convention = Qnil; - VALUE fixed = Qnil; -#if defined(X86_WIN32) - VALUE rbConventionStr; -#endif - int i; - - Check_Type(options, T_HASH); - convention = rb_hash_aref(options, ID2SYM(rb_intern("convention"))); - - Data_Get_Struct(self, VariadicInvoker, invoker); - invoker->rbEnums = rb_hash_aref(options, ID2SYM(rb_intern("enums"))); - invoker->rbAddress = rbFunction; - invoker->function = rbffi_AbstractMemory_Cast(rbFunction, rbffi_PointerClass)->address; - -#if defined(X86_WIN32) - rbConventionStr = rb_funcall2(convention, rb_intern("to_s"), 0, NULL); - invoker->abi = (RTEST(convention) && strcmp(StringValueCStr(rbConventionStr), "stdcall") == 0) - ? FFI_STDCALL : FFI_DEFAULT_ABI; -#else - invoker->abi = FFI_DEFAULT_ABI; -#endif - - invoker->rbReturnType = rbffi_Type_Lookup(rbReturnType); - if (!RTEST(invoker->rbReturnType)) { - VALUE typeName = rb_funcall2(rbReturnType, rb_intern("inspect"), 0, NULL); - rb_raise(rb_eTypeError, "Invalid return type (%s)", RSTRING_PTR(typeName)); - } - - Data_Get_Struct(rbReturnType, Type, invoker->returnType); - - invoker->paramCount = -1; - - fixed = rb_ary_new2(RARRAY_LEN(rbParameterTypes) - 1); - for (i = 0; i < RARRAY_LEN(rbParameterTypes); ++i) { - VALUE entry = rb_ary_entry(rbParameterTypes, i); - VALUE rbType = rbffi_Type_Lookup(entry); - Type* type; - - if (!RTEST(rbType)) { - VALUE typeName = rb_funcall2(entry, rb_intern("inspect"), 0, NULL); - rb_raise(rb_eTypeError, "Invalid parameter type (%s)", RSTRING_PTR(typeName)); - } - Data_Get_Struct(rbType, Type, type); - if (type->nativeType != NATIVE_VARARGS) { - rb_ary_push(fixed, entry); - } - } - /* - * @fixed and @type_map are used by the parameter mangling ruby code - */ - rb_iv_set(self, "@fixed", fixed); - rb_iv_set(self, "@type_map", rb_hash_aref(options, ID2SYM(rb_intern("type_map")))); - - return retval; -} - -static VALUE -variadic_invoke(VALUE self, VALUE parameterTypes, VALUE parameterValues) -{ - VariadicInvoker* invoker; - FFIStorage* params; - void* retval; - ffi_cif cif; - void** ffiValues; - ffi_type** ffiParamTypes; - ffi_type* ffiReturnType; - Type** paramTypes; - VALUE* argv; - int paramCount = 0, fixedCount = 0, i; - ffi_status ffiStatus; - rbffi_frame_t frame = { 0 }; - - Check_Type(parameterTypes, T_ARRAY); - Check_Type(parameterValues, T_ARRAY); - - Data_Get_Struct(self, VariadicInvoker, invoker); - paramCount = (int) RARRAY_LEN(parameterTypes); - paramTypes = ALLOCA_N(Type *, paramCount); - ffiParamTypes = ALLOCA_N(ffi_type *, paramCount); - params = ALLOCA_N(FFIStorage, paramCount); - ffiValues = ALLOCA_N(void*, paramCount); - argv = ALLOCA_N(VALUE, paramCount); - retval = alloca(MAX(invoker->returnType->ffiType->size, FFI_SIZEOF_ARG)); - - for (i = 0; i < paramCount; ++i) { - VALUE rbType = rb_ary_entry(parameterTypes, i); - - if (!rb_obj_is_kind_of(rbType, rbffi_TypeClass)) { - rb_raise(rb_eTypeError, "wrong type. Expected (FFI::Type)"); - } - Data_Get_Struct(rbType, Type, paramTypes[i]); - - switch (paramTypes[i]->nativeType) { - case NATIVE_INT8: - case NATIVE_INT16: - case NATIVE_INT32: - rbType = rb_const_get(rbffi_TypeClass, rb_intern("INT32")); - Data_Get_Struct(rbType, Type, paramTypes[i]); - break; - case NATIVE_UINT8: - case NATIVE_UINT16: - case NATIVE_UINT32: - rbType = rb_const_get(rbffi_TypeClass, rb_intern("UINT32")); - Data_Get_Struct(rbType, Type, paramTypes[i]); - break; - - case NATIVE_FLOAT32: - rbType = rb_const_get(rbffi_TypeClass, rb_intern("DOUBLE")); - Data_Get_Struct(rbType, Type, paramTypes[i]); - break; - - default: - break; - } - - - ffiParamTypes[i] = paramTypes[i]->ffiType; - if (ffiParamTypes[i] == NULL) { - rb_raise(rb_eArgError, "Invalid parameter type #%x", paramTypes[i]->nativeType); - } - argv[i] = rb_ary_entry(parameterValues, i); - } - - ffiReturnType = invoker->returnType->ffiType; - if (ffiReturnType == NULL) { - rb_raise(rb_eArgError, "Invalid return type"); - } - - /*Get the number of fixed args from @fixed array*/ - fixedCount = RARRAY_LEN(rb_iv_get(self, "@fixed")); - -#ifdef HAVE_FFI_PREP_CIF_VAR - ffiStatus = ffi_prep_cif_var(&cif, invoker->abi, fixedCount, paramCount, ffiReturnType, ffiParamTypes); -#else - ffiStatus = ffi_prep_cif(&cif, invoker->abi, paramCount, ffiReturnType, ffiParamTypes); -#endif - switch (ffiStatus) { - case FFI_BAD_ABI: - rb_raise(rb_eArgError, "Invalid ABI specified"); - case FFI_BAD_TYPEDEF: - rb_raise(rb_eArgError, "Invalid argument type specified"); - case FFI_OK: - break; - default: - rb_raise(rb_eArgError, "Unknown FFI error"); - } - - rbffi_SetupCallParams(paramCount, argv, -1, paramTypes, params, - ffiValues, NULL, 0, invoker->rbEnums); - - rbffi_frame_push(&frame); - ffi_call(&cif, FFI_FN(invoker->function), retval, ffiValues); - rbffi_frame_pop(&frame); - - rbffi_save_errno(); - - if (RTEST(frame.exc) && frame.exc != Qnil) { - rb_exc_raise(frame.exc); - } - - return rbffi_NativeValue_ToRuby(invoker->returnType, invoker->rbReturnType, retval); -} - - -void -rbffi_Variadic_Init(VALUE moduleFFI) -{ - classVariadicInvoker = rb_define_class_under(moduleFFI, "VariadicInvoker", rb_cObject); - rb_global_variable(&classVariadicInvoker); - - rb_define_alloc_func(classVariadicInvoker, variadic_allocate); - - rb_define_method(classVariadicInvoker, "initialize", variadic_initialize, 4); - rb_define_method(classVariadicInvoker, "invoke", variadic_invoke, 2); -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Variadic.o b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/Variadic.o deleted file mode 100644 index c202ea1327f35233dc9872fda4d08804220ea74c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17532 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 E0T?a4_W%F@ diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/compat.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/compat.h deleted file mode 100644 index 4a1c646..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/compat.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2008, 2009, Wayne Meissner - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef RBFFI_COMPAT_H -#define RBFFI_COMPAT_H - -#include - -#ifndef RARRAY_LEN -# define RARRAY_LEN(ary) RARRAY(ary)->len -#endif - -#ifndef RARRAY_PTR -# define RARRAY_PTR(ary) RARRAY(ary)->ptr -#endif - -#ifndef RSTRING_LEN -# define RSTRING_LEN(s) RSTRING(s)->len -#endif - -#ifndef RSTRING_PTR -# define RSTRING_PTR(s) RSTRING(s)->ptr -#endif - -#ifndef NUM2ULL -# define NUM2ULL(x) rb_num2ull((VALUE)x) -#endif - -#ifndef roundup -# define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) -#endif - -#ifdef __GNUC__ -# define likely(x) __builtin_expect((x), 1) -# define unlikely(x) __builtin_expect((x), 0) -#else -# define likely(x) (x) -# define unlikely(x) (x) -#endif - -#ifndef MAX -# define MAX(a, b) ((a) < (b) ? (b) : (a)) -#endif -#ifndef MIN -# define MIN(a, b) ((a) < (b) ? (a) : (b)) -#endif - -#ifndef RB_GC_GUARD -# define RB_GC_GUARD(x) (x) -#endif - -#ifndef RB_GC_GUARD_PTR -# define RB_GC_GUARD_PTR(x) (x) -#endif - -#endif /* RBFFI_COMPAT_H */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/extconf.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/extconf.h deleted file mode 100644 index 0089a2a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/extconf.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef EXTCONF_H -#define EXTCONF_H -#define HAVE_FFI_PREP_CLOSURE 1 -#define HAVE_RB_THREAD_CALL_WITH_GVL 1 -#define HAVE_RB_THREAD_CALL_WITHOUT_GVL 1 -#define RUBY_1_9 1 -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/extconf.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/extconf.rb deleted file mode 100644 index b4d75b5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/extconf.rb +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env ruby - -if !defined?(RUBY_ENGINE) || RUBY_ENGINE == 'ruby' || RUBY_ENGINE == 'rbx' - require 'mkmf' - require 'rbconfig' - dir_config("ffi_c") - - # recent versions of ruby add restrictive ansi and warning flags on a whim - kill them all - $warnflags = '' - $CFLAGS.gsub!(/[\s+]-ansi/, '') - $CFLAGS.gsub!(/[\s+]-std=[^\s]+/, '') - # solaris 10 needs -c99 for - $CFLAGS << " -std=c99" if RbConfig::CONFIG['host_os'] =~ /solaris(!?2\.11)/ - - if ENV['RUBY_CC_VERSION'].nil? && (pkg_config("libffi") || - have_header("ffi.h") || - find_header("ffi.h", "/usr/local/include", "/usr/include/ffi")) - - # We need at least ffi_call and ffi_prep_closure - libffi_ok = have_library("ffi", "ffi_call", [ "ffi.h" ]) || - have_library("libffi", "ffi_call", [ "ffi.h" ]) - libffi_ok &&= have_func("ffi_prep_closure") - - # Check if the raw api is available. - $defs << "-DHAVE_RAW_API" if have_func("ffi_raw_call") && have_func("ffi_prep_raw_closure") - end - - have_func('rb_thread_blocking_region') - have_func('rb_thread_call_with_gvl') - have_func('rb_thread_call_without_gvl') - have_func('ffi_prep_cif_var') - - $defs << "-DHAVE_EXTCONF_H" if $defs.empty? # needed so create_header works - $defs << "-DUSE_INTERNAL_LIBFFI" unless libffi_ok - $defs << "-DRUBY_1_9" if RUBY_VERSION >= "1.9.0" - - create_header - - $LOCAL_LIBS << " ./libffi/.libs/libffi_convenience.lib" if RbConfig::CONFIG['host_os'] =~ /mswin/ - - create_makefile("ffi_c") - unless libffi_ok - File.open("Makefile", "a") do |mf| - mf.puts "LIBFFI_HOST=--host=#{RbConfig::CONFIG['host_alias']}" if RbConfig::CONFIG.has_key?("host_alias") - if RbConfig::CONFIG['host_os'].downcase =~ /darwin/ - mf.puts "include ${srcdir}/libffi.darwin.mk" - elsif RbConfig::CONFIG['host_os'].downcase =~ /bsd/ - mf.puts '.include "${srcdir}/libffi.bsd.mk"' - elsif RbConfig::CONFIG['host_os'].downcase =~ /mswin64/ - mf.puts '!include $(srcdir)/libffi.vc64.mk' - elsif RbConfig::CONFIG['host_os'].downcase =~ /mswin32/ - mf.puts '!include $(srcdir)/libffi.vc.mk' - else - mf.puts "include ${srcdir}/libffi.mk" - end - end - end - -else - File.open("Makefile", "w") do |mf| - mf.puts "# Dummy makefile for non-mri rubies" - mf.puts "all install::\n" - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ffi.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ffi.c deleted file mode 100644 index ea9a058..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ffi.c +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (c) 2008, 2009, Wayne Meissner - * Copyright (C) 2009 Luc Heinrich - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include -#include - -#include - -#include "rbffi.h" -#include "AbstractMemory.h" -#include "Pointer.h" -#include "MemoryPointer.h" -#include "Struct.h" -#include "StructByValue.h" -#include "StructByReference.h" -#include "DynamicLibrary.h" -#include "Platform.h" -#include "Types.h" -#include "LastError.h" -#include "Function.h" -#include "ClosurePool.h" -#include "MethodHandle.h" -#include "Call.h" -#include "ArrayType.h" -#include "MappedType.h" - -void Init_ffi_c(void); - -VALUE rbffi_FFIModule = Qnil; - -static VALUE moduleFFI = Qnil; - -void -Init_ffi_c(void) -{ - /* - * Document-module: FFI - * - * This module embbed type constants from {FFI::NativeType}. - */ - rbffi_FFIModule = moduleFFI = rb_define_module("FFI"); - rb_global_variable(&rbffi_FFIModule); - - rbffi_Thread_Init(rbffi_FFIModule); - - /* FFI::Type needs to be initialized before most other classes */ - rbffi_Type_Init(moduleFFI); - - rbffi_DataConverter_Init(moduleFFI); - - rbffi_ArrayType_Init(moduleFFI); - rbffi_LastError_Init(moduleFFI); - rbffi_Call_Init(moduleFFI); - rbffi_ClosurePool_Init(moduleFFI); - rbffi_MethodHandle_Init(moduleFFI); - rbffi_Platform_Init(moduleFFI); - rbffi_AbstractMemory_Init(moduleFFI); - rbffi_Pointer_Init(moduleFFI); - rbffi_Function_Init(moduleFFI); - rbffi_MemoryPointer_Init(moduleFFI); - rbffi_Buffer_Init(moduleFFI); - rbffi_StructByValue_Init(moduleFFI); - rbffi_StructByReference_Init(moduleFFI); - rbffi_Struct_Init(moduleFFI); - rbffi_DynamicLibrary_Init(moduleFFI); - rbffi_Variadic_Init(moduleFFI); - rbffi_Types_Init(moduleFFI); - rbffi_MappedType_Init(moduleFFI); -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ffi.o b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ffi.o deleted file mode 100644 index 15710b22cdd4f4452d9975138a6ff6ffb2d1996e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4016 zcmd^CO>7%Q6dv2Lo4>kALz1Sgi%SbFh_ypNqG@SUH$O^HB88HMQYfpny>=GXyViOg z;;IL@R1~NLoPYx-KnNirIH0P6OD~86a6(0#S|m_==!Hw6pu+cd-^SiaD$1EBjlcQc zd-Ltg?Ci|=`dWSCgW4YI1dQ}ZdS9my!{lfaFA)T$szuG!0!I21xrJPl?`54Hb}c1@pfTRg zRJBlZ9m6Vff~to5w~zILsaSztt3_K0>gb=Iua{MbdJ**Rsoc@2)vU)@?`!s)mh|8b zNd|hRU07Ey7RnZ4oF+ePp^QLJ%jX?^*_*#m{{lUYHSSc;uu3*Hk;hx)r=MoM_ql)P zyZrYI_qzRaG^?!F*6LjjWn;Ovvv3na8NqlfTEXk0+`mANU&|fqRqJ_6tLQaZ?+QPC zocpu$4*Lf^w^3cIx0@I52(+~gRaDj4iRRP@ah&zi?0g$~j{fSnn|Foo79!0yeix9Q(* zXnNmzH#Q6yb$$!VRpf64zOqq>y>Nnxc@#2|rb4;&xIvWvYR9I}{xW^;paPw%)OPx; zw-E+#?jSk+$ZP-0`pIiF1A<@QDo#z!h+MU5>gn0p#kusd?$iw1N{?oSGsEe<1rwjW zGCB;Bd3ZE4a=$2*j7&jfkJXTv)lCh{<^`={ntCH!wH>!)n}(e&*NviH%P#9y(RQ-= zx>YpwtW(c7vLl(1%y71>S87=(DGy~vGyAeQkcg=T;p7R?r#ZV=H+5m!Rykd_YDU@8 zi)q7h#bR#u*rcdAv6Dw15wYY<-`LRpt^-|B zti#xVnCXipiDJLojp(7SE>z=wVvv@|2ogBF#ZTQcG)Cv|3W|U3w0mDew|J1I6c+3T zRHu_O`YI}8DACc5Sa1Z!9*5%-l*oy;cL5vP?gvoh$tuCuG96EVHs=XMWKjIgge0gpYv-4G7gr;vj*7@i zPo$@NL;D-ZqJ3aH%FXc=6N8F6y+rIMIhFeLaQH^qE+4rKIu`B!k0wni!#c51ULY$ z0I?=g_W|*ZD?6FfnMHog30VqbqccjOYZI`)48+tXo&zE;@hIaC_5-|lgK;a8k|@E~ zPW4R?2<#f_o8SvJjZ5GyVR2L96l;y|m*N+sI6bR1|ArKIBu?LOYyP(qe^%o2lK$&b zd_{`?EX6;R_?uFGTH-X{aIM;>QoJm2S`V%H7p1sR{cSau$3F&K+vfC&?KD){SA)<* z12;{hFl*!;O$t5fI(1z2TC*3tTV$(eR;#&_j$=Eayb1h`8n-PRz^)#S_+6N{ar{Y< z^?XO_rIM63RksQ*PW909=1mQ!wNnW>$4$Fdcl3GNHp70+3_JXR9%(FUW?c`Z<{U?B z(4a%!IjvgNi)-9#9CNz6WEZD3x-ojgKYO9$*9^1fAv diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ffi_c.bundle b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/ffi_c.bundle deleted file mode 100755 index 7d8c27cdd85ecbd94aeb762221bfbe2782faaa2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178444 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ν3+JEPwf9wWs1|JKa5B@N?1$;GlFVCpwX^yDv!zwXaso%`b&@%Q`VCgEE9qXGGEJKNfW%<{D82if#bXb;C)pW+=M zI=2V(WOdW=qG-{X-m~iEx5L7AF!W^V8xp-|)sI7eEc9gRZ_y93=^rgWc|iR2d@zjh z{tRVl-=%2ZtH5RO1K{Og`MK2KUje@zd=6Oio9TEtRQ&z^dB1S2{WEfxmR_D0O1zGz zWKBP`uYQnC|7iV+jR(~?}Ydc;W#x22ZpeNU>FG4TtV~6%9Q@^zHjMh7F7evm$eO

r!hfUPt^LVs)4y8$ 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 diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi.bsd.mk b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi.bsd.mk deleted file mode 100644 index 16ec6b5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi.bsd.mk +++ /dev/null @@ -1,34 +0,0 @@ -# -*- makefile -*- -# -# Makefile for BSD systems -# - -INCFLAGS += -I${LIBFFI_BUILD_DIR}/include -LOCAL_LIBS += ${LIBFFI} -lpthread - -LIBFFI_CFLAGS = ${FFI_MMAP_EXEC} -pthread -LIBFFI_BUILD_DIR = ${.CURDIR}/libffi-${arch} - -.if ${srcdir} == "." - LIBFFI_SRC_DIR := ${.CURDIR}/libffi -.else - LIBFFI_SRC_DIR := ${srcdir}/libffi -.endif - - -LIBFFI = ${LIBFFI_BUILD_DIR}/.libs/libffi_convenience.a -LIBFFI_CONFIGURE = ${LIBFFI_SRC_DIR}/configure --disable-static \ - --with-pic=yes --disable-dependency-tracking - -$(OBJS): ${LIBFFI} - -$(LIBFFI): - @mkdir -p ${LIBFFI_BUILD_DIR} - @if [ ! -f ${LIBFFI_BUILD_DIR}/Makefile ]; then \ - echo "Configuring libffi"; \ - cd ${LIBFFI_BUILD_DIR} && \ - /usr/bin/env CC="${CC}" LD="${LD}" CFLAGS="${LIBFFI_CFLAGS}" GREP_OPTIONS="" \ - /bin/sh ${LIBFFI_CONFIGURE} ${LIBFFI_HOST} > /dev/null; \ - fi - @cd ${LIBFFI_BUILD_DIR} && ${MAKE} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi.darwin.mk b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi.darwin.mk deleted file mode 100644 index f68badd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi.darwin.mk +++ /dev/null @@ -1,95 +0,0 @@ -# -*- makefile -*- - -include ${srcdir}/libffi.gnu.mk - -CCACHE := $(shell type -p ccache) -BUILD_DIR := $(shell pwd) - -INCFLAGS += -I"$(BUILD_DIR)" - -# Work out which arches we need to compile the lib for -ARCHES := -ARCHFLAGS ?= $(filter -arch %, $(CFLAGS)) - -ifneq ($(findstring -arch ppc,$(ARCHFLAGS)),) - ARCHES += ppc -endif - -ifneq ($(findstring -arch i386,$(ARCHFLAGS)),) - ARCHES += i386 -endif - -ifneq ($(findstring -arch x86_64,$(ARCHFLAGS)),) - ARCHES += x86_64 -endif - -ifeq ($(strip $(ARCHES)),) -LIBFFI_BUILD_DIR = $(BUILD_DIR)/libffi-$(arch) -# Just build the one (default) architecture -$(LIBFFI): - @mkdir -p "$(LIBFFI_BUILD_DIR)" "$(@D)" - @if [ ! -f "$(LIBFFI_BUILD_DIR)"/Makefile ]; then \ - echo "Configuring libffi"; \ - cd "$(LIBFFI_BUILD_DIR)" && \ - /usr/bin/env CC="$(CC)" LD="$(LD)" CFLAGS="$(LIBFFI_CFLAGS)" GREP_OPTIONS="" \ - /bin/sh $(LIBFFI_CONFIGURE) $(LIBFFI_HOST) > /dev/null; \ - fi - cd "$(LIBFFI_BUILD_DIR)" && $(MAKE) - -else -LIBTARGETS = $(foreach arch,$(ARCHES),"$(BUILD_DIR)"/libffi-$(arch)/.libs/libffi_convenience.a) - -# Build a fat binary and assemble -build_ffi = \ - mkdir -p "$(BUILD_DIR)"/libffi-$(1); \ - (if [ ! -f "$(BUILD_DIR)"/libffi-$(1)/Makefile ]; then \ - echo "Configuring libffi for $(1)"; \ - cd "$(BUILD_DIR)"/libffi-$(1) && \ - env CC="$(CCACHE) $(CC)" CFLAGS="-arch $(1) $(LIBFFI_CFLAGS)" LDFLAGS="-arch $(1)" \ - $(LIBFFI_CONFIGURE) --host=$(1)-apple-darwin > /dev/null; \ - fi); \ - env MACOSX_DEPLOYMENT_TARGET=10.4 $(MAKE) -C "$(BUILD_DIR)"/libffi-$(1) - -target_ffi = "$(BUILD_DIR)"/libffi-$(1)/.libs/libffi_convenience.a:; $(call build_ffi,$(1)) - -# Work out which arches we need to compile the lib for -ifneq ($(findstring ppc,$(ARCHES)),) - $(call target_ffi,ppc) -endif - -ifneq ($(findstring i386,$(ARCHES)),) - $(call target_ffi,i386) -endif - -ifneq ($(findstring x86_64,$(ARCHES)),) - $(call target_ffi,x86_64) -endif - - -$(LIBFFI): $(LIBTARGETS) - # Assemble into a FAT (x86_64, i386, ppc) library - @mkdir -p "$(@D)" - /usr/bin/libtool -static -o $@ \ - $(foreach arch, $(ARCHES),"$(BUILD_DIR)"/libffi-$(arch)/.libs/libffi_convenience.a) - @mkdir -p "$(LIBFFI_BUILD_DIR)"/include - $(RM) "$(LIBFFI_BUILD_DIR)"/include/ffi.h - @( \ - printf "#if defined(__i386__)\n"; \ - printf "#include \"libffi-i386/include/ffi.h\"\n"; \ - printf "#elif defined(__x86_64__)\n"; \ - printf "#include \"libffi-x86_64/include/ffi.h\"\n";\ - printf "#elif defined(__ppc__)\n"; \ - printf "#include \"libffi-ppc/include/ffi.h\"\n";\ - printf "#endif\n";\ - ) > "$(LIBFFI_BUILD_DIR)"/include/ffi.h - @( \ - printf "#if defined(__i386__)\n"; \ - printf "#include \"libffi-i386/include/ffitarget.h\"\n"; \ - printf "#elif defined(__x86_64__)\n"; \ - printf "#include \"libffi-x86_64/include/ffitarget.h\"\n";\ - printf "#elif defined(__ppc__)\n"; \ - printf "#include \"libffi-ppc/include/ffitarget.h\"\n";\ - printf "#endif\n";\ - ) > "$(LIBFFI_BUILD_DIR)"/include/ffitarget.h - -endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi.gnu.mk b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi.gnu.mk deleted file mode 100644 index 2af7a75..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi.gnu.mk +++ /dev/null @@ -1,31 +0,0 @@ -# -*- makefile -*- -# -# Common definitions for all systems that use GNU make -# - - -# Tack the extra deps onto the autogenerated variables -INCFLAGS += -I"$(LIBFFI_BUILD_DIR)"/include -LOCAL_LIBS += $(LIBFFI) -BUILD_DIR = $(shell pwd) -LIBFFI_CFLAGS = $(FFI_MMAP_EXEC) -LIBFFI_BUILD_DIR = $(BUILD_DIR)/libffi-$(arch) - -ifeq ($(srcdir),.) - LIBFFI_SRC_DIR := $(shell pwd)/libffi -else ifeq ($(srcdir),..) - LIBFFI_SRC_DIR := $(shell pwd)/../libffi -else - LIBFFI_SRC_DIR := $(realpath $(srcdir)/libffi) -endif - -LIBFFI = "$(LIBFFI_BUILD_DIR)"/.libs/libffi_convenience.a -LIBFFI_CONFIGURE = "$(LIBFFI_SRC_DIR)"/configure --disable-static \ - --with-pic=yes --disable-dependency-tracking - -$(OBJS): $(LIBFFI) - -# -# libffi.mk or libffi.darwin.mk contains rules for building the actual library -# - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi.mk b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi.mk deleted file mode 100644 index 85c15c5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi.mk +++ /dev/null @@ -1,13 +0,0 @@ -# -*- makefile -*- - -include ${srcdir}/libffi.gnu.mk - -$(LIBFFI): - @mkdir -p "$(LIBFFI_BUILD_DIR)" "$@(D)" - @if [ ! -f "$(LIBFFI_BUILD_DIR)"/Makefile ]; then \ - echo "Configuring libffi"; \ - cd "$(LIBFFI_BUILD_DIR)" && \ - /usr/bin/env CFLAGS="$(LIBFFI_CFLAGS)" GREP_OPTIONS="" \ - /bin/sh $(LIBFFI_CONFIGURE) $(LIBFFI_HOST) > /dev/null; \ - fi - $(MAKE) -C "$(LIBFFI_BUILD_DIR)" diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi.vc.mk b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi.vc.mk deleted file mode 100644 index c62e55f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi.vc.mk +++ /dev/null @@ -1,26 +0,0 @@ -# -*- makefile -*- -# -# Makefile for msvc -# - -# Tack the extra deps onto the autogenerated variables -INCFLAGS = $(INCFLAGS) -I$(LIBFFI_BUILD_DIR)/include -I$(LIBFFI_BUILD_DIR)/src/x86 -LOCAL_LIBS = $(LOCAL_LIBS) $(LIBFFI) -BUILD_DIR = $(MAKEDIR) -LIBFFI_BUILD_DIR = $(BUILD_DIR)/libffi - -!IF "$(srcdir)" == "." -LIBFFI_SRC_DIR = $(MAKEDIR)/libffi -!ELSE -LIBFFI_SRC_DIR = $(srcdir)/libffi -!ENDIF - -LIBFFI = $(LIBFFI_BUILD_DIR)/.libs/libffi_convenience.lib - -$(OBJS): $(LIBFFI) - -$(LIBFFI): - @$(MAKEDIRS) $(LIBFFI_BUILD_DIR) - @cd $(LIBFFI_BUILD_DIR) && $(MAKE) -f Makefile.vc - - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi.vc64.mk b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi.vc64.mk deleted file mode 100644 index 9582948..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi.vc64.mk +++ /dev/null @@ -1,26 +0,0 @@ -# -*- makefile -*- -# -# Makefile for msvc -# - -# Tack the extra deps onto the autogenerated variables -INCFLAGS = $(INCFLAGS) -I$(LIBFFI_BUILD_DIR)/include -I$(LIBFFI_BUILD_DIR)/src/x86 -LOCAL_LIBS = $(LOCAL_LIBS) $(LIBFFI) -BUILD_DIR = $(MAKEDIR) -LIBFFI_BUILD_DIR = $(BUILD_DIR)/libffi - -!IF "$(srcdir)" == "." -LIBFFI_SRC_DIR = $(MAKEDIR)/libffi -!ELSE -LIBFFI_SRC_DIR = $(srcdir)/libffi -!ENDIF - -LIBFFI = $(LIBFFI_BUILD_DIR)/.libs/libffi_convenience.lib - -$(OBJS): $(LIBFFI) - -$(LIBFFI): - @$(MAKEDIRS) $(LIBFFI_BUILD_DIR) - @cd $(LIBFFI_BUILD_DIR) && $(MAKE) -f Makefile.vc64 - - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/ChangeLog b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/ChangeLog deleted file mode 100644 index d5d1024..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/ChangeLog +++ /dev/null @@ -1,4600 +0,0 @@ -2011-08-22 Jasper Lievisse Adriaanse - - * configure.ac: Add OpenBSD/hppa and OpenBSD/powerpc support. - * configure: Rebuilt. - -2011-07-11 Andrew Haley - - * src/arm/ffi.c (FFI_INIT_TRAMPOLINE): Clear icache. - -2011-06-29 Rainer Orth - - * testsuite/libffi.call/cls_double_va.c: Move PR number to comment. - * testsuite/libffi.call/cls_longdouble_va.c: Likewise. - -2011-06-29 Rainer Orth - - PR libffi/46660 - * testsuite/libffi.call/cls_double_va.c: xfail dg-output on - mips-sgi-irix6*. - * testsuite/libffi.call/cls_longdouble_va.c: Likewise. - -2011-06-14 Rainer Orth - - * testsuite/libffi.call/huge_struct.c (test_large_fn): Use PRIu8, - PRId8 instead of %hhu, %hhd. - * testsuite/libffi.call/ffitest.h [__alpha__ && __osf__] (PRId8, - PRIu8): Define. - [__sgi__] (PRId8, PRIu8): Define. - -2011-04-29 Rainer Orth - - * src/alpha/osf.S (UA_SI, FDE_ENCODING, FDE_ENCODE, FDE_ARANGE): - Define. - Use them to handle ELF vs. ECOFF differences. - [__osf__] (_GLOBAL__F_ffi_call_osf): Define. - -2011-03-30 Timothy Wall - - * src/powerpc/darwin.S: Fix unknown FDE encoding. - * src/powerpc/darwin_closure.S: ditto. - -2011-02-25 Anthony Green - - * src/powerpc/ffi.c (ffi_prep_closure_loc): Allow for more - 32-bit ABIs. - -2011-02-15 Anthony Green - - * m4/ax_cc_maxopt.m4: Don't -malign-double or use -ffast-math. - * configure: Rebuilt. - -2011-02-13 Ralf Wildenhues - - * configure: Regenerate. - -2011-02-13 Anthony Green - - * include/ffi_common.h (UNLIKELY, LIKELY): Define. - * src/x86/ffi64.c (UNLIKELY, LIKELY): Remove definition. - * src/prep_cif.c (UNLIKELY, LIKELY): Remove definition. - - * src/prep_cif.c (initialize_aggregate): Convert assertion into - FFI_BAD_TYPEDEF return. Initialize arg size and alignment to 0. - - * src/pa/ffi.c (ffi_prep_closure_loc): Don't ASSERT ABI test, - just return FFI_BAD_ABI when things are wrong. - * src/arm/ffi.c (ffi_prep_closure_loc): Ditto. - * src/powerpc/ffi.c (ffi_prep_closure_loc): Ditto. - * src/mips/ffi.c (ffi_prep_closure_loc): Ditto. - * src/ia64/ffi.c (ffi_prep_closure_loc): Ditto. - * src/avr32/ffi.c (ffi_prep_closure_loc): Ditto. - -2011-02-11 Anthony Green - - * src/sparc/ffi.c (ffi_prep_closure_loc): Don't ASSERT ABI test, - just return FFI_BAD_ABI when things are wrong. - -2011-02-09 Stuart Shelton - - http://bugs.gentoo.org/show_bug.cgi?id=286911 - * src/mips/ffitarget.h: Clean up error messages. - * src/java_raw_api.c (ffi_java_translate_args): Cast raw arg to - ffi_raw*. - * include/ffi.h.in: Add pragma for SGI compiler. - -2011-02-09 Anthony Green - - * configure.ac: Add powerpc64-*-darwin* support. - -2011-02-09 Anthony Green - - * README: Mention Interix. - -2011-02-09 Jonathan Callen - - * configure.ac: Add Interix to win32/cygwin/mingw case. - * configure: Ditto. - * src/closures.c: Treat Interix like Cygwin, instead of as a - generic win32. - -2011-02-09 Anthony Green - - * testsuite/libffi.call/err_bad_typedef.c: Remove xfail. - * testsuite/libffi.call/err_bad_abi.c: Remove xfail. - * src/x86/ffi64.c (UNLIKELY, LIKELY): Define. - (ffi_prep_closure_loc): Check for bad ABI. - * src/prep_cif.c (UNLIKELY, LIKELY): Define. - (initialize_aggregate): Check for bad types. - -2011-02-09 Landon Fuller - - * Makefile.am (EXTRA_DIST): Add build-ios.sh, src/arm/gentramp.sh, - src/arm/trampoline.S. - (nodist_libffi_la_SOURCES): Add src/arc/trampoline.S. - * configure.ac (FFI_EXEC_TRAMPOLINE_TABLE): Define. - * src/arm/ffi.c (ffi_trampoline_table) - (ffi_closure_trampoline_table_page, ffi_trampoline_table_entry) - (FFI_TRAMPOLINE_CODELOC_CONFIG, FFI_TRAMPOLINE_CONFIG_PAGE_OFFSET) - (FFI_TRAMPOLINE_COUNT, ffi_trampoline_lock, ffi_trampoline_tables) - (ffi_trampoline_table_alloc, ffi_closure_alloc, ffi_closure_free): - Define for FFI_EXEC_TRAMPOLINE_TABLE case (iOS). - (ffi_prep_closure_loc): Handl FFI_EXEC_TRAMPOLINE_TABLE case - separately. - * src/arm/sysv.S: Handle Apple iOS host. - * src/closures.c: Handle FFI_EXEC_TRAMPOLINE_TABLE case. - * build-ios.sh: New file. - * fficonfig.h.in, configure, Makefile.in: Rebuilt. - * README: Mention ARM iOS. - -2011-02-08 Oren Held - - * src/dlmalloc.c (_STRUCT_MALLINFO): Define in order to avoid - redefinition of mallinfo on HP-UX. - -2011-02-08 Ginn Chen - - * src/sparc/ffi.c (ffi_call): Make compatible with Solaris Studio - aggregate return ABI. Flush cache. - (ffi_prep_closure_loc): Flush cache. - -2011-02-11 Anthony Green - - From Tom Honermann : - * src/powerpc/aix.S (ffi_call_AIX): Support for xlc toolchain on - AIX. Declare .ffi_prep_args. Insert nops after branch - instructions so that the AIX linker can insert TOC reload - instructions. - * src/powerpc/aix_closure.S: Declare .ffi_closure_helper_DARWIN. - -2011-02-08 Ed - - * src/powerpc/asm.h: Fix grammar nit in comment. - -2011-02-08 Uli Link - - * include/ffi.h.in (FFI_64_BIT_MAX): Define and use. - -2011-02-09 Rainer Orth - - PR libffi/46661 - * testsuite/libffi.call/cls_pointer.c (main): Cast void * to - uintptr_t first. - * testsuite/libffi.call/cls_pointer_stack.c (main): Likewise. - -2011-02-08 Rafael Avila de Espindola - - * configure.ac: Fix x86 test for pc related relocs. - * configure: Rebuilt. - -2011-02-07 Joel Sherrill - - * libffi/src/m68k/ffi.c: Add RTEMS support for cache flushing. - Handle case when CPU variant does not have long double support. - * libffi/src/m68k/sysv.S: Add support for mc68000, Coldfire, - and cores with soft floating point. - -2011-02-07 Joel Sherrill - - * configure.ac: Add mips*-*-rtems* support. - * configure: Regenerate. - * src/mips/ffitarget.h: Ensure needed constants are available - for targets which do not have sgidefs.h. - -2011-01-26 Dave Korn - - PR target/40125 - * configure.ac (AM_LTLDFLAGS): Add -bindir option for windows DLLs. - * configure: Regenerate. - -2010-12-18 Iain Sandoe - - PR libffi/29152 - PR libffi/42378 - * src/powerpc/darwin_closure.S: Provide Darwin64 implementation, - update comments. - * src/powerpc/ffitarget.h (POWERPC_DARWIN64): New, - (FFI_TRAMPOLINE_SIZE): Update for Darwin64. - * src/powerpc/darwin.S: Provide Darwin64 implementation, - update comments. - * src/powerpc/ffi_darwin.c: Likewise. - -2010-12-06 Rainer Orth - - * configure.ac (libffi_cv_as_ascii_pseudo_op): Use double - backslashes. - (libffi_cv_as_string_pseudo_op): Likewise. - * configure: Regenerate. - -2010-12-03 Chung-Lin Tang - - * src/arm/sysv.S (ffi_closure_SYSV): Add UNWIND to .pad directive. - (ffi_closure_VFP): Same. - (ffi_call_VFP): Move down to before ffi_closure_VFP. Add '.fpu vfp' - directive. - -2010-12-01 Rainer Orth - - * testsuite/libffi.call/ffitest.h [__sgi] (PRId64, PRIu64): Define. - (PRIuPTR): Define. - -2010-11-29 Richard Henderson - Rainer Orth - - * src/x86/sysv.S (FDE_ENCODING, FDE_ENCODE): Define. - (.eh_frame): Use FDE_ENCODING. - (.LASFDE1, .LASFDE2, LASFDE3): Simplify with FDE_ENCODE. - -2010-11-22 Jacek Caban - - * configure.ac: Check for symbol underscores on mingw-w64. - * configure: Rebuilt. - * src/x86/win64.S: Correctly access extern symbols in respect to - underscores. - -2010-11-15 Rainer Orth - - * testsuite/lib/libffi-dg.exp: Rename ... - * testsuite/lib/libffi.exp: ... to this. - * libffi/testsuite/libffi.call/call.exp: Don't load libffi-dg.exp. - * libffi/testsuite/libffi.special/special.exp: Likewise. - -2010-10-28 Chung-Lin Tang - - * src/arm/ffi.c (ffi_prep_args): Add VFP register argument handling - code, new parameter, and return value. Update comments. - (ffi_prep_cif_machdep): Add case for VFP struct return values. Add - call to layout_vfp_args(). - (ffi_call_SYSV): Update declaration. - (ffi_call_VFP): New declaration. - (ffi_call): Add VFP struct return conditions. Call ffi_call_VFP() - when ABI is FFI_VFP. - (ffi_closure_VFP): New declaration. - (ffi_closure_SYSV_inner): Add new vfp_args parameter, update call to - ffi_prep_incoming_args_SYSV(). - (ffi_prep_incoming_args_SYSV): Update parameters. Add VFP argument - case handling. - (ffi_prep_closure_loc): Pass ffi_closure_VFP to trampoline - construction under VFP hard-float. - (rec_vfp_type_p): New function. - (vfp_type_p): Same. - (place_vfp_arg): Same. - (layout_vfp_args): Same. - * src/arm/ffitarget.h (ffi_abi): Add FFI_VFP. Define FFI_DEFAULT_ABI - based on __ARM_PCS_VFP. - (FFI_EXTRA_CIF_FIELDS): Define for adding VFP hard-float specific - fields. - (FFI_TYPE_STRUCT_VFP_FLOAT): Define internally used type code. - (FFI_TYPE_STRUCT_VFP_DOUBLE): Same. - * src/arm/sysv.S (ffi_call_SYSV): Change call of ffi_prep_args() to - direct call. Move function pointer load upwards. - (ffi_call_VFP): New function. - (ffi_closure_VFP): Same. - - * testsuite/lib/libffi-dg.exp (check-flags): New function. - (dg-skip-if): New function. - * testsuite/libffi.call/cls_double_va.c: Skip if target is arm*-*-* - and compiler options include -mfloat-abi=hard. - * testsuite/libffi.call/cls_longdouble_va.c: Same. - -2010-10-01 Jakub Jelinek - - PR libffi/45677 - * src/x86/ffi64.c (ffi_prep_cif_machdep): Ensure cif->bytes is - a multiple of 8. - * testsuite/libffi.call/many2.c: New test. - -2010-08-20 Mark Wielaard - - * src/closures.c (open_temp_exec_file_mnt): Check if getmntent_r - returns NULL. - -2010-08-09 Andreas Tobler - - * configure.ac: Add target powerpc64-*-freebsd*. - * configure: Regenerate. - * testsuite/libffi.call/cls_align_longdouble_split.c: Pass - -mlong-double-128 only to linux targets. - * testsuite/libffi.call/cls_align_longdouble_split2.c: Likewise. - * testsuite/libffi.call/cls_longdouble.c: Likewise. - * testsuite/libffi.call/huge_struct.c: Likewise. - -2010-08-05 Dan Witte - - * Makefile.am: Pass FFI_DEBUG define to msvcc.sh for linking to the - debug CRT when --enable-debug is given. - * configure.ac: Define it. - * msvcc.sh: Translate -g and -DFFI_DEBUG appropriately. - -2010-08-04 Dan Witte - - * src/x86/ffitarget.h: Add X86_ANY define for all x86/x86_64 - platforms. - * src/x86/ffi.c: Remove redundant ifdef checks. - * src/prep_cif.c: Push stack space computation into src/x86/ffi.c - for X86_ANY so return value space doesn't get added twice. - -2010-08-03 Neil Rashbrooke - - * msvcc.sh: Don't pass -safeseh to ml64 because behavior is buggy. - -2010-07-22 Dan Witte - - * src/*/ffitarget.h: Make FFI_LAST_ABI one past the last valid ABI. - * src/prep_cif.c: Fix ABI assertion. - * src/cris/ffi.c: Ditto. - -2010-07-10 Evan Phoenix - - * src/closures.c (selinux_enabled_check): Fix strncmp usage bug. - -2010-07-07 Dan Horák - - * include/ffi.h.in: Protect #define with #ifndef. - * src/powerpc/ffitarget.h: Ditto. - * src/s390/ffitarget.h: Ditto. - * src/sparc/ffitarget.h: Ditto. - -2010-07-07 Neil Roberts - - * src/x86/sysv.S (ffi_call_SYSV): Align the stack pointer to - 16-bytes. - -2010-07-02 Jakub Jelinek - - * Makefile.am (AM_MAKEFLAGS): Pass also mandir to submakes. - * Makefile.in: Regenerated. - -2010-05-19 Rainer Orth - - * configure.ac (libffi_cv_as_x86_pcrel): Check for illegal in as - output, too. - (libffi_cv_as_ascii_pseudo_op): Check for .ascii. - (libffi_cv_as_string_pseudo_op): Check for .string. - * configure: Regenerate. - * fficonfig.h.in: Regenerate. - * src/x86/sysv.S (.eh_frame): Use .ascii, .string or error. - -2010-05-11 Dan Witte - - * doc/libffi.tex: Document previous change. - -2010-05-11 Makoto Kato - - * src/x86/ffi.c (ffi_call): Don't copy structs passed by value. - -2010-05-05 Michael Kohler - - * src/dlmalloc.c (dlfree): Fix spelling. - * src/ia64/ffi.c (ffi_prep_cif_machdep): Ditto. - * configure.ac: Ditto. - * configure: Rebuilt. - -2010-04-13 Dan Witte - - * msvcc.sh: Build with -W3 instead of -Wall. - * src/powerpc/ffi_darwin.c: Remove build warnings. - * src/x86/ffi.c: Ditto. - * src/x86/ffitarget.h: Ditto. - -2010-04-12 Dan Witte - Walter Meinl - - * configure.ac: Add OS/2 support. - * configure: Rebuilt. - * src/closures.c: Ditto. - * src/dlmalloc.c: Ditto. - * src/x86/win32.S: Ditto. - -2010-04-07 Jakub Jelinek - - * testsuite/libffi.call/err_bad_abi.c: Remove unused args variable. - -2010-04-02 Ralf Wildenhues - - * Makefile.in: Regenerate. - * aclocal.m4: Regenerate. - * include/Makefile.in: Regenerate. - * man/Makefile.in: Regenerate. - * testsuite/Makefile.in: Regenerate. - -2010-03-30 Dan Witte - - * msvcc.sh: Disable build warnings. - * README (tested): Clarify windows build procedure. - -2010-03-15 Rainer Orth - - * configure.ac (libffi_cv_as_x86_64_unwind_section_type): New test. - * configure: Regenerate. - * fficonfig.h.in: Regenerate. - * libffi/src/x86/unix64.S (.eh_frame) - [HAVE_AS_X86_64_UNWIND_SECTION_TYPE]: Use @unwind section type. - -2010-03-14 Matthias Klose - - * src/x86/ffi64.c: Fix typo in comment. - * src/x86/ffi.c: Use /* ... */ comment style. - -2010-02-24 Rainer Orth - - * doc/libffi.texi (The Closure API): Fix typo. - * doc/libffi.info: Remove. - -2010-02-15 Matthias Klose - - * src/arm/sysv.S (__ARM_ARCH__): Define for processor - __ARM_ARCH_7EM__. - -2010-01-15 Anthony Green - - * README: Add notes on building with Microsoft Visual C++. - -2010-01-15 Daniel Witte - - * msvcc.sh: New file. - - * src/x86/win32.S: Port assembly routines to MSVC and #ifdef. - * src/x86/ffi.c: Tweak function declaration and remove excess - parens. - * include/ffi.h.in: Add __declspec(align(8)) to typedef struct - ffi_closure. - - * src/x86/ffi.c: Merge ffi_call_SYSV and ffi_call_STDCALL into new - function ffi_call_win32 on X86_WIN32. - * src/x86/win32.S (ffi_call_SYSV): Rename to ffi_call_win32. - (ffi_call_STDCALL): Remove. - - * src/prep_cif.c (ffi_prep_cif): Move stack space allocation code - to ffi_prep_cif_machdep for x86. - * src/x86/ffi.c (ffi_prep_cif_machdep): To here. - -2010-01-15 Oliver Kiddle - - * src/x86/ffitarget.h (ffi_abi): Check for __i386 and __amd64 for - Sun Studio compiler compatibility. - -2010-01-12 Conrad Irwin - - * doc/libffi.texi: Add closure example. - -2010-01-07 Rainer Orth - - PR libffi/40701 - * testsuite/libffi.call/ffitest.h [__alpha__ && __osf__] (PRIdLL, - PRIuLL, PRId64, PRIu64, PRIuPTR): Define. - * testsuite/libffi.call/cls_align_sint64.c: Add -Wno-format on - alpha*-dec-osf*. - * testsuite/libffi.call/cls_align_uint64.c: Likewise. - * testsuite/libffi.call/cls_ulonglong.c: Likewise. - * testsuite/libffi.call/return_ll1.c: Likewise. - * testsuite/libffi.call/stret_medium2.c: Likewise. - * testsuite/libffi.special/ffitestcxx.h (allocate_mmap): Cast - MAP_FAILED to char *. - -2010-01-06 Rainer Orth - - * src/mips/n32.S: Use .abicalls and .eh_frame with __GNUC__. - -2009-12-31 Anthony Green - - * README: Update for libffi 3.0.9. - -2009-12-27 Matthias Klose - - * configure.ac (HAVE_LONG_DOUBLE): Define for mips when - appropriate. - * configure: Rebuilt. - -2009-12-26 Anthony Green - - * testsuite/libffi.call/cls_longdouble_va.c: Mark as xfail for - avr32*-*-*. - * testsuite/libffi.call/cls_double_va.c: Ditto. - -2009-12-26 Andreas Tobler - - * testsuite/libffi.call/ffitest.h: Conditionally include stdint.h - and inttypes.h. - * testsuite/libffi.special/unwindtest.cc: Ditto. - -2009-12-26 Andreas Tobler - - * configure.ac: Add amd64-*-openbsd*. - * configure: Rebuilt. - * testsuite/lib/libffi-dg.exp (libffi_target_compile): Link - openbsd programs with -lpthread. - -2009-12-26 Anthony Green - - * testsuite/libffi.call/cls_double_va.c, - testsuite/libffi.call/cls_longdouble.c, - testsuite/libffi.call/cls_longdouble_va.c, - testsuite/libffi.call/cls_pointer.c, - testsuite/libffi.call/cls_pointer_stack.c: Remove xfail for - mips*-*-* and arm*-*-*. - * testsuite/libffi.call/cls_align_longdouble_split.c, - testsuite/libffi.call/cls_align_longdouble_split2.c, - testsuite/libffi.call/stret_medium2.c, - testsuite/libffi.call/stret_medium.c, - testsuite/libffi.call/stret_large.c, - testsuite/libffi.call/stret_large2.c: Remove xfail for arm*-*-*. - -2009-12-31 Kay Tietz - - * testsuite/libffi.call/ffitest.h, - testsuite/libffi.special/ffitestcxx.h (PRIdLL, PRuLL): Fix - definitions. - -2009-12-31 Carlo Bramini - - * configure.ac (AM_LTLDFLAGS): Define for windows hosts. - * Makefile.am (libffi_la_LDFLAGS): Add AM_LTLDFLAGS. - * configure: Rebuilt. - * Makefile.in: Rebuilt. - -2009-12-31 Anthony Green - Blake Chaffin. - - * testsuite/libffi.call/huge_struct.c: New test case from Blake - Chaffin @ Apple. - -2009-12-28 David Edelsohn - - * src/powerpc/ffi_darwin.c (ffi_prep_args): Copy abi and nargs to - local variables. - (aix_adjust_aggregate_sizes): New function. - (ffi_prep_cif_machdep): Call it. - -2009-12-26 Andreas Tobler - - * configure.ac: Define FFI_MMAP_EXEC_WRIT for the given targets. - * configure: Regenerate. - * fficonfig.h.in: Likewise. - * src/closures.c: Remove the FFI_MMAP_EXEC_WRIT definition for - Solaris/x86. - -2009-12-26 Andreas Schwab - - * src/powerpc/ffi.c (ffi_prep_args_SYSV): Advance intarg_count - when a float arguments is passed in memory. - (ffi_closure_helper_SYSV): Mark general registers as used up when - a 64bit or soft-float long double argument is passed in memory. - -2009-12-25 Matthias Klose - - * man/ffi_call.3: Fix #include in examples. - * doc/libffi.texi: Add dircategory. - -2009-12-25 Frank Everdij - - * include/ffi.h.in: Placed '__GNUC__' ifdef around - '__attribute__((aligned(8)))' in ffi_closure, fixes compile for - IRIX MIPSPro c99. - * include/ffi_common.h: Added '__sgi' define to non - '__attribute__((__mode__()))' integer typedefs. - * src/mips/ffi.c (ffi_call, ffi_closure_mips_inner_O32, - ffi_closure_mips_inner_N32): Added 'defined(_MIPSEB)' to BE check. - (ffi_closure_mips_inner_O32, ffi_closure_mips_inner_N32): Added - FFI_LONGDOUBLE support and alignment(N32 only). - * src/mips/ffitarget.h: Corrected '#include ' for IRIX and - fixed non '__attribute__((__mode__()))' integer typedefs. - * src/mips/n32.S: Put '#ifdef linux' around '.abicalls' and '.eh_frame' - since they are Linux/GNU Assembler specific. - -2009-12-25 Bradley Smith - - * configure.ac, Makefile.am, src/avr32/ffi.c, - src/avr32/ffitarget.h, - src/avr32/sysv.S: Add AVR32 port. - * configure, Makefile.in: Rebuilt. - -2009-12-21 Andreas Tobler - - * configure.ac: Make i?86 build on FreeBSD and OpenBSD. - * configure: Regenerate. - -2009-12-15 John David Anglin - - * testsuite/libffi.call/ffitest.h: Define PRIuPTR on PA HP-UX. - -2009-12-13 John David Anglin - - * src/pa/ffi.c (ffi_closure_inner_pa32): Handle FFI_TYPE_LONGDOUBLE - type on HP-UX. - -2009-12-11 Eric Botcazou - - * src/sparc/ffi.c (ffi_closure_sparc_inner_v9): Properly align 'long - double' arguments. - -2009-12-11 Eric Botcazou - - * testsuite/libffi.call/ffitest.h: Define PRIuPTR on Solaris < 10. - -2009-12-10 Rainer Orth - - PR libffi/40700 - * src/closures.c [X86_64 && __sun__ && __svr4__] - (FFI_MMAP_EXEC_WRIT): Define. - -2009-12-08 David Daney - - * testsuite/libffi.call/stret_medium.c: Remove xfail for mips*-*-* - * testsuite/libffi.call/cls_align_longdouble_split2.c: Same. - * testsuite/libffi.call/stret_large.c: Same. - * testsuite/libffi.call/cls_align_longdouble_split.c: Same. - * testsuite/libffi.call/stret_large2.c: Same. - * testsuite/libffi.call/stret_medium2.c: Same. - -2009-12-07 David Edelsohn - - * src/powerpc/aix_closure.S (libffi_closure_ASM): Fix tablejump - typo. - -2009-12-05 David Edelsohn - - * src/powerpc/aix.S: Update AIX32 code to be consistent with AIX64 - code. - * src/powerpc/aix_closure.S: Same. - -2009-12-05 Ralf Wildenhues - - * Makefile.in: Regenerate. - * configure: Regenerate. - * include/Makefile.in: Regenerate. - * man/Makefile.in: Regenerate. - * testsuite/Makefile.in: Regenerate. - -2009-12-04 David Edelsohn - - * src/powerpc/aix_closure.S: Reorganize 64-bit code to match - linux64_closure.S. - -2009-12-04 Uros Bizjak - - PR libffi/41908 - * src/x86/ffi64.c (classify_argument): Update from - gcc/config/i386/i386.c. - (ffi_closure_unix64_inner): Do not use the address of two consecutive - SSE registers directly. - * testsuite/libffi.call/cls_dbls_struct.c (main): Remove xfail - for x86_64 linux targets. - -2009-12-04 David Edelsohn - - * src/powerpc/ffi_darwin.c (ffi_closure_helper_DARWIN): Increment - pfr for long double split between fpr13 and stack. - -2009-12-03 David Edelsohn - - * src/powerpc/ffi_darwin.c (ffi_prep_args): Increment next_arg and - fparg_count twice for long double. - -2009-12-03 David Edelsohn - - PR libffi/42243 - * src/powerpc/ffi_darwin.c (ffi_prep_args): Remove extra parentheses. - -2009-12-03 Uros Bizjak - - * testsuite/libffi.call/cls_longdouble_va.c (main): Fix format string. - Remove xfails for x86 linux targets. - -2009-12-02 David Edelsohn - - * src/powerpc/ffi_darwin.c (ffi_prep_args): Fix typo in INT64 - case. - -2009-12-01 David Edelsohn - - * src/powerpc/aix.S (ffi_call_AIX): Convert to more standard - register usage. Call ffi_prep_args directly. Add long double - return value support. - * src/powerpc/ffi_darwin.c (ffi_prep_args): Double arg increment - applies to FFI_TYPE_DOUBLE. Correct fpr_base increment typo. - Separate FFI_TYPE_SINT32 and FFI_TYPE_UINT32 cases. - (ffi_prep_cif_machdep): Only 16 byte stack alignment in 64 bit - mode. - (ffi_closure_helper_DARWIN): Remove nf and ng counters. Move temp - into case. - * src/powerpc/aix_closure.S: Maintain 16 byte stack alignment. - Allocate result area between params and FPRs. - -2009-11-30 David Edelsohn - - PR target/35484 - * src/powerpc/ffitarget.h (POWERPC64): Define for PPC64 Linux and - AIX64. - * src/powerpc/aix.S: Implement AIX64 version. - * src/powerpc/aix_closure.S: Implement AIX64 version. - (ffi_closure_ASM): Use extsb, lha and displament addresses. - * src/powerpc/ffi_darwin.c (ffi_prep_args): Implement AIX64 - support. - (ffi_prep_cif_machdep): Same. - (ffi_call): Same. - (ffi_closure_helper_DARWIN): Same. - -2009-11-02 Andreas Tobler - - PR libffi/41908 - * testsuite/libffi.call/testclosure.c: New test. - -2009-09-28 Kai Tietz - - * src/x86/win64.S (_ffi_call_win64 stack): Remove for gnu - assembly version use of ___chkstk. - -2009-09-23 Matthias Klose - - PR libffi/40242, PR libffi/41443 - * src/arm/sysv.S (__ARM_ARCH__): Define for processors - __ARM_ARCH_6T2__, __ARM_ARCH_6M__, __ARM_ARCH_7__, - __ARM_ARCH_7A__, __ARM_ARCH_7R__, __ARM_ARCH_7M__. - Change the conditionals to __SOFTFP__ || __ARM_EABI__ - for -mfloat-abi=softfp to work. - -2009-09-17 Loren J. Rittle - - PR testsuite/32843 (strikes again) - * src/x86/ffi.c (ffi_prep_cif_machdep): Add X86_FREEBSD to - enable proper extension on char and short. - -2009-09-15 David Daney - - * src/java_raw_api.c (ffi_java_raw_to_rvalue): Remove special - handling for FFI_TYPE_POINTER. - * src/mips/ffitarget.h (FFI_TYPE_STRUCT_D_SOFT, - FFI_TYPE_STRUCT_F_SOFT, FFI_TYPE_STRUCT_DD_SOFT, - FFI_TYPE_STRUCT_FF_SOFT, FFI_TYPE_STRUCT_FD_SOFT, - FFI_TYPE_STRUCT_DF_SOFT, FFI_TYPE_STRUCT_SOFT): New defines. - (FFI_N32_SOFT_FLOAT, FFI_N64_SOFT_FLOAT): New ffi_abi enumerations. - (enum ffi_abi): Set FFI_DEFAULT_ABI for soft-float. - * src/mips/n32.S (ffi_call_N32): Add handling for soft-float - structure and pointer returns. - (ffi_closure_N32): Add handling for pointer returns. - * src/mips/ffi.c (ffi_prep_args, calc_n32_struct_flags, - calc_n32_return_struct_flags): Handle soft-float. - (ffi_prep_cif_machdep): Handle soft-float, fix pointer handling. - (ffi_call_N32): Declare proper argument types. - (ffi_call, copy_struct_N32, ffi_closure_mips_inner_N32): Handle - soft-float. - -2009-08-24 Ralf Wildenhues - - * configure.ac (AC_PREREQ): Bump to 2.64. - -2009-08-22 Ralf Wildenhues - - * Makefile.am (install-html, install-pdf): Remove. - * Makefile.in: Regenerate. - - * Makefile.in: Regenerate. - * aclocal.m4: Regenerate. - * configure: Regenerate. - * fficonfig.h.in: Regenerate. - * include/Makefile.in: Regenerate. - * man/Makefile.in: Regenerate. - * testsuite/Makefile.in: Regenerate. - -2009-07-30 Ralf Wildenhues - - * configure.ac (_AC_ARG_VAR_PRECIOUS): Use m4_rename_force. - -2009-07-24 Dave Korn - - PR libffi/40807 - * src/x86/ffi.c (ffi_prep_cif_machdep): Also use sign/zero-extending - return types for X86_WIN32. - * src/x86/win32.S (_ffi_call_SYSV): Handle omitted return types. - (_ffi_call_STDCALL, _ffi_closure_SYSV, _ffi_closure_raw_SYSV, - _ffi_closure_STDCALL): Likewise. - - * src/closures.c (is_selinux_enabled): Define to const 0 for Cygwin. - (dlmmap, dlmunmap): Also use these functions on Cygwin. - -2009-07-11 Richard Sandiford - - PR testsuite/40699 - PR testsuite/40707 - PR testsuite/40709 - * testsuite/lib/libffi-dg.exp: Revert 2009-07-02, 2009-07-01 and - 2009-06-30 commits. - -2009-07-01 Richard Sandiford - - * testsuite/lib/libffi-dg.exp (libffi-init): Set ld_library_path - to "" before adding paths. (This reinstates an assignment that - was removed by my 2009-06-30 commit, but changes the initial - value from "." to "".) - -2009-07-01 H.J. Lu - - PR testsuite/40601 - * testsuite/lib/libffi-dg.exp (libffi-init): Properly set - gccdir. Adjust ld_library_path for gcc only if gccdir isn't - empty. - -2009-06-30 Richard Sandiford - - * testsuite/lib/libffi-dg.exp (libffi-init): Don't add "." - to ld_library_path. Use add_path. Add just find_libgcc_s - to ld_library_path, not every libgcc multilib directory. - -2009-06-16 Wim Lewis - - * src/powerpc/ffi.c: Avoid clobbering cr3 and cr4, which are - supposed to be callee-saved. - * src/powerpc/sysv.S (small_struct_return_value): Fix overrun of - return buffer for odd-size structs. - -2009-06-16 Andreas Tobler - - PR libffi/40444 - * testsuite/lib/libffi-dg.exp (libffi_target_compile): Add - allow_stack_execute for Darwin. - -2009-06-16 Andrew Haley - - * configure.ac (TARGETDIR): Add missing blank lines. - * configure: Regenerate. - -2009-06-16 Andrew Haley - - * testsuite/libffi.call/cls_align_sint64.c, - testsuite/libffi.call/cls_align_uint64.c, - testsuite/libffi.call/cls_longdouble_va.c, - testsuite/libffi.call/cls_ulonglong.c, - testsuite/libffi.call/return_ll1.c, - testsuite/libffi.call/stret_medium2.c: Fix printf format - specifiers. - * testsuite/libffi.call/ffitest.h, - testsuite/libffi.special/ffitestcxx.h (PRIdLL, PRIuLL): Define. - -2009-06-15 Andrew Haley - - * testsuite/libffi.call/err_bad_typedef.c: xfail everywhere. - * testsuite/libffi.call/err_bad_abi.c: Likewise. - -2009-06-12 Andrew Haley - - * Makefile.am: Remove info_TEXINFOS. - -2009-06-12 Andrew Haley - - * ChangeLog.libffi: testsuite/libffi.call/cls_align_sint64.c, - testsuite/libffi.call/cls_align_uint64.c, - testsuite/libffi.call/cls_ulonglong.c, - testsuite/libffi.call/return_ll1.c, - testsuite/libffi.call/stret_medium2.c: Fix printf format - specifiers. - testsuite/libffi.special/unwindtest.cc: include stdint.h. - -2009-06-11 Timothy Wall - - * Makefile.am, - configure.ac, - include/ffi.h.in, - include/ffi_common.h, - src/closures.c, - src/dlmalloc.c, - src/x86/ffi.c, - src/x86/ffitarget.h, - src/x86/win64.S (new), - README: Added win64 support (mingw or MSVC) - * Makefile.in, - include/Makefile.in, - man/Makefile.in, - testsuite/Makefile.in, - configure, - aclocal.m4: Regenerated - * ltcf-c.sh: properly escape cygwin/w32 path - * man/ffi_call.3: Clarify size requirements for return value. - * src/x86/ffi64.c: Fix filename in comment. - * src/x86/win32.S: Remove unused extern. - - * testsuite/libffi.call/closure_fn0.c, - testsuite/libffi.call/closure_fn1.c, - testsuite/libffi.call/closure_fn2.c, - testsuite/libffi.call/closure_fn3.c, - testsuite/libffi.call/closure_fn4.c, - testsuite/libffi.call/closure_fn5.c, - testsuite/libffi.call/closure_fn6.c, - testsuite/libffi.call/closure_stdcall.c, - testsuite/libffi.call/cls_12byte.c, - testsuite/libffi.call/cls_16byte.c, - testsuite/libffi.call/cls_18byte.c, - testsuite/libffi.call/cls_19byte.c, - testsuite/libffi.call/cls_1_1byte.c, - testsuite/libffi.call/cls_20byte.c, - testsuite/libffi.call/cls_20byte1.c, - testsuite/libffi.call/cls_24byte.c, - testsuite/libffi.call/cls_2byte.c, - testsuite/libffi.call/cls_3_1byte.c, - testsuite/libffi.call/cls_3byte1.c, - testsuite/libffi.call/cls_3byte2.c, - testsuite/libffi.call/cls_4_1byte.c, - testsuite/libffi.call/cls_4byte.c, - testsuite/libffi.call/cls_5_1_byte.c, - testsuite/libffi.call/cls_5byte.c, - testsuite/libffi.call/cls_64byte.c, - testsuite/libffi.call/cls_6_1_byte.c, - testsuite/libffi.call/cls_6byte.c, - testsuite/libffi.call/cls_7_1_byte.c, - testsuite/libffi.call/cls_7byte.c, - testsuite/libffi.call/cls_8byte.c, - testsuite/libffi.call/cls_9byte1.c, - testsuite/libffi.call/cls_9byte2.c, - testsuite/libffi.call/cls_align_double.c, - testsuite/libffi.call/cls_align_float.c, - testsuite/libffi.call/cls_align_longdouble.c, - testsuite/libffi.call/cls_align_longdouble_split.c, - testsuite/libffi.call/cls_align_longdouble_split2.c, - testsuite/libffi.call/cls_align_pointer.c, - testsuite/libffi.call/cls_align_sint16.c, - testsuite/libffi.call/cls_align_sint32.c, - testsuite/libffi.call/cls_align_sint64.c, - testsuite/libffi.call/cls_align_uint16.c, - testsuite/libffi.call/cls_align_uint32.c, - testsuite/libffi.call/cls_align_uint64.c, - testsuite/libffi.call/cls_dbls_struct.c, - testsuite/libffi.call/cls_double.c, - testsuite/libffi.call/cls_double_va.c, - testsuite/libffi.call/cls_float.c, - testsuite/libffi.call/cls_longdouble.c, - testsuite/libffi.call/cls_longdouble_va.c, - testsuite/libffi.call/cls_multi_schar.c, - testsuite/libffi.call/cls_multi_sshort.c, - testsuite/libffi.call/cls_multi_sshortchar.c, - testsuite/libffi.call/cls_multi_uchar.c, - testsuite/libffi.call/cls_multi_ushort.c, - testsuite/libffi.call/cls_multi_ushortchar.c, - testsuite/libffi.call/cls_pointer.c, - testsuite/libffi.call/cls_pointer_stack.c, - testsuite/libffi.call/cls_schar.c, - testsuite/libffi.call/cls_sint.c, - testsuite/libffi.call/cls_sshort.c, - testsuite/libffi.call/cls_uchar.c, - testsuite/libffi.call/cls_uint.c, - testsuite/libffi.call/cls_ulonglong.c, - testsuite/libffi.call/cls_ushort.c, - testsuite/libffi.call/err_bad_abi.c, - testsuite/libffi.call/err_bad_typedef.c, - testsuite/libffi.call/float2.c, - testsuite/libffi.call/huge_struct.c, - testsuite/libffi.call/nested_struct.c, - testsuite/libffi.call/nested_struct1.c, - testsuite/libffi.call/nested_struct10.c, - testsuite/libffi.call/nested_struct2.c, - testsuite/libffi.call/nested_struct3.c, - testsuite/libffi.call/nested_struct4.c, - testsuite/libffi.call/nested_struct5.c, - testsuite/libffi.call/nested_struct6.c, - testsuite/libffi.call/nested_struct7.c, - testsuite/libffi.call/nested_struct8.c, - testsuite/libffi.call/nested_struct9.c, - testsuite/libffi.call/problem1.c, - testsuite/libffi.call/return_ldl.c, - testsuite/libffi.call/return_ll1.c, - testsuite/libffi.call/stret_large.c, - testsuite/libffi.call/stret_large2.c, - testsuite/libffi.call/stret_medium.c, - testsuite/libffi.call/stret_medium2.c, - testsuite/libffi.special/unwindtest.cc: use ffi_closure_alloc instead - of checking for MMAP. Use intptr_t instead of long casts. - -2009-06-11 Kaz Kojima - - * testsuite/libffi.call/cls_longdouble_va.c: Add xfail sh*-*-linux-*. - * testsuite/libffi.call/err_bad_abi.c: Add xfail sh*-*-*. - * testsuite/libffi.call/err_bad_typedef.c: Likewise. - -2009-06-09 Andrew Haley - - * src/x86/freebsd.S: Add missing file. - -2009-06-08 Andrew Haley - - Import from libffi 3.0.8: - - * doc/libffi.texi: New file. - * doc/libffi.info: Likewise. - * doc/stamp-vti: Likewise. - * man/Makefile.am: New file. - * man/ffi_call.3: New file. - - * Makefile.am (EXTRA_DIST): Add src/x86/darwin64.S, - src/dlmalloc.c. - (nodist_libffi_la_SOURCES): Add X86_FREEBSD. - - * configure.ac: Bump version to 3.0.8. - parisc*-*-linux*: Add. - i386-*-freebsd* | i386-*-openbsd*: Add. - powerpc-*-beos*: Add. - AM_CONDITIONAL X86_FREEBSD: Add. - AC_CONFIG_FILES: Add man/Makefile. - - * include/ffi.h.in (FFI_FN): Change void (*)() to void (*)(void). - -2009-06-08 Andrew Haley - - * README: Import from libffi 3.0.8. - -2009-06-08 Andrew Haley - - * testsuite/libffi.call/err_bad_abi.c: Add xfails. - * testsuite/libffi.call/cls_longdouble_va.c: Add xfails. - * testsuite/libffi.call/cls_dbls_struct.c: Add xfail x86_64-*-linux-*. - * testsuite/libffi.call/err_bad_typedef.c: Add xfails. - - * testsuite/libffi.call/stret_medium2.c: Add __UNUSED__ to args. - * testsuite/libffi.call/stret_medium.c: Likewise. - * testsuite/libffi.call/stret_large2.c: Likewise. - * testsuite/libffi.call/stret_large.c: Likewise. - -2008-12-26 Timothy Wall - - * testsuite/libffi.call/cls_longdouble.c, - testsuite/libffi.call/cls_longdouble_va.c, - testsuite/libffi.call/cls_align_longdouble.c, - testsuite/libffi.call/cls_align_longdouble_split.c, - testsuite/libffi.call/cls_align_longdouble_split2.c: mark expected - failures on x86_64 cygwin/mingw. - -2008-12-22 Timothy Wall - - * testsuite/libffi.call/closure_fn0.c, - testsuite/libffi.call/closure_fn1.c, - testsuite/libffi.call/closure_fn2.c, - testsuite/libffi.call/closure_fn3.c, - testsuite/libffi.call/closure_fn4.c, - testsuite/libffi.call/closure_fn5.c, - testsuite/libffi.call/closure_fn6.c, - testsuite/libffi.call/closure_loc_fn0.c, - testsuite/libffi.call/closure_stdcall.c, - testsuite/libffi.call/cls_align_pointer.c, - testsuite/libffi.call/cls_pointer.c, - testsuite/libffi.call/cls_pointer_stack.c: use portable cast from - pointer to integer (intptr_t). - * testsuite/libffi.call/cls_longdouble.c: disable for win64. - -2008-07-24 Anthony Green - - * testsuite/libffi.call/cls_dbls_struct.c, - testsuite/libffi.call/cls_double_va.c, - testsuite/libffi.call/cls_longdouble.c, - testsuite/libffi.call/cls_longdouble_va.c, - testsuite/libffi.call/cls_pointer.c, - testsuite/libffi.call/cls_pointer_stack.c, - testsuite/libffi.call/err_bad_abi.c: Clean up failures from - compiler warnings. - -2008-03-04 Anthony Green - Blake Chaffin - hos@tamanegi.org - - * testsuite/libffi.call/cls_align_longdouble_split2.c - testsuite/libffi.call/cls_align_longdouble_split.c - testsuite/libffi.call/cls_dbls_struct.c - testsuite/libffi.call/cls_double_va.c - testsuite/libffi.call/cls_longdouble.c - testsuite/libffi.call/cls_longdouble_va.c - testsuite/libffi.call/cls_pointer.c - testsuite/libffi.call/cls_pointer_stack.c - testsuite/libffi.call/err_bad_abi.c - testsuite/libffi.call/err_bad_typedef.c - testsuite/libffi.call/stret_large2.c - testsuite/libffi.call/stret_large.c - testsuite/libffi.call/stret_medium2.c - testsuite/libffi.call/stret_medium.c: New tests from Apple. - -2009-06-05 Andrew Haley - - * src/x86/ffitarget.h, src/x86/ffi.c: Merge stdcall changes from - libffi. - -2009-06-04 Andrew Haley - - * src/x86/ffitarget.h, src/x86/win32.S, src/x86/ffi.c: Back out - stdcall changes. - -2008-02-26 Anthony Green - Thomas Heller - - * src/x86/ffi.c (ffi_closure_SYSV_inner): Change C++ comment to C - comment. - -2008-02-03 Timothy Wall - - * src/x86/ffi.c (FFI_INIT_TRAMPOLINE_STDCALL): Calculate jump return - offset based on code pointer, not data pointer. - -2008-01-31 Timothy Wall - - * testsuite/libffi.call/closure_stdcall.c: Add test for stdcall - closures. - * src/x86/ffitarget.h: Increase size of trampoline for stdcall - closures. - * src/x86/win32.S: Add assembly for stdcall closure. - * src/x86/ffi.c: Initialize stdcall closure trampoline. - -2009-06-04 Andrew Haley - - * include/ffi.h.in: Change void (*)() to void (*)(void). - * src/x86/ffi.c: Likewise. - -2009-06-04 Andrew Haley - - * src/powerpc/ppc_closure.S: Insert licence header. - * src/powerpc/linux64_closure.S: Likewise. - * src/m68k/sysv.S: Likewise. - - * src/sh64/ffi.c: Change void (*)() to void (*)(void). - * src/powerpc/ffi.c: Likewise. - * src/powerpc/ffi_darwin.c: Likewise. - * src/m32r/ffi.c: Likewise. - * src/sh64/ffi.c: Likewise. - * src/x86/ffi64.c: Likewise. - * src/alpha/ffi.c: Likewise. - * src/alpha/osf.S: Likewise. - * src/frv/ffi.c: Likewise. - * src/s390/ffi.c: Likewise. - * src/pa/ffi.c: Likewise. - * src/pa/hpux32.S: Likewise. - * src/ia64/unix.S: Likewise. - * src/ia64/ffi.c: Likewise. - * src/sparc/ffi.c: Likewise. - * src/mips/ffi.c: Likewise. - * src/sh/ffi.c: Likewise. - -2008-02-15 David Daney - - * src/mips/ffi.c (USE__BUILTIN___CLEAR_CACHE): - Define (conditionally), and use it to include cachectl.h. - (ffi_prep_closure_loc): Fix cache flushing. - * src/mips/ffitarget.h (_ABIN32, _ABI64, _ABIO32): Define. - -2009-06-04 Andrew Haley - - include/ffi.h.in, - src/arm/ffitarget.h, - src/arm/ffi.c, - src/arm/sysv.S, - src/powerpc/ffitarget.h, - src/closures.c, - src/sh64/ffitarget.h, - src/sh64/ffi.c, - src/sh64/sysv.S, - src/types.c, - src/x86/ffi64.c, - src/x86/ffitarget.h, - src/x86/win32.S, - src/x86/darwin.S, - src/x86/ffi.c, - src/x86/sysv.S, - src/x86/unix64.S, - src/alpha/ffitarget.h, - src/alpha/ffi.c, - src/alpha/osf.S, - src/m68k/ffitarget.h, - src/frv/ffitarget.h, - src/frv/ffi.c, - src/s390/ffitarget.h, - src/s390/sysv.S, - src/cris/ffitarget.h, - src/pa/linux.S, - src/pa/ffitarget.h, - src/pa/ffi.c, - src/raw_api.c, - src/ia64/ffitarget.h, - src/ia64/unix.S, - src/ia64/ffi.c, - src/ia64/ia64_flags.h, - src/java_raw_api.c, - src/debug.c, - src/sparc/v9.S, - src/sparc/ffitarget.h, - src/sparc/ffi.c, - src/sparc/v8.S, - src/mips/ffitarget.h, - src/mips/n32.S, - src/mips/o32.S, - src/mips/ffi.c, - src/prep_cif.c, - src/sh/ffitarget.h, - src/sh/ffi.c, - src/sh/sysv.S: Update license text. - -2009-05-22 Dave Korn - - * src/x86/win32.S (_ffi_closure_STDCALL): New function. - (.eh_frame): Add FDE for it. - -2009-05-22 Dave Korn - - * configure.ac: Also check if assembler supports pc-relative - relocs on X86_WIN32 targets. - * configure: Regenerate. - * src/x86/win32.S (ffi_prep_args): Declare extern, not global. - (_ffi_call_SYSV): Add missing function type symbol .def and - add EH markup labels. - (_ffi_call_STDCALL): Likewise. - (_ffi_closure_SYSV): Likewise. - (_ffi_closure_raw_SYSV): Likewise. - (.eh_frame): Add hand-crafted EH data. - -2009-04-09 Jakub Jelinek - - * testsuite/lib/libffi-dg.exp: Change copyright header to refer to - version 3 of the GNU General Public License and to point readers - at the COPYING3 file and the FSF's license web page. - * testsuite/libffi.call/call.exp: Likewise. - * testsuite/libffi.special/special.exp: Likewise. - -2009-03-01 Ralf Wildenhues - - * configure: Regenerate. - -2008-12-18 Rainer Orth - - PR libffi/26048 - * configure.ac (HAVE_AS_X86_PCREL): New test. - * configure: Regenerate. - * fficonfig.h.in: Regenerate. - * src/x86/sysv.S [!FFI_NO_RAW_API]: Precalculate - RAW_CLOSURE_CIF_OFFSET, RAW_CLOSURE_FUN_OFFSET, - RAW_CLOSURE_USER_DATA_OFFSET for the Solaris 10/x86 assembler. - (.eh_frame): Only use SYMBOL-. iff HAVE_AS_X86_PCREL. - * src/x86/unix64.S (.Lstore_table): Move to .text section. - (.Lload_table): Likewise. - (.eh_frame): Only use SYMBOL-. iff HAVE_AS_X86_PCREL. - -2008-12-18 Ralf Wildenhues - - * configure: Regenerate. - -2008-11-21 Eric Botcazou - - * src/sparc/ffi.c (ffi_prep_cif_machdep): Add support for - signed/unsigned int8/16 return values. - * src/sparc/v8.S (ffi_call_v8): Likewise. - (ffi_closure_v8): Likewise. - -2008-09-26 Peter O'Gorman - Steve Ellcey - - * configure: Regenerate for new libtool. - * Makefile.in: Ditto. - * include/Makefile.in: Ditto. - * aclocal.m4: Ditto. - -2008-08-25 Andreas Tobler - - * src/powerpc/ffitarget.h (ffi_abi): Add FFI_LINUX and - FFI_LINUX_SOFT_FLOAT to the POWERPC_FREEBSD enum. - Add note about flag bits used for FFI_SYSV_TYPE_SMALL_STRUCT. - Adjust copyright notice. - * src/powerpc/ffi.c: Add two new flags to indicate if we have one - register or two register to use for FFI_SYSV structs. - (ffi_prep_cif_machdep): Pass the right register flag introduced above. - (ffi_closure_helper_SYSV): Fix the return type for - FFI_SYSV_TYPE_SMALL_STRUCT. Comment. - Adjust copyright notice. - -2008-07-16 Kaz Kojima - - * src/sh/ffi.c (ffi_prep_closure_loc): Turn INSN into an unsigned - int. - -2008-06-17 Ralf Wildenhues - - * configure: Regenerate. - * include/Makefile.in: Regenerate. - * testsuite/Makefile.in: Regenerate. - -2008-06-07 Joseph Myers - - * configure.ac (parisc*-*-linux*, powerpc-*-sysv*, - powerpc-*-beos*): Remove. - * configure: Regenerate. - -2008-05-09 Julian Brown - - * Makefile.am (LTLDFLAGS): New. - (libffi_la_LDFLAGS): Use above. - * Makefile.in: Regenerate. - -2008-04-18 Paolo Bonzini - - PR bootstrap/35457 - * aclocal.m4: Regenerate. - * configure: Regenerate. - -2008-03-26 Kaz Kojima - - * src/sh/sysv.S: Add .note.GNU-stack on Linux. - * src/sh64/sysv.S: Likewise. - -2008-03-26 Daniel Jacobowitz - - * src/arm/sysv.S: Fix ARM comment marker. - -2008-03-26 Jakub Jelinek - - * src/alpha/osf.S: Add .note.GNU-stack on Linux. - * src/s390/sysv.S: Likewise. - * src/powerpc/ppc_closure.S: Likewise. - * src/powerpc/sysv.S: Likewise. - * src/x86/unix64.S: Likewise. - * src/x86/sysv.S: Likewise. - * src/sparc/v8.S: Likewise. - * src/sparc/v9.S: Likewise. - * src/m68k/sysv.S: Likewise. - * src/arm/sysv.S: Likewise. - -2008-03-16 Ralf Wildenhues - - * aclocal.m4: Regenerate. - * configure: Likewise. - * Makefile.in: Likewise. - * include/Makefile.in: Likewise. - * testsuite/Makefile.in: Likewise. - -2008-02-12 Bjoern Koenig - Andreas Tobler - - * configure.ac: Add amd64-*-freebsd* target. - * configure: Regenerate. - -2008-01-30 H.J. Lu - - PR libffi/34612 - * src/x86/sysv.S (ffi_closure_SYSV): Pop 4 byte from stack when - returning struct. - - * testsuite/libffi.call/call.exp: Add "-O2 -fomit-frame-pointer" - tests. - -2008-01-24 David Edelsohn - - * configure: Regenerate. - -2008-01-06 Andreas Tobler - - * src/x86/ffi.c (ffi_prep_cif_machdep): Fix thinko. - -2008-01-05 Andreas Tobler - - PR testsuite/32843 - * src/x86/ffi.c (ffi_prep_cif_machdep): Add code for - signed/unsigned int8/16 for X86_DARWIN. - Updated copyright info. - Handle one and two byte structs with special cif->flags. - * src/x86/ffitarget.h: Add special types for one and two byte structs. - Updated copyright info. - * src/x86/darwin.S (ffi_call_SYSV): Rewrite to use a jump table like - sysv.S - Remove code to pop args from the stack after call. - Special-case signed/unsigned for int8/16, one and two byte structs. - (ffi_closure_raw_SYSV): Handle FFI_TYPE_UINT8, - FFI_TYPE_SINT8, FFI_TYPE_UINT16, FFI_TYPE_SINT16, FFI_TYPE_UINT32, - FFI_TYPE_SINT32. - Updated copyright info. - -2007-12-08 David Daney - - * src/mips/n32.S (ffi_call_N32): Replace dadd with ADDU, dsub with - SUBU, add with ADDU and use smaller code sequences. - -2007-12-07 David Daney - - * src/mips/ffi.c (ffi_prep_cif_machdep): Handle long double return - type. - -2007-12-06 David Daney - - * include/ffi.h.in (FFI_SIZEOF_JAVA_RAW): Define if not already - defined. - (ffi_java_raw): New typedef. - (ffi_java_raw_call, ffi_java_ptrarray_to_raw, - ffi_java_raw_to_ptrarray): Change parameter types from ffi_raw to - ffi_java_raw. - (ffi_java_raw_closure) : Same. - (ffi_prep_java_raw_closure, ffi_prep_java_raw_closure_loc): Change - parameter types. - * src/java_raw_api.c (ffi_java_raw_size): Replace FFI_SIZEOF_ARG with - FFI_SIZEOF_JAVA_RAW. - (ffi_java_raw_to_ptrarray): Change type of raw to ffi_java_raw. - Replace FFI_SIZEOF_ARG with FFI_SIZEOF_JAVA_RAW. Use - sizeof(ffi_java_raw) for alignment calculations. - (ffi_java_ptrarray_to_raw): Same. - (ffi_java_rvalue_to_raw): Add special handling for FFI_TYPE_POINTER - if FFI_SIZEOF_JAVA_RAW == 4. - (ffi_java_raw_to_rvalue): Same. - (ffi_java_raw_call): Change type of raw to ffi_java_raw. - (ffi_java_translate_args): Same. - (ffi_prep_java_raw_closure_loc, ffi_prep_java_raw_closure): Change - parameter types. - * src/mips/ffitarget.h (FFI_SIZEOF_JAVA_RAW): Define for N32 ABI. - -2007-12-06 David Daney - - * src/mips/n32.S (ffi_closure_N32): Use 64-bit add instruction on - pointer values. - -2007-12-01 Andreas Tobler - - PR libffi/31937 - * src/powerpc/ffitarget.h: Introduce new ABI FFI_LINUX_SOFT_FLOAT. - Add local FFI_TYPE_UINT128 to handle soft-float long-double-128. - * src/powerpc/ffi.c: Distinguish between __NO_FPRS__ and not and - set the NUM_FPR_ARG_REGISTERS according to. - Add support for potential soft-float support under hard-float - architecture. - (ffi_prep_args_SYSV): Set NUM_FPR_ARG_REGISTERS to 0 in case of - FFI_LINUX_SOFT_FLOAT, handle float, doubles and long-doubles according - to the FFI_LINUX_SOFT_FLOAT ABI. - (ffi_prep_cif_machdep): Likewise. - (ffi_closure_helper_SYSV): Likewise. - * src/powerpc/ppc_closure.S: Make sure not to store float/double - on archs where __NO_FPRS__ is true. - Add FFI_TYPE_UINT128 support. - * src/powerpc/sysv.S: Add support for soft-float long-double-128. - Adjust copyright notice. - -2007-11-25 Andreas Tobler - - * src/closures.c: Move defintion of MAYBE_UNUSED from here to ... - * include/ffi_common.h: ... here. - Update copyright. - -2007-11-17 Andreas Tobler - - * src/powerpc/sysv.S: Load correct cr to compare if we have long double. - * src/powerpc/linux64.S: Likewise. - * src/powerpc/ffi.c: Add a comment to show which part goes into cr6. - * testsuite/libffi.call/return_ldl.c: New test. - -2007-09-04 - - * src/arm/sysv.S (UNWIND): New. - (Whole file): Conditionally compile unwinder directives. - * src/arm/sysv.S: Add unwinder directives. - - * src/arm/ffi.c (ffi_prep_args): Align structs by at least 4 bytes. - Only treat r0 as a struct address if we're actually returning a - struct by address. - Only copy the bytes that are actually within a struct. - (ffi_prep_cif_machdep): A Composite Type not larger than 4 bytes - is returned in r0, not passed by address. - (ffi_call): Allocate a word-sized temporary for the case where - a composite is returned in r0. - (ffi_prep_incoming_args_SYSV): Align as necessary. - -2007-08-05 Steven Newbury - - * src/arm/ffi.c (FFI_INIT_TRAMPOLINE): Use __clear_cache instead of - directly using the sys_cacheflush syscall. - -2007-07-27 Andrew Haley - - * src/arm/sysv.S (ffi_closure_SYSV): Add soft-float. - -2007-09-03 Maciej W. Rozycki - - * Makefile.am: Unify MIPS_IRIX and MIPS_LINUX into MIPS. - * configure.ac: Likewise. - * Makefile.in: Regenerate. - * include/Makefile.in: Likewise. - * testsuite/Makefile.in: Likewise. - * configure: Likewise. - -2007-08-24 David Daney - - * testsuite/libffi.call/return_sl.c: New test. - -2007-08-10 David Daney - - * testsuite/libffi.call/cls_multi_ushort.c, - testsuite/libffi.call/cls_align_uint16.c, - testsuite/libffi.call/nested_struct1.c, - testsuite/libffi.call/nested_struct3.c, - testsuite/libffi.call/cls_7_1_byte.c, - testsuite/libffi.call/nested_struct5.c, - testsuite/libffi.call/cls_double.c, - testsuite/libffi.call/nested_struct7.c, - testsuite/libffi.call/cls_sint.c, - testsuite/libffi.call/nested_struct9.c, - testsuite/libffi.call/cls_20byte1.c, - testsuite/libffi.call/cls_multi_sshortchar.c, - testsuite/libffi.call/cls_align_sint64.c, - testsuite/libffi.call/cls_3byte2.c, - testsuite/libffi.call/cls_multi_schar.c, - testsuite/libffi.call/cls_multi_uchar.c, - testsuite/libffi.call/cls_19byte.c, - testsuite/libffi.call/cls_9byte1.c, - testsuite/libffi.call/cls_align_float.c, - testsuite/libffi.call/closure_fn1.c, - testsuite/libffi.call/problem1.c, - testsuite/libffi.call/closure_fn3.c, - testsuite/libffi.call/cls_sshort.c, - testsuite/libffi.call/closure_fn5.c, - testsuite/libffi.call/cls_align_double.c, - testsuite/libffi.call/nested_struct.c, - testsuite/libffi.call/cls_2byte.c, - testsuite/libffi.call/nested_struct10.c, - testsuite/libffi.call/cls_4byte.c, - testsuite/libffi.call/cls_6byte.c, - testsuite/libffi.call/cls_8byte.c, - testsuite/libffi.call/cls_multi_sshort.c, - testsuite/libffi.call/cls_align_sint16.c, - testsuite/libffi.call/cls_align_uint32.c, - testsuite/libffi.call/cls_20byte.c, - testsuite/libffi.call/cls_float.c, - testsuite/libffi.call/nested_struct2.c, - testsuite/libffi.call/cls_5_1_byte.c, - testsuite/libffi.call/nested_struct4.c, - testsuite/libffi.call/cls_24byte.c, - testsuite/libffi.call/nested_struct6.c, - testsuite/libffi.call/cls_64byte.c, - testsuite/libffi.call/nested_struct8.c, - testsuite/libffi.call/cls_uint.c, - testsuite/libffi.call/cls_multi_ushortchar.c, - testsuite/libffi.call/cls_schar.c, - testsuite/libffi.call/cls_uchar.c, - testsuite/libffi.call/cls_align_uint64.c, - testsuite/libffi.call/cls_ulonglong.c, - testsuite/libffi.call/cls_align_longdouble.c, - testsuite/libffi.call/cls_1_1byte.c, - testsuite/libffi.call/cls_12byte.c, - testsuite/libffi.call/cls_3_1byte.c, - testsuite/libffi.call/cls_3byte1.c, - testsuite/libffi.call/cls_4_1byte.c, - testsuite/libffi.call/cls_6_1_byte.c, - testsuite/libffi.call/cls_16byte.c, - testsuite/libffi.call/cls_18byte.c, - testsuite/libffi.call/closure_fn0.c, - testsuite/libffi.call/cls_9byte2.c, - testsuite/libffi.call/closure_fn2.c, - testsuite/libffi.call/closure_fn4.c, - testsuite/libffi.call/cls_ushort.c, - testsuite/libffi.call/closure_fn6.c, - testsuite/libffi.call/cls_5byte.c, - testsuite/libffi.call/cls_align_pointer.c, - testsuite/libffi.call/cls_7byte.c, - testsuite/libffi.call/cls_align_sint32.c, - testsuite/libffi.special/unwindtest_ffi_call.cc, - testsuite/libffi.special/unwindtest.cc: Remove xfail for mips64*-*-*. - -2007-08-10 David Daney - - PR libffi/28313 - * configure.ac: Don't treat mips64 as a special case. - * Makefile.am (nodist_libffi_la_SOURCES): Add n32.S. - * configure: Regenerate - * Makefile.in: Ditto. - * fficonfig.h.in: Ditto. - * src/mips/ffitarget.h (REG_L, REG_S, SUBU, ADDU, SRL, LI): Indent. - (LA, EH_FRAME_ALIGN, FDE_ADDR_BYTES): New preprocessor macros. - (FFI_DEFAULT_ABI): Set for n64 case. - (FFI_CLOSURES, FFI_TRAMPOLINE_SIZE): Define for n32 and n64 cases. - * src/mips/n32.S (ffi_call_N32): Add debug macros and labels for FDE. - (ffi_closure_N32): New function. - (.eh_frame): New section - * src/mips/o32.S: Clean up comments. - (ffi_closure_O32): Pass ffi_closure parameter in $12. - * src/mips/ffi.c: Use FFI_MIPS_N32 instead of - _MIPS_SIM == _ABIN32 throughout. - (FFI_MIPS_STOP_HERE): New, use in place of - ffi_stop_here. - (ffi_prep_args): Use unsigned long to hold pointer values. Rewrite - to support n32/n64 ABIs. - (calc_n32_struct_flags): Rewrite. - (calc_n32_return_struct_flags): Remove unused variable. Reverse - position of flag bits. - (ffi_prep_cif_machdep): Rewrite n32 portion. - (ffi_call): Enable for n64. Add special handling for small structure - return values. - (ffi_prep_closure_loc): Add n32 and n64 support. - (ffi_closure_mips_inner_O32): Add cast to silence warning. - (copy_struct_N32, ffi_closure_mips_inner_N32): New functions. - -2007-08-08 David Daney - - * testsuite/libffi.call/ffitest.h (ffi_type_mylong): Remove definition. - * testsuite/libffi.call/cls_align_uint16.c (main): Use correct type - specifiers. - * testsuite/libffi.call/nested_struct1.c (main): Ditto. - * testsuite/libffi.call/cls_sint.c (main): Ditto. - * testsuite/libffi.call/nested_struct9.c (main): Ditto. - * testsuite/libffi.call/cls_20byte1.c (main): Ditto. - * testsuite/libffi.call/cls_9byte1.c (main): Ditto. - * testsuite/libffi.call/closure_fn1.c (main): Ditto. - * testsuite/libffi.call/closure_fn3.c (main): Ditto. - * testsuite/libffi.call/return_dbl2.c (main): Ditto. - * testsuite/libffi.call/cls_sshort.c (main): Ditto. - * testsuite/libffi.call/return_fl3.c (main): Ditto. - * testsuite/libffi.call/closure_fn5.c (main): Ditto. - * testsuite/libffi.call/nested_struct.c (main): Ditto. - * testsuite/libffi.call/nested_struct10.c (main): Ditto. - * testsuite/libffi.call/return_ll1.c (main): Ditto. - * testsuite/libffi.call/cls_8byte.c (main): Ditto. - * testsuite/libffi.call/cls_align_uint32.c (main): Ditto. - * testsuite/libffi.call/cls_align_sint16.c (main): Ditto. - * testsuite/libffi.call/cls_20byte.c (main): Ditto. - * testsuite/libffi.call/nested_struct2.c (main): Ditto. - * testsuite/libffi.call/cls_24byte.c (main): Ditto. - * testsuite/libffi.call/nested_struct6.c (main): Ditto. - * testsuite/libffi.call/cls_uint.c (main): Ditto. - * testsuite/libffi.call/cls_12byte.c (main): Ditto. - * testsuite/libffi.call/cls_16byte.c (main): Ditto. - * testsuite/libffi.call/closure_fn0.c (main): Ditto. - * testsuite/libffi.call/cls_9byte2.c (main): Ditto. - * testsuite/libffi.call/closure_fn2.c (main): Ditto. - * testsuite/libffi.call/return_dbl1.c (main): Ditto. - * testsuite/libffi.call/closure_fn4.c (main): Ditto. - * testsuite/libffi.call/closure_fn6.c (main): Ditto. - * testsuite/libffi.call/cls_align_sint32.c (main): Ditto. - -2007-08-07 Andrew Haley - - * src/x86/sysv.S (ffi_closure_raw_SYSV): Fix typo in previous - checkin. - -2007-08-06 Andrew Haley - - PR testsuite/32843 - * src/x86/sysv.S (ffi_closure_raw_SYSV): Handle FFI_TYPE_UINT8, - FFI_TYPE_SINT8, FFI_TYPE_UINT16, FFI_TYPE_SINT16, FFI_TYPE_UINT32, - FFI_TYPE_SINT32. - -2007-08-02 David Daney - - * testsuite/libffi.call/return_ul.c (main): Define return type as - ffi_arg. Use proper printf conversion specifier. - -2007-07-30 Andrew Haley - - PR testsuite/32843 - * src/x86/ffi.c (ffi_prep_cif_machdep): in x86 case, add code for - signed/unsigned int8/16. - * src/x86/sysv.S (ffi_call_SYSV): Rewrite to: - Use a jump table. - Remove code to pop args from the stack after call. - Special-case signed/unsigned int8/16. - * testsuite/libffi.call/return_sc.c (main): Revert. - -2007-07-26 Richard Guenther - - PR testsuite/32843 - * testsuite/libffi.call/return_sc.c (main): Verify call - result as signed char, not ffi_arg. - -2007-07-16 Rainer Orth - - * configure.ac (i?86-*-solaris2.1[0-9]): Set TARGET to X86_64. - * configure: Regenerate. - -2007-07-11 David Daney - - * src/mips/ffi.c: Don't include sys/cachectl.h. - (ffi_prep_closure_loc): Use __builtin___clear_cache() instead of - cacheflush(). - -2007-05-18 Aurelien Jarno - - * src/arm/ffi.c (ffi_prep_closure_loc): Renamed and ajusted - from (ffi_prep_closure): ... this. - (FFI_INIT_TRAMPOLINE): Adjust. - -2005-12-31 Phil Blundell - - * src/arm/ffi.c (ffi_prep_incoming_args_SYSV, - ffi_closure_SYSV_inner, ffi_prep_closure): New, add closure support. - * src/arm/sysv.S(ffi_closure_SYSV): Likewise. - * src/arm/ffitarget.h (FFI_TRAMPOLINE_SIZE): Likewise. - (FFI_CLOSURES): Enable closure support. - -2007-07-03 Andrew Haley - - * testsuite/libffi.call/cls_multi_ushort.c, - testsuite/libffi.call/cls_align_uint16.c, - testsuite/libffi.call/nested_struct1.c, - testsuite/libffi.call/nested_struct3.c, - testsuite/libffi.call/cls_7_1_byte.c, - testsuite/libffi.call/cls_double.c, - testsuite/libffi.call/nested_struct5.c, - testsuite/libffi.call/nested_struct7.c, - testsuite/libffi.call/cls_sint.c, - testsuite/libffi.call/nested_struct9.c, - testsuite/libffi.call/cls_20byte1.c, - testsuite/libffi.call/cls_multi_sshortchar.c, - testsuite/libffi.call/cls_align_sint64.c, - testsuite/libffi.call/cls_3byte2.c, - testsuite/libffi.call/cls_multi_schar.c, - testsuite/libffi.call/cls_multi_uchar.c, - testsuite/libffi.call/cls_19byte.c, - testsuite/libffi.call/cls_9byte1.c, - testsuite/libffi.call/cls_align_float.c, - testsuite/libffi.call/closure_fn1.c, - testsuite/libffi.call/problem1.c, - testsuite/libffi.call/closure_fn3.c, - testsuite/libffi.call/cls_sshort.c, - testsuite/libffi.call/closure_fn5.c, - testsuite/libffi.call/cls_align_double.c, - testsuite/libffi.call/cls_2byte.c, - testsuite/libffi.call/nested_struct.c, - testsuite/libffi.call/nested_struct10.c, - testsuite/libffi.call/cls_4byte.c, - testsuite/libffi.call/cls_6byte.c, - testsuite/libffi.call/cls_8byte.c, - testsuite/libffi.call/cls_multi_sshort.c, - testsuite/libffi.call/cls_align_uint32.c, - testsuite/libffi.call/cls_align_sint16.c, - testsuite/libffi.call/cls_float.c, - testsuite/libffi.call/cls_20byte.c, - testsuite/libffi.call/cls_5_1_byte.c, - testsuite/libffi.call/nested_struct2.c, - testsuite/libffi.call/cls_24byte.c, - testsuite/libffi.call/nested_struct4.c, - testsuite/libffi.call/nested_struct6.c, - testsuite/libffi.call/cls_64byte.c, - testsuite/libffi.call/nested_struct8.c, - testsuite/libffi.call/cls_uint.c, - testsuite/libffi.call/cls_multi_ushortchar.c, - testsuite/libffi.call/cls_schar.c, - testsuite/libffi.call/cls_uchar.c, - testsuite/libffi.call/cls_align_uint64.c, - testsuite/libffi.call/cls_ulonglong.c, - testsuite/libffi.call/cls_align_longdouble.c, - testsuite/libffi.call/cls_1_1byte.c, - testsuite/libffi.call/cls_12byte.c, - testsuite/libffi.call/cls_3_1byte.c, - testsuite/libffi.call/cls_3byte1.c, - testsuite/libffi.call/cls_4_1byte.c, - testsuite/libffi.call/cls_6_1_byte.c, - testsuite/libffi.call/cls_16byte.c, - testsuite/libffi.call/cls_18byte.c, - testsuite/libffi.call/closure_fn0.c, - testsuite/libffi.call/cls_9byte2.c, - testsuite/libffi.call/closure_fn2.c, - testsuite/libffi.call/closure_fn4.c, - testsuite/libffi.call/cls_ushort.c, - testsuite/libffi.call/closure_fn6.c, - testsuite/libffi.call/cls_5byte.c, - testsuite/libffi.call/cls_align_pointer.c, - testsuite/libffi.call/cls_7byte.c, - testsuite/libffi.call/cls_align_sint32.c, - testsuite/libffi.special/unwindtest_ffi_call.cc, - testsuite/libffi.special/unwindtest.cc: Enable for ARM. - -2007-07-05 H.J. Lu - - * aclocal.m4: Regenerated. - -2007-06-02 Paolo Bonzini - - * configure: Regenerate. - -2007-05-23 Steve Ellcey - - * Makefile.in: Regenerate. - * configure: Regenerate. - * aclocal.m4: Regenerate. - * include/Makefile.in: Regenerate. - * testsuite/Makefile.in: Regenerate. - -2007-05-10 Roman Zippel - - * src/m68k/ffi.c (ffi_prep_incoming_args_SYSV, - ffi_closure_SYSV_inner,ffi_prep_closure): New, add closure support. - * src/m68k/sysv.S(ffi_closure_SYSV,ffi_closure_struct_SYSV): Likewise. - * src/m68k/ffitarget.h (FFI_TRAMPOLINE_SIZE): Likewise. - (FFI_CLOSURES): Enable closure support. - -2007-05-10 Roman Zippel - - * configure.ac (HAVE_AS_CFI_PSEUDO_OP): New test. - * configure: Regenerate. - * fficonfig.h.in: Regenerate. - * src/m68k/sysv.S (CFI_STARTPROC,CFI_ENDPROC, - CFI_OFFSET,CFI_DEF_CFA): New macros. - (ffi_call_SYSV): Add callframe annotation. - -2007-05-10 Roman Zippel - - * src/m68k/ffi.c (ffi_prep_args,ffi_prep_cif_machdep): Fix - numerous test suite failures. - * src/m68k/sysv.S (ffi_call_SYSV): Likewise. - -2007-04-11 Paolo Bonzini - - * Makefile.am (EXTRA_DIST): Bring up to date. - * Makefile.in: Regenerate. - * src/frv/eabi.S: Remove RCS keyword. - -2007-04-06 Richard Henderson - - * configure.ac: Tidy target case. - (HAVE_LONG_DOUBLE): Allow the target to override. - * configure: Regenerate. - * include/ffi.h.in: Don't define ffi_type_foo if - LIBFFI_HIDE_BASIC_TYPES is defined. - (ffi_type_longdouble): If not HAVE_LONG_DOUBLE, define - to ffi_type_double. - * types.c (LIBFFI_HIDE_BASIC_TYPES): Define. - (FFI_TYPEDEF, ffi_type_void): Mark the data const. - (ffi_type_longdouble): Special case for Alpha. Don't define - if long double == double. - - * src/alpha/ffi.c (FFI_TYPE_LONGDOUBLE): Assert unique value. - (ffi_prep_cif_machdep): Handle it as the 128-bit type. - (ffi_call, ffi_closure_osf_inner): Likewise. - (ffi_closure_osf_inner): Likewise. Mark hidden. - (ffi_call_osf, ffi_closure_osf): Mark hidden. - * src/alpha/ffitarget.h (FFI_LAST_ABI): Tidy definition. - * src/alpha/osf.S (ffi_call_osf, ffi_closure_osf): Mark hidden. - (load_table): Handle 128-bit long double. - - * testsuite/libffi.call/float4.c: Add -mieee for alpha. - -2007-04-06 Tom Tromey - - PR libffi/31491: - * README: Fixed bug in example. - -2007-04-03 Jakub Jelinek - - * src/closures.c: Include sys/statfs.h. - (_GNU_SOURCE): Define on Linux. - (FFI_MMAP_EXEC_SELINUX): Define. - (selinux_enabled): New variable. - (selinux_enabled_check): New function. - (is_selinux_enabled): Define. - (dlmmap): Use it. - -2007-03-24 Uros Bizjak - - * testsuite/libffi.call/return_fl2.c (return_fl): Mark as static. - Use 'volatile float sum' to create sum of floats to avoid false - negative due to excess precision on ix86 targets. - (main): Ditto. - -2007-03-08 Alexandre Oliva - - * src/powerpc/ffi.c (flush_icache): Fix left-over from previous - patch. - (ffi_prep_closure_loc): Remove unneeded casts. Add needed ones. - -2007-03-07 Alexandre Oliva - - * include/ffi.h.in (ffi_closure_alloc, ffi_closure_free): New. - (ffi_prep_closure_loc): New. - (ffi_prep_raw_closure_loc): New. - (ffi_prep_java_raw_closure_loc): New. - * src/closures.c: New file. - * src/dlmalloc.c [FFI_MMAP_EXEC_WRIT] (struct malloc_segment): - Replace sflags with exec_offset. - [FFI_MMAP_EXEC_WRIT] (mmap_exec_offset, add_segment_exec_offset, - sub_segment_exec_offset): New macros. - (get_segment_flags, set_segment_flags, check_segment_merge): New - macros. - (is_mmapped_segment, is_extern_segment): Use get_segment_flags. - (add_segment, sys_alloc, create_mspace, create_mspace_with_base, - destroy_mspace): Use new macros. - (sys_alloc): Silence warning. - * Makefile.am (libffi_la_SOURCES): Add src/closures.c. - * Makefile.in: Rebuilt. - * src/prep_cif [FFI_CLOSURES] (ffi_prep_closure): Implement in - terms of ffi_prep_closure_loc. - * src/raw_api.c (ffi_prep_raw_closure_loc): Renamed and adjusted - from... - (ffi_prep_raw_closure): ... this. Re-implement in terms of the - renamed version. - * src/java_raw_api (ffi_prep_java_raw_closure_loc): Renamed and - adjusted from... - (ffi_prep_java_raw_closure): ... this. Re-implement in terms of - the renamed version. - * src/alpha/ffi.c (ffi_prep_closure_loc): Renamed from - (ffi_prep_closure): ... this. - * src/pa/ffi.c: Likewise. - * src/cris/ffi.c: Likewise. Adjust. - * src/frv/ffi.c: Likewise. - * src/ia64/ffi.c: Likewise. - * src/mips/ffi.c: Likewise. - * src/powerpc/ffi_darwin.c: Likewise. - * src/s390/ffi.c: Likewise. - * src/sh/ffi.c: Likewise. - * src/sh64/ffi.c: Likewise. - * src/sparc/ffi.c: Likewise. - * src/x86/ffi64.c: Likewise. - * src/x86/ffi.c: Likewise. - (FFI_INIT_TRAMPOLINE): Adjust. - (ffi_prep_raw_closure_loc): Renamed and adjusted from... - (ffi_prep_raw_closure): ... this. - * src/powerpc/ffi.c (ffi_prep_closure_loc): Renamed from - (ffi_prep_closure): ... this. - (flush_icache): Adjust. - -2007-03-07 Alexandre Oliva - - * src/dlmalloc.c: New file, imported version 2.8.3 of Doug - Lea's malloc. - -2007-03-01 Brooks Moses - - * Makefile.am: Add dummy install-pdf target. - * Makefile.in: Regenerate - -2007-02-13 Andreas Krebbel - - * src/s390/ffi.c (ffi_prep_args, ffi_prep_cif_machdep, - ffi_closure_helper_SYSV): Add long double handling. - -2007-02-02 Jakub Jelinek - - * src/powerpc/linux64.S (ffi_call_LINUX64): Move restore of r2 - immediately after bctrl instruction. - -2007-01-18 Alexandre Oliva - - * Makefile.am (all-recursive, install-recursive, - mostlyclean-recursive, clean-recursive, distclean-recursive, - maintainer-clean-recursive): Add missing targets. - * Makefile.in: Rebuilt. - -2006-12-14 Andreas Tobler - - * configure.ac: Add TARGET for x86_64-*-darwin*. - * Makefile.am (nodist_libffi_la_SOURCES): Add rules for 64-bit sources - for X86_DARWIN. - * src/x86/ffitarget.h: Set trampoline size for x86_64-*-darwin*. - * src/x86/darwin64.S: New file for x86_64-*-darwin* support. - * configure: Regenerate. - * Makefile.in: Regenerate. - * include/Makefile.in: Regenerate. - * testsuite/Makefile.in: Regenerate. - * testsuite/libffi.special/unwindtest_ffi_call.cc: New test case for - ffi_call only. - -2006-12-13 Andreas Tobler - - * aclocal.m4: Regenerate with aclocal -I .. as written in the - Makefile.am. - -2006-10-31 Geoffrey Keating - - * src/powerpc/ffi_darwin.c (darwin_adjust_aggregate_sizes): New. - (ffi_prep_cif_machdep): Call darwin_adjust_aggregate_sizes for - Darwin. - * testsuite/libffi.call/nested_struct4.c: Remove Darwin XFAIL. - * testsuite/libffi.call/nested_struct6.c: Remove Darwin XFAIL. - -2006-10-10 Paolo Bonzini - Sandro Tolaini - - * configure.ac [i*86-*-darwin*]: Set X86_DARWIN symbol and - conditional. - * configure: Regenerated. - * Makefile.am (nodist_libffi_la_SOURCES) [X86_DARWIN]: New case. - (EXTRA_DIST): Add src/x86/darwin.S. - * Makefile.in: Regenerated. - * include/Makefile.in: Regenerated. - * testsuite/Makefile.in: Regenerated. - - * src/x86/ffi.c (ffi_prep_cif_machdep) [X86_DARWIN]: Treat like - X86_WIN32, and additionally align stack to 16 bytes. - * src/x86/darwin.S: New, based on sysv.S. - * src/prep_cif.c (ffi_prep_cif) [X86_DARWIN]: Align > 8-byte structs. - -2006-09-12 David Daney - - PR libffi/23935 - * include/Makefile.am: Install both ffi.h and ffitarget.h in - $(libdir)/gcc/$(target_alias)/$(gcc_version)/include. - * aclocal.m4: Regenerated for automake 1.9.6. - * Makefile.in: Regenerated. - * include/Makefile.in: Regenerated. - * testsuite/Makefile.in: Regenerated. - -2006-08-17 Andreas Tobler - - * include/ffi_common.h (struct): Revert accidental commit. - -2006-08-15 Andreas Tobler - - * include/ffi_common.h: Remove lint directives. - * include/ffi.h.in: Likewise. - -2006-07-25 Torsten Schoenfeld - - * include/ffi.h.in (ffi_type_ulong, ffi_type_slong): Define correctly - for 32-bit architectures. - * testsuite/libffi.call/return_ul.c: New test case. - -2006-07-19 David Daney - - * testsuite/libffi.call/closure_fn6.c: Remove xfail for mips, - xfail remains for mips64. - -2006-05-23 Carlos O'Donell - - * Makefile.am: Add install-html target. Add install-html to .PHONY - * Makefile.in: Regenerate. - * aclocal.m4: Regenerate. - * include/Makefile.in: Regenerate. - * testsuite/Makefile.in: Regenerate. - -2006-05-18 John David Anglin - - * pa/ffi.c (ffi_prep_args_pa32): Load floating point arguments from - stack slot. - -2006-04-22 Andreas Tobler - - * README: Remove notice about 'Crazy Comments'. - * src/debug.c: Remove lint directives. Cleanup white spaces. - * src/java_raw_api.c: Likewise. - * src/prep_cif.c: Likewise. - * src/raw_api.c: Likewise. - * src/ffitest.c: Delete. No longer needed, all test cases migrated - to the testsuite. - * src/arm/ffi.c: Remove lint directives. - * src/m32r/ffi.c: Likewise. - * src/pa/ffi.c: Likewise. - * src/powerpc/ffi.c: Likewise. - * src/powerpc/ffi_darwin.c: Likewise. - * src/sh/ffi.c: Likewise. - * src/sh64/ffi.c: Likewise. - * src/x86/ffi.c: Likewise. - * testsuite/libffi.call/float2.c: Likewise. - * testsuite/libffi.call/promotion.c: Likewise. - * testsuite/libffi.call/struct1.c: Likewise. - -2006-04-13 Andreas Tobler - - * src/pa/hpux32.S: Correct unwind offset calculation for - ffi_closure_pa32. - * src/pa/linux.S: Likewise. - -2006-04-12 James E Wilson - - PR libgcj/26483 - * src/ia64/ffi.c (stf_spill, ldf_fill): Rewrite as macros. - (hfa_type_load): Call stf_spill. - (hfa_type_store): Call ldf_fill. - (ffi_call): Adjust calls to above routines. Add local temps for - macro result. - -2006-04-10 Matthias Klose - - * testsuite/lib/libffi-dg.exp (libffi-init): Recognize multilib - directory names containing underscores. - -2006-04-07 James E Wilson - - * testsuite/libffi.call/float4.c: New testcase. - -2006-04-05 John David Anglin - Andreas Tobler - - * Makefile.am: Add PA_HPUX port. - * Makefile.in: Regenerate. - * include/Makefile.in: Likewise. - * testsuite/Makefile.in: Likewise. - * configure.ac: Add PA_HPUX rules. - * configure: Regenerate. - * src/pa/ffitarget.h: Rename linux target to PA_LINUX. - Add PA_HPUX and PA64_HPUX. - Rename FFI_LINUX ABI to FFI_PA32 ABI. - (FFI_TRAMPOLINE_SIZE): Define for 32-bit HP-UX targets. - (FFI_TYPE_SMALL_STRUCT2): Define. - (FFI_TYPE_SMALL_STRUCT4): Likewise. - (FFI_TYPE_SMALL_STRUCT8): Likewise. - (FFI_TYPE_SMALL_STRUCT3): Redefine. - (FFI_TYPE_SMALL_STRUCT5): Likewise. - (FFI_TYPE_SMALL_STRUCT6): Likewise. - (FFI_TYPE_SMALL_STRUCT7): Likewise. - * src/pa/ffi.c (ROUND_DOWN): Delete. - (fldw, fstw, fldd, fstd): Use '__asm__'. - (ffi_struct_type): Add support for FFI_TYPE_SMALL_STRUCT2, - FFI_TYPE_SMALL_STRUCT4 and FFI_TYPE_SMALL_STRUCT8. - (ffi_prep_args_LINUX): Rename to ffi_prep_args_pa32. Update comment. - Simplify incrementing of stack slot variable. Change type of local - 'n' to unsigned int. - (ffi_size_stack_LINUX): Rename to ffi_size_stack_pa32. Handle long - double on PA_HPUX. - (ffi_prep_cif_machdep): Likewise. - (ffi_call): Likewise. - (ffi_closure_inner_LINUX): Rename to ffi_closure_inner_pa32. Change - return type to ffi_status. Simplify incrementing of stack slot - variable. Only copy floating point argument registers when PA_LINUX - is true. Reformat debug statement. - Add support for FFI_TYPE_SMALL_STRUCT2, FFI_TYPE_SMALL_STRUCT4 and - FFI_TYPE_SMALL_STRUCT8. - (ffi_closure_LINUX): Rename to ffi_closure_pa32. Add 'extern' to - declaration. - (ffi_prep_closure): Make linux trampoline conditional on PA_LINUX. - Add nops to cache flush. Add trampoline for PA_HPUX. - * src/pa/hpux32.S: New file. - * src/pa/linux.S (ffi_call_LINUX): Rename to ffi_call_pa32. Rename - ffi_prep_args_LINUX to ffi_prep_args_pa32. - Localize labels. Add support for 2, 4 and 8-byte small structs. Handle - unaligned destinations in 3, 5, 6 and 7-byte small structs. Order - argument type checks so that common argument types appear first. - (ffi_closure_LINUX): Rename to ffi_closure_pa32. Rename - ffi_closure_inner_LINUX to ffi_closure_inner_pa32. - -2006-03-24 Alan Modra - - * src/powerpc/ffitarget.h (enum ffi_abi): Add FFI_LINUX. Default - for 32-bit using IBM extended double format. Fix FFI_LAST_ABI. - * src/powerpc/ffi.c (ffi_prep_args_SYSV): Handle linux variant of - FFI_TYPE_LONGDOUBLE. - (ffi_prep_args64): Assert using IBM extended double. - (ffi_prep_cif_machdep): Don't munge FFI_TYPE_LONGDOUBLE type. - Handle FFI_LINUX FFI_TYPE_LONGDOUBLE return and args. - (ffi_call): Handle FFI_LINUX. - (ffi_closure_helper_SYSV): Non FFI_LINUX long double return needs - gpr3 return pointer as for struct return. Handle FFI_LINUX - FFI_TYPE_LONGDOUBLE return and args. Don't increment "nf" - unnecessarily. - * src/powerpc/ppc_closure.S (ffi_closure_SYSV): Load both f1 and f2 - for FFI_TYPE_LONGDOUBLE. Move epilogue insns into case table. - Don't use r6 as pointer to results, instead use sp offset. Don't - make a special call to load lr with case table address, instead - use offset from previous call. - * src/powerpc/sysv.S (ffi_call_SYSV): Save long double return. - * src/powerpc/linux64.S (ffi_call_LINUX64): Simplify long double - return. - -2006-03-15 Kaz Kojima - - * src/sh64/ffi.c (ffi_prep_cif_machdep): Handle float arguments - passed with FP registers correctly. - (ffi_closure_helper_SYSV): Likewise. - * src/sh64/sysv.S: Likewise. - -2006-03-01 Andreas Tobler - - * testsuite/libffi.special/unwindtest.cc (closure_test_fn): Mark cif, - args and userdata unused. - (closure_test_fn1): Mark cif and userdata unused. - (main): Remove unused res. - -2006-02-28 Andreas Tobler - - * testsuite/libffi.call/call.exp: Adjust FSF address. Add test runs for - -O2, -O3, -Os and the warning flags -W -Wall. - * testsuite/libffi.special/special.exp: Likewise. - * testsuite/libffi.call/ffitest.h: Add an __UNUSED__ macro to mark - unused parameter unused for gcc or else do nothing. - * testsuite/libffi.special/ffitestcxx.h: Likewise. - * testsuite/libffi.call/cls_12byte.c (cls_struct_12byte_gn): Mark cif - and userdata unused. - * testsuite/libffi.call/cls_16byte.c (cls_struct_16byte_gn): Likewise. - * testsuite/libffi.call/cls_18byte.c (cls_struct_18byte_gn): Likewise. - * testsuite/libffi.call/cls_19byte.c (cls_struct_19byte_gn): Likewise. - * testsuite/libffi.call/cls_1_1byte.c (cls_struct_1_1byte_gn): Likewise. - * testsuite/libffi.call/cls_20byte.c (cls_struct_20byte_gn): Likewise. - * testsuite/libffi.call/cls_20byte1.c (cls_struct_20byte_gn): Likewise. - * testsuite/libffi.call/cls_24byte.c (cls_struct_24byte_gn): Likewise. - * testsuite/libffi.call/cls_2byte.c (cls_struct_2byte_gn): Likewise. - * testsuite/libffi.call/cls_3_1byte.c (cls_struct_3_1byte_gn): Likewise. - * testsuite/libffi.call/cls_3byte1.c (cls_struct_3byte_gn): Likewise. - * testsuite/libffi.call/cls_3byte2.c (cls_struct_3byte_gn1): Likewise. - * testsuite/libffi.call/cls_4_1byte.c (cls_struct_4_1byte_gn): Likewise. - * testsuite/libffi.call/cls_4byte.c (cls_struct_4byte_gn): Likewise. - * testsuite/libffi.call/cls_5_1_byte.c (cls_struct_5byte_gn): Likewise. - * testsuite/libffi.call/cls_5byte.c (cls_struct_5byte_gn): Likewise. - * testsuite/libffi.call/cls_64byte.c (cls_struct_64byte_gn): Likewise. - * testsuite/libffi.call/cls_6_1_byte.c (cls_struct_6byte_gn): Likewise. - * testsuite/libffi.call/cls_6byte.c (cls_struct_6byte_gn): Likewise. - * testsuite/libffi.call/cls_7_1_byte.c (cls_struct_7byte_gn): Likewise. - * testsuite/libffi.call/cls_7byte.c (cls_struct_7byte_gn): Likewise. - * testsuite/libffi.call/cls_8byte.c (cls_struct_8byte_gn): Likewise. - * testsuite/libffi.call/cls_9byte1.c (cls_struct_9byte_gn): Likewise. - * testsuite/libffi.call/cls_9byte2.c (cls_struct_9byte_gn): Likewise. - * testsuite/libffi.call/cls_align_double.c (cls_struct_align_gn): - Likewise. - * testsuite/libffi.call/cls_align_float.c (cls_struct_align_gn): - Likewise. - * testsuite/libffi.call/cls_align_longdouble.c (cls_struct_align_gn): - Likewise. - * testsuite/libffi.call/cls_align_pointer.c (cls_struct_align_fn): Cast - void* to avoid compiler warning. - (main): Likewise. - (cls_struct_align_gn): Mark cif and userdata unused. - * testsuite/libffi.call/cls_align_sint16.c (cls_struct_align_gn): - Likewise. - * testsuite/libffi.call/cls_align_sint32.c (cls_struct_align_gn): - Likewise. - * testsuite/libffi.call/cls_align_sint64.c (cls_struct_align_gn): - Likewise. - * testsuite/libffi.call/cls_align_uint16.c (cls_struct_align_gn): - Likewise. - * testsuite/libffi.call/cls_align_uint32.c (cls_struct_align_gn): - Likewise. - * testsuite/libffi.call/cls_double.c (cls_ret_double_fn): Likewise. - * testsuite/libffi.call/cls_float.c (cls_ret_float_fn): Likewise. - * testsuite/libffi.call/cls_multi_schar.c (test_func_gn): Mark cif and - data unused. - (main): Cast res_call to silence gcc. - * testsuite/libffi.call/cls_multi_sshort.c (test_func_gn): Mark cif and - data unused. - (main): Cast res_call to silence gcc. - * testsuite/libffi.call/cls_multi_sshortchar.c (test_func_gn): Mark cif - and data unused. - (main): Cast res_call to silence gcc. - * testsuite/libffi.call/cls_multi_uchar.c (test_func_gn): Mark cif and - data unused. - (main): Cast res_call to silence gcc. - * testsuite/libffi.call/cls_multi_ushort.c (test_func_gn): Mark cif and - data unused. - (main): Cast res_call to silence gcc. - * testsuite/libffi.call/cls_multi_ushortchar.c (test_func_gn): Mark cif - and data unused. - (main): Cast res_call to silence gcc. - * testsuite/libffi.call/cls_schar.c (cls_ret_schar_fn): Mark cif and - userdata unused. - (cls_ret_schar_fn): Cast printf parameter to silence gcc. - * testsuite/libffi.call/cls_sint.c (cls_ret_sint_fn): Mark cif and - userdata unused. - (cls_ret_sint_fn): Cast printf parameter to silence gcc. - * testsuite/libffi.call/cls_sshort.c (cls_ret_sshort_fn): Mark cif and - userdata unused. - (cls_ret_sshort_fn): Cast printf parameter to silence gcc. - * testsuite/libffi.call/cls_uchar.c (cls_ret_uchar_fn): Mark cif and - userdata unused. - (cls_ret_uchar_fn): Cast printf parameter to silence gcc. - * testsuite/libffi.call/cls_uint.c (cls_ret_uint_fn): Mark cif and - userdata unused. - (cls_ret_uint_fn): Cast printf parameter to silence gcc. - * testsuite/libffi.call/cls_ulonglong.c (cls_ret_ulonglong_fn): Mark cif - and userdata unused. - * testsuite/libffi.call/cls_ushort.c (cls_ret_ushort_fn): Mark cif and - userdata unused. - (cls_ret_ushort_fn): Cast printf parameter to silence gcc. - * testsuite/libffi.call/float.c (floating): Remove unused parameter e. - * testsuite/libffi.call/float1.c (main): Remove unused variable i. - Cleanup white spaces. - * testsuite/libffi.call/negint.c (checking): Remove unused variable i. - * testsuite/libffi.call/nested_struct.c (cls_struct_combined_gn): Mark - cif and userdata unused. - * testsuite/libffi.call/nested_struct1.c (cls_struct_combined_gn): - Likewise. - * testsuite/libffi.call/nested_struct10.c (B_gn): Likewise. - * testsuite/libffi.call/nested_struct2.c (B_fn): Adjust printf - formatters to silence gcc. - (B_gn): Mark cif and userdata unused. - * testsuite/libffi.call/nested_struct3.c (B_gn): Mark cif and userdata - unused. - * testsuite/libffi.call/nested_struct4.c: Mention related PR. - (B_gn): Mark cif and userdata unused. - * testsuite/libffi.call/nested_struct5.c (B_gn): Mark cif and userdata - unused. - * testsuite/libffi.call/nested_struct6.c: Mention related PR. - (B_gn): Mark cif and userdata unused. - * testsuite/libffi.call/nested_struct7.c (B_gn): Mark cif and userdata - unused. - * testsuite/libffi.call/nested_struct8.c (B_gn): Likewise. - * testsuite/libffi.call/nested_struct9.c (B_gn): Likewise. - * testsuite/libffi.call/problem1.c (stub): Likewise. - * testsuite/libffi.call/pyobjc-tc.c (main): Cast the result to silence - gcc. - * testsuite/libffi.call/return_fl2.c (return_fl): Add the note mentioned - in the last commit for this test case in the test case itself. - * testsuite/libffi.call/closure_fn0.c (closure_test_fn0): Mark cif as - unused. - * testsuite/libffi.call/closure_fn1.c (closure_test_fn1): Likewise. - * testsuite/libffi.call/closure_fn2.c (closure_test_fn2): Likewise. - * testsuite/libffi.call/closure_fn3.c (closure_test_fn3): Likewise. - * testsuite/libffi.call/closure_fn4.c (closure_test_fn0): Likewise. - * testsuite/libffi.call/closure_fn5.c (closure_test_fn5): Likewise. - * testsuite/libffi.call/closure_fn6.c (closure_test_fn0): Likewise. - -2006-02-22 Kaz Kojima - - * src/sh/sysv.S: Fix register numbers in the FDE for - ffi_closure_SYSV. - -2006-02-20 Andreas Tobler - - * testsuite/libffi.call/return_fl2.c (return_fl): Remove static - declaration to avoid a false negative on ix86. See PR323. - -2006-02-18 Kaz Kojima - - * src/sh/ffi.c (ffi_closure_helper_SYSV): Remove unused variable - and cast integer to void * if needed. Update the pointer to - the FP register saved area correctly. - -2006-02-17 Andreas Tobler - - * testsuite/libffi.call/nested_struct6.c: XFAIL this test until PR25630 - is fixed. - * testsuite/libffi.call/nested_struct4.c: Likewise. - -2006-02-16 Andreas Tobler - - * testsuite/libffi.call/return_dbl.c: New test case. - * testsuite/libffi.call/return_dbl1.c: Likewise. - * testsuite/libffi.call/return_dbl2.c: Likewise. - * testsuite/libffi.call/return_fl.c: Likewise. - * testsuite/libffi.call/return_fl1.c: Likewise. - * testsuite/libffi.call/return_fl2.c: Likewise. - * testsuite/libffi.call/return_fl3.c: Likewise. - * testsuite/libffi.call/closure_fn6.c: Likewise. - - * testsuite/libffi.call/nested_struct2.c: Remove ffi_type_mylong - definition. - * testsuite/libffi.call/ffitest.h: Add ffi_type_mylong definition - here to be used by other test cases too. - - * testsuite/libffi.call/nested_struct10.c: New test case. - * testsuite/libffi.call/nested_struct9.c: Likewise. - * testsuite/libffi.call/nested_struct8.c: Likewise. - * testsuite/libffi.call/nested_struct7.c: Likewise. - * testsuite/libffi.call/nested_struct6.c: Likewise. - * testsuite/libffi.call/nested_struct5.c: Likewise. - * testsuite/libffi.call/nested_struct4.c: Likewise. - -2006-01-21 Andreas Tobler - - * configure.ac: Enable libffi for sparc64-*-freebsd*. - * configure: Rebuilt. - -2006-01-18 Jakub Jelinek - - * src/powerpc/sysv.S (smst_two_register): Don't call __ashldi3, - instead do the shifting inline. - * src/powerpc/ppc_closure.S (ffi_closure_SYSV): Don't compute %r5 - shift count unconditionally. Simplify load sequences for 1, 2, 3, 4 - and 8 byte structs, for the remaining struct sizes don't call - __lshrdi3, instead do the shifting inline. - -2005-12-07 Thiemo Seufer - - * src/mips/ffitarget.h: Remove obsolete sgidefs.h include. Add - missing parentheses. - * src/mips/o32.S (ffi_call_O32): Code formatting. Define - and use A3_OFF, FP_OFF, RA_OFF. Micro-optimizations. - (ffi_closure_O32): Likewise, but with newly defined A3_OFF2, - A2_OFF2, A1_OFF2, A0_OFF2, RA_OFF2, FP_OFF2, S0_OFF2, GP_OFF2, - V1_OFF2, V0_OFF2, FA_1_1_OFF2, FA_1_0_OFF2, FA_0_1_OFF2, - FA_0_0_OFF2. - * src/mips/ffi.c (ffi_prep_args): Code formatting. Fix - endianness bugs. - (ffi_prep_closure): Improve trampoline instruction scheduling. - (ffi_closure_mips_inner_O32): Fix endianness bugs. - -2005-12-03 Alan Modra - - * src/powerpc/ffi.c: Formatting. - (ffi_prep_args_SYSV): Avoid possible aliasing problems by using unions. - (ffi_prep_args64): Likewise. - -2005-09-30 Geoffrey Keating - - * testsuite/lib/libffi-dg.exp (libffi_target_compile): For - darwin, use -shared-libgcc not -lgcc_s, and explain why. - -2005-09-26 Tom Tromey - - * testsuite/libffi.call/float1.c (value_type): New typedef. - (CANARY): New define. - (main): Check for result buffer overflow. - * src/powerpc/linux64.S: Handle linux64 long double returns. - * src/powerpc/ffi.c (FLAG_RETURNS_128BITS): New constant. - (ffi_prep_cif_machdep): Handle linux64 long double returns. - -2005-08-25 Alan Modra - - PR target/23404 - * src/powerpc/ffi.c (ffi_prep_args_SYSV): Correct placement of stack - homed fp args. - (ffi_status ffi_prep_cif_machdep): Correct stack sizing for same. - -2005-08-11 Jakub Jelinek - - * configure.ac (HAVE_HIDDEN_VISIBILITY_ATTRIBUTE): New test. - (AH_BOTTOM): Add FFI_HIDDEN definition. - * configure: Rebuilt. - * fficonfig.h.in: Rebuilt. - * src/powerpc/ffi.c (hidden): Remove. - (ffi_closure_LINUX64, ffi_prep_args64, ffi_call_LINUX64, - ffi_closure_helper_LINUX64): Use FFI_HIDDEN instead of hidden. - * src/powerpc/linux64_closure.S (ffi_closure_LINUX64, - .ffi_closure_LINUX64): Use FFI_HIDDEN instead of .hidden. - * src/x86/ffi.c (ffi_closure_SYSV, ffi_closure_raw_SYSV): Remove, - add FFI_HIDDEN to its prototype. - (ffi_closure_SYSV_inner): New. - * src/x86/sysv.S (ffi_closure_SYSV, ffi_closure_raw_SYSV): New. - * src/x86/win32.S (ffi_closure_SYSV, ffi_closure_raw_SYSV): New. - -2005-08-10 Alfred M. Szmidt - - PR libffi/21819: - * configure: Rebuilt. - * configure.ac: Handle i*86-*-gnu*. - -2005-08-09 Jakub Jelinek - - * src/powerpc/ppc_closure.S (ffi_closure_SYSV): Use - DW_CFA_offset_extended_sf rather than - DW_CFA_GNU_negative_offset_extended. - * src/powerpc/sysv.S (ffi_call_SYSV): Likewise. - -2005-07-22 SUGIOKA Toshinobu - - * src/sh/sysv.S (ffi_call_SYSV): Stop argument popping correctly - on sh3. - (ffi_closure_SYSV): Change the stack layout for sh3 struct argument. - * src/sh/ffi.c (ffi_prep_args): Fix sh3 argument copy, when it is - partially on register. - (ffi_closure_helper_SYSV): Likewise. - (ffi_prep_cif_machdep): Don't set too many cif->flags. - -2005-07-20 Kaz Kojima - - * src/sh/ffi.c (ffi_call): Handle small structures correctly. - Remove empty line. - * src/sh64/ffi.c (simple_type): Remove. - (return_type): Handle small structures correctly. - (ffi_prep_args): Likewise. - (ffi_call): Likewise. - (ffi_closure_helper_SYSV): Likewise. - * src/sh64/sysv.S (ffi_call_SYSV): Handle 1, 2 and 4-byte return. - Emit position independent code if PIC and remove wrong datalabel - prefixes from EH data. - -2005-07-19 Andreas Tobler - - * Makefile.am (nodist_libffi_la_SOURCES): Add POWERPC_FREEBSD. - * Makefile.in: Regenerate. - * include/Makefile.in: Likewise. - * testsuite/Makefile.in: Likewise. - * configure.ac: Add POWERPC_FREEBSD rules. - * configure: Regenerate. - * src/powerpc/ffitarget.h: Add POWERPC_FREEBSD rules. - (FFI_SYSV_TYPE_SMALL_STRUCT): Define. - * src/powerpc/ffi.c: Add flags to handle small structure returns - in ffi_call_SYSV. - (ffi_prep_cif_machdep): Handle small structures for SYSV 4 ABI. - Aka FFI_SYSV. - (ffi_closure_helper_SYSV): Likewise. - * src/powerpc/ppc_closure.S: Add return types for small structures. - * src/powerpc/sysv.S: Add bits to handle small structures for - final SYSV 4 ABI. - -2005-07-10 Andreas Tobler - - * testsuite/libffi.call/cls_5_1_byte.c: New test file. - * testsuite/libffi.call/cls_6_1_byte.c: Likewise. - * testsuite/libffi.call/cls_7_1_byte.c: Likewise. - -2005-07-05 Randolph Chung - - * src/pa/ffi.c (ffi_struct_type): Rename FFI_TYPE_SMALL_STRUCT1 - as FFI_TYPE_SMALL_STRUCT3. Break out handling for 5-7 byte - structures. Kill compilation warnings. - (ffi_closure_inner_LINUX): Print return values as hex in debug - message. Rename FFI_TYPE_SMALL_STRUCT1 as FFI_TYPE_SMALL_STRUCT3. - Properly handle 5-7 byte structure returns. - * src/pa/ffitarget.h (FFI_TYPE_SMALL_STRUCT1) - (FFI_TYPE_SMALL_STRUCT2): Remove. - (FFI_TYPE_SMALL_STRUCT3, FFI_TYPE_SMALL_STRUCT5) - (FFI_TYPE_SMALL_STRUCT6, FFI_TYPE_SMALL_STRUCT7): Define. - * src/pa/linux.S: Mark source file as using PA1.1 assembly. - (checksmst1, checksmst2): Remove. - (checksmst3): Optimize handling of 3-byte struct returns. - (checksmst567): Properly handle 5-7 byte struct returns. - -2005-06-15 Rainer Orth - - PR libgcj/21943 - * src/mips/n32.S: Enforce PIC code. - * src/mips/o32.S: Likewise. - -2005-06-15 Rainer Orth - - * configure.ac: Treat i*86-*-solaris2.10 and up as X86_64. - * configure: Regenerate. - -2005-06-01 Alan Modra - - * src/powerpc/ppc_closure.S (ffi_closure_SYSV): Don't use JUMPTARGET - to call ffi_closure_helper_SYSV. Append @local instead. - * src/powerpc/sysv.S (ffi_call_SYSV): Likewise for ffi_prep_args_SYSV. - -2005-05-17 Kelley Cook - - * configure.ac: Use AC_C_BIGENDIAN instead of AC_C_BIGENDIAN_CROSS. - Use AC_CHECK_SIZEOF instead of AC_COMPILE_CHECK_SIZEOF. - * Makefile.am (ACLOCAL_AMFLAGS): Remove -I ../config. - * aclocal.m4, configure, fficonfig.h.in, Makefile.in, - include/Makefile.in, testsuite/Makefile.in: Regenerate. - -2005-05-09 Mike Stump - - * configure: Regenerate. - -2005-05-08 Richard Henderson - - PR libffi/21285 - * src/alpha/osf.S: Update unwind into to match code. - -2005-05-04 Andreas Degert - Richard Henderson - - * src/x86/ffi64.c (ffi_prep_cif_machdep): Save sse-used flag in - bit 11 of flags. - (ffi_call): Mask return type field. Pass ssecount to ffi_call_unix64. - (ffi_prep_closure): Set carry bit if sse-used flag set. - * src/x86/unix64.S (ffi_call_unix64): Add ssecount argument. - Only load sse registers if ssecount non-zero. - (ffi_closure_unix64): Only save sse registers if carry set on entry. - -2005-04-29 Ralf Corsepius - - * configure.ac: Add i*86-*-rtems*, sparc*-*-rtems*, - powerpc-*rtems*, arm*-*-rtems*, sh-*-rtems*. - * configure: Regenerate. - -2005-04-20 Hans-Peter Nilsson - - * testsuite/lib/libffi-dg.exp (libffi-dg-test-1): In regsub use, - have Tcl8.3-compatible intermediate variable. - -2005-04-18 Simon Posnjak - Hans-Peter Nilsson - - * Makefile.am: Add CRIS support. - * configure.ac: Likewise. - * Makefile.in, configure, testsuite/Makefile.in, - include/Makefile.in: Regenerate. - * src/cris: New directory. - * src/cris/ffi.c, src/cris/sysv.S, src/cris/ffitarget.h: New files. - * src/prep_cif.c (ffi_prep_cif): Wrap in #ifndef __CRIS__. - - * testsuite/lib/libffi-dg.exp (libffi-dg-test-1): Replace \n with - \r?\n in output tests. - -2005-04-12 Mike Stump - - * configure: Regenerate. - -2005-03-30 Hans Boehm - - * src/ia64/ffitarget.h (ffi_arg): Use long long instead of DI. - -2005-03-30 Steve Ellcey - - * src/ia64/ffitarget.h (ffi_arg) ADD DI attribute. - (ffi_sarg) Ditto. - * src/ia64/unix.S (ffi_closure_unix): Extend gp - to 64 bits in ILP32 mode. - Load 64 bits even for short data. - -2005-03-23 Mike Stump - - * src/powerpc/darwin.S: Update for -m64 multilib. - * src/powerpc/darwin_closure.S: Likewise. - -2005-03-21 Zack Weinberg - - * configure.ac: Do not invoke TL_AC_GCC_VERSION. - Do not set tool_include_dir. - * aclocal.m4, configure, Makefile.in, testsuite/Makefile.in: - Regenerate. - * include/Makefile.am: Set gcc_version and toollibffidir. - * include/Makefile.in: Regenerate. - -2005-02-22 Andrew Haley - - * src/powerpc/ffi.c (ffi_prep_cif_machdep): Bump alignment to - odd-numbered register pairs for 64-bit integer types. - -2005-02-23 Andreas Tobler - - PR libffi/20104 - * testsuite/libffi.call/return_ll1.c: New test case. - -2005-02-11 Janis Johnson - - * testsuite/libffi.call/cls_align_longdouble.c: Remove dg-options. - * testsuite/libffi.call/float.c: Ditto. - * testsuite/libffi.call/float2.c: Ditto. - * testsuite/libffi.call/float3.c: Ditto. - -2005-02-08 Andreas Tobler - - * src/frv/ffitarget.h: Remove PPC stuff which does not belong to frv. - -2005-01-12 Eric Botcazou - - * testsuite/libffi.special/special.exp (cxx_options): Add - -shared-libgcc. - -2004-12-31 Richard Henderson - - * src/types.c (FFI_AGGREGATE_TYPEDEF): Remove. - (FFI_TYPEDEF): Rename from FFI_INTEGRAL_TYPEDEF. Replace size and - offset parameters with a type parameter; deduce size and structure - alignment. Update all users. - -2004-12-31 Richard Henderson - - * src/types.c (FFI_TYPE_POINTER): Define with sizeof. - (FFI_TYPE_LONGDOUBLE): Fix for ia64. - * src/ia64/ffitarget.h (struct ffi_ia64_trampoline_struct): Move - into ffi_prep_closure. - * src/ia64/ia64_flags.h, src/ia64/ffi.c, src/ia64/unix.S: Rewrite - from scratch. - -2004-12-27 Richard Henderson - - * src/x86/unix64.S: Fix typo in unwind info. - -2004-12-25 Richard Henderson - - * src/x86/ffi64.c (struct register_args): Rename from stackLayout. - (enum x86_64_reg_class): Add X86_64_COMPLEX_X87_CLASS. - (merge_classes): Check for it. - (SSE_CLASS_P): New. - (classify_argument): Pass byte_offset by value; perform all updates - inside struct case. - (examine_argument): Add classes argument; handle - X86_64_COMPLEX_X87_CLASS. - (ffi_prep_args): Merge into ... - (ffi_call): ... here. Share stack frame with ffi_call_unix64. - (ffi_prep_cif_machdep): Setup cif->flags for proper structure return. - (ffi_fill_return_value): Remove. - (ffi_prep_closure): Remove dead assert. - (ffi_closure_unix64_inner): Rename from ffi_closure_UNIX64_inner. - Rewrite to use struct register_args instead of va_list. Create - flags for handling structure returns. - * src/x86/unix64.S: Remove dead strings. - (ffi_call_unix64): Rename from ffi_call_UNIX64. Rewrite to share - stack frame with ffi_call. Handle structure returns properly. - (float2sse, floatfloat2sse, double2sse): Remove. - (sse2float, sse2double, sse2floatfloat): Remove. - (ffi_closure_unix64): Rename from ffi_closure_UNIX64. Rewrite - to handle structure returns properly. - -2004-12-08 David Edelsohn - - * Makefile.am (AM_MAKEFLAGS): Remove duplicate LIBCFLAGS and - PICFLAG. - * Makefile.in: Regenerated. - -2004-12-02 Richard Sandiford - - * configure.ac: Use TL_AC_GCC_VERSION to set gcc_version. - * configure, aclocal.m4, Makefile.in: Regenerate. - * include/Makefile.in, testsuite/Makefile.in: Regenerate. - -2004-11-29 Kelley Cook - - * configure: Regenerate for libtool change. - -2004-11-25 Kelley Cook - - * configure: Regenerate for libtool reversion. - -2004-11-24 Kelley Cook - - * configure: Regenerate for libtool change. - -2004-11-23 John David Anglin - - * testsuite/lib/libffi-dg.exp: Use new procs in target-libpath.exp. - -2004-11-23 Richard Sandiford - - * src/mips/o32.S (ffi_call_O32, ffi_closure_O32): Use jalr instead - of jal. Use an absolute encoding for the frame information. - -2004-11-23 Kelley Cook - - * Makefile.am: Remove no-dependencies. Add ACLOCAL_AMFLAGS. - * acinclude.m4: Delete logic for sincludes. - * aclocal.m4, Makefile.in, configure: Regenerate. - * include/Makefile: Likewise. - * testsuite/Makefile: Likewise. - -2004-11-22 Eric Botcazou - - * src/sparc/ffi.c (ffi_prep_closure): Align doubles and 64-bit integers - on a 8-byte boundary. - * src/sparc/v8.S (ffi_closure_v8): Reserve frame space for arguments. - -2004-10-27 Richard Earnshaw - - * src/arm/ffi.c (ffi_prep_cif_machdep): Handle functions that return - long long values. Round stack allocation to a multiple of 8 bytes - for ATPCS compatibility. - * src/arm/sysv.S (ffi_call_SYSV): Rework to avoid use of APCS register - names. Handle returning long long types. Add Thumb and interworking - support. Improve soft-float code. - -2004-10-27 Richard Earnshaw - - * testsuite/lib/libffi-db.exp (load_gcc_lib): New function. - (libffi_exit): New function. - (libffi_init): Build the testglue wrapper if needed. - -2004-10-25 Eric Botcazou - - PR other/18138 - * testsuite/lib/libffi-dg.exp: Accept more than one multilib libgcc. - -2004-10-25 Kazuhiro Inaoka - - * src/m32r/libffitarget.h (FFI_CLOSURES): Set to 0. - -2004-10-20 Kaz Kojima - - * src/sh/sysv.S (ffi_call_SYSV): Don't align for double data. - * testsuite/libffi.call/float3.c: New test case. - -2004-10-18 Kaz Kojima - - * src/sh/ffi.c (ffi_prep_closure): Set T bit in trampoline for - the function returning a structure pointed with R2. - * src/sh/sysv.S (ffi_closure_SYSV): Use R2 as the pointer to - the structure return value if T bit set. Emit position - independent code and EH data if PIC. - -2004-10-13 Kazuhiro Inaoka - - * Makefile.am: Add m32r support. - * configure.ac: Likewise. - * Makefile.in: Regenerate. - * confiugre: Regenerate. - * src/types.c: Add m32r port to FFI_INTERNAL_TYPEDEF - (uint64, sint64, double, longdouble) - * src/m32r: New directory. - * src/m32r/ffi.c: New file. - * src/m32r/sysv.S: Likewise. - * src/m32r/ffitarget.h: Likewise. - -2004-10-02 Kaz Kojima - - * testsuite/libffi.call/negint.c: New test case. - -2004-09-14 H.J. Lu - - PR libgcj/17465 - * testsuite/lib/libffi-dg.exp: Don't use global ld_library_path. - Set up LD_LIBRARY_PATH, SHLIB_PATH, LD_LIBRARYN32_PATH, - LD_LIBRARY64_PATH, LD_LIBRARY_PATH_32, LD_LIBRARY_PATH_64 and - DYLD_LIBRARY_PATH. - -2004-09-05 Andreas Tobler - - * testsuite/libffi.call/many_win32.c: Remove whitespaces. - * testsuite/libffi.call/promotion.c: Likewise. - * testsuite/libffi.call/return_ll.c: Remove unused var. Cleanup - whitespaces. - * testsuite/libffi.call/return_sc.c: Likewise. - * testsuite/libffi.call/return_uc.c: Likewise. - -2004-09-05 Andreas Tobler - - * src/powerpc/darwin.S: Fix comments and identation. - * src/powerpc/darwin_closure.S: Likewise. - -2004-09-02 Andreas Tobler - - * src/powerpc/ffi_darwin.c: Add flag for longdouble return values. - (ffi_prep_args): Handle longdouble arguments. - (ffi_prep_cif_machdep): Set flags for longdouble. Calculate space for - longdouble. - (ffi_closure_helper_DARWIN): Add closure handling for longdouble. - * src/powerpc/darwin.S (_ffi_call_DARWIN): Add handling of longdouble - values. - * src/powerpc/darwin_closure.S (_ffi_closure_ASM): Likewise. - * src/types.c: Defined longdouble size and alignment for darwin. - -2004-09-02 Andreas Tobler - - * src/powerpc/aix.S: Remove whitespaces. - * src/powerpc/aix_closure.S: Likewise. - * src/powerpc/asm.h: Likewise. - * src/powerpc/ffi.c: Likewise. - * src/powerpc/ffitarget.h: Likewise. - * src/powerpc/linux64.S: Likewise. - * src/powerpc/linux64_closure.S: Likewise. - * src/powerpc/ppc_closure.S: Likewise. - * src/powerpc/sysv.S: Likewise. - -2004-08-30 Anthony Green - - * Makefile.am: Add frv support. - * Makefile.in, testsuite/Makefile.in: Rebuilt. - * configure.ac: Read configure.host. - * configure.in: Read configure.host. - * configure.host: New file. frv-elf needs libgloss. - * include/ffi.h.in: Force ffi_closure to have a nice big (8) - alignment. This is needed to frv and shouldn't harm the others. - * include/ffi_common.h (ALIGN_DOWN): New macro. - * src/frv/ffi.c, src/frv/ffitarget.h, src/frv/eabi.S: New files. - -2004-08-24 David Daney - - * testsuite/libffi.call/closure_fn0.c: Xfail mips64* instead of mips*. - * testsuite/libffi.call/closure_fn1.c: Likewise. - * testsuite/libffi.call/closure_fn2.c Likewise. - * testsuite/libffi.call/closure_fn3.c: Likewise. - * testsuite/libffi.call/closure_fn4.c: Likewise. - * testsuite/libffi.call/closure_fn5.c: Likewise. - * testsuite/libffi.call/cls_18byte.c: Likewise. - * testsuite/libffi.call/cls_19byte.c: Likewise. - * testsuite/libffi.call/cls_1_1byte.c: Likewise. - * testsuite/libffi.call/cls_20byte.c: Likewise. - * testsuite/libffi.call/cls_20byte1.c: Likewise. - * testsuite/libffi.call/cls_24byte.c: Likewise. - * testsuite/libffi.call/cls_2byte.c: Likewise. - * testsuite/libffi.call/cls_3_1byte.c: Likewise. - * testsuite/libffi.call/cls_3byte1.c: Likewise. - * testsuite/libffi.call/cls_3byte2.c: Likewise. - * testsuite/libffi.call/cls_4_1byte.c: Likewise. - * testsuite/libffi.call/cls_4byte.c: Likewise. - * testsuite/libffi.call/cls_64byte.c: Likewise. - * testsuite/libffi.call/cls_6byte.c: Likewise. - * testsuite/libffi.call/cls_7byte.c: Likewise. - * testsuite/libffi.call/cls_8byte.c: Likewise. - * testsuite/libffi.call/cls_9byte1.c: Likewise. - * testsuite/libffi.call/cls_9byte2.c: Likewise. - * testsuite/libffi.call/cls_align_double.c: Likewise. - * testsuite/libffi.call/cls_align_float.c: Likewise. - * testsuite/libffi.call/cls_align_longdouble.c: Likewise. - * testsuite/libffi.call/cls_align_pointer.c: Likewise. - * testsuite/libffi.call/cls_align_sint16.c: Likewise. - * testsuite/libffi.call/cls_align_sint32.c: Likewise. - * testsuite/libffi.call/cls_align_sint64.c: Likewise. - * testsuite/libffi.call/cls_align_uint16.c: Likewise. - * testsuite/libffi.call/cls_align_uint32.c: Likewise. - * testsuite/libffi.call/cls_align_uint64.c: Likewise. - * testsuite/libffi.call/cls_double.c: Likewise. - * testsuite/libffi.call/cls_float.c: Likewise. - * testsuite/libffi.call/cls_multi_schar.c: Likewise. - * testsuite/libffi.call/cls_multi_sshort.c: Likewise. - * testsuite/libffi.call/cls_multi_sshortchar.c: Likewise. - * testsuite/libffi.call/cls_multi_uchar.c: Likewise. - * testsuite/libffi.call/cls_multi_ushort.c: Likewise. - * testsuite/libffi.call/cls_multi_ushortchar.c: Likewise. - * testsuite/libffi.call/cls_schar.c: Likewise. - * testsuite/libffi.call/cls_sint.c: Likewise. - * testsuite/libffi.call/cls_sshort.c: Likewise. - * testsuite/libffi.call/cls_uchar.c: Likewise. - * testsuite/libffi.call/cls_uint.c: Likewise. - * testsuite/libffi.call/cls_ulonglong.c: Likewise. - * testsuite/libffi.call/cls_ushort.c: Likewise. - * testsuite/libffi.call/nested_struct.c: Likewise. - * testsuite/libffi.call/nested_struct1.c: Likewise. - * testsuite/libffi.call/nested_struct2.c: Likewise. - * testsuite/libffi.call/nested_struct3.c: Likewise. - * testsuite/libffi.call/problem1.c: Likewise. - * testsuite/libffi.special/unwindtest.cc: Likewise. - * testsuite/libffi.call/cls_12byte.c: Likewise and set return value - to zero. - * testsuite/libffi.call/cls_16byte.c: Likewise. - * testsuite/libffi.call/cls_5byte.c: Likewise. - -2004-08-23 David Daney - - PR libgcj/13141 - * src/mips/ffitarget.h (FFI_O32_SOFT_FLOAT): New ABI. - * src/mips/ffi.c (ffi_prep_args): Fix alignment calculation. - (ffi_prep_cif_machdep): Handle FFI_O32_SOFT_FLOAT floating point - parameters and return types. - (ffi_call): Handle FFI_O32_SOFT_FLOAT ABI. - (ffi_prep_closure): Ditto. - (ffi_closure_mips_inner_O32): Handle FFI_O32_SOFT_FLOAT ABI, fix - alignment calculations. - * src/mips/o32.S (ffi_closure_O32): Don't use floating point - instructions if FFI_O32_SOFT_FLOAT, make stack frame ABI compliant. - -2004-08-14 Casey Marshall - - * src/mips/ffi.c (ffi_pref_cif_machdep): set `cif->flags' to - contain `FFI_TYPE_UINT64' as return type for any 64-bit - integer (O32 ABI only). - (ffi_prep_closure): new function. - (ffi_closure_mips_inner_O32): new function. - * src/mips/ffitarget.h: Define `FFI_CLOSURES' and - `FFI_TRAMPOLINE_SIZE' appropriately if the ABI is o32. - * src/mips/o32.S (ffi_call_O32): add labels for .eh_frame. Return - 64 bit integers correctly. - (ffi_closure_O32): new function. - Added DWARF-2 unwind info for both functions. - -2004-08-10 Andrew Haley - - * src/x86/ffi64.c (ffi_prep_args ): 8-align all stack arguments. - -2004-08-01 Robert Millan - - * configure.ac: Detect knetbsd-gnu and kfreebsd-gnu. - * configure: Regenerate. - -2004-07-30 Maciej W. Rozycki - - * acinclude.m4 (AC_FUNC_MMAP_BLACKLIST): Check for - and mmap() explicitly instead of relying on preset autoconf cache - variables. - * aclocal.m4: Regenerate. - * configure: Regenerate. - -2004-07-11 Ulrich Weigand - - * src/s390/ffi.c (ffi_prep_args): Fix C aliasing violation. - (ffi_check_float_struct): Remove unused prototype. - -2004-06-30 Geoffrey Keating - - * src/powerpc/ffi_darwin.c (flush_icache): ';' is a comment - character on Darwin, use '\n\t' instead. - -2004-06-26 Matthias Klose - - * libtool-version: Fix typo in revision/age. - -2004-06-17 Matthias Klose - - * libtool-version: New. - * Makefile.am (libffi_la_LDFLAGS): Use -version-info for soname. - * Makefile.in: Regenerate. - -2004-06-15 Paolo Bonzini - - * Makefile.am: Remove useless multilib rules. - * Makefile.in: Regenerate. - * aclocal.m4: Regenerate with automake 1.8.5. - * configure.ac: Remove useless multilib configury. - * configure: Regenerate. - -2004-06-15 Paolo Bonzini - - * .cvsignore: New file. - -2004-06-10 Jakub Jelinek - - * src/ia64/unix.S (ffi_call_unix): Insert group barrier break - fp_done. - (ffi_closure_UNIX): Fix f14/f15 adjustment if FLOAT_SZ is ever - changed from 8. - -2004-06-06 Sean McNeil - - * configure.ac: Add x86_64-*-freebsd* support. - * configure: Regenerate. - -2004-04-26 Joe Buck - - Bug 15093 - * configure.ac: Test for existence of mmap and sys/mman.h before - checking blacklist. Fix suggested by Jim Wilson. - * configure: Regenerate. - -2004-04-26 Matt Austern - - * src/powerpc/darwin.S: Go through a non-lazy pointer for initial - FDE location. - * src/powerpc/darwin_closure.S: Likewise. - -2004-04-24 Andreas Tobler - - * testsuite/libffi.call/cls_multi_schar.c (main): Fix initialization - error. Reported by Thomas Heller . - * testsuite/libffi.call/cls_multi_sshort.c (main): Likewise. - * testsuite/libffi.call/cls_multi_ushort.c (main): Likewise. - -2004-03-20 Matthias Klose - - * src/pa/linux.S: Fix typo. - -2004-03-19 Matthias Klose - - * Makefile.am: Update. - * Makefile.in: Regenerate. - * src/pa/ffi.h.in: Remove. - * src/pa/ffitarget.h: New file. - -2004-02-10 Randolph Chung - - * Makefile.am: Add PA support. - * Makefile.in: Regenerate. - * include/Makefile.in: Regenerate. - * configure.ac: Add PA target. - * configure: Regenerate. - * src/pa/ffi.c: New file. - * src/pa/ffi.h.in: Add PA support. - * src/pa/linux.S: New file. - * prep_cif.c: Add PA support. - -2004-03-16 Hosaka Yuji - - * src/types.c: Fix alignment size of X86_WIN32 case int64 and - double. - * src/x86/ffi.c (ffi_prep_args): Replace ecif->cif->rtype->type - with ecif->cif->flags. - (ffi_call, ffi_prep_incoming_args_SYSV): Replace cif->rtype->type - with cif->flags. - (ffi_prep_cif_machdep): Add X86_WIN32 struct case. - (ffi_closure_SYSV): Add 1 or 2-bytes struct case for X86_WIN32. - * src/x86/win32.S (retstruct1b, retstruct2b, sc_retstruct1b, - sc_retstruct2b): Add for 1 or 2-bytes struct case. - -2004-03-15 Kelley Cook - - * configure.in: Rename file to ... - * configure.ac: ... this. - * fficonfig.h.in: Regenerate. - * Makefile.in: Regenerate. - * include/Makefile.in: Regenerate. - * testsuite/Makefile.in: Regenerate. - -2004-03-12 Matt Austern - - * src/powerpc/darwin.S: Fix EH information so it corresponds to - changes in EH format resulting from addition of linkonce support. - * src/powerpc/darwin_closure.S: Likewise. - -2004-03-11 Andreas Tobler - Paolo Bonzini - - * Makefile.am (AUTOMAKE_OPTIONS): Set them. - Remove VPATH. Remove rules for object files. Remove multilib support. - (AM_CCASFLAGS): Add. - * configure.in (AC_CONFIG_HEADERS): Relace AM_CONFIG_HEADER. - (AC_PREREQ): Bump version to 2.59. - (AC_INIT): Fill with version info and bug address. - (ORIGINAL_LD_FOR_MULTILIBS): Remove. - (AM_ENABLE_MULTILIB): Use this instead of AC_ARG_ENABLE. - De-precious CC so that the right flags are passed down to multilibs. - (AC_MSG_ERROR): Replace obsolete macro AC_ERROR. - (AC_CONFIG_FILES): Replace obsolete macro AC_LINK_FILES. - (AC_OUTPUT): Reorganize the output with AC_CONFIG_COMMANDS. - * configure: Rebuilt. - * aclocal.m4: Likewise. - * Makefile.in, include/Makefile.in, testsuite/Makefile.in: Likewise. - * fficonfig.h.in: Likewise. - -2004-03-11 Andreas Schwab - - * src/ia64/ffi.c (ffi_prep_incoming_args_UNIX): Get floating point - arguments from fp registers only for the first 8 parameter slots. - Don't convert a float parameter when passed in memory. - -2004-03-09 Hans-Peter Nilsson - - * configure: Regenerate for config/accross.m4 correction. - -2004-02-25 Matt Kraai - - * src/powerpc/ffi.c (ffi_prep_args_SYSV): Change - ecif->cif->bytes to bytes. - (ffi_prep_cif_machdep): Add braces around nested if statement. - -2004-02-09 Alan Modra - - * src/types.c (pointer): POWERPC64 has 8 byte pointers. - - * src/powerpc/ffi.c (ffi_prep_args64): Correct long double handling. - (ffi_closure_helper_LINUX64): Fix typo. - * testsuite/libffi.call/cls_align_longdouble.c: Pass -mlong-double-128 - for powerpc64-*-*. - * testsuite/libffi.call/float.c: Likewise. - * testsuite/libffi.call/float2.c: Likewise. - -2004-02-08 Alan Modra - - * src/powerpc/ffi.c (ffi_prep_cif_machdep ): Correct - long double function return and long double arg handling. - (ffi_closure_helper_LINUX64): Formatting. Delete unused "ng" var. - Use "end_pfr" instead of "nf". Correct long double handling. - Localise "temp". - * src/powerpc/linux64.S (ffi_call_LINUX64): Save f2 long double - return value. - * src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Allocate - space for long double return value. Adjust stack frame and offsets. - Load f2 long double return. - -2004-02-07 Alan Modra - - * src/types.c: Use 16 byte long double for POWERPC64. - -2004-01-25 Eric Botcazou - - * src/sparc/ffi.c (ffi_prep_args_v9): Shift the parameter array - when the structure return address is passed in %o0. - (ffi_V9_return_struct): Rename into ffi_v9_layout_struct. - (ffi_v9_layout_struct): Align the field following a nested structure - on a word boundary. Use memmove instead of memcpy. - (ffi_call): Update call to ffi_V9_return_struct. - (ffi_prep_closure): Define 'ctx' only for V8. - (ffi_closure_sparc_inner): Clone into ffi_closure_sparc_inner_v8 - and ffi_closure_sparc_inner_v9. - (ffi_closure_sparc_inner_v8): Return long doubles by reference. - Always skip the structure return address. For structures and long - doubles, copy the argument directly. - (ffi_closure_sparc_inner_v9): Skip the structure return address only - if required. Shift the maximum floating-point slot accordingly. For - big structures, copy the argument directly; otherwise, left-justify the - argument and call ffi_v9_layout_struct to lay out the structure on - the stack. - * src/sparc/v8.S: Undef STACKFRAME before defining it. - (ffi_closure_v8): Pass the structure return address. Update call to - ffi_closure_sparc_inner_v8. Short-circuit FFI_TYPE_INT handling. - Skip the 'unimp' insn when returning long doubles and structures. - * src/sparc/v9.S: Undef STACKFRAME before defining it. - (ffi_closure_v9): Increase the frame size by 2 words. Short-circuit - FFI_TYPE_INT handling. Load structures both in integers and - floating-point registers on return. - * README: Update status of the SPARC port. - -2004-01-24 Andreas Tobler - - * testsuite/libffi.call/pyobjc-tc.c (main): Treat result value - as of type ffi_arg. - * testsuite/libffi.call/struct3.c (main): Fix CHECK. - -2004-01-22 Ulrich Weigand - - * testsuite/libffi.call/cls_uint.c (cls_ret_uint_fn): Treat result - value as of type ffi_arg, not unsigned int. - -2004-01-21 Michael Ritzert - - * ffi64.c (ffi_prep_args): Cast the RHS of an assignment instead - of the LHS. - -2004-01-12 Andreas Tobler - - * testsuite/lib/libffi-dg.exp: Set LD_LIBRARY_PATH_32 for - Solaris. - -2004-01-08 Rainer Orth - - * testsuite/libffi.call/ffitest.h (allocate_mmap): Cast MAP_FAILED - to void *. - -2003-12-10 Richard Henderson - - * testsuite/libffi.call/cls_align_pointer.c: Cast pointers to - size_t instead of int. - -2003-12-04 Hosaka Yuji - - * testsuite/libffi.call/many_win32.c: Include . - * testsuite/libffi.call/many_win32.c (main): Replace variable - int i with unsigned long ul. - - * testsuite/libffi.call/cls_align_uint64.c: New test case. - * testsuite/libffi.call/cls_align_sint64.c: Likewise. - * testsuite/libffi.call/cls_align_uint32.c: Likewise. - * testsuite/libffi.call/cls_align_sint32.c: Likewise. - * testsuite/libffi.call/cls_align_uint16.c: Likewise. - * testsuite/libffi.call/cls_align_sint16.c: Likewise. - * testsuite/libffi.call/cls_align_float.c: Likewise. - * testsuite/libffi.call/cls_align_double.c: Likewise. - * testsuite/libffi.call/cls_align_longdouble.c: Likewise. - * testsuite/libffi.call/cls_align_pointer.c: Likewise. - -2003-12-02 Hosaka Yuji - - PR other/13221 - * src/x86/ffi.c (ffi_prep_args, ffi_prep_incoming_args_SYSV): - Align arguments to 32 bits. - -2003-12-01 Andreas Tobler - - PR other/13221 - * testsuite/libffi.call/cls_multi_sshort.c: New test case. - * testsuite/libffi.call/cls_multi_sshortchar.c: Likewise. - * testsuite/libffi.call/cls_multi_uchar.c: Likewise. - * testsuite/libffi.call/cls_multi_schar.c: Likewise. - * testsuite/libffi.call/cls_multi_ushortchar.c: Likewise. - * testsuite/libffi.call/cls_multi_ushort.c: Likewise. - - * testsuite/libffi.special/unwindtest.cc: Cosmetics. - -2003-11-26 Kaveh R. Ghazi - - * testsuite/libffi.call/ffitest.h: Include . - * testsuite/libffi.special/ffitestcxx.h: Likewise. - -2003-11-22 Andreas Tobler - - * Makefile.in: Rebuilt. - * configure: Likewise. - * testsuite/libffi.special/unwindtest.cc: Convert the mmap to - the right type. - -2003-11-21 Andreas Jaeger - Andreas Tobler - - * acinclude.m4: Add AC_FUNC_MMAP_BLACKLIST. - * configure.in: Call AC_FUNC_MMAP_BLACKLIST. - * Makefile.in: Rebuilt. - * aclocal.m4: Likewise. - * configure: Likewise. - * fficonfig.h.in: Likewise. - * testsuite/lib/libffi-dg.exp: Add include dir. - * testsuite/libffi.call/ffitest.h: Add MMAP definitions. - * testsuite/libffi.special/ffitestcxx.h: Likewise. - * testsuite/libffi.call/closure_fn0.c: Use MMAP functionality - for ffi_closure if available. - * testsuite/libffi.call/closure_fn1.c: Likewise. - * testsuite/libffi.call/closure_fn2.c: Likewise. - * testsuite/libffi.call/closure_fn3.c: Likewise. - * testsuite/libffi.call/closure_fn4.c: Likewise. - * testsuite/libffi.call/closure_fn5.c: Likewise. - * testsuite/libffi.call/cls_12byte.c: Likewise. - * testsuite/libffi.call/cls_16byte.c: Likewise. - * testsuite/libffi.call/cls_18byte.c: Likewise. - * testsuite/libffi.call/cls_19byte.c: Likewise. - * testsuite/libffi.call/cls_1_1byte.c: Likewise. - * testsuite/libffi.call/cls_20byte.c: Likewise. - * testsuite/libffi.call/cls_20byte1.c: Likewise. - * testsuite/libffi.call/cls_24byte.c: Likewise. - * testsuite/libffi.call/cls_2byte.c: Likewise. - * testsuite/libffi.call/cls_3_1byte.c: Likewise. - * testsuite/libffi.call/cls_3byte1.c: Likewise. - * testsuite/libffi.call/cls_3byte2.c: Likewise. - * testsuite/libffi.call/cls_4_1byte.c: Likewise. - * testsuite/libffi.call/cls_4byte.c: Likewise. - * testsuite/libffi.call/cls_5byte.c: Likewise. - * testsuite/libffi.call/cls_64byte.c: Likewise. - * testsuite/libffi.call/cls_6byte.c: Likewise. - * testsuite/libffi.call/cls_7byte.c: Likewise. - * testsuite/libffi.call/cls_8byte.c: Likewise. - * testsuite/libffi.call/cls_9byte1.c: Likewise. - * testsuite/libffi.call/cls_9byte2.c: Likewise. - * testsuite/libffi.call/cls_double.c: Likewise. - * testsuite/libffi.call/cls_float.c: Likewise. - * testsuite/libffi.call/cls_schar.c: Likewise. - * testsuite/libffi.call/cls_sint.c: Likewise. - * testsuite/libffi.call/cls_sshort.c: Likewise. - * testsuite/libffi.call/cls_uchar.c: Likewise. - * testsuite/libffi.call/cls_uint.c: Likewise. - * testsuite/libffi.call/cls_ulonglong.c: Likewise. - * testsuite/libffi.call/cls_ushort.c: Likewise. - * testsuite/libffi.call/nested_struct.c: Likewise. - * testsuite/libffi.call/nested_struct1.c: Likewise. - * testsuite/libffi.call/nested_struct2.c: Likewise. - * testsuite/libffi.call/nested_struct3.c: Likewise. - * testsuite/libffi.call/problem1.c: Likewise. - * testsuite/libffi.special/unwindtest.cc: Likewise. - -2003-11-20 Andreas Tobler - - * testsuite/lib/libffi-dg.exp: Make the -lgcc_s conditional. - -2003-11-19 Andreas Tobler - - * testsuite/lib/libffi-dg.exp: Add DYLD_LIBRARY_PATH for darwin. - Add -lgcc_s to additional flags. - -2003-11-12 Andreas Tobler - - * configure.in, include/Makefile.am: PR libgcj/11147, install - the ffitarget.h header file in a gcc versioned and target - dependent place. - * configure: Regenerated. - * Makefile.in, include/Makefile.in: Likewise. - * testsuite/Makefile.in: Likewise. - -2003-11-09 Andreas Tobler - - * testsuite/libffi.call/closure_fn0.c: Print result and check - with dg-output to make debugging easier. - * testsuite/libffi.call/closure_fn1.c: Likewise. - * testsuite/libffi.call/closure_fn2.c: Likewise. - * testsuite/libffi.call/closure_fn3.c: Likewise. - * testsuite/libffi.call/closure_fn4.c: Likewise. - * testsuite/libffi.call/closure_fn5.c: Likewise. - * testsuite/libffi.call/cls_12byte.c: Likewise. - * testsuite/libffi.call/cls_16byte.c: Likewise. - * testsuite/libffi.call/cls_18byte.c: Likewise. - * testsuite/libffi.call/cls_19byte.c: Likewise. - * testsuite/libffi.call/cls_1_1byte.c: Likewise. - * testsuite/libffi.call/cls_20byte.c: Likewise. - * testsuite/libffi.call/cls_20byte1.c: Likewise. - * testsuite/libffi.call/cls_24byte.c: Likewise. - * testsuite/libffi.call/cls_2byte.c: Likewise. - * testsuite/libffi.call/cls_3_1byte.c: Likewise. - * testsuite/libffi.call/cls_3byte1.c: Likewise. - * testsuite/libffi.call/cls_3byte2.c: Likewise. - * testsuite/libffi.call/cls_4_1byte.c: Likewise. - * testsuite/libffi.call/cls_4byte.c: Likewise. - * testsuite/libffi.call/cls_5byte.c: Likewise. - * testsuite/libffi.call/cls_64byte.c: Likewise. - * testsuite/libffi.call/cls_6byte.c: Likewise. - * testsuite/libffi.call/cls_7byte.c: Likewise. - * testsuite/libffi.call/cls_8byte.c: Likewise. - * testsuite/libffi.call/cls_9byte1.c: Likewise. - * testsuite/libffi.call/cls_9byte2.c: Likewise. - * testsuite/libffi.call/cls_double.c: Likewise. - * testsuite/libffi.call/cls_float.c: Likewise. - * testsuite/libffi.call/cls_schar.c: Likewise. - * testsuite/libffi.call/cls_sint.c: Likewise. - * testsuite/libffi.call/cls_sshort.c: Likewise. - * testsuite/libffi.call/cls_uchar.c: Likewise. - * testsuite/libffi.call/cls_uint.c: Likewise. - * testsuite/libffi.call/cls_ulonglong.c: Likewise. - * testsuite/libffi.call/cls_ushort.c: Likewise. - * testsuite/libffi.call/problem1.c: Likewise. - - * testsuite/libffi.special/unwindtest.cc: Make ffi_closure - static. - -2003-11-08 Andreas Tobler - - * testsuite/libffi.call/cls_9byte2.c: New test case. - * testsuite/libffi.call/cls_9byte1.c: Likewise. - * testsuite/libffi.call/cls_64byte.c: Likewise. - * testsuite/libffi.call/cls_20byte1.c: Likewise. - * testsuite/libffi.call/cls_19byte.c: Likewise. - * testsuite/libffi.call/cls_18byte.c: Likewise. - * testsuite/libffi.call/closure_fn4.c: Likewise. - * testsuite/libffi.call/closure_fn5.c: Likewise. - * testsuite/libffi.call/cls_schar.c: Likewise. - * testsuite/libffi.call/cls_sint.c: Likewise. - * testsuite/libffi.call/cls_sshort.c: Likewise. - * testsuite/libffi.call/nested_struct2.c: Likewise. - * testsuite/libffi.call/nested_struct3.c: Likewise. - -2003-11-08 Andreas Tobler - - * testsuite/libffi.call/cls_double.c: Do a check on the result. - * testsuite/libffi.call/cls_uchar.c: Likewise. - * testsuite/libffi.call/cls_uint.c: Likewise. - * testsuite/libffi.call/cls_ulonglong.c: Likewise. - * testsuite/libffi.call/cls_ushort.c: Likewise. - * testsuite/libffi.call/return_sc.c: Cleanup whitespaces. - -2003-11-06 Andreas Tobler - - * src/prep_cif.c (ffi_prep_cif): Move the validity check after - the initialization. - -2003-10-23 Andreas Tobler - - * src/java_raw_api.c (ffi_java_ptrarray_to_raw): Replace - FFI_ASSERT(FALSE) with FFI_ASSERT(0). - -2003-10-22 David Daney - - * src/mips/ffitarget.h: Replace undefined UINT32 and friends with - __attribute__((__mode__(__SI__))) and friends. - -2003-10-22 Andreas Schwab - - * src/ia64/ffi.c: Replace FALSE/TRUE with false/true. - -2003-10-21 Andreas Tobler - - * configure.in: AC_LINK_FILES(ffitarget.h). - * configure: Regenerate. - * Makefile.in: Likewise. - * include/Makefile.in: Likewise. - * testsuite/Makefile.in: Likewise. - * fficonfig.h.in: Likewise. - -2003-10-21 Paolo Bonzini - Richard Henderson - - Avoid that ffi.h includes fficonfig.h. - - * Makefile.am (EXTRA_DIST): Include ffitarget.h files - (TARGET_SRC_MIPS_GCC): Renamed to TARGET_SRC_MIPS_IRIX. - (TARGET_SRC_MIPS_SGI): Removed. - (MIPS_GCC): Renamed to TARGET_SRC_MIPS_IRIX. - (MIPS_SGI): Removed. - (CLEANFILES): Removed. - (mostlyclean-am, clean-am, mostlyclean-sub, clean-sub): New - targets. - * acconfig.h: Removed. - * configure.in: Compute sizeofs only for double and long double. - Use them to define and subst HAVE_LONG_DOUBLE. Include comments - into AC_DEFINE instead of using acconfig.h. Create - include/ffitarget.h instead of include/fficonfig.h. Rename - MIPS_GCC to MIPS_IRIX, drop MIPS_SGI since we are in gcc's tree. - AC_DEFINE EH_FRAME_FLAGS. - * include/Makefile.am (DISTCLEANFILES): New automake macro. - (hack_DATA): Add ffitarget.h. - * include/ffi.h.in: Remove all system specific definitions. - Declare raw API even if it is not installed, why bother? - Use limits.h instead of SIZEOF_* to define ffi_type_*. Do - not define EH_FRAME_FLAGS, it is in fficonfig.h now. Include - ffitarget.h instead of fficonfig.h. Remove ALIGN macro. - (UINT_ARG, INT_ARG): Removed, use ffi_arg and ffi_sarg instead. - * include/ffi_common.h (bool): Do not define. - (ffi_assert): Accept failed assertion. - (ffi_type_test): Return void and accept file/line. - (FFI_ASSERT): Pass stringized failed assertion. - (FFI_ASSERT_AT): New macro. - (FFI_ASSERT_VALID_TYPE): New macro. - (UINT8, SINT8, UINT16, SINT16, UINT32, SINT32, - UINT64, SINT64): Define here with gcc's __attribute__ macro - instead of in ffi.h - (FLOAT32, ALIGN): Define here instead of in ffi.h - * include/ffi-mips.h: Removed. Its content moved to - src/mips/ffitarget.h after separating assembly and C sections. - * src/alpha/ffi.c, src/alpha/ffi.c, src/java_raw_api.c - src/prep_cif.c, src/raw_api.c, src/ia64/ffi.c, - src/mips/ffi.c, src/mips/n32.S, src/mips/o32.S, - src/mips/ffitarget.h, src/sparc/ffi.c, src/x86/ffi64.c: - SIZEOF_ARG -> FFI_SIZEOF_ARG. - * src/ia64/ffi.c: Include stdbool.h (provided by GCC 2.95+). - * src/debug.c (ffi_assert): Accept stringized failed assertion. - (ffi_type_test): Rewritten. - * src/prep-cif.c (initialize_aggregate, ffi_prep_cif): Call - FFI_ASSERT_VALID_TYPE. - * src/alpha/ffitarget.h, src/arm/ffitarget.h, - src/ia64/ffitarget.h, src/m68k/ffitarget.h, - src/mips/ffitarget.h, src/powerpc/ffitarget.h, - src/s390/ffitarget.h, src/sh/ffitarget.h, - src/sh64/ffitarget.h, src/sparc/ffitarget.h, - src/x86/ffitarget.h: New files. - * src/alpha/osf.S, src/arm/sysv.S, src/ia64/unix.S, - src/m68k/sysv.S, src/mips/n32.S, src/mips/o32.S, - src/powerpc/aix.S, src/powerpc/darwin.S, - src/powerpc/ffi_darwin.c, src/powerpc/linux64.S, - src/powerpc/linux64_closure.S, src/powerpc/ppc_closure.S, - src/powerpc/sysv.S, src/s390/sysv.S, src/sh/sysv.S, - src/sh64/sysv.S, src/sparc/v8.S, src/sparc/v9.S, - src/x86/sysv.S, src/x86/unix64.S, src/x86/win32.S: - include fficonfig.h - -2003-10-20 Rainer Orth - - * src/mips/ffi.c: Use _ABIN32, _ABIO32 instead of external - _MIPS_SIM_NABI32, _MIPS_SIM_ABI32. - -2003-10-19 Andreas Tobler - - * src/powerpc/ffi_darwin.c (ffi_prep_args): Declare bytes again. - Used when FFI_DEBUG = 1. - -2003-10-14 Alan Modra - - * src/types.c (double, longdouble): Default POWERPC64 to 8 byte size - and align. - -2003-10-06 Rainer Orth - - * include/ffi_mips.h: Define FFI_MIPS_N32 for N32/N64 ABIs, - FFI_MIPS_O32 for O32 ABI. - -2003-10-01 Andreas Tobler - - * testsuite/lib/libffi-dg.exp: Set LD_LIBRARY_PATH_64 for - SPARC64. Cleanup whitespaces. - -2003-09-19 Andreas Tobler - - * testsuite/libffi.call/closure_fn0.c: Xfail mips, arm, - strongarm, xscale. Cleanup whitespaces. - * testsuite/libffi.call/closure_fn1.c: Likewise. - * testsuite/libffi.call/closure_fn2.c: Likewise. - * testsuite/libffi.call/closure_fn3.c: Likewise. - * testsuite/libffi.call/cls_12byte.c: Likewise. - * testsuite/libffi.call/cls_16byte.c: Likewise. - * testsuite/libffi.call/cls_1_1byte.c: Likewise. - * testsuite/libffi.call/cls_20byte.c: Likewise. - * testsuite/libffi.call/cls_24byte.c: Likewise. - * testsuite/libffi.call/cls_2byte.c: Likewise. - * testsuite/libffi.call/cls_3_1byte.c: Likewise. - * testsuite/libffi.call/cls_3byte1.c: Likewise. - * testsuite/libffi.call/cls_3byte2.c: Likewise. - * testsuite/libffi.call/cls_4_1byte.c: Likewise. - * testsuite/libffi.call/cls_4byte.c: Likewise. - * testsuite/libffi.call/cls_5byte.c: Likewise. - * testsuite/libffi.call/cls_6byte.c: Likewise. - * testsuite/libffi.call/cls_7byte.c: Likewise. - * testsuite/libffi.call/cls_8byte.c: Likewise. - * testsuite/libffi.call/cls_double.c: Likewise. - * testsuite/libffi.call/cls_float.c: Likewise. - * testsuite/libffi.call/cls_uchar.c: Likewise. - * testsuite/libffi.call/cls_uint.c: Likewise. - * testsuite/libffi.call/cls_ulonglong.c: Likewise. - * testsuite/libffi.call/cls_ushort.c: Likewise. - * testsuite/libffi.call/nested_struct.c: Likewise. - * testsuite/libffi.call/nested_struct1.c: Likewise. - * testsuite/libffi.call/problem1.c: Likewise. - * testsuite/libffi.special/unwindtest.cc: Likewise. - * testsuite/libffi.call/pyobjc-tc.c: Cleanup whitespaces. - -2003-09-18 David Edelsohn - - * src/powerpc/aix.S: Cleanup whitespaces. - * src/powerpc/aix_closure.S: Likewise. - -2003-09-18 Andreas Tobler - - * src/powerpc/darwin.S: Cleanup whitespaces, comment formatting. - * src/powerpc/darwin_closure.S: Likewise. - * src/powerpc/ffi_darwin.c: Likewise. - -2003-09-18 Andreas Tobler - David Edelsohn - - * src/types.c (double): Add AIX and Darwin to the right TYPEDEF. - * src/powerpc/aix_closure.S: Remove the pointer to the outgoing - parameter stack. - * src/powerpc/darwin_closure.S: Likewise. - * src/powerpc/ffi_darwin.c (ffi_prep_args): Handle structures - according to the Darwin/AIX ABI. - (ffi_prep_cif_machdep): Likewise. - (ffi_closure_helper_DARWIN): Likewise. - Remove the outgoing parameter stack logic. Simplify the evaluation - of the different CASE types. - (ffi_prep_clousure): Avoid the casts on lvalues. Change the branch - statement in the trampoline code. - -2003-09-18 Kaz Kojima - - * src/sh/ffi.c (ffi_prep_args): Take account into the alignement - for the register size. - (ffi_closure_helper_SYSV): Handle the structure return value - address correctly. - (ffi_closure_helper_SYSV): Return the appropriate type when - the registers are used for the structure return value. - * src/sh/sysv.S (ffi_closure_SYSV): Fix the stack layout for - the 64-bit return value. Update copyright years. - -2003-09-17 Rainer Orth - - * testsuite/lib/libffi-dg.exp (libffi_target_compile): Search in - srcdir for ffi_mips.h. - -2003-09-12 Alan Modra - - * src/prep_cif.c (initialize_aggregate): Include tail padding in - structure size. - * src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Correct - placement of float result. - * testsuite/libffi.special/unwindtest.cc (closure_test_fn1): Correct - cast of "resp" for big-endian 64 bit machines. - -2003-09-11 Alan Modra - - * src/types.c (double, longdouble): Merge identical SH and ARM - typedefs, and add POWERPC64. - * src/powerpc/ffi.c (ffi_prep_args64): Correct next_arg calc for - struct split over gpr and rest. - (ffi_prep_cif_machdep): Correct intarg_count for structures. - * src/powerpc/linux64.S (ffi_call_LINUX64): Fix gpr offsets. - -2003-09-09 Andreas Tobler - - * src/powerpc/ffi.c (ffi_closure_helper_SYSV) Handle struct - passing correctly. - -2003-09-09 Alan Modra - - * configure: Regenerate. - -2003-09-04 Andreas Tobler - - * Makefile.am: Remove build rules for ffitest. - * Makefile.in: Rebuilt. - -2003-09-04 Andreas Tobler - - * src/java_raw_api.c: Include to fix compiler warning - about implicit declaration of abort(). - -2003-09-04 Andreas Tobler - - * Makefile.am: Add dejagnu test framework. Fixes PR other/11411. - * Makefile.in: Rebuilt. - * configure.in: Add dejagnu test framework. - * configure: Rebuilt. - - * testsuite/Makefile.am: New file. - * testsuite/Makefile.in: Built - * testsuite/lib/libffi-dg.exp: New file. - * testsuite/config/default.exp: Likewise. - * testsuite/libffi.call/call.exp: Likewise. - * testsuite/libffi.call/ffitest.h: Likewise. - * testsuite/libffi.call/closure_fn0.c: Likewise. - * testsuite/libffi.call/closure_fn1.c: Likewise. - * testsuite/libffi.call/closure_fn2.c: Likewise. - * testsuite/libffi.call/closure_fn3.c: Likewise. - * testsuite/libffi.call/cls_1_1byte.c: Likewise. - * testsuite/libffi.call/cls_3_1byte.c: Likewise. - * testsuite/libffi.call/cls_4_1byte.c: Likewise. - * testsuite/libffi.call/cls_2byte.c: Likewise. - * testsuite/libffi.call/cls_3byte1.c: Likewise. - * testsuite/libffi.call/cls_3byte2.c: Likewise. - * testsuite/libffi.call/cls_4byte.c: Likewise. - * testsuite/libffi.call/cls_5byte.c: Likewise. - * testsuite/libffi.call/cls_6byte.c: Likewise. - * testsuite/libffi.call/cls_7byte.c: Likewise. - * testsuite/libffi.call/cls_8byte.c: Likewise. - * testsuite/libffi.call/cls_12byte.c: Likewise. - * testsuite/libffi.call/cls_16byte.c: Likewise. - * testsuite/libffi.call/cls_20byte.c: Likewise. - * testsuite/libffi.call/cls_24byte.c: Likewise. - * testsuite/libffi.call/cls_double.c: Likewise. - * testsuite/libffi.call/cls_float.c: Likewise. - * testsuite/libffi.call/cls_uchar.c: Likewise. - * testsuite/libffi.call/cls_uint.c: Likewise. - * testsuite/libffi.call/cls_ulonglong.c: Likewise. - * testsuite/libffi.call/cls_ushort.c: Likewise. - * testsuite/libffi.call/float.c: Likewise. - * testsuite/libffi.call/float1.c: Likewise. - * testsuite/libffi.call/float2.c: Likewise. - * testsuite/libffi.call/many.c: Likewise. - * testsuite/libffi.call/many_win32.c: Likewise. - * testsuite/libffi.call/nested_struct.c: Likewise. - * testsuite/libffi.call/nested_struct1.c: Likewise. - * testsuite/libffi.call/pyobjc-tc.c: Likewise. - * testsuite/libffi.call/problem1.c: Likewise. - * testsuite/libffi.call/promotion.c: Likewise. - * testsuite/libffi.call/return_ll.c: Likewise. - * testsuite/libffi.call/return_sc.c: Likewise. - * testsuite/libffi.call/return_uc.c: Likewise. - * testsuite/libffi.call/strlen.c: Likewise. - * testsuite/libffi.call/strlen_win32.c: Likewise. - * testsuite/libffi.call/struct1.c: Likewise. - * testsuite/libffi.call/struct2.c: Likewise. - * testsuite/libffi.call/struct3.c: Likewise. - * testsuite/libffi.call/struct4.c: Likewise. - * testsuite/libffi.call/struct5.c: Likewise. - * testsuite/libffi.call/struct6.c: Likewise. - * testsuite/libffi.call/struct7.c: Likewise. - * testsuite/libffi.call/struct8.c: Likewise. - * testsuite/libffi.call/struct9.c: Likewise. - * testsuite/libffi.special/special.exp: New file. - * testsuite/libffi.special/ffitestcxx.h: Likewise. - * testsuite/libffi.special/unwindtest.cc: Likewise. - - -2003-08-13 Kaz Kojima - - * src/sh/ffi.c (OFS_INT16): Set 0 for little endian case. Update - copyright years. - -2003-08-02 Alan Modra - - * src/powerpc/ffi.c (ffi_prep_args64): Modify for changed gcc - structure passing. - (ffi_closure_helper_LINUX64): Likewise. - * src/powerpc/linux64.S: Remove code writing to parm save area. - * src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Use return - address in lr from ffi_closure_helper_LINUX64 call to calculate - table address. Optimize function tail. - -2003-07-28 Andreas Tobler - - * src/sparc/ffi.c: Handle all floating point registers. - * src/sparc/v9.S: Likewise. Fixes second part of PR target/11410. - -2003-07-11 Gerald Pfeifer - - * README: Note that libffi is not part of GCC. Update the project - URL and status. - -2003-06-19 Franz Sirl - - * src/powerpc/ppc_closure.S: Include ffi.h. - -2003-06-13 Rainer Orth - - * src/x86/sysv.S: Avoid gas-only .uleb128/.sleb128 directives. - Use C style comments. - -2003-06-13 Kaz Kojima - - * Makefile.am: Add SHmedia support. Fix a typo of SH support. - * Makefile.in: Regenerate. - * configure.in (sh64-*-linux*, sh5*-*-linux*): Add target. - * configure: Regenerate. - * include/ffi.h.in: Add SHmedia support. - * src/sh64/ffi.c: New file. - * src/sh64/sysv.S: New file. - -2003-05-16 Jakub Jelinek - - * configure.in (HAVE_RO_EH_FRAME): Check whether .eh_frame section - should be read-only. - * configure: Rebuilt. - * fficonfig.h.in: Rebuilt. - * include/ffi.h.in (EH_FRAME_FLAGS): Define. - * src/alpha/osf.S: Use EH_FRAME_FLAGS. - * src/powerpc/linux64.S: Likewise. - * src/powerpc/linux64_closure.S: Likewise. Include ffi.h. - * src/powerpc/sysv.S: Use EH_FRAME_FLAGS. Use pcrel encoding - if -fpic/-fPIC/-mrelocatable. - * src/powerpc/powerpc_closure.S: Likewise. - * src/sparc/v8.S: If HAVE_RO_EH_FRAME is defined, don't include - #write in .eh_frame flags. - * src/sparc/v9.S: Likewise. - * src/x86/unix64.S: Use EH_FRAME_FLAGS. - * src/x86/sysv.S: Likewise. Use pcrel encoding if -fpic/-fPIC. - * src/s390/sysv.S: Use EH_FRAME_FLAGS. Include ffi.h. - -2003-05-07 Jeff Sturm - - Fixes PR bootstrap/10656 - * configure.in (HAVE_AS_REGISTER_PSEUDO_OP): Test assembler - support for .register pseudo-op. - * src/sparc/v8.S: Use it. - * fficonfig.h.in: Rebuilt. - * configure: Rebuilt. - -2003-04-18 Jakub Jelinek - - * include/ffi.h.in (POWERPC64): Define if 64-bit. - (enum ffi_abi): Add FFI_LINUX64 on POWERPC. - Make it the default on POWERPC64. - (FFI_TRAMPOLINE_SIZE): Define to 24 on POWERPC64. - * configure.in: Change powerpc-*-linux* into powerpc*-*-linux*. - * configure: Rebuilt. - * src/powerpc/ffi.c (hidden): Define. - (ffi_prep_args_SYSV): Renamed from - ffi_prep_args. Cast pointers to unsigned long to shut up warnings. - (NUM_GPR_ARG_REGISTERS64, NUM_FPR_ARG_REGISTERS64, - ASM_NEEDS_REGISTERS64): New. - (ffi_prep_args64): New function. - (ffi_prep_cif_machdep): Handle FFI_LINUX64 ABI. - (ffi_call): Likewise. - (ffi_prep_closure): Likewise. - (flush_icache): Surround by #ifndef POWERPC64. - (ffi_dblfl): New union type. - (ffi_closure_helper_SYSV): Use it to avoid aliasing problems. - (ffi_closure_helper_LINUX64): New function. - * src/powerpc/ppc_closure.S: Surround whole file by #ifndef - __powerpc64__. - * src/powerpc/sysv.S: Likewise. - (ffi_call_SYSV): Rename ffi_prep_args to ffi_prep_args_SYSV. - * src/powerpc/linux64.S: New file. - * src/powerpc/linux64_closure.S: New file. - * Makefile.am (EXTRA_DIST): Add src/powerpc/linux64.S and - src/powerpc/linux64_closure.S. - (TARGET_SRC_POWERPC): Likewise. - - * src/ffitest.c (closure_test_fn, closure_test_fn1, closure_test_fn2, - closure_test_fn3): Fix result printing on big-endian 64-bit - machines. - (main): Print tst2_arg instead of uninitialized tst2_result. - - * src/ffitest.c (main): Hide what closure pointer really points to - from the compiler. - -2003-04-16 Richard Earnshaw - - * configure.in (arm-*-netbsdelf*): Add configuration. - (configure): Regenerated. - -2003-04-04 Loren J. Rittle - - * include/Makefile.in: Regenerate. - -2003-03-21 Zdenek Dvorak - - * libffi/include/ffi.h.in: Define X86 instead of X86_64 in 32 - bit mode. - * libffi/src/x86/ffi.c (ffi_closure_SYSV, ffi_closure_raw_SYSV): - Receive closure pointer through parameter, read args using - __builtin_dwarf_cfa. - (FFI_INIT_TRAMPOLINE): Send closure reference through eax. - -2003-03-12 Andreas Schwab - - * configure.in: Avoid trailing /. in toolexeclibdir. - * configure: Rebuilt. - -2003-03-03 Andreas Tobler - - * src/powerpc/darwin_closure.S: Recode to fit dynamic libraries. - -2003-02-06 Andreas Tobler - - * libffi/src/powerpc/darwin_closure.S: - Fix alignement bug, allocate 8 bytes for the result. - * libffi/src/powerpc/aix_closure.S: - Likewise. - * libffi/src/powerpc/ffi_darwin.c: - Update stackframe description for aix/darwin_closure.S. - -2003-02-06 Jakub Jelinek - - * src/s390/ffi.c (ffi_closure_helper_SYSV): Add hidden visibility - attribute. - -2003-01-31 Christian Cornelssen , - Andreas Schwab - - * configure.in: Adjust command to source config-ml.in to account - for changes to the libffi_basedir definition. - (libffi_basedir): Remove ${srcdir} from value and include trailing - slash if nonempty. - - * configure: Regenerate. - -2003-01-29 Franz Sirl - - * src/powerpc/ppc_closure.S: Recode to fit shared libs. - -2003-01-28 Andrew Haley - - * include/ffi.h.in: Enable FFI_CLOSURES for x86_64. - * src/x86/ffi64.c (ffi_prep_closure): New. - (ffi_closure_UNIX64_inner): New. - * src/x86/unix64.S (ffi_closure_UNIX64): New. - -2003-01-27 Alexandre Oliva - - * configure.in (toolexecdir, toolexeclibdir): Set and AC_SUBST. - Remove USE_LIBDIR conditional. - * Makefile.am (toolexecdir, toolexeclibdir): Don't override. - * Makefile.in, configure: Rebuilt. - -2003-01027 David Edelsohn - - * Makefile.am (TARGET_SRC_POWERPC_AIX): Fix typo. - * Makefile.in: Regenerate. - -2003-01-22 Andrew Haley - - * src/powerpc/darwin.S (_ffi_call_AIX): Add Augmentation size to - unwind info. - -2003-01-21 Andreas Tobler - - * src/powerpc/darwin.S: Add unwind info. - * src/powerpc/darwin_closure.S: Likewise. - -2003-01-14 Andrew Haley - - * src/x86/ffi64.c (ffi_prep_args): Check for void retval. - (ffi_prep_cif_machdep): Likewise. - * src/x86/unix64.S: Add unwind info. - -2003-01-14 Andreas Jaeger - - * src/ffitest.c (main): Only use ffi_closures if those are - supported. - -2003-01-13 Andreas Tobler - - * libffi/src/ffitest.c - add closure testcases - -2003-01-13 Kevin B. Hendricks - - * libffi/src/powerpc/ffi.c - fix alignment bug for float (4 byte aligned iso 8 byte) - -2003-01-09 Geoffrey Keating - - * src/powerpc/ffi_darwin.c: Remove RCS version string. - * src/powerpc/darwin.S: Remove RCS version string. - -2003-01-03 Jeff Sturm - - * include/ffi.h.in: Add closure defines for SPARC, SPARC64. - * src/ffitest.c (main): Use static storage for closure. - * src/sparc/ffi.c (ffi_prep_closure, ffi_closure_sparc_inner): New. - * src/sparc/v8.S (ffi_closure_v8): New. - * src/sparc/v9.S (ffi_closure_v9): New. - -2002-11-10 Ranjit Mathew - - * include/ffi.h.in: Added FFI_STDCALL ffi_type - enumeration for X86_WIN32. - * src/x86/win32.S: Added ffi_call_STDCALL function - definition. - * src/x86/ffi.c (ffi_call/ffi_raw_call): Added - switch cases for recognising FFI_STDCALL and - calling ffi_call_STDCALL if target is X86_WIN32. - * src/ffitest.c (my_stdcall_strlen/stdcall_many): - stdcall versions of the "my_strlen" and "many" - test functions (for X86_WIN32). - Added test cases to test stdcall invocation using - these functions. - -2002-12-02 Kaz Kojima - - * src/sh/sysv.S: Add DWARF2 unwind info. - -2002-11-27 Ulrich Weigand - - * src/s390/sysv.S (.eh_frame section): Make section read-only. - -2002-11-26 Jim Wilson - - * src/types.c (FFI_TYPE_POINTER): Has size 8 on IA64. - -2002-11-23 H.J. Lu - - * acinclude.m4: Add dummy AM_PROG_LIBTOOL. - Include ../config/accross.m4. - * aclocal.m4; Rebuild. - * configure: Likewise. - -2002-11-15 Ulrich Weigand - - * src/s390/sysv.S (.eh_frame section): Adapt to pcrel FDE encoding. - -2002-11-11 DJ Delorie - - * configure.in: Look for common files in the right place. - -2002-10-08 Ulrich Weigand - - * src/java_raw_api.c (ffi_java_raw_to_ptrarray): Interpret - raw data as _Jv_word values, not ffi_raw. - (ffi_java_ptrarray_to_raw): Likewise. - (ffi_java_rvalue_to_raw): New function. - (ffi_java_raw_call): Call it. - (ffi_java_raw_to_rvalue): New function. - (ffi_java_translate_args): Call it. - * src/ffitest.c (closure_test_fn): Interpret return value - as ffi_arg, not int. - * src/s390/ffi.c (ffi_prep_cif_machdep): Add missing - FFI_TYPE_POINTER case. - (ffi_closure_helper_SYSV): Likewise. Also, assume return - values extended to word size. - -2002-10-02 Andreas Jaeger - - * src/x86/ffi64.c (ffi_prep_cif_machdep): Remove debug output. - -2002-10-01 Bo Thorsen - - * include/ffi.h.in: Fix i386 win32 compilation. - -2002-09-30 Ulrich Weigand - - * configure.in: Add s390x-*-linux-* target. - * configure: Regenerate. - * include/ffi.h.in: Define S390X for s390x targets. - (FFI_CLOSURES): Define for s390/s390x. - (FFI_TRAMPOLINE_SIZE): Likewise. - (FFI_NATIVE_RAW_API): Likewise. - * src/prep_cif.c (ffi_prep_cif): Do not compute stack space for s390. - * src/types.c (FFI_TYPE_POINTER): Use 8-byte pointers on s390x. - * src/s390/ffi.c: Major rework of existing code. Add support for - s390x targets. Add closure support. - * src/s390/sysv.S: Likewise. - -2002-09-29 Richard Earnshaw - - * src/arm/sysv.S: Fix typo. - -2002-09-28 Richard Earnshaw - - * src/arm/sysv.S: If we don't have machine/asm.h and the pre-processor - has defined __USER_LABEL_PREFIX__, then use it in CNAME. - (ffi_call_SYSV): Handle soft-float. - -2002-09-27 Bo Thorsen - - * include/ffi.h.in: Fix multilib x86-64 support. - -2002-09-22 Kaveh R. Ghazi - - * Makefile.am (all-multi): Fix multilib parallel build. - -2002-07-19 Kaz Kojima - - * configure.in (sh[34]*-*-linux*): Add brackets. - * configure: Regenerate. - -2002-07-18 Kaz Kojima - - * Makefile.am: Add SH support. - * Makefile.in: Regenerate. - * configure.in (sh-*-linux*, sh[34]*-*-linux*): Add target. - * configure: Regenerate. - * include/ffi.h.in: Add SH support. - * src/sh/ffi.c: New file. - * src/sh/sysv.S: New file. - * src/types.c: Add SH support. - -2002-07-16 Bo Thorsen - - * src/x86/ffi64.c: New file that adds x86-64 support. - * src/x86/unix64.S: New file that handles argument setup for - x86-64. - * src/x86/sysv.S: Don't use this on x86-64. - * src/x86/ffi.c: Don't use this on x86-64. - Remove unused vars. - * src/prep_cif.c (ffi_prep_cif): Don't do stack size calculation - for x86-64. - * src/ffitest.c (struct6): New test that tests a special case in - the x86-64 ABI. - (struct7): Likewise. - (struct8): Likewise. - (struct9): Likewise. - (closure_test_fn): Silence warning about this when it's not used. - (main): Add the new tests. - (main): Fix a couple of wrong casts and silence some compiler warnings. - * include/ffi.h.in: Add x86-64 ABI definition. - * fficonfig.h.in: Regenerate. - * Makefile.am: Add x86-64 support. - * configure.in: Likewise. - * Makefile.in: Regenerate. - * configure: Likewise. - -2002-06-24 Bo Thorsen - - * src/types.c: Merge settings for similar architectures. - Add x86-64 sizes and alignments. - -2002-06-23 Bo Thorsen - - * src/arm/ffi.c (ffi_prep_args): Remove unused vars. - * src/sparc/ffi.c (ffi_prep_args_v8): Likewise. - * src/mips/ffi.c (ffi_prep_args): Likewise. - * src/m68k/ffi.c (ffi_prep_args): Likewise. - -2002-07-18 H.J. Lu (hjl@gnu.org) - - * Makefile.am (TARGET_SRC_MIPS_LINUX): New. - (libffi_la_SOURCES): Support MIPS_LINUX. - (libffi_convenience_la_SOURCES): Likewise. - * Makefile.in: Regenerated. - - * configure.in (mips64*-*): Skip. - (mips*-*-linux*): New. - * configure: Regenerated. - - * src/mips/ffi.c: Include . - -2002-06-06 Ulrich Weigand - - * src/s390/sysv.S: Save/restore %r6. Add DWARF-2 unwind info. - -2002-05-27 Roger Sayle - - * src/x86/ffi.c (ffi_prep_args): Remove reference to avn. - -2002-05-27 Bo Thorsen - - * src/x86/ffi.c (ffi_prep_args): Remove unused variable and - fix formatting. - -2002-05-13 Andreas Tobler - - * src/powerpc/ffi_darwin.c (ffi_prep_closure): Declare fd at - beginning of function (for older apple cc). - -2002-05-08 Alexandre Oliva - - * configure.in (ORIGINAL_LD_FOR_MULTILIBS): Preserve LD at - script entry, and set LD to it when configuring multilibs. - * configure: Rebuilt. - -2002-05-05 Jason Thorpe - - * configure.in (sparc64-*-netbsd*): Add target. - (sparc-*-netbsdelf*): Likewise. - * configure: Regenerate. - -2002-04-28 David S. Miller - - * configure.in, configure: Fix SPARC test in previous change. - -2002-04-29 Gerhard Tonn - - * Makefile.am: Add Linux for S/390 support. - * Makefile.in: Regenerate. - * configure.in: Add Linux for S/390 support. - * configure: Regenerate. - * include/ffi.h.in: Add Linux for S/390 support. - * src/s390/ffi.c: New file from libffi CVS tree. - * src/s390/sysv.S: New file from libffi CVS tree. - -2002-04-28 Jakub Jelinek - - * configure.in (HAVE_AS_SPARC_UA_PCREL): Check for working - %r_disp32(). - * src/sparc/v8.S: Use it. - * src/sparc/v9.S: Likewise. - * fficonfig.h.in: Rebuilt. - * configure: Rebuilt. - -2002-04-08 Hans Boehm - - * src/java_raw_api.c (ffi_java_raw_size): Handle FFI_TYPE_DOUBLE - correctly. - * src/ia64/unix.S: Add unwind information. Fix comments. - Save sp in a way that's compatible with unwind info. - (ffi_call_unix): Correctly restore sp in all cases. - * src/ia64/ffi.c: Add, fix comments. - -2002-04-08 Jakub Jelinek - - * src/sparc/v8.S: Make .eh_frame dependent on target word size. - -2002-04-06 Jason Thorpe - - * configure.in (alpha*-*-netbsd*): Add target. - * configure: Regenerate. - -2002-04-04 Jeff Sturm - - * src/sparc/v8.S: Add unwind info. - * src/sparc/v9.S: Likewise. - -2002-03-30 Krister Walfridsson - - * configure.in: Enable i*86-*-netbsdelf*. - * configure: Rebuilt. - -2002-03-29 David Billinghurst - - PR other/2620 - * src/mips/n32.s: Delete - * src/mips/o32.s: Delete - -2002-03-21 Loren J. Rittle - - * configure.in: Enable alpha*-*-freebsd*. - * configure: Rebuilt. - -2002-03-17 Bryce McKinlay - - * Makefile.am: libfficonvenience -> libffi_convenience. - * Makefile.in: Rebuilt. - - * Makefile.am: Define ffitest_OBJECTS. - * Makefile.in: Rebuilt. - -2002-03-07 Andreas Tobler - David Edelsohn - - * Makefile.am (EXTRA_DIST): Add Darwin and AIX closure files. - (TARGET_SRC_POWERPC_AIX): Add aix_closure.S. - (TARGET_SRC_POWERPC_DARWIN): Add darwin_closure.S. - * Makefile.in: Regenerate. - * include/ffi.h.in: Add AIX and Darwin closure definitions. - * src/powerpc/ffi_darwin.c (ffi_prep_closure): New function. - (flush_icache, flush_range): New functions. - (ffi_closure_helper_DARWIN): New function. - * src/powerpc/aix_closure.S: New file. - * src/powerpc/darwin_closure.S: New file. - -2002-02-24 Jeff Sturm - - * include/ffi.h.in: Add typedef for ffi_arg. - * src/ffitest.c (main): Declare rint with ffi_arg. - -2002-02-21 Andreas Tobler - - * src/powerpc/ffi_darwin.c (ffi_prep_args): Skip appropriate - number of GPRs for floating-point arguments. - -2002-01-31 Anthony Green - - * configure: Rebuilt. - * configure.in: Replace CHECK_SIZEOF and endian tests with - cross-compiler friendly macros. - * aclocal.m4 (AC_COMPILE_CHECK_SIZEOF, AC_C_BIGENDIAN_CROSS): New - macros. - -2002-01-18 David Edelsohn - - * src/powerpc/darwin.S (_ffi_call_AIX): New. - * src/powerpc/aix.S (ffi_call_DARWIN): New. - -2002-01-17 David Edelsohn - - * Makefile.am (EXTRA_DIST): Add Darwin and AIX files. - (TARGET_SRC_POWERPC_AIX): New. - (POWERPC_AIX): New stanza. - * Makefile.in: Regenerate. - * configure.in: Add AIX case. - * configure: Regenerate. - * include/ffi.h.in (ffi_abi): Add FFI_AIX. - * src/powerpc/ffi_darwin.c (ffi_status): Use "long" to scale frame - size. Fix "long double" support. - (ffi_call): Add FFI_AIX case. - * src/powerpc/aix.S: New. - -2001-10-09 John Hornkvist - - Implement Darwin PowerPC ABI. - * configure.in: Handle powerpc-*-darwin*. - * Makefile.am: Set source files for POWERPC_DARWIN. - * configure: Rebuilt. - * Makefile.in: Rebuilt. - * include/ffi.h.in: Define FFI_DARWIN and FFI_DEFAULT_ABI for - POWERPC_DARWIN. - * src/powerpc/darwin.S: New file. - * src/powerpc/ffi_darwin.c: New file. - -2001-10-07 Joseph S. Myers - - * src/x86/ffi.c: Fix spelling error of "separate" as "seperate". - -2001-07-16 Rainer Orth - - * src/x86/sysv.S: Avoid gas-only .balign directive. - Use C style comments. - -2001-07-16 Rainer Orth - - * src/alpha/ffi.c (ffi_prep_closure): Avoid gas-only mnemonic. - Fixes PR bootstrap/3563. - -2001-06-26 Rainer Orth - - * src/alpha/osf.S (ffi_closure_osf): Use .rdata for ECOFF. - -2001-06-25 Rainer Orth - - * configure.in: Recognize sparc*-sun-* host. - * configure: Regenerate. - -2001-06-06 Andrew Haley - - * src/alpha/osf.S (__FRAME_BEGIN__): Conditionalize for ELF. - -2001-06-03 Andrew Haley - - * src/alpha/osf.S: Add unwind info. - * src/powerpc/sysv.S: Add unwind info. - * src/powerpc/ppc_closure.S: Likewise. - -2000-05-31 Jeff Sturm - - * configure.in: Fix AC_ARG_ENABLE usage. - * configure: Rebuilt. - -2001-05-06 Bryce McKinlay - - * configure.in: Remove warning about beta code. - * configure: Rebuilt. - -2001-04-25 Hans Boehm - - * src/ia64/unix.S: Restore stack pointer when returning from - ffi_closure_UNIX. - * src/ia64/ffi.c: Fix typo in comment. - -2001-04-18 Jim Wilson - - * src/ia64/unix.S: Delete unnecessary increment and decrement of loc2 - to eliminate RAW DV. - -2001-04-12 Bryce McKinlay - - * Makefile.am: Make a libtool convenience library. - * Makefile.in: Rebuilt. - -2001-03-29 Bryce McKinlay - - * configure.in: Use different syntax for subdirectory creation. - * configure: Rebuilt. - -2001-03-27 Jon Beniston - - * configure.in: Added X86_WIN32 target (Win32, CygWin, MingW). - * configure: Rebuilt. - * Makefile.am: Added X86_WIN32 target support. - * Makefile.in: Rebuilt. - - * include/ffi.h.in: Added X86_WIN32 target support. - - * src/ffitest.c: Doesn't run structure tests for X86_WIN32 targets. - * src/types.c: Added X86_WIN32 target support. - - * src/x86/win32.S: New file. Based on sysv.S, but with EH - stuff removed and made to work with CygWin's gas. - -2001-03-26 Bryce McKinlay - - * configure.in: Make target subdirectory in build dir. - * Makefile.am: Override suffix based rules to specify correct output - subdirectory. - * Makefile.in: Rebuilt. - * configure: Rebuilt. - -2001-03-23 Kevin B Hendricks - - * src/powerpc/ppc_closure.S: New file. - * src/powerpc/ffi.c (ffi_prep_args): Fixed ABI compatibility bug - involving long long and register pairs. - (ffi_prep_closure): New function. - (flush_icache): Likewise. - (ffi_closure_helper_SYSV): Likewise. - * include/ffi.h.in (FFI_CLOSURES): Define on PPC. - (FFI_TRAMPOLINE_SIZE): Likewise. - (FFI_NATIVE_RAW_API): Likewise. - * Makefile.in: Rebuilt. - * Makefile.am (EXTRA_DIST): Added src/powerpc/ppc_closure.S. - (TARGET_SRC_POWERPC): Likewise. - -2001-03-19 Tom Tromey - - * Makefile.in: Rebuilt. - * Makefile.am (ffitest_LDFLAGS): New macro. - -2001-03-02 Nick Clifton - - * include/ffi.h.in: Remove RCS ident string. - * include/ffi_mips.h: Remove RCS ident string. - * src/debug.c: Remove RCS ident string. - * src/ffitest.c: Remove RCS ident string. - * src/prep_cif.c: Remove RCS ident string. - * src/types.c: Remove RCS ident string. - * src/alpha/ffi.c: Remove RCS ident string. - * src/alpha/osf.S: Remove RCS ident string. - * src/arm/ffi.c: Remove RCS ident string. - * src/arm/sysv.S: Remove RCS ident string. - * src/mips/ffi.c: Remove RCS ident string. - * src/mips/n32.S: Remove RCS ident string. - * src/mips/o32.S: Remove RCS ident string. - * src/sparc/ffi.c: Remove RCS ident string. - * src/sparc/v8.S: Remove RCS ident string. - * src/sparc/v9.S: Remove RCS ident string. - * src/x86/ffi.c: Remove RCS ident string. - * src/x86/sysv.S: Remove RCS ident string. - -2001-02-08 Joseph S. Myers - - * include/ffi.h.in: Change sourceware.cygnus.com references to - gcc.gnu.org. - -2000-12-09 Richard Henderson - - * src/alpha/ffi.c (ffi_call): Simplify struct return test. - (ffi_closure_osf_inner): Index rather than increment avalue - and arg_types. Give ffi_closure_osf the raw return value type. - * src/alpha/osf.S (ffi_closure_osf): Handle return value type - promotion. - -2000-12-07 Richard Henderson - - * src/raw_api.c (ffi_translate_args): Fix typo. - (ffi_prep_closure): Likewise. - - * include/ffi.h.in [ALPHA]: Define FFI_CLOSURES and - FFI_TRAMPOLINE_SIZE. - * src/alpha/ffi.c (ffi_prep_cif_machdep): Adjust minimal - cif->bytes for new ffi_call_osf implementation. - (ffi_prep_args): Absorb into ... - (ffi_call): ... here. Do all stack allocation here and - avoid a callback function. - (ffi_prep_closure, ffi_closure_osf_inner): New. - * src/alpha/osf.S (ffi_call_osf): Reimplement with no callback. - (ffi_closure_osf): New. - -2000-09-10 Alexandre Oliva - - * config.guess, config.sub, install-sh: Removed. - * ltconfig, ltmain.sh, missing, mkinstalldirs: Likewise. - * Makefile.in: Rebuilt. - - * acinclude.m4: Include libtool macros from the top level. - * aclocal.m4, configure: Rebuilt. - -2000-08-22 Alexandre Oliva - - * configure.in [i*86-*-freebsd*] (TARGET, TARGETDIR): Set. - * configure: Rebuilt. - -2000-05-11 Scott Bambrough - - * libffi/src/arm/sysv.S (ffi_call_SYSV): Doubles are not saved to - memory correctly. Use conditional instructions, not branches where - possible. - -2000-05-04 Tom Tromey - - * configure: Rebuilt. - * configure.in: Match `arm*-*-linux-*'. - From Chris Dornan . - -2000-04-28 Jakub Jelinek - - * Makefile.am (SUBDIRS): Define. - (AM_MAKEFLAGS): Likewise. - (Multilib support.): Add section. - * Makefile.in: Rebuilt. - * ltconfig (extra_compiler_flags, extra_compiler_flags_value): - New variables. Set for gcc using -print-multi-lib. Export them - to libtool. - (sparc64-*-linux-gnu*): Use libsuff 64 for search paths. - * ltmain.sh (B|b|V): Don't throw away gcc's -B, -b and -V options - for -shared links. - (extra_compiler_flags_value, extra_compiler_flags): Check these - for extra compiler options which need to be passed down in - compiler_flags. - -2000-04-16 Anthony Green - - * configure: Rebuilt. - * configure.in: Change i*86-pc-linux* to i*86-*-linux*. - -2000-04-14 Jakub Jelinek - - * include/ffi.h.in (SPARC64): Define for 64bit SPARC builds. - Set SPARC FFI_DEFAULT_ABI based on SPARC64 define. - * src/sparc/ffi.c (ffi_prep_args_v8): Renamed from ffi_prep_args. - Replace all void * sizeofs with sizeof(int). - Only compare type with FFI_TYPE_LONGDOUBLE if LONGDOUBLE is - different than DOUBLE. - Remove FFI_TYPE_SINT32 and FFI_TYPE_UINT32 cases (handled elsewhere). - (ffi_prep_args_v9): New function. - (ffi_prep_cif_machdep): Handle V9 ABI and long long on V8. - (ffi_V9_return_struct): New function. - (ffi_call): Handle FFI_V9 ABI from 64bit code and FFI_V8 ABI from - 32bit code (not yet cross-arch calls). - * src/sparc/v8.S: Add struct return delay nop. - Handle long long. - * src/sparc/v9.S: New file. - * src/prep_cif.c (ffi_prep_cif): Return structure pointer - is used on sparc64 only for structures larger than 32 bytes. - Pass by reference for structures is done for structure arguments - larger than 16 bytes. - * src/ffitest.c (main): Use 64bit rint on sparc64. - Run long long tests on sparc. - * src/types.c (FFI_TYPE_POINTER): Pointer is 64bit on alpha and - sparc64. - (FFI_TYPE_LONGDOUBLE): long double is 128 bit aligned to 128 bits - on sparc64. - * configure.in (sparc-*-linux*): New supported target. - (sparc64-*-linux*): Likewise. - * configure: Rebuilt. - * Makefile.am: Add v9.S to SPARC files. - * Makefile.in: Likewise. - (LINK): Surround $(CCLD) into double quotes, so that multilib - compiles work correctly. - -2000-04-04 Alexandre Petit-Bianco - - * configure: Rebuilt. - * configure.in: (i*86-*-solaris*): New libffi target. Patch - proposed by Bryce McKinlay. - -2000-03-20 Tom Tromey - - * Makefile.in: Hand edit for java_raw_api.lo. - -2000-03-08 Bryce McKinlay - - * config.guess, config.sub: Update from the gcc tree. - Fix for PR libgcj/168. - -2000-03-03 Tom Tromey - - * Makefile.in: Fixed ia64 by hand. - - * configure: Rebuilt. - * configure.in (--enable-multilib): New option. - (libffi_basedir): New subst. - (AC_OUTPUT): Added multilib code. - -2000-03-02 Tom Tromey - - * Makefile.in: Rebuilt. - * Makefile.am (TARGET_SRC_IA64): Use `ia64', not `alpha', as - directory name. - -2000-02-25 Hans Boehm - - * src/ia64/ffi.c, src/ia64/ia64_flags.h, src/ia64/unix.S: New - files. - * src/raw_api.c (ffi_translate_args): Fixed typo in argument - list. - (ffi_prep_raw_closure): Use ffi_translate_args, not - ffi_closure_translate. - * src/java_raw_api.c: New file. - * src/ffitest.c (closure_test_fn): New function. - (main): Define `rint' as long long on IA64. Added new test when - FFI_CLOSURES is defined. - * include/ffi.h.in (ALIGN): Use size_t, not unsigned. - (ffi_abi): Recognize IA64. - (ffi_raw): Added `flt' field. - Added "Java raw API" code. - * configure.in: Recognize ia64. - * Makefile.am (TARGET_SRC_IA64): New macro. - (libffi_la_common_SOURCES): Added java_raw_api.c. - (libffi_la_SOURCES): Define in IA64 case. - -2000-01-04 Tom Tromey - - * Makefile.in: Rebuilt with newer automake. - -1999-12-31 Tom Tromey - - * Makefile.am (INCLUDES): Added -I$(top_srcdir)/src. - -1999-09-01 Tom Tromey - - * include/ffi.h.in: Removed PACKAGE and VERSION defines and - undefs. - * fficonfig.h.in: Rebuilt. - * configure: Rebuilt. - * configure.in: Pass 3rd argument to AM_INIT_AUTOMAKE. - Use AM_PROG_LIBTOOL (automake 1.4 compatibility). - * acconfig.h: Don't #undef PACKAGE or VERSION. - -1999-08-09 Anthony Green - - * include/ffi.h.in: Try to work around messy header problem - with PACKAGE and VERSION. - - * configure: Rebuilt. - * configure.in: Change version to 2.00-beta. - - * fficonfig.h.in: Rebuilt. - * acconfig.h (FFI_NO_STRUCTS, FFI_NO_RAW_API): Define. - - * src/x86/ffi.c (ffi_raw_call): Rename. - -1999-08-02 Kresten Krab Thorup - - * src/x86/ffi.c (ffi_closure_SYSV): New function. - (ffi_prep_incoming_args_SYSV): Ditto. - (ffi_prep_closure): Ditto. - (ffi_closure_raw_SYSV): Ditto. - (ffi_prep_raw_closure): More ditto. - (ffi_call_raw): Final ditto. - - * include/ffi.h.in: Add definitions for closure and raw API. - - * src/x86/ffi.c (ffi_prep_cif_machdep): Added case for - FFI_TYPE_UINT64. - - * Makefile.am (libffi_la_common_SOURCES): Added raw_api.c - - * src/raw_api.c: New file. - - * include/ffi.h.in (ffi_raw): New type. - (UINT_ARG, SINT_ARG): New defines. - (ffi_closure, ffi_raw_closure): New types. - (ffi_prep_closure, ffi_prep_raw_closure): New declarations. - - * configure.in: Add check for endianness and sizeof void*. - - * src/x86/sysv.S (ffi_call_SYSV): Call fixup routine via argument, - instead of directly. - - * configure: Rebuilt. - -Thu Jul 8 14:28:42 1999 Anthony Green - - * configure.in: Add x86 and powerpc BeOS configurations. - From Makoto Kato . - -1999-05-09 Anthony Green - - * configure.in: Add warning about this being beta code. - Remove src/Makefile.am from the picture. - * configure: Rebuilt. - - * Makefile.am: Move logic from src/Makefile.am. Add changes - to support libffi as a target library. - * Makefile.in: Rebuilt. - - * aclocal.m4, config.guess, config.sub, ltconfig, ltmain.sh: - Upgraded to new autoconf, automake, libtool. - - * README: Tweaks. - - * LICENSE: Update copyright date. - - * src/Makefile.am, src/Makefile.in: Removed. - -1998-11-29 Anthony Green - - * include/ChangeLog: Removed. - * src/ChangeLog: Removed. - * src/mips/ChangeLog: Removed. - * src/sparc/ChangeLog: Remboved. - * src/x86/ChangeLog: Removed. - - * ChangeLog.v1: Created. diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/ChangeLog.libffi b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/ChangeLog.libffi deleted file mode 100644 index f3ee8b0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/ChangeLog.libffi +++ /dev/null @@ -1,584 +0,0 @@ -2011-02-08 Andreas Tobler - - * testsuite/lib/libffi.exp: Tweak for stand-alone mode. - -2009-12-25 Samuli Suominen - - * configure.ac: Undefine _AC_ARG_VAR_PRECIOUS for autoconf 2.64. - * configure: Rebuilt. - * fficonfig.h.in: Rebuilt. - -2009-06-16 Andrew Haley - - * testsuite/libffi.call/cls_align_sint64.c, - testsuite/libffi.call/cls_align_uint64.c, - testsuite/libffi.call/cls_longdouble_va.c, - testsuite/libffi.call/cls_ulonglong.c, - testsuite/libffi.call/return_ll1.c, - testsuite/libffi.call/stret_medium2.c: Fix printf format - specifiers. - * testsuite/libffi.call/huge_struct.c: Ad x86 XFAILs. - * testsuite/libffi.call/float2.c: Fix dg-excess-errors. - * testsuite/libffi.call/ffitest.h, - testsuite/libffi.special/ffitestcxx.h (PRIdLL, PRIuLL): Define. - -2009-06-12 Andrew Haley - - * testsuite/libffi.call/cls_align_sint64.c, - testsuite/libffi.call/cls_align_uint64.c, - testsuite/libffi.call/cls_ulonglong.c, - testsuite/libffi.call/return_ll1.c, - testsuite/libffi.call/stret_medium2.c: Fix printf format - specifiers. - testsuite/libffi.special/unwindtest.cc: include stdint.h. - -2009-06-11 Timothy Wall - - * Makefile.am, - configure.ac, - include/ffi.h.in, - include/ffi_common.h, - src/closures.c, - src/dlmalloc.c, - src/x86/ffi.c, - src/x86/ffitarget.h, - src/x86/win64.S (new), - README: Added win64 support (mingw or MSVC) - * Makefile.in, - include/Makefile.in, - man/Makefile.in, - testsuite/Makefile.in, - configure, - aclocal.m4: Regenerated - * ltcf-c.sh: properly escape cygwin/w32 path - * man/ffi_call.3: Clarify size requirements for return value. - * src/x86/ffi64.c: Fix filename in comment. - * src/x86/win32.S: Remove unused extern. - - * testsuite/libffi.call/closure_fn0.c, - testsuite/libffi.call/closure_fn1.c, - testsuite/libffi.call/closure_fn2.c, - testsuite/libffi.call/closure_fn3.c, - testsuite/libffi.call/closure_fn4.c, - testsuite/libffi.call/closure_fn5.c, - testsuite/libffi.call/closure_fn6.c, - testsuite/libffi.call/closure_stdcall.c, - testsuite/libffi.call/cls_12byte.c, - testsuite/libffi.call/cls_16byte.c, - testsuite/libffi.call/cls_18byte.c, - testsuite/libffi.call/cls_19byte.c, - testsuite/libffi.call/cls_1_1byte.c, - testsuite/libffi.call/cls_20byte.c, - testsuite/libffi.call/cls_20byte1.c, - testsuite/libffi.call/cls_24byte.c, - testsuite/libffi.call/cls_2byte.c, - testsuite/libffi.call/cls_3_1byte.c, - testsuite/libffi.call/cls_3byte1.c, - testsuite/libffi.call/cls_3byte2.c, - testsuite/libffi.call/cls_4_1byte.c, - testsuite/libffi.call/cls_4byte.c, - testsuite/libffi.call/cls_5_1_byte.c, - testsuite/libffi.call/cls_5byte.c, - testsuite/libffi.call/cls_64byte.c, - testsuite/libffi.call/cls_6_1_byte.c, - testsuite/libffi.call/cls_6byte.c, - testsuite/libffi.call/cls_7_1_byte.c, - testsuite/libffi.call/cls_7byte.c, - testsuite/libffi.call/cls_8byte.c, - testsuite/libffi.call/cls_9byte1.c, - testsuite/libffi.call/cls_9byte2.c, - testsuite/libffi.call/cls_align_double.c, - testsuite/libffi.call/cls_align_float.c, - testsuite/libffi.call/cls_align_longdouble.c, - testsuite/libffi.call/cls_align_longdouble_split.c, - testsuite/libffi.call/cls_align_longdouble_split2.c, - testsuite/libffi.call/cls_align_pointer.c, - testsuite/libffi.call/cls_align_sint16.c, - testsuite/libffi.call/cls_align_sint32.c, - testsuite/libffi.call/cls_align_sint64.c, - testsuite/libffi.call/cls_align_uint16.c, - testsuite/libffi.call/cls_align_uint32.c, - testsuite/libffi.call/cls_align_uint64.c, - testsuite/libffi.call/cls_dbls_struct.c, - testsuite/libffi.call/cls_double.c, - testsuite/libffi.call/cls_double_va.c, - testsuite/libffi.call/cls_float.c, - testsuite/libffi.call/cls_longdouble.c, - testsuite/libffi.call/cls_longdouble_va.c, - testsuite/libffi.call/cls_multi_schar.c, - testsuite/libffi.call/cls_multi_sshort.c, - testsuite/libffi.call/cls_multi_sshortchar.c, - testsuite/libffi.call/cls_multi_uchar.c, - testsuite/libffi.call/cls_multi_ushort.c, - testsuite/libffi.call/cls_multi_ushortchar.c, - testsuite/libffi.call/cls_pointer.c, - testsuite/libffi.call/cls_pointer_stack.c, - testsuite/libffi.call/cls_schar.c, - testsuite/libffi.call/cls_sint.c, - testsuite/libffi.call/cls_sshort.c, - testsuite/libffi.call/cls_uchar.c, - testsuite/libffi.call/cls_uint.c, - testsuite/libffi.call/cls_ulonglong.c, - testsuite/libffi.call/cls_ushort.c, - testsuite/libffi.call/err_bad_abi.c, - testsuite/libffi.call/err_bad_typedef.c, - testsuite/libffi.call/float2.c, - testsuite/libffi.call/huge_struct.c, - testsuite/libffi.call/nested_struct.c, - testsuite/libffi.call/nested_struct1.c, - testsuite/libffi.call/nested_struct10.c, - testsuite/libffi.call/nested_struct2.c, - testsuite/libffi.call/nested_struct3.c, - testsuite/libffi.call/nested_struct4.c, - testsuite/libffi.call/nested_struct5.c, - testsuite/libffi.call/nested_struct6.c, - testsuite/libffi.call/nested_struct7.c, - testsuite/libffi.call/nested_struct8.c, - testsuite/libffi.call/nested_struct9.c, - testsuite/libffi.call/problem1.c, - testsuite/libffi.call/return_ldl.c, - testsuite/libffi.call/return_ll1.c, - testsuite/libffi.call/stret_large.c, - testsuite/libffi.call/stret_large2.c, - testsuite/libffi.call/stret_medium.c, - testsuite/libffi.call/stret_medium2.c, - testsuite/libffi.special/unwindtest.cc: use ffi_closure_alloc instead - of checking for MMAP. Use intptr_t instead of long casts. - -2009-06-04 Andrew Haley - - * src/powerpc/ffitarget.h: Fix misapplied merge from gcc. - -2009-06-04 Andrew Haley - - * src/mips/o32.S, - src/mips/n32.S: Fix licence formatting. - -2009-06-04 Andrew Haley - - * src/x86/darwin.S: Fix licence formatting. - src/x86/win32.S: Likewise. - src/sh64/sysv.S: Likewise. - src/sh/sysv.S: Likewise. - -2009-06-04 Andrew Haley - - * src/sh64/ffi.c: Remove lint directives. Was missing from merge - of Andreas Tobler's patch from 2006-04-22. - -2009-06-04 Andrew Haley - - * src/sh/ffi.c: Apply missing hunk from Alexandre Oliva's patch of - 2007-03-07. - -2008-12-26 Timothy Wall - - * testsuite/libffi.call/cls_longdouble.c, - testsuite/libffi.call/cls_longdouble_va.c, - testsuite/libffi.call/cls_align_longdouble.c, - testsuite/libffi.call/cls_align_longdouble_split.c, - testsuite/libffi.call/cls_align_longdouble_split2.c: mark expected - failures on x86_64 cygwin/mingw. - -2008-12-22 Timothy Wall - - * testsuite/libffi.call/closure_fn0.c, - testsuite/libffi.call/closure_fn1.c, - testsuite/libffi.call/closure_fn2.c, - testsuite/libffi.call/closure_fn3.c, - testsuite/libffi.call/closure_fn4.c, - testsuite/libffi.call/closure_fn5.c, - testsuite/libffi.call/closure_fn6.c, - testsuite/libffi.call/closure_loc_fn0.c, - testsuite/libffi.call/closure_stdcall.c, - testsuite/libffi.call/cls_align_pointer.c, - testsuite/libffi.call/cls_pointer.c, - testsuite/libffi.call/cls_pointer_stack.c: use portable cast from - pointer to integer (intptr_t). - * testsuite/libffi.call/cls_longdouble.c: disable for win64. - -2008-12-19 Anthony Green - - * configure.ac: Bump version to 3.0.8. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - * libtool-version: Increment revision. - * README: Update for new release. - -2008-11-11 Anthony Green - - * configure.ac: Bump version to 3.0.7. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - * libtool-version: Increment revision. - * README: Update for new release. - -2008-08-25 Andreas Tobler - - * src/powerpc/ffitarget.h (ffi_abi): Add FFI_LINUX and - FFI_LINUX_SOFT_FLOAT to the POWERPC_FREEBSD enum. - Add note about flag bits used for FFI_SYSV_TYPE_SMALL_STRUCT. - Adjust copyright notice. - * src/powerpc/ffi.c: Add two new flags to indicate if we have one - register or two register to use for FFI_SYSV structs. - (ffi_prep_cif_machdep): Pass the right register flag introduced above. - (ffi_closure_helper_SYSV): Fix the return type for - FFI_SYSV_TYPE_SMALL_STRUCT. Comment. - Adjust copyright notice. - -2008-07-24 Anthony Green - - * testsuite/libffi.call/cls_dbls_struct.c, - testsuite/libffi.call/cls_double_va.c, - testsuite/libffi.call/cls_longdouble.c, - testsuite/libffi.call/cls_longdouble_va.c, - testsuite/libffi.call/cls_pointer.c, - testsuite/libffi.call/cls_pointer_stack.c, - testsuite/libffi.call/err_bad_abi.c: Clean up failures from - compiler warnings. - -2008-07-17 Anthony Green - - * configure.ac: Bump version to 3.0.6. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - * libtool-version: Increment revision. Add documentation. - * README: Update for new release. - -2008-07-16 Kaz Kojima - - * src/sh/ffi.c (ffi_prep_closure_loc): Turn INSN into an unsigned - int. - -2008-07-16 Kaz Kojima - - * src/sh/sysv.S: Add .note.GNU-stack on Linux. - * src/sh64/sysv.S: Likewise. - -2008-04-03 Anthony Green - - * libffi.pc.in (Libs): Add -L${libdir}. - * configure.ac: Bump version to 3.0.5. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - * libtool-version: Increment revision. - * README: Update for new release. - -2008-04-03 Anthony Green - Xerces Ranby - - * include/ffi.h.in: Wrap definition of target architecture to - protect from double definitions. - -2008-03-22 Moriyoshi Koizumi - - * src/x86/ffi.c (ffi_prep_closure_loc): Fix for bug revealed in - closure_loc_fn0.c. - * testsuite/libffi.call/closure_loc_fn0.c (closure_loc_test_fn0): - New test. - -2008-03-04 Anthony Green - Blake Chaffin - hos@tamanegi.org - - * testsuite/libffi.call/cls_align_longdouble_split2.c - testsuite/libffi.call/cls_align_longdouble_split.c - testsuite/libffi.call/cls_dbls_struct.c - testsuite/libffi.call/cls_double_va.c - testsuite/libffi.call/cls_longdouble.c - testsuite/libffi.call/cls_longdouble_va.c - testsuite/libffi.call/cls_pointer.c - testsuite/libffi.call/cls_pointer_stack.c - testsuite/libffi.call/err_bad_abi.c - testsuite/libffi.call/err_bad_typedef.c - testsuite/libffi.call/huge_struct.c - testsuite/libffi.call/stret_large2.c - testsuite/libffi.call/stret_large.c - testsuite/libffi.call/stret_medium2.c - testsuite/libffi.call/stret_medium.c: New tests from Apple. - -2008-02-26 Jakub Jelinek - Anthony Green - - * src/alpha/osf.S: Add .note.GNU-stack on Linux. - * src/s390/sysv.S: Likewise. - * src/powerpc/linux64.S: Likewise. - * src/powerpc/linux64_closure.S: Likewise. - * src/powerpc/ppc_closure.S: Likewise. - * src/powerpc/sysv.S: Likewise. - * src/x86/unix64.S: Likewise. - * src/x86/sysv.S: Likewise. - * src/sparc/v8.S: Likewise. - * src/sparc/v9.S: Likewise. - * src/m68k/sysv.S: Likewise. - * src/ia64/unix.S: Likewise. - * src/arm/sysv.S: Likewise. - -2008-02-26 Anthony Green - Thomas Heller - - * src/x86/ffi.c (ffi_closure_SYSV_inner): Change C++ comment to C - comment. - -2008-02-26 Anthony Green - Thomas Heller - - * include/ffi.h.in: Change void (*)() to void (*)(void). - -2008-02-26 Anthony Green - Thomas Heller - - * src/alpha/ffi.c: Change void (*)() to void (*)(void). - src/alpha/osf.S, src/arm/ffi.c, src/frv/ffi.c, src/ia64/ffi.c, - src/ia64/unix.S, src/java_raw_api.c, src/m32r/ffi.c, - src/mips/ffi.c, src/pa/ffi.c, src/pa/hpux32.S, src/pa/linux.S, - src/powerpc/ffi.c, src/powerpc/ffi_darwin.c, src/raw_api.c, - src/s390/ffi.c, src/sh/ffi.c, src/sh64/ffi.c, src/sparc/ffi.c, - src/x86/ffi.c, src/x86/unix64.S, src/x86/darwin64.S, - src/x86/ffi64.c: Ditto. - -2008-02-24 Anthony Green - - * configure.ac: Accept openbsd*, not just openbsd. - Bump version to 3.0.4. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - * libtool-version: Increment revision. - * README: Update for new release. - -2008-02-22 Anthony Green - - * README: Clean up list of tested platforms. - -2008-02-22 Anthony Green - - * configure.ac: Bump version to 3.0.3. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - * libtool-version: Increment revision. - * README: Update for new release. Clean up test docs. - -2008-02-22 Bjoern Koenig - Andreas Tobler - - * configure.ac: Add amd64-*-freebsd* target. - * configure: Regenerate. - -2008-02-22 Thomas Heller - - * configure.ac: Add x86 OpenBSD support. - * configure: Rebuilt. - -2008-02-21 Thomas Heller - - * README: Change "make test" to "make check". - -2008-02-21 Anthony Green - - * configure.ac: Bump version to 3.0.2. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - * libtool-version: Increment revision. - * README: Update for new release. - -2008-02-21 Björn König - - * src/x86/freebsd.S: New file. - * configure.ac: Add x86 FreeBSD support. - * Makefile.am: Ditto. - -2008-02-15 Anthony Green - - * configure.ac: Bump version to 3.0.1. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - * libtool-version: Increment revision. - * README: Update for new release. - -2008-02-15 David Daney - - * src/mips/ffi.c: Remove extra '>' from include directive. - (ffi_prep_closure_loc): Use clear_location instead of tramp. - -2008-02-15 Anthony Green - - * configure.ac: Bump version to 3.0.0. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - -2008-02-15 David Daney - - * src/mips/ffi.c (USE__BUILTIN___CLEAR_CACHE): - Define (conditionally), and use it to include cachectl.h. - (ffi_prep_closure_loc): Fix cache flushing. - * src/mips/ffitarget.h (_ABIN32, _ABI64, _ABIO32): Define. - -2008-02-15 Anthony Green - - * man/ffi_call.3, man/ffi_prep_cif.3, man/ffi.3: - Update dates and remove all references to ffi_prep_closure. - * configure.ac: Bump version to 2.99.9. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - -2008-02-15 Anthony Green - - * man/ffi_prep_closure.3: Delete. - * man/Makefile.am (EXTRA_DIST): Remove ffi_prep_closure.3. - (man_MANS): Ditto. - * man/Makefile.in: Rebuilt. - * configure.ac: Bump version to 2.99.8. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - -2008-02-14 Anthony Green - - * configure.ac: Bump version to 2.99.7. - * configure, doc/stamp-vti, doc/version.texi: Rebuilt. - * include/ffi.h.in LICENSE src/debug.c src/closures.c - src/ffitest.c src/s390/sysv.S src/s390/ffitarget.h - src/types.c src/m68k/ffitarget.h src/raw_api.c src/frv/ffi.c - src/frv/ffitarget.h src/sh/ffi.c src/sh/sysv.S - src/sh/ffitarget.h src/powerpc/ffitarget.h src/pa/ffi.c - src/pa/ffitarget.h src/pa/linux.S src/java_raw_api.c - src/cris/ffitarget.h src/x86/ffi.c src/x86/sysv.S - src/x86/unix64.S src/x86/win32.S src/x86/ffitarget.h - src/x86/ffi64.c src/x86/darwin.S src/ia64/ffi.c - src/ia64/ffitarget.h src/ia64/ia64_flags.h src/ia64/unix.S - src/sparc/ffi.c src/sparc/v9.S src/sparc/ffitarget.h - src/sparc/v8.S src/alpha/ffi.c src/alpha/ffitarget.h - src/alpha/osf.S src/sh64/ffi.c src/sh64/sysv.S - src/sh64/ffitarget.h src/mips/ffi.c src/mips/ffitarget.h - src/mips/n32.S src/mips/o32.S src/arm/ffi.c src/arm/sysv.S - src/arm/ffitarget.h src/prep_cif.c: Update license text. - -2008-02-14 Anthony Green - - * README: Update tested platforms. - * configure.ac: Bump version to 2.99.6. - * configure: Rebuilt. - -2008-02-14 Anthony Green - - * configure.ac: Bump version to 2.99.5. - * configure: Rebuilt. - * Makefile.am (EXTRA_DIST): Add darwin64.S - * Makefile.in: Rebuilt. - * testsuite/lib/libffi-dg.exp: Remove libstdc++ bits from GCC tree. - * LICENSE: Update WARRANTY. - -2008-02-14 Anthony Green - - * libffi.pc.in (libdir): Fix libdir definition. - * configure.ac: Bump version to 2.99.4. - * configure: Rebuilt. - -2008-02-14 Anthony Green - - * README: Update. - * libffi.info: New file. - * doc/stamp-vti: New file. - * configure.ac: Bump version to 2.99.3. - * configure: Rebuilt. - -2008-02-14 Anthony Green - - * Makefile.am (SUBDIRS): Add man dir. - * Makefile.in: Rebuilt. - * configure.ac: Create Makefile. - * configure: Rebuilt. - * man/ffi_call.3 man/ffi_prep_cif.3 man/ffi_prep_closure.3 - man/Makefile.am man/Makefile.in: New files. - -2008-02-14 Tom Tromey - - * aclocal.m4, Makefile.in, configure, fficonfig.h.in: Rebuilt. - * mdate-sh, texinfo.tex: New files. - * Makefile.am (info_TEXINFOS): New variable. - * doc/libffi.texi: New file. - * doc/version.texi: Likewise. - -2008-02-14 Anthony Green - - * Makefile.am (AM_CFLAGS): Don't compile with -D$(TARGET). - (lib_LTLIBRARIES): Define. - (toolexeclib_LIBRARIES): Undefine. - * Makefile.in: Rebuilt. - * configure.ac: Reset version to 2.99.1. - * configure.in: Rebuilt. - -2008-02-14 Anthony Green - - * libffi.pc.in: Use @PACKAGE_NAME@ and @PACKAGE_VERSION@. - * configure.ac: Reset version to 2.99.1. - * configure.in: Rebuilt. - * Makefile.am (EXTRA_DIST): Add ChangeLog.libffi. - * Makefile.in: Rebuilt. - * LICENSE: Update copyright notice. - -2008-02-14 Anthony Green - - * include/Makefile.am (nodist_includes_HEADERS): Define. Don't - distribute ffitarget.h or ffi.h from the build include dir. - * Makefile.in: Rebuilt. - -2008-02-14 Anthony Green - - * include/Makefile.am (includesdir): Install headers under libdir. - (pkgconfigdir): Define. Install libffi.pc. - * include/Makefile.in: Rebuilt. - * libffi.pc.in: Create. - * libtool-version: Increment CURRENT - * configure.ac: Add libffi.pc.in - * configure: Rebuilt. - -2008-02-03 Anthony Green - - * include/Makefile.am (includesdir): Fix header install with - DESTDIR. - * include/Makefile.in: Rebuilt. - -2008-02-03 Timothy Wall - - * src/x86/ffi.c (FFI_INIT_TRAMPOLINE_STDCALL): Calculate jump return - offset based on code pointer, not data pointer. - -2008-02-01 Anthony Green - - * include/Makefile.am: Fix header installs. - * Makefile.am: Ditto. - * include/Makefile.in: Rebuilt. - * Makefile.in: Ditto. - -2008-02-01 Anthony Green - - * src/x86/ffi.c (FFI_INIT_TRAMPOLINE_STDCALL, - FFI_INIT_TRAMPOLINE): Revert my broken changes to twall's last - patch. - -2008-01-31 Anthony Green - - * Makefile.am (EXTRA_DIST): Add missing files. - * testsuite/Makefile.am: Ditto. - * Makefile.in, testsuite/Makefile.in: Rebuilt. - -2008-01-31 Timothy Wall - - * testsuite/libffi.call/closure_stdcall.c: Add test for stdcall - closures. - * src/x86/ffitarget.h: Increase size of trampoline for stdcall - closures. - * src/x86/win32.S: Add assembly for stdcall closure. - * src/x86/ffi.c: Initialize stdcall closure trampoline. - -2008-01-30 H.J. Lu - - PR libffi/34612 - * src/x86/sysv.S (ffi_closure_SYSV): Pop 4 byte from stack when - returning struct. - - * testsuite/libffi.call/call.exp: Add "-O2 -fomit-frame-pointer" - tests. - -2008-01-30 Anthony Green - - * Makefile.am, include/Makefile.am: Move headers to - libffi_la_SOURCES for new automake. - * Makefile.in, include/Makefile.in: Rebuilt. - - * testsuite/lib/wrapper.exp: Copied from gcc tree to allow for - execution outside of gcc tree. - * testsuite/lib/target-libpath.exp: Ditto. - - * testsuite/lib/libffi-dg.exp: Many changes to allow for execution - outside of gcc tree. - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/ChangeLog.libgcj b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/ChangeLog.libgcj deleted file mode 100644 index ea5d02f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/ChangeLog.libgcj +++ /dev/null @@ -1,40 +0,0 @@ -2004-01-14 Kelley Cook - - * configure.in: Add in AC_PREREQ(2.13) - -2003-02-20 Alexandre Oliva - - * configure.in: Propagate ORIGINAL_LD_FOR_MULTILIBS to - config.status. - * configure: Rebuilt. - -2002-01-27 Alexandre Oliva - - * configure.in (toolexecdir, toolexeclibdir): Set and AC_SUBST. - Remove USE_LIBDIR conditional. - * Makefile.am (toolexecdir, toolexeclibdir): Don't override. - * Makefile.in, configure: Rebuilt. - -Mon Aug 9 18:33:38 1999 Rainer Orth - - * include/Makefile.in: Rebuilt. - * Makefile.in: Rebuilt - * Makefile.am (toolexeclibdir): Add $(MULTISUBDIR) even for native - builds. - Use USE_LIBDIR. - - * configure: Rebuilt. - * configure.in (USE_LIBDIR): Define for native builds. - Use lowercase in configure --help explanations. - -1999-08-08 Anthony Green - - * include/ffi.h.in (FFI_FN): Remove `...'. - -1999-08-08 Anthony Green - - * Makefile.in: Rebuilt. - * Makefile.am (AM_CFLAGS): Compile with -fexceptions. - - * src/x86/sysv.S: Add exception handling metadata. - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/ChangeLog.v1 b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/ChangeLog.v1 deleted file mode 100644 index 369820c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/ChangeLog.v1 +++ /dev/null @@ -1,764 +0,0 @@ -The libffi version 1 ChangeLog archive. - -Version 1 of libffi had per-directory ChangeLogs. Current and future -versions have a single ChangeLog file in the root directory. The -version 1 ChangeLogs have all been concatonated into this file for -future reference only. - ---- libffi ---------------------------------------------------------------- - -Mon Oct 5 02:17:50 1998 Anthony Green - - * configure.in: Boosted rev. - * configure, Makefile.in, aclocal.m4: Rebuilt. - * README: Boosted rev and updated release notes. - -Mon Oct 5 01:03:03 1998 Anthony Green - - * configure.in: Boosted rev. - * configure, Makefile.in, aclocal.m4: Rebuilt. - * README: Boosted rev and updated release notes. - -1998-07-25 Andreas Schwab - - * m68k/ffi.c (ffi_prep_cif_machdep): Use bitmask for cif->flags. - Correctly handle small structures. - (ffi_prep_args): Also handle small structures. - (ffi_call): Pass size of return type to ffi_call_SYSV. - * m68k/sysv.S: Adjust for above changes. Correctly align small - structures in the return value. - - * types.c (uint64, sint64) [M68K]: Change alignment to 4. - -Fri Apr 17 17:26:58 1998 Anthony Green - - * configure.in: Boosted rev. - * configure,Makefile.in,aclocal.m4: Rebuilt. - * README: Boosted rev and added release notes. - -Sun Feb 22 00:50:41 1998 Geoff Keating - - * configure.in: Add PowerPC config bits. - -1998-02-14 Andreas Schwab - - * configure.in: Add m68k config bits. Change AC_CANONICAL_SYSTEM - to AC_CANONICAL_HOST, this is not a compiler. Use $host instead - of $target. Remove AC_CHECK_SIZEOF(char), we already know the - result. Fix argument of AC_ARG_ENABLE. - * configure, fficonfig.h.in: Rebuilt. - -Tue Feb 10 20:53:40 1998 Richard Henderson - - * configure.in: Add Alpha config bits. - -Tue May 13 13:39:20 1997 Anthony Green - - * README: Updated dates and reworded Irix comments. - - * configure.in: Removed AC_PROG_RANLIB. - - * Makefile.in, aclocal.m4, config.guess, config.sub, configure, - ltmain.sh, */Makefile.in: libtoolized again and rebuilt with - automake and autoconf. - -Sat May 10 18:44:50 1997 Tom Tromey - - * configure, aclocal.m4: Rebuilt. - * configure.in: Don't compute EXTRADIST; now handled in - src/Makefile.in. Removed macros implied by AM_INIT_AUTOMAKE. - Don't run AM_MAINTAINER_MODE. - -Thu May 8 14:34:05 1997 Anthony Green - - * missing, ltmain.sh, ltconfig.sh: Created. These are new files - required by automake and libtool. - - * README: Boosted rev to 1.14. Added notes. - - * acconfig.h: Moved PACKAGE and VERSION for new automake. - - * configure.in: Changes for libtool. - - * Makefile.am (check): make test now make check. Uses libtool now. - - * Makefile.in, configure.in, aclocal.h, fficonfig.h.in: Rebuilt. - -Thu May 1 16:27:07 1997 Anthony Green - - * missing: Added file required by new automake. - -Tue Nov 26 14:10:42 1996 Anthony Green - - * acconfig.h: Added USING_PURIFY flag. This is defined when - --enable-purify-safety was used at configure time. - - * configure.in (allsources): Added --enable-purify-safety switch. - (VERSION): Boosted rev to 1.13. - * configure: Rebuilt. - -Fri Nov 22 06:46:12 1996 Anthony Green - - * configure.in (VERSION): Boosted rev to 1.12. - Removed special CFLAGS hack for gcc. - * configure: Rebuilt. - - * README: Boosted rev to 1.12. Added notes. - - * Many files: Cygnus Support changed to Cygnus Solutions. - -Wed Oct 30 11:15:25 1996 Anthony Green - - * configure.in (VERSION): Boosted rev to 1.11. - * configure: Rebuilt. - - * README: Boosted rev to 1.11. Added notes about GNU make. - -Tue Oct 29 12:25:12 1996 Anthony Green - - * configure.in: Fixed -Wall trick. - (VERSION): Boosted rev. - * configure: Rebuilt - - * acconfig.h: Needed for --enable-debug configure switch. - - * README: Boosted rev to 1.09. Added more notes on building - libffi, and LCLint. - - * configure.in: Added --enable-debug switch. Boosted rev to - 1.09. - * configure: Rebuilt - -Tue Oct 15 13:11:28 1996 Anthony Green - - * configure.in (VERSION): Boosted rev to 1.08 - * configure: Rebuilt. - - * README: Added n32 bug fix notes. - - * Makefile.am: Added "make lint" production. - * Makefile.in: Rebuilt. - -Mon Oct 14 10:54:46 1996 Anthony Green - - * README: Added web page reference. - - * configure.in, README: Boosted rev to 1.05 - * configure: Rebuilt. - - * README: Fixed n32 sample code. - -Fri Oct 11 17:09:28 1996 Anthony Green - - * README: Added sparc notes. - - * configure.in, README: Boosted rev to 1.04. - * configure: Rebuilt. - -Thu Oct 10 10:31:03 1996 Anthony Green - - * configure.in, README: Boosted rev to 1.03. - * configure: Rebuilt. - - * README: Added struct notes. - - * Makefile.am (EXTRA_DIST): Added LICENSE to distribution. - * Makefile.in: Rebuilt. - - * README: Removed Linux section. No special notes now - because aggregates arg/return types work. - -Wed Oct 9 16:16:42 1996 Anthony Green - - * README, configure.in (VERSION): Boosted rev to 1.02 - * configure: Rebuilt. - -Tue Oct 8 11:56:33 1996 Anthony Green - - * README (NOTE): Added n32 notes. - - * Makefile.am: Added test production. - * Makefile: Rebuilt - - * README: spell checked! - - * configure.in (VERSION): Boosted rev to 1.01 - * configure: Rebuilt. - -Mon Oct 7 15:50:22 1996 Anthony Green - - * configure.in: Added nasty bit to support SGI tools. - * configure: Rebuilt. - - * README: Added SGI notes. Added note about automake bug. - -Mon Oct 7 11:00:28 1996 Anthony Green - - * README: Rewrote intro, and fixed examples. - -Fri Oct 4 10:19:55 1996 Anthony Green - - * configure.in: -D$TARGET is no longer used as a compiler switch. - It is now inserted into ffi.h at configure time. - * configure: Rebuilt. - - * FFI_ABI and FFI_STATUS are now ffi_abi and ffi_status. - -Thu Oct 3 13:47:34 1996 Anthony Green - - * README, LICENSE: Created. Wrote some docs. - - * configure.in: Don't barf on i586-unknown-linuxaout. - Added EXTRADIST code for "make dist". - * configure: Rebuilt. - - * */Makefile.in: Rebuilt with patched automake. - -Tue Oct 1 17:12:25 1996 Anthony Green - - * Makefile.am, aclocal.m4, config.guess, config.sub, - configure.in, fficonfig.h.in, install-sh, mkinstalldirs, - stamp-h.in: Created - * Makefile.in, configure: Generated - ---- libffi/include -------------------------------------------------------- - -Tue Feb 24 13:09:36 1998 Anthony Green - - * ffi_mips.h: Updated FFI_TYPE_STRUCT_* values based on - ffi.h.in changes. This is a work-around for SGI's "simple" - assembler. - -Sun Feb 22 00:51:55 1998 Geoff Keating - - * ffi.h.in: PowerPC support. - -1998-02-14 Andreas Schwab - - * ffi.h.in: Add m68k support. - (FFI_TYPE_LONGDOUBLE): Make it a separate value. - -Tue Feb 10 20:55:16 1998 Richard Henderson - - * ffi.h.in (SIZEOF_ARG): Use a pointer type by default. - - * ffi.h.in: Alpha support. - -Fri Nov 22 06:48:45 1996 Anthony Green - - * ffi.h.in, ffi_common.h: Cygnus Support -> Cygnus Solutions. - -Wed Nov 20 22:31:01 1996 Anthony Green - - * ffi.h.in: Added ffi_type_void definition. - -Tue Oct 29 12:22:40 1996 Anthony Green - - * Makefile.am (hack_DATA): Always install ffi_mips.h. - - * ffi.h.in: Removed FFI_DEBUG. It's now in the correct - place (acconfig.h). - Added #include for size_t definition. - -Tue Oct 15 17:23:35 1996 Anthony Green - - * ffi.h.in, ffi_common.h, ffi_mips.h: More clean up. - Commented out #define of FFI_DEBUG. - -Tue Oct 15 13:01:06 1996 Anthony Green - - * ffi_common.h: Added bool definition. - - * ffi.h.in, ffi_common.h: Clean up based on LCLint output. - Added funny /*@...@*/ comments to annotate source. - -Mon Oct 14 12:29:23 1996 Anthony Green - - * ffi.h.in: Interface changes based on feedback from Jim - Blandy. - -Fri Oct 11 16:49:35 1996 Anthony Green - - * ffi.h.in: Small change for sparc support. - -Thu Oct 10 14:53:37 1996 Anthony Green - - * ffi_mips.h: Added FFI_TYPE_STRUCT_* definitions for - special structure return types. - -Wed Oct 9 13:55:57 1996 Anthony Green - - * ffi.h.in: Added SIZEOF_ARG definition for X86 - -Tue Oct 8 11:40:36 1996 Anthony Green - - * ffi.h.in (FFI_FN): Added macro for eliminating compiler warnings. - Use it to case your function pointers to the proper type. - - * ffi_mips.h (SIZEOF_ARG): Added magic to fix type promotion bug. - - * Makefile.am (EXTRA_DIST): Added ffi_mips.h to EXTRA_DIST. - * Makefile: Rebuilt. - - * ffi_mips.h: Created. Moved all common mips definitions here. - -Mon Oct 7 10:58:12 1996 Anthony Green - - * ffi.h.in: The SGI assember is very picky about parens. Redefined - some macros to avoid problems. - - * ffi.h.in: Added FFI_DEFAULT_ABI definitions. Also added - externs for pointer, and 64bit integral ffi_types. - -Fri Oct 4 09:51:37 1996 Anthony Green - - * ffi.h.in: Added FFI_ABI member to ffi_cif and changed - function prototypes accordingly. - Added #define @TARGET@. Now programs including ffi.h don't - have to specify this themselves. - -Thu Oct 3 15:36:44 1996 Anthony Green - - * ffi.h.in: Changed ffi_prep_cif's values from void* to void** - - * Makefile.am (EXTRA_DIST): Added EXTRA_DIST for "make dist" - to work. - * Makefile.in: Regenerated. - -Wed Oct 2 10:16:59 1996 Anthony Green - - * Makefile.am: Created - * Makefile.in: Generated - - * ffi_common.h: Added rcsid comment - -Tue Oct 1 17:13:51 1996 Anthony Green - - * ffi.h.in, ffi_common.h: Created - ---- libffi/src ------------------------------------------------------------ - -Mon Oct 5 02:17:50 1998 Anthony Green - - * arm/ffi.c, arm/sysv.S: Created. - - * Makefile.am: Added arm files. - * Makefile.in: Rebuilt. - -Mon Oct 5 01:41:38 1998 Anthony Green - - * Makefile.am (libffi_la_LDFLAGS): Incremented revision. - -Sun Oct 4 16:27:17 1998 Anthony Green - - * alpha/osf.S (ffi_call_osf): Patch for DU assembler. - - * ffitest.c (main): long long and long double return values work - for x86. - -Fri Apr 17 11:50:58 1998 Anthony Green - - * Makefile.in: Rebuilt. - - * ffitest.c (main): Floating point tests not executed for systems - with broken lond double (SunOS 4 w/ GCC). - - * types.c: Fixed x86 alignment info for long long types. - -Thu Apr 16 07:15:28 1998 Anthony Green - - * ffitest.c: Added more notes about GCC bugs under Irix 6. - -Wed Apr 15 08:42:22 1998 Anthony Green - - * ffitest.c (struct5): New test function. - (main): New test with struct5. - -Thu Mar 5 10:48:11 1998 Anthony Green - - * prep_cif.c (initialize_aggregate): Fix assertion for - nested structures. - -Tue Feb 24 16:33:41 1998 Anthony Green - - * prep_cif.c (ffi_prep_cif): Added long double support for sparc. - -Sun Feb 22 00:52:18 1998 Geoff Keating - - * powerpc/asm.h: New file. - * powerpc/ffi.c: New file. - * powerpc/sysv.S: New file. - * Makefile.am: PowerPC port. - * ffitest.c (main): Allow all tests to run even in presence of gcc - bug on PowerPC. - -1998-02-17 Anthony Green - - * mips/ffi.c: Fixed comment typo. - - * x86/ffi.c (ffi_prep_cif_machdep), x86/sysv.S (retfloat): - Fixed x86 long double return handling. - - * types.c: Fixed x86 long double alignment info. - -1998-02-14 Andreas Schwab - - * types.c: Add m68k support. - - * ffitest.c (floating): Add long double parameter. - (return_ll, ldblit): New functions to test long long and long - double return value. - (main): Fix type error in assignment of ts[1-4]_type.elements. - Add tests for long long and long double arguments and return - values. - - * prep_cif.c (ffi_prep_cif) [M68K]: Don't allocate argument for - struct value pointer. - - * m68k/ffi.c, m68k/sysv.S: New files. - * Makefile.am: Add bits for m68k port. Add kludge to work around - automake deficiency. - (test): Don't require "." in $PATH. - * Makefile.in: Rebuilt. - -Wed Feb 11 07:36:50 1998 Anthony Green - - * Makefile.in: Rebuilt. - -Tue Feb 10 20:56:00 1998 Richard Henderson - - * alpha/ffi.c, alpha/osf.S: New files. - * Makefile.am: Alpha port. - -Tue Nov 18 14:12:07 1997 Anthony Green - - * mips/ffi.c (ffi_prep_cif_machdep): Initialize rstruct_flag - for n32. - -Tue Jun 3 17:18:20 1997 Anthony Green - - * ffitest.c (main): Added hack to get structure tests working - correctly. - -Sat May 10 19:06:42 1997 Tom Tromey - - * Makefile.in: Rebuilt. - * Makefile.am (EXTRA_DIST): Explicitly list all distributable - files in subdirs. - (VERSION, CC): Removed. - -Thu May 8 17:19:01 1997 Anthony Green - - * Makefile.am: Many changes for new automake and libtool. - * Makefile.in: Rebuilt. - -Fri Nov 22 06:57:56 1996 Anthony Green - - * ffitest.c (main): Fixed test case for non mips machines. - -Wed Nov 20 22:31:59 1996 Anthony Green - - * types.c: Added ffi_type_void declaration. - -Tue Oct 29 13:07:19 1996 Anthony Green - - * ffitest.c (main): Fixed character constants. - (main): Emit warning for structure test 3 failure on Sun. - - * Makefile.am (VPATH): Fixed VPATH def'n so automake won't - strip it out. - Moved distdir hack from libffi to automake. - (ffitest): Added missing -c for $(COMPILE) (change in automake). - * Makefile.in: Rebuilt. - -Tue Oct 15 13:08:20 1996 Anthony Green - - * Makefile.am: Added "make lint" production. - * Makefile.in: Rebuilt. - - * prep_cif.c (STACK_ARG_SIZE): Improved STACK_ARG_SIZE macro. - Clean up based on LCLint output. Added funny /*@...@*/ comments to - annotate source. - - * ffitest.c, debug.c: Cleaned up code. - -Mon Oct 14 12:26:56 1996 Anthony Green - - * ffitest.c: Changes based on interface changes. - - * prep_cif.c (ffi_prep_cif): Cleaned up interface based on - feedback from Jim Blandy. - -Fri Oct 11 15:53:18 1996 Anthony Green - - * ffitest.c: Reordered tests while porting to sparc. - Made changes to handle lame structure passing for sparc. - Removed calls to fflush(). - - * prep_cif.c (ffi_prep_cif): Added special case for sparc - aggregate type arguments. - -Thu Oct 10 09:56:51 1996 Anthony Green - - * ffitest.c (main): Added structure passing/returning tests. - - * prep_cif.c (ffi_prep_cif): Perform proper initialization - of structure return types if needed. - (initialize_aggregate): Bug fix - -Wed Oct 9 16:04:20 1996 Anthony Green - - * types.c: Added special definitions for x86 (double doesn't - need double word alignment). - - * ffitest.c: Added many tests - -Tue Oct 8 09:19:22 1996 Anthony Green - - * prep_cif.c (ffi_prep_cif): Fixed assertion. - - * debug.c (ffi_assert): Must return a non void now. - - * Makefile.am: Added test production. - * Makefile: Rebuilt. - - * ffitest.c (main): Created. - - * types.c: Created. Stripped common code out of */ffi.c. - - * prep_cif.c: Added missing stdlib.h include. - - * debug.c (ffi_type_test): Used "a" to eliminate compiler - warnings in non-debug builds. Included ffi_common.h. - -Mon Oct 7 15:36:42 1996 Anthony Green - - * Makefile.am: Added a rule for .s -> .o - This is required by the SGI compiler. - * Makefile: Rebuilt. - -Fri Oct 4 09:51:08 1996 Anthony Green - - * prep_cif.c (initialize_aggregate): Moved abi specification - to ffi_prep_cif(). - -Thu Oct 3 15:37:37 1996 Anthony Green - - * prep_cif.c (ffi_prep_cif): Changed values from void* to void**. - (initialize_aggregate): Fixed aggregate type initialization. - - * Makefile.am (EXTRA_DIST): Added support code for "make dist". - * Makefile.in: Regenerated. - -Wed Oct 2 11:41:57 1996 Anthony Green - - * debug.c, prep_cif: Created. - - * Makefile.am: Added debug.o and prep_cif.o to OBJ. - * Makefile.in: Regenerated. - - * Makefile.am (INCLUDES): Added missing -I../include - * Makefile.in: Regenerated. - -Tue Oct 1 17:11:51 1996 Anthony Green - - * error.c, Makefile.am: Created. - * Makefile.in: Generated. - ---- libffi/src/x86 -------------------------------------------------------- - -Sun Oct 4 16:27:17 1998 Anthony Green - - * sysv.S (retlongdouble): Fixed long long return value support. - * ffi.c (ffi_prep_cif_machdep): Ditto. - -Wed May 13 04:30:33 1998 Anthony Green - - * ffi.c (ffi_prep_cif_machdep): Fixed long double return value - support. - -Wed Apr 15 08:43:20 1998 Anthony Green - - * ffi.c (ffi_prep_args): small struct support was missing. - -Thu May 8 16:53:58 1997 Anthony Green - - * objects.mak: Removed. - -Mon Dec 2 15:12:58 1996 Tom Tromey - - * sysv.S: Use .balign, for a.out Linux boxes. - -Tue Oct 15 13:06:50 1996 Anthony Green - - * ffi.c: Clean up based on LCLint output. - Added funny /*@...@*/ comments to annotate source. - -Fri Oct 11 16:43:38 1996 Anthony Green - - * ffi.c (ffi_call): Added assertion for bad ABIs. - -Wed Oct 9 13:57:27 1996 Anthony Green - - * sysv.S (retdouble): Fixed double return problems. - - * ffi.c (ffi_call): Corrected fn arg definition. - (ffi_prep_cif_machdep): Fixed double return problems - -Tue Oct 8 12:12:49 1996 Anthony Green - - * ffi.c: Moved ffi_type definitions to types.c. - (ffi_prep_args): Fixed type promotion bug. - -Mon Oct 7 15:53:06 1996 Anthony Green - - * ffi.c (FFI_*_TYPEDEF): Removed redundant ';' - -Fri Oct 4 09:54:53 1996 Anthony Green - - * ffi.c (ffi_call): Removed FFI_ABI arg, and swapped - remaining args. - -Wed Oct 2 10:07:05 1996 Anthony Green - - * ffi.c, sysv.S, objects.mak: Created. - (ffi_prep_cif): cif->rvalue no longer initialized to NULL. - (ffi_prep_cif_machdep): Moved machine independent cif processing - to src/prep_cif.c. Introduced ffi_prep_cif_machdep(). - ---- libffi/src/mips ------------------------------------------------------- - -Tue Feb 17 17:18:07 1998 Anthony Green - - * o32.S: Fixed typo in comment. - - * ffi.c (ffi_prep_cif_machdep): Fixed argument processing. - -Thu May 8 16:53:58 1997 Anthony Green - - * o32.s, n32.s: Wrappers for SGI tool support. - - * objects.mak: Removed. - -Tue Oct 29 14:37:45 1996 Anthony Green - - * ffi.c (ffi_prep_args): Changed int z to size_t z. - -Tue Oct 15 13:17:25 1996 Anthony Green - - * n32.S: Fixed bad stack munging. - - * ffi.c: Moved prototypes for ffi_call_?32() to here from - ffi_mips.h because extended_cif is not defined in ffi_mips.h. - -Mon Oct 14 12:42:02 1996 Anthony Green - - * ffi.c: Interface changes based on feedback from Jim Blandy. - -Thu Oct 10 11:22:16 1996 Anthony Green - - * n32.S, ffi.c: Lots of changes to support passing and - returning structures with the n32 calling convention. - - * n32.S: Fixed fn pointer bug. - - * ffi.c (ffi_prep_cif_machdep): Fix for o32 structure - return values. - (ffi_prep_args): Fixed n32 structure passing when structures - partially fit in registers. - -Wed Oct 9 13:49:25 1996 Anthony Green - - * objects.mak: Added n32.o. - - * n32.S: Created. - - * ffi.c (ffi_prep_args): Added magic to support proper - n32 processing. - -Tue Oct 8 10:37:35 1996 Anthony Green - - * ffi.c: Moved ffi_type definitions to types.c. - (ffi_prep_args): Fixed type promotion bug. - - * o32.S: This code is only built for o32 compiles. - A lot of the #define cruft has moved to ffi_mips.h. - - * ffi.c (ffi_prep_cif_machdep): Fixed arg flags. Second arg - is only processed if the first is either a float or double. - -Mon Oct 7 15:33:59 1996 Anthony Green - - * o32.S: Modified to compile under each of o32, n32 and n64. - - * ffi.c (FFI_*_TYPEDEF): Removed redundant ';' - -Fri Oct 4 09:53:25 1996 Anthony Green - - * ffi.c (ffi_call): Removed FFI_ABI arg, and swapped - remaining args. - -Wed Oct 2 17:41:22 1996 Anthony Green - - * o32.S: Removed crufty definitions. - -Wed Oct 2 12:53:42 1996 Anthony Green - - * ffi.c (ffi_prep_cif): cif->rvalue no longer initialized to NULL. - (ffi_prep_cif_machdep): Moved all machine independent cif processing - to src/prep_cif.c. Introduced ffi_prep_cif_machdep. Return types - of FFI_TYPE_STRUCT are no different than FFI_TYPE_INT. - -Tue Oct 1 17:11:02 1996 Anthony Green - - * ffi.c, o32.S, object.mak: Created - ---- libffi/src/sparc ------------------------------------------------------ - -Tue Feb 24 16:33:18 1998 Anthony Green - - * ffi.c (ffi_prep_args): Added long double support. - -Thu May 8 16:53:58 1997 Anthony Green - - * objects.mak: Removed. - -Thu May 1 16:07:56 1997 Anthony Green - - * v8.S: Fixed minor portability problem reported by - Russ McManus . - -Tue Nov 26 14:12:43 1996 Anthony Green - - * v8.S: Used STACKFRAME define elsewhere. - - * ffi.c (ffi_prep_args): Zero out space when USING_PURIFY - is set. - (ffi_prep_cif_machdep): Allocate the correct stack frame - space for functions with < 6 args. - -Tue Oct 29 15:08:55 1996 Anthony Green - - * ffi.c (ffi_prep_args): int z is now size_t z. - -Mon Oct 14 13:31:24 1996 Anthony Green - - * v8.S (ffi_call_V8): Gordon rewrites this again. It looks - great now. - - * ffi.c (ffi_call): The comment about hijacked registers - is no longer valid after gordoni hacked v8.S. - - * v8.S (ffi_call_V8): Rewrote with gordoni. Much simpler. - - * v8.S, ffi.c: ffi_call() had changed to accept more than - two args, so v8.S had to change (because it hijacks incoming - arg registers). - - * ffi.c: Interface changes based on feedback from Jim Blandy. - -Thu Oct 10 17:48:16 1996 Anthony Green - - * ffi.c, v8.S, objects.mak: Created. - - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/LICENSE b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/LICENSE deleted file mode 100644 index 7d12666..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -libffi - Copyright (c) 1996-2011 Anthony Green, Red Hat, Inc and others. -See source files for details. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -``Software''), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/Makefile.am b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/Makefile.am deleted file mode 100644 index 86119d8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/Makefile.am +++ /dev/null @@ -1,196 +0,0 @@ -## Process this with automake to create Makefile.in - -AUTOMAKE_OPTIONS = foreign subdir-objects - -SUBDIRS = include testsuite man - -EXTRA_DIST = LICENSE ChangeLog.v1 ChangeLog.libgcj configure.host \ - src/alpha/ffi.c src/alpha/osf.S src/alpha/ffitarget.h \ - src/arm/ffi.c src/arm/sysv.S src/arm/trampoline.S \ - src/arm/ffitarget.h src/avr32/ffi.c src/avr32/sysv.S \ - src/avr32/ffitarget.h src/cris/ffi.c src/cris/sysv.S \ - src/cris/ffitarget.h src/ia64/ffi.c src/ia64/ffitarget.h \ - src/ia64/ia64_flags.h src/ia64/unix.S src/mips/ffi.c \ - src/mips/n32.S src/mips/o32.S src/mips/ffitarget.h \ - src/m32r/ffi.c src/m32r/sysv.S src/m32r/ffitarget.h \ - src/m68k/ffi.c src/m68k/sysv.S src/m68k/ffitarget.h \ - src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/linux64.S \ - src/powerpc/linux64_closure.S src/powerpc/ppc_closure.S \ - src/powerpc/asm.h src/powerpc/aix.S src/powerpc/darwin.S \ - src/powerpc/aix_closure.S src/powerpc/darwin_closure.S \ - src/powerpc/ffi_darwin.c src/powerpc/ffitarget.h \ - src/s390/ffi.c src/s390/sysv.S src/s390/ffitarget.h \ - src/sh/ffi.c src/sh/sysv.S src/sh/ffitarget.h src/sh64/ffi.c \ - src/sh64/sysv.S src/sh64/ffitarget.h src/sparc/v8.S \ - src/sparc/v9.S src/sparc/ffitarget.h src/sparc/ffi.c \ - src/x86/darwin64.S src/x86/ffi.c src/x86/sysv.S \ - src/x86/win32.S src/x86/win64.S src/x86/darwin.S \ - src/x86/freebsd.S src/x86/ffi64.c src/x86/unix64.S \ - src/x86/ffitarget.h src/pa/ffitarget.h src/pa/ffi.c \ - src/pa/linux.S src/pa/hpux32.S src/frv/ffi.c src/frv/eabi.S \ - src/frv/ffitarget.h src/dlmalloc.c src/moxie/ffi.c \ - src/moxie/eabi.S libtool-version ChangeLog.libffi \ - m4/libtool.m4 m4/lt~obsolete.m4 m4/ltoptions.m4 m4/ltsugar.m4 \ - m4/ltversion.m4 build-ios.sh src/arm/gentramp.sh src/debug.c \ - msvcc.sh - - -info_TEXINFOS = doc/libffi.texi - -## ################################################################ - -## -## This section is for make and multilib madness. -## - -# Work around what appears to be a GNU make bug handling MAKEFLAGS -# values defined in terms of make variables, as is the case for CC and -# friends when we are called from the top level Makefile. -AM_MAKEFLAGS = \ - "AR_FLAGS=$(AR_FLAGS)" \ - "CC_FOR_BUILD=$(CC_FOR_BUILD)" \ - "CFLAGS=$(CFLAGS)" \ - "CXXFLAGS=$(CXXFLAGS)" \ - "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \ - "CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \ - "INSTALL=$(INSTALL)" \ - "INSTALL_DATA=$(INSTALL_DATA)" \ - "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ - "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \ - "JC1FLAGS=$(JC1FLAGS)" \ - "LDFLAGS=$(LDFLAGS)" \ - "LIBCFLAGS=$(LIBCFLAGS)" \ - "LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \ - "MAKE=$(MAKE)" \ - "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \ - "PICFLAG=$(PICFLAG)" \ - "PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)" \ - "RUNTESTFLAGS=$(RUNTESTFLAGS)" \ - "SHELL=$(SHELL)" \ - "exec_prefix=$(exec_prefix)" \ - "infodir=$(infodir)" \ - "libdir=$(libdir)" \ - "mandir=$(mandir)" \ - "prefix=$(prefix)" \ - "AR=$(AR)" \ - "AS=$(AS)" \ - "CC=$(CC)" \ - "CXX=$(CXX)" \ - "LD=$(LD)" \ - "NM=$(NM)" \ - "RANLIB=$(RANLIB)" \ - "DESTDIR=$(DESTDIR)" - -MAKEOVERRIDES= - -ACLOCAL_AMFLAGS=$(ACLOCAL_AMFLAGS) -I m4 - -lib_LTLIBRARIES = libffi.la -noinst_LTLIBRARIES = libffi_convenience.la - -libffi_la_SOURCES = src/debug.c src/prep_cif.c src/types.c \ - src/raw_api.c src/java_raw_api.c src/closures.c - -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = libffi.pc - -nodist_libffi_la_SOURCES = - -if MIPS -nodist_libffi_la_SOURCES += src/mips/ffi.c src/mips/o32.S src/mips/n32.S -endif -if X86 -nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/sysv.S -endif -if X86_FREEBSD -nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/freebsd.S -endif -if X86_WIN32 -nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/win32.S -endif -if X86_WIN64 -nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/win64.S -endif -if X86_DARWIN -nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/darwin.S src/x86/ffi64.c src/x86/darwin64.S -endif -if SPARC -nodist_libffi_la_SOURCES += src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S -endif -if ALPHA -nodist_libffi_la_SOURCES += src/alpha/ffi.c src/alpha/osf.S -endif -if IA64 -nodist_libffi_la_SOURCES += src/ia64/ffi.c src/ia64/unix.S -endif -if M32R -nodist_libffi_la_SOURCES += src/m32r/sysv.S src/m32r/ffi.c -endif -if M68K -nodist_libffi_la_SOURCES += src/m68k/ffi.c src/m68k/sysv.S -endif -if POWERPC -nodist_libffi_la_SOURCES += src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S src/powerpc/linux64.S src/powerpc/linux64_closure.S -endif -if POWERPC_AIX -nodist_libffi_la_SOURCES += src/powerpc/ffi_darwin.c src/powerpc/aix.S src/powerpc/aix_closure.S -endif -if POWERPC_DARWIN -nodist_libffi_la_SOURCES += src/powerpc/ffi_darwin.c src/powerpc/darwin.S src/powerpc/darwin_closure.S -endif -if POWERPC_FREEBSD -nodist_libffi_la_SOURCES += src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S -endif -if ARM -nodist_libffi_la_SOURCES += src/arm/sysv.S src/arm/ffi.c -if FFI_EXEC_TRAMPOLINE_TABLE -nodist_libffi_la_SOURCES += src/arm/trampoline.S -endif -endif -if AVR32 -nodist_libffi_la_SOURCES += src/avr32/sysv.S src/avr32/ffi.c -endif -if LIBFFI_CRIS -nodist_libffi_la_SOURCES += src/cris/sysv.S src/cris/ffi.c -endif -if FRV -nodist_libffi_la_SOURCES += src/frv/eabi.S src/frv/ffi.c -endif -if S390 -nodist_libffi_la_SOURCES += src/s390/sysv.S src/s390/ffi.c -endif -if X86_64 -nodist_libffi_la_SOURCES += src/x86/ffi64.c src/x86/unix64.S src/x86/ffi.c src/x86/sysv.S -endif -if SH -nodist_libffi_la_SOURCES += src/sh/sysv.S src/sh/ffi.c -endif -if SH64 -nodist_libffi_la_SOURCES += src/sh64/sysv.S src/sh64/ffi.c -endif -if PA_LINUX -nodist_libffi_la_SOURCES += src/pa/linux.S src/pa/ffi.c -endif -if PA_HPUX -nodist_libffi_la_SOURCES += src/pa/hpux32.S src/pa/ffi.c -endif - -libffi_convenience_la_SOURCES = $(libffi_la_SOURCES) -nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES) - -AM_CFLAGS = -g -if FFI_DEBUG -# Build debug. Define FFI_DEBUG on the commandline so that, when building with -# MSVC, it can link against the debug CRT. -AM_CFLAGS += -DFFI_DEBUG -endif - -libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) $(AM_LTLDFLAGS) - -AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src -AM_CCASFLAGS = $(AM_CPPFLAGS) - -# No install-html or install-pdf support in automake yet -.PHONY: install-html install-pdf -install-html: -install-pdf: diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/Makefile.in b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/Makefile.in deleted file mode 100644 index cbe1589..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/Makefile.in +++ /dev/null @@ -1,1820 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -@MIPS_TRUE@am__append_1 = src/mips/ffi.c src/mips/o32.S src/mips/n32.S -@X86_TRUE@am__append_2 = src/x86/ffi.c src/x86/sysv.S -@X86_FREEBSD_TRUE@am__append_3 = src/x86/ffi.c src/x86/freebsd.S -@X86_WIN32_TRUE@am__append_4 = src/x86/ffi.c src/x86/win32.S -@X86_WIN64_TRUE@am__append_5 = src/x86/ffi.c src/x86/win64.S -@X86_DARWIN_TRUE@am__append_6 = src/x86/ffi.c src/x86/darwin.S src/x86/ffi64.c src/x86/darwin64.S -@SPARC_TRUE@am__append_7 = src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S -@ALPHA_TRUE@am__append_8 = src/alpha/ffi.c src/alpha/osf.S -@IA64_TRUE@am__append_9 = src/ia64/ffi.c src/ia64/unix.S -@M32R_TRUE@am__append_10 = src/m32r/sysv.S src/m32r/ffi.c -@M68K_TRUE@am__append_11 = src/m68k/ffi.c src/m68k/sysv.S -@POWERPC_TRUE@am__append_12 = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S src/powerpc/linux64.S src/powerpc/linux64_closure.S -@POWERPC_AIX_TRUE@am__append_13 = src/powerpc/ffi_darwin.c src/powerpc/aix.S src/powerpc/aix_closure.S -@POWERPC_DARWIN_TRUE@am__append_14 = src/powerpc/ffi_darwin.c src/powerpc/darwin.S src/powerpc/darwin_closure.S -@POWERPC_FREEBSD_TRUE@am__append_15 = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S -@ARM_TRUE@am__append_16 = src/arm/sysv.S src/arm/ffi.c -@ARM_TRUE@@FFI_EXEC_TRAMPOLINE_TABLE_TRUE@am__append_17 = src/arm/trampoline.S -@AVR32_TRUE@am__append_18 = src/avr32/sysv.S src/avr32/ffi.c -@LIBFFI_CRIS_TRUE@am__append_19 = src/cris/sysv.S src/cris/ffi.c -@FRV_TRUE@am__append_20 = src/frv/eabi.S src/frv/ffi.c -@S390_TRUE@am__append_21 = src/s390/sysv.S src/s390/ffi.c -@X86_64_TRUE@am__append_22 = src/x86/ffi64.c src/x86/unix64.S src/x86/ffi.c src/x86/sysv.S -@SH_TRUE@am__append_23 = src/sh/sysv.S src/sh/ffi.c -@SH64_TRUE@am__append_24 = src/sh64/sysv.S src/sh64/ffi.c -@PA_LINUX_TRUE@am__append_25 = src/pa/linux.S src/pa/ffi.c -@PA_HPUX_TRUE@am__append_26 = src/pa/hpux32.S src/pa/ffi.c -# Build debug. Define FFI_DEBUG on the commandline so that, when building with -# MSVC, it can link against the debug CRT. -@FFI_DEBUG_TRUE@am__append_27 = -DFFI_DEBUG -subdir = . -DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(srcdir)/doc/stamp-vti \ - $(srcdir)/doc/version.texi $(srcdir)/fficonfig.h.in \ - $(srcdir)/libffi.pc.in $(top_srcdir)/configure ChangeLog \ - compile config.guess config.sub depcomp install-sh ltmain.sh \ - mdate-sh missing texinfo.tex -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cc_maxopt.m4 \ - $(top_srcdir)/m4/ax_cflags_warn_all.m4 \ - $(top_srcdir)/m4/ax_check_compiler_flags.m4 \ - $(top_srcdir)/m4/ax_compiler_vendor.m4 \ - $(top_srcdir)/m4/ax_configure_args.m4 \ - $(top_srcdir)/m4/ax_enable_builddir.m4 \ - $(top_srcdir)/m4/ax_gcc_archflag.m4 \ - $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno config.status.lineno -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = fficonfig.h -CONFIG_CLEAN_FILES = libffi.pc -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(infodir)" \ - "$(DESTDIR)$(pkgconfigdir)" -LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) -libffi_la_LIBADD = -am__dirstamp = $(am__leading_dot)dirstamp -am_libffi_la_OBJECTS = src/debug.lo src/prep_cif.lo src/types.lo \ - src/raw_api.lo src/java_raw_api.lo src/closures.lo -@MIPS_TRUE@am__objects_1 = src/mips/ffi.lo src/mips/o32.lo \ -@MIPS_TRUE@ src/mips/n32.lo -@X86_TRUE@am__objects_2 = src/x86/ffi.lo src/x86/sysv.lo -@X86_FREEBSD_TRUE@am__objects_3 = src/x86/ffi.lo src/x86/freebsd.lo -@X86_WIN32_TRUE@am__objects_4 = src/x86/ffi.lo src/x86/win32.lo -@X86_WIN64_TRUE@am__objects_5 = src/x86/ffi.lo src/x86/win64.lo -@X86_DARWIN_TRUE@am__objects_6 = src/x86/ffi.lo src/x86/darwin.lo \ -@X86_DARWIN_TRUE@ src/x86/ffi64.lo src/x86/darwin64.lo -@SPARC_TRUE@am__objects_7 = src/sparc/ffi.lo src/sparc/v8.lo \ -@SPARC_TRUE@ src/sparc/v9.lo -@ALPHA_TRUE@am__objects_8 = src/alpha/ffi.lo src/alpha/osf.lo -@IA64_TRUE@am__objects_9 = src/ia64/ffi.lo src/ia64/unix.lo -@M32R_TRUE@am__objects_10 = src/m32r/sysv.lo src/m32r/ffi.lo -@M68K_TRUE@am__objects_11 = src/m68k/ffi.lo src/m68k/sysv.lo -@POWERPC_TRUE@am__objects_12 = src/powerpc/ffi.lo src/powerpc/sysv.lo \ -@POWERPC_TRUE@ src/powerpc/ppc_closure.lo \ -@POWERPC_TRUE@ src/powerpc/linux64.lo \ -@POWERPC_TRUE@ src/powerpc/linux64_closure.lo -@POWERPC_AIX_TRUE@am__objects_13 = src/powerpc/ffi_darwin.lo \ -@POWERPC_AIX_TRUE@ src/powerpc/aix.lo \ -@POWERPC_AIX_TRUE@ src/powerpc/aix_closure.lo -@POWERPC_DARWIN_TRUE@am__objects_14 = src/powerpc/ffi_darwin.lo \ -@POWERPC_DARWIN_TRUE@ src/powerpc/darwin.lo \ -@POWERPC_DARWIN_TRUE@ src/powerpc/darwin_closure.lo -@POWERPC_FREEBSD_TRUE@am__objects_15 = src/powerpc/ffi.lo \ -@POWERPC_FREEBSD_TRUE@ src/powerpc/sysv.lo \ -@POWERPC_FREEBSD_TRUE@ src/powerpc/ppc_closure.lo -@ARM_TRUE@am__objects_16 = src/arm/sysv.lo src/arm/ffi.lo -@ARM_TRUE@@FFI_EXEC_TRAMPOLINE_TABLE_TRUE@am__objects_17 = src/arm/trampoline.lo -@AVR32_TRUE@am__objects_18 = src/avr32/sysv.lo src/avr32/ffi.lo -@LIBFFI_CRIS_TRUE@am__objects_19 = src/cris/sysv.lo src/cris/ffi.lo -@FRV_TRUE@am__objects_20 = src/frv/eabi.lo src/frv/ffi.lo -@S390_TRUE@am__objects_21 = src/s390/sysv.lo src/s390/ffi.lo -@X86_64_TRUE@am__objects_22 = src/x86/ffi64.lo src/x86/unix64.lo \ -@X86_64_TRUE@ src/x86/ffi.lo src/x86/sysv.lo -@SH_TRUE@am__objects_23 = src/sh/sysv.lo src/sh/ffi.lo -@SH64_TRUE@am__objects_24 = src/sh64/sysv.lo src/sh64/ffi.lo -@PA_LINUX_TRUE@am__objects_25 = src/pa/linux.lo src/pa/ffi.lo -@PA_HPUX_TRUE@am__objects_26 = src/pa/hpux32.lo src/pa/ffi.lo -nodist_libffi_la_OBJECTS = $(am__objects_1) $(am__objects_2) \ - $(am__objects_3) $(am__objects_4) $(am__objects_5) \ - $(am__objects_6) $(am__objects_7) $(am__objects_8) \ - $(am__objects_9) $(am__objects_10) $(am__objects_11) \ - $(am__objects_12) $(am__objects_13) $(am__objects_14) \ - $(am__objects_15) $(am__objects_16) $(am__objects_17) \ - $(am__objects_18) $(am__objects_19) $(am__objects_20) \ - $(am__objects_21) $(am__objects_22) $(am__objects_23) \ - $(am__objects_24) $(am__objects_25) $(am__objects_26) -libffi_la_OBJECTS = $(am_libffi_la_OBJECTS) \ - $(nodist_libffi_la_OBJECTS) -libffi_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(libffi_la_LDFLAGS) $(LDFLAGS) -o $@ -libffi_convenience_la_LIBADD = -am__objects_27 = src/debug.lo src/prep_cif.lo src/types.lo \ - src/raw_api.lo src/java_raw_api.lo src/closures.lo -am_libffi_convenience_la_OBJECTS = $(am__objects_27) -am__objects_28 = $(am__objects_1) $(am__objects_2) $(am__objects_3) \ - $(am__objects_4) $(am__objects_5) $(am__objects_6) \ - $(am__objects_7) $(am__objects_8) $(am__objects_9) \ - $(am__objects_10) $(am__objects_11) $(am__objects_12) \ - $(am__objects_13) $(am__objects_14) $(am__objects_15) \ - $(am__objects_16) $(am__objects_17) $(am__objects_18) \ - $(am__objects_19) $(am__objects_20) $(am__objects_21) \ - $(am__objects_22) $(am__objects_23) $(am__objects_24) \ - $(am__objects_25) $(am__objects_26) -nodist_libffi_convenience_la_OBJECTS = $(am__objects_28) -libffi_convenience_la_OBJECTS = $(am_libffi_convenience_la_OBJECTS) \ - $(nodist_libffi_convenience_la_OBJECTS) -DEFAULT_INCLUDES = -I.@am__isrc@ -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -LTCPPASCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -SOURCES = $(libffi_la_SOURCES) $(nodist_libffi_la_SOURCES) \ - $(libffi_convenience_la_SOURCES) \ - $(nodist_libffi_convenience_la_SOURCES) -DIST_SOURCES = $(libffi_la_SOURCES) $(libffi_convenience_la_SOURCES) -INFO_DEPS = $(srcdir)/doc/libffi.info -am__TEXINFO_TEX_DIR = $(srcdir) -DVIS = doc/libffi.dvi -PDFS = doc/libffi.pdf -PSS = doc/libffi.ps -HTMLS = doc/libffi.html -TEXINFOS = doc/libffi.texi -TEXI2DVI = texi2dvi -TEXI2PDF = $(TEXI2DVI) --pdf --batch -MAKEINFOHTML = $(MAKEINFO) --html -AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) -DVIPS = dvips -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-dvi-recursive install-exec-recursive \ - install-html-recursive install-info-recursive \ - install-pdf-recursive install-ps-recursive install-recursive \ - installcheck-recursive installdirs-recursive pdf-recursive \ - ps-recursive uninstall-recursive -DATA = $(pkgconfig_DATA) -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ - $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ - distdir dist dist-all distcheck -ETAGS = etags -CTAGS = ctags -DIST_SUBDIRS = $(SUBDIRS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - { test ! -d "$(distdir)" \ - || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr "$(distdir)"; }; } -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -DIST_ARCHIVES = $(distdir).tar.gz -GZIP_ENV = --best -distuninstallcheck_listfiles = find . -type f -print -distcleancheck_listfiles = find . -type f -print -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -AMTAR = @AMTAR@ -AM_LTLDFLAGS = @AM_LTLDFLAGS@ -AM_RUNTESTFLAGS = @AM_RUNTESTFLAGS@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCAS = @CCAS@ -CCASDEPMODE = @CCASDEPMODE@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FFI_EXEC_TRAMPOLINE_TABLE = @FFI_EXEC_TRAMPOLINE_TABLE@ -FGREP = @FGREP@ -GREP = @GREP@ -HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PRTDIAG = @PRTDIAG@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -TARGET = @TARGET@ -TARGETDIR = @TARGETDIR@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -ax_enable_builddir_sed = @ax_enable_builddir_sed@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sys_symbol_underscore = @sys_symbol_underscore@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -toolexecdir = @toolexecdir@ -toolexeclibdir = @toolexeclibdir@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AUTOMAKE_OPTIONS = foreign subdir-objects -SUBDIRS = include testsuite man -EXTRA_DIST = LICENSE ChangeLog.v1 ChangeLog.libgcj configure.host \ - src/alpha/ffi.c src/alpha/osf.S src/alpha/ffitarget.h \ - src/arm/ffi.c src/arm/sysv.S src/arm/trampoline.S \ - src/arm/ffitarget.h src/avr32/ffi.c src/avr32/sysv.S \ - src/avr32/ffitarget.h src/cris/ffi.c src/cris/sysv.S \ - src/cris/ffitarget.h src/ia64/ffi.c src/ia64/ffitarget.h \ - src/ia64/ia64_flags.h src/ia64/unix.S src/mips/ffi.c \ - src/mips/n32.S src/mips/o32.S src/mips/ffitarget.h \ - src/m32r/ffi.c src/m32r/sysv.S src/m32r/ffitarget.h \ - src/m68k/ffi.c src/m68k/sysv.S src/m68k/ffitarget.h \ - src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/linux64.S \ - src/powerpc/linux64_closure.S src/powerpc/ppc_closure.S \ - src/powerpc/asm.h src/powerpc/aix.S src/powerpc/darwin.S \ - src/powerpc/aix_closure.S src/powerpc/darwin_closure.S \ - src/powerpc/ffi_darwin.c src/powerpc/ffitarget.h \ - src/s390/ffi.c src/s390/sysv.S src/s390/ffitarget.h \ - src/sh/ffi.c src/sh/sysv.S src/sh/ffitarget.h src/sh64/ffi.c \ - src/sh64/sysv.S src/sh64/ffitarget.h src/sparc/v8.S \ - src/sparc/v9.S src/sparc/ffitarget.h src/sparc/ffi.c \ - src/x86/darwin64.S src/x86/ffi.c src/x86/sysv.S \ - src/x86/win32.S src/x86/win64.S src/x86/darwin.S \ - src/x86/freebsd.S src/x86/ffi64.c src/x86/unix64.S \ - src/x86/ffitarget.h src/pa/ffitarget.h src/pa/ffi.c \ - src/pa/linux.S src/pa/hpux32.S src/frv/ffi.c src/frv/eabi.S \ - src/frv/ffitarget.h src/dlmalloc.c src/moxie/ffi.c \ - src/moxie/eabi.S libtool-version ChangeLog.libffi \ - m4/libtool.m4 m4/lt~obsolete.m4 m4/ltoptions.m4 m4/ltsugar.m4 \ - m4/ltversion.m4 build-ios.sh src/arm/gentramp.sh src/debug.c \ - msvcc.sh - -info_TEXINFOS = doc/libffi.texi - -# Work around what appears to be a GNU make bug handling MAKEFLAGS -# values defined in terms of make variables, as is the case for CC and -# friends when we are called from the top level Makefile. -AM_MAKEFLAGS = \ - "AR_FLAGS=$(AR_FLAGS)" \ - "CC_FOR_BUILD=$(CC_FOR_BUILD)" \ - "CFLAGS=$(CFLAGS)" \ - "CXXFLAGS=$(CXXFLAGS)" \ - "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \ - "CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \ - "INSTALL=$(INSTALL)" \ - "INSTALL_DATA=$(INSTALL_DATA)" \ - "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ - "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \ - "JC1FLAGS=$(JC1FLAGS)" \ - "LDFLAGS=$(LDFLAGS)" \ - "LIBCFLAGS=$(LIBCFLAGS)" \ - "LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \ - "MAKE=$(MAKE)" \ - "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \ - "PICFLAG=$(PICFLAG)" \ - "PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)" \ - "RUNTESTFLAGS=$(RUNTESTFLAGS)" \ - "SHELL=$(SHELL)" \ - "exec_prefix=$(exec_prefix)" \ - "infodir=$(infodir)" \ - "libdir=$(libdir)" \ - "mandir=$(mandir)" \ - "prefix=$(prefix)" \ - "AR=$(AR)" \ - "AS=$(AS)" \ - "CC=$(CC)" \ - "CXX=$(CXX)" \ - "LD=$(LD)" \ - "NM=$(NM)" \ - "RANLIB=$(RANLIB)" \ - "DESTDIR=$(DESTDIR)" - -MAKEOVERRIDES = -ACLOCAL_AMFLAGS = $(ACLOCAL_AMFLAGS) -I m4 -lib_LTLIBRARIES = libffi.la -noinst_LTLIBRARIES = libffi_convenience.la -libffi_la_SOURCES = src/debug.c src/prep_cif.c src/types.c \ - src/raw_api.c src/java_raw_api.c src/closures.c - -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = libffi.pc -nodist_libffi_la_SOURCES = $(am__append_1) $(am__append_2) \ - $(am__append_3) $(am__append_4) $(am__append_5) \ - $(am__append_6) $(am__append_7) $(am__append_8) \ - $(am__append_9) $(am__append_10) $(am__append_11) \ - $(am__append_12) $(am__append_13) $(am__append_14) \ - $(am__append_15) $(am__append_16) $(am__append_17) \ - $(am__append_18) $(am__append_19) $(am__append_20) \ - $(am__append_21) $(am__append_22) $(am__append_23) \ - $(am__append_24) $(am__append_25) $(am__append_26) -libffi_convenience_la_SOURCES = $(libffi_la_SOURCES) -nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES) -AM_CFLAGS = -g $(am__append_27) -libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) $(AM_LTLDFLAGS) -AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src -AM_CCASFLAGS = $(AM_CPPFLAGS) -all: fficonfig.h - $(MAKE) $(AM_MAKEFLAGS) all-recursive - -.SUFFIXES: -.SUFFIXES: .S .c .dvi .lo .o .obj .ps -am--refresh: - @: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - echo ' $(SHELL) ./config.status'; \ - $(SHELL) ./config.status;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - $(am__cd) $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -$(am__aclocal_m4_deps): - -fficonfig.h: stamp-h1 - @if test ! -f $@; then \ - rm -f stamp-h1; \ - $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ - else :; fi - -stamp-h1: $(srcdir)/fficonfig.h.in $(top_builddir)/config.status - @rm -f stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status fficonfig.h -$(srcdir)/fficonfig.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f stamp-h1 - touch $@ - -distclean-hdr: - -rm -f fficonfig.h stamp-h1 -libffi.pc: $(top_builddir)/config.status $(srcdir)/libffi.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -src/$(am__dirstamp): - @$(MKDIR_P) src - @: > src/$(am__dirstamp) -src/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/$(DEPDIR) - @: > src/$(DEPDIR)/$(am__dirstamp) -src/debug.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) -src/prep_cif.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) -src/types.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) -src/raw_api.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) -src/java_raw_api.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) -src/closures.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) -src/mips/$(am__dirstamp): - @$(MKDIR_P) src/mips - @: > src/mips/$(am__dirstamp) -src/mips/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/mips/$(DEPDIR) - @: > src/mips/$(DEPDIR)/$(am__dirstamp) -src/mips/ffi.lo: src/mips/$(am__dirstamp) \ - src/mips/$(DEPDIR)/$(am__dirstamp) -src/mips/o32.lo: src/mips/$(am__dirstamp) \ - src/mips/$(DEPDIR)/$(am__dirstamp) -src/mips/n32.lo: src/mips/$(am__dirstamp) \ - src/mips/$(DEPDIR)/$(am__dirstamp) -src/x86/$(am__dirstamp): - @$(MKDIR_P) src/x86 - @: > src/x86/$(am__dirstamp) -src/x86/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/x86/$(DEPDIR) - @: > src/x86/$(DEPDIR)/$(am__dirstamp) -src/x86/ffi.lo: src/x86/$(am__dirstamp) \ - src/x86/$(DEPDIR)/$(am__dirstamp) -src/x86/sysv.lo: src/x86/$(am__dirstamp) \ - src/x86/$(DEPDIR)/$(am__dirstamp) -src/x86/freebsd.lo: src/x86/$(am__dirstamp) \ - src/x86/$(DEPDIR)/$(am__dirstamp) -src/x86/win32.lo: src/x86/$(am__dirstamp) \ - src/x86/$(DEPDIR)/$(am__dirstamp) -src/x86/win64.lo: src/x86/$(am__dirstamp) \ - src/x86/$(DEPDIR)/$(am__dirstamp) -src/x86/darwin.lo: src/x86/$(am__dirstamp) \ - src/x86/$(DEPDIR)/$(am__dirstamp) -src/x86/ffi64.lo: src/x86/$(am__dirstamp) \ - src/x86/$(DEPDIR)/$(am__dirstamp) -src/x86/darwin64.lo: src/x86/$(am__dirstamp) \ - src/x86/$(DEPDIR)/$(am__dirstamp) -src/sparc/$(am__dirstamp): - @$(MKDIR_P) src/sparc - @: > src/sparc/$(am__dirstamp) -src/sparc/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/sparc/$(DEPDIR) - @: > src/sparc/$(DEPDIR)/$(am__dirstamp) -src/sparc/ffi.lo: src/sparc/$(am__dirstamp) \ - src/sparc/$(DEPDIR)/$(am__dirstamp) -src/sparc/v8.lo: src/sparc/$(am__dirstamp) \ - src/sparc/$(DEPDIR)/$(am__dirstamp) -src/sparc/v9.lo: src/sparc/$(am__dirstamp) \ - src/sparc/$(DEPDIR)/$(am__dirstamp) -src/alpha/$(am__dirstamp): - @$(MKDIR_P) src/alpha - @: > src/alpha/$(am__dirstamp) -src/alpha/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/alpha/$(DEPDIR) - @: > src/alpha/$(DEPDIR)/$(am__dirstamp) -src/alpha/ffi.lo: src/alpha/$(am__dirstamp) \ - src/alpha/$(DEPDIR)/$(am__dirstamp) -src/alpha/osf.lo: src/alpha/$(am__dirstamp) \ - src/alpha/$(DEPDIR)/$(am__dirstamp) -src/ia64/$(am__dirstamp): - @$(MKDIR_P) src/ia64 - @: > src/ia64/$(am__dirstamp) -src/ia64/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/ia64/$(DEPDIR) - @: > src/ia64/$(DEPDIR)/$(am__dirstamp) -src/ia64/ffi.lo: src/ia64/$(am__dirstamp) \ - src/ia64/$(DEPDIR)/$(am__dirstamp) -src/ia64/unix.lo: src/ia64/$(am__dirstamp) \ - src/ia64/$(DEPDIR)/$(am__dirstamp) -src/m32r/$(am__dirstamp): - @$(MKDIR_P) src/m32r - @: > src/m32r/$(am__dirstamp) -src/m32r/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/m32r/$(DEPDIR) - @: > src/m32r/$(DEPDIR)/$(am__dirstamp) -src/m32r/sysv.lo: src/m32r/$(am__dirstamp) \ - src/m32r/$(DEPDIR)/$(am__dirstamp) -src/m32r/ffi.lo: src/m32r/$(am__dirstamp) \ - src/m32r/$(DEPDIR)/$(am__dirstamp) -src/m68k/$(am__dirstamp): - @$(MKDIR_P) src/m68k - @: > src/m68k/$(am__dirstamp) -src/m68k/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/m68k/$(DEPDIR) - @: > src/m68k/$(DEPDIR)/$(am__dirstamp) -src/m68k/ffi.lo: src/m68k/$(am__dirstamp) \ - src/m68k/$(DEPDIR)/$(am__dirstamp) -src/m68k/sysv.lo: src/m68k/$(am__dirstamp) \ - src/m68k/$(DEPDIR)/$(am__dirstamp) -src/powerpc/$(am__dirstamp): - @$(MKDIR_P) src/powerpc - @: > src/powerpc/$(am__dirstamp) -src/powerpc/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/powerpc/$(DEPDIR) - @: > src/powerpc/$(DEPDIR)/$(am__dirstamp) -src/powerpc/ffi.lo: src/powerpc/$(am__dirstamp) \ - src/powerpc/$(DEPDIR)/$(am__dirstamp) -src/powerpc/sysv.lo: src/powerpc/$(am__dirstamp) \ - src/powerpc/$(DEPDIR)/$(am__dirstamp) -src/powerpc/ppc_closure.lo: src/powerpc/$(am__dirstamp) \ - src/powerpc/$(DEPDIR)/$(am__dirstamp) -src/powerpc/linux64.lo: src/powerpc/$(am__dirstamp) \ - src/powerpc/$(DEPDIR)/$(am__dirstamp) -src/powerpc/linux64_closure.lo: src/powerpc/$(am__dirstamp) \ - src/powerpc/$(DEPDIR)/$(am__dirstamp) -src/powerpc/ffi_darwin.lo: src/powerpc/$(am__dirstamp) \ - src/powerpc/$(DEPDIR)/$(am__dirstamp) -src/powerpc/aix.lo: src/powerpc/$(am__dirstamp) \ - src/powerpc/$(DEPDIR)/$(am__dirstamp) -src/powerpc/aix_closure.lo: src/powerpc/$(am__dirstamp) \ - src/powerpc/$(DEPDIR)/$(am__dirstamp) -src/powerpc/darwin.lo: src/powerpc/$(am__dirstamp) \ - src/powerpc/$(DEPDIR)/$(am__dirstamp) -src/powerpc/darwin_closure.lo: src/powerpc/$(am__dirstamp) \ - src/powerpc/$(DEPDIR)/$(am__dirstamp) -src/arm/$(am__dirstamp): - @$(MKDIR_P) src/arm - @: > src/arm/$(am__dirstamp) -src/arm/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/arm/$(DEPDIR) - @: > src/arm/$(DEPDIR)/$(am__dirstamp) -src/arm/sysv.lo: src/arm/$(am__dirstamp) \ - src/arm/$(DEPDIR)/$(am__dirstamp) -src/arm/ffi.lo: src/arm/$(am__dirstamp) \ - src/arm/$(DEPDIR)/$(am__dirstamp) -src/arm/trampoline.lo: src/arm/$(am__dirstamp) \ - src/arm/$(DEPDIR)/$(am__dirstamp) -src/avr32/$(am__dirstamp): - @$(MKDIR_P) src/avr32 - @: > src/avr32/$(am__dirstamp) -src/avr32/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/avr32/$(DEPDIR) - @: > src/avr32/$(DEPDIR)/$(am__dirstamp) -src/avr32/sysv.lo: src/avr32/$(am__dirstamp) \ - src/avr32/$(DEPDIR)/$(am__dirstamp) -src/avr32/ffi.lo: src/avr32/$(am__dirstamp) \ - src/avr32/$(DEPDIR)/$(am__dirstamp) -src/cris/$(am__dirstamp): - @$(MKDIR_P) src/cris - @: > src/cris/$(am__dirstamp) -src/cris/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/cris/$(DEPDIR) - @: > src/cris/$(DEPDIR)/$(am__dirstamp) -src/cris/sysv.lo: src/cris/$(am__dirstamp) \ - src/cris/$(DEPDIR)/$(am__dirstamp) -src/cris/ffi.lo: src/cris/$(am__dirstamp) \ - src/cris/$(DEPDIR)/$(am__dirstamp) -src/frv/$(am__dirstamp): - @$(MKDIR_P) src/frv - @: > src/frv/$(am__dirstamp) -src/frv/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/frv/$(DEPDIR) - @: > src/frv/$(DEPDIR)/$(am__dirstamp) -src/frv/eabi.lo: src/frv/$(am__dirstamp) \ - src/frv/$(DEPDIR)/$(am__dirstamp) -src/frv/ffi.lo: src/frv/$(am__dirstamp) \ - src/frv/$(DEPDIR)/$(am__dirstamp) -src/s390/$(am__dirstamp): - @$(MKDIR_P) src/s390 - @: > src/s390/$(am__dirstamp) -src/s390/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/s390/$(DEPDIR) - @: > src/s390/$(DEPDIR)/$(am__dirstamp) -src/s390/sysv.lo: src/s390/$(am__dirstamp) \ - src/s390/$(DEPDIR)/$(am__dirstamp) -src/s390/ffi.lo: src/s390/$(am__dirstamp) \ - src/s390/$(DEPDIR)/$(am__dirstamp) -src/x86/unix64.lo: src/x86/$(am__dirstamp) \ - src/x86/$(DEPDIR)/$(am__dirstamp) -src/sh/$(am__dirstamp): - @$(MKDIR_P) src/sh - @: > src/sh/$(am__dirstamp) -src/sh/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/sh/$(DEPDIR) - @: > src/sh/$(DEPDIR)/$(am__dirstamp) -src/sh/sysv.lo: src/sh/$(am__dirstamp) \ - src/sh/$(DEPDIR)/$(am__dirstamp) -src/sh/ffi.lo: src/sh/$(am__dirstamp) src/sh/$(DEPDIR)/$(am__dirstamp) -src/sh64/$(am__dirstamp): - @$(MKDIR_P) src/sh64 - @: > src/sh64/$(am__dirstamp) -src/sh64/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/sh64/$(DEPDIR) - @: > src/sh64/$(DEPDIR)/$(am__dirstamp) -src/sh64/sysv.lo: src/sh64/$(am__dirstamp) \ - src/sh64/$(DEPDIR)/$(am__dirstamp) -src/sh64/ffi.lo: src/sh64/$(am__dirstamp) \ - src/sh64/$(DEPDIR)/$(am__dirstamp) -src/pa/$(am__dirstamp): - @$(MKDIR_P) src/pa - @: > src/pa/$(am__dirstamp) -src/pa/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/pa/$(DEPDIR) - @: > src/pa/$(DEPDIR)/$(am__dirstamp) -src/pa/linux.lo: src/pa/$(am__dirstamp) \ - src/pa/$(DEPDIR)/$(am__dirstamp) -src/pa/ffi.lo: src/pa/$(am__dirstamp) src/pa/$(DEPDIR)/$(am__dirstamp) -src/pa/hpux32.lo: src/pa/$(am__dirstamp) \ - src/pa/$(DEPDIR)/$(am__dirstamp) -libffi.la: $(libffi_la_OBJECTS) $(libffi_la_DEPENDENCIES) - $(libffi_la_LINK) -rpath $(libdir) $(libffi_la_OBJECTS) $(libffi_la_LIBADD) $(LIBS) -libffi_convenience.la: $(libffi_convenience_la_OBJECTS) $(libffi_convenience_la_DEPENDENCIES) - $(LINK) $(libffi_convenience_la_OBJECTS) $(libffi_convenience_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -rm -f src/alpha/ffi.$(OBJEXT) - -rm -f src/alpha/ffi.lo - -rm -f src/alpha/osf.$(OBJEXT) - -rm -f src/alpha/osf.lo - -rm -f src/arm/ffi.$(OBJEXT) - -rm -f src/arm/ffi.lo - -rm -f src/arm/sysv.$(OBJEXT) - -rm -f src/arm/sysv.lo - -rm -f src/arm/trampoline.$(OBJEXT) - -rm -f src/arm/trampoline.lo - -rm -f src/avr32/ffi.$(OBJEXT) - -rm -f src/avr32/ffi.lo - -rm -f src/avr32/sysv.$(OBJEXT) - -rm -f src/avr32/sysv.lo - -rm -f src/closures.$(OBJEXT) - -rm -f src/closures.lo - -rm -f src/cris/ffi.$(OBJEXT) - -rm -f src/cris/ffi.lo - -rm -f src/cris/sysv.$(OBJEXT) - -rm -f src/cris/sysv.lo - -rm -f src/debug.$(OBJEXT) - -rm -f src/debug.lo - -rm -f src/frv/eabi.$(OBJEXT) - -rm -f src/frv/eabi.lo - -rm -f src/frv/ffi.$(OBJEXT) - -rm -f src/frv/ffi.lo - -rm -f src/ia64/ffi.$(OBJEXT) - -rm -f src/ia64/ffi.lo - -rm -f src/ia64/unix.$(OBJEXT) - -rm -f src/ia64/unix.lo - -rm -f src/java_raw_api.$(OBJEXT) - -rm -f src/java_raw_api.lo - -rm -f src/m32r/ffi.$(OBJEXT) - -rm -f src/m32r/ffi.lo - -rm -f src/m32r/sysv.$(OBJEXT) - -rm -f src/m32r/sysv.lo - -rm -f src/m68k/ffi.$(OBJEXT) - -rm -f src/m68k/ffi.lo - -rm -f src/m68k/sysv.$(OBJEXT) - -rm -f src/m68k/sysv.lo - -rm -f src/mips/ffi.$(OBJEXT) - -rm -f src/mips/ffi.lo - -rm -f src/mips/n32.$(OBJEXT) - -rm -f src/mips/n32.lo - -rm -f src/mips/o32.$(OBJEXT) - -rm -f src/mips/o32.lo - -rm -f src/pa/ffi.$(OBJEXT) - -rm -f src/pa/ffi.lo - -rm -f src/pa/hpux32.$(OBJEXT) - -rm -f src/pa/hpux32.lo - -rm -f src/pa/linux.$(OBJEXT) - -rm -f src/pa/linux.lo - -rm -f src/powerpc/aix.$(OBJEXT) - -rm -f src/powerpc/aix.lo - -rm -f src/powerpc/aix_closure.$(OBJEXT) - -rm -f src/powerpc/aix_closure.lo - -rm -f src/powerpc/darwin.$(OBJEXT) - -rm -f src/powerpc/darwin.lo - -rm -f src/powerpc/darwin_closure.$(OBJEXT) - -rm -f src/powerpc/darwin_closure.lo - -rm -f src/powerpc/ffi.$(OBJEXT) - -rm -f src/powerpc/ffi.lo - -rm -f src/powerpc/ffi_darwin.$(OBJEXT) - -rm -f src/powerpc/ffi_darwin.lo - -rm -f src/powerpc/linux64.$(OBJEXT) - -rm -f src/powerpc/linux64.lo - -rm -f src/powerpc/linux64_closure.$(OBJEXT) - -rm -f src/powerpc/linux64_closure.lo - -rm -f src/powerpc/ppc_closure.$(OBJEXT) - -rm -f src/powerpc/ppc_closure.lo - -rm -f src/powerpc/sysv.$(OBJEXT) - -rm -f src/powerpc/sysv.lo - -rm -f src/prep_cif.$(OBJEXT) - -rm -f src/prep_cif.lo - -rm -f src/raw_api.$(OBJEXT) - -rm -f src/raw_api.lo - -rm -f src/s390/ffi.$(OBJEXT) - -rm -f src/s390/ffi.lo - -rm -f src/s390/sysv.$(OBJEXT) - -rm -f src/s390/sysv.lo - -rm -f src/sh/ffi.$(OBJEXT) - -rm -f src/sh/ffi.lo - -rm -f src/sh/sysv.$(OBJEXT) - -rm -f src/sh/sysv.lo - -rm -f src/sh64/ffi.$(OBJEXT) - -rm -f src/sh64/ffi.lo - -rm -f src/sh64/sysv.$(OBJEXT) - -rm -f src/sh64/sysv.lo - -rm -f src/sparc/ffi.$(OBJEXT) - -rm -f src/sparc/ffi.lo - -rm -f src/sparc/v8.$(OBJEXT) - -rm -f src/sparc/v8.lo - -rm -f src/sparc/v9.$(OBJEXT) - -rm -f src/sparc/v9.lo - -rm -f src/types.$(OBJEXT) - -rm -f src/types.lo - -rm -f src/x86/darwin.$(OBJEXT) - -rm -f src/x86/darwin.lo - -rm -f src/x86/darwin64.$(OBJEXT) - -rm -f src/x86/darwin64.lo - -rm -f src/x86/ffi.$(OBJEXT) - -rm -f src/x86/ffi.lo - -rm -f src/x86/ffi64.$(OBJEXT) - -rm -f src/x86/ffi64.lo - -rm -f src/x86/freebsd.$(OBJEXT) - -rm -f src/x86/freebsd.lo - -rm -f src/x86/sysv.$(OBJEXT) - -rm -f src/x86/sysv.lo - -rm -f src/x86/unix64.$(OBJEXT) - -rm -f src/x86/unix64.lo - -rm -f src/x86/win32.$(OBJEXT) - -rm -f src/x86/win32.lo - -rm -f src/x86/win64.$(OBJEXT) - -rm -f src/x86/win64.lo - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/closures.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/debug.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/java_raw_api.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/prep_cif.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/raw_api.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/types.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/alpha/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/alpha/$(DEPDIR)/osf.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/arm/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/arm/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/arm/$(DEPDIR)/trampoline.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/avr32/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/avr32/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/cris/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/cris/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/frv/$(DEPDIR)/eabi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/frv/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/ia64/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/ia64/$(DEPDIR)/unix.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/m32r/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/m32r/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/m68k/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/m68k/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/mips/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/mips/$(DEPDIR)/n32.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/mips/$(DEPDIR)/o32.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/pa/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/pa/$(DEPDIR)/hpux32.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/pa/$(DEPDIR)/linux.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/aix.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/aix_closure.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/darwin.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/darwin_closure.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/ffi_darwin.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/linux64.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/linux64_closure.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/ppc_closure.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/s390/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/s390/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/sh/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/sh/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/sh64/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/sh64/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/sparc/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/sparc/$(DEPDIR)/v8.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/sparc/$(DEPDIR)/v9.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/darwin.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/darwin64.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/ffi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/ffi64.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/freebsd.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/sysv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/unix64.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/win32.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/win64.Plo@am__quote@ - -.S.o: -@am__fastdepCCAS_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ -@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCCAS_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ $< - -.S.obj: -@am__fastdepCCAS_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ -@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ -@am__fastdepCCAS_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.S.lo: -@am__fastdepCCAS_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ -@am__fastdepCCAS_TRUE@ $(LTCPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCCAS_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCCAS_FALSE@ $(LTCPPASCOMPILE) -c -o $@ $< - -.c.o: -@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $< - -.c.obj: -@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -rm -rf src/.libs src/_libs - -rm -rf src/alpha/.libs src/alpha/_libs - -rm -rf src/arm/.libs src/arm/_libs - -rm -rf src/avr32/.libs src/avr32/_libs - -rm -rf src/cris/.libs src/cris/_libs - -rm -rf src/frv/.libs src/frv/_libs - -rm -rf src/ia64/.libs src/ia64/_libs - -rm -rf src/m32r/.libs src/m32r/_libs - -rm -rf src/m68k/.libs src/m68k/_libs - -rm -rf src/mips/.libs src/mips/_libs - -rm -rf src/pa/.libs src/pa/_libs - -rm -rf src/powerpc/.libs src/powerpc/_libs - -rm -rf src/s390/.libs src/s390/_libs - -rm -rf src/sh/.libs src/sh/_libs - -rm -rf src/sh64/.libs src/sh64/_libs - -rm -rf src/sparc/.libs src/sparc/_libs - -rm -rf src/x86/.libs src/x86/_libs - -distclean-libtool: - -rm -f libtool config.lt -doc/$(am__dirstamp): - @$(MKDIR_P) doc - @: > doc/$(am__dirstamp) - -$(srcdir)/doc/libffi.info: doc/libffi.texi $(srcdir)/doc/version.texi - restore=: && backupdir="$(am__leading_dot)am$$$$" && \ - am__cwd=`pwd` && $(am__cd) $(srcdir) && \ - rm -rf $$backupdir && mkdir $$backupdir && \ - if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ - for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ - if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ - done; \ - else :; fi && \ - cd "$$am__cwd"; \ - if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc \ - -o $@ $(srcdir)/doc/libffi.texi; \ - then \ - rc=0; \ - $(am__cd) $(srcdir); \ - else \ - rc=$$?; \ - $(am__cd) $(srcdir) && \ - $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ - fi; \ - rm -rf $$backupdir; exit $$rc - -doc/libffi.dvi: doc/libffi.texi $(srcdir)/doc/version.texi doc/$(am__dirstamp) - TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ - MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc' \ - $(TEXI2DVI) -o $@ `test -f 'doc/libffi.texi' || echo '$(srcdir)/'`doc/libffi.texi - -doc/libffi.pdf: doc/libffi.texi $(srcdir)/doc/version.texi doc/$(am__dirstamp) - TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ - MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc' \ - $(TEXI2PDF) -o $@ `test -f 'doc/libffi.texi' || echo '$(srcdir)/'`doc/libffi.texi - -doc/libffi.html: doc/libffi.texi $(srcdir)/doc/version.texi doc/$(am__dirstamp) - rm -rf $(@:.html=.htp) - if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc \ - -o $(@:.html=.htp) `test -f 'doc/libffi.texi' || echo '$(srcdir)/'`doc/libffi.texi; \ - then \ - rm -rf $@; \ - if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ - mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \ - else \ - if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ - rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \ - exit 1; \ - fi -$(srcdir)/doc/version.texi: @MAINTAINER_MODE_TRUE@ $(srcdir)/doc/stamp-vti -$(srcdir)/doc/stamp-vti: doc/libffi.texi $(top_srcdir)/configure - test -f doc/$(am__dirstamp) || $(MAKE) $(AM_MAKEFLAGS) doc/$(am__dirstamp) - @(dir=.; test -f ./doc/libffi.texi || dir=$(srcdir); \ - set `$(SHELL) $(srcdir)/mdate-sh $$dir/doc/libffi.texi`; \ - echo "@set UPDATED $$1 $$2 $$3"; \ - echo "@set UPDATED-MONTH $$2 $$3"; \ - echo "@set EDITION $(VERSION)"; \ - echo "@set VERSION $(VERSION)") > vti.tmp - @cmp -s vti.tmp $(srcdir)/doc/version.texi \ - || (echo "Updating $(srcdir)/doc/version.texi"; \ - cp vti.tmp $(srcdir)/doc/version.texi) - -@rm -f vti.tmp - @cp $(srcdir)/doc/version.texi $@ - -mostlyclean-vti: - -rm -f vti.tmp - -maintainer-clean-vti: -@MAINTAINER_MODE_TRUE@ -rm -f $(srcdir)/doc/stamp-vti $(srcdir)/doc/version.texi -.dvi.ps: - TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ - $(DVIPS) -o $@ $< - -uninstall-dvi-am: - @$(NORMAL_UNINSTALL) - @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ - rm -f "$(DESTDIR)$(dvidir)/$$f"; \ - done - -uninstall-html-am: - @$(NORMAL_UNINSTALL) - @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ - rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ - done - -uninstall-info-am: - @$(PRE_UNINSTALL) - @if test -d '$(DESTDIR)$(infodir)' && \ - (install-info --version && \ - install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ - list='$(INFO_DEPS)'; \ - for file in $$list; do \ - relfile=`echo "$$file" | sed 's|^.*/||'`; \ - echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ - if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ - then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ - done; \ - else :; fi - @$(NORMAL_UNINSTALL) - @list='$(INFO_DEPS)'; \ - for file in $$list; do \ - relfile=`echo "$$file" | sed 's|^.*/||'`; \ - relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ - (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ - echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ - rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ - else :; fi); \ - done - -uninstall-pdf-am: - @$(NORMAL_UNINSTALL) - @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ - rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ - done - -uninstall-ps-am: - @$(NORMAL_UNINSTALL) - @list='$(PSS)'; test -n "$(psdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ - rm -f "$(DESTDIR)$(psdir)/$$f"; \ - done - -dist-info: $(INFO_DEPS) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - list='$(INFO_DEPS)'; \ - for base in $$list; do \ - case $$base in \ - $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ - esac; \ - if test -f $$base; then d=.; else d=$(srcdir); fi; \ - base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ - for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ - if test -f $$file; then \ - relfile=`expr "$$file" : "$$d/\(.*\)"`; \ - test -f "$(distdir)/$$relfile" || \ - cp -p $$file "$(distdir)/$$relfile"; \ - else :; fi; \ - done; \ - done - -mostlyclean-aminfo: - -rm -rf libffi.aux libffi.cp libffi.cps libffi.fn libffi.ky libffi.log \ - libffi.pg libffi.tmp libffi.toc libffi.tp libffi.vr - -clean-aminfo: - -test -z "doc/libffi.dvi doc/libffi.pdf doc/libffi.ps doc/libffi.html" \ - || rm -rf doc/libffi.dvi doc/libffi.pdf doc/libffi.ps doc/libffi.html - -maintainer-clean-aminfo: - @list='$(INFO_DEPS)'; for i in $$list; do \ - i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ - echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ - rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ - done -install-pkgconfigDATA: $(pkgconfig_DATA) - @$(NORMAL_INSTALL) - test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ - done - -uninstall-pkgconfigDATA: - @$(NORMAL_UNINSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -$(RECURSIVE_CLEAN_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) fficonfig.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) fficonfig.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) fficonfig.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) fficonfig.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - $(am__remove_distdir) - test -d "$(distdir)" || mkdir "$(distdir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$(top_distdir)" distdir="$(distdir)" \ - dist-info - -test -n "$(am__skip_mode_fix)" \ - || find "$(distdir)" -type d ! -perm -755 \ - -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r "$(distdir)" -dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 - $(am__remove_distdir) - -dist-lzma: distdir - tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma - $(am__remove_distdir) - -dist-xz: distdir - tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz - $(am__remove_distdir) - -dist-tarZ: distdir - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__remove_distdir) - -dist-shar: distdir - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__remove_distdir) - -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__remove_distdir) - -dist dist-all: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lzma*) \ - lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ - *.tar.xz*) \ - xz -dc $(distdir).tar.xz | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac - chmod -R a-w $(distdir); chmod a+w $(distdir) - mkdir $(distdir)/_build - mkdir $(distdir)/_inst - chmod a-w $(distdir) - test -d $(distdir)/_build || exit 0; \ - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build \ - && ../configure --srcdir=.. --prefix="$$dc_install_base" \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ - (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ - && cd "$$am__cwd" \ - || exit 1 - $(am__remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' -distuninstallcheck: - @$(am__cd) '$(distuninstallcheck_dir)' \ - && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 -distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left in build directory after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 -check-am: all-am -check: check-recursive -all-am: Makefile $(INFO_DEPS) $(LTLIBRARIES) $(DATA) fficonfig.h -installdirs: installdirs-recursive -installdirs-am: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(infodir)" "$(DESTDIR)$(pkgconfigdir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -rm -f doc/$(am__dirstamp) - -rm -f src/$(DEPDIR)/$(am__dirstamp) - -rm -f src/$(am__dirstamp) - -rm -f src/alpha/$(DEPDIR)/$(am__dirstamp) - -rm -f src/alpha/$(am__dirstamp) - -rm -f src/arm/$(DEPDIR)/$(am__dirstamp) - -rm -f src/arm/$(am__dirstamp) - -rm -f src/avr32/$(DEPDIR)/$(am__dirstamp) - -rm -f src/avr32/$(am__dirstamp) - -rm -f src/cris/$(DEPDIR)/$(am__dirstamp) - -rm -f src/cris/$(am__dirstamp) - -rm -f src/frv/$(DEPDIR)/$(am__dirstamp) - -rm -f src/frv/$(am__dirstamp) - -rm -f src/ia64/$(DEPDIR)/$(am__dirstamp) - -rm -f src/ia64/$(am__dirstamp) - -rm -f src/m32r/$(DEPDIR)/$(am__dirstamp) - -rm -f src/m32r/$(am__dirstamp) - -rm -f src/m68k/$(DEPDIR)/$(am__dirstamp) - -rm -f src/m68k/$(am__dirstamp) - -rm -f src/mips/$(DEPDIR)/$(am__dirstamp) - -rm -f src/mips/$(am__dirstamp) - -rm -f src/pa/$(DEPDIR)/$(am__dirstamp) - -rm -f src/pa/$(am__dirstamp) - -rm -f src/powerpc/$(DEPDIR)/$(am__dirstamp) - -rm -f src/powerpc/$(am__dirstamp) - -rm -f src/s390/$(DEPDIR)/$(am__dirstamp) - -rm -f src/s390/$(am__dirstamp) - -rm -f src/sh/$(DEPDIR)/$(am__dirstamp) - -rm -f src/sh/$(am__dirstamp) - -rm -f src/sh64/$(DEPDIR)/$(am__dirstamp) - -rm -f src/sh64/$(am__dirstamp) - -rm -f src/sparc/$(DEPDIR)/$(am__dirstamp) - -rm -f src/sparc/$(am__dirstamp) - -rm -f src/x86/$(DEPDIR)/$(am__dirstamp) - -rm -f src/x86/$(am__dirstamp) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive - -clean-am: clean-aminfo clean-generic clean-libLTLIBRARIES \ - clean-libtool clean-noinstLTLIBRARIES mostlyclean-am - -distclean: distclean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf src/$(DEPDIR) src/alpha/$(DEPDIR) src/arm/$(DEPDIR) src/avr32/$(DEPDIR) src/cris/$(DEPDIR) src/frv/$(DEPDIR) src/ia64/$(DEPDIR) src/m32r/$(DEPDIR) src/m68k/$(DEPDIR) src/mips/$(DEPDIR) src/pa/$(DEPDIR) src/powerpc/$(DEPDIR) src/s390/$(DEPDIR) src/sh/$(DEPDIR) src/sh64/$(DEPDIR) src/sparc/$(DEPDIR) src/x86/$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-tags - -dvi: dvi-recursive - -dvi-am: $(DVIS) - -html: html-recursive - -html-am: $(HTMLS) - -info: info-recursive - -info-am: $(INFO_DEPS) - -install-data-am: install-info-am install-pkgconfigDATA - -install-dvi: install-dvi-recursive - -install-dvi-am: $(DVIS) - @$(NORMAL_INSTALL) - test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)" - @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ - done -install-exec-am: install-libLTLIBRARIES - -install-html-am: $(HTMLS) - @$(NORMAL_INSTALL) - test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)" - @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ - for p in $$list; do \ - if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ - $(am__strip_dir) \ - if test -d "$$d$$p"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ - $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ - echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ - else \ - list2="$$list2 $$d$$p"; \ - fi; \ - done; \ - test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ - done; } -install-info: install-info-recursive - -install-info-am: $(INFO_DEPS) - @$(NORMAL_INSTALL) - test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ - for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - esac; \ - if test -f $$file; then d=.; else d=$(srcdir); fi; \ - file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ - for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ - $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ - if test -f $$ifile; then \ - echo "$$ifile"; \ - else : ; fi; \ - done; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done - @$(POST_INSTALL) - @if (install-info --version && \ - install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ - list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ - for file in $$list; do \ - relfile=`echo "$$file" | sed 's|^.*/||'`; \ - echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ - install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ - done; \ - else : ; fi -install-man: - -install-pdf-am: $(PDFS) - @$(NORMAL_INSTALL) - test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)" - @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done -install-ps: install-ps-recursive - -install-ps-am: $(PSS) - @$(NORMAL_INSTALL) - test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)" - @list='$(PSS)'; test -n "$(psdir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache - -rm -rf src/$(DEPDIR) src/alpha/$(DEPDIR) src/arm/$(DEPDIR) src/avr32/$(DEPDIR) src/cris/$(DEPDIR) src/frv/$(DEPDIR) src/ia64/$(DEPDIR) src/m32r/$(DEPDIR) src/m68k/$(DEPDIR) src/mips/$(DEPDIR) src/pa/$(DEPDIR) src/powerpc/$(DEPDIR) src/s390/$(DEPDIR) src/sh/$(DEPDIR) src/sh64/$(DEPDIR) src/sparc/$(DEPDIR) src/x86/$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-aminfo \ - maintainer-clean-generic maintainer-clean-vti - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-aminfo mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool mostlyclean-vti - -pdf: pdf-recursive - -pdf-am: $(PDFS) - -ps: ps-recursive - -ps-am: $(PSS) - -uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ - uninstall-libLTLIBRARIES uninstall-pdf-am \ - uninstall-pkgconfigDATA uninstall-ps-am - -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ - ctags-recursive install-am install-strip tags-recursive - -.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am am--refresh check check-am clean clean-aminfo \ - clean-generic clean-libLTLIBRARIES clean-libtool \ - clean-noinstLTLIBRARIES ctags ctags-recursive dist dist-all \ - dist-bzip2 dist-gzip dist-info dist-lzma dist-shar dist-tarZ \ - dist-xz dist-zip distcheck distclean distclean-compile \ - distclean-generic distclean-hdr distclean-libtool \ - distclean-tags distcleancheck distdir distuninstallcheck dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-libLTLIBRARIES \ - install-man install-pdf install-pdf-am install-pkgconfigDATA \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-aminfo maintainer-clean-generic \ - maintainer-clean-vti mostlyclean mostlyclean-aminfo \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - mostlyclean-vti pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-dvi-am uninstall-html-am \ - uninstall-info-am uninstall-libLTLIBRARIES uninstall-pdf-am \ - uninstall-pkgconfigDATA uninstall-ps-am - - -# No install-html or install-pdf support in automake yet -.PHONY: install-html install-pdf -install-html: -install-pdf: - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/Makefile.vc b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/Makefile.vc deleted file mode 100644 index c22c895..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/Makefile.vc +++ /dev/null @@ -1,141 +0,0 @@ -# -# ==================================================================== -# -# libffi Windows Makefile -# -# -# ==================================================================== -# - -NAME=ffi-3 -VERSION=3.0.10 -TARGET=X86_WIN32 -CC=cl.exe -AS=ml.exe -RC=rc.exe -MT=mt.exe -AR="link.exe" -SO=.dll -OBJ=.obj -EXE=.exe -LA=.lib -LINK="link.exe" -PREFIX= -TOPDIR=. -CPP=cl.exe -EP -CFLAGS=-nologo -Zi -D_MD -W3 -DWIN32 -DWINNT -D_WIN32 -D_WINDOWS -D_WINNT -D_WIN32_WINNT=0x0501 -D_WIN32_IE=0x0600 -D_X86_=1 -DNDEBUG -MD -O2 -Ob2 -Oy- -LDFLAGS=/NOLOGO /MACHINE:X86 -SHFLAGS=/DLL /INCREMENTAL:NO /DEBUG /SUBSYSTEM:WINDOWS /OPT:REF -ARFLAGS=/LIB -ASFLAGS=-coff -W3 -Cx -Zm -Di386 -DQUIET -D?QUIET -RCFLAGS=/l 0x409 -DNDEBUG -INCLUDES=-I . -I .\include -I .\src\x86 -LIBS=kernel32.lib advapi32.lib shell32.lib user32.lib gdi32.lib - -VERSION_MAJOR=3 -VERSION_MINOR=1 -VERSION_PATCH=10rc - -DESTDIR=$(PREFIX) -DESTBIN=$(PREFIX)\bin -DESTLIB=$(PREFIX)\lib -DESTINC=$(PREFIX)\include -SRCDIR=$(TOPDIR)\src - -WORKDIR=$(TOPDIR)\.libs -SOLIBNAME=lib$(NAME) -LALIBNAME=libffi_convenience -STATICLIB=$(WORKDIR)\$(LALIBNAME)$(LA) - -BUILDPDB = $(WORKDIR)\$(SOLIBNAME).pdb - -HEADERS = \ - $(TOPDIR)\fficonfig.h - -FFI_HEADERS = \ - $(TOPDIR)\include\ffi.h - -OBJECTS = \ - $(SRCDIR)\closures.obj \ - $(SRCDIR)\debug.obj \ - $(SRCDIR)\java_raw_api.obj \ - $(SRCDIR)\prep_cif.obj \ - $(SRCDIR)\raw_api.obj \ - $(SRCDIR)\types.obj \ - $(SRCDIR)\x86\ffi.obj - -!IF "$(TARGET)" == "X86_WIN32" -OBJECTS = $(OBJECTS) \ - $(SRCDIR)\x86\win32.obj -ASMSRCS = \ - $(SRCDIR)\x86\win32.asm - -!ENDIF -!IF "$(TARGET)" == "X86_WIN64" -OBJECTS = $(OBJECTS) \ - $(SRCDIR)\x86\win64.obj -ASMSRCS = \ - $(SRCDIR)\x86\win64.asm - -!ENDIF - -.SUFFIXES : .S .asm - -all: $(WORKDIR) $(STATICLIB) - -.c$(OBJ): - $(CC) -c $(CFLAGS) $(INCLUDES) -Fo$@ -Fd$(WORKDIR)\$(NAME)-src $< - -.asm$(OBJ): - $(AS) -c $(ASFLAGS) /Fo $@ $< - -.S.asm: - $(CPP) $(CFLAGS) $(INCLUDES) $< >$@ - -.rc.res: - $(RC) $(RCFLAGS) /fo $@ $< - -$(WORKDIR) : - -@if not exist "$(WORKDIR)\$(NULL)" mkdir $(WORKDIR) - -$(HEADERS) : - -@if not exist $(HEADERS) copy $(HEADERS)w $(HEADERS) - -$(FFI_HEADERS) : - -@if not exist $(FFI_HEADERS) copy $(FFI_HEADERS).vc $(FFI_HEADERS) - -$(STATICLIB): $(WORKDIR) $(FFI_HEADERS) $(HEADERS) $(ASMSRCS) $(OBJECTS) - $(AR) $(ARFLAGS) $(LDFLAGS) /out:$(STATICLIB) @<< - $(OBJECTS) -<< - - -!IF !DEFINED(PREFIX) || "$(PREFIX)" == "" - -install: - @echo ERROR: You must define installation PREFIX=destination - -!ELSE - -install: all - -@xcopy "$(TOPDIR)\include\*.h" "$(DESTINC)\" /Y /Q - -@xcopy "$(SRCDIR)\x86\ffitarget.h" "$(DESTINC)\" /Y /Q - -@xcopy "$(WORKDIR)\$(LALIBNAME)$(LA)" "$(DESTLIB)\" /Y /Q - -@xcopy "$(WORKDIR)\$(SOLIBNAME)$(LA)" "$(DESTLIB)\" /Y /Q - -@xcopy "$(WORKDIR)\$(SOLIBNAME)$(SO)" "$(DESTBIN)\" /Y /Q - -@xcopy "$(WORKDIR)\$(SOLIBNAME).pdb" "$(DESTLIB)\" /Y /Q - -!ENDIF - -clean: - -@del /Q $(OBJECTS) 2>NUL - -@del /Q $(RESOURCES) 2>NUL - -@del /Q $(ASMSRCS) 2>NUL - -@del /Q /S $(WORKDIR) 2>NUL - -distclean: clean - -@del /Q $(HEADERS) 2>NUL - -@del /Q $(TOPDIR)\include\ffi.h 2>NUL - -@del /Q $(TOPDIR)\fficonfig.h 2>NUL - -@del /Q $(TOPDIR)\Makefile.vc 2>NUL - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/Makefile.vc64 b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/Makefile.vc64 deleted file mode 100644 index 3e99baa..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/Makefile.vc64 +++ /dev/null @@ -1,141 +0,0 @@ -# -# ==================================================================== -# -# libffi Windows Makefile -# -# -# ==================================================================== -# - -NAME=ffi-3 -VERSION=3.0.10 -TARGET=X86_WIN64 -CC=cl.exe -AS=ml64.exe -RC=rc.exe -MT=mt.exe -AR="link.exe" -SO=.dll -OBJ=.obj -EXE=.exe -LA=.lib -LINK="link.exe" -PREFIX= -TOPDIR=. -CPP=cl.exe -EP -CFLAGS=-nologo -Zi -D_MD -W3 -DWIN64 -DWINNT -D_WIN32 -D_WINDOWS -D_WINNT -D_WIN32_WINNT=0x0501 -D_WIN32_IE=0x0600 -D_AMD64_=1 -DNDEBUG -MD -O2 -Ob2 -Oy- -LDFLAGS=/NOLOGO /MACHINE:X64 -SHFLAGS=/DLL /INCREMENTAL:NO /DEBUG /SUBSYSTEM:WINDOWS /OPT:REF -ARFLAGS=/LIB -ASFLAGS=-coff -W3 -Cx -Zm -Di386 -DQUIET -D?QUIET -RCFLAGS=/l 0x409 -DNDEBUG -INCLUDES=-I . -I .\include -I .\src\x86 -LIBS=kernel32.lib advapi32.lib shell32.lib user32.lib gdi32.lib - -VERSION_MAJOR=3 -VERSION_MINOR=1 -VERSION_PATCH=10rc - -DESTDIR=$(PREFIX) -DESTBIN=$(PREFIX)\bin -DESTLIB=$(PREFIX)\lib -DESTINC=$(PREFIX)\include -SRCDIR=$(TOPDIR)\src - -WORKDIR=$(TOPDIR)\.libs -SOLIBNAME=lib$(NAME) -LALIBNAME=libffi_convenience -STATICLIB=$(WORKDIR)\$(LALIBNAME)$(LA) - -BUILDPDB = $(WORKDIR)\$(SOLIBNAME).pdb - -HEADERS = \ - $(TOPDIR)\fficonfig.h - -FFI_HEADERS = \ - $(TOPDIR)\include\ffi.h - -OBJECTS = \ - $(SRCDIR)\closures.obj \ - $(SRCDIR)\debug.obj \ - $(SRCDIR)\java_raw_api.obj \ - $(SRCDIR)\prep_cif.obj \ - $(SRCDIR)\raw_api.obj \ - $(SRCDIR)\types.obj \ - $(SRCDIR)\x86\ffi.obj - -!IF "$(TARGET)" == "X86_WIN32" -OBJECTS = $(OBJECTS) \ - $(SRCDIR)\x86\win32.obj -ASMSRCS = \ - $(SRCDIR)\x86\win32.asm - -!ENDIF -!IF "$(TARGET)" == "X86_WIN64" -OBJECTS = $(OBJECTS) \ - $(SRCDIR)\x86\win64.obj -ASMSRCS = \ - $(SRCDIR)\x86\win64.asm - -!ENDIF - -.SUFFIXES : .S .asm - -all: $(WORKDIR) $(STATICLIB) - -.c$(OBJ): - $(CC) -c $(CFLAGS) $(INCLUDES) -Fo$@ -Fd$(WORKDIR)\$(NAME)-src $< - -.asm$(OBJ): - $(AS) -c $(ASFLAGS) /Fo $@ $< - -.S.asm: - $(CPP) $(CFLAGS) $(INCLUDES) $< >$@ - -.rc.res: - $(RC) $(RCFLAGS) /fo $@ $< - -$(WORKDIR) : - -@if not exist "$(WORKDIR)\$(NULL)" mkdir $(WORKDIR) - -$(HEADERS) : - -@if not exist $(HEADERS) copy $(HEADERS)w $(HEADERS) - -$(FFI_HEADERS) : - -@if not exist $(FFI_HEADERS) copy $(FFI_HEADERS).vc64 $(FFI_HEADERS) - -$(STATICLIB): $(WORKDIR) $(FFI_HEADERS) $(HEADERS) $(ASMSRCS) $(OBJECTS) - $(AR) $(ARFLAGS) $(LDFLAGS) /out:$(STATICLIB) @<< - $(OBJECTS) -<< - - -!IF !DEFINED(PREFIX) || "$(PREFIX)" == "" - -install: - @echo ERROR: You must define installation PREFIX=destination - -!ELSE - -install: all - -@xcopy "$(TOPDIR)\include\*.h" "$(DESTINC)\" /Y /Q - -@xcopy "$(SRCDIR)\x86\ffitarget.h" "$(DESTINC)\" /Y /Q - -@xcopy "$(WORKDIR)\$(LALIBNAME)$(LA)" "$(DESTLIB)\" /Y /Q - -@xcopy "$(WORKDIR)\$(SOLIBNAME)$(LA)" "$(DESTLIB)\" /Y /Q - -@xcopy "$(WORKDIR)\$(SOLIBNAME)$(SO)" "$(DESTBIN)\" /Y /Q - -@xcopy "$(WORKDIR)\$(SOLIBNAME).pdb" "$(DESTLIB)\" /Y /Q - -!ENDIF - -clean: - -@del /Q $(OBJECTS) 2>NUL - -@del /Q $(RESOURCES) 2>NUL - -@del /Q $(ASMSRCS) 2>NUL - -@del /Q /S $(WORKDIR) 2>NUL - -distclean: clean - -@del /Q $(HEADERS) 2>NUL - -@del /Q $(TOPDIR)\include\ffi.h 2>NUL - -@del /Q $(TOPDIR)\fficonfig.h 2>NUL - -@del /Q $(TOPDIR)\Makefile.vc 2>NUL - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/README b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/README deleted file mode 100644 index 297c044..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/README +++ /dev/null @@ -1,342 +0,0 @@ -Status -====== - -libffi-3.0.10 was released on August 23, 2011. Check the libffi web -page for updates: . - - -What is libffi? -=============== - -Compilers for high level languages generate code that follow certain -conventions. These conventions are necessary, in part, for separate -compilation to work. One such convention is the "calling -convention". The "calling convention" is essentially a set of -assumptions made by the compiler about where function arguments will -be found on entry to a function. A "calling convention" also specifies -where the return value for a function is found. - -Some programs may not know at the time of compilation what arguments -are to be passed to a function. For instance, an interpreter may be -told at run-time about the number and types of arguments used to call -a given function. Libffi can be used in such programs to provide a -bridge from the interpreter program to compiled code. - -The libffi library provides a portable, high level programming -interface to various calling conventions. This allows a programmer to -call any function specified by a call interface description at run -time. - -FFI stands for Foreign Function Interface. A foreign function -interface is the popular name for the interface that allows code -written in one language to call code written in another language. The -libffi library really only provides the lowest, machine dependent -layer of a fully featured foreign function interface. A layer must -exist above libffi that handles type conversions for values passed -between the two languages. - - -Supported Platforms -=================== - -Libffi has been ported to many different platforms. -For specific configuration details and testing status, please -refer to the wiki page here: - - http://www.moxielogic.org/wiki/index.php?title=Libffi_3.0.10 - -At the time of release, the following basic configurations have been -tested: - -|--------------+------------------| -| Architecture | Operating System | -|--------------+------------------| -| Alpha | Linux | -| Alpha | Tru64 | -| ARM | Linux | -| ARM | iOS | -| AVR32 | Linux | -| HPPA | HPUX | -| IA-64 | Linux | -| M68K | RTEMS | -| MIPS | IRIX | -| MIPS | Linux | -| MIPS | RTEMS | -| MIPS64 | Linux | -| PowerPC | Linux | -| PowerPC | Mac OSX | -| PowerPC | FreeBSD | -| PowerPC64 | Linux | -| S390 | Linux | -| S390X | Linux | -| SPARC | Linux | -| SPARC | Solaris | -| SPARC64 | Linux | -| SPARC64 | FreeBSD | -| X86 | FreeBSD | -| X86 | Interix | -| X86 | kFreeBSD | -| X86 | Linux | -| X86 | Mac OSX | -| X86 | OpenBSD | -| X86 | OS/2 | -| X86 | Solaris | -| X86 | Windows/Cygwin | -| X86 | Windows/MingW | -| X86-64 | FreeBSD | -| X86-64 | Linux | -| X86-64 | OpenBSD | -| X86-64 | Windows/MingW | -|--------------+------------------| - -Please send additional platform test results to -libffi-discuss@sourceware.org and feel free to update the wiki page -above. - -Installing libffi -================= - -First you must configure the distribution for your particular -system. Go to the directory you wish to build libffi in and run the -"configure" program found in the root directory of the libffi source -distribution. - -You may want to tell configure where to install the libffi library and -header files. To do that, use the --prefix configure switch. Libffi -will install under /usr/local by default. - -If you want to enable extra run-time debugging checks use the the ---enable-debug configure switch. This is useful when your program dies -mysteriously while using libffi. - -Another useful configure switch is --enable-purify-safety. Using this -will add some extra code which will suppress certain warnings when you -are using Purify with libffi. Only use this switch when using -Purify, as it will slow down the library. - -It's also possible to build libffi on Windows platforms with -Microsoft's Visual C++ compiler. In this case, use the msvcc.sh -wrapper script during configuration like so: - -path/to/configure CC=path/to/msvcc.sh LD=link CPP=\"cl -nologo -EP\" - -For 64-bit Windows builds, use CC="path/to/msvcc.sh -m64". -You may also need to specify --build appropriately. When building with MSVC -under a MingW environment, you may need to remove the line in configure -that sets 'fix_srcfile_path' to a 'cygpath' command. ('cygpath' is not -present in MingW, and is not required when using MingW-style paths.) - -For iOS builds, refer to the build-ios.sh script for guidance. - -Configure has many other options. Use "configure --help" to see them all. - -Once configure has finished, type "make". Note that you must be using -GNU make. You can ftp GNU make from prep.ai.mit.edu:/pub/gnu. - -To ensure that libffi is working as advertised, type "make check". -This will require that you have DejaGNU installed. - -To install the library and header files, type "make install". - - -History -======= - -See the ChangeLog files for details. - -3.0.10 Aug-23-11 - Add support for Apple's iOS. - Add support for ARM VFP ABI. - Add RTEMS support for MIPS and M68K. - Fix instruction cache clearing problems on - ARM and SPARC. - Fix the N64 build on mips-sgi-irix6.5. - Enable builds with Microsoft's compiler. - Enable x86 builds with Oracle's Solaris compiler. - Fix support for calling code compiled with Oracle's Sparc - Solaris compiler. - Testsuite fixes for Tru64 Unix. - Additional platform support. - -3.0.9 Dec-31-09 - Add AVR32 and win64 ports. Add ARM softfp support. - Many fixes for AIX, Solaris, HP-UX, *BSD. - Several PowerPC and x86-64 bug fixes. - Build DLL for windows. - -3.0.8 Dec-19-08 - Add *BSD, BeOS, and PA-Linux support. - -3.0.7 Nov-11-08 - Fix for ppc FreeBSD. - (thanks to Andreas Tobler) - -3.0.6 Jul-17-08 - Fix for closures on sh. - Mark the sh/sh64 stack as non-executable. - (both thanks to Kaz Kojima) - -3.0.5 Apr-3-08 - Fix libffi.pc file. - Fix #define ARM for IcedTea users. - Fix x86 closure bug. - -3.0.4 Feb-24-08 - Fix x86 OpenBSD configury. - -3.0.3 Feb-22-08 - Enable x86 OpenBSD thanks to Thomas Heller, and - x86-64 FreeBSD thanks to Björn König and Andreas Tobler. - Clean up test instruction in README. - -3.0.2 Feb-21-08 - Improved x86 FreeBSD support. - Thanks to Björn König. - -3.0.1 Feb-15-08 - Fix instruction cache flushing bug on MIPS. - Thanks to David Daney. - -3.0.0 Feb-15-08 - Many changes, mostly thanks to the GCC project. - Cygnus Solutions is now Red Hat. - - [10 years go by...] - -1.20 Oct-5-98 - Raffaele Sena produces ARM port. - -1.19 Oct-5-98 - Fixed x86 long double and long long return support. - m68k bug fixes from Andreas Schwab. - Patch for DU assembler compatibility for the Alpha from Richard - Henderson. - -1.18 Apr-17-98 - Bug fixes and MIPS configuration changes. - -1.17 Feb-24-98 - Bug fixes and m68k port from Andreas Schwab. PowerPC port from - Geoffrey Keating. Various bug x86, Sparc and MIPS bug fixes. - -1.16 Feb-11-98 - Richard Henderson produces Alpha port. - -1.15 Dec-4-97 - Fixed an n32 ABI bug. New libtool, auto* support. - -1.14 May-13-97 - libtool is now used to generate shared and static libraries. - Fixed a minor portability problem reported by Russ McManus - . - -1.13 Dec-2-96 - Added --enable-purify-safety to keep Purify from complaining - about certain low level code. - Sparc fix for calling functions with < 6 args. - Linux x86 a.out fix. - -1.12 Nov-22-96 - Added missing ffi_type_void, needed for supporting void return - types. Fixed test case for non MIPS machines. Cygnus Support - is now Cygnus Solutions. - -1.11 Oct-30-96 - Added notes about GNU make. - -1.10 Oct-29-96 - Added configuration fix for non GNU compilers. - -1.09 Oct-29-96 - Added --enable-debug configure switch. Clean-ups based on LCLint - feedback. ffi_mips.h is always installed. Many configuration - fixes. Fixed ffitest.c for sparc builds. - -1.08 Oct-15-96 - Fixed n32 problem. Many clean-ups. - -1.07 Oct-14-96 - Gordon Irlam rewrites v8.S again. Bug fixes. - -1.06 Oct-14-96 - Gordon Irlam improved the sparc port. - -1.05 Oct-14-96 - Interface changes based on feedback. - -1.04 Oct-11-96 - Sparc port complete (modulo struct passing bug). - -1.03 Oct-10-96 - Passing struct args, and returning struct values works for - all architectures/calling conventions. Expanded tests. - -1.02 Oct-9-96 - Added SGI n32 support. Fixed bugs in both o32 and Linux support. - Added "make test". - -1.01 Oct-8-96 - Fixed float passing bug in mips version. Restructured some - of the code. Builds cleanly with SGI tools. - -1.00 Oct-7-96 - First release. No public announcement. - - -Authors & Credits -================= - -libffi was originally written by Anthony Green . - -The developers of the GNU Compiler Collection project have made -innumerable valuable contributions. See the ChangeLog file for -details. - -Some of the ideas behind libffi were inspired by Gianni Mariani's free -gencall library for Silicon Graphics machines. - -The closure mechanism was designed and implemented by Kresten Krab -Thorup. - -Major processor architecture ports were contributed by the following -developers: - -alpha Richard Henderson -arm Raffaele Sena -cris Simon Posnjak, Hans-Peter Nilsson -frv Anthony Green -ia64 Hans Boehm -m32r Kazuhiro Inaoka -m68k Andreas Schwab -mips Anthony Green, Casey Marshall -mips64 David Daney -pa Randolph Chung, Dave Anglin, Andreas Tobler -powerpc Geoffrey Keating, Andreas Tobler, - David Edelsohn, John Hornkvist -powerpc64 Jakub Jelinek -s390 Gerhard Tonn, Ulrich Weigand -sh Kaz Kojima -sh64 Kaz Kojima -sparc Anthony Green, Gordon Irlam -x86 Anthony Green, Jon Beniston -x86-64 Bo Thorsen - -Jesper Skov and Andrew Haley both did more than their fair share of -stepping through the code and tracking down bugs. - -Thanks also to Tom Tromey for bug fixes, documentation and -configuration help. - -Thanks to Jim Blandy, who provided some useful feedback on the libffi -interface. - -Andreas Tobler has done a tremendous amount of work on the testsuite. - -Alex Oliva solved the executable page problem for SElinux. - -The list above is almost certainly incomplete and inaccurate. I'm -happy to make corrections or additions upon request. - -If you have a problem, or have found a bug, please send a note to the -author at green@moxielogic.com, or the project mailing list at -libffi-discuss@sourceware.org. diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/acinclude.m4 b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/acinclude.m4 deleted file mode 100644 index 3e8f8ba..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/acinclude.m4 +++ /dev/null @@ -1,92 +0,0 @@ -# mmap(2) blacklisting. Some platforms provide the mmap library routine -# but don't support all of the features we need from it. -AC_DEFUN([AC_FUNC_MMAP_BLACKLIST], -[ -AC_CHECK_HEADER([sys/mman.h], - [libffi_header_sys_mman_h=yes], [libffi_header_sys_mman_h=no]) -AC_CHECK_FUNC([mmap], [libffi_func_mmap=yes], [libffi_func_mmap=no]) -if test "$libffi_header_sys_mman_h" != yes \ - || test "$libffi_func_mmap" != yes; then - ac_cv_func_mmap_file=no - ac_cv_func_mmap_dev_zero=no - ac_cv_func_mmap_anon=no -else - AC_CACHE_CHECK([whether read-only mmap of a plain file works], - ac_cv_func_mmap_file, - [# Add a system to this blacklist if - # mmap(0, stat_size, PROT_READ, MAP_PRIVATE, fd, 0) doesn't return a - # memory area containing the same data that you'd get if you applied - # read() to the same fd. The only system known to have a problem here - # is VMS, where text files have record structure. - case "$host_os" in - vms* | ultrix*) - ac_cv_func_mmap_file=no ;; - *) - ac_cv_func_mmap_file=yes;; - esac]) - AC_CACHE_CHECK([whether mmap from /dev/zero works], - ac_cv_func_mmap_dev_zero, - [# Add a system to this blacklist if it has mmap() but /dev/zero - # does not exist, or if mmapping /dev/zero does not give anonymous - # zeroed pages with both the following properties: - # 1. If you map N consecutive pages in with one call, and then - # unmap any subset of those pages, the pages that were not - # explicitly unmapped remain accessible. - # 2. If you map two adjacent blocks of memory and then unmap them - # both at once, they must both go away. - # Systems known to be in this category are Windows (all variants), - # VMS, and Darwin. - case "$host_os" in - vms* | cygwin* | pe | mingw* | darwin* | ultrix* | hpux10* | hpux11.00) - ac_cv_func_mmap_dev_zero=no ;; - *) - ac_cv_func_mmap_dev_zero=yes;; - esac]) - - # Unlike /dev/zero, the MAP_ANON(YMOUS) defines can be probed for. - AC_CACHE_CHECK([for MAP_ANON(YMOUS)], ac_cv_decl_map_anon, - [AC_TRY_COMPILE( -[#include -#include -#include - -#ifndef MAP_ANONYMOUS -#define MAP_ANONYMOUS MAP_ANON -#endif -], -[int n = MAP_ANONYMOUS;], - ac_cv_decl_map_anon=yes, - ac_cv_decl_map_anon=no)]) - - if test $ac_cv_decl_map_anon = no; then - ac_cv_func_mmap_anon=no - else - AC_CACHE_CHECK([whether mmap with MAP_ANON(YMOUS) works], - ac_cv_func_mmap_anon, - [# Add a system to this blacklist if it has mmap() and MAP_ANON or - # MAP_ANONYMOUS, but using mmap(..., MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) - # doesn't give anonymous zeroed pages with the same properties listed - # above for use of /dev/zero. - # Systems known to be in this category are Windows, VMS, and SCO Unix. - case "$host_os" in - vms* | cygwin* | pe | mingw* | sco* | udk* ) - ac_cv_func_mmap_anon=no ;; - *) - ac_cv_func_mmap_anon=yes;; - esac]) - fi -fi - -if test $ac_cv_func_mmap_file = yes; then - AC_DEFINE(HAVE_MMAP_FILE, 1, - [Define if read-only mmap of a plain file works.]) -fi -if test $ac_cv_func_mmap_dev_zero = yes; then - AC_DEFINE(HAVE_MMAP_DEV_ZERO, 1, - [Define if mmap of /dev/zero works.]) -fi -if test $ac_cv_func_mmap_anon = yes; then - AC_DEFINE(HAVE_MMAP_ANON, 1, - [Define if mmap with MAP_ANON(YMOUS) works.]) -fi -]) diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/aclocal.m4 b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/aclocal.m4 deleted file mode 100644 index 6132c39..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/aclocal.m4 +++ /dev/null @@ -1,1873 +0,0 @@ -# generated automatically by aclocal 1.11.1 -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, -[m4_warning([this file was generated for autoconf 2.68. -You have another version of autoconf. It may work, but is not guaranteed to. -If you have problems, you may need to regenerate the build system entirely. -To do so, use the procedure documented by the package, typically `autoreconf'.])]) - -# ltdl.m4 - Configure ltdl for the target system. -*-Autoconf-*- -# -# Copyright (C) 1999-2006, 2007, 2008 Free Software Foundation, Inc. -# Written by Thomas Tanner, 1999 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 18 LTDL_INIT - -# LT_CONFIG_LTDL_DIR(DIRECTORY, [LTDL-MODE]) -# ------------------------------------------ -# DIRECTORY contains the libltdl sources. It is okay to call this -# function multiple times, as long as the same DIRECTORY is always given. -AC_DEFUN([LT_CONFIG_LTDL_DIR], -[AC_BEFORE([$0], [LTDL_INIT]) -_$0($*) -])# LT_CONFIG_LTDL_DIR - -# We break this out into a separate macro, so that we can call it safely -# internally without being caught accidentally by the sed scan in libtoolize. -m4_defun([_LT_CONFIG_LTDL_DIR], -[dnl remove trailing slashes -m4_pushdef([_ARG_DIR], m4_bpatsubst([$1], [/*$])) -m4_case(_LTDL_DIR, - [], [dnl only set lt_ltdl_dir if _ARG_DIR is not simply `.' - m4_if(_ARG_DIR, [.], - [], - [m4_define([_LTDL_DIR], _ARG_DIR) - _LT_SHELL_INIT([lt_ltdl_dir=']_ARG_DIR['])])], - [m4_if(_ARG_DIR, _LTDL_DIR, - [], - [m4_fatal([multiple libltdl directories: `]_LTDL_DIR[', `]_ARG_DIR['])])]) -m4_popdef([_ARG_DIR]) -])# _LT_CONFIG_LTDL_DIR - -# Initialise: -m4_define([_LTDL_DIR], []) - - -# _LT_BUILD_PREFIX -# ---------------- -# If Autoconf is new enough, expand to `${top_build_prefix}', otherwise -# to `${top_builddir}/'. -m4_define([_LT_BUILD_PREFIX], -[m4_ifdef([AC_AUTOCONF_VERSION], - [m4_if(m4_version_compare(m4_defn([AC_AUTOCONF_VERSION]), [2.62]), - [-1], [m4_ifdef([_AC_HAVE_TOP_BUILD_PREFIX], - [${top_build_prefix}], - [${top_builddir}/])], - [${top_build_prefix}])], - [${top_builddir}/])[]dnl -]) - - -# LTDL_CONVENIENCE -# ---------------- -# sets LIBLTDL to the link flags for the libltdl convenience library and -# LTDLINCL to the include flags for the libltdl header and adds -# --enable-ltdl-convenience to the configure arguments. Note that -# AC_CONFIG_SUBDIRS is not called here. LIBLTDL will be prefixed with -# '${top_build_prefix}' if available, otherwise with '${top_builddir}/', -# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single -# quotes!). If your package is not flat and you're not using automake, -# define top_build_prefix, top_builddir, and top_srcdir appropriately -# in your Makefiles. -AC_DEFUN([LTDL_CONVENIENCE], -[AC_BEFORE([$0], [LTDL_INIT])dnl -dnl Although the argument is deprecated and no longer documented, -dnl LTDL_CONVENIENCE used to take a DIRECTORY orgument, if we have one -dnl here make sure it is the same as any other declaration of libltdl's -dnl location! This also ensures lt_ltdl_dir is set when configure.ac is -dnl not yet using an explicit LT_CONFIG_LTDL_DIR. -m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl -_$0() -])# LTDL_CONVENIENCE - -# AC_LIBLTDL_CONVENIENCE accepted a directory argument in older libtools, -# now we have LT_CONFIG_LTDL_DIR: -AU_DEFUN([AC_LIBLTDL_CONVENIENCE], -[_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) -_LTDL_CONVENIENCE]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBLTDL_CONVENIENCE], []) - - -# _LTDL_CONVENIENCE -# ----------------- -# Code shared by LTDL_CONVENIENCE and LTDL_INIT([convenience]). -m4_defun([_LTDL_CONVENIENCE], -[case $enable_ltdl_convenience in - no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; - "") enable_ltdl_convenience=yes - ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; -esac -LIBLTDL='_LT_BUILD_PREFIX'"${lt_ltdl_dir+$lt_ltdl_dir/}libltdlc.la" -LTDLDEPS=$LIBLTDL -LTDLINCL='-I${top_srcdir}'"${lt_ltdl_dir+/$lt_ltdl_dir}" - -AC_SUBST([LIBLTDL]) -AC_SUBST([LTDLDEPS]) -AC_SUBST([LTDLINCL]) - -# For backwards non-gettext consistent compatibility... -INCLTDL="$LTDLINCL" -AC_SUBST([INCLTDL]) -])# _LTDL_CONVENIENCE - - -# LTDL_INSTALLABLE -# ---------------- -# sets LIBLTDL to the link flags for the libltdl installable library -# and LTDLINCL to the include flags for the libltdl header and adds -# --enable-ltdl-install to the configure arguments. Note that -# AC_CONFIG_SUBDIRS is not called from here. If an installed libltdl -# is not found, LIBLTDL will be prefixed with '${top_build_prefix}' if -# available, otherwise with '${top_builddir}/', and LTDLINCL will be -# prefixed with '${top_srcdir}/' (note the single quotes!). If your -# package is not flat and you're not using automake, define top_build_prefix, -# top_builddir, and top_srcdir appropriately in your Makefiles. -# In the future, this macro may have to be called after LT_INIT. -AC_DEFUN([LTDL_INSTALLABLE], -[AC_BEFORE([$0], [LTDL_INIT])dnl -dnl Although the argument is deprecated and no longer documented, -dnl LTDL_INSTALLABLE used to take a DIRECTORY orgument, if we have one -dnl here make sure it is the same as any other declaration of libltdl's -dnl location! This also ensures lt_ltdl_dir is set when configure.ac is -dnl not yet using an explicit LT_CONFIG_LTDL_DIR. -m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl -_$0() -])# LTDL_INSTALLABLE - -# AC_LIBLTDL_INSTALLABLE accepted a directory argument in older libtools, -# now we have LT_CONFIG_LTDL_DIR: -AU_DEFUN([AC_LIBLTDL_INSTALLABLE], -[_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) -_LTDL_INSTALLABLE]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBLTDL_INSTALLABLE], []) - - -# _LTDL_INSTALLABLE -# ----------------- -# Code shared by LTDL_INSTALLABLE and LTDL_INIT([installable]). -m4_defun([_LTDL_INSTALLABLE], -[if test -f $prefix/lib/libltdl.la; then - lt_save_LDFLAGS="$LDFLAGS" - LDFLAGS="-L$prefix/lib $LDFLAGS" - AC_CHECK_LIB([ltdl], [lt_dlinit], [lt_lib_ltdl=yes]) - LDFLAGS="$lt_save_LDFLAGS" - if test x"${lt_lib_ltdl-no}" = xyes; then - if test x"$enable_ltdl_install" != xyes; then - # Don't overwrite $prefix/lib/libltdl.la without --enable-ltdl-install - AC_MSG_WARN([not overwriting libltdl at $prefix, force with `--enable-ltdl-install']) - enable_ltdl_install=no - fi - elif test x"$enable_ltdl_install" = xno; then - AC_MSG_WARN([libltdl not installed, but installation disabled]) - fi -fi - -# If configure.ac declared an installable ltdl, and the user didn't override -# with --disable-ltdl-install, we will install the shipped libltdl. -case $enable_ltdl_install in - no) ac_configure_args="$ac_configure_args --enable-ltdl-install=no" - LIBLTDL="-lltdl" - LTDLDEPS= - LTDLINCL= - ;; - *) enable_ltdl_install=yes - ac_configure_args="$ac_configure_args --enable-ltdl-install" - LIBLTDL='_LT_BUILD_PREFIX'"${lt_ltdl_dir+$lt_ltdl_dir/}libltdl.la" - LTDLDEPS=$LIBLTDL - LTDLINCL='-I${top_srcdir}'"${lt_ltdl_dir+/$lt_ltdl_dir}" - ;; -esac - -AC_SUBST([LIBLTDL]) -AC_SUBST([LTDLDEPS]) -AC_SUBST([LTDLINCL]) - -# For backwards non-gettext consistent compatibility... -INCLTDL="$LTDLINCL" -AC_SUBST([INCLTDL]) -])# LTDL_INSTALLABLE - - -# _LTDL_MODE_DISPATCH -# ------------------- -m4_define([_LTDL_MODE_DISPATCH], -[dnl If _LTDL_DIR is `.', then we are configuring libltdl itself: -m4_if(_LTDL_DIR, [], - [], - dnl if _LTDL_MODE was not set already, the default value is `subproject': - [m4_case(m4_default(_LTDL_MODE, [subproject]), - [subproject], [AC_CONFIG_SUBDIRS(_LTDL_DIR) - _LT_SHELL_INIT([lt_dlopen_dir="$lt_ltdl_dir"])], - [nonrecursive], [_LT_SHELL_INIT([lt_dlopen_dir="$lt_ltdl_dir"; lt_libobj_prefix="$lt_ltdl_dir/"])], - [recursive], [], - [m4_fatal([unknown libltdl mode: ]_LTDL_MODE)])])dnl -dnl Be careful not to expand twice: -m4_define([$0], []) -])# _LTDL_MODE_DISPATCH - - -# _LT_LIBOBJ(MODULE_NAME) -# ----------------------- -# Like AC_LIBOBJ, except that MODULE_NAME goes into _LT_LIBOBJS instead -# of into LIBOBJS. -AC_DEFUN([_LT_LIBOBJ], [ - m4_pattern_allow([^_LT_LIBOBJS$]) - _LT_LIBOBJS="$_LT_LIBOBJS $1.$ac_objext" -])# _LT_LIBOBJS - - -# LTDL_INIT([OPTIONS]) -# -------------------- -# Clients of libltdl can use this macro to allow the installer to -# choose between a shipped copy of the ltdl sources or a preinstalled -# version of the library. If the shipped ltdl sources are not in a -# subdirectory named libltdl, the directory name must be given by -# LT_CONFIG_LTDL_DIR. -AC_DEFUN([LTDL_INIT], -[dnl Parse OPTIONS -_LT_SET_OPTIONS([$0], [$1]) - -dnl We need to keep our own list of libobjs separate from our parent project, -dnl and the easiest way to do that is redefine the AC_LIBOBJs macro while -dnl we look for our own LIBOBJs. -m4_pushdef([AC_LIBOBJ], m4_defn([_LT_LIBOBJ])) -m4_pushdef([AC_LIBSOURCES]) - -dnl If not otherwise defined, default to the 1.5.x compatible subproject mode: -m4_if(_LTDL_MODE, [], - [m4_define([_LTDL_MODE], m4_default([$2], [subproject])) - m4_if([-1], [m4_bregexp(_LTDL_MODE, [\(subproject\|\(non\)?recursive\)])], - [m4_fatal([unknown libltdl mode: ]_LTDL_MODE)])]) - -AC_ARG_WITH([included_ltdl], - [AS_HELP_STRING([--with-included-ltdl], - [use the GNU ltdl sources included here])]) - -if test "x$with_included_ltdl" != xyes; then - # We are not being forced to use the included libltdl sources, so - # decide whether there is a useful installed version we can use. - AC_CHECK_HEADER([ltdl.h], - [AC_CHECK_DECL([lt_dlinterface_register], - [AC_CHECK_LIB([ltdl], [lt_dladvise_preload], - [with_included_ltdl=no], - [with_included_ltdl=yes])], - [with_included_ltdl=yes], - [AC_INCLUDES_DEFAULT - #include ])], - [with_included_ltdl=yes], - [AC_INCLUDES_DEFAULT] - ) -fi - -dnl If neither LT_CONFIG_LTDL_DIR, LTDL_CONVENIENCE nor LTDL_INSTALLABLE -dnl was called yet, then for old times' sake, we assume libltdl is in an -dnl eponymous directory: -AC_PROVIDE_IFELSE([LT_CONFIG_LTDL_DIR], [], [_LT_CONFIG_LTDL_DIR([libltdl])]) - -AC_ARG_WITH([ltdl_include], - [AS_HELP_STRING([--with-ltdl-include=DIR], - [use the ltdl headers installed in DIR])]) - -if test -n "$with_ltdl_include"; then - if test -f "$with_ltdl_include/ltdl.h"; then : - else - AC_MSG_ERROR([invalid ltdl include directory: `$with_ltdl_include']) - fi -else - with_ltdl_include=no -fi - -AC_ARG_WITH([ltdl_lib], - [AS_HELP_STRING([--with-ltdl-lib=DIR], - [use the libltdl.la installed in DIR])]) - -if test -n "$with_ltdl_lib"; then - if test -f "$with_ltdl_lib/libltdl.la"; then : - else - AC_MSG_ERROR([invalid ltdl library directory: `$with_ltdl_lib']) - fi -else - with_ltdl_lib=no -fi - -case ,$with_included_ltdl,$with_ltdl_include,$with_ltdl_lib, in - ,yes,no,no,) - m4_case(m4_default(_LTDL_TYPE, [convenience]), - [convenience], [_LTDL_CONVENIENCE], - [installable], [_LTDL_INSTALLABLE], - [m4_fatal([unknown libltdl build type: ]_LTDL_TYPE)]) - ;; - ,no,no,no,) - # If the included ltdl is not to be used, then use the - # preinstalled libltdl we found. - AC_DEFINE([HAVE_LTDL], [1], - [Define this if a modern libltdl is already installed]) - LIBLTDL=-lltdl - LTDLDEPS= - LTDLINCL= - ;; - ,no*,no,*) - AC_MSG_ERROR([`--with-ltdl-include' and `--with-ltdl-lib' options must be used together]) - ;; - *) with_included_ltdl=no - LIBLTDL="-L$with_ltdl_lib -lltdl" - LTDLDEPS= - LTDLINCL="-I$with_ltdl_include" - ;; -esac -INCLTDL="$LTDLINCL" - -# Report our decision... -AC_MSG_CHECKING([where to find libltdl headers]) -AC_MSG_RESULT([$LTDLINCL]) -AC_MSG_CHECKING([where to find libltdl library]) -AC_MSG_RESULT([$LIBLTDL]) - -_LTDL_SETUP - -dnl restore autoconf definition. -m4_popdef([AC_LIBOBJ]) -m4_popdef([AC_LIBSOURCES]) - -AC_CONFIG_COMMANDS_PRE([ - _ltdl_libobjs= - _ltdl_ltlibobjs= - if test -n "$_LT_LIBOBJS"; then - # Remove the extension. - _lt_sed_drop_objext='s/\.o$//;s/\.obj$//' - for i in `for i in $_LT_LIBOBJS; do echo "$i"; done | sed "$_lt_sed_drop_objext" | sort -u`; do - _ltdl_libobjs="$_ltdl_libobjs $lt_libobj_prefix$i.$ac_objext" - _ltdl_ltlibobjs="$_ltdl_ltlibobjs $lt_libobj_prefix$i.lo" - done - fi - AC_SUBST([ltdl_LIBOBJS], [$_ltdl_libobjs]) - AC_SUBST([ltdl_LTLIBOBJS], [$_ltdl_ltlibobjs]) -]) - -# Only expand once: -m4_define([LTDL_INIT]) -])# LTDL_INIT - -# Old names: -AU_DEFUN([AC_LIB_LTDL], [LTDL_INIT($@)]) -AU_DEFUN([AC_WITH_LTDL], [LTDL_INIT($@)]) -AU_DEFUN([LT_WITH_LTDL], [LTDL_INIT($@)]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIB_LTDL], []) -dnl AC_DEFUN([AC_WITH_LTDL], []) -dnl AC_DEFUN([LT_WITH_LTDL], []) - - -# _LTDL_SETUP -# ----------- -# Perform all the checks necessary for compilation of the ltdl objects -# -- including compiler checks and header checks. This is a public -# interface mainly for the benefit of libltdl's own configure.ac, most -# other users should call LTDL_INIT instead. -AC_DEFUN([_LTDL_SETUP], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([LT_SYS_MODULE_EXT])dnl -AC_REQUIRE([LT_SYS_MODULE_PATH])dnl -AC_REQUIRE([LT_SYS_DLSEARCH_PATH])dnl -AC_REQUIRE([LT_LIB_DLLOAD])dnl -AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl -AC_REQUIRE([LT_FUNC_DLSYM_USCORE])dnl -AC_REQUIRE([LT_SYS_DLOPEN_DEPLIBS])dnl -AC_REQUIRE([gl_FUNC_ARGZ])dnl - -m4_require([_LT_CHECK_OBJDIR])dnl -m4_require([_LT_HEADER_DLFCN])dnl -m4_require([_LT_CHECK_DLPREOPEN])dnl -m4_require([_LT_DECL_SED])dnl - -dnl Don't require this, or it will be expanded earlier than the code -dnl that sets the variables it relies on: -_LT_ENABLE_INSTALL - -dnl _LTDL_MODE specific code must be called at least once: -_LTDL_MODE_DISPATCH - -# In order that ltdl.c can compile, find out the first AC_CONFIG_HEADERS -# the user used. This is so that ltdl.h can pick up the parent projects -# config.h file, The first file in AC_CONFIG_HEADERS must contain the -# definitions required by ltdl.c. -# FIXME: Remove use of undocumented AC_LIST_HEADERS (2.59 compatibility). -AC_CONFIG_COMMANDS_PRE([dnl -m4_pattern_allow([^LT_CONFIG_H$])dnl -m4_ifset([AH_HEADER], - [LT_CONFIG_H=AH_HEADER], - [m4_ifset([AC_LIST_HEADERS], - [LT_CONFIG_H=`echo "AC_LIST_HEADERS" | $SED 's,^[[ ]]*,,;s,[[ :]].*$,,'`], - [])])]) -AC_SUBST([LT_CONFIG_H]) - -AC_CHECK_HEADERS([unistd.h dl.h sys/dl.h dld.h mach-o/dyld.h dirent.h], - [], [], [AC_INCLUDES_DEFAULT]) - -AC_CHECK_FUNCS([closedir opendir readdir], [], [AC_LIBOBJ([lt__dirent])]) -AC_CHECK_FUNCS([strlcat strlcpy], [], [AC_LIBOBJ([lt__strl])]) - -m4_pattern_allow([LT_LIBEXT])dnl -AC_DEFINE_UNQUOTED([LT_LIBEXT],["$libext"],[The archive extension]) - -name= -eval "lt_libprefix=\"$libname_spec\"" -m4_pattern_allow([LT_LIBPREFIX])dnl -AC_DEFINE_UNQUOTED([LT_LIBPREFIX],["$lt_libprefix"],[The archive prefix]) - -name=ltdl -eval "LTDLOPEN=\"$libname_spec\"" -AC_SUBST([LTDLOPEN]) -])# _LTDL_SETUP - - -# _LT_ENABLE_INSTALL -# ------------------ -m4_define([_LT_ENABLE_INSTALL], -[AC_ARG_ENABLE([ltdl-install], - [AS_HELP_STRING([--enable-ltdl-install], [install libltdl])]) - -case ,${enable_ltdl_install},${enable_ltdl_convenience} in - *yes*) ;; - *) enable_ltdl_convenience=yes ;; -esac - -m4_ifdef([AM_CONDITIONAL], -[AM_CONDITIONAL(INSTALL_LTDL, test x"${enable_ltdl_install-no}" != xno) - AM_CONDITIONAL(CONVENIENCE_LTDL, test x"${enable_ltdl_convenience-no}" != xno)]) -])# _LT_ENABLE_INSTALL - - -# LT_SYS_DLOPEN_DEPLIBS -# --------------------- -AC_DEFUN([LT_SYS_DLOPEN_DEPLIBS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_CACHE_CHECK([whether deplibs are loaded by dlopen], - [lt_cv_sys_dlopen_deplibs], - [# PORTME does your system automatically load deplibs for dlopen? - # or its logical equivalent (e.g. shl_load for HP-UX < 11) - # For now, we just catch OSes we know something about -- in the - # future, we'll try test this programmatically. - lt_cv_sys_dlopen_deplibs=unknown - case $host_os in - aix3*|aix4.1.*|aix4.2.*) - # Unknown whether this is true for these versions of AIX, but - # we want this `case' here to explicitly catch those versions. - lt_cv_sys_dlopen_deplibs=unknown - ;; - aix[[4-9]]*) - lt_cv_sys_dlopen_deplibs=yes - ;; - amigaos*) - case $host_cpu in - powerpc) - lt_cv_sys_dlopen_deplibs=no - ;; - esac - ;; - darwin*) - # Assuming the user has installed a libdl from somewhere, this is true - # If you are looking for one http://www.opendarwin.org/projects/dlcompat - lt_cv_sys_dlopen_deplibs=yes - ;; - freebsd* | dragonfly*) - lt_cv_sys_dlopen_deplibs=yes - ;; - gnu* | linux* | k*bsd*-gnu | kopensolaris*-gnu) - # GNU and its variants, using gnu ld.so (Glibc) - lt_cv_sys_dlopen_deplibs=yes - ;; - hpux10*|hpux11*) - lt_cv_sys_dlopen_deplibs=yes - ;; - interix*) - lt_cv_sys_dlopen_deplibs=yes - ;; - irix[[12345]]*|irix6.[[01]]*) - # Catch all versions of IRIX before 6.2, and indicate that we don't - # know how it worked for any of those versions. - lt_cv_sys_dlopen_deplibs=unknown - ;; - irix*) - # The case above catches anything before 6.2, and it's known that - # at 6.2 and later dlopen does load deplibs. - lt_cv_sys_dlopen_deplibs=yes - ;; - netbsd*) - lt_cv_sys_dlopen_deplibs=yes - ;; - openbsd*) - lt_cv_sys_dlopen_deplibs=yes - ;; - osf[[1234]]*) - # dlopen did load deplibs (at least at 4.x), but until the 5.x series, - # it did *not* use an RPATH in a shared library to find objects the - # library depends on, so we explicitly say `no'. - lt_cv_sys_dlopen_deplibs=no - ;; - osf5.0|osf5.0a|osf5.1) - # dlopen *does* load deplibs and with the right loader patch applied - # it even uses RPATH in a shared library to search for shared objects - # that the library depends on, but there's no easy way to know if that - # patch is installed. Since this is the case, all we can really - # say is unknown -- it depends on the patch being installed. If - # it is, this changes to `yes'. Without it, it would be `no'. - lt_cv_sys_dlopen_deplibs=unknown - ;; - osf*) - # the two cases above should catch all versions of osf <= 5.1. Read - # the comments above for what we know about them. - # At > 5.1, deplibs are loaded *and* any RPATH in a shared library - # is used to find them so we can finally say `yes'. - lt_cv_sys_dlopen_deplibs=yes - ;; - qnx*) - lt_cv_sys_dlopen_deplibs=yes - ;; - solaris*) - lt_cv_sys_dlopen_deplibs=yes - ;; - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - libltdl_cv_sys_dlopen_deplibs=yes - ;; - esac - ]) -if test "$lt_cv_sys_dlopen_deplibs" != yes; then - AC_DEFINE([LTDL_DLOPEN_DEPLIBS], [1], - [Define if the OS needs help to load dependent libraries for dlopen().]) -fi -])# LT_SYS_DLOPEN_DEPLIBS - -# Old name: -AU_ALIAS([AC_LTDL_SYS_DLOPEN_DEPLIBS], [LT_SYS_DLOPEN_DEPLIBS]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], []) - - -# LT_SYS_MODULE_EXT -# ----------------- -AC_DEFUN([LT_SYS_MODULE_EXT], -[m4_require([_LT_SYS_DYNAMIC_LINKER])dnl -AC_CACHE_CHECK([which extension is used for runtime loadable modules], - [libltdl_cv_shlibext], -[ -module=yes -eval libltdl_cv_shlibext=$shrext_cmds - ]) -if test -n "$libltdl_cv_shlibext"; then - m4_pattern_allow([LT_MODULE_EXT])dnl - AC_DEFINE_UNQUOTED([LT_MODULE_EXT], ["$libltdl_cv_shlibext"], - [Define to the extension used for runtime loadable modules, say, ".so".]) -fi -])# LT_SYS_MODULE_EXT - -# Old name: -AU_ALIAS([AC_LTDL_SHLIBEXT], [LT_SYS_MODULE_EXT]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LTDL_SHLIBEXT], []) - - -# LT_SYS_MODULE_PATH -# ------------------ -AC_DEFUN([LT_SYS_MODULE_PATH], -[m4_require([_LT_SYS_DYNAMIC_LINKER])dnl -AC_CACHE_CHECK([which variable specifies run-time module search path], - [lt_cv_module_path_var], [lt_cv_module_path_var="$shlibpath_var"]) -if test -n "$lt_cv_module_path_var"; then - m4_pattern_allow([LT_MODULE_PATH_VAR])dnl - AC_DEFINE_UNQUOTED([LT_MODULE_PATH_VAR], ["$lt_cv_module_path_var"], - [Define to the name of the environment variable that determines the run-time module search path.]) -fi -])# LT_SYS_MODULE_PATH - -# Old name: -AU_ALIAS([AC_LTDL_SHLIBPATH], [LT_SYS_MODULE_PATH]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LTDL_SHLIBPATH], []) - - -# LT_SYS_DLSEARCH_PATH -# -------------------- -AC_DEFUN([LT_SYS_DLSEARCH_PATH], -[m4_require([_LT_SYS_DYNAMIC_LINKER])dnl -AC_CACHE_CHECK([for the default library search path], - [lt_cv_sys_dlsearch_path], - [lt_cv_sys_dlsearch_path="$sys_lib_dlsearch_path_spec"]) -if test -n "$lt_cv_sys_dlsearch_path"; then - sys_dlsearch_path= - for dir in $lt_cv_sys_dlsearch_path; do - if test -z "$sys_dlsearch_path"; then - sys_dlsearch_path="$dir" - else - sys_dlsearch_path="$sys_dlsearch_path$PATH_SEPARATOR$dir" - fi - done - m4_pattern_allow([LT_DLSEARCH_PATH])dnl - AC_DEFINE_UNQUOTED([LT_DLSEARCH_PATH], ["$sys_dlsearch_path"], - [Define to the system default library search path.]) -fi -])# LT_SYS_DLSEARCH_PATH - -# Old name: -AU_ALIAS([AC_LTDL_SYSSEARCHPATH], [LT_SYS_DLSEARCH_PATH]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LTDL_SYSSEARCHPATH], []) - - -# _LT_CHECK_DLPREOPEN -# ------------------- -m4_defun([_LT_CHECK_DLPREOPEN], -[m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -AC_CACHE_CHECK([whether libtool supports -dlopen/-dlpreopen], - [libltdl_cv_preloaded_symbols], - [if test -n "$lt_cv_sys_global_symbol_pipe"; then - libltdl_cv_preloaded_symbols=yes - else - libltdl_cv_preloaded_symbols=no - fi - ]) -if test x"$libltdl_cv_preloaded_symbols" = xyes; then - AC_DEFINE([HAVE_PRELOADED_SYMBOLS], [1], - [Define if libtool can extract symbol lists from object files.]) -fi -])# _LT_CHECK_DLPREOPEN - - -# LT_LIB_DLLOAD -# ------------- -AC_DEFUN([LT_LIB_DLLOAD], -[m4_pattern_allow([^LT_DLLOADERS$]) -LT_DLLOADERS= -AC_SUBST([LT_DLLOADERS]) - -AC_LANG_PUSH([C]) - -LIBADD_DLOPEN= -AC_SEARCH_LIBS([dlopen], [dl], - [AC_DEFINE([HAVE_LIBDL], [1], - [Define if you have the libdl library or equivalent.]) - if test "$ac_cv_search_dlopen" != "none required" ; then - LIBADD_DLOPEN="-ldl" - fi - libltdl_cv_lib_dl_dlopen="yes" - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"], - [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#if HAVE_DLFCN_H -# include -#endif - ]], [[dlopen(0, 0);]])], - [AC_DEFINE([HAVE_LIBDL], [1], - [Define if you have the libdl library or equivalent.]) - libltdl_cv_func_dlopen="yes" - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"], - [AC_CHECK_LIB([svld], [dlopen], - [AC_DEFINE([HAVE_LIBDL], [1], - [Define if you have the libdl library or equivalent.]) - LIBADD_DLOPEN="-lsvld" libltdl_cv_func_dlopen="yes" - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"])])]) -if test x"$libltdl_cv_func_dlopen" = xyes || test x"$libltdl_cv_lib_dl_dlopen" = xyes -then - lt_save_LIBS="$LIBS" - LIBS="$LIBS $LIBADD_DLOPEN" - AC_CHECK_FUNCS([dlerror]) - LIBS="$lt_save_LIBS" -fi -AC_SUBST([LIBADD_DLOPEN]) - -LIBADD_SHL_LOAD= -AC_CHECK_FUNC([shl_load], - [AC_DEFINE([HAVE_SHL_LOAD], [1], - [Define if you have the shl_load function.]) - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la"], - [AC_CHECK_LIB([dld], [shl_load], - [AC_DEFINE([HAVE_SHL_LOAD], [1], - [Define if you have the shl_load function.]) - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la" - LIBADD_SHL_LOAD="-ldld"])]) -AC_SUBST([LIBADD_SHL_LOAD]) - -case $host_os in -darwin[[1567]].*) -# We only want this for pre-Mac OS X 10.4. - AC_CHECK_FUNC([_dyld_func_lookup], - [AC_DEFINE([HAVE_DYLD], [1], - [Define if you have the _dyld_func_lookup function.]) - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dyld.la"]) - ;; -beos*) - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}load_add_on.la" - ;; -cygwin* | mingw* | os2* | pw32*) - AC_CHECK_DECLS([cygwin_conv_path], [], [], [[#include ]]) - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}loadlibrary.la" - ;; -esac - -AC_CHECK_LIB([dld], [dld_link], - [AC_DEFINE([HAVE_DLD], [1], - [Define if you have the GNU dld library.]) - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dld_link.la"]) -AC_SUBST([LIBADD_DLD_LINK]) - -m4_pattern_allow([^LT_DLPREOPEN$]) -LT_DLPREOPEN= -if test -n "$LT_DLLOADERS" -then - for lt_loader in $LT_DLLOADERS; do - LT_DLPREOPEN="$LT_DLPREOPEN-dlpreopen $lt_loader " - done - AC_DEFINE([HAVE_LIBDLLOADER], [1], - [Define if libdlloader will be built on this platform]) -fi -AC_SUBST([LT_DLPREOPEN]) - -dnl This isn't used anymore, but set it for backwards compatibility -LIBADD_DL="$LIBADD_DLOPEN $LIBADD_SHL_LOAD" -AC_SUBST([LIBADD_DL]) - -AC_LANG_POP -])# LT_LIB_DLLOAD - -# Old name: -AU_ALIAS([AC_LTDL_DLLIB], [LT_LIB_DLLOAD]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LTDL_DLLIB], []) - - -# LT_SYS_SYMBOL_USCORE -# -------------------- -# does the compiler prefix global symbols with an underscore? -AC_DEFUN([LT_SYS_SYMBOL_USCORE], -[m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -AC_CACHE_CHECK([for _ prefix in compiled symbols], - [lt_cv_sys_symbol_underscore], - [lt_cv_sys_symbol_underscore=no - cat > conftest.$ac_ext <<_LT_EOF -void nm_test_func(){} -int main(){nm_test_func;return 0;} -_LT_EOF - if AC_TRY_EVAL(ac_compile); then - # Now try to grab the symbols. - ac_nlist=conftest.nm - if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then - # See whether the symbols have a leading underscore. - if grep '^. _nm_test_func' "$ac_nlist" >/dev/null; then - lt_cv_sys_symbol_underscore=yes - else - if grep '^. nm_test_func ' "$ac_nlist" >/dev/null; then - : - else - echo "configure: cannot find nm_test_func in $ac_nlist" >&AS_MESSAGE_LOG_FD - fi - fi - else - echo "configure: cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD - fi - else - echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD - cat conftest.c >&AS_MESSAGE_LOG_FD - fi - rm -rf conftest* - ]) - sys_symbol_underscore=$lt_cv_sys_symbol_underscore - AC_SUBST([sys_symbol_underscore]) -])# LT_SYS_SYMBOL_USCORE - -# Old name: -AU_ALIAS([AC_LTDL_SYMBOL_USCORE], [LT_SYS_SYMBOL_USCORE]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LTDL_SYMBOL_USCORE], []) - - -# LT_FUNC_DLSYM_USCORE -# -------------------- -AC_DEFUN([LT_FUNC_DLSYM_USCORE], -[AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl -if test x"$lt_cv_sys_symbol_underscore" = xyes; then - if test x"$libltdl_cv_func_dlopen" = xyes || - test x"$libltdl_cv_lib_dl_dlopen" = xyes ; then - AC_CACHE_CHECK([whether we have to add an underscore for dlsym], - [libltdl_cv_need_uscore], - [libltdl_cv_need_uscore=unknown - save_LIBS="$LIBS" - LIBS="$LIBS $LIBADD_DLOPEN" - _LT_TRY_DLOPEN_SELF( - [libltdl_cv_need_uscore=no], [libltdl_cv_need_uscore=yes], - [], [libltdl_cv_need_uscore=cross]) - LIBS="$save_LIBS" - ]) - fi -fi - -if test x"$libltdl_cv_need_uscore" = xyes; then - AC_DEFINE([NEED_USCORE], [1], - [Define if dlsym() requires a leading underscore in symbol names.]) -fi -])# LT_FUNC_DLSYM_USCORE - -# Old name: -AU_ALIAS([AC_LTDL_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LTDL_DLSYM_USCORE], []) - -# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_AUTOMAKE_VERSION(VERSION) -# ---------------------------- -# Automake X.Y traces this macro to ensure aclocal.m4 has been -# generated from the m4 files accompanying Automake X.Y. -# (This private macro should not be called outside this file.) -AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.11' -dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to -dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.11.1], [], - [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl -]) - -# _AM_AUTOCONF_VERSION(VERSION) -# ----------------------------- -# aclocal traces this macro to find the Autoconf version. -# This is a private macro too. Using m4_define simplifies -# the logic in aclocal, which can simply ignore this definition. -m4_define([_AM_AUTOCONF_VERSION], []) - -# AM_SET_CURRENT_AUTOMAKE_VERSION -# ------------------------------- -# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. -# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. -AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.11.1])dnl -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) - -# Figure out how to run the assembler. -*- Autoconf -*- - -# Copyright (C) 2001, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 5 - -# AM_PROG_AS -# ---------- -AC_DEFUN([AM_PROG_AS], -[# By default we simply use the C compiler to build assembly code. -AC_REQUIRE([AC_PROG_CC]) -test "${CCAS+set}" = set || CCAS=$CC -test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS -AC_ARG_VAR([CCAS], [assembler compiler command (defaults to CC)]) -AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)]) -_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl -]) - -# AM_AUX_DIR_EXPAND -*- Autoconf -*- - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to -# `$srcdir', `$srcdir/..', or `$srcdir/../..'. -# -# Of course, Automake must honor this variable whenever it calls a -# tool from the auxiliary directory. The problem is that $srcdir (and -# therefore $ac_aux_dir as well) can be either absolute or relative, -# depending on how configure is run. This is pretty annoying, since -# it makes $ac_aux_dir quite unusable in subdirectories: in the top -# source directory, any form will work fine, but in subdirectories a -# relative path needs to be adjusted first. -# -# $ac_aux_dir/missing -# fails when called from a subdirectory if $ac_aux_dir is relative -# $top_srcdir/$ac_aux_dir/missing -# fails if $ac_aux_dir is absolute, -# fails when called from a subdirectory in a VPATH build with -# a relative $ac_aux_dir -# -# The reason of the latter failure is that $top_srcdir and $ac_aux_dir -# are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is `.', but things will broke when you -# start a VPATH build or use an absolute $srcdir. -# -# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -# and then we would define $MISSING as -# MISSING="\${SHELL} $am_aux_dir/missing" -# This will work as long as MISSING is not called from configure, because -# unfortunately $(top_srcdir) has no meaning in configure. -# However there are other variables, like CC, which are often used in -# configure, and could therefore not use this "fixed" $ac_aux_dir. -# -# Another solution, used here, is to always expand $ac_aux_dir to an -# absolute PATH. The drawback is that using absolute paths prevent a -# configured tree to be moved without reconfiguration. - -AC_DEFUN([AM_AUX_DIR_EXPAND], -[dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` -]) - -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 9 - -# AM_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ(2.52)dnl - ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE])dnl -AC_SUBST([$1_FALSE])dnl -_AM_SUBST_NOTMAKE([$1_TRUE])dnl -_AM_SUBST_NOTMAKE([$1_FALSE])dnl -m4_define([_AM_COND_VALUE_$1], [$2])dnl -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]]) -fi])]) - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 10 - -# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be -# written in clear, in which case automake, when reading aclocal.m4, -# will think it sees a *use*, and therefore will trigger all it's -# C support machinery. Also note that it means that autoscan, seeing -# CC etc. in the Makefile, will ask for an AC_PROG_CC use... - - -# _AM_DEPENDENCIES(NAME) -# ---------------------- -# See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "GCJ", or "OBJC". -# We try a few techniques and use that to set a single cache variable. -# -# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was -# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular -# dependency, and given that the user is not expected to run this macro, -# just rely on AC_PROG_CC. -AC_DEFUN([_AM_DEPENDENCIES], -[AC_REQUIRE([AM_SET_DEPDIR])dnl -AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl -AC_REQUIRE([AM_MAKE_INCLUDE])dnl -AC_REQUIRE([AM_DEP_TRACK])dnl - -ifelse([$1], CC, [depcc="$CC" am_compiler_list=], - [$1], CXX, [depcc="$CXX" am_compiler_list=], - [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], UPC, [depcc="$UPC" am_compiler_list=], - [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) - -AC_CACHE_CHECK([dependency style of $depcc], - [am_cv_$1_dependencies_compiler_type], -[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_$1_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi - am__universal=false - m4_case([$1], [CC], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac], - [CXX], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac]) - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_$1_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_$1_dependencies_compiler_type=none -fi -]) -AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) -AM_CONDITIONAL([am__fastdep$1], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) -]) - - -# AM_SET_DEPDIR -# ------------- -# Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES -AC_DEFUN([AM_SET_DEPDIR], -[AC_REQUIRE([AM_SET_LEADING_DOT])dnl -AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl -]) - - -# AM_DEP_TRACK -# ------------ -AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE(dependency-tracking, -[ --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors]) -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi -AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH])dnl -_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl -]) - -# Generate code to set up dependency tracking. -*- Autoconf -*- - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -#serial 5 - -# _AM_OUTPUT_DEPENDENCY_COMMANDS -# ------------------------------ -AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[{ - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} -])# _AM_OUTPUT_DEPENDENCY_COMMANDS - - -# AM_OUTPUT_DEPENDENCY_COMMANDS -# ----------------------------- -# This macro should only be invoked once -- use via AC_REQUIRE. -# -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each `.P' file that we will -# need in order to bootstrap the dependency handling code. -AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], -[AC_CONFIG_COMMANDS([depfiles], - [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) - -# Do all the work for Automake. -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 16 - -# This macro actually does too much. Some checks are only needed if -# your package does certain things. But this isn't really a big deal. - -# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) -# AM_INIT_AUTOMAKE([OPTIONS]) -# ----------------------------------------------- -# The call with PACKAGE and VERSION arguments is the old style -# call (pre autoconf-2.50), which is being phased out. PACKAGE -# and VERSION should now be passed to AC_INIT and removed from -# the call to AM_INIT_AUTOMAKE. -# We support both call styles for the transition. After -# the next Automake release, Autoconf can make the AC_INIT -# arguments mandatory, and then we can depend on a new Autoconf -# release and drop the old call support. -AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.62])dnl -dnl Autoconf wants to disallow AM_ names. We explicitly allow -dnl the ones we care about. -m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl -AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl -AC_REQUIRE([AC_PROG_INSTALL])dnl -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi -AC_SUBST([CYGPATH_W]) - -# Define the identity of the package. -dnl Distinguish between old-style and new-style calls. -m4_ifval([$2], -[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl - AC_SUBST([PACKAGE], [$1])dnl - AC_SUBST([VERSION], [$2])], -[_AM_SET_OPTIONS([$1])dnl -dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. -m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, - [m4_fatal([AC_INIT should be called with package and version arguments])])dnl - AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl - AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl - -_AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) - AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl - -# Some tools Automake needs. -AC_REQUIRE([AM_SANITY_CHECK])dnl -AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) -AM_MISSING_PROG(AUTOCONF, autoconf) -AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) -AM_MISSING_PROG(AUTOHEADER, autoheader) -AM_MISSING_PROG(MAKEINFO, makeinfo) -AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AM_PROG_MKDIR_P])dnl -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([AC_PROG_MAKE_SET])dnl -AC_REQUIRE([AM_SET_LEADING_DOT])dnl -_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) -_AM_IF_OPTION([no-dependencies],, -[AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES(OBJC)], - [define([AC_PROG_OBJC], - defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl -]) -_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl -dnl The `parallel-tests' driver may need to know about EXEEXT, so add the -dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro -dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. -AC_CONFIG_COMMANDS_PRE(dnl -[m4_provide_if([_AM_COMPILER_EXEEXT], - [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl -]) - -dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not -dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further -dnl mangled by Autoconf and run in a shell conditional statement. -m4_define([_AC_COMPILER_EXEEXT], -m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) - - -# When config.status generates a header, we must update the stamp-h file. -# This file resides in the same directory as the config header -# that is generated. The stamp files are numbered to have different names. - -# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the -# loop where config.status creates the headers, so we can generate -# our stamp files there. -AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], -[# Compute $1's index in $config_headers. -_am_arg=$1 -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) - -# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_SH -# ------------------ -# Define $install_sh. -AC_DEFUN([AM_PROG_INSTALL_SH], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi -AC_SUBST(install_sh)]) - -# Copyright (C) 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# Check whether the underlying file-system supports filenames -# with a leading dot. For instance MS-DOS doesn't. -AC_DEFUN([AM_SET_LEADING_DOT], -[rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null -AC_SUBST([am__leading_dot])]) - -# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- -# From Jim Meyering - -# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 5 - -# AM_MAINTAINER_MODE([DEFAULT-MODE]) -# ---------------------------------- -# Control maintainer-specific portions of Makefiles. -# Default is to disable them, unless `enable' is passed literally. -# For symmetry, `disable' may be passed as well. Anyway, the user -# can override the default with the --enable/--disable switch. -AC_DEFUN([AM_MAINTAINER_MODE], -[m4_case(m4_default([$1], [disable]), - [enable], [m4_define([am_maintainer_other], [disable])], - [disable], [m4_define([am_maintainer_other], [enable])], - [m4_define([am_maintainer_other], [enable]) - m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) -AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles]) - dnl maintainer-mode's default is 'disable' unless 'enable' is passed - AC_ARG_ENABLE([maintainer-mode], -[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful - (and sometimes confusing) to the casual installer], - [USE_MAINTAINER_MODE=$enableval], - [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) - AC_MSG_RESULT([$USE_MAINTAINER_MODE]) - AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) - MAINT=$MAINTAINER_MODE_TRUE - AC_SUBST([MAINT])dnl -] -) - -AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) - -# Check to see how 'make' treats includes. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 4 - -# AM_MAKE_INCLUDE() -# ----------------- -# Check to see how make treats includes. -AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) - -# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 6 - -# AM_PROG_CC_C_O -# -------------- -# Like AC_PROG_CC_C_O, but changed for automake. -AC_DEFUN([AM_PROG_CC_C_O], -[AC_REQUIRE([AC_PROG_CC_C_O])dnl -AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([compile])dnl -# FIXME: we rely on the cache variable name because -# there is no other way. -set dummy $CC -am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` -eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o -if test "$am_t" != yes; then - # Losing compiler, so override with the script. - # FIXME: It is wrong to rewrite CC. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__CC in this case, - # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" - CC="$am_aux_dir/compile $CC" -fi -dnl Make sure AC_PROG_CC is never called again, or it will override our -dnl setting of CC. -m4_define([AC_PROG_CC], - [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) -]) - -# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- - -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 6 - -# AM_MISSING_PROG(NAME, PROGRAM) -# ------------------------------ -AC_DEFUN([AM_MISSING_PROG], -[AC_REQUIRE([AM_MISSING_HAS_RUN]) -$1=${$1-"${am_missing_run}$2"} -AC_SUBST($1)]) - - -# AM_MISSING_HAS_RUN -# ------------------ -# Define MISSING if not defined so far and test if it supports --run. -# If it does, set am_missing_run to use it, otherwise, to nothing. -AC_DEFUN([AM_MISSING_HAS_RUN], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([missing])dnl -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - AC_MSG_WARN([`missing' script is too old or missing]) -fi -]) - -# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_MKDIR_P -# --------------- -# Check for `mkdir -p'. -AC_DEFUN([AM_PROG_MKDIR_P], -[AC_PREREQ([2.60])dnl -AC_REQUIRE([AC_PROG_MKDIR_P])dnl -dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, -dnl while keeping a definition of mkdir_p for backward compatibility. -dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. -dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of -dnl Makefile.ins that do not define MKDIR_P, so we do our own -dnl adjustment using top_builddir (which is defined more often than -dnl MKDIR_P). -AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl -case $mkdir_p in - [[\\/$]]* | ?:[[\\/]]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac -]) - -# Helper functions for option handling. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 4 - -# _AM_MANGLE_OPTION(NAME) -# ----------------------- -AC_DEFUN([_AM_MANGLE_OPTION], -[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) - -# _AM_SET_OPTION(NAME) -# ------------------------------ -# Set option NAME. Presently that only means defining a flag for this option. -AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) - -# _AM_SET_OPTIONS(OPTIONS) -# ---------------------------------- -# OPTIONS is a space-separated list of Automake options. -AC_DEFUN([_AM_SET_OPTIONS], -[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) - -# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -# ------------------------------------------- -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -AC_DEFUN([_AM_IF_OPTION], -[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) - -# Check to make sure that the build environment is sane. -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 5 - -# AM_SANITY_CHECK -# --------------- -AC_DEFUN([AM_SANITY_CHECK], -[AC_MSG_CHECKING([whether build environment is sane]) -# Just in case -sleep 1 -echo timestamp > conftest.file -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[[\\\"\#\$\&\'\`$am_lf]]*) - AC_MSG_ERROR([unsafe absolute working directory name]);; -esac -case $srcdir in - *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) - AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; -esac - -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken -alias in your environment]) - fi - - test "$[2]" = conftest.file - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -AC_MSG_RESULT(yes)]) - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_STRIP -# --------------------- -# One issue with vendor `install' (even GNU) is that you can't -# specify the program used to strip binaries. This is especially -# annoying in cross-compiling environments, where the build's strip -# is unlikely to handle the host's binaries. -# Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in `make install-strip', and initialize -# STRIPPROG with the value of the STRIP variable (set by the user). -AC_DEFUN([AM_PROG_INSTALL_STRIP], -[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be `maybe'. -if test "$cross_compiling" != no; then - AC_CHECK_TOOL([STRIP], [strip], :) -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -AC_SUBST([INSTALL_STRIP_PROGRAM])]) - -# Copyright (C) 2006, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# _AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. -# This macro is traced by Automake. -AC_DEFUN([_AM_SUBST_NOTMAKE]) - -# AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Public sister of _AM_SUBST_NOTMAKE. -AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) - -# Check how to create a tarball. -*- Autoconf -*- - -# Copyright (C) 2004, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# _AM_PROG_TAR(FORMAT) -# -------------------- -# Check how to create a tarball in format FORMAT. -# FORMAT should be one of `v7', `ustar', or `pax'. -# -# Substitute a variable $(am__tar) that is a command -# writing to stdout a FORMAT-tarball containing the directory -# $tardir. -# tardir=directory && $(am__tar) > result.tar -# -# Substitute a variable $(am__untar) that extract such -# a tarball read from stdin. -# $(am__untar) < result.tar -AC_DEFUN([_AM_PROG_TAR], -[# Always define AMTAR for backward compatibility. -AM_MISSING_PROG([AMTAR], [tar]) -m4_if([$1], [v7], - [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], - [m4_case([$1], [ustar],, [pax],, - [m4_fatal([Unknown tar format])]) -AC_MSG_CHECKING([how to create a $1 tar archive]) -# Loop over all known methods to create a tar archive until one works. -_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' -_am_tools=${am_cv_prog_tar_$1-$_am_tools} -# Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of `-'. -for _am_tool in $_am_tools -do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; - do - AM_RUN_LOG([$_am_tar --version]) && break - done - am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x $1 -w "$$tardir"' - am__tar_='pax -L -x $1 -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H $1 -L' - am__tar_='find "$tardir" -print | cpio -o -H $1 -L' - am__untar='cpio -i -H $1 -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac - - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_$1}" && break - - # tar/untar a dummy directory, and stop if the command works - rm -rf conftest.dir - mkdir conftest.dir - echo GrepMe > conftest.dir/file - AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) - rm -rf conftest.dir - if test -s conftest.tar; then - AM_RUN_LOG([$am__untar /dev/null 2>&1 && break - fi -done -rm -rf conftest.dir - -AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) -AC_MSG_RESULT([$am_cv_prog_tar_$1])]) -AC_SUBST([am__tar]) -AC_SUBST([am__untar]) -]) # _AM_PROG_TAR - -m4_include([m4/ax_cc_maxopt.m4]) -m4_include([m4/ax_cflags_warn_all.m4]) -m4_include([m4/ax_check_compiler_flags.m4]) -m4_include([m4/ax_compiler_vendor.m4]) -m4_include([m4/ax_configure_args.m4]) -m4_include([m4/ax_enable_builddir.m4]) -m4_include([m4/ax_gcc_archflag.m4]) -m4_include([m4/ax_gcc_x86_cpuid.m4]) -m4_include([m4/libtool.m4]) -m4_include([m4/ltoptions.m4]) -m4_include([m4/ltsugar.m4]) -m4_include([m4/ltversion.m4]) -m4_include([m4/lt~obsolete.m4]) -m4_include([acinclude.m4]) diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/build-ios.sh b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/build-ios.sh deleted file mode 100755 index 3dea242..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/build-ios.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/sh - -PLATFORM_IOS=/Developer/Platforms/iPhoneOS.platform/ -PLATFORM_IOS_SIM=/Developer/Platforms/iPhoneSimulator.platform/ -SDK_IOS_VERSION="4.2" -MIN_IOS_VERSION="3.0" -OUTPUT_DIR="universal-ios" - -build_target () { - local platform=$1 - local sdk=$2 - local arch=$3 - local triple=$4 - local builddir=$5 - - mkdir -p "${builddir}" - pushd "${builddir}" - export CC="${platform}"/Developer/usr/bin/gcc-4.2 - export CFLAGS="-arch ${arch} -isysroot ${sdk} -miphoneos-version-min=${MIN_IOS_VERSION}" - ../configure --host=${triple} && make - popd -} - -# Build all targets -build_target "${PLATFORM_IOS}" "${PLATFORM_IOS}/Developer/SDKs/iPhoneOS${SDK_IOS_VERSION}.sdk/" armv6 arm-apple-darwin10 armv6-ios -build_target "${PLATFORM_IOS}" "${PLATFORM_IOS}/Developer/SDKs/iPhoneOS${SDK_IOS_VERSION}.sdk/" armv7 arm-apple-darwin10 armv7-ios -build_target "${PLATFORM_IOS_SIM}" "${PLATFORM_IOS_SIM}/Developer/SDKs/iPhoneSimulator${SDK_IOS_VERSION}.sdk/" i386 i386-apple-darwin10 i386-ios-sim - -# Create universal output directories -mkdir -p "${OUTPUT_DIR}" -mkdir -p "${OUTPUT_DIR}/include" -mkdir -p "${OUTPUT_DIR}/include/armv6" -mkdir -p "${OUTPUT_DIR}/include/armv7" -mkdir -p "${OUTPUT_DIR}/include/i386" - -# Create the universal binary -lipo -create armv6-ios/.libs/libffi.a armv7-ios/.libs/libffi.a i386-ios-sim/.libs/libffi.a -output "${OUTPUT_DIR}/libffi.a" - -# Copy in the headers -copy_headers () { - local src=$1 - local dest=$2 - - # Fix non-relative header reference - sed 's//"ffitarget.h"/' < "${src}/include/ffi.h" > "${dest}/ffi.h" - cp "${src}/include/ffitarget.h" "${dest}" -} - -copy_headers armv6-ios "${OUTPUT_DIR}/include/armv6" -copy_headers armv7-ios "${OUTPUT_DIR}/include/armv7" -copy_headers i386-ios-sim "${OUTPUT_DIR}/include/i386" - -# Create top-level header -( -cat << EOF -#ifdef __arm__ - #include - #ifdef _ARM_ARCH_6 - #include "include/armv6/ffi.h" - #elif _ARM_ARCH_7 - #include "include/armv7/ffi.h" - #endif -#elif defined(__i386__) - #include "include/i386/ffi.h" -#endif -EOF -) > "${OUTPUT_DIR}/ffi.h" diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/compile b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/compile deleted file mode 100755 index c0096a7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/compile +++ /dev/null @@ -1,143 +0,0 @@ -#! /bin/sh -# Wrapper for compilers which do not understand `-c -o'. - -scriptversion=2009-10-06.20; # UTC - -# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009 Free Software -# Foundation, Inc. -# Written by Tom Tromey . -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# This file is maintained in Automake, please report -# bugs to or send patches to -# . - -case $1 in - '') - echo "$0: No command. Try \`$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: compile [--help] [--version] PROGRAM [ARGS] - -Wrapper for compilers which do not understand `-c -o'. -Remove `-o dest.o' from ARGS, run PROGRAM with the remaining -arguments, and rename the output as expected. - -If you are trying to build a whole package this is not the -right script to run: please start by reading the file `INSTALL'. - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "compile $scriptversion" - exit $? - ;; -esac - -ofile= -cfile= -eat= - -for arg -do - if test -n "$eat"; then - eat= - else - case $1 in - -o) - # configure might choose to run compile as `compile cc -o foo foo.c'. - # So we strip `-o arg' only if arg is an object. - eat=1 - case $2 in - *.o | *.obj) - ofile=$2 - ;; - *) - set x "$@" -o "$2" - shift - ;; - esac - ;; - *.c) - cfile=$1 - set x "$@" "$1" - shift - ;; - *) - set x "$@" "$1" - shift - ;; - esac - fi - shift -done - -if test -z "$ofile" || test -z "$cfile"; then - # If no `-o' option was seen then we might have been invoked from a - # pattern rule where we don't need one. That is ok -- this is a - # normal compilation that the losing compiler can handle. If no - # `.c' file was seen then we are probably linking. That is also - # ok. - exec "$@" -fi - -# Name of file we expect compiler to create. -cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` - -# Create the lock directory. -# Note: use `[/\\:.-]' here to ensure that we don't use the same name -# that we are using for the .o file. Also, base the name on the expected -# object file name, since that is what matters with a parallel build. -lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d -while true; do - if mkdir "$lockdir" >/dev/null 2>&1; then - break - fi - sleep 1 -done -# FIXME: race condition here if user kills between mkdir and trap. -trap "rmdir '$lockdir'; exit 1" 1 2 15 - -# Run the compile. -"$@" -ret=$? - -if test -f "$cofile"; then - test "$cofile" = "$ofile" || mv "$cofile" "$ofile" -elif test -f "${cofile}bj"; then - test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" -fi - -rmdir "$lockdir" -exit $ret - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/config.guess b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/config.guess deleted file mode 100755 index dc84c68..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/config.guess +++ /dev/null @@ -1,1501 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 -# Free Software Foundation, Inc. - -timestamp='2009-11-20' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner. Please send patches (context -# diff format) to and include a ChangeLog -# entry. -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ELF__ - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux${UNAME_RELEASE} - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build - SUN_ARCH="i386" - # If there is a compiler, see if it is configured for 64-bit objects. - # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. - # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - SUN_ARCH="x86_64" - fi - fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[456]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep -q __LP64__ - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - case ${UNAME_MACHINE} in - pc98) - echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - *:Interix*:*) - case ${UNAME_MACHINE} in - x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; - IA64) - echo ia64-unknown-interix${UNAME_RELEASE} - exit ;; - esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit ;; - arm*:Linux:*:*) - eval $set_cc_for_build - if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_EABI__ - then - echo ${UNAME_MACHINE}-unknown-linux-gnu - else - echo ${UNAME_MACHINE}-unknown-linux-gnueabi - fi - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) - echo cris-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu - exit ;; - frv:Linux:*:*) - echo frv-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - LIBC=gnu - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} - #else - CPU= - #endif - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - or32:Linux:*:*) - echo or32-unknown-linux-gnu - exit ;; - padre:Linux:*:*) - echo sparc-unknown-linux-gnu - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu - exit ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i586. - # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that - # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - NCR*:*:4.2:* | MPRAS*:*:4.2:*) - OS_REL='.3' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - case $UNAME_PROCESSOR in - i386) - eval $set_cc_for_build - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - UNAME_PROCESSOR="x86_64" - fi - fi ;; - unknown) UNAME_PROCESSOR=powerpc ;; - esac - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NSE-?:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; - i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; - i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros - exit ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/config.sub b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/config.sub deleted file mode 100755 index 2a55a50..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/config.sub +++ /dev/null @@ -1,1705 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 -# Free Software Foundation, Inc. - -timestamp='2009-11-20' - -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Please send patches to . Submit a context -# diff and a properly formatted GNU ChangeLog entry. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.sub ($timestamp) - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit ;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ - uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze) - os= - basic_machine=$1 - ;; - -bluegene*) - os=-cnk - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ - | bfin \ - | c4x | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | fido | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nios | nios2 \ - | ns16k | ns32k \ - | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ - | pyramid \ - | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu | strongarm \ - | tahoe | thumb | tic4x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e \ - | we32k \ - | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12 | picochip) - # Motorola 68HC11/12. - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - ms1) - basic_machine=mt-unknown - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ - | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nios-* | nios2-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ - | pyramid-* \ - | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ - | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze) - basic_machine=microblaze-xilinx - ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc) basic_machine=powerpc-unknown - ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sde) - basic_machine=mipsisa32-sde - os=-elf - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh5el) - basic_machine=sh5le-unknown - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tic54x | c54x*) - basic_machine=tic54x-unknown - os=-coff - ;; - tic55x | c55x*) - basic_machine=tic55x-unknown - os=-coff - ;; - tic6x | c6x*) - basic_machine=tic6x-unknown - os=-coff - ;; - tile*) - basic_machine=tile-unknown - os=-linux-gnu - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - z80-*-coff) - basic_machine=z80-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -auroraux) - os=-auroraux - ;; - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ - | -sym* | -kopensolaris* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -openbsd* | -solidbsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* \ - | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -aros*) - os=-aros - ;; - -kaos*) - os=-kaos - ;; - -zvmoe) - os=-zvmoe - ;; - -dicos*) - os=-dicos - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - score-*) - os=-elf - ;; - spu-*) - os=-elf - ;; - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 - ;; - m68*-cisco) - os=-aout - ;; - mep-*) - os=-elf - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-haiku) - os=-haiku - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -cnk*|-aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/configure b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/configure deleted file mode 100755 index 231c83a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/configure +++ /dev/null @@ -1,17191 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.68 for libffi 3.0.10. -# -# Report bugs to . -# -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software -# Foundation, Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 - - test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( - ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO - ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO - PATH=/empty FPATH=/empty; export PATH FPATH - test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ - || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - # Preserve -v and -x to the replacement shell. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; - esac - exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: http://sourceware.org/libffi.html about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - -SHELL=${CONFIG_SHELL-/bin/sh} - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME='libffi' -PACKAGE_TARNAME='libffi' -PACKAGE_VERSION='3.0.10' -PACKAGE_STRING='libffi 3.0.10' -PACKAGE_BUGREPORT='http://sourceware.org/libffi.html' -PACKAGE_URL='' - -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='am__EXEEXT_FALSE -am__EXEEXT_TRUE -LTLIBOBJS -LIBOBJS -toolexeclibdir -toolexecdir -FFI_DEBUG_FALSE -FFI_DEBUG_TRUE -TARGETDIR -TARGET -FFI_EXEC_TRAMPOLINE_TABLE -FFI_EXEC_TRAMPOLINE_TABLE_FALSE -FFI_EXEC_TRAMPOLINE_TABLE_TRUE -sys_symbol_underscore -HAVE_LONG_DOUBLE -ALLOCA -PA64_HPUX_FALSE -PA64_HPUX_TRUE -PA_HPUX_FALSE -PA_HPUX_TRUE -PA_LINUX_FALSE -PA_LINUX_TRUE -SH64_FALSE -SH64_TRUE -SH_FALSE -SH_TRUE -X86_64_FALSE -X86_64_TRUE -S390_FALSE -S390_TRUE -FRV_FALSE -FRV_TRUE -LIBFFI_CRIS_FALSE -LIBFFI_CRIS_TRUE -AVR32_FALSE -AVR32_TRUE -ARM_FALSE -ARM_TRUE -POWERPC_FREEBSD_FALSE -POWERPC_FREEBSD_TRUE -POWERPC_DARWIN_FALSE -POWERPC_DARWIN_TRUE -POWERPC_AIX_FALSE -POWERPC_AIX_TRUE -POWERPC_FALSE -POWERPC_TRUE -MOXIE_FALSE -MOXIE_TRUE -M68K_FALSE -M68K_TRUE -M32R_FALSE -M32R_TRUE -IA64_FALSE -IA64_TRUE -ALPHA_FALSE -ALPHA_TRUE -X86_DARWIN_FALSE -X86_DARWIN_TRUE -X86_WIN64_FALSE -X86_WIN64_TRUE -X86_WIN32_FALSE -X86_WIN32_TRUE -X86_FREEBSD_FALSE -X86_FREEBSD_TRUE -X86_FALSE -X86_TRUE -SPARC_FALSE -SPARC_TRUE -MIPS_FALSE -MIPS_TRUE -AM_LTLDFLAGS -AM_RUNTESTFLAGS -TESTSUBDIR_FALSE -TESTSUBDIR_TRUE -MAINT -MAINTAINER_MODE_FALSE -MAINTAINER_MODE_TRUE -PRTDIAG -CPP -OTOOL64 -OTOOL -LIPO -NMEDIT -DSYMUTIL -MANIFEST_TOOL -RANLIB -ac_ct_AR -AR -DLLTOOL -OBJDUMP -LN_S -NM -ac_ct_DUMPBIN -DUMPBIN -LD -FGREP -EGREP -GREP -SED -LIBTOOL -am__fastdepCCAS_FALSE -am__fastdepCCAS_TRUE -CCASDEPMODE -CCASFLAGS -CCAS -am__fastdepCC_FALSE -am__fastdepCC_TRUE -CCDEPMODE -AMDEPBACKSLASH -AMDEP_FALSE -AMDEP_TRUE -am__quote -am__include -DEPDIR -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -am__untar -am__tar -AMTAR -am__leading_dot -SET_MAKE -AWK -mkdir_p -MKDIR_P -INSTALL_STRIP_PROGRAM -STRIP -install_sh -MAKEINFO -AUTOHEADER -AUTOMAKE -AUTOCONF -ACLOCAL -VERSION -PACKAGE -CYGPATH_W -am__isrc -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -ax_enable_builddir_sed -target_os -target_vendor -target_cpu -target -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_builddir -enable_dependency_tracking -enable_shared -enable_static -with_pic -enable_fast_install -with_gnu_ld -with_sysroot -enable_libtool_lock -enable_portable_binary -with_gcc_arch -enable_maintainer_mode -enable_debug -enable_structs -enable_raw_api -enable_purify_safety -' - ac_precious_vars='build_alias -host_alias -target_alias -CCAS -CCASFLAGS -CPP -CPPFLAGS' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *=) ac_optarg= ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error $? "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used" >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error $? "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error $? "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures libffi 3.0.10 to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/libffi] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] - --target=TARGET configure for building compilers for TARGET [HOST] -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of libffi 3.0.10:";; - esac - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --disable-builddir disable automatic build in subdir of sources - - --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors - --enable-shared[=PKGS] build shared libraries [default=yes] - --enable-static[=PKGS] build static libraries [default=yes] - --enable-fast-install[=PKGS] - optimize for fast installation [default=yes] - --disable-libtool-lock avoid locking (might break parallel builds) - --enable-portable-binary - disable compiler optimizations that would produce - unportable binaries - --enable-maintainer-mode enable make rules and dependencies not useful - (and sometimes confusing) to the casual installer - --enable-debug debugging mode - --disable-structs omit code for struct support - --disable-raw-api make the raw api unavailable - --enable-purify-safety purify-safe mode - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-pic try to use only PIC/non-PIC objects [default=use - both] - --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-sysroot=DIR Search for dependent libraries within DIR - (or the compiler's sysroot if not specified). - --with-gcc-arch= use architecture for gcc -march/-mtune, - instead of guessing - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CCAS assembler compiler command (defaults to CC) - CCASFLAGS assembler compiler flags (defaults to CFLAGS) - CPP C preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to . -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -libffi configure 3.0.10 -generated by GNU Autoconf 2.68 - -Copyright (C) 2010 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_compile - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_func - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ------------------------------------------------ ## -## Report this to http://sourceware.org/libffi.html ## -## ------------------------------------------------ ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_mongrel - -# ac_fn_c_check_type LINENO TYPE VAR INCLUDES -# ------------------------------------------- -# Tests whether TYPE exists after having included INCLUDES, setting cache -# variable VAR accordingly. -ac_fn_c_check_type () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - eval "$3=yes" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_type - -# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES -# -------------------------------------------- -# Tries to find the compile-time value of EXPR in a program that includes -# INCLUDES, setting VAR accordingly. Returns whether the value could be -# computed -ac_fn_c_compute_int () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_lo=0 ac_mid=0 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=$ac_mid; break -else - as_fn_arith $ac_mid + 1 && ac_lo=$as_val - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=-1 ac_mid=-1 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_lo=$ac_mid; break -else - as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - ac_lo= ac_hi= -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=$ac_mid -else - as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in #(( -?*) eval "$3=\$ac_lo"; ac_retval=0 ;; -'') ac_retval=1 ;; -esac - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -static long int longval () { return $2; } -static unsigned long int ulongval () { return $2; } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (($2) < 0) - { - long int i = longval (); - if (i != ($2)) - return 1; - fprintf (f, "%ld", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ($2)) - return 1; - fprintf (f, "%lu", i); - } - /* Do not output a trailing newline, as this causes \r\n confusion - on some platforms. */ - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - echo >>conftest.val; read $3 config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by libffi $as_me 3.0.10, which was -generated by GNU Autoconf 2.68. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - $as_echo "## ---------------- ## -## Cache variables. ## -## ---------------- ##" - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - $as_echo "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - $as_echo "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -ac_config_headers="$ac_config_headers fficonfig.h" - - -ac_aux_dir= -for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 -$as_echo_n "checking target system type... " >&6; } -if ${ac_cv_target+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$target_alias" = x; then - ac_cv_target=$ac_cv_host -else - ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 -$as_echo "$ac_cv_target" >&6; } -case $ac_cv_target in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; -esac -target=$ac_cv_target -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_target -shift -target_cpu=$1 -target_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -target_os=$* -IFS=$ac_save_IFS -case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac - - -# The aliases save the names the user supplied, while $host etc. -# will get canonicalized. -test -n "$target_alias" && - test "$program_prefix$program_suffix$program_transform_name" = \ - NONENONEs,x,x, && - program_prefix=${target_alias}- - -target_alias=${target_alias-$host_alias} - -. ${srcdir}/configure.host - - - # [$]@ is unsable in 2.60+ but earlier autoconf had no ac_configure_args - if test "${ac_configure_args+set}" != "set" ; then - ac_configure_args= - for ac_arg in ${1+"$@"}; do - ac_configure_args="$ac_configure_args '$ac_arg'" - done - fi - -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` - - -ax_enable_builddir="." -# Check whether --enable-builddir was given. -if test "${enable_builddir+set}" = set; then : - enableval=$enable_builddir; ax_enable_builddir="$enableval" -else - ax_enable_builddir="auto" -fi - -if test ".$ac_srcdir_defaulted" != ".no" ; then -if test ".$srcdir" = ".." ; then - if test -f config.status ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: toplevel srcdir already configured... skipping subdir build" >&5 -$as_echo "$as_me: toplevel srcdir already configured... skipping subdir build" >&6;} - else - test ".$ax_enable_builddir" = "." && ax_enable_builddir="." - test ".$ax_enable_builddir" = ".no" && ax_enable_builddir="." - test ".$TARGET" = "." && TARGET="$target" - test ".$ax_enable_builddir" = ".auto" && ax_enable_builddir="$TARGET" - if test ".$ax_enable_builddir" != ".." ; then # we know where to go and - as_dir=$ax_enable_builddir; as_fn_mkdir_p - echo __.$ax_enable_builddir.__ > $ax_enable_builddir/conftest.tmp - cd $ax_enable_builddir - if grep __.$ax_enable_builddir.__ conftest.tmp >/dev/null 2>/dev/null ; then - rm conftest.tmp - { $as_echo "$as_me:${as_lineno-$LINENO}: result: continue configure in default builddir \"./$ax_enable_builddir\"" >&5 -$as_echo "continue configure in default builddir \"./$ax_enable_builddir\"" >&6; } - else - as_fn_error $? "could not change to default builddir \"./$ax_enable_builddir\"" "$LINENO" 5 - fi - srcdir=`echo "$ax_enable_builddir" | - sed -e 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g;s,[/]$,,;'` - # going to restart from subdirectory location - test -f $srcdir/config.log && mv $srcdir/config.log . - test -f $srcdir/confdefs.h && mv $srcdir/confdefs.h . - test -f $srcdir/conftest.log && mv $srcdir/conftest.log . - test -f $srcdir/$cache_file && mv $srcdir/$cache_file . - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ....exec $SHELL $srcdir/$0 \"--srcdir=$srcdir\" \"--enable-builddir=$ax_enable_builddir\" ${1+\"$@\"}" >&5 -$as_echo "....exec $SHELL $srcdir/$0 \"--srcdir=$srcdir\" \"--enable-builddir=$ax_enable_builddir\" ${1+\"$@\"}" >&6; } - case "$0" in # restart - /\\*) eval $SHELL "'$0'" "'--srcdir=$srcdir'" "'--enable-builddir=$ax_enable_builddir'" $ac_configure_args ;; - *) eval $SHELL "'$srcdir/$0'" "'--srcdir=$srcdir'" "'--enable-builddir=$ax_enable_builddir'" $ac_configure_args ;; - esac ; exit $? - fi - fi -fi fi -test ".$ax_enable_builddir" = ".auto" && ax_enable_builddir="." -# Extract the first word of "gsed sed", so it can be a program name with args. -set dummy gsed sed; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ax_enable_builddir_sed+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $ax_enable_builddir_sed in - [\\/]* | ?:[\\/]*) - ac_cv_path_ax_enable_builddir_sed="$ax_enable_builddir_sed" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_ax_enable_builddir_sed="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_ax_enable_builddir_sed" && ac_cv_path_ax_enable_builddir_sed="sed" - ;; -esac -fi -ax_enable_builddir_sed=$ac_cv_path_ax_enable_builddir_sed -if test -n "$ax_enable_builddir_sed"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_enable_builddir_sed" >&5 -$as_echo "$ax_enable_builddir_sed" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -ax_enable_builddir_auxdir="$am_aux_dir" -ac_config_commands="$ac_config_commands buildir" - - -am__api_version='1.11' - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 -$as_echo_n "checking whether build environment is sane... " >&6; } -# Just in case -sleep 1 -echo timestamp > conftest.file -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[\\\"\#\$\&\'\`$am_lf]*) - as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; -esac -case $srcdir in - *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; -esac - -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error $? "ls -t appears to fail. Make sure there is not a broken -alias in your environment" "$LINENO" 5 - fi - - test "$2" = conftest.file - ) -then - # Ok. - : -else - as_fn_error $? "newly created file is older than distributed files! -Check your system clock" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. -# By default was `s,x,x', remove it if useless. -ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` - -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} -fi - -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi - -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } -if test -z "$MKDIR_P"; then - if ${ac_cv_path_mkdir+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do - for ac_exec_ext in '' $ac_executable_extensions; do - { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ - 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext - break 3;; - esac - done - done - done -IFS=$as_save_IFS - -fi - - test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then - MKDIR_P="$ac_cv_path_mkdir -p" - else - # As a last resort, use the slow shell script. Don't cache a - # value for MKDIR_P within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - MKDIR_P="$ac_install_sh -d" - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$MKDIR_P" >&6; } - -mkdir_p="$MKDIR_P" -case $mkdir_p in - [\\/$]* | ?:[\\/]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac - -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AWK" && break -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - am__isrc=' -I$(srcdir)' - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi - - -# Define the identity of the package. - PACKAGE='libffi' - VERSION='3.0.10' - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE "$PACKAGE" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define VERSION "$VERSION" -_ACEOF - -# Some tools Automake needs. - -ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} - - -AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} - - -AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} - - -AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} - - -MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -# Always define AMTAR for backward compatibility. - -AMTAR=${AMTAR-"${am_missing_run}tar"} - -am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' - - - - - - -# The same as in boehm-gc and libstdc++. Have to borrow it from there. -# We must force CC to /not/ be precious variables; otherwise -# the wrong, non-multilib-adjusted value will be used in multilibs. -# As a side effect, we have to subst CFLAGS ourselves. -# Also save and restore CFLAGS, since AC_PROG_CC will come up with -# defaults of its own if none are provided. - - - -save_CFLAGS=$CFLAGS -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -DEPDIR="${am__leading_dot}deps" - -ac_config_commands="$ac_config_commands depfiles" - - -am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf - -# Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : - enableval=$enable_dependency_tracking; -fi - -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi - if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' -else - AMDEP_TRUE='#' - AMDEP_FALSE= -fi - - - -depcc="$CC" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CC_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - -CFLAGS=$save_CFLAGS - - - - - -# By default we simply use the C compiler to build assembly code. - -test "${CCAS+set}" = set || CCAS=$CC -test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS - - - -depcc="$CCAS" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CCAS_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CCAS_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CCAS_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CCAS_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; } -CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then - am__fastdepCCAS_TRUE= - am__fastdepCCAS_FALSE='#' -else - am__fastdepCCAS_TRUE='#' - am__fastdepCCAS_FALSE= -fi - - -if test "x$CC" != xcc; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 -$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 -$as_echo_n "checking whether cc understands -c and -o together... " >&6; } -fi -set dummy $CC; ac_cc=`$as_echo "$2" | - sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` -if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -# Make sure it works both with $CC and with simple cc. -# We do the test twice because some compilers refuse to overwrite an -# existing .o file with -o, though they will create one. -ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' -rm -f conftest2.* -if { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && - test -f conftest2.$ac_objext && { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; -then - eval ac_cv_prog_cc_${ac_cc}_c_o=yes - if test "x$CC" != xcc; then - # Test first that cc exists at all. - if { ac_try='cc -c conftest.$ac_ext >&5' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' - rm -f conftest2.* - if { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && - test -f conftest2.$ac_objext && { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; - then - # cc works too. - : - else - # cc exists but doesn't like -o. - eval ac_cv_prog_cc_${ac_cc}_c_o=no - fi - fi - fi -else - eval ac_cv_prog_cc_${ac_cc}_c_o=no -fi -rm -f core conftest* - -fi -if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h - -fi - -# FIXME: we rely on the cache variable name because -# there is no other way. -set dummy $CC -am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` -eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o -if test "$am_t" != yes; then - # Losing compiler, so override with the script. - # FIXME: It is wrong to rewrite CC. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__CC in this case, - # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" - CC="$am_aux_dir/compile $CC" -fi - - -case `pwd` in - *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; -esac - - - -macro_version='2.4' -macro_revision='1.3293' - - - - - - - - - - - - - -ltmain="$ac_aux_dir/ltmain.sh" - -# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 -$as_echo_n "checking how to print strings... " >&6; } -# Test print first, because it will be a builtin if present. -if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' -else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' -fi - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "" -} - -case "$ECHO" in - printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 -$as_echo "printf" >&6; } ;; - print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 -$as_echo "print -r" >&6; } ;; - *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 -$as_echo "cat" >&6; } ;; -esac - - - - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if ${ac_cv_path_FGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_FGREP=$FGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" - - -test -z "$GREP" && GREP=grep - - - - - - - - - - - - - - - - - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if ${lt_cv_path_NM+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - if test -n "$ac_tool_prefix"; then - for ac_prog in dumpbin "link -dump" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$DUMPBIN" && break - done -fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in dumpbin "link -dump" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DUMPBIN=$ac_ct_DUMPBIN - fi -fi - - case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols" - ;; - *) - DUMPBIN=: - ;; - esac - fi - - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if ${lt_cv_nm_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi - -# find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if ${lt_cv_sys_max_cmd_len+:} false; then : - $as_echo_n "(cached) " >&6 -else - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac - -fi - -if test -n $lt_cv_sys_max_cmd_len ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } -fi -max_cmd_len=$lt_cv_sys_max_cmd_len - - - - - - -: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 -$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,b/c, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 -$as_echo "$xsi_shell" >&6; } - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 -$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } -lt_shell_append=no -( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 -$as_echo "$lt_shell_append" >&6; } - - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi - - - - - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 -$as_echo_n "checking how to convert $build file names to $host format... " >&6; } -if ${lt_cv_to_host_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 - ;; - esac - ;; - *-*-cygwin* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin - ;; - esac - ;; - * ) # unhandled hosts (and "normal" native builds) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; -esac - -fi - -to_host_file_cmd=$lt_cv_to_host_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 -$as_echo "$lt_cv_to_host_file_cmd" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 -$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } -if ${lt_cv_to_tool_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - #assume ordinary cross tools, or native build. -lt_cv_to_tool_file_cmd=func_convert_file_noop -case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 - ;; - esac - ;; -esac - -fi - -to_tool_file_cmd=$lt_cv_to_tool_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 -$as_echo "$lt_cv_to_tool_file_cmd" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if ${lt_cv_ld_reload_flag+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_reload_flag='-r' -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - if test "$GCC" != yes; then - reload_cmds=false - fi - ;; - darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJDUMP=$ac_ct_OBJDUMP - fi -else - OBJDUMP="$ac_cv_prog_OBJDUMP" -fi - -test -z "$OBJDUMP" && OBJDUMP=objdump - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if ${lt_cv_deplibs_check_method+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. - if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } - -file_magic_glob= -want_nocaseglob=no -if test "$build" = "$host"; then - case $host_os in - mingw* | pw32*) - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then - want_nocaseglob=yes - else - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` - fi - ;; - esac -fi - -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - - - - - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. -set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DLLTOOL"; then - ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DLLTOOL=$ac_cv_prog_DLLTOOL -if test -n "$DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -$as_echo "$DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DLLTOOL"; then - ac_ct_DLLTOOL=$DLLTOOL - # Extract the first word of "dlltool", so it can be a program name with args. -set dummy dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DLLTOOL"; then - ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DLLTOOL="dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL -if test -n "$ac_ct_DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -$as_echo "$ac_ct_DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DLLTOOL" = x; then - DLLTOOL="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DLLTOOL=$ac_ct_DLLTOOL - fi -else - DLLTOOL="$ac_cv_prog_DLLTOOL" -fi - -test -z "$DLLTOOL" && DLLTOOL=dlltool - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 -$as_echo_n "checking how to associate runtime and link libraries... " >&6; } -if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_sharedlib_from_linklib_cmd='unknown' - -case $host_os in -cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh - # decide which to use based on capabilities of $DLLTOOL - case `$DLLTOOL --help 2>&1` in - *--identify-strict*) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib - ;; - *) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback - ;; - esac - ;; -*) - # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd="$ECHO" - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 -$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO - - - - - - - - -if test -n "$ac_tool_prefix"; then - for ac_prog in ar - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AR="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AR" && break - done -fi -if test -z "$AR"; then - ac_ct_AR=$AR - for ac_prog in ar -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_AR="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_AR" && break -done - - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -fi - -: ${AR=ar} -: ${AR_FLAGS=cru} - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 -$as_echo_n "checking for archiver @FILE support... " >&6; } -if ${lt_cv_ar_at_file+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ar_at_file=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - echo conftest.$ac_objext > conftest.lst - lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 - (eval $lt_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -eq 0; then - # Ensure the archiver fails upon bogus file names. - rm -f conftest.$ac_objext libconftest.a - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 - (eval $lt_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -ne 0; then - lt_cv_ar_at_file=@ - fi - fi - rm -f conftest.* libconftest.a - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 -$as_echo "$lt_cv_ar_at_file" >&6; } - -if test "x$lt_cv_ar_at_file" = xno; then - archiver_list_spec= -else - archiver_list_spec=$lt_cv_ar_at_file -fi - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -test -z "$STRIP" && STRIP=: - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -test -z "$RANLIB" && RANLIB=: - - - - - - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - -case $host_os in - darwin*) - lock_old_archive_extraction=yes ;; - *) - lock_old_archive_extraction=no ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if ${lt_cv_sys_global_symbol_pipe+:} false; then : - $as_echo_n "(cached) " >&6 -else - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[ABCDGISTW]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[ABCDEGRST]' - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK '"\ -" {last_section=section; section=\$ 3};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 - (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT_DLSYM_CONST -#elif defined(__osf__) -/* This system does not cope well with relocations in const data. */ -# define LT_DLSYM_CONST -#else -# define LT_DLSYM_CONST const -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -LT_DLSYM_CONST struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_globsym_save_LIBS=$LIBS - lt_globsym_save_CFLAGS=$CFLAGS - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS=$lt_globsym_save_LIBS - CFLAGS=$lt_globsym_save_CFLAGS - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done - -fi - -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } -fi - -# Response file support. -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - nm_file_list_spec='@' -elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then - nm_file_list_spec='@' -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 -$as_echo_n "checking for sysroot... " >&6; } - -# Check whether --with-sysroot was given. -if test "${with_sysroot+set}" = set; then : - withval=$with_sysroot; -else - with_sysroot=no -fi - - -lt_sysroot= -case ${with_sysroot} in #( - yes) - if test "$GCC" = yes; then - lt_sysroot=`$CC --print-sysroot 2>/dev/null` - fi - ;; #( - /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` - ;; #( - no|'') - ;; #( - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 -$as_echo "${with_sysroot}" >&6; } - as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 - ;; -esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 -$as_echo "${lt_sysroot:-no}" >&6; } - - - - - -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : - enableval=$enable_libtool_lock; -fi - -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '#line '$LINENO' "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if ${lt_cv_cc_needs_belf+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_cc_needs_belf=yes -else - lt_cv_cc_needs_belf=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. -set dummy ${ac_tool_prefix}mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$MANIFEST_TOOL"; then - ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL -if test -n "$MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 -$as_echo "$MANIFEST_TOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_MANIFEST_TOOL"; then - ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL - # Extract the first word of "mt", so it can be a program name with args. -set dummy mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_MANIFEST_TOOL"; then - ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL -if test -n "$ac_ct_MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 -$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_MANIFEST_TOOL" = x; then - MANIFEST_TOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL - fi -else - MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" -fi - -test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 -$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } -if ${lt_cv_path_mainfest_tool+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_path_mainfest_tool=no - echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 - $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out - cat conftest.err >&5 - if $GREP 'Manifest Tool' conftest.out > /dev/null; then - lt_cv_path_mainfest_tool=yes - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 -$as_echo "$lt_cv_path_mainfest_tool" >&6; } -if test "x$lt_cv_path_mainfest_tool" != xyes; then - MANIFEST_TOOL=: -fi - - - - - - - case $host_os in - rhapsody* | darwin*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. -set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DSYMUTIL"; then - ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DSYMUTIL=$ac_cv_prog_DSYMUTIL -if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DSYMUTIL"; then - ac_ct_DSYMUTIL=$DSYMUTIL - # Extract the first word of "dsymutil", so it can be a program name with args. -set dummy dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DSYMUTIL"; then - ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL -if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DSYMUTIL" = x; then - DSYMUTIL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DSYMUTIL=$ac_ct_DSYMUTIL - fi -else - DSYMUTIL="$ac_cv_prog_DSYMUTIL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. -set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NMEDIT"; then - ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -NMEDIT=$ac_cv_prog_NMEDIT -if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_NMEDIT"; then - ac_ct_NMEDIT=$NMEDIT - # Extract the first word of "nmedit", so it can be a program name with args. -set dummy nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_NMEDIT"; then - ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_NMEDIT="nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT -if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_NMEDIT" = x; then - NMEDIT=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - NMEDIT=$ac_ct_NMEDIT - fi -else - NMEDIT="$ac_cv_prog_NMEDIT" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. -set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$LIPO"; then - ac_cv_prog_LIPO="$LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -LIPO=$ac_cv_prog_LIPO -if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_LIPO"; then - ac_ct_LIPO=$LIPO - # Extract the first word of "lipo", so it can be a program name with args. -set dummy lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_LIPO"; then - ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_LIPO="lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO -if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_LIPO" = x; then - LIPO=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - LIPO=$ac_ct_LIPO - fi -else - LIPO="$ac_cv_prog_LIPO" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL"; then - ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL=$ac_cv_prog_OTOOL -if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL"; then - ac_ct_OTOOL=$OTOOL - # Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL"; then - ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OTOOL="otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL -if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL" = x; then - OTOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL=$ac_ct_OTOOL - fi -else - OTOOL="$ac_cv_prog_OTOOL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL64"; then - ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL64=$ac_cv_prog_OTOOL64 -if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL64"; then - ac_ct_OTOOL64=$OTOOL64 - # Extract the first word of "otool64", so it can be a program name with args. -set dummy otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL64"; then - ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OTOOL64="otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 -if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL64" = x; then - OTOOL64=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL64=$ac_ct_OTOOL64 - fi -else - OTOOL64="$ac_cv_prog_OTOOL64" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if ${lt_cv_apple_cc_single_mod+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&5 - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if ${lt_cv_ld_exported_symbols_list+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_ld_exported_symbols_list=yes -else - lt_cv_ld_exported_symbols_list=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 -$as_echo_n "checking for -force_load linker flag... " >&6; } -if ${lt_cv_ld_force_load+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_force_load=no - cat > conftest.c << _LT_EOF -int forced_loaded() { return 2;} -_LT_EOF - echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 - $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 - echo "$AR cru libconftest.a conftest.o" >&5 - $AR cru libconftest.a conftest.o 2>&5 - echo "$RANLIB libconftest.a" >&5 - $RANLIB libconftest.a 2>&5 - cat > conftest.c << _LT_EOF -int main() { return 0;} -_LT_EOF - echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err - _lt_result=$? - if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then - lt_cv_ld_force_load=yes - else - cat conftest.err >&5 - fi - rm -f conftest.err libconftest.a conftest conftest.c - rm -rf conftest.dSYM - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 -$as_echo "$lt_cv_ld_force_load" >&6; } - case $host_os in - rhapsody* | darwin1.[012]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[012]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default -" -if test "x$ac_cv_header_dlfcn_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF - -fi - -done - - - - - -# Set options - - - - enable_dlopen=no - - - enable_win32_dll=no - - - # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_shared=yes -fi - - - - - - - - - - # Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : - enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_static=yes -fi - - - - - - - - - - -# Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : - withval=$with_pic; pic_mode="$withval" -else - pic_mode=default -fi - - -test -z "$pic_mode" && pic_mode=default - - - - - - - - # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : - enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_fast_install=yes -fi - - - - - - - - - - - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - - - - - - - - - - - - - - - - - - - - - - - - - - -test -z "$LN_S" && LN_S="ln -s" - - - - - - - - - - - - - - -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if ${lt_cv_objdir+:} false; then : - $as_echo_n "(cached) " >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir - - - - - -cat >>confdefs.h <<_ACEOF -#define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF - - - - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` - - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - - -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC_CMD="$ac_dir/file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - else - MAGIC_CMD=: - fi -fi - - fi - ;; -esac - -# Use C for the default configuration in the libtool script - -lt_save_CC="$CC" -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -objext=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - -lt_prog_compiler_no_builtin_flag= - -if test "$GCC" = yes; then - case $cc_basename in - nvcc*) - lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; - *) - lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" -else - : -fi - -fi - - - - - - - lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= - - - if test "$GCC" = yes; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - lt_prog_compiler_static= - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; - - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - - case $cc_basename in - nvcc*) # Cuda Compiler Driver 2.2 - lt_prog_compiler_wl='-Xlinker ' - lt_prog_compiler_pic='-Xcompiler -fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='--shared' - lt_prog_compiler_static='--static' - ;; - nagfor*) - # NAG Fortran compiler - lt_prog_compiler_wl='-Wl,-Wl,,' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - xl* | bgxl* | bgf* | mpixl*) - # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-qpic' - lt_prog_compiler_static='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ F* | *Sun*Fortran*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='' - ;; - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Wl,' - ;; - esac - ;; - esac - ;; - - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; - - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared=no - ;; - esac - fi - -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" - ;; -esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic=$lt_prog_compiler_pic -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 -$as_echo "$lt_cv_prog_compiler_pic" >&6; } -lt_prog_compiler_pic=$lt_cv_prog_compiler_pic - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if ${lt_cv_prog_compiler_pic_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works" = xyes; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi - -fi - - - - - - - - - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works=yes - fi - else - lt_cv_prog_compiler_static_works=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } - -if test x"$lt_cv_prog_compiler_static_works" = xyes; then - : -else - lt_prog_compiler_static= -fi - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - runpath_var= - allow_undefined_flag= - always_export_symbols=no - archive_cmds= - archive_expsym_cmds= - compiler_needs_object=no - enable_shared_with_static_runtimes=no - export_dynamic_flag_spec= - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - hardcode_automatic=no - hardcode_direct=no - hardcode_direct_absolute=no - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld= - hardcode_libdir_separator= - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - inherit_rpath=no - link_all_deplibs=unknown - module_cmds= - module_expsym_cmds= - old_archive_from_new_cmds= - old_archive_from_expsyms_cmds= - thread_safe_flag_spec= - whole_archive_flag_spec= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - ld_shlibs=yes - - # On some targets, GNU ld is compatible enough with the native linker - # that we're better off using the native interface for both. - lt_use_gnu_ld_interface=no - if test "$with_gnu_ld" = yes; then - case $host_os in - aix*) - # The AIX port of GNU ld has always aspired to compatibility - # with the native linker. However, as the warning in the GNU ld - # block says, versions before 2.19.5* couldn't really create working - # shared libraries, regardless of the interface used. - case `$LD -v 2>&1` in - *\ \(GNU\ Binutils\)\ 2.19.5*) ;; - *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; - *\ \(GNU\ Binutils\)\ [3-9]*) ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - fi - - if test "$lt_use_gnu_ld_interface" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[3-9]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.19, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to install binutils -*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. -*** You will then need to restart the configuration process. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - export_dynamic_flag_spec='${wl}--export-all-symbols' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; - - haiku*) - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - link_all_deplibs=yes - ;; - - interix[3-9]*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag=' $pic_flag' - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group f77 and f90 compilers - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - whole_archive_flag_spec= - tmp_sharedflag='--shared' ;; - xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - nvcc*) # Cuda Compiler Driver 2.2 - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object=yes - ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf* | bgf* | bgxlf* | mpixlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld='-rpath $libdir' - archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - ld_shlibs=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test "$ld_shlibs" = no; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global - # defined symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds='' - hardcode_direct=yes - hardcode_direct_absolute=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - file_list_spec='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - export_dynamic_flag_spec='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_="/usr/lib:/lib" - fi - -fi - - aix_libpath=$lt_cv_aix_libpath_ -fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_="/usr/lib:/lib" - fi - -fi - - aix_libpath=$lt_cv_aix_libpath_ -fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' ${wl}-bernotok' - allow_undefined_flag=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - fi - archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - case $cc_basename in - cl*) - # Native MSVC - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - always_export_symbols=yes - file_list_spec='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, )='true' - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - # Don't use ranlib - old_postinstall_cmds='chmod 644 $oldlib' - postlink_cmds='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # Assume MSVC wrapper - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_from_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - enable_shared_with_static_runtimes=yes - ;; - esac - ;; - - darwin* | rhapsody*) - - - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - else - whole_archive_flag_spec='' - fi - link_all_deplibs=yes - allow_undefined_flag="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=func_echo_all - archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - - else - ld_shlibs=no - fi - - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - freebsd1*) - ld_shlibs=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_flag_spec_ld='+b $libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - - # Older versions of the 11.00 compiler do not understand -b yet - # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 -$as_echo_n "checking if $CC understands -b... " >&6; } -if ${lt_cv_prog_compiler__b+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler__b=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -b" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler__b=yes - fi - else - lt_cv_prog_compiler__b=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 -$as_echo "$lt_cv_prog_compiler__b" >&6; } - -if test x"$lt_cv_prog_compiler__b" = xyes; then - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' -else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' -fi - - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - # This should be the same for all languages, so no per-tag cache variable. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 -$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } -if ${lt_cv_irix_exported_symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int foo (void) { return 0; } -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_irix_exported_symbol=yes -else - lt_cv_irix_exported_symbol=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 -$as_echo "$lt_cv_irix_exported_symbol" >&6; } - if test "$lt_cv_irix_exported_symbol" = yes; then - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - fi - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - inherit_rpath=yes - link_all_deplibs=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct=yes - hardcode_shlibpath_var=no - hardcode_direct_absolute=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - archive_cmds_need_lc='no' - hardcode_libdir_separator=: - ;; - - solaris*) - no_undefined_flag=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='${wl}-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='${wl}-z,text' - allow_undefined_flag='${wl}-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-R,$libdir' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - export_dynamic_flag_spec='${wl}-Blargedynsym' - ;; - esac - fi - fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } -test "$ld_shlibs" = no && can_build_shared=no - -with_gnu_ld=$with_gnu_ld - - - - - - - - - - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc+:} false; then : - $as_echo_n "(cached) " >&6 -else - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - lt_cv_archive_cmds_need_lc=no - else - lt_cv_archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } - archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - case $host_os in - mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; - *) lt_sed_strip_eq="s,=/,/,g" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` - case $lt_search_path_spec in - *\;*) - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` - ;; - *) - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` - ;; - esac - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[lt_foo]++; } - if (lt_freq[lt_foo] == 1) { print lt_foo; } -}'` - # AWK program above erroneously prepends '/' to C:/dos/paths - # for these hosts. - case $host_os in - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's,/\([A-Za-z]:\),\1,g'` ;; - esac - sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; - - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' - - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec="$LIB" - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - - *) - # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -haiku*) - version_type=linux - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - lt_cv_shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - -fi - - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || - test -n "$runpath_var" || - test "X$hardcode_automatic" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && - test "$hardcode_minus_L" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } - -if test "$hardcode_action" = relink || - test "$inherit_rpath" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - -fi - - ;; - - *) - ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = xyes; then : - lt_cv_dlopen="shl_load" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if ${ac_cv_lib_dld_shl_load+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_shl_load=yes -else - ac_cv_lib_dld_shl_load=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = xyes; then : - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" -else - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if ${ac_cv_lib_svld_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_svld_dlopen=yes -else - ac_cv_lib_svld_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if ${ac_cv_lib_dld_dld_link+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_dld_link=yes -else - ac_cv_lib_dld_dld_link=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = xyes; then : - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisbility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self_static+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisbility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - - - - - - - - - - - - - - - - -striplib= -old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ;; - esac -fi - - - - - - - - - - - - - # Report which library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[4-9]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } - - - - -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - - - - - - - - - - - - - ac_config_commands="$ac_config_commands libtool" - - - - -# Only expand once: - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler vendor" >&5 -$as_echo_n "checking for C compiler vendor... " >&6; } -if ${ax_cv_c_compiler_vendor+:} false; then : - $as_echo_n "(cached) " >&6 -else - ax_cv_c_compiler_vendor=unknown - # note: don't check for gcc first since some other compilers define __GNUC__ - for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ clang:__clang__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do - vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - -#if !($vencpp) - thisisanerror; -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_c_compiler_vendor=`echo $ventest | cut -d: -f1`; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_compiler_vendor" >&5 -$as_echo "$ax_cv_c_compiler_vendor" >&6; } - - - - - - -# Check whether --enable-portable-binary was given. -if test "${enable_portable_binary+set}" = set; then : - enableval=$enable_portable_binary; acx_maxopt_portable=$withval -else - acx_maxopt_portable=no -fi - - -# Try to determine "good" native compiler flags if none specified via CFLAGS -if test "$ac_test_CFLAGS" != "set"; then - CFLAGS="" - case $ax_cv_c_compiler_vendor in - dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host" - if test "x$acx_maxopt_portable" = xno; then - CFLAGS="$CFLAGS -arch host" - fi;; - - sun) CFLAGS="-native -fast -xO5 -dalign" - if test "x$acx_maxopt_portable" = xyes; then - CFLAGS="$CFLAGS -xarch=generic" - fi;; - - hp) CFLAGS="+Oall +Optrs_ansi +DSnative" - if test "x$acx_maxopt_portable" = xyes; then - CFLAGS="$CFLAGS +DAportable" - fi;; - - ibm) if test "x$acx_maxopt_portable" = xno; then - xlc_opt="-qarch=auto -qtune=auto" - else - xlc_opt="-qtune=auto" - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $xlc_opt" >&5 -$as_echo_n "checking whether C compiler accepts $xlc_opt... " >&6; } -ax_save_FLAGS=$CFLAGS - CFLAGS="$xlc_opt" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval `$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh`=yes -else - eval `$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh`=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - CFLAGS="-O3 -qansialias -w $xlc_opt" -else - CFLAGS="-O3 -qansialias -w" - echo "******************************************************" - echo "* You seem to have the IBM C compiler. It is *" - echo "* recommended for best performance that you use: *" - echo "* *" - echo "* CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *" - echo "* ^^^ ^^^ *" - echo "* where xxx is pwr2, pwr3, 604, or whatever kind of *" - echo "* CPU you have. (Set the CFLAGS environment var. *" - echo "* and re-run configure.) For more info, man cc. *" - echo "******************************************************" -fi - - ;; - - intel) CFLAGS="-O3 -ansi_alias" - if test "x$acx_maxopt_portable" = xno; then - icc_archflag=unknown - icc_flags="" - case $host_cpu in - i686*|x86_64*) - # icc accepts gcc assembly syntax, so these should work: - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0 output" >&5 -$as_echo_n "checking for x86 cpuid 0 output... " >&6; } -if ${ax_cv_gcc_x86_cpuid_0+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_0=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 0, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_0=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_0=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_0" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 1 output" >&5 -$as_echo_n "checking for x86 cpuid 1 output... " >&6; } -if ${ax_cv_gcc_x86_cpuid_1+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_1=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 1, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_1=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_1=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_1" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_1" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - case $ax_cv_gcc_x86_cpuid_0 in # see AX_GCC_ARCHFLAG - *:756e6547:*:*) # Intel - case $ax_cv_gcc_x86_cpuid_1 in - *6a?:*[234]:*:*|*6[789b]?:*:*:*) icc_flags="-xK";; - *f3[347]:*:*:*|*f41347:*:*:*) icc_flags="-xP -xN -xW -xK";; - *f??:*:*:*) icc_flags="-xN -xW -xK";; - esac ;; - esac ;; - esac - if test "x$icc_flags" != x; then - for flag in $icc_flags; do - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 -$as_echo_n "checking whether C compiler accepts $flag... " >&6; } -ax_save_FLAGS=$CFLAGS - CFLAGS="$flag" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=yes -else - eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - icc_archflag=$flag; break -else - : -fi - - done - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for icc architecture flag" >&5 -$as_echo_n "checking for icc architecture flag... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $icc_archflag" >&5 -$as_echo "$icc_archflag" >&6; } - if test "x$icc_archflag" != xunknown; then - CFLAGS="$CFLAGS $icc_archflag" - fi - fi - ;; - - gnu) - # default optimization flags for gcc on all systems - CFLAGS="-O3 -fomit-frame-pointer" - - # -fstrict-aliasing for gcc-2.95+ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fstrict-aliasing" >&5 -$as_echo_n "checking whether C compiler accepts -fstrict-aliasing... " >&6; } -if ${ax_cv_c_flags__fstrict_aliasing+:} false; then : - $as_echo_n "(cached) " >&6 -else - - ax_save_FLAGS=$CFLAGS - CFLAGS="-fstrict-aliasing" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_c_flags__fstrict_aliasing=yes -else - ax_cv_c_flags__fstrict_aliasing=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -fi - -eval ax_check_compiler_flags=$ax_cv_c_flags__fstrict_aliasing -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - CFLAGS="$CFLAGS -fstrict-aliasing" -else - : -fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -ffast-math" >&5 -$as_echo_n "checking whether C compiler accepts -ffast-math... " >&6; } -if ${ax_cv_c_flags__ffast_math+:} false; then : - $as_echo_n "(cached) " >&6 -else - - ax_save_FLAGS=$CFLAGS - CFLAGS="-ffast-math" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_c_flags__ffast_math=yes -else - ax_cv_c_flags__ffast_math=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -fi - -eval ax_check_compiler_flags=$ax_cv_c_flags__ffast_math -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - CFLAGS="$CFLAGS -ffast-math" -else - : -fi - - - - - - -# Check whether --with-gcc-arch was given. -if test "${with_gcc_arch+set}" = set; then : - withval=$with_gcc_arch; ax_gcc_arch=$withval -else - ax_gcc_arch=yes -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc architecture flag" >&5 -$as_echo_n "checking for gcc architecture flag... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } -if ${ax_cv_gcc_archflag+:} false; then : - $as_echo_n "(cached) " >&6 -else - -ax_cv_gcc_archflag="unknown" - -if test "$GCC" = yes; then - -if test "x$ax_gcc_arch" = xyes; then -ax_gcc_arch="" -if test "$cross_compiling" = no; then -case $host_cpu in - i[3456]86*|x86_64*) # use cpuid codes, in part from x86info-1.7 by D. Jones - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0 output" >&5 -$as_echo_n "checking for x86 cpuid 0 output... " >&6; } -if ${ax_cv_gcc_x86_cpuid_0+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_0=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 0, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_0=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_0=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_0" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 1 output" >&5 -$as_echo_n "checking for x86 cpuid 1 output... " >&6; } -if ${ax_cv_gcc_x86_cpuid_1+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_1=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 1, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_1=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_1=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_1" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_1" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - case $ax_cv_gcc_x86_cpuid_0 in - *:756e6547:*:*) # Intel - case $ax_cv_gcc_x86_cpuid_1 in - *5[48]?:*:*:*) ax_gcc_arch="pentium-mmx pentium" ;; - *5??:*:*:*) ax_gcc_arch=pentium ;; - *6[3456]?:*:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; - *6a?:*[01]:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; - *6a?:*[234]:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; - *6[9d]?:*:*:*) ax_gcc_arch="pentium-m pentium3 pentiumpro" ;; - *6[78b]?:*:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; - *6??:*:*:*) ax_gcc_arch=pentiumpro ;; - *f3[347]:*:*:*|*f41347:*:*:*) - case $host_cpu in - x86_64*) ax_gcc_arch="nocona pentium4 pentiumpro" ;; - *) ax_gcc_arch="prescott pentium4 pentiumpro" ;; - esac ;; - *f??:*:*:*) ax_gcc_arch="pentium4 pentiumpro";; - esac ;; - *:68747541:*:*) # AMD - case $ax_cv_gcc_x86_cpuid_1 in - *5[67]?:*:*:*) ax_gcc_arch=k6 ;; - *5[8d]?:*:*:*) ax_gcc_arch="k6-2 k6" ;; - *5[9]?:*:*:*) ax_gcc_arch="k6-3 k6" ;; - *60?:*:*:*) ax_gcc_arch=k7 ;; - *6[12]?:*:*:*) ax_gcc_arch="athlon k7" ;; - *6[34]?:*:*:*) ax_gcc_arch="athlon-tbird k7" ;; - *67?:*:*:*) ax_gcc_arch="athlon-4 athlon k7" ;; - *6[68a]?:*:*:*) - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0x80000006 output" >&5 -$as_echo_n "checking for x86 cpuid 0x80000006 output... " >&6; } -if ${ax_cv_gcc_x86_cpuid_0x80000006+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_0x80000006=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 0x80000006, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_0x80000006=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_0x80000006=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0x80000006" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_0x80000006" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - # L2 cache size - case $ax_cv_gcc_x86_cpuid_0x80000006 in - *:*:*[1-9a-f]??????:*) # (L2 = ecx >> 16) >= 256 - ax_gcc_arch="athlon-xp athlon-4 athlon k7" ;; - *) ax_gcc_arch="athlon-4 athlon k7" ;; - esac ;; - *f[4cef8b]?:*:*:*) ax_gcc_arch="athlon64 k8" ;; - *f5?:*:*:*) ax_gcc_arch="opteron k8" ;; - *f7?:*:*:*) ax_gcc_arch="athlon-fx opteron k8" ;; - *f??:*:*:*) ax_gcc_arch="k8" ;; - esac ;; - *:746e6543:*:*) # IDT - case $ax_cv_gcc_x86_cpuid_1 in - *54?:*:*:*) ax_gcc_arch=winchip-c6 ;; - *58?:*:*:*) ax_gcc_arch=winchip2 ;; - *6[78]?:*:*:*) ax_gcc_arch=c3 ;; - *69?:*:*:*) ax_gcc_arch="c3-2 c3" ;; - esac ;; - esac - if test x"$ax_gcc_arch" = x; then # fallback - case $host_cpu in - i586*) ax_gcc_arch=pentium ;; - i686*) ax_gcc_arch=pentiumpro ;; - esac - fi - ;; - - sparc*) - # Extract the first word of "prtdiag", so it can be a program name with args. -set dummy prtdiag; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PRTDIAG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $PRTDIAG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PRTDIAG="$PRTDIAG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_dummy="$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/" -for as_dir in $as_dummy -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_PRTDIAG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_PRTDIAG" && ac_cv_path_PRTDIAG="prtdiag" - ;; -esac -fi -PRTDIAG=$ac_cv_path_PRTDIAG -if test -n "$PRTDIAG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PRTDIAG" >&5 -$as_echo "$PRTDIAG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - cputype=`(((grep cpu /proc/cpuinfo | cut -d: -f2) ; ($PRTDIAG -v |grep -i sparc) ; grep -i cpu /var/run/dmesg.boot ) | head -n 1) 2> /dev/null` - cputype=`echo "$cputype" | tr -d ' -' |tr $as_cr_LETTERS $as_cr_letters` - case $cputype in - *ultrasparciv*) ax_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9" ;; - *ultrasparciii*) ax_gcc_arch="ultrasparc3 ultrasparc v9" ;; - *ultrasparc*) ax_gcc_arch="ultrasparc v9" ;; - *supersparc*|*tms390z5[05]*) ax_gcc_arch="supersparc v8" ;; - *hypersparc*|*rt62[056]*) ax_gcc_arch="hypersparc v8" ;; - *cypress*) ax_gcc_arch=cypress ;; - esac ;; - - alphaev5) ax_gcc_arch=ev5 ;; - alphaev56) ax_gcc_arch=ev56 ;; - alphapca56) ax_gcc_arch="pca56 ev56" ;; - alphapca57) ax_gcc_arch="pca57 pca56 ev56" ;; - alphaev6) ax_gcc_arch=ev6 ;; - alphaev67) ax_gcc_arch=ev67 ;; - alphaev68) ax_gcc_arch="ev68 ev67" ;; - alphaev69) ax_gcc_arch="ev69 ev68 ev67" ;; - alphaev7) ax_gcc_arch="ev7 ev69 ev68 ev67" ;; - alphaev79) ax_gcc_arch="ev79 ev7 ev69 ev68 ev67" ;; - - powerpc*) - cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null` - cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'` - case $cputype in - *750*) ax_gcc_arch="750 G3" ;; - *740[0-9]*) ax_gcc_arch="$cputype 7400 G4" ;; - *74[4-5][0-9]*) ax_gcc_arch="$cputype 7450 G4" ;; - *74[0-9][0-9]*) ax_gcc_arch="$cputype G4" ;; - *970*) ax_gcc_arch="970 G5 power4";; - *POWER4*|*power4*|*gq*) ax_gcc_arch="power4 970";; - *POWER5*|*power5*|*gr*|*gs*) ax_gcc_arch="power5 power4 970";; - 603ev|8240) ax_gcc_arch="$cputype 603e 603";; - *) ax_gcc_arch=$cputype ;; - esac - ax_gcc_arch="$ax_gcc_arch powerpc" - ;; -esac -fi # not cross-compiling -fi # guess arch - -if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then -for arch in $ax_gcc_arch; do - if test "x$acx_maxopt_portable" = xyes; then # if we require portable code - flags="-mtune=$arch" - # -mcpu=$arch and m$arch generate nonportable code on every arch except - # x86. And some other arches (e.g. Alpha) don't accept -mtune. Grrr. - case $host_cpu in i*86|x86_64*) flags="$flags -mcpu=$arch -m$arch";; esac - else - flags="-march=$arch -mcpu=$arch -m$arch" - fi - for flag in $flags; do - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 -$as_echo_n "checking whether C compiler accepts $flag... " >&6; } -ax_save_FLAGS=$CFLAGS - CFLAGS="$flag" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=yes -else - eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - ax_cv_gcc_archflag=$flag; break -else - : -fi - - done - test "x$ax_cv_gcc_archflag" = xunknown || break -done -fi - -fi # $GCC=yes - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc architecture flag" >&5 -$as_echo_n "checking for gcc architecture flag... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_archflag" >&5 -$as_echo "$ax_cv_gcc_archflag" >&6; } -if test "x$ax_cv_gcc_archflag" = xunknown; then - : -else - CFLAGS="$CFLAGS $ax_cv_gcc_archflag" -fi - - ;; - esac - - if test -z "$CFLAGS"; then - echo "" - echo "********************************************************" - echo "* WARNING: Don't know the best CFLAGS for this system *" - echo "* Use ./configure CFLAGS=... to specify your own flags *" - echo "* (otherwise, a default of CFLAGS=-O3 will be used) *" - echo "********************************************************" - echo "" - CFLAGS="-O3" - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CFLAGS" >&5 -$as_echo_n "checking whether C compiler accepts $CFLAGS... " >&6; } -ax_save_FLAGS=$CFLAGS - CFLAGS="$CFLAGS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval `$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=yes -else - eval `$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - : -else - - echo "" - echo "********************************************************" - echo "* WARNING: The guessed CFLAGS don't seem to work with *" - echo "* your compiler. *" - echo "* Use ./configure CFLAGS=... to specify your own flags *" - echo "********************************************************" - echo "" - CFLAGS="" - -fi - - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking CFLAGS for maximum warnings" >&5 -$as_echo_n "checking CFLAGS for maximum warnings... " >&6; } -if ${ac_cv_cflags_warn_all+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_cflags_warn_all="no, unknown" - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - ac_save_CFLAGS="$CFLAGS" -for ac_arg in "-pedantic % -Wall" "-xstrconst % -v" "-std1 % -verbose -w0 -warnprotos" "-qlanglvl=ansi % -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" "-ansi -ansiE % -fullwarn" "+ESlit % +w1" "-Xc % -pvctl,fullmsg" "-h conform % -h msglevel 2" # -do CFLAGS="$ac_save_CFLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_cflags_warn_all=`echo $ac_arg | sed -e 's,.*% *,,'` ; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done - CFLAGS="$ac_save_CFLAGS" - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cflags_warn_all" >&5 -$as_echo "$ac_cv_cflags_warn_all" >&6; } -case ".$ac_cv_cflags_warn_all" in - .ok|.ok,*) ;; - .|.no|.no,*) - ;; - *) - if echo " $CFLAGS " | grep " $ac_cv_cflags_warn_all " 2>&1 >/dev/null - then { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS does contain \$ac_cv_cflags_warn_all"; } >&5 - (: CFLAGS does contain $ac_cv_cflags_warn_all) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - else { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS \$ac_cv_cflags_warn_all\""; } >&5 - (: CFLAGS="$CFLAGS $ac_cv_cflags_warn_all") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - CFLAGS="$CFLAGS $ac_cv_cflags_warn_all" - fi - ;; -esac - -if test "x$GCC" = "xyes"; then - CFLAGS="$CFLAGS -fexceptions" -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 -$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } - # Check whether --enable-maintainer-mode was given. -if test "${enable_maintainer_mode+set}" = set; then : - enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval -else - USE_MAINTAINER_MODE=no -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 -$as_echo "$USE_MAINTAINER_MODE" >&6; } - if test $USE_MAINTAINER_MODE = yes; then - MAINTAINER_MODE_TRUE= - MAINTAINER_MODE_FALSE='#' -else - MAINTAINER_MODE_TRUE='#' - MAINTAINER_MODE_FALSE= -fi - - MAINT=$MAINTAINER_MODE_TRUE - - - -for ac_header in sys/mman.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_mman_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_MMAN_H 1 -_ACEOF - -fi - -done - -for ac_func in mmap -do : - ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" -if test "x$ac_cv_func_mmap" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_MMAP 1 -_ACEOF - -fi -done - - -ac_fn_c_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_mman_h" = xyes; then : - libffi_header_sys_mman_h=yes -else - libffi_header_sys_mman_h=no -fi - - -ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" -if test "x$ac_cv_func_mmap" = xyes; then : - libffi_func_mmap=yes -else - libffi_func_mmap=no -fi - -if test "$libffi_header_sys_mman_h" != yes \ - || test "$libffi_func_mmap" != yes; then - ac_cv_func_mmap_file=no - ac_cv_func_mmap_dev_zero=no - ac_cv_func_mmap_anon=no -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether read-only mmap of a plain file works" >&5 -$as_echo_n "checking whether read-only mmap of a plain file works... " >&6; } -if ${ac_cv_func_mmap_file+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Add a system to this blacklist if - # mmap(0, stat_size, PROT_READ, MAP_PRIVATE, fd, 0) doesn't return a - # memory area containing the same data that you'd get if you applied - # read() to the same fd. The only system known to have a problem here - # is VMS, where text files have record structure. - case "$host_os" in - vms* | ultrix*) - ac_cv_func_mmap_file=no ;; - *) - ac_cv_func_mmap_file=yes;; - esac -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_file" >&5 -$as_echo "$ac_cv_func_mmap_file" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mmap from /dev/zero works" >&5 -$as_echo_n "checking whether mmap from /dev/zero works... " >&6; } -if ${ac_cv_func_mmap_dev_zero+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Add a system to this blacklist if it has mmap() but /dev/zero - # does not exist, or if mmapping /dev/zero does not give anonymous - # zeroed pages with both the following properties: - # 1. If you map N consecutive pages in with one call, and then - # unmap any subset of those pages, the pages that were not - # explicitly unmapped remain accessible. - # 2. If you map two adjacent blocks of memory and then unmap them - # both at once, they must both go away. - # Systems known to be in this category are Windows (all variants), - # VMS, and Darwin. - case "$host_os" in - vms* | cygwin* | pe | mingw* | darwin* | ultrix* | hpux10* | hpux11.00) - ac_cv_func_mmap_dev_zero=no ;; - *) - ac_cv_func_mmap_dev_zero=yes;; - esac -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_dev_zero" >&5 -$as_echo "$ac_cv_func_mmap_dev_zero" >&6; } - - # Unlike /dev/zero, the MAP_ANON(YMOUS) defines can be probed for. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MAP_ANON(YMOUS)" >&5 -$as_echo_n "checking for MAP_ANON(YMOUS)... " >&6; } -if ${ac_cv_decl_map_anon+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include - -#ifndef MAP_ANONYMOUS -#define MAP_ANONYMOUS MAP_ANON -#endif - -int -main () -{ -int n = MAP_ANONYMOUS; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_decl_map_anon=yes -else - ac_cv_decl_map_anon=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_decl_map_anon" >&5 -$as_echo "$ac_cv_decl_map_anon" >&6; } - - if test $ac_cv_decl_map_anon = no; then - ac_cv_func_mmap_anon=no - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mmap with MAP_ANON(YMOUS) works" >&5 -$as_echo_n "checking whether mmap with MAP_ANON(YMOUS) works... " >&6; } -if ${ac_cv_func_mmap_anon+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Add a system to this blacklist if it has mmap() and MAP_ANON or - # MAP_ANONYMOUS, but using mmap(..., MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) - # doesn't give anonymous zeroed pages with the same properties listed - # above for use of /dev/zero. - # Systems known to be in this category are Windows, VMS, and SCO Unix. - case "$host_os" in - vms* | cygwin* | pe | mingw* | sco* | udk* ) - ac_cv_func_mmap_anon=no ;; - *) - ac_cv_func_mmap_anon=yes;; - esac -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_anon" >&5 -$as_echo "$ac_cv_func_mmap_anon" >&6; } - fi -fi - -if test $ac_cv_func_mmap_file = yes; then - -$as_echo "#define HAVE_MMAP_FILE 1" >>confdefs.h - -fi -if test $ac_cv_func_mmap_dev_zero = yes; then - -$as_echo "#define HAVE_MMAP_DEV_ZERO 1" >>confdefs.h - -fi -if test $ac_cv_func_mmap_anon = yes; then - -$as_echo "#define HAVE_MMAP_ANON 1" >>confdefs.h - -fi - - - if test -d $srcdir/testsuite; then - TESTSUBDIR_TRUE= - TESTSUBDIR_FALSE='#' -else - TESTSUBDIR_TRUE='#' - TESTSUBDIR_FALSE= -fi - - -TARGETDIR="unknown" -case "$host" in - alpha*-*-*) - TARGET=ALPHA; TARGETDIR=alpha; - # Support 128-bit long double, changeable via command-line switch. - HAVE_LONG_DOUBLE='defined(__LONG_DOUBLE_128__)' - ;; - - arm*-*-*) - TARGET=ARM; TARGETDIR=arm - ;; - - amd64-*-freebsd* | amd64-*-openbsd*) - TARGET=X86_64; TARGETDIR=x86 - ;; - - amd64-*-freebsd*) - TARGET=X86_64; TARGETDIR=x86 - ;; - - avr32*-*-*) - TARGET=AVR32; TARGETDIR=avr32 - ;; - - cris-*-*) - TARGET=LIBFFI_CRIS; TARGETDIR=cris - ;; - - frv-*-*) - TARGET=FRV; TARGETDIR=frv - ;; - - hppa*-*-linux* | parisc*-*-linux* | hppa*-*-openbsd*) - TARGET=PA_LINUX; TARGETDIR=pa - ;; - hppa*64-*-hpux*) - TARGET=PA64_HPUX; TARGETDIR=pa - ;; - hppa*-*-hpux*) - TARGET=PA_HPUX; TARGETDIR=pa - ;; - - i?86-*-freebsd* | i?86-*-openbsd*) - TARGET=X86_FREEBSD; TARGETDIR=x86 - ;; - i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2* | i?86-*-interix*) - TARGET=X86_WIN32; TARGETDIR=x86 - # All mingw/cygwin/win32 builds require -no-undefined for sharedlib. - # We must also check with_cross_host to decide if this is a native - # or cross-build and select where to install dlls appropriately. - if test -n "$with_cross_host" && - test x"$with_cross_host" != x"no"; then - AM_LTLDFLAGS='-no-undefined -bindir "$(toolexeclibdir)"'; - else - AM_LTLDFLAGS='-no-undefined -bindir "$(bindir)"'; - fi - ;; - i?86-*-darwin*) - TARGET=X86_DARWIN; TARGETDIR=x86 - ;; - i?86-*-solaris2.1[0-9]*) - TARGET=X86_64; TARGETDIR=x86 - ;; - i?86-*-*) - TARGET=X86; TARGETDIR=x86 - ;; - - ia64*-*-*) - TARGET=IA64; TARGETDIR=ia64 - ;; - - m32r*-*-*) - TARGET=M32R; TARGETDIR=m32r - ;; - - m68k-*-*) - TARGET=M68K; TARGETDIR=m68k - ;; - - mips-sgi-irix5.* | mips-sgi-irix6.* | mips*-*-rtems*) - TARGET=MIPS; TARGETDIR=mips - ;; - mips*-*-linux* | mips*-*-openbsd*) - # Support 128-bit long double for NewABI. - HAVE_LONG_DOUBLE='defined(__mips64)' - TARGET=MIPS; TARGETDIR=mips - ;; - - powerpc*-*-linux* | powerpc-*-sysv*) - TARGET=POWERPC; TARGETDIR=powerpc - ;; - powerpc-*-beos*) - TARGET=POWERPC; TARGETDIR=powerpc - ;; - powerpc-*-darwin* | powerpc64-*-darwin*) - TARGET=POWERPC_DARWIN; TARGETDIR=powerpc - ;; - powerpc-*-aix* | rs6000-*-aix*) - TARGET=POWERPC_AIX; TARGETDIR=powerpc - ;; - powerpc-*-freebsd* | powerpc-*-openbsd*) - TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc - ;; - powerpc64-*-freebsd*) - TARGET=POWERPC; TARGETDIR=powerpc - ;; - powerpc*-*-rtems*) - TARGET=POWERPC; TARGETDIR=powerpc - ;; - - s390-*-* | s390x-*-*) - TARGET=S390; TARGETDIR=s390 - ;; - - sh-*-* | sh[34]*-*-*) - TARGET=SH; TARGETDIR=sh - ;; - sh64-*-* | sh5*-*-*) - TARGET=SH64; TARGETDIR=sh64 - ;; - - sparc*-*-*) - TARGET=SPARC; TARGETDIR=sparc - ;; - - x86_64-*-darwin*) - TARGET=X86_DARWIN; TARGETDIR=x86 - ;; - - x86_64-*-cygwin* | x86_64-*-mingw*) - TARGET=X86_WIN64; TARGETDIR=x86 - ;; - - x86_64-*-*) - TARGET=X86_64; TARGETDIR=x86 - ;; -esac - - - - -if test $TARGETDIR = unknown; then - as_fn_error $? "\"libffi has not been ported to $host.\"" "$LINENO" 5 -fi - - if test x$TARGET = xMIPS; then - MIPS_TRUE= - MIPS_FALSE='#' -else - MIPS_TRUE='#' - MIPS_FALSE= -fi - - if test x$TARGET = xSPARC; then - SPARC_TRUE= - SPARC_FALSE='#' -else - SPARC_TRUE='#' - SPARC_FALSE= -fi - - if test x$TARGET = xX86; then - X86_TRUE= - X86_FALSE='#' -else - X86_TRUE='#' - X86_FALSE= -fi - - if test x$TARGET = xX86_FREEBSD; then - X86_FREEBSD_TRUE= - X86_FREEBSD_FALSE='#' -else - X86_FREEBSD_TRUE='#' - X86_FREEBSD_FALSE= -fi - - if test x$TARGET = xX86_WIN32; then - X86_WIN32_TRUE= - X86_WIN32_FALSE='#' -else - X86_WIN32_TRUE='#' - X86_WIN32_FALSE= -fi - - if test x$TARGET = xX86_WIN64; then - X86_WIN64_TRUE= - X86_WIN64_FALSE='#' -else - X86_WIN64_TRUE='#' - X86_WIN64_FALSE= -fi - - if test x$TARGET = xX86_DARWIN; then - X86_DARWIN_TRUE= - X86_DARWIN_FALSE='#' -else - X86_DARWIN_TRUE='#' - X86_DARWIN_FALSE= -fi - - if test x$TARGET = xALPHA; then - ALPHA_TRUE= - ALPHA_FALSE='#' -else - ALPHA_TRUE='#' - ALPHA_FALSE= -fi - - if test x$TARGET = xIA64; then - IA64_TRUE= - IA64_FALSE='#' -else - IA64_TRUE='#' - IA64_FALSE= -fi - - if test x$TARGET = xM32R; then - M32R_TRUE= - M32R_FALSE='#' -else - M32R_TRUE='#' - M32R_FALSE= -fi - - if test x$TARGET = xM68K; then - M68K_TRUE= - M68K_FALSE='#' -else - M68K_TRUE='#' - M68K_FALSE= -fi - - if test x$TARGET = xMOXIE; then - MOXIE_TRUE= - MOXIE_FALSE='#' -else - MOXIE_TRUE='#' - MOXIE_FALSE= -fi - - if test x$TARGET = xPOWERPC; then - POWERPC_TRUE= - POWERPC_FALSE='#' -else - POWERPC_TRUE='#' - POWERPC_FALSE= -fi - - if test x$TARGET = xPOWERPC_AIX; then - POWERPC_AIX_TRUE= - POWERPC_AIX_FALSE='#' -else - POWERPC_AIX_TRUE='#' - POWERPC_AIX_FALSE= -fi - - if test x$TARGET = xPOWERPC_DARWIN; then - POWERPC_DARWIN_TRUE= - POWERPC_DARWIN_FALSE='#' -else - POWERPC_DARWIN_TRUE='#' - POWERPC_DARWIN_FALSE= -fi - - if test x$TARGET = xPOWERPC_FREEBSD; then - POWERPC_FREEBSD_TRUE= - POWERPC_FREEBSD_FALSE='#' -else - POWERPC_FREEBSD_TRUE='#' - POWERPC_FREEBSD_FALSE= -fi - - if test x$TARGET = xARM; then - ARM_TRUE= - ARM_FALSE='#' -else - ARM_TRUE='#' - ARM_FALSE= -fi - - if test x$TARGET = xAVR32; then - AVR32_TRUE= - AVR32_FALSE='#' -else - AVR32_TRUE='#' - AVR32_FALSE= -fi - - if test x$TARGET = xLIBFFI_CRIS; then - LIBFFI_CRIS_TRUE= - LIBFFI_CRIS_FALSE='#' -else - LIBFFI_CRIS_TRUE='#' - LIBFFI_CRIS_FALSE= -fi - - if test x$TARGET = xFRV; then - FRV_TRUE= - FRV_FALSE='#' -else - FRV_TRUE='#' - FRV_FALSE= -fi - - if test x$TARGET = xS390; then - S390_TRUE= - S390_FALSE='#' -else - S390_TRUE='#' - S390_FALSE= -fi - - if test x$TARGET = xX86_64; then - X86_64_TRUE= - X86_64_FALSE='#' -else - X86_64_TRUE='#' - X86_64_FALSE= -fi - - if test x$TARGET = xSH; then - SH_TRUE= - SH_FALSE='#' -else - SH_TRUE='#' - SH_FALSE= -fi - - if test x$TARGET = xSH64; then - SH64_TRUE= - SH64_FALSE='#' -else - SH64_TRUE='#' - SH64_FALSE= -fi - - if test x$TARGET = xPA_LINUX; then - PA_LINUX_TRUE= - PA_LINUX_FALSE='#' -else - PA_LINUX_TRUE='#' - PA_LINUX_FALSE= -fi - - if test x$TARGET = xPA_HPUX; then - PA_HPUX_TRUE= - PA_HPUX_FALSE='#' -else - PA_HPUX_TRUE='#' - PA_HPUX_FALSE= -fi - - if test x$TARGET = xPA64_HPUX; then - PA64_HPUX_TRUE= - PA64_HPUX_FALSE='#' -else - PA64_HPUX_TRUE='#' - PA64_HPUX_FALSE= -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -for ac_func in memcpy -do : - ac_fn_c_check_func "$LINENO" "memcpy" "ac_cv_func_memcpy" -if test "x$ac_cv_func_memcpy" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_MEMCPY 1 -_ACEOF - -fi -done - -ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = xyes; then : - -else - -cat >>confdefs.h <<_ACEOF -#define size_t unsigned int -_ACEOF - -fi - -# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works -# for constant arguments. Useless! -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 -$as_echo_n "checking for working alloca.h... " >&6; } -if ${ac_cv_working_alloca_h+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -char *p = (char *) alloca (2 * sizeof (int)); - if (p) return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_working_alloca_h=yes -else - ac_cv_working_alloca_h=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 -$as_echo "$ac_cv_working_alloca_h" >&6; } -if test $ac_cv_working_alloca_h = yes; then - -$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 -$as_echo_n "checking for alloca... " >&6; } -if ${ac_cv_func_alloca_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __GNUC__ -# define alloca __builtin_alloca -#else -# ifdef _MSC_VER -# include -# define alloca _alloca -# else -# ifdef HAVE_ALLOCA_H -# include -# else -# ifdef _AIX - #pragma alloca -# else -# ifndef alloca /* predefined by HP cc +Olibcalls */ -void *alloca (size_t); -# endif -# endif -# endif -# endif -#endif - -int -main () -{ -char *p = (char *) alloca (1); - if (p) return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_func_alloca_works=yes -else - ac_cv_func_alloca_works=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 -$as_echo "$ac_cv_func_alloca_works" >&6; } - -if test $ac_cv_func_alloca_works = yes; then - -$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h - -else - # The SVR3 libPW and SVR4 libucb both contain incompatible functions -# that cause trouble. Some versions do not even contain alloca or -# contain a buggy version. If you still want to use their alloca, -# use ar to extract alloca.o from them instead of compiling alloca.c. - -ALLOCA=\${LIBOBJDIR}alloca.$ac_objext - -$as_echo "#define C_ALLOCA 1" >>confdefs.h - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 -$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } -if ${ac_cv_os_cray+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#if defined CRAY && ! defined CRAY2 -webecray -#else -wenotbecray -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "webecray" >/dev/null 2>&1; then : - ac_cv_os_cray=yes -else - ac_cv_os_cray=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 -$as_echo "$ac_cv_os_cray" >&6; } -if test $ac_cv_os_cray = yes; then - for ac_func in _getb67 GETB67 getb67; do - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - -cat >>confdefs.h <<_ACEOF -#define CRAY_STACKSEG_END $ac_func -_ACEOF - - break -fi - - done -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 -$as_echo_n "checking stack direction for C alloca... " >&6; } -if ${ac_cv_c_stack_direction+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_c_stack_direction=0 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -find_stack_direction () -{ - static char *addr = 0; - auto char dummy; - if (addr == 0) - { - addr = &dummy; - return find_stack_direction (); - } - else - return (&dummy > addr) ? 1 : -1; -} - -int -main () -{ - return find_stack_direction () < 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_c_stack_direction=1 -else - ac_cv_c_stack_direction=-1 -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 -$as_echo "$ac_cv_c_stack_direction" >&6; } -cat >>confdefs.h <<_ACEOF -#define STACK_DIRECTION $ac_cv_c_stack_direction -_ACEOF - - -fi - - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double" >&5 -$as_echo_n "checking size of double... " >&6; } -if ${ac_cv_sizeof_double+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_double" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (double) -See \`config.log' for more details" "$LINENO" 5; } - else - ac_cv_sizeof_double=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5 -$as_echo "$ac_cv_sizeof_double" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_DOUBLE $ac_cv_sizeof_double -_ACEOF - - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long double" >&5 -$as_echo_n "checking size of long double... " >&6; } -if ${ac_cv_sizeof_long_double+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long double))" "ac_cv_sizeof_long_double" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_long_double" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (long double) -See \`config.log' for more details" "$LINENO" 5; } - else - ac_cv_sizeof_long_double=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_double" >&5 -$as_echo "$ac_cv_sizeof_long_double" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONG_DOUBLE $ac_cv_sizeof_long_double -_ACEOF - - - -# Also AC_SUBST this variable for ffi.h. -if test -z "$HAVE_LONG_DOUBLE"; then - HAVE_LONG_DOUBLE=0 - if test $ac_cv_sizeof_double != $ac_cv_sizeof_long_double; then - if test $ac_cv_sizeof_long_double != 0; then - HAVE_LONG_DOUBLE=1 - -$as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h - - fi - fi -fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 -$as_echo_n "checking whether byte ordering is bigendian... " >&6; } -if ${ac_cv_c_bigendian+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_c_bigendian=unknown - # See if we're dealing with a universal compiler. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __APPLE_CC__ - not a universal capable compiler - #endif - typedef int dummy; - -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - - # Check for potential -arch flags. It is not universal unless - # there are at least two -arch flags with different values. - ac_arch= - ac_prev= - for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do - if test -n "$ac_prev"; then - case $ac_word in - i?86 | x86_64 | ppc | ppc64) - if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then - ac_arch=$ac_word - else - ac_cv_c_bigendian=universal - break - fi - ;; - esac - ac_prev= - elif test "x$ac_word" = "x-arch"; then - ac_prev=arch - fi - done -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test $ac_cv_c_bigendian = unknown; then - # See if sys/param.h defines the BYTE_ORDER macro. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include - -int -main () -{ -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ - && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ - && LITTLE_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - # It does; now see whether it defined to BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include - -int -main () -{ -#if BYTE_ORDER != BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes -else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -int -main () -{ -#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - # It does; now see whether it defined to _BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -int -main () -{ -#ifndef _BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes -else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # Compile a test program. - if test "$cross_compiling" = yes; then : - # Try to guess by grepping values from an object file. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -short int ascii_mm[] = - { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; - short int ascii_ii[] = - { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; - int use_ascii (int i) { - return ascii_mm[i] + ascii_ii[i]; - } - short int ebcdic_ii[] = - { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; - short int ebcdic_mm[] = - { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; - int use_ebcdic (int i) { - return ebcdic_mm[i] + ebcdic_ii[i]; - } - extern int foo; - -int -main () -{ -return use_ascii (foo) == use_ebcdic (foo); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then - ac_cv_c_bigendian=yes - fi - if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi - fi -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long int l; - char c[sizeof (long int)]; - } u; - u.l = 1; - return u.c[sizeof (long int) - 1] == 1; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_c_bigendian=no -else - ac_cv_c_bigendian=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 -$as_echo "$ac_cv_c_bigendian" >&6; } - case $ac_cv_c_bigendian in #( - yes) - $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h -;; #( - no) - ;; #( - universal) - -$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h - - ;; #( - *) - as_fn_error $? "unknown endianness - presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; - esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler .cfi pseudo-op support" >&5 -$as_echo_n "checking assembler .cfi pseudo-op support... " >&6; } -if ${libffi_cv_as_cfi_pseudo_op+:} false; then : - $as_echo_n "(cached) " >&6 -else - - libffi_cv_as_cfi_pseudo_op=unknown - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -asm (".cfi_startproc\n\t.cfi_endproc"); -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libffi_cv_as_cfi_pseudo_op=yes -else - libffi_cv_as_cfi_pseudo_op=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_cfi_pseudo_op" >&5 -$as_echo "$libffi_cv_as_cfi_pseudo_op" >&6; } -if test "x$libffi_cv_as_cfi_pseudo_op" = xyes; then - -$as_echo "#define HAVE_AS_CFI_PSEUDO_OP 1" >>confdefs.h - -fi - -if test x$TARGET = xSPARC; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler and linker support unaligned pc related relocs" >&5 -$as_echo_n "checking assembler and linker support unaligned pc related relocs... " >&6; } -if ${libffi_cv_as_sparc_ua_pcrel+:} false; then : - $as_echo_n "(cached) " >&6 -else - - save_CFLAGS="$CFLAGS" - save_LDFLAGS="$LDFLAGS" - CFLAGS="$CFLAGS -fpic" - LDFLAGS="$LDFLAGS -shared" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -asm (".text; foo: nop; .data; .align 4; .byte 0; .uaword %r_disp32(foo); .text"); -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - libffi_cv_as_sparc_ua_pcrel=yes -else - libffi_cv_as_sparc_ua_pcrel=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - CFLAGS="$save_CFLAGS" - LDFLAGS="$save_LDFLAGS" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_sparc_ua_pcrel" >&5 -$as_echo "$libffi_cv_as_sparc_ua_pcrel" >&6; } - if test "x$libffi_cv_as_sparc_ua_pcrel" = xyes; then - -$as_echo "#define HAVE_AS_SPARC_UA_PCREL 1" >>confdefs.h - - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler .register pseudo-op support" >&5 -$as_echo_n "checking assembler .register pseudo-op support... " >&6; } -if ${libffi_cv_as_register_pseudo_op+:} false; then : - $as_echo_n "(cached) " >&6 -else - - libffi_cv_as_register_pseudo_op=unknown - # Check if we have .register - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -asm (".register %g2, #scratch"); -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libffi_cv_as_register_pseudo_op=yes -else - libffi_cv_as_register_pseudo_op=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_register_pseudo_op" >&5 -$as_echo "$libffi_cv_as_register_pseudo_op" >&6; } - if test "x$libffi_cv_as_register_pseudo_op" = xyes; then - -$as_echo "#define HAVE_AS_REGISTER_PSEUDO_OP 1" >>confdefs.h - - fi -fi - -if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler supports pc related relocs" >&5 -$as_echo_n "checking assembler supports pc related relocs... " >&6; } -if ${libffi_cv_as_x86_pcrel+:} false; then : - $as_echo_n "(cached) " >&6 -else - - libffi_cv_as_x86_pcrel=no - echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s - if $CC $CFLAGS -c conftest.s > /dev/null; then - libffi_cv_as_x86_pcrel=yes - fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_x86_pcrel" >&5 -$as_echo "$libffi_cv_as_x86_pcrel" >&6; } - if test "x$libffi_cv_as_x86_pcrel" = xyes; then - -$as_echo "#define HAVE_AS_X86_PCREL 1" >>confdefs.h - - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler .ascii pseudo-op support" >&5 -$as_echo_n "checking assembler .ascii pseudo-op support... " >&6; } -if ${libffi_cv_as_ascii_pseudo_op+:} false; then : - $as_echo_n "(cached) " >&6 -else - - libffi_cv_as_ascii_pseudo_op=unknown - # Check if we have .ascii - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -asm (".ascii \\"string\\""); -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libffi_cv_as_ascii_pseudo_op=yes -else - libffi_cv_as_ascii_pseudo_op=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_ascii_pseudo_op" >&5 -$as_echo "$libffi_cv_as_ascii_pseudo_op" >&6; } - if test "x$libffi_cv_as_ascii_pseudo_op" = xyes; then - -$as_echo "#define HAVE_AS_ASCII_PSEUDO_OP 1" >>confdefs.h - - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler .string pseudo-op support" >&5 -$as_echo_n "checking assembler .string pseudo-op support... " >&6; } -if ${libffi_cv_as_string_pseudo_op+:} false; then : - $as_echo_n "(cached) " >&6 -else - - libffi_cv_as_string_pseudo_op=unknown - # Check if we have .string - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -asm (".string \\"string\\""); -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libffi_cv_as_string_pseudo_op=yes -else - libffi_cv_as_string_pseudo_op=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_string_pseudo_op" >&5 -$as_echo "$libffi_cv_as_string_pseudo_op" >&6; } - if test "x$libffi_cv_as_string_pseudo_op" = xyes; then - -$as_echo "#define HAVE_AS_STRING_PSEUDO_OP 1" >>confdefs.h - - fi -fi - -if test x$TARGET = xX86_WIN64; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _ prefix in compiled symbols" >&5 -$as_echo_n "checking for _ prefix in compiled symbols... " >&6; } -if ${lt_cv_sys_symbol_underscore+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_sys_symbol_underscore=no - cat > conftest.$ac_ext <<_LT_EOF -void nm_test_func(){} -int main(){nm_test_func;return 0;} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Now try to grab the symbols. - ac_nlist=conftest.nm - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $ac_nlist\""; } >&5 - (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $ac_nlist) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "$ac_nlist"; then - # See whether the symbols have a leading underscore. - if grep '^. _nm_test_func' "$ac_nlist" >/dev/null; then - lt_cv_sys_symbol_underscore=yes - else - if grep '^. nm_test_func ' "$ac_nlist" >/dev/null; then - : - else - echo "configure: cannot find nm_test_func in $ac_nlist" >&5 - fi - fi - else - echo "configure: cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "configure: failed program was:" >&5 - cat conftest.c >&5 - fi - rm -rf conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_symbol_underscore" >&5 -$as_echo "$lt_cv_sys_symbol_underscore" >&6; } - sys_symbol_underscore=$lt_cv_sys_symbol_underscore - - - if test "x$sys_symbol_underscore" = xyes; then - -$as_echo "#define SYMBOL_UNDERSCORE 1" >>confdefs.h - - fi -fi - - -FFI_EXEC_TRAMPOLINE_TABLE=0 -case "$target" in - *arm*-apple-darwin*) - FFI_EXEC_TRAMPOLINE_TABLE=1 - -$as_echo "#define FFI_EXEC_TRAMPOLINE_TABLE 1" >>confdefs.h - - ;; - *-apple-darwin10* | *-*-freebsd* | *-*-openbsd* | *-pc-solaris*) - -$as_echo "#define FFI_MMAP_EXEC_WRIT 1" >>confdefs.h - - ;; -esac - if test x$FFI_EXEC_TRAMPOLINE_TABLE = x1; then - FFI_EXEC_TRAMPOLINE_TABLE_TRUE= - FFI_EXEC_TRAMPOLINE_TABLE_FALSE='#' -else - FFI_EXEC_TRAMPOLINE_TABLE_TRUE='#' - FFI_EXEC_TRAMPOLINE_TABLE_FALSE= -fi - - - -if test x$TARGET = xX86_64; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler supports unwind section type" >&5 -$as_echo_n "checking assembler supports unwind section type... " >&6; } -if ${libffi_cv_as_x86_64_unwind_section_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - - libffi_cv_as_x86_64_unwind_section_type=yes - echo '.section .eh_frame,"a",@unwind' > conftest.s - if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then - libffi_cv_as_x86_64_unwind_section_type=no - fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_x86_64_unwind_section_type" >&5 -$as_echo "$libffi_cv_as_x86_64_unwind_section_type" >&6; } - if test "x$libffi_cv_as_x86_64_unwind_section_type" = xyes; then - -$as_echo "#define HAVE_AS_X86_64_UNWIND_SECTION_TYPE 1" >>confdefs.h - - fi -fi - -if test "x$GCC" = "xyes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether .eh_frame section should be read-only" >&5 -$as_echo_n "checking whether .eh_frame section should be read-only... " >&6; } -if ${libffi_cv_ro_eh_frame+:} false; then : - $as_echo_n "(cached) " >&6 -else - - libffi_cv_ro_eh_frame=no - echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c - if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then - if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then - libffi_cv_ro_eh_frame=yes - elif grep '.section.*eh_frame.*#alloc' conftest.c \ - | grep -v '#write' > /dev/null; then - libffi_cv_ro_eh_frame=yes - fi - fi - rm -f conftest.* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_ro_eh_frame" >&5 -$as_echo "$libffi_cv_ro_eh_frame" >&6; } - if test "x$libffi_cv_ro_eh_frame" = xyes; then - -$as_echo "#define HAVE_RO_EH_FRAME 1" >>confdefs.h - - -$as_echo "#define EH_FRAME_FLAGS \"a\"" >>confdefs.h - - else - -$as_echo "#define EH_FRAME_FLAGS \"aw\"" >>confdefs.h - - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__((visibility(\"hidden\")))" >&5 -$as_echo_n "checking for __attribute__((visibility(\"hidden\")))... " >&6; } -if ${libffi_cv_hidden_visibility_attribute+:} false; then : - $as_echo_n "(cached) " >&6 -else - - echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1 ; }' > conftest.c - libffi_cv_hidden_visibility_attribute=no - if { ac_try='${CC-cc} -Werror -S conftest.c -o conftest.s 1>&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - if grep '\.hidden.*foo' conftest.s >/dev/null; then - libffi_cv_hidden_visibility_attribute=yes - fi - fi - rm -f conftest.* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_hidden_visibility_attribute" >&5 -$as_echo "$libffi_cv_hidden_visibility_attribute" >&6; } - if test $libffi_cv_hidden_visibility_attribute = yes; then - -$as_echo "#define HAVE_HIDDEN_VISIBILITY_ATTRIBUTE 1" >>confdefs.h - - fi -fi - - - - - - - - -# Check whether --enable-debug was given. -if test "${enable_debug+set}" = set; then : - enableval=$enable_debug; if test "$enable_debug" = "yes"; then - -$as_echo "#define FFI_DEBUG 1" >>confdefs.h - - fi -fi - - if test "$enable_debug" = "yes"; then - FFI_DEBUG_TRUE= - FFI_DEBUG_FALSE='#' -else - FFI_DEBUG_TRUE='#' - FFI_DEBUG_FALSE= -fi - - -# Check whether --enable-structs was given. -if test "${enable_structs+set}" = set; then : - enableval=$enable_structs; if test "$enable_structs" = "no"; then - -$as_echo "#define FFI_NO_STRUCTS 1" >>confdefs.h - - fi -fi - - -# Check whether --enable-raw-api was given. -if test "${enable_raw_api+set}" = set; then : - enableval=$enable_raw_api; if test "$enable_raw_api" = "no"; then - -$as_echo "#define FFI_NO_RAW_API 1" >>confdefs.h - - fi -fi - - -# Check whether --enable-purify-safety was given. -if test "${enable_purify_safety+set}" = set; then : - enableval=$enable_purify_safety; if test "$enable_purify_safety" = "yes"; then - -$as_echo "#define USING_PURIFY 1" >>confdefs.h - - fi -fi - - -# These variables are only ever used when we cross-build to X86_WIN32. -# And we only support this with GCC, so... -if test x"$GCC" != x"no"; then - if test -n "$with_cross_host" && - test x"$with_cross_host" != x"no"; then - toolexecdir='$(exec_prefix)/$(target_alias)' - toolexeclibdir='$(toolexecdir)/lib' - else - toolexecdir='$(libdir)/gcc-lib/$(target_alias)' - toolexeclibdir='$(libdir)' - fi - multi_os_directory=`$CC -print-multi-os-directory` - case $multi_os_directory in - .) ;; # Avoid trailing /. - *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;; - esac - - -fi - -if test "${multilib}" = "yes"; then - multilib_arg="--enable-multilib" -else - multilib_arg= -fi - -ac_config_commands="$ac_config_commands include" - -ac_config_commands="$ac_config_commands src" - - -ac_config_links="$ac_config_links include/ffitarget.h:src/$TARGETDIR/ffitarget.h" - - -ac_config_files="$ac_config_files include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc" - - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - if test ! -f "$cache_file" || test -h "$cache_file"; then - cat confcache >"$cache_file" - else - case $cache_file in #( - */* | ?:*) - mv -f confcache "$cache_file"$$ && - mv -f "$cache_file"$$ "$cache_file" ;; #( - *) - mv -f confcache "$cache_file" ;; - esac - fi - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -U= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - if test -n "$EXEEXT"; then - am__EXEEXT_TRUE= - am__EXEEXT_FALSE='#' -else - am__EXEEXT_TRUE='#' - am__EXEEXT_FALSE= -fi - -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - as_fn_error $? "conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then - as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${TESTSUBDIR_TRUE}" && test -z "${TESTSUBDIR_FALSE}"; then - as_fn_error $? "conditional \"TESTSUBDIR\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${MIPS_TRUE}" && test -z "${MIPS_FALSE}"; then - as_fn_error $? "conditional \"MIPS\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${SPARC_TRUE}" && test -z "${SPARC_FALSE}"; then - as_fn_error $? "conditional \"SPARC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${X86_TRUE}" && test -z "${X86_FALSE}"; then - as_fn_error $? "conditional \"X86\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${X86_FREEBSD_TRUE}" && test -z "${X86_FREEBSD_FALSE}"; then - as_fn_error $? "conditional \"X86_FREEBSD\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${X86_WIN32_TRUE}" && test -z "${X86_WIN32_FALSE}"; then - as_fn_error $? "conditional \"X86_WIN32\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${X86_WIN64_TRUE}" && test -z "${X86_WIN64_FALSE}"; then - as_fn_error $? "conditional \"X86_WIN64\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${X86_DARWIN_TRUE}" && test -z "${X86_DARWIN_FALSE}"; then - as_fn_error $? "conditional \"X86_DARWIN\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${ALPHA_TRUE}" && test -z "${ALPHA_FALSE}"; then - as_fn_error $? "conditional \"ALPHA\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${IA64_TRUE}" && test -z "${IA64_FALSE}"; then - as_fn_error $? "conditional \"IA64\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${M32R_TRUE}" && test -z "${M32R_FALSE}"; then - as_fn_error $? "conditional \"M32R\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${M68K_TRUE}" && test -z "${M68K_FALSE}"; then - as_fn_error $? "conditional \"M68K\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${MOXIE_TRUE}" && test -z "${MOXIE_FALSE}"; then - as_fn_error $? "conditional \"MOXIE\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${POWERPC_TRUE}" && test -z "${POWERPC_FALSE}"; then - as_fn_error $? "conditional \"POWERPC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${POWERPC_AIX_TRUE}" && test -z "${POWERPC_AIX_FALSE}"; then - as_fn_error $? "conditional \"POWERPC_AIX\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${POWERPC_DARWIN_TRUE}" && test -z "${POWERPC_DARWIN_FALSE}"; then - as_fn_error $? "conditional \"POWERPC_DARWIN\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${POWERPC_FREEBSD_TRUE}" && test -z "${POWERPC_FREEBSD_FALSE}"; then - as_fn_error $? "conditional \"POWERPC_FREEBSD\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${ARM_TRUE}" && test -z "${ARM_FALSE}"; then - as_fn_error $? "conditional \"ARM\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${AVR32_TRUE}" && test -z "${AVR32_FALSE}"; then - as_fn_error $? "conditional \"AVR32\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${LIBFFI_CRIS_TRUE}" && test -z "${LIBFFI_CRIS_FALSE}"; then - as_fn_error $? "conditional \"LIBFFI_CRIS\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${FRV_TRUE}" && test -z "${FRV_FALSE}"; then - as_fn_error $? "conditional \"FRV\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${S390_TRUE}" && test -z "${S390_FALSE}"; then - as_fn_error $? "conditional \"S390\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${X86_64_TRUE}" && test -z "${X86_64_FALSE}"; then - as_fn_error $? "conditional \"X86_64\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${SH_TRUE}" && test -z "${SH_FALSE}"; then - as_fn_error $? "conditional \"SH\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${SH64_TRUE}" && test -z "${SH64_FALSE}"; then - as_fn_error $? "conditional \"SH64\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${PA_LINUX_TRUE}" && test -z "${PA_LINUX_FALSE}"; then - as_fn_error $? "conditional \"PA_LINUX\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${PA_HPUX_TRUE}" && test -z "${PA_HPUX_FALSE}"; then - as_fn_error $? "conditional \"PA_HPUX\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${PA64_HPUX_TRUE}" && test -z "${PA64_HPUX_FALSE}"; then - as_fn_error $? "conditional \"PA64_HPUX\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - -if test -z "${FFI_EXEC_TRAMPOLINE_TABLE_TRUE}" && test -z "${FFI_EXEC_TRAMPOLINE_TABLE_FALSE}"; then - as_fn_error $? "conditional \"FFI_EXEC_TRAMPOLINE_TABLE\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${FFI_DEBUG_TRUE}" && test -z "${FFI_DEBUG_FALSE}"; then - as_fn_error $? "conditional \"FFI_DEBUG\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - -: "${CONFIG_STATUS=./config.status}" -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by libffi $as_me 3.0.10, which was -generated by GNU Autoconf 2.68. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - -case $ac_config_headers in *" -"*) set x $ac_config_headers; shift; ac_config_headers=$*;; -esac - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" -config_links="$ac_config_links" -config_commands="$ac_config_commands" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration links: -$config_links - -Configuration commands: -$config_commands - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -libffi config.status 3.0.10 -configured by $0, generated by GNU Autoconf 2.68, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2010 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -MKDIR_P='$MKDIR_P' -AWK='$AWK' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# -ax_enable_builddir_srcdir="$srcdir" # $srcdir -ax_enable_builddir_host="$HOST" # $HOST / $host -ax_enable_builddir_version="$VERSION" # $VERSION -ax_enable_builddir_package="$PACKAGE" # $PACKAGE -ax_enable_builddir_auxdir="$ax_enable_builddir_auxdir" # $AUX -ax_enable_builddir_sed="$ax_enable_builddir_sed" # $SED -ax_enable_builddir="$ax_enable_builddir" # $SUB - -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' -macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' -enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' -enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' -pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' -enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' -SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' -ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' -host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' -host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' -host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' -build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' -build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' -build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' -SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' -Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' -GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' -EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' -FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' -LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' -NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' -LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' -max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' -ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' -exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' -lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' -lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' -lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' -lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' -lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' -reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' -reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' -OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' -deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' -file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' -file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' -want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' -DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' -sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' -AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' -AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' -archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' -STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' -RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' -old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' -old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' -old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' -lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' -CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' -CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' -compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' -GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' -nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' -lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' -objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' -MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' -need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' -MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' -DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' -NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' -LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' -OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' -OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' -libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' -shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' -extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' -archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' -export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' -whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' -compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' -old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' -archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' -archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' -module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' -module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' -with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' -allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' -no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' -hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' -hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' -hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' -hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' -hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' -inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' -link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' -always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' -export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' -exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' -include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' -prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' -postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' -file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' -variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' -need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' -need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' -version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' -runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' -shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' -shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' -libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' -library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' -soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' -install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' -postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' -postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' -finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' -finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' -hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' -sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' -sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' -hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' -enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' -enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' -enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' -old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' -striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' - -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$1 -_LTECHO_EOF' -} - -# Quote evaled strings. -for var in SHELL \ -ECHO \ -SED \ -GREP \ -EGREP \ -FGREP \ -LD \ -NM \ -LN_S \ -lt_SP2NL \ -lt_NL2SP \ -reload_flag \ -OBJDUMP \ -deplibs_check_method \ -file_magic_cmd \ -file_magic_glob \ -want_nocaseglob \ -DLLTOOL \ -sharedlib_from_linklib_cmd \ -AR \ -AR_FLAGS \ -archiver_list_spec \ -STRIP \ -RANLIB \ -CC \ -CFLAGS \ -compiler \ -lt_cv_sys_global_symbol_pipe \ -lt_cv_sys_global_symbol_to_cdecl \ -lt_cv_sys_global_symbol_to_c_name_address \ -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ -nm_file_list_spec \ -lt_prog_compiler_no_builtin_flag \ -lt_prog_compiler_pic \ -lt_prog_compiler_wl \ -lt_prog_compiler_static \ -lt_cv_prog_compiler_c_o \ -need_locks \ -MANIFEST_TOOL \ -DSYMUTIL \ -NMEDIT \ -LIPO \ -OTOOL \ -OTOOL64 \ -shrext_cmds \ -export_dynamic_flag_spec \ -whole_archive_flag_spec \ -compiler_needs_object \ -with_gnu_ld \ -allow_undefined_flag \ -no_undefined_flag \ -hardcode_libdir_flag_spec \ -hardcode_libdir_flag_spec_ld \ -hardcode_libdir_separator \ -exclude_expsyms \ -include_expsyms \ -file_list_spec \ -variables_saved_for_relink \ -libname_spec \ -library_names_spec \ -soname_spec \ -install_override_mode \ -finish_eval \ -old_striplib \ -striplib; do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in reload_cmds \ -old_postinstall_cmds \ -old_postuninstall_cmds \ -old_archive_cmds \ -extract_expsyms_cmds \ -old_archive_from_new_cmds \ -old_archive_from_expsyms_cmds \ -archive_cmds \ -archive_expsym_cmds \ -module_cmds \ -module_expsym_cmds \ -export_symbols_cmds \ -prelink_cmds \ -postlink_cmds \ -postinstall_cmds \ -postuninstall_cmds \ -finish_cmds \ -sys_lib_search_path_spec \ -sys_lib_dlsearch_path_spec; do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -ac_aux_dir='$ac_aux_dir' -xsi_shell='$xsi_shell' -lt_shell_append='$lt_shell_append' - -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - - - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile' - - - -TARGETDIR="$TARGETDIR" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "fficonfig.h") CONFIG_HEADERS="$CONFIG_HEADERS fficonfig.h" ;; - "buildir") CONFIG_COMMANDS="$CONFIG_COMMANDS buildir" ;; - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; - "include") CONFIG_COMMANDS="$CONFIG_COMMANDS include" ;; - "src") CONFIG_COMMANDS="$CONFIG_COMMANDS src" ;; - "include/ffitarget.h") CONFIG_LINKS="$CONFIG_LINKS include/ffitarget.h:src/$TARGETDIR/ffitarget.h" ;; - "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; - "include/ffi.h") CONFIG_FILES="$CONFIG_FILES include/ffi.h" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "testsuite/Makefile") CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;; - "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; - "libffi.pc") CONFIG_FILES="$CONFIG_FILES libffi.pc" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= ac_tmp= - trap 'exit_status=$? - : "${ac_tmp:=$tmp}" - { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 -ac_tmp=$tmp - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$ac_tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$ac_tmp/defines.awk" <<\_ACAWK || -BEGIN { -_ACEOF - -# Transform confdefs.h into an awk script `defines.awk', embedded as -# here-document in config.status, that substitutes the proper values into -# config.h.in to produce config.h. - -# Create a delimiter string that does not exist in confdefs.h, to ease -# handling of long lines. -ac_delim='%!_!# ' -for ac_last_try in false false :; do - ac_tt=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_tt"; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -# For the awk script, D is an array of macro values keyed by name, -# likewise P contains macro parameters if any. Preserve backslash -# newline sequences. - -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -sed -n ' -s/.\{148\}/&'"$ac_delim"'/g -t rset -:rset -s/^[ ]*#[ ]*define[ ][ ]*/ / -t def -d -:def -s/\\$// -t bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3"/p -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p -d -:bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3\\\\\\n"\\/p -t cont -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p -t cont -d -:cont -n -s/.\{148\}/&'"$ac_delim"'/g -t clear -:clear -s/\\$// -t bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/"/p -d -:bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p -b cont -' >$CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { - line = \$ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$ac_tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$ac_tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -s&@MKDIR_P@&$ac_MKDIR_P&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ - >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ - "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$ac_tmp/stdin" - case $ac_file in - -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; - *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" - } >"$ac_tmp/config.h" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$ac_tmp/config.h" "$ac_file" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error $? "could not create -" "$LINENO" 5 - fi -# Compute "$ac_file"'s index in $config_headers. -_am_arg="$ac_file" -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || -$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$_am_arg" : 'X\(//\)[^/]' \| \ - X"$_am_arg" : 'X\(//\)$' \| \ - X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - :L) - # - # CONFIG_LINK - # - - if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then - : - else - # Prefer the file from the source tree if names are identical. - if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then - ac_source=$srcdir/$ac_source - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5 -$as_echo "$as_me: linking $ac_source to $ac_file" >&6;} - - if test ! -r "$ac_source"; then - as_fn_error $? "$ac_source: file not found" "$LINENO" 5 - fi - rm -f "$ac_file" - - # Try a relative symlink, then a hard link, then a copy. - case $ac_source in - [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;; - *) ac_rel_source=$ac_top_build_prefix$ac_source ;; - esac - ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || - ln "$ac_source" "$ac_file" 2>/dev/null || - cp -p "$ac_source" "$ac_file" || - as_fn_error $? "cannot link or copy $ac_source to $ac_file" "$LINENO" 5 - fi - ;; - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "buildir":C) ac_top_srcdir="$ax_enable_builddir_srcdir" - if test ".$ax_enable_builddir" = ".." ; then - if test -f "$top_srcdir/Makefile" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: skipping top_srcdir/Makefile - left untouched" >&5 -$as_echo "$as_me: skipping top_srcdir/Makefile - left untouched" >&6;} - else - { $as_echo "$as_me:${as_lineno-$LINENO}: skipping top_srcdir/Makefile - not created" >&5 -$as_echo "$as_me: skipping top_srcdir/Makefile - not created" >&6;} - fi - else - if test -f "$ac_top_srcdir/Makefile" ; then - a=`grep "^VERSION " "$ac_top_srcdir/Makefile"` ; b=`grep "^VERSION " Makefile` - test "$a" != "$b" && rm "$ac_top_srcdir/Makefile" - fi - if test -f "$ac_top_srcdir/Makefile" ; then - echo "$ac_top_srcdir/Makefile : $ac_top_srcdir/Makefile.in" > $tmp/conftemp.mk - echo " @ echo 'REMOVED,,,' >\$@" >> $tmp/conftemp.mk - eval "${MAKE-make} -f $tmp/conftemp.mk 2>/dev/null >/dev/null" - if grep '^REMOVED,,,' "$ac_top_srcdir/Makefile" >/dev/null - then rm $ac_top_srcdir/Makefile ; fi - cp $tmp/conftemp.mk $ac_top_srcdir/makefiles.mk~ ## DEBUGGING - fi - if test ! -f "$ac_top_srcdir/Makefile" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: create top_srcdir/Makefile guessed from local Makefile" >&5 -$as_echo "$as_me: create top_srcdir/Makefile guessed from local Makefile" >&6;} - x='`' ; cat >$tmp/conftemp.sed <<_EOF -/^\$/n -x -/^\$/bS -x -/\\\\\$/{H;d;} -{H;s/.*//;x;} -bM -:S -x -/\\\\\$/{h;d;} -{h;s/.*//;x;} -:M -s/\\(\\n\\) /\\1 /g -/^ /d -/^[ ]*[\\#]/d -/^VPATH *=/d -s/^srcdir *=.*/srcdir = ./ -s/^top_srcdir *=.*/top_srcdir = ./ -/[:=]/!d -/^\\./d -/ = /b -/ .= /b -/:/!b -s/:.*/:/ -s/ / /g -s/ \\([a-z][a-z-]*[a-zA-Z0-9]\\)\\([ :]\\)/ \\1 \\1-all\\2/g -s/^\\([a-z][a-z-]*[a-zA-Z0-9]\\)\\([ :]\\)/\\1 \\1-all\\2/ -s/ / /g -/^all all-all[ :]/i\\ -all-configured : all-all -s/ [a-zA-Z0-9-]*-all [a-zA-Z0-9-]*-all-all//g -/-all-all/d -a\\ - @ HOST="\$(HOST)\" \\\\\\ - ; test ".\$\$HOST" = "." && HOST=$x sh $ax_enable_builddir_auxdir/config.guess $x \\\\\\ - ; BUILD=$x grep "^#### \$\$HOST " Makefile | sed -e 's/.*|//' $x \\\\\\ - ; use=$x basename "\$\@" -all $x; n=$x echo \$\$BUILD | wc -w $x \\\\\\ - ; echo "MAKE \$\$HOST : \$\$n * \$\@"; if test "\$\$n" = "0" ; then : \\\\\\ - ; BUILD=$x grep "^####.*|" Makefile |tail -1| sed -e 's/.*|//' $x ; fi \\\\\\ - ; test ".\$\$BUILD" = "." && BUILD="." \\\\\\ - ; test "\$\$use" = "\$\@" && BUILD=$x echo "\$\$BUILD" | tail -1 $x \\\\\\ - ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\ - ; (cd "\$\$i" && test ! -f configure && \$(MAKE) \$\$use) || exit; done -/dist-all *:/a\\ - @ HOST="\$(HOST)\" \\\\\\ - ; test ".\$\$HOST" = "." && HOST=$x sh $ax_enable_builddir_auxdir/config.guess $x \\\\\\ - ; BUILD=$x grep "^#### \$\$HOST " Makefile | sed -e 's/.*|//' $x \\\\\\ - ; found=$x echo \$\$BUILD | wc -w $x \\\\\\ - ; echo "MAKE \$\$HOST : \$\$found \$(PACKAGE)-\$(VERSION).tar.*" \\\\\\ - ; if test "\$\$found" = "0" ; then : \\\\\\ - ; BUILD=$x grep "^#### .*|" Makefile |tail -1| sed -e 's/.*|//' $x \\\\\\ - ; fi ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\ - ; for f in \$\$i/\$(PACKAGE)-\$(VERSION).tar.* \\\\\\ - ; do test -f "\$\$f" && mv "\$\$f" \$(PUB). ; done ; break ; done -/dist-[a-zA-Z0-9]*-all *:/a\\ - @ HOST="\$(HOST)\" \\\\\\ - ; test ".\$\$HOST" = "." && HOST=$x sh ./config.guess $x \\\\\\ - ; BUILD=$x grep "^#### \$\$HOST " Makefile | sed -e 's/.*|//' $x \\\\\\ - ; found=$x echo \$\$BUILD | wc -w $x \\\\\\ - ; echo "MAKE \$\$HOST : \$\$found \$(PACKAGE)-\$(VERSION).*" \\\\\\ - ; if test "\$\$found" = "0" ; then : \\\\\\ - ; BUILD=$x grep "^#### .*|" Makefile |tail -1| sed -e 's/.*|//' $x \\\\\\ - ; fi ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\ - ; for f in \$\$i/\$(PACKAGE)-\$(VERSION).* \\\\\\ - ; do test -f "\$\$f" && mv "\$\$f" \$(PUB). ; done ; break ; done -/distclean-all *:/a\\ - @ HOST="\$(HOST)\" \\\\\\ - ; test ".\$\$HOST" = "." && HOST=$x sh $ax_enable_builddir_auxdir/config.guess $x \\\\\\ - ; BUILD=$x grep "^#### .*|" Makefile | sed -e 's/.*|//' $x \\\\\\ - ; use=$x basename "\$\@" -all $x; n=$x echo \$\$BUILD | wc -w $x \\\\\\ - ; echo "MAKE \$\$HOST : \$\$n * \$\@ (all local builds)" \\\\\\ - ; test ".\$\$BUILD" = "." && BUILD="." \\\\\\ - ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\ - ; echo "# rm -r \$\$i"; done ; echo "# (sleep 3)" ; sleep 3 \\\\\\ - ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\ - ; echo "\$\$i" | grep "^/" > /dev/null && continue \\\\\\ - ; echo "\$\$i" | grep "^../" > /dev/null && continue \\\\\\ - ; echo "rm -r \$\$i"; (rm -r "\$\$i") ; done ; rm Makefile -_EOF - cp "$tmp/conftemp.sed" "$ac_top_srcdir/makefile.sed~" ## DEBUGGING - $ax_enable_builddir_sed -f $tmp/conftemp.sed Makefile >$ac_top_srcdir/Makefile - if test -f "$ac_top_srcdir/Makefile.mk" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: extend top_srcdir/Makefile with top_srcdir/Makefile.mk" >&5 -$as_echo "$as_me: extend top_srcdir/Makefile with top_srcdir/Makefile.mk" >&6;} - cat $ac_top_srcdir/Makefile.mk >>$ac_top_srcdir/Makefile - fi ; xxxx="####" - echo "$xxxx CONFIGURATIONS FOR TOPLEVEL MAKEFILE: " >>$ac_top_srcdir/Makefile - # sanity check - if grep '^; echo "MAKE ' $ac_top_srcdir/Makefile >/dev/null ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: buggy sed found - it deletes tab in \"a\" text parts" >&5 -$as_echo "$as_me: buggy sed found - it deletes tab in \"a\" text parts" >&6;} - $ax_enable_builddir_sed -e '/^@ HOST=/s/^/ /' -e '/^; /s/^/ /' $ac_top_srcdir/Makefile \ - >$ac_top_srcdir/Makefile~ - (test -s $ac_top_srcdir/Makefile~ && mv $ac_top_srcdir/Makefile~ $ac_top_srcdir/Makefile) 2>/dev/null - fi - else - xxxx="\\#\\#\\#\\#" - # echo "/^$xxxx *$ax_enable_builddir_host /d" >$tmp/conftemp.sed - echo "s!^$xxxx [^|]* | *$ax_enable_builddir *\$!$xxxx ...... $ax_enable_builddir!" >$tmp/conftemp.sed - $ax_enable_builddir_sed -f "$tmp/conftemp.sed" "$ac_top_srcdir/Makefile" >$tmp/mkfile.tmp - cp "$tmp/conftemp.sed" "$ac_top_srcdir/makefiles.sed~" ## DEBUGGING - cp "$tmp/mkfile.tmp" "$ac_top_srcdir/makefiles.out~" ## DEBUGGING - if cmp -s "$ac_top_srcdir/Makefile" "$tmp/mkfile.tmp" 2>/dev/null ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: keeping top_srcdir/Makefile from earlier configure" >&5 -$as_echo "$as_me: keeping top_srcdir/Makefile from earlier configure" >&6;} - rm "$tmp/mkfile.tmp" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: reusing top_srcdir/Makefile from earlier configure" >&5 -$as_echo "$as_me: reusing top_srcdir/Makefile from earlier configure" >&6;} - mv "$tmp/mkfile.tmp" "$ac_top_srcdir/Makefile" - fi - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: build in $ax_enable_builddir (HOST=$ax_enable_builddir_host)" >&5 -$as_echo "$as_me: build in $ax_enable_builddir (HOST=$ax_enable_builddir_host)" >&6;} - xxxx="####" - echo "$xxxx" "$ax_enable_builddir_host" "|$ax_enable_builddir" >>$ac_top_srcdir/Makefile - fi - ;; - "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} - ;; - "libtool":C) - - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, -# Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - -# The names of the tagged configurations supported by this script. -available_tags="" - -# ### BEGIN LIBTOOL CONFIG - -# Which release of libtool.m4 was used? -macro_version=$macro_version -macro_revision=$macro_revision - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# What type of objects to build. -pic_mode=$pic_mode - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# An echo program that protects backslashes. -ECHO=$lt_ECHO - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="\$SED -e 1s/^X//" - -# A grep program that handles long lines. -GREP=$lt_GREP - -# An ERE matcher. -EGREP=$lt_EGREP - -# A literal string matcher. -FGREP=$lt_FGREP - -# A BSD- or MS-compatible name lister. -NM=$lt_NM - -# Whether we need soft or hard links. -LN_S=$lt_LN_S - -# What is the maximum length of a command? -max_cmd_len=$max_cmd_len - -# Object file suffix (normally "o"). -objext=$ac_objext - -# Executable file suffix (normally ""). -exeext=$exeext - -# whether the shell understands "unset". -lt_unset=$lt_unset - -# turn spaces into newlines. -SP2NL=$lt_lt_SP2NL - -# turn newlines into spaces. -NL2SP=$lt_lt_NL2SP - -# convert \$build file names to \$host format. -to_host_file_cmd=$lt_cv_to_host_file_cmd - -# convert \$build files to toolchain format. -to_tool_file_cmd=$lt_cv_to_tool_file_cmd - -# An object symbol dumper. -OBJDUMP=$lt_OBJDUMP - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method = "file_magic". -file_magic_cmd=$lt_file_magic_cmd - -# How to find potential files when deplibs_check_method = "file_magic". -file_magic_glob=$lt_file_magic_glob - -# Find potential files using nocaseglob when deplibs_check_method = "file_magic". -want_nocaseglob=$lt_want_nocaseglob - -# DLL creation program. -DLLTOOL=$lt_DLLTOOL - -# Command to associate shared and link libraries. -sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd - -# The archiver. -AR=$lt_AR - -# Flags to create an archive. -AR_FLAGS=$lt_AR_FLAGS - -# How to feed a file listing to the archiver. -archiver_list_spec=$lt_archiver_list_spec - -# A symbol stripping program. -STRIP=$lt_STRIP - -# Commands used to install an old-style archive. -RANLIB=$lt_RANLIB -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Whether to use a lock for old archive extraction. -lock_old_archive_extraction=$lock_old_archive_extraction - -# A C compiler. -LTCC=$lt_CC - -# LTCC compiler flags. -LTCFLAGS=$lt_CFLAGS - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration. -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair. -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# Transform the output of nm in a C name address pair when lib prefix is needed. -global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix - -# Specify filename containing input files for \$NM. -nm_file_list_spec=$lt_nm_file_list_spec - -# The root where to search for dependent libraries,and in which our libraries should be installed. -lt_sysroot=$lt_sysroot - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# Used to examine libraries when file_magic_cmd begins with "file". -MAGIC_CMD=$MAGIC_CMD - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Manifest tool. -MANIFEST_TOOL=$lt_MANIFEST_TOOL - -# Tool to manipulate archived DWARF debug symbol files on Mac OS X. -DSYMUTIL=$lt_DSYMUTIL - -# Tool to change global to local symbols on Mac OS X. -NMEDIT=$lt_NMEDIT - -# Tool to manipulate fat objects and archives on Mac OS X. -LIPO=$lt_LIPO - -# ldd/readelf like tool for Mach-O binaries on Mac OS X. -OTOOL=$lt_OTOOL - -# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. -OTOOL64=$lt_OTOOL64 - -# Old archive suffix (normally "a"). -libext=$libext - -# Shared library suffix (normally ".so"). -shrext_cmds=$lt_shrext_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at link time. -variables_saved_for_relink=$lt_variables_saved_for_relink - -# Do we need the "lib" prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Library versioning type. -version_type=$version_type - -# Shared library runtime path variable. -runpath_var=$runpath_var - -# Shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Permission mode override for installation of shared libraries. -install_override_mode=$lt_install_override_mode - -# Command to use after installation of a shared archive. -postinstall_cmds=$lt_postinstall_cmds - -# Command to use after uninstallation of a shared archive. -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# As "finish_cmds", except a single script fragment to be evaled but -# not shown. -finish_eval=$lt_finish_eval - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Compile-time system search path for libraries. -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - - -# The linker used to build libraries. -LD=$lt_LD - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds - -# A language specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU compiler? -with_gcc=$GCC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# If ld is used when linking, flag to hardcode \$libdir into a binary -# during linking. This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds - -# Commands necessary for finishing linking programs. -postlink_cmds=$lt_postlink_cmds - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - -ltmain="$ac_aux_dir/ltmain.sh" - - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - if test x"$xsi_shell" = xyes; then - sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ -func_dirname ()\ -{\ -\ case ${1} in\ -\ */*) func_dirname_result="${1%/*}${2}" ;;\ -\ * ) func_dirname_result="${3}" ;;\ -\ esac\ -} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_basename ()$/,/^} # func_basename /c\ -func_basename ()\ -{\ -\ func_basename_result="${1##*/}"\ -} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ -func_dirname_and_basename ()\ -{\ -\ case ${1} in\ -\ */*) func_dirname_result="${1%/*}${2}" ;;\ -\ * ) func_dirname_result="${3}" ;;\ -\ esac\ -\ func_basename_result="${1##*/}"\ -} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ -func_stripname ()\ -{\ -\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ -\ # positional parameters, so assign one to ordinary parameter first.\ -\ func_stripname_result=${3}\ -\ func_stripname_result=${func_stripname_result#"${1}"}\ -\ func_stripname_result=${func_stripname_result%"${2}"}\ -} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ -func_split_long_opt ()\ -{\ -\ func_split_long_opt_name=${1%%=*}\ -\ func_split_long_opt_arg=${1#*=}\ -} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ -func_split_short_opt ()\ -{\ -\ func_split_short_opt_arg=${1#??}\ -\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ -} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ -func_lo2o ()\ -{\ -\ case ${1} in\ -\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ -\ *) func_lo2o_result=${1} ;;\ -\ esac\ -} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_xform ()$/,/^} # func_xform /c\ -func_xform ()\ -{\ - func_xform_result=${1%.*}.lo\ -} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_arith ()$/,/^} # func_arith /c\ -func_arith ()\ -{\ - func_arith_result=$(( $* ))\ -} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_len ()$/,/^} # func_len /c\ -func_len ()\ -{\ - func_len_result=${#1}\ -} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - -fi - -if test x"$lt_shell_append" = xyes; then - sed -e '/^func_append ()$/,/^} # func_append /c\ -func_append ()\ -{\ - eval "${1}+=\\${2}"\ -} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ -func_append_quoted ()\ -{\ -\ func_quote_for_eval "${2}"\ -\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ -} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - # Save a `func_append' function call where possible by direct use of '+=' - sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -else - # Save a `func_append' function call even when '+=' is not available - sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -fi - -if test x"$_lt_function_replace_fail" = x":"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 -$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} -fi - - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - - ;; - "include":C) test -d include || mkdir include ;; - "src":C) -test -d src || mkdir src -test -d src/$TARGETDIR || mkdir src/$TARGETDIR - ;; - - esac -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit 1 -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/configure.ac b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/configure.ac deleted file mode 100644 index 2d92d33..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/configure.ac +++ /dev/null @@ -1,496 +0,0 @@ -dnl Process this with autoconf to create configure - -AC_PREREQ(2.63) - -AC_INIT([libffi], [3.0.10], [http://sourceware.org/libffi.html]) -AC_CONFIG_HEADERS([fficonfig.h]) - -AC_CANONICAL_SYSTEM -target_alias=${target_alias-$host_alias} - -. ${srcdir}/configure.host - -AX_ENABLE_BUILDDIR - -AM_INIT_AUTOMAKE - -# The same as in boehm-gc and libstdc++. Have to borrow it from there. -# We must force CC to /not/ be precious variables; otherwise -# the wrong, non-multilib-adjusted value will be used in multilibs. -# As a side effect, we have to subst CFLAGS ourselves. -# Also save and restore CFLAGS, since AC_PROG_CC will come up with -# defaults of its own if none are provided. - -m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS]) -m4_define([_AC_ARG_VAR_PRECIOUS],[]) -save_CFLAGS=$CFLAGS -AC_PROG_CC -CFLAGS=$save_CFLAGS -m4_undefine([_AC_ARG_VAR_PRECIOUS]) -m4_rename([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS]) - -AC_SUBST(CFLAGS) - -AM_PROG_AS -AM_PROG_CC_C_O -AC_PROG_LIBTOOL -AC_CONFIG_MACRO_DIR([m4]) - -AX_CC_MAXOPT -AX_CFLAGS_WARN_ALL -if test "x$GCC" = "xyes"; then - CFLAGS="$CFLAGS -fexceptions" -fi - -AM_MAINTAINER_MODE - -AC_CHECK_HEADERS(sys/mman.h) -AC_CHECK_FUNCS(mmap) -AC_FUNC_MMAP_BLACKLIST - -dnl The -no-testsuite modules omit the test subdir. -AM_CONDITIONAL(TESTSUBDIR, test -d $srcdir/testsuite) - -TARGETDIR="unknown" -case "$host" in - alpha*-*-*) - TARGET=ALPHA; TARGETDIR=alpha; - # Support 128-bit long double, changeable via command-line switch. - HAVE_LONG_DOUBLE='defined(__LONG_DOUBLE_128__)' - ;; - - arm*-*-*) - TARGET=ARM; TARGETDIR=arm - ;; - - amd64-*-freebsd* | amd64-*-openbsd*) - TARGET=X86_64; TARGETDIR=x86 - ;; - - amd64-*-freebsd*) - TARGET=X86_64; TARGETDIR=x86 - ;; - - avr32*-*-*) - TARGET=AVR32; TARGETDIR=avr32 - ;; - - cris-*-*) - TARGET=LIBFFI_CRIS; TARGETDIR=cris - ;; - - frv-*-*) - TARGET=FRV; TARGETDIR=frv - ;; - - hppa*-*-linux* | parisc*-*-linux* | hppa*-*-openbsd*) - TARGET=PA_LINUX; TARGETDIR=pa - ;; - hppa*64-*-hpux*) - TARGET=PA64_HPUX; TARGETDIR=pa - ;; - hppa*-*-hpux*) - TARGET=PA_HPUX; TARGETDIR=pa - ;; - - i?86-*-freebsd* | i?86-*-openbsd*) - TARGET=X86_FREEBSD; TARGETDIR=x86 - ;; - i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2* | i?86-*-interix*) - TARGET=X86_WIN32; TARGETDIR=x86 - # All mingw/cygwin/win32 builds require -no-undefined for sharedlib. - # We must also check with_cross_host to decide if this is a native - # or cross-build and select where to install dlls appropriately. - if test -n "$with_cross_host" && - test x"$with_cross_host" != x"no"; then - AM_LTLDFLAGS='-no-undefined -bindir "$(toolexeclibdir)"'; - else - AM_LTLDFLAGS='-no-undefined -bindir "$(bindir)"'; - fi - ;; - i?86-*-darwin*) - TARGET=X86_DARWIN; TARGETDIR=x86 - ;; - i?86-*-solaris2.1[[0-9]]*) - TARGET=X86_64; TARGETDIR=x86 - ;; - i?86-*-*) - TARGET=X86; TARGETDIR=x86 - ;; - - ia64*-*-*) - TARGET=IA64; TARGETDIR=ia64 - ;; - - m32r*-*-*) - TARGET=M32R; TARGETDIR=m32r - ;; - - m68k-*-*) - TARGET=M68K; TARGETDIR=m68k - ;; - - mips-sgi-irix5.* | mips-sgi-irix6.* | mips*-*-rtems*) - TARGET=MIPS; TARGETDIR=mips - ;; - mips*-*-linux* | mips*-*-openbsd*) - # Support 128-bit long double for NewABI. - HAVE_LONG_DOUBLE='defined(__mips64)' - TARGET=MIPS; TARGETDIR=mips - ;; - - powerpc*-*-linux* | powerpc-*-sysv*) - TARGET=POWERPC; TARGETDIR=powerpc - ;; - powerpc-*-beos*) - TARGET=POWERPC; TARGETDIR=powerpc - ;; - powerpc-*-darwin* | powerpc64-*-darwin*) - TARGET=POWERPC_DARWIN; TARGETDIR=powerpc - ;; - powerpc-*-aix* | rs6000-*-aix*) - TARGET=POWERPC_AIX; TARGETDIR=powerpc - ;; - powerpc-*-freebsd* | powerpc-*-openbsd*) - TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc - ;; - powerpc64-*-freebsd*) - TARGET=POWERPC; TARGETDIR=powerpc - ;; - powerpc*-*-rtems*) - TARGET=POWERPC; TARGETDIR=powerpc - ;; - - s390-*-* | s390x-*-*) - TARGET=S390; TARGETDIR=s390 - ;; - - sh-*-* | sh[[34]]*-*-*) - TARGET=SH; TARGETDIR=sh - ;; - sh64-*-* | sh5*-*-*) - TARGET=SH64; TARGETDIR=sh64 - ;; - - sparc*-*-*) - TARGET=SPARC; TARGETDIR=sparc - ;; - - x86_64-*-darwin*) - TARGET=X86_DARWIN; TARGETDIR=x86 - ;; - - x86_64-*-cygwin* | x86_64-*-mingw*) - TARGET=X86_WIN64; TARGETDIR=x86 - ;; - - x86_64-*-*) - TARGET=X86_64; TARGETDIR=x86 - ;; -esac - -AC_SUBST(AM_RUNTESTFLAGS) -AC_SUBST(AM_LTLDFLAGS) - -if test $TARGETDIR = unknown; then - AC_MSG_ERROR(["libffi has not been ported to $host."]) -fi - -AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS) -AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC) -AM_CONDITIONAL(X86, test x$TARGET = xX86) -AM_CONDITIONAL(X86_FREEBSD, test x$TARGET = xX86_FREEBSD) -AM_CONDITIONAL(X86_WIN32, test x$TARGET = xX86_WIN32) -AM_CONDITIONAL(X86_WIN64, test x$TARGET = xX86_WIN64) -AM_CONDITIONAL(X86_DARWIN, test x$TARGET = xX86_DARWIN) -AM_CONDITIONAL(ALPHA, test x$TARGET = xALPHA) -AM_CONDITIONAL(IA64, test x$TARGET = xIA64) -AM_CONDITIONAL(M32R, test x$TARGET = xM32R) -AM_CONDITIONAL(M68K, test x$TARGET = xM68K) -AM_CONDITIONAL(MOXIE, test x$TARGET = xMOXIE) -AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC) -AM_CONDITIONAL(POWERPC_AIX, test x$TARGET = xPOWERPC_AIX) -AM_CONDITIONAL(POWERPC_DARWIN, test x$TARGET = xPOWERPC_DARWIN) -AM_CONDITIONAL(POWERPC_FREEBSD, test x$TARGET = xPOWERPC_FREEBSD) -AM_CONDITIONAL(ARM, test x$TARGET = xARM) -AM_CONDITIONAL(AVR32, test x$TARGET = xAVR32) -AM_CONDITIONAL(LIBFFI_CRIS, test x$TARGET = xLIBFFI_CRIS) -AM_CONDITIONAL(FRV, test x$TARGET = xFRV) -AM_CONDITIONAL(S390, test x$TARGET = xS390) -AM_CONDITIONAL(X86_64, test x$TARGET = xX86_64) -AM_CONDITIONAL(SH, test x$TARGET = xSH) -AM_CONDITIONAL(SH64, test x$TARGET = xSH64) -AM_CONDITIONAL(PA_LINUX, test x$TARGET = xPA_LINUX) -AM_CONDITIONAL(PA_HPUX, test x$TARGET = xPA_HPUX) -AM_CONDITIONAL(PA64_HPUX, test x$TARGET = xPA64_HPUX) - -AC_HEADER_STDC -AC_CHECK_FUNCS(memcpy) -AC_FUNC_ALLOCA - -AC_CHECK_SIZEOF(double) -AC_CHECK_SIZEOF(long double) - -# Also AC_SUBST this variable for ffi.h. -if test -z "$HAVE_LONG_DOUBLE"; then - HAVE_LONG_DOUBLE=0 - if test $ac_cv_sizeof_double != $ac_cv_sizeof_long_double; then - if test $ac_cv_sizeof_long_double != 0; then - HAVE_LONG_DOUBLE=1 - AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the long double type and it is bigger than a double]) - fi - fi -fi -AC_SUBST(HAVE_LONG_DOUBLE) - -AC_C_BIGENDIAN - -AC_CACHE_CHECK([assembler .cfi pseudo-op support], - libffi_cv_as_cfi_pseudo_op, [ - libffi_cv_as_cfi_pseudo_op=unknown - AC_TRY_COMPILE([asm (".cfi_startproc\n\t.cfi_endproc");],, - [libffi_cv_as_cfi_pseudo_op=yes], - [libffi_cv_as_cfi_pseudo_op=no]) -]) -if test "x$libffi_cv_as_cfi_pseudo_op" = xyes; then - AC_DEFINE(HAVE_AS_CFI_PSEUDO_OP, 1, - [Define if your assembler supports .cfi_* directives.]) -fi - -if test x$TARGET = xSPARC; then - AC_CACHE_CHECK([assembler and linker support unaligned pc related relocs], - libffi_cv_as_sparc_ua_pcrel, [ - save_CFLAGS="$CFLAGS" - save_LDFLAGS="$LDFLAGS" - CFLAGS="$CFLAGS -fpic" - LDFLAGS="$LDFLAGS -shared" - AC_TRY_LINK([asm (".text; foo: nop; .data; .align 4; .byte 0; .uaword %r_disp32(foo); .text");],, - [libffi_cv_as_sparc_ua_pcrel=yes], - [libffi_cv_as_sparc_ua_pcrel=no]) - CFLAGS="$save_CFLAGS" - LDFLAGS="$save_LDFLAGS"]) - if test "x$libffi_cv_as_sparc_ua_pcrel" = xyes; then - AC_DEFINE(HAVE_AS_SPARC_UA_PCREL, 1, - [Define if your assembler and linker support unaligned PC relative relocs.]) - fi - - AC_CACHE_CHECK([assembler .register pseudo-op support], - libffi_cv_as_register_pseudo_op, [ - libffi_cv_as_register_pseudo_op=unknown - # Check if we have .register - AC_TRY_COMPILE([asm (".register %g2, #scratch");],, - [libffi_cv_as_register_pseudo_op=yes], - [libffi_cv_as_register_pseudo_op=no]) - ]) - if test "x$libffi_cv_as_register_pseudo_op" = xyes; then - AC_DEFINE(HAVE_AS_REGISTER_PSEUDO_OP, 1, - [Define if your assembler supports .register.]) - fi -fi - -if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64; then - AC_CACHE_CHECK([assembler supports pc related relocs], - libffi_cv_as_x86_pcrel, [ - libffi_cv_as_x86_pcrel=no - echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s - if $CC $CFLAGS -c conftest.s > /dev/null; then - libffi_cv_as_x86_pcrel=yes - fi - ]) - if test "x$libffi_cv_as_x86_pcrel" = xyes; then - AC_DEFINE(HAVE_AS_X86_PCREL, 1, - [Define if your assembler supports PC relative relocs.]) - fi - - AC_CACHE_CHECK([assembler .ascii pseudo-op support], - libffi_cv_as_ascii_pseudo_op, [ - libffi_cv_as_ascii_pseudo_op=unknown - # Check if we have .ascii - AC_TRY_COMPILE([asm (".ascii \\"string\\"");],, - [libffi_cv_as_ascii_pseudo_op=yes], - [libffi_cv_as_ascii_pseudo_op=no]) - ]) - if test "x$libffi_cv_as_ascii_pseudo_op" = xyes; then - AC_DEFINE(HAVE_AS_ASCII_PSEUDO_OP, 1, - [Define if your assembler supports .ascii.]) - fi - - AC_CACHE_CHECK([assembler .string pseudo-op support], - libffi_cv_as_string_pseudo_op, [ - libffi_cv_as_string_pseudo_op=unknown - # Check if we have .string - AC_TRY_COMPILE([asm (".string \\"string\\"");],, - [libffi_cv_as_string_pseudo_op=yes], - [libffi_cv_as_string_pseudo_op=no]) - ]) - if test "x$libffi_cv_as_string_pseudo_op" = xyes; then - AC_DEFINE(HAVE_AS_STRING_PSEUDO_OP, 1, - [Define if your assembler supports .string.]) - fi -fi - -if test x$TARGET = xX86_WIN64; then - LT_SYS_SYMBOL_USCORE - if test "x$sys_symbol_underscore" = xyes; then - AC_DEFINE(SYMBOL_UNDERSCORE, 1, [Define if symbols are underscored.]) - fi -fi - - -FFI_EXEC_TRAMPOLINE_TABLE=0 -case "$target" in - *arm*-apple-darwin*) - FFI_EXEC_TRAMPOLINE_TABLE=1 - AC_DEFINE(FFI_EXEC_TRAMPOLINE_TABLE, 1, - [Cannot use PROT_EXEC on this target, so, we revert to - alternative means]) - ;; - *-apple-darwin10* | *-*-freebsd* | *-*-openbsd* | *-pc-solaris*) - AC_DEFINE(FFI_MMAP_EXEC_WRIT, 1, - [Cannot use malloc on this target, so, we revert to - alternative means]) - ;; -esac -AM_CONDITIONAL(FFI_EXEC_TRAMPOLINE_TABLE, test x$FFI_EXEC_TRAMPOLINE_TABLE = x1) -AC_SUBST(FFI_EXEC_TRAMPOLINE_TABLE) - -if test x$TARGET = xX86_64; then - AC_CACHE_CHECK([assembler supports unwind section type], - libffi_cv_as_x86_64_unwind_section_type, [ - libffi_cv_as_x86_64_unwind_section_type=yes - echo '.section .eh_frame,"a",@unwind' > conftest.s - if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then - libffi_cv_as_x86_64_unwind_section_type=no - fi - ]) - if test "x$libffi_cv_as_x86_64_unwind_section_type" = xyes; then - AC_DEFINE(HAVE_AS_X86_64_UNWIND_SECTION_TYPE, 1, - [Define if your assembler supports unwind section type.]) - fi -fi - -if test "x$GCC" = "xyes"; then - AC_CACHE_CHECK([whether .eh_frame section should be read-only], - libffi_cv_ro_eh_frame, [ - libffi_cv_ro_eh_frame=no - echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c - if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then - if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then - libffi_cv_ro_eh_frame=yes - elif grep '.section.*eh_frame.*#alloc' conftest.c \ - | grep -v '#write' > /dev/null; then - libffi_cv_ro_eh_frame=yes - fi - fi - rm -f conftest.* - ]) - if test "x$libffi_cv_ro_eh_frame" = xyes; then - AC_DEFINE(HAVE_RO_EH_FRAME, 1, - [Define if .eh_frame sections should be read-only.]) - AC_DEFINE(EH_FRAME_FLAGS, "a", - [Define to the flags needed for the .section .eh_frame directive. ]) - else - AC_DEFINE(EH_FRAME_FLAGS, "aw", - [Define to the flags needed for the .section .eh_frame directive. ]) - fi - - AC_CACHE_CHECK([for __attribute__((visibility("hidden")))], - libffi_cv_hidden_visibility_attribute, [ - echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1 ; }' > conftest.c - libffi_cv_hidden_visibility_attribute=no - if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then - if grep '\.hidden.*foo' conftest.s >/dev/null; then - libffi_cv_hidden_visibility_attribute=yes - fi - fi - rm -f conftest.* - ]) - if test $libffi_cv_hidden_visibility_attribute = yes; then - AC_DEFINE(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE, 1, - [Define if __attribute__((visibility("hidden"))) is supported.]) - fi -fi - -AH_BOTTOM([ -#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE -#ifdef LIBFFI_ASM -#define FFI_HIDDEN(name) .hidden name -#else -#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) -#endif -#else -#ifdef LIBFFI_ASM -#define FFI_HIDDEN(name) -#else -#define FFI_HIDDEN -#endif -#endif -]) - -AC_SUBST(TARGET) -AC_SUBST(TARGETDIR) - -AC_SUBST(SHELL) - -AC_ARG_ENABLE(debug, -[ --enable-debug debugging mode], - if test "$enable_debug" = "yes"; then - AC_DEFINE(FFI_DEBUG, 1, [Define this if you want extra debugging.]) - fi) -AM_CONDITIONAL(FFI_DEBUG, test "$enable_debug" = "yes") - -AC_ARG_ENABLE(structs, -[ --disable-structs omit code for struct support], - if test "$enable_structs" = "no"; then - AC_DEFINE(FFI_NO_STRUCTS, 1, [Define this is you do not want support for aggregate types.]) - fi) - -AC_ARG_ENABLE(raw-api, -[ --disable-raw-api make the raw api unavailable], - if test "$enable_raw_api" = "no"; then - AC_DEFINE(FFI_NO_RAW_API, 1, [Define this is you do not want support for the raw API.]) - fi) - -AC_ARG_ENABLE(purify-safety, -[ --enable-purify-safety purify-safe mode], - if test "$enable_purify_safety" = "yes"; then - AC_DEFINE(USING_PURIFY, 1, [Define this if you are using Purify and want to suppress spurious messages.]) - fi) - -# These variables are only ever used when we cross-build to X86_WIN32. -# And we only support this with GCC, so... -if test x"$GCC" != x"no"; then - if test -n "$with_cross_host" && - test x"$with_cross_host" != x"no"; then - toolexecdir='$(exec_prefix)/$(target_alias)' - toolexeclibdir='$(toolexecdir)/lib' - else - toolexecdir='$(libdir)/gcc-lib/$(target_alias)' - toolexeclibdir='$(libdir)' - fi - multi_os_directory=`$CC -print-multi-os-directory` - case $multi_os_directory in - .) ;; # Avoid trailing /. - *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;; - esac - AC_SUBST(toolexecdir) - AC_SUBST(toolexeclibdir) -fi - -if test "${multilib}" = "yes"; then - multilib_arg="--enable-multilib" -else - multilib_arg= -fi - -AC_CONFIG_COMMANDS(include, [test -d include || mkdir include]) -AC_CONFIG_COMMANDS(src, [ -test -d src || mkdir src -test -d src/$TARGETDIR || mkdir src/$TARGETDIR -], [TARGETDIR="$TARGETDIR"]) - -AC_CONFIG_LINKS(include/ffitarget.h:src/$TARGETDIR/ffitarget.h) - -AC_CONFIG_FILES(include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc) - -AC_OUTPUT diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/configure.host b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/configure.host deleted file mode 100644 index f52457b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/configure.host +++ /dev/null @@ -1,11 +0,0 @@ -# configure.host -# -# This shell script handles all host based configuration for libffi. -# - -# THIS TABLE IS SORTED. KEEP IT THAT WAY. -case "${host}" in - frv*-elf) - LDFLAGS=`echo $LDFLAGS | sed "s/\-B[^ ]*libgloss\/frv\///"`\ -B`pwd`/../libgloss/frv/ - ;; -esac diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/depcomp b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/depcomp deleted file mode 100755 index df8eea7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/depcomp +++ /dev/null @@ -1,630 +0,0 @@ -#! /bin/sh -# depcomp - compile a program generating dependencies as side-effects - -scriptversion=2009-04-28.21; # UTC - -# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free -# Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Originally written by Alexandre Oliva . - -case $1 in - '') - echo "$0: No command. Try \`$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: depcomp [--help] [--version] PROGRAM [ARGS] - -Run PROGRAMS ARGS to compile a file, generating dependencies -as side-effects. - -Environment variables: - depmode Dependency tracking mode. - source Source file read by `PROGRAMS ARGS'. - object Object file output by `PROGRAMS ARGS'. - DEPDIR directory where to store dependencies. - depfile Dependency file to output. - tmpdepfile Temporary file to use when outputing dependencies. - libtool Whether libtool is used (yes/no). - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "depcomp $scriptversion" - exit $? - ;; -esac - -if test -z "$depmode" || test -z "$source" || test -z "$object"; then - echo "depcomp: Variables source, object and depmode must be set" 1>&2 - exit 1 -fi - -# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. -depfile=${depfile-`echo "$object" | - sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} -tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} - -rm -f "$tmpdepfile" - -# Some modes work just like other modes, but use different flags. We -# parameterize here, but still list the modes in the big case below, -# to make depend.m4 easier to write. Note that we *cannot* use a case -# here, because this file can only contain one case statement. -if test "$depmode" = hp; then - # HP compiler uses -M and no extra arg. - gccflag=-M - depmode=gcc -fi - -if test "$depmode" = dashXmstdout; then - # This is just like dashmstdout with a different argument. - dashmflag=-xM - depmode=dashmstdout -fi - -cygpath_u="cygpath -u -f -" -if test "$depmode" = msvcmsys; then - # This is just like msvisualcpp but w/o cygpath translation. - # Just convert the backslash-escaped backslashes to single forward - # slashes to satisfy depend.m4 - cygpath_u="sed s,\\\\\\\\,/,g" - depmode=msvisualcpp -fi - -case "$depmode" in -gcc3) -## gcc 3 implements dependency tracking that does exactly what -## we want. Yay! Note: for some reason libtool 1.4 doesn't like -## it if -MD -MP comes after the -MF stuff. Hmm. -## Unfortunately, FreeBSD c89 acceptance of flags depends upon -## the command line argument order; so add the flags where they -## appear in depend2.am. Note that the slowdown incurred here -## affects only configure: in makefiles, %FASTDEP% shortcuts this. - for arg - do - case $arg in - -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; - *) set fnord "$@" "$arg" ;; - esac - shift # fnord - shift # $arg - done - "$@" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - mv "$tmpdepfile" "$depfile" - ;; - -gcc) -## There are various ways to get dependency output from gcc. Here's -## why we pick this rather obscure method: -## - Don't want to use -MD because we'd like the dependencies to end -## up in a subdir. Having to rename by hand is ugly. -## (We might end up doing this anyway to support other compilers.) -## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like -## -MM, not -M (despite what the docs say). -## - Using -M directly means running the compiler twice (even worse -## than renaming). - if test -z "$gccflag"; then - gccflag=-MD, - fi - "$@" -Wp,"$gccflag$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -## The second -e expression handles DOS-style file names with drive letters. - sed -e 's/^[^:]*: / /' \ - -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" -## This next piece of magic avoids the `deleted header file' problem. -## The problem is that when a header file which appears in a .P file -## is deleted, the dependency causes make to die (because there is -## typically no way to rebuild the header). We avoid this by adding -## dummy dependencies for each header file. Too bad gcc doesn't do -## this for us directly. - tr ' ' ' -' < "$tmpdepfile" | -## Some versions of gcc put a space before the `:'. On the theory -## that the space means something, we add a space to the output as -## well. -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -sgi) - if test "$libtool" = yes; then - "$@" "-Wp,-MDupdate,$tmpdepfile" - else - "$@" -MDupdate "$tmpdepfile" - fi - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - - if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files - echo "$object : \\" > "$depfile" - - # Clip off the initial element (the dependent). Don't try to be - # clever and replace this with sed code, as IRIX sed won't handle - # lines with more than a fixed number of characters (4096 in - # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; - # the IRIX cc adds comments like `#:fec' to the end of the - # dependency line. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ - tr ' -' ' ' >> "$depfile" - echo >> "$depfile" - - # The second pass generates a dummy entry for each header file. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> "$depfile" - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -aix) - # The C for AIX Compiler uses -M and outputs the dependencies - # in a .u file. In older versions, this file always lives in the - # current directory. Also, the AIX compiler puts `$object:' at the - # start of each line; $object doesn't have directory information. - # Version 6 uses the directory in both cases. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.u - tmpdepfile2=$base.u - tmpdepfile3=$dir.libs/$base.u - "$@" -Wc,-M - else - tmpdepfile1=$dir$base.u - tmpdepfile2=$dir$base.u - tmpdepfile3=$dir$base.u - "$@" -M - fi - stat=$? - - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - # Each line is of the form `foo.o: dependent.h'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a tab and a space in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -icc) - # Intel's C compiler understands `-MD -MF file'. However on - # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c - # ICC 7.0 will fill foo.d with something like - # foo.o: sub/foo.c - # foo.o: sub/foo.h - # which is wrong. We want: - # sub/foo.o: sub/foo.c - # sub/foo.o: sub/foo.h - # sub/foo.c: - # sub/foo.h: - # ICC 7.1 will output - # foo.o: sub/foo.c sub/foo.h - # and will wrap long lines using \ : - # foo.o: sub/foo.c ... \ - # sub/foo.h ... \ - # ... - - "$@" -MD -MF "$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - # Each line is of the form `foo.o: dependent.h', - # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process this invocation - # correctly. Breaking it into two sed invocations is a workaround. - sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | - sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp2) - # The "hp" stanza above does not work with aCC (C++) and HP's ia64 - # compilers, which have integrated preprocessors. The correct option - # to use with these is +Maked; it writes dependencies to a file named - # 'foo.d', which lands next to the object file, wherever that - # happens to be. - # Much of this is similar to the tru64 case; see comments there. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir.libs/$base.d - "$@" -Wc,+Maked - else - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir$base.d - "$@" +Maked - fi - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" - # Add `dependent.h:' lines. - sed -ne '2,${ - s/^ *// - s/ \\*$// - s/$/:/ - p - }' "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" "$tmpdepfile2" - ;; - -tru64) - # The Tru64 compiler uses -MD to generate dependencies as a side - # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. - # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put - # dependencies in `foo.d' instead, so we check for that too. - # Subdirectories are respected. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - - if test "$libtool" = yes; then - # With Tru64 cc, shared objects can also be used to make a - # static library. This mechanism is used in libtool 1.4 series to - # handle both shared and static libraries in a single compilation. - # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. - # - # With libtool 1.5 this exception was removed, and libtool now - # generates 2 separate objects for the 2 libraries. These two - # compilations output dependencies in $dir.libs/$base.o.d and - # in $dir$base.o.d. We have to check for both files, because - # one of the two compilations can be disabled. We should prefer - # $dir$base.o.d over $dir.libs/$base.o.d because the latter is - # automatically cleaned when .libs/ is deleted, while ignoring - # the former would cause a distcleancheck panic. - tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 - tmpdepfile2=$dir$base.o.d # libtool 1.5 - tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 - tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 - "$@" -Wc,-MD - else - tmpdepfile1=$dir$base.o.d - tmpdepfile2=$dir$base.d - tmpdepfile3=$dir$base.d - tmpdepfile4=$dir$base.d - "$@" -MD - fi - - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a tab and a space in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -#nosideeffect) - # This comment above is used by automake to tell side-effect - # dependency tracking mechanisms from slower ones. - -dashmstdout) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - # Remove `-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - test -z "$dashmflag" && dashmflag=-M - # Require at least two characters before searching for `:' - # in the target name. This is to cope with DOS-style filenames: - # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. - "$@" $dashmflag | - sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - tr ' ' ' -' < "$tmpdepfile" | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -dashXmstdout) - # This case only exists to satisfy depend.m4. It is never actually - # run, as this mode is specially recognized in the preamble. - exit 1 - ;; - -makedepend) - "$@" || exit $? - # Remove any Libtool call - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - # X makedepend - shift - cleared=no eat=no - for arg - do - case $cleared in - no) - set ""; shift - cleared=yes ;; - esac - if test $eat = yes; then - eat=no - continue - fi - case "$arg" in - -D*|-I*) - set fnord "$@" "$arg"; shift ;; - # Strip any option that makedepend may not understand. Remove - # the object too, otherwise makedepend will parse it as a source file. - -arch) - eat=yes ;; - -*|$object) - ;; - *) - set fnord "$@" "$arg"; shift ;; - esac - done - obj_suffix=`echo "$object" | sed 's/^.*\././'` - touch "$tmpdepfile" - ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - sed '1,2d' "$tmpdepfile" | tr ' ' ' -' | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" "$tmpdepfile".bak - ;; - -cpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - # Remove `-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - "$@" -E | - sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | - sed '$ s: \\$::' > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - cat < "$tmpdepfile" >> "$depfile" - sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvisualcpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - IFS=" " - for arg - do - case "$arg" in - -o) - shift - ;; - $object) - shift - ;; - "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") - set fnord "$@" - shift - shift - ;; - *) - set fnord "$@" "$arg" - shift - shift - ;; - esac - done - "$@" -E 2>/dev/null | - sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" - echo " " >> "$depfile" - sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvcmsys) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -none) - exec "$@" - ;; - -*) - echo "Unknown depmode $depmode" 1>&2 - exit 1 - ;; -esac - -exit 0 - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/doc/libffi.info b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/doc/libffi.info deleted file mode 100644 index 449320c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/doc/libffi.info +++ /dev/null @@ -1,593 +0,0 @@ -This is ../libffi/doc/libffi.info, produced by makeinfo version 4.13 -from ../libffi/doc/libffi.texi. - -This manual is for Libffi, a portable foreign-function interface -library. - - Copyright (C) 2008, 2010 Red Hat, Inc. - - Permission is granted to copy, distribute and/or modify this - document under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2, or - (at your option) any later version. A copy of the license is - included in the section entitled "GNU General Public License". - - -INFO-DIR-SECTION Development -START-INFO-DIR-ENTRY -* libffi: (libffi). Portable foreign-function interface library. -END-INFO-DIR-ENTRY - - -File: libffi.info, Node: Top, Next: Introduction, Up: (dir) - -libffi -****** - -This manual is for Libffi, a portable foreign-function interface -library. - - Copyright (C) 2008, 2010 Red Hat, Inc. - - Permission is granted to copy, distribute and/or modify this - document under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2, or - (at your option) any later version. A copy of the license is - included in the section entitled "GNU General Public License". - - -* Menu: - -* Introduction:: What is libffi? -* Using libffi:: How to use libffi. -* Missing Features:: Things libffi can't do. -* Index:: Index. - - -File: libffi.info, Node: Introduction, Next: Using libffi, Prev: Top, Up: Top - -1 What is libffi? -***************** - -Compilers for high level languages generate code that follow certain -conventions. These conventions are necessary, in part, for separate -compilation to work. One such convention is the "calling convention". -The calling convention is a set of assumptions made by the compiler -about where function arguments will be found on entry to a function. A -calling convention also specifies where the return value for a function -is found. The calling convention is also sometimes called the "ABI" or -"Application Binary Interface". - - Some programs may not know at the time of compilation what arguments -are to be passed to a function. For instance, an interpreter may be -told at run-time about the number and types of arguments used to call a -given function. `Libffi' can be used in such programs to provide a -bridge from the interpreter program to compiled code. - - The `libffi' library provides a portable, high level programming -interface to various calling conventions. This allows a programmer to -call any function specified by a call interface description at run time. - - FFI stands for Foreign Function Interface. A foreign function -interface is the popular name for the interface that allows code -written in one language to call code written in another language. The -`libffi' library really only provides the lowest, machine dependent -layer of a fully featured foreign function interface. A layer must -exist above `libffi' that handles type conversions for values passed -between the two languages. - - -File: libffi.info, Node: Using libffi, Next: Missing Features, Prev: Introduction, Up: Top - -2 Using libffi -************** - -* Menu: - -* The Basics:: The basic libffi API. -* Simple Example:: A simple example. -* Types:: libffi type descriptions. -* Multiple ABIs:: Different passing styles on one platform. -* The Closure API:: Writing a generic function. -* Closure Example:: A closure example. - - -File: libffi.info, Node: The Basics, Next: Simple Example, Up: Using libffi - -2.1 The Basics -============== - -`Libffi' assumes that you have a pointer to the function you wish to -call and that you know the number and types of arguments to pass it, as -well as the return type of the function. - - The first thing you must do is create an `ffi_cif' object that -matches the signature of the function you wish to call. This is a -separate step because it is common to make multiple calls using a -single `ffi_cif'. The "cif" in `ffi_cif' stands for Call InterFace. -To prepare a call interface object, use the function `ffi_prep_cif'. - - -- Function: ffi_status ffi_prep_cif (ffi_cif *CIF, ffi_abi ABI, - unsigned int NARGS, ffi_type *RTYPE, ffi_type **ARGTYPES) - This initializes CIF according to the given parameters. - - ABI is the ABI to use; normally `FFI_DEFAULT_ABI' is what you - want. *note Multiple ABIs:: for more information. - - NARGS is the number of arguments that this function accepts. - `libffi' does not yet handle varargs functions; see *note Missing - Features:: for more information. - - RTYPE is a pointer to an `ffi_type' structure that describes the - return type of the function. *Note Types::. - - ARGTYPES is a vector of `ffi_type' pointers. ARGTYPES must have - NARGS elements. If NARGS is 0, this argument is ignored. - - `ffi_prep_cif' returns a `libffi' status code, of type - `ffi_status'. This will be either `FFI_OK' if everything worked - properly; `FFI_BAD_TYPEDEF' if one of the `ffi_type' objects is - incorrect; or `FFI_BAD_ABI' if the ABI parameter is invalid. - - To call a function using an initialized `ffi_cif', use the -`ffi_call' function: - - -- Function: void ffi_call (ffi_cif *CIF, void *FN, void *RVALUE, void - **AVALUES) - This calls the function FN according to the description given in - CIF. CIF must have already been prepared using `ffi_prep_cif'. - - RVALUE is a pointer to a chunk of memory that will hold the result - of the function call. This must be large enough to hold the - result and must be suitably aligned; it is the caller's - responsibility to ensure this. If CIF declares that the function - returns `void' (using `ffi_type_void'), then RVALUE is ignored. - If RVALUE is `NULL', then the return value is discarded. - - AVALUES is a vector of `void *' pointers that point to the memory - locations holding the argument values for a call. If CIF declares - that the function has no arguments (i.e., NARGS was 0), then - AVALUES is ignored. Note that argument values may be modified by - the callee (for instance, structs passed by value); the burden of - copying pass-by-value arguments is placed on the caller. - - -File: libffi.info, Node: Simple Example, Next: Types, Prev: The Basics, Up: Using libffi - -2.2 Simple Example -================== - -Here is a trivial example that calls `puts' a few times. - - #include - #include - - int main() - { - ffi_cif cif; - ffi_type *args[1]; - void *values[1]; - char *s; - int rc; - - /* Initialize the argument info vectors */ - args[0] = &ffi_type_pointer; - values[0] = &s; - - /* Initialize the cif */ - if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_uint, args) == FFI_OK) - { - s = "Hello World!"; - ffi_call(&cif, puts, &rc, values); - /* rc now holds the result of the call to puts */ - - /* values holds a pointer to the function's arg, so to - call puts() again all we need to do is change the - value of s */ - s = "This is cool!"; - ffi_call(&cif, puts, &rc, values); - } - - return 0; - } - - -File: libffi.info, Node: Types, Next: Multiple ABIs, Prev: Simple Example, Up: Using libffi - -2.3 Types -========= - -* Menu: - -* Primitive Types:: Built-in types. -* Structures:: Structure types. -* Type Example:: Structure type example. - - -File: libffi.info, Node: Primitive Types, Next: Structures, Up: Types - -2.3.1 Primitive Types ---------------------- - -`Libffi' provides a number of built-in type descriptors that can be -used to describe argument and return types: - -`ffi_type_void' - The type `void'. This cannot be used for argument types, only for - return values. - -`ffi_type_uint8' - An unsigned, 8-bit integer type. - -`ffi_type_sint8' - A signed, 8-bit integer type. - -`ffi_type_uint16' - An unsigned, 16-bit integer type. - -`ffi_type_sint16' - A signed, 16-bit integer type. - -`ffi_type_uint32' - An unsigned, 32-bit integer type. - -`ffi_type_sint32' - A signed, 32-bit integer type. - -`ffi_type_uint64' - An unsigned, 64-bit integer type. - -`ffi_type_sint64' - A signed, 64-bit integer type. - -`ffi_type_float' - The C `float' type. - -`ffi_type_double' - The C `double' type. - -`ffi_type_uchar' - The C `unsigned char' type. - -`ffi_type_schar' - The C `signed char' type. (Note that there is not an exact - equivalent to the C `char' type in `libffi'; ordinarily you should - either use `ffi_type_schar' or `ffi_type_uchar' depending on - whether `char' is signed.) - -`ffi_type_ushort' - The C `unsigned short' type. - -`ffi_type_sshort' - The C `short' type. - -`ffi_type_uint' - The C `unsigned int' type. - -`ffi_type_sint' - The C `int' type. - -`ffi_type_ulong' - The C `unsigned long' type. - -`ffi_type_slong' - The C `long' type. - -`ffi_type_longdouble' - On platforms that have a C `long double' type, this is defined. - On other platforms, it is not. - -`ffi_type_pointer' - A generic `void *' pointer. You should use this for all pointers, - regardless of their real type. - - Each of these is of type `ffi_type', so you must take the address -when passing to `ffi_prep_cif'. - - -File: libffi.info, Node: Structures, Next: Type Example, Prev: Primitive Types, Up: Types - -2.3.2 Structures ----------------- - -Although `libffi' has no special support for unions or bit-fields, it -is perfectly happy passing structures back and forth. You must first -describe the structure to `libffi' by creating a new `ffi_type' object -for it. - - -- ffi_type: - The `ffi_type' has the following members: - `size_t size' - This is set by `libffi'; you should initialize it to zero. - - `unsigned short alignment' - This is set by `libffi'; you should initialize it to zero. - - `unsigned short type' - For a structure, this should be set to `FFI_TYPE_STRUCT'. - - `ffi_type **elements' - This is a `NULL'-terminated array of pointers to `ffi_type' - objects. There is one element per field of the struct. - - -File: libffi.info, Node: Type Example, Prev: Structures, Up: Types - -2.3.3 Type Example ------------------- - -The following example initializes a `ffi_type' object representing the -`tm' struct from Linux's `time.h'. - - Here is how the struct is defined: - - struct tm { - int tm_sec; - int tm_min; - int tm_hour; - int tm_mday; - int tm_mon; - int tm_year; - int tm_wday; - int tm_yday; - int tm_isdst; - /* Those are for future use. */ - long int __tm_gmtoff__; - __const char *__tm_zone__; - }; - - Here is the corresponding code to describe this struct to `libffi': - - { - ffi_type tm_type; - ffi_type *tm_type_elements[12]; - int i; - - tm_type.size = tm_type.alignment = 0; - tm_type.elements = &tm_type_elements; - - for (i = 0; i < 9; i++) - tm_type_elements[i] = &ffi_type_sint; - - tm_type_elements[9] = &ffi_type_slong; - tm_type_elements[10] = &ffi_type_pointer; - tm_type_elements[11] = NULL; - - /* tm_type can now be used to represent tm argument types and - return types for ffi_prep_cif() */ - } - - -File: libffi.info, Node: Multiple ABIs, Next: The Closure API, Prev: Types, Up: Using libffi - -2.4 Multiple ABIs -================= - -A given platform may provide multiple different ABIs at once. For -instance, the x86 platform has both `stdcall' and `fastcall' functions. - - `libffi' provides some support for this. However, this is -necessarily platform-specific. - - -File: libffi.info, Node: The Closure API, Next: Closure Example, Prev: Multiple ABIs, Up: Using libffi - -2.5 The Closure API -=================== - -`libffi' also provides a way to write a generic function - a function -that can accept and decode any combination of arguments. This can be -useful when writing an interpreter, or to provide wrappers for -arbitrary functions. - - This facility is called the "closure API". Closures are not -supported on all platforms; you can check the `FFI_CLOSURES' define to -determine whether they are supported on the current platform. - - Because closures work by assembling a tiny function at runtime, they -require special allocation on platforms that have a non-executable -heap. Memory management for closures is handled by a pair of functions: - - -- Function: void *ffi_closure_alloc (size_t SIZE, void **CODE) - Allocate a chunk of memory holding SIZE bytes. This returns a - pointer to the writable address, and sets *CODE to the - corresponding executable address. - - SIZE should be sufficient to hold a `ffi_closure' object. - - -- Function: void ffi_closure_free (void *WRITABLE) - Free memory allocated using `ffi_closure_alloc'. The argument is - the writable address that was returned. - - Once you have allocated the memory for a closure, you must construct -a `ffi_cif' describing the function call. Finally you can prepare the -closure function: - - -- Function: ffi_status ffi_prep_closure_loc (ffi_closure *CLOSURE, - ffi_cif *CIF, void (*FUN) (ffi_cif *CIF, void *RET, void - **ARGS, void *USER_DATA), void *USER_DATA, void *CODELOC) - Prepare a closure function. - - CLOSURE is the address of a `ffi_closure' object; this is the - writable address returned by `ffi_closure_alloc'. - - CIF is the `ffi_cif' describing the function parameters. - - USER_DATA is an arbitrary datum that is passed, uninterpreted, to - your closure function. - - CODELOC is the executable address returned by `ffi_closure_alloc'. - - FUN is the function which will be called when the closure is - invoked. It is called with the arguments: - CIF - The `ffi_cif' passed to `ffi_prep_closure_loc'. - - RET - A pointer to the memory used for the function's return value. - FUN must fill this, unless the function is declared as - returning `void'. - - ARGS - A vector of pointers to memory holding the arguments to the - function. - - USER_DATA - The same USER_DATA that was passed to `ffi_prep_closure_loc'. - - `ffi_prep_closure_loc' will return `FFI_OK' if everything went ok, - and something else on error. - - After calling `ffi_prep_closure_loc', you can cast CODELOC to the - appropriate pointer-to-function type. - - You may see old code referring to `ffi_prep_closure'. This function -is deprecated, as it cannot handle the need for separate writable and -executable addresses. - - -File: libffi.info, Node: Closure Example, Prev: The Closure API, Up: Using libffi - -2.6 Closure Example -=================== - -A trivial example that creates a new `puts' by binding `fputs' with -`stdin'. - - #include - #include - - /* Acts like puts with the file given at time of enclosure. */ - void puts_binding(ffi_cif *cif, unsigned int *ret, void* args[], - FILE *stream) - { - *ret = fputs(*(char **)args[0], stream); - } - - int main() - { - ffi_cif cif; - ffi_type *args[1]; - ffi_closure *closure; - - int (*bound_puts)(char *); - int rc; - - /* Allocate closure and bound_puts */ - closure = ffi_closure_alloc(sizeof(ffi_closure), &bound_puts); - - if (closure) - { - /* Initialize the argument info vectors */ - args[0] = &ffi_type_pointer; - - /* Initialize the cif */ - if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_uint, args) == FFI_OK) - { - /* Initialize the closure, setting stream to stdout */ - if (ffi_prep_closure_loc(closure, &cif, puts_binding, - stdout, bound_puts) == FFI_OK) - { - rc = bound_puts("Hello World!"); - /* rc now holds the result of the call to fputs */ - } - } - } - - /* Deallocate both closure, and bound_puts */ - ffi_closure_free(closure); - - return 0; - } - - -File: libffi.info, Node: Missing Features, Next: Index, Prev: Using libffi, Up: Top - -3 Missing Features -****************** - -`libffi' is missing a few features. We welcome patches to add support -for these. - - * There is no support for calling varargs functions. This may work - on some platforms, depending on how the ABI is defined, but it is - not reliable. - - * There is no support for bit fields in structures. - - * The closure API is - - * The "raw" API is undocumented. - - -File: libffi.info, Node: Index, Prev: Missing Features, Up: Top - -Index -***** - -[index] -* Menu: - -* : Structures. (line 12) -* ABI: Introduction. (line 13) -* Application Binary Interface: Introduction. (line 13) -* calling convention: Introduction. (line 13) -* cif: The Basics. (line 14) -* closure API: The Closure API. (line 13) -* closures: The Closure API. (line 13) -* FFI: Introduction. (line 31) -* ffi_call: The Basics. (line 41) -* ffi_closure_alloc: The Closure API. (line 19) -* ffi_closure_free: The Closure API. (line 26) -* FFI_CLOSURES: The Closure API. (line 13) -* ffi_prep_cif: The Basics. (line 16) -* ffi_prep_closure_loc: The Closure API. (line 34) -* ffi_status <1>: The Closure API. (line 37) -* ffi_status: The Basics. (line 18) -* ffi_type: Structures. (line 11) -* ffi_type_double: Primitive Types. (line 41) -* ffi_type_float: Primitive Types. (line 38) -* ffi_type_longdouble: Primitive Types. (line 71) -* ffi_type_pointer: Primitive Types. (line 75) -* ffi_type_schar: Primitive Types. (line 47) -* ffi_type_sint: Primitive Types. (line 62) -* ffi_type_sint16: Primitive Types. (line 23) -* ffi_type_sint32: Primitive Types. (line 29) -* ffi_type_sint64: Primitive Types. (line 35) -* ffi_type_sint8: Primitive Types. (line 17) -* ffi_type_slong: Primitive Types. (line 68) -* ffi_type_sshort: Primitive Types. (line 56) -* ffi_type_uchar: Primitive Types. (line 44) -* ffi_type_uint: Primitive Types. (line 59) -* ffi_type_uint16: Primitive Types. (line 20) -* ffi_type_uint32: Primitive Types. (line 26) -* ffi_type_uint64: Primitive Types. (line 32) -* ffi_type_uint8: Primitive Types. (line 14) -* ffi_type_ulong: Primitive Types. (line 65) -* ffi_type_ushort: Primitive Types. (line 53) -* ffi_type_void: Primitive Types. (line 10) -* Foreign Function Interface: Introduction. (line 31) -* void <1>: The Closure API. (line 20) -* void: The Basics. (line 43) - - - -Tag Table: -Node: Top706 -Node: Introduction1448 -Node: Using libffi3084 -Node: The Basics3570 -Node: Simple Example6356 -Node: Types7383 -Node: Primitive Types7666 -Node: Structures9486 -Node: Type Example10346 -Node: Multiple ABIs11569 -Node: The Closure API11940 -Node: Closure Example14884 -Node: Missing Features16443 -Node: Index16936 - -End Tag Table diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/doc/libffi.texi b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/doc/libffi.texi deleted file mode 100644 index 5cdd667..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/doc/libffi.texi +++ /dev/null @@ -1,600 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@c %**start of header -@setfilename libffi.info -@settitle libffi -@setchapternewpage off -@c %**end of header - -@c Merge the standard indexes into a single one. -@syncodeindex fn cp -@syncodeindex vr cp -@syncodeindex ky cp -@syncodeindex pg cp -@syncodeindex tp cp - -@include version.texi - -@copying - -This manual is for Libffi, a portable foreign-function interface -library. - -Copyright @copyright{} 2008, 2010 Red Hat, Inc. - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 2, or (at your option) any -later version. A copy of the license is included in the -section entitled ``GNU General Public License''. - -@end quotation -@end copying - -@dircategory Development -@direntry -* libffi: (libffi). Portable foreign-function interface library. -@end direntry - -@titlepage -@title Libffi -@page -@vskip 0pt plus 1filll -@insertcopying -@end titlepage - - -@ifnottex -@node Top -@top libffi - -@insertcopying - -@menu -* Introduction:: What is libffi? -* Using libffi:: How to use libffi. -* Missing Features:: Things libffi can't do. -* Index:: Index. -@end menu - -@end ifnottex - - -@node Introduction -@chapter What is libffi? - -Compilers for high level languages generate code that follow certain -conventions. These conventions are necessary, in part, for separate -compilation to work. One such convention is the @dfn{calling -convention}. The calling convention is a set of assumptions made by -the compiler about where function arguments will be found on entry to -a function. A calling convention also specifies where the return -value for a function is found. The calling convention is also -sometimes called the @dfn{ABI} or @dfn{Application Binary Interface}. -@cindex calling convention -@cindex ABI -@cindex Application Binary Interface - -Some programs may not know at the time of compilation what arguments -are to be passed to a function. For instance, an interpreter may be -told at run-time about the number and types of arguments used to call -a given function. @samp{Libffi} can be used in such programs to -provide a bridge from the interpreter program to compiled code. - -The @samp{libffi} library provides a portable, high level programming -interface to various calling conventions. This allows a programmer to -call any function specified by a call interface description at run -time. - -@acronym{FFI} stands for Foreign Function Interface. A foreign -function interface is the popular name for the interface that allows -code written in one language to call code written in another language. -The @samp{libffi} library really only provides the lowest, machine -dependent layer of a fully featured foreign function interface. A -layer must exist above @samp{libffi} that handles type conversions for -values passed between the two languages. -@cindex FFI -@cindex Foreign Function Interface - - -@node Using libffi -@chapter Using libffi - -@menu -* The Basics:: The basic libffi API. -* Simple Example:: A simple example. -* Types:: libffi type descriptions. -* Multiple ABIs:: Different passing styles on one platform. -* The Closure API:: Writing a generic function. -* Closure Example:: A closure example. -@end menu - - -@node The Basics -@section The Basics - -@samp{Libffi} assumes that you have a pointer to the function you wish -to call and that you know the number and types of arguments to pass -it, as well as the return type of the function. - -The first thing you must do is create an @code{ffi_cif} object that -matches the signature of the function you wish to call. This is a -separate step because it is common to make multiple calls using a -single @code{ffi_cif}. The @dfn{cif} in @code{ffi_cif} stands for -Call InterFace. To prepare a call interface object, use the function -@code{ffi_prep_cif}. -@cindex cif - -@findex ffi_prep_cif -@defun ffi_status ffi_prep_cif (ffi_cif *@var{cif}, ffi_abi @var{abi}, unsigned int @var{nargs}, ffi_type *@var{rtype}, ffi_type **@var{argtypes}) -This initializes @var{cif} according to the given parameters. - -@var{abi} is the ABI to use; normally @code{FFI_DEFAULT_ABI} is what -you want. @ref{Multiple ABIs} for more information. - -@var{nargs} is the number of arguments that this function accepts. -@samp{libffi} does not yet handle varargs functions; see @ref{Missing -Features} for more information. - -@var{rtype} is a pointer to an @code{ffi_type} structure that -describes the return type of the function. @xref{Types}. - -@var{argtypes} is a vector of @code{ffi_type} pointers. -@var{argtypes} must have @var{nargs} elements. If @var{nargs} is 0, -this argument is ignored. - -@code{ffi_prep_cif} returns a @code{libffi} status code, of type -@code{ffi_status}. This will be either @code{FFI_OK} if everything -worked properly; @code{FFI_BAD_TYPEDEF} if one of the @code{ffi_type} -objects is incorrect; or @code{FFI_BAD_ABI} if the @var{abi} parameter -is invalid. -@end defun - - -To call a function using an initialized @code{ffi_cif}, use the -@code{ffi_call} function: - -@findex ffi_call -@defun void ffi_call (ffi_cif *@var{cif}, void *@var{fn}, void *@var{rvalue}, void **@var{avalues}) -This calls the function @var{fn} according to the description given in -@var{cif}. @var{cif} must have already been prepared using -@code{ffi_prep_cif}. - -@var{rvalue} is a pointer to a chunk of memory that will hold the -result of the function call. This must be large enough to hold the -result and must be suitably aligned; it is the caller's responsibility -to ensure this. If @var{cif} declares that the function returns -@code{void} (using @code{ffi_type_void}), then @var{rvalue} is -ignored. If @var{rvalue} is @samp{NULL}, then the return value is -discarded. - -@var{avalues} is a vector of @code{void *} pointers that point to the -memory locations holding the argument values for a call. If @var{cif} -declares that the function has no arguments (i.e., @var{nargs} was 0), -then @var{avalues} is ignored. Note that argument values may be -modified by the callee (for instance, structs passed by value); the -burden of copying pass-by-value arguments is placed on the caller. -@end defun - - -@node Simple Example -@section Simple Example - -Here is a trivial example that calls @code{puts} a few times. - -@example -#include -#include - -int main() -@{ - ffi_cif cif; - ffi_type *args[1]; - void *values[1]; - char *s; - int rc; - - /* Initialize the argument info vectors */ - args[0] = &ffi_type_pointer; - values[0] = &s; - - /* Initialize the cif */ - if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_uint, args) == FFI_OK) - @{ - s = "Hello World!"; - ffi_call(&cif, puts, &rc, values); - /* rc now holds the result of the call to puts */ - - /* values holds a pointer to the function's arg, so to - call puts() again all we need to do is change the - value of s */ - s = "This is cool!"; - ffi_call(&cif, puts, &rc, values); - @} - - return 0; -@} -@end example - - -@node Types -@section Types - -@menu -* Primitive Types:: Built-in types. -* Structures:: Structure types. -* Type Example:: Structure type example. -@end menu - -@node Primitive Types -@subsection Primitive Types - -@code{Libffi} provides a number of built-in type descriptors that can -be used to describe argument and return types: - -@table @code -@item ffi_type_void -@tindex ffi_type_void -The type @code{void}. This cannot be used for argument types, only -for return values. - -@item ffi_type_uint8 -@tindex ffi_type_uint8 -An unsigned, 8-bit integer type. - -@item ffi_type_sint8 -@tindex ffi_type_sint8 -A signed, 8-bit integer type. - -@item ffi_type_uint16 -@tindex ffi_type_uint16 -An unsigned, 16-bit integer type. - -@item ffi_type_sint16 -@tindex ffi_type_sint16 -A signed, 16-bit integer type. - -@item ffi_type_uint32 -@tindex ffi_type_uint32 -An unsigned, 32-bit integer type. - -@item ffi_type_sint32 -@tindex ffi_type_sint32 -A signed, 32-bit integer type. - -@item ffi_type_uint64 -@tindex ffi_type_uint64 -An unsigned, 64-bit integer type. - -@item ffi_type_sint64 -@tindex ffi_type_sint64 -A signed, 64-bit integer type. - -@item ffi_type_float -@tindex ffi_type_float -The C @code{float} type. - -@item ffi_type_double -@tindex ffi_type_double -The C @code{double} type. - -@item ffi_type_uchar -@tindex ffi_type_uchar -The C @code{unsigned char} type. - -@item ffi_type_schar -@tindex ffi_type_schar -The C @code{signed char} type. (Note that there is not an exact -equivalent to the C @code{char} type in @code{libffi}; ordinarily you -should either use @code{ffi_type_schar} or @code{ffi_type_uchar} -depending on whether @code{char} is signed.) - -@item ffi_type_ushort -@tindex ffi_type_ushort -The C @code{unsigned short} type. - -@item ffi_type_sshort -@tindex ffi_type_sshort -The C @code{short} type. - -@item ffi_type_uint -@tindex ffi_type_uint -The C @code{unsigned int} type. - -@item ffi_type_sint -@tindex ffi_type_sint -The C @code{int} type. - -@item ffi_type_ulong -@tindex ffi_type_ulong -The C @code{unsigned long} type. - -@item ffi_type_slong -@tindex ffi_type_slong -The C @code{long} type. - -@item ffi_type_longdouble -@tindex ffi_type_longdouble -On platforms that have a C @code{long double} type, this is defined. -On other platforms, it is not. - -@item ffi_type_pointer -@tindex ffi_type_pointer -A generic @code{void *} pointer. You should use this for all -pointers, regardless of their real type. -@end table - -Each of these is of type @code{ffi_type}, so you must take the address -when passing to @code{ffi_prep_cif}. - - -@node Structures -@subsection Structures - -Although @samp{libffi} has no special support for unions or -bit-fields, it is perfectly happy passing structures back and forth. -You must first describe the structure to @samp{libffi} by creating a -new @code{ffi_type} object for it. - -@tindex ffi_type -@deftp ffi_type -The @code{ffi_type} has the following members: -@table @code -@item size_t size -This is set by @code{libffi}; you should initialize it to zero. - -@item unsigned short alignment -This is set by @code{libffi}; you should initialize it to zero. - -@item unsigned short type -For a structure, this should be set to @code{FFI_TYPE_STRUCT}. - -@item ffi_type **elements -This is a @samp{NULL}-terminated array of pointers to @code{ffi_type} -objects. There is one element per field of the struct. -@end table -@end deftp - - -@node Type Example -@subsection Type Example - -The following example initializes a @code{ffi_type} object -representing the @code{tm} struct from Linux's @file{time.h}. - -Here is how the struct is defined: - -@example -struct tm @{ - int tm_sec; - int tm_min; - int tm_hour; - int tm_mday; - int tm_mon; - int tm_year; - int tm_wday; - int tm_yday; - int tm_isdst; - /* Those are for future use. */ - long int __tm_gmtoff__; - __const char *__tm_zone__; -@}; -@end example - -Here is the corresponding code to describe this struct to -@code{libffi}: - -@example - @{ - ffi_type tm_type; - ffi_type *tm_type_elements[12]; - int i; - - tm_type.size = tm_type.alignment = 0; - tm_type.elements = &tm_type_elements; - - for (i = 0; i < 9; i++) - tm_type_elements[i] = &ffi_type_sint; - - tm_type_elements[9] = &ffi_type_slong; - tm_type_elements[10] = &ffi_type_pointer; - tm_type_elements[11] = NULL; - - /* tm_type can now be used to represent tm argument types and - return types for ffi_prep_cif() */ - @} -@end example - - -@node Multiple ABIs -@section Multiple ABIs - -A given platform may provide multiple different ABIs at once. For -instance, the x86 platform has both @samp{stdcall} and @samp{fastcall} -functions. - -@code{libffi} provides some support for this. However, this is -necessarily platform-specific. - -@c FIXME: document the platforms - -@node The Closure API -@section The Closure API - -@code{libffi} also provides a way to write a generic function -- a -function that can accept and decode any combination of arguments. -This can be useful when writing an interpreter, or to provide wrappers -for arbitrary functions. - -This facility is called the @dfn{closure API}. Closures are not -supported on all platforms; you can check the @code{FFI_CLOSURES} -define to determine whether they are supported on the current -platform. -@cindex closures -@cindex closure API -@findex FFI_CLOSURES - -Because closures work by assembling a tiny function at runtime, they -require special allocation on platforms that have a non-executable -heap. Memory management for closures is handled by a pair of -functions: - -@findex ffi_closure_alloc -@defun void *ffi_closure_alloc (size_t @var{size}, void **@var{code}) -Allocate a chunk of memory holding @var{size} bytes. This returns a -pointer to the writable address, and sets *@var{code} to the -corresponding executable address. - -@var{size} should be sufficient to hold a @code{ffi_closure} object. -@end defun - -@findex ffi_closure_free -@defun void ffi_closure_free (void *@var{writable}) -Free memory allocated using @code{ffi_closure_alloc}. The argument is -the writable address that was returned. -@end defun - - -Once you have allocated the memory for a closure, you must construct a -@code{ffi_cif} describing the function call. Finally you can prepare -the closure function: - -@findex ffi_prep_closure_loc -@defun ffi_status ffi_prep_closure_loc (ffi_closure *@var{closure}, ffi_cif *@var{cif}, void (*@var{fun}) (ffi_cif *@var{cif}, void *@var{ret}, void **@var{args}, void *@var{user_data}), void *@var{user_data}, void *@var{codeloc}) -Prepare a closure function. - -@var{closure} is the address of a @code{ffi_closure} object; this is -the writable address returned by @code{ffi_closure_alloc}. - -@var{cif} is the @code{ffi_cif} describing the function parameters. - -@var{user_data} is an arbitrary datum that is passed, uninterpreted, -to your closure function. - -@var{codeloc} is the executable address returned by -@code{ffi_closure_alloc}. - -@var{fun} is the function which will be called when the closure is -invoked. It is called with the arguments: -@table @var -@item cif -The @code{ffi_cif} passed to @code{ffi_prep_closure_loc}. - -@item ret -A pointer to the memory used for the function's return value. -@var{fun} must fill this, unless the function is declared as returning -@code{void}. -@c FIXME: is this NULL for void-returning functions? - -@item args -A vector of pointers to memory holding the arguments to the function. - -@item user_data -The same @var{user_data} that was passed to -@code{ffi_prep_closure_loc}. -@end table - -@code{ffi_prep_closure_loc} will return @code{FFI_OK} if everything -went ok, and something else on error. -@c FIXME: what? - -After calling @code{ffi_prep_closure_loc}, you can cast @var{codeloc} -to the appropriate pointer-to-function type. -@end defun - -You may see old code referring to @code{ffi_prep_closure}. This -function is deprecated, as it cannot handle the need for separate -writable and executable addresses. - -@node Closure Example -@section Closure Example - -A trivial example that creates a new @code{puts} by binding -@code{fputs} with @code{stdin}. - -@example -#include -#include - -/* Acts like puts with the file given at time of enclosure. */ -void puts_binding(ffi_cif *cif, unsigned int *ret, void* args[], - FILE *stream) -@{ - *ret = fputs(*(char **)args[0], stream); -@} - -int main() -@{ - ffi_cif cif; - ffi_type *args[1]; - ffi_closure *closure; - - int (*bound_puts)(char *); - int rc; - - /* Allocate closure and bound_puts */ - closure = ffi_closure_alloc(sizeof(ffi_closure), &bound_puts); - - if (closure) - @{ - /* Initialize the argument info vectors */ - args[0] = &ffi_type_pointer; - - /* Initialize the cif */ - if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_uint, args) == FFI_OK) - @{ - /* Initialize the closure, setting stream to stdout */ - if (ffi_prep_closure_loc(closure, &cif, puts_binding, - stdout, bound_puts) == FFI_OK) - @{ - rc = bound_puts("Hello World!"); - /* rc now holds the result of the call to fputs */ - @} - @} - @} - - /* Deallocate both closure, and bound_puts */ - ffi_closure_free(closure); - - return 0; -@} - -@end example - - -@node Missing Features -@chapter Missing Features - -@code{libffi} is missing a few features. We welcome patches to add -support for these. - -@itemize @bullet -@item -There is no support for calling varargs functions. This may work on -some platforms, depending on how the ABI is defined, but it is not -reliable. - -@item -There is no support for bit fields in structures. - -@item -The closure API is - -@c FIXME: ... - -@item -The ``raw'' API is undocumented. -@c argument promotion? -@c unions? -@c anything else? -@end itemize - - -@node Index -@unnumbered Index - -@printindex cp - -@bye diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/doc/stamp-vti b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/doc/stamp-vti deleted file mode 100644 index 5377bb8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/doc/stamp-vti +++ /dev/null @@ -1,4 +0,0 @@ -@set UPDATED 23 August 2011 -@set UPDATED-MONTH August 2011 -@set EDITION 3.0.10 -@set VERSION 3.0.10 diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/doc/version.texi b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/doc/version.texi deleted file mode 100644 index 5377bb8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/doc/version.texi +++ /dev/null @@ -1,4 +0,0 @@ -@set UPDATED 23 August 2011 -@set UPDATED-MONTH August 2011 -@set EDITION 3.0.10 -@set VERSION 3.0.10 diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/fficonfig.h.in b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/fficonfig.h.in deleted file mode 100644 index 6c92c56..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/fficonfig.h.in +++ /dev/null @@ -1,199 +0,0 @@ -/* fficonfig.h.in. Generated from configure.ac by autoheader. */ - -/* Define if building universal (internal helper macro) */ -#undef AC_APPLE_UNIVERSAL_BUILD - -/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP - systems. This function is required for `alloca.c' support on those systems. - */ -#undef CRAY_STACKSEG_END - -/* Define to 1 if using `alloca.c'. */ -#undef C_ALLOCA - -/* Define to the flags needed for the .section .eh_frame directive. */ -#undef EH_FRAME_FLAGS - -/* Define this if you want extra debugging. */ -#undef FFI_DEBUG - -/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ -#undef FFI_EXEC_TRAMPOLINE_TABLE - -/* Cannot use malloc on this target, so, we revert to alternative means */ -#undef FFI_MMAP_EXEC_WRIT - -/* Define this is you do not want support for the raw API. */ -#undef FFI_NO_RAW_API - -/* Define this is you do not want support for aggregate types. */ -#undef FFI_NO_STRUCTS - -/* Define to 1 if you have `alloca', as a function or macro. */ -#undef HAVE_ALLOCA - -/* Define to 1 if you have and it should be used (not on Ultrix). - */ -#undef HAVE_ALLOCA_H - -/* Define if your assembler supports .ascii. */ -#undef HAVE_AS_ASCII_PSEUDO_OP - -/* Define if your assembler supports .cfi_* directives. */ -#undef HAVE_AS_CFI_PSEUDO_OP - -/* Define if your assembler supports .register. */ -#undef HAVE_AS_REGISTER_PSEUDO_OP - -/* Define if your assembler and linker support unaligned PC relative relocs. - */ -#undef HAVE_AS_SPARC_UA_PCREL - -/* Define if your assembler supports .string. */ -#undef HAVE_AS_STRING_PSEUDO_OP - -/* Define if your assembler supports unwind section type. */ -#undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE - -/* Define if your assembler supports PC relative relocs. */ -#undef HAVE_AS_X86_PCREL - -/* Define to 1 if you have the header file. */ -#undef HAVE_DLFCN_H - -/* Define if __attribute__((visibility("hidden"))) is supported. */ -#undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define if you have the long double type and it is bigger than a double */ -#undef HAVE_LONG_DOUBLE - -/* Define to 1 if you have the `memcpy' function. */ -#undef HAVE_MEMCPY - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if you have the `mmap' function. */ -#undef HAVE_MMAP - -/* Define if mmap with MAP_ANON(YMOUS) works. */ -#undef HAVE_MMAP_ANON - -/* Define if mmap of /dev/zero works. */ -#undef HAVE_MMAP_DEV_ZERO - -/* Define if read-only mmap of a plain file works. */ -#undef HAVE_MMAP_FILE - -/* Define if .eh_frame sections should be read-only. */ -#undef HAVE_RO_EH_FRAME - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_MMAN_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ -#undef LT_OBJDIR - -/* Define to 1 if your C compiler doesn't accept -c and -o together. */ -#undef NO_MINUS_C_MINUS_O - -/* Name of package */ -#undef PACKAGE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* The size of `double', as computed by sizeof. */ -#undef SIZEOF_DOUBLE - -/* The size of `long double', as computed by sizeof. */ -#undef SIZEOF_LONG_DOUBLE - -/* If using the C implementation of alloca, define if you know the - direction of stack growth for your system; otherwise it will be - automatically deduced at runtime. - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown */ -#undef STACK_DIRECTION - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Define this if you are using Purify and want to suppress spurious messages. - */ -#undef USING_PURIFY - -/* Version number of package */ -#undef VERSION - -/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most - significant byte first (like Motorola and SPARC, unlike Intel). */ -#if defined AC_APPLE_UNIVERSAL_BUILD -# if defined __BIG_ENDIAN__ -# define WORDS_BIGENDIAN 1 -# endif -#else -# ifndef WORDS_BIGENDIAN -# undef WORDS_BIGENDIAN -# endif -#endif - -/* Define to `unsigned int' if does not define. */ -#undef size_t - - -#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE -#ifdef LIBFFI_ASM -#define FFI_HIDDEN(name) .hidden name -#else -#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) -#endif -#else -#ifdef LIBFFI_ASM -#define FFI_HIDDEN(name) -#else -#define FFI_HIDDEN -#endif -#endif - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/fficonfig.hw b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/fficonfig.hw deleted file mode 100644 index 4d7506a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/fficonfig.hw +++ /dev/null @@ -1,57 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - libffi - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - - ----------------------------------------------------------------------- */ - -/* ------------------------------------------------------------------- - - -------------------------------------------------------------------- */ - -#ifndef LIBFFICONFIG_H -#define LIBFFICONFIG_H - -#define HAVE_ALLOCA 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMORY_H 1 -#define HAVE_STDLIB_H 1 -#define HAVE_STRING_H 1 -#define HAVE_SYS_STAT_H 1 -#define HAVE_SYS_TYPES_H 1 -#define STDC_HEADERS 1 - -#if defined(X86_WIN64) -#define SIZEOF_DOUBLE 8 -#define SIZEOF_LONG_DOUBLE 0 -#else -#define SIZEOF_DOUBLE 8 -#define SIZEOF_LONG_DOUBLE 0 -#endif - -#ifdef LIBFFI_ASM -#define FFI_HIDDEN(name) -#else -#define FFI_HIDDEN -#endif - -#endif /* LIBFFICONFIG_H */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/include/Makefile.am b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/include/Makefile.am deleted file mode 100644 index fd28024..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/include/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -## Process this with automake to create Makefile.in - -AUTOMAKE_OPTIONS=foreign - -DISTCLEANFILES=ffitarget.h -EXTRA_DIST=ffi.h.in ffi_common.h - -includesdir = $(libdir)/@PACKAGE_NAME@-@PACKAGE_VERSION@/include -nodist_includes_HEADERS = ffi.h ffitarget.h diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/include/Makefile.in b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/include/Makefile.in deleted file mode 100644 index f3d3ef2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/include/Makefile.in +++ /dev/null @@ -1,487 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = include -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(srcdir)/ffi.h.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cc_maxopt.m4 \ - $(top_srcdir)/m4/ax_cflags_warn_all.m4 \ - $(top_srcdir)/m4/ax_check_compiler_flags.m4 \ - $(top_srcdir)/m4/ax_compiler_vendor.m4 \ - $(top_srcdir)/m4/ax_configure_args.m4 \ - $(top_srcdir)/m4/ax_enable_builddir.m4 \ - $(top_srcdir)/m4/ax_gcc_archflag.m4 \ - $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/fficonfig.h -CONFIG_CLEAN_FILES = ffi.h ffitarget.h -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__installdirs = "$(DESTDIR)$(includesdir)" -HEADERS = $(nodist_includes_HEADERS) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -AMTAR = @AMTAR@ -AM_LTLDFLAGS = @AM_LTLDFLAGS@ -AM_RUNTESTFLAGS = @AM_RUNTESTFLAGS@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCAS = @CCAS@ -CCASDEPMODE = @CCASDEPMODE@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FFI_EXEC_TRAMPOLINE_TABLE = @FFI_EXEC_TRAMPOLINE_TABLE@ -FGREP = @FGREP@ -GREP = @GREP@ -HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PRTDIAG = @PRTDIAG@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -TARGET = @TARGET@ -TARGETDIR = @TARGETDIR@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -ax_enable_builddir_sed = @ax_enable_builddir_sed@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sys_symbol_underscore = @sys_symbol_underscore@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -toolexecdir = @toolexecdir@ -toolexeclibdir = @toolexeclibdir@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AUTOMAKE_OPTIONS = foreign -DISTCLEANFILES = ffitarget.h -EXTRA_DIST = ffi.h.in ffi_common.h -includesdir = $(libdir)/@PACKAGE_NAME@-@PACKAGE_VERSION@/include -nodist_includes_HEADERS = ffi.h ffitarget.h -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign include/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -ffi.h: $(top_builddir)/config.status $(srcdir)/ffi.h.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-nodist_includesHEADERS: $(nodist_includes_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(includesdir)" || $(MKDIR_P) "$(DESTDIR)$(includesdir)" - @list='$(nodist_includes_HEADERS)'; test -n "$(includesdir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \ - done - -uninstall-nodist_includesHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(nodist_includes_HEADERS)'; test -n "$(includesdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(includesdir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(includesdir)" && rm -f $$files - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(includesdir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-nodist_includesHEADERS - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-nodist_includesHEADERS - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool ctags distclean distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-nodist_includesHEADERS \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-nodist_includesHEADERS - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/include/ffi.h.in b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/include/ffi.h.in deleted file mode 100644 index f5a29b0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/include/ffi.h.in +++ /dev/null @@ -1,427 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - libffi @VERSION@ - Copyright (c) 2011 Anthony Green - - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation - files (the ``Software''), to deal in the Software without - restriction, including without limitation the rights to use, copy, - modify, merge, publish, distribute, sublicense, and/or sell copies - of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - - ----------------------------------------------------------------------- */ - -/* ------------------------------------------------------------------- - The basic API is described in the README file. - - The raw API is designed to bypass some of the argument packing - and unpacking on architectures for which it can be avoided. - - The closure API allows interpreted functions to be packaged up - inside a C function pointer, so that they can be called as C functions, - with no understanding on the client side that they are interpreted. - It can also be used in other cases in which it is necessary to package - up a user specified parameter and a function pointer as a single - function pointer. - - The closure API must be implemented in order to get its functionality, - e.g. for use by gij. Routines are provided to emulate the raw API - if the underlying platform doesn't allow faster implementation. - - More details on the raw and cloure API can be found in: - - http://gcc.gnu.org/ml/java/1999-q3/msg00138.html - - and - - http://gcc.gnu.org/ml/java/1999-q3/msg00174.html - -------------------------------------------------------------------- */ - -#ifndef LIBFFI_H -#define LIBFFI_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Specify which architecture libffi is configured for. */ -#ifndef @TARGET@ -#define @TARGET@ -#endif - -/* ---- System configuration information --------------------------------- */ - -#include - -#ifndef LIBFFI_ASM - -#ifdef _MSC_VER -#define __attribute__(X) -#endif - -#include -#include - -/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). - But we can find it either under the correct ANSI name, or under GNU - C's internal name. */ - -#define FFI_64_BIT_MAX 9223372036854775807 - -#ifdef LONG_LONG_MAX -# define FFI_LONG_LONG_MAX LONG_LONG_MAX -#else -# ifdef LLONG_MAX -# define FFI_LONG_LONG_MAX LLONG_MAX -# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ -# undef FFI_64_BIT_MAX -# define FFI_64_BIT_MAX 9223372036854775807LL -# endif /* _AIX52 or newer */ -# else -# ifdef __GNUC__ -# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ -# endif -# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ -# ifndef __PPC64__ -# if defined (__IBMC__) || defined (__IBMCPP__) -# define FFI_LONG_LONG_MAX LONGLONG_MAX -# endif -# endif /* __PPC64__ */ -# undef FFI_64_BIT_MAX -# define FFI_64_BIT_MAX 9223372036854775807LL -# endif -# endif -#endif - -/* The closure code assumes that this works on pointers, i.e. a size_t */ -/* can hold a pointer. */ - -typedef struct _ffi_type -{ - size_t size; - unsigned short alignment; - unsigned short type; - struct _ffi_type **elements; -} ffi_type; - -#ifndef LIBFFI_HIDE_BASIC_TYPES -#if SCHAR_MAX == 127 -# define ffi_type_uchar ffi_type_uint8 -# define ffi_type_schar ffi_type_sint8 -#else - #error "char size not supported" -#endif - -#if SHRT_MAX == 32767 -# define ffi_type_ushort ffi_type_uint16 -# define ffi_type_sshort ffi_type_sint16 -#elif SHRT_MAX == 2147483647 -# define ffi_type_ushort ffi_type_uint32 -# define ffi_type_sshort ffi_type_sint32 -#else - #error "short size not supported" -#endif - -#if INT_MAX == 32767 -# define ffi_type_uint ffi_type_uint16 -# define ffi_type_sint ffi_type_sint16 -#elif INT_MAX == 2147483647 -# define ffi_type_uint ffi_type_uint32 -# define ffi_type_sint ffi_type_sint32 -#elif INT_MAX == 9223372036854775807 -# define ffi_type_uint ffi_type_uint64 -# define ffi_type_sint ffi_type_sint64 -#else - #error "int size not supported" -#endif - -#if LONG_MAX == 2147483647 -# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX - #error "no 64-bit data type supported" -# endif -#elif LONG_MAX != FFI_64_BIT_MAX - #error "long size not supported" -#endif - -#if LONG_MAX == 2147483647 -# define ffi_type_ulong ffi_type_uint32 -# define ffi_type_slong ffi_type_sint32 -#elif LONG_MAX == FFI_64_BIT_MAX -# define ffi_type_ulong ffi_type_uint64 -# define ffi_type_slong ffi_type_sint64 -#else - #error "long size not supported" -#endif - -/* These are defined in types.c */ -extern ffi_type ffi_type_void; -extern ffi_type ffi_type_uint8; -extern ffi_type ffi_type_sint8; -extern ffi_type ffi_type_uint16; -extern ffi_type ffi_type_sint16; -extern ffi_type ffi_type_uint32; -extern ffi_type ffi_type_sint32; -extern ffi_type ffi_type_uint64; -extern ffi_type ffi_type_sint64; -extern ffi_type ffi_type_float; -extern ffi_type ffi_type_double; -extern ffi_type ffi_type_pointer; - -#if @HAVE_LONG_DOUBLE@ -extern ffi_type ffi_type_longdouble; -#else -#define ffi_type_longdouble ffi_type_double -#endif -#endif /* LIBFFI_HIDE_BASIC_TYPES */ - -typedef enum { - FFI_OK = 0, - FFI_BAD_TYPEDEF, - FFI_BAD_ABI -} ffi_status; - -typedef unsigned FFI_TYPE; - -typedef struct { - ffi_abi abi; - unsigned nargs; - ffi_type **arg_types; - ffi_type *rtype; - unsigned bytes; - unsigned flags; -#ifdef FFI_EXTRA_CIF_FIELDS - FFI_EXTRA_CIF_FIELDS; -#endif -} ffi_cif; - -/* ---- Definitions for the raw API -------------------------------------- */ - -#ifndef FFI_SIZEOF_ARG -# if LONG_MAX == 2147483647 -# define FFI_SIZEOF_ARG 4 -# elif LONG_MAX == FFI_64_BIT_MAX -# define FFI_SIZEOF_ARG 8 -# endif -#endif - -#ifndef FFI_SIZEOF_JAVA_RAW -# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG -#endif - -typedef union { - ffi_sarg sint; - ffi_arg uint; - float flt; - char data[FFI_SIZEOF_ARG]; - void* ptr; -} ffi_raw; - -#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 -/* This is a special case for mips64/n32 ABI (and perhaps others) where - sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ -typedef union { - signed int sint; - unsigned int uint; - float flt; - char data[FFI_SIZEOF_JAVA_RAW]; - void* ptr; -} ffi_java_raw; -#else -typedef ffi_raw ffi_java_raw; -#endif - - -void ffi_raw_call (ffi_cif *cif, - void (*fn)(void), - void *rvalue, - ffi_raw *avalue); - -void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); -void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); -size_t ffi_raw_size (ffi_cif *cif); - -/* This is analogous to the raw API, except it uses Java parameter */ -/* packing, even on 64-bit machines. I.e. on 64-bit machines */ -/* longs and doubles are followed by an empty 64-bit word. */ - -void ffi_java_raw_call (ffi_cif *cif, - void (*fn)(void), - void *rvalue, - ffi_java_raw *avalue); - -void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); -void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); -size_t ffi_java_raw_size (ffi_cif *cif); - -/* ---- Definitions for closures ----------------------------------------- */ - -#if FFI_CLOSURES - -#ifdef _MSC_VER -__declspec(align(8)) -#endif -typedef struct { - char tramp[FFI_TRAMPOLINE_SIZE]; - ffi_cif *cif; - void (*fun)(ffi_cif*,void*,void**,void*); - void *user_data; -#ifdef __GNUC__ -} ffi_closure __attribute__((aligned (8))); -#else -} ffi_closure; -# ifdef __sgi -# pragma pack 0 -# endif -#endif - -void *ffi_closure_alloc (size_t size, void **code); -void ffi_closure_free (void *); - -ffi_status -ffi_prep_closure (ffi_closure*, - ffi_cif *, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data); - -ffi_status -ffi_prep_closure_loc (ffi_closure*, - ffi_cif *, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data, - void*codeloc); - -#ifdef __sgi -# pragma pack 8 -#endif -typedef struct { - char tramp[FFI_TRAMPOLINE_SIZE]; - - ffi_cif *cif; - -#if !FFI_NATIVE_RAW_API - - /* if this is enabled, then a raw closure has the same layout - as a regular closure. We use this to install an intermediate - handler to do the transaltion, void** -> ffi_raw*. */ - - void (*translate_args)(ffi_cif*,void*,void**,void*); - void *this_closure; - -#endif - - void (*fun)(ffi_cif*,void*,ffi_raw*,void*); - void *user_data; - -} ffi_raw_closure; - -typedef struct { - char tramp[FFI_TRAMPOLINE_SIZE]; - - ffi_cif *cif; - -#if !FFI_NATIVE_RAW_API - - /* if this is enabled, then a raw closure has the same layout - as a regular closure. We use this to install an intermediate - handler to do the transaltion, void** -> ffi_raw*. */ - - void (*translate_args)(ffi_cif*,void*,void**,void*); - void *this_closure; - -#endif - - void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); - void *user_data; - -} ffi_java_raw_closure; - -ffi_status -ffi_prep_raw_closure (ffi_raw_closure*, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_raw*,void*), - void *user_data); - -ffi_status -ffi_prep_raw_closure_loc (ffi_raw_closure*, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_raw*,void*), - void *user_data, - void *codeloc); - -ffi_status -ffi_prep_java_raw_closure (ffi_java_raw_closure*, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), - void *user_data); - -ffi_status -ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), - void *user_data, - void *codeloc); - -#endif /* FFI_CLOSURES */ - -/* ---- Public interface definition -------------------------------------- */ - -ffi_status ffi_prep_cif(ffi_cif *cif, - ffi_abi abi, - unsigned int nargs, - ffi_type *rtype, - ffi_type **atypes); - -void ffi_call(ffi_cif *cif, - void (*fn)(void), - void *rvalue, - void **avalue); - -/* Useful for eliminating compiler warnings */ -#define FFI_FN(f) ((void (*)(void))f) - -/* ---- Definitions shared with assembly code ---------------------------- */ - -#endif - -/* If these change, update src/mips/ffitarget.h. */ -#define FFI_TYPE_VOID 0 -#define FFI_TYPE_INT 1 -#define FFI_TYPE_FLOAT 2 -#define FFI_TYPE_DOUBLE 3 -#if @HAVE_LONG_DOUBLE@ -#define FFI_TYPE_LONGDOUBLE 4 -#else -#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE -#endif -#define FFI_TYPE_UINT8 5 -#define FFI_TYPE_SINT8 6 -#define FFI_TYPE_UINT16 7 -#define FFI_TYPE_SINT16 8 -#define FFI_TYPE_UINT32 9 -#define FFI_TYPE_SINT32 10 -#define FFI_TYPE_UINT64 11 -#define FFI_TYPE_SINT64 12 -#define FFI_TYPE_STRUCT 13 -#define FFI_TYPE_POINTER 14 - -/* This should always refer to the last type code (for sanity checks) */ -#define FFI_TYPE_LAST FFI_TYPE_POINTER - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/include/ffi.h.vc b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/include/ffi.h.vc deleted file mode 100644 index 7ba954c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/include/ffi.h.vc +++ /dev/null @@ -1,427 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - libffi 3.0.10 - Copyright (c) 2011 Anthony Green - - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation - files (the ``Software''), to deal in the Software without - restriction, including without limitation the rights to use, copy, - modify, merge, publish, distribute, sublicense, and/or sell copies - of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - - ----------------------------------------------------------------------- */ - -/* ------------------------------------------------------------------- - The basic API is described in the README file. - - The raw API is designed to bypass some of the argument packing - and unpacking on architectures for which it can be avoided. - - The closure API allows interpreted functions to be packaged up - inside a C function pointer, so that they can be called as C functions, - with no understanding on the client side that they are interpreted. - It can also be used in other cases in which it is necessary to package - up a user specified parameter and a function pointer as a single - function pointer. - - The closure API must be implemented in order to get its functionality, - e.g. for use by gij. Routines are provided to emulate the raw API - if the underlying platform doesn't allow faster implementation. - - More details on the raw and cloure API can be found in: - - http://gcc.gnu.org/ml/java/1999-q3/msg00138.html - - and - - http://gcc.gnu.org/ml/java/1999-q3/msg00174.html - -------------------------------------------------------------------- */ - -#ifndef LIBFFI_H -#define LIBFFI_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Specify which architecture libffi is configured for. */ -#ifndef X86_WIN32 -#define X86_WIN32 -#endif - -/* ---- System configuration information --------------------------------- */ - -#include - -#ifndef LIBFFI_ASM - -#ifdef _MSC_VER -#define __attribute__(X) -#endif - -#include -#include - -/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). - But we can find it either under the correct ANSI name, or under GNU - C's internal name. */ - -#define FFI_64_BIT_MAX 9223372036854775807 - -#ifdef LONG_LONG_MAX -# define FFI_LONG_LONG_MAX LONG_LONG_MAX -#else -# ifdef LLONG_MAX -# define FFI_LONG_LONG_MAX LLONG_MAX -# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ -# undef FFI_64_BIT_MAX -# define FFI_64_BIT_MAX 9223372036854775807LL -# endif /* _AIX52 or newer */ -# else -# ifdef __GNUC__ -# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ -# endif -# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ -# ifndef __PPC64__ -# if defined (__IBMC__) || defined (__IBMCPP__) -# define FFI_LONG_LONG_MAX LONGLONG_MAX -# endif -# endif /* __PPC64__ */ -# undef FFI_64_BIT_MAX -# define FFI_64_BIT_MAX 9223372036854775807LL -# endif -# endif -#endif - -/* The closure code assumes that this works on pointers, i.e. a size_t */ -/* can hold a pointer. */ - -typedef struct _ffi_type -{ - size_t size; - unsigned short alignment; - unsigned short type; - struct _ffi_type **elements; -} ffi_type; - -#ifndef LIBFFI_HIDE_BASIC_TYPES -#if SCHAR_MAX == 127 -# define ffi_type_uchar ffi_type_uint8 -# define ffi_type_schar ffi_type_sint8 -#else - #error "char size not supported" -#endif - -#if SHRT_MAX == 32767 -# define ffi_type_ushort ffi_type_uint16 -# define ffi_type_sshort ffi_type_sint16 -#elif SHRT_MAX == 2147483647 -# define ffi_type_ushort ffi_type_uint32 -# define ffi_type_sshort ffi_type_sint32 -#else - #error "short size not supported" -#endif - -#if INT_MAX == 32767 -# define ffi_type_uint ffi_type_uint16 -# define ffi_type_sint ffi_type_sint16 -#elif INT_MAX == 2147483647 -# define ffi_type_uint ffi_type_uint32 -# define ffi_type_sint ffi_type_sint32 -#elif INT_MAX == 9223372036854775807 -# define ffi_type_uint ffi_type_uint64 -# define ffi_type_sint ffi_type_sint64 -#else - #error "int size not supported" -#endif - -#if LONG_MAX == 2147483647 -# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX - #error "no 64-bit data type supported" -# endif -#elif LONG_MAX != FFI_64_BIT_MAX - #error "long size not supported" -#endif - -#if LONG_MAX == 2147483647 -# define ffi_type_ulong ffi_type_uint32 -# define ffi_type_slong ffi_type_sint32 -#elif LONG_MAX == FFI_64_BIT_MAX -# define ffi_type_ulong ffi_type_uint64 -# define ffi_type_slong ffi_type_sint64 -#else - #error "long size not supported" -#endif - -/* These are defined in types.c */ -extern ffi_type ffi_type_void; -extern ffi_type ffi_type_uint8; -extern ffi_type ffi_type_sint8; -extern ffi_type ffi_type_uint16; -extern ffi_type ffi_type_sint16; -extern ffi_type ffi_type_uint32; -extern ffi_type ffi_type_sint32; -extern ffi_type ffi_type_uint64; -extern ffi_type ffi_type_sint64; -extern ffi_type ffi_type_float; -extern ffi_type ffi_type_double; -extern ffi_type ffi_type_pointer; - -#if 0 -extern ffi_type ffi_type_longdouble; -#else -#define ffi_type_longdouble ffi_type_double -#endif -#endif /* LIBFFI_HIDE_BASIC_TYPES */ - -typedef enum { - FFI_OK = 0, - FFI_BAD_TYPEDEF, - FFI_BAD_ABI -} ffi_status; - -typedef unsigned FFI_TYPE; - -typedef struct { - ffi_abi abi; - unsigned nargs; - ffi_type **arg_types; - ffi_type *rtype; - unsigned bytes; - unsigned flags; -#ifdef FFI_EXTRA_CIF_FIELDS - FFI_EXTRA_CIF_FIELDS; -#endif -} ffi_cif; - -/* ---- Definitions for the raw API -------------------------------------- */ - -#ifndef FFI_SIZEOF_ARG -# if LONG_MAX == 2147483647 -# define FFI_SIZEOF_ARG 4 -# elif LONG_MAX == FFI_64_BIT_MAX -# define FFI_SIZEOF_ARG 8 -# endif -#endif - -#ifndef FFI_SIZEOF_JAVA_RAW -# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG -#endif - -typedef union { - ffi_sarg sint; - ffi_arg uint; - float flt; - char data[FFI_SIZEOF_ARG]; - void* ptr; -} ffi_raw; - -#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 -/* This is a special case for mips64/n32 ABI (and perhaps others) where - sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ -typedef union { - signed int sint; - unsigned int uint; - float flt; - char data[FFI_SIZEOF_JAVA_RAW]; - void* ptr; -} ffi_java_raw; -#else -typedef ffi_raw ffi_java_raw; -#endif - - -void ffi_raw_call (ffi_cif *cif, - void (*fn)(void), - void *rvalue, - ffi_raw *avalue); - -void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); -void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); -size_t ffi_raw_size (ffi_cif *cif); - -/* This is analogous to the raw API, except it uses Java parameter */ -/* packing, even on 64-bit machines. I.e. on 64-bit machines */ -/* longs and doubles are followed by an empty 64-bit word. */ - -void ffi_java_raw_call (ffi_cif *cif, - void (*fn)(void), - void *rvalue, - ffi_java_raw *avalue); - -void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); -void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); -size_t ffi_java_raw_size (ffi_cif *cif); - -/* ---- Definitions for closures ----------------------------------------- */ - -#if FFI_CLOSURES - -#ifdef _MSC_VER -__declspec(align(8)) -#endif -typedef struct { - char tramp[FFI_TRAMPOLINE_SIZE]; - ffi_cif *cif; - void (*fun)(ffi_cif*,void*,void**,void*); - void *user_data; -#ifdef __GNUC__ -} ffi_closure __attribute__((aligned (8))); -#else -} ffi_closure; -# ifdef __sgi -# pragma pack 0 -# endif -#endif - -void *ffi_closure_alloc (size_t size, void **code); -void ffi_closure_free (void *); - -ffi_status -ffi_prep_closure (ffi_closure*, - ffi_cif *, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data); - -ffi_status -ffi_prep_closure_loc (ffi_closure*, - ffi_cif *, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data, - void*codeloc); - -#ifdef __sgi -# pragma pack 8 -#endif -typedef struct { - char tramp[FFI_TRAMPOLINE_SIZE]; - - ffi_cif *cif; - -#if !FFI_NATIVE_RAW_API - - /* if this is enabled, then a raw closure has the same layout - as a regular closure. We use this to install an intermediate - handler to do the transaltion, void** -> ffi_raw*. */ - - void (*translate_args)(ffi_cif*,void*,void**,void*); - void *this_closure; - -#endif - - void (*fun)(ffi_cif*,void*,ffi_raw*,void*); - void *user_data; - -} ffi_raw_closure; - -typedef struct { - char tramp[FFI_TRAMPOLINE_SIZE]; - - ffi_cif *cif; - -#if !FFI_NATIVE_RAW_API - - /* if this is enabled, then a raw closure has the same layout - as a regular closure. We use this to install an intermediate - handler to do the transaltion, void** -> ffi_raw*. */ - - void (*translate_args)(ffi_cif*,void*,void**,void*); - void *this_closure; - -#endif - - void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); - void *user_data; - -} ffi_java_raw_closure; - -ffi_status -ffi_prep_raw_closure (ffi_raw_closure*, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_raw*,void*), - void *user_data); - -ffi_status -ffi_prep_raw_closure_loc (ffi_raw_closure*, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_raw*,void*), - void *user_data, - void *codeloc); - -ffi_status -ffi_prep_java_raw_closure (ffi_java_raw_closure*, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), - void *user_data); - -ffi_status -ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), - void *user_data, - void *codeloc); - -#endif /* FFI_CLOSURES */ - -/* ---- Public interface definition -------------------------------------- */ - -ffi_status ffi_prep_cif(ffi_cif *cif, - ffi_abi abi, - unsigned int nargs, - ffi_type *rtype, - ffi_type **atypes); - -void ffi_call(ffi_cif *cif, - void (*fn)(void), - void *rvalue, - void **avalue); - -/* Useful for eliminating compiler warnings */ -#define FFI_FN(f) ((void (*)(void))f) - -/* ---- Definitions shared with assembly code ---------------------------- */ - -#endif - -/* If these change, update src/mips/ffitarget.h. */ -#define FFI_TYPE_VOID 0 -#define FFI_TYPE_INT 1 -#define FFI_TYPE_FLOAT 2 -#define FFI_TYPE_DOUBLE 3 -#if 0 -#define FFI_TYPE_LONGDOUBLE 4 -#else -#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE -#endif -#define FFI_TYPE_UINT8 5 -#define FFI_TYPE_SINT8 6 -#define FFI_TYPE_UINT16 7 -#define FFI_TYPE_SINT16 8 -#define FFI_TYPE_UINT32 9 -#define FFI_TYPE_SINT32 10 -#define FFI_TYPE_UINT64 11 -#define FFI_TYPE_SINT64 12 -#define FFI_TYPE_STRUCT 13 -#define FFI_TYPE_POINTER 14 - -/* This should always refer to the last type code (for sanity checks) */ -#define FFI_TYPE_LAST FFI_TYPE_POINTER - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/include/ffi.h.vc64 b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/include/ffi.h.vc64 deleted file mode 100644 index 6489c9f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/include/ffi.h.vc64 +++ /dev/null @@ -1,427 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - libffi 3.0.10 - Copyright (c) 2011 Anthony Green - - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation - files (the ``Software''), to deal in the Software without - restriction, including without limitation the rights to use, copy, - modify, merge, publish, distribute, sublicense, and/or sell copies - of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - - ----------------------------------------------------------------------- */ - -/* ------------------------------------------------------------------- - The basic API is described in the README file. - - The raw API is designed to bypass some of the argument packing - and unpacking on architectures for which it can be avoided. - - The closure API allows interpreted functions to be packaged up - inside a C function pointer, so that they can be called as C functions, - with no understanding on the client side that they are interpreted. - It can also be used in other cases in which it is necessary to package - up a user specified parameter and a function pointer as a single - function pointer. - - The closure API must be implemented in order to get its functionality, - e.g. for use by gij. Routines are provided to emulate the raw API - if the underlying platform doesn't allow faster implementation. - - More details on the raw and cloure API can be found in: - - http://gcc.gnu.org/ml/java/1999-q3/msg00138.html - - and - - http://gcc.gnu.org/ml/java/1999-q3/msg00174.html - -------------------------------------------------------------------- */ - -#ifndef LIBFFI_H -#define LIBFFI_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Specify which architecture libffi is configured for. */ -#ifndef X86_WIN64 -#define X86_WIN64 -#endif - -/* ---- System configuration information --------------------------------- */ - -#include - -#ifndef LIBFFI_ASM - -#ifdef _MSC_VER -#define __attribute__(X) -#endif - -#include -#include - -/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). - But we can find it either under the correct ANSI name, or under GNU - C's internal name. */ - -#define FFI_64_BIT_MAX 9223372036854775807 - -#ifdef LONG_LONG_MAX -# define FFI_LONG_LONG_MAX LONG_LONG_MAX -#else -# ifdef LLONG_MAX -# define FFI_LONG_LONG_MAX LLONG_MAX -# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ -# undef FFI_64_BIT_MAX -# define FFI_64_BIT_MAX 9223372036854775807LL -# endif /* _AIX52 or newer */ -# else -# ifdef __GNUC__ -# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ -# endif -# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ -# ifndef __PPC64__ -# if defined (__IBMC__) || defined (__IBMCPP__) -# define FFI_LONG_LONG_MAX LONGLONG_MAX -# endif -# endif /* __PPC64__ */ -# undef FFI_64_BIT_MAX -# define FFI_64_BIT_MAX 9223372036854775807LL -# endif -# endif -#endif - -/* The closure code assumes that this works on pointers, i.e. a size_t */ -/* can hold a pointer. */ - -typedef struct _ffi_type -{ - size_t size; - unsigned short alignment; - unsigned short type; - struct _ffi_type **elements; -} ffi_type; - -#ifndef LIBFFI_HIDE_BASIC_TYPES -#if SCHAR_MAX == 127 -# define ffi_type_uchar ffi_type_uint8 -# define ffi_type_schar ffi_type_sint8 -#else - #error "char size not supported" -#endif - -#if SHRT_MAX == 32767 -# define ffi_type_ushort ffi_type_uint16 -# define ffi_type_sshort ffi_type_sint16 -#elif SHRT_MAX == 2147483647 -# define ffi_type_ushort ffi_type_uint32 -# define ffi_type_sshort ffi_type_sint32 -#else - #error "short size not supported" -#endif - -#if INT_MAX == 32767 -# define ffi_type_uint ffi_type_uint16 -# define ffi_type_sint ffi_type_sint16 -#elif INT_MAX == 2147483647 -# define ffi_type_uint ffi_type_uint32 -# define ffi_type_sint ffi_type_sint32 -#elif INT_MAX == 9223372036854775807 -# define ffi_type_uint ffi_type_uint64 -# define ffi_type_sint ffi_type_sint64 -#else - #error "int size not supported" -#endif - -#if LONG_MAX == 2147483647 -# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX - #error "no 64-bit data type supported" -# endif -#elif LONG_MAX != FFI_64_BIT_MAX - #error "long size not supported" -#endif - -#if LONG_MAX == 2147483647 -# define ffi_type_ulong ffi_type_uint32 -# define ffi_type_slong ffi_type_sint32 -#elif LONG_MAX == FFI_64_BIT_MAX -# define ffi_type_ulong ffi_type_uint64 -# define ffi_type_slong ffi_type_sint64 -#else - #error "long size not supported" -#endif - -/* These are defined in types.c */ -extern ffi_type ffi_type_void; -extern ffi_type ffi_type_uint8; -extern ffi_type ffi_type_sint8; -extern ffi_type ffi_type_uint16; -extern ffi_type ffi_type_sint16; -extern ffi_type ffi_type_uint32; -extern ffi_type ffi_type_sint32; -extern ffi_type ffi_type_uint64; -extern ffi_type ffi_type_sint64; -extern ffi_type ffi_type_float; -extern ffi_type ffi_type_double; -extern ffi_type ffi_type_pointer; - -#if 0 -extern ffi_type ffi_type_longdouble; -#else -#define ffi_type_longdouble ffi_type_double -#endif -#endif /* LIBFFI_HIDE_BASIC_TYPES */ - -typedef enum { - FFI_OK = 0, - FFI_BAD_TYPEDEF, - FFI_BAD_ABI -} ffi_status; - -typedef unsigned FFI_TYPE; - -typedef struct { - ffi_abi abi; - unsigned nargs; - ffi_type **arg_types; - ffi_type *rtype; - unsigned bytes; - unsigned flags; -#ifdef FFI_EXTRA_CIF_FIELDS - FFI_EXTRA_CIF_FIELDS; -#endif -} ffi_cif; - -/* ---- Definitions for the raw API -------------------------------------- */ - -#ifndef FFI_SIZEOF_ARG -# if LONG_MAX == 2147483647 -# define FFI_SIZEOF_ARG 4 -# elif LONG_MAX == FFI_64_BIT_MAX -# define FFI_SIZEOF_ARG 8 -# endif -#endif - -#ifndef FFI_SIZEOF_JAVA_RAW -# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG -#endif - -typedef union { - ffi_sarg sint; - ffi_arg uint; - float flt; - char data[FFI_SIZEOF_ARG]; - void* ptr; -} ffi_raw; - -#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 -/* This is a special case for mips64/n32 ABI (and perhaps others) where - sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ -typedef union { - signed int sint; - unsigned int uint; - float flt; - char data[FFI_SIZEOF_JAVA_RAW]; - void* ptr; -} ffi_java_raw; -#else -typedef ffi_raw ffi_java_raw; -#endif - - -void ffi_raw_call (ffi_cif *cif, - void (*fn)(void), - void *rvalue, - ffi_raw *avalue); - -void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); -void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); -size_t ffi_raw_size (ffi_cif *cif); - -/* This is analogous to the raw API, except it uses Java parameter */ -/* packing, even on 64-bit machines. I.e. on 64-bit machines */ -/* longs and doubles are followed by an empty 64-bit word. */ - -void ffi_java_raw_call (ffi_cif *cif, - void (*fn)(void), - void *rvalue, - ffi_java_raw *avalue); - -void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); -void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); -size_t ffi_java_raw_size (ffi_cif *cif); - -/* ---- Definitions for closures ----------------------------------------- */ - -#if FFI_CLOSURES - -#ifdef _MSC_VER -__declspec(align(8)) -#endif -typedef struct { - char tramp[FFI_TRAMPOLINE_SIZE]; - ffi_cif *cif; - void (*fun)(ffi_cif*,void*,void**,void*); - void *user_data; -#ifdef __GNUC__ -} ffi_closure __attribute__((aligned (8))); -#else -} ffi_closure; -# ifdef __sgi -# pragma pack 0 -# endif -#endif - -void *ffi_closure_alloc (size_t size, void **code); -void ffi_closure_free (void *); - -ffi_status -ffi_prep_closure (ffi_closure*, - ffi_cif *, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data); - -ffi_status -ffi_prep_closure_loc (ffi_closure*, - ffi_cif *, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data, - void*codeloc); - -#ifdef __sgi -# pragma pack 8 -#endif -typedef struct { - char tramp[FFI_TRAMPOLINE_SIZE]; - - ffi_cif *cif; - -#if !FFI_NATIVE_RAW_API - - /* if this is enabled, then a raw closure has the same layout - as a regular closure. We use this to install an intermediate - handler to do the transaltion, void** -> ffi_raw*. */ - - void (*translate_args)(ffi_cif*,void*,void**,void*); - void *this_closure; - -#endif - - void (*fun)(ffi_cif*,void*,ffi_raw*,void*); - void *user_data; - -} ffi_raw_closure; - -typedef struct { - char tramp[FFI_TRAMPOLINE_SIZE]; - - ffi_cif *cif; - -#if !FFI_NATIVE_RAW_API - - /* if this is enabled, then a raw closure has the same layout - as a regular closure. We use this to install an intermediate - handler to do the transaltion, void** -> ffi_raw*. */ - - void (*translate_args)(ffi_cif*,void*,void**,void*); - void *this_closure; - -#endif - - void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); - void *user_data; - -} ffi_java_raw_closure; - -ffi_status -ffi_prep_raw_closure (ffi_raw_closure*, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_raw*,void*), - void *user_data); - -ffi_status -ffi_prep_raw_closure_loc (ffi_raw_closure*, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_raw*,void*), - void *user_data, - void *codeloc); - -ffi_status -ffi_prep_java_raw_closure (ffi_java_raw_closure*, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), - void *user_data); - -ffi_status -ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), - void *user_data, - void *codeloc); - -#endif /* FFI_CLOSURES */ - -/* ---- Public interface definition -------------------------------------- */ - -ffi_status ffi_prep_cif(ffi_cif *cif, - ffi_abi abi, - unsigned int nargs, - ffi_type *rtype, - ffi_type **atypes); - -void ffi_call(ffi_cif *cif, - void (*fn)(void), - void *rvalue, - void **avalue); - -/* Useful for eliminating compiler warnings */ -#define FFI_FN(f) ((void (*)(void))f) - -/* ---- Definitions shared with assembly code ---------------------------- */ - -#endif - -/* If these change, update src/mips/ffitarget.h. */ -#define FFI_TYPE_VOID 0 -#define FFI_TYPE_INT 1 -#define FFI_TYPE_FLOAT 2 -#define FFI_TYPE_DOUBLE 3 -#if 0 -#define FFI_TYPE_LONGDOUBLE 4 -#else -#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE -#endif -#define FFI_TYPE_UINT8 5 -#define FFI_TYPE_SINT8 6 -#define FFI_TYPE_UINT16 7 -#define FFI_TYPE_SINT16 8 -#define FFI_TYPE_UINT32 9 -#define FFI_TYPE_SINT32 10 -#define FFI_TYPE_UINT64 11 -#define FFI_TYPE_SINT64 12 -#define FFI_TYPE_STRUCT 13 -#define FFI_TYPE_POINTER 14 - -/* This should always refer to the last type code (for sanity checks) */ -#define FFI_TYPE_LAST FFI_TYPE_POINTER - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/include/ffi_common.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/include/ffi_common.h deleted file mode 100644 index d953762..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/include/ffi_common.h +++ /dev/null @@ -1,126 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi_common.h - Copyright (C) 2011 Anthony Green - Copyright (C) 2007 Free Software Foundation, Inc - Copyright (c) 1996 Red Hat, Inc. - - Common internal definitions and macros. Only necessary for building - libffi. - ----------------------------------------------------------------------- */ - -#ifndef FFI_COMMON_H -#define FFI_COMMON_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -/* Do not move this. Some versions of AIX are very picky about where - this is positioned. */ -#ifdef __GNUC__ -/* mingw64 defines this already in malloc.h. */ -#ifndef alloca -# define alloca __builtin_alloca -#endif -# define MAYBE_UNUSED __attribute__((__unused__)) -#else -# define MAYBE_UNUSED -# if HAVE_ALLOCA_H -# include -# else -# ifdef _AIX - #pragma alloca -# else -# ifndef alloca /* predefined by HP cc +Olibcalls */ -# ifdef _MSC_VER -# define alloca _alloca -# else -char *alloca (); -# endif -# endif -# endif -# endif -#endif - -/* Check for the existence of memcpy. */ -#if STDC_HEADERS -# include -#else -# ifndef HAVE_MEMCPY -# define memcpy(d, s, n) bcopy ((s), (d), (n)) -# endif -#endif - -#if defined(FFI_DEBUG) -#include -#endif - -#ifdef FFI_DEBUG -void ffi_assert(char *expr, char *file, int line); -void ffi_stop_here(void); -void ffi_type_test(ffi_type *a, char *file, int line); - -#define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__)) -#define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l))) -#define FFI_ASSERT_VALID_TYPE(x) ffi_type_test (x, __FILE__, __LINE__) -#else -#define FFI_ASSERT(x) -#define FFI_ASSERT_AT(x, f, l) -#define FFI_ASSERT_VALID_TYPE(x) -#endif - -#define ALIGN(v, a) (((((size_t) (v))-1) | ((a)-1))+1) -#define ALIGN_DOWN(v, a) (((size_t) (v)) & -a) - -/* Perform machine dependent cif processing */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif); - -/* Extended cif, used in callback from assembly routine */ -typedef struct -{ - ffi_cif *cif; - void *rvalue; - void **avalue; -} extended_cif; - -/* Terse sized type definitions. */ -#if defined(_MSC_VER) || defined(__sgi) -typedef unsigned char UINT8; -typedef signed char SINT8; -typedef unsigned short UINT16; -typedef signed short SINT16; -typedef unsigned int UINT32; -typedef signed int SINT32; -# ifdef _MSC_VER -typedef unsigned __int64 UINT64; -typedef signed __int64 SINT64; -# else -# include -typedef uint64_t UINT64; -typedef int64_t SINT64; -# endif -#else -typedef unsigned int UINT8 __attribute__((__mode__(__QI__))); -typedef signed int SINT8 __attribute__((__mode__(__QI__))); -typedef unsigned int UINT16 __attribute__((__mode__(__HI__))); -typedef signed int SINT16 __attribute__((__mode__(__HI__))); -typedef unsigned int UINT32 __attribute__((__mode__(__SI__))); -typedef signed int SINT32 __attribute__((__mode__(__SI__))); -typedef unsigned int UINT64 __attribute__((__mode__(__DI__))); -typedef signed int SINT64 __attribute__((__mode__(__DI__))); -#endif - -typedef float FLOAT32; - -#ifndef __GNUC__ -#define __builtin_expect(x, expected_value) (x) -#endif -#define LIKELY(x) __builtin_expect((x),1) -#define UNLIKELY(x) __builtin_expect((x),1) - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/install-sh b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/install-sh deleted file mode 100755 index 6781b98..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/install-sh +++ /dev/null @@ -1,520 +0,0 @@ -#!/bin/sh -# install - install a program, script, or datafile - -scriptversion=2009-04-28.21; # UTC - -# This originates from X11R5 (mit/util/scripts/install.sh), which was -# later released in X11R6 (xc/config/util/install.sh) with the -# following copyright and license. -# -# Copyright (C) 1994 X Consortium -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- -# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of the X Consortium shall not -# be used in advertising or otherwise to promote the sale, use or other deal- -# ings in this Software without prior written authorization from the X Consor- -# tium. -# -# -# FSF changes to this file are in the public domain. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# `make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. - -nl=' -' -IFS=" "" $nl" - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit=${DOITPROG-} -if test -z "$doit"; then - doit_exec=exec -else - doit_exec=$doit -fi - -# Put in absolute file names if you don't have them in your path; -# or use environment vars. - -chgrpprog=${CHGRPPROG-chgrp} -chmodprog=${CHMODPROG-chmod} -chownprog=${CHOWNPROG-chown} -cmpprog=${CMPPROG-cmp} -cpprog=${CPPROG-cp} -mkdirprog=${MKDIRPROG-mkdir} -mvprog=${MVPROG-mv} -rmprog=${RMPROG-rm} -stripprog=${STRIPPROG-strip} - -posix_glob='?' -initialize_posix_glob=' - test "$posix_glob" != "?" || { - if (set -f) 2>/dev/null; then - posix_glob= - else - posix_glob=: - fi - } -' - -posix_mkdir= - -# Desired mode of installed file. -mode=0755 - -chgrpcmd= -chmodcmd=$chmodprog -chowncmd= -mvcmd=$mvprog -rmcmd="$rmprog -f" -stripcmd= - -src= -dst= -dir_arg= -dst_arg= - -copy_on_change=false -no_target_directory= - -usage="\ -Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE - or: $0 [OPTION]... SRCFILES... DIRECTORY - or: $0 [OPTION]... -t DIRECTORY SRCFILES... - or: $0 [OPTION]... -d DIRECTORIES... - -In the 1st form, copy SRCFILE to DSTFILE. -In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. -In the 4th, create DIRECTORIES. - -Options: - --help display this help and exit. - --version display version info and exit. - - -c (ignored) - -C install only if different (preserve the last data modification time) - -d create directories instead of installing files. - -g GROUP $chgrpprog installed files to GROUP. - -m MODE $chmodprog installed files to MODE. - -o USER $chownprog installed files to USER. - -s $stripprog installed files. - -t DIRECTORY install into DIRECTORY. - -T report an error if DSTFILE is a directory. - -Environment variables override the default commands: - CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG - RMPROG STRIPPROG -" - -while test $# -ne 0; do - case $1 in - -c) ;; - - -C) copy_on_change=true;; - - -d) dir_arg=true;; - - -g) chgrpcmd="$chgrpprog $2" - shift;; - - --help) echo "$usage"; exit $?;; - - -m) mode=$2 - case $mode in - *' '* | *' '* | *' -'* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; - - -o) chowncmd="$chownprog $2" - shift;; - - -s) stripcmd=$stripprog;; - - -t) dst_arg=$2 - shift;; - - -T) no_target_directory=true;; - - --version) echo "$0 $scriptversion"; exit $?;; - - --) shift - break;; - - -*) echo "$0: invalid option: $1" >&2 - exit 1;; - - *) break;; - esac - shift -done - -if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then - # When -d is used, all remaining arguments are directories to create. - # When -t is used, the destination is already specified. - # Otherwise, the last argument is the destination. Remove it from $@. - for arg - do - if test -n "$dst_arg"; then - # $@ is not empty: it contains at least $arg. - set fnord "$@" "$dst_arg" - shift # fnord - fi - shift # arg - dst_arg=$arg - done -fi - -if test $# -eq 0; then - if test -z "$dir_arg"; then - echo "$0: no input file specified." >&2 - exit 1 - fi - # It's OK to call `install-sh -d' without argument. - # This can happen when creating conditional directories. - exit 0 -fi - -if test -z "$dir_arg"; then - trap '(exit $?); exit' 1 2 13 15 - - # Set umask so as not to create temps with too-generous modes. - # However, 'strip' requires both read and write access to temps. - case $mode in - # Optimize common cases. - *644) cp_umask=133;; - *755) cp_umask=22;; - - *[0-7]) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw='% 200' - fi - cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; - *) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw=,u+rw - fi - cp_umask=$mode$u_plus_rw;; - esac -fi - -for src -do - # Protect names starting with `-'. - case $src in - -*) src=./$src;; - esac - - if test -n "$dir_arg"; then - dst=$src - dstdir=$dst - test -d "$dstdir" - dstdir_status=$? - else - - # Waiting for this to be detected by the "$cpprog $src $dsttmp" command - # might cause directories to be created, which would be especially bad - # if $src (and thus $dsttmp) contains '*'. - if test ! -f "$src" && test ! -d "$src"; then - echo "$0: $src does not exist." >&2 - exit 1 - fi - - if test -z "$dst_arg"; then - echo "$0: no destination specified." >&2 - exit 1 - fi - - dst=$dst_arg - # Protect names starting with `-'. - case $dst in - -*) dst=./$dst;; - esac - - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. - if test -d "$dst"; then - if test -n "$no_target_directory"; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 - fi - dstdir=$dst - dst=$dstdir/`basename "$src"` - dstdir_status=0 - else - # Prefer dirname, but fall back on a substitute if dirname fails. - dstdir=` - (dirname "$dst") 2>/dev/null || - expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$dst" : 'X\(//\)[^/]' \| \ - X"$dst" : 'X\(//\)$' \| \ - X"$dst" : 'X\(/\)' \| . 2>/dev/null || - echo X"$dst" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q' - ` - - test -d "$dstdir" - dstdir_status=$? - fi - fi - - obsolete_mkdir_used=false - - if test $dstdir_status != 0; then - case $posix_mkdir in - '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 - - if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writeable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/d" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null - fi - trap '' 0;; - esac;; - esac - - if - $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" - ) - then : - else - - # The umask is ridiculous, or mkdir does not conform to POSIX, - # or it failed possibly due to a race condition. Create the - # directory the slow way, step by step, checking for races as we go. - - case $dstdir in - /*) prefix='/';; - -*) prefix='./';; - *) prefix='';; - esac - - eval "$initialize_posix_glob" - - oIFS=$IFS - IFS=/ - $posix_glob set -f - set fnord $dstdir - shift - $posix_glob set +f - IFS=$oIFS - - prefixes= - - for d - do - test -z "$d" && continue - - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ - done - - if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true - fi - fi - fi - - if test -n "$dir_arg"; then - { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && - { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || - test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 - else - - # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ - - # Trap to clean up those temp files at exit. - trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 - - # Copy the file name to the temp name. - (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && - - # and set any options; do chmod last to preserve setuid bits. - # - # If any of these fail, we abort the whole thing. If we want to - # ignore errors from any of these, just make sure not to ignore - # errors from the above "$doit $cpprog $src $dsttmp" command. - # - { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && - { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && - { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && - - # If -C, don't bother to copy if it wouldn't change the file. - if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - - eval "$initialize_posix_glob" && - $posix_glob set -f && - set X $old && old=:$2:$4:$5:$6 && - set X $new && new=:$2:$4:$5:$6 && - $posix_glob set +f && - - test "$old" = "$new" && - $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 - then - rm -f "$dsttmp" - else - # Rename the file to the real destination. - $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || - - # The rename failed, perhaps because mv can't rename something else - # to itself, or perhaps because mv is so ancient that it does not - # support -f. - { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" - } - fi || exit 1 - - trap '' 0 - fi -done - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/libffi.pc.in b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/libffi.pc.in deleted file mode 100644 index c2e1c7b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/libffi.pc.in +++ /dev/null @@ -1,10 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=${libdir}/@PACKAGE_NAME@-@PACKAGE_VERSION@/include - -Name: @PACKAGE_NAME@ -Description: Library supporting Foreign Function Interfaces -Version: @PACKAGE_VERSION@ -Libs: -L${libdir} -lffi -Cflags: -I${includedir} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/libtool-version b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/libtool-version deleted file mode 100644 index b8b80e0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/libtool-version +++ /dev/null @@ -1,29 +0,0 @@ -# This file is used to maintain libtool version info for libffi. See -# the libtool manual to understand the meaning of the fields. This is -# a separate file so that version updates don't involve re-running -# automake. -# -# Here are a set of rules to help you update your library version -# information: -# -# 1. Start with version information of `0:0:0' for each libtool library. -# -# 2. Update the version information only immediately before a public -# release of your software. More frequent updates are unnecessary, -# and only guarantee that the current interface number gets larger -# faster. -# -# 3. If the library source code has changed at all since the last -# update, then increment revision (`c:r:a' becomes `c:r+1:a'). -# -# 4. If any interfaces have been added, removed, or changed since the -# last update, increment current, and set revision to 0. -# -# 5. If any interfaces have been added since the last public release, -# then increment age. -# -# 6. If any interfaces have been removed since the last public -# release, then set age to 0. -# -# CURRENT:REVISION:AGE -5:10:0 diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/ltmain.sh b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/ltmain.sh deleted file mode 100755 index aa5624c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/ltmain.sh +++ /dev/null @@ -1,9636 +0,0 @@ - -# libtool (GNU libtool) 2.4 -# Written by Gordon Matzigkeit , 1996 - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, -# 2007, 2008, 2009, 2010 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# GNU Libtool is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, -# or obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -# Usage: $progname [OPTION]... [MODE-ARG]... -# -# Provide generalized library-building support services. -# -# --config show all configuration variables -# --debug enable verbose shell tracing -# -n, --dry-run display commands without modifying any files -# --features display basic configuration information and exit -# --mode=MODE use operation mode MODE -# --preserve-dup-deps don't remove duplicate dependency libraries -# --quiet, --silent don't print informational messages -# --no-quiet, --no-silent -# print informational messages (default) -# --tag=TAG use configuration variables from tag TAG -# -v, --verbose print more informational messages than default -# --no-verbose don't print the extra informational messages -# --version print version information -# -h, --help, --help-all print short, long, or detailed help message -# -# MODE must be one of the following: -# -# clean remove files from the build directory -# compile compile a source file into a libtool object -# execute automatically set library path, then run a program -# finish complete the installation of libtool libraries -# install install libraries or executables -# link create a library or an executable -# uninstall remove libraries from an installed directory -# -# MODE-ARGS vary depending on the MODE. When passed as first option, -# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. -# Try `$progname --help --mode=MODE' for a more detailed description of MODE. -# -# When reporting a bug, please describe a test case to reproduce it and -# include the following information: -# -# host-triplet: $host -# shell: $SHELL -# compiler: $LTCC -# compiler flags: $LTCFLAGS -# linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.4 -# automake: $automake_version -# autoconf: $autoconf_version -# -# Report bugs to . -# GNU libtool home page: . -# General help using GNU software: . - -PROGRAM=libtool -PACKAGE=libtool -VERSION=2.4 -TIMESTAMP="" -package_revision=1.3293 - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' -} - -# NLS nuisances: We save the old values to restore during execute mode. -lt_user_locale= -lt_safe_locale= -for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES -do - eval "if test \"\${$lt_var+set}\" = set; then - save_$lt_var=\$$lt_var - $lt_var=C - export $lt_var - lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" - lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" - fi" -done -LC_ALL=C -LANGUAGE=C -export LANGUAGE LC_ALL - -$lt_unset CDPATH - - -# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh -# is ksh but when the shell is invoked as "sh" and the current value of -# the _XPG environment variable is not equal to 1 (one), the special -# positional parameter $0, within a function call, is the name of the -# function. -progpath="$0" - - - -: ${CP="cp -f"} -test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} -: ${EGREP="/bin/grep -E"} -: ${FGREP="/bin/grep -F"} -: ${GREP="/bin/grep"} -: ${LN_S="ln -s"} -: ${MAKE="make"} -: ${MKDIR="mkdir"} -: ${MV="mv -f"} -: ${RM="rm -f"} -: ${SED="/bin/sed"} -: ${SHELL="${CONFIG_SHELL-/bin/sh}"} -: ${Xsed="$SED -e 1s/^X//"} - -# Global variables: -EXIT_SUCCESS=0 -EXIT_FAILURE=1 -EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. -EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. - -exit_status=$EXIT_SUCCESS - -# Make sure IFS has a sensible default -lt_nl=' -' -IFS=" $lt_nl" - -dirname="s,/[^/]*$,," -basename="s,^.*/,," - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} # func_dirname may be replaced by extended shell implementation - - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "${1}" | $SED "$basename"` -} # func_basename may be replaced by extended shell implementation - - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi - func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` -} # func_dirname_and_basename may be replaced by extended shell implementation - - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} # func_stripname may be replaced by extended shell implementation - - -# These SED scripts presuppose an absolute path with a trailing slash. -pathcar='s,^/\([^/]*\).*$,\1,' -pathcdr='s,^/[^/]*,,' -removedotparts=':dotsl - s@/\./@/@g - t dotsl - s,/\.$,/,' -collapseslashes='s@/\{1,\}@/@g' -finalslash='s,/*$,/,' - -# func_normal_abspath PATH -# Remove doubled-up and trailing slashes, "." path components, -# and cancel out any ".." path components in PATH after making -# it an absolute path. -# value returned in "$func_normal_abspath_result" -func_normal_abspath () -{ - # Start from root dir and reassemble the path. - func_normal_abspath_result= - func_normal_abspath_tpath=$1 - func_normal_abspath_altnamespace= - case $func_normal_abspath_tpath in - "") - # Empty path, that just means $cwd. - func_stripname '' '/' "`pwd`" - func_normal_abspath_result=$func_stripname_result - return - ;; - # The next three entries are used to spot a run of precisely - # two leading slashes without using negated character classes; - # we take advantage of case's first-match behaviour. - ///*) - # Unusual form of absolute path, do nothing. - ;; - //*) - # Not necessarily an ordinary path; POSIX reserves leading '//' - # and for example Cygwin uses it to access remote file shares - # over CIFS/SMB, so we conserve a leading double slash if found. - func_normal_abspath_altnamespace=/ - ;; - /*) - # Absolute path, do nothing. - ;; - *) - # Relative path, prepend $cwd. - func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath - ;; - esac - # Cancel out all the simple stuff to save iterations. We also want - # the path to end with a slash for ease of parsing, so make sure - # there is one (and only one) here. - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` - while :; do - # Processed it all yet? - if test "$func_normal_abspath_tpath" = / ; then - # If we ascended to the root using ".." the result may be empty now. - if test -z "$func_normal_abspath_result" ; then - func_normal_abspath_result=/ - fi - break - fi - func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$pathcar"` - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$pathcdr"` - # Figure out what to do with it - case $func_normal_abspath_tcomponent in - "") - # Trailing empty path component, ignore it. - ;; - ..) - # Parent dir; strip last assembled component from result. - func_dirname "$func_normal_abspath_result" - func_normal_abspath_result=$func_dirname_result - ;; - *) - # Actual path component, append it. - func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent - ;; - esac - done - # Restore leading double-slash if one was found on entry. - func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result -} - -# func_relative_path SRCDIR DSTDIR -# generates a relative path from SRCDIR to DSTDIR, with a trailing -# slash if non-empty, suitable for immediately appending a filename -# without needing to append a separator. -# value returned in "$func_relative_path_result" -func_relative_path () -{ - func_relative_path_result= - func_normal_abspath "$1" - func_relative_path_tlibdir=$func_normal_abspath_result - func_normal_abspath "$2" - func_relative_path_tbindir=$func_normal_abspath_result - - # Ascend the tree starting from libdir - while :; do - # check if we have found a prefix of bindir - case $func_relative_path_tbindir in - $func_relative_path_tlibdir) - # found an exact match - func_relative_path_tcancelled= - break - ;; - $func_relative_path_tlibdir*) - # found a matching prefix - func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" - func_relative_path_tcancelled=$func_stripname_result - if test -z "$func_relative_path_result"; then - func_relative_path_result=. - fi - break - ;; - *) - func_dirname $func_relative_path_tlibdir - func_relative_path_tlibdir=${func_dirname_result} - if test "x$func_relative_path_tlibdir" = x ; then - # Have to descend all the way to the root! - func_relative_path_result=../$func_relative_path_result - func_relative_path_tcancelled=$func_relative_path_tbindir - break - fi - func_relative_path_result=../$func_relative_path_result - ;; - esac - done - - # Now calculate path; take care to avoid doubling-up slashes. - func_stripname '' '/' "$func_relative_path_result" - func_relative_path_result=$func_stripname_result - func_stripname '/' '/' "$func_relative_path_tcancelled" - if test "x$func_stripname_result" != x ; then - func_relative_path_result=${func_relative_path_result}/${func_stripname_result} - fi - - # Normalisation. If bindir is libdir, return empty string, - # else relative path ending with a slash; either way, target - # file name can be directly appended. - if test ! -z "$func_relative_path_result"; then - func_stripname './' '' "$func_relative_path_result/" - func_relative_path_result=$func_stripname_result - fi -} - -# The name of this program: -func_dirname_and_basename "$progpath" -progname=$func_basename_result - -# Make sure we have an absolute path for reexecution: -case $progpath in - [\\/]*|[A-Za-z]:\\*) ;; - *[\\/]*) - progdir=$func_dirname_result - progdir=`cd "$progdir" && pwd` - progpath="$progdir/$progname" - ;; - *) - save_IFS="$IFS" - IFS=: - for progdir in $PATH; do - IFS="$save_IFS" - test -x "$progdir/$progname" && break - done - IFS="$save_IFS" - test -n "$progdir" || progdir=`pwd` - progpath="$progdir/$progname" - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed="${SED}"' -e 1s/^X//' -sed_quote_subst='s/\([`"$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution that turns a string into a regex matching for the -# string literally. -sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' - -# Sed substitution that converts a w32 file name or path -# which contains forward slashes, into one that contains -# (escaped) backslashes. A very naive implementation. -lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - -# Re-`\' parameter expansions in output of double_quote_subst that were -# `\'-ed in input to the same. If an odd number of `\' preceded a '$' -# in input to double_quote_subst, that '$' was protected from expansion. -# Since each input `\' is now two `\'s, look for any number of runs of -# four `\'s followed by two `\'s and then a '$'. `\' that '$'. -bs='\\' -bs2='\\\\' -bs4='\\\\\\\\' -dollar='\$' -sed_double_backslash="\ - s/$bs4/&\\ -/g - s/^$bs2$dollar/$bs&/ - s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g - s/\n//g" - -# Standard options: -opt_dry_run=false -opt_help=false -opt_quiet=false -opt_verbose=false -opt_warning=: - -# func_echo arg... -# Echo program name prefixed message, along with the current mode -# name if it has been set yet. -func_echo () -{ - $ECHO "$progname: ${opt_mode+$opt_mode: }$*" -} - -# func_verbose arg... -# Echo program name prefixed message in verbose mode only. -func_verbose () -{ - $opt_verbose && func_echo ${1+"$@"} - - # A bug in bash halts the script if the last line of a function - # fails when set -e is in force, so we need another command to - # work around that: - : -} - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "$*" -} - -# func_error arg... -# Echo program name prefixed message to standard error. -func_error () -{ - $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 -} - -# func_warning arg... -# Echo program name prefixed warning message to standard error. -func_warning () -{ - $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 - - # bash bug again: - : -} - -# func_fatal_error arg... -# Echo program name prefixed message to standard error, and exit. -func_fatal_error () -{ - func_error ${1+"$@"} - exit $EXIT_FAILURE -} - -# func_fatal_help arg... -# Echo program name prefixed message to standard error, followed by -# a help hint, and exit. -func_fatal_help () -{ - func_error ${1+"$@"} - func_fatal_error "$help" -} -help="Try \`$progname --help' for more information." ## default - - -# func_grep expression filename -# Check whether EXPRESSION matches any line of FILENAME, without output. -func_grep () -{ - $GREP "$1" "$2" >/dev/null 2>&1 -} - - -# func_mkdir_p directory-path -# Make sure the entire path to DIRECTORY-PATH is available. -func_mkdir_p () -{ - my_directory_path="$1" - my_dir_list= - - if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then - - # Protect directory names starting with `-' - case $my_directory_path in - -*) my_directory_path="./$my_directory_path" ;; - esac - - # While some portion of DIR does not yet exist... - while test ! -d "$my_directory_path"; do - # ...make a list in topmost first order. Use a colon delimited - # list incase some portion of path contains whitespace. - my_dir_list="$my_directory_path:$my_dir_list" - - # If the last portion added has no slash in it, the list is done - case $my_directory_path in */*) ;; *) break ;; esac - - # ...otherwise throw away the child directory and loop - my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` - done - my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` - - save_mkdir_p_IFS="$IFS"; IFS=':' - for my_dir in $my_dir_list; do - IFS="$save_mkdir_p_IFS" - # mkdir can fail with a `File exist' error if two processes - # try to create one of the directories concurrently. Don't - # stop in that case! - $MKDIR "$my_dir" 2>/dev/null || : - done - IFS="$save_mkdir_p_IFS" - - # Bail out if we (or some other process) failed to create a directory. - test -d "$my_directory_path" || \ - func_fatal_error "Failed to create \`$1'" - fi -} - - -# func_mktempdir [string] -# Make a temporary directory that won't clash with other running -# libtool processes, and avoids race conditions if possible. If -# given, STRING is the basename for that directory. -func_mktempdir () -{ - my_template="${TMPDIR-/tmp}/${1-$progname}" - - if test "$opt_dry_run" = ":"; then - # Return a directory name, but don't create it in dry-run mode - my_tmpdir="${my_template}-$$" - else - - # If mktemp works, use that first and foremost - my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` - - if test ! -d "$my_tmpdir"; then - # Failing that, at least try and use $RANDOM to avoid a race - my_tmpdir="${my_template}-${RANDOM-0}$$" - - save_mktempdir_umask=`umask` - umask 0077 - $MKDIR "$my_tmpdir" - umask $save_mktempdir_umask - fi - - # If we're not in dry-run mode, bomb out on failure - test -d "$my_tmpdir" || \ - func_fatal_error "cannot create temporary directory \`$my_tmpdir'" - fi - - $ECHO "$my_tmpdir" -} - - -# func_quote_for_eval arg -# Aesthetically quote ARG to be evaled later. -# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT -# is double-quoted, suitable for a subsequent eval, whereas -# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters -# which are still active within double quotes backslashified. -func_quote_for_eval () -{ - case $1 in - *[\\\`\"\$]*) - func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; - *) - func_quote_for_eval_unquoted_result="$1" ;; - esac - - case $func_quote_for_eval_unquoted_result in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and and variable - # expansion for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" - ;; - *) - func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" - esac -} - - -# func_quote_for_expand arg -# Aesthetically quote ARG to be evaled later; same as above, -# but do not quote variable references. -func_quote_for_expand () -{ - case $1 in - *[\\\`\"]*) - my_arg=`$ECHO "$1" | $SED \ - -e "$double_quote_subst" -e "$sed_double_backslash"` ;; - *) - my_arg="$1" ;; - esac - - case $my_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting and command substitution for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - my_arg="\"$my_arg\"" - ;; - esac - - func_quote_for_expand_result="$my_arg" -} - - -# func_show_eval cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. -func_show_eval () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$my_cmd" - my_status=$? - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - - -# func_show_eval_locale cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. Use the saved locale for evaluation. -func_show_eval_locale () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$lt_user_locale - $my_cmd" - my_status=$? - eval "$lt_safe_locale" - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - -# func_tr_sh -# Turn $1 into a string suitable for a shell variable name. -# Result is stored in $func_tr_sh_result. All characters -# not in the set a-zA-Z0-9_ are replaced with '_'. Further, -# if $1 begins with a digit, a '_' is prepended as well. -func_tr_sh () -{ - case $1 in - [0-9]* | *[!a-zA-Z0-9_]*) - func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` - ;; - * ) - func_tr_sh_result=$1 - ;; - esac -} - - -# func_version -# Echo version message to standard output and exit. -func_version () -{ - $opt_debug - - $SED -n '/(C)/!b go - :more - /\./!{ - N - s/\n# / / - b more - } - :go - /^# '$PROGRAM' (GNU /,/# warranty; / { - s/^# // - s/^# *$// - s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ - p - }' < "$progpath" - exit $? -} - -# func_usage -# Echo short help message to standard output and exit. -func_usage () -{ - $opt_debug - - $SED -n '/^# Usage:/,/^# *.*--help/ { - s/^# // - s/^# *$// - s/\$progname/'$progname'/ - p - }' < "$progpath" - echo - $ECHO "run \`$progname --help | more' for full usage" - exit $? -} - -# func_help [NOEXIT] -# Echo long help message to standard output and exit, -# unless 'noexit' is passed as argument. -func_help () -{ - $opt_debug - - $SED -n '/^# Usage:/,/# Report bugs to/ { - :print - s/^# // - s/^# *$// - s*\$progname*'$progname'* - s*\$host*'"$host"'* - s*\$SHELL*'"$SHELL"'* - s*\$LTCC*'"$LTCC"'* - s*\$LTCFLAGS*'"$LTCFLAGS"'* - s*\$LD*'"$LD"'* - s/\$with_gnu_ld/'"$with_gnu_ld"'/ - s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ - s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ - p - d - } - /^# .* home page:/b print - /^# General help using/b print - ' < "$progpath" - ret=$? - if test -z "$1"; then - exit $ret - fi -} - -# func_missing_arg argname -# Echo program name prefixed message to standard error and set global -# exit_cmd. -func_missing_arg () -{ - $opt_debug - - func_error "missing argument for $1." - exit_cmd=exit -} - - -# func_split_short_opt shortopt -# Set func_split_short_opt_name and func_split_short_opt_arg shell -# variables after splitting SHORTOPT after the 2nd character. -func_split_short_opt () -{ - my_sed_short_opt='1s/^\(..\).*$/\1/;q' - my_sed_short_rest='1s/^..\(.*\)$/\1/;q' - - func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` - func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` -} # func_split_short_opt may be replaced by extended shell implementation - - -# func_split_long_opt longopt -# Set func_split_long_opt_name and func_split_long_opt_arg shell -# variables after splitting LONGOPT at the `=' sign. -func_split_long_opt () -{ - my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' - my_sed_long_arg='1s/^--[^=]*=//' - - func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` - func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` -} # func_split_long_opt may be replaced by extended shell implementation - -exit_cmd=: - - - - - -magic="%%%MAGIC variable%%%" -magic_exe="%%%MAGIC EXE variable%%%" - -# Global variables. -nonopt= -preserve_args= -lo2o="s/\\.lo\$/.${objext}/" -o2lo="s/\\.${objext}\$/.lo/" -extracted_archives= -extracted_serial=0 - -# If this variable is set in any of the actions, the command in it -# will be execed at the end. This prevents here-documents from being -# left over by shells. -exec_cmd= - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "${1}=\$${1}\${2}" -} # func_append may be replaced by extended shell implementation - -# func_append_quoted var value -# Quote VALUE and append to the end of shell variable VAR, separated -# by a space. -func_append_quoted () -{ - func_quote_for_eval "${2}" - eval "${1}=\$${1}\\ \$func_quote_for_eval_result" -} # func_append_quoted may be replaced by extended shell implementation - - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "${@}"` -} # func_arith may be replaced by extended shell implementation - - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` -} # func_len may be replaced by extended shell implementation - - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` -} # func_lo2o may be replaced by extended shell implementation - - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` -} # func_xform may be replaced by extended shell implementation - - -# func_fatal_configuration arg... -# Echo program name prefixed message to standard error, followed by -# a configuration failure hint, and exit. -func_fatal_configuration () -{ - func_error ${1+"$@"} - func_error "See the $PACKAGE documentation for more information." - func_fatal_error "Fatal configuration error." -} - - -# func_config -# Display the configuration for all the tags in this script. -func_config () -{ - re_begincf='^# ### BEGIN LIBTOOL' - re_endcf='^# ### END LIBTOOL' - - # Default configuration. - $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" - - # Now print the configurations for the tags. - for tagname in $taglist; do - $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" - done - - exit $? -} - -# func_features -# Display the features supported by this script. -func_features () -{ - echo "host: $host" - if test "$build_libtool_libs" = yes; then - echo "enable shared libraries" - else - echo "disable shared libraries" - fi - if test "$build_old_libs" = yes; then - echo "enable static libraries" - else - echo "disable static libraries" - fi - - exit $? -} - -# func_enable_tag tagname -# Verify that TAGNAME is valid, and either flag an error and exit, or -# enable the TAGNAME tag. We also add TAGNAME to the global $taglist -# variable here. -func_enable_tag () -{ - # Global variable: - tagname="$1" - - re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" - re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" - sed_extractcf="/$re_begincf/,/$re_endcf/p" - - # Validate tagname. - case $tagname in - *[!-_A-Za-z0-9,/]*) - func_fatal_error "invalid tag name: $tagname" - ;; - esac - - # Don't test for the "default" C tag, as we know it's - # there but not specially marked. - case $tagname in - CC) ;; - *) - if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then - taglist="$taglist $tagname" - - # Evaluate the configuration. Be careful to quote the path - # and the sed script, to avoid splitting on whitespace, but - # also don't use non-portable quotes within backquotes within - # quotes we have to do it in 2 steps: - extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` - eval "$extractedcf" - else - func_error "ignoring unknown tag $tagname" - fi - ;; - esac -} - -# func_check_version_match -# Ensure that we are using m4 macros, and libtool script from the same -# release of libtool. -func_check_version_match () -{ - if test "$package_revision" != "$macro_revision"; then - if test "$VERSION" != "$macro_version"; then - if test -z "$macro_version"; then - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from an older release. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - fi - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, -$progname: but the definition of this LT_INIT comes from revision $macro_revision. -$progname: You should recreate aclocal.m4 with macros from revision $package_revision -$progname: of $PACKAGE $VERSION and run autoconf again. -_LT_EOF - fi - - exit $EXIT_MISMATCH - fi -} - - -# Shorthand for --mode=foo, only valid as the first argument -case $1 in -clean|clea|cle|cl) - shift; set dummy --mode clean ${1+"$@"}; shift - ;; -compile|compil|compi|comp|com|co|c) - shift; set dummy --mode compile ${1+"$@"}; shift - ;; -execute|execut|execu|exec|exe|ex|e) - shift; set dummy --mode execute ${1+"$@"}; shift - ;; -finish|finis|fini|fin|fi|f) - shift; set dummy --mode finish ${1+"$@"}; shift - ;; -install|instal|insta|inst|ins|in|i) - shift; set dummy --mode install ${1+"$@"}; shift - ;; -link|lin|li|l) - shift; set dummy --mode link ${1+"$@"}; shift - ;; -uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) - shift; set dummy --mode uninstall ${1+"$@"}; shift - ;; -esac - - - -# Option defaults: -opt_debug=: -opt_dry_run=false -opt_config=false -opt_preserve_dup_deps=false -opt_features=false -opt_finish=false -opt_help=false -opt_help_all=false -opt_silent=: -opt_verbose=: -opt_silent=false -opt_verbose=false - - -# Parse options once, thoroughly. This comes as soon as possible in the -# script to make things like `--version' happen as quickly as we can. -{ - # this just eases exit handling - while test $# -gt 0; do - opt="$1" - shift - case $opt in - --debug|-x) opt_debug='set -x' - func_echo "enabling shell trace mode" - $opt_debug - ;; - --dry-run|--dryrun|-n) - opt_dry_run=: - ;; - --config) - opt_config=: -func_config - ;; - --dlopen|-dlopen) - optarg="$1" - opt_dlopen="${opt_dlopen+$opt_dlopen -}$optarg" - shift - ;; - --preserve-dup-deps) - opt_preserve_dup_deps=: - ;; - --features) - opt_features=: -func_features - ;; - --finish) - opt_finish=: -set dummy --mode finish ${1+"$@"}; shift - ;; - --help) - opt_help=: - ;; - --help-all) - opt_help_all=: -opt_help=': help-all' - ;; - --mode) - test $# = 0 && func_missing_arg $opt && break - optarg="$1" - opt_mode="$optarg" -case $optarg in - # Valid mode arguments: - clean|compile|execute|finish|install|link|relink|uninstall) ;; - - # Catch anything else as an error - *) func_error "invalid argument for $opt" - exit_cmd=exit - break - ;; -esac - shift - ;; - --no-silent|--no-quiet) - opt_silent=false -func_append preserve_args " $opt" - ;; - --no-verbose) - opt_verbose=false -func_append preserve_args " $opt" - ;; - --silent|--quiet) - opt_silent=: -func_append preserve_args " $opt" - opt_verbose=false - ;; - --verbose|-v) - opt_verbose=: -func_append preserve_args " $opt" -opt_silent=false - ;; - --tag) - test $# = 0 && func_missing_arg $opt && break - optarg="$1" - opt_tag="$optarg" -func_append preserve_args " $opt $optarg" -func_enable_tag "$optarg" - shift - ;; - - -\?|-h) func_usage ;; - --help) func_help ;; - --version) func_version ;; - - # Separate optargs to long options: - --*=*) - func_split_long_opt "$opt" - set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} - shift - ;; - - # Separate non-argument short options: - -\?*|-h*|-n*|-v*) - func_split_short_opt "$opt" - set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} - shift - ;; - - --) break ;; - -*) func_fatal_help "unrecognized option \`$opt'" ;; - *) set dummy "$opt" ${1+"$@"}; shift; break ;; - esac - done - - # Validate options: - - # save first non-option argument - if test "$#" -gt 0; then - nonopt="$opt" - shift - fi - - # preserve --debug - test "$opt_debug" = : || func_append preserve_args " --debug" - - case $host in - *cygwin* | *mingw* | *pw32* | *cegcc*) - # don't eliminate duplications in $postdeps and $predeps - opt_duplicate_compiler_generated_deps=: - ;; - *) - opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps - ;; - esac - - $opt_help || { - # Sanity checks first: - func_check_version_match - - if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then - func_fatal_configuration "not configured to build any kind of library" - fi - - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$opt_dlopen" && test "$opt_mode" != execute; then - func_error "unrecognized option \`-dlopen'" - $ECHO "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$progname --help --mode=$opt_mode' for more information." - } - - - # Bail if the options were screwed - $exit_cmd $EXIT_FAILURE -} - - - - -## ----------- ## -## Main. ## -## ----------- ## - -# func_lalib_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_lalib_p () -{ - test -f "$1" && - $SED -e 4q "$1" 2>/dev/null \ - | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 -} - -# func_lalib_unsafe_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function implements the same check as func_lalib_p without -# resorting to external programs. To this end, it redirects stdin and -# closes it afterwards, without saving the original file descriptor. -# As a safety measure, use it only where a negative result would be -# fatal anyway. Works if `file' does not exist. -func_lalib_unsafe_p () -{ - lalib_p=no - if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then - for lalib_p_l in 1 2 3 4 - do - read lalib_p_line - case "$lalib_p_line" in - \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; - esac - done - exec 0<&5 5<&- - fi - test "$lalib_p" = yes -} - -# func_ltwrapper_script_p file -# True iff FILE is a libtool wrapper script -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_script_p () -{ - func_lalib_p "$1" -} - -# func_ltwrapper_executable_p file -# True iff FILE is a libtool wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_executable_p () -{ - func_ltwrapper_exec_suffix= - case $1 in - *.exe) ;; - *) func_ltwrapper_exec_suffix=.exe ;; - esac - $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 -} - -# func_ltwrapper_scriptname file -# Assumes file is an ltwrapper_executable -# uses $file to determine the appropriate filename for a -# temporary ltwrapper_script. -func_ltwrapper_scriptname () -{ - func_dirname_and_basename "$1" "" "." - func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" -} - -# func_ltwrapper_p file -# True iff FILE is a libtool wrapper script or wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_p () -{ - func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" -} - - -# func_execute_cmds commands fail_cmd -# Execute tilde-delimited COMMANDS. -# If FAIL_CMD is given, eval that upon failure. -# FAIL_CMD may read-access the current command in variable CMD! -func_execute_cmds () -{ - $opt_debug - save_ifs=$IFS; IFS='~' - for cmd in $1; do - IFS=$save_ifs - eval cmd=\"$cmd\" - func_show_eval "$cmd" "${2-:}" - done - IFS=$save_ifs -} - - -# func_source file -# Source FILE, adding directory component if necessary. -# Note that it is not necessary on cygwin/mingw to append a dot to -# FILE even if both FILE and FILE.exe exist: automatic-append-.exe -# behavior happens only for exec(3), not for open(2)! Also, sourcing -# `FILE.' does not work on cygwin managed mounts. -func_source () -{ - $opt_debug - case $1 in - */* | *\\*) . "$1" ;; - *) . "./$1" ;; - esac -} - - -# func_resolve_sysroot PATH -# Replace a leading = in PATH with a sysroot. Store the result into -# func_resolve_sysroot_result -func_resolve_sysroot () -{ - func_resolve_sysroot_result=$1 - case $func_resolve_sysroot_result in - =*) - func_stripname '=' '' "$func_resolve_sysroot_result" - func_resolve_sysroot_result=$lt_sysroot$func_stripname_result - ;; - esac -} - -# func_replace_sysroot PATH -# If PATH begins with the sysroot, replace it with = and -# store the result into func_replace_sysroot_result. -func_replace_sysroot () -{ - case "$lt_sysroot:$1" in - ?*:"$lt_sysroot"*) - func_stripname "$lt_sysroot" '' "$1" - func_replace_sysroot_result="=$func_stripname_result" - ;; - *) - # Including no sysroot. - func_replace_sysroot_result=$1 - ;; - esac -} - -# func_infer_tag arg -# Infer tagged configuration to use if any are available and -# if one wasn't chosen via the "--tag" command line option. -# Only attempt this if the compiler in the base compile -# command doesn't match the default compiler. -# arg is usually of the form 'gcc ...' -func_infer_tag () -{ - $opt_debug - if test -n "$available_tags" && test -z "$tagname"; then - CC_quoted= - for arg in $CC; do - func_append_quoted CC_quoted "$arg" - done - CC_expanded=`func_echo_all $CC` - CC_quoted_expanded=`func_echo_all $CC_quoted` - case $@ in - # Blanks in the command may have been stripped by the calling shell, - # but not from the CC environment variable when configure was run. - " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ - " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; - # Blanks at the start of $base_compile will cause this to fail - # if we don't check for them as well. - *) - for z in $available_tags; do - if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then - # Evaluate the configuration. - eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" - CC_quoted= - for arg in $CC; do - # Double-quote args containing other shell metacharacters. - func_append_quoted CC_quoted "$arg" - done - CC_expanded=`func_echo_all $CC` - CC_quoted_expanded=`func_echo_all $CC_quoted` - case "$@ " in - " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ - " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) - # The compiler in the base compile command matches - # the one in the tagged configuration. - # Assume this is the tagged configuration we want. - tagname=$z - break - ;; - esac - fi - done - # If $tagname still isn't set, then no tagged configuration - # was found and let the user know that the "--tag" command - # line option must be used. - if test -z "$tagname"; then - func_echo "unable to infer tagged configuration" - func_fatal_error "specify a tag with \`--tag'" -# else -# func_verbose "using $tagname tagged configuration" - fi - ;; - esac - fi -} - - - -# func_write_libtool_object output_name pic_name nonpic_name -# Create a libtool object file (analogous to a ".la" file), -# but don't create it if we're doing a dry run. -func_write_libtool_object () -{ - write_libobj=${1} - if test "$build_libtool_libs" = yes; then - write_lobj=\'${2}\' - else - write_lobj=none - fi - - if test "$build_old_libs" = yes; then - write_oldobj=\'${3}\' - else - write_oldobj=none - fi - - $opt_dry_run || { - cat >${write_libobj}T </dev/null` - if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then - func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | - $SED -e "$lt_sed_naive_backslashify"` - else - func_convert_core_file_wine_to_w32_result= - fi - fi -} -# end: func_convert_core_file_wine_to_w32 - - -# func_convert_core_path_wine_to_w32 ARG -# Helper function used by path conversion functions when $build is *nix, and -# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly -# configured wine environment available, with the winepath program in $build's -# $PATH. Assumes ARG has no leading or trailing path separator characters. -# -# ARG is path to be converted from $build format to win32. -# Result is available in $func_convert_core_path_wine_to_w32_result. -# Unconvertible file (directory) names in ARG are skipped; if no directory names -# are convertible, then the result may be empty. -func_convert_core_path_wine_to_w32 () -{ - $opt_debug - # unfortunately, winepath doesn't convert paths, only file names - func_convert_core_path_wine_to_w32_result="" - if test -n "$1"; then - oldIFS=$IFS - IFS=: - for func_convert_core_path_wine_to_w32_f in $1; do - IFS=$oldIFS - func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" - if test -n "$func_convert_core_file_wine_to_w32_result" ; then - if test -z "$func_convert_core_path_wine_to_w32_result"; then - func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" - else - func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" - fi - fi - done - IFS=$oldIFS - fi -} -# end: func_convert_core_path_wine_to_w32 - - -# func_cygpath ARGS... -# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when -# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) -# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or -# (2), returns the Cygwin file name or path in func_cygpath_result (input -# file name or path is assumed to be in w32 format, as previously converted -# from $build's *nix or MSYS format). In case (3), returns the w32 file name -# or path in func_cygpath_result (input file name or path is assumed to be in -# Cygwin format). Returns an empty string on error. -# -# ARGS are passed to cygpath, with the last one being the file name or path to -# be converted. -# -# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH -# environment variable; do not put it in $PATH. -func_cygpath () -{ - $opt_debug - if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then - func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` - if test "$?" -ne 0; then - # on failure, ensure result is empty - func_cygpath_result= - fi - else - func_cygpath_result= - func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" - fi -} -#end: func_cygpath - - -# func_convert_core_msys_to_w32 ARG -# Convert file name or path ARG from MSYS format to w32 format. Return -# result in func_convert_core_msys_to_w32_result. -func_convert_core_msys_to_w32 () -{ - $opt_debug - # awkward: cmd appends spaces to result - func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | - $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` -} -#end: func_convert_core_msys_to_w32 - - -# func_convert_file_check ARG1 ARG2 -# Verify that ARG1 (a file name in $build format) was converted to $host -# format in ARG2. Otherwise, emit an error message, but continue (resetting -# func_to_host_file_result to ARG1). -func_convert_file_check () -{ - $opt_debug - if test -z "$2" && test -n "$1" ; then - func_error "Could not determine host file name corresponding to" - func_error " \`$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback: - func_to_host_file_result="$1" - fi -} -# end func_convert_file_check - - -# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH -# Verify that FROM_PATH (a path in $build format) was converted to $host -# format in TO_PATH. Otherwise, emit an error message, but continue, resetting -# func_to_host_file_result to a simplistic fallback value (see below). -func_convert_path_check () -{ - $opt_debug - if test -z "$4" && test -n "$3"; then - func_error "Could not determine the host path corresponding to" - func_error " \`$3'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback. This is a deliberately simplistic "conversion" and - # should not be "improved". See libtool.info. - if test "x$1" != "x$2"; then - lt_replace_pathsep_chars="s|$1|$2|g" - func_to_host_path_result=`echo "$3" | - $SED -e "$lt_replace_pathsep_chars"` - else - func_to_host_path_result="$3" - fi - fi -} -# end func_convert_path_check - - -# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG -# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT -# and appending REPL if ORIG matches BACKPAT. -func_convert_path_front_back_pathsep () -{ - $opt_debug - case $4 in - $1 ) func_to_host_path_result="$3$func_to_host_path_result" - ;; - esac - case $4 in - $2 ) func_append func_to_host_path_result "$3" - ;; - esac -} -# end func_convert_path_front_back_pathsep - - -################################################## -# $build to $host FILE NAME CONVERSION FUNCTIONS # -################################################## -# invoked via `$to_host_file_cmd ARG' -# -# In each case, ARG is the path to be converted from $build to $host format. -# Result will be available in $func_to_host_file_result. - - -# func_to_host_file ARG -# Converts the file name ARG from $build format to $host format. Return result -# in func_to_host_file_result. -func_to_host_file () -{ - $opt_debug - $to_host_file_cmd "$1" -} -# end func_to_host_file - - -# func_to_tool_file ARG LAZY -# converts the file name ARG from $build format to toolchain format. Return -# result in func_to_tool_file_result. If the conversion in use is listed -# in (the comma separated) LAZY, no conversion takes place. -func_to_tool_file () -{ - $opt_debug - case ,$2, in - *,"$to_tool_file_cmd",*) - func_to_tool_file_result=$1 - ;; - *) - $to_tool_file_cmd "$1" - func_to_tool_file_result=$func_to_host_file_result - ;; - esac -} -# end func_to_tool_file - - -# func_convert_file_noop ARG -# Copy ARG to func_to_host_file_result. -func_convert_file_noop () -{ - func_to_host_file_result="$1" -} -# end func_convert_file_noop - - -# func_convert_file_msys_to_w32 ARG -# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic -# conversion to w32 is not available inside the cwrapper. Returns result in -# func_to_host_file_result. -func_convert_file_msys_to_w32 () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - func_convert_core_msys_to_w32 "$1" - func_to_host_file_result="$func_convert_core_msys_to_w32_result" - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_msys_to_w32 - - -# func_convert_file_cygwin_to_w32 ARG -# Convert file name ARG from Cygwin to w32 format. Returns result in -# func_to_host_file_result. -func_convert_file_cygwin_to_w32 () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - # because $build is cygwin, we call "the" cygpath in $PATH; no need to use - # LT_CYGPATH in this case. - func_to_host_file_result=`cygpath -m "$1"` - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_cygwin_to_w32 - - -# func_convert_file_nix_to_w32 ARG -# Convert file name ARG from *nix to w32 format. Requires a wine environment -# and a working winepath. Returns result in func_to_host_file_result. -func_convert_file_nix_to_w32 () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - func_convert_core_file_wine_to_w32 "$1" - func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_nix_to_w32 - - -# func_convert_file_msys_to_cygwin ARG -# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. -# Returns result in func_to_host_file_result. -func_convert_file_msys_to_cygwin () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - func_convert_core_msys_to_w32 "$1" - func_cygpath -u "$func_convert_core_msys_to_w32_result" - func_to_host_file_result="$func_cygpath_result" - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_msys_to_cygwin - - -# func_convert_file_nix_to_cygwin ARG -# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed -# in a wine environment, working winepath, and LT_CYGPATH set. Returns result -# in func_to_host_file_result. -func_convert_file_nix_to_cygwin () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. - func_convert_core_file_wine_to_w32 "$1" - func_cygpath -u "$func_convert_core_file_wine_to_w32_result" - func_to_host_file_result="$func_cygpath_result" - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_nix_to_cygwin - - -############################################# -# $build to $host PATH CONVERSION FUNCTIONS # -############################################# -# invoked via `$to_host_path_cmd ARG' -# -# In each case, ARG is the path to be converted from $build to $host format. -# The result will be available in $func_to_host_path_result. -# -# Path separators are also converted from $build format to $host format. If -# ARG begins or ends with a path separator character, it is preserved (but -# converted to $host format) on output. -# -# All path conversion functions are named using the following convention: -# file name conversion function : func_convert_file_X_to_Y () -# path conversion function : func_convert_path_X_to_Y () -# where, for any given $build/$host combination the 'X_to_Y' value is the -# same. If conversion functions are added for new $build/$host combinations, -# the two new functions must follow this pattern, or func_init_to_host_path_cmd -# will break. - - -# func_init_to_host_path_cmd -# Ensures that function "pointer" variable $to_host_path_cmd is set to the -# appropriate value, based on the value of $to_host_file_cmd. -to_host_path_cmd= -func_init_to_host_path_cmd () -{ - $opt_debug - if test -z "$to_host_path_cmd"; then - func_stripname 'func_convert_file_' '' "$to_host_file_cmd" - to_host_path_cmd="func_convert_path_${func_stripname_result}" - fi -} - - -# func_to_host_path ARG -# Converts the path ARG from $build format to $host format. Return result -# in func_to_host_path_result. -func_to_host_path () -{ - $opt_debug - func_init_to_host_path_cmd - $to_host_path_cmd "$1" -} -# end func_to_host_path - - -# func_convert_path_noop ARG -# Copy ARG to func_to_host_path_result. -func_convert_path_noop () -{ - func_to_host_path_result="$1" -} -# end func_convert_path_noop - - -# func_convert_path_msys_to_w32 ARG -# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic -# conversion to w32 is not available inside the cwrapper. Returns result in -# func_to_host_path_result. -func_convert_path_msys_to_w32 () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # Remove leading and trailing path separator characters from ARG. MSYS - # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; - # and winepath ignores them completely. - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result="$func_convert_core_msys_to_w32_result" - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_msys_to_w32 - - -# func_convert_path_cygwin_to_w32 ARG -# Convert path ARG from Cygwin to w32 format. Returns result in -# func_to_host_file_result. -func_convert_path_cygwin_to_w32 () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_cygwin_to_w32 - - -# func_convert_path_nix_to_w32 ARG -# Convert path ARG from *nix to w32 format. Requires a wine environment and -# a working winepath. Returns result in func_to_host_file_result. -func_convert_path_nix_to_w32 () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_nix_to_w32 - - -# func_convert_path_msys_to_cygwin ARG -# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. -# Returns result in func_to_host_file_result. -func_convert_path_msys_to_cygwin () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" - func_cygpath -u -p "$func_convert_core_msys_to_w32_result" - func_to_host_path_result="$func_cygpath_result" - func_convert_path_check : : \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" : "$1" - fi -} -# end func_convert_path_msys_to_cygwin - - -# func_convert_path_nix_to_cygwin ARG -# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a -# a wine environment, working winepath, and LT_CYGPATH set. Returns result in -# func_to_host_file_result. -func_convert_path_nix_to_cygwin () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # Remove leading and trailing path separator characters from - # ARG. msys behavior is inconsistent here, cygpath turns them - # into '.;' and ';.', and winepath ignores them completely. - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" - func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" - func_to_host_path_result="$func_cygpath_result" - func_convert_path_check : : \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" : "$1" - fi -} -# end func_convert_path_nix_to_cygwin - - -# func_mode_compile arg... -func_mode_compile () -{ - $opt_debug - # Get the compilation command and the source file. - base_compile= - srcfile="$nonopt" # always keep a non-empty value in "srcfile" - suppress_opt=yes - suppress_output= - arg_mode=normal - libobj= - later= - pie_flag= - - for arg - do - case $arg_mode in - arg ) - # do not "continue". Instead, add this to base_compile - lastarg="$arg" - arg_mode=normal - ;; - - target ) - libobj="$arg" - arg_mode=normal - continue - ;; - - normal ) - # Accept any command-line options. - case $arg in - -o) - test -n "$libobj" && \ - func_fatal_error "you cannot specify \`-o' more than once" - arg_mode=target - continue - ;; - - -pie | -fpie | -fPIE) - func_append pie_flag " $arg" - continue - ;; - - -shared | -static | -prefer-pic | -prefer-non-pic) - func_append later " $arg" - continue - ;; - - -no-suppress) - suppress_opt=no - continue - ;; - - -Xcompiler) - arg_mode=arg # the next one goes into the "base_compile" arg list - continue # The current "srcfile" will either be retained or - ;; # replaced later. I would guess that would be a bug. - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - lastarg= - save_ifs="$IFS"; IFS=',' - for arg in $args; do - IFS="$save_ifs" - func_append_quoted lastarg "$arg" - done - IFS="$save_ifs" - func_stripname ' ' '' "$lastarg" - lastarg=$func_stripname_result - - # Add the arguments to base_compile. - func_append base_compile " $lastarg" - continue - ;; - - *) - # Accept the current argument as the source file. - # The previous "srcfile" becomes the current argument. - # - lastarg="$srcfile" - srcfile="$arg" - ;; - esac # case $arg - ;; - esac # case $arg_mode - - # Aesthetically quote the previous argument. - func_append_quoted base_compile "$lastarg" - done # for arg - - case $arg_mode in - arg) - func_fatal_error "you must specify an argument for -Xcompile" - ;; - target) - func_fatal_error "you must specify a target with \`-o'" - ;; - *) - # Get the name of the library object. - test -z "$libobj" && { - func_basename "$srcfile" - libobj="$func_basename_result" - } - ;; - esac - - # Recognize several different file suffixes. - # If the user specifies -o file.o, it is replaced with file.lo - case $libobj in - *.[cCFSifmso] | \ - *.ada | *.adb | *.ads | *.asm | \ - *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ - *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup) - func_xform "$libobj" - libobj=$func_xform_result - ;; - esac - - case $libobj in - *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; - *) - func_fatal_error "cannot determine name of library object from \`$libobj'" - ;; - esac - - func_infer_tag $base_compile - - for arg in $later; do - case $arg in - -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" - build_old_libs=no - continue - ;; - - -static) - build_libtool_libs=no - build_old_libs=yes - continue - ;; - - -prefer-pic) - pic_mode=yes - continue - ;; - - -prefer-non-pic) - pic_mode=no - continue - ;; - esac - done - - func_quote_for_eval "$libobj" - test "X$libobj" != "X$func_quote_for_eval_result" \ - && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ - && func_warning "libobj name \`$libobj' may not contain shell special characters." - func_dirname_and_basename "$obj" "/" "" - objname="$func_basename_result" - xdir="$func_dirname_result" - lobj=${xdir}$objdir/$objname - - test -z "$base_compile" && \ - func_fatal_help "you must specify a compilation command" - - # Delete any leftover library objects. - if test "$build_old_libs" = yes; then - removelist="$obj $lobj $libobj ${libobj}T" - else - removelist="$lobj $libobj ${libobj}T" - fi - - # On Cygwin there's no "real" PIC flag so we must build both object types - case $host_os in - cygwin* | mingw* | pw32* | os2* | cegcc*) - pic_mode=default - ;; - esac - if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi - - # Calculate the filename of the output object if compiler does - # not support -o with -c - if test "$compiler_c_o" = no; then - output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} - lockfile="$output_obj.lock" - else - output_obj= - need_locks=no - lockfile= - fi - - # Lock this critical section if it is needed - # We use this script file to make the link, it avoids creating a new file - if test "$need_locks" = yes; then - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - elif test "$need_locks" = warn; then - if test -f "$lockfile"; then - $ECHO "\ -*** ERROR, $lockfile exists and contains: -`cat $lockfile 2>/dev/null` - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - func_append removelist " $output_obj" - $ECHO "$srcfile" > "$lockfile" - fi - - $opt_dry_run || $RM $removelist - func_append removelist " $lockfile" - trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 - - func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 - srcfile=$func_to_tool_file_result - func_quote_for_eval "$srcfile" - qsrcfile=$func_quote_for_eval_result - - # Only build a PIC object if we are building libtool libraries. - if test "$build_libtool_libs" = yes; then - # Without this assignment, base_compile gets emptied. - fbsd_hideous_sh_bug=$base_compile - - if test "$pic_mode" != no; then - command="$base_compile $qsrcfile $pic_flag" - else - # Don't build PIC code - command="$base_compile $qsrcfile" - fi - - func_mkdir_p "$xdir$objdir" - - if test -z "$output_obj"; then - # Place PIC objects in $objdir - func_append command " -o $lobj" - fi - - func_show_eval_locale "$command" \ - 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed, then go on to compile the next one - if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then - func_show_eval '$MV "$output_obj" "$lobj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - - # Allow error messages only from the first compilation. - if test "$suppress_opt" = yes; then - suppress_output=' >/dev/null 2>&1' - fi - fi - - # Only build a position-dependent object if we build old libraries. - if test "$build_old_libs" = yes; then - if test "$pic_mode" != yes; then - # Don't build PIC code - command="$base_compile $qsrcfile$pie_flag" - else - command="$base_compile $qsrcfile $pic_flag" - fi - if test "$compiler_c_o" = yes; then - func_append command " -o $obj" - fi - - # Suppress compiler output if we already did a PIC compilation. - func_append command "$suppress_output" - func_show_eval_locale "$command" \ - '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed - if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then - func_show_eval '$MV "$output_obj" "$obj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - fi - - $opt_dry_run || { - func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" - - # Unlock the critical section if it was locked - if test "$need_locks" != no; then - removelist=$lockfile - $RM "$lockfile" - fi - } - - exit $EXIT_SUCCESS -} - -$opt_help || { - test "$opt_mode" = compile && func_mode_compile ${1+"$@"} -} - -func_mode_help () -{ - # We need to display help for each of the modes. - case $opt_mode in - "") - # Generic help is extracted from the usage comments - # at the start of this file. - func_help - ;; - - clean) - $ECHO \ -"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... - -Remove files from the build directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, object or program, all the files associated -with it are deleted. Otherwise, only FILE itself is deleted using RM." - ;; - - compile) - $ECHO \ -"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - -Compile a source file into a libtool library object. - -This mode accepts the following additional options: - - -o OUTPUT-FILE set the output file name to OUTPUT-FILE - -no-suppress do not suppress compiler output for multiple passes - -prefer-pic try to build PIC objects only - -prefer-non-pic try to build non-PIC objects only - -shared do not build a \`.o' file suitable for static linking - -static only build a \`.o' file suitable for static linking - -Wc,FLAG pass FLAG directly to the compiler - -COMPILE-COMMAND is a command to be used in creating a \`standard' object file -from the given SOURCEFILE. - -The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix \`.c' with the -library object suffix, \`.lo'." - ;; - - execute) - $ECHO \ -"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... - -Automatically set library path, then run a program. - -This mode accepts the following additional options: - - -dlopen FILE add the directory containing FILE to the library path - -This mode sets the library path environment variable according to \`-dlopen' -flags. - -If any of the ARGS are libtool executable wrappers, then they are translated -into their corresponding uninstalled binary, and any of their required library -directories are added to the library path. - -Then, COMMAND is executed, with ARGS as arguments." - ;; - - finish) - $ECHO \ -"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... - -Complete the installation of libtool libraries. - -Each LIBDIR is a directory that contains libtool libraries. - -The commands that this mode executes may require superuser privileges. Use -the \`--dry-run' option if you just want to see what would be executed." - ;; - - install) - $ECHO \ -"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... - -Install executables or libraries. - -INSTALL-COMMAND is the installation command. The first component should be -either the \`install' or \`cp' program. - -The following components of INSTALL-COMMAND are treated specially: - - -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation - -The rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." - ;; - - link) - $ECHO \ -"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... - -Link object files or libraries together to form another library, or to -create an executable program. - -LINK-COMMAND is a command using the C compiler that you would use to create -a program from several object files. - -The following components of LINK-COMMAND are treated specially: - - -all-static do not do any dynamic linking at all - -avoid-version do not add a version suffix if possible - -bindir BINDIR specify path to binaries directory (for systems where - libraries must be found in the PATH setting at runtime) - -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime - -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols - -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) - -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE - -export-symbols-regex REGEX - try to export only the symbols matching REGEX - -LLIBDIR search LIBDIR for required installed libraries - -lNAME OUTPUT-FILE requires the installed library libNAME - -module build a library that can dlopened - -no-fast-install disable the fast-install mode - -no-install link a not-installable executable - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -objectlist FILE Use a list of object files found in FILE to specify objects - -precious-files-regex REGEX - don't remove output files matching REGEX - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -shared only do dynamic linking of libtool libraries - -shrext SUFFIX override the standard shared library file extension - -static do not do any dynamic linking of uninstalled libtool libraries - -static-libtool-libs - do not do any dynamic linking of libtool libraries - -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] - -weak LIBNAME declare that the target provides the LIBNAME interface - -Wc,FLAG - -Xcompiler FLAG pass linker-specific FLAG directly to the compiler - -Wl,FLAG - -Xlinker FLAG pass linker-specific FLAG directly to the linker - -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) - -All other options (arguments beginning with \`-') are ignored. - -Every other argument is treated as a filename. Files ending in \`.la' are -treated as uninstalled libtool libraries, other files are standard or library -object files. - -If the OUTPUT-FILE ends in \`.la', then a libtool library is created, -only library objects (\`.lo' files) may be specified, and \`-rpath' is -required, except when creating a convenience library. - -If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created -using \`ar' and \`ranlib', or on Windows using \`lib'. - -If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file -is created, otherwise an executable program is created." - ;; - - uninstall) - $ECHO \ -"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -Remove libraries from an installation directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, all the files associated with it are deleted. -Otherwise, only FILE itself is deleted using RM." - ;; - - *) - func_fatal_help "invalid operation mode \`$opt_mode'" - ;; - esac - - echo - $ECHO "Try \`$progname --help' for more information about other modes." -} - -# Now that we've collected a possible --mode arg, show help if necessary -if $opt_help; then - if test "$opt_help" = :; then - func_mode_help - else - { - func_help noexit - for opt_mode in compile link execute install finish uninstall clean; do - func_mode_help - done - } | sed -n '1p; 2,$s/^Usage:/ or: /p' - { - func_help noexit - for opt_mode in compile link execute install finish uninstall clean; do - echo - func_mode_help - done - } | - sed '1d - /^When reporting/,/^Report/{ - H - d - } - $x - /information about other modes/d - /more detailed .*MODE/d - s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' - fi - exit $? -fi - - -# func_mode_execute arg... -func_mode_execute () -{ - $opt_debug - # The first argument is the command name. - cmd="$nonopt" - test -z "$cmd" && \ - func_fatal_help "you must specify a COMMAND" - - # Handle -dlopen flags immediately. - for file in $opt_dlopen; do - test -f "$file" \ - || func_fatal_help "\`$file' is not a file" - - dir= - case $file in - *.la) - func_resolve_sysroot "$file" - file=$func_resolve_sysroot_result - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$lib' is not a valid libtool archive" - - # Read the libtool library. - dlname= - library_names= - func_source "$file" - - # Skip this library if it cannot be dlopened. - if test -z "$dlname"; then - # Warn if it was a shared library. - test -n "$library_names" && \ - func_warning "\`$file' was not linked with \`-export-dynamic'" - continue - fi - - func_dirname "$file" "" "." - dir="$func_dirname_result" - - if test -f "$dir/$objdir/$dlname"; then - func_append dir "/$objdir" - else - if test ! -f "$dir/$dlname"; then - func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" - fi - fi - ;; - - *.lo) - # Just add the directory containing the .lo file. - func_dirname "$file" "" "." - dir="$func_dirname_result" - ;; - - *) - func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" - continue - ;; - esac - - # Get the absolute pathname. - absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir="$absdir" - - # Now add the directory to shlibpath_var. - if eval "test -z \"\$$shlibpath_var\""; then - eval "$shlibpath_var=\"\$dir\"" - else - eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" - fi - done - - # This variable tells wrapper scripts just to set shlibpath_var - # rather than running their programs. - libtool_execute_magic="$magic" - - # Check if any of the arguments is a wrapper script. - args= - for file - do - case $file in - -* | *.la | *.lo ) ;; - *) - # Do a test to see if this is really a libtool program. - if func_ltwrapper_script_p "$file"; then - func_source "$file" - # Transform arg to wrapped name. - file="$progdir/$program" - elif func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - func_source "$func_ltwrapper_scriptname_result" - # Transform arg to wrapped name. - file="$progdir/$program" - fi - ;; - esac - # Quote arguments (to preserve shell metacharacters). - func_append_quoted args "$file" - done - - if test "X$opt_dry_run" = Xfalse; then - if test -n "$shlibpath_var"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - fi - - # Restore saved environment variables - for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES - do - eval "if test \"\${save_$lt_var+set}\" = set; then - $lt_var=\$save_$lt_var; export $lt_var - else - $lt_unset $lt_var - fi" - done - - # Now prepare to actually exec the command. - exec_cmd="\$cmd$args" - else - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" - echo "export $shlibpath_var" - fi - $ECHO "$cmd$args" - exit $EXIT_SUCCESS - fi -} - -test "$opt_mode" = execute && func_mode_execute ${1+"$@"} - - -# func_mode_finish arg... -func_mode_finish () -{ - $opt_debug - libs= - libdirs= - admincmds= - - for opt in "$nonopt" ${1+"$@"} - do - if test -d "$opt"; then - func_append libdirs " $opt" - - elif test -f "$opt"; then - if func_lalib_unsafe_p "$opt"; then - func_append libs " $opt" - else - func_warning "\`$opt' is not a valid libtool archive" - fi - - else - func_fatal_error "invalid argument \`$opt'" - fi - done - - if test -n "$libs"; then - if test -n "$lt_sysroot"; then - sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` - sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" - else - sysroot_cmd= - fi - - # Remove sysroot references - if $opt_dry_run; then - for lib in $libs; do - echo "removing references to $lt_sysroot and \`=' prefixes from $lib" - done - else - tmpdir=`func_mktempdir` - for lib in $libs; do - sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ - > $tmpdir/tmp-la - mv -f $tmpdir/tmp-la $lib - done - ${RM}r "$tmpdir" - fi - fi - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for libdir in $libdirs; do - if test -n "$finish_cmds"; then - # Do each command in the finish commands. - func_execute_cmds "$finish_cmds" 'admincmds="$admincmds -'"$cmd"'"' - fi - if test -n "$finish_eval"; then - # Do the single finish_eval. - eval cmds=\"$finish_eval\" - $opt_dry_run || eval "$cmds" || func_append admincmds " - $cmds" - fi - done - fi - - # Exit here if they wanted silent mode. - $opt_silent && exit $EXIT_SUCCESS - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - echo "----------------------------------------------------------------------" - echo "Libraries have been installed in:" - for libdir in $libdirs; do - $ECHO " $libdir" - done - echo - echo "If you ever happen to want to link against installed libraries" - echo "in a given directory, LIBDIR, you must either use libtool, and" - echo "specify the full pathname of the library, or use the \`-LLIBDIR'" - echo "flag during linking and do at least one of the following:" - if test -n "$shlibpath_var"; then - echo " - add LIBDIR to the \`$shlibpath_var' environment variable" - echo " during execution" - fi - if test -n "$runpath_var"; then - echo " - add LIBDIR to the \`$runpath_var' environment variable" - echo " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" - - $ECHO " - use the \`$flag' linker flag" - fi - if test -n "$admincmds"; then - $ECHO " - have your system administrator run these commands:$admincmds" - fi - if test -f /etc/ld.so.conf; then - echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" - fi - echo - - echo "See any operating system documentation about shared libraries for" - case $host in - solaris2.[6789]|solaris2.1[0-9]) - echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" - echo "pages." - ;; - *) - echo "more information, such as the ld(1) and ld.so(8) manual pages." - ;; - esac - echo "----------------------------------------------------------------------" - fi - exit $EXIT_SUCCESS -} - -test "$opt_mode" = finish && func_mode_finish ${1+"$@"} - - -# func_mode_install arg... -func_mode_install () -{ - $opt_debug - # There may be an optional sh(1) argument at the beginning of - # install_prog (especially on Windows NT). - if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || - # Allow the use of GNU shtool's install command. - case $nonopt in *shtool*) :;; *) false;; esac; then - # Aesthetically quote it. - func_quote_for_eval "$nonopt" - install_prog="$func_quote_for_eval_result " - arg=$1 - shift - else - install_prog= - arg=$nonopt - fi - - # The real first argument should be the name of the installation program. - # Aesthetically quote it. - func_quote_for_eval "$arg" - func_append install_prog "$func_quote_for_eval_result" - install_shared_prog=$install_prog - case " $install_prog " in - *[\\\ /]cp\ *) install_cp=: ;; - *) install_cp=false ;; - esac - - # We need to accept at least all the BSD install flags. - dest= - files= - opts= - prev= - install_type= - isdir=no - stripme= - no_mode=: - for arg - do - arg2= - if test -n "$dest"; then - func_append files " $dest" - dest=$arg - continue - fi - - case $arg in - -d) isdir=yes ;; - -f) - if $install_cp; then :; else - prev=$arg - fi - ;; - -g | -m | -o) - prev=$arg - ;; - -s) - stripme=" -s" - continue - ;; - -*) - ;; - *) - # If the previous option needed an argument, then skip it. - if test -n "$prev"; then - if test "x$prev" = x-m && test -n "$install_override_mode"; then - arg2=$install_override_mode - no_mode=false - fi - prev= - else - dest=$arg - continue - fi - ;; - esac - - # Aesthetically quote the argument. - func_quote_for_eval "$arg" - func_append install_prog " $func_quote_for_eval_result" - if test -n "$arg2"; then - func_quote_for_eval "$arg2" - fi - func_append install_shared_prog " $func_quote_for_eval_result" - done - - test -z "$install_prog" && \ - func_fatal_help "you must specify an install program" - - test -n "$prev" && \ - func_fatal_help "the \`$prev' option requires an argument" - - if test -n "$install_override_mode" && $no_mode; then - if $install_cp; then :; else - func_quote_for_eval "$install_override_mode" - func_append install_shared_prog " -m $func_quote_for_eval_result" - fi - fi - - if test -z "$files"; then - if test -z "$dest"; then - func_fatal_help "no file or destination specified" - else - func_fatal_help "you must specify a destination" - fi - fi - - # Strip any trailing slash from the destination. - func_stripname '' '/' "$dest" - dest=$func_stripname_result - - # Check to see that the destination is a directory. - test -d "$dest" && isdir=yes - if test "$isdir" = yes; then - destdir="$dest" - destname= - else - func_dirname_and_basename "$dest" "" "." - destdir="$func_dirname_result" - destname="$func_basename_result" - - # Not a directory, so check to see that there is only one file specified. - set dummy $files; shift - test "$#" -gt 1 && \ - func_fatal_help "\`$dest' is not a directory" - fi - case $destdir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - for file in $files; do - case $file in - *.lo) ;; - *) - func_fatal_help "\`$destdir' must be an absolute directory name" - ;; - esac - done - ;; - esac - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - staticlibs= - future_libdirs= - current_libdirs= - for file in $files; do - - # Do each installation. - case $file in - *.$libext) - # Do the static libraries later. - func_append staticlibs " $file" - ;; - - *.la) - func_resolve_sysroot "$file" - file=$func_resolve_sysroot_result - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$file' is not a valid libtool archive" - - library_names= - old_library= - relink_command= - func_source "$file" - - # Add the libdir to current_libdirs if it is the destination. - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) func_append current_libdirs " $libdir" ;; - esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; - *) func_append future_libdirs " $libdir" ;; - esac - fi - - func_dirname "$file" "/" "" - dir="$func_dirname_result" - func_append dir "$objdir" - - if test -n "$relink_command"; then - # Determine the prefix the user has applied to our future dir. - inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` - - # Don't allow the user to place us outside of our expected - # location b/c this prevents finding dependent libraries that - # are installed to the same prefix. - # At present, this check doesn't affect windows .dll's that - # are installed into $libdir/../bin (currently, that works fine) - # but it's something to keep an eye on. - test "$inst_prefix_dir" = "$destdir" && \ - func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" - - if test -n "$inst_prefix_dir"; then - # Stick the inst_prefix_dir data into the link command. - relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` - else - relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` - fi - - func_warning "relinking \`$file'" - func_show_eval "$relink_command" \ - 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' - fi - - # See the names of the shared library. - set dummy $library_names; shift - if test -n "$1"; then - realname="$1" - shift - - srcname="$realname" - test -n "$relink_command" && srcname="$realname"T - - # Install the shared library and build the symlinks. - func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ - 'exit $?' - tstripme="$stripme" - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - case $realname in - *.dll.a) - tstripme="" - ;; - esac - ;; - esac - if test -n "$tstripme" && test -n "$striplib"; then - func_show_eval "$striplib $destdir/$realname" 'exit $?' - fi - - if test "$#" -gt 0; then - # Delete the old symlinks, and create new ones. - # Try `ln -sf' first, because the `ln' binary might depend on - # the symlink we replace! Solaris /bin/ln does not understand -f, - # so we also need to try rm && ln -s. - for linkname - do - test "$linkname" != "$realname" \ - && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" - done - fi - - # Do each command in the postinstall commands. - lib="$destdir/$realname" - func_execute_cmds "$postinstall_cmds" 'exit $?' - fi - - # Install the pseudo-library for information purposes. - func_basename "$file" - name="$func_basename_result" - instname="$dir/$name"i - func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' - - # Maybe install the static library, too. - test -n "$old_library" && func_append staticlibs " $dir/$old_library" - ;; - - *.lo) - # Install (i.e. copy) a libtool object. - - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # Deduce the name of the destination old-style object file. - case $destfile in - *.lo) - func_lo2o "$destfile" - staticdest=$func_lo2o_result - ;; - *.$objext) - staticdest="$destfile" - destfile= - ;; - *) - func_fatal_help "cannot copy a libtool object to \`$destfile'" - ;; - esac - - # Install the libtool object if requested. - test -n "$destfile" && \ - func_show_eval "$install_prog $file $destfile" 'exit $?' - - # Install the old object if enabled. - if test "$build_old_libs" = yes; then - # Deduce the name of the old-style object file. - func_lo2o "$file" - staticobj=$func_lo2o_result - func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' - fi - exit $EXIT_SUCCESS - ;; - - *) - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # If the file is missing, and there is a .exe on the end, strip it - # because it is most likely a libtool script we actually want to - # install - stripped_ext="" - case $file in - *.exe) - if test ! -f "$file"; then - func_stripname '' '.exe' "$file" - file=$func_stripname_result - stripped_ext=".exe" - fi - ;; - esac - - # Do a test to see if this is really a libtool program. - case $host in - *cygwin* | *mingw*) - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - wrapper=$func_ltwrapper_scriptname_result - else - func_stripname '' '.exe' "$file" - wrapper=$func_stripname_result - fi - ;; - *) - wrapper=$file - ;; - esac - if func_ltwrapper_script_p "$wrapper"; then - notinst_deplibs= - relink_command= - - func_source "$wrapper" - - # Check the variables that should have been set. - test -z "$generated_by_libtool_version" && \ - func_fatal_error "invalid libtool wrapper script \`$wrapper'" - - finalize=yes - for lib in $notinst_deplibs; do - # Check to see that each library is installed. - libdir= - if test -f "$lib"; then - func_source "$lib" - fi - libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test - if test -n "$libdir" && test ! -f "$libfile"; then - func_warning "\`$lib' has not been installed in \`$libdir'" - finalize=no - fi - done - - relink_command= - func_source "$wrapper" - - outputname= - if test "$fast_install" = no && test -n "$relink_command"; then - $opt_dry_run || { - if test "$finalize" = yes; then - tmpdir=`func_mktempdir` - func_basename "$file$stripped_ext" - file="$func_basename_result" - outputname="$tmpdir/$file" - # Replace the output file specification. - relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` - - $opt_silent || { - func_quote_for_expand "$relink_command" - eval "func_echo $func_quote_for_expand_result" - } - if eval "$relink_command"; then : - else - func_error "error: relink \`$file' with the above command before installing it" - $opt_dry_run || ${RM}r "$tmpdir" - continue - fi - file="$outputname" - else - func_warning "cannot relink \`$file'" - fi - } - else - # Install the binary that we compiled earlier. - file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - # remove .exe since cygwin /usr/bin/install will append another - # one anyway - case $install_prog,$host in - */usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok - ;; - *.exe:*) - destfile=$destfile.exe - ;; - *:*.exe) - func_stripname '' '.exe' "$destfile" - destfile=$func_stripname_result - ;; - esac - ;; - esac - func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' - $opt_dry_run || if test -n "$outputname"; then - ${RM}r "$tmpdir" - fi - ;; - esac - done - - for file in $staticlibs; do - func_basename "$file" - name="$func_basename_result" - - # Set up the ranlib parameters. - oldlib="$destdir/$name" - - func_show_eval "$install_prog \$file \$oldlib" 'exit $?' - - if test -n "$stripme" && test -n "$old_striplib"; then - func_show_eval "$old_striplib $oldlib" 'exit $?' - fi - - # Do each command in the postinstall commands. - func_execute_cmds "$old_postinstall_cmds" 'exit $?' - done - - test -n "$future_libdirs" && \ - func_warning "remember to run \`$progname --finish$future_libdirs'" - - if test -n "$current_libdirs"; then - # Maybe just do a dry run. - $opt_dry_run && current_libdirs=" -n$current_libdirs" - exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' - else - exit $EXIT_SUCCESS - fi -} - -test "$opt_mode" = install && func_mode_install ${1+"$@"} - - -# func_generate_dlsyms outputname originator pic_p -# Extract symbols from dlprefiles and create ${outputname}S.o with -# a dlpreopen symbol table. -func_generate_dlsyms () -{ - $opt_debug - my_outputname="$1" - my_originator="$2" - my_pic_p="${3-no}" - my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` - my_dlsyms= - - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - if test -n "$NM" && test -n "$global_symbol_pipe"; then - my_dlsyms="${my_outputname}S.c" - else - func_error "not configured to extract global symbols from dlpreopened files" - fi - fi - - if test -n "$my_dlsyms"; then - case $my_dlsyms in - "") ;; - *.c) - # Discover the nlist of each of the dlfiles. - nlist="$output_objdir/${my_outputname}.nm" - - func_show_eval "$RM $nlist ${nlist}S ${nlist}T" - - # Parse the name list into a source file. - func_verbose "creating $output_objdir/$my_dlsyms" - - $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ -/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ -/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) -#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" -#endif - -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT_DLSYM_CONST -#elif defined(__osf__) -/* This system does not cope well with relocations in const data. */ -# define LT_DLSYM_CONST -#else -# define LT_DLSYM_CONST const -#endif - -/* External symbol declarations for the compiler. */\ -" - - if test "$dlself" = yes; then - func_verbose "generating symbol list for \`$output'" - - $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" - - # Add our own program objects to the symbol list. - progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` - for progfile in $progfiles; do - func_to_tool_file "$progfile" func_convert_file_msys_to_w32 - func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" - $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" - done - - if test -n "$exclude_expsyms"; then - $opt_dry_run || { - eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - if test -n "$export_symbols_regex"; then - $opt_dry_run || { - eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - export_symbols="$output_objdir/$outputname.exp" - $opt_dry_run || { - $RM $export_symbols - eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' - ;; - esac - } - else - $opt_dry_run || { - eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' - eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' - ;; - esac - } - fi - fi - - for dlprefile in $dlprefiles; do - func_verbose "extracting global C symbols from \`$dlprefile'" - func_basename "$dlprefile" - name="$func_basename_result" - case $host in - *cygwin* | *mingw* | *cegcc* ) - # if an import library, we need to obtain dlname - if func_win32_import_lib_p "$dlprefile"; then - func_tr_sh "$dlprefile" - eval "curr_lafile=\$libfile_$func_tr_sh_result" - dlprefile_dlbasename="" - if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then - # Use subshell, to avoid clobbering current variable values - dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` - if test -n "$dlprefile_dlname" ; then - func_basename "$dlprefile_dlname" - dlprefile_dlbasename="$func_basename_result" - else - # no lafile. user explicitly requested -dlpreopen . - $sharedlib_from_linklib_cmd "$dlprefile" - dlprefile_dlbasename=$sharedlib_from_linklib_result - fi - fi - $opt_dry_run || { - if test -n "$dlprefile_dlbasename" ; then - eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' - else - func_warning "Could not compute DLL name from $name" - eval '$ECHO ": $name " >> "$nlist"' - fi - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | - $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" - } - else # not an import lib - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - fi - ;; - *) - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - ;; - esac - done - - $opt_dry_run || { - # Make sure we have at least an empty file. - test -f "$nlist" || : > "$nlist" - - if test -n "$exclude_expsyms"; then - $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T - $MV "$nlist"T "$nlist" - fi - - # Try sorting and uniquifying the output. - if $GREP -v "^: " < "$nlist" | - if sort -k 3 /dev/null 2>&1; then - sort -k 3 - else - sort +2 - fi | - uniq > "$nlist"S; then - : - else - $GREP -v "^: " < "$nlist" > "$nlist"S - fi - - if test -f "$nlist"S; then - eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' - else - echo '/* NONE */' >> "$output_objdir/$my_dlsyms" - fi - - echo >> "$output_objdir/$my_dlsyms" "\ - -/* The mapping between symbol names and symbols. */ -typedef struct { - const char *name; - void *address; -} lt_dlsymlist; -extern LT_DLSYM_CONST lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[]; -LT_DLSYM_CONST lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[] = -{\ - { \"$my_originator\", (void *) 0 }," - - case $need_lib_prefix in - no) - eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - *) - eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - esac - echo >> "$output_objdir/$my_dlsyms" "\ - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt_${my_prefix}_LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif\ -" - } # !$opt_dry_run - - pic_flag_for_symtable= - case "$compile_command " in - *" -static "*) ;; - *) - case $host in - # compiling the symbol table file with pic_flag works around - # a FreeBSD bug that causes programs to crash when -lm is - # linked before any other PIC object. But we must not use - # pic_flag when linking with -static. The problem exists in - # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. - *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; - *-*-hpux*) - pic_flag_for_symtable=" $pic_flag" ;; - *) - if test "X$my_pic_p" != Xno; then - pic_flag_for_symtable=" $pic_flag" - fi - ;; - esac - ;; - esac - symtab_cflags= - for arg in $LTCFLAGS; do - case $arg in - -pie | -fpie | -fPIE) ;; - *) func_append symtab_cflags " $arg" ;; - esac - done - - # Now compile the dynamic symbol file. - func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' - - # Clean up the generated files. - func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' - - # Transform the symbol file into the correct name. - symfileobj="$output_objdir/${my_outputname}S.$objext" - case $host in - *cygwin* | *mingw* | *cegcc* ) - if test -f "$output_objdir/$my_outputname.def"; then - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - else - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` - fi - ;; - *) - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` - ;; - esac - ;; - *) - func_fatal_error "unknown suffix for \`$my_dlsyms'" - ;; - esac - else - # We keep going just in case the user didn't refer to - # lt_preloaded_symbols. The linker will fail if global_symbol_pipe - # really was required. - - # Nullify the symbol file. - compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` - fi -} - -# func_win32_libid arg -# return the library type of file 'arg' -# -# Need a lot of goo to handle *both* DLLs and import libs -# Has to be a shell function in order to 'eat' the argument -# that is supplied when $file_magic_command is called. -# Despite the name, also deal with 64 bit binaries. -func_win32_libid () -{ - $opt_debug - win32_libid_type="unknown" - win32_fileres=`file -L $1 2>/dev/null` - case $win32_fileres in - *ar\ archive\ import\ library*) # definitely import - win32_libid_type="x86 archive import" - ;; - *ar\ archive*) # could be an import, or static - # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. - if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | - $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then - func_to_tool_file "$1" func_convert_file_msys_to_w32 - win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | - $SED -n -e ' - 1,100{ - / I /{ - s,.*,import, - p - q - } - }'` - case $win32_nmres in - import*) win32_libid_type="x86 archive import";; - *) win32_libid_type="x86 archive static";; - esac - fi - ;; - *DLL*) - win32_libid_type="x86 DLL" - ;; - *executable*) # but shell scripts are "executable" too... - case $win32_fileres in - *MS\ Windows\ PE\ Intel*) - win32_libid_type="x86 DLL" - ;; - esac - ;; - esac - $ECHO "$win32_libid_type" -} - -# func_cygming_dll_for_implib ARG -# -# Platform-specific function to extract the -# name of the DLL associated with the specified -# import library ARG. -# Invoked by eval'ing the libtool variable -# $sharedlib_from_linklib_cmd -# Result is available in the variable -# $sharedlib_from_linklib_result -func_cygming_dll_for_implib () -{ - $opt_debug - sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` -} - -# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs -# -# The is the core of a fallback implementation of a -# platform-specific function to extract the name of the -# DLL associated with the specified import library LIBNAME. -# -# SECTION_NAME is either .idata$6 or .idata$7, depending -# on the platform and compiler that created the implib. -# -# Echos the name of the DLL associated with the -# specified import library. -func_cygming_dll_for_implib_fallback_core () -{ - $opt_debug - match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` - $OBJDUMP -s --section "$1" "$2" 2>/dev/null | - $SED '/^Contents of section '"$match_literal"':/{ - # Place marker at beginning of archive member dllname section - s/.*/====MARK====/ - p - d - } - # These lines can sometimes be longer than 43 characters, but - # are always uninteresting - /:[ ]*file format pe[i]\{,1\}-/d - /^In archive [^:]*:/d - # Ensure marker is printed - /^====MARK====/p - # Remove all lines with less than 43 characters - /^.\{43\}/!d - # From remaining lines, remove first 43 characters - s/^.\{43\}//' | - $SED -n ' - # Join marker and all lines until next marker into a single line - /^====MARK====/ b para - H - $ b para - b - :para - x - s/\n//g - # Remove the marker - s/^====MARK====// - # Remove trailing dots and whitespace - s/[\. \t]*$// - # Print - /./p' | - # we now have a list, one entry per line, of the stringified - # contents of the appropriate section of all members of the - # archive which possess that section. Heuristic: eliminate - # all those which have a first or second character that is - # a '.' (that is, objdump's representation of an unprintable - # character.) This should work for all archives with less than - # 0x302f exports -- but will fail for DLLs whose name actually - # begins with a literal '.' or a single character followed by - # a '.'. - # - # Of those that remain, print the first one. - $SED -e '/^\./d;/^.\./d;q' -} - -# func_cygming_gnu_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is a GNU/binutils-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_gnu_implib_p () -{ - $opt_debug - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` - test -n "$func_cygming_gnu_implib_tmp" -} - -# func_cygming_ms_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is an MS-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_ms_implib_p () -{ - $opt_debug - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` - test -n "$func_cygming_ms_implib_tmp" -} - -# func_cygming_dll_for_implib_fallback ARG -# Platform-specific function to extract the -# name of the DLL associated with the specified -# import library ARG. -# -# This fallback implementation is for use when $DLLTOOL -# does not support the --identify-strict option. -# Invoked by eval'ing the libtool variable -# $sharedlib_from_linklib_cmd -# Result is available in the variable -# $sharedlib_from_linklib_result -func_cygming_dll_for_implib_fallback () -{ - $opt_debug - if func_cygming_gnu_implib_p "$1" ; then - # binutils import library - sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` - elif func_cygming_ms_implib_p "$1" ; then - # ms-generated import library - sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` - else - # unknown - sharedlib_from_linklib_result="" - fi -} - - -# func_extract_an_archive dir oldlib -func_extract_an_archive () -{ - $opt_debug - f_ex_an_ar_dir="$1"; shift - f_ex_an_ar_oldlib="$1" - if test "$lock_old_archive_extraction" = yes; then - lockfile=$f_ex_an_ar_oldlib.lock - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - fi - func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ - 'stat=$?; rm -f "$lockfile"; exit $stat' - if test "$lock_old_archive_extraction" = yes; then - $opt_dry_run || rm -f "$lockfile" - fi - if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then - : - else - func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" - fi -} - - -# func_extract_archives gentop oldlib ... -func_extract_archives () -{ - $opt_debug - my_gentop="$1"; shift - my_oldlibs=${1+"$@"} - my_oldobjs="" - my_xlib="" - my_xabs="" - my_xdir="" - - for my_xlib in $my_oldlibs; do - # Extract the objects. - case $my_xlib in - [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; - *) my_xabs=`pwd`"/$my_xlib" ;; - esac - func_basename "$my_xlib" - my_xlib="$func_basename_result" - my_xlib_u=$my_xlib - while :; do - case " $extracted_archives " in - *" $my_xlib_u "*) - func_arith $extracted_serial + 1 - extracted_serial=$func_arith_result - my_xlib_u=lt$extracted_serial-$my_xlib ;; - *) break ;; - esac - done - extracted_archives="$extracted_archives $my_xlib_u" - my_xdir="$my_gentop/$my_xlib_u" - - func_mkdir_p "$my_xdir" - - case $host in - *-darwin*) - func_verbose "Extracting $my_xabs" - # Do not bother doing anything if just a dry run - $opt_dry_run || { - darwin_orig_dir=`pwd` - cd $my_xdir || exit $? - darwin_archive=$my_xabs - darwin_curdir=`pwd` - darwin_base_archive=`basename "$darwin_archive"` - darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` - if test -n "$darwin_arches"; then - darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` - darwin_arch= - func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" - for darwin_arch in $darwin_arches ; do - func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" - $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" - cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" - func_extract_an_archive "`pwd`" "${darwin_base_archive}" - cd "$darwin_curdir" - $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" - done # $darwin_arches - ## Okay now we've a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` - darwin_file= - darwin_files= - for darwin_file in $darwin_filelist; do - darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` - $LIPO -create -output "$darwin_file" $darwin_files - done # $darwin_filelist - $RM -rf unfat-$$ - cd "$darwin_orig_dir" - else - cd $darwin_orig_dir - func_extract_an_archive "$my_xdir" "$my_xabs" - fi # $darwin_arches - } # !$opt_dry_run - ;; - *) - func_extract_an_archive "$my_xdir" "$my_xabs" - ;; - esac - my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` - done - - func_extract_archives_result="$my_oldobjs" -} - - -# func_emit_wrapper [arg=no] -# -# Emit a libtool wrapper script on stdout. -# Don't directly open a file because we may want to -# incorporate the script contents within a cygwin/mingw -# wrapper executable. Must ONLY be called from within -# func_mode_link because it depends on a number of variables -# set therein. -# -# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR -# variable will take. If 'yes', then the emitted script -# will assume that the directory in which it is stored is -# the $objdir directory. This is a cygwin/mingw-specific -# behavior. -func_emit_wrapper () -{ - func_emit_wrapper_arg1=${1-no} - - $ECHO "\ -#! $SHELL - -# $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# The $output program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='$sed_quote_subst' - -# Be Bourne compatible -if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command=\"$relink_command\" - -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then - # install mode needs the following variables: - generated_by_libtool_version='$macro_version' - notinst_deplibs='$notinst_deplibs' -else - # When we are sourced in execute mode, \$file and \$ECHO are already set. - if test \"\$libtool_execute_magic\" != \"$magic\"; then - file=\"\$0\"" - - qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` - $ECHO "\ - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$1 -_LTECHO_EOF' -} - ECHO=\"$qECHO\" - fi - -# Very basic option parsing. These options are (a) specific to -# the libtool wrapper, (b) are identical between the wrapper -# /script/ and the wrapper /executable/ which is used only on -# windows platforms, and (c) all begin with the string "--lt-" -# (application programs are unlikely to have options which match -# this pattern). -# -# There are only two supported options: --lt-debug and -# --lt-dump-script. There is, deliberately, no --lt-help. -# -# The first argument to this parsing function should be the -# script's $0 value, followed by "$@". -lt_option_debug= -func_parse_lt_options () -{ - lt_script_arg0=\$0 - shift - for lt_opt - do - case \"\$lt_opt\" in - --lt-debug) lt_option_debug=1 ;; - --lt-dump-script) - lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` - test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. - lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` - cat \"\$lt_dump_D/\$lt_dump_F\" - exit 0 - ;; - --lt-*) - \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 - exit 1 - ;; - esac - done - - # Print the debug banner immediately: - if test -n \"\$lt_option_debug\"; then - echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 - fi -} - -# Used when --lt-debug. Prints its arguments to stdout -# (redirection is the responsibility of the caller) -func_lt_dump_args () -{ - lt_dump_args_N=1; - for lt_arg - do - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" - lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` - done -} - -# Core function for launching the target application -func_exec_program_core () -{ -" - case $host in - # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2* | *-cegcc*) - $ECHO "\ - if test -n \"\$lt_option_debug\"; then - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 - func_lt_dump_args \${1+\"\$@\"} 1>&2 - fi - exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} -" - ;; - - *) - $ECHO "\ - if test -n \"\$lt_option_debug\"; then - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 - func_lt_dump_args \${1+\"\$@\"} 1>&2 - fi - exec \"\$progdir/\$program\" \${1+\"\$@\"} -" - ;; - esac - $ECHO "\ - \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 - exit 1 -} - -# A function to encapsulate launching the target application -# Strips options in the --lt-* namespace from \$@ and -# launches target application with the remaining arguments. -func_exec_program () -{ - for lt_wr_arg - do - case \$lt_wr_arg in - --lt-*) ;; - *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; - esac - shift - done - func_exec_program_core \${1+\"\$@\"} -} - - # Parse options - func_parse_lt_options \"\$0\" \${1+\"\$@\"} - - # Find the directory that this script lives in. - thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` - - # If there was a directory component, then change thisdir. - if test \"x\$destdir\" != \"x\$file\"; then - case \"\$destdir\" in - [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; - *) thisdir=\"\$thisdir/\$destdir\" ;; - esac - fi - - file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` - file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` - done - - # Usually 'no', except on cygwin/mingw when embedded into - # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 - if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then - # special case for '.' - if test \"\$thisdir\" = \".\"; then - thisdir=\`pwd\` - fi - # remove .libs from thisdir - case \"\$thisdir\" in - *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; - $objdir ) thisdir=. ;; - esac - fi - - # Try to get the absolute directory name. - absdir=\`cd \"\$thisdir\" && pwd\` - test -n \"\$absdir\" && thisdir=\"\$absdir\" -" - - if test "$fast_install" = yes; then - $ECHO "\ - program=lt-'$outputname'$exeext - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" - - if test ! -d \"\$progdir\"; then - $MKDIR \"\$progdir\" - else - $RM \"\$progdir/\$file\" - fi" - - $ECHO "\ - - # relink executable if necessary - if test -n \"\$relink_command\"; then - if relink_command_output=\`eval \$relink_command 2>&1\`; then : - else - $ECHO \"\$relink_command_output\" >&2 - $RM \"\$progdir/\$file\" - exit 1 - fi - fi - - $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || - { $RM \"\$progdir/\$program\"; - $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } - $RM \"\$progdir/\$file\" - fi" - else - $ECHO "\ - program='$outputname' - progdir=\"\$thisdir/$objdir\" -" - fi - - $ECHO "\ - - if test -f \"\$progdir/\$program\"; then" - - # fixup the dll searchpath if we need to. - # - # Fix the DLL searchpath if we need to. Do this before prepending - # to shlibpath, because on Windows, both are PATH and uninstalled - # libraries must come first. - if test -n "$dllsearchpath"; then - $ECHO "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - - # Export our shlibpath_var if we have one. - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - $ECHO "\ - # Add our own library path to $shlibpath_var - $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" - - # Some systems cannot cope with colon-terminated $shlibpath_var - # The second colon is a workaround for a bug in BeOS R4 sed - $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` - - export $shlibpath_var -" - fi - - $ECHO "\ - if test \"\$libtool_execute_magic\" != \"$magic\"; then - # Run the actual program with our arguments. - func_exec_program \${1+\"\$@\"} - fi - else - # The program doesn't exist. - \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 - \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 - \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 - exit 1 - fi -fi\ -" -} - - -# func_emit_cwrapperexe_src -# emit the source code for a wrapper executable on stdout -# Must ONLY be called from within func_mode_link because -# it depends on a number of variable set therein. -func_emit_cwrapperexe_src () -{ - cat < -#include -#ifdef _MSC_VER -# include -# include -# include -#else -# include -# include -# ifdef __CYGWIN__ -# include -# endif -#endif -#include -#include -#include -#include -#include -#include -#include -#include - -/* declarations of non-ANSI functions */ -#if defined(__MINGW32__) -# ifdef __STRICT_ANSI__ -int _putenv (const char *); -# endif -#elif defined(__CYGWIN__) -# ifdef __STRICT_ANSI__ -char *realpath (const char *, char *); -int putenv (char *); -int setenv (const char *, const char *, int); -# endif -/* #elif defined (other platforms) ... */ -#endif - -/* portability defines, excluding path handling macros */ -#if defined(_MSC_VER) -# define setmode _setmode -# define stat _stat -# define chmod _chmod -# define getcwd _getcwd -# define putenv _putenv -# define S_IXUSR _S_IEXEC -# ifndef _INTPTR_T_DEFINED -# define _INTPTR_T_DEFINED -# define intptr_t int -# endif -#elif defined(__MINGW32__) -# define setmode _setmode -# define stat _stat -# define chmod _chmod -# define getcwd _getcwd -# define putenv _putenv -#elif defined(__CYGWIN__) -# define HAVE_SETENV -# define FOPEN_WB "wb" -/* #elif defined (other platforms) ... */ -#endif - -#if defined(PATH_MAX) -# define LT_PATHMAX PATH_MAX -#elif defined(MAXPATHLEN) -# define LT_PATHMAX MAXPATHLEN -#else -# define LT_PATHMAX 1024 -#endif - -#ifndef S_IXOTH -# define S_IXOTH 0 -#endif -#ifndef S_IXGRP -# define S_IXGRP 0 -#endif - -/* path handling portability macros */ -#ifndef DIR_SEPARATOR -# define DIR_SEPARATOR '/' -# define PATH_SEPARATOR ':' -#endif - -#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ - defined (__OS2__) -# define HAVE_DOS_BASED_FILE_SYSTEM -# define FOPEN_WB "wb" -# ifndef DIR_SEPARATOR_2 -# define DIR_SEPARATOR_2 '\\' -# endif -# ifndef PATH_SEPARATOR_2 -# define PATH_SEPARATOR_2 ';' -# endif -#endif - -#ifndef DIR_SEPARATOR_2 -# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) -#else /* DIR_SEPARATOR_2 */ -# define IS_DIR_SEPARATOR(ch) \ - (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) -#endif /* DIR_SEPARATOR_2 */ - -#ifndef PATH_SEPARATOR_2 -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) -#else /* PATH_SEPARATOR_2 */ -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) -#endif /* PATH_SEPARATOR_2 */ - -#ifndef FOPEN_WB -# define FOPEN_WB "w" -#endif -#ifndef _O_BINARY -# define _O_BINARY 0 -#endif - -#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) -#define XFREE(stale) do { \ - if (stale) { free ((void *) stale); stale = 0; } \ -} while (0) - -#if defined(LT_DEBUGWRAPPER) -static int lt_debug = 1; -#else -static int lt_debug = 0; -#endif - -const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ - -void *xmalloc (size_t num); -char *xstrdup (const char *string); -const char *base_name (const char *name); -char *find_executable (const char *wrapper); -char *chase_symlinks (const char *pathspec); -int make_executable (const char *path); -int check_executable (const char *path); -char *strendzap (char *str, const char *pat); -void lt_debugprintf (const char *file, int line, const char *fmt, ...); -void lt_fatal (const char *file, int line, const char *message, ...); -static const char *nonnull (const char *s); -static const char *nonempty (const char *s); -void lt_setenv (const char *name, const char *value); -char *lt_extend_str (const char *orig_value, const char *add, int to_end); -void lt_update_exe_path (const char *name, const char *value); -void lt_update_lib_path (const char *name, const char *value); -char **prepare_spawn (char **argv); -void lt_dump_script (FILE *f); -EOF - - cat <= 0) - && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) - return 1; - else - return 0; -} - -int -make_executable (const char *path) -{ - int rval = 0; - struct stat st; - - lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", - nonempty (path)); - if ((!path) || (!*path)) - return 0; - - if (stat (path, &st) >= 0) - { - rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); - } - return rval; -} - -/* Searches for the full path of the wrapper. Returns - newly allocated full path name if found, NULL otherwise - Does not chase symlinks, even on platforms that support them. -*/ -char * -find_executable (const char *wrapper) -{ - int has_slash = 0; - const char *p; - const char *p_next; - /* static buffer for getcwd */ - char tmp[LT_PATHMAX + 1]; - int tmp_len; - char *concat_name; - - lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", - nonempty (wrapper)); - - if ((wrapper == NULL) || (*wrapper == '\0')) - return NULL; - - /* Absolute path? */ -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - else - { -#endif - if (IS_DIR_SEPARATOR (wrapper[0])) - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - } -#endif - - for (p = wrapper; *p; p++) - if (*p == '/') - { - has_slash = 1; - break; - } - if (!has_slash) - { - /* no slashes; search PATH */ - const char *path = getenv ("PATH"); - if (path != NULL) - { - for (p = path; *p; p = p_next) - { - const char *q; - size_t p_len; - for (q = p; *q; q++) - if (IS_PATH_SEPARATOR (*q)) - break; - p_len = q - p; - p_next = (*q == '\0' ? q : q + 1); - if (p_len == 0) - { - /* empty path: current directory */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", - nonnull (strerror (errno))); - tmp_len = strlen (tmp); - concat_name = - XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - } - else - { - concat_name = - XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, p, p_len); - concat_name[p_len] = '/'; - strcpy (concat_name + p_len + 1, wrapper); - } - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - } - /* not found in PATH; assume curdir */ - } - /* Relative path | not found in path: prepend cwd */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", - nonnull (strerror (errno))); - tmp_len = strlen (tmp); - concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - return NULL; -} - -char * -chase_symlinks (const char *pathspec) -{ -#ifndef S_ISLNK - return xstrdup (pathspec); -#else - char buf[LT_PATHMAX]; - struct stat s; - char *tmp_pathspec = xstrdup (pathspec); - char *p; - int has_symlinks = 0; - while (strlen (tmp_pathspec) && !has_symlinks) - { - lt_debugprintf (__FILE__, __LINE__, - "checking path component for symlinks: %s\n", - tmp_pathspec); - if (lstat (tmp_pathspec, &s) == 0) - { - if (S_ISLNK (s.st_mode) != 0) - { - has_symlinks = 1; - break; - } - - /* search backwards for last DIR_SEPARATOR */ - p = tmp_pathspec + strlen (tmp_pathspec) - 1; - while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - p--; - if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - { - /* no more DIR_SEPARATORS left */ - break; - } - *p = '\0'; - } - else - { - lt_fatal (__FILE__, __LINE__, - "error accessing file \"%s\": %s", - tmp_pathspec, nonnull (strerror (errno))); - } - } - XFREE (tmp_pathspec); - - if (!has_symlinks) - { - return xstrdup (pathspec); - } - - tmp_pathspec = realpath (pathspec, buf); - if (tmp_pathspec == 0) - { - lt_fatal (__FILE__, __LINE__, - "could not follow symlinks for %s", pathspec); - } - return xstrdup (tmp_pathspec); -#endif -} - -char * -strendzap (char *str, const char *pat) -{ - size_t len, patlen; - - assert (str != NULL); - assert (pat != NULL); - - len = strlen (str); - patlen = strlen (pat); - - if (patlen <= len) - { - str += len - patlen; - if (strcmp (str, pat) == 0) - *str = '\0'; - } - return str; -} - -void -lt_debugprintf (const char *file, int line, const char *fmt, ...) -{ - va_list args; - if (lt_debug) - { - (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); - va_start (args, fmt); - (void) vfprintf (stderr, fmt, args); - va_end (args); - } -} - -static void -lt_error_core (int exit_status, const char *file, - int line, const char *mode, - const char *message, va_list ap) -{ - fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); - vfprintf (stderr, message, ap); - fprintf (stderr, ".\n"); - - if (exit_status >= 0) - exit (exit_status); -} - -void -lt_fatal (const char *file, int line, const char *message, ...) -{ - va_list ap; - va_start (ap, message); - lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); - va_end (ap); -} - -static const char * -nonnull (const char *s) -{ - return s ? s : "(null)"; -} - -static const char * -nonempty (const char *s) -{ - return (s && !*s) ? "(empty)" : nonnull (s); -} - -void -lt_setenv (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_setenv) setting '%s' to '%s'\n", - nonnull (name), nonnull (value)); - { -#ifdef HAVE_SETENV - /* always make a copy, for consistency with !HAVE_SETENV */ - char *str = xstrdup (value); - setenv (name, str, 1); -#else - int len = strlen (name) + 1 + strlen (value) + 1; - char *str = XMALLOC (char, len); - sprintf (str, "%s=%s", name, value); - if (putenv (str) != EXIT_SUCCESS) - { - XFREE (str); - } -#endif - } -} - -char * -lt_extend_str (const char *orig_value, const char *add, int to_end) -{ - char *new_value; - if (orig_value && *orig_value) - { - int orig_value_len = strlen (orig_value); - int add_len = strlen (add); - new_value = XMALLOC (char, add_len + orig_value_len + 1); - if (to_end) - { - strcpy (new_value, orig_value); - strcpy (new_value + orig_value_len, add); - } - else - { - strcpy (new_value, add); - strcpy (new_value + add_len, orig_value); - } - } - else - { - new_value = xstrdup (add); - } - return new_value; -} - -void -lt_update_exe_path (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", - nonnull (name), nonnull (value)); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - /* some systems can't cope with a ':'-terminated path #' */ - int len = strlen (new_value); - while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) - { - new_value[len-1] = '\0'; - } - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -void -lt_update_lib_path (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", - nonnull (name), nonnull (value)); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -EOF - case $host_os in - mingw*) - cat <<"EOF" - -/* Prepares an argument vector before calling spawn(). - Note that spawn() does not by itself call the command interpreter - (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : - ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&v); - v.dwPlatformId == VER_PLATFORM_WIN32_NT; - }) ? "cmd.exe" : "command.com"). - Instead it simply concatenates the arguments, separated by ' ', and calls - CreateProcess(). We must quote the arguments since Win32 CreateProcess() - interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a - special way: - - Space and tab are interpreted as delimiters. They are not treated as - delimiters if they are surrounded by double quotes: "...". - - Unescaped double quotes are removed from the input. Their only effect is - that within double quotes, space and tab are treated like normal - characters. - - Backslashes not followed by double quotes are not special. - - But 2*n+1 backslashes followed by a double quote become - n backslashes followed by a double quote (n >= 0): - \" -> " - \\\" -> \" - \\\\\" -> \\" - */ -#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" -#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" -char ** -prepare_spawn (char **argv) -{ - size_t argc; - char **new_argv; - size_t i; - - /* Count number of arguments. */ - for (argc = 0; argv[argc] != NULL; argc++) - ; - - /* Allocate new argument vector. */ - new_argv = XMALLOC (char *, argc + 1); - - /* Put quoted arguments into the new argument vector. */ - for (i = 0; i < argc; i++) - { - const char *string = argv[i]; - - if (string[0] == '\0') - new_argv[i] = xstrdup ("\"\""); - else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) - { - int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); - size_t length; - unsigned int backslashes; - const char *s; - char *quoted_string; - char *p; - - length = 0; - backslashes = 0; - if (quote_around) - length++; - for (s = string; *s != '\0'; s++) - { - char c = *s; - if (c == '"') - length += backslashes + 1; - length++; - if (c == '\\') - backslashes++; - else - backslashes = 0; - } - if (quote_around) - length += backslashes + 1; - - quoted_string = XMALLOC (char, length + 1); - - p = quoted_string; - backslashes = 0; - if (quote_around) - *p++ = '"'; - for (s = string; *s != '\0'; s++) - { - char c = *s; - if (c == '"') - { - unsigned int j; - for (j = backslashes + 1; j > 0; j--) - *p++ = '\\'; - } - *p++ = c; - if (c == '\\') - backslashes++; - else - backslashes = 0; - } - if (quote_around) - { - unsigned int j; - for (j = backslashes; j > 0; j--) - *p++ = '\\'; - *p++ = '"'; - } - *p = '\0'; - - new_argv[i] = quoted_string; - } - else - new_argv[i] = (char *) string; - } - new_argv[argc] = NULL; - - return new_argv; -} -EOF - ;; - esac - - cat <<"EOF" -void lt_dump_script (FILE* f) -{ -EOF - func_emit_wrapper yes | - $SED -e 's/\([\\"]\)/\\\1/g' \ - -e 's/^/ fputs ("/' -e 's/$/\\n", f);/' - - cat <<"EOF" -} -EOF -} -# end: func_emit_cwrapperexe_src - -# func_win32_import_lib_p ARG -# True if ARG is an import lib, as indicated by $file_magic_cmd -func_win32_import_lib_p () -{ - $opt_debug - case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in - *import*) : ;; - *) false ;; - esac -} - -# func_mode_link arg... -func_mode_link () -{ - $opt_debug - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - # It is impossible to link a dll without this setting, and - # we shouldn't force the makefile maintainer to figure out - # which system we are compiling for in order to pass an extra - # flag for every libtool invocation. - # allow_undefined=no - - # FIXME: Unfortunately, there are problems with the above when trying - # to make a dll which has undefined symbols, in which case not - # even a static library is built. For now, we need to specify - # -no-undefined on the libtool link line when we can be certain - # that all symbols are satisfied, otherwise we get a static library. - allow_undefined=yes - ;; - *) - allow_undefined=yes - ;; - esac - libtool_args=$nonopt - base_compile="$nonopt $@" - compile_command=$nonopt - finalize_command=$nonopt - - compile_rpath= - finalize_rpath= - compile_shlibpath= - finalize_shlibpath= - convenience= - old_convenience= - deplibs= - old_deplibs= - compiler_flags= - linker_flags= - dllsearchpath= - lib_search_path=`pwd` - inst_prefix_dir= - new_inherited_linker_flags= - - avoid_version=no - bindir= - dlfiles= - dlprefiles= - dlself=no - export_dynamic=no - export_symbols= - export_symbols_regex= - generated= - libobjs= - ltlibs= - module=no - no_install=no - objs= - non_pic_objects= - precious_files_regex= - prefer_static_libs=no - preload=no - prev= - prevarg= - release= - rpath= - xrpath= - perm_rpath= - temp_rpath= - thread_safe=no - vinfo= - vinfo_number=no - weak_libs= - single_module="${wl}-single_module" - func_infer_tag $base_compile - - # We need to know -static, to get the right output filenames. - for arg - do - case $arg in - -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" - build_old_libs=no - break - ;; - -all-static | -static | -static-libtool-libs) - case $arg in - -all-static) - if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then - func_warning "complete static linking is impossible in this configuration" - fi - if test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - -static) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=built - ;; - -static-libtool-libs) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - esac - build_libtool_libs=no - build_old_libs=yes - break - ;; - esac - done - - # See if our shared archives depend on static archives. - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. - while test "$#" -gt 0; do - arg="$1" - shift - func_quote_for_eval "$arg" - qarg=$func_quote_for_eval_unquoted_result - func_append libtool_args " $func_quote_for_eval_result" - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - output) - func_append compile_command " @OUTPUT@" - func_append finalize_command " @OUTPUT@" - ;; - esac - - case $prev in - bindir) - bindir="$arg" - prev= - continue - ;; - dlfiles|dlprefiles) - if test "$preload" = no; then - # Add the symbol object into the linking commands. - func_append compile_command " @SYMFILE@" - func_append finalize_command " @SYMFILE@" - preload=yes - fi - case $arg in - *.la | *.lo) ;; # We handle these cases below. - force) - if test "$dlself" = no; then - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - self) - if test "$prev" = dlprefiles; then - dlself=yes - elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then - dlself=yes - else - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - *) - if test "$prev" = dlfiles; then - func_append dlfiles " $arg" - else - func_append dlprefiles " $arg" - fi - prev= - continue - ;; - esac - ;; - expsyms) - export_symbols="$arg" - test -f "$arg" \ - || func_fatal_error "symbol file \`$arg' does not exist" - prev= - continue - ;; - expsyms_regex) - export_symbols_regex="$arg" - prev= - continue - ;; - framework) - case $host in - *-*-darwin*) - case "$deplibs " in - *" $qarg.ltframework "*) ;; - *) func_append deplibs " $qarg.ltframework" # this is fixed later - ;; - esac - ;; - esac - prev= - continue - ;; - inst_prefix) - inst_prefix_dir="$arg" - prev= - continue - ;; - objectlist) - if test -f "$arg"; then - save_arg=$arg - moreargs= - for fil in `cat "$save_arg"` - do -# func_append moreargs " $fil" - arg=$fil - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - func_append dlfiles " $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - func_append dlprefiles " $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - done - else - func_fatal_error "link input file \`$arg' does not exist" - fi - arg=$save_arg - prev= - continue - ;; - precious_regex) - precious_files_regex="$arg" - prev= - continue - ;; - release) - release="-$arg" - prev= - continue - ;; - rpath | xrpath) - # We need an absolute path. - case $arg in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - if test "$prev" = rpath; then - case "$rpath " in - *" $arg "*) ;; - *) func_append rpath " $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) func_append xrpath " $arg" ;; - esac - fi - prev= - continue - ;; - shrext) - shrext_cmds="$arg" - prev= - continue - ;; - weak) - func_append weak_libs " $arg" - prev= - continue - ;; - xcclinker) - func_append linker_flags " $qarg" - func_append compiler_flags " $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xcompiler) - func_append compiler_flags " $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xlinker) - func_append linker_flags " $qarg" - func_append compiler_flags " $wl$qarg" - prev= - func_append compile_command " $wl$qarg" - func_append finalize_command " $wl$qarg" - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi # test -n "$prev" - - prevarg="$arg" - - case $arg in - -all-static) - if test -n "$link_static_flag"; then - # See comment for -static flag below, for more details. - func_append compile_command " $link_static_flag" - func_append finalize_command " $link_static_flag" - fi - continue - ;; - - -allow-undefined) - # FIXME: remove this flag sometime in the future. - func_fatal_error "\`-allow-undefined' must not be used because it is the default" - ;; - - -avoid-version) - avoid_version=yes - continue - ;; - - -bindir) - prev=bindir - continue - ;; - - -dlopen) - prev=dlfiles - continue - ;; - - -dlpreopen) - prev=dlprefiles - continue - ;; - - -export-dynamic) - export_dynamic=yes - continue - ;; - - -export-symbols | -export-symbols-regex) - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - func_fatal_error "more than one -exported-symbols argument is not allowed" - fi - if test "X$arg" = "X-export-symbols"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; - - -framework) - prev=framework - continue - ;; - - -inst-prefix-dir) - prev=inst_prefix - continue - ;; - - # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in - no/*-*-irix* | /*-*-irix*) - func_append compile_command " $arg" - func_append finalize_command " $arg" - ;; - esac - continue - ;; - - -L*) - func_stripname "-L" '' "$arg" - if test -z "$func_stripname_result"; then - if test "$#" -gt 0; then - func_fatal_error "require no space between \`-L' and \`$1'" - else - func_fatal_error "need path for \`-L' option" - fi - fi - func_resolve_sysroot "$func_stripname_result" - dir=$func_resolve_sysroot_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - absdir=`cd "$dir" && pwd` - test -z "$absdir" && \ - func_fatal_error "cannot determine absolute directory name of \`$dir'" - dir="$absdir" - ;; - esac - case "$deplibs " in - *" -L$dir "* | *" $arg "*) - # Will only happen for absolute or sysroot arguments - ;; - *) - # Preserve sysroot, but never include relative directories - case $dir in - [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; - *) func_append deplibs " -L$dir" ;; - esac - func_append lib_search_path " $dir" - ;; - esac - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$dir:"*) ;; - ::) dllsearchpath=$dir;; - *) func_append dllsearchpath ":$dir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) func_append dllsearchpath ":$testbindir";; - esac - ;; - esac - continue - ;; - - -l*) - if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) - # These systems don't actually have a C or math library (as such) - continue - ;; - *-*-os2*) - # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C and math libraries are in the System framework - func_append deplibs " System.ltframework" - continue - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - test "X$arg" = "X-lc" && continue - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - test "X$arg" = "X-lc" && continue - ;; - esac - elif test "X$arg" = "X-lc_r"; then - case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; - esac - fi - func_append deplibs " $arg" - continue - ;; - - -module) - module=yes - continue - ;; - - # Tru64 UNIX uses -model [arg] to determine the layout of C++ - # classes, name mangling, and exception handling. - # Darwin uses the -arch flag to determine output architecture. - -model|-arch|-isysroot|--sysroot) - func_append compiler_flags " $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - prev=xcompiler - continue - ;; - - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) - func_append compiler_flags " $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - case "$new_inherited_linker_flags " in - *" $arg "*) ;; - * ) func_append new_inherited_linker_flags " $arg" ;; - esac - continue - ;; - - -multi_module) - single_module="${wl}-multi_module" - continue - ;; - - -no-fast-install) - fast_install=no - continue - ;; - - -no-install) - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) - # The PATH hackery in wrapper scripts is required on Windows - # and Darwin in order for the loader to find any dlls it needs. - func_warning "\`-no-install' is ignored for $host" - func_warning "assuming \`-no-fast-install' instead" - fast_install=no - ;; - *) no_install=yes ;; - esac - continue - ;; - - -no-undefined) - allow_undefined=no - continue - ;; - - -objectlist) - prev=objectlist - continue - ;; - - -o) prev=output ;; - - -precious-files-regex) - prev=precious_regex - continue - ;; - - -release) - prev=release - continue - ;; - - -rpath) - prev=rpath - continue - ;; - - -R) - prev=xrpath - continue - ;; - - -R*) - func_stripname '-R' '' "$arg" - dir=$func_stripname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - =*) - func_stripname '=' '' "$dir" - dir=$lt_sysroot$func_stripname_result - ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) func_append xrpath " $dir" ;; - esac - continue - ;; - - -shared) - # The effects of -shared are defined in a previous loop. - continue - ;; - - -shrext) - prev=shrext - continue - ;; - - -static | -static-libtool-libs) - # The effects of -static are defined in a previous loop. - # We used to do the same as -all-static on platforms that - # didn't have a PIC flag, but the assumption that the effects - # would be equivalent was wrong. It would break on at least - # Digital Unix and AIX. - continue - ;; - - -thread-safe) - thread_safe=yes - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - - -version-number) - prev=vinfo - vinfo_number=yes - continue - ;; - - -weak) - prev=weak - continue - ;; - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - func_append arg " $func_quote_for_eval_result" - func_append compiler_flags " $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Wl,*) - func_stripname '-Wl,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - func_append arg " $wl$func_quote_for_eval_result" - func_append compiler_flags " $wl$func_quote_for_eval_result" - func_append linker_flags " $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Xlinker) - prev=xlinker - continue - ;; - - -XCClinker) - prev=xcclinker - continue - ;; - - # -msg_* for osf cc - -msg_*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - # Flags to be passed through unchanged, with rationale: - # -64, -mips[0-9] enable 64-bit mode for the SGI compiler - # -r[0-9][0-9]* specify processor for the SGI compiler - # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler - # +DA*, +DD* enable 64-bit mode for the HP compiler - # -q* compiler args for the IBM compiler - # -m*, -t[45]*, -txscale* architecture-specific flags for GCC - # -F/path path to uninstalled frameworks, gcc on darwin - # -p, -pg, --coverage, -fprofile-* profiling flags for GCC - # @file GCC response files - # -tp=* Portland pgcc target processor selection - # --sysroot=* for sysroot support - # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization - -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ - -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ - -O*|-flto*|-fwhopr*|-fuse-linker-plugin) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - func_append compile_command " $arg" - func_append finalize_command " $arg" - func_append compiler_flags " $arg" - continue - ;; - - # Some other compiler flag. - -* | +*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - *.$objext) - # A standard object. - func_append objs " $arg" - ;; - - *.lo) - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - func_append dlfiles " $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - func_append dlprefiles " $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - ;; - - *.$libext) - # An archive. - func_append deplibs " $arg" - func_append old_deplibs " $arg" - continue - ;; - - *.la) - # A libtool-controlled library. - - func_resolve_sysroot "$arg" - if test "$prev" = dlfiles; then - # This library was specified with -dlopen. - func_append dlfiles " $func_resolve_sysroot_result" - prev= - elif test "$prev" = dlprefiles; then - # The library was specified with -dlpreopen. - func_append dlprefiles " $func_resolve_sysroot_result" - prev= - else - func_append deplibs " $func_resolve_sysroot_result" - fi - continue - ;; - - # Some other compiler argument. - *) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - esac # arg - - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - done # argument parsing loop - - test -n "$prev" && \ - func_fatal_help "the \`$prevarg' option requires an argument" - - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - - oldlibs= - # calculate the name of the file, without its directory - func_basename "$output" - outputname="$func_basename_result" - libobjs_save="$libobjs" - - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` - else - shlib_search_path= - fi - eval sys_lib_search_path=\"$sys_lib_search_path_spec\" - eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" - - func_dirname "$output" "/" "" - output_objdir="$func_dirname_result$objdir" - func_to_tool_file "$output_objdir/" - tool_output_objdir=$func_to_tool_file_result - # Create the object directory. - func_mkdir_p "$output_objdir" - - # Determine the type of output - case $output in - "") - func_fatal_help "you must specify an output file" - ;; - *.$libext) linkmode=oldlib ;; - *.lo | *.$objext) linkmode=obj ;; - *.la) linkmode=lib ;; - *) linkmode=prog ;; # Anything else should be a program. - esac - - specialdeplibs= - - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do - if $opt_preserve_dup_deps ; then - case "$libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append libs " $deplib" - done - - if test "$linkmode" = lib; then - libs="$predeps $libs $compiler_lib_search_path $postdeps" - - # Compute libraries that are listed more than once in $predeps - # $postdeps and mark them as special (i.e., whose duplicates are - # not to be eliminated). - pre_post_deps= - if $opt_duplicate_compiler_generated_deps; then - for pre_post_dep in $predeps $postdeps; do - case "$pre_post_deps " in - *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; - esac - func_append pre_post_deps " $pre_post_dep" - done - fi - pre_post_deps= - fi - - deplibs= - newdependency_libs= - newlib_search_path= - need_relink=no # whether we're linking any uninstalled libtool libraries - notinst_deplibs= # not-installed libtool libraries - notinst_path= # paths that contain not-installed libtool libraries - - case $linkmode in - lib) - passes="conv dlpreopen link" - for file in $dlfiles $dlprefiles; do - case $file in - *.la) ;; - *) - func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" - ;; - esac - done - ;; - prog) - compile_deplibs= - finalize_deplibs= - alldeplibs=no - newdlfiles= - newdlprefiles= - passes="conv scan dlopen dlpreopen link" - ;; - *) passes="conv" - ;; - esac - - for pass in $passes; do - # The preopen pass in lib mode reverses $deplibs; put it back here - # so that -L comes before libs that need it for instance... - if test "$linkmode,$pass" = "lib,link"; then - ## FIXME: Find the place where the list is rebuilt in the wrong - ## order, and fix it there properly - tmp_deplibs= - for deplib in $deplibs; do - tmp_deplibs="$deplib $tmp_deplibs" - done - deplibs="$tmp_deplibs" - fi - - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan"; then - libs="$deplibs" - deplibs= - fi - if test "$linkmode" = prog; then - case $pass in - dlopen) libs="$dlfiles" ;; - dlpreopen) libs="$dlprefiles" ;; - link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; - esac - fi - if test "$linkmode,$pass" = "lib,dlpreopen"; then - # Collect and forward deplibs of preopened libtool libs - for lib in $dlprefiles; do - # Ignore non-libtool-libs - dependency_libs= - func_resolve_sysroot "$lib" - case $lib in - *.la) func_source "$func_resolve_sysroot_result" ;; - esac - - # Collect preopened libtool deplibs, except any this library - # has declared as weak libs - for deplib in $dependency_libs; do - func_basename "$deplib" - deplib_base=$func_basename_result - case " $weak_libs " in - *" $deplib_base "*) ;; - *) func_append deplibs " $deplib" ;; - esac - done - done - libs="$dlprefiles" - fi - if test "$pass" = dlopen; then - # Collect dlpreopened libraries - save_deplibs="$deplibs" - deplibs= - fi - - for deplib in $libs; do - lib= - found=no - case $deplib in - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - func_append compiler_flags " $deplib" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) func_append new_inherited_linker_flags " $deplib" ;; - esac - fi - fi - continue - ;; - -l*) - if test "$linkmode" != lib && test "$linkmode" != prog; then - func_warning "\`-l' is ignored for archives/objects" - continue - fi - func_stripname '-l' '' "$deplib" - name=$func_stripname_result - if test "$linkmode" = lib; then - searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" - else - searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" - fi - for searchdir in $searchdirs; do - for search_ext in .la $std_shrext .so .a; do - # Search the libtool library - lib="$searchdir/lib${name}${search_ext}" - if test -f "$lib"; then - if test "$search_ext" = ".la"; then - found=yes - else - found=no - fi - break 2 - fi - done - done - if test "$found" != yes; then - # deplib doesn't seem to be a libtool library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - else # deplib is a libtool library - # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, - # We need to do some special things here, and not later. - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $deplib "*) - if func_lalib_p "$lib"; then - library_names= - old_library= - func_source "$lib" - for l in $old_library $library_names; do - ll="$l" - done - if test "X$ll" = "X$old_library" ; then # only static version available - found=no - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - lib=$ladir/$old_library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - fi - ;; - *) ;; - esac - fi - fi - ;; # -l - *.ltframework) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) func_append new_inherited_linker_flags " $deplib" ;; - esac - fi - fi - continue - ;; - -L*) - case $linkmode in - lib) - deplibs="$deplib $deplibs" - test "$pass" = conv && continue - newdependency_libs="$deplib $newdependency_libs" - func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - prog) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - if test "$pass" = scan; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - *) - func_warning "\`-L' is ignored for archives/objects" - ;; - esac # linkmode - continue - ;; # -L - -R*) - if test "$pass" = link; then - func_stripname '-R' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - dir=$func_resolve_sysroot_result - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) func_append xrpath " $dir" ;; - esac - fi - deplibs="$deplib $deplibs" - continue - ;; - *.la) - func_resolve_sysroot "$deplib" - lib=$func_resolve_sysroot_result - ;; - *.$libext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - case $linkmode in - lib) - # Linking convenience modules into shared libraries is allowed, - # but linking other static libraries is non-portable. - case " $dlpreconveniencelibs " in - *" $deplib "*) ;; - *) - valid_a_lib=no - case $deplibs_check_method in - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ - | $EGREP "$match_pattern_regex" > /dev/null; then - valid_a_lib=yes - fi - ;; - pass_all) - valid_a_lib=yes - ;; - esac - if test "$valid_a_lib" != yes; then - echo - $ECHO "*** Warning: Trying to link with static lib archive $deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because the file extensions .$libext of this argument makes me believe" - echo "*** that it is just a static archive that I should not use here." - else - echo - $ECHO "*** Warning: Linking the shared library $output against the" - $ECHO "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" - fi - ;; - esac - continue - ;; - prog) - if test "$pass" != link; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - continue - ;; - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - elif test "$linkmode" = prog; then - if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - func_append newdlprefiles " $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - func_append newdlfiles " $deplib" - fi - fi - continue - ;; - %DEPLIBS%) - alldeplibs=yes - continue - ;; - esac # case $deplib - - if test "$found" = yes || test -f "$lib"; then : - else - func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" - fi - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$lib" \ - || func_fatal_error "\`$lib' is not a valid libtool archive" - - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - - dlname= - dlopen= - dlpreopen= - libdir= - library_names= - old_library= - inherited_linker_flags= - # If the library was installed with an old release of libtool, - # it will not redefine variables installed, or shouldnotlink - installed=yes - shouldnotlink=no - avoidtemprpath= - - - # Read the .la file - func_source "$lib" - - # Convert "-framework foo" to "foo.ltframework" - if test -n "$inherited_linker_flags"; then - tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` - for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do - case " $new_inherited_linker_flags " in - *" $tmp_inherited_linker_flag "*) ;; - *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; - esac - done - fi - dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || - { test "$linkmode" != prog && test "$linkmode" != lib; }; then - test -n "$dlopen" && func_append dlfiles " $dlopen" - test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" - fi - - if test "$pass" = conv; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then - if test -z "$old_library"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - # It is a libtool convenience library, so add in its objects. - func_append convenience " $ladir/$objdir/$old_library" - func_append old_convenience " $ladir/$objdir/$old_library" - elif test "$linkmode" != prog && test "$linkmode" != lib; then - func_fatal_error "\`$lib' is not a convenience library" - fi - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if $opt_preserve_dup_deps ; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append tmp_libs " $deplib" - done - continue - fi # $pass = conv - - - # Get the name of the library we link against. - linklib= - if test -n "$old_library" && - { test "$prefer_static_libs" = yes || - test "$prefer_static_libs,$installed" = "built,no"; }; then - linklib=$old_library - else - for l in $old_library $library_names; do - linklib="$l" - done - fi - if test -z "$linklib"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - - # This library was specified with -dlopen. - if test "$pass" = dlopen; then - if test -z "$libdir"; then - func_fatal_error "cannot -dlopen a convenience library: \`$lib'" - fi - if test -z "$dlname" || - test "$dlopen_support" != yes || - test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking - # statically, we need to preload. We also need to preload any - # dependent libraries so libltdl's deplib preloader doesn't - # bomb out in the load deplibs phase. - func_append dlprefiles " $lib $dependency_libs" - else - func_append newdlfiles " $lib" - fi - continue - fi # $pass = dlopen - - # We need an absolute path. - case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; - *) - abs_ladir=`cd "$ladir" && pwd` - if test -z "$abs_ladir"; then - func_warning "cannot determine absolute directory name of \`$ladir'" - func_warning "passing it literally to the linker, although it might fail" - abs_ladir="$ladir" - fi - ;; - esac - func_basename "$lib" - laname="$func_basename_result" - - # Find the relevant object directory and library name. - if test "X$installed" = Xyes; then - if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - func_warning "library \`$lib' was moved." - dir="$ladir" - absdir="$abs_ladir" - libdir="$abs_ladir" - else - dir="$lt_sysroot$libdir" - absdir="$lt_sysroot$libdir" - fi - test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes - else - if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir="$ladir" - absdir="$abs_ladir" - # Remove this search path later - func_append notinst_path " $abs_ladir" - else - dir="$ladir/$objdir" - absdir="$abs_ladir/$objdir" - # Remove this search path later - func_append notinst_path " $abs_ladir" - fi - fi # $installed = yes - func_stripname 'lib' '.la' "$laname" - name=$func_stripname_result - - # This library was specified with -dlpreopen. - if test "$pass" = dlpreopen; then - if test -z "$libdir" && test "$linkmode" = prog; then - func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" - fi - case "$host" in - # special handling for platforms with PE-DLLs. - *cygwin* | *mingw* | *cegcc* ) - # Linker will automatically link against shared library if both - # static and shared are present. Therefore, ensure we extract - # symbols from the import library if a shared library is present - # (otherwise, the dlopen module name will be incorrect). We do - # this by putting the import library name into $newdlprefiles. - # We recover the dlopen module name by 'saving' the la file - # name in a special purpose variable, and (later) extracting the - # dlname from the la file. - if test -n "$dlname"; then - func_tr_sh "$dir/$linklib" - eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" - func_append newdlprefiles " $dir/$linklib" - else - func_append newdlprefiles " $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - func_append dlpreconveniencelibs " $dir/$old_library" - fi - ;; - * ) - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - func_append newdlprefiles " $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - func_append dlpreconveniencelibs " $dir/$old_library" - # Otherwise, use the dlname, so that lt_dlopen finds it. - elif test -n "$dlname"; then - func_append newdlprefiles " $dir/$dlname" - else - func_append newdlprefiles " $dir/$linklib" - fi - ;; - esac - fi # $pass = dlpreopen - - if test -z "$libdir"; then - # Link the convenience library - if test "$linkmode" = lib; then - deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else - deplibs="$lib $deplibs" # used for prog,scan pass - fi - continue - fi - - - if test "$linkmode" = prog && test "$pass" != link; then - func_append newlib_search_path " $ladir" - deplibs="$lib $deplibs" - - linkalldeplibs=no - if test "$link_all_deplibs" != no || test -z "$library_names" || - test "$build_libtool_libs" = no; then - linkalldeplibs=yes - fi - - tmp_libs= - for deplib in $dependency_libs; do - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - esac - # Need to link against all dependency_libs? - if test "$linkalldeplibs" = yes; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - if $opt_preserve_dup_deps ; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append tmp_libs " $deplib" - done # for deplib - continue - fi # $linkmode = prog... - - if test "$linkmode,$pass" = "prog,link"; then - if test -n "$library_names" && - { { test "$prefer_static_libs" = no || - test "$prefer_static_libs,$installed" = "built,yes"; } || - test -z "$old_library"; }; then - # We need to hardcode the library path - if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then - # Make sure the rpath contains only unique directories. - case "$temp_rpath:" in - *"$absdir:"*) ;; - *) func_append temp_rpath "$absdir:" ;; - esac - fi - - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) func_append compile_rpath " $absdir" ;; - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - ;; - esac - fi # $linkmode,$pass = prog,link... - - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - fi - - link_static=no # Whether the deplib will be linked statically - use_static_libs=$prefer_static_libs - if test "$use_static_libs" = built && test "$installed" = yes; then - use_static_libs=no - fi - if test -n "$library_names" && - { test "$use_static_libs" = no || test -z "$old_library"; }; then - case $host in - *cygwin* | *mingw* | *cegcc*) - # No point in relinking DLLs because paths are not encoded - func_append notinst_deplibs " $lib" - need_relink=no - ;; - *) - if test "$installed" = no; then - func_append notinst_deplibs " $lib" - need_relink=yes - fi - ;; - esac - # This is a shared library - - # Warn about portability, can't link against -module's on some - # systems (darwin). Don't bleat about dlopened modules though! - dlopenmodule="" - for dlpremoduletest in $dlprefiles; do - if test "X$dlpremoduletest" = "X$lib"; then - dlopenmodule="$dlpremoduletest" - break - fi - done - if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then - echo - if test "$linkmode" = prog; then - $ECHO "*** Warning: Linking the executable $output against the loadable module" - else - $ECHO "*** Warning: Linking the shared library $output against the loadable module" - fi - $ECHO "*** $linklib is not portable!" - fi - if test "$linkmode" = lib && - test "$hardcode_into_libs" = yes; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) func_append compile_rpath " $absdir" ;; - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - ;; - esac - fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname - set dummy $library_names - shift - realname="$1" - shift - libname=`eval "\\$ECHO \"$libname_spec\""` - # use dlname if we got it. it's perfectly good, no? - if test -n "$dlname"; then - soname="$dlname" - elif test -n "$soname_spec"; then - # bleh windows - case $host in - *cygwin* | mingw* | *cegcc*) - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - esac - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - - # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" - func_basename "$soroot" - soname="$func_basename_result" - func_stripname 'lib' '.dll' "$soname" - newlib=libimp-$func_stripname_result.a - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : - else - func_verbose "extracting exported symbol list from \`$soname'" - func_execute_cmds "$extract_expsyms_cmds" 'exit $?' - fi - - # Create $newlib - if test -f "$output_objdir/$newlib"; then :; else - func_verbose "generating import library for \`$soname'" - func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' - fi - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib - fi # test -n "$old_archive_from_expsyms_cmds" - - if test "$linkmode" = prog || test "$opt_mode" != relink; then - add_shlibpath= - add_dir= - add= - lib_linked=yes - case $hardcode_action in - immediate | unsupported) - if test "$hardcode_direct" = no; then - add="$dir/$linklib" - case $host in - *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; - *-*-sysv4*uw2*) add_dir="-L$dir" ;; - *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir="-L$dir" ;; - *-*-darwin* ) - # if the lib is a (non-dlopened) module then we can not - # link against it, someone is ignoring the earlier warnings - if /usr/bin/file -L $add 2> /dev/null | - $GREP ": [^:]* bundle" >/dev/null ; then - if test "X$dlopenmodule" != "X$lib"; then - $ECHO "*** Warning: lib $linklib is a module, not a shared library" - if test -z "$old_library" ; then - echo - echo "*** And there doesn't seem to be a static archive available" - echo "*** The link will probably fail, sorry" - else - add="$dir/$old_library" - fi - elif test -n "$old_library"; then - add="$dir/$old_library" - fi - fi - esac - elif test "$hardcode_minus_L" = no; then - case $host in - *-*-sunos*) add_shlibpath="$dir" ;; - esac - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = no; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - relink) - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$dir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - func_append add_dir " -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - *) lib_linked=no ;; - esac - - if test "$lib_linked" != yes; then - func_fatal_configuration "unsupported hardcode properties" - fi - - if test -n "$add_shlibpath"; then - case :$compile_shlibpath: in - *":$add_shlibpath:"*) ;; - *) func_append compile_shlibpath "$add_shlibpath:" ;; - esac - fi - if test "$linkmode" = prog; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - if test "$hardcode_direct" != yes && - test "$hardcode_minus_L" != yes && - test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) func_append finalize_shlibpath "$libdir:" ;; - esac - fi - fi - fi - - if test "$linkmode" = prog || test "$opt_mode" = relink; then - add_shlibpath= - add_dir= - add= - # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$libdir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) func_append finalize_shlibpath "$libdir:" ;; - esac - add="-l$name" - elif test "$hardcode_automatic" = yes; then - if test -n "$inst_prefix_dir" && - test -f "$inst_prefix_dir$libdir/$linklib" ; then - add="$inst_prefix_dir$libdir/$linklib" - else - add="$libdir/$linklib" - fi - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - func_append add_dir " -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - fi - - if test "$linkmode" = prog; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - fi - fi - elif test "$linkmode" = prog; then - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. - if test "$hardcode_direct" != unsupported; then - test -n "$old_library" && linklib="$old_library" - compile_deplibs="$dir/$linklib $compile_deplibs" - finalize_deplibs="$dir/$linklib $finalize_deplibs" - else - compile_deplibs="-l$name -L$dir $compile_deplibs" - finalize_deplibs="-l$name -L$dir $finalize_deplibs" - fi - elif test "$build_libtool_libs" = yes; then - # Not a shared library - if test "$deplibs_check_method" != pass_all; then - # We're trying link a shared library against a static one - # but the system doesn't support it. - - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - echo - $ECHO "*** Warning: This system can not link to static lib archive $lib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have." - if test "$module" = yes; then - echo "*** But as you try to build a module library, libtool will still create " - echo "*** a static module, that should work as long as the dlopening application" - echo "*** is linked with the -dlopen flag to resolve symbols at runtime." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using \`nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - else - deplibs="$dir/$old_library $deplibs" - link_static=yes - fi - fi # link shared/static library? - - if test "$linkmode" = lib; then - if test -n "$dependency_libs" && - { test "$hardcode_into_libs" != yes || - test "$build_old_libs" = yes || - test "$link_static" = yes; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do - case $libdir in - -R*) func_stripname '-R' '' "$libdir" - temp_xrpath=$func_stripname_result - case " $xrpath " in - *" $temp_xrpath "*) ;; - *) func_append xrpath " $temp_xrpath";; - esac;; - *) func_append temp_deplibs " $libdir";; - esac - done - dependency_libs="$temp_deplibs" - fi - - func_append newlib_search_path " $absdir" - # Link against this library - test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" - # ... and its dependency_libs - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result";; - *) func_resolve_sysroot "$deplib" ;; - esac - if $opt_preserve_dup_deps ; then - case "$tmp_libs " in - *" $func_resolve_sysroot_result "*) - func_append specialdeplibs " $func_resolve_sysroot_result" ;; - esac - fi - func_append tmp_libs " $func_resolve_sysroot_result" - done - - if test "$link_all_deplibs" != no; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - path= - case $deplib in - -L*) path="$deplib" ;; - *.la) - func_resolve_sysroot "$deplib" - deplib=$func_resolve_sysroot_result - func_dirname "$deplib" "" "." - dir=$func_dirname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - func_warning "cannot determine absolute directory name of \`$dir'" - absdir="$dir" - fi - ;; - esac - if $GREP "^installed=no" $deplib > /dev/null; then - case $host in - *-*-darwin*) - depdepl= - eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` - if test -n "$deplibrary_names" ; then - for tmp in $deplibrary_names ; do - depdepl=$tmp - done - if test -f "$absdir/$objdir/$depdepl" ; then - depdepl="$absdir/$objdir/$depdepl" - darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - if test -z "$darwin_install_name"; then - darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - fi - func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" - func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" - path= - fi - fi - ;; - *) - path="-L$absdir/$objdir" - ;; - esac - else - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - test "$absdir" != "$libdir" && \ - func_warning "\`$deplib' seems to be moved" - - path="-L$absdir" - fi - ;; - esac - case " $deplibs " in - *" $path "*) ;; - *) deplibs="$path $deplibs" ;; - esac - done - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs - if test "$pass" = link; then - if test "$linkmode" = "prog"; then - compile_deplibs="$new_inherited_linker_flags $compile_deplibs" - finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" - else - compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - fi - fi - dependency_libs="$newdependency_libs" - if test "$pass" = dlpreopen; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi - if test "$pass" != dlopen; then - if test "$pass" != conv; then - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do - case "$lib_search_path " in - *" $dir "*) ;; - *) func_append lib_search_path " $dir" ;; - esac - done - newlib_search_path= - fi - - if test "$linkmode,$pass" != "prog,link"; then - vars="deplibs" - else - vars="compile_deplibs finalize_deplibs" - fi - for var in $vars dependency_libs; do - # Add libraries to $var in reverse order - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do - # FIXME: Pedantically, this is the right thing to do, so - # that some nasty dependency loop isn't accidentally - # broken: - #new_libs="$deplib $new_libs" - # Pragmatically, this seems to cause very few problems in - # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - -R*) ;; - *) - # And here is the reason: when a library appears more - # than once as an explicit dependence of a library, or - # is implicitly linked in more than once by the - # compiler, it is considered special, and multiple - # occurrences thereof are not removed. Compare this - # with having the same library being listed as a - # dependency of multiple other libraries: in this case, - # we know (pedantically, we assume) the library does not - # need to be listed more than once, so we keep only the - # last copy. This is not always right, but it is rare - # enough that we require users that really mean to play - # such unportable linking tricks to link the library - # using -Wl,-lname, so that libtool does not consider it - # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; - *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; - esac - ;; - esac - done - tmp_libs= - for deplib in $new_libs; do - case $deplib in - -L*) - case " $tmp_libs " in - *" $deplib "*) ;; - *) func_append tmp_libs " $deplib" ;; - esac - ;; - *) func_append tmp_libs " $deplib" ;; - esac - done - eval $var=\"$tmp_libs\" - done # for var - fi - # Last step: remove runtime libs from dependency_libs - # (they stay in deplibs) - tmp_libs= - for i in $dependency_libs ; do - case " $predeps $postdeps $compiler_lib_search_path " in - *" $i "*) - i="" - ;; - esac - if test -n "$i" ; then - func_append tmp_libs " $i" - fi - done - dependency_libs=$tmp_libs - done # for pass - if test "$linkmode" = prog; then - dlfiles="$newdlfiles" - fi - if test "$linkmode" = prog || test "$linkmode" = lib; then - dlprefiles="$newdlprefiles" - fi - - case $linkmode in - oldlib) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for archives" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for archives" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for archives" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for archives" - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for archives" - - test -n "$release" && \ - func_warning "\`-release' is ignored for archives" - - test -n "$export_symbols$export_symbols_regex" && \ - func_warning "\`-export-symbols' is ignored for archives" - - # Now set the variables for building old libraries. - build_libtool_libs=no - oldlibs="$output" - func_append objs "$old_deplibs" - ;; - - lib) - # Make sure we only generate libraries of the form `libNAME.la'. - case $outputname in - lib*) - func_stripname 'lib' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - ;; - *) - test "$module" = no && \ - func_fatal_help "libtool library \`$output' must begin with \`lib'" - - if test "$need_lib_prefix" != no; then - # Add the "lib" prefix for modules if required - func_stripname '' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - else - func_stripname '' '.la' "$outputname" - libname=$func_stripname_result - fi - ;; - esac - - if test -n "$objs"; then - if test "$deplibs_check_method" != pass_all; then - func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" - else - echo - $ECHO "*** Warning: Linking the shared library $output against the non-libtool" - $ECHO "*** objects $objs is not portable!" - func_append libobjs " $objs" - fi - fi - - test "$dlself" != no && \ - func_warning "\`-dlopen self' is ignored for libtool libraries" - - set dummy $rpath - shift - test "$#" -gt 1 && \ - func_warning "ignoring multiple \`-rpath's for a libtool library" - - install_libdir="$1" - - oldlibs= - if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then - # Building a libtool convenience library. - # Some compilers have problems with a `.al' extension so - # convenience libraries should have the same extension an - # archive normally would. - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes - fi - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for convenience libraries" - - test -n "$release" && \ - func_warning "\`-release' is ignored for convenience libraries" - else - - # Parse the version information argument. - save_ifs="$IFS"; IFS=':' - set dummy $vinfo 0 0 0 - shift - IFS="$save_ifs" - - test -n "$7" && \ - func_fatal_help "too many parameters to \`-version-info'" - - # convert absolute version numbers to libtool ages - # this retains compatibility with .la files and attempts - # to make the code below a bit more comprehensible - - case $vinfo_number in - yes) - number_major="$1" - number_minor="$2" - number_revision="$3" - # - # There are really only two kinds -- those that - # use the current revision as the major version - # and those that subtract age and use age as - # a minor version. But, then there is irix - # which has an extra 1 added just for fun - # - case $version_type in - darwin|linux|osf|windows|none) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_revision" - ;; - freebsd-aout|freebsd-elf|qnx|sunos) - current="$number_major" - revision="$number_minor" - age="0" - ;; - irix|nonstopux) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_minor" - lt_irix_increment=no - ;; - esac - ;; - no) - current="$1" - revision="$2" - age="$3" - ;; - esac - - # Check that each of the things are valid numbers. - case $current in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "CURRENT \`$current' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $revision in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "REVISION \`$revision' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $age in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "AGE \`$age' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - if test "$age" -gt "$current"; then - func_error "AGE \`$age' is greater than the current interface number \`$current'" - func_fatal_error "\`$vinfo' is not valid version information" - fi - - # Calculate the version variables. - major= - versuffix= - verstring= - case $version_type in - none) ;; - - darwin) - # Like Linux, but with the current version available in - # verstring for coding it into the library header - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - # Darwin ld doesn't like 0 for these options... - func_arith $current + 1 - minor_current=$func_arith_result - xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - ;; - - freebsd-aout) - major=".$current" - versuffix=".$current.$revision"; - ;; - - freebsd-elf) - major=".$current" - versuffix=".$current" - ;; - - irix | nonstopux) - if test "X$lt_irix_increment" = "Xno"; then - func_arith $current - $age - else - func_arith $current - $age + 1 - fi - major=$func_arith_result - - case $version_type in - nonstopux) verstring_prefix=nonstopux ;; - *) verstring_prefix=sgi ;; - esac - verstring="$verstring_prefix$major.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$revision - while test "$loop" -ne 0; do - func_arith $revision - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring_prefix$major.$iface:$verstring" - done - - # Before this point, $major must not contain `.'. - major=.$major - versuffix="$major.$revision" - ;; - - linux) - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - ;; - - osf) - func_arith $current - $age - major=.$func_arith_result - versuffix=".$current.$age.$revision" - verstring="$current.$age.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$age - while test "$loop" -ne 0; do - func_arith $current - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring:${iface}.0" - done - - # Make executables depend on our current version. - func_append verstring ":${current}.0" - ;; - - qnx) - major=".$current" - versuffix=".$current" - ;; - - sunos) - major=".$current" - versuffix=".$current.$revision" - ;; - - windows) - # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 filesystems. - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - - *) - func_fatal_configuration "unknown library version type \`$version_type'" - ;; - esac - - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely - verstring= - ;; - *) - verstring="0.0" - ;; - esac - if test "$need_version" = no; then - versuffix= - else - versuffix=".0.0" - fi - fi - - # Remove version info from name if versioning should be avoided - if test "$avoid_version" = yes && test "$need_version" = no; then - major= - versuffix= - verstring="" - fi - - # Check to see if the archive will have undefined symbols. - if test "$allow_undefined" = yes; then - if test "$allow_undefined_flag" = unsupported; then - func_warning "undefined symbols not allowed in $host shared libraries" - build_libtool_libs=no - build_old_libs=yes - fi - else - # Don't allow undefined symbols. - allow_undefined_flag="$no_undefined_flag" - fi - - fi - - func_generate_dlsyms "$libname" "$libname" "yes" - func_append libobjs " $symfileobj" - test "X$libobjs" = "X " && libobjs= - - if test "$opt_mode" != relink; then - # Remove our outputs, but don't remove object files since they - # may have been created when compiling PIC objects. - removelist= - tempremovelist=`$ECHO "$output_objdir/*"` - for p in $tempremovelist; do - case $p in - *.$objext | *.gcno) - ;; - $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) - if test "X$precious_files_regex" != "X"; then - if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 - then - continue - fi - fi - func_append removelist " $p" - ;; - *) ;; - esac - done - test -n "$removelist" && \ - func_show_eval "${RM}r \$removelist" - fi - - # Now set the variables for building old libraries. - if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then - func_append oldlibs " $output_objdir/$libname.$libext" - - # Transform .lo files to .o files. - oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` - fi - - # Eliminate all temporary directories. - #for path in $notinst_path; do - # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` - # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` - # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` - #done - - if test -n "$xrpath"; then - # If the user specified any rpath flags, then add them. - temp_xrpath= - for libdir in $xrpath; do - func_replace_sysroot "$libdir" - func_append temp_xrpath " -R$func_replace_sysroot_result" - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - done - if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi - - # Make sure dlfiles contains only unique files that won't be dlpreopened - old_dlfiles="$dlfiles" - dlfiles= - for lib in $old_dlfiles; do - case " $dlprefiles $dlfiles " in - *" $lib "*) ;; - *) func_append dlfiles " $lib" ;; - esac - done - - # Make sure dlprefiles contains only unique files - old_dlprefiles="$dlprefiles" - dlprefiles= - for lib in $old_dlprefiles; do - case "$dlprefiles " in - *" $lib "*) ;; - *) func_append dlprefiles " $lib" ;; - esac - done - - if test "$build_libtool_libs" = yes; then - if test -n "$rpath"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) - # these systems don't actually have a c library (as such)! - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C library is in the System framework - func_append deplibs " System.ltframework" - ;; - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - ;; - *) - # Add libc to deplibs on all other systems if necessary. - if test "$build_libtool_need_lc" = "yes"; then - func_append deplibs " -lc" - fi - ;; - esac - fi - - # Transform deplibs into only deplibs that can be linked in shared. - name_save=$name - libname_save=$libname - release_save=$release - versuffix_save=$versuffix - major_save=$major - # I'm not sure if I'm treating the release correctly. I think - # release should show up in the -l (ie -lgmp5) so we don't want to - # add it in twice. Is that correct? - release="" - versuffix="" - major="" - newdeplibs= - droppeddeps=no - case $deplibs_check_method in - pass_all) - # Don't check for shared/static. Everything works. - # This might be a little naive. We might want to check - # whether the library exists or not. But this is on - # osf3 & osf4 and I'm not really sure... Just - # implementing what was already the behavior. - newdeplibs=$deplibs - ;; - test_compile) - # This code stresses the "libraries are programs" paradigm to its - # limits. Maybe even breaks it. We compile a program, linking it - # against the deplibs as a proxy for the library. Then we can check - # whether they linked in statically or dynamically with ldd. - $opt_dry_run || $RM conftest.c - cat > conftest.c </dev/null` - $nocaseglob - else - potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` - fi - for potent_lib in $potential_libs; do - # Follow soft links. - if ls -lLd "$potent_lib" 2>/dev/null | - $GREP " -> " >/dev/null; then - continue - fi - # The statement above tries to avoid entering an - # endless loop below, in case of cyclic links. - # We might still enter an endless loop, since a link - # loop can be closed while we follow links, - # but so what? - potlib="$potent_lib" - while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | - $SED -e 10q | - $EGREP "$file_magic_regex" > /dev/null; then - func_append newdeplibs " $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for file magic test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a file magic. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - func_append newdeplibs " $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - for a_deplib in $deplibs; do - case $a_deplib in - -l*) - func_stripname -l '' "$a_deplib" - name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $a_deplib "*) - func_append newdeplibs " $a_deplib" - a_deplib="" - ;; - esac - fi - if test -n "$a_deplib" ; then - libname=`eval "\\$ECHO \"$libname_spec\""` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do - potlib="$potent_lib" # see symlink-check above in file_magic test - if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ - $EGREP "$match_pattern_regex" > /dev/null; then - func_append newdeplibs " $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a regex pattern. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - func_append newdeplibs " $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - none | unknown | *) - newdeplibs="" - tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - for i in $predeps $postdeps ; do - # can't use Xsed below, because $i might contain '/' - tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` - done - fi - case $tmp_deplibs in - *[!\ \ ]*) - echo - if test "X$deplibs_check_method" = "Xnone"; then - echo "*** Warning: inter-library dependencies are not supported in this platform." - else - echo "*** Warning: inter-library dependencies are not known to be supported." - fi - echo "*** All declared inter-library dependencies are being dropped." - droppeddeps=yes - ;; - esac - ;; - esac - versuffix=$versuffix_save - major=$major_save - release=$release_save - libname=$libname_save - name=$name_save - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library with the System framework - newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` - ;; - esac - - if test "$droppeddeps" = yes; then - if test "$module" = yes; then - echo - echo "*** Warning: libtool could not satisfy all declared inter-library" - $ECHO "*** dependencies of module $libname. Therefore, libtool will create" - echo "*** a static module, that should work as long as the dlopening" - echo "*** application is linked with the -dlopen flag." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using \`nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - else - echo "*** The inter-library dependencies that have been dropped here will be" - echo "*** automatically added whenever a program is linked with this library" - echo "*** or is declared to -dlopen it." - - if test "$allow_undefined" = no; then - echo - echo "*** Since this library must not contain undefined symbols," - echo "*** because either the platform does not support them or" - echo "*** it was explicitly requested with -no-undefined," - echo "*** libtool will only create a static version of it." - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - fi - fi - # Done checking deplibs! - deplibs=$newdeplibs - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - case $host in - *-*-darwin*) - newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $deplibs " in - *" -L$path/$objdir "*) - func_append new_libs " -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) func_append new_libs " $deplib" ;; - esac - ;; - *) func_append new_libs " $deplib" ;; - esac - done - deplibs="$new_libs" - - # All the library-specific variables (install_libdir is set above). - library_names= - old_library= - dlname= - - # Test again, we may have decided not to build it any more - if test "$build_libtool_libs" = yes; then - if test "$hardcode_into_libs" = yes; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= - rpath="$finalize_rpath" - test "$opt_mode" != relink && rpath="$compile_rpath$rpath" - for libdir in $rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - func_replace_sysroot "$libdir" - libdir=$func_replace_sysroot_result - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append dep_rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) func_apped perm_rpath " $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - if test -n "$hardcode_libdir_flag_spec_ld"; then - eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" - else - eval dep_rpath=\"$hardcode_libdir_flag_spec\" - fi - fi - if test -n "$runpath_var" && test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - func_append rpath "$dir:" - done - eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" - fi - test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" - fi - - shlibpath="$finalize_shlibpath" - test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" - if test -n "$shlibpath"; then - eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" - fi - - # Get the real and link names of the library. - eval shared_ext=\"$shrext_cmds\" - eval library_names=\"$library_names_spec\" - set dummy $library_names - shift - realname="$1" - shift - - if test -n "$soname_spec"; then - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - if test -z "$dlname"; then - dlname=$soname - fi - - lib="$output_objdir/$realname" - linknames= - for link - do - func_append linknames " $link" - done - - # Use standard objects if they are pic - test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` - test "X$libobjs" = "X " && libobjs= - - delfiles= - if test -n "$export_symbols" && test -n "$include_expsyms"; then - $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" - export_symbols="$output_objdir/$libname.uexp" - func_append delfiles " $export_symbols" - fi - - orig_export_symbols= - case $host_os in - cygwin* | mingw* | cegcc*) - if test -n "$export_symbols" && test -z "$export_symbols_regex"; then - # exporting using user supplied symfile - if test "x`$SED 1q $export_symbols`" != xEXPORTS; then - # and it's NOT already a .def file. Must figure out - # which of the given symbols are data symbols and tag - # them as such. So, trigger use of export_symbols_cmds. - # export_symbols gets reassigned inside the "prepare - # the list of exported symbols" if statement, so the - # include_expsyms logic still works. - orig_export_symbols="$export_symbols" - export_symbols= - always_export_symbols=yes - fi - fi - ;; - esac - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - cmds=$export_symbols_cmds - save_ifs="$IFS"; IFS='~' - for cmd1 in $cmds; do - IFS="$save_ifs" - # Take the normal branch if the nm_file_list_spec branch - # doesn't work or if tool conversion is not needed. - case $nm_file_list_spec~$to_tool_file_cmd in - *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) - try_normal_branch=yes - eval cmd=\"$cmd1\" - func_len " $cmd" - len=$func_len_result - ;; - *) - try_normal_branch=no - ;; - esac - if test "$try_normal_branch" = yes \ - && { test "$len" -lt "$max_cmd_len" \ - || test "$max_cmd_len" -le -1; } - then - func_show_eval "$cmd" 'exit $?' - skipped_export=false - elif test -n "$nm_file_list_spec"; then - func_basename "$output" - output_la=$func_basename_result - save_libobjs=$libobjs - save_output=$output - output=${output_objdir}/${output_la}.nm - func_to_tool_file "$output" - libobjs=$nm_file_list_spec$func_to_tool_file_result - func_append delfiles " $output" - func_verbose "creating $NM input file list: $output" - for obj in $save_libobjs; do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" - done > "$output" - eval cmd=\"$cmd1\" - func_show_eval "$cmd" 'exit $?' - output=$save_output - libobjs=$save_libobjs - skipped_export=false - else - # The command line is too long to execute in one step. - func_verbose "using reloadable object file for export list..." - skipped_export=: - # Break out early, otherwise skipped_export may be - # set to false by a later but shorter cmd. - break - fi - done - IFS="$save_ifs" - if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - fi - - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' - fi - - if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - func_append delfiles " $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - - tmp_deplibs= - for test_deplib in $deplibs; do - case " $convenience " in - *" $test_deplib "*) ;; - *) - func_append tmp_deplibs " $test_deplib" - ;; - esac - done - deplibs="$tmp_deplibs" - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec" && - test "$compiler_needs_object" = yes && - test -z "$libobjs"; then - # extract the archives, so we have objects to list. - # TODO: could optimize this to just extract one archive. - whole_archive_flag_spec= - fi - if test -n "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - else - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - - func_extract_archives $gentop $convenience - func_append libobjs " $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - fi - - if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then - eval flag=\"$thread_safe_flag_spec\" - func_append linker_flags " $flag" - fi - - # Make a backup of the uninstalled library when relinking - if test "$opt_mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? - fi - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - eval test_cmds=\"$module_expsym_cmds\" - cmds=$module_expsym_cmds - else - eval test_cmds=\"$module_cmds\" - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - eval test_cmds=\"$archive_expsym_cmds\" - cmds=$archive_expsym_cmds - else - eval test_cmds=\"$archive_cmds\" - cmds=$archive_cmds - fi - fi - - if test "X$skipped_export" != "X:" && - func_len " $test_cmds" && - len=$func_len_result && - test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - : - else - # The command line is too long to link in one step, link piecewise - # or, if using GNU ld and skipped_export is not :, use a linker - # script. - - # Save the value of $output and $libobjs because we want to - # use them later. If we have whole_archive_flag_spec, we - # want to use save_libobjs as it was before - # whole_archive_flag_spec was expanded, because we can't - # assume the linker understands whole_archive_flag_spec. - # This may have to be revisited, in case too many - # convenience libraries get linked in and end up exceeding - # the spec. - if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - fi - save_output=$output - func_basename "$output" - output_la=$func_basename_result - - # Clear the reloadable object creation command queue and - # initialize k to one. - test_cmds= - concat_cmds= - objlist= - last_robj= - k=1 - - if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then - output=${output_objdir}/${output_la}.lnkscript - func_verbose "creating GNU ld script: $output" - echo 'INPUT (' > $output - for obj in $save_libobjs - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" >> $output - done - echo ')' >> $output - func_append delfiles " $output" - func_to_tool_file "$output" - output=$func_to_tool_file_result - elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then - output=${output_objdir}/${output_la}.lnk - func_verbose "creating linker input file list: $output" - : > $output - set x $save_libobjs - shift - firstobj= - if test "$compiler_needs_object" = yes; then - firstobj="$1 " - shift - fi - for obj - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" >> $output - done - func_append delfiles " $output" - func_to_tool_file "$output" - output=$firstobj\"$file_list_spec$func_to_tool_file_result\" - else - if test -n "$save_libobjs"; then - func_verbose "creating reloadable object files..." - output=$output_objdir/$output_la-${k}.$objext - eval test_cmds=\"$reload_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - - # Loop over the list of objects to be linked. - for obj in $save_libobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - if test "X$objlist" = X || - test "$len" -lt "$max_cmd_len"; then - func_append objlist " $obj" - else - # The command $test_cmds is almost too long, add a - # command to the queue. - if test "$k" -eq 1 ; then - # The first file doesn't have a previous command to add. - reload_objs=$objlist - eval concat_cmds=\"$reload_cmds\" - else - # All subsequent reloadable object files will link in - # the last one created. - reload_objs="$objlist $last_robj" - eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" - fi - last_robj=$output_objdir/$output_la-${k}.$objext - func_arith $k + 1 - k=$func_arith_result - output=$output_objdir/$output_la-${k}.$objext - objlist=" $obj" - func_len " $last_robj" - func_arith $len0 + $func_len_result - len=$func_arith_result - fi - done - # Handle the remaining objects by creating one last - # reloadable object file. All subsequent reloadable object - # files will link in the last one created. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - reload_objs="$objlist $last_robj" - eval concat_cmds=\"\${concat_cmds}$reload_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" - fi - func_append delfiles " $output" - - else - output= - fi - - if ${skipped_export-false}; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - libobjs=$output - # Append the command to create the export file. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" - fi - fi - - test -n "$save_libobjs" && - func_verbose "creating a temporary reloadable object file: $output" - - # Loop through the commands generated above and execute them. - save_ifs="$IFS"; IFS='~' - for cmd in $concat_cmds; do - IFS="$save_ifs" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - if test -n "$export_symbols_regex" && ${skipped_export-false}; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - - if ${skipped_export-false}; then - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' - fi - - if test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - func_append delfiles " $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - fi - - libobjs=$output - # Restore the value of output. - output=$save_output - - if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - fi - # Expand the library linking commands again to reset the - # value of $libobjs for piecewise linking. - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - cmds=$module_expsym_cmds - else - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - cmds=$archive_expsym_cmds - else - cmds=$archive_cmds - fi - fi - fi - - if test -n "$delfiles"; then - # Append the command to remove temporary files to $cmds. - eval cmds=\"\$cmds~\$RM $delfiles\" - fi - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - - func_extract_archives $gentop $dlprefiles - func_append libobjs " $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? - - if test -n "$convenience"; then - if test -z "$whole_archive_flag_spec"; then - func_show_eval '${RM}r "$gentop"' - fi - fi - - exit $EXIT_SUCCESS - fi - - # Create links to the real library. - for linkname in $linknames; do - if test "$realname" != "$linkname"; then - func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' - fi - done - - # If -module or -export-dynamic was specified, set the dlname. - if test "$module" = yes || test "$export_dynamic" = yes; then - # On all known operating systems, these are identical. - dlname="$soname" - fi - fi - ;; - - obj) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for objects" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for objects" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for objects" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for objects" - - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for objects" - - test -n "$release" && \ - func_warning "\`-release' is ignored for objects" - - case $output in - *.lo) - test -n "$objs$old_deplibs" && \ - func_fatal_error "cannot build library object \`$output' from non-libtool objects" - - libobj=$output - func_lo2o "$libobj" - obj=$func_lo2o_result - ;; - *) - libobj= - obj="$output" - ;; - esac - - # Delete the old objects. - $opt_dry_run || $RM $obj $libobj - - # Objects from convenience libraries. This assumes - # single-version convenience libraries. Whenever we create - # different ones for PIC/non-PIC, this we'll have to duplicate - # the extraction. - reload_conv_objs= - gentop= - # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec and hope we can get by with - # turning comma into space.. - wl= - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" - reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` - else - gentop="$output_objdir/${obj}x" - func_append generated " $gentop" - - func_extract_archives $gentop $convenience - reload_conv_objs="$reload_objs $func_extract_archives_result" - fi - fi - - # If we're not building shared, we need to use non_pic_objs - test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" - - # Create the old-style object. - reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test - - output="$obj" - func_execute_cmds "$reload_cmds" 'exit $?' - - # Exit if we aren't doing a library object file. - if test -z "$libobj"; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - fi - - if test "$build_libtool_libs" != yes; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. - # $show "echo timestamp > $libobj" - # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? - exit $EXIT_SUCCESS - fi - - if test -n "$pic_flag" || test "$pic_mode" != default; then - # Only do commands if we really have different PIC objects. - reload_objs="$libobjs $reload_conv_objs" - output="$libobj" - func_execute_cmds "$reload_cmds" 'exit $?' - fi - - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - ;; - - prog) - case $host in - *cygwin*) func_stripname '' '.exe' "$output" - output=$func_stripname_result.exe;; - esac - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for programs" - - test -n "$release" && \ - func_warning "\`-release' is ignored for programs" - - test "$preload" = yes \ - && test "$dlopen_support" = unknown \ - && test "$dlopen_self" = unknown \ - && test "$dlopen_self_static" = unknown && \ - func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` - finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` - ;; - esac - - case $host in - *-*-darwin*) - # Don't allow lazy linking, it breaks C++ global constructors - # But is supposedly fixed on 10.4 or later (yay!). - if test "$tagname" = CXX ; then - case ${MACOSX_DEPLOYMENT_TARGET-10.0} in - 10.[0123]) - func_append compile_command " ${wl}-bind_at_load" - func_append finalize_command " ${wl}-bind_at_load" - ;; - esac - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $compile_deplibs " in - *" -L$path/$objdir "*) - func_append new_libs " -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $compile_deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) func_append new_libs " $deplib" ;; - esac - ;; - *) func_append new_libs " $deplib" ;; - esac - done - compile_deplibs="$new_libs" - - - func_append compile_command " $compile_deplibs" - func_append finalize_command " $finalize_deplibs" - - if test -n "$rpath$xrpath"; then - # If the user specified any rpath flags, then add them. - for libdir in $rpath $xrpath; do - # This is the magic to use -rpath. - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - done - fi - - # Now hardcode the library paths - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) func_append perm_rpath " $libdir" ;; - esac - fi - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$libdir:"*) ;; - ::) dllsearchpath=$libdir;; - *) func_append dllsearchpath ":$libdir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) func_append dllsearchpath ":$testbindir";; - esac - ;; - esac - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - compile_rpath="$rpath" - - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$finalize_perm_rpath " in - *" $libdir "*) ;; - *) func_append finalize_perm_rpath " $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - finalize_rpath="$rpath" - - if test -n "$libobjs" && test "$build_old_libs" = yes; then - # Transform all the library objects into standard objects. - compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` - finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` - fi - - func_generate_dlsyms "$outputname" "@PROGRAM@" "no" - - # template prelinking step - if test -n "$prelink_cmds"; then - func_execute_cmds "$prelink_cmds" 'exit $?' - fi - - wrappers_required=yes - case $host in - *cegcc* | *mingw32ce*) - # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. - wrappers_required=no - ;; - *cygwin* | *mingw* ) - if test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - *) - if test "$need_relink" = no || test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - esac - if test "$wrappers_required" = no; then - # Replace the output file specification. - compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - link_command="$compile_command$compile_rpath" - - # We have no uninstalled library dependencies, so finalize right now. - exit_status=0 - func_show_eval "$link_command" 'exit_status=$?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - # Delete the generated files. - if test -f "$output_objdir/${outputname}S.${objext}"; then - func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' - fi - - exit $exit_status - fi - - if test -n "$compile_shlibpath$finalize_shlibpath"; then - compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" - fi - if test -n "$finalize_shlibpath"; then - finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" - fi - - compile_var= - finalize_var= - if test -n "$runpath_var"; then - if test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - func_append rpath "$dir:" - done - compile_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - if test -n "$finalize_perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $finalize_perm_rpath; do - func_append rpath "$dir:" - done - finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - fi - - if test "$no_install" = yes; then - # We don't need to create a wrapper script. - link_command="$compile_var$compile_command$compile_rpath" - # Replace the output file specification. - link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - # Delete the old output file. - $opt_dry_run || $RM $output - # Link the executable and exit - func_show_eval "$link_command" 'exit $?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - exit $EXIT_SUCCESS - fi - - if test "$hardcode_action" = relink; then - # Fast installation is not supported - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - - func_warning "this platform does not like uninstalled shared libraries" - func_warning "\`$output' will be relinked during installation" - else - if test "$fast_install" != no; then - link_command="$finalize_var$compile_command$finalize_rpath" - if test "$fast_install" = yes; then - relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` - else - # fast_install is set to needless - relink_command= - fi - else - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - fi - fi - - # Replace the output file specification. - link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` - - # Delete the old output files. - $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname - - func_show_eval "$link_command" 'exit $?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output_objdir/$outputname" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - # Now create the wrapper script. - func_verbose "creating $output" - - # Quote the relink command for shipping. - if test -n "$relink_command"; then - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - relink_command="(cd `pwd`; $relink_command)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - fi - - # Only actually do things if not in dry run mode. - $opt_dry_run || { - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in - *.exe) func_stripname '' '.exe' "$output" - output=$func_stripname_result ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in - *cygwin*) - exeext=.exe - func_stripname '' '.exe' "$outputname" - outputname=$func_stripname_result ;; - *) exeext= ;; - esac - case $host in - *cygwin* | *mingw* ) - func_dirname_and_basename "$output" "" "." - output_name=$func_basename_result - output_path=$func_dirname_result - cwrappersource="$output_path/$objdir/lt-$output_name.c" - cwrapper="$output_path/$output_name.exe" - $RM $cwrappersource $cwrapper - trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 - - func_emit_cwrapperexe_src > $cwrappersource - - # The wrapper executable is built using the $host compiler, - # because it contains $host paths and files. If cross- - # compiling, it, like the target executable, must be - # executed on the $host or under an emulation environment. - $opt_dry_run || { - $LTCC $LTCFLAGS -o $cwrapper $cwrappersource - $STRIP $cwrapper - } - - # Now, create the wrapper script for func_source use: - func_ltwrapper_scriptname $cwrapper - $RM $func_ltwrapper_scriptname_result - trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 - $opt_dry_run || { - # note: this script will not be executed, so do not chmod. - if test "x$build" = "x$host" ; then - $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result - else - func_emit_wrapper no > $func_ltwrapper_scriptname_result - fi - } - ;; - * ) - $RM $output - trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 - - func_emit_wrapper no > $output - chmod +x $output - ;; - esac - } - exit $EXIT_SUCCESS - ;; - esac - - # See if we need to build an old-fashioned archive. - for oldlib in $oldlibs; do - - if test "$build_libtool_libs" = convenience; then - oldobjs="$libobjs_save $symfileobj" - addlibs="$convenience" - build_libtool_libs=no - else - if test "$build_libtool_libs" = module; then - oldobjs="$libobjs_save" - build_libtool_libs=no - else - oldobjs="$old_deplibs $non_pic_objects" - if test "$preload" = yes && test -f "$symfileobj"; then - func_append oldobjs " $symfileobj" - fi - fi - addlibs="$old_convenience" - fi - - if test -n "$addlibs"; then - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - - func_extract_archives $gentop $addlibs - func_append oldobjs " $func_extract_archives_result" - fi - - # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then - cmds=$old_archive_from_new_cmds - else - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - - func_extract_archives $gentop $dlprefiles - func_append oldobjs " $func_extract_archives_result" - fi - - # POSIX demands no paths to be encoded in archives. We have - # to avoid creating archives with duplicate basenames if we - # might have to extract them afterwards, e.g., when creating a - # static archive out of a convenience library, or when linking - # the entirety of a libtool archive into another (currently - # not supported by libtool). - if (for obj in $oldobjs - do - func_basename "$obj" - $ECHO "$func_basename_result" - done | sort | sort -uc >/dev/null 2>&1); then - : - else - echo "copying selected object files to avoid basename conflicts..." - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - func_mkdir_p "$gentop" - save_oldobjs=$oldobjs - oldobjs= - counter=1 - for obj in $save_oldobjs - do - func_basename "$obj" - objbase="$func_basename_result" - case " $oldobjs " in - " ") oldobjs=$obj ;; - *[\ /]"$objbase "*) - while :; do - # Make sure we don't pick an alternate name that also - # overlaps. - newobj=lt$counter-$objbase - func_arith $counter + 1 - counter=$func_arith_result - case " $oldobjs " in - *[\ /]"$newobj "*) ;; - *) if test ! -f "$gentop/$newobj"; then break; fi ;; - esac - done - func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" - func_append oldobjs " $gentop/$newobj" - ;; - *) func_append oldobjs " $obj" ;; - esac - done - fi - eval cmds=\"$old_archive_cmds\" - - func_len " $cmds" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - cmds=$old_archive_cmds - elif test -n "$archiver_list_spec"; then - func_verbose "using command file archive linking..." - for obj in $oldobjs - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" - done > $output_objdir/$libname.libcmd - func_to_tool_file "$output_objdir/$libname.libcmd" - oldobjs=" $archiver_list_spec$func_to_tool_file_result" - cmds=$old_archive_cmds - else - # the command line is too long to link in one step, link in parts - func_verbose "using piecewise archive linking..." - save_RANLIB=$RANLIB - RANLIB=: - objlist= - concat_cmds= - save_oldobjs=$oldobjs - oldobjs= - # Is there a better way of finding the last object in the list? - for obj in $save_oldobjs - do - last_oldobj=$obj - done - eval test_cmds=\"$old_archive_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - for obj in $save_oldobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - func_append objlist " $obj" - if test "$len" -lt "$max_cmd_len"; then - : - else - # the above command should be used before it gets too long - oldobjs=$objlist - if test "$obj" = "$last_oldobj" ; then - RANLIB=$save_RANLIB - fi - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" - objlist= - len=$len0 - fi - done - RANLIB=$save_RANLIB - oldobjs=$objlist - if test "X$oldobjs" = "X" ; then - eval cmds=\"\$concat_cmds\" - else - eval cmds=\"\$concat_cmds~\$old_archive_cmds\" - fi - fi - fi - func_execute_cmds "$cmds" 'exit $?' - done - - test -n "$generated" && \ - func_show_eval "${RM}r$generated" - - # Now create the libtool archive. - case $output in - *.la) - old_library= - test "$build_old_libs" = yes && old_library="$libname.$libext" - func_verbose "creating $output" - - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - if test "$hardcode_automatic" = yes ; then - relink_command= - fi - - # Only create the output if not a dry run. - $opt_dry_run || { - for installed in no yes; do - if test "$installed" = yes; then - if test -z "$install_libdir"; then - break - fi - output="$output_objdir/$outputname"i - # Replace all uninstalled libtool libraries with the installed ones - newdependency_libs= - for deplib in $dependency_libs; do - case $deplib in - *.la) - func_basename "$deplib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" - ;; - -L*) - func_stripname -L '' "$deplib" - func_replace_sysroot "$func_stripname_result" - func_append newdependency_libs " -L$func_replace_sysroot_result" - ;; - -R*) - func_stripname -R '' "$deplib" - func_replace_sysroot "$func_stripname_result" - func_append newdependency_libs " -R$func_replace_sysroot_result" - ;; - *) func_append newdependency_libs " $deplib" ;; - esac - done - dependency_libs="$newdependency_libs" - newdlfiles= - - for lib in $dlfiles; do - case $lib in - *.la) - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" - ;; - *) func_append newdlfiles " $lib" ;; - esac - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - *.la) - # Only pass preopened files to the pseudo-archive (for - # eventual linking with the app. that links it) if we - # didn't already link the preopened objects directly into - # the library: - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" - ;; - esac - done - dlprefiles="$newdlprefiles" - else - newdlfiles= - for lib in $dlfiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - func_append newdlfiles " $abs" - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - func_append newdlprefiles " $abs" - done - dlprefiles="$newdlprefiles" - fi - $RM $output - # place dlname in correct position for cygwin - # In fact, it would be nice if we could use this code for all target - # systems that can't hard-code library paths into their executables - # and that have no shared library path variable independent of PATH, - # but it turns out we can't easily determine that from inspecting - # libtool variables, so we have to hard-code the OSs to which it - # applies here; at the moment, that means platforms that use the PE - # object format with DLL files. See the long comment at the top of - # tests/bindir.at for full details. - tdlname=$dlname - case $host,$output,$installed,$module,$dlname in - *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) - # If a -bindir argument was supplied, place the dll there. - if test "x$bindir" != x ; - then - func_relative_path "$install_libdir" "$bindir" - tdlname=$func_relative_path_result$dlname - else - # Otherwise fall back on heuristic. - tdlname=../bin/$dlname - fi - ;; - esac - $ECHO > $output "\ -# $outputname - a libtool library file -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='$tdlname' - -# Names of this library. -library_names='$library_names' - -# The name of the static archive. -old_library='$old_library' - -# Linker flags that can not go in dependency_libs. -inherited_linker_flags='$new_inherited_linker_flags' - -# Libraries that this one depends upon. -dependency_libs='$dependency_libs' - -# Names of additional weak libraries provided by this library -weak_library_names='$weak_libs' - -# Version information for $libname. -current=$current -age=$age -revision=$revision - -# Is this an already installed library? -installed=$installed - -# Should we warn about portability when linking against -modules? -shouldnotlink=$module - -# Files to dlopen/dlpreopen -dlopen='$dlfiles' -dlpreopen='$dlprefiles' - -# Directory that this library needs to be installed in: -libdir='$install_libdir'" - if test "$installed" = no && test "$need_relink" = yes; then - $ECHO >> $output "\ -relink_command=\"$relink_command\"" - fi - done - } - - # Do a symbolic link so that the libtool archive can be found in - # LD_LIBRARY_PATH before the program is installed. - func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' - ;; - esac - exit $EXIT_SUCCESS -} - -{ test "$opt_mode" = link || test "$opt_mode" = relink; } && - func_mode_link ${1+"$@"} - - -# func_mode_uninstall arg... -func_mode_uninstall () -{ - $opt_debug - RM="$nonopt" - files= - rmforce= - exit_status=0 - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - for arg - do - case $arg in - -f) func_append RM " $arg"; rmforce=yes ;; - -*) func_append RM " $arg" ;; - *) func_append files " $arg" ;; - esac - done - - test -z "$RM" && \ - func_fatal_help "you must specify an RM program" - - rmdirs= - - for file in $files; do - func_dirname "$file" "" "." - dir="$func_dirname_result" - if test "X$dir" = X.; then - odir="$objdir" - else - odir="$dir/$objdir" - fi - func_basename "$file" - name="$func_basename_result" - test "$opt_mode" = uninstall && odir="$dir" - - # Remember odir for removal later, being careful to avoid duplicates - if test "$opt_mode" = clean; then - case " $rmdirs " in - *" $odir "*) ;; - *) func_append rmdirs " $odir" ;; - esac - fi - - # Don't error if the file doesn't exist and rm -f was used. - if { test -L "$file"; } >/dev/null 2>&1 || - { test -h "$file"; } >/dev/null 2>&1 || - test -f "$file"; then - : - elif test -d "$file"; then - exit_status=1 - continue - elif test "$rmforce" = yes; then - continue - fi - - rmfiles="$file" - - case $name in - *.la) - # Possibly a libtool archive, so verify it. - if func_lalib_p "$file"; then - func_source $dir/$name - - # Delete the libtool libraries and symlinks. - for n in $library_names; do - func_append rmfiles " $odir/$n" - done - test -n "$old_library" && func_append rmfiles " $odir/$old_library" - - case "$opt_mode" in - clean) - case " $library_names " in - *" $dlname "*) ;; - *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; - esac - test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" - ;; - uninstall) - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - - if test -n "$old_library"; then - # Do each command in the old_postuninstall commands. - func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - # FIXME: should reinstall the best remaining shared library. - ;; - esac - fi - ;; - - *.lo) - # Possibly a libtool object, so verify it. - if func_lalib_p "$file"; then - - # Read the .lo file - func_source $dir/$name - - # Add PIC object to the list of files to remove. - if test -n "$pic_object" && - test "$pic_object" != none; then - func_append rmfiles " $dir/$pic_object" - fi - - # Add non-PIC object to the list of files to remove. - if test -n "$non_pic_object" && - test "$non_pic_object" != none; then - func_append rmfiles " $dir/$non_pic_object" - fi - fi - ;; - - *) - if test "$opt_mode" = clean ; then - noexename=$name - case $file in - *.exe) - func_stripname '' '.exe' "$file" - file=$func_stripname_result - func_stripname '' '.exe' "$name" - noexename=$func_stripname_result - # $file with .exe has already been added to rmfiles, - # add $file without .exe - func_append rmfiles " $file" - ;; - esac - # Do a test to see if this is a libtool program. - if func_ltwrapper_p "$file"; then - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - relink_command= - func_source $func_ltwrapper_scriptname_result - func_append rmfiles " $func_ltwrapper_scriptname_result" - else - relink_command= - func_source $dir/$noexename - fi - - # note $name still contains .exe if it was in $file originally - # as does the version of $file that was added into $rmfiles - func_append rmfiles " $odir/$name $odir/${name}S.${objext}" - if test "$fast_install" = yes && test -n "$relink_command"; then - func_append rmfiles " $odir/lt-$name" - fi - if test "X$noexename" != "X$name" ; then - func_append rmfiles " $odir/lt-${noexename}.c" - fi - fi - fi - ;; - esac - func_show_eval "$RM $rmfiles" 'exit_status=1' - done - - # Try to remove the ${objdir}s in the directories where we deleted files - for dir in $rmdirs; do - if test -d "$dir"; then - func_show_eval "rmdir $dir >/dev/null 2>&1" - fi - done - - exit $exit_status -} - -{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && - func_mode_uninstall ${1+"$@"} - -test -z "$opt_mode" && { - help="$generic_help" - func_fatal_help "you must specify a MODE" -} - -test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode \`$opt_mode'" - -if test -n "$exec_cmd"; then - eval exec "$exec_cmd" - exit $EXIT_FAILURE -fi - -exit $exit_status - - -# The TAGs below are defined such that we never get into a situation -# in which we disable both kinds of libraries. Given conflicting -# choices, we go for a static library, that is the most portable, -# since we can't tell whether shared libraries were disabled because -# the user asked for that or because the platform doesn't support -# them. This is particularly important on AIX, because we don't -# support having both static and shared libraries enabled at the same -# time on that platform, so we default to a shared-only configuration. -# If a disable-shared tag is given, we'll fallback to a static-only -# configuration. But we'll never go from static-only to shared-only. - -# ### BEGIN LIBTOOL TAG CONFIG: disable-shared -build_libtool_libs=no -build_old_libs=yes -# ### END LIBTOOL TAG CONFIG: disable-shared - -# ### BEGIN LIBTOOL TAG CONFIG: disable-static -build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` -# ### END LIBTOOL TAG CONFIG: disable-static - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: -# vi:sw=2 - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 deleted file mode 100644 index 2957da7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +++ /dev/null @@ -1,176 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_cc_maxopt.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CC_MAXOPT -# -# DESCRIPTION -# -# Try to turn on "good" C optimization flags for various compilers and -# architectures, for some definition of "good". (In our case, good for -# FFTW and hopefully for other scientific codes. Modify as needed.) -# -# The user can override the flags by setting the CFLAGS environment -# variable. The user can also specify --enable-portable-binary in order to -# disable any optimization flags that might result in a binary that only -# runs on the host architecture. -# -# Note also that the flags assume that ANSI C aliasing rules are followed -# by the code (e.g. for gcc's -fstrict-aliasing), and that floating-point -# computations can be re-ordered as needed. -# -# Requires macros: AX_CHECK_COMPILER_FLAGS, AX_COMPILER_VENDOR, -# AX_GCC_ARCHFLAG, AX_GCC_X86_CPUID. -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2008 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 11 - -AC_DEFUN([AX_CC_MAXOPT], -[ -AC_REQUIRE([AC_PROG_CC]) -AC_REQUIRE([AX_COMPILER_VENDOR]) -AC_REQUIRE([AC_CANONICAL_HOST]) - -AC_ARG_ENABLE(portable-binary, [AS_HELP_STRING([--enable-portable-binary], [disable compiler optimizations that would produce unportable binaries])], - acx_maxopt_portable=$withval, acx_maxopt_portable=no) - -# Try to determine "good" native compiler flags if none specified via CFLAGS -if test "$ac_test_CFLAGS" != "set"; then - CFLAGS="" - case $ax_cv_c_compiler_vendor in - dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host" - if test "x$acx_maxopt_portable" = xno; then - CFLAGS="$CFLAGS -arch host" - fi;; - - sun) CFLAGS="-native -fast -xO5 -dalign" - if test "x$acx_maxopt_portable" = xyes; then - CFLAGS="$CFLAGS -xarch=generic" - fi;; - - hp) CFLAGS="+Oall +Optrs_ansi +DSnative" - if test "x$acx_maxopt_portable" = xyes; then - CFLAGS="$CFLAGS +DAportable" - fi;; - - ibm) if test "x$acx_maxopt_portable" = xno; then - xlc_opt="-qarch=auto -qtune=auto" - else - xlc_opt="-qtune=auto" - fi - AX_CHECK_COMPILER_FLAGS($xlc_opt, - CFLAGS="-O3 -qansialias -w $xlc_opt", - [CFLAGS="-O3 -qansialias -w" - echo "******************************************************" - echo "* You seem to have the IBM C compiler. It is *" - echo "* recommended for best performance that you use: *" - echo "* *" - echo "* CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *" - echo "* ^^^ ^^^ *" - echo "* where xxx is pwr2, pwr3, 604, or whatever kind of *" - echo "* CPU you have. (Set the CFLAGS environment var. *" - echo "* and re-run configure.) For more info, man cc. *" - echo "******************************************************"]) - ;; - - intel) CFLAGS="-O3 -ansi_alias" - if test "x$acx_maxopt_portable" = xno; then - icc_archflag=unknown - icc_flags="" - case $host_cpu in - i686*|x86_64*) - # icc accepts gcc assembly syntax, so these should work: - AX_GCC_X86_CPUID(0) - AX_GCC_X86_CPUID(1) - case $ax_cv_gcc_x86_cpuid_0 in # see AX_GCC_ARCHFLAG - *:756e6547:*:*) # Intel - case $ax_cv_gcc_x86_cpuid_1 in - *6a?:*[[234]]:*:*|*6[[789b]]?:*:*:*) icc_flags="-xK";; - *f3[[347]]:*:*:*|*f4[1347]:*:*:*) icc_flags="-xP -xN -xW -xK";; - *f??:*:*:*) icc_flags="-xN -xW -xK";; - esac ;; - esac ;; - esac - if test "x$icc_flags" != x; then - for flag in $icc_flags; do - AX_CHECK_COMPILER_FLAGS($flag, [icc_archflag=$flag; break]) - done - fi - AC_MSG_CHECKING([for icc architecture flag]) - AC_MSG_RESULT($icc_archflag) - if test "x$icc_archflag" != xunknown; then - CFLAGS="$CFLAGS $icc_archflag" - fi - fi - ;; - - gnu) - # default optimization flags for gcc on all systems - CFLAGS="-O3 -fomit-frame-pointer" - - # -fstrict-aliasing for gcc-2.95+ - AX_CHECK_COMPILER_FLAGS(-fstrict-aliasing, - CFLAGS="$CFLAGS -fstrict-aliasing") - - AX_CHECK_COMPILER_FLAGS(-ffast-math, CFLAGS="$CFLAGS -ffast-math") - - AX_GCC_ARCHFLAG($acx_maxopt_portable) - ;; - esac - - if test -z "$CFLAGS"; then - echo "" - echo "********************************************************" - echo "* WARNING: Don't know the best CFLAGS for this system *" - echo "* Use ./configure CFLAGS=... to specify your own flags *" - echo "* (otherwise, a default of CFLAGS=-O3 will be used) *" - echo "********************************************************" - echo "" - CFLAGS="-O3" - fi - - AX_CHECK_COMPILER_FLAGS($CFLAGS, [], [ - echo "" - echo "********************************************************" - echo "* WARNING: The guessed CFLAGS don't seem to work with *" - echo "* your compiler. *" - echo "* Use ./configure CFLAGS=... to specify your own flags *" - echo "********************************************************" - echo "" - CFLAGS="" - ]) - -fi -]) diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 deleted file mode 100644 index 7625580..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +++ /dev/null @@ -1,195 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_cflags_warn_all.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CFLAGS_WARN_ALL [(shellvar [,default, [A/NA]])] -# AX_CXXFLAGS_WARN_ALL [(shellvar [,default, [A/NA]])] -# AX_FCFLAGS_WARN_ALL [(shellvar [,default, [A/NA]])] -# -# DESCRIPTION -# -# Try to find a compiler option that enables most reasonable warnings. -# -# For the GNU compiler it will be -Wall (and -ansi -pedantic) The result -# is added to the shellvar being CFLAGS, CXXFLAGS, or FCFLAGS by default. -# -# Currently this macro knows about the GCC, Solaris, Digital Unix, AIX, -# HP-UX, IRIX, NEC SX-5 (Super-UX 10), Cray J90 (Unicos 10.0.0.8), and -# Intel compilers. For a given compiler, the Fortran flags are much more -# experimental than their C equivalents. -# -# - $1 shell-variable-to-add-to : CFLAGS, CXXFLAGS, or FCFLAGS -# - $2 add-value-if-not-found : nothing -# - $3 action-if-found : add value to shellvariable -# - $4 action-if-not-found : nothing -# -# LICENSE -# -# Copyright (c) 2008 Guido U. Draheim -# Copyright (c) 2010 Rhys Ulerich -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 10 - -AC_DEFUN([AX_CFLAGS_WARN_ALL],[dnl -AS_VAR_PUSHDEF([FLAGS],[CFLAGS])dnl -AS_VAR_PUSHDEF([VAR],[ac_cv_cflags_warn_all])dnl -AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for maximum warnings], -VAR,[VAR="no, unknown" - AC_LANG_PUSH([C]) - ac_save_[]FLAGS="$[]FLAGS" -for ac_arg dnl -in "-pedantic % -Wall" dnl GCC - "-xstrconst % -v" dnl Solaris C - "-std1 % -verbose -w0 -warnprotos" dnl Digital Unix - "-qlanglvl=ansi % -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" dnl AIX - "-ansi -ansiE % -fullwarn" dnl IRIX - "+ESlit % +w1" dnl HP-UX C - "-Xc % -pvctl[,]fullmsg" dnl NEC SX-5 (Super-UX 10) - "-h conform % -h msglevel 2" dnl Cray C (Unicos) - # -do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` - AC_COMPILE_IFELSE([AC_LANG_PROGRAM], - [VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break]) -done - FLAGS="$ac_save_[]FLAGS" - AC_LANG_POP([C]) -]) -case ".$VAR" in - .ok|.ok,*) m4_ifvaln($3,$3) ;; - .|.no|.no,*) m4_ifvaln($4,$4,[m4_ifval($2,[ - AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"]) - m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"])]) ;; - *) m4_ifvaln($3,$3,[ - if echo " $[]m4_ifval($1,$1,FLAGS) " | grep " $VAR " 2>&1 >/dev/null - then AC_RUN_LOG([: m4_ifval($1,$1,FLAGS) does contain $VAR]) - else AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR"]) - m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR" - fi ]) ;; -esac -AS_VAR_POPDEF([VAR])dnl -AS_VAR_POPDEF([FLAGS])dnl -]) - -dnl the only difference - the LANG selection... and the default FLAGS - -AC_DEFUN([AX_CXXFLAGS_WARN_ALL],[dnl -AS_VAR_PUSHDEF([FLAGS],[CXXFLAGS])dnl -AS_VAR_PUSHDEF([VAR],[ax_cv_cxxflags_warn_all])dnl -AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for maximum warnings], -VAR,[VAR="no, unknown" - AC_LANG_PUSH([C++]) - ac_save_[]FLAGS="$[]FLAGS" -for ac_arg dnl -in "-pedantic % -Wall" dnl GCC - "-xstrconst % -v" dnl Solaris C - "-std1 % -verbose -w0 -warnprotos" dnl Digital Unix - "-qlanglvl=ansi % -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" dnl AIX - "-ansi -ansiE % -fullwarn" dnl IRIX - "+ESlit % +w1" dnl HP-UX C - "-Xc % -pvctl[,]fullmsg" dnl NEC SX-5 (Super-UX 10) - "-h conform % -h msglevel 2" dnl Cray C (Unicos) - # -do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` - AC_COMPILE_IFELSE([AC_LANG_PROGRAM], - [VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break]) -done - FLAGS="$ac_save_[]FLAGS" - AC_LANG_POP([C++]) -]) -case ".$VAR" in - .ok|.ok,*) m4_ifvaln($3,$3) ;; - .|.no|.no,*) m4_ifvaln($4,$4,[m4_ifval($2,[ - AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"]) - m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"])]) ;; - *) m4_ifvaln($3,$3,[ - if echo " $[]m4_ifval($1,$1,FLAGS) " | grep " $VAR " 2>&1 >/dev/null - then AC_RUN_LOG([: m4_ifval($1,$1,FLAGS) does contain $VAR]) - else AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR"]) - m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR" - fi ]) ;; -esac -AS_VAR_POPDEF([VAR])dnl -AS_VAR_POPDEF([FLAGS])dnl -]) - -dnl the only difference - the LANG selection... and the default FLAGS - -AC_DEFUN([AX_FCFLAGS_WARN_ALL],[dnl -AS_VAR_PUSHDEF([FLAGS],[FCFLAGS])dnl -AS_VAR_PUSHDEF([VAR],[ax_cv_fcflags_warn_all])dnl -AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for maximum warnings], -VAR,[VAR="no, unknown" - AC_LANG_PUSH([Fortran]) - ac_save_[]FLAGS="$[]FLAGS" -for ac_arg dnl -in "-warn all % -warn all" dnl Intel - "-pedantic % -Wall" dnl GCC - "-xstrconst % -v" dnl Solaris C - "-std1 % -verbose -w0 -warnprotos" dnl Digital Unix - "-qlanglvl=ansi % -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" dnl AIX - "-ansi -ansiE % -fullwarn" dnl IRIX - "+ESlit % +w1" dnl HP-UX C - "-Xc % -pvctl[,]fullmsg" dnl NEC SX-5 (Super-UX 10) - "-h conform % -h msglevel 2" dnl Cray C (Unicos) - # -do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` - AC_COMPILE_IFELSE([AC_LANG_PROGRAM], - [VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break]) -done - FLAGS="$ac_save_[]FLAGS" - AC_LANG_POP([Fortran]) -]) -case ".$VAR" in - .ok|.ok,*) m4_ifvaln($3,$3) ;; - .|.no|.no,*) m4_ifvaln($4,$4,[m4_ifval($2,[ - AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"]) - m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"])]) ;; - *) m4_ifvaln($3,$3,[ - if echo " $[]m4_ifval($1,$1,FLAGS) " | grep " $VAR " 2>&1 >/dev/null - then AC_RUN_LOG([: m4_ifval($1,$1,FLAGS) does contain $VAR]) - else AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR"]) - m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR" - fi ]) ;; -esac -AS_VAR_POPDEF([VAR])dnl -AS_VAR_POPDEF([FLAGS])dnl -]) - -dnl implementation tactics: -dnl the for-argument contains a list of options. The first part of -dnl these does only exist to detect the compiler - usually it is -dnl a global option to enable -ansi or -extrawarnings. All other -dnl compilers will fail about it. That was needed since a lot of -dnl compilers will give false positives for some option-syntax -dnl like -Woption or -Xoption as they think of it is a pass-through -dnl to later compile stages or something. The "%" is used as a -dnl delimiter. A non-option comment can be given after "%%" marks -dnl which will be shown but not added to the respective C/CXXFLAGS. diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_check_compiler_flags.m4 b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_check_compiler_flags.m4 deleted file mode 100644 index 35bfd2a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_check_compiler_flags.m4 +++ /dev/null @@ -1,76 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_check_compiler_flags.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CHECK_COMPILER_FLAGS(FLAGS, [ACTION-SUCCESS], [ACTION-FAILURE]) -# -# DESCRIPTION -# -# Check whether the given compiler FLAGS work with the current language's -# compiler, or whether they give an error. (Warnings, however, are -# ignored.) -# -# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on -# success/failure. -# -# LICENSE -# -# Copyright (c) 2009 Steven G. Johnson -# Copyright (c) 2009 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 9 - -AC_DEFUN([AX_CHECK_COMPILER_FLAGS], -[AC_PREREQ(2.59) dnl for _AC_LANG_PREFIX -AC_MSG_CHECKING([whether _AC_LANG compiler accepts $1]) -dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname: -AS_LITERAL_IF([$1], - [AC_CACHE_VAL(AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1]), [ - ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS - _AC_LANG_PREFIX[]FLAGS="$1" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], - AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=yes, - AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=no) - _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS])], - [ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS - _AC_LANG_PREFIX[]FLAGS="$1" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], - eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=yes, - eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=no) - _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS]) -eval ax_check_compiler_flags=$AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1]) -AC_MSG_RESULT($ax_check_compiler_flags) -if test "x$ax_check_compiler_flags" = xyes; then - m4_default([$2], :) -else - m4_default([$3], :) -fi -])dnl AX_CHECK_COMPILER_FLAGS diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 deleted file mode 100644 index 3214706..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +++ /dev/null @@ -1,63 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_compiler_vendor.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_COMPILER_VENDOR -# -# DESCRIPTION -# -# Determine the vendor of the C/C++ compiler, e.g., gnu, intel, ibm, sun, -# hp, borland, comeau, dec, cray, kai, lcc, metrowerks, sgi, microsoft, -# watcom, etc. The vendor is returned in the cache variable -# $ax_cv_c_compiler_vendor for C and $ax_cv_cxx_compiler_vendor for C++. -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2008 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 9 - -AC_DEFUN([AX_COMPILER_VENDOR], -[ -AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor, - [ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=unknown - # note: don't check for gcc first since some other compilers define __GNUC__ - for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ clang:__clang__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do - vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[ -#if !($vencpp) - thisisanerror; -#endif -])], [ax_cv_]_AC_LANG_ABBREV[_compiler_vendor=`echo $ventest | cut -d: -f1`; break]) - done - ]) -]) diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_configure_args.m4 b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_configure_args.m4 deleted file mode 100644 index 0726b1b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_configure_args.m4 +++ /dev/null @@ -1,70 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_configure_args.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CONFIGURE_ARGS -# -# DESCRIPTION -# -# Helper macro for AX_ENABLE_BUILDDIR. -# -# The traditional way of starting a subdir-configure is running the script -# with ${1+"$@"} but since autoconf 2.60 this is broken. Instead we have -# to rely on eval'ing $ac_configure_args however some old autoconf -# versions do not provide that. To ensure maximum portability of autoconf -# extension macros this helper can be AC_REQUIRE'd so that -# $ac_configure_args will alsways be present. -# -# Sadly, the traditional "exec $SHELL" of the enable_builddir macros is -# spoiled now and must be replaced by "eval + exit $?". -# -# Example: -# -# AC_DEFUN([AX_ENABLE_SUBDIR],[dnl -# AC_REQUIRE([AX_CONFIGURE_ARGS])dnl -# eval $SHELL $ac_configure_args || exit $? -# ...]) -# -# LICENSE -# -# Copyright (c) 2008 Guido U. Draheim -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 9 - -AC_DEFUN([AX_CONFIGURE_ARGS],[ - # [$]@ is unsable in 2.60+ but earlier autoconf had no ac_configure_args - if test "${ac_configure_args+set}" != "set" ; then - ac_configure_args= - for ac_arg in ${1+"[$]@"}; do - ac_configure_args="$ac_configure_args '$ac_arg'" - done - fi -]) diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 deleted file mode 100644 index 959dec3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +++ /dev/null @@ -1,300 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_enable_builddir.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_ENABLE_BUILDDIR [(dirstring-or-command [,Makefile.mk [,-all]])] -# -# DESCRIPTION -# -# If the current configure was run within the srcdir then we move all -# configure-files into a subdir and let the configure steps continue -# there. We provide an option --disable-builddir to suppress the move into -# a separate builddir. -# -# Defaults: -# -# $1 = $host (overridden with $HOST) -# $2 = Makefile.mk -# $3 = -all -# -# This macro must be called before AM_INIT_AUTOMAKE. It creates a default -# toplevel srcdir Makefile from the information found in the created -# toplevel builddir Makefile. It just copies the variables and -# rule-targets, each extended with a default rule-execution that recurses -# into the build directory of the current "HOST". You can override the -# auto-dection through `config.guess` and build-time of course, as in -# -# make HOST=i386-mingw-cross -# -# which can of course set at configure time as well using -# -# configure --host=i386-mingw-cross -# -# After the default has been created, additional rules can be appended -# that will not just recurse into the subdirectories and only ever exist -# in the srcdir toplevel makefile - these parts are read from the $2 = -# Makefile.mk file -# -# The automatic rules are usually scanning the toplevel Makefile for lines -# like '#### $host |$builddir' to recognize the place where to recurse -# into. Usually, the last one is the only one used. However, almost all -# targets have an additional "*-all" rule which makes the script to -# recurse into _all_ variants of the current HOST (!!) setting. The "-all" -# suffix can be overriden for the macro as well. -# -# a special rule is only given for things like "dist" that will copy the -# tarball from the builddir to the sourcedir (or $(PUB)) for reason of -# convenience. -# -# LICENSE -# -# Copyright (c) 2009 Guido U. Draheim -# Copyright (c) 2009 Alan Jenkins -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 22 - -AC_DEFUN([AX_ENABLE_BUILDDIR],[ -AC_REQUIRE([AC_CANONICAL_HOST])[]dnl -AC_REQUIRE([AX_CONFIGURE_ARGS])[]dnl -AC_REQUIRE([AM_AUX_DIR_EXPAND])[]dnl -AC_BEFORE([$0],[AM_INIT_AUTOMAKE])dnl -AS_VAR_PUSHDEF([SUB],[ax_enable_builddir])dnl -AS_VAR_PUSHDEF([AUX],[ax_enable_builddir_auxdir])dnl -AS_VAR_PUSHDEF([SED],[ax_enable_builddir_sed])dnl -SUB="." -AC_ARG_ENABLE([builddir], AS_HELP_STRING( - [--disable-builddir],[disable automatic build in subdir of sources]) - ,[SUB="$enableval"], [SUB="auto"]) -if test ".$ac_srcdir_defaulted" != ".no" ; then -if test ".$srcdir" = ".." ; then - if test -f config.status ; then - AC_MSG_NOTICE(toplevel srcdir already configured... skipping subdir build) - else - test ".$SUB" = "." && SUB="." - test ".$SUB" = ".no" && SUB="." - test ".$TARGET" = "." && TARGET="$target" - test ".$SUB" = ".auto" && SUB="m4_ifval([$1], [$1],[$TARGET])" - if test ".$SUB" != ".." ; then # we know where to go and - AS_MKDIR_P([$SUB]) - echo __.$SUB.__ > $SUB/conftest.tmp - cd $SUB - if grep __.$SUB.__ conftest.tmp >/dev/null 2>/dev/null ; then - rm conftest.tmp - AC_MSG_RESULT([continue configure in default builddir "./$SUB"]) - else - AC_MSG_ERROR([could not change to default builddir "./$SUB"]) - fi - srcdir=`echo "$SUB" | - sed -e 's,^\./,,;s,[[^/]]$,&/,;s,[[^/]]*/,../,g;s,[[/]]$,,;'` - # going to restart from subdirectory location - test -f $srcdir/config.log && mv $srcdir/config.log . - test -f $srcdir/confdefs.h && mv $srcdir/confdefs.h . - test -f $srcdir/conftest.log && mv $srcdir/conftest.log . - test -f $srcdir/$cache_file && mv $srcdir/$cache_file . - AC_MSG_RESULT(....exec $SHELL $srcdir/[$]0 "--srcdir=$srcdir" "--enable-builddir=$SUB" ${1+"[$]@"}) - case "[$]0" in # restart - [/\\]*) eval $SHELL "'[$]0'" "'--srcdir=$srcdir'" "'--enable-builddir=$SUB'" $ac_configure_args ;; - *) eval $SHELL "'$srcdir/[$]0'" "'--srcdir=$srcdir'" "'--enable-builddir=$SUB'" $ac_configure_args ;; - esac ; exit $? - fi - fi -fi fi -test ".$SUB" = ".auto" && SUB="." -dnl ac_path_prog uses "set dummy" to override $@ which would defeat the "exec" -AC_PATH_PROG(SED,gsed sed, sed) -AUX="$am_aux_dir" -AS_VAR_POPDEF([SED])dnl -AS_VAR_POPDEF([AUX])dnl -AS_VAR_POPDEF([SUB])dnl -AC_CONFIG_COMMANDS([buildir],[dnl .............. config.status .............. -AS_VAR_PUSHDEF([SUB],[ax_enable_builddir])dnl -AS_VAR_PUSHDEF([TOP],[top_srcdir])dnl -AS_VAR_PUSHDEF([SRC],[ac_top_srcdir])dnl -AS_VAR_PUSHDEF([AUX],[ax_enable_builddir_auxdir])dnl -AS_VAR_PUSHDEF([SED],[ax_enable_builddir_sed])dnl -pushdef([END],[Makefile.mk])dnl -pushdef([_ALL],[ifelse([$3],,[-all],[$3])])dnl - SRC="$ax_enable_builddir_srcdir" - if test ".$SUB" = ".." ; then - if test -f "$TOP/Makefile" ; then - AC_MSG_NOTICE([skipping TOP/Makefile - left untouched]) - else - AC_MSG_NOTICE([skipping TOP/Makefile - not created]) - fi - else - if test -f "$SRC/Makefile" ; then - a=`grep "^VERSION " "$SRC/Makefile"` ; b=`grep "^VERSION " Makefile` - test "$a" != "$b" && rm "$SRC/Makefile" - fi - if test -f "$SRC/Makefile" ; then - echo "$SRC/Makefile : $SRC/Makefile.in" > $tmp/conftemp.mk - echo " []@ echo 'REMOVED,,,' >\$[]@" >> $tmp/conftemp.mk - eval "${MAKE-make} -f $tmp/conftemp.mk 2>/dev/null >/dev/null" - if grep '^REMOVED,,,' "$SRC/Makefile" >/dev/null - then rm $SRC/Makefile ; fi - cp $tmp/conftemp.mk $SRC/makefiles.mk~ ## DEBUGGING - fi - if test ! -f "$SRC/Makefile" ; then - AC_MSG_NOTICE([create TOP/Makefile guessed from local Makefile]) - x='`' ; cat >$tmp/conftemp.sed <<_EOF -/^\$/n -x -/^\$/bS -x -/\\\\\$/{H;d;} -{H;s/.*//;x;} -bM -:S -x -/\\\\\$/{h;d;} -{h;s/.*//;x;} -:M -s/\\(\\n\\) /\\1 /g -/^ /d -/^[[ ]]*[[\\#]]/d -/^VPATH *=/d -s/^srcdir *=.*/srcdir = ./ -s/^top_srcdir *=.*/top_srcdir = ./ -/[[:=]]/!d -/^\\./d -dnl Now handle rules (i.e. lines containing ":" but not " = "). -/ = /b -/ .= /b -/:/!b -s/:.*/:/ -s/ / /g -s/ \\([[a-z]][[a-z-]]*[[a-zA-Z0-9]]\\)\\([[ :]]\\)/ \\1 \\1[]_ALL\\2/g -s/^\\([[a-z]][[a-z-]]*[[a-zA-Z0-9]]\\)\\([[ :]]\\)/\\1 \\1[]_ALL\\2/ -s/ / /g -/^all all[]_ALL[[ :]]/i\\ -all-configured : all[]_ALL -dnl dist-all exists... and would make for dist-all-all -s/ [[a-zA-Z0-9-]]*[]_ALL [[a-zA-Z0-9-]]*[]_ALL[]_ALL//g -/[]_ALL[]_ALL/d -a\\ - @ HOST="\$(HOST)\" \\\\\\ - ; test ".\$\$HOST" = "." && HOST=$x sh $AUX/config.guess $x \\\\\\ - ; BUILD=$x grep "^#### \$\$HOST " Makefile | sed -e 's/.*|//' $x \\\\\\ - ; use=$x basename "\$\@" _ALL $x; n=$x echo \$\$BUILD | wc -w $x \\\\\\ - ; echo "MAKE \$\$HOST : \$\$n * \$\@"; if test "\$\$n" = "0" ; then : \\\\\\ - ; BUILD=$x grep "^####.*|" Makefile |tail -1| sed -e 's/.*|//' $x ; fi \\\\\\ - ; test ".\$\$BUILD" = "." && BUILD="." \\\\\\ - ; test "\$\$use" = "\$\@" && BUILD=$x echo "\$\$BUILD" | tail -1 $x \\\\\\ - ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\ - ; (cd "\$\$i" && test ! -f configure && \$(MAKE) \$\$use) || exit; done -dnl special rule add-on: "dist" copies the tarball to $(PUB). (source tree) -/dist[]_ALL *:/a\\ - @ HOST="\$(HOST)\" \\\\\\ - ; test ".\$\$HOST" = "." && HOST=$x sh $AUX/config.guess $x \\\\\\ - ; BUILD=$x grep "^#### \$\$HOST " Makefile | sed -e 's/.*|//' $x \\\\\\ - ; found=$x echo \$\$BUILD | wc -w $x \\\\\\ - ; echo "MAKE \$\$HOST : \$\$found \$(PACKAGE)-\$(VERSION).tar.*" \\\\\\ - ; if test "\$\$found" = "0" ; then : \\\\\\ - ; BUILD=$x grep "^#### .*|" Makefile |tail -1| sed -e 's/.*|//' $x \\\\\\ - ; fi ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\ - ; for f in \$\$i/\$(PACKAGE)-\$(VERSION).tar.* \\\\\\ - ; do test -f "\$\$f" && mv "\$\$f" \$(PUB). ; done ; break ; done -dnl special rule add-on: "dist-foo" copies all the archives to $(PUB). (source tree) -/dist-[[a-zA-Z0-9]]*[]_ALL *:/a\\ - @ HOST="\$(HOST)\" \\\\\\ - ; test ".\$\$HOST" = "." && HOST=$x sh ./config.guess $x \\\\\\ - ; BUILD=$x grep "^#### \$\$HOST " Makefile | sed -e 's/.*|//' $x \\\\\\ - ; found=$x echo \$\$BUILD | wc -w $x \\\\\\ - ; echo "MAKE \$\$HOST : \$\$found \$(PACKAGE)-\$(VERSION).*" \\\\\\ - ; if test "\$\$found" = "0" ; then : \\\\\\ - ; BUILD=$x grep "^#### .*|" Makefile |tail -1| sed -e 's/.*|//' $x \\\\\\ - ; fi ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\ - ; for f in \$\$i/\$(PACKAGE)-\$(VERSION).* \\\\\\ - ; do test -f "\$\$f" && mv "\$\$f" \$(PUB). ; done ; break ; done -dnl special rule add-on: "distclean" removes all local builddirs completely -/distclean[]_ALL *:/a\\ - @ HOST="\$(HOST)\" \\\\\\ - ; test ".\$\$HOST" = "." && HOST=$x sh $AUX/config.guess $x \\\\\\ - ; BUILD=$x grep "^#### .*|" Makefile | sed -e 's/.*|//' $x \\\\\\ - ; use=$x basename "\$\@" _ALL $x; n=$x echo \$\$BUILD | wc -w $x \\\\\\ - ; echo "MAKE \$\$HOST : \$\$n * \$\@ (all local builds)" \\\\\\ - ; test ".\$\$BUILD" = "." && BUILD="." \\\\\\ - ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\ - ; echo "# rm -r \$\$i"; done ; echo "# (sleep 3)" ; sleep 3 \\\\\\ - ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\ - ; echo "\$\$i" | grep "^/" > /dev/null && continue \\\\\\ - ; echo "\$\$i" | grep "^../" > /dev/null && continue \\\\\\ - ; echo "rm -r \$\$i"; (rm -r "\$\$i") ; done ; rm Makefile -_EOF - cp "$tmp/conftemp.sed" "$SRC/makefile.sed~" ## DEBUGGING - $SED -f $tmp/conftemp.sed Makefile >$SRC/Makefile - if test -f "$SRC/m4_ifval([$2],[$2],[END])" ; then - AC_MSG_NOTICE([extend TOP/Makefile with TOP/m4_ifval([$2],[$2],[END])]) - cat $SRC/END >>$SRC/Makefile - fi ; xxxx="####" - echo "$xxxx CONFIGURATIONS FOR TOPLEVEL MAKEFILE: " >>$SRC/Makefile - # sanity check - if grep '^; echo "MAKE ' $SRC/Makefile >/dev/null ; then - AC_MSG_NOTICE([buggy sed found - it deletes tab in "a" text parts]) - $SED -e '/^@ HOST=/s/^/ /' -e '/^; /s/^/ /' $SRC/Makefile \ - >$SRC/Makefile~ - (test -s $SRC/Makefile~ && mv $SRC/Makefile~ $SRC/Makefile) 2>/dev/null - fi - else - xxxx="\\#\\#\\#\\#" - # echo "/^$xxxx *$ax_enable_builddir_host /d" >$tmp/conftemp.sed - echo "s!^$xxxx [[^|]]* | *$SUB *\$!$xxxx ...... $SUB!" >$tmp/conftemp.sed - $SED -f "$tmp/conftemp.sed" "$SRC/Makefile" >$tmp/mkfile.tmp - cp "$tmp/conftemp.sed" "$SRC/makefiles.sed~" ## DEBUGGING - cp "$tmp/mkfile.tmp" "$SRC/makefiles.out~" ## DEBUGGING - if cmp -s "$SRC/Makefile" "$tmp/mkfile.tmp" 2>/dev/null ; then - AC_MSG_NOTICE([keeping TOP/Makefile from earlier configure]) - rm "$tmp/mkfile.tmp" - else - AC_MSG_NOTICE([reusing TOP/Makefile from earlier configure]) - mv "$tmp/mkfile.tmp" "$SRC/Makefile" - fi - fi - AC_MSG_NOTICE([build in $SUB (HOST=$ax_enable_builddir_host)]) - xxxx="####" - echo "$xxxx" "$ax_enable_builddir_host" "|$SUB" >>$SRC/Makefile - fi -popdef([END])dnl -AS_VAR_POPDEF([SED])dnl -AS_VAR_POPDEF([AUX])dnl -AS_VAR_POPDEF([SRC])dnl -AS_VAR_POPDEF([TOP])dnl -AS_VAR_POPDEF([SUB])dnl -],[dnl -ax_enable_builddir_srcdir="$srcdir" # $srcdir -ax_enable_builddir_host="$HOST" # $HOST / $host -ax_enable_builddir_version="$VERSION" # $VERSION -ax_enable_builddir_package="$PACKAGE" # $PACKAGE -ax_enable_builddir_auxdir="$ax_enable_builddir_auxdir" # $AUX -ax_enable_builddir_sed="$ax_enable_builddir_sed" # $SED -ax_enable_builddir="$ax_enable_builddir" # $SUB -])dnl -]) diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 deleted file mode 100644 index d37a913..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +++ /dev/null @@ -1,215 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_gcc_archflag.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_GCC_ARCHFLAG([PORTABLE?], [ACTION-SUCCESS], [ACTION-FAILURE]) -# -# DESCRIPTION -# -# This macro tries to guess the "native" arch corresponding to the target -# architecture for use with gcc's -march=arch or -mtune=arch flags. If -# found, the cache variable $ax_cv_gcc_archflag is set to this flag and -# ACTION-SUCCESS is executed; otherwise $ax_cv_gcc_archflag is is set to -# "unknown" and ACTION-FAILURE is executed. The default ACTION-SUCCESS is -# to add $ax_cv_gcc_archflag to the end of $CFLAGS. -# -# PORTABLE? should be either [yes] (default) or [no]. In the former case, -# the flag is set to -mtune (or equivalent) so that the architecture is -# only used for tuning, but the instruction set used is still portable. In -# the latter case, the flag is set to -march (or equivalent) so that -# architecture-specific instructions are enabled. -# -# The user can specify --with-gcc-arch= in order to override the -# macro's choice of architecture, or --without-gcc-arch to disable this. -# -# When cross-compiling, or if $CC is not gcc, then ACTION-FAILURE is -# called unless the user specified --with-gcc-arch manually. -# -# Requires macros: AX_CHECK_COMPILER_FLAGS, AX_GCC_X86_CPUID -# -# (The main emphasis here is on recent CPUs, on the principle that doing -# high-performance computing on old hardware is uncommon.) -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2008 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 8 - -AC_DEFUN([AX_GCC_ARCHFLAG], -[AC_REQUIRE([AC_PROG_CC]) -AC_REQUIRE([AC_CANONICAL_HOST]) - -AC_ARG_WITH(gcc-arch, [AS_HELP_STRING([--with-gcc-arch=], [use architecture for gcc -march/-mtune, instead of guessing])], - ax_gcc_arch=$withval, ax_gcc_arch=yes) - -AC_MSG_CHECKING([for gcc architecture flag]) -AC_MSG_RESULT([]) -AC_CACHE_VAL(ax_cv_gcc_archflag, -[ -ax_cv_gcc_archflag="unknown" - -if test "$GCC" = yes; then - -if test "x$ax_gcc_arch" = xyes; then -ax_gcc_arch="" -if test "$cross_compiling" = no; then -case $host_cpu in - i[[3456]]86*|x86_64*) # use cpuid codes, in part from x86info-1.7 by D. Jones - AX_GCC_X86_CPUID(0) - AX_GCC_X86_CPUID(1) - case $ax_cv_gcc_x86_cpuid_0 in - *:756e6547:*:*) # Intel - case $ax_cv_gcc_x86_cpuid_1 in - *5[[48]]?:*:*:*) ax_gcc_arch="pentium-mmx pentium" ;; - *5??:*:*:*) ax_gcc_arch=pentium ;; - *6[[3456]]?:*:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; - *6a?:*[[01]]:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; - *6a?:*[[234]]:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; - *6[[9d]]?:*:*:*) ax_gcc_arch="pentium-m pentium3 pentiumpro" ;; - *6[[78b]]?:*:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; - *6??:*:*:*) ax_gcc_arch=pentiumpro ;; - *f3[[347]]:*:*:*|*f4[1347]:*:*:*) - case $host_cpu in - x86_64*) ax_gcc_arch="nocona pentium4 pentiumpro" ;; - *) ax_gcc_arch="prescott pentium4 pentiumpro" ;; - esac ;; - *f??:*:*:*) ax_gcc_arch="pentium4 pentiumpro";; - esac ;; - *:68747541:*:*) # AMD - case $ax_cv_gcc_x86_cpuid_1 in - *5[[67]]?:*:*:*) ax_gcc_arch=k6 ;; - *5[[8d]]?:*:*:*) ax_gcc_arch="k6-2 k6" ;; - *5[[9]]?:*:*:*) ax_gcc_arch="k6-3 k6" ;; - *60?:*:*:*) ax_gcc_arch=k7 ;; - *6[[12]]?:*:*:*) ax_gcc_arch="athlon k7" ;; - *6[[34]]?:*:*:*) ax_gcc_arch="athlon-tbird k7" ;; - *67?:*:*:*) ax_gcc_arch="athlon-4 athlon k7" ;; - *6[[68a]]?:*:*:*) - AX_GCC_X86_CPUID(0x80000006) # L2 cache size - case $ax_cv_gcc_x86_cpuid_0x80000006 in - *:*:*[[1-9a-f]]??????:*) # (L2 = ecx >> 16) >= 256 - ax_gcc_arch="athlon-xp athlon-4 athlon k7" ;; - *) ax_gcc_arch="athlon-4 athlon k7" ;; - esac ;; - *f[[4cef8b]]?:*:*:*) ax_gcc_arch="athlon64 k8" ;; - *f5?:*:*:*) ax_gcc_arch="opteron k8" ;; - *f7?:*:*:*) ax_gcc_arch="athlon-fx opteron k8" ;; - *f??:*:*:*) ax_gcc_arch="k8" ;; - esac ;; - *:746e6543:*:*) # IDT - case $ax_cv_gcc_x86_cpuid_1 in - *54?:*:*:*) ax_gcc_arch=winchip-c6 ;; - *58?:*:*:*) ax_gcc_arch=winchip2 ;; - *6[[78]]?:*:*:*) ax_gcc_arch=c3 ;; - *69?:*:*:*) ax_gcc_arch="c3-2 c3" ;; - esac ;; - esac - if test x"$ax_gcc_arch" = x; then # fallback - case $host_cpu in - i586*) ax_gcc_arch=pentium ;; - i686*) ax_gcc_arch=pentiumpro ;; - esac - fi - ;; - - sparc*) - AC_PATH_PROG([PRTDIAG], [prtdiag], [prtdiag], [$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/]) - cputype=`(((grep cpu /proc/cpuinfo | cut -d: -f2) ; ($PRTDIAG -v |grep -i sparc) ; grep -i cpu /var/run/dmesg.boot ) | head -n 1) 2> /dev/null` - cputype=`echo "$cputype" | tr -d ' -' |tr $as_cr_LETTERS $as_cr_letters` - case $cputype in - *ultrasparciv*) ax_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9" ;; - *ultrasparciii*) ax_gcc_arch="ultrasparc3 ultrasparc v9" ;; - *ultrasparc*) ax_gcc_arch="ultrasparc v9" ;; - *supersparc*|*tms390z5[[05]]*) ax_gcc_arch="supersparc v8" ;; - *hypersparc*|*rt62[[056]]*) ax_gcc_arch="hypersparc v8" ;; - *cypress*) ax_gcc_arch=cypress ;; - esac ;; - - alphaev5) ax_gcc_arch=ev5 ;; - alphaev56) ax_gcc_arch=ev56 ;; - alphapca56) ax_gcc_arch="pca56 ev56" ;; - alphapca57) ax_gcc_arch="pca57 pca56 ev56" ;; - alphaev6) ax_gcc_arch=ev6 ;; - alphaev67) ax_gcc_arch=ev67 ;; - alphaev68) ax_gcc_arch="ev68 ev67" ;; - alphaev69) ax_gcc_arch="ev69 ev68 ev67" ;; - alphaev7) ax_gcc_arch="ev7 ev69 ev68 ev67" ;; - alphaev79) ax_gcc_arch="ev79 ev7 ev69 ev68 ev67" ;; - - powerpc*) - cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null` - cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'` - case $cputype in - *750*) ax_gcc_arch="750 G3" ;; - *740[[0-9]]*) ax_gcc_arch="$cputype 7400 G4" ;; - *74[[4-5]][[0-9]]*) ax_gcc_arch="$cputype 7450 G4" ;; - *74[[0-9]][[0-9]]*) ax_gcc_arch="$cputype G4" ;; - *970*) ax_gcc_arch="970 G5 power4";; - *POWER4*|*power4*|*gq*) ax_gcc_arch="power4 970";; - *POWER5*|*power5*|*gr*|*gs*) ax_gcc_arch="power5 power4 970";; - 603ev|8240) ax_gcc_arch="$cputype 603e 603";; - *) ax_gcc_arch=$cputype ;; - esac - ax_gcc_arch="$ax_gcc_arch powerpc" - ;; -esac -fi # not cross-compiling -fi # guess arch - -if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then -for arch in $ax_gcc_arch; do - if test "x[]m4_default([$1],yes)" = xyes; then # if we require portable code - flags="-mtune=$arch" - # -mcpu=$arch and m$arch generate nonportable code on every arch except - # x86. And some other arches (e.g. Alpha) don't accept -mtune. Grrr. - case $host_cpu in i*86|x86_64*) flags="$flags -mcpu=$arch -m$arch";; esac - else - flags="-march=$arch -mcpu=$arch -m$arch" - fi - for flag in $flags; do - AX_CHECK_COMPILER_FLAGS($flag, [ax_cv_gcc_archflag=$flag; break]) - done - test "x$ax_cv_gcc_archflag" = xunknown || break -done -fi - -fi # $GCC=yes -]) -AC_MSG_CHECKING([for gcc architecture flag]) -AC_MSG_RESULT($ax_cv_gcc_archflag) -if test "x$ax_cv_gcc_archflag" = xunknown; then - m4_default([$3],:) -else - m4_default([$2], [CFLAGS="$CFLAGS $ax_cv_gcc_archflag"]) -fi -]) diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_gcc_x86_cpuid.m4 b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_gcc_x86_cpuid.m4 deleted file mode 100644 index 7d46fee..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ax_gcc_x86_cpuid.m4 +++ /dev/null @@ -1,79 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_gcc_x86_cpuid.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_GCC_X86_CPUID(OP) -# -# DESCRIPTION -# -# On Pentium and later x86 processors, with gcc or a compiler that has a -# compatible syntax for inline assembly instructions, run a small program -# that executes the cpuid instruction with input OP. This can be used to -# detect the CPU type. -# -# On output, the values of the eax, ebx, ecx, and edx registers are stored -# as hexadecimal strings as "eax:ebx:ecx:edx" in the cache variable -# ax_cv_gcc_x86_cpuid_OP. -# -# If the cpuid instruction fails (because you are running a -# cross-compiler, or because you are not using gcc, or because you are on -# a processor that doesn't have this instruction), ax_cv_gcc_x86_cpuid_OP -# is set to the string "unknown". -# -# This macro mainly exists to be used in AX_GCC_ARCHFLAG. -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2008 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 7 - -AC_DEFUN([AX_GCC_X86_CPUID], -[AC_REQUIRE([AC_PROG_CC]) -AC_LANG_PUSH([C]) -AC_CACHE_CHECK(for x86 cpuid $1 output, ax_cv_gcc_x86_cpuid_$1, - [AC_RUN_IFELSE([AC_LANG_PROGRAM([#include ], [ - int op = $1, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; -])], - [ax_cv_gcc_x86_cpuid_$1=`cat conftest_cpuid`; rm -f conftest_cpuid], - [ax_cv_gcc_x86_cpuid_$1=unknown; rm -f conftest_cpuid], - [ax_cv_gcc_x86_cpuid_$1=unknown])]) -AC_LANG_POP([C]) -]) diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/libtool.m4 b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/libtool.m4 deleted file mode 100644 index d812584..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/libtool.m4 +++ /dev/null @@ -1,7831 +0,0 @@ -# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, -# Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -m4_define([_LT_COPYING], [dnl -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, -# Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -]) - -# serial 57 LT_INIT - - -# LT_PREREQ(VERSION) -# ------------------ -# Complain and exit if this libtool version is less that VERSION. -m4_defun([LT_PREREQ], -[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, - [m4_default([$3], - [m4_fatal([Libtool version $1 or higher is required], - 63)])], - [$2])]) - - -# _LT_CHECK_BUILDDIR -# ------------------ -# Complain if the absolute build directory name contains unusual characters -m4_defun([_LT_CHECK_BUILDDIR], -[case `pwd` in - *\ * | *\ *) - AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; -esac -]) - - -# LT_INIT([OPTIONS]) -# ------------------ -AC_DEFUN([LT_INIT], -[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT -AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl -AC_BEFORE([$0], [LT_LANG])dnl -AC_BEFORE([$0], [LT_OUTPUT])dnl -AC_BEFORE([$0], [LTDL_INIT])dnl -m4_require([_LT_CHECK_BUILDDIR])dnl - -dnl Autoconf doesn't catch unexpanded LT_ macros by default: -m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl -m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl -dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 -dnl unless we require an AC_DEFUNed macro: -AC_REQUIRE([LTOPTIONS_VERSION])dnl -AC_REQUIRE([LTSUGAR_VERSION])dnl -AC_REQUIRE([LTVERSION_VERSION])dnl -AC_REQUIRE([LTOBSOLETE_VERSION])dnl -m4_require([_LT_PROG_LTMAIN])dnl - -_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) - -dnl Parse OPTIONS -_LT_SET_OPTIONS([$0], [$1]) - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -_LT_SETUP - -# Only expand once: -m4_define([LT_INIT]) -])# LT_INIT - -# Old names: -AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) -AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PROG_LIBTOOL], []) -dnl AC_DEFUN([AM_PROG_LIBTOOL], []) - - -# _LT_CC_BASENAME(CC) -# ------------------- -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -m4_defun([_LT_CC_BASENAME], -[for cc_temp in $1""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` -]) - - -# _LT_FILEUTILS_DEFAULTS -# ---------------------- -# It is okay to use these file commands and assume they have been set -# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. -m4_defun([_LT_FILEUTILS_DEFAULTS], -[: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} -])# _LT_FILEUTILS_DEFAULTS - - -# _LT_SETUP -# --------- -m4_defun([_LT_SETUP], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl -AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl - -_LT_DECL([], [host_alias], [0], [The host system])dnl -_LT_DECL([], [host], [0])dnl -_LT_DECL([], [host_os], [0])dnl -dnl -_LT_DECL([], [build_alias], [0], [The build system])dnl -_LT_DECL([], [build], [0])dnl -_LT_DECL([], [build_os], [0])dnl -dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -dnl -AC_REQUIRE([AC_PROG_LN_S])dnl -test -z "$LN_S" && LN_S="ln -s" -_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl -dnl -AC_REQUIRE([LT_CMD_MAX_LEN])dnl -_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl -_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl -dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl -m4_require([_LT_CMD_RELOAD])dnl -m4_require([_LT_CHECK_MAGIC_METHOD])dnl -m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl -m4_require([_LT_CMD_OLD_ARCHIVE])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -m4_require([_LT_WITH_SYSROOT])dnl - -_LT_CONFIG_LIBTOOL_INIT([ -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi -]) -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -_LT_CHECK_OBJDIR - -m4_require([_LT_TAG_COMPILER])dnl - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -_LT_CC_BASENAME([$compiler]) - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - _LT_PATH_MAGIC - fi - ;; -esac - -# Use C for the default configuration in the libtool script -LT_SUPPORTED_TAG([CC]) -_LT_LANG_C_CONFIG -_LT_LANG_DEFAULT_CONFIG -_LT_CONFIG_COMMANDS -])# _LT_SETUP - - -# _LT_PREPARE_SED_QUOTE_VARS -# -------------------------- -# Define a few sed substitution that help us do robust quoting. -m4_defun([_LT_PREPARE_SED_QUOTE_VARS], -[# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\([["`\\]]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' -]) - -# _LT_PROG_LTMAIN -# --------------- -# Note that this code is called both from `configure', and `config.status' -# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, -# `config.status' has no value for ac_aux_dir unless we are using Automake, -# so we pass a copy along to make sure it has a sensible value anyway. -m4_defun([_LT_PROG_LTMAIN], -[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl -_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) -ltmain="$ac_aux_dir/ltmain.sh" -])# _LT_PROG_LTMAIN - - -## ------------------------------------- ## -## Accumulate code for creating libtool. ## -## ------------------------------------- ## - -# So that we can recreate a full libtool script including additional -# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS -# in macros and then make a single call at the end using the `libtool' -# label. - - -# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) -# ---------------------------------------- -# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL_INIT], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_INIT], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_INIT]) - - -# _LT_CONFIG_LIBTOOL([COMMANDS]) -# ------------------------------ -# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) - - -# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) -# ----------------------------------------------------- -m4_defun([_LT_CONFIG_SAVE_COMMANDS], -[_LT_CONFIG_LIBTOOL([$1]) -_LT_CONFIG_LIBTOOL_INIT([$2]) -]) - - -# _LT_FORMAT_COMMENT([COMMENT]) -# ----------------------------- -# Add leading comment marks to the start of each line, and a trailing -# full-stop to the whole comment if one is not present already. -m4_define([_LT_FORMAT_COMMENT], -[m4_ifval([$1], [ -m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], - [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) -)]) - - - -## ------------------------ ## -## FIXME: Eliminate VARNAME ## -## ------------------------ ## - - -# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) -# ------------------------------------------------------------------- -# CONFIGNAME is the name given to the value in the libtool script. -# VARNAME is the (base) name used in the configure script. -# VALUE may be 0, 1 or 2 for a computed quote escaped value based on -# VARNAME. Any other value will be used directly. -m4_define([_LT_DECL], -[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], - [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], - [m4_ifval([$1], [$1], [$2])]) - lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) - m4_ifval([$4], - [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) - lt_dict_add_subkey([lt_decl_dict], [$2], - [tagged?], [m4_ifval([$5], [yes], [no])])]) -]) - - -# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) -# -------------------------------------------------------- -m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) - - -# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_tag_varnames], -[_lt_decl_filter([tagged?], [yes], $@)]) - - -# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) -# --------------------------------------------------------- -m4_define([_lt_decl_filter], -[m4_case([$#], - [0], [m4_fatal([$0: too few arguments: $#])], - [1], [m4_fatal([$0: too few arguments: $#: $1])], - [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], - [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], - [lt_dict_filter([lt_decl_dict], $@)])[]dnl -]) - - -# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) -# -------------------------------------------------- -m4_define([lt_decl_quote_varnames], -[_lt_decl_filter([value], [1], $@)]) - - -# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_dquote_varnames], -[_lt_decl_filter([value], [2], $@)]) - - -# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_varnames_tagged], -[m4_assert([$# <= 2])dnl -_$0(m4_quote(m4_default([$1], [[, ]])), - m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), - m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) -m4_define([_lt_decl_varnames_tagged], -[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) - - -# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_all_varnames], -[_$0(m4_quote(m4_default([$1], [[, ]])), - m4_if([$2], [], - m4_quote(lt_decl_varnames), - m4_quote(m4_shift($@))))[]dnl -]) -m4_define([_lt_decl_all_varnames], -[lt_join($@, lt_decl_varnames_tagged([$1], - lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl -]) - - -# _LT_CONFIG_STATUS_DECLARE([VARNAME]) -# ------------------------------------ -# Quote a variable value, and forward it to `config.status' so that its -# declaration there will have the same value as in `configure'. VARNAME -# must have a single quote delimited value for this to work. -m4_define([_LT_CONFIG_STATUS_DECLARE], -[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) - - -# _LT_CONFIG_STATUS_DECLARATIONS -# ------------------------------ -# We delimit libtool config variables with single quotes, so when -# we write them to config.status, we have to be sure to quote all -# embedded single quotes properly. In configure, this macro expands -# each variable declared with _LT_DECL (and _LT_TAGDECL) into: -# -# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' -m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], -[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), - [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAGS -# ---------------- -# Output comment and list of tags supported by the script -m4_defun([_LT_LIBTOOL_TAGS], -[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl -available_tags="_LT_TAGS"dnl -]) - - -# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) -# ----------------------------------- -# Extract the dictionary values for VARNAME (optionally with TAG) and -# expand to a commented shell variable setting: -# -# # Some comment about what VAR is for. -# visible_name=$lt_internal_name -m4_define([_LT_LIBTOOL_DECLARE], -[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], - [description])))[]dnl -m4_pushdef([_libtool_name], - m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl -m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), - [0], [_libtool_name=[$]$1], - [1], [_libtool_name=$lt_[]$1], - [2], [_libtool_name=$lt_[]$1], - [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl -m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl -]) - - -# _LT_LIBTOOL_CONFIG_VARS -# ----------------------- -# Produce commented declarations of non-tagged libtool config variables -# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' -# script. Tagged libtool config variables (even for the LIBTOOL CONFIG -# section) are produced by _LT_LIBTOOL_TAG_VARS. -m4_defun([_LT_LIBTOOL_CONFIG_VARS], -[m4_foreach([_lt_var], - m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAG_VARS(TAG) -# ------------------------- -m4_define([_LT_LIBTOOL_TAG_VARS], -[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) - - -# _LT_TAGVAR(VARNAME, [TAGNAME]) -# ------------------------------ -m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) - - -# _LT_CONFIG_COMMANDS -# ------------------- -# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of -# variables for single and double quote escaping we saved from calls -# to _LT_DECL, we can put quote escaped variables declarations -# into `config.status', and then the shell code to quote escape them in -# for loops in `config.status'. Finally, any additional code accumulated -# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. -m4_defun([_LT_CONFIG_COMMANDS], -[AC_PROVIDE_IFELSE([LT_OUTPUT], - dnl If the libtool generation code has been placed in $CONFIG_LT, - dnl instead of duplicating it all over again into config.status, - dnl then we will have config.status run $CONFIG_LT later, so it - dnl needs to know what name is stored there: - [AC_CONFIG_COMMANDS([libtool], - [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], - dnl If the libtool generation code is destined for config.status, - dnl expand the accumulated commands and init code now: - [AC_CONFIG_COMMANDS([libtool], - [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) -])#_LT_CONFIG_COMMANDS - - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], -[ - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -_LT_CONFIG_STATUS_DECLARATIONS -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$[]1 -_LTECHO_EOF' -} - -# Quote evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_quote_varnames); do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_dquote_varnames); do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -_LT_OUTPUT_LIBTOOL_INIT -]) - -# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) -# ------------------------------------ -# Generate a child script FILE with all initialization necessary to -# reuse the environment learned by the parent script, and make the -# file executable. If COMMENT is supplied, it is inserted after the -# `#!' sequence but before initialization text begins. After this -# macro, additional text can be appended to FILE to form the body of -# the child script. The macro ends with non-zero status if the -# file could not be fully written (such as if the disk is full). -m4_ifdef([AS_INIT_GENERATED], -[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], -[m4_defun([_LT_GENERATED_FILE_INIT], -[m4_require([AS_PREPARE])]dnl -[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl -[lt_write_fail=0 -cat >$1 <<_ASEOF || lt_write_fail=1 -#! $SHELL -# Generated by $as_me. -$2 -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$1 <<\_ASEOF || lt_write_fail=1 -AS_SHELL_SANITIZE -_AS_PREPARE -exec AS_MESSAGE_FD>&1 -_ASEOF -test $lt_write_fail = 0 && chmod +x $1[]dnl -m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT - -# LT_OUTPUT -# --------- -# This macro allows early generation of the libtool script (before -# AC_OUTPUT is called), incase it is used in configure for compilation -# tests. -AC_DEFUN([LT_OUTPUT], -[: ${CONFIG_LT=./config.lt} -AC_MSG_NOTICE([creating $CONFIG_LT]) -_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], -[# Run this file to recreate a libtool stub with the current configuration.]) - -cat >>"$CONFIG_LT" <<\_LTEOF -lt_cl_silent=false -exec AS_MESSAGE_LOG_FD>>config.log -{ - echo - AS_BOX([Running $as_me.]) -} >&AS_MESSAGE_LOG_FD - -lt_cl_help="\ -\`$as_me' creates a local libtool stub from the current configuration, -for use in further configure time tests before the real libtool is -generated. - -Usage: $[0] [[OPTIONS]] - - -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - -Report bugs to ." - -lt_cl_version="\ -m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl -m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) -configured by $[0], generated by m4_PACKAGE_STRING. - -Copyright (C) 2010 Free Software Foundation, Inc. -This config.lt script is free software; the Free Software Foundation -gives unlimited permision to copy, distribute and modify it." - -while test $[#] != 0 -do - case $[1] in - --version | --v* | -V ) - echo "$lt_cl_version"; exit 0 ;; - --help | --h* | -h ) - echo "$lt_cl_help"; exit 0 ;; - --debug | --d* | -d ) - debug=: ;; - --quiet | --q* | --silent | --s* | -q ) - lt_cl_silent=: ;; - - -*) AC_MSG_ERROR([unrecognized option: $[1] -Try \`$[0] --help' for more information.]) ;; - - *) AC_MSG_ERROR([unrecognized argument: $[1] -Try \`$[0] --help' for more information.]) ;; - esac - shift -done - -if $lt_cl_silent; then - exec AS_MESSAGE_FD>/dev/null -fi -_LTEOF - -cat >>"$CONFIG_LT" <<_LTEOF -_LT_OUTPUT_LIBTOOL_COMMANDS_INIT -_LTEOF - -cat >>"$CONFIG_LT" <<\_LTEOF -AC_MSG_NOTICE([creating $ofile]) -_LT_OUTPUT_LIBTOOL_COMMANDS -AS_EXIT(0) -_LTEOF -chmod +x "$CONFIG_LT" - -# configure is writing to config.log, but config.lt does its own redirection, -# appending to config.log, which fails on DOS, as config.log is still kept -# open by configure. Here we exec the FD to /dev/null, effectively closing -# config.log, so it can be properly (re)opened and appended to by config.lt. -lt_cl_success=: -test "$silent" = yes && - lt_config_lt_args="$lt_config_lt_args --quiet" -exec AS_MESSAGE_LOG_FD>/dev/null -$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false -exec AS_MESSAGE_LOG_FD>>config.log -$lt_cl_success || AS_EXIT(1) -])# LT_OUTPUT - - -# _LT_CONFIG(TAG) -# --------------- -# If TAG is the built-in tag, create an initial libtool script with a -# default configuration from the untagged config vars. Otherwise add code -# to config.status for appending the configuration named by TAG from the -# matching tagged config vars. -m4_defun([_LT_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_CONFIG_SAVE_COMMANDS([ - m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl - m4_if(_LT_TAG, [C], [ - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -_LT_COPYING -_LT_LIBTOOL_TAGS - -# ### BEGIN LIBTOOL CONFIG -_LT_LIBTOOL_CONFIG_VARS -_LT_LIBTOOL_TAG_VARS -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - _LT_PROG_LTMAIN - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - _LT_PROG_REPLACE_SHELLFNS - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" -], -[cat <<_LT_EOF >> "$ofile" - -dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded -dnl in a comment (ie after a #). -# ### BEGIN LIBTOOL TAG CONFIG: $1 -_LT_LIBTOOL_TAG_VARS(_LT_TAG) -# ### END LIBTOOL TAG CONFIG: $1 -_LT_EOF -])dnl /m4_if -], -[m4_if([$1], [], [ - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile'], []) -])dnl /_LT_CONFIG_SAVE_COMMANDS -])# _LT_CONFIG - - -# LT_SUPPORTED_TAG(TAG) -# --------------------- -# Trace this macro to discover what tags are supported by the libtool -# --tag option, using: -# autoconf --trace 'LT_SUPPORTED_TAG:$1' -AC_DEFUN([LT_SUPPORTED_TAG], []) - - -# C support is built-in for now -m4_define([_LT_LANG_C_enabled], []) -m4_define([_LT_TAGS], []) - - -# LT_LANG(LANG) -# ------------- -# Enable libtool support for the given language if not already enabled. -AC_DEFUN([LT_LANG], -[AC_BEFORE([$0], [LT_OUTPUT])dnl -m4_case([$1], - [C], [_LT_LANG(C)], - [C++], [_LT_LANG(CXX)], - [Java], [_LT_LANG(GCJ)], - [Fortran 77], [_LT_LANG(F77)], - [Fortran], [_LT_LANG(FC)], - [Windows Resource], [_LT_LANG(RC)], - [m4_ifdef([_LT_LANG_]$1[_CONFIG], - [_LT_LANG($1)], - [m4_fatal([$0: unsupported language: "$1"])])])dnl -])# LT_LANG - - -# _LT_LANG(LANGNAME) -# ------------------ -m4_defun([_LT_LANG], -[m4_ifdef([_LT_LANG_]$1[_enabled], [], - [LT_SUPPORTED_TAG([$1])dnl - m4_append([_LT_TAGS], [$1 ])dnl - m4_define([_LT_LANG_]$1[_enabled], [])dnl - _LT_LANG_$1_CONFIG($1)])dnl -])# _LT_LANG - - -# _LT_LANG_DEFAULT_CONFIG -# ----------------------- -m4_defun([_LT_LANG_DEFAULT_CONFIG], -[AC_PROVIDE_IFELSE([AC_PROG_CXX], - [LT_LANG(CXX)], - [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) - -AC_PROVIDE_IFELSE([AC_PROG_F77], - [LT_LANG(F77)], - [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) - -AC_PROVIDE_IFELSE([AC_PROG_FC], - [LT_LANG(FC)], - [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) - -dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal -dnl pulling things in needlessly. -AC_PROVIDE_IFELSE([AC_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([LT_PROG_GCJ], - [LT_LANG(GCJ)], - [m4_ifdef([AC_PROG_GCJ], - [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([A][M_PROG_GCJ], - [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([LT_PROG_GCJ], - [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) - -AC_PROVIDE_IFELSE([LT_PROG_RC], - [LT_LANG(RC)], - [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) -])# _LT_LANG_DEFAULT_CONFIG - -# Obsolete macros: -AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) -AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) -AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) -AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) -AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_CXX], []) -dnl AC_DEFUN([AC_LIBTOOL_F77], []) -dnl AC_DEFUN([AC_LIBTOOL_FC], []) -dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) -dnl AC_DEFUN([AC_LIBTOOL_RC], []) - - -# _LT_TAG_COMPILER -# ---------------- -m4_defun([_LT_TAG_COMPILER], -[AC_REQUIRE([AC_PROG_CC])dnl - -_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl -_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl -_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl -_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC -])# _LT_TAG_COMPILER - - -# _LT_COMPILER_BOILERPLATE -# ------------------------ -# Check for compiler boilerplate output or warnings with -# the simple compiler test code. -m4_defun([_LT_COMPILER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* -])# _LT_COMPILER_BOILERPLATE - - -# _LT_LINKER_BOILERPLATE -# ---------------------- -# Check for linker boilerplate output or warnings with -# the simple link test code. -m4_defun([_LT_LINKER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* -])# _LT_LINKER_BOILERPLATE - -# _LT_REQUIRED_DARWIN_CHECKS -# ------------------------- -m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ - case $host_os in - rhapsody* | darwin*) - AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) - AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) - AC_CHECK_TOOL([LIPO], [lipo], [:]) - AC_CHECK_TOOL([OTOOL], [otool], [:]) - AC_CHECK_TOOL([OTOOL64], [otool64], [:]) - _LT_DECL([], [DSYMUTIL], [1], - [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) - _LT_DECL([], [NMEDIT], [1], - [Tool to change global to local symbols on Mac OS X]) - _LT_DECL([], [LIPO], [1], - [Tool to manipulate fat objects and archives on Mac OS X]) - _LT_DECL([], [OTOOL], [1], - [ldd/readelf like tool for Mach-O binaries on Mac OS X]) - _LT_DECL([], [OTOOL64], [1], - [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) - - AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], - [lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi]) - AC_CACHE_CHECK([for -exported_symbols_list linker flag], - [lt_cv_ld_exported_symbols_list], - [lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [lt_cv_ld_exported_symbols_list=yes], - [lt_cv_ld_exported_symbols_list=no]) - LDFLAGS="$save_LDFLAGS" - ]) - AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], - [lt_cv_ld_force_load=no - cat > conftest.c << _LT_EOF -int forced_loaded() { return 2;} -_LT_EOF - echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD - echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD - $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD - echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD - $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD - cat > conftest.c << _LT_EOF -int main() { return 0;} -_LT_EOF - echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err - _lt_result=$? - if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then - lt_cv_ld_force_load=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -f conftest.err libconftest.a conftest conftest.c - rm -rf conftest.dSYM - ]) - case $host_os in - rhapsody* | darwin1.[[012]]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[[012]]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac -]) - - -# _LT_DARWIN_LINKER_FEATURES -# -------------------------- -# Checks for linker and compiler features on darwin -m4_defun([_LT_DARWIN_LINKER_FEATURES], -[ - m4_require([_LT_REQUIRED_DARWIN_CHECKS]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_automatic, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='' - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=func_echo_all - _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - m4_if([$1], [CXX], -[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then - _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" - fi -],[]) - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi -]) - -# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) -# ---------------------------------- -# Links a minimal program and checks the executable -# for the system default hardcoded library path. In most cases, -# this is /usr/lib:/lib, but when the MPI compilers are used -# the location of the communication and MPI libs are included too. -# If we don't find anything, use the default library path according -# to the aix ld manual. -# Store the results from the different compilers for each TAGNAME. -# Allow to override them for all tags through lt_cv_aix_libpath. -m4_defun([_LT_SYS_MODULE_PATH_AIX], -[m4_require([_LT_DECL_SED])dnl -if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], - [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ - lt_aix_libpath_sed='[ - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }]' - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi],[]) - if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" - fi - ]) - aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) -fi -])# _LT_SYS_MODULE_PATH_AIX - - -# _LT_SHELL_INIT(ARG) -# ------------------- -m4_define([_LT_SHELL_INIT], -[m4_divert_text([M4SH-INIT], [$1 -])])# _LT_SHELL_INIT - - - -# _LT_PROG_ECHO_BACKSLASH -# ----------------------- -# Find how we can fake an echo command that does not interpret backslash. -# In particular, with Autoconf 2.60 or later we add some code to the start -# of the generated configure script which will find a shell with a builtin -# printf (which we can use as an echo command). -m4_defun([_LT_PROG_ECHO_BACKSLASH], -[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - -AC_MSG_CHECKING([how to print strings]) -# Test print first, because it will be a builtin if present. -if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' -else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$[]1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' -fi - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "$*" -} - -case "$ECHO" in - printf*) AC_MSG_RESULT([printf]) ;; - print*) AC_MSG_RESULT([print -r]) ;; - *) AC_MSG_RESULT([cat]) ;; -esac - -m4_ifdef([_AS_DETECT_SUGGESTED], -[_AS_DETECT_SUGGESTED([ - test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( - ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO - ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - PATH=/empty FPATH=/empty; export PATH FPATH - test "X`printf %s $ECHO`" = "X$ECHO" \ - || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) - -_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) -_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) -])# _LT_PROG_ECHO_BACKSLASH - - -# _LT_WITH_SYSROOT -# ---------------- -AC_DEFUN([_LT_WITH_SYSROOT], -[AC_MSG_CHECKING([for sysroot]) -AC_ARG_WITH([sysroot], -[ --with-sysroot[=DIR] Search for dependent libraries within DIR - (or the compiler's sysroot if not specified).], -[], [with_sysroot=no]) - -dnl lt_sysroot will always be passed unquoted. We quote it here -dnl in case the user passed a directory name. -lt_sysroot= -case ${with_sysroot} in #( - yes) - if test "$GCC" = yes; then - lt_sysroot=`$CC --print-sysroot 2>/dev/null` - fi - ;; #( - /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` - ;; #( - no|'') - ;; #( - *) - AC_MSG_RESULT([${with_sysroot}]) - AC_MSG_ERROR([The sysroot must be an absolute path.]) - ;; -esac - - AC_MSG_RESULT([${lt_sysroot:-no}]) -_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl -[dependent libraries, and in which our libraries should be installed.])]) - -# _LT_ENABLE_LOCK -# --------------- -m4_defun([_LT_ENABLE_LOCK], -[AC_ARG_ENABLE([libtool-lock], - [AS_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_LANG_PUSH(C) - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) - AC_LANG_POP]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" -])# _LT_ENABLE_LOCK - - -# _LT_PROG_AR -# ----------- -m4_defun([_LT_PROG_AR], -[AC_CHECK_TOOLS(AR, [ar], false) -: ${AR=ar} -: ${AR_FLAGS=cru} -_LT_DECL([], [AR], [1], [The archiver]) -_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) - -AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], - [lt_cv_ar_at_file=no - AC_COMPILE_IFELSE([AC_LANG_PROGRAM], - [echo conftest.$ac_objext > conftest.lst - lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' - AC_TRY_EVAL([lt_ar_try]) - if test "$ac_status" -eq 0; then - # Ensure the archiver fails upon bogus file names. - rm -f conftest.$ac_objext libconftest.a - AC_TRY_EVAL([lt_ar_try]) - if test "$ac_status" -ne 0; then - lt_cv_ar_at_file=@ - fi - fi - rm -f conftest.* libconftest.a - ]) - ]) - -if test "x$lt_cv_ar_at_file" = xno; then - archiver_list_spec= -else - archiver_list_spec=$lt_cv_ar_at_file -fi -_LT_DECL([], [archiver_list_spec], [1], - [How to feed a file listing to the archiver]) -])# _LT_PROG_AR - - -# _LT_CMD_OLD_ARCHIVE -# ------------------- -m4_defun([_LT_CMD_OLD_ARCHIVE], -[_LT_PROG_AR - -AC_CHECK_TOOL(STRIP, strip, :) -test -z "$STRIP" && STRIP=: -_LT_DECL([], [STRIP], [1], [A symbol stripping program]) - -AC_CHECK_TOOL(RANLIB, ranlib, :) -test -z "$RANLIB" && RANLIB=: -_LT_DECL([], [RANLIB], [1], - [Commands used to install an old-style archive]) - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - -case $host_os in - darwin*) - lock_old_archive_extraction=yes ;; - *) - lock_old_archive_extraction=no ;; -esac -_LT_DECL([], [old_postinstall_cmds], [2]) -_LT_DECL([], [old_postuninstall_cmds], [2]) -_LT_TAGDECL([], [old_archive_cmds], [2], - [Commands used to build an old-style archive]) -_LT_DECL([], [lock_old_archive_extraction], [0], - [Whether to use a lock for old archive extraction]) -])# _LT_CMD_OLD_ARCHIVE - - -# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------------------- -# Check whether the given compiler option works -AC_DEFUN([_LT_COMPILER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$3" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - fi - $RM conftest* -]) - -if test x"[$]$2" = xyes; then - m4_if([$5], , :, [$5]) -else - m4_if([$6], , :, [$6]) -fi -])# _LT_COMPILER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) - - -# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------- -# Check whether the given linker option works -AC_DEFUN([_LT_LINKER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $3" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&AS_MESSAGE_LOG_FD - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - else - $2=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" -]) - -if test x"[$]$2" = xyes; then - m4_if([$4], , :, [$4]) -else - m4_if([$5], , :, [$5]) -fi -])# _LT_LINKER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) - - -# LT_CMD_MAX_LEN -#--------------- -AC_DEFUN([LT_CMD_MAX_LEN], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -# find the maximum length of command line arguments -AC_MSG_CHECKING([the maximum length of command line arguments]) -AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac -]) -if test -n $lt_cv_sys_max_cmd_len ; then - AC_MSG_RESULT($lt_cv_sys_max_cmd_len) -else - AC_MSG_RESULT(none) -fi -max_cmd_len=$lt_cv_sys_max_cmd_len -_LT_DECL([], [max_cmd_len], [0], - [What is the maximum length of a command?]) -])# LT_CMD_MAX_LEN - -# Old name: -AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) - - -# _LT_HEADER_DLFCN -# ---------------- -m4_defun([_LT_HEADER_DLFCN], -[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl -])# _LT_HEADER_DLFCN - - -# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, -# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) -# ---------------------------------------------------------------- -m4_defun([_LT_TRY_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "$cross_compiling" = yes; then : - [$4] -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -[#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisbility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -}] -_LT_EOF - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) $1 ;; - x$lt_dlneed_uscore) $2 ;; - x$lt_dlunknown|x*) $3 ;; - esac - else : - # compilation failed - $3 - fi -fi -rm -fr conftest* -])# _LT_TRY_DLOPEN_SELF - - -# LT_SYS_DLOPEN_SELF -# ------------------ -AC_DEFUN([LT_SYS_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ]) - ;; - - *) - AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen="shl_load"], - [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], - [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen="dlopen"], - [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], - [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], - [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) - ]) - ]) - ]) - ]) - ]) - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - AC_CACHE_CHECK([whether a program can dlopen itself], - lt_cv_dlopen_self, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, - lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) - ]) - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - AC_CACHE_CHECK([whether a statically linked program can dlopen itself], - lt_cv_dlopen_self_static, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, - lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) - ]) - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi -_LT_DECL([dlopen_support], [enable_dlopen], [0], - [Whether dlopen is supported]) -_LT_DECL([dlopen_self], [enable_dlopen_self], [0], - [Whether dlopen of programs is supported]) -_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], - [Whether dlopen of statically linked programs is supported]) -])# LT_SYS_DLOPEN_SELF - -# Old name: -AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) - - -# _LT_COMPILER_C_O([TAGNAME]) -# --------------------------- -# Check to see if options -c and -o are simultaneously supported by compiler. -# This macro does not hard code the compiler like AC_PROG_CC_C_O. -m4_defun([_LT_COMPILER_C_O], -[m4_require([_LT_DECL_SED])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - fi - fi - chmod u+w . 2>&AS_MESSAGE_LOG_FD - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* -]) -_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], - [Does compiler simultaneously support -c and -o options?]) -])# _LT_COMPILER_C_O - - -# _LT_COMPILER_FILE_LOCKS([TAGNAME]) -# ---------------------------------- -# Check to see if we can do hard links to lock some files if needed -m4_defun([_LT_COMPILER_FILE_LOCKS], -[m4_require([_LT_ENABLE_LOCK])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_COMPILER_C_O([$1]) - -hard_links="nottested" -if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - AC_MSG_CHECKING([if we can lock with hard links]) - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - AC_MSG_RESULT([$hard_links]) - if test "$hard_links" = no; then - AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) - need_locks=warn - fi -else - need_locks=no -fi -_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) -])# _LT_COMPILER_FILE_LOCKS - - -# _LT_CHECK_OBJDIR -# ---------------- -m4_defun([_LT_CHECK_OBJDIR], -[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], -[rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null]) -objdir=$lt_cv_objdir -_LT_DECL([], [objdir], [0], - [The name of the directory that contains temporary libtool files])dnl -m4_pattern_allow([LT_OBJDIR])dnl -AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", - [Define to the sub-directory in which libtool stores uninstalled libraries.]) -])# _LT_CHECK_OBJDIR - - -# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) -# -------------------------------------- -# Check hardcoding attributes. -m4_defun([_LT_LINKER_HARDCODE_LIBPATH], -[AC_MSG_CHECKING([how to hardcode library paths into programs]) -_LT_TAGVAR(hardcode_action, $1)= -if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || - test -n "$_LT_TAGVAR(runpath_var, $1)" || - test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && - test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then - # Linking always hardcodes the temporary library directory. - _LT_TAGVAR(hardcode_action, $1)=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - _LT_TAGVAR(hardcode_action, $1)=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - _LT_TAGVAR(hardcode_action, $1)=unsupported -fi -AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) - -if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || - test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi -_LT_TAGDECL([], [hardcode_action], [0], - [How to hardcode a shared library path into an executable]) -])# _LT_LINKER_HARDCODE_LIBPATH - - -# _LT_CMD_STRIPLIB -# ---------------- -m4_defun([_LT_CMD_STRIPLIB], -[m4_require([_LT_DECL_EGREP]) -striplib= -old_striplib= -AC_MSG_CHECKING([whether stripping libraries is possible]) -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - AC_MSG_RESULT([yes]) -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - ;; - *) - AC_MSG_RESULT([no]) - ;; - esac -fi -_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) -_LT_DECL([], [striplib], [1]) -])# _LT_CMD_STRIPLIB - - -# _LT_SYS_DYNAMIC_LINKER([TAG]) -# ----------------------------- -# PORTME Fill in your ld.so characteristics -m4_defun([_LT_SYS_DYNAMIC_LINKER], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_OBJDUMP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -AC_MSG_CHECKING([dynamic linker characteristics]) -m4_if([$1], - [], [ -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - case $host_os in - mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; - *) lt_sed_strip_eq="s,=/,/,g" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` - case $lt_search_path_spec in - *\;*) - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` - ;; - *) - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` - ;; - esac - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[[lt_foo]]++; } - if (lt_freq[[lt_foo]] == 1) { print lt_foo; } -}'` - # AWK program above erroneously prepends '/' to C:/dos/paths - # for these hosts. - case $host_os in - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; - esac - sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi]) -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[[4-9]]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[[01]] | aix4.[[01]].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[[45]]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; - - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' - - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec="$LIB" - if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - - *) - # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[[123]]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[[01]]* | freebsdelf3.[[01]]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ - freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -haiku*) - version_type=linux - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[[3-9]]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], - [lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ - LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], - [lt_cv_shlibpath_overrides_runpath=yes])]) - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - ]) - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[[89]] | openbsd2.[[89]].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -AC_MSG_RESULT([$dynamic_linker]) -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - -_LT_DECL([], [variables_saved_for_relink], [1], - [Variables whose values should be saved in libtool wrapper scripts and - restored at link time]) -_LT_DECL([], [need_lib_prefix], [0], - [Do we need the "lib" prefix for modules?]) -_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) -_LT_DECL([], [version_type], [0], [Library versioning type]) -_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) -_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) -_LT_DECL([], [shlibpath_overrides_runpath], [0], - [Is shlibpath searched before the hard-coded library search path?]) -_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) -_LT_DECL([], [library_names_spec], [1], - [[List of archive names. First name is the real one, the rest are links. - The last name is the one that the linker finds with -lNAME]]) -_LT_DECL([], [soname_spec], [1], - [[The coded name of the library, if different from the real name]]) -_LT_DECL([], [install_override_mode], [1], - [Permission mode override for installation of shared libraries]) -_LT_DECL([], [postinstall_cmds], [2], - [Command to use after installation of a shared archive]) -_LT_DECL([], [postuninstall_cmds], [2], - [Command to use after uninstallation of a shared archive]) -_LT_DECL([], [finish_cmds], [2], - [Commands used to finish a libtool library installation in a directory]) -_LT_DECL([], [finish_eval], [1], - [[As "finish_cmds", except a single script fragment to be evaled but - not shown]]) -_LT_DECL([], [hardcode_into_libs], [0], - [Whether we should hardcode library paths into libraries]) -_LT_DECL([], [sys_lib_search_path_spec], [2], - [Compile-time system search path for libraries]) -_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], - [Run-time system search path for libraries]) -])# _LT_SYS_DYNAMIC_LINKER - - -# _LT_PATH_TOOL_PREFIX(TOOL) -# -------------------------- -# find a file program which can recognize shared library -AC_DEFUN([_LT_PATH_TOOL_PREFIX], -[m4_require([_LT_DECL_EGREP])dnl -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, -[case $MAGIC_CMD in -[[\\/*] | ?:[\\/]*]) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="m4_if([$2], , $PATH, [$2])" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$1; then - lt_cv_path_MAGIC_CMD="$ac_dir/$1" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - AC_MSG_RESULT($MAGIC_CMD) -else - AC_MSG_RESULT(no) -fi -_LT_DECL([], [MAGIC_CMD], [0], - [Used to examine libraries when file_magic_cmd begins with "file"])dnl -])# _LT_PATH_TOOL_PREFIX - -# Old name: -AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) - - -# _LT_PATH_MAGIC -# -------------- -# find a file program which can recognize a shared library -m4_defun([_LT_PATH_MAGIC], -[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) - else - MAGIC_CMD=: - fi -fi -])# _LT_PATH_MAGIC - - -# LT_PATH_LD -# ---------- -# find the pathname to the GNU or non-GNU linker -AC_DEFUN([LT_PATH_LD], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_PROG_ECHO_BACKSLASH])dnl - -AC_ARG_WITH([gnu-ld], - [AS_HELP_STRING([--with-gnu-ld], - [assume the C compiler uses GNU ld @<:@default=no@:>@])], - [test "$withval" = no || with_gnu_ld=yes], - [with_gnu_ld=no])dnl - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by $CC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | ?:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(lt_cv_path_LD, -[if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[[3-9]]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac -]) - -file_magic_glob= -want_nocaseglob=no -if test "$build" = "$host"; then - case $host_os in - mingw* | pw32*) - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then - want_nocaseglob=yes - else - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` - fi - ;; - esac -fi - -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - -_LT_DECL([], [deplibs_check_method], [1], - [Method to check whether dependent libraries are shared objects]) -_LT_DECL([], [file_magic_cmd], [1], - [Command to use when deplibs_check_method = "file_magic"]) -_LT_DECL([], [file_magic_glob], [1], - [How to find potential files when deplibs_check_method = "file_magic"]) -_LT_DECL([], [want_nocaseglob], [1], - [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) -])# _LT_CHECK_MAGIC_METHOD - - -# LT_PATH_NM -# ---------- -# find the pathname to a BSD- or MS-compatible name lister -AC_DEFUN([LT_PATH_NM], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, -[if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi]) -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) - case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols" - ;; - *) - DUMPBIN=: - ;; - esac - fi - AC_SUBST([DUMPBIN]) - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm -AC_SUBST([NM]) -_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl - -AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], - [lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) - cat conftest.out >&AS_MESSAGE_LOG_FD - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest*]) -])# LT_PATH_NM - -# Old names: -AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) -AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_PROG_NM], []) -dnl AC_DEFUN([AC_PROG_NM], []) - -# _LT_CHECK_SHAREDLIB_FROM_LINKLIB -# -------------------------------- -# how to determine the name of the shared library -# associated with a specific link library. -# -- PORTME fill in with the dynamic library characteristics -m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], -[m4_require([_LT_DECL_EGREP]) -m4_require([_LT_DECL_OBJDUMP]) -m4_require([_LT_DECL_DLLTOOL]) -AC_CACHE_CHECK([how to associate runtime and link libraries], -lt_cv_sharedlib_from_linklib_cmd, -[lt_cv_sharedlib_from_linklib_cmd='unknown' - -case $host_os in -cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh - # decide which to use based on capabilities of $DLLTOOL - case `$DLLTOOL --help 2>&1` in - *--identify-strict*) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib - ;; - *) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback - ;; - esac - ;; -*) - # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd="$ECHO" - ;; -esac -]) -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO - -_LT_DECL([], [sharedlib_from_linklib_cmd], [1], - [Command to associate shared and link libraries]) -])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB - - -# _LT_PATH_MANIFEST_TOOL -# ---------------------- -# locate the manifest tool -m4_defun([_LT_PATH_MANIFEST_TOOL], -[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) -test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], - [lt_cv_path_mainfest_tool=no - echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD - $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out - cat conftest.err >&AS_MESSAGE_LOG_FD - if $GREP 'Manifest Tool' conftest.out > /dev/null; then - lt_cv_path_mainfest_tool=yes - fi - rm -f conftest*]) -if test "x$lt_cv_path_mainfest_tool" != xyes; then - MANIFEST_TOOL=: -fi -_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl -])# _LT_PATH_MANIFEST_TOOL - - -# LT_LIB_M -# -------- -# check for math library -AC_DEFUN([LT_LIB_M], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case $host in -*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) - # These system don't have libm, or don't need it - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") - AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, cos, LIBM="-lm") - ;; -esac -AC_SUBST([LIBM]) -])# LT_LIB_M - -# Old name: -AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_CHECK_LIBM], []) - - -# _LT_COMPILER_NO_RTTI([TAGNAME]) -# ------------------------------- -m4_defun([_LT_COMPILER_NO_RTTI], -[m4_require([_LT_TAG_COMPILER])dnl - -_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - -if test "$GCC" = yes; then - case $cc_basename in - nvcc*) - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; - *) - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; - esac - - _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], - lt_cv_prog_compiler_rtti_exceptions, - [-fno-rtti -fno-exceptions], [], - [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) -fi -_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], - [Compiler flag to turn off builtin functions]) -])# _LT_COMPILER_NO_RTTI - - -# _LT_CMD_GLOBAL_SYMBOLS -# ---------------------- -m4_defun([_LT_CMD_GLOBAL_SYMBOLS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([LT_PATH_NM])dnl -AC_REQUIRE([LT_PATH_LD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_TAG_COMPILER])dnl - -# Check for command to grab the raw symbol name followed by C symbol from nm. -AC_MSG_CHECKING([command to parse $NM output from $compiler object]) -AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], -[ -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[[BCDEGRST]]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[[BCDT]]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[[ABCDGISTW]]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[[ABCDEGRST]]' - fi - ;; -irix* | nonstopux*) - symcode='[[BCDEGRST]]' - ;; -osf*) - symcode='[[BCDEGQRST]]' - ;; -solaris*) - symcode='[[BDRT]]' - ;; -sco3.2v5*) - symcode='[[DT]]' - ;; -sysv4.2uw2*) - symcode='[[DT]]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[[ABDT]]' - ;; -sysv4) - symcode='[[DFNSTU]]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[[ABCDGIRSTW]]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK ['"\ -" {last_section=section; section=\$ 3};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx]" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if AC_TRY_EVAL(ac_compile); then - # Now try to grab the symbols. - nlist=conftest.nm - if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT@&t@_DLSYM_CONST -#elif defined(__osf__) -/* This system does not cope well with relocations in const data. */ -# define LT@&t@_DLSYM_CONST -#else -# define LT@&t@_DLSYM_CONST const -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -LT@&t@_DLSYM_CONST struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[[]] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_globsym_save_LIBS=$LIBS - lt_globsym_save_CFLAGS=$CFLAGS - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS=$lt_globsym_save_LIBS - CFLAGS=$lt_globsym_save_CFLAGS - else - echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD - fi - else - echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done -]) -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - AC_MSG_RESULT(failed) -else - AC_MSG_RESULT(ok) -fi - -# Response file support. -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - nm_file_list_spec='@' -elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then - nm_file_list_spec='@' -fi - -_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], - [Take the output of nm and produce a listing of raw symbols and C names]) -_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], - [Transform the output of nm in a proper C declaration]) -_LT_DECL([global_symbol_to_c_name_address], - [lt_cv_sys_global_symbol_to_c_name_address], [1], - [Transform the output of nm in a C name address pair]) -_LT_DECL([global_symbol_to_c_name_address_lib_prefix], - [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], - [Transform the output of nm in a C name address pair when lib prefix is needed]) -_LT_DECL([], [nm_file_list_spec], [1], - [Specify filename containing input files for $NM]) -]) # _LT_CMD_GLOBAL_SYMBOLS - - -# _LT_COMPILER_PIC([TAGNAME]) -# --------------------------- -m4_defun([_LT_COMPILER_PIC], -[m4_require([_LT_TAG_COMPILER])dnl -_LT_TAGVAR(lt_prog_compiler_wl, $1)= -_LT_TAGVAR(lt_prog_compiler_pic, $1)= -_LT_TAGVAR(lt_prog_compiler_static, $1)= - -m4_if([$1], [CXX], [ - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - _LT_TAGVAR(lt_prog_compiler_static, $1)= - ;; - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - case $host_os in - aix[[4-9]]*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - dgux*) - case $cc_basename in - ec++*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - fi - ;; - aCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - ecpc* ) - # old Intel C++ for x86_64 which still supported -KPIC. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - icpc* ) - # Intel C++, used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) - # IBM XL 8.0, 9.0 on PPC and BlueGene - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd*) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - cxx*) - # Digital/Compaq C++ - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - lcc*) - # Lucid - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -], -[ - if test "$GCC" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - _LT_TAGVAR(lt_prog_compiler_static, $1)= - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - - case $cc_basename in - nvcc*) # Cuda Compiler Driver 2.2 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xcompiler -fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - hpux9* | hpux10* | hpux11*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC (with -KPIC) is the default. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' - _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' - ;; - nagfor*) - # NAG Fortran compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - ccc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All Alpha code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xl* | bgxl* | bgf* | mpixl*) - # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ F* | *Sun*Fortran*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='' - ;; - *Sun\ C*) - # Sun C 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - esac - ;; - esac - ;; - - newsos6) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All OSF/1 code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - rdos*) - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - solaris*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - case $cc_basename in - f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; - *) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; - esac - ;; - - sunos4*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - unicos*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - - uts4*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -]) -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" - ;; -esac - -AC_CACHE_CHECK([for $compiler option to produce PIC], - [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], - [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) -_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then - _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], - [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], - [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], - [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in - "" | " "*) ;; - *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; - esac], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) -fi -_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], - [Additional compiler flags for building library objects]) - -_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], - [How to pass a linker flag through the compiler]) -# -# Check to make sure the static flag actually works. -# -wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" -_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], - _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), - $lt_tmp_static_flag, - [], - [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) -_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], - [Compiler flag to prevent dynamic linking]) -])# _LT_COMPILER_PIC - - -# _LT_LINKER_SHLIBS([TAGNAME]) -# ---------------------------- -# See if the linker supports building shared libraries. -m4_defun([_LT_LINKER_SHLIBS], -[AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -m4_require([_LT_PATH_MANIFEST_TOOL])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -m4_if([$1], [CXX], [ - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - case $host_os in - aix[[4-9]]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global defined - # symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" - ;; - cygwin* | mingw* | cegcc*) - case $cc_basename in - cl*) ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] - ;; - esac - ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac -], [ - runpath_var= - _LT_TAGVAR(allow_undefined_flag, $1)= - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(archive_cmds, $1)= - _LT_TAGVAR(archive_expsym_cmds, $1)= - _LT_TAGVAR(compiler_needs_object, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(hardcode_automatic, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= - _LT_TAGVAR(hardcode_libdir_separator, $1)= - _LT_TAGVAR(hardcode_minus_L, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_TAGVAR(inherit_rpath, $1)=no - _LT_TAGVAR(link_all_deplibs, $1)=unknown - _LT_TAGVAR(module_cmds, $1)= - _LT_TAGVAR(module_expsym_cmds, $1)= - _LT_TAGVAR(old_archive_from_new_cmds, $1)= - _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= - _LT_TAGVAR(thread_safe_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - _LT_TAGVAR(include_expsyms, $1)= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. -dnl Note also adjust exclude_expsyms for C++ above. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - _LT_TAGVAR(ld_shlibs, $1)=yes - - # On some targets, GNU ld is compatible enough with the native linker - # that we're better off using the native interface for both. - lt_use_gnu_ld_interface=no - if test "$with_gnu_ld" = yes; then - case $host_os in - aix*) - # The AIX port of GNU ld has always aspired to compatibility - # with the native linker. However, as the warning in the GNU ld - # block says, versions before 2.19.5* couldn't really create working - # shared libraries, regardless of the interface used. - case `$LD -v 2>&1` in - *\ \(GNU\ Binutils\)\ 2.19.5*) ;; - *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; - *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - fi - - if test "$lt_use_gnu_ld_interface" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[[3-9]]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.19, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to install binutils -*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. -*** You will then need to restart the configuration process. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - haiku*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag=' $pic_flag' - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group f77 and f90 compilers - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - _LT_TAGVAR(whole_archive_flag_spec, $1)= - tmp_sharedflag='--shared' ;; - xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - nvcc*) # Cuda Compiler Driver 2.2 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf* | bgf* | bgxlf* | mpixlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' - _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - sunos4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - - if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then - runpath_var= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - _LT_TAGVAR(hardcode_direct, $1)=unsupported - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global - # defined symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - bsdi[[45]]*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - case $cc_basename in - cl*) - # Native MSVC - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' - # Don't use ranlib - _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' - _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # Assume MSVC wrapper - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - # FIXME: Should let the user specify the lib program. - _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - esac - ;; - - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - freebsd1*) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - hpux9*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - m4_if($1, [], [ - # Older versions of the 11.00 compiler do not understand -b yet - # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - _LT_LINKER_OPTION([if $CC understands -b], - _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], - [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], - [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], - [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) - ;; - esac - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - # This should be the same for all languages, so no per-tag cache variable. - AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], - [lt_cv_irix_exported_symbol], - [save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - AC_LINK_IFELSE( - [AC_LANG_SOURCE( - [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], - [C++], [[int foo (void) { return 0; }]], - [Fortran 77], [[ - subroutine foo - end]], - [Fortran], [[ - subroutine foo - end]])])], - [lt_cv_irix_exported_symbol=yes], - [lt_cv_irix_exported_symbol=no]) - LDFLAGS="$save_LDFLAGS"]) - if test "$lt_cv_irix_exported_symbol" = yes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - fi - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - newsos6) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - else - case $host_os in - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - ;; - esac - fi - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - os2*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - solaris*) - _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - fi - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4) - case $host_vendor in - sni) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' - _LT_TAGVAR(hardcode_direct, $1)=no - ;; - motorola) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4.3*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - _LT_TAGVAR(ld_shlibs, $1)=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' - ;; - esac - fi - fi -]) -AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) -test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld - -_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl -_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl -_LT_DECL([], [extract_expsyms_cmds], [2], - [The commands to extract the exported symbol list from a shared archive]) - -# -# Do we need to explicitly link libc? -# -case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in -x|xyes) - # Assume -lc should be added - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $_LT_TAGVAR(archive_cmds, $1) in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - AC_CACHE_CHECK([whether -lc should be explicitly linked in], - [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), - [$RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if AC_TRY_EVAL(ac_compile) 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) - pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) - _LT_TAGVAR(allow_undefined_flag, $1)= - if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) - then - lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no - else - lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes - fi - _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - ]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) - ;; - esac - fi - ;; -esac - -_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], - [Whether or not to add -lc for building shared libraries]) -_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], - [enable_shared_with_static_runtimes], [0], - [Whether or not to disallow shared libs when runtime libs are static]) -_LT_TAGDECL([], [export_dynamic_flag_spec], [1], - [Compiler flag to allow reflexive dlopens]) -_LT_TAGDECL([], [whole_archive_flag_spec], [1], - [Compiler flag to generate shared objects directly from archives]) -_LT_TAGDECL([], [compiler_needs_object], [1], - [Whether the compiler copes with passing no objects directly]) -_LT_TAGDECL([], [old_archive_from_new_cmds], [2], - [Create an old-style archive from a shared archive]) -_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], - [Create a temporary old-style archive to link instead of a shared archive]) -_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) -_LT_TAGDECL([], [archive_expsym_cmds], [2]) -_LT_TAGDECL([], [module_cmds], [2], - [Commands used to build a loadable module if different from building - a shared archive.]) -_LT_TAGDECL([], [module_expsym_cmds], [2]) -_LT_TAGDECL([], [with_gnu_ld], [1], - [Whether we are building with GNU ld or not]) -_LT_TAGDECL([], [allow_undefined_flag], [1], - [Flag that allows shared libraries with undefined symbols to be built]) -_LT_TAGDECL([], [no_undefined_flag], [1], - [Flag that enforces no undefined symbols]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], - [Flag to hardcode $libdir into a binary during linking. - This must work even if $libdir does not exist]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], - [[If ld is used when linking, flag to hardcode $libdir into a binary - during linking. This must work even if $libdir does not exist]]) -_LT_TAGDECL([], [hardcode_libdir_separator], [1], - [Whether we need a single "-rpath" flag with a separated argument]) -_LT_TAGDECL([], [hardcode_direct], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary]) -_LT_TAGDECL([], [hardcode_direct_absolute], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary and the resulting library dependency is - "absolute", i.e impossible to change by setting ${shlibpath_var} if the - library is relocated]) -_LT_TAGDECL([], [hardcode_minus_L], [0], - [Set to "yes" if using the -LDIR flag during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_shlibpath_var], [0], - [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_automatic], [0], - [Set to "yes" if building a shared library automatically hardcodes DIR - into the library and all subsequent libraries and executables linked - against it]) -_LT_TAGDECL([], [inherit_rpath], [0], - [Set to yes if linker adds runtime paths of dependent libraries - to runtime path list]) -_LT_TAGDECL([], [link_all_deplibs], [0], - [Whether libtool must link a program against all its dependency libraries]) -_LT_TAGDECL([], [always_export_symbols], [0], - [Set to "yes" if exported symbols are required]) -_LT_TAGDECL([], [export_symbols_cmds], [2], - [The commands to list exported symbols]) -_LT_TAGDECL([], [exclude_expsyms], [1], - [Symbols that should not be listed in the preloaded symbols]) -_LT_TAGDECL([], [include_expsyms], [1], - [Symbols that must always be exported]) -_LT_TAGDECL([], [prelink_cmds], [2], - [Commands necessary for linking programs (against libraries) with templates]) -_LT_TAGDECL([], [postlink_cmds], [2], - [Commands necessary for finishing linking programs]) -_LT_TAGDECL([], [file_list_spec], [1], - [Specify filename containing input files]) -dnl FIXME: Not yet implemented -dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], -dnl [Compiler flag to generate thread safe objects]) -])# _LT_LINKER_SHLIBS - - -# _LT_LANG_C_CONFIG([TAG]) -# ------------------------ -# Ensure that the configuration variables for a C compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_C_CONFIG], -[m4_require([_LT_DECL_EGREP])dnl -lt_save_CC="$CC" -AC_LANG_PUSH(C) - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - -_LT_TAG_COMPILER -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - LT_SYS_DLOPEN_SELF - _LT_CMD_STRIPLIB - - # Report which library types will actually be built - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_CONFIG($1) -fi -AC_LANG_POP -CC="$lt_save_CC" -])# _LT_LANG_C_CONFIG - - -# _LT_LANG_CXX_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a C++ compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_CXX_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_PATH_MANIFEST_TOOL])dnl -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_PROG_CXXCPP -else - _lt_caught_CXX_error=yes -fi - -AC_LANG_PUSH(C++) -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(compiler_needs_object, $1)=no -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_caught_CXX_error" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" - - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_CFLAGS=$CFLAGS - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - CFLAGS=$CXXFLAGS - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - else - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - fi - - if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - LT_PATH_LD - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - GXX=no - with_gnu_ld=no - wlarc= - fi - - # PORTME: fill in a description of your system's C++ link characteristics - AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) - _LT_TAGVAR(ld_shlibs, $1)=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GXX" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty - # executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared - # libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - cygwin* | mingw* | pw32* | cegcc*) - case $GXX,$cc_basename in - ,cl* | no,cl*) - # Native MSVC - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - # Don't use ranlib - _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' - _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - func_to_tool_file "$lt_outputfile"~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # g++ - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - freebsd[[12]]*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - freebsd-elf*) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - ;; - - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - gnu*) - ;; - - haiku*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - hpux9*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' - fi - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - esac - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) - _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' - _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ - $RANLIB $oldlib' - _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - *) # Version 6 and above use weak symbols - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' - ;; - xl* | mpixl* | bgxl*) - # IBM XL 8.0 on PPC, with GNU ld - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - - lynxos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - m88k*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - - *nto* | *qnx*) - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - openbsd2*) - # C++ shared libraries are fairly broken - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd=func_echo_all - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - case $host in - osf3*) - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - ;; - *) - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ - $RM $lib.exp' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - case $host in - osf3*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - psos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(archive_cmds_need_lc,$1)=yes - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - fi - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ - '"$_LT_TAGVAR(old_archive_cmds, $1)" - _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ - '"$_LT_TAGVAR(reload_cmds, $1)" - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - vxworks*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) - test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - - _LT_TAGVAR(GCC, $1)="$GXX" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test "$_lt_caught_CXX_error" != yes - -AC_LANG_POP -])# _LT_LANG_CXX_CONFIG - - -# _LT_FUNC_STRIPNAME_CNF -# ---------------------- -# func_stripname_cnf prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# -# This function is identical to the (non-XSI) version of func_stripname, -# except this one can be used by m4 code that may be executed by configure, -# rather than the libtool script. -m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl -AC_REQUIRE([_LT_DECL_SED]) -AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) -func_stripname_cnf () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} # func_stripname_cnf -])# _LT_FUNC_STRIPNAME_CNF - -# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) -# --------------------------------- -# Figure out "hidden" library dependencies from verbose -# compiler output when linking a shared library. -# Parse the compiler output and extract the necessary -# objects, libraries and library flags. -m4_defun([_LT_SYS_HIDDEN_LIBDEPS], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl -# Dependencies to place before and after the object being linked: -_LT_TAGVAR(predep_objects, $1)= -_LT_TAGVAR(postdep_objects, $1)= -_LT_TAGVAR(predeps, $1)= -_LT_TAGVAR(postdeps, $1)= -_LT_TAGVAR(compiler_lib_search_path, $1)= - -dnl we can't use the lt_simple_compile_test_code here, -dnl because it contains code intended for an executable, -dnl not a library. It's possible we should let each -dnl tag define a new lt_????_link_test_code variable, -dnl but it's only used here... -m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF -int a; -void foo (void) { a = 0; } -_LT_EOF -], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF -], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer*4 a - a=0 - return - end -_LT_EOF -], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer a - a=0 - return - end -_LT_EOF -], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF -public class foo { - private int a; - public void bar (void) { - a = 0; - } -}; -_LT_EOF -]) - -_lt_libdeps_save_CFLAGS=$CFLAGS -case "$CC $CFLAGS " in #( -*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; -*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; -esac - -dnl Parse the compiler output and extract the necessary -dnl objects, libraries and library flags. -if AC_TRY_EVAL(ac_compile); then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - for p in `eval "$output_verbose_link_cmd"`; do - case ${prev}${p} in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" || - test $p = "-R"; then - prev=$p - continue - fi - - # Expand the sysroot to ease extracting the directories later. - if test -z "$prev"; then - case $p in - -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; - -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; - -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; - esac - fi - case $p in - =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; - esac - if test "$pre_test_object_deps_done" = no; then - case ${prev} in - -L | -R) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then - _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" - else - _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$_LT_TAGVAR(postdeps, $1)"; then - _LT_TAGVAR(postdeps, $1)="${prev}${p}" - else - _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" - fi - fi - prev= - ;; - - *.lto.$objext) ;; # Ignore GCC LTO objects - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$_LT_TAGVAR(predep_objects, $1)"; then - _LT_TAGVAR(predep_objects, $1)="$p" - else - _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" - fi - else - if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then - _LT_TAGVAR(postdep_objects, $1)="$p" - else - _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling $1 test program" -fi - -$RM -f confest.$objext -CFLAGS=$_lt_libdeps_save_CFLAGS - -# PORTME: override above test on systems where it is broken -m4_if([$1], [CXX], -[case $host_os in -interix[[3-9]]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - _LT_TAGVAR(predep_objects,$1)= - _LT_TAGVAR(postdep_objects,$1)= - _LT_TAGVAR(postdeps,$1)= - ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC* | sunCC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac -]) - -case " $_LT_TAGVAR(postdeps, $1) " in -*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; -esac - _LT_TAGVAR(compiler_lib_search_dirs, $1)= -if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then - _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` -fi -_LT_TAGDECL([], [compiler_lib_search_dirs], [1], - [The directories searched by this compiler when creating a shared library]) -_LT_TAGDECL([], [predep_objects], [1], - [Dependencies to place before and after the objects being linked to - create a shared library]) -_LT_TAGDECL([], [postdep_objects], [1]) -_LT_TAGDECL([], [predeps], [1]) -_LT_TAGDECL([], [postdeps], [1]) -_LT_TAGDECL([], [compiler_lib_search_path], [1], - [The library search path used internally by the compiler when linking - a shared library]) -])# _LT_SYS_HIDDEN_LIBDEPS - - -# _LT_LANG_F77_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a Fortran 77 compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_F77_CONFIG], -[AC_LANG_PUSH(Fortran 77) -if test -z "$F77" || test "X$F77" = "Xno"; then - _lt_disable_F77=yes -fi - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the F77 compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_F77" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - lt_save_CFLAGS=$CFLAGS - CC=${F77-"f77"} - CFLAGS=$FFLAGS - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - GCC=$G77 - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$G77" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC="$lt_save_CC" - CFLAGS="$lt_save_CFLAGS" -fi # test "$_lt_disable_F77" != yes - -AC_LANG_POP -])# _LT_LANG_F77_CONFIG - - -# _LT_LANG_FC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for a Fortran compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_FC_CONFIG], -[AC_LANG_PUSH(Fortran) - -if test -z "$FC" || test "X$FC" = "Xno"; then - _lt_disable_FC=yes -fi - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for fc test sources. -ac_ext=${ac_fc_srcext-f} - -# Object file extension for compiled fc test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the FC compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_FC" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - lt_save_CFLAGS=$CFLAGS - CC=${FC-"f95"} - CFLAGS=$FCFLAGS - compiler=$CC - GCC=$ac_cv_fc_compiler_gnu - - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS -fi # test "$_lt_disable_FC" != yes - -AC_LANG_POP -])# _LT_LANG_FC_CONFIG - - -# _LT_LANG_GCJ_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for the GNU Java Compiler compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_GCJ_CONFIG], -[AC_REQUIRE([LT_PROG_GCJ])dnl -AC_LANG_SAVE - -# Source file extension for Java test sources. -ac_ext=java - -# Object file extension for compiled Java test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}" - -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC=yes -CC=${GCJ-"gcj"} -CFLAGS=$GCJFLAGS -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" -_LT_CC_BASENAME([$compiler]) - -# GCJ did not exist at the time GCC didn't implicitly link libc in. -_LT_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) -fi - -AC_LANG_RESTORE - -GCC=$lt_save_GCC -CC=$lt_save_CC -CFLAGS=$lt_save_CFLAGS -])# _LT_LANG_GCJ_CONFIG - - -# _LT_LANG_RC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for the Windows resource compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_RC_CONFIG], -[AC_REQUIRE([LT_PROG_RC])dnl -AC_LANG_SAVE - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -lt_save_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC= -CC=${RC-"windres"} -CFLAGS= -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) -_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - -if test -n "$compiler"; then - : - _LT_CONFIG($1) -fi - -GCC=$lt_save_GCC -AC_LANG_RESTORE -CC=$lt_save_CC -CFLAGS=$lt_save_CFLAGS -])# _LT_LANG_RC_CONFIG - - -# LT_PROG_GCJ -# ----------- -AC_DEFUN([LT_PROG_GCJ], -[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], - [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], - [AC_CHECK_TOOL(GCJ, gcj,) - test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" - AC_SUBST(GCJFLAGS)])])[]dnl -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_GCJ], []) - - -# LT_PROG_RC -# ---------- -AC_DEFUN([LT_PROG_RC], -[AC_CHECK_TOOL(RC, windres,) -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_RC], []) - - -# _LT_DECL_EGREP -# -------------- -# If we don't have a new enough Autoconf to choose the best grep -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_EGREP], -[AC_REQUIRE([AC_PROG_EGREP])dnl -AC_REQUIRE([AC_PROG_FGREP])dnl -test -z "$GREP" && GREP=grep -_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) -_LT_DECL([], [EGREP], [1], [An ERE matcher]) -_LT_DECL([], [FGREP], [1], [A literal string matcher]) -dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too -AC_SUBST([GREP]) -]) - - -# _LT_DECL_OBJDUMP -# -------------- -# If we don't have a new enough Autoconf to choose the best objdump -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_OBJDUMP], -[AC_CHECK_TOOL(OBJDUMP, objdump, false) -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) -AC_SUBST([OBJDUMP]) -]) - -# _LT_DECL_DLLTOOL -# ---------------- -# Ensure DLLTOOL variable is set. -m4_defun([_LT_DECL_DLLTOOL], -[AC_CHECK_TOOL(DLLTOOL, dlltool, false) -test -z "$DLLTOOL" && DLLTOOL=dlltool -_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) -AC_SUBST([DLLTOOL]) -]) - -# _LT_DECL_SED -# ------------ -# Check for a fully-functional sed program, that truncates -# as few characters as possible. Prefer GNU sed if found. -m4_defun([_LT_DECL_SED], -[AC_PROG_SED -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" -_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) -_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], - [Sed that helps us avoid accidentally triggering echo(1) options like -n]) -])# _LT_DECL_SED - -m4_ifndef([AC_PROG_SED], [ -############################################################ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_SED. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -############################################################ - -m4_defun([AC_PROG_SED], -[AC_MSG_CHECKING([for a sed that does not truncate output]) -AC_CACHE_VAL(lt_cv_path_SED, -[# Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done -]) -SED=$lt_cv_path_SED -AC_SUBST([SED]) -AC_MSG_RESULT([$SED]) -])#AC_PROG_SED -])#m4_ifndef - -# Old name: -AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_SED], []) - - -# _LT_CHECK_SHELL_FEATURES -# ------------------------ -# Find out whether the shell is Bourne or XSI compatible, -# or has some other useful features. -m4_defun([_LT_CHECK_SHELL_FEATURES], -[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,b/c, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -AC_MSG_RESULT([$xsi_shell]) -_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) - -AC_MSG_CHECKING([whether the shell understands "+="]) -lt_shell_append=no -( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -AC_MSG_RESULT([$lt_shell_append]) -_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi -_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac -_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl -_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl -])# _LT_CHECK_SHELL_FEATURES - - -# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) -# ------------------------------------------------------ -# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and -# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. -m4_defun([_LT_PROG_FUNCTION_REPLACE], -[dnl { -sed -e '/^$1 ()$/,/^} # $1 /c\ -$1 ()\ -{\ -m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) -} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: -]) - - -# _LT_PROG_REPLACE_SHELLFNS -# ------------------------- -# Replace existing portable implementations of several shell functions with -# equivalent extended shell implementations where those features are available.. -m4_defun([_LT_PROG_REPLACE_SHELLFNS], -[if test x"$xsi_shell" = xyes; then - _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac]) - - _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl - func_basename_result="${1##*/}"]) - - _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}"]) - - _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"}]) - - _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl - func_split_long_opt_name=${1%%=*} - func_split_long_opt_arg=${1#*=}]) - - _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl - func_split_short_opt_arg=${1#??} - func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) - - _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac]) - - _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) - - _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) - - _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) -fi - -if test x"$lt_shell_append" = xyes; then - _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) - - _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl - func_quote_for_eval "${2}" -dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ - eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) - - # Save a `func_append' function call where possible by direct use of '+=' - sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -else - # Save a `func_append' function call even when '+=' is not available - sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -fi - -if test x"$_lt_function_replace_fail" = x":"; then - AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) -fi -]) - -# _LT_PATH_CONVERSION_FUNCTIONS -# ----------------------------- -# Determine which file name conversion functions should be used by -# func_to_host_file (and, implicitly, by func_to_host_path). These are needed -# for certain cross-compile configurations and native mingw. -m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_MSG_CHECKING([how to convert $build file names to $host format]) -AC_CACHE_VAL(lt_cv_to_host_file_cmd, -[case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 - ;; - esac - ;; - *-*-cygwin* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin - ;; - esac - ;; - * ) # unhandled hosts (and "normal" native builds) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; -esac -]) -to_host_file_cmd=$lt_cv_to_host_file_cmd -AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) -_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], - [0], [convert $build file names to $host format])dnl - -AC_MSG_CHECKING([how to convert $build file names to toolchain format]) -AC_CACHE_VAL(lt_cv_to_tool_file_cmd, -[#assume ordinary cross tools, or native build. -lt_cv_to_tool_file_cmd=func_convert_file_noop -case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 - ;; - esac - ;; -esac -]) -to_tool_file_cmd=$lt_cv_to_tool_file_cmd -AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) -_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], - [0], [convert $build files to toolchain format])dnl -])# _LT_PATH_CONVERSION_FUNCTIONS diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ltoptions.m4 b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ltoptions.m4 deleted file mode 100644 index 17cfd51..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ltoptions.m4 +++ /dev/null @@ -1,369 +0,0 @@ -# Helper functions for option handling. -*- Autoconf -*- -# -# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# Written by Gary V. Vaughan, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 7 ltoptions.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) - - -# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) -# ------------------------------------------ -m4_define([_LT_MANGLE_OPTION], -[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) - - -# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) -# --------------------------------------- -# Set option OPTION-NAME for macro MACRO-NAME, and if there is a -# matching handler defined, dispatch to it. Other OPTION-NAMEs are -# saved as a flag. -m4_define([_LT_SET_OPTION], -[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl -m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), - _LT_MANGLE_DEFUN([$1], [$2]), - [m4_warning([Unknown $1 option `$2'])])[]dnl -]) - - -# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) -# ------------------------------------------------------------ -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -m4_define([_LT_IF_OPTION], -[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) - - -# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) -# ------------------------------------------------------- -# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME -# are set. -m4_define([_LT_UNLESS_OPTIONS], -[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), - [m4_define([$0_found])])])[]dnl -m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 -])[]dnl -]) - - -# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) -# ---------------------------------------- -# OPTION-LIST is a space-separated list of Libtool options associated -# with MACRO-NAME. If any OPTION has a matching handler declared with -# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about -# the unknown option and exit. -m4_defun([_LT_SET_OPTIONS], -[# Set options -m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [_LT_SET_OPTION([$1], _LT_Option)]) - -m4_if([$1],[LT_INIT],[ - dnl - dnl Simply set some default values (i.e off) if boolean options were not - dnl specified: - _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no - ]) - _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no - ]) - dnl - dnl If no reference was made to various pairs of opposing options, then - dnl we run the default mode handler for the pair. For example, if neither - dnl `shared' nor `disable-shared' was passed, we enable building of shared - dnl archives by default: - _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) - _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], - [_LT_ENABLE_FAST_INSTALL]) - ]) -])# _LT_SET_OPTIONS - - -## --------------------------------- ## -## Macros to handle LT_INIT options. ## -## --------------------------------- ## - -# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) -# ----------------------------------------- -m4_define([_LT_MANGLE_DEFUN], -[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) - - -# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) -# ----------------------------------------------- -m4_define([LT_OPTION_DEFINE], -[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl -])# LT_OPTION_DEFINE - - -# dlopen -# ------ -LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes -]) - -AU_DEFUN([AC_LIBTOOL_DLOPEN], -[_LT_SET_OPTION([LT_INIT], [dlopen]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `dlopen' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) - - -# win32-dll -# --------- -# Declare package support for building win32 dll's. -LT_OPTION_DEFINE([LT_INIT], [win32-dll], -[enable_win32_dll=yes - -case $host in -*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) - AC_CHECK_TOOL(AS, as, false) - AC_CHECK_TOOL(DLLTOOL, dlltool, false) - AC_CHECK_TOOL(OBJDUMP, objdump, false) - ;; -esac - -test -z "$AS" && AS=as -_LT_DECL([], [AS], [1], [Assembler program])dnl - -test -z "$DLLTOOL" && DLLTOOL=dlltool -_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl - -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl -])# win32-dll - -AU_DEFUN([AC_LIBTOOL_WIN32_DLL], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -_LT_SET_OPTION([LT_INIT], [win32-dll]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `win32-dll' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) - - -# _LT_ENABLE_SHARED([DEFAULT]) -# ---------------------------- -# implement the --enable-shared flag, and supports the `shared' and -# `disable-shared' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_SHARED], -[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([shared], - [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], - [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) - - _LT_DECL([build_libtool_libs], [enable_shared], [0], - [Whether or not to build shared libraries]) -])# _LT_ENABLE_SHARED - -LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) -]) - -AC_DEFUN([AC_DISABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], [disable-shared]) -]) - -AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) -AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_SHARED], []) -dnl AC_DEFUN([AM_DISABLE_SHARED], []) - - - -# _LT_ENABLE_STATIC([DEFAULT]) -# ---------------------------- -# implement the --enable-static flag, and support the `static' and -# `disable-static' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_STATIC], -[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([static], - [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], - [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_static=]_LT_ENABLE_STATIC_DEFAULT) - - _LT_DECL([build_old_libs], [enable_static], [0], - [Whether or not to build static libraries]) -])# _LT_ENABLE_STATIC - -LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) -]) - -AC_DEFUN([AC_DISABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], [disable-static]) -]) - -AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) -AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_STATIC], []) -dnl AC_DEFUN([AM_DISABLE_STATIC], []) - - - -# _LT_ENABLE_FAST_INSTALL([DEFAULT]) -# ---------------------------------- -# implement the --enable-fast-install flag, and support the `fast-install' -# and `disable-fast-install' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_FAST_INSTALL], -[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([fast-install], - [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], - [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) - -_LT_DECL([fast_install], [enable_fast_install], [0], - [Whether or not to optimize for fast installation])dnl -])# _LT_ENABLE_FAST_INSTALL - -LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) - -# Old names: -AU_DEFUN([AC_ENABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `fast-install' option into LT_INIT's first parameter.]) -]) - -AU_DEFUN([AC_DISABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `disable-fast-install' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) -dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) - - -# _LT_WITH_PIC([MODE]) -# -------------------- -# implement the --with-pic flag, and support the `pic-only' and `no-pic' -# LT_INIT options. -# MODE is either `yes' or `no'. If omitted, it defaults to `both'. -m4_define([_LT_WITH_PIC], -[AC_ARG_WITH([pic], - [AS_HELP_STRING([--with-pic], - [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], - [pic_mode="$withval"], - [pic_mode=default]) - -test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) - -_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl -])# _LT_WITH_PIC - -LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) - -# Old name: -AU_DEFUN([AC_LIBTOOL_PICMODE], -[_LT_SET_OPTION([LT_INIT], [pic-only]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `pic-only' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) - -## ----------------- ## -## LTDL_INIT Options ## -## ----------------- ## - -m4_define([_LTDL_MODE], []) -LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], - [m4_define([_LTDL_MODE], [nonrecursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [recursive], - [m4_define([_LTDL_MODE], [recursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [subproject], - [m4_define([_LTDL_MODE], [subproject])]) - -m4_define([_LTDL_TYPE], []) -LT_OPTION_DEFINE([LTDL_INIT], [installable], - [m4_define([_LTDL_TYPE], [installable])]) -LT_OPTION_DEFINE([LTDL_INIT], [convenience], - [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ltsugar.m4 b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ltsugar.m4 deleted file mode 100644 index 9000a05..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ltsugar.m4 +++ /dev/null @@ -1,123 +0,0 @@ -# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- -# -# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. -# Written by Gary V. Vaughan, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 6 ltsugar.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) - - -# lt_join(SEP, ARG1, [ARG2...]) -# ----------------------------- -# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their -# associated separator. -# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier -# versions in m4sugar had bugs. -m4_define([lt_join], -[m4_if([$#], [1], [], - [$#], [2], [[$2]], - [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) -m4_define([_lt_join], -[m4_if([$#$2], [2], [], - [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) - - -# lt_car(LIST) -# lt_cdr(LIST) -# ------------ -# Manipulate m4 lists. -# These macros are necessary as long as will still need to support -# Autoconf-2.59 which quotes differently. -m4_define([lt_car], [[$1]]) -m4_define([lt_cdr], -[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], - [$#], 1, [], - [m4_dquote(m4_shift($@))])]) -m4_define([lt_unquote], $1) - - -# lt_append(MACRO-NAME, STRING, [SEPARATOR]) -# ------------------------------------------ -# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. -# Note that neither SEPARATOR nor STRING are expanded; they are appended -# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). -# No SEPARATOR is output if MACRO-NAME was previously undefined (different -# than defined and empty). -# -# This macro is needed until we can rely on Autoconf 2.62, since earlier -# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. -m4_define([lt_append], -[m4_define([$1], - m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) - - - -# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) -# ---------------------------------------------------------- -# Produce a SEP delimited list of all paired combinations of elements of -# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list -# has the form PREFIXmINFIXSUFFIXn. -# Needed until we can rely on m4_combine added in Autoconf 2.62. -m4_define([lt_combine], -[m4_if(m4_eval([$# > 3]), [1], - [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl -[[m4_foreach([_Lt_prefix], [$2], - [m4_foreach([_Lt_suffix], - ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, - [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) - - -# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) -# ----------------------------------------------------------------------- -# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited -# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. -m4_define([lt_if_append_uniq], -[m4_ifdef([$1], - [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], - [lt_append([$1], [$2], [$3])$4], - [$5])], - [lt_append([$1], [$2], [$3])$4])]) - - -# lt_dict_add(DICT, KEY, VALUE) -# ----------------------------- -m4_define([lt_dict_add], -[m4_define([$1($2)], [$3])]) - - -# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) -# -------------------------------------------- -m4_define([lt_dict_add_subkey], -[m4_define([$1($2:$3)], [$4])]) - - -# lt_dict_fetch(DICT, KEY, [SUBKEY]) -# ---------------------------------- -m4_define([lt_dict_fetch], -[m4_ifval([$3], - m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), - m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) - - -# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) -# ----------------------------------------------------------------- -m4_define([lt_if_dict_fetch], -[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], - [$5], - [$6])]) - - -# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) -# -------------------------------------------------------------- -m4_define([lt_dict_filter], -[m4_if([$5], [], [], - [lt_join(m4_quote(m4_default([$4], [[, ]])), - lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), - [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl -]) diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ltversion.m4 b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ltversion.m4 deleted file mode 100644 index 9c7b5d4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/ltversion.m4 +++ /dev/null @@ -1,23 +0,0 @@ -# ltversion.m4 -- version numbers -*- Autoconf -*- -# -# Copyright (C) 2004 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# @configure_input@ - -# serial 3293 ltversion.m4 -# This file is part of GNU Libtool - -m4_define([LT_PACKAGE_VERSION], [2.4]) -m4_define([LT_PACKAGE_REVISION], [1.3293]) - -AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.4' -macro_revision='1.3293' -_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) -_LT_DECL(, macro_revision, 0) -]) diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/lt~obsolete.m4 b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/lt~obsolete.m4 deleted file mode 100644 index c573da9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/m4/lt~obsolete.m4 +++ /dev/null @@ -1,98 +0,0 @@ -# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- -# -# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004. -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 5 lt~obsolete.m4 - -# These exist entirely to fool aclocal when bootstrapping libtool. -# -# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) -# which have later been changed to m4_define as they aren't part of the -# exported API, or moved to Autoconf or Automake where they belong. -# -# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN -# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us -# using a macro with the same name in our local m4/libtool.m4 it'll -# pull the old libtool.m4 in (it doesn't see our shiny new m4_define -# and doesn't know about Autoconf macros at all.) -# -# So we provide this file, which has a silly filename so it's always -# included after everything else. This provides aclocal with the -# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything -# because those macros already exist, or will be overwritten later. -# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. -# -# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. -# Yes, that means every name once taken will need to remain here until -# we give up compatibility with versions before 1.7, at which point -# we need to keep only those names which we still refer to. - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) - -m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) -m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) -m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) -m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) -m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) -m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) -m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) -m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) -m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) -m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) -m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) -m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) -m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) -m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) -m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) -m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) -m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) -m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) -m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) -m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) -m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) -m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) -m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) -m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) -m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) -m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) -m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) -m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) -m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) -m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) -m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) -m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) -m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) -m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) -m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) -m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) -m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) -m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) -m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) -m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) -m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) -m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) -m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) -m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) -m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) -m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) -m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) -m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) -m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) -m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) -m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) -m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) -m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/man/Makefile.am b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/man/Makefile.am deleted file mode 100644 index 2519277..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/man/Makefile.am +++ /dev/null @@ -1,8 +0,0 @@ -## Process this with automake to create Makefile.in - -AUTOMAKE_OPTIONS=foreign - -EXTRA_DIST = ffi.3 ffi_call.3 ffi_prep_cif.3 - -man_MANS = ffi.3 ffi_call.3 ffi_prep_cif.3 - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/man/Makefile.in b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/man/Makefile.in deleted file mode 100644 index 2cb5ea8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/man/Makefile.in +++ /dev/null @@ -1,466 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = man -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cc_maxopt.m4 \ - $(top_srcdir)/m4/ax_cflags_warn_all.m4 \ - $(top_srcdir)/m4/ax_check_compiler_flags.m4 \ - $(top_srcdir)/m4/ax_compiler_vendor.m4 \ - $(top_srcdir)/m4/ax_configure_args.m4 \ - $(top_srcdir)/m4/ax_enable_builddir.m4 \ - $(top_srcdir)/m4/ax_gcc_archflag.m4 \ - $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/fficonfig.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -man3dir = $(mandir)/man3 -am__installdirs = "$(DESTDIR)$(man3dir)" -NROFF = nroff -MANS = $(man_MANS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -AMTAR = @AMTAR@ -AM_LTLDFLAGS = @AM_LTLDFLAGS@ -AM_RUNTESTFLAGS = @AM_RUNTESTFLAGS@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCAS = @CCAS@ -CCASDEPMODE = @CCASDEPMODE@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FFI_EXEC_TRAMPOLINE_TABLE = @FFI_EXEC_TRAMPOLINE_TABLE@ -FGREP = @FGREP@ -GREP = @GREP@ -HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PRTDIAG = @PRTDIAG@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -TARGET = @TARGET@ -TARGETDIR = @TARGETDIR@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -ax_enable_builddir_sed = @ax_enable_builddir_sed@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sys_symbol_underscore = @sys_symbol_underscore@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -toolexecdir = @toolexecdir@ -toolexeclibdir = @toolexeclibdir@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AUTOMAKE_OPTIONS = foreign -EXTRA_DIST = ffi.3 ffi_call.3 ffi_prep_cif.3 -man_MANS = ffi.3 ffi_call.3 ffi_prep_cif.3 -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign man/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-man3: $(man_MANS) - @$(NORMAL_INSTALL) - test -z "$(man3dir)" || $(MKDIR_P) "$(DESTDIR)$(man3dir)" - @list=''; test -n "$(man3dir)" || exit 0; \ - { for i in $$list; do echo "$$i"; done; \ - l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ - sed -n '/\.3[a-z]*$$/p'; \ - } | while read p; do \ - if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; echo "$$p"; \ - done | \ - sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ - sed 'N;N;s,\n, ,g' | { \ - list=; while read file base inst; do \ - if test "$$base" = "$$inst"; then list="$$list $$file"; else \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \ - fi; \ - done; \ - for i in $$list; do echo "$$i"; done | $(am__base_list) | \ - while read files; do \ - test -z "$$files" || { \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \ - done; } - -uninstall-man3: - @$(NORMAL_UNINSTALL) - @list=''; test -n "$(man3dir)" || exit 0; \ - files=`{ for i in $$list; do echo "$$i"; done; \ - l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ - sed -n '/\.3[a-z]*$$/p'; \ - } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ - test -z "$$files" || { \ - echo " ( cd '$(DESTDIR)$(man3dir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(man3dir)" && rm -f $$files; } -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @list='$(MANS)'; if test -n "$$list"; then \ - list=`for p in $$list; do \ - if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ - if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ - if test -n "$$list" && \ - grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ - echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ - grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ - echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ - echo " typically \`make maintainer-clean' will remove them" >&2; \ - exit 1; \ - else :; fi; \ - else :; fi - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(MANS) -installdirs: - for dir in "$(DESTDIR)$(man3dir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-man - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: install-man3 - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-man - -uninstall-man: uninstall-man3 - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-man3 \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - uninstall uninstall-am uninstall-man uninstall-man3 - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/man/ffi.3 b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/man/ffi.3 deleted file mode 100644 index 18b5d5d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/man/ffi.3 +++ /dev/null @@ -1,31 +0,0 @@ -.Dd February 15, 2008 -.Dt FFI 3 -.Sh NAME -.Nm FFI -.Nd Foreign Function Interface -.Sh LIBRARY -libffi, -lffi -.Sh SYNOPSIS -.In ffi.h -.Ft ffi_status -.Fo ffi_prep_cif -.Fa "ffi_cif *cif" -.Fa "ffi_abi abi" -.Fa "unsigned int nargs" -.Fa "ffi_type *rtype" -.Fa "ffi_type **atypes" -.Fc -.Ft void -.Fo ffi_call -.Fa "ffi_cif *cif" -.Fa "void (*fn)(void)" -.Fa "void *rvalue" -.Fa "void **avalue" -.Fc -.Sh DESCRIPTION -The foreign function interface provides a mechanism by which a function can -generate a call to another function at runtime without requiring knowledge of -the called function's interface at compile time. -.Sh SEE ALSO -.Xr ffi_prep_cif 3 , -.Xr ffi_call 3 diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/man/ffi_call.3 b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/man/ffi_call.3 deleted file mode 100644 index 5351513..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/man/ffi_call.3 +++ /dev/null @@ -1,103 +0,0 @@ -.Dd February 15, 2008 -.Dt ffi_call 3 -.Sh NAME -.Nm ffi_call -.Nd Invoke a foreign function. -.Sh SYNOPSIS -.In ffi.h -.Ft void -.Fo ffi_call -.Fa "ffi_cif *cif" -.Fa "void (*fn)(void)" -.Fa "void *rvalue" -.Fa "void **avalue" -.Fc -.Sh DESCRIPTION -The -.Nm ffi_call -function provides a simple mechanism for invoking a function without -requiring knowledge of the function's interface at compile time. -.Fa fn -is called with the values retrieved from the pointers in the -.Fa avalue -array. The return value from -.Fa fn -is placed in storage pointed to by -.Fa rvalue . -.Fa cif -contains information describing the data types, sizes and alignments of the -arguments to and return value from -.Fa fn , -and must be initialized with -.Nm ffi_prep_cif -before it is used with -.Nm ffi_call . -.Pp -.Fa rvalue -must point to storage that is sizeof(ffi_arg) or larger for non-floating point -types. For smaller-sized return value types, the -.Nm ffi_arg -or -.Nm ffi_sarg -integral type must be used to hold -the return value. -.Sh EXAMPLES -.Bd -literal -#include -#include - -unsigned char -foo(unsigned int, float); - -int -main(int argc, const char **argv) -{ - ffi_cif cif; - ffi_type *arg_types[2]; - void *arg_values[2]; - ffi_status status; - - // Because the return value from foo() is smaller than sizeof(long), it - // must be passed as ffi_arg or ffi_sarg. - ffi_arg result; - - // Specify the data type of each argument. Available types are defined - // in . - arg_types[0] = &ffi_type_uint; - arg_types[1] = &ffi_type_float; - - // Prepare the ffi_cif structure. - if ((status = ffi_prep_cif(&cif, FFI_DEFAULT_ABI, - 2, &ffi_type_uint8, arg_types)) != FFI_OK) - { - // Handle the ffi_status error. - } - - // Specify the values of each argument. - unsigned int arg1 = 42; - float arg2 = 5.1; - - arg_values[0] = &arg1; - arg_values[1] = &arg2; - - // Invoke the function. - ffi_call(&cif, FFI_FN(foo), &result, arg_values); - - // The ffi_arg 'result' now contains the unsigned char returned from foo(), - // which can be accessed by a typecast. - printf("result is %hhu", (unsigned char)result); - - return 0; -} - -// The target function. -unsigned char -foo(unsigned int x, float y) -{ - unsigned char result = x - y; - return result; -} -.Ed -.Sh SEE ALSO -.Xr ffi 3 , -.Xr ffi_prep_cif 3 diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/man/ffi_prep_cif.3 b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/man/ffi_prep_cif.3 deleted file mode 100644 index 9436b31..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/man/ffi_prep_cif.3 +++ /dev/null @@ -1,66 +0,0 @@ -.Dd February 15, 2008 -.Dt ffi_prep_cif 3 -.Sh NAME -.Nm ffi_prep_cif -.Nd Prepare a -.Nm ffi_cif -structure for use with -.Nm ffi_call -. -.Sh SYNOPSIS -.In ffi.h -.Ft ffi_status -.Fo ffi_prep_cif -.Fa "ffi_cif *cif" -.Fa "ffi_abi abi" -.Fa "unsigned int nargs" -.Fa "ffi_type *rtype" -.Fa "ffi_type **atypes" -.Fc -.Sh DESCRIPTION -The -.Nm ffi_prep_cif -function prepares a -.Nm ffi_cif -structure for use with -.Nm ffi_call -. -.Fa abi -specifies a set of calling conventions to use. -.Fa atypes -is an array of -.Fa nargs -pointers to -.Nm ffi_type -structs that describe the data type, size and alignment of each argument. -.Fa rtype -points to an -.Nm ffi_type -that describes the data type, size and alignment of the -return value. -.Sh RETURN VALUES -Upon successful completion, -.Nm ffi_prep_cif -returns -.Nm FFI_OK . -It will return -.Nm FFI_BAD_TYPEDEF -if -.Fa cif -is -.Nm NULL -or -.Fa atypes -or -.Fa rtype -is malformed. If -.Fa abi -does not refer to a valid ABI, -.Nm FFI_BAD_ABI -will be returned. Available ABIs are -defined in -.Nm -. -.Sh SEE ALSO -.Xr ffi 3 , -.Xr ffi_call 3 diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/mdate-sh b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/mdate-sh deleted file mode 100644 index cd916c0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/mdate-sh +++ /dev/null @@ -1,201 +0,0 @@ -#!/bin/sh -# Get modification time of a file or directory and pretty-print it. - -scriptversion=2005-06-29.22 - -# Copyright (C) 1995, 1996, 1997, 2003, 2004, 2005 Free Software -# Foundation, Inc. -# written by Ulrich Drepper , June 1995 -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# This file is maintained in Automake, please report -# bugs to or send patches to -# . - -case $1 in - '') - echo "$0: No file. Try \`$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: mdate-sh [--help] [--version] FILE - -Pretty-print the modification time of FILE. - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "mdate-sh $scriptversion" - exit $? - ;; -esac - -# Prevent date giving response in another language. -LANG=C -export LANG -LC_ALL=C -export LC_ALL -LC_TIME=C -export LC_TIME - -# GNU ls changes its time format in response to the TIME_STYLE -# variable. Since we cannot assume `unset' works, revert this -# variable to its documented default. -if test "${TIME_STYLE+set}" = set; then - TIME_STYLE=posix-long-iso - export TIME_STYLE -fi - -save_arg1=$1 - -# Find out how to get the extended ls output of a file or directory. -if ls -L /dev/null 1>/dev/null 2>&1; then - ls_command='ls -L -l -d' -else - ls_command='ls -l -d' -fi - -# A `ls -l' line looks as follows on OS/2. -# drwxrwx--- 0 Aug 11 2001 foo -# This differs from Unix, which adds ownership information. -# drwxrwx--- 2 root root 4096 Aug 11 2001 foo -# -# To find the date, we split the line on spaces and iterate on words -# until we find a month. This cannot work with files whose owner is a -# user named `Jan', or `Feb', etc. However, it's unlikely that `/' -# will be owned by a user whose name is a month. So we first look at -# the extended ls output of the root directory to decide how many -# words should be skipped to get the date. - -# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. -set x`ls -l -d /` - -# Find which argument is the month. -month= -command= -until test $month -do - shift - # Add another shift to the command. - command="$command shift;" - case $1 in - Jan) month=January; nummonth=1;; - Feb) month=February; nummonth=2;; - Mar) month=March; nummonth=3;; - Apr) month=April; nummonth=4;; - May) month=May; nummonth=5;; - Jun) month=June; nummonth=6;; - Jul) month=July; nummonth=7;; - Aug) month=August; nummonth=8;; - Sep) month=September; nummonth=9;; - Oct) month=October; nummonth=10;; - Nov) month=November; nummonth=11;; - Dec) month=December; nummonth=12;; - esac -done - -# Get the extended ls output of the file or directory. -set dummy x`eval "$ls_command \"\$save_arg1\""` - -# Remove all preceding arguments -eval $command - -# Because of the dummy argument above, month is in $2. -# -# On a POSIX system, we should have -# -# $# = 5 -# $1 = file size -# $2 = month -# $3 = day -# $4 = year or time -# $5 = filename -# -# On Darwin 7.7.0 and 7.6.0, we have -# -# $# = 4 -# $1 = day -# $2 = month -# $3 = year or time -# $4 = filename - -# Get the month. -case $2 in - Jan) month=January; nummonth=1;; - Feb) month=February; nummonth=2;; - Mar) month=March; nummonth=3;; - Apr) month=April; nummonth=4;; - May) month=May; nummonth=5;; - Jun) month=June; nummonth=6;; - Jul) month=July; nummonth=7;; - Aug) month=August; nummonth=8;; - Sep) month=September; nummonth=9;; - Oct) month=October; nummonth=10;; - Nov) month=November; nummonth=11;; - Dec) month=December; nummonth=12;; -esac - -case $3 in - ???*) day=$1;; - *) day=$3; shift;; -esac - -# Here we have to deal with the problem that the ls output gives either -# the time of day or the year. -case $3 in - *:*) set `date`; eval year=\$$# - case $2 in - Jan) nummonthtod=1;; - Feb) nummonthtod=2;; - Mar) nummonthtod=3;; - Apr) nummonthtod=4;; - May) nummonthtod=5;; - Jun) nummonthtod=6;; - Jul) nummonthtod=7;; - Aug) nummonthtod=8;; - Sep) nummonthtod=9;; - Oct) nummonthtod=10;; - Nov) nummonthtod=11;; - Dec) nummonthtod=12;; - esac - # For the first six month of the year the time notation can also - # be used for files modified in the last year. - if (expr $nummonth \> $nummonthtod) > /dev/null; - then - year=`expr $year - 1` - fi;; - *) year=$3;; -esac - -# The result. -echo $day $month $year - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/missing b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/missing deleted file mode 100755 index 28055d2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/missing +++ /dev/null @@ -1,376 +0,0 @@ -#! /bin/sh -# Common stub for a few missing GNU programs while installing. - -scriptversion=2009-04-28.21; # UTC - -# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, -# 2008, 2009 Free Software Foundation, Inc. -# Originally by Fran,cois Pinard , 1996. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -if test $# -eq 0; then - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 -fi - -run=: -sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' -sed_minuso='s/.* -o \([^ ]*\).*/\1/p' - -# In the cases where this matters, `missing' is being run in the -# srcdir already. -if test -f configure.ac; then - configure_ac=configure.ac -else - configure_ac=configure.in -fi - -msg="missing on your system" - -case $1 in ---run) - # Try to run requested program, and just exit if it succeeds. - run= - shift - "$@" && exit 0 - # Exit code 63 means version mismatch. This often happens - # when the user try to use an ancient version of a tool on - # a file that requires a minimum version. In this case we - # we should proceed has if the program had been absent, or - # if --run hadn't been passed. - if test $? = 63; then - run=: - msg="probably too old" - fi - ;; - - -h|--h|--he|--hel|--help) - echo "\ -$0 [OPTION]... PROGRAM [ARGUMENT]... - -Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an -error status if there is no known handling for PROGRAM. - -Options: - -h, --help display this help and exit - -v, --version output version information and exit - --run try to run the given command, and emulate it if it fails - -Supported PROGRAM values: - aclocal touch file \`aclocal.m4' - autoconf touch file \`configure' - autoheader touch file \`config.h.in' - autom4te touch the output file, or create a stub one - automake touch all \`Makefile.in' files - bison create \`y.tab.[ch]', if possible, from existing .[ch] - flex create \`lex.yy.c', if possible, from existing .c - help2man touch the output file - lex create \`lex.yy.c', if possible, from existing .c - makeinfo touch the output file - tar try tar, gnutar, gtar, then tar without non-portable flags - yacc create \`y.tab.[ch]', if possible, from existing .[ch] - -Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and -\`g' are ignored when checking the name. - -Send bug reports to ." - exit $? - ;; - - -v|--v|--ve|--ver|--vers|--versi|--versio|--version) - echo "missing $scriptversion (GNU Automake)" - exit $? - ;; - - -*) - echo 1>&2 "$0: Unknown \`$1' option" - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 - ;; - -esac - -# normalize program name to check for. -program=`echo "$1" | sed ' - s/^gnu-//; t - s/^gnu//; t - s/^g//; t'` - -# Now exit if we have it, but it failed. Also exit now if we -# don't have it and --version was passed (most likely to detect -# the program). This is about non-GNU programs, so use $1 not -# $program. -case $1 in - lex*|yacc*) - # Not GNU programs, they don't have --version. - ;; - - tar*) - if test -n "$run"; then - echo 1>&2 "ERROR: \`tar' requires --run" - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - exit 1 - fi - ;; - - *) - if test -z "$run" && ($1 --version) > /dev/null 2>&1; then - # We have it, but it failed. - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - # Could not run --version or --help. This is probably someone - # running `$TOOL --version' or `$TOOL --help' to check whether - # $TOOL exists and not knowing $TOOL uses missing. - exit 1 - fi - ;; -esac - -# If it does not exist, or fails to run (possibly an outdated version), -# try to emulate it. -case $program in - aclocal*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acinclude.m4' or \`${configure_ac}'. You might want - to install the \`Automake' and \`Perl' packages. Grab them from - any GNU archive site." - touch aclocal.m4 - ;; - - autoconf*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`${configure_ac}'. You might want to install the - \`Autoconf' and \`GNU m4' packages. Grab them from any GNU - archive site." - touch configure - ;; - - autoheader*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acconfig.h' or \`${configure_ac}'. You might want - to install the \`Autoconf' and \`GNU m4' packages. Grab them - from any GNU archive site." - files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` - test -z "$files" && files="config.h" - touch_files= - for f in $files; do - case $f in - *:*) touch_files="$touch_files "`echo "$f" | - sed -e 's/^[^:]*://' -e 's/:.*//'`;; - *) touch_files="$touch_files $f.in";; - esac - done - touch $touch_files - ;; - - automake*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. - You might want to install the \`Automake' and \`Perl' packages. - Grab them from any GNU archive site." - find . -type f -name Makefile.am -print | - sed 's/\.am$/.in/' | - while read f; do touch "$f"; done - ;; - - autom4te*) - echo 1>&2 "\ -WARNING: \`$1' is needed, but is $msg. - You might have modified some files without having the - proper tools for further handling them. - You can get \`$1' as part of \`Autoconf' from any GNU - archive site." - - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo "#! /bin/sh" - echo "# Created by GNU Automake missing as a replacement of" - echo "# $ $@" - echo "exit 0" - chmod +x $file - exit 1 - fi - ;; - - bison*|yacc*) - echo 1>&2 "\ -WARNING: \`$1' $msg. You should only need it if - you modified a \`.y' file. You may need the \`Bison' package - in order for those modifications to take effect. You can get - \`Bison' from any GNU archive site." - rm -f y.tab.c y.tab.h - if test $# -ne 1; then - eval LASTARG="\${$#}" - case $LASTARG in - *.y) - SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" y.tab.c - fi - SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" y.tab.h - fi - ;; - esac - fi - if test ! -f y.tab.h; then - echo >y.tab.h - fi - if test ! -f y.tab.c; then - echo 'main() { return 0; }' >y.tab.c - fi - ;; - - lex*|flex*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.l' file. You may need the \`Flex' package - in order for those modifications to take effect. You can get - \`Flex' from any GNU archive site." - rm -f lex.yy.c - if test $# -ne 1; then - eval LASTARG="\${$#}" - case $LASTARG in - *.l) - SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" lex.yy.c - fi - ;; - esac - fi - if test ! -f lex.yy.c; then - echo 'main() { return 0; }' >lex.yy.c - fi - ;; - - help2man*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a dependency of a manual page. You may need the - \`Help2man' package in order for those modifications to take - effect. You can get \`Help2man' from any GNU archive site." - - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo ".ab help2man is required to generate this page" - exit $? - fi - ;; - - makeinfo*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.texi' or \`.texinfo' file, or any other file - indirectly affecting the aspect of the manual. The spurious - call might also be the consequence of using a buggy \`make' (AIX, - DU, IRIX). You might want to install the \`Texinfo' package or - the \`GNU make' package. Grab either from any GNU archive site." - # The file to touch is that specified with -o ... - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -z "$file"; then - # ... or it is the one specified with @setfilename ... - infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` - file=`sed -n ' - /^@setfilename/{ - s/.* \([^ ]*\) *$/\1/ - p - q - }' $infile` - # ... or it is derived from the source name (dir/f.texi becomes f.info) - test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info - fi - # If the file does not exist, the user really needs makeinfo; - # let's fail without touching anything. - test -f $file || exit 1 - touch $file - ;; - - tar*) - shift - - # We have already tried tar in the generic part. - # Look for gnutar/gtar before invocation to avoid ugly error - # messages. - if (gnutar --version > /dev/null 2>&1); then - gnutar "$@" && exit 0 - fi - if (gtar --version > /dev/null 2>&1); then - gtar "$@" && exit 0 - fi - firstarg="$1" - if shift; then - case $firstarg in - *o*) - firstarg=`echo "$firstarg" | sed s/o//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - case $firstarg in - *h*) - firstarg=`echo "$firstarg" | sed s/h//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - fi - - echo 1>&2 "\ -WARNING: I can't seem to be able to run \`tar' with the given arguments. - You may want to install GNU tar or Free paxutils, or check the - command line arguments." - exit 1 - ;; - - *) - echo 1>&2 "\ -WARNING: \`$1' is needed, and is $msg. - You might have modified some files without having the - proper tools for further handling them. Check the \`README' file, - it often tells you about the needed prerequisites for installing - this package. You may also peek at any GNU archive site, in case - some other package would contain this missing \`$1' program." - exit 1 - ;; -esac - -exit 0 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/msvcc.sh b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/msvcc.sh deleted file mode 100755 index dcdbeab..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/msvcc.sh +++ /dev/null @@ -1,197 +0,0 @@ -#!/bin/sh - -# ***** BEGIN LICENSE BLOCK ***** -# Version: MPL 1.1/GPL 2.0/LGPL 2.1 -# -# The contents of this file are subject to the Mozilla Public License Version -# 1.1 (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# http://www.mozilla.org/MPL/ -# -# Software distributed under the License is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -# for the specific language governing rights and limitations under the -# License. -# -# The Original Code is the MSVC wrappificator. -# -# The Initial Developer of the Original Code is -# Timothy Wall . -# Portions created by the Initial Developer are Copyright (C) 2009 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Daniel Witte -# -# Alternatively, the contents of this file may be used under the terms of -# either the GNU General Public License Version 2 or later (the "GPL"), or -# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -# in which case the provisions of the GPL or the LGPL are applicable instead -# of those above. If you wish to allow use of your version of this file only -# under the terms of either the GPL or the LGPL, and not to allow others to -# use your version of this file under the terms of the MPL, indicate your -# decision by deleting the provisions above and replace them with the notice -# and other provisions required by the GPL or the LGPL. If you do not delete -# the provisions above, a recipient may use your version of this file under -# the terms of any one of the MPL, the GPL or the LGPL. -# -# ***** END LICENSE BLOCK ***** - -# -# GCC-compatible wrapper for cl.exe and ml.exe. Arguments are given in GCC -# format and translated into something sensible for cl or ml. -# - -args="-nologo -W3" -md=-MD -cl="cl" -ml="ml" -safeseh="-safeseh" -output= - -while [ $# -gt 0 ] -do - case $1 - in - -fexceptions) - # Don't enable exceptions for now. - #args="$args -EHac" - shift 1 - ;; - -m32) - shift 1 - ;; - -m64) - cl="cl" # "$MSVC/x86_amd64/cl" - ml="ml64" # "$MSVC/x86_amd64/ml64" - safeseh= - shift 1 - ;; - -O0) - args="$args -Od" - shift 1 - ;; - -O*) - # If we're optimizing, make sure we explicitly turn on some optimizations - # that are implicitly disabled by debug symbols (-Zi). - args="$args $1 -OPT:REF -OPT:ICF -INCREMENTAL:NO" - shift 1 - ;; - -g) - # Enable debug symbol generation. - args="$args -Zi -DEBUG" - shift 1 - ;; - -DFFI_DEBUG) - # Link against debug CRT and enable runtime error checks. - args="$args -RTC1" - defines="$defines $1" - md=-MDd - shift 1 - ;; - -c) - args="$args -c" - args="$(echo $args | sed 's%/Fe%/Fo%g')" - single="-c" - shift 1 - ;; - -D*=*) - name="$(echo $1|sed 's/-D\([^=][^=]*\)=.*/\1/g')" - value="$(echo $1|sed 's/-D[^=][^=]*=//g')" - args="$args -D${name}='$value'" - defines="$defines -D${name}='$value'" - shift 1 - ;; - -D*) - args="$args $1" - defines="$defines $1" - shift 1 - ;; - -I) - args="$args -I$2" - includes="$includes -I$2" - shift 2 - ;; - -I*) - args="$args $1" - includes="$includes $1" - shift 1 - ;; - -W|-Wextra) - # TODO map extra warnings - shift 1 - ;; - -Wall) - # -Wall on MSVC is overzealous, and we already build with -W3. Nothing - # to do here. - shift 1 - ;; - -Werror) - args="$args -WX" - shift 1 - ;; - -W*) - # TODO map specific warnings - shift 1 - ;; - -S) - args="$args -FAs" - shift 1 - ;; - -o) - outdir="$(dirname $2)" - base="$(basename $2|sed 's/\.[^.]*//g')" - if [ -n "$single" ]; then - output="-Fo$2" - else - output="-Fe$2" - fi - if [ -n "$assembly" ]; then - args="$args $output" - else - args="$args $output -Fd$outdir/$base -Fp$outdir/$base -Fa$outdir/$base" - fi - shift 2 - ;; - *.S) - src=$1 - assembly="true" - shift 1 - ;; - *.c) - args="$args $1" - shift 1 - ;; - *) - # Assume it's an MSVC argument, and pass it through. - args="$args $1" - shift 1 - ;; - esac -done - -if [ -n "$assembly" ]; then - if [ -z "$outdir" ]; then - outdir="." - fi - ppsrc="$outdir/$(basename $src|sed 's/.S$/.asm/g')" - echo "$cl -nologo -EP $includes $defines $src > $ppsrc" - "$cl" -nologo -EP $includes $defines $src > $ppsrc || exit $? - output="$(echo $output | sed 's%/F[dpa][^ ]*%%g')" - args="-nologo $safeseh $single $output $ppsrc" - - echo "$ml $args" - eval "\"$ml\" $args" - result=$? - - # required to fix ml64 broken output? - #mv *.obj $outdir -else - args="$md $args" - echo "$cl $args" - eval "\"$cl\" $args" - result=$? -fi - -exit $result - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/alpha/ffi.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/alpha/ffi.c deleted file mode 100644 index 8d6b2ba..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/alpha/ffi.c +++ /dev/null @@ -1,284 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 1998, 2001, 2007, 2008 Red Hat, Inc. - - Alpha Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#include -#include -#include - -/* Force FFI_TYPE_LONGDOUBLE to be different than FFI_TYPE_DOUBLE; - all further uses in this file will refer to the 128-bit type. */ -#if defined(__LONG_DOUBLE_128__) -# if FFI_TYPE_LONGDOUBLE != 4 -# error FFI_TYPE_LONGDOUBLE out of date -# endif -#else -# undef FFI_TYPE_LONGDOUBLE -# define FFI_TYPE_LONGDOUBLE 4 -#endif - -extern void ffi_call_osf(void *, unsigned long, unsigned, void *, void (*)(void)) - FFI_HIDDEN; -extern void ffi_closure_osf(void) FFI_HIDDEN; - - -ffi_status -ffi_prep_cif_machdep(ffi_cif *cif) -{ - /* Adjust cif->bytes to represent a minimum 6 words for the temporary - register argument loading area. */ - if (cif->bytes < 6*FFI_SIZEOF_ARG) - cif->bytes = 6*FFI_SIZEOF_ARG; - - /* Set the return type flag */ - switch (cif->rtype->type) - { - case FFI_TYPE_STRUCT: - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - cif->flags = cif->rtype->type; - break; - - case FFI_TYPE_LONGDOUBLE: - /* 128-bit long double is returned in memory, like a struct. */ - cif->flags = FFI_TYPE_STRUCT; - break; - - default: - cif->flags = FFI_TYPE_INT; - break; - } - - return FFI_OK; -} - - -void -ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - unsigned long *stack, *argp; - long i, avn; - ffi_type **arg_types; - - /* If the return value is a struct and we don't have a return - value address then we need to make one. */ - if (rvalue == NULL && cif->flags == FFI_TYPE_STRUCT) - rvalue = alloca(cif->rtype->size); - - /* Allocate the space for the arguments, plus 4 words of temp - space for ffi_call_osf. */ - argp = stack = alloca(cif->bytes + 4*FFI_SIZEOF_ARG); - - if (cif->flags == FFI_TYPE_STRUCT) - *(void **) argp++ = rvalue; - - i = 0; - avn = cif->nargs; - arg_types = cif->arg_types; - - while (i < avn) - { - size_t size = (*arg_types)->size; - - switch ((*arg_types)->type) - { - case FFI_TYPE_SINT8: - *(SINT64 *) argp = *(SINT8 *)(* avalue); - break; - - case FFI_TYPE_UINT8: - *(SINT64 *) argp = *(UINT8 *)(* avalue); - break; - - case FFI_TYPE_SINT16: - *(SINT64 *) argp = *(SINT16 *)(* avalue); - break; - - case FFI_TYPE_UINT16: - *(SINT64 *) argp = *(UINT16 *)(* avalue); - break; - - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - /* Note that unsigned 32-bit quantities are sign extended. */ - *(SINT64 *) argp = *(SINT32 *)(* avalue); - break; - - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - case FFI_TYPE_POINTER: - *(UINT64 *) argp = *(UINT64 *)(* avalue); - break; - - case FFI_TYPE_FLOAT: - if (argp - stack < 6) - { - /* Note the conversion -- all the fp regs are loaded as - doubles. The in-register format is the same. */ - *(double *) argp = *(float *)(* avalue); - } - else - *(float *) argp = *(float *)(* avalue); - break; - - case FFI_TYPE_DOUBLE: - *(double *) argp = *(double *)(* avalue); - break; - - case FFI_TYPE_LONGDOUBLE: - /* 128-bit long double is passed by reference. */ - *(long double **) argp = (long double *)(* avalue); - size = sizeof (long double *); - break; - - case FFI_TYPE_STRUCT: - memcpy(argp, *avalue, (*arg_types)->size); - break; - - default: - FFI_ASSERT(0); - } - - argp += ALIGN(size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; - i++, arg_types++, avalue++; - } - - ffi_call_osf(stack, cif->bytes, cif->flags, rvalue, fn); -} - - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*, void*, void**, void*), - void *user_data, - void *codeloc) -{ - unsigned int *tramp; - - tramp = (unsigned int *) &closure->tramp[0]; - tramp[0] = 0x47fb0401; /* mov $27,$1 */ - tramp[1] = 0xa77b0010; /* ldq $27,16($27) */ - tramp[2] = 0x6bfb0000; /* jmp $31,($27),0 */ - tramp[3] = 0x47ff041f; /* nop */ - *(void **) &tramp[4] = ffi_closure_osf; - - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - - /* Flush the Icache. - - Tru64 UNIX as doesn't understand the imb mnemonic, so use call_pal - instead, since both Compaq as and gas can handle it. - - 0x86 is PAL_imb in Tru64 UNIX . */ - asm volatile ("call_pal 0x86" : : : "memory"); - - return FFI_OK; -} - - -long FFI_HIDDEN -ffi_closure_osf_inner(ffi_closure *closure, void *rvalue, unsigned long *argp) -{ - ffi_cif *cif; - void **avalue; - ffi_type **arg_types; - long i, avn, argn; - - cif = closure->cif; - avalue = alloca(cif->nargs * sizeof(void *)); - - argn = 0; - - /* Copy the caller's structure return address to that the closure - returns the data directly to the caller. */ - if (cif->flags == FFI_TYPE_STRUCT) - { - rvalue = (void *) argp[0]; - argn = 1; - } - - i = 0; - avn = cif->nargs; - arg_types = cif->arg_types; - - /* Grab the addresses of the arguments from the stack frame. */ - while (i < avn) - { - size_t size = arg_types[i]->size; - - switch (arg_types[i]->type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - case FFI_TYPE_POINTER: - case FFI_TYPE_STRUCT: - avalue[i] = &argp[argn]; - break; - - case FFI_TYPE_FLOAT: - if (argn < 6) - { - /* Floats coming from registers need conversion from double - back to float format. */ - *(float *)&argp[argn - 6] = *(double *)&argp[argn - 6]; - avalue[i] = &argp[argn - 6]; - } - else - avalue[i] = &argp[argn]; - break; - - case FFI_TYPE_DOUBLE: - avalue[i] = &argp[argn - (argn < 6 ? 6 : 0)]; - break; - - case FFI_TYPE_LONGDOUBLE: - /* 128-bit long double is passed by reference. */ - avalue[i] = (long double *) argp[argn]; - size = sizeof (long double *); - break; - - default: - abort (); - } - - argn += ALIGN(size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; - i++; - } - - /* Invoke the closure. */ - closure->fun (cif, rvalue, avalue, closure->user_data); - - /* Tell ffi_closure_osf how to perform return type promotions. */ - return cif->rtype->type; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/alpha/ffitarget.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/alpha/ffitarget.h deleted file mode 100644 index 7d06eb0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/alpha/ffitarget.h +++ /dev/null @@ -1,48 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. - Target configuration macros for Alpha. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_OSF, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_OSF -} ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_TRAMPOLINE_SIZE 24 -#define FFI_NATIVE_RAW_API 0 - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/alpha/osf.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/alpha/osf.S deleted file mode 100644 index 6b9f4df..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/alpha/osf.S +++ /dev/null @@ -1,387 +0,0 @@ -/* ----------------------------------------------------------------------- - osf.S - Copyright (c) 1998, 2001, 2007, 2008, 2011 Red Hat - - Alpha/OSF Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - - .arch ev6 - .text - -/* ffi_call_osf (void *args, unsigned long bytes, unsigned flags, - void *raddr, void (*fnaddr)(void)); - - Bit o trickiness here -- ARGS+BYTES is the base of the stack frame - for this function. This has been allocated by ffi_call. We also - deallocate some of the stack that has been alloca'd. */ - - .align 3 - .globl ffi_call_osf - .ent ffi_call_osf - FFI_HIDDEN(ffi_call_osf) - -ffi_call_osf: - .frame $15, 32, $26, 0 - .mask 0x4008000, -32 -$LFB1: - addq $16,$17,$1 - mov $16, $30 - stq $26, 0($1) - stq $15, 8($1) - stq $18, 16($1) - mov $1, $15 -$LCFI1: - .prologue 0 - - stq $19, 24($1) - mov $20, $27 - - # Load up all of the (potential) argument registers. - ldq $16, 0($30) - ldt $f16, 0($30) - ldt $f17, 8($30) - ldq $17, 8($30) - ldt $f18, 16($30) - ldq $18, 16($30) - ldt $f19, 24($30) - ldq $19, 24($30) - ldt $f20, 32($30) - ldq $20, 32($30) - ldt $f21, 40($30) - ldq $21, 40($30) - - # Deallocate the register argument area. - lda $30, 48($30) - - jsr $26, ($27), 0 - ldgp $29, 0($26) - - # If the return value pointer is NULL, assume no return value. - ldq $19, 24($15) - ldq $18, 16($15) - ldq $26, 0($15) -$LCFI2: - beq $19, $noretval - - # Store the return value out in the proper type. - cmpeq $18, FFI_TYPE_INT, $1 - bne $1, $retint - cmpeq $18, FFI_TYPE_FLOAT, $2 - bne $2, $retfloat - cmpeq $18, FFI_TYPE_DOUBLE, $3 - bne $3, $retdouble - - .align 3 -$noretval: - ldq $15, 8($15) - ret - - .align 4 -$retint: - stq $0, 0($19) - nop - ldq $15, 8($15) - ret - - .align 4 -$retfloat: - sts $f0, 0($19) - nop - ldq $15, 8($15) - ret - - .align 4 -$retdouble: - stt $f0, 0($19) - nop - ldq $15, 8($15) - ret -$LFE1: - - .end ffi_call_osf - -/* ffi_closure_osf(...) - - Receives the closure argument in $1. */ - - .align 3 - .globl ffi_closure_osf - .ent ffi_closure_osf - FFI_HIDDEN(ffi_closure_osf) - -ffi_closure_osf: - .frame $30, 16*8, $26, 0 - .mask 0x4000000, -16*8 -$LFB2: - ldgp $29, 0($27) - subq $30, 16*8, $30 -$LCFI5: - stq $26, 0($30) -$LCFI6: - .prologue 1 - - # Store all of the potential argument registers in va_list format. - stt $f16, 4*8($30) - stt $f17, 5*8($30) - stt $f18, 6*8($30) - stt $f19, 7*8($30) - stt $f20, 8*8($30) - stt $f21, 9*8($30) - stq $16, 10*8($30) - stq $17, 11*8($30) - stq $18, 12*8($30) - stq $19, 13*8($30) - stq $20, 14*8($30) - stq $21, 15*8($30) - - # Call ffi_closure_osf_inner to do the bulk of the work. - mov $1, $16 - lda $17, 2*8($30) - lda $18, 10*8($30) - jsr $26, ffi_closure_osf_inner - ldgp $29, 0($26) - ldq $26, 0($30) - - # Load up the return value in the proper type. - lda $1, $load_table - s4addq $0, $1, $1 - ldl $1, 0($1) - addq $1, $29, $1 - jmp $31, ($1), $load_32 - - .align 4 -$load_none: - addq $30, 16*8, $30 - ret - - .align 4 -$load_float: - lds $f0, 16($30) - nop - addq $30, 16*8, $30 - ret - - .align 4 -$load_double: - ldt $f0, 16($30) - nop - addq $30, 16*8, $30 - ret - - .align 4 -$load_u8: -#ifdef __alpha_bwx__ - ldbu $0, 16($30) - nop -#else - ldq $0, 16($30) - and $0, 255, $0 -#endif - addq $30, 16*8, $30 - ret - - .align 4 -$load_s8: -#ifdef __alpha_bwx__ - ldbu $0, 16($30) - sextb $0, $0 -#else - ldq $0, 16($30) - sll $0, 56, $0 - sra $0, 56, $0 -#endif - addq $30, 16*8, $30 - ret - - .align 4 -$load_u16: -#ifdef __alpha_bwx__ - ldwu $0, 16($30) - nop -#else - ldq $0, 16($30) - zapnot $0, 3, $0 -#endif - addq $30, 16*8, $30 - ret - - .align 4 -$load_s16: -#ifdef __alpha_bwx__ - ldwu $0, 16($30) - sextw $0, $0 -#else - ldq $0, 16($30) - sll $0, 48, $0 - sra $0, 48, $0 -#endif - addq $30, 16*8, $30 - ret - - .align 4 -$load_32: - ldl $0, 16($30) - nop - addq $30, 16*8, $30 - ret - - .align 4 -$load_64: - ldq $0, 16($30) - nop - addq $30, 16*8, $30 - ret -$LFE2: - - .end ffi_closure_osf - -#ifdef __ELF__ -.section .rodata -#else -.rdata -#endif -$load_table: - .gprel32 $load_none # FFI_TYPE_VOID - .gprel32 $load_32 # FFI_TYPE_INT - .gprel32 $load_float # FFI_TYPE_FLOAT - .gprel32 $load_double # FFI_TYPE_DOUBLE - .gprel32 $load_none # FFI_TYPE_LONGDOUBLE - .gprel32 $load_u8 # FFI_TYPE_UINT8 - .gprel32 $load_s8 # FFI_TYPE_SINT8 - .gprel32 $load_u16 # FFI_TYPE_UINT16 - .gprel32 $load_s16 # FFI_TYPE_SINT16 - .gprel32 $load_32 # FFI_TYPE_UINT32 - .gprel32 $load_32 # FFI_TYPE_SINT32 - .gprel32 $load_64 # FFI_TYPE_UINT64 - .gprel32 $load_64 # FFI_TYPE_SINT64 - .gprel32 $load_none # FFI_TYPE_STRUCT - .gprel32 $load_64 # FFI_TYPE_POINTER - -/* Assert that the table above is in sync with ffi.h. */ - -#if FFI_TYPE_FLOAT != 2 \ - || FFI_TYPE_DOUBLE != 3 \ - || FFI_TYPE_UINT8 != 5 \ - || FFI_TYPE_SINT8 != 6 \ - || FFI_TYPE_UINT16 != 7 \ - || FFI_TYPE_SINT16 != 8 \ - || FFI_TYPE_UINT32 != 9 \ - || FFI_TYPE_SINT32 != 10 \ - || FFI_TYPE_UINT64 != 11 \ - || FFI_TYPE_SINT64 != 12 \ - || FFI_TYPE_STRUCT != 13 \ - || FFI_TYPE_POINTER != 14 \ - || FFI_TYPE_LAST != 14 -#error "osf.S out of sync with ffi.h" -#endif - -#ifdef __ELF__ -# define UA_SI .4byte -# define FDE_ENCODING 0x1b /* pcrel sdata4 */ -# define FDE_ENCODE(X) .4byte X-. -# define FDE_ARANGE(X) .4byte X -#elif defined __osf__ -# define UA_SI .align 0; .long -# define FDE_ENCODING 0x50 /* aligned absolute */ -# define FDE_ENCODE(X) .align 3; .quad X -# define FDE_ARANGE(X) .align 0; .quad X -#endif - -#ifdef __ELF__ - .section .eh_frame,EH_FRAME_FLAGS,@progbits -#elif defined __osf__ - .data - .align 3 - .globl _GLOBAL__F_ffi_call_osf -_GLOBAL__F_ffi_call_osf: -#endif -__FRAME_BEGIN__: - UA_SI $LECIE1-$LSCIE1 # Length of Common Information Entry -$LSCIE1: - UA_SI 0x0 # CIE Identifier Tag - .byte 0x1 # CIE Version - .ascii "zR\0" # CIE Augmentation - .byte 0x1 # uleb128 0x1; CIE Code Alignment Factor - .byte 0x78 # sleb128 -8; CIE Data Alignment Factor - .byte 26 # CIE RA Column - .byte 0x1 # uleb128 0x1; Augmentation size - .byte FDE_ENCODING # FDE Encoding - .byte 0xc # DW_CFA_def_cfa - .byte 30 # uleb128 column 30 - .byte 0 # uleb128 offset 0 - .align 3 -$LECIE1: -$LSFDE1: - UA_SI $LEFDE1-$LASFDE1 # FDE Length -$LASFDE1: - UA_SI $LASFDE1-__FRAME_BEGIN__ # FDE CIE offset - FDE_ENCODE($LFB1) # FDE initial location - FDE_ARANGE($LFE1-$LFB1) # FDE address range - .byte 0x0 # uleb128 0x0; Augmentation size - - .byte 0x4 # DW_CFA_advance_loc4 - UA_SI $LCFI1-$LFB1 - .byte 0x9a # DW_CFA_offset, column 26 - .byte 4 # uleb128 4*-8 - .byte 0x8f # DW_CFA_offset, column 15 - .byte 0x3 # uleb128 3*-8 - .byte 0xc # DW_CFA_def_cfa - .byte 15 # uleb128 column 15 - .byte 32 # uleb128 offset 32 - - .byte 0x4 # DW_CFA_advance_loc4 - UA_SI $LCFI2-$LCFI1 - .byte 0xda # DW_CFA_restore, column 26 - .align 3 -$LEFDE1: - -$LSFDE3: - UA_SI $LEFDE3-$LASFDE3 # FDE Length -$LASFDE3: - UA_SI $LASFDE3-__FRAME_BEGIN__ # FDE CIE offset - FDE_ENCODE($LFB2) # FDE initial location - FDE_ARANGE($LFE2-$LFB2) # FDE address range - .byte 0x0 # uleb128 0x0; Augmentation size - - .byte 0x4 # DW_CFA_advance_loc4 - UA_SI $LCFI5-$LFB2 - .byte 0xe # DW_CFA_def_cfa_offset - .byte 0x80,0x1 # uleb128 128 - - .byte 0x4 # DW_CFA_advance_loc4 - UA_SI $LCFI6-$LCFI5 - .byte 0x9a # DW_CFA_offset, column 26 - .byte 16 # uleb128 offset 16*-8 - .align 3 -$LEFDE3: -#if defined __osf__ - .align 0 - .long 0 # End of Table -#endif - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/arm/ffi.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/arm/ffi.c deleted file mode 100644 index b2e7667..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/arm/ffi.c +++ /dev/null @@ -1,728 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2011 Plausible Labs Cooperative, Inc. - Copyright (c) 2011 Anthony Green - Copyright (c) 2011 Free Software Foundation - Copyright (c) 1998, 2008, 2011 Red Hat, Inc. - - ARM Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#include -#include - -#include - -/* Forward declares. */ -static int vfp_type_p (ffi_type *); -static void layout_vfp_args (ffi_cif *); - -/* ffi_prep_args is called by the assembly routine once stack space - has been allocated for the function's arguments - - The vfp_space parameter is the load area for VFP regs, the return - value is cif->vfp_used (word bitset of VFP regs used for passing - arguments). These are only used for the VFP hard-float ABI. -*/ -int ffi_prep_args(char *stack, extended_cif *ecif, float *vfp_space) -{ - register unsigned int i, vi = 0; - register void **p_argv; - register char *argp; - register ffi_type **p_arg; - - argp = stack; - - if ( ecif->cif->flags == FFI_TYPE_STRUCT ) { - *(void **) argp = ecif->rvalue; - argp += 4; - } - - p_argv = ecif->avalue; - - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; - (i != 0); - i--, p_arg++) - { - size_t z; - - /* Allocated in VFP registers. */ - if (ecif->cif->abi == FFI_VFP - && vi < ecif->cif->vfp_nargs && vfp_type_p (*p_arg)) - { - float* vfp_slot = vfp_space + ecif->cif->vfp_args[vi++]; - if ((*p_arg)->type == FFI_TYPE_FLOAT) - *((float*)vfp_slot) = *((float*)*p_argv); - else if ((*p_arg)->type == FFI_TYPE_DOUBLE) - *((double*)vfp_slot) = *((double*)*p_argv); - else - memcpy(vfp_slot, *p_argv, (*p_arg)->size); - p_argv++; - continue; - } - - /* Align if necessary */ - if (((*p_arg)->alignment - 1) & (unsigned) argp) { - argp = (char *) ALIGN(argp, (*p_arg)->alignment); - } - - if ((*p_arg)->type == FFI_TYPE_STRUCT) - argp = (char *) ALIGN(argp, 4); - - z = (*p_arg)->size; - if (z < sizeof(int)) - { - z = sizeof(int); - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv); - break; - - case FFI_TYPE_UINT8: - *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv); - break; - - case FFI_TYPE_SINT16: - *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv); - break; - - case FFI_TYPE_UINT16: - *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv); - break; - - case FFI_TYPE_STRUCT: - memcpy(argp, *p_argv, (*p_arg)->size); - break; - - default: - FFI_ASSERT(0); - } - } - else if (z == sizeof(int)) - { - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - } - else - { - memcpy(argp, *p_argv, z); - } - p_argv++; - argp += z; - } - - /* Indicate the VFP registers used. */ - return ecif->cif->vfp_used; -} - -/* Perform machine dependent cif processing */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) -{ - int type_code; - /* Round the stack up to a multiple of 8 bytes. This isn't needed - everywhere, but it is on some platforms, and it doesn't harm anything - when it isn't needed. */ - cif->bytes = (cif->bytes + 7) & ~7; - - /* Set the return type flag */ - switch (cif->rtype->type) - { - case FFI_TYPE_VOID: - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - cif->flags = (unsigned) cif->rtype->type; - break; - - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - cif->flags = (unsigned) FFI_TYPE_SINT64; - break; - - case FFI_TYPE_STRUCT: - if (cif->abi == FFI_VFP - && (type_code = vfp_type_p (cif->rtype)) != 0) - { - /* A Composite Type passed in VFP registers, either - FFI_TYPE_STRUCT_VFP_FLOAT or FFI_TYPE_STRUCT_VFP_DOUBLE. */ - cif->flags = (unsigned) type_code; - } - else if (cif->rtype->size <= 4) - /* A Composite Type not larger than 4 bytes is returned in r0. */ - cif->flags = (unsigned)FFI_TYPE_INT; - else - /* A Composite Type larger than 4 bytes, or whose size cannot - be determined statically ... is stored in memory at an - address passed [in r0]. */ - cif->flags = (unsigned)FFI_TYPE_STRUCT; - break; - - default: - cif->flags = FFI_TYPE_INT; - break; - } - - /* Map out the register placements of VFP register args. - The VFP hard-float calling conventions are slightly more sophisticated than - the base calling conventions, so we do it here instead of in ffi_prep_args(). */ - if (cif->abi == FFI_VFP) - layout_vfp_args (cif); - - return FFI_OK; -} - -/* Prototypes for assembly functions, in sysv.S */ -extern void ffi_call_SYSV (void (*fn)(void), extended_cif *, unsigned, unsigned, unsigned *); -extern void ffi_call_VFP (void (*fn)(void), extended_cif *, unsigned, unsigned, unsigned *); - -void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - extended_cif ecif; - - int small_struct = (cif->flags == FFI_TYPE_INT - && cif->rtype->type == FFI_TYPE_STRUCT); - int vfp_struct = (cif->flags == FFI_TYPE_STRUCT_VFP_FLOAT - || cif->flags == FFI_TYPE_STRUCT_VFP_DOUBLE); - - ecif.cif = cif; - ecif.avalue = avalue; - - unsigned int temp; - - /* If the return value is a struct and we don't have a return */ - /* value address then we need to make one */ - - if ((rvalue == NULL) && - (cif->flags == FFI_TYPE_STRUCT)) - { - ecif.rvalue = alloca(cif->rtype->size); - } - else if (small_struct) - ecif.rvalue = &temp; - else if (vfp_struct) - { - /* Largest case is double x 4. */ - ecif.rvalue = alloca(32); - } - else - ecif.rvalue = rvalue; - - switch (cif->abi) - { - case FFI_SYSV: - ffi_call_SYSV (fn, &ecif, cif->bytes, cif->flags, ecif.rvalue); - break; - - case FFI_VFP: - ffi_call_VFP (fn, &ecif, cif->bytes, cif->flags, ecif.rvalue); - break; - - default: - FFI_ASSERT(0); - break; - } - if (small_struct) - memcpy (rvalue, &temp, cif->rtype->size); - else if (vfp_struct) - memcpy (rvalue, ecif.rvalue, cif->rtype->size); -} - -/** private members **/ - -static void ffi_prep_incoming_args_SYSV (char *stack, void **ret, - void** args, ffi_cif* cif, float *vfp_stack); - -void ffi_closure_SYSV (ffi_closure *); - -void ffi_closure_VFP (ffi_closure *); - -/* This function is jumped to by the trampoline */ - -unsigned int -ffi_closure_SYSV_inner (closure, respp, args, vfp_args) - ffi_closure *closure; - void **respp; - void *args; - void *vfp_args; -{ - // our various things... - ffi_cif *cif; - void **arg_area; - - cif = closure->cif; - arg_area = (void**) alloca (cif->nargs * sizeof (void*)); - - /* this call will initialize ARG_AREA, such that each - * element in that array points to the corresponding - * value on the stack; and if the function returns - * a structure, it will re-set RESP to point to the - * structure return address. */ - - ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif, vfp_args); - - (closure->fun) (cif, *respp, arg_area, closure->user_data); - - return cif->flags; -} - -/*@-exportheader@*/ -static void -ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, - void **avalue, ffi_cif *cif, - /* Used only under VFP hard-float ABI. */ - float *vfp_stack) -/*@=exportheader@*/ -{ - register unsigned int i, vi = 0; - register void **p_argv; - register char *argp; - register ffi_type **p_arg; - - argp = stack; - - if ( cif->flags == FFI_TYPE_STRUCT ) { - *rvalue = *(void **) argp; - argp += 4; - } - - p_argv = avalue; - - for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++) - { - size_t z; - size_t alignment; - - if (cif->abi == FFI_VFP - && vi < cif->vfp_nargs && vfp_type_p (*p_arg)) - { - *p_argv++ = (void*)(vfp_stack + cif->vfp_args[vi++]); - continue; - } - - alignment = (*p_arg)->alignment; - if (alignment < 4) - alignment = 4; - /* Align if necessary */ - if ((alignment - 1) & (unsigned) argp) { - argp = (char *) ALIGN(argp, alignment); - } - - z = (*p_arg)->size; - - /* because we're little endian, this is what it turns into. */ - - *p_argv = (void*) argp; - - p_argv++; - argp += z; - } - - return; -} - -/* How to make a trampoline. */ - -#if FFI_EXEC_TRAMPOLINE_TABLE - -#include -#include -#include -#include - -extern void *ffi_closure_trampoline_table_page; - -typedef struct ffi_trampoline_table ffi_trampoline_table; -typedef struct ffi_trampoline_table_entry ffi_trampoline_table_entry; - -struct ffi_trampoline_table { - /* contigious writable and executable pages */ - vm_address_t config_page; - vm_address_t trampoline_page; - - /* free list tracking */ - uint16_t free_count; - ffi_trampoline_table_entry *free_list; - ffi_trampoline_table_entry *free_list_pool; - - ffi_trampoline_table *prev; - ffi_trampoline_table *next; -}; - -struct ffi_trampoline_table_entry { - void *(*trampoline)(); - ffi_trampoline_table_entry *next; -}; - -/* Override the standard architecture trampoline size */ -// XXX TODO - Fix -#undef FFI_TRAMPOLINE_SIZE -#define FFI_TRAMPOLINE_SIZE 12 - -/* The trampoline configuration is placed at 4080 bytes prior to the trampoline's entry point */ -#define FFI_TRAMPOLINE_CODELOC_CONFIG(codeloc) ((void **) (((uint8_t *) codeloc) - 4080)); - -/* The first 16 bytes of the config page are unused, as they are unaddressable from the trampoline page. */ -#define FFI_TRAMPOLINE_CONFIG_PAGE_OFFSET 16 - -/* Total number of trampolines that fit in one trampoline table */ -#define FFI_TRAMPOLINE_COUNT ((PAGE_SIZE - FFI_TRAMPOLINE_CONFIG_PAGE_OFFSET) / FFI_TRAMPOLINE_SIZE) - -static pthread_mutex_t ffi_trampoline_lock = PTHREAD_MUTEX_INITIALIZER; -static ffi_trampoline_table *ffi_trampoline_tables = NULL; - -static ffi_trampoline_table * -ffi_trampoline_table_alloc () -{ - ffi_trampoline_table *table = NULL; - - /* Loop until we can allocate two contigious pages */ - while (table == NULL) { - vm_address_t config_page = 0x0; - kern_return_t kt; - - /* Try to allocate two pages */ - kt = vm_allocate (mach_task_self (), &config_page, PAGE_SIZE*2, VM_FLAGS_ANYWHERE); - if (kt != KERN_SUCCESS) { - fprintf(stderr, "vm_allocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__); - break; - } - - /* Now drop the second half of the allocation to make room for the trampoline table */ - vm_address_t trampoline_page = config_page+PAGE_SIZE; - kt = vm_deallocate (mach_task_self (), trampoline_page, PAGE_SIZE); - if (kt != KERN_SUCCESS) { - fprintf(stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__); - break; - } - - /* Remap the trampoline table to directly follow the config page */ - vm_prot_t cur_prot; - vm_prot_t max_prot; - - kt = vm_remap (mach_task_self (), &trampoline_page, PAGE_SIZE, 0x0, FALSE, mach_task_self (), (vm_address_t) &ffi_closure_trampoline_table_page, FALSE, &cur_prot, &max_prot, VM_INHERIT_SHARE); - - /* If we lost access to the destination trampoline page, drop our config allocation mapping and retry */ - if (kt != KERN_SUCCESS) { - /* Log unexpected failures */ - if (kt != KERN_NO_SPACE) { - fprintf(stderr, "vm_remap() failure: %d at %s:%d\n", kt, __FILE__, __LINE__); - } - - vm_deallocate (mach_task_self (), config_page, PAGE_SIZE); - continue; - } - - /* We have valid trampoline and config pages */ - table = calloc (1, sizeof(ffi_trampoline_table)); - table->free_count = FFI_TRAMPOLINE_COUNT; - table->config_page = config_page; - table->trampoline_page = trampoline_page; - - /* Create and initialize the free list */ - table->free_list_pool = calloc(FFI_TRAMPOLINE_COUNT, sizeof(ffi_trampoline_table_entry)); - - uint16_t i; - for (i = 0; i < table->free_count; i++) { - ffi_trampoline_table_entry *entry = &table->free_list_pool[i]; - entry->trampoline = (void *) (table->trampoline_page + (i * FFI_TRAMPOLINE_SIZE)); - - if (i < table->free_count - 1) - entry->next = &table->free_list_pool[i+1]; - } - - table->free_list = table->free_list_pool; - } - - return table; -} - -void * -ffi_closure_alloc (size_t size, void **code) -{ - /* Create the closure */ - ffi_closure *closure = malloc(size); - if (closure == NULL) - return NULL; - - pthread_mutex_lock(&ffi_trampoline_lock); - - /* Check for an active trampoline table with available entries. */ - ffi_trampoline_table *table = ffi_trampoline_tables; - if (table == NULL || table->free_list == NULL) { - table = ffi_trampoline_table_alloc (); - if (table == NULL) { - free(closure); - return NULL; - } - - /* Insert the new table at the top of the list */ - table->next = ffi_trampoline_tables; - if (table->next != NULL) - table->next->prev = table; - - ffi_trampoline_tables = table; - } - - /* Claim the free entry */ - ffi_trampoline_table_entry *entry = ffi_trampoline_tables->free_list; - ffi_trampoline_tables->free_list = entry->next; - ffi_trampoline_tables->free_count--; - entry->next = NULL; - - pthread_mutex_unlock(&ffi_trampoline_lock); - - /* Initialize the return values */ - *code = entry->trampoline; - closure->trampoline_table = table; - closure->trampoline_table_entry = entry; - - return closure; -} - -void -ffi_closure_free (void *ptr) -{ - ffi_closure *closure = ptr; - - pthread_mutex_lock(&ffi_trampoline_lock); - - /* Fetch the table and entry references */ - ffi_trampoline_table *table = closure->trampoline_table; - ffi_trampoline_table_entry *entry = closure->trampoline_table_entry; - - /* Return the entry to the free list */ - entry->next = table->free_list; - table->free_list = entry; - table->free_count++; - - /* If all trampolines within this table are free, and at least one other table exists, deallocate - * the table */ - if (table->free_count == FFI_TRAMPOLINE_COUNT && ffi_trampoline_tables != table) { - /* Remove from the list */ - if (table->prev != NULL) - table->prev->next = table->next; - - if (table->next != NULL) - table->next->prev = table->prev; - - /* Deallocate pages */ - kern_return_t kt; - kt = vm_deallocate (mach_task_self (), table->config_page, PAGE_SIZE); - if (kt != KERN_SUCCESS) - fprintf(stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__); - - kt = vm_deallocate (mach_task_self (), table->trampoline_page, PAGE_SIZE); - if (kt != KERN_SUCCESS) - fprintf(stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__); - - /* Deallocate free list */ - free (table->free_list_pool); - free (table); - } else if (ffi_trampoline_tables != table) { - /* Otherwise, bump this table to the top of the list */ - table->prev = NULL; - table->next = ffi_trampoline_tables; - if (ffi_trampoline_tables != NULL) - ffi_trampoline_tables->prev = table; - - ffi_trampoline_tables = table; - } - - pthread_mutex_unlock (&ffi_trampoline_lock); - - /* Free the closure */ - free (closure); -} - -#else - -#define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \ -({ unsigned char *__tramp = (unsigned char*)(TRAMP); \ - unsigned int __fun = (unsigned int)(FUN); \ - unsigned int __ctx = (unsigned int)(CTX); \ - unsigned char *insns = (unsigned char *)(CTX); \ - *(unsigned int*) &__tramp[0] = 0xe92d000f; /* stmfd sp!, {r0-r3} */ \ - *(unsigned int*) &__tramp[4] = 0xe59f0000; /* ldr r0, [pc] */ \ - *(unsigned int*) &__tramp[8] = 0xe59ff000; /* ldr pc, [pc] */ \ - *(unsigned int*) &__tramp[12] = __ctx; \ - *(unsigned int*) &__tramp[16] = __fun; \ - __clear_cache((&__tramp[0]), (&__tramp[19])); /* Clear data mapping. */ \ - __clear_cache(insns, insns + 3 * sizeof (unsigned int)); \ - /* Clear instruction \ - mapping. */ \ - }) - -#endif - -/* the cif must already be prep'ed */ - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data, - void *codeloc) -{ - void (*closure_func)(ffi_closure*) = NULL; - - if (cif->abi == FFI_SYSV) - closure_func = &ffi_closure_SYSV; - else if (cif->abi == FFI_VFP) - closure_func = &ffi_closure_VFP; - else - return FFI_BAD_ABI; - -#if FFI_EXEC_TRAMPOLINE_TABLE - void **config = FFI_TRAMPOLINE_CODELOC_CONFIG(codeloc); - config[0] = closure; - config[1] = closure_func; -#else - FFI_INIT_TRAMPOLINE (&closure->tramp[0], \ - closure_func, \ - codeloc); -#endif - - closure->cif = cif; - closure->user_data = user_data; - closure->fun = fun; - - return FFI_OK; -} - -/* Below are routines for VFP hard-float support. */ - -static int rec_vfp_type_p (ffi_type *t, int *elt, int *elnum) -{ - switch (t->type) - { - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - *elt = (int) t->type; - *elnum = 1; - return 1; - - case FFI_TYPE_STRUCT_VFP_FLOAT: - *elt = FFI_TYPE_FLOAT; - *elnum = t->size / sizeof (float); - return 1; - - case FFI_TYPE_STRUCT_VFP_DOUBLE: - *elt = FFI_TYPE_DOUBLE; - *elnum = t->size / sizeof (double); - return 1; - - case FFI_TYPE_STRUCT:; - { - int base_elt = 0, total_elnum = 0; - ffi_type **el = t->elements; - while (*el) - { - int el_elt = 0, el_elnum = 0; - if (! rec_vfp_type_p (*el, &el_elt, &el_elnum) - || (base_elt && base_elt != el_elt) - || total_elnum + el_elnum > 4) - return 0; - base_elt = el_elt; - total_elnum += el_elnum; - el++; - } - *elnum = total_elnum; - *elt = base_elt; - return 1; - } - default: ; - } - return 0; -} - -static int vfp_type_p (ffi_type *t) -{ - int elt, elnum; - if (rec_vfp_type_p (t, &elt, &elnum)) - { - if (t->type == FFI_TYPE_STRUCT) - { - if (elnum == 1) - t->type = elt; - else - t->type = (elt == FFI_TYPE_FLOAT - ? FFI_TYPE_STRUCT_VFP_FLOAT - : FFI_TYPE_STRUCT_VFP_DOUBLE); - } - return (int) t->type; - } - return 0; -} - -static void place_vfp_arg (ffi_cif *cif, ffi_type *t) -{ - int reg = cif->vfp_reg_free; - int nregs = t->size / sizeof (float); - int align = ((t->type == FFI_TYPE_STRUCT_VFP_FLOAT - || t->type == FFI_TYPE_FLOAT) ? 1 : 2); - /* Align register number. */ - if ((reg & 1) && align == 2) - reg++; - while (reg + nregs <= 16) - { - int s, new_used = 0; - for (s = reg; s < reg + nregs; s++) - { - new_used |= (1 << s); - if (cif->vfp_used & (1 << s)) - { - reg += align; - goto next_reg; - } - } - /* Found regs to allocate. */ - cif->vfp_used |= new_used; - cif->vfp_args[cif->vfp_nargs++] = reg; - - /* Update vfp_reg_free. */ - if (cif->vfp_used & (1 << cif->vfp_reg_free)) - { - reg += nregs; - while (cif->vfp_used & (1 << reg)) - reg += 1; - cif->vfp_reg_free = reg; - } - return; - next_reg: ; - } -} - -static void layout_vfp_args (ffi_cif *cif) -{ - int i; - /* Init VFP fields */ - cif->vfp_used = 0; - cif->vfp_nargs = 0; - cif->vfp_reg_free = 0; - memset (cif->vfp_args, -1, 16); /* Init to -1. */ - - for (i = 0; i < cif->nargs; i++) - { - ffi_type *t = cif->arg_types[i]; - if (vfp_type_p (t)) - place_vfp_arg (cif, t); - } -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/arm/ffitarget.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/arm/ffitarget.h deleted file mode 100644 index ce25b23..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/arm/ffitarget.h +++ /dev/null @@ -1,65 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. - Copyright (c) 2010 CodeSourcery - - Target configuration macros for ARM. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_SYSV, - FFI_VFP, - FFI_LAST_ABI, -#ifdef __ARM_PCS_VFP - FFI_DEFAULT_ABI = FFI_VFP, -#else - FFI_DEFAULT_ABI = FFI_SYSV, -#endif -} ffi_abi; -#endif - -#define FFI_EXTRA_CIF_FIELDS \ - int vfp_used; \ - short vfp_reg_free, vfp_nargs; \ - signed char vfp_args[16] \ - -/* Internally used. */ -#define FFI_TYPE_STRUCT_VFP_FLOAT (FFI_TYPE_LAST + 1) -#define FFI_TYPE_STRUCT_VFP_DOUBLE (FFI_TYPE_LAST + 2) - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_TRAMPOLINE_SIZE 20 -#define FFI_NATIVE_RAW_API 0 - -#endif - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/arm/gentramp.sh b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/arm/gentramp.sh deleted file mode 100755 index 74f0b86..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/arm/gentramp.sh +++ /dev/null @@ -1,118 +0,0 @@ -#!/bin/sh - -# ----------------------------------------------------------------------- -# gentramp.sh - Copyright (c) 2010, Plausible Labs Cooperative, Inc. -# -# ARM Trampoline Page Generator -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# ``Software''), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -# DEALINGS IN THE SOFTWARE. -# ----------------------------------------------------------------------- - -PROGNAME=$0 - -# Each trampoline is exactly 3 instructions, or 12 bytes. If any of these values change, -# the entire arm trampoline implementation must be updated to match, too. - -# Size of an individual trampoline, in bytes -TRAMPOLINE_SIZE=12 - -# Page size, in bytes -PAGE_SIZE=4096 - -# Compute the size of the reachable config page; The first 16 bytes of the config page -# are unreachable due to our maximum pc-relative ldr offset. -PAGE_AVAIL=`expr $PAGE_SIZE - 16` - -# Compute the number of of available trampolines. -TRAMPOLINE_COUNT=`expr $PAGE_AVAIL / $TRAMPOLINE_SIZE` - -header () { - echo "# GENERATED CODE - DO NOT EDIT" - echo "# This file was generated by $PROGNAME" - echo "" - - # Write out the license header -cat << EOF -# Copyright (c) 2010, Plausible Labs Cooperative, Inc. -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# ``Software''), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -# DEALINGS IN THE SOFTWARE. -# ----------------------------------------------------------------------- - -EOF - - # Write out the trampoline table, aligned to the page boundary - echo ".text" - echo ".align 12" - echo ".globl _ffi_closure_trampoline_table_page" - echo "_ffi_closure_trampoline_table_page:" -} - - -# WARNING - Don't modify the trampoline code size without also updating the relevent libffi code -trampoline () { - cat << END - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - -END -} - -main () { - # Write out the header - header - - # Write out the trampolines - local i=0 - while [ $i -lt ${TRAMPOLINE_COUNT} ]; do - trampoline - local i=`expr $i + 1` - done -} - -main diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/arm/sysv.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/arm/sysv.S deleted file mode 100644 index 14a7f03..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/arm/sysv.S +++ /dev/null @@ -1,497 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 1998, 2008, 2011 Red Hat, Inc. - Copyright (c) 2011 Plausible Labs Cooperative, Inc. - - ARM Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include -#ifdef HAVE_MACHINE_ASM_H -#include -#else -#ifdef __USER_LABEL_PREFIX__ -#define CONCAT1(a, b) CONCAT2(a, b) -#define CONCAT2(a, b) a ## b - -/* Use the right prefix for global labels. */ -#define CNAME(x) CONCAT1 (__USER_LABEL_PREFIX__, x) -#else -#define CNAME(x) x -#endif -#ifdef __APPLE__ -#define ENTRY(x) .globl CNAME(x); CNAME(x): -#else -#define ENTRY(x) .globl CNAME(x); .type CNAME(x),%function; CNAME(x): -#endif /* __APPLE__ */ -#endif - -#ifdef __ELF__ -#define LSYM(x) .x -#else -#define LSYM(x) x -#endif - -/* Use the SOFTFP return value ABI on Mac OS X, as per the iOS ABI - Function Call Guide */ -#ifdef __APPLE__ -#define __SOFTFP__ -#endif - -/* We need a better way of testing for this, but for now, this is all - we can do. */ -@ This selects the minimum architecture level required. -#define __ARM_ARCH__ 3 - -#if defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) -# undef __ARM_ARCH__ -# define __ARM_ARCH__ 4 -#endif - -#if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) \ - || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) \ - || defined(__ARM_ARCH_5TEJ__) -# undef __ARM_ARCH__ -# define __ARM_ARCH__ 5 -#endif - -#if defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \ - || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \ - || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) \ - || defined(__ARM_ARCH_6M__) -# undef __ARM_ARCH__ -# define __ARM_ARCH__ 6 -#endif - -#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \ - || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \ - || defined(__ARM_ARCH_7EM__) -# undef __ARM_ARCH__ -# define __ARM_ARCH__ 7 -#endif - -#if __ARM_ARCH__ >= 5 -# define call_reg(x) blx x -#elif defined (__ARM_ARCH_4T__) -# define call_reg(x) mov lr, pc ; bx x -# if defined(__thumb__) || defined(__THUMB_INTERWORK__) -# define __INTERWORKING__ -# endif -#else -# define call_reg(x) mov lr, pc ; mov pc, x -#endif - -/* Conditionally compile unwinder directives. */ -#ifdef __ARM_EABI__ -#define UNWIND -#else -#define UNWIND @ -#endif - - -#if defined(__thumb__) && !defined(__THUMB_INTERWORK__) -.macro ARM_FUNC_START name - .text - .align 0 - .thumb - .thumb_func -#ifdef __APPLE__ - ENTRY($0) -#else - ENTRY(\name) -#endif - bx pc - nop - .arm - UNWIND .fnstart -/* A hook to tell gdb that we've switched to ARM mode. Also used to call - directly from other local arm routines. */ -#ifdef __APPLE__ -_L__$0: -#else -_L__\name: -#endif -.endm -#else -.macro ARM_FUNC_START name - .text - .align 0 - .arm -#ifdef __APPLE__ - ENTRY($0) -#else - ENTRY(\name) -#endif - UNWIND .fnstart -.endm -#endif - -.macro RETLDM regs=, cond=, dirn=ia -#if defined (__INTERWORKING__) - .ifc "\regs","" - ldr\cond lr, [sp], #4 - .else - ldm\cond\dirn sp!, {\regs, lr} - .endif - bx\cond lr -#else - .ifc "\regs","" - ldr\cond pc, [sp], #4 - .else - ldm\cond\dirn sp!, {\regs, pc} - .endif -#endif -.endm - - @ r0: ffi_prep_args - @ r1: &ecif - @ r2: cif->bytes - @ r3: fig->flags - @ sp+0: ecif.rvalue - - @ This assumes we are using gas. -ARM_FUNC_START ffi_call_SYSV - @ Save registers - stmfd sp!, {r0-r3, fp, lr} - UNWIND .save {r0-r3, fp, lr} - mov fp, sp - - UNWIND .setfp fp, sp - - @ Make room for all of the new args. - sub sp, fp, r2 - - @ Place all of the ffi_prep_args in position - mov r0, sp - @ r1 already set - - @ Call ffi_prep_args(stack, &ecif) - bl ffi_prep_args - - @ move first 4 parameters in registers - ldmia sp, {r0-r3} - - @ and adjust stack - sub lr, fp, sp @ cif->bytes == fp - sp - ldr ip, [fp] @ load fn() in advance - cmp lr, #16 - movhs lr, #16 - add sp, sp, lr - - @ call (fn) (...) - call_reg(ip) - - @ Remove the space we pushed for the args - mov sp, fp - - @ Load r2 with the pointer to storage for the return value - ldr r2, [sp, #24] - - @ Load r3 with the return type code - ldr r3, [sp, #12] - - @ If the return value pointer is NULL, assume no return value. - cmp r2, #0 - beq LSYM(Lepilogue) - -@ return INT - cmp r3, #FFI_TYPE_INT -#if defined(__SOFTFP__) || defined(__ARM_EABI__) - cmpne r3, #FFI_TYPE_FLOAT -#endif - streq r0, [r2] - beq LSYM(Lepilogue) - - @ return INT64 - cmp r3, #FFI_TYPE_SINT64 -#if defined(__SOFTFP__) || defined(__ARM_EABI__) - cmpne r3, #FFI_TYPE_DOUBLE -#endif - stmeqia r2, {r0, r1} - -#if !defined(__SOFTFP__) && !defined(__ARM_EABI__) - beq LSYM(Lepilogue) - -@ return FLOAT - cmp r3, #FFI_TYPE_FLOAT - stfeqs f0, [r2] - beq LSYM(Lepilogue) - -@ return DOUBLE or LONGDOUBLE - cmp r3, #FFI_TYPE_DOUBLE - stfeqd f0, [r2] -#endif - -LSYM(Lepilogue): -#if defined (__INTERWORKING__) - ldmia sp!, {r0-r3,fp, lr} - bx lr -#else - ldmia sp!, {r0-r3,fp, pc} -#endif - -.ffi_call_SYSV_end: - UNWIND .fnend -#ifdef __ELF__ - .size CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV) -#endif - - -/* - unsigned int FFI_HIDDEN - ffi_closure_SYSV_inner (closure, respp, args) - ffi_closure *closure; - void **respp; - void *args; -*/ - -ARM_FUNC_START ffi_closure_SYSV - UNWIND .pad #16 - add ip, sp, #16 - stmfd sp!, {ip, lr} - UNWIND .save {r0, lr} - add r2, sp, #8 - UNWIND .pad #16 - sub sp, sp, #16 - str sp, [sp, #8] - add r1, sp, #8 - bl CNAME(ffi_closure_SYSV_inner) - cmp r0, #FFI_TYPE_INT - beq .Lretint - - cmp r0, #FFI_TYPE_FLOAT -#if defined(__SOFTFP__) || defined(__ARM_EABI__) - beq .Lretint -#else - beq .Lretfloat -#endif - - cmp r0, #FFI_TYPE_DOUBLE -#if defined(__SOFTFP__) || defined(__ARM_EABI__) - beq .Lretlonglong -#else - beq .Lretdouble -#endif - - cmp r0, #FFI_TYPE_LONGDOUBLE -#if defined(__SOFTFP__) || defined(__ARM_EABI__) - beq .Lretlonglong -#else - beq .Lretlongdouble -#endif - - cmp r0, #FFI_TYPE_SINT64 - beq .Lretlonglong -.Lclosure_epilogue: - add sp, sp, #16 - ldmfd sp, {sp, pc} -.Lretint: - ldr r0, [sp] - b .Lclosure_epilogue -.Lretlonglong: - ldr r0, [sp] - ldr r1, [sp, #4] - b .Lclosure_epilogue - -#if !defined(__SOFTFP__) && !defined(__ARM_EABI__) -.Lretfloat: - ldfs f0, [sp] - b .Lclosure_epilogue -.Lretdouble: - ldfd f0, [sp] - b .Lclosure_epilogue -.Lretlongdouble: - ldfd f0, [sp] - b .Lclosure_epilogue -#endif - -.ffi_closure_SYSV_end: - UNWIND .fnend -#ifdef __ELF__ - .size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV) -#endif - - -/* Below are VFP hard-float ABI call and closure implementations. - Add VFP FPU directive here. */ - .fpu vfp - - @ r0: fn - @ r1: &ecif - @ r2: cif->bytes - @ r3: fig->flags - @ sp+0: ecif.rvalue - -ARM_FUNC_START ffi_call_VFP - @ Save registers - stmfd sp!, {r0-r3, fp, lr} - UNWIND .save {r0-r3, fp, lr} - mov fp, sp - UNWIND .setfp fp, sp - - @ Make room for all of the new args. - sub sp, sp, r2 - - @ Make room for loading VFP args - sub sp, sp, #64 - - @ Place all of the ffi_prep_args in position - mov r0, sp - @ r1 already set - sub r2, fp, #64 @ VFP scratch space - - @ Call ffi_prep_args(stack, &ecif, vfp_space) - bl ffi_prep_args - - @ Load VFP register args if needed - cmp r0, #0 - beq LSYM(Lbase_args) - - @ Load only d0 if possible - cmp r0, #3 - sub ip, fp, #64 - flddle d0, [ip] - fldmiadgt ip, {d0-d7} - -LSYM(Lbase_args): - @ move first 4 parameters in registers - ldmia sp, {r0-r3} - - @ and adjust stack - sub lr, ip, sp @ cif->bytes == (fp - 64) - sp - ldr ip, [fp] @ load fn() in advance - cmp lr, #16 - movhs lr, #16 - add sp, sp, lr - - @ call (fn) (...) - call_reg(ip) - - @ Remove the space we pushed for the args - mov sp, fp - - @ Load r2 with the pointer to storage for - @ the return value - ldr r2, [sp, #24] - - @ Load r3 with the return type code - ldr r3, [sp, #12] - - @ If the return value pointer is NULL, - @ assume no return value. - cmp r2, #0 - beq LSYM(Lepilogue_vfp) - - cmp r3, #FFI_TYPE_INT - streq r0, [r2] - beq LSYM(Lepilogue_vfp) - - cmp r3, #FFI_TYPE_SINT64 - stmeqia r2, {r0, r1} - beq LSYM(Lepilogue_vfp) - - cmp r3, #FFI_TYPE_FLOAT - fstseq s0, [r2] - beq LSYM(Lepilogue_vfp) - - cmp r3, #FFI_TYPE_DOUBLE - fstdeq d0, [r2] - beq LSYM(Lepilogue_vfp) - - cmp r3, #FFI_TYPE_STRUCT_VFP_FLOAT - cmpne r3, #FFI_TYPE_STRUCT_VFP_DOUBLE - fstmiadeq r2, {d0-d3} - -LSYM(Lepilogue_vfp): - RETLDM "r0-r3,fp" - -.ffi_call_VFP_end: - UNWIND .fnend - .size CNAME(ffi_call_VFP),.ffi_call_VFP_end-CNAME(ffi_call_VFP) - - -ARM_FUNC_START ffi_closure_VFP - fstmfdd sp!, {d0-d7} - @ r0-r3, then d0-d7 - UNWIND .pad #80 - add ip, sp, #80 - stmfd sp!, {ip, lr} - UNWIND .save {r0, lr} - add r2, sp, #72 - add r3, sp, #8 - UNWIND .pad #72 - sub sp, sp, #72 - str sp, [sp, #64] - add r1, sp, #64 - bl ffi_closure_SYSV_inner - - cmp r0, #FFI_TYPE_INT - beq .Lretint_vfp - - cmp r0, #FFI_TYPE_FLOAT - beq .Lretfloat_vfp - - cmp r0, #FFI_TYPE_DOUBLE - cmpne r0, #FFI_TYPE_LONGDOUBLE - beq .Lretdouble_vfp - - cmp r0, #FFI_TYPE_SINT64 - beq .Lretlonglong_vfp - - cmp r0, #FFI_TYPE_STRUCT_VFP_FLOAT - beq .Lretfloat_struct_vfp - - cmp r0, #FFI_TYPE_STRUCT_VFP_DOUBLE - beq .Lretdouble_struct_vfp - -.Lclosure_epilogue_vfp: - add sp, sp, #72 - ldmfd sp, {sp, pc} - -.Lretfloat_vfp: - flds s0, [sp] - b .Lclosure_epilogue_vfp -.Lretdouble_vfp: - fldd d0, [sp] - b .Lclosure_epilogue_vfp -.Lretint_vfp: - ldr r0, [sp] - b .Lclosure_epilogue_vfp -.Lretlonglong_vfp: - ldmia sp, {r0, r1} - b .Lclosure_epilogue_vfp -.Lretfloat_struct_vfp: - fldmiad sp, {d0-d1} - b .Lclosure_epilogue_vfp -.Lretdouble_struct_vfp: - fldmiad sp, {d0-d3} - b .Lclosure_epilogue_vfp - -.ffi_closure_VFP_end: - UNWIND .fnend - .size CNAME(ffi_closure_VFP),.ffi_closure_VFP_end-CNAME(ffi_closure_VFP) - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",%progbits -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/arm/trampoline.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/arm/trampoline.S deleted file mode 100644 index 7b47429..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/arm/trampoline.S +++ /dev/null @@ -1,4450 +0,0 @@ -# GENERATED CODE - DO NOT EDIT -# This file was generated by ./gentramp.sh - -# Copyright (c) 2010, Plausible Labs Cooperative, Inc. -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# Software''), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED AS IS'', WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -# DEALINGS IN THE SOFTWARE. -# ----------------------------------------------------------------------- - -.text -.align 12 -.globl _ffi_closure_trampoline_table_page -_ffi_closure_trampoline_table_page: - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - - - // trampoline - // Save to stack - stmfd sp!, {r0-r3} - - // Load the context argument from the config page. - // This places the first usable config value at _ffi_closure_trampoline_table-4080 - // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. - ldr r0, [pc, #-4092] - - // Load the jump address from the config page. - ldr pc, [pc, #-4092] - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/avr32/ffi.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/avr32/ffi.c deleted file mode 100644 index 3d43397..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/avr32/ffi.c +++ /dev/null @@ -1,423 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2011 Anthony Green - Copyright (c) 2009 Bradley Smith - - AVR32 Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#include -#include - -#include -#include -#include -#include - -/* #define DEBUG */ - -extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, - unsigned int, unsigned int, unsigned int*, unsigned int, - void (*fn)(void)); -extern void ffi_closure_SYSV (ffi_closure *); - -unsigned int pass_struct_on_stack(ffi_type *type) -{ - if(type->type != FFI_TYPE_STRUCT) - return 0; - - if(type->alignment < type->size && - !(type->size == 4 || type->size == 8) && - !(type->size == 8 && type->alignment >= 4)) - return 1; - - if(type->size == 3 || type->size == 5 || type->size == 6 || - type->size == 7) - return 1; - - return 0; -} - -/* ffi_prep_args is called by the assembly routine once stack space - * has been allocated for the function's arguments - * - * This is annoyingly complex since we need to keep track of used - * registers. - */ - -void ffi_prep_args(char *stack, extended_cif *ecif) -{ - unsigned int i; - void **p_argv; - ffi_type **p_arg; - char *reg_base = stack; - char *stack_base = stack + 20; - unsigned int stack_offset = 0; - unsigned int reg_mask = 0; - - p_argv = ecif->avalue; - - /* If cif->flags is struct then we know it's not passed in registers */ - if(ecif->cif->flags == FFI_TYPE_STRUCT) - { - *(void**)reg_base = ecif->rvalue; - reg_mask |= 1; - } - - for(i = 0, p_arg = ecif->cif->arg_types; i < ecif->cif->nargs; - i++, p_arg++) - { - size_t z = (*p_arg)->size; - int alignment = (*p_arg)->alignment; - int type = (*p_arg)->type; - char *addr = 0; - - if(z % 4 != 0) - z += (4 - z % 4); - - if(reg_mask != 0x1f) - { - if(pass_struct_on_stack(*p_arg)) - { - addr = stack_base + stack_offset; - stack_offset += z; - } - else if(z == sizeof(int)) - { - char index = 0; - - while((reg_mask >> index) & 1) - index++; - - addr = reg_base + (index * 4); - reg_mask |= (1 << index); - } - else if(z == 2 * sizeof(int)) - { - if(!((reg_mask >> 1) & 1)) - { - addr = reg_base + 4; - reg_mask |= (3 << 1); - } - else if(!((reg_mask >> 3) & 1)) - { - addr = reg_base + 12; - reg_mask |= (3 << 3); - } - } - } - - if(!addr) - { - addr = stack_base + stack_offset; - stack_offset += z; - } - - if(type == FFI_TYPE_STRUCT && (*p_arg)->elements[1] == NULL) - type = (*p_arg)->elements[0]->type; - - switch(type) - { - case FFI_TYPE_UINT8: - *(unsigned int *)addr = (unsigned int)*(UINT8 *)(*p_argv); - break; - case FFI_TYPE_SINT8: - *(signed int *)addr = (signed int)*(SINT8 *)(*p_argv); - break; - case FFI_TYPE_UINT16: - *(unsigned int *)addr = (unsigned int)*(UINT16 *)(*p_argv); - break; - case FFI_TYPE_SINT16: - *(signed int *)addr = (signed int)*(SINT16 *)(*p_argv); - break; - default: - memcpy(addr, *p_argv, z); - } - - p_argv++; - } - -#ifdef DEBUG - /* Debugging */ - for(i = 0; i < 5; i++) - { - if((reg_mask & (1 << i)) == 0) - printf("r%d: (unused)\n", 12 - i); - else - printf("r%d: 0x%08x\n", 12 - i, ((unsigned int*)reg_base)[i]); - } - - for(i = 0; i < stack_offset / 4; i++) - { - printf("sp+%d: 0x%08x\n", i*4, ((unsigned int*)stack_base)[i]); - } -#endif -} - -/* Perform machine dependent cif processing */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) -{ - /* Round the stack up to a multiple of 8 bytes. This isn't needed - * everywhere, but it is on some platforms, and it doesn't harm - * anything when it isn't needed. */ - cif->bytes = (cif->bytes + 7) & ~7; - - /* Flag to indicate that he return value is in fact a struct */ - cif->rstruct_flag = 0; - - /* Set the return type flag */ - switch(cif->rtype->type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - cif->flags = (unsigned)FFI_TYPE_UINT8; - break; - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - cif->flags = (unsigned)FFI_TYPE_UINT16; - break; - case FFI_TYPE_FLOAT: - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - case FFI_TYPE_POINTER: - cif->flags = (unsigned)FFI_TYPE_UINT32; - break; - case FFI_TYPE_DOUBLE: - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - cif->flags = (unsigned)FFI_TYPE_UINT64; - break; - case FFI_TYPE_STRUCT: - cif->rstruct_flag = 1; - if(!pass_struct_on_stack(cif->rtype)) - { - if(cif->rtype->size <= 1) - cif->flags = (unsigned)FFI_TYPE_UINT8; - else if(cif->rtype->size <= 2) - cif->flags = (unsigned)FFI_TYPE_UINT16; - else if(cif->rtype->size <= 4) - cif->flags = (unsigned)FFI_TYPE_UINT32; - else if(cif->rtype->size <= 8) - cif->flags = (unsigned)FFI_TYPE_UINT64; - else - cif->flags = (unsigned)cif->rtype->type; - } - else - cif->flags = (unsigned)cif->rtype->type; - break; - default: - cif->flags = (unsigned)cif->rtype->type; - break; - } - - return FFI_OK; -} - -void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - extended_cif ecif; - - unsigned int size = 0, i = 0; - ffi_type **p_arg; - - ecif.cif = cif; - ecif.avalue = avalue; - - for(i = 0, p_arg = cif->arg_types; i < cif->nargs; i++, p_arg++) - size += (*p_arg)->size + (4 - (*p_arg)->size % 4); - - /* If the return value is a struct and we don't have a return value - * address then we need to make one */ - - /* If cif->flags is struct then it's not suitable for registers */ - if((rvalue == NULL) && (cif->flags == FFI_TYPE_STRUCT)) - ecif.rvalue = alloca(cif->rtype->size); - else - ecif.rvalue = rvalue; - - switch(cif->abi) - { - case FFI_SYSV: - ffi_call_SYSV(ffi_prep_args, &ecif, size, cif->flags, - ecif.rvalue, cif->rstruct_flag, fn); - break; - default: - FFI_ASSERT(0); - break; - } -} - -static void ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, - void **avalue, ffi_cif *cif) -{ - register unsigned int i, reg_mask = 0; - register void **p_argv; - register ffi_type **p_arg; - register char *reg_base = stack; - register char *stack_base = stack + 20; - register unsigned int stack_offset = 0; - -#ifdef DEBUG - /* Debugging */ - for(i = 0; i < cif->nargs + 7; i++) - { - printf("sp+%d: 0x%08x\n", i*4, ((unsigned int*)stack)[i]); - } -#endif - - /* If cif->flags is struct then we know it's not passed in registers */ - if(cif->flags == FFI_TYPE_STRUCT) - { - *rvalue = *(void **)reg_base; - reg_mask |= 1; - } - - p_argv = avalue; - - for(i = 0, p_arg = cif->arg_types; i < cif->nargs; i++, p_arg++) - { - size_t z = (*p_arg)->size; - int alignment = (*p_arg)->alignment; - - *p_argv = 0; - - if(z % 4 != 0) - z += (4 - z % 4); - - if(reg_mask != 0x1f) - { - if(pass_struct_on_stack(*p_arg)) - { - *p_argv = (void*)stack_base + stack_offset; - stack_offset += z; - } - else if(z <= sizeof(int)) - { - char index = 0; - - while((reg_mask >> index) & 1) - index++; - - *p_argv = (void*)reg_base + (index * 4); - reg_mask |= (1 << index); - } - else if(z == 2 * sizeof(int)) - { - if(!((reg_mask >> 1) & 1)) - { - *p_argv = (void*)reg_base + 4; - reg_mask |= (3 << 1); - } - else if(!((reg_mask >> 3) & 1)) - { - *p_argv = (void*)reg_base + 12; - reg_mask |= (3 << 3); - } - } - } - - if(!*p_argv) - { - *p_argv = (void*)stack_base + stack_offset; - stack_offset += z; - } - - if((*p_arg)->type != FFI_TYPE_STRUCT || - (*p_arg)->elements[1] == NULL) - { - if(alignment == 1) - **(unsigned int**)p_argv <<= 24; - else if(alignment == 2) - **(unsigned int**)p_argv <<= 16; - } - - p_argv++; - } - -#ifdef DEBUG - /* Debugging */ - for(i = 0; i < cif->nargs; i++) - { - printf("sp+%d: 0x%08x\n", i*4, *(((unsigned int**)avalue)[i])); - } -#endif -} - -/* This function is jumped to by the trampoline */ - -unsigned int ffi_closure_SYSV_inner(ffi_closure *closure, void **respp, - void *args) -{ - ffi_cif *cif; - void **arg_area; - unsigned int i, size = 0; - ffi_type **p_arg; - - cif = closure->cif; - - for(i = 0, p_arg = cif->arg_types; i < cif->nargs; i++, p_arg++) - size += (*p_arg)->size + (4 - (*p_arg)->size % 4); - - arg_area = (void **)alloca(size); - - /* this call will initialize ARG_AREA, such that each element in that - * array points to the corresponding value on the stack; and if the - * function returns a structure, it will re-set RESP to point to the - * structure return address. */ - - ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif); - - (closure->fun)(cif, *respp, arg_area, closure->user_data); - - return cif->flags; -} - -ffi_status ffi_prep_closure_loc(ffi_closure* closure, ffi_cif* cif, - void (*fun)(ffi_cif*, void*, void**, void*), void *user_data, - void *codeloc) -{ - if (cif->abi != FFI_SYSV) - return FFI_BAD_ABI; - - unsigned char *__tramp = (unsigned char*)(&closure->tramp[0]); - unsigned int __fun = (unsigned int)(&ffi_closure_SYSV); - unsigned int __ctx = (unsigned int)(codeloc); - unsigned int __rstruct_flag = (unsigned int)(cif->rstruct_flag); - unsigned int __inner = (unsigned int)(&ffi_closure_SYSV_inner); - *(unsigned int*) &__tramp[0] = 0xebcd1f00; /* pushm r8-r12 */ - *(unsigned int*) &__tramp[4] = 0xfefc0010; /* ld.w r12, pc[16] */ - *(unsigned int*) &__tramp[8] = 0xfefb0010; /* ld.w r11, pc[16] */ - *(unsigned int*) &__tramp[12] = 0xfefa0010; /* ld.w r10, pc[16] */ - *(unsigned int*) &__tramp[16] = 0xfeff0010; /* ld.w pc, pc[16] */ - *(unsigned int*) &__tramp[20] = __ctx; - *(unsigned int*) &__tramp[24] = __rstruct_flag; - *(unsigned int*) &__tramp[28] = __inner; - *(unsigned int*) &__tramp[32] = __fun; - syscall(__NR_cacheflush, 0, (&__tramp[0]), 36); - - closure->cif = cif; - closure->user_data = user_data; - closure->fun = fun; - - return FFI_OK; -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/avr32/ffitarget.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/avr32/ffitarget.h deleted file mode 100644 index b85d062..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/avr32/ffitarget.h +++ /dev/null @@ -1,50 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 2009 Bradley Smith - Target configuration macros for AVR32. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_SYSV, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_SYSV -} ffi_abi; -#endif - -#define FFI_EXTRA_CIF_FIELDS unsigned int rstruct_flag - -/* Definitions for closures */ - -#define FFI_CLOSURES 1 -#define FFI_TRAMPOLINE_SIZE 36 -#define FFI_NATIVE_RAW_API 0 - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/avr32/sysv.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/avr32/sysv.S deleted file mode 100644 index a984b3c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/avr32/sysv.S +++ /dev/null @@ -1,208 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 2009 Bradley Smith - - AVR32 Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - --------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - - /* r12: ffi_prep_args - * r11: &ecif - * r10: size - * r9: cif->flags - * r8: ecif.rvalue - * sp+0: cif->rstruct_flag - * sp+4: fn */ - - .text - .align 1 - .globl ffi_call_SYSV - .type ffi_call_SYSV, @function -ffi_call_SYSV: - stm --sp, r0,r1,lr - stm --sp, r8-r12 - mov r0, sp - - /* Make room for all of the new args. */ - sub sp, r10 - /* Pad to make way for potential skipped registers */ - sub sp, 20 - - /* Call ffi_prep_args(stack, &ecif). */ - /* r11 already set */ - mov r1, r12 - mov r12, sp - icall r1 - - /* Save new argument size */ - mov r1, r12 - - /* Move first 5 parameters in registers. */ - ldm sp++, r8-r12 - - /* call (fn) (...). */ - ld.w r1, r0[36] - icall r1 - - /* Remove the space we pushed for the args. */ - mov sp, r0 - - /* Load r1 with the rstruct flag. */ - ld.w r1, sp[32] - - /* Load r9 with the return type code. */ - ld.w r9, sp[12] - - /* Load r8 with the return value pointer. */ - ld.w r8, sp[16] - - /* If the return value pointer is NULL, assume no return value. */ - cp.w r8, 0 - breq .Lend - - /* Check if return type is actually a struct */ - cp.w r1, 0 - breq 1f - - /* Return 8bit */ - cp.w r9, FFI_TYPE_UINT8 - breq .Lstore8 - - /* Return 16bit */ - cp.w r9, FFI_TYPE_UINT16 - breq .Lstore16 - -1: - /* Return 32bit */ - cp.w r9, FFI_TYPE_UINT32 - breq .Lstore32 - cp.w r9, FFI_TYPE_UINT16 - breq .Lstore32 - cp.w r9, FFI_TYPE_UINT8 - breq .Lstore32 - - /* Return 64bit */ - cp.w r9, FFI_TYPE_UINT64 - breq .Lstore64 - - /* Didn't match anything */ - bral .Lend - -.Lstore64: - st.w r8[0], r11 - st.w r8[4], r10 - bral .Lend - -.Lstore32: - st.w r8[0], r12 - bral .Lend - -.Lstore16: - st.h r8[0], r12 - bral .Lend - -.Lstore8: - st.b r8[0], r12 - bral .Lend - -.Lend: - sub sp, -20 - ldm sp++, r0,r1,pc - - .size ffi_call_SYSV, . - ffi_call_SYSV - - - /* r12: __ctx - * r11: __rstruct_flag - * r10: __inner */ - - .align 1 - .globl ffi_closure_SYSV - .type ffi_closure_SYSV, @function -ffi_closure_SYSV: - stm --sp, r0,lr - mov r0, r11 - mov r8, r10 - sub r10, sp, -8 - sub sp, 12 - st.w sp[8], sp - sub r11, sp, -8 - icall r8 - - /* Check if return type is actually a struct */ - cp.w r0, 0 - breq 1f - - /* Return 8bit */ - cp.w r12, FFI_TYPE_UINT8 - breq .Lget8 - - /* Return 16bit */ - cp.w r12, FFI_TYPE_UINT16 - breq .Lget16 - -1: - /* Return 32bit */ - cp.w r12, FFI_TYPE_UINT32 - breq .Lget32 - cp.w r12, FFI_TYPE_UINT16 - breq .Lget32 - cp.w r12, FFI_TYPE_UINT8 - breq .Lget32 - - /* Return 64bit */ - cp.w r12, FFI_TYPE_UINT64 - breq .Lget64 - - /* Didn't match anything */ - bral .Lclend - -.Lget64: - ld.w r11, sp[0] - ld.w r10, sp[4] - bral .Lclend - -.Lget32: - ld.w r12, sp[0] - bral .Lclend - -.Lget16: - ld.uh r12, sp[0] - bral .Lclend - -.Lget8: - ld.ub r12, sp[0] - bral .Lclend - -.Lclend: - sub sp, -12 - ldm sp++, r0,lr - sub sp, -20 - mov pc, lr - - .size ffi_closure_SYSV, . - ffi_closure_SYSV - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/closures.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/closures.c deleted file mode 100644 index 1b37827..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/closures.c +++ /dev/null @@ -1,615 +0,0 @@ -/* ----------------------------------------------------------------------- - closures.c - Copyright (c) 2007, 2009, 2010 Red Hat, Inc. - Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc - Copyright (c) 2011 Plausible Labs Cooperative, Inc. - - Code to allocate and deallocate memory for closures. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#if defined __linux__ && !defined _GNU_SOURCE -#define _GNU_SOURCE 1 -#endif - -#include -#include - -#if !FFI_MMAP_EXEC_WRIT && !FFI_EXEC_TRAMPOLINE_TABLE -# if __gnu_linux__ -/* This macro indicates it may be forbidden to map anonymous memory - with both write and execute permission. Code compiled when this - option is defined will attempt to map such pages once, but if it - fails, it falls back to creating a temporary file in a writable and - executable filesystem and mapping pages from it into separate - locations in the virtual memory space, one location writable and - another executable. */ -# define FFI_MMAP_EXEC_WRIT 1 -# define HAVE_MNTENT 1 -# endif -# if defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__) -/* Windows systems may have Data Execution Protection (DEP) enabled, - which requires the use of VirtualMalloc/VirtualFree to alloc/free - executable memory. */ -# define FFI_MMAP_EXEC_WRIT 1 -# endif -#endif - -#if FFI_MMAP_EXEC_WRIT && !defined FFI_MMAP_EXEC_SELINUX -# ifdef __linux__ -/* When defined to 1 check for SELinux and if SELinux is active, - don't attempt PROT_EXEC|PROT_WRITE mapping at all, as that - might cause audit messages. */ -# define FFI_MMAP_EXEC_SELINUX 1 -# endif -#endif - -#if FFI_CLOSURES - -# if FFI_EXEC_TRAMPOLINE_TABLE - -// Per-target implementation; It's unclear what can reasonable be shared between two OS/architecture implementations. - -# elif FFI_MMAP_EXEC_WRIT /* !FFI_EXEC_TRAMPOLINE_TABLE */ - -#define USE_LOCKS 1 -#define USE_DL_PREFIX 1 -#ifdef __GNUC__ -#ifndef USE_BUILTIN_FFS -#define USE_BUILTIN_FFS 1 -#endif -#endif - -/* We need to use mmap, not sbrk. */ -#define HAVE_MORECORE 0 - -/* We could, in theory, support mremap, but it wouldn't buy us anything. */ -#define HAVE_MREMAP 0 - -/* We have no use for this, so save some code and data. */ -#define NO_MALLINFO 1 - -/* We need all allocations to be in regular segments, otherwise we - lose track of the corresponding code address. */ -#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T - -/* Don't allocate more than a page unless needed. */ -#define DEFAULT_GRANULARITY ((size_t)malloc_getpagesize) - -#if FFI_CLOSURE_TEST -/* Don't release single pages, to avoid a worst-case scenario of - continuously allocating and releasing single pages, but release - pairs of pages, which should do just as well given that allocations - are likely to be small. */ -#define DEFAULT_TRIM_THRESHOLD ((size_t)malloc_getpagesize) -#endif - -#include -#include -#include -#include -#ifndef _MSC_VER -#include -#endif -#include -#include -#if !defined(X86_WIN32) && !defined(X86_WIN64) -#ifdef HAVE_MNTENT -#include -#endif /* HAVE_MNTENT */ -#include -#include - -/* We don't want sys/mman.h to be included after we redefine mmap and - dlmunmap. */ -#include -#define LACKS_SYS_MMAN_H 1 - -#if FFI_MMAP_EXEC_SELINUX -#include -#include - -static int selinux_enabled = -1; - -static int -selinux_enabled_check (void) -{ - struct statfs sfs; - FILE *f; - char *buf = NULL; - size_t len = 0; - - if (statfs ("/selinux", &sfs) >= 0 - && (unsigned int) sfs.f_type == 0xf97cff8cU) - return 1; - f = fopen ("/proc/mounts", "r"); - if (f == NULL) - return 0; - while (getline (&buf, &len, f) >= 0) - { - char *p = strchr (buf, ' '); - if (p == NULL) - break; - p = strchr (p + 1, ' '); - if (p == NULL) - break; - if (strncmp (p + 1, "selinuxfs ", 10) == 0) - { - free (buf); - fclose (f); - return 1; - } - } - free (buf); - fclose (f); - return 0; -} - -#define is_selinux_enabled() (selinux_enabled >= 0 ? selinux_enabled \ - : (selinux_enabled = selinux_enabled_check ())) - -#else - -#define is_selinux_enabled() 0 - -#endif /* !FFI_MMAP_EXEC_SELINUX */ - -#elif defined (__CYGWIN__) || defined(__INTERIX) - -#include - -/* Cygwin is Linux-like, but not quite that Linux-like. */ -#define is_selinux_enabled() 0 - -#endif /* !defined(X86_WIN32) && !defined(X86_WIN64) */ - -/* Declare all functions defined in dlmalloc.c as static. */ -static void *dlmalloc(size_t); -static void dlfree(void*); -static void *dlcalloc(size_t, size_t) MAYBE_UNUSED; -static void *dlrealloc(void *, size_t) MAYBE_UNUSED; -static void *dlmemalign(size_t, size_t) MAYBE_UNUSED; -static void *dlvalloc(size_t) MAYBE_UNUSED; -static int dlmallopt(int, int) MAYBE_UNUSED; -static size_t dlmalloc_footprint(void) MAYBE_UNUSED; -static size_t dlmalloc_max_footprint(void) MAYBE_UNUSED; -static void** dlindependent_calloc(size_t, size_t, void**) MAYBE_UNUSED; -static void** dlindependent_comalloc(size_t, size_t*, void**) MAYBE_UNUSED; -static void *dlpvalloc(size_t) MAYBE_UNUSED; -static int dlmalloc_trim(size_t) MAYBE_UNUSED; -static size_t dlmalloc_usable_size(void*) MAYBE_UNUSED; -static void dlmalloc_stats(void) MAYBE_UNUSED; - -#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) -/* Use these for mmap and munmap within dlmalloc.c. */ -static void *dlmmap(void *, size_t, int, int, int, off_t); -static int dlmunmap(void *, size_t); -#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) */ - -#define mmap dlmmap -#define munmap dlmunmap - -#include "dlmalloc.c" - -#undef mmap -#undef munmap - -#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) - -/* A mutex used to synchronize access to *exec* variables in this file. */ -static pthread_mutex_t open_temp_exec_file_mutex = PTHREAD_MUTEX_INITIALIZER; - -/* A file descriptor of a temporary file from which we'll map - executable pages. */ -static int execfd = -1; - -/* The amount of space already allocated from the temporary file. */ -static size_t execsize = 0; - -/* Open a temporary file name, and immediately unlink it. */ -static int -open_temp_exec_file_name (char *name) -{ - int fd = mkstemp (name); - - if (fd != -1) - unlink (name); - - return fd; -} - -/* Open a temporary file in the named directory. */ -static int -open_temp_exec_file_dir (const char *dir) -{ - static const char suffix[] = "/ffiXXXXXX"; - int lendir = strlen (dir); - char *tempname = __builtin_alloca (lendir + sizeof (suffix)); - - if (!tempname) - return -1; - - memcpy (tempname, dir, lendir); - memcpy (tempname + lendir, suffix, sizeof (suffix)); - - return open_temp_exec_file_name (tempname); -} - -/* Open a temporary file in the directory in the named environment - variable. */ -static int -open_temp_exec_file_env (const char *envvar) -{ - const char *value = getenv (envvar); - - if (!value) - return -1; - - return open_temp_exec_file_dir (value); -} - -#ifdef HAVE_MNTENT -/* Open a temporary file in an executable and writable mount point - listed in the mounts file. Subsequent calls with the same mounts - keep searching for mount points in the same file. Providing NULL - as the mounts file closes the file. */ -static int -open_temp_exec_file_mnt (const char *mounts) -{ - static const char *last_mounts; - static FILE *last_mntent; - - if (mounts != last_mounts) - { - if (last_mntent) - endmntent (last_mntent); - - last_mounts = mounts; - - if (mounts) - last_mntent = setmntent (mounts, "r"); - else - last_mntent = NULL; - } - - if (!last_mntent) - return -1; - - for (;;) - { - int fd; - struct mntent mnt; - char buf[MAXPATHLEN * 3]; - - if (getmntent_r (last_mntent, &mnt, buf, sizeof (buf)) == NULL) - return -1; - - if (hasmntopt (&mnt, "ro") - || hasmntopt (&mnt, "noexec") - || access (mnt.mnt_dir, W_OK)) - continue; - - fd = open_temp_exec_file_dir (mnt.mnt_dir); - - if (fd != -1) - return fd; - } -} -#endif /* HAVE_MNTENT */ - -/* Instructions to look for a location to hold a temporary file that - can be mapped in for execution. */ -static struct -{ - int (*func)(const char *); - const char *arg; - int repeat; -} open_temp_exec_file_opts[] = { - { open_temp_exec_file_env, "TMPDIR", 0 }, - { open_temp_exec_file_dir, "/tmp", 0 }, - { open_temp_exec_file_dir, "/var/tmp", 0 }, - { open_temp_exec_file_dir, "/dev/shm", 0 }, - { open_temp_exec_file_env, "HOME", 0 }, -#ifdef HAVE_MNTENT - { open_temp_exec_file_mnt, "/etc/mtab", 1 }, - { open_temp_exec_file_mnt, "/proc/mounts", 1 }, -#endif /* HAVE_MNTENT */ -}; - -/* Current index into open_temp_exec_file_opts. */ -static int open_temp_exec_file_opts_idx = 0; - -/* Reset a current multi-call func, then advances to the next entry. - If we're at the last, go back to the first and return nonzero, - otherwise return zero. */ -static int -open_temp_exec_file_opts_next (void) -{ - if (open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat) - open_temp_exec_file_opts[open_temp_exec_file_opts_idx].func (NULL); - - open_temp_exec_file_opts_idx++; - if (open_temp_exec_file_opts_idx - == (sizeof (open_temp_exec_file_opts) - / sizeof (*open_temp_exec_file_opts))) - { - open_temp_exec_file_opts_idx = 0; - return 1; - } - - return 0; -} - -/* Return a file descriptor of a temporary zero-sized file in a - writable and exexutable filesystem. */ -static int -open_temp_exec_file (void) -{ - int fd; - - do - { - fd = open_temp_exec_file_opts[open_temp_exec_file_opts_idx].func - (open_temp_exec_file_opts[open_temp_exec_file_opts_idx].arg); - - if (!open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat - || fd == -1) - { - if (open_temp_exec_file_opts_next ()) - break; - } - } - while (fd == -1); - - return fd; -} - -/* Map in a chunk of memory from the temporary exec file into separate - locations in the virtual memory address space, one writable and one - executable. Returns the address of the writable portion, after - storing an offset to the corresponding executable portion at the - last word of the requested chunk. */ -static void * -dlmmap_locked (void *start, size_t length, int prot, int flags, off_t offset) -{ - void *ptr; - - if (execfd == -1) - { - open_temp_exec_file_opts_idx = 0; - retry_open: - execfd = open_temp_exec_file (); - if (execfd == -1) - return MFAIL; - } - - offset = execsize; - - if (ftruncate (execfd, offset + length)) - return MFAIL; - - flags &= ~(MAP_PRIVATE | MAP_ANONYMOUS); - flags |= MAP_SHARED; - - ptr = mmap (NULL, length, (prot & ~PROT_WRITE) | PROT_EXEC, - flags, execfd, offset); - if (ptr == MFAIL) - { - if (!offset) - { - close (execfd); - goto retry_open; - } - ftruncate (execfd, offset); - return MFAIL; - } - else if (!offset - && open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat) - open_temp_exec_file_opts_next (); - - start = mmap (start, length, prot, flags, execfd, offset); - - if (start == MFAIL) - { - munmap (ptr, length); - ftruncate (execfd, offset); - return start; - } - - mmap_exec_offset ((char *)start, length) = (char*)ptr - (char*)start; - - execsize += length; - - return start; -} - -/* Map in a writable and executable chunk of memory if possible. - Failing that, fall back to dlmmap_locked. */ -static void * -dlmmap (void *start, size_t length, int prot, - int flags, int fd, off_t offset) -{ - void *ptr; - - assert (start == NULL && length % malloc_getpagesize == 0 - && prot == (PROT_READ | PROT_WRITE) - && flags == (MAP_PRIVATE | MAP_ANONYMOUS) - && fd == -1 && offset == 0); - -#if FFI_CLOSURE_TEST - printf ("mapping in %zi\n", length); -#endif - - if (execfd == -1 && !is_selinux_enabled ()) - { - ptr = mmap (start, length, prot | PROT_EXEC, flags, fd, offset); - - if (ptr != MFAIL || (errno != EPERM && errno != EACCES)) - /* Cool, no need to mess with separate segments. */ - return ptr; - - /* If MREMAP_DUP is ever introduced and implemented, try mmap - with ((prot & ~PROT_WRITE) | PROT_EXEC) and mremap with - MREMAP_DUP and prot at this point. */ - } - - if (execsize == 0 || execfd == -1) - { - pthread_mutex_lock (&open_temp_exec_file_mutex); - ptr = dlmmap_locked (start, length, prot, flags, offset); - pthread_mutex_unlock (&open_temp_exec_file_mutex); - - return ptr; - } - - return dlmmap_locked (start, length, prot, flags, offset); -} - -/* Release memory at the given address, as well as the corresponding - executable page if it's separate. */ -static int -dlmunmap (void *start, size_t length) -{ - /* We don't bother decreasing execsize or truncating the file, since - we can't quite tell whether we're unmapping the end of the file. - We don't expect frequent deallocation anyway. If we did, we - could locate pages in the file by writing to the pages being - deallocated and checking that the file contents change. - Yuck. */ - msegmentptr seg = segment_holding (gm, start); - void *code; - -#if FFI_CLOSURE_TEST - printf ("unmapping %zi\n", length); -#endif - - if (seg && (code = add_segment_exec_offset (start, seg)) != start) - { - int ret = munmap (code, length); - if (ret) - return ret; - } - - return munmap (start, length); -} - -#if FFI_CLOSURE_FREE_CODE -/* Return segment holding given code address. */ -static msegmentptr -segment_holding_code (mstate m, char* addr) -{ - msegmentptr sp = &m->seg; - for (;;) { - if (addr >= add_segment_exec_offset (sp->base, sp) - && addr < add_segment_exec_offset (sp->base, sp) + sp->size) - return sp; - if ((sp = sp->next) == 0) - return 0; - } -} -#endif - -#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) */ - -/* Allocate a chunk of memory with the given size. Returns a pointer - to the writable address, and sets *CODE to the executable - corresponding virtual address. */ -void * -ffi_closure_alloc (size_t size, void **code) -{ - void *ptr; - - if (!code) - return NULL; - - ptr = dlmalloc (size); - - if (ptr) - { - msegmentptr seg = segment_holding (gm, ptr); - - *code = add_segment_exec_offset (ptr, seg); - } - - return ptr; -} - -/* Release a chunk of memory allocated with ffi_closure_alloc. If - FFI_CLOSURE_FREE_CODE is nonzero, the given address can be the - writable or the executable address given. Otherwise, only the - writable address can be provided here. */ -void -ffi_closure_free (void *ptr) -{ -#if FFI_CLOSURE_FREE_CODE - msegmentptr seg = segment_holding_code (gm, ptr); - - if (seg) - ptr = sub_segment_exec_offset (ptr, seg); -#endif - - dlfree (ptr); -} - - -#if FFI_CLOSURE_TEST -/* Do some internal sanity testing to make sure allocation and - deallocation of pages are working as intended. */ -int main () -{ - void *p[3]; -#define GET(idx, len) do { p[idx] = dlmalloc (len); printf ("allocated %zi for p[%i]\n", (len), (idx)); } while (0) -#define PUT(idx) do { printf ("freeing p[%i]\n", (idx)); dlfree (p[idx]); } while (0) - GET (0, malloc_getpagesize / 2); - GET (1, 2 * malloc_getpagesize - 64 * sizeof (void*)); - PUT (1); - GET (1, 2 * malloc_getpagesize); - GET (2, malloc_getpagesize / 2); - PUT (1); - PUT (0); - PUT (2); - return 0; -} -#endif /* FFI_CLOSURE_TEST */ -# else /* ! FFI_MMAP_EXEC_WRIT */ - -/* On many systems, memory returned by malloc is writable and - executable, so just use it. */ - -#include - -void * -ffi_closure_alloc (size_t size, void **code) -{ - if (!code) - return NULL; - - return *code = malloc (size); -} - -void -ffi_closure_free (void *ptr) -{ - free (ptr); -} - -# endif /* ! FFI_MMAP_EXEC_WRIT */ -#endif /* FFI_CLOSURES */ diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/cris/ffi.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/cris/ffi.c deleted file mode 100644 index f25d7b4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/cris/ffi.c +++ /dev/null @@ -1,383 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 1998 Cygnus Solutions - Copyright (c) 2004 Simon Posnjak - Copyright (c) 2005 Axis Communications AB - Copyright (C) 2007 Free Software Foundation, Inc. - - CRIS Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL SIMON POSNJAK BE LIABLE FOR ANY CLAIM, DAMAGES OR - OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#include -#include - -#define STACK_ARG_SIZE(x) ALIGN(x, FFI_SIZEOF_ARG) - -static ffi_status -initialize_aggregate_packed_struct (ffi_type * arg) -{ - ffi_type **ptr; - - FFI_ASSERT (arg != NULL); - - FFI_ASSERT (arg->elements != NULL); - FFI_ASSERT (arg->size == 0); - FFI_ASSERT (arg->alignment == 0); - - ptr = &(arg->elements[0]); - - while ((*ptr) != NULL) - { - if (((*ptr)->size == 0) - && (initialize_aggregate_packed_struct ((*ptr)) != FFI_OK)) - return FFI_BAD_TYPEDEF; - - FFI_ASSERT (ffi_type_test ((*ptr))); - - arg->size += (*ptr)->size; - - arg->alignment = (arg->alignment > (*ptr)->alignment) ? - arg->alignment : (*ptr)->alignment; - - ptr++; - } - - if (arg->size == 0) - return FFI_BAD_TYPEDEF; - else - return FFI_OK; -} - -int -ffi_prep_args (char *stack, extended_cif * ecif) -{ - unsigned int i; - unsigned int struct_count = 0; - void **p_argv; - char *argp; - ffi_type **p_arg; - - argp = stack; - - p_argv = ecif->avalue; - - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; - (i != 0); i--, p_arg++) - { - size_t z; - - switch ((*p_arg)->type) - { - case FFI_TYPE_STRUCT: - { - z = (*p_arg)->size; - if (z <= 4) - { - memcpy (argp, *p_argv, z); - z = 4; - } - else if (z <= 8) - { - memcpy (argp, *p_argv, z); - z = 8; - } - else - { - unsigned int uiLocOnStack; - z = sizeof (void *); - uiLocOnStack = 4 * ecif->cif->nargs + struct_count; - struct_count = struct_count + (*p_arg)->size; - *(unsigned int *) argp = - (unsigned int) (UINT32 *) (stack + uiLocOnStack); - memcpy ((stack + uiLocOnStack), *p_argv, (*p_arg)->size); - } - break; - } - default: - z = (*p_arg)->size; - if (z < sizeof (int)) - { - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(signed int *) argp = (signed int) *(SINT8 *) (*p_argv); - break; - - case FFI_TYPE_UINT8: - *(unsigned int *) argp = - (unsigned int) *(UINT8 *) (*p_argv); - break; - - case FFI_TYPE_SINT16: - *(signed int *) argp = (signed int) *(SINT16 *) (*p_argv); - break; - - case FFI_TYPE_UINT16: - *(unsigned int *) argp = - (unsigned int) *(UINT16 *) (*p_argv); - break; - - default: - FFI_ASSERT (0); - } - z = sizeof (int); - } - else if (z == sizeof (int)) - *(unsigned int *) argp = (unsigned int) *(UINT32 *) (*p_argv); - else - memcpy (argp, *p_argv, z); - break; - } - p_argv++; - argp += z; - } - - return (struct_count); -} - -ffi_status -ffi_prep_cif (ffi_cif * cif, - ffi_abi abi, unsigned int nargs, - ffi_type * rtype, ffi_type ** atypes) -{ - unsigned bytes = 0; - unsigned int i; - ffi_type **ptr; - - FFI_ASSERT (cif != NULL); - FFI_ASSERT (abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI); - - cif->abi = abi; - cif->arg_types = atypes; - cif->nargs = nargs; - cif->rtype = rtype; - - cif->flags = 0; - - if ((cif->rtype->size == 0) - && (initialize_aggregate_packed_struct (cif->rtype) != FFI_OK)) - return FFI_BAD_TYPEDEF; - - FFI_ASSERT_VALID_TYPE (cif->rtype); - - for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) - { - if (((*ptr)->size == 0) - && (initialize_aggregate_packed_struct ((*ptr)) != FFI_OK)) - return FFI_BAD_TYPEDEF; - - FFI_ASSERT_VALID_TYPE (*ptr); - - if (((*ptr)->alignment - 1) & bytes) - bytes = ALIGN (bytes, (*ptr)->alignment); - if ((*ptr)->type == FFI_TYPE_STRUCT) - { - if ((*ptr)->size > 8) - { - bytes += (*ptr)->size; - bytes += sizeof (void *); - } - else - { - if ((*ptr)->size > 4) - bytes += 8; - else - bytes += 4; - } - } - else - bytes += STACK_ARG_SIZE ((*ptr)->size); - } - - cif->bytes = bytes; - - return ffi_prep_cif_machdep (cif); -} - -ffi_status -ffi_prep_cif_machdep (ffi_cif * cif) -{ - switch (cif->rtype->type) - { - case FFI_TYPE_VOID: - case FFI_TYPE_STRUCT: - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - cif->flags = (unsigned) cif->rtype->type; - break; - - default: - cif->flags = FFI_TYPE_INT; - break; - } - - return FFI_OK; -} - -extern void ffi_call_SYSV (int (*)(char *, extended_cif *), - extended_cif *, - unsigned, unsigned, unsigned *, void (*fn) ()) - __attribute__ ((__visibility__ ("hidden"))); - -void -ffi_call (ffi_cif * cif, void (*fn) (), void *rvalue, void **avalue) -{ - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - - if ((rvalue == NULL) && (cif->rtype->type == FFI_TYPE_STRUCT)) - { - ecif.rvalue = alloca (cif->rtype->size); - } - else - ecif.rvalue = rvalue; - - switch (cif->abi) - { - case FFI_SYSV: - ffi_call_SYSV (ffi_prep_args, &ecif, cif->bytes, - cif->flags, ecif.rvalue, fn); - break; - default: - FFI_ASSERT (0); - break; - } -} - -/* Because the following variables are not exported outside libffi, we - mark them hidden. */ - -/* Assembly code for the jump stub. */ -extern const char ffi_cris_trampoline_template[] - __attribute__ ((__visibility__ ("hidden"))); - -/* Offset into ffi_cris_trampoline_template of where to put the - ffi_prep_closure_inner function. */ -extern const int ffi_cris_trampoline_fn_offset - __attribute__ ((__visibility__ ("hidden"))); - -/* Offset into ffi_cris_trampoline_template of where to put the - closure data. */ -extern const int ffi_cris_trampoline_closure_offset - __attribute__ ((__visibility__ ("hidden"))); - -/* This function is sibling-called (jumped to) by the closure - trampoline. We get R10..R13 at PARAMS[0..3] and a copy of [SP] at - PARAMS[4] to simplify handling of a straddling parameter. A copy - of R9 is at PARAMS[5] and SP at PARAMS[6]. These parameters are - put at the appropriate place in CLOSURE which is then executed and - the return value is passed back to the caller. */ - -static unsigned long long -ffi_prep_closure_inner (void **params, ffi_closure* closure) -{ - char *register_args = (char *) params; - void *struct_ret = params[5]; - char *stack_args = params[6]; - char *ptr = register_args; - ffi_cif *cif = closure->cif; - ffi_type **arg_types = cif->arg_types; - - /* Max room needed is number of arguments as 64-bit values. */ - void **avalue = alloca (closure->cif->nargs * sizeof(void *)); - int i; - int doing_regs; - long long llret = 0; - - /* Find the address of each argument. */ - for (i = 0, doing_regs = 1; i < cif->nargs; i++) - { - /* Types up to and including 8 bytes go by-value. */ - if (arg_types[i]->size <= 4) - { - avalue[i] = ptr; - ptr += 4; - } - else if (arg_types[i]->size <= 8) - { - avalue[i] = ptr; - ptr += 8; - } - else - { - FFI_ASSERT (arg_types[i]->type == FFI_TYPE_STRUCT); - - /* Passed by-reference, so copy the pointer. */ - avalue[i] = *(void **) ptr; - ptr += 4; - } - - /* If we've handled more arguments than fit in registers, start - looking at the those passed on the stack. Step over the - first one if we had a straddling parameter. */ - if (doing_regs && ptr >= register_args + 4*4) - { - ptr = stack_args + ((ptr > register_args + 4*4) ? 4 : 0); - doing_regs = 0; - } - } - - /* Invoke the closure. */ - (closure->fun) (cif, - - cif->rtype->type == FFI_TYPE_STRUCT - /* The caller allocated space for the return - structure, and passed a pointer to this space in - R9. */ - ? struct_ret - - /* We take advantage of being able to ignore that - the high part isn't set if the return value is - not in R10:R11, but in R10 only. */ - : (void *) &llret, - - avalue, closure->user_data); - - return llret; -} - -/* API function: Prepare the trampoline. */ - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif *, void *, void **, void*), - void *user_data, - void *codeloc) -{ - void *innerfn = ffi_prep_closure_inner; - FFI_ASSERT (cif->abi == FFI_SYSV); - closure->cif = cif; - closure->user_data = user_data; - closure->fun = fun; - memcpy (closure->tramp, ffi_cris_trampoline_template, - FFI_CRIS_TRAMPOLINE_CODE_PART_SIZE); - memcpy (closure->tramp + ffi_cris_trampoline_fn_offset, - &innerfn, sizeof (void *)); - memcpy (closure->tramp + ffi_cris_trampoline_closure_offset, - &codeloc, sizeof (void *)); - - return FFI_OK; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/cris/ffitarget.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/cris/ffitarget.h deleted file mode 100644 index 0e3705d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/cris/ffitarget.h +++ /dev/null @@ -1,51 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. - Target configuration macros for CRIS. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_SYSV, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_SYSV -} ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_CRIS_TRAMPOLINE_CODE_PART_SIZE 36 -#define FFI_CRIS_TRAMPOLINE_DATA_PART_SIZE (7*4) -#define FFI_TRAMPOLINE_SIZE \ - (FFI_CRIS_TRAMPOLINE_CODE_PART_SIZE + FFI_CRIS_TRAMPOLINE_DATA_PART_SIZE) -#define FFI_NATIVE_RAW_API 0 - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/cris/sysv.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/cris/sysv.S deleted file mode 100644 index 79abaee..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/cris/sysv.S +++ /dev/null @@ -1,215 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 2004 Simon Posnjak - Copyright (c) 2005 Axis Communications AB - - CRIS Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL SIMON POSNJAK BE LIABLE FOR ANY CLAIM, DAMAGES OR - OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#define CONCAT(x,y) x ## y -#define XCONCAT(x,y) CONCAT (x, y) -#define L(x) XCONCAT (__USER_LABEL_PREFIX__, x) - - .text - - ;; OK, when we get called we should have this (according to - ;; AXIS ETRAX 100LX Programmer's Manual chapter 6.3). - ;; - ;; R10: ffi_prep_args (func. pointer) - ;; R11: &ecif - ;; R12: cif->bytes - ;; R13: fig->flags - ;; sp+0: ecif.rvalue - ;; sp+4: fn (function pointer to the function that we need to call) - - .globl L(ffi_call_SYSV) - .type L(ffi_call_SYSV),@function - .hidden L(ffi_call_SYSV) - -L(ffi_call_SYSV): - ;; Save the regs to the stack. - push $srp - ;; Used for stack pointer saving. - push $r6 - ;; Used for function address pointer. - push $r7 - ;; Used for stack pointer saving. - push $r8 - ;; We save fig->flags to stack we will need them after we - ;; call The Function. - push $r13 - - ;; Saving current stack pointer. - move.d $sp,$r8 - move.d $sp,$r6 - - ;; Move address of ffi_prep_args to r13. - move.d $r10,$r13 - - ;; Make room on the stack for the args of fn. - sub.d $r12,$sp - - ;; Function void ffi_prep_args(char *stack, extended_cif *ecif) parameters are: - ;; r10 <-- stack pointer - ;; r11 <-- &ecif (already there) - move.d $sp,$r10 - - ;; Call the function. - jsr $r13 - - ;; Save the size of the structures which are passed on stack. - move.d $r10,$r7 - - ;; Move first four args in to r10..r13. - move.d [$sp+0],$r10 - move.d [$sp+4],$r11 - move.d [$sp+8],$r12 - move.d [$sp+12],$r13 - - ;; Adjust the stack and check if any parameters are given on stack. - addq 16,$sp - sub.d $r7,$r6 - cmp.d $sp,$r6 - - bpl go_on - nop - -go_on_no_params_on_stack: - move.d $r6,$sp - -go_on: - ;; Discover if we need to put rval address in to r9. - move.d [$r8+0],$r7 - cmpq FFI_TYPE_STRUCT,$r7 - bne call_now - nop - - ;; Move rval address to $r9. - move.d [$r8+20],$r9 - -call_now: - ;; Move address of The Function in to r7. - move.d [$r8+24],$r7 - - ;; Call The Function. - jsr $r7 - - ;; Reset stack. - move.d $r8,$sp - - ;; Load rval type (fig->flags) in to r13. - pop $r13 - - ;; Detect rval type. - cmpq FFI_TYPE_VOID,$r13 - beq epilogue - - cmpq FFI_TYPE_STRUCT,$r13 - beq epilogue - - cmpq FFI_TYPE_DOUBLE,$r13 - beq return_double_or_longlong - - cmpq FFI_TYPE_UINT64,$r13 - beq return_double_or_longlong - - cmpq FFI_TYPE_SINT64,$r13 - beq return_double_or_longlong - nop - - ;; Just return the 32 bit value. - ba return - nop - -return_double_or_longlong: - ;; Load half of the rval to r10 and the other half to r11. - move.d [$sp+16],$r13 - move.d $r10,[$r13] - addq 4,$r13 - move.d $r11,[$r13] - ba epilogue - nop - -return: - ;; Load the rval to r10. - move.d [$sp+16],$r13 - move.d $r10,[$r13] - -epilogue: - pop $r8 - pop $r7 - pop $r6 - Jump [$sp+] - - .size ffi_call_SYSV,.-ffi_call_SYSV - -/* Save R10..R13 into an array, somewhat like varargs. Copy the next - argument too, to simplify handling of any straddling parameter. - Save R9 and SP after those. Jump to function handling the rest. - Since this is a template, copied and the main function filled in by - the user. */ - - .globl L(ffi_cris_trampoline_template) - .type L(ffi_cris_trampoline_template),@function - .hidden L(ffi_cris_trampoline_template) - -L(ffi_cris_trampoline_template): -0: - /* The value we get for "PC" is right after the prefix instruction, - two bytes from the beginning, i.e. 0b+2. */ - move.d $r10,[$pc+2f-(0b+2)] - move.d $pc,$r10 -1: - addq 2f-1b+4,$r10 - move.d $r11,[$r10+] - move.d $r12,[$r10+] - move.d $r13,[$r10+] - move.d [$sp],$r11 - move.d $r11,[$r10+] - move.d $r9,[$r10+] - move.d $sp,[$r10+] - subq FFI_CRIS_TRAMPOLINE_DATA_PART_SIZE,$r10 - move.d 0,$r11 -3: - jump 0 -2: - .size ffi_cris_trampoline_template,.-0b - -/* This macro create a constant usable as "extern const int \name" in - C from within libffi, when \name has no prefix decoration. */ - - .macro const name,value - .globl \name - .type \name,@object - .hidden \name -\name: - .dword \value - .size \name,4 - .endm - -/* Constants for offsets within the trampoline. We could do this with - just symbols, avoiding memory contents and memory accesses, but the - C usage code would look a bit stranger. */ - - const L(ffi_cris_trampoline_fn_offset),2b-4-0b - const L(ffi_cris_trampoline_closure_offset),3b-4-0b diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/debug.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/debug.c deleted file mode 100644 index 51dcfcf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/debug.c +++ /dev/null @@ -1,59 +0,0 @@ -/* ----------------------------------------------------------------------- - debug.c - Copyright (c) 1996 Red Hat, Inc. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#include -#include -#include -#include - -/* General debugging routines */ - -void ffi_stop_here(void) -{ - /* This function is only useful for debugging purposes. - Place a breakpoint on ffi_stop_here to be notified of - significant events. */ -} - -/* This function should only be called via the FFI_ASSERT() macro */ - -void ffi_assert(char *expr, char *file, int line) -{ - fprintf(stderr, "ASSERTION FAILURE: %s at %s:%d\n", expr, file, line); - ffi_stop_here(); - abort(); -} - -/* Perform a sanity check on an ffi_type structure */ - -void ffi_type_test(ffi_type *a, char *file, int line) -{ - FFI_ASSERT_AT(a != NULL, file, line); - - FFI_ASSERT_AT(a->type <= FFI_TYPE_LAST, file, line); - FFI_ASSERT_AT(a->type == FFI_TYPE_VOID || a->size > 0, file, line); - FFI_ASSERT_AT(a->type == FFI_TYPE_VOID || a->alignment > 0, file, line); - FFI_ASSERT_AT(a->type != FFI_TYPE_STRUCT || a->elements != NULL, file, line); - -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/dlmalloc.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/dlmalloc.c deleted file mode 100644 index 5c9f9c2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/dlmalloc.c +++ /dev/null @@ -1,5161 +0,0 @@ -/* - This is a version (aka dlmalloc) of malloc/free/realloc written by - Doug Lea and released to the public domain, as explained at - http://creativecommons.org/licenses/publicdomain. Send questions, - comments, complaints, performance data, etc to dl@cs.oswego.edu - -* Version 2.8.3 Thu Sep 22 11:16:15 2005 Doug Lea (dl at gee) - - Note: There may be an updated version of this malloc obtainable at - ftp://gee.cs.oswego.edu/pub/misc/malloc.c - Check before installing! - -* Quickstart - - This library is all in one file to simplify the most common usage: - ftp it, compile it (-O3), and link it into another program. All of - the compile-time options default to reasonable values for use on - most platforms. You might later want to step through various - compile-time and dynamic tuning options. - - For convenience, an include file for code using this malloc is at: - ftp://gee.cs.oswego.edu/pub/misc/malloc-2.8.3.h - You don't really need this .h file unless you call functions not - defined in your system include files. The .h file contains only the - excerpts from this file needed for using this malloc on ANSI C/C++ - systems, so long as you haven't changed compile-time options about - naming and tuning parameters. If you do, then you can create your - own malloc.h that does include all settings by cutting at the point - indicated below. Note that you may already by default be using a C - library containing a malloc that is based on some version of this - malloc (for example in linux). You might still want to use the one - in this file to customize settings or to avoid overheads associated - with library versions. - -* Vital statistics: - - Supported pointer/size_t representation: 4 or 8 bytes - size_t MUST be an unsigned type of the same width as - pointers. (If you are using an ancient system that declares - size_t as a signed type, or need it to be a different width - than pointers, you can use a previous release of this malloc - (e.g. 2.7.2) supporting these.) - - Alignment: 8 bytes (default) - This suffices for nearly all current machines and C compilers. - However, you can define MALLOC_ALIGNMENT to be wider than this - if necessary (up to 128bytes), at the expense of using more space. - - Minimum overhead per allocated chunk: 4 or 8 bytes (if 4byte sizes) - 8 or 16 bytes (if 8byte sizes) - Each malloced chunk has a hidden word of overhead holding size - and status information, and additional cross-check word - if FOOTERS is defined. - - Minimum allocated size: 4-byte ptrs: 16 bytes (including overhead) - 8-byte ptrs: 32 bytes (including overhead) - - Even a request for zero bytes (i.e., malloc(0)) returns a - pointer to something of the minimum allocatable size. - The maximum overhead wastage (i.e., number of extra bytes - allocated than were requested in malloc) is less than or equal - to the minimum size, except for requests >= mmap_threshold that - are serviced via mmap(), where the worst case wastage is about - 32 bytes plus the remainder from a system page (the minimal - mmap unit); typically 4096 or 8192 bytes. - - Security: static-safe; optionally more or less - The "security" of malloc refers to the ability of malicious - code to accentuate the effects of errors (for example, freeing - space that is not currently malloc'ed or overwriting past the - ends of chunks) in code that calls malloc. This malloc - guarantees not to modify any memory locations below the base of - heap, i.e., static variables, even in the presence of usage - errors. The routines additionally detect most improper frees - and reallocs. All this holds as long as the static bookkeeping - for malloc itself is not corrupted by some other means. This - is only one aspect of security -- these checks do not, and - cannot, detect all possible programming errors. - - If FOOTERS is defined nonzero, then each allocated chunk - carries an additional check word to verify that it was malloced - from its space. These check words are the same within each - execution of a program using malloc, but differ across - executions, so externally crafted fake chunks cannot be - freed. This improves security by rejecting frees/reallocs that - could corrupt heap memory, in addition to the checks preventing - writes to statics that are always on. This may further improve - security at the expense of time and space overhead. (Note that - FOOTERS may also be worth using with MSPACES.) - - By default detected errors cause the program to abort (calling - "abort()"). You can override this to instead proceed past - errors by defining PROCEED_ON_ERROR. In this case, a bad free - has no effect, and a malloc that encounters a bad address - caused by user overwrites will ignore the bad address by - dropping pointers and indices to all known memory. This may - be appropriate for programs that should continue if at all - possible in the face of programming errors, although they may - run out of memory because dropped memory is never reclaimed. - - If you don't like either of these options, you can define - CORRUPTION_ERROR_ACTION and USAGE_ERROR_ACTION to do anything - else. And if if you are sure that your program using malloc has - no errors or vulnerabilities, you can define INSECURE to 1, - which might (or might not) provide a small performance improvement. - - Thread-safety: NOT thread-safe unless USE_LOCKS defined - When USE_LOCKS is defined, each public call to malloc, free, - etc is surrounded with either a pthread mutex or a win32 - spinlock (depending on WIN32). This is not especially fast, and - can be a major bottleneck. It is designed only to provide - minimal protection in concurrent environments, and to provide a - basis for extensions. If you are using malloc in a concurrent - program, consider instead using ptmalloc, which is derived from - a version of this malloc. (See http://www.malloc.de). - - System requirements: Any combination of MORECORE and/or MMAP/MUNMAP - This malloc can use unix sbrk or any emulation (invoked using - the CALL_MORECORE macro) and/or mmap/munmap or any emulation - (invoked using CALL_MMAP/CALL_MUNMAP) to get and release system - memory. On most unix systems, it tends to work best if both - MORECORE and MMAP are enabled. On Win32, it uses emulations - based on VirtualAlloc. It also uses common C library functions - like memset. - - Compliance: I believe it is compliant with the Single Unix Specification - (See http://www.unix.org). Also SVID/XPG, ANSI C, and probably - others as well. - -* Overview of algorithms - - This is not the fastest, most space-conserving, most portable, or - most tunable malloc ever written. However it is among the fastest - while also being among the most space-conserving, portable and - tunable. Consistent balance across these factors results in a good - general-purpose allocator for malloc-intensive programs. - - In most ways, this malloc is a best-fit allocator. Generally, it - chooses the best-fitting existing chunk for a request, with ties - broken in approximately least-recently-used order. (This strategy - normally maintains low fragmentation.) However, for requests less - than 256bytes, it deviates from best-fit when there is not an - exactly fitting available chunk by preferring to use space adjacent - to that used for the previous small request, as well as by breaking - ties in approximately most-recently-used order. (These enhance - locality of series of small allocations.) And for very large requests - (>= 256Kb by default), it relies on system memory mapping - facilities, if supported. (This helps avoid carrying around and - possibly fragmenting memory used only for large chunks.) - - All operations (except malloc_stats and mallinfo) have execution - times that are bounded by a constant factor of the number of bits in - a size_t, not counting any clearing in calloc or copying in realloc, - or actions surrounding MORECORE and MMAP that have times - proportional to the number of non-contiguous regions returned by - system allocation routines, which is often just 1. - - The implementation is not very modular and seriously overuses - macros. Perhaps someday all C compilers will do as good a job - inlining modular code as can now be done by brute-force expansion, - but now, enough of them seem not to. - - Some compilers issue a lot of warnings about code that is - dead/unreachable only on some platforms, and also about intentional - uses of negation on unsigned types. All known cases of each can be - ignored. - - For a longer but out of date high-level description, see - http://gee.cs.oswego.edu/dl/html/malloc.html - -* MSPACES - If MSPACES is defined, then in addition to malloc, free, etc., - this file also defines mspace_malloc, mspace_free, etc. These - are versions of malloc routines that take an "mspace" argument - obtained using create_mspace, to control all internal bookkeeping. - If ONLY_MSPACES is defined, only these versions are compiled. - So if you would like to use this allocator for only some allocations, - and your system malloc for others, you can compile with - ONLY_MSPACES and then do something like... - static mspace mymspace = create_mspace(0,0); // for example - #define mymalloc(bytes) mspace_malloc(mymspace, bytes) - - (Note: If you only need one instance of an mspace, you can instead - use "USE_DL_PREFIX" to relabel the global malloc.) - - You can similarly create thread-local allocators by storing - mspaces as thread-locals. For example: - static __thread mspace tlms = 0; - void* tlmalloc(size_t bytes) { - if (tlms == 0) tlms = create_mspace(0, 0); - return mspace_malloc(tlms, bytes); - } - void tlfree(void* mem) { mspace_free(tlms, mem); } - - Unless FOOTERS is defined, each mspace is completely independent. - You cannot allocate from one and free to another (although - conformance is only weakly checked, so usage errors are not always - caught). If FOOTERS is defined, then each chunk carries around a tag - indicating its originating mspace, and frees are directed to their - originating spaces. - - ------------------------- Compile-time options --------------------------- - -Be careful in setting #define values for numerical constants of type -size_t. On some systems, literal values are not automatically extended -to size_t precision unless they are explicitly casted. - -WIN32 default: defined if _WIN32 defined - Defining WIN32 sets up defaults for MS environment and compilers. - Otherwise defaults are for unix. - -MALLOC_ALIGNMENT default: (size_t)8 - Controls the minimum alignment for malloc'ed chunks. It must be a - power of two and at least 8, even on machines for which smaller - alignments would suffice. It may be defined as larger than this - though. Note however that code and data structures are optimized for - the case of 8-byte alignment. - -MSPACES default: 0 (false) - If true, compile in support for independent allocation spaces. - This is only supported if HAVE_MMAP is true. - -ONLY_MSPACES default: 0 (false) - If true, only compile in mspace versions, not regular versions. - -USE_LOCKS default: 0 (false) - Causes each call to each public routine to be surrounded with - pthread or WIN32 mutex lock/unlock. (If set true, this can be - overridden on a per-mspace basis for mspace versions.) - -FOOTERS default: 0 - If true, provide extra checking and dispatching by placing - information in the footers of allocated chunks. This adds - space and time overhead. - -INSECURE default: 0 - If true, omit checks for usage errors and heap space overwrites. - -USE_DL_PREFIX default: NOT defined - Causes compiler to prefix all public routines with the string 'dl'. - This can be useful when you only want to use this malloc in one part - of a program, using your regular system malloc elsewhere. - -ABORT default: defined as abort() - Defines how to abort on failed checks. On most systems, a failed - check cannot die with an "assert" or even print an informative - message, because the underlying print routines in turn call malloc, - which will fail again. Generally, the best policy is to simply call - abort(). It's not very useful to do more than this because many - errors due to overwriting will show up as address faults (null, odd - addresses etc) rather than malloc-triggered checks, so will also - abort. Also, most compilers know that abort() does not return, so - can better optimize code conditionally calling it. - -PROCEED_ON_ERROR default: defined as 0 (false) - Controls whether detected bad addresses cause them to bypassed - rather than aborting. If set, detected bad arguments to free and - realloc are ignored. And all bookkeeping information is zeroed out - upon a detected overwrite of freed heap space, thus losing the - ability to ever return it from malloc again, but enabling the - application to proceed. If PROCEED_ON_ERROR is defined, the - static variable malloc_corruption_error_count is compiled in - and can be examined to see if errors have occurred. This option - generates slower code than the default abort policy. - -DEBUG default: NOT defined - The DEBUG setting is mainly intended for people trying to modify - this code or diagnose problems when porting to new platforms. - However, it may also be able to better isolate user errors than just - using runtime checks. The assertions in the check routines spell - out in more detail the assumptions and invariants underlying the - algorithms. The checking is fairly extensive, and will slow down - execution noticeably. Calling malloc_stats or mallinfo with DEBUG - set will attempt to check every non-mmapped allocated and free chunk - in the course of computing the summaries. - -ABORT_ON_ASSERT_FAILURE default: defined as 1 (true) - Debugging assertion failures can be nearly impossible if your - version of the assert macro causes malloc to be called, which will - lead to a cascade of further failures, blowing the runtime stack. - ABORT_ON_ASSERT_FAILURE cause assertions failures to call abort(), - which will usually make debugging easier. - -MALLOC_FAILURE_ACTION default: sets errno to ENOMEM, or no-op on win32 - The action to take before "return 0" when malloc fails to be able to - return memory because there is none available. - -HAVE_MORECORE default: 1 (true) unless win32 or ONLY_MSPACES - True if this system supports sbrk or an emulation of it. - -MORECORE default: sbrk - The name of the sbrk-style system routine to call to obtain more - memory. See below for guidance on writing custom MORECORE - functions. The type of the argument to sbrk/MORECORE varies across - systems. It cannot be size_t, because it supports negative - arguments, so it is normally the signed type of the same width as - size_t (sometimes declared as "intptr_t"). It doesn't much matter - though. Internally, we only call it with arguments less than half - the max value of a size_t, which should work across all reasonable - possibilities, although sometimes generating compiler warnings. See - near the end of this file for guidelines for creating a custom - version of MORECORE. - -MORECORE_CONTIGUOUS default: 1 (true) - If true, take advantage of fact that consecutive calls to MORECORE - with positive arguments always return contiguous increasing - addresses. This is true of unix sbrk. It does not hurt too much to - set it true anyway, since malloc copes with non-contiguities. - Setting it false when definitely non-contiguous saves time - and possibly wasted space it would take to discover this though. - -MORECORE_CANNOT_TRIM default: NOT defined - True if MORECORE cannot release space back to the system when given - negative arguments. This is generally necessary only if you are - using a hand-crafted MORECORE function that cannot handle negative - arguments. - -HAVE_MMAP default: 1 (true) - True if this system supports mmap or an emulation of it. If so, and - HAVE_MORECORE is not true, MMAP is used for all system - allocation. If set and HAVE_MORECORE is true as well, MMAP is - primarily used to directly allocate very large blocks. It is also - used as a backup strategy in cases where MORECORE fails to provide - space from system. Note: A single call to MUNMAP is assumed to be - able to unmap memory that may have be allocated using multiple calls - to MMAP, so long as they are adjacent. - -HAVE_MREMAP default: 1 on linux, else 0 - If true realloc() uses mremap() to re-allocate large blocks and - extend or shrink allocation spaces. - -MMAP_CLEARS default: 1 on unix - True if mmap clears memory so calloc doesn't need to. This is true - for standard unix mmap using /dev/zero. - -USE_BUILTIN_FFS default: 0 (i.e., not used) - Causes malloc to use the builtin ffs() function to compute indices. - Some compilers may recognize and intrinsify ffs to be faster than the - supplied C version. Also, the case of x86 using gcc is special-cased - to an asm instruction, so is already as fast as it can be, and so - this setting has no effect. (On most x86s, the asm version is only - slightly faster than the C version.) - -malloc_getpagesize default: derive from system includes, or 4096. - The system page size. To the extent possible, this malloc manages - memory from the system in page-size units. This may be (and - usually is) a function rather than a constant. This is ignored - if WIN32, where page size is determined using getSystemInfo during - initialization. - -USE_DEV_RANDOM default: 0 (i.e., not used) - Causes malloc to use /dev/random to initialize secure magic seed for - stamping footers. Otherwise, the current time is used. - -NO_MALLINFO default: 0 - If defined, don't compile "mallinfo". This can be a simple way - of dealing with mismatches between system declarations and - those in this file. - -MALLINFO_FIELD_TYPE default: size_t - The type of the fields in the mallinfo struct. This was originally - defined as "int" in SVID etc, but is more usefully defined as - size_t. The value is used only if HAVE_USR_INCLUDE_MALLOC_H is not set - -REALLOC_ZERO_BYTES_FREES default: not defined - This should be set if a call to realloc with zero bytes should - be the same as a call to free. Some people think it should. Otherwise, - since this malloc returns a unique pointer for malloc(0), so does - realloc(p, 0). - -LACKS_UNISTD_H, LACKS_FCNTL_H, LACKS_SYS_PARAM_H, LACKS_SYS_MMAN_H -LACKS_STRINGS_H, LACKS_STRING_H, LACKS_SYS_TYPES_H, LACKS_ERRNO_H -LACKS_STDLIB_H default: NOT defined unless on WIN32 - Define these if your system does not have these header files. - You might need to manually insert some of the declarations they provide. - -DEFAULT_GRANULARITY default: page size if MORECORE_CONTIGUOUS, - system_info.dwAllocationGranularity in WIN32, - otherwise 64K. - Also settable using mallopt(M_GRANULARITY, x) - The unit for allocating and deallocating memory from the system. On - most systems with contiguous MORECORE, there is no reason to - make this more than a page. However, systems with MMAP tend to - either require or encourage larger granularities. You can increase - this value to prevent system allocation functions to be called so - often, especially if they are slow. The value must be at least one - page and must be a power of two. Setting to 0 causes initialization - to either page size or win32 region size. (Note: In previous - versions of malloc, the equivalent of this option was called - "TOP_PAD") - -DEFAULT_TRIM_THRESHOLD default: 2MB - Also settable using mallopt(M_TRIM_THRESHOLD, x) - The maximum amount of unused top-most memory to keep before - releasing via malloc_trim in free(). Automatic trimming is mainly - useful in long-lived programs using contiguous MORECORE. Because - trimming via sbrk can be slow on some systems, and can sometimes be - wasteful (in cases where programs immediately afterward allocate - more large chunks) the value should be high enough so that your - overall system performance would improve by releasing this much - memory. As a rough guide, you might set to a value close to the - average size of a process (program) running on your system. - Releasing this much memory would allow such a process to run in - memory. Generally, it is worth tuning trim thresholds when a - program undergoes phases where several large chunks are allocated - and released in ways that can reuse each other's storage, perhaps - mixed with phases where there are no such chunks at all. The trim - value must be greater than page size to have any useful effect. To - disable trimming completely, you can set to MAX_SIZE_T. Note that the trick - some people use of mallocing a huge space and then freeing it at - program startup, in an attempt to reserve system memory, doesn't - have the intended effect under automatic trimming, since that memory - will immediately be returned to the system. - -DEFAULT_MMAP_THRESHOLD default: 256K - Also settable using mallopt(M_MMAP_THRESHOLD, x) - The request size threshold for using MMAP to directly service a - request. Requests of at least this size that cannot be allocated - using already-existing space will be serviced via mmap. (If enough - normal freed space already exists it is used instead.) Using mmap - segregates relatively large chunks of memory so that they can be - individually obtained and released from the host system. A request - serviced through mmap is never reused by any other request (at least - not directly; the system may just so happen to remap successive - requests to the same locations). Segregating space in this way has - the benefits that: Mmapped space can always be individually released - back to the system, which helps keep the system level memory demands - of a long-lived program low. Also, mapped memory doesn't become - `locked' between other chunks, as can happen with normally allocated - chunks, which means that even trimming via malloc_trim would not - release them. However, it has the disadvantage that the space - cannot be reclaimed, consolidated, and then used to service later - requests, as happens with normal chunks. The advantages of mmap - nearly always outweigh disadvantages for "large" chunks, but the - value of "large" may vary across systems. The default is an - empirically derived value that works well in most systems. You can - disable mmap by setting to MAX_SIZE_T. - -*/ - -#ifndef WIN32 -#ifdef _WIN32 -#define WIN32 1 -#endif /* _WIN32 */ -#endif /* WIN32 */ -#ifdef WIN32 -#define WIN32_LEAN_AND_MEAN -#include -#define HAVE_MMAP 1 -#define HAVE_MORECORE 0 -#define LACKS_UNISTD_H -#define LACKS_SYS_PARAM_H -#define LACKS_SYS_MMAN_H -#define LACKS_STRING_H -#define LACKS_STRINGS_H -#define LACKS_SYS_TYPES_H -#define LACKS_ERRNO_H -#define MALLOC_FAILURE_ACTION -#define MMAP_CLEARS 0 /* WINCE and some others apparently don't clear */ -#endif /* WIN32 */ - -#ifdef __OS2__ -#define INCL_DOS -#include -#define HAVE_MMAP 1 -#define HAVE_MORECORE 0 -#define LACKS_SYS_MMAN_H -#endif /* __OS2__ */ - -#if defined(DARWIN) || defined(_DARWIN) -/* Mac OSX docs advise not to use sbrk; it seems better to use mmap */ -#ifndef HAVE_MORECORE -#define HAVE_MORECORE 0 -#define HAVE_MMAP 1 -#endif /* HAVE_MORECORE */ -#endif /* DARWIN */ - -#ifndef LACKS_SYS_TYPES_H -#include /* For size_t */ -#endif /* LACKS_SYS_TYPES_H */ - -/* The maximum possible size_t value has all bits set */ -#define MAX_SIZE_T (~(size_t)0) - -#ifndef ONLY_MSPACES -#define ONLY_MSPACES 0 -#endif /* ONLY_MSPACES */ -#ifndef MSPACES -#if ONLY_MSPACES -#define MSPACES 1 -#else /* ONLY_MSPACES */ -#define MSPACES 0 -#endif /* ONLY_MSPACES */ -#endif /* MSPACES */ -#ifndef MALLOC_ALIGNMENT -#define MALLOC_ALIGNMENT ((size_t)8U) -#endif /* MALLOC_ALIGNMENT */ -#ifndef FOOTERS -#define FOOTERS 0 -#endif /* FOOTERS */ -#ifndef ABORT -#define ABORT abort() -#endif /* ABORT */ -#ifndef ABORT_ON_ASSERT_FAILURE -#define ABORT_ON_ASSERT_FAILURE 1 -#endif /* ABORT_ON_ASSERT_FAILURE */ -#ifndef PROCEED_ON_ERROR -#define PROCEED_ON_ERROR 0 -#endif /* PROCEED_ON_ERROR */ -#ifndef USE_LOCKS -#define USE_LOCKS 0 -#endif /* USE_LOCKS */ -#ifndef INSECURE -#define INSECURE 0 -#endif /* INSECURE */ -#ifndef HAVE_MMAP -#define HAVE_MMAP 1 -#endif /* HAVE_MMAP */ -#ifndef MMAP_CLEARS -#define MMAP_CLEARS 1 -#endif /* MMAP_CLEARS */ -#ifndef HAVE_MREMAP -#ifdef linux -#define HAVE_MREMAP 1 -#else /* linux */ -#define HAVE_MREMAP 0 -#endif /* linux */ -#endif /* HAVE_MREMAP */ -#ifndef MALLOC_FAILURE_ACTION -#define MALLOC_FAILURE_ACTION errno = ENOMEM; -#endif /* MALLOC_FAILURE_ACTION */ -#ifndef HAVE_MORECORE -#if ONLY_MSPACES -#define HAVE_MORECORE 0 -#else /* ONLY_MSPACES */ -#define HAVE_MORECORE 1 -#endif /* ONLY_MSPACES */ -#endif /* HAVE_MORECORE */ -#if !HAVE_MORECORE -#define MORECORE_CONTIGUOUS 0 -#else /* !HAVE_MORECORE */ -#ifndef MORECORE -#define MORECORE sbrk -#endif /* MORECORE */ -#ifndef MORECORE_CONTIGUOUS -#define MORECORE_CONTIGUOUS 1 -#endif /* MORECORE_CONTIGUOUS */ -#endif /* HAVE_MORECORE */ -#ifndef DEFAULT_GRANULARITY -#if MORECORE_CONTIGUOUS -#define DEFAULT_GRANULARITY (0) /* 0 means to compute in init_mparams */ -#else /* MORECORE_CONTIGUOUS */ -#define DEFAULT_GRANULARITY ((size_t)64U * (size_t)1024U) -#endif /* MORECORE_CONTIGUOUS */ -#endif /* DEFAULT_GRANULARITY */ -#ifndef DEFAULT_TRIM_THRESHOLD -#ifndef MORECORE_CANNOT_TRIM -#define DEFAULT_TRIM_THRESHOLD ((size_t)2U * (size_t)1024U * (size_t)1024U) -#else /* MORECORE_CANNOT_TRIM */ -#define DEFAULT_TRIM_THRESHOLD MAX_SIZE_T -#endif /* MORECORE_CANNOT_TRIM */ -#endif /* DEFAULT_TRIM_THRESHOLD */ -#ifndef DEFAULT_MMAP_THRESHOLD -#if HAVE_MMAP -#define DEFAULT_MMAP_THRESHOLD ((size_t)256U * (size_t)1024U) -#else /* HAVE_MMAP */ -#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T -#endif /* HAVE_MMAP */ -#endif /* DEFAULT_MMAP_THRESHOLD */ -#ifndef USE_BUILTIN_FFS -#define USE_BUILTIN_FFS 0 -#endif /* USE_BUILTIN_FFS */ -#ifndef USE_DEV_RANDOM -#define USE_DEV_RANDOM 0 -#endif /* USE_DEV_RANDOM */ -#ifndef NO_MALLINFO -#define NO_MALLINFO 0 -#endif /* NO_MALLINFO */ -#ifndef MALLINFO_FIELD_TYPE -#define MALLINFO_FIELD_TYPE size_t -#endif /* MALLINFO_FIELD_TYPE */ - -/* - mallopt tuning options. SVID/XPG defines four standard parameter - numbers for mallopt, normally defined in malloc.h. None of these - are used in this malloc, so setting them has no effect. But this - malloc does support the following options. -*/ - -#define M_TRIM_THRESHOLD (-1) -#define M_GRANULARITY (-2) -#define M_MMAP_THRESHOLD (-3) - -/* ------------------------ Mallinfo declarations ------------------------ */ - -#if !NO_MALLINFO -/* - This version of malloc supports the standard SVID/XPG mallinfo - routine that returns a struct containing usage properties and - statistics. It should work on any system that has a - /usr/include/malloc.h defining struct mallinfo. The main - declaration needed is the mallinfo struct that is returned (by-copy) - by mallinfo(). The malloinfo struct contains a bunch of fields that - are not even meaningful in this version of malloc. These fields are - are instead filled by mallinfo() with other numbers that might be of - interest. - - HAVE_USR_INCLUDE_MALLOC_H should be set if you have a - /usr/include/malloc.h file that includes a declaration of struct - mallinfo. If so, it is included; else a compliant version is - declared below. These must be precisely the same for mallinfo() to - work. The original SVID version of this struct, defined on most - systems with mallinfo, declares all fields as ints. But some others - define as unsigned long. If your system defines the fields using a - type of different width than listed here, you MUST #include your - system version and #define HAVE_USR_INCLUDE_MALLOC_H. -*/ - -/* #define HAVE_USR_INCLUDE_MALLOC_H */ - -#ifdef HAVE_USR_INCLUDE_MALLOC_H -#include "/usr/include/malloc.h" -#else /* HAVE_USR_INCLUDE_MALLOC_H */ - -/* HP-UX's stdlib.h redefines mallinfo unless _STRUCT_MALLINFO is defined */ -#define _STRUCT_MALLINFO - -struct mallinfo { - MALLINFO_FIELD_TYPE arena; /* non-mmapped space allocated from system */ - MALLINFO_FIELD_TYPE ordblks; /* number of free chunks */ - MALLINFO_FIELD_TYPE smblks; /* always 0 */ - MALLINFO_FIELD_TYPE hblks; /* always 0 */ - MALLINFO_FIELD_TYPE hblkhd; /* space in mmapped regions */ - MALLINFO_FIELD_TYPE usmblks; /* maximum total allocated space */ - MALLINFO_FIELD_TYPE fsmblks; /* always 0 */ - MALLINFO_FIELD_TYPE uordblks; /* total allocated space */ - MALLINFO_FIELD_TYPE fordblks; /* total free space */ - MALLINFO_FIELD_TYPE keepcost; /* releasable (via malloc_trim) space */ -}; - -#endif /* HAVE_USR_INCLUDE_MALLOC_H */ -#endif /* NO_MALLINFO */ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#if !ONLY_MSPACES - -/* ------------------- Declarations of public routines ------------------- */ - -#ifndef USE_DL_PREFIX -#define dlcalloc calloc -#define dlfree free -#define dlmalloc malloc -#define dlmemalign memalign -#define dlrealloc realloc -#define dlvalloc valloc -#define dlpvalloc pvalloc -#define dlmallinfo mallinfo -#define dlmallopt mallopt -#define dlmalloc_trim malloc_trim -#define dlmalloc_stats malloc_stats -#define dlmalloc_usable_size malloc_usable_size -#define dlmalloc_footprint malloc_footprint -#define dlmalloc_max_footprint malloc_max_footprint -#define dlindependent_calloc independent_calloc -#define dlindependent_comalloc independent_comalloc -#endif /* USE_DL_PREFIX */ - - -/* - malloc(size_t n) - Returns a pointer to a newly allocated chunk of at least n bytes, or - null if no space is available, in which case errno is set to ENOMEM - on ANSI C systems. - - If n is zero, malloc returns a minimum-sized chunk. (The minimum - size is 16 bytes on most 32bit systems, and 32 bytes on 64bit - systems.) Note that size_t is an unsigned type, so calls with - arguments that would be negative if signed are interpreted as - requests for huge amounts of space, which will often fail. The - maximum supported value of n differs across systems, but is in all - cases less than the maximum representable value of a size_t. -*/ -void* dlmalloc(size_t); - -/* - free(void* p) - Releases the chunk of memory pointed to by p, that had been previously - allocated using malloc or a related routine such as realloc. - It has no effect if p is null. If p was not malloced or already - freed, free(p) will by default cause the current program to abort. -*/ -void dlfree(void*); - -/* - calloc(size_t n_elements, size_t element_size); - Returns a pointer to n_elements * element_size bytes, with all locations - set to zero. -*/ -void* dlcalloc(size_t, size_t); - -/* - realloc(void* p, size_t n) - Returns a pointer to a chunk of size n that contains the same data - as does chunk p up to the minimum of (n, p's size) bytes, or null - if no space is available. - - The returned pointer may or may not be the same as p. The algorithm - prefers extending p in most cases when possible, otherwise it - employs the equivalent of a malloc-copy-free sequence. - - If p is null, realloc is equivalent to malloc. - - If space is not available, realloc returns null, errno is set (if on - ANSI) and p is NOT freed. - - if n is for fewer bytes than already held by p, the newly unused - space is lopped off and freed if possible. realloc with a size - argument of zero (re)allocates a minimum-sized chunk. - - The old unix realloc convention of allowing the last-free'd chunk - to be used as an argument to realloc is not supported. -*/ - -void* dlrealloc(void*, size_t); - -/* - memalign(size_t alignment, size_t n); - Returns a pointer to a newly allocated chunk of n bytes, aligned - in accord with the alignment argument. - - The alignment argument should be a power of two. If the argument is - not a power of two, the nearest greater power is used. - 8-byte alignment is guaranteed by normal malloc calls, so don't - bother calling memalign with an argument of 8 or less. - - Overreliance on memalign is a sure way to fragment space. -*/ -void* dlmemalign(size_t, size_t); - -/* - valloc(size_t n); - Equivalent to memalign(pagesize, n), where pagesize is the page - size of the system. If the pagesize is unknown, 4096 is used. -*/ -void* dlvalloc(size_t); - -/* - mallopt(int parameter_number, int parameter_value) - Sets tunable parameters The format is to provide a - (parameter-number, parameter-value) pair. mallopt then sets the - corresponding parameter to the argument value if it can (i.e., so - long as the value is meaningful), and returns 1 if successful else - 0. SVID/XPG/ANSI defines four standard param numbers for mallopt, - normally defined in malloc.h. None of these are use in this malloc, - so setting them has no effect. But this malloc also supports other - options in mallopt. See below for details. Briefly, supported - parameters are as follows (listed defaults are for "typical" - configurations). - - Symbol param # default allowed param values - M_TRIM_THRESHOLD -1 2*1024*1024 any (MAX_SIZE_T disables) - M_GRANULARITY -2 page size any power of 2 >= page size - M_MMAP_THRESHOLD -3 256*1024 any (or 0 if no MMAP support) -*/ -int dlmallopt(int, int); - -/* - malloc_footprint(); - Returns the number of bytes obtained from the system. The total - number of bytes allocated by malloc, realloc etc., is less than this - value. Unlike mallinfo, this function returns only a precomputed - result, so can be called frequently to monitor memory consumption. - Even if locks are otherwise defined, this function does not use them, - so results might not be up to date. -*/ -size_t dlmalloc_footprint(void); - -/* - malloc_max_footprint(); - Returns the maximum number of bytes obtained from the system. This - value will be greater than current footprint if deallocated space - has been reclaimed by the system. The peak number of bytes allocated - by malloc, realloc etc., is less than this value. Unlike mallinfo, - this function returns only a precomputed result, so can be called - frequently to monitor memory consumption. Even if locks are - otherwise defined, this function does not use them, so results might - not be up to date. -*/ -size_t dlmalloc_max_footprint(void); - -#if !NO_MALLINFO -/* - mallinfo() - Returns (by copy) a struct containing various summary statistics: - - arena: current total non-mmapped bytes allocated from system - ordblks: the number of free chunks - smblks: always zero. - hblks: current number of mmapped regions - hblkhd: total bytes held in mmapped regions - usmblks: the maximum total allocated space. This will be greater - than current total if trimming has occurred. - fsmblks: always zero - uordblks: current total allocated space (normal or mmapped) - fordblks: total free space - keepcost: the maximum number of bytes that could ideally be released - back to system via malloc_trim. ("ideally" means that - it ignores page restrictions etc.) - - Because these fields are ints, but internal bookkeeping may - be kept as longs, the reported values may wrap around zero and - thus be inaccurate. -*/ -struct mallinfo dlmallinfo(void); -#endif /* NO_MALLINFO */ - -/* - independent_calloc(size_t n_elements, size_t element_size, void* chunks[]); - - independent_calloc is similar to calloc, but instead of returning a - single cleared space, it returns an array of pointers to n_elements - independent elements that can hold contents of size elem_size, each - of which starts out cleared, and can be independently freed, - realloc'ed etc. The elements are guaranteed to be adjacently - allocated (this is not guaranteed to occur with multiple callocs or - mallocs), which may also improve cache locality in some - applications. - - The "chunks" argument is optional (i.e., may be null, which is - probably the most typical usage). If it is null, the returned array - is itself dynamically allocated and should also be freed when it is - no longer needed. Otherwise, the chunks array must be of at least - n_elements in length. It is filled in with the pointers to the - chunks. - - In either case, independent_calloc returns this pointer array, or - null if the allocation failed. If n_elements is zero and "chunks" - is null, it returns a chunk representing an array with zero elements - (which should be freed if not wanted). - - Each element must be individually freed when it is no longer - needed. If you'd like to instead be able to free all at once, you - should instead use regular calloc and assign pointers into this - space to represent elements. (In this case though, you cannot - independently free elements.) - - independent_calloc simplifies and speeds up implementations of many - kinds of pools. It may also be useful when constructing large data - structures that initially have a fixed number of fixed-sized nodes, - but the number is not known at compile time, and some of the nodes - may later need to be freed. For example: - - struct Node { int item; struct Node* next; }; - - struct Node* build_list() { - struct Node** pool; - int n = read_number_of_nodes_needed(); - if (n <= 0) return 0; - pool = (struct Node**)(independent_calloc(n, sizeof(struct Node), 0); - if (pool == 0) die(); - // organize into a linked list... - struct Node* first = pool[0]; - for (i = 0; i < n-1; ++i) - pool[i]->next = pool[i+1]; - free(pool); // Can now free the array (or not, if it is needed later) - return first; - } -*/ -void** dlindependent_calloc(size_t, size_t, void**); - -/* - independent_comalloc(size_t n_elements, size_t sizes[], void* chunks[]); - - independent_comalloc allocates, all at once, a set of n_elements - chunks with sizes indicated in the "sizes" array. It returns - an array of pointers to these elements, each of which can be - independently freed, realloc'ed etc. The elements are guaranteed to - be adjacently allocated (this is not guaranteed to occur with - multiple callocs or mallocs), which may also improve cache locality - in some applications. - - The "chunks" argument is optional (i.e., may be null). If it is null - the returned array is itself dynamically allocated and should also - be freed when it is no longer needed. Otherwise, the chunks array - must be of at least n_elements in length. It is filled in with the - pointers to the chunks. - - In either case, independent_comalloc returns this pointer array, or - null if the allocation failed. If n_elements is zero and chunks is - null, it returns a chunk representing an array with zero elements - (which should be freed if not wanted). - - Each element must be individually freed when it is no longer - needed. If you'd like to instead be able to free all at once, you - should instead use a single regular malloc, and assign pointers at - particular offsets in the aggregate space. (In this case though, you - cannot independently free elements.) - - independent_comallac differs from independent_calloc in that each - element may have a different size, and also that it does not - automatically clear elements. - - independent_comalloc can be used to speed up allocation in cases - where several structs or objects must always be allocated at the - same time. For example: - - struct Head { ... } - struct Foot { ... } - - void send_message(char* msg) { - int msglen = strlen(msg); - size_t sizes[3] = { sizeof(struct Head), msglen, sizeof(struct Foot) }; - void* chunks[3]; - if (independent_comalloc(3, sizes, chunks) == 0) - die(); - struct Head* head = (struct Head*)(chunks[0]); - char* body = (char*)(chunks[1]); - struct Foot* foot = (struct Foot*)(chunks[2]); - // ... - } - - In general though, independent_comalloc is worth using only for - larger values of n_elements. For small values, you probably won't - detect enough difference from series of malloc calls to bother. - - Overuse of independent_comalloc can increase overall memory usage, - since it cannot reuse existing noncontiguous small chunks that - might be available for some of the elements. -*/ -void** dlindependent_comalloc(size_t, size_t*, void**); - - -/* - pvalloc(size_t n); - Equivalent to valloc(minimum-page-that-holds(n)), that is, - round up n to nearest pagesize. - */ -void* dlpvalloc(size_t); - -/* - malloc_trim(size_t pad); - - If possible, gives memory back to the system (via negative arguments - to sbrk) if there is unused memory at the `high' end of the malloc - pool or in unused MMAP segments. You can call this after freeing - large blocks of memory to potentially reduce the system-level memory - requirements of a program. However, it cannot guarantee to reduce - memory. Under some allocation patterns, some large free blocks of - memory will be locked between two used chunks, so they cannot be - given back to the system. - - The `pad' argument to malloc_trim represents the amount of free - trailing space to leave untrimmed. If this argument is zero, only - the minimum amount of memory to maintain internal data structures - will be left. Non-zero arguments can be supplied to maintain enough - trailing space to service future expected allocations without having - to re-obtain memory from the system. - - Malloc_trim returns 1 if it actually released any memory, else 0. -*/ -int dlmalloc_trim(size_t); - -/* - malloc_usable_size(void* p); - - Returns the number of bytes you can actually use in - an allocated chunk, which may be more than you requested (although - often not) due to alignment and minimum size constraints. - You can use this many bytes without worrying about - overwriting other allocated objects. This is not a particularly great - programming practice. malloc_usable_size can be more useful in - debugging and assertions, for example: - - p = malloc(n); - assert(malloc_usable_size(p) >= 256); -*/ -size_t dlmalloc_usable_size(void*); - -/* - malloc_stats(); - Prints on stderr the amount of space obtained from the system (both - via sbrk and mmap), the maximum amount (which may be more than - current if malloc_trim and/or munmap got called), and the current - number of bytes allocated via malloc (or realloc, etc) but not yet - freed. Note that this is the number of bytes allocated, not the - number requested. It will be larger than the number requested - because of alignment and bookkeeping overhead. Because it includes - alignment wastage as being in use, this figure may be greater than - zero even when no user-level chunks are allocated. - - The reported current and maximum system memory can be inaccurate if - a program makes other calls to system memory allocation functions - (normally sbrk) outside of malloc. - - malloc_stats prints only the most commonly interesting statistics. - More information can be obtained by calling mallinfo. -*/ -void dlmalloc_stats(void); - -#endif /* ONLY_MSPACES */ - -#if MSPACES - -/* - mspace is an opaque type representing an independent - region of space that supports mspace_malloc, etc. -*/ -typedef void* mspace; - -/* - create_mspace creates and returns a new independent space with the - given initial capacity, or, if 0, the default granularity size. It - returns null if there is no system memory available to create the - space. If argument locked is non-zero, the space uses a separate - lock to control access. The capacity of the space will grow - dynamically as needed to service mspace_malloc requests. You can - control the sizes of incremental increases of this space by - compiling with a different DEFAULT_GRANULARITY or dynamically - setting with mallopt(M_GRANULARITY, value). -*/ -mspace create_mspace(size_t capacity, int locked); - -/* - destroy_mspace destroys the given space, and attempts to return all - of its memory back to the system, returning the total number of - bytes freed. After destruction, the results of access to all memory - used by the space become undefined. -*/ -size_t destroy_mspace(mspace msp); - -/* - create_mspace_with_base uses the memory supplied as the initial base - of a new mspace. Part (less than 128*sizeof(size_t) bytes) of this - space is used for bookkeeping, so the capacity must be at least this - large. (Otherwise 0 is returned.) When this initial space is - exhausted, additional memory will be obtained from the system. - Destroying this space will deallocate all additionally allocated - space (if possible) but not the initial base. -*/ -mspace create_mspace_with_base(void* base, size_t capacity, int locked); - -/* - mspace_malloc behaves as malloc, but operates within - the given space. -*/ -void* mspace_malloc(mspace msp, size_t bytes); - -/* - mspace_free behaves as free, but operates within - the given space. - - If compiled with FOOTERS==1, mspace_free is not actually needed. - free may be called instead of mspace_free because freed chunks from - any space are handled by their originating spaces. -*/ -void mspace_free(mspace msp, void* mem); - -/* - mspace_realloc behaves as realloc, but operates within - the given space. - - If compiled with FOOTERS==1, mspace_realloc is not actually - needed. realloc may be called instead of mspace_realloc because - realloced chunks from any space are handled by their originating - spaces. -*/ -void* mspace_realloc(mspace msp, void* mem, size_t newsize); - -/* - mspace_calloc behaves as calloc, but operates within - the given space. -*/ -void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size); - -/* - mspace_memalign behaves as memalign, but operates within - the given space. -*/ -void* mspace_memalign(mspace msp, size_t alignment, size_t bytes); - -/* - mspace_independent_calloc behaves as independent_calloc, but - operates within the given space. -*/ -void** mspace_independent_calloc(mspace msp, size_t n_elements, - size_t elem_size, void* chunks[]); - -/* - mspace_independent_comalloc behaves as independent_comalloc, but - operates within the given space. -*/ -void** mspace_independent_comalloc(mspace msp, size_t n_elements, - size_t sizes[], void* chunks[]); - -/* - mspace_footprint() returns the number of bytes obtained from the - system for this space. -*/ -size_t mspace_footprint(mspace msp); - -/* - mspace_max_footprint() returns the peak number of bytes obtained from the - system for this space. -*/ -size_t mspace_max_footprint(mspace msp); - - -#if !NO_MALLINFO -/* - mspace_mallinfo behaves as mallinfo, but reports properties of - the given space. -*/ -struct mallinfo mspace_mallinfo(mspace msp); -#endif /* NO_MALLINFO */ - -/* - mspace_malloc_stats behaves as malloc_stats, but reports - properties of the given space. -*/ -void mspace_malloc_stats(mspace msp); - -/* - mspace_trim behaves as malloc_trim, but - operates within the given space. -*/ -int mspace_trim(mspace msp, size_t pad); - -/* - An alias for mallopt. -*/ -int mspace_mallopt(int, int); - -#endif /* MSPACES */ - -#ifdef __cplusplus -}; /* end of extern "C" */ -#endif /* __cplusplus */ - -/* - ======================================================================== - To make a fully customizable malloc.h header file, cut everything - above this line, put into file malloc.h, edit to suit, and #include it - on the next line, as well as in programs that use this malloc. - ======================================================================== -*/ - -/* #include "malloc.h" */ - -/*------------------------------ internal #includes ---------------------- */ - -#ifdef _MSC_VER -#pragma warning( disable : 4146 ) /* no "unsigned" warnings */ -#endif /* _MSC_VER */ - -#include /* for printing in malloc_stats */ - -#ifndef LACKS_ERRNO_H -#include /* for MALLOC_FAILURE_ACTION */ -#endif /* LACKS_ERRNO_H */ -#if FOOTERS -#include /* for magic initialization */ -#endif /* FOOTERS */ -#ifndef LACKS_STDLIB_H -#include /* for abort() */ -#endif /* LACKS_STDLIB_H */ -#ifdef DEBUG -#if ABORT_ON_ASSERT_FAILURE -#define assert(x) if(!(x)) ABORT -#else /* ABORT_ON_ASSERT_FAILURE */ -#include -#endif /* ABORT_ON_ASSERT_FAILURE */ -#else /* DEBUG */ -#define assert(x) -#endif /* DEBUG */ -#ifndef LACKS_STRING_H -#include /* for memset etc */ -#endif /* LACKS_STRING_H */ -#if USE_BUILTIN_FFS -#ifndef LACKS_STRINGS_H -#include /* for ffs */ -#endif /* LACKS_STRINGS_H */ -#endif /* USE_BUILTIN_FFS */ -#if HAVE_MMAP -#ifndef LACKS_SYS_MMAN_H -#include /* for mmap */ -#endif /* LACKS_SYS_MMAN_H */ -#ifndef LACKS_FCNTL_H -#include -#endif /* LACKS_FCNTL_H */ -#endif /* HAVE_MMAP */ -#if HAVE_MORECORE -#ifndef LACKS_UNISTD_H -#include /* for sbrk */ -#else /* LACKS_UNISTD_H */ -#if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__) -extern void* sbrk(ptrdiff_t); -#endif /* FreeBSD etc */ -#endif /* LACKS_UNISTD_H */ -#endif /* HAVE_MMAP */ - -#ifndef WIN32 -#ifndef malloc_getpagesize -# ifdef _SC_PAGESIZE /* some SVR4 systems omit an underscore */ -# ifndef _SC_PAGE_SIZE -# define _SC_PAGE_SIZE _SC_PAGESIZE -# endif -# endif -# ifdef _SC_PAGE_SIZE -# define malloc_getpagesize sysconf(_SC_PAGE_SIZE) -# else -# if defined(BSD) || defined(DGUX) || defined(HAVE_GETPAGESIZE) - extern size_t getpagesize(); -# define malloc_getpagesize getpagesize() -# else -# ifdef WIN32 /* use supplied emulation of getpagesize */ -# define malloc_getpagesize getpagesize() -# else -# ifndef LACKS_SYS_PARAM_H -# include -# endif -# ifdef EXEC_PAGESIZE -# define malloc_getpagesize EXEC_PAGESIZE -# else -# ifdef NBPG -# ifndef CLSIZE -# define malloc_getpagesize NBPG -# else -# define malloc_getpagesize (NBPG * CLSIZE) -# endif -# else -# ifdef NBPC -# define malloc_getpagesize NBPC -# else -# ifdef PAGESIZE -# define malloc_getpagesize PAGESIZE -# else /* just guess */ -# define malloc_getpagesize ((size_t)4096U) -# endif -# endif -# endif -# endif -# endif -# endif -# endif -#endif -#endif - -/* ------------------- size_t and alignment properties -------------------- */ - -/* The byte and bit size of a size_t */ -#define SIZE_T_SIZE (sizeof(size_t)) -#define SIZE_T_BITSIZE (sizeof(size_t) << 3) - -/* Some constants coerced to size_t */ -/* Annoying but necessary to avoid errors on some plaftorms */ -#define SIZE_T_ZERO ((size_t)0) -#define SIZE_T_ONE ((size_t)1) -#define SIZE_T_TWO ((size_t)2) -#define TWO_SIZE_T_SIZES (SIZE_T_SIZE<<1) -#define FOUR_SIZE_T_SIZES (SIZE_T_SIZE<<2) -#define SIX_SIZE_T_SIZES (FOUR_SIZE_T_SIZES+TWO_SIZE_T_SIZES) -#define HALF_MAX_SIZE_T (MAX_SIZE_T / 2U) - -/* The bit mask value corresponding to MALLOC_ALIGNMENT */ -#define CHUNK_ALIGN_MASK (MALLOC_ALIGNMENT - SIZE_T_ONE) - -/* True if address a has acceptable alignment */ -#define is_aligned(A) (((size_t)((A)) & (CHUNK_ALIGN_MASK)) == 0) - -/* the number of bytes to offset an address to align it */ -#define align_offset(A)\ - ((((size_t)(A) & CHUNK_ALIGN_MASK) == 0)? 0 :\ - ((MALLOC_ALIGNMENT - ((size_t)(A) & CHUNK_ALIGN_MASK)) & CHUNK_ALIGN_MASK)) - -/* -------------------------- MMAP preliminaries ------------------------- */ - -/* - If HAVE_MORECORE or HAVE_MMAP are false, we just define calls and - checks to fail so compiler optimizer can delete code rather than - using so many "#if"s. -*/ - - -/* MORECORE and MMAP must return MFAIL on failure */ -#define MFAIL ((void*)(MAX_SIZE_T)) -#define CMFAIL ((char*)(MFAIL)) /* defined for convenience */ - -#if !HAVE_MMAP -#define IS_MMAPPED_BIT (SIZE_T_ZERO) -#define USE_MMAP_BIT (SIZE_T_ZERO) -#define CALL_MMAP(s) MFAIL -#define CALL_MUNMAP(a, s) (-1) -#define DIRECT_MMAP(s) MFAIL - -#else /* HAVE_MMAP */ -#define IS_MMAPPED_BIT (SIZE_T_ONE) -#define USE_MMAP_BIT (SIZE_T_ONE) - -#if !defined(WIN32) && !defined (__OS2__) -#define CALL_MUNMAP(a, s) munmap((a), (s)) -#define MMAP_PROT (PROT_READ|PROT_WRITE) -#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON) -#define MAP_ANONYMOUS MAP_ANON -#endif /* MAP_ANON */ -#ifdef MAP_ANONYMOUS -#define MMAP_FLAGS (MAP_PRIVATE|MAP_ANONYMOUS) -#define CALL_MMAP(s) mmap(0, (s), MMAP_PROT, MMAP_FLAGS, -1, 0) -#else /* MAP_ANONYMOUS */ -/* - Nearly all versions of mmap support MAP_ANONYMOUS, so the following - is unlikely to be needed, but is supplied just in case. -*/ -#define MMAP_FLAGS (MAP_PRIVATE) -static int dev_zero_fd = -1; /* Cached file descriptor for /dev/zero. */ -#define CALL_MMAP(s) ((dev_zero_fd < 0) ? \ - (dev_zero_fd = open("/dev/zero", O_RDWR), \ - mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) : \ - mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) -#endif /* MAP_ANONYMOUS */ - -#define DIRECT_MMAP(s) CALL_MMAP(s) - -#elif defined(__OS2__) - -/* OS/2 MMAP via DosAllocMem */ -static void* os2mmap(size_t size) { - void* ptr; - if (DosAllocMem(&ptr, size, OBJ_ANY|PAG_COMMIT|PAG_READ|PAG_WRITE) && - DosAllocMem(&ptr, size, PAG_COMMIT|PAG_READ|PAG_WRITE)) - return MFAIL; - return ptr; -} - -#define os2direct_mmap(n) os2mmap(n) - -/* This function supports releasing coalesed segments */ -static int os2munmap(void* ptr, size_t size) { - while (size) { - ULONG ulSize = size; - ULONG ulFlags = 0; - if (DosQueryMem(ptr, &ulSize, &ulFlags) != 0) - return -1; - if ((ulFlags & PAG_BASE) == 0 ||(ulFlags & PAG_COMMIT) == 0 || - ulSize > size) - return -1; - if (DosFreeMem(ptr) != 0) - return -1; - ptr = ( void * ) ( ( char * ) ptr + ulSize ); - size -= ulSize; - } - return 0; -} - -#define CALL_MMAP(s) os2mmap(s) -#define CALL_MUNMAP(a, s) os2munmap((a), (s)) -#define DIRECT_MMAP(s) os2direct_mmap(s) - -#else /* WIN32 */ - -/* Win32 MMAP via VirtualAlloc */ -static void* win32mmap(size_t size) { - void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE); - return (ptr != 0)? ptr: MFAIL; -} - -/* For direct MMAP, use MEM_TOP_DOWN to minimize interference */ -static void* win32direct_mmap(size_t size) { - void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, - PAGE_EXECUTE_READWRITE); - return (ptr != 0)? ptr: MFAIL; -} - -/* This function supports releasing coalesed segments */ -static int win32munmap(void* ptr, size_t size) { - MEMORY_BASIC_INFORMATION minfo; - char* cptr = ptr; - while (size) { - if (VirtualQuery(cptr, &minfo, sizeof(minfo)) == 0) - return -1; - if (minfo.BaseAddress != cptr || minfo.AllocationBase != cptr || - minfo.State != MEM_COMMIT || minfo.RegionSize > size) - return -1; - if (VirtualFree(cptr, 0, MEM_RELEASE) == 0) - return -1; - cptr += minfo.RegionSize; - size -= minfo.RegionSize; - } - return 0; -} - -#define CALL_MMAP(s) win32mmap(s) -#define CALL_MUNMAP(a, s) win32munmap((a), (s)) -#define DIRECT_MMAP(s) win32direct_mmap(s) -#endif /* WIN32 */ -#endif /* HAVE_MMAP */ - -#if HAVE_MMAP && HAVE_MREMAP -#define CALL_MREMAP(addr, osz, nsz, mv) mremap((addr), (osz), (nsz), (mv)) -#else /* HAVE_MMAP && HAVE_MREMAP */ -#define CALL_MREMAP(addr, osz, nsz, mv) MFAIL -#endif /* HAVE_MMAP && HAVE_MREMAP */ - -#if HAVE_MORECORE -#define CALL_MORECORE(S) MORECORE(S) -#else /* HAVE_MORECORE */ -#define CALL_MORECORE(S) MFAIL -#endif /* HAVE_MORECORE */ - -/* mstate bit set if continguous morecore disabled or failed */ -#define USE_NONCONTIGUOUS_BIT (4U) - -/* segment bit set in create_mspace_with_base */ -#define EXTERN_BIT (8U) - - -/* --------------------------- Lock preliminaries ------------------------ */ - -#if USE_LOCKS - -/* - When locks are defined, there are up to two global locks: - - * If HAVE_MORECORE, morecore_mutex protects sequences of calls to - MORECORE. In many cases sys_alloc requires two calls, that should - not be interleaved with calls by other threads. This does not - protect against direct calls to MORECORE by other threads not - using this lock, so there is still code to cope the best we can on - interference. - - * magic_init_mutex ensures that mparams.magic and other - unique mparams values are initialized only once. -*/ - -#if !defined(WIN32) && !defined(__OS2__) -/* By default use posix locks */ -#include -#define MLOCK_T pthread_mutex_t -#define INITIAL_LOCK(l) pthread_mutex_init(l, NULL) -#define ACQUIRE_LOCK(l) pthread_mutex_lock(l) -#define RELEASE_LOCK(l) pthread_mutex_unlock(l) - -#if HAVE_MORECORE -static MLOCK_T morecore_mutex = PTHREAD_MUTEX_INITIALIZER; -#endif /* HAVE_MORECORE */ - -static MLOCK_T magic_init_mutex = PTHREAD_MUTEX_INITIALIZER; - -#elif defined(__OS2__) -#define MLOCK_T HMTX -#define INITIAL_LOCK(l) DosCreateMutexSem(0, l, 0, FALSE) -#define ACQUIRE_LOCK(l) DosRequestMutexSem(*l, SEM_INDEFINITE_WAIT) -#define RELEASE_LOCK(l) DosReleaseMutexSem(*l) -#if HAVE_MORECORE -static MLOCK_T morecore_mutex; -#endif /* HAVE_MORECORE */ -static MLOCK_T magic_init_mutex; - -#else /* WIN32 */ -/* - Because lock-protected regions have bounded times, and there - are no recursive lock calls, we can use simple spinlocks. -*/ - -#define MLOCK_T long -static int win32_acquire_lock (MLOCK_T *sl) { - for (;;) { -#ifdef InterlockedCompareExchangePointer - if (!InterlockedCompareExchange(sl, 1, 0)) - return 0; -#else /* Use older void* version */ - if (!InterlockedCompareExchange((void**)sl, (void*)1, (void*)0)) - return 0; -#endif /* InterlockedCompareExchangePointer */ - Sleep (0); - } -} - -static void win32_release_lock (MLOCK_T *sl) { - InterlockedExchange (sl, 0); -} - -#define INITIAL_LOCK(l) *(l)=0 -#define ACQUIRE_LOCK(l) win32_acquire_lock(l) -#define RELEASE_LOCK(l) win32_release_lock(l) -#if HAVE_MORECORE -static MLOCK_T morecore_mutex; -#endif /* HAVE_MORECORE */ -static MLOCK_T magic_init_mutex; -#endif /* WIN32 */ - -#define USE_LOCK_BIT (2U) -#else /* USE_LOCKS */ -#define USE_LOCK_BIT (0U) -#define INITIAL_LOCK(l) -#endif /* USE_LOCKS */ - -#if USE_LOCKS && HAVE_MORECORE -#define ACQUIRE_MORECORE_LOCK() ACQUIRE_LOCK(&morecore_mutex); -#define RELEASE_MORECORE_LOCK() RELEASE_LOCK(&morecore_mutex); -#else /* USE_LOCKS && HAVE_MORECORE */ -#define ACQUIRE_MORECORE_LOCK() -#define RELEASE_MORECORE_LOCK() -#endif /* USE_LOCKS && HAVE_MORECORE */ - -#if USE_LOCKS -#define ACQUIRE_MAGIC_INIT_LOCK() ACQUIRE_LOCK(&magic_init_mutex); -#define RELEASE_MAGIC_INIT_LOCK() RELEASE_LOCK(&magic_init_mutex); -#else /* USE_LOCKS */ -#define ACQUIRE_MAGIC_INIT_LOCK() -#define RELEASE_MAGIC_INIT_LOCK() -#endif /* USE_LOCKS */ - - -/* ----------------------- Chunk representations ------------------------ */ - -/* - (The following includes lightly edited explanations by Colin Plumb.) - - The malloc_chunk declaration below is misleading (but accurate and - necessary). It declares a "view" into memory allowing access to - necessary fields at known offsets from a given base. - - Chunks of memory are maintained using a `boundary tag' method as - originally described by Knuth. (See the paper by Paul Wilson - ftp://ftp.cs.utexas.edu/pub/garbage/allocsrv.ps for a survey of such - techniques.) Sizes of free chunks are stored both in the front of - each chunk and at the end. This makes consolidating fragmented - chunks into bigger chunks fast. The head fields also hold bits - representing whether chunks are free or in use. - - Here are some pictures to make it clearer. They are "exploded" to - show that the state of a chunk can be thought of as extending from - the high 31 bits of the head field of its header through the - prev_foot and PINUSE_BIT bit of the following chunk header. - - A chunk that's in use looks like: - - chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Size of previous chunk (if P = 1) | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| - | Size of this chunk 1| +-+ - mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | | - +- -+ - | | - +- -+ - | : - +- size - sizeof(size_t) available payload bytes -+ - : | - chunk-> +- -+ - | | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |1| - | Size of next chunk (may or may not be in use) | +-+ - mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - And if it's free, it looks like this: - - chunk-> +- -+ - | User payload (must be in use, or we would have merged!) | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| - | Size of this chunk 0| +-+ - mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Next pointer | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Prev pointer | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | : - +- size - sizeof(struct chunk) unused bytes -+ - : | - chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Size of this chunk | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0| - | Size of next chunk (must be in use, or we would have merged)| +-+ - mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | : - +- User payload -+ - : | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - |0| - +-+ - Note that since we always merge adjacent free chunks, the chunks - adjacent to a free chunk must be in use. - - Given a pointer to a chunk (which can be derived trivially from the - payload pointer) we can, in O(1) time, find out whether the adjacent - chunks are free, and if so, unlink them from the lists that they - are on and merge them with the current chunk. - - Chunks always begin on even word boundaries, so the mem portion - (which is returned to the user) is also on an even word boundary, and - thus at least double-word aligned. - - The P (PINUSE_BIT) bit, stored in the unused low-order bit of the - chunk size (which is always a multiple of two words), is an in-use - bit for the *previous* chunk. If that bit is *clear*, then the - word before the current chunk size contains the previous chunk - size, and can be used to find the front of the previous chunk. - The very first chunk allocated always has this bit set, preventing - access to non-existent (or non-owned) memory. If pinuse is set for - any given chunk, then you CANNOT determine the size of the - previous chunk, and might even get a memory addressing fault when - trying to do so. - - The C (CINUSE_BIT) bit, stored in the unused second-lowest bit of - the chunk size redundantly records whether the current chunk is - inuse. This redundancy enables usage checks within free and realloc, - and reduces indirection when freeing and consolidating chunks. - - Each freshly allocated chunk must have both cinuse and pinuse set. - That is, each allocated chunk borders either a previously allocated - and still in-use chunk, or the base of its memory arena. This is - ensured by making all allocations from the the `lowest' part of any - found chunk. Further, no free chunk physically borders another one, - so each free chunk is known to be preceded and followed by either - inuse chunks or the ends of memory. - - Note that the `foot' of the current chunk is actually represented - as the prev_foot of the NEXT chunk. This makes it easier to - deal with alignments etc but can be very confusing when trying - to extend or adapt this code. - - The exceptions to all this are - - 1. The special chunk `top' is the top-most available chunk (i.e., - the one bordering the end of available memory). It is treated - specially. Top is never included in any bin, is used only if - no other chunk is available, and is released back to the - system if it is very large (see M_TRIM_THRESHOLD). In effect, - the top chunk is treated as larger (and thus less well - fitting) than any other available chunk. The top chunk - doesn't update its trailing size field since there is no next - contiguous chunk that would have to index off it. However, - space is still allocated for it (TOP_FOOT_SIZE) to enable - separation or merging when space is extended. - - 3. Chunks allocated via mmap, which have the lowest-order bit - (IS_MMAPPED_BIT) set in their prev_foot fields, and do not set - PINUSE_BIT in their head fields. Because they are allocated - one-by-one, each must carry its own prev_foot field, which is - also used to hold the offset this chunk has within its mmapped - region, which is needed to preserve alignment. Each mmapped - chunk is trailed by the first two fields of a fake next-chunk - for sake of usage checks. - -*/ - -struct malloc_chunk { - size_t prev_foot; /* Size of previous chunk (if free). */ - size_t head; /* Size and inuse bits. */ - struct malloc_chunk* fd; /* double links -- used only if free. */ - struct malloc_chunk* bk; -}; - -typedef struct malloc_chunk mchunk; -typedef struct malloc_chunk* mchunkptr; -typedef struct malloc_chunk* sbinptr; /* The type of bins of chunks */ -typedef unsigned int bindex_t; /* Described below */ -typedef unsigned int binmap_t; /* Described below */ -typedef unsigned int flag_t; /* The type of various bit flag sets */ - -/* ------------------- Chunks sizes and alignments ----------------------- */ - -#define MCHUNK_SIZE (sizeof(mchunk)) - -#if FOOTERS -#define CHUNK_OVERHEAD (TWO_SIZE_T_SIZES) -#else /* FOOTERS */ -#define CHUNK_OVERHEAD (SIZE_T_SIZE) -#endif /* FOOTERS */ - -/* MMapped chunks need a second word of overhead ... */ -#define MMAP_CHUNK_OVERHEAD (TWO_SIZE_T_SIZES) -/* ... and additional padding for fake next-chunk at foot */ -#define MMAP_FOOT_PAD (FOUR_SIZE_T_SIZES) - -/* The smallest size we can malloc is an aligned minimal chunk */ -#define MIN_CHUNK_SIZE\ - ((MCHUNK_SIZE + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK) - -/* conversion from malloc headers to user pointers, and back */ -#define chunk2mem(p) ((void*)((char*)(p) + TWO_SIZE_T_SIZES)) -#define mem2chunk(mem) ((mchunkptr)((char*)(mem) - TWO_SIZE_T_SIZES)) -/* chunk associated with aligned address A */ -#define align_as_chunk(A) (mchunkptr)((A) + align_offset(chunk2mem(A))) - -/* Bounds on request (not chunk) sizes. */ -#define MAX_REQUEST ((-MIN_CHUNK_SIZE) << 2) -#define MIN_REQUEST (MIN_CHUNK_SIZE - CHUNK_OVERHEAD - SIZE_T_ONE) - -/* pad request bytes into a usable size */ -#define pad_request(req) \ - (((req) + CHUNK_OVERHEAD + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK) - -/* pad request, checking for minimum (but not maximum) */ -#define request2size(req) \ - (((req) < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(req)) - - -/* ------------------ Operations on head and foot fields ----------------- */ - -/* - The head field of a chunk is or'ed with PINUSE_BIT when previous - adjacent chunk in use, and or'ed with CINUSE_BIT if this chunk is in - use. If the chunk was obtained with mmap, the prev_foot field has - IS_MMAPPED_BIT set, otherwise holding the offset of the base of the - mmapped region to the base of the chunk. -*/ - -#define PINUSE_BIT (SIZE_T_ONE) -#define CINUSE_BIT (SIZE_T_TWO) -#define INUSE_BITS (PINUSE_BIT|CINUSE_BIT) - -/* Head value for fenceposts */ -#define FENCEPOST_HEAD (INUSE_BITS|SIZE_T_SIZE) - -/* extraction of fields from head words */ -#define cinuse(p) ((p)->head & CINUSE_BIT) -#define pinuse(p) ((p)->head & PINUSE_BIT) -#define chunksize(p) ((p)->head & ~(INUSE_BITS)) - -#define clear_pinuse(p) ((p)->head &= ~PINUSE_BIT) -#define clear_cinuse(p) ((p)->head &= ~CINUSE_BIT) - -/* Treat space at ptr +/- offset as a chunk */ -#define chunk_plus_offset(p, s) ((mchunkptr)(((char*)(p)) + (s))) -#define chunk_minus_offset(p, s) ((mchunkptr)(((char*)(p)) - (s))) - -/* Ptr to next or previous physical malloc_chunk. */ -#define next_chunk(p) ((mchunkptr)( ((char*)(p)) + ((p)->head & ~INUSE_BITS))) -#define prev_chunk(p) ((mchunkptr)( ((char*)(p)) - ((p)->prev_foot) )) - -/* extract next chunk's pinuse bit */ -#define next_pinuse(p) ((next_chunk(p)->head) & PINUSE_BIT) - -/* Get/set size at footer */ -#define get_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot) -#define set_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot = (s)) - -/* Set size, pinuse bit, and foot */ -#define set_size_and_pinuse_of_free_chunk(p, s)\ - ((p)->head = (s|PINUSE_BIT), set_foot(p, s)) - -/* Set size, pinuse bit, foot, and clear next pinuse */ -#define set_free_with_pinuse(p, s, n)\ - (clear_pinuse(n), set_size_and_pinuse_of_free_chunk(p, s)) - -#define is_mmapped(p)\ - (!((p)->head & PINUSE_BIT) && ((p)->prev_foot & IS_MMAPPED_BIT)) - -/* Get the internal overhead associated with chunk p */ -#define overhead_for(p)\ - (is_mmapped(p)? MMAP_CHUNK_OVERHEAD : CHUNK_OVERHEAD) - -/* Return true if malloced space is not necessarily cleared */ -#if MMAP_CLEARS -#define calloc_must_clear(p) (!is_mmapped(p)) -#else /* MMAP_CLEARS */ -#define calloc_must_clear(p) (1) -#endif /* MMAP_CLEARS */ - -/* ---------------------- Overlaid data structures ----------------------- */ - -/* - When chunks are not in use, they are treated as nodes of either - lists or trees. - - "Small" chunks are stored in circular doubly-linked lists, and look - like this: - - chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Size of previous chunk | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - `head:' | Size of chunk, in bytes |P| - mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Forward pointer to next chunk in list | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Back pointer to previous chunk in list | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Unused space (may be 0 bytes long) . - . . - . | -nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - `foot:' | Size of chunk, in bytes | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - Larger chunks are kept in a form of bitwise digital trees (aka - tries) keyed on chunksizes. Because malloc_tree_chunks are only for - free chunks greater than 256 bytes, their size doesn't impose any - constraints on user chunk sizes. Each node looks like: - - chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Size of previous chunk | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - `head:' | Size of chunk, in bytes |P| - mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Forward pointer to next chunk of same size | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Back pointer to previous chunk of same size | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Pointer to left child (child[0]) | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Pointer to right child (child[1]) | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Pointer to parent | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | bin index of this chunk | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Unused space . - . | -nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - `foot:' | Size of chunk, in bytes | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - Each tree holding treenodes is a tree of unique chunk sizes. Chunks - of the same size are arranged in a circularly-linked list, with only - the oldest chunk (the next to be used, in our FIFO ordering) - actually in the tree. (Tree members are distinguished by a non-null - parent pointer.) If a chunk with the same size an an existing node - is inserted, it is linked off the existing node using pointers that - work in the same way as fd/bk pointers of small chunks. - - Each tree contains a power of 2 sized range of chunk sizes (the - smallest is 0x100 <= x < 0x180), which is is divided in half at each - tree level, with the chunks in the smaller half of the range (0x100 - <= x < 0x140 for the top nose) in the left subtree and the larger - half (0x140 <= x < 0x180) in the right subtree. This is, of course, - done by inspecting individual bits. - - Using these rules, each node's left subtree contains all smaller - sizes than its right subtree. However, the node at the root of each - subtree has no particular ordering relationship to either. (The - dividing line between the subtree sizes is based on trie relation.) - If we remove the last chunk of a given size from the interior of the - tree, we need to replace it with a leaf node. The tree ordering - rules permit a node to be replaced by any leaf below it. - - The smallest chunk in a tree (a common operation in a best-fit - allocator) can be found by walking a path to the leftmost leaf in - the tree. Unlike a usual binary tree, where we follow left child - pointers until we reach a null, here we follow the right child - pointer any time the left one is null, until we reach a leaf with - both child pointers null. The smallest chunk in the tree will be - somewhere along that path. - - The worst case number of steps to add, find, or remove a node is - bounded by the number of bits differentiating chunks within - bins. Under current bin calculations, this ranges from 6 up to 21 - (for 32 bit sizes) or up to 53 (for 64 bit sizes). The typical case - is of course much better. -*/ - -struct malloc_tree_chunk { - /* The first four fields must be compatible with malloc_chunk */ - size_t prev_foot; - size_t head; - struct malloc_tree_chunk* fd; - struct malloc_tree_chunk* bk; - - struct malloc_tree_chunk* child[2]; - struct malloc_tree_chunk* parent; - bindex_t index; -}; - -typedef struct malloc_tree_chunk tchunk; -typedef struct malloc_tree_chunk* tchunkptr; -typedef struct malloc_tree_chunk* tbinptr; /* The type of bins of trees */ - -/* A little helper macro for trees */ -#define leftmost_child(t) ((t)->child[0] != 0? (t)->child[0] : (t)->child[1]) - -/* ----------------------------- Segments -------------------------------- */ - -/* - Each malloc space may include non-contiguous segments, held in a - list headed by an embedded malloc_segment record representing the - top-most space. Segments also include flags holding properties of - the space. Large chunks that are directly allocated by mmap are not - included in this list. They are instead independently created and - destroyed without otherwise keeping track of them. - - Segment management mainly comes into play for spaces allocated by - MMAP. Any call to MMAP might or might not return memory that is - adjacent to an existing segment. MORECORE normally contiguously - extends the current space, so this space is almost always adjacent, - which is simpler and faster to deal with. (This is why MORECORE is - used preferentially to MMAP when both are available -- see - sys_alloc.) When allocating using MMAP, we don't use any of the - hinting mechanisms (inconsistently) supported in various - implementations of unix mmap, or distinguish reserving from - committing memory. Instead, we just ask for space, and exploit - contiguity when we get it. It is probably possible to do - better than this on some systems, but no general scheme seems - to be significantly better. - - Management entails a simpler variant of the consolidation scheme - used for chunks to reduce fragmentation -- new adjacent memory is - normally prepended or appended to an existing segment. However, - there are limitations compared to chunk consolidation that mostly - reflect the fact that segment processing is relatively infrequent - (occurring only when getting memory from system) and that we - don't expect to have huge numbers of segments: - - * Segments are not indexed, so traversal requires linear scans. (It - would be possible to index these, but is not worth the extra - overhead and complexity for most programs on most platforms.) - * New segments are only appended to old ones when holding top-most - memory; if they cannot be prepended to others, they are held in - different segments. - - Except for the top-most segment of an mstate, each segment record - is kept at the tail of its segment. Segments are added by pushing - segment records onto the list headed by &mstate.seg for the - containing mstate. - - Segment flags control allocation/merge/deallocation policies: - * If EXTERN_BIT set, then we did not allocate this segment, - and so should not try to deallocate or merge with others. - (This currently holds only for the initial segment passed - into create_mspace_with_base.) - * If IS_MMAPPED_BIT set, the segment may be merged with - other surrounding mmapped segments and trimmed/de-allocated - using munmap. - * If neither bit is set, then the segment was obtained using - MORECORE so can be merged with surrounding MORECORE'd segments - and deallocated/trimmed using MORECORE with negative arguments. -*/ - -struct malloc_segment { - char* base; /* base address */ - size_t size; /* allocated size */ - struct malloc_segment* next; /* ptr to next segment */ -#if FFI_MMAP_EXEC_WRIT - /* The mmap magic is supposed to store the address of the executable - segment at the very end of the requested block. */ - -# define mmap_exec_offset(b,s) (*(ptrdiff_t*)((b)+(s)-sizeof(ptrdiff_t))) - - /* We can only merge segments if their corresponding executable - segments are at identical offsets. */ -# define check_segment_merge(S,b,s) \ - (mmap_exec_offset((b),(s)) == (S)->exec_offset) - -# define add_segment_exec_offset(p,S) ((char*)(p) + (S)->exec_offset) -# define sub_segment_exec_offset(p,S) ((char*)(p) - (S)->exec_offset) - - /* The removal of sflags only works with HAVE_MORECORE == 0. */ - -# define get_segment_flags(S) (IS_MMAPPED_BIT) -# define set_segment_flags(S,v) \ - (((v) != IS_MMAPPED_BIT) ? (ABORT, (v)) : \ - (((S)->exec_offset = \ - mmap_exec_offset((S)->base, (S)->size)), \ - (mmap_exec_offset((S)->base + (S)->exec_offset, (S)->size) != \ - (S)->exec_offset) ? (ABORT, (v)) : \ - (mmap_exec_offset((S)->base, (S)->size) = 0), (v))) - - /* We use an offset here, instead of a pointer, because then, when - base changes, we don't have to modify this. On architectures - with segmented addresses, this might not work. */ - ptrdiff_t exec_offset; -#else - -# define get_segment_flags(S) ((S)->sflags) -# define set_segment_flags(S,v) ((S)->sflags = (v)) -# define check_segment_merge(S,b,s) (1) - - flag_t sflags; /* mmap and extern flag */ -#endif -}; - -#define is_mmapped_segment(S) (get_segment_flags(S) & IS_MMAPPED_BIT) -#define is_extern_segment(S) (get_segment_flags(S) & EXTERN_BIT) - -typedef struct malloc_segment msegment; -typedef struct malloc_segment* msegmentptr; - -/* ---------------------------- malloc_state ----------------------------- */ - -/* - A malloc_state holds all of the bookkeeping for a space. - The main fields are: - - Top - The topmost chunk of the currently active segment. Its size is - cached in topsize. The actual size of topmost space is - topsize+TOP_FOOT_SIZE, which includes space reserved for adding - fenceposts and segment records if necessary when getting more - space from the system. The size at which to autotrim top is - cached from mparams in trim_check, except that it is disabled if - an autotrim fails. - - Designated victim (dv) - This is the preferred chunk for servicing small requests that - don't have exact fits. It is normally the chunk split off most - recently to service another small request. Its size is cached in - dvsize. The link fields of this chunk are not maintained since it - is not kept in a bin. - - SmallBins - An array of bin headers for free chunks. These bins hold chunks - with sizes less than MIN_LARGE_SIZE bytes. Each bin contains - chunks of all the same size, spaced 8 bytes apart. To simplify - use in double-linked lists, each bin header acts as a malloc_chunk - pointing to the real first node, if it exists (else pointing to - itself). This avoids special-casing for headers. But to avoid - waste, we allocate only the fd/bk pointers of bins, and then use - repositioning tricks to treat these as the fields of a chunk. - - TreeBins - Treebins are pointers to the roots of trees holding a range of - sizes. There are 2 equally spaced treebins for each power of two - from TREE_SHIFT to TREE_SHIFT+16. The last bin holds anything - larger. - - Bin maps - There is one bit map for small bins ("smallmap") and one for - treebins ("treemap). Each bin sets its bit when non-empty, and - clears the bit when empty. Bit operations are then used to avoid - bin-by-bin searching -- nearly all "search" is done without ever - looking at bins that won't be selected. The bit maps - conservatively use 32 bits per map word, even if on 64bit system. - For a good description of some of the bit-based techniques used - here, see Henry S. Warren Jr's book "Hacker's Delight" (and - supplement at http://hackersdelight.org/). Many of these are - intended to reduce the branchiness of paths through malloc etc, as - well as to reduce the number of memory locations read or written. - - Segments - A list of segments headed by an embedded malloc_segment record - representing the initial space. - - Address check support - The least_addr field is the least address ever obtained from - MORECORE or MMAP. Attempted frees and reallocs of any address less - than this are trapped (unless INSECURE is defined). - - Magic tag - A cross-check field that should always hold same value as mparams.magic. - - Flags - Bits recording whether to use MMAP, locks, or contiguous MORECORE - - Statistics - Each space keeps track of current and maximum system memory - obtained via MORECORE or MMAP. - - Locking - If USE_LOCKS is defined, the "mutex" lock is acquired and released - around every public call using this mspace. -*/ - -/* Bin types, widths and sizes */ -#define NSMALLBINS (32U) -#define NTREEBINS (32U) -#define SMALLBIN_SHIFT (3U) -#define SMALLBIN_WIDTH (SIZE_T_ONE << SMALLBIN_SHIFT) -#define TREEBIN_SHIFT (8U) -#define MIN_LARGE_SIZE (SIZE_T_ONE << TREEBIN_SHIFT) -#define MAX_SMALL_SIZE (MIN_LARGE_SIZE - SIZE_T_ONE) -#define MAX_SMALL_REQUEST (MAX_SMALL_SIZE - CHUNK_ALIGN_MASK - CHUNK_OVERHEAD) - -struct malloc_state { - binmap_t smallmap; - binmap_t treemap; - size_t dvsize; - size_t topsize; - char* least_addr; - mchunkptr dv; - mchunkptr top; - size_t trim_check; - size_t magic; - mchunkptr smallbins[(NSMALLBINS+1)*2]; - tbinptr treebins[NTREEBINS]; - size_t footprint; - size_t max_footprint; - flag_t mflags; -#if USE_LOCKS - MLOCK_T mutex; /* locate lock among fields that rarely change */ -#endif /* USE_LOCKS */ - msegment seg; -}; - -typedef struct malloc_state* mstate; - -/* ------------- Global malloc_state and malloc_params ------------------- */ - -/* - malloc_params holds global properties, including those that can be - dynamically set using mallopt. There is a single instance, mparams, - initialized in init_mparams. -*/ - -struct malloc_params { - size_t magic; - size_t page_size; - size_t granularity; - size_t mmap_threshold; - size_t trim_threshold; - flag_t default_mflags; -}; - -static struct malloc_params mparams; - -/* The global malloc_state used for all non-"mspace" calls */ -static struct malloc_state _gm_; -#define gm (&_gm_) -#define is_global(M) ((M) == &_gm_) -#define is_initialized(M) ((M)->top != 0) - -/* -------------------------- system alloc setup ------------------------- */ - -/* Operations on mflags */ - -#define use_lock(M) ((M)->mflags & USE_LOCK_BIT) -#define enable_lock(M) ((M)->mflags |= USE_LOCK_BIT) -#define disable_lock(M) ((M)->mflags &= ~USE_LOCK_BIT) - -#define use_mmap(M) ((M)->mflags & USE_MMAP_BIT) -#define enable_mmap(M) ((M)->mflags |= USE_MMAP_BIT) -#define disable_mmap(M) ((M)->mflags &= ~USE_MMAP_BIT) - -#define use_noncontiguous(M) ((M)->mflags & USE_NONCONTIGUOUS_BIT) -#define disable_contiguous(M) ((M)->mflags |= USE_NONCONTIGUOUS_BIT) - -#define set_lock(M,L)\ - ((M)->mflags = (L)?\ - ((M)->mflags | USE_LOCK_BIT) :\ - ((M)->mflags & ~USE_LOCK_BIT)) - -/* page-align a size */ -#define page_align(S)\ - (((S) + (mparams.page_size)) & ~(mparams.page_size - SIZE_T_ONE)) - -/* granularity-align a size */ -#define granularity_align(S)\ - (((S) + (mparams.granularity)) & ~(mparams.granularity - SIZE_T_ONE)) - -#define is_page_aligned(S)\ - (((size_t)(S) & (mparams.page_size - SIZE_T_ONE)) == 0) -#define is_granularity_aligned(S)\ - (((size_t)(S) & (mparams.granularity - SIZE_T_ONE)) == 0) - -/* True if segment S holds address A */ -#define segment_holds(S, A)\ - ((char*)(A) >= S->base && (char*)(A) < S->base + S->size) - -/* Return segment holding given address */ -static msegmentptr segment_holding(mstate m, char* addr) { - msegmentptr sp = &m->seg; - for (;;) { - if (addr >= sp->base && addr < sp->base + sp->size) - return sp; - if ((sp = sp->next) == 0) - return 0; - } -} - -/* Return true if segment contains a segment link */ -static int has_segment_link(mstate m, msegmentptr ss) { - msegmentptr sp = &m->seg; - for (;;) { - if ((char*)sp >= ss->base && (char*)sp < ss->base + ss->size) - return 1; - if ((sp = sp->next) == 0) - return 0; - } -} - -#ifndef MORECORE_CANNOT_TRIM -#define should_trim(M,s) ((s) > (M)->trim_check) -#else /* MORECORE_CANNOT_TRIM */ -#define should_trim(M,s) (0) -#endif /* MORECORE_CANNOT_TRIM */ - -/* - TOP_FOOT_SIZE is padding at the end of a segment, including space - that may be needed to place segment records and fenceposts when new - noncontiguous segments are added. -*/ -#define TOP_FOOT_SIZE\ - (align_offset(chunk2mem(0))+pad_request(sizeof(struct malloc_segment))+MIN_CHUNK_SIZE) - - -/* ------------------------------- Hooks -------------------------------- */ - -/* - PREACTION should be defined to return 0 on success, and nonzero on - failure. If you are not using locking, you can redefine these to do - anything you like. -*/ - -#if USE_LOCKS - -/* Ensure locks are initialized */ -#define GLOBALLY_INITIALIZE() (mparams.page_size == 0 && init_mparams()) - -#define PREACTION(M) ((GLOBALLY_INITIALIZE() || use_lock(M))? ACQUIRE_LOCK(&(M)->mutex) : 0) -#define POSTACTION(M) { if (use_lock(M)) RELEASE_LOCK(&(M)->mutex); } -#else /* USE_LOCKS */ - -#ifndef PREACTION -#define PREACTION(M) (0) -#endif /* PREACTION */ - -#ifndef POSTACTION -#define POSTACTION(M) -#endif /* POSTACTION */ - -#endif /* USE_LOCKS */ - -/* - CORRUPTION_ERROR_ACTION is triggered upon detected bad addresses. - USAGE_ERROR_ACTION is triggered on detected bad frees and - reallocs. The argument p is an address that might have triggered the - fault. It is ignored by the two predefined actions, but might be - useful in custom actions that try to help diagnose errors. -*/ - -#if PROCEED_ON_ERROR - -/* A count of the number of corruption errors causing resets */ -int malloc_corruption_error_count; - -/* default corruption action */ -static void reset_on_error(mstate m); - -#define CORRUPTION_ERROR_ACTION(m) reset_on_error(m) -#define USAGE_ERROR_ACTION(m, p) - -#else /* PROCEED_ON_ERROR */ - -#ifndef CORRUPTION_ERROR_ACTION -#define CORRUPTION_ERROR_ACTION(m) ABORT -#endif /* CORRUPTION_ERROR_ACTION */ - -#ifndef USAGE_ERROR_ACTION -#define USAGE_ERROR_ACTION(m,p) ABORT -#endif /* USAGE_ERROR_ACTION */ - -#endif /* PROCEED_ON_ERROR */ - -/* -------------------------- Debugging setup ---------------------------- */ - -#if ! DEBUG - -#define check_free_chunk(M,P) -#define check_inuse_chunk(M,P) -#define check_malloced_chunk(M,P,N) -#define check_mmapped_chunk(M,P) -#define check_malloc_state(M) -#define check_top_chunk(M,P) - -#else /* DEBUG */ -#define check_free_chunk(M,P) do_check_free_chunk(M,P) -#define check_inuse_chunk(M,P) do_check_inuse_chunk(M,P) -#define check_top_chunk(M,P) do_check_top_chunk(M,P) -#define check_malloced_chunk(M,P,N) do_check_malloced_chunk(M,P,N) -#define check_mmapped_chunk(M,P) do_check_mmapped_chunk(M,P) -#define check_malloc_state(M) do_check_malloc_state(M) - -static void do_check_any_chunk(mstate m, mchunkptr p); -static void do_check_top_chunk(mstate m, mchunkptr p); -static void do_check_mmapped_chunk(mstate m, mchunkptr p); -static void do_check_inuse_chunk(mstate m, mchunkptr p); -static void do_check_free_chunk(mstate m, mchunkptr p); -static void do_check_malloced_chunk(mstate m, void* mem, size_t s); -static void do_check_tree(mstate m, tchunkptr t); -static void do_check_treebin(mstate m, bindex_t i); -static void do_check_smallbin(mstate m, bindex_t i); -static void do_check_malloc_state(mstate m); -static int bin_find(mstate m, mchunkptr x); -static size_t traverse_and_check(mstate m); -#endif /* DEBUG */ - -/* ---------------------------- Indexing Bins ---------------------------- */ - -#define is_small(s) (((s) >> SMALLBIN_SHIFT) < NSMALLBINS) -#define small_index(s) ((s) >> SMALLBIN_SHIFT) -#define small_index2size(i) ((i) << SMALLBIN_SHIFT) -#define MIN_SMALL_INDEX (small_index(MIN_CHUNK_SIZE)) - -/* addressing by index. See above about smallbin repositioning */ -#define smallbin_at(M, i) ((sbinptr)((char*)&((M)->smallbins[(i)<<1]))) -#define treebin_at(M,i) (&((M)->treebins[i])) - -/* assign tree index for size S to variable I */ -#if defined(__GNUC__) && defined(i386) -#define compute_tree_index(S, I)\ -{\ - size_t X = S >> TREEBIN_SHIFT;\ - if (X == 0)\ - I = 0;\ - else if (X > 0xFFFF)\ - I = NTREEBINS-1;\ - else {\ - unsigned int K;\ - __asm__("bsrl %1,%0\n\t" : "=r" (K) : "rm" (X));\ - I = (bindex_t)((K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1)));\ - }\ -} -#else /* GNUC */ -#define compute_tree_index(S, I)\ -{\ - size_t X = S >> TREEBIN_SHIFT;\ - if (X == 0)\ - I = 0;\ - else if (X > 0xFFFF)\ - I = NTREEBINS-1;\ - else {\ - unsigned int Y = (unsigned int)X;\ - unsigned int N = ((Y - 0x100) >> 16) & 8;\ - unsigned int K = (((Y <<= N) - 0x1000) >> 16) & 4;\ - N += K;\ - N += K = (((Y <<= K) - 0x4000) >> 16) & 2;\ - K = 14 - N + ((Y <<= K) >> 15);\ - I = (K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1));\ - }\ -} -#endif /* GNUC */ - -/* Bit representing maximum resolved size in a treebin at i */ -#define bit_for_tree_index(i) \ - (i == NTREEBINS-1)? (SIZE_T_BITSIZE-1) : (((i) >> 1) + TREEBIN_SHIFT - 2) - -/* Shift placing maximum resolved bit in a treebin at i as sign bit */ -#define leftshift_for_tree_index(i) \ - ((i == NTREEBINS-1)? 0 : \ - ((SIZE_T_BITSIZE-SIZE_T_ONE) - (((i) >> 1) + TREEBIN_SHIFT - 2))) - -/* The size of the smallest chunk held in bin with index i */ -#define minsize_for_tree_index(i) \ - ((SIZE_T_ONE << (((i) >> 1) + TREEBIN_SHIFT)) | \ - (((size_t)((i) & SIZE_T_ONE)) << (((i) >> 1) + TREEBIN_SHIFT - 1))) - - -/* ------------------------ Operations on bin maps ----------------------- */ - -/* bit corresponding to given index */ -#define idx2bit(i) ((binmap_t)(1) << (i)) - -/* Mark/Clear bits with given index */ -#define mark_smallmap(M,i) ((M)->smallmap |= idx2bit(i)) -#define clear_smallmap(M,i) ((M)->smallmap &= ~idx2bit(i)) -#define smallmap_is_marked(M,i) ((M)->smallmap & idx2bit(i)) - -#define mark_treemap(M,i) ((M)->treemap |= idx2bit(i)) -#define clear_treemap(M,i) ((M)->treemap &= ~idx2bit(i)) -#define treemap_is_marked(M,i) ((M)->treemap & idx2bit(i)) - -/* index corresponding to given bit */ - -#if defined(__GNUC__) && defined(i386) -#define compute_bit2idx(X, I)\ -{\ - unsigned int J;\ - __asm__("bsfl %1,%0\n\t" : "=r" (J) : "rm" (X));\ - I = (bindex_t)J;\ -} - -#else /* GNUC */ -#if USE_BUILTIN_FFS -#define compute_bit2idx(X, I) I = ffs(X)-1 - -#else /* USE_BUILTIN_FFS */ -#define compute_bit2idx(X, I)\ -{\ - unsigned int Y = X - 1;\ - unsigned int K = Y >> (16-4) & 16;\ - unsigned int N = K; Y >>= K;\ - N += K = Y >> (8-3) & 8; Y >>= K;\ - N += K = Y >> (4-2) & 4; Y >>= K;\ - N += K = Y >> (2-1) & 2; Y >>= K;\ - N += K = Y >> (1-0) & 1; Y >>= K;\ - I = (bindex_t)(N + Y);\ -} -#endif /* USE_BUILTIN_FFS */ -#endif /* GNUC */ - -/* isolate the least set bit of a bitmap */ -#define least_bit(x) ((x) & -(x)) - -/* mask with all bits to left of least bit of x on */ -#define left_bits(x) ((x<<1) | -(x<<1)) - -/* mask with all bits to left of or equal to least bit of x on */ -#define same_or_left_bits(x) ((x) | -(x)) - - -/* ----------------------- Runtime Check Support ------------------------- */ - -/* - For security, the main invariant is that malloc/free/etc never - writes to a static address other than malloc_state, unless static - malloc_state itself has been corrupted, which cannot occur via - malloc (because of these checks). In essence this means that we - believe all pointers, sizes, maps etc held in malloc_state, but - check all of those linked or offsetted from other embedded data - structures. These checks are interspersed with main code in a way - that tends to minimize their run-time cost. - - When FOOTERS is defined, in addition to range checking, we also - verify footer fields of inuse chunks, which can be used guarantee - that the mstate controlling malloc/free is intact. This is a - streamlined version of the approach described by William Robertson - et al in "Run-time Detection of Heap-based Overflows" LISA'03 - http://www.usenix.org/events/lisa03/tech/robertson.html The footer - of an inuse chunk holds the xor of its mstate and a random seed, - that is checked upon calls to free() and realloc(). This is - (probablistically) unguessable from outside the program, but can be - computed by any code successfully malloc'ing any chunk, so does not - itself provide protection against code that has already broken - security through some other means. Unlike Robertson et al, we - always dynamically check addresses of all offset chunks (previous, - next, etc). This turns out to be cheaper than relying on hashes. -*/ - -#if !INSECURE -/* Check if address a is at least as high as any from MORECORE or MMAP */ -#define ok_address(M, a) ((char*)(a) >= (M)->least_addr) -/* Check if address of next chunk n is higher than base chunk p */ -#define ok_next(p, n) ((char*)(p) < (char*)(n)) -/* Check if p has its cinuse bit on */ -#define ok_cinuse(p) cinuse(p) -/* Check if p has its pinuse bit on */ -#define ok_pinuse(p) pinuse(p) - -#else /* !INSECURE */ -#define ok_address(M, a) (1) -#define ok_next(b, n) (1) -#define ok_cinuse(p) (1) -#define ok_pinuse(p) (1) -#endif /* !INSECURE */ - -#if (FOOTERS && !INSECURE) -/* Check if (alleged) mstate m has expected magic field */ -#define ok_magic(M) ((M)->magic == mparams.magic) -#else /* (FOOTERS && !INSECURE) */ -#define ok_magic(M) (1) -#endif /* (FOOTERS && !INSECURE) */ - - -/* In gcc, use __builtin_expect to minimize impact of checks */ -#if !INSECURE -#if defined(__GNUC__) && __GNUC__ >= 3 -#define RTCHECK(e) __builtin_expect(e, 1) -#else /* GNUC */ -#define RTCHECK(e) (e) -#endif /* GNUC */ -#else /* !INSECURE */ -#define RTCHECK(e) (1) -#endif /* !INSECURE */ - -/* macros to set up inuse chunks with or without footers */ - -#if !FOOTERS - -#define mark_inuse_foot(M,p,s) - -/* Set cinuse bit and pinuse bit of next chunk */ -#define set_inuse(M,p,s)\ - ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\ - ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT) - -/* Set cinuse and pinuse of this chunk and pinuse of next chunk */ -#define set_inuse_and_pinuse(M,p,s)\ - ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ - ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT) - -/* Set size, cinuse and pinuse bit of this chunk */ -#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\ - ((p)->head = (s|PINUSE_BIT|CINUSE_BIT)) - -#else /* FOOTERS */ - -/* Set foot of inuse chunk to be xor of mstate and seed */ -#define mark_inuse_foot(M,p,s)\ - (((mchunkptr)((char*)(p) + (s)))->prev_foot = ((size_t)(M) ^ mparams.magic)) - -#define get_mstate_for(p)\ - ((mstate)(((mchunkptr)((char*)(p) +\ - (chunksize(p))))->prev_foot ^ mparams.magic)) - -#define set_inuse(M,p,s)\ - ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\ - (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT), \ - mark_inuse_foot(M,p,s)) - -#define set_inuse_and_pinuse(M,p,s)\ - ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ - (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT),\ - mark_inuse_foot(M,p,s)) - -#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\ - ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ - mark_inuse_foot(M, p, s)) - -#endif /* !FOOTERS */ - -/* ---------------------------- setting mparams -------------------------- */ - -/* Initialize mparams */ -static int init_mparams(void) { - if (mparams.page_size == 0) { - size_t s; - - mparams.mmap_threshold = DEFAULT_MMAP_THRESHOLD; - mparams.trim_threshold = DEFAULT_TRIM_THRESHOLD; -#if MORECORE_CONTIGUOUS - mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT; -#else /* MORECORE_CONTIGUOUS */ - mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT|USE_NONCONTIGUOUS_BIT; -#endif /* MORECORE_CONTIGUOUS */ - -#if (FOOTERS && !INSECURE) - { -#if USE_DEV_RANDOM - int fd; - unsigned char buf[sizeof(size_t)]; - /* Try to use /dev/urandom, else fall back on using time */ - if ((fd = open("/dev/urandom", O_RDONLY)) >= 0 && - read(fd, buf, sizeof(buf)) == sizeof(buf)) { - s = *((size_t *) buf); - close(fd); - } - else -#endif /* USE_DEV_RANDOM */ - s = (size_t)(time(0) ^ (size_t)0x55555555U); - - s |= (size_t)8U; /* ensure nonzero */ - s &= ~(size_t)7U; /* improve chances of fault for bad values */ - - } -#else /* (FOOTERS && !INSECURE) */ - s = (size_t)0x58585858U; -#endif /* (FOOTERS && !INSECURE) */ - ACQUIRE_MAGIC_INIT_LOCK(); - if (mparams.magic == 0) { - mparams.magic = s; - /* Set up lock for main malloc area */ - INITIAL_LOCK(&gm->mutex); - gm->mflags = mparams.default_mflags; - } - RELEASE_MAGIC_INIT_LOCK(); - -#if !defined(WIN32) && !defined(__OS2__) - mparams.page_size = malloc_getpagesize; - mparams.granularity = ((DEFAULT_GRANULARITY != 0)? - DEFAULT_GRANULARITY : mparams.page_size); -#elif defined (__OS2__) - /* if low-memory is used, os2munmap() would break - if it were anything other than 64k */ - mparams.page_size = 4096u; - mparams.granularity = 65536u; -#else /* WIN32 */ - { - SYSTEM_INFO system_info; - GetSystemInfo(&system_info); - mparams.page_size = system_info.dwPageSize; - mparams.granularity = system_info.dwAllocationGranularity; - } -#endif /* WIN32 */ - - /* Sanity-check configuration: - size_t must be unsigned and as wide as pointer type. - ints must be at least 4 bytes. - alignment must be at least 8. - Alignment, min chunk size, and page size must all be powers of 2. - */ - if ((sizeof(size_t) != sizeof(char*)) || - (MAX_SIZE_T < MIN_CHUNK_SIZE) || - (sizeof(int) < 4) || - (MALLOC_ALIGNMENT < (size_t)8U) || - ((MALLOC_ALIGNMENT & (MALLOC_ALIGNMENT-SIZE_T_ONE)) != 0) || - ((MCHUNK_SIZE & (MCHUNK_SIZE-SIZE_T_ONE)) != 0) || - ((mparams.granularity & (mparams.granularity-SIZE_T_ONE)) != 0) || - ((mparams.page_size & (mparams.page_size-SIZE_T_ONE)) != 0)) - ABORT; - } - return 0; -} - -/* support for mallopt */ -static int change_mparam(int param_number, int value) { - size_t val = (size_t)value; - init_mparams(); - switch(param_number) { - case M_TRIM_THRESHOLD: - mparams.trim_threshold = val; - return 1; - case M_GRANULARITY: - if (val >= mparams.page_size && ((val & (val-1)) == 0)) { - mparams.granularity = val; - return 1; - } - else - return 0; - case M_MMAP_THRESHOLD: - mparams.mmap_threshold = val; - return 1; - default: - return 0; - } -} - -#if DEBUG -/* ------------------------- Debugging Support --------------------------- */ - -/* Check properties of any chunk, whether free, inuse, mmapped etc */ -static void do_check_any_chunk(mstate m, mchunkptr p) { - assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); - assert(ok_address(m, p)); -} - -/* Check properties of top chunk */ -static void do_check_top_chunk(mstate m, mchunkptr p) { - msegmentptr sp = segment_holding(m, (char*)p); - size_t sz = chunksize(p); - assert(sp != 0); - assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); - assert(ok_address(m, p)); - assert(sz == m->topsize); - assert(sz > 0); - assert(sz == ((sp->base + sp->size) - (char*)p) - TOP_FOOT_SIZE); - assert(pinuse(p)); - assert(!next_pinuse(p)); -} - -/* Check properties of (inuse) mmapped chunks */ -static void do_check_mmapped_chunk(mstate m, mchunkptr p) { - size_t sz = chunksize(p); - size_t len = (sz + (p->prev_foot & ~IS_MMAPPED_BIT) + MMAP_FOOT_PAD); - assert(is_mmapped(p)); - assert(use_mmap(m)); - assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); - assert(ok_address(m, p)); - assert(!is_small(sz)); - assert((len & (mparams.page_size-SIZE_T_ONE)) == 0); - assert(chunk_plus_offset(p, sz)->head == FENCEPOST_HEAD); - assert(chunk_plus_offset(p, sz+SIZE_T_SIZE)->head == 0); -} - -/* Check properties of inuse chunks */ -static void do_check_inuse_chunk(mstate m, mchunkptr p) { - do_check_any_chunk(m, p); - assert(cinuse(p)); - assert(next_pinuse(p)); - /* If not pinuse and not mmapped, previous chunk has OK offset */ - assert(is_mmapped(p) || pinuse(p) || next_chunk(prev_chunk(p)) == p); - if (is_mmapped(p)) - do_check_mmapped_chunk(m, p); -} - -/* Check properties of free chunks */ -static void do_check_free_chunk(mstate m, mchunkptr p) { - size_t sz = p->head & ~(PINUSE_BIT|CINUSE_BIT); - mchunkptr next = chunk_plus_offset(p, sz); - do_check_any_chunk(m, p); - assert(!cinuse(p)); - assert(!next_pinuse(p)); - assert (!is_mmapped(p)); - if (p != m->dv && p != m->top) { - if (sz >= MIN_CHUNK_SIZE) { - assert((sz & CHUNK_ALIGN_MASK) == 0); - assert(is_aligned(chunk2mem(p))); - assert(next->prev_foot == sz); - assert(pinuse(p)); - assert (next == m->top || cinuse(next)); - assert(p->fd->bk == p); - assert(p->bk->fd == p); - } - else /* markers are always of size SIZE_T_SIZE */ - assert(sz == SIZE_T_SIZE); - } -} - -/* Check properties of malloced chunks at the point they are malloced */ -static void do_check_malloced_chunk(mstate m, void* mem, size_t s) { - if (mem != 0) { - mchunkptr p = mem2chunk(mem); - size_t sz = p->head & ~(PINUSE_BIT|CINUSE_BIT); - do_check_inuse_chunk(m, p); - assert((sz & CHUNK_ALIGN_MASK) == 0); - assert(sz >= MIN_CHUNK_SIZE); - assert(sz >= s); - /* unless mmapped, size is less than MIN_CHUNK_SIZE more than request */ - assert(is_mmapped(p) || sz < (s + MIN_CHUNK_SIZE)); - } -} - -/* Check a tree and its subtrees. */ -static void do_check_tree(mstate m, tchunkptr t) { - tchunkptr head = 0; - tchunkptr u = t; - bindex_t tindex = t->index; - size_t tsize = chunksize(t); - bindex_t idx; - compute_tree_index(tsize, idx); - assert(tindex == idx); - assert(tsize >= MIN_LARGE_SIZE); - assert(tsize >= minsize_for_tree_index(idx)); - assert((idx == NTREEBINS-1) || (tsize < minsize_for_tree_index((idx+1)))); - - do { /* traverse through chain of same-sized nodes */ - do_check_any_chunk(m, ((mchunkptr)u)); - assert(u->index == tindex); - assert(chunksize(u) == tsize); - assert(!cinuse(u)); - assert(!next_pinuse(u)); - assert(u->fd->bk == u); - assert(u->bk->fd == u); - if (u->parent == 0) { - assert(u->child[0] == 0); - assert(u->child[1] == 0); - } - else { - assert(head == 0); /* only one node on chain has parent */ - head = u; - assert(u->parent != u); - assert (u->parent->child[0] == u || - u->parent->child[1] == u || - *((tbinptr*)(u->parent)) == u); - if (u->child[0] != 0) { - assert(u->child[0]->parent == u); - assert(u->child[0] != u); - do_check_tree(m, u->child[0]); - } - if (u->child[1] != 0) { - assert(u->child[1]->parent == u); - assert(u->child[1] != u); - do_check_tree(m, u->child[1]); - } - if (u->child[0] != 0 && u->child[1] != 0) { - assert(chunksize(u->child[0]) < chunksize(u->child[1])); - } - } - u = u->fd; - } while (u != t); - assert(head != 0); -} - -/* Check all the chunks in a treebin. */ -static void do_check_treebin(mstate m, bindex_t i) { - tbinptr* tb = treebin_at(m, i); - tchunkptr t = *tb; - int empty = (m->treemap & (1U << i)) == 0; - if (t == 0) - assert(empty); - if (!empty) - do_check_tree(m, t); -} - -/* Check all the chunks in a smallbin. */ -static void do_check_smallbin(mstate m, bindex_t i) { - sbinptr b = smallbin_at(m, i); - mchunkptr p = b->bk; - unsigned int empty = (m->smallmap & (1U << i)) == 0; - if (p == b) - assert(empty); - if (!empty) { - for (; p != b; p = p->bk) { - size_t size = chunksize(p); - mchunkptr q; - /* each chunk claims to be free */ - do_check_free_chunk(m, p); - /* chunk belongs in bin */ - assert(small_index(size) == i); - assert(p->bk == b || chunksize(p->bk) == chunksize(p)); - /* chunk is followed by an inuse chunk */ - q = next_chunk(p); - if (q->head != FENCEPOST_HEAD) - do_check_inuse_chunk(m, q); - } - } -} - -/* Find x in a bin. Used in other check functions. */ -static int bin_find(mstate m, mchunkptr x) { - size_t size = chunksize(x); - if (is_small(size)) { - bindex_t sidx = small_index(size); - sbinptr b = smallbin_at(m, sidx); - if (smallmap_is_marked(m, sidx)) { - mchunkptr p = b; - do { - if (p == x) - return 1; - } while ((p = p->fd) != b); - } - } - else { - bindex_t tidx; - compute_tree_index(size, tidx); - if (treemap_is_marked(m, tidx)) { - tchunkptr t = *treebin_at(m, tidx); - size_t sizebits = size << leftshift_for_tree_index(tidx); - while (t != 0 && chunksize(t) != size) { - t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]; - sizebits <<= 1; - } - if (t != 0) { - tchunkptr u = t; - do { - if (u == (tchunkptr)x) - return 1; - } while ((u = u->fd) != t); - } - } - } - return 0; -} - -/* Traverse each chunk and check it; return total */ -static size_t traverse_and_check(mstate m) { - size_t sum = 0; - if (is_initialized(m)) { - msegmentptr s = &m->seg; - sum += m->topsize + TOP_FOOT_SIZE; - while (s != 0) { - mchunkptr q = align_as_chunk(s->base); - mchunkptr lastq = 0; - assert(pinuse(q)); - while (segment_holds(s, q) && - q != m->top && q->head != FENCEPOST_HEAD) { - sum += chunksize(q); - if (cinuse(q)) { - assert(!bin_find(m, q)); - do_check_inuse_chunk(m, q); - } - else { - assert(q == m->dv || bin_find(m, q)); - assert(lastq == 0 || cinuse(lastq)); /* Not 2 consecutive free */ - do_check_free_chunk(m, q); - } - lastq = q; - q = next_chunk(q); - } - s = s->next; - } - } - return sum; -} - -/* Check all properties of malloc_state. */ -static void do_check_malloc_state(mstate m) { - bindex_t i; - size_t total; - /* check bins */ - for (i = 0; i < NSMALLBINS; ++i) - do_check_smallbin(m, i); - for (i = 0; i < NTREEBINS; ++i) - do_check_treebin(m, i); - - if (m->dvsize != 0) { /* check dv chunk */ - do_check_any_chunk(m, m->dv); - assert(m->dvsize == chunksize(m->dv)); - assert(m->dvsize >= MIN_CHUNK_SIZE); - assert(bin_find(m, m->dv) == 0); - } - - if (m->top != 0) { /* check top chunk */ - do_check_top_chunk(m, m->top); - assert(m->topsize == chunksize(m->top)); - assert(m->topsize > 0); - assert(bin_find(m, m->top) == 0); - } - - total = traverse_and_check(m); - assert(total <= m->footprint); - assert(m->footprint <= m->max_footprint); -} -#endif /* DEBUG */ - -/* ----------------------------- statistics ------------------------------ */ - -#if !NO_MALLINFO -static struct mallinfo internal_mallinfo(mstate m) { - struct mallinfo nm = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - if (!PREACTION(m)) { - check_malloc_state(m); - if (is_initialized(m)) { - size_t nfree = SIZE_T_ONE; /* top always free */ - size_t mfree = m->topsize + TOP_FOOT_SIZE; - size_t sum = mfree; - msegmentptr s = &m->seg; - while (s != 0) { - mchunkptr q = align_as_chunk(s->base); - while (segment_holds(s, q) && - q != m->top && q->head != FENCEPOST_HEAD) { - size_t sz = chunksize(q); - sum += sz; - if (!cinuse(q)) { - mfree += sz; - ++nfree; - } - q = next_chunk(q); - } - s = s->next; - } - - nm.arena = sum; - nm.ordblks = nfree; - nm.hblkhd = m->footprint - sum; - nm.usmblks = m->max_footprint; - nm.uordblks = m->footprint - mfree; - nm.fordblks = mfree; - nm.keepcost = m->topsize; - } - - POSTACTION(m); - } - return nm; -} -#endif /* !NO_MALLINFO */ - -static void internal_malloc_stats(mstate m) { - if (!PREACTION(m)) { - size_t maxfp = 0; - size_t fp = 0; - size_t used = 0; - check_malloc_state(m); - if (is_initialized(m)) { - msegmentptr s = &m->seg; - maxfp = m->max_footprint; - fp = m->footprint; - used = fp - (m->topsize + TOP_FOOT_SIZE); - - while (s != 0) { - mchunkptr q = align_as_chunk(s->base); - while (segment_holds(s, q) && - q != m->top && q->head != FENCEPOST_HEAD) { - if (!cinuse(q)) - used -= chunksize(q); - q = next_chunk(q); - } - s = s->next; - } - } - - fprintf(stderr, "max system bytes = %10lu\n", (unsigned long)(maxfp)); - fprintf(stderr, "system bytes = %10lu\n", (unsigned long)(fp)); - fprintf(stderr, "in use bytes = %10lu\n", (unsigned long)(used)); - - POSTACTION(m); - } -} - -/* ----------------------- Operations on smallbins ----------------------- */ - -/* - Various forms of linking and unlinking are defined as macros. Even - the ones for trees, which are very long but have very short typical - paths. This is ugly but reduces reliance on inlining support of - compilers. -*/ - -/* Link a free chunk into a smallbin */ -#define insert_small_chunk(M, P, S) {\ - bindex_t I = small_index(S);\ - mchunkptr B = smallbin_at(M, I);\ - mchunkptr F = B;\ - assert(S >= MIN_CHUNK_SIZE);\ - if (!smallmap_is_marked(M, I))\ - mark_smallmap(M, I);\ - else if (RTCHECK(ok_address(M, B->fd)))\ - F = B->fd;\ - else {\ - CORRUPTION_ERROR_ACTION(M);\ - }\ - B->fd = P;\ - F->bk = P;\ - P->fd = F;\ - P->bk = B;\ -} - -/* Unlink a chunk from a smallbin */ -#define unlink_small_chunk(M, P, S) {\ - mchunkptr F = P->fd;\ - mchunkptr B = P->bk;\ - bindex_t I = small_index(S);\ - assert(P != B);\ - assert(P != F);\ - assert(chunksize(P) == small_index2size(I));\ - if (F == B)\ - clear_smallmap(M, I);\ - else if (RTCHECK((F == smallbin_at(M,I) || ok_address(M, F)) &&\ - (B == smallbin_at(M,I) || ok_address(M, B)))) {\ - F->bk = B;\ - B->fd = F;\ - }\ - else {\ - CORRUPTION_ERROR_ACTION(M);\ - }\ -} - -/* Unlink the first chunk from a smallbin */ -#define unlink_first_small_chunk(M, B, P, I) {\ - mchunkptr F = P->fd;\ - assert(P != B);\ - assert(P != F);\ - assert(chunksize(P) == small_index2size(I));\ - if (B == F)\ - clear_smallmap(M, I);\ - else if (RTCHECK(ok_address(M, F))) {\ - B->fd = F;\ - F->bk = B;\ - }\ - else {\ - CORRUPTION_ERROR_ACTION(M);\ - }\ -} - -/* Replace dv node, binning the old one */ -/* Used only when dvsize known to be small */ -#define replace_dv(M, P, S) {\ - size_t DVS = M->dvsize;\ - if (DVS != 0) {\ - mchunkptr DV = M->dv;\ - assert(is_small(DVS));\ - insert_small_chunk(M, DV, DVS);\ - }\ - M->dvsize = S;\ - M->dv = P;\ -} - -/* ------------------------- Operations on trees ------------------------- */ - -/* Insert chunk into tree */ -#define insert_large_chunk(M, X, S) {\ - tbinptr* H;\ - bindex_t I;\ - compute_tree_index(S, I);\ - H = treebin_at(M, I);\ - X->index = I;\ - X->child[0] = X->child[1] = 0;\ - if (!treemap_is_marked(M, I)) {\ - mark_treemap(M, I);\ - *H = X;\ - X->parent = (tchunkptr)H;\ - X->fd = X->bk = X;\ - }\ - else {\ - tchunkptr T = *H;\ - size_t K = S << leftshift_for_tree_index(I);\ - for (;;) {\ - if (chunksize(T) != S) {\ - tchunkptr* C = &(T->child[(K >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]);\ - K <<= 1;\ - if (*C != 0)\ - T = *C;\ - else if (RTCHECK(ok_address(M, C))) {\ - *C = X;\ - X->parent = T;\ - X->fd = X->bk = X;\ - break;\ - }\ - else {\ - CORRUPTION_ERROR_ACTION(M);\ - break;\ - }\ - }\ - else {\ - tchunkptr F = T->fd;\ - if (RTCHECK(ok_address(M, T) && ok_address(M, F))) {\ - T->fd = F->bk = X;\ - X->fd = F;\ - X->bk = T;\ - X->parent = 0;\ - break;\ - }\ - else {\ - CORRUPTION_ERROR_ACTION(M);\ - break;\ - }\ - }\ - }\ - }\ -} - -/* - Unlink steps: - - 1. If x is a chained node, unlink it from its same-sized fd/bk links - and choose its bk node as its replacement. - 2. If x was the last node of its size, but not a leaf node, it must - be replaced with a leaf node (not merely one with an open left or - right), to make sure that lefts and rights of descendents - correspond properly to bit masks. We use the rightmost descendent - of x. We could use any other leaf, but this is easy to locate and - tends to counteract removal of leftmosts elsewhere, and so keeps - paths shorter than minimally guaranteed. This doesn't loop much - because on average a node in a tree is near the bottom. - 3. If x is the base of a chain (i.e., has parent links) relink - x's parent and children to x's replacement (or null if none). -*/ - -#define unlink_large_chunk(M, X) {\ - tchunkptr XP = X->parent;\ - tchunkptr R;\ - if (X->bk != X) {\ - tchunkptr F = X->fd;\ - R = X->bk;\ - if (RTCHECK(ok_address(M, F))) {\ - F->bk = R;\ - R->fd = F;\ - }\ - else {\ - CORRUPTION_ERROR_ACTION(M);\ - }\ - }\ - else {\ - tchunkptr* RP;\ - if (((R = *(RP = &(X->child[1]))) != 0) ||\ - ((R = *(RP = &(X->child[0]))) != 0)) {\ - tchunkptr* CP;\ - while ((*(CP = &(R->child[1])) != 0) ||\ - (*(CP = &(R->child[0])) != 0)) {\ - R = *(RP = CP);\ - }\ - if (RTCHECK(ok_address(M, RP)))\ - *RP = 0;\ - else {\ - CORRUPTION_ERROR_ACTION(M);\ - }\ - }\ - }\ - if (XP != 0) {\ - tbinptr* H = treebin_at(M, X->index);\ - if (X == *H) {\ - if ((*H = R) == 0) \ - clear_treemap(M, X->index);\ - }\ - else if (RTCHECK(ok_address(M, XP))) {\ - if (XP->child[0] == X) \ - XP->child[0] = R;\ - else \ - XP->child[1] = R;\ - }\ - else\ - CORRUPTION_ERROR_ACTION(M);\ - if (R != 0) {\ - if (RTCHECK(ok_address(M, R))) {\ - tchunkptr C0, C1;\ - R->parent = XP;\ - if ((C0 = X->child[0]) != 0) {\ - if (RTCHECK(ok_address(M, C0))) {\ - R->child[0] = C0;\ - C0->parent = R;\ - }\ - else\ - CORRUPTION_ERROR_ACTION(M);\ - }\ - if ((C1 = X->child[1]) != 0) {\ - if (RTCHECK(ok_address(M, C1))) {\ - R->child[1] = C1;\ - C1->parent = R;\ - }\ - else\ - CORRUPTION_ERROR_ACTION(M);\ - }\ - }\ - else\ - CORRUPTION_ERROR_ACTION(M);\ - }\ - }\ -} - -/* Relays to large vs small bin operations */ - -#define insert_chunk(M, P, S)\ - if (is_small(S)) insert_small_chunk(M, P, S)\ - else { tchunkptr TP = (tchunkptr)(P); insert_large_chunk(M, TP, S); } - -#define unlink_chunk(M, P, S)\ - if (is_small(S)) unlink_small_chunk(M, P, S)\ - else { tchunkptr TP = (tchunkptr)(P); unlink_large_chunk(M, TP); } - - -/* Relays to internal calls to malloc/free from realloc, memalign etc */ - -#if ONLY_MSPACES -#define internal_malloc(m, b) mspace_malloc(m, b) -#define internal_free(m, mem) mspace_free(m,mem); -#else /* ONLY_MSPACES */ -#if MSPACES -#define internal_malloc(m, b)\ - (m == gm)? dlmalloc(b) : mspace_malloc(m, b) -#define internal_free(m, mem)\ - if (m == gm) dlfree(mem); else mspace_free(m,mem); -#else /* MSPACES */ -#define internal_malloc(m, b) dlmalloc(b) -#define internal_free(m, mem) dlfree(mem) -#endif /* MSPACES */ -#endif /* ONLY_MSPACES */ - -/* ----------------------- Direct-mmapping chunks ----------------------- */ - -/* - Directly mmapped chunks are set up with an offset to the start of - the mmapped region stored in the prev_foot field of the chunk. This - allows reconstruction of the required argument to MUNMAP when freed, - and also allows adjustment of the returned chunk to meet alignment - requirements (especially in memalign). There is also enough space - allocated to hold a fake next chunk of size SIZE_T_SIZE to maintain - the PINUSE bit so frees can be checked. -*/ - -/* Malloc using mmap */ -static void* mmap_alloc(mstate m, size_t nb) { - size_t mmsize = granularity_align(nb + SIX_SIZE_T_SIZES + CHUNK_ALIGN_MASK); - if (mmsize > nb) { /* Check for wrap around 0 */ - char* mm = (char*)(DIRECT_MMAP(mmsize)); - if (mm != CMFAIL) { - size_t offset = align_offset(chunk2mem(mm)); - size_t psize = mmsize - offset - MMAP_FOOT_PAD; - mchunkptr p = (mchunkptr)(mm + offset); - p->prev_foot = offset | IS_MMAPPED_BIT; - (p)->head = (psize|CINUSE_BIT); - mark_inuse_foot(m, p, psize); - chunk_plus_offset(p, psize)->head = FENCEPOST_HEAD; - chunk_plus_offset(p, psize+SIZE_T_SIZE)->head = 0; - - if (mm < m->least_addr) - m->least_addr = mm; - if ((m->footprint += mmsize) > m->max_footprint) - m->max_footprint = m->footprint; - assert(is_aligned(chunk2mem(p))); - check_mmapped_chunk(m, p); - return chunk2mem(p); - } - } - return 0; -} - -/* Realloc using mmap */ -static mchunkptr mmap_resize(mstate m, mchunkptr oldp, size_t nb) { - size_t oldsize = chunksize(oldp); - if (is_small(nb)) /* Can't shrink mmap regions below small size */ - return 0; - /* Keep old chunk if big enough but not too big */ - if (oldsize >= nb + SIZE_T_SIZE && - (oldsize - nb) <= (mparams.granularity << 1)) - return oldp; - else { - size_t offset = oldp->prev_foot & ~IS_MMAPPED_BIT; - size_t oldmmsize = oldsize + offset + MMAP_FOOT_PAD; - size_t newmmsize = granularity_align(nb + SIX_SIZE_T_SIZES + - CHUNK_ALIGN_MASK); - char* cp = (char*)CALL_MREMAP((char*)oldp - offset, - oldmmsize, newmmsize, 1); - if (cp != CMFAIL) { - mchunkptr newp = (mchunkptr)(cp + offset); - size_t psize = newmmsize - offset - MMAP_FOOT_PAD; - newp->head = (psize|CINUSE_BIT); - mark_inuse_foot(m, newp, psize); - chunk_plus_offset(newp, psize)->head = FENCEPOST_HEAD; - chunk_plus_offset(newp, psize+SIZE_T_SIZE)->head = 0; - - if (cp < m->least_addr) - m->least_addr = cp; - if ((m->footprint += newmmsize - oldmmsize) > m->max_footprint) - m->max_footprint = m->footprint; - check_mmapped_chunk(m, newp); - return newp; - } - } - return 0; -} - -/* -------------------------- mspace management -------------------------- */ - -/* Initialize top chunk and its size */ -static void init_top(mstate m, mchunkptr p, size_t psize) { - /* Ensure alignment */ - size_t offset = align_offset(chunk2mem(p)); - p = (mchunkptr)((char*)p + offset); - psize -= offset; - - m->top = p; - m->topsize = psize; - p->head = psize | PINUSE_BIT; - /* set size of fake trailing chunk holding overhead space only once */ - chunk_plus_offset(p, psize)->head = TOP_FOOT_SIZE; - m->trim_check = mparams.trim_threshold; /* reset on each update */ -} - -/* Initialize bins for a new mstate that is otherwise zeroed out */ -static void init_bins(mstate m) { - /* Establish circular links for smallbins */ - bindex_t i; - for (i = 0; i < NSMALLBINS; ++i) { - sbinptr bin = smallbin_at(m,i); - bin->fd = bin->bk = bin; - } -} - -#if PROCEED_ON_ERROR - -/* default corruption action */ -static void reset_on_error(mstate m) { - int i; - ++malloc_corruption_error_count; - /* Reinitialize fields to forget about all memory */ - m->smallbins = m->treebins = 0; - m->dvsize = m->topsize = 0; - m->seg.base = 0; - m->seg.size = 0; - m->seg.next = 0; - m->top = m->dv = 0; - for (i = 0; i < NTREEBINS; ++i) - *treebin_at(m, i) = 0; - init_bins(m); -} -#endif /* PROCEED_ON_ERROR */ - -/* Allocate chunk and prepend remainder with chunk in successor base. */ -static void* prepend_alloc(mstate m, char* newbase, char* oldbase, - size_t nb) { - mchunkptr p = align_as_chunk(newbase); - mchunkptr oldfirst = align_as_chunk(oldbase); - size_t psize = (char*)oldfirst - (char*)p; - mchunkptr q = chunk_plus_offset(p, nb); - size_t qsize = psize - nb; - set_size_and_pinuse_of_inuse_chunk(m, p, nb); - - assert((char*)oldfirst > (char*)q); - assert(pinuse(oldfirst)); - assert(qsize >= MIN_CHUNK_SIZE); - - /* consolidate remainder with first chunk of old base */ - if (oldfirst == m->top) { - size_t tsize = m->topsize += qsize; - m->top = q; - q->head = tsize | PINUSE_BIT; - check_top_chunk(m, q); - } - else if (oldfirst == m->dv) { - size_t dsize = m->dvsize += qsize; - m->dv = q; - set_size_and_pinuse_of_free_chunk(q, dsize); - } - else { - if (!cinuse(oldfirst)) { - size_t nsize = chunksize(oldfirst); - unlink_chunk(m, oldfirst, nsize); - oldfirst = chunk_plus_offset(oldfirst, nsize); - qsize += nsize; - } - set_free_with_pinuse(q, qsize, oldfirst); - insert_chunk(m, q, qsize); - check_free_chunk(m, q); - } - - check_malloced_chunk(m, chunk2mem(p), nb); - return chunk2mem(p); -} - - -/* Add a segment to hold a new noncontiguous region */ -static void add_segment(mstate m, char* tbase, size_t tsize, flag_t mmapped) { - /* Determine locations and sizes of segment, fenceposts, old top */ - char* old_top = (char*)m->top; - msegmentptr oldsp = segment_holding(m, old_top); - char* old_end = oldsp->base + oldsp->size; - size_t ssize = pad_request(sizeof(struct malloc_segment)); - char* rawsp = old_end - (ssize + FOUR_SIZE_T_SIZES + CHUNK_ALIGN_MASK); - size_t offset = align_offset(chunk2mem(rawsp)); - char* asp = rawsp + offset; - char* csp = (asp < (old_top + MIN_CHUNK_SIZE))? old_top : asp; - mchunkptr sp = (mchunkptr)csp; - msegmentptr ss = (msegmentptr)(chunk2mem(sp)); - mchunkptr tnext = chunk_plus_offset(sp, ssize); - mchunkptr p = tnext; - int nfences = 0; - - /* reset top to new space */ - init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE); - - /* Set up segment record */ - assert(is_aligned(ss)); - set_size_and_pinuse_of_inuse_chunk(m, sp, ssize); - *ss = m->seg; /* Push current record */ - m->seg.base = tbase; - m->seg.size = tsize; - set_segment_flags(&m->seg, mmapped); - m->seg.next = ss; - - /* Insert trailing fenceposts */ - for (;;) { - mchunkptr nextp = chunk_plus_offset(p, SIZE_T_SIZE); - p->head = FENCEPOST_HEAD; - ++nfences; - if ((char*)(&(nextp->head)) < old_end) - p = nextp; - else - break; - } - assert(nfences >= 2); - - /* Insert the rest of old top into a bin as an ordinary free chunk */ - if (csp != old_top) { - mchunkptr q = (mchunkptr)old_top; - size_t psize = csp - old_top; - mchunkptr tn = chunk_plus_offset(q, psize); - set_free_with_pinuse(q, psize, tn); - insert_chunk(m, q, psize); - } - - check_top_chunk(m, m->top); -} - -/* -------------------------- System allocation -------------------------- */ - -/* Get memory from system using MORECORE or MMAP */ -static void* sys_alloc(mstate m, size_t nb) { - char* tbase = CMFAIL; - size_t tsize = 0; - flag_t mmap_flag = 0; - - init_mparams(); - - /* Directly map large chunks */ - if (use_mmap(m) && nb >= mparams.mmap_threshold) { - void* mem = mmap_alloc(m, nb); - if (mem != 0) - return mem; - } - - /* - Try getting memory in any of three ways (in most-preferred to - least-preferred order): - 1. A call to MORECORE that can normally contiguously extend memory. - (disabled if not MORECORE_CONTIGUOUS or not HAVE_MORECORE or - or main space is mmapped or a previous contiguous call failed) - 2. A call to MMAP new space (disabled if not HAVE_MMAP). - Note that under the default settings, if MORECORE is unable to - fulfill a request, and HAVE_MMAP is true, then mmap is - used as a noncontiguous system allocator. This is a useful backup - strategy for systems with holes in address spaces -- in this case - sbrk cannot contiguously expand the heap, but mmap may be able to - find space. - 3. A call to MORECORE that cannot usually contiguously extend memory. - (disabled if not HAVE_MORECORE) - */ - - if (MORECORE_CONTIGUOUS && !use_noncontiguous(m)) { - char* br = CMFAIL; - msegmentptr ss = (m->top == 0)? 0 : segment_holding(m, (char*)m->top); - size_t asize = 0; - ACQUIRE_MORECORE_LOCK(); - - if (ss == 0) { /* First time through or recovery */ - char* base = (char*)CALL_MORECORE(0); - if (base != CMFAIL) { - asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE); - /* Adjust to end on a page boundary */ - if (!is_page_aligned(base)) - asize += (page_align((size_t)base) - (size_t)base); - /* Can't call MORECORE if size is negative when treated as signed */ - if (asize < HALF_MAX_SIZE_T && - (br = (char*)(CALL_MORECORE(asize))) == base) { - tbase = base; - tsize = asize; - } - } - } - else { - /* Subtract out existing available top space from MORECORE request. */ - asize = granularity_align(nb - m->topsize + TOP_FOOT_SIZE + SIZE_T_ONE); - /* Use mem here only if it did continuously extend old space */ - if (asize < HALF_MAX_SIZE_T && - (br = (char*)(CALL_MORECORE(asize))) == ss->base+ss->size) { - tbase = br; - tsize = asize; - } - } - - if (tbase == CMFAIL) { /* Cope with partial failure */ - if (br != CMFAIL) { /* Try to use/extend the space we did get */ - if (asize < HALF_MAX_SIZE_T && - asize < nb + TOP_FOOT_SIZE + SIZE_T_ONE) { - size_t esize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE - asize); - if (esize < HALF_MAX_SIZE_T) { - char* end = (char*)CALL_MORECORE(esize); - if (end != CMFAIL) - asize += esize; - else { /* Can't use; try to release */ - (void)CALL_MORECORE(-asize); - br = CMFAIL; - } - } - } - } - if (br != CMFAIL) { /* Use the space we did get */ - tbase = br; - tsize = asize; - } - else - disable_contiguous(m); /* Don't try contiguous path in the future */ - } - - RELEASE_MORECORE_LOCK(); - } - - if (HAVE_MMAP && tbase == CMFAIL) { /* Try MMAP */ - size_t req = nb + TOP_FOOT_SIZE + SIZE_T_ONE; - size_t rsize = granularity_align(req); - if (rsize > nb) { /* Fail if wraps around zero */ - char* mp = (char*)(CALL_MMAP(rsize)); - if (mp != CMFAIL) { - tbase = mp; - tsize = rsize; - mmap_flag = IS_MMAPPED_BIT; - } - } - } - - if (HAVE_MORECORE && tbase == CMFAIL) { /* Try noncontiguous MORECORE */ - size_t asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE); - if (asize < HALF_MAX_SIZE_T) { - char* br = CMFAIL; - char* end = CMFAIL; - ACQUIRE_MORECORE_LOCK(); - br = (char*)(CALL_MORECORE(asize)); - end = (char*)(CALL_MORECORE(0)); - RELEASE_MORECORE_LOCK(); - if (br != CMFAIL && end != CMFAIL && br < end) { - size_t ssize = end - br; - if (ssize > nb + TOP_FOOT_SIZE) { - tbase = br; - tsize = ssize; - } - } - } - } - - if (tbase != CMFAIL) { - - if ((m->footprint += tsize) > m->max_footprint) - m->max_footprint = m->footprint; - - if (!is_initialized(m)) { /* first-time initialization */ - m->seg.base = m->least_addr = tbase; - m->seg.size = tsize; - set_segment_flags(&m->seg, mmap_flag); - m->magic = mparams.magic; - init_bins(m); - if (is_global(m)) - init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE); - else { - /* Offset top by embedded malloc_state */ - mchunkptr mn = next_chunk(mem2chunk(m)); - init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) -TOP_FOOT_SIZE); - } - } - - else { - /* Try to merge with an existing segment */ - msegmentptr sp = &m->seg; - while (sp != 0 && tbase != sp->base + sp->size) - sp = sp->next; - if (sp != 0 && - !is_extern_segment(sp) && - check_segment_merge(sp, tbase, tsize) && - (get_segment_flags(sp) & IS_MMAPPED_BIT) == mmap_flag && - segment_holds(sp, m->top)) { /* append */ - sp->size += tsize; - init_top(m, m->top, m->topsize + tsize); - } - else { - if (tbase < m->least_addr) - m->least_addr = tbase; - sp = &m->seg; - while (sp != 0 && sp->base != tbase + tsize) - sp = sp->next; - if (sp != 0 && - !is_extern_segment(sp) && - check_segment_merge(sp, tbase, tsize) && - (get_segment_flags(sp) & IS_MMAPPED_BIT) == mmap_flag) { - char* oldbase = sp->base; - sp->base = tbase; - sp->size += tsize; - return prepend_alloc(m, tbase, oldbase, nb); - } - else - add_segment(m, tbase, tsize, mmap_flag); - } - } - - if (nb < m->topsize) { /* Allocate from new or extended top space */ - size_t rsize = m->topsize -= nb; - mchunkptr p = m->top; - mchunkptr r = m->top = chunk_plus_offset(p, nb); - r->head = rsize | PINUSE_BIT; - set_size_and_pinuse_of_inuse_chunk(m, p, nb); - check_top_chunk(m, m->top); - check_malloced_chunk(m, chunk2mem(p), nb); - return chunk2mem(p); - } - } - - MALLOC_FAILURE_ACTION; - return 0; -} - -/* ----------------------- system deallocation -------------------------- */ - -/* Unmap and unlink any mmapped segments that don't contain used chunks */ -static size_t release_unused_segments(mstate m) { - size_t released = 0; - msegmentptr pred = &m->seg; - msegmentptr sp = pred->next; - while (sp != 0) { - char* base = sp->base; - size_t size = sp->size; - msegmentptr next = sp->next; - if (is_mmapped_segment(sp) && !is_extern_segment(sp)) { - mchunkptr p = align_as_chunk(base); - size_t psize = chunksize(p); - /* Can unmap if first chunk holds entire segment and not pinned */ - if (!cinuse(p) && (char*)p + psize >= base + size - TOP_FOOT_SIZE) { - tchunkptr tp = (tchunkptr)p; - assert(segment_holds(sp, (char*)sp)); - if (p == m->dv) { - m->dv = 0; - m->dvsize = 0; - } - else { - unlink_large_chunk(m, tp); - } - if (CALL_MUNMAP(base, size) == 0) { - released += size; - m->footprint -= size; - /* unlink obsoleted record */ - sp = pred; - sp->next = next; - } - else { /* back out if cannot unmap */ - insert_large_chunk(m, tp, psize); - } - } - } - pred = sp; - sp = next; - } - return released; -} - -static int sys_trim(mstate m, size_t pad) { - size_t released = 0; - if (pad < MAX_REQUEST && is_initialized(m)) { - pad += TOP_FOOT_SIZE; /* ensure enough room for segment overhead */ - - if (m->topsize > pad) { - /* Shrink top space in granularity-size units, keeping at least one */ - size_t unit = mparams.granularity; - size_t extra = ((m->topsize - pad + (unit - SIZE_T_ONE)) / unit - - SIZE_T_ONE) * unit; - msegmentptr sp = segment_holding(m, (char*)m->top); - - if (!is_extern_segment(sp)) { - if (is_mmapped_segment(sp)) { - if (HAVE_MMAP && - sp->size >= extra && - !has_segment_link(m, sp)) { /* can't shrink if pinned */ - size_t newsize = sp->size - extra; - /* Prefer mremap, fall back to munmap */ - if ((CALL_MREMAP(sp->base, sp->size, newsize, 0) != MFAIL) || - (CALL_MUNMAP(sp->base + newsize, extra) == 0)) { - released = extra; - } - } - } - else if (HAVE_MORECORE) { - if (extra >= HALF_MAX_SIZE_T) /* Avoid wrapping negative */ - extra = (HALF_MAX_SIZE_T) + SIZE_T_ONE - unit; - ACQUIRE_MORECORE_LOCK(); - { - /* Make sure end of memory is where we last set it. */ - char* old_br = (char*)(CALL_MORECORE(0)); - if (old_br == sp->base + sp->size) { - char* rel_br = (char*)(CALL_MORECORE(-extra)); - char* new_br = (char*)(CALL_MORECORE(0)); - if (rel_br != CMFAIL && new_br < old_br) - released = old_br - new_br; - } - } - RELEASE_MORECORE_LOCK(); - } - } - - if (released != 0) { - sp->size -= released; - m->footprint -= released; - init_top(m, m->top, m->topsize - released); - check_top_chunk(m, m->top); - } - } - - /* Unmap any unused mmapped segments */ - if (HAVE_MMAP) - released += release_unused_segments(m); - - /* On failure, disable autotrim to avoid repeated failed future calls */ - if (released == 0) - m->trim_check = MAX_SIZE_T; - } - - return (released != 0)? 1 : 0; -} - -/* ---------------------------- malloc support --------------------------- */ - -/* allocate a large request from the best fitting chunk in a treebin */ -static void* tmalloc_large(mstate m, size_t nb) { - tchunkptr v = 0; - size_t rsize = -nb; /* Unsigned negation */ - tchunkptr t; - bindex_t idx; - compute_tree_index(nb, idx); - - if ((t = *treebin_at(m, idx)) != 0) { - /* Traverse tree for this bin looking for node with size == nb */ - size_t sizebits = nb << leftshift_for_tree_index(idx); - tchunkptr rst = 0; /* The deepest untaken right subtree */ - for (;;) { - tchunkptr rt; - size_t trem = chunksize(t) - nb; - if (trem < rsize) { - v = t; - if ((rsize = trem) == 0) - break; - } - rt = t->child[1]; - t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]; - if (rt != 0 && rt != t) - rst = rt; - if (t == 0) { - t = rst; /* set t to least subtree holding sizes > nb */ - break; - } - sizebits <<= 1; - } - } - - if (t == 0 && v == 0) { /* set t to root of next non-empty treebin */ - binmap_t leftbits = left_bits(idx2bit(idx)) & m->treemap; - if (leftbits != 0) { - bindex_t i; - binmap_t leastbit = least_bit(leftbits); - compute_bit2idx(leastbit, i); - t = *treebin_at(m, i); - } - } - - while (t != 0) { /* find smallest of tree or subtree */ - size_t trem = chunksize(t) - nb; - if (trem < rsize) { - rsize = trem; - v = t; - } - t = leftmost_child(t); - } - - /* If dv is a better fit, return 0 so malloc will use it */ - if (v != 0 && rsize < (size_t)(m->dvsize - nb)) { - if (RTCHECK(ok_address(m, v))) { /* split */ - mchunkptr r = chunk_plus_offset(v, nb); - assert(chunksize(v) == rsize + nb); - if (RTCHECK(ok_next(v, r))) { - unlink_large_chunk(m, v); - if (rsize < MIN_CHUNK_SIZE) - set_inuse_and_pinuse(m, v, (rsize + nb)); - else { - set_size_and_pinuse_of_inuse_chunk(m, v, nb); - set_size_and_pinuse_of_free_chunk(r, rsize); - insert_chunk(m, r, rsize); - } - return chunk2mem(v); - } - } - CORRUPTION_ERROR_ACTION(m); - } - return 0; -} - -/* allocate a small request from the best fitting chunk in a treebin */ -static void* tmalloc_small(mstate m, size_t nb) { - tchunkptr t, v; - size_t rsize; - bindex_t i; - binmap_t leastbit = least_bit(m->treemap); - compute_bit2idx(leastbit, i); - - v = t = *treebin_at(m, i); - rsize = chunksize(t) - nb; - - while ((t = leftmost_child(t)) != 0) { - size_t trem = chunksize(t) - nb; - if (trem < rsize) { - rsize = trem; - v = t; - } - } - - if (RTCHECK(ok_address(m, v))) { - mchunkptr r = chunk_plus_offset(v, nb); - assert(chunksize(v) == rsize + nb); - if (RTCHECK(ok_next(v, r))) { - unlink_large_chunk(m, v); - if (rsize < MIN_CHUNK_SIZE) - set_inuse_and_pinuse(m, v, (rsize + nb)); - else { - set_size_and_pinuse_of_inuse_chunk(m, v, nb); - set_size_and_pinuse_of_free_chunk(r, rsize); - replace_dv(m, r, rsize); - } - return chunk2mem(v); - } - } - - CORRUPTION_ERROR_ACTION(m); - return 0; -} - -/* --------------------------- realloc support --------------------------- */ - -static void* internal_realloc(mstate m, void* oldmem, size_t bytes) { - if (bytes >= MAX_REQUEST) { - MALLOC_FAILURE_ACTION; - return 0; - } - if (!PREACTION(m)) { - mchunkptr oldp = mem2chunk(oldmem); - size_t oldsize = chunksize(oldp); - mchunkptr next = chunk_plus_offset(oldp, oldsize); - mchunkptr newp = 0; - void* extra = 0; - - /* Try to either shrink or extend into top. Else malloc-copy-free */ - - if (RTCHECK(ok_address(m, oldp) && ok_cinuse(oldp) && - ok_next(oldp, next) && ok_pinuse(next))) { - size_t nb = request2size(bytes); - if (is_mmapped(oldp)) - newp = mmap_resize(m, oldp, nb); - else if (oldsize >= nb) { /* already big enough */ - size_t rsize = oldsize - nb; - newp = oldp; - if (rsize >= MIN_CHUNK_SIZE) { - mchunkptr remainder = chunk_plus_offset(newp, nb); - set_inuse(m, newp, nb); - set_inuse(m, remainder, rsize); - extra = chunk2mem(remainder); - } - } - else if (next == m->top && oldsize + m->topsize > nb) { - /* Expand into top */ - size_t newsize = oldsize + m->topsize; - size_t newtopsize = newsize - nb; - mchunkptr newtop = chunk_plus_offset(oldp, nb); - set_inuse(m, oldp, nb); - newtop->head = newtopsize |PINUSE_BIT; - m->top = newtop; - m->topsize = newtopsize; - newp = oldp; - } - } - else { - USAGE_ERROR_ACTION(m, oldmem); - POSTACTION(m); - return 0; - } - - POSTACTION(m); - - if (newp != 0) { - if (extra != 0) { - internal_free(m, extra); - } - check_inuse_chunk(m, newp); - return chunk2mem(newp); - } - else { - void* newmem = internal_malloc(m, bytes); - if (newmem != 0) { - size_t oc = oldsize - overhead_for(oldp); - memcpy(newmem, oldmem, (oc < bytes)? oc : bytes); - internal_free(m, oldmem); - } - return newmem; - } - } - return 0; -} - -/* --------------------------- memalign support -------------------------- */ - -static void* internal_memalign(mstate m, size_t alignment, size_t bytes) { - if (alignment <= MALLOC_ALIGNMENT) /* Can just use malloc */ - return internal_malloc(m, bytes); - if (alignment < MIN_CHUNK_SIZE) /* must be at least a minimum chunk size */ - alignment = MIN_CHUNK_SIZE; - if ((alignment & (alignment-SIZE_T_ONE)) != 0) {/* Ensure a power of 2 */ - size_t a = MALLOC_ALIGNMENT << 1; - while (a < alignment) a <<= 1; - alignment = a; - } - - if (bytes >= MAX_REQUEST - alignment) { - if (m != 0) { /* Test isn't needed but avoids compiler warning */ - MALLOC_FAILURE_ACTION; - } - } - else { - size_t nb = request2size(bytes); - size_t req = nb + alignment + MIN_CHUNK_SIZE - CHUNK_OVERHEAD; - char* mem = (char*)internal_malloc(m, req); - if (mem != 0) { - void* leader = 0; - void* trailer = 0; - mchunkptr p = mem2chunk(mem); - - if (PREACTION(m)) return 0; - if ((((size_t)(mem)) % alignment) != 0) { /* misaligned */ - /* - Find an aligned spot inside chunk. Since we need to give - back leading space in a chunk of at least MIN_CHUNK_SIZE, if - the first calculation places us at a spot with less than - MIN_CHUNK_SIZE leader, we can move to the next aligned spot. - We've allocated enough total room so that this is always - possible. - */ - char* br = (char*)mem2chunk((size_t)(((size_t)(mem + - alignment - - SIZE_T_ONE)) & - -alignment)); - char* pos = ((size_t)(br - (char*)(p)) >= MIN_CHUNK_SIZE)? - br : br+alignment; - mchunkptr newp = (mchunkptr)pos; - size_t leadsize = pos - (char*)(p); - size_t newsize = chunksize(p) - leadsize; - - if (is_mmapped(p)) { /* For mmapped chunks, just adjust offset */ - newp->prev_foot = p->prev_foot + leadsize; - newp->head = (newsize|CINUSE_BIT); - } - else { /* Otherwise, give back leader, use the rest */ - set_inuse(m, newp, newsize); - set_inuse(m, p, leadsize); - leader = chunk2mem(p); - } - p = newp; - } - - /* Give back spare room at the end */ - if (!is_mmapped(p)) { - size_t size = chunksize(p); - if (size > nb + MIN_CHUNK_SIZE) { - size_t remainder_size = size - nb; - mchunkptr remainder = chunk_plus_offset(p, nb); - set_inuse(m, p, nb); - set_inuse(m, remainder, remainder_size); - trailer = chunk2mem(remainder); - } - } - - assert (chunksize(p) >= nb); - assert((((size_t)(chunk2mem(p))) % alignment) == 0); - check_inuse_chunk(m, p); - POSTACTION(m); - if (leader != 0) { - internal_free(m, leader); - } - if (trailer != 0) { - internal_free(m, trailer); - } - return chunk2mem(p); - } - } - return 0; -} - -/* ------------------------ comalloc/coalloc support --------------------- */ - -static void** ialloc(mstate m, - size_t n_elements, - size_t* sizes, - int opts, - void* chunks[]) { - /* - This provides common support for independent_X routines, handling - all of the combinations that can result. - - The opts arg has: - bit 0 set if all elements are same size (using sizes[0]) - bit 1 set if elements should be zeroed - */ - - size_t element_size; /* chunksize of each element, if all same */ - size_t contents_size; /* total size of elements */ - size_t array_size; /* request size of pointer array */ - void* mem; /* malloced aggregate space */ - mchunkptr p; /* corresponding chunk */ - size_t remainder_size; /* remaining bytes while splitting */ - void** marray; /* either "chunks" or malloced ptr array */ - mchunkptr array_chunk; /* chunk for malloced ptr array */ - flag_t was_enabled; /* to disable mmap */ - size_t size; - size_t i; - - /* compute array length, if needed */ - if (chunks != 0) { - if (n_elements == 0) - return chunks; /* nothing to do */ - marray = chunks; - array_size = 0; - } - else { - /* if empty req, must still return chunk representing empty array */ - if (n_elements == 0) - return (void**)internal_malloc(m, 0); - marray = 0; - array_size = request2size(n_elements * (sizeof(void*))); - } - - /* compute total element size */ - if (opts & 0x1) { /* all-same-size */ - element_size = request2size(*sizes); - contents_size = n_elements * element_size; - } - else { /* add up all the sizes */ - element_size = 0; - contents_size = 0; - for (i = 0; i != n_elements; ++i) - contents_size += request2size(sizes[i]); - } - - size = contents_size + array_size; - - /* - Allocate the aggregate chunk. First disable direct-mmapping so - malloc won't use it, since we would not be able to later - free/realloc space internal to a segregated mmap region. - */ - was_enabled = use_mmap(m); - disable_mmap(m); - mem = internal_malloc(m, size - CHUNK_OVERHEAD); - if (was_enabled) - enable_mmap(m); - if (mem == 0) - return 0; - - if (PREACTION(m)) return 0; - p = mem2chunk(mem); - remainder_size = chunksize(p); - - assert(!is_mmapped(p)); - - if (opts & 0x2) { /* optionally clear the elements */ - memset((size_t*)mem, 0, remainder_size - SIZE_T_SIZE - array_size); - } - - /* If not provided, allocate the pointer array as final part of chunk */ - if (marray == 0) { - size_t array_chunk_size; - array_chunk = chunk_plus_offset(p, contents_size); - array_chunk_size = remainder_size - contents_size; - marray = (void**) (chunk2mem(array_chunk)); - set_size_and_pinuse_of_inuse_chunk(m, array_chunk, array_chunk_size); - remainder_size = contents_size; - } - - /* split out elements */ - for (i = 0; ; ++i) { - marray[i] = chunk2mem(p); - if (i != n_elements-1) { - if (element_size != 0) - size = element_size; - else - size = request2size(sizes[i]); - remainder_size -= size; - set_size_and_pinuse_of_inuse_chunk(m, p, size); - p = chunk_plus_offset(p, size); - } - else { /* the final element absorbs any overallocation slop */ - set_size_and_pinuse_of_inuse_chunk(m, p, remainder_size); - break; - } - } - -#if DEBUG - if (marray != chunks) { - /* final element must have exactly exhausted chunk */ - if (element_size != 0) { - assert(remainder_size == element_size); - } - else { - assert(remainder_size == request2size(sizes[i])); - } - check_inuse_chunk(m, mem2chunk(marray)); - } - for (i = 0; i != n_elements; ++i) - check_inuse_chunk(m, mem2chunk(marray[i])); - -#endif /* DEBUG */ - - POSTACTION(m); - return marray; -} - - -/* -------------------------- public routines ---------------------------- */ - -#if !ONLY_MSPACES - -void* dlmalloc(size_t bytes) { - /* - Basic algorithm: - If a small request (< 256 bytes minus per-chunk overhead): - 1. If one exists, use a remainderless chunk in associated smallbin. - (Remainderless means that there are too few excess bytes to - represent as a chunk.) - 2. If it is big enough, use the dv chunk, which is normally the - chunk adjacent to the one used for the most recent small request. - 3. If one exists, split the smallest available chunk in a bin, - saving remainder in dv. - 4. If it is big enough, use the top chunk. - 5. If available, get memory from system and use it - Otherwise, for a large request: - 1. Find the smallest available binned chunk that fits, and use it - if it is better fitting than dv chunk, splitting if necessary. - 2. If better fitting than any binned chunk, use the dv chunk. - 3. If it is big enough, use the top chunk. - 4. If request size >= mmap threshold, try to directly mmap this chunk. - 5. If available, get memory from system and use it - - The ugly goto's here ensure that postaction occurs along all paths. - */ - - if (!PREACTION(gm)) { - void* mem; - size_t nb; - if (bytes <= MAX_SMALL_REQUEST) { - bindex_t idx; - binmap_t smallbits; - nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes); - idx = small_index(nb); - smallbits = gm->smallmap >> idx; - - if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */ - mchunkptr b, p; - idx += ~smallbits & 1; /* Uses next bin if idx empty */ - b = smallbin_at(gm, idx); - p = b->fd; - assert(chunksize(p) == small_index2size(idx)); - unlink_first_small_chunk(gm, b, p, idx); - set_inuse_and_pinuse(gm, p, small_index2size(idx)); - mem = chunk2mem(p); - check_malloced_chunk(gm, mem, nb); - goto postaction; - } - - else if (nb > gm->dvsize) { - if (smallbits != 0) { /* Use chunk in next nonempty smallbin */ - mchunkptr b, p, r; - size_t rsize; - bindex_t i; - binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx)); - binmap_t leastbit = least_bit(leftbits); - compute_bit2idx(leastbit, i); - b = smallbin_at(gm, i); - p = b->fd; - assert(chunksize(p) == small_index2size(i)); - unlink_first_small_chunk(gm, b, p, i); - rsize = small_index2size(i) - nb; - /* Fit here cannot be remainderless if 4byte sizes */ - if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE) - set_inuse_and_pinuse(gm, p, small_index2size(i)); - else { - set_size_and_pinuse_of_inuse_chunk(gm, p, nb); - r = chunk_plus_offset(p, nb); - set_size_and_pinuse_of_free_chunk(r, rsize); - replace_dv(gm, r, rsize); - } - mem = chunk2mem(p); - check_malloced_chunk(gm, mem, nb); - goto postaction; - } - - else if (gm->treemap != 0 && (mem = tmalloc_small(gm, nb)) != 0) { - check_malloced_chunk(gm, mem, nb); - goto postaction; - } - } - } - else if (bytes >= MAX_REQUEST) - nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */ - else { - nb = pad_request(bytes); - if (gm->treemap != 0 && (mem = tmalloc_large(gm, nb)) != 0) { - check_malloced_chunk(gm, mem, nb); - goto postaction; - } - } - - if (nb <= gm->dvsize) { - size_t rsize = gm->dvsize - nb; - mchunkptr p = gm->dv; - if (rsize >= MIN_CHUNK_SIZE) { /* split dv */ - mchunkptr r = gm->dv = chunk_plus_offset(p, nb); - gm->dvsize = rsize; - set_size_and_pinuse_of_free_chunk(r, rsize); - set_size_and_pinuse_of_inuse_chunk(gm, p, nb); - } - else { /* exhaust dv */ - size_t dvs = gm->dvsize; - gm->dvsize = 0; - gm->dv = 0; - set_inuse_and_pinuse(gm, p, dvs); - } - mem = chunk2mem(p); - check_malloced_chunk(gm, mem, nb); - goto postaction; - } - - else if (nb < gm->topsize) { /* Split top */ - size_t rsize = gm->topsize -= nb; - mchunkptr p = gm->top; - mchunkptr r = gm->top = chunk_plus_offset(p, nb); - r->head = rsize | PINUSE_BIT; - set_size_and_pinuse_of_inuse_chunk(gm, p, nb); - mem = chunk2mem(p); - check_top_chunk(gm, gm->top); - check_malloced_chunk(gm, mem, nb); - goto postaction; - } - - mem = sys_alloc(gm, nb); - - postaction: - POSTACTION(gm); - return mem; - } - - return 0; -} - -void dlfree(void* mem) { - /* - Consolidate freed chunks with preceding or succeeding bordering - free chunks, if they exist, and then place in a bin. Intermixed - with special cases for top, dv, mmapped chunks, and usage errors. - */ - - if (mem != 0) { - mchunkptr p = mem2chunk(mem); -#if FOOTERS - mstate fm = get_mstate_for(p); - if (!ok_magic(fm)) { - USAGE_ERROR_ACTION(fm, p); - return; - } -#else /* FOOTERS */ -#define fm gm -#endif /* FOOTERS */ - if (!PREACTION(fm)) { - check_inuse_chunk(fm, p); - if (RTCHECK(ok_address(fm, p) && ok_cinuse(p))) { - size_t psize = chunksize(p); - mchunkptr next = chunk_plus_offset(p, psize); - if (!pinuse(p)) { - size_t prevsize = p->prev_foot; - if ((prevsize & IS_MMAPPED_BIT) != 0) { - prevsize &= ~IS_MMAPPED_BIT; - psize += prevsize + MMAP_FOOT_PAD; - if (CALL_MUNMAP((char*)p - prevsize, psize) == 0) - fm->footprint -= psize; - goto postaction; - } - else { - mchunkptr prev = chunk_minus_offset(p, prevsize); - psize += prevsize; - p = prev; - if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */ - if (p != fm->dv) { - unlink_chunk(fm, p, prevsize); - } - else if ((next->head & INUSE_BITS) == INUSE_BITS) { - fm->dvsize = psize; - set_free_with_pinuse(p, psize, next); - goto postaction; - } - } - else - goto erroraction; - } - } - - if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) { - if (!cinuse(next)) { /* consolidate forward */ - if (next == fm->top) { - size_t tsize = fm->topsize += psize; - fm->top = p; - p->head = tsize | PINUSE_BIT; - if (p == fm->dv) { - fm->dv = 0; - fm->dvsize = 0; - } - if (should_trim(fm, tsize)) - sys_trim(fm, 0); - goto postaction; - } - else if (next == fm->dv) { - size_t dsize = fm->dvsize += psize; - fm->dv = p; - set_size_and_pinuse_of_free_chunk(p, dsize); - goto postaction; - } - else { - size_t nsize = chunksize(next); - psize += nsize; - unlink_chunk(fm, next, nsize); - set_size_and_pinuse_of_free_chunk(p, psize); - if (p == fm->dv) { - fm->dvsize = psize; - goto postaction; - } - } - } - else - set_free_with_pinuse(p, psize, next); - insert_chunk(fm, p, psize); - check_free_chunk(fm, p); - goto postaction; - } - } - erroraction: - USAGE_ERROR_ACTION(fm, p); - postaction: - POSTACTION(fm); - } - } -#if !FOOTERS -#undef fm -#endif /* FOOTERS */ -} - -void* dlcalloc(size_t n_elements, size_t elem_size) { - void* mem; - size_t req = 0; - if (n_elements != 0) { - req = n_elements * elem_size; - if (((n_elements | elem_size) & ~(size_t)0xffff) && - (req / n_elements != elem_size)) - req = MAX_SIZE_T; /* force downstream failure on overflow */ - } - mem = dlmalloc(req); - if (mem != 0 && calloc_must_clear(mem2chunk(mem))) - memset(mem, 0, req); - return mem; -} - -void* dlrealloc(void* oldmem, size_t bytes) { - if (oldmem == 0) - return dlmalloc(bytes); -#ifdef REALLOC_ZERO_BYTES_FREES - if (bytes == 0) { - dlfree(oldmem); - return 0; - } -#endif /* REALLOC_ZERO_BYTES_FREES */ - else { -#if ! FOOTERS - mstate m = gm; -#else /* FOOTERS */ - mstate m = get_mstate_for(mem2chunk(oldmem)); - if (!ok_magic(m)) { - USAGE_ERROR_ACTION(m, oldmem); - return 0; - } -#endif /* FOOTERS */ - return internal_realloc(m, oldmem, bytes); - } -} - -void* dlmemalign(size_t alignment, size_t bytes) { - return internal_memalign(gm, alignment, bytes); -} - -void** dlindependent_calloc(size_t n_elements, size_t elem_size, - void* chunks[]) { - size_t sz = elem_size; /* serves as 1-element array */ - return ialloc(gm, n_elements, &sz, 3, chunks); -} - -void** dlindependent_comalloc(size_t n_elements, size_t sizes[], - void* chunks[]) { - return ialloc(gm, n_elements, sizes, 0, chunks); -} - -void* dlvalloc(size_t bytes) { - size_t pagesz; - init_mparams(); - pagesz = mparams.page_size; - return dlmemalign(pagesz, bytes); -} - -void* dlpvalloc(size_t bytes) { - size_t pagesz; - init_mparams(); - pagesz = mparams.page_size; - return dlmemalign(pagesz, (bytes + pagesz - SIZE_T_ONE) & ~(pagesz - SIZE_T_ONE)); -} - -int dlmalloc_trim(size_t pad) { - int result = 0; - if (!PREACTION(gm)) { - result = sys_trim(gm, pad); - POSTACTION(gm); - } - return result; -} - -size_t dlmalloc_footprint(void) { - return gm->footprint; -} - -size_t dlmalloc_max_footprint(void) { - return gm->max_footprint; -} - -#if !NO_MALLINFO -struct mallinfo dlmallinfo(void) { - return internal_mallinfo(gm); -} -#endif /* NO_MALLINFO */ - -void dlmalloc_stats() { - internal_malloc_stats(gm); -} - -size_t dlmalloc_usable_size(void* mem) { - if (mem != 0) { - mchunkptr p = mem2chunk(mem); - if (cinuse(p)) - return chunksize(p) - overhead_for(p); - } - return 0; -} - -int dlmallopt(int param_number, int value) { - return change_mparam(param_number, value); -} - -#endif /* !ONLY_MSPACES */ - -/* ----------------------------- user mspaces ---------------------------- */ - -#if MSPACES - -static mstate init_user_mstate(char* tbase, size_t tsize) { - size_t msize = pad_request(sizeof(struct malloc_state)); - mchunkptr mn; - mchunkptr msp = align_as_chunk(tbase); - mstate m = (mstate)(chunk2mem(msp)); - memset(m, 0, msize); - INITIAL_LOCK(&m->mutex); - msp->head = (msize|PINUSE_BIT|CINUSE_BIT); - m->seg.base = m->least_addr = tbase; - m->seg.size = m->footprint = m->max_footprint = tsize; - m->magic = mparams.magic; - m->mflags = mparams.default_mflags; - disable_contiguous(m); - init_bins(m); - mn = next_chunk(mem2chunk(m)); - init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) - TOP_FOOT_SIZE); - check_top_chunk(m, m->top); - return m; -} - -mspace create_mspace(size_t capacity, int locked) { - mstate m = 0; - size_t msize = pad_request(sizeof(struct malloc_state)); - init_mparams(); /* Ensure pagesize etc initialized */ - - if (capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) { - size_t rs = ((capacity == 0)? mparams.granularity : - (capacity + TOP_FOOT_SIZE + msize)); - size_t tsize = granularity_align(rs); - char* tbase = (char*)(CALL_MMAP(tsize)); - if (tbase != CMFAIL) { - m = init_user_mstate(tbase, tsize); - set_segment_flags(&m->seg, IS_MMAPPED_BIT); - set_lock(m, locked); - } - } - return (mspace)m; -} - -mspace create_mspace_with_base(void* base, size_t capacity, int locked) { - mstate m = 0; - size_t msize = pad_request(sizeof(struct malloc_state)); - init_mparams(); /* Ensure pagesize etc initialized */ - - if (capacity > msize + TOP_FOOT_SIZE && - capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) { - m = init_user_mstate((char*)base, capacity); - set_segment_flags(&m->seg, EXTERN_BIT); - set_lock(m, locked); - } - return (mspace)m; -} - -size_t destroy_mspace(mspace msp) { - size_t freed = 0; - mstate ms = (mstate)msp; - if (ok_magic(ms)) { - msegmentptr sp = &ms->seg; - while (sp != 0) { - char* base = sp->base; - size_t size = sp->size; - flag_t flag = get_segment_flags(sp); - sp = sp->next; - if ((flag & IS_MMAPPED_BIT) && !(flag & EXTERN_BIT) && - CALL_MUNMAP(base, size) == 0) - freed += size; - } - } - else { - USAGE_ERROR_ACTION(ms,ms); - } - return freed; -} - -/* - mspace versions of routines are near-clones of the global - versions. This is not so nice but better than the alternatives. -*/ - - -void* mspace_malloc(mspace msp, size_t bytes) { - mstate ms = (mstate)msp; - if (!ok_magic(ms)) { - USAGE_ERROR_ACTION(ms,ms); - return 0; - } - if (!PREACTION(ms)) { - void* mem; - size_t nb; - if (bytes <= MAX_SMALL_REQUEST) { - bindex_t idx; - binmap_t smallbits; - nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes); - idx = small_index(nb); - smallbits = ms->smallmap >> idx; - - if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */ - mchunkptr b, p; - idx += ~smallbits & 1; /* Uses next bin if idx empty */ - b = smallbin_at(ms, idx); - p = b->fd; - assert(chunksize(p) == small_index2size(idx)); - unlink_first_small_chunk(ms, b, p, idx); - set_inuse_and_pinuse(ms, p, small_index2size(idx)); - mem = chunk2mem(p); - check_malloced_chunk(ms, mem, nb); - goto postaction; - } - - else if (nb > ms->dvsize) { - if (smallbits != 0) { /* Use chunk in next nonempty smallbin */ - mchunkptr b, p, r; - size_t rsize; - bindex_t i; - binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx)); - binmap_t leastbit = least_bit(leftbits); - compute_bit2idx(leastbit, i); - b = smallbin_at(ms, i); - p = b->fd; - assert(chunksize(p) == small_index2size(i)); - unlink_first_small_chunk(ms, b, p, i); - rsize = small_index2size(i) - nb; - /* Fit here cannot be remainderless if 4byte sizes */ - if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE) - set_inuse_and_pinuse(ms, p, small_index2size(i)); - else { - set_size_and_pinuse_of_inuse_chunk(ms, p, nb); - r = chunk_plus_offset(p, nb); - set_size_and_pinuse_of_free_chunk(r, rsize); - replace_dv(ms, r, rsize); - } - mem = chunk2mem(p); - check_malloced_chunk(ms, mem, nb); - goto postaction; - } - - else if (ms->treemap != 0 && (mem = tmalloc_small(ms, nb)) != 0) { - check_malloced_chunk(ms, mem, nb); - goto postaction; - } - } - } - else if (bytes >= MAX_REQUEST) - nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */ - else { - nb = pad_request(bytes); - if (ms->treemap != 0 && (mem = tmalloc_large(ms, nb)) != 0) { - check_malloced_chunk(ms, mem, nb); - goto postaction; - } - } - - if (nb <= ms->dvsize) { - size_t rsize = ms->dvsize - nb; - mchunkptr p = ms->dv; - if (rsize >= MIN_CHUNK_SIZE) { /* split dv */ - mchunkptr r = ms->dv = chunk_plus_offset(p, nb); - ms->dvsize = rsize; - set_size_and_pinuse_of_free_chunk(r, rsize); - set_size_and_pinuse_of_inuse_chunk(ms, p, nb); - } - else { /* exhaust dv */ - size_t dvs = ms->dvsize; - ms->dvsize = 0; - ms->dv = 0; - set_inuse_and_pinuse(ms, p, dvs); - } - mem = chunk2mem(p); - check_malloced_chunk(ms, mem, nb); - goto postaction; - } - - else if (nb < ms->topsize) { /* Split top */ - size_t rsize = ms->topsize -= nb; - mchunkptr p = ms->top; - mchunkptr r = ms->top = chunk_plus_offset(p, nb); - r->head = rsize | PINUSE_BIT; - set_size_and_pinuse_of_inuse_chunk(ms, p, nb); - mem = chunk2mem(p); - check_top_chunk(ms, ms->top); - check_malloced_chunk(ms, mem, nb); - goto postaction; - } - - mem = sys_alloc(ms, nb); - - postaction: - POSTACTION(ms); - return mem; - } - - return 0; -} - -void mspace_free(mspace msp, void* mem) { - if (mem != 0) { - mchunkptr p = mem2chunk(mem); -#if FOOTERS - mstate fm = get_mstate_for(p); -#else /* FOOTERS */ - mstate fm = (mstate)msp; -#endif /* FOOTERS */ - if (!ok_magic(fm)) { - USAGE_ERROR_ACTION(fm, p); - return; - } - if (!PREACTION(fm)) { - check_inuse_chunk(fm, p); - if (RTCHECK(ok_address(fm, p) && ok_cinuse(p))) { - size_t psize = chunksize(p); - mchunkptr next = chunk_plus_offset(p, psize); - if (!pinuse(p)) { - size_t prevsize = p->prev_foot; - if ((prevsize & IS_MMAPPED_BIT) != 0) { - prevsize &= ~IS_MMAPPED_BIT; - psize += prevsize + MMAP_FOOT_PAD; - if (CALL_MUNMAP((char*)p - prevsize, psize) == 0) - fm->footprint -= psize; - goto postaction; - } - else { - mchunkptr prev = chunk_minus_offset(p, prevsize); - psize += prevsize; - p = prev; - if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */ - if (p != fm->dv) { - unlink_chunk(fm, p, prevsize); - } - else if ((next->head & INUSE_BITS) == INUSE_BITS) { - fm->dvsize = psize; - set_free_with_pinuse(p, psize, next); - goto postaction; - } - } - else - goto erroraction; - } - } - - if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) { - if (!cinuse(next)) { /* consolidate forward */ - if (next == fm->top) { - size_t tsize = fm->topsize += psize; - fm->top = p; - p->head = tsize | PINUSE_BIT; - if (p == fm->dv) { - fm->dv = 0; - fm->dvsize = 0; - } - if (should_trim(fm, tsize)) - sys_trim(fm, 0); - goto postaction; - } - else if (next == fm->dv) { - size_t dsize = fm->dvsize += psize; - fm->dv = p; - set_size_and_pinuse_of_free_chunk(p, dsize); - goto postaction; - } - else { - size_t nsize = chunksize(next); - psize += nsize; - unlink_chunk(fm, next, nsize); - set_size_and_pinuse_of_free_chunk(p, psize); - if (p == fm->dv) { - fm->dvsize = psize; - goto postaction; - } - } - } - else - set_free_with_pinuse(p, psize, next); - insert_chunk(fm, p, psize); - check_free_chunk(fm, p); - goto postaction; - } - } - erroraction: - USAGE_ERROR_ACTION(fm, p); - postaction: - POSTACTION(fm); - } - } -} - -void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size) { - void* mem; - size_t req = 0; - mstate ms = (mstate)msp; - if (!ok_magic(ms)) { - USAGE_ERROR_ACTION(ms,ms); - return 0; - } - if (n_elements != 0) { - req = n_elements * elem_size; - if (((n_elements | elem_size) & ~(size_t)0xffff) && - (req / n_elements != elem_size)) - req = MAX_SIZE_T; /* force downstream failure on overflow */ - } - mem = internal_malloc(ms, req); - if (mem != 0 && calloc_must_clear(mem2chunk(mem))) - memset(mem, 0, req); - return mem; -} - -void* mspace_realloc(mspace msp, void* oldmem, size_t bytes) { - if (oldmem == 0) - return mspace_malloc(msp, bytes); -#ifdef REALLOC_ZERO_BYTES_FREES - if (bytes == 0) { - mspace_free(msp, oldmem); - return 0; - } -#endif /* REALLOC_ZERO_BYTES_FREES */ - else { -#if FOOTERS - mchunkptr p = mem2chunk(oldmem); - mstate ms = get_mstate_for(p); -#else /* FOOTERS */ - mstate ms = (mstate)msp; -#endif /* FOOTERS */ - if (!ok_magic(ms)) { - USAGE_ERROR_ACTION(ms,ms); - return 0; - } - return internal_realloc(ms, oldmem, bytes); - } -} - -void* mspace_memalign(mspace msp, size_t alignment, size_t bytes) { - mstate ms = (mstate)msp; - if (!ok_magic(ms)) { - USAGE_ERROR_ACTION(ms,ms); - return 0; - } - return internal_memalign(ms, alignment, bytes); -} - -void** mspace_independent_calloc(mspace msp, size_t n_elements, - size_t elem_size, void* chunks[]) { - size_t sz = elem_size; /* serves as 1-element array */ - mstate ms = (mstate)msp; - if (!ok_magic(ms)) { - USAGE_ERROR_ACTION(ms,ms); - return 0; - } - return ialloc(ms, n_elements, &sz, 3, chunks); -} - -void** mspace_independent_comalloc(mspace msp, size_t n_elements, - size_t sizes[], void* chunks[]) { - mstate ms = (mstate)msp; - if (!ok_magic(ms)) { - USAGE_ERROR_ACTION(ms,ms); - return 0; - } - return ialloc(ms, n_elements, sizes, 0, chunks); -} - -int mspace_trim(mspace msp, size_t pad) { - int result = 0; - mstate ms = (mstate)msp; - if (ok_magic(ms)) { - if (!PREACTION(ms)) { - result = sys_trim(ms, pad); - POSTACTION(ms); - } - } - else { - USAGE_ERROR_ACTION(ms,ms); - } - return result; -} - -void mspace_malloc_stats(mspace msp) { - mstate ms = (mstate)msp; - if (ok_magic(ms)) { - internal_malloc_stats(ms); - } - else { - USAGE_ERROR_ACTION(ms,ms); - } -} - -size_t mspace_footprint(mspace msp) { - size_t result; - mstate ms = (mstate)msp; - if (ok_magic(ms)) { - result = ms->footprint; - } - USAGE_ERROR_ACTION(ms,ms); - return result; -} - - -size_t mspace_max_footprint(mspace msp) { - size_t result; - mstate ms = (mstate)msp; - if (ok_magic(ms)) { - result = ms->max_footprint; - } - USAGE_ERROR_ACTION(ms,ms); - return result; -} - - -#if !NO_MALLINFO -struct mallinfo mspace_mallinfo(mspace msp) { - mstate ms = (mstate)msp; - if (!ok_magic(ms)) { - USAGE_ERROR_ACTION(ms,ms); - } - return internal_mallinfo(ms); -} -#endif /* NO_MALLINFO */ - -int mspace_mallopt(int param_number, int value) { - return change_mparam(param_number, value); -} - -#endif /* MSPACES */ - -/* -------------------- Alternative MORECORE functions ------------------- */ - -/* - Guidelines for creating a custom version of MORECORE: - - * For best performance, MORECORE should allocate in multiples of pagesize. - * MORECORE may allocate more memory than requested. (Or even less, - but this will usually result in a malloc failure.) - * MORECORE must not allocate memory when given argument zero, but - instead return one past the end address of memory from previous - nonzero call. - * For best performance, consecutive calls to MORECORE with positive - arguments should return increasing addresses, indicating that - space has been contiguously extended. - * Even though consecutive calls to MORECORE need not return contiguous - addresses, it must be OK for malloc'ed chunks to span multiple - regions in those cases where they do happen to be contiguous. - * MORECORE need not handle negative arguments -- it may instead - just return MFAIL when given negative arguments. - Negative arguments are always multiples of pagesize. MORECORE - must not misinterpret negative args as large positive unsigned - args. You can suppress all such calls from even occurring by defining - MORECORE_CANNOT_TRIM, - - As an example alternative MORECORE, here is a custom allocator - kindly contributed for pre-OSX macOS. It uses virtually but not - necessarily physically contiguous non-paged memory (locked in, - present and won't get swapped out). You can use it by uncommenting - this section, adding some #includes, and setting up the appropriate - defines above: - - #define MORECORE osMoreCore - - There is also a shutdown routine that should somehow be called for - cleanup upon program exit. - - #define MAX_POOL_ENTRIES 100 - #define MINIMUM_MORECORE_SIZE (64 * 1024U) - static int next_os_pool; - void *our_os_pools[MAX_POOL_ENTRIES]; - - void *osMoreCore(int size) - { - void *ptr = 0; - static void *sbrk_top = 0; - - if (size > 0) - { - if (size < MINIMUM_MORECORE_SIZE) - size = MINIMUM_MORECORE_SIZE; - if (CurrentExecutionLevel() == kTaskLevel) - ptr = PoolAllocateResident(size + RM_PAGE_SIZE, 0); - if (ptr == 0) - { - return (void *) MFAIL; - } - // save ptrs so they can be freed during cleanup - our_os_pools[next_os_pool] = ptr; - next_os_pool++; - ptr = (void *) ((((size_t) ptr) + RM_PAGE_MASK) & ~RM_PAGE_MASK); - sbrk_top = (char *) ptr + size; - return ptr; - } - else if (size < 0) - { - // we don't currently support shrink behavior - return (void *) MFAIL; - } - else - { - return sbrk_top; - } - } - - // cleanup any allocated memory pools - // called as last thing before shutting down driver - - void osCleanupMem(void) - { - void **ptr; - - for (ptr = our_os_pools; ptr < &our_os_pools[MAX_POOL_ENTRIES]; ptr++) - if (*ptr) - { - PoolDeallocate(*ptr); - *ptr = 0; - } - } - -*/ - - -/* ----------------------------------------------------------------------- -History: - V2.8.3 Thu Sep 22 11:16:32 2005 Doug Lea (dl at gee) - * Add max_footprint functions - * Ensure all appropriate literals are size_t - * Fix conditional compilation problem for some #define settings - * Avoid concatenating segments with the one provided - in create_mspace_with_base - * Rename some variables to avoid compiler shadowing warnings - * Use explicit lock initialization. - * Better handling of sbrk interference. - * Simplify and fix segment insertion, trimming and mspace_destroy - * Reinstate REALLOC_ZERO_BYTES_FREES option from 2.7.x - * Thanks especially to Dennis Flanagan for help on these. - - V2.8.2 Sun Jun 12 16:01:10 2005 Doug Lea (dl at gee) - * Fix memalign brace error. - - V2.8.1 Wed Jun 8 16:11:46 2005 Doug Lea (dl at gee) - * Fix improper #endif nesting in C++ - * Add explicit casts needed for C++ - - V2.8.0 Mon May 30 14:09:02 2005 Doug Lea (dl at gee) - * Use trees for large bins - * Support mspaces - * Use segments to unify sbrk-based and mmap-based system allocation, - removing need for emulation on most platforms without sbrk. - * Default safety checks - * Optional footer checks. Thanks to William Robertson for the idea. - * Internal code refactoring - * Incorporate suggestions and platform-specific changes. - Thanks to Dennis Flanagan, Colin Plumb, Niall Douglas, - Aaron Bachmann, Emery Berger, and others. - * Speed up non-fastbin processing enough to remove fastbins. - * Remove useless cfree() to avoid conflicts with other apps. - * Remove internal memcpy, memset. Compilers handle builtins better. - * Remove some options that no one ever used and rename others. - - V2.7.2 Sat Aug 17 09:07:30 2002 Doug Lea (dl at gee) - * Fix malloc_state bitmap array misdeclaration - - V2.7.1 Thu Jul 25 10:58:03 2002 Doug Lea (dl at gee) - * Allow tuning of FIRST_SORTED_BIN_SIZE - * Use PTR_UINT as type for all ptr->int casts. Thanks to John Belmonte. - * Better detection and support for non-contiguousness of MORECORE. - Thanks to Andreas Mueller, Conal Walsh, and Wolfram Gloger - * Bypass most of malloc if no frees. Thanks To Emery Berger. - * Fix freeing of old top non-contiguous chunk im sysmalloc. - * Raised default trim and map thresholds to 256K. - * Fix mmap-related #defines. Thanks to Lubos Lunak. - * Fix copy macros; added LACKS_FCNTL_H. Thanks to Neal Walfield. - * Branch-free bin calculation - * Default trim and mmap thresholds now 256K. - - V2.7.0 Sun Mar 11 14:14:06 2001 Doug Lea (dl at gee) - * Introduce independent_comalloc and independent_calloc. - Thanks to Michael Pachos for motivation and help. - * Make optional .h file available - * Allow > 2GB requests on 32bit systems. - * new WIN32 sbrk, mmap, munmap, lock code from . - Thanks also to Andreas Mueller , - and Anonymous. - * Allow override of MALLOC_ALIGNMENT (Thanks to Ruud Waij for - helping test this.) - * memalign: check alignment arg - * realloc: don't try to shift chunks backwards, since this - leads to more fragmentation in some programs and doesn't - seem to help in any others. - * Collect all cases in malloc requiring system memory into sysmalloc - * Use mmap as backup to sbrk - * Place all internal state in malloc_state - * Introduce fastbins (although similar to 2.5.1) - * Many minor tunings and cosmetic improvements - * Introduce USE_PUBLIC_MALLOC_WRAPPERS, USE_MALLOC_LOCK - * Introduce MALLOC_FAILURE_ACTION, MORECORE_CONTIGUOUS - Thanks to Tony E. Bennett and others. - * Include errno.h to support default failure action. - - V2.6.6 Sun Dec 5 07:42:19 1999 Doug Lea (dl at gee) - * return null for negative arguments - * Added Several WIN32 cleanups from Martin C. Fong - * Add 'LACKS_SYS_PARAM_H' for those systems without 'sys/param.h' - (e.g. WIN32 platforms) - * Cleanup header file inclusion for WIN32 platforms - * Cleanup code to avoid Microsoft Visual C++ compiler complaints - * Add 'USE_DL_PREFIX' to quickly allow co-existence with existing - memory allocation routines - * Set 'malloc_getpagesize' for WIN32 platforms (needs more work) - * Use 'assert' rather than 'ASSERT' in WIN32 code to conform to - usage of 'assert' in non-WIN32 code - * Improve WIN32 'sbrk()' emulation's 'findRegion()' routine to - avoid infinite loop - * Always call 'fREe()' rather than 'free()' - - V2.6.5 Wed Jun 17 15:57:31 1998 Doug Lea (dl at gee) - * Fixed ordering problem with boundary-stamping - - V2.6.3 Sun May 19 08:17:58 1996 Doug Lea (dl at gee) - * Added pvalloc, as recommended by H.J. Liu - * Added 64bit pointer support mainly from Wolfram Gloger - * Added anonymously donated WIN32 sbrk emulation - * Malloc, calloc, getpagesize: add optimizations from Raymond Nijssen - * malloc_extend_top: fix mask error that caused wastage after - foreign sbrks - * Add linux mremap support code from HJ Liu - - V2.6.2 Tue Dec 5 06:52:55 1995 Doug Lea (dl at gee) - * Integrated most documentation with the code. - * Add support for mmap, with help from - Wolfram Gloger (Gloger@lrz.uni-muenchen.de). - * Use last_remainder in more cases. - * Pack bins using idea from colin@nyx10.cs.du.edu - * Use ordered bins instead of best-fit threshhold - * Eliminate block-local decls to simplify tracing and debugging. - * Support another case of realloc via move into top - * Fix error occuring when initial sbrk_base not word-aligned. - * Rely on page size for units instead of SBRK_UNIT to - avoid surprises about sbrk alignment conventions. - * Add mallinfo, mallopt. Thanks to Raymond Nijssen - (raymond@es.ele.tue.nl) for the suggestion. - * Add `pad' argument to malloc_trim and top_pad mallopt parameter. - * More precautions for cases where other routines call sbrk, - courtesy of Wolfram Gloger (Gloger@lrz.uni-muenchen.de). - * Added macros etc., allowing use in linux libc from - H.J. Lu (hjl@gnu.ai.mit.edu) - * Inverted this history list - - V2.6.1 Sat Dec 2 14:10:57 1995 Doug Lea (dl at gee) - * Re-tuned and fixed to behave more nicely with V2.6.0 changes. - * Removed all preallocation code since under current scheme - the work required to undo bad preallocations exceeds - the work saved in good cases for most test programs. - * No longer use return list or unconsolidated bins since - no scheme using them consistently outperforms those that don't - given above changes. - * Use best fit for very large chunks to prevent some worst-cases. - * Added some support for debugging - - V2.6.0 Sat Nov 4 07:05:23 1995 Doug Lea (dl at gee) - * Removed footers when chunks are in use. Thanks to - Paul Wilson (wilson@cs.texas.edu) for the suggestion. - - V2.5.4 Wed Nov 1 07:54:51 1995 Doug Lea (dl at gee) - * Added malloc_trim, with help from Wolfram Gloger - (wmglo@Dent.MED.Uni-Muenchen.DE). - - V2.5.3 Tue Apr 26 10:16:01 1994 Doug Lea (dl at g) - - V2.5.2 Tue Apr 5 16:20:40 1994 Doug Lea (dl at g) - * realloc: try to expand in both directions - * malloc: swap order of clean-bin strategy; - * realloc: only conditionally expand backwards - * Try not to scavenge used bins - * Use bin counts as a guide to preallocation - * Occasionally bin return list chunks in first scan - * Add a few optimizations from colin@nyx10.cs.du.edu - - V2.5.1 Sat Aug 14 15:40:43 1993 Doug Lea (dl at g) - * faster bin computation & slightly different binning - * merged all consolidations to one part of malloc proper - (eliminating old malloc_find_space & malloc_clean_bin) - * Scan 2 returns chunks (not just 1) - * Propagate failure in realloc if malloc returns 0 - * Add stuff to allow compilation on non-ANSI compilers - from kpv@research.att.com - - V2.5 Sat Aug 7 07:41:59 1993 Doug Lea (dl at g.oswego.edu) - * removed potential for odd address access in prev_chunk - * removed dependency on getpagesize.h - * misc cosmetics and a bit more internal documentation - * anticosmetics: mangled names in macros to evade debugger strangeness - * tested on sparc, hp-700, dec-mips, rs6000 - with gcc & native cc (hp, dec only) allowing - Detlefs & Zorn comparison study (in SIGPLAN Notices.) - - Trial version Fri Aug 28 13:14:29 1992 Doug Lea (dl at g.oswego.edu) - * Based loosely on libg++-1.2X malloc. (It retains some of the overall - structure of old version, but most details differ.) - -*/ diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/frv/eabi.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/frv/eabi.S deleted file mode 100644 index 379ea4b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/frv/eabi.S +++ /dev/null @@ -1,128 +0,0 @@ -/* ----------------------------------------------------------------------- - eabi.S - Copyright (c) 2004 Anthony Green - - FR-V Assembly glue. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR - OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - - .globl ffi_prep_args_EABI - - .text - .p2align 4 - .globl ffi_call_EABI - .type ffi_call_EABI, @function - - # gr8 : ffi_prep_args - # gr9 : &ecif - # gr10: cif->bytes - # gr11: fig->flags - # gr12: ecif.rvalue - # gr13: fn - -ffi_call_EABI: - addi sp, #-80, sp - sti fp, @(sp, #24) - addi sp, #24, fp - movsg lr, gr5 - - /* Make room for the new arguments. */ - /* subi sp, fp, gr10 */ - - /* Store return address and incoming args on stack. */ - sti gr5, @(fp, #8) - sti gr8, @(fp, #-4) - sti gr9, @(fp, #-8) - sti gr10, @(fp, #-12) - sti gr11, @(fp, #-16) - sti gr12, @(fp, #-20) - sti gr13, @(fp, #-24) - - sub sp, gr10, sp - - /* Call ffi_prep_args. */ - ldi @(fp, #-4), gr4 - addi sp, #0, gr8 - ldi @(fp, #-8), gr9 -#ifdef __FRV_FDPIC__ - ldd @(gr4, gr0), gr14 - calll @(gr14, gr0) -#else - calll @(gr4, gr0) -#endif - - /* ffi_prep_args returns the new stack pointer. */ - mov gr8, gr4 - - ldi @(sp, #0), gr8 - ldi @(sp, #4), gr9 - ldi @(sp, #8), gr10 - ldi @(sp, #12), gr11 - ldi @(sp, #16), gr12 - ldi @(sp, #20), gr13 - - /* Always copy the return value pointer into the hidden - parameter register. This is only strictly necessary - when we're returning an aggregate type, but it doesn't - hurt to do this all the time, and it saves a branch. */ - ldi @(fp, #-20), gr3 - - /* Use the ffi_prep_args return value for the new sp. */ - mov gr4, sp - - /* Call the target function. */ - ldi @(fp, -24), gr4 -#ifdef __FRV_FDPIC__ - ldd @(gr4, gr0), gr14 - calll @(gr14, gr0) -#else - calll @(gr4, gr0) -#endif - - /* Store the result. */ - ldi @(fp, #-16), gr10 /* fig->flags */ - ldi @(fp, #-20), gr4 /* ecif.rvalue */ - - /* Is the return value stored in two registers? */ - cmpi gr10, #8, icc0 - bne icc0, 0, .L2 - /* Yes, save them. */ - sti gr8, @(gr4, #0) - sti gr9, @(gr4, #4) - bra .L3 -.L2: - /* Is the return value a structure? */ - cmpi gr10, #-1, icc0 - beq icc0, 0, .L3 - /* No, save a 4 byte return value. */ - sti gr8, @(gr4, #0) -.L3: - - /* Restore the stack, and return. */ - ldi @(fp, 8), gr5 - ld @(fp, gr0), fp - addi sp,#80,sp - jmpl @(gr5,gr0) - .size ffi_call_EABI, .-ffi_call_EABI - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/frv/ffi.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/frv/ffi.c deleted file mode 100644 index 5698c89..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/frv/ffi.c +++ /dev/null @@ -1,292 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (C) 2004 Anthony Green - Copyright (C) 2007 Free Software Foundation, Inc. - Copyright (C) 2008 Red Hat, Inc. - - FR-V Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#include -#include - -#include - -/* ffi_prep_args is called by the assembly routine once stack space - has been allocated for the function's arguments */ - -void *ffi_prep_args(char *stack, extended_cif *ecif) -{ - register unsigned int i; - register void **p_argv; - register char *argp; - register ffi_type **p_arg; - register int count = 0; - - p_argv = ecif->avalue; - argp = stack; - - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; - (i != 0); - i--, p_arg++) - { - size_t z; - - z = (*p_arg)->size; - - if ((*p_arg)->type == FFI_TYPE_STRUCT) - { - z = sizeof(void*); - *(void **) argp = *p_argv; - } - /* if ((*p_arg)->type == FFI_TYPE_FLOAT) - { - if (count > 24) - { - // This is going on the stack. Turn it into a double. - *(double *) argp = (double) *(float*)(* p_argv); - z = sizeof(double); - } - else - *(void **) argp = *(void **)(* p_argv); - } */ - else if (z < sizeof(int)) - { - z = sizeof(int); - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv); - break; - - case FFI_TYPE_UINT8: - *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv); - break; - - case FFI_TYPE_SINT16: - *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv); - break; - - case FFI_TYPE_UINT16: - *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv); - break; - - default: - FFI_ASSERT(0); - } - } - else if (z == sizeof(int)) - { - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - } - else - { - memcpy(argp, *p_argv, z); - } - p_argv++; - argp += z; - count += z; - } - - return (stack + ((count > 24) ? 24 : ALIGN_DOWN(count, 8))); -} - -/* Perform machine dependent cif processing */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) -{ - if (cif->rtype->type == FFI_TYPE_STRUCT) - cif->flags = -1; - else - cif->flags = cif->rtype->size; - - cif->bytes = ALIGN (cif->bytes, 8); - - return FFI_OK; -} - -extern void ffi_call_EABI(void *(*)(char *, extended_cif *), - extended_cif *, - unsigned, unsigned, - unsigned *, - void (*fn)(void)); - -void ffi_call(ffi_cif *cif, - void (*fn)(void), - void *rvalue, - void **avalue) -{ - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return */ - /* value address then we need to make one */ - - if ((rvalue == NULL) && - (cif->rtype->type == FFI_TYPE_STRUCT)) - { - ecif.rvalue = alloca(cif->rtype->size); - } - else - ecif.rvalue = rvalue; - - - switch (cif->abi) - { - case FFI_EABI: - ffi_call_EABI(ffi_prep_args, &ecif, cif->bytes, - cif->flags, ecif.rvalue, fn); - break; - default: - FFI_ASSERT(0); - break; - } -} - -void ffi_closure_eabi (unsigned arg1, unsigned arg2, unsigned arg3, - unsigned arg4, unsigned arg5, unsigned arg6) -{ - /* This function is called by a trampoline. The trampoline stows a - pointer to the ffi_closure object in gr7. We must save this - pointer in a place that will persist while we do our work. */ - register ffi_closure *creg __asm__ ("gr7"); - ffi_closure *closure = creg; - - /* Arguments that don't fit in registers are found on the stack - at a fixed offset above the current frame pointer. */ - register char *frame_pointer __asm__ ("fp"); - char *stack_args = frame_pointer + 16; - - /* Lay the register arguments down in a continuous chunk of memory. */ - unsigned register_args[6] = - { arg1, arg2, arg3, arg4, arg5, arg6 }; - - ffi_cif *cif = closure->cif; - ffi_type **arg_types = cif->arg_types; - void **avalue = alloca (cif->nargs * sizeof(void *)); - char *ptr = (char *) register_args; - int i; - - /* Find the address of each argument. */ - for (i = 0; i < cif->nargs; i++) - { - switch (arg_types[i]->type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - avalue[i] = ptr + 3; - break; - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - avalue[i] = ptr + 2; - break; - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - case FFI_TYPE_FLOAT: - avalue[i] = ptr; - break; - case FFI_TYPE_STRUCT: - avalue[i] = *(void**)ptr; - break; - default: - /* This is an 8-byte value. */ - avalue[i] = ptr; - ptr += 4; - break; - } - ptr += 4; - - /* If we've handled more arguments than fit in registers, - start looking at the those passed on the stack. */ - if (ptr == ((char *)register_args + (6*4))) - ptr = stack_args; - } - - /* Invoke the closure. */ - if (cif->rtype->type == FFI_TYPE_STRUCT) - { - /* The caller allocates space for the return structure, and - passes a pointer to this space in gr3. Use this value directly - as the return value. */ - register void *return_struct_ptr __asm__("gr3"); - (closure->fun) (cif, return_struct_ptr, avalue, closure->user_data); - } - else - { - /* Allocate space for the return value and call the function. */ - long long rvalue; - (closure->fun) (cif, &rvalue, avalue, closure->user_data); - - /* Functions return 4-byte or smaller results in gr8. 8-byte - values also use gr9. We fill the both, even for small return - values, just to avoid a branch. */ - asm ("ldi @(%0, #0), gr8" : : "r" (&rvalue)); - asm ("ldi @(%0, #0), gr9" : : "r" (&((int *) &rvalue)[1])); - } -} - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*, void*, void**, void*), - void *user_data, - void *codeloc) -{ - unsigned int *tramp = (unsigned int *) &closure->tramp[0]; - unsigned long fn = (long) ffi_closure_eabi; - unsigned long cls = (long) codeloc; -#ifdef __FRV_FDPIC__ - register void *got __asm__("gr15"); -#endif - int i; - - fn = (unsigned long) ffi_closure_eabi; - -#ifdef __FRV_FDPIC__ - tramp[0] = &((unsigned int *)codeloc)[2]; - tramp[1] = got; - tramp[2] = 0x8cfc0000 + (fn & 0xffff); /* setlos lo(fn), gr6 */ - tramp[3] = 0x8efc0000 + (cls & 0xffff); /* setlos lo(cls), gr7 */ - tramp[4] = 0x8cf80000 + (fn >> 16); /* sethi hi(fn), gr6 */ - tramp[5] = 0x8ef80000 + (cls >> 16); /* sethi hi(cls), gr7 */ - tramp[6] = 0x9cc86000; /* ldi @(gr6, #0), gr14 */ - tramp[7] = 0x8030e000; /* jmpl @(gr14, gr0) */ -#else - tramp[0] = 0x8cfc0000 + (fn & 0xffff); /* setlos lo(fn), gr6 */ - tramp[1] = 0x8efc0000 + (cls & 0xffff); /* setlos lo(cls), gr7 */ - tramp[2] = 0x8cf80000 + (fn >> 16); /* sethi hi(fn), gr6 */ - tramp[3] = 0x8ef80000 + (cls >> 16); /* sethi hi(cls), gr7 */ - tramp[4] = 0x80300006; /* jmpl @(gr0, gr6) */ -#endif - - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - - /* Cache flushing. */ - for (i = 0; i < FFI_TRAMPOLINE_SIZE; i++) - __asm__ volatile ("dcf @(%0,%1)\n\tici @(%2,%1)" :: "r" (tramp), "r" (i), - "r" (codeloc)); - - return FFI_OK; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/frv/ffitarget.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/frv/ffitarget.h deleted file mode 100644 index 4839069..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/frv/ffitarget.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2004 Red Hat, Inc. - Target configuration macros for FR-V - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -/* ---- System specific configurations ----------------------------------- */ - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_EABI, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_EABI -} ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_NATIVE_RAW_API 0 - -#ifdef __FRV_FDPIC__ -/* Trampolines are 8 4-byte instructions long. */ -#define FFI_TRAMPOLINE_SIZE (8*4) -#else -/* Trampolines are 5 4-byte instructions long. */ -#define FFI_TRAMPOLINE_SIZE (5*4) -#endif - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/ia64/ffi.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/ia64/ffi.c deleted file mode 100644 index 60120ed..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/ia64/ffi.c +++ /dev/null @@ -1,582 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2011 Anthony Green - Copyright (c) 2000 Hewlett Packard Company - Copyright (c) 1998, 2007, 2008 Red Hat, Inc. - - IA64 Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#include -#include - -#include -#include -#include - -#include "ia64_flags.h" - -/* A 64-bit pointer value. In LP64 mode, this is effectively a plain - pointer. In ILP32 mode, it's a pointer that's been extended to - 64 bits by "addp4". */ -typedef void *PTR64 __attribute__((mode(DI))); - -/* Memory image of fp register contents. This is the implementation - specific format used by ldf.fill/stf.spill. All we care about is - that it wants a 16 byte aligned slot. */ -typedef struct -{ - UINT64 x[2] __attribute__((aligned(16))); -} fpreg; - - -/* The stack layout given to ffi_call_unix and ffi_closure_unix_inner. */ - -struct ia64_args -{ - fpreg fp_regs[8]; /* Contents of 8 fp arg registers. */ - UINT64 gp_regs[8]; /* Contents of 8 gp arg registers. */ - UINT64 other_args[]; /* Arguments passed on stack, variable size. */ -}; - - -/* Adjust ADDR, a pointer to an 8 byte slot, to point to the low LEN bytes. */ - -static inline void * -endian_adjust (void *addr, size_t len) -{ -#ifdef __BIG_ENDIAN__ - return addr + (8 - len); -#else - return addr; -#endif -} - -/* Store VALUE to ADDR in the current cpu implementation's fp spill format. - This is a macro instead of a function, so that it works for all 3 floating - point types without type conversions. Type conversion to long double breaks - the denorm support. */ - -#define stf_spill(addr, value) \ - asm ("stf.spill %0 = %1%P0" : "=m" (*addr) : "f"(value)); - -/* Load a value from ADDR, which is in the current cpu implementation's - fp spill format. As above, this must also be a macro. */ - -#define ldf_fill(result, addr) \ - asm ("ldf.fill %0 = %1%P1" : "=f"(result) : "m"(*addr)); - -/* Return the size of the C type associated with with TYPE. Which will - be one of the FFI_IA64_TYPE_HFA_* values. */ - -static size_t -hfa_type_size (int type) -{ - switch (type) - { - case FFI_IA64_TYPE_HFA_FLOAT: - return sizeof(float); - case FFI_IA64_TYPE_HFA_DOUBLE: - return sizeof(double); - case FFI_IA64_TYPE_HFA_LDOUBLE: - return sizeof(__float80); - default: - abort (); - } -} - -/* Load from ADDR a value indicated by TYPE. Which will be one of - the FFI_IA64_TYPE_HFA_* values. */ - -static void -hfa_type_load (fpreg *fpaddr, int type, void *addr) -{ - switch (type) - { - case FFI_IA64_TYPE_HFA_FLOAT: - stf_spill (fpaddr, *(float *) addr); - return; - case FFI_IA64_TYPE_HFA_DOUBLE: - stf_spill (fpaddr, *(double *) addr); - return; - case FFI_IA64_TYPE_HFA_LDOUBLE: - stf_spill (fpaddr, *(__float80 *) addr); - return; - default: - abort (); - } -} - -/* Load VALUE into ADDR as indicated by TYPE. Which will be one of - the FFI_IA64_TYPE_HFA_* values. */ - -static void -hfa_type_store (int type, void *addr, fpreg *fpaddr) -{ - switch (type) - { - case FFI_IA64_TYPE_HFA_FLOAT: - { - float result; - ldf_fill (result, fpaddr); - *(float *) addr = result; - break; - } - case FFI_IA64_TYPE_HFA_DOUBLE: - { - double result; - ldf_fill (result, fpaddr); - *(double *) addr = result; - break; - } - case FFI_IA64_TYPE_HFA_LDOUBLE: - { - __float80 result; - ldf_fill (result, fpaddr); - *(__float80 *) addr = result; - break; - } - default: - abort (); - } -} - -/* Is TYPE a struct containing floats, doubles, or extended doubles, - all of the same fp type? If so, return the element type. Return - FFI_TYPE_VOID if not. */ - -static int -hfa_element_type (ffi_type *type, int nested) -{ - int element = FFI_TYPE_VOID; - - switch (type->type) - { - case FFI_TYPE_FLOAT: - /* We want to return VOID for raw floating-point types, but the - synthetic HFA type if we're nested within an aggregate. */ - if (nested) - element = FFI_IA64_TYPE_HFA_FLOAT; - break; - - case FFI_TYPE_DOUBLE: - /* Similarly. */ - if (nested) - element = FFI_IA64_TYPE_HFA_DOUBLE; - break; - - case FFI_TYPE_LONGDOUBLE: - /* Similarly, except that that HFA is true for double extended, - but not quad precision. Both have sizeof == 16, so tell the - difference based on the precision. */ - if (LDBL_MANT_DIG == 64 && nested) - element = FFI_IA64_TYPE_HFA_LDOUBLE; - break; - - case FFI_TYPE_STRUCT: - { - ffi_type **ptr = &type->elements[0]; - - for (ptr = &type->elements[0]; *ptr ; ptr++) - { - int sub_element = hfa_element_type (*ptr, 1); - if (sub_element == FFI_TYPE_VOID) - return FFI_TYPE_VOID; - - if (element == FFI_TYPE_VOID) - element = sub_element; - else if (element != sub_element) - return FFI_TYPE_VOID; - } - } - break; - - default: - return FFI_TYPE_VOID; - } - - return element; -} - - -/* Perform machine dependent cif processing. */ - -ffi_status -ffi_prep_cif_machdep(ffi_cif *cif) -{ - int flags; - - /* Adjust cif->bytes to include space for the bits of the ia64_args frame - that precedes the integer register portion. The estimate that the - generic bits did for the argument space required is good enough for the - integer component. */ - cif->bytes += offsetof(struct ia64_args, gp_regs[0]); - if (cif->bytes < sizeof(struct ia64_args)) - cif->bytes = sizeof(struct ia64_args); - - /* Set the return type flag. */ - flags = cif->rtype->type; - switch (cif->rtype->type) - { - case FFI_TYPE_LONGDOUBLE: - /* Leave FFI_TYPE_LONGDOUBLE as meaning double extended precision, - and encode quad precision as a two-word integer structure. */ - if (LDBL_MANT_DIG != 64) - flags = FFI_IA64_TYPE_SMALL_STRUCT | (16 << 8); - break; - - case FFI_TYPE_STRUCT: - { - size_t size = cif->rtype->size; - int hfa_type = hfa_element_type (cif->rtype, 0); - - if (hfa_type != FFI_TYPE_VOID) - { - size_t nelts = size / hfa_type_size (hfa_type); - if (nelts <= 8) - flags = hfa_type | (size << 8); - } - else - { - if (size <= 32) - flags = FFI_IA64_TYPE_SMALL_STRUCT | (size << 8); - } - } - break; - - default: - break; - } - cif->flags = flags; - - return FFI_OK; -} - -extern int ffi_call_unix (struct ia64_args *, PTR64, void (*)(void), UINT64); - -void -ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - struct ia64_args *stack; - long i, avn, gpcount, fpcount; - ffi_type **p_arg; - - FFI_ASSERT (cif->abi == FFI_UNIX); - - /* If we have no spot for a return value, make one. */ - if (rvalue == NULL && cif->rtype->type != FFI_TYPE_VOID) - rvalue = alloca (cif->rtype->size); - - /* Allocate the stack frame. */ - stack = alloca (cif->bytes); - - gpcount = fpcount = 0; - avn = cif->nargs; - for (i = 0, p_arg = cif->arg_types; i < avn; i++, p_arg++) - { - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - stack->gp_regs[gpcount++] = *(SINT8 *)avalue[i]; - break; - case FFI_TYPE_UINT8: - stack->gp_regs[gpcount++] = *(UINT8 *)avalue[i]; - break; - case FFI_TYPE_SINT16: - stack->gp_regs[gpcount++] = *(SINT16 *)avalue[i]; - break; - case FFI_TYPE_UINT16: - stack->gp_regs[gpcount++] = *(UINT16 *)avalue[i]; - break; - case FFI_TYPE_SINT32: - stack->gp_regs[gpcount++] = *(SINT32 *)avalue[i]; - break; - case FFI_TYPE_UINT32: - stack->gp_regs[gpcount++] = *(UINT32 *)avalue[i]; - break; - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - stack->gp_regs[gpcount++] = *(UINT64 *)avalue[i]; - break; - - case FFI_TYPE_POINTER: - stack->gp_regs[gpcount++] = (UINT64)(PTR64) *(void **)avalue[i]; - break; - - case FFI_TYPE_FLOAT: - if (gpcount < 8 && fpcount < 8) - stf_spill (&stack->fp_regs[fpcount++], *(float *)avalue[i]); - stack->gp_regs[gpcount++] = *(UINT32 *)avalue[i]; - break; - - case FFI_TYPE_DOUBLE: - if (gpcount < 8 && fpcount < 8) - stf_spill (&stack->fp_regs[fpcount++], *(double *)avalue[i]); - stack->gp_regs[gpcount++] = *(UINT64 *)avalue[i]; - break; - - case FFI_TYPE_LONGDOUBLE: - if (gpcount & 1) - gpcount++; - if (LDBL_MANT_DIG == 64 && gpcount < 8 && fpcount < 8) - stf_spill (&stack->fp_regs[fpcount++], *(__float80 *)avalue[i]); - memcpy (&stack->gp_regs[gpcount], avalue[i], 16); - gpcount += 2; - break; - - case FFI_TYPE_STRUCT: - { - size_t size = (*p_arg)->size; - size_t align = (*p_arg)->alignment; - int hfa_type = hfa_element_type (*p_arg, 0); - - FFI_ASSERT (align <= 16); - if (align == 16 && (gpcount & 1)) - gpcount++; - - if (hfa_type != FFI_TYPE_VOID) - { - size_t hfa_size = hfa_type_size (hfa_type); - size_t offset = 0; - size_t gp_offset = gpcount * 8; - - while (fpcount < 8 - && offset < size - && gp_offset < 8 * 8) - { - hfa_type_load (&stack->fp_regs[fpcount], hfa_type, - avalue[i] + offset); - offset += hfa_size; - gp_offset += hfa_size; - fpcount += 1; - } - } - - memcpy (&stack->gp_regs[gpcount], avalue[i], size); - gpcount += (size + 7) / 8; - } - break; - - default: - abort (); - } - } - - ffi_call_unix (stack, rvalue, fn, cif->flags); -} - -/* Closures represent a pair consisting of a function pointer, and - some user data. A closure is invoked by reinterpreting the closure - as a function pointer, and branching to it. Thus we can make an - interpreted function callable as a C function: We turn the - interpreter itself, together with a pointer specifying the - interpreted procedure, into a closure. - - For IA64, function pointer are already pairs consisting of a code - pointer, and a gp pointer. The latter is needed to access global - variables. Here we set up such a pair as the first two words of - the closure (in the "trampoline" area), but we replace the gp - pointer with a pointer to the closure itself. We also add the real - gp pointer to the closure. This allows the function entry code to - both retrieve the user data, and to restire the correct gp pointer. */ - -extern void ffi_closure_unix (); - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data, - void *codeloc) -{ - /* The layout of a function descriptor. A C function pointer really - points to one of these. */ - struct ia64_fd - { - UINT64 code_pointer; - UINT64 gp; - }; - - struct ffi_ia64_trampoline_struct - { - UINT64 code_pointer; /* Pointer to ffi_closure_unix. */ - UINT64 fake_gp; /* Pointer to closure, installed as gp. */ - UINT64 real_gp; /* Real gp value. */ - }; - - struct ffi_ia64_trampoline_struct *tramp; - struct ia64_fd *fd; - - if (cif->abi != FFI_UNIX) - return FFI_BAD_ABI; - - tramp = (struct ffi_ia64_trampoline_struct *)closure->tramp; - fd = (struct ia64_fd *)(void *)ffi_closure_unix; - - tramp->code_pointer = fd->code_pointer; - tramp->real_gp = fd->gp; - tramp->fake_gp = (UINT64)(PTR64)codeloc; - closure->cif = cif; - closure->user_data = user_data; - closure->fun = fun; - - return FFI_OK; -} - - -UINT64 -ffi_closure_unix_inner (ffi_closure *closure, struct ia64_args *stack, - void *rvalue, void *r8) -{ - ffi_cif *cif; - void **avalue; - ffi_type **p_arg; - long i, avn, gpcount, fpcount; - - cif = closure->cif; - avn = cif->nargs; - avalue = alloca (avn * sizeof (void *)); - - /* If the structure return value is passed in memory get that location - from r8 so as to pass the value directly back to the caller. */ - if (cif->flags == FFI_TYPE_STRUCT) - rvalue = r8; - - gpcount = fpcount = 0; - for (i = 0, p_arg = cif->arg_types; i < avn; i++, p_arg++) - { - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - avalue[i] = endian_adjust(&stack->gp_regs[gpcount++], 1); - break; - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - avalue[i] = endian_adjust(&stack->gp_regs[gpcount++], 2); - break; - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - avalue[i] = endian_adjust(&stack->gp_regs[gpcount++], 4); - break; - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - avalue[i] = &stack->gp_regs[gpcount++]; - break; - case FFI_TYPE_POINTER: - avalue[i] = endian_adjust(&stack->gp_regs[gpcount++], sizeof(void*)); - break; - - case FFI_TYPE_FLOAT: - if (gpcount < 8 && fpcount < 8) - { - fpreg *addr = &stack->fp_regs[fpcount++]; - float result; - avalue[i] = addr; - ldf_fill (result, addr); - *(float *)addr = result; - } - else - avalue[i] = endian_adjust(&stack->gp_regs[gpcount], 4); - gpcount++; - break; - - case FFI_TYPE_DOUBLE: - if (gpcount < 8 && fpcount < 8) - { - fpreg *addr = &stack->fp_regs[fpcount++]; - double result; - avalue[i] = addr; - ldf_fill (result, addr); - *(double *)addr = result; - } - else - avalue[i] = &stack->gp_regs[gpcount]; - gpcount++; - break; - - case FFI_TYPE_LONGDOUBLE: - if (gpcount & 1) - gpcount++; - if (LDBL_MANT_DIG == 64 && gpcount < 8 && fpcount < 8) - { - fpreg *addr = &stack->fp_regs[fpcount++]; - __float80 result; - avalue[i] = addr; - ldf_fill (result, addr); - *(__float80 *)addr = result; - } - else - avalue[i] = &stack->gp_regs[gpcount]; - gpcount += 2; - break; - - case FFI_TYPE_STRUCT: - { - size_t size = (*p_arg)->size; - size_t align = (*p_arg)->alignment; - int hfa_type = hfa_element_type (*p_arg, 0); - - FFI_ASSERT (align <= 16); - if (align == 16 && (gpcount & 1)) - gpcount++; - - if (hfa_type != FFI_TYPE_VOID) - { - size_t hfa_size = hfa_type_size (hfa_type); - size_t offset = 0; - size_t gp_offset = gpcount * 8; - void *addr = alloca (size); - - avalue[i] = addr; - - while (fpcount < 8 - && offset < size - && gp_offset < 8 * 8) - { - hfa_type_store (hfa_type, addr + offset, - &stack->fp_regs[fpcount]); - offset += hfa_size; - gp_offset += hfa_size; - fpcount += 1; - } - - if (offset < size) - memcpy (addr + offset, (char *)stack->gp_regs + gp_offset, - size - offset); - } - else - avalue[i] = &stack->gp_regs[gpcount]; - - gpcount += (size + 7) / 8; - } - break; - - default: - abort (); - } - } - - closure->fun (cif, rvalue, avalue, closure->user_data); - - return cif->flags; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/ia64/ffitarget.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/ia64/ffitarget.h deleted file mode 100644 index 0d2001d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/ia64/ffitarget.h +++ /dev/null @@ -1,50 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. - Target configuration macros for IA-64. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_ASM -typedef unsigned long long ffi_arg; -typedef signed long long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_UNIX, /* Linux and all Unix variants use the same conventions */ - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_UNIX -} ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_TRAMPOLINE_SIZE 24 /* Really the following struct, which */ - /* can be interpreted as a C function */ - /* descriptor: */ - -#endif - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/ia64/ia64_flags.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/ia64/ia64_flags.h deleted file mode 100644 index 9d652ce..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/ia64/ia64_flags.h +++ /dev/null @@ -1,40 +0,0 @@ -/* ----------------------------------------------------------------------- - ia64_flags.h - Copyright (c) 2000 Hewlett Packard Company - - IA64/unix Foreign Function Interface - - Original author: Hans Boehm, HP Labs - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -/* "Type" codes used between assembly and C. When used as a part of - a cfi->flags value, the low byte will be these extra type codes, - and bits 8-31 will be the actual size of the type. */ - -/* Small structures containing N words in integer registers. */ -#define FFI_IA64_TYPE_SMALL_STRUCT (FFI_TYPE_LAST + 1) - -/* Homogeneous Floating Point Aggregates (HFAs) which are returned - in FP registers. */ -#define FFI_IA64_TYPE_HFA_FLOAT (FFI_TYPE_LAST + 2) -#define FFI_IA64_TYPE_HFA_DOUBLE (FFI_TYPE_LAST + 3) -#define FFI_IA64_TYPE_HFA_LDOUBLE (FFI_TYPE_LAST + 4) diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/ia64/unix.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/ia64/unix.S deleted file mode 100644 index 4d2a86d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/ia64/unix.S +++ /dev/null @@ -1,560 +0,0 @@ -/* ----------------------------------------------------------------------- - unix.S - Copyright (c) 1998, 2008 Red Hat, Inc. - Copyright (c) 2000 Hewlett Packard Company - - IA64/unix Foreign Function Interface - - Primary author: Hans Boehm, HP Labs - - Loosely modeled on Cygnus code for other platforms. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include -#include "ia64_flags.h" - - .pred.safe_across_calls p1-p5,p16-p63 -.text - -/* int ffi_call_unix (struct ia64_args *stack, PTR64 rvalue, - void (*fn)(void), int flags); - */ - - .align 16 - .global ffi_call_unix - .proc ffi_call_unix -ffi_call_unix: - .prologue - /* Bit o trickiness. We actually share a stack frame with ffi_call. - Rely on the fact that ffi_call uses a vframe and don't bother - tracking one here at all. */ - .fframe 0 - .save ar.pfs, r36 // loc0 - alloc loc0 = ar.pfs, 4, 3, 8, 0 - .save rp, loc1 - mov loc1 = b0 - .body - add r16 = 16, in0 - mov loc2 = gp - mov r8 = in1 - ;; - - /* Load up all of the argument registers. */ - ldf.fill f8 = [in0], 32 - ldf.fill f9 = [r16], 32 - ;; - ldf.fill f10 = [in0], 32 - ldf.fill f11 = [r16], 32 - ;; - ldf.fill f12 = [in0], 32 - ldf.fill f13 = [r16], 32 - ;; - ldf.fill f14 = [in0], 32 - ldf.fill f15 = [r16], 24 - ;; - ld8 out0 = [in0], 16 - ld8 out1 = [r16], 16 - ;; - ld8 out2 = [in0], 16 - ld8 out3 = [r16], 16 - ;; - ld8 out4 = [in0], 16 - ld8 out5 = [r16], 16 - ;; - ld8 out6 = [in0] - ld8 out7 = [r16] - ;; - - /* Deallocate the register save area from the stack frame. */ - mov sp = in0 - - /* Call the target function. */ - ld8 r16 = [in2], 8 - ;; - ld8 gp = [in2] - mov b6 = r16 - br.call.sptk.many b0 = b6 - ;; - - /* Dispatch to handle return value. */ - mov gp = loc2 - zxt1 r16 = in3 - ;; - mov ar.pfs = loc0 - addl r18 = @ltoffx(.Lst_table), gp - ;; - ld8.mov r18 = [r18], .Lst_table - mov b0 = loc1 - ;; - shladd r18 = r16, 3, r18 - ;; - ld8 r17 = [r18] - shr in3 = in3, 8 - ;; - add r17 = r17, r18 - ;; - mov b6 = r17 - br b6 - ;; - -.Lst_void: - br.ret.sptk.many b0 - ;; -.Lst_uint8: - zxt1 r8 = r8 - ;; - st8 [in1] = r8 - br.ret.sptk.many b0 - ;; -.Lst_sint8: - sxt1 r8 = r8 - ;; - st8 [in1] = r8 - br.ret.sptk.many b0 - ;; -.Lst_uint16: - zxt2 r8 = r8 - ;; - st8 [in1] = r8 - br.ret.sptk.many b0 - ;; -.Lst_sint16: - sxt2 r8 = r8 - ;; - st8 [in1] = r8 - br.ret.sptk.many b0 - ;; -.Lst_uint32: - zxt4 r8 = r8 - ;; - st8 [in1] = r8 - br.ret.sptk.many b0 - ;; -.Lst_sint32: - sxt4 r8 = r8 - ;; - st8 [in1] = r8 - br.ret.sptk.many b0 - ;; -.Lst_int64: - st8 [in1] = r8 - br.ret.sptk.many b0 - ;; -.Lst_float: - stfs [in1] = f8 - br.ret.sptk.many b0 - ;; -.Lst_double: - stfd [in1] = f8 - br.ret.sptk.many b0 - ;; -.Lst_ldouble: - stfe [in1] = f8 - br.ret.sptk.many b0 - ;; - -.Lst_small_struct: - add sp = -16, sp - cmp.lt p6, p0 = 8, in3 - cmp.lt p7, p0 = 16, in3 - cmp.lt p8, p0 = 24, in3 - ;; - add r16 = 8, sp - add r17 = 16, sp - add r18 = 24, sp - ;; - st8 [sp] = r8 -(p6) st8 [r16] = r9 - mov out0 = in1 -(p7) st8 [r17] = r10 -(p8) st8 [r18] = r11 - mov out1 = sp - mov out2 = in3 - br.call.sptk.many b0 = memcpy# - ;; - mov ar.pfs = loc0 - mov b0 = loc1 - mov gp = loc2 - br.ret.sptk.many b0 - -.Lst_hfa_float: - add r16 = 4, in1 - cmp.lt p6, p0 = 4, in3 - ;; - stfs [in1] = f8, 8 -(p6) stfs [r16] = f9, 8 - cmp.lt p7, p0 = 8, in3 - cmp.lt p8, p0 = 12, in3 - ;; -(p7) stfs [in1] = f10, 8 -(p8) stfs [r16] = f11, 8 - cmp.lt p9, p0 = 16, in3 - cmp.lt p10, p0 = 20, in3 - ;; -(p9) stfs [in1] = f12, 8 -(p10) stfs [r16] = f13, 8 - cmp.lt p6, p0 = 24, in3 - cmp.lt p7, p0 = 28, in3 - ;; -(p6) stfs [in1] = f14 -(p7) stfs [r16] = f15 - br.ret.sptk.many b0 - ;; - -.Lst_hfa_double: - add r16 = 8, in1 - cmp.lt p6, p0 = 8, in3 - ;; - stfd [in1] = f8, 16 -(p6) stfd [r16] = f9, 16 - cmp.lt p7, p0 = 16, in3 - cmp.lt p8, p0 = 24, in3 - ;; -(p7) stfd [in1] = f10, 16 -(p8) stfd [r16] = f11, 16 - cmp.lt p9, p0 = 32, in3 - cmp.lt p10, p0 = 40, in3 - ;; -(p9) stfd [in1] = f12, 16 -(p10) stfd [r16] = f13, 16 - cmp.lt p6, p0 = 48, in3 - cmp.lt p7, p0 = 56, in3 - ;; -(p6) stfd [in1] = f14 -(p7) stfd [r16] = f15 - br.ret.sptk.many b0 - ;; - -.Lst_hfa_ldouble: - add r16 = 16, in1 - cmp.lt p6, p0 = 16, in3 - ;; - stfe [in1] = f8, 32 -(p6) stfe [r16] = f9, 32 - cmp.lt p7, p0 = 32, in3 - cmp.lt p8, p0 = 48, in3 - ;; -(p7) stfe [in1] = f10, 32 -(p8) stfe [r16] = f11, 32 - cmp.lt p9, p0 = 64, in3 - cmp.lt p10, p0 = 80, in3 - ;; -(p9) stfe [in1] = f12, 32 -(p10) stfe [r16] = f13, 32 - cmp.lt p6, p0 = 96, in3 - cmp.lt p7, p0 = 112, in3 - ;; -(p6) stfe [in1] = f14 -(p7) stfe [r16] = f15 - br.ret.sptk.many b0 - ;; - - .endp ffi_call_unix - - .align 16 - .global ffi_closure_unix - .proc ffi_closure_unix - -#define FRAME_SIZE (8*16 + 8*8 + 8*16) - -ffi_closure_unix: - .prologue - .save ar.pfs, r40 // loc0 - alloc loc0 = ar.pfs, 8, 4, 4, 0 - .fframe FRAME_SIZE - add r12 = -FRAME_SIZE, r12 - .save rp, loc1 - mov loc1 = b0 - .save ar.unat, loc2 - mov loc2 = ar.unat - .body - - /* Retrieve closure pointer and real gp. */ -#ifdef _ILP32 - addp4 out0 = 0, gp - addp4 gp = 16, gp -#else - mov out0 = gp - add gp = 16, gp -#endif - ;; - ld8 gp = [gp] - - /* Spill all of the possible argument registers. */ - add r16 = 16 + 8*16, sp - add r17 = 16 + 8*16 + 16, sp - ;; - stf.spill [r16] = f8, 32 - stf.spill [r17] = f9, 32 - mov loc3 = gp - ;; - stf.spill [r16] = f10, 32 - stf.spill [r17] = f11, 32 - ;; - stf.spill [r16] = f12, 32 - stf.spill [r17] = f13, 32 - ;; - stf.spill [r16] = f14, 32 - stf.spill [r17] = f15, 24 - ;; - .mem.offset 0, 0 - st8.spill [r16] = in0, 16 - .mem.offset 8, 0 - st8.spill [r17] = in1, 16 - add out1 = 16 + 8*16, sp - ;; - .mem.offset 0, 0 - st8.spill [r16] = in2, 16 - .mem.offset 8, 0 - st8.spill [r17] = in3, 16 - add out2 = 16, sp - ;; - .mem.offset 0, 0 - st8.spill [r16] = in4, 16 - .mem.offset 8, 0 - st8.spill [r17] = in5, 16 - mov out3 = r8 - ;; - .mem.offset 0, 0 - st8.spill [r16] = in6 - .mem.offset 8, 0 - st8.spill [r17] = in7 - - /* Invoke ffi_closure_unix_inner for the hard work. */ - br.call.sptk.many b0 = ffi_closure_unix_inner - ;; - - /* Dispatch to handle return value. */ - mov gp = loc3 - zxt1 r16 = r8 - ;; - addl r18 = @ltoffx(.Lld_table), gp - mov ar.pfs = loc0 - ;; - ld8.mov r18 = [r18], .Lld_table - mov b0 = loc1 - ;; - shladd r18 = r16, 3, r18 - mov ar.unat = loc2 - ;; - ld8 r17 = [r18] - shr r8 = r8, 8 - ;; - add r17 = r17, r18 - add r16 = 16, sp - ;; - mov b6 = r17 - br b6 - ;; - .label_state 1 - -.Lld_void: - .restore sp - add sp = FRAME_SIZE, sp - br.ret.sptk.many b0 - ;; -.Lld_int: - .body - .copy_state 1 - ld8 r8 = [r16] - .restore sp - add sp = FRAME_SIZE, sp - br.ret.sptk.many b0 - ;; -.Lld_float: - .body - .copy_state 1 - ldfs f8 = [r16] - .restore sp - add sp = FRAME_SIZE, sp - br.ret.sptk.many b0 - ;; -.Lld_double: - .body - .copy_state 1 - ldfd f8 = [r16] - .restore sp - add sp = FRAME_SIZE, sp - br.ret.sptk.many b0 - ;; -.Lld_ldouble: - .body - .copy_state 1 - ldfe f8 = [r16] - .restore sp - add sp = FRAME_SIZE, sp - br.ret.sptk.many b0 - ;; - -.Lld_small_struct: - .body - .copy_state 1 - add r17 = 8, r16 - cmp.lt p6, p0 = 8, r8 - cmp.lt p7, p0 = 16, r8 - cmp.lt p8, p0 = 24, r8 - ;; - ld8 r8 = [r16], 16 -(p6) ld8 r9 = [r17], 16 - ;; -(p7) ld8 r10 = [r16] -(p8) ld8 r11 = [r17] - .restore sp - add sp = FRAME_SIZE, sp - br.ret.sptk.many b0 - ;; - -.Lld_hfa_float: - .body - .copy_state 1 - add r17 = 4, r16 - cmp.lt p6, p0 = 4, r8 - ;; - ldfs f8 = [r16], 8 -(p6) ldfs f9 = [r17], 8 - cmp.lt p7, p0 = 8, r8 - cmp.lt p8, p0 = 12, r8 - ;; -(p7) ldfs f10 = [r16], 8 -(p8) ldfs f11 = [r17], 8 - cmp.lt p9, p0 = 16, r8 - cmp.lt p10, p0 = 20, r8 - ;; -(p9) ldfs f12 = [r16], 8 -(p10) ldfs f13 = [r17], 8 - cmp.lt p6, p0 = 24, r8 - cmp.lt p7, p0 = 28, r8 - ;; -(p6) ldfs f14 = [r16] -(p7) ldfs f15 = [r17] - .restore sp - add sp = FRAME_SIZE, sp - br.ret.sptk.many b0 - ;; - -.Lld_hfa_double: - .body - .copy_state 1 - add r17 = 8, r16 - cmp.lt p6, p0 = 8, r8 - ;; - ldfd f8 = [r16], 16 -(p6) ldfd f9 = [r17], 16 - cmp.lt p7, p0 = 16, r8 - cmp.lt p8, p0 = 24, r8 - ;; -(p7) ldfd f10 = [r16], 16 -(p8) ldfd f11 = [r17], 16 - cmp.lt p9, p0 = 32, r8 - cmp.lt p10, p0 = 40, r8 - ;; -(p9) ldfd f12 = [r16], 16 -(p10) ldfd f13 = [r17], 16 - cmp.lt p6, p0 = 48, r8 - cmp.lt p7, p0 = 56, r8 - ;; -(p6) ldfd f14 = [r16] -(p7) ldfd f15 = [r17] - .restore sp - add sp = FRAME_SIZE, sp - br.ret.sptk.many b0 - ;; - -.Lld_hfa_ldouble: - .body - .copy_state 1 - add r17 = 16, r16 - cmp.lt p6, p0 = 16, r8 - ;; - ldfe f8 = [r16], 32 -(p6) ldfe f9 = [r17], 32 - cmp.lt p7, p0 = 32, r8 - cmp.lt p8, p0 = 48, r8 - ;; -(p7) ldfe f10 = [r16], 32 -(p8) ldfe f11 = [r17], 32 - cmp.lt p9, p0 = 64, r8 - cmp.lt p10, p0 = 80, r8 - ;; -(p9) ldfe f12 = [r16], 32 -(p10) ldfe f13 = [r17], 32 - cmp.lt p6, p0 = 96, r8 - cmp.lt p7, p0 = 112, r8 - ;; -(p6) ldfe f14 = [r16] -(p7) ldfe f15 = [r17] - .restore sp - add sp = FRAME_SIZE, sp - br.ret.sptk.many b0 - ;; - - .endp ffi_closure_unix - - .section .rodata - .align 8 -.Lst_table: - data8 @pcrel(.Lst_void) // FFI_TYPE_VOID - data8 @pcrel(.Lst_sint32) // FFI_TYPE_INT - data8 @pcrel(.Lst_float) // FFI_TYPE_FLOAT - data8 @pcrel(.Lst_double) // FFI_TYPE_DOUBLE - data8 @pcrel(.Lst_ldouble) // FFI_TYPE_LONGDOUBLE - data8 @pcrel(.Lst_uint8) // FFI_TYPE_UINT8 - data8 @pcrel(.Lst_sint8) // FFI_TYPE_SINT8 - data8 @pcrel(.Lst_uint16) // FFI_TYPE_UINT16 - data8 @pcrel(.Lst_sint16) // FFI_TYPE_SINT16 - data8 @pcrel(.Lst_uint32) // FFI_TYPE_UINT32 - data8 @pcrel(.Lst_sint32) // FFI_TYPE_SINT32 - data8 @pcrel(.Lst_int64) // FFI_TYPE_UINT64 - data8 @pcrel(.Lst_int64) // FFI_TYPE_SINT64 - data8 @pcrel(.Lst_void) // FFI_TYPE_STRUCT - data8 @pcrel(.Lst_int64) // FFI_TYPE_POINTER - data8 @pcrel(.Lst_small_struct) // FFI_IA64_TYPE_SMALL_STRUCT - data8 @pcrel(.Lst_hfa_float) // FFI_IA64_TYPE_HFA_FLOAT - data8 @pcrel(.Lst_hfa_double) // FFI_IA64_TYPE_HFA_DOUBLE - data8 @pcrel(.Lst_hfa_ldouble) // FFI_IA64_TYPE_HFA_LDOUBLE - -.Lld_table: - data8 @pcrel(.Lld_void) // FFI_TYPE_VOID - data8 @pcrel(.Lld_int) // FFI_TYPE_INT - data8 @pcrel(.Lld_float) // FFI_TYPE_FLOAT - data8 @pcrel(.Lld_double) // FFI_TYPE_DOUBLE - data8 @pcrel(.Lld_ldouble) // FFI_TYPE_LONGDOUBLE - data8 @pcrel(.Lld_int) // FFI_TYPE_UINT8 - data8 @pcrel(.Lld_int) // FFI_TYPE_SINT8 - data8 @pcrel(.Lld_int) // FFI_TYPE_UINT16 - data8 @pcrel(.Lld_int) // FFI_TYPE_SINT16 - data8 @pcrel(.Lld_int) // FFI_TYPE_UINT32 - data8 @pcrel(.Lld_int) // FFI_TYPE_SINT32 - data8 @pcrel(.Lld_int) // FFI_TYPE_UINT64 - data8 @pcrel(.Lld_int) // FFI_TYPE_SINT64 - data8 @pcrel(.Lld_void) // FFI_TYPE_STRUCT - data8 @pcrel(.Lld_int) // FFI_TYPE_POINTER - data8 @pcrel(.Lld_small_struct) // FFI_IA64_TYPE_SMALL_STRUCT - data8 @pcrel(.Lld_hfa_float) // FFI_IA64_TYPE_HFA_FLOAT - data8 @pcrel(.Lld_hfa_double) // FFI_IA64_TYPE_HFA_DOUBLE - data8 @pcrel(.Lld_hfa_ldouble) // FFI_IA64_TYPE_HFA_LDOUBLE - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/java_raw_api.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/java_raw_api.c deleted file mode 100644 index 522c8bf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/java_raw_api.c +++ /dev/null @@ -1,356 +0,0 @@ -/* ----------------------------------------------------------------------- - java_raw_api.c - Copyright (c) 1999, 2007, 2008 Red Hat, Inc. - - Cloned from raw_api.c - - Raw_api.c author: Kresten Krab Thorup - Java_raw_api.c author: Hans-J. Boehm - - $Id $ - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -/* This defines a Java- and 64-bit specific variant of the raw API. */ -/* It assumes that "raw" argument blocks look like Java stacks on a */ -/* 64-bit machine. Arguments that can be stored in a single stack */ -/* stack slots (longs, doubles) occupy 128 bits, but only the first */ -/* 64 bits are actually used. */ - -#include -#include -#include - -#if !defined(NO_JAVA_RAW_API) && !defined(FFI_NO_RAW_API) - -size_t -ffi_java_raw_size (ffi_cif *cif) -{ - size_t result = 0; - int i; - - ffi_type **at = cif->arg_types; - - for (i = cif->nargs-1; i >= 0; i--, at++) - { - switch((*at) -> type) { - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - case FFI_TYPE_DOUBLE: - result += 2 * FFI_SIZEOF_JAVA_RAW; - break; - case FFI_TYPE_STRUCT: - /* No structure parameters in Java. */ - abort(); - default: - result += FFI_SIZEOF_JAVA_RAW; - } - } - - return result; -} - - -void -ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args) -{ - unsigned i; - ffi_type **tp = cif->arg_types; - -#if WORDS_BIGENDIAN - - for (i = 0; i < cif->nargs; i++, tp++, args++) - { - switch ((*tp)->type) - { - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT8: - *args = (void*) ((char*)(raw++) + 3); - break; - - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT16: - *args = (void*) ((char*)(raw++) + 2); - break; - -#if FFI_SIZEOF_JAVA_RAW == 8 - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - case FFI_TYPE_DOUBLE: - *args = (void *)raw; - raw += 2; - break; -#endif - - case FFI_TYPE_POINTER: - *args = (void*) &(raw++)->ptr; - break; - - default: - *args = raw; - raw += - ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); - } - } - -#else /* WORDS_BIGENDIAN */ - -#if !PDP - - /* then assume little endian */ - for (i = 0; i < cif->nargs; i++, tp++, args++) - { -#if FFI_SIZEOF_JAVA_RAW == 8 - switch((*tp)->type) { - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - case FFI_TYPE_DOUBLE: - *args = (void*) raw; - raw += 2; - break; - default: - *args = (void*) raw++; - } -#else /* FFI_SIZEOF_JAVA_RAW != 8 */ - *args = (void*) raw; - raw += - ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); -#endif /* FFI_SIZEOF_JAVA_RAW == 8 */ - } - -#else -#error "pdp endian not supported" -#endif /* ! PDP */ - -#endif /* WORDS_BIGENDIAN */ -} - -void -ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw) -{ - unsigned i; - ffi_type **tp = cif->arg_types; - - for (i = 0; i < cif->nargs; i++, tp++, args++) - { - switch ((*tp)->type) - { - case FFI_TYPE_UINT8: -#if WORDS_BIGENDIAN - *(UINT32*)(raw++) = *(UINT8*) (*args); -#else - (raw++)->uint = *(UINT8*) (*args); -#endif - break; - - case FFI_TYPE_SINT8: -#if WORDS_BIGENDIAN - *(SINT32*)(raw++) = *(SINT8*) (*args); -#else - (raw++)->sint = *(SINT8*) (*args); -#endif - break; - - case FFI_TYPE_UINT16: -#if WORDS_BIGENDIAN - *(UINT32*)(raw++) = *(UINT16*) (*args); -#else - (raw++)->uint = *(UINT16*) (*args); -#endif - break; - - case FFI_TYPE_SINT16: -#if WORDS_BIGENDIAN - *(SINT32*)(raw++) = *(SINT16*) (*args); -#else - (raw++)->sint = *(SINT16*) (*args); -#endif - break; - - case FFI_TYPE_UINT32: -#if WORDS_BIGENDIAN - *(UINT32*)(raw++) = *(UINT32*) (*args); -#else - (raw++)->uint = *(UINT32*) (*args); -#endif - break; - - case FFI_TYPE_SINT32: -#if WORDS_BIGENDIAN - *(SINT32*)(raw++) = *(SINT32*) (*args); -#else - (raw++)->sint = *(SINT32*) (*args); -#endif - break; - - case FFI_TYPE_FLOAT: - (raw++)->flt = *(FLOAT32*) (*args); - break; - -#if FFI_SIZEOF_JAVA_RAW == 8 - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - case FFI_TYPE_DOUBLE: - raw->uint = *(UINT64*) (*args); - raw += 2; - break; -#endif - - case FFI_TYPE_POINTER: - (raw++)->ptr = **(void***) args; - break; - - default: -#if FFI_SIZEOF_JAVA_RAW == 8 - FFI_ASSERT(0); /* Should have covered all cases */ -#else - memcpy ((void*) raw->data, (void*)*args, (*tp)->size); - raw += - ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); -#endif - } - } -} - -#if !FFI_NATIVE_RAW_API - -static void -ffi_java_rvalue_to_raw (ffi_cif *cif, void *rvalue) -{ -#if WORDS_BIGENDIAN && FFI_SIZEOF_ARG == 8 - switch (cif->rtype->type) - { - case FFI_TYPE_UINT8: - case FFI_TYPE_UINT16: - case FFI_TYPE_UINT32: - *(UINT64 *)rvalue <<= 32; - break; - - case FFI_TYPE_SINT8: - case FFI_TYPE_SINT16: - case FFI_TYPE_SINT32: - case FFI_TYPE_INT: -#if FFI_SIZEOF_JAVA_RAW == 4 - case FFI_TYPE_POINTER: -#endif - *(SINT64 *)rvalue <<= 32; - break; - - default: - break; - } -#endif -} - -static void -ffi_java_raw_to_rvalue (ffi_cif *cif, void *rvalue) -{ -#if WORDS_BIGENDIAN && FFI_SIZEOF_ARG == 8 - switch (cif->rtype->type) - { - case FFI_TYPE_UINT8: - case FFI_TYPE_UINT16: - case FFI_TYPE_UINT32: - *(UINT64 *)rvalue >>= 32; - break; - - case FFI_TYPE_SINT8: - case FFI_TYPE_SINT16: - case FFI_TYPE_SINT32: - case FFI_TYPE_INT: - *(SINT64 *)rvalue >>= 32; - break; - - default: - break; - } -#endif -} - -/* This is a generic definition of ffi_raw_call, to be used if the - * native system does not provide a machine-specific implementation. - * Having this, allows code to be written for the raw API, without - * the need for system-specific code to handle input in that format; - * these following couple of functions will handle the translation forth - * and back automatically. */ - -void ffi_java_raw_call (ffi_cif *cif, void (*fn)(void), void *rvalue, - ffi_java_raw *raw) -{ - void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); - ffi_java_raw_to_ptrarray (cif, raw, avalue); - ffi_call (cif, fn, rvalue, avalue); - ffi_java_rvalue_to_raw (cif, rvalue); -} - -#if FFI_CLOSURES /* base system provides closures */ - -static void -ffi_java_translate_args (ffi_cif *cif, void *rvalue, - void **avalue, void *user_data) -{ - ffi_java_raw *raw = (ffi_java_raw*)alloca (ffi_java_raw_size (cif)); - ffi_raw_closure *cl = (ffi_raw_closure*)user_data; - - ffi_java_ptrarray_to_raw (cif, avalue, raw); - (*cl->fun) (cif, rvalue, (ffi_raw*)raw, cl->user_data); - ffi_java_raw_to_rvalue (cif, rvalue); -} - -ffi_status -ffi_prep_java_raw_closure_loc (ffi_java_raw_closure* cl, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), - void *user_data, - void *codeloc) -{ - ffi_status status; - - status = ffi_prep_closure_loc ((ffi_closure*) cl, - cif, - &ffi_java_translate_args, - codeloc, - codeloc); - if (status == FFI_OK) - { - cl->fun = fun; - cl->user_data = user_data; - } - - return status; -} - -/* Again, here is the generic version of ffi_prep_raw_closure, which - * will install an intermediate "hub" for translation of arguments from - * the pointer-array format, to the raw format */ - -ffi_status -ffi_prep_java_raw_closure (ffi_java_raw_closure* cl, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), - void *user_data) -{ - return ffi_prep_java_raw_closure_loc (cl, cif, fun, user_data, cl); -} - -#endif /* FFI_CLOSURES */ -#endif /* !FFI_NATIVE_RAW_API */ -#endif /* !FFI_NO_RAW_API */ diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/m32r/ffi.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/m32r/ffi.c deleted file mode 100644 index 3000063..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/m32r/ffi.c +++ /dev/null @@ -1,232 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2004 Renesas Technology - Copyright (c) 2008 Red Hat, Inc. - - M32R Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL RENESAS TECHNOLOGY BE LIABLE FOR ANY CLAIM, DAMAGES OR - OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#include -#include - -#include - -/* ffi_prep_args is called by the assembly routine once stack - space has been allocated for the function's arguments. */ - -void ffi_prep_args(char *stack, extended_cif *ecif) -{ - unsigned int i; - int tmp; - unsigned int avn; - void **p_argv; - char *argp; - ffi_type **p_arg; - - tmp = 0; - argp = stack; - - if (ecif->cif->rtype->type == FFI_TYPE_STRUCT && ecif->cif->rtype->size > 8) - { - *(void **) argp = ecif->rvalue; - argp += 4; - } - - avn = ecif->cif->nargs; - p_argv = ecif->avalue; - - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; - (i != 0) && (avn != 0); - i--, p_arg++) - { - size_t z; - - /* Align if necessary. */ - if (((*p_arg)->alignment - 1) & (unsigned) argp) - argp = (char *) ALIGN (argp, (*p_arg)->alignment); - - if (avn != 0) - { - avn--; - z = (*p_arg)->size; - if (z < sizeof (int)) - { - z = sizeof (int); - - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv); - break; - - case FFI_TYPE_UINT8: - *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv); - break; - - case FFI_TYPE_SINT16: - *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv); - break; - - case FFI_TYPE_UINT16: - *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv); - break; - - case FFI_TYPE_STRUCT: - z = (*p_arg)->size; - if ((*p_arg)->alignment != 1) - memcpy (argp, *p_argv, z); - else - memcpy (argp + 4 - z, *p_argv, z); - z = sizeof (int); - break; - - default: - FFI_ASSERT(0); - } - } - else if (z == sizeof (int)) - { - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - } - else - { - if ((*p_arg)->type == FFI_TYPE_STRUCT) - { - if (z > 8) - { - *(unsigned int *) argp = (unsigned int)(void *)(* p_argv); - z = sizeof(void *); - } - else - { - memcpy(argp, *p_argv, z); - z = 8; - } - } - else - { - /* Double or long long 64bit. */ - memcpy (argp, *p_argv, z); - } - } - p_argv++; - argp += z; - } - } - - return; -} - -/* Perform machine dependent cif processing. */ -ffi_status -ffi_prep_cif_machdep(ffi_cif *cif) -{ - /* Set the return type flag. */ - switch (cif->rtype->type) - { - case FFI_TYPE_VOID: - cif->flags = (unsigned) cif->rtype->type; - break; - - case FFI_TYPE_STRUCT: - if (cif->rtype->size <= 4) - cif->flags = FFI_TYPE_INT; - - else if (cif->rtype->size <= 8) - cif->flags = FFI_TYPE_DOUBLE; - - else - cif->flags = (unsigned) cif->rtype->type; - break; - - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - case FFI_TYPE_DOUBLE: - cif->flags = FFI_TYPE_DOUBLE; - break; - - case FFI_TYPE_FLOAT: - default: - cif->flags = FFI_TYPE_INT; - break; - } - - return FFI_OK; -} - -extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, - unsigned, unsigned, unsigned *, void (*fn)(void)); - -void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have - a return value address then we need to make one. */ - if ((rvalue == NULL) && - (cif->rtype->type == FFI_TYPE_STRUCT)) - { - ecif.rvalue = alloca (cif->rtype->size); - } - else - ecif.rvalue = rvalue; - - switch (cif->abi) - { - case FFI_SYSV: - ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, - cif->flags, ecif.rvalue, fn); - if (cif->rtype->type == FFI_TYPE_STRUCT) - { - int size = cif->rtype->size; - int align = cif->rtype->alignment; - - if (size < 4) - { - if (align == 1) - *(unsigned long *)(ecif.rvalue) <<= (4 - size) * 8; - } - else if (4 < size && size < 8) - { - if (align == 1) - { - memcpy (ecif.rvalue, ecif.rvalue + 8-size, size); - } - else if (align == 2) - { - if (size & 1) - size += 1; - - if (size != 8) - memcpy (ecif.rvalue, ecif.rvalue + 8-size, size); - } - } - } - break; - - default: - FFI_ASSERT(0); - break; - } -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/m32r/ffitarget.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/m32r/ffitarget.h deleted file mode 100644 index 2e2ea48..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/m32r/ffitarget.h +++ /dev/null @@ -1,48 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 2004 Renesas Technology. - Target configuration macros for M32R. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL RENESAS TECHNOLOGY BE LIABLE FOR ANY CLAIM, DAMAGES OR - OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -/* ---- Generic type definitions ----------------------------------------- */ - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi - { - FFI_FIRST_ABI = 0, - FFI_SYSV, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_SYSV - } ffi_abi; -#endif - -#define FFI_CLOSURES 0 -#define FFI_TRAMPOLINE_SIZE 24 -#define FFI_NATIVE_RAW_API 0 - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/m32r/sysv.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/m32r/sysv.S deleted file mode 100644 index 06b75c2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/m32r/sysv.S +++ /dev/null @@ -1,121 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 2004 Renesas Technology - - M32R Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL RENESAS TECHNOLOGY BE LIABLE FOR ANY CLAIM, DAMAGES OR - OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include -#ifdef HAVE_MACHINE_ASM_H -#include -#else -/* XXX these lose for some platforms, I'm sure. */ -#define CNAME(x) x -#define ENTRY(x) .globl CNAME(x)! .type CNAME(x),%function! CNAME(x): -#endif - -.text - - /* R0: ffi_prep_args */ - /* R1: &ecif */ - /* R2: cif->bytes */ - /* R3: fig->flags */ - /* sp+0: ecif.rvalue */ - /* sp+4: fn */ - - /* This assumes we are using gas. */ -ENTRY(ffi_call_SYSV) - /* Save registers. */ - push fp - push lr - push r3 - push r2 - push r1 - push r0 - mv fp, sp - - /* Make room for all of the new args. */ - sub sp, r2 - - /* Place all of the ffi_prep_args in position. */ - mv lr, r0 - mv r0, sp - /* R1 already set. */ - - /* And call. */ - jl lr - - /* Move first 4 parameters in registers... */ - ld r0, @(0,sp) - ld r1, @(4,sp) - ld r2, @(8,sp) - ld r3, @(12,sp) - - /* ...and adjust the stack. */ - ld lr, @(8,fp) - cmpi lr, #16 - bc adjust_stack - ldi lr, #16 -adjust_stack: - add sp, lr - - /* Call the function. */ - ld lr, @(28,fp) - jl lr - - /* Remove the space we pushed for the args. */ - mv sp, fp - - /* Load R2 with the pointer to storage for the return value. */ - ld r2, @(24,sp) - - /* Load R3 with the return type code. */ - ld r3, @(12,sp) - - /* If the return value pointer is NULL, assume no return value. */ - beqz r2, epilogue - - /* Return INT. */ - ldi r4, #FFI_TYPE_INT - bne r3, r4, return_double - st r0, @r2 - bra epilogue - -return_double: - /* Return DOUBLE or LONGDOUBLE. */ - ldi r4, #FFI_TYPE_DOUBLE - bne r3, r4, epilogue - st r0, @r2 - st r1, @(4,r2) - -epilogue: - pop r0 - pop r1 - pop r2 - pop r3 - pop lr - pop fp - jmp lr - -.ffi_call_SYSV_end: - .size CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV) diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/m68k/ffi.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/m68k/ffi.c deleted file mode 100644 index 0d4df1e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/m68k/ffi.c +++ /dev/null @@ -1,288 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - - m68k Foreign Function Interface - ----------------------------------------------------------------------- */ - -#include -#include - -#include -#include -#ifdef __rtems__ -void rtems_cache_flush_multiple_data_lines( const void *, size_t ); -#else -#include -#include -#endif - -void ffi_call_SYSV (extended_cif *, - unsigned, unsigned, - void *, void (*fn) ()); -void *ffi_prep_args (void *stack, extended_cif *ecif); -void ffi_closure_SYSV (ffi_closure *); -void ffi_closure_struct_SYSV (ffi_closure *); -unsigned int ffi_closure_SYSV_inner (ffi_closure *closure, - void *resp, void *args); - -/* ffi_prep_args is called by the assembly routine once stack space has - been allocated for the function's arguments. */ - -void * -ffi_prep_args (void *stack, extended_cif *ecif) -{ - unsigned int i; - void **p_argv; - char *argp; - ffi_type **p_arg; - void *struct_value_ptr; - - argp = stack; - - if (ecif->cif->rtype->type == FFI_TYPE_STRUCT - && !ecif->cif->flags) - struct_value_ptr = ecif->rvalue; - else - struct_value_ptr = NULL; - - p_argv = ecif->avalue; - - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; - i != 0; - i--, p_arg++) - { - size_t z; - - z = (*p_arg)->size; - if (z < sizeof (int)) - { - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(signed int *) argp = (signed int) *(SINT8 *) *p_argv; - break; - - case FFI_TYPE_UINT8: - *(unsigned int *) argp = (unsigned int) *(UINT8 *) *p_argv; - break; - - case FFI_TYPE_SINT16: - *(signed int *) argp = (signed int) *(SINT16 *) *p_argv; - break; - - case FFI_TYPE_UINT16: - *(unsigned int *) argp = (unsigned int) *(UINT16 *) *p_argv; - break; - - case FFI_TYPE_STRUCT: - memcpy (argp + sizeof (int) - z, *p_argv, z); - break; - - default: - FFI_ASSERT (0); - } - z = sizeof (int); - } - else - { - memcpy (argp, *p_argv, z); - - /* Align if necessary. */ - if ((sizeof(int) - 1) & z) - z = ALIGN(z, sizeof(int)); - } - - p_argv++; - argp += z; - } - - return struct_value_ptr; -} - -#define CIF_FLAGS_INT 1 -#define CIF_FLAGS_DINT 2 -#define CIF_FLAGS_FLOAT 4 -#define CIF_FLAGS_DOUBLE 8 -#define CIF_FLAGS_LDOUBLE 16 -#define CIF_FLAGS_POINTER 32 -#define CIF_FLAGS_STRUCT1 64 -#define CIF_FLAGS_STRUCT2 128 - -/* Perform machine dependent cif processing */ -ffi_status -ffi_prep_cif_machdep (ffi_cif *cif) -{ - /* Set the return type flag */ - switch (cif->rtype->type) - { - case FFI_TYPE_VOID: - cif->flags = 0; - break; - - case FFI_TYPE_STRUCT: - switch (cif->rtype->size) - { - case 1: - cif->flags = CIF_FLAGS_STRUCT1; - break; - case 2: - cif->flags = CIF_FLAGS_STRUCT2; - break; - case 4: - cif->flags = CIF_FLAGS_INT; - break; - case 8: - cif->flags = CIF_FLAGS_DINT; - break; - default: - cif->flags = 0; - break; - } - break; - - case FFI_TYPE_FLOAT: - cif->flags = CIF_FLAGS_FLOAT; - break; - - case FFI_TYPE_DOUBLE: - cif->flags = CIF_FLAGS_DOUBLE; - break; - -#if (FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE) - case FFI_TYPE_LONGDOUBLE: - cif->flags = CIF_FLAGS_LDOUBLE; - break; -#endif - - case FFI_TYPE_POINTER: - cif->flags = CIF_FLAGS_POINTER; - break; - - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - cif->flags = CIF_FLAGS_DINT; - break; - - default: - cif->flags = CIF_FLAGS_INT; - break; - } - - return FFI_OK; -} - -void -ffi_call (ffi_cif *cif, void (*fn) (), void *rvalue, void **avalue) -{ - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return value - address then we need to make one. */ - - if (rvalue == NULL - && cif->rtype->type == FFI_TYPE_STRUCT - && cif->rtype->size > 8) - ecif.rvalue = alloca (cif->rtype->size); - else - ecif.rvalue = rvalue; - - switch (cif->abi) - { - case FFI_SYSV: - ffi_call_SYSV (&ecif, cif->bytes, cif->flags, - ecif.rvalue, fn); - break; - - default: - FFI_ASSERT (0); - break; - } -} - -static void -ffi_prep_incoming_args_SYSV (char *stack, void **avalue, ffi_cif *cif) -{ - unsigned int i; - void **p_argv; - char *argp; - ffi_type **p_arg; - - argp = stack; - p_argv = avalue; - - for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++) - { - size_t z; - - z = (*p_arg)->size; - if (z <= 4) - { - *p_argv = (void *) (argp + 4 - z); - - z = 4; - } - else - { - *p_argv = (void *) argp; - - /* Align if necessary */ - if ((sizeof(int) - 1) & z) - z = ALIGN(z, sizeof(int)); - } - - p_argv++; - argp += z; - } -} - -unsigned int -ffi_closure_SYSV_inner (ffi_closure *closure, void *resp, void *args) -{ - ffi_cif *cif; - void **arg_area; - - cif = closure->cif; - arg_area = (void**) alloca (cif->nargs * sizeof (void *)); - - ffi_prep_incoming_args_SYSV(args, arg_area, cif); - - (closure->fun) (cif, resp, arg_area, closure->user_data); - - return cif->flags; -} - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data, - void *codeloc) -{ - FFI_ASSERT (cif->abi == FFI_SYSV); - - *(unsigned short *)closure->tramp = 0x207c; - *(void **)(closure->tramp + 2) = codeloc; - *(unsigned short *)(closure->tramp + 6) = 0x4ef9; - if (cif->rtype->type == FFI_TYPE_STRUCT - && !cif->flags) - *(void **)(closure->tramp + 8) = ffi_closure_struct_SYSV; - else - *(void **)(closure->tramp + 8) = ffi_closure_SYSV; - -#ifdef __rtems__ - rtems_cache_flush_multiple_data_lines( codeloc, FFI_TRAMPOLINE_SIZE ); -#else - syscall(SYS_cacheflush, codeloc, FLUSH_SCOPE_LINE, - FLUSH_CACHE_BOTH, FFI_TRAMPOLINE_SIZE); -#endif - - closure->cif = cif; - closure->user_data = user_data; - closure->fun = fun; - - return FFI_OK; -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/m68k/ffitarget.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/m68k/ffitarget.h deleted file mode 100644 index 3b777ed..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/m68k/ffitarget.h +++ /dev/null @@ -1,49 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. - Target configuration macros for Motorola 68K. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_SYSV, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_SYSV -} ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_TRAMPOLINE_SIZE 16 -#define FFI_NATIVE_RAW_API 0 - -#endif - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/m68k/sysv.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/m68k/sysv.S deleted file mode 100644 index c782f51..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/m68k/sysv.S +++ /dev/null @@ -1,270 +0,0 @@ -/* ----------------------------------------------------------------------- - - sysv.S - Copyright (c) 1998 Andreas Schwab - Copyright (c) 2008 Red Hat, Inc. - - m68k Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - -#ifdef HAVE_AS_CFI_PSEUDO_OP -#define CFI_STARTPROC() .cfi_startproc -#define CFI_OFFSET(reg,off) .cfi_offset reg,off -#define CFI_DEF_CFA(reg,off) .cfi_def_cfa reg,off -#define CFI_ENDPROC() .cfi_endproc -#else -#define CFI_STARTPROC() -#define CFI_OFFSET(reg,off) -#define CFI_DEF_CFA(reg,off) -#define CFI_ENDPROC() -#endif - - .text - - .globl ffi_call_SYSV - .type ffi_call_SYSV,@function - .align 4 - -ffi_call_SYSV: - CFI_STARTPROC() - link %fp,#0 - CFI_OFFSET(14,-8) - CFI_DEF_CFA(14,8) - move.l %d2,-(%sp) - CFI_OFFSET(2,-12) - - | Make room for all of the new args. - sub.l 12(%fp),%sp - - | Call ffi_prep_args - move.l 8(%fp),-(%sp) - pea 4(%sp) -#if !defined __PIC__ - jsr ffi_prep_args -#else - bsr.l ffi_prep_args@PLTPC -#endif - addq.l #8,%sp - - | Pass pointer to struct value, if any - move.l %a0,%a1 - - | Call the function - move.l 24(%fp),%a0 - jsr (%a0) - - | Remove the space we pushed for the args - add.l 12(%fp),%sp - - | Load the pointer to storage for the return value - move.l 20(%fp),%a1 - - | Load the return type code - move.l 16(%fp),%d2 - - | If the return value pointer is NULL, assume no return value. - | NOTE: On the mc68000, tst on an address register is not supported. -#if defined(__mc68000__) && !defined(__mcoldfire__) - cmp.w #0, %a1 -#else - tst.l %a1 -#endif - jbeq noretval - - btst #0,%d2 - jbeq retlongint - move.l %d0,(%a1) - jbra epilogue - -retlongint: - btst #1,%d2 - jbeq retfloat - move.l %d0,(%a1) - move.l %d1,4(%a1) - jbra epilogue - -retfloat: - btst #2,%d2 - jbeq retdouble -#if defined(__MC68881__) - fmove.s %fp0,(%a1) -#else - move.l %d0,(%a1) -#endif - jbra epilogue - -retdouble: - btst #3,%d2 - jbeq retlongdouble -#if defined(__MC68881__) - fmove.d %fp0,(%a1) -#else - move.l %d0,(%a1)+ - move.l %d1,(%a1) -#endif - jbra epilogue - -retlongdouble: - btst #4,%d2 - jbeq retpointer -#if defined(__MC68881__) - fmove.x %fp0,(%a1) -#else - move.l %d0,(%a1)+ - move.l %d1,(%a1)+ - move.l %d2,(%a1) -#endif - jbra epilogue - -retpointer: - btst #5,%d2 - jbeq retstruct1 - move.l %a0,(%a1) - jbra epilogue - -retstruct1: - btst #6,%d2 - jbeq retstruct2 - move.b %d0,(%a1) - jbra epilogue - -retstruct2: - btst #7,%d2 - jbeq noretval - move.w %d0,(%a1) - -noretval: -epilogue: - move.l (%sp)+,%d2 - unlk %fp - rts - CFI_ENDPROC() - .size ffi_call_SYSV,.-ffi_call_SYSV - - .globl ffi_closure_SYSV - .type ffi_closure_SYSV, @function - .align 4 - -ffi_closure_SYSV: - CFI_STARTPROC() - link %fp,#-12 - CFI_OFFSET(14,-8) - CFI_DEF_CFA(14,8) - move.l %sp,-12(%fp) - pea 8(%fp) - pea -12(%fp) - move.l %a0,-(%sp) -#if !defined __PIC__ - jsr ffi_closure_SYSV_inner -#else - bsr.l ffi_closure_SYSV_inner@PLTPC -#endif - - lsr.l #1,%d0 - jne 1f - jcc .Lcls_epilogue - move.l -12(%fp),%d0 -.Lcls_epilogue: - unlk %fp - rts -1: - lea -12(%fp),%a0 - lsr.l #2,%d0 - jne 1f - jcs .Lcls_ret_float - move.l (%a0)+,%d0 - move.l (%a0),%d1 - jra .Lcls_epilogue -.Lcls_ret_float: -#if defined(__MC68881__) - fmove.s (%a0),%fp0 -#else - move.l (%a0),%d0 -#endif - jra .Lcls_epilogue -1: - lsr.l #2,%d0 - jne 1f - jcs .Lcls_ret_ldouble -#if defined(__MC68881__) - fmove.d (%a0),%fp0 -#else - move.l (%a0)+,%d0 - move.l (%a0),%d1 -#endif - jra .Lcls_epilogue -.Lcls_ret_ldouble: -#if defined(__MC68881__) - fmove.x (%a0),%fp0 -#else - move.l (%a0)+,%d0 - move.l (%a0)+,%d1 - move.l (%a0),%d2 -#endif - jra .Lcls_epilogue -1: - lsr.l #2,%d0 - jne .Lcls_ret_struct2 - jcs .Lcls_ret_struct1 - move.l (%a0),%a0 - move.l %a0,%d0 - jra .Lcls_epilogue -.Lcls_ret_struct1: - move.b (%a0),%d0 - jra .Lcls_epilogue -.Lcls_ret_struct2: - move.w (%a0),%d0 - jra .Lcls_epilogue - CFI_ENDPROC() - - .size ffi_closure_SYSV,.-ffi_closure_SYSV - - .globl ffi_closure_struct_SYSV - .type ffi_closure_struct_SYSV, @function - .align 4 - -ffi_closure_struct_SYSV: - CFI_STARTPROC() - link %fp,#0 - CFI_OFFSET(14,-8) - CFI_DEF_CFA(14,8) - move.l %sp,-12(%fp) - pea 8(%fp) - move.l %a1,-(%sp) - move.l %a0,-(%sp) -#if !defined __PIC__ - jsr ffi_closure_SYSV_inner -#else - bsr.l ffi_closure_SYSV_inner@PLTPC -#endif - unlk %fp - rts - CFI_ENDPROC() - .size ffi_closure_struct_SYSV,.-ffi_closure_struct_SYSV - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/mips/ffi.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/mips/ffi.c deleted file mode 100644 index 79cff9b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/mips/ffi.c +++ /dev/null @@ -1,1036 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2011 Anthony Green - Copyright (c) 2008 David Daney - Copyright (c) 1996, 2007, 2008, 2011 Red Hat, Inc. - - MIPS Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#include -#include - -#include - -#ifdef __GNUC__ -# if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) -# define USE__BUILTIN___CLEAR_CACHE 1 -# endif -#endif - -#ifndef USE__BUILTIN___CLEAR_CACHE -# if defined(__OpenBSD__) -# include -# else -# include -# endif -#endif - -#ifdef FFI_DEBUG -# define FFI_MIPS_STOP_HERE() ffi_stop_here() -#else -# define FFI_MIPS_STOP_HERE() do {} while(0) -#endif - -#ifdef FFI_MIPS_N32 -#define FIX_ARGP \ -FFI_ASSERT(argp <= &stack[bytes]); \ -if (argp == &stack[bytes]) \ -{ \ - argp = stack; \ - FFI_MIPS_STOP_HERE(); \ -} -#else -#define FIX_ARGP -#endif - - -/* ffi_prep_args is called by the assembly routine once stack space - has been allocated for the function's arguments */ - -static void ffi_prep_args(char *stack, - extended_cif *ecif, - int bytes, - int flags) -{ - int i; - void **p_argv; - char *argp; - ffi_type **p_arg; - -#ifdef FFI_MIPS_N32 - /* If more than 8 double words are used, the remainder go - on the stack. We reorder stuff on the stack here to - support this easily. */ - if (bytes > 8 * sizeof(ffi_arg)) - argp = &stack[bytes - (8 * sizeof(ffi_arg))]; - else - argp = stack; -#else - argp = stack; -#endif - - memset(stack, 0, bytes); - -#ifdef FFI_MIPS_N32 - if ( ecif->cif->rstruct_flag != 0 ) -#else - if ( ecif->cif->rtype->type == FFI_TYPE_STRUCT ) -#endif - { - *(ffi_arg *) argp = (ffi_arg) ecif->rvalue; - argp += sizeof(ffi_arg); - FIX_ARGP; - } - - p_argv = ecif->avalue; - - for (i = 0, p_arg = ecif->cif->arg_types; i < ecif->cif->nargs; i++, p_arg++) - { - size_t z; - unsigned int a; - - /* Align if necessary. */ - a = (*p_arg)->alignment; - if (a < sizeof(ffi_arg)) - a = sizeof(ffi_arg); - - if ((a - 1) & (unsigned long) argp) - { - argp = (char *) ALIGN(argp, a); - FIX_ARGP; - } - - z = (*p_arg)->size; - if (z <= sizeof(ffi_arg)) - { - int type = (*p_arg)->type; - z = sizeof(ffi_arg); - - /* The size of a pointer depends on the ABI */ - if (type == FFI_TYPE_POINTER) - type = (ecif->cif->abi == FFI_N64 - || ecif->cif->abi == FFI_N64_SOFT_FLOAT) - ? FFI_TYPE_SINT64 : FFI_TYPE_SINT32; - - if (i < 8 && (ecif->cif->abi == FFI_N32_SOFT_FLOAT - || ecif->cif->abi == FFI_N64_SOFT_FLOAT)) - { - switch (type) - { - case FFI_TYPE_FLOAT: - type = FFI_TYPE_UINT32; - break; - case FFI_TYPE_DOUBLE: - type = FFI_TYPE_UINT64; - break; - default: - break; - } - } - switch (type) - { - case FFI_TYPE_SINT8: - *(ffi_arg *)argp = *(SINT8 *)(* p_argv); - break; - - case FFI_TYPE_UINT8: - *(ffi_arg *)argp = *(UINT8 *)(* p_argv); - break; - - case FFI_TYPE_SINT16: - *(ffi_arg *)argp = *(SINT16 *)(* p_argv); - break; - - case FFI_TYPE_UINT16: - *(ffi_arg *)argp = *(UINT16 *)(* p_argv); - break; - - case FFI_TYPE_SINT32: - *(ffi_arg *)argp = *(SINT32 *)(* p_argv); - break; - - case FFI_TYPE_UINT32: - *(ffi_arg *)argp = *(UINT32 *)(* p_argv); - break; - - /* This can only happen with 64bit slots. */ - case FFI_TYPE_FLOAT: - *(float *) argp = *(float *)(* p_argv); - break; - - /* Handle structures. */ - default: - memcpy(argp, *p_argv, (*p_arg)->size); - break; - } - } - else - { -#ifdef FFI_MIPS_O32 - memcpy(argp, *p_argv, z); -#else - { - unsigned long end = (unsigned long) argp + z; - unsigned long cap = (unsigned long) stack + bytes; - - /* Check if the data will fit within the register space. - Handle it if it doesn't. */ - - if (end <= cap) - memcpy(argp, *p_argv, z); - else - { - unsigned long portion = cap - (unsigned long)argp; - - memcpy(argp, *p_argv, portion); - argp = stack; - z -= portion; - memcpy(argp, (void*)((unsigned long)(*p_argv) + portion), - z); - } - } -#endif - } - p_argv++; - argp += z; - FIX_ARGP; - } -} - -#ifdef FFI_MIPS_N32 - -/* The n32 spec says that if "a chunk consists solely of a double - float field (but not a double, which is part of a union), it - is passed in a floating point register. Any other chunk is - passed in an integer register". This code traverses structure - definitions and generates the appropriate flags. */ - -static unsigned -calc_n32_struct_flags(int soft_float, ffi_type *arg, - unsigned *loc, unsigned *arg_reg) -{ - unsigned flags = 0; - unsigned index = 0; - - ffi_type *e; - - if (soft_float) - return 0; - - while ((e = arg->elements[index])) - { - /* Align this object. */ - *loc = ALIGN(*loc, e->alignment); - if (e->type == FFI_TYPE_DOUBLE) - { - /* Already aligned to FFI_SIZEOF_ARG. */ - *arg_reg = *loc / FFI_SIZEOF_ARG; - if (*arg_reg > 7) - break; - flags += (FFI_TYPE_DOUBLE << (*arg_reg * FFI_FLAG_BITS)); - *loc += e->size; - } - else - *loc += e->size; - index++; - } - /* Next Argument register at alignment of FFI_SIZEOF_ARG. */ - *arg_reg = ALIGN(*loc, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; - - return flags; -} - -static unsigned -calc_n32_return_struct_flags(int soft_float, ffi_type *arg) -{ - unsigned flags = 0; - unsigned small = FFI_TYPE_SMALLSTRUCT; - ffi_type *e; - - /* Returning structures under n32 is a tricky thing. - A struct with only one or two floating point fields - is returned in $f0 (and $f2 if necessary). Any other - struct results at most 128 bits are returned in $2 - (the first 64 bits) and $3 (remainder, if necessary). - Larger structs are handled normally. */ - - if (arg->size > 16) - return 0; - - if (arg->size > 8) - small = FFI_TYPE_SMALLSTRUCT2; - - e = arg->elements[0]; - - if (e->type == FFI_TYPE_DOUBLE) - flags = FFI_TYPE_DOUBLE; - else if (e->type == FFI_TYPE_FLOAT) - flags = FFI_TYPE_FLOAT; - - if (flags && (e = arg->elements[1])) - { - if (e->type == FFI_TYPE_DOUBLE) - flags += FFI_TYPE_DOUBLE << FFI_FLAG_BITS; - else if (e->type == FFI_TYPE_FLOAT) - flags += FFI_TYPE_FLOAT << FFI_FLAG_BITS; - else - return small; - - if (flags && (arg->elements[2])) - { - /* There are three arguments and the first two are - floats! This must be passed the old way. */ - return small; - } - if (soft_float) - flags += FFI_TYPE_STRUCT_SOFT; - } - else - if (!flags) - return small; - - return flags; -} - -#endif - -/* Perform machine dependent cif processing */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) -{ - cif->flags = 0; - -#ifdef FFI_MIPS_O32 - /* Set the flags necessary for O32 processing. FFI_O32_SOFT_FLOAT - * does not have special handling for floating point args. - */ - - if (cif->rtype->type != FFI_TYPE_STRUCT && cif->abi == FFI_O32) - { - if (cif->nargs > 0) - { - switch ((cif->arg_types)[0]->type) - { - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - cif->flags += (cif->arg_types)[0]->type; - break; - - default: - break; - } - - if (cif->nargs > 1) - { - /* Only handle the second argument if the first - is a float or double. */ - if (cif->flags) - { - switch ((cif->arg_types)[1]->type) - { - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - cif->flags += (cif->arg_types)[1]->type << FFI_FLAG_BITS; - break; - - default: - break; - } - } - } - } - } - - /* Set the return type flag */ - - if (cif->abi == FFI_O32_SOFT_FLOAT) - { - switch (cif->rtype->type) - { - case FFI_TYPE_VOID: - case FFI_TYPE_STRUCT: - cif->flags += cif->rtype->type << (FFI_FLAG_BITS * 2); - break; - - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - case FFI_TYPE_DOUBLE: - cif->flags += FFI_TYPE_UINT64 << (FFI_FLAG_BITS * 2); - break; - - case FFI_TYPE_FLOAT: - default: - cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 2); - break; - } - } - else - { - /* FFI_O32 */ - switch (cif->rtype->type) - { - case FFI_TYPE_VOID: - case FFI_TYPE_STRUCT: - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - cif->flags += cif->rtype->type << (FFI_FLAG_BITS * 2); - break; - - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - cif->flags += FFI_TYPE_UINT64 << (FFI_FLAG_BITS * 2); - break; - - default: - cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 2); - break; - } - } -#endif - -#ifdef FFI_MIPS_N32 - /* Set the flags necessary for N32 processing */ - { - int type; - unsigned arg_reg = 0; - unsigned loc = 0; - unsigned count = (cif->nargs < 8) ? cif->nargs : 8; - unsigned index = 0; - - unsigned struct_flags = 0; - int soft_float = (cif->abi == FFI_N32_SOFT_FLOAT - || cif->abi == FFI_N64_SOFT_FLOAT); - - if (cif->rtype->type == FFI_TYPE_STRUCT) - { - struct_flags = calc_n32_return_struct_flags(soft_float, cif->rtype); - - if (struct_flags == 0) - { - /* This means that the structure is being passed as - a hidden argument */ - - arg_reg = 1; - count = (cif->nargs < 7) ? cif->nargs : 7; - - cif->rstruct_flag = !0; - } - else - cif->rstruct_flag = 0; - } - else - cif->rstruct_flag = 0; - - while (count-- > 0 && arg_reg < 8) - { - type = (cif->arg_types)[index]->type; - if (soft_float) - { - switch (type) - { - case FFI_TYPE_FLOAT: - type = FFI_TYPE_UINT32; - break; - case FFI_TYPE_DOUBLE: - type = FFI_TYPE_UINT64; - break; - default: - break; - } - } - switch (type) - { - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - cif->flags += - ((cif->arg_types)[index]->type << (arg_reg * FFI_FLAG_BITS)); - arg_reg++; - break; - case FFI_TYPE_LONGDOUBLE: - /* Align it. */ - arg_reg = ALIGN(arg_reg, 2); - /* Treat it as two adjacent doubles. */ - if (soft_float) - { - arg_reg += 2; - } - else - { - cif->flags += - (FFI_TYPE_DOUBLE << (arg_reg * FFI_FLAG_BITS)); - arg_reg++; - cif->flags += - (FFI_TYPE_DOUBLE << (arg_reg * FFI_FLAG_BITS)); - arg_reg++; - } - break; - - case FFI_TYPE_STRUCT: - loc = arg_reg * FFI_SIZEOF_ARG; - cif->flags += calc_n32_struct_flags(soft_float, - (cif->arg_types)[index], - &loc, &arg_reg); - break; - - default: - arg_reg++; - break; - } - - index++; - } - - /* Set the return type flag */ - switch (cif->rtype->type) - { - case FFI_TYPE_STRUCT: - { - if (struct_flags == 0) - { - /* The structure is returned through a hidden - first argument. Do nothing, 'cause FFI_TYPE_VOID - is 0 */ - } - else - { - /* The structure is returned via some tricky - mechanism */ - cif->flags += FFI_TYPE_STRUCT << (FFI_FLAG_BITS * 8); - cif->flags += struct_flags << (4 + (FFI_FLAG_BITS * 8)); - } - break; - } - - case FFI_TYPE_VOID: - /* Do nothing, 'cause FFI_TYPE_VOID is 0 */ - break; - - case FFI_TYPE_POINTER: - if (cif->abi == FFI_N32_SOFT_FLOAT || cif->abi == FFI_N32) - cif->flags += FFI_TYPE_SINT32 << (FFI_FLAG_BITS * 8); - else - cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 8); - break; - - case FFI_TYPE_FLOAT: - if (soft_float) - { - cif->flags += FFI_TYPE_SINT32 << (FFI_FLAG_BITS * 8); - break; - } - /* else fall through */ - case FFI_TYPE_DOUBLE: - if (soft_float) - cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 8); - else - cif->flags += cif->rtype->type << (FFI_FLAG_BITS * 8); - break; - - case FFI_TYPE_LONGDOUBLE: - /* Long double is returned as if it were a struct containing - two doubles. */ - if (soft_float) - { - cif->flags += FFI_TYPE_STRUCT << (FFI_FLAG_BITS * 8); - cif->flags += FFI_TYPE_SMALLSTRUCT2 << (4 + (FFI_FLAG_BITS * 8)); - } - else - { - cif->flags += FFI_TYPE_STRUCT << (FFI_FLAG_BITS * 8); - cif->flags += (FFI_TYPE_DOUBLE - + (FFI_TYPE_DOUBLE << FFI_FLAG_BITS)) - << (4 + (FFI_FLAG_BITS * 8)); - } - break; - default: - cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 8); - break; - } - } -#endif - - return FFI_OK; -} - -/* Low level routine for calling O32 functions */ -extern int ffi_call_O32(void (*)(char *, extended_cif *, int, int), - extended_cif *, unsigned, - unsigned, unsigned *, void (*)(void)); - -/* Low level routine for calling N32 functions */ -extern int ffi_call_N32(void (*)(char *, extended_cif *, int, int), - extended_cif *, unsigned, - unsigned, void *, void (*)(void)); - -void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return */ - /* value address then we need to make one */ - - if ((rvalue == NULL) && - (cif->rtype->type == FFI_TYPE_STRUCT)) - ecif.rvalue = alloca(cif->rtype->size); - else - ecif.rvalue = rvalue; - - switch (cif->abi) - { -#ifdef FFI_MIPS_O32 - case FFI_O32: - case FFI_O32_SOFT_FLOAT: - ffi_call_O32(ffi_prep_args, &ecif, cif->bytes, - cif->flags, ecif.rvalue, fn); - break; -#endif - -#ifdef FFI_MIPS_N32 - case FFI_N32: - case FFI_N32_SOFT_FLOAT: - case FFI_N64: - case FFI_N64_SOFT_FLOAT: - { - int copy_rvalue = 0; - int copy_offset = 0; - char *rvalue_copy = ecif.rvalue; - if (cif->rtype->type == FFI_TYPE_STRUCT && cif->rtype->size < 16) - { - /* For structures smaller than 16 bytes we clobber memory - in 8 byte increments. Make a copy so we don't clobber - the callers memory outside of the struct bounds. */ - rvalue_copy = alloca(16); - copy_rvalue = 1; - } - else if (cif->rtype->type == FFI_TYPE_FLOAT - && (cif->abi == FFI_N64_SOFT_FLOAT - || cif->abi == FFI_N32_SOFT_FLOAT)) - { - rvalue_copy = alloca (8); - copy_rvalue = 1; -#if defined(__MIPSEB__) || defined(_MIPSEB) - copy_offset = 4; -#endif - } - ffi_call_N32(ffi_prep_args, &ecif, cif->bytes, - cif->flags, rvalue_copy, fn); - if (copy_rvalue) - memcpy(ecif.rvalue, rvalue_copy + copy_offset, cif->rtype->size); - } - break; -#endif - - default: - FFI_ASSERT(0); - break; - } -} - -#if FFI_CLOSURES -#if defined(FFI_MIPS_O32) -extern void ffi_closure_O32(void); -#else -extern void ffi_closure_N32(void); -#endif /* FFI_MIPS_O32 */ - -ffi_status -ffi_prep_closure_loc (ffi_closure *closure, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data, - void *codeloc) -{ - unsigned int *tramp = (unsigned int *) &closure->tramp[0]; - void * fn; - char *clear_location = (char *) codeloc; - -#if defined(FFI_MIPS_O32) - if (cif->abi != FFI_O32 && cif->abi != FFI_O32_SOFT_FLOAT) - return FFI_BAD_ABI; - fn = ffi_closure_O32; -#else /* FFI_MIPS_N32 */ - if (cif->abi != FFI_N32 && cif->abi != FFI_N64) - return FFI_BAD_ABI; - fn = ffi_closure_N32; -#endif /* FFI_MIPS_O32 */ - -#if defined(FFI_MIPS_O32) || (_MIPS_SIM ==_ABIN32) - /* lui $25,high(fn) */ - tramp[0] = 0x3c190000 | ((unsigned)fn >> 16); - /* ori $25,low(fn) */ - tramp[1] = 0x37390000 | ((unsigned)fn & 0xffff); - /* lui $12,high(codeloc) */ - tramp[2] = 0x3c0c0000 | ((unsigned)codeloc >> 16); - /* jr $25 */ - tramp[3] = 0x03200008; - /* ori $12,low(codeloc) */ - tramp[4] = 0x358c0000 | ((unsigned)codeloc & 0xffff); -#else - /* N64 has a somewhat larger trampoline. */ - /* lui $25,high(fn) */ - tramp[0] = 0x3c190000 | ((unsigned long)fn >> 48); - /* lui $12,high(codeloc) */ - tramp[1] = 0x3c0c0000 | ((unsigned long)codeloc >> 48); - /* ori $25,mid-high(fn) */ - tramp[2] = 0x37390000 | (((unsigned long)fn >> 32 ) & 0xffff); - /* ori $12,mid-high(codeloc) */ - tramp[3] = 0x358c0000 | (((unsigned long)codeloc >> 32) & 0xffff); - /* dsll $25,$25,16 */ - tramp[4] = 0x0019cc38; - /* dsll $12,$12,16 */ - tramp[5] = 0x000c6438; - /* ori $25,mid-low(fn) */ - tramp[6] = 0x37390000 | (((unsigned long)fn >> 16 ) & 0xffff); - /* ori $12,mid-low(codeloc) */ - tramp[7] = 0x358c0000 | (((unsigned long)codeloc >> 16) & 0xffff); - /* dsll $25,$25,16 */ - tramp[8] = 0x0019cc38; - /* dsll $12,$12,16 */ - tramp[9] = 0x000c6438; - /* ori $25,low(fn) */ - tramp[10] = 0x37390000 | ((unsigned long)fn & 0xffff); - /* jr $25 */ - tramp[11] = 0x03200008; - /* ori $12,low(codeloc) */ - tramp[12] = 0x358c0000 | ((unsigned long)codeloc & 0xffff); - -#endif - - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - -#ifdef USE__BUILTIN___CLEAR_CACHE - __builtin___clear_cache(clear_location, clear_location + FFI_TRAMPOLINE_SIZE); -#else - cacheflush (clear_location, FFI_TRAMPOLINE_SIZE, ICACHE); -#endif - return FFI_OK; -} - -/* - * Decodes the arguments to a function, which will be stored on the - * stack. AR is the pointer to the beginning of the integer arguments - * (and, depending upon the arguments, some floating-point arguments - * as well). FPR is a pointer to the area where floating point - * registers have been saved, if any. - * - * RVALUE is the location where the function return value will be - * stored. CLOSURE is the prepared closure to invoke. - * - * This function should only be called from assembly, which is in - * turn called from a trampoline. - * - * Returns the function return type. - * - * Based on the similar routine for sparc. - */ -int -ffi_closure_mips_inner_O32 (ffi_closure *closure, - void *rvalue, ffi_arg *ar, - double *fpr) -{ - ffi_cif *cif; - void **avaluep; - ffi_arg *avalue; - ffi_type **arg_types; - int i, avn, argn, seen_int; - - cif = closure->cif; - avalue = alloca (cif->nargs * sizeof (ffi_arg)); - avaluep = alloca (cif->nargs * sizeof (ffi_arg)); - - seen_int = (cif->abi == FFI_O32_SOFT_FLOAT); - argn = 0; - - if ((cif->flags >> (FFI_FLAG_BITS * 2)) == FFI_TYPE_STRUCT) - { - rvalue = (void *)(UINT32)ar[0]; - argn = 1; - } - - i = 0; - avn = cif->nargs; - arg_types = cif->arg_types; - - while (i < avn) - { - if (i < 2 && !seen_int && - (arg_types[i]->type == FFI_TYPE_FLOAT || - arg_types[i]->type == FFI_TYPE_DOUBLE || - arg_types[i]->type == FFI_TYPE_LONGDOUBLE)) - { -#if defined(__MIPSEB__) || defined(_MIPSEB) - if (arg_types[i]->type == FFI_TYPE_FLOAT) - avaluep[i] = ((char *) &fpr[i]) + sizeof (float); - else -#endif - avaluep[i] = (char *) &fpr[i]; - } - else - { - if (arg_types[i]->alignment == 8 && (argn & 0x1)) - argn++; - switch (arg_types[i]->type) - { - case FFI_TYPE_SINT8: - avaluep[i] = &avalue[i]; - *(SINT8 *) &avalue[i] = (SINT8) ar[argn]; - break; - - case FFI_TYPE_UINT8: - avaluep[i] = &avalue[i]; - *(UINT8 *) &avalue[i] = (UINT8) ar[argn]; - break; - - case FFI_TYPE_SINT16: - avaluep[i] = &avalue[i]; - *(SINT16 *) &avalue[i] = (SINT16) ar[argn]; - break; - - case FFI_TYPE_UINT16: - avaluep[i] = &avalue[i]; - *(UINT16 *) &avalue[i] = (UINT16) ar[argn]; - break; - - default: - avaluep[i] = (char *) &ar[argn]; - break; - } - seen_int = 1; - } - argn += ALIGN(arg_types[i]->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; - i++; - } - - /* Invoke the closure. */ - (closure->fun) (cif, rvalue, avaluep, closure->user_data); - - if (cif->abi == FFI_O32_SOFT_FLOAT) - { - switch (cif->rtype->type) - { - case FFI_TYPE_FLOAT: - return FFI_TYPE_INT; - case FFI_TYPE_DOUBLE: - return FFI_TYPE_UINT64; - default: - return cif->rtype->type; - } - } - else - { - return cif->rtype->type; - } -} - -#if defined(FFI_MIPS_N32) - -static void -copy_struct_N32(char *target, unsigned offset, ffi_abi abi, ffi_type *type, - int argn, unsigned arg_offset, ffi_arg *ar, - ffi_arg *fpr, int soft_float) -{ - ffi_type **elt_typep = type->elements; - while(*elt_typep) - { - ffi_type *elt_type = *elt_typep; - unsigned o; - char *tp; - char *argp; - char *fpp; - - o = ALIGN(offset, elt_type->alignment); - arg_offset += o - offset; - offset = o; - argn += arg_offset / sizeof(ffi_arg); - arg_offset = arg_offset % sizeof(ffi_arg); - - argp = (char *)(ar + argn); - fpp = (char *)(argn >= 8 ? ar + argn : fpr + argn); - - tp = target + offset; - - if (elt_type->type == FFI_TYPE_DOUBLE && !soft_float) - *(double *)tp = *(double *)fpp; - else - memcpy(tp, argp + arg_offset, elt_type->size); - - offset += elt_type->size; - arg_offset += elt_type->size; - elt_typep++; - argn += arg_offset / sizeof(ffi_arg); - arg_offset = arg_offset % sizeof(ffi_arg); - } -} - -/* - * Decodes the arguments to a function, which will be stored on the - * stack. AR is the pointer to the beginning of the integer - * arguments. FPR is a pointer to the area where floating point - * registers have been saved. - * - * RVALUE is the location where the function return value will be - * stored. CLOSURE is the prepared closure to invoke. - * - * This function should only be called from assembly, which is in - * turn called from a trampoline. - * - * Returns the function return flags. - * - */ -int -ffi_closure_mips_inner_N32 (ffi_closure *closure, - void *rvalue, ffi_arg *ar, - ffi_arg *fpr) -{ - ffi_cif *cif; - void **avaluep; - ffi_arg *avalue; - ffi_type **arg_types; - int i, avn, argn; - int soft_float; - ffi_arg *argp; - - cif = closure->cif; - soft_float = cif->abi == FFI_N64_SOFT_FLOAT - || cif->abi == FFI_N32_SOFT_FLOAT; - avalue = alloca (cif->nargs * sizeof (ffi_arg)); - avaluep = alloca (cif->nargs * sizeof (ffi_arg)); - - argn = 0; - - if (cif->rstruct_flag) - { -#if _MIPS_SIM==_ABIN32 - rvalue = (void *)(UINT32)ar[0]; -#else /* N64 */ - rvalue = (void *)ar[0]; -#endif - argn = 1; - } - - i = 0; - avn = cif->nargs; - arg_types = cif->arg_types; - - while (i < avn) - { - if (arg_types[i]->type == FFI_TYPE_FLOAT - || arg_types[i]->type == FFI_TYPE_DOUBLE - || arg_types[i]->type == FFI_TYPE_LONGDOUBLE) - { - argp = (argn >= 8 || soft_float) ? ar + argn : fpr + argn; - if ((arg_types[i]->type == FFI_TYPE_LONGDOUBLE) && ((unsigned)argp & (arg_types[i]->alignment-1))) - { - argp=(ffi_arg*)ALIGN(argp,arg_types[i]->alignment); - argn++; - } -#if defined(__MIPSEB__) || defined(_MIPSEB) - if (arg_types[i]->type == FFI_TYPE_FLOAT && argn < 8) - avaluep[i] = ((char *) argp) + sizeof (float); - else -#endif - avaluep[i] = (char *) argp; - } - else - { - unsigned type = arg_types[i]->type; - - if (arg_types[i]->alignment > sizeof(ffi_arg)) - argn = ALIGN(argn, arg_types[i]->alignment / sizeof(ffi_arg)); - - argp = ar + argn; - - /* The size of a pointer depends on the ABI */ - if (type == FFI_TYPE_POINTER) - type = (cif->abi == FFI_N64 || cif->abi == FFI_N64_SOFT_FLOAT) - ? FFI_TYPE_SINT64 : FFI_TYPE_SINT32; - - if (soft_float && type == FFI_TYPE_FLOAT) - type = FFI_TYPE_UINT32; - - switch (type) - { - case FFI_TYPE_SINT8: - avaluep[i] = &avalue[i]; - *(SINT8 *) &avalue[i] = (SINT8) *argp; - break; - - case FFI_TYPE_UINT8: - avaluep[i] = &avalue[i]; - *(UINT8 *) &avalue[i] = (UINT8) *argp; - break; - - case FFI_TYPE_SINT16: - avaluep[i] = &avalue[i]; - *(SINT16 *) &avalue[i] = (SINT16) *argp; - break; - - case FFI_TYPE_UINT16: - avaluep[i] = &avalue[i]; - *(UINT16 *) &avalue[i] = (UINT16) *argp; - break; - - case FFI_TYPE_SINT32: - avaluep[i] = &avalue[i]; - *(SINT32 *) &avalue[i] = (SINT32) *argp; - break; - - case FFI_TYPE_UINT32: - avaluep[i] = &avalue[i]; - *(UINT32 *) &avalue[i] = (UINT32) *argp; - break; - - case FFI_TYPE_STRUCT: - if (argn < 8) - { - /* Allocate space for the struct as at least part of - it was passed in registers. */ - avaluep[i] = alloca(arg_types[i]->size); - copy_struct_N32(avaluep[i], 0, cif->abi, arg_types[i], - argn, 0, ar, fpr, soft_float); - - break; - } - /* Else fall through. */ - default: - avaluep[i] = (char *) argp; - break; - } - } - argn += ALIGN(arg_types[i]->size, sizeof(ffi_arg)) / sizeof(ffi_arg); - i++; - } - - /* Invoke the closure. */ - (closure->fun) (cif, rvalue, avaluep, closure->user_data); - - return cif->flags >> (FFI_FLAG_BITS * 8); -} - -#endif /* FFI_MIPS_N32 */ - -#endif /* FFI_CLOSURES */ diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/mips/ffitarget.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/mips/ffitarget.h deleted file mode 100644 index 637adbf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/mips/ffitarget.h +++ /dev/null @@ -1,242 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. - Target configuration macros for MIPS. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#ifdef linux -# include -#elif defined(__rtems__) -/* - * Subprogram calling convention - copied from sgidefs.h - */ -#define _MIPS_SIM_ABI32 1 -#define _MIPS_SIM_NABI32 2 -#define _MIPS_SIM_ABI64 3 -#elif !defined(__OpenBSD__) -# include -#endif - -# ifndef _ABIN32 -# define _ABIN32 _MIPS_SIM_NABI32 -# endif -# ifndef _ABI64 -# define _ABI64 _MIPS_SIM_ABI64 -# endif -# ifndef _ABIO32 -# define _ABIO32 _MIPS_SIM_ABI32 -# endif - -#if !defined(_MIPS_SIM) -# error -- something is very wrong -- -#else -# if (_MIPS_SIM==_ABIN32 && defined(_ABIN32)) || (_MIPS_SIM==_ABI64 && defined(_ABI64)) -# define FFI_MIPS_N32 -# else -# if (_MIPS_SIM==_ABIO32 && defined(_ABIO32)) -# define FFI_MIPS_O32 -# else -# error -- this is an unsupported platform -- -# endif -# endif -#endif - -#ifdef FFI_MIPS_O32 -/* O32 stack frames have 32bit integer args */ -# define FFI_SIZEOF_ARG 4 -#else -/* N32 and N64 frames have 64bit integer args */ -# define FFI_SIZEOF_ARG 8 -# if _MIPS_SIM == _ABIN32 -# define FFI_SIZEOF_JAVA_RAW 4 -# endif -#endif - -#define FFI_FLAG_BITS 2 - -/* SGI's strange assembler requires that we multiply by 4 rather - than shift left by FFI_FLAG_BITS */ - -#define FFI_ARGS_D FFI_TYPE_DOUBLE -#define FFI_ARGS_F FFI_TYPE_FLOAT -#define FFI_ARGS_DD FFI_TYPE_DOUBLE * 4 + FFI_TYPE_DOUBLE -#define FFI_ARGS_FF FFI_TYPE_FLOAT * 4 + FFI_TYPE_FLOAT -#define FFI_ARGS_FD FFI_TYPE_DOUBLE * 4 + FFI_TYPE_FLOAT -#define FFI_ARGS_DF FFI_TYPE_FLOAT * 4 + FFI_TYPE_DOUBLE - -/* Needed for N32 structure returns */ -#define FFI_TYPE_SMALLSTRUCT FFI_TYPE_UINT8 -#define FFI_TYPE_SMALLSTRUCT2 FFI_TYPE_SINT8 - -#if 0 -/* The SGI assembler can't handle this.. */ -#define FFI_TYPE_STRUCT_DD (( FFI_ARGS_DD ) << 4) + FFI_TYPE_STRUCT -/* (and so on) */ -#else -/* ...so we calculate these by hand! */ -#define FFI_TYPE_STRUCT_D 61 -#define FFI_TYPE_STRUCT_F 45 -#define FFI_TYPE_STRUCT_DD 253 -#define FFI_TYPE_STRUCT_FF 173 -#define FFI_TYPE_STRUCT_FD 237 -#define FFI_TYPE_STRUCT_DF 189 -#define FFI_TYPE_STRUCT_SMALL 93 -#define FFI_TYPE_STRUCT_SMALL2 109 - -/* and for n32 soft float, add 16 * 2^4 */ -#define FFI_TYPE_STRUCT_D_SOFT 317 -#define FFI_TYPE_STRUCT_F_SOFT 301 -#define FFI_TYPE_STRUCT_DD_SOFT 509 -#define FFI_TYPE_STRUCT_FF_SOFT 429 -#define FFI_TYPE_STRUCT_FD_SOFT 493 -#define FFI_TYPE_STRUCT_DF_SOFT 445 -#define FFI_TYPE_STRUCT_SOFT 16 -#endif - -#ifdef LIBFFI_ASM -#define v0 $2 -#define v1 $3 -#define a0 $4 -#define a1 $5 -#define a2 $6 -#define a3 $7 -#define a4 $8 -#define a5 $9 -#define a6 $10 -#define a7 $11 -#define t0 $8 -#define t1 $9 -#define t2 $10 -#define t3 $11 -#define t4 $12 -#define t5 $13 -#define t6 $14 -#define t7 $15 -#define t8 $24 -#define t9 $25 -#define ra $31 - -#ifdef FFI_MIPS_O32 -# define REG_L lw -# define REG_S sw -# define SUBU subu -# define ADDU addu -# define SRL srl -# define LI li -#else /* !FFI_MIPS_O32 */ -# define REG_L ld -# define REG_S sd -# define SUBU dsubu -# define ADDU daddu -# define SRL dsrl -# define LI dli -# if (_MIPS_SIM==_ABI64) -# define LA dla -# define EH_FRAME_ALIGN 3 -# define FDE_ADDR_BYTES .8byte -# else -# define LA la -# define EH_FRAME_ALIGN 2 -# define FDE_ADDR_BYTES .4byte -# endif /* _MIPS_SIM==_ABI64 */ -#endif /* !FFI_MIPS_O32 */ -#else /* !LIBFFI_ASM */ -# ifdef __GNUC__ -# ifdef FFI_MIPS_O32 -/* O32 stack frames have 32bit integer args */ -typedef unsigned int ffi_arg __attribute__((__mode__(__SI__))); -typedef signed int ffi_sarg __attribute__((__mode__(__SI__))); -#else -/* N32 and N64 frames have 64bit integer args */ -typedef unsigned int ffi_arg __attribute__((__mode__(__DI__))); -typedef signed int ffi_sarg __attribute__((__mode__(__DI__))); -# endif -# else -# ifdef FFI_MIPS_O32 -/* O32 stack frames have 32bit integer args */ -typedef __uint32_t ffi_arg; -typedef __int32_t ffi_sarg; -# else -/* N32 and N64 frames have 64bit integer args */ -typedef __uint64_t ffi_arg; -typedef __int64_t ffi_sarg; -# endif -# endif /* __GNUC__ */ - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_O32, - FFI_N32, - FFI_N64, - FFI_O32_SOFT_FLOAT, - FFI_N32_SOFT_FLOAT, - FFI_N64_SOFT_FLOAT, - FFI_LAST_ABI, - -#ifdef FFI_MIPS_O32 -#ifdef __mips_soft_float - FFI_DEFAULT_ABI = FFI_O32_SOFT_FLOAT -#else - FFI_DEFAULT_ABI = FFI_O32 -#endif -#else -# if _MIPS_SIM==_ABI64 -# ifdef __mips_soft_float - FFI_DEFAULT_ABI = FFI_N64_SOFT_FLOAT -# else - FFI_DEFAULT_ABI = FFI_N64 -# endif -# else -# ifdef __mips_soft_float - FFI_DEFAULT_ABI = FFI_N32_SOFT_FLOAT -# else - FFI_DEFAULT_ABI = FFI_N32 -# endif -# endif -#endif -} ffi_abi; - -#define FFI_EXTRA_CIF_FIELDS unsigned rstruct_flag -#endif /* !LIBFFI_ASM */ - -/* ---- Definitions for closures ----------------------------------------- */ - -#if defined(FFI_MIPS_O32) -#define FFI_CLOSURES 1 -#define FFI_TRAMPOLINE_SIZE 20 -#else -/* N32/N64. */ -# define FFI_CLOSURES 1 -#if _MIPS_SIM==_ABI64 -#define FFI_TRAMPOLINE_SIZE 52 -#else -#define FFI_TRAMPOLINE_SIZE 20 -#endif -#endif /* FFI_MIPS_O32 */ -#define FFI_NATIVE_RAW_API 0 - -#endif - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/mips/n32.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/mips/n32.S deleted file mode 100644 index ae23094..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/mips/n32.S +++ /dev/null @@ -1,591 +0,0 @@ -/* ----------------------------------------------------------------------- - n32.S - Copyright (c) 1996, 1998, 2005, 2007, 2009, 2010 Red Hat, Inc. - - MIPS Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - -/* Only build this code if we are compiling for n32 */ - -#if defined(FFI_MIPS_N32) - -#define callback a0 -#define bytes a2 -#define flags a3 -#define raddr a4 -#define fn a5 - -#define SIZEOF_FRAME ( 8 * FFI_SIZEOF_ARG ) - -#ifdef __GNUC__ - .abicalls -#endif - .text - .align 2 - .globl ffi_call_N32 - .ent ffi_call_N32 -ffi_call_N32: -.LFB3: - .frame $fp, SIZEOF_FRAME, ra - .mask 0xc0000000,-FFI_SIZEOF_ARG - .fmask 0x00000000,0 - - # Prologue - SUBU $sp, SIZEOF_FRAME # Frame size -.LCFI0: - REG_S $fp, SIZEOF_FRAME - 2*FFI_SIZEOF_ARG($sp) # Save frame pointer - REG_S ra, SIZEOF_FRAME - 1*FFI_SIZEOF_ARG($sp) # Save return address -.LCFI1: - move $fp, $sp -.LCFI3: - move t9, callback # callback function pointer - REG_S bytes, 2*FFI_SIZEOF_ARG($fp) # bytes - REG_S flags, 3*FFI_SIZEOF_ARG($fp) # flags - REG_S raddr, 4*FFI_SIZEOF_ARG($fp) # raddr - REG_S fn, 5*FFI_SIZEOF_ARG($fp) # fn - - # Allocate at least 4 words in the argstack - move v0, bytes - bge bytes, 4 * FFI_SIZEOF_ARG, bigger - LI v0, 4 * FFI_SIZEOF_ARG - b sixteen - - bigger: - ADDU t4, v0, 2 * FFI_SIZEOF_ARG -1 # make sure it is aligned - and v0, t4, -2 * FFI_SIZEOF_ARG # to a proper boundry. - -sixteen: - SUBU $sp, $sp, v0 # move the stack pointer to reflect the - # arg space - - move a0, $sp # 4 * FFI_SIZEOF_ARG - ADDU a3, $fp, 3 * FFI_SIZEOF_ARG - - # Call ffi_prep_args - jal t9 - - # Copy the stack pointer to t9 - move t9, $sp - - # Fix the stack if there are more than 8 64bit slots worth - # of arguments. - - # Load the number of bytes - REG_L t6, 2*FFI_SIZEOF_ARG($fp) - - # Is it bigger than 8 * FFI_SIZEOF_ARG? - daddiu t8, t6, -(8 * FFI_SIZEOF_ARG) - bltz t8, loadregs - - ADDU t9, t9, t8 - -loadregs: - - REG_L t6, 3*FFI_SIZEOF_ARG($fp) # load the flags word into t6. - - and t4, t6, ((1< -#include - -/* Only build this code if we are compiling for o32 */ - -#if defined(FFI_MIPS_O32) - -#define callback a0 -#define bytes a2 -#define flags a3 - -#define SIZEOF_FRAME (4 * FFI_SIZEOF_ARG + 2 * FFI_SIZEOF_ARG) -#define A3_OFF (SIZEOF_FRAME + 3 * FFI_SIZEOF_ARG) -#define FP_OFF (SIZEOF_FRAME - 2 * FFI_SIZEOF_ARG) -#define RA_OFF (SIZEOF_FRAME - 1 * FFI_SIZEOF_ARG) - - .abicalls - .text - .align 2 - .globl ffi_call_O32 - .ent ffi_call_O32 -ffi_call_O32: -$LFB0: - # Prologue - SUBU $sp, SIZEOF_FRAME # Frame size -$LCFI0: - REG_S $fp, FP_OFF($sp) # Save frame pointer -$LCFI1: - REG_S ra, RA_OFF($sp) # Save return address -$LCFI2: - move $fp, $sp - -$LCFI3: - move t9, callback # callback function pointer - REG_S flags, A3_OFF($fp) # flags - - # Allocate at least 4 words in the argstack - LI v0, 4 * FFI_SIZEOF_ARG - blt bytes, v0, sixteen - - ADDU v0, bytes, 7 # make sure it is aligned - and v0, -8 # to an 8 byte boundry - -sixteen: - SUBU $sp, v0 # move the stack pointer to reflect the - # arg space - - ADDU a0, $sp, 4 * FFI_SIZEOF_ARG - - jalr t9 - - REG_L t0, A3_OFF($fp) # load the flags word - SRL t2, t0, 4 # shift our arg info - and t0, ((1<<4)-1) # mask out the return type - - ADDU $sp, 4 * FFI_SIZEOF_ARG # adjust $sp to new args - - bnez t0, pass_d # make it quick for int - REG_L a0, 0*FFI_SIZEOF_ARG($sp) # just go ahead and load the - REG_L a1, 1*FFI_SIZEOF_ARG($sp) # four regs. - REG_L a2, 2*FFI_SIZEOF_ARG($sp) - REG_L a3, 3*FFI_SIZEOF_ARG($sp) - b call_it - -pass_d: - bne t0, FFI_ARGS_D, pass_f - l.d $f12, 0*FFI_SIZEOF_ARG($sp) # load $fp regs from args - REG_L a2, 2*FFI_SIZEOF_ARG($sp) # passing a double - REG_L a3, 3*FFI_SIZEOF_ARG($sp) - b call_it - -pass_f: - bne t0, FFI_ARGS_F, pass_d_d - l.s $f12, 0*FFI_SIZEOF_ARG($sp) # load $fp regs from args - REG_L a1, 1*FFI_SIZEOF_ARG($sp) # passing a float - REG_L a2, 2*FFI_SIZEOF_ARG($sp) - REG_L a3, 3*FFI_SIZEOF_ARG($sp) - b call_it - -pass_d_d: - bne t0, FFI_ARGS_DD, pass_f_f - l.d $f12, 0*FFI_SIZEOF_ARG($sp) # load $fp regs from args - l.d $f14, 2*FFI_SIZEOF_ARG($sp) # passing two doubles - b call_it - -pass_f_f: - bne t0, FFI_ARGS_FF, pass_d_f - l.s $f12, 0*FFI_SIZEOF_ARG($sp) # load $fp regs from args - l.s $f14, 1*FFI_SIZEOF_ARG($sp) # passing two floats - REG_L a2, 2*FFI_SIZEOF_ARG($sp) - REG_L a3, 3*FFI_SIZEOF_ARG($sp) - b call_it - -pass_d_f: - bne t0, FFI_ARGS_DF, pass_f_d - l.d $f12, 0*FFI_SIZEOF_ARG($sp) # load $fp regs from args - l.s $f14, 2*FFI_SIZEOF_ARG($sp) # passing double and float - REG_L a3, 3*FFI_SIZEOF_ARG($sp) - b call_it - -pass_f_d: - # assume that the only other combination must be float then double - # bne t0, FFI_ARGS_F_D, call_it - l.s $f12, 0*FFI_SIZEOF_ARG($sp) # load $fp regs from args - l.d $f14, 2*FFI_SIZEOF_ARG($sp) # passing double and float - -call_it: - # Load the function pointer - REG_L t9, SIZEOF_FRAME + 5*FFI_SIZEOF_ARG($fp) - - # If the return value pointer is NULL, assume no return value. - REG_L t1, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp) - beqz t1, noretval - - bne t2, FFI_TYPE_INT, retlonglong - jalr t9 - REG_L t0, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp) - REG_S v0, 0(t0) - b epilogue - -retlonglong: - # Really any 64-bit int, signed or not. - bne t2, FFI_TYPE_UINT64, retfloat - jalr t9 - REG_L t0, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp) - REG_S v1, 4(t0) - REG_S v0, 0(t0) - b epilogue - -retfloat: - bne t2, FFI_TYPE_FLOAT, retdouble - jalr t9 - REG_L t0, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp) - s.s $f0, 0(t0) - b epilogue - -retdouble: - bne t2, FFI_TYPE_DOUBLE, noretval - jalr t9 - REG_L t0, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp) - s.d $f0, 0(t0) - b epilogue - -noretval: - jalr t9 - - # Epilogue -epilogue: - move $sp, $fp - REG_L $fp, FP_OFF($sp) # Restore frame pointer - REG_L ra, RA_OFF($sp) # Restore return address - ADDU $sp, SIZEOF_FRAME # Fix stack pointer - j ra - -$LFE0: - .end ffi_call_O32 - - -/* ffi_closure_O32. Expects address of the passed-in ffi_closure - in t4 ($12). Stores any arguments passed in registers onto the - stack, then calls ffi_closure_mips_inner_O32, which - then decodes them. - - Stack layout: - - 3 - a3 save - 2 - a2 save - 1 - a1 save - 0 - a0 save, original sp - -1 - ra save - -2 - fp save - -3 - $16 (s0) save - -4 - cprestore - -5 - return value high (v1) - -6 - return value low (v0) - -7 - f14 (le high, be low) - -8 - f14 (le low, be high) - -9 - f12 (le high, be low) - -10 - f12 (le low, be high) - -11 - Called function a3 save - -12 - Called function a2 save - -13 - Called function a1 save - -14 - Called function a0 save, our sp and fp point here - */ - -#define SIZEOF_FRAME2 (14 * FFI_SIZEOF_ARG) -#define A3_OFF2 (SIZEOF_FRAME2 + 3 * FFI_SIZEOF_ARG) -#define A2_OFF2 (SIZEOF_FRAME2 + 2 * FFI_SIZEOF_ARG) -#define A1_OFF2 (SIZEOF_FRAME2 + 1 * FFI_SIZEOF_ARG) -#define A0_OFF2 (SIZEOF_FRAME2 + 0 * FFI_SIZEOF_ARG) -#define RA_OFF2 (SIZEOF_FRAME2 - 1 * FFI_SIZEOF_ARG) -#define FP_OFF2 (SIZEOF_FRAME2 - 2 * FFI_SIZEOF_ARG) -#define S0_OFF2 (SIZEOF_FRAME2 - 3 * FFI_SIZEOF_ARG) -#define GP_OFF2 (SIZEOF_FRAME2 - 4 * FFI_SIZEOF_ARG) -#define V1_OFF2 (SIZEOF_FRAME2 - 5 * FFI_SIZEOF_ARG) -#define V0_OFF2 (SIZEOF_FRAME2 - 6 * FFI_SIZEOF_ARG) -#define FA_1_1_OFF2 (SIZEOF_FRAME2 - 7 * FFI_SIZEOF_ARG) -#define FA_1_0_OFF2 (SIZEOF_FRAME2 - 8 * FFI_SIZEOF_ARG) -#define FA_0_1_OFF2 (SIZEOF_FRAME2 - 9 * FFI_SIZEOF_ARG) -#define FA_0_0_OFF2 (SIZEOF_FRAME2 - 10 * FFI_SIZEOF_ARG) - - .text - .align 2 - .globl ffi_closure_O32 - .ent ffi_closure_O32 -ffi_closure_O32: -$LFB1: - # Prologue - .frame $fp, SIZEOF_FRAME2, ra - .set noreorder - .cpload t9 - .set reorder - SUBU $sp, SIZEOF_FRAME2 - .cprestore GP_OFF2 -$LCFI4: - REG_S $16, S0_OFF2($sp) # Save s0 - REG_S $fp, FP_OFF2($sp) # Save frame pointer - REG_S ra, RA_OFF2($sp) # Save return address -$LCFI6: - move $fp, $sp - -$LCFI7: - # Store all possible argument registers. If there are more than - # four arguments, then they are stored above where we put a3. - REG_S a0, A0_OFF2($fp) - REG_S a1, A1_OFF2($fp) - REG_S a2, A2_OFF2($fp) - REG_S a3, A3_OFF2($fp) - - # Load ABI enum to s0 - REG_L $16, 20($12) # cif pointer follows tramp. - REG_L $16, 0($16) # abi is first member. - - li $13, 1 # FFI_O32 - bne $16, $13, 1f # Skip fp save if FFI_O32_SOFT_FLOAT - - # Store all possible float/double registers. - s.d $f12, FA_0_0_OFF2($fp) - s.d $f14, FA_1_0_OFF2($fp) -1: - # Call ffi_closure_mips_inner_O32 to do the work. - la t9, ffi_closure_mips_inner_O32 - move a0, $12 # Pointer to the ffi_closure - addu a1, $fp, V0_OFF2 - addu a2, $fp, A0_OFF2 - addu a3, $fp, FA_0_0_OFF2 - jalr t9 - - # Load the return value into the appropriate register. - move $8, $2 - li $9, FFI_TYPE_VOID - beq $8, $9, closure_done - - li $13, 1 # FFI_O32 - bne $16, $13, 1f # Skip fp restore if FFI_O32_SOFT_FLOAT - - li $9, FFI_TYPE_FLOAT - l.s $f0, V0_OFF2($fp) - beq $8, $9, closure_done - - li $9, FFI_TYPE_DOUBLE - l.d $f0, V0_OFF2($fp) - beq $8, $9, closure_done -1: - REG_L $3, V1_OFF2($fp) - REG_L $2, V0_OFF2($fp) - -closure_done: - # Epilogue - move $sp, $fp - REG_L $16, S0_OFF2($sp) # Restore s0 - REG_L $fp, FP_OFF2($sp) # Restore frame pointer - REG_L ra, RA_OFF2($sp) # Restore return address - ADDU $sp, SIZEOF_FRAME2 - j ra -$LFE1: - .end ffi_closure_O32 - -/* DWARF-2 unwind info. */ - - .section .eh_frame,"a",@progbits -$Lframe0: - .4byte $LECIE0-$LSCIE0 # Length of Common Information Entry -$LSCIE0: - .4byte 0x0 # CIE Identifier Tag - .byte 0x1 # CIE Version - .ascii "zR\0" # CIE Augmentation - .uleb128 0x1 # CIE Code Alignment Factor - .sleb128 4 # CIE Data Alignment Factor - .byte 0x1f # CIE RA Column - .uleb128 0x1 # Augmentation size - .byte 0x00 # FDE Encoding (absptr) - .byte 0xc # DW_CFA_def_cfa - .uleb128 0x1d - .uleb128 0x0 - .align 2 -$LECIE0: -$LSFDE0: - .4byte $LEFDE0-$LASFDE0 # FDE Length -$LASFDE0: - .4byte $LASFDE0-$Lframe0 # FDE CIE offset - .4byte $LFB0 # FDE initial location - .4byte $LFE0-$LFB0 # FDE address range - .uleb128 0x0 # Augmentation size - .byte 0x4 # DW_CFA_advance_loc4 - .4byte $LCFI0-$LFB0 - .byte 0xe # DW_CFA_def_cfa_offset - .uleb128 0x18 - .byte 0x4 # DW_CFA_advance_loc4 - .4byte $LCFI2-$LCFI0 - .byte 0x11 # DW_CFA_offset_extended_sf - .uleb128 0x1e # $fp - .sleb128 -2 # SIZEOF_FRAME2 - 2*FFI_SIZEOF_ARG($sp) - .byte 0x11 # DW_CFA_offset_extended_sf - .uleb128 0x1f # $ra - .sleb128 -1 # SIZEOF_FRAME2 - 1*FFI_SIZEOF_ARG($sp) - .byte 0x4 # DW_CFA_advance_loc4 - .4byte $LCFI3-$LCFI2 - .byte 0xc # DW_CFA_def_cfa - .uleb128 0x1e - .uleb128 0x18 - .align 2 -$LEFDE0: -$LSFDE1: - .4byte $LEFDE1-$LASFDE1 # FDE Length -$LASFDE1: - .4byte $LASFDE1-$Lframe0 # FDE CIE offset - .4byte $LFB1 # FDE initial location - .4byte $LFE1-$LFB1 # FDE address range - .uleb128 0x0 # Augmentation size - .byte 0x4 # DW_CFA_advance_loc4 - .4byte $LCFI4-$LFB1 - .byte 0xe # DW_CFA_def_cfa_offset - .uleb128 0x38 - .byte 0x4 # DW_CFA_advance_loc4 - .4byte $LCFI6-$LCFI4 - .byte 0x11 # DW_CFA_offset_extended_sf - .uleb128 0x10 # $16 - .sleb128 -3 # SIZEOF_FRAME2 - 3*FFI_SIZEOF_ARG($sp) - .byte 0x11 # DW_CFA_offset_extended_sf - .uleb128 0x1e # $fp - .sleb128 -2 # SIZEOF_FRAME2 - 2*FFI_SIZEOF_ARG($sp) - .byte 0x11 # DW_CFA_offset_extended_sf - .uleb128 0x1f # $ra - .sleb128 -1 # SIZEOF_FRAME2 - 1*FFI_SIZEOF_ARG($sp) - .byte 0x4 # DW_CFA_advance_loc4 - .4byte $LCFI7-$LCFI6 - .byte 0xc # DW_CFA_def_cfa - .uleb128 0x1e - .uleb128 0x38 - .align 2 -$LEFDE1: - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/moxie/eabi.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/moxie/eabi.S deleted file mode 100644 index 379ea4b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/moxie/eabi.S +++ /dev/null @@ -1,128 +0,0 @@ -/* ----------------------------------------------------------------------- - eabi.S - Copyright (c) 2004 Anthony Green - - FR-V Assembly glue. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR - OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - - .globl ffi_prep_args_EABI - - .text - .p2align 4 - .globl ffi_call_EABI - .type ffi_call_EABI, @function - - # gr8 : ffi_prep_args - # gr9 : &ecif - # gr10: cif->bytes - # gr11: fig->flags - # gr12: ecif.rvalue - # gr13: fn - -ffi_call_EABI: - addi sp, #-80, sp - sti fp, @(sp, #24) - addi sp, #24, fp - movsg lr, gr5 - - /* Make room for the new arguments. */ - /* subi sp, fp, gr10 */ - - /* Store return address and incoming args on stack. */ - sti gr5, @(fp, #8) - sti gr8, @(fp, #-4) - sti gr9, @(fp, #-8) - sti gr10, @(fp, #-12) - sti gr11, @(fp, #-16) - sti gr12, @(fp, #-20) - sti gr13, @(fp, #-24) - - sub sp, gr10, sp - - /* Call ffi_prep_args. */ - ldi @(fp, #-4), gr4 - addi sp, #0, gr8 - ldi @(fp, #-8), gr9 -#ifdef __FRV_FDPIC__ - ldd @(gr4, gr0), gr14 - calll @(gr14, gr0) -#else - calll @(gr4, gr0) -#endif - - /* ffi_prep_args returns the new stack pointer. */ - mov gr8, gr4 - - ldi @(sp, #0), gr8 - ldi @(sp, #4), gr9 - ldi @(sp, #8), gr10 - ldi @(sp, #12), gr11 - ldi @(sp, #16), gr12 - ldi @(sp, #20), gr13 - - /* Always copy the return value pointer into the hidden - parameter register. This is only strictly necessary - when we're returning an aggregate type, but it doesn't - hurt to do this all the time, and it saves a branch. */ - ldi @(fp, #-20), gr3 - - /* Use the ffi_prep_args return value for the new sp. */ - mov gr4, sp - - /* Call the target function. */ - ldi @(fp, -24), gr4 -#ifdef __FRV_FDPIC__ - ldd @(gr4, gr0), gr14 - calll @(gr14, gr0) -#else - calll @(gr4, gr0) -#endif - - /* Store the result. */ - ldi @(fp, #-16), gr10 /* fig->flags */ - ldi @(fp, #-20), gr4 /* ecif.rvalue */ - - /* Is the return value stored in two registers? */ - cmpi gr10, #8, icc0 - bne icc0, 0, .L2 - /* Yes, save them. */ - sti gr8, @(gr4, #0) - sti gr9, @(gr4, #4) - bra .L3 -.L2: - /* Is the return value a structure? */ - cmpi gr10, #-1, icc0 - beq icc0, 0, .L3 - /* No, save a 4 byte return value. */ - sti gr8, @(gr4, #0) -.L3: - - /* Restore the stack, and return. */ - ldi @(fp, 8), gr5 - ld @(fp, gr0), fp - addi sp,#80,sp - jmpl @(gr5,gr0) - .size ffi_call_EABI, .-ffi_call_EABI - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/moxie/ffi.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/moxie/ffi.c deleted file mode 100644 index 54cbbb9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/moxie/ffi.c +++ /dev/null @@ -1,276 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (C) 2009 Anthony Green - - Moxie Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#include -#include - -#include - -/* ffi_prep_args is called by the assembly routine once stack space - has been allocated for the function's arguments */ - -void *ffi_prep_args(char *stack, extended_cif *ecif) -{ - register unsigned int i; - register void **p_argv; - register char *argp; - register ffi_type **p_arg; - register int count = 0; - - p_argv = ecif->avalue; - argp = stack; - - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; - (i != 0); - i--, p_arg++) - { - size_t z; - - z = (*p_arg)->size; - - if ((*p_arg)->type == FFI_TYPE_STRUCT) - { - z = sizeof(void*); - *(void **) argp = *p_argv; - } - /* if ((*p_arg)->type == FFI_TYPE_FLOAT) - { - if (count > 24) - { - // This is going on the stack. Turn it into a double. - *(double *) argp = (double) *(float*)(* p_argv); - z = sizeof(double); - } - else - *(void **) argp = *(void **)(* p_argv); - } */ - else if (z < sizeof(int)) - { - z = sizeof(int); - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv); - break; - - case FFI_TYPE_UINT8: - *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv); - break; - - case FFI_TYPE_SINT16: - *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv); - break; - - case FFI_TYPE_UINT16: - *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv); - break; - - default: - FFI_ASSERT(0); - } - } - else if (z == sizeof(int)) - { - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - } - else - { - memcpy(argp, *p_argv, z); - } - p_argv++; - argp += z; - count += z; - } - - return (stack + ((count > 24) ? 24 : ALIGN_DOWN(count, 8))); -} - -/* Perform machine dependent cif processing */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) -{ - if (cif->rtype->type == FFI_TYPE_STRUCT) - cif->flags = -1; - else - cif->flags = cif->rtype->size; - - cif->bytes = ALIGN (cif->bytes, 8); - - return FFI_OK; -} - -extern void ffi_call_EABI(void *(*)(char *, extended_cif *), - extended_cif *, - unsigned, unsigned, - unsigned *, - void (*fn)(void)); - -void ffi_call(ffi_cif *cif, - void (*fn)(void), - void *rvalue, - void **avalue) -{ - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return */ - /* value address then we need to make one */ - - if ((rvalue == NULL) && - (cif->rtype->type == FFI_TYPE_STRUCT)) - { - ecif.rvalue = alloca(cif->rtype->size); - } - else - ecif.rvalue = rvalue; - - - switch (cif->abi) - { - case FFI_EABI: - ffi_call_EABI(ffi_prep_args, &ecif, cif->bytes, - cif->flags, ecif.rvalue, fn); - break; - default: - FFI_ASSERT(0); - break; - } -} - -void ffi_closure_eabi (unsigned arg1, unsigned arg2, unsigned arg3, - unsigned arg4, unsigned arg5, unsigned arg6) -{ - /* This function is called by a trampoline. The trampoline stows a - pointer to the ffi_closure object in gr7. We must save this - pointer in a place that will persist while we do our work. */ - register ffi_closure *creg __asm__ ("gr7"); - ffi_closure *closure = creg; - - /* Arguments that don't fit in registers are found on the stack - at a fixed offset above the current frame pointer. */ - register char *frame_pointer __asm__ ("fp"); - char *stack_args = frame_pointer + 16; - - /* Lay the register arguments down in a continuous chunk of memory. */ - unsigned register_args[6] = - { arg1, arg2, arg3, arg4, arg5, arg6 }; - - ffi_cif *cif = closure->cif; - ffi_type **arg_types = cif->arg_types; - void **avalue = alloca (cif->nargs * sizeof(void *)); - char *ptr = (char *) register_args; - int i; - - /* Find the address of each argument. */ - for (i = 0; i < cif->nargs; i++) - { - switch (arg_types[i]->type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - avalue[i] = ptr + 3; - break; - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - avalue[i] = ptr + 2; - break; - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - case FFI_TYPE_FLOAT: - avalue[i] = ptr; - break; - case FFI_TYPE_STRUCT: - avalue[i] = *(void**)ptr; - break; - default: - /* This is an 8-byte value. */ - avalue[i] = ptr; - ptr += 4; - break; - } - ptr += 4; - - /* If we've handled more arguments than fit in registers, - start looking at the those passed on the stack. */ - if (ptr == ((char *)register_args + (6*4))) - ptr = stack_args; - } - - /* Invoke the closure. */ - if (cif->rtype->type == FFI_TYPE_STRUCT) - { - /* The caller allocates space for the return structure, and - passes a pointer to this space in gr3. Use this value directly - as the return value. */ - register void *return_struct_ptr __asm__("gr3"); - (closure->fun) (cif, return_struct_ptr, avalue, closure->user_data); - } - else - { - /* Allocate space for the return value and call the function. */ - long long rvalue; - (closure->fun) (cif, &rvalue, avalue, closure->user_data); - - /* Functions return 4-byte or smaller results in gr8. 8-byte - values also use gr9. We fill the both, even for small return - values, just to avoid a branch. */ - asm ("ldi @(%0, #0), gr8" : : "r" (&rvalue)); - asm ("ldi @(%0, #0), gr9" : : "r" (&((int *) &rvalue)[1])); - } -} - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*, void*, void**, void*), - void *user_data, - void *codeloc) -{ - unsigned int *tramp = (unsigned int *) &closure->tramp[0]; - unsigned long fn = (long) ffi_closure_eabi; - unsigned long cls = (long) codeloc; - int i; - - fn = (unsigned long) ffi_closure_eabi; - - tramp[0] = 0x8cfc0000 + (fn & 0xffff); /* setlos lo(fn), gr6 */ - tramp[1] = 0x8efc0000 + (cls & 0xffff); /* setlos lo(cls), gr7 */ - tramp[2] = 0x8cf80000 + (fn >> 16); /* sethi hi(fn), gr6 */ - tramp[3] = 0x8ef80000 + (cls >> 16); /* sethi hi(cls), gr7 */ - tramp[4] = 0x80300006; /* jmpl @(gr0, gr6) */ - - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - - /* Cache flushing. */ - for (i = 0; i < FFI_TRAMPOLINE_SIZE; i++) - __asm__ volatile ("dcf @(%0,%1)\n\tici @(%2,%1)" :: "r" (tramp), "r" (i), - "r" (codeloc)); - - return FFI_OK; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/pa/ffi.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/pa/ffi.c deleted file mode 100644 index 4ce2bc6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/pa/ffi.c +++ /dev/null @@ -1,719 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - (c) 2011 Anthony Green - (c) 2008 Red Hat, Inc. - (c) 2006 Free Software Foundation, Inc. - (c) 2003-2004 Randolph Chung - - HPPA Foreign Function Interface - HP-UX PA ABI support - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#include -#include - -#include -#include - -#define ROUND_UP(v, a) (((size_t)(v) + (a) - 1) & ~((a) - 1)) - -#define MIN_STACK_SIZE 64 -#define FIRST_ARG_SLOT 9 -#define DEBUG_LEVEL 0 - -#define fldw(addr, fpreg) \ - __asm__ volatile ("fldw 0(%0), %%" #fpreg "L" : : "r"(addr) : #fpreg) -#define fstw(fpreg, addr) \ - __asm__ volatile ("fstw %%" #fpreg "L, 0(%0)" : : "r"(addr)) -#define fldd(addr, fpreg) \ - __asm__ volatile ("fldd 0(%0), %%" #fpreg : : "r"(addr) : #fpreg) -#define fstd(fpreg, addr) \ - __asm__ volatile ("fstd %%" #fpreg "L, 0(%0)" : : "r"(addr)) - -#define debug(lvl, x...) do { if (lvl <= DEBUG_LEVEL) { printf(x); } } while (0) - -static inline int ffi_struct_type(ffi_type *t) -{ - size_t sz = t->size; - - /* Small structure results are passed in registers, - larger ones are passed by pointer. Note that - small structures of size 2, 4 and 8 differ from - the corresponding integer types in that they have - different alignment requirements. */ - - if (sz <= 1) - return FFI_TYPE_UINT8; - else if (sz == 2) - return FFI_TYPE_SMALL_STRUCT2; - else if (sz == 3) - return FFI_TYPE_SMALL_STRUCT3; - else if (sz == 4) - return FFI_TYPE_SMALL_STRUCT4; - else if (sz == 5) - return FFI_TYPE_SMALL_STRUCT5; - else if (sz == 6) - return FFI_TYPE_SMALL_STRUCT6; - else if (sz == 7) - return FFI_TYPE_SMALL_STRUCT7; - else if (sz <= 8) - return FFI_TYPE_SMALL_STRUCT8; - else - return FFI_TYPE_STRUCT; /* else, we pass it by pointer. */ -} - -/* PA has a downward growing stack, which looks like this: - - Offset - [ Variable args ] - SP = (4*(n+9)) arg word N - ... - SP-52 arg word 4 - [ Fixed args ] - SP-48 arg word 3 - SP-44 arg word 2 - SP-40 arg word 1 - SP-36 arg word 0 - [ Frame marker ] - ... - SP-20 RP - SP-4 previous SP - - The first four argument words on the stack are reserved for use by - the callee. Instead, the general and floating registers replace - the first four argument slots. Non FP arguments are passed solely - in the general registers. FP arguments are passed in both general - and floating registers when using libffi. - - Non-FP 32-bit args are passed in gr26, gr25, gr24 and gr23. - Non-FP 64-bit args are passed in register pairs, starting - on an odd numbered register (i.e. r25+r26 and r23+r24). - FP 32-bit arguments are passed in fr4L, fr5L, fr6L and fr7L. - FP 64-bit arguments are passed in fr5 and fr7. - - The registers are allocated in the same manner as stack slots. - This allows the callee to save its arguments on the stack if - necessary: - - arg word 3 -> gr23 or fr7L - arg word 2 -> gr24 or fr6L or fr7R - arg word 1 -> gr25 or fr5L - arg word 0 -> gr26 or fr4L or fr5R - - Note that fr4R and fr6R are never used for arguments (i.e., - doubles are not passed in fr4 or fr6). - - The rest of the arguments are passed on the stack starting at SP-52, - but 64-bit arguments need to be aligned to an 8-byte boundary - - This means we can have holes either in the register allocation, - or in the stack. */ - -/* ffi_prep_args is called by the assembly routine once stack space - has been allocated for the function's arguments - - The following code will put everything into the stack frame - (which was allocated by the asm routine), and on return - the asm routine will load the arguments that should be - passed by register into the appropriate registers - - NOTE: We load floating point args in this function... that means we - assume gcc will not mess with fp regs in here. */ - -void ffi_prep_args_pa32(UINT32 *stack, extended_cif *ecif, unsigned bytes) -{ - register unsigned int i; - register ffi_type **p_arg; - register void **p_argv; - unsigned int slot = FIRST_ARG_SLOT; - char *dest_cpy; - size_t len; - - debug(1, "%s: stack = %p, ecif = %p, bytes = %u\n", __FUNCTION__, stack, - ecif, bytes); - - p_arg = ecif->cif->arg_types; - p_argv = ecif->avalue; - - for (i = 0; i < ecif->cif->nargs; i++) - { - int type = (*p_arg)->type; - - switch (type) - { - case FFI_TYPE_SINT8: - *(SINT32 *)(stack - slot) = *(SINT8 *)(*p_argv); - break; - - case FFI_TYPE_UINT8: - *(UINT32 *)(stack - slot) = *(UINT8 *)(*p_argv); - break; - - case FFI_TYPE_SINT16: - *(SINT32 *)(stack - slot) = *(SINT16 *)(*p_argv); - break; - - case FFI_TYPE_UINT16: - *(UINT32 *)(stack - slot) = *(UINT16 *)(*p_argv); - break; - - case FFI_TYPE_UINT32: - case FFI_TYPE_SINT32: - case FFI_TYPE_POINTER: - debug(3, "Storing UINT32 %u in slot %u\n", *(UINT32 *)(*p_argv), - slot); - *(UINT32 *)(stack - slot) = *(UINT32 *)(*p_argv); - break; - - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - /* Align slot for 64-bit type. */ - slot += (slot & 1) ? 1 : 2; - *(UINT64 *)(stack - slot) = *(UINT64 *)(*p_argv); - break; - - case FFI_TYPE_FLOAT: - /* First 4 args go in fr4L - fr7L. */ - debug(3, "Storing UINT32(float) in slot %u\n", slot); - *(UINT32 *)(stack - slot) = *(UINT32 *)(*p_argv); - switch (slot - FIRST_ARG_SLOT) - { - /* First 4 args go in fr4L - fr7L. */ - case 0: fldw(stack - slot, fr4); break; - case 1: fldw(stack - slot, fr5); break; - case 2: fldw(stack - slot, fr6); break; - case 3: fldw(stack - slot, fr7); break; - } - break; - - case FFI_TYPE_DOUBLE: - /* Align slot for 64-bit type. */ - slot += (slot & 1) ? 1 : 2; - debug(3, "Storing UINT64(double) at slot %u\n", slot); - *(UINT64 *)(stack - slot) = *(UINT64 *)(*p_argv); - switch (slot - FIRST_ARG_SLOT) - { - /* First 2 args go in fr5, fr7. */ - case 1: fldd(stack - slot, fr5); break; - case 3: fldd(stack - slot, fr7); break; - } - break; - -#ifdef PA_HPUX - case FFI_TYPE_LONGDOUBLE: - /* Long doubles are passed in the same manner as structures - larger than 8 bytes. */ - *(UINT32 *)(stack - slot) = (UINT32)(*p_argv); - break; -#endif - - case FFI_TYPE_STRUCT: - - /* Structs smaller or equal than 4 bytes are passed in one - register. Structs smaller or equal 8 bytes are passed in two - registers. Larger structures are passed by pointer. */ - - len = (*p_arg)->size; - if (len <= 4) - { - dest_cpy = (char *)(stack - slot) + 4 - len; - memcpy(dest_cpy, (char *)*p_argv, len); - } - else if (len <= 8) - { - slot += (slot & 1) ? 1 : 2; - dest_cpy = (char *)(stack - slot) + 8 - len; - memcpy(dest_cpy, (char *)*p_argv, len); - } - else - *(UINT32 *)(stack - slot) = (UINT32)(*p_argv); - break; - - default: - FFI_ASSERT(0); - } - - slot++; - p_arg++; - p_argv++; - } - - /* Make sure we didn't mess up and scribble on the stack. */ - { - unsigned int n; - - debug(5, "Stack setup:\n"); - for (n = 0; n < (bytes + 3) / 4; n++) - { - if ((n%4) == 0) { debug(5, "\n%08x: ", (unsigned int)(stack - n)); } - debug(5, "%08x ", *(stack - n)); - } - debug(5, "\n"); - } - - FFI_ASSERT(slot * 4 <= bytes); - - return; -} - -static void ffi_size_stack_pa32(ffi_cif *cif) -{ - ffi_type **ptr; - int i; - int z = 0; /* # stack slots */ - - for (ptr = cif->arg_types, i = 0; i < cif->nargs; ptr++, i++) - { - int type = (*ptr)->type; - - switch (type) - { - case FFI_TYPE_DOUBLE: - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - z += 2 + (z & 1); /* must start on even regs, so we may waste one */ - break; - -#ifdef PA_HPUX - case FFI_TYPE_LONGDOUBLE: -#endif - case FFI_TYPE_STRUCT: - z += 1; /* pass by ptr, callee will copy */ - break; - - default: /* <= 32-bit values */ - z++; - } - } - - /* We can fit up to 6 args in the default 64-byte stack frame, - if we need more, we need more stack. */ - if (z <= 6) - cif->bytes = MIN_STACK_SIZE; /* min stack size */ - else - cif->bytes = 64 + ROUND_UP((z - 6) * sizeof(UINT32), MIN_STACK_SIZE); - - debug(3, "Calculated stack size is %u bytes\n", cif->bytes); -} - -/* Perform machine dependent cif processing. */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) -{ - /* Set the return type flag */ - switch (cif->rtype->type) - { - case FFI_TYPE_VOID: - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - cif->flags = (unsigned) cif->rtype->type; - break; - -#ifdef PA_HPUX - case FFI_TYPE_LONGDOUBLE: - /* Long doubles are treated like a structure. */ - cif->flags = FFI_TYPE_STRUCT; - break; -#endif - - case FFI_TYPE_STRUCT: - /* For the return type we have to check the size of the structures. - If the size is smaller or equal 4 bytes, the result is given back - in one register. If the size is smaller or equal 8 bytes than we - return the result in two registers. But if the size is bigger than - 8 bytes, we work with pointers. */ - cif->flags = ffi_struct_type(cif->rtype); - break; - - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - cif->flags = FFI_TYPE_UINT64; - break; - - default: - cif->flags = FFI_TYPE_INT; - break; - } - - /* Lucky us, because of the unique PA ABI we get to do our - own stack sizing. */ - switch (cif->abi) - { - case FFI_PA32: - ffi_size_stack_pa32(cif); - break; - - default: - FFI_ASSERT(0); - break; - } - - return FFI_OK; -} - -extern void ffi_call_pa32(void (*)(UINT32 *, extended_cif *, unsigned), - extended_cif *, unsigned, unsigned, unsigned *, - void (*fn)(void)); - -void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return - value address then we need to make one. */ - - if (rvalue == NULL -#ifdef PA_HPUX - && (cif->rtype->type == FFI_TYPE_STRUCT - || cif->rtype->type == FFI_TYPE_LONGDOUBLE)) -#else - && cif->rtype->type == FFI_TYPE_STRUCT) -#endif - { - ecif.rvalue = alloca(cif->rtype->size); - } - else - ecif.rvalue = rvalue; - - - switch (cif->abi) - { - case FFI_PA32: - debug(3, "Calling ffi_call_pa32: ecif=%p, bytes=%u, flags=%u, rvalue=%p, fn=%p\n", &ecif, cif->bytes, cif->flags, ecif.rvalue, (void *)fn); - ffi_call_pa32(ffi_prep_args_pa32, &ecif, cif->bytes, - cif->flags, ecif.rvalue, fn); - break; - - default: - FFI_ASSERT(0); - break; - } -} - -#if FFI_CLOSURES -/* This is more-or-less an inverse of ffi_call -- we have arguments on - the stack, and we need to fill them into a cif structure and invoke - the user function. This really ought to be in asm to make sure - the compiler doesn't do things we don't expect. */ -ffi_status ffi_closure_inner_pa32(ffi_closure *closure, UINT32 *stack) -{ - ffi_cif *cif; - void **avalue; - void *rvalue; - UINT32 ret[2]; /* function can return up to 64-bits in registers */ - ffi_type **p_arg; - char *tmp; - int i, avn; - unsigned int slot = FIRST_ARG_SLOT; - register UINT32 r28 asm("r28"); - - cif = closure->cif; - - /* If returning via structure, callee will write to our pointer. */ - if (cif->flags == FFI_TYPE_STRUCT) - rvalue = (void *)r28; - else - rvalue = &ret[0]; - - avalue = (void **)alloca(cif->nargs * FFI_SIZEOF_ARG); - avn = cif->nargs; - p_arg = cif->arg_types; - - for (i = 0; i < avn; i++) - { - int type = (*p_arg)->type; - - switch (type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - case FFI_TYPE_POINTER: - avalue[i] = (char *)(stack - slot) + sizeof(UINT32) - (*p_arg)->size; - break; - - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - slot += (slot & 1) ? 1 : 2; - avalue[i] = (void *)(stack - slot); - break; - - case FFI_TYPE_FLOAT: -#ifdef PA_LINUX - /* The closure call is indirect. In Linux, floating point - arguments in indirect calls with a prototype are passed - in the floating point registers instead of the general - registers. So, we need to replace what was previously - stored in the current slot with the value in the - corresponding floating point register. */ - switch (slot - FIRST_ARG_SLOT) - { - case 0: fstw(fr4, (void *)(stack - slot)); break; - case 1: fstw(fr5, (void *)(stack - slot)); break; - case 2: fstw(fr6, (void *)(stack - slot)); break; - case 3: fstw(fr7, (void *)(stack - slot)); break; - } -#endif - avalue[i] = (void *)(stack - slot); - break; - - case FFI_TYPE_DOUBLE: - slot += (slot & 1) ? 1 : 2; -#ifdef PA_LINUX - /* See previous comment for FFI_TYPE_FLOAT. */ - switch (slot - FIRST_ARG_SLOT) - { - case 1: fstd(fr5, (void *)(stack - slot)); break; - case 3: fstd(fr7, (void *)(stack - slot)); break; - } -#endif - avalue[i] = (void *)(stack - slot); - break; - -#ifdef PA_HPUX - case FFI_TYPE_LONGDOUBLE: - /* Long doubles are treated like a big structure. */ - avalue[i] = (void *) *(stack - slot); - break; -#endif - - case FFI_TYPE_STRUCT: - /* Structs smaller or equal than 4 bytes are passed in one - register. Structs smaller or equal 8 bytes are passed in two - registers. Larger structures are passed by pointer. */ - if((*p_arg)->size <= 4) - { - avalue[i] = (void *)(stack - slot) + sizeof(UINT32) - - (*p_arg)->size; - } - else if ((*p_arg)->size <= 8) - { - slot += (slot & 1) ? 1 : 2; - avalue[i] = (void *)(stack - slot) + sizeof(UINT64) - - (*p_arg)->size; - } - else - avalue[i] = (void *) *(stack - slot); - break; - - default: - FFI_ASSERT(0); - } - - slot++; - p_arg++; - } - - /* Invoke the closure. */ - (closure->fun) (cif, rvalue, avalue, closure->user_data); - - debug(3, "after calling function, ret[0] = %08x, ret[1] = %08x\n", ret[0], - ret[1]); - - /* Store the result using the lower 2 bytes of the flags. */ - switch (cif->flags) - { - case FFI_TYPE_UINT8: - *(stack - FIRST_ARG_SLOT) = (UINT8)(ret[0] >> 24); - break; - case FFI_TYPE_SINT8: - *(stack - FIRST_ARG_SLOT) = (SINT8)(ret[0] >> 24); - break; - case FFI_TYPE_UINT16: - *(stack - FIRST_ARG_SLOT) = (UINT16)(ret[0] >> 16); - break; - case FFI_TYPE_SINT16: - *(stack - FIRST_ARG_SLOT) = (SINT16)(ret[0] >> 16); - break; - case FFI_TYPE_INT: - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - *(stack - FIRST_ARG_SLOT) = ret[0]; - break; - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - *(stack - FIRST_ARG_SLOT) = ret[0]; - *(stack - FIRST_ARG_SLOT - 1) = ret[1]; - break; - - case FFI_TYPE_DOUBLE: - fldd(rvalue, fr4); - break; - - case FFI_TYPE_FLOAT: - fldw(rvalue, fr4); - break; - - case FFI_TYPE_STRUCT: - /* Don't need a return value, done by caller. */ - break; - - case FFI_TYPE_SMALL_STRUCT2: - case FFI_TYPE_SMALL_STRUCT3: - case FFI_TYPE_SMALL_STRUCT4: - tmp = (void*)(stack - FIRST_ARG_SLOT); - tmp += 4 - cif->rtype->size; - memcpy((void*)tmp, &ret[0], cif->rtype->size); - break; - - case FFI_TYPE_SMALL_STRUCT5: - case FFI_TYPE_SMALL_STRUCT6: - case FFI_TYPE_SMALL_STRUCT7: - case FFI_TYPE_SMALL_STRUCT8: - { - unsigned int ret2[2]; - int off; - - /* Right justify ret[0] and ret[1] */ - switch (cif->flags) - { - case FFI_TYPE_SMALL_STRUCT5: off = 3; break; - case FFI_TYPE_SMALL_STRUCT6: off = 2; break; - case FFI_TYPE_SMALL_STRUCT7: off = 1; break; - default: off = 0; break; - } - - memset (ret2, 0, sizeof (ret2)); - memcpy ((char *)ret2 + off, ret, 8 - off); - - *(stack - FIRST_ARG_SLOT) = ret2[0]; - *(stack - FIRST_ARG_SLOT - 1) = ret2[1]; - } - break; - - case FFI_TYPE_POINTER: - case FFI_TYPE_VOID: - break; - - default: - debug(0, "assert with cif->flags: %d\n",cif->flags); - FFI_ASSERT(0); - break; - } - return FFI_OK; -} - -/* Fill in a closure to refer to the specified fun and user_data. - cif specifies the argument and result types for fun. - The cif must already be prep'ed. */ - -extern void ffi_closure_pa32(void); - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data, - void *codeloc) -{ - UINT32 *tramp = (UINT32 *)(closure->tramp); -#ifdef PA_HPUX - UINT32 *tmp; -#endif - - if (cif->abi != FFI_PA32) - return FFI_BAD_ABI; - - /* Make a small trampoline that will branch to our - handler function. Use PC-relative addressing. */ - -#ifdef PA_LINUX - tramp[0] = 0xeaa00000; /* b,l .+8,%r21 ; %r21 <- pc+8 */ - tramp[1] = 0xd6a01c1e; /* depi 0,31,2,%r21 ; mask priv bits */ - tramp[2] = 0x4aa10028; /* ldw 20(%r21),%r1 ; load plabel */ - tramp[3] = 0x36b53ff1; /* ldo -8(%r21),%r21 ; get closure addr */ - tramp[4] = 0x0c201096; /* ldw 0(%r1),%r22 ; address of handler */ - tramp[5] = 0xeac0c000; /* bv%r0(%r22) ; branch to handler */ - tramp[6] = 0x0c281093; /* ldw 4(%r1),%r19 ; GP of handler */ - tramp[7] = ((UINT32)(ffi_closure_pa32) & ~2); - - /* Flush d/icache -- have to flush up 2 two lines because of - alignment. */ - __asm__ volatile( - "fdc 0(%0)\n\t" - "fdc %1(%0)\n\t" - "fic 0(%%sr4, %0)\n\t" - "fic %1(%%sr4, %0)\n\t" - "sync\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - "nop\n" - : - : "r"((unsigned long)tramp & ~31), - "r"(32 /* stride */) - : "memory"); -#endif - -#ifdef PA_HPUX - tramp[0] = 0xeaa00000; /* b,l .+8,%r21 ; %r21 <- pc+8 */ - tramp[1] = 0xd6a01c1e; /* depi 0,31,2,%r21 ; mask priv bits */ - tramp[2] = 0x4aa10038; /* ldw 28(%r21),%r1 ; load plabel */ - tramp[3] = 0x36b53ff1; /* ldo -8(%r21),%r21 ; get closure addr */ - tramp[4] = 0x0c201096; /* ldw 0(%r1),%r22 ; address of handler */ - tramp[5] = 0x02c010b4; /* ldsid (%r22),%r20 ; load space id */ - tramp[6] = 0x00141820; /* mtsp %r20,%sr0 ; into %sr0 */ - tramp[7] = 0xe2c00000; /* be 0(%sr0,%r22) ; branch to handler */ - tramp[8] = 0x0c281093; /* ldw 4(%r1),%r19 ; GP of handler */ - tramp[9] = ((UINT32)(ffi_closure_pa32) & ~2); - - /* Flush d/icache -- have to flush three lines because of alignment. */ - __asm__ volatile( - "copy %1,%0\n\t" - "fdc,m %2(%0)\n\t" - "fdc,m %2(%0)\n\t" - "fdc,m %2(%0)\n\t" - "ldsid (%1),%0\n\t" - "mtsp %0,%%sr0\n\t" - "copy %1,%0\n\t" - "fic,m %2(%%sr0,%0)\n\t" - "fic,m %2(%%sr0,%0)\n\t" - "fic,m %2(%%sr0,%0)\n\t" - "sync\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - "nop\n" - : "=&r" ((unsigned long)tmp) - : "r" ((unsigned long)tramp & ~31), - "r" (32/* stride */) - : "memory"); -#endif - - closure->cif = cif; - closure->user_data = user_data; - closure->fun = fun; - - return FFI_OK; -} -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/pa/ffitarget.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/pa/ffitarget.h deleted file mode 100644 index efa2f4e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/pa/ffitarget.h +++ /dev/null @@ -1,78 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. - Target configuration macros for hppa. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -/* ---- System specific configurations ----------------------------------- */ - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - -#ifdef PA_LINUX - FFI_PA32, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_PA32 -#endif - -#ifdef PA_HPUX - FFI_PA32, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_PA32 -#endif - -#ifdef PA64_HPUX -#error "PA64_HPUX FFI is not yet implemented" - FFI_PA64, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_PA64 -#endif -} ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_NATIVE_RAW_API 0 - -#ifdef PA_LINUX -#define FFI_TRAMPOLINE_SIZE 32 -#else -#define FFI_TRAMPOLINE_SIZE 40 -#endif - -#define FFI_TYPE_SMALL_STRUCT2 -1 -#define FFI_TYPE_SMALL_STRUCT3 -2 -#define FFI_TYPE_SMALL_STRUCT4 -3 -#define FFI_TYPE_SMALL_STRUCT5 -4 -#define FFI_TYPE_SMALL_STRUCT6 -5 -#define FFI_TYPE_SMALL_STRUCT7 -6 -#define FFI_TYPE_SMALL_STRUCT8 -7 -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/pa/hpux32.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/pa/hpux32.S deleted file mode 100644 index 40528ba..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/pa/hpux32.S +++ /dev/null @@ -1,368 +0,0 @@ -/* ----------------------------------------------------------------------- - hpux32.S - Copyright (c) 2006 Free Software Foundation, Inc. - (c) 2008 Red Hat, Inc. - based on src/pa/linux.S - - HP-UX PA Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR - OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - - .LEVEL 1.1 - .SPACE $PRIVATE$ - .IMPORT $global$,DATA - .IMPORT $$dyncall,MILLICODE - .SUBSPA $DATA$ - .align 4 - - /* void ffi_call_pa32(void (*)(char *, extended_cif *), - extended_cif *ecif, - unsigned bytes, - unsigned flags, - unsigned *rvalue, - void (*fn)(void)); - */ - - .export ffi_call_pa32,ENTRY,PRIV_LEV=3 - .import ffi_prep_args_pa32,CODE - - .SPACE $TEXT$ - .SUBSPA $CODE$ - .align 4 - -L$FB1 -ffi_call_pa32 - .proc - .callinfo FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=4 - .entry - stw %rp, -20(%sp) - copy %r3, %r1 -L$CFI11 - copy %sp, %r3 -L$CFI12 - - /* Setup the stack for calling prep_args... - We want the stack to look like this: - - [ Previous stack ] <- %r3 - - [ 64-bytes register save area ] <- %r4 - - [ Stack space for actual call, passed as ] <- %arg0 - [ arg0 to ffi_prep_args_pa32 ] - - [ Stack for calling prep_args ] <- %sp - */ - - stwm %r1, 64(%sp) - stw %r4, 12(%r3) -L$CFI13 - copy %sp, %r4 - - addl %arg2, %r4, %arg0 ; arg stack - stw %arg3, -48(%r3) ; save flags we need it later - - /* Call prep_args: - %arg0(stack) -- set up above - %arg1(ecif) -- same as incoming param - %arg2(bytes) -- same as incoming param */ - bl ffi_prep_args_pa32,%r2 - ldo 64(%arg0), %sp - ldo -64(%sp), %sp - - /* now %sp should point where %arg0 was pointing. */ - - /* Load the arguments that should be passed in registers - The fp args are loaded by the prep_args function. */ - ldw -36(%sp), %arg0 - ldw -40(%sp), %arg1 - ldw -44(%sp), %arg2 - ldw -48(%sp), %arg3 - - /* in case the function is going to return a structure - we need to give it a place to put the result. */ - ldw -52(%r3), %ret0 ; %ret0 <- rvalue - ldw -56(%r3), %r22 ; %r22 <- function to call - bl $$dyncall, %r31 ; Call the user function - copy %r31, %rp - - /* Prepare to store the result; we need to recover flags and rvalue. */ - ldw -48(%r3), %r21 ; r21 <- flags - ldw -52(%r3), %r20 ; r20 <- rvalue - - /* Store the result according to the return type. The most - likely types should come first. */ - -L$checkint - comib,<>,n FFI_TYPE_INT, %r21, L$checkint8 - b L$done - stw %ret0, 0(%r20) - -L$checkint8 - comib,<>,n FFI_TYPE_UINT8, %r21, L$checkint16 - b L$done - stb %ret0, 0(%r20) - -L$checkint16 - comib,<>,n FFI_TYPE_UINT16, %r21, L$checkdbl - b L$done - sth %ret0, 0(%r20) - -L$checkdbl - comib,<>,n FFI_TYPE_DOUBLE, %r21, L$checkfloat - b L$done - fstd %fr4,0(%r20) - -L$checkfloat - comib,<>,n FFI_TYPE_FLOAT, %r21, L$checkll - b L$done - fstw %fr4L,0(%r20) - -L$checkll - comib,<>,n FFI_TYPE_UINT64, %r21, L$checksmst2 - stw %ret0, 0(%r20) - b L$done - stw %ret1, 4(%r20) - -L$checksmst2 - comib,<>,n FFI_TYPE_SMALL_STRUCT2, %r21, L$checksmst3 - /* 2-byte structs are returned in ret0 as ????xxyy. */ - extru %ret0, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - b L$done - stb %ret0, 0(%r20) - -L$checksmst3 - comib,<>,n FFI_TYPE_SMALL_STRUCT3, %r21, L$checksmst4 - /* 3-byte structs are returned in ret0 as ??xxyyzz. */ - extru %ret0, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret0, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - b L$done - stb %ret0, 0(%r20) - -L$checksmst4 - comib,<>,n FFI_TYPE_SMALL_STRUCT4, %r21, L$checksmst5 - /* 4-byte structs are returned in ret0 as wwxxyyzz. */ - extru %ret0, 7, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret0, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret0, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - b L$done - stb %ret0, 0(%r20) - -L$checksmst5 - comib,<>,n FFI_TYPE_SMALL_STRUCT5, %r21, L$checksmst6 - /* 5 byte values are returned right justified: - ret0 ret1 - 5: ??????aa bbccddee */ - stbs,ma %ret0, 1(%r20) - extru %ret1, 7, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - b L$done - stb %ret1, 0(%r20) - -L$checksmst6 - comib,<>,n FFI_TYPE_SMALL_STRUCT6, %r21, L$checksmst7 - /* 6 byte values are returned right justified: - ret0 ret1 - 6: ????aabb ccddeeff */ - extru %ret0, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - stbs,ma %ret0, 1(%r20) - extru %ret1, 7, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - b L$done - stb %ret1, 0(%r20) - -L$checksmst7 - comib,<>,n FFI_TYPE_SMALL_STRUCT7, %r21, L$checksmst8 - /* 7 byte values are returned right justified: - ret0 ret1 - 7: ??aabbcc ddeeffgg */ - extru %ret0, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret0, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - stbs,ma %ret0, 1(%r20) - extru %ret1, 7, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - b L$done - stb %ret1, 0(%r20) - -L$checksmst8 - comib,<>,n FFI_TYPE_SMALL_STRUCT8, %r21, L$done - /* 8 byte values are returned right justified: - ret0 ret1 - 8: aabbccdd eeffgghh */ - extru %ret0, 7, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret0, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret0, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - stbs,ma %ret0, 1(%r20) - extru %ret1, 7, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - stb %ret1, 0(%r20) - -L$done - /* all done, return */ - copy %r4, %sp ; pop arg stack - ldw 12(%r3), %r4 - ldwm -64(%sp), %r3 ; .. and pop stack - ldw -20(%sp), %rp - bv %r0(%rp) - nop - .exit - .procend -L$FE1 - - /* void ffi_closure_pa32(void); - Called with closure argument in %r21 */ - - .SPACE $TEXT$ - .SUBSPA $CODE$ - .export ffi_closure_pa32,ENTRY,PRIV_LEV=3,RTNVAL=GR - .import ffi_closure_inner_pa32,CODE - .align 4 -L$FB2 -ffi_closure_pa32 - .proc - .callinfo FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=3 - .entry - - stw %rp, -20(%sp) - copy %r3, %r1 -L$CFI21 - copy %sp, %r3 -L$CFI22 - stwm %r1, 64(%sp) - - /* Put arguments onto the stack and call ffi_closure_inner. */ - stw %arg0, -36(%r3) - stw %arg1, -40(%r3) - stw %arg2, -44(%r3) - stw %arg3, -48(%r3) - - copy %r21, %arg0 - bl ffi_closure_inner_pa32, %r2 - copy %r3, %arg1 - ldwm -64(%sp), %r3 - ldw -20(%sp), %rp - ldw -36(%sp), %ret0 - bv %r0(%rp) - ldw -40(%sp), %ret1 - .exit - .procend -L$FE2: - - .SPACE $PRIVATE$ - .SUBSPA $DATA$ - - .align 4 - .EXPORT _GLOBAL__F_ffi_call_pa32,DATA -_GLOBAL__F_ffi_call_pa32 -L$frame1: - .word L$ECIE1-L$SCIE1 ;# Length of Common Information Entry -L$SCIE1: - .word 0x0 ;# CIE Identifier Tag - .byte 0x1 ;# CIE Version - .ascii "\0" ;# CIE Augmentation - .uleb128 0x1 ;# CIE Code Alignment Factor - .sleb128 4 ;# CIE Data Alignment Factor - .byte 0x2 ;# CIE RA Column - .byte 0xc ;# DW_CFA_def_cfa - .uleb128 0x1e - .uleb128 0x0 - .align 4 -L$ECIE1: -L$SFDE1: - .word L$EFDE1-L$ASFDE1 ;# FDE Length -L$ASFDE1: - .word L$ASFDE1-L$frame1 ;# FDE CIE offset - .word L$FB1 ;# FDE initial location - .word L$FE1-L$FB1 ;# FDE address range - - .byte 0x4 ;# DW_CFA_advance_loc4 - .word L$CFI11-L$FB1 - .byte 0x83 ;# DW_CFA_offset, column 0x3 - .uleb128 0x0 - .byte 0x11 ;# DW_CFA_offset_extended_sf; save r2 at [r30-20] - .uleb128 0x2 - .sleb128 -5 - - .byte 0x4 ;# DW_CFA_advance_loc4 - .word L$CFI12-L$CFI11 - .byte 0xd ;# DW_CFA_def_cfa_register = r3 - .uleb128 0x3 - - .byte 0x4 ;# DW_CFA_advance_loc4 - .word L$CFI13-L$CFI12 - .byte 0x84 ;# DW_CFA_offset, column 0x4 - .uleb128 0x3 - - .align 4 -L$EFDE1: - -L$SFDE2: - .word L$EFDE2-L$ASFDE2 ;# FDE Length -L$ASFDE2: - .word L$ASFDE2-L$frame1 ;# FDE CIE offset - .word L$FB2 ;# FDE initial location - .word L$FE2-L$FB2 ;# FDE address range - .byte 0x4 ;# DW_CFA_advance_loc4 - .word L$CFI21-L$FB2 - .byte 0x83 ;# DW_CFA_offset, column 0x3 - .uleb128 0x0 - .byte 0x11 ;# DW_CFA_offset_extended_sf - .uleb128 0x2 - .sleb128 -5 - - .byte 0x4 ;# DW_CFA_advance_loc4 - .word L$CFI22-L$CFI21 - .byte 0xd ;# DW_CFA_def_cfa_register = r3 - .uleb128 0x3 - - .align 4 -L$EFDE2: diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/pa/linux.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/pa/linux.S deleted file mode 100644 index f11ae76..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/pa/linux.S +++ /dev/null @@ -1,357 +0,0 @@ -/* ----------------------------------------------------------------------- - linux.S - (c) 2003-2004 Randolph Chung - (c) 2008 Red Hat, Inc. - - HPPA Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL RENESAS TECHNOLOGY BE LIABLE FOR ANY CLAIM, DAMAGES OR - OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - - .text - .level 1.1 - .align 4 - - /* void ffi_call_pa32(void (*)(char *, extended_cif *), - extended_cif *ecif, - unsigned bytes, - unsigned flags, - unsigned *rvalue, - void (*fn)(void)); - */ - - .export ffi_call_pa32,code - .import ffi_prep_args_pa32,code - - .type ffi_call_pa32, @function -.LFB1: -ffi_call_pa32: - .proc - .callinfo FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=4 - .entry - stw %rp, -20(%sp) - copy %r3, %r1 -.LCFI11: - - copy %sp, %r3 -.LCFI12: - - /* Setup the stack for calling prep_args... - We want the stack to look like this: - - [ Previous stack ] <- %r3 - - [ 64-bytes register save area ] <- %r4 - - [ Stack space for actual call, passed as ] <- %arg0 - [ arg0 to ffi_prep_args_pa32 ] - - [ Stack for calling prep_args ] <- %sp - */ - - stwm %r1, 64(%sp) - stw %r4, 12(%r3) -.LCFI13: - copy %sp, %r4 - - addl %arg2, %r4, %arg0 /* arg stack */ - stw %arg3, -48(%r3) /* save flags; we need it later */ - - /* Call prep_args: - %arg0(stack) -- set up above - %arg1(ecif) -- same as incoming param - %arg2(bytes) -- same as incoming param */ - bl ffi_prep_args_pa32,%r2 - ldo 64(%arg0), %sp - ldo -64(%sp), %sp - - /* now %sp should point where %arg0 was pointing. */ - - /* Load the arguments that should be passed in registers - The fp args were loaded by the prep_args function. */ - ldw -36(%sp), %arg0 - ldw -40(%sp), %arg1 - ldw -44(%sp), %arg2 - ldw -48(%sp), %arg3 - - /* in case the function is going to return a structure - we need to give it a place to put the result. */ - ldw -52(%r3), %ret0 /* %ret0 <- rvalue */ - ldw -56(%r3), %r22 /* %r22 <- function to call */ - bl $$dyncall, %r31 /* Call the user function */ - copy %r31, %rp - - /* Prepare to store the result; we need to recover flags and rvalue. */ - ldw -48(%r3), %r21 /* r21 <- flags */ - ldw -52(%r3), %r20 /* r20 <- rvalue */ - - /* Store the result according to the return type. */ - -.Lcheckint: - comib,<>,n FFI_TYPE_INT, %r21, .Lcheckint8 - b .Ldone - stw %ret0, 0(%r20) - -.Lcheckint8: - comib,<>,n FFI_TYPE_UINT8, %r21, .Lcheckint16 - b .Ldone - stb %ret0, 0(%r20) - -.Lcheckint16: - comib,<>,n FFI_TYPE_UINT16, %r21, .Lcheckdbl - b .Ldone - sth %ret0, 0(%r20) - -.Lcheckdbl: - comib,<>,n FFI_TYPE_DOUBLE, %r21, .Lcheckfloat - b .Ldone - fstd %fr4,0(%r20) - -.Lcheckfloat: - comib,<>,n FFI_TYPE_FLOAT, %r21, .Lcheckll - b .Ldone - fstw %fr4L,0(%r20) - -.Lcheckll: - comib,<>,n FFI_TYPE_UINT64, %r21, .Lchecksmst2 - stw %ret0, 0(%r20) - b .Ldone - stw %ret1, 4(%r20) - -.Lchecksmst2: - comib,<>,n FFI_TYPE_SMALL_STRUCT2, %r21, .Lchecksmst3 - /* 2-byte structs are returned in ret0 as ????xxyy. */ - extru %ret0, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - b .Ldone - stb %ret0, 0(%r20) - -.Lchecksmst3: - comib,<>,n FFI_TYPE_SMALL_STRUCT3, %r21, .Lchecksmst4 - /* 3-byte structs are returned in ret0 as ??xxyyzz. */ - extru %ret0, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret0, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - b .Ldone - stb %ret0, 0(%r20) - -.Lchecksmst4: - comib,<>,n FFI_TYPE_SMALL_STRUCT4, %r21, .Lchecksmst5 - /* 4-byte structs are returned in ret0 as wwxxyyzz. */ - extru %ret0, 7, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret0, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret0, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - b .Ldone - stb %ret0, 0(%r20) - -.Lchecksmst5: - comib,<>,n FFI_TYPE_SMALL_STRUCT5, %r21, .Lchecksmst6 - /* 5 byte values are returned right justified: - ret0 ret1 - 5: ??????aa bbccddee */ - stbs,ma %ret0, 1(%r20) - extru %ret1, 7, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - b .Ldone - stb %ret1, 0(%r20) - -.Lchecksmst6: - comib,<>,n FFI_TYPE_SMALL_STRUCT6, %r21, .Lchecksmst7 - /* 6 byte values are returned right justified: - ret0 ret1 - 6: ????aabb ccddeeff */ - extru %ret0, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - stbs,ma %ret0, 1(%r20) - extru %ret1, 7, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - b .Ldone - stb %ret1, 0(%r20) - -.Lchecksmst7: - comib,<>,n FFI_TYPE_SMALL_STRUCT7, %r21, .Lchecksmst8 - /* 7 byte values are returned right justified: - ret0 ret1 - 7: ??aabbcc ddeeffgg */ - extru %ret0, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret0, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - stbs,ma %ret0, 1(%r20) - extru %ret1, 7, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - b .Ldone - stb %ret1, 0(%r20) - -.Lchecksmst8: - comib,<>,n FFI_TYPE_SMALL_STRUCT8, %r21, .Ldone - /* 8 byte values are returned right justified: - ret0 ret1 - 8: aabbccdd eeffgghh */ - extru %ret0, 7, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret0, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret0, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - stbs,ma %ret0, 1(%r20) - extru %ret1, 7, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 15, 8, %r22 - stbs,ma %r22, 1(%r20) - extru %ret1, 23, 8, %r22 - stbs,ma %r22, 1(%r20) - stb %ret1, 0(%r20) - -.Ldone: - /* all done, return */ - copy %r4, %sp /* pop arg stack */ - ldw 12(%r3), %r4 - ldwm -64(%sp), %r3 /* .. and pop stack */ - ldw -20(%sp), %rp - bv %r0(%rp) - nop - .exit - .procend -.LFE1: - - /* void ffi_closure_pa32(void); - Called with closure argument in %r21 */ - .export ffi_closure_pa32,code - .import ffi_closure_inner_pa32,code - - .type ffi_closure_pa32, @function -.LFB2: -ffi_closure_pa32: - .proc - .callinfo FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=3 - .entry - - stw %rp, -20(%sp) -.LCFI20: - copy %r3, %r1 -.LCFI21: - copy %sp, %r3 -.LCFI22: - stwm %r1, 64(%sp) - - /* Put arguments onto the stack and call ffi_closure_inner. */ - stw %arg0, -36(%r3) - stw %arg1, -40(%r3) - stw %arg2, -44(%r3) - stw %arg3, -48(%r3) - - copy %r21, %arg0 - bl ffi_closure_inner_pa32, %r2 - copy %r3, %arg1 - - ldwm -64(%sp), %r3 - ldw -20(%sp), %rp - ldw -36(%sp), %ret0 - bv %r0(%r2) - ldw -40(%sp), %ret1 - - .exit - .procend -.LFE2: - - .section ".eh_frame",EH_FRAME_FLAGS,@progbits -.Lframe1: - .word .LECIE1-.LSCIE1 ;# Length of Common Information Entry -.LSCIE1: - .word 0x0 ;# CIE Identifier Tag - .byte 0x1 ;# CIE Version - .ascii "\0" ;# CIE Augmentation - .uleb128 0x1 ;# CIE Code Alignment Factor - .sleb128 4 ;# CIE Data Alignment Factor - .byte 0x2 ;# CIE RA Column - .byte 0xc ;# DW_CFA_def_cfa - .uleb128 0x1e - .uleb128 0x0 - .align 4 -.LECIE1: -.LSFDE1: - .word .LEFDE1-.LASFDE1 ;# FDE Length -.LASFDE1: - .word .LASFDE1-.Lframe1 ;# FDE CIE offset - .word .LFB1 ;# FDE initial location - .word .LFE1-.LFB1 ;# FDE address range - - .byte 0x4 ;# DW_CFA_advance_loc4 - .word .LCFI11-.LFB1 - .byte 0x83 ;# DW_CFA_offset, column 0x3 - .uleb128 0x0 - .byte 0x11 ;# DW_CFA_offset_extended_sf; save r2 at [r30-20] - .uleb128 0x2 - .sleb128 -5 - - .byte 0x4 ;# DW_CFA_advance_loc4 - .word .LCFI12-.LCFI11 - .byte 0xd ;# DW_CFA_def_cfa_register = r3 - .uleb128 0x3 - - .byte 0x4 ;# DW_CFA_advance_loc4 - .word .LCFI13-.LCFI12 - .byte 0x84 ;# DW_CFA_offset, column 0x4 - .uleb128 0x3 - - .align 4 -.LEFDE1: - -.LSFDE2: - .word .LEFDE2-.LASFDE2 ;# FDE Length -.LASFDE2: - .word .LASFDE2-.Lframe1 ;# FDE CIE offset - .word .LFB2 ;# FDE initial location - .word .LFE2-.LFB2 ;# FDE address range - .byte 0x4 ;# DW_CFA_advance_loc4 - .word .LCFI21-.LFB2 - .byte 0x83 ;# DW_CFA_offset, column 0x3 - .uleb128 0x0 - .byte 0x11 ;# DW_CFA_offset_extended_sf - .uleb128 0x2 - .sleb128 -5 - - .byte 0x4 ;# DW_CFA_advance_loc4 - .word .LCFI22-.LCFI21 - .byte 0xd ;# DW_CFA_def_cfa_register = r3 - .uleb128 0x3 - - .align 4 -.LEFDE2: diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/aix.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/aix.S deleted file mode 100644 index 213f2db..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/aix.S +++ /dev/null @@ -1,328 +0,0 @@ -/* ----------------------------------------------------------------------- - aix.S - Copyright (c) 2002, 2009 Free Software Foundation, Inc. - based on darwin.S by John Hornkvist - - PowerPC Assembly glue. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR - OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - - .set r0,0 - .set r1,1 - .set r2,2 - .set r3,3 - .set r4,4 - .set r5,5 - .set r6,6 - .set r7,7 - .set r8,8 - .set r9,9 - .set r10,10 - .set r11,11 - .set r12,12 - .set r13,13 - .set r14,14 - .set r15,15 - .set r16,16 - .set r17,17 - .set r18,18 - .set r19,19 - .set r20,20 - .set r21,21 - .set r22,22 - .set r23,23 - .set r24,24 - .set r25,25 - .set r26,26 - .set r27,27 - .set r28,28 - .set r29,29 - .set r30,30 - .set r31,31 - .set f0,0 - .set f1,1 - .set f2,2 - .set f3,3 - .set f4,4 - .set f5,5 - .set f6,6 - .set f7,7 - .set f8,8 - .set f9,9 - .set f10,10 - .set f11,11 - .set f12,12 - .set f13,13 - .set f14,14 - .set f15,15 - .set f16,16 - .set f17,17 - .set f18,18 - .set f19,19 - .set f20,20 - .set f21,21 - - .extern .ffi_prep_args - -#define LIBFFI_ASM -#include -#include -#define JUMPTARGET(name) name -#define L(x) x - .file "aix.S" - .toc - - /* void ffi_call_AIX(extended_cif *ecif, unsigned long bytes, - * unsigned int flags, unsigned int *rvalue, - * void (*fn)(), - * void (*prep_args)(extended_cif*, unsigned *const)); - * r3=ecif, r4=bytes, r5=flags, r6=rvalue, r7=fn, r8=prep_args - */ - -.csect .text[PR] - .align 2 - .globl ffi_call_AIX - .globl .ffi_call_AIX -.csect ffi_call_AIX[DS] -ffi_call_AIX: -#ifdef __64BIT__ - .llong .ffi_call_AIX, TOC[tc0], 0 - .csect .text[PR] -.ffi_call_AIX: - /* Save registers we use. */ - mflr r0 - - std r28,-32(r1) - std r29,-24(r1) - std r30,-16(r1) - std r31, -8(r1) - - std r0, 16(r1) - mr r28, r1 /* our AP. */ - stdux r1, r1, r4 - - /* Save arguments over call... */ - mr r31, r5 /* flags, */ - mr r30, r6 /* rvalue, */ - mr r29, r7 /* function address. */ - std r2, 40(r1) - - /* Call ffi_prep_args. */ - mr r4, r1 - bl .ffi_prep_args - nop - - /* Now do the call. */ - ld r0, 0(r29) - ld r2, 8(r29) - ld r11, 16(r29) - /* Set up cr1 with bits 4-7 of the flags. */ - mtcrf 0x40, r31 - mtctr r0 - /* Load all those argument registers. */ - // We have set up a nice stack frame, just load it into registers. - ld r3, 40+(1*8)(r1) - ld r4, 40+(2*8)(r1) - ld r5, 40+(3*8)(r1) - ld r6, 40+(4*8)(r1) - nop - ld r7, 40+(5*8)(r1) - ld r8, 40+(6*8)(r1) - ld r9, 40+(7*8)(r1) - ld r10,40+(8*8)(r1) - -L1: - /* Load all the FP registers. */ - bf 6,L2 // 2f + 0x18 - lfd f1,-32-(13*8)(r28) - lfd f2,-32-(12*8)(r28) - lfd f3,-32-(11*8)(r28) - lfd f4,-32-(10*8)(r28) - nop - lfd f5,-32-(9*8)(r28) - lfd f6,-32-(8*8)(r28) - lfd f7,-32-(7*8)(r28) - lfd f8,-32-(6*8)(r28) - nop - lfd f9,-32-(5*8)(r28) - lfd f10,-32-(4*8)(r28) - lfd f11,-32-(3*8)(r28) - lfd f12,-32-(2*8)(r28) - nop - lfd f13,-32-(1*8)(r28) - -L2: - /* Make the call. */ - bctrl - ld r2, 40(r1) - - /* Now, deal with the return value. */ - mtcrf 0x01, r31 - - bt 30, L(done_return_value) - bt 29, L(fp_return_value) - std r3, 0(r30) - - /* Fall through... */ - -L(done_return_value): - /* Restore the registers we used and return. */ - mr r1, r28 - ld r0, 16(r28) - ld r28, -32(r1) - mtlr r0 - ld r29, -24(r1) - ld r30, -16(r1) - ld r31, -8(r1) - blr - -L(fp_return_value): - bf 28, L(float_return_value) - stfd f1, 0(r30) - bf 31, L(done_return_value) - stfd f2, 8(r30) - b L(done_return_value) -L(float_return_value): - stfs f1, 0(r30) - b L(done_return_value) - -#else /* ! __64BIT__ */ - - .long .ffi_call_AIX, TOC[tc0], 0 - .csect .text[PR] -.ffi_call_AIX: - /* Save registers we use. */ - mflr r0 - - stw r28,-16(r1) - stw r29,-12(r1) - stw r30, -8(r1) - stw r31, -4(r1) - - stw r0, 8(r1) - mr r28, r1 /* out AP. */ - stwux r1, r1, r4 - - /* Save arguments over call... */ - mr r31, r5 /* flags, */ - mr r30, r6 /* rvalue, */ - mr r29, r7 /* function address, */ - stw r2, 20(r1) - - /* Call ffi_prep_args. */ - mr r4, r1 - bl .ffi_prep_args - nop - - /* Now do the call. */ - lwz r0, 0(r29) - lwz r2, 4(r29) - lwz r11, 8(r29) - /* Set up cr1 with bits 4-7 of the flags. */ - mtcrf 0x40, r31 - mtctr r0 - /* Load all those argument registers. */ - // We have set up a nice stack frame, just load it into registers. - lwz r3, 20+(1*4)(r1) - lwz r4, 20+(2*4)(r1) - lwz r5, 20+(3*4)(r1) - lwz r6, 20+(4*4)(r1) - nop - lwz r7, 20+(5*4)(r1) - lwz r8, 20+(6*4)(r1) - lwz r9, 20+(7*4)(r1) - lwz r10,20+(8*4)(r1) - -L1: - /* Load all the FP registers. */ - bf 6,L2 // 2f + 0x18 - lfd f1,-16-(13*8)(r28) - lfd f2,-16-(12*8)(r28) - lfd f3,-16-(11*8)(r28) - lfd f4,-16-(10*8)(r28) - nop - lfd f5,-16-(9*8)(r28) - lfd f6,-16-(8*8)(r28) - lfd f7,-16-(7*8)(r28) - lfd f8,-16-(6*8)(r28) - nop - lfd f9,-16-(5*8)(r28) - lfd f10,-16-(4*8)(r28) - lfd f11,-16-(3*8)(r28) - lfd f12,-16-(2*8)(r28) - nop - lfd f13,-16-(1*8)(r28) - -L2: - /* Make the call. */ - bctrl - lwz r2, 20(r1) - - /* Now, deal with the return value. */ - mtcrf 0x01, r31 - - bt 30, L(done_return_value) - bt 29, L(fp_return_value) - stw r3, 0(r30) - bf 28, L(done_return_value) - stw r4, 4(r30) - - /* Fall through... */ - -L(done_return_value): - /* Restore the registers we used and return. */ - mr r1, r28 - lwz r0, 8(r28) - lwz r28,-16(r1) - mtlr r0 - lwz r29,-12(r1) - lwz r30, -8(r1) - lwz r31, -4(r1) - blr - -L(fp_return_value): - bf 28, L(float_return_value) - stfd f1, 0(r30) - b L(done_return_value) -L(float_return_value): - stfs f1, 0(r30) - b L(done_return_value) -#endif - .long 0 - .byte 0,0,0,1,128,4,0,0 -//END(ffi_call_AIX) - -.csect .text[PR] - .align 2 - .globl ffi_call_DARWIN - .globl .ffi_call_DARWIN -.csect ffi_call_DARWIN[DS] -ffi_call_DARWIN: -#ifdef __64BIT__ - .llong .ffi_call_DARWIN, TOC[tc0], 0 -#else - .long .ffi_call_DARWIN, TOC[tc0], 0 -#endif - .csect .text[PR] -.ffi_call_DARWIN: - blr - .long 0 - .byte 0,0,0,0,0,0,0,0 -//END(ffi_call_DARWIN) diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/aix_closure.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/aix_closure.S deleted file mode 100644 index c906017..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/aix_closure.S +++ /dev/null @@ -1,445 +0,0 @@ -/* ----------------------------------------------------------------------- - aix_closure.S - Copyright (c) 2002, 2003, 2009 Free Software Foundation, Inc. - based on darwin_closure.S - - PowerPC Assembly glue. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR - OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - - .set r0,0 - .set r1,1 - .set r2,2 - .set r3,3 - .set r4,4 - .set r5,5 - .set r6,6 - .set r7,7 - .set r8,8 - .set r9,9 - .set r10,10 - .set r11,11 - .set r12,12 - .set r13,13 - .set r14,14 - .set r15,15 - .set r16,16 - .set r17,17 - .set r18,18 - .set r19,19 - .set r20,20 - .set r21,21 - .set r22,22 - .set r23,23 - .set r24,24 - .set r25,25 - .set r26,26 - .set r27,27 - .set r28,28 - .set r29,29 - .set r30,30 - .set r31,31 - .set f0,0 - .set f1,1 - .set f2,2 - .set f3,3 - .set f4,4 - .set f5,5 - .set f6,6 - .set f7,7 - .set f8,8 - .set f9,9 - .set f10,10 - .set f11,11 - .set f12,12 - .set f13,13 - .set f14,14 - .set f15,15 - .set f16,16 - .set f17,17 - .set f18,18 - .set f19,19 - .set f20,20 - .set f21,21 - - .extern .ffi_closure_helper_DARWIN - -#define LIBFFI_ASM -#define JUMPTARGET(name) name -#define L(x) x - .file "aix_closure.S" - .toc -LC..60: - .tc L..60[TC],L..60 - .csect .text[PR] - .align 2 - -.csect .text[PR] - .align 2 - .globl ffi_closure_ASM - .globl .ffi_closure_ASM -.csect ffi_closure_ASM[DS] -ffi_closure_ASM: -#ifdef __64BIT__ - .llong .ffi_closure_ASM, TOC[tc0], 0 - .csect .text[PR] -.ffi_closure_ASM: -/* we want to build up an area for the parameters passed */ -/* in registers (both floating point and integer) */ - - /* we store gpr 3 to gpr 10 (aligned to 4) - in the parents outgoing area */ - std r3, 48+(0*8)(r1) - std r4, 48+(1*8)(r1) - std r5, 48+(2*8)(r1) - std r6, 48+(3*8)(r1) - mflr r0 - - std r7, 48+(4*8)(r1) - std r8, 48+(5*8)(r1) - std r9, 48+(6*8)(r1) - std r10, 48+(7*8)(r1) - std r0, 16(r1) /* save the return address */ - - - /* 48 Bytes (Linkage Area) */ - /* 64 Bytes (params) */ - /* 16 Bytes (result) */ - /* 104 Bytes (13*8 from FPR) */ - /* 8 Bytes (alignment) */ - /* 240 Bytes */ - - stdu r1, -240(r1) /* skip over caller save area - keep stack aligned to 16 */ - - /* next save fpr 1 to fpr 13 (aligned to 8) */ - stfd f1, 128+(0*8)(r1) - stfd f2, 128+(1*8)(r1) - stfd f3, 128+(2*8)(r1) - stfd f4, 128+(3*8)(r1) - stfd f5, 128+(4*8)(r1) - stfd f6, 128+(5*8)(r1) - stfd f7, 128+(6*8)(r1) - stfd f8, 128+(7*8)(r1) - stfd f9, 128+(8*8)(r1) - stfd f10, 128+(9*8)(r1) - stfd f11, 128+(10*8)(r1) - stfd f12, 128+(11*8)(r1) - stfd f13, 128+(12*8)(r1) - - /* set up registers for the routine that actually does the work */ - /* get the context pointer from the trampoline */ - mr r3, r11 - - /* now load up the pointer to the result storage */ - addi r4, r1, 112 - - /* now load up the pointer to the saved gpr registers */ - addi r5, r1, 288 - - /* now load up the pointer to the saved fpr registers */ - addi r6, r1, 128 - - /* make the call */ - bl .ffi_closure_helper_DARWIN - nop - - /* now r3 contains the return type */ - /* so use it to look up in a table */ - /* so we know how to deal with each type */ - - /* look up the proper starting point in table */ - /* by using return type as offset */ - ld r4, LC..60(2) /* get address of jump table */ - sldi r3, r3, 4 /* now multiply return type by 16 */ - ld r0, 240+16(r1) /* load return address */ - add r3, r3, r4 /* add contents of table to table address */ - mtctr r3 - bctr /* jump to it */ - -/* Each fragment must be exactly 16 bytes long (4 instructions). - Align to 16 byte boundary for cache and dispatch efficiency. */ - .align 4 - -L..60: -/* case FFI_TYPE_VOID */ - mtlr r0 - addi r1, r1, 240 - blr - nop - -/* case FFI_TYPE_INT */ - lwa r3, 112+4(r1) - mtlr r0 - addi r1, r1, 240 - blr - -/* case FFI_TYPE_FLOAT */ - lfs f1, 112+0(r1) - mtlr r0 - addi r1, r1, 240 - blr - -/* case FFI_TYPE_DOUBLE */ - lfd f1, 112+0(r1) - mtlr r0 - addi r1, r1, 240 - blr - -/* case FFI_TYPE_LONGDOUBLE */ - lfd f1, 112+0(r1) - mtlr r0 - lfd f2, 112+8(r1) - b L..finish - -/* case FFI_TYPE_UINT8 */ - lbz r3, 112+7(r1) - mtlr r0 - addi r1, r1, 240 - blr - -/* case FFI_TYPE_SINT8 */ - lbz r3, 112+7(r1) - mtlr r0 - extsb r3, r3 - b L..finish - -/* case FFI_TYPE_UINT16 */ - lhz r3, 112+6(r1) - mtlr r0 -L..finish: - addi r1, r1, 240 - blr - -/* case FFI_TYPE_SINT16 */ - lha r3, 112+6(r1) - mtlr r0 - addi r1, r1, 240 - blr - -/* case FFI_TYPE_UINT32 */ - lwz r3, 112+4(r1) - mtlr r0 - addi r1, r1, 240 - blr - -/* case FFI_TYPE_SINT32 */ - lwa r3, 112+4(r1) - mtlr r0 - addi r1, r1, 240 - blr - -/* case FFI_TYPE_UINT64 */ - ld r3, 112+0(r1) - mtlr r0 - addi r1, r1, 240 - blr - -/* case FFI_TYPE_SINT64 */ - ld r3, 112+0(r1) - mtlr r0 - addi r1, r1, 240 - blr - -/* case FFI_TYPE_STRUCT */ - mtlr r0 - addi r1, r1, 240 - blr - nop - -/* case FFI_TYPE_POINTER */ - ld r3, 112+0(r1) - mtlr r0 - addi r1, r1, 240 - blr - -#else /* ! __64BIT__ */ - - .long .ffi_closure_ASM, TOC[tc0], 0 - .csect .text[PR] -.ffi_closure_ASM: -/* we want to build up an area for the parameters passed */ -/* in registers (both floating point and integer) */ - - /* we store gpr 3 to gpr 10 (aligned to 4) - in the parents outgoing area */ - stw r3, 24+(0*4)(r1) - stw r4, 24+(1*4)(r1) - stw r5, 24+(2*4)(r1) - stw r6, 24+(3*4)(r1) - mflr r0 - - stw r7, 24+(4*4)(r1) - stw r8, 24+(5*4)(r1) - stw r9, 24+(6*4)(r1) - stw r10, 24+(7*4)(r1) - stw r0, 8(r1) - - /* 24 Bytes (Linkage Area) */ - /* 32 Bytes (params) */ - /* 16 Bytes (result) */ - /* 104 Bytes (13*8 from FPR) */ - /* 176 Bytes */ - - stwu r1, -176(r1) /* skip over caller save area - keep stack aligned to 16 */ - - /* next save fpr 1 to fpr 13 (aligned to 8) */ - stfd f1, 72+(0*8)(r1) - stfd f2, 72+(1*8)(r1) - stfd f3, 72+(2*8)(r1) - stfd f4, 72+(3*8)(r1) - stfd f5, 72+(4*8)(r1) - stfd f6, 72+(5*8)(r1) - stfd f7, 72+(6*8)(r1) - stfd f8, 72+(7*8)(r1) - stfd f9, 72+(8*8)(r1) - stfd f10, 72+(9*8)(r1) - stfd f11, 72+(10*8)(r1) - stfd f12, 72+(11*8)(r1) - stfd f13, 72+(12*8)(r1) - - /* set up registers for the routine that actually does the work */ - /* get the context pointer from the trampoline */ - mr r3, r11 - - /* now load up the pointer to the result storage */ - addi r4, r1, 56 - - /* now load up the pointer to the saved gpr registers */ - addi r5, r1, 200 - - /* now load up the pointer to the saved fpr registers */ - addi r6, r1, 72 - - /* make the call */ - bl .ffi_closure_helper_DARWIN - nop - - /* now r3 contains the return type */ - /* so use it to look up in a table */ - /* so we know how to deal with each type */ - - /* look up the proper starting point in table */ - /* by using return type as offset */ - lwz r4, LC..60(2) /* get address of jump table */ - slwi r3, r3, 4 /* now multiply return type by 4 */ - lwz r0, 176+8(r1) /* load return address */ - add r3, r3, r4 /* add contents of table to table address */ - mtctr r3 - bctr /* jump to it */ - -/* Each fragment must be exactly 16 bytes long (4 instructions). - Align to 16 byte boundary for cache and dispatch efficiency. */ - .align 4 - -L..60: -/* case FFI_TYPE_VOID */ - mtlr r0 - addi r1, r1, 176 - blr - nop - -/* case FFI_TYPE_INT */ - lwz r3, 56+0(r1) - mtlr r0 - addi r1, r1, 176 - blr - -/* case FFI_TYPE_FLOAT */ - lfs f1, 56+0(r1) - mtlr r0 - addi r1, r1, 176 - blr - -/* case FFI_TYPE_DOUBLE */ - lfd f1, 56+0(r1) - mtlr r0 - addi r1, r1, 176 - blr - -/* case FFI_TYPE_LONGDOUBLE */ - lfd f1, 56+0(r1) - mtlr r0 - lfd f2, 56+8(r1) - b L..finish - -/* case FFI_TYPE_UINT8 */ - lbz r3, 56+3(r1) - mtlr r0 - addi r1, r1, 176 - blr - -/* case FFI_TYPE_SINT8 */ - lbz r3, 56+3(r1) - mtlr r0 - extsb r3, r3 - b L..finish - -/* case FFI_TYPE_UINT16 */ - lhz r3, 56+2(r1) - mtlr r0 - addi r1, r1, 176 - blr - -/* case FFI_TYPE_SINT16 */ - lha r3, 56+2(r1) - mtlr r0 - addi r1, r1, 176 - blr - -/* case FFI_TYPE_UINT32 */ - lwz r3, 56+0(r1) - mtlr r0 - addi r1, r1, 176 - blr - -/* case FFI_TYPE_SINT32 */ - lwz r3, 56+0(r1) - mtlr r0 - addi r1, r1, 176 - blr - -/* case FFI_TYPE_UINT64 */ - lwz r3, 56+0(r1) - mtlr r0 - lwz r4, 56+4(r1) - b L..finish - -/* case FFI_TYPE_SINT64 */ - lwz r3, 56+0(r1) - mtlr r0 - lwz r4, 56+4(r1) - b L..finish - -/* case FFI_TYPE_STRUCT */ - mtlr r0 - addi r1, r1, 176 - blr - nop - -/* case FFI_TYPE_POINTER */ - lwz r3, 56+0(r1) - mtlr r0 -L..finish: - addi r1, r1, 176 - blr -#endif -/* END(ffi_closure_ASM) */ diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/asm.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/asm.h deleted file mode 100644 index 994f62d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/asm.h +++ /dev/null @@ -1,125 +0,0 @@ -/* ----------------------------------------------------------------------- - asm.h - Copyright (c) 1998 Geoffrey Keating - - PowerPC Assembly glue. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR - OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#define ASM_GLOBAL_DIRECTIVE .globl - - -#define C_SYMBOL_NAME(name) name -/* Macro for a label. */ -#ifdef __STDC__ -#define C_LABEL(name) name##: -#else -#define C_LABEL(name) name/**/: -#endif - -/* This seems to always be the case on PPC. */ -#define ALIGNARG(log2) log2 -/* For ELF we need the `.type' directive to make shared libs work right. */ -#define ASM_TYPE_DIRECTIVE(name,typearg) .type name,typearg; -#define ASM_SIZE_DIRECTIVE(name) .size name,.-name - -/* If compiled for profiling, call `_mcount' at the start of each function. */ -#ifdef PROF -/* The mcount code relies on the return address being on the stack - to locate our caller and so it can restore it; so store one just - for its benefit. */ -#ifdef PIC -#define CALL_MCOUNT \ - .pushsection; \ - .section ".data"; \ - .align ALIGNARG(2); \ -0:.long 0; \ - .previous; \ - mflr %r0; \ - stw %r0,4(%r1); \ - bl _GLOBAL_OFFSET_TABLE_@local-4; \ - mflr %r11; \ - lwz %r0,0b@got(%r11); \ - bl JUMPTARGET(_mcount); -#else /* PIC */ -#define CALL_MCOUNT \ - .section ".data"; \ - .align ALIGNARG(2); \ -0:.long 0; \ - .previous; \ - mflr %r0; \ - lis %r11,0b@ha; \ - stw %r0,4(%r1); \ - addi %r0,%r11,0b@l; \ - bl JUMPTARGET(_mcount); -#endif /* PIC */ -#else /* PROF */ -#define CALL_MCOUNT /* Do nothing. */ -#endif /* PROF */ - -#define ENTRY(name) \ - ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name); \ - ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function) \ - .align ALIGNARG(2); \ - C_LABEL(name) \ - CALL_MCOUNT - -#define EALIGN_W_0 /* No words to insert. */ -#define EALIGN_W_1 nop -#define EALIGN_W_2 nop;nop -#define EALIGN_W_3 nop;nop;nop -#define EALIGN_W_4 EALIGN_W_3;nop -#define EALIGN_W_5 EALIGN_W_4;nop -#define EALIGN_W_6 EALIGN_W_5;nop -#define EALIGN_W_7 EALIGN_W_6;nop - -/* EALIGN is like ENTRY, but does alignment to 'words'*4 bytes - past a 2^align boundary. */ -#ifdef PROF -#define EALIGN(name, alignt, words) \ - ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name); \ - ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function) \ - .align ALIGNARG(2); \ - C_LABEL(name) \ - CALL_MCOUNT \ - b 0f; \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - 0: -#else /* PROF */ -#define EALIGN(name, alignt, words) \ - ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name); \ - ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function) \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - C_LABEL(name) -#endif - -#define END(name) \ - ASM_SIZE_DIRECTIVE(name) - -#ifdef PIC -#define JUMPTARGET(name) name##@plt -#else -#define JUMPTARGET(name) name -#endif - -/* Local labels stripped out by the linker. */ -#define L(x) .L##x diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/darwin.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/darwin.S deleted file mode 100644 index 4f987dc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/darwin.S +++ /dev/null @@ -1,383 +0,0 @@ -/* ----------------------------------------------------------------------- - darwin.S - Copyright (c) 2000 John Hornkvist - Copyright (c) 2004, 2010 Free Software Foundation, Inc. - - PowerPC Assembly glue. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR - OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#if defined(__ppc64__) -#define MODE_CHOICE(x, y) y -#else -#define MODE_CHOICE(x, y) x -#endif - -#define machine_choice MODE_CHOICE(ppc7400,ppc64) - -; Define some pseudo-opcodes for size-independent load & store of GPRs ... -#define lgu MODE_CHOICE(lwzu, ldu) -#define lg MODE_CHOICE(lwz,ld) -#define sg MODE_CHOICE(stw,std) -#define sgu MODE_CHOICE(stwu,stdu) -#define sgux MODE_CHOICE(stwux,stdux) - -; ... and the size of GPRs and their storage indicator. -#define GPR_BYTES MODE_CHOICE(4,8) -#define LOG2_GPR_BYTES MODE_CHOICE(2,3) /* log2(GPR_BYTES) */ -#define g_long MODE_CHOICE(long, quad) /* usage is ".g_long" */ - -; From the ABI doc: "Mac OS X ABI Function Call Guide" Version 2009-02-04. -#define LINKAGE_SIZE MODE_CHOICE(24,48) -#define PARAM_AREA MODE_CHOICE(32,64) -#define SAVED_LR_OFFSET MODE_CHOICE(8,16) /* save position for lr */ - -/* If there is any FP stuff we make space for all of the regs. */ -#define SAVED_FPR_COUNT 13 -#define FPR_SIZE 8 -#define RESULT_BYTES 16 - -/* This should be kept in step with the same value in ffi_darwin.c. */ -#define ASM_NEEDS_REGISTERS 4 -#define SAVE_REGS_SIZE (ASM_NEEDS_REGISTERS * GPR_BYTES) - -#include -#include - -#define JUMPTARGET(name) name -#define L(x) x - - .text - .align 2 - .globl _ffi_prep_args - - .align 2 - .globl _ffi_call_DARWIN - - /* We arrive here with: - r3 = ptr to extended cif. - r4 = -bytes. - r5 = cif flags. - r6 = ptr to return value. - r7 = fn pointer (user func). - r8 = fn pointer (ffi_prep_args). - r9 = ffi_type* for the ret val. */ - -_ffi_call_DARWIN: -Lstartcode: - mr r12,r8 /* We only need r12 until the call, - so it does not have to be saved. */ -LFB1: - /* Save the old stack pointer as AP. */ - mr r8,r1 -LCFI0: - - /* Save the retval type in parents frame. */ - sg r9,(LINKAGE_SIZE+6*GPR_BYTES)(r8) - - /* Allocate the stack space we need. */ - sgux r1,r1,r4 - - /* Save registers we use. */ - mflr r9 - sg r9,SAVED_LR_OFFSET(r8) - - sg r28,-(4 * GPR_BYTES)(r8) - sg r29,-(3 * GPR_BYTES)(r8) - sg r30,-(2 * GPR_BYTES)(r8) - sg r31,-( GPR_BYTES)(r8) - -#if !defined(POWERPC_DARWIN) - /* The TOC slot is reserved in the Darwin ABI and r2 is volatile. */ - sg r2,(5 * GPR_BYTES)(r1) -#endif - -LCFI1: - - /* Save arguments over call. */ - mr r31,r5 /* flags, */ - mr r30,r6 /* rvalue, */ - mr r29,r7 /* function address, */ - mr r28,r8 /* our AP. */ -LCFI2: - /* Call ffi_prep_args. r3 = extended cif, r4 = stack ptr copy. */ - mr r4,r1 - li r9,0 - - mtctr r12 /* r12 holds address of _ffi_prep_args. */ - bctrl - -#if !defined(POWERPC_DARWIN) - /* The TOC slot is reserved in the Darwin ABI and r2 is volatile. */ - lg r2,(5 * GPR_BYTES)(r1) -#endif - /* Now do the call. - Set up cr1 with bits 4-7 of the flags. */ - mtcrf 0x40,r31 - /* Get the address to call into CTR. */ - mtctr r29 - /* Load all those argument registers. - We have set up a nice stack frame, just load it into registers. */ - lg r3, (LINKAGE_SIZE )(r1) - lg r4, (LINKAGE_SIZE + GPR_BYTES)(r1) - lg r5, (LINKAGE_SIZE + 2 * GPR_BYTES)(r1) - lg r6, (LINKAGE_SIZE + 3 * GPR_BYTES)(r1) - nop - lg r7, (LINKAGE_SIZE + 4 * GPR_BYTES)(r1) - lg r8, (LINKAGE_SIZE + 5 * GPR_BYTES)(r1) - lg r9, (LINKAGE_SIZE + 6 * GPR_BYTES)(r1) - lg r10,(LINKAGE_SIZE + 7 * GPR_BYTES)(r1) - -L1: - /* ... Load all the FP registers. */ - bf 6,L2 /* No floats to load. */ - lfd f1, -SAVE_REGS_SIZE-(13*FPR_SIZE)(r28) - lfd f2, -SAVE_REGS_SIZE-(12*FPR_SIZE)(r28) - lfd f3, -SAVE_REGS_SIZE-(11*FPR_SIZE)(r28) - lfd f4, -SAVE_REGS_SIZE-(10*FPR_SIZE)(r28) - nop - lfd f5, -SAVE_REGS_SIZE-( 9*FPR_SIZE)(r28) - lfd f6, -SAVE_REGS_SIZE-( 8*FPR_SIZE)(r28) - lfd f7, -SAVE_REGS_SIZE-( 7*FPR_SIZE)(r28) - lfd f8, -SAVE_REGS_SIZE-( 6*FPR_SIZE)(r28) - nop - lfd f9, -SAVE_REGS_SIZE-( 5*FPR_SIZE)(r28) - lfd f10,-SAVE_REGS_SIZE-( 4*FPR_SIZE)(r28) - lfd f11,-SAVE_REGS_SIZE-( 3*FPR_SIZE)(r28) - lfd f12,-SAVE_REGS_SIZE-( 2*FPR_SIZE)(r28) - nop - lfd f13,-SAVE_REGS_SIZE-( 1*FPR_SIZE)(r28) - -L2: - mr r12,r29 /* Put the target address in r12 as specified. */ - mtctr r12 - nop - nop - - /* Make the call. */ - bctrl - - /* Now, deal with the return value. */ - - /* m64 structure returns can occupy the same set of registers as - would be used to pass such a structure as arg0 - so take care - not to step on any possibly hot regs. */ - - /* Get the flags.. */ - mtcrf 0x03,r31 ; we need c6 & cr7 now. - ; FLAG_RETURNS_NOTHING also covers struct ret-by-ref. - bt 30,L(done_return_value) ; FLAG_RETURNS_NOTHING - bf 27,L(scalar_return_value) ; not FLAG_RETURNS_STRUCT - - /* OK, so we have a struct. */ -#if defined(__ppc64__) - bt 31,L(maybe_return_128) ; FLAG_RETURNS_128BITS, special case - - /* OK, we have to map the return back to a mem struct. - We are about to trample the parents param area, so recover the - return type. r29 is free, since the call is done. */ - lg r29,(LINKAGE_SIZE + 6 * GPR_BYTES)(r28) - - sg r3, (LINKAGE_SIZE )(r28) - sg r4, (LINKAGE_SIZE + GPR_BYTES)(r28) - sg r5, (LINKAGE_SIZE + 2 * GPR_BYTES)(r28) - sg r6, (LINKAGE_SIZE + 3 * GPR_BYTES)(r28) - nop - sg r7, (LINKAGE_SIZE + 4 * GPR_BYTES)(r28) - sg r8, (LINKAGE_SIZE + 5 * GPR_BYTES)(r28) - sg r9, (LINKAGE_SIZE + 6 * GPR_BYTES)(r28) - sg r10,(LINKAGE_SIZE + 7 * GPR_BYTES)(r28) - /* OK, so do the block move - we trust that memcpy will not trample - the fprs... */ - mr r3,r30 ; dest - addi r4,r28,LINKAGE_SIZE ; source - /* The size is a size_t, should be long. */ - lg r5,0(r29) - /* Figure out small structs */ - cmpi 0,r5,4 - bgt L3 ; 1, 2 and 4 bytes have special rules. - cmpi 0,r5,3 - beq L3 ; not 3 - addi r4,r4,8 - subf r4,r5,r4 -L3: - bl _memcpy - - /* ... do we need the FP registers? - recover the flags.. */ - mtcrf 0x03,r31 ; we need c6 & cr7 now. - bf 29,L(done_return_value) /* No floats in the struct. */ - stfd f1, -SAVE_REGS_SIZE-(13*FPR_SIZE)(r28) - stfd f2, -SAVE_REGS_SIZE-(12*FPR_SIZE)(r28) - stfd f3, -SAVE_REGS_SIZE-(11*FPR_SIZE)(r28) - stfd f4, -SAVE_REGS_SIZE-(10*FPR_SIZE)(r28) - nop - stfd f5, -SAVE_REGS_SIZE-( 9*FPR_SIZE)(r28) - stfd f6, -SAVE_REGS_SIZE-( 8*FPR_SIZE)(r28) - stfd f7, -SAVE_REGS_SIZE-( 7*FPR_SIZE)(r28) - stfd f8, -SAVE_REGS_SIZE-( 6*FPR_SIZE)(r28) - nop - stfd f9, -SAVE_REGS_SIZE-( 5*FPR_SIZE)(r28) - stfd f10,-SAVE_REGS_SIZE-( 4*FPR_SIZE)(r28) - stfd f11,-SAVE_REGS_SIZE-( 3*FPR_SIZE)(r28) - stfd f12,-SAVE_REGS_SIZE-( 2*FPR_SIZE)(r28) - nop - stfd f13,-SAVE_REGS_SIZE-( 1*FPR_SIZE)(r28) - - mr r3,r29 ; ffi_type * - mr r4,r30 ; dest - addi r5,r28,-SAVE_REGS_SIZE-(13*FPR_SIZE) ; fprs - xor r6,r6,r6 - sg r6,(LINKAGE_SIZE + 7 * GPR_BYTES)(r28) - addi r6,r28,(LINKAGE_SIZE + 7 * GPR_BYTES) ; point to a zeroed counter. - bl _darwin64_struct_floats_to_mem - - b L(done_return_value) -#else - stw r3,0(r30) ; m32 the only struct return in reg is 4 bytes. -#endif - b L(done_return_value) - -L(fp_return_value): - /* Do we have long double to store? */ - bf 31,L(fd_return_value) ; FLAG_RETURNS_128BITS - stfd f1,0(r30) - stfd f2,FPR_SIZE(r30) - b L(done_return_value) - -L(fd_return_value): - /* Do we have double to store? */ - bf 28,L(float_return_value) - stfd f1,0(r30) - b L(done_return_value) - -L(float_return_value): - /* We only have a float to store. */ - stfs f1,0(r30) - b L(done_return_value) - -L(scalar_return_value): - bt 29,L(fp_return_value) ; FLAG_RETURNS_FP - ; ffi_arg is defined as unsigned long. - sg r3,0(r30) ; Save the reg. - bf 28,L(done_return_value) ; not FLAG_RETURNS_64BITS - -#if defined(__ppc64__) -L(maybe_return_128): - std r3,0(r30) - bf 31,L(done_return_value) ; not FLAG_RETURNS_128BITS - std r4,8(r30) -#else - stw r4,4(r30) -#endif - - /* Fall through. */ - /* We want this at the end to simplify eh epilog computation. */ - -L(done_return_value): - /* Restore the registers we used and return. */ - lg r29,SAVED_LR_OFFSET(r28) - ; epilog - lg r31,-(1 * GPR_BYTES)(r28) - mtlr r29 - lg r30,-(2 * GPR_BYTES)(r28) - lg r29,-(3 * GPR_BYTES)(r28) - lg r28,-(4 * GPR_BYTES)(r28) - lg r1,0(r1) - blr -LFE1: - .align 1 -/* END(_ffi_call_DARWIN) */ - -/* Provide a null definition of _ffi_call_AIX. */ - .text - .globl _ffi_call_AIX - .align 2 -_ffi_call_AIX: - blr -/* END(_ffi_call_AIX) */ - -/* EH stuff. */ - -#define EH_DATA_ALIGN_FACT MODE_CHOICE(0x7c,0x78) - - .static_data - .align LOG2_GPR_BYTES -LLFB0$non_lazy_ptr: - .g_long Lstartcode - - .section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support -EH_frame1: - .set L$set$0,LECIE1-LSCIE1 - .long L$set$0 ; Length of Common Information Entry -LSCIE1: - .long 0x0 ; CIE Identifier Tag - .byte 0x1 ; CIE Version - .ascii "zR\0" ; CIE Augmentation - .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor - .byte EH_DATA_ALIGN_FACT ; sleb128 -4; CIE Data Alignment Factor - .byte 0x41 ; CIE RA Column - .byte 0x1 ; uleb128 0x1; Augmentation size - .byte 0x10 ; FDE Encoding (indirect pcrel) - .byte 0xc ; DW_CFA_def_cfa - .byte 0x1 ; uleb128 0x1 - .byte 0x0 ; uleb128 0x0 - .align LOG2_GPR_BYTES -LECIE1: - - .globl _ffi_call_DARWIN.eh -_ffi_call_DARWIN.eh: -LSFDE1: - .set L$set$1,LEFDE1-LASFDE1 - .long L$set$1 ; FDE Length -LASFDE1: - .long LASFDE1-EH_frame1 ; FDE CIE offset - .g_long LLFB0$non_lazy_ptr-. ; FDE initial location - .set L$set$3,LFE1-Lstartcode - .g_long L$set$3 ; FDE address range - .byte 0x0 ; uleb128 0x0; Augmentation size - .byte 0x4 ; DW_CFA_advance_loc4 - .set L$set$4,LCFI0-Lstartcode - .long L$set$4 - .byte 0xd ; DW_CFA_def_cfa_register - .byte 0x08 ; uleb128 0x08 - .byte 0x4 ; DW_CFA_advance_loc4 - .set L$set$5,LCFI1-LCFI0 - .long L$set$5 - .byte 0x11 ; DW_CFA_offset_extended_sf - .byte 0x41 ; uleb128 0x41 - .byte 0x7e ; sleb128 -2 - .byte 0x9f ; DW_CFA_offset, column 0x1f - .byte 0x1 ; uleb128 0x1 - .byte 0x9e ; DW_CFA_offset, column 0x1e - .byte 0x2 ; uleb128 0x2 - .byte 0x9d ; DW_CFA_offset, column 0x1d - .byte 0x3 ; uleb128 0x3 - .byte 0x9c ; DW_CFA_offset, column 0x1c - .byte 0x4 ; uleb128 0x4 - .byte 0x4 ; DW_CFA_advance_loc4 - .set L$set$6,LCFI2-LCFI1 - .long L$set$6 - .byte 0xd ; DW_CFA_def_cfa_register - .byte 0x1c ; uleb128 0x1c - .align LOG2_GPR_BYTES -LEFDE1: - .align 1 - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/darwin_closure.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/darwin_closure.S deleted file mode 100644 index db20cf6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +++ /dev/null @@ -1,575 +0,0 @@ -/* ----------------------------------------------------------------------- - darwin_closure.S - Copyright (c) 2002, 2003, 2004, 2010, - Free Software Foundation, Inc. - based on ppc_closure.S - - PowerPC Assembly glue. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR - OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#define L(x) x - -#if defined(__ppc64__) -#define MODE_CHOICE(x, y) y -#else -#define MODE_CHOICE(x, y) x -#endif - -#define machine_choice MODE_CHOICE(ppc7400,ppc64) - -; Define some pseudo-opcodes for size-independent load & store of GPRs ... -#define lgu MODE_CHOICE(lwzu, ldu) -#define lg MODE_CHOICE(lwz,ld) -#define sg MODE_CHOICE(stw,std) -#define sgu MODE_CHOICE(stwu,stdu) - -; ... and the size of GPRs and their storage indicator. -#define GPR_BYTES MODE_CHOICE(4,8) -#define LOG2_GPR_BYTES MODE_CHOICE(2,3) /* log2(GPR_BYTES) */ -#define g_long MODE_CHOICE(long, quad) /* usage is ".g_long" */ - -; From the ABI doc: "Mac OS X ABI Function Call Guide" Version 2009-02-04. -#define LINKAGE_SIZE MODE_CHOICE(24,48) -#define PARAM_AREA MODE_CHOICE(32,64) - -#define SAVED_CR_OFFSET MODE_CHOICE(4,8) /* save position for CR */ -#define SAVED_LR_OFFSET MODE_CHOICE(8,16) /* save position for lr */ - -/* WARNING: if ffi_type is changed... here be monsters. - Offsets of items within the result type. */ -#define FFI_TYPE_TYPE MODE_CHOICE(6,10) -#define FFI_TYPE_ELEM MODE_CHOICE(8,16) - -#define SAVED_FPR_COUNT 13 -#define FPR_SIZE 8 -/* biggest m64 struct ret is 8GPRS + 13FPRS = 168 bytes - rounded to 16bytes = 176. */ -#define RESULT_BYTES MODE_CHOICE(16,176) - -; The whole stack frame **MUST** be 16byte-aligned. -#define SAVE_SIZE (((LINKAGE_SIZE+PARAM_AREA+SAVED_FPR_COUNT*FPR_SIZE+RESULT_BYTES)+15) & -16LL) -#define PAD_SIZE (SAVE_SIZE-(LINKAGE_SIZE+PARAM_AREA+SAVED_FPR_COUNT*FPR_SIZE+RESULT_BYTES)) - -#define PARENT_PARM_BASE (SAVE_SIZE+LINKAGE_SIZE) -#define FP_SAVE_BASE (LINKAGE_SIZE+PARAM_AREA) - -#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050 -; We no longer need the pic symbol stub for Darwin >= 9. -#define BLCLS_HELP _ffi_closure_helper_DARWIN -#define STRUCT_RETVALUE_P _darwin64_struct_ret_by_value_p -#define PASS_STR_FLOATS _darwin64_pass_struct_floats -#undef WANT_STUB -#else -#define BLCLS_HELP L_ffi_closure_helper_DARWIN$stub -#define STRUCT_RETVALUE_P L_darwin64_struct_ret_by_value_p$stub -#define PASS_STR_FLOATS L_darwin64_pass_struct_floats$stub -#define WANT_STUB -#endif - -/* m32/m64 - - The stack layout looks like this: - - | Additional params... | | Higher address - ~ ~ ~ - | Parameters (at least 8*4/8=32/64) | | NUM_GPR_ARG_REGISTERS - |--------------------------------------------| | - | TOC=R2 (AIX) Reserved (Darwin) 4/8 | | - |--------------------------------------------| | - | Reserved 2*4/8 | | - |--------------------------------------------| | - | Space for callee`s LR 4/8 | | - |--------------------------------------------| | - | Saved CR [low word for m64] 4/8 | | - |--------------------------------------------| | - | Current backchain pointer 4/8 |-/ Parent`s frame. - |--------------------------------------------| <+ <<< on entry to - | Result Bytes 16/176 | | - |--------------------------------------------| | - ~ padding to 16-byte alignment ~ ~ - |--------------------------------------------| | - | NUM_FPR_ARG_REGISTERS slots | | - | here fp13 .. fp1 13*8 | | - |--------------------------------------------| | - | R3..R10 8*4/8=32/64 | | NUM_GPR_ARG_REGISTERS - |--------------------------------------------| | - | TOC=R2 (AIX) Reserved (Darwin) 4/8 | | - |--------------------------------------------| | stack | - | Reserved [compiler,binder] 2*4/8 | | grows | - |--------------------------------------------| | down V - | Space for callees LR 4/8 | | - |--------------------------------------------| | lower addresses - | Saved CR [low word for m64] 4/8 | | - |--------------------------------------------| | stack pointer here - | Current backchain pointer 4/8 |-/ during - |--------------------------------------------| <<< call. - -*/ - - .file "darwin_closure.S" - - .machine machine_choice - - .text - .globl _ffi_closure_ASM - .align LOG2_GPR_BYTES -_ffi_closure_ASM: -LFB1: -Lstartcode: - mflr r0 /* extract return address */ - sg r0,SAVED_LR_OFFSET(r1) /* save the return address */ -LCFI0: - sgu r1,-SAVE_SIZE(r1) /* skip over caller save area - keep stack aligned to 16. */ -LCFI1: - /* We want to build up an area for the parameters passed - in registers. (both floating point and integer) */ - - /* Put gpr 3 to gpr 10 in the parents outgoing area... - ... the remainder of any params that overflowed the regs will - follow here. */ - sg r3, (PARENT_PARM_BASE )(r1) - sg r4, (PARENT_PARM_BASE + GPR_BYTES )(r1) - sg r5, (PARENT_PARM_BASE + GPR_BYTES * 2)(r1) - sg r6, (PARENT_PARM_BASE + GPR_BYTES * 3)(r1) - sg r7, (PARENT_PARM_BASE + GPR_BYTES * 4)(r1) - sg r8, (PARENT_PARM_BASE + GPR_BYTES * 5)(r1) - sg r9, (PARENT_PARM_BASE + GPR_BYTES * 6)(r1) - sg r10,(PARENT_PARM_BASE + GPR_BYTES * 7)(r1) - - /* We save fpr 1 to fpr 14 in our own save frame. */ - stfd f1, (FP_SAVE_BASE )(r1) - stfd f2, (FP_SAVE_BASE + FPR_SIZE )(r1) - stfd f3, (FP_SAVE_BASE + FPR_SIZE * 2 )(r1) - stfd f4, (FP_SAVE_BASE + FPR_SIZE * 3 )(r1) - stfd f5, (FP_SAVE_BASE + FPR_SIZE * 4 )(r1) - stfd f6, (FP_SAVE_BASE + FPR_SIZE * 5 )(r1) - stfd f7, (FP_SAVE_BASE + FPR_SIZE * 6 )(r1) - stfd f8, (FP_SAVE_BASE + FPR_SIZE * 7 )(r1) - stfd f9, (FP_SAVE_BASE + FPR_SIZE * 8 )(r1) - stfd f10,(FP_SAVE_BASE + FPR_SIZE * 9 )(r1) - stfd f11,(FP_SAVE_BASE + FPR_SIZE * 10)(r1) - stfd f12,(FP_SAVE_BASE + FPR_SIZE * 11)(r1) - stfd f13,(FP_SAVE_BASE + FPR_SIZE * 12)(r1) - - /* Set up registers for the routine that actually does the work - get the context pointer from the trampoline. */ - mr r3,r11 - - /* Now load up the pointer to the result storage. */ - addi r4,r1,(SAVE_SIZE-RESULT_BYTES) - - /* Now load up the pointer to the saved gpr registers. */ - addi r5,r1,PARENT_PARM_BASE - - /* Now load up the pointer to the saved fpr registers. */ - addi r6,r1,FP_SAVE_BASE - - /* Make the call. */ - bl BLCLS_HELP - - /* r3 contains the rtype pointer... save it since we will need - it later. */ - sg r3,LINKAGE_SIZE(r1) ; ffi_type * result_type - lg r0,0(r3) ; size => r0 - lhz r3,FFI_TYPE_TYPE(r3) ; type => r3 - - /* The helper will have intercepted struture returns and inserted - the caller`s destination address for structs returned by ref. */ - - /* r3 contains the return type so use it to look up in a table - so we know how to deal with each type. */ - - addi r5,r1,(SAVE_SIZE-RESULT_BYTES) /* Otherwise, our return is here. */ - bl Lget_ret_type0_addr /* Get pointer to Lret_type0 into LR. */ - mflr r4 /* Move to r4. */ - slwi r3,r3,4 /* Now multiply return type by 16. */ - add r3,r3,r4 /* Add contents of table to table address. */ - mtctr r3 - bctr /* Jump to it. */ -LFE1: -/* Each of the ret_typeX code fragments has to be exactly 16 bytes long - (4 instructions). For cache effectiveness we align to a 16 byte boundary - first. */ - - .align 4 - - nop - nop - nop -Lget_ret_type0_addr: - blrl - -/* case FFI_TYPE_VOID */ -Lret_type0: - b Lfinish - nop - nop - nop - -/* case FFI_TYPE_INT */ -Lret_type1: - lg r3,0(r5) - b Lfinish - nop - nop - -/* case FFI_TYPE_FLOAT */ -Lret_type2: - lfs f1,0(r5) - b Lfinish - nop - nop - -/* case FFI_TYPE_DOUBLE */ -Lret_type3: - lfd f1,0(r5) - b Lfinish - nop - nop - -/* case FFI_TYPE_LONGDOUBLE */ -Lret_type4: - lfd f1,0(r5) - lfd f2,8(r5) - b Lfinish - nop - -/* case FFI_TYPE_UINT8 */ -Lret_type5: -#if defined(__ppc64__) - lbz r3,7(r5) -#else - lbz r3,3(r5) -#endif - b Lfinish - nop - nop - -/* case FFI_TYPE_SINT8 */ -Lret_type6: -#if defined(__ppc64__) - lbz r3,7(r5) -#else - lbz r3,3(r5) -#endif - extsb r3,r3 - b Lfinish - nop - -/* case FFI_TYPE_UINT16 */ -Lret_type7: -#if defined(__ppc64__) - lhz r3,6(r5) -#else - lhz r3,2(r5) -#endif - b Lfinish - nop - nop - -/* case FFI_TYPE_SINT16 */ -Lret_type8: -#if defined(__ppc64__) - lha r3,6(r5) -#else - lha r3,2(r5) -#endif - b Lfinish - nop - nop - -/* case FFI_TYPE_UINT32 */ -Lret_type9: -#if defined(__ppc64__) - lwz r3,4(r5) -#else - lwz r3,0(r5) -#endif - b Lfinish - nop - nop - -/* case FFI_TYPE_SINT32 */ -Lret_type10: -#if defined(__ppc64__) - lwz r3,4(r5) -#else - lwz r3,0(r5) -#endif - b Lfinish - nop - nop - -/* case FFI_TYPE_UINT64 */ -Lret_type11: -#if defined(__ppc64__) - lg r3,0(r5) - b Lfinish - nop -#else - lwz r3,0(r5) - lwz r4,4(r5) - b Lfinish -#endif - nop - -/* case FFI_TYPE_SINT64 */ -Lret_type12: -#if defined(__ppc64__) - lg r3,0(r5) - b Lfinish - nop -#else - lwz r3,0(r5) - lwz r4,4(r5) - b Lfinish -#endif - nop - -/* case FFI_TYPE_STRUCT */ -Lret_type13: -#if defined(__ppc64__) - lg r3,0(r5) ; we need at least this... - cmpi 0,r0,4 - bgt Lstructend ; not a special small case - b Lsmallstruct ; see if we need more. -#else - cmpi 0,r0,4 - bgt Lfinish ; not by value - lg r3,0(r5) - b Lfinish -#endif -/* case FFI_TYPE_POINTER */ -Lret_type14: - lg r3,0(r5) - b Lfinish - nop - nop - -#if defined(__ppc64__) -Lsmallstruct: - beq Lfour ; continuation of Lret13. - cmpi 0,r0,3 - beq Lfinish ; don`t adjust this - can`t be any floats here... - srdi r3,r3,48 - cmpi 0,r0,2 - beq Lfinish ; .. or here .. - srdi r3,r3,8 - b Lfinish ; .. or here. - -Lfour: - lg r6,LINKAGE_SIZE(r1) ; get the result type - lg r6,FFI_TYPE_ELEM(r6) ; elements array pointer - lg r6,0(r6) ; first element - lhz r0,FFI_TYPE_TYPE(r6) ; OK go the type - cmpi 0,r0,2 ; FFI_TYPE_FLOAT - bne Lfourint - lfs f1,0(r5) ; just one float in the struct. - b Lfinish - -Lfourint: - srdi r3,r3,32 ; four bytes. - b Lfinish - -Lstructend: - lg r3,LINKAGE_SIZE(r1) ; get the result type - bl STRUCT_RETVALUE_P - cmpi 0,r3,0 - beq Lfinish ; nope. - /* Recover a pointer to the results. */ - addi r11,r1,(SAVE_SIZE-RESULT_BYTES) - lg r3,0(r11) ; we need at least this... - lg r4,8(r11) - cmpi 0,r0,16 - beq Lfinish ; special case 16 bytes we don't consider floats. - - /* OK, frustratingly, the process of saving the struct to mem might have - messed with the FPRs, so we have to re-load them :(. - We`ll use our FPRs space again - calling: - void darwin64_pass_struct_floats (ffi_type *s, char *src, - unsigned *nfpr, double **fprs) - We`ll temporarily pinch the first two slots of the param area for local - vars used by the routine. */ - xor r6,r6,r6 - addi r5,r1,PARENT_PARM_BASE ; some space - sg r6,0(r5) ; *nfpr zeroed. - addi r6,r5,8 ; **fprs - addi r3,r1,FP_SAVE_BASE ; pointer to FPRs space - sg r3,0(r6) - mr r4,r11 ; the struct is here... - lg r3,LINKAGE_SIZE(r1) ; ffi_type * result_type. - bl PASS_STR_FLOATS ; get struct floats into FPR save space. - /* See if we used any floats */ - lwz r0,(SAVE_SIZE-RESULT_BYTES)(r1) - cmpi 0,r0,0 - beq Lstructints ; nope. - /* OK load `em up... */ - lfd f1, (FP_SAVE_BASE )(r1) - lfd f2, (FP_SAVE_BASE + FPR_SIZE )(r1) - lfd f3, (FP_SAVE_BASE + FPR_SIZE * 2 )(r1) - lfd f4, (FP_SAVE_BASE + FPR_SIZE * 3 )(r1) - lfd f5, (FP_SAVE_BASE + FPR_SIZE * 4 )(r1) - lfd f6, (FP_SAVE_BASE + FPR_SIZE * 5 )(r1) - lfd f7, (FP_SAVE_BASE + FPR_SIZE * 6 )(r1) - lfd f8, (FP_SAVE_BASE + FPR_SIZE * 7 )(r1) - lfd f9, (FP_SAVE_BASE + FPR_SIZE * 8 )(r1) - lfd f10,(FP_SAVE_BASE + FPR_SIZE * 9 )(r1) - lfd f11,(FP_SAVE_BASE + FPR_SIZE * 10)(r1) - lfd f12,(FP_SAVE_BASE + FPR_SIZE * 11)(r1) - lfd f13,(FP_SAVE_BASE + FPR_SIZE * 12)(r1) - - /* point back at our saved struct. */ -Lstructints: - addi r11,r1,(SAVE_SIZE-RESULT_BYTES) - lg r3,0(r11) ; we end up picking the - lg r4,8(r11) ; first two again. - lg r5,16(r11) - lg r6,24(r11) - lg r7,32(r11) - lg r8,40(r11) - lg r9,48(r11) - lg r10,56(r11) -#endif - -/* case done */ -Lfinish: - addi r1,r1,SAVE_SIZE /* Restore stack pointer. */ - lg r0,SAVED_LR_OFFSET(r1) /* Get return address. */ - mtlr r0 /* Reset link register. */ - blr -Lendcode: - .align 1 - -/* END(ffi_closure_ASM) */ - -/* EH frame stuff. */ -#define EH_DATA_ALIGN_FACT MODE_CHOICE(0x7c,0x78) -/* 176, 400 */ -#define EH_FRAME_OFFSETA MODE_CHOICE(176,0x90) -#define EH_FRAME_OFFSETB MODE_CHOICE(1,3) - - .static_data - .align LOG2_GPR_BYTES -LLFB1$non_lazy_ptr: - .g_long Lstartcode - - .section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support -EH_frame1: - .set L$set$0,LECIE1-LSCIE1 - .long L$set$0 ; Length of Common Information Entry -LSCIE1: - .long 0x0 ; CIE Identifier Tag - .byte 0x1 ; CIE Version - .ascii "zR\0" ; CIE Augmentation - .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor - .byte EH_DATA_ALIGN_FACT ; sleb128 -4; CIE Data Alignment Factor - .byte 0x41 ; CIE RA Column - .byte 0x1 ; uleb128 0x1; Augmentation size - .byte 0x10 ; FDE Encoding (indirect pcrel) - .byte 0xc ; DW_CFA_def_cfa - .byte 0x1 ; uleb128 0x1 - .byte 0x0 ; uleb128 0x0 - .align LOG2_GPR_BYTES -LECIE1: - .globl _ffi_closure_ASM.eh -_ffi_closure_ASM.eh: -LSFDE1: - .set L$set$1,LEFDE1-LASFDE1 - .long L$set$1 ; FDE Length - -LASFDE1: - .long LASFDE1-EH_frame1 ; FDE CIE offset - .g_long LLFB1$non_lazy_ptr-. ; FDE initial location - .set L$set$3,LFE1-Lstartcode - .g_long L$set$3 ; FDE address range - .byte 0x0 ; uleb128 0x0; Augmentation size - .byte 0x4 ; DW_CFA_advance_loc4 - .set L$set$3,LCFI1-LCFI0 - .long L$set$3 - .byte 0xe ; DW_CFA_def_cfa_offset - .byte EH_FRAME_OFFSETA,EH_FRAME_OFFSETB ; uleb128 176,1/190,3 - .byte 0x4 ; DW_CFA_advance_loc4 - .set L$set$4,LCFI0-Lstartcode - .long L$set$4 - .byte 0x11 ; DW_CFA_offset_extended_sf - .byte 0x41 ; uleb128 0x41 - .byte 0x7e ; sleb128 -2 - .align LOG2_GPR_BYTES -LEFDE1: - .align 1 - -#ifdef WANT_STUB - .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 - .align 5 -L_ffi_closure_helper_DARWIN$stub: - .indirect_symbol _ffi_closure_helper_DARWIN - mflr r0 - bcl 20,31,"L00000000001$spb" -"L00000000001$spb": - mflr r11 - addis r11,r11,ha16(L_ffi_closure_helper_DARWIN$lazy_ptr-"L00000000001$spb") - mtlr r0 - lwzu r12,lo16(L_ffi_closure_helper_DARWIN$lazy_ptr-"L00000000001$spb")(r11) - mtctr r12 - bctr - .lazy_symbol_pointer -L_ffi_closure_helper_DARWIN$lazy_ptr: - .indirect_symbol _ffi_closure_helper_DARWIN - .long dyld_stub_binding_helper - -#if defined(__ppc64__) - .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 - .align 5 -L_darwin64_struct_ret_by_value_p$stub: - .indirect_symbol _darwin64_struct_ret_by_value_p - mflr r0 - bcl 20,31,"L00000000002$spb" -"L00000000002$spb": - mflr r11 - addis r11,r11,ha16(L_darwin64_struct_ret_by_value_p$lazy_ptr-"L00000000002$spb") - mtlr r0 - lwzu r12,lo16(L_darwin64_struct_ret_by_value_p$lazy_ptr-"L00000000002$spb")(r11) - mtctr r12 - bctr - .lazy_symbol_pointer -L_darwin64_struct_ret_by_value_p$lazy_ptr: - .indirect_symbol _darwin64_struct_ret_by_value_p - .long dyld_stub_binding_helper - .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 - .align 5 -L_darwin64_pass_struct_floats$stub: - .indirect_symbol _darwin64_pass_struct_floats - mflr r0 - bcl 20,31,"L00000000003$spb" -"L00000000003$spb": - mflr r11 - addis r11,r11,ha16(L_darwin64_pass_struct_floats$lazy_ptr-"L00000000003$spb") - mtlr r0 - lwzu r12,lo16(L_darwin64_pass_struct_floats$lazy_ptr-"L00000000003$spb")(r11) - mtctr r12 - bctr - .lazy_symbol_pointer -L_darwin64_pass_struct_floats$lazy_ptr: - .indirect_symbol _darwin64_pass_struct_floats - .long dyld_stub_binding_helper -# endif -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/ffi.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/ffi.c deleted file mode 100644 index fb2a39f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/ffi.c +++ /dev/null @@ -1,1448 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (C) 2011 Anthony Green - Copyright (C) 2008 Red Hat, Inc - Copyright (C) 2007, 2008 Free Software Foundation, Inc - Copyright (c) 1998 Geoffrey Keating - - PowerPC Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR - OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#include -#include - -#include -#include - - -extern void ffi_closure_SYSV (void); -extern void FFI_HIDDEN ffi_closure_LINUX64 (void); - -enum { - /* The assembly depends on these exact flags. */ - FLAG_RETURNS_SMST = 1 << (31-31), /* Used for FFI_SYSV small structs. */ - FLAG_RETURNS_NOTHING = 1 << (31-30), /* These go in cr7 */ - FLAG_RETURNS_FP = 1 << (31-29), - FLAG_RETURNS_64BITS = 1 << (31-28), - - FLAG_RETURNS_128BITS = 1 << (31-27), /* cr6 */ - FLAG_SYSV_SMST_R4 = 1 << (31-26), /* use r4 for FFI_SYSV 8 byte - structs. */ - FLAG_SYSV_SMST_R3 = 1 << (31-25), /* use r3 for FFI_SYSV 4 byte - structs. */ - /* Bits (31-24) through (31-19) store shift value for SMST */ - - FLAG_ARG_NEEDS_COPY = 1 << (31- 7), - FLAG_FP_ARGUMENTS = 1 << (31- 6), /* cr1.eq; specified by ABI */ - FLAG_4_GPR_ARGUMENTS = 1 << (31- 5), - FLAG_RETVAL_REFERENCE = 1 << (31- 4) -}; - -/* About the SYSV ABI. */ -unsigned int NUM_GPR_ARG_REGISTERS = 8; -#ifndef __NO_FPRS__ -unsigned int NUM_FPR_ARG_REGISTERS = 8; -#else -unsigned int NUM_FPR_ARG_REGISTERS = 0; -#endif - -enum { ASM_NEEDS_REGISTERS = 4 }; - -/* ffi_prep_args_SYSV is called by the assembly routine once stack space - has been allocated for the function's arguments. - - The stack layout we want looks like this: - - | Return address from ffi_call_SYSV 4bytes | higher addresses - |--------------------------------------------| - | Previous backchain pointer 4 | stack pointer here - |--------------------------------------------|<+ <<< on entry to - | Saved r28-r31 4*4 | | ffi_call_SYSV - |--------------------------------------------| | - | GPR registers r3-r10 8*4 | | ffi_call_SYSV - |--------------------------------------------| | - | FPR registers f1-f8 (optional) 8*8 | | - |--------------------------------------------| | stack | - | Space for copied structures | | grows | - |--------------------------------------------| | down V - | Parameters that didn't fit in registers | | - |--------------------------------------------| | lower addresses - | Space for callee's LR 4 | | - |--------------------------------------------| | stack pointer here - | Current backchain pointer 4 |-/ during - |--------------------------------------------| <<< ffi_call_SYSV - -*/ - -void -ffi_prep_args_SYSV (extended_cif *ecif, unsigned *const stack) -{ - const unsigned bytes = ecif->cif->bytes; - const unsigned flags = ecif->cif->flags; - - typedef union { - char *c; - unsigned *u; - long long *ll; - float *f; - double *d; - } valp; - - /* 'stacktop' points at the previous backchain pointer. */ - valp stacktop; - - /* 'gpr_base' points at the space for gpr3, and grows upwards as - we use GPR registers. */ - valp gpr_base; - int intarg_count; - - /* 'fpr_base' points at the space for fpr1, and grows upwards as - we use FPR registers. */ - valp fpr_base; - int fparg_count; - - /* 'copy_space' grows down as we put structures in it. It should - stay 16-byte aligned. */ - valp copy_space; - - /* 'next_arg' grows up as we put parameters in it. */ - valp next_arg; - - int i, ii MAYBE_UNUSED; - ffi_type **ptr; - double double_tmp; - union { - void **v; - char **c; - signed char **sc; - unsigned char **uc; - signed short **ss; - unsigned short **us; - unsigned int **ui; - long long **ll; - float **f; - double **d; - } p_argv; - size_t struct_copy_size; - unsigned gprvalue; - - if (ecif->cif->abi == FFI_LINUX_SOFT_FLOAT) - NUM_FPR_ARG_REGISTERS = 0; - - stacktop.c = (char *) stack + bytes; - gpr_base.u = stacktop.u - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS; - intarg_count = 0; - fpr_base.d = gpr_base.d - NUM_FPR_ARG_REGISTERS; - fparg_count = 0; - copy_space.c = ((flags & FLAG_FP_ARGUMENTS) ? fpr_base.c : gpr_base.c); - next_arg.u = stack + 2; - - /* Check that everything starts aligned properly. */ - FFI_ASSERT (((unsigned) (char *) stack & 0xF) == 0); - FFI_ASSERT (((unsigned) copy_space.c & 0xF) == 0); - FFI_ASSERT (((unsigned) stacktop.c & 0xF) == 0); - FFI_ASSERT ((bytes & 0xF) == 0); - FFI_ASSERT (copy_space.c >= next_arg.c); - - /* Deal with return values that are actually pass-by-reference. */ - if (flags & FLAG_RETVAL_REFERENCE) - { - *gpr_base.u++ = (unsigned long) (char *) ecif->rvalue; - intarg_count++; - } - - /* Now for the arguments. */ - p_argv.v = ecif->avalue; - for (ptr = ecif->cif->arg_types, i = ecif->cif->nargs; - i > 0; - i--, ptr++, p_argv.v++) - { - switch ((*ptr)->type) - { - case FFI_TYPE_FLOAT: - /* With FFI_LINUX_SOFT_FLOAT floats are handled like UINT32. */ - if (ecif->cif->abi == FFI_LINUX_SOFT_FLOAT) - goto soft_float_prep; - double_tmp = **p_argv.f; - if (fparg_count >= NUM_FPR_ARG_REGISTERS) - { - *next_arg.f = (float) double_tmp; - next_arg.u += 1; - intarg_count++; - } - else - *fpr_base.d++ = double_tmp; - fparg_count++; - FFI_ASSERT (flags & FLAG_FP_ARGUMENTS); - break; - - case FFI_TYPE_DOUBLE: - /* With FFI_LINUX_SOFT_FLOAT doubles are handled like UINT64. */ - if (ecif->cif->abi == FFI_LINUX_SOFT_FLOAT) - goto soft_double_prep; - double_tmp = **p_argv.d; - - if (fparg_count >= NUM_FPR_ARG_REGISTERS) - { - if (intarg_count >= NUM_GPR_ARG_REGISTERS - && intarg_count % 2 != 0) - { - intarg_count++; - next_arg.u++; - } - *next_arg.d = double_tmp; - next_arg.u += 2; - } - else - *fpr_base.d++ = double_tmp; - fparg_count++; - FFI_ASSERT (flags & FLAG_FP_ARGUMENTS); - break; - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: - if ((ecif->cif->abi != FFI_LINUX) - && (ecif->cif->abi != FFI_LINUX_SOFT_FLOAT)) - goto do_struct; - /* The soft float ABI for long doubles works like this, - a long double is passed in four consecutive gprs if available. - A maximum of 2 long doubles can be passed in gprs. - If we do not have 4 gprs left, the long double is passed on the - stack, 4-byte aligned. */ - if (ecif->cif->abi == FFI_LINUX_SOFT_FLOAT) - { - unsigned int int_tmp = (*p_argv.ui)[0]; - if (intarg_count >= NUM_GPR_ARG_REGISTERS - 3) - { - if (intarg_count < NUM_GPR_ARG_REGISTERS) - intarg_count += NUM_GPR_ARG_REGISTERS - intarg_count; - *next_arg.u = int_tmp; - next_arg.u++; - for (ii = 1; ii < 4; ii++) - { - int_tmp = (*p_argv.ui)[ii]; - *next_arg.u = int_tmp; - next_arg.u++; - } - } - else - { - *gpr_base.u++ = int_tmp; - for (ii = 1; ii < 4; ii++) - { - int_tmp = (*p_argv.ui)[ii]; - *gpr_base.u++ = int_tmp; - } - } - intarg_count +=4; - } - else - { - double_tmp = (*p_argv.d)[0]; - - if (fparg_count >= NUM_FPR_ARG_REGISTERS - 1) - { - if (intarg_count >= NUM_GPR_ARG_REGISTERS - && intarg_count % 2 != 0) - { - intarg_count++; - next_arg.u++; - } - *next_arg.d = double_tmp; - next_arg.u += 2; - double_tmp = (*p_argv.d)[1]; - *next_arg.d = double_tmp; - next_arg.u += 2; - } - else - { - *fpr_base.d++ = double_tmp; - double_tmp = (*p_argv.d)[1]; - *fpr_base.d++ = double_tmp; - } - - fparg_count += 2; - FFI_ASSERT (flags & FLAG_FP_ARGUMENTS); - } - break; -#endif - - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - soft_double_prep: - if (intarg_count == NUM_GPR_ARG_REGISTERS-1) - intarg_count++; - if (intarg_count >= NUM_GPR_ARG_REGISTERS) - { - if (intarg_count % 2 != 0) - { - intarg_count++; - next_arg.u++; - } - *next_arg.ll = **p_argv.ll; - next_arg.u += 2; - } - else - { - /* whoops: abi states only certain register pairs - * can be used for passing long long int - * specifically (r3,r4), (r5,r6), (r7,r8), - * (r9,r10) and if next arg is long long but - * not correct starting register of pair then skip - * until the proper starting register - */ - if (intarg_count % 2 != 0) - { - intarg_count ++; - gpr_base.u++; - } - *gpr_base.ll++ = **p_argv.ll; - } - intarg_count += 2; - break; - - case FFI_TYPE_STRUCT: -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - do_struct: -#endif - struct_copy_size = ((*ptr)->size + 15) & ~0xF; - copy_space.c -= struct_copy_size; - memcpy (copy_space.c, *p_argv.c, (*ptr)->size); - - gprvalue = (unsigned long) copy_space.c; - - FFI_ASSERT (copy_space.c > next_arg.c); - FFI_ASSERT (flags & FLAG_ARG_NEEDS_COPY); - goto putgpr; - - case FFI_TYPE_UINT8: - gprvalue = **p_argv.uc; - goto putgpr; - case FFI_TYPE_SINT8: - gprvalue = **p_argv.sc; - goto putgpr; - case FFI_TYPE_UINT16: - gprvalue = **p_argv.us; - goto putgpr; - case FFI_TYPE_SINT16: - gprvalue = **p_argv.ss; - goto putgpr; - - case FFI_TYPE_INT: - case FFI_TYPE_UINT32: - case FFI_TYPE_SINT32: - case FFI_TYPE_POINTER: - soft_float_prep: - - gprvalue = **p_argv.ui; - - putgpr: - if (intarg_count >= NUM_GPR_ARG_REGISTERS) - *next_arg.u++ = gprvalue; - else - *gpr_base.u++ = gprvalue; - intarg_count++; - break; - } - } - - /* Check that we didn't overrun the stack... */ - FFI_ASSERT (copy_space.c >= next_arg.c); - FFI_ASSERT (gpr_base.u <= stacktop.u - ASM_NEEDS_REGISTERS); - FFI_ASSERT (fpr_base.u - <= stacktop.u - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS); - FFI_ASSERT (flags & FLAG_4_GPR_ARGUMENTS || intarg_count <= 4); -} - -/* About the LINUX64 ABI. */ -enum { - NUM_GPR_ARG_REGISTERS64 = 8, - NUM_FPR_ARG_REGISTERS64 = 13 -}; -enum { ASM_NEEDS_REGISTERS64 = 4 }; - -/* ffi_prep_args64 is called by the assembly routine once stack space - has been allocated for the function's arguments. - - The stack layout we want looks like this: - - | Ret addr from ffi_call_LINUX64 8bytes | higher addresses - |--------------------------------------------| - | CR save area 8bytes | - |--------------------------------------------| - | Previous backchain pointer 8 | stack pointer here - |--------------------------------------------|<+ <<< on entry to - | Saved r28-r31 4*8 | | ffi_call_LINUX64 - |--------------------------------------------| | - | GPR registers r3-r10 8*8 | | - |--------------------------------------------| | - | FPR registers f1-f13 (optional) 13*8 | | - |--------------------------------------------| | - | Parameter save area | | - |--------------------------------------------| | - | TOC save area 8 | | - |--------------------------------------------| | stack | - | Linker doubleword 8 | | grows | - |--------------------------------------------| | down V - | Compiler doubleword 8 | | - |--------------------------------------------| | lower addresses - | Space for callee's LR 8 | | - |--------------------------------------------| | - | CR save area 8 | | - |--------------------------------------------| | stack pointer here - | Current backchain pointer 8 |-/ during - |--------------------------------------------| <<< ffi_call_LINUX64 - -*/ - -void FFI_HIDDEN -ffi_prep_args64 (extended_cif *ecif, unsigned long *const stack) -{ - const unsigned long bytes = ecif->cif->bytes; - const unsigned long flags = ecif->cif->flags; - - typedef union { - char *c; - unsigned long *ul; - float *f; - double *d; - } valp; - - /* 'stacktop' points at the previous backchain pointer. */ - valp stacktop; - - /* 'next_arg' points at the space for gpr3, and grows upwards as - we use GPR registers, then continues at rest. */ - valp gpr_base; - valp gpr_end; - valp rest; - valp next_arg; - - /* 'fpr_base' points at the space for fpr3, and grows upwards as - we use FPR registers. */ - valp fpr_base; - int fparg_count; - - int i, words; - ffi_type **ptr; - double double_tmp; - union { - void **v; - char **c; - signed char **sc; - unsigned char **uc; - signed short **ss; - unsigned short **us; - signed int **si; - unsigned int **ui; - unsigned long **ul; - float **f; - double **d; - } p_argv; - unsigned long gprvalue; - - stacktop.c = (char *) stack + bytes; - gpr_base.ul = stacktop.ul - ASM_NEEDS_REGISTERS64 - NUM_GPR_ARG_REGISTERS64; - gpr_end.ul = gpr_base.ul + NUM_GPR_ARG_REGISTERS64; - rest.ul = stack + 6 + NUM_GPR_ARG_REGISTERS64; - fpr_base.d = gpr_base.d - NUM_FPR_ARG_REGISTERS64; - fparg_count = 0; - next_arg.ul = gpr_base.ul; - - /* Check that everything starts aligned properly. */ - FFI_ASSERT (((unsigned long) (char *) stack & 0xF) == 0); - FFI_ASSERT (((unsigned long) stacktop.c & 0xF) == 0); - FFI_ASSERT ((bytes & 0xF) == 0); - - /* Deal with return values that are actually pass-by-reference. */ - if (flags & FLAG_RETVAL_REFERENCE) - *next_arg.ul++ = (unsigned long) (char *) ecif->rvalue; - - /* Now for the arguments. */ - p_argv.v = ecif->avalue; - for (ptr = ecif->cif->arg_types, i = ecif->cif->nargs; - i > 0; - i--, ptr++, p_argv.v++) - { - switch ((*ptr)->type) - { - case FFI_TYPE_FLOAT: - double_tmp = **p_argv.f; - *next_arg.f = (float) double_tmp; - if (++next_arg.ul == gpr_end.ul) - next_arg.ul = rest.ul; - if (fparg_count < NUM_FPR_ARG_REGISTERS64) - *fpr_base.d++ = double_tmp; - fparg_count++; - FFI_ASSERT (flags & FLAG_FP_ARGUMENTS); - break; - - case FFI_TYPE_DOUBLE: - double_tmp = **p_argv.d; - *next_arg.d = double_tmp; - if (++next_arg.ul == gpr_end.ul) - next_arg.ul = rest.ul; - if (fparg_count < NUM_FPR_ARG_REGISTERS64) - *fpr_base.d++ = double_tmp; - fparg_count++; - FFI_ASSERT (flags & FLAG_FP_ARGUMENTS); - break; - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: - double_tmp = (*p_argv.d)[0]; - *next_arg.d = double_tmp; - if (++next_arg.ul == gpr_end.ul) - next_arg.ul = rest.ul; - if (fparg_count < NUM_FPR_ARG_REGISTERS64) - *fpr_base.d++ = double_tmp; - fparg_count++; - double_tmp = (*p_argv.d)[1]; - *next_arg.d = double_tmp; - if (++next_arg.ul == gpr_end.ul) - next_arg.ul = rest.ul; - if (fparg_count < NUM_FPR_ARG_REGISTERS64) - *fpr_base.d++ = double_tmp; - fparg_count++; - FFI_ASSERT (__LDBL_MANT_DIG__ == 106); - FFI_ASSERT (flags & FLAG_FP_ARGUMENTS); - break; -#endif - - case FFI_TYPE_STRUCT: - words = ((*ptr)->size + 7) / 8; - if (next_arg.ul >= gpr_base.ul && next_arg.ul + words > gpr_end.ul) - { - size_t first = gpr_end.c - next_arg.c; - memcpy (next_arg.c, *p_argv.c, first); - memcpy (rest.c, *p_argv.c + first, (*ptr)->size - first); - next_arg.c = rest.c + words * 8 - first; - } - else - { - char *where = next_arg.c; - - /* Structures with size less than eight bytes are passed - left-padded. */ - if ((*ptr)->size < 8) - where += 8 - (*ptr)->size; - - memcpy (where, *p_argv.c, (*ptr)->size); - next_arg.ul += words; - if (next_arg.ul == gpr_end.ul) - next_arg.ul = rest.ul; - } - break; - - case FFI_TYPE_UINT8: - gprvalue = **p_argv.uc; - goto putgpr; - case FFI_TYPE_SINT8: - gprvalue = **p_argv.sc; - goto putgpr; - case FFI_TYPE_UINT16: - gprvalue = **p_argv.us; - goto putgpr; - case FFI_TYPE_SINT16: - gprvalue = **p_argv.ss; - goto putgpr; - case FFI_TYPE_UINT32: - gprvalue = **p_argv.ui; - goto putgpr; - case FFI_TYPE_INT: - case FFI_TYPE_SINT32: - gprvalue = **p_argv.si; - goto putgpr; - - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - case FFI_TYPE_POINTER: - gprvalue = **p_argv.ul; - putgpr: - *next_arg.ul++ = gprvalue; - if (next_arg.ul == gpr_end.ul) - next_arg.ul = rest.ul; - break; - } - } - - FFI_ASSERT (flags & FLAG_4_GPR_ARGUMENTS - || (next_arg.ul >= gpr_base.ul - && next_arg.ul <= gpr_base.ul + 4)); -} - - - -/* Perform machine dependent cif processing */ -ffi_status -ffi_prep_cif_machdep (ffi_cif *cif) -{ - /* All this is for the SYSV and LINUX64 ABI. */ - int i; - ffi_type **ptr; - unsigned bytes; - int fparg_count = 0, intarg_count = 0; - unsigned flags = 0; - unsigned struct_copy_size = 0; - unsigned type = cif->rtype->type; - unsigned size = cif->rtype->size; - - if (cif->abi == FFI_LINUX_SOFT_FLOAT) - NUM_FPR_ARG_REGISTERS = 0; - - if (cif->abi != FFI_LINUX64) - { - /* All the machine-independent calculation of cif->bytes will be wrong. - Redo the calculation for SYSV. */ - - /* Space for the frame pointer, callee's LR, and the asm's temp regs. */ - bytes = (2 + ASM_NEEDS_REGISTERS) * sizeof (int); - - /* Space for the GPR registers. */ - bytes += NUM_GPR_ARG_REGISTERS * sizeof (int); - } - else - { - /* 64-bit ABI. */ - - /* Space for backchain, CR, LR, cc/ld doubleword, TOC and the asm's temp - regs. */ - bytes = (6 + ASM_NEEDS_REGISTERS64) * sizeof (long); - - /* Space for the mandatory parm save area and general registers. */ - bytes += 2 * NUM_GPR_ARG_REGISTERS64 * sizeof (long); - } - - /* Return value handling. The rules for SYSV are as follows: - - 32-bit (or less) integer values are returned in gpr3; - - Structures of size <= 4 bytes also returned in gpr3; - - 64-bit integer values and structures between 5 and 8 bytes are returned - in gpr3 and gpr4; - - Single/double FP values are returned in fpr1; - - Larger structures are allocated space and a pointer is passed as - the first argument. - - long doubles (if not equivalent to double) are returned in - fpr1,fpr2 for Linux and as for large structs for SysV. - For LINUX64: - - integer values in gpr3; - - Structures/Unions by reference; - - Single/double FP values in fpr1, long double in fpr1,fpr2. - - soft-float float/doubles are treated as UINT32/UINT64 respectivley. - - soft-float long doubles are returned in gpr3-gpr6. */ - switch (type) - { -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: - if (cif->abi != FFI_LINUX && cif->abi != FFI_LINUX64 - && cif->abi != FFI_LINUX_SOFT_FLOAT) - goto byref; - flags |= FLAG_RETURNS_128BITS; - /* Fall through. */ -#endif - case FFI_TYPE_DOUBLE: - flags |= FLAG_RETURNS_64BITS; - /* Fall through. */ - case FFI_TYPE_FLOAT: - /* With FFI_LINUX_SOFT_FLOAT no fp registers are used. */ - if (cif->abi != FFI_LINUX_SOFT_FLOAT) - flags |= FLAG_RETURNS_FP; - break; - - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - flags |= FLAG_RETURNS_64BITS; - break; - - case FFI_TYPE_STRUCT: - if (cif->abi == FFI_SYSV) - { - /* The final SYSV ABI says that structures smaller or equal 8 bytes - are returned in r3/r4. The FFI_GCC_SYSV ABI instead returns them - in memory. */ - - /* Treat structs with size <= 8 bytes. */ - if (size <= 8) - { - flags |= FLAG_RETURNS_SMST; - /* These structs are returned in r3. We pack the type and the - precalculated shift value (needed in the sysv.S) into flags. - The same applies for the structs returned in r3/r4. */ - if (size <= 4) - { - flags |= FLAG_SYSV_SMST_R3; - flags |= 8 * (4 - size) << 8; - break; - } - /* These structs are returned in r3 and r4. See above. */ - if (size <= 8) - { - flags |= FLAG_SYSV_SMST_R3 | FLAG_SYSV_SMST_R4; - flags |= 8 * (8 - size) << 8; - break; - } - } - } -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - byref: -#endif - intarg_count++; - flags |= FLAG_RETVAL_REFERENCE; - /* Fall through. */ - case FFI_TYPE_VOID: - flags |= FLAG_RETURNS_NOTHING; - break; - - default: - /* Returns 32-bit integer, or similar. Nothing to do here. */ - break; - } - - if (cif->abi != FFI_LINUX64) - /* The first NUM_GPR_ARG_REGISTERS words of integer arguments, and the - first NUM_FPR_ARG_REGISTERS fp arguments, go in registers; the rest - goes on the stack. Structures and long doubles (if not equivalent - to double) are passed as a pointer to a copy of the structure. - Stuff on the stack needs to keep proper alignment. */ - for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) - { - switch ((*ptr)->type) - { - case FFI_TYPE_FLOAT: - /* With FFI_LINUX_SOFT_FLOAT floats are handled like UINT32. */ - if (cif->abi == FFI_LINUX_SOFT_FLOAT) - goto soft_float_cif; - fparg_count++; - /* floating singles are not 8-aligned on stack */ - break; - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: - if (cif->abi != FFI_LINUX && cif->abi != FFI_LINUX_SOFT_FLOAT) - goto do_struct; - if (cif->abi == FFI_LINUX_SOFT_FLOAT) - { - if (intarg_count >= NUM_GPR_ARG_REGISTERS - 3 - || intarg_count < NUM_GPR_ARG_REGISTERS) - /* A long double in FFI_LINUX_SOFT_FLOAT can use only - a set of four consecutive gprs. If we have not enough, - we have to adjust the intarg_count value. */ - intarg_count += NUM_GPR_ARG_REGISTERS - intarg_count; - intarg_count += 4; - break; - } - else - fparg_count++; - /* Fall thru */ -#endif - case FFI_TYPE_DOUBLE: - /* With FFI_LINUX_SOFT_FLOAT doubles are handled like UINT64. */ - if (cif->abi == FFI_LINUX_SOFT_FLOAT) - goto soft_double_cif; - fparg_count++; - /* If this FP arg is going on the stack, it must be - 8-byte-aligned. */ - if (fparg_count > NUM_FPR_ARG_REGISTERS - && intarg_count >= NUM_GPR_ARG_REGISTERS - && intarg_count % 2 != 0) - intarg_count++; - break; - - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - soft_double_cif: - /* 'long long' arguments are passed as two words, but - either both words must fit in registers or both go - on the stack. If they go on the stack, they must - be 8-byte-aligned. - - Also, only certain register pairs can be used for - passing long long int -- specifically (r3,r4), (r5,r6), - (r7,r8), (r9,r10). - */ - if (intarg_count == NUM_GPR_ARG_REGISTERS-1 - || intarg_count % 2 != 0) - intarg_count++; - intarg_count += 2; - break; - - case FFI_TYPE_STRUCT: -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - do_struct: -#endif - /* We must allocate space for a copy of these to enforce - pass-by-value. Pad the space up to a multiple of 16 - bytes (the maximum alignment required for anything under - the SYSV ABI). */ - struct_copy_size += ((*ptr)->size + 15) & ~0xF; - /* Fall through (allocate space for the pointer). */ - - default: - soft_float_cif: - /* Everything else is passed as a 4-byte word in a GPR, either - the object itself or a pointer to it. */ - intarg_count++; - break; - } - } - else - for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) - { - switch ((*ptr)->type) - { -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: - if (cif->abi == FFI_LINUX_SOFT_FLOAT) - intarg_count += 4; - else - { - fparg_count += 2; - intarg_count += 2; - } - break; -#endif - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - fparg_count++; - intarg_count++; - break; - - case FFI_TYPE_STRUCT: - intarg_count += ((*ptr)->size + 7) / 8; - break; - - default: - /* Everything else is passed as a 8-byte word in a GPR, either - the object itself or a pointer to it. */ - intarg_count++; - break; - } - } - - if (fparg_count != 0) - flags |= FLAG_FP_ARGUMENTS; - if (intarg_count > 4) - flags |= FLAG_4_GPR_ARGUMENTS; - if (struct_copy_size != 0) - flags |= FLAG_ARG_NEEDS_COPY; - - if (cif->abi != FFI_LINUX64) - { - /* Space for the FPR registers, if needed. */ - if (fparg_count != 0) - bytes += NUM_FPR_ARG_REGISTERS * sizeof (double); - - /* Stack space. */ - if (intarg_count > NUM_GPR_ARG_REGISTERS) - bytes += (intarg_count - NUM_GPR_ARG_REGISTERS) * sizeof (int); - if (fparg_count > NUM_FPR_ARG_REGISTERS) - bytes += (fparg_count - NUM_FPR_ARG_REGISTERS) * sizeof (double); - } - else - { - /* Space for the FPR registers, if needed. */ - if (fparg_count != 0) - bytes += NUM_FPR_ARG_REGISTERS64 * sizeof (double); - - /* Stack space. */ - if (intarg_count > NUM_GPR_ARG_REGISTERS64) - bytes += (intarg_count - NUM_GPR_ARG_REGISTERS64) * sizeof (long); - } - - /* The stack space allocated needs to be a multiple of 16 bytes. */ - bytes = (bytes + 15) & ~0xF; - - /* Add in the space for the copied structures. */ - bytes += struct_copy_size; - - cif->flags = flags; - cif->bytes = bytes; - - return FFI_OK; -} - -extern void ffi_call_SYSV(extended_cif *, unsigned, unsigned, unsigned *, - void (*fn)(void)); -extern void FFI_HIDDEN ffi_call_LINUX64(extended_cif *, unsigned long, - unsigned long, unsigned long *, - void (*fn)(void)); - -void -ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return */ - /* value address then we need to make one */ - - if ((rvalue == NULL) && (cif->rtype->type == FFI_TYPE_STRUCT)) - { - ecif.rvalue = alloca(cif->rtype->size); - } - else - ecif.rvalue = rvalue; - - - switch (cif->abi) - { -#ifndef POWERPC64 - case FFI_SYSV: - case FFI_GCC_SYSV: - case FFI_LINUX: - case FFI_LINUX_SOFT_FLOAT: - ffi_call_SYSV (&ecif, -cif->bytes, cif->flags, ecif.rvalue, fn); - break; -#else - case FFI_LINUX64: - ffi_call_LINUX64 (&ecif, -(long) cif->bytes, cif->flags, ecif.rvalue, fn); - break; -#endif - default: - FFI_ASSERT (0); - break; - } -} - - -#ifndef POWERPC64 -#define MIN_CACHE_LINE_SIZE 8 - -static void -flush_icache (char *wraddr, char *xaddr, int size) -{ - int i; - for (i = 0; i < size; i += MIN_CACHE_LINE_SIZE) - __asm__ volatile ("icbi 0,%0;" "dcbf 0,%1;" - : : "r" (xaddr + i), "r" (wraddr + i) : "memory"); - __asm__ volatile ("icbi 0,%0;" "dcbf 0,%1;" "sync;" "isync;" - : : "r"(xaddr + size - 1), "r"(wraddr + size - 1) - : "memory"); -} -#endif - -ffi_status -ffi_prep_closure_loc (ffi_closure *closure, - ffi_cif *cif, - void (*fun) (ffi_cif *, void *, void **, void *), - void *user_data, - void *codeloc) -{ -#ifdef POWERPC64 - void **tramp = (void **) &closure->tramp[0]; - - if (cif->abi != FFI_LINUX64) - return FFI_BAD_ABI; - /* Copy function address and TOC from ffi_closure_LINUX64. */ - memcpy (tramp, (char *) ffi_closure_LINUX64, 16); - tramp[2] = codeloc; -#else - unsigned int *tramp; - - if (! (cif->abi == FFI_GCC_SYSV - || cif->abi == FFI_SYSV - || cif->abi == FFI_LINUX - || cif->abi == FFI_LINUX_SOFT_FLOAT)) - return FFI_BAD_ABI; - - tramp = (unsigned int *) &closure->tramp[0]; - tramp[0] = 0x7c0802a6; /* mflr r0 */ - tramp[1] = 0x4800000d; /* bl 10 */ - tramp[4] = 0x7d6802a6; /* mflr r11 */ - tramp[5] = 0x7c0803a6; /* mtlr r0 */ - tramp[6] = 0x800b0000; /* lwz r0,0(r11) */ - tramp[7] = 0x816b0004; /* lwz r11,4(r11) */ - tramp[8] = 0x7c0903a6; /* mtctr r0 */ - tramp[9] = 0x4e800420; /* bctr */ - *(void **) &tramp[2] = (void *) ffi_closure_SYSV; /* function */ - *(void **) &tramp[3] = codeloc; /* context */ - - /* Flush the icache. */ - flush_icache ((char *)tramp, (char *)codeloc, FFI_TRAMPOLINE_SIZE); -#endif - - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - - return FFI_OK; -} - -typedef union -{ - float f; - double d; -} ffi_dblfl; - -int ffi_closure_helper_SYSV (ffi_closure *, void *, unsigned long *, - ffi_dblfl *, unsigned long *); - -/* Basically the trampoline invokes ffi_closure_SYSV, and on - * entry, r11 holds the address of the closure. - * After storing the registers that could possibly contain - * parameters to be passed into the stack frame and setting - * up space for a return value, ffi_closure_SYSV invokes the - * following helper function to do most of the work - */ - -int -ffi_closure_helper_SYSV (ffi_closure *closure, void *rvalue, - unsigned long *pgr, ffi_dblfl *pfr, - unsigned long *pst) -{ - /* rvalue is the pointer to space for return value in closure assembly */ - /* pgr is the pointer to where r3-r10 are stored in ffi_closure_SYSV */ - /* pfr is the pointer to where f1-f8 are stored in ffi_closure_SYSV */ - /* pst is the pointer to outgoing parameter stack in original caller */ - - void ** avalue; - ffi_type ** arg_types; - long i, avn; - long nf; /* number of floating registers already used */ - long ng; /* number of general registers already used */ - ffi_cif * cif; - double temp; - unsigned size; - - cif = closure->cif; - avalue = alloca (cif->nargs * sizeof (void *)); - size = cif->rtype->size; - - nf = 0; - ng = 0; - - /* Copy the caller's structure return value address so that the closure - returns the data directly to the caller. - For FFI_SYSV the result is passed in r3/r4 if the struct size is less - or equal 8 bytes. */ - - if ((cif->rtype->type == FFI_TYPE_STRUCT - && !((cif->abi == FFI_SYSV) && (size <= 8))) -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - || (cif->rtype->type == FFI_TYPE_LONGDOUBLE - && cif->abi != FFI_LINUX && cif->abi != FFI_LINUX_SOFT_FLOAT) -#endif - ) - { - rvalue = (void *) *pgr; - ng++; - pgr++; - } - - i = 0; - avn = cif->nargs; - arg_types = cif->arg_types; - - /* Grab the addresses of the arguments from the stack frame. */ - while (i < avn) - { - switch (arg_types[i]->type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - /* there are 8 gpr registers used to pass values */ - if (ng < 8) - { - avalue[i] = (char *) pgr + 3; - ng++; - pgr++; - } - else - { - avalue[i] = (char *) pst + 3; - pst++; - } - break; - - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - /* there are 8 gpr registers used to pass values */ - if (ng < 8) - { - avalue[i] = (char *) pgr + 2; - ng++; - pgr++; - } - else - { - avalue[i] = (char *) pst + 2; - pst++; - } - break; - - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - case FFI_TYPE_POINTER: - soft_float_closure: - /* there are 8 gpr registers used to pass values */ - if (ng < 8) - { - avalue[i] = pgr; - ng++; - pgr++; - } - else - { - avalue[i] = pst; - pst++; - } - break; - - case FFI_TYPE_STRUCT: -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - do_struct: -#endif - /* Structs are passed by reference. The address will appear in a - gpr if it is one of the first 8 arguments. */ - if (ng < 8) - { - avalue[i] = (void *) *pgr; - ng++; - pgr++; - } - else - { - avalue[i] = (void *) *pst; - pst++; - } - break; - - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - soft_double_closure: - /* passing long long ints are complex, they must - * be passed in suitable register pairs such as - * (r3,r4) or (r5,r6) or (r6,r7), or (r7,r8) or (r9,r10) - * and if the entire pair aren't available then the outgoing - * parameter stack is used for both but an alignment of 8 - * must will be kept. So we must either look in pgr - * or pst to find the correct address for this type - * of parameter. - */ - if (ng < 7) - { - if (ng & 0x01) - { - /* skip r4, r6, r8 as starting points */ - ng++; - pgr++; - } - avalue[i] = pgr; - ng += 2; - pgr += 2; - } - else - { - if (((long) pst) & 4) - pst++; - avalue[i] = pst; - pst += 2; - ng = 8; - } - break; - - case FFI_TYPE_FLOAT: - /* With FFI_LINUX_SOFT_FLOAT floats are handled like UINT32. */ - if (cif->abi == FFI_LINUX_SOFT_FLOAT) - goto soft_float_closure; - /* unfortunately float values are stored as doubles - * in the ffi_closure_SYSV code (since we don't check - * the type in that routine). - */ - - /* there are 8 64bit floating point registers */ - - if (nf < 8) - { - temp = pfr->d; - pfr->f = (float) temp; - avalue[i] = pfr; - nf++; - pfr++; - } - else - { - /* FIXME? here we are really changing the values - * stored in the original calling routines outgoing - * parameter stack. This is probably a really - * naughty thing to do but... - */ - avalue[i] = pst; - pst += 1; - } - break; - - case FFI_TYPE_DOUBLE: - /* With FFI_LINUX_SOFT_FLOAT doubles are handled like UINT64. */ - if (cif->abi == FFI_LINUX_SOFT_FLOAT) - goto soft_double_closure; - /* On the outgoing stack all values are aligned to 8 */ - /* there are 8 64bit floating point registers */ - - if (nf < 8) - { - avalue[i] = pfr; - nf++; - pfr++; - } - else - { - if (((long) pst) & 4) - pst++; - avalue[i] = pst; - pst += 2; - } - break; - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: - if (cif->abi != FFI_LINUX && cif->abi != FFI_LINUX_SOFT_FLOAT) - goto do_struct; - if (cif->abi == FFI_LINUX_SOFT_FLOAT) - { /* Test if for the whole long double, 4 gprs are available. - otherwise the stuff ends up on the stack. */ - if (ng < 5) - { - avalue[i] = pgr; - pgr += 4; - ng += 4; - } - else - { - avalue[i] = pst; - pst += 4; - ng = 8; - } - break; - } - if (nf < 7) - { - avalue[i] = pfr; - pfr += 2; - nf += 2; - } - else - { - if (((long) pst) & 4) - pst++; - avalue[i] = pst; - pst += 4; - nf = 8; - } - break; -#endif - - default: - FFI_ASSERT (0); - } - - i++; - } - - - (closure->fun) (cif, rvalue, avalue, closure->user_data); - - /* Tell ffi_closure_SYSV how to perform return type promotions. - Because the FFI_SYSV ABI returns the structures <= 8 bytes in r3/r4 - we have to tell ffi_closure_SYSV how to treat them. We combine the base - type FFI_SYSV_TYPE_SMALL_STRUCT - 1 with the size of the struct. - So a one byte struct gets the return type 16. Return type 1 to 15 are - already used and we never have a struct with size zero. That is the reason - for the subtraction of 1. See the comment in ffitarget.h about ordering. - */ - if (cif->abi == FFI_SYSV && cif->rtype->type == FFI_TYPE_STRUCT - && size <= 8) - return (FFI_SYSV_TYPE_SMALL_STRUCT - 1) + size; -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - else if (cif->rtype->type == FFI_TYPE_LONGDOUBLE - && cif->abi != FFI_LINUX && cif->abi != FFI_LINUX_SOFT_FLOAT) - return FFI_TYPE_STRUCT; -#endif - /* With FFI_LINUX_SOFT_FLOAT floats and doubles are handled like UINT32 - respectivley UINT64. */ - if (cif->abi == FFI_LINUX_SOFT_FLOAT) - { - switch (cif->rtype->type) - { - case FFI_TYPE_FLOAT: - return FFI_TYPE_UINT32; - break; - case FFI_TYPE_DOUBLE: - return FFI_TYPE_UINT64; - break; -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: - return FFI_TYPE_UINT128; - break; -#endif - default: - return cif->rtype->type; - } - } - else - { - return cif->rtype->type; - } -} - -int FFI_HIDDEN ffi_closure_helper_LINUX64 (ffi_closure *, void *, - unsigned long *, ffi_dblfl *); - -int FFI_HIDDEN -ffi_closure_helper_LINUX64 (ffi_closure *closure, void *rvalue, - unsigned long *pst, ffi_dblfl *pfr) -{ - /* rvalue is the pointer to space for return value in closure assembly */ - /* pst is the pointer to parameter save area - (r3-r10 are stored into its first 8 slots by ffi_closure_LINUX64) */ - /* pfr is the pointer to where f1-f13 are stored in ffi_closure_LINUX64 */ - - void **avalue; - ffi_type **arg_types; - long i, avn; - ffi_cif *cif; - ffi_dblfl *end_pfr = pfr + NUM_FPR_ARG_REGISTERS64; - - cif = closure->cif; - avalue = alloca (cif->nargs * sizeof (void *)); - - /* Copy the caller's structure return value address so that the closure - returns the data directly to the caller. */ - if (cif->rtype->type == FFI_TYPE_STRUCT) - { - rvalue = (void *) *pst; - pst++; - } - - i = 0; - avn = cif->nargs; - arg_types = cif->arg_types; - - /* Grab the addresses of the arguments from the stack frame. */ - while (i < avn) - { - switch (arg_types[i]->type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - avalue[i] = (char *) pst + 7; - pst++; - break; - - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - avalue[i] = (char *) pst + 6; - pst++; - break; - - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - avalue[i] = (char *) pst + 4; - pst++; - break; - - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - case FFI_TYPE_POINTER: - avalue[i] = pst; - pst++; - break; - - case FFI_TYPE_STRUCT: - /* Structures with size less than eight bytes are passed - left-padded. */ - if (arg_types[i]->size < 8) - avalue[i] = (char *) pst + 8 - arg_types[i]->size; - else - avalue[i] = pst; - pst += (arg_types[i]->size + 7) / 8; - break; - - case FFI_TYPE_FLOAT: - /* unfortunately float values are stored as doubles - * in the ffi_closure_LINUX64 code (since we don't check - * the type in that routine). - */ - - /* there are 13 64bit floating point registers */ - - if (pfr < end_pfr) - { - double temp = pfr->d; - pfr->f = (float) temp; - avalue[i] = pfr; - pfr++; - } - else - avalue[i] = pst; - pst++; - break; - - case FFI_TYPE_DOUBLE: - /* On the outgoing stack all values are aligned to 8 */ - /* there are 13 64bit floating point registers */ - - if (pfr < end_pfr) - { - avalue[i] = pfr; - pfr++; - } - else - avalue[i] = pst; - pst++; - break; - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: - if (pfr + 1 < end_pfr) - { - avalue[i] = pfr; - pfr += 2; - } - else - { - if (pfr < end_pfr) - { - /* Passed partly in f13 and partly on the stack. - Move it all to the stack. */ - *pst = *(unsigned long *) pfr; - pfr++; - } - avalue[i] = pst; - } - pst += 2; - break; -#endif - - default: - FFI_ASSERT (0); - } - - i++; - } - - - (closure->fun) (cif, rvalue, avalue, closure->user_data); - - /* Tell ffi_closure_LINUX64 how to perform return type promotions. */ - return cif->rtype->type; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c deleted file mode 100644 index ee03dab..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +++ /dev/null @@ -1,1359 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi_darwin.c - - Copyright (C) 1998 Geoffrey Keating - Copyright (C) 2001 John Hornkvist - Copyright (C) 2002, 2006, 2007, 2009, 2010 Free Software Foundation, Inc. - - FFI support for Darwin and AIX. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR - OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#include -#include - -#include - -extern void ffi_closure_ASM (void); - -enum { - /* The assembly depends on these exact flags. - For Darwin64 (when FLAG_RETURNS_STRUCT is set): - FLAG_RETURNS_FP indicates that the structure embeds FP data. - FLAG_RETURNS_128BITS signals a special struct size that is not - expanded for float content. */ - FLAG_RETURNS_128BITS = 1 << (31-31), /* These go in cr7 */ - FLAG_RETURNS_NOTHING = 1 << (31-30), - FLAG_RETURNS_FP = 1 << (31-29), - FLAG_RETURNS_64BITS = 1 << (31-28), - - FLAG_RETURNS_STRUCT = 1 << (31-27), /* This goes in cr6 */ - - FLAG_ARG_NEEDS_COPY = 1 << (31- 7), - FLAG_FP_ARGUMENTS = 1 << (31- 6), /* cr1.eq; specified by ABI */ - FLAG_4_GPR_ARGUMENTS = 1 << (31- 5), - FLAG_RETVAL_REFERENCE = 1 << (31- 4) -}; - -/* About the DARWIN ABI. */ -enum { - NUM_GPR_ARG_REGISTERS = 8, - NUM_FPR_ARG_REGISTERS = 13, - LINKAGE_AREA_GPRS = 6 -}; - -enum { ASM_NEEDS_REGISTERS = 4 }; /* r28-r31 */ - -/* ffi_prep_args is called by the assembly routine once stack space - has been allocated for the function's arguments. - - m32/m64 - - The stack layout we want looks like this: - - | Return address from ffi_call_DARWIN | higher addresses - |--------------------------------------------| - | Previous backchain pointer 4/8 | stack pointer here - |--------------------------------------------|<+ <<< on entry to - | ASM_NEEDS_REGISTERS=r28-r31 4*(4/8) | | ffi_call_DARWIN - |--------------------------------------------| | - | When we have any FP activity... the | | - | FPRs occupy NUM_FPR_ARG_REGISTERS slots | | - | here fp13 .. fp1 from high to low addr. | | - ~ ~ ~ - | Parameters (at least 8*4/8=32/64) | | NUM_GPR_ARG_REGISTERS - |--------------------------------------------| | - | TOC=R2 (AIX) Reserved (Darwin) 4/8 | | - |--------------------------------------------| | stack | - | Reserved 2*4/8 | | grows | - |--------------------------------------------| | down V - | Space for callee's LR 4/8 | | - |--------------------------------------------| | lower addresses - | Saved CR [low word for m64] 4/8 | | - |--------------------------------------------| | stack pointer here - | Current backchain pointer 4/8 |-/ during - |--------------------------------------------| <<< ffi_call_DARWIN - - */ - -#if defined(POWERPC_DARWIN64) -static void -darwin64_pass_struct_by_value - (ffi_type *, char *, unsigned, unsigned *, double **, unsigned long **); -#endif - -/* This depends on GPR_SIZE = sizeof (unsigned long) */ - -void -ffi_prep_args (extended_cif *ecif, unsigned long *const stack) -{ - const unsigned bytes = ecif->cif->bytes; - const unsigned flags = ecif->cif->flags; - const unsigned nargs = ecif->cif->nargs; -#if !defined(POWERPC_DARWIN64) - const ffi_abi abi = ecif->cif->abi; -#endif - - /* 'stacktop' points at the previous backchain pointer. */ - unsigned long *const stacktop = stack + (bytes / sizeof(unsigned long)); - - /* 'fpr_base' points at the space for fpr1, and grows upwards as - we use FPR registers. */ - double *fpr_base = (double *) (stacktop - ASM_NEEDS_REGISTERS) - NUM_FPR_ARG_REGISTERS; - int gp_count = 0, fparg_count = 0; - - /* 'next_arg' grows up as we put parameters in it. */ - unsigned long *next_arg = stack + LINKAGE_AREA_GPRS; /* 6 reserved positions. */ - - int i; - double double_tmp; - void **p_argv = ecif->avalue; - unsigned long gprvalue; - ffi_type** ptr = ecif->cif->arg_types; -#if !defined(POWERPC_DARWIN64) - char *dest_cpy; -#endif - unsigned size_al = 0; - - /* Check that everything starts aligned properly. */ - FFI_ASSERT(((unsigned) (char *) stack & 0xF) == 0); - FFI_ASSERT(((unsigned) (char *) stacktop & 0xF) == 0); - FFI_ASSERT((bytes & 0xF) == 0); - - /* Deal with return values that are actually pass-by-reference. - Rule: - Return values are referenced by r3, so r4 is the first parameter. */ - - if (flags & FLAG_RETVAL_REFERENCE) - *next_arg++ = (unsigned long) (char *) ecif->rvalue; - - /* Now for the arguments. */ - for (i = nargs; i > 0; i--, ptr++, p_argv++) - { - switch ((*ptr)->type) - { - /* If a floating-point parameter appears before all of the general- - purpose registers are filled, the corresponding GPRs that match - the size of the floating-point parameter are skipped. */ - case FFI_TYPE_FLOAT: - double_tmp = *(float *) *p_argv; - if (fparg_count < NUM_FPR_ARG_REGISTERS) - *fpr_base++ = double_tmp; -#if defined(POWERPC_DARWIN) - *(float *)next_arg = *(float *) *p_argv; -#else - *(double *)next_arg = double_tmp; -#endif - next_arg++; - gp_count++; - fparg_count++; - FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); - break; - - case FFI_TYPE_DOUBLE: - double_tmp = *(double *) *p_argv; - if (fparg_count < NUM_FPR_ARG_REGISTERS) - *fpr_base++ = double_tmp; - *(double *)next_arg = double_tmp; -#ifdef POWERPC64 - next_arg++; - gp_count++; -#else - next_arg += 2; - gp_count += 2; -#endif - fparg_count++; - FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); - break; - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - - case FFI_TYPE_LONGDOUBLE: -# if defined(POWERPC64) && !defined(POWERPC_DARWIN64) - /* ??? This will exceed the regs count when the value starts at fp13 - and it will not put the extra bit on the stack. */ - if (fparg_count < NUM_FPR_ARG_REGISTERS) - *(long double *) fpr_base++ = *(long double *) *p_argv; - else - *(long double *) next_arg = *(long double *) *p_argv; - next_arg += 2; - fparg_count += 2; -# else - double_tmp = ((double *) *p_argv)[0]; - if (fparg_count < NUM_FPR_ARG_REGISTERS) - *fpr_base++ = double_tmp; - *(double *) next_arg = double_tmp; -# if defined(POWERPC_DARWIN64) - next_arg++; - gp_count++; -# else - next_arg += 2; - gp_count += 2; -# endif - fparg_count++; - double_tmp = ((double *) *p_argv)[1]; - if (fparg_count < NUM_FPR_ARG_REGISTERS) - *fpr_base++ = double_tmp; - *(double *) next_arg = double_tmp; -# if defined(POWERPC_DARWIN64) - next_arg++; - gp_count++; -# else - next_arg += 2; - gp_count += 2; -# endif - fparg_count++; -# endif - FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); - break; -#endif - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: -#ifdef POWERPC64 - gprvalue = *(long long *) *p_argv; - goto putgpr; -#else - *(long long *) next_arg = *(long long *) *p_argv; - next_arg += 2; - gp_count += 2; -#endif - break; - case FFI_TYPE_POINTER: - gprvalue = *(unsigned long *) *p_argv; - goto putgpr; - case FFI_TYPE_UINT8: - gprvalue = *(unsigned char *) *p_argv; - goto putgpr; - case FFI_TYPE_SINT8: - gprvalue = *(signed char *) *p_argv; - goto putgpr; - case FFI_TYPE_UINT16: - gprvalue = *(unsigned short *) *p_argv; - goto putgpr; - case FFI_TYPE_SINT16: - gprvalue = *(signed short *) *p_argv; - goto putgpr; - - case FFI_TYPE_STRUCT: - size_al = (*ptr)->size; -#if defined(POWERPC_DARWIN64) - next_arg = (unsigned long *)ALIGN((char *)next_arg, (*ptr)->alignment); - darwin64_pass_struct_by_value (*ptr, (char *) *p_argv, - (unsigned) size_al, - (unsigned int *) &fparg_count, - &fpr_base, &next_arg); -#else - dest_cpy = (char *) next_arg; - - /* If the first member of the struct is a double, then include enough - padding in the struct size to align it to double-word. */ - if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE) - size_al = ALIGN((*ptr)->size, 8); - -# if defined(POWERPC64) - FFI_ASSERT (abi != FFI_DARWIN); - memcpy ((char *) dest_cpy, (char *) *p_argv, size_al); - next_arg += (size_al + 7) / 8; -# else - /* Structures that match the basic modes (QI 1 byte, HI 2 bytes, - SI 4 bytes) are aligned as if they were those modes. - Structures with 3 byte in size are padded upwards. */ - if (size_al < 3 && abi == FFI_DARWIN) - dest_cpy += 4 - size_al; - - memcpy((char *) dest_cpy, (char *) *p_argv, size_al); - next_arg += (size_al + 3) / 4; -# endif -#endif - break; - - case FFI_TYPE_INT: - case FFI_TYPE_SINT32: - gprvalue = *(signed int *) *p_argv; - goto putgpr; - - case FFI_TYPE_UINT32: - gprvalue = *(unsigned int *) *p_argv; - putgpr: - *next_arg++ = gprvalue; - gp_count++; - break; - default: - break; - } - } - - /* Check that we didn't overrun the stack... */ - //FFI_ASSERT(gpr_base <= stacktop - ASM_NEEDS_REGISTERS); - //FFI_ASSERT((unsigned *)fpr_base - // <= stacktop - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS); - //FFI_ASSERT(flags & FLAG_4_GPR_ARGUMENTS || intarg_count <= 4); -} - -#if defined(POWERPC_DARWIN64) - -/* See if we can put some of the struct into fprs. - This should not be called for structures of size 16 bytes, since these are not - broken out this way. */ -static void -darwin64_scan_struct_for_floats (ffi_type *s, unsigned *nfpr) -{ - int i; - - FFI_ASSERT (s->type == FFI_TYPE_STRUCT) - - for (i = 0; s->elements[i] != NULL; i++) - { - ffi_type *p = s->elements[i]; - switch (p->type) - { - case FFI_TYPE_STRUCT: - darwin64_scan_struct_for_floats (p, nfpr); - break; - case FFI_TYPE_LONGDOUBLE: - (*nfpr) += 2; - break; - case FFI_TYPE_DOUBLE: - case FFI_TYPE_FLOAT: - (*nfpr) += 1; - break; - default: - break; - } - } -} - -static int -darwin64_struct_size_exceeds_gprs_p (ffi_type *s, char *src, unsigned *nfpr) -{ - unsigned struct_offset=0, i; - - for (i = 0; s->elements[i] != NULL; i++) - { - char *item_base; - ffi_type *p = s->elements[i]; - /* Find the start of this item (0 for the first one). */ - if (i > 0) - struct_offset = ALIGN(struct_offset, p->alignment); - - item_base = src + struct_offset; - - switch (p->type) - { - case FFI_TYPE_STRUCT: - if (darwin64_struct_size_exceeds_gprs_p (p, item_base, nfpr)) - return 1; - break; - case FFI_TYPE_LONGDOUBLE: - if (*nfpr >= NUM_FPR_ARG_REGISTERS) - return 1; - (*nfpr) += 1; - item_base += 8; - /* FALL THROUGH */ - case FFI_TYPE_DOUBLE: - if (*nfpr >= NUM_FPR_ARG_REGISTERS) - return 1; - (*nfpr) += 1; - break; - case FFI_TYPE_FLOAT: - if (*nfpr >= NUM_FPR_ARG_REGISTERS) - return 1; - (*nfpr) += 1; - break; - default: - /* If we try and place any item, that is non-float, once we've - exceeded the 8 GPR mark, then we can't fit the struct. */ - if ((unsigned long)item_base >= 8*8) - return 1; - break; - } - /* now count the size of what we just used. */ - struct_offset += p->size; - } - return 0; -} - -/* Can this struct be returned by value? */ -int -darwin64_struct_ret_by_value_p (ffi_type *s) -{ - unsigned nfp = 0; - - FFI_ASSERT (s && s->type == FFI_TYPE_STRUCT); - - /* The largest structure we can return is 8long + 13 doubles. */ - if (s->size > 168) - return 0; - - /* We can't pass more than 13 floats. */ - darwin64_scan_struct_for_floats (s, &nfp); - if (nfp > 13) - return 0; - - /* If there are not too many floats, and the struct is - small enough to accommodate in the GPRs, then it must be OK. */ - if (s->size <= 64) - return 1; - - /* Well, we have to look harder. */ - nfp = 0; - if (darwin64_struct_size_exceeds_gprs_p (s, NULL, &nfp)) - return 0; - - return 1; -} - -void -darwin64_pass_struct_floats (ffi_type *s, char *src, - unsigned *nfpr, double **fprs) -{ - int i; - double *fpr_base = *fprs; - unsigned struct_offset = 0; - - /* We don't assume anything about the alignment of the source. */ - for (i = 0; s->elements[i] != NULL; i++) - { - char *item_base; - ffi_type *p = s->elements[i]; - /* Find the start of this item (0 for the first one). */ - if (i > 0) - struct_offset = ALIGN(struct_offset, p->alignment); - item_base = src + struct_offset; - - switch (p->type) - { - case FFI_TYPE_STRUCT: - darwin64_pass_struct_floats (p, item_base, nfpr, - &fpr_base); - break; - case FFI_TYPE_LONGDOUBLE: - if (*nfpr < NUM_FPR_ARG_REGISTERS) - *fpr_base++ = *(double *)item_base; - (*nfpr) += 1; - item_base += 8; - /* FALL THROUGH */ - case FFI_TYPE_DOUBLE: - if (*nfpr < NUM_FPR_ARG_REGISTERS) - *fpr_base++ = *(double *)item_base; - (*nfpr) += 1; - break; - case FFI_TYPE_FLOAT: - if (*nfpr < NUM_FPR_ARG_REGISTERS) - *fpr_base++ = (double) *(float *)item_base; - (*nfpr) += 1; - break; - default: - break; - } - /* now count the size of what we just used. */ - struct_offset += p->size; - } - /* Update the scores. */ - *fprs = fpr_base; -} - -/* Darwin64 special rules. - Break out a struct into params and float registers. */ -static void -darwin64_pass_struct_by_value (ffi_type *s, char *src, unsigned size, - unsigned *nfpr, double **fprs, unsigned long **arg) -{ - unsigned long *next_arg = *arg; - char *dest_cpy = (char *)next_arg; - - FFI_ASSERT (s->type == FFI_TYPE_STRUCT) - - if (!size) - return; - - /* First... special cases. */ - if (size < 3 - || (size == 4 - && s->elements[0] - && s->elements[0]->type != FFI_TYPE_FLOAT)) - { - /* Must be at least one GPR, padding is unspecified in value, - let's make it zero. */ - *next_arg = 0UL; - dest_cpy += 8 - size; - memcpy ((char *) dest_cpy, src, size); - next_arg++; - } - else if (size == 16) - { - memcpy ((char *) dest_cpy, src, size); - next_arg += 2; - } - else - { - /* now the general case, we consider embedded floats. */ - memcpy ((char *) dest_cpy, src, size); - darwin64_pass_struct_floats (s, src, nfpr, fprs); - next_arg += (size+7)/8; - } - - *arg = next_arg; -} - -double * -darwin64_struct_floats_to_mem (ffi_type *s, char *dest, double *fprs, unsigned *nf) -{ - int i; - unsigned struct_offset = 0; - - /* We don't assume anything about the alignment of the source. */ - for (i = 0; s->elements[i] != NULL; i++) - { - char *item_base; - ffi_type *p = s->elements[i]; - /* Find the start of this item (0 for the first one). */ - if (i > 0) - struct_offset = ALIGN(struct_offset, p->alignment); - item_base = dest + struct_offset; - - switch (p->type) - { - case FFI_TYPE_STRUCT: - fprs = darwin64_struct_floats_to_mem (p, item_base, fprs, nf); - break; - case FFI_TYPE_LONGDOUBLE: - if (*nf < NUM_FPR_ARG_REGISTERS) - { - *(double *)item_base = *fprs++ ; - (*nf) += 1; - } - item_base += 8; - /* FALL THROUGH */ - case FFI_TYPE_DOUBLE: - if (*nf < NUM_FPR_ARG_REGISTERS) - { - *(double *)item_base = *fprs++ ; - (*nf) += 1; - } - break; - case FFI_TYPE_FLOAT: - if (*nf < NUM_FPR_ARG_REGISTERS) - { - *(float *)item_base = (float) *fprs++ ; - (*nf) += 1; - } - break; - default: - break; - } - /* now count the size of what we just used. */ - struct_offset += p->size; - } - return fprs; -} - -#endif - -/* Adjust the size of S to be correct for Darwin. - On Darwin m32, the first field of a structure has natural alignment. - On Darwin m64, all fields have natural alignment. */ - -static void -darwin_adjust_aggregate_sizes (ffi_type *s) -{ - int i; - - if (s->type != FFI_TYPE_STRUCT) - return; - - s->size = 0; - for (i = 0; s->elements[i] != NULL; i++) - { - ffi_type *p; - int align; - - p = s->elements[i]; - if (p->type == FFI_TYPE_STRUCT) - darwin_adjust_aggregate_sizes (p); -#if defined(POWERPC_DARWIN64) - /* Natural alignment for all items. */ - align = p->alignment; -#else - /* Natrual alignment for the first item... */ - if (i == 0) - align = p->alignment; - else if (p->alignment == 16 || p->alignment < 4) - /* .. subsequent items with vector or align < 4 have natural align. */ - align = p->alignment; - else - /* .. or align is 4. */ - align = 4; -#endif - /* Pad, if necessary, before adding the current item. */ - s->size = ALIGN(s->size, align) + p->size; - } - - s->size = ALIGN(s->size, s->alignment); - - /* This should not be necessary on m64, but harmless. */ - if (s->elements[0]->type == FFI_TYPE_UINT64 - || s->elements[0]->type == FFI_TYPE_SINT64 - || s->elements[0]->type == FFI_TYPE_DOUBLE - || s->elements[0]->alignment == 8) - s->alignment = s->alignment > 8 ? s->alignment : 8; - /* Do not add additional tail padding. */ -} - -/* Adjust the size of S to be correct for AIX. - Word-align double unless it is the first member of a structure. */ - -static void -aix_adjust_aggregate_sizes (ffi_type *s) -{ - int i; - - if (s->type != FFI_TYPE_STRUCT) - return; - - s->size = 0; - for (i = 0; s->elements[i] != NULL; i++) - { - ffi_type *p; - int align; - - p = s->elements[i]; - aix_adjust_aggregate_sizes (p); - align = p->alignment; - if (i != 0 && p->type == FFI_TYPE_DOUBLE) - align = 4; - s->size = ALIGN(s->size, align) + p->size; - } - - s->size = ALIGN(s->size, s->alignment); - - if (s->elements[0]->type == FFI_TYPE_UINT64 - || s->elements[0]->type == FFI_TYPE_SINT64 - || s->elements[0]->type == FFI_TYPE_DOUBLE - || s->elements[0]->alignment == 8) - s->alignment = s->alignment > 8 ? s->alignment : 8; - /* Do not add additional tail padding. */ -} - -/* Perform machine dependent cif processing. */ -ffi_status -ffi_prep_cif_machdep (ffi_cif *cif) -{ - /* All this is for the DARWIN ABI. */ - unsigned i; - ffi_type **ptr; - unsigned bytes; - unsigned fparg_count = 0, intarg_count = 0; - unsigned flags = 0; - unsigned size_al = 0; - - /* All the machine-independent calculation of cif->bytes will be wrong. - All the calculation of structure sizes will also be wrong. - Redo the calculation for DARWIN. */ - - if (cif->abi == FFI_DARWIN) - { - darwin_adjust_aggregate_sizes (cif->rtype); - for (i = 0; i < cif->nargs; i++) - darwin_adjust_aggregate_sizes (cif->arg_types[i]); - } - - if (cif->abi == FFI_AIX) - { - aix_adjust_aggregate_sizes (cif->rtype); - for (i = 0; i < cif->nargs; i++) - aix_adjust_aggregate_sizes (cif->arg_types[i]); - } - - /* Space for the frame pointer, callee's LR, CR, etc, and for - the asm's temp regs. */ - - bytes = (LINKAGE_AREA_GPRS + ASM_NEEDS_REGISTERS) * sizeof(unsigned long); - - /* Return value handling. - The rules m32 are as follows: - - 32-bit (or less) integer values are returned in gpr3; - - structures of size <= 4 bytes also returned in gpr3; - - 64-bit integer values [??? and structures between 5 and 8 bytes] are - returned in gpr3 and gpr4; - - Single/double FP values are returned in fpr1; - - Long double FP (if not equivalent to double) values are returned in - fpr1 and fpr2; - m64: - - 64-bit or smaller integral values are returned in GPR3 - - Single/double FP values are returned in fpr1; - - Long double FP values are returned in fpr1 and fpr2; - m64 Structures: - - If the structure could be accommodated in registers were it to be the - first argument to a routine, then it is returned in those registers. - m32/m64 structures otherwise: - - Larger structures values are allocated space and a pointer is passed - as the first argument. */ - switch (cif->rtype->type) - { - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: - flags |= FLAG_RETURNS_128BITS; - flags |= FLAG_RETURNS_FP; - break; -#endif - - case FFI_TYPE_DOUBLE: - flags |= FLAG_RETURNS_64BITS; - /* Fall through. */ - case FFI_TYPE_FLOAT: - flags |= FLAG_RETURNS_FP; - break; - - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: -#ifdef POWERPC64 - case FFI_TYPE_POINTER: -#endif - flags |= FLAG_RETURNS_64BITS; - break; - - case FFI_TYPE_STRUCT: -#if defined(POWERPC_DARWIN64) - { - /* Can we fit the struct into regs? */ - if (darwin64_struct_ret_by_value_p (cif->rtype)) - { - unsigned nfpr = 0; - flags |= FLAG_RETURNS_STRUCT; - if (cif->rtype->size != 16) - darwin64_scan_struct_for_floats (cif->rtype, &nfpr) ; - else - flags |= FLAG_RETURNS_128BITS; - /* Will be 0 for 16byte struct. */ - if (nfpr) - flags |= FLAG_RETURNS_FP; - } - else /* By ref. */ - { - flags |= FLAG_RETVAL_REFERENCE; - flags |= FLAG_RETURNS_NOTHING; - intarg_count++; - } - } -#elif defined(DARWIN_PPC) - if (cif->rtype->size <= 4) - flags |= FLAG_RETURNS_STRUCT; - else /* else by reference. */ - { - flags |= FLAG_RETVAL_REFERENCE; - flags |= FLAG_RETURNS_NOTHING; - intarg_count++; - } -#else /* assume we pass by ref. */ - flags |= FLAG_RETVAL_REFERENCE; - flags |= FLAG_RETURNS_NOTHING; - intarg_count++; -#endif - break; - case FFI_TYPE_VOID: - flags |= FLAG_RETURNS_NOTHING; - break; - - default: - /* Returns 32-bit integer, or similar. Nothing to do here. */ - break; - } - - /* The first NUM_GPR_ARG_REGISTERS words of integer arguments, and the - first NUM_FPR_ARG_REGISTERS fp arguments, go in registers; the rest - goes on the stack. - ??? Structures are passed as a pointer to a copy of the structure. - Stuff on the stack needs to keep proper alignment. - For m64 the count is effectively of half-GPRs. */ - for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) - { - unsigned align_words; - switch ((*ptr)->type) - { - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - fparg_count++; -#if !defined(POWERPC_DARWIN64) - /* If this FP arg is going on the stack, it must be - 8-byte-aligned. */ - if (fparg_count > NUM_FPR_ARG_REGISTERS - && (intarg_count & 0x01) != 0) - intarg_count++; -#endif - break; - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: - fparg_count += 2; - /* If this FP arg is going on the stack, it must be - 16-byte-aligned. */ - if (fparg_count >= NUM_FPR_ARG_REGISTERS) -#if defined (POWERPC64) - intarg_count = ALIGN(intarg_count, 2); -#else - intarg_count = ALIGN(intarg_count, 4); -#endif - break; -#endif - - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: -#if defined(POWERPC64) - intarg_count++; -#else - /* 'long long' arguments are passed as two words, but - either both words must fit in registers or both go - on the stack. If they go on the stack, they must - be 8-byte-aligned. */ - if (intarg_count == NUM_GPR_ARG_REGISTERS-1 - || (intarg_count >= NUM_GPR_ARG_REGISTERS - && (intarg_count & 0x01) != 0)) - intarg_count++; - intarg_count += 2; -#endif - break; - - case FFI_TYPE_STRUCT: - size_al = (*ptr)->size; -#if defined(POWERPC_DARWIN64) - align_words = (*ptr)->alignment >> 3; - if (align_words) - intarg_count = ALIGN(intarg_count, align_words); - /* Base size of the struct. */ - intarg_count += (size_al + 7) / 8; - /* If 16 bytes then don't worry about floats. */ - if (size_al != 16) - /* Scan through for floats to be placed in regs. */ - darwin64_scan_struct_for_floats (*ptr, &fparg_count) ; -#else - align_words = (*ptr)->alignment >> 2; - if (align_words) - intarg_count = ALIGN(intarg_count, align_words); - /* If the first member of the struct is a double, then align - the struct to double-word. - if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE) - size_al = ALIGN((*ptr)->size, 8); */ -# ifdef POWERPC64 - intarg_count += (size_al + 7) / 8; -# else - intarg_count += (size_al + 3) / 4; -# endif -#endif - break; - - default: - /* Everything else is passed as a 4-byte word in a GPR, either - the object itself or a pointer to it. */ - intarg_count++; - break; - } - } - - if (fparg_count != 0) - flags |= FLAG_FP_ARGUMENTS; - -#if defined(POWERPC_DARWIN64) - /* Space to image the FPR registers, if needed - which includes when they might be - used in a struct return. */ - if (fparg_count != 0 - || ((flags & FLAG_RETURNS_STRUCT) - && (flags & FLAG_RETURNS_FP))) - bytes += NUM_FPR_ARG_REGISTERS * sizeof(double); -#else - /* Space for the FPR registers, if needed. */ - if (fparg_count != 0) - bytes += NUM_FPR_ARG_REGISTERS * sizeof(double); -#endif - - /* Stack space. */ -#ifdef POWERPC64 - if ((intarg_count + fparg_count) > NUM_GPR_ARG_REGISTERS) - bytes += (intarg_count + fparg_count) * sizeof(long); -#else - if ((intarg_count + 2 * fparg_count) > NUM_GPR_ARG_REGISTERS) - bytes += (intarg_count + 2 * fparg_count) * sizeof(long); -#endif - else - bytes += NUM_GPR_ARG_REGISTERS * sizeof(long); - - /* The stack space allocated needs to be a multiple of 16 bytes. */ - bytes = ALIGN(bytes, 16) ; - - cif->flags = flags; - cif->bytes = bytes; - - return FFI_OK; -} - -extern void ffi_call_AIX(extended_cif *, long, unsigned, unsigned *, - void (*fn)(void), void (*fn2)(void)); - -extern void ffi_call_DARWIN(extended_cif *, long, unsigned, unsigned *, - void (*fn)(void), void (*fn2)(void), ffi_type*); - -void -ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return - value address then we need to make one. */ - - if ((rvalue == NULL) && - (cif->rtype->type == FFI_TYPE_STRUCT)) - { - ecif.rvalue = alloca (cif->rtype->size); - } - else - ecif.rvalue = rvalue; - - switch (cif->abi) - { - case FFI_AIX: - ffi_call_AIX(&ecif, -(long)cif->bytes, cif->flags, ecif.rvalue, fn, - FFI_FN(ffi_prep_args)); - break; - case FFI_DARWIN: - ffi_call_DARWIN(&ecif, -(long)cif->bytes, cif->flags, ecif.rvalue, fn, - FFI_FN(ffi_prep_args), cif->rtype); - break; - default: - FFI_ASSERT(0); - break; - } -} - -static void flush_icache(char *); -static void flush_range(char *, int); - -/* The layout of a function descriptor. A C function pointer really - points to one of these. */ - -typedef struct aix_fd_struct { - void *code_pointer; - void *toc; -} aix_fd; - -/* here I'd like to add the stack frame layout we use in darwin_closure.S - and aix_closure.S - - m32/m64 - - The stack layout looks like this: - - | Additional params... | | Higher address - ~ ~ ~ - | Parameters (at least 8*4/8=32/64) | | NUM_GPR_ARG_REGISTERS - |--------------------------------------------| | - | TOC=R2 (AIX) Reserved (Darwin) 4/8 | | - |--------------------------------------------| | - | Reserved 2*4/8 | | - |--------------------------------------------| | - | Space for callee's LR 4/8 | | - |--------------------------------------------| | - | Saved CR [low word for m64] 4/8 | | - |--------------------------------------------| | - | Current backchain pointer 4/8 |-/ Parent's frame. - |--------------------------------------------| <+ <<< on entry to ffi_closure_ASM - | Result Bytes 16 | | - |--------------------------------------------| | - ~ padding to 16-byte alignment ~ ~ - |--------------------------------------------| | - | NUM_FPR_ARG_REGISTERS slots | | - | here fp13 .. fp1 13*8 | | - |--------------------------------------------| | - | R3..R10 8*4/8=32/64 | | NUM_GPR_ARG_REGISTERS - |--------------------------------------------| | - | TOC=R2 (AIX) Reserved (Darwin) 4/8 | | - |--------------------------------------------| | stack | - | Reserved [compiler,binder] 2*4/8 | | grows | - |--------------------------------------------| | down V - | Space for callee's LR 4/8 | | - |--------------------------------------------| | lower addresses - | Saved CR [low word for m64] 4/8 | | - |--------------------------------------------| | stack pointer here - | Current backchain pointer 4/8 |-/ during - |--------------------------------------------| <<< ffi_closure_ASM. - -*/ - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*, void*, void**, void*), - void *user_data, - void *codeloc) -{ - unsigned int *tramp; - struct ffi_aix_trampoline_struct *tramp_aix; - aix_fd *fd; - - switch (cif->abi) - { - case FFI_DARWIN: - - FFI_ASSERT (cif->abi == FFI_DARWIN); - - tramp = (unsigned int *) &closure->tramp[0]; -#if defined(POWERPC_DARWIN64) - tramp[0] = 0x7c0802a6; /* mflr r0 */ - tramp[1] = 0x429f0015; /* bcl- 20,4*cr7+so, +0x18 (L1) */ - /* We put the addresses here. */ - tramp[6] = 0x7d6802a6; /*L1: mflr r11 */ - tramp[7] = 0xe98b0000; /* ld r12,0(r11) function address */ - tramp[8] = 0x7c0803a6; /* mtlr r0 */ - tramp[9] = 0x7d8903a6; /* mtctr r12 */ - tramp[10] = 0xe96b0008; /* lwz r11,8(r11) static chain */ - tramp[11] = 0x4e800420; /* bctr */ - - *((unsigned long *)&tramp[2]) = (unsigned long) ffi_closure_ASM; /* function */ - *((unsigned long *)&tramp[4]) = (unsigned long) codeloc; /* context */ -#else - tramp[0] = 0x7c0802a6; /* mflr r0 */ - tramp[1] = 0x429f000d; /* bcl- 20,4*cr7+so,0x10 */ - tramp[4] = 0x7d6802a6; /* mflr r11 */ - tramp[5] = 0x818b0000; /* lwz r12,0(r11) function address */ - tramp[6] = 0x7c0803a6; /* mtlr r0 */ - tramp[7] = 0x7d8903a6; /* mtctr r12 */ - tramp[8] = 0x816b0004; /* lwz r11,4(r11) static chain */ - tramp[9] = 0x4e800420; /* bctr */ - tramp[2] = (unsigned long) ffi_closure_ASM; /* function */ - tramp[3] = (unsigned long) codeloc; /* context */ -#endif - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - - /* Flush the icache. Only necessary on Darwin. */ - flush_range(codeloc, FFI_TRAMPOLINE_SIZE); - - break; - - case FFI_AIX: - - tramp_aix = (struct ffi_aix_trampoline_struct *) (closure->tramp); - fd = (aix_fd *)(void *)ffi_closure_ASM; - - FFI_ASSERT (cif->abi == FFI_AIX); - - tramp_aix->code_pointer = fd->code_pointer; - tramp_aix->toc = fd->toc; - tramp_aix->static_chain = codeloc; - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - - default: - - FFI_ASSERT(0); - break; - } - return FFI_OK; -} - -static void -flush_icache(char *addr) -{ -#ifndef _AIX - __asm__ volatile ( - "dcbf 0,%0\n" - "\tsync\n" - "\ticbi 0,%0\n" - "\tsync\n" - "\tisync" - : : "r"(addr) : "memory"); -#endif -} - -static void -flush_range(char * addr1, int size) -{ -#define MIN_LINE_SIZE 32 - int i; - for (i = 0; i < size; i += MIN_LINE_SIZE) - flush_icache(addr1+i); - flush_icache(addr1+size-1); -} - -typedef union -{ - float f; - double d; -} ffi_dblfl; - -ffi_type * -ffi_closure_helper_DARWIN (ffi_closure *, void *, - unsigned long *, ffi_dblfl *); - -/* Basically the trampoline invokes ffi_closure_ASM, and on - entry, r11 holds the address of the closure. - After storing the registers that could possibly contain - parameters to be passed into the stack frame and setting - up space for a return value, ffi_closure_ASM invokes the - following helper function to do most of the work. */ - -ffi_type * -ffi_closure_helper_DARWIN (ffi_closure *closure, void *rvalue, - unsigned long *pgr, ffi_dblfl *pfr) -{ - /* rvalue is the pointer to space for return value in closure assembly - pgr is the pointer to where r3-r10 are stored in ffi_closure_ASM - pfr is the pointer to where f1-f13 are stored in ffi_closure_ASM. */ - - typedef double ldbits[2]; - - union ldu - { - ldbits lb; - long double ld; - }; - - void ** avalue; - ffi_type ** arg_types; - long i, avn; - ffi_cif * cif; - ffi_dblfl * end_pfr = pfr + NUM_FPR_ARG_REGISTERS; - unsigned size_al; -#if defined(POWERPC_DARWIN64) - unsigned fpsused = 0; -#endif - - cif = closure->cif; - avalue = alloca (cif->nargs * sizeof(void *)); - - if (cif->rtype->type == FFI_TYPE_STRUCT) - { -#if defined(POWERPC_DARWIN64) - if (!darwin64_struct_ret_by_value_p (cif->rtype)) - { - /* Won't fit into the regs - return by ref. */ - rvalue = (void *) *pgr; - pgr++; - } -#elif defined(DARWIN_PPC) - if (cif->rtype->size > 4) - { - rvalue = (void *) *pgr; - pgr++; - } -#else /* assume we return by ref. */ - rvalue = (void *) *pgr; - pgr++; -#endif - } - - i = 0; - avn = cif->nargs; - arg_types = cif->arg_types; - - /* Grab the addresses of the arguments from the stack frame. */ - while (i < avn) - { - switch (arg_types[i]->type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: -#if defined(POWERPC64) - avalue[i] = (char *) pgr + 7; -#else - avalue[i] = (char *) pgr + 3; -#endif - pgr++; - break; - - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: -#if defined(POWERPC64) - avalue[i] = (char *) pgr + 6; -#else - avalue[i] = (char *) pgr + 2; -#endif - pgr++; - break; - - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: -#if defined(POWERPC64) - avalue[i] = (char *) pgr + 4; -#else - case FFI_TYPE_POINTER: - avalue[i] = pgr; -#endif - pgr++; - break; - - case FFI_TYPE_STRUCT: - size_al = arg_types[i]->size; -#if defined(POWERPC_DARWIN64) - pgr = (unsigned long *)ALIGN((char *)pgr, arg_types[i]->alignment); - if (size_al < 3 || size_al == 4) - { - avalue[i] = ((char *)pgr)+8-size_al; - if (arg_types[i]->elements[0]->type == FFI_TYPE_FLOAT - && fpsused < NUM_FPR_ARG_REGISTERS) - { - *(float *)pgr = (float) *(double *)pfr; - pfr++; - fpsused++; - } - } - else - { - if (size_al != 16) - pfr = (ffi_dblfl *) - darwin64_struct_floats_to_mem (arg_types[i], (char *)pgr, - (double *)pfr, &fpsused); - avalue[i] = pgr; - } - pgr += (size_al + 7) / 8; -#else - /* If the first member of the struct is a double, then align - the struct to double-word. */ - if (arg_types[i]->elements[0]->type == FFI_TYPE_DOUBLE) - size_al = ALIGN(arg_types[i]->size, 8); -# if defined(POWERPC64) - FFI_ASSERT (cif->abi != FFI_DARWIN) - avalue[i] = pgr; - pgr += (size_al + 7) / 8; -# else - /* Structures that match the basic modes (QI 1 byte, HI 2 bytes, - SI 4 bytes) are aligned as if they were those modes. */ - if (size_al < 3 && cif->abi == FFI_DARWIN) - avalue[i] = (char*) pgr + 4 - size_al; - else - avalue[i] = pgr; - pgr += (size_al + 3) / 4; -# endif -#endif - break; - - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: -#if defined(POWERPC64) - case FFI_TYPE_POINTER: - avalue[i] = pgr; - pgr++; - break; -#else - /* Long long ints are passed in two gpr's. */ - avalue[i] = pgr; - pgr += 2; - break; -#endif - - case FFI_TYPE_FLOAT: - /* A float value consumes a GPR. - There are 13 64bit floating point registers. */ - if (pfr < end_pfr) - { - double temp = pfr->d; - pfr->f = (float) temp; - avalue[i] = pfr; - pfr++; - } - else - { - avalue[i] = pgr; - } - pgr++; - break; - - case FFI_TYPE_DOUBLE: - /* A double value consumes two GPRs. - There are 13 64bit floating point registers. */ - if (pfr < end_pfr) - { - avalue[i] = pfr; - pfr++; - } - else - { - avalue[i] = pgr; - } -#ifdef POWERPC64 - pgr++; -#else - pgr += 2; -#endif - break; - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - - case FFI_TYPE_LONGDOUBLE: -#ifdef POWERPC64 - if (pfr + 1 < end_pfr) - { - avalue[i] = pfr; - pfr += 2; - } - else - { - if (pfr < end_pfr) - { - *pgr = *(unsigned long *) pfr; - pfr++; - } - avalue[i] = pgr; - } - pgr += 2; -#else /* POWERPC64 */ - /* A long double value consumes four GPRs and two FPRs. - There are 13 64bit floating point registers. */ - if (pfr + 1 < end_pfr) - { - avalue[i] = pfr; - pfr += 2; - } - /* Here we have the situation where one part of the long double - is stored in fpr13 and the other part is already on the stack. - We use a union to pass the long double to avalue[i]. */ - else if (pfr + 1 == end_pfr) - { - union ldu temp_ld; - memcpy (&temp_ld.lb[0], pfr, sizeof(ldbits)); - memcpy (&temp_ld.lb[1], pgr + 2, sizeof(ldbits)); - avalue[i] = &temp_ld.ld; - pfr++; - } - else - { - avalue[i] = pgr; - } - pgr += 4; -#endif /* POWERPC64 */ - break; -#endif - default: - FFI_ASSERT(0); - } - i++; - } - - (closure->fun) (cif, rvalue, avalue, closure->user_data); - - /* Tell ffi_closure_ASM to perform return type promotions. */ - return cif->rtype; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/ffitarget.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/ffitarget.h deleted file mode 100644 index d17f731..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/ffitarget.h +++ /dev/null @@ -1,139 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. - Copyright (C) 2007, 2008, 2010 Free Software Foundation, Inc - Target configuration macros for PowerPC. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -/* ---- System specific configurations ----------------------------------- */ - -#if defined (POWERPC) && defined (__powerpc64__) /* linux64 */ -#ifndef POWERPC64 -#define POWERPC64 -#endif -#elif defined (POWERPC_DARWIN) && defined (__ppc64__) /* Darwin64 */ -#ifndef POWERPC64 -#define POWERPC64 -#endif -#ifndef POWERPC_DARWIN64 -#define POWERPC_DARWIN64 -#endif -#elif defined (POWERPC_AIX) && defined (__64BIT__) /* AIX64 */ -#ifndef POWERPC64 -#define POWERPC64 -#endif -#endif - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - -#ifdef POWERPC - FFI_SYSV, - FFI_GCC_SYSV, - FFI_LINUX64, - FFI_LINUX, - FFI_LINUX_SOFT_FLOAT, -# ifdef POWERPC64 - FFI_DEFAULT_ABI = FFI_LINUX64, -# else -# if (!defined(__NO_FPRS__) && (__LDBL_MANT_DIG__ == 106)) - FFI_DEFAULT_ABI = FFI_LINUX, -# else -# ifdef __NO_FPRS__ - FFI_DEFAULT_ABI = FFI_LINUX_SOFT_FLOAT, -# else - FFI_DEFAULT_ABI = FFI_GCC_SYSV, -# endif -# endif -# endif -#endif - -#ifdef POWERPC_AIX - FFI_AIX, - FFI_DARWIN, - FFI_DEFAULT_ABI = FFI_AIX, -#endif - -#ifdef POWERPC_DARWIN - FFI_AIX, - FFI_DARWIN, - FFI_DEFAULT_ABI = FFI_DARWIN, -#endif - -#ifdef POWERPC_FREEBSD - FFI_SYSV, - FFI_GCC_SYSV, - FFI_LINUX64, - FFI_LINUX, - FFI_LINUX_SOFT_FLOAT, - FFI_DEFAULT_ABI = FFI_SYSV, -#endif - - FFI_LAST_ABI -} ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_NATIVE_RAW_API 0 - -/* For additional types like the below, take care about the order in - ppc_closures.S. They must follow after the FFI_TYPE_LAST. */ - -/* Needed for soft-float long-double-128 support. */ -#define FFI_TYPE_UINT128 (FFI_TYPE_LAST + 1) - -/* Needed for FFI_SYSV small structure returns. - We use two flag bits, (FLAG_SYSV_SMST_R3, FLAG_SYSV_SMST_R4) which are - defined in ffi.c, to determine the exact return type and its size. */ -#define FFI_SYSV_TYPE_SMALL_STRUCT (FFI_TYPE_LAST + 2) - -#if defined(POWERPC64) || defined(POWERPC_AIX) -# if defined(POWERPC_DARWIN64) -# define FFI_TRAMPOLINE_SIZE 48 -# else -# define FFI_TRAMPOLINE_SIZE 24 -# endif -#else /* POWERPC || POWERPC_AIX */ -# define FFI_TRAMPOLINE_SIZE 40 -#endif - -#ifndef LIBFFI_ASM -#if defined(POWERPC_DARWIN) || defined(POWERPC_AIX) -struct ffi_aix_trampoline_struct { - void * code_pointer; /* Pointer to ffi_closure_ASM */ - void * toc; /* TOC */ - void * static_chain; /* Pointer to closure */ -}; -#endif -#endif - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/linux64.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/linux64.S deleted file mode 100644 index 57b56cb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/linux64.S +++ /dev/null @@ -1,187 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.h - Copyright (c) 2003 Jakub Jelinek - Copyright (c) 2008 Red Hat, Inc. - - PowerPC64 Assembly glue. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - -#ifdef __powerpc64__ - .hidden ffi_call_LINUX64, .ffi_call_LINUX64 - .globl ffi_call_LINUX64, .ffi_call_LINUX64 - .section ".opd","aw" - .align 3 -ffi_call_LINUX64: - .quad .ffi_call_LINUX64,.TOC.@tocbase,0 - .size ffi_call_LINUX64,24 - .type .ffi_call_LINUX64,@function - .text -.ffi_call_LINUX64: -.LFB1: - mflr %r0 - std %r28, -32(%r1) - std %r29, -24(%r1) - std %r30, -16(%r1) - std %r31, -8(%r1) - std %r0, 16(%r1) - - mr %r28, %r1 /* our AP. */ -.LCFI0: - stdux %r1, %r1, %r4 - mr %r31, %r5 /* flags, */ - mr %r30, %r6 /* rvalue, */ - mr %r29, %r7 /* function address. */ - std %r2, 40(%r1) - - /* Call ffi_prep_args64. */ - mr %r4, %r1 - bl .ffi_prep_args64 - - ld %r0, 0(%r29) - ld %r2, 8(%r29) - ld %r11, 16(%r29) - - /* Now do the call. */ - /* Set up cr1 with bits 4-7 of the flags. */ - mtcrf 0x40, %r31 - - /* Get the address to call into CTR. */ - mtctr %r0 - /* Load all those argument registers. */ - ld %r3, -32-(8*8)(%r28) - ld %r4, -32-(7*8)(%r28) - ld %r5, -32-(6*8)(%r28) - ld %r6, -32-(5*8)(%r28) - bf- 5, 1f - ld %r7, -32-(4*8)(%r28) - ld %r8, -32-(3*8)(%r28) - ld %r9, -32-(2*8)(%r28) - ld %r10, -32-(1*8)(%r28) -1: - - /* Load all the FP registers. */ - bf- 6, 2f - lfd %f1, -32-(21*8)(%r28) - lfd %f2, -32-(20*8)(%r28) - lfd %f3, -32-(19*8)(%r28) - lfd %f4, -32-(18*8)(%r28) - lfd %f5, -32-(17*8)(%r28) - lfd %f6, -32-(16*8)(%r28) - lfd %f7, -32-(15*8)(%r28) - lfd %f8, -32-(14*8)(%r28) - lfd %f9, -32-(13*8)(%r28) - lfd %f10, -32-(12*8)(%r28) - lfd %f11, -32-(11*8)(%r28) - lfd %f12, -32-(10*8)(%r28) - lfd %f13, -32-(9*8)(%r28) -2: - - /* Make the call. */ - bctrl - - /* This must follow the call immediately, the unwinder - uses this to find out if r2 has been saved or not. */ - ld %r2, 40(%r1) - - /* Now, deal with the return value. */ - mtcrf 0x01, %r31 - bt- 30, .Ldone_return_value - bt- 29, .Lfp_return_value - std %r3, 0(%r30) - /* Fall through... */ - -.Ldone_return_value: - /* Restore the registers we used and return. */ - mr %r1, %r28 - ld %r0, 16(%r28) - ld %r28, -32(%r1) - mtlr %r0 - ld %r29, -24(%r1) - ld %r30, -16(%r1) - ld %r31, -8(%r1) - blr - -.Lfp_return_value: - bf 28, .Lfloat_return_value - stfd %f1, 0(%r30) - mtcrf 0x02, %r31 /* cr6 */ - bf 27, .Ldone_return_value - stfd %f2, 8(%r30) - b .Ldone_return_value -.Lfloat_return_value: - stfs %f1, 0(%r30) - b .Ldone_return_value -.LFE1: - .long 0 - .byte 0,12,0,1,128,4,0,0 - .size .ffi_call_LINUX64,.-.ffi_call_LINUX64 - - .section .eh_frame,EH_FRAME_FLAGS,@progbits -.Lframe1: - .4byte .LECIE1-.LSCIE1 # Length of Common Information Entry -.LSCIE1: - .4byte 0x0 # CIE Identifier Tag - .byte 0x1 # CIE Version - .ascii "zR\0" # CIE Augmentation - .uleb128 0x1 # CIE Code Alignment Factor - .sleb128 -8 # CIE Data Alignment Factor - .byte 0x41 # CIE RA Column - .uleb128 0x1 # Augmentation size - .byte 0x14 # FDE Encoding (pcrel udata8) - .byte 0xc # DW_CFA_def_cfa - .uleb128 0x1 - .uleb128 0x0 - .align 3 -.LECIE1: -.LSFDE1: - .4byte .LEFDE1-.LASFDE1 # FDE Length -.LASFDE1: - .4byte .LASFDE1-.Lframe1 # FDE CIE offset - .8byte .LFB1-. # FDE initial location - .8byte .LFE1-.LFB1 # FDE address range - .uleb128 0x0 # Augmentation size - .byte 0x2 # DW_CFA_advance_loc1 - .byte .LCFI0-.LFB1 - .byte 0xd # DW_CFA_def_cfa_register - .uleb128 0x1c - .byte 0x11 # DW_CFA_offset_extended_sf - .uleb128 0x41 - .sleb128 -2 - .byte 0x9f # DW_CFA_offset, column 0x1f - .uleb128 0x1 - .byte 0x9e # DW_CFA_offset, column 0x1e - .uleb128 0x2 - .byte 0x9d # DW_CFA_offset, column 0x1d - .uleb128 0x3 - .byte 0x9c # DW_CFA_offset, column 0x1c - .uleb128 0x4 - .align 3 -.LEFDE1: -#endif - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/linux64_closure.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/linux64_closure.S deleted file mode 100644 index f7aa2c9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +++ /dev/null @@ -1,236 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.h - Copyright (c) 2003 Jakub Jelinek - Copyright (c) 2008 Red Hat, Inc. - - PowerPC64 Assembly glue. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ -#define LIBFFI_ASM -#include -#include - - .file "linux64_closure.S" - -#ifdef __powerpc64__ - FFI_HIDDEN (ffi_closure_LINUX64) - FFI_HIDDEN (.ffi_closure_LINUX64) - .globl ffi_closure_LINUX64, .ffi_closure_LINUX64 - .section ".opd","aw" - .align 3 -ffi_closure_LINUX64: - .quad .ffi_closure_LINUX64,.TOC.@tocbase,0 - .size ffi_closure_LINUX64,24 - .type .ffi_closure_LINUX64,@function - .text -.ffi_closure_LINUX64: -.LFB1: - # save general regs into parm save area - std %r3, 48(%r1) - std %r4, 56(%r1) - std %r5, 64(%r1) - std %r6, 72(%r1) - mflr %r0 - - std %r7, 80(%r1) - std %r8, 88(%r1) - std %r9, 96(%r1) - std %r10, 104(%r1) - std %r0, 16(%r1) - - # mandatory 48 bytes special reg save area + 64 bytes parm save area - # + 16 bytes retval area + 13*8 bytes fpr save area + round to 16 - stdu %r1, -240(%r1) -.LCFI0: - - # next save fpr 1 to fpr 13 - stfd %f1, 128+(0*8)(%r1) - stfd %f2, 128+(1*8)(%r1) - stfd %f3, 128+(2*8)(%r1) - stfd %f4, 128+(3*8)(%r1) - stfd %f5, 128+(4*8)(%r1) - stfd %f6, 128+(5*8)(%r1) - stfd %f7, 128+(6*8)(%r1) - stfd %f8, 128+(7*8)(%r1) - stfd %f9, 128+(8*8)(%r1) - stfd %f10, 128+(9*8)(%r1) - stfd %f11, 128+(10*8)(%r1) - stfd %f12, 128+(11*8)(%r1) - stfd %f13, 128+(12*8)(%r1) - - # set up registers for the routine that actually does the work - # get the context pointer from the trampoline - mr %r3, %r11 - - # now load up the pointer to the result storage - addi %r4, %r1, 112 - - # now load up the pointer to the parameter save area - # in the previous frame - addi %r5, %r1, 240 + 48 - - # now load up the pointer to the saved fpr registers */ - addi %r6, %r1, 128 - - # make the call - bl .ffi_closure_helper_LINUX64 -.Lret: - - # now r3 contains the return type - # so use it to look up in a table - # so we know how to deal with each type - - # look up the proper starting point in table - # by using return type as offset - mflr %r4 # move address of .Lret to r4 - sldi %r3, %r3, 4 # now multiply return type by 16 - addi %r4, %r4, .Lret_type0 - .Lret - ld %r0, 240+16(%r1) - add %r3, %r3, %r4 # add contents of table to table address - mtctr %r3 - bctr # jump to it - -# Each of the ret_typeX code fragments has to be exactly 16 bytes long -# (4 instructions). For cache effectiveness we align to a 16 byte boundary -# first. - .align 4 - -.Lret_type0: -# case FFI_TYPE_VOID - mtlr %r0 - addi %r1, %r1, 240 - blr - nop -# case FFI_TYPE_INT - lwa %r3, 112+4(%r1) - mtlr %r0 - addi %r1, %r1, 240 - blr -# case FFI_TYPE_FLOAT - lfs %f1, 112+0(%r1) - mtlr %r0 - addi %r1, %r1, 240 - blr -# case FFI_TYPE_DOUBLE - lfd %f1, 112+0(%r1) - mtlr %r0 - addi %r1, %r1, 240 - blr -# case FFI_TYPE_LONGDOUBLE - lfd %f1, 112+0(%r1) - mtlr %r0 - lfd %f2, 112+8(%r1) - b .Lfinish -# case FFI_TYPE_UINT8 - lbz %r3, 112+7(%r1) - mtlr %r0 - addi %r1, %r1, 240 - blr -# case FFI_TYPE_SINT8 - lbz %r3, 112+7(%r1) - extsb %r3,%r3 - mtlr %r0 - b .Lfinish -# case FFI_TYPE_UINT16 - lhz %r3, 112+6(%r1) - mtlr %r0 -.Lfinish: - addi %r1, %r1, 240 - blr -# case FFI_TYPE_SINT16 - lha %r3, 112+6(%r1) - mtlr %r0 - addi %r1, %r1, 240 - blr -# case FFI_TYPE_UINT32 - lwz %r3, 112+4(%r1) - mtlr %r0 - addi %r1, %r1, 240 - blr -# case FFI_TYPE_SINT32 - lwa %r3, 112+4(%r1) - mtlr %r0 - addi %r1, %r1, 240 - blr -# case FFI_TYPE_UINT64 - ld %r3, 112+0(%r1) - mtlr %r0 - addi %r1, %r1, 240 - blr -# case FFI_TYPE_SINT64 - ld %r3, 112+0(%r1) - mtlr %r0 - addi %r1, %r1, 240 - blr -# case FFI_TYPE_STRUCT - mtlr %r0 - addi %r1, %r1, 240 - blr - nop -# case FFI_TYPE_POINTER - ld %r3, 112+0(%r1) - mtlr %r0 - addi %r1, %r1, 240 - blr -# esac -.LFE1: - .long 0 - .byte 0,12,0,1,128,0,0,0 - .size .ffi_closure_LINUX64,.-.ffi_closure_LINUX64 - - .section .eh_frame,EH_FRAME_FLAGS,@progbits -.Lframe1: - .4byte .LECIE1-.LSCIE1 # Length of Common Information Entry -.LSCIE1: - .4byte 0x0 # CIE Identifier Tag - .byte 0x1 # CIE Version - .ascii "zR\0" # CIE Augmentation - .uleb128 0x1 # CIE Code Alignment Factor - .sleb128 -8 # CIE Data Alignment Factor - .byte 0x41 # CIE RA Column - .uleb128 0x1 # Augmentation size - .byte 0x14 # FDE Encoding (pcrel udata8) - .byte 0xc # DW_CFA_def_cfa - .uleb128 0x1 - .uleb128 0x0 - .align 3 -.LECIE1: -.LSFDE1: - .4byte .LEFDE1-.LASFDE1 # FDE Length -.LASFDE1: - .4byte .LASFDE1-.Lframe1 # FDE CIE offset - .8byte .LFB1-. # FDE initial location - .8byte .LFE1-.LFB1 # FDE address range - .uleb128 0x0 # Augmentation size - .byte 0x2 # DW_CFA_advance_loc1 - .byte .LCFI0-.LFB1 - .byte 0xe # DW_CFA_def_cfa_offset - .uleb128 240 - .byte 0x11 # DW_CFA_offset_extended_sf - .uleb128 0x41 - .sleb128 -2 - .align 3 -.LEFDE1: -#endif - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/ppc_closure.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/ppc_closure.S deleted file mode 100644 index 56f7d1a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +++ /dev/null @@ -1,327 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.h - Copyright (c) 2003 Jakub Jelinek - Copyright (c) 2008 Red Hat, Inc. - - PowerPC Assembly glue. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ -#define LIBFFI_ASM -#include -#include -#include - - .file "ppc_closure.S" - -#ifndef __powerpc64__ - -ENTRY(ffi_closure_SYSV) -.LFB1: - stwu %r1,-144(%r1) -.LCFI0: - mflr %r0 -.LCFI1: - stw %r0,148(%r1) - -# we want to build up an areas for the parameters passed -# in registers (both floating point and integer) - - # so first save gpr 3 to gpr 10 (aligned to 4) - stw %r3, 16(%r1) - stw %r4, 20(%r1) - stw %r5, 24(%r1) - stw %r6, 28(%r1) - stw %r7, 32(%r1) - stw %r8, 36(%r1) - stw %r9, 40(%r1) - stw %r10,44(%r1) - -#ifndef __NO_FPRS__ - # next save fpr 1 to fpr 8 (aligned to 8) - stfd %f1, 48(%r1) - stfd %f2, 56(%r1) - stfd %f3, 64(%r1) - stfd %f4, 72(%r1) - stfd %f5, 80(%r1) - stfd %f6, 88(%r1) - stfd %f7, 96(%r1) - stfd %f8, 104(%r1) -#endif - - # set up registers for the routine that actually does the work - # get the context pointer from the trampoline - mr %r3,%r11 - - # now load up the pointer to the result storage - addi %r4,%r1,112 - - # now load up the pointer to the saved gpr registers - addi %r5,%r1,16 - - # now load up the pointer to the saved fpr registers */ - addi %r6,%r1,48 - - # now load up the pointer to the outgoing parameter - # stack in the previous frame - # i.e. the previous frame pointer + 8 - addi %r7,%r1,152 - - # make the call - bl ffi_closure_helper_SYSV@local -.Lret: - # now r3 contains the return type - # so use it to look up in a table - # so we know how to deal with each type - - # look up the proper starting point in table - # by using return type as offset - - mflr %r4 # move address of .Lret to r4 - slwi %r3,%r3,4 # now multiply return type by 16 - addi %r4, %r4, .Lret_type0 - .Lret - lwz %r0,148(%r1) - add %r3,%r3,%r4 # add contents of table to table address - mtctr %r3 - bctr # jump to it -.LFE1: - -# Each of the ret_typeX code fragments has to be exactly 16 bytes long -# (4 instructions). For cache effectiveness we align to a 16 byte boundary -# first. - .align 4 -# case FFI_TYPE_VOID -.Lret_type0: - mtlr %r0 - addi %r1,%r1,144 - blr - nop - -# case FFI_TYPE_INT - lwz %r3,112+0(%r1) - mtlr %r0 -.Lfinish: - addi %r1,%r1,144 - blr - -# case FFI_TYPE_FLOAT - lfs %f1,112+0(%r1) - mtlr %r0 - addi %r1,%r1,144 - blr - -# case FFI_TYPE_DOUBLE - lfd %f1,112+0(%r1) - mtlr %r0 - addi %r1,%r1,144 - blr - -# case FFI_TYPE_LONGDOUBLE - lfd %f1,112+0(%r1) - lfd %f2,112+8(%r1) - mtlr %r0 - b .Lfinish - -# case FFI_TYPE_UINT8 - lbz %r3,112+3(%r1) - mtlr %r0 - addi %r1,%r1,144 - blr - -# case FFI_TYPE_SINT8 - lbz %r3,112+3(%r1) - extsb %r3,%r3 - mtlr %r0 - b .Lfinish - -# case FFI_TYPE_UINT16 - lhz %r3,112+2(%r1) - mtlr %r0 - addi %r1,%r1,144 - blr - -# case FFI_TYPE_SINT16 - lha %r3,112+2(%r1) - mtlr %r0 - addi %r1,%r1,144 - blr - -# case FFI_TYPE_UINT32 - lwz %r3,112+0(%r1) - mtlr %r0 - addi %r1,%r1,144 - blr - -# case FFI_TYPE_SINT32 - lwz %r3,112+0(%r1) - mtlr %r0 - addi %r1,%r1,144 - blr - -# case FFI_TYPE_UINT64 - lwz %r3,112+0(%r1) - lwz %r4,112+4(%r1) - mtlr %r0 - b .Lfinish - -# case FFI_TYPE_SINT64 - lwz %r3,112+0(%r1) - lwz %r4,112+4(%r1) - mtlr %r0 - b .Lfinish - -# case FFI_TYPE_STRUCT - mtlr %r0 - addi %r1,%r1,144 - blr - nop - -# case FFI_TYPE_POINTER - lwz %r3,112+0(%r1) - mtlr %r0 - addi %r1,%r1,144 - blr - -# case FFI_TYPE_UINT128 - lwz %r3,112+0(%r1) - lwz %r4,112+4(%r1) - lwz %r5,112+8(%r1) - bl .Luint128 - -# The return types below are only used when the ABI type is FFI_SYSV. -# case FFI_SYSV_TYPE_SMALL_STRUCT + 1. One byte struct. - lbz %r3,112+0(%r1) - mtlr %r0 - addi %r1,%r1,144 - blr - -# case FFI_SYSV_TYPE_SMALL_STRUCT + 2. Two byte struct. - lhz %r3,112+0(%r1) - mtlr %r0 - addi %r1,%r1,144 - blr - -# case FFI_SYSV_TYPE_SMALL_STRUCT + 3. Three byte struct. - lwz %r3,112+0(%r1) - srwi %r3,%r3,8 - mtlr %r0 - b .Lfinish - -# case FFI_SYSV_TYPE_SMALL_STRUCT + 4. Four byte struct. - lwz %r3,112+0(%r1) - mtlr %r0 - addi %r1,%r1,144 - blr - -# case FFI_SYSV_TYPE_SMALL_STRUCT + 5. Five byte struct. - lwz %r3,112+0(%r1) - lwz %r4,112+4(%r1) - li %r5,24 - b .Lstruct567 - -# case FFI_SYSV_TYPE_SMALL_STRUCT + 6. Six byte struct. - lwz %r3,112+0(%r1) - lwz %r4,112+4(%r1) - li %r5,16 - b .Lstruct567 - -# case FFI_SYSV_TYPE_SMALL_STRUCT + 7. Seven byte struct. - lwz %r3,112+0(%r1) - lwz %r4,112+4(%r1) - li %r5,8 - b .Lstruct567 - -# case FFI_SYSV_TYPE_SMALL_STRUCT + 8. Eight byte struct. - lwz %r3,112+0(%r1) - lwz %r4,112+4(%r1) - mtlr %r0 - b .Lfinish - -.Lstruct567: - subfic %r6,%r5,32 - srw %r4,%r4,%r5 - slw %r6,%r3,%r6 - srw %r3,%r3,%r5 - or %r4,%r6,%r4 - mtlr %r0 - addi %r1,%r1,144 - blr - -.Luint128: - lwz %r6,112+12(%r1) - mtlr %r0 - addi %r1,%r1,144 - blr - -END(ffi_closure_SYSV) - - .section ".eh_frame",EH_FRAME_FLAGS,@progbits -.Lframe1: - .4byte .LECIE1-.LSCIE1 # Length of Common Information Entry -.LSCIE1: - .4byte 0x0 # CIE Identifier Tag - .byte 0x1 # CIE Version -#if defined _RELOCATABLE || defined __PIC__ - .ascii "zR\0" # CIE Augmentation -#else - .ascii "\0" # CIE Augmentation -#endif - .uleb128 0x1 # CIE Code Alignment Factor - .sleb128 -4 # CIE Data Alignment Factor - .byte 0x41 # CIE RA Column -#if defined _RELOCATABLE || defined __PIC__ - .uleb128 0x1 # Augmentation size - .byte 0x1b # FDE Encoding (pcrel sdata4) -#endif - .byte 0xc # DW_CFA_def_cfa - .uleb128 0x1 - .uleb128 0x0 - .align 2 -.LECIE1: -.LSFDE1: - .4byte .LEFDE1-.LASFDE1 # FDE Length -.LASFDE1: - .4byte .LASFDE1-.Lframe1 # FDE CIE offset -#if defined _RELOCATABLE || defined __PIC__ - .4byte .LFB1-. # FDE initial location -#else - .4byte .LFB1 # FDE initial location -#endif - .4byte .LFE1-.LFB1 # FDE address range -#if defined _RELOCATABLE || defined __PIC__ - .uleb128 0x0 # Augmentation size -#endif - .byte 0x4 # DW_CFA_advance_loc4 - .4byte .LCFI0-.LFB1 - .byte 0xe # DW_CFA_def_cfa_offset - .uleb128 144 - .byte 0x4 # DW_CFA_advance_loc4 - .4byte .LCFI1-.LCFI0 - .byte 0x11 # DW_CFA_offset_extended_sf - .uleb128 0x41 - .sleb128 -1 - .align 2 -.LEFDE1: - -#endif - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/sysv.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/sysv.S deleted file mode 100644 index 96ea22b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/powerpc/sysv.S +++ /dev/null @@ -1,219 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 1998 Geoffrey Keating - Copyright (C) 2007 Free Software Foundation, Inc - - PowerPC Assembly glue. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include -#include - -#ifndef __powerpc64__ - .globl ffi_prep_args_SYSV -ENTRY(ffi_call_SYSV) -.LFB1: - /* Save the old stack pointer as AP. */ - mr %r8,%r1 - -.LCFI0: - /* Allocate the stack space we need. */ - stwux %r1,%r1,%r4 - /* Save registers we use. */ - mflr %r9 - stw %r28,-16(%r8) -.LCFI1: - stw %r29,-12(%r8) -.LCFI2: - stw %r30, -8(%r8) -.LCFI3: - stw %r31, -4(%r8) -.LCFI4: - stw %r9, 4(%r8) -.LCFI5: - - /* Save arguments over call... */ - mr %r31,%r5 /* flags, */ - mr %r30,%r6 /* rvalue, */ - mr %r29,%r7 /* function address, */ - mr %r28,%r8 /* our AP. */ -.LCFI6: - - /* Call ffi_prep_args_SYSV. */ - mr %r4,%r1 - bl ffi_prep_args_SYSV@local - - /* Now do the call. */ - /* Set up cr1 with bits 4-7 of the flags. */ - mtcrf 0x40,%r31 - /* Get the address to call into CTR. */ - mtctr %r29 - /* Load all those argument registers. */ - lwz %r3,-16-(8*4)(%r28) - lwz %r4,-16-(7*4)(%r28) - lwz %r5,-16-(6*4)(%r28) - lwz %r6,-16-(5*4)(%r28) - bf- 5,1f - nop - lwz %r7,-16-(4*4)(%r28) - lwz %r8,-16-(3*4)(%r28) - lwz %r9,-16-(2*4)(%r28) - lwz %r10,-16-(1*4)(%r28) - nop -1: - - /* Load all the FP registers. */ - bf- 6,2f - lfd %f1,-16-(8*4)-(8*8)(%r28) - lfd %f2,-16-(8*4)-(7*8)(%r28) - lfd %f3,-16-(8*4)-(6*8)(%r28) - lfd %f4,-16-(8*4)-(5*8)(%r28) - nop - lfd %f5,-16-(8*4)-(4*8)(%r28) - lfd %f6,-16-(8*4)-(3*8)(%r28) - lfd %f7,-16-(8*4)-(2*8)(%r28) - lfd %f8,-16-(8*4)-(1*8)(%r28) -2: - - /* Make the call. */ - bctrl - - /* Now, deal with the return value. */ - mtcrf 0x01,%r31 /* cr7 */ - bt- 31,L(small_struct_return_value) - bt- 30,L(done_return_value) - bt- 29,L(fp_return_value) - stw %r3,0(%r30) - bf+ 28,L(done_return_value) - stw %r4,4(%r30) - mtcrf 0x02,%r31 /* cr6 */ - bf 27,L(done_return_value) - stw %r5,8(%r30) - stw %r6,12(%r30) - /* Fall through... */ - -L(done_return_value): - /* Restore the registers we used and return. */ - lwz %r9, 4(%r28) - lwz %r31, -4(%r28) - mtlr %r9 - lwz %r30, -8(%r28) - lwz %r29,-12(%r28) - lwz %r28,-16(%r28) - lwz %r1,0(%r1) - blr - -L(fp_return_value): - bf 28,L(float_return_value) - stfd %f1,0(%r30) - mtcrf 0x02,%r31 /* cr6 */ - bf 27,L(done_return_value) - stfd %f2,8(%r30) - b L(done_return_value) -L(float_return_value): - stfs %f1,0(%r30) - b L(done_return_value) - -L(small_struct_return_value): - extrwi %r6,%r31,2,19 /* number of bytes padding = shift/8 */ - mtcrf 0x02,%r31 /* copy flags to cr[24:27] (cr6) */ - extrwi %r5,%r31,5,19 /* r5 <- number of bits of padding */ - subfic %r6,%r6,4 /* r6 <- number of useful bytes in r3 */ - bf- 25,L(done_return_value) /* struct in r3 ? if not, done. */ -/* smst_one_register: */ - slw %r3,%r3,%r5 /* Left-justify value in r3 */ - mtxer %r6 /* move byte count to XER ... */ - stswx %r3,0,%r30 /* ... and store that many bytes */ - bf+ 26,L(done_return_value) /* struct in r3:r4 ? */ - add %r6,%r6,%r30 /* adjust pointer */ - stswi %r4,%r6,4 /* store last four bytes */ - b L(done_return_value) - -.LFE1: -END(ffi_call_SYSV) - - .section ".eh_frame",EH_FRAME_FLAGS,@progbits -.Lframe1: - .4byte .LECIE1-.LSCIE1 /* Length of Common Information Entry */ -.LSCIE1: - .4byte 0x0 /* CIE Identifier Tag */ - .byte 0x1 /* CIE Version */ -#if defined _RELOCATABLE || defined __PIC__ - .ascii "zR\0" /* CIE Augmentation */ -#else - .ascii "\0" /* CIE Augmentation */ -#endif - .uleb128 0x1 /* CIE Code Alignment Factor */ - .sleb128 -4 /* CIE Data Alignment Factor */ - .byte 0x41 /* CIE RA Column */ -#if defined _RELOCATABLE || defined __PIC__ - .uleb128 0x1 /* Augmentation size */ - .byte 0x1b /* FDE Encoding (pcrel sdata4) */ -#endif - .byte 0xc /* DW_CFA_def_cfa */ - .uleb128 0x1 - .uleb128 0x0 - .align 2 -.LECIE1: -.LSFDE1: - .4byte .LEFDE1-.LASFDE1 /* FDE Length */ -.LASFDE1: - .4byte .LASFDE1-.Lframe1 /* FDE CIE offset */ -#if defined _RELOCATABLE || defined __PIC__ - .4byte .LFB1-. /* FDE initial location */ -#else - .4byte .LFB1 /* FDE initial location */ -#endif - .4byte .LFE1-.LFB1 /* FDE address range */ -#if defined _RELOCATABLE || defined __PIC__ - .uleb128 0x0 /* Augmentation size */ -#endif - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI0-.LFB1 - .byte 0xd /* DW_CFA_def_cfa_register */ - .uleb128 0x08 - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI5-.LCFI0 - .byte 0x11 /* DW_CFA_offset_extended_sf */ - .uleb128 0x41 - .sleb128 -1 - .byte 0x9f /* DW_CFA_offset, column 0x1f */ - .uleb128 0x1 - .byte 0x9e /* DW_CFA_offset, column 0x1e */ - .uleb128 0x2 - .byte 0x9d /* DW_CFA_offset, column 0x1d */ - .uleb128 0x3 - .byte 0x9c /* DW_CFA_offset, column 0x1c */ - .uleb128 0x4 - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI6-.LCFI5 - .byte 0xd /* DW_CFA_def_cfa_register */ - .uleb128 0x1c - .align 2 -.LEFDE1: -#endif - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/prep_cif.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/prep_cif.c deleted file mode 100644 index 8548cfd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/prep_cif.c +++ /dev/null @@ -1,177 +0,0 @@ -/* ----------------------------------------------------------------------- - prep_cif.c - Copyright (c) 2011 Anthony Green - Copyright (c) 1996, 1998, 2007 Red Hat, Inc. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#include -#include -#include - -/* Round up to FFI_SIZEOF_ARG. */ - -#define STACK_ARG_SIZE(x) ALIGN(x, FFI_SIZEOF_ARG) - -/* Perform machine independent initialization of aggregate type - specifications. */ - -static ffi_status initialize_aggregate(ffi_type *arg) -{ - ffi_type **ptr; - - if (UNLIKELY(arg == NULL || arg->elements == NULL)) - return FFI_BAD_TYPEDEF; - - arg->size = 0; - arg->alignment = 0; - - ptr = &(arg->elements[0]); - - if (UNLIKELY(ptr == 0)) - return FFI_BAD_TYPEDEF; - - while ((*ptr) != NULL) - { - if (UNLIKELY(((*ptr)->size == 0) - && (initialize_aggregate((*ptr)) != FFI_OK))) - return FFI_BAD_TYPEDEF; - - /* Perform a sanity check on the argument type */ - FFI_ASSERT_VALID_TYPE(*ptr); - - arg->size = ALIGN(arg->size, (*ptr)->alignment); - arg->size += (*ptr)->size; - - arg->alignment = (arg->alignment > (*ptr)->alignment) ? - arg->alignment : (*ptr)->alignment; - - ptr++; - } - - /* Structure size includes tail padding. This is important for - structures that fit in one register on ABIs like the PowerPC64 - Linux ABI that right justify small structs in a register. - It's also needed for nested structure layout, for example - struct A { long a; char b; }; struct B { struct A x; char y; }; - should find y at an offset of 2*sizeof(long) and result in a - total size of 3*sizeof(long). */ - arg->size = ALIGN (arg->size, arg->alignment); - - if (arg->size == 0) - return FFI_BAD_TYPEDEF; - else - return FFI_OK; -} - -#ifndef __CRIS__ -/* The CRIS ABI specifies structure elements to have byte - alignment only, so it completely overrides this functions, - which assumes "natural" alignment and padding. */ - -/* Perform machine independent ffi_cif preparation, then call - machine dependent routine. */ - -ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, unsigned int nargs, - ffi_type *rtype, ffi_type **atypes) -{ - unsigned bytes = 0; - unsigned int i; - ffi_type **ptr; - - FFI_ASSERT(cif != NULL); - if (! (abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI)) - return FFI_BAD_ABI; - - cif->abi = abi; - cif->arg_types = atypes; - cif->nargs = nargs; - cif->rtype = rtype; - - cif->flags = 0; - - /* Initialize the return type if necessary */ - if ((cif->rtype->size == 0) && (initialize_aggregate(cif->rtype) != FFI_OK)) - return FFI_BAD_TYPEDEF; - - /* Perform a sanity check on the return type */ - FFI_ASSERT_VALID_TYPE(cif->rtype); - - /* x86, x86-64 and s390 stack space allocation is handled in prep_machdep. */ -#if !defined M68K && !defined X86_ANY && !defined S390 && !defined PA - /* Make space for the return structure pointer */ - if (cif->rtype->type == FFI_TYPE_STRUCT -#ifdef SPARC - && (cif->abi != FFI_V9 || cif->rtype->size > 32) -#endif - ) - bytes = STACK_ARG_SIZE(sizeof(void*)); -#endif - - for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) - { - - /* Initialize any uninitialized aggregate type definitions */ - if (((*ptr)->size == 0) && (initialize_aggregate((*ptr)) != FFI_OK)) - return FFI_BAD_TYPEDEF; - - /* Perform a sanity check on the argument type, do this - check after the initialization. */ - FFI_ASSERT_VALID_TYPE(*ptr); - -#if !defined X86_ANY && !defined S390 && !defined PA -#ifdef SPARC - if (((*ptr)->type == FFI_TYPE_STRUCT - && ((*ptr)->size > 16 || cif->abi != FFI_V9)) - || ((*ptr)->type == FFI_TYPE_LONGDOUBLE - && cif->abi != FFI_V9)) - bytes += sizeof(void*); - else -#endif - { - /* Add any padding if necessary */ - if (((*ptr)->alignment - 1) & bytes) - bytes = ALIGN(bytes, (*ptr)->alignment); - - bytes += STACK_ARG_SIZE((*ptr)->size); - } -#endif - } - - cif->bytes = bytes; - - /* Perform machine dependent cif processing */ - return ffi_prep_cif_machdep(cif); -} -#endif /* not __CRIS__ */ - -#if FFI_CLOSURES - -ffi_status -ffi_prep_closure (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data) -{ - return ffi_prep_closure_loc (closure, cif, fun, user_data, closure); -} - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/raw_api.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/raw_api.c deleted file mode 100644 index ce21372..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/raw_api.c +++ /dev/null @@ -1,254 +0,0 @@ -/* ----------------------------------------------------------------------- - raw_api.c - Copyright (c) 1999, 2008 Red Hat, Inc. - - Author: Kresten Krab Thorup - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -/* This file defines generic functions for use with the raw api. */ - -#include -#include - -#if !FFI_NO_RAW_API - -size_t -ffi_raw_size (ffi_cif *cif) -{ - size_t result = 0; - int i; - - ffi_type **at = cif->arg_types; - - for (i = cif->nargs-1; i >= 0; i--, at++) - { -#if !FFI_NO_STRUCTS - if ((*at)->type == FFI_TYPE_STRUCT) - result += ALIGN (sizeof (void*), FFI_SIZEOF_ARG); - else -#endif - result += ALIGN ((*at)->size, FFI_SIZEOF_ARG); - } - - return result; -} - - -void -ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args) -{ - unsigned i; - ffi_type **tp = cif->arg_types; - -#if WORDS_BIGENDIAN - - for (i = 0; i < cif->nargs; i++, tp++, args++) - { - switch ((*tp)->type) - { - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT8: - *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 1); - break; - - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT16: - *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 2); - break; - -#if FFI_SIZEOF_ARG >= 4 - case FFI_TYPE_UINT32: - case FFI_TYPE_SINT32: - *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 4); - break; -#endif - -#if !FFI_NO_STRUCTS - case FFI_TYPE_STRUCT: - *args = (raw++)->ptr; - break; -#endif - - case FFI_TYPE_POINTER: - *args = (void*) &(raw++)->ptr; - break; - - default: - *args = raw; - raw += ALIGN ((*tp)->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; - } - } - -#else /* WORDS_BIGENDIAN */ - -#if !PDP - - /* then assume little endian */ - for (i = 0; i < cif->nargs; i++, tp++, args++) - { -#if !FFI_NO_STRUCTS - if ((*tp)->type == FFI_TYPE_STRUCT) - { - *args = (raw++)->ptr; - } - else -#endif - { - *args = (void*) raw; - raw += ALIGN ((*tp)->size, sizeof (void*)) / sizeof (void*); - } - } - -#else -#error "pdp endian not supported" -#endif /* ! PDP */ - -#endif /* WORDS_BIGENDIAN */ -} - -void -ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw) -{ - unsigned i; - ffi_type **tp = cif->arg_types; - - for (i = 0; i < cif->nargs; i++, tp++, args++) - { - switch ((*tp)->type) - { - case FFI_TYPE_UINT8: - (raw++)->uint = *(UINT8*) (*args); - break; - - case FFI_TYPE_SINT8: - (raw++)->sint = *(SINT8*) (*args); - break; - - case FFI_TYPE_UINT16: - (raw++)->uint = *(UINT16*) (*args); - break; - - case FFI_TYPE_SINT16: - (raw++)->sint = *(SINT16*) (*args); - break; - -#if FFI_SIZEOF_ARG >= 4 - case FFI_TYPE_UINT32: - (raw++)->uint = *(UINT32*) (*args); - break; - - case FFI_TYPE_SINT32: - (raw++)->sint = *(SINT32*) (*args); - break; -#endif - -#if !FFI_NO_STRUCTS - case FFI_TYPE_STRUCT: - (raw++)->ptr = *args; - break; -#endif - - case FFI_TYPE_POINTER: - (raw++)->ptr = **(void***) args; - break; - - default: - memcpy ((void*) raw->data, (void*)*args, (*tp)->size); - raw += ALIGN ((*tp)->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; - } - } -} - -#if !FFI_NATIVE_RAW_API - - -/* This is a generic definition of ffi_raw_call, to be used if the - * native system does not provide a machine-specific implementation. - * Having this, allows code to be written for the raw API, without - * the need for system-specific code to handle input in that format; - * these following couple of functions will handle the translation forth - * and back automatically. */ - -void ffi_raw_call (ffi_cif *cif, void (*fn)(void), void *rvalue, ffi_raw *raw) -{ - void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); - ffi_raw_to_ptrarray (cif, raw, avalue); - ffi_call (cif, fn, rvalue, avalue); -} - -#if FFI_CLOSURES /* base system provides closures */ - -static void -ffi_translate_args (ffi_cif *cif, void *rvalue, - void **avalue, void *user_data) -{ - ffi_raw *raw = (ffi_raw*)alloca (ffi_raw_size (cif)); - ffi_raw_closure *cl = (ffi_raw_closure*)user_data; - - ffi_ptrarray_to_raw (cif, avalue, raw); - (*cl->fun) (cif, rvalue, raw, cl->user_data); -} - -ffi_status -ffi_prep_raw_closure_loc (ffi_raw_closure* cl, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_raw*,void*), - void *user_data, - void *codeloc) -{ - ffi_status status; - - status = ffi_prep_closure_loc ((ffi_closure*) cl, - cif, - &ffi_translate_args, - codeloc, - codeloc); - if (status == FFI_OK) - { - cl->fun = fun; - cl->user_data = user_data; - } - - return status; -} - -#endif /* FFI_CLOSURES */ -#endif /* !FFI_NATIVE_RAW_API */ - -#if FFI_CLOSURES - -/* Again, here is the generic version of ffi_prep_raw_closure, which - * will install an intermediate "hub" for translation of arguments from - * the pointer-array format, to the raw format */ - -ffi_status -ffi_prep_raw_closure (ffi_raw_closure* cl, - ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_raw*,void*), - void *user_data) -{ - return ffi_prep_raw_closure_loc (cl, cif, fun, user_data, cl); -} - -#endif /* FFI_CLOSURES */ - -#endif /* !FFI_NO_RAW_API */ diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/s390/ffi.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/s390/ffi.c deleted file mode 100644 index ca2675b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/s390/ffi.c +++ /dev/null @@ -1,780 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2000, 2007 Software AG - Copyright (c) 2008 Red Hat, Inc - - S390 Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR - OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ -/*====================================================================*/ -/* Includes */ -/* -------- */ -/*====================================================================*/ - -#include -#include - -#include -#include - -/*====================== End of Includes =============================*/ - -/*====================================================================*/ -/* Defines */ -/* ------- */ -/*====================================================================*/ - -/* Maximum number of GPRs available for argument passing. */ -#define MAX_GPRARGS 5 - -/* Maximum number of FPRs available for argument passing. */ -#ifdef __s390x__ -#define MAX_FPRARGS 4 -#else -#define MAX_FPRARGS 2 -#endif - -/* Round to multiple of 16. */ -#define ROUND_SIZE(size) (((size) + 15) & ~15) - -/* If these values change, sysv.S must be adapted! */ -#define FFI390_RET_VOID 0 -#define FFI390_RET_STRUCT 1 -#define FFI390_RET_FLOAT 2 -#define FFI390_RET_DOUBLE 3 -#define FFI390_RET_INT32 4 -#define FFI390_RET_INT64 5 - -/*===================== End of Defines ===============================*/ - -/*====================================================================*/ -/* Prototypes */ -/* ---------- */ -/*====================================================================*/ - -static void ffi_prep_args (unsigned char *, extended_cif *); -void -#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2) -__attribute__ ((visibility ("hidden"))) -#endif -ffi_closure_helper_SYSV (ffi_closure *, unsigned long *, - unsigned long long *, unsigned long *); - -/*====================== End of Prototypes ===========================*/ - -/*====================================================================*/ -/* Externals */ -/* --------- */ -/*====================================================================*/ - -extern void ffi_call_SYSV(unsigned, - extended_cif *, - void (*)(unsigned char *, extended_cif *), - unsigned, - void *, - void (*fn)(void)); - -extern void ffi_closure_SYSV(void); - -/*====================== End of Externals ============================*/ - -/*====================================================================*/ -/* */ -/* Name - ffi_check_struct_type. */ -/* */ -/* Function - Determine if a structure can be passed within a */ -/* general purpose or floating point register. */ -/* */ -/*====================================================================*/ - -static int -ffi_check_struct_type (ffi_type *arg) -{ - size_t size = arg->size; - - /* If the struct has just one element, look at that element - to find out whether to consider the struct as floating point. */ - while (arg->type == FFI_TYPE_STRUCT - && arg->elements[0] && !arg->elements[1]) - arg = arg->elements[0]; - - /* Structs of size 1, 2, 4, and 8 are passed in registers, - just like the corresponding int/float types. */ - switch (size) - { - case 1: - return FFI_TYPE_UINT8; - - case 2: - return FFI_TYPE_UINT16; - - case 4: - if (arg->type == FFI_TYPE_FLOAT) - return FFI_TYPE_FLOAT; - else - return FFI_TYPE_UINT32; - - case 8: - if (arg->type == FFI_TYPE_DOUBLE) - return FFI_TYPE_DOUBLE; - else - return FFI_TYPE_UINT64; - - default: - break; - } - - /* Other structs are passed via a pointer to the data. */ - return FFI_TYPE_POINTER; -} - -/*======================== End of Routine ============================*/ - -/*====================================================================*/ -/* */ -/* Name - ffi_prep_args. */ -/* */ -/* Function - Prepare parameters for call to function. */ -/* */ -/* ffi_prep_args is called by the assembly routine once stack space */ -/* has been allocated for the function's arguments. */ -/* */ -/*====================================================================*/ - -static void -ffi_prep_args (unsigned char *stack, extended_cif *ecif) -{ - /* The stack space will be filled with those areas: - - FPR argument register save area (highest addresses) - GPR argument register save area - temporary struct copies - overflow argument area (lowest addresses) - - We set up the following pointers: - - p_fpr: bottom of the FPR area (growing upwards) - p_gpr: bottom of the GPR area (growing upwards) - p_ov: bottom of the overflow area (growing upwards) - p_struct: top of the struct copy area (growing downwards) - - All areas are kept aligned to twice the word size. */ - - int gpr_off = ecif->cif->bytes; - int fpr_off = gpr_off + ROUND_SIZE (MAX_GPRARGS * sizeof (long)); - - unsigned long long *p_fpr = (unsigned long long *)(stack + fpr_off); - unsigned long *p_gpr = (unsigned long *)(stack + gpr_off); - unsigned char *p_struct = (unsigned char *)p_gpr; - unsigned long *p_ov = (unsigned long *)stack; - - int n_fpr = 0; - int n_gpr = 0; - int n_ov = 0; - - ffi_type **ptr; - void **p_argv = ecif->avalue; - int i; - - /* If we returning a structure then we set the first parameter register - to the address of where we are returning this structure. */ - - if (ecif->cif->flags == FFI390_RET_STRUCT) - p_gpr[n_gpr++] = (unsigned long) ecif->rvalue; - - /* Now for the arguments. */ - - for (ptr = ecif->cif->arg_types, i = ecif->cif->nargs; - i > 0; - i--, ptr++, p_argv++) - { - void *arg = *p_argv; - int type = (*ptr)->type; - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - /* 16-byte long double is passed like a struct. */ - if (type == FFI_TYPE_LONGDOUBLE) - type = FFI_TYPE_STRUCT; -#endif - - /* Check how a structure type is passed. */ - if (type == FFI_TYPE_STRUCT) - { - type = ffi_check_struct_type (*ptr); - - /* If we pass the struct via pointer, copy the data. */ - if (type == FFI_TYPE_POINTER) - { - p_struct -= ROUND_SIZE ((*ptr)->size); - memcpy (p_struct, (char *)arg, (*ptr)->size); - arg = &p_struct; - } - } - - /* Now handle all primitive int/pointer/float data types. */ - switch (type) - { - case FFI_TYPE_DOUBLE: - if (n_fpr < MAX_FPRARGS) - p_fpr[n_fpr++] = *(unsigned long long *) arg; - else -#ifdef __s390x__ - p_ov[n_ov++] = *(unsigned long *) arg; -#else - p_ov[n_ov++] = ((unsigned long *) arg)[0], - p_ov[n_ov++] = ((unsigned long *) arg)[1]; -#endif - break; - - case FFI_TYPE_FLOAT: - if (n_fpr < MAX_FPRARGS) - p_fpr[n_fpr++] = (long long) *(unsigned int *) arg << 32; - else - p_ov[n_ov++] = *(unsigned int *) arg; - break; - - case FFI_TYPE_POINTER: - if (n_gpr < MAX_GPRARGS) - p_gpr[n_gpr++] = (unsigned long)*(unsigned char **) arg; - else - p_ov[n_ov++] = (unsigned long)*(unsigned char **) arg; - break; - - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: -#ifdef __s390x__ - if (n_gpr < MAX_GPRARGS) - p_gpr[n_gpr++] = *(unsigned long *) arg; - else - p_ov[n_ov++] = *(unsigned long *) arg; -#else - if (n_gpr == MAX_GPRARGS-1) - n_gpr = MAX_GPRARGS; - if (n_gpr < MAX_GPRARGS) - p_gpr[n_gpr++] = ((unsigned long *) arg)[0], - p_gpr[n_gpr++] = ((unsigned long *) arg)[1]; - else - p_ov[n_ov++] = ((unsigned long *) arg)[0], - p_ov[n_ov++] = ((unsigned long *) arg)[1]; -#endif - break; - - case FFI_TYPE_UINT32: - if (n_gpr < MAX_GPRARGS) - p_gpr[n_gpr++] = *(unsigned int *) arg; - else - p_ov[n_ov++] = *(unsigned int *) arg; - break; - - case FFI_TYPE_INT: - case FFI_TYPE_SINT32: - if (n_gpr < MAX_GPRARGS) - p_gpr[n_gpr++] = *(signed int *) arg; - else - p_ov[n_ov++] = *(signed int *) arg; - break; - - case FFI_TYPE_UINT16: - if (n_gpr < MAX_GPRARGS) - p_gpr[n_gpr++] = *(unsigned short *) arg; - else - p_ov[n_ov++] = *(unsigned short *) arg; - break; - - case FFI_TYPE_SINT16: - if (n_gpr < MAX_GPRARGS) - p_gpr[n_gpr++] = *(signed short *) arg; - else - p_ov[n_ov++] = *(signed short *) arg; - break; - - case FFI_TYPE_UINT8: - if (n_gpr < MAX_GPRARGS) - p_gpr[n_gpr++] = *(unsigned char *) arg; - else - p_ov[n_ov++] = *(unsigned char *) arg; - break; - - case FFI_TYPE_SINT8: - if (n_gpr < MAX_GPRARGS) - p_gpr[n_gpr++] = *(signed char *) arg; - else - p_ov[n_ov++] = *(signed char *) arg; - break; - - default: - FFI_ASSERT (0); - break; - } - } -} - -/*======================== End of Routine ============================*/ - -/*====================================================================*/ -/* */ -/* Name - ffi_prep_cif_machdep. */ -/* */ -/* Function - Perform machine dependent CIF processing. */ -/* */ -/*====================================================================*/ - -ffi_status -ffi_prep_cif_machdep(ffi_cif *cif) -{ - size_t struct_size = 0; - int n_gpr = 0; - int n_fpr = 0; - int n_ov = 0; - - ffi_type **ptr; - int i; - - /* Determine return value handling. */ - - switch (cif->rtype->type) - { - /* Void is easy. */ - case FFI_TYPE_VOID: - cif->flags = FFI390_RET_VOID; - break; - - /* Structures are returned via a hidden pointer. */ - case FFI_TYPE_STRUCT: - cif->flags = FFI390_RET_STRUCT; - n_gpr++; /* We need one GPR to pass the pointer. */ - break; - - /* Floating point values are returned in fpr 0. */ - case FFI_TYPE_FLOAT: - cif->flags = FFI390_RET_FLOAT; - break; - - case FFI_TYPE_DOUBLE: - cif->flags = FFI390_RET_DOUBLE; - break; - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: - cif->flags = FFI390_RET_STRUCT; - n_gpr++; - break; -#endif - /* Integer values are returned in gpr 2 (and gpr 3 - for 64-bit values on 31-bit machines). */ - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - cif->flags = FFI390_RET_INT64; - break; - - case FFI_TYPE_POINTER: - case FFI_TYPE_INT: - case FFI_TYPE_UINT32: - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT8: - /* These are to be extended to word size. */ -#ifdef __s390x__ - cif->flags = FFI390_RET_INT64; -#else - cif->flags = FFI390_RET_INT32; -#endif - break; - - default: - FFI_ASSERT (0); - break; - } - - /* Now for the arguments. */ - - for (ptr = cif->arg_types, i = cif->nargs; - i > 0; - i--, ptr++) - { - int type = (*ptr)->type; - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - /* 16-byte long double is passed like a struct. */ - if (type == FFI_TYPE_LONGDOUBLE) - type = FFI_TYPE_STRUCT; -#endif - - /* Check how a structure type is passed. */ - if (type == FFI_TYPE_STRUCT) - { - type = ffi_check_struct_type (*ptr); - - /* If we pass the struct via pointer, we must reserve space - to copy its data for proper call-by-value semantics. */ - if (type == FFI_TYPE_POINTER) - struct_size += ROUND_SIZE ((*ptr)->size); - } - - /* Now handle all primitive int/float data types. */ - switch (type) - { - /* The first MAX_FPRARGS floating point arguments - go in FPRs, the rest overflow to the stack. */ - - case FFI_TYPE_DOUBLE: - if (n_fpr < MAX_FPRARGS) - n_fpr++; - else - n_ov += sizeof (double) / sizeof (long); - break; - - case FFI_TYPE_FLOAT: - if (n_fpr < MAX_FPRARGS) - n_fpr++; - else - n_ov++; - break; - - /* On 31-bit machines, 64-bit integers are passed in GPR pairs, - if one is still available, or else on the stack. If only one - register is free, skip the register (it won't be used for any - subsequent argument either). */ - -#ifndef __s390x__ - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - if (n_gpr == MAX_GPRARGS-1) - n_gpr = MAX_GPRARGS; - if (n_gpr < MAX_GPRARGS) - n_gpr += 2; - else - n_ov += 2; - break; -#endif - - /* Everything else is passed in GPRs (until MAX_GPRARGS - have been used) or overflows to the stack. */ - - default: - if (n_gpr < MAX_GPRARGS) - n_gpr++; - else - n_ov++; - break; - } - } - - /* Total stack space as required for overflow arguments - and temporary structure copies. */ - - cif->bytes = ROUND_SIZE (n_ov * sizeof (long)) + struct_size; - - return FFI_OK; -} - -/*======================== End of Routine ============================*/ - -/*====================================================================*/ -/* */ -/* Name - ffi_call. */ -/* */ -/* Function - Call the FFI routine. */ -/* */ -/*====================================================================*/ - -void -ffi_call(ffi_cif *cif, - void (*fn)(void), - void *rvalue, - void **avalue) -{ - int ret_type = cif->flags; - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - ecif.rvalue = rvalue; - - /* If we don't have a return value, we need to fake one. */ - if (rvalue == NULL) - { - if (ret_type == FFI390_RET_STRUCT) - ecif.rvalue = alloca (cif->rtype->size); - else - ret_type = FFI390_RET_VOID; - } - - switch (cif->abi) - { - case FFI_SYSV: - ffi_call_SYSV (cif->bytes, &ecif, ffi_prep_args, - ret_type, ecif.rvalue, fn); - break; - - default: - FFI_ASSERT (0); - break; - } -} - -/*======================== End of Routine ============================*/ - -/*====================================================================*/ -/* */ -/* Name - ffi_closure_helper_SYSV. */ -/* */ -/* Function - Call a FFI closure target function. */ -/* */ -/*====================================================================*/ - -void -ffi_closure_helper_SYSV (ffi_closure *closure, - unsigned long *p_gpr, - unsigned long long *p_fpr, - unsigned long *p_ov) -{ - unsigned long long ret_buffer; - - void *rvalue = &ret_buffer; - void **avalue; - void **p_arg; - - int n_gpr = 0; - int n_fpr = 0; - int n_ov = 0; - - ffi_type **ptr; - int i; - - /* Allocate buffer for argument list pointers. */ - - p_arg = avalue = alloca (closure->cif->nargs * sizeof (void *)); - - /* If we returning a structure, pass the structure address - directly to the target function. Otherwise, have the target - function store the return value to the GPR save area. */ - - if (closure->cif->flags == FFI390_RET_STRUCT) - rvalue = (void *) p_gpr[n_gpr++]; - - /* Now for the arguments. */ - - for (ptr = closure->cif->arg_types, i = closure->cif->nargs; - i > 0; - i--, p_arg++, ptr++) - { - int deref_struct_pointer = 0; - int type = (*ptr)->type; - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - /* 16-byte long double is passed like a struct. */ - if (type == FFI_TYPE_LONGDOUBLE) - type = FFI_TYPE_STRUCT; -#endif - - /* Check how a structure type is passed. */ - if (type == FFI_TYPE_STRUCT) - { - type = ffi_check_struct_type (*ptr); - - /* If we pass the struct via pointer, remember to - retrieve the pointer later. */ - if (type == FFI_TYPE_POINTER) - deref_struct_pointer = 1; - } - - /* Pointers are passed like UINTs of the same size. */ - if (type == FFI_TYPE_POINTER) -#ifdef __s390x__ - type = FFI_TYPE_UINT64; -#else - type = FFI_TYPE_UINT32; -#endif - - /* Now handle all primitive int/float data types. */ - switch (type) - { - case FFI_TYPE_DOUBLE: - if (n_fpr < MAX_FPRARGS) - *p_arg = &p_fpr[n_fpr++]; - else - *p_arg = &p_ov[n_ov], - n_ov += sizeof (double) / sizeof (long); - break; - - case FFI_TYPE_FLOAT: - if (n_fpr < MAX_FPRARGS) - *p_arg = &p_fpr[n_fpr++]; - else - *p_arg = (char *)&p_ov[n_ov++] + sizeof (long) - 4; - break; - - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: -#ifdef __s390x__ - if (n_gpr < MAX_GPRARGS) - *p_arg = &p_gpr[n_gpr++]; - else - *p_arg = &p_ov[n_ov++]; -#else - if (n_gpr == MAX_GPRARGS-1) - n_gpr = MAX_GPRARGS; - if (n_gpr < MAX_GPRARGS) - *p_arg = &p_gpr[n_gpr], n_gpr += 2; - else - *p_arg = &p_ov[n_ov], n_ov += 2; -#endif - break; - - case FFI_TYPE_INT: - case FFI_TYPE_UINT32: - case FFI_TYPE_SINT32: - if (n_gpr < MAX_GPRARGS) - *p_arg = (char *)&p_gpr[n_gpr++] + sizeof (long) - 4; - else - *p_arg = (char *)&p_ov[n_ov++] + sizeof (long) - 4; - break; - - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT16: - if (n_gpr < MAX_GPRARGS) - *p_arg = (char *)&p_gpr[n_gpr++] + sizeof (long) - 2; - else - *p_arg = (char *)&p_ov[n_ov++] + sizeof (long) - 2; - break; - - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT8: - if (n_gpr < MAX_GPRARGS) - *p_arg = (char *)&p_gpr[n_gpr++] + sizeof (long) - 1; - else - *p_arg = (char *)&p_ov[n_ov++] + sizeof (long) - 1; - break; - - default: - FFI_ASSERT (0); - break; - } - - /* If this is a struct passed via pointer, we need to - actually retrieve that pointer. */ - if (deref_struct_pointer) - *p_arg = *(void **)*p_arg; - } - - - /* Call the target function. */ - (closure->fun) (closure->cif, rvalue, avalue, closure->user_data); - - /* Convert the return value. */ - switch (closure->cif->rtype->type) - { - /* Void is easy, and so is struct. */ - case FFI_TYPE_VOID: - case FFI_TYPE_STRUCT: -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: -#endif - break; - - /* Floating point values are returned in fpr 0. */ - case FFI_TYPE_FLOAT: - p_fpr[0] = (long long) *(unsigned int *) rvalue << 32; - break; - - case FFI_TYPE_DOUBLE: - p_fpr[0] = *(unsigned long long *) rvalue; - break; - - /* Integer values are returned in gpr 2 (and gpr 3 - for 64-bit values on 31-bit machines). */ - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: -#ifdef __s390x__ - p_gpr[0] = *(unsigned long *) rvalue; -#else - p_gpr[0] = ((unsigned long *) rvalue)[0], - p_gpr[1] = ((unsigned long *) rvalue)[1]; -#endif - break; - - case FFI_TYPE_POINTER: - case FFI_TYPE_UINT32: - case FFI_TYPE_UINT16: - case FFI_TYPE_UINT8: - p_gpr[0] = *(unsigned long *) rvalue; - break; - - case FFI_TYPE_INT: - case FFI_TYPE_SINT32: - case FFI_TYPE_SINT16: - case FFI_TYPE_SINT8: - p_gpr[0] = *(signed long *) rvalue; - break; - - default: - FFI_ASSERT (0); - break; - } -} - -/*======================== End of Routine ============================*/ - -/*====================================================================*/ -/* */ -/* Name - ffi_prep_closure_loc. */ -/* */ -/* Function - Prepare a FFI closure. */ -/* */ -/*====================================================================*/ - -ffi_status -ffi_prep_closure_loc (ffi_closure *closure, - ffi_cif *cif, - void (*fun) (ffi_cif *, void *, void **, void *), - void *user_data, - void *codeloc) -{ - FFI_ASSERT (cif->abi == FFI_SYSV); - -#ifndef __s390x__ - *(short *)&closure->tramp [0] = 0x0d10; /* basr %r1,0 */ - *(short *)&closure->tramp [2] = 0x9801; /* lm %r0,%r1,6(%r1) */ - *(short *)&closure->tramp [4] = 0x1006; - *(short *)&closure->tramp [6] = 0x07f1; /* br %r1 */ - *(long *)&closure->tramp [8] = (long)codeloc; - *(long *)&closure->tramp[12] = (long)&ffi_closure_SYSV; -#else - *(short *)&closure->tramp [0] = 0x0d10; /* basr %r1,0 */ - *(short *)&closure->tramp [2] = 0xeb01; /* lmg %r0,%r1,14(%r1) */ - *(short *)&closure->tramp [4] = 0x100e; - *(short *)&closure->tramp [6] = 0x0004; - *(short *)&closure->tramp [8] = 0x07f1; /* br %r1 */ - *(long *)&closure->tramp[16] = (long)codeloc; - *(long *)&closure->tramp[24] = (long)&ffi_closure_SYSV; -#endif - - closure->cif = cif; - closure->user_data = user_data; - closure->fun = fun; - - return FFI_OK; -} - -/*======================== End of Routine ============================*/ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/s390/ffitarget.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/s390/ffitarget.h deleted file mode 100644 index a262691..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/s390/ffitarget.h +++ /dev/null @@ -1,62 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. - Target configuration macros for S390. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -#if defined (__s390x__) -#ifndef S390X -#define S390X -#endif -#endif - -/* ---- System specific configurations ----------------------------------- */ - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_SYSV, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_SYSV -} ffi_abi; -#endif - - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#ifdef S390X -#define FFI_TRAMPOLINE_SIZE 32 -#else -#define FFI_TRAMPOLINE_SIZE 16 -#endif -#define FFI_NATIVE_RAW_API 0 - -#endif - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/s390/sysv.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/s390/sysv.S deleted file mode 100644 index 4731a31..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/s390/sysv.S +++ /dev/null @@ -1,434 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 2000 Software AG - Copyright (c) 2008 Red Hat, Inc. - - S390 Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - -#ifndef __s390x__ - -.text - - # r2: cif->bytes - # r3: &ecif - # r4: ffi_prep_args - # r5: ret_type - # r6: ecif.rvalue - # ov: fn - - # This assumes we are using gas. - .globl ffi_call_SYSV - .type ffi_call_SYSV,%function -ffi_call_SYSV: -.LFB1: - stm %r6,%r15,24(%r15) # Save registers -.LCFI0: - basr %r13,0 # Set up base register -.Lbase: - lr %r11,%r15 # Set up frame pointer -.LCFI1: - sr %r15,%r2 - ahi %r15,-96-48 # Allocate stack - lr %r8,%r6 # Save ecif.rvalue - sr %r9,%r9 - ic %r9,.Ltable-.Lbase(%r13,%r5) # Load epilog address - l %r7,96(%r11) # Load function address - st %r11,0(%r15) # Set up back chain - ahi %r11,-48 # Register save area -.LCFI2: - - la %r2,96(%r15) # Save area - # r3 already holds &ecif - basr %r14,%r4 # Call ffi_prep_args - - lm %r2,%r6,0(%r11) # Load arguments - ld %f0,32(%r11) - ld %f2,40(%r11) - la %r14,0(%r13,%r9) # Set return address - br %r7 # ... and call function - -.LretNone: # Return void - l %r4,48+56(%r11) - lm %r6,%r15,48+24(%r11) - br %r4 - -.LretFloat: - l %r4,48+56(%r11) - ste %f0,0(%r8) # Return float - lm %r6,%r15,48+24(%r11) - br %r4 - -.LretDouble: - l %r4,48+56(%r11) - std %f0,0(%r8) # Return double - lm %r6,%r15,48+24(%r11) - br %r4 - -.LretInt32: - l %r4,48+56(%r11) - st %r2,0(%r8) # Return int - lm %r6,%r15,48+24(%r11) - br %r4 - -.LretInt64: - l %r4,48+56(%r11) - stm %r2,%r3,0(%r8) # Return long long - lm %r6,%r15,48+24(%r11) - br %r4 - -.Ltable: - .byte .LretNone-.Lbase # FFI390_RET_VOID - .byte .LretNone-.Lbase # FFI390_RET_STRUCT - .byte .LretFloat-.Lbase # FFI390_RET_FLOAT - .byte .LretDouble-.Lbase # FFI390_RET_DOUBLE - .byte .LretInt32-.Lbase # FFI390_RET_INT32 - .byte .LretInt64-.Lbase # FFI390_RET_INT64 - -.LFE1: -.ffi_call_SYSV_end: - .size ffi_call_SYSV,.ffi_call_SYSV_end-ffi_call_SYSV - - - .globl ffi_closure_SYSV - .type ffi_closure_SYSV,%function -ffi_closure_SYSV: -.LFB2: - stm %r12,%r15,48(%r15) # Save registers -.LCFI10: - basr %r13,0 # Set up base register -.Lcbase: - stm %r2,%r6,8(%r15) # Save arguments - std %f0,64(%r15) - std %f2,72(%r15) - lr %r1,%r15 # Set up stack frame - ahi %r15,-96 -.LCFI11: - l %r12,.Lchelper-.Lcbase(%r13) # Get helper function - lr %r2,%r0 # Closure - la %r3,8(%r1) # GPRs - la %r4,64(%r1) # FPRs - la %r5,96(%r1) # Overflow - st %r1,0(%r15) # Set up back chain - - bas %r14,0(%r12,%r13) # Call helper - - l %r4,96+56(%r15) - ld %f0,96+64(%r15) # Load return registers - lm %r2,%r3,96+8(%r15) - lm %r12,%r15,96+48(%r15) - br %r4 - - .align 4 -.Lchelper: - .long ffi_closure_helper_SYSV-.Lcbase - -.LFE2: - -.ffi_closure_SYSV_end: - .size ffi_closure_SYSV,.ffi_closure_SYSV_end-ffi_closure_SYSV - - - .section .eh_frame,EH_FRAME_FLAGS,@progbits -.Lframe1: - .4byte .LECIE1-.LSCIE1 # Length of Common Information Entry -.LSCIE1: - .4byte 0x0 # CIE Identifier Tag - .byte 0x1 # CIE Version - .ascii "zR\0" # CIE Augmentation - .uleb128 0x1 # CIE Code Alignment Factor - .sleb128 -4 # CIE Data Alignment Factor - .byte 0xe # CIE RA Column - .uleb128 0x1 # Augmentation size - .byte 0x1b # FDE Encoding (pcrel sdata4) - .byte 0xc # DW_CFA_def_cfa - .uleb128 0xf - .uleb128 0x60 - .align 4 -.LECIE1: -.LSFDE1: - .4byte .LEFDE1-.LASFDE1 # FDE Length -.LASFDE1: - .4byte .LASFDE1-.Lframe1 # FDE CIE offset - .4byte .LFB1-. # FDE initial location - .4byte .LFE1-.LFB1 # FDE address range - .uleb128 0x0 # Augmentation size - .byte 0x4 # DW_CFA_advance_loc4 - .4byte .LCFI0-.LFB1 - .byte 0x8f # DW_CFA_offset, column 0xf - .uleb128 0x9 - .byte 0x8e # DW_CFA_offset, column 0xe - .uleb128 0xa - .byte 0x8d # DW_CFA_offset, column 0xd - .uleb128 0xb - .byte 0x8c # DW_CFA_offset, column 0xc - .uleb128 0xc - .byte 0x8b # DW_CFA_offset, column 0xb - .uleb128 0xd - .byte 0x8a # DW_CFA_offset, column 0xa - .uleb128 0xe - .byte 0x89 # DW_CFA_offset, column 0x9 - .uleb128 0xf - .byte 0x88 # DW_CFA_offset, column 0x8 - .uleb128 0x10 - .byte 0x87 # DW_CFA_offset, column 0x7 - .uleb128 0x11 - .byte 0x86 # DW_CFA_offset, column 0x6 - .uleb128 0x12 - .byte 0x4 # DW_CFA_advance_loc4 - .4byte .LCFI1-.LCFI0 - .byte 0xd # DW_CFA_def_cfa_register - .uleb128 0xb - .byte 0x4 # DW_CFA_advance_loc4 - .4byte .LCFI2-.LCFI1 - .byte 0xe # DW_CFA_def_cfa_offset - .uleb128 0x90 - .align 4 -.LEFDE1: -.LSFDE2: - .4byte .LEFDE2-.LASFDE2 # FDE Length -.LASFDE2: - .4byte .LASFDE2-.Lframe1 # FDE CIE offset - .4byte .LFB2-. # FDE initial location - .4byte .LFE2-.LFB2 # FDE address range - .uleb128 0x0 # Augmentation size - .byte 0x4 # DW_CFA_advance_loc4 - .4byte .LCFI10-.LFB2 - .byte 0x8f # DW_CFA_offset, column 0xf - .uleb128 0x9 - .byte 0x8e # DW_CFA_offset, column 0xe - .uleb128 0xa - .byte 0x8d # DW_CFA_offset, column 0xd - .uleb128 0xb - .byte 0x8c # DW_CFA_offset, column 0xc - .uleb128 0xc - .byte 0x4 # DW_CFA_advance_loc4 - .4byte .LCFI11-.LCFI10 - .byte 0xe # DW_CFA_def_cfa_offset - .uleb128 0xc0 - .align 4 -.LEFDE2: - -#else - -.text - - # r2: cif->bytes - # r3: &ecif - # r4: ffi_prep_args - # r5: ret_type - # r6: ecif.rvalue - # ov: fn - - # This assumes we are using gas. - .globl ffi_call_SYSV - .type ffi_call_SYSV,%function -ffi_call_SYSV: -.LFB1: - stmg %r6,%r15,48(%r15) # Save registers -.LCFI0: - larl %r13,.Lbase # Set up base register - lgr %r11,%r15 # Set up frame pointer -.LCFI1: - sgr %r15,%r2 - aghi %r15,-160-80 # Allocate stack - lgr %r8,%r6 # Save ecif.rvalue - llgc %r9,.Ltable-.Lbase(%r13,%r5) # Load epilog address - lg %r7,160(%r11) # Load function address - stg %r11,0(%r15) # Set up back chain - aghi %r11,-80 # Register save area -.LCFI2: - - la %r2,160(%r15) # Save area - # r3 already holds &ecif - basr %r14,%r4 # Call ffi_prep_args - - lmg %r2,%r6,0(%r11) # Load arguments - ld %f0,48(%r11) - ld %f2,56(%r11) - ld %f4,64(%r11) - ld %f6,72(%r11) - la %r14,0(%r13,%r9) # Set return address - br %r7 # ... and call function - -.Lbase: -.LretNone: # Return void - lg %r4,80+112(%r11) - lmg %r6,%r15,80+48(%r11) - br %r4 - -.LretFloat: - lg %r4,80+112(%r11) - ste %f0,0(%r8) # Return float - lmg %r6,%r15,80+48(%r11) - br %r4 - -.LretDouble: - lg %r4,80+112(%r11) - std %f0,0(%r8) # Return double - lmg %r6,%r15,80+48(%r11) - br %r4 - -.LretInt32: - lg %r4,80+112(%r11) - st %r2,0(%r8) # Return int - lmg %r6,%r15,80+48(%r11) - br %r4 - -.LretInt64: - lg %r4,80+112(%r11) - stg %r2,0(%r8) # Return long - lmg %r6,%r15,80+48(%r11) - br %r4 - -.Ltable: - .byte .LretNone-.Lbase # FFI390_RET_VOID - .byte .LretNone-.Lbase # FFI390_RET_STRUCT - .byte .LretFloat-.Lbase # FFI390_RET_FLOAT - .byte .LretDouble-.Lbase # FFI390_RET_DOUBLE - .byte .LretInt32-.Lbase # FFI390_RET_INT32 - .byte .LretInt64-.Lbase # FFI390_RET_INT64 - -.LFE1: -.ffi_call_SYSV_end: - .size ffi_call_SYSV,.ffi_call_SYSV_end-ffi_call_SYSV - - - .globl ffi_closure_SYSV - .type ffi_closure_SYSV,%function -ffi_closure_SYSV: -.LFB2: - stmg %r14,%r15,112(%r15) # Save registers -.LCFI10: - stmg %r2,%r6,16(%r15) # Save arguments - std %f0,128(%r15) - std %f2,136(%r15) - std %f4,144(%r15) - std %f6,152(%r15) - lgr %r1,%r15 # Set up stack frame - aghi %r15,-160 -.LCFI11: - lgr %r2,%r0 # Closure - la %r3,16(%r1) # GPRs - la %r4,128(%r1) # FPRs - la %r5,160(%r1) # Overflow - stg %r1,0(%r15) # Set up back chain - - brasl %r14,ffi_closure_helper_SYSV # Call helper - - lg %r14,160+112(%r15) - ld %f0,160+128(%r15) # Load return registers - lg %r2,160+16(%r15) - la %r15,160(%r15) - br %r14 -.LFE2: - -.ffi_closure_SYSV_end: - .size ffi_closure_SYSV,.ffi_closure_SYSV_end-ffi_closure_SYSV - - - - .section .eh_frame,EH_FRAME_FLAGS,@progbits -.Lframe1: - .4byte .LECIE1-.LSCIE1 # Length of Common Information Entry -.LSCIE1: - .4byte 0x0 # CIE Identifier Tag - .byte 0x1 # CIE Version - .ascii "zR\0" # CIE Augmentation - .uleb128 0x1 # CIE Code Alignment Factor - .sleb128 -8 # CIE Data Alignment Factor - .byte 0xe # CIE RA Column - .uleb128 0x1 # Augmentation size - .byte 0x1b # FDE Encoding (pcrel sdata4) - .byte 0xc # DW_CFA_def_cfa - .uleb128 0xf - .uleb128 0xa0 - .align 8 -.LECIE1: -.LSFDE1: - .4byte .LEFDE1-.LASFDE1 # FDE Length -.LASFDE1: - .4byte .LASFDE1-.Lframe1 # FDE CIE offset - .4byte .LFB1-. # FDE initial location - .4byte .LFE1-.LFB1 # FDE address range - .uleb128 0x0 # Augmentation size - .byte 0x4 # DW_CFA_advance_loc4 - .4byte .LCFI0-.LFB1 - .byte 0x8f # DW_CFA_offset, column 0xf - .uleb128 0x5 - .byte 0x8e # DW_CFA_offset, column 0xe - .uleb128 0x6 - .byte 0x8d # DW_CFA_offset, column 0xd - .uleb128 0x7 - .byte 0x8c # DW_CFA_offset, column 0xc - .uleb128 0x8 - .byte 0x8b # DW_CFA_offset, column 0xb - .uleb128 0x9 - .byte 0x8a # DW_CFA_offset, column 0xa - .uleb128 0xa - .byte 0x89 # DW_CFA_offset, column 0x9 - .uleb128 0xb - .byte 0x88 # DW_CFA_offset, column 0x8 - .uleb128 0xc - .byte 0x87 # DW_CFA_offset, column 0x7 - .uleb128 0xd - .byte 0x86 # DW_CFA_offset, column 0x6 - .uleb128 0xe - .byte 0x4 # DW_CFA_advance_loc4 - .4byte .LCFI1-.LCFI0 - .byte 0xd # DW_CFA_def_cfa_register - .uleb128 0xb - .byte 0x4 # DW_CFA_advance_loc4 - .4byte .LCFI2-.LCFI1 - .byte 0xe # DW_CFA_def_cfa_offset - .uleb128 0xf0 - .align 8 -.LEFDE1: -.LSFDE2: - .4byte .LEFDE2-.LASFDE2 # FDE Length -.LASFDE2: - .4byte .LASFDE2-.Lframe1 # FDE CIE offset - .4byte .LFB2-. # FDE initial location - .4byte .LFE2-.LFB2 # FDE address range - .uleb128 0x0 # Augmentation size - .byte 0x4 # DW_CFA_advance_loc4 - .4byte .LCFI10-.LFB2 - .byte 0x8f # DW_CFA_offset, column 0xf - .uleb128 0x5 - .byte 0x8e # DW_CFA_offset, column 0xe - .uleb128 0x6 - .byte 0x4 # DW_CFA_advance_loc4 - .4byte .LCFI11-.LCFI10 - .byte 0xe # DW_CFA_def_cfa_offset - .uleb128 0x140 - .align 8 -.LEFDE2: - -#endif - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sh/ffi.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sh/ffi.c deleted file mode 100644 index 69bd025..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sh/ffi.c +++ /dev/null @@ -1,716 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Kaz Kojima - Copyright (c) 2008 Red Hat, Inc. - - SuperH Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#include -#include - -#include - -#define NGREGARG 4 -#if defined(__SH4__) -#define NFREGARG 8 -#endif - -#if defined(__HITACHI__) -#define STRUCT_VALUE_ADDRESS_WITH_ARG 1 -#else -#define STRUCT_VALUE_ADDRESS_WITH_ARG 0 -#endif - -/* If the structure has essentialy an unique element, return its type. */ -static int -simple_type (ffi_type *arg) -{ - if (arg->type != FFI_TYPE_STRUCT) - return arg->type; - else if (arg->elements[1]) - return FFI_TYPE_STRUCT; - - return simple_type (arg->elements[0]); -} - -static int -return_type (ffi_type *arg) -{ - unsigned short type; - - if (arg->type != FFI_TYPE_STRUCT) - return arg->type; - - type = simple_type (arg->elements[0]); - if (! arg->elements[1]) - { - switch (type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - return FFI_TYPE_INT; - - default: - return type; - } - } - - /* gcc uses r0/r1 pair for some kind of structures. */ - if (arg->size <= 2 * sizeof (int)) - { - int i = 0; - ffi_type *e; - - while ((e = arg->elements[i++])) - { - type = simple_type (e); - switch (type) - { - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT32: - case FFI_TYPE_INT: - case FFI_TYPE_FLOAT: - return FFI_TYPE_UINT64; - - default: - break; - } - } - } - - return FFI_TYPE_STRUCT; -} - -/* ffi_prep_args is called by the assembly routine once stack space - has been allocated for the function's arguments */ - -void ffi_prep_args(char *stack, extended_cif *ecif) -{ - register unsigned int i; - register int tmp; - register unsigned int avn; - register void **p_argv; - register char *argp; - register ffi_type **p_arg; - int greg, ireg; -#if defined(__SH4__) - int freg = 0; -#endif - - tmp = 0; - argp = stack; - - if (return_type (ecif->cif->rtype) == FFI_TYPE_STRUCT) - { - *(void **) argp = ecif->rvalue; - argp += 4; - ireg = STRUCT_VALUE_ADDRESS_WITH_ARG ? 1 : 0; - } - else - ireg = 0; - - /* Set arguments for registers. */ - greg = ireg; - avn = ecif->cif->nargs; - p_argv = ecif->avalue; - - for (i = 0, p_arg = ecif->cif->arg_types; i < avn; i++, p_arg++, p_argv++) - { - size_t z; - - z = (*p_arg)->size; - if (z < sizeof(int)) - { - if (greg++ >= NGREGARG) - continue; - - z = sizeof(int); - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv); - break; - - case FFI_TYPE_UINT8: - *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv); - break; - - case FFI_TYPE_SINT16: - *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv); - break; - - case FFI_TYPE_UINT16: - *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv); - break; - - case FFI_TYPE_STRUCT: - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - break; - - default: - FFI_ASSERT(0); - } - argp += z; - } - else if (z == sizeof(int)) - { -#if defined(__SH4__) - if ((*p_arg)->type == FFI_TYPE_FLOAT) - { - if (freg++ >= NFREGARG) - continue; - } - else -#endif - { - if (greg++ >= NGREGARG) - continue; - } - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - argp += z; - } -#if defined(__SH4__) - else if ((*p_arg)->type == FFI_TYPE_DOUBLE) - { - if (freg + 1 >= NFREGARG) - continue; - freg = (freg + 1) & ~1; - freg += 2; - memcpy (argp, *p_argv, z); - argp += z; - } -#endif - else - { - int n = (z + sizeof (int) - 1) / sizeof (int); -#if defined(__SH4__) - if (greg + n - 1 >= NGREGARG) - continue; -#else - if (greg >= NGREGARG) - continue; -#endif - greg += n; - memcpy (argp, *p_argv, z); - argp += n * sizeof (int); - } - } - - /* Set arguments on stack. */ - greg = ireg; -#if defined(__SH4__) - freg = 0; -#endif - p_argv = ecif->avalue; - - for (i = 0, p_arg = ecif->cif->arg_types; i < avn; i++, p_arg++, p_argv++) - { - size_t z; - - z = (*p_arg)->size; - if (z < sizeof(int)) - { - if (greg++ < NGREGARG) - continue; - - z = sizeof(int); - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv); - break; - - case FFI_TYPE_UINT8: - *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv); - break; - - case FFI_TYPE_SINT16: - *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv); - break; - - case FFI_TYPE_UINT16: - *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv); - break; - - case FFI_TYPE_STRUCT: - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - break; - - default: - FFI_ASSERT(0); - } - argp += z; - } - else if (z == sizeof(int)) - { -#if defined(__SH4__) - if ((*p_arg)->type == FFI_TYPE_FLOAT) - { - if (freg++ < NFREGARG) - continue; - } - else -#endif - { - if (greg++ < NGREGARG) - continue; - } - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - argp += z; - } -#if defined(__SH4__) - else if ((*p_arg)->type == FFI_TYPE_DOUBLE) - { - if (freg + 1 < NFREGARG) - { - freg = (freg + 1) & ~1; - freg += 2; - continue; - } - memcpy (argp, *p_argv, z); - argp += z; - } -#endif - else - { - int n = (z + sizeof (int) - 1) / sizeof (int); - if (greg + n - 1 < NGREGARG) - { - greg += n; - continue; - } -#if (! defined(__SH4__)) - else if (greg < NGREGARG) - { - greg = NGREGARG; - continue; - } -#endif - memcpy (argp, *p_argv, z); - argp += n * sizeof (int); - } - } - - return; -} - -/* Perform machine dependent cif processing */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) -{ - int i, j; - int size, type; - int n, m; - int greg; -#if defined(__SH4__) - int freg = 0; -#endif - - cif->flags = 0; - - greg = ((return_type (cif->rtype) == FFI_TYPE_STRUCT) && - STRUCT_VALUE_ADDRESS_WITH_ARG) ? 1 : 0; - -#if defined(__SH4__) - for (i = j = 0; i < cif->nargs && j < 12; i++) - { - type = (cif->arg_types)[i]->type; - switch (type) - { - case FFI_TYPE_FLOAT: - if (freg >= NFREGARG) - continue; - freg++; - cif->flags += ((cif->arg_types)[i]->type) << (2 * j); - j++; - break; - - case FFI_TYPE_DOUBLE: - if ((freg + 1) >= NFREGARG) - continue; - freg = (freg + 1) & ~1; - freg += 2; - cif->flags += ((cif->arg_types)[i]->type) << (2 * j); - j++; - break; - - default: - size = (cif->arg_types)[i]->size; - n = (size + sizeof (int) - 1) / sizeof (int); - if (greg + n - 1 >= NGREGARG) - continue; - greg += n; - for (m = 0; m < n; m++) - cif->flags += FFI_TYPE_INT << (2 * j++); - break; - } - } -#else - for (i = j = 0; i < cif->nargs && j < 4; i++) - { - size = (cif->arg_types)[i]->size; - n = (size + sizeof (int) - 1) / sizeof (int); - if (greg >= NGREGARG) - continue; - else if (greg + n - 1 >= NGREGARG) - n = NGREGARG - greg; - greg += n; - for (m = 0; m < n; m++) - cif->flags += FFI_TYPE_INT << (2 * j++); - } -#endif - - /* Set the return type flag */ - switch (cif->rtype->type) - { - case FFI_TYPE_STRUCT: - cif->flags += (unsigned) (return_type (cif->rtype)) << 24; - break; - - case FFI_TYPE_VOID: - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - cif->flags += (unsigned) cif->rtype->type << 24; - break; - - default: - cif->flags += FFI_TYPE_INT << 24; - break; - } - - return FFI_OK; -} - -extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, - unsigned, unsigned, unsigned *, void (*fn)(void)); - -void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - extended_cif ecif; - UINT64 trvalue; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return */ - /* value address then we need to make one */ - - if (cif->rtype->type == FFI_TYPE_STRUCT - && return_type (cif->rtype) != FFI_TYPE_STRUCT) - ecif.rvalue = &trvalue; - else if ((rvalue == NULL) && - (cif->rtype->type == FFI_TYPE_STRUCT)) - { - ecif.rvalue = alloca(cif->rtype->size); - } - else - ecif.rvalue = rvalue; - - switch (cif->abi) - { - case FFI_SYSV: - ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, ecif.rvalue, - fn); - break; - default: - FFI_ASSERT(0); - break; - } - - if (rvalue - && cif->rtype->type == FFI_TYPE_STRUCT - && return_type (cif->rtype) != FFI_TYPE_STRUCT) - memcpy (rvalue, &trvalue, cif->rtype->size); -} - -extern void ffi_closure_SYSV (void); -#if defined(__SH4__) -extern void __ic_invalidate (void *line); -#endif - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*, void*, void**, void*), - void *user_data, - void *codeloc) -{ - unsigned int *tramp; - unsigned int insn; - - FFI_ASSERT (cif->abi == FFI_GCC_SYSV); - - tramp = (unsigned int *) &closure->tramp[0]; - /* Set T bit if the function returns a struct pointed with R2. */ - insn = (return_type (cif->rtype) == FFI_TYPE_STRUCT - ? 0x0018 /* sett */ - : 0x0008 /* clrt */); - -#ifdef __LITTLE_ENDIAN__ - tramp[0] = 0xd301d102; - tramp[1] = 0x0000412b | (insn << 16); -#else - tramp[0] = 0xd102d301; - tramp[1] = 0x412b0000 | insn; -#endif - *(void **) &tramp[2] = (void *)codeloc; /* ctx */ - *(void **) &tramp[3] = (void *)ffi_closure_SYSV; /* funaddr */ - - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - -#if defined(__SH4__) - /* Flush the icache. */ - __ic_invalidate(codeloc); -#endif - - return FFI_OK; -} - -/* Basically the trampoline invokes ffi_closure_SYSV, and on - * entry, r3 holds the address of the closure. - * After storing the registers that could possibly contain - * parameters to be passed into the stack frame and setting - * up space for a return value, ffi_closure_SYSV invokes the - * following helper function to do most of the work. - */ - -#ifdef __LITTLE_ENDIAN__ -#define OFS_INT8 0 -#define OFS_INT16 0 -#else -#define OFS_INT8 3 -#define OFS_INT16 2 -#endif - -int -ffi_closure_helper_SYSV (ffi_closure *closure, void *rvalue, - unsigned long *pgr, unsigned long *pfr, - unsigned long *pst) -{ - void **avalue; - ffi_type **p_arg; - int i, avn; - int ireg, greg = 0; -#if defined(__SH4__) - int freg = 0; -#endif - ffi_cif *cif; - - cif = closure->cif; - avalue = alloca(cif->nargs * sizeof(void *)); - - /* Copy the caller's structure return value address so that the closure - returns the data directly to the caller. */ - if (cif->rtype->type == FFI_TYPE_STRUCT && STRUCT_VALUE_ADDRESS_WITH_ARG) - { - rvalue = (void *) *pgr++; - ireg = 1; - } - else - ireg = 0; - - cif = closure->cif; - greg = ireg; - avn = cif->nargs; - - /* Grab the addresses of the arguments from the stack frame. */ - for (i = 0, p_arg = cif->arg_types; i < avn; i++, p_arg++) - { - size_t z; - - z = (*p_arg)->size; - if (z < sizeof(int)) - { - if (greg++ >= NGREGARG) - continue; - - z = sizeof(int); - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - avalue[i] = (((char *)pgr) + OFS_INT8); - break; - - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - avalue[i] = (((char *)pgr) + OFS_INT16); - break; - - case FFI_TYPE_STRUCT: - avalue[i] = pgr; - break; - - default: - FFI_ASSERT(0); - } - pgr++; - } - else if (z == sizeof(int)) - { -#if defined(__SH4__) - if ((*p_arg)->type == FFI_TYPE_FLOAT) - { - if (freg++ >= NFREGARG) - continue; - avalue[i] = pfr; - pfr++; - } - else -#endif - { - if (greg++ >= NGREGARG) - continue; - avalue[i] = pgr; - pgr++; - } - } -#if defined(__SH4__) - else if ((*p_arg)->type == FFI_TYPE_DOUBLE) - { - if (freg + 1 >= NFREGARG) - continue; - if (freg & 1) - pfr++; - freg = (freg + 1) & ~1; - freg += 2; - avalue[i] = pfr; - pfr += 2; - } -#endif - else - { - int n = (z + sizeof (int) - 1) / sizeof (int); -#if defined(__SH4__) - if (greg + n - 1 >= NGREGARG) - continue; -#else - if (greg >= NGREGARG) - continue; -#endif - greg += n; - avalue[i] = pgr; - pgr += n; - } - } - - greg = ireg; -#if defined(__SH4__) - freg = 0; -#endif - - for (i = 0, p_arg = cif->arg_types; i < avn; i++, p_arg++) - { - size_t z; - - z = (*p_arg)->size; - if (z < sizeof(int)) - { - if (greg++ < NGREGARG) - continue; - - z = sizeof(int); - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - avalue[i] = (((char *)pst) + OFS_INT8); - break; - - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - avalue[i] = (((char *)pst) + OFS_INT16); - break; - - case FFI_TYPE_STRUCT: - avalue[i] = pst; - break; - - default: - FFI_ASSERT(0); - } - pst++; - } - else if (z == sizeof(int)) - { -#if defined(__SH4__) - if ((*p_arg)->type == FFI_TYPE_FLOAT) - { - if (freg++ < NFREGARG) - continue; - } - else -#endif - { - if (greg++ < NGREGARG) - continue; - } - avalue[i] = pst; - pst++; - } -#if defined(__SH4__) - else if ((*p_arg)->type == FFI_TYPE_DOUBLE) - { - if (freg + 1 < NFREGARG) - { - freg = (freg + 1) & ~1; - freg += 2; - continue; - } - avalue[i] = pst; - pst += 2; - } -#endif - else - { - int n = (z + sizeof (int) - 1) / sizeof (int); - if (greg + n - 1 < NGREGARG) - { - greg += n; - continue; - } -#if (! defined(__SH4__)) - else if (greg < NGREGARG) - { - greg += n; - pst += greg - NGREGARG; - continue; - } -#endif - avalue[i] = pst; - pst += n; - } - } - - (closure->fun) (cif, rvalue, avalue, closure->user_data); - - /* Tell ffi_closure_SYSV how to perform return type promotions. */ - return return_type (cif->rtype); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sh/ffitarget.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sh/ffitarget.h deleted file mode 100644 index 4f1f639..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sh/ffitarget.h +++ /dev/null @@ -1,49 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. - Target configuration macros for SuperH. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -/* ---- Generic type definitions ----------------------------------------- */ - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_SYSV, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_SYSV -} ffi_abi; -#endif - -#define FFI_CLOSURES 1 -#define FFI_TRAMPOLINE_SIZE 16 -#define FFI_NATIVE_RAW_API 0 - -#endif - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sh/sysv.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sh/sysv.S deleted file mode 100644 index 5be7516..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sh/sysv.S +++ /dev/null @@ -1,850 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 2002, 2003, 2004, 2006, 2008 Kaz Kojima - - SuperH Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include -#ifdef HAVE_MACHINE_ASM_H -#include -#else -/* XXX these lose for some platforms, I'm sure. */ -#define CNAME(x) x -#define ENTRY(x) .globl CNAME(x); .type CNAME(x),%function; CNAME(x): -#endif - -#if defined(__HITACHI__) -#define STRUCT_VALUE_ADDRESS_WITH_ARG 1 -#else -#define STRUCT_VALUE_ADDRESS_WITH_ARG 0 -#endif - -.text - - # r4: ffi_prep_args - # r5: &ecif - # r6: bytes - # r7: flags - # sp+0: rvalue - # sp+4: fn - - # This assumes we are using gas. -ENTRY(ffi_call_SYSV) - # Save registers -.LFB1: - mov.l r8,@-r15 -.LCFI0: - mov.l r9,@-r15 -.LCFI1: - mov.l r10,@-r15 -.LCFI2: - mov.l r12,@-r15 -.LCFI3: - mov.l r14,@-r15 -.LCFI4: - sts.l pr,@-r15 -.LCFI5: - mov r15,r14 -.LCFI6: -#if defined(__SH4__) - mov r6,r8 - mov r7,r9 - - sub r6,r15 - add #-16,r15 - mov #~7,r0 - and r0,r15 - - mov r4,r0 - jsr @r0 - mov r15,r4 - - mov r9,r1 - shlr8 r9 - shlr8 r9 - shlr8 r9 - - mov #FFI_TYPE_STRUCT,r2 - cmp/eq r2,r9 - bf 1f -#if STRUCT_VALUE_ADDRESS_WITH_ARG - mov.l @r15+,r4 - bra 2f - mov #5,r2 -#else - mov.l @r15+,r10 -#endif -1: - mov #4,r2 -2: - mov #4,r3 - -L_pass: - cmp/pl r8 - bf L_call_it - - mov r1,r0 - and #3,r0 - -L_pass_d: - cmp/eq #FFI_TYPE_DOUBLE,r0 - bf L_pass_f - - mov r3,r0 - and #1,r0 - tst r0,r0 - bt 1f - add #1,r3 -1: - mov #12,r0 - cmp/hs r0,r3 - bt/s 3f - shlr2 r1 - bsr L_pop_d - nop -3: - add #2,r3 - bra L_pass - add #-8,r8 - -L_pop_d: - mov r3,r0 - add r0,r0 - add r3,r0 - add #-12,r0 - braf r0 - nop -#ifdef __LITTLE_ENDIAN__ - fmov.s @r15+,fr5 - rts - fmov.s @r15+,fr4 - fmov.s @r15+,fr7 - rts - fmov.s @r15+,fr6 - fmov.s @r15+,fr9 - rts - fmov.s @r15+,fr8 - fmov.s @r15+,fr11 - rts - fmov.s @r15+,fr10 -#else - fmov.s @r15+,fr4 - rts - fmov.s @r15+,fr5 - fmov.s @r15+,fr6 - rts - fmov.s @r15+,fr7 - fmov.s @r15+,fr8 - rts - fmov.s @r15+,fr9 - fmov.s @r15+,fr10 - rts - fmov.s @r15+,fr11 -#endif - -L_pass_f: - cmp/eq #FFI_TYPE_FLOAT,r0 - bf L_pass_i - - mov #12,r0 - cmp/hs r0,r3 - bt/s 2f - shlr2 r1 - bsr L_pop_f - nop -2: - add #1,r3 - bra L_pass - add #-4,r8 - -L_pop_f: - mov r3,r0 - shll2 r0 - add #-16,r0 - braf r0 - nop -#ifdef __LITTLE_ENDIAN__ - rts - fmov.s @r15+,fr5 - rts - fmov.s @r15+,fr4 - rts - fmov.s @r15+,fr7 - rts - fmov.s @r15+,fr6 - rts - fmov.s @r15+,fr9 - rts - fmov.s @r15+,fr8 - rts - fmov.s @r15+,fr11 - rts - fmov.s @r15+,fr10 -#else - rts - fmov.s @r15+,fr4 - rts - fmov.s @r15+,fr5 - rts - fmov.s @r15+,fr6 - rts - fmov.s @r15+,fr7 - rts - fmov.s @r15+,fr8 - rts - fmov.s @r15+,fr9 - rts - fmov.s @r15+,fr10 - rts - fmov.s @r15+,fr11 -#endif - -L_pass_i: - cmp/eq #FFI_TYPE_INT,r0 - bf L_call_it - - mov #8,r0 - cmp/hs r0,r2 - bt/s 2f - shlr2 r1 - bsr L_pop_i - nop -2: - add #1,r2 - bra L_pass - add #-4,r8 - -L_pop_i: - mov r2,r0 - shll2 r0 - add #-16,r0 - braf r0 - nop - rts - mov.l @r15+,r4 - rts - mov.l @r15+,r5 - rts - mov.l @r15+,r6 - rts - mov.l @r15+,r7 - -L_call_it: - # call function -#if (! STRUCT_VALUE_ADDRESS_WITH_ARG) - mov r10, r2 -#endif - mov.l @(28,r14),r1 - jsr @r1 - nop - -L_ret_d: - mov #FFI_TYPE_DOUBLE,r2 - cmp/eq r2,r9 - bf L_ret_ll - - mov.l @(24,r14),r1 -#ifdef __LITTLE_ENDIAN__ - fmov.s fr1,@r1 - add #4,r1 - bra L_epilogue - fmov.s fr0,@r1 -#else - fmov.s fr0,@r1 - add #4,r1 - bra L_epilogue - fmov.s fr1,@r1 -#endif - -L_ret_ll: - mov #FFI_TYPE_SINT64,r2 - cmp/eq r2,r9 - bt/s 1f - mov #FFI_TYPE_UINT64,r2 - cmp/eq r2,r9 - bf L_ret_f - -1: - mov.l @(24,r14),r2 - mov.l r0,@r2 - bra L_epilogue - mov.l r1,@(4,r2) - -L_ret_f: - mov #FFI_TYPE_FLOAT,r2 - cmp/eq r2,r9 - bf L_ret_i - - mov.l @(24,r14),r1 - bra L_epilogue - fmov.s fr0,@r1 - -L_ret_i: - mov #FFI_TYPE_INT,r2 - cmp/eq r2,r9 - bf L_epilogue - - mov.l @(24,r14),r1 - bra L_epilogue - mov.l r0,@r1 - -L_epilogue: - # Remove the space we pushed for the args - mov r14,r15 - - lds.l @r15+,pr - mov.l @r15+,r14 - mov.l @r15+,r12 - mov.l @r15+,r10 - mov.l @r15+,r9 - rts - mov.l @r15+,r8 -#else - mov r6,r8 - mov r7,r9 - - sub r6,r15 - add #-16,r15 - mov #~7,r0 - and r0,r15 - - mov r4,r0 - jsr @r0 - mov r15,r4 - - mov r9,r3 - shlr8 r9 - shlr8 r9 - shlr8 r9 - - mov #FFI_TYPE_STRUCT,r2 - cmp/eq r2,r9 - bf 1f -#if STRUCT_VALUE_ADDRESS_WITH_ARG - mov.l @r15+,r4 - bra 2f - mov #5,r2 -#else - mov.l @r15+,r10 -#endif -1: - mov #4,r2 -2: - -L_pass: - cmp/pl r8 - bf L_call_it - - mov r3,r0 - and #3,r0 - -L_pass_d: - cmp/eq #FFI_TYPE_DOUBLE,r0 - bf L_pass_i - - mov r15,r0 - and #7,r0 - tst r0,r0 - bt 1f - add #4,r15 -1: - mov #8,r0 - cmp/hs r0,r2 - bt/s 2f - shlr2 r3 - bsr L_pop_d - nop -2: - add #2,r2 - bra L_pass - add #-8,r8 - -L_pop_d: - mov r2,r0 - add r0,r0 - add r2,r0 - add #-12,r0 - add r0,r0 - braf r0 - nop - mov.l @r15+,r4 - rts - mov.l @r15+,r5 - mov.l @r15+,r5 - rts - mov.l @r15+,r6 - mov.l @r15+,r6 - rts - mov.l @r15+,r7 - rts - mov.l @r15+,r7 - -L_pass_i: - cmp/eq #FFI_TYPE_INT,r0 - bf L_call_it - - mov #8,r0 - cmp/hs r0,r2 - bt/s 2f - shlr2 r3 - bsr L_pop_i - nop -2: - add #1,r2 - bra L_pass - add #-4,r8 - -L_pop_i: - mov r2,r0 - shll2 r0 - add #-16,r0 - braf r0 - nop - rts - mov.l @r15+,r4 - rts - mov.l @r15+,r5 - rts - mov.l @r15+,r6 - rts - mov.l @r15+,r7 - -L_call_it: - # call function -#if (! STRUCT_VALUE_ADDRESS_WITH_ARG) - mov r10, r2 -#endif - mov.l @(28,r14),r1 - jsr @r1 - nop - -L_ret_d: - mov #FFI_TYPE_DOUBLE,r2 - cmp/eq r2,r9 - bf L_ret_ll - - mov.l @(24,r14),r2 - mov.l r0,@r2 - bra L_epilogue - mov.l r1,@(4,r2) - -L_ret_ll: - mov #FFI_TYPE_SINT64,r2 - cmp/eq r2,r9 - bt/s 1f - mov #FFI_TYPE_UINT64,r2 - cmp/eq r2,r9 - bf L_ret_i - -1: - mov.l @(24,r14),r2 - mov.l r0,@r2 - bra L_epilogue - mov.l r1,@(4,r2) - -L_ret_i: - mov #FFI_TYPE_FLOAT,r2 - cmp/eq r2,r9 - bt 1f - mov #FFI_TYPE_INT,r2 - cmp/eq r2,r9 - bf L_epilogue -1: - mov.l @(24,r14),r1 - bra L_epilogue - mov.l r0,@r1 - -L_epilogue: - # Remove the space we pushed for the args - mov r14,r15 - - lds.l @r15+,pr - mov.l @r15+,r14 - mov.l @r15+,r12 - mov.l @r15+,r10 - mov.l @r15+,r9 - rts - mov.l @r15+,r8 -#endif -.LFE1: -.ffi_call_SYSV_end: - .size CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV) - -.globl ffi_closure_helper_SYSV - -ENTRY(ffi_closure_SYSV) -.LFB2: - mov.l r7,@-r15 -.LCFI7: - mov.l r6,@-r15 -.LCFI8: - mov.l r5,@-r15 -.LCFI9: - mov.l r4,@-r15 -.LCFIA: - mov.l r14,@-r15 -.LCFIB: - sts.l pr,@-r15 - - /* Stack layout: - xx bytes (on stack parameters) - 16 bytes (register parameters) - 4 bytes (saved frame pointer) - 4 bytes (saved return address) - 32 bytes (floating register parameters, SH-4 only) - 8 bytes (result) - 4 bytes (pad) - 4 bytes (5th arg) - <- new stack pointer - */ -.LCFIC: -#if defined(__SH4__) - add #-48,r15 -#else - add #-16,r15 -#endif -.LCFID: - mov r15,r14 -.LCFIE: - -#if defined(__SH4__) - mov r14,r1 - add #48,r1 -#ifdef __LITTLE_ENDIAN__ - fmov.s fr10,@-r1 - fmov.s fr11,@-r1 - fmov.s fr8,@-r1 - fmov.s fr9,@-r1 - fmov.s fr6,@-r1 - fmov.s fr7,@-r1 - fmov.s fr4,@-r1 - fmov.s fr5,@-r1 -#else - fmov.s fr11,@-r1 - fmov.s fr10,@-r1 - fmov.s fr9,@-r1 - fmov.s fr8,@-r1 - fmov.s fr7,@-r1 - fmov.s fr6,@-r1 - fmov.s fr5,@-r1 - fmov.s fr4,@-r1 -#endif - mov r1,r7 - mov r14,r6 - add #56,r6 -#else - mov r14,r6 - add #24,r6 -#endif - - bt/s 10f - mov r2, r5 - mov r14,r1 - add #8,r1 - mov r1,r5 -10: - - mov r14,r1 -#if defined(__SH4__) - add #72,r1 -#else - add #40,r1 -#endif - mov.l r1,@r14 - -#ifdef PIC - mov.l L_got,r1 - mova L_got,r0 - add r0,r1 - mov.l L_helper,r0 - add r1,r0 -#else - mov.l L_helper,r0 -#endif - jsr @r0 - mov r3,r4 - - shll r0 - mov r0,r1 - mova L_table,r0 - add r1,r0 - mov.w @r0,r0 - mov r14,r2 - braf r0 - add #8,r2 -0: - .align 2 -#ifdef PIC -L_got: - .long _GLOBAL_OFFSET_TABLE_ -L_helper: - .long ffi_closure_helper_SYSV@GOTOFF -#else -L_helper: - .long ffi_closure_helper_SYSV -#endif -L_table: - .short L_case_v - 0b /* FFI_TYPE_VOID */ - .short L_case_i - 0b /* FFI_TYPE_INT */ -#if defined(__SH4__) - .short L_case_f - 0b /* FFI_TYPE_FLOAT */ - .short L_case_d - 0b /* FFI_TYPE_DOUBLE */ - .short L_case_d - 0b /* FFI_TYPE_LONGDOUBLE */ -#else - .short L_case_i - 0b /* FFI_TYPE_FLOAT */ - .short L_case_ll - 0b /* FFI_TYPE_DOUBLE */ - .short L_case_ll - 0b /* FFI_TYPE_LONGDOUBLE */ -#endif - .short L_case_uq - 0b /* FFI_TYPE_UINT8 */ - .short L_case_q - 0b /* FFI_TYPE_SINT8 */ - .short L_case_uh - 0b /* FFI_TYPE_UINT16 */ - .short L_case_h - 0b /* FFI_TYPE_SINT16 */ - .short L_case_i - 0b /* FFI_TYPE_UINT32 */ - .short L_case_i - 0b /* FFI_TYPE_SINT32 */ - .short L_case_ll - 0b /* FFI_TYPE_UINT64 */ - .short L_case_ll - 0b /* FFI_TYPE_SINT64 */ - .short L_case_v - 0b /* FFI_TYPE_STRUCT */ - .short L_case_i - 0b /* FFI_TYPE_POINTER */ - -#if defined(__SH4__) -L_case_d: -#ifdef __LITTLE_ENDIAN__ - fmov.s @r2+,fr1 - bra L_case_v - fmov.s @r2,fr0 -#else - fmov.s @r2+,fr0 - bra L_case_v - fmov.s @r2,fr1 -#endif - -L_case_f: - bra L_case_v - fmov.s @r2,fr0 -#endif - -L_case_ll: - mov.l @r2+,r0 - bra L_case_v - mov.l @r2,r1 - -L_case_i: - bra L_case_v - mov.l @r2,r0 - -L_case_q: -#ifdef __LITTLE_ENDIAN__ -#else - add #3,r2 -#endif - bra L_case_v - mov.b @r2,r0 - -L_case_uq: -#ifdef __LITTLE_ENDIAN__ -#else - add #3,r2 -#endif - mov.b @r2,r0 - bra L_case_v - extu.b r0,r0 - -L_case_h: -#ifdef __LITTLE_ENDIAN__ -#else - add #2,r2 -#endif - bra L_case_v - mov.w @r2,r0 - -L_case_uh: -#ifdef __LITTLE_ENDIAN__ -#else - add #2,r2 -#endif - mov.w @r2,r0 - extu.w r0,r0 - /* fall through */ - -L_case_v: -#if defined(__SH4__) - add #48,r15 -#else - add #16,r15 -#endif - lds.l @r15+,pr - mov.l @r15+,r14 - rts - add #16,r15 -.LFE2: -.ffi_closure_SYSV_end: - .size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV) - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif - - .section ".eh_frame","aw",@progbits -__FRAME_BEGIN__: - .4byte .LECIE1-.LSCIE1 /* Length of Common Information Entry */ -.LSCIE1: - .4byte 0x0 /* CIE Identifier Tag */ - .byte 0x1 /* CIE Version */ -#ifdef PIC - .ascii "zR\0" /* CIE Augmentation */ -#else - .byte 0x0 /* CIE Augmentation */ -#endif - .byte 0x1 /* uleb128 0x1; CIE Code Alignment Factor */ - .byte 0x7c /* sleb128 -4; CIE Data Alignment Factor */ - .byte 0x11 /* CIE RA Column */ -#ifdef PIC - .uleb128 0x1 /* Augmentation size */ - .byte 0x10 /* FDE Encoding (pcrel) */ -#endif - .byte 0xc /* DW_CFA_def_cfa */ - .byte 0xf /* uleb128 0xf */ - .byte 0x0 /* uleb128 0x0 */ - .align 2 -.LECIE1: -.LSFDE1: - .4byte .LEFDE1-.LASFDE1 /* FDE Length */ -.LASFDE1: - .4byte .LASFDE1-__FRAME_BEGIN__ /* FDE CIE offset */ -#ifdef PIC - .4byte .LFB1-. /* FDE initial location */ -#else - .4byte .LFB1 /* FDE initial location */ -#endif - .4byte .LFE1-.LFB1 /* FDE address range */ -#ifdef PIC - .uleb128 0x0 /* Augmentation size */ -#endif - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI0-.LFB1 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x4 /* uleb128 0x4 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI1-.LCFI0 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x8 /* uleb128 0x4 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI2-.LCFI1 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0xc /* uleb128 0x4 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI3-.LCFI2 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x10 /* uleb128 0x4 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI4-.LCFI3 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x14 /* uleb128 0x4 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI5-.LCFI4 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x18 /* uleb128 0x4 */ - .byte 0x91 /* DW_CFA_offset, column 0x11 */ - .byte 0x6 /* uleb128 0x6 */ - .byte 0x8e /* DW_CFA_offset, column 0xe */ - .byte 0x5 /* uleb128 0x5 */ - .byte 0x8c /* DW_CFA_offset, column 0xc */ - .byte 0x4 /* uleb128 0x4 */ - .byte 0x8a /* DW_CFA_offset, column 0xa */ - .byte 0x3 /* uleb128 0x3 */ - .byte 0x89 /* DW_CFA_offset, column 0x9 */ - .byte 0x2 /* uleb128 0x2 */ - .byte 0x88 /* DW_CFA_offset, column 0x8 */ - .byte 0x1 /* uleb128 0x1 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI6-.LCFI5 - .byte 0xd /* DW_CFA_def_cfa_register */ - .byte 0xe /* uleb128 0xe */ - .align 2 -.LEFDE1: - -.LSFDE3: - .4byte .LEFDE3-.LASFDE3 /* FDE Length */ -.LASFDE3: - .4byte .LASFDE3-__FRAME_BEGIN__ /* FDE CIE offset */ -#ifdef PIC - .4byte .LFB2-. /* FDE initial location */ -#else - .4byte .LFB2 /* FDE initial location */ -#endif - .4byte .LFE2-.LFB2 /* FDE address range */ -#ifdef PIC - .uleb128 0x0 /* Augmentation size */ -#endif - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI7-.LFB2 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x4 /* uleb128 0x4 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI8-.LCFI7 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x8 /* uleb128 0x4 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFI9-.LCFI8 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0xc /* uleb128 0x4 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFIA-.LCFI9 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x10 /* uleb128 0x4 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFIB-.LCFIA - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x14 /* uleb128 0x4 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFIC-.LCFIB - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x18 /* uleb128 0x4 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFID-.LCFIC - .byte 0xe /* DW_CFA_def_cfa_offset */ -#if defined(__SH4__) - .byte 24+48 /* uleb128 24+48 */ -#else - .byte 24+16 /* uleb128 24+16 */ -#endif - .byte 0x91 /* DW_CFA_offset, column 0x11 */ - .byte 0x6 /* uleb128 0x6 */ - .byte 0x8e /* DW_CFA_offset, column 0xe */ - .byte 0x5 /* uleb128 0x5 */ - .byte 0x84 /* DW_CFA_offset, column 0x4 */ - .byte 0x4 /* uleb128 0x4 */ - .byte 0x85 /* DW_CFA_offset, column 0x5 */ - .byte 0x3 /* uleb128 0x3 */ - .byte 0x86 /* DW_CFA_offset, column 0x6 */ - .byte 0x2 /* uleb128 0x2 */ - .byte 0x87 /* DW_CFA_offset, column 0x7 */ - .byte 0x1 /* uleb128 0x1 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte .LCFIE-.LCFID - .byte 0xd /* DW_CFA_def_cfa_register */ - .byte 0xe /* uleb128 0xe */ - .align 2 -.LEFDE3: diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sh64/ffi.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sh64/ffi.c deleted file mode 100644 index 8fbc05c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sh64/ffi.c +++ /dev/null @@ -1,468 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2003, 2004, 2006, 2007 Kaz Kojima - Copyright (c) 2008 Anthony Green - - SuperH SHmedia Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#include -#include - -#include - -#define NGREGARG 8 -#define NFREGARG 12 - -static int -return_type (ffi_type *arg) -{ - - if (arg->type != FFI_TYPE_STRUCT) - return arg->type; - - /* gcc uses r2 if the result can be packed in on register. */ - if (arg->size <= sizeof (UINT8)) - return FFI_TYPE_UINT8; - else if (arg->size <= sizeof (UINT16)) - return FFI_TYPE_UINT16; - else if (arg->size <= sizeof (UINT32)) - return FFI_TYPE_UINT32; - else if (arg->size <= sizeof (UINT64)) - return FFI_TYPE_UINT64; - - return FFI_TYPE_STRUCT; -} - -/* ffi_prep_args is called by the assembly routine once stack space - has been allocated for the function's arguments */ - -void ffi_prep_args(char *stack, extended_cif *ecif) -{ - register unsigned int i; - register unsigned int avn; - register void **p_argv; - register char *argp; - register ffi_type **p_arg; - - argp = stack; - - if (return_type (ecif->cif->rtype) == FFI_TYPE_STRUCT) - { - *(void **) argp = ecif->rvalue; - argp += sizeof (UINT64); - } - - avn = ecif->cif->nargs; - p_argv = ecif->avalue; - - for (i = 0, p_arg = ecif->cif->arg_types; i < avn; i++, p_arg++, p_argv++) - { - size_t z; - int align; - - z = (*p_arg)->size; - align = (*p_arg)->alignment; - if (z < sizeof (UINT32)) - { - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(SINT64 *) argp = (SINT64) *(SINT8 *)(*p_argv); - break; - - case FFI_TYPE_UINT8: - *(UINT64 *) argp = (UINT64) *(UINT8 *)(*p_argv); - break; - - case FFI_TYPE_SINT16: - *(SINT64 *) argp = (SINT64) *(SINT16 *)(*p_argv); - break; - - case FFI_TYPE_UINT16: - *(UINT64 *) argp = (UINT64) *(UINT16 *)(*p_argv); - break; - - case FFI_TYPE_STRUCT: - memcpy (argp, *p_argv, z); - break; - - default: - FFI_ASSERT(0); - } - argp += sizeof (UINT64); - } - else if (z == sizeof (UINT32) && align == sizeof (UINT32)) - { - switch ((*p_arg)->type) - { - case FFI_TYPE_INT: - case FFI_TYPE_SINT32: - *(SINT64 *) argp = (SINT64) *(SINT32 *) (*p_argv); - break; - - case FFI_TYPE_FLOAT: - case FFI_TYPE_POINTER: - case FFI_TYPE_UINT32: - case FFI_TYPE_STRUCT: - *(UINT64 *) argp = (UINT64) *(UINT32 *) (*p_argv); - break; - - default: - FFI_ASSERT(0); - break; - } - argp += sizeof (UINT64); - } - else if (z == sizeof (UINT64) - && align == sizeof (UINT64) - && ((int) *p_argv & (sizeof (UINT64) - 1)) == 0) - { - *(UINT64 *) argp = *(UINT64 *) (*p_argv); - argp += sizeof (UINT64); - } - else - { - int n = (z + sizeof (UINT64) - 1) / sizeof (UINT64); - - memcpy (argp, *p_argv, z); - argp += n * sizeof (UINT64); - } - } - - return; -} - -/* Perform machine dependent cif processing */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) -{ - int i, j; - int size, type; - int n, m; - int greg; - int freg; - int fpair = -1; - - greg = (return_type (cif->rtype) == FFI_TYPE_STRUCT ? 1 : 0); - freg = 0; - cif->flags2 = 0; - - for (i = j = 0; i < cif->nargs; i++) - { - type = (cif->arg_types)[i]->type; - switch (type) - { - case FFI_TYPE_FLOAT: - greg++; - cif->bytes += sizeof (UINT64) - sizeof (float); - if (freg >= NFREGARG - 1) - continue; - if (fpair < 0) - { - fpair = freg; - freg += 2; - } - else - fpair = -1; - cif->flags2 += ((cif->arg_types)[i]->type) << (2 * j++); - break; - - case FFI_TYPE_DOUBLE: - if (greg++ >= NGREGARG && (freg + 1) >= NFREGARG) - continue; - if ((freg + 1) < NFREGARG) - { - freg += 2; - cif->flags2 += ((cif->arg_types)[i]->type) << (2 * j++); - } - else - cif->flags2 += FFI_TYPE_INT << (2 * j++); - break; - - default: - size = (cif->arg_types)[i]->size; - if (size < sizeof (UINT64)) - cif->bytes += sizeof (UINT64) - size; - n = (size + sizeof (UINT64) - 1) / sizeof (UINT64); - if (greg >= NGREGARG) - continue; - else if (greg + n - 1 >= NGREGARG) - greg = NGREGARG; - else - greg += n; - for (m = 0; m < n; m++) - cif->flags2 += FFI_TYPE_INT << (2 * j++); - break; - } - } - - /* Set the return type flag */ - switch (cif->rtype->type) - { - case FFI_TYPE_STRUCT: - cif->flags = return_type (cif->rtype); - break; - - case FFI_TYPE_VOID: - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - cif->flags = cif->rtype->type; - break; - - default: - cif->flags = FFI_TYPE_INT; - break; - } - - return FFI_OK; -} - -/*@-declundef@*/ -/*@-exportheader@*/ -extern void ffi_call_SYSV(void (*)(char *, extended_cif *), - /*@out@*/ extended_cif *, - unsigned, unsigned, long long, - /*@out@*/ unsigned *, - void (*fn)(void)); -/*@=declundef@*/ -/*@=exportheader@*/ - -void ffi_call(/*@dependent@*/ ffi_cif *cif, - void (*fn)(void), - /*@out@*/ void *rvalue, - /*@dependent@*/ void **avalue) -{ - extended_cif ecif; - UINT64 trvalue; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return */ - /* value address then we need to make one */ - - if (cif->rtype->type == FFI_TYPE_STRUCT - && return_type (cif->rtype) != FFI_TYPE_STRUCT) - ecif.rvalue = &trvalue; - else if ((rvalue == NULL) && - (cif->rtype->type == FFI_TYPE_STRUCT)) - { - ecif.rvalue = alloca(cif->rtype->size); - } - else - ecif.rvalue = rvalue; - - switch (cif->abi) - { - case FFI_SYSV: - ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, cif->flags2, - ecif.rvalue, fn); - break; - default: - FFI_ASSERT(0); - break; - } - - if (rvalue - && cif->rtype->type == FFI_TYPE_STRUCT - && return_type (cif->rtype) != FFI_TYPE_STRUCT) - memcpy (rvalue, &trvalue, cif->rtype->size); -} - -extern void ffi_closure_SYSV (void); -extern void __ic_invalidate (void *line); - -ffi_status -ffi_prep_closure_loc (ffi_closure *closure, - ffi_cif *cif, - void (*fun)(ffi_cif*, void*, void**, void*), - void *user_data, - void *codeloc) -{ - unsigned int *tramp; - - FFI_ASSERT (cif->abi == FFI_GCC_SYSV); - - tramp = (unsigned int *) &closure->tramp[0]; - /* Since ffi_closure is an aligned object, the ffi trampoline is - called as an SHcompact code. Sigh. - SHcompact part: - mova @(1,pc),r0; add #1,r0; jmp @r0; nop; - SHmedia part: - movi fnaddr >> 16,r1; shori fnaddr,r1; ptabs/l r1,tr0 - movi cxt >> 16,r1; shori cxt,r1; blink tr0,r63 */ -#ifdef __LITTLE_ENDIAN__ - tramp[0] = 0x7001c701; - tramp[1] = 0x0009402b; -#else - tramp[0] = 0xc7017001; - tramp[1] = 0x402b0009; -#endif - tramp[2] = 0xcc000010 | (((UINT32) ffi_closure_SYSV) >> 16) << 10; - tramp[3] = 0xc8000010 | (((UINT32) ffi_closure_SYSV) & 0xffff) << 10; - tramp[4] = 0x6bf10600; - tramp[5] = 0xcc000010 | (((UINT32) codeloc) >> 16) << 10; - tramp[6] = 0xc8000010 | (((UINT32) codeloc) & 0xffff) << 10; - tramp[7] = 0x4401fff0; - - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - - /* Flush the icache. */ - asm volatile ("ocbwb %0,0; synco; icbi %1,0; synci" : : "r" (tramp), - "r"(codeloc)); - - return FFI_OK; -} - -/* Basically the trampoline invokes ffi_closure_SYSV, and on - * entry, r3 holds the address of the closure. - * After storing the registers that could possibly contain - * parameters to be passed into the stack frame and setting - * up space for a return value, ffi_closure_SYSV invokes the - * following helper function to do most of the work. - */ - -int -ffi_closure_helper_SYSV (ffi_closure *closure, UINT64 *rvalue, - UINT64 *pgr, UINT64 *pfr, UINT64 *pst) -{ - void **avalue; - ffi_type **p_arg; - int i, avn; - int greg, freg; - ffi_cif *cif; - int fpair = -1; - - cif = closure->cif; - avalue = alloca (cif->nargs * sizeof (void *)); - - /* Copy the caller's structure return value address so that the closure - returns the data directly to the caller. */ - if (return_type (cif->rtype) == FFI_TYPE_STRUCT) - { - rvalue = (UINT64 *) *pgr; - greg = 1; - } - else - greg = 0; - - freg = 0; - cif = closure->cif; - avn = cif->nargs; - - /* Grab the addresses of the arguments from the stack frame. */ - for (i = 0, p_arg = cif->arg_types; i < avn; i++, p_arg++) - { - size_t z; - void *p; - - z = (*p_arg)->size; - if (z < sizeof (UINT32)) - { - p = pgr + greg++; - - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - case FFI_TYPE_STRUCT: -#ifdef __LITTLE_ENDIAN__ - avalue[i] = p; -#else - avalue[i] = ((char *) p) + sizeof (UINT32) - z; -#endif - break; - - default: - FFI_ASSERT(0); - } - } - else if (z == sizeof (UINT32)) - { - if ((*p_arg)->type == FFI_TYPE_FLOAT) - { - if (freg < NFREGARG - 1) - { - if (fpair >= 0) - { - avalue[i] = (UINT32 *) pfr + fpair; - fpair = -1; - } - else - { -#ifdef __LITTLE_ENDIAN__ - fpair = freg; - avalue[i] = (UINT32 *) pfr + (1 ^ freg); -#else - fpair = 1 ^ freg; - avalue[i] = (UINT32 *) pfr + freg; -#endif - freg += 2; - } - } - else -#ifdef __LITTLE_ENDIAN__ - avalue[i] = pgr + greg; -#else - avalue[i] = (UINT32 *) (pgr + greg) + 1; -#endif - } - else -#ifdef __LITTLE_ENDIAN__ - avalue[i] = pgr + greg; -#else - avalue[i] = (UINT32 *) (pgr + greg) + 1; -#endif - greg++; - } - else if ((*p_arg)->type == FFI_TYPE_DOUBLE) - { - if (freg + 1 >= NFREGARG) - avalue[i] = pgr + greg; - else - { - avalue[i] = pfr + (freg >> 1); - freg += 2; - } - greg++; - } - else - { - int n = (z + sizeof (UINT64) - 1) / sizeof (UINT64); - - avalue[i] = pgr + greg; - greg += n; - } - } - - (closure->fun) (cif, rvalue, avalue, closure->user_data); - - /* Tell ffi_closure_SYSV how to perform return type promotions. */ - return return_type (cif->rtype); -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sh64/ffitarget.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sh64/ffitarget.h deleted file mode 100644 index d935b89..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sh64/ffitarget.h +++ /dev/null @@ -1,53 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. - Target configuration macros for SuperH - SHmedia. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -/* ---- Generic type definitions ----------------------------------------- */ - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_SYSV, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_SYSV -} ffi_abi; - -#define FFI_EXTRA_CIF_FIELDS long long flags2 -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_TRAMPOLINE_SIZE 32 -#define FFI_NATIVE_RAW_API 0 - -#endif - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sh64/sysv.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sh64/sysv.S deleted file mode 100644 index c4587d5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sh64/sysv.S +++ /dev/null @@ -1,539 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 2003, 2004, 2006, 2008 Kaz Kojima - - SuperH SHmedia Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include -#ifdef HAVE_MACHINE_ASM_H -#include -#else -/* XXX these lose for some platforms, I'm sure. */ -#define CNAME(x) x -#define ENTRY(x) .globl CNAME(x); .type CNAME(x),%function; CNAME(x): -#endif - -#ifdef __LITTLE_ENDIAN__ -#define OFS_FLT 0 -#else -#define OFS_FLT 4 -#endif - - .section .text..SHmedia32,"ax" - - # r2: ffi_prep_args - # r3: &ecif - # r4: bytes - # r5: flags - # r6: flags2 - # r7: rvalue - # r8: fn - - # This assumes we are using gas. - .align 5 -ENTRY(ffi_call_SYSV) - # Save registers -.LFB1: - addi.l r15, -48, r15 -.LCFI0: - st.q r15, 40, r32 - st.q r15, 32, r31 - st.q r15, 24, r30 - st.q r15, 16, r29 - st.q r15, 8, r28 - st.l r15, 4, r18 - st.l r15, 0, r14 -.LCFI1: - add.l r15, r63, r14 -.LCFI2: -# add r4, r63, r28 - add r5, r63, r29 - add r6, r63, r30 - add r7, r63, r31 - add r8, r63, r32 - - addi r4, (64 + 7), r4 - andi r4, ~7, r4 - sub.l r15, r4, r15 - - ptabs/l r2, tr0 - add r15, r63, r2 - blink tr0, r18 - - addi r15, 64, r22 - movi 0, r0 - movi 0, r1 - movi -1, r23 - - pt/l 1f, tr1 - bnei/l r29, FFI_TYPE_STRUCT, tr1 - ld.l r15, 0, r19 - addi r15, 8, r15 - addi r0, 1, r0 -1: - -.L_pass: - andi r30, 3, r20 - shlri r30, 2, r30 - - pt/l .L_call_it, tr0 - pt/l .L_pass_i, tr1 - pt/l .L_pass_f, tr2 - - beqi/l r20, FFI_TYPE_VOID, tr0 - beqi/l r20, FFI_TYPE_INT, tr1 - beqi/l r20, FFI_TYPE_FLOAT, tr2 - -.L_pass_d: - addi r0, 1, r0 - pt/l 3f, tr0 - movi 12, r20 - bge/l r1, r20, tr0 - - pt/l .L_pop_d, tr1 - pt/l 2f, tr0 - blink tr1, r63 -2: - addi.l r15, 8, r15 -3: - pt/l .L_pass, tr0 - addi r1, 2, r1 - blink tr0, r63 - -.L_pop_d: - pt/l .L_pop_d_tbl, tr1 - gettr tr1, r20 - shlli r1, 2, r21 - add r20, r21, r20 - ptabs/l r20, tr1 - blink tr1, r63 - -.L_pop_d_tbl: - fld.d r15, 0, dr0 - blink tr0, r63 - fld.d r15, 0, dr2 - blink tr0, r63 - fld.d r15, 0, dr4 - blink tr0, r63 - fld.d r15, 0, dr6 - blink tr0, r63 - fld.d r15, 0, dr8 - blink tr0, r63 - fld.d r15, 0, dr10 - blink tr0, r63 - -.L_pass_f: - addi r0, 1, r0 - pt/l 3f, tr0 - movi 12, r20 - bge/l r1, r20, tr0 - - pt/l .L_pop_f, tr1 - pt/l 2f, tr0 - blink tr1, r63 -2: - addi.l r15, 8, r15 -3: - pt/l .L_pass, tr0 - blink tr0, r63 - -.L_pop_f: - pt/l .L_pop_f_tbl, tr1 - pt/l 5f, tr2 - gettr tr1, r20 - bge/l r23, r63, tr2 - add r1, r63, r23 - shlli r1, 3, r21 - addi r1, 2, r1 - add r20, r21, r20 - ptabs/l r20, tr1 - blink tr1, r63 -5: - addi r23, 1, r21 - movi -1, r23 - shlli r21, 3, r21 - add r20, r21, r20 - ptabs/l r20, tr1 - blink tr1, r63 - -.L_pop_f_tbl: - fld.s r15, OFS_FLT, fr0 - blink tr0, r63 - fld.s r15, OFS_FLT, fr1 - blink tr0, r63 - fld.s r15, OFS_FLT, fr2 - blink tr0, r63 - fld.s r15, OFS_FLT, fr3 - blink tr0, r63 - fld.s r15, OFS_FLT, fr4 - blink tr0, r63 - fld.s r15, OFS_FLT, fr5 - blink tr0, r63 - fld.s r15, OFS_FLT, fr6 - blink tr0, r63 - fld.s r15, OFS_FLT, fr7 - blink tr0, r63 - fld.s r15, OFS_FLT, fr8 - blink tr0, r63 - fld.s r15, OFS_FLT, fr9 - blink tr0, r63 - fld.s r15, OFS_FLT, fr10 - blink tr0, r63 - fld.s r15, OFS_FLT, fr11 - blink tr0, r63 - -.L_pass_i: - pt/l 3f, tr0 - movi 8, r20 - bge/l r0, r20, tr0 - - pt/l .L_pop_i, tr1 - pt/l 2f, tr0 - blink tr1, r63 -2: - addi.l r15, 8, r15 -3: - pt/l .L_pass, tr0 - addi r0, 1, r0 - blink tr0, r63 - -.L_pop_i: - pt/l .L_pop_i_tbl, tr1 - gettr tr1, r20 - shlli r0, 3, r21 - add r20, r21, r20 - ptabs/l r20, tr1 - blink tr1, r63 - -.L_pop_i_tbl: - ld.q r15, 0, r2 - blink tr0, r63 - ld.q r15, 0, r3 - blink tr0, r63 - ld.q r15, 0, r4 - blink tr0, r63 - ld.q r15, 0, r5 - blink tr0, r63 - ld.q r15, 0, r6 - blink tr0, r63 - ld.q r15, 0, r7 - blink tr0, r63 - ld.q r15, 0, r8 - blink tr0, r63 - ld.q r15, 0, r9 - blink tr0, r63 - -.L_call_it: - # call function - pt/l 1f, tr1 - bnei/l r29, FFI_TYPE_STRUCT, tr1 - add r19, r63, r2 -1: - add r22, r63, r15 - ptabs/l r32, tr0 - blink tr0, r18 - - pt/l .L_ret_i, tr0 - pt/l .L_ret_ll, tr1 - pt/l .L_ret_d, tr2 - pt/l .L_ret_f, tr3 - pt/l .L_epilogue, tr4 - - beqi/l r29, FFI_TYPE_INT, tr0 - beqi/l r29, FFI_TYPE_UINT32, tr0 - beqi/l r29, FFI_TYPE_SINT64, tr1 - beqi/l r29, FFI_TYPE_UINT64, tr1 - beqi/l r29, FFI_TYPE_DOUBLE, tr2 - beqi/l r29, FFI_TYPE_FLOAT, tr3 - - pt/l .L_ret_q, tr0 - pt/l .L_ret_h, tr1 - - beqi/l r29, FFI_TYPE_UINT8, tr0 - beqi/l r29, FFI_TYPE_UINT16, tr1 - blink tr4, r63 - -.L_ret_d: - fst.d r31, 0, dr0 - blink tr4, r63 - -.L_ret_ll: - st.q r31, 0, r2 - blink tr4, r63 - -.L_ret_f: - fst.s r31, OFS_FLT, fr0 - blink tr4, r63 - -.L_ret_q: - st.b r31, 0, r2 - blink tr4, r63 - -.L_ret_h: - st.w r31, 0, r2 - blink tr4, r63 - -.L_ret_i: - st.l r31, 0, r2 - # Fall - -.L_epilogue: - # Remove the space we pushed for the args - add r14, r63, r15 - - ld.l r15, 0, r14 - ld.l r15, 4, r18 - ld.q r15, 8, r28 - ld.q r15, 16, r29 - ld.q r15, 24, r30 - ld.q r15, 32, r31 - ld.q r15, 40, r32 - addi.l r15, 48, r15 - ptabs r18, tr0 - blink tr0, r63 - -.LFE1: -.ffi_call_SYSV_end: - .size CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV) - - .align 5 -ENTRY(ffi_closure_SYSV) -.LFB2: - addi.l r15, -136, r15 -.LCFI3: - st.l r15, 12, r18 - st.l r15, 8, r14 - st.l r15, 4, r12 -.LCFI4: - add r15, r63, r14 -.LCFI5: - /* Stack layout: - ... - 64 bytes (register parameters) - 48 bytes (floating register parameters) - 8 bytes (result) - 4 bytes (r18) - 4 bytes (r14) - 4 bytes (r12) - 4 bytes (for align) - <- new stack pointer - */ - fst.d r14, 24, dr0 - fst.d r14, 32, dr2 - fst.d r14, 40, dr4 - fst.d r14, 48, dr6 - fst.d r14, 56, dr8 - fst.d r14, 64, dr10 - st.q r14, 72, r2 - st.q r14, 80, r3 - st.q r14, 88, r4 - st.q r14, 96, r5 - st.q r14, 104, r6 - st.q r14, 112, r7 - st.q r14, 120, r8 - st.q r14, 128, r9 - - add r1, r63, r2 - addi r14, 16, r3 - addi r14, 72, r4 - addi r14, 24, r5 - addi r14, 136, r6 -#ifdef PIC - movi (((datalabel _GLOBAL_OFFSET_TABLE_-(.LPCS0-.)) >> 16) & 65535), r12 - shori ((datalabel _GLOBAL_OFFSET_TABLE_-(.LPCS0-.)) & 65535), r12 -.LPCS0: ptrel/u r12, tr0 - movi ((ffi_closure_helper_SYSV@GOTPLT) & 65535), r1 - gettr tr0, r12 - ldx.l r1, r12, r1 - ptabs r1, tr0 -#else - pt/l ffi_closure_helper_SYSV, tr0 -#endif - blink tr0, r18 - - shlli r2, 1, r1 - movi (((datalabel .L_table) >> 16) & 65535), r2 - shori ((datalabel .L_table) & 65535), r2 - ldx.w r2, r1, r1 - add r1, r2, r1 - pt/l .L_case_v, tr1 - ptabs r1, tr0 - blink tr0, r63 - - .align 2 -.L_table: - .word .L_case_v - datalabel .L_table /* FFI_TYPE_VOID */ - .word .L_case_i - datalabel .L_table /* FFI_TYPE_INT */ - .word .L_case_f - datalabel .L_table /* FFI_TYPE_FLOAT */ - .word .L_case_d - datalabel .L_table /* FFI_TYPE_DOUBLE */ - .word .L_case_d - datalabel .L_table /* FFI_TYPE_LONGDOUBLE */ - .word .L_case_uq - datalabel .L_table /* FFI_TYPE_UINT8 */ - .word .L_case_q - datalabel .L_table /* FFI_TYPE_SINT8 */ - .word .L_case_uh - datalabel .L_table /* FFI_TYPE_UINT16 */ - .word .L_case_h - datalabel .L_table /* FFI_TYPE_SINT16 */ - .word .L_case_i - datalabel .L_table /* FFI_TYPE_UINT32 */ - .word .L_case_i - datalabel .L_table /* FFI_TYPE_SINT32 */ - .word .L_case_ll - datalabel .L_table /* FFI_TYPE_UINT64 */ - .word .L_case_ll - datalabel .L_table /* FFI_TYPE_SINT64 */ - .word .L_case_v - datalabel .L_table /* FFI_TYPE_STRUCT */ - .word .L_case_i - datalabel .L_table /* FFI_TYPE_POINTER */ - - .align 2 -.L_case_d: - fld.d r14, 16, dr0 - blink tr1, r63 -.L_case_f: - fld.s r14, 16, fr0 - blink tr1, r63 -.L_case_ll: - ld.q r14, 16, r2 - blink tr1, r63 -.L_case_i: - ld.l r14, 16, r2 - blink tr1, r63 -.L_case_q: - ld.b r14, 16, r2 - blink tr1, r63 -.L_case_uq: - ld.ub r14, 16, r2 - blink tr1, r63 -.L_case_h: - ld.w r14, 16, r2 - blink tr1, r63 -.L_case_uh: - ld.uw r14, 16, r2 - blink tr1, r63 -.L_case_v: - add.l r14, r63, r15 - ld.l r15, 4, r12 - ld.l r15, 8, r14 - ld.l r15, 12, r18 - addi.l r15, 136, r15 - ptabs r18, tr0 - blink tr0, r63 - -.LFE2: -.ffi_closure_SYSV_end: - .size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV) - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif - - .section ".eh_frame","aw",@progbits -__FRAME_BEGIN__: - .4byte .LECIE1-.LSCIE1 /* Length of Common Information Entry */ -.LSCIE1: - .4byte 0x0 /* CIE Identifier Tag */ - .byte 0x1 /* CIE Version */ -#ifdef PIC - .ascii "zR\0" /* CIE Augmentation */ -#else - .byte 0x0 /* CIE Augmentation */ -#endif - .uleb128 0x1 /* CIE Code Alignment Factor */ - .sleb128 -4 /* CIE Data Alignment Factor */ - .byte 0x12 /* CIE RA Column */ -#ifdef PIC - .uleb128 0x1 /* Augmentation size */ - .byte 0x10 /* FDE Encoding (pcrel) */ -#endif - .byte 0xc /* DW_CFA_def_cfa */ - .uleb128 0xf - .uleb128 0x0 - .align 2 -.LECIE1: -.LSFDE1: - .4byte datalabel .LEFDE1-datalabel .LASFDE1 /* FDE Length */ -.LASFDE1: - .4byte datalabel .LASFDE1-datalabel __FRAME_BEGIN__ -#ifdef PIC - .4byte .LFB1-. /* FDE initial location */ -#else - .4byte .LFB1 /* FDE initial location */ -#endif - .4byte datalabel .LFE1-datalabel .LFB1 /* FDE address range */ -#ifdef PIC - .uleb128 0x0 /* Augmentation size */ -#endif - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte datalabel .LCFI0-datalabel .LFB1 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .uleb128 0x30 - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte datalabel .LCFI1-datalabel .LCFI0 - .byte 0x8e /* DW_CFA_offset, column 0xe */ - .uleb128 0xc - .byte 0x92 /* DW_CFA_offset, column 0x12 */ - .uleb128 0xb - .byte 0x9c /* DW_CFA_offset, column 0x1c */ - .uleb128 0xa - .byte 0x9d /* DW_CFA_offset, column 0x1d */ - .uleb128 0x8 - .byte 0x9e /* DW_CFA_offset, column 0x1e */ - .uleb128 0x6 - .byte 0x9f /* DW_CFA_offset, column 0x1f */ - .uleb128 0x4 - .byte 0xa0 /* DW_CFA_offset, column 0x20 */ - .uleb128 0x2 - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte datalabel .LCFI2-datalabel .LCFI1 - .byte 0xd /* DW_CFA_def_cfa_register */ - .uleb128 0xe - .align 2 -.LEFDE1: - -.LSFDE3: - .4byte datalabel .LEFDE3-datalabel .LASFDE3 /* FDE Length */ -.LASFDE3: - .4byte datalabel .LASFDE3-datalabel __FRAME_BEGIN__ -#ifdef PIC - .4byte .LFB2-. /* FDE initial location */ -#else - .4byte .LFB2 /* FDE initial location */ -#endif - .4byte datalabel .LFE2-datalabel .LFB2 /* FDE address range */ -#ifdef PIC - .uleb128 0x0 /* Augmentation size */ -#endif - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte datalabel .LCFI3-datalabel .LFB2 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .uleb128 0x88 - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte datalabel .LCFI4-datalabel .LCFI3 - .byte 0x8c /* DW_CFA_offset, column 0xc */ - .uleb128 0x21 - .byte 0x8e /* DW_CFA_offset, column 0xe */ - .uleb128 0x20 - .byte 0x92 /* DW_CFA_offset, column 0x12 */ - .uleb128 0x1f - .byte 0x4 /* DW_CFA_advance_loc4 */ - .4byte datalabel .LCFI5-datalabel .LCFI4 - .byte 0xd /* DW_CFA_def_cfa_register */ - .uleb128 0xe - .align 2 -.LEFDE3: diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sparc/ffi.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sparc/ffi.c deleted file mode 100644 index 1ac5d46..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sparc/ffi.c +++ /dev/null @@ -1,669 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2011 Anthony Green - Copyright (c) 1996, 2003-2004, 2007-2008 Red Hat, Inc. - - SPARC Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#include -#include - -#include - - -/* ffi_prep_args is called by the assembly routine once stack space - has been allocated for the function's arguments */ - -void ffi_prep_args_v8(char *stack, extended_cif *ecif) -{ - int i; - void **p_argv; - char *argp; - ffi_type **p_arg; - - /* Skip 16 words for the window save area */ - argp = stack + 16*sizeof(int); - - /* This should only really be done when we are returning a structure, - however, it's faster just to do it all the time... - - if ( ecif->cif->rtype->type == FFI_TYPE_STRUCT ) */ - *(int *) argp = (long)ecif->rvalue; - - /* And 1 word for the structure return value. */ - argp += sizeof(int); - -#ifdef USING_PURIFY - /* Purify will probably complain in our assembly routine, unless we - zero out this memory. */ - - ((int*)argp)[0] = 0; - ((int*)argp)[1] = 0; - ((int*)argp)[2] = 0; - ((int*)argp)[3] = 0; - ((int*)argp)[4] = 0; - ((int*)argp)[5] = 0; -#endif - - p_argv = ecif->avalue; - - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; i; i--, p_arg++) - { - size_t z; - - if ((*p_arg)->type == FFI_TYPE_STRUCT -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - || (*p_arg)->type == FFI_TYPE_LONGDOUBLE -#endif - ) - { - *(unsigned int *) argp = (unsigned long)(* p_argv); - z = sizeof(int); - } - else - { - z = (*p_arg)->size; - if (z < sizeof(int)) - { - z = sizeof(int); - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(signed int *) argp = *(SINT8 *)(* p_argv); - break; - - case FFI_TYPE_UINT8: - *(unsigned int *) argp = *(UINT8 *)(* p_argv); - break; - - case FFI_TYPE_SINT16: - *(signed int *) argp = *(SINT16 *)(* p_argv); - break; - - case FFI_TYPE_UINT16: - *(unsigned int *) argp = *(UINT16 *)(* p_argv); - break; - - default: - FFI_ASSERT(0); - } - } - else - { - memcpy(argp, *p_argv, z); - } - } - p_argv++; - argp += z; - } - - return; -} - -int ffi_prep_args_v9(char *stack, extended_cif *ecif) -{ - int i, ret = 0; - int tmp; - void **p_argv; - char *argp; - ffi_type **p_arg; - - tmp = 0; - - /* Skip 16 words for the window save area */ - argp = stack + 16*sizeof(long long); - -#ifdef USING_PURIFY - /* Purify will probably complain in our assembly routine, unless we - zero out this memory. */ - - ((long long*)argp)[0] = 0; - ((long long*)argp)[1] = 0; - ((long long*)argp)[2] = 0; - ((long long*)argp)[3] = 0; - ((long long*)argp)[4] = 0; - ((long long*)argp)[5] = 0; -#endif - - p_argv = ecif->avalue; - - if (ecif->cif->rtype->type == FFI_TYPE_STRUCT && - ecif->cif->rtype->size > 32) - { - *(unsigned long long *) argp = (unsigned long)ecif->rvalue; - argp += sizeof(long long); - tmp = 1; - } - - for (i = 0, p_arg = ecif->cif->arg_types; i < ecif->cif->nargs; - i++, p_arg++) - { - size_t z; - - z = (*p_arg)->size; - switch ((*p_arg)->type) - { - case FFI_TYPE_STRUCT: - if (z > 16) - { - /* For structures larger than 16 bytes we pass reference. */ - *(unsigned long long *) argp = (unsigned long)* p_argv; - argp += sizeof(long long); - tmp++; - p_argv++; - continue; - } - /* FALLTHROUGH */ - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: -#endif - ret = 1; /* We should promote into FP regs as well as integer. */ - break; - } - if (z < sizeof(long long)) - { - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(signed long long *) argp = *(SINT8 *)(* p_argv); - break; - - case FFI_TYPE_UINT8: - *(unsigned long long *) argp = *(UINT8 *)(* p_argv); - break; - - case FFI_TYPE_SINT16: - *(signed long long *) argp = *(SINT16 *)(* p_argv); - break; - - case FFI_TYPE_UINT16: - *(unsigned long long *) argp = *(UINT16 *)(* p_argv); - break; - - case FFI_TYPE_SINT32: - *(signed long long *) argp = *(SINT32 *)(* p_argv); - break; - - case FFI_TYPE_UINT32: - *(unsigned long long *) argp = *(UINT32 *)(* p_argv); - break; - - case FFI_TYPE_FLOAT: - *(float *) (argp + 4) = *(FLOAT32 *)(* p_argv); /* Right justify */ - break; - - case FFI_TYPE_STRUCT: - memcpy(argp, *p_argv, z); - break; - - default: - FFI_ASSERT(0); - } - z = sizeof(long long); - tmp++; - } - else if (z == sizeof(long long)) - { - memcpy(argp, *p_argv, z); - z = sizeof(long long); - tmp++; - } - else - { - if ((tmp & 1) && (*p_arg)->alignment > 8) - { - tmp++; - argp += sizeof(long long); - } - memcpy(argp, *p_argv, z); - z = 2 * sizeof(long long); - tmp += 2; - } - p_argv++; - argp += z; - } - - return ret; -} - -/* Perform machine dependent cif processing */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) -{ - int wordsize; - - if (cif->abi != FFI_V9) - { - wordsize = 4; - - /* If we are returning a struct, this will already have been added. - Otherwise we need to add it because it's always got to be there! */ - - if (cif->rtype->type != FFI_TYPE_STRUCT) - cif->bytes += wordsize; - - /* sparc call frames require that space is allocated for 6 args, - even if they aren't used. Make that space if necessary. */ - - if (cif->bytes < 4*6+4) - cif->bytes = 4*6+4; - } - else - { - wordsize = 8; - - /* sparc call frames require that space is allocated for 6 args, - even if they aren't used. Make that space if necessary. */ - - if (cif->bytes < 8*6) - cif->bytes = 8*6; - } - - /* Adjust cif->bytes. to include 16 words for the window save area, - and maybe the struct/union return pointer area, */ - - cif->bytes += 16 * wordsize; - - /* The stack must be 2 word aligned, so round bytes up - appropriately. */ - - cif->bytes = ALIGN(cif->bytes, 2 * wordsize); - - /* Set the return type flag */ - switch (cif->rtype->type) - { - case FFI_TYPE_VOID: - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: -#endif - cif->flags = cif->rtype->type; - break; - - case FFI_TYPE_STRUCT: - if (cif->abi == FFI_V9 && cif->rtype->size > 32) - cif->flags = FFI_TYPE_VOID; - else - cif->flags = FFI_TYPE_STRUCT; - break; - - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT16: - if (cif->abi == FFI_V9) - cif->flags = FFI_TYPE_INT; - else - cif->flags = cif->rtype->type; - break; - - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - if (cif->abi == FFI_V9) - cif->flags = FFI_TYPE_INT; - else - cif->flags = FFI_TYPE_SINT64; - break; - - default: - cif->flags = FFI_TYPE_INT; - break; - } - return FFI_OK; -} - -int ffi_v9_layout_struct(ffi_type *arg, int off, char *ret, char *intg, char *flt) -{ - ffi_type **ptr = &arg->elements[0]; - - while (*ptr != NULL) - { - if (off & ((*ptr)->alignment - 1)) - off = ALIGN(off, (*ptr)->alignment); - - switch ((*ptr)->type) - { - case FFI_TYPE_STRUCT: - off = ffi_v9_layout_struct(*ptr, off, ret, intg, flt); - off = ALIGN(off, FFI_SIZEOF_ARG); - break; - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: -#endif - memmove(ret + off, flt + off, (*ptr)->size); - off += (*ptr)->size; - break; - default: - memmove(ret + off, intg + off, (*ptr)->size); - off += (*ptr)->size; - break; - } - ptr++; - } - return off; -} - - -#ifdef SPARC64 -extern int ffi_call_v9(void *, extended_cif *, unsigned, - unsigned, unsigned *, void (*fn)(void)); -#else -extern int ffi_call_v8(void *, extended_cif *, unsigned, - unsigned, unsigned *, void (*fn)(void)); -#endif - -void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - extended_cif ecif; - void *rval = rvalue; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return */ - /* value address then we need to make one */ - - ecif.rvalue = rvalue; - if (cif->rtype->type == FFI_TYPE_STRUCT) - { - if (cif->rtype->size <= 32) - rval = alloca(64); - else - { - rval = NULL; - if (rvalue == NULL) - ecif.rvalue = alloca(cif->rtype->size); - } - } - - switch (cif->abi) - { - case FFI_V8: -#ifdef SPARC64 - /* We don't yet support calling 32bit code from 64bit */ - FFI_ASSERT(0); -#else - if (rvalue && (cif->rtype->type == FFI_TYPE_STRUCT -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - || cif->flags == FFI_TYPE_LONGDOUBLE -#endif - )) - { - /* For v8, we need an "unimp" with size of returning struct */ - /* behind "call", so we alloc some executable space for it. */ - /* l7 is used, we need to make sure v8.S doesn't use %l7. */ - unsigned int *call_struct = NULL; - ffi_closure_alloc(32, &call_struct); - if (call_struct) - { - unsigned long f = (unsigned long)fn; - call_struct[0] = 0xae10001f; /* mov %i7, %l7 */ - call_struct[1] = 0xbe10000f; /* mov %o7, %i7 */ - call_struct[2] = 0x03000000 | f >> 10; /* sethi %hi(fn), %g1 */ - call_struct[3] = 0x9fc06000 | (f & 0x3ff); /* jmp %g1+%lo(fn), %o7 */ - call_struct[4] = 0x01000000; /* nop */ - if (cif->rtype->size < 0x7f) - call_struct[5] = cif->rtype->size; /* unimp */ - else - call_struct[5] = 0x01000000; /* nop */ - call_struct[6] = 0x81c7e008; /* ret */ - call_struct[7] = 0xbe100017; /* mov %l7, %i7 */ - asm volatile ("iflush %0; iflush %0+8; iflush %0+16; iflush %0+24" : : - "r" (call_struct) : "memory"); - /* SPARC v8 requires 5 instructions for flush to be visible */ - asm volatile ("nop; nop; nop; nop; nop"); - ffi_call_v8(ffi_prep_args_v8, &ecif, cif->bytes, - cif->flags, rvalue, call_struct); - ffi_closure_free(call_struct); - } - else - { - ffi_call_v8(ffi_prep_args_v8, &ecif, cif->bytes, - cif->flags, rvalue, fn); - } - } - else - { - ffi_call_v8(ffi_prep_args_v8, &ecif, cif->bytes, - cif->flags, rvalue, fn); - } -#endif - break; - case FFI_V9: -#ifdef SPARC64 - ffi_call_v9(ffi_prep_args_v9, &ecif, cif->bytes, - cif->flags, rval, fn); - if (rvalue && rval && cif->rtype->type == FFI_TYPE_STRUCT) - ffi_v9_layout_struct(cif->rtype, 0, (char *)rvalue, (char *)rval, ((char *)rval)+32); -#else - /* And vice versa */ - FFI_ASSERT(0); -#endif - break; - default: - FFI_ASSERT(0); - break; - } -} - - -#ifdef SPARC64 -extern void ffi_closure_v9(void); -#else -extern void ffi_closure_v8(void); -#endif - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*, void*, void**, void*), - void *user_data, - void *codeloc) -{ - unsigned int *tramp = (unsigned int *) &closure->tramp[0]; - unsigned long fn; -#ifdef SPARC64 - /* Trampoline address is equal to the closure address. We take advantage - of that to reduce the trampoline size by 8 bytes. */ - if (cif->abi != FFI_V9) - return FFI_BAD_ABI; - fn = (unsigned long) ffi_closure_v9; - tramp[0] = 0x83414000; /* rd %pc, %g1 */ - tramp[1] = 0xca586010; /* ldx [%g1+16], %g5 */ - tramp[2] = 0x81c14000; /* jmp %g5 */ - tramp[3] = 0x01000000; /* nop */ - *((unsigned long *) &tramp[4]) = fn; -#else - unsigned long ctx = (unsigned long) codeloc; - if (cif->abi != FFI_V8) - return FFI_BAD_ABI; - fn = (unsigned long) ffi_closure_v8; - tramp[0] = 0x03000000 | fn >> 10; /* sethi %hi(fn), %g1 */ - tramp[1] = 0x05000000 | ctx >> 10; /* sethi %hi(ctx), %g2 */ - tramp[2] = 0x81c06000 | (fn & 0x3ff); /* jmp %g1+%lo(fn) */ - tramp[3] = 0x8410a000 | (ctx & 0x3ff);/* or %g2, %lo(ctx) */ -#endif - - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - - /* Flush the Icache. closure is 8 bytes aligned. */ -#ifdef SPARC64 - asm volatile ("flush %0; flush %0+8" : : "r" (closure) : "memory"); -#else - asm volatile ("iflush %0; iflush %0+8" : : "r" (closure) : "memory"); - /* SPARC v8 requires 5 instructions for flush to be visible */ - asm volatile ("nop; nop; nop; nop; nop"); -#endif - - return FFI_OK; -} - -int -ffi_closure_sparc_inner_v8(ffi_closure *closure, - void *rvalue, unsigned long *gpr, unsigned long *scratch) -{ - ffi_cif *cif; - ffi_type **arg_types; - void **avalue; - int i, argn; - - cif = closure->cif; - arg_types = cif->arg_types; - avalue = alloca(cif->nargs * sizeof(void *)); - - /* Copy the caller's structure return address so that the closure - returns the data directly to the caller. */ - if (cif->flags == FFI_TYPE_STRUCT -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - || cif->flags == FFI_TYPE_LONGDOUBLE -#endif - ) - rvalue = (void *) gpr[0]; - - /* Always skip the structure return address. */ - argn = 1; - - /* Grab the addresses of the arguments from the stack frame. */ - for (i = 0; i < cif->nargs; i++) - { - if (arg_types[i]->type == FFI_TYPE_STRUCT -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - || arg_types[i]->type == FFI_TYPE_LONGDOUBLE -#endif - ) - { - /* Straight copy of invisible reference. */ - avalue[i] = (void *)gpr[argn++]; - } - else if ((arg_types[i]->type == FFI_TYPE_DOUBLE - || arg_types[i]->type == FFI_TYPE_SINT64 - || arg_types[i]->type == FFI_TYPE_UINT64) - /* gpr is 8-byte aligned. */ - && (argn % 2) != 0) - { - /* Align on a 8-byte boundary. */ - scratch[0] = gpr[argn]; - scratch[1] = gpr[argn+1]; - avalue[i] = scratch; - scratch -= 2; - argn += 2; - } - else - { - /* Always right-justify. */ - argn += ALIGN(arg_types[i]->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; - avalue[i] = ((char *) &gpr[argn]) - arg_types[i]->size; - } - } - - /* Invoke the closure. */ - (closure->fun) (cif, rvalue, avalue, closure->user_data); - - /* Tell ffi_closure_sparc how to perform return type promotions. */ - return cif->rtype->type; -} - -int -ffi_closure_sparc_inner_v9(ffi_closure *closure, - void *rvalue, unsigned long *gpr, double *fpr) -{ - ffi_cif *cif; - ffi_type **arg_types; - void **avalue; - int i, argn, fp_slot_max; - - cif = closure->cif; - arg_types = cif->arg_types; - avalue = alloca(cif->nargs * sizeof(void *)); - - /* Copy the caller's structure return address so that the closure - returns the data directly to the caller. */ - if (cif->flags == FFI_TYPE_VOID - && cif->rtype->type == FFI_TYPE_STRUCT) - { - rvalue = (void *) gpr[0]; - /* Skip the structure return address. */ - argn = 1; - } - else - argn = 0; - - fp_slot_max = 16 - argn; - - /* Grab the addresses of the arguments from the stack frame. */ - for (i = 0; i < cif->nargs; i++) - { - if (arg_types[i]->type == FFI_TYPE_STRUCT) - { - if (arg_types[i]->size > 16) - { - /* Straight copy of invisible reference. */ - avalue[i] = (void *)gpr[argn++]; - } - else - { - /* Left-justify. */ - ffi_v9_layout_struct(arg_types[i], - 0, - (char *) &gpr[argn], - (char *) &gpr[argn], - (char *) &fpr[argn]); - avalue[i] = &gpr[argn]; - argn += ALIGN(arg_types[i]->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; - } - } - else - { - /* Right-justify. */ - argn += ALIGN(arg_types[i]->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; - - /* Align on a 16-byte boundary. */ -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - if (arg_types[i]->type == FFI_TYPE_LONGDOUBLE && (argn % 2) != 0) - argn++; -#endif - if (i < fp_slot_max - && (arg_types[i]->type == FFI_TYPE_FLOAT - || arg_types[i]->type == FFI_TYPE_DOUBLE -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - || arg_types[i]->type == FFI_TYPE_LONGDOUBLE -#endif - )) - avalue[i] = ((char *) &fpr[argn]) - arg_types[i]->size; - else - avalue[i] = ((char *) &gpr[argn]) - arg_types[i]->size; - } - } - - /* Invoke the closure. */ - (closure->fun) (cif, rvalue, avalue, closure->user_data); - - /* Tell ffi_closure_sparc how to perform return type promotions. */ - return cif->rtype->type; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sparc/ffitarget.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sparc/ffitarget.h deleted file mode 100644 index 51275cb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sparc/ffitarget.h +++ /dev/null @@ -1,68 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. - Target configuration macros for SPARC. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -/* ---- System specific configurations ----------------------------------- */ - -#if defined(__arch64__) || defined(__sparcv9) -#ifndef SPARC64 -#define SPARC64 -#endif -#endif - -#ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - FFI_V8, - FFI_V8PLUS, - FFI_V9, - FFI_LAST_ABI, -#ifdef SPARC64 - FFI_DEFAULT_ABI = FFI_V9 -#else - FFI_DEFAULT_ABI = FFI_V8 -#endif -} ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_NATIVE_RAW_API 0 - -#ifdef SPARC64 -#define FFI_TRAMPOLINE_SIZE 24 -#else -#define FFI_TRAMPOLINE_SIZE 16 -#endif - -#endif - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sparc/v8.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sparc/v8.S deleted file mode 100644 index 2c4eb60..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sparc/v8.S +++ /dev/null @@ -1,313 +0,0 @@ -/* ----------------------------------------------------------------------- - v8.S - Copyright (c) 1996, 1997, 2003, 2004, 2008 Red Hat, Inc. - - SPARC Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - -#define STACKFRAME 96 /* Minimum stack framesize for SPARC */ -#define ARGS (64+4) /* Offset of register area in frame */ - -.text - .align 8 -.globl ffi_call_v8 -.globl _ffi_call_v8 - -ffi_call_v8: -_ffi_call_v8: -.LLFB1: - save %sp, -STACKFRAME, %sp -.LLCFI0: - - sub %sp, %i2, %sp ! alloca() space in stack for frame to set up - add %sp, STACKFRAME, %l0 ! %l0 has start of - ! frame to set up - - mov %l0, %o0 ! call routine to set up frame - call %i0 - mov %i1, %o1 ! (delay) - - ld [%l0+ARGS], %o0 ! call foreign function - ld [%l0+ARGS+4], %o1 - ld [%l0+ARGS+8], %o2 - ld [%l0+ARGS+12], %o3 - ld [%l0+ARGS+16], %o4 - ld [%l0+ARGS+20], %o5 - call %i5 - mov %l0, %sp ! (delay) switch to frame - nop ! STRUCT returning functions skip 12 instead of 8 bytes - - ! If the return value pointer is NULL, assume no return value. - tst %i4 - bz done - nop - - cmp %i3, FFI_TYPE_INT - be,a done - st %o0, [%i4] ! (delay) - - cmp %i3, FFI_TYPE_FLOAT - be,a done - st %f0, [%i4+0] ! (delay) - - cmp %i3, FFI_TYPE_DOUBLE - be,a double - st %f0, [%i4+0] ! (delay) - - cmp %i3, FFI_TYPE_SINT8 - be,a sint8 - sll %o0, 24, %o0 ! (delay) - - cmp %i3, FFI_TYPE_UINT8 - be,a uint8 - sll %o0, 24, %o0 ! (delay) - - cmp %i3, FFI_TYPE_SINT16 - be,a sint16 - sll %o0, 16, %o0 ! (delay) - - cmp %i3, FFI_TYPE_UINT16 - be,a uint16 - sll %o0, 16, %o0 ! (delay) - - cmp %i3, FFI_TYPE_SINT64 - be,a longlong - st %o0, [%i4+0] ! (delay) -done: - ret - restore - -double: - st %f1, [%i4+4] - ret - restore - -sint8: - sra %o0, 24, %o0 - st %o0, [%i4+0] - ret - restore - -uint8: - srl %o0, 24, %o0 - st %o0, [%i4+0] - ret - restore - -sint16: - sra %o0, 16, %o0 - st %o0, [%i4+0] - ret - restore - -uint16: - srl %o0, 16, %o0 - st %o0, [%i4+0] - ret - restore - -longlong: - st %o1, [%i4+4] - ret - restore -.LLFE1: - -.ffi_call_v8_end: - .size ffi_call_v8,.ffi_call_v8_end-ffi_call_v8 - - -#undef STACKFRAME -#define STACKFRAME 104 /* 16*4 register window + - 1*4 struct return + - 6*4 args backing store + - 3*4 locals */ - -/* ffi_closure_v8(...) - - Receives the closure argument in %g2. */ - - .text - .align 8 - .globl ffi_closure_v8 - -ffi_closure_v8: -#ifdef HAVE_AS_REGISTER_PSEUDO_OP - .register %g2, #scratch -#endif -.LLFB2: - ! Reserve frame space for all arguments in case - ! we need to align them on a 8-byte boundary. - ld [%g2+FFI_TRAMPOLINE_SIZE], %g1 - ld [%g1+4], %g1 - sll %g1, 3, %g1 - add %g1, STACKFRAME, %g1 - ! %g1 == STACKFRAME + 8*nargs - neg %g1 - save %sp, %g1, %sp -.LLCFI1: - - ! Store all of the potential argument registers in va_list format. - st %i0, [%fp+68+0] - st %i1, [%fp+68+4] - st %i2, [%fp+68+8] - st %i3, [%fp+68+12] - st %i4, [%fp+68+16] - st %i5, [%fp+68+20] - - ! Call ffi_closure_sparc_inner to do the bulk of the work. - mov %g2, %o0 - add %fp, -8, %o1 - add %fp, 64, %o2 - call ffi_closure_sparc_inner_v8 - add %fp, -16, %o3 - - ! Load up the return value in the proper type. - ! See ffi_prep_cif_machdep for the list of cases. - cmp %o0, FFI_TYPE_VOID - be done1 - - cmp %o0, FFI_TYPE_INT - be done1 - ld [%fp-8], %i0 - - cmp %o0, FFI_TYPE_FLOAT - be,a done1 - ld [%fp-8], %f0 - - cmp %o0, FFI_TYPE_DOUBLE - be,a done1 - ldd [%fp-8], %f0 - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - cmp %o0, FFI_TYPE_LONGDOUBLE - be done2 -#endif - - cmp %o0, FFI_TYPE_STRUCT - be done2 - - cmp %o0, FFI_TYPE_SINT64 - be,a done1 - ldd [%fp-8], %i0 - - ld [%fp-8], %i0 -done1: - jmp %i7+8 - restore -done2: - ! Skip 'unimp'. - jmp %i7+12 - restore -.LLFE2: - -.ffi_closure_v8_end: - .size ffi_closure_v8,.ffi_closure_v8_end-ffi_closure_v8 - -#ifdef SPARC64 -#define WS 8 -#define nword xword -#define uanword uaxword -#else -#define WS 4 -#define nword long -#define uanword uaword -#endif - -#ifdef HAVE_RO_EH_FRAME - .section ".eh_frame",#alloc -#else - .section ".eh_frame",#alloc,#write -#endif -.LLframe1: - .uaword .LLECIE1-.LLSCIE1 ! Length of Common Information Entry -.LLSCIE1: - .uaword 0x0 ! CIE Identifier Tag - .byte 0x1 ! CIE Version - .ascii "zR\0" ! CIE Augmentation - .byte 0x1 ! uleb128 0x1; CIE Code Alignment Factor - .byte 0x80-WS ! sleb128 -WS; CIE Data Alignment Factor - .byte 0xf ! CIE RA Column - .byte 0x1 ! uleb128 0x1; Augmentation size -#ifdef HAVE_AS_SPARC_UA_PCREL - .byte 0x1b ! FDE Encoding (pcrel sdata4) -#else - .byte 0x50 ! FDE Encoding (aligned absolute) -#endif - .byte 0xc ! DW_CFA_def_cfa - .byte 0xe ! uleb128 0xe - .byte 0x0 ! uleb128 0x0 - .align WS -.LLECIE1: -.LLSFDE1: - .uaword .LLEFDE1-.LLASFDE1 ! FDE Length -.LLASFDE1: - .uaword .LLASFDE1-.LLframe1 ! FDE CIE offset -#ifdef HAVE_AS_SPARC_UA_PCREL - .uaword %r_disp32(.LLFB1) - .uaword .LLFE1-.LLFB1 ! FDE address range -#else - .align WS - .nword .LLFB1 - .uanword .LLFE1-.LLFB1 ! FDE address range -#endif - .byte 0x0 ! uleb128 0x0; Augmentation size - .byte 0x4 ! DW_CFA_advance_loc4 - .uaword .LLCFI0-.LLFB1 - .byte 0xd ! DW_CFA_def_cfa_register - .byte 0x1e ! uleb128 0x1e - .byte 0x2d ! DW_CFA_GNU_window_save - .byte 0x9 ! DW_CFA_register - .byte 0xf ! uleb128 0xf - .byte 0x1f ! uleb128 0x1f - .align WS -.LLEFDE1: -.LLSFDE2: - .uaword .LLEFDE2-.LLASFDE2 ! FDE Length -.LLASFDE2: - .uaword .LLASFDE2-.LLframe1 ! FDE CIE offset -#ifdef HAVE_AS_SPARC_UA_PCREL - .uaword %r_disp32(.LLFB2) - .uaword .LLFE2-.LLFB2 ! FDE address range -#else - .align WS - .nword .LLFB2 - .uanword .LLFE2-.LLFB2 ! FDE address range -#endif - .byte 0x0 ! uleb128 0x0; Augmentation size - .byte 0x4 ! DW_CFA_advance_loc4 - .uaword .LLCFI1-.LLFB2 - .byte 0xd ! DW_CFA_def_cfa_register - .byte 0x1e ! uleb128 0x1e - .byte 0x2d ! DW_CFA_GNU_window_save - .byte 0x9 ! DW_CFA_register - .byte 0xf ! uleb128 0xf - .byte 0x1f ! uleb128 0x1f - .align WS -.LLEFDE2: - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sparc/v9.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sparc/v9.S deleted file mode 100644 index 489ff02..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/sparc/v9.S +++ /dev/null @@ -1,307 +0,0 @@ -/* ----------------------------------------------------------------------- - v9.S - Copyright (c) 2000, 2003, 2004, 2008 Red Hat, Inc. - - SPARC 64-bit Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include - -#ifdef SPARC64 -/* Only compile this in for 64bit builds, because otherwise the object file - will have inproper architecture due to used instructions. */ - -#define STACKFRAME 128 /* Minimum stack framesize for SPARC */ -#define STACK_BIAS 2047 -#define ARGS (128) /* Offset of register area in frame */ - -.text - .align 8 -.globl ffi_call_v9 -.globl _ffi_call_v9 - -ffi_call_v9: -_ffi_call_v9: -.LLFB1: - save %sp, -STACKFRAME, %sp -.LLCFI0: - - sub %sp, %i2, %sp ! alloca() space in stack for frame to set up - add %sp, STACKFRAME+STACK_BIAS, %l0 ! %l0 has start of - ! frame to set up - - mov %l0, %o0 ! call routine to set up frame - call %i0 - mov %i1, %o1 ! (delay) - brz,pt %o0, 1f - ldx [%l0+ARGS], %o0 ! call foreign function - - ldd [%l0+ARGS], %f0 - ldd [%l0+ARGS+8], %f2 - ldd [%l0+ARGS+16], %f4 - ldd [%l0+ARGS+24], %f6 - ldd [%l0+ARGS+32], %f8 - ldd [%l0+ARGS+40], %f10 - ldd [%l0+ARGS+48], %f12 - ldd [%l0+ARGS+56], %f14 - ldd [%l0+ARGS+64], %f16 - ldd [%l0+ARGS+72], %f18 - ldd [%l0+ARGS+80], %f20 - ldd [%l0+ARGS+88], %f22 - ldd [%l0+ARGS+96], %f24 - ldd [%l0+ARGS+104], %f26 - ldd [%l0+ARGS+112], %f28 - ldd [%l0+ARGS+120], %f30 - -1: ldx [%l0+ARGS+8], %o1 - ldx [%l0+ARGS+16], %o2 - ldx [%l0+ARGS+24], %o3 - ldx [%l0+ARGS+32], %o4 - ldx [%l0+ARGS+40], %o5 - call %i5 - sub %l0, STACK_BIAS, %sp ! (delay) switch to frame - - ! If the return value pointer is NULL, assume no return value. - brz,pn %i4, done - nop - - cmp %i3, FFI_TYPE_INT - be,a,pt %icc, done - stx %o0, [%i4+0] ! (delay) - - cmp %i3, FFI_TYPE_FLOAT - be,a,pn %icc, done - st %f0, [%i4+0] ! (delay) - - cmp %i3, FFI_TYPE_DOUBLE - be,a,pn %icc, done - std %f0, [%i4+0] ! (delay) - - cmp %i3, FFI_TYPE_STRUCT - be,pn %icc, dostruct - - cmp %i3, FFI_TYPE_LONGDOUBLE - bne,pt %icc, done - nop - std %f0, [%i4+0] - std %f2, [%i4+8] - -done: ret - restore - -dostruct: - /* This will not work correctly for unions. */ - stx %o0, [%i4+0] - stx %o1, [%i4+8] - stx %o2, [%i4+16] - stx %o3, [%i4+24] - std %f0, [%i4+32] - std %f2, [%i4+40] - std %f4, [%i4+48] - std %f6, [%i4+56] - ret - restore -.LLFE1: - -.ffi_call_v9_end: - .size ffi_call_v9,.ffi_call_v9_end-ffi_call_v9 - - -#undef STACKFRAME -#define STACKFRAME 336 /* 16*8 register window + - 6*8 args backing store + - 20*8 locals */ -#define FP %fp+STACK_BIAS - -/* ffi_closure_v9(...) - - Receives the closure argument in %g1. */ - - .text - .align 8 - .globl ffi_closure_v9 - -ffi_closure_v9: -.LLFB2: - save %sp, -STACKFRAME, %sp -.LLCFI1: - - ! Store all of the potential argument registers in va_list format. - stx %i0, [FP+128+0] - stx %i1, [FP+128+8] - stx %i2, [FP+128+16] - stx %i3, [FP+128+24] - stx %i4, [FP+128+32] - stx %i5, [FP+128+40] - - ! Store possible floating point argument registers too. - std %f0, [FP-128] - std %f2, [FP-120] - std %f4, [FP-112] - std %f6, [FP-104] - std %f8, [FP-96] - std %f10, [FP-88] - std %f12, [FP-80] - std %f14, [FP-72] - std %f16, [FP-64] - std %f18, [FP-56] - std %f20, [FP-48] - std %f22, [FP-40] - std %f24, [FP-32] - std %f26, [FP-24] - std %f28, [FP-16] - std %f30, [FP-8] - - ! Call ffi_closure_sparc_inner to do the bulk of the work. - mov %g1, %o0 - add %fp, STACK_BIAS-160, %o1 - add %fp, STACK_BIAS+128, %o2 - call ffi_closure_sparc_inner_v9 - add %fp, STACK_BIAS-128, %o3 - - ! Load up the return value in the proper type. - ! See ffi_prep_cif_machdep for the list of cases. - cmp %o0, FFI_TYPE_VOID - be,pn %icc, done1 - - cmp %o0, FFI_TYPE_INT - be,pn %icc, integer - - cmp %o0, FFI_TYPE_FLOAT - be,a,pn %icc, done1 - ld [FP-160], %f0 - - cmp %o0, FFI_TYPE_DOUBLE - be,a,pn %icc, done1 - ldd [FP-160], %f0 - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - cmp %o0, FFI_TYPE_LONGDOUBLE - be,a,pn %icc, longdouble1 - ldd [FP-160], %f0 -#endif - - ! FFI_TYPE_STRUCT - ldx [FP-152], %i1 - ldx [FP-144], %i2 - ldx [FP-136], %i3 - ldd [FP-160], %f0 - ldd [FP-152], %f2 - ldd [FP-144], %f4 - ldd [FP-136], %f6 - -integer: - ldx [FP-160], %i0 - -done1: - ret - restore - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE -longdouble1: - ldd [FP-152], %f2 - ret - restore -#endif -.LLFE2: - -.ffi_closure_v9_end: - .size ffi_closure_v9,.ffi_closure_v9_end-ffi_closure_v9 - -#ifdef HAVE_RO_EH_FRAME - .section ".eh_frame",#alloc -#else - .section ".eh_frame",#alloc,#write -#endif -.LLframe1: - .uaword .LLECIE1-.LLSCIE1 ! Length of Common Information Entry -.LLSCIE1: - .uaword 0x0 ! CIE Identifier Tag - .byte 0x1 ! CIE Version - .ascii "zR\0" ! CIE Augmentation - .byte 0x1 ! uleb128 0x1; CIE Code Alignment Factor - .byte 0x78 ! sleb128 -8; CIE Data Alignment Factor - .byte 0xf ! CIE RA Column - .byte 0x1 ! uleb128 0x1; Augmentation size -#ifdef HAVE_AS_SPARC_UA_PCREL - .byte 0x1b ! FDE Encoding (pcrel sdata4) -#else - .byte 0x50 ! FDE Encoding (aligned absolute) -#endif - .byte 0xc ! DW_CFA_def_cfa - .byte 0xe ! uleb128 0xe - .byte 0xff,0xf ! uleb128 0x7ff - .align 8 -.LLECIE1: -.LLSFDE1: - .uaword .LLEFDE1-.LLASFDE1 ! FDE Length -.LLASFDE1: - .uaword .LLASFDE1-.LLframe1 ! FDE CIE offset -#ifdef HAVE_AS_SPARC_UA_PCREL - .uaword %r_disp32(.LLFB1) - .uaword .LLFE1-.LLFB1 ! FDE address range -#else - .align 8 - .xword .LLFB1 - .uaxword .LLFE1-.LLFB1 ! FDE address range -#endif - .byte 0x0 ! uleb128 0x0; Augmentation size - .byte 0x4 ! DW_CFA_advance_loc4 - .uaword .LLCFI0-.LLFB1 - .byte 0xd ! DW_CFA_def_cfa_register - .byte 0x1e ! uleb128 0x1e - .byte 0x2d ! DW_CFA_GNU_window_save - .byte 0x9 ! DW_CFA_register - .byte 0xf ! uleb128 0xf - .byte 0x1f ! uleb128 0x1f - .align 8 -.LLEFDE1: -.LLSFDE2: - .uaword .LLEFDE2-.LLASFDE2 ! FDE Length -.LLASFDE2: - .uaword .LLASFDE2-.LLframe1 ! FDE CIE offset -#ifdef HAVE_AS_SPARC_UA_PCREL - .uaword %r_disp32(.LLFB2) - .uaword .LLFE2-.LLFB2 ! FDE address range -#else - .align 8 - .xword .LLFB2 - .uaxword .LLFE2-.LLFB2 ! FDE address range -#endif - .byte 0x0 ! uleb128 0x0; Augmentation size - .byte 0x4 ! DW_CFA_advance_loc4 - .uaword .LLCFI1-.LLFB2 - .byte 0xd ! DW_CFA_def_cfa_register - .byte 0x1e ! uleb128 0x1e - .byte 0x2d ! DW_CFA_GNU_window_save - .byte 0x9 ! DW_CFA_register - .byte 0xf ! uleb128 0xf - .byte 0x1f ! uleb128 0x1f - .align 8 -.LLEFDE2: -#endif - -#ifdef __linux__ - .section .note.GNU-stack,"",@progbits -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/types.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/types.c deleted file mode 100644 index 0a11eb0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/types.c +++ /dev/null @@ -1,77 +0,0 @@ -/* ----------------------------------------------------------------------- - types.c - Copyright (c) 1996, 1998 Red Hat, Inc. - - Predefined ffi_types needed by libffi. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -/* Hide the basic type definitions from the header file, so that we - can redefine them here as "const". */ -#define LIBFFI_HIDE_BASIC_TYPES - -#include -#include - -/* Type definitions */ - -#define FFI_TYPEDEF(name, type, id) \ -struct struct_align_##name { \ - char c; \ - type x; \ -}; \ -const ffi_type ffi_type_##name = { \ - sizeof(type), \ - offsetof(struct struct_align_##name, x), \ - id, NULL \ -} - -/* Size and alignment are fake here. They must not be 0. */ -const ffi_type ffi_type_void = { - 1, 1, FFI_TYPE_VOID, NULL -}; - -FFI_TYPEDEF(uint8, UINT8, FFI_TYPE_UINT8); -FFI_TYPEDEF(sint8, SINT8, FFI_TYPE_SINT8); -FFI_TYPEDEF(uint16, UINT16, FFI_TYPE_UINT16); -FFI_TYPEDEF(sint16, SINT16, FFI_TYPE_SINT16); -FFI_TYPEDEF(uint32, UINT32, FFI_TYPE_UINT32); -FFI_TYPEDEF(sint32, SINT32, FFI_TYPE_SINT32); -FFI_TYPEDEF(uint64, UINT64, FFI_TYPE_UINT64); -FFI_TYPEDEF(sint64, SINT64, FFI_TYPE_SINT64); - -FFI_TYPEDEF(pointer, void*, FFI_TYPE_POINTER); - -FFI_TYPEDEF(float, float, FFI_TYPE_FLOAT); -FFI_TYPEDEF(double, double, FFI_TYPE_DOUBLE); - -#ifdef __alpha__ -/* Even if we're not configured to default to 128-bit long double, - maintain binary compatibility, as -mlong-double-128 can be used - at any time. */ -/* Validate the hard-coded number below. */ -# if defined(__LONG_DOUBLE_128__) && FFI_TYPE_LONGDOUBLE != 4 -# error FFI_TYPE_LONGDOUBLE out of date -# endif -const ffi_type ffi_type_longdouble = { 16, 16, 4, NULL }; -#elif FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE -FFI_TYPEDEF(longdouble, long double, FFI_TYPE_LONGDOUBLE); -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/darwin.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/darwin.S deleted file mode 100644 index 8f0f070..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/darwin.S +++ /dev/null @@ -1,444 +0,0 @@ -/* ----------------------------------------------------------------------- - darwin.S - Copyright (c) 1996, 1998, 2001, 2002, 2003, 2005 Red Hat, Inc. - Copyright (C) 2008 Free Software Foundation, Inc. - - X86 Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- - */ - -#ifndef __x86_64__ - -#define LIBFFI_ASM -#include -#include - -.text - -.globl _ffi_prep_args - - .align 4 -.globl _ffi_call_SYSV - -_ffi_call_SYSV: -.LFB1: - pushl %ebp -.LCFI0: - movl %esp,%ebp -.LCFI1: - subl $8,%esp - /* Make room for all of the new args. */ - movl 16(%ebp),%ecx - subl %ecx,%esp - - movl %esp,%eax - - /* Place all of the ffi_prep_args in position */ - subl $8,%esp - pushl 12(%ebp) - pushl %eax - call *8(%ebp) - - /* Return stack to previous state and call the function */ - addl $16,%esp - - call *28(%ebp) - - /* Load %ecx with the return type code */ - movl 20(%ebp),%ecx - - /* Protect %esi. We're going to pop it in the epilogue. */ - pushl %esi - - /* If the return value pointer is NULL, assume no return value. */ - cmpl $0,24(%ebp) - jne 0f - - /* Even if there is no space for the return value, we are - obliged to handle floating-point values. */ - cmpl $FFI_TYPE_FLOAT,%ecx - jne noretval - fstp %st(0) - - jmp epilogue -0: - .align 4 - call 1f -.Lstore_table: - .long noretval-.Lstore_table /* FFI_TYPE_VOID */ - .long retint-.Lstore_table /* FFI_TYPE_INT */ - .long retfloat-.Lstore_table /* FFI_TYPE_FLOAT */ - .long retdouble-.Lstore_table /* FFI_TYPE_DOUBLE */ - .long retlongdouble-.Lstore_table /* FFI_TYPE_LONGDOUBLE */ - .long retuint8-.Lstore_table /* FFI_TYPE_UINT8 */ - .long retsint8-.Lstore_table /* FFI_TYPE_SINT8 */ - .long retuint16-.Lstore_table /* FFI_TYPE_UINT16 */ - .long retsint16-.Lstore_table /* FFI_TYPE_SINT16 */ - .long retint-.Lstore_table /* FFI_TYPE_UINT32 */ - .long retint-.Lstore_table /* FFI_TYPE_SINT32 */ - .long retint64-.Lstore_table /* FFI_TYPE_UINT64 */ - .long retint64-.Lstore_table /* FFI_TYPE_SINT64 */ - .long retstruct-.Lstore_table /* FFI_TYPE_STRUCT */ - .long retint-.Lstore_table /* FFI_TYPE_POINTER */ - .long retstruct1b-.Lstore_table /* FFI_TYPE_SMALL_STRUCT_1B */ - .long retstruct2b-.Lstore_table /* FFI_TYPE_SMALL_STRUCT_2B */ -1: - pop %esi - add (%esi, %ecx, 4), %esi - jmp *%esi - - /* Sign/zero extend as appropriate. */ -retsint8: - movsbl %al, %eax - jmp retint - -retsint16: - movswl %ax, %eax - jmp retint - -retuint8: - movzbl %al, %eax - jmp retint - -retuint16: - movzwl %ax, %eax - jmp retint - -retfloat: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - fstps (%ecx) - jmp epilogue - -retdouble: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - fstpl (%ecx) - jmp epilogue - -retlongdouble: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - fstpt (%ecx) - jmp epilogue - -retint64: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - movl %eax,0(%ecx) - movl %edx,4(%ecx) - jmp epilogue - -retstruct1b: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - movb %al,0(%ecx) - jmp epilogue - -retstruct2b: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - movw %ax,0(%ecx) - jmp epilogue - -retint: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - movl %eax,0(%ecx) - -retstruct: - /* Nothing to do! */ - -noretval: -epilogue: - popl %esi - movl %ebp,%esp - popl %ebp - ret - -.LFE1: -.ffi_call_SYSV_end: - - .align 4 -FFI_HIDDEN (ffi_closure_SYSV) -.globl _ffi_closure_SYSV - -_ffi_closure_SYSV: -.LFB2: - pushl %ebp -.LCFI2: - movl %esp, %ebp -.LCFI3: - subl $40, %esp - leal -24(%ebp), %edx - movl %edx, -12(%ebp) /* resp */ - leal 8(%ebp), %edx - movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */ - leal -12(%ebp), %edx - movl %edx, (%esp) /* &resp */ - movl %ebx, 8(%esp) -.LCFI7: - call L_ffi_closure_SYSV_inner$stub - movl 8(%esp), %ebx - movl -12(%ebp), %ecx - cmpl $FFI_TYPE_INT, %eax - je .Lcls_retint - - /* Handle FFI_TYPE_UINT8, FFI_TYPE_SINT8, FFI_TYPE_UINT16, - FFI_TYPE_SINT16, FFI_TYPE_UINT32, FFI_TYPE_SINT32. */ - cmpl $FFI_TYPE_UINT64, %eax - jge 0f - cmpl $FFI_TYPE_UINT8, %eax - jge .Lcls_retint - -0: cmpl $FFI_TYPE_FLOAT, %eax - je .Lcls_retfloat - cmpl $FFI_TYPE_DOUBLE, %eax - je .Lcls_retdouble - cmpl $FFI_TYPE_LONGDOUBLE, %eax - je .Lcls_retldouble - cmpl $FFI_TYPE_SINT64, %eax - je .Lcls_retllong - cmpl $FFI_TYPE_SMALL_STRUCT_1B, %eax - je .Lcls_retstruct1b - cmpl $FFI_TYPE_SMALL_STRUCT_2B, %eax - je .Lcls_retstruct2b - cmpl $FFI_TYPE_STRUCT, %eax - je .Lcls_retstruct -.Lcls_epilogue: - movl %ebp, %esp - popl %ebp - ret -.Lcls_retint: - movl (%ecx), %eax - jmp .Lcls_epilogue -.Lcls_retfloat: - flds (%ecx) - jmp .Lcls_epilogue -.Lcls_retdouble: - fldl (%ecx) - jmp .Lcls_epilogue -.Lcls_retldouble: - fldt (%ecx) - jmp .Lcls_epilogue -.Lcls_retllong: - movl (%ecx), %eax - movl 4(%ecx), %edx - jmp .Lcls_epilogue -.Lcls_retstruct1b: - movsbl (%ecx), %eax - jmp .Lcls_epilogue -.Lcls_retstruct2b: - movswl (%ecx), %eax - jmp .Lcls_epilogue -.Lcls_retstruct: - lea -8(%ebp),%esp - movl %ebp, %esp - popl %ebp - ret $4 -.LFE2: - -#if !FFI_NO_RAW_API - -#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) -#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) -#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) -#define CIF_FLAGS_OFFSET 20 - - .align 4 -FFI_HIDDEN (ffi_closure_raw_SYSV) -.globl _ffi_closure_raw_SYSV - -_ffi_closure_raw_SYSV: -.LFB3: - pushl %ebp -.LCFI4: - movl %esp, %ebp -.LCFI5: - pushl %esi -.LCFI6: - subl $36, %esp - movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ - movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ - movl %edx, 12(%esp) /* user_data */ - leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */ - movl %edx, 8(%esp) /* raw_args */ - leal -24(%ebp), %edx - movl %edx, 4(%esp) /* &res */ - movl %esi, (%esp) /* cif */ - call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */ - movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */ - cmpl $FFI_TYPE_INT, %eax - je .Lrcls_retint - - /* Handle FFI_TYPE_UINT8, FFI_TYPE_SINT8, FFI_TYPE_UINT16, - FFI_TYPE_SINT16, FFI_TYPE_UINT32, FFI_TYPE_SINT32. */ - cmpl $FFI_TYPE_UINT64, %eax - jge 0f - cmpl $FFI_TYPE_UINT8, %eax - jge .Lrcls_retint -0: - cmpl $FFI_TYPE_FLOAT, %eax - je .Lrcls_retfloat - cmpl $FFI_TYPE_DOUBLE, %eax - je .Lrcls_retdouble - cmpl $FFI_TYPE_LONGDOUBLE, %eax - je .Lrcls_retldouble - cmpl $FFI_TYPE_SINT64, %eax - je .Lrcls_retllong -.Lrcls_epilogue: - addl $36, %esp - popl %esi - popl %ebp - ret -.Lrcls_retint: - movl -24(%ebp), %eax - jmp .Lrcls_epilogue -.Lrcls_retfloat: - flds -24(%ebp) - jmp .Lrcls_epilogue -.Lrcls_retdouble: - fldl -24(%ebp) - jmp .Lrcls_epilogue -.Lrcls_retldouble: - fldt -24(%ebp) - jmp .Lrcls_epilogue -.Lrcls_retllong: - movl -24(%ebp), %eax - movl -20(%ebp), %edx - jmp .Lrcls_epilogue -.LFE3: -#endif - -.section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5 -L_ffi_closure_SYSV_inner$stub: - .indirect_symbol _ffi_closure_SYSV_inner - hlt ; hlt ; hlt ; hlt ; hlt - - -.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support -EH_frame1: - .set L$set$0,LECIE1-LSCIE1 - .long L$set$0 -LSCIE1: - .long 0x0 - .byte 0x1 - .ascii "zR\0" - .byte 0x1 - .byte 0x7c - .byte 0x8 - .byte 0x1 - .byte 0x10 - .byte 0xc - .byte 0x5 - .byte 0x4 - .byte 0x88 - .byte 0x1 - .align 2 -LECIE1: -.globl _ffi_call_SYSV.eh -_ffi_call_SYSV.eh: -LSFDE1: - .set L$set$1,LEFDE1-LASFDE1 - .long L$set$1 -LASFDE1: - .long LASFDE1-EH_frame1 - .long .LFB1-. - .set L$set$2,.LFE1-.LFB1 - .long L$set$2 - .byte 0x0 - .byte 0x4 - .set L$set$3,.LCFI0-.LFB1 - .long L$set$3 - .byte 0xe - .byte 0x8 - .byte 0x84 - .byte 0x2 - .byte 0x4 - .set L$set$4,.LCFI1-.LCFI0 - .long L$set$4 - .byte 0xd - .byte 0x4 - .align 2 -LEFDE1: -.globl _ffi_closure_SYSV.eh -_ffi_closure_SYSV.eh: -LSFDE2: - .set L$set$5,LEFDE2-LASFDE2 - .long L$set$5 -LASFDE2: - .long LASFDE2-EH_frame1 - .long .LFB2-. - .set L$set$6,.LFE2-.LFB2 - .long L$set$6 - .byte 0x0 - .byte 0x4 - .set L$set$7,.LCFI2-.LFB2 - .long L$set$7 - .byte 0xe - .byte 0x8 - .byte 0x84 - .byte 0x2 - .byte 0x4 - .set L$set$8,.LCFI3-.LCFI2 - .long L$set$8 - .byte 0xd - .byte 0x4 - .align 2 -LEFDE2: - -#if !FFI_NO_RAW_API - -.globl _ffi_closure_raw_SYSV.eh -_ffi_closure_raw_SYSV.eh: -LSFDE3: - .set L$set$10,LEFDE3-LASFDE3 - .long L$set$10 -LASFDE3: - .long LASFDE3-EH_frame1 - .long .LFB3-. - .set L$set$11,.LFE3-.LFB3 - .long L$set$11 - .byte 0x0 - .byte 0x4 - .set L$set$12,.LCFI4-.LFB3 - .long L$set$12 - .byte 0xe - .byte 0x8 - .byte 0x84 - .byte 0x2 - .byte 0x4 - .set L$set$13,.LCFI5-.LCFI4 - .long L$set$13 - .byte 0xd - .byte 0x4 - .byte 0x4 - .set L$set$14,.LCFI6-.LCFI5 - .long L$set$14 - .byte 0x85 - .byte 0x3 - .align 2 -LEFDE3: - -#endif - -#endif /* ifndef __x86_64__ */ diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/darwin64.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/darwin64.S deleted file mode 100644 index 2f7394e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/darwin64.S +++ /dev/null @@ -1,416 +0,0 @@ -/* ----------------------------------------------------------------------- - darwin64.S - Copyright (c) 2006 Free Software Foundation, Inc. - Copyright (c) 2008 Red Hat, Inc. - derived from unix64.S - - x86-64 Foreign Function Interface for Darwin. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR - OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#ifdef __x86_64__ -#define LIBFFI_ASM -#include -#include - - .file "darwin64.S" -.text - -/* ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, - void *raddr, void (*fnaddr)(void)); - - Bit o trickiness here -- ARGS+BYTES is the base of the stack frame - for this function. This has been allocated by ffi_call. We also - deallocate some of the stack that has been alloca'd. */ - - .align 3 - .globl _ffi_call_unix64 - -_ffi_call_unix64: -LUW0: - movq (%rsp), %r10 /* Load return address. */ - leaq (%rdi, %rsi), %rax /* Find local stack base. */ - movq %rdx, (%rax) /* Save flags. */ - movq %rcx, 8(%rax) /* Save raddr. */ - movq %rbp, 16(%rax) /* Save old frame pointer. */ - movq %r10, 24(%rax) /* Relocate return address. */ - movq %rax, %rbp /* Finalize local stack frame. */ -LUW1: - movq %rdi, %r10 /* Save a copy of the register area. */ - movq %r8, %r11 /* Save a copy of the target fn. */ - movl %r9d, %eax /* Set number of SSE registers. */ - - /* Load up all argument registers. */ - movq (%r10), %rdi - movq 8(%r10), %rsi - movq 16(%r10), %rdx - movq 24(%r10), %rcx - movq 32(%r10), %r8 - movq 40(%r10), %r9 - testl %eax, %eax - jnz Lload_sse -Lret_from_load_sse: - - /* Deallocate the reg arg area. */ - leaq 176(%r10), %rsp - - /* Call the user function. */ - call *%r11 - - /* Deallocate stack arg area; local stack frame in redzone. */ - leaq 24(%rbp), %rsp - - movq 0(%rbp), %rcx /* Reload flags. */ - movq 8(%rbp), %rdi /* Reload raddr. */ - movq 16(%rbp), %rbp /* Reload old frame pointer. */ -LUW2: - - /* The first byte of the flags contains the FFI_TYPE. */ - movzbl %cl, %r10d - leaq Lstore_table(%rip), %r11 - movslq (%r11, %r10, 4), %r10 - addq %r11, %r10 - jmp *%r10 - -Lstore_table: - .long Lst_void-Lstore_table /* FFI_TYPE_VOID */ - .long Lst_sint32-Lstore_table /* FFI_TYPE_INT */ - .long Lst_float-Lstore_table /* FFI_TYPE_FLOAT */ - .long Lst_double-Lstore_table /* FFI_TYPE_DOUBLE */ - .long Lst_ldouble-Lstore_table /* FFI_TYPE_LONGDOUBLE */ - .long Lst_uint8-Lstore_table /* FFI_TYPE_UINT8 */ - .long Lst_sint8-Lstore_table /* FFI_TYPE_SINT8 */ - .long Lst_uint16-Lstore_table /* FFI_TYPE_UINT16 */ - .long Lst_sint16-Lstore_table /* FFI_TYPE_SINT16 */ - .long Lst_uint32-Lstore_table /* FFI_TYPE_UINT32 */ - .long Lst_sint32-Lstore_table /* FFI_TYPE_SINT32 */ - .long Lst_int64-Lstore_table /* FFI_TYPE_UINT64 */ - .long Lst_int64-Lstore_table /* FFI_TYPE_SINT64 */ - .long Lst_struct-Lstore_table /* FFI_TYPE_STRUCT */ - .long Lst_int64-Lstore_table /* FFI_TYPE_POINTER */ - - .text - .align 3 -Lst_void: - ret - .align 3 -Lst_uint8: - movzbq %al, %rax - movq %rax, (%rdi) - ret - .align 3 -Lst_sint8: - movsbq %al, %rax - movq %rax, (%rdi) - ret - .align 3 -Lst_uint16: - movzwq %ax, %rax - movq %rax, (%rdi) - .align 3 -Lst_sint16: - movswq %ax, %rax - movq %rax, (%rdi) - ret - .align 3 -Lst_uint32: - movl %eax, %eax - movq %rax, (%rdi) - .align 3 -Lst_sint32: - cltq - movq %rax, (%rdi) - ret - .align 3 -Lst_int64: - movq %rax, (%rdi) - ret - .align 3 -Lst_float: - movss %xmm0, (%rdi) - ret - .align 3 -Lst_double: - movsd %xmm0, (%rdi) - ret -Lst_ldouble: - fstpt (%rdi) - ret - .align 3 -Lst_struct: - leaq -20(%rsp), %rsi /* Scratch area in redzone. */ - - /* We have to locate the values now, and since we don't want to - write too much data into the user's return value, we spill the - value to a 16 byte scratch area first. Bits 8, 9, and 10 - control where the values are located. Only one of the three - bits will be set; see ffi_prep_cif_machdep for the pattern. */ - movd %xmm0, %r10 - movd %xmm1, %r11 - testl $0x100, %ecx - cmovnz %rax, %rdx - cmovnz %r10, %rax - testl $0x200, %ecx - cmovnz %r10, %rdx - testl $0x400, %ecx - cmovnz %r10, %rax - cmovnz %r11, %rdx - movq %rax, (%rsi) - movq %rdx, 8(%rsi) - - /* Bits 12-31 contain the true size of the structure. Copy from - the scratch area to the true destination. */ - shrl $12, %ecx - rep movsb - ret - - /* Many times we can avoid loading any SSE registers at all. - It's not worth an indirect jump to load the exact set of - SSE registers needed; zero or all is a good compromise. */ - .align 3 -LUW3: -Lload_sse: - movdqa 48(%r10), %xmm0 - movdqa 64(%r10), %xmm1 - movdqa 80(%r10), %xmm2 - movdqa 96(%r10), %xmm3 - movdqa 112(%r10), %xmm4 - movdqa 128(%r10), %xmm5 - movdqa 144(%r10), %xmm6 - movdqa 160(%r10), %xmm7 - jmp Lret_from_load_sse - -LUW4: - .align 3 - .globl _ffi_closure_unix64 - -_ffi_closure_unix64: -LUW5: - /* The carry flag is set by the trampoline iff SSE registers - are used. Don't clobber it before the branch instruction. */ - leaq -200(%rsp), %rsp -LUW6: - movq %rdi, (%rsp) - movq %rsi, 8(%rsp) - movq %rdx, 16(%rsp) - movq %rcx, 24(%rsp) - movq %r8, 32(%rsp) - movq %r9, 40(%rsp) - jc Lsave_sse -Lret_from_save_sse: - - movq %r10, %rdi - leaq 176(%rsp), %rsi - movq %rsp, %rdx - leaq 208(%rsp), %rcx - call _ffi_closure_unix64_inner - - /* Deallocate stack frame early; return value is now in redzone. */ - addq $200, %rsp -LUW7: - - /* The first byte of the return value contains the FFI_TYPE. */ - movzbl %al, %r10d - leaq Lload_table(%rip), %r11 - movslq (%r11, %r10, 4), %r10 - addq %r11, %r10 - jmp *%r10 - -Lload_table: - .long Lld_void-Lload_table /* FFI_TYPE_VOID */ - .long Lld_int32-Lload_table /* FFI_TYPE_INT */ - .long Lld_float-Lload_table /* FFI_TYPE_FLOAT */ - .long Lld_double-Lload_table /* FFI_TYPE_DOUBLE */ - .long Lld_ldouble-Lload_table /* FFI_TYPE_LONGDOUBLE */ - .long Lld_int8-Lload_table /* FFI_TYPE_UINT8 */ - .long Lld_int8-Lload_table /* FFI_TYPE_SINT8 */ - .long Lld_int16-Lload_table /* FFI_TYPE_UINT16 */ - .long Lld_int16-Lload_table /* FFI_TYPE_SINT16 */ - .long Lld_int32-Lload_table /* FFI_TYPE_UINT32 */ - .long Lld_int32-Lload_table /* FFI_TYPE_SINT32 */ - .long Lld_int64-Lload_table /* FFI_TYPE_UINT64 */ - .long Lld_int64-Lload_table /* FFI_TYPE_SINT64 */ - .long Lld_struct-Lload_table /* FFI_TYPE_STRUCT */ - .long Lld_int64-Lload_table /* FFI_TYPE_POINTER */ - - .text - .align 3 -Lld_void: - ret - .align 3 -Lld_int8: - movzbl -24(%rsp), %eax - ret - .align 3 -Lld_int16: - movzwl -24(%rsp), %eax - ret - .align 3 -Lld_int32: - movl -24(%rsp), %eax - ret - .align 3 -Lld_int64: - movq -24(%rsp), %rax - ret - .align 3 -Lld_float: - movss -24(%rsp), %xmm0 - ret - .align 3 -Lld_double: - movsd -24(%rsp), %xmm0 - ret - .align 3 -Lld_ldouble: - fldt -24(%rsp) - ret - .align 3 -Lld_struct: - /* There are four possibilities here, %rax/%rdx, %xmm0/%rax, - %rax/%xmm0, %xmm0/%xmm1. We collapse two by always loading - both rdx and xmm1 with the second word. For the remaining, - bit 8 set means xmm0 gets the second word, and bit 9 means - that rax gets the second word. */ - movq -24(%rsp), %rcx - movq -16(%rsp), %rdx - movq -16(%rsp), %xmm1 - testl $0x100, %eax - cmovnz %rdx, %rcx - movd %rcx, %xmm0 - testl $0x200, %eax - movq -24(%rsp), %rax - cmovnz %rdx, %rax - ret - - /* See the comment above Lload_sse; the same logic applies here. */ - .align 3 -LUW8: -Lsave_sse: - movdqa %xmm0, 48(%rsp) - movdqa %xmm1, 64(%rsp) - movdqa %xmm2, 80(%rsp) - movdqa %xmm3, 96(%rsp) - movdqa %xmm4, 112(%rsp) - movdqa %xmm5, 128(%rsp) - movdqa %xmm6, 144(%rsp) - movdqa %xmm7, 160(%rsp) - jmp Lret_from_save_sse - -LUW9: -.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support -EH_frame1: - .set L$set$0,LECIE1-LSCIE1 /* CIE Length */ - .long L$set$0 -LSCIE1: - .long 0x0 /* CIE Identifier Tag */ - .byte 0x1 /* CIE Version */ - .ascii "zR\0" /* CIE Augmentation */ - .byte 0x1 /* uleb128 0x1; CIE Code Alignment Factor */ - .byte 0x78 /* sleb128 -8; CIE Data Alignment Factor */ - .byte 0x10 /* CIE RA Column */ - .byte 0x1 /* uleb128 0x1; Augmentation size */ - .byte 0x10 /* FDE Encoding (pcrel sdata4) */ - .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ - .byte 0x7 /* uleb128 0x7 */ - .byte 0x8 /* uleb128 0x8 */ - .byte 0x90 /* DW_CFA_offset, column 0x10 */ - .byte 0x1 - .align 3 -LECIE1: - .globl _ffi_call_unix64.eh -_ffi_call_unix64.eh: -LSFDE1: - .set L$set$1,LEFDE1-LASFDE1 /* FDE Length */ - .long L$set$1 -LASFDE1: - .long LASFDE1-EH_frame1 /* FDE CIE offset */ - .quad LUW0-. /* FDE initial location */ - .set L$set$2,LUW4-LUW0 /* FDE address range */ - .quad L$set$2 - .byte 0x0 /* Augmentation size */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .set L$set$3,LUW1-LUW0 - .long L$set$3 - - /* New stack frame based off rbp. This is a itty bit of unwind - trickery in that the CFA *has* changed. There is no easy way - to describe it correctly on entry to the function. Fortunately, - it doesn't matter too much since at all points we can correctly - unwind back to ffi_call. Note that the location to which we - moved the return address is (the new) CFA-8, so from the - perspective of the unwind info, it hasn't moved. */ - .byte 0xc /* DW_CFA_def_cfa, %rbp offset 32 */ - .byte 0x6 - .byte 0x20 - .byte 0x80+6 /* DW_CFA_offset, %rbp offset 2*-8 */ - .byte 0x2 - .byte 0xa /* DW_CFA_remember_state */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .set L$set$4,LUW2-LUW1 - .long L$set$4 - .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ - .byte 0x7 - .byte 0x8 - .byte 0xc0+6 /* DW_CFA_restore, %rbp */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .set L$set$5,LUW3-LUW2 - .long L$set$5 - .byte 0xb /* DW_CFA_restore_state */ - - .align 3 -LEFDE1: - .globl _ffi_closure_unix64.eh -_ffi_closure_unix64.eh: -LSFDE3: - .set L$set$6,LEFDE3-LASFDE3 /* FDE Length */ - .long L$set$6 -LASFDE3: - .long LASFDE3-EH_frame1 /* FDE CIE offset */ - .quad LUW5-. /* FDE initial location */ - .set L$set$7,LUW9-LUW5 /* FDE address range */ - .quad L$set$7 - .byte 0x0 /* Augmentation size */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .set L$set$8,LUW6-LUW5 - .long L$set$8 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 208,1 /* uleb128 208 */ - .byte 0xa /* DW_CFA_remember_state */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .set L$set$9,LUW7-LUW6 - .long L$set$9 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x8 - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .set L$set$10,LUW8-LUW7 - .long L$set$10 - .byte 0xb /* DW_CFA_restore_state */ - - .align 3 -LEFDE3: - .subsections_via_symbols - -#endif /* __x86_64__ */ diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/ffi.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/ffi.c deleted file mode 100644 index 34f9c66..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/ffi.c +++ /dev/null @@ -1,644 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 1996, 1998, 1999, 2001, 2007, 2008 Red Hat, Inc. - Copyright (c) 2002 Ranjit Mathew - Copyright (c) 2002 Bo Thorsen - Copyright (c) 2002 Roger Sayle - Copyright (C) 2008, 2010 Free Software Foundation, Inc. - - x86 Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#if !defined(__x86_64__) || defined(_WIN64) - -#ifdef _WIN64 -#include -#endif - -#include -#include - -#include - -/* ffi_prep_args is called by the assembly routine once stack space - has been allocated for the function's arguments */ - -void ffi_prep_args(char *stack, extended_cif *ecif) -{ - register unsigned int i; - register void **p_argv; - register char *argp; - register ffi_type **p_arg; - - argp = stack; - - if (ecif->cif->flags == FFI_TYPE_STRUCT -#ifdef X86_WIN64 - && (ecif->cif->rtype->size != 1 && ecif->cif->rtype->size != 2 - && ecif->cif->rtype->size != 4 && ecif->cif->rtype->size != 8) -#endif - ) - { - *(void **) argp = ecif->rvalue; - argp += sizeof(void*); - } - - p_argv = ecif->avalue; - - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; - i != 0; - i--, p_arg++) - { - size_t z; - - /* Align if necessary */ - if ((sizeof(void*) - 1) & (size_t) argp) - argp = (char *) ALIGN(argp, sizeof(void*)); - - z = (*p_arg)->size; -#ifdef X86_WIN64 - if (z > sizeof(ffi_arg) - || ((*p_arg)->type == FFI_TYPE_STRUCT - && (z != 1 && z != 2 && z != 4 && z != 8)) -#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE - || ((*p_arg)->type == FFI_TYPE_LONGDOUBLE) -#endif - ) - { - z = sizeof(ffi_arg); - *(void **)argp = *p_argv; - } - else if ((*p_arg)->type == FFI_TYPE_FLOAT) - { - memcpy(argp, *p_argv, z); - } - else -#endif - if (z < sizeof(ffi_arg)) - { - z = sizeof(ffi_arg); - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(ffi_sarg *) argp = (ffi_sarg)*(SINT8 *)(* p_argv); - break; - - case FFI_TYPE_UINT8: - *(ffi_arg *) argp = (ffi_arg)*(UINT8 *)(* p_argv); - break; - - case FFI_TYPE_SINT16: - *(ffi_sarg *) argp = (ffi_sarg)*(SINT16 *)(* p_argv); - break; - - case FFI_TYPE_UINT16: - *(ffi_arg *) argp = (ffi_arg)*(UINT16 *)(* p_argv); - break; - - case FFI_TYPE_SINT32: - *(ffi_sarg *) argp = (ffi_sarg)*(SINT32 *)(* p_argv); - break; - - case FFI_TYPE_UINT32: - *(ffi_arg *) argp = (ffi_arg)*(UINT32 *)(* p_argv); - break; - - case FFI_TYPE_STRUCT: - *(ffi_arg *) argp = *(ffi_arg *)(* p_argv); - break; - - default: - FFI_ASSERT(0); - } - } - else - { - memcpy(argp, *p_argv, z); - } - p_argv++; -#ifdef X86_WIN64 - argp += (z + sizeof(void*) - 1) & ~(sizeof(void*) - 1); -#else - argp += z; -#endif - } - - return; -} - -/* Perform machine dependent cif processing */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) -{ - unsigned int i; - ffi_type **ptr; - - /* Set the return type flag */ - switch (cif->rtype->type) - { - case FFI_TYPE_VOID: - case FFI_TYPE_UINT8: - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT8: - case FFI_TYPE_SINT16: -#ifdef X86_WIN64 - case FFI_TYPE_UINT32: - case FFI_TYPE_SINT32: -#endif - case FFI_TYPE_SINT64: - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: -#ifndef X86_WIN64 -#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE - case FFI_TYPE_LONGDOUBLE: -#endif -#endif - cif->flags = (unsigned) cif->rtype->type; - break; - - case FFI_TYPE_UINT64: -#ifdef X86_WIN64 - case FFI_TYPE_POINTER: -#endif - cif->flags = FFI_TYPE_SINT64; - break; - - case FFI_TYPE_STRUCT: -#ifndef X86 - if (cif->rtype->size == 1) - { - cif->flags = FFI_TYPE_SMALL_STRUCT_1B; /* same as char size */ - } - else if (cif->rtype->size == 2) - { - cif->flags = FFI_TYPE_SMALL_STRUCT_2B; /* same as short size */ - } - else if (cif->rtype->size == 4) - { -#ifdef X86_WIN64 - cif->flags = FFI_TYPE_SMALL_STRUCT_4B; -#else - cif->flags = FFI_TYPE_INT; /* same as int type */ -#endif - } - else if (cif->rtype->size == 8) - { - cif->flags = FFI_TYPE_SINT64; /* same as int64 type */ - } - else -#endif - { - cif->flags = FFI_TYPE_STRUCT; - /* allocate space for return value pointer */ - cif->bytes += ALIGN(sizeof(void*), FFI_SIZEOF_ARG); - } - break; - - default: -#ifdef X86_WIN64 - cif->flags = FFI_TYPE_SINT64; - break; - case FFI_TYPE_INT: - cif->flags = FFI_TYPE_SINT32; -#else - cif->flags = FFI_TYPE_INT; -#endif - break; - } - - for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) - { - if (((*ptr)->alignment - 1) & cif->bytes) - cif->bytes = ALIGN(cif->bytes, (*ptr)->alignment); - cif->bytes += ALIGN((*ptr)->size, FFI_SIZEOF_ARG); - } - -#ifdef X86_WIN64 - /* ensure space for storing four registers */ - cif->bytes += 4 * sizeof(ffi_arg); -#endif - -#ifdef X86_DARWIN - cif->bytes = (cif->bytes + 15) & ~0xF; -#endif - - return FFI_OK; -} - -#ifdef X86_WIN64 -extern int -ffi_call_win64(void (*)(char *, extended_cif *), extended_cif *, - unsigned, unsigned, unsigned *, void (*fn)(void)); -#elif defined(X86_WIN32) -extern void -ffi_call_win32(void (*)(char *, extended_cif *), extended_cif *, - unsigned, unsigned, unsigned *, void (*fn)(void)); -#else -extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, - unsigned, unsigned, unsigned *, void (*fn)(void)); -#endif - -void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return */ - /* value address then we need to make one */ - -#ifdef X86_WIN64 - if (rvalue == NULL - && cif->flags == FFI_TYPE_STRUCT - && cif->rtype->size != 1 && cif->rtype->size != 2 - && cif->rtype->size != 4 && cif->rtype->size != 8) - { - ecif.rvalue = alloca((cif->rtype->size + 0xF) & ~0xF); - } -#else - if (rvalue == NULL - && cif->flags == FFI_TYPE_STRUCT) - { - ecif.rvalue = alloca(cif->rtype->size); - } -#endif - else - ecif.rvalue = rvalue; - - - switch (cif->abi) - { -#ifdef X86_WIN64 - case FFI_WIN64: - ffi_call_win64(ffi_prep_args, &ecif, cif->bytes, - cif->flags, ecif.rvalue, fn); - break; -#elif defined(X86_WIN32) - case FFI_SYSV: - case FFI_STDCALL: - ffi_call_win32(ffi_prep_args, &ecif, cif->bytes, cif->flags, - ecif.rvalue, fn); - break; -#else - case FFI_SYSV: - ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, ecif.rvalue, - fn); - break; -#endif - default: - FFI_ASSERT(0); - break; - } -} - - -/** private members **/ - -/* The following __attribute__((regparm(1))) decorations will have no effect - on MSVC - standard cdecl convention applies. */ -static void ffi_prep_incoming_args_SYSV (char *stack, void **ret, - void** args, ffi_cif* cif); -void FFI_HIDDEN ffi_closure_SYSV (ffi_closure *) - __attribute__ ((regparm(1))); -unsigned int FFI_HIDDEN ffi_closure_SYSV_inner (ffi_closure *, void **, void *) - __attribute__ ((regparm(1))); -void FFI_HIDDEN ffi_closure_raw_SYSV (ffi_raw_closure *) - __attribute__ ((regparm(1))); -#ifdef X86_WIN32 -void FFI_HIDDEN ffi_closure_STDCALL (ffi_closure *) - __attribute__ ((regparm(1))); -#endif -#ifdef X86_WIN64 -void FFI_HIDDEN ffi_closure_win64 (ffi_closure *); -#endif - -/* This function is jumped to by the trampoline */ - -#ifdef X86_WIN64 -void * FFI_HIDDEN -ffi_closure_win64_inner (ffi_closure *closure, void *args) { - ffi_cif *cif; - void **arg_area; - void *result; - void *resp = &result; - - cif = closure->cif; - arg_area = (void**) alloca (cif->nargs * sizeof (void*)); - - /* this call will initialize ARG_AREA, such that each - * element in that array points to the corresponding - * value on the stack; and if the function returns - * a structure, it will change RESP to point to the - * structure return address. */ - - ffi_prep_incoming_args_SYSV(args, &resp, arg_area, cif); - - (closure->fun) (cif, resp, arg_area, closure->user_data); - - /* The result is returned in rax. This does the right thing for - result types except for floats; we have to 'mov xmm0, rax' in the - caller to correct this. - TODO: structure sizes of 3 5 6 7 are returned by reference, too!!! - */ - return cif->rtype->size > sizeof(void *) ? resp : *(void **)resp; -} - -#else -unsigned int FFI_HIDDEN __attribute__ ((regparm(1))) -ffi_closure_SYSV_inner (ffi_closure *closure, void **respp, void *args) -{ - /* our various things... */ - ffi_cif *cif; - void **arg_area; - - cif = closure->cif; - arg_area = (void**) alloca (cif->nargs * sizeof (void*)); - - /* this call will initialize ARG_AREA, such that each - * element in that array points to the corresponding - * value on the stack; and if the function returns - * a structure, it will change RESP to point to the - * structure return address. */ - - ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif); - - (closure->fun) (cif, *respp, arg_area, closure->user_data); - - return cif->flags; -} -#endif /* !X86_WIN64 */ - -static void -ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, void **avalue, - ffi_cif *cif) -{ - register unsigned int i; - register void **p_argv; - register char *argp; - register ffi_type **p_arg; - - argp = stack; - -#ifdef X86_WIN64 - if (cif->rtype->size > sizeof(ffi_arg) - || (cif->flags == FFI_TYPE_STRUCT - && (cif->rtype->size != 1 && cif->rtype->size != 2 - && cif->rtype->size != 4 && cif->rtype->size != 8))) { - *rvalue = *(void **) argp; - argp += sizeof(void *); - } -#else - if ( cif->flags == FFI_TYPE_STRUCT ) { - *rvalue = *(void **) argp; - argp += sizeof(void *); - } -#endif - - p_argv = avalue; - - for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++) - { - size_t z; - - /* Align if necessary */ - if ((sizeof(void*) - 1) & (size_t) argp) { - argp = (char *) ALIGN(argp, sizeof(void*)); - } - -#ifdef X86_WIN64 - if ((*p_arg)->size > sizeof(ffi_arg) - || ((*p_arg)->type == FFI_TYPE_STRUCT - && ((*p_arg)->size != 1 && (*p_arg)->size != 2 - && (*p_arg)->size != 4 && (*p_arg)->size != 8))) - { - z = sizeof(void *); - *p_argv = *(void **)argp; - } - else -#endif - { - z = (*p_arg)->size; - - /* because we're little endian, this is what it turns into. */ - - *p_argv = (void*) argp; - } - - p_argv++; -#ifdef X86_WIN64 - argp += (z + sizeof(void*) - 1) & ~(sizeof(void*) - 1); -#else - argp += z; -#endif - } - - return; -} - -#define FFI_INIT_TRAMPOLINE_WIN64(TRAMP,FUN,CTX,MASK) \ -{ unsigned char *__tramp = (unsigned char*)(TRAMP); \ - void* __fun = (void*)(FUN); \ - void* __ctx = (void*)(CTX); \ - *(unsigned char*) &__tramp[0] = 0x41; \ - *(unsigned char*) &__tramp[1] = 0xbb; \ - *(unsigned int*) &__tramp[2] = MASK; /* mov $mask, %r11 */ \ - *(unsigned char*) &__tramp[6] = 0x48; \ - *(unsigned char*) &__tramp[7] = 0xb8; \ - *(void**) &__tramp[8] = __ctx; /* mov __ctx, %rax */ \ - *(unsigned char *) &__tramp[16] = 0x49; \ - *(unsigned char *) &__tramp[17] = 0xba; \ - *(void**) &__tramp[18] = __fun; /* mov __fun, %r10 */ \ - *(unsigned char *) &__tramp[26] = 0x41; \ - *(unsigned char *) &__tramp[27] = 0xff; \ - *(unsigned char *) &__tramp[28] = 0xe2; /* jmp %r10 */ \ - } - -/* How to make a trampoline. Derived from gcc/config/i386/i386.c. */ - -#define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \ -{ unsigned char *__tramp = (unsigned char*)(TRAMP); \ - unsigned int __fun = (unsigned int)(FUN); \ - unsigned int __ctx = (unsigned int)(CTX); \ - unsigned int __dis = __fun - (__ctx + 10); \ - *(unsigned char*) &__tramp[0] = 0xb8; \ - *(unsigned int*) &__tramp[1] = __ctx; /* movl __ctx, %eax */ \ - *(unsigned char *) &__tramp[5] = 0xe9; \ - *(unsigned int*) &__tramp[6] = __dis; /* jmp __fun */ \ - } - -#define FFI_INIT_TRAMPOLINE_STDCALL(TRAMP,FUN,CTX,SIZE) \ -{ unsigned char *__tramp = (unsigned char*)(TRAMP); \ - unsigned int __fun = (unsigned int)(FUN); \ - unsigned int __ctx = (unsigned int)(CTX); \ - unsigned int __dis = __fun - (__ctx + 10); \ - unsigned short __size = (unsigned short)(SIZE); \ - *(unsigned char*) &__tramp[0] = 0xb8; \ - *(unsigned int*) &__tramp[1] = __ctx; /* movl __ctx, %eax */ \ - *(unsigned char *) &__tramp[5] = 0xe8; \ - *(unsigned int*) &__tramp[6] = __dis; /* call __fun */ \ - *(unsigned char *) &__tramp[10] = 0xc2; \ - *(unsigned short*) &__tramp[11] = __size; /* ret __size */ \ - } - -/* the cif must already be prep'ed */ - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data, - void *codeloc) -{ -#ifdef X86_WIN64 -#define ISFLOAT(IDX) (cif->arg_types[IDX]->type == FFI_TYPE_FLOAT || cif->arg_types[IDX]->type == FFI_TYPE_DOUBLE) -#define FLAG(IDX) (cif->nargs>(IDX)&&ISFLOAT(IDX)?(1<<(IDX)):0) - if (cif->abi == FFI_WIN64) - { - int mask = FLAG(0)|FLAG(1)|FLAG(2)|FLAG(3); - FFI_INIT_TRAMPOLINE_WIN64 (&closure->tramp[0], - &ffi_closure_win64, - codeloc, mask); - /* make sure we can execute here */ - } -#else - if (cif->abi == FFI_SYSV) - { - FFI_INIT_TRAMPOLINE (&closure->tramp[0], - &ffi_closure_SYSV, - (void*)codeloc); - } -#ifdef X86_WIN32 - else if (cif->abi == FFI_STDCALL) - { - FFI_INIT_TRAMPOLINE_STDCALL (&closure->tramp[0], - &ffi_closure_STDCALL, - (void*)codeloc, cif->bytes); - } -#endif /* X86_WIN32 */ -#endif /* !X86_WIN64 */ - else - { - return FFI_BAD_ABI; - } - - closure->cif = cif; - closure->user_data = user_data; - closure->fun = fun; - - return FFI_OK; -} - -/* ------- Native raw API support -------------------------------- */ - -#if !FFI_NO_RAW_API - -ffi_status -ffi_prep_raw_closure_loc (ffi_raw_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*,void*,ffi_raw*,void*), - void *user_data, - void *codeloc) -{ - int i; - - if (cif->abi != FFI_SYSV) { - return FFI_BAD_ABI; - } - - /* we currently don't support certain kinds of arguments for raw - closures. This should be implemented by a separate assembly - language routine, since it would require argument processing, - something we don't do now for performance. */ - - for (i = cif->nargs-1; i >= 0; i--) - { - FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_STRUCT); - FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_LONGDOUBLE); - } - - - FFI_INIT_TRAMPOLINE (&closure->tramp[0], &ffi_closure_raw_SYSV, - codeloc); - - closure->cif = cif; - closure->user_data = user_data; - closure->fun = fun; - - return FFI_OK; -} - -static void -ffi_prep_args_raw(char *stack, extended_cif *ecif) -{ - memcpy (stack, ecif->avalue, ecif->cif->bytes); -} - -/* we borrow this routine from libffi (it must be changed, though, to - * actually call the function passed in the first argument. as of - * libffi-1.20, this is not the case.) - */ - -void -ffi_raw_call(ffi_cif *cif, void (*fn)(void), void *rvalue, ffi_raw *fake_avalue) -{ - extended_cif ecif; - void **avalue = (void **)fake_avalue; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have a return */ - /* value address then we need to make one */ - - if ((rvalue == NULL) && - (cif->rtype->type == FFI_TYPE_STRUCT)) - { - ecif.rvalue = alloca(cif->rtype->size); - } - else - ecif.rvalue = rvalue; - - - switch (cif->abi) - { -#ifdef X86_WIN32 - case FFI_SYSV: - case FFI_STDCALL: - ffi_call_win32(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, - ecif.rvalue, fn); - break; -#else - case FFI_SYSV: - ffi_call_SYSV(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, - ecif.rvalue, fn); - break; -#endif - default: - FFI_ASSERT(0); - break; - } -} - -#endif - -#endif /* !__x86_64__ || X86_WIN64 */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/ffi64.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/ffi64.c deleted file mode 100644 index c8eb455..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/ffi64.c +++ /dev/null @@ -1,635 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi64.c - Copyright (c) 20011 Anthony Green - Copyright (c) 2008, 2010 Red Hat, Inc. - Copyright (c) 2002, 2007 Bo Thorsen - - x86-64 Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#include -#include - -#include -#include - -#ifdef __x86_64__ - -#define MAX_GPR_REGS 6 -#define MAX_SSE_REGS 8 - -struct register_args -{ - /* Registers for argument passing. */ - UINT64 gpr[MAX_GPR_REGS]; - __int128_t sse[MAX_SSE_REGS]; -}; - -extern void ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, - void *raddr, void (*fnaddr)(void), unsigned ssecount); - -/* All reference to register classes here is identical to the code in - gcc/config/i386/i386.c. Do *not* change one without the other. */ - -/* Register class used for passing given 64bit part of the argument. - These represent classes as documented by the PS ABI, with the - exception of SSESF, SSEDF classes, that are basically SSE class, - just gcc will use SF or DFmode move instead of DImode to avoid - reformatting penalties. - - Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves - whenever possible (upper half does contain padding). */ -enum x86_64_reg_class - { - X86_64_NO_CLASS, - X86_64_INTEGER_CLASS, - X86_64_INTEGERSI_CLASS, - X86_64_SSE_CLASS, - X86_64_SSESF_CLASS, - X86_64_SSEDF_CLASS, - X86_64_SSEUP_CLASS, - X86_64_X87_CLASS, - X86_64_X87UP_CLASS, - X86_64_COMPLEX_X87_CLASS, - X86_64_MEMORY_CLASS - }; - -#define MAX_CLASSES 4 - -#define SSE_CLASS_P(X) ((X) >= X86_64_SSE_CLASS && X <= X86_64_SSEUP_CLASS) - -/* x86-64 register passing implementation. See x86-64 ABI for details. Goal - of this code is to classify each 8bytes of incoming argument by the register - class and assign registers accordingly. */ - -/* Return the union class of CLASS1 and CLASS2. - See the x86-64 PS ABI for details. */ - -static enum x86_64_reg_class -merge_classes (enum x86_64_reg_class class1, enum x86_64_reg_class class2) -{ - /* Rule #1: If both classes are equal, this is the resulting class. */ - if (class1 == class2) - return class1; - - /* Rule #2: If one of the classes is NO_CLASS, the resulting class is - the other class. */ - if (class1 == X86_64_NO_CLASS) - return class2; - if (class2 == X86_64_NO_CLASS) - return class1; - - /* Rule #3: If one of the classes is MEMORY, the result is MEMORY. */ - if (class1 == X86_64_MEMORY_CLASS || class2 == X86_64_MEMORY_CLASS) - return X86_64_MEMORY_CLASS; - - /* Rule #4: If one of the classes is INTEGER, the result is INTEGER. */ - if ((class1 == X86_64_INTEGERSI_CLASS && class2 == X86_64_SSESF_CLASS) - || (class2 == X86_64_INTEGERSI_CLASS && class1 == X86_64_SSESF_CLASS)) - return X86_64_INTEGERSI_CLASS; - if (class1 == X86_64_INTEGER_CLASS || class1 == X86_64_INTEGERSI_CLASS - || class2 == X86_64_INTEGER_CLASS || class2 == X86_64_INTEGERSI_CLASS) - return X86_64_INTEGER_CLASS; - - /* Rule #5: If one of the classes is X87, X87UP, or COMPLEX_X87 class, - MEMORY is used. */ - if (class1 == X86_64_X87_CLASS - || class1 == X86_64_X87UP_CLASS - || class1 == X86_64_COMPLEX_X87_CLASS - || class2 == X86_64_X87_CLASS - || class2 == X86_64_X87UP_CLASS - || class2 == X86_64_COMPLEX_X87_CLASS) - return X86_64_MEMORY_CLASS; - - /* Rule #6: Otherwise class SSE is used. */ - return X86_64_SSE_CLASS; -} - -/* Classify the argument of type TYPE and mode MODE. - CLASSES will be filled by the register class used to pass each word - of the operand. The number of words is returned. In case the parameter - should be passed in memory, 0 is returned. As a special case for zero - sized containers, classes[0] will be NO_CLASS and 1 is returned. - - See the x86-64 PS ABI for details. -*/ -static int -classify_argument (ffi_type *type, enum x86_64_reg_class classes[], - size_t byte_offset) -{ - switch (type->type) - { - case FFI_TYPE_UINT8: - case FFI_TYPE_SINT8: - case FFI_TYPE_UINT16: - case FFI_TYPE_SINT16: - case FFI_TYPE_UINT32: - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: - case FFI_TYPE_POINTER: - { - int size = byte_offset + type->size; - - if (size <= 4) - { - classes[0] = X86_64_INTEGERSI_CLASS; - return 1; - } - else if (size <= 8) - { - classes[0] = X86_64_INTEGER_CLASS; - return 1; - } - else if (size <= 12) - { - classes[0] = X86_64_INTEGER_CLASS; - classes[1] = X86_64_INTEGERSI_CLASS; - return 2; - } - else if (size <= 16) - { - classes[0] = classes[1] = X86_64_INTEGERSI_CLASS; - return 2; - } - else - FFI_ASSERT (0); - } - case FFI_TYPE_FLOAT: - if (!(byte_offset % 8)) - classes[0] = X86_64_SSESF_CLASS; - else - classes[0] = X86_64_SSE_CLASS; - return 1; - case FFI_TYPE_DOUBLE: - classes[0] = X86_64_SSEDF_CLASS; - return 1; - case FFI_TYPE_LONGDOUBLE: - classes[0] = X86_64_X87_CLASS; - classes[1] = X86_64_X87UP_CLASS; - return 2; - case FFI_TYPE_STRUCT: - { - const int UNITS_PER_WORD = 8; - int words = (type->size + UNITS_PER_WORD - 1) / UNITS_PER_WORD; - ffi_type **ptr; - int i; - enum x86_64_reg_class subclasses[MAX_CLASSES]; - - /* If the struct is larger than 32 bytes, pass it on the stack. */ - if (type->size > 32) - return 0; - - for (i = 0; i < words; i++) - classes[i] = X86_64_NO_CLASS; - - /* Zero sized arrays or structures are NO_CLASS. We return 0 to - signalize memory class, so handle it as special case. */ - if (!words) - { - classes[0] = X86_64_NO_CLASS; - return 1; - } - - /* Merge the fields of structure. */ - for (ptr = type->elements; *ptr != NULL; ptr++) - { - int num; - - byte_offset = ALIGN (byte_offset, (*ptr)->alignment); - - num = classify_argument (*ptr, subclasses, byte_offset % 8); - if (num == 0) - return 0; - for (i = 0; i < num; i++) - { - int pos = byte_offset / 8; - classes[i + pos] = - merge_classes (subclasses[i], classes[i + pos]); - } - - byte_offset += (*ptr)->size; - } - - if (words > 2) - { - /* When size > 16 bytes, if the first one isn't - X86_64_SSE_CLASS or any other ones aren't - X86_64_SSEUP_CLASS, everything should be passed in - memory. */ - if (classes[0] != X86_64_SSE_CLASS) - return 0; - - for (i = 1; i < words; i++) - if (classes[i] != X86_64_SSEUP_CLASS) - return 0; - } - - /* Final merger cleanup. */ - for (i = 0; i < words; i++) - { - /* If one class is MEMORY, everything should be passed in - memory. */ - if (classes[i] == X86_64_MEMORY_CLASS) - return 0; - - /* The X86_64_SSEUP_CLASS should be always preceded by - X86_64_SSE_CLASS or X86_64_SSEUP_CLASS. */ - if (classes[i] == X86_64_SSEUP_CLASS - && classes[i - 1] != X86_64_SSE_CLASS - && classes[i - 1] != X86_64_SSEUP_CLASS) - { - /* The first one should never be X86_64_SSEUP_CLASS. */ - FFI_ASSERT (i != 0); - classes[i] = X86_64_SSE_CLASS; - } - - /* If X86_64_X87UP_CLASS isn't preceded by X86_64_X87_CLASS, - everything should be passed in memory. */ - if (classes[i] == X86_64_X87UP_CLASS - && (classes[i - 1] != X86_64_X87_CLASS)) - { - /* The first one should never be X86_64_X87UP_CLASS. */ - FFI_ASSERT (i != 0); - return 0; - } - } - return words; - } - - default: - FFI_ASSERT(0); - } - return 0; /* Never reached. */ -} - -/* Examine the argument and return set number of register required in each - class. Return zero iff parameter should be passed in memory, otherwise - the number of registers. */ - -static int -examine_argument (ffi_type *type, enum x86_64_reg_class classes[MAX_CLASSES], - _Bool in_return, int *pngpr, int *pnsse) -{ - int i, n, ngpr, nsse; - - n = classify_argument (type, classes, 0); - if (n == 0) - return 0; - - ngpr = nsse = 0; - for (i = 0; i < n; ++i) - switch (classes[i]) - { - case X86_64_INTEGER_CLASS: - case X86_64_INTEGERSI_CLASS: - ngpr++; - break; - case X86_64_SSE_CLASS: - case X86_64_SSESF_CLASS: - case X86_64_SSEDF_CLASS: - nsse++; - break; - case X86_64_NO_CLASS: - case X86_64_SSEUP_CLASS: - break; - case X86_64_X87_CLASS: - case X86_64_X87UP_CLASS: - case X86_64_COMPLEX_X87_CLASS: - return in_return != 0; - default: - abort (); - } - - *pngpr = ngpr; - *pnsse = nsse; - - return n; -} - -/* Perform machine dependent cif processing. */ - -ffi_status -ffi_prep_cif_machdep (ffi_cif *cif) -{ - int gprcount, ssecount, i, avn, n, ngpr, nsse, flags; - enum x86_64_reg_class classes[MAX_CLASSES]; - size_t bytes; - - gprcount = ssecount = 0; - - flags = cif->rtype->type; - if (flags != FFI_TYPE_VOID) - { - n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); - if (n == 0) - { - /* The return value is passed in memory. A pointer to that - memory is the first argument. Allocate a register for it. */ - gprcount++; - /* We don't have to do anything in asm for the return. */ - flags = FFI_TYPE_VOID; - } - else if (flags == FFI_TYPE_STRUCT) - { - /* Mark which registers the result appears in. */ - _Bool sse0 = SSE_CLASS_P (classes[0]); - _Bool sse1 = n == 2 && SSE_CLASS_P (classes[1]); - if (sse0 && !sse1) - flags |= 1 << 8; - else if (!sse0 && sse1) - flags |= 1 << 9; - else if (sse0 && sse1) - flags |= 1 << 10; - /* Mark the true size of the structure. */ - flags |= cif->rtype->size << 12; - } - } - - /* Go over all arguments and determine the way they should be passed. - If it's in a register and there is space for it, let that be so. If - not, add it's size to the stack byte count. */ - for (bytes = 0, i = 0, avn = cif->nargs; i < avn; i++) - { - if (examine_argument (cif->arg_types[i], classes, 0, &ngpr, &nsse) == 0 - || gprcount + ngpr > MAX_GPR_REGS - || ssecount + nsse > MAX_SSE_REGS) - { - long align = cif->arg_types[i]->alignment; - - if (align < 8) - align = 8; - - bytes = ALIGN (bytes, align); - bytes += cif->arg_types[i]->size; - } - else - { - gprcount += ngpr; - ssecount += nsse; - } - } - if (ssecount) - flags |= 1 << 11; - cif->flags = flags; - cif->bytes = ALIGN (bytes, 8); - - return FFI_OK; -} - -void -ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -{ - enum x86_64_reg_class classes[MAX_CLASSES]; - char *stack, *argp; - ffi_type **arg_types; - int gprcount, ssecount, ngpr, nsse, i, avn; - _Bool ret_in_memory; - struct register_args *reg_args; - - /* Can't call 32-bit mode from 64-bit mode. */ - FFI_ASSERT (cif->abi == FFI_UNIX64); - - /* If the return value is a struct and we don't have a return value - address then we need to make one. Note the setting of flags to - VOID above in ffi_prep_cif_machdep. */ - ret_in_memory = (cif->rtype->type == FFI_TYPE_STRUCT - && (cif->flags & 0xff) == FFI_TYPE_VOID); - if (rvalue == NULL && ret_in_memory) - rvalue = alloca (cif->rtype->size); - - /* Allocate the space for the arguments, plus 4 words of temp space. */ - stack = alloca (sizeof (struct register_args) + cif->bytes + 4*8); - reg_args = (struct register_args *) stack; - argp = stack + sizeof (struct register_args); - - gprcount = ssecount = 0; - - /* If the return value is passed in memory, add the pointer as the - first integer argument. */ - if (ret_in_memory) - reg_args->gpr[gprcount++] = (long) rvalue; - - avn = cif->nargs; - arg_types = cif->arg_types; - - for (i = 0; i < avn; ++i) - { - size_t size = arg_types[i]->size; - int n; - - n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); - if (n == 0 - || gprcount + ngpr > MAX_GPR_REGS - || ssecount + nsse > MAX_SSE_REGS) - { - long align = arg_types[i]->alignment; - - /* Stack arguments are *always* at least 8 byte aligned. */ - if (align < 8) - align = 8; - - /* Pass this argument in memory. */ - argp = (void *) ALIGN (argp, align); - memcpy (argp, avalue[i], size); - argp += size; - } - else - { - /* The argument is passed entirely in registers. */ - char *a = (char *) avalue[i]; - int j; - - for (j = 0; j < n; j++, a += 8, size -= 8) - { - switch (classes[j]) - { - case X86_64_INTEGER_CLASS: - case X86_64_INTEGERSI_CLASS: - reg_args->gpr[gprcount] = 0; - memcpy (®_args->gpr[gprcount], a, size < 8 ? size : 8); - gprcount++; - break; - case X86_64_SSE_CLASS: - case X86_64_SSEDF_CLASS: - reg_args->sse[ssecount++] = *(UINT64 *) a; - break; - case X86_64_SSESF_CLASS: - reg_args->sse[ssecount++] = *(UINT32 *) a; - break; - default: - abort(); - } - } - } - } - - ffi_call_unix64 (stack, cif->bytes + sizeof (struct register_args), - cif->flags, rvalue, fn, ssecount); -} - - -extern void ffi_closure_unix64(void); - -ffi_status -ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*, void*, void**, void*), - void *user_data, - void *codeloc) -{ - volatile unsigned short *tramp; - - /* Sanity check on the cif ABI. */ - { - int abi = cif->abi; - if (UNLIKELY (! (abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI))) - return FFI_BAD_ABI; - } - - tramp = (volatile unsigned short *) &closure->tramp[0]; - - tramp[0] = 0xbb49; /* mov , %r11 */ - *(void * volatile *) &tramp[1] = ffi_closure_unix64; - tramp[5] = 0xba49; /* mov , %r10 */ - *(void * volatile *) &tramp[6] = codeloc; - - /* Set the carry bit iff the function uses any sse registers. - This is clc or stc, together with the first byte of the jmp. */ - tramp[10] = cif->flags & (1 << 11) ? 0x49f9 : 0x49f8; - - tramp[11] = 0xe3ff; /* jmp *%r11 */ - - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - - return FFI_OK; -} - -int -ffi_closure_unix64_inner(ffi_closure *closure, void *rvalue, - struct register_args *reg_args, char *argp) -{ - ffi_cif *cif; - void **avalue; - ffi_type **arg_types; - long i, avn; - int gprcount, ssecount, ngpr, nsse; - int ret; - - cif = closure->cif; - avalue = alloca(cif->nargs * sizeof(void *)); - gprcount = ssecount = 0; - - ret = cif->rtype->type; - if (ret != FFI_TYPE_VOID) - { - enum x86_64_reg_class classes[MAX_CLASSES]; - int n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); - if (n == 0) - { - /* The return value goes in memory. Arrange for the closure - return value to go directly back to the original caller. */ - rvalue = (void *) reg_args->gpr[gprcount++]; - /* We don't have to do anything in asm for the return. */ - ret = FFI_TYPE_VOID; - } - else if (ret == FFI_TYPE_STRUCT && n == 2) - { - /* Mark which register the second word of the structure goes in. */ - _Bool sse0 = SSE_CLASS_P (classes[0]); - _Bool sse1 = SSE_CLASS_P (classes[1]); - if (!sse0 && sse1) - ret |= 1 << 8; - else if (sse0 && !sse1) - ret |= 1 << 9; - } - } - - avn = cif->nargs; - arg_types = cif->arg_types; - - for (i = 0; i < avn; ++i) - { - enum x86_64_reg_class classes[MAX_CLASSES]; - int n; - - n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); - if (n == 0 - || gprcount + ngpr > MAX_GPR_REGS - || ssecount + nsse > MAX_SSE_REGS) - { - long align = arg_types[i]->alignment; - - /* Stack arguments are *always* at least 8 byte aligned. */ - if (align < 8) - align = 8; - - /* Pass this argument in memory. */ - argp = (void *) ALIGN (argp, align); - avalue[i] = argp; - argp += arg_types[i]->size; - } - /* If the argument is in a single register, or two consecutive - integer registers, then we can use that address directly. */ - else if (n == 1 - || (n == 2 && !(SSE_CLASS_P (classes[0]) - || SSE_CLASS_P (classes[1])))) - { - /* The argument is in a single register. */ - if (SSE_CLASS_P (classes[0])) - { - avalue[i] = ®_args->sse[ssecount]; - ssecount += n; - } - else - { - avalue[i] = ®_args->gpr[gprcount]; - gprcount += n; - } - } - /* Otherwise, allocate space to make them consecutive. */ - else - { - char *a = alloca (16); - int j; - - avalue[i] = a; - for (j = 0; j < n; j++, a += 8) - { - if (SSE_CLASS_P (classes[j])) - memcpy (a, ®_args->sse[ssecount++], 8); - else - memcpy (a, ®_args->gpr[gprcount++], 8); - } - } - } - - /* Invoke the closure. */ - closure->fun (cif, rvalue, avalue, closure->user_data); - - /* Tell assembly how to perform return type promotions. */ - return ret; -} - -#endif /* __x86_64__ */ diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/ffitarget.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/ffitarget.h deleted file mode 100644 index 542e6d4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/ffitarget.h +++ /dev/null @@ -1,121 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003, 2010 Red Hat, Inc. - Copyright (C) 2008 Free Software Foundation, Inc. - - Target configuration macros for x86 and x86-64. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - - ----------------------------------------------------------------------- */ - -#ifndef LIBFFI_TARGET_H -#define LIBFFI_TARGET_H - -/* ---- System specific configurations ----------------------------------- */ - -/* For code common to all platforms on x86 and x86_64. */ -#define X86_ANY - -#if defined (X86_64) && defined (__i386__) -#undef X86_64 -#define X86 -#endif - -#ifdef X86_WIN64 -#define FFI_SIZEOF_ARG 8 -#define USE_BUILTIN_FFS 0 /* not yet implemented in mingw-64 */ -#endif - -/* ---- Generic type definitions ----------------------------------------- */ - -#ifndef LIBFFI_ASM -#ifdef X86_WIN64 -#ifdef _MSC_VER -typedef unsigned __int64 ffi_arg; -typedef __int64 ffi_sarg; -#else -typedef unsigned long long ffi_arg; -typedef long long ffi_sarg; -#endif -#else -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; -#endif - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - - /* ---- Intel x86 Win32 ---------- */ -#ifdef X86_WIN32 - FFI_SYSV, - FFI_STDCALL, - FFI_LAST_ABI, - /* TODO: Add fastcall support for the sake of completeness */ - FFI_DEFAULT_ABI = FFI_SYSV - -#elif defined(X86_WIN64) - FFI_WIN64, - FFI_LAST_ABI, - FFI_DEFAULT_ABI = FFI_WIN64 - -#else - /* ---- Intel x86 and AMD x86-64 - */ - FFI_SYSV, - FFI_UNIX64, /* Unix variants all use the same ABI for x86-64 */ - FFI_LAST_ABI, -#if defined(__i386__) || defined(__i386) - FFI_DEFAULT_ABI = FFI_SYSV -#else - FFI_DEFAULT_ABI = FFI_UNIX64 -#endif -#endif -} ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 -#define FFI_TYPE_SMALL_STRUCT_1B (FFI_TYPE_LAST + 1) -#define FFI_TYPE_SMALL_STRUCT_2B (FFI_TYPE_LAST + 2) -#define FFI_TYPE_SMALL_STRUCT_4B (FFI_TYPE_LAST + 3) - -#if defined (X86_64) || (defined (__x86_64__) && defined (X86_DARWIN)) -#define FFI_TRAMPOLINE_SIZE 24 -#define FFI_NATIVE_RAW_API 0 -#else -#ifdef X86_WIN32 -#define FFI_TRAMPOLINE_SIZE 13 -#else -#ifdef X86_WIN64 -#define FFI_TRAMPOLINE_SIZE 29 -#define FFI_NATIVE_RAW_API 0 -#define FFI_NO_RAW_API 1 -#else -#define FFI_TRAMPOLINE_SIZE 10 -#endif -#endif -#ifndef X86_WIN64 -#define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ -#endif -#endif - -#endif - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/freebsd.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/freebsd.S deleted file mode 100644 index afde513..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/freebsd.S +++ /dev/null @@ -1,458 +0,0 @@ -/* ----------------------------------------------------------------------- - freebsd.S - Copyright (c) 1996, 1998, 2001, 2002, 2003, 2005 Red Hat, Inc. - Copyright (c) 2008 Björn König - - X86 Foreign Function Interface for FreeBSD - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------ */ - -#ifndef __x86_64__ - -#define LIBFFI_ASM -#include -#include - -.text - -.globl ffi_prep_args - - .align 4 -.globl ffi_call_SYSV - .type ffi_call_SYSV,@function - -ffi_call_SYSV: -.LFB1: - pushl %ebp -.LCFI0: - movl %esp,%ebp -.LCFI1: - /* Make room for all of the new args. */ - movl 16(%ebp),%ecx - subl %ecx,%esp - - movl %esp,%eax - - /* Place all of the ffi_prep_args in position */ - pushl 12(%ebp) - pushl %eax - call *8(%ebp) - - /* Return stack to previous state and call the function */ - addl $8,%esp - - call *28(%ebp) - - /* Load %ecx with the return type code */ - movl 20(%ebp),%ecx - - /* Protect %esi. We're going to pop it in the epilogue. */ - pushl %esi - - /* If the return value pointer is NULL, assume no return value. */ - cmpl $0,24(%ebp) - jne 0f - - /* Even if there is no space for the return value, we are - obliged to handle floating-point values. */ - cmpl $FFI_TYPE_FLOAT,%ecx - jne noretval - fstp %st(0) - - jmp epilogue - -0: - call 1f - -.Lstore_table: - .long noretval-.Lstore_table /* FFI_TYPE_VOID */ - .long retint-.Lstore_table /* FFI_TYPE_INT */ - .long retfloat-.Lstore_table /* FFI_TYPE_FLOAT */ - .long retdouble-.Lstore_table /* FFI_TYPE_DOUBLE */ - .long retlongdouble-.Lstore_table /* FFI_TYPE_LONGDOUBLE */ - .long retuint8-.Lstore_table /* FFI_TYPE_UINT8 */ - .long retsint8-.Lstore_table /* FFI_TYPE_SINT8 */ - .long retuint16-.Lstore_table /* FFI_TYPE_UINT16 */ - .long retsint16-.Lstore_table /* FFI_TYPE_SINT16 */ - .long retint-.Lstore_table /* FFI_TYPE_UINT32 */ - .long retint-.Lstore_table /* FFI_TYPE_SINT32 */ - .long retint64-.Lstore_table /* FFI_TYPE_UINT64 */ - .long retint64-.Lstore_table /* FFI_TYPE_SINT64 */ - .long retstruct-.Lstore_table /* FFI_TYPE_STRUCT */ - .long retint-.Lstore_table /* FFI_TYPE_POINTER */ - .long retstruct1b-.Lstore_table /* FFI_TYPE_SMALL_STRUCT_1B */ - .long retstruct2b-.Lstore_table /* FFI_TYPE_SMALL_STRUCT_2B */ - -1: - pop %esi - add (%esi, %ecx, 4), %esi - jmp *%esi - - /* Sign/zero extend as appropriate. */ -retsint8: - movsbl %al, %eax - jmp retint - -retsint16: - movswl %ax, %eax - jmp retint - -retuint8: - movzbl %al, %eax - jmp retint - -retuint16: - movzwl %ax, %eax - jmp retint - -retfloat: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - fstps (%ecx) - jmp epilogue - -retdouble: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - fstpl (%ecx) - jmp epilogue - -retlongdouble: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - fstpt (%ecx) - jmp epilogue - -retint64: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - movl %eax,0(%ecx) - movl %edx,4(%ecx) - jmp epilogue - -retstruct1b: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - movb %al,0(%ecx) - jmp epilogue - -retstruct2b: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - movw %ax,0(%ecx) - jmp epilogue - -retint: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - movl %eax,0(%ecx) - -retstruct: - /* Nothing to do! */ - -noretval: -epilogue: - popl %esi - movl %ebp,%esp - popl %ebp - ret -.LFE1: -.ffi_call_SYSV_end: - .size ffi_call_SYSV,.ffi_call_SYSV_end-ffi_call_SYSV - - .align 4 -FFI_HIDDEN (ffi_closure_SYSV) -.globl ffi_closure_SYSV - .type ffi_closure_SYSV, @function - -ffi_closure_SYSV: -.LFB2: - pushl %ebp -.LCFI2: - movl %esp, %ebp -.LCFI3: - subl $40, %esp - leal -24(%ebp), %edx - movl %edx, -12(%ebp) /* resp */ - leal 8(%ebp), %edx - movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */ - leal -12(%ebp), %edx - movl %edx, (%esp) /* &resp */ -#if defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE || !defined __PIC__ - call ffi_closure_SYSV_inner -#else - movl %ebx, 8(%esp) -.LCFI7: - call 1f -1: popl %ebx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx - call ffi_closure_SYSV_inner@PLT - movl 8(%esp), %ebx -#endif - movl -12(%ebp), %ecx - cmpl $FFI_TYPE_INT, %eax - je .Lcls_retint - - /* Handle FFI_TYPE_UINT8, FFI_TYPE_SINT8, FFI_TYPE_UINT16, - FFI_TYPE_SINT16, FFI_TYPE_UINT32, FFI_TYPE_SINT32. */ - cmpl $FFI_TYPE_UINT64, %eax - jge 0f - cmpl $FFI_TYPE_UINT8, %eax - jge .Lcls_retint - -0: cmpl $FFI_TYPE_FLOAT, %eax - je .Lcls_retfloat - cmpl $FFI_TYPE_DOUBLE, %eax - je .Lcls_retdouble - cmpl $FFI_TYPE_LONGDOUBLE, %eax - je .Lcls_retldouble - cmpl $FFI_TYPE_SINT64, %eax - je .Lcls_retllong - cmpl $FFI_TYPE_SMALL_STRUCT_1B, %eax - je .Lcls_retstruct1b - cmpl $FFI_TYPE_SMALL_STRUCT_2B, %eax - je .Lcls_retstruct2b - cmpl $FFI_TYPE_STRUCT, %eax - je .Lcls_retstruct -.Lcls_epilogue: - movl %ebp, %esp - popl %ebp - ret -.Lcls_retint: - movl (%ecx), %eax - jmp .Lcls_epilogue -.Lcls_retfloat: - flds (%ecx) - jmp .Lcls_epilogue -.Lcls_retdouble: - fldl (%ecx) - jmp .Lcls_epilogue -.Lcls_retldouble: - fldt (%ecx) - jmp .Lcls_epilogue -.Lcls_retllong: - movl (%ecx), %eax - movl 4(%ecx), %edx - jmp .Lcls_epilogue -.Lcls_retstruct1b: - movsbl (%ecx), %eax - jmp .Lcls_epilogue -.Lcls_retstruct2b: - movswl (%ecx), %eax - jmp .Lcls_epilogue -.Lcls_retstruct: - movl %ebp, %esp - popl %ebp - ret $4 -.LFE2: - .size ffi_closure_SYSV, .-ffi_closure_SYSV - -#if !FFI_NO_RAW_API - -#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) -#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) -#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) -#define CIF_FLAGS_OFFSET 20 - - .align 4 -FFI_HIDDEN (ffi_closure_raw_SYSV) -.globl ffi_closure_raw_SYSV - .type ffi_closure_raw_SYSV, @function - -ffi_closure_raw_SYSV: -.LFB3: - pushl %ebp -.LCFI4: - movl %esp, %ebp -.LCFI5: - pushl %esi -.LCFI6: - subl $36, %esp - movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ - movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ - movl %edx, 12(%esp) /* user_data */ - leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */ - movl %edx, 8(%esp) /* raw_args */ - leal -24(%ebp), %edx - movl %edx, 4(%esp) /* &res */ - movl %esi, (%esp) /* cif */ - call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */ - movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */ - cmpl $FFI_TYPE_INT, %eax - je .Lrcls_retint - - /* Handle FFI_TYPE_UINT8, FFI_TYPE_SINT8, FFI_TYPE_UINT16, - FFI_TYPE_SINT16, FFI_TYPE_UINT32, FFI_TYPE_SINT32. */ - cmpl $FFI_TYPE_UINT64, %eax - jge 0f - cmpl $FFI_TYPE_UINT8, %eax - jge .Lrcls_retint -0: - cmpl $FFI_TYPE_FLOAT, %eax - je .Lrcls_retfloat - cmpl $FFI_TYPE_DOUBLE, %eax - je .Lrcls_retdouble - cmpl $FFI_TYPE_LONGDOUBLE, %eax - je .Lrcls_retldouble - cmpl $FFI_TYPE_SINT64, %eax - je .Lrcls_retllong -.Lrcls_epilogue: - addl $36, %esp - popl %esi - popl %ebp - ret -.Lrcls_retint: - movl -24(%ebp), %eax - jmp .Lrcls_epilogue -.Lrcls_retfloat: - flds -24(%ebp) - jmp .Lrcls_epilogue -.Lrcls_retdouble: - fldl -24(%ebp) - jmp .Lrcls_epilogue -.Lrcls_retldouble: - fldt -24(%ebp) - jmp .Lrcls_epilogue -.Lrcls_retllong: - movl -24(%ebp), %eax - movl -20(%ebp), %edx - jmp .Lrcls_epilogue -.LFE3: - .size ffi_closure_raw_SYSV, .-ffi_closure_raw_SYSV -#endif - - .section .eh_frame,EH_FRAME_FLAGS,@progbits -.Lframe1: - .long .LECIE1-.LSCIE1 /* Length of Common Information Entry */ -.LSCIE1: - .long 0x0 /* CIE Identifier Tag */ - .byte 0x1 /* CIE Version */ -#ifdef __PIC__ - .ascii "zR\0" /* CIE Augmentation */ -#else - .ascii "\0" /* CIE Augmentation */ -#endif - .byte 0x1 /* .uleb128 0x1; CIE Code Alignment Factor */ - .byte 0x7c /* .sleb128 -4; CIE Data Alignment Factor */ - .byte 0x8 /* CIE RA Column */ -#ifdef __PIC__ - .byte 0x1 /* .uleb128 0x1; Augmentation size */ - .byte 0x1b /* FDE Encoding (pcrel sdata4) */ -#endif - .byte 0xc /* DW_CFA_def_cfa */ - .byte 0x4 /* .uleb128 0x4 */ - .byte 0x4 /* .uleb128 0x4 */ - .byte 0x88 /* DW_CFA_offset, column 0x8 */ - .byte 0x1 /* .uleb128 0x1 */ - .align 4 -.LECIE1: -.LSFDE1: - .long .LEFDE1-.LASFDE1 /* FDE Length */ -.LASFDE1: - .long .LASFDE1-.Lframe1 /* FDE CIE offset */ -#ifdef __PIC__ - .long .LFB1-. /* FDE initial location */ -#else - .long .LFB1 /* FDE initial location */ -#endif - .long .LFE1-.LFB1 /* FDE address range */ -#ifdef __PIC__ - .byte 0x0 /* .uleb128 0x0; Augmentation size */ -#endif - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI0-.LFB1 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x8 /* .uleb128 0x8 */ - .byte 0x85 /* DW_CFA_offset, column 0x5 */ - .byte 0x2 /* .uleb128 0x2 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI1-.LCFI0 - .byte 0xd /* DW_CFA_def_cfa_register */ - .byte 0x5 /* .uleb128 0x5 */ - .align 4 -.LEFDE1: -.LSFDE2: - .long .LEFDE2-.LASFDE2 /* FDE Length */ -.LASFDE2: - .long .LASFDE2-.Lframe1 /* FDE CIE offset */ -#ifdef __PIC__ - .long .LFB2-. /* FDE initial location */ -#else - .long .LFB2 -#endif - .long .LFE2-.LFB2 /* FDE address range */ -#ifdef __PIC__ - .byte 0x0 /* .uleb128 0x0; Augmentation size */ -#endif - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI2-.LFB2 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x8 /* .uleb128 0x8 */ - .byte 0x85 /* DW_CFA_offset, column 0x5 */ - .byte 0x2 /* .uleb128 0x2 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI3-.LCFI2 - .byte 0xd /* DW_CFA_def_cfa_register */ - .byte 0x5 /* .uleb128 0x5 */ -#if !defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE && defined __PIC__ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI7-.LCFI3 - .byte 0x83 /* DW_CFA_offset, column 0x3 */ - .byte 0xa /* .uleb128 0xa */ -#endif - .align 4 -.LEFDE2: - -#if !FFI_NO_RAW_API - -.LSFDE3: - .long .LEFDE3-.LASFDE3 /* FDE Length */ -.LASFDE3: - .long .LASFDE3-.Lframe1 /* FDE CIE offset */ -#ifdef __PIC__ - .long .LFB3-. /* FDE initial location */ -#else - .long .LFB3 -#endif - .long .LFE3-.LFB3 /* FDE address range */ -#ifdef __PIC__ - .byte 0x0 /* .uleb128 0x0; Augmentation size */ -#endif - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI4-.LFB3 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x8 /* .uleb128 0x8 */ - .byte 0x85 /* DW_CFA_offset, column 0x5 */ - .byte 0x2 /* .uleb128 0x2 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI5-.LCFI4 - .byte 0xd /* DW_CFA_def_cfa_register */ - .byte 0x5 /* .uleb128 0x5 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI6-.LCFI5 - .byte 0x86 /* DW_CFA_offset, column 0x6 */ - .byte 0x3 /* .uleb128 0x3 */ - .align 4 -.LEFDE3: - -#endif - -#endif /* ifndef __x86_64__ */ diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/sysv.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/sysv.S deleted file mode 100644 index f108dd8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/sysv.S +++ /dev/null @@ -1,468 +0,0 @@ -/* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 1996, 1998, 2001-2003, 2005, 2008, 2010 Red Hat, Inc. - - X86 Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#ifndef __x86_64__ - -#define LIBFFI_ASM -#include -#include - -.text - -.globl ffi_prep_args - - .align 4 -.globl ffi_call_SYSV - .type ffi_call_SYSV,@function - -ffi_call_SYSV: -.LFB1: - pushl %ebp -.LCFI0: - movl %esp,%ebp -.LCFI1: - /* Make room for all of the new args. */ - movl 16(%ebp),%ecx - subl %ecx,%esp - - /* Align the stack pointer to 16-bytes */ - andl $0xfffffff0, %esp - - movl %esp,%eax - - /* Place all of the ffi_prep_args in position */ - pushl 12(%ebp) - pushl %eax - call *8(%ebp) - - /* Return stack to previous state and call the function */ - addl $8,%esp - - call *28(%ebp) - - /* Load %ecx with the return type code */ - movl 20(%ebp),%ecx - - /* Protect %esi. We're going to pop it in the epilogue. */ - pushl %esi - - /* If the return value pointer is NULL, assume no return value. */ - cmpl $0,24(%ebp) - jne 0f - - /* Even if there is no space for the return value, we are - obliged to handle floating-point values. */ - cmpl $FFI_TYPE_FLOAT,%ecx - jne noretval - fstp %st(0) - - jmp epilogue - -0: - call 1f - -.Lstore_table: - .long noretval-.Lstore_table /* FFI_TYPE_VOID */ - .long retint-.Lstore_table /* FFI_TYPE_INT */ - .long retfloat-.Lstore_table /* FFI_TYPE_FLOAT */ - .long retdouble-.Lstore_table /* FFI_TYPE_DOUBLE */ - .long retlongdouble-.Lstore_table /* FFI_TYPE_LONGDOUBLE */ - .long retuint8-.Lstore_table /* FFI_TYPE_UINT8 */ - .long retsint8-.Lstore_table /* FFI_TYPE_SINT8 */ - .long retuint16-.Lstore_table /* FFI_TYPE_UINT16 */ - .long retsint16-.Lstore_table /* FFI_TYPE_SINT16 */ - .long retint-.Lstore_table /* FFI_TYPE_UINT32 */ - .long retint-.Lstore_table /* FFI_TYPE_SINT32 */ - .long retint64-.Lstore_table /* FFI_TYPE_UINT64 */ - .long retint64-.Lstore_table /* FFI_TYPE_SINT64 */ - .long retstruct-.Lstore_table /* FFI_TYPE_STRUCT */ - .long retint-.Lstore_table /* FFI_TYPE_POINTER */ - -1: - pop %esi - add (%esi, %ecx, 4), %esi - jmp *%esi - - /* Sign/zero extend as appropriate. */ -retsint8: - movsbl %al, %eax - jmp retint - -retsint16: - movswl %ax, %eax - jmp retint - -retuint8: - movzbl %al, %eax - jmp retint - -retuint16: - movzwl %ax, %eax - jmp retint - -retfloat: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - fstps (%ecx) - jmp epilogue - -retdouble: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - fstpl (%ecx) - jmp epilogue - -retlongdouble: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - fstpt (%ecx) - jmp epilogue - -retint64: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - movl %eax,0(%ecx) - movl %edx,4(%ecx) - jmp epilogue - -retint: - /* Load %ecx with the pointer to storage for the return value */ - movl 24(%ebp),%ecx - movl %eax,0(%ecx) - -retstruct: - /* Nothing to do! */ - -noretval: -epilogue: - popl %esi - movl %ebp,%esp - popl %ebp - ret -.LFE1: -.ffi_call_SYSV_end: - .size ffi_call_SYSV,.ffi_call_SYSV_end-ffi_call_SYSV - - .align 4 -FFI_HIDDEN (ffi_closure_SYSV) -.globl ffi_closure_SYSV - .type ffi_closure_SYSV, @function - -ffi_closure_SYSV: -.LFB2: - pushl %ebp -.LCFI2: - movl %esp, %ebp -.LCFI3: - subl $40, %esp - leal -24(%ebp), %edx - movl %edx, -12(%ebp) /* resp */ - leal 8(%ebp), %edx - movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */ - leal -12(%ebp), %edx - movl %edx, (%esp) /* &resp */ -#if defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE || !defined __PIC__ - call ffi_closure_SYSV_inner -#else - movl %ebx, 8(%esp) -.LCFI7: - call 1f -1: popl %ebx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx - call ffi_closure_SYSV_inner@PLT - movl 8(%esp), %ebx -#endif - movl -12(%ebp), %ecx - cmpl $FFI_TYPE_INT, %eax - je .Lcls_retint - - /* Handle FFI_TYPE_UINT8, FFI_TYPE_SINT8, FFI_TYPE_UINT16, - FFI_TYPE_SINT16, FFI_TYPE_UINT32, FFI_TYPE_SINT32. */ - cmpl $FFI_TYPE_UINT64, %eax - jge 0f - cmpl $FFI_TYPE_UINT8, %eax - jge .Lcls_retint - -0: cmpl $FFI_TYPE_FLOAT, %eax - je .Lcls_retfloat - cmpl $FFI_TYPE_DOUBLE, %eax - je .Lcls_retdouble - cmpl $FFI_TYPE_LONGDOUBLE, %eax - je .Lcls_retldouble - cmpl $FFI_TYPE_SINT64, %eax - je .Lcls_retllong - cmpl $FFI_TYPE_STRUCT, %eax - je .Lcls_retstruct -.Lcls_epilogue: - movl %ebp, %esp - popl %ebp - ret -.Lcls_retint: - movl (%ecx), %eax - jmp .Lcls_epilogue -.Lcls_retfloat: - flds (%ecx) - jmp .Lcls_epilogue -.Lcls_retdouble: - fldl (%ecx) - jmp .Lcls_epilogue -.Lcls_retldouble: - fldt (%ecx) - jmp .Lcls_epilogue -.Lcls_retllong: - movl (%ecx), %eax - movl 4(%ecx), %edx - jmp .Lcls_epilogue -.Lcls_retstruct: - movl %ebp, %esp - popl %ebp - ret $4 -.LFE2: - .size ffi_closure_SYSV, .-ffi_closure_SYSV - -#if !FFI_NO_RAW_API - -/* Precalculate for e.g. the Solaris 10/x86 assembler. */ -#if FFI_TRAMPOLINE_SIZE == 10 -#define RAW_CLOSURE_CIF_OFFSET 12 -#define RAW_CLOSURE_FUN_OFFSET 16 -#define RAW_CLOSURE_USER_DATA_OFFSET 20 -#elif FFI_TRAMPOLINE_SIZE == 24 -#define RAW_CLOSURE_CIF_OFFSET 24 -#define RAW_CLOSURE_FUN_OFFSET 28 -#define RAW_CLOSURE_USER_DATA_OFFSET 32 -#else -#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) -#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) -#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) -#endif -#define CIF_FLAGS_OFFSET 20 - - .align 4 -FFI_HIDDEN (ffi_closure_raw_SYSV) -.globl ffi_closure_raw_SYSV - .type ffi_closure_raw_SYSV, @function - -ffi_closure_raw_SYSV: -.LFB3: - pushl %ebp -.LCFI4: - movl %esp, %ebp -.LCFI5: - pushl %esi -.LCFI6: - subl $36, %esp - movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ - movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ - movl %edx, 12(%esp) /* user_data */ - leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */ - movl %edx, 8(%esp) /* raw_args */ - leal -24(%ebp), %edx - movl %edx, 4(%esp) /* &res */ - movl %esi, (%esp) /* cif */ - call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */ - movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */ - cmpl $FFI_TYPE_INT, %eax - je .Lrcls_retint - - /* Handle FFI_TYPE_UINT8, FFI_TYPE_SINT8, FFI_TYPE_UINT16, - FFI_TYPE_SINT16, FFI_TYPE_UINT32, FFI_TYPE_SINT32. */ - cmpl $FFI_TYPE_UINT64, %eax - jge 0f - cmpl $FFI_TYPE_UINT8, %eax - jge .Lrcls_retint -0: - cmpl $FFI_TYPE_FLOAT, %eax - je .Lrcls_retfloat - cmpl $FFI_TYPE_DOUBLE, %eax - je .Lrcls_retdouble - cmpl $FFI_TYPE_LONGDOUBLE, %eax - je .Lrcls_retldouble - cmpl $FFI_TYPE_SINT64, %eax - je .Lrcls_retllong -.Lrcls_epilogue: - addl $36, %esp - popl %esi - popl %ebp - ret -.Lrcls_retint: - movl -24(%ebp), %eax - jmp .Lrcls_epilogue -.Lrcls_retfloat: - flds -24(%ebp) - jmp .Lrcls_epilogue -.Lrcls_retdouble: - fldl -24(%ebp) - jmp .Lrcls_epilogue -.Lrcls_retldouble: - fldt -24(%ebp) - jmp .Lrcls_epilogue -.Lrcls_retllong: - movl -24(%ebp), %eax - movl -20(%ebp), %edx - jmp .Lrcls_epilogue -.LFE3: - .size ffi_closure_raw_SYSV, .-ffi_closure_raw_SYSV -#endif - -#if defined __PIC__ -# if defined __sun__ && defined __svr4__ -/* 32-bit Solaris 2/x86 uses datarel encoding for PIC. GNU ld before 2.22 - doesn't correctly sort .eh_frame_hdr with mixed encodings, so match this. */ -# define FDE_ENCODING 0x30 /* datarel */ -# define FDE_ENCODE(X) X@GOTOFF -# else -# define FDE_ENCODING 0x1b /* pcrel sdata4 */ -# if defined HAVE_AS_X86_PCREL -# define FDE_ENCODE(X) X-. -# else -# define FDE_ENCODE(X) X@rel -# endif -# endif -#else -# define FDE_ENCODING 0 /* absolute */ -# define FDE_ENCODE(X) X -#endif - - .section .eh_frame,EH_FRAME_FLAGS,@progbits -.Lframe1: - .long .LECIE1-.LSCIE1 /* Length of Common Information Entry */ -.LSCIE1: - .long 0x0 /* CIE Identifier Tag */ - .byte 0x1 /* CIE Version */ -#ifdef HAVE_AS_ASCII_PSEUDO_OP -#ifdef __PIC__ - .ascii "zR\0" /* CIE Augmentation */ -#else - .ascii "\0" /* CIE Augmentation */ -#endif -#elif defined HAVE_AS_STRING_PSEUDO_OP -#ifdef __PIC__ - .string "zR" /* CIE Augmentation */ -#else - .string "" /* CIE Augmentation */ -#endif -#else -#error missing .ascii/.string -#endif - .byte 0x1 /* .uleb128 0x1; CIE Code Alignment Factor */ - .byte 0x7c /* .sleb128 -4; CIE Data Alignment Factor */ - .byte 0x8 /* CIE RA Column */ -#ifdef __PIC__ - .byte 0x1 /* .uleb128 0x1; Augmentation size */ - .byte FDE_ENCODING -#endif - .byte 0xc /* DW_CFA_def_cfa */ - .byte 0x4 /* .uleb128 0x4 */ - .byte 0x4 /* .uleb128 0x4 */ - .byte 0x88 /* DW_CFA_offset, column 0x8 */ - .byte 0x1 /* .uleb128 0x1 */ - .align 4 -.LECIE1: -.LSFDE1: - .long .LEFDE1-.LASFDE1 /* FDE Length */ -.LASFDE1: - .long .LASFDE1-.Lframe1 /* FDE CIE offset */ - .long FDE_ENCODE(.LFB1) /* FDE initial location */ - .long .LFE1-.LFB1 /* FDE address range */ -#ifdef __PIC__ - .byte 0x0 /* .uleb128 0x0; Augmentation size */ -#endif - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI0-.LFB1 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x8 /* .uleb128 0x8 */ - .byte 0x85 /* DW_CFA_offset, column 0x5 */ - .byte 0x2 /* .uleb128 0x2 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI1-.LCFI0 - .byte 0xd /* DW_CFA_def_cfa_register */ - .byte 0x5 /* .uleb128 0x5 */ - .align 4 -.LEFDE1: -.LSFDE2: - .long .LEFDE2-.LASFDE2 /* FDE Length */ -.LASFDE2: - .long .LASFDE2-.Lframe1 /* FDE CIE offset */ - .long FDE_ENCODE(.LFB2) /* FDE initial location */ - .long .LFE2-.LFB2 /* FDE address range */ -#ifdef __PIC__ - .byte 0x0 /* .uleb128 0x0; Augmentation size */ -#endif - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI2-.LFB2 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x8 /* .uleb128 0x8 */ - .byte 0x85 /* DW_CFA_offset, column 0x5 */ - .byte 0x2 /* .uleb128 0x2 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI3-.LCFI2 - .byte 0xd /* DW_CFA_def_cfa_register */ - .byte 0x5 /* .uleb128 0x5 */ -#if !defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE && defined __PIC__ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI7-.LCFI3 - .byte 0x83 /* DW_CFA_offset, column 0x3 */ - .byte 0xa /* .uleb128 0xa */ -#endif - .align 4 -.LEFDE2: - -#if !FFI_NO_RAW_API - -.LSFDE3: - .long .LEFDE3-.LASFDE3 /* FDE Length */ -.LASFDE3: - .long .LASFDE3-.Lframe1 /* FDE CIE offset */ - .long FDE_ENCODE(.LFB3) /* FDE initial location */ - .long .LFE3-.LFB3 /* FDE address range */ -#ifdef __PIC__ - .byte 0x0 /* .uleb128 0x0; Augmentation size */ -#endif - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI4-.LFB3 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .byte 0x8 /* .uleb128 0x8 */ - .byte 0x85 /* DW_CFA_offset, column 0x5 */ - .byte 0x2 /* .uleb128 0x2 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI5-.LCFI4 - .byte 0xd /* DW_CFA_def_cfa_register */ - .byte 0x5 /* .uleb128 0x5 */ - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI6-.LCFI5 - .byte 0x86 /* DW_CFA_offset, column 0x6 */ - .byte 0x3 /* .uleb128 0x3 */ - .align 4 -.LEFDE3: - -#endif - -#endif /* ifndef __x86_64__ */ - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/unix64.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/unix64.S deleted file mode 100644 index 7a6619a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/unix64.S +++ /dev/null @@ -1,426 +0,0 @@ -/* ----------------------------------------------------------------------- - unix64.S - Copyright (c) 2002 Bo Thorsen - Copyright (c) 2008 Red Hat, Inc - - x86-64 Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- */ - -#ifdef __x86_64__ -#define LIBFFI_ASM -#include -#include - -.text - -/* ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, - void *raddr, void (*fnaddr)(void)); - - Bit o trickiness here -- ARGS+BYTES is the base of the stack frame - for this function. This has been allocated by ffi_call. We also - deallocate some of the stack that has been alloca'd. */ - - .align 2 - .globl ffi_call_unix64 - .type ffi_call_unix64,@function - -ffi_call_unix64: -.LUW0: - movq (%rsp), %r10 /* Load return address. */ - leaq (%rdi, %rsi), %rax /* Find local stack base. */ - movq %rdx, (%rax) /* Save flags. */ - movq %rcx, 8(%rax) /* Save raddr. */ - movq %rbp, 16(%rax) /* Save old frame pointer. */ - movq %r10, 24(%rax) /* Relocate return address. */ - movq %rax, %rbp /* Finalize local stack frame. */ -.LUW1: - movq %rdi, %r10 /* Save a copy of the register area. */ - movq %r8, %r11 /* Save a copy of the target fn. */ - movl %r9d, %eax /* Set number of SSE registers. */ - - /* Load up all argument registers. */ - movq (%r10), %rdi - movq 8(%r10), %rsi - movq 16(%r10), %rdx - movq 24(%r10), %rcx - movq 32(%r10), %r8 - movq 40(%r10), %r9 - testl %eax, %eax - jnz .Lload_sse -.Lret_from_load_sse: - - /* Deallocate the reg arg area. */ - leaq 176(%r10), %rsp - - /* Call the user function. */ - call *%r11 - - /* Deallocate stack arg area; local stack frame in redzone. */ - leaq 24(%rbp), %rsp - - movq 0(%rbp), %rcx /* Reload flags. */ - movq 8(%rbp), %rdi /* Reload raddr. */ - movq 16(%rbp), %rbp /* Reload old frame pointer. */ -.LUW2: - - /* The first byte of the flags contains the FFI_TYPE. */ - movzbl %cl, %r10d - leaq .Lstore_table(%rip), %r11 - movslq (%r11, %r10, 4), %r10 - addq %r11, %r10 - jmp *%r10 - -.Lstore_table: - .long .Lst_void-.Lstore_table /* FFI_TYPE_VOID */ - .long .Lst_sint32-.Lstore_table /* FFI_TYPE_INT */ - .long .Lst_float-.Lstore_table /* FFI_TYPE_FLOAT */ - .long .Lst_double-.Lstore_table /* FFI_TYPE_DOUBLE */ - .long .Lst_ldouble-.Lstore_table /* FFI_TYPE_LONGDOUBLE */ - .long .Lst_uint8-.Lstore_table /* FFI_TYPE_UINT8 */ - .long .Lst_sint8-.Lstore_table /* FFI_TYPE_SINT8 */ - .long .Lst_uint16-.Lstore_table /* FFI_TYPE_UINT16 */ - .long .Lst_sint16-.Lstore_table /* FFI_TYPE_SINT16 */ - .long .Lst_uint32-.Lstore_table /* FFI_TYPE_UINT32 */ - .long .Lst_sint32-.Lstore_table /* FFI_TYPE_SINT32 */ - .long .Lst_int64-.Lstore_table /* FFI_TYPE_UINT64 */ - .long .Lst_int64-.Lstore_table /* FFI_TYPE_SINT64 */ - .long .Lst_struct-.Lstore_table /* FFI_TYPE_STRUCT */ - .long .Lst_int64-.Lstore_table /* FFI_TYPE_POINTER */ - - .align 2 -.Lst_void: - ret - .align 2 - -.Lst_uint8: - movzbq %al, %rax - movq %rax, (%rdi) - ret - .align 2 -.Lst_sint8: - movsbq %al, %rax - movq %rax, (%rdi) - ret - .align 2 -.Lst_uint16: - movzwq %ax, %rax - movq %rax, (%rdi) - .align 2 -.Lst_sint16: - movswq %ax, %rax - movq %rax, (%rdi) - ret - .align 2 -.Lst_uint32: - movl %eax, %eax - movq %rax, (%rdi) - .align 2 -.Lst_sint32: - cltq - movq %rax, (%rdi) - ret - .align 2 -.Lst_int64: - movq %rax, (%rdi) - ret - - .align 2 -.Lst_float: - movss %xmm0, (%rdi) - ret - .align 2 -.Lst_double: - movsd %xmm0, (%rdi) - ret -.Lst_ldouble: - fstpt (%rdi) - ret - - .align 2 -.Lst_struct: - leaq -20(%rsp), %rsi /* Scratch area in redzone. */ - - /* We have to locate the values now, and since we don't want to - write too much data into the user's return value, we spill the - value to a 16 byte scratch area first. Bits 8, 9, and 10 - control where the values are located. Only one of the three - bits will be set; see ffi_prep_cif_machdep for the pattern. */ - movd %xmm0, %r10 - movd %xmm1, %r11 - testl $0x100, %ecx - cmovnz %rax, %rdx - cmovnz %r10, %rax - testl $0x200, %ecx - cmovnz %r10, %rdx - testl $0x400, %ecx - cmovnz %r10, %rax - cmovnz %r11, %rdx - movq %rax, (%rsi) - movq %rdx, 8(%rsi) - - /* Bits 12-31 contain the true size of the structure. Copy from - the scratch area to the true destination. */ - shrl $12, %ecx - rep movsb - ret - - /* Many times we can avoid loading any SSE registers at all. - It's not worth an indirect jump to load the exact set of - SSE registers needed; zero or all is a good compromise. */ - .align 2 -.LUW3: -.Lload_sse: - movdqa 48(%r10), %xmm0 - movdqa 64(%r10), %xmm1 - movdqa 80(%r10), %xmm2 - movdqa 96(%r10), %xmm3 - movdqa 112(%r10), %xmm4 - movdqa 128(%r10), %xmm5 - movdqa 144(%r10), %xmm6 - movdqa 160(%r10), %xmm7 - jmp .Lret_from_load_sse - -.LUW4: - .size ffi_call_unix64,.-ffi_call_unix64 - - .align 2 - .globl ffi_closure_unix64 - .type ffi_closure_unix64,@function - -ffi_closure_unix64: -.LUW5: - /* The carry flag is set by the trampoline iff SSE registers - are used. Don't clobber it before the branch instruction. */ - leaq -200(%rsp), %rsp -.LUW6: - movq %rdi, (%rsp) - movq %rsi, 8(%rsp) - movq %rdx, 16(%rsp) - movq %rcx, 24(%rsp) - movq %r8, 32(%rsp) - movq %r9, 40(%rsp) - jc .Lsave_sse -.Lret_from_save_sse: - - movq %r10, %rdi - leaq 176(%rsp), %rsi - movq %rsp, %rdx - leaq 208(%rsp), %rcx - call ffi_closure_unix64_inner@PLT - - /* Deallocate stack frame early; return value is now in redzone. */ - addq $200, %rsp -.LUW7: - - /* The first byte of the return value contains the FFI_TYPE. */ - movzbl %al, %r10d - leaq .Lload_table(%rip), %r11 - movslq (%r11, %r10, 4), %r10 - addq %r11, %r10 - jmp *%r10 - -.Lload_table: - .long .Lld_void-.Lload_table /* FFI_TYPE_VOID */ - .long .Lld_int32-.Lload_table /* FFI_TYPE_INT */ - .long .Lld_float-.Lload_table /* FFI_TYPE_FLOAT */ - .long .Lld_double-.Lload_table /* FFI_TYPE_DOUBLE */ - .long .Lld_ldouble-.Lload_table /* FFI_TYPE_LONGDOUBLE */ - .long .Lld_int8-.Lload_table /* FFI_TYPE_UINT8 */ - .long .Lld_int8-.Lload_table /* FFI_TYPE_SINT8 */ - .long .Lld_int16-.Lload_table /* FFI_TYPE_UINT16 */ - .long .Lld_int16-.Lload_table /* FFI_TYPE_SINT16 */ - .long .Lld_int32-.Lload_table /* FFI_TYPE_UINT32 */ - .long .Lld_int32-.Lload_table /* FFI_TYPE_SINT32 */ - .long .Lld_int64-.Lload_table /* FFI_TYPE_UINT64 */ - .long .Lld_int64-.Lload_table /* FFI_TYPE_SINT64 */ - .long .Lld_struct-.Lload_table /* FFI_TYPE_STRUCT */ - .long .Lld_int64-.Lload_table /* FFI_TYPE_POINTER */ - - .align 2 -.Lld_void: - ret - - .align 2 -.Lld_int8: - movzbl -24(%rsp), %eax - ret - .align 2 -.Lld_int16: - movzwl -24(%rsp), %eax - ret - .align 2 -.Lld_int32: - movl -24(%rsp), %eax - ret - .align 2 -.Lld_int64: - movq -24(%rsp), %rax - ret - - .align 2 -.Lld_float: - movss -24(%rsp), %xmm0 - ret - .align 2 -.Lld_double: - movsd -24(%rsp), %xmm0 - ret - .align 2 -.Lld_ldouble: - fldt -24(%rsp) - ret - - .align 2 -.Lld_struct: - /* There are four possibilities here, %rax/%rdx, %xmm0/%rax, - %rax/%xmm0, %xmm0/%xmm1. We collapse two by always loading - both rdx and xmm1 with the second word. For the remaining, - bit 8 set means xmm0 gets the second word, and bit 9 means - that rax gets the second word. */ - movq -24(%rsp), %rcx - movq -16(%rsp), %rdx - movq -16(%rsp), %xmm1 - testl $0x100, %eax - cmovnz %rdx, %rcx - movd %rcx, %xmm0 - testl $0x200, %eax - movq -24(%rsp), %rax - cmovnz %rdx, %rax - ret - - /* See the comment above .Lload_sse; the same logic applies here. */ - .align 2 -.LUW8: -.Lsave_sse: - movdqa %xmm0, 48(%rsp) - movdqa %xmm1, 64(%rsp) - movdqa %xmm2, 80(%rsp) - movdqa %xmm3, 96(%rsp) - movdqa %xmm4, 112(%rsp) - movdqa %xmm5, 128(%rsp) - movdqa %xmm6, 144(%rsp) - movdqa %xmm7, 160(%rsp) - jmp .Lret_from_save_sse - -.LUW9: - .size ffi_closure_unix64,.-ffi_closure_unix64 - -#ifdef HAVE_AS_X86_64_UNWIND_SECTION_TYPE - .section .eh_frame,"a",@unwind -#else - .section .eh_frame,"a",@progbits -#endif -.Lframe1: - .long .LECIE1-.LSCIE1 /* CIE Length */ -.LSCIE1: - .long 0 /* CIE Identifier Tag */ - .byte 1 /* CIE Version */ - .ascii "zR\0" /* CIE Augmentation */ - .uleb128 1 /* CIE Code Alignment Factor */ - .sleb128 -8 /* CIE Data Alignment Factor */ - .byte 0x10 /* CIE RA Column */ - .uleb128 1 /* Augmentation size */ - .byte 0x1b /* FDE Encoding (pcrel sdata4) */ - .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ - .uleb128 7 - .uleb128 8 - .byte 0x80+16 /* DW_CFA_offset, %rip offset 1*-8 */ - .uleb128 1 - .align 8 -.LECIE1: -.LSFDE1: - .long .LEFDE1-.LASFDE1 /* FDE Length */ -.LASFDE1: - .long .LASFDE1-.Lframe1 /* FDE CIE offset */ -#if HAVE_AS_X86_PCREL - .long .LUW0-. /* FDE initial location */ -#else - .long .LUW0@rel -#endif - .long .LUW4-.LUW0 /* FDE address range */ - .uleb128 0x0 /* Augmentation size */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LUW1-.LUW0 - - /* New stack frame based off rbp. This is a itty bit of unwind - trickery in that the CFA *has* changed. There is no easy way - to describe it correctly on entry to the function. Fortunately, - it doesn't matter too much since at all points we can correctly - unwind back to ffi_call. Note that the location to which we - moved the return address is (the new) CFA-8, so from the - perspective of the unwind info, it hasn't moved. */ - .byte 0xc /* DW_CFA_def_cfa, %rbp offset 32 */ - .uleb128 6 - .uleb128 32 - .byte 0x80+6 /* DW_CFA_offset, %rbp offset 2*-8 */ - .uleb128 2 - .byte 0xa /* DW_CFA_remember_state */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LUW2-.LUW1 - .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ - .uleb128 7 - .uleb128 8 - .byte 0xc0+6 /* DW_CFA_restore, %rbp */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LUW3-.LUW2 - .byte 0xb /* DW_CFA_restore_state */ - - .align 8 -.LEFDE1: -.LSFDE3: - .long .LEFDE3-.LASFDE3 /* FDE Length */ -.LASFDE3: - .long .LASFDE3-.Lframe1 /* FDE CIE offset */ -#if HAVE_AS_X86_PCREL - .long .LUW5-. /* FDE initial location */ -#else - .long .LUW5@rel -#endif - .long .LUW9-.LUW5 /* FDE address range */ - .uleb128 0x0 /* Augmentation size */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LUW6-.LUW5 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .uleb128 208 - .byte 0xa /* DW_CFA_remember_state */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LUW7-.LUW6 - .byte 0xe /* DW_CFA_def_cfa_offset */ - .uleb128 8 - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LUW8-.LUW7 - .byte 0xb /* DW_CFA_restore_state */ - - .align 8 -.LEFDE3: - -#endif /* __x86_64__ */ - -#if defined __ELF__ && defined __linux__ - .section .note.GNU-stack,"",@progbits -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/win32.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/win32.S deleted file mode 100644 index 06c893f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/win32.S +++ /dev/null @@ -1,1065 +0,0 @@ -/* ----------------------------------------------------------------------- - win32.S - Copyright (c) 1996, 1998, 2001, 2002, 2009 Red Hat, Inc. - Copyright (c) 2001 John Beniton - Copyright (c) 2002 Ranjit Mathew - Copyright (c) 2009 Daniel Witte - - - X86 Foreign Function Interface - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - ----------------------------------------------------------------------- - */ - -#define LIBFFI_ASM -#include -#include - -#ifdef _MSC_VER - -.386 -.MODEL FLAT, C - -EXTRN ffi_closure_SYSV_inner:NEAR - -_TEXT SEGMENT - -ffi_call_win32 PROC NEAR, - ffi_prep_args : NEAR PTR DWORD, - ecif : NEAR PTR DWORD, - cif_bytes : DWORD, - cif_flags : DWORD, - rvalue : NEAR PTR DWORD, - fn : NEAR PTR DWORD - - ;; Make room for all of the new args. - mov ecx, cif_bytes - sub esp, ecx - - mov eax, esp - - ;; Place all of the ffi_prep_args in position - push ecif - push eax - call ffi_prep_args - - ;; Return stack to previous state and call the function - add esp, 8 - - call fn - - ;; cdecl: we restore esp in the epilogue, so there's no need to - ;; remove the space we pushed for the args. - ;; stdcall: the callee has already cleaned the stack. - - ;; Load ecx with the return type code - mov ecx, cif_flags - - ;; If the return value pointer is NULL, assume no return value. - cmp rvalue, 0 - jne ca_jumptable - - ;; Even if there is no space for the return value, we are - ;; obliged to handle floating-point values. - cmp ecx, FFI_TYPE_FLOAT - jne ca_epilogue - fstp st(0) - - jmp ca_epilogue - -ca_jumptable: - jmp [ca_jumpdata + 4 * ecx] -ca_jumpdata: - ;; Do not insert anything here between label and jump table. - dd offset ca_epilogue ;; FFI_TYPE_VOID - dd offset ca_retint ;; FFI_TYPE_INT - dd offset ca_retfloat ;; FFI_TYPE_FLOAT - dd offset ca_retdouble ;; FFI_TYPE_DOUBLE - dd offset ca_retlongdouble ;; FFI_TYPE_LONGDOUBLE - dd offset ca_retint8 ;; FFI_TYPE_UINT8 - dd offset ca_retint8 ;; FFI_TYPE_SINT8 - dd offset ca_retint16 ;; FFI_TYPE_UINT16 - dd offset ca_retint16 ;; FFI_TYPE_SINT16 - dd offset ca_retint ;; FFI_TYPE_UINT32 - dd offset ca_retint ;; FFI_TYPE_SINT32 - dd offset ca_retint64 ;; FFI_TYPE_UINT64 - dd offset ca_retint64 ;; FFI_TYPE_SINT64 - dd offset ca_epilogue ;; FFI_TYPE_STRUCT - dd offset ca_retint ;; FFI_TYPE_POINTER - dd offset ca_retint8 ;; FFI_TYPE_SMALL_STRUCT_1B - dd offset ca_retint16 ;; FFI_TYPE_SMALL_STRUCT_2B - dd offset ca_retint ;; FFI_TYPE_SMALL_STRUCT_4B - -ca_retint8: - ;; Load %ecx with the pointer to storage for the return value - mov ecx, rvalue - mov [ecx + 0], al - jmp ca_epilogue - -ca_retint16: - ;; Load %ecx with the pointer to storage for the return value - mov ecx, rvalue - mov [ecx + 0], ax - jmp ca_epilogue - -ca_retint: - ;; Load %ecx with the pointer to storage for the return value - mov ecx, rvalue - mov [ecx + 0], eax - jmp ca_epilogue - -ca_retint64: - ;; Load %ecx with the pointer to storage for the return value - mov ecx, rvalue - mov [ecx + 0], eax - mov [ecx + 4], edx - jmp ca_epilogue - -ca_retfloat: - ;; Load %ecx with the pointer to storage for the return value - mov ecx, rvalue - fstp DWORD PTR [ecx] - jmp ca_epilogue - -ca_retdouble: - ;; Load %ecx with the pointer to storage for the return value - mov ecx, rvalue - fstp QWORD PTR [ecx] - jmp ca_epilogue - -ca_retlongdouble: - ;; Load %ecx with the pointer to storage for the return value - mov ecx, rvalue - fstp TBYTE PTR [ecx] - jmp ca_epilogue - -ca_epilogue: - ;; Epilogue code is autogenerated. - ret -ffi_call_win32 ENDP - -ffi_closure_SYSV PROC NEAR - ;; the ffi_closure ctx is passed in eax by the trampoline. - - sub esp, 40 - lea edx, [ebp - 24] - mov [ebp - 12], edx ;; resp - lea edx, [ebp + 8] - mov [esp + 8], edx ;; args - lea edx, [ebp - 12] - mov [esp + 4], edx ;; &resp - mov [esp], eax ;; closure - call ffi_closure_SYSV_inner - mov ecx, [ebp - 12] - -cs_jumptable: - jmp [cs_jumpdata + 4 * eax] -cs_jumpdata: - ;; Do not insert anything here between the label and jump table. - dd offset cs_epilogue ;; FFI_TYPE_VOID - dd offset cs_retint ;; FFI_TYPE_INT - dd offset cs_retfloat ;; FFI_TYPE_FLOAT - dd offset cs_retdouble ;; FFI_TYPE_DOUBLE - dd offset cs_retlongdouble ;; FFI_TYPE_LONGDOUBLE - dd offset cs_retint8 ;; FFI_TYPE_UINT8 - dd offset cs_retint8 ;; FFI_TYPE_SINT8 - dd offset cs_retint16 ;; FFI_TYPE_UINT16 - dd offset cs_retint16 ;; FFI_TYPE_SINT16 - dd offset cs_retint ;; FFI_TYPE_UINT32 - dd offset cs_retint ;; FFI_TYPE_SINT32 - dd offset cs_retint64 ;; FFI_TYPE_UINT64 - dd offset cs_retint64 ;; FFI_TYPE_SINT64 - dd offset cs_retstruct ;; FFI_TYPE_STRUCT - dd offset cs_retint ;; FFI_TYPE_POINTER - dd offset cs_retint8 ;; FFI_TYPE_SMALL_STRUCT_1B - dd offset cs_retint16 ;; FFI_TYPE_SMALL_STRUCT_2B - dd offset cs_retint ;; FFI_TYPE_SMALL_STRUCT_4B - -cs_retint8: - mov al, [ecx] - jmp cs_epilogue - -cs_retint16: - mov ax, [ecx] - jmp cs_epilogue - -cs_retint: - mov eax, [ecx] - jmp cs_epilogue - -cs_retint64: - mov eax, [ecx + 0] - mov edx, [ecx + 4] - jmp cs_epilogue - -cs_retfloat: - fld DWORD PTR [ecx] - jmp cs_epilogue - -cs_retdouble: - fld QWORD PTR [ecx] - jmp cs_epilogue - -cs_retlongdouble: - fld TBYTE PTR [ecx] - jmp cs_epilogue - -cs_retstruct: - ;; Caller expects us to pop struct return value pointer hidden arg. - ;; Epilogue code is autogenerated. - ret 4 - -cs_epilogue: - ;; Epilogue code is autogenerated. - ret -ffi_closure_SYSV ENDP - -#if !FFI_NO_RAW_API - -#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) AND NOT 3) -#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) -#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) -#define CIF_FLAGS_OFFSET 20 - -ffi_closure_raw_SYSV PROC NEAR USES esi - ;; the ffi_closure ctx is passed in eax by the trampoline. - - sub esp, 40 - mov esi, [eax + RAW_CLOSURE_CIF_OFFSET] ;; closure->cif - mov edx, [eax + RAW_CLOSURE_USER_DATA_OFFSET] ;; closure->user_data - mov [esp + 12], edx ;; user_data - lea edx, [ebp + 8] - mov [esp + 8], edx ;; raw_args - lea edx, [ebp - 24] - mov [esp + 4], edx ;; &res - mov [esp], esi ;; cif - call DWORD PTR [eax + RAW_CLOSURE_FUN_OFFSET] ;; closure->fun - mov eax, [esi + CIF_FLAGS_OFFSET] ;; cif->flags - lea ecx, [ebp - 24] - -cr_jumptable: - jmp [cr_jumpdata + 4 * eax] -cr_jumpdata: - ;; Do not insert anything here between the label and jump table. - dd offset cr_epilogue ;; FFI_TYPE_VOID - dd offset cr_retint ;; FFI_TYPE_INT - dd offset cr_retfloat ;; FFI_TYPE_FLOAT - dd offset cr_retdouble ;; FFI_TYPE_DOUBLE - dd offset cr_retlongdouble ;; FFI_TYPE_LONGDOUBLE - dd offset cr_retint8 ;; FFI_TYPE_UINT8 - dd offset cr_retint8 ;; FFI_TYPE_SINT8 - dd offset cr_retint16 ;; FFI_TYPE_UINT16 - dd offset cr_retint16 ;; FFI_TYPE_SINT16 - dd offset cr_retint ;; FFI_TYPE_UINT32 - dd offset cr_retint ;; FFI_TYPE_SINT32 - dd offset cr_retint64 ;; FFI_TYPE_UINT64 - dd offset cr_retint64 ;; FFI_TYPE_SINT64 - dd offset cr_epilogue ;; FFI_TYPE_STRUCT - dd offset cr_retint ;; FFI_TYPE_POINTER - dd offset cr_retint8 ;; FFI_TYPE_SMALL_STRUCT_1B - dd offset cr_retint16 ;; FFI_TYPE_SMALL_STRUCT_2B - dd offset cr_retint ;; FFI_TYPE_SMALL_STRUCT_4B - -cr_retint8: - mov al, [ecx] - jmp cr_epilogue - -cr_retint16: - mov ax, [ecx] - jmp cr_epilogue - -cr_retint: - mov eax, [ecx] - jmp cr_epilogue - -cr_retint64: - mov eax, [ecx + 0] - mov edx, [ecx + 4] - jmp cr_epilogue - -cr_retfloat: - fld DWORD PTR [ecx] - jmp cr_epilogue - -cr_retdouble: - fld QWORD PTR [ecx] - jmp cr_epilogue - -cr_retlongdouble: - fld TBYTE PTR [ecx] - jmp cr_epilogue - -cr_epilogue: - ;; Epilogue code is autogenerated. - ret -ffi_closure_raw_SYSV ENDP - -#endif /* !FFI_NO_RAW_API */ - -ffi_closure_STDCALL PROC NEAR - ;; the ffi_closure ctx is passed in eax by the trampoline. - - sub esp, 40 - lea edx, [ebp - 24] - mov [ebp - 12], edx ;; resp - lea edx, [ebp + 12] ;; account for stub return address on stack - mov [esp + 8], edx ;; args - lea edx, [ebp - 12] - mov [esp + 4], edx ;; &resp - mov [esp], eax ;; closure - call ffi_closure_SYSV_inner - mov ecx, [ebp - 12] - -cd_jumptable: - jmp [cd_jumpdata + 4 * eax] -cd_jumpdata: - ;; Do not insert anything here between the label and jump table. - dd offset cd_epilogue ;; FFI_TYPE_VOID - dd offset cd_retint ;; FFI_TYPE_INT - dd offset cd_retfloat ;; FFI_TYPE_FLOAT - dd offset cd_retdouble ;; FFI_TYPE_DOUBLE - dd offset cd_retlongdouble ;; FFI_TYPE_LONGDOUBLE - dd offset cd_retint8 ;; FFI_TYPE_UINT8 - dd offset cd_retint8 ;; FFI_TYPE_SINT8 - dd offset cd_retint16 ;; FFI_TYPE_UINT16 - dd offset cd_retint16 ;; FFI_TYPE_SINT16 - dd offset cd_retint ;; FFI_TYPE_UINT32 - dd offset cd_retint ;; FFI_TYPE_SINT32 - dd offset cd_retint64 ;; FFI_TYPE_UINT64 - dd offset cd_retint64 ;; FFI_TYPE_SINT64 - dd offset cd_epilogue ;; FFI_TYPE_STRUCT - dd offset cd_retint ;; FFI_TYPE_POINTER - dd offset cd_retint8 ;; FFI_TYPE_SMALL_STRUCT_1B - dd offset cd_retint16 ;; FFI_TYPE_SMALL_STRUCT_2B - dd offset cd_retint ;; FFI_TYPE_SMALL_STRUCT_4B - -cd_retint8: - mov al, [ecx] - jmp cd_epilogue - -cd_retint16: - mov ax, [ecx] - jmp cd_epilogue - -cd_retint: - mov eax, [ecx] - jmp cd_epilogue - -cd_retint64: - mov eax, [ecx + 0] - mov edx, [ecx + 4] - jmp cd_epilogue - -cd_retfloat: - fld DWORD PTR [ecx] - jmp cd_epilogue - -cd_retdouble: - fld QWORD PTR [ecx] - jmp cd_epilogue - -cd_retlongdouble: - fld TBYTE PTR [ecx] - jmp cd_epilogue - -cd_epilogue: - ;; Epilogue code is autogenerated. - ret -ffi_closure_STDCALL ENDP - -_TEXT ENDS -END - -#else - - .text - - # This assumes we are using gas. - .balign 16 - .globl _ffi_call_win32 -#ifndef __OS2__ - .def _ffi_call_win32; .scl 2; .type 32; .endef -#endif -_ffi_call_win32: -.LFB1: - pushl %ebp -.LCFI0: - movl %esp,%ebp -.LCFI1: - # Make room for all of the new args. - movl 16(%ebp),%ecx - subl %ecx,%esp - - movl %esp,%eax - - # Place all of the ffi_prep_args in position - pushl 12(%ebp) - pushl %eax - call *8(%ebp) - - # Return stack to previous state and call the function - addl $8,%esp - - # FIXME: Align the stack to a 128-bit boundary to avoid - # potential performance hits. - - call *28(%ebp) - - # stdcall functions pop arguments off the stack themselves - - # Load %ecx with the return type code - movl 20(%ebp),%ecx - - # If the return value pointer is NULL, assume no return value. - cmpl $0,24(%ebp) - jne 0f - - # Even if there is no space for the return value, we are - # obliged to handle floating-point values. - cmpl $FFI_TYPE_FLOAT,%ecx - jne .Lnoretval - fstp %st(0) - - jmp .Lepilogue - -0: - call 1f - # Do not insert anything here between the call and the jump table. -.Lstore_table: - .long .Lnoretval /* FFI_TYPE_VOID */ - .long .Lretint /* FFI_TYPE_INT */ - .long .Lretfloat /* FFI_TYPE_FLOAT */ - .long .Lretdouble /* FFI_TYPE_DOUBLE */ - .long .Lretlongdouble /* FFI_TYPE_LONGDOUBLE */ - .long .Lretuint8 /* FFI_TYPE_UINT8 */ - .long .Lretsint8 /* FFI_TYPE_SINT8 */ - .long .Lretuint16 /* FFI_TYPE_UINT16 */ - .long .Lretsint16 /* FFI_TYPE_SINT16 */ - .long .Lretint /* FFI_TYPE_UINT32 */ - .long .Lretint /* FFI_TYPE_SINT32 */ - .long .Lretint64 /* FFI_TYPE_UINT64 */ - .long .Lretint64 /* FFI_TYPE_SINT64 */ - .long .Lretstruct /* FFI_TYPE_STRUCT */ - .long .Lretint /* FFI_TYPE_POINTER */ - .long .Lretstruct1b /* FFI_TYPE_SMALL_STRUCT_1B */ - .long .Lretstruct2b /* FFI_TYPE_SMALL_STRUCT_2B */ - .long .Lretstruct4b /* FFI_TYPE_SMALL_STRUCT_4B */ -1: - add %ecx, %ecx - add %ecx, %ecx - add (%esp),%ecx - add $4, %esp - jmp *(%ecx) - - /* Sign/zero extend as appropriate. */ -.Lretsint8: - movsbl %al, %eax - jmp .Lretint - -.Lretsint16: - movswl %ax, %eax - jmp .Lretint - -.Lretuint8: - movzbl %al, %eax - jmp .Lretint - -.Lretuint16: - movzwl %ax, %eax - jmp .Lretint - -.Lretint: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - movl %eax,0(%ecx) - jmp .Lepilogue - -.Lretfloat: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - fstps (%ecx) - jmp .Lepilogue - -.Lretdouble: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - fstpl (%ecx) - jmp .Lepilogue - -.Lretlongdouble: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - fstpt (%ecx) - jmp .Lepilogue - -.Lretint64: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - movl %eax,0(%ecx) - movl %edx,4(%ecx) - jmp .Lepilogue - -.Lretstruct1b: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - movb %al,0(%ecx) - jmp .Lepilogue - -.Lretstruct2b: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - movw %ax,0(%ecx) - jmp .Lepilogue - -.Lretstruct4b: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - movl %eax,0(%ecx) - jmp .Lepilogue - -.Lretstruct: - # Nothing to do! - -.Lnoretval: -.Lepilogue: - movl %ebp,%esp - popl %ebp - ret -.ffi_call_win32_end: -.LFE1: - - # This assumes we are using gas. - .balign 16 - .globl _ffi_closure_SYSV -#ifndef __OS2__ - .def _ffi_closure_SYSV; .scl 2; .type 32; .endef -#endif -_ffi_closure_SYSV: -.LFB3: - pushl %ebp -.LCFI4: - movl %esp, %ebp -.LCFI5: - subl $40, %esp - leal -24(%ebp), %edx - movl %edx, -12(%ebp) /* resp */ - leal 8(%ebp), %edx - movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */ - leal -12(%ebp), %edx - movl %edx, (%esp) /* &resp */ - call _ffi_closure_SYSV_inner - movl -12(%ebp), %ecx - -0: - call 1f - # Do not insert anything here between the call and the jump table. -.Lcls_store_table: - .long .Lcls_noretval /* FFI_TYPE_VOID */ - .long .Lcls_retint /* FFI_TYPE_INT */ - .long .Lcls_retfloat /* FFI_TYPE_FLOAT */ - .long .Lcls_retdouble /* FFI_TYPE_DOUBLE */ - .long .Lcls_retldouble /* FFI_TYPE_LONGDOUBLE */ - .long .Lcls_retuint8 /* FFI_TYPE_UINT8 */ - .long .Lcls_retsint8 /* FFI_TYPE_SINT8 */ - .long .Lcls_retuint16 /* FFI_TYPE_UINT16 */ - .long .Lcls_retsint16 /* FFI_TYPE_SINT16 */ - .long .Lcls_retint /* FFI_TYPE_UINT32 */ - .long .Lcls_retint /* FFI_TYPE_SINT32 */ - .long .Lcls_retllong /* FFI_TYPE_UINT64 */ - .long .Lcls_retllong /* FFI_TYPE_SINT64 */ - .long .Lcls_retstruct /* FFI_TYPE_STRUCT */ - .long .Lcls_retint /* FFI_TYPE_POINTER */ - .long .Lcls_retstruct1 /* FFI_TYPE_SMALL_STRUCT_1B */ - .long .Lcls_retstruct2 /* FFI_TYPE_SMALL_STRUCT_2B */ - .long .Lcls_retstruct4 /* FFI_TYPE_SMALL_STRUCT_4B */ - -1: - add %eax, %eax - add %eax, %eax - add (%esp),%eax - add $4, %esp - jmp *(%eax) - - /* Sign/zero extend as appropriate. */ -.Lcls_retsint8: - movsbl (%ecx), %eax - jmp .Lcls_epilogue - -.Lcls_retsint16: - movswl (%ecx), %eax - jmp .Lcls_epilogue - -.Lcls_retuint8: - movzbl (%ecx), %eax - jmp .Lcls_epilogue - -.Lcls_retuint16: - movzwl (%ecx), %eax - jmp .Lcls_epilogue - -.Lcls_retint: - movl (%ecx), %eax - jmp .Lcls_epilogue - -.Lcls_retfloat: - flds (%ecx) - jmp .Lcls_epilogue - -.Lcls_retdouble: - fldl (%ecx) - jmp .Lcls_epilogue - -.Lcls_retldouble: - fldt (%ecx) - jmp .Lcls_epilogue - -.Lcls_retllong: - movl (%ecx), %eax - movl 4(%ecx), %edx - jmp .Lcls_epilogue - -.Lcls_retstruct1: - movsbl (%ecx), %eax - jmp .Lcls_epilogue - -.Lcls_retstruct2: - movswl (%ecx), %eax - jmp .Lcls_epilogue - -.Lcls_retstruct4: - movl (%ecx), %eax - jmp .Lcls_epilogue - -.Lcls_retstruct: - # Caller expects us to pop struct return value pointer hidden arg. - movl %ebp, %esp - popl %ebp - ret $0x4 - -.Lcls_noretval: -.Lcls_epilogue: - movl %ebp, %esp - popl %ebp - ret -.ffi_closure_SYSV_end: -.LFE3: - -#if !FFI_NO_RAW_API - -#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) -#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) -#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) -#define CIF_FLAGS_OFFSET 20 - - # This assumes we are using gas. - .balign 16 - .globl _ffi_closure_raw_SYSV -#ifndef __OS2__ - .def _ffi_closure_raw_SYSV; .scl 2; .type 32; .endef -#endif -_ffi_closure_raw_SYSV: -.LFB4: - pushl %ebp -.LCFI6: - movl %esp, %ebp -.LCFI7: - pushl %esi -.LCFI8: - subl $36, %esp - movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ - movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ - movl %edx, 12(%esp) /* user_data */ - leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */ - movl %edx, 8(%esp) /* raw_args */ - leal -24(%ebp), %edx - movl %edx, 4(%esp) /* &res */ - movl %esi, (%esp) /* cif */ - call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */ - movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */ -0: - call 1f - # Do not insert anything here between the call and the jump table. -.Lrcls_store_table: - .long .Lrcls_noretval /* FFI_TYPE_VOID */ - .long .Lrcls_retint /* FFI_TYPE_INT */ - .long .Lrcls_retfloat /* FFI_TYPE_FLOAT */ - .long .Lrcls_retdouble /* FFI_TYPE_DOUBLE */ - .long .Lrcls_retldouble /* FFI_TYPE_LONGDOUBLE */ - .long .Lrcls_retuint8 /* FFI_TYPE_UINT8 */ - .long .Lrcls_retsint8 /* FFI_TYPE_SINT8 */ - .long .Lrcls_retuint16 /* FFI_TYPE_UINT16 */ - .long .Lrcls_retsint16 /* FFI_TYPE_SINT16 */ - .long .Lrcls_retint /* FFI_TYPE_UINT32 */ - .long .Lrcls_retint /* FFI_TYPE_SINT32 */ - .long .Lrcls_retllong /* FFI_TYPE_UINT64 */ - .long .Lrcls_retllong /* FFI_TYPE_SINT64 */ - .long .Lrcls_retstruct /* FFI_TYPE_STRUCT */ - .long .Lrcls_retint /* FFI_TYPE_POINTER */ - .long .Lrcls_retstruct1 /* FFI_TYPE_SMALL_STRUCT_1B */ - .long .Lrcls_retstruct2 /* FFI_TYPE_SMALL_STRUCT_2B */ - .long .Lrcls_retstruct4 /* FFI_TYPE_SMALL_STRUCT_4B */ -1: - add %eax, %eax - add %eax, %eax - add (%esp),%eax - add $4, %esp - jmp *(%eax) - - /* Sign/zero extend as appropriate. */ -.Lrcls_retsint8: - movsbl -24(%ebp), %eax - jmp .Lrcls_epilogue - -.Lrcls_retsint16: - movswl -24(%ebp), %eax - jmp .Lrcls_epilogue - -.Lrcls_retuint8: - movzbl -24(%ebp), %eax - jmp .Lrcls_epilogue - -.Lrcls_retuint16: - movzwl -24(%ebp), %eax - jmp .Lrcls_epilogue - -.Lrcls_retint: - movl -24(%ebp), %eax - jmp .Lrcls_epilogue - -.Lrcls_retfloat: - flds -24(%ebp) - jmp .Lrcls_epilogue - -.Lrcls_retdouble: - fldl -24(%ebp) - jmp .Lrcls_epilogue - -.Lrcls_retldouble: - fldt -24(%ebp) - jmp .Lrcls_epilogue - -.Lrcls_retllong: - movl -24(%ebp), %eax - movl -20(%ebp), %edx - jmp .Lrcls_epilogue - -.Lrcls_retstruct1: - movsbl -24(%ebp), %eax - jmp .Lrcls_epilogue - -.Lrcls_retstruct2: - movswl -24(%ebp), %eax - jmp .Lrcls_epilogue - -.Lrcls_retstruct4: - movl -24(%ebp), %eax - jmp .Lrcls_epilogue - -.Lrcls_retstruct: - # Nothing to do! - -.Lrcls_noretval: -.Lrcls_epilogue: - addl $36, %esp - popl %esi - popl %ebp - ret -.ffi_closure_raw_SYSV_end: -.LFE4: - -#endif /* !FFI_NO_RAW_API */ - - # This assumes we are using gas. - .balign 16 - .globl _ffi_closure_STDCALL -#ifndef __OS2__ - .def _ffi_closure_STDCALL; .scl 2; .type 32; .endef -#endif -_ffi_closure_STDCALL: -.LFB5: - pushl %ebp -.LCFI9: - movl %esp, %ebp -.LCFI10: - subl $40, %esp - leal -24(%ebp), %edx - movl %edx, -12(%ebp) /* resp */ - leal 12(%ebp), %edx /* account for stub return address on stack */ - movl %edx, 4(%esp) /* args */ - leal -12(%ebp), %edx - movl %edx, (%esp) /* &resp */ - call _ffi_closure_SYSV_inner - movl -12(%ebp), %ecx -0: - call 1f - # Do not insert anything here between the call and the jump table. -.Lscls_store_table: - .long .Lscls_noretval /* FFI_TYPE_VOID */ - .long .Lscls_retint /* FFI_TYPE_INT */ - .long .Lscls_retfloat /* FFI_TYPE_FLOAT */ - .long .Lscls_retdouble /* FFI_TYPE_DOUBLE */ - .long .Lscls_retldouble /* FFI_TYPE_LONGDOUBLE */ - .long .Lscls_retuint8 /* FFI_TYPE_UINT8 */ - .long .Lscls_retsint8 /* FFI_TYPE_SINT8 */ - .long .Lscls_retuint16 /* FFI_TYPE_UINT16 */ - .long .Lscls_retsint16 /* FFI_TYPE_SINT16 */ - .long .Lscls_retint /* FFI_TYPE_UINT32 */ - .long .Lscls_retint /* FFI_TYPE_SINT32 */ - .long .Lscls_retllong /* FFI_TYPE_UINT64 */ - .long .Lscls_retllong /* FFI_TYPE_SINT64 */ - .long .Lscls_retstruct /* FFI_TYPE_STRUCT */ - .long .Lscls_retint /* FFI_TYPE_POINTER */ - .long .Lscls_retstruct1 /* FFI_TYPE_SMALL_STRUCT_1B */ - .long .Lscls_retstruct2 /* FFI_TYPE_SMALL_STRUCT_2B */ - .long .Lscls_retstruct4 /* FFI_TYPE_SMALL_STRUCT_4B */ -1: - add %eax, %eax - add %eax, %eax - add (%esp),%eax - add $4, %esp - jmp *(%eax) - - /* Sign/zero extend as appropriate. */ -.Lscls_retsint8: - movsbl (%ecx), %eax - jmp .Lscls_epilogue - -.Lscls_retsint16: - movswl (%ecx), %eax - jmp .Lscls_epilogue - -.Lscls_retuint8: - movzbl (%ecx), %eax - jmp .Lscls_epilogue - -.Lscls_retuint16: - movzwl (%ecx), %eax - jmp .Lscls_epilogue - -.Lscls_retint: - movl (%ecx), %eax - jmp .Lscls_epilogue - -.Lscls_retfloat: - flds (%ecx) - jmp .Lscls_epilogue - -.Lscls_retdouble: - fldl (%ecx) - jmp .Lscls_epilogue - -.Lscls_retldouble: - fldt (%ecx) - jmp .Lscls_epilogue - -.Lscls_retllong: - movl (%ecx), %eax - movl 4(%ecx), %edx - jmp .Lscls_epilogue - -.Lscls_retstruct1: - movsbl (%ecx), %eax - jmp .Lscls_epilogue - -.Lscls_retstruct2: - movswl (%ecx), %eax - jmp .Lscls_epilogue - -.Lscls_retstruct4: - movl (%ecx), %eax - jmp .Lscls_epilogue - -.Lscls_retstruct: - # Nothing to do! - -.Lscls_noretval: -.Lscls_epilogue: - movl %ebp, %esp - popl %ebp - ret -.ffi_closure_STDCALL_end: -.LFE5: - -#ifndef __OS2__ - .section .eh_frame,"w" -#endif -.Lframe1: -.LSCIE1: - .long .LECIE1-.LASCIE1 /* Length of Common Information Entry */ -.LASCIE1: - .long 0x0 /* CIE Identifier Tag */ - .byte 0x1 /* CIE Version */ -#ifdef __PIC__ - .ascii "zR\0" /* CIE Augmentation */ -#else - .ascii "\0" /* CIE Augmentation */ -#endif - .byte 0x1 /* .uleb128 0x1; CIE Code Alignment Factor */ - .byte 0x7c /* .sleb128 -4; CIE Data Alignment Factor */ - .byte 0x8 /* CIE RA Column */ -#ifdef __PIC__ - .byte 0x1 /* .uleb128 0x1; Augmentation size */ - .byte 0x1b /* FDE Encoding (pcrel sdata4) */ -#endif - .byte 0xc /* DW_CFA_def_cfa CFA = r4 + 4 = 4(%esp) */ - .byte 0x4 /* .uleb128 0x4 */ - .byte 0x4 /* .uleb128 0x4 */ - .byte 0x88 /* DW_CFA_offset, column 0x8 %eip at CFA + 1 * -4 */ - .byte 0x1 /* .uleb128 0x1 */ - .align 4 -.LECIE1: - -.LSFDE1: - .long .LEFDE1-.LASFDE1 /* FDE Length */ -.LASFDE1: - .long .LASFDE1-.Lframe1 /* FDE CIE offset */ -#if defined __PIC__ && defined HAVE_AS_X86_PCREL - .long .LFB1-. /* FDE initial location */ -#else - .long .LFB1 -#endif - .long .LFE1-.LFB1 /* FDE address range */ -#ifdef __PIC__ - .byte 0x0 /* .uleb128 0x0; Augmentation size */ -#endif - /* DW_CFA_xxx CFI instructions go here. */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI0-.LFB1 - .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ - .byte 0x8 /* .uleb128 0x8 */ - .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ - .byte 0x2 /* .uleb128 0x2 */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI1-.LCFI0 - .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ - .byte 0x5 /* .uleb128 0x5 */ - - /* End of DW_CFA_xxx CFI instructions. */ - .align 4 -.LEFDE1: - - -.LSFDE3: - .long .LEFDE3-.LASFDE3 /* FDE Length */ -.LASFDE3: - .long .LASFDE3-.Lframe1 /* FDE CIE offset */ -#if defined __PIC__ && defined HAVE_AS_X86_PCREL - .long .LFB3-. /* FDE initial location */ -#else - .long .LFB3 -#endif - .long .LFE3-.LFB3 /* FDE address range */ -#ifdef __PIC__ - .byte 0x0 /* .uleb128 0x0; Augmentation size */ -#endif - /* DW_CFA_xxx CFI instructions go here. */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI4-.LFB3 - .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ - .byte 0x8 /* .uleb128 0x8 */ - .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ - .byte 0x2 /* .uleb128 0x2 */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI5-.LCFI4 - .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ - .byte 0x5 /* .uleb128 0x5 */ - - /* End of DW_CFA_xxx CFI instructions. */ - .align 4 -.LEFDE3: - -#if !FFI_NO_RAW_API - -.LSFDE4: - .long .LEFDE4-.LASFDE4 /* FDE Length */ -.LASFDE4: - .long .LASFDE4-.Lframe1 /* FDE CIE offset */ -#if defined __PIC__ && defined HAVE_AS_X86_PCREL - .long .LFB4-. /* FDE initial location */ -#else - .long .LFB4 -#endif - .long .LFE4-.LFB4 /* FDE address range */ -#ifdef __PIC__ - .byte 0x0 /* .uleb128 0x0; Augmentation size */ -#endif - /* DW_CFA_xxx CFI instructions go here. */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI6-.LFB4 - .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ - .byte 0x8 /* .uleb128 0x8 */ - .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ - .byte 0x2 /* .uleb128 0x2 */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI7-.LCFI6 - .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ - .byte 0x5 /* .uleb128 0x5 */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI8-.LCFI7 - .byte 0x86 /* DW_CFA_offset, column 0x6 %esi at CFA + 3 * -4 */ - .byte 0x3 /* .uleb128 0x3 */ - - /* End of DW_CFA_xxx CFI instructions. */ - .align 4 -.LEFDE4: - -#endif /* !FFI_NO_RAW_API */ - -.LSFDE5: - .long .LEFDE5-.LASFDE5 /* FDE Length */ -.LASFDE5: - .long .LASFDE5-.Lframe1 /* FDE CIE offset */ -#if defined __PIC__ && defined HAVE_AS_X86_PCREL - .long .LFB5-. /* FDE initial location */ -#else - .long .LFB5 -#endif - .long .LFE5-.LFB5 /* FDE address range */ -#ifdef __PIC__ - .byte 0x0 /* .uleb128 0x0; Augmentation size */ -#endif - /* DW_CFA_xxx CFI instructions go here. */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI9-.LFB5 - .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ - .byte 0x8 /* .uleb128 0x8 */ - .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ - .byte 0x2 /* .uleb128 0x2 */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI10-.LCFI9 - .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ - .byte 0x5 /* .uleb128 0x5 */ - - /* End of DW_CFA_xxx CFI instructions. */ - .align 4 -.LEFDE5: - -#endif /* !_MSC_VER */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/win64.S b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/win64.S deleted file mode 100644 index fcdb270..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/src/x86/win64.S +++ /dev/null @@ -1,468 +0,0 @@ -#define LIBFFI_ASM -#include -#include - -/* Constants for ffi_call_win64 */ -#define STACK 0 -#define PREP_ARGS_FN 32 -#define ECIF 40 -#define CIF_BYTES 48 -#define CIF_FLAGS 56 -#define RVALUE 64 -#define FN 72 - -/* ffi_call_win64 (void (*prep_args_fn)(char *, extended_cif *), - extended_cif *ecif, unsigned bytes, unsigned flags, - unsigned *rvalue, void (*fn)()); - */ - -#ifdef _MSC_VER -PUBLIC ffi_call_win64 - -EXTRN __chkstk:NEAR -EXTRN ffi_closure_win64_inner:NEAR - -_TEXT SEGMENT - -;;; ffi_closure_win64 will be called with these registers set: -;;; rax points to 'closure' -;;; r11 contains a bit mask that specifies which of the -;;; first four parameters are float or double -;;; -;;; It must move the parameters passed in registers to their stack location, -;;; call ffi_closure_win64_inner for the actual work, then return the result. -;;; -ffi_closure_win64 PROC FRAME - ;; copy register arguments onto stack - test r11, 1 - jne first_is_float - mov QWORD PTR [rsp+8], rcx - jmp second -first_is_float: - movlpd QWORD PTR [rsp+8], xmm0 - -second: - test r11, 2 - jne second_is_float - mov QWORD PTR [rsp+16], rdx - jmp third -second_is_float: - movlpd QWORD PTR [rsp+16], xmm1 - -third: - test r11, 4 - jne third_is_float - mov QWORD PTR [rsp+24], r8 - jmp fourth -third_is_float: - movlpd QWORD PTR [rsp+24], xmm2 - -fourth: - test r11, 8 - jne fourth_is_float - mov QWORD PTR [rsp+32], r9 - jmp done -fourth_is_float: - movlpd QWORD PTR [rsp+32], xmm3 - -done: - .ALLOCSTACK 40 - sub rsp, 40 - .ENDPROLOG - mov rcx, rax ; context is first parameter - mov rdx, rsp ; stack is second parameter - add rdx, 48 ; point to start of arguments - mov rax, ffi_closure_win64_inner - call rax ; call the real closure function - add rsp, 40 - movd xmm0, rax ; If the closure returned a float, - ; ffi_closure_win64_inner wrote it to rax - ret 0 -ffi_closure_win64 ENDP - -ffi_call_win64 PROC FRAME - ;; copy registers onto stack - mov QWORD PTR [rsp+32], r9 - mov QWORD PTR [rsp+24], r8 - mov QWORD PTR [rsp+16], rdx - mov QWORD PTR [rsp+8], rcx - .PUSHREG rbp - push rbp - .ALLOCSTACK 48 - sub rsp, 48 ; 00000030H - .SETFRAME rbp, 32 - lea rbp, QWORD PTR [rsp+32] - .ENDPROLOG - - mov eax, DWORD PTR CIF_BYTES[rbp] - add rax, 15 - and rax, -16 - call __chkstk - sub rsp, rax - lea rax, QWORD PTR [rsp+32] - mov QWORD PTR STACK[rbp], rax - - mov rdx, QWORD PTR ECIF[rbp] - mov rcx, QWORD PTR STACK[rbp] - call QWORD PTR PREP_ARGS_FN[rbp] - - mov rsp, QWORD PTR STACK[rbp] - - movlpd xmm3, QWORD PTR [rsp+24] - movd r9, xmm3 - - movlpd xmm2, QWORD PTR [rsp+16] - movd r8, xmm2 - - movlpd xmm1, QWORD PTR [rsp+8] - movd rdx, xmm1 - - movlpd xmm0, QWORD PTR [rsp] - movd rcx, xmm0 - - call QWORD PTR FN[rbp] -ret_struct4b$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SMALL_STRUCT_4B - jne ret_struct2b$ - - mov rcx, QWORD PTR RVALUE[rbp] - mov DWORD PTR [rcx], eax - jmp ret_void$ - -ret_struct2b$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SMALL_STRUCT_2B - jne ret_struct1b$ - - mov rcx, QWORD PTR RVALUE[rbp] - mov WORD PTR [rcx], ax - jmp ret_void$ - -ret_struct1b$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SMALL_STRUCT_1B - jne ret_uint8$ - - mov rcx, QWORD PTR RVALUE[rbp] - mov BYTE PTR [rcx], al - jmp ret_void$ - -ret_uint8$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_UINT8 - jne ret_sint8$ - - mov rcx, QWORD PTR RVALUE[rbp] - movzx rax, al - mov QWORD PTR [rcx], rax - jmp ret_void$ - -ret_sint8$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SINT8 - jne ret_uint16$ - - mov rcx, QWORD PTR RVALUE[rbp] - movsx rax, al - mov QWORD PTR [rcx], rax - jmp ret_void$ - -ret_uint16$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_UINT16 - jne ret_sint16$ - - mov rcx, QWORD PTR RVALUE[rbp] - movzx rax, ax - mov QWORD PTR [rcx], rax - jmp SHORT ret_void$ - -ret_sint16$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SINT16 - jne ret_uint32$ - - mov rcx, QWORD PTR RVALUE[rbp] - movsx rax, ax - mov QWORD PTR [rcx], rax - jmp SHORT ret_void$ - -ret_uint32$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_UINT32 - jne ret_sint32$ - - mov rcx, QWORD PTR RVALUE[rbp] - mov eax, eax - mov QWORD PTR [rcx], rax - jmp SHORT ret_void$ - -ret_sint32$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SINT32 - jne ret_float$ - - mov rcx, QWORD PTR RVALUE[rbp] - cdqe - mov QWORD PTR [rcx], rax - jmp SHORT ret_void$ - -ret_float$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_FLOAT - jne SHORT ret_double$ - - mov rax, QWORD PTR RVALUE[rbp] - movss DWORD PTR [rax], xmm0 - jmp SHORT ret_void$ - -ret_double$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_DOUBLE - jne SHORT ret_sint64$ - - mov rax, QWORD PTR RVALUE[rbp] - movlpd QWORD PTR [rax], xmm0 - jmp SHORT ret_void$ - -ret_sint64$: - cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SINT64 - jne ret_void$ - - mov rcx, QWORD PTR RVALUE[rbp] - mov QWORD PTR [rcx], rax - jmp SHORT ret_void$ - -ret_void$: - xor rax, rax - - lea rsp, QWORD PTR [rbp+16] - pop rbp - ret 0 -ffi_call_win64 ENDP -_TEXT ENDS -END - -#else - -#ifdef SYMBOL_UNDERSCORE -#define SYMBOL_NAME(name) _##name -#else -#define SYMBOL_NAME(name) name -#endif - -.text - -.extern SYMBOL_NAME(ffi_closure_win64_inner) - -# ffi_closure_win64 will be called with these registers set: -# rax points to 'closure' -# r11 contains a bit mask that specifies which of the -# first four parameters are float or double -# -# It must move the parameters passed in registers to their stack location, -# call ffi_closure_win64_inner for the actual work, then return the result. -# - .balign 16 - .globl SYMBOL_NAME(ffi_closure_win64) -SYMBOL_NAME(ffi_closure_win64): - # copy register arguments onto stack - test $1,%r11 - jne .Lfirst_is_float - mov %rcx, 8(%rsp) - jmp .Lsecond -.Lfirst_is_float: - movlpd %xmm0, 8(%rsp) - -.Lsecond: - test $2, %r11 - jne .Lsecond_is_float - mov %rdx, 16(%rsp) - jmp .Lthird -.Lsecond_is_float: - movlpd %xmm1, 16(%rsp) - -.Lthird: - test $4, %r11 - jne .Lthird_is_float - mov %r8,24(%rsp) - jmp .Lfourth -.Lthird_is_float: - movlpd %xmm2, 24(%rsp) - -.Lfourth: - test $8, %r11 - jne .Lfourth_is_float - mov %r9, 32(%rsp) - jmp .Ldone -.Lfourth_is_float: - movlpd %xmm3, 32(%rsp) - -.Ldone: -#.ALLOCSTACK 40 - sub $40, %rsp -#.ENDPROLOG - mov %rax, %rcx # context is first parameter - mov %rsp, %rdx # stack is second parameter - add $48, %rdx # point to start of arguments - mov $SYMBOL_NAME(ffi_closure_win64_inner), %rax - callq *%rax # call the real closure function - add $40, %rsp - movq %rax, %xmm0 # If the closure returned a float, - # ffi_closure_win64_inner wrote it to rax - retq -.ffi_closure_win64_end: - - .balign 16 - .globl SYMBOL_NAME(ffi_call_win64) -SYMBOL_NAME(ffi_call_win64): - # copy registers onto stack - mov %r9,32(%rsp) - mov %r8,24(%rsp) - mov %rdx,16(%rsp) - mov %rcx,8(%rsp) - #.PUSHREG rbp - push %rbp - #.ALLOCSTACK 48 - sub $48,%rsp - #.SETFRAME rbp, 32 - lea 32(%rsp),%rbp - #.ENDPROLOG - - mov CIF_BYTES(%rbp),%eax - add $15, %rax - and $-16, %rax - cmpq $0x1000, %rax - jb Lch_done -Lch_probe: - subq $0x1000,%rsp - orl $0x0, (%rsp) - subq $0x1000,%rax - cmpq $0x1000,%rax - ja Lch_probe -Lch_done: - subq %rax, %rsp - orl $0x0, (%rsp) - lea 32(%rsp), %rax - mov %rax, STACK(%rbp) - - mov ECIF(%rbp), %rdx - mov STACK(%rbp), %rcx - callq *PREP_ARGS_FN(%rbp) - - mov STACK(%rbp), %rsp - - movlpd 24(%rsp), %xmm3 - movd %xmm3, %r9 - - movlpd 16(%rsp), %xmm2 - movd %xmm2, %r8 - - movlpd 8(%rsp), %xmm1 - movd %xmm1, %rdx - - movlpd (%rsp), %xmm0 - movd %xmm0, %rcx - - callq *FN(%rbp) -.Lret_struct4b: - cmpl $FFI_TYPE_SMALL_STRUCT_4B, CIF_FLAGS(%rbp) - jne .Lret_struct2b - - mov RVALUE(%rbp), %rcx - mov %eax, (%rcx) - jmp .Lret_void - -.Lret_struct2b: - cmpl $FFI_TYPE_SMALL_STRUCT_2B, CIF_FLAGS(%rbp) - jne .Lret_struct1b - - mov RVALUE(%rbp), %rcx - mov %ax, (%rcx) - jmp .Lret_void - -.Lret_struct1b: - cmpl $FFI_TYPE_SMALL_STRUCT_1B, CIF_FLAGS(%rbp) - jne .Lret_uint8 - - mov RVALUE(%rbp), %rcx - mov %al, (%rcx) - jmp .Lret_void - -.Lret_uint8: - cmpl $FFI_TYPE_UINT8, CIF_FLAGS(%rbp) - jne .Lret_sint8 - - mov RVALUE(%rbp), %rcx - movzbq %al, %rax - movq %rax, (%rcx) - jmp .Lret_void - -.Lret_sint8: - cmpl $FFI_TYPE_SINT8, CIF_FLAGS(%rbp) - jne .Lret_uint16 - - mov RVALUE(%rbp), %rcx - movsbq %al, %rax - movq %rax, (%rcx) - jmp .Lret_void - -.Lret_uint16: - cmpl $FFI_TYPE_UINT16, CIF_FLAGS(%rbp) - jne .Lret_sint16 - - mov RVALUE(%rbp), %rcx - movzwq %ax, %rax - movq %rax, (%rcx) - jmp .Lret_void - -.Lret_sint16: - cmpl $FFI_TYPE_SINT16, CIF_FLAGS(%rbp) - jne .Lret_uint32 - - mov RVALUE(%rbp), %rcx - movswq %ax, %rax - movq %rax, (%rcx) - jmp .Lret_void - -.Lret_uint32: - cmpl $FFI_TYPE_UINT32, CIF_FLAGS(%rbp) - jne .Lret_sint32 - - mov RVALUE(%rbp), %rcx - movl %eax, %eax - movq %rax, (%rcx) - jmp .Lret_void - -.Lret_sint32: - cmpl $FFI_TYPE_SINT32, CIF_FLAGS(%rbp) - jne .Lret_float - - mov RVALUE(%rbp), %rcx - cltq - movq %rax, (%rcx) - jmp .Lret_void - -.Lret_float: - cmpl $FFI_TYPE_FLOAT, CIF_FLAGS(%rbp) - jne .Lret_double - - mov RVALUE(%rbp), %rax - movss %xmm0, (%rax) - jmp .Lret_void - -.Lret_double: - cmpl $FFI_TYPE_DOUBLE, CIF_FLAGS(%rbp) - jne .Lret_sint64 - - mov RVALUE(%rbp), %rax - movlpd %xmm0, (%rax) - jmp .Lret_void - -.Lret_sint64: - cmpl $FFI_TYPE_SINT64, CIF_FLAGS(%rbp) - jne .Lret_void - - mov RVALUE(%rbp), %rcx - mov %rax, (%rcx) - jmp .Lret_void - -.Lret_void: - xor %rax, %rax - - lea 16(%rbp), %rsp - pop %rbp - retq -.ffi_call_win64_end: -#endif /* !_MSC_VER */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/Makefile.am b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/Makefile.am deleted file mode 100644 index cfd1df4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/Makefile.am +++ /dev/null @@ -1,80 +0,0 @@ -## Process this file with automake to produce Makefile.in. - -AUTOMAKE_OPTIONS = foreign dejagnu - -# Setup the testing framework, if you have one -EXPECT = `if [ -f $(top_builddir)/../expect/expect ] ; then \ - echo $(top_builddir)/../expect/expect ; \ - else echo expect ; fi` - -RUNTEST = `if [ -f $(top_srcdir)/../dejagnu/runtest ] ; then \ - echo $(top_srcdir)/../dejagnu/runtest ; \ - else echo runtest; fi` - -AM_RUNTESTFLAGS = - -CLEANFILES = *.exe core* *.log *.sum - -EXTRA_DIST = libffi.special/special.exp \ -libffi.special/unwindtest_ffi_call.cc libffi.special/unwindtest.cc \ -libffi.special/ffitestcxx.h config/default.exp lib/target-libpath.exp \ -lib/libffi.exp lib/wrapper.exp libffi.call/float.c \ -libffi.call/cls_multi_schar.c libffi.call/float3.c \ -libffi.call/cls_3_1byte.c libffi.call/stret_large2.c \ -libffi.call/cls_5_1_byte.c libffi.call/stret_medium.c \ -libffi.call/promotion.c libffi.call/cls_dbls_struct.c \ -libffi.call/nested_struct.c libffi.call/closure_fn1.c \ -libffi.call/cls_4_1byte.c libffi.call/cls_float.c \ -libffi.call/cls_2byte.c libffi.call/closure_fn4.c \ -libffi.call/return_fl2.c libffi.call/nested_struct7.c \ -libffi.call/cls_uint.c libffi.call/cls_align_sint64.c \ -libffi.call/float1.c libffi.call/cls_19byte.c \ -libffi.call/nested_struct1.c libffi.call/cls_4byte.c \ -libffi.call/return_fl1.c libffi.call/cls_align_pointer.c \ -libffi.call/nested_struct4.c libffi.call/nested_struct3.c \ -libffi.call/struct7.c libffi.call/nested_struct9.c \ -libffi.call/cls_sshort.c libffi.call/cls_ulonglong.c \ -libffi.call/cls_pointer_stack.c libffi.call/cls_multi_uchar.c \ -libffi.call/testclosure.c libffi.call/cls_3byte1.c \ -libffi.call/struct6.c libffi.call/return_uc.c libffi.call/return_ll1.c \ -libffi.call/cls_ushort.c libffi.call/stret_medium2.c \ -libffi.call/cls_multi_ushortchar.c libffi.call/return_dbl2.c \ -libffi.call/closure_loc_fn0.c libffi.call/return_sc.c \ -libffi.call/nested_struct8.c libffi.call/cls_7_1_byte.c \ -libffi.call/return_ll.c libffi.call/cls_pointer.c \ -libffi.call/err_bad_abi.c libffi.call/return_dbl1.c \ -libffi.call/call.exp libffi.call/ffitest.h libffi.call/strlen.c \ -libffi.call/return_sl.c libffi.call/cls_1_1byte.c \ -libffi.call/struct1.c libffi.call/cls_64byte.c libffi.call/return_ul.c \ -libffi.call/cls_double.c libffi.call/many_win32.c \ -libffi.call/cls_16byte.c libffi.call/cls_align_double.c \ -libffi.call/cls_align_uint16.c libffi.call/cls_9byte1.c \ -libffi.call/cls_multi_sshortchar.c libffi.call/cls_multi_ushort.c \ -libffi.call/closure_stdcall.c libffi.call/return_fl.c \ -libffi.call/strlen_win32.c libffi.call/return_ldl.c \ -libffi.call/cls_align_float.c libffi.call/struct3.c \ -libffi.call/cls_uchar.c libffi.call/cls_sint.c libffi.call/float2.c \ -libffi.call/cls_align_longdouble_split.c \ -libffi.call/cls_longdouble_va.c libffi.call/cls_multi_sshort.c \ -libffi.call/stret_large.c libffi.call/cls_align_sint16.c \ -libffi.call/nested_struct6.c libffi.call/cls_5byte.c \ -libffi.call/return_dbl.c libffi.call/cls_20byte.c \ -libffi.call/cls_8byte.c libffi.call/pyobjc-tc.c \ -libffi.call/cls_24byte.c libffi.call/cls_align_longdouble_split2.c \ -libffi.call/cls_6_1_byte.c libffi.call/cls_schar.c \ -libffi.call/cls_18byte.c libffi.call/closure_fn3.c \ -libffi.call/err_bad_typedef.c libffi.call/closure_fn2.c \ -libffi.call/struct2.c libffi.call/cls_3byte2.c \ -libffi.call/cls_align_longdouble.c libffi.call/cls_20byte1.c \ -libffi.call/return_fl3.c libffi.call/cls_align_uint32.c \ -libffi.call/problem1.c libffi.call/float4.c \ -libffi.call/cls_align_uint64.c libffi.call/struct9.c \ -libffi.call/closure_fn5.c libffi.call/cls_align_sint32.c \ -libffi.call/closure_fn0.c libffi.call/closure_fn6.c \ -libffi.call/struct4.c libffi.call/nested_struct2.c \ -libffi.call/cls_6byte.c libffi.call/cls_7byte.c libffi.call/many.c \ -libffi.call/struct8.c libffi.call/negint.c libffi.call/struct5.c \ -libffi.call/cls_12byte.c libffi.call/cls_double_va.c \ -libffi.call/cls_longdouble.c libffi.call/cls_9byte2.c \ -libffi.call/nested_struct10.c libffi.call/nested_struct5.c \ -libffi.call/huge_struct.c diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/Makefile.in b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/Makefile.in deleted file mode 100644 index 53de9c0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/Makefile.in +++ /dev/null @@ -1,500 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = testsuite -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cc_maxopt.m4 \ - $(top_srcdir)/m4/ax_cflags_warn_all.m4 \ - $(top_srcdir)/m4/ax_check_compiler_flags.m4 \ - $(top_srcdir)/m4/ax_compiler_vendor.m4 \ - $(top_srcdir)/m4/ax_configure_args.m4 \ - $(top_srcdir)/m4/ax_enable_builddir.m4 \ - $(top_srcdir)/m4/ax_gcc_archflag.m4 \ - $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/fficonfig.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -DEJATOOL = $(PACKAGE) -RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -AMTAR = @AMTAR@ -AM_LTLDFLAGS = @AM_LTLDFLAGS@ -AM_RUNTESTFLAGS = -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCAS = @CCAS@ -CCASDEPMODE = @CCASDEPMODE@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FFI_EXEC_TRAMPOLINE_TABLE = @FFI_EXEC_TRAMPOLINE_TABLE@ -FGREP = @FGREP@ -GREP = @GREP@ -HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PRTDIAG = @PRTDIAG@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -TARGET = @TARGET@ -TARGETDIR = @TARGETDIR@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -ax_enable_builddir_sed = @ax_enable_builddir_sed@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sys_symbol_underscore = @sys_symbol_underscore@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -toolexecdir = @toolexecdir@ -toolexeclibdir = @toolexeclibdir@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AUTOMAKE_OPTIONS = foreign dejagnu - -# Setup the testing framework, if you have one -EXPECT = `if [ -f $(top_builddir)/../expect/expect ] ; then \ - echo $(top_builddir)/../expect/expect ; \ - else echo expect ; fi` - -RUNTEST = `if [ -f $(top_srcdir)/../dejagnu/runtest ] ; then \ - echo $(top_srcdir)/../dejagnu/runtest ; \ - else echo runtest; fi` - -CLEANFILES = *.exe core* *.log *.sum -EXTRA_DIST = libffi.special/special.exp \ -libffi.special/unwindtest_ffi_call.cc libffi.special/unwindtest.cc \ -libffi.special/ffitestcxx.h config/default.exp lib/target-libpath.exp \ -lib/libffi.exp lib/wrapper.exp libffi.call/float.c \ -libffi.call/cls_multi_schar.c libffi.call/float3.c \ -libffi.call/cls_3_1byte.c libffi.call/stret_large2.c \ -libffi.call/cls_5_1_byte.c libffi.call/stret_medium.c \ -libffi.call/promotion.c libffi.call/cls_dbls_struct.c \ -libffi.call/nested_struct.c libffi.call/closure_fn1.c \ -libffi.call/cls_4_1byte.c libffi.call/cls_float.c \ -libffi.call/cls_2byte.c libffi.call/closure_fn4.c \ -libffi.call/return_fl2.c libffi.call/nested_struct7.c \ -libffi.call/cls_uint.c libffi.call/cls_align_sint64.c \ -libffi.call/float1.c libffi.call/cls_19byte.c \ -libffi.call/nested_struct1.c libffi.call/cls_4byte.c \ -libffi.call/return_fl1.c libffi.call/cls_align_pointer.c \ -libffi.call/nested_struct4.c libffi.call/nested_struct3.c \ -libffi.call/struct7.c libffi.call/nested_struct9.c \ -libffi.call/cls_sshort.c libffi.call/cls_ulonglong.c \ -libffi.call/cls_pointer_stack.c libffi.call/cls_multi_uchar.c \ -libffi.call/testclosure.c libffi.call/cls_3byte1.c \ -libffi.call/struct6.c libffi.call/return_uc.c libffi.call/return_ll1.c \ -libffi.call/cls_ushort.c libffi.call/stret_medium2.c \ -libffi.call/cls_multi_ushortchar.c libffi.call/return_dbl2.c \ -libffi.call/closure_loc_fn0.c libffi.call/return_sc.c \ -libffi.call/nested_struct8.c libffi.call/cls_7_1_byte.c \ -libffi.call/return_ll.c libffi.call/cls_pointer.c \ -libffi.call/err_bad_abi.c libffi.call/return_dbl1.c \ -libffi.call/call.exp libffi.call/ffitest.h libffi.call/strlen.c \ -libffi.call/return_sl.c libffi.call/cls_1_1byte.c \ -libffi.call/struct1.c libffi.call/cls_64byte.c libffi.call/return_ul.c \ -libffi.call/cls_double.c libffi.call/many_win32.c \ -libffi.call/cls_16byte.c libffi.call/cls_align_double.c \ -libffi.call/cls_align_uint16.c libffi.call/cls_9byte1.c \ -libffi.call/cls_multi_sshortchar.c libffi.call/cls_multi_ushort.c \ -libffi.call/closure_stdcall.c libffi.call/return_fl.c \ -libffi.call/strlen_win32.c libffi.call/return_ldl.c \ -libffi.call/cls_align_float.c libffi.call/struct3.c \ -libffi.call/cls_uchar.c libffi.call/cls_sint.c libffi.call/float2.c \ -libffi.call/cls_align_longdouble_split.c \ -libffi.call/cls_longdouble_va.c libffi.call/cls_multi_sshort.c \ -libffi.call/stret_large.c libffi.call/cls_align_sint16.c \ -libffi.call/nested_struct6.c libffi.call/cls_5byte.c \ -libffi.call/return_dbl.c libffi.call/cls_20byte.c \ -libffi.call/cls_8byte.c libffi.call/pyobjc-tc.c \ -libffi.call/cls_24byte.c libffi.call/cls_align_longdouble_split2.c \ -libffi.call/cls_6_1_byte.c libffi.call/cls_schar.c \ -libffi.call/cls_18byte.c libffi.call/closure_fn3.c \ -libffi.call/err_bad_typedef.c libffi.call/closure_fn2.c \ -libffi.call/struct2.c libffi.call/cls_3byte2.c \ -libffi.call/cls_align_longdouble.c libffi.call/cls_20byte1.c \ -libffi.call/return_fl3.c libffi.call/cls_align_uint32.c \ -libffi.call/problem1.c libffi.call/float4.c \ -libffi.call/cls_align_uint64.c libffi.call/struct9.c \ -libffi.call/closure_fn5.c libffi.call/cls_align_sint32.c \ -libffi.call/closure_fn0.c libffi.call/closure_fn6.c \ -libffi.call/struct4.c libffi.call/nested_struct2.c \ -libffi.call/cls_6byte.c libffi.call/cls_7byte.c libffi.call/many.c \ -libffi.call/struct8.c libffi.call/negint.c libffi.call/struct5.c \ -libffi.call/cls_12byte.c libffi.call/cls_double_va.c \ -libffi.call/cls_longdouble.c libffi.call/cls_9byte2.c \ -libffi.call/nested_struct10.c libffi.call/nested_struct5.c \ -libffi.call/huge_struct.c - -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign testsuite/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign testsuite/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -check-DEJAGNU: site.exp - srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \ - EXPECT=$(EXPECT); export EXPECT; \ - runtest=$(RUNTEST); \ - if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \ - exit_status=0; l='$(DEJATOOL)'; for tool in $$l; do \ - if $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) $(RUNTESTFLAGS); \ - then :; else exit_status=1; fi; \ - done; \ - else echo "WARNING: could not find \`runtest'" 1>&2; :;\ - fi; \ - exit $$exit_status -site.exp: Makefile - @echo 'Making a new site.exp file...' - @echo '## these variables are automatically generated by make ##' >site.tmp - @echo '# Do not edit here. If you wish to override these values' >>site.tmp - @echo '# edit the last section' >>site.tmp - @echo 'set srcdir $(srcdir)' >>site.tmp - @echo "set objdir `pwd`" >>site.tmp - @echo 'set build_alias "$(build_alias)"' >>site.tmp - @echo 'set build_triplet $(build_triplet)' >>site.tmp - @echo 'set host_alias "$(host_alias)"' >>site.tmp - @echo 'set host_triplet $(host_triplet)' >>site.tmp - @echo 'set target_alias "$(target_alias)"' >>site.tmp - @echo 'set target_triplet $(target_triplet)' >>site.tmp - @echo '## All variables above are generated by configure. Do Not Edit ##' >>site.tmp - @test ! -f site.exp || \ - sed '1,/^## All variables above are.*##/ d' site.exp >> site.tmp - @-rm -f site.bak - @test ! -f site.exp || mv site.exp site.bak - @mv site.tmp site.exp - -distclean-DEJAGNU: - -rm -f site.exp site.bak - -l='$(DEJATOOL)'; for tool in $$l; do \ - rm -f $$tool.sum $$tool.log; \ - done - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am - $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-DEJAGNU distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: check-am install-am install-strip - -.PHONY: all all-am check check-DEJAGNU check-am clean clean-generic \ - clean-libtool distclean distclean-DEJAGNU distclean-generic \ - distclean-libtool distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - uninstall uninstall-am - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/config/default.exp b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/config/default.exp deleted file mode 100644 index 90967cc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/config/default.exp +++ /dev/null @@ -1 +0,0 @@ -load_lib "standard.exp" diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp deleted file mode 100644 index 304d2f5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +++ /dev/null @@ -1,300 +0,0 @@ -# Copyright (C) 2003, 2005, 2008, 2009 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -proc load_gcc_lib { filename } { - global srcdir - load_file $srcdir/lib/$filename -} - -load_lib dg.exp -load_lib libgloss.exp -load_gcc_lib target-libpath.exp -load_gcc_lib wrapper.exp - - -# Define libffi callbacks for dg.exp. - -proc libffi-dg-test-1 { target_compile prog do_what extra_tool_flags } { - - # To get all \n in dg-output test strings to match printf output - # in a system that outputs it as \015\012 (i.e. not just \012), we - # need to change all \n into \r?\n. As there is no dejagnu flag - # or hook to do that, we simply change the text being tested. - # Unfortunately, we have to know that the variable is called - # dg-output-text and lives in the caller of libffi-dg-test, which - # is two calls up. Overriding proc dg-output would be longer and - # would necessarily have the same assumption. - upvar 2 dg-output-text output_match - - if { [llength $output_match] > 1 } { - regsub -all "\n" [lindex $output_match 1] "\r?\n" x - set output_match [lreplace $output_match 1 1 $x] - } - - # Set up the compiler flags, based on what we're going to do. - - set options [list] - switch $do_what { - "compile" { - set compile_type "assembly" - set output_file "[file rootname [file tail $prog]].s" - } - "link" { - set compile_type "executable" - set output_file "[file rootname [file tail $prog]].exe" - # The following line is needed for targets like the i960 where - # the default output file is b.out. Sigh. - } - "run" { - set compile_type "executable" - # FIXME: "./" is to cope with "." not being in $PATH. - # Should this be handled elsewhere? - # YES. - set output_file "./[file rootname [file tail $prog]].exe" - # This is the only place where we care if an executable was - # created or not. If it was, dg.exp will try to run it. - remote_file build delete $output_file; - } - default { - perror "$do_what: not a valid dg-do keyword" - return "" - } - } - - if { $extra_tool_flags != "" } { - lappend options "additional_flags=$extra_tool_flags" - } - - set comp_output [libffi_target_compile "$prog" "$output_file" "$compile_type" $options]; - - - return [list $comp_output $output_file] -} - - -proc libffi-dg-test { prog do_what extra_tool_flags } { - return [libffi-dg-test-1 target_compile $prog $do_what $extra_tool_flags] -} - -proc libffi-init { args } { - global gluefile wrap_flags; - global srcdir - global blddirffi - global objdir - global TOOL_OPTIONS - global tool - global libffi_include - global libffi_link_flags - global tool_root_dir - global ld_library_path - - set blddirffi [pwd]/.. - verbose "libffi $blddirffi" - - set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a] - if {$gccdir != ""} { - set gccdir [file dirname $gccdir] - } - verbose "gccdir $gccdir" - - set ld_library_path "." - append ld_library_path ":${gccdir}" - - set compiler "${gccdir}/xgcc" - if { [is_remote host] == 0 && [which $compiler] != 0 } { - foreach i "[exec $compiler --print-multi-lib]" { - set mldir "" - regexp -- "\[a-z0-9=_/\.-\]*;" $i mldir - set mldir [string trimright $mldir "\;@"] - if { "$mldir" == "." } { - continue - } - if { [llength [glob -nocomplain ${gccdir}/${mldir}/libgcc_s*.so.*]] >= 1 } { - append ld_library_path ":${gccdir}/${mldir}" - } - } - } - # add the library path for libffi. - append ld_library_path ":${blddirffi}/.libs" - - verbose "ld_library_path: $ld_library_path" - - # Point to the Libffi headers in libffi. - set libffi_include "${blddirffi}/include" - verbose "libffi_include $libffi_include" - - set libffi_dir "${blddirffi}/.libs" - verbose "libffi_dir $libffi_dir" - if { $libffi_dir != "" } { - set libffi_dir [file dirname ${libffi_dir}] - set libffi_link_flags "-L${libffi_dir}/.libs" - } - - set_ld_library_path_env_vars - libffi_maybe_build_wrapper "${objdir}/testglue.o" -} - -proc libffi_exit { } { - global gluefile; - - if [info exists gluefile] { - file_on_build delete $gluefile; - unset gluefile; - } -} - -proc libffi_target_compile { source dest type options } { - global gluefile wrap_flags; - global srcdir - global blddirffi - global TOOL_OPTIONS - global libffi_link_flags - global libffi_include - global target_triplet - - - if { [target_info needs_status_wrapper]!="" && [info exists gluefile] } { - lappend options "libs=${gluefile}" - lappend options "ldflags=$wrap_flags" - } - - # TOOL_OPTIONS must come first, so that it doesn't override testcase - # specific options. - if [info exists TOOL_OPTIONS] { - lappend options [concat "additional_flags=$TOOL_OPTIONS" $options]; - } - - # search for ffi_mips.h in srcdir, too - lappend options "additional_flags=-I${libffi_include} -I${srcdir}/../include -I${libffi_include}/.." - lappend options "additional_flags=${libffi_link_flags}" - - # Darwin needs a stack execution allowed flag. - - if { [istarget "*-*-darwin9*"] || [istarget "*-*-darwin1*"] - || [istarget "*-*-darwin2*"] } { - lappend options "additional_flags=-Wl,-allow_stack_execute" - } - - # If you're building the compiler with --prefix set to a place - # where it's not yet installed, then the linker won't be able to - # find the libgcc used by libffi.dylib. We could pass the - # -dylib_file option, but that's complicated, and it's much easier - # to just make the linker find libgcc using -L options. - if { [string match "*-*-darwin*" $target_triplet] } { - lappend options "libs= -shared-libgcc" - } - - if { [string match "*-*-openbsd*" $target_triplet] } { - lappend options "libs= -lpthread" - } - - lappend options "libs= -lffi" - - verbose "options: $options" - return [target_compile $source $dest $type $options] -} - -# Utility routines. - -# -# search_for -- looks for a string match in a file -# -proc search_for { file pattern } { - set fd [open $file r] - while { [gets $fd cur_line]>=0 } { - if [string match "*$pattern*" $cur_line] then { - close $fd - return 1 - } - } - close $fd - return 0 -} - -# Modified dg-runtest that can cycle through a list of optimization options -# as c-torture does. -proc libffi-dg-runtest { testcases default-extra-flags } { - global runtests - - foreach test $testcases { - # If we're only testing specific files and this isn't one of - # them, skip it. - if ![runtest_file_p $runtests $test] { - continue - } - - # Look for a loop within the source code - if we don't find one, - # don't pass -funroll[-all]-loops. - global torture_with_loops torture_without_loops - if [expr [search_for $test "for*("]+[search_for $test "while*("]] { - set option_list $torture_with_loops - } else { - set option_list $torture_without_loops - } - - set nshort [file tail [file dirname $test]]/[file tail $test] - - foreach flags $option_list { - verbose "Testing $nshort, $flags" 1 - dg-test $test $flags ${default-extra-flags} - } - } -} - - -# Like check_conditional_xfail, but callable from a dg test. - -proc dg-xfail-if { args } { - set args [lreplace $args 0 0] - set selector "target [join [lindex $args 1]]" - if { [dg-process-target $selector] == "S" } { - global compiler_conditional_xfail_data - set compiler_conditional_xfail_data $args - } -} - - -# We need to make sure that additional_files and additional_sources -# are both cleared out after every test. It is not enough to clear -# them out *before* the next test run because gcc-target-compile gets -# run directly from some .exp files (outside of any test). (Those -# uses should eventually be eliminated.) - -# Because the DG framework doesn't provide a hook that is run at the -# end of a test, we must replace dg-test with a wrapper. - -if { [info procs saved-dg-test] == [list] } { - rename dg-test saved-dg-test - - proc dg-test { args } { - global additional_files - global additional_sources - global errorInfo - - if { [ catch { eval saved-dg-test $args } errmsg ] } { - set saved_info $errorInfo - set additional_files "" - set additional_sources "" - error $errmsg $saved_info - } - set additional_files "" - set additional_sources "" - } -} - -# Local Variables: -# tcl-indent-level:4 -# End: diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/lib/libffi.exp b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/lib/libffi.exp deleted file mode 100644 index 4a65ed1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/lib/libffi.exp +++ /dev/null @@ -1,350 +0,0 @@ -# Copyright (C) 2003, 2005, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; see the file COPYING3. If not see -# . - -proc load_gcc_lib { filename } { - global srcdir - load_file $srcdir/lib/$filename -} - -load_lib dg.exp -load_lib libgloss.exp -load_gcc_lib target-libpath.exp -load_gcc_lib wrapper.exp - - -# Define libffi callbacks for dg.exp. - -proc libffi-dg-test-1 { target_compile prog do_what extra_tool_flags } { - - # To get all \n in dg-output test strings to match printf output - # in a system that outputs it as \015\012 (i.e. not just \012), we - # need to change all \n into \r?\n. As there is no dejagnu flag - # or hook to do that, we simply change the text being tested. - # Unfortunately, we have to know that the variable is called - # dg-output-text and lives in the caller of libffi-dg-test, which - # is two calls up. Overriding proc dg-output would be longer and - # would necessarily have the same assumption. - upvar 2 dg-output-text output_match - - if { [llength $output_match] > 1 } { - regsub -all "\n" [lindex $output_match 1] "\r?\n" x - set output_match [lreplace $output_match 1 1 $x] - } - - # Set up the compiler flags, based on what we're going to do. - - set options [list] - switch $do_what { - "compile" { - set compile_type "assembly" - set output_file "[file rootname [file tail $prog]].s" - } - "link" { - set compile_type "executable" - set output_file "[file rootname [file tail $prog]].exe" - # The following line is needed for targets like the i960 where - # the default output file is b.out. Sigh. - } - "run" { - set compile_type "executable" - # FIXME: "./" is to cope with "." not being in $PATH. - # Should this be handled elsewhere? - # YES. - set output_file "./[file rootname [file tail $prog]].exe" - # This is the only place where we care if an executable was - # created or not. If it was, dg.exp will try to run it. - remote_file build delete $output_file; - } - default { - perror "$do_what: not a valid dg-do keyword" - return "" - } - } - - if { $extra_tool_flags != "" } { - lappend options "additional_flags=$extra_tool_flags" - } - - set comp_output [libffi_target_compile "$prog" "$output_file" "$compile_type" $options]; - - - return [list $comp_output $output_file] -} - - -proc libffi-dg-test { prog do_what extra_tool_flags } { - return [libffi-dg-test-1 target_compile $prog $do_what $extra_tool_flags] -} - -proc libffi-init { args } { - global gluefile wrap_flags; - global srcdir - global blddirffi - global objdir - global TOOL_OPTIONS - global tool - global libffi_include - global libffi_link_flags - global tool_root_dir - global ld_library_path - - set blddirffi [pwd]/.. - verbose "libffi $blddirffi" - - set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a] - if {$gccdir != ""} { - set gccdir [file dirname $gccdir] - } - verbose "gccdir $gccdir" - - set ld_library_path "." - append ld_library_path ":${gccdir}" - - set compiler "${gccdir}/xgcc" - if { [is_remote host] == 0 && [which $compiler] != 0 } { - foreach i "[exec $compiler --print-multi-lib]" { - set mldir "" - regexp -- "\[a-z0-9=_/\.-\]*;" $i mldir - set mldir [string trimright $mldir "\;@"] - if { "$mldir" == "." } { - continue - } - if { [llength [glob -nocomplain ${gccdir}/${mldir}/libgcc_s*.so.*]] >= 1 } { - append ld_library_path ":${gccdir}/${mldir}" - } - } - } - # add the library path for libffi. - append ld_library_path ":${blddirffi}/.libs" - - verbose "ld_library_path: $ld_library_path" - - # Point to the Libffi headers in libffi. - set libffi_include "${blddirffi}/include" - verbose "libffi_include $libffi_include" - - set libffi_dir "${blddirffi}/.libs" - verbose "libffi_dir $libffi_dir" - if { $libffi_dir != "" } { - set libffi_dir [file dirname ${libffi_dir}] - set libffi_link_flags "-L${libffi_dir}/.libs" - } - - set_ld_library_path_env_vars - libffi_maybe_build_wrapper "${objdir}/testglue.o" -} - -proc libffi_exit { } { - global gluefile; - - if [info exists gluefile] { - file_on_build delete $gluefile; - unset gluefile; - } -} - -proc libffi_target_compile { source dest type options } { - global gluefile wrap_flags; - global srcdir - global blddirffi - global TOOL_OPTIONS - global libffi_link_flags - global libffi_include - global target_triplet - - - if { [target_info needs_status_wrapper]!="" && [info exists gluefile] } { - lappend options "libs=${gluefile}" - lappend options "ldflags=$wrap_flags" - } - - # TOOL_OPTIONS must come first, so that it doesn't override testcase - # specific options. - if [info exists TOOL_OPTIONS] { - lappend options [concat "additional_flags=$TOOL_OPTIONS" $options]; - } - - # search for ffi_mips.h in srcdir, too - lappend options "additional_flags=-I${libffi_include} -I${srcdir}/../include -I${libffi_include}/.." - lappend options "additional_flags=${libffi_link_flags}" - - # Darwin needs a stack execution allowed flag. - - if { [istarget "*-*-darwin9*"] || [istarget "*-*-darwin1*"] - || [istarget "*-*-darwin2*"] } { - lappend options "additional_flags=-Wl,-allow_stack_execute" - } - - # If you're building the compiler with --prefix set to a place - # where it's not yet installed, then the linker won't be able to - # find the libgcc used by libffi.dylib. We could pass the - # -dylib_file option, but that's complicated, and it's much easier - # to just make the linker find libgcc using -L options. - if { [string match "*-*-darwin*" $target_triplet] } { - lappend options "libs= -shared-libgcc" - } - - if { [string match "*-*-openbsd*" $target_triplet] } { - lappend options "libs= -lpthread" - } - - lappend options "libs= -lffi" - - verbose "options: $options" - return [target_compile $source $dest $type $options] -} - -# Utility routines. - -# -# search_for -- looks for a string match in a file -# -proc search_for { file pattern } { - set fd [open $file r] - while { [gets $fd cur_line]>=0 } { - if [string match "*$pattern*" $cur_line] then { - close $fd - return 1 - } - } - close $fd - return 0 -} - -# Modified dg-runtest that can cycle through a list of optimization options -# as c-torture does. -proc libffi-dg-runtest { testcases default-extra-flags } { - global runtests - - foreach test $testcases { - # If we're only testing specific files and this isn't one of - # them, skip it. - if ![runtest_file_p $runtests $test] { - continue - } - - # Look for a loop within the source code - if we don't find one, - # don't pass -funroll[-all]-loops. - global torture_with_loops torture_without_loops - if [expr [search_for $test "for*("]+[search_for $test "while*("]] { - set option_list $torture_with_loops - } else { - set option_list $torture_without_loops - } - - set nshort [file tail [file dirname $test]]/[file tail $test] - - foreach flags $option_list { - verbose "Testing $nshort, $flags" 1 - dg-test $test $flags ${default-extra-flags} - } - } -} - - -# Like check_conditional_xfail, but callable from a dg test. - -proc dg-xfail-if { args } { - set args [lreplace $args 0 0] - set selector "target [join [lindex $args 1]]" - if { [dg-process-target $selector] == "S" } { - global compiler_conditional_xfail_data - set compiler_conditional_xfail_data $args - } -} - -proc check-flags { args } { - - # The args are within another list; pull them out. - set args [lindex $args 0] - - # The next two arguments are optional. If they were not specified, - # use the defaults. - if { [llength $args] == 2 } { - lappend $args [list "*"] - } - if { [llength $args] == 3 } { - lappend $args [list ""] - } - - # If the option strings are the defaults, or the same as the - # defaults, there is no need to call check_conditional_xfail to - # compare them to the actual options. - if { [string compare [lindex $args 2] "*"] == 0 - && [string compare [lindex $args 3] "" ] == 0 } { - set result 1 - } else { - # The target list might be an effective-target keyword, so replace - # the original list with "*-*-*", since we already know it matches. - set result [check_conditional_xfail [lreplace $args 1 1 "*-*-*"]] - } - - return $result -} - -proc dg-skip-if { args } { - # Verify the number of arguments. The last two are optional. - set args [lreplace $args 0 0] - if { [llength $args] < 2 || [llength $args] > 4 } { - error "dg-skip-if 2: need 2, 3, or 4 arguments" - } - - # Don't bother if we're already skipping the test. - upvar dg-do-what dg-do-what - if { [lindex ${dg-do-what} 1] == "N" } { - return - } - - set selector [list target [lindex $args 1]] - if { [dg-process-target $selector] == "S" } { - if [check-flags $args] { - upvar dg-do-what dg-do-what - set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"] - } - } -} - -# We need to make sure that additional_files and additional_sources -# are both cleared out after every test. It is not enough to clear -# them out *before* the next test run because gcc-target-compile gets -# run directly from some .exp files (outside of any test). (Those -# uses should eventually be eliminated.) - -# Because the DG framework doesn't provide a hook that is run at the -# end of a test, we must replace dg-test with a wrapper. - -if { [info procs saved-dg-test] == [list] } { - rename dg-test saved-dg-test - - proc dg-test { args } { - global additional_files - global additional_sources - global errorInfo - - if { [ catch { eval saved-dg-test $args } errmsg ] } { - set saved_info $errorInfo - set additional_files "" - set additional_sources "" - error $errmsg $saved_info - } - set additional_files "" - set additional_sources "" - } -} - -# Local Variables: -# tcl-indent-level:4 -# End: diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp deleted file mode 100644 index 8999aa4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +++ /dev/null @@ -1,263 +0,0 @@ -# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GCC; see the file COPYING3. If not see -# . - -# This file was contributed by John David Anglin (dave.anglin@nrc-cnrc.gc.ca) - -set orig_environment_saved 0 -set orig_ld_library_path_saved 0 -set orig_ld_run_path_saved 0 -set orig_shlib_path_saved 0 -set orig_ld_libraryn32_path_saved 0 -set orig_ld_library64_path_saved 0 -set orig_ld_library_path_32_saved 0 -set orig_ld_library_path_64_saved 0 -set orig_dyld_library_path_saved 0 - - -####################################### -# proc set_ld_library_path_env_vars { } -####################################### - -proc set_ld_library_path_env_vars { } { - global ld_library_path - global orig_environment_saved - global orig_ld_library_path_saved - global orig_ld_run_path_saved - global orig_shlib_path_saved - global orig_ld_libraryn32_path_saved - global orig_ld_library64_path_saved - global orig_ld_library_path_32_saved - global orig_ld_library_path_64_saved - global orig_dyld_library_path_saved - global orig_ld_library_path - global orig_ld_run_path - global orig_shlib_path - global orig_ld_libraryn32_path - global orig_ld_library64_path - global orig_ld_library_path_32 - global orig_ld_library_path_64 - global orig_dyld_library_path - global GCC_EXEC_PREFIX - - # Set the relocated compiler prefix, but only if the user hasn't specified one. - if { [info exists GCC_EXEC_PREFIX] && ![info exists env(GCC_EXEC_PREFIX)] } { - setenv GCC_EXEC_PREFIX "$GCC_EXEC_PREFIX" - } - - # Setting the ld library path causes trouble when testing cross-compilers. - if { [is_remote target] } { - return - } - - if { $orig_environment_saved == 0 } { - global env - - set orig_environment_saved 1 - - # Save the original environment. - if [info exists env(LD_LIBRARY_PATH)] { - set orig_ld_library_path "$env(LD_LIBRARY_PATH)" - set orig_ld_library_path_saved 1 - } - if [info exists env(LD_RUN_PATH)] { - set orig_ld_run_path "$env(LD_RUN_PATH)" - set orig_ld_run_path_saved 1 - } - if [info exists env(SHLIB_PATH)] { - set orig_shlib_path "$env(SHLIB_PATH)" - set orig_shlib_path_saved 1 - } - if [info exists env(LD_LIBRARYN32_PATH)] { - set orig_ld_libraryn32_path "$env(LD_LIBRARYN32_PATH)" - set orig_ld_libraryn32_path_saved 1 - } - if [info exists env(LD_LIBRARY64_PATH)] { - set orig_ld_library64_path "$env(LD_LIBRARY64_PATH)" - set orig_ld_library64_path_saved 1 - } - if [info exists env(LD_LIBRARY_PATH_32)] { - set orig_ld_library_path_32 "$env(LD_LIBRARY_PATH_32)" - set orig_ld_library_path_32_saved 1 - } - if [info exists env(LD_LIBRARY_PATH_64)] { - set orig_ld_library_path_64 "$env(LD_LIBRARY_PATH_64)" - set orig_ld_library_path_64_saved 1 - } - if [info exists env(DYLD_LIBRARY_PATH)] { - set orig_dyld_library_path "$env(DYLD_LIBRARY_PATH)" - set orig_dyld_library_path_saved 1 - } - } - - # We need to set ld library path in the environment. Currently, - # unix.exp doesn't set the environment correctly for all systems. - # It only sets SHLIB_PATH and LD_LIBRARY_PATH when it executes a - # program. We also need the environment set for compilations, etc. - # - # On IRIX 6, we have to set variables akin to LD_LIBRARY_PATH, but - # called LD_LIBRARYN32_PATH (for the N32 ABI) and LD_LIBRARY64_PATH - # (for the 64-bit ABI). The same applies to Darwin (DYLD_LIBRARY_PATH), - # Solaris 32 bit (LD_LIBRARY_PATH_32), Solaris 64 bit (LD_LIBRARY_PATH_64), - # and HP-UX (SHLIB_PATH). In some cases, the variables are independent - # of LD_LIBRARY_PATH, and in other cases LD_LIBRARY_PATH is used if the - # variable is not defined. - # - # Doing this is somewhat of a hack as ld_library_path gets repeated in - # SHLIB_PATH and LD_LIBRARY_PATH when unix_load sets these variables. - if { $orig_ld_library_path_saved } { - setenv LD_LIBRARY_PATH "$ld_library_path:$orig_ld_library_path" - } else { - setenv LD_LIBRARY_PATH "$ld_library_path" - } - if { $orig_ld_run_path_saved } { - setenv LD_RUN_PATH "$ld_library_path:$orig_ld_run_path" - } else { - setenv LD_RUN_PATH "$ld_library_path" - } - # The default shared library dynamic path search for 64-bit - # HP-UX executables searches LD_LIBRARY_PATH before SHLIB_PATH. - # LD_LIBRARY_PATH isn't used for 32-bit executables. Thus, we - # set LD_LIBRARY_PATH and SHLIB_PATH as if they were independent. - if { $orig_shlib_path_saved } { - setenv SHLIB_PATH "$ld_library_path:$orig_shlib_path" - } else { - setenv SHLIB_PATH "$ld_library_path" - } - if { $orig_ld_libraryn32_path_saved } { - setenv LD_LIBRARYN32_PATH "$ld_library_path:$orig_ld_libraryn32_path" - } elseif { $orig_ld_library_path_saved } { - setenv LD_LIBRARYN32_PATH "$ld_library_path:$orig_ld_library_path" - } else { - setenv LD_LIBRARYN32_PATH "$ld_library_path" - } - if { $orig_ld_library64_path_saved } { - setenv LD_LIBRARY64_PATH "$ld_library_path:$orig_ld_library64_path" - } elseif { $orig_ld_library_path_saved } { - setenv LD_LIBRARY64_PATH "$ld_library_path:$orig_ld_library_path" - } else { - setenv LD_LIBRARY64_PATH "$ld_library_path" - } - if { $orig_ld_library_path_32_saved } { - setenv LD_LIBRARY_PATH_32 "$ld_library_path:$orig_ld_library_path_32" - } elseif { $orig_ld_library_path_saved } { - setenv LD_LIBRARY_PATH_32 "$ld_library_path:$orig_ld_library_path" - } else { - setenv LD_LIBRARY_PATH_32 "$ld_library_path" - } - if { $orig_ld_library_path_64_saved } { - setenv LD_LIBRARY_PATH_64 "$ld_library_path:$orig_ld_library_path_64" - } elseif { $orig_ld_library_path_saved } { - setenv LD_LIBRARY_PATH_64 "$ld_library_path:$orig_ld_library_path" - } else { - setenv LD_LIBRARY_PATH_64 "$ld_library_path" - } - if { $orig_dyld_library_path_saved } { - setenv DYLD_LIBRARY_PATH "$ld_library_path:$orig_dyld_library_path" - } else { - setenv DYLD_LIBRARY_PATH "$ld_library_path" - } - - verbose -log "set_ld_library_path_env_vars: ld_library_path=$ld_library_path" -} - -####################################### -# proc restore_ld_library_path_env_vars { } -####################################### - -proc restore_ld_library_path_env_vars { } { - global orig_environment_saved - global orig_ld_library_path_saved - global orig_ld_run_path_saved - global orig_shlib_path_saved - global orig_ld_libraryn32_path_saved - global orig_ld_library64_path_saved - global orig_ld_library_path_32_saved - global orig_ld_library_path_64_saved - global orig_dyld_library_path_saved - global orig_ld_library_path - global orig_ld_run_path - global orig_shlib_path - global orig_ld_libraryn32_path - global orig_ld_library64_path - global orig_ld_library_path_32 - global orig_ld_library_path_64 - global orig_dyld_library_path - - if { $orig_environment_saved == 0 } { - return - } - - if { $orig_ld_library_path_saved } { - setenv LD_LIBRARY_PATH "$orig_ld_library_path" - } elseif [info exists env(LD_LIBRARY_PATH)] { - unsetenv LD_LIBRARY_PATH - } - if { $orig_ld_run_path_saved } { - setenv LD_RUN_PATH "$orig_ld_run_path" - } elseif [info exists env(LD_RUN_PATH)] { - unsetenv LD_RUN_PATH - } - if { $orig_shlib_path_saved } { - setenv SHLIB_PATH "$orig_shlib_path" - } elseif [info exists env(SHLIB_PATH)] { - unsetenv SHLIB_PATH - } - if { $orig_ld_libraryn32_path_saved } { - setenv LD_LIBRARYN32_PATH "$orig_ld_libraryn32_path" - } elseif [info exists env(LD_LIBRARYN32_PATH)] { - unsetenv LD_LIBRARYN32_PATH - } - if { $orig_ld_library64_path_saved } { - setenv LD_LIBRARY64_PATH "$orig_ld_library64_path" - } elseif [info exists env(LD_LIBRARY64_PATH)] { - unsetenv LD_LIBRARY64_PATH - } - if { $orig_ld_library_path_32_saved } { - setenv LD_LIBRARY_PATH_32 "$orig_ld_library_path_32" - } elseif [info exists env(LD_LIBRARY_PATH_32)] { - unsetenv LD_LIBRARY_PATH_32 - } - if { $orig_ld_library_path_64_saved } { - setenv LD_LIBRARY_PATH_64 "$orig_ld_library_path_64" - } elseif [info exists env(LD_LIBRARY_PATH_64)] { - unsetenv LD_LIBRARY_PATH_64 - } - if { $orig_dyld_library_path_saved } { - setenv DYLD_LIBRARY_PATH "$orig_dyld_library_path" - } elseif [info exists env(DYLD_LIBRARY_PATH)] { - unsetenv DYLD_LIBRARY_PATH - } -} - -####################################### -# proc get_shlib_extension { } -####################################### - -proc get_shlib_extension { } { - global shlib_ext - - if { [ istarget *-*-darwin* ] } { - set shlib_ext "dylib" - } elseif { [ istarget *-*-cygwin* ] || [ istarget *-*-mingw* ] } { - set shlib_ext "dll" - } elseif { [ istarget hppa*-*-hpux* ] } { - set shlib_ext "sl" - } else { - set shlib_ext "so" - } - return $shlib_ext -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/lib/wrapper.exp b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/lib/wrapper.exp deleted file mode 100644 index 4e5ae43..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/lib/wrapper.exp +++ /dev/null @@ -1,45 +0,0 @@ -# Copyright (C) 2004, 2007 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GCC; see the file COPYING3. If not see -# . - -# This file contains GCC-specifics for status wrappers for test programs. - -# ${tool}_maybe_build_wrapper -- Build wrapper object if the target -# needs it. FILENAME is the path to the wrapper file. If there are -# additional arguments, they are command-line options to provide to -# the compiler when compiling FILENAME. - -proc ${tool}_maybe_build_wrapper { filename args } { - global gluefile wrap_flags - - if { [target_info needs_status_wrapper] != "" \ - && [target_info needs_status_wrapper] != "0" \ - && ![info exists gluefile] } { - set saved_wrap_compile_flags [target_info wrap_compile_flags] - set flags [join $args " "] - # The wrapper code may contain code that gcc objects on. This - # became true for dejagnu-1.4.4. The set of warnings and code - # that gcc objects on may change, so just make sure -w is always - # passed to turn off all warnings. - set_currtarget_info wrap_compile_flags \ - "$saved_wrap_compile_flags -w $flags" - set result [build_wrapper $filename] - set_currtarget_info wrap_compile_flags "$saved_wrap_compile_flags" - if { $result != "" } { - set gluefile [lindex $result 0] - set wrap_flags [lindex $result 1] - } - } -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/call.exp b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/call.exp deleted file mode 100644 index 26acd81..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright (C) 2003, 2006, 2009, 2010 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; see the file COPYING3. If not see -# . - -dg-init -libffi-init - -global srcdir subdir - -dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-O0 -W -Wall" "" -dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-O2" "" -dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-O3" "" -dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-Os" "" -dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-O2 -fomit-frame-pointer" "" - -dg-finish - -# Local Variables: -# tcl-indent-level:4 -# End: diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn0.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn0.c deleted file mode 100644 index a579ff6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn0.c +++ /dev/null @@ -1,89 +0,0 @@ -/* Area: closure_call - Purpose: Check multiple values passing from different type. - Also, exceed the limit of gpr and fpr registers on PowerPC - Darwin. - Limitations: none. - PR: none. - Originator: 20030828 */ - - - - -/* { dg-do run } */ -#include "ffitest.h" - -static void -closure_test_fn0(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata) -{ - *(ffi_arg*)resp = - (int)*(unsigned long long *)args[0] + (int)(*(int *)args[1]) + - (int)(*(unsigned long long *)args[2]) + (int)*(int *)args[3] + - (int)(*(signed short *)args[4]) + - (int)(*(unsigned long long *)args[5]) + - (int)*(int *)args[6] + (int)(*(int *)args[7]) + - (int)(*(double *)args[8]) + (int)*(int *)args[9] + - (int)(*(int *)args[10]) + (int)(*(float *)args[11]) + - (int)*(int *)args[12] + (int)(*(int *)args[13]) + - (int)(*(int *)args[14]) + *(int *)args[15] + (intptr_t)userdata; - - printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", - (int)*(unsigned long long *)args[0], (int)(*(int *)args[1]), - (int)(*(unsigned long long *)args[2]), - (int)*(int *)args[3], (int)(*(signed short *)args[4]), - (int)(*(unsigned long long *)args[5]), - (int)*(int *)args[6], (int)(*(int *)args[7]), - (int)(*(double *)args[8]), (int)*(int *)args[9], - (int)(*(int *)args[10]), (int)(*(float *)args[11]), - (int)*(int *)args[12], (int)(*(int *)args[13]), - (int)(*(int *)args[14]),*(int *)args[15], - (int)(intptr_t)userdata, (int)*(ffi_arg *)resp); - -} - -typedef int (*closure_test_type0)(unsigned long long, int, unsigned long long, - int, signed short, unsigned long long, int, - int, double, int, int, float, int, int, - int, int); - -int main (void) -{ - ffi_cif cif; - void * code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[17]; - int res; - - cl_arg_types[0] = &ffi_type_uint64; - cl_arg_types[1] = &ffi_type_sint; - cl_arg_types[2] = &ffi_type_uint64; - cl_arg_types[3] = &ffi_type_sint; - cl_arg_types[4] = &ffi_type_sshort; - cl_arg_types[5] = &ffi_type_uint64; - cl_arg_types[6] = &ffi_type_sint; - cl_arg_types[7] = &ffi_type_sint; - cl_arg_types[8] = &ffi_type_double; - cl_arg_types[9] = &ffi_type_sint; - cl_arg_types[10] = &ffi_type_sint; - cl_arg_types[11] = &ffi_type_float; - cl_arg_types[12] = &ffi_type_sint; - cl_arg_types[13] = &ffi_type_sint; - cl_arg_types[14] = &ffi_type_sint; - cl_arg_types[15] = &ffi_type_sint; - cl_arg_types[16] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, - &ffi_type_sint, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn0, - (void *) 3 /* userdata */, code) == FFI_OK); - - res = (*((closure_test_type0)code)) - (1LL, 2, 3LL, 4, 127, 429LL, 7, 8, 9.5, 10, 11, 12, 13, - 19, 21, 1); - /* { dg-output "1 2 3 4 127 429 7 8 9 10 11 12 13 19 21 1 3: 680" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 680" } */ - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn1.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn1.c deleted file mode 100644 index 9123173..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn1.c +++ /dev/null @@ -1,81 +0,0 @@ -/* Area: closure_call. - Purpose: Check multiple values passing from different type. - Also, exceed the limit of gpr and fpr registers on PowerPC - Darwin. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - - -static void closure_test_fn1(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata) -{ - *(ffi_arg*)resp = - (int)*(float *)args[0] +(int)(*(float *)args[1]) + - (int)(*(float *)args[2]) + (int)*(float *)args[3] + - (int)(*(signed short *)args[4]) + (int)(*(float *)args[5]) + - (int)*(float *)args[6] + (int)(*(int *)args[7]) + - (int)(*(double*)args[8]) + (int)*(int *)args[9] + - (int)(*(int *)args[10]) + (int)(*(float *)args[11]) + - (int)*(int *)args[12] + (int)(*(int *)args[13]) + - (int)(*(int *)args[14]) + *(int *)args[15] + (intptr_t)userdata; - - printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", - (int)*(float *)args[0], (int)(*(float *)args[1]), - (int)(*(float *)args[2]), (int)*(float *)args[3], - (int)(*(signed short *)args[4]), (int)(*(float *)args[5]), - (int)*(float *)args[6], (int)(*(int *)args[7]), - (int)(*(double *)args[8]), (int)*(int *)args[9], - (int)(*(int *)args[10]), (int)(*(float *)args[11]), - (int)*(int *)args[12], (int)(*(int *)args[13]), - (int)(*(int *)args[14]), *(int *)args[15], - (int)(intptr_t)userdata, (int)*(ffi_arg *)resp); -} - -typedef int (*closure_test_type1)(float, float, float, float, signed short, - float, float, int, double, int, int, float, - int, int, int, int); -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[17]; - int res; - - cl_arg_types[0] = &ffi_type_float; - cl_arg_types[1] = &ffi_type_float; - cl_arg_types[2] = &ffi_type_float; - cl_arg_types[3] = &ffi_type_float; - cl_arg_types[4] = &ffi_type_sshort; - cl_arg_types[5] = &ffi_type_float; - cl_arg_types[6] = &ffi_type_float; - cl_arg_types[7] = &ffi_type_sint; - cl_arg_types[8] = &ffi_type_double; - cl_arg_types[9] = &ffi_type_sint; - cl_arg_types[10] = &ffi_type_sint; - cl_arg_types[11] = &ffi_type_float; - cl_arg_types[12] = &ffi_type_sint; - cl_arg_types[13] = &ffi_type_sint; - cl_arg_types[14] = &ffi_type_sint; - cl_arg_types[15] = &ffi_type_sint; - cl_arg_types[16] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, - &ffi_type_sint, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn1, - (void *) 3 /* userdata */, code) == FFI_OK); - - res = (*((closure_test_type1)code)) - (1.1, 2.2, 3.3, 4.4, 127, 5.5, 6.6, 8, 9, 10, 11, 12.0, 13, - 19, 21, 1); - /* { dg-output "1 2 3 4 127 5 6 8 9 10 11 12 13 19 21 1 3: 255" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 255" } */ - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn2.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn2.c deleted file mode 100644 index 08ff9d9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn2.c +++ /dev/null @@ -1,81 +0,0 @@ -/* Area: closure_call - Purpose: Check multiple values passing from different type. - Also, exceed the limit of gpr and fpr registers on PowerPC - Darwin. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static void closure_test_fn2(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata) -{ - *(ffi_arg*)resp = - (int)*(double *)args[0] +(int)(*(double *)args[1]) + - (int)(*(double *)args[2]) + (int)*(double *)args[3] + - (int)(*(signed short *)args[4]) + (int)(*(double *)args[5]) + - (int)*(double *)args[6] + (int)(*(int *)args[7]) + - (int)(*(double *)args[8]) + (int)*(int *)args[9] + - (int)(*(int *)args[10]) + (int)(*(float *)args[11]) + - (int)*(int *)args[12] + (int)(*(float *)args[13]) + - (int)(*(int *)args[14]) + *(int *)args[15] + (intptr_t)userdata; - - printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", - (int)*(double *)args[0], (int)(*(double *)args[1]), - (int)(*(double *)args[2]), (int)*(double *)args[3], - (int)(*(signed short *)args[4]), (int)(*(double *)args[5]), - (int)*(double *)args[6], (int)(*(int *)args[7]), - (int)(*(double*)args[8]), (int)*(int *)args[9], - (int)(*(int *)args[10]), (int)(*(float *)args[11]), - (int)*(int *)args[12], (int)(*(float *)args[13]), - (int)(*(int *)args[14]), *(int *)args[15], (int)(intptr_t)userdata, - (int)*(ffi_arg *)resp); -} - -typedef int (*closure_test_type2)(double, double, double, double, signed short, - double, double, int, double, int, int, float, - int, float, int, int); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[17]; - int res; - - cl_arg_types[0] = &ffi_type_double; - cl_arg_types[1] = &ffi_type_double; - cl_arg_types[2] = &ffi_type_double; - cl_arg_types[3] = &ffi_type_double; - cl_arg_types[4] = &ffi_type_sshort; - cl_arg_types[5] = &ffi_type_double; - cl_arg_types[6] = &ffi_type_double; - cl_arg_types[7] = &ffi_type_sint; - cl_arg_types[8] = &ffi_type_double; - cl_arg_types[9] = &ffi_type_sint; - cl_arg_types[10] = &ffi_type_sint; - cl_arg_types[11] = &ffi_type_float; - cl_arg_types[12] = &ffi_type_sint; - cl_arg_types[13] = &ffi_type_float; - cl_arg_types[14] = &ffi_type_sint; - cl_arg_types[15] = &ffi_type_sint; - cl_arg_types[16] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, - &ffi_type_sint, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn2, - (void *) 3 /* userdata */, code) == FFI_OK); - - res = (*((closure_test_type2)code)) - (1, 2, 3, 4, 127, 5, 6, 8, 9, 10, 11, 12.0, 13, - 19.0, 21, 1); - /* { dg-output "1 2 3 4 127 5 6 8 9 10 11 12 13 19 21 1 3: 255" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 255" } */ - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn3.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn3.c deleted file mode 100644 index 9b54d80..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn3.c +++ /dev/null @@ -1,82 +0,0 @@ -/* Area: closure_call - Purpose: Check multiple values passing from different type. - Also, exceed the limit of gpr and fpr registers on PowerPC - Darwin. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static void closure_test_fn3(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata) - { - *(ffi_arg*)resp = - (int)*(float *)args[0] +(int)(*(float *)args[1]) + - (int)(*(float *)args[2]) + (int)*(float *)args[3] + - (int)(*(float *)args[4]) + (int)(*(float *)args[5]) + - (int)*(float *)args[6] + (int)(*(float *)args[7]) + - (int)(*(double *)args[8]) + (int)*(int *)args[9] + - (int)(*(float *)args[10]) + (int)(*(float *)args[11]) + - (int)*(int *)args[12] + (int)(*(float *)args[13]) + - (int)(*(float *)args[14]) + *(int *)args[15] + (intptr_t)userdata; - - printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", - (int)*(float *)args[0], (int)(*(float *)args[1]), - (int)(*(float *)args[2]), (int)*(float *)args[3], - (int)(*(float *)args[4]), (int)(*(float *)args[5]), - (int)*(float *)args[6], (int)(*(float *)args[7]), - (int)(*(double *)args[8]), (int)*(int *)args[9], - (int)(*(float *)args[10]), (int)(*(float *)args[11]), - (int)*(int *)args[12], (int)(*(float *)args[13]), - (int)(*(float *)args[14]), *(int *)args[15], (int)(intptr_t)userdata, - (int)*(ffi_arg *)resp); - - } - -typedef int (*closure_test_type3)(float, float, float, float, float, float, - float, float, double, int, float, float, int, - float, float, int); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[17]; - int res; - - cl_arg_types[0] = &ffi_type_float; - cl_arg_types[1] = &ffi_type_float; - cl_arg_types[2] = &ffi_type_float; - cl_arg_types[3] = &ffi_type_float; - cl_arg_types[4] = &ffi_type_float; - cl_arg_types[5] = &ffi_type_float; - cl_arg_types[6] = &ffi_type_float; - cl_arg_types[7] = &ffi_type_float; - cl_arg_types[8] = &ffi_type_double; - cl_arg_types[9] = &ffi_type_sint; - cl_arg_types[10] = &ffi_type_float; - cl_arg_types[11] = &ffi_type_float; - cl_arg_types[12] = &ffi_type_sint; - cl_arg_types[13] = &ffi_type_float; - cl_arg_types[14] = &ffi_type_float; - cl_arg_types[15] = &ffi_type_sint; - cl_arg_types[16] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, - &ffi_type_sint, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn3, - (void *) 3 /* userdata */, code) == FFI_OK); - - res = (*((closure_test_type3)code)) - (1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9, 10, 11.11, 12.0, 13, - 19.19, 21.21, 1); - /* { dg-output "1 2 3 4 5 6 7 8 9 10 11 12 13 19 21 1 3: 135" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 135" } */ - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn4.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn4.c deleted file mode 100644 index d4a1530..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn4.c +++ /dev/null @@ -1,89 +0,0 @@ -/* Area: closure_call - Purpose: Check multiple long long values passing. - Also, exceed the limit of gpr and fpr registers on PowerPC - Darwin. - Limitations: none. - PR: none. - Originator: 20031026 */ - -/* { dg-do run } */ - -#include "ffitest.h" - -static void -closure_test_fn0(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata) -{ - *(ffi_arg*)resp = - (int)*(unsigned long long *)args[0] + (int)*(unsigned long long *)args[1] + - (int)*(unsigned long long *)args[2] + (int)*(unsigned long long *)args[3] + - (int)*(unsigned long long *)args[4] + (int)*(unsigned long long *)args[5] + - (int)*(unsigned long long *)args[6] + (int)*(unsigned long long *)args[7] + - (int)*(unsigned long long *)args[8] + (int)*(unsigned long long *)args[9] + - (int)*(unsigned long long *)args[10] + - (int)*(unsigned long long *)args[11] + - (int)*(unsigned long long *)args[12] + - (int)*(unsigned long long *)args[13] + - (int)*(unsigned long long *)args[14] + - *(int *)args[15] + (intptr_t)userdata; - - printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", - (int)*(unsigned long long *)args[0], - (int)*(unsigned long long *)args[1], - (int)*(unsigned long long *)args[2], - (int)*(unsigned long long *)args[3], - (int)*(unsigned long long *)args[4], - (int)*(unsigned long long *)args[5], - (int)*(unsigned long long *)args[6], - (int)*(unsigned long long *)args[7], - (int)*(unsigned long long *)args[8], - (int)*(unsigned long long *)args[9], - (int)*(unsigned long long *)args[10], - (int)*(unsigned long long *)args[11], - (int)*(unsigned long long *)args[12], - (int)*(unsigned long long *)args[13], - (int)*(unsigned long long *)args[14], - *(int *)args[15], - (int)(intptr_t)userdata, (int)*(ffi_arg *)resp); - -} - -typedef int (*closure_test_type0)(unsigned long long, unsigned long long, - unsigned long long, unsigned long long, - unsigned long long, unsigned long long, - unsigned long long, unsigned long long, - unsigned long long, unsigned long long, - unsigned long long, unsigned long long, - unsigned long long, unsigned long long, - unsigned long long, int); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[17]; - int i, res; - - for (i = 0; i < 15; i++) { - cl_arg_types[i] = &ffi_type_uint64; - } - cl_arg_types[15] = &ffi_type_sint; - cl_arg_types[16] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, - &ffi_type_sint, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn0, - (void *) 3 /* userdata */, code) == FFI_OK); - - res = (*((closure_test_type0)code)) - (1LL, 2LL, 3LL, 4LL, 127LL, 429LL, 7LL, 8LL, 9LL, 10LL, 11LL, 12LL, - 13LL, 19LL, 21LL, 1); - /* { dg-output "1 2 3 4 127 429 7 8 9 10 11 12 13 19 21 1 3: 680" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 680" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn5.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn5.c deleted file mode 100644 index 9907442..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn5.c +++ /dev/null @@ -1,92 +0,0 @@ -/* Area: closure_call - Purpose: Check multiple long long values passing. - Exceed the limit of gpr registers on PowerPC - Darwin. - Limitations: none. - PR: none. - Originator: 20031026 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static void -closure_test_fn5(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata) -{ - *(ffi_arg*)resp = - (int)*(unsigned long long *)args[0] + (int)*(unsigned long long *)args[1] + - (int)*(unsigned long long *)args[2] + (int)*(unsigned long long *)args[3] + - (int)*(unsigned long long *)args[4] + (int)*(unsigned long long *)args[5] + - (int)*(unsigned long long *)args[6] + (int)*(unsigned long long *)args[7] + - (int)*(unsigned long long *)args[8] + (int)*(unsigned long long *)args[9] + - (int)*(int *)args[10] + - (int)*(unsigned long long *)args[11] + - (int)*(unsigned long long *)args[12] + - (int)*(unsigned long long *)args[13] + - (int)*(unsigned long long *)args[14] + - *(int *)args[15] + (intptr_t)userdata; - - printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", - (int)*(unsigned long long *)args[0], - (int)*(unsigned long long *)args[1], - (int)*(unsigned long long *)args[2], - (int)*(unsigned long long *)args[3], - (int)*(unsigned long long *)args[4], - (int)*(unsigned long long *)args[5], - (int)*(unsigned long long *)args[6], - (int)*(unsigned long long *)args[7], - (int)*(unsigned long long *)args[8], - (int)*(unsigned long long *)args[9], - (int)*(int *)args[10], - (int)*(unsigned long long *)args[11], - (int)*(unsigned long long *)args[12], - (int)*(unsigned long long *)args[13], - (int)*(unsigned long long *)args[14], - *(int *)args[15], - (int)(intptr_t)userdata, (int)*(ffi_arg *)resp); - -} - -typedef int (*closure_test_type0)(unsigned long long, unsigned long long, - unsigned long long, unsigned long long, - unsigned long long, unsigned long long, - unsigned long long, unsigned long long, - unsigned long long, unsigned long long, - int, unsigned long long, - unsigned long long, unsigned long long, - unsigned long long, int); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[17]; - int i, res; - - for (i = 0; i < 10; i++) { - cl_arg_types[i] = &ffi_type_uint64; - } - cl_arg_types[10] = &ffi_type_sint; - for (i = 11; i < 15; i++) { - cl_arg_types[i] = &ffi_type_uint64; - } - cl_arg_types[15] = &ffi_type_sint; - cl_arg_types[16] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, - &ffi_type_sint, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn5, - (void *) 3 /* userdata */, code) == FFI_OK); - - res = (*((closure_test_type0)code)) - (1LL, 2LL, 3LL, 4LL, 127LL, 429LL, 7LL, 8LL, 9LL, 10LL, 11, 12LL, - 13LL, 19LL, 21LL, 1); - /* { dg-output "1 2 3 4 127 429 7 8 9 10 11 12 13 19 21 1 3: 680" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 680" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn6.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn6.c deleted file mode 100644 index 73c54fd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn6.c +++ /dev/null @@ -1,90 +0,0 @@ -/* Area: closure_call - Purpose: Check multiple values passing from different type. - Also, exceed the limit of gpr and fpr registers on PowerPC. - Limitations: none. - PR: PR23404 - Originator: 20050830 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static void -closure_test_fn0(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata) -{ - *(ffi_arg*)resp = - (int)*(unsigned long long *)args[0] + - (int)(*(unsigned long long *)args[1]) + - (int)(*(unsigned long long *)args[2]) + - (int)*(unsigned long long *)args[3] + - (int)(*(int *)args[4]) + (int)(*(double *)args[5]) + - (int)*(double *)args[6] + (int)(*(float *)args[7]) + - (int)(*(double *)args[8]) + (int)*(double *)args[9] + - (int)(*(int *)args[10]) + (int)(*(float *)args[11]) + - (int)*(int *)args[12] + (int)(*(int *)args[13]) + - (int)(*(double *)args[14]) + (int)*(double *)args[15] + - (intptr_t)userdata; - - printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", - (int)*(unsigned long long *)args[0], - (int)(*(unsigned long long *)args[1]), - (int)(*(unsigned long long *)args[2]), - (int)*(unsigned long long *)args[3], - (int)(*(int *)args[4]), (int)(*(double *)args[5]), - (int)*(double *)args[6], (int)(*(float *)args[7]), - (int)(*(double *)args[8]), (int)*(double *)args[9], - (int)(*(int *)args[10]), (int)(*(float *)args[11]), - (int)*(int *)args[12], (int)(*(int *)args[13]), - (int)(*(double *)args[14]), (int)(*(double *)args[15]), - (int)(intptr_t)userdata, (int)*(ffi_arg *)resp); - -} - -typedef int (*closure_test_type0)(unsigned long long, - unsigned long long, - unsigned long long, - unsigned long long, - int, double, double, float, double, double, - int, float, int, int, double, double); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[17]; - int res; - - cl_arg_types[0] = &ffi_type_uint64; - cl_arg_types[1] = &ffi_type_uint64; - cl_arg_types[2] = &ffi_type_uint64; - cl_arg_types[3] = &ffi_type_uint64; - cl_arg_types[4] = &ffi_type_sint; - cl_arg_types[5] = &ffi_type_double; - cl_arg_types[6] = &ffi_type_double; - cl_arg_types[7] = &ffi_type_float; - cl_arg_types[8] = &ffi_type_double; - cl_arg_types[9] = &ffi_type_double; - cl_arg_types[10] = &ffi_type_sint; - cl_arg_types[11] = &ffi_type_float; - cl_arg_types[12] = &ffi_type_sint; - cl_arg_types[13] = &ffi_type_sint; - cl_arg_types[14] = &ffi_type_double; - cl_arg_types[15] = &ffi_type_double; - cl_arg_types[16] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, - &ffi_type_sint, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn0, - (void *) 3 /* userdata */, code) == FFI_OK); - - res = (*((closure_test_type0)code)) - (1, 2, 3, 4, 127, 429., 7., 8., 9.5, 10., 11, 12., 13, - 19, 21., 1.); - /* { dg-output "1 2 3 4 127 429 7 8 9 10 11 12 13 19 21 1 3: 680" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 680" } */ - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_loc_fn0.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_loc_fn0.c deleted file mode 100644 index b3afa0b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_loc_fn0.c +++ /dev/null @@ -1,95 +0,0 @@ -/* Area: closure_call - Purpose: Check multiple values passing from different type. - Also, exceed the limit of gpr and fpr registers on PowerPC - Darwin. - Limitations: none. - PR: none. - Originator: 20030828 */ - - - - -/* { dg-do run } */ -#include "ffitest.h" - -static void -closure_loc_test_fn0(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata) -{ - *(ffi_arg*)resp = - (int)*(unsigned long long *)args[0] + (int)(*(int *)args[1]) + - (int)(*(unsigned long long *)args[2]) + (int)*(int *)args[3] + - (int)(*(signed short *)args[4]) + - (int)(*(unsigned long long *)args[5]) + - (int)*(int *)args[6] + (int)(*(int *)args[7]) + - (int)(*(double *)args[8]) + (int)*(int *)args[9] + - (int)(*(int *)args[10]) + (int)(*(float *)args[11]) + - (int)*(int *)args[12] + (int)(*(int *)args[13]) + - (int)(*(int *)args[14]) + *(int *)args[15] + (intptr_t)userdata; - - printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", - (int)*(unsigned long long *)args[0], (int)(*(int *)args[1]), - (int)(*(unsigned long long *)args[2]), - (int)*(int *)args[3], (int)(*(signed short *)args[4]), - (int)(*(unsigned long long *)args[5]), - (int)*(int *)args[6], (int)(*(int *)args[7]), - (int)(*(double *)args[8]), (int)*(int *)args[9], - (int)(*(int *)args[10]), (int)(*(float *)args[11]), - (int)*(int *)args[12], (int)(*(int *)args[13]), - (int)(*(int *)args[14]),*(int *)args[15], - (int)(intptr_t)userdata, (int)*(ffi_arg *)resp); - -} - -typedef int (*closure_loc_test_type0)(unsigned long long, int, unsigned long long, - int, signed short, unsigned long long, int, - int, double, int, int, float, int, int, - int, int); - -int main (void) -{ - ffi_cif cif; - ffi_closure *pcl; - ffi_type * cl_arg_types[17]; - int res; - void *codeloc; - - cl_arg_types[0] = &ffi_type_uint64; - cl_arg_types[1] = &ffi_type_sint; - cl_arg_types[2] = &ffi_type_uint64; - cl_arg_types[3] = &ffi_type_sint; - cl_arg_types[4] = &ffi_type_sshort; - cl_arg_types[5] = &ffi_type_uint64; - cl_arg_types[6] = &ffi_type_sint; - cl_arg_types[7] = &ffi_type_sint; - cl_arg_types[8] = &ffi_type_double; - cl_arg_types[9] = &ffi_type_sint; - cl_arg_types[10] = &ffi_type_sint; - cl_arg_types[11] = &ffi_type_float; - cl_arg_types[12] = &ffi_type_sint; - cl_arg_types[13] = &ffi_type_sint; - cl_arg_types[14] = &ffi_type_sint; - cl_arg_types[15] = &ffi_type_sint; - cl_arg_types[16] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, - &ffi_type_sint, cl_arg_types) == FFI_OK); - - pcl = ffi_closure_alloc(sizeof(ffi_closure), &codeloc); - CHECK(pcl != NULL); - CHECK(codeloc != NULL); - - CHECK(ffi_prep_closure_loc(pcl, &cif, closure_loc_test_fn0, - (void *) 3 /* userdata */, codeloc) == FFI_OK); - - CHECK(memcmp(pcl, codeloc, sizeof(*pcl)) == 0); - - res = (*((closure_loc_test_type0)codeloc)) - (1LL, 2, 3LL, 4, 127, 429LL, 7, 8, 9.5, 10, 11, 12, 13, - 19, 21, 1); - /* { dg-output "1 2 3 4 127 429 7 8 9 10 11 12 13 19 21 1 3: 680" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 680" } */ - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_stdcall.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_stdcall.c deleted file mode 100644 index 6bfcc1f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/closure_stdcall.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Area: closure_call (stdcall convention) - Purpose: Check handling when caller expects stdcall callee - Limitations: none. - PR: none. - Originator: */ - -/* { dg-do run { target i?86-*-cygwin* i?86-*-mingw* } } */ -#include "ffitest.h" - -static void -closure_test_stdcall(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata) -{ - *(ffi_arg*)resp = - (int)*(int *)args[0] + (int)(*(int *)args[1]) - + (int)(*(int *)args[2]) + (int)(*(int *)args[3]) - + (int)(intptr_t)userdata; - - printf("%d %d %d %d: %d\n", - (int)*(int *)args[0], (int)(*(int *)args[1]), - (int)(*(int *)args[2]), (int)(*(int *)args[3]), - (int)*(ffi_arg *)resp); - -} - -typedef int (__stdcall *closure_test_type0)(int, int, int, int); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[17]; - int res; - void* sp_pre; - void* sp_post; - char buf[1024]; - - cl_arg_types[0] = &ffi_type_uint; - cl_arg_types[1] = &ffi_type_uint; - cl_arg_types[2] = &ffi_type_uint; - cl_arg_types[3] = &ffi_type_uint; - cl_arg_types[4] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_STDCALL, 4, - &ffi_type_sint, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_stdcall, - (void *) 3 /* userdata */, code) == FFI_OK); - - asm volatile (" movl %%esp,%0" : "=g" (sp_pre)); - res = (*(closure_test_type0)code)(0, 1, 2, 3); - asm volatile (" movl %%esp,%0" : "=g" (sp_post)); - /* { dg-output "0 1 2 3: 9" } */ - - printf("res: %d\n",res); - /* { dg-output "\nres: 9" } */ - - sprintf(buf, "mismatch: pre=%p vs post=%p", sp_pre, sp_post); - printf("stack pointer %s\n", (sp_pre == sp_post ? "match" : buf)); - /* { dg-output "\nstack pointer match" } */ - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c deleted file mode 100644 index f0a334f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +++ /dev/null @@ -1,94 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_12byte { - int a; - int b; - int c; -} cls_struct_12byte; - -cls_struct_12byte cls_struct_12byte_fn(struct cls_struct_12byte b1, - struct cls_struct_12byte b2) -{ - struct cls_struct_12byte result; - - result.a = b1.a + b2.a; - result.b = b1.b + b2.b; - result.c = b1.c + b2.c; - - printf("%d %d %d %d %d %d: %d %d %d\n", b1.a, b1.b, b1.c, b2.a, b2.b, b2.c, - result.a, result.b, result.c); - - return result; -} - -static void cls_struct_12byte_gn(ffi_cif* cif __UNUSED__, void* resp, - void** args , void* userdata __UNUSED__) -{ - struct cls_struct_12byte b1, b2; - - b1 = *(struct cls_struct_12byte*)(args[0]); - b2 = *(struct cls_struct_12byte*)(args[1]); - - *(cls_struct_12byte*)resp = cls_struct_12byte_fn(b1, b2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_12byte h_dbl = { 7, 4, 9 }; - struct cls_struct_12byte j_dbl = { 1, 5, 3 }; - struct cls_struct_12byte res_dbl; - - cls_struct_fields[0] = &ffi_type_sint; - cls_struct_fields[1] = &ffi_type_sint; - cls_struct_fields[2] = &ffi_type_sint; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &h_dbl; - args_dbl[1] = &j_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_12byte_fn), &res_dbl, args_dbl); - /* { dg-output "7 4 9 1 5 3: 8 9 12" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 8 9 12" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_12byte_gn, NULL, code) == FFI_OK); - - res_dbl.a = 0; - res_dbl.b = 0; - res_dbl.c = 0; - - res_dbl = ((cls_struct_12byte(*)(cls_struct_12byte, cls_struct_12byte))(code))(h_dbl, j_dbl); - /* { dg-output "\n7 4 9 1 5 3: 8 9 12" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 8 9 12" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c deleted file mode 100644 index 9b9292a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +++ /dev/null @@ -1,95 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_16byte { - int a; - double b; - int c; -} cls_struct_16byte; - -cls_struct_16byte cls_struct_16byte_fn(struct cls_struct_16byte b1, - struct cls_struct_16byte b2) -{ - struct cls_struct_16byte result; - - result.a = b1.a + b2.a; - result.b = b1.b + b2.b; - result.c = b1.c + b2.c; - - printf("%d %g %d %d %g %d: %d %g %d\n", b1.a, b1.b, b1.c, b2.a, b2.b, b2.c, - result.a, result.b, result.c); - - return result; -} - -static void cls_struct_16byte_gn(ffi_cif* cif __UNUSED__, void* resp, - void** args, void* userdata __UNUSED__) -{ - struct cls_struct_16byte b1, b2; - - b1 = *(struct cls_struct_16byte*)(args[0]); - b2 = *(struct cls_struct_16byte*)(args[1]); - - *(cls_struct_16byte*)resp = cls_struct_16byte_fn(b1, b2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_16byte h_dbl = { 7, 8.0, 9 }; - struct cls_struct_16byte j_dbl = { 1, 9.0, 3 }; - struct cls_struct_16byte res_dbl; - - cls_struct_fields[0] = &ffi_type_sint; - cls_struct_fields[1] = &ffi_type_double; - cls_struct_fields[2] = &ffi_type_sint; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &h_dbl; - args_dbl[1] = &j_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_16byte_fn), &res_dbl, args_dbl); - /* { dg-output "7 8 9 1 9 3: 8 17 12" } */ - printf("res: %d %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 8 17 12" } */ - - res_dbl.a = 0; - res_dbl.b = 0.0; - res_dbl.c = 0; - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_16byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_16byte(*)(cls_struct_16byte, cls_struct_16byte))(code))(h_dbl, j_dbl); - /* { dg-output "\n7 8 9 1 9 3: 8 17 12" } */ - printf("res: %d %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 8 17 12" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c deleted file mode 100644 index 40c8c6d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +++ /dev/null @@ -1,96 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Double alignment check on darwin. - Limitations: none. - PR: none. - Originator: 20030915 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_18byte { - double a; - unsigned char b; - unsigned char c; - double d; -} cls_struct_18byte; - -cls_struct_18byte cls_struct_18byte_fn(struct cls_struct_18byte a1, - struct cls_struct_18byte a2) -{ - struct cls_struct_18byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - result.d = a1.d + a2.d; - - - printf("%g %d %d %g %g %d %d %g: %g %d %d %g\n", a1.a, a1.b, a1.c, a1.d, - a2.a, a2.b, a2.c, a2.d, - result.a, result.b, result.c, result.d); - return result; -} - -static void -cls_struct_18byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct cls_struct_18byte a1, a2; - - a1 = *(struct cls_struct_18byte*)(args[0]); - a2 = *(struct cls_struct_18byte*)(args[1]); - - *(cls_struct_18byte*)resp = cls_struct_18byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[3]; - ffi_type* cls_struct_fields[5]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[3]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_18byte g_dbl = { 1.0, 127, 126, 3.0 }; - struct cls_struct_18byte f_dbl = { 4.0, 125, 124, 5.0 }; - struct cls_struct_18byte res_dbl; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = &ffi_type_double; - cls_struct_fields[4] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_18byte_fn), &res_dbl, args_dbl); - /* { dg-output "1 127 126 3 4 125 124 5: 5 252 250 8" } */ - printf("res: %g %d %d %g\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); - /* { dg-output "\nres: 5 252 250 8" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_18byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_18byte(*)(cls_struct_18byte, cls_struct_18byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n1 127 126 3 4 125 124 5: 5 252 250 8" } */ - printf("res: %g %d %d %g\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); - /* { dg-output "\nres: 5 252 250 8" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c deleted file mode 100644 index aa64248..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +++ /dev/null @@ -1,102 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Double alignment check on darwin. - Limitations: none. - PR: none. - Originator: 20030915 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_19byte { - double a; - unsigned char b; - unsigned char c; - double d; - unsigned char e; -} cls_struct_19byte; - -cls_struct_19byte cls_struct_19byte_fn(struct cls_struct_19byte a1, - struct cls_struct_19byte a2) -{ - struct cls_struct_19byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - result.d = a1.d + a2.d; - result.e = a1.e + a2.e; - - - printf("%g %d %d %g %d %g %d %d %g %d: %g %d %d %g %d\n", - a1.a, a1.b, a1.c, a1.d, a1.e, - a2.a, a2.b, a2.c, a2.d, a2.e, - result.a, result.b, result.c, result.d, result.e); - return result; -} - -static void -cls_struct_19byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct cls_struct_19byte a1, a2; - - a1 = *(struct cls_struct_19byte*)(args[0]); - a2 = *(struct cls_struct_19byte*)(args[1]); - - *(cls_struct_19byte*)resp = cls_struct_19byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[3]; - ffi_type* cls_struct_fields[6]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[3]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_19byte g_dbl = { 1.0, 127, 126, 3.0, 120 }; - struct cls_struct_19byte f_dbl = { 4.0, 125, 124, 5.0, 119 }; - struct cls_struct_19byte res_dbl; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = &ffi_type_double; - cls_struct_fields[4] = &ffi_type_uchar; - cls_struct_fields[5] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_19byte_fn), &res_dbl, args_dbl); - /* { dg-output "1 127 126 3 120 4 125 124 5 119: 5 252 250 8 239" } */ - printf("res: %g %d %d %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e); - /* { dg-output "\nres: 5 252 250 8 239" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_19byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_19byte(*)(cls_struct_19byte, cls_struct_19byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n1 127 126 3 120 4 125 124 5 119: 5 252 250 8 239" } */ - printf("res: %g %d %d %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e); - /* { dg-output "\nres: 5 252 250 8 239" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c deleted file mode 100644 index b9402d6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +++ /dev/null @@ -1,89 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Especially with small structures which may fit in one - register. Depending on the ABI. - Limitations: none. - PR: none. - Originator: 20030902 */ - - - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_1_1byte { - unsigned char a; -} cls_struct_1_1byte; - -cls_struct_1_1byte cls_struct_1_1byte_fn(struct cls_struct_1_1byte a1, - struct cls_struct_1_1byte a2) -{ - struct cls_struct_1_1byte result; - - result.a = a1.a + a2.a; - - printf("%d %d: %d\n", a1.a, a2.a, result.a); - - return result; -} - -static void -cls_struct_1_1byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_1_1byte a1, a2; - - a1 = *(struct cls_struct_1_1byte*)(args[0]); - a2 = *(struct cls_struct_1_1byte*)(args[1]); - - *(cls_struct_1_1byte*)resp = cls_struct_1_1byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[2]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_1_1byte g_dbl = { 12 }; - struct cls_struct_1_1byte f_dbl = { 178 }; - struct cls_struct_1_1byte res_dbl; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_1_1byte_fn), &res_dbl, args_dbl); - /* { dg-output "12 178: 190" } */ - printf("res: %d\n", res_dbl.a); - /* { dg-output "\nres: 190" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_1_1byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_1_1byte(*)(cls_struct_1_1byte, cls_struct_1_1byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 178: 190" } */ - printf("res: %d\n", res_dbl.a); - /* { dg-output "\nres: 190" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c deleted file mode 100644 index 80dd7ac..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_20byte { - double a; - double b; - int c; -} cls_struct_20byte; - -cls_struct_20byte cls_struct_20byte_fn(struct cls_struct_20byte a1, - struct cls_struct_20byte a2) -{ - struct cls_struct_20byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%g %g %d %g %g %d: %g %g %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, - result.a, result.b, result.c); - return result; -} - -static void -cls_struct_20byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct cls_struct_20byte a1, a2; - - a1 = *(struct cls_struct_20byte*)(args[0]); - a2 = *(struct cls_struct_20byte*)(args[1]); - - *(cls_struct_20byte*)resp = cls_struct_20byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_20byte g_dbl = { 1.0, 2.0, 3 }; - struct cls_struct_20byte f_dbl = { 4.0, 5.0, 7 }; - struct cls_struct_20byte res_dbl; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_double; - cls_struct_fields[2] = &ffi_type_sint; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_20byte_fn), &res_dbl, args_dbl); - /* { dg-output "1 2 3 4 5 7: 5 7 10" } */ - printf("res: %g %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 5 7 10" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_20byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_20byte(*)(cls_struct_20byte, cls_struct_20byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n1 2 3 4 5 7: 5 7 10" } */ - printf("res: %g %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 5 7 10" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c deleted file mode 100644 index 50bcbbf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +++ /dev/null @@ -1,93 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20030828 */ - - - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_20byte { - int a; - double b; - double c; -} cls_struct_20byte; - -cls_struct_20byte cls_struct_20byte_fn(struct cls_struct_20byte a1, - struct cls_struct_20byte a2) -{ - struct cls_struct_20byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%d %g %g %d %g %g: %d %g %g\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, - result.a, result.b, result.c); - return result; -} - -static void -cls_struct_20byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct cls_struct_20byte a1, a2; - - a1 = *(struct cls_struct_20byte*)(args[0]); - a2 = *(struct cls_struct_20byte*)(args[1]); - - *(cls_struct_20byte*)resp = cls_struct_20byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[3]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[3]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_20byte g_dbl = { 1, 2.0, 3.0 }; - struct cls_struct_20byte f_dbl = { 4, 5.0, 7.0 }; - struct cls_struct_20byte res_dbl; - - cls_struct_fields[0] = &ffi_type_sint; - cls_struct_fields[1] = &ffi_type_double; - cls_struct_fields[2] = &ffi_type_double; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_20byte_fn), &res_dbl, args_dbl); - /* { dg-output "1 2 3 4 5 7: 5 7 10" } */ - printf("res: %d %g %g\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 5 7 10" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_20byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_20byte(*)(cls_struct_20byte, cls_struct_20byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n1 2 3 4 5 7: 5 7 10" } */ - printf("res: %d %g %g\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 5 7 10" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c deleted file mode 100644 index 46a6eb4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +++ /dev/null @@ -1,113 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_24byte { - double a; - double b; - int c; - float d; -} cls_struct_24byte; - -cls_struct_24byte cls_struct_24byte_fn(struct cls_struct_24byte b0, - struct cls_struct_24byte b1, - struct cls_struct_24byte b2, - struct cls_struct_24byte b3) -{ - struct cls_struct_24byte result; - - result.a = b0.a + b1.a + b2.a + b3.a; - result.b = b0.b + b1.b + b2.b + b3.b; - result.c = b0.c + b1.c + b2.c + b3.c; - result.d = b0.d + b1.d + b2.d + b3.d; - - printf("%g %g %d %g %g %g %d %g %g %g %d %g %g %g %d %g: %g %g %d %g\n", - b0.a, b0.b, b0.c, b0.d, - b1.a, b1.b, b1.c, b1.d, - b2.a, b2.b, b2.c, b2.d, - b3.a, b3.b, b3.c, b2.d, - result.a, result.b, result.c, result.d); - - return result; -} - -static void -cls_struct_24byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct cls_struct_24byte b0, b1, b2, b3; - - b0 = *(struct cls_struct_24byte*)(args[0]); - b1 = *(struct cls_struct_24byte*)(args[1]); - b2 = *(struct cls_struct_24byte*)(args[2]); - b3 = *(struct cls_struct_24byte*)(args[3]); - - *(cls_struct_24byte*)resp = cls_struct_24byte_fn(b0, b1, b2, b3); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[5]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_24byte e_dbl = { 9.0, 2.0, 6, 5.0 }; - struct cls_struct_24byte f_dbl = { 1.0, 2.0, 3, 7.0 }; - struct cls_struct_24byte g_dbl = { 4.0, 5.0, 7, 9.0 }; - struct cls_struct_24byte h_dbl = { 8.0, 6.0, 1, 4.0 }; - struct cls_struct_24byte res_dbl; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_double; - cls_struct_fields[2] = &ffi_type_sint; - cls_struct_fields[3] = &ffi_type_float; - cls_struct_fields[4] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = &cls_struct_type; - dbl_arg_types[3] = &cls_struct_type; - dbl_arg_types[4] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = &g_dbl; - args_dbl[3] = &h_dbl; - args_dbl[4] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_24byte_fn), &res_dbl, args_dbl); - /* { dg-output "9 2 6 5 1 2 3 7 4 5 7 9 8 6 1 9: 22 15 17 25" } */ - printf("res: %g %g %d %g\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); - /* { dg-output "\nres: 22 15 17 25" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_24byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_24byte(*)(cls_struct_24byte, - cls_struct_24byte, - cls_struct_24byte, - cls_struct_24byte)) - (code))(e_dbl, f_dbl, g_dbl, h_dbl); - /* { dg-output "\n9 2 6 5 1 2 3 7 4 5 7 9 8 6 1 9: 22 15 17 25" } */ - printf("res: %g %g %d %g\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); - /* { dg-output "\nres: 22 15 17 25" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c deleted file mode 100644 index 101e130..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +++ /dev/null @@ -1,90 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Especially with small structures which may fit in one - register. Depending on the ABI. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_2byte { - unsigned char a; - unsigned char b; -} cls_struct_2byte; - -cls_struct_2byte cls_struct_2byte_fn(struct cls_struct_2byte a1, - struct cls_struct_2byte a2) -{ - struct cls_struct_2byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - - printf("%d %d %d %d: %d %d\n", a1.a, a1.b, a2.a, a2.b, result.a, result.b); - - return result; -} - -static void -cls_struct_2byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_2byte a1, a2; - - a1 = *(struct cls_struct_2byte*)(args[0]); - a2 = *(struct cls_struct_2byte*)(args[1]); - - *(cls_struct_2byte*)resp = cls_struct_2byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_2byte g_dbl = { 12, 127 }; - struct cls_struct_2byte f_dbl = { 1, 13 }; - struct cls_struct_2byte res_dbl; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_2byte_fn), &res_dbl, args_dbl); - /* { dg-output "12 127 1 13: 13 140" } */ - printf("res: %d %d\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 13 140" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_2byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_2byte(*)(cls_struct_2byte, cls_struct_2byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 127 1 13: 13 140" } */ - printf("res: %d %d\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 13 140" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c deleted file mode 100644 index fc780c3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +++ /dev/null @@ -1,95 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Especially with small structures which may fit in one - register. Depending on the ABI. - Limitations: none. - PR: none. - Originator: 20030902 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_3_1byte { - unsigned char a; - unsigned char b; - unsigned char c; -} cls_struct_3_1byte; - -cls_struct_3_1byte cls_struct_3_1byte_fn(struct cls_struct_3_1byte a1, - struct cls_struct_3_1byte a2) -{ - struct cls_struct_3_1byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, - a2.a, a2.b, a2.c, - result.a, result.b, result.c); - - return result; -} - -static void -cls_struct_3_1byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_3_1byte a1, a2; - - a1 = *(struct cls_struct_3_1byte*)(args[0]); - a2 = *(struct cls_struct_3_1byte*)(args[1]); - - *(cls_struct_3_1byte*)resp = cls_struct_3_1byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_3_1byte g_dbl = { 12, 13, 14 }; - struct cls_struct_3_1byte f_dbl = { 178, 179, 180 }; - struct cls_struct_3_1byte res_dbl; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_3_1byte_fn), &res_dbl, args_dbl); - /* { dg-output "12 13 14 178 179 180: 190 192 194" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 190 192 194" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_3_1byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_3_1byte(*)(cls_struct_3_1byte, cls_struct_3_1byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 13 14 178 179 180: 190 192 194" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 190 192 194" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c deleted file mode 100644 index 5705ce3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +++ /dev/null @@ -1,90 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Especially with small structures which may fit in one - register. Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_3byte { - unsigned short a; - unsigned char b; -} cls_struct_3byte; - -cls_struct_3byte cls_struct_3byte_fn(struct cls_struct_3byte a1, - struct cls_struct_3byte a2) -{ - struct cls_struct_3byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - - printf("%d %d %d %d: %d %d\n", a1.a, a1.b, a2.a, a2.b, result.a, result.b); - - return result; -} - -static void -cls_struct_3byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_3byte a1, a2; - - a1 = *(struct cls_struct_3byte*)(args[0]); - a2 = *(struct cls_struct_3byte*)(args[1]); - - *(cls_struct_3byte*)resp = cls_struct_3byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_3byte g_dbl = { 12, 119 }; - struct cls_struct_3byte f_dbl = { 1, 15 }; - struct cls_struct_3byte res_dbl; - - cls_struct_fields[0] = &ffi_type_ushort; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_3byte_fn), &res_dbl, args_dbl); - /* { dg-output "12 119 1 15: 13 134" } */ - printf("res: %d %d\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 13 134" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_3byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_3byte(*)(cls_struct_3byte, cls_struct_3byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 119 1 15: 13 134" } */ - printf("res: %d %d\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 13 134" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c deleted file mode 100644 index 01770a0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +++ /dev/null @@ -1,90 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Especially with small structures which may fit in one - register. Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_3byte_1 { - unsigned char a; - unsigned short b; -} cls_struct_3byte_1; - -cls_struct_3byte_1 cls_struct_3byte_fn1(struct cls_struct_3byte_1 a1, - struct cls_struct_3byte_1 a2) -{ - struct cls_struct_3byte_1 result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - - printf("%d %d %d %d: %d %d\n", a1.a, a1.b, a2.a, a2.b, result.a, result.b); - - return result; -} - -static void -cls_struct_3byte_gn1(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_3byte_1 a1, a2; - - a1 = *(struct cls_struct_3byte_1*)(args[0]); - a2 = *(struct cls_struct_3byte_1*)(args[1]); - - *(cls_struct_3byte_1*)resp = cls_struct_3byte_fn1(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_3byte_1 g_dbl = { 15, 125 }; - struct cls_struct_3byte_1 f_dbl = { 9, 19 }; - struct cls_struct_3byte_1 res_dbl; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_ushort; - cls_struct_fields[2] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_3byte_fn1), &res_dbl, args_dbl); - /* { dg-output "15 125 9 19: 24 144" } */ - printf("res: %d %d\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 24 144" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_3byte_gn1, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_3byte_1(*)(cls_struct_3byte_1, cls_struct_3byte_1))(code))(g_dbl, f_dbl); - /* { dg-output "\n15 125 9 19: 24 144" } */ - printf("res: %d %d\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 24 144" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c deleted file mode 100644 index f3806d7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +++ /dev/null @@ -1,98 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Especially with small structures which may fit in one - register. Depending on the ABI. - Limitations: none. - PR: none. - Originator: 20030902 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_4_1byte { - unsigned char a; - unsigned char b; - unsigned char c; - unsigned char d; -} cls_struct_4_1byte; - -cls_struct_4_1byte cls_struct_4_1byte_fn(struct cls_struct_4_1byte a1, - struct cls_struct_4_1byte a2) -{ - struct cls_struct_4_1byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - result.d = a1.d + a2.d; - - printf("%d %d %d %d %d %d %d %d: %d %d %d %d\n", a1.a, a1.b, a1.c, a1.d, - a2.a, a2.b, a2.c, a2.d, - result.a, result.b, result.c, result.d); - - return result; -} - -static void -cls_struct_4_1byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_4_1byte a1, a2; - - a1 = *(struct cls_struct_4_1byte*)(args[0]); - a2 = *(struct cls_struct_4_1byte*)(args[1]); - - *(cls_struct_4_1byte*)resp = cls_struct_4_1byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[5]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_4_1byte g_dbl = { 12, 13, 14, 15 }; - struct cls_struct_4_1byte f_dbl = { 178, 179, 180, 181 }; - struct cls_struct_4_1byte res_dbl; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = &ffi_type_uchar; - cls_struct_fields[4] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_4_1byte_fn), &res_dbl, args_dbl); - /* { dg-output "12 13 14 15 178 179 180 181: 190 192 194 196" } */ - printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); - /* { dg-output "\nres: 190 192 194 196" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_4_1byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_4_1byte(*)(cls_struct_4_1byte, cls_struct_4_1byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 13 14 15 178 179 180 181: 190 192 194 196" } */ - printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); - /* { dg-output "\nres: 190 192 194 196" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c deleted file mode 100644 index a1aba3c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +++ /dev/null @@ -1,90 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ - -#include "ffitest.h" - -typedef struct cls_struct_4byte { - unsigned short a; - unsigned short b; -} cls_struct_4byte; - -cls_struct_4byte cls_struct_4byte_fn(struct cls_struct_4byte a1, - struct cls_struct_4byte a2) -{ - struct cls_struct_4byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - - printf("%d %d %d %d: %d %d\n", a1.a, a1.b, a2.a, a2.b, result.a, result.b); - - return result; -} - -static void -cls_struct_4byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_4byte a1, a2; - - a1 = *(struct cls_struct_4byte*)(args[0]); - a2 = *(struct cls_struct_4byte*)(args[1]); - - *(cls_struct_4byte*)resp = cls_struct_4byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_4byte g_dbl = { 127, 120 }; - struct cls_struct_4byte f_dbl = { 12, 128 }; - struct cls_struct_4byte res_dbl; - - cls_struct_fields[0] = &ffi_type_ushort; - cls_struct_fields[1] = &ffi_type_ushort; - cls_struct_fields[2] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_4byte_fn), &res_dbl, args_dbl); - /* { dg-output "127 120 12 128: 139 248" } */ - printf("res: %d %d\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 139 248" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_4byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_4byte(*)(cls_struct_4byte, cls_struct_4byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n127 120 12 128: 139 248" } */ - printf("res: %d %d\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 139 248" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c deleted file mode 100644 index 2ceba3d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +++ /dev/null @@ -1,109 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20050708 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_5byte { - unsigned char a; - unsigned char b; - unsigned char c; - unsigned char d; - unsigned char e; -} cls_struct_5byte; - -cls_struct_5byte cls_struct_5byte_fn(struct cls_struct_5byte a1, - struct cls_struct_5byte a2) -{ - struct cls_struct_5byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - result.d = a1.d + a2.d; - result.e = a1.e + a2.e; - - printf("%d %d %d %d %d %d %d %d %d %d: %d %d %d %d %d\n", - a1.a, a1.b, a1.c, a1.d, a1.e, - a2.a, a2.b, a2.c, a2.d, a2.e, - result.a, result.b, result.c, result.d, result.e); - - return result; -} - -static void -cls_struct_5byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_5byte a1, a2; - - a1 = *(struct cls_struct_5byte*)(args[0]); - a2 = *(struct cls_struct_5byte*)(args[1]); - - *(cls_struct_5byte*)resp = cls_struct_5byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[6]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_5byte g_dbl = { 127, 120, 1, 3, 4 }; - struct cls_struct_5byte f_dbl = { 12, 128, 9, 3, 4 }; - struct cls_struct_5byte res_dbl = { 0, 0, 0, 0, 0 }; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = &ffi_type_uchar; - cls_struct_fields[4] = &ffi_type_uchar; - cls_struct_fields[5] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_5byte_fn), &res_dbl, args_dbl); - /* { dg-output "127 120 1 3 4 12 128 9 3 4: 139 248 10 6 8" } */ - printf("res: %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e); - /* { dg-output "\nres: 139 248 10 6 8" } */ - - res_dbl.a = 0; - res_dbl.b = 0; - res_dbl.c = 0; - res_dbl.d = 0; - res_dbl.e = 0; - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_5byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_5byte(*)(cls_struct_5byte, cls_struct_5byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n127 120 1 3 4 12 128 9 3 4: 139 248 10 6 8" } */ - printf("res: %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e); - /* { dg-output "\nres: 139 248 10 6 8" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c deleted file mode 100644 index 61d595c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +++ /dev/null @@ -1,98 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_5byte { - unsigned short a; - unsigned short b; - unsigned char c; -} cls_struct_5byte; - -cls_struct_5byte cls_struct_5byte_fn(struct cls_struct_5byte a1, - struct cls_struct_5byte a2) -{ - struct cls_struct_5byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, - a2.a, a2.b, a2.c, - result.a, result.b, result.c); - - return result; -} - -static void -cls_struct_5byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_5byte a1, a2; - - a1 = *(struct cls_struct_5byte*)(args[0]); - a2 = *(struct cls_struct_5byte*)(args[1]); - - *(cls_struct_5byte*)resp = cls_struct_5byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_5byte g_dbl = { 127, 120, 1 }; - struct cls_struct_5byte f_dbl = { 12, 128, 9 }; - struct cls_struct_5byte res_dbl = { 0, 0, 0 }; - - cls_struct_fields[0] = &ffi_type_ushort; - cls_struct_fields[1] = &ffi_type_ushort; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_5byte_fn), &res_dbl, args_dbl); - /* { dg-output "127 120 1 12 128 9: 139 248 10" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 139 248 10" } */ - - res_dbl.a = 0; - res_dbl.b = 0; - res_dbl.c = 0; - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_5byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_5byte(*)(cls_struct_5byte, cls_struct_5byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n127 120 1 12 128 9: 139 248 10" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 139 248 10" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c deleted file mode 100644 index 576ebe0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +++ /dev/null @@ -1,124 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check bigger struct which overlaps - the gp and fp register count on Darwin/AIX/ppc64. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_64byte { - double a; - double b; - double c; - double d; - double e; - double f; - double g; - double h; -} cls_struct_64byte; - -cls_struct_64byte cls_struct_64byte_fn(struct cls_struct_64byte b0, - struct cls_struct_64byte b1, - struct cls_struct_64byte b2, - struct cls_struct_64byte b3) -{ - struct cls_struct_64byte result; - - result.a = b0.a + b1.a + b2.a + b3.a; - result.b = b0.b + b1.b + b2.b + b3.b; - result.c = b0.c + b1.c + b2.c + b3.c; - result.d = b0.d + b1.d + b2.d + b3.d; - result.e = b0.e + b1.e + b2.e + b3.e; - result.f = b0.f + b1.f + b2.f + b3.f; - result.g = b0.g + b1.g + b2.g + b3.g; - result.h = b0.h + b1.h + b2.h + b3.h; - - printf("%g %g %g %g %g %g %g %g\n", result.a, result.b, result.c, - result.d, result.e, result.f, result.g, result.h); - - return result; -} - -static void -cls_struct_64byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct cls_struct_64byte b0, b1, b2, b3; - - b0 = *(struct cls_struct_64byte*)(args[0]); - b1 = *(struct cls_struct_64byte*)(args[1]); - b2 = *(struct cls_struct_64byte*)(args[2]); - b3 = *(struct cls_struct_64byte*)(args[3]); - - *(cls_struct_64byte*)resp = cls_struct_64byte_fn(b0, b1, b2, b3); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[9]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_64byte e_dbl = { 9.0, 2.0, 6.0, 5.0, 3.0, 4.0, 8.0, 1.0 }; - struct cls_struct_64byte f_dbl = { 1.0, 2.0, 3.0, 7.0, 2.0, 5.0, 6.0, 7.0 }; - struct cls_struct_64byte g_dbl = { 4.0, 5.0, 7.0, 9.0, 1.0, 1.0, 2.0, 9.0 }; - struct cls_struct_64byte h_dbl = { 8.0, 6.0, 1.0, 4.0, 0.0, 3.0, 3.0, 1.0 }; - struct cls_struct_64byte res_dbl; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_double; - cls_struct_fields[2] = &ffi_type_double; - cls_struct_fields[3] = &ffi_type_double; - cls_struct_fields[4] = &ffi_type_double; - cls_struct_fields[5] = &ffi_type_double; - cls_struct_fields[6] = &ffi_type_double; - cls_struct_fields[7] = &ffi_type_double; - cls_struct_fields[8] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = &cls_struct_type; - dbl_arg_types[3] = &cls_struct_type; - dbl_arg_types[4] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = &g_dbl; - args_dbl[3] = &h_dbl; - args_dbl[4] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_64byte_fn), &res_dbl, args_dbl); - /* { dg-output "22 15 17 25 6 13 19 18" } */ - printf("res: %g %g %g %g %g %g %g %g\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h); - /* { dg-output "\nres: 22 15 17 25 6 13 19 18" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_64byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_64byte(*)(cls_struct_64byte, - cls_struct_64byte, - cls_struct_64byte, - cls_struct_64byte)) - (code))(e_dbl, f_dbl, g_dbl, h_dbl); - /* { dg-output "\n22 15 17 25 6 13 19 18" } */ - printf("res: %g %g %g %g %g %g %g %g\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h); - /* { dg-output "\nres: 22 15 17 25 6 13 19 18" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c deleted file mode 100644 index 9f2eff6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +++ /dev/null @@ -1,113 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20050708 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_6byte { - unsigned char a; - unsigned char b; - unsigned char c; - unsigned char d; - unsigned char e; - unsigned char f; -} cls_struct_6byte; - -cls_struct_6byte cls_struct_6byte_fn(struct cls_struct_6byte a1, - struct cls_struct_6byte a2) -{ - struct cls_struct_6byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - result.d = a1.d + a2.d; - result.e = a1.e + a2.e; - result.f = a1.f + a2.f; - - printf("%d %d %d %d %d %d %d %d %d %d %d %d: %d %d %d %d %d %d\n", - a1.a, a1.b, a1.c, a1.d, a1.e, a1.f, - a2.a, a2.b, a2.c, a2.d, a2.e, a2.f, - result.a, result.b, result.c, result.d, result.e, result.f); - - return result; -} - -static void -cls_struct_6byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_6byte a1, a2; - - a1 = *(struct cls_struct_6byte*)(args[0]); - a2 = *(struct cls_struct_6byte*)(args[1]); - - *(cls_struct_6byte*)resp = cls_struct_6byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[7]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_6byte g_dbl = { 127, 120, 1, 3, 4, 5 }; - struct cls_struct_6byte f_dbl = { 12, 128, 9, 3, 4, 5 }; - struct cls_struct_6byte res_dbl = { 0, 0, 0, 0, 0, 0 }; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = &ffi_type_uchar; - cls_struct_fields[4] = &ffi_type_uchar; - cls_struct_fields[5] = &ffi_type_uchar; - cls_struct_fields[6] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_6byte_fn), &res_dbl, args_dbl); - /* { dg-output "127 120 1 3 4 5 12 128 9 3 4 5: 139 248 10 6 8 10" } */ - printf("res: %d %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e, res_dbl.f); - /* { dg-output "\nres: 139 248 10 6 8 10" } */ - - res_dbl.a = 0; - res_dbl.b = 0; - res_dbl.c = 0; - res_dbl.d = 0; - res_dbl.e = 0; - res_dbl.f = 0; - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_6byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_6byte(*)(cls_struct_6byte, cls_struct_6byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n127 120 1 3 4 5 12 128 9 3 4 5: 139 248 10 6 8 10" } */ - printf("res: %d %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e, res_dbl.f); - /* { dg-output "\nres: 139 248 10 6 8 10" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c deleted file mode 100644 index 73257b0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +++ /dev/null @@ -1,99 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20030828 */ - - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_6byte { - unsigned short a; - unsigned short b; - unsigned char c; - unsigned char d; -} cls_struct_6byte; - -cls_struct_6byte cls_struct_6byte_fn(struct cls_struct_6byte a1, - struct cls_struct_6byte a2) -{ - struct cls_struct_6byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - result.d = a1.d + a2.d; - - printf("%d %d %d %d %d %d %d %d: %d %d %d %d\n", a1.a, a1.b, a1.c, a1.d, - a2.a, a2.b, a2.c, a2.d, - result.a, result.b, result.c, result.d); - - return result; -} - -static void -cls_struct_6byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_6byte a1, a2; - - a1 = *(struct cls_struct_6byte*)(args[0]); - a2 = *(struct cls_struct_6byte*)(args[1]); - - *(cls_struct_6byte*)resp = cls_struct_6byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[5]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_6byte g_dbl = { 127, 120, 1, 128 }; - struct cls_struct_6byte f_dbl = { 12, 128, 9, 127 }; - struct cls_struct_6byte res_dbl; - - cls_struct_fields[0] = &ffi_type_ushort; - cls_struct_fields[1] = &ffi_type_ushort; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = &ffi_type_uchar; - cls_struct_fields[4] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_6byte_fn), &res_dbl, args_dbl); - /* { dg-output "127 120 1 128 12 128 9 127: 139 248 10 255" } */ - printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); - /* { dg-output "\nres: 139 248 10 255" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_6byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_6byte(*)(cls_struct_6byte, cls_struct_6byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n127 120 1 128 12 128 9 127: 139 248 10 255" } */ - printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); - /* { dg-output "\nres: 139 248 10 255" } */ - - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c deleted file mode 100644 index 50d09c9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +++ /dev/null @@ -1,117 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20050708 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_7byte { - unsigned char a; - unsigned char b; - unsigned char c; - unsigned char d; - unsigned char e; - unsigned char f; - unsigned char g; -} cls_struct_7byte; - -cls_struct_7byte cls_struct_7byte_fn(struct cls_struct_7byte a1, - struct cls_struct_7byte a2) -{ - struct cls_struct_7byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - result.d = a1.d + a2.d; - result.e = a1.e + a2.e; - result.f = a1.f + a2.f; - result.g = a1.g + a2.g; - - printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d %d %d %d %d %d %d\n", - a1.a, a1.b, a1.c, a1.d, a1.e, a1.f, a1.g, - a2.a, a2.b, a2.c, a2.d, a2.e, a2.f, a2.g, - result.a, result.b, result.c, result.d, result.e, result.f, result.g); - - return result; -} - -static void -cls_struct_7byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_7byte a1, a2; - - a1 = *(struct cls_struct_7byte*)(args[0]); - a2 = *(struct cls_struct_7byte*)(args[1]); - - *(cls_struct_7byte*)resp = cls_struct_7byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[8]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_7byte g_dbl = { 127, 120, 1, 3, 4, 5, 6 }; - struct cls_struct_7byte f_dbl = { 12, 128, 9, 3, 4, 5, 6 }; - struct cls_struct_7byte res_dbl = { 0, 0, 0, 0, 0, 0, 0 }; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = &ffi_type_uchar; - cls_struct_fields[4] = &ffi_type_uchar; - cls_struct_fields[5] = &ffi_type_uchar; - cls_struct_fields[6] = &ffi_type_uchar; - cls_struct_fields[7] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_7byte_fn), &res_dbl, args_dbl); - /* { dg-output "127 120 1 3 4 5 6 12 128 9 3 4 5 6: 139 248 10 6 8 10 12" } */ - printf("res: %d %d %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g); - /* { dg-output "\nres: 139 248 10 6 8 10 12" } */ - - res_dbl.a = 0; - res_dbl.b = 0; - res_dbl.c = 0; - res_dbl.d = 0; - res_dbl.e = 0; - res_dbl.f = 0; - res_dbl.g = 0; - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_7byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_7byte(*)(cls_struct_7byte, cls_struct_7byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n127 120 1 3 4 5 6 12 128 9 3 4 5 6: 139 248 10 6 8 10 12" } */ - printf("res: %d %d %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g); - /* { dg-output "\nres: 139 248 10 6 8 10 12" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c deleted file mode 100644 index f5c0000..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +++ /dev/null @@ -1,97 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_7byte { - unsigned short a; - unsigned short b; - unsigned char c; - unsigned short d; -} cls_struct_7byte; - -cls_struct_7byte cls_struct_7byte_fn(struct cls_struct_7byte a1, - struct cls_struct_7byte a2) -{ - struct cls_struct_7byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - result.d = a1.d + a2.d; - - printf("%d %d %d %d %d %d %d %d: %d %d %d %d\n", a1.a, a1.b, a1.c, a1.d, - a2.a, a2.b, a2.c, a2.d, - result.a, result.b, result.c, result.d); - - return result; -} - -static void -cls_struct_7byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_7byte a1, a2; - - a1 = *(struct cls_struct_7byte*)(args[0]); - a2 = *(struct cls_struct_7byte*)(args[1]); - - *(cls_struct_7byte*)resp = cls_struct_7byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[5]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_7byte g_dbl = { 127, 120, 1, 254 }; - struct cls_struct_7byte f_dbl = { 12, 128, 9, 255 }; - struct cls_struct_7byte res_dbl; - - cls_struct_fields[0] = &ffi_type_ushort; - cls_struct_fields[1] = &ffi_type_ushort; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = &ffi_type_ushort; - cls_struct_fields[4] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_7byte_fn), &res_dbl, args_dbl); - /* { dg-output "127 120 1 254 12 128 9 255: 139 248 10 509" } */ - printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); - /* { dg-output "\nres: 139 248 10 509" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_7byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_7byte(*)(cls_struct_7byte, cls_struct_7byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n127 120 1 254 12 128 9 255: 139 248 10 509" } */ - printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); - /* { dg-output "\nres: 139 248 10 509" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c deleted file mode 100644 index 4aa99d1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +++ /dev/null @@ -1,88 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Check overlapping. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_8byte { - int a; - float b; -} cls_struct_8byte; - -cls_struct_8byte cls_struct_8byte_fn(struct cls_struct_8byte a1, - struct cls_struct_8byte a2) -{ - struct cls_struct_8byte result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - - printf("%d %g %d %g: %d %g\n", a1.a, a1.b, a2.a, a2.b, result.a, result.b); - - return result; -} - -static void -cls_struct_8byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_8byte a1, a2; - - a1 = *(struct cls_struct_8byte*)(args[0]); - a2 = *(struct cls_struct_8byte*)(args[1]); - - *(cls_struct_8byte*)resp = cls_struct_8byte_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_8byte g_dbl = { 1, 2.0 }; - struct cls_struct_8byte f_dbl = { 4, 5.0 }; - struct cls_struct_8byte res_dbl; - - cls_struct_fields[0] = &ffi_type_sint; - cls_struct_fields[1] = &ffi_type_float; - cls_struct_fields[2] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_8byte_fn), &res_dbl, args_dbl); - /* { dg-output "1 2 4 5: 5 7" } */ - printf("res: %d %g\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 5 7" } */ - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_8byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_8byte(*)(cls_struct_8byte, cls_struct_8byte))(code))(g_dbl, f_dbl); - /* { dg-output "\n1 2 4 5: 5 7" } */ - printf("res: %d %g\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 5 7" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c deleted file mode 100644 index cc5e9d6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +++ /dev/null @@ -1,90 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Darwin/AIX do double-word - alignment of the struct if the first element is a double. - Check that it does not here. - Limitations: none. - PR: none. - Originator: 20030914 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_9byte { - int a; - double b; -} cls_struct_9byte; - -cls_struct_9byte cls_struct_9byte_fn(struct cls_struct_9byte b1, - struct cls_struct_9byte b2) -{ - struct cls_struct_9byte result; - - result.a = b1.a + b2.a; - result.b = b1.b + b2.b; - - printf("%d %g %d %g: %d %g\n", b1.a, b1.b, b2.a, b2.b, - result.a, result.b); - - return result; -} - -static void cls_struct_9byte_gn(ffi_cif* cif __UNUSED__, void* resp, - void** args, void* userdata __UNUSED__) -{ - struct cls_struct_9byte b1, b2; - - b1 = *(struct cls_struct_9byte*)(args[0]); - b2 = *(struct cls_struct_9byte*)(args[1]); - - *(cls_struct_9byte*)resp = cls_struct_9byte_fn(b1, b2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[3]; - ffi_type* cls_struct_fields[3]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[3]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_9byte h_dbl = { 7, 8.0}; - struct cls_struct_9byte j_dbl = { 1, 9.0}; - struct cls_struct_9byte res_dbl; - - cls_struct_fields[0] = &ffi_type_sint; - cls_struct_fields[1] = &ffi_type_double; - cls_struct_fields[2] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &h_dbl; - args_dbl[1] = &j_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_9byte_fn), &res_dbl, args_dbl); - /* { dg-output "7 8 1 9: 8 17" } */ - printf("res: %d %g\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 8 17" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_9byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_9byte(*)(cls_struct_9byte, cls_struct_9byte))(code))(h_dbl, j_dbl); - /* { dg-output "\n7 8 1 9: 8 17" } */ - printf("res: %d %g\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 8 17" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c deleted file mode 100644 index 5c0ba0d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Depending on the ABI. Darwin/AIX do double-word - alignment of the struct if the first element is a double. - Check that it does here. - Limitations: none. - PR: none. - Originator: 20030914 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_9byte { - double a; - int b; -} cls_struct_9byte; - -cls_struct_9byte cls_struct_9byte_fn(struct cls_struct_9byte b1, - struct cls_struct_9byte b2) -{ - struct cls_struct_9byte result; - - result.a = b1.a + b2.a; - result.b = b1.b + b2.b; - - printf("%g %d %g %d: %g %d\n", b1.a, b1.b, b2.a, b2.b, - result.a, result.b); - - return result; -} - -static void cls_struct_9byte_gn(ffi_cif* cif __UNUSED__, void* resp, - void** args, void* userdata __UNUSED__) -{ - struct cls_struct_9byte b1, b2; - - b1 = *(struct cls_struct_9byte*)(args[0]); - b2 = *(struct cls_struct_9byte*)(args[1]); - - *(cls_struct_9byte*)resp = cls_struct_9byte_fn(b1, b2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[3]; - ffi_type* cls_struct_fields[3]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[3]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_9byte h_dbl = { 7.0, 8}; - struct cls_struct_9byte j_dbl = { 1.0, 9}; - struct cls_struct_9byte res_dbl; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_sint; - cls_struct_fields[2] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &h_dbl; - args_dbl[1] = &j_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_9byte_fn), &res_dbl, args_dbl); - /* { dg-output "7 8 1 9: 8 17" } */ - printf("res: %g %d\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 8 17" } */ - - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_9byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_9byte(*)(cls_struct_9byte, cls_struct_9byte))(code))(h_dbl, j_dbl); - /* { dg-output "\n7 8 1 9: 8 17" } */ - printf("res: %g %d\n", res_dbl.a, res_dbl.b); - /* { dg-output "\nres: 8 17" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c deleted file mode 100644 index 22b94d5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +++ /dev/null @@ -1,93 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure alignment of double. - Limitations: none. - PR: none. - Originator: 20031203 */ - - - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_align { - unsigned char a; - double b; - unsigned char c; -} cls_struct_align; - -cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, - struct cls_struct_align a2) -{ - struct cls_struct_align result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%d %g %d %d %g %d: %d %g %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c); - - return result; -} - -static void -cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_align a1, a2; - - a1 = *(struct cls_struct_align*)(args[0]); - a2 = *(struct cls_struct_align*)(args[1]); - - *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_align g_dbl = { 12, 4951, 127 }; - struct cls_struct_align f_dbl = { 1, 9320, 13 }; - struct cls_struct_align res_dbl; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_double; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); - /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c deleted file mode 100644 index 62637f2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure alignment of float. - Limitations: none. - PR: none. - Originator: 20031203 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_align { - unsigned char a; - float b; - unsigned char c; -} cls_struct_align; - -cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, - struct cls_struct_align a2) -{ - struct cls_struct_align result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%d %g %d %d %g %d: %d %g %d\n", a1.a, (double)a1.b, a1.c, a2.a, (double)a2.b, a2.c, result.a, (double)result.b, result.c); - - return result; -} - -static void -cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_align a1, a2; - - a1 = *(struct cls_struct_align*)(args[0]); - a2 = *(struct cls_struct_align*)(args[1]); - - *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_align g_dbl = { 12, 4951, 127 }; - struct cls_struct_align f_dbl = { 1, 9320, 13 }; - struct cls_struct_align res_dbl; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_float; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); - /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %g %d\n", res_dbl.a, (double)res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %g %d\n", res_dbl.a, (double)res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c deleted file mode 100644 index af38060..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +++ /dev/null @@ -1,92 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure alignment of long double. - Limitations: none. - PR: none. - Originator: 20031203 */ - -/* { dg-do run } */ - -#include "ffitest.h" - -typedef struct cls_struct_align { - unsigned char a; - long double b; - unsigned char c; -} cls_struct_align; - -cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, - struct cls_struct_align a2) -{ - struct cls_struct_align result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%d %g %d %d %g %d: %d %g %d\n", a1.a, (double)a1.b, a1.c, a2.a, (double)a2.b, a2.c, result.a, (double)result.b, result.c); - - return result; -} - -static void -cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_align a1, a2; - - a1 = *(struct cls_struct_align*)(args[0]); - a2 = *(struct cls_struct_align*)(args[1]); - - *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_align g_dbl = { 12, 4951, 127 }; - struct cls_struct_align f_dbl = { 1, 9320, 13 }; - struct cls_struct_align res_dbl; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_longdouble; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); - /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %g %d\n", res_dbl.a, (double)res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %g %d\n", res_dbl.a, (double)res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c deleted file mode 100644 index a3732bd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c +++ /dev/null @@ -1,134 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure alignment of long double. - Limitations: none. - PR: none. - Originator: 20031203 */ - -/* { dg-excess-errors "no long double format" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ -/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ -/* { dg-options -mlong-double-128 { target powerpc64*-*-linux* } } */ -/* { dg-output "" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ - -#include "ffitest.h" - -typedef struct cls_struct_align { - long double a; - long double b; - long double c; - long double d; - long double e; - long double f; - long double g; -} cls_struct_align; - -cls_struct_align cls_struct_align_fn( - cls_struct_align a1, - cls_struct_align a2) -{ - struct cls_struct_align r; - - r.a = a1.a + a2.a; - r.b = a1.b + a2.b; - r.c = a1.c + a2.c; - r.d = a1.d + a2.d; - r.e = a1.e + a2.e; - r.f = a1.f + a2.f; - r.g = a1.g + a2.g; - - printf("%Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg: " - "%Lg %Lg %Lg %Lg %Lg %Lg %Lg\n", - a1.a, a1.b, a1.c, a1.d, a1.e, a1.f, a1.g, - a2.a, a2.b, a2.c, a2.d, a2.e, a2.f, a2.g, - r.a, r.b, r.c, r.d, r.e, r.f, r.g); - - return r; -} - -cls_struct_align cls_struct_align_fn2( - cls_struct_align a1) -{ - struct cls_struct_align r; - - r.a = a1.a + 1; - r.b = a1.b + 1; - r.c = a1.c + 1; - r.d = a1.d + 1; - r.e = a1.e + 1; - r.f = a1.f + 1; - r.g = a1.g + 1; - - printf("%Lg %Lg %Lg %Lg %Lg %Lg %Lg: " - "%Lg %Lg %Lg %Lg %Lg %Lg %Lg\n", - a1.a, a1.b, a1.c, a1.d, a1.e, a1.f, a1.g, - r.a, r.b, r.c, r.d, r.e, r.f, r.g); - - return r; -} - -static void -cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct cls_struct_align a1, a2; - - a1 = *(struct cls_struct_align*)(args[0]); - a2 = *(struct cls_struct_align*)(args[1]); - - *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[3]; - ffi_type* cls_struct_fields[8]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[3]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_align g_dbl = { 1, 2, 3, 4, 5, 6, 7 }; - struct cls_struct_align f_dbl = { 8, 9, 10, 11, 12, 13, 14 }; - struct cls_struct_align res_dbl; - - cls_struct_fields[0] = &ffi_type_longdouble; - cls_struct_fields[1] = &ffi_type_longdouble; - cls_struct_fields[2] = &ffi_type_longdouble; - cls_struct_fields[3] = &ffi_type_longdouble; - cls_struct_fields[4] = &ffi_type_longdouble; - cls_struct_fields[5] = &ffi_type_longdouble; - cls_struct_fields[6] = &ffi_type_longdouble; - cls_struct_fields[7] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); - /* { dg-output "1 2 3 4 5 6 7 8 9 10 11 12 13 14: 9 11 13 15 17 19 21" } */ - printf("res: %Lg %Lg %Lg %Lg %Lg %Lg %Lg\n", res_dbl.a, res_dbl.b, - res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g); - /* { dg-output "\nres: 9 11 13 15 17 19 21" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); - /* { dg-output "\n1 2 3 4 5 6 7 8 9 10 11 12 13 14: 9 11 13 15 17 19 21" } */ - printf("res: %Lg %Lg %Lg %Lg %Lg %Lg %Lg\n", res_dbl.a, res_dbl.b, - res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g); - /* { dg-output "\nres: 9 11 13 15 17 19 21" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c deleted file mode 100644 index 63a0f76..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c +++ /dev/null @@ -1,117 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure alignment of long double. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/18/2007 -*/ - -/* { dg-excess-errors "no long double format" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ -/* { dg-do run { xfail strongarm*-*-* } } */ -/* { dg-options -mlong-double-128 { target powerpc64*-*-linux* } } */ -/* { dg-output "" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ - -#include "ffitest.h" - -typedef struct cls_struct_align { - long double a; - long double b; - long double c; - long double d; - long double e; - double f; - long double g; -} cls_struct_align; - -cls_struct_align cls_struct_align_fn( - cls_struct_align a1, - cls_struct_align a2) -{ - struct cls_struct_align r; - - r.a = a1.a + a2.a; - r.b = a1.b + a2.b; - r.c = a1.c + a2.c; - r.d = a1.d + a2.d; - r.e = a1.e + a2.e; - r.f = a1.f + a2.f; - r.g = a1.g + a2.g; - - printf("%Lg %Lg %Lg %Lg %Lg %g %Lg %Lg %Lg %Lg %Lg %Lg %g %Lg: " - "%Lg %Lg %Lg %Lg %Lg %g %Lg\n", - a1.a, a1.b, a1.c, a1.d, a1.e, a1.f, a1.g, - a2.a, a2.b, a2.c, a2.d, a2.e, a2.f, a2.g, - r.a, r.b, r.c, r.d, r.e, r.f, r.g); - - return r; -} - -static void -cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct cls_struct_align a1, a2; - - a1 = *(struct cls_struct_align*)(args[0]); - a2 = *(struct cls_struct_align*)(args[1]); - - *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[3]; - ffi_type* cls_struct_fields[8]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[3]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_align g_dbl = { 1, 2, 3, 4, 5, 6, 7 }; - struct cls_struct_align f_dbl = { 8, 9, 10, 11, 12, 13, 14 }; - struct cls_struct_align res_dbl; - - cls_struct_fields[0] = &ffi_type_longdouble; - cls_struct_fields[1] = &ffi_type_longdouble; - cls_struct_fields[2] = &ffi_type_longdouble; - cls_struct_fields[3] = &ffi_type_longdouble; - cls_struct_fields[4] = &ffi_type_longdouble; - cls_struct_fields[5] = &ffi_type_double; - cls_struct_fields[6] = &ffi_type_longdouble; - cls_struct_fields[7] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); - /* { dg-output "1 2 3 4 5 6 7 8 9 10 11 12 13 14: 9 11 13 15 17 19 21" } */ - printf("res: %Lg %Lg %Lg %Lg %Lg %g %Lg\n", res_dbl.a, res_dbl.b, - res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g); - /* { dg-output "\nres: 9 11 13 15 17 19 21" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); - /* { dg-output "\n1 2 3 4 5 6 7 8 9 10 11 12 13 14: 9 11 13 15 17 19 21" } */ - printf("res: %Lg %Lg %Lg %Lg %Lg %g %Lg\n", res_dbl.a, res_dbl.b, - res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g); - /* { dg-output "\nres: 9 11 13 15 17 19 21" } */ - - exit(0); -} - - - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c deleted file mode 100644 index cbc4f95..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +++ /dev/null @@ -1,95 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure alignment of pointer. - Limitations: none. - PR: none. - Originator: 20031203 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_align { - unsigned char a; - void *b; - unsigned char c; -} cls_struct_align; - -cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, - struct cls_struct_align a2) -{ - struct cls_struct_align result; - - result.a = a1.a + a2.a; - result.b = (void *)((uintptr_t)a1.b + (uintptr_t)a2.b); - result.c = a1.c + a2.c; - - printf("%d %" PRIuPTR " %d %d %" PRIuPTR " %d: %d %" PRIuPTR " %d\n", - a1.a, (uintptr_t)a1.b, a1.c, - a2.a, (uintptr_t)a2.b, a2.c, - result.a, (uintptr_t)result.b, - result.c); - - return result; -} - -static void -cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_align a1, a2; - - a1 = *(struct cls_struct_align*)(args[0]); - a2 = *(struct cls_struct_align*)(args[1]); - - *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_align g_dbl = { 12, (void *)4951, 127 }; - struct cls_struct_align f_dbl = { 1, (void *)9320, 13 }; - struct cls_struct_align res_dbl; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_pointer; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); - /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %" PRIuPTR " %d\n", res_dbl.a, (uintptr_t)res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %" PRIuPTR " %d\n", res_dbl.a, (uintptr_t)res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c deleted file mode 100644 index 383ea41..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure alignment of sint16. - Limitations: none. - PR: none. - Originator: 20031203 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_align { - unsigned char a; - signed short b; - unsigned char c; -} cls_struct_align; - -cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, - struct cls_struct_align a2) -{ - struct cls_struct_align result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c); - - return result; -} - -static void -cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_align a1, a2; - - a1 = *(struct cls_struct_align*)(args[0]); - a2 = *(struct cls_struct_align*)(args[1]); - - *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_align g_dbl = { 12, 4951, 127 }; - struct cls_struct_align f_dbl = { 1, 9320, 13 }; - struct cls_struct_align res_dbl; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_sshort; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); - /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c deleted file mode 100644 index 705d78c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure alignment of sint32. - Limitations: none. - PR: none. - Originator: 20031203 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_align { - unsigned char a; - signed int b; - unsigned char c; -} cls_struct_align; - -cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, - struct cls_struct_align a2) -{ - struct cls_struct_align result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c); - - return result; -} - -static void -cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_align a1, a2; - - a1 = *(struct cls_struct_align*)(args[0]); - a2 = *(struct cls_struct_align*)(args[1]); - - *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_align g_dbl = { 12, 4951, 127 }; - struct cls_struct_align f_dbl = { 1, 9320, 13 }; - struct cls_struct_align res_dbl; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_sint; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); - /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c deleted file mode 100644 index 31d53af..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +++ /dev/null @@ -1,92 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure alignment of sint64. - Limitations: none. - PR: none. - Originator: 20031203 */ - -/* { dg-do run } */ -/* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */ -#include "ffitest.h" - -typedef struct cls_struct_align { - unsigned char a; - signed long long b; - unsigned char c; -} cls_struct_align; - -cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, - struct cls_struct_align a2) -{ - struct cls_struct_align result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%d %" PRIdLL " %d %d %" PRIdLL " %d: %d %" PRIdLL " %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c); - - return result; -} - -static void -cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_align a1, a2; - - a1 = *(struct cls_struct_align*)(args[0]); - a2 = *(struct cls_struct_align*)(args[1]); - - *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_align g_dbl = { 12, 4951, 127 }; - struct cls_struct_align f_dbl = { 1, 9320, 13 }; - struct cls_struct_align res_dbl; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_sint64; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); - /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %" PRIdLL " %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %" PRIdLL " %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c deleted file mode 100644 index cb6b748..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure alignment of uint16. - Limitations: none. - PR: none. - Originator: 20031203 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_align { - unsigned char a; - unsigned short b; - unsigned char c; -} cls_struct_align; - -cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, - struct cls_struct_align a2) -{ - struct cls_struct_align result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c); - - return result; -} - -static void -cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_align a1, a2; - - a1 = *(struct cls_struct_align*)(args[0]); - a2 = *(struct cls_struct_align*)(args[1]); - - *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_align g_dbl = { 12, 4951, 127 }; - struct cls_struct_align f_dbl = { 1, 9320, 13 }; - struct cls_struct_align res_dbl; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_ushort; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); - /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c deleted file mode 100644 index e453d3e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure alignment of uint32. - Limitations: none. - PR: none. - Originator: 20031203 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_align { - unsigned char a; - unsigned int b; - unsigned char c; -} cls_struct_align; - -cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, - struct cls_struct_align a2) -{ - struct cls_struct_align result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c); - - return result; -} - -static void -cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_align a1, a2; - - a1 = *(struct cls_struct_align*)(args[0]); - a2 = *(struct cls_struct_align*)(args[1]); - - *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_align g_dbl = { 12, 4951, 127 }; - struct cls_struct_align f_dbl = { 1, 9320, 13 }; - struct cls_struct_align res_dbl; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_uint; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); - /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c deleted file mode 100644 index 495c79f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +++ /dev/null @@ -1,93 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure alignment of uint64. - Limitations: none. - PR: none. - Originator: 20031203 */ - - -/* { dg-do run } */ -/* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */ -#include "ffitest.h" - -typedef struct cls_struct_align { - unsigned char a; - unsigned long long b; - unsigned char c; -} cls_struct_align; - -cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, - struct cls_struct_align a2) -{ - struct cls_struct_align result; - - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - printf("%d %" PRIdLL " %d %d %" PRIdLL " %d: %d %" PRIdLL " %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c); - - return result; -} - -static void -cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - - struct cls_struct_align a1, a2; - - a1 = *(struct cls_struct_align*)(args[0]); - a2 = *(struct cls_struct_align*)(args[1]); - - *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[4]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct cls_struct_align g_dbl = { 12, 4951, 127 }; - struct cls_struct_align f_dbl = { 1, 9320, 13 }; - struct cls_struct_align res_dbl; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_uint64; - cls_struct_fields[2] = &ffi_type_uchar; - cls_struct_fields[3] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &g_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); - /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %" PRIdLL " %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); - /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ - printf("res: %d %" PRIdLL " %d\n", res_dbl.a, res_dbl.b, res_dbl.c); - /* { dg-output "\nres: 13 14271 140" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c deleted file mode 100644 index 660dabb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c +++ /dev/null @@ -1,66 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check double arguments in structs. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/23/2007 */ - -/* { dg-do run } */ - -#include "ffitest.h" - -typedef struct Dbls { - double x; - double y; -} Dbls; - -void -closure_test_fn(Dbls p) -{ - printf("%.1f %.1f\n", p.x, p.y); -} - -void -closure_test_gn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__, - void** args, void* userdata __UNUSED__) -{ - closure_test_fn(*(Dbls*)args[0]); -} - -int main(int argc __UNUSED__, char** argv __UNUSED__) -{ - ffi_cif cif; - - void *code; - ffi_closure* pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type* cl_arg_types[1]; - - ffi_type ts1_type; - ffi_type* ts1_type_elements[4]; - - ts1_type.size = 0; - ts1_type.alignment = 0; - ts1_type.type = FFI_TYPE_STRUCT; - ts1_type.elements = ts1_type_elements; - - ts1_type_elements[0] = &ffi_type_double; - ts1_type_elements[1] = &ffi_type_double; - ts1_type_elements[2] = NULL; - - cl_arg_types[0] = &ts1_type; - - Dbls arg = { 1.0, 2.0 }; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_void, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_gn, NULL, code) == FFI_OK); - - ((void*(*)(Dbls))(code))(arg); - /* { dg-output "1.0 2.0\n" } */ - - closure_test_fn(arg); - /* { dg-output "1.0 2.0\n" } */ - - return 0; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_double.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_double.c deleted file mode 100644 index 84ad4cb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_double.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Area: closure_call - Purpose: Check return value double. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static void cls_ret_double_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) - { - *(double *)resp = *(double *)args[0]; - - printf("%f: %f\n",*(double *)args[0], - *(double *)resp); - } -typedef double (*cls_ret_double)(double); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[2]; - double res; - - cl_arg_types[0] = &ffi_type_double; - cl_arg_types[1] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_double, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_double_fn, NULL, code) == FFI_OK); - - res = (*((cls_ret_double)code))(21474.789); - /* { dg-output "21474.789000: 21474.789000" } */ - printf("res: %.6f\n", res); - /* { dg-output "\nres: 21474.789000" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c deleted file mode 100644 index e769caf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Test doubles passed in variable argument lists. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/6/2007 */ - -/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ -/* { dg-output "" { xfail avr32*-*-* } } */ -/* { dg-output "" { xfail mips-sgi-irix6* } } PR libffi/46660 */ -/* { dg-skip-if "" arm*-*-* { "-mfloat-abi=hard" } { "" } } */ - -#include "ffitest.h" - -static void -cls_double_va_fn(ffi_cif* cif __UNUSED__, void* resp, - void** args, void* userdata __UNUSED__) -{ - char* format = *(char**)args[0]; - double doubleValue = *(double*)args[1]; - - *(ffi_arg*)resp = printf(format, doubleValue); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args[3]; - ffi_type* arg_types[3]; - - char* format = "%.1f\n"; - double doubleArg = 7; - ffi_arg res = 0; - - arg_types[0] = &ffi_type_pointer; - arg_types[1] = &ffi_type_double; - arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_sint, - arg_types) == FFI_OK); - - args[0] = &format; - args[1] = &doubleArg; - args[2] = NULL; - - ffi_call(&cif, FFI_FN(printf), &res, args); - // { dg-output "7.0" } - printf("res: %d\n", (int) res); - // { dg-output "\nres: 4" } - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_double_va_fn, NULL, code) == FFI_OK); - - res = ((int(*)(char*, double))(code))(format, doubleArg); - // { dg-output "\n7.0" } - printf("res: %d\n", (int) res); - // { dg-output "\nres: 4" } - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_float.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_float.c deleted file mode 100644 index 0090fed..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_float.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Area: closure_call - Purpose: Check return value float. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static void cls_ret_float_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) - { - *(float *)resp = *(float *)args[0]; - - printf("%g: %g\n",*(float *)args[0], - *(float *)resp); - } - -typedef float (*cls_ret_float)(float); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[2]; - float res; - - cl_arg_types[0] = &ffi_type_float; - cl_arg_types[1] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_float, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_float_fn, NULL, code) == FFI_OK); - res = ((((cls_ret_float)code)(-2122.12))); - /* { dg-output "\\-2122.12: \\-2122.12" } */ - printf("res: %.6f\n", res); - /* { dg-output "\nres: \-2122.120117" } */ - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c deleted file mode 100644 index e6bac1f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c +++ /dev/null @@ -1,105 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check long double arguments. - Limitations: none. - PR: none. - Originator: Blake Chaffin */ - -/* { dg-excess-errors "no long double format" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ -/* { dg-do run { xfail arm*-*-* strongarm*-*-* xscale*-*-* } } */ -/* { dg-options -mlong-double-128 { target powerpc64*-*-linux* } } */ -/* { dg-output "" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ - -#include "ffitest.h" - -long double cls_ldouble_fn( - long double a1, - long double a2, - long double a3, - long double a4, - long double a5, - long double a6, - long double a7, - long double a8) -{ - long double r = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8; - - printf("%Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg: %Lg\n", - a1, a2, a3, a4, a5, a6, a7, a8, r); - - return r; -} - -static void -cls_ldouble_gn(ffi_cif* cif __UNUSED__, void* resp, - void** args, void* userdata __UNUSED__) -{ - long double a1 = *(long double*)args[0]; - long double a2 = *(long double*)args[1]; - long double a3 = *(long double*)args[2]; - long double a4 = *(long double*)args[3]; - long double a5 = *(long double*)args[4]; - long double a6 = *(long double*)args[5]; - long double a7 = *(long double*)args[6]; - long double a8 = *(long double*)args[7]; - - *(long double*)resp = cls_ldouble_fn( - a1, a2, a3, a4, a5, a6, a7, a8); -} - -int main(void) -{ - ffi_cif cif; - void* code; - ffi_closure* pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args[9]; - ffi_type* arg_types[9]; - long double res = 0; - - long double arg1 = 1; - long double arg2 = 2; - long double arg3 = 3; - long double arg4 = 4; - long double arg5 = 5; - long double arg6 = 6; - long double arg7 = 7; - long double arg8 = 8; - - arg_types[0] = &ffi_type_longdouble; - arg_types[1] = &ffi_type_longdouble; - arg_types[2] = &ffi_type_longdouble; - arg_types[3] = &ffi_type_longdouble; - arg_types[4] = &ffi_type_longdouble; - arg_types[5] = &ffi_type_longdouble; - arg_types[6] = &ffi_type_longdouble; - arg_types[7] = &ffi_type_longdouble; - arg_types[8] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 8, &ffi_type_longdouble, - arg_types) == FFI_OK); - - args[0] = &arg1; - args[1] = &arg2; - args[2] = &arg3; - args[3] = &arg4; - args[4] = &arg5; - args[5] = &arg6; - args[6] = &arg7; - args[7] = &arg8; - args[8] = NULL; - - ffi_call(&cif, FFI_FN(cls_ldouble_fn), &res, args); - /* { dg-output "1 2 3 4 5 6 7 8: 36" } */ - printf("res: %Lg\n", res); - /* { dg-output "\nres: 36" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ldouble_gn, NULL, code) == FFI_OK); - - res = ((long double(*)(long double, long double, long double, long double, - long double, long double, long double, long double))(code))(arg1, arg2, - arg3, arg4, arg5, arg6, arg7, arg8); - /* { dg-output "\n1 2 3 4 5 6 7 8: 36" } */ - printf("res: %Lg\n", res); - /* { dg-output "\nres: 36" } */ - - return 0; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c deleted file mode 100644 index 07780ed..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Test long doubles passed in variable argument lists. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/6/2007 */ - -/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ -/* { dg-output "" { xfail avr32*-*-* x86_64-*-mingw* } } */ -/* { dg-output "" { xfail mips-sgi-irix6* } } PR libffi/46660 */ -/* { dg-skip-if "" arm*-*-* { "-mfloat-abi=hard" } { "" } } */ - -#include "ffitest.h" - -static void -cls_longdouble_va_fn(ffi_cif* cif __UNUSED__, void* resp, - void** args, void* userdata __UNUSED__) -{ - char* format = *(char**)args[0]; - long double ldValue = *(long double*)args[1]; - - *(ffi_arg*)resp = printf(format, ldValue); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args[3]; - ffi_type* arg_types[3]; - - char* format = "%.1Lf\n"; - long double ldArg = 7; - ffi_arg res = 0; - - arg_types[0] = &ffi_type_pointer; - arg_types[1] = &ffi_type_longdouble; - arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_sint, - arg_types) == FFI_OK); - - args[0] = &format; - args[1] = &ldArg; - args[2] = NULL; - - ffi_call(&cif, FFI_FN(printf), &res, args); - // { dg-output "7.0" } - printf("res: %d\n", (int) res); - // { dg-output "\nres: 4" } - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_longdouble_va_fn, NULL, code) == FFI_OK); - - res = ((int(*)(char*, long double))(code))(format, ldArg); - // { dg-output "\n7.0" } - printf("res: %d\n", (int) res); - // { dg-output "\nres: 4" } - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_schar.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_schar.c deleted file mode 100644 index 71df7b6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_schar.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check passing of multiple signed char values. - Limitations: none. - PR: PR13221. - Originator: 20031129 */ - -/* { dg-do run } */ -#include "ffitest.h" - -signed char test_func_fn(signed char a1, signed char a2) -{ - signed char result; - - result = a1 + a2; - - printf("%d %d: %d\n", a1, a2, result); - - return result; - -} - -static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals, - void *data __UNUSED__) -{ - signed char a1, a2; - - a1 = *(signed char *)avals[0]; - a2 = *(signed char *)avals[1]; - - *(ffi_arg *)rval = test_func_fn(a1, a2); - -} - -typedef signed char (*test_type)(signed char, signed char); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void * args_dbl[3]; - ffi_type * cl_arg_types[3]; - ffi_arg res_call; - signed char a, b, res_closure; - - a = 2; - b = 125; - - args_dbl[0] = &a; - args_dbl[1] = &b; - args_dbl[2] = NULL; - - cl_arg_types[0] = &ffi_type_schar; - cl_arg_types[1] = &ffi_type_schar; - cl_arg_types[2] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, - &ffi_type_schar, cl_arg_types) == FFI_OK); - - ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl); - /* { dg-output "2 125: 127" } */ - printf("res: %d\n", (signed char)res_call); - /* { dg-output "\nres: 127" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK); - - res_closure = (*((test_type)code))(2, 125); - /* { dg-output "\n2 125: 127" } */ - printf("res: %d\n", res_closure); - /* { dg-output "\nres: 127" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshort.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshort.c deleted file mode 100644 index 4c39153..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshort.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check passing of multiple signed short values. - Limitations: none. - PR: PR13221. - Originator: 20031129 */ - -/* { dg-do run } */ -#include "ffitest.h" - -signed short test_func_fn(signed short a1, signed short a2) -{ - signed short result; - - result = a1 + a2; - - printf("%d %d: %d\n", a1, a2, result); - - return result; - -} - -static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals, - void *data __UNUSED__) -{ - signed short a1, a2; - - a1 = *(signed short *)avals[0]; - a2 = *(signed short *)avals[1]; - - *(ffi_arg *)rval = test_func_fn(a1, a2); - -} - -typedef signed short (*test_type)(signed short, signed short); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void * args_dbl[3]; - ffi_type * cl_arg_types[3]; - ffi_arg res_call; - unsigned short a, b, res_closure; - - a = 2; - b = 32765; - - args_dbl[0] = &a; - args_dbl[1] = &b; - args_dbl[2] = NULL; - - cl_arg_types[0] = &ffi_type_sshort; - cl_arg_types[1] = &ffi_type_sshort; - cl_arg_types[2] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, - &ffi_type_sshort, cl_arg_types) == FFI_OK); - - ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl); - /* { dg-output "2 32765: 32767" } */ - printf("res: %d\n", (unsigned short)res_call); - /* { dg-output "\nres: 32767" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK); - - res_closure = (*((test_type)code))(2, 32765); - /* { dg-output "\n2 32765: 32767" } */ - printf("res: %d\n", res_closure); - /* { dg-output "\nres: 32767" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshortchar.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshortchar.c deleted file mode 100644 index 1c3aeb5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshortchar.c +++ /dev/null @@ -1,86 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check passing of multiple signed short/char values. - Limitations: none. - PR: PR13221. - Originator: 20031129 */ - -/* { dg-do run } */ -#include "ffitest.h" - -signed short test_func_fn(signed char a1, signed short a2, - signed char a3, signed short a4) -{ - signed short result; - - result = a1 + a2 + a3 + a4; - - printf("%d %d %d %d: %d\n", a1, a2, a3, a4, result); - - return result; - -} - -static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals, - void *data __UNUSED__) -{ - signed char a1, a3; - signed short a2, a4; - - a1 = *(signed char *)avals[0]; - a2 = *(signed short *)avals[1]; - a3 = *(signed char *)avals[2]; - a4 = *(signed short *)avals[3]; - - *(ffi_arg *)rval = test_func_fn(a1, a2, a3, a4); - -} - -typedef signed short (*test_type)(signed char, signed short, - signed char, signed short); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void * args_dbl[5]; - ffi_type * cl_arg_types[5]; - ffi_arg res_call; - signed char a, c; - signed short b, d, res_closure; - - a = 1; - b = 32765; - c = 127; - d = -128; - - args_dbl[0] = &a; - args_dbl[1] = &b; - args_dbl[2] = &c; - args_dbl[3] = &d; - args_dbl[4] = NULL; - - cl_arg_types[0] = &ffi_type_schar; - cl_arg_types[1] = &ffi_type_sshort; - cl_arg_types[2] = &ffi_type_schar; - cl_arg_types[3] = &ffi_type_sshort; - cl_arg_types[4] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, - &ffi_type_sshort, cl_arg_types) == FFI_OK); - - ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl); - /* { dg-output "1 32765 127 -128: 32765" } */ - printf("res: %d\n", (signed short)res_call); - /* { dg-output "\nres: 32765" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK); - - res_closure = (*((test_type)code))(1, 32765, 127, -128); - /* { dg-output "\n1 32765 127 -128: 32765" } */ - printf("res: %d\n", res_closure); - /* { dg-output "\nres: 32765" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_uchar.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_uchar.c deleted file mode 100644 index 009c02c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_uchar.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check passing of multiple unsigned char values. - Limitations: none. - PR: PR13221. - Originator: 20031129 */ - -/* { dg-do run } */ -#include "ffitest.h" - -unsigned char test_func_fn(unsigned char a1, unsigned char a2, - unsigned char a3, unsigned char a4) -{ - unsigned char result; - - result = a1 + a2 + a3 + a4; - - printf("%d %d %d %d: %d\n", a1, a2, a3, a4, result); - - return result; - -} - -static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals, - void *data __UNUSED__) -{ - unsigned char a1, a2, a3, a4; - - a1 = *(unsigned char *)avals[0]; - a2 = *(unsigned char *)avals[1]; - a3 = *(unsigned char *)avals[2]; - a4 = *(unsigned char *)avals[3]; - - *(ffi_arg *)rval = test_func_fn(a1, a2, a3, a4); - -} - -typedef unsigned char (*test_type)(unsigned char, unsigned char, - unsigned char, unsigned char); - -void test_func(ffi_cif *cif __UNUSED__, void *rval __UNUSED__, void **avals, - void *data __UNUSED__) -{ - printf("%d %d %d %d\n", *(unsigned char *)avals[0], - *(unsigned char *)avals[1], *(unsigned char *)avals[2], - *(unsigned char *)avals[3]); -} -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void * args_dbl[5]; - ffi_type * cl_arg_types[5]; - ffi_arg res_call; - unsigned char a, b, c, d, res_closure; - - a = 1; - b = 2; - c = 127; - d = 125; - - args_dbl[0] = &a; - args_dbl[1] = &b; - args_dbl[2] = &c; - args_dbl[3] = &d; - args_dbl[4] = NULL; - - cl_arg_types[0] = &ffi_type_uchar; - cl_arg_types[1] = &ffi_type_uchar; - cl_arg_types[2] = &ffi_type_uchar; - cl_arg_types[3] = &ffi_type_uchar; - cl_arg_types[4] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, - &ffi_type_uchar, cl_arg_types) == FFI_OK); - - ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl); - /* { dg-output "1 2 127 125: 255" } */ - printf("res: %d\n", (unsigned char)res_call); - /* { dg-output "\nres: 255" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK); - - res_closure = (*((test_type)code))(1, 2, 127, 125); - /* { dg-output "\n1 2 127 125: 255" } */ - printf("res: %d\n", res_closure); - /* { dg-output "\nres: 255" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushort.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushort.c deleted file mode 100644 index dd10ca7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushort.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check passing of multiple unsigned short values. - Limitations: none. - PR: PR13221. - Originator: 20031129 */ - -/* { dg-do run } */ -#include "ffitest.h" - -unsigned short test_func_fn(unsigned short a1, unsigned short a2) -{ - unsigned short result; - - result = a1 + a2; - - printf("%d %d: %d\n", a1, a2, result); - - return result; - -} - -static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals, - void *data __UNUSED__) -{ - unsigned short a1, a2; - - a1 = *(unsigned short *)avals[0]; - a2 = *(unsigned short *)avals[1]; - - *(ffi_arg *)rval = test_func_fn(a1, a2); - -} - -typedef unsigned short (*test_type)(unsigned short, unsigned short); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void * args_dbl[3]; - ffi_type * cl_arg_types[3]; - ffi_arg res_call; - unsigned short a, b, res_closure; - - a = 2; - b = 32765; - - args_dbl[0] = &a; - args_dbl[1] = &b; - args_dbl[2] = NULL; - - cl_arg_types[0] = &ffi_type_ushort; - cl_arg_types[1] = &ffi_type_ushort; - cl_arg_types[2] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, - &ffi_type_ushort, cl_arg_types) == FFI_OK); - - ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl); - /* { dg-output "2 32765: 32767" } */ - printf("res: %d\n", (unsigned short)res_call); - /* { dg-output "\nres: 32767" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK); - - res_closure = (*((test_type)code))(2, 32765); - /* { dg-output "\n2 32765: 32767" } */ - printf("res: %d\n", res_closure); - /* { dg-output "\nres: 32767" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushortchar.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushortchar.c deleted file mode 100644 index 2588e97..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushortchar.c +++ /dev/null @@ -1,86 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check passing of multiple unsigned short/char values. - Limitations: none. - PR: PR13221. - Originator: 20031129 */ - -/* { dg-do run } */ -#include "ffitest.h" - -unsigned short test_func_fn(unsigned char a1, unsigned short a2, - unsigned char a3, unsigned short a4) -{ - unsigned short result; - - result = a1 + a2 + a3 + a4; - - printf("%d %d %d %d: %d\n", a1, a2, a3, a4, result); - - return result; - -} - -static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals, - void *data __UNUSED__) -{ - unsigned char a1, a3; - unsigned short a2, a4; - - a1 = *(unsigned char *)avals[0]; - a2 = *(unsigned short *)avals[1]; - a3 = *(unsigned char *)avals[2]; - a4 = *(unsigned short *)avals[3]; - - *(ffi_arg *)rval = test_func_fn(a1, a2, a3, a4); - -} - -typedef unsigned short (*test_type)(unsigned char, unsigned short, - unsigned char, unsigned short); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void * args_dbl[5]; - ffi_type * cl_arg_types[5]; - ffi_arg res_call; - unsigned char a, c; - unsigned short b, d, res_closure; - - a = 1; - b = 2; - c = 127; - d = 128; - - args_dbl[0] = &a; - args_dbl[1] = &b; - args_dbl[2] = &c; - args_dbl[3] = &d; - args_dbl[4] = NULL; - - cl_arg_types[0] = &ffi_type_uchar; - cl_arg_types[1] = &ffi_type_ushort; - cl_arg_types[2] = &ffi_type_uchar; - cl_arg_types[3] = &ffi_type_ushort; - cl_arg_types[4] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, - &ffi_type_ushort, cl_arg_types) == FFI_OK); - - ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl); - /* { dg-output "1 2 127 128: 258" } */ - printf("res: %d\n", (unsigned short)res_call); - /* { dg-output "\nres: 258" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK); - - res_closure = (*((test_type)code))(1, 2, 127, 128); - /* { dg-output "\n1 2 127 128: 258" } */ - printf("res: %d\n", res_closure); - /* { dg-output "\nres: 258" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c deleted file mode 100644 index cf03993..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check pointer arguments. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/6/2007 */ - -/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ -#include "ffitest.h" - -void* cls_pointer_fn(void* a1, void* a2) -{ - void* result = (void*)((intptr_t)a1 + (intptr_t)a2); - - printf("0x%08x 0x%08x: 0x%08x\n", - (unsigned int)(uintptr_t) a1, - (unsigned int)(uintptr_t) a2, - (unsigned int)(uintptr_t) result); - - return result; -} - -static void -cls_pointer_gn(ffi_cif* cif __UNUSED__, void* resp, - void** args, void* userdata __UNUSED__) -{ - void* a1 = *(void**)(args[0]); - void* a2 = *(void**)(args[1]); - - *(void**)resp = cls_pointer_fn(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure* pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args[3]; -// ffi_type cls_pointer_type; - ffi_type* arg_types[3]; - -/* cls_pointer_type.size = sizeof(void*); - cls_pointer_type.alignment = 0; - cls_pointer_type.type = FFI_TYPE_POINTER; - cls_pointer_type.elements = NULL;*/ - - void* arg1 = (void*)0x12345678; - void* arg2 = (void*)0x89abcdef; - ffi_arg res = 0; - - arg_types[0] = &ffi_type_pointer; - arg_types[1] = &ffi_type_pointer; - arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_pointer, - arg_types) == FFI_OK); - - args[0] = &arg1; - args[1] = &arg2; - args[2] = NULL; - - ffi_call(&cif, FFI_FN(cls_pointer_fn), &res, args); - /* { dg-output "0x12345678 0x89abcdef: 0x9be02467" } */ - printf("res: 0x%08x\n", (unsigned int) res); - /* { dg-output "\nres: 0x9be02467" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_pointer_gn, NULL, code) == FFI_OK); - - res = (ffi_arg)(uintptr_t)((void*(*)(void*, void*))(code))(arg1, arg2); - /* { dg-output "\n0x12345678 0x89abcdef: 0x9be02467" } */ - printf("res: 0x%08x\n", (unsigned int) res); - /* { dg-output "\nres: 0x9be02467" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c deleted file mode 100644 index d631cf8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c +++ /dev/null @@ -1,140 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check pointer arguments across multiple hideous stack frames. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/7/2007 */ - -/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ -#include "ffitest.h" - -static long dummyVar; - -long dummy_func( - long double a1, char b1, - long double a2, char b2, - long double a3, char b3, - long double a4, char b4) -{ - return a1 + b1 + a2 + b2 + a3 + b3 + a4 + b4; -} - -void* cls_pointer_fn2(void* a1, void* a2) -{ - long double trample1 = (intptr_t)a1 + (intptr_t)a2; - char trample2 = ((char*)&a1)[0] + ((char*)&a2)[0]; - long double trample3 = (intptr_t)trample1 + (intptr_t)a1; - char trample4 = trample2 + ((char*)&a1)[1]; - long double trample5 = (intptr_t)trample3 + (intptr_t)a2; - char trample6 = trample4 + ((char*)&a2)[1]; - long double trample7 = (intptr_t)trample5 + (intptr_t)trample1; - char trample8 = trample6 + trample2; - - dummyVar = dummy_func(trample1, trample2, trample3, trample4, - trample5, trample6, trample7, trample8); - - void* result = (void*)((intptr_t)a1 + (intptr_t)a2); - - printf("0x%08x 0x%08x: 0x%08x\n", - (unsigned int)(uintptr_t) a1, - (unsigned int)(uintptr_t) a2, - (unsigned int)(uintptr_t) result); - - return result; -} - -void* cls_pointer_fn1(void* a1, void* a2) -{ - long double trample1 = (intptr_t)a1 + (intptr_t)a2; - char trample2 = ((char*)&a1)[0] + ((char*)&a2)[0]; - long double trample3 = (intptr_t)trample1 + (intptr_t)a1; - char trample4 = trample2 + ((char*)&a1)[1]; - long double trample5 = (intptr_t)trample3 + (intptr_t)a2; - char trample6 = trample4 + ((char*)&a2)[1]; - long double trample7 = (intptr_t)trample5 + (intptr_t)trample1; - char trample8 = trample6 + trample2; - - dummyVar = dummy_func(trample1, trample2, trample3, trample4, - trample5, trample6, trample7, trample8); - - void* result = (void*)((intptr_t)a1 + (intptr_t)a2); - - printf("0x%08x 0x%08x: 0x%08x\n", - (unsigned int)(intptr_t) a1, - (unsigned int)(intptr_t) a2, - (unsigned int)(intptr_t) result); - - result = cls_pointer_fn2(result, a1); - - return result; -} - -static void -cls_pointer_gn(ffi_cif* cif __UNUSED__, void* resp, - void** args, void* userdata __UNUSED__) -{ - void* a1 = *(void**)(args[0]); - void* a2 = *(void**)(args[1]); - - long double trample1 = (intptr_t)a1 + (intptr_t)a2; - char trample2 = ((char*)&a1)[0] + ((char*)&a2)[0]; - long double trample3 = (intptr_t)trample1 + (intptr_t)a1; - char trample4 = trample2 + ((char*)&a1)[1]; - long double trample5 = (intptr_t)trample3 + (intptr_t)a2; - char trample6 = trample4 + ((char*)&a2)[1]; - long double trample7 = (intptr_t)trample5 + (intptr_t)trample1; - char trample8 = trample6 + trample2; - - dummyVar = dummy_func(trample1, trample2, trample3, trample4, - trample5, trample6, trample7, trample8); - - *(void**)resp = cls_pointer_fn1(a1, a2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure* pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args[3]; -// ffi_type cls_pointer_type; - ffi_type* arg_types[3]; - -/* cls_pointer_type.size = sizeof(void*); - cls_pointer_type.alignment = 0; - cls_pointer_type.type = FFI_TYPE_POINTER; - cls_pointer_type.elements = NULL;*/ - - void* arg1 = (void*)0x01234567; - void* arg2 = (void*)0x89abcdef; - ffi_arg res = 0; - - arg_types[0] = &ffi_type_pointer; - arg_types[1] = &ffi_type_pointer; - arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_pointer, - arg_types) == FFI_OK); - - args[0] = &arg1; - args[1] = &arg2; - args[2] = NULL; - - printf("\n"); - ffi_call(&cif, FFI_FN(cls_pointer_fn1), &res, args); - - printf("res: 0x%08x\n", (unsigned int) res); - // { dg-output "\n0x01234567 0x89abcdef: 0x8acf1356" } - // { dg-output "\n0x8acf1356 0x01234567: 0x8bf258bd" } - // { dg-output "\nres: 0x8bf258bd" } - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_pointer_gn, NULL, code) == FFI_OK); - - res = (ffi_arg)(uintptr_t)((void*(*)(void*, void*))(code))(arg1, arg2); - - printf("res: 0x%08x\n", (unsigned int) res); - // { dg-output "\n0x01234567 0x89abcdef: 0x8acf1356" } - // { dg-output "\n0x8acf1356 0x01234567: 0x8bf258bd" } - // { dg-output "\nres: 0x8bf258bd" } - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_schar.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_schar.c deleted file mode 100644 index 82986b1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_schar.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Area: closure_call - Purpose: Check return value schar. - Limitations: none. - PR: none. - Originator: 20031108 */ - - - -/* { dg-do run } */ -#include "ffitest.h" - -static void cls_ret_schar_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - *(ffi_arg*)resp = *(signed char *)args[0]; - printf("%d: %d\n",*(signed char *)args[0], - (int)*(ffi_arg *)(resp)); -} -typedef signed char (*cls_ret_schar)(signed char); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[2]; - signed char res; - - cl_arg_types[0] = &ffi_type_schar; - cl_arg_types[1] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_schar, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_schar_fn, NULL, code) == FFI_OK); - - res = (*((cls_ret_schar)code))(127); - /* { dg-output "127: 127" } */ - printf("res: %d\n", res); - /* { dg-output "\nres: 127" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_sint.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_sint.c deleted file mode 100644 index c7e13b7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_sint.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Area: closure_call - Purpose: Check return value sint32. - Limitations: none. - PR: none. - Originator: 20031108 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static void cls_ret_sint_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - *(ffi_arg*)resp = *(signed int *)args[0]; - printf("%d: %d\n",*(signed int *)args[0], - (int)*(ffi_arg *)(resp)); -} -typedef signed int (*cls_ret_sint)(signed int); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[2]; - signed int res; - - cl_arg_types[0] = &ffi_type_sint; - cl_arg_types[1] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_sint, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_sint_fn, NULL, code) == FFI_OK); - - res = (*((cls_ret_sint)code))(65534); - /* { dg-output "65534: 65534" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 65534" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_sshort.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_sshort.c deleted file mode 100644 index 846d57e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_sshort.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Area: closure_call - Purpose: Check return value sshort. - Limitations: none. - PR: none. - Originator: 20031108 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static void cls_ret_sshort_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - *(ffi_arg*)resp = *(signed short *)args[0]; - printf("%d: %d\n",*(signed short *)args[0], - (int)*(ffi_arg *)(resp)); -} -typedef signed short (*cls_ret_sshort)(signed short); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[2]; - signed short res; - - cl_arg_types[0] = &ffi_type_sshort; - cl_arg_types[1] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_sshort, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_sshort_fn, NULL, code) == FFI_OK); - - res = (*((cls_ret_sshort)code))(255); - /* { dg-output "255: 255" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 255" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar.c deleted file mode 100644 index c1317e7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Area: closure_call - Purpose: Check return value uchar. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static void cls_ret_uchar_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - *(ffi_arg*)resp = *(unsigned char *)args[0]; - printf("%d: %d\n",*(unsigned char *)args[0], - (int)*(ffi_arg *)(resp)); -} -typedef unsigned char (*cls_ret_uchar)(unsigned char); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[2]; - unsigned char res; - - cl_arg_types[0] = &ffi_type_uchar; - cl_arg_types[1] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_uchar, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_uchar_fn, NULL, code) == FFI_OK); - - res = (*((cls_ret_uchar)code))(127); - /* { dg-output "127: 127" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 127" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint.c deleted file mode 100644 index 885cff5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Area: closure_call - Purpose: Check return value uint. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static void cls_ret_uint_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - *(ffi_arg *)resp = *(unsigned int *)args[0]; - - printf("%d: %d\n",*(unsigned int *)args[0], - (int)*(ffi_arg *)(resp)); -} -typedef unsigned int (*cls_ret_uint)(unsigned int); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[2]; - unsigned int res; - - cl_arg_types[0] = &ffi_type_uint; - cl_arg_types[1] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_uint, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_uint_fn, NULL, code) == FFI_OK); - - res = (*((cls_ret_uint)code))(2147483647); - /* { dg-output "2147483647: 2147483647" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 2147483647" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c deleted file mode 100644 index 235ab44..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Area: closure_call - Purpose: Check return value long long. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -/* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */ -#include "ffitest.h" - -static void cls_ret_ulonglong_fn(ffi_cif* cif __UNUSED__, void* resp, - void** args, void* userdata __UNUSED__) -{ - *(unsigned long long *)resp= *(unsigned long long *)args[0]; - - printf("%" PRIuLL ": %" PRIuLL "\n",*(unsigned long long *)args[0], - *(unsigned long long *)(resp)); -} -typedef unsigned long long (*cls_ret_ulonglong)(unsigned long long); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[2]; - unsigned long long res; - - cl_arg_types[0] = &ffi_type_uint64; - cl_arg_types[1] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_uint64, cl_arg_types) == FFI_OK); - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_ulonglong_fn, NULL, code) == FFI_OK); - res = (*((cls_ret_ulonglong)code))(214LL); - /* { dg-output "214: 214" } */ - printf("res: %" PRIdLL "\n", res); - /* { dg-output "\nres: 214" } */ - - res = (*((cls_ret_ulonglong)code))(9223372035854775808LL); - /* { dg-output "\n9223372035854775808: 9223372035854775808" } */ - printf("res: %" PRIdLL "\n", res); - /* { dg-output "\nres: 9223372035854775808" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort.c deleted file mode 100644 index a00100e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Area: closure_call - Purpose: Check return value ushort. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static void cls_ret_ushort_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - *(ffi_arg*)resp = *(unsigned short *)args[0]; - - printf("%d: %d\n",*(unsigned short *)args[0], - (int)*(ffi_arg *)(resp)); -} -typedef unsigned short (*cls_ret_ushort)(unsigned short); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[2]; - unsigned short res; - - cl_arg_types[0] = &ffi_type_ushort; - cl_arg_types[1] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_ushort, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_ushort_fn, NULL, code) == FFI_OK); - - res = (*((cls_ret_ushort)code))(65535); - /* { dg-output "65535: 65535" } */ - printf("res: %d\n",res); - /* { dg-output "\nres: 65535" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_abi.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_abi.c deleted file mode 100644 index f5a7317..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_abi.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Area: ffi_prep_cif, ffi_prep_closure - Purpose: Test error return for bad ABIs. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/6/2007 */ - -/* { dg-do run } */ - -#include "ffitest.h" - -static void -dummy_fn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__, - void** args __UNUSED__, void* userdata __UNUSED__) -{} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type* arg_types[1]; - - arg_types[0] = NULL; - - CHECK(ffi_prep_cif(&cif, 255, 0, &ffi_type_void, - arg_types) == FFI_BAD_ABI); - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 0, &ffi_type_void, - arg_types) == FFI_OK); - - cif.abi= 255; - - CHECK(ffi_prep_closure_loc(pcl, &cif, dummy_fn, NULL, code) == FFI_BAD_ABI); - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c deleted file mode 100644 index 2539273..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Area: ffi_prep_cif - Purpose: Test error return for bad typedefs. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/6/2007 */ - -/* { dg-do run } */ - -#include "ffitest.h" - -int main (void) -{ - ffi_cif cif; - ffi_type* arg_types[1]; - - arg_types[0] = NULL; - - ffi_type badType = ffi_type_void; - - badType.size = 0; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 0, &badType, - arg_types) == FFI_BAD_TYPEDEF); - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h deleted file mode 100644 index 0e95e16..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +++ /dev/null @@ -1,153 +0,0 @@ -#include -#include -#include -#include -#include -#include "fficonfig.h" - -#if defined HAVE_STDINT_H -#include -#endif - -#if defined HAVE_INTTYPES_H -#include -#endif - -#define MAX_ARGS 256 - -#define CHECK(x) !(x) ? abort() : 0 - -/* Define __UNUSED__ that also other compilers than gcc can run the tests. */ -#undef __UNUSED__ -#if defined(__GNUC__) -#define __UNUSED__ __attribute__((__unused__)) -#else -#define __UNUSED__ -#endif - -/* Prefer MAP_ANON(YMOUS) to /dev/zero, since we don't need to keep a - file open. */ -#ifdef HAVE_MMAP_ANON -# undef HAVE_MMAP_DEV_ZERO - -# include -# ifndef MAP_FAILED -# define MAP_FAILED -1 -# endif -# if !defined (MAP_ANONYMOUS) && defined (MAP_ANON) -# define MAP_ANONYMOUS MAP_ANON -# endif -# define USING_MMAP - -#endif - -#ifdef HAVE_MMAP_DEV_ZERO - -# include -# ifndef MAP_FAILED -# define MAP_FAILED -1 -# endif -# define USING_MMAP - -#endif - -/* MinGW kludge. */ -#ifdef _WIN64 -#define PRIdLL "I64d" -#define PRIuLL "I64u" -#else -#define PRIdLL "lld" -#define PRIuLL "llu" -#endif - -/* Tru64 UNIX kludge. */ -#if defined(__alpha__) && defined(__osf__) -/* Tru64 UNIX V4.0 doesn't support %lld/%lld, but long is 64-bit. */ -#undef PRIdLL -#define PRIdLL "ld" -#undef PRIuLL -#define PRIuLL "lu" -#define PRId8 "hd" -#define PRIu8 "hu" -#define PRId64 "ld" -#define PRIu64 "lu" -#define PRIuPTR "lu" -#endif - -/* PA HP-UX kludge. */ -#if defined(__hppa__) && defined(__hpux__) && !defined(PRIuPTR) -#define PRIuPTR "lu" -#endif - -/* IRIX kludge. */ -#if defined(__sgi) -/* IRIX 6.5 provides all definitions, but only for C99 - compilations. */ -#define PRId8 "hhd" -#define PRIu8 "hhu" -#if (_MIPS_SZLONG == 32) -#define PRId64 "lld" -#define PRIu64 "llu" -#endif -/* This doesn't match , which always has "lld" here, but the - arguments are uint64_t, int64_t, which are unsigned long, long for - 64-bit in . */ -#if (_MIPS_SZLONG == 64) -#define PRId64 "ld" -#define PRIu64 "lu" -#endif -/* This doesn't match , which has "u" here, but the arguments - are uintptr_t, which is always unsigned long. */ -#define PRIuPTR "lu" -#endif - -/* Solaris < 10 kludge. */ -#if defined(__sun__) && defined(__svr4__) && !defined(PRIuPTR) -#if defined(__arch64__) || defined (__x86_64__) -#define PRIuPTR "lu" -#else -#define PRIuPTR "u" -#endif -#endif - -#ifdef USING_MMAP -static inline void * -allocate_mmap (size_t size) -{ - void *page; -#if defined (HAVE_MMAP_DEV_ZERO) - static int dev_zero_fd = -1; -#endif - -#ifdef HAVE_MMAP_DEV_ZERO - if (dev_zero_fd == -1) - { - dev_zero_fd = open ("/dev/zero", O_RDONLY); - if (dev_zero_fd == -1) - { - perror ("open /dev/zero: %m"); - exit (1); - } - } -#endif - - -#ifdef HAVE_MMAP_ANON - page = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC, - MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); -#endif -#ifdef HAVE_MMAP_DEV_ZERO - page = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC, - MAP_PRIVATE, dev_zero_fd, 0); -#endif - - if (page == (void *) MAP_FAILED) - { - perror ("virtual memory exhausted"); - exit (1); - } - - return page; -} - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/float.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/float.c deleted file mode 100644 index fbc272d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/float.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value float. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ - -#include "ffitest.h" - -static int floating(int a, float b, double c, long double d) -{ - int i; - - i = (int) ((float)a/b + ((float)c/(float)d)); - - return i; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_arg rint; - - float f; - signed int si1; - double d; - long double ld; - - args[0] = &ffi_type_sint; - values[0] = &si1; - args[1] = &ffi_type_float; - values[1] = &f; - args[2] = &ffi_type_double; - values[2] = &d; - args[3] = &ffi_type_longdouble; - values[3] = &ld; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, - &ffi_type_sint, args) == FFI_OK); - - si1 = 6; - f = 3.14159; - d = (double)1.0/(double)3.0; - ld = 2.71828182846L; - - floating (si1, f, d, ld); - - ffi_call(&cif, FFI_FN(floating), &rint, values); - - printf ("%d vs %d\n", (int)rint, floating (si1, f, d, ld)); - - CHECK((int)rint == floating(si1, f, d, ld)); - - exit (0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/float1.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/float1.c deleted file mode 100644 index 991d059..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +++ /dev/null @@ -1,58 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value double. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" -#include "float.h" - -typedef union -{ - double d; - unsigned char c[sizeof (double)]; -} value_type; - -#define CANARY 0xba - -static double dblit(float f) -{ - return f/3.0; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - float f; - value_type result[2]; - unsigned int i; - - args[0] = &ffi_type_float; - values[0] = &f; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_double, args) == FFI_OK); - - f = 3.14159; - - /* Put a canary in the return array. This is a regression test for - a buffer overrun. */ - memset(result[1].c, CANARY, sizeof (double)); - - ffi_call(&cif, FFI_FN(dblit), &result[0].d, values); - - /* These are not always the same!! Check for a reasonable delta */ - - CHECK(result[0].d - dblit(f) < DBL_EPSILON); - - /* Check the canary. */ - for (i = 0; i < sizeof (double); ++i) - CHECK(result[1].c[i] == CANARY); - - exit(0); - -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/float2.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/float2.c deleted file mode 100644 index a0b296c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +++ /dev/null @@ -1,58 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value long double. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-excess-errors "fails" { target x86_64-*-mingw* x86_64-*-cygwin* } } */ -/* { dg-do run { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ - -#include "ffitest.h" -#include "float.h" - -static long double ldblit(float f) -{ - return (long double) (((long double) f)/ (long double) 3.0); -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - float f; - long double ld; - - args[0] = &ffi_type_float; - values[0] = &f; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_longdouble, args) == FFI_OK); - - f = 3.14159; - -#if 1 - /* This is ifdef'd out for now. long double support under SunOS/gcc - is pretty much non-existent. You'll get the odd bus error in library - routines like printf(). */ - printf ("%Lf\n", ldblit(f)); -#endif - ld = 666; - ffi_call(&cif, FFI_FN(ldblit), &ld, values); - -#if 1 - /* This is ifdef'd out for now. long double support under SunOS/gcc - is pretty much non-existent. You'll get the odd bus error in library - routines like printf(). */ - printf ("%Lf, %Lf, %Lf, %Lf\n", ld, ldblit(f), ld - ldblit(f), LDBL_EPSILON); -#endif - - /* These are not always the same!! Check for a reasonable delta */ - if (ld - ldblit(f) < LDBL_EPSILON) - puts("long double return value tests ok!"); - else - CHECK(0); - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/float3.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/float3.c deleted file mode 100644 index 76bd5f2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +++ /dev/null @@ -1,72 +0,0 @@ -/* Area: ffi_call - Purpose: Check float arguments with different orders. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ - -#include "ffitest.h" -#include "float.h" - -static double floating_1(float a, double b, long double c) -{ - return (double) a + b + (double) c; -} - -static double floating_2(long double a, double b, float c) -{ - return (double) a + b + (double) c; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - double rd; - - float f; - double d; - long double ld; - - args[0] = &ffi_type_float; - values[0] = &f; - args[1] = &ffi_type_double; - values[1] = &d; - args[2] = &ffi_type_longdouble; - values[2] = &ld; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, - &ffi_type_double, args) == FFI_OK); - - f = 3.14159; - d = (double)1.0/(double)3.0; - ld = 2.71828182846L; - - floating_1 (f, d, ld); - - ffi_call(&cif, FFI_FN(floating_1), &rd, values); - - CHECK(rd - floating_1(f, d, ld) < DBL_EPSILON); - - args[0] = &ffi_type_longdouble; - values[0] = &ld; - args[1] = &ffi_type_double; - values[1] = &d; - args[2] = &ffi_type_float; - values[2] = &f; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, - &ffi_type_double, args) == FFI_OK); - - floating_2 (ld, d, f); - - ffi_call(&cif, FFI_FN(floating_2), &rd, values); - - CHECK(rd - floating_2(ld, d, f) < DBL_EPSILON); - - exit (0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/float4.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/float4.c deleted file mode 100644 index 0dd6d85..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/float4.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Area: ffi_call - Purpose: Check denorm double value. - Limitations: none. - PR: PR26483. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -/* { dg-options "-mieee" { target alpha*-*-* } } */ - -#include "ffitest.h" -#include "float.h" - -typedef union -{ - double d; - unsigned char c[sizeof (double)]; -} value_type; - -#define CANARY 0xba - -static double dblit(double d) -{ - return d; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - double d; - value_type result[2]; - unsigned int i; - - args[0] = &ffi_type_double; - values[0] = &d; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_double, args) == FFI_OK); - - d = DBL_MIN / 2; - - /* Put a canary in the return array. This is a regression test for - a buffer overrun. */ - memset(result[1].c, CANARY, sizeof (double)); - - ffi_call(&cif, FFI_FN(dblit), &result[0].d, values); - - /* The standard delta check doesn't work for denorms. Since we didn't do - any arithmetic, we should get the original result back, and hence an - exact check should be OK here. */ - - CHECK(result[0].d == dblit(d)); - - /* Check the canary. */ - for (i = 0; i < sizeof (double); ++i) - CHECK(result[1].c[i] == CANARY); - - exit(0); - -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c deleted file mode 100644 index e04e1d5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c +++ /dev/null @@ -1,342 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check large structure returns. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/18/2007 -*/ - -/* { dg-excess-errors "" { target x86_64-*-mingw* x86_64-*-cygwin* } } */ -/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ -/* { dg-options -mlong-double-128 { target powerpc64*-*-linux* } } */ -/* { dg-output "" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ - -#include "ffitest.h" - -typedef struct BigStruct{ - uint8_t a; - int8_t b; - uint16_t c; - int16_t d; - uint32_t e; - int32_t f; - uint64_t g; - int64_t h; - float i; - double j; - long double k; - char* l; - uint8_t m; - int8_t n; - uint16_t o; - int16_t p; - uint32_t q; - int32_t r; - uint64_t s; - int64_t t; - float u; - double v; - long double w; - char* x; - uint8_t y; - int8_t z; - uint16_t aa; - int16_t bb; - uint32_t cc; - int32_t dd; - uint64_t ee; - int64_t ff; - float gg; - double hh; - long double ii; - char* jj; - uint8_t kk; - int8_t ll; - uint16_t mm; - int16_t nn; - uint32_t oo; - int32_t pp; - uint64_t qq; - int64_t rr; - float ss; - double tt; - long double uu; - char* vv; - uint8_t ww; - int8_t xx; -} BigStruct; - -BigStruct -test_large_fn( - uint8_t ui8_1, - int8_t si8_1, - uint16_t ui16_1, - int16_t si16_1, - uint32_t ui32_1, - int32_t si32_1, - uint64_t ui64_1, - int64_t si64_1, - float f_1, - double d_1, - long double ld_1, - char* p_1, - uint8_t ui8_2, - int8_t si8_2, - uint16_t ui16_2, - int16_t si16_2, - uint32_t ui32_2, - int32_t si32_2, - uint64_t ui64_2, - int64_t si64_2, - float f_2, - double d_2, - long double ld_2, - char* p_2, - uint8_t ui8_3, - int8_t si8_3, - uint16_t ui16_3, - int16_t si16_3, - uint32_t ui32_3, - int32_t si32_3, - uint64_t ui64_3, - int64_t si64_3, - float f_3, - double d_3, - long double ld_3, - char* p_3, - uint8_t ui8_4, - int8_t si8_4, - uint16_t ui16_4, - int16_t si16_4, - uint32_t ui32_4, - int32_t si32_4, - uint64_t ui64_4, - int64_t si64_4, - float f_4, - double d_4, - long double ld_4, - char* p_4, - uint8_t ui8_5, - int8_t si8_5) -{ - BigStruct retVal = { - ui8_1 + 1, si8_1 + 1, ui16_1 + 1, si16_1 + 1, ui32_1 + 1, si32_1 + 1, - ui64_1 + 1, si64_1 + 1, f_1 + 1, d_1 + 1, ld_1 + 1, (char*)((intptr_t)p_1 + 1), - ui8_2 + 2, si8_2 + 2, ui16_2 + 2, si16_2 + 2, ui32_2 + 2, si32_2 + 2, - ui64_2 + 2, si64_2 + 2, f_2 + 2, d_2 + 2, ld_2 + 2, (char*)((intptr_t)p_2 + 2), - ui8_3 + 3, si8_3 + 3, ui16_3 + 3, si16_3 + 3, ui32_3 + 3, si32_3 + 3, - ui64_3 + 3, si64_3 + 3, f_3 + 3, d_3 + 3, ld_3 + 3, (char*)((intptr_t)p_3 + 3), - ui8_4 + 4, si8_4 + 4, ui16_4 + 4, si16_4 + 4, ui32_4 + 4, si32_4 + 4, - ui64_4 + 4, si64_4 + 4, f_4 + 4, d_4 + 4, ld_4 + 4, (char*)((intptr_t)p_4 + 4), - ui8_5 + 5, si8_5 + 5}; - - printf("%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx " - "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx " - "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx " - "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %" PRIu8 " %" PRId8 ": " - "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx " - "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx " - "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx " - "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %" PRIu8 " %" PRId8 "\n", - ui8_1, si8_1, ui16_1, si16_1, ui32_1, si32_1, ui64_1, si64_1, f_1, d_1, ld_1, (unsigned long)p_1, - ui8_2, si8_2, ui16_2, si16_2, ui32_2, si32_2, ui64_2, si64_2, f_2, d_2, ld_2, (unsigned long)p_2, - ui8_3, si8_3, ui16_3, si16_3, ui32_3, si32_3, ui64_3, si64_3, f_3, d_3, ld_3, (unsigned long)p_3, - ui8_4, si8_4, ui16_4, si16_4, ui32_4, si32_4, ui64_4, si64_4, f_4, d_4, ld_4, (unsigned long)p_4, ui8_5, si8_5, - retVal.a, retVal.b, retVal.c, retVal.d, retVal.e, retVal.f, - retVal.g, retVal.h, retVal.i, retVal.j, retVal.k, (unsigned long)retVal.l, - retVal.m, retVal.n, retVal.o, retVal.p, retVal.q, retVal.r, - retVal.s, retVal.t, retVal.u, retVal.v, retVal.w, (unsigned long)retVal.x, - retVal.y, retVal.z, retVal.aa, retVal.bb, retVal.cc, retVal.dd, - retVal.ee, retVal.ff, retVal.gg, retVal.hh, retVal.ii, (unsigned long)retVal.jj, - retVal.kk, retVal.ll, retVal.mm, retVal.nn, retVal.oo, retVal.pp, - retVal.qq, retVal.rr, retVal.ss, retVal.tt, retVal.uu, (unsigned long)retVal.vv, retVal.ww, retVal.xx); - - return retVal; -} - -static void -cls_large_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, void* userdata __UNUSED__) -{ - uint8_t ui8_1 = *(uint8_t*)args[0]; - int8_t si8_1 = *(int8_t*)args[1]; - uint16_t ui16_1 = *(uint16_t*)args[2]; - int16_t si16_1 = *(int16_t*)args[3]; - uint32_t ui32_1 = *(uint32_t*)args[4]; - int32_t si32_1 = *(int32_t*)args[5]; - uint64_t ui64_1 = *(uint64_t*)args[6]; - int64_t si64_1 = *(int64_t*)args[7]; - float f_1 = *(float*)args[8]; - double d_1 = *(double*)args[9]; - long double ld_1 = *(long double*)args[10]; - char* p_1 = *(char**)args[11]; - uint8_t ui8_2 = *(uint8_t*)args[12]; - int8_t si8_2 = *(int8_t*)args[13]; - uint16_t ui16_2 = *(uint16_t*)args[14]; - int16_t si16_2 = *(int16_t*)args[15]; - uint32_t ui32_2 = *(uint32_t*)args[16]; - int32_t si32_2 = *(int32_t*)args[17]; - uint64_t ui64_2 = *(uint64_t*)args[18]; - int64_t si64_2 = *(int64_t*)args[19]; - float f_2 = *(float*)args[20]; - double d_2 = *(double*)args[21]; - long double ld_2 = *(long double*)args[22]; - char* p_2 = *(char**)args[23]; - uint8_t ui8_3 = *(uint8_t*)args[24]; - int8_t si8_3 = *(int8_t*)args[25]; - uint16_t ui16_3 = *(uint16_t*)args[26]; - int16_t si16_3 = *(int16_t*)args[27]; - uint32_t ui32_3 = *(uint32_t*)args[28]; - int32_t si32_3 = *(int32_t*)args[29]; - uint64_t ui64_3 = *(uint64_t*)args[30]; - int64_t si64_3 = *(int64_t*)args[31]; - float f_3 = *(float*)args[32]; - double d_3 = *(double*)args[33]; - long double ld_3 = *(long double*)args[34]; - char* p_3 = *(char**)args[35]; - uint8_t ui8_4 = *(uint8_t*)args[36]; - int8_t si8_4 = *(int8_t*)args[37]; - uint16_t ui16_4 = *(uint16_t*)args[38]; - int16_t si16_4 = *(int16_t*)args[39]; - uint32_t ui32_4 = *(uint32_t*)args[40]; - int32_t si32_4 = *(int32_t*)args[41]; - uint64_t ui64_4 = *(uint64_t*)args[42]; - int64_t si64_4 = *(int64_t*)args[43]; - float f_4 = *(float*)args[44]; - double d_4 = *(double*)args[45]; - long double ld_4 = *(long double*)args[46]; - char* p_4 = *(char**)args[47]; - uint8_t ui8_5 = *(uint8_t*)args[48]; - int8_t si8_5 = *(int8_t*)args[49]; - - *(BigStruct*)resp = test_large_fn( - ui8_1, si8_1, ui16_1, si16_1, ui32_1, si32_1, ui64_1, si64_1, f_1, d_1, ld_1, p_1, - ui8_2, si8_2, ui16_2, si16_2, ui32_2, si32_2, ui64_2, si64_2, f_2, d_2, ld_2, p_2, - ui8_3, si8_3, ui16_3, si16_3, ui32_3, si32_3, ui64_3, si64_3, f_3, d_3, ld_3, p_3, - ui8_4, si8_4, ui16_4, si16_4, ui32_4, si32_4, ui64_4, si64_4, f_4, d_4, ld_4, p_4, - ui8_5, si8_5); -} - -int -main(int argc __UNUSED__, const char** argv __UNUSED__) -{ - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - - ffi_cif cif; - ffi_type* argTypes[51]; - void* argValues[51]; - - ffi_type ret_struct_type; - ffi_type* st_fields[51]; - BigStruct retVal; - - memset (&retVal, 0, sizeof(retVal)); - - ret_struct_type.size = 0; - ret_struct_type.alignment = 0; - ret_struct_type.type = FFI_TYPE_STRUCT; - ret_struct_type.elements = st_fields; - - st_fields[0] = st_fields[12] = st_fields[24] = st_fields[36] = st_fields[48] = &ffi_type_uint8; - st_fields[1] = st_fields[13] = st_fields[25] = st_fields[37] = st_fields[49] = &ffi_type_sint8; - st_fields[2] = st_fields[14] = st_fields[26] = st_fields[38] = &ffi_type_uint16; - st_fields[3] = st_fields[15] = st_fields[27] = st_fields[39] = &ffi_type_sint16; - st_fields[4] = st_fields[16] = st_fields[28] = st_fields[40] = &ffi_type_uint32; - st_fields[5] = st_fields[17] = st_fields[29] = st_fields[41] = &ffi_type_sint32; - st_fields[6] = st_fields[18] = st_fields[30] = st_fields[42] = &ffi_type_uint64; - st_fields[7] = st_fields[19] = st_fields[31] = st_fields[43] = &ffi_type_sint64; - st_fields[8] = st_fields[20] = st_fields[32] = st_fields[44] = &ffi_type_float; - st_fields[9] = st_fields[21] = st_fields[33] = st_fields[45] = &ffi_type_double; - st_fields[10] = st_fields[22] = st_fields[34] = st_fields[46] = &ffi_type_longdouble; - st_fields[11] = st_fields[23] = st_fields[35] = st_fields[47] = &ffi_type_pointer; - - st_fields[50] = NULL; - - uint8_t ui8 = 1; - int8_t si8 = 2; - uint16_t ui16 = 3; - int16_t si16 = 4; - uint32_t ui32 = 5; - int32_t si32 = 6; - uint64_t ui64 = 7; - int64_t si64 = 8; - float f = 9; - double d = 10; - long double ld = 11; - char* p = (char*)0x12345678; - - argTypes[0] = argTypes[12] = argTypes[24] = argTypes[36] = argTypes[48] = &ffi_type_uint8; - argValues[0] = argValues[12] = argValues[24] = argValues[36] = argValues[48] = &ui8; - argTypes[1] = argTypes[13] = argTypes[25] = argTypes[37] = argTypes[49] = &ffi_type_sint8; - argValues[1] = argValues[13] = argValues[25] = argValues[37] = argValues[49] = &si8; - argTypes[2] = argTypes[14] = argTypes[26] = argTypes[38] = &ffi_type_uint16; - argValues[2] = argValues[14] = argValues[26] = argValues[38] = &ui16; - argTypes[3] = argTypes[15] = argTypes[27] = argTypes[39] = &ffi_type_sint16; - argValues[3] = argValues[15] = argValues[27] = argValues[39] = &si16; - argTypes[4] = argTypes[16] = argTypes[28] = argTypes[40] = &ffi_type_uint32; - argValues[4] = argValues[16] = argValues[28] = argValues[40] = &ui32; - argTypes[5] = argTypes[17] = argTypes[29] = argTypes[41] = &ffi_type_sint32; - argValues[5] = argValues[17] = argValues[29] = argValues[41] = &si32; - argTypes[6] = argTypes[18] = argTypes[30] = argTypes[42] = &ffi_type_uint64; - argValues[6] = argValues[18] = argValues[30] = argValues[42] = &ui64; - argTypes[7] = argTypes[19] = argTypes[31] = argTypes[43] = &ffi_type_sint64; - argValues[7] = argValues[19] = argValues[31] = argValues[43] = &si64; - argTypes[8] = argTypes[20] = argTypes[32] = argTypes[44] = &ffi_type_float; - argValues[8] = argValues[20] = argValues[32] = argValues[44] = &f; - argTypes[9] = argTypes[21] = argTypes[33] = argTypes[45] = &ffi_type_double; - argValues[9] = argValues[21] = argValues[33] = argValues[45] = &d; - argTypes[10] = argTypes[22] = argTypes[34] = argTypes[46] = &ffi_type_longdouble; - argValues[10] = argValues[22] = argValues[34] = argValues[46] = &ld; - argTypes[11] = argTypes[23] = argTypes[35] = argTypes[47] = &ffi_type_pointer; - argValues[11] = argValues[23] = argValues[35] = argValues[47] = &p; - - argTypes[50] = NULL; - argValues[50] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 50, &ret_struct_type, argTypes) == FFI_OK); - - ffi_call(&cif, FFI_FN(test_large_fn), &retVal, argValues); - // { dg-output "1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } - printf("res: %" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx " - "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx " - "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx " - "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %" PRIu8 " %" PRId8 "\n", - retVal.a, retVal.b, retVal.c, retVal.d, retVal.e, retVal.f, - retVal.g, retVal.h, retVal.i, retVal.j, retVal.k, (unsigned long)retVal.l, - retVal.m, retVal.n, retVal.o, retVal.p, retVal.q, retVal.r, - retVal.s, retVal.t, retVal.u, retVal.v, retVal.w, (unsigned long)retVal.x, - retVal.y, retVal.z, retVal.aa, retVal.bb, retVal.cc, retVal.dd, - retVal.ee, retVal.ff, retVal.gg, retVal.hh, retVal.ii, (unsigned long)retVal.jj, - retVal.kk, retVal.ll, retVal.mm, retVal.nn, retVal.oo, retVal.pp, - retVal.qq, retVal.rr, retVal.ss, retVal.tt, retVal.uu, (unsigned long)retVal.vv, retVal.ww, retVal.xx); - // { dg-output "\nres: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_large_fn, NULL, code) == FFI_OK); - - retVal = ((BigStruct(*)( - uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double, long double, char*, - uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double, long double, char*, - uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double, long double, char*, - uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double, long double, char*, - uint8_t, int8_t))(code))( - ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p, - ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p, - ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p, - ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p, - ui8, si8); - // { dg-output "\n1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } - printf("res: %" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx " - "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx " - "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx " - "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %" PRIu8 " %" PRId8 "\n", - retVal.a, retVal.b, retVal.c, retVal.d, retVal.e, retVal.f, - retVal.g, retVal.h, retVal.i, retVal.j, retVal.k, (unsigned long)retVal.l, - retVal.m, retVal.n, retVal.o, retVal.p, retVal.q, retVal.r, - retVal.s, retVal.t, retVal.u, retVal.v, retVal.w, (unsigned long)retVal.x, - retVal.y, retVal.z, retVal.aa, retVal.bb, retVal.cc, retVal.dd, - retVal.ee, retVal.ff, retVal.gg, retVal.hh, retVal.ii, (unsigned long)retVal.jj, - retVal.kk, retVal.ll, retVal.mm, retVal.nn, retVal.oo, retVal.pp, - retVal.qq, retVal.rr, retVal.ss, retVal.tt, retVal.uu, (unsigned long)retVal.vv, retVal.ww, retVal.xx); - // { dg-output "\nres: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } - - return 0; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/many.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/many.c deleted file mode 100644 index 4869ba9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/many.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value float, with many arguments - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" - -#include - -static float many(float f1, - float f2, - float f3, - float f4, - float f5, - float f6, - float f7, - float f8, - float f9, - float f10, - float f11, - float f12, - float f13) -{ -#if 0 - printf("%f %f %f %f %f %f %f %f %f %f %f %f %f\n", - (double) f1, (double) f2, (double) f3, (double) f4, (double) f5, - (double) f6, (double) f7, (double) f8, (double) f9, (double) f10, - (double) f11, (double) f12, (double) f13); -#endif - - return ((f1/f2+f3/f4+f5/f6+f7/f8+f9/f10+f11/f12) * f13); -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[13]; - void *values[13]; - float fa[13]; - float f, ff; - int i; - - for (i = 0; i < 13; i++) - { - args[i] = &ffi_type_float; - values[i] = &fa[i]; - fa[i] = (float) i; - } - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 13, - &ffi_type_float, args) == FFI_OK); - - ffi_call(&cif, FFI_FN(many), &f, values); - - ff = many(fa[0], fa[1], - fa[2], fa[3], - fa[4], fa[5], - fa[6], fa[7], - fa[8], fa[9], - fa[10],fa[11],fa[12]); - - if (f - ff < FLT_EPSILON) - exit(0); - else - abort(); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c deleted file mode 100644 index 1b26332..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +++ /dev/null @@ -1,63 +0,0 @@ -/* Area: ffi_call - Purpose: Check stdcall many call on X86_WIN32 systems. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run { target i?86-*-cygwin* i?86-*-mingw* } } */ - -#include "ffitest.h" -#include - -static float __attribute__((stdcall)) stdcall_many(float f1, - float f2, - float f3, - float f4, - float f5, - float f6, - float f7, - float f8, - float f9, - float f10, - float f11, - float f12, - float f13) -{ - return ((f1/f2+f3/f4+f5/f6+f7/f8+f9/f10+f11/f12) * f13); -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[13]; - void *values[13]; - float fa[13]; - float f, ff; - unsigned long ul; - - for (ul = 0; ul < 13; ul++) - { - args[ul] = &ffi_type_float; - values[ul] = &fa[ul]; - fa[ul] = (float) ul; - } - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_STDCALL, 13, - &ffi_type_float, args) == FFI_OK); - - ff = stdcall_many(fa[0], fa[1], - fa[2], fa[3], - fa[4], fa[5], - fa[6], fa[7], - fa[8], fa[9], - fa[10], fa[11], fa[12]); - - ffi_call(&cif, FFI_FN(stdcall_many), &f, values); - - if (f - ff < FLT_EPSILON) - printf("stdcall many arg tests ok!\n"); - else - CHECK(0); - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/negint.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/negint.c deleted file mode 100644 index 3168113..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Area: ffi_call - Purpose: Check that negative integers are passed correctly. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -/* { dg-options -O2 } */ - -#include "ffitest.h" - -static int checking(int a, short b, signed char c) -{ - - return (a < 0 && b < 0 && c < 0); -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_arg rint; - - signed int si; - signed short ss; - signed char sc; - - args[0] = &ffi_type_sint; - values[0] = &si; - args[1] = &ffi_type_sshort; - values[1] = &ss; - args[2] = &ffi_type_schar; - values[2] = ≻ - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, - &ffi_type_sint, args) == FFI_OK); - - si = -6; - ss = -12; - sc = -1; - - checking (si, ss, sc); - - ffi_call(&cif, FFI_FN(checking), &rint, values); - - printf ("%d vs %d\n", (int)rint, checking (si, ss, sc)); - - CHECK(rint != 0); - - exit (0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c deleted file mode 100644 index 8aa527e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +++ /dev/null @@ -1,152 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Contains structs as parameter of the struct itself. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_16byte1 { - double a; - float b; - int c; -} cls_struct_16byte1; - -typedef struct cls_struct_16byte2 { - int ii; - double dd; - float ff; -} cls_struct_16byte2; - -typedef struct cls_struct_combined { - cls_struct_16byte1 d; - cls_struct_16byte2 e; -} cls_struct_combined; - -cls_struct_combined cls_struct_combined_fn(struct cls_struct_16byte1 b0, - struct cls_struct_16byte2 b1, - struct cls_struct_combined b2) -{ - struct cls_struct_combined result; - - result.d.a = b0.a + b1.dd + b2.d.a; - result.d.b = b0.b + b1.ff + b2.d.b; - result.d.c = b0.c + b1.ii + b2.d.c; - result.e.ii = b0.c + b1.ii + b2.e.ii; - result.e.dd = b0.a + b1.dd + b2.e.dd; - result.e.ff = b0.b + b1.ff + b2.e.ff; - - printf("%g %g %d %d %g %g %g %g %d %d %g %g: %g %g %d %d %g %g\n", - b0.a, b0.b, b0.c, - b1.ii, b1.dd, b1.ff, - b2.d.a, b2.d.b, b2.d.c, - b2.e.ii, b2.e.dd, b2.e.ff, - result.d.a, result.d.b, result.d.c, - result.e.ii, result.e.dd, result.e.ff); - - return result; -} - -static void -cls_struct_combined_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct cls_struct_16byte1 b0; - struct cls_struct_16byte2 b1; - struct cls_struct_combined b2; - - b0 = *(struct cls_struct_16byte1*)(args[0]); - b1 = *(struct cls_struct_16byte2*)(args[1]); - b2 = *(struct cls_struct_combined*)(args[2]); - - - *(cls_struct_combined*)resp = cls_struct_combined_fn(b0, b1, b2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[5]; - ffi_type* cls_struct_fields1[5]; - ffi_type* cls_struct_fields2[5]; - ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_type1.size = 0; - cls_struct_type1.alignment = 0; - cls_struct_type1.type = FFI_TYPE_STRUCT; - cls_struct_type1.elements = cls_struct_fields1; - - cls_struct_type2.size = 0; - cls_struct_type2.alignment = 0; - cls_struct_type2.type = FFI_TYPE_STRUCT; - cls_struct_type2.elements = cls_struct_fields2; - - struct cls_struct_16byte1 e_dbl = { 9.0, 2.0, 6}; - struct cls_struct_16byte2 f_dbl = { 1, 2.0, 3.0}; - struct cls_struct_combined g_dbl = {{4.0, 5.0, 6}, - {3, 1.0, 8.0}}; - struct cls_struct_combined res_dbl; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_float; - cls_struct_fields[2] = &ffi_type_sint; - cls_struct_fields[3] = NULL; - - cls_struct_fields1[0] = &ffi_type_sint; - cls_struct_fields1[1] = &ffi_type_double; - cls_struct_fields1[2] = &ffi_type_float; - cls_struct_fields1[3] = NULL; - - cls_struct_fields2[0] = &cls_struct_type; - cls_struct_fields2[1] = &cls_struct_type1; - cls_struct_fields2[2] = NULL; - - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type1; - dbl_arg_types[2] = &cls_struct_type2; - dbl_arg_types[3] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, &cls_struct_type2, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = &g_dbl; - args_dbl[3] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_combined_fn), &res_dbl, args_dbl); - /* { dg-output "9 2 6 1 2 3 4 5 6 3 1 8: 15 10 13 10 12 13" } */ - CHECK( res_dbl.d.a == (e_dbl.a + f_dbl.dd + g_dbl.d.a)); - CHECK( res_dbl.d.b == (e_dbl.b + f_dbl.ff + g_dbl.d.b)); - CHECK( res_dbl.d.c == (e_dbl.c + f_dbl.ii + g_dbl.d.c)); - CHECK( res_dbl.e.ii == (e_dbl.c + f_dbl.ii + g_dbl.e.ii)); - CHECK( res_dbl.e.dd == (e_dbl.a + f_dbl.dd + g_dbl.e.dd)); - CHECK( res_dbl.e.ff == (e_dbl.b + f_dbl.ff + g_dbl.e.ff)); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_combined_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_combined(*)(cls_struct_16byte1, - cls_struct_16byte2, - cls_struct_combined)) - (code))(e_dbl, f_dbl, g_dbl); - /* { dg-output "\n9 2 6 1 2 3 4 5 6 3 1 8: 15 10 13 10 12 13" } */ - CHECK( res_dbl.d.a == (e_dbl.a + f_dbl.dd + g_dbl.d.a)); - CHECK( res_dbl.d.b == (e_dbl.b + f_dbl.ff + g_dbl.d.b)); - CHECK( res_dbl.d.c == (e_dbl.c + f_dbl.ii + g_dbl.d.c)); - CHECK( res_dbl.e.ii == (e_dbl.c + f_dbl.ii + g_dbl.e.ii)); - CHECK( res_dbl.e.dd == (e_dbl.a + f_dbl.dd + g_dbl.e.dd)); - CHECK( res_dbl.e.ff == (e_dbl.b + f_dbl.ff + g_dbl.e.ff)); - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c deleted file mode 100644 index 2a9f515..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +++ /dev/null @@ -1,161 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Contains structs as parameter of the struct itself. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_16byte1 { - double a; - float b; - int c; -} cls_struct_16byte1; - -typedef struct cls_struct_16byte2 { - int ii; - double dd; - float ff; -} cls_struct_16byte2; - -typedef struct cls_struct_combined { - cls_struct_16byte1 d; - cls_struct_16byte2 e; -} cls_struct_combined; - -cls_struct_combined cls_struct_combined_fn(struct cls_struct_16byte1 b0, - struct cls_struct_16byte2 b1, - struct cls_struct_combined b2, - struct cls_struct_16byte1 b3) -{ - struct cls_struct_combined result; - - result.d.a = b0.a + b1.dd + b2.d.a; - result.d.b = b0.b + b1.ff + b2.d.b; - result.d.c = b0.c + b1.ii + b2.d.c; - result.e.ii = b0.c + b1.ii + b2.e.ii; - result.e.dd = b0.a + b1.dd + b2.e.dd; - result.e.ff = b0.b + b1.ff + b2.e.ff; - - printf("%g %g %d %d %g %g %g %g %d %d %g %g %g %g %d: %g %g %d %d %g %g\n", - b0.a, b0.b, b0.c, - b1.ii, b1.dd, b1.ff, - b2.d.a, b2.d.b, b2.d.c, - b2.e.ii, b2.e.dd, b2.e.ff, - b3.a, b3.b, b3.c, - result.d.a, result.d.b, result.d.c, - result.e.ii, result.e.dd, result.e.ff); - - return result; -} - -static void -cls_struct_combined_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct cls_struct_16byte1 b0; - struct cls_struct_16byte2 b1; - struct cls_struct_combined b2; - struct cls_struct_16byte1 b3; - - b0 = *(struct cls_struct_16byte1*)(args[0]); - b1 = *(struct cls_struct_16byte2*)(args[1]); - b2 = *(struct cls_struct_combined*)(args[2]); - b3 = *(struct cls_struct_16byte1*)(args[3]); - - - *(cls_struct_combined*)resp = cls_struct_combined_fn(b0, b1, b2, b3); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[5]; - ffi_type* cls_struct_fields1[5]; - ffi_type* cls_struct_fields2[5]; - ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_type1.size = 0; - cls_struct_type1.alignment = 0; - cls_struct_type1.type = FFI_TYPE_STRUCT; - cls_struct_type1.elements = cls_struct_fields1; - - cls_struct_type2.size = 0; - cls_struct_type2.alignment = 0; - cls_struct_type2.type = FFI_TYPE_STRUCT; - cls_struct_type2.elements = cls_struct_fields2; - - struct cls_struct_16byte1 e_dbl = { 9.0, 2.0, 6}; - struct cls_struct_16byte2 f_dbl = { 1, 2.0, 3.0}; - struct cls_struct_combined g_dbl = {{4.0, 5.0, 6}, - {3, 1.0, 8.0}}; - struct cls_struct_16byte1 h_dbl = { 3.0, 2.0, 4}; - struct cls_struct_combined res_dbl; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_float; - cls_struct_fields[2] = &ffi_type_sint; - cls_struct_fields[3] = NULL; - - cls_struct_fields1[0] = &ffi_type_sint; - cls_struct_fields1[1] = &ffi_type_double; - cls_struct_fields1[2] = &ffi_type_float; - cls_struct_fields1[3] = NULL; - - cls_struct_fields2[0] = &cls_struct_type; - cls_struct_fields2[1] = &cls_struct_type1; - cls_struct_fields2[2] = NULL; - - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type1; - dbl_arg_types[2] = &cls_struct_type2; - dbl_arg_types[3] = &cls_struct_type; - dbl_arg_types[4] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, &cls_struct_type2, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = &g_dbl; - args_dbl[3] = &h_dbl; - args_dbl[4] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_combined_fn), &res_dbl, args_dbl); - /* { dg-output "9 2 6 1 2 3 4 5 6 3 1 8 3 2 4: 15 10 13 10 12 13" } */ - CHECK( res_dbl.d.a == (e_dbl.a + f_dbl.dd + g_dbl.d.a)); - CHECK( res_dbl.d.b == (e_dbl.b + f_dbl.ff + g_dbl.d.b)); - CHECK( res_dbl.d.c == (e_dbl.c + f_dbl.ii + g_dbl.d.c)); - CHECK( res_dbl.e.ii == (e_dbl.c + f_dbl.ii + g_dbl.e.ii)); - CHECK( res_dbl.e.dd == (e_dbl.a + f_dbl.dd + g_dbl.e.dd)); - CHECK( res_dbl.e.ff == (e_dbl.b + f_dbl.ff + g_dbl.e.ff)); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_combined_gn, NULL, code) == FFI_OK); - - res_dbl = ((cls_struct_combined(*)(cls_struct_16byte1, - cls_struct_16byte2, - cls_struct_combined, - cls_struct_16byte1)) - (code))(e_dbl, f_dbl, g_dbl, h_dbl); - /* { dg-output "\n9 2 6 1 2 3 4 5 6 3 1 8 3 2 4: 15 10 13 10 12 13" } */ - CHECK( res_dbl.d.a == (e_dbl.a + f_dbl.dd + g_dbl.d.a)); - CHECK( res_dbl.d.b == (e_dbl.b + f_dbl.ff + g_dbl.d.b)); - CHECK( res_dbl.d.c == (e_dbl.c + f_dbl.ii + g_dbl.d.c)); - CHECK( res_dbl.e.ii == (e_dbl.c + f_dbl.ii + g_dbl.e.ii)); - CHECK( res_dbl.e.dd == (e_dbl.a + f_dbl.dd + g_dbl.e.dd)); - CHECK( res_dbl.e.ff == (e_dbl.b + f_dbl.ff + g_dbl.e.ff)); - // CHECK( 1 == 0); - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c deleted file mode 100644 index d6a718b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +++ /dev/null @@ -1,133 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Contains structs as parameter of the struct itself. - Sample taken from Alan Modras patch to src/prep_cif.c. - Limitations: none. - PR: none. - Originator: 20051010 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct A { - unsigned long long a; - unsigned char b; -} A; - -typedef struct B { - unsigned char y; - struct A x; - unsigned int z; -} B; - -typedef struct C { - unsigned long long d; - unsigned char e; -} C; - -static B B_fn(struct A b2, struct B b3, struct C b4) -{ - struct B result; - - result.x.a = b2.a + b3.x.a + b3.z + b4.d; - result.x.b = b2.b + b3.x.b + b3.y + b4.e; - result.y = b2.b + b3.x.b + b4.e; - - printf("%d %d %d %d %d %d %d %d: %d %d %d\n", (int)b2.a, b2.b, - (int)b3.x.a, b3.x.b, b3.y, b3.z, (int)b4.d, b4.e, - (int)result.x.a, result.x.b, result.y); - - return result; -} - -static void -B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct A b0; - struct B b1; - struct C b2; - - b0 = *(struct A*)(args[0]); - b1 = *(struct B*)(args[1]); - b2 = *(struct C*)(args[2]); - - *(B*)resp = B_fn(b0, b1, b2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[4]; - ffi_type* cls_struct_fields[3]; - ffi_type* cls_struct_fields1[4]; - ffi_type* cls_struct_fields2[3]; - ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2; - ffi_type* dbl_arg_types[4]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_type1.size = 0; - cls_struct_type1.alignment = 0; - cls_struct_type1.type = FFI_TYPE_STRUCT; - cls_struct_type1.elements = cls_struct_fields1; - - cls_struct_type2.size = 0; - cls_struct_type2.alignment = 0; - cls_struct_type2.type = FFI_TYPE_STRUCT; - cls_struct_type2.elements = cls_struct_fields2; - - struct A e_dbl = { 1LL, 7}; - struct B f_dbl = { 99, {12LL , 127}, 255}; - struct C g_dbl = { 2LL, 9}; - - struct B res_dbl; - - cls_struct_fields[0] = &ffi_type_uint64; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = NULL; - - cls_struct_fields1[0] = &ffi_type_uchar; - cls_struct_fields1[1] = &cls_struct_type; - cls_struct_fields1[2] = &ffi_type_uint; - cls_struct_fields1[3] = NULL; - - cls_struct_fields2[0] = &ffi_type_uint64; - cls_struct_fields2[1] = &ffi_type_uchar; - cls_struct_fields2[2] = NULL; - - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type1; - dbl_arg_types[2] = &cls_struct_type2; - dbl_arg_types[3] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, &cls_struct_type1, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = &g_dbl; - args_dbl[3] = NULL; - - ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); - /* { dg-output "1 7 12 127 99 255 2 9: 270 242 143" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + f_dbl.z + g_dbl.d)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e)); - - CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); - - res_dbl = ((B(*)(A, B, C))(code))(e_dbl, f_dbl, g_dbl); - /* { dg-output "\n1 7 12 127 99 255 2 9: 270 242 143" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + f_dbl.z + g_dbl.d)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e)); - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c deleted file mode 100644 index de1584c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +++ /dev/null @@ -1,110 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Contains structs as parameter of the struct itself. - Sample taken from Alan Modras patch to src/prep_cif.c. - Limitations: none. - PR: none. - Originator: 20030911 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct A { - unsigned long a; - unsigned char b; -} A; - -typedef struct B { - struct A x; - unsigned char y; -} B; - -B B_fn(struct A b0, struct B b1) -{ - struct B result; - - result.x.a = b0.a + b1.x.a; - result.x.b = b0.b + b1.x.b + b1.y; - result.y = b0.b + b1.x.b; - - printf("%lu %d %lu %d %d: %lu %d %d\n", b0.a, b0.b, b1.x.a, b1.x.b, b1.y, - result.x.a, result.x.b, result.y); - - return result; -} - -static void -B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct A b0; - struct B b1; - - b0 = *(struct A*)(args[0]); - b1 = *(struct B*)(args[1]); - - *(B*)resp = B_fn(b0, b1); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[3]; - ffi_type* cls_struct_fields[3]; - ffi_type* cls_struct_fields1[3]; - ffi_type cls_struct_type, cls_struct_type1; - ffi_type* dbl_arg_types[3]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_type1.size = 0; - cls_struct_type1.alignment = 0; - cls_struct_type1.type = FFI_TYPE_STRUCT; - cls_struct_type1.elements = cls_struct_fields1; - - struct A e_dbl = { 1, 7}; - struct B f_dbl = {{12 , 127}, 99}; - - struct B res_dbl; - - cls_struct_fields[0] = &ffi_type_ulong; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = NULL; - - cls_struct_fields1[0] = &cls_struct_type; - cls_struct_fields1[1] = &ffi_type_uchar; - cls_struct_fields1[2] = NULL; - - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type1; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type1, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); - /* { dg-output "1 7 12 127 99: 13 233 134" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); - - CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); - - res_dbl = ((B(*)(A, B))(code))(e_dbl, f_dbl); - /* { dg-output "\n1 7 12 127 99: 13 233 134" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c deleted file mode 100644 index 58aa853..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +++ /dev/null @@ -1,111 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Contains structs as parameter of the struct itself. - Sample taken from Alan Modras patch to src/prep_cif.c. - Limitations: none. - PR: none. - Originator: 20030911 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct A { - unsigned long long a; - unsigned char b; -} A; - -typedef struct B { - struct A x; - unsigned char y; -} B; - -B B_fn(struct A b0, struct B b1) -{ - struct B result; - - result.x.a = b0.a + b1.x.a; - result.x.b = b0.b + b1.x.b + b1.y; - result.y = b0.b + b1.x.b; - - printf("%d %d %d %d %d: %d %d %d\n", (int)b0.a, b0.b, - (int)b1.x.a, b1.x.b, b1.y, - (int)result.x.a, result.x.b, result.y); - - return result; -} - -static void -B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct A b0; - struct B b1; - - b0 = *(struct A*)(args[0]); - b1 = *(struct B*)(args[1]); - - *(B*)resp = B_fn(b0, b1); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[3]; - ffi_type* cls_struct_fields[3]; - ffi_type* cls_struct_fields1[3]; - ffi_type cls_struct_type, cls_struct_type1; - ffi_type* dbl_arg_types[3]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_type1.size = 0; - cls_struct_type1.alignment = 0; - cls_struct_type1.type = FFI_TYPE_STRUCT; - cls_struct_type1.elements = cls_struct_fields1; - - struct A e_dbl = { 1LL, 7}; - struct B f_dbl = {{12LL , 127}, 99}; - - struct B res_dbl; - - cls_struct_fields[0] = &ffi_type_uint64; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = NULL; - - cls_struct_fields1[0] = &cls_struct_type; - cls_struct_fields1[1] = &ffi_type_uchar; - cls_struct_fields1[2] = NULL; - - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type1; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type1, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); - /* { dg-output "1 7 12 127 99: 13 233 134" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); - - - CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); - - res_dbl = ((B(*)(A, B))(code))(e_dbl, f_dbl); - /* { dg-output "\n1 7 12 127 99: 13 233 134" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c deleted file mode 100644 index 98e491e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +++ /dev/null @@ -1,111 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Contains structs as parameter of the struct itself. - Sample taken from Alan Modras patch to src/prep_cif.c. - Limitations: none. - PR: PR 25630. - Originator: 20051010 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct A { - double a; - unsigned char b; -} A; - -typedef struct B { - struct A x; - unsigned char y; -} B; - -static B B_fn(struct A b2, struct B b3) -{ - struct B result; - - result.x.a = b2.a + b3.x.a; - result.x.b = b2.b + b3.x.b + b3.y; - result.y = b2.b + b3.x.b; - - printf("%d %d %d %d %d: %d %d %d\n", (int)b2.a, b2.b, - (int)b3.x.a, b3.x.b, b3.y, - (int)result.x.a, result.x.b, result.y); - - return result; -} - -static void -B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct A b0; - struct B b1; - - b0 = *(struct A*)(args[0]); - b1 = *(struct B*)(args[1]); - - *(B*)resp = B_fn(b0, b1); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[3]; - ffi_type* cls_struct_fields[3]; - ffi_type* cls_struct_fields1[3]; - ffi_type cls_struct_type, cls_struct_type1; - ffi_type* dbl_arg_types[3]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_type1.size = 0; - cls_struct_type1.alignment = 0; - cls_struct_type1.type = FFI_TYPE_STRUCT; - cls_struct_type1.elements = cls_struct_fields1; - - struct A e_dbl = { 1.0, 7}; - struct B f_dbl = {{12.0 , 127}, 99}; - - struct B res_dbl; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = NULL; - - cls_struct_fields1[0] = &cls_struct_type; - cls_struct_fields1[1] = &ffi_type_uchar; - cls_struct_fields1[2] = NULL; - - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type1; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type1, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); - /* { dg-output "1 7 12 127 99: 13 233 134" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); - - CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); - - res_dbl = ((B(*)(A, B))(code))(e_dbl, f_dbl); - /* { dg-output "\n1 7 12 127 99: 13 233 134" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c deleted file mode 100644 index d8e3537..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +++ /dev/null @@ -1,112 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Contains structs as parameter of the struct itself. - Sample taken from Alan Modras patch to src/prep_cif.c. - Limitations: none. - PR: none. - Originator: 20051010 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct A { - long double a; - unsigned char b; -} A; - -typedef struct B { - struct A x; - unsigned char y; -} B; - -static B B_fn(struct A b2, struct B b3) -{ - struct B result; - - result.x.a = b2.a + b3.x.a; - result.x.b = b2.b + b3.x.b + b3.y; - result.y = b2.b + b3.x.b; - - printf("%d %d %d %d %d: %d %d %d\n", (int)b2.a, b2.b, - (int)b3.x.a, b3.x.b, b3.y, - (int)result.x.a, result.x.b, result.y); - - return result; -} - -static void -B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct A b0; - struct B b1; - - b0 = *(struct A*)(args[0]); - b1 = *(struct B*)(args[1]); - - *(B*)resp = B_fn(b0, b1); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[3]; - ffi_type* cls_struct_fields[3]; - ffi_type* cls_struct_fields1[3]; - ffi_type cls_struct_type, cls_struct_type1; - ffi_type* dbl_arg_types[3]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_type1.size = 0; - cls_struct_type1.alignment = 0; - cls_struct_type1.type = FFI_TYPE_STRUCT; - cls_struct_type1.elements = cls_struct_fields1; - - struct A e_dbl = { 1.0, 7}; - struct B f_dbl = {{12.0 , 127}, 99}; - - struct B res_dbl; - - cls_struct_fields[0] = &ffi_type_longdouble; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = NULL; - - cls_struct_fields1[0] = &cls_struct_type; - cls_struct_fields1[1] = &ffi_type_uchar; - cls_struct_fields1[2] = NULL; - - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type1; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type1, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); - /* { dg-output "1 7 12 127 99: 13 233 134" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); - - - CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); - - res_dbl = ((B(*)(A, B))(code))(e_dbl, f_dbl); - /* { dg-output "\n1 7 12 127 99: 13 233 134" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c deleted file mode 100644 index 2f2b25a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +++ /dev/null @@ -1,131 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Contains structs as parameter of the struct itself. - Sample taken from Alan Modras patch to src/prep_cif.c. - Limitations: none. - PR: PR 25630. - Originator: 20051010 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct A { - double a; - unsigned char b; -} A; - -typedef struct B { - struct A x; - unsigned char y; -} B; - -typedef struct C { - long d; - unsigned char e; -} C; - -static B B_fn(struct A b2, struct B b3, struct C b4) -{ - struct B result; - - result.x.a = b2.a + b3.x.a + b4.d; - result.x.b = b2.b + b3.x.b + b3.y + b4.e; - result.y = b2.b + b3.x.b + b4.e; - - printf("%d %d %d %d %d %d %d: %d %d %d\n", (int)b2.a, b2.b, - (int)b3.x.a, b3.x.b, b3.y, (int)b4.d, b4.e, - (int)result.x.a, result.x.b, result.y); - - return result; -} - -static void -B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct A b0; - struct B b1; - struct C b2; - - b0 = *(struct A*)(args[0]); - b1 = *(struct B*)(args[1]); - b2 = *(struct C*)(args[2]); - - *(B*)resp = B_fn(b0, b1, b2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[4]; - ffi_type* cls_struct_fields[3]; - ffi_type* cls_struct_fields1[3]; - ffi_type* cls_struct_fields2[3]; - ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2; - ffi_type* dbl_arg_types[4]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_type1.size = 0; - cls_struct_type1.alignment = 0; - cls_struct_type1.type = FFI_TYPE_STRUCT; - cls_struct_type1.elements = cls_struct_fields1; - - cls_struct_type2.size = 0; - cls_struct_type2.alignment = 0; - cls_struct_type2.type = FFI_TYPE_STRUCT; - cls_struct_type2.elements = cls_struct_fields2; - - struct A e_dbl = { 1.0, 7}; - struct B f_dbl = {{12.0 , 127}, 99}; - struct C g_dbl = { 2, 9}; - - struct B res_dbl; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = NULL; - - cls_struct_fields1[0] = &cls_struct_type; - cls_struct_fields1[1] = &ffi_type_uchar; - cls_struct_fields1[2] = NULL; - - cls_struct_fields2[0] = &ffi_type_slong; - cls_struct_fields2[1] = &ffi_type_uchar; - cls_struct_fields2[2] = NULL; - - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type1; - dbl_arg_types[2] = &cls_struct_type2; - dbl_arg_types[3] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, &cls_struct_type1, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = &g_dbl; - args_dbl[3] = NULL; - - ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); - /* { dg-output "1 7 12 127 99 2 9: 15 242 143" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e)); - - CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); - - res_dbl = ((B(*)(A, B, C))(code))(e_dbl, f_dbl, g_dbl); - /* { dg-output "\n1 7 12 127 99 2 9: 15 242 143" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e)); - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c deleted file mode 100644 index 14c7023..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +++ /dev/null @@ -1,111 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Contains structs as parameter of the struct itself. - Sample taken from Alan Modras patch to src/prep_cif.c. - Limitations: none. - PR: none. - Originator: 20051010 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct A { - unsigned long long a; - unsigned char b; -} A; - -typedef struct B { - struct A x; - unsigned char y; -} B; - -static B B_fn(struct A b2, struct B b3) -{ - struct B result; - - result.x.a = b2.a + b3.x.a; - result.x.b = b2.b + b3.x.b + b3.y; - result.y = b2.b + b3.x.b; - - printf("%d %d %d %d %d: %d %d %d\n", (int)b2.a, b2.b, - (int)b3.x.a, b3.x.b, b3.y, - (int)result.x.a, result.x.b, result.y); - - return result; -} - -static void -B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct A b0; - struct B b1; - - b0 = *(struct A*)(args[0]); - b1 = *(struct B*)(args[1]); - - *(B*)resp = B_fn(b0, b1); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[3]; - ffi_type* cls_struct_fields[3]; - ffi_type* cls_struct_fields1[3]; - ffi_type cls_struct_type, cls_struct_type1; - ffi_type* dbl_arg_types[3]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_type1.size = 0; - cls_struct_type1.alignment = 0; - cls_struct_type1.type = FFI_TYPE_STRUCT; - cls_struct_type1.elements = cls_struct_fields1; - - struct A e_dbl = { 1LL, 7}; - struct B f_dbl = {{12.0 , 127}, 99}; - - struct B res_dbl; - - cls_struct_fields[0] = &ffi_type_uint64; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = NULL; - - cls_struct_fields1[0] = &cls_struct_type; - cls_struct_fields1[1] = &ffi_type_uchar; - cls_struct_fields1[2] = NULL; - - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type1; - dbl_arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type1, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = NULL; - - ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); - /* { dg-output "1 7 12 127 99: 13 233 134" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); - - CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); - - res_dbl = ((B(*)(A, B))(code))(e_dbl, f_dbl); - /* { dg-output "\n1 7 12 127 99: 13 233 134" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c deleted file mode 100644 index bb77ead..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +++ /dev/null @@ -1,131 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Contains structs as parameter of the struct itself. - Sample taken from Alan Modras patch to src/prep_cif.c. - Limitations: none. - PR: none. - Originator: 20051010 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct A { - unsigned long long a; - unsigned char b; -} A; - -typedef struct B { - struct A x; - unsigned char y; -} B; - -typedef struct C { - unsigned long long d; - unsigned char e; -} C; - -static B B_fn(struct A b2, struct B b3, struct C b4) -{ - struct B result; - - result.x.a = b2.a + b3.x.a + b4.d; - result.x.b = b2.b + b3.x.b + b3.y + b4.e; - result.y = b2.b + b3.x.b + b4.e; - - printf("%d %d %d %d %d %d %d: %d %d %d\n", (int)b2.a, b2.b, - (int)b3.x.a, b3.x.b, b3.y, (int)b4.d, b4.e, - (int)result.x.a, result.x.b, result.y); - - return result; -} - -static void -B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct A b0; - struct B b1; - struct C b2; - - b0 = *(struct A*)(args[0]); - b1 = *(struct B*)(args[1]); - b2 = *(struct C*)(args[2]); - - *(B*)resp = B_fn(b0, b1, b2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[4]; - ffi_type* cls_struct_fields[3]; - ffi_type* cls_struct_fields1[3]; - ffi_type* cls_struct_fields2[3]; - ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2; - ffi_type* dbl_arg_types[4]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_type1.size = 0; - cls_struct_type1.alignment = 0; - cls_struct_type1.type = FFI_TYPE_STRUCT; - cls_struct_type1.elements = cls_struct_fields1; - - cls_struct_type2.size = 0; - cls_struct_type2.alignment = 0; - cls_struct_type2.type = FFI_TYPE_STRUCT; - cls_struct_type2.elements = cls_struct_fields2; - - struct A e_dbl = { 1LL, 7}; - struct B f_dbl = {{12LL , 127}, 99}; - struct C g_dbl = { 2LL, 9}; - - struct B res_dbl; - - cls_struct_fields[0] = &ffi_type_uint64; - cls_struct_fields[1] = &ffi_type_uchar; - cls_struct_fields[2] = NULL; - - cls_struct_fields1[0] = &cls_struct_type; - cls_struct_fields1[1] = &ffi_type_uchar; - cls_struct_fields1[2] = NULL; - - cls_struct_fields2[0] = &ffi_type_uint64; - cls_struct_fields2[1] = &ffi_type_uchar; - cls_struct_fields2[2] = NULL; - - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type1; - dbl_arg_types[2] = &cls_struct_type2; - dbl_arg_types[3] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, &cls_struct_type1, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = &g_dbl; - args_dbl[3] = NULL; - - ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); - /* { dg-output "1 7 12 127 99 2 9: 15 242 143" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e)); - - CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); - - res_dbl = ((B(*)(A, B, C))(code))(e_dbl, f_dbl, g_dbl); - /* { dg-output "\n1 7 12 127 99 2 9: 15 242 143" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e)); - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c deleted file mode 100644 index e9f541c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +++ /dev/null @@ -1,131 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Contains structs as parameter of the struct itself. - Sample taken from Alan Modras patch to src/prep_cif.c. - Limitations: none. - PR: none. - Originator: 20051010 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct A { - unsigned char a; - unsigned long long b; -} A; - -typedef struct B { - struct A x; - unsigned char y; -} B; - -typedef struct C { - unsigned long d; - unsigned char e; -} C; - -static B B_fn(struct A b2, struct B b3, struct C b4) -{ - struct B result; - - result.x.a = b2.a + b3.x.a + b4.d; - result.x.b = b2.b + b3.x.b + b3.y + b4.e; - result.y = b2.b + b3.x.b + b4.e; - - printf("%d %d %d %d %d %d %d: %d %d %d\n", b2.a, (int)b2.b, - b3.x.a, (int)b3.x.b, b3.y, (int)b4.d, b4.e, - result.x.a, (int)result.x.b, result.y); - - return result; -} - -static void -B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct A b0; - struct B b1; - struct C b2; - - b0 = *(struct A*)(args[0]); - b1 = *(struct B*)(args[1]); - b2 = *(struct C*)(args[2]); - - *(B*)resp = B_fn(b0, b1, b2); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[4]; - ffi_type* cls_struct_fields[3]; - ffi_type* cls_struct_fields1[3]; - ffi_type* cls_struct_fields2[3]; - ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2; - ffi_type* dbl_arg_types[4]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - cls_struct_type1.size = 0; - cls_struct_type1.alignment = 0; - cls_struct_type1.type = FFI_TYPE_STRUCT; - cls_struct_type1.elements = cls_struct_fields1; - - cls_struct_type2.size = 0; - cls_struct_type2.alignment = 0; - cls_struct_type2.type = FFI_TYPE_STRUCT; - cls_struct_type2.elements = cls_struct_fields2; - - struct A e_dbl = { 1, 7LL}; - struct B f_dbl = {{12.0 , 127}, 99}; - struct C g_dbl = { 2, 9}; - - struct B res_dbl; - - cls_struct_fields[0] = &ffi_type_uchar; - cls_struct_fields[1] = &ffi_type_uint64; - cls_struct_fields[2] = NULL; - - cls_struct_fields1[0] = &cls_struct_type; - cls_struct_fields1[1] = &ffi_type_uchar; - cls_struct_fields1[2] = NULL; - - cls_struct_fields2[0] = &ffi_type_ulong; - cls_struct_fields2[1] = &ffi_type_uchar; - cls_struct_fields2[2] = NULL; - - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type1; - dbl_arg_types[2] = &cls_struct_type2; - dbl_arg_types[3] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, &cls_struct_type1, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = &g_dbl; - args_dbl[3] = NULL; - - ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); - /* { dg-output "1 7 12 127 99 2 9: 15 242 143" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e)); - - CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); - - res_dbl = ((B(*)(A, B, C))(code))(e_dbl, f_dbl, g_dbl); - /* { dg-output "\n1 7 12 127 99 2 9: 15 242 143" } */ - CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d)); - CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e)); - CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e)); - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/problem1.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/problem1.c deleted file mode 100644 index 6a91555..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/problem1.c +++ /dev/null @@ -1,90 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure passing with different structure size. - Limitations: none. - PR: none. - Originator: 20030828 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct my_ffi_struct { - double a; - double b; - double c; -} my_ffi_struct; - -my_ffi_struct callee(struct my_ffi_struct a1, struct my_ffi_struct a2) -{ - struct my_ffi_struct result; - result.a = a1.a + a2.a; - result.b = a1.b + a2.b; - result.c = a1.c + a2.c; - - - printf("%g %g %g %g %g %g: %g %g %g\n", a1.a, a1.b, a1.c, - a2.a, a2.b, a2.c, result.a, result.b, result.c); - - return result; -} - -void stub(ffi_cif* cif __UNUSED__, void* resp, void** args, - void* userdata __UNUSED__) -{ - struct my_ffi_struct a1; - struct my_ffi_struct a2; - - a1 = *(struct my_ffi_struct*)(args[0]); - a2 = *(struct my_ffi_struct*)(args[1]); - - *(my_ffi_struct *)resp = callee(a1, a2); -} - - -int main(void) -{ - ffi_type* my_ffi_struct_fields[4]; - ffi_type my_ffi_struct_type; - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args[4]; - ffi_type* arg_types[3]; - - struct my_ffi_struct g = { 1.0, 2.0, 3.0 }; - struct my_ffi_struct f = { 1.0, 2.0, 3.0 }; - struct my_ffi_struct res; - - my_ffi_struct_type.size = 0; - my_ffi_struct_type.alignment = 0; - my_ffi_struct_type.type = FFI_TYPE_STRUCT; - my_ffi_struct_type.elements = my_ffi_struct_fields; - - my_ffi_struct_fields[0] = &ffi_type_double; - my_ffi_struct_fields[1] = &ffi_type_double; - my_ffi_struct_fields[2] = &ffi_type_double; - my_ffi_struct_fields[3] = NULL; - - arg_types[0] = &my_ffi_struct_type; - arg_types[1] = &my_ffi_struct_type; - arg_types[2] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &my_ffi_struct_type, - arg_types) == FFI_OK); - - args[0] = &g; - args[1] = &f; - args[2] = NULL; - ffi_call(&cif, FFI_FN(callee), &res, args); - /* { dg-output "1 2 3 1 2 3: 2 4 6" } */ - printf("res: %g %g %g\n", res.a, res.b, res.c); - /* { dg-output "\nres: 2 4 6" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, stub, NULL, code) == FFI_OK); - - res = ((my_ffi_struct(*)(struct my_ffi_struct, struct my_ffi_struct))(code))(g, f); - /* { dg-output "\n1 2 3 1 2 3: 2 4 6" } */ - printf("res: %g %g %g\n", res.a, res.b, res.c); - /* { dg-output "\nres: 2 4 6" } */ - - exit(0);; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c deleted file mode 100644 index 4456161..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Area: ffi_call - Purpose: Promotion test. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" -static int promotion(signed char sc, signed short ss, - unsigned char uc, unsigned short us) -{ - int r = (int) sc + (int) ss + (int) uc + (int) us; - - return r; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_arg rint; - signed char sc; - unsigned char uc; - signed short ss; - unsigned short us; - unsigned long ul; - - args[0] = &ffi_type_schar; - args[1] = &ffi_type_sshort; - args[2] = &ffi_type_uchar; - args[3] = &ffi_type_ushort; - values[0] = ≻ - values[1] = &ss; - values[2] = &uc; - values[3] = &us; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, - &ffi_type_sint, args) == FFI_OK); - - us = 0; - ul = 0; - - for (sc = (signed char) -127; - sc <= (signed char) 120; sc += 1) - for (ss = -30000; ss <= 30000; ss += 10000) - for (uc = (unsigned char) 0; - uc <= (unsigned char) 200; uc += 20) - for (us = 0; us <= 60000; us += 10000) - { - ul++; - ffi_call(&cif, FFI_FN(promotion), &rint, values); - CHECK((int)rint == (signed char) sc + (signed short) ss + - (unsigned char) uc + (unsigned short) us); - } - printf("%lu promotion tests run\n", ul); - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc-tc.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc-tc.c deleted file mode 100644 index e29bd6c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc-tc.c +++ /dev/null @@ -1,114 +0,0 @@ -/* Area: ffi_call - Purpose: Check different structures. - Limitations: none. - PR: none. - Originator: Ronald Oussoren 20030824 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct Point { - float x; - float y; -} Point; - -typedef struct Size { - float h; - float w; -} Size; - -typedef struct Rect { - Point o; - Size s; -} Rect; - -int doit(int o, char* s, Point p, Rect r, int last) -{ - printf("CALLED WITH %d %s {%f %f} {{%f %f} {%f %f}} %d\n", - o, s, p.x, p.y, r.o.x, r.o.y, r.s.h, r.s.w, last); - return 42; -} - - -int main(void) -{ - ffi_type point_type; - ffi_type size_type; - ffi_type rect_type; - ffi_cif cif; - ffi_type* arglist[6]; - void* values[6]; - int r; - - /* - * First set up FFI types for the 3 struct types - */ - - point_type.size = 0; /*sizeof(Point);*/ - point_type.alignment = 0; /*__alignof__(Point);*/ - point_type.type = FFI_TYPE_STRUCT; - point_type.elements = malloc(3 * sizeof(ffi_type*)); - point_type.elements[0] = &ffi_type_float; - point_type.elements[1] = &ffi_type_float; - point_type.elements[2] = NULL; - - size_type.size = 0;/* sizeof(Size);*/ - size_type.alignment = 0;/* __alignof__(Size);*/ - size_type.type = FFI_TYPE_STRUCT; - size_type.elements = malloc(3 * sizeof(ffi_type*)); - size_type.elements[0] = &ffi_type_float; - size_type.elements[1] = &ffi_type_float; - size_type.elements[2] = NULL; - - rect_type.size = 0;/*sizeof(Rect);*/ - rect_type.alignment =0;/* __alignof__(Rect);*/ - rect_type.type = FFI_TYPE_STRUCT; - rect_type.elements = malloc(3 * sizeof(ffi_type*)); - rect_type.elements[0] = &point_type; - rect_type.elements[1] = &size_type; - rect_type.elements[2] = NULL; - - /* - * Create a CIF - */ - arglist[0] = &ffi_type_sint; - arglist[1] = &ffi_type_pointer; - arglist[2] = &point_type; - arglist[3] = &rect_type; - arglist[4] = &ffi_type_sint; - arglist[5] = NULL; - - r = ffi_prep_cif(&cif, FFI_DEFAULT_ABI, - 5, &ffi_type_sint, arglist); - if (r != FFI_OK) { - abort(); - } - - - /* And call the function through the CIF */ - - { - Point p = { 1.0, 2.0 }; - Rect r = { { 9.0, 10.0}, { -1.0, -2.0 } }; - int o = 0; - int l = 42; - char* m = "myMethod"; - ffi_arg result; - - values[0] = &o; - values[1] = &m; - values[2] = &p; - values[3] = &r; - values[4] = &l; - values[5] = NULL; - - printf("CALLING WITH %d %s {%f %f} {{%f %f} {%f %f}} %d\n", - o, m, p.x, p.y, r.o.x, r.o.y, r.s.h, r.s.w, l); - - ffi_call(&cif, FFI_FN(doit), &result, values); - - printf ("The result is %d\n", (int)result); - - } - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c deleted file mode 100644 index 1aab403..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value double. - Limitations: none. - PR: none. - Originator: 20050212 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static double return_dbl(double dbl) -{ - return 2 * dbl; -} -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - double dbl, rdbl; - - args[0] = &ffi_type_double; - values[0] = &dbl; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_double, args) == FFI_OK); - - for (dbl = -127.3; dbl < 127; dbl++) - { - ffi_call(&cif, FFI_FN(return_dbl), &rdbl, values); - printf ("%f vs %f\n", rdbl, return_dbl(dbl)); - CHECK(rdbl == 2 * dbl); - } - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c deleted file mode 100644 index 0ea5d50..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value double. - Limitations: none. - PR: none. - Originator: 20050212 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static double return_dbl(double dbl1, float fl2, unsigned int in3, double dbl4) -{ - return dbl1 + fl2 + in3 + dbl4; -} -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - double dbl1, dbl4, rdbl; - float fl2; - unsigned int in3; - args[0] = &ffi_type_double; - args[1] = &ffi_type_float; - args[2] = &ffi_type_uint; - args[3] = &ffi_type_double; - values[0] = &dbl1; - values[1] = &fl2; - values[2] = &in3; - values[3] = &dbl4; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, - &ffi_type_double, args) == FFI_OK); - dbl1 = 127.0; - fl2 = 128.0; - in3 = 255; - dbl4 = 512.7; - - ffi_call(&cif, FFI_FN(return_dbl), &rdbl, values); - printf ("%f vs %f\n", rdbl, return_dbl(dbl1, fl2, in3, dbl4)); - CHECK(rdbl == dbl1 + fl2 + in3 + dbl4); - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c deleted file mode 100644 index b3818f8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value double. - Limitations: none. - PR: none. - Originator: 20050212 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static double return_dbl(double dbl1, double dbl2, unsigned int in3, double dbl4) -{ - return dbl1 + dbl2 + in3 + dbl4; -} -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - double dbl1, dbl2, dbl4, rdbl; - unsigned int in3; - args[0] = &ffi_type_double; - args[1] = &ffi_type_double; - args[2] = &ffi_type_uint; - args[3] = &ffi_type_double; - values[0] = &dbl1; - values[1] = &dbl2; - values[2] = &in3; - values[3] = &dbl4; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, - &ffi_type_double, args) == FFI_OK); - dbl1 = 127.0; - dbl2 = 128.0; - in3 = 255; - dbl4 = 512.7; - - ffi_call(&cif, FFI_FN(return_dbl), &rdbl, values); - printf ("%f vs %f\n", rdbl, return_dbl(dbl1, dbl2, in3, dbl4)); - CHECK(rdbl == dbl1 + dbl2 + in3 + dbl4); - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c deleted file mode 100644 index fb8a09e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value float. - Limitations: none. - PR: none. - Originator: 20050212 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static float return_fl(float fl) -{ - return 2 * fl; -} -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - float fl, rfl; - - args[0] = &ffi_type_float; - values[0] = &fl; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_float, args) == FFI_OK); - - for (fl = -127.0; fl < 127; fl++) - { - ffi_call(&cif, FFI_FN(return_fl), &rfl, values); - printf ("%f vs %f\n", rfl, return_fl(fl)); - CHECK(rfl == 2 * fl); - } - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c deleted file mode 100644 index c3d92c2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value float. - Limitations: none. - PR: none. - Originator: 20050212 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static float return_fl(float fl1, float fl2) -{ - return fl1 + fl2; -} -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - float fl1, fl2, rfl; - - args[0] = &ffi_type_float; - args[1] = &ffi_type_float; - values[0] = &fl1; - values[1] = &fl2; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, - &ffi_type_float, args) == FFI_OK); - fl1 = 127.0; - fl2 = 128.0; - - ffi_call(&cif, FFI_FN(return_fl), &rfl, values); - printf ("%f vs %f\n", rfl, return_fl(fl1, fl2)); - CHECK(rfl == fl1 + fl2); - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c deleted file mode 100644 index ddb976c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value float. - Limitations: none. - PR: none. - Originator: 20050212 */ - -/* { dg-do run } */ -#include "ffitest.h" - -/* Use volatile float to avoid false negative on ix86. See PR target/323. */ -static float return_fl(float fl1, float fl2, float fl3, float fl4) -{ - volatile float sum; - - sum = fl1 + fl2 + fl3 + fl4; - return sum; -} -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - float fl1, fl2, fl3, fl4, rfl; - volatile float sum; - - args[0] = &ffi_type_float; - args[1] = &ffi_type_float; - args[2] = &ffi_type_float; - args[3] = &ffi_type_float; - values[0] = &fl1; - values[1] = &fl2; - values[2] = &fl3; - values[3] = &fl4; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, - &ffi_type_float, args) == FFI_OK); - fl1 = 127.0; - fl2 = 128.0; - fl3 = 255.1; - fl4 = 512.7; - - ffi_call(&cif, FFI_FN(return_fl), &rfl, values); - printf ("%f vs %f\n", rfl, return_fl(fl1, fl2, fl3, fl4)); - - sum = fl1 + fl2 + fl3 + fl4; - CHECK(rfl == sum); - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c deleted file mode 100644 index c37877b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value float. - Limitations: none. - PR: none. - Originator: 20050212 */ - -/* { dg-do run } */ -#include "ffitest.h" - -static float return_fl(float fl1, float fl2, unsigned int in3, float fl4) -{ - return fl1 + fl2 + in3 + fl4; -} -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - float fl1, fl2, fl4, rfl; - unsigned int in3; - args[0] = &ffi_type_float; - args[1] = &ffi_type_float; - args[2] = &ffi_type_uint; - args[3] = &ffi_type_float; - values[0] = &fl1; - values[1] = &fl2; - values[2] = &in3; - values[3] = &fl4; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, - &ffi_type_float, args) == FFI_OK); - fl1 = 127.0; - fl2 = 128.0; - in3 = 255; - fl4 = 512.7; - - ffi_call(&cif, FFI_FN(return_fl), &rfl, values); - printf ("%f vs %f\n", rfl, return_fl(fl1, fl2, in3, fl4)); - CHECK(rfl == fl1 + fl2 + in3 + fl4); - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c deleted file mode 100644 index 5c2fe65..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value long double. - Limitations: none. - PR: none. - Originator: 20071113 */ - -/* { dg-do run { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ -#include "ffitest.h" - -static long double return_ldl(long double ldl) -{ - return 2*ldl; -} -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - long double ldl, rldl; - - args[0] = &ffi_type_longdouble; - values[0] = &ldl; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_longdouble, args) == FFI_OK); - - for (ldl = -127.0; ldl < 127.0; ldl++) - { - ffi_call(&cif, FFI_FN(return_ldl), &rldl, values); - CHECK(rldl == 2 * ldl); - } - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c deleted file mode 100644 index ea4a1e4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value long long. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" -static long long return_ll(long long ll) -{ - return ll; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - long long rlonglong; - long long ll; - - args[0] = &ffi_type_sint64; - values[0] = ≪ - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_sint64, args) == FFI_OK); - - for (ll = 0LL; ll < 100LL; ll++) - { - ffi_call(&cif, FFI_FN(return_ll), &rlonglong, values); - CHECK(rlonglong == ll); - } - - for (ll = 55555555555000LL; ll < 55555555555100LL; ll++) - { - ffi_call(&cif, FFI_FN(return_ll), &rlonglong, values); - CHECK(rlonglong == ll); - } - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c deleted file mode 100644 index 593e8a3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Area: ffi_call - Purpose: Check if long long are passed in the corresponding regs on ppc. - Limitations: none. - PR: 20104. - Originator: 20050222 */ - -/* { dg-do run } */ -/* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */ -#include "ffitest.h" -static long long return_ll(int ll0, long long ll1, int ll2) -{ - return ll0 + ll1 + ll2; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - long long rlonglong; - long long ll1; - unsigned ll0, ll2; - - args[0] = &ffi_type_sint; - args[1] = &ffi_type_sint64; - args[2] = &ffi_type_sint; - values[0] = &ll0; - values[1] = &ll1; - values[2] = &ll2; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, - &ffi_type_sint64, args) == FFI_OK); - - ll0 = 11111111; - ll1 = 11111111111000LL; - ll2 = 11111111; - - ffi_call(&cif, FFI_FN(return_ll), &rlonglong, values); - printf("res: %" PRIdLL ", %" PRIdLL "\n", rlonglong, ll0 + ll1 + ll2); - /* { dg-output "res: 11111133333222, 11111133333222" } */ - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c deleted file mode 100644 index 19608ee..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value signed char. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" - -static signed char return_sc(signed char sc) -{ - return sc; -} -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_arg rint; - signed char sc; - - args[0] = &ffi_type_schar; - values[0] = ≻ - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_schar, args) == FFI_OK); - - for (sc = (signed char) -127; - sc < (signed char) 127; sc++) - { - ffi_call(&cif, FFI_FN(return_sc), &rint, values); - CHECK(rint == (ffi_arg) sc); - } - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c deleted file mode 100644 index f0fd345..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Area: ffi_call - Purpose: Check if long as return type is handled correctly. - Limitations: none. - PR: none. - */ - -/* { dg-do run } */ -#include "ffitest.h" -static long return_sl(long l1, long l2) -{ - return l1 - l2; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_arg res; - unsigned long l1, l2; - - args[0] = &ffi_type_slong; - args[1] = &ffi_type_slong; - values[0] = &l1; - values[1] = &l2; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, - &ffi_type_slong, args) == FFI_OK); - - l1 = 1073741823L; - l2 = 1073741824L; - - ffi_call(&cif, FFI_FN(return_sl), &res, values); - printf("res: %ld, %ld\n", (long)res, l1 - l2); - /* { dg-output "res: -1, -1" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c deleted file mode 100644 index 07c45de..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Area: ffi_call - Purpose: Check return value unsigned char. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" - -static unsigned char return_uc(unsigned char uc) -{ - return uc; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_arg rint; - - unsigned char uc; - - args[0] = &ffi_type_uchar; - values[0] = &uc; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_uchar, args) == FFI_OK); - - for (uc = (unsigned char) '\x00'; - uc < (unsigned char) '\xff'; uc++) - { - ffi_call(&cif, FFI_FN(return_uc), &rint, values); - CHECK(rint == (signed int) uc); - } - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c deleted file mode 100644 index 12b266f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Area: ffi_call - Purpose: Check if unsigned long as return type is handled correctly. - Limitations: none. - PR: none. - Originator: 20060724 */ - -/* { dg-do run } */ -#include "ffitest.h" -static unsigned long return_ul(unsigned long ul1, unsigned long ul2) -{ - return ul1 + ul2; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_arg res; - unsigned long ul1, ul2; - - args[0] = &ffi_type_ulong; - args[1] = &ffi_type_ulong; - values[0] = &ul1; - values[1] = &ul2; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, - &ffi_type_ulong, args) == FFI_OK); - - ul1 = 1073741823L; - ul2 = 1073741824L; - - ffi_call(&cif, FFI_FN(return_ul), &res, values); - printf("res: %lu, %lu\n", (unsigned long)res, ul1 + ul2); - /* { dg-output "res: 2147483647, 2147483647" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c deleted file mode 100644 index 23a93b9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c +++ /dev/null @@ -1,145 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure returning with different structure size. - Depending on the ABI. Check bigger struct which overlaps - the gp and fp register count on Darwin/AIX/ppc64. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/21/2007 */ - -/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ -#include "ffitest.h" - -// 13 FPRs: 104 bytes -// 14 FPRs: 112 bytes - -typedef struct struct_108byte { - double a; - double b; - double c; - double d; - double e; - double f; - double g; - double h; - double i; - double j; - double k; - double l; - double m; - int n; -} struct_108byte; - -struct_108byte cls_struct_108byte_fn( - struct_108byte b0, - struct_108byte b1, - struct_108byte b2, - struct_108byte b3) -{ - struct_108byte result; - - result.a = b0.a + b1.a + b2.a + b3.a; - result.b = b0.b + b1.b + b2.b + b3.b; - result.c = b0.c + b1.c + b2.c + b3.c; - result.d = b0.d + b1.d + b2.d + b3.d; - result.e = b0.e + b1.e + b2.e + b3.e; - result.f = b0.f + b1.f + b2.f + b3.f; - result.g = b0.g + b1.g + b2.g + b3.g; - result.h = b0.h + b1.h + b2.h + b3.h; - result.i = b0.i + b1.i + b2.i + b3.i; - result.j = b0.j + b1.j + b2.j + b3.j; - result.k = b0.k + b1.k + b2.k + b3.k; - result.l = b0.l + b1.l + b2.l + b3.l; - result.m = b0.m + b1.m + b2.m + b3.m; - result.n = b0.n + b1.n + b2.n + b3.n; - - printf("%g %g %g %g %g %g %g %g %g %g %g %g %g %d\n", result.a, result.b, result.c, - result.d, result.e, result.f, result.g, result.h, result.i, - result.j, result.k, result.l, result.m, result.n); - - return result; -} - -static void -cls_struct_108byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, void* userdata __UNUSED__) -{ - struct_108byte b0, b1, b2, b3; - - b0 = *(struct_108byte*)(args[0]); - b1 = *(struct_108byte*)(args[1]); - b2 = *(struct_108byte*)(args[2]); - b3 = *(struct_108byte*)(args[3]); - - *(struct_108byte*)resp = cls_struct_108byte_fn(b0, b1, b2, b3); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[15]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct_108byte e_dbl = { 9.0, 2.0, 6.0, 5.0, 3.0, 4.0, 8.0, 1.0, 1.0, 2.0, 3.0, 7.0, 2.0, 7 }; - struct_108byte f_dbl = { 1.0, 2.0, 3.0, 7.0, 2.0, 5.0, 6.0, 7.0, 4.0, 5.0, 7.0, 9.0, 1.0, 4 }; - struct_108byte g_dbl = { 4.0, 5.0, 7.0, 9.0, 1.0, 1.0, 2.0, 9.0, 8.0, 6.0, 1.0, 4.0, 0.0, 3 }; - struct_108byte h_dbl = { 8.0, 6.0, 1.0, 4.0, 0.0, 3.0, 3.0, 1.0, 9.0, 2.0, 6.0, 5.0, 3.0, 2 }; - struct_108byte res_dbl; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_double; - cls_struct_fields[2] = &ffi_type_double; - cls_struct_fields[3] = &ffi_type_double; - cls_struct_fields[4] = &ffi_type_double; - cls_struct_fields[5] = &ffi_type_double; - cls_struct_fields[6] = &ffi_type_double; - cls_struct_fields[7] = &ffi_type_double; - cls_struct_fields[8] = &ffi_type_double; - cls_struct_fields[9] = &ffi_type_double; - cls_struct_fields[10] = &ffi_type_double; - cls_struct_fields[11] = &ffi_type_double; - cls_struct_fields[12] = &ffi_type_double; - cls_struct_fields[13] = &ffi_type_sint32; - cls_struct_fields[14] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = &cls_struct_type; - dbl_arg_types[3] = &cls_struct_type; - dbl_arg_types[4] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = &g_dbl; - args_dbl[3] = &h_dbl; - args_dbl[4] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_108byte_fn), &res_dbl, args_dbl); - /* { dg-output "22 15 17 25 6 13 19 18 22 15 17 25 6 16" } */ - printf("res: %g %g %g %g %g %g %g %g %g %g %g %g %g %d\n", res_dbl.a, res_dbl.b, - res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i, - res_dbl.j, res_dbl.k, res_dbl.l, res_dbl.m, res_dbl.n); - /* { dg-output "\nres: 22 15 17 25 6 13 19 18 22 15 17 25 6 16" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_108byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((struct_108byte(*)(struct_108byte, struct_108byte, - struct_108byte, struct_108byte))(code))(e_dbl, f_dbl, g_dbl, h_dbl); - /* { dg-output "\n22 15 17 25 6 13 19 18 22 15 17 25 6 16" } */ - printf("res: %g %g %g %g %g %g %g %g %g %g %g %g %g %d\n", res_dbl.a, res_dbl.b, - res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i, - res_dbl.j, res_dbl.k, res_dbl.l, res_dbl.m, res_dbl.n); - /* { dg-output "\nres: 22 15 17 25 6 13 19 18 22 15 17 25 6 16" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c deleted file mode 100644 index e2599d2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c +++ /dev/null @@ -1,148 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure returning with different structure size. - Depending on the ABI. Check bigger struct which overlaps - the gp and fp register count on Darwin/AIX/ppc64. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/21/2007 */ - -/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ -#include "ffitest.h" - -// 13 FPRs: 104 bytes -// 14 FPRs: 112 bytes - -typedef struct struct_116byte { - double a; - double b; - double c; - double d; - double e; - double f; - double g; - double h; - double i; - double j; - double k; - double l; - double m; - double n; - int o; -} struct_116byte; - -struct_116byte cls_struct_116byte_fn( - struct_116byte b0, - struct_116byte b1, - struct_116byte b2, - struct_116byte b3) -{ - struct_116byte result; - - result.a = b0.a + b1.a + b2.a + b3.a; - result.b = b0.b + b1.b + b2.b + b3.b; - result.c = b0.c + b1.c + b2.c + b3.c; - result.d = b0.d + b1.d + b2.d + b3.d; - result.e = b0.e + b1.e + b2.e + b3.e; - result.f = b0.f + b1.f + b2.f + b3.f; - result.g = b0.g + b1.g + b2.g + b3.g; - result.h = b0.h + b1.h + b2.h + b3.h; - result.i = b0.i + b1.i + b2.i + b3.i; - result.j = b0.j + b1.j + b2.j + b3.j; - result.k = b0.k + b1.k + b2.k + b3.k; - result.l = b0.l + b1.l + b2.l + b3.l; - result.m = b0.m + b1.m + b2.m + b3.m; - result.n = b0.n + b1.n + b2.n + b3.n; - result.o = b0.o + b1.o + b2.o + b3.o; - - printf("%g %g %g %g %g %g %g %g %g %g %g %g %g %g %d\n", result.a, result.b, result.c, - result.d, result.e, result.f, result.g, result.h, result.i, - result.j, result.k, result.l, result.m, result.n, result.o); - - return result; -} - -static void -cls_struct_116byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, void* userdata __UNUSED__) -{ - struct_116byte b0, b1, b2, b3; - - b0 = *(struct_116byte*)(args[0]); - b1 = *(struct_116byte*)(args[1]); - b2 = *(struct_116byte*)(args[2]); - b3 = *(struct_116byte*)(args[3]); - - *(struct_116byte*)resp = cls_struct_116byte_fn(b0, b1, b2, b3); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[16]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct_116byte e_dbl = { 9.0, 2.0, 6.0, 5.0, 3.0, 4.0, 8.0, 1.0, 1.0, 2.0, 3.0, 7.0, 2.0, 5.0, 7 }; - struct_116byte f_dbl = { 1.0, 2.0, 3.0, 7.0, 2.0, 5.0, 6.0, 7.0, 4.0, 5.0, 7.0, 9.0, 1.0, 6.0, 4 }; - struct_116byte g_dbl = { 4.0, 5.0, 7.0, 9.0, 1.0, 1.0, 2.0, 9.0, 8.0, 6.0, 1.0, 4.0, 0.0, 7.0, 3 }; - struct_116byte h_dbl = { 8.0, 6.0, 1.0, 4.0, 0.0, 3.0, 3.0, 1.0, 9.0, 2.0, 6.0, 5.0, 3.0, 8.0, 2 }; - struct_116byte res_dbl; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_double; - cls_struct_fields[2] = &ffi_type_double; - cls_struct_fields[3] = &ffi_type_double; - cls_struct_fields[4] = &ffi_type_double; - cls_struct_fields[5] = &ffi_type_double; - cls_struct_fields[6] = &ffi_type_double; - cls_struct_fields[7] = &ffi_type_double; - cls_struct_fields[8] = &ffi_type_double; - cls_struct_fields[9] = &ffi_type_double; - cls_struct_fields[10] = &ffi_type_double; - cls_struct_fields[11] = &ffi_type_double; - cls_struct_fields[12] = &ffi_type_double; - cls_struct_fields[13] = &ffi_type_double; - cls_struct_fields[14] = &ffi_type_sint32; - cls_struct_fields[15] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = &cls_struct_type; - dbl_arg_types[3] = &cls_struct_type; - dbl_arg_types[4] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = &g_dbl; - args_dbl[3] = &h_dbl; - args_dbl[4] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_116byte_fn), &res_dbl, args_dbl); - /* { dg-output "22 15 17 25 6 13 19 18 22 15 17 25 6 26 16" } */ - printf("res: %g %g %g %g %g %g %g %g %g %g %g %g %g %g %d\n", res_dbl.a, res_dbl.b, - res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i, - res_dbl.j, res_dbl.k, res_dbl.l, res_dbl.m, res_dbl.n, res_dbl.o); - /* { dg-output "\nres: 22 15 17 25 6 13 19 18 22 15 17 25 6 26 16" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_116byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((struct_116byte(*)(struct_116byte, struct_116byte, - struct_116byte, struct_116byte))(code))(e_dbl, f_dbl, g_dbl, h_dbl); - /* { dg-output "\n22 15 17 25 6 13 19 18 22 15 17 25 6 26 16" } */ - printf("res: %g %g %g %g %g %g %g %g %g %g %g %g %g %g %d\n", res_dbl.a, res_dbl.b, - res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i, - res_dbl.j, res_dbl.k, res_dbl.l, res_dbl.m, res_dbl.n, res_dbl.o); - /* { dg-output "\nres: 22 15 17 25 6 13 19 18 22 15 17 25 6 26 16" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c deleted file mode 100644 index 1fc6a9e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c +++ /dev/null @@ -1,124 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure returning with different structure size. - Depending on the ABI. Check bigger struct which overlaps - the gp and fp register count on Darwin/AIX/ppc64. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/21/2007 */ - -/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ -#include "ffitest.h" - -typedef struct struct_72byte { - double a; - double b; - double c; - double d; - double e; - double f; - double g; - double h; - double i; -} struct_72byte; - -struct_72byte cls_struct_72byte_fn( - struct_72byte b0, - struct_72byte b1, - struct_72byte b2, - struct_72byte b3) -{ - struct_72byte result; - - result.a = b0.a + b1.a + b2.a + b3.a; - result.b = b0.b + b1.b + b2.b + b3.b; - result.c = b0.c + b1.c + b2.c + b3.c; - result.d = b0.d + b1.d + b2.d + b3.d; - result.e = b0.e + b1.e + b2.e + b3.e; - result.f = b0.f + b1.f + b2.f + b3.f; - result.g = b0.g + b1.g + b2.g + b3.g; - result.h = b0.h + b1.h + b2.h + b3.h; - result.i = b0.i + b1.i + b2.i + b3.i; - - printf("%g %g %g %g %g %g %g %g %g\n", result.a, result.b, result.c, - result.d, result.e, result.f, result.g, result.h, result.i); - - return result; -} - -static void -cls_struct_72byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, void* userdata __UNUSED__) -{ - struct_72byte b0, b1, b2, b3; - - b0 = *(struct_72byte*)(args[0]); - b1 = *(struct_72byte*)(args[1]); - b2 = *(struct_72byte*)(args[2]); - b3 = *(struct_72byte*)(args[3]); - - *(struct_72byte*)resp = cls_struct_72byte_fn(b0, b1, b2, b3); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[10]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct_72byte e_dbl = { 9.0, 2.0, 6.0, 5.0, 3.0, 4.0, 8.0, 1.0, 7.0 }; - struct_72byte f_dbl = { 1.0, 2.0, 3.0, 7.0, 2.0, 5.0, 6.0, 7.0, 4.0 }; - struct_72byte g_dbl = { 4.0, 5.0, 7.0, 9.0, 1.0, 1.0, 2.0, 9.0, 3.0 }; - struct_72byte h_dbl = { 8.0, 6.0, 1.0, 4.0, 0.0, 3.0, 3.0, 1.0, 2.0 }; - struct_72byte res_dbl; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_double; - cls_struct_fields[2] = &ffi_type_double; - cls_struct_fields[3] = &ffi_type_double; - cls_struct_fields[4] = &ffi_type_double; - cls_struct_fields[5] = &ffi_type_double; - cls_struct_fields[6] = &ffi_type_double; - cls_struct_fields[7] = &ffi_type_double; - cls_struct_fields[8] = &ffi_type_double; - cls_struct_fields[9] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = &cls_struct_type; - dbl_arg_types[3] = &cls_struct_type; - dbl_arg_types[4] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = &g_dbl; - args_dbl[3] = &h_dbl; - args_dbl[4] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_72byte_fn), &res_dbl, args_dbl); - /* { dg-output "22 15 17 25 6 13 19 18 16" } */ - printf("res: %g %g %g %g %g %g %g %g %g\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i); - /* { dg-output "\nres: 22 15 17 25 6 13 19 18 16" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_72byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((struct_72byte(*)(struct_72byte, struct_72byte, - struct_72byte, struct_72byte))(code))(e_dbl, f_dbl, g_dbl, h_dbl); - /* { dg-output "\n22 15 17 25 6 13 19 18 16" } */ - printf("res: %g %g %g %g %g %g %g %g %g\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i); - /* { dg-output "\nres: 22 15 17 25 6 13 19 18 16" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c deleted file mode 100644 index cb2f2fb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c +++ /dev/null @@ -1,125 +0,0 @@ -/* Area: ffi_call, closure_call - Purpose: Check structure returning with different structure size. - Depending on the ABI. Check bigger struct which overlaps - the gp and fp register count on Darwin/AIX/ppc64. - Limitations: none. - PR: none. - Originator: Blake Chaffin 6/21/2007 */ - -/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ -/* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */ -#include "ffitest.h" - -typedef struct struct_72byte { - double a; - double b; - double c; - double d; - double e; - double f; - double g; - double h; - long long i; -} struct_72byte; - -struct_72byte cls_struct_72byte_fn( - struct_72byte b0, - struct_72byte b1, - struct_72byte b2, - struct_72byte b3) -{ - struct_72byte result; - - result.a = b0.a + b1.a + b2.a + b3.a; - result.b = b0.b + b1.b + b2.b + b3.b; - result.c = b0.c + b1.c + b2.c + b3.c; - result.d = b0.d + b1.d + b2.d + b3.d; - result.e = b0.e + b1.e + b2.e + b3.e; - result.f = b0.f + b1.f + b2.f + b3.f; - result.g = b0.g + b1.g + b2.g + b3.g; - result.h = b0.h + b1.h + b2.h + b3.h; - result.i = b0.i + b1.i + b2.i + b3.i; - - printf("%g %g %g %g %g %g %g %g %" PRIdLL "\n", result.a, result.b, result.c, - result.d, result.e, result.f, result.g, result.h, result.i); - - return result; -} - -static void -cls_struct_72byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, void* userdata __UNUSED__) -{ - struct_72byte b0, b1, b2, b3; - - b0 = *(struct_72byte*)(args[0]); - b1 = *(struct_72byte*)(args[1]); - b2 = *(struct_72byte*)(args[2]); - b3 = *(struct_72byte*)(args[3]); - - *(struct_72byte*)resp = cls_struct_72byte_fn(b0, b1, b2, b3); -} - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - void* args_dbl[5]; - ffi_type* cls_struct_fields[10]; - ffi_type cls_struct_type; - ffi_type* dbl_arg_types[5]; - - cls_struct_type.size = 0; - cls_struct_type.alignment = 0; - cls_struct_type.type = FFI_TYPE_STRUCT; - cls_struct_type.elements = cls_struct_fields; - - struct_72byte e_dbl = { 9.0, 2.0, 6.0, 5.0, 3.0, 4.0, 8.0, 1.0, 7 }; - struct_72byte f_dbl = { 1.0, 2.0, 3.0, 7.0, 2.0, 5.0, 6.0, 7.0, 4 }; - struct_72byte g_dbl = { 4.0, 5.0, 7.0, 9.0, 1.0, 1.0, 2.0, 9.0, 3 }; - struct_72byte h_dbl = { 8.0, 6.0, 1.0, 4.0, 0.0, 3.0, 3.0, 1.0, 2 }; - struct_72byte res_dbl; - - cls_struct_fields[0] = &ffi_type_double; - cls_struct_fields[1] = &ffi_type_double; - cls_struct_fields[2] = &ffi_type_double; - cls_struct_fields[3] = &ffi_type_double; - cls_struct_fields[4] = &ffi_type_double; - cls_struct_fields[5] = &ffi_type_double; - cls_struct_fields[6] = &ffi_type_double; - cls_struct_fields[7] = &ffi_type_double; - cls_struct_fields[8] = &ffi_type_sint64; - cls_struct_fields[9] = NULL; - - dbl_arg_types[0] = &cls_struct_type; - dbl_arg_types[1] = &cls_struct_type; - dbl_arg_types[2] = &cls_struct_type; - dbl_arg_types[3] = &cls_struct_type; - dbl_arg_types[4] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, &cls_struct_type, - dbl_arg_types) == FFI_OK); - - args_dbl[0] = &e_dbl; - args_dbl[1] = &f_dbl; - args_dbl[2] = &g_dbl; - args_dbl[3] = &h_dbl; - args_dbl[4] = NULL; - - ffi_call(&cif, FFI_FN(cls_struct_72byte_fn), &res_dbl, args_dbl); - /* { dg-output "22 15 17 25 6 13 19 18 16" } */ - printf("res: %g %g %g %g %g %g %g %g %" PRIdLL "\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i); - /* { dg-output "\nres: 22 15 17 25 6 13 19 18 16" } */ - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_72byte_gn, NULL, code) == FFI_OK); - - res_dbl = ((struct_72byte(*)(struct_72byte, struct_72byte, - struct_72byte, struct_72byte))(code))(e_dbl, f_dbl, g_dbl, h_dbl); - /* { dg-output "\n22 15 17 25 6 13 19 18 16" } */ - printf("res: %g %g %g %g %g %g %g %g %" PRIdLL "\n", res_dbl.a, res_dbl.b, res_dbl.c, - res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i); - /* { dg-output "\nres: 22 15 17 25 6 13 19 18 16" } */ - - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c deleted file mode 100644 index 3de45de..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Area: ffi_call - Purpose: Check strlen function call. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" - -static size_t my_strlen(char *s) -{ - return (strlen(s)); -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_arg rint; - char *s; - - args[0] = &ffi_type_pointer; - values[0] = (void*) &s; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_sint, args) == FFI_OK); - - s = "a"; - ffi_call(&cif, FFI_FN(my_strlen), &rint, values); - CHECK(rint == 1); - - s = "1234567"; - ffi_call(&cif, FFI_FN(my_strlen), &rint, values); - CHECK(rint == 7); - - s = "1234567890123456789012345"; - ffi_call(&cif, FFI_FN(my_strlen), &rint, values); - CHECK(rint == 25); - - exit (0); -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c deleted file mode 100644 index 6fbcc87..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Area: ffi_call - Purpose: Check stdcall strlen call on X86_WIN32 systems. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run { target i?86-*-cygwin* i?86-*-mingw* } } */ - -#include "ffitest.h" - -static size_t __attribute__((stdcall)) my_stdcall_strlen(char *s) -{ - return (strlen(s)); -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_arg rint; - char *s; - args[0] = &ffi_type_pointer; - values[0] = (void*) &s; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_STDCALL, 1, - &ffi_type_sint, args) == FFI_OK); - - s = "a"; - ffi_call(&cif, FFI_FN(my_stdcall_strlen), &rint, values); - CHECK(rint == 1); - - s = "1234567"; - ffi_call(&cif, FFI_FN(my_stdcall_strlen), &rint, values); - CHECK(rint == 7); - - s = "1234567890123456789012345"; - ffi_call(&cif, FFI_FN(my_stdcall_strlen), &rint, values); - CHECK(rint == 25); - - printf("stdcall strlen tests passed\n"); - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c deleted file mode 100644 index ea76c85..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Area: ffi_call - Purpose: Check structures. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct -{ - unsigned char uc; - double d; - unsigned int ui; -} test_structure_1; - -static test_structure_1 struct1(test_structure_1 ts) -{ - ts.uc++; - ts.d--; - ts.ui++; - - return ts; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_type ts1_type; - ffi_type *ts1_type_elements[4]; - ts1_type.size = 0; - ts1_type.alignment = 0; - ts1_type.type = FFI_TYPE_STRUCT; - ts1_type.elements = ts1_type_elements; - ts1_type_elements[0] = &ffi_type_uchar; - ts1_type_elements[1] = &ffi_type_double; - ts1_type_elements[2] = &ffi_type_uint; - ts1_type_elements[3] = NULL; - - test_structure_1 ts1_arg; - /* This is a hack to get a properly aligned result buffer */ - test_structure_1 *ts1_result = - (test_structure_1 *) malloc (sizeof(test_structure_1)); - - args[0] = &ts1_type; - values[0] = &ts1_arg; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ts1_type, args) == FFI_OK); - - ts1_arg.uc = '\x01'; - ts1_arg.d = 3.14159; - ts1_arg.ui = 555; - - ffi_call(&cif, FFI_FN(struct1), ts1_result, values); - - CHECK(ts1_result->ui == 556); - CHECK(ts1_result->d == 3.14159 - 1); - - free (ts1_result); - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c deleted file mode 100644 index 14bc9fd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Area: ffi_call - Purpose: Check structures. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct -{ - double d1; - double d2; -} test_structure_2; - -static test_structure_2 struct2(test_structure_2 ts) -{ - ts.d1--; - ts.d2--; - - return ts; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - test_structure_2 ts2_arg; - ffi_type ts2_type; - ffi_type *ts2_type_elements[3]; - ts2_type.size = 0; - ts2_type.alignment = 0; - ts2_type.type = FFI_TYPE_STRUCT; - ts2_type.elements = ts2_type_elements; - ts2_type_elements[0] = &ffi_type_double; - ts2_type_elements[1] = &ffi_type_double; - ts2_type_elements[2] = NULL; - - - /* This is a hack to get a properly aligned result buffer */ - test_structure_2 *ts2_result = - (test_structure_2 *) malloc (sizeof(test_structure_2)); - - args[0] = &ts2_type; - values[0] = &ts2_arg; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts2_type, args) == FFI_OK); - - ts2_arg.d1 = 5.55; - ts2_arg.d2 = 6.66; - - printf ("%g\n", ts2_arg.d1); - printf ("%g\n", ts2_arg.d2); - - ffi_call(&cif, FFI_FN(struct2), ts2_result, values); - - printf ("%g\n", ts2_result->d1); - printf ("%g\n", ts2_result->d2); - - CHECK(ts2_result->d1 == 5.55 - 1); - CHECK(ts2_result->d2 == 6.66 - 1); - - free (ts2_result); - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c deleted file mode 100644 index e0bb09b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Area: ffi_call - Purpose: Check structures. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct -{ - int si; -} test_structure_3; - -static test_structure_3 struct3(test_structure_3 ts) -{ - ts.si = -(ts.si*2); - - return ts; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - int compare_value; - ffi_type ts3_type; - ffi_type *ts3_type_elements[2]; - ts3_type.size = 0; - ts3_type.alignment = 0; - ts3_type.type = FFI_TYPE_STRUCT; - ts3_type.elements = ts3_type_elements; - ts3_type_elements[0] = &ffi_type_sint; - ts3_type_elements[1] = NULL; - - test_structure_3 ts3_arg; - test_structure_3 *ts3_result = - (test_structure_3 *) malloc (sizeof(test_structure_3)); - - args[0] = &ts3_type; - values[0] = &ts3_arg; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ts3_type, args) == FFI_OK); - - ts3_arg.si = -123; - compare_value = ts3_arg.si; - - ffi_call(&cif, FFI_FN(struct3), ts3_result, values); - - printf ("%d %d\n", ts3_result->si, -(compare_value*2)); - - CHECK(ts3_result->si == -(compare_value*2)); - - free (ts3_result); - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c deleted file mode 100644 index 0ad0a83..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +++ /dev/null @@ -1,63 +0,0 @@ -/* Area: ffi_call - Purpose: Check structures. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct -{ - unsigned ui1; - unsigned ui2; - unsigned ui3; -} test_structure_4; - -static test_structure_4 struct4(test_structure_4 ts) -{ - ts.ui3 = ts.ui1 * ts.ui2 * ts.ui3; - - return ts; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_type ts4_type; - ffi_type *ts4_type_elements[4]; - ts4_type.size = 0; - ts4_type.alignment = 0; - ts4_type.type = FFI_TYPE_STRUCT; - test_structure_4 ts4_arg; - ts4_type.elements = ts4_type_elements; - ts4_type_elements[0] = &ffi_type_uint; - ts4_type_elements[1] = &ffi_type_uint; - ts4_type_elements[2] = &ffi_type_uint; - ts4_type_elements[3] = NULL; - - - /* This is a hack to get a properly aligned result buffer */ - test_structure_4 *ts4_result = - (test_structure_4 *) malloc (sizeof(test_structure_4)); - - args[0] = &ts4_type; - values[0] = &ts4_arg; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts4_type, args) == FFI_OK); - - ts4_arg.ui1 = 2; - ts4_arg.ui2 = 3; - ts4_arg.ui3 = 4; - - ffi_call (&cif, FFI_FN(struct4), ts4_result, values); - - CHECK(ts4_result->ui3 == 2U * 3U * 4U); - - - free (ts4_result); - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c deleted file mode 100644 index c03cc97..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Area: ffi_call - Purpose: Check structures. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" -typedef struct -{ - char c1; - char c2; -} test_structure_5; - -static test_structure_5 struct5(test_structure_5 ts1, test_structure_5 ts2) -{ - ts1.c1 += ts2.c1; - ts1.c2 -= ts2.c2; - - return ts1; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_type ts5_type; - ffi_type *ts5_type_elements[3]; - ts5_type.size = 0; - ts5_type.alignment = 0; - ts5_type.type = FFI_TYPE_STRUCT; - ts5_type.elements = ts5_type_elements; - ts5_type_elements[0] = &ffi_type_schar; - ts5_type_elements[1] = &ffi_type_schar; - ts5_type_elements[2] = NULL; - - test_structure_5 ts5_arg1, ts5_arg2; - - /* This is a hack to get a properly aligned result buffer */ - test_structure_5 *ts5_result = - (test_structure_5 *) malloc (sizeof(test_structure_5)); - - args[0] = &ts5_type; - args[1] = &ts5_type; - values[0] = &ts5_arg1; - values[1] = &ts5_arg2; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ts5_type, args) == FFI_OK); - - ts5_arg1.c1 = 2; - ts5_arg1.c2 = 6; - ts5_arg2.c1 = 5; - ts5_arg2.c2 = 3; - - ffi_call (&cif, FFI_FN(struct5), ts5_result, values); - - CHECK(ts5_result->c1 == 7); - CHECK(ts5_result->c2 == 3); - - - free (ts5_result); - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c deleted file mode 100644 index 83db9af..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Area: ffi_call - Purpose: Check structures. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" -typedef struct -{ - float f; - double d; -} test_structure_6; - -static test_structure_6 struct6 (test_structure_6 ts) -{ - ts.f += 1; - ts.d += 1; - - return ts; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_type ts6_type; - ffi_type *ts6_type_elements[3]; - ts6_type.size = 0; - ts6_type.alignment = 0; - ts6_type.type = FFI_TYPE_STRUCT; - ts6_type.elements = ts6_type_elements; - ts6_type_elements[0] = &ffi_type_float; - ts6_type_elements[1] = &ffi_type_double; - ts6_type_elements[2] = NULL; - - - test_structure_6 ts6_arg; - - /* This is a hack to get a properly aligned result buffer */ - test_structure_6 *ts6_result = - (test_structure_6 *) malloc (sizeof(test_structure_6)); - - args[0] = &ts6_type; - values[0] = &ts6_arg; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts6_type, args) == FFI_OK); - - ts6_arg.f = 5.55f; - ts6_arg.d = 6.66; - - printf ("%g\n", ts6_arg.f); - printf ("%g\n", ts6_arg.d); - - ffi_call(&cif, FFI_FN(struct6), ts6_result, values); - - CHECK(ts6_result->f == 5.55f + 1); - CHECK(ts6_result->d == 6.66 + 1); - - free (ts6_result); - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c deleted file mode 100644 index 58aac4c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Area: ffi_call - Purpose: Check structures. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" -typedef struct -{ - float f1; - float f2; - double d; -} test_structure_7; - -static test_structure_7 struct7 (test_structure_7 ts) -{ - ts.f1 += 1; - ts.f2 += 1; - ts.d += 1; - - return ts; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_type ts7_type; - ffi_type *ts7_type_elements[4]; - ts7_type.size = 0; - ts7_type.alignment = 0; - ts7_type.type = FFI_TYPE_STRUCT; - ts7_type.elements = ts7_type_elements; - ts7_type_elements[0] = &ffi_type_float; - ts7_type_elements[1] = &ffi_type_float; - ts7_type_elements[2] = &ffi_type_double; - ts7_type_elements[3] = NULL; - - - test_structure_7 ts7_arg; - - /* This is a hack to get a properly aligned result buffer */ - test_structure_7 *ts7_result = - (test_structure_7 *) malloc (sizeof(test_structure_7)); - - args[0] = &ts7_type; - values[0] = &ts7_arg; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts7_type, args) == FFI_OK); - - ts7_arg.f1 = 5.55f; - ts7_arg.f2 = 55.5f; - ts7_arg.d = 6.66; - - printf ("%g\n", ts7_arg.f1); - printf ("%g\n", ts7_arg.f2); - printf ("%g\n", ts7_arg.d); - - ffi_call(&cif, FFI_FN(struct7), ts7_result, values); - - printf ("%g\n", ts7_result->f1); - printf ("%g\n", ts7_result->f2); - printf ("%g\n", ts7_result->d); - - CHECK(ts7_result->f1 == 5.55f + 1); - CHECK(ts7_result->f2 == 55.5f + 1); - CHECK(ts7_result->d == 6.66 + 1); - - free (ts7_result); - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c deleted file mode 100644 index c773ac7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +++ /dev/null @@ -1,80 +0,0 @@ -/* Area: ffi_call - Purpose: Check structures. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" -typedef struct -{ - float f1; - float f2; - float f3; - float f4; -} test_structure_8; - -static test_structure_8 struct8 (test_structure_8 ts) -{ - ts.f1 += 1; - ts.f2 += 1; - ts.f3 += 1; - ts.f4 += 1; - - return ts; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_type ts8_type; - ffi_type *ts8_type_elements[5]; - ts8_type.size = 0; - ts8_type.alignment = 0; - ts8_type.type = FFI_TYPE_STRUCT; - ts8_type.elements = ts8_type_elements; - ts8_type_elements[0] = &ffi_type_float; - ts8_type_elements[1] = &ffi_type_float; - ts8_type_elements[2] = &ffi_type_float; - ts8_type_elements[3] = &ffi_type_float; - ts8_type_elements[4] = NULL; - - test_structure_8 ts8_arg; - - /* This is a hack to get a properly aligned result buffer */ - test_structure_8 *ts8_result = - (test_structure_8 *) malloc (sizeof(test_structure_8)); - - args[0] = &ts8_type; - values[0] = &ts8_arg; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts8_type, args) == FFI_OK); - - ts8_arg.f1 = 5.55f; - ts8_arg.f2 = 55.5f; - ts8_arg.f3 = -5.55f; - ts8_arg.f4 = -55.5f; - - printf ("%g\n", ts8_arg.f1); - printf ("%g\n", ts8_arg.f2); - printf ("%g\n", ts8_arg.f3); - printf ("%g\n", ts8_arg.f4); - - ffi_call(&cif, FFI_FN(struct8), ts8_result, values); - - printf ("%g\n", ts8_result->f1); - printf ("%g\n", ts8_result->f2); - printf ("%g\n", ts8_result->f3); - printf ("%g\n", ts8_result->f4); - - CHECK(ts8_result->f1 == 5.55f + 1); - CHECK(ts8_result->f2 == 55.5f + 1); - CHECK(ts8_result->f3 == -5.55f + 1); - CHECK(ts8_result->f4 == -55.5f + 1); - - free (ts8_result); - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c deleted file mode 100644 index f30091f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Area: ffi_call - Purpose: Check structures. - Limitations: none. - PR: none. - Originator: From the original ffitest.c */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct -{ - float f; - int i; -} test_structure_9; - -static test_structure_9 struct9 (test_structure_9 ts) -{ - ts.f += 1; - ts.i += 1; - - return ts; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_type ts9_type; - ffi_type *ts9_type_elements[3]; - ts9_type.size = 0; - ts9_type.alignment = 0; - ts9_type.type = FFI_TYPE_STRUCT; - ts9_type.elements = ts9_type_elements; - ts9_type_elements[0] = &ffi_type_float; - ts9_type_elements[1] = &ffi_type_sint; - ts9_type_elements[2] = NULL; - - test_structure_9 ts9_arg; - - /* This is a hack to get a properly aligned result buffer */ - test_structure_9 *ts9_result = - (test_structure_9 *) malloc (sizeof(test_structure_9)); - - args[0] = &ts9_type; - values[0] = &ts9_arg; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts9_type, args) == FFI_OK); - - ts9_arg.f = 5.55f; - ts9_arg.i = 5; - - printf ("%g\n", ts9_arg.f); - printf ("%d\n", ts9_arg.i); - - ffi_call(&cif, FFI_FN(struct9), ts9_result, values); - - printf ("%g\n", ts9_result->f); - printf ("%d\n", ts9_result->i); - - CHECK(ts9_result->f == 5.55f + 1); - CHECK(ts9_result->i == 5 + 1); - - free (ts9_result); - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c deleted file mode 100644 index 161cc89..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c +++ /dev/null @@ -1,70 +0,0 @@ -/* Area: closure_call - Purpose: Check return value float. - Limitations: none. - PR: 41908. - Originator: 20091102 */ - -/* { dg-do run } */ -#include "ffitest.h" - -typedef struct cls_struct_combined { - float a; - float b; - float c; - float d; -} cls_struct_combined; - -void cls_struct_combined_fn(struct cls_struct_combined arg) -{ - printf("%g %g %g %g\n", - arg.a, arg.b, - arg.c, arg.d); - fflush(stdout); -} - -static void -cls_struct_combined_gn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__, - void** args, void* userdata __UNUSED__) -{ - struct cls_struct_combined a0; - - a0 = *(struct cls_struct_combined*)(args[0]); - - cls_struct_combined_fn(a0); -} - - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type* cls_struct_fields0[5]; - ffi_type cls_struct_type0; - ffi_type* dbl_arg_types[5]; - - cls_struct_type0.size = 0; - cls_struct_type0.alignment = 0; - cls_struct_type0.type = FFI_TYPE_STRUCT; - cls_struct_type0.elements = cls_struct_fields0; - - struct cls_struct_combined g_dbl = {4.0, 5.0, 1.0, 8.0}; - - cls_struct_fields0[0] = &ffi_type_float; - cls_struct_fields0[1] = &ffi_type_float; - cls_struct_fields0[2] = &ffi_type_float; - cls_struct_fields0[3] = &ffi_type_float; - cls_struct_fields0[4] = NULL; - - dbl_arg_types[0] = &cls_struct_type0; - dbl_arg_types[1] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ffi_type_void, - dbl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_combined_gn, NULL, code) == FFI_OK); - - ((void(*)(cls_struct_combined)) (code))(g_dbl); - /* { dg-output "4 5 1 8" } */ - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h deleted file mode 100644 index 83f5442..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +++ /dev/null @@ -1,96 +0,0 @@ -#include -#include -#include -#include -#include "fficonfig.h" - -#define MAX_ARGS 256 - - -/* Define __UNUSED__ that also other compilers than gcc can run the tests. */ -#undef __UNUSED__ -#if defined(__GNUC__) -#define __UNUSED__ __attribute__((__unused__)) -#else -#define __UNUSED__ -#endif - -#define CHECK(x) (!(x) ? abort() : (void)0) - -/* Prefer MAP_ANON(YMOUS) to /dev/zero, since we don't need to keep a - file open. */ -#ifdef HAVE_MMAP_ANON -# undef HAVE_MMAP_DEV_ZERO - -# include -# ifndef MAP_FAILED -# define MAP_FAILED -1 -# endif -# if !defined (MAP_ANONYMOUS) && defined (MAP_ANON) -# define MAP_ANONYMOUS MAP_ANON -# endif -# define USING_MMAP - -#endif - -#ifdef HAVE_MMAP_DEV_ZERO - -# include -# ifndef MAP_FAILED -# define MAP_FAILED -1 -# endif -# define USING_MMAP - -#endif - - -/* MinGW kludge. */ -#ifdef _WIN64 -#define PRIdLL "I64d" -#define PRIuLL "I64u" -#else -#define PRIdLL "lld" -#define PRIuLL "llu" -#endif - -#ifdef USING_MMAP -static inline void * -allocate_mmap (size_t size) -{ - void *page; -#if defined (HAVE_MMAP_DEV_ZERO) - static int dev_zero_fd = -1; -#endif - -#ifdef HAVE_MMAP_DEV_ZERO - if (dev_zero_fd == -1) - { - dev_zero_fd = open ("/dev/zero", O_RDONLY); - if (dev_zero_fd == -1) - { - perror ("open /dev/zero: %m"); - exit (1); - } - } -#endif - - -#ifdef HAVE_MMAP_ANON - page = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC, - MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); -#endif -#ifdef HAVE_MMAP_DEV_ZERO - page = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC, - MAP_PRIVATE, dev_zero_fd, 0); -#endif - - if (page == (char *) MAP_FAILED) - { - perror ("virtual memory exhausted"); - exit (1); - } - - return page; -} - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.special/special.exp b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.special/special.exp deleted file mode 100644 index 74671b1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.special/special.exp +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (C) 2003, 2006, 2009, 2010 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; see the file COPYING3. If not see -# . - -dg-init -libffi-init - -global srcdir subdir - -global cxx_options - -set cxx_options " -shared-libgcc -lstdc++" - -dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] $cxx_options "-O0 -W -Wall" -dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] $cxx_options "-O2" -dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] $cxx_options "-O3" -dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] $cxx_options "-Os" - -dg-finish - -# Local Variables: -# tcl-indent-level:4 -# End: diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest.cc b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest.cc deleted file mode 100644 index d7ffd4a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest.cc +++ /dev/null @@ -1,124 +0,0 @@ -/* Area: ffi_closure, unwind info - Purpose: Check if the unwind information is passed correctly. - Limitations: none. - PR: none. - Originator: Jeff Sturm */ - -/* { dg-do run } */ -#include "ffitestcxx.h" - -#if defined HAVE_STDINT_H -#include -#endif - -#if defined HAVE_INTTYPES_H -#include -#endif - -void -closure_test_fn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__, - void** args __UNUSED__, void* userdata __UNUSED__) -{ - throw 9; -} - -typedef void (*closure_test_type)(); - -void closure_test_fn1(ffi_cif* cif __UNUSED__, void* resp, - void** args, void* userdata __UNUSED__) - { - *(ffi_arg*)resp = - (int)*(float *)args[0] +(int)(*(float *)args[1]) + - (int)(*(float *)args[2]) + (int)*(float *)args[3] + - (int)(*(signed short *)args[4]) + (int)(*(float *)args[5]) + - (int)*(float *)args[6] + (int)(*(int *)args[7]) + - (int)(*(double*)args[8]) + (int)*(int *)args[9] + - (int)(*(int *)args[10]) + (int)(*(float *)args[11]) + - (int)*(int *)args[12] + (int)(*(int *)args[13]) + - (int)(*(int *)args[14]) + *(int *)args[15] + (int)(intptr_t)userdata; - - printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", - (int)*(float *)args[0], (int)(*(float *)args[1]), - (int)(*(float *)args[2]), (int)*(float *)args[3], - (int)(*(signed short *)args[4]), (int)(*(float *)args[5]), - (int)*(float *)args[6], (int)(*(int *)args[7]), - (int)(*(double *)args[8]), (int)*(int *)args[9], - (int)(*(int *)args[10]), (int)(*(float *)args[11]), - (int)*(int *)args[12], (int)(*(int *)args[13]), - (int)(*(int *)args[14]), *(int *)args[15], - (int)(intptr_t)userdata, (int)*(ffi_arg*)resp); - - throw (int)*(ffi_arg*)resp; -} - -typedef int (*closure_test_type1)(float, float, float, float, signed short, - float, float, int, double, int, int, float, - int, int, int, int); - -int main (void) -{ - ffi_cif cif; - void *code; - ffi_closure *pcl = (ffi_closure *)ffi_closure_alloc(sizeof(ffi_closure), &code); - ffi_type * cl_arg_types[17]; - - { - cl_arg_types[1] = NULL; - - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 0, - &ffi_type_void, cl_arg_types) == FFI_OK); - CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn, NULL, code) == FFI_OK); - - try - { - (*((closure_test_type)(code)))(); - } catch (int exception_code) - { - CHECK(exception_code == 9); - } - - printf("part one OK\n"); - /* { dg-output "part one OK" } */ - } - - { - - cl_arg_types[0] = &ffi_type_float; - cl_arg_types[1] = &ffi_type_float; - cl_arg_types[2] = &ffi_type_float; - cl_arg_types[3] = &ffi_type_float; - cl_arg_types[4] = &ffi_type_sshort; - cl_arg_types[5] = &ffi_type_float; - cl_arg_types[6] = &ffi_type_float; - cl_arg_types[7] = &ffi_type_uint; - cl_arg_types[8] = &ffi_type_double; - cl_arg_types[9] = &ffi_type_uint; - cl_arg_types[10] = &ffi_type_uint; - cl_arg_types[11] = &ffi_type_float; - cl_arg_types[12] = &ffi_type_uint; - cl_arg_types[13] = &ffi_type_uint; - cl_arg_types[14] = &ffi_type_uint; - cl_arg_types[15] = &ffi_type_uint; - cl_arg_types[16] = NULL; - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, - &ffi_type_sint, cl_arg_types) == FFI_OK); - - CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn1, - (void *) 3 /* userdata */, code) == FFI_OK); - try - { - (*((closure_test_type1)code)) - (1.1, 2.2, 3.3, 4.4, 127, 5.5, 6.6, 8, 9, 10, 11, 12.0, 13, - 19, 21, 1); - /* { dg-output "\n1 2 3 4 127 5 6 8 9 10 11 12 13 19 21 1 3: 255" } */ - } catch (int exception_code) - { - CHECK(exception_code == 255); - } - printf("part two OK\n"); - /* { dg-output "\npart two OK" } */ - } - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc deleted file mode 100644 index 29739cd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc +++ /dev/null @@ -1,53 +0,0 @@ -/* Area: ffi_call, unwind info - Purpose: Check if the unwind information is passed correctly. - Limitations: none. - PR: none. - Originator: Andreas Tobler 20061213 */ - -/* { dg-do run } */ -#include "ffitestcxx.h" - -static int checking(int a __UNUSED__, short b __UNUSED__, - signed char c __UNUSED__) -{ - throw 9; -} - -int main (void) -{ - ffi_cif cif; - ffi_type *args[MAX_ARGS]; - void *values[MAX_ARGS]; - ffi_arg rint; - - signed int si; - signed short ss; - signed char sc; - - args[0] = &ffi_type_sint; - values[0] = &si; - args[1] = &ffi_type_sshort; - values[1] = &ss; - args[2] = &ffi_type_schar; - values[2] = ≻ - - /* Initialize the cif */ - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, - &ffi_type_sint, args) == FFI_OK); - - si = -6; - ss = -12; - sc = -1; - { - try - { - ffi_call(&cif, FFI_FN(checking), &rint, values); - } catch (int exception_code) - { - CHECK(exception_code == 9); - } - printf("part one OK\n"); - /* { dg-output "part one OK" } */ - } - exit(0); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/texinfo.tex b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/texinfo.tex deleted file mode 100644 index ff2c406..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/libffi/texinfo.tex +++ /dev/null @@ -1,7210 +0,0 @@ -% texinfo.tex -- TeX macros to handle Texinfo files. -% -% Load plain if necessary, i.e., if running under initex. -\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi -% -\def\texinfoversion{2005-07-05.19} -% -% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, -% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software -% Foundation, Inc. -% -% This texinfo.tex file is free software; you can redistribute it and/or -% modify it under the terms of the GNU General Public License as -% published by the Free Software Foundation; either version 2, or (at -% your option) any later version. -% -% This texinfo.tex file is distributed in the hope that it will be -% useful, but WITHOUT ANY WARRANTY; without even the implied warranty -% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -% General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this texinfo.tex file; see the file COPYING. If not, write -% to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -% Boston, MA 02110-1301, USA. -% -% As a special exception, when this file is read by TeX when processing -% a Texinfo source document, you may use the result without -% restriction. (This has been our intent since Texinfo was invented.) -% -% Please try the latest version of texinfo.tex before submitting bug -% reports; you can get the latest version from: -% http://www.gnu.org/software/texinfo/ (the Texinfo home page), or -% ftp://tug.org/tex/texinfo.tex -% (and all CTAN mirrors, see http://www.ctan.org). -% The texinfo.tex in any given distribution could well be out -% of date, so if that's what you're using, please check. -% -% Send bug reports to bug-texinfo@gnu.org. Please include including a -% complete document in each bug report with which we can reproduce the -% problem. Patches are, of course, greatly appreciated. -% -% To process a Texinfo manual with TeX, it's most reliable to use the -% texi2dvi shell script that comes with the distribution. For a simple -% manual foo.texi, however, you can get away with this: -% tex foo.texi -% texindex foo.?? -% tex foo.texi -% tex foo.texi -% dvips foo.dvi -o # or whatever; this makes foo.ps. -% The extra TeX runs get the cross-reference information correct. -% Sometimes one run after texindex suffices, and sometimes you need more -% than two; texi2dvi does it as many times as necessary. -% -% It is possible to adapt texinfo.tex for other languages, to some -% extent. You can get the existing language-specific files from the -% full Texinfo distribution. -% -% The GNU Texinfo home page is http://www.gnu.org/software/texinfo. - - -\message{Loading texinfo [version \texinfoversion]:} - -% If in a .fmt file, print the version number -% and turn on active characters that we couldn't do earlier because -% they might have appeared in the input file name. -\everyjob{\message{[Texinfo version \texinfoversion]}% - \catcode`+=\active \catcode`\_=\active} - -\message{Basics,} -\chardef\other=12 - -% We never want plain's \outer definition of \+ in Texinfo. -% For @tex, we can use \tabalign. -\let\+ = \relax - -% Save some plain tex macros whose names we will redefine. -\let\ptexb=\b -\let\ptexbullet=\bullet -\let\ptexc=\c -\let\ptexcomma=\, -\let\ptexdot=\. -\let\ptexdots=\dots -\let\ptexend=\end -\let\ptexequiv=\equiv -\let\ptexexclam=\! -\let\ptexfootnote=\footnote -\let\ptexgtr=> -\let\ptexhat=^ -\let\ptexi=\i -\let\ptexindent=\indent -\let\ptexinsert=\insert -\let\ptexlbrace=\{ -\let\ptexless=< -\let\ptexnewwrite\newwrite -\let\ptexnoindent=\noindent -\let\ptexplus=+ -\let\ptexrbrace=\} -\let\ptexslash=\/ -\let\ptexstar=\* -\let\ptext=\t - -% If this character appears in an error message or help string, it -% starts a new line in the output. -\newlinechar = `^^J - -% Use TeX 3.0's \inputlineno to get the line number, for better error -% messages, but if we're using an old version of TeX, don't do anything. -% -\ifx\inputlineno\thisisundefined - \let\linenumber = \empty % Pre-3.0. -\else - \def\linenumber{l.\the\inputlineno:\space} -\fi - -% Set up fixed words for English if not already set. -\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi -\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi -\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi -\ifx\putwordin\undefined \gdef\putwordin{in}\fi -\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi -\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi -\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi -\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi -\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi -\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi -\ifx\putwordof\undefined \gdef\putwordof{of}\fi -\ifx\putwordon\undefined \gdef\putwordon{on}\fi -\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi -\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi -\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi -\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi -\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi -\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi -\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi -% -\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi -\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi -\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi -\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi -\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi -\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi -\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi -\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi -\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi -\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi -\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi -\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi -% -\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi -\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi -\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi -\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi -\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi - -% In some macros, we cannot use the `\? notation---the left quote is -% in some cases the escape char. -\chardef\backChar = `\\ -\chardef\colonChar = `\: -\chardef\commaChar = `\, -\chardef\dotChar = `\. -\chardef\exclamChar= `\! -\chardef\plusChar = `\+ -\chardef\questChar = `\? -\chardef\semiChar = `\; -\chardef\underChar = `\_ - -\chardef\spaceChar = `\ % -\chardef\spacecat = 10 -\def\spaceisspace{\catcode\spaceChar=\spacecat} - -{% for help with debugging. - % example usage: \expandafter\show\activebackslash - \catcode`\! = 0 \catcode`\\ = \active - !global!def!activebackslash{\} -} - -% Ignore a token. -% -\def\gobble#1{} - -% The following is used inside several \edef's. -\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} - -% Hyphenation fixes. -\hyphenation{ - Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script - ap-pen-dix bit-map bit-maps - data-base data-bases eshell fall-ing half-way long-est man-u-script - man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm - par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces - spell-ing spell-ings - stand-alone strong-est time-stamp time-stamps which-ever white-space - wide-spread wrap-around -} - -% Margin to add to right of even pages, to left of odd pages. -\newdimen\bindingoffset -\newdimen\normaloffset -\newdimen\pagewidth \newdimen\pageheight - -% For a final copy, take out the rectangles -% that mark overfull boxes (in case you have decided -% that the text looks ok even though it passes the margin). -% -\def\finalout{\overfullrule=0pt} - -% @| inserts a changebar to the left of the current line. It should -% surround any changed text. This approach does *not* work if the -% change spans more than two lines of output. To handle that, we would -% have adopt a much more difficult approach (putting marks into the main -% vertical list for the beginning and end of each change). -% -\def\|{% - % \vadjust can only be used in horizontal mode. - \leavevmode - % - % Append this vertical mode material after the current line in the output. - \vadjust{% - % We want to insert a rule with the height and depth of the current - % leading; that is exactly what \strutbox is supposed to record. - \vskip-\baselineskip - % - % \vadjust-items are inserted at the left edge of the type. So - % the \llap here moves out into the left-hand margin. - \llap{% - % - % For a thicker or thinner bar, change the `1pt'. - \vrule height\baselineskip width1pt - % - % This is the space between the bar and the text. - \hskip 12pt - }% - }% -} - -% Sometimes it is convenient to have everything in the transcript file -% and nothing on the terminal. We don't just call \tracingall here, -% since that produces some useless output on the terminal. We also make -% some effort to order the tracing commands to reduce output in the log -% file; cf. trace.sty in LaTeX. -% -\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% -\def\loggingall{% - \tracingstats2 - \tracingpages1 - \tracinglostchars2 % 2 gives us more in etex - \tracingparagraphs1 - \tracingoutput1 - \tracingmacros2 - \tracingrestores1 - \showboxbreadth\maxdimen \showboxdepth\maxdimen - \ifx\eTeXversion\undefined\else % etex gives us more logging - \tracingscantokens1 - \tracingifs1 - \tracinggroups1 - \tracingnesting2 - \tracingassigns1 - \fi - \tracingcommands3 % 3 gives us more in etex - \errorcontextlines16 -}% - -% add check for \lastpenalty to plain's definitions. If the last thing -% we did was a \nobreak, we don't want to insert more space. -% -\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount - \removelastskip\penalty-50\smallskip\fi\fi} -\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount - \removelastskip\penalty-100\medskip\fi\fi} -\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount - \removelastskip\penalty-200\bigskip\fi\fi} - -% For @cropmarks command. -% Do @cropmarks to get crop marks. -% -\newif\ifcropmarks -\let\cropmarks = \cropmarkstrue -% -% Dimensions to add cropmarks at corners. -% Added by P. A. MacKay, 12 Nov. 1986 -% -\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines -\newdimen\cornerlong \cornerlong=1pc -\newdimen\cornerthick \cornerthick=.3pt -\newdimen\topandbottommargin \topandbottommargin=.75in - -% Main output routine. -\chardef\PAGE = 255 -\output = {\onepageout{\pagecontents\PAGE}} - -\newbox\headlinebox -\newbox\footlinebox - -% \onepageout takes a vbox as an argument. Note that \pagecontents -% does insertions, but you have to call it yourself. -\def\onepageout#1{% - \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi - % - \ifodd\pageno \advance\hoffset by \bindingoffset - \else \advance\hoffset by -\bindingoffset\fi - % - % Do this outside of the \shipout so @code etc. will be expanded in - % the headline as they should be, not taken literally (outputting ''code). - \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% - \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% - % - {% - % Have to do this stuff outside the \shipout because we want it to - % take effect in \write's, yet the group defined by the \vbox ends - % before the \shipout runs. - % - \indexdummies % don't expand commands in the output. - \shipout\vbox{% - % Do this early so pdf references go to the beginning of the page. - \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi - % - \ifcropmarks \vbox to \outervsize\bgroup - \hsize = \outerhsize - \vskip-\topandbottommargin - \vtop to0pt{% - \line{\ewtop\hfil\ewtop}% - \nointerlineskip - \line{% - \vbox{\moveleft\cornerthick\nstop}% - \hfill - \vbox{\moveright\cornerthick\nstop}% - }% - \vss}% - \vskip\topandbottommargin - \line\bgroup - \hfil % center the page within the outer (page) hsize. - \ifodd\pageno\hskip\bindingoffset\fi - \vbox\bgroup - \fi - % - \unvbox\headlinebox - \pagebody{#1}% - \ifdim\ht\footlinebox > 0pt - % Only leave this space if the footline is nonempty. - % (We lessened \vsize for it in \oddfootingxxx.) - % The \baselineskip=24pt in plain's \makefootline has no effect. - \vskip 2\baselineskip - \unvbox\footlinebox - \fi - % - \ifcropmarks - \egroup % end of \vbox\bgroup - \hfil\egroup % end of (centering) \line\bgroup - \vskip\topandbottommargin plus1fill minus1fill - \boxmaxdepth = \cornerthick - \vbox to0pt{\vss - \line{% - \vbox{\moveleft\cornerthick\nsbot}% - \hfill - \vbox{\moveright\cornerthick\nsbot}% - }% - \nointerlineskip - \line{\ewbot\hfil\ewbot}% - }% - \egroup % \vbox from first cropmarks clause - \fi - }% end of \shipout\vbox - }% end of group with \indexdummies - \advancepageno - \ifnum\outputpenalty>-20000 \else\dosupereject\fi -} - -\newinsert\margin \dimen\margin=\maxdimen - -\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} -{\catcode`\@ =11 -\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi -% marginal hacks, juha@viisa.uucp (Juha Takala) -\ifvoid\margin\else % marginal info is present - \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi -\dimen@=\dp#1 \unvbox#1 -\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi -\ifr@ggedbottom \kern-\dimen@ \vfil \fi} -} - -% Here are the rules for the cropmarks. Note that they are -% offset so that the space between them is truly \outerhsize or \outervsize -% (P. A. MacKay, 12 November, 1986) -% -\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} -\def\nstop{\vbox - {\hrule height\cornerthick depth\cornerlong width\cornerthick}} -\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} -\def\nsbot{\vbox - {\hrule height\cornerlong depth\cornerthick width\cornerthick}} - -% Parse an argument, then pass it to #1. The argument is the rest of -% the input line (except we remove a trailing comment). #1 should be a -% macro which expects an ordinary undelimited TeX argument. -% -\def\parsearg{\parseargusing{}} -\def\parseargusing#1#2{% - \def\next{#2}% - \begingroup - \obeylines - \spaceisspace - #1% - \parseargline\empty% Insert the \empty token, see \finishparsearg below. -} - -{\obeylines % - \gdef\parseargline#1^^M{% - \endgroup % End of the group started in \parsearg. - \argremovecomment #1\comment\ArgTerm% - }% -} - -% First remove any @comment, then any @c comment. -\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} -\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} - -% Each occurence of `\^^M' or `\^^M' is replaced by a single space. -% -% \argremovec might leave us with trailing space, e.g., -% @end itemize @c foo -% This space token undergoes the same procedure and is eventually removed -% by \finishparsearg. -% -\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} -\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} -\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% - \def\temp{#3}% - \ifx\temp\empty - % We cannot use \next here, as it holds the macro to run; - % thus we reuse \temp. - \let\temp\finishparsearg - \else - \let\temp\argcheckspaces - \fi - % Put the space token in: - \temp#1 #3\ArgTerm -} - -% If a _delimited_ argument is enclosed in braces, they get stripped; so -% to get _exactly_ the rest of the line, we had to prevent such situation. -% We prepended an \empty token at the very beginning and we expand it now, -% just before passing the control to \next. -% (Similarily, we have to think about #3 of \argcheckspacesY above: it is -% either the null string, or it ends with \^^M---thus there is no danger -% that a pair of braces would be stripped. -% -% But first, we have to remove the trailing space token. -% -\def\finishparsearg#1 \ArgTerm{\expandafter\next\expandafter{#1}} - -% \parseargdef\foo{...} -% is roughly equivalent to -% \def\foo{\parsearg\Xfoo} -% \def\Xfoo#1{...} -% -% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my -% favourite TeX trick. --kasal, 16nov03 - -\def\parseargdef#1{% - \expandafter \doparseargdef \csname\string#1\endcsname #1% -} -\def\doparseargdef#1#2{% - \def#2{\parsearg#1}% - \def#1##1% -} - -% Several utility definitions with active space: -{ - \obeyspaces - \gdef\obeyedspace{ } - - % Make each space character in the input produce a normal interword - % space in the output. Don't allow a line break at this space, as this - % is used only in environments like @example, where each line of input - % should produce a line of output anyway. - % - \gdef\sepspaces{\obeyspaces\let =\tie} - - % If an index command is used in an @example environment, any spaces - % therein should become regular spaces in the raw index file, not the - % expansion of \tie (\leavevmode \penalty \@M \ ). - \gdef\unsepspaces{\let =\space} -} - - -\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} - -% Define the framework for environments in texinfo.tex. It's used like this: -% -% \envdef\foo{...} -% \def\Efoo{...} -% -% It's the responsibility of \envdef to insert \begingroup before the -% actual body; @end closes the group after calling \Efoo. \envdef also -% defines \thisenv, so the current environment is known; @end checks -% whether the environment name matches. The \checkenv macro can also be -% used to check whether the current environment is the one expected. -% -% Non-false conditionals (@iftex, @ifset) don't fit into this, so they -% are not treated as enviroments; they don't open a group. (The -% implementation of @end takes care not to call \endgroup in this -% special case.) - - -% At runtime, environments start with this: -\def\startenvironment#1{\begingroup\def\thisenv{#1}} -% initialize -\let\thisenv\empty - -% ... but they get defined via ``\envdef\foo{...}'': -\long\def\envdef#1#2{\def#1{\startenvironment#1#2}} -\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} - -% Check whether we're in the right environment: -\def\checkenv#1{% - \def\temp{#1}% - \ifx\thisenv\temp - \else - \badenverr - \fi -} - -% Evironment mismatch, #1 expected: -\def\badenverr{% - \errhelp = \EMsimple - \errmessage{This command can appear only \inenvironment\temp, - not \inenvironment\thisenv}% -} -\def\inenvironment#1{% - \ifx#1\empty - out of any environment% - \else - in environment \expandafter\string#1% - \fi -} - -% @end foo executes the definition of \Efoo. -% But first, it executes a specialized version of \checkenv -% -\parseargdef\end{% - \if 1\csname iscond.#1\endcsname - \else - % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03 - \expandafter\checkenv\csname#1\endcsname - \csname E#1\endcsname - \endgroup - \fi -} - -\newhelp\EMsimple{Press RETURN to continue.} - - -%% Simple single-character @ commands - -% @@ prints an @ -% Kludge this until the fonts are right (grr). -\def\@{{\tt\char64}} - -% This is turned off because it was never documented -% and you can use @w{...} around a quote to suppress ligatures. -%% Define @` and @' to be the same as ` and ' -%% but suppressing ligatures. -%\def\`{{`}} -%\def\'{{'}} - -% Used to generate quoted braces. -\def\mylbrace {{\tt\char123}} -\def\myrbrace {{\tt\char125}} -\let\{=\mylbrace -\let\}=\myrbrace -\begingroup - % Definitions to produce \{ and \} commands for indices, - % and @{ and @} for the aux/toc files. - \catcode`\{ = \other \catcode`\} = \other - \catcode`\[ = 1 \catcode`\] = 2 - \catcode`\! = 0 \catcode`\\ = \other - !gdef!lbracecmd[\{]% - !gdef!rbracecmd[\}]% - !gdef!lbraceatcmd[@{]% - !gdef!rbraceatcmd[@}]% -!endgroup - -% @comma{} to avoid , parsing problems. -\let\comma = , - -% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent -% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. -\let\, = \c -\let\dotaccent = \. -\def\ringaccent#1{{\accent23 #1}} -\let\tieaccent = \t -\let\ubaraccent = \b -\let\udotaccent = \d - -% Other special characters: @questiondown @exclamdown @ordf @ordm -% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. -\def\questiondown{?`} -\def\exclamdown{!`} -\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} -\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} - -% Dotless i and dotless j, used for accents. -\def\imacro{i} -\def\jmacro{j} -\def\dotless#1{% - \def\temp{#1}% - \ifx\temp\imacro \ptexi - \else\ifx\temp\jmacro \j - \else \errmessage{@dotless can be used only with i or j}% - \fi\fi -} - -% The \TeX{} logo, as in plain, but resetting the spacing so that a -% period following counts as ending a sentence. (Idea found in latex.) -% -\edef\TeX{\TeX \spacefactor=1000 } - -% @LaTeX{} logo. Not quite the same results as the definition in -% latex.ltx, since we use a different font for the raised A; it's most -% convenient for us to use an explicitly smaller font, rather than using -% the \scriptstyle font (since we don't reset \scriptstyle and -% \scriptscriptstyle). -% -\def\LaTeX{% - L\kern-.36em - {\setbox0=\hbox{T}% - \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}% - \kern-.15em - \TeX -} - -% Be sure we're in horizontal mode when doing a tie, since we make space -% equivalent to this in @example-like environments. Otherwise, a space -% at the beginning of a line will start with \penalty -- and -% since \penalty is valid in vertical mode, we'd end up putting the -% penalty on the vertical list instead of in the new paragraph. -{\catcode`@ = 11 - % Avoid using \@M directly, because that causes trouble - % if the definition is written into an index file. - \global\let\tiepenalty = \@M - \gdef\tie{\leavevmode\penalty\tiepenalty\ } -} - -% @: forces normal size whitespace following. -\def\:{\spacefactor=1000 } - -% @* forces a line break. -\def\*{\hfil\break\hbox{}\ignorespaces} - -% @/ allows a line break. -\let\/=\allowbreak - -% @. is an end-of-sentence period. -\def\.{.\spacefactor=\endofsentencespacefactor\space} - -% @! is an end-of-sentence bang. -\def\!{!\spacefactor=\endofsentencespacefactor\space} - -% @? is an end-of-sentence query. -\def\?{?\spacefactor=\endofsentencespacefactor\space} - -% @frenchspacing on|off says whether to put extra space after punctuation. -% -\def\onword{on} -\def\offword{off} -% -\parseargdef\frenchspacing{% - \def\temp{#1}% - \ifx\temp\onword \plainfrenchspacing - \else\ifx\temp\offword \plainnonfrenchspacing - \else - \errhelp = \EMsimple - \errmessage{Unknown @frenchspacing option `\temp', must be on/off}% - \fi\fi -} - -% @w prevents a word break. Without the \leavevmode, @w at the -% beginning of a paragraph, when TeX is still in vertical mode, would -% produce a whole line of output instead of starting the paragraph. -\def\w#1{\leavevmode\hbox{#1}} - -% @group ... @end group forces ... to be all on one page, by enclosing -% it in a TeX vbox. We use \vtop instead of \vbox to construct the box -% to keep its height that of a normal line. According to the rules for -% \topskip (p.114 of the TeXbook), the glue inserted is -% max (\topskip - \ht (first item), 0). If that height is large, -% therefore, no glue is inserted, and the space between the headline and -% the text is small, which looks bad. -% -% Another complication is that the group might be very large. This can -% cause the glue on the previous page to be unduly stretched, because it -% does not have much material. In this case, it's better to add an -% explicit \vfill so that the extra space is at the bottom. The -% threshold for doing this is if the group is more than \vfilllimit -% percent of a page (\vfilllimit can be changed inside of @tex). -% -\newbox\groupbox -\def\vfilllimit{0.7} -% -\envdef\group{% - \ifnum\catcode`\^^M=\active \else - \errhelp = \groupinvalidhelp - \errmessage{@group invalid in context where filling is enabled}% - \fi - \startsavinginserts - % - \setbox\groupbox = \vtop\bgroup - % Do @comment since we are called inside an environment such as - % @example, where each end-of-line in the input causes an - % end-of-line in the output. We don't want the end-of-line after - % the `@group' to put extra space in the output. Since @group - % should appear on a line by itself (according to the Texinfo - % manual), we don't worry about eating any user text. - \comment -} -% -% The \vtop produces a box with normal height and large depth; thus, TeX puts -% \baselineskip glue before it, and (when the next line of text is done) -% \lineskip glue after it. Thus, space below is not quite equal to space -% above. But it's pretty close. -\def\Egroup{% - % To get correct interline space between the last line of the group - % and the first line afterwards, we have to propagate \prevdepth. - \endgraf % Not \par, as it may have been set to \lisppar. - \global\dimen1 = \prevdepth - \egroup % End the \vtop. - % \dimen0 is the vertical size of the group's box. - \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox - % \dimen2 is how much space is left on the page (more or less). - \dimen2 = \pageheight \advance\dimen2 by -\pagetotal - % if the group doesn't fit on the current page, and it's a big big - % group, force a page break. - \ifdim \dimen0 > \dimen2 - \ifdim \pagetotal < \vfilllimit\pageheight - \page - \fi - \fi - \box\groupbox - \prevdepth = \dimen1 - \checkinserts -} -% -% TeX puts in an \escapechar (i.e., `@') at the beginning of the help -% message, so this ends up printing `@group can only ...'. -% -\newhelp\groupinvalidhelp{% -group can only be used in environments such as @example,^^J% -where each line of input produces a line of output.} - -% @need space-in-mils -% forces a page break if there is not space-in-mils remaining. - -\newdimen\mil \mil=0.001in - -% Old definition--didn't work. -%\parseargdef\need{\par % -%% This method tries to make TeX break the page naturally -%% if the depth of the box does not fit. -%{\baselineskip=0pt% -%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak -%\prevdepth=-1000pt -%}} - -\parseargdef\need{% - % Ensure vertical mode, so we don't make a big box in the middle of a - % paragraph. - \par - % - % If the @need value is less than one line space, it's useless. - \dimen0 = #1\mil - \dimen2 = \ht\strutbox - \advance\dimen2 by \dp\strutbox - \ifdim\dimen0 > \dimen2 - % - % Do a \strut just to make the height of this box be normal, so the - % normal leading is inserted relative to the preceding line. - % And a page break here is fine. - \vtop to #1\mil{\strut\vfil}% - % - % TeX does not even consider page breaks if a penalty added to the - % main vertical list is 10000 or more. But in order to see if the - % empty box we just added fits on the page, we must make it consider - % page breaks. On the other hand, we don't want to actually break the - % page after the empty box. So we use a penalty of 9999. - % - % There is an extremely small chance that TeX will actually break the - % page at this \penalty, if there are no other feasible breakpoints in - % sight. (If the user is using lots of big @group commands, which - % almost-but-not-quite fill up a page, TeX will have a hard time doing - % good page breaking, for example.) However, I could not construct an - % example where a page broke at this \penalty; if it happens in a real - % document, then we can reconsider our strategy. - \penalty9999 - % - % Back up by the size of the box, whether we did a page break or not. - \kern -#1\mil - % - % Do not allow a page break right after this kern. - \nobreak - \fi -} - -% @br forces paragraph break (and is undocumented). - -\let\br = \par - -% @page forces the start of a new page. -% -\def\page{\par\vfill\supereject} - -% @exdent text.... -% outputs text on separate line in roman font, starting at standard page margin - -% This records the amount of indent in the innermost environment. -% That's how much \exdent should take out. -\newskip\exdentamount - -% This defn is used inside fill environments such as @defun. -\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} - -% This defn is used inside nofill environments such as @example. -\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount - \leftline{\hskip\leftskip{\rm#1}}}} - -% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current -% paragraph. For more general purposes, use the \margin insertion -% class. WHICH is `l' or `r'. -% -\newskip\inmarginspacing \inmarginspacing=1cm -\def\strutdepth{\dp\strutbox} -% -\def\doinmargin#1#2{\strut\vadjust{% - \nobreak - \kern-\strutdepth - \vtop to \strutdepth{% - \baselineskip=\strutdepth - \vss - % if you have multiple lines of stuff to put here, you'll need to - % make the vbox yourself of the appropriate size. - \ifx#1l% - \llap{\ignorespaces #2\hskip\inmarginspacing}% - \else - \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% - \fi - \null - }% -}} -\def\inleftmargin{\doinmargin l} -\def\inrightmargin{\doinmargin r} -% -% @inmargin{TEXT [, RIGHT-TEXT]} -% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; -% else use TEXT for both). -% -\def\inmargin#1{\parseinmargin #1,,\finish} -\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0 > 0pt - \def\lefttext{#1}% have both texts - \def\righttext{#2}% - \else - \def\lefttext{#1}% have only one text - \def\righttext{#1}% - \fi - % - \ifodd\pageno - \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin - \else - \def\temp{\inleftmargin\lefttext}% - \fi - \temp -} - -% @include file insert text of that file as input. -% -\def\include{\parseargusing\filenamecatcodes\includezzz} -\def\includezzz#1{% - \pushthisfilestack - \def\thisfile{#1}% - {% - \makevalueexpandable - \def\temp{\input #1 }% - \expandafter - }\temp - \popthisfilestack -} -\def\filenamecatcodes{% - \catcode`\\=\other - \catcode`~=\other - \catcode`^=\other - \catcode`_=\other - \catcode`|=\other - \catcode`<=\other - \catcode`>=\other - \catcode`+=\other - \catcode`-=\other -} - -\def\pushthisfilestack{% - \expandafter\pushthisfilestackX\popthisfilestack\StackTerm -} -\def\pushthisfilestackX{% - \expandafter\pushthisfilestackY\thisfile\StackTerm -} -\def\pushthisfilestackY #1\StackTerm #2\StackTerm {% - \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% -} - -\def\popthisfilestack{\errthisfilestackempty} -\def\errthisfilestackempty{\errmessage{Internal error: - the stack of filenames is empty.}} - -\def\thisfile{} - -% @center line -% outputs that line, centered. -% -\parseargdef\center{% - \ifhmode - \let\next\centerH - \else - \let\next\centerV - \fi - \next{\hfil \ignorespaces#1\unskip \hfil}% -} -\def\centerH#1{% - {% - \hfil\break - \advance\hsize by -\leftskip - \advance\hsize by -\rightskip - \line{#1}% - \break - }% -} -\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}} - -% @sp n outputs n lines of vertical space - -\parseargdef\sp{\vskip #1\baselineskip} - -% @comment ...line which is ignored... -% @c is the same as @comment -% @ignore ... @end ignore is another way to write a comment - -\def\comment{\begingroup \catcode`\^^M=\other% -\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% -\commentxxx} -{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} - -\let\c=\comment - -% @paragraphindent NCHARS -% We'll use ems for NCHARS, close enough. -% NCHARS can also be the word `asis' or `none'. -% We cannot feasibly implement @paragraphindent asis, though. -% -\def\asisword{asis} % no translation, these are keywords -\def\noneword{none} -% -\parseargdef\paragraphindent{% - \def\temp{#1}% - \ifx\temp\asisword - \else - \ifx\temp\noneword - \defaultparindent = 0pt - \else - \defaultparindent = #1em - \fi - \fi - \parindent = \defaultparindent -} - -% @exampleindent NCHARS -% We'll use ems for NCHARS like @paragraphindent. -% It seems @exampleindent asis isn't necessary, but -% I preserve it to make it similar to @paragraphindent. -\parseargdef\exampleindent{% - \def\temp{#1}% - \ifx\temp\asisword - \else - \ifx\temp\noneword - \lispnarrowing = 0pt - \else - \lispnarrowing = #1em - \fi - \fi -} - -% @firstparagraphindent WORD -% If WORD is `none', then suppress indentation of the first paragraph -% after a section heading. If WORD is `insert', then do indent at such -% paragraphs. -% -% The paragraph indentation is suppressed or not by calling -% \suppressfirstparagraphindent, which the sectioning commands do. -% We switch the definition of this back and forth according to WORD. -% By default, we suppress indentation. -% -\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} -\def\insertword{insert} -% -\parseargdef\firstparagraphindent{% - \def\temp{#1}% - \ifx\temp\noneword - \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent - \else\ifx\temp\insertword - \let\suppressfirstparagraphindent = \relax - \else - \errhelp = \EMsimple - \errmessage{Unknown @firstparagraphindent option `\temp'}% - \fi\fi -} - -% Here is how we actually suppress indentation. Redefine \everypar to -% \kern backwards by \parindent, and then reset itself to empty. -% -% We also make \indent itself not actually do anything until the next -% paragraph. -% -\gdef\dosuppressfirstparagraphindent{% - \gdef\indent{% - \restorefirstparagraphindent - \indent - }% - \gdef\noindent{% - \restorefirstparagraphindent - \noindent - }% - \global\everypar = {% - \kern -\parindent - \restorefirstparagraphindent - }% -} - -\gdef\restorefirstparagraphindent{% - \global \let \indent = \ptexindent - \global \let \noindent = \ptexnoindent - \global \everypar = {}% -} - - -% @asis just yields its argument. Used with @table, for example. -% -\def\asis#1{#1} - -% @math outputs its argument in math mode. -% -% One complication: _ usually means subscripts, but it could also mean -% an actual _ character, as in @math{@var{some_variable} + 1}. So make -% _ active, and distinguish by seeing if the current family is \slfam, -% which is what @var uses. -{ - \catcode\underChar = \active - \gdef\mathunderscore{% - \catcode\underChar=\active - \def_{\ifnum\fam=\slfam \_\else\sb\fi}% - } -} -% Another complication: we want \\ (and @\) to output a \ character. -% FYI, plain.tex uses \\ as a temporary control sequence (why?), but -% this is not advertised and we don't care. Texinfo does not -% otherwise define @\. -% -% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. -\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} -% -\def\math{% - \tex - \mathunderscore - \let\\ = \mathbackslash - \mathactive - $\finishmath -} -\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. - -% Some active characters (such as <) are spaced differently in math. -% We have to reset their definitions in case the @math was an argument -% to a command which sets the catcodes (such as @item or @section). -% -{ - \catcode`^ = \active - \catcode`< = \active - \catcode`> = \active - \catcode`+ = \active - \gdef\mathactive{% - \let^ = \ptexhat - \let< = \ptexless - \let> = \ptexgtr - \let+ = \ptexplus - } -} - -% @bullet and @minus need the same treatment as @math, just above. -\def\bullet{$\ptexbullet$} -\def\minus{$-$} - -% @dots{} outputs an ellipsis using the current font. -% We do .5em per period so that it has the same spacing in a typewriter -% font as three actual period characters. -% -\def\dots{% - \leavevmode - \hbox to 1.5em{% - \hskip 0pt plus 0.25fil - .\hfil.\hfil.% - \hskip 0pt plus 0.5fil - }% -} - -% @enddots{} is an end-of-sentence ellipsis. -% -\def\enddots{% - \dots - \spacefactor=\endofsentencespacefactor -} - -% @comma{} is so commas can be inserted into text without messing up -% Texinfo's parsing. -% -\let\comma = , - -% @refill is a no-op. -\let\refill=\relax - -% If working on a large document in chapters, it is convenient to -% be able to disable indexing, cross-referencing, and contents, for test runs. -% This is done with @novalidate (before @setfilename). -% -\newif\iflinks \linkstrue % by default we want the aux files. -\let\novalidate = \linksfalse - -% @setfilename is done at the beginning of every texinfo file. -% So open here the files we need to have open while reading the input. -% This makes it possible to make a .fmt file for texinfo. -\def\setfilename{% - \fixbackslash % Turn off hack to swallow `\input texinfo'. - \iflinks - \tryauxfile - % Open the new aux file. TeX will close it automatically at exit. - \immediate\openout\auxfile=\jobname.aux - \fi % \openindices needs to do some work in any case. - \openindices - \let\setfilename=\comment % Ignore extra @setfilename cmds. - % - % If texinfo.cnf is present on the system, read it. - % Useful for site-wide @afourpaper, etc. - \openin 1 texinfo.cnf - \ifeof 1 \else \input texinfo.cnf \fi - \closein 1 - % - \comment % Ignore the actual filename. -} - -% Called from \setfilename. -% -\def\openindices{% - \newindex{cp}% - \newcodeindex{fn}% - \newcodeindex{vr}% - \newcodeindex{tp}% - \newcodeindex{ky}% - \newcodeindex{pg}% -} - -% @bye. -\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} - - -\message{pdf,} -% adobe `portable' document format -\newcount\tempnum -\newcount\lnkcount -\newtoks\filename -\newcount\filenamelength -\newcount\pgn -\newtoks\toksA -\newtoks\toksB -\newtoks\toksC -\newtoks\toksD -\newbox\boxA -\newcount\countA -\newif\ifpdf -\newif\ifpdfmakepagedest - -% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 -% can be set). So we test for \relax and 0 as well as \undefined, -% borrowed from ifpdf.sty. -\ifx\pdfoutput\undefined -\else - \ifx\pdfoutput\relax - \else - \ifcase\pdfoutput - \else - \pdftrue - \fi - \fi -\fi - -% PDF uses PostScript string constants for the names of xref targets, to -% for display in the outlines, and in other places. Thus, we have to -% double any backslashes. Otherwise, a name like "\node" will be -% interpreted as a newline (\n), followed by o, d, e. Not good. -% http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html -% (and related messages, the final outcome is that it is up to the TeX -% user to double the backslashes and otherwise make the string valid, so -% that's we do). - -% double active backslashes. -% -{\catcode`\@=0 \catcode`\\=\active - @gdef@activebackslash{@catcode`@\=@active @otherbackslash} - @gdef@activebackslashdouble{% - @catcode@backChar=@active - @let\=@doublebackslash} -} - -% To handle parens, we must adopt a different approach, since parens are -% not active characters. hyperref.dtx (which has the same problem as -% us) handles it with this amazing macro to replace tokens. I've -% tinkered with it a little for texinfo, but it's definitely from there. -% -% #1 is the tokens to replace. -% #2 is the replacement. -% #3 is the control sequence with the string. -% -\def\HyPsdSubst#1#2#3{% - \def\HyPsdReplace##1#1##2\END{% - ##1% - \ifx\\##2\\% - \else - #2% - \HyReturnAfterFi{% - \HyPsdReplace##2\END - }% - \fi - }% - \xdef#3{\expandafter\HyPsdReplace#3#1\END}% -} -\long\def\HyReturnAfterFi#1\fi{\fi#1} - -% #1 is a control sequence in which to do the replacements. -\def\backslashparens#1{% - \xdef#1{#1}% redefine it as its expansion; the definition is simply - % \lastnode when called from \setref -> \pdfmkdest. - \HyPsdSubst{(}{\backslashlparen}{#1}% - \HyPsdSubst{)}{\backslashrparen}{#1}% -} - -{\catcode\exclamChar = 0 \catcode\backChar = \other - !gdef!backslashlparen{\(}% - !gdef!backslashrparen{\)}% -} - -\ifpdf - \input pdfcolor - \pdfcatalog{/PageMode /UseOutlines}% - \def\dopdfimage#1#2#3{% - \def\imagewidth{#2}% - \def\imageheight{#3}% - % without \immediate, pdftex seg faults when the same image is - % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) - \ifnum\pdftexversion < 14 - \immediate\pdfimage - \else - \immediate\pdfximage - \fi - \ifx\empty\imagewidth\else width \imagewidth \fi - \ifx\empty\imageheight\else height \imageheight \fi - \ifnum\pdftexversion<13 - #1.pdf% - \else - {#1.pdf}% - \fi - \ifnum\pdftexversion < 14 \else - \pdfrefximage \pdflastximage - \fi} - \def\pdfmkdest#1{{% - % We have to set dummies so commands such as @code, and characters - % such as \, aren't expanded when present in a section title. - \atdummies - \activebackslashdouble - \def\pdfdestname{#1}% - \backslashparens\pdfdestname - \pdfdest name{\pdfdestname} xyz% - }}% - % - % used to mark target names; must be expandable. - \def\pdfmkpgn#1{#1}% - % - \let\linkcolor = \Blue % was Cyan, but that seems light? - \def\endlink{\Black\pdfendlink} - % Adding outlines to PDF; macros for calculating structure of outlines - % come from Petr Olsak - \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% - \else \csname#1\endcsname \fi} - \def\advancenumber#1{\tempnum=\expnumber{#1}\relax - \advance\tempnum by 1 - \expandafter\xdef\csname#1\endcsname{\the\tempnum}} - % - % #1 is the section text, which is what will be displayed in the - % outline by the pdf viewer. #2 is the pdf expression for the number - % of subentries (or empty, for subsubsections). #3 is the node text, - % which might be empty if this toc entry had no corresponding node. - % #4 is the page number - % - \def\dopdfoutline#1#2#3#4{% - % Generate a link to the node text if that exists; else, use the - % page number. We could generate a destination for the section - % text in the case where a section has no node, but it doesn't - % seem worth the trouble, since most documents are normally structured. - \def\pdfoutlinedest{#3}% - \ifx\pdfoutlinedest\empty - \def\pdfoutlinedest{#4}% - \else - % Doubled backslashes in the name. - {\activebackslashdouble \xdef\pdfoutlinedest{#3}% - \backslashparens\pdfoutlinedest}% - \fi - % - % Also double the backslashes in the display string. - {\activebackslashdouble \xdef\pdfoutlinetext{#1}% - \backslashparens\pdfoutlinetext}% - % - \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% - } - % - \def\pdfmakeoutlines{% - \begingroup - % Thanh's hack / proper braces in bookmarks - \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace - \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace - % - % Read toc silently, to get counts of subentries for \pdfoutline. - \def\numchapentry##1##2##3##4{% - \def\thischapnum{##2}% - \def\thissecnum{0}% - \def\thissubsecnum{0}% - }% - \def\numsecentry##1##2##3##4{% - \advancenumber{chap\thischapnum}% - \def\thissecnum{##2}% - \def\thissubsecnum{0}% - }% - \def\numsubsecentry##1##2##3##4{% - \advancenumber{sec\thissecnum}% - \def\thissubsecnum{##2}% - }% - \def\numsubsubsecentry##1##2##3##4{% - \advancenumber{subsec\thissubsecnum}% - }% - \def\thischapnum{0}% - \def\thissecnum{0}% - \def\thissubsecnum{0}% - % - % use \def rather than \let here because we redefine \chapentry et - % al. a second time, below. - \def\appentry{\numchapentry}% - \def\appsecentry{\numsecentry}% - \def\appsubsecentry{\numsubsecentry}% - \def\appsubsubsecentry{\numsubsubsecentry}% - \def\unnchapentry{\numchapentry}% - \def\unnsecentry{\numsecentry}% - \def\unnsubsecentry{\numsubsecentry}% - \def\unnsubsubsecentry{\numsubsubsecentry}% - \readdatafile{toc}% - % - % Read toc second time, this time actually producing the outlines. - % The `-' means take the \expnumber as the absolute number of - % subentries, which we calculated on our first read of the .toc above. - % - % We use the node names as the destinations. - \def\numchapentry##1##2##3##4{% - \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% - \def\numsecentry##1##2##3##4{% - \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% - \def\numsubsecentry##1##2##3##4{% - \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% - \def\numsubsubsecentry##1##2##3##4{% count is always zero - \dopdfoutline{##1}{}{##3}{##4}}% - % - % PDF outlines are displayed using system fonts, instead of - % document fonts. Therefore we cannot use special characters, - % since the encoding is unknown. For example, the eogonek from - % Latin 2 (0xea) gets translated to a | character. Info from - % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. - % - % xx to do this right, we have to translate 8-bit characters to - % their "best" equivalent, based on the @documentencoding. Right - % now, I guess we'll just let the pdf reader have its way. - \indexnofonts - \setupdatafile - \activebackslash - \input \jobname.toc - \endgroup - } - % - \def\skipspaces#1{\def\PP{#1}\def\D{|}% - \ifx\PP\D\let\nextsp\relax - \else\let\nextsp\skipspaces - \ifx\p\space\else\addtokens{\filename}{\PP}% - \advance\filenamelength by 1 - \fi - \fi - \nextsp} - \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} - \ifnum\pdftexversion < 14 - \let \startlink \pdfannotlink - \else - \let \startlink \pdfstartlink - \fi - \def\pdfurl#1{% - \begingroup - \normalturnoffactive\def\@{@}% - \makevalueexpandable - \leavevmode\Red - \startlink attr{/Border [0 0 0]}% - user{/Subtype /Link /A << /S /URI /URI (#1) >>}% - \endgroup} - \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} - \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} - \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} - \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} - \def\maketoks{% - \expandafter\poptoks\the\toksA|ENDTOKS|\relax - \ifx\first0\adn0 - \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 - \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 - \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 - \else - \ifnum0=\countA\else\makelink\fi - \ifx\first.\let\next=\done\else - \let\next=\maketoks - \addtokens{\toksB}{\the\toksD} - \ifx\first,\addtokens{\toksB}{\space}\fi - \fi - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi - \next} - \def\makelink{\addtokens{\toksB}% - {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} - \def\pdflink#1{% - \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} - \linkcolor #1\endlink} - \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} -\else - \let\pdfmkdest = \gobble - \let\pdfurl = \gobble - \let\endlink = \relax - \let\linkcolor = \relax - \let\pdfmakeoutlines = \relax -\fi % \ifx\pdfoutput - - -\message{fonts,} - -% Change the current font style to #1, remembering it in \curfontstyle. -% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in -% italics, not bold italics. -% -\def\setfontstyle#1{% - \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. - \csname ten#1\endcsname % change the current font -} - -% Select #1 fonts with the current style. -% -\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} - -\def\rm{\fam=0 \setfontstyle{rm}} -\def\it{\fam=\itfam \setfontstyle{it}} -\def\sl{\fam=\slfam \setfontstyle{sl}} -\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} -\def\tt{\fam=\ttfam \setfontstyle{tt}} - -% Texinfo sort of supports the sans serif font style, which plain TeX does not. -% So we set up a \sf. -\newfam\sffam -\def\sf{\fam=\sffam \setfontstyle{sf}} -\let\li = \sf % Sometimes we call it \li, not \sf. - -% We don't need math for this font style. -\def\ttsl{\setfontstyle{ttsl}} - -% Default leading. -\newdimen\textleading \textleading = 13.2pt - -% Set the baselineskip to #1, and the lineskip and strut size -% correspondingly. There is no deep meaning behind these magic numbers -% used as factors; they just match (closely enough) what Knuth defined. -% -\def\lineskipfactor{.08333} -\def\strutheightpercent{.70833} -\def\strutdepthpercent {.29167} -% -\def\setleading#1{% - \normalbaselineskip = #1\relax - \normallineskip = \lineskipfactor\normalbaselineskip - \normalbaselines - \setbox\strutbox =\hbox{% - \vrule width0pt height\strutheightpercent\baselineskip - depth \strutdepthpercent \baselineskip - }% -} - -% Set the font macro #1 to the font named #2, adding on the -% specified font prefix (normally `cm'). -% #3 is the font's design size, #4 is a scale factor -\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4} - -% Use cm as the default font prefix. -% To specify the font prefix, you must define \fontprefix -% before you read in texinfo.tex. -\ifx\fontprefix\undefined -\def\fontprefix{cm} -\fi -% Support font families that don't use the same naming scheme as CM. -\def\rmshape{r} -\def\rmbshape{bx} %where the normal face is bold -\def\bfshape{b} -\def\bxshape{bx} -\def\ttshape{tt} -\def\ttbshape{tt} -\def\ttslshape{sltt} -\def\itshape{ti} -\def\itbshape{bxti} -\def\slshape{sl} -\def\slbshape{bxsl} -\def\sfshape{ss} -\def\sfbshape{ss} -\def\scshape{csc} -\def\scbshape{csc} - -% Text fonts (11.2pt, magstep1). -\def\textnominalsize{11pt} -\edef\mainmagstep{\magstephalf} -\setfont\textrm\rmshape{10}{\mainmagstep} -\setfont\texttt\ttshape{10}{\mainmagstep} -\setfont\textbf\bfshape{10}{\mainmagstep} -\setfont\textit\itshape{10}{\mainmagstep} -\setfont\textsl\slshape{10}{\mainmagstep} -\setfont\textsf\sfshape{10}{\mainmagstep} -\setfont\textsc\scshape{10}{\mainmagstep} -\setfont\textttsl\ttslshape{10}{\mainmagstep} -\font\texti=cmmi10 scaled \mainmagstep -\font\textsy=cmsy10 scaled \mainmagstep - -% A few fonts for @defun names and args. -\setfont\defbf\bfshape{10}{\magstep1} -\setfont\deftt\ttshape{10}{\magstep1} -\setfont\defttsl\ttslshape{10}{\magstep1} -\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} - -% Fonts for indices, footnotes, small examples (9pt). -\def\smallnominalsize{9pt} -\setfont\smallrm\rmshape{9}{1000} -\setfont\smalltt\ttshape{9}{1000} -\setfont\smallbf\bfshape{10}{900} -\setfont\smallit\itshape{9}{1000} -\setfont\smallsl\slshape{9}{1000} -\setfont\smallsf\sfshape{9}{1000} -\setfont\smallsc\scshape{10}{900} -\setfont\smallttsl\ttslshape{10}{900} -\font\smalli=cmmi9 -\font\smallsy=cmsy9 - -% Fonts for small examples (8pt). -\def\smallernominalsize{8pt} -\setfont\smallerrm\rmshape{8}{1000} -\setfont\smallertt\ttshape{8}{1000} -\setfont\smallerbf\bfshape{10}{800} -\setfont\smallerit\itshape{8}{1000} -\setfont\smallersl\slshape{8}{1000} -\setfont\smallersf\sfshape{8}{1000} -\setfont\smallersc\scshape{10}{800} -\setfont\smallerttsl\ttslshape{10}{800} -\font\smalleri=cmmi8 -\font\smallersy=cmsy8 - -% Fonts for title page (20.4pt): -\def\titlenominalsize{20pt} -\setfont\titlerm\rmbshape{12}{\magstep3} -\setfont\titleit\itbshape{10}{\magstep4} -\setfont\titlesl\slbshape{10}{\magstep4} -\setfont\titlett\ttbshape{12}{\magstep3} -\setfont\titlettsl\ttslshape{10}{\magstep4} -\setfont\titlesf\sfbshape{17}{\magstep1} -\let\titlebf=\titlerm -\setfont\titlesc\scbshape{10}{\magstep4} -\font\titlei=cmmi12 scaled \magstep3 -\font\titlesy=cmsy10 scaled \magstep4 -\def\authorrm{\secrm} -\def\authortt{\sectt} - -% Chapter (and unnumbered) fonts (17.28pt). -\def\chapnominalsize{17pt} -\setfont\chaprm\rmbshape{12}{\magstep2} -\setfont\chapit\itbshape{10}{\magstep3} -\setfont\chapsl\slbshape{10}{\magstep3} -\setfont\chaptt\ttbshape{12}{\magstep2} -\setfont\chapttsl\ttslshape{10}{\magstep3} -\setfont\chapsf\sfbshape{17}{1000} -\let\chapbf=\chaprm -\setfont\chapsc\scbshape{10}{\magstep3} -\font\chapi=cmmi12 scaled \magstep2 -\font\chapsy=cmsy10 scaled \magstep3 - -% Section fonts (14.4pt). -\def\secnominalsize{14pt} -\setfont\secrm\rmbshape{12}{\magstep1} -\setfont\secit\itbshape{10}{\magstep2} -\setfont\secsl\slbshape{10}{\magstep2} -\setfont\sectt\ttbshape{12}{\magstep1} -\setfont\secttsl\ttslshape{10}{\magstep2} -\setfont\secsf\sfbshape{12}{\magstep1} -\let\secbf\secrm -\setfont\secsc\scbshape{10}{\magstep2} -\font\seci=cmmi12 scaled \magstep1 -\font\secsy=cmsy10 scaled \magstep2 - -% Subsection fonts (13.15pt). -\def\ssecnominalsize{13pt} -\setfont\ssecrm\rmbshape{12}{\magstephalf} -\setfont\ssecit\itbshape{10}{1315} -\setfont\ssecsl\slbshape{10}{1315} -\setfont\ssectt\ttbshape{12}{\magstephalf} -\setfont\ssecttsl\ttslshape{10}{1315} -\setfont\ssecsf\sfbshape{12}{\magstephalf} -\let\ssecbf\ssecrm -\setfont\ssecsc\scbshape{10}{1315} -\font\sseci=cmmi12 scaled \magstephalf -\font\ssecsy=cmsy10 scaled 1315 - -% Reduced fonts for @acro in text (10pt). -\def\reducednominalsize{10pt} -\setfont\reducedrm\rmshape{10}{1000} -\setfont\reducedtt\ttshape{10}{1000} -\setfont\reducedbf\bfshape{10}{1000} -\setfont\reducedit\itshape{10}{1000} -\setfont\reducedsl\slshape{10}{1000} -\setfont\reducedsf\sfshape{10}{1000} -\setfont\reducedsc\scshape{10}{1000} -\setfont\reducedttsl\ttslshape{10}{1000} -\font\reducedi=cmmi10 -\font\reducedsy=cmsy10 - -% In order for the font changes to affect most math symbols and letters, -% we have to define the \textfont of the standard families. Since -% texinfo doesn't allow for producing subscripts and superscripts except -% in the main text, we don't bother to reset \scriptfont and -% \scriptscriptfont (which would also require loading a lot more fonts). -% -\def\resetmathfonts{% - \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy - \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf - \textfont\ttfam=\tentt \textfont\sffam=\tensf -} - -% The font-changing commands redefine the meanings of \tenSTYLE, instead -% of just \STYLE. We do this because \STYLE needs to also set the -% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire -% \tenSTYLE to set the current font. -% -% Each font-changing command also sets the names \lsize (one size lower) -% and \lllsize (three sizes lower). These relative commands are used in -% the LaTeX logo and acronyms. -% -% This all needs generalizing, badly. -% -\def\textfonts{% - \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl - \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc - \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy - \let\tenttsl=\textttsl - \def\curfontsize{text}% - \def\lsize{reduced}\def\lllsize{smaller}% - \resetmathfonts \setleading{\textleading}} -\def\titlefonts{% - \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl - \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc - \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy - \let\tenttsl=\titlettsl - \def\curfontsize{title}% - \def\lsize{chap}\def\lllsize{subsec}% - \resetmathfonts \setleading{25pt}} -\def\titlefont#1{{\titlefonts\rm #1}} -\def\chapfonts{% - \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl - \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc - \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy - \let\tenttsl=\chapttsl - \def\curfontsize{chap}% - \def\lsize{sec}\def\lllsize{text}% - \resetmathfonts \setleading{19pt}} -\def\secfonts{% - \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl - \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc - \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy - \let\tenttsl=\secttsl - \def\curfontsize{sec}% - \def\lsize{subsec}\def\lllsize{reduced}% - \resetmathfonts \setleading{16pt}} -\def\subsecfonts{% - \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl - \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc - \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy - \let\tenttsl=\ssecttsl - \def\curfontsize{ssec}% - \def\lsize{text}\def\lllsize{small}% - \resetmathfonts \setleading{15pt}} -\let\subsubsecfonts = \subsecfonts -\def\reducedfonts{% - \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl - \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc - \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy - \let\tenttsl=\reducedttsl - \def\curfontsize{reduced}% - \def\lsize{small}\def\lllsize{smaller}% - \resetmathfonts \setleading{10.5pt}} -\def\smallfonts{% - \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl - \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc - \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy - \let\tenttsl=\smallttsl - \def\curfontsize{small}% - \def\lsize{smaller}\def\lllsize{smaller}% - \resetmathfonts \setleading{10.5pt}} -\def\smallerfonts{% - \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl - \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc - \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy - \let\tenttsl=\smallerttsl - \def\curfontsize{smaller}% - \def\lsize{smaller}\def\lllsize{smaller}% - \resetmathfonts \setleading{9.5pt}} - -% Set the fonts to use with the @small... environments. -\let\smallexamplefonts = \smallfonts - -% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample -% can fit this many characters: -% 8.5x11=86 smallbook=72 a4=90 a5=69 -% If we use \scriptfonts (8pt), then we can fit this many characters: -% 8.5x11=90+ smallbook=80 a4=90+ a5=77 -% For me, subjectively, the few extra characters that fit aren't worth -% the additional smallness of 8pt. So I'm making the default 9pt. -% -% By the way, for comparison, here's what fits with @example (10pt): -% 8.5x11=71 smallbook=60 a4=75 a5=58 -% -% I wish the USA used A4 paper. -% --karl, 24jan03. - - -% Set up the default fonts, so we can use them for creating boxes. -% -\textfonts \rm - -% Define these so they can be easily changed for other fonts. -\def\angleleft{$\langle$} -\def\angleright{$\rangle$} - -% Count depth in font-changes, for error checks -\newcount\fontdepth \fontdepth=0 - -% Fonts for short table of contents. -\setfont\shortcontrm\rmshape{12}{1000} -\setfont\shortcontbf\bfshape{10}{\magstep1} % no cmb12 -\setfont\shortcontsl\slshape{12}{1000} -\setfont\shortconttt\ttshape{12}{1000} - -%% Add scribe-like font environments, plus @l for inline lisp (usually sans -%% serif) and @ii for TeX italic - -% \smartitalic{ARG} outputs arg in italics, followed by an italic correction -% unless the following character is such as not to need one. -\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else - \ptexslash\fi\fi\fi} -\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} -\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} - -% like \smartslanted except unconditionally uses \ttsl. -% @var is set to this for defun arguments. -\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx} - -% like \smartslanted except unconditionally use \sl. We never want -% ttsl for book titles, do we? -\def\cite#1{{\sl #1}\futurelet\next\smartitalicx} - -\let\i=\smartitalic -\let\slanted=\smartslanted -\let\var=\smartslanted -\let\dfn=\smartslanted -\let\emph=\smartitalic - -% @b, explicit bold. -\def\b#1{{\bf #1}} -\let\strong=\b - -% @sansserif, explicit sans. -\def\sansserif#1{{\sf #1}} - -% We can't just use \exhyphenpenalty, because that only has effect at -% the end of a paragraph. Restore normal hyphenation at the end of the -% group within which \nohyphenation is presumably called. -% -\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} -\def\restorehyphenation{\hyphenchar\font = `- } - -% Set sfcode to normal for the chars that usually have another value. -% Can't use plain's \frenchspacing because it uses the `\x notation, and -% sometimes \x has an active definition that messes things up. -% -\catcode`@=11 - \def\plainfrenchspacing{% - \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m - \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m - \def\endofsentencespacefactor{1000}% for @. and friends - } - \def\plainnonfrenchspacing{% - \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 - \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 - \def\endofsentencespacefactor{3000}% for @. and friends - } -\catcode`@=\other -\def\endofsentencespacefactor{3000}% default - -\def\t#1{% - {\tt \rawbackslash \plainfrenchspacing #1}% - \null -} -\def\samp#1{`\tclose{#1}'\null} -\setfont\keyrm\rmshape{8}{1000} -\font\keysy=cmsy9 -\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% - \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% - \vbox{\hrule\kern-0.4pt - \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% - \kern-0.4pt\hrule}% - \kern-.06em\raise0.4pt\hbox{\angleright}}}} -% The old definition, with no lozenge: -%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} -\def\ctrl #1{{\tt \rawbackslash \hat}#1} - -% @file, @option are the same as @samp. -\let\file=\samp -\let\option=\samp - -% @code is a modification of @t, -% which makes spaces the same size as normal in the surrounding text. -\def\tclose#1{% - {% - % Change normal interword space to be same as for the current font. - \spaceskip = \fontdimen2\font - % - % Switch to typewriter. - \tt - % - % But `\ ' produces the large typewriter interword space. - \def\ {{\spaceskip = 0pt{} }}% - % - % Turn off hyphenation. - \nohyphenation - % - \rawbackslash - \plainfrenchspacing - #1% - }% - \null -} - -% We *must* turn on hyphenation at `-' and `_' in @code. -% Otherwise, it is too hard to avoid overfull hboxes -% in the Emacs manual, the Library manual, etc. - -% Unfortunately, TeX uses one parameter (\hyphenchar) to control -% both hyphenation at - and hyphenation within words. -% We must therefore turn them both off (\tclose does that) -% and arrange explicitly to hyphenate at a dash. -% -- rms. -{ - \catcode`\-=\active - \catcode`\_=\active - % - \global\def\code{\begingroup - \catcode`\-=\active \catcode`\_=\active - \ifallowcodebreaks - \let-\codedash - \let_\codeunder - \else - \let-\realdash - \let_\realunder - \fi - \codex - } -} - -\def\realdash{-} -\def\codedash{-\discretionary{}{}{}} -\def\codeunder{% - % this is all so @math{@code{var_name}+1} can work. In math mode, _ - % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) - % will therefore expand the active definition of _, which is us - % (inside @code that is), therefore an endless loop. - \ifusingtt{\ifmmode - \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. - \else\normalunderscore \fi - \discretionary{}{}{}}% - {\_}% -} -\def\codex #1{\tclose{#1}\endgroup} - -% An additional complication: the above will allow breaks after, e.g., -% each of the four underscores in __typeof__. This is undesirable in -% some manuals, especially if they don't have long identifiers in -% general. @allowcodebreaks provides a way to control this. -% -\newif\ifallowcodebreaks \allowcodebreakstrue - -\def\keywordtrue{true} -\def\keywordfalse{false} - -\parseargdef\allowcodebreaks{% - \def\txiarg{#1}% - \ifx\txiarg\keywordtrue - \allowcodebreakstrue - \else\ifx\txiarg\keywordfalse - \allowcodebreaksfalse - \else - \errhelp = \EMsimple - \errmessage{Unknown @allowcodebreaks option `\txiarg'}% - \fi\fi -} - -% @kbd is like @code, except that if the argument is just one @key command, -% then @kbd has no effect. - -% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), -% `example' (@kbd uses ttsl only inside of @example and friends), -% or `code' (@kbd uses normal tty font always). -\parseargdef\kbdinputstyle{% - \def\txiarg{#1}% - \ifx\txiarg\worddistinct - \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% - \else\ifx\txiarg\wordexample - \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% - \else\ifx\txiarg\wordcode - \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% - \else - \errhelp = \EMsimple - \errmessage{Unknown @kbdinputstyle option `\txiarg'}% - \fi\fi\fi -} -\def\worddistinct{distinct} -\def\wordexample{example} -\def\wordcode{code} - -% Default is `distinct.' -\kbdinputstyle distinct - -\def\xkey{\key} -\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% -\ifx\one\xkey\ifx\threex\three \key{#2}% -\else{\tclose{\kbdfont\look}}\fi -\else{\tclose{\kbdfont\look}}\fi} - -% For @indicateurl, @env, @command quotes seem unnecessary, so use \code. -\let\indicateurl=\code -\let\env=\code -\let\command=\code - -% @uref (abbreviation for `urlref') takes an optional (comma-separated) -% second argument specifying the text to display and an optional third -% arg as text to display instead of (rather than in addition to) the url -% itself. First (mandatory) arg is the url. Perhaps eventually put in -% a hypertex \special here. -% -\def\uref#1{\douref #1,,,\finish} -\def\douref#1,#2,#3,#4\finish{\begingroup - \unsepspaces - \pdfurl{#1}% - \setbox0 = \hbox{\ignorespaces #3}% - \ifdim\wd0 > 0pt - \unhbox0 % third arg given, show only that - \else - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0 > 0pt - \ifpdf - \unhbox0 % PDF: 2nd arg given, show only it - \else - \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url - \fi - \else - \code{#1}% only url given, so show it - \fi - \fi - \endlink -\endgroup} - -% @url synonym for @uref, since that's how everyone uses it. -% -\let\url=\uref - -% rms does not like angle brackets --karl, 17may97. -% So now @email is just like @uref, unless we are pdf. -% -%\def\email#1{\angleleft{\tt #1}\angleright} -\ifpdf - \def\email#1{\doemail#1,,\finish} - \def\doemail#1,#2,#3\finish{\begingroup - \unsepspaces - \pdfurl{mailto:#1}% - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi - \endlink - \endgroup} -\else - \let\email=\uref -\fi - -% Check if we are currently using a typewriter font. Since all the -% Computer Modern typewriter fonts have zero interword stretch (and -% shrink), and it is reasonable to expect all typewriter fonts to have -% this property, we can check that font parameter. -% -\def\ifmonospace{\ifdim\fontdimen3\font=0pt } - -% Typeset a dimension, e.g., `in' or `pt'. The only reason for the -% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. -% -\def\dmn#1{\thinspace #1} - -\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} - -% @l was never documented to mean ``switch to the Lisp font'', -% and it is not used as such in any manual I can find. We need it for -% Polish suppressed-l. --karl, 22sep96. -%\def\l#1{{\li #1}\null} - -% Explicit font changes: @r, @sc, undocumented @ii. -\def\r#1{{\rm #1}} % roman font -\def\sc#1{{\smallcaps#1}} % smallcaps font -\def\ii#1{{\it #1}} % italic font - -% @acronym for "FBI", "NATO", and the like. -% We print this one point size smaller, since it's intended for -% all-uppercase. -% -\def\acronym#1{\doacronym #1,,\finish} -\def\doacronym#1,#2,#3\finish{% - {\selectfonts\lsize #1}% - \def\temp{#2}% - \ifx\temp\empty \else - \space ({\unsepspaces \ignorespaces \temp \unskip})% - \fi -} - -% @abbr for "Comput. J." and the like. -% No font change, but don't do end-of-sentence spacing. -% -\def\abbr#1{\doabbr #1,,\finish} -\def\doabbr#1,#2,#3\finish{% - {\plainfrenchspacing #1}% - \def\temp{#2}% - \ifx\temp\empty \else - \space ({\unsepspaces \ignorespaces \temp \unskip})% - \fi -} - -% @pounds{} is a sterling sign, which Knuth put in the CM italic font. -% -\def\pounds{{\it\$}} - -% @euro{} comes from a separate font, depending on the current style. -% We use the free feym* fonts from the eurosym package by Henrik -% Theiling, which support regular, slanted, bold and bold slanted (and -% "outlined" (blackboard board, sort of) versions, which we don't need). -% It is available from http://www.ctan.org/tex-archive/fonts/eurosym. -% -% Although only regular is the truly official Euro symbol, we ignore -% that. The Euro is designed to be slightly taller than the regular -% font height. -% -% feymr - regular -% feymo - slanted -% feybr - bold -% feybo - bold slanted -% -% There is no good (free) typewriter version, to my knowledge. -% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. -% Hmm. -% -% Also doesn't work in math. Do we need to do math with euro symbols? -% Hope not. -% -% -\def\euro{{\eurofont e}} -\def\eurofont{% - % We set the font at each command, rather than predefining it in - % \textfonts and the other font-switching commands, so that - % installations which never need the symbol don't have to have the - % font installed. - % - % There is only one designed size (nominal 10pt), so we always scale - % that to the current nominal size. - % - % By the way, simply using "at 1em" works for cmr10 and the like, but - % does not work for cmbx10 and other extended/shrunken fonts. - % - \def\eurosize{\csname\curfontsize nominalsize\endcsname}% - % - \ifx\curfontstyle\bfstylename - % bold: - \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize - \else - % regular: - \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize - \fi - \thiseurofont -} - -% @registeredsymbol - R in a circle. The font for the R should really -% be smaller yet, but lllsize is the best we can do for now. -% Adapted from the plain.tex definition of \copyright. -% -\def\registeredsymbol{% - $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% - \hfil\crcr\Orb}}% - }$% -} - -% Laurent Siebenmann reports \Orb undefined with: -% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 -% so we'll define it if necessary. -% -\ifx\Orb\undefined -\def\Orb{\mathhexbox20D} -\fi - - -\message{page headings,} - -\newskip\titlepagetopglue \titlepagetopglue = 1.5in -\newskip\titlepagebottomglue \titlepagebottomglue = 2pc - -% First the title page. Must do @settitle before @titlepage. -\newif\ifseenauthor -\newif\iffinishedtitlepage - -% Do an implicit @contents or @shortcontents after @end titlepage if the -% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. -% -\newif\ifsetcontentsaftertitlepage - \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue -\newif\ifsetshortcontentsaftertitlepage - \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue - -\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% - \endgroup\page\hbox{}\page} - -\envdef\titlepage{% - % Open one extra group, as we want to close it in the middle of \Etitlepage. - \begingroup - \parindent=0pt \textfonts - % Leave some space at the very top of the page. - \vglue\titlepagetopglue - % No rule at page bottom unless we print one at the top with @title. - \finishedtitlepagetrue - % - % Most title ``pages'' are actually two pages long, with space - % at the top of the second. We don't want the ragged left on the second. - \let\oldpage = \page - \def\page{% - \iffinishedtitlepage\else - \finishtitlepage - \fi - \let\page = \oldpage - \page - \null - }% -} - -\def\Etitlepage{% - \iffinishedtitlepage\else - \finishtitlepage - \fi - % It is important to do the page break before ending the group, - % because the headline and footline are only empty inside the group. - % If we use the new definition of \page, we always get a blank page - % after the title page, which we certainly don't want. - \oldpage - \endgroup - % - % Need this before the \...aftertitlepage checks so that if they are - % in effect the toc pages will come out with page numbers. - \HEADINGSon - % - % If they want short, they certainly want long too. - \ifsetshortcontentsaftertitlepage - \shortcontents - \contents - \global\let\shortcontents = \relax - \global\let\contents = \relax - \fi - % - \ifsetcontentsaftertitlepage - \contents - \global\let\contents = \relax - \global\let\shortcontents = \relax - \fi -} - -\def\finishtitlepage{% - \vskip4pt \hrule height 2pt width \hsize - \vskip\titlepagebottomglue - \finishedtitlepagetrue -} - -%%% Macros to be used within @titlepage: - -\let\subtitlerm=\tenrm -\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} - -\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines - \let\tt=\authortt} - -\parseargdef\title{% - \checkenv\titlepage - \leftline{\titlefonts\rm #1} - % print a rule at the page bottom also. - \finishedtitlepagefalse - \vskip4pt \hrule height 4pt width \hsize \vskip4pt -} - -\parseargdef\subtitle{% - \checkenv\titlepage - {\subtitlefont \rightline{#1}}% -} - -% @author should come last, but may come many times. -% It can also be used inside @quotation. -% -\parseargdef\author{% - \def\temp{\quotation}% - \ifx\thisenv\temp - \def\quotationauthor{#1}% printed in \Equotation. - \else - \checkenv\titlepage - \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi - {\authorfont \leftline{#1}}% - \fi -} - - -%%% Set up page headings and footings. - -\let\thispage=\folio - -\newtoks\evenheadline % headline on even pages -\newtoks\oddheadline % headline on odd pages -\newtoks\evenfootline % footline on even pages -\newtoks\oddfootline % footline on odd pages - -% Now make TeX use those variables -\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline - \else \the\evenheadline \fi}} -\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline - \else \the\evenfootline \fi}\HEADINGShook} -\let\HEADINGShook=\relax - -% Commands to set those variables. -% For example, this is what @headings on does -% @evenheading @thistitle|@thispage|@thischapter -% @oddheading @thischapter|@thispage|@thistitle -% @evenfooting @thisfile|| -% @oddfooting ||@thisfile - - -\def\evenheading{\parsearg\evenheadingxxx} -\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} -\def\evenheadingyyy #1\|#2\|#3\|#4\finish{% -\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\def\oddheading{\parsearg\oddheadingxxx} -\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} -\def\oddheadingyyy #1\|#2\|#3\|#4\finish{% -\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% - -\def\evenfooting{\parsearg\evenfootingxxx} -\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} -\def\evenfootingyyy #1\|#2\|#3\|#4\finish{% -\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\def\oddfooting{\parsearg\oddfootingxxx} -\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} -\def\oddfootingyyy #1\|#2\|#3\|#4\finish{% - \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% - % - % Leave some space for the footline. Hopefully ok to assume - % @evenfooting will not be used by itself. - \global\advance\pageheight by -\baselineskip - \global\advance\vsize by -\baselineskip -} - -\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} - - -% @headings double turns headings on for double-sided printing. -% @headings single turns headings on for single-sided printing. -% @headings off turns them off. -% @headings on same as @headings double, retained for compatibility. -% @headings after turns on double-sided headings after this page. -% @headings doubleafter turns on double-sided headings after this page. -% @headings singleafter turns on single-sided headings after this page. -% By default, they are off at the start of a document, -% and turned `on' after @end titlepage. - -\def\headings #1 {\csname HEADINGS#1\endcsname} - -\def\HEADINGSoff{% -\global\evenheadline={\hfil} \global\evenfootline={\hfil} -\global\oddheadline={\hfil} \global\oddfootline={\hfil}} -\HEADINGSoff -% When we turn headings on, set the page number to 1. -% For double-sided printing, put current file name in lower left corner, -% chapter name on inside top of right hand pages, document -% title on inside top of left hand pages, and page numbers on outside top -% edge of all pages. -\def\HEADINGSdouble{% -\global\pageno=1 -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\folio\hfil\thistitle}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chapoddpage -} -\let\contentsalignmacro = \chappager - -% For single-sided printing, chapter title goes across top left of page, -% page number on top right. -\def\HEADINGSsingle{% -\global\pageno=1 -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\thischapter\hfil\folio}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chappager -} -\def\HEADINGSon{\HEADINGSdouble} - -\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} -\let\HEADINGSdoubleafter=\HEADINGSafter -\def\HEADINGSdoublex{% -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\folio\hfil\thistitle}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chapoddpage -} - -\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} -\def\HEADINGSsinglex{% -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\thischapter\hfil\folio}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chappager -} - -% Subroutines used in generating headings -% This produces Day Month Year style of output. -% Only define if not already defined, in case a txi-??.tex file has set -% up a different format (e.g., txi-cs.tex does this). -\ifx\today\undefined -\def\today{% - \number\day\space - \ifcase\month - \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr - \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug - \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec - \fi - \space\number\year} -\fi - -% @settitle line... specifies the title of the document, for headings. -% It generates no output of its own. -\def\thistitle{\putwordNoTitle} -\def\settitle{\parsearg{\gdef\thistitle}} - - -\message{tables,} -% Tables -- @table, @ftable, @vtable, @item(x). - -% default indentation of table text -\newdimen\tableindent \tableindent=.8in -% default indentation of @itemize and @enumerate text -\newdimen\itemindent \itemindent=.3in -% margin between end of table item and start of table text. -\newdimen\itemmargin \itemmargin=.1in - -% used internally for \itemindent minus \itemmargin -\newdimen\itemmax - -% Note @table, @ftable, and @vtable define @item, @itemx, etc., with -% these defs. -% They also define \itemindex -% to index the item name in whatever manner is desired (perhaps none). - -\newif\ifitemxneedsnegativevskip - -\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} - -\def\internalBitem{\smallbreak \parsearg\itemzzz} -\def\internalBitemx{\itemxpar \parsearg\itemzzz} - -\def\itemzzz #1{\begingroup % - \advance\hsize by -\rightskip - \advance\hsize by -\tableindent - \setbox0=\hbox{\itemindicate{#1}}% - \itemindex{#1}% - \nobreak % This prevents a break before @itemx. - % - % If the item text does not fit in the space we have, put it on a line - % by itself, and do not allow a page break either before or after that - % line. We do not start a paragraph here because then if the next - % command is, e.g., @kindex, the whatsit would get put into the - % horizontal list on a line by itself, resulting in extra blank space. - \ifdim \wd0>\itemmax - % - % Make this a paragraph so we get the \parskip glue and wrapping, - % but leave it ragged-right. - \begingroup - \advance\leftskip by-\tableindent - \advance\hsize by\tableindent - \advance\rightskip by0pt plus1fil - \leavevmode\unhbox0\par - \endgroup - % - % We're going to be starting a paragraph, but we don't want the - % \parskip glue -- logically it's part of the @item we just started. - \nobreak \vskip-\parskip - % - % Stop a page break at the \parskip glue coming up. However, if - % what follows is an environment such as @example, there will be no - % \parskip glue; then the negative vskip we just inserted would - % cause the example and the item to crash together. So we use this - % bizarre value of 10001 as a signal to \aboveenvbreak to insert - % \parskip glue after all. Section titles are handled this way also. - % - \penalty 10001 - \endgroup - \itemxneedsnegativevskipfalse - \else - % The item text fits into the space. Start a paragraph, so that the - % following text (if any) will end up on the same line. - \noindent - % Do this with kerns and \unhbox so that if there is a footnote in - % the item text, it can migrate to the main vertical list and - % eventually be printed. - \nobreak\kern-\tableindent - \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 - \unhbox0 - \nobreak\kern\dimen0 - \endgroup - \itemxneedsnegativevskiptrue - \fi -} - -\def\item{\errmessage{@item while not in a list environment}} -\def\itemx{\errmessage{@itemx while not in a list environment}} - -% @table, @ftable, @vtable. -\envdef\table{% - \let\itemindex\gobble - \tablecheck{table}% -} -\envdef\ftable{% - \def\itemindex ##1{\doind {fn}{\code{##1}}}% - \tablecheck{ftable}% -} -\envdef\vtable{% - \def\itemindex ##1{\doind {vr}{\code{##1}}}% - \tablecheck{vtable}% -} -\def\tablecheck#1{% - \ifnum \the\catcode`\^^M=\active - \endgroup - \errmessage{This command won't work in this context; perhaps the problem is - that we are \inenvironment\thisenv}% - \def\next{\doignore{#1}}% - \else - \let\next\tablex - \fi - \next -} -\def\tablex#1{% - \def\itemindicate{#1}% - \parsearg\tabley -} -\def\tabley#1{% - {% - \makevalueexpandable - \edef\temp{\noexpand\tablez #1\space\space\space}% - \expandafter - }\temp \endtablez -} -\def\tablez #1 #2 #3 #4\endtablez{% - \aboveenvbreak - \ifnum 0#1>0 \advance \leftskip by #1\mil \fi - \ifnum 0#2>0 \tableindent=#2\mil \fi - \ifnum 0#3>0 \advance \rightskip by #3\mil \fi - \itemmax=\tableindent - \advance \itemmax by -\itemmargin - \advance \leftskip by \tableindent - \exdentamount=\tableindent - \parindent = 0pt - \parskip = \smallskipamount - \ifdim \parskip=0pt \parskip=2pt \fi - \let\item = \internalBitem - \let\itemx = \internalBitemx -} -\def\Etable{\endgraf\afterenvbreak} -\let\Eftable\Etable -\let\Evtable\Etable -\let\Eitemize\Etable -\let\Eenumerate\Etable - -% This is the counter used by @enumerate, which is really @itemize - -\newcount \itemno - -\envdef\itemize{\parsearg\doitemize} - -\def\doitemize#1{% - \aboveenvbreak - \itemmax=\itemindent - \advance\itemmax by -\itemmargin - \advance\leftskip by \itemindent - \exdentamount=\itemindent - \parindent=0pt - \parskip=\smallskipamount - \ifdim\parskip=0pt \parskip=2pt \fi - \def\itemcontents{#1}% - % @itemize with no arg is equivalent to @itemize @bullet. - \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi - \let\item=\itemizeitem -} - -% Definition of @item while inside @itemize and @enumerate. -% -\def\itemizeitem{% - \advance\itemno by 1 % for enumerations - {\let\par=\endgraf \smallbreak}% reasonable place to break - {% - % If the document has an @itemize directly after a section title, a - % \nobreak will be last on the list, and \sectionheading will have - % done a \vskip-\parskip. In that case, we don't want to zero - % parskip, or the item text will crash with the heading. On the - % other hand, when there is normal text preceding the item (as there - % usually is), we do want to zero parskip, or there would be too much - % space. In that case, we won't have a \nobreak before. At least - % that's the theory. - \ifnum\lastpenalty<10000 \parskip=0in \fi - \noindent - \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% - \vadjust{\penalty 1200}}% not good to break after first line of item. - \flushcr -} - -% \splitoff TOKENS\endmark defines \first to be the first token in -% TOKENS, and \rest to be the remainder. -% -\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% - -% Allow an optional argument of an uppercase letter, lowercase letter, -% or number, to specify the first label in the enumerated list. No -% argument is the same as `1'. -% -\envparseargdef\enumerate{\enumeratey #1 \endenumeratey} -\def\enumeratey #1 #2\endenumeratey{% - % If we were given no argument, pretend we were given `1'. - \def\thearg{#1}% - \ifx\thearg\empty \def\thearg{1}\fi - % - % Detect if the argument is a single token. If so, it might be a - % letter. Otherwise, the only valid thing it can be is a number. - % (We will always have one token, because of the test we just made. - % This is a good thing, since \splitoff doesn't work given nothing at - % all -- the first parameter is undelimited.) - \expandafter\splitoff\thearg\endmark - \ifx\rest\empty - % Only one token in the argument. It could still be anything. - % A ``lowercase letter'' is one whose \lccode is nonzero. - % An ``uppercase letter'' is one whose \lccode is both nonzero, and - % not equal to itself. - % Otherwise, we assume it's a number. - % - % We need the \relax at the end of the \ifnum lines to stop TeX from - % continuing to look for a . - % - \ifnum\lccode\expandafter`\thearg=0\relax - \numericenumerate % a number (we hope) - \else - % It's a letter. - \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax - \lowercaseenumerate % lowercase letter - \else - \uppercaseenumerate % uppercase letter - \fi - \fi - \else - % Multiple tokens in the argument. We hope it's a number. - \numericenumerate - \fi -} - -% An @enumerate whose labels are integers. The starting integer is -% given in \thearg. -% -\def\numericenumerate{% - \itemno = \thearg - \startenumeration{\the\itemno}% -} - -% The starting (lowercase) letter is in \thearg. -\def\lowercaseenumerate{% - \itemno = \expandafter`\thearg - \startenumeration{% - % Be sure we're not beyond the end of the alphabet. - \ifnum\itemno=0 - \errmessage{No more lowercase letters in @enumerate; get a bigger - alphabet}% - \fi - \char\lccode\itemno - }% -} - -% The starting (uppercase) letter is in \thearg. -\def\uppercaseenumerate{% - \itemno = \expandafter`\thearg - \startenumeration{% - % Be sure we're not beyond the end of the alphabet. - \ifnum\itemno=0 - \errmessage{No more uppercase letters in @enumerate; get a bigger - alphabet} - \fi - \char\uccode\itemno - }% -} - -% Call \doitemize, adding a period to the first argument and supplying the -% common last two arguments. Also subtract one from the initial value in -% \itemno, since @item increments \itemno. -% -\def\startenumeration#1{% - \advance\itemno by -1 - \doitemize{#1.}\flushcr -} - -% @alphaenumerate and @capsenumerate are abbreviations for giving an arg -% to @enumerate. -% -\def\alphaenumerate{\enumerate{a}} -\def\capsenumerate{\enumerate{A}} -\def\Ealphaenumerate{\Eenumerate} -\def\Ecapsenumerate{\Eenumerate} - - -% @multitable macros -% Amy Hendrickson, 8/18/94, 3/6/96 -% -% @multitable ... @end multitable will make as many columns as desired. -% Contents of each column will wrap at width given in preamble. Width -% can be specified either with sample text given in a template line, -% or in percent of \hsize, the current width of text on page. - -% Table can continue over pages but will only break between lines. - -% To make preamble: -% -% Either define widths of columns in terms of percent of \hsize: -% @multitable @columnfractions .25 .3 .45 -% @item ... -% -% Numbers following @columnfractions are the percent of the total -% current hsize to be used for each column. You may use as many -% columns as desired. - - -% Or use a template: -% @multitable {Column 1 template} {Column 2 template} {Column 3 template} -% @item ... -% using the widest term desired in each column. - -% Each new table line starts with @item, each subsequent new column -% starts with @tab. Empty columns may be produced by supplying @tab's -% with nothing between them for as many times as empty columns are needed, -% ie, @tab@tab@tab will produce two empty columns. - -% @item, @tab do not need to be on their own lines, but it will not hurt -% if they are. - -% Sample multitable: - -% @multitable {Column 1 template} {Column 2 template} {Column 3 template} -% @item first col stuff @tab second col stuff @tab third col -% @item -% first col stuff -% @tab -% second col stuff -% @tab -% third col -% @item first col stuff @tab second col stuff -% @tab Many paragraphs of text may be used in any column. -% -% They will wrap at the width determined by the template. -% @item@tab@tab This will be in third column. -% @end multitable - -% Default dimensions may be reset by user. -% @multitableparskip is vertical space between paragraphs in table. -% @multitableparindent is paragraph indent in table. -% @multitablecolmargin is horizontal space to be left between columns. -% @multitablelinespace is space to leave between table items, baseline -% to baseline. -% 0pt means it depends on current normal line spacing. -% -\newskip\multitableparskip -\newskip\multitableparindent -\newdimen\multitablecolspace -\newskip\multitablelinespace -\multitableparskip=0pt -\multitableparindent=6pt -\multitablecolspace=12pt -\multitablelinespace=0pt - -% Macros used to set up halign preamble: -% -\let\endsetuptable\relax -\def\xendsetuptable{\endsetuptable} -\let\columnfractions\relax -\def\xcolumnfractions{\columnfractions} -\newif\ifsetpercent - -% #1 is the @columnfraction, usually a decimal number like .5, but might -% be just 1. We just use it, whatever it is. -% -\def\pickupwholefraction#1 {% - \global\advance\colcount by 1 - \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% - \setuptable -} - -\newcount\colcount -\def\setuptable#1{% - \def\firstarg{#1}% - \ifx\firstarg\xendsetuptable - \let\go = \relax - \else - \ifx\firstarg\xcolumnfractions - \global\setpercenttrue - \else - \ifsetpercent - \let\go\pickupwholefraction - \else - \global\advance\colcount by 1 - \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a - % separator; typically that is always in the input, anyway. - \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% - \fi - \fi - \ifx\go\pickupwholefraction - % Put the argument back for the \pickupwholefraction call, so - % we'll always have a period there to be parsed. - \def\go{\pickupwholefraction#1}% - \else - \let\go = \setuptable - \fi% - \fi - \go -} - -% multitable-only commands. -% -% @headitem starts a heading row, which we typeset in bold. -% Assignments have to be global since we are inside the implicit group -% of an alignment entry. Note that \everycr resets \everytab. -\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}% -% -% A \tab used to include \hskip1sp. But then the space in a template -% line is not enough. That is bad. So let's go back to just `&' until -% we encounter the problem it was intended to solve again. -% --karl, nathan@acm.org, 20apr99. -\def\tab{\checkenv\multitable &\the\everytab}% - -% @multitable ... @end multitable definitions: -% -\newtoks\everytab % insert after every tab. -% -\envdef\multitable{% - \vskip\parskip - \startsavinginserts - % - % @item within a multitable starts a normal row. - % We use \def instead of \let so that if one of the multitable entries - % contains an @itemize, we don't choke on the \item (seen as \crcr aka - % \endtemplate) expanding \doitemize. - \def\item{\crcr}% - % - \tolerance=9500 - \hbadness=9500 - \setmultitablespacing - \parskip=\multitableparskip - \parindent=\multitableparindent - \overfullrule=0pt - \global\colcount=0 - % - \everycr = {% - \noalign{% - \global\everytab={}% - \global\colcount=0 % Reset the column counter. - % Check for saved footnotes, etc. - \checkinserts - % Keeps underfull box messages off when table breaks over pages. - %\filbreak - % Maybe so, but it also creates really weird page breaks when the - % table breaks over pages. Wouldn't \vfil be better? Wait until the - % problem manifests itself, so it can be fixed for real --karl. - }% - }% - % - \parsearg\domultitable -} -\def\domultitable#1{% - % To parse everything between @multitable and @item: - \setuptable#1 \endsetuptable - % - % This preamble sets up a generic column definition, which will - % be used as many times as user calls for columns. - % \vtop will set a single line and will also let text wrap and - % continue for many paragraphs if desired. - \halign\bgroup &% - \global\advance\colcount by 1 - \multistrut - \vtop{% - % Use the current \colcount to find the correct column width: - \hsize=\expandafter\csname col\the\colcount\endcsname - % - % In order to keep entries from bumping into each other - % we will add a \leftskip of \multitablecolspace to all columns after - % the first one. - % - % If a template has been used, we will add \multitablecolspace - % to the width of each template entry. - % - % If the user has set preamble in terms of percent of \hsize we will - % use that dimension as the width of the column, and the \leftskip - % will keep entries from bumping into each other. Table will start at - % left margin and final column will justify at right margin. - % - % Make sure we don't inherit \rightskip from the outer environment. - \rightskip=0pt - \ifnum\colcount=1 - % The first column will be indented with the surrounding text. - \advance\hsize by\leftskip - \else - \ifsetpercent \else - % If user has not set preamble in terms of percent of \hsize - % we will advance \hsize by \multitablecolspace. - \advance\hsize by \multitablecolspace - \fi - % In either case we will make \leftskip=\multitablecolspace: - \leftskip=\multitablecolspace - \fi - % Ignoring space at the beginning and end avoids an occasional spurious - % blank line, when TeX decides to break the line at the space before the - % box from the multistrut, so the strut ends up on a line by itself. - % For example: - % @multitable @columnfractions .11 .89 - % @item @code{#} - % @tab Legal holiday which is valid in major parts of the whole country. - % Is automatically provided with highlighting sequences respectively - % marking characters. - \noindent\ignorespaces##\unskip\multistrut - }\cr -} -\def\Emultitable{% - \crcr - \egroup % end the \halign - \global\setpercentfalse -} - -\def\setmultitablespacing{% - \def\multistrut{\strut}% just use the standard line spacing - % - % Compute \multitablelinespace (if not defined by user) for use in - % \multitableparskip calculation. We used define \multistrut based on - % this, but (ironically) that caused the spacing to be off. - % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. -\ifdim\multitablelinespace=0pt -\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip -\global\advance\multitablelinespace by-\ht0 -\fi -%% Test to see if parskip is larger than space between lines of -%% table. If not, do nothing. -%% If so, set to same dimension as multitablelinespace. -\ifdim\multitableparskip>\multitablelinespace -\global\multitableparskip=\multitablelinespace -\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller - %% than skip between lines in the table. -\fi% -\ifdim\multitableparskip=0pt -\global\multitableparskip=\multitablelinespace -\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller - %% than skip between lines in the table. -\fi} - - -\message{conditionals,} - -% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, -% @ifnotxml always succeed. They currently do nothing; we don't -% attempt to check whether the conditionals are properly nested. But we -% have to remember that they are conditionals, so that @end doesn't -% attempt to close an environment group. -% -\def\makecond#1{% - \expandafter\let\csname #1\endcsname = \relax - \expandafter\let\csname iscond.#1\endcsname = 1 -} -\makecond{iftex} -\makecond{ifnotdocbook} -\makecond{ifnothtml} -\makecond{ifnotinfo} -\makecond{ifnotplaintext} -\makecond{ifnotxml} - -% Ignore @ignore, @ifhtml, @ifinfo, and the like. -% -\def\direntry{\doignore{direntry}} -\def\documentdescription{\doignore{documentdescription}} -\def\docbook{\doignore{docbook}} -\def\html{\doignore{html}} -\def\ifdocbook{\doignore{ifdocbook}} -\def\ifhtml{\doignore{ifhtml}} -\def\ifinfo{\doignore{ifinfo}} -\def\ifnottex{\doignore{ifnottex}} -\def\ifplaintext{\doignore{ifplaintext}} -\def\ifxml{\doignore{ifxml}} -\def\ignore{\doignore{ignore}} -\def\menu{\doignore{menu}} -\def\xml{\doignore{xml}} - -% Ignore text until a line `@end #1', keeping track of nested conditionals. -% -% A count to remember the depth of nesting. -\newcount\doignorecount - -\def\doignore#1{\begingroup - % Scan in ``verbatim'' mode: - \catcode`\@ = \other - \catcode`\{ = \other - \catcode`\} = \other - % - % Make sure that spaces turn into tokens that match what \doignoretext wants. - \spaceisspace - % - % Count number of #1's that we've seen. - \doignorecount = 0 - % - % Swallow text until we reach the matching `@end #1'. - \dodoignore{#1}% -} - -{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. - \obeylines % - % - \gdef\dodoignore#1{% - % #1 contains the command name as a string, e.g., `ifinfo'. - % - % Define a command to find the next `@end #1', which must be on a line - % by itself. - \long\def\doignoretext##1^^M@end #1{\doignoretextyyy##1^^M@#1\_STOP_}% - % And this command to find another #1 command, at the beginning of a - % line. (Otherwise, we would consider a line `@c @ifset', for - % example, to count as an @ifset for nesting.) - \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% - % - % And now expand that command. - \obeylines % - \doignoretext ^^M% - }% -} - -\def\doignoreyyy#1{% - \def\temp{#1}% - \ifx\temp\empty % Nothing found. - \let\next\doignoretextzzz - \else % Found a nested condition, ... - \advance\doignorecount by 1 - \let\next\doignoretextyyy % ..., look for another. - % If we're here, #1 ends with ^^M\ifinfo (for example). - \fi - \next #1% the token \_STOP_ is present just after this macro. -} - -% We have to swallow the remaining "\_STOP_". -% -\def\doignoretextzzz#1{% - \ifnum\doignorecount = 0 % We have just found the outermost @end. - \let\next\enddoignore - \else % Still inside a nested condition. - \advance\doignorecount by -1 - \let\next\doignoretext % Look for the next @end. - \fi - \next -} - -% Finish off ignored text. -\def\enddoignore{\endgroup\ignorespaces} - - -% @set VAR sets the variable VAR to an empty value. -% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. -% -% Since we want to separate VAR from REST-OF-LINE (which might be -% empty), we can't just use \parsearg; we have to insert a space of our -% own to delimit the rest of the line, and then take it out again if we -% didn't need it. -% We rely on the fact that \parsearg sets \catcode`\ =10. -% -\parseargdef\set{\setyyy#1 \endsetyyy} -\def\setyyy#1 #2\endsetyyy{% - {% - \makevalueexpandable - \def\temp{#2}% - \edef\next{\gdef\makecsname{SET#1}}% - \ifx\temp\empty - \next{}% - \else - \setzzz#2\endsetzzz - \fi - }% -} -% Remove the trailing space \setxxx inserted. -\def\setzzz#1 \endsetzzz{\next{#1}} - -% @clear VAR clears (i.e., unsets) the variable VAR. -% -\parseargdef\clear{% - {% - \makevalueexpandable - \global\expandafter\let\csname SET#1\endcsname=\relax - }% -} - -% @value{foo} gets the text saved in variable foo. -\def\value{\begingroup\makevalueexpandable\valuexxx} -\def\valuexxx#1{\expandablevalue{#1}\endgroup} -{ - \catcode`\- = \active \catcode`\_ = \active - % - \gdef\makevalueexpandable{% - \let\value = \expandablevalue - % We don't want these characters active, ... - \catcode`\-=\other \catcode`\_=\other - % ..., but we might end up with active ones in the argument if - % we're called from @code, as @code{@value{foo-bar_}}, though. - % So \let them to their normal equivalents. - \let-\realdash \let_\normalunderscore - } -} - -% We have this subroutine so that we can handle at least some @value's -% properly in indexes (we call \makevalueexpandable in \indexdummies). -% The command has to be fully expandable (if the variable is set), since -% the result winds up in the index file. This means that if the -% variable's value contains other Texinfo commands, it's almost certain -% it will fail (although perhaps we could fix that with sufficient work -% to do a one-level expansion on the result, instead of complete). -% -\def\expandablevalue#1{% - \expandafter\ifx\csname SET#1\endcsname\relax - {[No value for ``#1'']}% - \message{Variable `#1', used in @value, is not set.}% - \else - \csname SET#1\endcsname - \fi -} - -% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined -% with @set. -% -% To get special treatment of `@end ifset,' call \makeond and the redefine. -% -\makecond{ifset} -\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} -\def\doifset#1#2{% - {% - \makevalueexpandable - \let\next=\empty - \expandafter\ifx\csname SET#2\endcsname\relax - #1% If not set, redefine \next. - \fi - \expandafter - }\next -} -\def\ifsetfail{\doignore{ifset}} - -% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been -% defined with @set, or has been undefined with @clear. -% -% The `\else' inside the `\doifset' parameter is a trick to reuse the -% above code: if the variable is not set, do nothing, if it is set, -% then redefine \next to \ifclearfail. -% -\makecond{ifclear} -\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} -\def\ifclearfail{\doignore{ifclear}} - -% @dircategory CATEGORY -- specify a category of the dir file -% which this file should belong to. Ignore this in TeX. -\let\dircategory=\comment - -% @defininfoenclose. -\let\definfoenclose=\comment - - -\message{indexing,} -% Index generation facilities - -% Define \newwrite to be identical to plain tex's \newwrite -% except not \outer, so it can be used within macros and \if's. -\edef\newwrite{\makecsname{ptexnewwrite}} - -% \newindex {foo} defines an index named foo. -% It automatically defines \fooindex such that -% \fooindex ...rest of line... puts an entry in the index foo. -% It also defines \fooindfile to be the number of the output channel for -% the file that accumulates this index. The file's extension is foo. -% The name of an index should be no more than 2 characters long -% for the sake of vms. -% -\def\newindex#1{% - \iflinks - \expandafter\newwrite \csname#1indfile\endcsname - \openout \csname#1indfile\endcsname \jobname.#1 % Open the file - \fi - \expandafter\xdef\csname#1index\endcsname{% % Define @#1index - \noexpand\doindex{#1}} -} - -% @defindex foo == \newindex{foo} -% -\def\defindex{\parsearg\newindex} - -% Define @defcodeindex, like @defindex except put all entries in @code. -% -\def\defcodeindex{\parsearg\newcodeindex} -% -\def\newcodeindex#1{% - \iflinks - \expandafter\newwrite \csname#1indfile\endcsname - \openout \csname#1indfile\endcsname \jobname.#1 - \fi - \expandafter\xdef\csname#1index\endcsname{% - \noexpand\docodeindex{#1}}% -} - - -% @synindex foo bar makes index foo feed into index bar. -% Do this instead of @defindex foo if you don't want it as a separate index. -% -% @syncodeindex foo bar similar, but put all entries made for index foo -% inside @code. -% -\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} -\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} - -% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), -% #3 the target index (bar). -\def\dosynindex#1#2#3{% - % Only do \closeout if we haven't already done it, else we'll end up - % closing the target index. - \expandafter \ifx\csname donesynindex#2\endcsname \undefined - % The \closeout helps reduce unnecessary open files; the limit on the - % Acorn RISC OS is a mere 16 files. - \expandafter\closeout\csname#2indfile\endcsname - \expandafter\let\csname\donesynindex#2\endcsname = 1 - \fi - % redefine \fooindfile: - \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname - \expandafter\let\csname#2indfile\endcsname=\temp - % redefine \fooindex: - \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% -} - -% Define \doindex, the driver for all \fooindex macros. -% Argument #1 is generated by the calling \fooindex macro, -% and it is "foo", the name of the index. - -% \doindex just uses \parsearg; it calls \doind for the actual work. -% This is because \doind is more useful to call from other macros. - -% There is also \dosubind {index}{topic}{subtopic} -% which makes an entry in a two-level index such as the operation index. - -\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} -\def\singleindexer #1{\doind{\indexname}{#1}} - -% like the previous two, but they put @code around the argument. -\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} -\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} - -% Take care of Texinfo commands that can appear in an index entry. -% Since there are some commands we want to expand, and others we don't, -% we have to laboriously prevent expansion for those that we don't. -% -\def\indexdummies{% - \escapechar = `\\ % use backslash in output files. - \def\@{@}% change to @@ when we switch to @ as escape char in index files. - \def\ {\realbackslash\space }% - % Need these in case \tex is in effect and \{ is a \delimiter again. - % But can't use \lbracecmd and \rbracecmd because texindex assumes - % braces and backslashes are used only as delimiters. - \let\{ = \mylbrace - \let\} = \myrbrace - % - % Do the redefinitions. - \commondummies -} - -% For the aux and toc files, @ is the escape character. So we want to -% redefine everything using @ as the escape character (instead of -% \realbackslash, still used for index files). When everything uses @, -% this will be simpler. -% -\def\atdummies{% - \def\@{@@}% - \def\ {@ }% - \let\{ = \lbraceatcmd - \let\} = \rbraceatcmd - % - % Do the redefinitions. - \commondummies -} - -% Called from \indexdummies and \atdummies. -% -\def\commondummies{% - % - % \definedummyword defines \#1 as \string\#1\space, thus effectively - % preventing its expansion. This is used only for control% words, - % not control letters, because the \space would be incorrect for - % control characters, but is needed to separate the control word - % from whatever follows. - % - % For control letters, we have \definedummyletter, which omits the - % space. - % - % These can be used both for control words that take an argument and - % those that do not. If it is followed by {arg} in the input, then - % that will dutifully get written to the index (or wherever). - % - \def\definedummyword ##1{\def##1{\string##1\space}}% - \def\definedummyletter##1{\def##1{\string##1}}% - \let\definedummyaccent\definedummyletter - % - \commondummiesnofonts - % - \definedummyletter\_% - % - % Non-English letters. - \definedummyword\AA - \definedummyword\AE - \definedummyword\L - \definedummyword\OE - \definedummyword\O - \definedummyword\aa - \definedummyword\ae - \definedummyword\l - \definedummyword\oe - \definedummyword\o - \definedummyword\ss - \definedummyword\exclamdown - \definedummyword\questiondown - \definedummyword\ordf - \definedummyword\ordm - % - % Although these internal commands shouldn't show up, sometimes they do. - \definedummyword\bf - \definedummyword\gtr - \definedummyword\hat - \definedummyword\less - \definedummyword\sf - \definedummyword\sl - \definedummyword\tclose - \definedummyword\tt - % - \definedummyword\LaTeX - \definedummyword\TeX - % - % Assorted special characters. - \definedummyword\bullet - \definedummyword\comma - \definedummyword\copyright - \definedummyword\registeredsymbol - \definedummyword\dots - \definedummyword\enddots - \definedummyword\equiv - \definedummyword\error - \definedummyword\euro - \definedummyword\expansion - \definedummyword\minus - \definedummyword\pounds - \definedummyword\point - \definedummyword\print - \definedummyword\result - % - % We want to disable all macros so that they are not expanded by \write. - \macrolist - % - \normalturnoffactive - % - % Handle some cases of @value -- where it does not contain any - % (non-fully-expandable) commands. - \makevalueexpandable -} - -% \commondummiesnofonts: common to \commondummies and \indexnofonts. -% -% Better have this without active chars. -{ - \catcode`\~=\other - \gdef\commondummiesnofonts{% - % Control letters and accents. - \definedummyletter\!% - \definedummyaccent\"% - \definedummyaccent\'% - \definedummyletter\*% - \definedummyaccent\,% - \definedummyletter\.% - \definedummyletter\/% - \definedummyletter\:% - \definedummyaccent\=% - \definedummyletter\?% - \definedummyaccent\^% - \definedummyaccent\`% - \definedummyaccent\~% - \definedummyword\u - \definedummyword\v - \definedummyword\H - \definedummyword\dotaccent - \definedummyword\ringaccent - \definedummyword\tieaccent - \definedummyword\ubaraccent - \definedummyword\udotaccent - \definedummyword\dotless - % - % Texinfo font commands. - \definedummyword\b - \definedummyword\i - \definedummyword\r - \definedummyword\sc - \definedummyword\t - % - % Commands that take arguments. - \definedummyword\acronym - \definedummyword\cite - \definedummyword\code - \definedummyword\command - \definedummyword\dfn - \definedummyword\emph - \definedummyword\env - \definedummyword\file - \definedummyword\kbd - \definedummyword\key - \definedummyword\math - \definedummyword\option - \definedummyword\samp - \definedummyword\strong - \definedummyword\tie - \definedummyword\uref - \definedummyword\url - \definedummyword\var - \definedummyword\verb - \definedummyword\w - } -} - -% \indexnofonts is used when outputting the strings to sort the index -% by, and when constructing control sequence names. It eliminates all -% control sequences and just writes whatever the best ASCII sort string -% would be for a given command (usually its argument). -% -\def\indexnofonts{% - % Accent commands should become @asis. - \def\definedummyaccent##1{\let##1\asis}% - % We can just ignore other control letters. - \def\definedummyletter##1{\let##1\empty}% - % Hopefully, all control words can become @asis. - \let\definedummyword\definedummyaccent - % - \commondummiesnofonts - % - % Don't no-op \tt, since it isn't a user-level command - % and is used in the definitions of the active chars like <, >, |, etc. - % Likewise with the other plain tex font commands. - %\let\tt=\asis - % - \def\ { }% - \def\@{@}% - % how to handle braces? - \def\_{\normalunderscore}% - % - % Non-English letters. - \def\AA{AA}% - \def\AE{AE}% - \def\L{L}% - \def\OE{OE}% - \def\O{O}% - \def\aa{aa}% - \def\ae{ae}% - \def\l{l}% - \def\oe{oe}% - \def\o{o}% - \def\ss{ss}% - \def\exclamdown{!}% - \def\questiondown{?}% - \def\ordf{a}% - \def\ordm{o}% - % - \def\LaTeX{LaTeX}% - \def\TeX{TeX}% - % - % Assorted special characters. - % (The following {} will end up in the sort string, but that's ok.) - \def\bullet{bullet}% - \def\comma{,}% - \def\copyright{copyright}% - \def\registeredsymbol{R}% - \def\dots{...}% - \def\enddots{...}% - \def\equiv{==}% - \def\error{error}% - \def\euro{euro}% - \def\expansion{==>}% - \def\minus{-}% - \def\pounds{pounds}% - \def\point{.}% - \def\print{-|}% - \def\result{=>}% - % - % We need to get rid of all macros, leaving only the arguments (if present). - % Of course this is not nearly correct, but it is the best we can do for now. - % makeinfo does not expand macros in the argument to @deffn, which ends up - % writing an index entry, and texindex isn't prepared for an index sort entry - % that starts with \. - % - % Since macro invocations are followed by braces, we can just redefine them - % to take a single TeX argument. The case of a macro invocation that - % goes to end-of-line is not handled. - % - \macrolist -} - -\let\indexbackslash=0 %overridden during \printindex. -\let\SETmarginindex=\relax % put index entries in margin (undocumented)? - -% Most index entries go through here, but \dosubind is the general case. -% #1 is the index name, #2 is the entry text. -\def\doind#1#2{\dosubind{#1}{#2}{}} - -% Workhorse for all \fooindexes. -% #1 is name of index, #2 is stuff to put there, #3 is subentry -- -% empty if called from \doind, as we usually are (the main exception -% is with most defuns, which call us directly). -% -\def\dosubind#1#2#3{% - \iflinks - {% - % Store the main index entry text (including the third arg). - \toks0 = {#2}% - % If third arg is present, precede it with a space. - \def\thirdarg{#3}% - \ifx\thirdarg\empty \else - \toks0 = \expandafter{\the\toks0 \space #3}% - \fi - % - \edef\writeto{\csname#1indfile\endcsname}% - % - \ifvmode - \dosubindsanitize - \else - \dosubindwrite - \fi - }% - \fi -} - -% Write the entry in \toks0 to the index file: -% -\def\dosubindwrite{% - % Put the index entry in the margin if desired. - \ifx\SETmarginindex\relax\else - \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% - \fi - % - % Remember, we are within a group. - \indexdummies % Must do this here, since \bf, etc expand at this stage - \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now - % so it will be output as is; and it will print as backslash. - % - % Process the index entry with all font commands turned off, to - % get the string to sort by. - {\indexnofonts - \edef\temp{\the\toks0}% need full expansion - \xdef\indexsorttmp{\temp}% - }% - % - % Set up the complete index entry, with both the sort key and - % the original text, including any font commands. We write - % three arguments to \entry to the .?? file (four in the - % subentry case), texindex reduces to two when writing the .??s - % sorted result. - \edef\temp{% - \write\writeto{% - \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% - }% - \temp -} - -% Take care of unwanted page breaks: -% -% If a skip is the last thing on the list now, preserve it -% by backing up by \lastskip, doing the \write, then inserting -% the skip again. Otherwise, the whatsit generated by the -% \write will make \lastskip zero. The result is that sequences -% like this: -% @end defun -% @tindex whatever -% @defun ... -% will have extra space inserted, because the \medbreak in the -% start of the @defun won't see the skip inserted by the @end of -% the previous defun. -% -% But don't do any of this if we're not in vertical mode. We -% don't want to do a \vskip and prematurely end a paragraph. -% -% Avoid page breaks due to these extra skips, too. -% -% But wait, there is a catch there: -% We'll have to check whether \lastskip is zero skip. \ifdim is not -% sufficient for this purpose, as it ignores stretch and shrink parts -% of the skip. The only way seems to be to check the textual -% representation of the skip. -% -% The following is almost like \def\zeroskipmacro{0.0pt} except that -% the ``p'' and ``t'' characters have catcode \other, not 11 (letter). -% -\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} -% -% ..., ready, GO: -% -\def\dosubindsanitize{% - % \lastskip and \lastpenalty cannot both be nonzero simultaneously. - \skip0 = \lastskip - \edef\lastskipmacro{\the\lastskip}% - \count255 = \lastpenalty - % - % If \lastskip is nonzero, that means the last item was a - % skip. And since a skip is discardable, that means this - % -\skip0 glue we're inserting is preceded by a - % non-discardable item, therefore it is not a potential - % breakpoint, therefore no \nobreak needed. - \ifx\lastskipmacro\zeroskipmacro - \else - \vskip-\skip0 - \fi - % - \dosubindwrite - % - \ifx\lastskipmacro\zeroskipmacro - % If \lastskip was zero, perhaps the last item was a penalty, and - % perhaps it was >=10000, e.g., a \nobreak. In that case, we want - % to re-insert the same penalty (values >10000 are used for various - % signals); since we just inserted a non-discardable item, any - % following glue (such as a \parskip) would be a breakpoint. For example: - % - % @deffn deffn-whatever - % @vindex index-whatever - % Description. - % would allow a break between the index-whatever whatsit - % and the "Description." paragraph. - \ifnum\count255>9999 \penalty\count255 \fi - \else - % On the other hand, if we had a nonzero \lastskip, - % this make-up glue would be preceded by a non-discardable item - % (the whatsit from the \write), so we must insert a \nobreak. - \nobreak\vskip\skip0 - \fi -} - -% The index entry written in the file actually looks like -% \entry {sortstring}{page}{topic} -% or -% \entry {sortstring}{page}{topic}{subtopic} -% The texindex program reads in these files and writes files -% containing these kinds of lines: -% \initial {c} -% before the first topic whose initial is c -% \entry {topic}{pagelist} -% for a topic that is used without subtopics -% \primary {topic} -% for the beginning of a topic that is used with subtopics -% \secondary {subtopic}{pagelist} -% for each subtopic. - -% Define the user-accessible indexing commands -% @findex, @vindex, @kindex, @cindex. - -\def\findex {\fnindex} -\def\kindex {\kyindex} -\def\cindex {\cpindex} -\def\vindex {\vrindex} -\def\tindex {\tpindex} -\def\pindex {\pgindex} - -\def\cindexsub {\begingroup\obeylines\cindexsub} -{\obeylines % -\gdef\cindexsub "#1" #2^^M{\endgroup % -\dosubind{cp}{#2}{#1}}} - -% Define the macros used in formatting output of the sorted index material. - -% @printindex causes a particular index (the ??s file) to get printed. -% It does not print any chapter heading (usually an @unnumbered). -% -\parseargdef\printindex{\begingroup - \dobreak \chapheadingskip{10000}% - % - \smallfonts \rm - \tolerance = 9500 - \everypar = {}% don't want the \kern\-parindent from indentation suppression. - % - % See if the index file exists and is nonempty. - % Change catcode of @ here so that if the index file contains - % \initial {@} - % as its first line, TeX doesn't complain about mismatched braces - % (because it thinks @} is a control sequence). - \catcode`\@ = 11 - \openin 1 \jobname.#1s - \ifeof 1 - % \enddoublecolumns gets confused if there is no text in the index, - % and it loses the chapter title and the aux file entries for the - % index. The easiest way to prevent this problem is to make sure - % there is some text. - \putwordIndexNonexistent - \else - % - % If the index file exists but is empty, then \openin leaves \ifeof - % false. We have to make TeX try to read something from the file, so - % it can discover if there is anything in it. - \read 1 to \temp - \ifeof 1 - \putwordIndexIsEmpty - \else - % Index files are almost Texinfo source, but we use \ as the escape - % character. It would be better to use @, but that's too big a change - % to make right now. - \def\indexbackslash{\backslashcurfont}% - \catcode`\\ = 0 - \escapechar = `\\ - \begindoublecolumns - \input \jobname.#1s - \enddoublecolumns - \fi - \fi - \closein 1 -\endgroup} - -% These macros are used by the sorted index file itself. -% Change them to control the appearance of the index. - -\def\initial#1{{% - % Some minor font changes for the special characters. - \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt - % - % Remove any glue we may have, we'll be inserting our own. - \removelastskip - % - % We like breaks before the index initials, so insert a bonus. - \nobreak - \vskip 0pt plus 3\baselineskip - \penalty 0 - \vskip 0pt plus -3\baselineskip - % - % Typeset the initial. Making this add up to a whole number of - % baselineskips increases the chance of the dots lining up from column - % to column. It still won't often be perfect, because of the stretch - % we need before each entry, but it's better. - % - % No shrink because it confuses \balancecolumns. - \vskip 1.67\baselineskip plus .5\baselineskip - \leftline{\secbf #1}% - % Do our best not to break after the initial. - \nobreak - \vskip .33\baselineskip plus .1\baselineskip -}} - -% \entry typesets a paragraph consisting of the text (#1), dot leaders, and -% then page number (#2) flushed to the right margin. It is used for index -% and table of contents entries. The paragraph is indented by \leftskip. -% -% A straightforward implementation would start like this: -% \def\entry#1#2{... -% But this frozes the catcodes in the argument, and can cause problems to -% @code, which sets - active. This problem was fixed by a kludge--- -% ``-'' was active throughout whole index, but this isn't really right. -% -% The right solution is to prevent \entry from swallowing the whole text. -% --kasal, 21nov03 -\def\entry{% - \begingroup - % - % Start a new paragraph if necessary, so our assignments below can't - % affect previous text. - \par - % - % Do not fill out the last line with white space. - \parfillskip = 0in - % - % No extra space above this paragraph. - \parskip = 0in - % - % Do not prefer a separate line ending with a hyphen to fewer lines. - \finalhyphendemerits = 0 - % - % \hangindent is only relevant when the entry text and page number - % don't both fit on one line. In that case, bob suggests starting the - % dots pretty far over on the line. Unfortunately, a large - % indentation looks wrong when the entry text itself is broken across - % lines. So we use a small indentation and put up with long leaders. - % - % \hangafter is reset to 1 (which is the value we want) at the start - % of each paragraph, so we need not do anything with that. - \hangindent = 2em - % - % When the entry text needs to be broken, just fill out the first line - % with blank space. - \rightskip = 0pt plus1fil - % - % A bit of stretch before each entry for the benefit of balancing - % columns. - \vskip 0pt plus1pt - % - % Swallow the left brace of the text (first parameter): - \afterassignment\doentry - \let\temp = -} -\def\doentry{% - \bgroup % Instead of the swallowed brace. - \noindent - \aftergroup\finishentry - % And now comes the text of the entry. -} -\def\finishentry#1{% - % #1 is the page number. - % - % The following is kludged to not output a line of dots in the index if - % there are no page numbers. The next person who breaks this will be - % cursed by a Unix daemon. - \def\tempa{{\rm }}% - \def\tempb{#1}% - \edef\tempc{\tempa}% - \edef\tempd{\tempb}% - \ifx\tempc\tempd - \ % - \else - % - % If we must, put the page number on a line of its own, and fill out - % this line with blank space. (The \hfil is overwhelmed with the - % fill leaders glue in \indexdotfill if the page number does fit.) - \hfil\penalty50 - \null\nobreak\indexdotfill % Have leaders before the page number. - % - % The `\ ' here is removed by the implicit \unskip that TeX does as - % part of (the primitive) \par. Without it, a spurious underfull - % \hbox ensues. - \ifpdf - \pdfgettoks#1.% - \ \the\toksA - \else - \ #1% - \fi - \fi - \par - \endgroup -} - -% Like \dotfill except takes at least 1 em. -\def\indexdotfill{\cleaders - \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill} - -\def\primary #1{\line{#1\hfil}} - -\newskip\secondaryindent \secondaryindent=0.5cm -\def\secondary#1#2{{% - \parfillskip=0in - \parskip=0in - \hangindent=1in - \hangafter=1 - \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill - \ifpdf - \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. - \else - #2 - \fi - \par -}} - -% Define two-column mode, which we use to typeset indexes. -% Adapted from the TeXbook, page 416, which is to say, -% the manmac.tex format used to print the TeXbook itself. -\catcode`\@=11 - -\newbox\partialpage -\newdimen\doublecolumnhsize - -\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns - % Grab any single-column material above us. - \output = {% - % - % Here is a possibility not foreseen in manmac: if we accumulate a - % whole lot of material, we might end up calling this \output - % routine twice in a row (see the doublecol-lose test, which is - % essentially a couple of indexes with @setchapternewpage off). In - % that case we just ship out what is in \partialpage with the normal - % output routine. Generally, \partialpage will be empty when this - % runs and this will be a no-op. See the indexspread.tex test case. - \ifvoid\partialpage \else - \onepageout{\pagecontents\partialpage}% - \fi - % - \global\setbox\partialpage = \vbox{% - % Unvbox the main output page. - \unvbox\PAGE - \kern-\topskip \kern\baselineskip - }% - }% - \eject % run that output routine to set \partialpage - % - % Use the double-column output routine for subsequent pages. - \output = {\doublecolumnout}% - % - % Change the page size parameters. We could do this once outside this - % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 - % format, but then we repeat the same computation. Repeating a couple - % of assignments once per index is clearly meaningless for the - % execution time, so we may as well do it in one place. - % - % First we halve the line length, less a little for the gutter between - % the columns. We compute the gutter based on the line length, so it - % changes automatically with the paper format. The magic constant - % below is chosen so that the gutter has the same value (well, +-<1pt) - % as it did when we hard-coded it. - % - % We put the result in a separate register, \doublecolumhsize, so we - % can restore it in \pagesofar, after \hsize itself has (potentially) - % been clobbered. - % - \doublecolumnhsize = \hsize - \advance\doublecolumnhsize by -.04154\hsize - \divide\doublecolumnhsize by 2 - \hsize = \doublecolumnhsize - % - % Double the \vsize as well. (We don't need a separate register here, - % since nobody clobbers \vsize.) - \vsize = 2\vsize -} - -% The double-column output routine for all double-column pages except -% the last. -% -\def\doublecolumnout{% - \splittopskip=\topskip \splitmaxdepth=\maxdepth - % Get the available space for the double columns -- the normal - % (undoubled) page height minus any material left over from the - % previous page. - \dimen@ = \vsize - \divide\dimen@ by 2 - \advance\dimen@ by -\ht\partialpage - % - % box0 will be the left-hand column, box2 the right. - \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ - \onepageout\pagesofar - \unvbox255 - \penalty\outputpenalty -} -% -% Re-output the contents of the output page -- any previous material, -% followed by the two boxes we just split, in box0 and box2. -\def\pagesofar{% - \unvbox\partialpage - % - \hsize = \doublecolumnhsize - \wd0=\hsize \wd2=\hsize - \hbox to\pagewidth{\box0\hfil\box2}% -} -% -% All done with double columns. -\def\enddoublecolumns{% - \output = {% - % Split the last of the double-column material. Leave it on the - % current page, no automatic page break. - \balancecolumns - % - % If we end up splitting too much material for the current page, - % though, there will be another page break right after this \output - % invocation ends. Having called \balancecolumns once, we do not - % want to call it again. Therefore, reset \output to its normal - % definition right away. (We hope \balancecolumns will never be - % called on to balance too much material, but if it is, this makes - % the output somewhat more palatable.) - \global\output = {\onepageout{\pagecontents\PAGE}}% - }% - \eject - \endgroup % started in \begindoublecolumns - % - % \pagegoal was set to the doubled \vsize above, since we restarted - % the current page. We're now back to normal single-column - % typesetting, so reset \pagegoal to the normal \vsize (after the - % \endgroup where \vsize got restored). - \pagegoal = \vsize -} -% -% Called at the end of the double column material. -\def\balancecolumns{% - \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. - \dimen@ = \ht0 - \advance\dimen@ by \topskip - \advance\dimen@ by-\baselineskip - \divide\dimen@ by 2 % target to split to - %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% - \splittopskip = \topskip - % Loop until we get a decent breakpoint. - {% - \vbadness = 10000 - \loop - \global\setbox3 = \copy0 - \global\setbox1 = \vsplit3 to \dimen@ - \ifdim\ht3>\dimen@ - \global\advance\dimen@ by 1pt - \repeat - }% - %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% - \setbox0=\vbox to\dimen@{\unvbox1}% - \setbox2=\vbox to\dimen@{\unvbox3}% - % - \pagesofar -} -\catcode`\@ = \other - - -\message{sectioning,} -% Chapters, sections, etc. - -% \unnumberedno is an oxymoron, of course. But we count the unnumbered -% sections so that we can refer to them unambiguously in the pdf -% outlines by their "section number". We avoid collisions with chapter -% numbers by starting them at 10000. (If a document ever has 10000 -% chapters, we're in trouble anyway, I'm sure.) -\newcount\unnumberedno \unnumberedno = 10000 -\newcount\chapno -\newcount\secno \secno=0 -\newcount\subsecno \subsecno=0 -\newcount\subsubsecno \subsubsecno=0 - -% This counter is funny since it counts through charcodes of letters A, B, ... -\newcount\appendixno \appendixno = `\@ -% -% \def\appendixletter{\char\the\appendixno} -% We do the following ugly conditional instead of the above simple -% construct for the sake of pdftex, which needs the actual -% letter in the expansion, not just typeset. -% -\def\appendixletter{% - \ifnum\appendixno=`A A% - \else\ifnum\appendixno=`B B% - \else\ifnum\appendixno=`C C% - \else\ifnum\appendixno=`D D% - \else\ifnum\appendixno=`E E% - \else\ifnum\appendixno=`F F% - \else\ifnum\appendixno=`G G% - \else\ifnum\appendixno=`H H% - \else\ifnum\appendixno=`I I% - \else\ifnum\appendixno=`J J% - \else\ifnum\appendixno=`K K% - \else\ifnum\appendixno=`L L% - \else\ifnum\appendixno=`M M% - \else\ifnum\appendixno=`N N% - \else\ifnum\appendixno=`O O% - \else\ifnum\appendixno=`P P% - \else\ifnum\appendixno=`Q Q% - \else\ifnum\appendixno=`R R% - \else\ifnum\appendixno=`S S% - \else\ifnum\appendixno=`T T% - \else\ifnum\appendixno=`U U% - \else\ifnum\appendixno=`V V% - \else\ifnum\appendixno=`W W% - \else\ifnum\appendixno=`X X% - \else\ifnum\appendixno=`Y Y% - \else\ifnum\appendixno=`Z Z% - % The \the is necessary, despite appearances, because \appendixletter is - % expanded while writing the .toc file. \char\appendixno is not - % expandable, thus it is written literally, thus all appendixes come out - % with the same letter (or @) in the toc without it. - \else\char\the\appendixno - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} - -% Each @chapter defines this as the name of the chapter. -% page headings and footings can use it. @section does likewise. -% However, they are not reliable, because we don't use marks. -\def\thischapter{} -\def\thissection{} - -\newcount\absseclevel % used to calculate proper heading level -\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count - -% @raisesections: treat @section as chapter, @subsection as section, etc. -\def\raisesections{\global\advance\secbase by -1} -\let\up=\raisesections % original BFox name - -% @lowersections: treat @chapter as section, @section as subsection, etc. -\def\lowersections{\global\advance\secbase by 1} -\let\down=\lowersections % original BFox name - -% we only have subsub. -\chardef\maxseclevel = 3 -% -% A numbered section within an unnumbered changes to unnumbered too. -% To achive this, remember the "biggest" unnum. sec. we are currently in: -\chardef\unmlevel = \maxseclevel -% -% Trace whether the current chapter is an appendix or not: -% \chapheadtype is "N" or "A", unnumbered chapters are ignored. -\def\chapheadtype{N} - -% Choose a heading macro -% #1 is heading type -% #2 is heading level -% #3 is text for heading -\def\genhead#1#2#3{% - % Compute the abs. sec. level: - \absseclevel=#2 - \advance\absseclevel by \secbase - % Make sure \absseclevel doesn't fall outside the range: - \ifnum \absseclevel < 0 - \absseclevel = 0 - \else - \ifnum \absseclevel > 3 - \absseclevel = 3 - \fi - \fi - % The heading type: - \def\headtype{#1}% - \if \headtype U% - \ifnum \absseclevel < \unmlevel - \chardef\unmlevel = \absseclevel - \fi - \else - % Check for appendix sections: - \ifnum \absseclevel = 0 - \edef\chapheadtype{\headtype}% - \else - \if \headtype A\if \chapheadtype N% - \errmessage{@appendix... within a non-appendix chapter}% - \fi\fi - \fi - % Check for numbered within unnumbered: - \ifnum \absseclevel > \unmlevel - \def\headtype{U}% - \else - \chardef\unmlevel = 3 - \fi - \fi - % Now print the heading: - \if \headtype U% - \ifcase\absseclevel - \unnumberedzzz{#3}% - \or \unnumberedseczzz{#3}% - \or \unnumberedsubseczzz{#3}% - \or \unnumberedsubsubseczzz{#3}% - \fi - \else - \if \headtype A% - \ifcase\absseclevel - \appendixzzz{#3}% - \or \appendixsectionzzz{#3}% - \or \appendixsubseczzz{#3}% - \or \appendixsubsubseczzz{#3}% - \fi - \else - \ifcase\absseclevel - \chapterzzz{#3}% - \or \seczzz{#3}% - \or \numberedsubseczzz{#3}% - \or \numberedsubsubseczzz{#3}% - \fi - \fi - \fi - \suppressfirstparagraphindent -} - -% an interface: -\def\numhead{\genhead N} -\def\apphead{\genhead A} -\def\unnmhead{\genhead U} - -% @chapter, @appendix, @unnumbered. Increment top-level counter, reset -% all lower-level sectioning counters to zero. -% -% Also set \chaplevelprefix, which we prepend to @float sequence numbers -% (e.g., figures), q.v. By default (before any chapter), that is empty. -\let\chaplevelprefix = \empty -% -\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz -\def\chapterzzz#1{% - % section resetting is \global in case the chapter is in a group, such - % as an @include file. - \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 - \global\advance\chapno by 1 - % - % Used for \float. - \gdef\chaplevelprefix{\the\chapno.}% - \resetallfloatnos - % - \message{\putwordChapter\space \the\chapno}% - % - % Write the actual heading. - \chapmacro{#1}{Ynumbered}{\the\chapno}% - % - % So @section and the like are numbered underneath this chapter. - \global\let\section = \numberedsec - \global\let\subsection = \numberedsubsec - \global\let\subsubsection = \numberedsubsubsec -} - -\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz -\def\appendixzzz#1{% - \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 - \global\advance\appendixno by 1 - \gdef\chaplevelprefix{\appendixletter.}% - \resetallfloatnos - % - \def\appendixnum{\putwordAppendix\space \appendixletter}% - \message{\appendixnum}% - % - \chapmacro{#1}{Yappendix}{\appendixletter}% - % - \global\let\section = \appendixsec - \global\let\subsection = \appendixsubsec - \global\let\subsubsection = \appendixsubsubsec -} - -\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz -\def\unnumberedzzz#1{% - \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 - \global\advance\unnumberedno by 1 - % - % Since an unnumbered has no number, no prefix for figures. - \global\let\chaplevelprefix = \empty - \resetallfloatnos - % - % This used to be simply \message{#1}, but TeX fully expands the - % argument to \message. Therefore, if #1 contained @-commands, TeX - % expanded them. For example, in `@unnumbered The @cite{Book}', TeX - % expanded @cite (which turns out to cause errors because \cite is meant - % to be executed, not expanded). - % - % Anyway, we don't want the fully-expanded definition of @cite to appear - % as a result of the \message, we just want `@cite' itself. We use - % \the to achieve this: TeX expands \the only once, - % simply yielding the contents of . (We also do this for - % the toc entries.) - \toks0 = {#1}% - \message{(\the\toks0)}% - % - \chapmacro{#1}{Ynothing}{\the\unnumberedno}% - % - \global\let\section = \unnumberedsec - \global\let\subsection = \unnumberedsubsec - \global\let\subsubsection = \unnumberedsubsubsec -} - -% @centerchap is like @unnumbered, but the heading is centered. -\outer\parseargdef\centerchap{% - % Well, we could do the following in a group, but that would break - % an assumption that \chapmacro is called at the outermost level. - % Thus we are safer this way: --kasal, 24feb04 - \let\centerparametersmaybe = \centerparameters - \unnmhead0{#1}% - \let\centerparametersmaybe = \relax -} - -% @top is like @unnumbered. -\let\top\unnumbered - -% Sections. -\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz -\def\seczzz#1{% - \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 - \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% -} - -\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz -\def\appendixsectionzzz#1{% - \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 - \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% -} -\let\appendixsec\appendixsection - -\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz -\def\unnumberedseczzz#1{% - \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 - \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% -} - -% Subsections. -\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz -\def\numberedsubseczzz#1{% - \global\subsubsecno=0 \global\advance\subsecno by 1 - \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% -} - -\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz -\def\appendixsubseczzz#1{% - \global\subsubsecno=0 \global\advance\subsecno by 1 - \sectionheading{#1}{subsec}{Yappendix}% - {\appendixletter.\the\secno.\the\subsecno}% -} - -\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz -\def\unnumberedsubseczzz#1{% - \global\subsubsecno=0 \global\advance\subsecno by 1 - \sectionheading{#1}{subsec}{Ynothing}% - {\the\unnumberedno.\the\secno.\the\subsecno}% -} - -% Subsubsections. -\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz -\def\numberedsubsubseczzz#1{% - \global\advance\subsubsecno by 1 - \sectionheading{#1}{subsubsec}{Ynumbered}% - {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% -} - -\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz -\def\appendixsubsubseczzz#1{% - \global\advance\subsubsecno by 1 - \sectionheading{#1}{subsubsec}{Yappendix}% - {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% -} - -\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz -\def\unnumberedsubsubseczzz#1{% - \global\advance\subsubsecno by 1 - \sectionheading{#1}{subsubsec}{Ynothing}% - {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% -} - -% These macros control what the section commands do, according -% to what kind of chapter we are in (ordinary, appendix, or unnumbered). -% Define them by default for a numbered chapter. -\let\section = \numberedsec -\let\subsection = \numberedsubsec -\let\subsubsection = \numberedsubsubsec - -% Define @majorheading, @heading and @subheading - -% NOTE on use of \vbox for chapter headings, section headings, and such: -% 1) We use \vbox rather than the earlier \line to permit -% overlong headings to fold. -% 2) \hyphenpenalty is set to 10000 because hyphenation in a -% heading is obnoxious; this forbids it. -% 3) Likewise, headings look best if no \parindent is used, and -% if justification is not attempted. Hence \raggedright. - - -\def\majorheading{% - {\advance\chapheadingskip by 10pt \chapbreak }% - \parsearg\chapheadingzzz -} - -\def\chapheading{\chapbreak \parsearg\chapheadingzzz} -\def\chapheadingzzz#1{% - {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}% - \bigskip \par\penalty 200\relax - \suppressfirstparagraphindent -} - -% @heading, @subheading, @subsubheading. -\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} - \suppressfirstparagraphindent} -\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} - \suppressfirstparagraphindent} -\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} - \suppressfirstparagraphindent} - -% These macros generate a chapter, section, etc. heading only -% (including whitespace, linebreaking, etc. around it), -% given all the information in convenient, parsed form. - -%%% Args are the skip and penalty (usually negative) -\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} - -%%% Define plain chapter starts, and page on/off switching for it -% Parameter controlling skip before chapter headings (if needed) - -\newskip\chapheadingskip - -\def\chapbreak{\dobreak \chapheadingskip {-4000}} -\def\chappager{\par\vfill\supereject} -\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi} - -\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} - -\def\CHAPPAGoff{% -\global\let\contentsalignmacro = \chappager -\global\let\pchapsepmacro=\chapbreak -\global\let\pagealignmacro=\chappager} - -\def\CHAPPAGon{% -\global\let\contentsalignmacro = \chappager -\global\let\pchapsepmacro=\chappager -\global\let\pagealignmacro=\chappager -\global\def\HEADINGSon{\HEADINGSsingle}} - -\def\CHAPPAGodd{% -\global\let\contentsalignmacro = \chapoddpage -\global\let\pchapsepmacro=\chapoddpage -\global\let\pagealignmacro=\chapoddpage -\global\def\HEADINGSon{\HEADINGSdouble}} - -\CHAPPAGon - -% Chapter opening. -% -% #1 is the text, #2 is the section type (Ynumbered, Ynothing, -% Yappendix, Yomitfromtoc), #3 the chapter number. -% -% To test against our argument. -\def\Ynothingkeyword{Ynothing} -\def\Yomitfromtockeyword{Yomitfromtoc} -\def\Yappendixkeyword{Yappendix} -% -\def\chapmacro#1#2#3{% - \pchapsepmacro - {% - \chapfonts \rm - % - % Have to define \thissection before calling \donoderef, because the - % xref code eventually uses it. On the other hand, it has to be called - % after \pchapsepmacro, or the headline will change too soon. - \gdef\thissection{#1}% - \gdef\thischaptername{#1}% - % - % Only insert the separating space if we have a chapter/appendix - % number, and don't print the unnumbered ``number''. - \def\temptype{#2}% - \ifx\temptype\Ynothingkeyword - \setbox0 = \hbox{}% - \def\toctype{unnchap}% - \gdef\thischapter{#1}% - \else\ifx\temptype\Yomitfromtockeyword - \setbox0 = \hbox{}% contents like unnumbered, but no toc entry - \def\toctype{omit}% - \gdef\thischapter{}% - \else\ifx\temptype\Yappendixkeyword - \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% - \def\toctype{app}% - % We don't substitute the actual chapter name into \thischapter - % because we don't want its macros evaluated now. And we don't - % use \thissection because that changes with each section. - % - \xdef\thischapter{\putwordAppendix{} \appendixletter: - \noexpand\thischaptername}% - \else - \setbox0 = \hbox{#3\enspace}% - \def\toctype{numchap}% - \xdef\thischapter{\putwordChapter{} \the\chapno: - \noexpand\thischaptername}% - \fi\fi\fi - % - % Write the toc entry for this chapter. Must come before the - % \donoderef, because we include the current node name in the toc - % entry, and \donoderef resets it to empty. - \writetocentry{\toctype}{#1}{#3}% - % - % For pdftex, we have to write out the node definition (aka, make - % the pdfdest) after any page break, but before the actual text has - % been typeset. If the destination for the pdf outline is after the - % text, then jumping from the outline may wind up with the text not - % being visible, for instance under high magnification. - \donoderef{#2}% - % - % Typeset the actual heading. - \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright - \hangindent=\wd0 \centerparametersmaybe - \unhbox0 #1\par}% - }% - \nobreak\bigskip % no page break after a chapter title - \nobreak -} - -% @centerchap -- centered and unnumbered. -\let\centerparametersmaybe = \relax -\def\centerparameters{% - \advance\rightskip by 3\rightskip - \leftskip = \rightskip - \parfillskip = 0pt -} - - -% I don't think this chapter style is supported any more, so I'm not -% updating it with the new noderef stuff. We'll see. --karl, 11aug03. -% -\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} -% -\def\unnchfopen #1{% -\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}\bigskip \par\nobreak -} -\def\chfopen #1#2{\chapoddpage {\chapfonts -\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% -\par\penalty 5000 % -} -\def\centerchfopen #1{% -\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt - \hfill {\rm #1}\hfill}}\bigskip \par\nobreak -} -\def\CHAPFopen{% - \global\let\chapmacro=\chfopen - \global\let\centerchapmacro=\centerchfopen} - - -% Section titles. These macros combine the section number parts and -% call the generic \sectionheading to do the printing. -% -\newskip\secheadingskip -\def\secheadingbreak{\dobreak \secheadingskip{-1000}} - -% Subsection titles. -\newskip\subsecheadingskip -\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} - -% Subsubsection titles. -\def\subsubsecheadingskip{\subsecheadingskip} -\def\subsubsecheadingbreak{\subsecheadingbreak} - - -% Print any size, any type, section title. -% -% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is -% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the -% section number. -% -\def\sectionheading#1#2#3#4{% - {% - % Switch to the right set of fonts. - \csname #2fonts\endcsname \rm - % - % Insert space above the heading. - \csname #2headingbreak\endcsname - % - % Only insert the space after the number if we have a section number. - \def\sectionlevel{#2}% - \def\temptype{#3}% - % - \ifx\temptype\Ynothingkeyword - \setbox0 = \hbox{}% - \def\toctype{unn}% - \gdef\thissection{#1}% - \else\ifx\temptype\Yomitfromtockeyword - % for @headings -- no section number, don't include in toc, - % and don't redefine \thissection. - \setbox0 = \hbox{}% - \def\toctype{omit}% - \let\sectionlevel=\empty - \else\ifx\temptype\Yappendixkeyword - \setbox0 = \hbox{#4\enspace}% - \def\toctype{app}% - \gdef\thissection{#1}% - \else - \setbox0 = \hbox{#4\enspace}% - \def\toctype{num}% - \gdef\thissection{#1}% - \fi\fi\fi - % - % Write the toc entry (before \donoderef). See comments in \chfplain. - \writetocentry{\toctype\sectionlevel}{#1}{#4}% - % - % Write the node reference (= pdf destination for pdftex). - % Again, see comments in \chfplain. - \donoderef{#3}% - % - % Output the actual section heading. - \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright - \hangindent=\wd0 % zero if no section number - \unhbox0 #1}% - }% - % Add extra space after the heading -- half of whatever came above it. - % Don't allow stretch, though. - \kern .5 \csname #2headingskip\endcsname - % - % Do not let the kern be a potential breakpoint, as it would be if it - % was followed by glue. - \nobreak - % - % We'll almost certainly start a paragraph next, so don't let that - % glue accumulate. (Not a breakpoint because it's preceded by a - % discardable item.) - \vskip-\parskip - % - % This is purely so the last item on the list is a known \penalty > - % 10000. This is so \startdefun can avoid allowing breakpoints after - % section headings. Otherwise, it would insert a valid breakpoint between: - % - % @section sec-whatever - % @deffn def-whatever - \penalty 10001 -} - - -\message{toc,} -% Table of contents. -\newwrite\tocfile - -% Write an entry to the toc file, opening it if necessary. -% Called from @chapter, etc. -% -% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} -% We append the current node name (if any) and page number as additional -% arguments for the \{chap,sec,...}entry macros which will eventually -% read this. The node name is used in the pdf outlines as the -% destination to jump to. -% -% We open the .toc file for writing here instead of at @setfilename (or -% any other fixed time) so that @contents can be anywhere in the document. -% But if #1 is `omit', then we don't do anything. This is used for the -% table of contents chapter openings themselves. -% -\newif\iftocfileopened -\def\omitkeyword{omit}% -% -\def\writetocentry#1#2#3{% - \edef\writetoctype{#1}% - \ifx\writetoctype\omitkeyword \else - \iftocfileopened\else - \immediate\openout\tocfile = \jobname.toc - \global\tocfileopenedtrue - \fi - % - \iflinks - {\atdummies - \edef\temp{% - \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% - \temp - } - \fi - \fi - % - % Tell \shipout to create a pdf destination on each page, if we're - % writing pdf. These are used in the table of contents. We can't - % just write one on every page because the title pages are numbered - % 1 and 2 (the page numbers aren't printed), and so are the first - % two pages of the document. Thus, we'd have two destinations named - % `1', and two named `2'. - \ifpdf \global\pdfmakepagedesttrue \fi -} - - -% These characters do not print properly in the Computer Modern roman -% fonts, so we must take special care. This is more or less redundant -% with the Texinfo input format setup at the end of this file. -% -\def\activecatcodes{% - \catcode`\"=\active - \catcode`\$=\active - \catcode`\<=\active - \catcode`\>=\active - \catcode`\\=\active - \catcode`\^=\active - \catcode`\_=\active - \catcode`\|=\active - \catcode`\~=\active -} - - -% Read the toc file, which is essentially Texinfo input. -\def\readtocfile{% - \setupdatafile - \activecatcodes - \input \jobname.toc -} - -\newskip\contentsrightmargin \contentsrightmargin=1in -\newcount\savepageno -\newcount\lastnegativepageno \lastnegativepageno = -1 - -% Prepare to read what we've written to \tocfile. -% -\def\startcontents#1{% - % If @setchapternewpage on, and @headings double, the contents should - % start on an odd page, unlike chapters. Thus, we maintain - % \contentsalignmacro in parallel with \pagealignmacro. - % From: Torbjorn Granlund - \contentsalignmacro - \immediate\closeout\tocfile - % - % Don't need to put `Contents' or `Short Contents' in the headline. - % It is abundantly clear what they are. - \def\thischapter{}% - \chapmacro{#1}{Yomitfromtoc}{}% - % - \savepageno = \pageno - \begingroup % Set up to handle contents files properly. - \raggedbottom % Worry more about breakpoints than the bottom. - \advance\hsize by -\contentsrightmargin % Don't use the full line length. - % - % Roman numerals for page numbers. - \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi -} - - -% Normal (long) toc. -\def\contents{% - \startcontents{\putwordTOC}% - \openin 1 \jobname.toc - \ifeof 1 \else - \readtocfile - \fi - \vfill \eject - \contentsalignmacro % in case @setchapternewpage odd is in effect - \ifeof 1 \else - \pdfmakeoutlines - \fi - \closein 1 - \endgroup - \lastnegativepageno = \pageno - \global\pageno = \savepageno -} - -% And just the chapters. -\def\summarycontents{% - \startcontents{\putwordShortTOC}% - % - \let\numchapentry = \shortchapentry - \let\appentry = \shortchapentry - \let\unnchapentry = \shortunnchapentry - % We want a true roman here for the page numbers. - \secfonts - \let\rm=\shortcontrm \let\bf=\shortcontbf - \let\sl=\shortcontsl \let\tt=\shortconttt - \rm - \hyphenpenalty = 10000 - \advance\baselineskip by 1pt % Open it up a little. - \def\numsecentry##1##2##3##4{} - \let\appsecentry = \numsecentry - \let\unnsecentry = \numsecentry - \let\numsubsecentry = \numsecentry - \let\appsubsecentry = \numsecentry - \let\unnsubsecentry = \numsecentry - \let\numsubsubsecentry = \numsecentry - \let\appsubsubsecentry = \numsecentry - \let\unnsubsubsecentry = \numsecentry - \openin 1 \jobname.toc - \ifeof 1 \else - \readtocfile - \fi - \closein 1 - \vfill \eject - \contentsalignmacro % in case @setchapternewpage odd is in effect - \endgroup - \lastnegativepageno = \pageno - \global\pageno = \savepageno -} -\let\shortcontents = \summarycontents - -% Typeset the label for a chapter or appendix for the short contents. -% The arg is, e.g., `A' for an appendix, or `3' for a chapter. -% -\def\shortchaplabel#1{% - % This space should be enough, since a single number is .5em, and the - % widest letter (M) is 1em, at least in the Computer Modern fonts. - % But use \hss just in case. - % (This space doesn't include the extra space that gets added after - % the label; that gets put in by \shortchapentry above.) - % - % We'd like to right-justify chapter numbers, but that looks strange - % with appendix letters. And right-justifying numbers and - % left-justifying letters looks strange when there is less than 10 - % chapters. Have to read the whole toc once to know how many chapters - % there are before deciding ... - \hbox to 1em{#1\hss}% -} - -% These macros generate individual entries in the table of contents. -% The first argument is the chapter or section name. -% The last argument is the page number. -% The arguments in between are the chapter number, section number, ... - -% Chapters, in the main contents. -\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} -% -% Chapters, in the short toc. -% See comments in \dochapentry re vbox and related settings. -\def\shortchapentry#1#2#3#4{% - \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% -} - -% Appendices, in the main contents. -% Need the word Appendix, and a fixed-size box. -% -\def\appendixbox#1{% - % We use M since it's probably the widest letter. - \setbox0 = \hbox{\putwordAppendix{} M}% - \hbox to \wd0{\putwordAppendix{} #1\hss}} -% -\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} - -% Unnumbered chapters. -\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} -\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} - -% Sections. -\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} -\let\appsecentry=\numsecentry -\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} - -% Subsections. -\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} -\let\appsubsecentry=\numsubsecentry -\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} - -% And subsubsections. -\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} -\let\appsubsubsecentry=\numsubsubsecentry -\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} - -% This parameter controls the indentation of the various levels. -% Same as \defaultparindent. -\newdimen\tocindent \tocindent = 15pt - -% Now for the actual typesetting. In all these, #1 is the text and #2 is the -% page number. -% -% If the toc has to be broken over pages, we want it to be at chapters -% if at all possible; hence the \penalty. -\def\dochapentry#1#2{% - \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip - \begingroup - \chapentryfonts - \tocentry{#1}{\dopageno\bgroup#2\egroup}% - \endgroup - \nobreak\vskip .25\baselineskip plus.1\baselineskip -} - -\def\dosecentry#1#2{\begingroup - \secentryfonts \leftskip=\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -\def\dosubsecentry#1#2{\begingroup - \subsecentryfonts \leftskip=2\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -\def\dosubsubsecentry#1#2{\begingroup - \subsubsecentryfonts \leftskip=3\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -% We use the same \entry macro as for the index entries. -\let\tocentry = \entry - -% Space between chapter (or whatever) number and the title. -\def\labelspace{\hskip1em \relax} - -\def\dopageno#1{{\rm #1}} -\def\doshortpageno#1{{\rm #1}} - -\def\chapentryfonts{\secfonts \rm} -\def\secentryfonts{\textfonts} -\def\subsecentryfonts{\textfonts} -\def\subsubsecentryfonts{\textfonts} - - -\message{environments,} -% @foo ... @end foo. - -% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. -% -% Since these characters are used in examples, it should be an even number of -% \tt widths. Each \tt character is 1en, so two makes it 1em. -% -\def\point{$\star$} -\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} -\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} -\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} -\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} - -% The @error{} command. -% Adapted from the TeXbook's \boxit. -% -\newbox\errorbox -% -{\tentt \global\dimen0 = 3em}% Width of the box. -\dimen2 = .55pt % Thickness of rules -% The text. (`r' is open on the right, `e' somewhat less so on the left.) -\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt} -% -\setbox\errorbox=\hbox to \dimen0{\hfil - \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. - \advance\hsize by -2\dimen2 % Rules. - \vbox{% - \hrule height\dimen2 - \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. - \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. - \kern3pt\vrule width\dimen2}% Space to right. - \hrule height\dimen2} - \hfil} -% -\def\error{\leavevmode\lower.7ex\copy\errorbox} - -% @tex ... @end tex escapes into raw Tex temporarily. -% One exception: @ is still an escape character, so that @end tex works. -% But \@ or @@ will get a plain tex @ character. - -\envdef\tex{% - \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 - \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 - \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie - \catcode `\%=14 - \catcode `\+=\other - \catcode `\"=\other - \catcode `\|=\other - \catcode `\<=\other - \catcode `\>=\other - \escapechar=`\\ - % - \let\b=\ptexb - \let\bullet=\ptexbullet - \let\c=\ptexc - \let\,=\ptexcomma - \let\.=\ptexdot - \let\dots=\ptexdots - \let\equiv=\ptexequiv - \let\!=\ptexexclam - \let\i=\ptexi - \let\indent=\ptexindent - \let\noindent=\ptexnoindent - \let\{=\ptexlbrace - \let\+=\tabalign - \let\}=\ptexrbrace - \let\/=\ptexslash - \let\*=\ptexstar - \let\t=\ptext - \let\frenchspacing=\plainfrenchspacing - % - \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% - \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% - \def\@{@}% -} -% There is no need to define \Etex. - -% Define @lisp ... @end lisp. -% @lisp environment forms a group so it can rebind things, -% including the definition of @end lisp (which normally is erroneous). - -% Amount to narrow the margins by for @lisp. -\newskip\lispnarrowing \lispnarrowing=0.4in - -% This is the definition that ^^M gets inside @lisp, @example, and other -% such environments. \null is better than a space, since it doesn't -% have any width. -\def\lisppar{\null\endgraf} - -% This space is always present above and below environments. -\newskip\envskipamount \envskipamount = 0pt - -% Make spacing and below environment symmetrical. We use \parskip here -% to help in doing that, since in @example-like environments \parskip -% is reset to zero; thus the \afterenvbreak inserts no space -- but the -% start of the next paragraph will insert \parskip. -% -\def\aboveenvbreak{{% - % =10000 instead of <10000 because of a special case in \itemzzz and - % \sectionheading, q.v. - \ifnum \lastpenalty=10000 \else - \advance\envskipamount by \parskip - \endgraf - \ifdim\lastskip<\envskipamount - \removelastskip - % it's not a good place to break if the last penalty was \nobreak - % or better ... - \ifnum\lastpenalty<10000 \penalty-50 \fi - \vskip\envskipamount - \fi - \fi -}} - -\let\afterenvbreak = \aboveenvbreak - -% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will -% also clear it, so that its embedded environments do the narrowing again. -\let\nonarrowing=\relax - -% @cartouche ... @end cartouche: draw rectangle w/rounded corners around -% environment contents. -\font\circle=lcircle10 -\newdimen\circthick -\newdimen\cartouter\newdimen\cartinner -\newskip\normbskip\newskip\normpskip\newskip\normlskip -\circthick=\fontdimen8\circle -% -\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth -\def\ctr{{\hskip 6pt\circle\char'010}} -\def\cbl{{\circle\char'012\hskip -6pt}} -\def\cbr{{\hskip 6pt\circle\char'011}} -\def\carttop{\hbox to \cartouter{\hskip\lskip - \ctl\leaders\hrule height\circthick\hfil\ctr - \hskip\rskip}} -\def\cartbot{\hbox to \cartouter{\hskip\lskip - \cbl\leaders\hrule height\circthick\hfil\cbr - \hskip\rskip}} -% -\newskip\lskip\newskip\rskip - -\envdef\cartouche{% - \ifhmode\par\fi % can't be in the midst of a paragraph. - \startsavinginserts - \lskip=\leftskip \rskip=\rightskip - \leftskip=0pt\rightskip=0pt % we want these *outside*. - \cartinner=\hsize \advance\cartinner by-\lskip - \advance\cartinner by-\rskip - \cartouter=\hsize - \advance\cartouter by 18.4pt % allow for 3pt kerns on either - % side, and for 6pt waste from - % each corner char, and rule thickness - \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip - % Flag to tell @lisp, etc., not to narrow margin. - \let\nonarrowing = t% - \vbox\bgroup - \baselineskip=0pt\parskip=0pt\lineskip=0pt - \carttop - \hbox\bgroup - \hskip\lskip - \vrule\kern3pt - \vbox\bgroup - \kern3pt - \hsize=\cartinner - \baselineskip=\normbskip - \lineskip=\normlskip - \parskip=\normpskip - \vskip -\parskip - \comment % For explanation, see the end of \def\group. -} -\def\Ecartouche{% - \ifhmode\par\fi - \kern3pt - \egroup - \kern3pt\vrule - \hskip\rskip - \egroup - \cartbot - \egroup - \checkinserts -} - - -% This macro is called at the beginning of all the @example variants, -% inside a group. -\def\nonfillstart{% - \aboveenvbreak - \hfuzz = 12pt % Don't be fussy - \sepspaces % Make spaces be word-separators rather than space tokens. - \let\par = \lisppar % don't ignore blank lines - \obeylines % each line of input is a line of output - \parskip = 0pt - \parindent = 0pt - \emergencystretch = 0pt % don't try to avoid overfull boxes - \ifx\nonarrowing\relax - \advance \leftskip by \lispnarrowing - \exdentamount=\lispnarrowing - \else - \let\nonarrowing = \relax - \fi - \let\exdent=\nofillexdent -} - -% If you want all examples etc. small: @set dispenvsize small. -% If you want even small examples the full size: @set dispenvsize nosmall. -% This affects the following displayed environments: -% @example, @display, @format, @lisp -% -\def\smallword{small} -\def\nosmallword{nosmall} -\let\SETdispenvsize\relax -\def\setnormaldispenv{% - \ifx\SETdispenvsize\smallword - \smallexamplefonts \rm - \fi -} -\def\setsmalldispenv{% - \ifx\SETdispenvsize\nosmallword - \else - \smallexamplefonts \rm - \fi -} - -% We often define two environments, @foo and @smallfoo. -% Let's do it by one command: -\def\makedispenv #1#2{ - \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2} - \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2} - \expandafter\let\csname E#1\endcsname \afterenvbreak - \expandafter\let\csname Esmall#1\endcsname \afterenvbreak -} - -% Define two synonyms: -\def\maketwodispenvs #1#2#3{ - \makedispenv{#1}{#3} - \makedispenv{#2}{#3} -} - -% @lisp: indented, narrowed, typewriter font; @example: same as @lisp. -% -% @smallexample and @smalllisp: use smaller fonts. -% Originally contributed by Pavel@xerox. -% -\maketwodispenvs {lisp}{example}{% - \nonfillstart - \tt - \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. - \gobble % eat return -} - -% @display/@smalldisplay: same as @lisp except keep current font. -% -\makedispenv {display}{% - \nonfillstart - \gobble -} - -% @format/@smallformat: same as @display except don't narrow margins. -% -\makedispenv{format}{% - \let\nonarrowing = t% - \nonfillstart - \gobble -} - -% @flushleft: same as @format, but doesn't obey \SETdispenvsize. -\envdef\flushleft{% - \let\nonarrowing = t% - \nonfillstart - \gobble -} -\let\Eflushleft = \afterenvbreak - -% @flushright. -% -\envdef\flushright{% - \let\nonarrowing = t% - \nonfillstart - \advance\leftskip by 0pt plus 1fill - \gobble -} -\let\Eflushright = \afterenvbreak - - -% @quotation does normal linebreaking (hence we can't use \nonfillstart) -% and narrows the margins. We keep \parskip nonzero in general, since -% we're doing normal filling. So, when using \aboveenvbreak and -% \afterenvbreak, temporarily make \parskip 0. -% -\envdef\quotation{% - {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip - \parindent=0pt - % - % @cartouche defines \nonarrowing to inhibit narrowing at next level down. - \ifx\nonarrowing\relax - \advance\leftskip by \lispnarrowing - \advance\rightskip by \lispnarrowing - \exdentamount = \lispnarrowing - \else - \let\nonarrowing = \relax - \fi - \parsearg\quotationlabel -} - -% We have retained a nonzero parskip for the environment, since we're -% doing normal filling. -% -\def\Equotation{% - \par - \ifx\quotationauthor\undefined\else - % indent a bit. - \leftline{\kern 2\leftskip \sl ---\quotationauthor}% - \fi - {\parskip=0pt \afterenvbreak}% -} - -% If we're given an argument, typeset it in bold with a colon after. -\def\quotationlabel#1{% - \def\temp{#1}% - \ifx\temp\empty \else - {\bf #1: }% - \fi -} - - -% LaTeX-like @verbatim...@end verbatim and @verb{...} -% If we want to allow any as delimiter, -% we need the curly braces so that makeinfo sees the @verb command, eg: -% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org -% -% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. -% -% [Knuth] p.344; only we need to do the other characters Texinfo sets -% active too. Otherwise, they get lost as the first character on a -% verbatim line. -\def\dospecials{% - \do\ \do\\\do\{\do\}\do\$\do\&% - \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% - \do\<\do\>\do\|\do\@\do+\do\"% -} -% -% [Knuth] p. 380 -\def\uncatcodespecials{% - \def\do##1{\catcode`##1=\other}\dospecials} -% -% [Knuth] pp. 380,381,391 -% Disable Spanish ligatures ?` and !` of \tt font -\begingroup - \catcode`\`=\active\gdef`{\relax\lq} -\endgroup -% -% Setup for the @verb command. -% -% Eight spaces for a tab -\begingroup - \catcode`\^^I=\active - \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} -\endgroup -% -\def\setupverb{% - \tt % easiest (and conventionally used) font for verbatim - \def\par{\leavevmode\endgraf}% - \catcode`\`=\active - \tabeightspaces - % Respect line breaks, - % print special symbols as themselves, and - % make each space count - % must do in this order: - \obeylines \uncatcodespecials \sepspaces -} - -% Setup for the @verbatim environment -% -% Real tab expansion -\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount -% -\def\starttabbox{\setbox0=\hbox\bgroup} -\begingroup - \catcode`\^^I=\active - \gdef\tabexpand{% - \catcode`\^^I=\active - \def^^I{\leavevmode\egroup - \dimen0=\wd0 % the width so far, or since the previous tab - \divide\dimen0 by\tabw - \multiply\dimen0 by\tabw % compute previous multiple of \tabw - \advance\dimen0 by\tabw % advance to next multiple of \tabw - \wd0=\dimen0 \box0 \starttabbox - }% - } -\endgroup -\def\setupverbatim{% - \let\nonarrowing = t% - \nonfillstart - % Easiest (and conventionally used) font for verbatim - \tt - \def\par{\leavevmode\egroup\box0\endgraf}% - \catcode`\`=\active - \tabexpand - % Respect line breaks, - % print special symbols as themselves, and - % make each space count - % must do in this order: - \obeylines \uncatcodespecials \sepspaces - \everypar{\starttabbox}% -} - -% Do the @verb magic: verbatim text is quoted by unique -% delimiter characters. Before first delimiter expect a -% right brace, after last delimiter expect closing brace: -% -% \def\doverb'{'#1'}'{#1} -% -% [Knuth] p. 382; only eat outer {} -\begingroup - \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other - \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] -\endgroup -% -\def\verb{\begingroup\setupverb\doverb} -% -% -% Do the @verbatim magic: define the macro \doverbatim so that -% the (first) argument ends when '@end verbatim' is reached, ie: -% -% \def\doverbatim#1@end verbatim{#1} -% -% For Texinfo it's a lot easier than for LaTeX, -% because texinfo's \verbatim doesn't stop at '\end{verbatim}': -% we need not redefine '\', '{' and '}'. -% -% Inspired by LaTeX's verbatim command set [latex.ltx] -% -\begingroup - \catcode`\ =\active - \obeylines % - % ignore everything up to the first ^^M, that's the newline at the end - % of the @verbatim input line itself. Otherwise we get an extra blank - % line in the output. - \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% - % We really want {...\end verbatim} in the body of the macro, but - % without the active space; thus we have to use \xdef and \gobble. -\endgroup -% -\envdef\verbatim{% - \setupverbatim\doverbatim -} -\let\Everbatim = \afterenvbreak - - -% @verbatiminclude FILE - insert text of file in verbatim environment. -% -\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} -% -\def\doverbatiminclude#1{% - {% - \makevalueexpandable - \setupverbatim - \input #1 - \afterenvbreak - }% -} - -% @copying ... @end copying. -% Save the text away for @insertcopying later. -% -% We save the uninterpreted tokens, rather than creating a box. -% Saving the text in a box would be much easier, but then all the -% typesetting commands (@smallbook, font changes, etc.) have to be done -% beforehand -- and a) we want @copying to be done first in the source -% file; b) letting users define the frontmatter in as flexible order as -% possible is very desirable. -% -\def\copying{\checkenv{}\begingroup\scanargctxt\docopying} -\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} -% -\def\insertcopying{% - \begingroup - \parindent = 0pt % paragraph indentation looks wrong on title page - \scanexp\copyingtext - \endgroup -} - -\message{defuns,} -% @defun etc. - -\newskip\defbodyindent \defbodyindent=.4in -\newskip\defargsindent \defargsindent=50pt -\newskip\deflastargmargin \deflastargmargin=18pt - -% Start the processing of @deffn: -\def\startdefun{% - \ifnum\lastpenalty<10000 - \medbreak - \else - % If there are two @def commands in a row, we'll have a \nobreak, - % which is there to keep the function description together with its - % header. But if there's nothing but headers, we need to allow a - % break somewhere. Check specifically for penalty 10002, inserted - % by \defargscommonending, instead of 10000, since the sectioning - % commands also insert a nobreak penalty, and we don't want to allow - % a break between a section heading and a defun. - % - \ifnum\lastpenalty=10002 \penalty2000 \fi - % - % Similarly, after a section heading, do not allow a break. - % But do insert the glue. - \medskip % preceded by discardable penalty, so not a breakpoint - \fi - % - \parindent=0in - \advance\leftskip by \defbodyindent - \exdentamount=\defbodyindent -} - -\def\dodefunx#1{% - % First, check whether we are in the right environment: - \checkenv#1% - % - % As above, allow line break if we have multiple x headers in a row. - % It's not a great place, though. - \ifnum\lastpenalty=10002 \penalty3000 \fi - % - % And now, it's time to reuse the body of the original defun: - \expandafter\gobbledefun#1% -} -\def\gobbledefun#1\startdefun{} - -% \printdefunline \deffnheader{text} -% -\def\printdefunline#1#2{% - \begingroup - % call \deffnheader: - #1#2 \endheader - % common ending: - \interlinepenalty = 10000 - \advance\rightskip by 0pt plus 1fil - \endgraf - \nobreak\vskip -\parskip - \penalty 10002 % signal to \startdefun and \dodefunx - % Some of the @defun-type tags do not enable magic parentheses, - % rendering the following check redundant. But we don't optimize. - \checkparencounts - \endgroup -} - -\def\Edefun{\endgraf\medbreak} - -% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; -% the only thing remainnig is to define \deffnheader. -% -\def\makedefun#1{% - \expandafter\let\csname E#1\endcsname = \Edefun - \edef\temp{\noexpand\domakedefun - \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% - \temp -} - -% \domakedefun \deffn \deffnx \deffnheader -% -% Define \deffn and \deffnx, without parameters. -% \deffnheader has to be defined explicitly. -% -\def\domakedefun#1#2#3{% - \envdef#1{% - \startdefun - \parseargusing\activeparens{\printdefunline#3}% - }% - \def#2{\dodefunx#1}% - \def#3% -} - -%%% Untyped functions: - -% @deffn category name args -\makedefun{deffn}{\deffngeneral{}} - -% @deffn category class name args -\makedefun{defop}#1 {\defopon{#1\ \putwordon}} - -% \defopon {category on}class name args -\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } - -% \deffngeneral {subind}category name args -% -\def\deffngeneral#1#2 #3 #4\endheader{% - % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. - \dosubind{fn}{\code{#3}}{#1}% - \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% -} - -%%% Typed functions: - -% @deftypefn category type name args -\makedefun{deftypefn}{\deftypefngeneral{}} - -% @deftypeop category class type name args -\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} - -% \deftypeopon {category on}class type name args -\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } - -% \deftypefngeneral {subind}category type name args -% -\def\deftypefngeneral#1#2 #3 #4 #5\endheader{% - \dosubind{fn}{\code{#4}}{#1}% - \defname{#2}{#3}{#4}\defunargs{#5\unskip}% -} - -%%% Typed variables: - -% @deftypevr category type var args -\makedefun{deftypevr}{\deftypecvgeneral{}} - -% @deftypecv category class type var args -\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} - -% \deftypecvof {category of}class type var args -\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } - -% \deftypecvgeneral {subind}category type var args -% -\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% - \dosubind{vr}{\code{#4}}{#1}% - \defname{#2}{#3}{#4}\defunargs{#5\unskip}% -} - -%%% Untyped variables: - -% @defvr category var args -\makedefun{defvr}#1 {\deftypevrheader{#1} {} } - -% @defcv category class var args -\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} - -% \defcvof {category of}class var args -\def\defcvof#1#2 {\deftypecvof{#1}#2 {} } - -%%% Type: -% @deftp category name args -\makedefun{deftp}#1 #2 #3\endheader{% - \doind{tp}{\code{#2}}% - \defname{#1}{}{#2}\defunargs{#3\unskip}% -} - -% Remaining @defun-like shortcuts: -\makedefun{defun}{\deffnheader{\putwordDeffunc} } -\makedefun{defmac}{\deffnheader{\putwordDefmac} } -\makedefun{defspec}{\deffnheader{\putwordDefspec} } -\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } -\makedefun{defvar}{\defvrheader{\putwordDefvar} } -\makedefun{defopt}{\defvrheader{\putwordDefopt} } -\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } -\makedefun{defmethod}{\defopon\putwordMethodon} -\makedefun{deftypemethod}{\deftypeopon\putwordMethodon} -\makedefun{defivar}{\defcvof\putwordInstanceVariableof} -\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} - -% \defname, which formats the name of the @def (not the args). -% #1 is the category, such as "Function". -% #2 is the return type, if any. -% #3 is the function name. -% -% We are followed by (but not passed) the arguments, if any. -% -\def\defname#1#2#3{% - % Get the values of \leftskip and \rightskip as they were outside the @def... - \advance\leftskip by -\defbodyindent - % - % How we'll format the type name. Putting it in brackets helps - % distinguish it from the body text that may end up on the next line - % just below it. - \def\temp{#1}% - \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} - % - % Figure out line sizes for the paragraph shape. - % The first line needs space for \box0; but if \rightskip is nonzero, - % we need only space for the part of \box0 which exceeds it: - \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip - % The continuations: - \dimen2=\hsize \advance\dimen2 by -\defargsindent - % (plain.tex says that \dimen1 should be used only as global.) - \parshape 2 0in \dimen0 \defargsindent \dimen2 - % - % Put the type name to the right margin. - \noindent - \hbox to 0pt{% - \hfil\box0 \kern-\hsize - % \hsize has to be shortened this way: - \kern\leftskip - % Intentionally do not respect \rightskip, since we need the space. - }% - % - % Allow all lines to be underfull without complaint: - \tolerance=10000 \hbadness=10000 - \exdentamount=\defbodyindent - {% - % defun fonts. We use typewriter by default (used to be bold) because: - % . we're printing identifiers, they should be in tt in principle. - % . in languages with many accents, such as Czech or French, it's - % common to leave accents off identifiers. The result looks ok in - % tt, but exceedingly strange in rm. - % . we don't want -- and --- to be treated as ligatures. - % . this still does not fix the ?` and !` ligatures, but so far no - % one has made identifiers using them :). - \df \tt - \def\temp{#2}% return value type - \ifx\temp\empty\else \tclose{\temp} \fi - #3% output function name - }% - {\rm\enskip}% hskip 0.5 em of \tenrm - % - \boldbrax - % arguments will be output next, if any. -} - -% Print arguments in slanted roman (not ttsl), inconsistently with using -% tt for the name. This is because literal text is sometimes needed in -% the argument list (groff manual), and ttsl and tt are not very -% distinguishable. Prevent hyphenation at `-' chars. -% -\def\defunargs#1{% - % use sl by default (not ttsl), - % tt for the names. - \df \sl \hyphenchar\font=0 - % - % On the other hand, if an argument has two dashes (for instance), we - % want a way to get ttsl. Let's try @var for that. - \let\var=\ttslanted - #1% - \sl\hyphenchar\font=45 -} - -% We want ()&[] to print specially on the defun line. -% -\def\activeparens{% - \catcode`\(=\active \catcode`\)=\active - \catcode`\[=\active \catcode`\]=\active - \catcode`\&=\active -} - -% Make control sequences which act like normal parenthesis chars. -\let\lparen = ( \let\rparen = ) - -% Be sure that we always have a definition for `(', etc. For example, -% if the fn name has parens in it, \boldbrax will not be in effect yet, -% so TeX would otherwise complain about undefined control sequence. -{ - \activeparens - \global\let(=\lparen \global\let)=\rparen - \global\let[=\lbrack \global\let]=\rbrack - \global\let& = \& - - \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} - \gdef\magicamp{\let&=\amprm} -} - -\newcount\parencount - -% If we encounter &foo, then turn on ()-hacking afterwards -\newif\ifampseen -\def\amprm#1 {\ampseentrue{\bf\ }} - -\def\parenfont{% - \ifampseen - % At the first level, print parens in roman, - % otherwise use the default font. - \ifnum \parencount=1 \rm \fi - \else - % The \sf parens (in \boldbrax) actually are a little bolder than - % the contained text. This is especially needed for [ and ] . - \sf - \fi -} -\def\infirstlevel#1{% - \ifampseen - \ifnum\parencount=1 - #1% - \fi - \fi -} -\def\bfafterword#1 {#1 \bf} - -\def\opnr{% - \global\advance\parencount by 1 - {\parenfont(}% - \infirstlevel \bfafterword -} -\def\clnr{% - {\parenfont)}% - \infirstlevel \sl - \global\advance\parencount by -1 -} - -\newcount\brackcount -\def\lbrb{% - \global\advance\brackcount by 1 - {\bf[}% -} -\def\rbrb{% - {\bf]}% - \global\advance\brackcount by -1 -} - -\def\checkparencounts{% - \ifnum\parencount=0 \else \badparencount \fi - \ifnum\brackcount=0 \else \badbrackcount \fi -} -\def\badparencount{% - \errmessage{Unbalanced parentheses in @def}% - \global\parencount=0 -} -\def\badbrackcount{% - \errmessage{Unbalanced square braces in @def}% - \global\brackcount=0 -} - - -\message{macros,} -% @macro. - -% To do this right we need a feature of e-TeX, \scantokens, -% which we arrange to emulate with a temporary file in ordinary TeX. -\ifx\eTeXversion\undefined - \newwrite\macscribble - \def\scantokens#1{% - \toks0={#1}% - \immediate\openout\macscribble=\jobname.tmp - \immediate\write\macscribble{\the\toks0}% - \immediate\closeout\macscribble - \input \jobname.tmp - } -\fi - -\def\scanmacro#1{% - \begingroup - \newlinechar`\^^M - \let\xeatspaces\eatspaces - % Undo catcode changes of \startcontents and \doprintindex - % When called from @insertcopying or (short)caption, we need active - % backslash to get it printed correctly. Previously, we had - % \catcode`\\=\other instead. We'll see whether a problem appears - % with macro expansion. --kasal, 19aug04 - \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ - % ... and \example - \spaceisspace - % - % Append \endinput to make sure that TeX does not see the ending newline. - % - % I've verified that it is necessary both for e-TeX and for ordinary TeX - % --kasal, 29nov03 - \scantokens{#1\endinput}% - \endgroup -} - -\def\scanexp#1{% - \edef\temp{\noexpand\scanmacro{#1}}% - \temp -} - -\newcount\paramno % Count of parameters -\newtoks\macname % Macro name -\newif\ifrecursive % Is it recursive? - -% List of all defined macros in the form -% \definedummyword\macro1\definedummyword\macro2... -% Currently is also contains all @aliases; the list can be split -% if there is a need. -\def\macrolist{} - -% Add the macro to \macrolist -\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} -\def\addtomacrolistxxx#1{% - \toks0 = \expandafter{\macrolist\definedummyword#1}% - \xdef\macrolist{\the\toks0}% -} - -% Utility routines. -% This does \let #1 = #2, with \csnames; that is, -% \let \csname#1\endcsname = \csname#2\endcsname -% (except of course we have to play expansion games). -% -\def\cslet#1#2{% - \expandafter\let - \csname#1\expandafter\endcsname - \csname#2\endcsname -} - -% Trim leading and trailing spaces off a string. -% Concepts from aro-bend problem 15 (see CTAN). -{\catcode`\@=11 -\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} -\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} -\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} -\def\unbrace#1{#1} -\unbrace{\gdef\trim@@@ #1 } #2@{#1} -} - -% Trim a single trailing ^^M off a string. -{\catcode`\^^M=\other \catcode`\Q=3% -\gdef\eatcr #1{\eatcra #1Q^^MQ}% -\gdef\eatcra#1^^MQ{\eatcrb#1Q}% -\gdef\eatcrb#1Q#2Q{#1}% -} - -% Macro bodies are absorbed as an argument in a context where -% all characters are catcode 10, 11 or 12, except \ which is active -% (as in normal texinfo). It is necessary to change the definition of \. - -% It's necessary to have hard CRs when the macro is executed. This is -% done by making ^^M (\endlinechar) catcode 12 when reading the macro -% body, and then making it the \newlinechar in \scanmacro. - -\def\scanctxt{% - \catcode`\"=\other - \catcode`\+=\other - \catcode`\<=\other - \catcode`\>=\other - \catcode`\@=\other - \catcode`\^=\other - \catcode`\_=\other - \catcode`\|=\other - \catcode`\~=\other -} - -\def\scanargctxt{% - \scanctxt - \catcode`\\=\other - \catcode`\^^M=\other -} - -\def\macrobodyctxt{% - \scanctxt - \catcode`\{=\other - \catcode`\}=\other - \catcode`\^^M=\other - \usembodybackslash -} - -\def\macroargctxt{% - \scanctxt - \catcode`\\=\other -} - -% \mbodybackslash is the definition of \ in @macro bodies. -% It maps \foo\ => \csname macarg.foo\endcsname => #N -% where N is the macro parameter number. -% We define \csname macarg.\endcsname to be \realbackslash, so -% \\ in macro replacement text gets you a backslash. - -{\catcode`@=0 @catcode`@\=@active - @gdef@usembodybackslash{@let\=@mbodybackslash} - @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} -} -\expandafter\def\csname macarg.\endcsname{\realbackslash} - -\def\macro{\recursivefalse\parsearg\macroxxx} -\def\rmacro{\recursivetrue\parsearg\macroxxx} - -\def\macroxxx#1{% - \getargs{#1}% now \macname is the macname and \argl the arglist - \ifx\argl\empty % no arguments - \paramno=0% - \else - \expandafter\parsemargdef \argl;% - \fi - \if1\csname ismacro.\the\macname\endcsname - \message{Warning: redefining \the\macname}% - \else - \expandafter\ifx\csname \the\macname\endcsname \relax - \else \errmessage{Macro name \the\macname\space already defined}\fi - \global\cslet{macsave.\the\macname}{\the\macname}% - \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% - \addtomacrolist{\the\macname}% - \fi - \begingroup \macrobodyctxt - \ifrecursive \expandafter\parsermacbody - \else \expandafter\parsemacbody - \fi} - -\parseargdef\unmacro{% - \if1\csname ismacro.#1\endcsname - \global\cslet{#1}{macsave.#1}% - \global\expandafter\let \csname ismacro.#1\endcsname=0% - % Remove the macro name from \macrolist: - \begingroup - \expandafter\let\csname#1\endcsname \relax - \let\definedummyword\unmacrodo - \xdef\macrolist{\macrolist}% - \endgroup - \else - \errmessage{Macro #1 not defined}% - \fi -} - -% Called by \do from \dounmacro on each macro. The idea is to omit any -% macro definitions that have been changed to \relax. -% -\def\unmacrodo#1{% - \ifx #1\relax - % remove this - \else - \noexpand\definedummyword \noexpand#1% - \fi -} - -% This makes use of the obscure feature that if the last token of a -% is #, then the preceding argument is delimited by -% an opening brace, and that opening brace is not consumed. -\def\getargs#1{\getargsxxx#1{}} -\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} -\def\getmacname #1 #2\relax{\macname={#1}} -\def\getmacargs#1{\def\argl{#1}} - -% Parse the optional {params} list. Set up \paramno and \paramlist -% so \defmacro knows what to do. Define \macarg.blah for each blah -% in the params list, to be ##N where N is the position in that list. -% That gets used by \mbodybackslash (above). - -% We need to get `macro parameter char #' into several definitions. -% The technique used is stolen from LaTeX: let \hash be something -% unexpandable, insert that wherever you need a #, and then redefine -% it to # just before using the token list produced. -% -% The same technique is used to protect \eatspaces till just before -% the macro is used. - -\def\parsemargdef#1;{\paramno=0\def\paramlist{}% - \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} -\def\parsemargdefxxx#1,{% - \if#1;\let\next=\relax - \else \let\next=\parsemargdefxxx - \advance\paramno by 1% - \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname - {\xeatspaces{\hash\the\paramno}}% - \edef\paramlist{\paramlist\hash\the\paramno,}% - \fi\next} - -% These two commands read recursive and nonrecursive macro bodies. -% (They're different since rec and nonrec macros end differently.) - -\long\def\parsemacbody#1@end macro% -{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% -\long\def\parsermacbody#1@end rmacro% -{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% - -% This defines the macro itself. There are six cases: recursive and -% nonrecursive macros of zero, one, and many arguments. -% Much magic with \expandafter here. -% \xdef is used so that macro definitions will survive the file -% they're defined in; @include reads the file inside a group. -\def\defmacro{% - \let\hash=##% convert placeholders to macro parameter chars - \ifrecursive - \ifcase\paramno - % 0 - \expandafter\xdef\csname\the\macname\endcsname{% - \noexpand\scanmacro{\temp}}% - \or % 1 - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\braceorline - \expandafter\noexpand\csname\the\macname xxx\endcsname}% - \expandafter\xdef\csname\the\macname xxx\endcsname##1{% - \egroup\noexpand\scanmacro{\temp}}% - \else % many - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\csname\the\macname xx\endcsname}% - \expandafter\xdef\csname\the\macname xx\endcsname##1{% - \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% - \expandafter\expandafter - \expandafter\xdef - \expandafter\expandafter - \csname\the\macname xxx\endcsname - \paramlist{\egroup\noexpand\scanmacro{\temp}}% - \fi - \else - \ifcase\paramno - % 0 - \expandafter\xdef\csname\the\macname\endcsname{% - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \or % 1 - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\braceorline - \expandafter\noexpand\csname\the\macname xxx\endcsname}% - \expandafter\xdef\csname\the\macname xxx\endcsname##1{% - \egroup - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \else % many - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \expandafter\noexpand\csname\the\macname xx\endcsname}% - \expandafter\xdef\csname\the\macname xx\endcsname##1{% - \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% - \expandafter\expandafter - \expandafter\xdef - \expandafter\expandafter - \csname\the\macname xxx\endcsname - \paramlist{% - \egroup - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \fi - \fi} - -\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} - -% \braceorline decides whether the next nonwhitespace character is a -% {. If so it reads up to the closing }, if not, it reads the whole -% line. Whatever was read is then fed to the next control sequence -% as an argument (by \parsebrace or \parsearg) -\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx} -\def\braceorlinexxx{% - \ifx\nchar\bgroup\else - \expandafter\parsearg - \fi \next} - - -% @alias. -% We need some trickery to remove the optional spaces around the equal -% sign. Just make them active and then expand them all to nothing. -\def\alias{\parseargusing\obeyspaces\aliasxxx} -\def\aliasxxx #1{\aliasyyy#1\relax} -\def\aliasyyy #1=#2\relax{% - {% - \expandafter\let\obeyedspace=\empty - \addtomacrolist{#1}% - \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% - }% - \next -} - - -\message{cross references,} - -\newwrite\auxfile - -\newif\ifhavexrefs % True if xref values are known. -\newif\ifwarnedxrefs % True if we warned once that they aren't known. - -% @inforef is relatively simple. -\def\inforef #1{\inforefzzz #1,,,,**} -\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, - node \samp{\ignorespaces#1{}}} - -% @node's only job in TeX is to define \lastnode, which is used in -% cross-references. The @node line might or might not have commas, and -% might or might not have spaces before the first comma, like: -% @node foo , bar , ... -% We don't want such trailing spaces in the node name. -% -\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} -% -% also remove a trailing comma, in case of something like this: -% @node Help-Cross, , , Cross-refs -\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} -\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} - -\let\nwnode=\node -\let\lastnode=\empty - -% Write a cross-reference definition for the current node. #1 is the -% type (Ynumbered, Yappendix, Ynothing). -% -\def\donoderef#1{% - \ifx\lastnode\empty\else - \setref{\lastnode}{#1}% - \global\let\lastnode=\empty - \fi -} - -% @anchor{NAME} -- define xref target at arbitrary point. -% -\newcount\savesfregister -% -\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} -\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} -\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} - -% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an -% anchor), which consists of three parts: -% 1) NAME-title - the current sectioning name taken from \thissection, -% or the anchor name. -% 2) NAME-snt - section number and type, passed as the SNT arg, or -% empty for anchors. -% 3) NAME-pg - the page number. -% -% This is called from \donoderef, \anchor, and \dofloat. In the case of -% floats, there is an additional part, which is not written here: -% 4) NAME-lof - the text as it should appear in a @listoffloats. -% -\def\setref#1#2{% - \pdfmkdest{#1}% - \iflinks - {% - \atdummies % preserve commands, but don't expand them - \edef\writexrdef##1##2{% - \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef - ##1}{##2}}% these are parameters of \writexrdef - }% - \toks0 = \expandafter{\thissection}% - \immediate \writexrdef{title}{\the\toks0 }% - \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. - \writexrdef{pg}{\folio}% will be written later, during \shipout - }% - \fi -} - -% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is -% the node name, #2 the name of the Info cross-reference, #3 the printed -% node name, #4 the name of the Info file, #5 the name of the printed -% manual. All but the node name can be omitted. -% -\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} -\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} -\def\ref#1{\xrefX[#1,,,,,,,]} -\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup - \unsepspaces - \def\printedmanual{\ignorespaces #5}% - \def\printedrefname{\ignorespaces #3}% - \setbox1=\hbox{\printedmanual\unskip}% - \setbox0=\hbox{\printedrefname\unskip}% - \ifdim \wd0 = 0pt - % No printed node name was explicitly given. - \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax - % Use the node name inside the square brackets. - \def\printedrefname{\ignorespaces #1}% - \else - % Use the actual chapter/section title appear inside - % the square brackets. Use the real section title if we have it. - \ifdim \wd1 > 0pt - % It is in another manual, so we don't have it. - \def\printedrefname{\ignorespaces #1}% - \else - \ifhavexrefs - % We know the real title if we have the xref values. - \def\printedrefname{\refx{#1-title}{}}% - \else - % Otherwise just copy the Info node name. - \def\printedrefname{\ignorespaces #1}% - \fi% - \fi - \fi - \fi - % - % Make link in pdf output. - \ifpdf - \leavevmode - \getfilename{#4}% - {\turnoffactive - % See comments at \activebackslashdouble. - {\activebackslashdouble \xdef\pdfxrefdest{#1}% - \backslashparens\pdfxrefdest}% - % - \ifnum\filenamelength>0 - \startlink attr{/Border [0 0 0]}% - goto file{\the\filename.pdf} name{\pdfxrefdest}% - \else - \startlink attr{/Border [0 0 0]}% - goto name{\pdfmkpgn{\pdfxrefdest}}% - \fi - }% - \linkcolor - \fi - % - % Float references are printed completely differently: "Figure 1.2" - % instead of "[somenode], p.3". We distinguish them by the - % LABEL-title being set to a magic string. - {% - % Have to otherify everything special to allow the \csname to - % include an _ in the xref name, etc. - \indexnofonts - \turnoffactive - \expandafter\global\expandafter\let\expandafter\Xthisreftitle - \csname XR#1-title\endcsname - }% - \iffloat\Xthisreftitle - % If the user specified the print name (third arg) to the ref, - % print it instead of our usual "Figure 1.2". - \ifdim\wd0 = 0pt - \refx{#1-snt}% - \else - \printedrefname - \fi - % - % if the user also gave the printed manual name (fifth arg), append - % "in MANUALNAME". - \ifdim \wd1 > 0pt - \space \putwordin{} \cite{\printedmanual}% - \fi - \else - % node/anchor (non-float) references. - % - % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not - % insert empty discretionaries after hyphens, which means that it will - % not find a line break at a hyphen in a node names. Since some manuals - % are best written with fairly long node names, containing hyphens, this - % is a loss. Therefore, we give the text of the node name again, so it - % is as if TeX is seeing it for the first time. - \ifdim \wd1 > 0pt - \putwordsection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% - \else - % _ (for example) has to be the character _ for the purposes of the - % control sequence corresponding to the node, but it has to expand - % into the usual \leavevmode...\vrule stuff for purposes of - % printing. So we \turnoffactive for the \refx-snt, back on for the - % printing, back off for the \refx-pg. - {\turnoffactive - % Only output a following space if the -snt ref is nonempty; for - % @unnumbered and @anchor, it won't be. - \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% - \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi - }% - % output the `[mynode]' via a macro so it can be overridden. - \xrefprintnodename\printedrefname - % - % But we always want a comma and a space: - ,\space - % - % output the `page 3'. - \turnoffactive \putwordpage\tie\refx{#1-pg}{}% - \fi - \fi - \endlink -\endgroup} - -% This macro is called from \xrefX for the `[nodename]' part of xref -% output. It's a separate macro only so it can be changed more easily, -% since square brackets don't work well in some documents. Particularly -% one that Bob is working on :). -% -\def\xrefprintnodename#1{[#1]} - -% Things referred to by \setref. -% -\def\Ynothing{} -\def\Yomitfromtoc{} -\def\Ynumbered{% - \ifnum\secno=0 - \putwordChapter@tie \the\chapno - \else \ifnum\subsecno=0 - \putwordSection@tie \the\chapno.\the\secno - \else \ifnum\subsubsecno=0 - \putwordSection@tie \the\chapno.\the\secno.\the\subsecno - \else - \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno - \fi\fi\fi -} -\def\Yappendix{% - \ifnum\secno=0 - \putwordAppendix@tie @char\the\appendixno{}% - \else \ifnum\subsecno=0 - \putwordSection@tie @char\the\appendixno.\the\secno - \else \ifnum\subsubsecno=0 - \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno - \else - \putwordSection@tie - @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno - \fi\fi\fi -} - -% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. -% If its value is nonempty, SUFFIX is output afterward. -% -\def\refx#1#2{% - {% - \indexnofonts - \otherbackslash - \expandafter\global\expandafter\let\expandafter\thisrefX - \csname XR#1\endcsname - }% - \ifx\thisrefX\relax - % If not defined, say something at least. - \angleleft un\-de\-fined\angleright - \iflinks - \ifhavexrefs - \message{\linenumber Undefined cross reference `#1'.}% - \else - \ifwarnedxrefs\else - \global\warnedxrefstrue - \message{Cross reference values unknown; you must run TeX again.}% - \fi - \fi - \fi - \else - % It's defined, so just use it. - \thisrefX - \fi - #2% Output the suffix in any case. -} - -% This is the macro invoked by entries in the aux file. Usually it's -% just a \def (we prepend XR to the control sequence name to avoid -% collisions). But if this is a float type, we have more work to do. -% -\def\xrdef#1#2{% - \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value. - % - % Was that xref control sequence that we just defined for a float? - \expandafter\iffloat\csname XR#1\endcsname - % it was a float, and we have the (safe) float type in \iffloattype. - \expandafter\let\expandafter\floatlist - \csname floatlist\iffloattype\endcsname - % - % Is this the first time we've seen this float type? - \expandafter\ifx\floatlist\relax - \toks0 = {\do}% yes, so just \do - \else - % had it before, so preserve previous elements in list. - \toks0 = \expandafter{\floatlist\do}% - \fi - % - % Remember this xref in the control sequence \floatlistFLOATTYPE, - % for later use in \listoffloats. - \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0{#1}}% - \fi -} - -% Read the last existing aux file, if any. No error if none exists. -% -\def\tryauxfile{% - \openin 1 \jobname.aux - \ifeof 1 \else - \readdatafile{aux}% - \global\havexrefstrue - \fi - \closein 1 -} - -\def\setupdatafile{% - \catcode`\^^@=\other - \catcode`\^^A=\other - \catcode`\^^B=\other - \catcode`\^^C=\other - \catcode`\^^D=\other - \catcode`\^^E=\other - \catcode`\^^F=\other - \catcode`\^^G=\other - \catcode`\^^H=\other - \catcode`\^^K=\other - \catcode`\^^L=\other - \catcode`\^^N=\other - \catcode`\^^P=\other - \catcode`\^^Q=\other - \catcode`\^^R=\other - \catcode`\^^S=\other - \catcode`\^^T=\other - \catcode`\^^U=\other - \catcode`\^^V=\other - \catcode`\^^W=\other - \catcode`\^^X=\other - \catcode`\^^Z=\other - \catcode`\^^[=\other - \catcode`\^^\=\other - \catcode`\^^]=\other - \catcode`\^^^=\other - \catcode`\^^_=\other - % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. - % in xref tags, i.e., node names. But since ^^e4 notation isn't - % supported in the main text, it doesn't seem desirable. Furthermore, - % that is not enough: for node names that actually contain a ^ - % character, we would end up writing a line like this: 'xrdef {'hat - % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first - % argument, and \hat is not an expandable control sequence. It could - % all be worked out, but why? Either we support ^^ or we don't. - % - % The other change necessary for this was to define \auxhat: - % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter - % and then to call \auxhat in \setq. - % - \catcode`\^=\other - % - % Special characters. Should be turned off anyway, but... - \catcode`\~=\other - \catcode`\[=\other - \catcode`\]=\other - \catcode`\"=\other - \catcode`\_=\other - \catcode`\|=\other - \catcode`\<=\other - \catcode`\>=\other - \catcode`\$=\other - \catcode`\#=\other - \catcode`\&=\other - \catcode`\%=\other - \catcode`+=\other % avoid \+ for paranoia even though we've turned it off - % - % This is to support \ in node names and titles, since the \ - % characters end up in a \csname. It's easier than - % leaving it active and making its active definition an actual \ - % character. What I don't understand is why it works in the *value* - % of the xrdef. Seems like it should be a catcode12 \, and that - % should not typeset properly. But it works, so I'm moving on for - % now. --karl, 15jan04. - \catcode`\\=\other - % - % Make the characters 128-255 be printing characters. - {% - \count1=128 - \def\loop{% - \catcode\count1=\other - \advance\count1 by 1 - \ifnum \count1<256 \loop \fi - }% - }% - % - % @ is our escape character in .aux files, and we need braces. - \catcode`\{=1 - \catcode`\}=2 - \catcode`\@=0 -} - -\def\readdatafile#1{% -\begingroup - \setupdatafile - \input\jobname.#1 -\endgroup} - -\message{insertions,} -% including footnotes. - -\newcount \footnoteno - -% The trailing space in the following definition for supereject is -% vital for proper filling; pages come out unaligned when you do a -% pagealignmacro call if that space before the closing brace is -% removed. (Generally, numeric constants should always be followed by a -% space to prevent strange expansion errors.) -\def\supereject{\par\penalty -20000\footnoteno =0 } - -% @footnotestyle is meaningful for info output only. -\let\footnotestyle=\comment - -{\catcode `\@=11 -% -% Auto-number footnotes. Otherwise like plain. -\gdef\footnote{% - \let\indent=\ptexindent - \let\noindent=\ptexnoindent - \global\advance\footnoteno by \@ne - \edef\thisfootno{$^{\the\footnoteno}$}% - % - % In case the footnote comes at the end of a sentence, preserve the - % extra spacing after we do the footnote number. - \let\@sf\empty - \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi - % - % Remove inadvertent blank space before typesetting the footnote number. - \unskip - \thisfootno\@sf - \dofootnote -}% - -% Don't bother with the trickery in plain.tex to not require the -% footnote text as a parameter. Our footnotes don't need to be so general. -% -% Oh yes, they do; otherwise, @ifset (and anything else that uses -% \parseargline) fails inside footnotes because the tokens are fixed when -% the footnote is read. --karl, 16nov96. -% -\gdef\dofootnote{% - \insert\footins\bgroup - % We want to typeset this text as a normal paragraph, even if the - % footnote reference occurs in (for example) a display environment. - % So reset some parameters. - \hsize=\pagewidth - \interlinepenalty\interfootnotelinepenalty - \splittopskip\ht\strutbox % top baseline for broken footnotes - \splitmaxdepth\dp\strutbox - \floatingpenalty\@MM - \leftskip\z@skip - \rightskip\z@skip - \spaceskip\z@skip - \xspaceskip\z@skip - \parindent\defaultparindent - % - \smallfonts \rm - % - % Because we use hanging indentation in footnotes, a @noindent appears - % to exdent this text, so make it be a no-op. makeinfo does not use - % hanging indentation so @noindent can still be needed within footnote - % text after an @example or the like (not that this is good style). - \let\noindent = \relax - % - % Hang the footnote text off the number. Use \everypar in case the - % footnote extends for more than one paragraph. - \everypar = {\hang}% - \textindent{\thisfootno}% - % - % Don't crash into the line above the footnote text. Since this - % expands into a box, it must come within the paragraph, lest it - % provide a place where TeX can split the footnote. - \footstrut - \futurelet\next\fo@t -} -}%end \catcode `\@=11 - -% In case a @footnote appears in a vbox, save the footnote text and create -% the real \insert just after the vbox finished. Otherwise, the insertion -% would be lost. -% Similarily, if a @footnote appears inside an alignment, save the footnote -% text to a box and make the \insert when a row of the table is finished. -% And the same can be done for other insert classes. --kasal, 16nov03. - -% Replace the \insert primitive by a cheating macro. -% Deeper inside, just make sure that the saved insertions are not spilled -% out prematurely. -% -\def\startsavinginserts{% - \ifx \insert\ptexinsert - \let\insert\saveinsert - \else - \let\checkinserts\relax - \fi -} - -% This \insert replacement works for both \insert\footins{foo} and -% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. -% -\def\saveinsert#1{% - \edef\next{\noexpand\savetobox \makeSAVEname#1}% - \afterassignment\next - % swallow the left brace - \let\temp = -} -\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} -\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} - -\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} - -\def\placesaveins#1{% - \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname - {\box#1}% -} - -% eat @SAVE -- beware, all of them have catcode \other: -{ - \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) - \gdef\gobblesave @SAVE{} -} - -% initialization: -\def\newsaveins #1{% - \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% - \next -} -\def\newsaveinsX #1{% - \csname newbox\endcsname #1% - \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts - \checksaveins #1}% -} - -% initialize: -\let\checkinserts\empty -\newsaveins\footins -\newsaveins\margin - - -% @image. We use the macros from epsf.tex to support this. -% If epsf.tex is not installed and @image is used, we complain. -% -% Check for and read epsf.tex up front. If we read it only at @image -% time, we might be inside a group, and then its definitions would get -% undone and the next image would fail. -\openin 1 = epsf.tex -\ifeof 1 \else - % Do not bother showing banner with epsf.tex v2.7k (available in - % doc/epsf.tex and on ctan). - \def\epsfannounce{\toks0 = }% - \input epsf.tex -\fi -\closein 1 -% -% We will only complain once about lack of epsf.tex. -\newif\ifwarnednoepsf -\newhelp\noepsfhelp{epsf.tex must be installed for images to - work. It is also included in the Texinfo distribution, or you can get - it from ftp://tug.org/tex/epsf.tex.} -% -\def\image#1{% - \ifx\epsfbox\undefined - \ifwarnednoepsf \else - \errhelp = \noepsfhelp - \errmessage{epsf.tex not found, images will be ignored}% - \global\warnednoepsftrue - \fi - \else - \imagexxx #1,,,,,\finish - \fi -} -% -% Arguments to @image: -% #1 is (mandatory) image filename; we tack on .eps extension. -% #2 is (optional) width, #3 is (optional) height. -% #4 is (ignored optional) html alt text. -% #5 is (ignored optional) extension. -% #6 is just the usual extra ignored arg for parsing this stuff. -\newif\ifimagevmode -\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup - \catcode`\^^M = 5 % in case we're inside an example - \normalturnoffactive % allow _ et al. in names - % If the image is by itself, center it. - \ifvmode - \imagevmodetrue - \nobreak\bigskip - % Usually we'll have text after the image which will insert - % \parskip glue, so insert it here too to equalize the space - % above and below. - \nobreak\vskip\parskip - \nobreak - \line\bgroup\hss - \fi - % - % Output the image. - \ifpdf - \dopdfimage{#1}{#2}{#3}% - \else - % \epsfbox itself resets \epsf?size at each figure. - \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi - \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi - \epsfbox{#1.eps}% - \fi - % - \ifimagevmode \hss \egroup \bigbreak \fi % space after the image -\endgroup} - - -% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, -% etc. We don't actually implement floating yet, we always include the -% float "here". But it seemed the best name for the future. -% -\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} - -% There may be a space before second and/or third parameter; delete it. -\def\eatcommaspace#1, {#1,} - -% #1 is the optional FLOATTYPE, the text label for this float, typically -% "Figure", "Table", "Example", etc. Can't contain commas. If omitted, -% this float will not be numbered and cannot be referred to. -% -% #2 is the optional xref label. Also must be present for the float to -% be referable. -% -% #3 is the optional positioning argument; for now, it is ignored. It -% will somehow specify the positions allowed to float to (here, top, bottom). -% -% We keep a separate counter for each FLOATTYPE, which we reset at each -% chapter-level command. -\let\resetallfloatnos=\empty -% -\def\dofloat#1,#2,#3,#4\finish{% - \let\thiscaption=\empty - \let\thisshortcaption=\empty - % - % don't lose footnotes inside @float. - % - % BEWARE: when the floats start float, we have to issue warning whenever an - % insert appears inside a float which could possibly float. --kasal, 26may04 - % - \startsavinginserts - % - % We can't be used inside a paragraph. - \par - % - \vtop\bgroup - \def\floattype{#1}% - \def\floatlabel{#2}% - \def\floatloc{#3}% we do nothing with this yet. - % - \ifx\floattype\empty - \let\safefloattype=\empty - \else - {% - % the floattype might have accents or other special characters, - % but we need to use it in a control sequence name. - \indexnofonts - \turnoffactive - \xdef\safefloattype{\floattype}% - }% - \fi - % - % If label is given but no type, we handle that as the empty type. - \ifx\floatlabel\empty \else - % We want each FLOATTYPE to be numbered separately (Figure 1, - % Table 1, Figure 2, ...). (And if no label, no number.) - % - \expandafter\getfloatno\csname\safefloattype floatno\endcsname - \global\advance\floatno by 1 - % - {% - % This magic value for \thissection is output by \setref as the - % XREFLABEL-title value. \xrefX uses it to distinguish float - % labels (which have a completely different output format) from - % node and anchor labels. And \xrdef uses it to construct the - % lists of floats. - % - \edef\thissection{\floatmagic=\safefloattype}% - \setref{\floatlabel}{Yfloat}% - }% - \fi - % - % start with \parskip glue, I guess. - \vskip\parskip - % - % Don't suppress indentation if a float happens to start a section. - \restorefirstparagraphindent -} - -% we have these possibilities: -% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap -% @float Foo,lbl & no caption: Foo 1.1 -% @float Foo & @caption{Cap}: Foo: Cap -% @float Foo & no caption: Foo -% @float ,lbl & Caption{Cap}: 1.1: Cap -% @float ,lbl & no caption: 1.1 -% @float & @caption{Cap}: Cap -% @float & no caption: -% -\def\Efloat{% - \let\floatident = \empty - % - % In all cases, if we have a float type, it comes first. - \ifx\floattype\empty \else \def\floatident{\floattype}\fi - % - % If we have an xref label, the number comes next. - \ifx\floatlabel\empty \else - \ifx\floattype\empty \else % if also had float type, need tie first. - \appendtomacro\floatident{\tie}% - \fi - % the number. - \appendtomacro\floatident{\chaplevelprefix\the\floatno}% - \fi - % - % Start the printed caption with what we've constructed in - % \floatident, but keep it separate; we need \floatident again. - \let\captionline = \floatident - % - \ifx\thiscaption\empty \else - \ifx\floatident\empty \else - \appendtomacro\captionline{: }% had ident, so need a colon between - \fi - % - % caption text. - \appendtomacro\captionline{\scanexp\thiscaption}% - \fi - % - % If we have anything to print, print it, with space before. - % Eventually this needs to become an \insert. - \ifx\captionline\empty \else - \vskip.5\parskip - \captionline - % - % Space below caption. - \vskip\parskip - \fi - % - % If have an xref label, write the list of floats info. Do this - % after the caption, to avoid chance of it being a breakpoint. - \ifx\floatlabel\empty \else - % Write the text that goes in the lof to the aux file as - % \floatlabel-lof. Besides \floatident, we include the short - % caption if specified, else the full caption if specified, else nothing. - {% - \atdummies - % since we read the caption text in the macro world, where ^^M - % is turned into a normal character, we have to scan it back, so - % we don't write the literal three characters "^^M" into the aux file. - \scanexp{% - \xdef\noexpand\gtemp{% - \ifx\thisshortcaption\empty - \thiscaption - \else - \thisshortcaption - \fi - }% - }% - \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident - \ifx\gtemp\empty \else : \gtemp \fi}}% - }% - \fi - \egroup % end of \vtop - % - % place the captured inserts - % - % BEWARE: when the floats start float, we have to issue warning whenever an - % insert appears inside a float which could possibly float. --kasal, 26may04 - % - \checkinserts -} - -% Append the tokens #2 to the definition of macro #1, not expanding either. -% -\def\appendtomacro#1#2{% - \expandafter\def\expandafter#1\expandafter{#1#2}% -} - -% @caption, @shortcaption -% -\def\caption{\docaption\thiscaption} -\def\shortcaption{\docaption\thisshortcaption} -\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} -\def\defcaption#1#2{\egroup \def#1{#2}} - -% The parameter is the control sequence identifying the counter we are -% going to use. Create it if it doesn't exist and assign it to \floatno. -\def\getfloatno#1{% - \ifx#1\relax - % Haven't seen this figure type before. - \csname newcount\endcsname #1% - % - % Remember to reset this floatno at the next chap. - \expandafter\gdef\expandafter\resetallfloatnos - \expandafter{\resetallfloatnos #1=0 }% - \fi - \let\floatno#1% -} - -% \setref calls this to get the XREFLABEL-snt value. We want an @xref -% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we -% first read the @float command. -% -\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% - -% Magic string used for the XREFLABEL-title value, so \xrefX can -% distinguish floats from other xref types. -\def\floatmagic{!!float!!} - -% #1 is the control sequence we are passed; we expand into a conditional -% which is true if #1 represents a float ref. That is, the magic -% \thissection value which we \setref above. -% -\def\iffloat#1{\expandafter\doiffloat#1==\finish} -% -% #1 is (maybe) the \floatmagic string. If so, #2 will be the -% (safe) float type for this float. We set \iffloattype to #2. -% -\def\doiffloat#1=#2=#3\finish{% - \def\temp{#1}% - \def\iffloattype{#2}% - \ifx\temp\floatmagic -} - -% @listoffloats FLOATTYPE - print a list of floats like a table of contents. -% -\parseargdef\listoffloats{% - \def\floattype{#1}% floattype - {% - % the floattype might have accents or other special characters, - % but we need to use it in a control sequence name. - \indexnofonts - \turnoffactive - \xdef\safefloattype{\floattype}% - }% - % - % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. - \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax - \ifhavexrefs - % if the user said @listoffloats foo but never @float foo. - \message{\linenumber No `\safefloattype' floats to list.}% - \fi - \else - \begingroup - \leftskip=\tocindent % indent these entries like a toc - \let\do=\listoffloatsdo - \csname floatlist\safefloattype\endcsname - \endgroup - \fi -} - -% This is called on each entry in a list of floats. We're passed the -% xref label, in the form LABEL-title, which is how we save it in the -% aux file. We strip off the -title and look up \XRLABEL-lof, which -% has the text we're supposed to typeset here. -% -% Figures without xref labels will not be included in the list (since -% they won't appear in the aux file). -% -\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} -\def\listoffloatsdoentry#1-title\finish{{% - % Can't fully expand XR#1-lof because it can contain anything. Just - % pass the control sequence. On the other hand, XR#1-pg is just the - % page number, and we want to fully expand that so we can get a link - % in pdf output. - \toksA = \expandafter{\csname XR#1-lof\endcsname}% - % - % use the same \entry macro we use to generate the TOC and index. - \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% - \writeentry -}} - -\message{localization,} -% and i18n. - -% @documentlanguage is usually given very early, just after -% @setfilename. If done too late, it may not override everything -% properly. Single argument is the language abbreviation. -% It would be nice if we could set up a hyphenation file here. -% -\parseargdef\documentlanguage{% - \tex % read txi-??.tex file in plain TeX. - % Read the file if it exists. - \openin 1 txi-#1.tex - \ifeof 1 - \errhelp = \nolanghelp - \errmessage{Cannot read language file txi-#1.tex}% - \else - \input txi-#1.tex - \fi - \closein 1 - \endgroup -} -\newhelp\nolanghelp{The given language definition file cannot be found or -is empty. Maybe you need to install it? In the current directory -should work if nowhere else does.} - - -% @documentencoding should change something in TeX eventually, most -% likely, but for now just recognize it. -\let\documentencoding = \comment - - -% Page size parameters. -% -\newdimen\defaultparindent \defaultparindent = 15pt - -\chapheadingskip = 15pt plus 4pt minus 2pt -\secheadingskip = 12pt plus 3pt minus 2pt -\subsecheadingskip = 9pt plus 2pt minus 2pt - -% Prevent underfull vbox error messages. -\vbadness = 10000 - -% Don't be so finicky about underfull hboxes, either. -\hbadness = 2000 - -% Following George Bush, just get rid of widows and orphans. -\widowpenalty=10000 -\clubpenalty=10000 - -% Use TeX 3.0's \emergencystretch to help line breaking, but if we're -% using an old version of TeX, don't do anything. We want the amount of -% stretch added to depend on the line length, hence the dependence on -% \hsize. We call this whenever the paper size is set. -% -\def\setemergencystretch{% - \ifx\emergencystretch\thisisundefined - % Allow us to assign to \emergencystretch anyway. - \def\emergencystretch{\dimen0}% - \else - \emergencystretch = .15\hsize - \fi -} - -% Parameters in order: 1) textheight; 2) textwidth; -% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; -% 7) physical page height; 8) physical page width. -% -% We also call \setleading{\textleading}, so the caller should define -% \textleading. The caller should also set \parskip. -% -\def\internalpagesizes#1#2#3#4#5#6#7#8{% - \voffset = #3\relax - \topskip = #6\relax - \splittopskip = \topskip - % - \vsize = #1\relax - \advance\vsize by \topskip - \outervsize = \vsize - \advance\outervsize by 2\topandbottommargin - \pageheight = \vsize - % - \hsize = #2\relax - \outerhsize = \hsize - \advance\outerhsize by 0.5in - \pagewidth = \hsize - % - \normaloffset = #4\relax - \bindingoffset = #5\relax - % - \ifpdf - \pdfpageheight #7\relax - \pdfpagewidth #8\relax - \fi - % - \setleading{\textleading} - % - \parindent = \defaultparindent - \setemergencystretch -} - -% @letterpaper (the default). -\def\letterpaper{{\globaldefs = 1 - \parskip = 3pt plus 2pt minus 1pt - \textleading = 13.2pt - % - % If page is nothing but text, make it come out even. - \internalpagesizes{46\baselineskip}{6in}% - {\voffset}{.25in}% - {\bindingoffset}{36pt}% - {11in}{8.5in}% -}} - -% Use @smallbook to reset parameters for 7x9.25 trim size. -\def\smallbook{{\globaldefs = 1 - \parskip = 2pt plus 1pt - \textleading = 12pt - % - \internalpagesizes{7.5in}{5in}% - {\voffset}{.25in}% - {\bindingoffset}{16pt}% - {9.25in}{7in}% - % - \lispnarrowing = 0.3in - \tolerance = 700 - \hfuzz = 1pt - \contentsrightmargin = 0pt - \defbodyindent = .5cm -}} - -% Use @smallerbook to reset parameters for 6x9 trim size. -% (Just testing, parameters still in flux.) -\def\smallerbook{{\globaldefs = 1 - \parskip = 1.5pt plus 1pt - \textleading = 12pt - % - \internalpagesizes{7.4in}{4.8in}% - {-.2in}{-.4in}% - {0pt}{14pt}% - {9in}{6in}% - % - \lispnarrowing = 0.25in - \tolerance = 700 - \hfuzz = 1pt - \contentsrightmargin = 0pt - \defbodyindent = .4cm -}} - -% Use @afourpaper to print on European A4 paper. -\def\afourpaper{{\globaldefs = 1 - \parskip = 3pt plus 2pt minus 1pt - \textleading = 13.2pt - % - % Double-side printing via postscript on Laserjet 4050 - % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. - % To change the settings for a different printer or situation, adjust - % \normaloffset until the front-side and back-side texts align. Then - % do the same for \bindingoffset. You can set these for testing in - % your texinfo source file like this: - % @tex - % \global\normaloffset = -6mm - % \global\bindingoffset = 10mm - % @end tex - \internalpagesizes{51\baselineskip}{160mm} - {\voffset}{\hoffset}% - {\bindingoffset}{44pt}% - {297mm}{210mm}% - % - \tolerance = 700 - \hfuzz = 1pt - \contentsrightmargin = 0pt - \defbodyindent = 5mm -}} - -% Use @afivepaper to print on European A5 paper. -% From romildo@urano.iceb.ufop.br, 2 July 2000. -% He also recommends making @example and @lisp be small. -\def\afivepaper{{\globaldefs = 1 - \parskip = 2pt plus 1pt minus 0.1pt - \textleading = 12.5pt - % - \internalpagesizes{160mm}{120mm}% - {\voffset}{\hoffset}% - {\bindingoffset}{8pt}% - {210mm}{148mm}% - % - \lispnarrowing = 0.2in - \tolerance = 800 - \hfuzz = 1.2pt - \contentsrightmargin = 0pt - \defbodyindent = 2mm - \tableindent = 12mm -}} - -% A specific text layout, 24x15cm overall, intended for A4 paper. -\def\afourlatex{{\globaldefs = 1 - \afourpaper - \internalpagesizes{237mm}{150mm}% - {\voffset}{4.6mm}% - {\bindingoffset}{7mm}% - {297mm}{210mm}% - % - % Must explicitly reset to 0 because we call \afourpaper. - \globaldefs = 0 -}} - -% Use @afourwide to print on A4 paper in landscape format. -\def\afourwide{{\globaldefs = 1 - \afourpaper - \internalpagesizes{241mm}{165mm}% - {\voffset}{-2.95mm}% - {\bindingoffset}{7mm}% - {297mm}{210mm}% - \globaldefs = 0 -}} - -% @pagesizes TEXTHEIGHT[,TEXTWIDTH] -% Perhaps we should allow setting the margins, \topskip, \parskip, -% and/or leading, also. Or perhaps we should compute them somehow. -% -\parseargdef\pagesizes{\pagesizesyyy #1,,\finish} -\def\pagesizesyyy#1,#2,#3\finish{{% - \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi - \globaldefs = 1 - % - \parskip = 3pt plus 2pt minus 1pt - \setleading{\textleading}% - % - \dimen0 = #1 - \advance\dimen0 by \voffset - % - \dimen2 = \hsize - \advance\dimen2 by \normaloffset - % - \internalpagesizes{#1}{\hsize}% - {\voffset}{\normaloffset}% - {\bindingoffset}{44pt}% - {\dimen0}{\dimen2}% -}} - -% Set default to letter. -% -\letterpaper - - -\message{and turning on texinfo input format.} - -% Define macros to output various characters with catcode for normal text. -\catcode`\"=\other -\catcode`\~=\other -\catcode`\^=\other -\catcode`\_=\other -\catcode`\|=\other -\catcode`\<=\other -\catcode`\>=\other -\catcode`\+=\other -\catcode`\$=\other -\def\normaldoublequote{"} -\def\normaltilde{~} -\def\normalcaret{^} -\def\normalunderscore{_} -\def\normalverticalbar{|} -\def\normalless{<} -\def\normalgreater{>} -\def\normalplus{+} -\def\normaldollar{$}%$ font-lock fix - -% This macro is used to make a character print one way in \tt -% (where it can probably be output as-is), and another way in other fonts, -% where something hairier probably needs to be done. -% -% #1 is what to print if we are indeed using \tt; #2 is what to print -% otherwise. Since all the Computer Modern typewriter fonts have zero -% interword stretch (and shrink), and it is reasonable to expect all -% typewriter fonts to have this, we can check that font parameter. -% -\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} - -% Same as above, but check for italic font. Actually this also catches -% non-italic slanted fonts since it is impossible to distinguish them from -% italic fonts. But since this is only used by $ and it uses \sl anyway -% this is not a problem. -\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} - -% Turn off all special characters except @ -% (and those which the user can use as if they were ordinary). -% Most of these we simply print from the \tt font, but for some, we can -% use math or other variants that look better in normal text. - -\catcode`\"=\active -\def\activedoublequote{{\tt\char34}} -\let"=\activedoublequote -\catcode`\~=\active -\def~{{\tt\char126}} -\chardef\hat=`\^ -\catcode`\^=\active -\def^{{\tt \hat}} - -\catcode`\_=\active -\def_{\ifusingtt\normalunderscore\_} -\let\realunder=_ -% Subroutine for the previous macro. -\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } - -\catcode`\|=\active -\def|{{\tt\char124}} -\chardef \less=`\< -\catcode`\<=\active -\def<{{\tt \less}} -\chardef \gtr=`\> -\catcode`\>=\active -\def>{{\tt \gtr}} -\catcode`\+=\active -\def+{{\tt \char 43}} -\catcode`\$=\active -\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix - -% If a .fmt file is being used, characters that might appear in a file -% name cannot be active until we have parsed the command line. -% So turn them off again, and have \everyjob (or @setfilename) turn them on. -% \otherifyactive is called near the end of this file. -\def\otherifyactive{\catcode`+=\other \catcode`\_=\other} - -\catcode`\@=0 - -% \backslashcurfont outputs one backslash character in current font, -% as in \char`\\. -\global\chardef\backslashcurfont=`\\ -\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work - -% \rawbackslash defines an active \ to do \backslashcurfont. -% \otherbackslash defines an active \ to be a literal `\' character with -% catcode other. -{\catcode`\\=\active - @gdef@rawbackslash{@let\=@backslashcurfont} - @gdef@otherbackslash{@let\=@realbackslash} -} - -% \realbackslash is an actual character `\' with catcode other, and -% \doublebackslash is two of them (for the pdf outlines). -{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} - -% \normalbackslash outputs one backslash in fixed width font. -\def\normalbackslash{{\tt\backslashcurfont}} - -\catcode`\\=\active - -% Used sometimes to turn off (effectively) the active characters -% even after parsing them. -@def@turnoffactive{% - @let"=@normaldoublequote - @let\=@realbackslash - @let~=@normaltilde - @let^=@normalcaret - @let_=@normalunderscore - @let|=@normalverticalbar - @let<=@normalless - @let>=@normalgreater - @let+=@normalplus - @let$=@normaldollar %$ font-lock fix - @unsepspaces -} - -% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of -% the literal character `\'. (Thus, \ is not expandable when this is in -% effect.) -% -@def@normalturnoffactive{@turnoffactive @let\=@normalbackslash} - -% Make _ and + \other characters, temporarily. -% This is canceled by @fixbackslash. -@otherifyactive - -% If a .fmt file is being used, we don't want the `\input texinfo' to show up. -% That is what \eatinput is for; after that, the `\' should revert to printing -% a backslash. -% -@gdef@eatinput input texinfo{@fixbackslash} -@global@let\ = @eatinput - -% On the other hand, perhaps the file did not have a `\input texinfo'. Then -% the first `\{ in the file would cause an error. This macro tries to fix -% that, assuming it is called before the first `\' could plausibly occur. -% Also turn back on active characters that might appear in the input -% file name, in case not using a pre-dumped format. -% -@gdef@fixbackslash{% - @ifx\@eatinput @let\ = @normalbackslash @fi - @catcode`+=@active - @catcode`@_=@active -} - -% Say @foo, not \foo, in error messages. -@escapechar = `@@ - -% These look ok in all fonts, so just make them not special. -@catcode`@& = @other -@catcode`@# = @other -@catcode`@% = @other - - -@c Local variables: -@c eval: (add-hook 'write-file-hooks 'time-stamp) -@c page-delimiter: "^\\\\message" -@c time-stamp-start: "def\\\\texinfoversion{" -@c time-stamp-format: "%:y-%02m-%02d.%02H" -@c time-stamp-end: "}" -@c End: - -@c vim:sw=2: - -@ignore - arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 -@end ignore diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/rbffi.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/rbffi.h deleted file mode 100644 index b6fe477..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/rbffi.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2008, 2009, Wayne Meissner - * - * Copyright (c) 2008-2013, Ruby FFI project contributors - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Ruby FFI project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef RBFFI_RBFFI_H -#define RBFFI_RBFFI_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define MAX_PARAMETERS (32) - -extern VALUE rbffi_FFIModule; - -extern void rbffi_Type_Init(VALUE ffiModule); -extern void rbffi_Buffer_Init(VALUE ffiModule); -extern void rbffi_Invoker_Init(VALUE ffiModule); -extern void rbffi_Variadic_Init(VALUE ffiModule); -extern void rbffi_DataConverter_Init(VALUE ffiModule); -extern VALUE rbffi_AbstractMemoryClass, rbffi_InvokerClass; -extern int rbffi_type_size(VALUE type); -extern void rbffi_Thread_Init(VALUE moduleFFI); - -#ifdef __cplusplus -} -#endif - -#endif /* RBFFI_RBFFI_H */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/rbffi_endian.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/rbffi_endian.h deleted file mode 100644 index c108020..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/rbffi_endian.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef JFFI_ENDIAN_H -#define JFFI_ENDIAN_H - -#ifndef _MSC_VER -#include -#endif - -#include - -#if defined(__linux__) || defined(__CYGWIN__) || defined(__GNU__) || defined(__GLIBC__) -# include -# if !defined(LITTLE_ENDIAN) && defined(__LITTLE_ENDIAN) -# define LITTLE_ENDIAN __LITTLE_ENDIAN -# endif -# if !defined(BIG_ENDIAN) && defined(__BIG_ENDIAN) -# define BIG_ENDIAN __BIG_ENDIAN -# endif -# if !defined(BYTE_ORDER) && defined(__BYTE_ORDER) -# define BYTE_ORDER __BYTE_ORDER -# endif -#endif - -#ifdef __sun -# include -# define LITTLE_ENDIAN 1234 -# define BIG_ENDIAN 4321 -# if defined(_BIG_ENDIAN) -# define BYTE_ORDER BIG_ENDIAN -# elif defined(_LITTLE_ENDIAN) -# define BYTE_ORDER LITTLE_ENDIAN -# else -# error "Cannot determine endian-ness" -# endif -#endif - -#if defined(_AIX) && !defined(BYTE_ORDER) -# define LITTLE_ENDIAN 1234 -# define BIG_ENDIAN 4321 -# if defined(__BIG_ENDIAN__) -# define BYTE_ORDER BIG_ENDIAN -# elif defined(__LITTLE_ENDIAN__) -# define BYTE_ORDER LITTLE_ENDIAN -# else -# error "Cannot determine endian-ness" -# endif -#endif - -#if defined(_WIN32) -# define LITTLE_ENDIAN 1234 -# define BIG_ENDIAN 4321 -# define BYTE_ORDER LITTLE_ENDIAN -#endif - -#if !defined(BYTE_ORDER) || !defined(LITTLE_ENDIAN) || !defined(BIG_ENDIAN) -# error "Cannot determine the endian-ness of this platform" -#endif - -#endif /* JFFI_ENDIAN_H */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/win32/stdbool.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/win32/stdbool.h deleted file mode 100644 index 9130a8b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/win32/stdbool.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef FFI_STDBOOL_H -#define FFI_STDBOOL_H - -typedef int bool; -#define true 1 -#define false 0 - -#endif /* FFI_STDBOOL_H */ \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/win32/stdint.h b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/win32/stdint.h deleted file mode 100644 index 6ce7457..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ext/ffi_c/win32/stdint.h +++ /dev/null @@ -1,201 +0,0 @@ -/* stdint.h standard header */ -#if !defined(_MSC_VER) && !defined(INT8_MIN) -#pragma once -#ifndef _STDINT -#define _STDINT -#ifndef RC_INVOKED -#include - -/* NB: assumes - byte has 8 bits - long is 32 bits - pointer can convert to and from long long - long long is longest type - */ - -_C_STD_BEGIN - /* TYPE DEFINITIONS */ -typedef signed char int8_t; -typedef short int16_t; -typedef int int32_t; - -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned int uint32_t; - -typedef signed char int_least8_t; -typedef short int_least16_t; -typedef int int_least32_t; - -typedef unsigned char uint_least8_t; -typedef unsigned short uint_least16_t; -typedef unsigned int uint_least32_t; - -typedef char int_fast8_t; -typedef int int_fast16_t; -typedef int int_fast32_t; - -typedef unsigned char uint_fast8_t; -typedef unsigned int uint_fast16_t; -typedef unsigned int uint_fast32_t; - -#ifndef _INTPTR_T_DEFINED - #define _INTPTR_T_DEFINED - #ifdef _WIN64 -typedef __int64 intptr_t; - #else /* _WIN64 */ -typedef _W64 int intptr_t; - #endif /* _WIN64 */ -#endif /* _INTPTR_T_DEFINED */ - -#ifndef _UINTPTR_T_DEFINED - #define _UINTPTR_T_DEFINED - #ifdef _WIN64 -typedef unsigned __int64 uintptr_t; - #else /* _WIN64 */ -typedef _W64 unsigned int uintptr_t; - #endif /* _WIN64 */ -#endif /* _UINTPTR_T_DEFINED */ - -typedef _Longlong int64_t; -typedef _ULonglong uint64_t; - -typedef _Longlong int_least64_t; -typedef _ULonglong uint_least64_t; - -typedef _Longlong int_fast64_t; -typedef _ULonglong uint_fast64_t; - -typedef _Longlong intmax_t; -typedef _ULonglong uintmax_t; - - /* LIMIT MACROS */ -#define INT8_MIN (-0x7f - _C2) -#define INT16_MIN (-0x7fff - _C2) -#define INT32_MIN (-0x7fffffff - _C2) - -#define INT8_MAX 0x7f -#define INT16_MAX 0x7fff -#define INT32_MAX 0x7fffffff -#define UINT8_MAX 0xff -#define UINT16_MAX 0xffff -#define UINT32_MAX 0xffffffff - -#define INT_LEAST8_MIN (-0x7f - _C2) -#define INT_LEAST16_MIN (-0x7fff - _C2) -#define INT_LEAST32_MIN (-0x7fffffff - _C2) - -#define INT_LEAST8_MAX 0x7f -#define INT_LEAST16_MAX 0x7fff -#define INT_LEAST32_MAX 0x7fffffff -#define UINT_LEAST8_MAX 0xff -#define UINT_LEAST16_MAX 0xffff -#define UINT_LEAST32_MAX 0xffffffff - -#define INT_FAST8_MIN (-0x7f - _C2) -#define INT_FAST16_MIN (-0x7fff - _C2) -#define INT_FAST32_MIN (-0x7fffffff - _C2) - -#define INT_FAST8_MAX 0x7f -#define INT_FAST16_MAX 0x7fff -#define INT_FAST32_MAX 0x7fffffff -#define UINT_FAST8_MAX 0xff -#define UINT_FAST16_MAX 0xffff -#define UINT_FAST32_MAX 0xffffffff - - #if _INTPTR == 0 || _INTPTR == 1 -#define INTPTR_MAX 0x7fffffff -#define INTPTR_MIN (-INTPTR_MAX - _C2) -#define UINTPTR_MAX 0xffffffff - - #else /* _INTPTR == 2 */ -#define INTPTR_MIN (-_LLONG_MAX - _C2) -#define INTPTR_MAX _LLONG_MAX -#define UINTPTR_MAX _ULLONG_MAX -#endif /* _INTPTR */ - -#define INT8_C(x) (x) -#define INT16_C(x) (x) -#define INT32_C(x) ((x) + (INT32_MAX - INT32_MAX)) - -#define UINT8_C(x) (x) -#define UINT16_C(x) (x) -#define UINT32_C(x) ((x) + (UINT32_MAX - UINT32_MAX)) - -#ifdef _WIN64 - #define PTRDIFF_MIN INT64_MIN - #define PTRDIFF_MAX INT64_MAX -#else /* _WIN64 */ - #define PTRDIFF_MIN INT32_MIN - #define PTRDIFF_MAX INT32_MAX -#endif /* _WIN64 */ - -#define SIG_ATOMIC_MIN INT32_MIN -#define SIG_ATOMIC_MAX INT32_MAX - -#ifndef SIZE_MAX - #ifdef _WIN64 - #define SIZE_MAX UINT64_MAX - #else /* _WIN64 */ - #define SIZE_MAX UINT32_MAX - #endif /* _WIN64 */ -#endif /* SIZE_MAX */ - -#define WCHAR_MIN 0x0000 -#define WCHAR_MAX 0xffff - -#define WINT_MIN 0x0000 -#define WINT_MAX 0xffff - - #define INT64_MIN (-0x7fffffffffffffff - _C2) - #define INT64_MAX 0x7fffffffffffffff - #define UINT64_MAX 0xffffffffffffffffU - - #define INT_LEAST64_MIN (-0x7fffffffffffffff - _C2) - #define INT_LEAST64_MAX 0x7fffffffffffffff - #define UINT_LEAST64_MAX 0xffffffffffffffffU - - #define INT_FAST64_MIN (-0x7fffffffffffffff - _C2) - #define INT_FAST64_MAX 0x7fffffffffffffff - #define UINT_FAST64_MAX 0xffffffffffffffffU - - #define INTMAX_MIN (-0x7fffffffffffffff - _C2) - #define INTMAX_MAX 0x7fffffffffffffff - #define UINTMAX_MAX 0xffffffffffffffffU - -#define INT64_C(x) ((x) + (INT64_MAX - INT64_MAX)) -#define UINT64_C(x) ((x) + (UINT64_MAX - UINT64_MAX)) -#define INTMAX_C(x) INT64_C(x) -#define UINTMAX_C(x) UINT64_C(x) -_C_STD_END -#endif /* RC_INVOKED */ -#endif /* _STDINT */ - - #if defined(_STD_USING) -using _CSTD int8_t; using _CSTD int16_t; -using _CSTD int32_t; using _CSTD int64_t; - -using _CSTD uint8_t; using _CSTD uint16_t; -using _CSTD uint32_t; using _CSTD uint64_t; - -using _CSTD int_least8_t; using _CSTD int_least16_t; -using _CSTD int_least32_t; using _CSTD int_least64_t; -using _CSTD uint_least8_t; using _CSTD uint_least16_t; -using _CSTD uint_least32_t; using _CSTD uint_least64_t; - -using _CSTD intmax_t; using _CSTD uintmax_t; - -using _CSTD uintptr_t; -using _CSTD intptr_t; - -using _CSTD int_fast8_t; using _CSTD int_fast16_t; -using _CSTD int_fast32_t; using _CSTD int_fast64_t; -using _CSTD uint_fast8_t; using _CSTD uint_fast16_t; -using _CSTD uint_fast32_t; using _CSTD uint_fast64_t; - #endif /* defined(_STD_USING) */ - -/* - * Copyright (c) 1992-2009 by P.J. Plauger. ALL RIGHTS RESERVED. - * Consult your license regarding permissions and restrictions. -V5.20:0009 */ -#endif /* !defined(_MSC_VER) && !defined(INT8_MIN) */ \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ffi.gemspec b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ffi.gemspec deleted file mode 100644 index 7b5b6e3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/ffi.gemspec +++ /dev/null @@ -1,22 +0,0 @@ -require File.expand_path("../lib/#{File.basename(__FILE__, '.gemspec')}/version", __FILE__) - -Gem::Specification.new do |s| - s.name = 'ffi' - s.version = FFI::VERSION - s.author = 'Wayne Meissner' - s.email = 'wmeissner@gmail.com' - s.homepage = 'http://wiki.github.com/ffi/ffi' - s.summary = 'Ruby FFI' - s.description = 'Ruby FFI library' - s.files = %w(ffi.gemspec LICENSE COPYING README.md Rakefile) + Dir.glob("{ext,gen,lib,spec,libtest}/**/*").reject { |f| f =~ /(lib\/[12]\.[089]|\.s?[ao]$|\.bundle|\.dylib$)/ } - s.extensions << 'ext/ffi_c/extconf.rb' - s.has_rdoc = false - s.rdoc_options = %w[--exclude=ext/ffi_c/.*\.o$ --exclude=ffi_c\.(bundle|so)$] - s.license = 'BSD' - s.require_paths << 'ext/ffi_c' - s.required_ruby_version = '>= 1.8.7' - s.add_development_dependency 'rake', '~> 10.1' - s.add_development_dependency 'rake-compiler', '~> 0.9' - s.add_development_dependency 'rspec', '~> 2.14.1' - s.add_development_dependency 'rubygems-tasks', "~> 0.2.4" -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/gen/Rakefile b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/gen/Rakefile deleted file mode 100644 index f71a1da..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/gen/Rakefile +++ /dev/null @@ -1,30 +0,0 @@ -$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib') -require 'fileutils' -require 'ffi' -require 'ffi/platform' -require 'ffi/tools/types_generator' -types_conf = File.expand_path(File.join(FFI::Platform::CONF_DIR, 'types.conf')) - -logfile = File.join(File.dirname(__FILE__), 'log') - -file types_conf do |task| - options = {} - FileUtils.mkdir_p(File.dirname(task.name), { :mode => 0755 }) - File.open(task.name, File::CREAT|File::TRUNC|File::RDWR, 0644) do |f| - f.puts FFI::TypesGenerator.generate(options) - end - File.open(logfile, 'w') do |log| - log.puts(types_conf) - end -end - -task :default => types_conf do -end - -task :clean do - File.readlines(logfile).each do |file| - file.strip! - rm_f file - end - rm_f logfile -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi.rb deleted file mode 100644 index 5e02a5c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi.rb +++ /dev/null @@ -1,32 +0,0 @@ -if !defined?(RUBY_ENGINE) || RUBY_ENGINE == 'ruby' || RUBY_ENGINE == 'rbx' - Object.send(:remove_const, :FFI) if defined?(::FFI) - begin - if RUBY_VERSION =~ /1\.8/ - require '1.8/ffi_c' - elsif RUBY_VERSION =~ /1\.9/ - require '1.9/ffi_c' - elsif RUBY_VERSION =~ /2\.0/ - require '2.0/ffi_c' - elsif RUBY_VERSION =~ /2\.1/ - require '2.1/ffi_c' - elsif RUBY_VERSION =~ /2\.2/ - require '2.2/ffi_c' - else - require 'ffi_c' - end - rescue Exception - require 'ffi_c' - end - - require 'ffi/ffi' - -elsif defined?(RUBY_ENGINE) - # Remove the ffi gem dir from the load path, then reload the internal ffi implementation - $LOAD_PATH.delete(File.dirname(__FILE__)) - $LOAD_PATH.delete(File.join(File.dirname(__FILE__), 'ffi')) - unless $LOADED_FEATURES.nil? - $LOADED_FEATURES.delete(__FILE__) - $LOADED_FEATURES.delete('ffi.rb') - end - require 'ffi.rb' -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/autopointer.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/autopointer.rb deleted file mode 100644 index 5706068..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/autopointer.rb +++ /dev/null @@ -1,194 +0,0 @@ -# -# Copyright (C) 2008-2010 Wayne Meissner -# Copyright (C) 2008 Mike Dalessio -# -# This file is part of ruby-ffi. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# * Neither the name of the Ruby FFI project nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -module FFI - class AutoPointer < Pointer - extend DataConverter - - # @overload initialize(pointer, method) - # @param [Pointer] pointer - # @param [Method] method - # @return [self] - # The passed Method will be invoked at GC time. - # @overload initialize(pointer, proc) - # @param [Pointer] pointer - # @return [self] - # The passed Proc will be invoked at GC time (SEE WARNING BELOW!) - # @note WARNING: passing a proc _may_ cause your pointer to never be GC'd, unless you're - # careful to avoid trapping a reference to the pointer in the proc. See the test - # specs for examples. - # @overload initialize(pointer) { |p| ... } - # @param [Pointer] pointer - # @yieldparam [Pointer] p +pointer+ passed to the block - # @return [self] - # The passed block will be invoked at GC time. - # @note WARNING: passing a block will cause your pointer to never be GC'd. This is bad. - # @overload initialize(pointer) - # @param [Pointer] pointer - # @return [self] - # The pointer's release() class method will be invoked at GC time. - # - # @note The safest, and therefore preferred, calling - # idiom is to pass a Method as the second parameter. Example usage: - # - # class PointerHelper - # def self.release(pointer) - # ... - # end - # end - # - # p = AutoPointer.new(other_pointer, PointerHelper.method(:release)) - # - # The above code will cause PointerHelper#release to be invoked at GC time. - # - # @note - # The last calling idiom (only one parameter) is generally only - # going to be useful if you subclass {AutoPointer}, and override - # #release, which by default does nothing. - def initialize(ptr, proc=nil, &block) - super(ptr.type_size, ptr) - raise TypeError, "Invalid pointer" if ptr.nil? || !ptr.kind_of?(Pointer) \ - || ptr.kind_of?(MemoryPointer) || ptr.kind_of?(AutoPointer) - - @releaser = if proc - raise RuntimeError.new("proc must be callable") unless proc.respond_to?(:call) - CallableReleaser.new(ptr, proc) - - else - raise RuntimeError.new("no release method defined") unless self.class.respond_to?(:release) - DefaultReleaser.new(ptr, self.class) - end - - ObjectSpace.define_finalizer(self, @releaser) - self - end - - # @return [nil] - # Free the pointer. - def free - @releaser.free - end - - # @param [Boolean] autorelease - # @return [Boolean] +autorelease+ - # Set +autorelease+ property. See {Pointer Autorelease section at Pointer}. - def autorelease=(autorelease) - @releaser.autorelease=(autorelease) - end - - # @return [Boolean] +autorelease+ - # Get +autorelease+ property. See {Pointer Autorelease section at Pointer}. - def autorelease? - @releaser.autorelease - end - - # @abstract Base class for {AutoPointer}'s releasers. - # - # All subclasses of Releaser should define a +#release(ptr)+ method. - # A releaser is an object in charge of release an {AutoPointer}. - class Releaser - attr_accessor :autorelease - - # @param [Pointer] ptr - # @param [#call] proc - # @return [nil] - # A new instance of Releaser. - def initialize(ptr, proc) - @ptr = ptr - @proc = proc - @autorelease = true - end - - # @return [nil] - # Free pointer. - def free - if @ptr - release(@ptr) - @autorelease = false - @ptr = nil - @proc = nil - end - end - - # @param args - # Release pointer if +autorelease+ is set. - def call(*args) - release(@ptr) if @autorelease && @ptr - end - - end - - # DefaultReleaser is a {Releaser} used when an {AutoPointer} is defined without Proc - # or Method. In this case, the pointer to release must be of a class derived from - # AutoPointer with a +#release+ class method. - class DefaultReleaser < Releaser - # @param [Pointer] ptr - # @return [nil] - # Release +ptr+ by using his #release class method. - def release(ptr) - @proc.release(ptr) - end - end - - # CallableReleaser is a {Releaser} used when an {AutoPointer} is defined with a - # Proc or a Method. - class CallableReleaser < Releaser - # @param [Pointer] ptr - # @return [nil] - # Release +ptr+ by using Proc or Method defined at +ptr+ {AutoPointer#initialize initialization}. - def release(ptr) - @proc.call(ptr) - end - end - - # Return native type of AutoPointer. - # - # Override {DataConverter#native_type}. - # @return [Type::POINTER] - # @raise {RuntimeError} if class does not implement a +#release+ method - def self.native_type - raise RuntimeError.new("no release method defined for #{self.inspect}") unless self.respond_to?(:release) - Type::POINTER - end - - # Create a new AutoPointer. - # - # Override {DataConverter#from_native}. - # @overload self.from_native(ptr, ctx) - # @param [Pointer] ptr - # @param ctx not used. Please set +nil+. - # @return [AutoPointer] - def self.from_native(val, ctx) - self.new(val) - end - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/buffer.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/buffer.rb deleted file mode 100644 index 449e45b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/buffer.rb +++ /dev/null @@ -1,4 +0,0 @@ -# -# All the code from this file is now implemented in C. This file remains -# to satisfy any leftover require 'ffi/buffer' in user code -# diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/callback.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/callback.rb deleted file mode 100644 index 32d52f7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/callback.rb +++ /dev/null @@ -1,4 +0,0 @@ -# -# All the code from this file is now implemented in C. This file remains -# to satisfy any leftover require 'ffi/callback' in user code -# diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/enum.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/enum.rb deleted file mode 100644 index 1b0b898..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/enum.rb +++ /dev/null @@ -1,179 +0,0 @@ -# -# Copyright (C) 2009, 2010 Wayne Meissner -# Copyright (C) 2009 Luc Heinrich -# -# This file is part of ruby-ffi. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# * Neither the name of the Ruby FFI project nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# - -module FFI - - # An instance of this class permits to manage {Enum}s. In fact, Enums is a collection of {Enum}s. - class Enums - - # @return [nil] - def initialize - @all_enums = Array.new - @tagged_enums = Hash.new - @symbol_map = Hash.new - end - - # @param [Enum] enum - # Add an {Enum} to the collection. - def <<(enum) - @all_enums << enum - @tagged_enums[enum.tag] = enum unless enum.tag.nil? - @symbol_map.merge!(enum.symbol_map) - end - - # @param query enum tag or part of an enum name - # @return [Enum] - # Find a {Enum} in collection. - def find(query) - if @tagged_enums.has_key?(query) - @tagged_enums[query] - else - @all_enums.detect { |enum| enum.symbols.include?(query) } - end - end - - # @param symbol a symbol to find in merge symbol maps of all enums. - # @return a symbol - def __map_symbol(symbol) - @symbol_map[symbol] - end - - end - - # Represents a C enum. - # - # For a C enum: - # enum fruits { - # apple, - # banana, - # orange, - # pineapple - # }; - # are defined this vocabulary: - # * a _symbol_ is a word from the enumeration (ie. _apple_, by example); - # * a _value_ is the value of a symbol in the enumeration (by example, apple has value _0_ and banana _1_). - class Enum - include DataConverter - - attr_reader :tag - - # @overload initialize(info, tag=nil) - # @param [nil, Enumerable] info - # @param [nil, Symbol] tag enum tag - # @overload initialize(native_type, info, tag=nil) - # @param [FFI::Type] native_type Native type for new Enum - # @param [nil, Enumerable] info symbols and values for new Enum - # @param [nil, Symbol] tag name of new Enum - def initialize(*args) - @native_type = args.shift if args.first.kind_of?(FFI::Type) - info, @tag = *args - @kv_map = Hash.new - unless info.nil? - last_cst = nil - value = 0 - info.each do |i| - case i - when Symbol - raise ArgumentError, "duplicate enum key" if @kv_map.has_key?(i) - @kv_map[i] = value - last_cst = i - value += 1 - when Integer - @kv_map[last_cst] = i - value = i+1 - end - end - end - @vk_map = @kv_map.invert - end - - # @return [Array] enum symbol names - def symbols - @kv_map.keys - end - - # Get a symbol or a value from the enum. - # @overload [](query) - # Get enum value from symbol. - # @param [Symbol] query - # @return [Integer] - # @overload [](query) - # Get enum symbol from value. - # @param [Integer] query - # @return [Symbol] - def [](query) - case query - when Symbol - @kv_map[query] - when Integer - @vk_map[query] - end - end - alias find [] - - # Get the symbol map. - # @return [Hash] - def symbol_map - @kv_map - end - - alias to_h symbol_map - alias to_hash symbol_map - - # Get native type of Enum - # @return [Type] - def native_type - @native_type || Type::INT - end - - # @param [Symbol, Integer, #to_int] val - # @param ctx unused - # @return [Integer] value of a enum symbol - def to_native(val, ctx) - @kv_map[val] || if val.is_a?(Integer) - val - elsif val.respond_to?(:to_int) - val.to_int - else - raise ArgumentError, "invalid enum value, #{val.inspect}" - end - end - - # @param val - # @return symbol name if it exists for +val+. - def from_native(val, ctx) - @vk_map[val] || val - end - - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/errno.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/errno.rb deleted file mode 100644 index de82d89..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/errno.rb +++ /dev/null @@ -1,43 +0,0 @@ -# -# Copyright (C) 2008-2010 Wayne Meissner -# -# This file is part of ruby-ffi. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# * Neither the name of the Ruby FFI project nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.# - -module FFI - # @return (see FFI::LastError.error) - # @see FFI::LastError.error - def self.errno - FFI::LastError.error - end - # @param error (see FFI::LastError.error=) - # @return (see FFI::LastError.error=) - # @see FFI::LastError.error= - def self.errno=(error) - FFI::LastError.error = error - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/ffi.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/ffi.rb deleted file mode 100644 index 11d451f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/ffi.rb +++ /dev/null @@ -1,44 +0,0 @@ -# -# Copyright (C) 2008-2010 JRuby project -# -# This file is part of ruby-ffi. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# * Neither the name of the Ruby FFI project nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -require 'ffi/platform' -require 'ffi/types' -require 'ffi/library' -require 'ffi/errno' -require 'ffi/pointer' -require 'ffi/memorypointer' -require 'ffi/struct' -require 'ffi/union' -require 'ffi/managedstruct' -require 'ffi/callback' -require 'ffi/io' -require 'ffi/autopointer' -require 'ffi/variadic' -require 'ffi/enum' diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/io.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/io.rb deleted file mode 100644 index 7fa1cf7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/io.rb +++ /dev/null @@ -1,62 +0,0 @@ -# -# Copyright (C) 2008, 2009 Wayne Meissner -# -# This file is part of ruby-ffi. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# * Neither the name of the Ruby FFI project nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.# - -module FFI - - # This module implements a couple of class methods to play with IO. - module IO - # @param [Integer] fd file decriptor - # @param [String] mode mode string - # @return [::IO] - # Synonym for IO::for_fd. - def self.for_fd(fd, mode = "r") - ::IO.for_fd(fd, mode) - end - - # @param [#read] io io to read from - # @param [AbstractMemory] buf destination for data read from +io+ - # @param [nil, Numeric] len maximul number of bytes to read from +io+. If +nil+, - # read until end of file. - # @return [Numeric] length really read, in bytes - # - # A version of IO#read that reads data from an IO and put then into a native buffer. - # - # This will be optimized at some future time to eliminate the double copy. - # - def self.native_read(io, buf, len) - tmp = io.read(len) - return -1 unless tmp - buf.put_bytes(0, tmp) - tmp.length - end - - end -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/library.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/library.rb deleted file mode 100644 index 53eb87d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/library.rb +++ /dev/null @@ -1,519 +0,0 @@ -# -# Copyright (C) 2008-2010 Wayne Meissner -# -# This file is part of ruby-ffi. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# * Neither the name of the Ruby FFI project nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.# - -module FFI - CURRENT_PROCESS = USE_THIS_PROCESS_AS_LIBRARY = Object.new - - # @param [#to_s] lib library name - # @return [String] library name formatted for current platform - # Transform a generic library name to a platform library name - # @example - # # Linux - # FFI.map_library_name 'c' # -> "libc.so.6" - # FFI.map_library_name 'jpeg' # -> "libjpeg.so" - # # Windows - # FFI.map_library_name 'c' # -> "msvcrt.dll" - # FFI.map_library_name 'jpeg' # -> "jpeg.dll" - def self.map_library_name(lib) - # Mangle the library name to reflect the native library naming conventions - lib = lib.to_s unless lib.kind_of?(String) - lib = Library::LIBC if lib == 'c' - - if lib && File.basename(lib) == lib - lib = Platform::LIBPREFIX + lib unless lib =~ /^#{Platform::LIBPREFIX}/ - r = Platform::IS_GNU ? "\\.so($|\\.[1234567890]+)" : "\\.#{Platform::LIBSUFFIX}$" - lib += ".#{Platform::LIBSUFFIX}" unless lib =~ /#{r}/ - end - - lib - end - - # Exception raised when a function is not found in libraries - class NotFoundError < LoadError - def initialize(function, *libraries) - super("Function '#{function}' not found in [#{libraries[0].nil? ? 'current process' : libraries.join(", ")}]") - end - end - - # This module is the base to use native functions. - # - # A basic usage may be: - # require 'ffi' - # - # module Hello - # extend FFI::Library - # ffi_lib FFI::Library::LIBC - # attach_function 'puts', [ :string ], :int - # end - # - # Hello.puts("Hello, World") - # - # - module Library - CURRENT_PROCESS = FFI::CURRENT_PROCESS - LIBC = FFI::Platform::LIBC - - # @param mod extended object - # @return [nil] - # @raise {RuntimeError} if +mod+ is not a Module - # Test if extended object is a Module. If not, raise RuntimeError. - def self.extended(mod) - raise RuntimeError.new("must only be extended by module") unless mod.kind_of?(Module) - end - - - # @param [Array] names names of libraries to load - # @return [Array] - # @raise {LoadError} if a library cannot be opened - # Load native libraries. - def ffi_lib(*names) - raise LoadError.new("library names list must not be empty") if names.empty? - - lib_flags = defined?(@ffi_lib_flags) ? @ffi_lib_flags : FFI::DynamicLibrary::RTLD_LAZY | FFI::DynamicLibrary::RTLD_LOCAL - ffi_libs = names.map do |name| - - if name == FFI::CURRENT_PROCESS - FFI::DynamicLibrary.open(nil, FFI::DynamicLibrary::RTLD_LAZY | FFI::DynamicLibrary::RTLD_LOCAL) - - else - libnames = (name.is_a?(::Array) ? name : [ name ]).map { |n| [ n, FFI.map_library_name(n) ].uniq }.flatten.compact - lib = nil - errors = {} - - libnames.each do |libname| - begin - lib = FFI::DynamicLibrary.open(libname, lib_flags) - break if lib - - rescue Exception => ex - ldscript = false - if ex.message =~ /(([^ \t()])+\.so([^ \t:()])*):([ \t])*(invalid ELF header|file too short|invalid file format)/ - if File.read($1) =~ /(?:GROUP|INPUT) *\( *([^ \)]+)/ - libname = $1 - ldscript = true - end - end - - if ldscript - retry - else - errors[libname] = ex - end - end - end - - if lib.nil? - raise LoadError.new(errors.values.join(".\n")) - end - - # return the found lib - lib - end - end - - @ffi_libs = ffi_libs - end - - # Set the calling convention for {#attach_function} and {#callback} - # - # @see http://en.wikipedia.org/wiki/Stdcall#stdcall - # @note +:stdcall+ is typically used for attaching Windows API functions - # - # @param [Symbol] convention one of +:default+, +:stdcall+ - # @return [Symbol] the new calling convention - def ffi_convention(convention = nil) - @ffi_convention ||= :default - @ffi_convention = convention if convention - @ffi_convention - end - - # @see #ffi_lib - # @return [Array] array of currently loaded FFI libraries - # @raise [LoadError] if no libraries have been loaded (using {#ffi_lib}) - # Get FFI libraries loaded using {#ffi_lib}. - def ffi_libraries - raise LoadError.new("no library specified") if !defined?(@ffi_libs) || @ffi_libs.empty? - @ffi_libs - end - - # Flags used in {#ffi_lib}. - # - # This map allows you to supply symbols to {#ffi_lib_flags} instead of - # the actual constants. - FlagsMap = { - :global => DynamicLibrary::RTLD_GLOBAL, - :local => DynamicLibrary::RTLD_LOCAL, - :lazy => DynamicLibrary::RTLD_LAZY, - :now => DynamicLibrary::RTLD_NOW - } - - # Sets library flags for {#ffi_lib}. - # - # @example - # ffi_lib_flags(:lazy, :local) # => 5 - # - # @param [Symbol, …] flags (see {FlagsMap}) - # @return [Fixnum] the new value - def ffi_lib_flags(*flags) - @ffi_lib_flags = flags.inject(0) { |result, f| result | FlagsMap[f] } - end - - - ## - # @overload attach_function(func, args, returns, options = {}) - # @example attach function without an explicit name - # module Foo - # extend FFI::Library - # ffi_lib FFI::Library::LIBC - # attach_function :malloc, [:size_t], :pointer - # end - # # now callable via Foo.malloc - # @overload attach_function(name, func, args, returns, options = {}) - # @example attach function with an explicit name - # module Bar - # extend FFI::Library - # ffi_lib FFI::Library::LIBC - # attach_function :c_malloc, :malloc, [:size_t], :pointer - # end - # # now callable via Bar.c_malloc - # - # Attach C function +func+ to this module. - # - # - # @param [#to_s] name name of ruby method to attach as - # @param [#to_s] func name of C function to attach - # @param [Array] args an array of types - # @param [Symbol] returns type of return value - # @option options [Boolean] :blocking (@blocking) set to true if the C function is a blocking call - # @option options [Symbol] :convention (:default) calling convention (see {#ffi_convention}) - # @option options [FFI::Enums] :enums - # @option options [Hash] :type_map - # - # @return [FFI::VariadicInvoker] - # - # @raise [FFI::NotFoundError] if +func+ cannot be found in the attached libraries (see {#ffi_lib}) - def attach_function(name, func, args, returns = nil, options = nil) - mname, a2, a3, a4, a5 = name, func, args, returns, options - cname, arg_types, ret_type, opts = (a4 && (a2.is_a?(String) || a2.is_a?(Symbol))) ? [ a2, a3, a4, a5 ] : [ mname.to_s, a2, a3, a4 ] - - # Convert :foo to the native type - arg_types = arg_types.map { |e| find_type(e) } - options = { - :convention => ffi_convention, - :type_map => defined?(@ffi_typedefs) ? @ffi_typedefs : nil, - :blocking => defined?(@blocking) && @blocking, - :enums => defined?(@ffi_enums) ? @ffi_enums : nil, - } - - @blocking = false - options.merge!(opts) if opts && opts.is_a?(Hash) - - # Try to locate the function in any of the libraries - invokers = [] - ffi_libraries.each do |lib| - if invokers.empty? - begin - function = nil - function_names(cname, arg_types).find do |fname| - function = lib.find_function(fname) - end - raise LoadError unless function - - invokers << if arg_types.length > 0 && arg_types[arg_types.length - 1] == FFI::NativeType::VARARGS - VariadicInvoker.new(function, arg_types, find_type(ret_type), options) - - else - Function.new(find_type(ret_type), arg_types, function, options) - end - - rescue LoadError - end - end - end - invoker = invokers.compact.shift - raise FFI::NotFoundError.new(cname.to_s, ffi_libraries.map { |lib| lib.name }) unless invoker - - invoker.attach(self, mname.to_s) - invoker - end - - # @param [#to_s] name function name - # @param [Array] arg_types function's argument types - # @return [Array] - # This function returns a list of possible names to lookup. - # @note Function names on windows may be decorated if they are using stdcall. See - # * http://en.wikipedia.org/wiki/Name_mangling#C_name_decoration_in_Microsoft_Windows - # * http://msdn.microsoft.com/en-us/library/zxk0tw93%28v=VS.100%29.aspx - # * http://en.wikibooks.org/wiki/X86_Disassembly/Calling_Conventions#STDCALL - # Note that decorated names can be overridden via def files. Also note that the - # windows api, although using, doesn't have decorated names. - def function_names(name, arg_types) - result = [name.to_s] - if ffi_convention == :stdcall - # Get the size of each parameter - size = arg_types.inject(0) do |mem, arg| - size = arg.size - # The size must be a multiple of 4 - size += (4 - size) % 4 - mem + size - end - - result << "_#{name.to_s}@#{size}" # win32 - result << "#{name.to_s}@#{size}" # win64 - end - result - end - - # @overload attach_variable(mname, cname, type) - # @example - # module Bar - # extend FFI::Library - # ffi_lib 'my_lib' - # attach_variable :c_myvar, :myvar, :long - # end - # # now callable via Bar.c_myvar - # @overload attach_variable(cname, type) - # @example - # module Bar - # extend FFI::Library - # ffi_lib 'my_lib' - # attach_variable :myvar, :long - # end - # # now callable via Bar.myvar - # @param [#to_s] mname name of ruby method to attach as - # @param [#to_s] cname name of C variable to attach - # @param [DataConverter, Struct, Symbol, Type] type C varaible's type - # @return [DynamicLibrary::Symbol] - # @raise {FFI::NotFoundError} if +cname+ cannot be found in libraries - # - # Attach C variable +cname+ to this module. - def attach_variable(mname, a1, a2 = nil) - cname, type = a2 ? [ a1, a2 ] : [ mname.to_s, a1 ] - address = nil - ffi_libraries.each do |lib| - begin - address = lib.find_variable(cname.to_s) - break unless address.nil? - rescue LoadError - end - end - - raise FFI::NotFoundError.new(cname, ffi_libraries) if address.nil? || address.null? - if type.is_a?(Class) && type < FFI::Struct - # If it is a global struct, just attach directly to the pointer - s = type.new(address) - self.module_eval <<-code, __FILE__, __LINE__ - @@ffi_gvar_#{mname} = s - def self.#{mname} - @@ffi_gvar_#{mname} - end - code - - else - sc = Class.new(FFI::Struct) - sc.layout :gvar, find_type(type) - s = sc.new(address) - # - # Attach to this module as mname/mname= - # - self.module_eval <<-code, __FILE__, __LINE__ - @@ffi_gvar_#{mname} = s - def self.#{mname} - @@ffi_gvar_#{mname}[:gvar] - end - def self.#{mname}=(value) - @@ffi_gvar_#{mname}[:gvar] = value - end - code - - end - - address - end - - - # @overload callback(name, params, ret) - # @overload callback(params, ret) - # @param name callback name to add to type map - # @param [Array] params array of parameters' types - # @param [DataConverter, Struct, Symbol, Type] ret callback return type - # @return [FFI::CallbackInfo] - def callback(*args) - raise ArgumentError, "wrong number of arguments" if args.length < 2 || args.length > 3 - name, params, ret = if args.length == 3 - args - else - [ nil, args[0], args[1] ] - end - - native_params = params.map { |e| find_type(e) } - raise ArgumentError, "callbacks cannot have variadic parameters" if native_params.include?(FFI::Type::VARARGS) - options = Hash.new - options[:convention] = ffi_convention - options[:enums] = @ffi_enums if defined?(@ffi_enums) - cb = FFI::CallbackInfo.new(find_type(ret), native_params, options) - - # Add to the symbol -> type map (unless there was no name) - unless name.nil? - typedef cb, name - end - - cb - end - - # @param [DataConverter, Symbol, Type] old - # @param add - # @param [] info - # @return [FFI::Enum, FFI::Type] - # Register or get an already registered type definition. - # - # To register a new type definition, +old+ should be a {FFI::Type}. +add+ - # is in this case the type definition. - # - # If +old+ is a {DataConverter}, a {Type::Mapped} is returned. - # - # If +old+ is +:enum+ - # * and +add+ is an +Array+, a call to {#enum} is made with +add+ as single parameter; - # * in others cases, +info+ is used to create a named enum. - # - # If +old+ is a key for type map, #typedef get +old+ type definition. - def typedef(old, add, info=nil) - @ffi_typedefs = Hash.new unless defined?(@ffi_typedefs) - - @ffi_typedefs[add] = if old.kind_of?(FFI::Type) - old - - elsif @ffi_typedefs.has_key?(old) - @ffi_typedefs[old] - - elsif old.is_a?(DataConverter) - FFI::Type::Mapped.new(old) - - elsif old == :enum - if add.kind_of?(Array) - self.enum(add) - else - self.enum(info, add) - end - - else - FFI.find_type(old) - end - end - - # @overload enum(name, values) - # Create a named enum. - # @example - # enum :foo, [:zero, :one, :two] # named enum - # @param [Symbol] name name for new enum - # @param [Array] values values for enum - # @overload enum(*args) - # Create an unnamed enum. - # @example - # enum :zero, :one, :two # unnamed enum - # @param args values for enum - # @overload enum(values) - # Create an unnamed enum. - # @example - # enum [:zero, :one, :two] # unnamed enum, equivalent to above example - # @param [Array] values values for enum - # @overload enum(native_type, name, values) - # Create a named enum and specify the native type. - # @example - # enum FFI::Type::UINT64, :foo, [:zero, :one, :two] # named enum - # @param [FFI::Type] native_type native type for new enum - # @param [Symbol] name name for new enum - # @param [Array] values values for enum - # @overload enum(native_type, *args) - # Create an unnamed enum and specify the native type. - # @example - # enum FFI::Type::UINT64, :zero, :one, :two # unnamed enum - # @param [FFI::Type] native_type native type for new enum - # @param args values for enum - # @overload enum(native_type, values) - # Create an unnamed enum and specify the native type. - # @example - # enum Type::UINT64, [:zero, :one, :two] # unnamed enum, equivalent to above example - # @param [FFI::Type] native_type native type for new enum - # @param [Array] values values for enum - # @return [FFI::Enum] - # Create a new {FFI::Enum}. - def enum(*args) - native_type = args.first.kind_of?(FFI::Type) ? args.shift : nil - name, values = if args[0].kind_of?(Symbol) && args[1].kind_of?(Array) - [ args[0], args[1] ] - elsif args[0].kind_of?(Array) - [ nil, args[0] ] - else - [ nil, args ] - end - @ffi_enums = FFI::Enums.new unless defined?(@ffi_enums) - @ffi_enums << (e = native_type ? FFI::Enum.new(native_type, values, name) : FFI::Enum.new(values, name)) - - # If called as enum :foo, [ :zero, :one, :two ], add a typedef alias - typedef(e, name) if name - e - end - - # @param name - # @return [FFI::Enum] - # Find an enum by name. - def enum_type(name) - @ffi_enums.find(name) if defined?(@ffi_enums) - end - - # @param symbol - # @return [FFI::Enum] - # Find an enum by a symbol it contains. - def enum_value(symbol) - @ffi_enums.__map_symbol(symbol) - end - - # @param [DataConverter, Type, Struct, Symbol] t type to find - # @return [Type] - # Find a type definition. - def find_type(t) - if t.kind_of?(Type) - t - - elsif defined?(@ffi_typedefs) && @ffi_typedefs.has_key?(t) - @ffi_typedefs[t] - - elsif t.is_a?(Class) && t < Struct - Type::POINTER - - elsif t.is_a?(DataConverter) - # Add a typedef so next time the converter is used, it hits the cache - typedef Type::Mapped.new(t), t - - end || FFI.find_type(t) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/managedstruct.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/managedstruct.rb deleted file mode 100644 index 0536280..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/managedstruct.rb +++ /dev/null @@ -1,84 +0,0 @@ -# Copyright (C) 2008 Mike Dalessio -# -# This file is part of ruby-ffi. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# * Neither the name of the Ruby FFI project nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -module FFI - # - # FFI::ManagedStruct allows custom garbage-collection of your FFI::Structs. - # - # The typical use case would be when interacting with a library - # that has a nontrivial memory management design, such as a linked - # list or a binary tree. - # - # When the {Struct} instance is garbage collected, FFI::ManagedStruct will - # invoke the class's release() method during object finalization. - # - # @example Example usage: - # module MyLibrary - # ffi_lib "libmylibrary" - # attach_function :new_dlist, [], :pointer - # attach_function :destroy_dlist, [:pointer], :void - # end - # - # class DoublyLinkedList < FFI::ManagedStruct - # @@@ - # struct do |s| - # s.name 'struct dlist' - # s.include 'dlist.h' - # s.field :head, :pointer - # s.field :tail, :pointer - # end - # @@@ - # - # def self.release ptr - # MyLibrary.destroy_dlist(ptr) - # end - # end - # - # begin - # ptr = DoublyLinkedList.new(MyLibrary.new_dlist) - # # do something with the list - # end - # # struct is out of scope, and will be GC'd using DoublyLinkedList#release - # - # - class ManagedStruct < FFI::Struct - - # @overload initialize(pointer) - # @param [Pointer] pointer - # Create a new ManagedStruct which will invoke the class method #release on - # @overload initialize - # A new instance of FFI::ManagedStruct. - def initialize(pointer=nil) - raise NoMethodError, "release() not implemented for class #{self}" unless self.class.respond_to? :release - raise ArgumentError, "Must supply a pointer to memory for the Struct" unless pointer - super AutoPointer.new(pointer, self.class.method(:release)) - end - - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/memorypointer.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/memorypointer.rb deleted file mode 100644 index 9f07bc6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/memorypointer.rb +++ /dev/null @@ -1 +0,0 @@ -# This class is now implemented in C diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform.rb deleted file mode 100644 index ab647ef..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform.rb +++ /dev/null @@ -1,153 +0,0 @@ -# -# Copyright (C) 2008, 2009 Wayne Meissner -# -# This file is part of ruby-ffi. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# * Neither the name of the Ruby FFI project nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.# - -require 'rbconfig' -module FFI - class PlatformError < LoadError; end - - # This module defines different constants and class methods to play with - # various platforms. - module Platform - OS = case RbConfig::CONFIG['host_os'].downcase - when /linux/ - "linux" - when /darwin/ - "darwin" - when /freebsd/ - "freebsd" - when /netbsd/ - "netbsd" - when /openbsd/ - "openbsd" - when /sunos|solaris/ - "solaris" - when /mingw|mswin/ - "windows" - else - RbConfig::CONFIG['host_os'].downcase - end - - ARCH = case CPU.downcase - when /amd64|x86_64/ - "x86_64" - when /i?86|x86|i86pc/ - "i386" - when /ppc64|powerpc64/ - "powerpc64" - when /ppc|powerpc/ - "powerpc" - else - case RbConfig::CONFIG['host_cpu'] - when /^arm/ - "arm" - else - RbConfig::CONFIG['host_cpu'] - end - end - - private - # @param [String) os - # @return [Boolean] - # Test if current OS is +os+. - def self.is_os(os) - OS == os - end - - NAME = "#{ARCH}-#{OS}" - IS_GNU = defined?(GNU_LIBC) - IS_LINUX = is_os("linux") - IS_MAC = is_os("darwin") - IS_FREEBSD = is_os("freebsd") - IS_NETBSD = is_os("netbsd") - IS_OPENBSD = is_os("openbsd") - IS_WINDOWS = is_os("windows") - IS_BSD = IS_MAC || IS_FREEBSD || IS_NETBSD || IS_OPENBSD - CONF_DIR = File.join(File.dirname(__FILE__), 'platform', NAME) - public - - - - LIBPREFIX = case OS - when /windows/ - '' - when /cygwin/ - 'cyg' - else - 'lib' - end - - LIBSUFFIX = case OS - when /darwin/ - 'dylib' - when /linux|bsd|solaris/ - 'so' - when /windows|cygwin/ - 'dll' - else - # Punt and just assume a sane unix (i.e. anything but AIX) - 'so' - end - - LIBC = if IS_WINDOWS - RbConfig::CONFIG['RUBY_SO_NAME'].split('-')[-2] + '.dll' - elsif IS_GNU - GNU_LIBC - elsif OS == 'cygwin' - "cygwin1.dll" - else - "#{LIBPREFIX}c.#{LIBSUFFIX}" - end - - # Test if current OS is a *BSD (include MAC) - # @return [Boolean] - def self.bsd? - IS_BSD - end - - # Test if current OS is Windows - # @return [Boolean] - def self.windows? - IS_WINDOWS - end - - # Test if current OS is Mac OS - # @return [Boolean] - def self.mac? - IS_MAC - end - - # Test if current OS is a unix OS - # @return [Boolean] - def self.unix? - !IS_WINDOWS - end - end -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/aarch64-linux/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/aarch64-linux/types.conf deleted file mode 100644 index 072c419..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/aarch64-linux/types.conf +++ /dev/null @@ -1,104 +0,0 @@ -rbx.platform.typedef.__u_char = uchar -rbx.platform.typedef.__u_short = ushort -rbx.platform.typedef.__u_int = uint -rbx.platform.typedef.__u_long = ulong -rbx.platform.typedef.__int8_t = char -rbx.platform.typedef.__uint8_t = uchar -rbx.platform.typedef.__int16_t = short -rbx.platform.typedef.__uint16_t = ushort -rbx.platform.typedef.__int32_t = int -rbx.platform.typedef.__uint32_t = uint -rbx.platform.typedef.__int64_t = long -rbx.platform.typedef.__uint64_t = ulong -rbx.platform.typedef.__quad_t = long -rbx.platform.typedef.__u_quad_t = ulong -rbx.platform.typedef.__dev_t = ulong -rbx.platform.typedef.__uid_t = uint -rbx.platform.typedef.__gid_t = uint -rbx.platform.typedef.__ino_t = ulong -rbx.platform.typedef.__ino64_t = ulong -rbx.platform.typedef.__mode_t = uint -rbx.platform.typedef.__nlink_t = uint -rbx.platform.typedef.__off_t = long -rbx.platform.typedef.__off64_t = long -rbx.platform.typedef.__pid_t = int -rbx.platform.typedef.__clock_t = long -rbx.platform.typedef.__rlim_t = ulong -rbx.platform.typedef.__rlim64_t = ulong -rbx.platform.typedef.__id_t = uint -rbx.platform.typedef.__time_t = long -rbx.platform.typedef.__useconds_t = uint -rbx.platform.typedef.__suseconds_t = long -rbx.platform.typedef.__daddr_t = int -rbx.platform.typedef.__key_t = int -rbx.platform.typedef.__clockid_t = int -rbx.platform.typedef.__timer_t = pointer -rbx.platform.typedef.__blksize_t = int -rbx.platform.typedef.__blkcnt_t = long -rbx.platform.typedef.__blkcnt64_t = long -rbx.platform.typedef.__fsblkcnt_t = ulong -rbx.platform.typedef.__fsblkcnt64_t = ulong -rbx.platform.typedef.__fsfilcnt_t = ulong -rbx.platform.typedef.__fsfilcnt64_t = ulong -rbx.platform.typedef.__fsword_t = long -rbx.platform.typedef.__ssize_t = long -rbx.platform.typedef.__syscall_slong_t = long -rbx.platform.typedef.__syscall_ulong_t = ulong -rbx.platform.typedef.__loff_t = long -rbx.platform.typedef.*__qaddr_t = long -rbx.platform.typedef.*__caddr_t = char -rbx.platform.typedef.__intptr_t = long -rbx.platform.typedef.__socklen_t = uint -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.quad_t = long -rbx.platform.typedef.u_quad_t = ulong -rbx.platform.typedef.loff_t = long -rbx.platform.typedef.ino_t = ulong -rbx.platform.typedef.dev_t = ulong -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.mode_t = uint -rbx.platform.typedef.nlink_t = uint -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.off_t = long -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.id_t = uint -rbx.platform.typedef.ssize_t = long -rbx.platform.typedef.daddr_t = int -rbx.platform.typedef.key_t = int -rbx.platform.typedef.clock_t = long -rbx.platform.typedef.time_t = long -rbx.platform.typedef.clockid_t = int -rbx.platform.typedef.timer_t = pointer -rbx.platform.typedef.size_t = ulong -rbx.platform.typedef.ulong = ulong -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.u_int8_t = uchar -rbx.platform.typedef.u_int16_t = ushort -rbx.platform.typedef.u_int32_t = uint -rbx.platform.typedef.u_int64_t = ulong_long -rbx.platform.typedef.register_t = long -rbx.platform.typedef.__sig_atomic_t = int -rbx.platform.typedef.suseconds_t = long -rbx.platform.typedef.__fd_mask = long -rbx.platform.typedef.fd_mask = long -rbx.platform.typedef.blksize_t = int -rbx.platform.typedef.blkcnt_t = long -rbx.platform.typedef.fsblkcnt_t = ulong -rbx.platform.typedef.fsfilcnt_t = ulong -rbx.platform.typedef.pthread_t = ulong -rbx.platform.typedef.pthread_key_t = uint -rbx.platform.typedef.pthread_once_t = int -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.sa_family_t = ushort -rbx.platform.typedef.rlim_t = ulong -rbx.platform.typedef.__rlimit_resource_t = int -rbx.platform.typedef.__rusage_who_t = int -rbx.platform.typedef.__priority_which_t = int diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/arm-linux/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/arm-linux/types.conf deleted file mode 100644 index e9a923b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/arm-linux/types.conf +++ /dev/null @@ -1,104 +0,0 @@ -rbx.platform.typedef.__u_char = uchar -rbx.platform.typedef.__u_short = ushort -rbx.platform.typedef.__u_int = uint -rbx.platform.typedef.__u_long = ulong -rbx.platform.typedef.__int8_t = char -rbx.platform.typedef.__uint8_t = uchar -rbx.platform.typedef.__int16_t = short -rbx.platform.typedef.__uint16_t = ushort -rbx.platform.typedef.__int32_t = int -rbx.platform.typedef.__uint32_t = uint -rbx.platform.typedef.__int64_t = long_long -rbx.platform.typedef.__uint64_t = ulong_long -rbx.platform.typedef.__quad_t = long_long -rbx.platform.typedef.__u_quad_t = ulong_long -rbx.platform.typedef.__dev_t = ulong_long -rbx.platform.typedef.__uid_t = uint -rbx.platform.typedef.__gid_t = uint -rbx.platform.typedef.__in_addr_t = uint -rbx.platform.typedef.__in_port_t = ushort -rbx.platform.typedef.__ino_t = ulong -rbx.platform.typedef.__ino64_t = ulong_long -rbx.platform.typedef.__mode_t = uint -rbx.platform.typedef.__nlink_t = uint -rbx.platform.typedef.__off_t = long -rbx.platform.typedef.__off64_t = long_long -rbx.platform.typedef.__pid_t = int -rbx.platform.typedef.__clock_t = long -rbx.platform.typedef.__rlim_t = ulong -rbx.platform.typedef.__rlim64_t = ulong_long -rbx.platform.typedef.__id_t = uint -rbx.platform.typedef.__time_t = long -rbx.platform.typedef.__useconds_t = uint -rbx.platform.typedef.__suseconds_t = long -rbx.platform.typedef.__daddr_t = int -rbx.platform.typedef.__swblk_t = long -rbx.platform.typedef.__key_t = int -rbx.platform.typedef.__clockid_t = int -rbx.platform.typedef.__timer_t = pointer -rbx.platform.typedef.__blksize_t = long -rbx.platform.typedef.__blkcnt_t = long -rbx.platform.typedef.__blkcnt64_t = long_long -rbx.platform.typedef.__fsblkcnt_t = ulong -rbx.platform.typedef.__fsblkcnt64_t = ulong_long -rbx.platform.typedef.__fsfilcnt_t = ulong -rbx.platform.typedef.__fsfilcnt64_t = ulong_long -rbx.platform.typedef.__ssize_t = int -rbx.platform.typedef.__loff_t = long_long -rbx.platform.typedef.*__qaddr_t = long_long -rbx.platform.typedef.*__caddr_t = char -rbx.platform.typedef.__intptr_t = int -rbx.platform.typedef.__socklen_t = uint -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.quad_t = long_long -rbx.platform.typedef.u_quad_t = ulong_long -rbx.platform.typedef.loff_t = long_long -rbx.platform.typedef.ino_t = ulong_long -rbx.platform.typedef.dev_t = ulong_long -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.mode_t = uint -rbx.platform.typedef.nlink_t = uint -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.off_t = long_long -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.id_t = uint -rbx.platform.typedef.ssize_t = int -rbx.platform.typedef.daddr_t = int -rbx.platform.typedef.key_t = int -rbx.platform.typedef.clock_t = long -rbx.platform.typedef.time_t = long -rbx.platform.typedef.clockid_t = int -rbx.platform.typedef.timer_t = pointer -rbx.platform.typedef.size_t = uint -rbx.platform.typedef.ulong = ulong -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.u_int8_t = uchar -rbx.platform.typedef.u_int16_t = ushort -rbx.platform.typedef.u_int32_t = uint -rbx.platform.typedef.u_int64_t = ulong_long -rbx.platform.typedef.register_t = long -rbx.platform.typedef.__sig_atomic_t = int -rbx.platform.typedef.suseconds_t = long -rbx.platform.typedef.__fd_mask = long -rbx.platform.typedef.fd_mask = long -rbx.platform.typedef.blksize_t = long -rbx.platform.typedef.blkcnt_t = long_long -rbx.platform.typedef.fsblkcnt_t = ulong_long -rbx.platform.typedef.fsfilcnt_t = ulong_long -rbx.platform.typedef.pthread_t = ulong -rbx.platform.typedef.pthread_key_t = uint -rbx.platform.typedef.pthread_once_t = int -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.sa_family_t = ushort -rbx.platform.typedef.rlim_t = ulong_long -rbx.platform.typedef.__rlimit_resource_t = int -rbx.platform.typedef.__rusage_who_t = int -rbx.platform.typedef.__priority_which_t = int diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-cygwin/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-cygwin/types.conf deleted file mode 100755 index cd3cc38..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-cygwin/types.conf +++ /dev/null @@ -1,3 +0,0 @@ -rbx.platform.typedef.size_t = uint -rbx.platform.typedef.ptrdiff_t = int -rbx.platform.typedef.ssize_t = int diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-darwin/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-darwin/types.conf deleted file mode 100644 index 6b9313e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-darwin/types.conf +++ /dev/null @@ -1,100 +0,0 @@ -rbx.platform.typedef.__int8_t = char -rbx.platform.typedef.__uint8_t = uchar -rbx.platform.typedef.__int16_t = short -rbx.platform.typedef.__uint16_t = ushort -rbx.platform.typedef.__int32_t = int -rbx.platform.typedef.__uint32_t = uint -rbx.platform.typedef.__int64_t = long_long -rbx.platform.typedef.__uint64_t = ulong_long -rbx.platform.typedef.__darwin_intptr_t = long -rbx.platform.typedef.__darwin_natural_t = uint -rbx.platform.typedef.__darwin_ct_rune_t = int -rbx.platform.typedef.__darwin_ptrdiff_t = int -rbx.platform.typedef.__darwin_size_t = ulong -rbx.platform.typedef.__darwin_wchar_t = int -rbx.platform.typedef.__darwin_rune_t = int -rbx.platform.typedef.__darwin_wint_t = int -rbx.platform.typedef.__darwin_clock_t = ulong -rbx.platform.typedef.__darwin_socklen_t = uint -rbx.platform.typedef.__darwin_ssize_t = long -rbx.platform.typedef.__darwin_time_t = long -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.u_int8_t = uchar -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.u_int16_t = ushort -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.u_int32_t = uint -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.u_int64_t = ulong_long -rbx.platform.typedef.register_t = int -rbx.platform.typedef.intptr_t = long -rbx.platform.typedef.uintptr_t = ulong -rbx.platform.typedef.user_addr_t = ulong_long -rbx.platform.typedef.user_size_t = ulong_long -rbx.platform.typedef.user_ssize_t = long_long -rbx.platform.typedef.user_long_t = long_long -rbx.platform.typedef.user_ulong_t = ulong_long -rbx.platform.typedef.user_time_t = long_long -rbx.platform.typedef.syscall_arg_t = ulong_long -rbx.platform.typedef.__darwin_blkcnt_t = long_long -rbx.platform.typedef.__darwin_blksize_t = int -rbx.platform.typedef.__darwin_dev_t = int -rbx.platform.typedef.__darwin_fsblkcnt_t = uint -rbx.platform.typedef.__darwin_fsfilcnt_t = uint -rbx.platform.typedef.__darwin_gid_t = uint -rbx.platform.typedef.__darwin_id_t = uint -rbx.platform.typedef.__darwin_ino64_t = ulong_long -rbx.platform.typedef.__darwin_ino_t = ulong_long -rbx.platform.typedef.__darwin_mach_port_name_t = uint -rbx.platform.typedef.__darwin_mach_port_t = uint -rbx.platform.typedef.__darwin_mode_t = ushort -rbx.platform.typedef.__darwin_off_t = long_long -rbx.platform.typedef.__darwin_pid_t = int -rbx.platform.typedef.__darwin_pthread_key_t = ulong -rbx.platform.typedef.__darwin_sigset_t = uint -rbx.platform.typedef.__darwin_suseconds_t = int -rbx.platform.typedef.__darwin_uid_t = uint -rbx.platform.typedef.__darwin_useconds_t = uint -rbx.platform.typedef.__darwin_uuid_t[16] = uchar -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.u_quad_t = ulong_long -rbx.platform.typedef.quad_t = long_long -rbx.platform.typedef.qaddr_t = pointer -rbx.platform.typedef.caddr_t = string -rbx.platform.typedef.daddr_t = int -rbx.platform.typedef.dev_t = int -rbx.platform.typedef.fixpt_t = uint -rbx.platform.typedef.blkcnt_t = long_long -rbx.platform.typedef.blksize_t = int -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.in_addr_t = uint -rbx.platform.typedef.in_port_t = ushort -rbx.platform.typedef.ino_t = ulong_long -rbx.platform.typedef.ino64_t = ulong_long -rbx.platform.typedef.key_t = int -rbx.platform.typedef.mode_t = ushort -rbx.platform.typedef.nlink_t = ushort -rbx.platform.typedef.id_t = uint -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.off_t = long_long -rbx.platform.typedef.segsz_t = int -rbx.platform.typedef.swblk_t = int -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.clock_t = ulong -rbx.platform.typedef.size_t = ulong -rbx.platform.typedef.ssize_t = long -rbx.platform.typedef.time_t = long -rbx.platform.typedef.useconds_t = uint -rbx.platform.typedef.suseconds_t = int -rbx.platform.typedef.fd_mask = int -rbx.platform.typedef.pthread_key_t = ulong -rbx.platform.typedef.fsblkcnt_t = uint -rbx.platform.typedef.fsfilcnt_t = uint -rbx.platform.typedef.sa_family_t = uchar -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.rlim_t = ulong_long diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-freebsd/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-freebsd/types.conf deleted file mode 100644 index 3e7b20d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-freebsd/types.conf +++ /dev/null @@ -1,152 +0,0 @@ -rbx.platform.typedef.__int8_t = char -rbx.platform.typedef.__uint8_t = uchar -rbx.platform.typedef.__int16_t = short -rbx.platform.typedef.__uint16_t = ushort -rbx.platform.typedef.__int32_t = int -rbx.platform.typedef.__uint32_t = uint -rbx.platform.typedef.__int64_t = long_long -rbx.platform.typedef.__uint64_t = ulong_long -rbx.platform.typedef.__clock_t = ulong -rbx.platform.typedef.__cpumask_t = uint -rbx.platform.typedef.__critical_t = int -rbx.platform.typedef.__intfptr_t = int -rbx.platform.typedef.__intmax_t = long_long -rbx.platform.typedef.__intptr_t = int -rbx.platform.typedef.__int_fast8_t = int -rbx.platform.typedef.__int_fast16_t = int -rbx.platform.typedef.__int_fast32_t = int -rbx.platform.typedef.__int_fast64_t = long_long -rbx.platform.typedef.__int_least8_t = char -rbx.platform.typedef.__int_least16_t = short -rbx.platform.typedef.__int_least32_t = int -rbx.platform.typedef.__int_least64_t = long_long -rbx.platform.typedef.__ptrdiff_t = int -rbx.platform.typedef.__register_t = int -rbx.platform.typedef.__segsz_t = int -rbx.platform.typedef.__size_t = uint -rbx.platform.typedef.__ssize_t = int -rbx.platform.typedef.__time_t = int -rbx.platform.typedef.__uintfptr_t = uint -rbx.platform.typedef.__uintmax_t = ulong_long -rbx.platform.typedef.__uintptr_t = uint -rbx.platform.typedef.__uint_fast8_t = uint -rbx.platform.typedef.__uint_fast16_t = uint -rbx.platform.typedef.__uint_fast32_t = uint -rbx.platform.typedef.__uint_fast64_t = ulong_long -rbx.platform.typedef.__uint_least8_t = uchar -rbx.platform.typedef.__uint_least16_t = ushort -rbx.platform.typedef.__uint_least32_t = uint -rbx.platform.typedef.__uint_least64_t = ulong_long -rbx.platform.typedef.__u_register_t = uint -rbx.platform.typedef.__vm_offset_t = uint -rbx.platform.typedef.__vm_ooffset_t = long_long -rbx.platform.typedef.__vm_paddr_t = uint -rbx.platform.typedef.__vm_pindex_t = ulong_long -rbx.platform.typedef.__vm_size_t = uint -rbx.platform.typedef.__blksize_t = uint -rbx.platform.typedef.__blkcnt_t = long_long -rbx.platform.typedef.__clockid_t = int -rbx.platform.typedef.__fflags_t = uint -rbx.platform.typedef.__fsblkcnt_t = ulong_long -rbx.platform.typedef.__fsfilcnt_t = ulong_long -rbx.platform.typedef.__gid_t = uint -rbx.platform.typedef.__id_t = long_long -rbx.platform.typedef.__ino_t = uint -rbx.platform.typedef.__key_t = long -rbx.platform.typedef.__lwpid_t = int -rbx.platform.typedef.__mode_t = ushort -rbx.platform.typedef.__accmode_t = int -rbx.platform.typedef.__nl_item = int -rbx.platform.typedef.__nlink_t = ushort -rbx.platform.typedef.__off_t = long_long -rbx.platform.typedef.__pid_t = int -rbx.platform.typedef.__rlim_t = long_long -rbx.platform.typedef.__sa_family_t = uchar -rbx.platform.typedef.__socklen_t = uint -rbx.platform.typedef.__suseconds_t = long -rbx.platform.typedef.__uid_t = uint -rbx.platform.typedef.__useconds_t = uint -rbx.platform.typedef.__cpuwhich_t = int -rbx.platform.typedef.__cpulevel_t = int -rbx.platform.typedef.__cpusetid_t = int -rbx.platform.typedef.__ct_rune_t = int -rbx.platform.typedef.__rune_t = int -rbx.platform.typedef.__wchar_t = int -rbx.platform.typedef.__wint_t = int -rbx.platform.typedef.__wint_t = int -rbx.platform.typedef.__dev_t = uint -rbx.platform.typedef.__fixpt_t = uint -rbx.platform.typedef.pthread_key_t = int -rbx.platform.typedef.*) = pointer -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.uint8_t = uchar -rbx.platform.typedef.uint16_t = ushort -rbx.platform.typedef.uint32_t = uint -rbx.platform.typedef.uint64_t = ulong_long -rbx.platform.typedef.intptr_t = int -rbx.platform.typedef.uintptr_t = uint -rbx.platform.typedef.u_int8_t = uchar -rbx.platform.typedef.u_int16_t = ushort -rbx.platform.typedef.u_int32_t = uint -rbx.platform.typedef.u_int64_t = ulong_long -rbx.platform.typedef.u_quad_t = ulong_long -rbx.platform.typedef.quad_t = long_long -rbx.platform.typedef.qaddr_t = pointer -rbx.platform.typedef.caddr_t = string -rbx.platform.typedef.c_caddr_t = pointer -rbx.platform.typedef.blksize_t = uint -rbx.platform.typedef.cpuwhich_t = int -rbx.platform.typedef.cpulevel_t = int -rbx.platform.typedef.cpusetid_t = int -rbx.platform.typedef.blkcnt_t = long_long -rbx.platform.typedef.clock_t = ulong -rbx.platform.typedef.clockid_t = int -rbx.platform.typedef.cpumask_t = uint -rbx.platform.typedef.critical_t = int -rbx.platform.typedef.daddr_t = long_long -rbx.platform.typedef.dev_t = uint -rbx.platform.typedef.fflags_t = uint -rbx.platform.typedef.fixpt_t = uint -rbx.platform.typedef.fsblkcnt_t = ulong_long -rbx.platform.typedef.fsfilcnt_t = ulong_long -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.in_addr_t = uint -rbx.platform.typedef.in_port_t = ushort -rbx.platform.typedef.id_t = long_long -rbx.platform.typedef.ino_t = uint -rbx.platform.typedef.key_t = long -rbx.platform.typedef.lwpid_t = int -rbx.platform.typedef.mode_t = ushort -rbx.platform.typedef.accmode_t = int -rbx.platform.typedef.nlink_t = ushort -rbx.platform.typedef.off_t = long_long -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.register_t = int -rbx.platform.typedef.rlim_t = long_long -rbx.platform.typedef.segsz_t = int -rbx.platform.typedef.size_t = uint -rbx.platform.typedef.ssize_t = int -rbx.platform.typedef.suseconds_t = long -rbx.platform.typedef.time_t = int -rbx.platform.typedef.u_register_t = uint -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.useconds_t = uint -rbx.platform.typedef.vm_offset_t = uint -rbx.platform.typedef.vm_ooffset_t = long_long -rbx.platform.typedef.vm_paddr_t = uint -rbx.platform.typedef.vm_pindex_t = ulong_long -rbx.platform.typedef.vm_size_t = uint -rbx.platform.typedef.__fd_mask = ulong -rbx.platform.typedef.fd_mask = ulong -rbx.platform.typedef.sa_family_t = uchar -rbx.platform.typedef.socklen_t = uint - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-gnu/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-gnu/types.conf deleted file mode 100644 index f9169c2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-gnu/types.conf +++ /dev/null @@ -1,107 +0,0 @@ -rbx.platform.typedef.__u_char = uchar -rbx.platform.typedef.__u_short = ushort -rbx.platform.typedef.__u_int = uint -rbx.platform.typedef.__u_long = ulong -rbx.platform.typedef.__int8_t = char -rbx.platform.typedef.__uint8_t = uchar -rbx.platform.typedef.__int16_t = short -rbx.platform.typedef.__uint16_t = ushort -rbx.platform.typedef.__int32_t = int -rbx.platform.typedef.__uint32_t = uint -rbx.platform.typedef.__int64_t = long_long -rbx.platform.typedef.__uint64_t = ulong_long -rbx.platform.typedef.__quad_t = long_long -rbx.platform.typedef.__u_quad_t = ulong_long -rbx.platform.typedef.__dev_t = uint -rbx.platform.typedef.__uid_t = uint -rbx.platform.typedef.__gid_t = uint -rbx.platform.typedef.__ino_t = ulong -rbx.platform.typedef.__ino64_t = ulong_long -rbx.platform.typedef.__mode_t = uint -rbx.platform.typedef.__nlink_t = uint -rbx.platform.typedef.__off_t = long -rbx.platform.typedef.__off64_t = long_long -rbx.platform.typedef.__pid_t = int -rbx.platform.typedef.__fsid_t = ulong_long -rbx.platform.typedef.__clock_t = long -rbx.platform.typedef.__rlim_t = ulong -rbx.platform.typedef.__rlim64_t = ulong_long -rbx.platform.typedef.__id_t = uint -rbx.platform.typedef.__time_t = long -rbx.platform.typedef.__useconds_t = uint -rbx.platform.typedef.__suseconds_t = long -rbx.platform.typedef.__daddr_t = int -rbx.platform.typedef.__swblk_t = long -rbx.platform.typedef.__key_t = int -rbx.platform.typedef.__clockid_t = int -rbx.platform.typedef.__timer_t = int -rbx.platform.typedef.__blksize_t = long -rbx.platform.typedef.__blkcnt_t = long -rbx.platform.typedef.__blkcnt64_t = long_long -rbx.platform.typedef.__fsblkcnt_t = ulong -rbx.platform.typedef.__fsblkcnt64_t = ulong_long -rbx.platform.typedef.__fsfilcnt_t = ulong -rbx.platform.typedef.__fsfilcnt64_t = ulong_long -rbx.platform.typedef.__ssize_t = int -rbx.platform.typedef.__loff_t = long_long -rbx.platform.typedef.*__qaddr_t = long_long -rbx.platform.typedef.*__caddr_t = char -rbx.platform.typedef.__intptr_t = int -rbx.platform.typedef.__socklen_t = uint -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.quad_t = long_long -rbx.platform.typedef.u_quad_t = ulong_long -rbx.platform.typedef.fsid_t = ulong_long -rbx.platform.typedef.loff_t = long_long -rbx.platform.typedef.ino_t = ulong_long -rbx.platform.typedef.dev_t = uint -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.mode_t = uint -rbx.platform.typedef.nlink_t = uint -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.off_t = long_long -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.id_t = uint -rbx.platform.typedef.ssize_t = int -rbx.platform.typedef.daddr_t = int -rbx.platform.typedef.key_t = int -rbx.platform.typedef.clock_t = long -rbx.platform.typedef.time_t = long -rbx.platform.typedef.clockid_t = int -rbx.platform.typedef.timer_t = int -rbx.platform.typedef.size_t = uint -rbx.platform.typedef.ulong = ulong -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.u_int8_t = uchar -rbx.platform.typedef.u_int16_t = ushort -rbx.platform.typedef.u_int32_t = uint -rbx.platform.typedef.u_int64_t = ulong_long -rbx.platform.typedef.register_t = long -rbx.platform.typedef.__sig_atomic_t = int -rbx.platform.typedef.__sigset_t = ulong -rbx.platform.typedef.sigset_t = ulong -rbx.platform.typedef.suseconds_t = long -rbx.platform.typedef.__fd_mask = long -rbx.platform.typedef.fd_mask = long -rbx.platform.typedef.blksize_t = long -rbx.platform.typedef.blkcnt_t = long_long -rbx.platform.typedef.fsblkcnt_t = ulong_long -rbx.platform.typedef.fsfilcnt_t = ulong_long -rbx.platform.typedef.__pthread_t = int -rbx.platform.typedef.pthread_t = int -rbx.platform.typedef.__pthread_key = int -rbx.platform.typedef.pthread_key_t = int -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.sa_family_t = uchar -rbx.platform.typedef.rlim_t = ulong_long -rbx.platform.typedef.__rlimit_resource_t = int -rbx.platform.typedef.__rusage_who_t = int -rbx.platform.typedef.__priority_which_t = int diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-linux/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-linux/types.conf deleted file mode 100644 index c46a134..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-linux/types.conf +++ /dev/null @@ -1,103 +0,0 @@ -rbx.platform.typedef.__u_char = uchar -rbx.platform.typedef.__u_short = ushort -rbx.platform.typedef.__u_int = uint -rbx.platform.typedef.__u_long = ulong -rbx.platform.typedef.__int8_t = char -rbx.platform.typedef.__uint8_t = uchar -rbx.platform.typedef.__int16_t = short -rbx.platform.typedef.__uint16_t = ushort -rbx.platform.typedef.__int32_t = int -rbx.platform.typedef.__uint32_t = uint -rbx.platform.typedef.__int64_t = long_long -rbx.platform.typedef.__uint64_t = ulong_long -rbx.platform.typedef.__quad_t = long_long -rbx.platform.typedef.__u_quad_t = ulong_long -rbx.platform.typedef.__dev_t = ulong_long -rbx.platform.typedef.__uid_t = uint -rbx.platform.typedef.__gid_t = uint -rbx.platform.typedef.__ino_t = ulong -rbx.platform.typedef.__ino64_t = ulong_long -rbx.platform.typedef.__mode_t = uint -rbx.platform.typedef.__nlink_t = uint -rbx.platform.typedef.__off_t = long -rbx.platform.typedef.__off64_t = long_long -rbx.platform.typedef.__pid_t = int -rbx.platform.typedef.__clock_t = long -rbx.platform.typedef.__rlim_t = ulong -rbx.platform.typedef.__rlim64_t = ulong_long -rbx.platform.typedef.__id_t = uint -rbx.platform.typedef.__time_t = long -rbx.platform.typedef.__useconds_t = uint -rbx.platform.typedef.__suseconds_t = long -rbx.platform.typedef.__daddr_t = int -rbx.platform.typedef.__swblk_t = long -rbx.platform.typedef.__key_t = int -rbx.platform.typedef.__clockid_t = int -rbx.platform.typedef.__timer_t = pointer -rbx.platform.typedef.blksize_t = long -rbx.platform.typedef.__blksize_t = long -rbx.platform.typedef.__blkcnt_t = long -rbx.platform.typedef.__blkcnt64_t = long_long -rbx.platform.typedef.__fsblkcnt_t = ulong -rbx.platform.typedef.__fsblkcnt64_t = ulong_long -rbx.platform.typedef.__fsfilcnt_t = ulong -rbx.platform.typedef.__fsfilcnt64_t = ulong_long -rbx.platform.typedef.__ssize_t = int -rbx.platform.typedef.__loff_t = long_long -rbx.platform.typedef.*__qaddr_t = long_long -rbx.platform.typedef.*__caddr_t = char -rbx.platform.typedef.__intptr_t = int -rbx.platform.typedef.__socklen_t = uint -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.quad_t = long_long -rbx.platform.typedef.u_quad_t = ulong_long -rbx.platform.typedef.loff_t = long_long -rbx.platform.typedef.ino_t = ulong_long -rbx.platform.typedef.dev_t = ulong_long -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.in_addr_t = uint -rbx.platform.typedef.in_port_t = ushort -rbx.platform.typedef.mode_t = uint -rbx.platform.typedef.nlink_t = uint -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.off_t = long_long -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.id_t = uint -rbx.platform.typedef.ssize_t = int -rbx.platform.typedef.daddr_t = int -rbx.platform.typedef.key_t = int -rbx.platform.typedef.time_t = long -rbx.platform.typedef.clockid_t = int -rbx.platform.typedef.timer_t = pointer -rbx.platform.typedef.size_t = uint -rbx.platform.typedef.ulong = ulong -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.u_int8_t = uchar -rbx.platform.typedef.u_int16_t = ushort -rbx.platform.typedef.u_int32_t = uint -rbx.platform.typedef.u_int64_t = ulong_long -rbx.platform.typedef.register_t = long -rbx.platform.typedef.__sig_atomic_t = int -rbx.platform.typedef.suseconds_t = long -rbx.platform.typedef.__fd_mask = long -rbx.platform.typedef.fd_mask = long -rbx.platform.typedef.blkcnt_t = long_long -rbx.platform.typedef.fsblkcnt_t = ulong_long -rbx.platform.typedef.fsfilcnt_t = ulong_long -rbx.platform.typedef.pthread_t = ulong -rbx.platform.typedef.pthread_key_t = uint -rbx.platform.typedef.pthread_once_t = int -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.sa_family_t = ushort -rbx.platform.typedef.rlim_t = ulong_long -rbx.platform.typedef.__rlimit_resource_t = int -rbx.platform.typedef.__rusage_who_t = int -rbx.platform.typedef.__priority_which_t = int diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-netbsd/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-netbsd/types.conf deleted file mode 100644 index 33bd12b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-netbsd/types.conf +++ /dev/null @@ -1,126 +0,0 @@ -rbx.platform.typedef.__int8_t = char -rbx.platform.typedef.__uint8_t = uchar -rbx.platform.typedef.__int16_t = short -rbx.platform.typedef.__uint16_t = ushort -rbx.platform.typedef.__int32_t = int -rbx.platform.typedef.__uint32_t = uint -rbx.platform.typedef.__int64_t = long_long -rbx.platform.typedef.__uint64_t = ulong_long -rbx.platform.typedef.__int_least8_t = char -rbx.platform.typedef.__uint_least8_t = uchar -rbx.platform.typedef.__int_least16_t = short -rbx.platform.typedef.__uint_least16_t = ushort -rbx.platform.typedef.__int_least32_t = int -rbx.platform.typedef.__uint_least32_t = uint -rbx.platform.typedef.__int_least64_t = long_long -rbx.platform.typedef.__uint_least64_t = ulong_long -rbx.platform.typedef.__int_fast8_t = int -rbx.platform.typedef.__uint_fast8_t = uint -rbx.platform.typedef.__int_fast16_t = int -rbx.platform.typedef.__uint_fast16_t = uint -rbx.platform.typedef.__int_fast32_t = int -rbx.platform.typedef.__uint_fast32_t = uint -rbx.platform.typedef.__int_fast64_t = long_long -rbx.platform.typedef.__uint_fast64_t = ulong_long -rbx.platform.typedef.__intptr_t = long -rbx.platform.typedef.__uintptr_t = ulong -rbx.platform.typedef.__intmax_t = long_long -rbx.platform.typedef.__uintmax_t = ulong_long -rbx.platform.typedef.__register_t = int -rbx.platform.typedef.__vaddr_t = ulong -rbx.platform.typedef.__paddr_t = ulong -rbx.platform.typedef.__vsize_t = ulong -rbx.platform.typedef.__psize_t = ulong -rbx.platform.typedef.__clock_t = int -rbx.platform.typedef.__clockid_t = int -rbx.platform.typedef.__off_t = long_long -rbx.platform.typedef.__ptrdiff_t = long -rbx.platform.typedef.__size_t = ulong -rbx.platform.typedef.__ssize_t = long -rbx.platform.typedef.__time_t = int -rbx.platform.typedef.__timer_t = int -rbx.platform.typedef.__wchar_t = int -rbx.platform.typedef.__wint_t = int -rbx.platform.typedef.__rune_t = int -rbx.platform.typedef.__wctrans_t = pointer -rbx.platform.typedef.__wctype_t = pointer -rbx.platform.typedef.__cpuid_t = ulong -rbx.platform.typedef.__dev_t = int -rbx.platform.typedef.__fixpt_t = uint -rbx.platform.typedef.__gid_t = uint -rbx.platform.typedef.__id_t = uint -rbx.platform.typedef.__in_addr_t = uint -rbx.platform.typedef.__in_port_t = ushort -rbx.platform.typedef.__ino_t = uint -rbx.platform.typedef.__key_t = long -rbx.platform.typedef.__mode_t = uint -rbx.platform.typedef.__nlink_t = uint -rbx.platform.typedef.__pid_t = int -rbx.platform.typedef.__rlim_t = ulong_long -rbx.platform.typedef.__sa_family_t = uchar -rbx.platform.typedef.__segsz_t = int -rbx.platform.typedef.__socklen_t = uint -rbx.platform.typedef.__swblk_t = int -rbx.platform.typedef.__uid_t = uint -rbx.platform.typedef.__useconds_t = uint -rbx.platform.typedef.__suseconds_t = int -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.unchar = uchar -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.ulong = ulong -rbx.platform.typedef.cpuid_t = ulong -rbx.platform.typedef.register_t = int -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.uint8_t = uchar -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.uint16_t = ushort -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.uint32_t = uint -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.uint64_t = ulong_long -rbx.platform.typedef.u_int8_t = uchar -rbx.platform.typedef.u_int16_t = ushort -rbx.platform.typedef.u_int32_t = uint -rbx.platform.typedef.u_int64_t = ulong_long -rbx.platform.typedef.quad_t = long_long -rbx.platform.typedef.u_quad_t = ulong_long -rbx.platform.typedef.qaddr_t = pointer -rbx.platform.typedef.vaddr_t = ulong -rbx.platform.typedef.paddr_t = ulong -rbx.platform.typedef.vsize_t = ulong -rbx.platform.typedef.psize_t = ulong -rbx.platform.typedef.caddr_t = string -rbx.platform.typedef.daddr_t = int -rbx.platform.typedef.daddr32_t = int -rbx.platform.typedef.daddr64_t = long_long -rbx.platform.typedef.dev_t = int -rbx.platform.typedef.fixpt_t = uint -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.id_t = uint -rbx.platform.typedef.ino_t = uint -rbx.platform.typedef.key_t = long -rbx.platform.typedef.mode_t = uint -rbx.platform.typedef.nlink_t = uint -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.rlim_t = ulong_long -rbx.platform.typedef.segsz_t = int -rbx.platform.typedef.swblk_t = int -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.useconds_t = uint -rbx.platform.typedef.suseconds_t = int -rbx.platform.typedef.in_addr_t = uint -rbx.platform.typedef.in_port_t = ushort -rbx.platform.typedef.sa_family_t = uchar -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.clock_t = int -rbx.platform.typedef.clockid_t = int -rbx.platform.typedef.size_t = ulong -rbx.platform.typedef.ssize_t = long -rbx.platform.typedef.time_t = int -rbx.platform.typedef.timer_t = int -rbx.platform.typedef.off_t = long_long -rbx.platform.typedef.__fd_mask = int diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-openbsd/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-openbsd/types.conf deleted file mode 100644 index c4df68a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-openbsd/types.conf +++ /dev/null @@ -1,128 +0,0 @@ -rbx.platform.typedef.__int8_t = char -rbx.platform.typedef.__uint8_t = uchar -rbx.platform.typedef.__int16_t = short -rbx.platform.typedef.__uint16_t = ushort -rbx.platform.typedef.__int32_t = int -rbx.platform.typedef.__uint32_t = uint -rbx.platform.typedef.__int64_t = long_long -rbx.platform.typedef.__uint64_t = ulong_long -rbx.platform.typedef.__int_least8_t = char -rbx.platform.typedef.__uint_least8_t = uchar -rbx.platform.typedef.__int_least16_t = short -rbx.platform.typedef.__uint_least16_t = ushort -rbx.platform.typedef.__int_least32_t = int -rbx.platform.typedef.__uint_least32_t = uint -rbx.platform.typedef.__int_least64_t = long_long -rbx.platform.typedef.__uint_least64_t = ulong_long -rbx.platform.typedef.__int_fast8_t = int -rbx.platform.typedef.__uint_fast8_t = uint -rbx.platform.typedef.__int_fast16_t = int -rbx.platform.typedef.__uint_fast16_t = uint -rbx.platform.typedef.__int_fast32_t = int -rbx.platform.typedef.__uint_fast32_t = uint -rbx.platform.typedef.__int_fast64_t = long_long -rbx.platform.typedef.__uint_fast64_t = ulong_long -rbx.platform.typedef.__intptr_t = long -rbx.platform.typedef.__uintptr_t = ulong -rbx.platform.typedef.__intmax_t = long_long -rbx.platform.typedef.__uintmax_t = ulong_long -rbx.platform.typedef.__register_t = int -rbx.platform.typedef.__vaddr_t = ulong -rbx.platform.typedef.__paddr_t = ulong -rbx.platform.typedef.__vsize_t = ulong -rbx.platform.typedef.__psize_t = ulong -rbx.platform.typedef.__clock_t = int -rbx.platform.typedef.__clockid_t = int -rbx.platform.typedef.__off_t = long_long -rbx.platform.typedef.__ptrdiff_t = long -rbx.platform.typedef.__size_t = ulong -rbx.platform.typedef.__ssize_t = long -rbx.platform.typedef.__time_t = int -rbx.platform.typedef.__timer_t = int -rbx.platform.typedef.__wchar_t = int -rbx.platform.typedef.__wint_t = int -rbx.platform.typedef.__rune_t = int -rbx.platform.typedef.__wctrans_t = pointer -rbx.platform.typedef.__wctype_t = pointer -rbx.platform.typedef.__cpuid_t = ulong -rbx.platform.typedef.__dev_t = int -rbx.platform.typedef.__fixpt_t = uint -rbx.platform.typedef.__gid_t = uint -rbx.platform.typedef.__id_t = uint -rbx.platform.typedef.__in_addr_t = uint -rbx.platform.typedef.__in_port_t = ushort -rbx.platform.typedef.__ino_t = uint -rbx.platform.typedef.__key_t = long -rbx.platform.typedef.__mode_t = uint -rbx.platform.typedef.__nlink_t = uint -rbx.platform.typedef.__pid_t = int -rbx.platform.typedef.__rlim_t = ulong_long -rbx.platform.typedef.__sa_family_t = uchar -rbx.platform.typedef.__segsz_t = int -rbx.platform.typedef.__socklen_t = uint -rbx.platform.typedef.__swblk_t = int -rbx.platform.typedef.__uid_t = uint -rbx.platform.typedef.__useconds_t = uint -rbx.platform.typedef.__suseconds_t = int -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.unchar = uchar -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.ulong = ulong -rbx.platform.typedef.cpuid_t = ulong -rbx.platform.typedef.register_t = int -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.uint8_t = uchar -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.uint16_t = ushort -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.uint32_t = uint -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.uint64_t = ulong_long -rbx.platform.typedef.intptr_t = long -rbx.platform.typedef.uintptr_t = ulong -rbx.platform.typedef.u_int8_t = uchar -rbx.platform.typedef.u_int16_t = ushort -rbx.platform.typedef.u_int32_t = uint -rbx.platform.typedef.u_int64_t = ulong_long -rbx.platform.typedef.quad_t = long_long -rbx.platform.typedef.u_quad_t = ulong_long -rbx.platform.typedef.qaddr_t = pointer -rbx.platform.typedef.vaddr_t = ulong -rbx.platform.typedef.paddr_t = ulong -rbx.platform.typedef.vsize_t = ulong -rbx.platform.typedef.psize_t = ulong -rbx.platform.typedef.caddr_t = string -rbx.platform.typedef.daddr_t = int -rbx.platform.typedef.daddr32_t = int -rbx.platform.typedef.daddr64_t = long_long -rbx.platform.typedef.dev_t = int -rbx.platform.typedef.fixpt_t = uint -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.id_t = uint -rbx.platform.typedef.ino_t = uint -rbx.platform.typedef.key_t = long -rbx.platform.typedef.mode_t = uint -rbx.platform.typedef.nlink_t = uint -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.rlim_t = ulong_long -rbx.platform.typedef.segsz_t = int -rbx.platform.typedef.swblk_t = int -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.useconds_t = uint -rbx.platform.typedef.suseconds_t = int -rbx.platform.typedef.in_addr_t = uint -rbx.platform.typedef.in_port_t = ushort -rbx.platform.typedef.sa_family_t = uchar -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.clock_t = int -rbx.platform.typedef.clockid_t = int -rbx.platform.typedef.size_t = ulong -rbx.platform.typedef.ssize_t = long -rbx.platform.typedef.time_t = int -rbx.platform.typedef.timer_t = int -rbx.platform.typedef.off_t = long_long -rbx.platform.typedef.__fd_mask = int diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-solaris/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-solaris/types.conf deleted file mode 100644 index a585100..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-solaris/types.conf +++ /dev/null @@ -1,122 +0,0 @@ -rbx.platform.typedef.lock_t = uchar -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.uint8_t = uchar -rbx.platform.typedef.uint16_t = ushort -rbx.platform.typedef.uint32_t = uint -rbx.platform.typedef.uint64_t = ulong_long -rbx.platform.typedef.intmax_t = long_long -rbx.platform.typedef.uintmax_t = ulong_long -rbx.platform.typedef.intptr_t = int -rbx.platform.typedef.uintptr_t = uint -rbx.platform.typedef.int_fast8_t = char -rbx.platform.typedef.int_fast16_t = int -rbx.platform.typedef.int_fast32_t = int -rbx.platform.typedef.int_fast64_t = long_long -rbx.platform.typedef.uint_fast8_t = uchar -rbx.platform.typedef.uint_fast16_t = uint -rbx.platform.typedef.uint_fast32_t = uint -rbx.platform.typedef.uint_fast64_t = ulong_long -rbx.platform.typedef.int_least8_t = char -rbx.platform.typedef.int_least16_t = short -rbx.platform.typedef.int_least32_t = int -rbx.platform.typedef.int_least64_t = long_long -rbx.platform.typedef.uint_least8_t = uchar -rbx.platform.typedef.uint_least16_t = ushort -rbx.platform.typedef.uint_least32_t = uint -rbx.platform.typedef.uint_least64_t = ulong_long -rbx.platform.typedef.longlong_t = long_long -rbx.platform.typedef.u_longlong_t = ulong_long -rbx.platform.typedef.t_scalar_t = long -rbx.platform.typedef.t_uscalar_t = ulong -rbx.platform.typedef.uchar_t = uchar -rbx.platform.typedef.ushort_t = ushort -rbx.platform.typedef.uint_t = uint -rbx.platform.typedef.ulong_t = ulong -rbx.platform.typedef.*caddr_t = char -rbx.platform.typedef.daddr_t = long -rbx.platform.typedef.cnt_t = short -rbx.platform.typedef.ptrdiff_t = int -rbx.platform.typedef.pfn_t = ulong -rbx.platform.typedef.pgcnt_t = ulong -rbx.platform.typedef.spgcnt_t = long -rbx.platform.typedef.use_t = uchar -rbx.platform.typedef.sysid_t = short -rbx.platform.typedef.index_t = short -rbx.platform.typedef.off_t = long_long -rbx.platform.typedef.off64_t = long_long -rbx.platform.typedef.ino_t = ulong_long -rbx.platform.typedef.blkcnt_t = long_long -rbx.platform.typedef.fsblkcnt_t = ulong_long -rbx.platform.typedef.fsfilcnt_t = ulong_long -rbx.platform.typedef.ino64_t = ulong_long -rbx.platform.typedef.blkcnt64_t = long_long -rbx.platform.typedef.fsblkcnt64_t = ulong_long -rbx.platform.typedef.fsfilcnt64_t = ulong_long -rbx.platform.typedef.blksize_t = long -rbx.platform.typedef.pad64_t = long_long -rbx.platform.typedef.upad64_t = ulong_long -rbx.platform.typedef.offset_t = long_long -rbx.platform.typedef.u_offset_t = ulong_long -rbx.platform.typedef.len_t = ulong_long -rbx.platform.typedef.diskaddr_t = ulong_long -rbx.platform.typedef.k_fltset_t = uint -rbx.platform.typedef.id_t = long -rbx.platform.typedef.lgrp_id_t = long -rbx.platform.typedef.useconds_t = uint -rbx.platform.typedef.suseconds_t = long -rbx.platform.typedef.major_t = ulong -rbx.platform.typedef.minor_t = ulong -rbx.platform.typedef.pri_t = short -rbx.platform.typedef.cpu_flag_t = ushort -rbx.platform.typedef.o_mode_t = ushort -rbx.platform.typedef.o_dev_t = short -rbx.platform.typedef.o_uid_t = ushort -rbx.platform.typedef.o_gid_t = ushort -rbx.platform.typedef.o_nlink_t = short -rbx.platform.typedef.o_pid_t = short -rbx.platform.typedef.o_ino_t = ushort -rbx.platform.typedef.key_t = int -rbx.platform.typedef.mode_t = ulong -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.datalink_id_t = uint -rbx.platform.typedef.taskid_t = long -rbx.platform.typedef.projid_t = long -rbx.platform.typedef.poolid_t = long -rbx.platform.typedef.zoneid_t = long -rbx.platform.typedef.ctid_t = long -rbx.platform.typedef.pthread_t = uint -rbx.platform.typedef.pthread_key_t = uint -rbx.platform.typedef.dev_t = ulong -rbx.platform.typedef.nlink_t = ulong -rbx.platform.typedef.pid_t = long -rbx.platform.typedef.size_t = uint -rbx.platform.typedef.ssize_t = int -rbx.platform.typedef.time_t = long -rbx.platform.typedef.clock_t = long -rbx.platform.typedef.clockid_t = int -rbx.platform.typedef.timer_t = int -rbx.platform.typedef.unchar = uchar -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.ulong = ulong -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.hrtime_t = long_long -rbx.platform.typedef.fd_mask = long -rbx.platform.typedef.fds_mask = long -rbx.platform.typedef.sa_family_t = ushort -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.nfds_t = ulong -rbx.platform.typedef.disp_lock_t = uchar -rbx.platform.typedef.model_t = uint -rbx.platform.typedef.in_port_t = ushort -rbx.platform.typedef.in_addr_t = uint -rbx.platform.typedef.ipaddr_t = uint -rbx.platform.typedef.rlim_t = ulong_long -rbx.platform.typedef.rlim64_t = ulong_long diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-windows/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-windows/types.conf deleted file mode 100644 index 38168be..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/i386-windows/types.conf +++ /dev/null @@ -1,105 +0,0 @@ -rbx.platform.typedef.__int8_t = char -rbx.platform.typedef.__uint8_t = uchar -rbx.platform.typedef.__int16_t = short -rbx.platform.typedef.__uint16_t = ushort -rbx.platform.typedef.__int_least16_t = short -rbx.platform.typedef.__uint_least16_t = ushort -rbx.platform.typedef.__int32_t = int -rbx.platform.typedef.__uint32_t = uint -rbx.platform.typedef.__int_least32_t = int -rbx.platform.typedef.__uint_least32_t = uint -rbx.platform.typedef.__int64_t = long_long -rbx.platform.typedef.__uint64_t = ulong_long -rbx.platform.typedef._off_t = long -rbx.platform.typedef._off64_t = long_long -rbx.platform.typedef._ssize_t = int -rbx.platform.typedef.wint_t = uint -rbx.platform.typedef.ptrdiff_t = int -rbx.platform.typedef.size_t = uint -rbx.platform.typedef.__off_t = long -rbx.platform.typedef.__pid_t = int -rbx.platform.typedef.__loff_t = long_long -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.clock_t = ulong -rbx.platform.typedef.time_t = long -rbx.platform.typedef.daddr_t = long -rbx.platform.typedef.caddr_t = string -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.ssize_t = int -rbx.platform.typedef.nlink_t = ushort -rbx.platform.typedef.fd_mask = long -rbx.platform.typedef.clockid_t = ulong -rbx.platform.typedef.timer_t = ulong -rbx.platform.typedef.useconds_t = ulong -rbx.platform.typedef.suseconds_t = long -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.int32_t = long -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.uint8_t = uchar -rbx.platform.typedef.uint16_t = ushort -rbx.platform.typedef.uint32_t = ulong -rbx.platform.typedef.uint64_t = ulong_long -rbx.platform.typedef.int_least8_t = char -rbx.platform.typedef.int_least16_t = short -rbx.platform.typedef.int_least32_t = long -rbx.platform.typedef.int_least64_t = long_long -rbx.platform.typedef.uint_least8_t = uchar -rbx.platform.typedef.uint_least16_t = ushort -rbx.platform.typedef.uint_least32_t = ulong -rbx.platform.typedef.uint_least64_t = ulong_long -rbx.platform.typedef.int_fast8_t = char -rbx.platform.typedef.int_fast16_t = long -rbx.platform.typedef.int_fast32_t = long -rbx.platform.typedef.int_fast64_t = long_long -rbx.platform.typedef.uint_fast8_t = uchar -rbx.platform.typedef.uint_fast16_t = ulong -rbx.platform.typedef.uint_fast32_t = ulong -rbx.platform.typedef.uint_fast64_t = ulong_long -rbx.platform.typedef.intptr_t = long -rbx.platform.typedef.uintptr_t = ulong -rbx.platform.typedef.intmax_t = long_long -rbx.platform.typedef.uintmax_t = ulong_long -rbx.platform.typedef.off_t = long_long -rbx.platform.typedef.loff_t = long_long -rbx.platform.typedef.__dev16_t = short -rbx.platform.typedef.__dev32_t = ulong -rbx.platform.typedef.dev_t = ulong -rbx.platform.typedef.blksize_t = long -rbx.platform.typedef.__blkcnt32_t = long -rbx.platform.typedef.__blkcnt64_t = long_long -rbx.platform.typedef.blkcnt_t = long_long -rbx.platform.typedef.fsblkcnt_t = ulong -rbx.platform.typedef.fsfilcnt_t = ulong -rbx.platform.typedef.__uid16_t = ushort -rbx.platform.typedef.__uid32_t = ulong -rbx.platform.typedef.uid_t = ulong -rbx.platform.typedef.__gid16_t = ushort -rbx.platform.typedef.__gid32_t = ulong -rbx.platform.typedef.gid_t = ulong -rbx.platform.typedef.__ino32_t = ulong -rbx.platform.typedef.__ino64_t = ulong_long -rbx.platform.typedef.ino_t = ulong_long -rbx.platform.typedef.id_t = ulong -rbx.platform.typedef.key_t = long_long -rbx.platform.typedef.vm_offset_t = ulong -rbx.platform.typedef.vm_size_t = ulong -rbx.platform.typedef.u_int8_t = uchar -rbx.platform.typedef.u_int16_t = ushort -rbx.platform.typedef.u_int32_t = uint -rbx.platform.typedef.u_int64_t = ulong_long -rbx.platform.typedef.register_t = int -rbx.platform.typedef.*addr_t = char -rbx.platform.typedef.socklen_t = int -rbx.platform.typedef.sa_family_t = ushort -rbx.platform.typedef.__ULong = ulong -rbx.platform.typedef._fpos_t = long -rbx.platform.typedef._fpos64_t = long_long -rbx.platform.typedef.sigset_t = ulong -rbx.platform.typedef.sig_atomic_t = int -rbx.platform.typedef.rlim_t = ulong diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/ia64-linux/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/ia64-linux/types.conf deleted file mode 100644 index 70e44e8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/ia64-linux/types.conf +++ /dev/null @@ -1,104 +0,0 @@ -rbx.platform.typedef.__u_char = uchar -rbx.platform.typedef.__u_short = ushort -rbx.platform.typedef.__u_int = uint -rbx.platform.typedef.__u_long = ulong -rbx.platform.typedef.__int8_t = char -rbx.platform.typedef.__uint8_t = uchar -rbx.platform.typedef.__int16_t = short -rbx.platform.typedef.__uint16_t = ushort -rbx.platform.typedef.__int32_t = int -rbx.platform.typedef.__uint32_t = uint -rbx.platform.typedef.__int64_t = long -rbx.platform.typedef.__uint64_t = ulong -rbx.platform.typedef.__quad_t = long -rbx.platform.typedef.__u_quad_t = ulong -rbx.platform.typedef.__dev_t = ulong -rbx.platform.typedef.__uid_t = uint -rbx.platform.typedef.__gid_t = uint -rbx.platform.typedef.__in_addr_t = uint -rbx.platform.typedef.__in_port_t = ushort -rbx.platform.typedef.__ino_t = ulong -rbx.platform.typedef.__ino64_t = ulong -rbx.platform.typedef.__mode_t = uint -rbx.platform.typedef.__nlink_t = ulong -rbx.platform.typedef.__off_t = long -rbx.platform.typedef.__off64_t = long -rbx.platform.typedef.__pid_t = int -rbx.platform.typedef.__clock_t = long -rbx.platform.typedef.__rlim_t = ulong -rbx.platform.typedef.__rlim64_t = ulong -rbx.platform.typedef.__id_t = uint -rbx.platform.typedef.__time_t = long -rbx.platform.typedef.__useconds_t = uint -rbx.platform.typedef.__suseconds_t = long -rbx.platform.typedef.__daddr_t = int -rbx.platform.typedef.__swblk_t = long -rbx.platform.typedef.__key_t = int -rbx.platform.typedef.__clockid_t = int -rbx.platform.typedef.__timer_t = pointer -rbx.platform.typedef.__blksize_t = long -rbx.platform.typedef.__blkcnt_t = long -rbx.platform.typedef.__blkcnt64_t = long -rbx.platform.typedef.__fsblkcnt_t = ulong -rbx.platform.typedef.__fsblkcnt64_t = ulong -rbx.platform.typedef.__fsfilcnt_t = ulong -rbx.platform.typedef.__fsfilcnt64_t = ulong -rbx.platform.typedef.__ssize_t = long -rbx.platform.typedef.__loff_t = long -rbx.platform.typedef.*__qaddr_t = long -rbx.platform.typedef.*__caddr_t = char -rbx.platform.typedef.__intptr_t = long -rbx.platform.typedef.__socklen_t = uint -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.quad_t = long -rbx.platform.typedef.u_quad_t = ulong -rbx.platform.typedef.loff_t = long -rbx.platform.typedef.ino_t = ulong -rbx.platform.typedef.dev_t = ulong -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.mode_t = uint -rbx.platform.typedef.nlink_t = ulong -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.off_t = long -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.id_t = uint -rbx.platform.typedef.ssize_t = long -rbx.platform.typedef.daddr_t = int -rbx.platform.typedef.key_t = int -rbx.platform.typedef.clock_t = long -rbx.platform.typedef.time_t = long -rbx.platform.typedef.clockid_t = int -rbx.platform.typedef.timer_t = pointer -rbx.platform.typedef.size_t = ulong -rbx.platform.typedef.ulong = ulong -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.u_int8_t = uchar -rbx.platform.typedef.u_int16_t = ushort -rbx.platform.typedef.u_int32_t = uint -rbx.platform.typedef.u_int64_t = ulong_long -rbx.platform.typedef.register_t = long -rbx.platform.typedef.__sig_atomic_t = int -rbx.platform.typedef.suseconds_t = long -rbx.platform.typedef.__fd_mask = long -rbx.platform.typedef.fd_mask = long -rbx.platform.typedef.blksize_t = long -rbx.platform.typedef.blkcnt_t = long -rbx.platform.typedef.fsblkcnt_t = ulong -rbx.platform.typedef.fsfilcnt_t = ulong -rbx.platform.typedef.pthread_t = ulong -rbx.platform.typedef.pthread_key_t = uint -rbx.platform.typedef.pthread_once_t = int -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.sa_family_t = ushort -rbx.platform.typedef.rlim_t = ulong -rbx.platform.typedef.__rlimit_resource_t = int -rbx.platform.typedef.__rusage_who_t = int -rbx.platform.typedef.__priority_which_t = int diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/mips-linux/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/mips-linux/types.conf deleted file mode 100644 index ad4ced0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/mips-linux/types.conf +++ /dev/null @@ -1,102 +0,0 @@ -rbx.platform.typedef.__u_char = uchar -rbx.platform.typedef.__u_short = ushort -rbx.platform.typedef.__u_int = uint -rbx.platform.typedef.__u_long = ulong -rbx.platform.typedef.__int8_t = char -rbx.platform.typedef.__uint8_t = uchar -rbx.platform.typedef.__int16_t = short -rbx.platform.typedef.__uint16_t = ushort -rbx.platform.typedef.__int32_t = int -rbx.platform.typedef.__uint32_t = uint -rbx.platform.typedef.__int64_t = long_long -rbx.platform.typedef.__uint64_t = ulong_long -rbx.platform.typedef.__quad_t = long_long -rbx.platform.typedef.__u_quad_t = ulong_long -rbx.platform.typedef.__dev_t = ulong_long -rbx.platform.typedef.__uid_t = uint -rbx.platform.typedef.__gid_t = uint -rbx.platform.typedef.__ino_t = ulong -rbx.platform.typedef.__ino64_t = ulong_long -rbx.platform.typedef.__mode_t = uint -rbx.platform.typedef.__nlink_t = uint -rbx.platform.typedef.__off_t = long -rbx.platform.typedef.__off64_t = long_long -rbx.platform.typedef.__pid_t = int -rbx.platform.typedef.__clock_t = long -rbx.platform.typedef.__rlim_t = ulong -rbx.platform.typedef.__rlim64_t = ulong_long -rbx.platform.typedef.__id_t = uint -rbx.platform.typedef.__time_t = long -rbx.platform.typedef.__useconds_t = uint -rbx.platform.typedef.__suseconds_t = long -rbx.platform.typedef.__daddr_t = int -rbx.platform.typedef.__swblk_t = long -rbx.platform.typedef.__key_t = int -rbx.platform.typedef.__clockid_t = int -rbx.platform.typedef.__timer_t = pointer -rbx.platform.typedef.__blksize_t = long -rbx.platform.typedef.__blkcnt_t = long -rbx.platform.typedef.__blkcnt64_t = long_long -rbx.platform.typedef.__fsblkcnt_t = ulong -rbx.platform.typedef.__fsblkcnt64_t = ulong_long -rbx.platform.typedef.__fsfilcnt_t = ulong -rbx.platform.typedef.__fsfilcnt64_t = ulong_long -rbx.platform.typedef.__ssize_t = int -rbx.platform.typedef.__loff_t = long_long -rbx.platform.typedef.*__qaddr_t = long_long -rbx.platform.typedef.*__caddr_t = char -rbx.platform.typedef.__intptr_t = int -rbx.platform.typedef.__socklen_t = uint -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.quad_t = long_long -rbx.platform.typedef.u_quad_t = ulong_long -rbx.platform.typedef.loff_t = long_long -rbx.platform.typedef.ino_t = ulong_long -rbx.platform.typedef.dev_t = ulong_long -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.mode_t = uint -rbx.platform.typedef.nlink_t = uint -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.off_t = long_long -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.id_t = uint -rbx.platform.typedef.ssize_t = int -rbx.platform.typedef.daddr_t = int -rbx.platform.typedef.key_t = int -rbx.platform.typedef.clock_t = long -rbx.platform.typedef.time_t = long -rbx.platform.typedef.clockid_t = int -rbx.platform.typedef.timer_t = pointer -rbx.platform.typedef.size_t = uint -rbx.platform.typedef.ulong = ulong -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.u_int8_t = uchar -rbx.platform.typedef.u_int16_t = ushort -rbx.platform.typedef.u_int32_t = uint -rbx.platform.typedef.u_int64_t = ulong_long -rbx.platform.typedef.register_t = long -rbx.platform.typedef.__sig_atomic_t = int -rbx.platform.typedef.suseconds_t = long -rbx.platform.typedef.__fd_mask = long -rbx.platform.typedef.fd_mask = long -rbx.platform.typedef.blksize_t = long -rbx.platform.typedef.blkcnt_t = long_long -rbx.platform.typedef.fsblkcnt_t = ulong_long -rbx.platform.typedef.fsfilcnt_t = ulong_long -rbx.platform.typedef.pthread_t = ulong -rbx.platform.typedef.pthread_key_t = uint -rbx.platform.typedef.pthread_once_t = int -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.sa_family_t = ushort -rbx.platform.typedef.rlim_t = ulong_long -rbx.platform.typedef.__rlimit_resource_t = int -rbx.platform.typedef.__rusage_who_t = int -rbx.platform.typedef.__priority_which_t = int diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/mips64el-linux/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/mips64el-linux/types.conf deleted file mode 100644 index 3feb704..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/mips64el-linux/types.conf +++ /dev/null @@ -1,104 +0,0 @@ -rbx.platform.typedef.__u_char = uchar -rbx.platform.typedef.__u_short = ushort -rbx.platform.typedef.__u_int = uint -rbx.platform.typedef.__u_long = ulong -rbx.platform.typedef.__int8_t = char -rbx.platform.typedef.__uint8_t = uchar -rbx.platform.typedef.__int16_t = short -rbx.platform.typedef.__uint16_t = ushort -rbx.platform.typedef.__int32_t = int -rbx.platform.typedef.__uint32_t = uint -rbx.platform.typedef.__int64_t = long -rbx.platform.typedef.__uint64_t = ulong -rbx.platform.typedef.__quad_t = long -rbx.platform.typedef.__u_quad_t = ulong -rbx.platform.typedef.__dev_t = ulong -rbx.platform.typedef.__uid_t = uint -rbx.platform.typedef.__gid_t = uint -rbx.platform.typedef.__ino_t = ulong -rbx.platform.typedef.__ino64_t = ulong -rbx.platform.typedef.__mode_t = uint -rbx.platform.typedef.__nlink_t = ulong -rbx.platform.typedef.__off_t = long -rbx.platform.typedef.__off64_t = long -rbx.platform.typedef.__pid_t = int -rbx.platform.typedef.__clock_t = long -rbx.platform.typedef.__rlim_t = ulong -rbx.platform.typedef.__rlim64_t = ulong -rbx.platform.typedef.__id_t = uint -rbx.platform.typedef.__time_t = long -rbx.platform.typedef.__useconds_t = uint -rbx.platform.typedef.__suseconds_t = long -rbx.platform.typedef.__daddr_t = int -rbx.platform.typedef.__key_t = int -rbx.platform.typedef.__clockid_t = int -rbx.platform.typedef.__timer_t = pointer -rbx.platform.typedef.__blksize_t = long -rbx.platform.typedef.__blkcnt_t = long -rbx.platform.typedef.__blkcnt64_t = long -rbx.platform.typedef.__fsblkcnt_t = ulong -rbx.platform.typedef.__fsblkcnt64_t = ulong -rbx.platform.typedef.__fsfilcnt_t = ulong -rbx.platform.typedef.__fsfilcnt64_t = ulong -rbx.platform.typedef.__fsword_t = long -rbx.platform.typedef.__ssize_t = long -rbx.platform.typedef.__syscall_slong_t = long -rbx.platform.typedef.__syscall_ulong_t = ulong -rbx.platform.typedef.__loff_t = long -rbx.platform.typedef.*__qaddr_t = long -rbx.platform.typedef.*__caddr_t = char -rbx.platform.typedef.__intptr_t = long -rbx.platform.typedef.__socklen_t = uint -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.quad_t = long -rbx.platform.typedef.u_quad_t = ulong -rbx.platform.typedef.loff_t = long -rbx.platform.typedef.ino_t = ulong -rbx.platform.typedef.dev_t = ulong -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.mode_t = uint -rbx.platform.typedef.nlink_t = ulong -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.off_t = long -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.id_t = uint -rbx.platform.typedef.ssize_t = long -rbx.platform.typedef.daddr_t = int -rbx.platform.typedef.key_t = int -rbx.platform.typedef.clock_t = long -rbx.platform.typedef.time_t = long -rbx.platform.typedef.clockid_t = int -rbx.platform.typedef.timer_t = pointer -rbx.platform.typedef.size_t = ulong -rbx.platform.typedef.ulong = ulong -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.u_int8_t = uchar -rbx.platform.typedef.u_int16_t = ushort -rbx.platform.typedef.u_int32_t = uint -rbx.platform.typedef.u_int64_t = ulong_long -rbx.platform.typedef.register_t = long -rbx.platform.typedef.__sig_atomic_t = int -rbx.platform.typedef.suseconds_t = long -rbx.platform.typedef.__fd_mask = long -rbx.platform.typedef.fd_mask = long -rbx.platform.typedef.blksize_t = long -rbx.platform.typedef.blkcnt_t = long -rbx.platform.typedef.fsblkcnt_t = ulong -rbx.platform.typedef.fsfilcnt_t = ulong -rbx.platform.typedef.pthread_t = ulong -rbx.platform.typedef.pthread_key_t = uint -rbx.platform.typedef.pthread_once_t = int -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.sa_family_t = ushort -rbx.platform.typedef.rlim_t = ulong -rbx.platform.typedef.__rlimit_resource_t = int -rbx.platform.typedef.__rusage_who_t = int -rbx.platform.typedef.__priority_which_t = int diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/mipsel-linux/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/mipsel-linux/types.conf deleted file mode 100644 index ad4ced0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/mipsel-linux/types.conf +++ /dev/null @@ -1,102 +0,0 @@ -rbx.platform.typedef.__u_char = uchar -rbx.platform.typedef.__u_short = ushort -rbx.platform.typedef.__u_int = uint -rbx.platform.typedef.__u_long = ulong -rbx.platform.typedef.__int8_t = char -rbx.platform.typedef.__uint8_t = uchar -rbx.platform.typedef.__int16_t = short -rbx.platform.typedef.__uint16_t = ushort -rbx.platform.typedef.__int32_t = int -rbx.platform.typedef.__uint32_t = uint -rbx.platform.typedef.__int64_t = long_long -rbx.platform.typedef.__uint64_t = ulong_long -rbx.platform.typedef.__quad_t = long_long -rbx.platform.typedef.__u_quad_t = ulong_long -rbx.platform.typedef.__dev_t = ulong_long -rbx.platform.typedef.__uid_t = uint -rbx.platform.typedef.__gid_t = uint -rbx.platform.typedef.__ino_t = ulong -rbx.platform.typedef.__ino64_t = ulong_long -rbx.platform.typedef.__mode_t = uint -rbx.platform.typedef.__nlink_t = uint -rbx.platform.typedef.__off_t = long -rbx.platform.typedef.__off64_t = long_long -rbx.platform.typedef.__pid_t = int -rbx.platform.typedef.__clock_t = long -rbx.platform.typedef.__rlim_t = ulong -rbx.platform.typedef.__rlim64_t = ulong_long -rbx.platform.typedef.__id_t = uint -rbx.platform.typedef.__time_t = long -rbx.platform.typedef.__useconds_t = uint -rbx.platform.typedef.__suseconds_t = long -rbx.platform.typedef.__daddr_t = int -rbx.platform.typedef.__swblk_t = long -rbx.platform.typedef.__key_t = int -rbx.platform.typedef.__clockid_t = int -rbx.platform.typedef.__timer_t = pointer -rbx.platform.typedef.__blksize_t = long -rbx.platform.typedef.__blkcnt_t = long -rbx.platform.typedef.__blkcnt64_t = long_long -rbx.platform.typedef.__fsblkcnt_t = ulong -rbx.platform.typedef.__fsblkcnt64_t = ulong_long -rbx.platform.typedef.__fsfilcnt_t = ulong -rbx.platform.typedef.__fsfilcnt64_t = ulong_long -rbx.platform.typedef.__ssize_t = int -rbx.platform.typedef.__loff_t = long_long -rbx.platform.typedef.*__qaddr_t = long_long -rbx.platform.typedef.*__caddr_t = char -rbx.platform.typedef.__intptr_t = int -rbx.platform.typedef.__socklen_t = uint -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.quad_t = long_long -rbx.platform.typedef.u_quad_t = ulong_long -rbx.platform.typedef.loff_t = long_long -rbx.platform.typedef.ino_t = ulong_long -rbx.platform.typedef.dev_t = ulong_long -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.mode_t = uint -rbx.platform.typedef.nlink_t = uint -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.off_t = long_long -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.id_t = uint -rbx.platform.typedef.ssize_t = int -rbx.platform.typedef.daddr_t = int -rbx.platform.typedef.key_t = int -rbx.platform.typedef.clock_t = long -rbx.platform.typedef.time_t = long -rbx.platform.typedef.clockid_t = int -rbx.platform.typedef.timer_t = pointer -rbx.platform.typedef.size_t = uint -rbx.platform.typedef.ulong = ulong -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.u_int8_t = uchar -rbx.platform.typedef.u_int16_t = ushort -rbx.platform.typedef.u_int32_t = uint -rbx.platform.typedef.u_int64_t = ulong_long -rbx.platform.typedef.register_t = long -rbx.platform.typedef.__sig_atomic_t = int -rbx.platform.typedef.suseconds_t = long -rbx.platform.typedef.__fd_mask = long -rbx.platform.typedef.fd_mask = long -rbx.platform.typedef.blksize_t = long -rbx.platform.typedef.blkcnt_t = long_long -rbx.platform.typedef.fsblkcnt_t = ulong_long -rbx.platform.typedef.fsfilcnt_t = ulong_long -rbx.platform.typedef.pthread_t = ulong -rbx.platform.typedef.pthread_key_t = uint -rbx.platform.typedef.pthread_once_t = int -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.sa_family_t = ushort -rbx.platform.typedef.rlim_t = ulong_long -rbx.platform.typedef.__rlimit_resource_t = int -rbx.platform.typedef.__rusage_who_t = int -rbx.platform.typedef.__priority_which_t = int diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/powerpc-aix/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/powerpc-aix/types.conf deleted file mode 100644 index 30ee66b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/powerpc-aix/types.conf +++ /dev/null @@ -1,180 +0,0 @@ -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.uint8_t = uchar -rbx.platform.typedef.uint16_t = ushort -rbx.platform.typedef.uint32_t = uint -rbx.platform.typedef.uint64_t = ulong_long -rbx.platform.typedef.intmax_t = long_long -rbx.platform.typedef.uintmax_t = ulong_long -rbx.platform.typedef.intptr_t = long -rbx.platform.typedef.uintptr_t = ulong -rbx.platform.typedef.int_least8_t = char -rbx.platform.typedef.int_least16_t = short -rbx.platform.typedef.int_least32_t = int -rbx.platform.typedef.int_least64_t = long_long -rbx.platform.typedef.uint_least8_t = uchar -rbx.platform.typedef.uint_least16_t = ushort -rbx.platform.typedef.uint_least32_t = uint -rbx.platform.typedef.uint_least64_t = ulong_long -rbx.platform.typedef.int_fast8_t = char -rbx.platform.typedef.int_fast16_t = short -rbx.platform.typedef.int_fast32_t = int -rbx.platform.typedef.uint_fast8_t = uchar -rbx.platform.typedef.uint_fast16_t = ushort -rbx.platform.typedef.uint_fast32_t = uint -rbx.platform.typedef.int_fast64_t = long_long -rbx.platform.typedef.uint_fast64_t = ulong_long -rbx.platform.typedef.wchar_t = ushort -rbx.platform.typedef.intfast_t = int -rbx.platform.typedef.uintfast_t = uint -rbx.platform.typedef.__long32_t = long -rbx.platform.typedef.__ulong32_t = ulong -rbx.platform.typedef.__long64_t = int -rbx.platform.typedef.__ulong64_t = uint -rbx.platform.typedef.int32long64_t = int -rbx.platform.typedef.uint32long64_t = uint -rbx.platform.typedef.long32int64_t = long -rbx.platform.typedef.ulong32int64_t = ulong -rbx.platform.typedef.int8 = char -rbx.platform.typedef.int16 = short -rbx.platform.typedef.int32 = int -rbx.platform.typedef.int64 = long_long -rbx.platform.typedef.u_int8 = uchar -rbx.platform.typedef.u_int8_t = uchar -rbx.platform.typedef.u_int16 = ushort -rbx.platform.typedef.u_int16_t = ushort -rbx.platform.typedef.u_int32 = uint -rbx.platform.typedef.u_int32_t = uint -rbx.platform.typedef.u_int64 = ulong_long -rbx.platform.typedef.u_int64_t = ulong_long -rbx.platform.typedef.ptrdiff_t = long -rbx.platform.typedef.wctype_t = uint -rbx.platform.typedef.fpos_t = long -rbx.platform.typedef.fpos64_t = long_long -rbx.platform.typedef.time_t = int -rbx.platform.typedef.clock_t = int -rbx.platform.typedef.size_t = ulong -rbx.platform.typedef.uchar_t = uchar -rbx.platform.typedef.ushort_t = ushort -rbx.platform.typedef.uint_t = uint -rbx.platform.typedef.ulong_t = ulong -rbx.platform.typedef.ssize_t = long -rbx.platform.typedef.level_t = int -rbx.platform.typedef.daddr_t = int -rbx.platform.typedef.daddr32_t = int -rbx.platform.typedef.daddr64_t = long_long -rbx.platform.typedef.caddr_t = string -rbx.platform.typedef.ino_t = uint -rbx.platform.typedef.ino32_t = uint -rbx.platform.typedef.ino64_t = ulong_long -rbx.platform.typedef.cnt_t = short -rbx.platform.typedef.dev_t = uint -rbx.platform.typedef.dev32_t = uint -rbx.platform.typedef.dev64_t = ulong_long -rbx.platform.typedef.chan_t = int -rbx.platform.typedef.time32_t = int -rbx.platform.typedef.pid32_t = int -rbx.platform.typedef.tid32_t = int -rbx.platform.typedef.pid64_t = ulong_long -rbx.platform.typedef.tid64_t = ulong_long -rbx.platform.typedef.time64_t = long_long -rbx.platform.typedef.__ptr32 = pointer -rbx.platform.typedef.__cptr32 = string -rbx.platform.typedef.soff_t = int -rbx.platform.typedef.off_t = long -rbx.platform.typedef.off64_t = long_long -rbx.platform.typedef.paddr_t = long -rbx.platform.typedef.key_t = int -rbx.platform.typedef.timer_t = int -rbx.platform.typedef.timer32_t = int -rbx.platform.typedef.timer64_t = long_long -rbx.platform.typedef.nlink_t = short -rbx.platform.typedef.mode_t = uint -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.mid_t = pointer -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.tid_t = int -rbx.platform.typedef.slab_t[12] = char -rbx.platform.typedef.mtyp_t = long -rbx.platform.typedef.boolean_t = int -rbx.platform.typedef.crid_t = int -rbx.platform.typedef.blkcnt_t = int -rbx.platform.typedef.blksize_t = int -rbx.platform.typedef.blkcnt32_t = int -rbx.platform.typedef.blksize32_t = int -rbx.platform.typedef.blkcnt64_t = ulong_long -rbx.platform.typedef.blksize64_t = ulong_long -rbx.platform.typedef.fsblkcnt_t = ulong -rbx.platform.typedef.fsfilcnt_t = ulong -rbx.platform.typedef.wint_t = int -rbx.platform.typedef.id_t = uint -rbx.platform.typedef.useconds_t = uint -rbx.platform.typedef.suseconds_t = int -rbx.platform.typedef.clockid_t = long_long -rbx.platform.typedef.signal_t = int -rbx.platform.typedef.pthread_t = uint -rbx.platform.typedef.pthread_key_t = uint -rbx.platform.typedef.vmid_t = long -rbx.platform.typedef.vmhandle_t = ulong -rbx.platform.typedef.vmid32_t = int -rbx.platform.typedef.vmhandle32_t = uint -rbx.platform.typedef.kvmid_t = long -rbx.platform.typedef.kvmhandle_t = ulong -rbx.platform.typedef.vmid64_t = long_long -rbx.platform.typedef.rpn64_t = long_long -rbx.platform.typedef.cnt64_t = long_long -rbx.platform.typedef.psize_t = long_long -rbx.platform.typedef.vmidx_t = int -rbx.platform.typedef.vmfkey_t = uint -rbx.platform.typedef.vmprkey_t = uint -rbx.platform.typedef.vmkey_t = int -rbx.platform.typedef.vmhwkey_t = int -rbx.platform.typedef.vpn_t = int -rbx.platform.typedef.rpn_t = int -rbx.platform.typedef.ptex_t = ulong -rbx.platform.typedef.swhatx_t = ulong -rbx.platform.typedef.esid_t = uint -rbx.platform.typedef.aptx_t = ushort -rbx.platform.typedef.pdtx_t = int -rbx.platform.typedef.psx_t = short -rbx.platform.typedef.pshift_t = ushort -rbx.platform.typedef.sshift_t = ushort -rbx.platform.typedef.unidx_t = int -rbx.platform.typedef.snidx_t = int -rbx.platform.typedef.vmnodeidx_t = int -rbx.platform.typedef.kvpn_t = int -rbx.platform.typedef.krpn_t = int -rbx.platform.typedef.vmsize_t = int -rbx.platform.typedef.vmm_lock_t = int -rbx.platform.typedef.ureg_t = ulong -rbx.platform.typedef.vmlpghandle_t = ulong -rbx.platform.typedef.ext_t = int -rbx.platform.typedef.va_list = string -rbx.platform.typedef.__ptr64 = ulong_long -rbx.platform.typedef.__cptr64 = ulong_long -rbx.platform.typedef.UniChar = ushort -rbx.platform.typedef.UTF32Char = uint -rbx.platform.typedef.uchar = uchar -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.ulong = ulong -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.swblk_t = int -rbx.platform.typedef.offset_t = long_long -rbx.platform.typedef.ssize64_t = long_long -rbx.platform.typedef.longlong_t = long_long -rbx.platform.typedef.u_longlong_t = ulong_long -rbx.platform.typedef.class_id_t = uint -rbx.platform.typedef.liobn_t = uint -rbx.platform.typedef.unit_addr_t = ulong_long -rbx.platform.typedef.size64_t = ulong_long -rbx.platform.typedef.socklen_t = ulong -rbx.platform.typedef.sa_family_t = uchar -rbx.platform.typedef.rlim_t = ulong -rbx.platform.typedef.rlim64_t = ulong_long diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/powerpc-darwin/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/powerpc-darwin/types.conf deleted file mode 100644 index 6b9313e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/powerpc-darwin/types.conf +++ /dev/null @@ -1,100 +0,0 @@ -rbx.platform.typedef.__int8_t = char -rbx.platform.typedef.__uint8_t = uchar -rbx.platform.typedef.__int16_t = short -rbx.platform.typedef.__uint16_t = ushort -rbx.platform.typedef.__int32_t = int -rbx.platform.typedef.__uint32_t = uint -rbx.platform.typedef.__int64_t = long_long -rbx.platform.typedef.__uint64_t = ulong_long -rbx.platform.typedef.__darwin_intptr_t = long -rbx.platform.typedef.__darwin_natural_t = uint -rbx.platform.typedef.__darwin_ct_rune_t = int -rbx.platform.typedef.__darwin_ptrdiff_t = int -rbx.platform.typedef.__darwin_size_t = ulong -rbx.platform.typedef.__darwin_wchar_t = int -rbx.platform.typedef.__darwin_rune_t = int -rbx.platform.typedef.__darwin_wint_t = int -rbx.platform.typedef.__darwin_clock_t = ulong -rbx.platform.typedef.__darwin_socklen_t = uint -rbx.platform.typedef.__darwin_ssize_t = long -rbx.platform.typedef.__darwin_time_t = long -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.u_int8_t = uchar -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.u_int16_t = ushort -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.u_int32_t = uint -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.u_int64_t = ulong_long -rbx.platform.typedef.register_t = int -rbx.platform.typedef.intptr_t = long -rbx.platform.typedef.uintptr_t = ulong -rbx.platform.typedef.user_addr_t = ulong_long -rbx.platform.typedef.user_size_t = ulong_long -rbx.platform.typedef.user_ssize_t = long_long -rbx.platform.typedef.user_long_t = long_long -rbx.platform.typedef.user_ulong_t = ulong_long -rbx.platform.typedef.user_time_t = long_long -rbx.platform.typedef.syscall_arg_t = ulong_long -rbx.platform.typedef.__darwin_blkcnt_t = long_long -rbx.platform.typedef.__darwin_blksize_t = int -rbx.platform.typedef.__darwin_dev_t = int -rbx.platform.typedef.__darwin_fsblkcnt_t = uint -rbx.platform.typedef.__darwin_fsfilcnt_t = uint -rbx.platform.typedef.__darwin_gid_t = uint -rbx.platform.typedef.__darwin_id_t = uint -rbx.platform.typedef.__darwin_ino64_t = ulong_long -rbx.platform.typedef.__darwin_ino_t = ulong_long -rbx.platform.typedef.__darwin_mach_port_name_t = uint -rbx.platform.typedef.__darwin_mach_port_t = uint -rbx.platform.typedef.__darwin_mode_t = ushort -rbx.platform.typedef.__darwin_off_t = long_long -rbx.platform.typedef.__darwin_pid_t = int -rbx.platform.typedef.__darwin_pthread_key_t = ulong -rbx.platform.typedef.__darwin_sigset_t = uint -rbx.platform.typedef.__darwin_suseconds_t = int -rbx.platform.typedef.__darwin_uid_t = uint -rbx.platform.typedef.__darwin_useconds_t = uint -rbx.platform.typedef.__darwin_uuid_t[16] = uchar -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.u_quad_t = ulong_long -rbx.platform.typedef.quad_t = long_long -rbx.platform.typedef.qaddr_t = pointer -rbx.platform.typedef.caddr_t = string -rbx.platform.typedef.daddr_t = int -rbx.platform.typedef.dev_t = int -rbx.platform.typedef.fixpt_t = uint -rbx.platform.typedef.blkcnt_t = long_long -rbx.platform.typedef.blksize_t = int -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.in_addr_t = uint -rbx.platform.typedef.in_port_t = ushort -rbx.platform.typedef.ino_t = ulong_long -rbx.platform.typedef.ino64_t = ulong_long -rbx.platform.typedef.key_t = int -rbx.platform.typedef.mode_t = ushort -rbx.platform.typedef.nlink_t = ushort -rbx.platform.typedef.id_t = uint -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.off_t = long_long -rbx.platform.typedef.segsz_t = int -rbx.platform.typedef.swblk_t = int -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.clock_t = ulong -rbx.platform.typedef.size_t = ulong -rbx.platform.typedef.ssize_t = long -rbx.platform.typedef.time_t = long -rbx.platform.typedef.useconds_t = uint -rbx.platform.typedef.suseconds_t = int -rbx.platform.typedef.fd_mask = int -rbx.platform.typedef.pthread_key_t = ulong -rbx.platform.typedef.fsblkcnt_t = uint -rbx.platform.typedef.fsfilcnt_t = uint -rbx.platform.typedef.sa_family_t = uchar -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.rlim_t = ulong_long diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/powerpc-linux/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/powerpc-linux/types.conf deleted file mode 100644 index 76014cd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/powerpc-linux/types.conf +++ /dev/null @@ -1,100 +0,0 @@ -rbx.platform.typedef.__u_char = uchar -rbx.platform.typedef.__u_short = ushort -rbx.platform.typedef.__u_int = uint -rbx.platform.typedef.__u_long = ulong -rbx.platform.typedef.__int8_t = char -rbx.platform.typedef.__uint8_t = uchar -rbx.platform.typedef.__int16_t = short -rbx.platform.typedef.__uint16_t = ushort -rbx.platform.typedef.__int32_t = int -rbx.platform.typedef.__uint32_t = uint -rbx.platform.typedef.__int64_t = long_long -rbx.platform.typedef.__uint64_t = ulong_long -rbx.platform.typedef.__quad_t = long_long -rbx.platform.typedef.__u_quad_t = ulong_long -rbx.platform.typedef.__dev_t = ulong_long -rbx.platform.typedef.__uid_t = uint -rbx.platform.typedef.__gid_t = uint -rbx.platform.typedef.__ino_t = ulong -rbx.platform.typedef.__ino64_t = ulong_long -rbx.platform.typedef.__mode_t = uint -rbx.platform.typedef.__nlink_t = uint -rbx.platform.typedef.__off_t = long -rbx.platform.typedef.__off64_t = long_long -rbx.platform.typedef.__pid_t = int -rbx.platform.typedef.__clock_t = long -rbx.platform.typedef.__rlim_t = ulong -rbx.platform.typedef.__rlim64_t = ulong_long -rbx.platform.typedef.__id_t = uint -rbx.platform.typedef.__time_t = long -rbx.platform.typedef.__useconds_t = uint -rbx.platform.typedef.__suseconds_t = long -rbx.platform.typedef.__daddr_t = int -rbx.platform.typedef.__swblk_t = long -rbx.platform.typedef.__key_t = int -rbx.platform.typedef.__clockid_t = int -rbx.platform.typedef.__timer_t = pointer -rbx.platform.typedef.__blksize_t = long -rbx.platform.typedef.__blkcnt_t = long -rbx.platform.typedef.__blkcnt64_t = long_long -rbx.platform.typedef.__fsblkcnt_t = ulong -rbx.platform.typedef.__fsblkcnt64_t = ulong_long -rbx.platform.typedef.__fsfilcnt_t = ulong -rbx.platform.typedef.__fsfilcnt64_t = ulong_long -rbx.platform.typedef.__ssize_t = int -rbx.platform.typedef.__loff_t = long_long -rbx.platform.typedef.*__qaddr_t = long_long -rbx.platform.typedef.*__caddr_t = char -rbx.platform.typedef.__intptr_t = int -rbx.platform.typedef.__socklen_t = uint -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.quad_t = long_long -rbx.platform.typedef.u_quad_t = ulong_long -rbx.platform.typedef.loff_t = long_long -rbx.platform.typedef.ino_t = ulong_long -rbx.platform.typedef.dev_t = ulong_long -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.mode_t = uint -rbx.platform.typedef.nlink_t = uint -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.off_t = long_long -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.id_t = uint -rbx.platform.typedef.ssize_t = int -rbx.platform.typedef.daddr_t = int -rbx.platform.typedef.key_t = int -rbx.platform.typedef.time_t = long -rbx.platform.typedef.clockid_t = int -rbx.platform.typedef.timer_t = pointer -rbx.platform.typedef.size_t = uint -rbx.platform.typedef.ulong = ulong -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.u_int8_t = uchar -rbx.platform.typedef.u_int16_t = ushort -rbx.platform.typedef.u_int32_t = uint -rbx.platform.typedef.u_int64_t = ulong_long -rbx.platform.typedef.register_t = long -rbx.platform.typedef.__sig_atomic_t = int -rbx.platform.typedef.suseconds_t = long -rbx.platform.typedef.__fd_mask = long -rbx.platform.typedef.fd_mask = long -rbx.platform.typedef.blkcnt_t = long_long -rbx.platform.typedef.fsblkcnt_t = ulong_long -rbx.platform.typedef.fsfilcnt_t = ulong_long -rbx.platform.typedef.pthread_t = ulong -rbx.platform.typedef.pthread_key_t = uint -rbx.platform.typedef.pthread_once_t = int -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.sa_family_t = ushort -rbx.platform.typedef.rlim_t = ulong_long -rbx.platform.typedef.__rlimit_resource_t = int -rbx.platform.typedef.__rusage_who_t = int -rbx.platform.typedef.__priority_which_t = int diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/powerpc64-linux/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/powerpc64-linux/types.conf deleted file mode 100644 index 3feb704..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/powerpc64-linux/types.conf +++ /dev/null @@ -1,104 +0,0 @@ -rbx.platform.typedef.__u_char = uchar -rbx.platform.typedef.__u_short = ushort -rbx.platform.typedef.__u_int = uint -rbx.platform.typedef.__u_long = ulong -rbx.platform.typedef.__int8_t = char -rbx.platform.typedef.__uint8_t = uchar -rbx.platform.typedef.__int16_t = short -rbx.platform.typedef.__uint16_t = ushort -rbx.platform.typedef.__int32_t = int -rbx.platform.typedef.__uint32_t = uint -rbx.platform.typedef.__int64_t = long -rbx.platform.typedef.__uint64_t = ulong -rbx.platform.typedef.__quad_t = long -rbx.platform.typedef.__u_quad_t = ulong -rbx.platform.typedef.__dev_t = ulong -rbx.platform.typedef.__uid_t = uint -rbx.platform.typedef.__gid_t = uint -rbx.platform.typedef.__ino_t = ulong -rbx.platform.typedef.__ino64_t = ulong -rbx.platform.typedef.__mode_t = uint -rbx.platform.typedef.__nlink_t = ulong -rbx.platform.typedef.__off_t = long -rbx.platform.typedef.__off64_t = long -rbx.platform.typedef.__pid_t = int -rbx.platform.typedef.__clock_t = long -rbx.platform.typedef.__rlim_t = ulong -rbx.platform.typedef.__rlim64_t = ulong -rbx.platform.typedef.__id_t = uint -rbx.platform.typedef.__time_t = long -rbx.platform.typedef.__useconds_t = uint -rbx.platform.typedef.__suseconds_t = long -rbx.platform.typedef.__daddr_t = int -rbx.platform.typedef.__key_t = int -rbx.platform.typedef.__clockid_t = int -rbx.platform.typedef.__timer_t = pointer -rbx.platform.typedef.__blksize_t = long -rbx.platform.typedef.__blkcnt_t = long -rbx.platform.typedef.__blkcnt64_t = long -rbx.platform.typedef.__fsblkcnt_t = ulong -rbx.platform.typedef.__fsblkcnt64_t = ulong -rbx.platform.typedef.__fsfilcnt_t = ulong -rbx.platform.typedef.__fsfilcnt64_t = ulong -rbx.platform.typedef.__fsword_t = long -rbx.platform.typedef.__ssize_t = long -rbx.platform.typedef.__syscall_slong_t = long -rbx.platform.typedef.__syscall_ulong_t = ulong -rbx.platform.typedef.__loff_t = long -rbx.platform.typedef.*__qaddr_t = long -rbx.platform.typedef.*__caddr_t = char -rbx.platform.typedef.__intptr_t = long -rbx.platform.typedef.__socklen_t = uint -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.quad_t = long -rbx.platform.typedef.u_quad_t = ulong -rbx.platform.typedef.loff_t = long -rbx.platform.typedef.ino_t = ulong -rbx.platform.typedef.dev_t = ulong -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.mode_t = uint -rbx.platform.typedef.nlink_t = ulong -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.off_t = long -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.id_t = uint -rbx.platform.typedef.ssize_t = long -rbx.platform.typedef.daddr_t = int -rbx.platform.typedef.key_t = int -rbx.platform.typedef.clock_t = long -rbx.platform.typedef.time_t = long -rbx.platform.typedef.clockid_t = int -rbx.platform.typedef.timer_t = pointer -rbx.platform.typedef.size_t = ulong -rbx.platform.typedef.ulong = ulong -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.u_int8_t = uchar -rbx.platform.typedef.u_int16_t = ushort -rbx.platform.typedef.u_int32_t = uint -rbx.platform.typedef.u_int64_t = ulong_long -rbx.platform.typedef.register_t = long -rbx.platform.typedef.__sig_atomic_t = int -rbx.platform.typedef.suseconds_t = long -rbx.platform.typedef.__fd_mask = long -rbx.platform.typedef.fd_mask = long -rbx.platform.typedef.blksize_t = long -rbx.platform.typedef.blkcnt_t = long -rbx.platform.typedef.fsblkcnt_t = ulong -rbx.platform.typedef.fsfilcnt_t = ulong -rbx.platform.typedef.pthread_t = ulong -rbx.platform.typedef.pthread_key_t = uint -rbx.platform.typedef.pthread_once_t = int -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.sa_family_t = ushort -rbx.platform.typedef.rlim_t = ulong -rbx.platform.typedef.__rlimit_resource_t = int -rbx.platform.typedef.__rusage_who_t = int -rbx.platform.typedef.__priority_which_t = int diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/s390-linux/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/s390-linux/types.conf deleted file mode 100644 index 1cc79ee..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/s390-linux/types.conf +++ /dev/null @@ -1,102 +0,0 @@ -rbx.platform.typedef.__u_char = uchar -rbx.platform.typedef.__u_short = ushort -rbx.platform.typedef.__u_int = uint -rbx.platform.typedef.__u_long = ulong -rbx.platform.typedef.__int8_t = char -rbx.platform.typedef.__uint8_t = uchar -rbx.platform.typedef.__int16_t = short -rbx.platform.typedef.__uint16_t = ushort -rbx.platform.typedef.__int32_t = int -rbx.platform.typedef.__uint32_t = uint -rbx.platform.typedef.__int64_t = long_long -rbx.platform.typedef.__uint64_t = ulong_long -rbx.platform.typedef.__quad_t = long_long -rbx.platform.typedef.__u_quad_t = ulong_long -rbx.platform.typedef.__dev_t = ulong_long -rbx.platform.typedef.__uid_t = uint -rbx.platform.typedef.__gid_t = uint -rbx.platform.typedef.__ino_t = ulong -rbx.platform.typedef.__ino64_t = ulong_long -rbx.platform.typedef.__mode_t = uint -rbx.platform.typedef.__nlink_t = uint -rbx.platform.typedef.__off_t = long -rbx.platform.typedef.__off64_t = long_long -rbx.platform.typedef.__pid_t = int -rbx.platform.typedef.__clock_t = long -rbx.platform.typedef.__rlim_t = ulong -rbx.platform.typedef.__rlim64_t = ulong_long -rbx.platform.typedef.__id_t = uint -rbx.platform.typedef.__time_t = long -rbx.platform.typedef.__useconds_t = uint -rbx.platform.typedef.__suseconds_t = long -rbx.platform.typedef.__daddr_t = int -rbx.platform.typedef.__swblk_t = long -rbx.platform.typedef.__key_t = int -rbx.platform.typedef.__clockid_t = int -rbx.platform.typedef.__timer_t = pointer -rbx.platform.typedef.__blksize_t = long -rbx.platform.typedef.__blkcnt_t = long -rbx.platform.typedef.__blkcnt64_t = long_long -rbx.platform.typedef.__fsblkcnt_t = ulong -rbx.platform.typedef.__fsblkcnt64_t = ulong_long -rbx.platform.typedef.__fsfilcnt_t = ulong -rbx.platform.typedef.__fsfilcnt64_t = ulong_long -rbx.platform.typedef.__ssize_t = long -rbx.platform.typedef.__loff_t = long_long -rbx.platform.typedef.*__qaddr_t = long_long -rbx.platform.typedef.*__caddr_t = char -rbx.platform.typedef.__intptr_t = int -rbx.platform.typedef.__socklen_t = uint -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.quad_t = long_long -rbx.platform.typedef.u_quad_t = ulong_long -rbx.platform.typedef.loff_t = long_long -rbx.platform.typedef.ino_t = ulong_long -rbx.platform.typedef.dev_t = ulong_long -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.mode_t = uint -rbx.platform.typedef.nlink_t = uint -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.off_t = long_long -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.id_t = uint -rbx.platform.typedef.ssize_t = long -rbx.platform.typedef.daddr_t = int -rbx.platform.typedef.key_t = int -rbx.platform.typedef.clock_t = long -rbx.platform.typedef.time_t = long -rbx.platform.typedef.clockid_t = int -rbx.platform.typedef.timer_t = pointer -rbx.platform.typedef.size_t = ulong -rbx.platform.typedef.ulong = ulong -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.u_int8_t = uchar -rbx.platform.typedef.u_int16_t = ushort -rbx.platform.typedef.u_int32_t = uint -rbx.platform.typedef.u_int64_t = ulong_long -rbx.platform.typedef.register_t = long -rbx.platform.typedef.__sig_atomic_t = int -rbx.platform.typedef.suseconds_t = long -rbx.platform.typedef.__fd_mask = long -rbx.platform.typedef.fd_mask = long -rbx.platform.typedef.blksize_t = long -rbx.platform.typedef.blkcnt_t = long_long -rbx.platform.typedef.fsblkcnt_t = ulong_long -rbx.platform.typedef.fsfilcnt_t = ulong_long -rbx.platform.typedef.pthread_t = ulong -rbx.platform.typedef.pthread_key_t = uint -rbx.platform.typedef.pthread_once_t = int -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.sa_family_t = ushort -rbx.platform.typedef.rlim_t = ulong_long -rbx.platform.typedef.__rlimit_resource_t = int -rbx.platform.typedef.__rusage_who_t = int -rbx.platform.typedef.__priority_which_t = int diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/s390x-linux/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/s390x-linux/types.conf deleted file mode 100644 index f4c8cec..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/s390x-linux/types.conf +++ /dev/null @@ -1,102 +0,0 @@ -rbx.platform.typedef.__u_char = uchar -rbx.platform.typedef.__u_short = ushort -rbx.platform.typedef.__u_int = uint -rbx.platform.typedef.__u_long = ulong -rbx.platform.typedef.__int8_t = char -rbx.platform.typedef.__uint8_t = uchar -rbx.platform.typedef.__int16_t = short -rbx.platform.typedef.__uint16_t = ushort -rbx.platform.typedef.__int32_t = int -rbx.platform.typedef.__uint32_t = uint -rbx.platform.typedef.__int64_t = long -rbx.platform.typedef.__uint64_t = ulong -rbx.platform.typedef.__quad_t = long -rbx.platform.typedef.__u_quad_t = ulong -rbx.platform.typedef.__dev_t = ulong -rbx.platform.typedef.__uid_t = uint -rbx.platform.typedef.__gid_t = uint -rbx.platform.typedef.__ino_t = ulong -rbx.platform.typedef.__ino64_t = ulong -rbx.platform.typedef.__mode_t = uint -rbx.platform.typedef.__nlink_t = ulong -rbx.platform.typedef.__off_t = long -rbx.platform.typedef.__off64_t = long -rbx.platform.typedef.__pid_t = int -rbx.platform.typedef.__clock_t = long -rbx.platform.typedef.__rlim_t = ulong -rbx.platform.typedef.__rlim64_t = ulong -rbx.platform.typedef.__id_t = uint -rbx.platform.typedef.__time_t = long -rbx.platform.typedef.__useconds_t = uint -rbx.platform.typedef.__suseconds_t = long -rbx.platform.typedef.__daddr_t = int -rbx.platform.typedef.__swblk_t = long -rbx.platform.typedef.__key_t = int -rbx.platform.typedef.__clockid_t = int -rbx.platform.typedef.__timer_t = pointer -rbx.platform.typedef.__blksize_t = long -rbx.platform.typedef.__blkcnt_t = long -rbx.platform.typedef.__blkcnt64_t = long -rbx.platform.typedef.__fsblkcnt_t = ulong -rbx.platform.typedef.__fsblkcnt64_t = ulong -rbx.platform.typedef.__fsfilcnt_t = ulong -rbx.platform.typedef.__fsfilcnt64_t = ulong -rbx.platform.typedef.__ssize_t = long -rbx.platform.typedef.__loff_t = long -rbx.platform.typedef.*__qaddr_t = long -rbx.platform.typedef.*__caddr_t = char -rbx.platform.typedef.__intptr_t = long -rbx.platform.typedef.__socklen_t = uint -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.quad_t = long -rbx.platform.typedef.u_quad_t = ulong -rbx.platform.typedef.loff_t = long -rbx.platform.typedef.ino_t = ulong -rbx.platform.typedef.dev_t = ulong -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.mode_t = uint -rbx.platform.typedef.nlink_t = ulong -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.off_t = long -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.id_t = uint -rbx.platform.typedef.ssize_t = long -rbx.platform.typedef.daddr_t = int -rbx.platform.typedef.key_t = int -rbx.platform.typedef.clock_t = long -rbx.platform.typedef.time_t = long -rbx.platform.typedef.clockid_t = int -rbx.platform.typedef.timer_t = pointer -rbx.platform.typedef.size_t = ulong -rbx.platform.typedef.ulong = ulong -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.u_int8_t = uchar -rbx.platform.typedef.u_int16_t = ushort -rbx.platform.typedef.u_int32_t = uint -rbx.platform.typedef.u_int64_t = ulong_long -rbx.platform.typedef.register_t = long -rbx.platform.typedef.__sig_atomic_t = int -rbx.platform.typedef.suseconds_t = long -rbx.platform.typedef.__fd_mask = long -rbx.platform.typedef.fd_mask = long -rbx.platform.typedef.blksize_t = long -rbx.platform.typedef.blkcnt_t = long -rbx.platform.typedef.fsblkcnt_t = ulong -rbx.platform.typedef.fsfilcnt_t = ulong -rbx.platform.typedef.pthread_t = ulong -rbx.platform.typedef.pthread_key_t = uint -rbx.platform.typedef.pthread_once_t = int -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.sa_family_t = ushort -rbx.platform.typedef.rlim_t = ulong -rbx.platform.typedef.__rlimit_resource_t = int -rbx.platform.typedef.__rusage_who_t = int -rbx.platform.typedef.__priority_which_t = int diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/sparc-linux/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/sparc-linux/types.conf deleted file mode 100644 index 1882298..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/sparc-linux/types.conf +++ /dev/null @@ -1,102 +0,0 @@ -rbx.platform.typedef.__u_char = uchar -rbx.platform.typedef.__u_short = ushort -rbx.platform.typedef.__u_int = uint -rbx.platform.typedef.__u_long = ulong -rbx.platform.typedef.__int8_t = char -rbx.platform.typedef.__uint8_t = uchar -rbx.platform.typedef.__int16_t = short -rbx.platform.typedef.__uint16_t = ushort -rbx.platform.typedef.__int32_t = int -rbx.platform.typedef.__uint32_t = uint -rbx.platform.typedef.__int64_t = long_long -rbx.platform.typedef.__uint64_t = ulong_long -rbx.platform.typedef.__quad_t = long_long -rbx.platform.typedef.__u_quad_t = ulong_long -rbx.platform.typedef.__dev_t = ulong_long -rbx.platform.typedef.__uid_t = uint -rbx.platform.typedef.__gid_t = uint -rbx.platform.typedef.__ino_t = ulong -rbx.platform.typedef.__ino64_t = ulong_long -rbx.platform.typedef.__mode_t = uint -rbx.platform.typedef.__nlink_t = uint -rbx.platform.typedef.__off_t = long -rbx.platform.typedef.__off64_t = long_long -rbx.platform.typedef.__pid_t = int -rbx.platform.typedef.__clock_t = long -rbx.platform.typedef.__rlim_t = ulong -rbx.platform.typedef.__rlim64_t = ulong_long -rbx.platform.typedef.__id_t = uint -rbx.platform.typedef.__time_t = long -rbx.platform.typedef.__useconds_t = uint -rbx.platform.typedef.__suseconds_t = int -rbx.platform.typedef.__daddr_t = int -rbx.platform.typedef.__swblk_t = long -rbx.platform.typedef.__key_t = int -rbx.platform.typedef.__clockid_t = int -rbx.platform.typedef.__timer_t = pointer -rbx.platform.typedef.__blksize_t = long -rbx.platform.typedef.__blkcnt_t = long -rbx.platform.typedef.__blkcnt64_t = long_long -rbx.platform.typedef.__fsblkcnt_t = ulong -rbx.platform.typedef.__fsblkcnt64_t = ulong_long -rbx.platform.typedef.__fsfilcnt_t = ulong -rbx.platform.typedef.__fsfilcnt64_t = ulong_long -rbx.platform.typedef.__ssize_t = int -rbx.platform.typedef.__loff_t = long_long -rbx.platform.typedef.*__qaddr_t = long_long -rbx.platform.typedef.*__caddr_t = char -rbx.platform.typedef.__intptr_t = int -rbx.platform.typedef.__socklen_t = uint -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.quad_t = long_long -rbx.platform.typedef.u_quad_t = ulong_long -rbx.platform.typedef.loff_t = long_long -rbx.platform.typedef.ino_t = ulong_long -rbx.platform.typedef.dev_t = ulong_long -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.mode_t = uint -rbx.platform.typedef.nlink_t = uint -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.off_t = long_long -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.id_t = uint -rbx.platform.typedef.ssize_t = int -rbx.platform.typedef.daddr_t = int -rbx.platform.typedef.key_t = int -rbx.platform.typedef.clock_t = long -rbx.platform.typedef.time_t = long -rbx.platform.typedef.clockid_t = int -rbx.platform.typedef.timer_t = pointer -rbx.platform.typedef.size_t = uint -rbx.platform.typedef.ulong = ulong -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.u_int8_t = uchar -rbx.platform.typedef.u_int16_t = ushort -rbx.platform.typedef.u_int32_t = uint -rbx.platform.typedef.u_int64_t = ulong_long -rbx.platform.typedef.register_t = long -rbx.platform.typedef.__sig_atomic_t = int -rbx.platform.typedef.suseconds_t = int -rbx.platform.typedef.__fd_mask = long -rbx.platform.typedef.fd_mask = long -rbx.platform.typedef.blksize_t = long -rbx.platform.typedef.blkcnt_t = long_long -rbx.platform.typedef.fsblkcnt_t = ulong_long -rbx.platform.typedef.fsfilcnt_t = ulong_long -rbx.platform.typedef.pthread_t = ulong -rbx.platform.typedef.pthread_key_t = uint -rbx.platform.typedef.pthread_once_t = int -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.sa_family_t = ushort -rbx.platform.typedef.rlim_t = ulong_long -rbx.platform.typedef.__rlimit_resource_t = int -rbx.platform.typedef.__rusage_who_t = int -rbx.platform.typedef.__priority_which_t = int diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/sparc-solaris/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/sparc-solaris/types.conf deleted file mode 100644 index c03c144..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/sparc-solaris/types.conf +++ /dev/null @@ -1,128 +0,0 @@ -rbx.platform.typedef.lock_t = uchar -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.uint8_t = uchar -rbx.platform.typedef.uint16_t = ushort -rbx.platform.typedef.uint32_t = uint -rbx.platform.typedef.uint64_t = ulong_long -rbx.platform.typedef.intmax_t = long_long -rbx.platform.typedef.uintmax_t = ulong_long -rbx.platform.typedef.intptr_t = int -rbx.platform.typedef.uintptr_t = uint -rbx.platform.typedef.int_fast8_t = char -rbx.platform.typedef.int_fast16_t = int -rbx.platform.typedef.int_fast32_t = int -rbx.platform.typedef.int_fast64_t = long_long -rbx.platform.typedef.uint_fast8_t = uchar -rbx.platform.typedef.uint_fast16_t = uint -rbx.platform.typedef.uint_fast32_t = uint -rbx.platform.typedef.uint_fast64_t = ulong_long -rbx.platform.typedef.int_least8_t = char -rbx.platform.typedef.int_least16_t = short -rbx.platform.typedef.int_least32_t = int -rbx.platform.typedef.int_least64_t = long_long -rbx.platform.typedef.uint_least8_t = uchar -rbx.platform.typedef.uint_least16_t = ushort -rbx.platform.typedef.uint_least32_t = uint -rbx.platform.typedef.uint_least64_t = ulong_long -rbx.platform.typedef.longlong_t = long_long -rbx.platform.typedef.u_longlong_t = ulong_long -rbx.platform.typedef.t_scalar_t = long -rbx.platform.typedef.t_uscalar_t = ulong -rbx.platform.typedef.uchar_t = uchar -rbx.platform.typedef.ushort_t = ushort -rbx.platform.typedef.uint_t = uint -rbx.platform.typedef.ulong_t = ulong -rbx.platform.typedef.*caddr_t = char -rbx.platform.typedef.daddr_t = long -rbx.platform.typedef.cnt_t = short -rbx.platform.typedef.ptrdiff_t = int -rbx.platform.typedef.pfn_t = ulong -rbx.platform.typedef.pgcnt_t = ulong -rbx.platform.typedef.spgcnt_t = long -rbx.platform.typedef.use_t = uchar -rbx.platform.typedef.sysid_t = short -rbx.platform.typedef.index_t = short -rbx.platform.typedef.off_t = long_long -rbx.platform.typedef.off64_t = long_long -rbx.platform.typedef.ino_t = ulong_long -rbx.platform.typedef.blkcnt_t = long_long -rbx.platform.typedef.fsblkcnt_t = ulong_long -rbx.platform.typedef.fsfilcnt_t = ulong_long -rbx.platform.typedef.ino64_t = ulong_long -rbx.platform.typedef.blkcnt64_t = long_long -rbx.platform.typedef.fsblkcnt64_t = ulong_long -rbx.platform.typedef.fsfilcnt64_t = ulong_long -rbx.platform.typedef.blksize_t = long -rbx.platform.typedef.pad64_t = long_long -rbx.platform.typedef.upad64_t = ulong_long -rbx.platform.typedef.offset_t = long_long -rbx.platform.typedef.u_offset_t = ulong_long -rbx.platform.typedef.len_t = ulong_long -rbx.platform.typedef.diskaddr_t = ulong_long -rbx.platform.typedef.k_fltset_t = uint -rbx.platform.typedef.id_t = long -rbx.platform.typedef.useconds_t = uint -rbx.platform.typedef.suseconds_t = long -rbx.platform.typedef.major_t = ulong -rbx.platform.typedef.minor_t = ulong -rbx.platform.typedef.pri_t = short -rbx.platform.typedef.cpu_flag_t = ushort -rbx.platform.typedef.o_mode_t = ushort -rbx.platform.typedef.o_dev_t = short -rbx.platform.typedef.o_uid_t = ushort -rbx.platform.typedef.o_gid_t = ushort -rbx.platform.typedef.o_nlink_t = short -rbx.platform.typedef.o_pid_t = short -rbx.platform.typedef.o_ino_t = ushort -rbx.platform.typedef.key_t = int -rbx.platform.typedef.mode_t = ulong -rbx.platform.typedef.uid_t = long -rbx.platform.typedef.gid_t = long -rbx.platform.typedef.taskid_t = long -rbx.platform.typedef.projid_t = long -rbx.platform.typedef.poolid_t = long -rbx.platform.typedef.zoneid_t = long -rbx.platform.typedef.ctid_t = long -rbx.platform.typedef.pthread_t = uint -rbx.platform.typedef.pthread_key_t = uint -rbx.platform.typedef.dev_t = ulong -rbx.platform.typedef.nlink_t = ulong -rbx.platform.typedef.pid_t = long -rbx.platform.typedef.size_t = uint -rbx.platform.typedef.ssize_t = int -rbx.platform.typedef.time_t = long -rbx.platform.typedef.clock_t = long -rbx.platform.typedef.clockid_t = int -rbx.platform.typedef.timer_t = int -rbx.platform.typedef.unchar = uchar -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.ulong = ulong -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.hrtime_t = long_long -rbx.platform.typedef.fd_mask = long -rbx.platform.typedef.fds_mask = long -rbx.platform.typedef.sa_family_t = ushort -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.Psocklen_t = pointer -rbx.platform.typedef.disp_lock_t = uchar -rbx.platform.typedef.rlim_t = ulong_long -rbx.platform.typedef.rlim64_t = ulong_long -rbx.platform.typedef.kid_t = int -rbx.platform.typedef.int) = pointer -rbx.platform.typedef.size_t) = pointer -rbx.platform.typedef.int) = pointer -rbx.platform.typedef.avl_index_t = uint -rbx.platform.typedef.() = pointer -rbx.platform.typedef.nfds_t = ulong -rbx.platform.typedef.model_t = uint -rbx.platform.typedef.ts_t = long_long -rbx.platform.typedef.in_port_t = ushort -rbx.platform.typedef.in_addr_t = uint -rbx.platform.typedef.ipaddr_t = uint diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/sparcv9-solaris/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/sparcv9-solaris/types.conf deleted file mode 100644 index c03c144..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/sparcv9-solaris/types.conf +++ /dev/null @@ -1,128 +0,0 @@ -rbx.platform.typedef.lock_t = uchar -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.uint8_t = uchar -rbx.platform.typedef.uint16_t = ushort -rbx.platform.typedef.uint32_t = uint -rbx.platform.typedef.uint64_t = ulong_long -rbx.platform.typedef.intmax_t = long_long -rbx.platform.typedef.uintmax_t = ulong_long -rbx.platform.typedef.intptr_t = int -rbx.platform.typedef.uintptr_t = uint -rbx.platform.typedef.int_fast8_t = char -rbx.platform.typedef.int_fast16_t = int -rbx.platform.typedef.int_fast32_t = int -rbx.platform.typedef.int_fast64_t = long_long -rbx.platform.typedef.uint_fast8_t = uchar -rbx.platform.typedef.uint_fast16_t = uint -rbx.platform.typedef.uint_fast32_t = uint -rbx.platform.typedef.uint_fast64_t = ulong_long -rbx.platform.typedef.int_least8_t = char -rbx.platform.typedef.int_least16_t = short -rbx.platform.typedef.int_least32_t = int -rbx.platform.typedef.int_least64_t = long_long -rbx.platform.typedef.uint_least8_t = uchar -rbx.platform.typedef.uint_least16_t = ushort -rbx.platform.typedef.uint_least32_t = uint -rbx.platform.typedef.uint_least64_t = ulong_long -rbx.platform.typedef.longlong_t = long_long -rbx.platform.typedef.u_longlong_t = ulong_long -rbx.platform.typedef.t_scalar_t = long -rbx.platform.typedef.t_uscalar_t = ulong -rbx.platform.typedef.uchar_t = uchar -rbx.platform.typedef.ushort_t = ushort -rbx.platform.typedef.uint_t = uint -rbx.platform.typedef.ulong_t = ulong -rbx.platform.typedef.*caddr_t = char -rbx.platform.typedef.daddr_t = long -rbx.platform.typedef.cnt_t = short -rbx.platform.typedef.ptrdiff_t = int -rbx.platform.typedef.pfn_t = ulong -rbx.platform.typedef.pgcnt_t = ulong -rbx.platform.typedef.spgcnt_t = long -rbx.platform.typedef.use_t = uchar -rbx.platform.typedef.sysid_t = short -rbx.platform.typedef.index_t = short -rbx.platform.typedef.off_t = long_long -rbx.platform.typedef.off64_t = long_long -rbx.platform.typedef.ino_t = ulong_long -rbx.platform.typedef.blkcnt_t = long_long -rbx.platform.typedef.fsblkcnt_t = ulong_long -rbx.platform.typedef.fsfilcnt_t = ulong_long -rbx.platform.typedef.ino64_t = ulong_long -rbx.platform.typedef.blkcnt64_t = long_long -rbx.platform.typedef.fsblkcnt64_t = ulong_long -rbx.platform.typedef.fsfilcnt64_t = ulong_long -rbx.platform.typedef.blksize_t = long -rbx.platform.typedef.pad64_t = long_long -rbx.platform.typedef.upad64_t = ulong_long -rbx.platform.typedef.offset_t = long_long -rbx.platform.typedef.u_offset_t = ulong_long -rbx.platform.typedef.len_t = ulong_long -rbx.platform.typedef.diskaddr_t = ulong_long -rbx.platform.typedef.k_fltset_t = uint -rbx.platform.typedef.id_t = long -rbx.platform.typedef.useconds_t = uint -rbx.platform.typedef.suseconds_t = long -rbx.platform.typedef.major_t = ulong -rbx.platform.typedef.minor_t = ulong -rbx.platform.typedef.pri_t = short -rbx.platform.typedef.cpu_flag_t = ushort -rbx.platform.typedef.o_mode_t = ushort -rbx.platform.typedef.o_dev_t = short -rbx.platform.typedef.o_uid_t = ushort -rbx.platform.typedef.o_gid_t = ushort -rbx.platform.typedef.o_nlink_t = short -rbx.platform.typedef.o_pid_t = short -rbx.platform.typedef.o_ino_t = ushort -rbx.platform.typedef.key_t = int -rbx.platform.typedef.mode_t = ulong -rbx.platform.typedef.uid_t = long -rbx.platform.typedef.gid_t = long -rbx.platform.typedef.taskid_t = long -rbx.platform.typedef.projid_t = long -rbx.platform.typedef.poolid_t = long -rbx.platform.typedef.zoneid_t = long -rbx.platform.typedef.ctid_t = long -rbx.platform.typedef.pthread_t = uint -rbx.platform.typedef.pthread_key_t = uint -rbx.platform.typedef.dev_t = ulong -rbx.platform.typedef.nlink_t = ulong -rbx.platform.typedef.pid_t = long -rbx.platform.typedef.size_t = uint -rbx.platform.typedef.ssize_t = int -rbx.platform.typedef.time_t = long -rbx.platform.typedef.clock_t = long -rbx.platform.typedef.clockid_t = int -rbx.platform.typedef.timer_t = int -rbx.platform.typedef.unchar = uchar -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.ulong = ulong -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.hrtime_t = long_long -rbx.platform.typedef.fd_mask = long -rbx.platform.typedef.fds_mask = long -rbx.platform.typedef.sa_family_t = ushort -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.Psocklen_t = pointer -rbx.platform.typedef.disp_lock_t = uchar -rbx.platform.typedef.rlim_t = ulong_long -rbx.platform.typedef.rlim64_t = ulong_long -rbx.platform.typedef.kid_t = int -rbx.platform.typedef.int) = pointer -rbx.platform.typedef.size_t) = pointer -rbx.platform.typedef.int) = pointer -rbx.platform.typedef.avl_index_t = uint -rbx.platform.typedef.() = pointer -rbx.platform.typedef.nfds_t = ulong -rbx.platform.typedef.model_t = uint -rbx.platform.typedef.ts_t = long_long -rbx.platform.typedef.in_port_t = ushort -rbx.platform.typedef.in_addr_t = uint -rbx.platform.typedef.ipaddr_t = uint diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-cygwin/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-cygwin/types.conf deleted file mode 100755 index 5dadc7f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-cygwin/types.conf +++ /dev/null @@ -1,3 +0,0 @@ -rbx.platform.typedef.size_t = uint64 -rbx.platform.typedef.ptrdiff_t = int64 -rbx.platform.typedef.ssize_t = int64 diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-darwin/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-darwin/types.conf deleted file mode 100644 index 51637ee..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-darwin/types.conf +++ /dev/null @@ -1,126 +0,0 @@ -rbx.platform.typedef.__int8_t = char -rbx.platform.typedef.__uint8_t = uchar -rbx.platform.typedef.__int16_t = short -rbx.platform.typedef.__uint16_t = ushort -rbx.platform.typedef.__int32_t = int -rbx.platform.typedef.__uint32_t = uint -rbx.platform.typedef.__int64_t = long_long -rbx.platform.typedef.__uint64_t = ulong_long -rbx.platform.typedef.__darwin_intptr_t = long -rbx.platform.typedef.__darwin_natural_t = uint -rbx.platform.typedef.__darwin_ct_rune_t = int -rbx.platform.typedef.__darwin_ptrdiff_t = long -rbx.platform.typedef.__darwin_size_t = ulong -rbx.platform.typedef.__darwin_wchar_t = int -rbx.platform.typedef.__darwin_rune_t = int -rbx.platform.typedef.__darwin_wint_t = int -rbx.platform.typedef.__darwin_clock_t = ulong -rbx.platform.typedef.__darwin_socklen_t = uint -rbx.platform.typedef.__darwin_ssize_t = long -rbx.platform.typedef.__darwin_time_t = long -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.u_int8_t = uchar -rbx.platform.typedef.u_int16_t = ushort -rbx.platform.typedef.u_int32_t = uint -rbx.platform.typedef.u_int64_t = ulong_long -rbx.platform.typedef.register_t = long_long -rbx.platform.typedef.intptr_t = long -rbx.platform.typedef.uintptr_t = ulong -rbx.platform.typedef.user_addr_t = ulong_long -rbx.platform.typedef.user_size_t = ulong_long -rbx.platform.typedef.user_ssize_t = long_long -rbx.platform.typedef.user_long_t = long_long -rbx.platform.typedef.user_ulong_t = ulong_long -rbx.platform.typedef.user_time_t = long_long -rbx.platform.typedef.user_off_t = long_long -rbx.platform.typedef.syscall_arg_t = ulong_long -rbx.platform.typedef.__darwin_blkcnt_t = long_long -rbx.platform.typedef.__darwin_blksize_t = int -rbx.platform.typedef.__darwin_dev_t = int -rbx.platform.typedef.__darwin_fsblkcnt_t = uint -rbx.platform.typedef.__darwin_fsfilcnt_t = uint -rbx.platform.typedef.__darwin_gid_t = uint -rbx.platform.typedef.__darwin_id_t = uint -rbx.platform.typedef.__darwin_ino64_t = ulong_long -rbx.platform.typedef.__darwin_ino_t = ulong_long -rbx.platform.typedef.__darwin_mach_port_name_t = uint -rbx.platform.typedef.__darwin_mach_port_t = uint -rbx.platform.typedef.__darwin_mode_t = ushort -rbx.platform.typedef.__darwin_off_t = long_long -rbx.platform.typedef.__darwin_pid_t = int -rbx.platform.typedef.__darwin_sigset_t = uint -rbx.platform.typedef.__darwin_suseconds_t = int -rbx.platform.typedef.__darwin_uid_t = uint -rbx.platform.typedef.__darwin_useconds_t = uint -rbx.platform.typedef.__darwin_uuid_t[16] = uchar -rbx.platform.typedef.__darwin_uuid_string_t[37] = char -rbx.platform.typedef.__darwin_pthread_key_t = ulong -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.u_quad_t = ulong_long -rbx.platform.typedef.quad_t = long_long -rbx.platform.typedef.qaddr_t = pointer -rbx.platform.typedef.caddr_t = string -rbx.platform.typedef.daddr_t = int -rbx.platform.typedef.dev_t = int -rbx.platform.typedef.fixpt_t = uint -rbx.platform.typedef.blkcnt_t = long_long -rbx.platform.typedef.blksize_t = int -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.in_addr_t = uint -rbx.platform.typedef.in_port_t = ushort -rbx.platform.typedef.ino_t = ulong_long -rbx.platform.typedef.ino64_t = ulong_long -rbx.platform.typedef.key_t = int -rbx.platform.typedef.mode_t = ushort -rbx.platform.typedef.nlink_t = ushort -rbx.platform.typedef.id_t = uint -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.off_t = long_long -rbx.platform.typedef.segsz_t = int -rbx.platform.typedef.swblk_t = int -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.clock_t = ulong -rbx.platform.typedef.size_t = ulong -rbx.platform.typedef.ssize_t = long -rbx.platform.typedef.time_t = long -rbx.platform.typedef.useconds_t = uint -rbx.platform.typedef.suseconds_t = int -rbx.platform.typedef.rsize_t = ulong -rbx.platform.typedef.errno_t = int -rbx.platform.typedef.fd_mask = int -rbx.platform.typedef.pthread_key_t = ulong -rbx.platform.typedef.fsblkcnt_t = uint -rbx.platform.typedef.fsfilcnt_t = uint -rbx.platform.typedef.sa_family_t = uchar -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.uint8_t = uchar -rbx.platform.typedef.uint16_t = ushort -rbx.platform.typedef.uint32_t = uint -rbx.platform.typedef.uint64_t = ulong_long -rbx.platform.typedef.int_least8_t = char -rbx.platform.typedef.int_least16_t = short -rbx.platform.typedef.int_least32_t = int -rbx.platform.typedef.int_least64_t = long_long -rbx.platform.typedef.uint_least8_t = uchar -rbx.platform.typedef.uint_least16_t = ushort -rbx.platform.typedef.uint_least32_t = uint -rbx.platform.typedef.uint_least64_t = ulong_long -rbx.platform.typedef.int_fast8_t = char -rbx.platform.typedef.int_fast16_t = short -rbx.platform.typedef.int_fast32_t = int -rbx.platform.typedef.int_fast64_t = long_long -rbx.platform.typedef.uint_fast8_t = uchar -rbx.platform.typedef.uint_fast16_t = ushort -rbx.platform.typedef.uint_fast32_t = uint -rbx.platform.typedef.uint_fast64_t = ulong_long -rbx.platform.typedef.intmax_t = long -rbx.platform.typedef.uintmax_t = ulong -rbx.platform.typedef.rlim_t = ulong_long diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-freebsd/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-freebsd/types.conf deleted file mode 100644 index c4df68a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-freebsd/types.conf +++ /dev/null @@ -1,128 +0,0 @@ -rbx.platform.typedef.__int8_t = char -rbx.platform.typedef.__uint8_t = uchar -rbx.platform.typedef.__int16_t = short -rbx.platform.typedef.__uint16_t = ushort -rbx.platform.typedef.__int32_t = int -rbx.platform.typedef.__uint32_t = uint -rbx.platform.typedef.__int64_t = long_long -rbx.platform.typedef.__uint64_t = ulong_long -rbx.platform.typedef.__int_least8_t = char -rbx.platform.typedef.__uint_least8_t = uchar -rbx.platform.typedef.__int_least16_t = short -rbx.platform.typedef.__uint_least16_t = ushort -rbx.platform.typedef.__int_least32_t = int -rbx.platform.typedef.__uint_least32_t = uint -rbx.platform.typedef.__int_least64_t = long_long -rbx.platform.typedef.__uint_least64_t = ulong_long -rbx.platform.typedef.__int_fast8_t = int -rbx.platform.typedef.__uint_fast8_t = uint -rbx.platform.typedef.__int_fast16_t = int -rbx.platform.typedef.__uint_fast16_t = uint -rbx.platform.typedef.__int_fast32_t = int -rbx.platform.typedef.__uint_fast32_t = uint -rbx.platform.typedef.__int_fast64_t = long_long -rbx.platform.typedef.__uint_fast64_t = ulong_long -rbx.platform.typedef.__intptr_t = long -rbx.platform.typedef.__uintptr_t = ulong -rbx.platform.typedef.__intmax_t = long_long -rbx.platform.typedef.__uintmax_t = ulong_long -rbx.platform.typedef.__register_t = int -rbx.platform.typedef.__vaddr_t = ulong -rbx.platform.typedef.__paddr_t = ulong -rbx.platform.typedef.__vsize_t = ulong -rbx.platform.typedef.__psize_t = ulong -rbx.platform.typedef.__clock_t = int -rbx.platform.typedef.__clockid_t = int -rbx.platform.typedef.__off_t = long_long -rbx.platform.typedef.__ptrdiff_t = long -rbx.platform.typedef.__size_t = ulong -rbx.platform.typedef.__ssize_t = long -rbx.platform.typedef.__time_t = int -rbx.platform.typedef.__timer_t = int -rbx.platform.typedef.__wchar_t = int -rbx.platform.typedef.__wint_t = int -rbx.platform.typedef.__rune_t = int -rbx.platform.typedef.__wctrans_t = pointer -rbx.platform.typedef.__wctype_t = pointer -rbx.platform.typedef.__cpuid_t = ulong -rbx.platform.typedef.__dev_t = int -rbx.platform.typedef.__fixpt_t = uint -rbx.platform.typedef.__gid_t = uint -rbx.platform.typedef.__id_t = uint -rbx.platform.typedef.__in_addr_t = uint -rbx.platform.typedef.__in_port_t = ushort -rbx.platform.typedef.__ino_t = uint -rbx.platform.typedef.__key_t = long -rbx.platform.typedef.__mode_t = uint -rbx.platform.typedef.__nlink_t = uint -rbx.platform.typedef.__pid_t = int -rbx.platform.typedef.__rlim_t = ulong_long -rbx.platform.typedef.__sa_family_t = uchar -rbx.platform.typedef.__segsz_t = int -rbx.platform.typedef.__socklen_t = uint -rbx.platform.typedef.__swblk_t = int -rbx.platform.typedef.__uid_t = uint -rbx.platform.typedef.__useconds_t = uint -rbx.platform.typedef.__suseconds_t = int -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.unchar = uchar -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.ulong = ulong -rbx.platform.typedef.cpuid_t = ulong -rbx.platform.typedef.register_t = int -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.uint8_t = uchar -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.uint16_t = ushort -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.uint32_t = uint -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.uint64_t = ulong_long -rbx.platform.typedef.intptr_t = long -rbx.platform.typedef.uintptr_t = ulong -rbx.platform.typedef.u_int8_t = uchar -rbx.platform.typedef.u_int16_t = ushort -rbx.platform.typedef.u_int32_t = uint -rbx.platform.typedef.u_int64_t = ulong_long -rbx.platform.typedef.quad_t = long_long -rbx.platform.typedef.u_quad_t = ulong_long -rbx.platform.typedef.qaddr_t = pointer -rbx.platform.typedef.vaddr_t = ulong -rbx.platform.typedef.paddr_t = ulong -rbx.platform.typedef.vsize_t = ulong -rbx.platform.typedef.psize_t = ulong -rbx.platform.typedef.caddr_t = string -rbx.platform.typedef.daddr_t = int -rbx.platform.typedef.daddr32_t = int -rbx.platform.typedef.daddr64_t = long_long -rbx.platform.typedef.dev_t = int -rbx.platform.typedef.fixpt_t = uint -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.id_t = uint -rbx.platform.typedef.ino_t = uint -rbx.platform.typedef.key_t = long -rbx.platform.typedef.mode_t = uint -rbx.platform.typedef.nlink_t = uint -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.rlim_t = ulong_long -rbx.platform.typedef.segsz_t = int -rbx.platform.typedef.swblk_t = int -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.useconds_t = uint -rbx.platform.typedef.suseconds_t = int -rbx.platform.typedef.in_addr_t = uint -rbx.platform.typedef.in_port_t = ushort -rbx.platform.typedef.sa_family_t = uchar -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.clock_t = int -rbx.platform.typedef.clockid_t = int -rbx.platform.typedef.size_t = ulong -rbx.platform.typedef.ssize_t = long -rbx.platform.typedef.time_t = int -rbx.platform.typedef.timer_t = int -rbx.platform.typedef.off_t = long_long -rbx.platform.typedef.__fd_mask = int diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-linux/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-linux/types.conf deleted file mode 100644 index f319c0b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-linux/types.conf +++ /dev/null @@ -1,102 +0,0 @@ -rbx.platform.typedef.__u_char = uchar -rbx.platform.typedef.__u_short = ushort -rbx.platform.typedef.__u_int = uint -rbx.platform.typedef.__u_long = ulong -rbx.platform.typedef.__int8_t = char -rbx.platform.typedef.__uint8_t = uchar -rbx.platform.typedef.__int16_t = short -rbx.platform.typedef.__uint16_t = ushort -rbx.platform.typedef.__int32_t = int -rbx.platform.typedef.__uint32_t = uint -rbx.platform.typedef.__int64_t = long -rbx.platform.typedef.__uint64_t = ulong -rbx.platform.typedef.__quad_t = long -rbx.platform.typedef.__u_quad_t = ulong -rbx.platform.typedef.__dev_t = ulong -rbx.platform.typedef.__uid_t = uint -rbx.platform.typedef.__gid_t = uint -rbx.platform.typedef.__ino_t = ulong -rbx.platform.typedef.__ino64_t = ulong -rbx.platform.typedef.__mode_t = uint -rbx.platform.typedef.__nlink_t = ulong -rbx.platform.typedef.__off_t = long -rbx.platform.typedef.__off64_t = long -rbx.platform.typedef.__pid_t = int -rbx.platform.typedef.__clock_t = long -rbx.platform.typedef.__rlim_t = ulong -rbx.platform.typedef.__rlim64_t = ulong -rbx.platform.typedef.__id_t = uint -rbx.platform.typedef.__time_t = long -rbx.platform.typedef.__useconds_t = uint -rbx.platform.typedef.__suseconds_t = long -rbx.platform.typedef.__daddr_t = int -rbx.platform.typedef.__swblk_t = long -rbx.platform.typedef.__key_t = int -rbx.platform.typedef.__clockid_t = int -rbx.platform.typedef.__timer_t = pointer -rbx.platform.typedef.blksize_t = long -rbx.platform.typedef.__blkcnt_t = long -rbx.platform.typedef.__blkcnt64_t = long -rbx.platform.typedef.__fsblkcnt_t = ulong -rbx.platform.typedef.__fsblkcnt64_t = ulong -rbx.platform.typedef.__fsfilcnt_t = ulong -rbx.platform.typedef.__fsfilcnt64_t = ulong -rbx.platform.typedef.__ssize_t = long -rbx.platform.typedef.__loff_t = long -rbx.platform.typedef.*__qaddr_t = long -rbx.platform.typedef.*__caddr_t = char -rbx.platform.typedef.__intptr_t = long -rbx.platform.typedef.__socklen_t = uint -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.quad_t = long -rbx.platform.typedef.u_quad_t = ulong -rbx.platform.typedef.loff_t = long -rbx.platform.typedef.ino_t = ulong -rbx.platform.typedef.dev_t = ulong -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.in_addr_t = uint -rbx.platform.typedef.in_port_t = ushort -rbx.platform.typedef.mode_t = uint -rbx.platform.typedef.nlink_t = ulong -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.off_t = long -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.id_t = uint -rbx.platform.typedef.ssize_t = long -rbx.platform.typedef.daddr_t = int -rbx.platform.typedef.key_t = int -rbx.platform.typedef.time_t = long -rbx.platform.typedef.clockid_t = int -rbx.platform.typedef.timer_t = pointer -rbx.platform.typedef.size_t = ulong -rbx.platform.typedef.ulong = ulong -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.u_int8_t = uchar -rbx.platform.typedef.u_int16_t = ushort -rbx.platform.typedef.u_int32_t = uint -rbx.platform.typedef.u_int64_t = ulong_long -rbx.platform.typedef.register_t = long -rbx.platform.typedef.__sig_atomic_t = int -rbx.platform.typedef.suseconds_t = long -rbx.platform.typedef.__fd_mask = long -rbx.platform.typedef.fd_mask = long -rbx.platform.typedef.blkcnt_t = long -rbx.platform.typedef.fsblkcnt_t = ulong -rbx.platform.typedef.fsfilcnt_t = ulong -rbx.platform.typedef.pthread_t = ulong -rbx.platform.typedef.pthread_key_t = uint -rbx.platform.typedef.pthread_once_t = int -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.sa_family_t = ushort -rbx.platform.typedef.rlim_t = ulong -rbx.platform.typedef.__rlimit_resource_t = int -rbx.platform.typedef.__rusage_who_t = int -rbx.platform.typedef.__priority_which_t = int diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-netbsd/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-netbsd/types.conf deleted file mode 100644 index c4df68a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-netbsd/types.conf +++ /dev/null @@ -1,128 +0,0 @@ -rbx.platform.typedef.__int8_t = char -rbx.platform.typedef.__uint8_t = uchar -rbx.platform.typedef.__int16_t = short -rbx.platform.typedef.__uint16_t = ushort -rbx.platform.typedef.__int32_t = int -rbx.platform.typedef.__uint32_t = uint -rbx.platform.typedef.__int64_t = long_long -rbx.platform.typedef.__uint64_t = ulong_long -rbx.platform.typedef.__int_least8_t = char -rbx.platform.typedef.__uint_least8_t = uchar -rbx.platform.typedef.__int_least16_t = short -rbx.platform.typedef.__uint_least16_t = ushort -rbx.platform.typedef.__int_least32_t = int -rbx.platform.typedef.__uint_least32_t = uint -rbx.platform.typedef.__int_least64_t = long_long -rbx.platform.typedef.__uint_least64_t = ulong_long -rbx.platform.typedef.__int_fast8_t = int -rbx.platform.typedef.__uint_fast8_t = uint -rbx.platform.typedef.__int_fast16_t = int -rbx.platform.typedef.__uint_fast16_t = uint -rbx.platform.typedef.__int_fast32_t = int -rbx.platform.typedef.__uint_fast32_t = uint -rbx.platform.typedef.__int_fast64_t = long_long -rbx.platform.typedef.__uint_fast64_t = ulong_long -rbx.platform.typedef.__intptr_t = long -rbx.platform.typedef.__uintptr_t = ulong -rbx.platform.typedef.__intmax_t = long_long -rbx.platform.typedef.__uintmax_t = ulong_long -rbx.platform.typedef.__register_t = int -rbx.platform.typedef.__vaddr_t = ulong -rbx.platform.typedef.__paddr_t = ulong -rbx.platform.typedef.__vsize_t = ulong -rbx.platform.typedef.__psize_t = ulong -rbx.platform.typedef.__clock_t = int -rbx.platform.typedef.__clockid_t = int -rbx.platform.typedef.__off_t = long_long -rbx.platform.typedef.__ptrdiff_t = long -rbx.platform.typedef.__size_t = ulong -rbx.platform.typedef.__ssize_t = long -rbx.platform.typedef.__time_t = int -rbx.platform.typedef.__timer_t = int -rbx.platform.typedef.__wchar_t = int -rbx.platform.typedef.__wint_t = int -rbx.platform.typedef.__rune_t = int -rbx.platform.typedef.__wctrans_t = pointer -rbx.platform.typedef.__wctype_t = pointer -rbx.platform.typedef.__cpuid_t = ulong -rbx.platform.typedef.__dev_t = int -rbx.platform.typedef.__fixpt_t = uint -rbx.platform.typedef.__gid_t = uint -rbx.platform.typedef.__id_t = uint -rbx.platform.typedef.__in_addr_t = uint -rbx.platform.typedef.__in_port_t = ushort -rbx.platform.typedef.__ino_t = uint -rbx.platform.typedef.__key_t = long -rbx.platform.typedef.__mode_t = uint -rbx.platform.typedef.__nlink_t = uint -rbx.platform.typedef.__pid_t = int -rbx.platform.typedef.__rlim_t = ulong_long -rbx.platform.typedef.__sa_family_t = uchar -rbx.platform.typedef.__segsz_t = int -rbx.platform.typedef.__socklen_t = uint -rbx.platform.typedef.__swblk_t = int -rbx.platform.typedef.__uid_t = uint -rbx.platform.typedef.__useconds_t = uint -rbx.platform.typedef.__suseconds_t = int -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.unchar = uchar -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.ulong = ulong -rbx.platform.typedef.cpuid_t = ulong -rbx.platform.typedef.register_t = int -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.uint8_t = uchar -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.uint16_t = ushort -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.uint32_t = uint -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.uint64_t = ulong_long -rbx.platform.typedef.intptr_t = long -rbx.platform.typedef.uintptr_t = ulong -rbx.platform.typedef.u_int8_t = uchar -rbx.platform.typedef.u_int16_t = ushort -rbx.platform.typedef.u_int32_t = uint -rbx.platform.typedef.u_int64_t = ulong_long -rbx.platform.typedef.quad_t = long_long -rbx.platform.typedef.u_quad_t = ulong_long -rbx.platform.typedef.qaddr_t = pointer -rbx.platform.typedef.vaddr_t = ulong -rbx.platform.typedef.paddr_t = ulong -rbx.platform.typedef.vsize_t = ulong -rbx.platform.typedef.psize_t = ulong -rbx.platform.typedef.caddr_t = string -rbx.platform.typedef.daddr_t = int -rbx.platform.typedef.daddr32_t = int -rbx.platform.typedef.daddr64_t = long_long -rbx.platform.typedef.dev_t = int -rbx.platform.typedef.fixpt_t = uint -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.id_t = uint -rbx.platform.typedef.ino_t = uint -rbx.platform.typedef.key_t = long -rbx.platform.typedef.mode_t = uint -rbx.platform.typedef.nlink_t = uint -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.rlim_t = ulong_long -rbx.platform.typedef.segsz_t = int -rbx.platform.typedef.swblk_t = int -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.useconds_t = uint -rbx.platform.typedef.suseconds_t = int -rbx.platform.typedef.in_addr_t = uint -rbx.platform.typedef.in_port_t = ushort -rbx.platform.typedef.sa_family_t = uchar -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.clock_t = int -rbx.platform.typedef.clockid_t = int -rbx.platform.typedef.size_t = ulong -rbx.platform.typedef.ssize_t = long -rbx.platform.typedef.time_t = int -rbx.platform.typedef.timer_t = int -rbx.platform.typedef.off_t = long_long -rbx.platform.typedef.__fd_mask = int diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-openbsd/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-openbsd/types.conf deleted file mode 100644 index c4df68a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-openbsd/types.conf +++ /dev/null @@ -1,128 +0,0 @@ -rbx.platform.typedef.__int8_t = char -rbx.platform.typedef.__uint8_t = uchar -rbx.platform.typedef.__int16_t = short -rbx.platform.typedef.__uint16_t = ushort -rbx.platform.typedef.__int32_t = int -rbx.platform.typedef.__uint32_t = uint -rbx.platform.typedef.__int64_t = long_long -rbx.platform.typedef.__uint64_t = ulong_long -rbx.platform.typedef.__int_least8_t = char -rbx.platform.typedef.__uint_least8_t = uchar -rbx.platform.typedef.__int_least16_t = short -rbx.platform.typedef.__uint_least16_t = ushort -rbx.platform.typedef.__int_least32_t = int -rbx.platform.typedef.__uint_least32_t = uint -rbx.platform.typedef.__int_least64_t = long_long -rbx.platform.typedef.__uint_least64_t = ulong_long -rbx.platform.typedef.__int_fast8_t = int -rbx.platform.typedef.__uint_fast8_t = uint -rbx.platform.typedef.__int_fast16_t = int -rbx.platform.typedef.__uint_fast16_t = uint -rbx.platform.typedef.__int_fast32_t = int -rbx.platform.typedef.__uint_fast32_t = uint -rbx.platform.typedef.__int_fast64_t = long_long -rbx.platform.typedef.__uint_fast64_t = ulong_long -rbx.platform.typedef.__intptr_t = long -rbx.platform.typedef.__uintptr_t = ulong -rbx.platform.typedef.__intmax_t = long_long -rbx.platform.typedef.__uintmax_t = ulong_long -rbx.platform.typedef.__register_t = int -rbx.platform.typedef.__vaddr_t = ulong -rbx.platform.typedef.__paddr_t = ulong -rbx.platform.typedef.__vsize_t = ulong -rbx.platform.typedef.__psize_t = ulong -rbx.platform.typedef.__clock_t = int -rbx.platform.typedef.__clockid_t = int -rbx.platform.typedef.__off_t = long_long -rbx.platform.typedef.__ptrdiff_t = long -rbx.platform.typedef.__size_t = ulong -rbx.platform.typedef.__ssize_t = long -rbx.platform.typedef.__time_t = int -rbx.platform.typedef.__timer_t = int -rbx.platform.typedef.__wchar_t = int -rbx.platform.typedef.__wint_t = int -rbx.platform.typedef.__rune_t = int -rbx.platform.typedef.__wctrans_t = pointer -rbx.platform.typedef.__wctype_t = pointer -rbx.platform.typedef.__cpuid_t = ulong -rbx.platform.typedef.__dev_t = int -rbx.platform.typedef.__fixpt_t = uint -rbx.platform.typedef.__gid_t = uint -rbx.platform.typedef.__id_t = uint -rbx.platform.typedef.__in_addr_t = uint -rbx.platform.typedef.__in_port_t = ushort -rbx.platform.typedef.__ino_t = uint -rbx.platform.typedef.__key_t = long -rbx.platform.typedef.__mode_t = uint -rbx.platform.typedef.__nlink_t = uint -rbx.platform.typedef.__pid_t = int -rbx.platform.typedef.__rlim_t = ulong_long -rbx.platform.typedef.__sa_family_t = uchar -rbx.platform.typedef.__segsz_t = int -rbx.platform.typedef.__socklen_t = uint -rbx.platform.typedef.__swblk_t = int -rbx.platform.typedef.__uid_t = uint -rbx.platform.typedef.__useconds_t = uint -rbx.platform.typedef.__suseconds_t = int -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.unchar = uchar -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.ulong = ulong -rbx.platform.typedef.cpuid_t = ulong -rbx.platform.typedef.register_t = int -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.uint8_t = uchar -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.uint16_t = ushort -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.uint32_t = uint -rbx.platform.typedef.int64_t = long_long -rbx.platform.typedef.uint64_t = ulong_long -rbx.platform.typedef.intptr_t = long -rbx.platform.typedef.uintptr_t = ulong -rbx.platform.typedef.u_int8_t = uchar -rbx.platform.typedef.u_int16_t = ushort -rbx.platform.typedef.u_int32_t = uint -rbx.platform.typedef.u_int64_t = ulong_long -rbx.platform.typedef.quad_t = long_long -rbx.platform.typedef.u_quad_t = ulong_long -rbx.platform.typedef.qaddr_t = pointer -rbx.platform.typedef.vaddr_t = ulong -rbx.platform.typedef.paddr_t = ulong -rbx.platform.typedef.vsize_t = ulong -rbx.platform.typedef.psize_t = ulong -rbx.platform.typedef.caddr_t = string -rbx.platform.typedef.daddr_t = int -rbx.platform.typedef.daddr32_t = int -rbx.platform.typedef.daddr64_t = long_long -rbx.platform.typedef.dev_t = int -rbx.platform.typedef.fixpt_t = uint -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.id_t = uint -rbx.platform.typedef.ino_t = uint -rbx.platform.typedef.key_t = long -rbx.platform.typedef.mode_t = uint -rbx.platform.typedef.nlink_t = uint -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.rlim_t = ulong_long -rbx.platform.typedef.segsz_t = int -rbx.platform.typedef.swblk_t = int -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.useconds_t = uint -rbx.platform.typedef.suseconds_t = int -rbx.platform.typedef.in_addr_t = uint -rbx.platform.typedef.in_port_t = ushort -rbx.platform.typedef.sa_family_t = uchar -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.clock_t = int -rbx.platform.typedef.clockid_t = int -rbx.platform.typedef.size_t = ulong -rbx.platform.typedef.ssize_t = long -rbx.platform.typedef.time_t = int -rbx.platform.typedef.timer_t = int -rbx.platform.typedef.off_t = long_long -rbx.platform.typedef.__fd_mask = int diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-solaris/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-solaris/types.conf deleted file mode 100644 index f461b7e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-solaris/types.conf +++ /dev/null @@ -1,122 +0,0 @@ -rbx.platform.typedef.lock_t = uchar -rbx.platform.typedef.int8_t = char -rbx.platform.typedef.int16_t = short -rbx.platform.typedef.int32_t = int -rbx.platform.typedef.int64_t = long -rbx.platform.typedef.uint8_t = uchar -rbx.platform.typedef.uint16_t = ushort -rbx.platform.typedef.uint32_t = uint -rbx.platform.typedef.uint64_t = ulong -rbx.platform.typedef.intmax_t = long -rbx.platform.typedef.uintmax_t = ulong -rbx.platform.typedef.intptr_t = long -rbx.platform.typedef.uintptr_t = ulong -rbx.platform.typedef.int_fast8_t = char -rbx.platform.typedef.int_fast16_t = int -rbx.platform.typedef.int_fast32_t = int -rbx.platform.typedef.int_fast64_t = long -rbx.platform.typedef.uint_fast8_t = uchar -rbx.platform.typedef.uint_fast16_t = uint -rbx.platform.typedef.uint_fast32_t = uint -rbx.platform.typedef.uint_fast64_t = ulong -rbx.platform.typedef.int_least8_t = char -rbx.platform.typedef.int_least16_t = short -rbx.platform.typedef.int_least32_t = int -rbx.platform.typedef.int_least64_t = long -rbx.platform.typedef.uint_least8_t = uchar -rbx.platform.typedef.uint_least16_t = ushort -rbx.platform.typedef.uint_least32_t = uint -rbx.platform.typedef.uint_least64_t = ulong -rbx.platform.typedef.longlong_t = long_long -rbx.platform.typedef.u_longlong_t = ulong_long -rbx.platform.typedef.t_scalar_t = int -rbx.platform.typedef.t_uscalar_t = uint -rbx.platform.typedef.uchar_t = uchar -rbx.platform.typedef.ushort_t = ushort -rbx.platform.typedef.uint_t = uint -rbx.platform.typedef.ulong_t = ulong -rbx.platform.typedef.*caddr_t = char -rbx.platform.typedef.daddr_t = long -rbx.platform.typedef.cnt_t = short -rbx.platform.typedef.ptrdiff_t = long -rbx.platform.typedef.pfn_t = ulong -rbx.platform.typedef.pgcnt_t = ulong -rbx.platform.typedef.spgcnt_t = long -rbx.platform.typedef.use_t = uchar -rbx.platform.typedef.sysid_t = short -rbx.platform.typedef.index_t = short -rbx.platform.typedef.off_t = long -rbx.platform.typedef.off64_t = long -rbx.platform.typedef.ino_t = ulong -rbx.platform.typedef.blkcnt_t = long -rbx.platform.typedef.fsblkcnt_t = ulong -rbx.platform.typedef.fsfilcnt_t = ulong -rbx.platform.typedef.ino64_t = ulong -rbx.platform.typedef.blkcnt64_t = long -rbx.platform.typedef.fsblkcnt64_t = ulong -rbx.platform.typedef.fsfilcnt64_t = ulong -rbx.platform.typedef.blksize_t = int -rbx.platform.typedef.pad64_t = long -rbx.platform.typedef.upad64_t = ulong -rbx.platform.typedef.offset_t = long_long -rbx.platform.typedef.u_offset_t = ulong_long -rbx.platform.typedef.len_t = ulong_long -rbx.platform.typedef.diskaddr_t = ulong_long -rbx.platform.typedef.k_fltset_t = uint -rbx.platform.typedef.id_t = int -rbx.platform.typedef.lgrp_id_t = int -rbx.platform.typedef.useconds_t = uint -rbx.platform.typedef.suseconds_t = long -rbx.platform.typedef.major_t = uint -rbx.platform.typedef.minor_t = uint -rbx.platform.typedef.pri_t = short -rbx.platform.typedef.cpu_flag_t = ushort -rbx.platform.typedef.o_mode_t = ushort -rbx.platform.typedef.o_dev_t = short -rbx.platform.typedef.o_uid_t = ushort -rbx.platform.typedef.o_gid_t = ushort -rbx.platform.typedef.o_nlink_t = short -rbx.platform.typedef.o_pid_t = short -rbx.platform.typedef.o_ino_t = ushort -rbx.platform.typedef.key_t = int -rbx.platform.typedef.mode_t = uint -rbx.platform.typedef.uid_t = uint -rbx.platform.typedef.gid_t = uint -rbx.platform.typedef.datalink_id_t = uint -rbx.platform.typedef.taskid_t = int -rbx.platform.typedef.projid_t = int -rbx.platform.typedef.poolid_t = int -rbx.platform.typedef.zoneid_t = int -rbx.platform.typedef.ctid_t = int -rbx.platform.typedef.pthread_t = uint -rbx.platform.typedef.pthread_key_t = uint -rbx.platform.typedef.dev_t = ulong -rbx.platform.typedef.nlink_t = uint -rbx.platform.typedef.pid_t = int -rbx.platform.typedef.size_t = ulong -rbx.platform.typedef.ssize_t = long -rbx.platform.typedef.time_t = long -rbx.platform.typedef.clock_t = long -rbx.platform.typedef.clockid_t = int -rbx.platform.typedef.timer_t = int -rbx.platform.typedef.unchar = uchar -rbx.platform.typedef.ushort = ushort -rbx.platform.typedef.uint = uint -rbx.platform.typedef.ulong = ulong -rbx.platform.typedef.u_char = uchar -rbx.platform.typedef.u_short = ushort -rbx.platform.typedef.u_int = uint -rbx.platform.typedef.u_long = ulong -rbx.platform.typedef.hrtime_t = long_long -rbx.platform.typedef.fd_mask = long -rbx.platform.typedef.fds_mask = long -rbx.platform.typedef.sa_family_t = ushort -rbx.platform.typedef.socklen_t = uint -rbx.platform.typedef.nfds_t = ulong -rbx.platform.typedef.disp_lock_t = uchar -rbx.platform.typedef.model_t = uint -rbx.platform.typedef.in_port_t = ushort -rbx.platform.typedef.in_addr_t = uint -rbx.platform.typedef.ipaddr_t = uint -rbx.platform.typedef.rlim_t = ulong -rbx.platform.typedef.rlim64_t = ulong_long diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-windows/types.conf b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-windows/types.conf deleted file mode 100644 index 0909c19..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/platform/x86_64-windows/types.conf +++ /dev/null @@ -1,27 +0,0 @@ -rbx.platform.typedef.size_t = ulong_long -rbx.platform.typedef.ssize_t = long_long -rbx.platform.typedef.intptr_t = long_long -rbx.platform.typedef.uintptr_t = ulong_long -rbx.platform.typedef.ptrdiff_t = long_long -rbx.platform.typedef.wchar_t = ushort -rbx.platform.typedef.wint_t = ushort -rbx.platform.typedef.wctype_t = ushort -rbx.platform.typedef.errno_t = int -rbx.platform.typedef.__time32_t = long -rbx.platform.typedef.__time64_t = long_long -rbx.platform.typedef.time_t = long_long -rbx.platform.typedef._ino_t = ushort -rbx.platform.typedef.ino_t = ushort -rbx.platform.typedef._dev_t = uint -rbx.platform.typedef.dev_t = uint -rbx.platform.typedef._pid_t = long_long -rbx.platform.typedef.pid_t = long_long -rbx.platform.typedef._mode_t = ushort -rbx.platform.typedef.mode_t = ushort -rbx.platform.typedef._off_t = long -rbx.platform.typedef.off32_t = long -rbx.platform.typedef._off64_t = long_long -rbx.platform.typedef.off64_t = long_long -rbx.platform.typedef.off_t = long_long -rbx.platform.typedef.useconds_t = uint -rbx.platform.typedef._sigset_t = ulong_long diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/pointer.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/pointer.rb deleted file mode 100644 index fec7671..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/pointer.rb +++ /dev/null @@ -1,134 +0,0 @@ -# -# Copyright (C) 2008, 2009 Wayne Meissner -# Copyright (c) 2007, 2008 Evan Phoenix -# -# This file is part of ruby-ffi. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# * Neither the name of the Ruby FFI project nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# - -require 'ffi/platform' -module FFI - class Pointer - - # Pointer size - SIZE = Platform::ADDRESS_SIZE / 8 - - # Return the size of a pointer on the current platform, in bytes - # @return [Numeric] - def self.size - SIZE - end - - # @param [nil,Numeric] len length of string to return - # @return [String] - # Read pointer's contents as a string, or the first +len+ bytes of the - # equivalent string if +len+ is not +nil+. - def read_string(len=nil) - if len - get_bytes(0, len) - else - get_string(0) - end - end - - # @param [Numeric] len length of string to return - # @return [String] - # Read the first +len+ bytes of pointer's contents as a string. - # - # Same as: - # ptr.read_string(len) # with len not nil - def read_string_length(len) - get_bytes(0, len) - end - - # @return [String] - # Read pointer's contents as a string. - # - # Same as: - # ptr.read_string # with no len - def read_string_to_null - get_string(0) - end - - # @param [String] str string to write - # @param [Numeric] len length of string to return - # @return [self] - # Write +len+ first bytes of +str+ in pointer's contents. - # - # Same as: - # ptr.write_string(str, len) # with len not nil - def write_string_length(str, len) - put_bytes(0, str, 0, len) - end - - # @param [String] str string to write - # @param [Numeric] len length of string to return - # @return [self] - # Write +str+ in pointer's contents, or first +len+ bytes if - # +len+ is not +nil+. - def write_string(str, len=nil) - len = str.bytesize unless len - # Write the string data without NUL termination - put_bytes(0, str, 0, len) - end - - # @param [Type] type type of data to read from pointer's contents - # @param [Symbol] reader method to send to +self+ to read +type+ - # @param [Numeric] length - # @return [Array] - # Read an array of +type+ of length +length+. - # @example - # ptr.read_array_of_type(TYPE_UINT8, :get_uint8, 4) # -> [1, 2, 3, 4] - def read_array_of_type(type, reader, length) - ary = [] - size = FFI.type_size(type) - tmp = self - length.times { |j| - ary << tmp.send(reader) - tmp += size unless j == length-1 # avoid OOB - } - ary - end - - # @param [Type] type type of data to write to pointer's contents - # @param [Symbol] writer method to send to +self+ to write +type+ - # @param [Array] ary - # @return [self] - # Write +ary+ in pointer's contents as +type+. - # @example - # ptr.write_array_of_type(TYPE_UINT8, :put_uint8, [1, 2, 3 ,4]) - def write_array_of_type(type, writer, ary) - size = FFI.type_size(type) - tmp = self - ary.each_with_index {|i, j| - tmp.send(writer, i) - tmp += size unless j == ary.length-1 # avoid OOB - } - self - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/struct.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/struct.rb deleted file mode 100644 index 599ee9b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/struct.rb +++ /dev/null @@ -1,373 +0,0 @@ -# -# Copyright (C) 2008-2010 Wayne Meissner -# Copyright (C) 2008, 2009 Andrea Fazzi -# Copyright (C) 2008, 2009 Luc Heinrich -# -# This file is part of ruby-ffi. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# * Neither the name of the Ruby FFI project nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# - -require 'ffi/platform' -require 'ffi/struct_layout_builder' - -module FFI - - class StructLayout - - # @return [Array - # Get an array of tuples (field name, offset of the field). - def offsets - members.map { |m| [ m, self[m].offset ] } - end - - # @return [Numeric] - # Get the offset of a field. - def offset_of(field_name) - self[field_name].offset - end - - # An enum {Field} in a {StructLayout}. - class Enum < Field - - # @param [AbstractMemory] ptr pointer on a {Struct} - # @return [Object] - # Get an object of type {#type} from memory pointed by +ptr+. - def get(ptr) - type.find(ptr.get_int(offset)) - end - - # @param [AbstractMemory] ptr pointer on a {Struct} - # @param value - # @return [nil] - # Set +value+ into memory pointed by +ptr+. - def put(ptr, value) - ptr.put_int(offset, type.find(value)) - end - - end - - class InnerStruct < Field - def get(ptr) - type.struct_class.new(ptr.slice(self.offset, self.size)) - end - - def put(ptr, value) - raise TypeError, "wrong value type (expected #{type.struct_class})" unless value.is_a?(type.struct_class) - ptr.slice(self.offset, self.size).__copy_from__(value.pointer, self.size) - end - end - - class Mapped < Field - def initialize(name, offset, type, orig_field) - super(name, offset, type) - @orig_field = orig_field - end - - def get(ptr) - type.from_native(@orig_field.get(ptr), nil) - end - - def put(ptr, value) - @orig_field.put(ptr, type.to_native(value, nil)) - end - end - end - - - class Struct - - # Get struct size - # @return [Numeric] - def size - self.class.size - end - - # @return [Fixnum] Struct alignment - def alignment - self.class.alignment - end - alias_method :align, :alignment - - # (see FFI::StructLayout#offset_of) - def offset_of(name) - self.class.offset_of(name) - end - - # (see FFI::StructLayout#members) - def members - self.class.members - end - - # @return [Array] - # Get array of values from Struct fields. - def values - members.map { |m| self[m] } - end - - # (see FFI::StructLayout#offsets) - def offsets - self.class.offsets - end - - # Clear the struct content. - # @return [self] - def clear - pointer.clear - self - end - - # Get {Pointer} to struct content. - # @return [AbstractMemory] - def to_ptr - pointer - end - - # Get struct size - # @return [Numeric] - def self.size - defined?(@layout) ? @layout.size : defined?(@size) ? @size : 0 - end - - # set struct size - # @param [Numeric] size - # @return [size] - def self.size=(size) - raise ArgumentError, "Size already set" if defined?(@size) || defined?(@layout) - @size = size - end - - # @return (see Struct#alignment) - def self.alignment - @layout.alignment - end - - # (see FFI::Type#members) - def self.members - @layout.members - end - - # (see FFI::StructLayout#offsets) - def self.offsets - @layout.offsets - end - - # (see FFI::StructLayout#offset_of) - def self.offset_of(name) - @layout.offset_of(name) - end - - def self.in - ptr(:in) - end - - def self.out - ptr(:out) - end - - def self.ptr(flags = :inout) - @ref_data_type ||= Type::Mapped.new(StructByReference.new(self)) - end - - def self.val - @val_data_type ||= StructByValue.new(self) - end - - def self.by_value - self.val - end - - def self.by_ref(flags = :inout) - self.ptr(flags) - end - - class ManagedStructConverter < StructByReference - - # @param [Struct] struct_class - def initialize(struct_class) - super(struct_class) - - raise NoMethodError, "release() not implemented for class #{struct_class}" unless struct_class.respond_to? :release - @method = struct_class.method(:release) - end - - # @param [Pointer] ptr - # @param [nil] ctx - # @return [Struct] - def from_native(ptr, ctx) - struct_class.new(AutoPointer.new(ptr, @method)) - end - end - - def self.auto_ptr - @managed_type ||= Type::Mapped.new(ManagedStructConverter.new(self)) - end - - - class << self - public - - # @return [StructLayout] - # @overload layout - # @return [StructLayout] - # Get struct layout. - # @overload layout(*spec) - # @param [Array,Array(Hash)] spec - # @return [StructLayout] - # Create struct layout from +spec+. - # @example Creating a layout from an array +spec+ - # class MyStruct < Struct - # layout :field1, :int, - # :field2, :pointer, - # :field3, :string - # end - # @example Creating a layout from an array +spec+ with offset - # class MyStructWithOffset < Struct - # layout :field1, :int, - # :field2, :pointer, 6, # set offset to 6 for this field - # :field3, :string - # end - # @example Creating a layout from a hash +spec+ (Ruby 1.9 only) - # class MyStructFromHash < Struct - # layout :field1 => :int, - # :field2 => :pointer, - # :field3 => :string - # end - # @example Creating a layout with pointers to functions - # class MyFunctionTable < Struct - # layout :function1, callback([:int, :int], :int), - # :function2, callback([:pointer], :void), - # :field3, :string - # end - # @note Creating a layout from a hash +spec+ is supported only for Ruby 1.9. - def layout(*spec) - #raise RuntimeError, "struct layout already defined for #{self.inspect}" if defined?(@layout) - return @layout if spec.size == 0 - - builder = StructLayoutBuilder.new - builder.union = self < Union - builder.packed = @packed if defined?(@packed) - builder.alignment = @min_alignment if defined?(@min_alignment) - - if spec[0].kind_of?(Hash) - hash_layout(builder, spec) - else - array_layout(builder, spec) - end - builder.size = @size if defined?(@size) && @size > builder.size - cspec = builder.build - @layout = cspec unless self == Struct - @size = cspec.size - return cspec - end - - - protected - - def callback(params, ret) - mod = enclosing_module - FFI::CallbackInfo.new(find_type(ret, mod), params.map { |e| find_type(e, mod) }) - end - - def packed(packed = 1) - @packed = packed - end - alias :pack :packed - - def aligned(alignment = 1) - @min_alignment = alignment - end - alias :align :aligned - - def enclosing_module - begin - mod = self.name.split("::")[0..-2].inject(Object) { |obj, c| obj.const_get(c) } - (mod < FFI::Library || mod < FFI::Struct || mod.respond_to?(:find_type)) ? mod : nil - rescue Exception - nil - end - end - - - def find_field_type(type, mod = enclosing_module) - if type.kind_of?(Class) && type < Struct - FFI::Type::Struct.new(type) - - elsif type.kind_of?(Class) && type < FFI::StructLayout::Field - type - - elsif type.kind_of?(::Array) - FFI::Type::Array.new(find_field_type(type[0]), type[1]) - - else - find_type(type, mod) - end - end - - def find_type(type, mod = enclosing_module) - if mod - mod.find_type(type) - end || FFI.find_type(type) - end - - private - - # @param [StructLayoutBuilder] builder - # @param [Hash] spec - # @return [builder] - # @raise if Ruby 1.8 - # Add hash +spec+ to +builder+. - def hash_layout(builder, spec) - raise "Ruby version not supported" if RUBY_VERSION =~ /1.8.*/ - spec[0].each do |name, type| - builder.add name, find_field_type(type), nil - end - end - - # @param [StructLayoutBuilder] builder - # @param [Array] spec - # @return [builder] - # Add array +spec+ to +builder+. - def array_layout(builder, spec) - i = 0 - while i < spec.size - name, type = spec[i, 2] - i += 2 - - # If the next param is a Integer, it specifies the offset - if spec[i].kind_of?(Integer) - offset = spec[i] - i += 1 - else - offset = nil - end - - builder.add name, find_field_type(type), offset - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/struct_layout_builder.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/struct_layout_builder.rb deleted file mode 100644 index 5ebb2ae..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/struct_layout_builder.rb +++ /dev/null @@ -1,222 +0,0 @@ -# -# Copyright (C) 2008-2010 Wayne Meissner -# -# This file is part of ruby-ffi. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# * Neither the name of the Ruby FFI project nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# - -module FFI - - # Build a {StructLayout struct layout}. - class StructLayoutBuilder - attr_reader :size - attr_reader :alignment - - def initialize - @size = 0 - @alignment = 1 - @min_alignment = 1 - @packed = false - @union = false - @fields = Array.new - end - - # @param [Numeric] size - # Set size attribute with +size+ only if +size+ is greater than attribute value. - def size=(size) - @size = size if size > @size - end - - # @param [Numeric] alignment - # Set alignment attribute with +alignment+ only if it is greater than attribute value. - def alignment=(align) - @alignment = align if align > @alignment - @min_alignment = align - end - - # @param [Boolean] is_union - # @return [is_union] - # Set union attribute. - # Set to +true+ to build a {Union} instead of a {Struct}. - def union=(is_union) - @union = is_union - end - - # @return [Boolean] - # Building a {Union} or a {Struct} ? - def union? - @union - end - - # Set packed attribute - # @overload packed=(packed) - # @param [Fixnum] packed - # @return [packed] - # Set alignment and packed attributes to +packed+. - # @overload packed=(packed) - # @param packed - # @return [0,1] - # Set packed attribute. - def packed=(packed) - if packed.is_a?(Fixnum) - @alignment = packed - @packed = packed - else - @packed = packed ? 1 : 0 - end - end - - - # List of number types - NUMBER_TYPES = [ - Type::INT8, - Type::UINT8, - Type::INT16, - Type::UINT16, - Type::INT32, - Type::UINT32, - Type::LONG, - Type::ULONG, - Type::INT64, - Type::UINT64, - Type::FLOAT32, - Type::FLOAT64, - Type::LONGDOUBLE, - Type::BOOL, - ] - - # @param [String, Symbol] name name of the field - # @param [Array, DataConverter, Struct, StructLayout::Field, Symbol, Type] type type of the field - # @param [Numeric, nil] offset - # @return [self] - # Add a field to the builder. - # @note Setting +offset+ to +nil+ or +-1+ is equivalent to +0+. - def add(name, type, offset = nil) - - if offset.nil? || offset == -1 - offset = @union ? 0 : align(@size, @packed ? [ @packed, type.alignment ].min : [ @min_alignment, type.alignment ].max) - end - - # - # If a FFI::Type type was passed in as the field arg, try and convert to a StructLayout::Field instance - # - field = type.is_a?(StructLayout::Field) ? type : field_for_type(name, offset, type) - @fields << field - @alignment = [ @alignment, field.alignment ].max unless @packed - @size = [ @size, field.size + (@union ? 0 : field.offset) ].max - - return self - end - - # @param (see #add) - # @return (see #add) - # Same as {#add}. - # @see #add - def add_field(name, type, offset = nil) - add(name, type, offset) - end - - # @param (see #add) - # @return (see #add) - # Add a struct as a field to the builder. - def add_struct(name, type, offset = nil) - add(name, Type::Struct.new(type), offset) - end - - # @param name (see #add) - # @param type (see #add) - # @param [Numeric] count array length - # @param offset (see #add) - # @return (see #add) - # Add an array as a field to the builder. - def add_array(name, type, count, offset = nil) - add(name, Type::Array.new(type, count), offset) - end - - # @return [StructLayout] - # Build and return the struct layout. - def build - # Add tail padding if the struct is not packed - size = @packed ? @size : align(@size, @alignment) - - layout = StructLayout.new(@fields, size, @alignment) - layout.__union! if @union - layout - end - - private - - # @param [Numeric] offset - # @param [Numeric] align - # @return [Numeric] - def align(offset, align) - align + ((offset - 1) & ~(align - 1)); - end - - # @param (see #add) - # @return [StructLayout::Field] - def field_for_type(name, offset, type) - field_class = case - when type.is_a?(Type::Function) - StructLayout::Function - - when type.is_a?(Type::Struct) - StructLayout::InnerStruct - - when type.is_a?(Type::Array) - StructLayout::Array - - when type.is_a?(FFI::Enum) - StructLayout::Enum - - when NUMBER_TYPES.include?(type) - StructLayout::Number - - when type == Type::POINTER - StructLayout::Pointer - - when type == Type::STRING - StructLayout::String - - when type.is_a?(Class) && type < StructLayout::Field - type - - when type.is_a?(DataConverter) - return StructLayout::Mapped.new(name, offset, Type::Mapped.new(type), field_for_type(name, offset, type.native_type)) - - when type.is_a?(Type::Mapped) - return StructLayout::Mapped.new(name, offset, type, field_for_type(name, offset, type.native_type)) - - else - raise TypeError, "invalid struct field type #{type.inspect}" - end - - field_class.new(name, offset, type) - end - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/tools/const_generator.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/tools/const_generator.rb deleted file mode 100644 index dfc622e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/tools/const_generator.rb +++ /dev/null @@ -1,229 +0,0 @@ -require 'tempfile' -require 'open3' - -module FFI - - # ConstGenerator turns C constants into ruby values. - # - # @example a simple example for stdio - # cg = FFI::ConstGenerator.new('stdio') do |gen| - # gen.const(:SEEK_SET) - # gen.const('SEEK_CUR') - # gen.const('seek_end') # this constant does not exist - # end # #calculate called automatically at the end of the block - # - # cg['SEEK_SET'] # => 0 - # cg['SEEK_CUR'] # => 1 - # cg['seek_end'] # => nil - # cg.to_ruby # => "SEEK_SET = 0\nSEEK_CUR = 1\n# seek_end not available" - class ConstGenerator - @options = {} - attr_reader :constants - - # Creates a new constant generator that uses +prefix+ as a name, and an - # options hash. - # - # The only option is +:required+, which if set to +true+ raises an error if a - # constant you have requested was not found. - # - # @param [#to_s] prefix - # @param [Hash] options - # @return - # @option options [Boolean] :required - # @overload initialize(prefix, options) - # @overload initialize(prefix, options) { |gen| ... } - # @yieldparam [ConstGenerator] gen new generator is passed to the block - # When passed a block, {#calculate} is automatically called at the end of - # the block, otherwise you must call it yourself. - def initialize(prefix = nil, options = {}) - @includes = ['stdio.h', 'stddef.h'] - @constants = {} - @prefix = prefix - - @required = options[:required] - @options = options - - if block_given? then - yield self - calculate self.class.options.merge(options) - end - end - # Set class options - # These options are merged with {#initialize} options when it is called with a block. - # @param [Hash] options - # @return [Hash] class options - def self.options=(options) - @options = options - end - # Get class options. - # @return [Hash] class options - def self.options - @options - end - # @param [String] name - # @return constant value (converted if a +converter+ was defined). - # Access a constant by name. - def [](name) - @constants[name].converted_value - end - - # Request the value for C constant +name+. - # - # @param [#to_s] name C constant name - # @param [String] format a printf format string to print the value out - # @param [String] cast a C cast for the value - # @param ruby_name alternate ruby name for {#to_ruby} - # - # @overload const(name, format=nil, cast='', ruby_name=nil, converter=nil) - # +converter+ is a Method or a Proc. - # @param [#call] converter convert the value from a string to the appropriate - # type for {#to_ruby}. - # @overload const(name, format=nil, cast='', ruby_name=nil) { |value| ... } - # Use a converter block. This block convert the value from a string to the - # appropriate type for {#to_ruby}. - # @yieldparam value constant value - def const(name, format = nil, cast = '', ruby_name = nil, converter = nil, - &converter_proc) - format ||= '%d' - cast ||= '' - - if converter_proc and converter then - raise ArgumentError, "Supply only converter or converter block" - end - - converter = converter_proc if converter.nil? - - const = Constant.new name, format, cast, ruby_name, converter - @constants[name.to_s] = const - return const - end - - # Calculate constants values. - # @param [Hash] options - # @option options [String] :cppflags flags for C compiler - # @return [nil] - # @raise if a constant is missing and +:required+ was set to +true+ (see {#initialize}) - def calculate(options = {}) - binary = File.join Dir.tmpdir, "rb_const_gen_bin_#{Process.pid}" - - Tempfile.open("#{@prefix}.const_generator") do |f| - @includes.each do |inc| - f.puts "#include <#{inc}>" - end - f.puts "\nint main(int argc, char **argv)\n{" - - @constants.each_value do |const| - f.puts <<-EOF - #ifdef #{const.name} - printf("#{const.name} #{const.format}\\n", #{const.cast}#{const.name}); - #endif - EOF - end - - f.puts "\n\treturn 0;\n}" - f.flush - - output = `gcc #{options[:cppflags]} -D_DARWIN_USE_64_BIT_INODE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -x c -Wall -Werror #{f.path} -o #{binary} 2>&1` - - unless $?.success? then - output = output.split("\n").map { |l| "\t#{l}" }.join "\n" - raise "Compilation error generating constants #{@prefix}:\n#{output}" - end - end - - output = `#{binary}` - File.unlink(binary + (FFI::Platform.windows? ? ".exe" : "")) - output.each_line do |line| - line =~ /^(\S+)\s(.*)$/ - const = @constants[$1] - const.value = $2 - end - - missing_constants = @constants.select do |name, constant| - constant.value.nil? - end.map { |name,| name } - - if @required and not missing_constants.empty? then - raise "Missing required constants for #{@prefix}: #{missing_constants.join ', '}" - end - end - - # Dump constants to +io+. - # @param [#puts] io - # @return [nil] - def dump_constants(io) - @constants.each do |name, constant| - name = [@prefix, name].join '.' if @prefix - io.puts "#{name} = #{constant.converted_value}" - end - end - - # Outputs values for discovered constants. If the constant's value was - # not discovered it is not omitted. - # @return [String] - def to_ruby - @constants.sort_by { |name,| name }.map do |name, constant| - if constant.value.nil? then - "# #{name} not available" - else - constant.to_ruby - end - end.join "\n" - end - - # Add additional C include file(s) to calculate constants from. - # @note +stdio.h+ and +stddef.h+ automatically included - # @param [List, Array] i include file(s) - # @return [Array] array of include files - def include(*i) - @includes |= i.flatten - end - - end - - # This class hold constants for {ConstGenerator} - class ConstGenerator::Constant - - attr_reader :name, :format, :cast - attr_accessor :value - - # @param [#to_s] name - # @param [String] format a printf format string to print the value out - # @param [String] cast a C cast for the value - # @param ruby_name alternate ruby name for {#to_ruby} - # @param [#call] converter convert the value from a string to the appropriate - # type for {#to_ruby}. - def initialize(name, format, cast, ruby_name = nil, converter=nil) - @name = name - @format = format - @cast = cast - @ruby_name = ruby_name - @converter = converter - @value = nil - end - - # Return constant value (converted if a +converter+ was defined). - # @return constant value. - def converted_value - if @converter - @converter.call(@value) - else - @value - end - end - - # get constant ruby name - # @return [String] - def ruby_name - @ruby_name || @name - end - - # Get an evaluable string from constant. - # @return [String] - def to_ruby - "#{ruby_name} = #{converted_value}" - end - - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/tools/generator.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/tools/generator.rb deleted file mode 100644 index 29b59e1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/tools/generator.rb +++ /dev/null @@ -1,60 +0,0 @@ -module FFI - - # @private - class Generator - - def initialize(ffi_name, rb_name, options = {}) - @ffi_name = ffi_name - @rb_name = rb_name - @options = options - @name = File.basename rb_name, '.rb' - - file = File.read @ffi_name - - new_file = file.gsub(/^( *)@@@(.*?)@@@/m) do - @constants = [] - @structs = [] - - indent = $1 - original_lines = $2.count "\n" - - instance_eval $2, @ffi_name, $`.count("\n") - - new_lines = [] - @constants.each { |c| new_lines << c.to_ruby } - @structs.each { |s| new_lines << s.generate_layout } - - new_lines = new_lines.join("\n").split "\n" # expand multiline blocks - new_lines = new_lines.map { |line| indent + line } - - padding = original_lines - new_lines.length - new_lines += [nil] * padding if padding >= 0 - - new_lines.join "\n" - end - - open @rb_name, 'w' do |f| - f.puts "# This file is generated by rake. Do not edit." - f.puts - f.puts new_file - end - end - - def constants(options = {}, &block) - @constants << FFI::ConstGenerator.new(@name, @options.merge(options), &block) - end - - def struct(options = {}, &block) - @structs << FFI::StructGenerator.new(@name, @options.merge(options), &block) - end - - ## - # Utility converter for constants - - def to_s - proc { |obj| obj.to_s.inspect } - end - - end -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/tools/generator_task.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/tools/generator_task.rb deleted file mode 100644 index 9e39519..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/tools/generator_task.rb +++ /dev/null @@ -1,36 +0,0 @@ -begin - require 'ffi/struct_generator' - require 'ffi/const_generator' - require 'ffi/generator' -rescue LoadError - # from Rakefile - require 'lib/ffi/struct_generator' - require 'lib/ffi/const_generator' - require 'lib/ffi/generator' -end - -require 'rake' -require 'rake/tasklib' -require 'tempfile' - -## -# Rake task that calculates C structs for FFI::Struct. - -# @private -class FFI::Generator::Task < Rake::TaskLib - - def initialize(rb_names) - task :clean do rm_f rb_names end - - rb_names.each do |rb_name| - ffi_name = "#{rb_name}.ffi" - - file rb_name => ffi_name do |t| - puts "Generating #{rb_name}..." if Rake.application.options.trace - - FFI::Generator.new ffi_name, rb_name - end - end - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/tools/struct_generator.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/tools/struct_generator.rb deleted file mode 100644 index e892e65..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/tools/struct_generator.rb +++ /dev/null @@ -1,194 +0,0 @@ -require 'tempfile' - -module FFI - - ## - # Generates an FFI Struct layout. - # - # Given the @@@ portion in: - # - # module Zlib::ZStream < FFI::Struct - # @@@ - # name "struct z_stream_s" - # include "zlib.h" - # - # field :next_in, :pointer - # field :avail_in, :uint - # field :total_in, :ulong - # - # # ... - # @@@ - # end - # - # StructGenerator will create the layout: - # - # layout :next_in, :pointer, 0, - # :avail_in, :uint, 4, - # :total_in, :ulong, 8, - # # ... - # - # StructGenerator does its best to pad the layout it produces to preserve - # line numbers. Place the struct definition as close to the top of the file - # for best results. - - class StructGenerator - @options = {} - attr_accessor :size - attr_reader :fields - - def initialize(name, options = {}) - @name = name - @struct_name = nil - @includes = [] - @fields = [] - @found = false - @size = nil - - if block_given? then - yield self - calculate self.class.options.merge(options) - end - end - def self.options=(options) - @options = options - end - def self.options - @options - end - def calculate(options = {}) - binary = File.join Dir.tmpdir, "rb_struct_gen_bin_#{Process.pid}" - - raise "struct name not set" if @struct_name.nil? - - Tempfile.open("#{@name}.struct_generator") do |f| - f.puts "#include " - - @includes.each do |inc| - f.puts "#include <#{inc}>" - end - - f.puts "#include \n\n" - f.puts "int main(int argc, char **argv)\n{" - f.puts " #{@struct_name} s;" - f.puts %[ printf("sizeof(#{@struct_name}) %u\\n", (unsigned int) sizeof(#{@struct_name}));] - - @fields.each do |field| - f.puts <<-EOF - printf("#{field.name} %u %u\\n", (unsigned int) offsetof(#{@struct_name}, #{field.name}), - (unsigned int) sizeof(s.#{field.name})); - EOF - end - - f.puts "\n return 0;\n}" - f.flush - - output = `gcc #{options[:cppflags]} #{options[:cflags]} -D_DARWIN_USE_64_BIT_INODE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -x c -Wall -Werror #{f.path} -o #{binary} 2>&1` - - unless $?.success? then - @found = false - output = output.split("\n").map { |l| "\t#{l}" }.join "\n" - raise "Compilation error generating struct #{@name} (#{@struct_name}):\n#{output}" - end - end - - output = `#{binary}`.split "\n" - File.unlink(binary + (FFI::Platform.windows? ? ".exe" : "")) - sizeof = output.shift - unless @size - m = /\s*sizeof\([^)]+\) (\d+)/.match sizeof - @size = m[1] - end - - line_no = 0 - output.each do |line| - md = line.match(/.+ (\d+) (\d+)/) - @fields[line_no].offset = md[1].to_i - @fields[line_no].size = md[2].to_i - - line_no += 1 - end - - @found = true - end - - def field(name, type=nil) - field = Field.new(name, type) - @fields << field - return field - end - - def found? - @found - end - - def dump_config(io) - io.puts "rbx.platform.#{@name}.sizeof = #{@size}" - - @fields.each { |field| io.puts field.to_config(@name) } - end - - def generate_layout - buf = "" - - @fields.each_with_index do |field, i| - if buf.empty? - buf << "layout :#{field.name}, :#{field.type}, #{field.offset}" - else - buf << " :#{field.name}, :#{field.type}, #{field.offset}" - end - - if i < @fields.length - 1 - buf << ",\n" - end - end - - buf - end - - def get_field(name) - @fields.find { |f| name == f.name } - end - - def include(i) - @includes << i - end - - def name(n) - @struct_name = n - end - - end - - ## - # A field in a Struct. - - class StructGenerator::Field - - attr_reader :name - attr_reader :type - attr_reader :offset - attr_accessor :size - - def initialize(name, type) - @name = name - @type = type - @offset = nil - @size = nil - end - - def offset=(o) - @offset = o - end - - def to_config(name) - buf = [] - buf << "rbx.platform.#{name}.#{@name}.offset = #{@offset}" - buf << "rbx.platform.#{name}.#{@name}.size = #{@size}" - buf << "rbx.platform.#{name}.#{@name}.type = #{@type}" if @type - buf - end - - end - -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/tools/types_generator.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/tools/types_generator.rb deleted file mode 100644 index 125a1a0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/tools/types_generator.rb +++ /dev/null @@ -1,135 +0,0 @@ -require 'tempfile' - -module FFI - - # @private - class TypesGenerator - - ## - # Maps different C types to the C type representations we use - - TYPE_MAP = { - "char" => :char, - "signed char" => :char, - "__signed char" => :char, - "unsigned char" => :uchar, - - "short" => :short, - "signed short" => :short, - "signed short int" => :short, - "unsigned short" => :ushort, - "unsigned short int" => :ushort, - - "int" => :int, - "signed int" => :int, - "unsigned int" => :uint, - - "long" => :long, - "long int" => :long, - "signed long" => :long, - "signed long int" => :long, - "unsigned long" => :ulong, - "unsigned long int" => :ulong, - "long unsigned int" => :ulong, - - "long long" => :long_long, - "long long int" => :long_long, - "signed long long" => :long_long, - "signed long long int" => :long_long, - "unsigned long long" => :ulong_long, - "unsigned long long int" => :ulong_long, - - "char *" => :string, - "void *" => :pointer, - } - - def self.generate(options = {}) - typedefs = nil - Tempfile.open 'ffi_types_generator' do |io| - io.puts <<-C -#include -#if !(defined(WIN32)) -#include -#include -#endif - C - - io.close - cc = ENV['CC'] || 'gcc' - cmd = "#{cc} -E -x c #{options[:cppflags]} -D_DARWIN_USE_64_BIT_INODE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -c" - if options[:input] - typedefs = File.read(options[:input]) - elsif options[:remote] - typedefs = `ssh #{options[:remote]} #{cmd} - < #{io.path}` - else - typedefs = `#{cmd} #{io.path}` - end - end - - code = "" - - typedefs.each_line do |type| - # We only care about single line typedef - next unless type =~ /typedef/ - # Ignore unions or structs - next if type =~ /union|struct/ - - # strip off the starting typedef and ending ; - type.gsub!(/^(.*typedef\s*)/, "") - type.gsub!(/\s*;\s*$/, "") - - parts = type.split(/\s+/) - def_type = parts.join(" ") - - # GCC does mapping with __attribute__ stuf, also see - # http://hal.cs.berkeley.edu/cil/cil016.html section 16.2.7. Problem - # with this is that the __attribute__ stuff can either occur before or - # after the new type that is defined... - if type =~ /__attribute__/ - if parts.last =~ /__QI__|__HI__|__SI__|__DI__|__word__/ - - # In this case, the new type is BEFORE __attribute__ we need to - # find the final_type as the type before the part that starts with - # __attribute__ - final_type = "" - parts.each do |p| - break if p =~ /__attribute__/ - final_type = p - end - else - final_type = parts.pop - end - - def_type = case type - when /__QI__/ then "char" - when /__HI__/ then "short" - when /__SI__/ then "int" - when /__DI__/ then "long long" - when /__word__/ then "long" - else "int" - end - - def_type = "unsigned #{def_type}" if type =~ /unsigned/ - else - final_type = parts.pop - def_type = parts.join(" ") - end - - if type = TYPE_MAP[def_type] - code << "rbx.platform.typedef.#{final_type} = #{type}\n" - TYPE_MAP[final_type] = TYPE_MAP[def_type] - else - # Fallback to an ordinary pointer if we don't know the type - if def_type =~ /\*/ - code << "rbx.platform.typedef.#{final_type} = pointer\n" - TYPE_MAP[final_type] = :pointer - end - end - end - - code - end - - end -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/types.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/types.rb deleted file mode 100644 index 2085a9c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/types.rb +++ /dev/null @@ -1,190 +0,0 @@ -# -# Copyright (C) 2008-2010 Wayne Meissner -# Copyright (c) 2007, 2008 Evan Phoenix -# -# This file is part of ruby-ffi. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# * Neither the name of the Ruby FFI project nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# - -# see {file:README} -module FFI - - # @param [Type, DataConverter, Symbol] old type definition used by {FFI.find_type} - # @param [Symbol] add new type definition's name to add - # @return [Type] - # Add a definition type to type definitions. - def self.typedef(old, add) - TypeDefs[add] = self.find_type(old) - end - - # (see FFI.typedef) - def self.add_typedef(old, add) - typedef old, add - end - - - # @param [Type, DataConverter, Symbol] name - # @param [Hash] type_map if nil, {FFI::TypeDefs} is used - # @return [Type] - # Find a type in +type_map+ ({FFI::TypeDefs}, by default) from - # a type objet, a type name (symbol). If +name+ is a {DataConverter}, - # a new {Type::Mapped} is created. - def self.find_type(name, type_map = nil) - if name.is_a?(Type) - name - - elsif type_map && type_map.has_key?(name) - type_map[name] - - elsif TypeDefs.has_key?(name) - TypeDefs[name] - - elsif name.is_a?(DataConverter) - (type_map || TypeDefs)[name] = Type::Mapped.new(name) - - else - raise TypeError, "unable to resolve type '#{name}'" - end - end - - # List of type definitions - TypeDefs.merge!({ - # The C void type; only useful for function return types - :void => Type::VOID, - - # C boolean type - :bool => Type::BOOL, - - # C nul-terminated string - :string => Type::STRING, - - # C signed char - :char => Type::CHAR, - # C unsigned char - :uchar => Type::UCHAR, - - # C signed short - :short => Type::SHORT, - # C unsigned short - :ushort => Type::USHORT, - - # C signed int - :int => Type::INT, - # C unsigned int - :uint => Type::UINT, - - # C signed long - :long => Type::LONG, - - # C unsigned long - :ulong => Type::ULONG, - - # C signed long long integer - :long_long => Type::LONG_LONG, - - # C unsigned long long integer - :ulong_long => Type::ULONG_LONG, - - # C single precision float - :float => Type::FLOAT, - - # C double precision float - :double => Type::DOUBLE, - - # C long double - :long_double => Type::LONGDOUBLE, - - # Native memory address - :pointer => Type::POINTER, - - # 8 bit signed integer - :int8 => Type::INT8, - # 8 bit unsigned integer - :uint8 => Type::UINT8, - - # 16 bit signed integer - :int16 => Type::INT16, - # 16 bit unsigned integer - :uint16 => Type::UINT16, - - # 32 bit signed integer - :int32 => Type::INT32, - # 32 bit unsigned integer - :uint32 => Type::UINT32, - - # 64 bit signed integer - :int64 => Type::INT64, - # 64 bit unsigned integer - :uint64 => Type::UINT64, - - :buffer_in => Type::BUFFER_IN, - :buffer_out => Type::BUFFER_OUT, - :buffer_inout => Type::BUFFER_INOUT, - - # Used in function prototypes to indicate the arguments are variadic - :varargs => Type::VARARGS, - }) - - - class StrPtrConverter - extend DataConverter - native_type Type::POINTER - - # @param [Pointer] val - # @param [] ctx - # @return [Array(String, Pointer)] - # Returns a [ String, Pointer ] tuple so the C memory for the string can be freed - def self.from_native(val, ctx) - [ val.null? ? nil : val.get_string(0), val ] - end - - end - - typedef(StrPtrConverter, :strptr) - - # @param type +type+ is an instance of class accepted by {FFI.find_type} - # @return [Numeric] - # Get +type+ size, in bytes. - def self.type_size(type) - find_type(type).size - end - - # Load all the platform dependent types - begin - File.open(File.join(Platform::CONF_DIR, 'types.conf'), "r") do |f| - prefix = "rbx.platform.typedef." - f.each_line { |line| - if line.index(prefix) == 0 - new_type, orig_type = line.chomp.slice(prefix.length..-1).split(/\s*=\s*/) - typedef(orig_type.to_sym, new_type.to_sym) - end - } - end - typedef :pointer, :caddr_t - rescue Errno::ENOENT - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/union.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/union.rb deleted file mode 100644 index 38414ab..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/union.rb +++ /dev/null @@ -1,43 +0,0 @@ -# -# Copyright (C) 2009 Andrea Fazzi -# -# This file is part of ruby-ffi. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# * Neither the name of the Ruby FFI project nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# - -require 'ffi/struct' - -module FFI - - class Union < FFI::Struct - def self.builder - b = StructLayoutBuilder.new - b.union = true - b - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/variadic.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/variadic.rb deleted file mode 100644 index 2414055..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/variadic.rb +++ /dev/null @@ -1,78 +0,0 @@ -# -# Copyright (C) 2008, 2009 Wayne Meissner -# Copyright (C) 2009 Luc Heinrich -# -# This file is part of ruby-ffi. -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# * Neither the name of the Ruby FFI project nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# - -module FFI - class VariadicInvoker - def init(arg_types, type_map) - @fixed = Array.new - @type_map = type_map - arg_types.each_with_index do |type, i| - @fixed << type unless type == Type::VARARGS - end - end - - - def call(*args, &block) - param_types = Array.new(@fixed) - param_values = Array.new - @fixed.each_with_index do |t, i| - param_values << args[i] - end - i = @fixed.length - while i < args.length - param_types << FFI.find_type(args[i], @type_map) - param_values << args[i + 1] - i += 2 - end - invoke(param_types, param_values, &block) - end - - # - # Attach the invoker to module +mod+ as +mname+ - # - def attach(mod, mname) - invoker = self - params = "*args" - call = "call" - mod.module_eval <<-code - @@#{mname} = invoker - def self.#{mname}(#{params}) - @@#{mname}.#{call}(#{params}) - end - def #{mname}(#{params}) - @@#{mname}.#{call}(#{params}) - end - code - invoker - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/version.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/version.rb deleted file mode 100644 index 89a36ef..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi/version.rb +++ /dev/null @@ -1,4 +0,0 @@ -module FFI - VERSION = '1.9.8' -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi_c.bundle b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/lib/ffi_c.bundle deleted file mode 100755 index 7d8c27cdd85ecbd94aeb762221bfbe2782faaa2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178444 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ν3+JEPwf9wWs1|JKa5B@N?1$;GlFVCpwX^yDv!zwXaso%`b&@%Q`VCgEE9qXGGEJKNfW%<{D82if#bXb;C)pW+=M zI=2V(WOdW=qG-{X-m~iEx5L7AF!W^V8xp-|)sI7eEc9gRZ_y93=^rgWc|iR2d@zjh z{tRVl-=%2ZtH5RO1K{Og`MK2KUje@zd=6Oio9TEtRQ&z^dB1S2{WEfxmR_D0O1zGz zWKBP`uYQnC|7iV+jR(~?}Ydc;W#x22ZpeNU>FG4TtV~6%9Q@^zHjMh7F7evm$eO

r!hfUPt^LVs)4y8$ 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 diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/Benchmark.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/Benchmark.c deleted file mode 100644 index 55a7380..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/Benchmark.c +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ -#include -#include - -void returnVoid() { - -} - -void returnVoidI(int arg) { - -} -int returnInt() { - return 0; -} - -int returnIntI(int arg) { - return arg; -} - -typedef int8_t s8; -typedef uint8_t u8; -typedef int16_t s16; -typedef uint16_t u16; -typedef int32_t s32; -typedef uint32_t u32; -typedef int64_t s64; -typedef uint64_t u64; -typedef float f32; -typedef double f64; -typedef void v; -typedef char* S; -typedef void* P; - -#define B6(R, T1, T2, T3, T4, T5, T6) R bench_##T1##T2##T3##T4##T5##T6##_##R(T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) {} -#define B5(R, T1, T2, T3, T4, T5) R bench_##T1##T2##T3##T4##T5##_##R(T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) {} -#define B4(R, T1, T2, T3, T4) R bench_##T1##T2##T3##T4##_##R(T1 a1, T2 a2, T3 a3, T4 a4) {} -#define B3(R, T1, T2, T3) R bench_##T1##T2##T3##_##R(T1 a1, T2 a2, T3 a3) {} -#define B2(R, T1, T2) R bench_##T1##T2##_##R(T1 a1, T2 a2) {} -#define B1(R, T1) R bench_##T1##_##R(T1 a1) {} -#define BrV(T) B1(v, T); B2(v, T, T); B3(v, T, T, T); B4(v, T, T, T, T); B5(v, T, T, T, T, T); B6(v, T, T, T, T, T, T); -BrV(u32); -BrV(s32); -BrV(s64); -BrV(u64); -BrV(f32); -BrV(f64); -BrV(S); -BrV(P); diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/BoolTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/BoolTest.c deleted file mode 100644 index 04cb6c6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/BoolTest.c +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. - * Copyright (c) 2009 Aman Gupta. - * - * All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - -#include - -bool -bool_return_true() -{ - return true; -} - -bool -bool_return_false() -{ - return false; -} - -bool -bool_return_val(bool value) -{ - return value; -} - -bool -bool_reverse_val(bool value) -{ - return value ? false : true; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/BufferTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/BufferTest.c deleted file mode 100644 index 3e95ebc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/BufferTest.c +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - - -#define MEMSET(buf, value, size) do { \ - int i; for (i = 0; i < size; ++i) buf[i] = value; \ -} while(0) -#define MEMCPY(dst, src, size) do { \ - int i; for (i = 0; i < size; ++i) dst[i] = src[i]; \ -} while(0) - -#define FILL(JTYPE, CTYPE) \ -void fill##JTYPE##Buffer(CTYPE* buf, CTYPE value, int size) { MEMSET(buf, value, size); } - -#define COPY(JTYPE, CTYPE) \ -void copy##JTYPE##Buffer(CTYPE* dst, CTYPE* src, int size) { MEMCPY(dst, src, size); } - -#define FUNC(JTYPE, CTYPE) \ - FILL(JTYPE, CTYPE); \ - COPY(JTYPE, CTYPE) - -FUNC(Byte, char); -FUNC(Short, short); -FUNC(Int, int); -FUNC(Long, long long); -FUNC(Float, float); -FUNC(Double, double); - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/ClosureTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/ClosureTest.c deleted file mode 100644 index dfeabde..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/ClosureTest.c +++ /dev/null @@ -1,205 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - -#include -#include -#ifndef _WIN32 -# include -#else -# include -# include -#endif - -#define R(T, rtype) rtype testClosureVr##T(rtype (*closure)(void)) { \ - return closure != NULL ? (*closure)() : (rtype) 0; \ -} - -#define P(T, ptype) void testClosure##T##rV(void (*closure)(ptype), ptype a1) { \ - if (closure != NULL) (*closure)(a1); \ -} - -void testClosureVrV(void (*closure)(void)) -{ - (*closure)(); -} - -R(Z, bool); -R(B, char); -R(S, short); -R(I, int); -R(L, long); -R(J, long long); -R(LL, long long); -R(F, float); -R(D, double); -R(P, const void*); - - -P(Z, bool); -P(B, char); -P(S, short); -P(I, int); -P(L, long); -P(J, long long); -P(LL, long long); -P(F, float); -P(D, double); -P(P, const void*); -P(UL, unsigned long); - -#if defined(_WIN32) && !defined(_WIN64) -bool __stdcall testClosureStdcall(long *a1, void __stdcall(*closure)(void *, long), long a2) { \ - void* sp_pre; - void* sp_post; - - asm volatile (" movl %%esp,%0" : "=g" (sp_pre)); - (*closure)(a1, a2); - asm volatile (" movl %%esp,%0" : "=g" (sp_post)); - - /* %esp before pushing parameters on the stack and after the call returns - * should be equal, if both sides respects the stdcall convention */ - return sp_pre == sp_post; -} -#endif - -void testOptionalClosureBrV(void (*closure)(char), char a1) -{ - if (closure) { - (*closure)(a1); - } -} - - -struct ThreadVrV { - void (*closure)(void); - int count; -}; - -static void * -threadVrV(void *arg) -{ - struct ThreadVrV* t = (struct ThreadVrV *) arg; - - int i; - for (i = 0; i < t->count; i++) { - (*t->closure)(); - } - - return NULL; -} - -void testThreadedClosureVrV(void (*closure)(void), int n) -{ - struct ThreadVrV arg = {closure, n}; -#ifndef _WIN32 - pthread_t t; - pthread_create(&t, NULL, threadVrV, &arg); - pthread_join(t, NULL); -#else - HANDLE hThread = (HANDLE) _beginthread((void (*)(void *))threadVrV, 0, &arg); - WaitForSingleObject(hThread, INFINITE); -#endif -} - -struct s8f32s32 { - char s8; - float f32; - int s32; -}; - -// Takes a struct argument -void testClosureTrV(void (*closure)(struct s8f32s32 s), struct s8f32s32* s) -{ - (*closure)(*s); -} - -// Returns a struct value -struct s8f32s32 testClosureVrT(struct s8f32s32 (*closure)()) -{ - return (*closure)(); -} - -typedef int (*returnTypeClosure_t)(int) ; -typedef returnTypeClosure_t (*lookupClosure_t)(); - -int testReturnsClosure(lookupClosure_t lookup, int val) -{ - returnTypeClosure_t func = lookup ? (*lookup)() : NULL; - return func ? (*func)(val) : 0; -} - -static int multiplyByTwo(int value) -{ - return value * 2; -} - -returnTypeClosure_t testReturnsFunctionPointer() -{ - return multiplyByTwo; -} - -typedef int (*argumentClosure_t)(int); -typedef int (*withArgumentClosure_t)(argumentClosure_t, int); - -int testArgumentClosure(withArgumentClosure_t closure_with, argumentClosure_t closure_arg, int val) -{ - return (*closure_with)(closure_arg, val); -} - - -// -// These macros produce functions of the form: -// testClosureBIrV(void (*closure)(char, int), char a1, int a2) {} -// -#define C2_(J1, J2, N1, N2) \ -void testClosure##J1##J2##rV(void (*closure)(N1, N2), N1 a1, N2 a2) \ -{ \ - if (closure != NULL) (*closure)(a1, a2); \ -} - -#define C2(J, N) \ - C2_(B, J, char, N) \ - C2_(S, J, short, N) \ - C2_(I, J, int, N) \ - C2_(LL, J, long long, N) \ - C2_(F, J, float, N) \ - C2_(D, J, double, N) \ - - -C2(B, char); -C2(S, short); -C2(I, int); -C2(LL, long long); -C2(F, float); -C2(D, double); - -#define C3_(J1, J2, J3, N1, N2, N3) \ -void testClosure##J1##J2##J3##rV(void (*closure)(N1, N2, N3), N1 a1, N2 a2, N3 a3) \ -{ \ - (*closure)(a1, a2, a3); \ -} - - -#define C3(J, N) \ - C3_(B, J, B, char, N, char) \ - C3_(S, J, S, short, N, short) \ - C3_(I, J, I, int, N, int) \ - C3_(LL, J, LL, long long, N, long long) \ - C3_(F, J, F, float, N, float) \ - C3_(D, J, D, double, N, double) \ - -C3(B, char); -C3(S, short); -C3(I, int); -C3(LL, long long); -C3(F, float); -C3(D, double); -C3_(B, S, I, char, short, int); -C3_(B, S, LL, char, short, long long); -C3_(LL, S, B, long long, short, char); -C3_(LL, B, S, long long, char, short); - - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/EnumTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/EnumTest.c deleted file mode 100644 index 4bf8d23..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/EnumTest.c +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ -#include - -int test_untagged_enum(int val) { - return val; -} - -int test_untagged_typedef_enum(int val) { - return val; -} - -uint8_t test_untagged_nonint_enum(uint8_t val) { - return val; -} - -uint16_t test_tagged_nonint_enum1(uint16_t val) { - return val; -} - -uint32_t test_tagged_nonint_enum2(uint32_t val) { - return val; -} - -uint64_t test_tagged_nonint_enum3(uint64_t val) { - return val; -} - -typedef enum {c1, c2, c3, c4} enum_type1; -enum_type1 test_tagged_typedef_enum1(enum_type1 val) { - return val; -} - -typedef enum {c5 = 42, c6, c7, c8} enum_type2; -enum_type2 test_tagged_typedef_enum2(enum_type2 val) { - return val; -} - -typedef enum {c9 = 42, c10, c11 = 4242, c12} enum_type3; -enum_type3 test_tagged_typedef_enum3(enum_type3 val) { - return val; -} - -typedef enum {c13 = 42, c14 = 4242, c15 = 424242, c16 = 42424242} enum_type4; -enum_type4 test_tagged_typedef_enum4(enum_type4 val) { - return val; -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/FunctionTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/FunctionTest.c deleted file mode 100644 index eafad89..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/FunctionTest.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - -#ifdef _WIN32 -#include -#define sleep(x) Sleep(x) -#endif - -#ifndef _WIN32 -#include -#include -#endif - -int testAdd(int a, int b) -{ - return a + b; -}; - -int testFunctionAdd(int a, int b, int (*f)(int, int)) -{ - return f(a, b); -}; - -void testBlocking(int seconds) { - sleep(seconds); -}; - -struct async_data { - void (*fn)(int); - int value; -}; - -static void* asyncThreadCall(void *data) -{ - struct async_data* d = (struct async_data *) data; - if (d != NULL && d->fn != NULL) { - (*d->fn)(d->value); - } - - return NULL; -} - -void testAsyncCallback(void (*fn)(int), int value) -{ -#ifndef _WIN32 - pthread_t t; - struct async_data d; - d.fn = fn; - d.value = value; - pthread_create(&t, NULL, asyncThreadCall, &d); - pthread_join(t, NULL); -#else - (*fn)(value); -#endif -} - -#if defined(_WIN32) && !defined(_WIN64) -struct StructUCDP { - unsigned char a1; - double a2; - void *a3; -}; - -void __stdcall testStdcallManyParams(long *a1, char a2, short int a3, int a4, __int64 a5, - struct StructUCDP a6, struct StructUCDP *a7, float a8, double a9) { -} -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/GNUmakefile b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/GNUmakefile deleted file mode 100644 index a7ba9e6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/GNUmakefile +++ /dev/null @@ -1,149 +0,0 @@ -# -*- makefile -*- - -ifeq ($(OS),) - BUILD_OS := $(shell uname -s | tr '[:upper:]' '[:lower:]') - OS := $(BUILD_OS) -endif - -ifeq ($(CPU),) - CPU := $(shell uname -m | sed -e 's/i[345678]86/i386/') -endif - -PLATFORM = $(CPU)-$(OS) - -ifeq ($(OS), sunos) - OS = solaris -endif - -SRC_DIR = libtest -BUILD_DIR ?= build -TEST_BUILD_DIR = $(BUILD_DIR)/libtest -# Set defaults to unix (linux/solaris/bsd) -PREFIX = lib -LIBEXT ?= so -LIBNAME = $(PREFIX)test.$(LIBEXT) - -export MACOSX_DEPLOYMENT_TARGET=10.4 - -CCACHE := $(strip $(realpath $(shell which ccache 2> /dev/null))) - -TEST_SRCS = $(wildcard $(SRC_DIR)/*.c) -TEST_OBJS := $(patsubst $(SRC_DIR)/%.c, $(TEST_BUILD_DIR)/%.o, $(TEST_SRCS)) - -# -# Compiler/linker flags from: -# http://weblogs.java.net/blog/kellyohair/archive/2006/01/compilation_of_1.html -JFLAGS = -fno-omit-frame-pointer -fno-strict-aliasing -OFLAGS = -O2 $(JFLAGS) -WFLAGS = -W -Wall -Wno-unused -Wno-parentheses -PICFLAGS = -fPIC -SOFLAGS = -shared -LDFLAGS += $(SOFLAGS) - -IFLAGS = -I"$(BUILD_DIR)" -CFLAGS = $(OFLAGS) $(WFLAGS) $(IFLAGS) $(PICFLAGS) -D_REENTRANT - -ifneq ($(strip $(findstring $(OS), win32, mingw, cygwin)),) - # For cygwin => win32-native builds, strip out cygwin deps - ifneq ($(findstring cygwin, $(BUILD_OS)),) - CC += -mno-cygwin -mwin32 - LDFLAGS += -mno-cygwin -Wl,--add-stdcall-alias - endif - PICFLAGS= - LIBEXT=dll - CC = gcc -endif - -ifeq ($(OS), darwin) - ifneq ($(findstring $(CPU),ppc),) - ARCHFLAGS += -arch ppc - endif - ifneq ($(findstring $(CPU),i386 x86_64),) - ARCHFLAGS += -arch i386 -arch x86_64 - endif - CFLAGS += $(ARCHFLAGS) -DTARGET_RT_MAC_CFM=0 - CFLAGS += -fno-common - LDFLAGS = $(ARCHFLAGS) -dynamiclib - # link against the universal libraries on ppc machines - LDFLAGS += -L$(MACSDK)/usr/lib - LIBEXT = dylib - FFI_CFLAGS += -isysroot $(MACSDK) - PICFLAGS = - SOFLAGS = -endif - -ifeq ($(OS), linux) - SOFLAGS += -Wl,-soname,$(LIBNAME) -endif - -ifeq ($(OS), solaris) - CC = /usr/sfw/bin/gcc -std=c99 - LD = /usr/ccs/bin/ld - SOFLAGS = -shared -static-libgcc -endif - -ifeq ($(OS), aix) - LIBEXT = a - SOFLAGS = -shared -static-libgcc - PICFLAGS += -pthread -endif - -ifneq ($(findstring bsd, $(OS)),) - SOFLAGS = -shared -static-libgcc - CFLAGS += -pthread - LDFLAGS += -pthread -endif - -ifeq ($(CPU), i386) - MODEL = 32 -endif - -ifeq ($(CPU), sparcv9) - MODEL = 64 -endif - -ifeq ($(CPU), amd64) - MODEL = 64 -endif - -ifeq ($(CPU), x86_64) - MODEL = 64 -endif - -ifeq ($(CPU), ppc64) - MODEL = 64 -endif - -ifeq ($(CPU), powerpc64) - MODEL = 64 -endif - -MODELFLAG = -ifneq ($(MODEL),) - MODELFLAG = -m$(MODEL) -endif - -# On platforms (linux, solaris) that support both 32bit and 64bit, force building for one or the other -ifneq ($(or $(findstring linux, $(OS)), $(findstring solaris, $(OS))),) - # Change the CC/LD instead of CFLAGS/LDFLAGS, incase other things in the flags - # makes the libffi build choke - CC += $(MODELFLAG) - LD += $(MODELFLAG) -endif - -LIBTEST = $(BUILD_DIR)/$(LIBNAME) - -all: $(LIBTEST) - -$(TEST_BUILD_DIR)/%.o : $(SRC_DIR)/%.c - @mkdir -p $(@D) - $(CCACHE) $(CC) $(CFLAGS) -c $< -o $@ - -$(LIBTEST): $(TEST_OBJS) - $(CC) -o $@ $(LDFLAGS) $(TEST_OBJS) -lm - -clean:: - # nothing to do - ant will delete the build dir - -debug:: - @echo "SRCS=$(TEST_SRCS)" diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/GlobalVariable.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/GlobalVariable.c deleted file mode 100644 index 39c12a2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/GlobalVariable.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - -#include -#include - -typedef int8_t s8; -typedef uint8_t u8; -typedef int16_t s16; -typedef uint16_t u16; -typedef int32_t s32; -typedef uint32_t u32; -typedef int64_t s64; -typedef uint64_t u64; -typedef signed long sL; -typedef unsigned long uL; -typedef float f32; -typedef double f64; -#if !defined(__OpenBSD__) -typedef unsigned long ulong; -#endif -typedef void* pointer; -typedef void* P; - -#define GVAR(T) \ - extern T gvar_##T; \ - T gvar_##T = (T) -1; \ - T gvar_##T##_get() { return gvar_##T; }; \ - void gvar_##T##_set(T v) { gvar_##T = v; } - -GVAR(s8); -GVAR(u8); -GVAR(s16); -GVAR(u16); -GVAR(s32); -GVAR(u32); -GVAR(s64); -GVAR(u64); -GVAR(long); -GVAR(ulong); -GVAR(pointer); - -struct gstruct { - long data; -}; - -struct gstruct gvar_gstruct = { -1 }; - -struct gstruct* -gvar_gstruct_get(void) -{ - return &gvar_gstruct; -} - -void -gvar_gstruct_set(const struct gstruct* val) -{ - gvar_gstruct = *val; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/LastErrorTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/LastErrorTest.c deleted file mode 100644 index 02ce4a8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/LastErrorTest.c +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - -#if defined(_WIN32) || defined(__WIN32__) -# include -#else -# include -#endif - -int setLastError(int error) { -#if defined(_WIN32) || defined(__WIN32__) - SetLastError(error); -#else - errno = error; -#endif - return -1; -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/NumberTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/NumberTest.c deleted file mode 100644 index 3fa25a8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/NumberTest.c +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - -#include -#include -#include -#include - -#if defined(__sparc) && defined(__sun__) - #define fix_mem_access __asm("ta 6") -#else - #define fix_mem_access -#endif - -typedef int8_t s8; -typedef uint8_t u8; -typedef int16_t s16; -typedef uint16_t u16; -typedef int32_t s32; -typedef uint32_t u32; -typedef int64_t s64; -typedef uint64_t u64; -typedef signed long sL; -typedef unsigned long uL; -typedef float f32; -typedef double f64; -typedef long double f128; -#if !defined(__OpenBSD__) -typedef unsigned long ulong; -#endif - -#define ADD(T) T add_##T(T arg1, T arg2) { return arg1 + arg2; } -#define SUB(T) T sub_##T(T arg1, T arg2) { return arg1 - arg2; } -#define MUL(T) T mul_##T(T arg1, T arg2) { return arg1 * arg2; } -#define DIV(T) T div_##T(T arg1, T arg2) { return arg1 / arg2; } -#define RET(T) T ret_##T(T arg1) { return arg1; } -#define SET(T) static T T##_;void set_##T(T arg1) { T##_ = arg1; } -#define GET(T) T get_##T() { return T##_; } -typedef char* ptr; -#define TEST(T) ADD(T) SUB(T) MUL(T) DIV(T) RET(T) SET(T) GET(T) -TEST(s8); -TEST(u8); -TEST(s16); -TEST(u16); -TEST(s32); -TEST(u32); -TEST(s64); -TEST(u64); -TEST(float); -TEST(double); -TEST(long); -TEST(ulong); -TEST(f128); - -#define ADD2(R, T1, T2) R add_##T1##T2##_##R(T1 arg1, T2 arg2) { return arg1 + arg2; } -#define SUB2(R, T1, T2) R sub_##T1##T2##_##R(T1 arg1, T2 arg2) { return arg1 - arg2; } -#define MUL2(R, T1, T2) R mul_##T1##T2##_##R(T1 arg1, T2 arg2) { return arg1 * arg2; } -#define DIV2(R, T1, T2) R div_##T1##T2##_##R(T1 arg1, T2 arg2) { return arg1 / arg2; } - -#define T2__(R, T1, T2) ADD2(R, T1, T2) SUB2(R, T1, T2) MUL2(R, T1, T2) DIV2(R, T1, T2) -#define T2_(R, T1) \ - T2__(R, T1, s8) T2__(R, T1, u8) \ - T2__(R, T1, s16) T2__(R, T1, u16) \ - T2__(R, T1, s32) T2__(R, T1, u32) \ - T2__(R, T1, sL) T2__(R, T1, uL) \ - T2__(R, T1, s64) T2__(R, T1, u64) \ - -#define TEST2(R) \ - T2_(R, s8) T2_(R, u8) T2_(R, s16) T2_(R, u16) T2_(R, s32) T2_(R, u32) \ - T2_(R, sL) T2_(R, uL) T2_(R, s64) T2_(R, u64) - -#ifdef notyet -TEST2(s32) -TEST2(u32) -TEST2(s64) -TEST2(u64) -#endif - -#define ADD3(R, T1, T2, T3) R add_##T1##T2##T3##_##R(T1 arg1, T2 arg2, T3 arg3) { return arg1 + arg2 + arg3; } -#define pack_f32(buf, v) do { float f = v; memcpy((buf), &f, sizeof(f)); } while(0) -#define pack_f64(buf, v) do { double f = v; memcpy((buf), &f, sizeof(f)); } while(0) -#define pack_int(buf, v) do { *(buf) = v; } while(0) -#define pack_s8 pack_int -#define pack_u8 pack_int -#define pack_s16 pack_int -#define pack_u16 pack_int -#define pack_s32 pack_int -#define pack_u32 pack_int -#define pack_s64 pack_int -#define pack_u64 pack_int -#define pack_sL pack_int -#define pack_uL pack_int - -#define PACK3(R, T1, T2, T3) void pack_##T1##T2##T3##_##R(T1 arg1, T2 arg2, T3 arg3, R* r) { \ - fix_mem_access; \ - pack_##T1(&r[0], arg1); \ - pack_##T2(&r[1], arg2); \ - pack_##T3(&r[2], arg3); \ -} - -#define T3___(R, T1, T2, T3) PACK3(R, T1, T2, T3) /* SUB2(R, T1, T2) MUL2(R, T1, T2) DIV2(R, T1, T2) */ -#define T3__(R, T1, T2) \ - T3___(R, T1, T2, s8) T3___(R, T1, T2, u8) \ - T3___(R, T1, T2, s16) T3___(R, T1, T2, u16) \ - T3___(R, T1, T2, s32) T3___(R, T1, T2, u32) \ - T3___(R, T1, T2, sL) T3___(R, T1, T2, uL) \ - T3___(R, T1, T2, s64) T3___(R, T1, T2, u64) \ - T3___(R, T1, T2, f32) T3___(R, T1, T2, f64) \ - -#define T3_(R, T1) \ - T3__(R, T1, s8) T3__(R, T1, u8) \ - T3__(R, T1, s16) T3__(R, T1, u16) \ - T3__(R, T1, s32) T3__(R, T1, u32) \ - T3__(R, T1, sL) T3__(R, T1, uL) \ - T3__(R, T1, s64) T3__(R, T1, u64) \ - T3__(R, T1, f32) T3__(R, T1, f64) \ - -#define TEST3(R) \ - T3_(R, s8) T3_(R, u8) T3_(R, s16) T3_(R, u16) T3_(R, s32) T3_(R, u32) \ - T3_(R, sL) T3_(R, uL) T3_(R, s64) T3_(R, u64) T3_(R, f32) T3_(R, f64) - -TEST3(s64) - -void -foo6(intptr_t i1, intptr_t i2, intptr_t i3, intptr_t i4, intptr_t i5, intptr_t i6) { } - -void -foo5(intptr_t i1, intptr_t i2, intptr_t i3, intptr_t i4, intptr_t i5) { } - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/PointerTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/PointerTest.c deleted file mode 100644 index 7237ab2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/PointerTest.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - -#include -#include -#include -#include -#include -#include -typedef void* ptr; -typedef void* pointer; -#ifdef _WIN32 -typedef char* caddr_t; -#endif - -#define RET(T) T ptr_ret_##T(void* arg1, int offset) { \ - T tmp; memcpy(&tmp, (caddr_t) arg1 + offset, sizeof(tmp)); return tmp; \ -} -#define SET(T) void ptr_set_##T(void* arg1, int offset, T value) { \ - memcpy((caddr_t) arg1 + offset, &value, sizeof(value)); \ -} -#define TEST(T) SET(T) RET(T) - -TEST(int8_t); -TEST(int16_t); -TEST(int32_t); -TEST(int64_t); -TEST(float); -TEST(double); -TEST(pointer); - -void* -ptr_return_array_element(void **ptrArray, int arrayIndex) -{ - return ptrArray[arrayIndex]; -} - -void -ptr_set_array_element(void **ptrArray, int arrayIndex, void *value) -{ - ptrArray[arrayIndex] = value; -} - -void* -ptr_malloc(int size) -{ - return calloc(1, size); -} -void -ptr_free(void* ptr) -{ - free(ptr); -} - -void* -ptr_from_address(uintptr_t addr) -{ - return (void *) addr; -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/ReferenceTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/ReferenceTest.c deleted file mode 100644 index d1dd88b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/ReferenceTest.c +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - -#include - -#define REF(T) void ref_##T(T arg, T* result) { *result = arg; } -#define ADD(T) void ref_add_##T(T arg1, T arg2, T* result) { *result = arg1 + arg2; } -#define SUB(T) void ref_sub_##T(T arg1, T arg2, T* result) { *result = arg1 - arg2; } -#define MUL(T) void ref_mul_##T(T arg1, T arg2, T* result) { *result = arg1 * arg2; } -#define DIV(T) void ref_div_##T(T arg1, T arg2, T* result) { *result = arg1 / arg2; } -#define TEST(T) ADD(T) SUB(T) MUL(T) DIV(T) REF(T) - -TEST(int8_t); -TEST(int16_t); -TEST(int32_t); -TEST(int64_t); -TEST(float); -TEST(double); - - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/StringTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/StringTest.c deleted file mode 100644 index 292242b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/StringTest.c +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - -#include - -int -string_equals(const char* s1, const char* s2) -{ - return strcmp(s1, s2) == 0; -} - -void -string_set(char* s1, const char* s2) -{ - strcpy(s1, s2); -} -void -string_concat(char* dst, const char* src) -{ - strcat(dst, src); -} -void -string_dummy(char* dummy) -{ -} -const char* -string_null(void) -{ - return NULL; -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/StructTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/StructTest.c deleted file mode 100644 index 25683d3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/StructTest.c +++ /dev/null @@ -1,243 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. - * Copyright (c) 2009 Andrea Fazzi . - * - * All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - -#include -#include -#include -#include -#include -#include - -typedef char s8; -typedef short s16; -typedef int s32; -typedef long long s64; -typedef float f32; -typedef double f64; - -typedef struct bugged_struct { - unsigned char visible; - unsigned int x; - unsigned int y; - short rx; - short ry; - unsigned char order; - unsigned char size; -} bugged_struct_t; - -unsigned int -bugged_struct_size() { - return sizeof(bugged_struct_t); -} - -struct test1 { - char b; - short s; - int i; - long long j; - long l; - float f; - double d; - char string[32]; -}; - -struct struct_with_array { - char c; - int a[5]; -}; - -struct nested { - int i; -}; - -struct container { - char first; - struct nested s; -}; - -int -struct_align_nested_struct(struct container* a) { return a->s.i; } - -void* -struct_field_array(struct struct_with_array* s) { return &s->a; } - -struct container* -struct_make_container_struct(int i) -{ - static struct container cs; - memset(&cs, 0, sizeof(cs)); - cs.first = 1; - cs.s.i = i; - return &cs; -} - -#define T(x, type) \ - type struct_field_##type(struct test1* t) { return t->x; } \ - struct type##_align { char first; type value; }; \ - type struct_align_##type(struct type##_align* a) { return a->value; } - -T(b, s8); -T(s, s16); -T(i, s32); -T(j, s64); -T(f, f32); -T(d, f64); -T(l, long); - -void -struct_set_string(struct test1* t, char* s) -{ - strcpy(t->string, s); -} - -struct test1* -struct_make_struct(char b, short s, int i, long long ll, float f, double d) -{ - static struct test1 t; - memset(&t, 0, sizeof(t)); - t.b = b; - t.s = s; - t.i = i; - t.j = ll; - t.f = f; - t.d = d; - return &t; -} - -typedef int (*add_cb)(int a1, int a2); -typedef int (*sub_cb)(int a1, int a2); -struct test2 { - add_cb add_callback; - sub_cb sub_callback; -}; - -int -struct_call_add_cb(struct test2* t, int a1, int a2) -{ - return t->add_callback(a1, a2); -} - -int -struct_call_sub_cb(struct test2* t, int a1, int a2) -{ - return t->sub_callback(a1, a2); -} - - -struct struct_with_array* -struct_make_struct_with_array(int a_0, int a_1, int a_2, int a_3, int a_4) -{ - static struct struct_with_array s; - - memset(&s, 0, sizeof(s)); - - s.a[0] = a_0; - s.a[1] = a_1; - s.a[2] = a_2; - s.a[3] = a_3; - s.a[4] = a_4; - - return &s; - -} - -struct s8s32 { - char s8; - int s32; -}; - -struct s8s32 -struct_return_s8s32() -{ - struct s8s32 s; - s.s8 = 0x7f; - s.s32 = 0x12345678; - - return s; -} - -struct s8s32 -struct_s8s32_set(char s8, int s32) -{ - struct s8s32 s; - - s.s8 = s8; - s.s32 = s32; - - return s; -} - -int -struct_s8s32_get_s8(struct s8s32 s) -{ - return s.s8; -} - -int -struct_s8s32_get_s32(struct s8s32 s) -{ - return s.s32; -} - -struct s8s32 -struct_s8s32_ret_s8s32(struct s8s32 s) -{ - return s; -} - -// Pass a struct and an int arg, ensure the int arg is passed correctly -int -struct_s8s32_s32_ret_s32(struct s8s32 s, int s32) -{ - return s32; -} - -// Pass a struct and a long long arg, ensure the long long arg is passed correctly -long long -struct_s8s32_s64_ret_s64(struct s8s32 s, long long s64) -{ - return s64; -} - -// Pass a struct and a long long arg, ensure the long long arg is passed correctly -int -struct_s32_ptr_s32_s8s32_ret_s32(int s32a, void *ptr, int s32b, struct s8s32 s) -{ - if (ptr != NULL) *(struct s8s32 *) ptr = s; - return s.s32; -} - -// Pass a char *, copy into buffer length struct -struct struct_string { - char *bytes; - int len; -}; - -struct struct_string -struct_varargs_ret_struct_string(int len, ...) -{ - struct struct_string ss; - va_list vl; - char* cp = NULL; - - va_start(vl, len); - - ss.len = len; - ss.bytes = va_arg(vl, char *); - if (ss.bytes != NULL) { - cp = malloc(strlen(ss.bytes) + 1); - strcpy(cp, ss.bytes); - ss.bytes = cp; - } - - va_end(vl); - - return ss; -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/UnionTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/UnionTest.c deleted file mode 100644 index 0929a31..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/UnionTest.c +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - -#include -#include -#include -#include -#include - -typedef char s8; -typedef short s16; -typedef int s32; -typedef long long s64; -typedef float f32; -typedef double f64; - -typedef union union_test { - char b; - short s; - int i; - long long j; - long l; - float f; - double d; - s8 a[10]; -} union_test_t; - -#define T(x, type) \ - type union_align_##type(union_test_t* u) { return u->x; } \ - union_test_t* union_make_union_with_##type(type value) { static union_test_t u; u.x = value; return &u; } - -T(b, s8); -T(s, s16); -T(i, s32); -T(j, s64); -T(f, f32); -T(d, f64); -T(l, long); - -unsigned int union_size() { return sizeof(union_test_t); } diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/VariadicTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/VariadicTest.c deleted file mode 100644 index fea6c3b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/libtest/VariadicTest.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - -#include -#include -#include -#include -#include - -typedef int8_t s8; -typedef uint8_t u8; -typedef int16_t s16; -typedef uint16_t u16; -typedef int32_t s32; -typedef uint32_t u32; -typedef int64_t s64; -typedef uint64_t u64; -typedef signed long sL; -typedef unsigned long uL; -typedef float F; -typedef double D; - -void pack_varargs(s64* buf, const char* fmt, ...) -{ - va_list ap; - int c; - double d; - va_start(ap, fmt); - while ((c = *fmt++)) { - switch (c) { - case 'c': - case 's': - case 'i': - *buf++ = va_arg(ap, s32); - break; - case 'l': - *buf++ = va_arg(ap, long); - break; - case 'j': - *buf++ = va_arg(ap, s64); - break; - case 'f': - case 'd': - d = va_arg(ap, double); - memcpy(buf++, &d, sizeof(d)); - break; - case 'C': - case 'S': - case 'I': - *buf++ = va_arg(ap, u32); - break; - case 'L': - *buf++ = va_arg(ap, unsigned long); - break; - } - } - va_end(ap); -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/LICENSE.SPECS b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/LICENSE.SPECS deleted file mode 100644 index 561dd8c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/LICENSE.SPECS +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2008-2014 Ruby-FFI contributors - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/async_callback_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/async_callback_spec.rb deleted file mode 100644 index 87950cc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/async_callback_spec.rb +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -describe "async callback" do - module LibTest - extend FFI::Library - ffi_lib TestLibrary::PATH - AsyncIntCallback = callback [ :int ], :void - - @blocking = true - attach_function :testAsyncCallback, [ AsyncIntCallback, :int ], :void - end - - it ":int (0x7fffffff) argument" do - v = 0xdeadbeef - called = false - cb = Proc.new {|i| v = i; called = true } - LibTest.testAsyncCallback(cb, 0x7fffffff) - expect(called).to be true - expect(v).to eq(0x7fffffff) - end - - it "called a second time" do - v = 0xdeadbeef - called = false - cb = Proc.new {|i| v = i; called = true } - LibTest.testAsyncCallback(cb, 0x7fffffff) - expect(called).to be true - expect(v).to eq(0x7fffffff) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/bool_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/bool_spec.rb deleted file mode 100644 index 6cd1d6f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/bool_spec.rb +++ /dev/null @@ -1,32 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -describe "Function with primitive boolean arguments and return values" do - module LibTest - extend FFI::Library - ffi_lib TestLibrary::PATH - attach_function :bool_return_true, [ ], :bool - attach_function :bool_return_false, [ ], :bool - attach_function :bool_return_val, [ :bool ], :bool - attach_function :bool_reverse_val, [ :bool ], :bool - end - - it "bools" do - expect(LibTest.bool_return_true).to be true - expect(LibTest.bool_return_false).to be false - - expect(LibTest.bool_return_val(true)).to be true - expect(LibTest.bool_return_val(false)).to be false - - expect(LibTest.bool_reverse_val(true)).to be false - expect(LibTest.bool_reverse_val(false)).to be true - end - - it "raise error on invalid types" do - expect { LibTest.bool_return_val(nil) }.to raise_error(::TypeError) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/buffer_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/buffer_spec.rb deleted file mode 100644 index 5f22a62..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/buffer_spec.rb +++ /dev/null @@ -1,279 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -describe "Buffer#total" do - [1,2,3].each do |i| - { :char => 1, :uchar => 1, :short => 2, :ushort => 2, :int => 4, - :uint => 4, :long => FFI::Type::LONG.size, :ulong => FFI::Type::ULONG.size, - :long_long => 8, :ulong_long => 8, :float => 4, :double => 8 - }.each_pair do |t, s| - - it "Buffer.alloc_in(#{t}, #{i}).total == #{i * s}" do - expect(FFI::Buffer.alloc_in(t, i).total).to eq(i * s) - end - - it "Buffer.alloc_out(#{t}, #{i}).total == #{i * s}" do - expect(FFI::Buffer.alloc_out(t, i).total).to eq(i * s) - end - - it "Buffer.alloc_inout(#{t}, #{i}).total == #{i * s}" do - expect(FFI::Buffer.alloc_inout(t, i).total).to eq(i * s) - end - end - end -end - -describe "Buffer#put_char" do - bufsize = 4 - (0..127).each do |i| - (0..bufsize-1).each do |offset| - it "put_char(#{offset}, #{i}).get_char(#{offset}) == #{i}" do - expect(FFI::Buffer.alloc_in(bufsize).put_char(offset, i).get_char(offset)).to eq(i) - end - end - end -end - -describe "Buffer#put_uchar" do - bufsize = 4 - (0..255).each do |i| - (0..bufsize-1).each do |offset| - it "Buffer.put_uchar(#{offset}, #{i}).get_uchar(#{offset}) == #{i}" do - expect(FFI::Buffer.alloc_in(bufsize).put_uchar(offset, i).get_uchar(offset)).to eq(i) - end - end - end -end - -describe "Buffer#put_short" do - bufsize = 4 - [0, 1, 128, 32767].each do |i| - (0..bufsize-2).each do |offset| - it "put_short(#{offset}, #{i}).get_short(#{offset}) == #{i}" do - expect(FFI::Buffer.alloc_in(bufsize).put_short(offset, i).get_short(offset)).to eq(i) - end - end - end -end - -describe "Buffer#put_ushort" do - bufsize = 4 - [ 0, 1, 128, 32767, 65535, 0xfee1, 0xdead, 0xbeef, 0xcafe ].each do |i| - (0..bufsize-2).each do |offset| - it "put_ushort(#{offset}, #{i}).get_ushort(#{offset}) == #{i}" do - expect(FFI::Buffer.alloc_in(bufsize).put_ushort(offset, i).get_ushort(offset)).to eq(i) - end - end - end -end - -describe "Buffer#put_int" do - bufsize = 8 - [0, 1, 128, 32767, 0x7ffffff ].each do |i| - (0..bufsize-4).each do |offset| - it "put_int(#{offset}, #{i}).get_int(#{offset}) == #{i}" do - expect(FFI::Buffer.alloc_in(bufsize).put_int(offset, i).get_int(offset)).to eq(i) - end - end - end -end - -describe "Buffer#put_uint" do - bufsize = 8 - [ 0, 1, 128, 32767, 65535, 0xfee1dead, 0xcafebabe, 0xffffffff ].each do |i| - (0..bufsize-4).each do |offset| - it "put_uint(#{offset}, #{i}).get_uint(#{offset}) == #{i}" do - expect(FFI::Buffer.alloc_in(bufsize).put_uint(offset, i).get_uint(offset)).to eq(i) - end - end - end -end - -describe "Buffer#put_long" do - bufsize = 16 - [0, 1, 128, 32767, 0x7ffffff ].each do |i| - (0..bufsize-FFI::Type::LONG.size).each do |offset| - it "put_long(#{offset}, #{i}).get_long(#{offset}) == #{i}" do - expect(FFI::Buffer.alloc_in(bufsize).put_long(offset, i).get_long(offset)).to eq(i) - end - end - end -end - -describe "Buffer#put_ulong" do - bufsize = 16 - [ 0, 1, 128, 32767, 65535, 0xfee1dead, 0xcafebabe, 0xffffffff ].each do |i| - (0..bufsize-FFI::Type::LONG.size).each do |offset| - it "put_ulong(#{offset}, #{i}).get_ulong(#{offset}) == #{i}" do - expect(FFI::Buffer.alloc_in(bufsize).put_ulong(offset, i).get_ulong(offset)).to eq(i) - end - end - end -end - -describe "Buffer#put_long_long" do - bufsize = 16 - [0, 1, 128, 32767, 0x7ffffffffffffff ].each do |i| - (0..bufsize-8).each do |offset| - it "put_long_long(#{offset}, #{i}).get_long_long(#{offset}) == #{i}" do - expect(FFI::Buffer.alloc_in(bufsize).put_long_long(offset, i).get_long_long(offset)).to eq(i) - end - end - end -end - -describe "Buffer#put_ulong_long" do - bufsize = 16 - [ 0, 1, 128, 32767, 65535, 0xdeadcafebabe, 0x7fffffffffffffff ].each do |i| - (0..bufsize-8).each do |offset| - it "put_ulong_long(#{offset}, #{i}).get_ulong_long(#{offset}) == #{i}" do - expect(FFI::Buffer.alloc_in(bufsize).put_ulong_long(offset, i).get_ulong_long(offset)).to eq(i) - end - end - end -end - -describe "Reading/Writing binary strings" do - it "Buffer#put_bytes" do - str = "hello\0world" - buf = FFI::Buffer.new 1024 - buf.put_bytes(0, str); - s2 = buf.get_bytes(0, 11); - expect(s2).to eq(str) - end - - it "Buffer#put_bytes with index and length" do - str = "hello\0world" - buf = FFI::Buffer.new 1024 - buf.put_bytes(0, str, 5, 6); - s2 = buf.get_bytes(0, 6); - expect(s2).to eq(str[5..-1]) - end - - it "Buffer#put_bytes with only index" do - str = "hello\0world" - buf = FFI::Buffer.new 1024 - buf.put_bytes(0, str, 5); - s2 = buf.get_bytes(0, 6); - expect(s2).to eq(str[5..-1]) - end - - it "Buffer#put_bytes with index > str.length" do - str = "hello\0world" - buf = FFI::Buffer.new 1024 - expect { buf.put_bytes(0, str, 12); }.to raise_error - end - - it "Buffer#put_bytes with length > str.length" do - str = "hello\0world" - buf = FFI::Buffer.new 1024 - expect { buf.put_bytes(0, str, 0, 12); }.to raise_error - end - - it "Buffer#put_bytes with negative index" do - str = "hello\0world" - buf = FFI::Buffer.new 1024 - expect { buf.put_bytes(0, str, -1, 12); }.to raise_error - end - - it "Buffer#write_bytes" do - str = "hello\0world" - buf = FFI::Buffer.new 1024 - buf.write_bytes(str) - s2 = buf.get_bytes(0, 11) - expect(s2).to eq(str) - end - - it "Buffer#write_bytes with index and length" do - str = "hello\0world" - buf = FFI::Buffer.new 1024 - buf.write_bytes(str, 5, 6) - s2 = buf.get_bytes(0, 6) - expect(s2).to eq(str[5..-1]) - end - - it "Buffer#write_bytes with only index" do - str = "hello\0world" - buf = FFI::Buffer.new 1024 - buf.write_bytes(str, 5) - s2 = buf.get_bytes(0, 6) - expect(s2).to eq(str[5..-1]) - end - - it "Buffer#write_bytes with index > str.length" do - str = "hello\0world" - buf = FFI::Buffer.new 1024 - expect { buf.write_bytes(str, 12) }.to raise_error - end - - it "Buffer#put_bytes with length > str.length" do - str = "hello\0world" - buf = FFI::Buffer.new 1024 - expect { buf.put_bytes(0, str, 0, 12) }.to raise_error - end - - it "Buffer#write_bytes with negative index" do - str = "hello\0world" - buf = FFI::Buffer.new 1024 - expect { buf.write_bytes(str, -1, 12) }.to raise_error - end -end - -describe "Reading/Writing ascii strings" do - it "Buffer#put_string with string containing zero byte" do - str = "hello\0world" - buf = FFI::Buffer.new 1024 - buf.put_string(0, str); - s2 = buf.get_bytes(0, 11); - expect(s2).to eq(str) - end - - it "Buffer#get_string with string containing zero byte" do - str = "hello\0world" - buf = FFI::Buffer.new 1024 - buf.put_bytes(0, str); - s2 = buf.get_string(0, 11); - expect(s2).to eq("hello") - end - - it "Buffer#put_string without length should NUL terminate" do - str = "hello" - buf = FFI::Buffer.new 1024 - buf.put_string(0, str); - s2 = buf.get_bytes(0, 6); - expect(s2).to eq("hello\0") - end -end - -describe "Buffer#put_pointer" do - it "put_pointer(0, p).get_pointer(0) == p" do - p = FFI::MemoryPointer.new :ulong_long - p.put_uint(0, 0xdeadbeef) - buf = FFI::Buffer.alloc_inout 8 - p2 = buf.put_pointer(0, p).get_pointer(0) - expect(p2).not_to be_nil - expect(p2).to eq(p) - expect(p2.get_uint(0)).to eq(0xdeadbeef) - end -end - -describe "Buffer#size" do - it "should return size" do - buf = FFI::Buffer.new 14 - expect(buf.size).to eq(14) - end -end - -describe "Buffer#initialize" do - it "with block should execute block" do - block_executed = false - FFI::Buffer.new(:pointer) do |ptr| - block_executed = true - end - expect(block_executed).to be true - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/callback_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/callback_spec.rb deleted file mode 100644 index bc9b55a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/callback_spec.rb +++ /dev/null @@ -1,773 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -describe "Callback" do -# module LibC -# extend FFI::Library -# callback :qsort_cmp, [ :pointer, :pointer ], :int -# attach_function :qsort, [ :pointer, :int, :int, :qsort_cmp ], :int -# end -# it "arguments get passed correctly" do -# p = MemoryPointer.new(:int, 2) -# p.put_array_of_int32(0, [ 1 , 2 ]) -# args = [] -# cmp = proc do |p1, p2| args.push(p1.get_int(0)); args.push(p2.get_int(0)); 0; end -# # this is a bit dodgey, as it relies on qsort passing the args in order -# LibC.qsort(p, 2, 4, cmp) -# args.should == [ 1, 2 ] -# end -# -# it "Block can be substituted for Callback as last argument" do -# p = MemoryPointer.new(:int, 2) -# p.put_array_of_int32(0, [ 1 , 2 ]) -# args = [] -# # this is a bit dodgey, as it relies on qsort passing the args in order -# LibC.qsort(p, 2, 4) do |p1, p2| -# args.push(p1.get_int(0)) -# args.push(p2.get_int(0)) -# 0 -# end -# args.should == [ 1, 2 ] -# end - module LibTest - extend FFI::Library - ffi_lib TestLibrary::PATH - class S8F32S32 < FFI::Struct - layout :s8, :char, :f32, :float, :s32, :int - end - - callback :cbVrS8, [ ], :char - callback :cbVrU8, [ ], :uchar - callback :cbVrS16, [ ], :short - callback :cbVrU16, [ ], :ushort - callback :cbVrS32, [ ], :int - callback :cbVrU32, [ ], :uint - callback :cbVrL, [ ], :long - callback :cbVrUL, [ ], :ulong - callback :cbVrS64, [ ], :long_long - callback :cbVrU64, [ ], :ulong_long - callback :cbVrP, [], :pointer - callback :cbVrZ, [], :bool - callback :cbCrV, [ :char ], :void - callback :cbSrV, [ :short ], :void - callback :cbIrV, [ :int ], :void - callback :cbLrV, [ :long ], :void - callback :cbULrV, [ :ulong ], :void - callback :cbLrV, [ :long_long ], :void - callback :cbVrT, [ ], S8F32S32.by_value - callback :cbTrV, [ S8F32S32.by_value ], :void - callback :cbYrV, [ S8F32S32.ptr ], :void - callback :cbVrY, [ ], S8F32S32.ptr - - attach_function :testCallbackVrS8, :testClosureVrB, [ :cbVrS8 ], :char - attach_function :testCallbackVrU8, :testClosureVrB, [ :cbVrU8 ], :uchar - attach_function :testCallbackVrS16, :testClosureVrS, [ :cbVrS16 ], :short - attach_function :testCallbackVrU16, :testClosureVrS, [ :cbVrU16 ], :ushort - attach_function :testCallbackVrS32, :testClosureVrI, [ :cbVrS32 ], :int - attach_function :testCallbackVrU32, :testClosureVrI, [ :cbVrU32 ], :uint - attach_function :testCallbackVrL, :testClosureVrL, [ :cbVrL ], :long - attach_function :testCallbackVrZ, :testClosureVrZ, [ :cbVrZ ], :bool - attach_function :testCallbackVrUL, :testClosureVrL, [ :cbVrUL ], :ulong - attach_function :testCallbackVrS64, :testClosureVrLL, [ :cbVrS64 ], :long_long - attach_function :testCallbackVrU64, :testClosureVrLL, [ :cbVrU64 ], :ulong_long - attach_function :testCallbackVrP, :testClosureVrP, [ :cbVrP ], :pointer - attach_function :testCallbackVrY, :testClosureVrP, [ :cbVrY ], S8F32S32.ptr - attach_function :testCallbackVrT, :testClosureVrT, [ :cbVrT ], S8F32S32.by_value - attach_function :testCallbackTrV, :testClosureTrV, [ :cbTrV, S8F32S32.ptr ], :void - attach_variable :cbVrS8, :gvar_pointer, :cbVrS8 - attach_variable :pVrS8, :gvar_pointer, :pointer - attach_function :testGVarCallbackVrS8, :testClosureVrB, [ :pointer ], :char - attach_function :testOptionalCallbackCrV, :testOptionalClosureBrV, [ :cbCrV, :char ], :void - - end - - it "returning :char (0)" do - expect(LibTest.testCallbackVrS8 { 0 }).to eq(0) - end - - it "returning :char (127)" do - expect(LibTest.testCallbackVrS8 { 127 }).to eq(127) - end - - it "returning :char (-128)" do - expect(LibTest.testCallbackVrS8 { -128 }).to eq(-128) - end - # test wrap around - it "returning :char (128)" do - expect(LibTest.testCallbackVrS8 { 128 }).to eq(-128) - end - - it "returning :char (255)" do - expect(LibTest.testCallbackVrS8 { 0xff }).to eq(-1) - end - - it "returning :uchar (0)" do - expect(LibTest.testCallbackVrU8 { 0 }).to eq(0) - end - - it "returning :uchar (0xff)" do - expect(LibTest.testCallbackVrU8 { 0xff }).to eq(0xff) - end - - it "returning :uchar (-1)" do - expect(LibTest.testCallbackVrU8 { -1 }).to eq(0xff) - end - - it "returning :uchar (128)" do - expect(LibTest.testCallbackVrU8 { 128 }).to eq(128) - end - - it "returning :uchar (-128)" do - expect(LibTest.testCallbackVrU8 { -128 }).to eq(128) - end - - it "returning :short (0)" do - expect(LibTest.testCallbackVrS16 { 0 }).to eq(0) - end - - it "returning :short (0x7fff)" do - expect(LibTest.testCallbackVrS16 { 0x7fff }).to eq(0x7fff) - end - # test wrap around - it "returning :short (0x8000)" do - expect(LibTest.testCallbackVrS16 { 0x8000 }).to eq(-0x8000) - end - - it "returning :short (0xffff)" do - expect(LibTest.testCallbackVrS16 { 0xffff }).to eq(-1) - end - - it "returning :ushort (0)" do - expect(LibTest.testCallbackVrU16 { 0 }).to eq(0) - end - - it "returning :ushort (0x7fff)" do - expect(LibTest.testCallbackVrU16 { 0x7fff }).to eq(0x7fff) - end - - it "returning :ushort (0x8000)" do - expect(LibTest.testCallbackVrU16 { 0x8000 }).to eq(0x8000) - end - - it "returning :ushort (0xffff)" do - expect(LibTest.testCallbackVrU16 { 0xffff }).to eq(0xffff) - end - - it "returning :ushort (-1)" do - expect(LibTest.testCallbackVrU16 { -1 }).to eq(0xffff) - end - - it "returning :int (0)" do - expect(LibTest.testCallbackVrS32 { 0 }).to eq(0) - end - - it "returning :int (0x7fffffff)" do - expect(LibTest.testCallbackVrS32 { 0x7fffffff }).to eq(0x7fffffff) - end - # test wrap around - it "returning :int (-0x80000000)" do - expect(LibTest.testCallbackVrS32 { -0x80000000 }).to eq(-0x80000000) - end - - it "returning :int (-1)" do - expect(LibTest.testCallbackVrS32 { -1 }).to eq(-1) - end - - it "returning :uint (0)" do - expect(LibTest.testCallbackVrU32 { 0 }).to eq(0) - end - - it "returning :uint (0x7fffffff)" do - expect(LibTest.testCallbackVrU32 { 0x7fffffff }).to eq(0x7fffffff) - end - # test wrap around - it "returning :uint (0x80000000)" do - expect(LibTest.testCallbackVrU32 { 0x80000000 }).to eq(0x80000000) - end - - it "returning :uint (0xffffffff)" do - expect(LibTest.testCallbackVrU32 { 0xffffffff }).to eq(0xffffffff) - end - - it "returning :uint (-1)" do - expect(LibTest.testCallbackVrU32 { -1 }).to eq(0xffffffff) - end - - it "returning :long (0)" do - expect(LibTest.testCallbackVrL { 0 }).to eq(0) - end - - it "returning :long (0x7fffffff)" do - expect(LibTest.testCallbackVrL { 0x7fffffff }).to eq(0x7fffffff) - end - # test wrap around - it "returning :long (-0x80000000)" do - expect(LibTest.testCallbackVrL { -0x80000000 }).to eq(-0x80000000) - end - - it "returning :long (-1)" do - expect(LibTest.testCallbackVrL { -1 }).to eq(-1) - end - - it "returning :ulong (0)" do - expect(LibTest.testCallbackVrUL { 0 }).to eq(0) - end - - it "returning :ulong (0x7fffffff)" do - expect(LibTest.testCallbackVrUL { 0x7fffffff }).to eq(0x7fffffff) - end - # test wrap around - it "returning :ulong (0x80000000)" do - expect(LibTest.testCallbackVrUL { 0x80000000 }).to eq(0x80000000) - end - - it "returning :ulong (0xffffffff)" do - expect(LibTest.testCallbackVrUL { 0xffffffff }).to eq(0xffffffff) - end - - it "Callback returning :ulong (-1)" do - if FFI::Platform::LONG_SIZE == 32 - expect(LibTest.testCallbackVrUL { -1 }).to eq(0xffffffff) - else - expect(LibTest.testCallbackVrUL { -1 }).to eq(0xffffffffffffffff) - end - end - - it "returning :long_long (0)" do - expect(LibTest.testCallbackVrS64 { 0 }).to eq(0) - end - - it "returning :long_long (0x7fffffffffffffff)" do - expect(LibTest.testCallbackVrS64 { 0x7fffffffffffffff }).to eq(0x7fffffffffffffff) - end - # test wrap around - it "returning :long_long (-0x8000000000000000)" do - expect(LibTest.testCallbackVrS64 { -0x8000000000000000 }).to eq(-0x8000000000000000) - end - - it "returning :long_long (-1)" do - expect(LibTest.testCallbackVrS64 { -1 }).to eq(-1) - end - - it "returning bool" do - expect(LibTest.testCallbackVrZ { true }).to be true - end - - it "returning :pointer (nil)" do - expect(LibTest.testCallbackVrP { nil }).to be_null - end - - it "returning :pointer (MemoryPointer)" do - p = FFI::MemoryPointer.new :long - expect(LibTest.testCallbackVrP { p }).to eq(p) - end - - it "returning struct by value" do - s = LibTest::S8F32S32.new - s[:s8] = 0x12 - s[:s32] = 0x1eefbeef - s[:f32] = 1.234567 - ret = LibTest.testCallbackVrT { s } - expect(ret[:s8]).to eq(s[:s8]) - expect(ret[:f32]).to eq(s[:f32]) - expect(ret[:s32]).to eq(s[:s32]) - - end - - it "struct by value parameter" do - s = LibTest::S8F32S32.new - s[:s8] = 0x12 - s[:s32] = 0x1eefbeef - s[:f32] = 1.234567 - s2 = LibTest::S8F32S32.new - - LibTest.testCallbackTrV(s) do |struct| - s2[:s8] = struct[:s8] - s2[:f32] = struct[:f32] - s2[:s32] = struct[:s32] - end - - expect(s2[:s8]).to eql 0x12 - expect(s2[:s32]).to eql 0x1eefbeef - expect(s2[:f32]).to be_within(0.0000001).of 1.234567 - end - - - it "global variable" do - proc = Proc.new { 0x1e } - LibTest.cbVrS8 = proc - expect(LibTest.testGVarCallbackVrS8(LibTest.pVrS8)).to eq(0x1e) - end - - describe "When the callback is considered optional by the underlying library" do - it "should handle receiving 'nil' in place of the closure" do - expect(LibTest.testOptionalCallbackCrV(nil, 13)).to be_nil - end - end - - describe 'when inlined' do - it 'could be anonymous' do - module LibTest - extend FFI::Library - ffi_lib TestLibrary::PATH - attach_function :testAnonymousCallbackVrS8, :testClosureVrB, [ callback([ ], :char) ], :char - end - expect(LibTest.testAnonymousCallbackVrS8 { 0 }).to eq(0) - end - end - - describe "as return value" do - - it "should not blow up when a callback is defined that returns a callback" do - expect(module LibTest - extend FFI::Library - ffi_lib TestLibrary::PATH - callback :cb_return_type_1, [ :short ], :short - callback :cb_lookup_1, [ :short ], :cb_return_type_1 - attach_function :testReturnsCallback_1, :testReturnsClosure, [ :cb_lookup_1, :short ], :cb_return_type_1 - end).to be_an_instance_of FFI::Function - end - - it "should return a callback" do - module LibTest - extend FFI::Library - ffi_lib TestLibrary::PATH - callback :cb_return_type, [ :int ], :int - callback :cb_lookup, [ ], :cb_return_type - attach_function :testReturnsCallback, :testReturnsClosure, [ :cb_lookup, :int ], :int - end - - lookup_proc_called = false - return_proc_called = false - - return_proc = Proc.new do |a| - return_proc_called = true - a * 2 - end - lookup_proc = Proc.new do - lookup_proc_called = true - return_proc - end - - val = LibTest.testReturnsCallback(lookup_proc, 0x1234) - expect(val).to eq(0x1234 * 2) - expect(lookup_proc_called).to be true - expect(return_proc_called).to be true - end - - it "should return a method callback" do - module LibTest - extend FFI::Library - ffi_lib TestLibrary::PATH - callback :cb_return_type, [ :int ], :int - callback :cb_lookup, [ ], :cb_return_type - attach_function :testReturnsCallback_2, :testReturnsClosure, [ :cb_lookup, :int ], :int - end - module MethodCallback - def self.lookup - method(:perform) - end - def self.perform num - num * 2 - end - end - - expect(LibTest.testReturnsCallback_2(MethodCallback.method(:lookup), 0x1234)).to eq(0x2468) - end - - it 'should not blow up when a callback takes a callback as argument' do - expect(module LibTest - extend FFI::Library - ffi_lib TestLibrary::PATH - callback :cb_argument, [ :int ], :int - callback :cb_with_cb_argument, [ :cb_argument, :int ], :int - attach_function :testCallbackAsArgument_2, :testArgumentClosure, [ :cb_with_cb_argument, :int ], :int - end).to be_an_instance_of FFI::Function - end - it 'should be able to use the callback argument' do - module LibTest - extend FFI::Library - ffi_lib TestLibrary::PATH - callback :cb_argument, [ :int ], :int - callback :cb_with_cb_argument, [ :cb_argument, :int ], :int - attach_function :testCallbackAsArgument, :testArgumentClosure, [ :cb_with_cb_argument, :cb_argument, :int ], :int - end - callback_arg_called = false - callback_with_callback_arg_called = false - callback_arg = Proc.new do |val| - callback_arg_called = true - val * 2 - end - callback_with_callback_arg = Proc.new do |cb, val| - callback_with_callback_arg_called = true - cb.call(val) - end - val = LibTest.testCallbackAsArgument(callback_with_callback_arg, callback_arg, 0xff1) - expect(val).to eq(0xff1 * 2) - expect(callback_arg_called).to be true - expect(callback_with_callback_arg_called).to be true - end - it 'function returns callable object' do - module LibTest - extend FFI::Library - ffi_lib TestLibrary::PATH - callback :funcptr, [ :int ], :int - attach_function :testReturnsFunctionPointer, [ ], :funcptr - end - f = LibTest.testReturnsFunctionPointer - expect(f.call(3)).to eq(6) - end - end - -end - - -describe "Callback with " do - # - # Test callbacks that take an argument, returning void - # - module LibTest - extend FFI::Library - ffi_lib TestLibrary::PATH - - class S8F32S32 < FFI::Struct - layout :s8, :char, :f32, :float, :s32, :int - end - - callback :cbS8rV, [ :char ], :void - callback :cbU8rV, [ :uchar ], :void - callback :cbS16rV, [ :short ], :void - callback :cbU16rV, [ :ushort ], :void - - callback :cbZrV, [ :bool ], :void - callback :cbS32rV, [ :int ], :void - callback :cbU32rV, [ :uint ], :void - - callback :cbLrV, [ :long ], :void - callback :cbULrV, [ :ulong ], :void - callback :cbArV, [ :string ], :void - callback :cbPrV, [ :pointer], :void - callback :cbYrV, [ S8F32S32.ptr ], :void - - callback :cbS64rV, [ :long_long ], :void - attach_function :testCallbackCrV, :testClosureBrV, [ :cbS8rV, :char ], :void - attach_function :testCallbackU8rV, :testClosureBrV, [ :cbU8rV, :uchar ], :void - attach_function :testCallbackSrV, :testClosureSrV, [ :cbS16rV, :short ], :void - attach_function :testCallbackU16rV, :testClosureSrV, [ :cbU16rV, :ushort ], :void - attach_function :testCallbackZrV, :testClosureZrV, [ :cbZrV, :bool ], :void - attach_function :testCallbackIrV, :testClosureIrV, [ :cbS32rV, :int ], :void - attach_function :testCallbackU32rV, :testClosureIrV, [ :cbU32rV, :uint ], :void - - attach_function :testCallbackLrV, :testClosureLrV, [ :cbLrV, :long ], :void - attach_function :testCallbackULrV, :testClosureULrV, [ :cbULrV, :ulong ], :void - - attach_function :testCallbackLLrV, :testClosureLLrV, [ :cbS64rV, :long_long ], :void - attach_function :testCallbackArV, :testClosurePrV, [ :cbArV, :string ], :void - attach_function :testCallbackPrV, :testClosurePrV, [ :cbPrV, :pointer], :void - attach_function :testCallbackYrV, :testClosurePrV, [ :cbYrV, S8F32S32.in ], :void - end - - it "function with Callback plus another arg should raise error if no arg given" do - expect { LibTest.testCallbackCrV { |*a| }}.to raise_error - end - - it ":char (0) argument" do - v = 0xdeadbeef - LibTest.testCallbackCrV(0) { |i| v = i } - expect(v).to eq(0) - end - - it ":char (127) argument" do - v = 0xdeadbeef - LibTest.testCallbackCrV(127) { |i| v = i } - expect(v).to eq(127) - end - - it ":char (-128) argument" do - v = 0xdeadbeef - LibTest.testCallbackCrV(-128) { |i| v = i } - expect(v).to eq(-128) - end - - it ":char (-1) argument" do - v = 0xdeadbeef - LibTest.testCallbackCrV(-1) { |i| v = i } - expect(v).to eq(-1) - end - - it ":uchar (0) argument" do - v = 0xdeadbeef - LibTest.testCallbackU8rV(0) { |i| v = i } - expect(v).to eq(0) - end - - it ":uchar (127) argument" do - v = 0xdeadbeef - LibTest.testCallbackU8rV(127) { |i| v = i } - expect(v).to eq(127) - end - - it ":uchar (128) argument" do - v = 0xdeadbeef - LibTest.testCallbackU8rV(128) { |i| v = i } - expect(v).to eq(128) - end - - it ":uchar (255) argument" do - v = 0xdeadbeef - LibTest.testCallbackU8rV(255) { |i| v = i } - expect(v).to eq(255) - end - - it ":short (0) argument" do - v = 0xdeadbeef - LibTest.testCallbackSrV(0) { |i| v = i } - expect(v).to eq(0) - end - - it ":short (0x7fff) argument" do - v = 0xdeadbeef - LibTest.testCallbackSrV(0x7fff) { |i| v = i } - expect(v).to eq(0x7fff) - end - - it ":short (-0x8000) argument" do - v = 0xdeadbeef - LibTest.testCallbackSrV(-0x8000) { |i| v = i } - expect(v).to eq(-0x8000) - end - - it ":short (-1) argument" do - v = 0xdeadbeef - LibTest.testCallbackSrV(-1) { |i| v = i } - expect(v).to eq(-1) - end - - it ":ushort (0) argument" do - v = 0xdeadbeef - LibTest.testCallbackU16rV(0) { |i| v = i } - expect(v).to eq(0) - end - - it ":ushort (0x7fff) argument" do - v = 0xdeadbeef - LibTest.testCallbackU16rV(0x7fff) { |i| v = i } - expect(v).to eq(0x7fff) - end - - it ":ushort (0x8000) argument" do - v = 0xdeadbeef - LibTest.testCallbackU16rV(0x8000) { |i| v = i } - expect(v).to eq(0x8000) - end - - it ":ushort (0xffff) argument" do - v = 0xdeadbeef - LibTest.testCallbackU16rV(0xffff) { |i| v = i } - expect(v).to eq(0xffff) - end - - it ":bool (true) argument" do - v = false - LibTest.testCallbackZrV(true) { |i| v = i } - expect(v).to be true - end - - it ":int (0) argument" do - v = 0xdeadbeef - LibTest.testCallbackIrV(0) { |i| v = i } - expect(v).to eq(0) - end - - it ":int (0x7fffffff) argument" do - v = 0xdeadbeef - LibTest.testCallbackIrV(0x7fffffff) { |i| v = i } - expect(v).to eq(0x7fffffff) - end - - it ":int (-0x80000000) argument" do - v = 0xdeadbeef - LibTest.testCallbackIrV(-0x80000000) { |i| v = i } - expect(v).to eq(-0x80000000) - end - - it ":int (-1) argument" do - v = 0xdeadbeef - LibTest.testCallbackIrV(-1) { |i| v = i } - expect(v).to eq(-1) - end - - it ":uint (0) argument" do - v = 0xdeadbeef - LibTest.testCallbackU32rV(0) { |i| v = i } - expect(v).to eq(0) - end - - it ":uint (0x7fffffff) argument" do - v = 0xdeadbeef - LibTest.testCallbackU32rV(0x7fffffff) { |i| v = i } - expect(v).to eq(0x7fffffff) - end - - it ":uint (0x80000000) argument" do - v = 0xdeadbeef - LibTest.testCallbackU32rV(0x80000000) { |i| v = i } - expect(v).to eq(0x80000000) - end - - it ":uint (0xffffffff) argument" do - v = 0xdeadbeef - LibTest.testCallbackU32rV(0xffffffff) { |i| v = i } - expect(v).to eq(0xffffffff) - end - - it ":long (0) argument" do - v = 0xdeadbeef - LibTest.testCallbackLrV(0) { |i| v = i } - expect(v).to eq(0) - end - - it ":long (0x7fffffff) argument" do - v = 0xdeadbeef - LibTest.testCallbackLrV(0x7fffffff) { |i| v = i } - expect(v).to eq(0x7fffffff) - end - - it ":long (-0x80000000) argument" do - v = 0xdeadbeef - LibTest.testCallbackLrV(-0x80000000) { |i| v = i } - expect(v).to eq(-0x80000000) - end - - it ":long (-1) argument" do - v = 0xdeadbeef - LibTest.testCallbackLrV(-1) { |i| v = i } - expect(v).to eq(-1) - end - - it ":ulong (0) argument" do - v = 0xdeadbeef - LibTest.testCallbackULrV(0) { |i| v = i } - expect(v).to eq(0) - end - - it ":ulong (0x7fffffff) argument" do - v = 0xdeadbeef - LibTest.testCallbackULrV(0x7fffffff) { |i| v = i } - expect(v).to eq(0x7fffffff) - end - - it ":ulong (0x80000000) argument" do - v = 0xdeadbeef - LibTest.testCallbackULrV(0x80000000) { |i| v = i } - expect(v).to eq(0x80000000) - end - - it ":ulong (0xffffffff) argument" do - v = 0xdeadbeef - LibTest.testCallbackULrV(0xffffffff) { |i| v = i } - expect(v).to eq(0xffffffff) - end - - it ":long_long (0) argument" do - v = 0xdeadbeef - LibTest.testCallbackLLrV(0) { |i| v = i } - expect(v).to eq(0) - end - - it ":long_long (0x7fffffffffffffff) argument" do - v = 0xdeadbeef - LibTest.testCallbackLLrV(0x7fffffffffffffff) { |i| v = i } - expect(v).to eq(0x7fffffffffffffff) - end - - it ":long_long (-0x8000000000000000) argument" do - v = 0xdeadbeef - LibTest.testCallbackLLrV(-0x8000000000000000) { |i| v = i } - expect(v).to eq(-0x8000000000000000) - end - - it ":long_long (-1) argument" do - v = 0xdeadbeef - LibTest.testCallbackLLrV(-1) { |i| v = i } - expect(v).to eq(-1) - end - - it ":string argument" do - v = nil - LibTest.testCallbackArV("Hello, World") { |i| v = i } - expect(v).to eq("Hello, World") - end - - it ":string (nil) argument" do - v = "Hello, World" - LibTest.testCallbackArV(nil) { |i| v = i } - expect(v).to be_nil - end - - it ":pointer argument" do - v = nil - magic = FFI::Pointer.new(0xdeadbeef) - LibTest.testCallbackPrV(magic) { |i| v = i } - expect(v).to eq(magic) - end - - it ":pointer (nil) argument" do - v = "Hello, World" - LibTest.testCallbackPrV(nil) { |i| v = i } - expect(v).to eq(FFI::Pointer::NULL) - end - - it "struct by reference argument" do - v = nil - magic = LibTest::S8F32S32.new - LibTest.testCallbackYrV(magic) { |i| v = i } - expect(v.class).to eq(magic.class) - expect(v.pointer).to eq(magic.pointer) - end - - it "struct by reference argument with nil value" do - v = LibTest::S8F32S32.new - LibTest.testCallbackYrV(nil) { |i| v = i } - expect(v.is_a?(FFI::Struct)).to be true - expect(v.pointer).to eq(FFI::Pointer::NULL) - end - - it "varargs parameters are rejected" do - expect { - Module.new do - extend FFI::Library - ffi_lib TestLibrary::PATH - callback :cbVrL, [ :varargs ], :long - end - }.to raise_error(ArgumentError) - end - - # - # Test stdcall convention with function and callback. - # This is Windows 32-bit only. - # - if FFI::Platform::OS =~ /windows|cygwin/ && FFI::Platform::ARCH == 'i386' - module LibTestStdcall - extend FFI::Library - ffi_lib TestLibrary::PATH - ffi_convention :stdcall - - callback :cbStdcall, [ :pointer, :long ], :void - attach_function :testCallbackStdcall, 'testClosureStdcall', [ :pointer, :cbStdcall, :long ], :bool - end - - it "stdcall convention" do - v = 0xdeadbeef - po = FFI::MemoryPointer.new :long - pr = proc{|a,i| v = a,i; i } - res = LibTestStdcall.testCallbackStdcall(po, pr, 0x7fffffff) - expect(v).to eq([po, 0x7fffffff]) - expect(res).to be true - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/custom_param_type.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/custom_param_type.rb deleted file mode 100644 index 7d9216b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/custom_param_type.rb +++ /dev/null @@ -1,37 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -describe "functions with custom parameter types" do - before :each do - - Custom_enum = Class.new do - extend FFI::DataConverter - ToNativeMap= { :a => 1, :b => 2 } - FromNativeMap = { 1 => :a, 2 => :b } - - def self.native_type - @native_type_called = true - FFI::Type::INT32 - end - - def self.to_native(val, ctx) - @to_native_called = true - ToNativeMap[val] - end - - def self.from_native(val, ctx) - @from_native_called = true - FromNativeMap[val] - end - def self.native_type_called?; @native_type_called; end - def self.from_native_called?; @from_native_called; end - def self.to_native_called?; @to_native_called; end - end - - # FIXME add tests - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/custom_type_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/custom_type_spec.rb deleted file mode 100644 index d9ce2c1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/custom_type_spec.rb +++ /dev/null @@ -1,74 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -describe "functions with custom types" do - class Custom_enum - extend FFI::DataConverter - ToNativeMap= { :a => 1, :b => 2, :c => 3 } - FromNativeMap = { 1 => :a, 2 => :b, 3 => :c } - - def self.native_type - @native_type_called = true - FFI::Type::INT32 - end - - def self.to_native(val, ctx) - @to_native_called = true - ToNativeMap[val] - end - - def self.from_native(val, ctx) - @from_native_called = true - FromNativeMap[val] - end - def self.native_type_called?; @native_type_called; end - def self.from_native_called?; @from_native_called; end - def self.to_native_called?; @to_native_called; end - end - - it "can attach with custom return type" do - expect do - Module.new do - extend FFI::Library - ffi_lib TestLibrary::PATH - attach_function :ret_s32, [ :int ], Custom_enum - end - end.not_to raise_error - end - - it "should return object of correct type" do - - m = Module.new do - - extend FFI::Library - ffi_lib TestLibrary::PATH - attach_function :ret_s32, [ :int ], Custom_enum - end - - expect(m.ret_s32(1).is_a?(Symbol)).to be true - end - - it "from_native should be called for result" do - m = Module.new do - extend FFI::Library - ffi_lib TestLibrary::PATH - attach_function :ret_s32, [ :int ], Custom_enum - end - m.ret_s32(1) - expect(Custom_enum.from_native_called?).to be true - end - - it "to_native should be called for parameter" do - m = Module.new do - extend FFI::Library - ffi_lib TestLibrary::PATH - attach_function :ret_s32, [ Custom_enum ], :int - end - m.ret_s32(:a) - expect(Custom_enum.to_native_called?).to be true - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/dup_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/dup_spec.rb deleted file mode 100644 index ae6e523..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/dup_spec.rb +++ /dev/null @@ -1,52 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -describe "Pointer#dup" do - it "clone should be independent" do - p1 = FFI::MemoryPointer.new(:char, 1024) - p1.put_string(0, "test123"); - p2 = p1.dup - p1.put_string(0, "deadbeef") - - expect(p2.get_string(0)).to eq("test123") - end - - it "sliced pointer can be cloned" do - p1 = FFI::MemoryPointer.new(:char, 1024) - p1.put_string(0, "test123"); - p2 = p1[1].dup - - # first char will be excised - expect(p2.get_string(0)).to eq("est123") - expect(p1.get_string(0)).to eq("test123") - end - - it "sliced pointer when cloned is independent" do - p1 = FFI::MemoryPointer.new(:char, 1024) - p1.put_string(0, "test123"); - p2 = p1[1].dup - - p1.put_string(0, "deadbeef") - # first char will be excised - expect(p2.get_string(0)).to eq("est123") - end -end - - -describe "Struct#dup" do - it "clone should be independent" do - s = Class.new(FFI::Struct) do - layout :i, :int - end - s1 = s.new - s1[:i] = 0x12345 - s2 = s1.dup - s1[:i] = 0x98765 - expect(s2[:i]).to eq(0x12345) - expect(s1[:i]).to eq(0x98765) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/enum_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/enum_spec.rb deleted file mode 100644 index 55ff13a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/enum_spec.rb +++ /dev/null @@ -1,423 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -module TestEnum0 - extend FFI::Library -end - -module TestEnum1 - extend FFI::Library - ffi_lib TestLibrary::PATH - - enum [:c1, :c2, :c3, :c4] - enum [:c5, 42, :c6, :c7, :c8] - enum [:c9, 42, :c10, :c11, 4242, :c12] - enum [:c13, 42, :c14, 4242, :c15, 424242, :c16, 42424242] - - attach_function :test_untagged_enum, [:int], :int -end - -module TestEnum3 - extend FFI::Library - ffi_lib TestLibrary::PATH - - enum :enum_type1, [:c1, :c2, :c3, :c4] - enum :enum_type2, [:c5, 42, :c6, :c7, :c8] - enum :enum_type3, [:c9, 42, :c10, :c11, 4242, :c12] - enum :enum_type4, [:c13, 42, :c14, 4242, :c15, 424242, :c16, 42424242] - - attach_function :test_tagged_typedef_enum1, [:enum_type1], :enum_type1 - attach_function :test_tagged_typedef_enum2, [:enum_type2], :enum_type2 - attach_function :test_tagged_typedef_enum3, [:enum_type3], :enum_type3 - attach_function :test_tagged_typedef_enum4, [:enum_type4], :enum_type4 -end - -module TestEnum4 - extend FFI::Library - ffi_lib TestLibrary::PATH - - enum [:c1, :c2, :c3, :c4] - enum :enum_type1, [:c5, 0x42, :c6, :c7, :c8] - enum :enum_type2, [:c9, 0x42, :c10, :c11, 0x4242, :c12] - enum :enum_type3, [:c13, 0x42, :c14, 0x4242, :c15, 0x42424242, :c16, 0x4242424242424242] - enum FFI::Type::UINT16, :enum_type4, [:c17, 0x42, :c18, :c19, :c20] - enum FFI::Type::UINT32, :enum_type5, [:c21, 0x42, :c22, :c23, 0x4242, :c24] - enum FFI::Type::UINT64, :enum_type6, [:c25, 0x42, :c26, 0x4242, :c27, 0x42424242, :c28, 0x4242424242424242] - enum FFI::Type::UINT64, [:c29, 0x4242424242424242, :c30, :c31, :c32] - - attach_function :test_untagged_nonint_enum, [:uint8], :uint8 - attach_function :test_tagged_nonint_enum1, [:uint16], :uint16 - attach_function :test_tagged_nonint_enum2, [:uint32], :uint32 - attach_function :test_tagged_nonint_enum3, [:uint64], :uint64 - attach_function :test_tagged_nonint_enum4, :test_tagged_nonint_enum1, [:enum_type4], :enum_type4 - attach_function :test_tagged_nonint_enum5, :test_tagged_nonint_enum2, [:enum_type5], :enum_type5 - attach_function :test_tagged_nonint_enum6, :test_tagged_nonint_enum3, [:enum_type6], :enum_type6 -end - -describe "A library with no enum defined" do - it "returns nil when asked for an enum" do - expect(TestEnum0.enum_type(:foo)).to be_nil - end -end - -describe "An untagged enum" do - it "constants can be used as function parameters and return value" do - expect(TestEnum1.test_untagged_enum(:c1)).to eq(0) - expect(TestEnum1.test_untagged_enum(:c2)).to eq(1) - expect(TestEnum1.test_untagged_enum(:c3)).to eq(2) - expect(TestEnum1.test_untagged_enum(:c4)).to eq(3) - expect(TestEnum1.test_untagged_enum(:c5)).to eq(42) - expect(TestEnum1.test_untagged_enum(:c6)).to eq(43) - expect(TestEnum1.test_untagged_enum(:c7)).to eq(44) - expect(TestEnum1.test_untagged_enum(:c8)).to eq(45) - expect(TestEnum1.test_untagged_enum(:c9)).to eq(42) - expect(TestEnum1.test_untagged_enum(:c10)).to eq(43) - expect(TestEnum1.test_untagged_enum(:c11)).to eq(4242) - expect(TestEnum1.test_untagged_enum(:c12)).to eq(4243) - expect(TestEnum1.test_untagged_enum(:c13)).to eq(42) - expect(TestEnum1.test_untagged_enum(:c14)).to eq(4242) - expect(TestEnum1.test_untagged_enum(:c15)).to eq(424242) - expect(TestEnum1.test_untagged_enum(:c16)).to eq(42424242) - expect(TestEnum4.test_untagged_nonint_enum(:c1)).to eq(0) - expect(TestEnum4.test_untagged_nonint_enum(:c2)).to eq(1) - expect(TestEnum4.test_untagged_nonint_enum(:c3)).to eq(2) - expect(TestEnum4.test_untagged_nonint_enum(:c4)).to eq(3) - expect(TestEnum4.test_tagged_nonint_enum3(:c29)).to eq(0x4242424242424242) - expect(TestEnum4.test_tagged_nonint_enum3(:c30)).to eq(0x4242424242424243) - expect(TestEnum4.test_tagged_nonint_enum3(:c31)).to eq(0x4242424242424244) - expect(TestEnum4.test_tagged_nonint_enum3(:c32)).to eq(0x4242424242424245) - end -end - -describe "A tagged typedef enum" do - it "is accessible through its tag" do - expect(TestEnum3.enum_type(:enum_type1)).not_to be_nil - expect(TestEnum3.enum_type(:enum_type2)).not_to be_nil - expect(TestEnum3.enum_type(:enum_type3)).not_to be_nil - expect(TestEnum3.enum_type(:enum_type4)).not_to be_nil - expect(TestEnum4.enum_type(:enum_type1)).not_to be_nil - expect(TestEnum4.enum_type(:enum_type2)).not_to be_nil - expect(TestEnum4.enum_type(:enum_type3)).not_to be_nil - expect(TestEnum4.enum_type(:enum_type4)).not_to be_nil - expect(TestEnum4.enum_type(:enum_type5)).not_to be_nil - expect(TestEnum4.enum_type(:enum_type6)).not_to be_nil - end - - it "contains enum constants" do - expect(TestEnum3.enum_type(:enum_type1).symbols.length).to eq(4) - expect(TestEnum3.enum_type(:enum_type2).symbols.length).to eq(4) - expect(TestEnum3.enum_type(:enum_type3).symbols.length).to eq(4) - expect(TestEnum3.enum_type(:enum_type4).symbols.length).to eq(4) - expect(TestEnum4.enum_type(:enum_type1).symbols.length).to eq(4) - expect(TestEnum4.enum_type(:enum_type2).symbols.length).to eq(4) - expect(TestEnum4.enum_type(:enum_type3).symbols.length).to eq(4) - expect(TestEnum4.enum_type(:enum_type4).symbols.length).to eq(4) - expect(TestEnum4.enum_type(:enum_type5).symbols.length).to eq(4) - expect(TestEnum4.enum_type(:enum_type6).symbols.length).to eq(4) - end - - it "constants can be used as function parameters and return value" do - expect(TestEnum3.test_tagged_typedef_enum1(:c1)).to be :c1 - expect(TestEnum3.test_tagged_typedef_enum1(:c2)).to be :c2 - expect(TestEnum3.test_tagged_typedef_enum1(:c3)).to be :c3 - expect(TestEnum3.test_tagged_typedef_enum1(:c4)).to be :c4 - expect(TestEnum3.test_tagged_typedef_enum2(:c5)).to be :c5 - expect(TestEnum3.test_tagged_typedef_enum2(:c6)).to be :c6 - expect(TestEnum3.test_tagged_typedef_enum2(:c7)).to be :c7 - expect(TestEnum3.test_tagged_typedef_enum2(:c8)).to be :c8 - expect(TestEnum3.test_tagged_typedef_enum3(:c9)).to be :c9 - expect(TestEnum3.test_tagged_typedef_enum3(:c10)).to be :c10 - expect(TestEnum3.test_tagged_typedef_enum3(:c11)).to be :c11 - expect(TestEnum3.test_tagged_typedef_enum3(:c12)).to be :c12 - expect(TestEnum3.test_tagged_typedef_enum4(:c13)).to be :c13 - expect(TestEnum3.test_tagged_typedef_enum4(:c14)).to be :c14 - expect(TestEnum3.test_tagged_typedef_enum4(:c15)).to be :c15 - expect(TestEnum3.test_tagged_typedef_enum4(:c16)).to be :c16 - expect(TestEnum4.test_tagged_nonint_enum1(:c5)).to eq(0x42) - expect(TestEnum4.test_tagged_nonint_enum1(:c6)).to eq(0x43) - expect(TestEnum4.test_tagged_nonint_enum1(:c7)).to eq(0x44) - expect(TestEnum4.test_tagged_nonint_enum1(:c8)).to eq(0x45) - expect(TestEnum4.test_tagged_nonint_enum2(:c9)).to eq(0x42) - expect(TestEnum4.test_tagged_nonint_enum2(:c10)).to eq(0x43) - expect(TestEnum4.test_tagged_nonint_enum2(:c11)).to eq(0x4242) - expect(TestEnum4.test_tagged_nonint_enum2(:c12)).to eq(0x4243) - expect(TestEnum4.test_tagged_nonint_enum3(:c13)).to eq(0x42) - expect(TestEnum4.test_tagged_nonint_enum3(:c14)).to eq(0x4242) - expect(TestEnum4.test_tagged_nonint_enum3(:c15)).to eq(0x42424242) - expect(TestEnum4.test_tagged_nonint_enum3(:c16)).to eq(0x4242424242424242) - expect(TestEnum4.test_tagged_nonint_enum4(:c17)).to eq(:c17) - expect(TestEnum4.test_tagged_nonint_enum4(:c18)).to eq(:c18) - expect(TestEnum4.test_tagged_nonint_enum4(:c19)).to eq(:c19) - expect(TestEnum4.test_tagged_nonint_enum4(:c20)).to eq(:c20) - expect(TestEnum4.test_tagged_nonint_enum5(:c21)).to eq(:c21) - expect(TestEnum4.test_tagged_nonint_enum5(:c22)).to eq(:c22) - expect(TestEnum4.test_tagged_nonint_enum5(:c23)).to eq(:c23) - expect(TestEnum4.test_tagged_nonint_enum5(:c24)).to eq(:c24) - expect(TestEnum4.test_tagged_nonint_enum6(:c25)).to eq(:c25) - expect(TestEnum4.test_tagged_nonint_enum6(:c26)).to eq(:c26) - expect(TestEnum4.test_tagged_nonint_enum6(:c27)).to eq(:c27) - expect(TestEnum4.test_tagged_nonint_enum6(:c28)).to eq(:c28) - end - - it "integers can be used instead of constants" do - expect(TestEnum3.test_tagged_typedef_enum1(0)).to be :c1 - expect(TestEnum3.test_tagged_typedef_enum1(1)).to be :c2 - expect(TestEnum3.test_tagged_typedef_enum1(2)).to be :c3 - expect(TestEnum3.test_tagged_typedef_enum1(3)).to be :c4 - expect(TestEnum3.test_tagged_typedef_enum2(42)).to be :c5 - expect(TestEnum3.test_tagged_typedef_enum2(43)).to be :c6 - expect(TestEnum3.test_tagged_typedef_enum2(44)).to be :c7 - expect(TestEnum3.test_tagged_typedef_enum2(45)).to be :c8 - expect(TestEnum3.test_tagged_typedef_enum3(42)).to be :c9 - expect(TestEnum3.test_tagged_typedef_enum3(43)).to be :c10 - expect(TestEnum3.test_tagged_typedef_enum3(4242)).to be :c11 - expect(TestEnum3.test_tagged_typedef_enum3(4243)).to be :c12 - expect(TestEnum3.test_tagged_typedef_enum4(42)).to be :c13 - expect(TestEnum3.test_tagged_typedef_enum4(4242)).to be :c14 - expect(TestEnum3.test_tagged_typedef_enum4(424242)).to be :c15 - expect(TestEnum3.test_tagged_typedef_enum4(42424242)).to be :c16 - expect(TestEnum4.test_tagged_nonint_enum4(0x42)).to eq(:c17) - expect(TestEnum4.test_tagged_nonint_enum4(0x43)).to eq(:c18) - expect(TestEnum4.test_tagged_nonint_enum4(0x44)).to eq(:c19) - expect(TestEnum4.test_tagged_nonint_enum4(0x45)).to eq(:c20) - expect(TestEnum4.test_tagged_nonint_enum5(0x42)).to eq(:c21) - expect(TestEnum4.test_tagged_nonint_enum5(0x43)).to eq(:c22) - expect(TestEnum4.test_tagged_nonint_enum5(0x4242)).to eq(:c23) - expect(TestEnum4.test_tagged_nonint_enum5(0x4243)).to eq(:c24) - expect(TestEnum4.test_tagged_nonint_enum6(0x42)).to eq(:c25) - expect(TestEnum4.test_tagged_nonint_enum6(0x4242)).to eq(:c26) - expect(TestEnum4.test_tagged_nonint_enum6(0x42424242)).to eq(:c27) - expect(TestEnum4.test_tagged_nonint_enum6(0x4242424242424242)).to eq(:c28) - end -end - -describe "All enums" do - it "have autonumbered constants when defined with names only" do - expect(TestEnum1.enum_value(:c1)).to eq(0) - expect(TestEnum1.enum_value(:c2)).to eq(1) - expect(TestEnum1.enum_value(:c3)).to eq(2) - expect(TestEnum1.enum_value(:c4)).to eq(3) - - expect(TestEnum3.enum_value(:c1)).to eq(0) - expect(TestEnum3.enum_value(:c2)).to eq(1) - expect(TestEnum3.enum_value(:c3)).to eq(2) - expect(TestEnum3.enum_value(:c4)).to eq(3) - - expect(TestEnum4.enum_value(:c1)).to eq(0) - expect(TestEnum4.enum_value(:c2)).to eq(1) - expect(TestEnum4.enum_value(:c3)).to eq(2) - expect(TestEnum4.enum_value(:c4)).to eq(3) - end - - it "can have an explicit first constant and autonumbered subsequent constants" do - expect(TestEnum1.enum_value(:c5)).to eq(42) - expect(TestEnum1.enum_value(:c6)).to eq(43) - expect(TestEnum1.enum_value(:c7)).to eq(44) - expect(TestEnum1.enum_value(:c8)).to eq(45) - - expect(TestEnum3.enum_value(:c5)).to eq(42) - expect(TestEnum3.enum_value(:c6)).to eq(43) - expect(TestEnum3.enum_value(:c7)).to eq(44) - expect(TestEnum3.enum_value(:c8)).to eq(45) - - expect(TestEnum4.enum_value(:c5)).to eq(0x42) - expect(TestEnum4.enum_value(:c6)).to eq(0x43) - expect(TestEnum4.enum_value(:c7)).to eq(0x44) - expect(TestEnum4.enum_value(:c8)).to eq(0x45) - - expect(TestEnum4.enum_value(:c29)).to eq(0x4242424242424242) - expect(TestEnum4.enum_value(:c30)).to eq(0x4242424242424243) - expect(TestEnum4.enum_value(:c31)).to eq(0x4242424242424244) - expect(TestEnum4.enum_value(:c32)).to eq(0x4242424242424245) - end - - it "can have a mix of explicit and autonumbered constants" do - expect(TestEnum1.enum_value(:c9)).to eq(42) - expect(TestEnum1.enum_value(:c10)).to eq(43) - expect(TestEnum1.enum_value(:c11)).to eq(4242) - expect(TestEnum1.enum_value(:c12)).to eq(4243) - - expect(TestEnum3.enum_value(:c9)).to eq(42) - expect(TestEnum3.enum_value(:c10)).to eq(43) - expect(TestEnum3.enum_value(:c11)).to eq(4242) - expect(TestEnum3.enum_value(:c12)).to eq(4243) - - expect(TestEnum4.enum_value(:c9)).to eq(0x42) - expect(TestEnum4.enum_value(:c10)).to eq(0x43) - expect(TestEnum4.enum_value(:c11)).to eq(0x4242) - expect(TestEnum4.enum_value(:c12)).to eq(0x4243) - - expect(TestEnum4.enum_value(:c21)).to eq(0x42) - expect(TestEnum4.enum_value(:c22)).to eq(0x43) - expect(TestEnum4.enum_value(:c23)).to eq(0x4242) - expect(TestEnum4.enum_value(:c24)).to eq(0x4243) - end - - it "can have all its constants explicitely valued" do - expect(TestEnum1.enum_value(:c13)).to eq(42) - expect(TestEnum1.enum_value(:c14)).to eq(4242) - expect(TestEnum1.enum_value(:c15)).to eq(424242) - expect(TestEnum1.enum_value(:c16)).to eq(42424242) - - expect(TestEnum3.enum_value(:c13)).to eq(42) - expect(TestEnum3.enum_value(:c14)).to eq(4242) - expect(TestEnum3.enum_value(:c15)).to eq(424242) - expect(TestEnum3.enum_value(:c16)).to eq(42424242) - - expect(TestEnum4.enum_value(:c13)).to eq(0x42) - expect(TestEnum4.enum_value(:c14)).to eq(0x4242) - expect(TestEnum4.enum_value(:c15)).to eq(0x42424242) - expect(TestEnum4.enum_value(:c16)).to eq(0x4242424242424242) - - expect(TestEnum4.enum_value(:c25)).to eq(0x42) - expect(TestEnum4.enum_value(:c26)).to eq(0x4242) - expect(TestEnum4.enum_value(:c27)).to eq(0x42424242) - expect(TestEnum4.enum_value(:c28)).to eq(0x4242424242424242) - end - - it "return the constant corresponding to a specific value" do - enum = TestEnum3.enum_type(:enum_type1) - expect(enum[0]).to be :c1 - expect(enum[1]).to be :c2 - expect(enum[2]).to be :c3 - expect(enum[3]).to be :c4 - - enum = TestEnum3.enum_type(:enum_type2) - expect(enum[42]).to be :c5 - expect(enum[43]).to be :c6 - expect(enum[44]).to be :c7 - expect(enum[45]).to be :c8 - - enum = TestEnum3.enum_type(:enum_type3) - expect(enum[42]).to be :c9 - expect(enum[43]).to be :c10 - expect(enum[4242]).to be :c11 - expect(enum[4243]).to be :c12 - - enum = TestEnum3.enum_type(:enum_type4) - expect(enum[42]).to be :c13 - expect(enum[4242]).to be :c14 - expect(enum[424242]).to be :c15 - expect(enum[42424242]).to be :c16 - - enum = TestEnum4.enum_type(:enum_type1) - expect(enum[0x42]).to eq(:c5) - expect(enum[0x43]).to eq(:c6) - expect(enum[0x44]).to eq(:c7) - expect(enum[0x45]).to eq(:c8) - - enum = TestEnum4.enum_type(:enum_type2) - expect(enum[0x42]).to eq(:c9) - expect(enum[0x43]).to eq(:c10) - expect(enum[0x4242]).to eq(:c11) - expect(enum[0x4243]).to eq(:c12) - - enum = TestEnum4.enum_type(:enum_type3) - expect(enum[0x42]).to eq(:c13) - expect(enum[0x4242]).to eq(:c14) - expect(enum[0x42424242]).to eq(:c15) - expect(enum[0x4242424242424242]).to eq(:c16) - - enum = TestEnum4.enum_type(:enum_type4) - expect(enum[0x42]).to eq(:c17) - expect(enum[0x43]).to eq(:c18) - expect(enum[0x44]).to eq(:c19) - expect(enum[0x45]).to eq(:c20) - - enum = TestEnum4.enum_type(:enum_type5) - expect(enum[0x42]).to eq(:c21) - expect(enum[0x43]).to eq(:c22) - expect(enum[0x4242]).to eq(:c23) - expect(enum[0x4243]).to eq(:c24) - - enum = TestEnum4.enum_type(:enum_type6) - expect(enum[0x42]).to eq(:c25) - expect(enum[0x4242]).to eq(:c26) - expect(enum[0x42424242]).to eq(:c27) - expect(enum[0x4242424242424242]).to eq(:c28) - end - - it "return nil for values that don't have a symbol" do - enum = TestEnum3.enum_type(:enum_type1) - expect(enum[-1]).to be_nil - expect(enum[4]).to be_nil - - enum = TestEnum3.enum_type(:enum_type2) - expect(enum[0]).to be_nil - expect(enum[41]).to be_nil - expect(enum[46]).to be_nil - - enum = TestEnum3.enum_type(:enum_type3) - expect(enum[0]).to be_nil - expect(enum[41]).to be_nil - expect(enum[44]).to be_nil - expect(enum[4241]).to be_nil - expect(enum[4244]).to be_nil - - enum = TestEnum3.enum_type(:enum_type4) - expect(enum[0]).to be_nil - expect(enum[41]).to be_nil - expect(enum[43]).to be_nil - expect(enum[4241]).to be_nil - expect(enum[4243]).to be_nil - expect(enum[424241]).to be_nil - expect(enum[424243]).to be_nil - expect(enum[42424241]).to be_nil - expect(enum[42424243]).to be_nil - - enum = TestEnum4.enum_type(:enum_type1) - expect(enum[0x0]).to be_nil - expect(enum[0x41]).to be_nil - expect(enum[0x46]).to be_nil - - enum = TestEnum4.enum_type(:enum_type2) - expect(enum[0x0]).to be_nil - expect(enum[0x41]).to be_nil - expect(enum[0x44]).to be_nil - expect(enum[0x4241]).to be_nil - expect(enum[0x4244]).to be_nil - - enum = TestEnum4.enum_type(:enum_type3) - expect(enum[0x0]).to be_nil - expect(enum[0x41]).to be_nil - expect(enum[0x43]).to be_nil - expect(enum[0x4241]).to be_nil - expect(enum[0x4243]).to be_nil - expect(enum[0x42424241]).to be_nil - expect(enum[0x42424243]).to be_nil - expect(enum[0x4242424242424241]).to be_nil - expect(enum[0x4242424242424243]).to be_nil - - enum = TestEnum4.enum_type(:enum_type4) - expect(enum[0x0]).to be_nil - expect(enum[0x41]).to be_nil - expect(enum[0x46]).to be_nil - - enum = TestEnum4.enum_type(:enum_type5) - expect(enum[0x0]).to be_nil - expect(enum[0x41]).to be_nil - expect(enum[0x44]).to be_nil - expect(enum[0x4241]).to be_nil - expect(enum[0x4244]).to be_nil - - enum = TestEnum4.enum_type(:enum_type6) - expect(enum[0x0]).to be_nil - expect(enum[0x41]).to be_nil - expect(enum[0x43]).to be_nil - expect(enum[0x4241]).to be_nil - expect(enum[0x4243]).to be_nil - expect(enum[0x42424241]).to be_nil - expect(enum[0x42424243]).to be_nil - expect(enum[0x4242424242424241]).to be_nil - expect(enum[0x4242424242424243]).to be_nil - end - - it "duplicate enum keys rejected" do - expect { enum [ :a, 0xfee1dead, :b, 0xdeadbeef, :a, 0 ] }.to raise_error - expect { enum FFI::Type::UINT64, [ :a, 0xfee1dead, :b, 0xdeadbeef, :a, 0 ] }.to raise_error - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/errno_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/errno_spec.rb deleted file mode 100644 index 61cbda2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/errno_spec.rb +++ /dev/null @@ -1,20 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -describe "FFI.errno" do - module LibTest - extend FFI::Library - ffi_lib TestLibrary::PATH - attach_function :setLastError, [ :int ], :void - end - - it "FFI.errno contains errno from last function" do - LibTest.setLastError(0) - LibTest.setLastError(0x12345678) - expect(FFI.errno).to eq(0x12345678) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/ffi_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/ffi_spec.rb deleted file mode 100644 index bb93f37..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/ffi_spec.rb +++ /dev/null @@ -1,28 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -describe "FFI" do - - describe ".map_library_name" do - - let(:prefix) { FFI::Platform::LIBPREFIX } - let(:suffix) { FFI::Platform::LIBSUFFIX } - - it "should add platform library extension if not present" do - expect(FFI.map_library_name("#{prefix}dummy")).to eq("#{prefix}dummy.#{suffix}") - end - - it "should add platform library extension even if lib suffix is present in name" do - expect(FFI.map_library_name("#{prefix}dummy_with_#{suffix}")).to eq("#{prefix}dummy_with_#{suffix}.#{suffix}") - end - - it "should return Platform::LIBC when called with 'c'" do - expect(FFI.map_library_name('c')).to eq(FFI::Library::LIBC) - end - - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/Benchmark.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/Benchmark.c deleted file mode 100644 index 55a7380..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/Benchmark.c +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ -#include -#include - -void returnVoid() { - -} - -void returnVoidI(int arg) { - -} -int returnInt() { - return 0; -} - -int returnIntI(int arg) { - return arg; -} - -typedef int8_t s8; -typedef uint8_t u8; -typedef int16_t s16; -typedef uint16_t u16; -typedef int32_t s32; -typedef uint32_t u32; -typedef int64_t s64; -typedef uint64_t u64; -typedef float f32; -typedef double f64; -typedef void v; -typedef char* S; -typedef void* P; - -#define B6(R, T1, T2, T3, T4, T5, T6) R bench_##T1##T2##T3##T4##T5##T6##_##R(T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) {} -#define B5(R, T1, T2, T3, T4, T5) R bench_##T1##T2##T3##T4##T5##_##R(T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) {} -#define B4(R, T1, T2, T3, T4) R bench_##T1##T2##T3##T4##_##R(T1 a1, T2 a2, T3 a3, T4 a4) {} -#define B3(R, T1, T2, T3) R bench_##T1##T2##T3##_##R(T1 a1, T2 a2, T3 a3) {} -#define B2(R, T1, T2) R bench_##T1##T2##_##R(T1 a1, T2 a2) {} -#define B1(R, T1) R bench_##T1##_##R(T1 a1) {} -#define BrV(T) B1(v, T); B2(v, T, T); B3(v, T, T, T); B4(v, T, T, T, T); B5(v, T, T, T, T, T); B6(v, T, T, T, T, T, T); -BrV(u32); -BrV(s32); -BrV(s64); -BrV(u64); -BrV(f32); -BrV(f64); -BrV(S); -BrV(P); diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/BoolTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/BoolTest.c deleted file mode 100644 index 04cb6c6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/BoolTest.c +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. - * Copyright (c) 2009 Aman Gupta. - * - * All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - -#include - -bool -bool_return_true() -{ - return true; -} - -bool -bool_return_false() -{ - return false; -} - -bool -bool_return_val(bool value) -{ - return value; -} - -bool -bool_reverse_val(bool value) -{ - return value ? false : true; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/BufferTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/BufferTest.c deleted file mode 100644 index 3e95ebc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/BufferTest.c +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - - -#define MEMSET(buf, value, size) do { \ - int i; for (i = 0; i < size; ++i) buf[i] = value; \ -} while(0) -#define MEMCPY(dst, src, size) do { \ - int i; for (i = 0; i < size; ++i) dst[i] = src[i]; \ -} while(0) - -#define FILL(JTYPE, CTYPE) \ -void fill##JTYPE##Buffer(CTYPE* buf, CTYPE value, int size) { MEMSET(buf, value, size); } - -#define COPY(JTYPE, CTYPE) \ -void copy##JTYPE##Buffer(CTYPE* dst, CTYPE* src, int size) { MEMCPY(dst, src, size); } - -#define FUNC(JTYPE, CTYPE) \ - FILL(JTYPE, CTYPE); \ - COPY(JTYPE, CTYPE) - -FUNC(Byte, char); -FUNC(Short, short); -FUNC(Int, int); -FUNC(Long, long long); -FUNC(Float, float); -FUNC(Double, double); - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/ClosureTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/ClosureTest.c deleted file mode 100644 index 64ea2b4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/ClosureTest.c +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - -#include -#include -#ifndef _WIN32 -# include -#else -# include -# include -#endif - -#define R(T, rtype) rtype testClosureVr##T(rtype (*closure)(void)) { \ - return closure != NULL ? (*closure)() : (rtype) 0; \ -} - -#define P(T, ptype) void testClosure##T##rV(void (*closure)(ptype), ptype a1) { \ - if (closure != NULL) (*closure)(a1); \ -} - -void testClosureVrV(void (*closure)(void)) -{ - (*closure)(); -} - -R(Z, bool); -R(B, char); -R(S, short); -R(I, int); -R(L, long); -R(J, long long); -R(LL, long long); -R(F, float); -R(D, double); -R(P, const void*); - - -P(Z, bool); -P(B, char); -P(S, short); -P(I, int); -P(L, long); -P(J, long long); -P(LL, long long); -P(F, float); -P(D, double); -P(P, const void*); -P(UL, unsigned long); - -void testOptionalClosureBrV(void (*closure)(char), char a1) -{ - if (closure) { - (*closure)(a1); - } -} - - -struct ThreadVrV { - void (*closure)(void); - int count; -}; - -static void * -threadVrV(void *arg) -{ - struct ThreadVrV* t = (struct ThreadVrV *) arg; - - int i; - for (i = 0; i < t->count; i++) { - (*t->closure)(); - } - - return NULL; -} - -void testThreadedClosureVrV(void (*closure)(void), int n) -{ - struct ThreadVrV arg = {closure, n}; -#ifndef _WIN32 - pthread_t t; - pthread_create(&t, NULL, threadVrV, &arg); - pthread_join(t, NULL); -#else - HANDLE hThread = (HANDLE) _beginthread((void (*)(void *))threadVrV, 0, &arg); - WaitForSingleObject(hThread, INFINITE); -#endif -} - -struct s8f32s32 { - char s8; - float f32; - int s32; -}; - -// Takes a struct argument -void testClosureTrV(void (*closure)(struct s8f32s32 s), struct s8f32s32* s) -{ - (*closure)(*s); -} - -// Returns a struct value -struct s8f32s32 testClosureVrT(struct s8f32s32 (*closure)()) -{ - return (*closure)(); -} - -typedef int (*returnTypeClosure_t)(int) ; -typedef returnTypeClosure_t (*lookupClosure_t)(); - -int testReturnsClosure(lookupClosure_t lookup, int val) -{ - returnTypeClosure_t func = lookup ? (*lookup)() : NULL; - return func ? (*func)(val) : 0; -} - -static int multiplyByTwo(int value) -{ - return value * 2; -} - -returnTypeClosure_t testReturnsFunctionPointer() -{ - return multiplyByTwo; -} - -typedef int (*argumentClosure_t)(int); -typedef int (*withArgumentClosure_t)(argumentClosure_t, int); - -int testArgumentClosure(withArgumentClosure_t closure_with, argumentClosure_t closure_arg, int val) -{ - return (*closure_with)(closure_arg, val); -} - - -// -// These macros produce functions of the form: -// testClosureBIrV(void (*closure)(char, int), char a1, int a2) {} -// -#define C2_(J1, J2, N1, N2) \ -void testClosure##J1##J2##rV(void (*closure)(N1, N2), N1 a1, N2 a2) \ -{ \ - if (closure != NULL) (*closure)(a1, a2); \ -} - -#define C2(J, N) \ - C2_(B, J, char, N) \ - C2_(S, J, short, N) \ - C2_(I, J, int, N) \ - C2_(LL, J, long long, N) \ - C2_(F, J, float, N) \ - C2_(D, J, double, N) \ - - -C2(B, char); -C2(S, short); -C2(I, int); -C2(LL, long long); -C2(F, float); -C2(D, double); - -#define C3_(J1, J2, J3, N1, N2, N3) \ -void testClosure##J1##J2##J3##rV(void (*closure)(N1, N2, N3), N1 a1, N2 a2, N3 a3) \ -{ \ - (*closure)(a1, a2, a3); \ -} - - -#define C3(J, N) \ - C3_(B, J, B, char, N, char) \ - C3_(S, J, S, short, N, short) \ - C3_(I, J, I, int, N, int) \ - C3_(LL, J, LL, long long, N, long long) \ - C3_(F, J, F, float, N, float) \ - C3_(D, J, D, double, N, double) \ - -C3(B, char); -C3(S, short); -C3(I, int); -C3(LL, long long); -C3(F, float); -C3(D, double); -C3_(B, S, I, char, short, int); -C3_(B, S, LL, char, short, long long); -C3_(LL, S, B, long long, short, char); -C3_(LL, B, S, long long, char, short); - - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/EnumTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/EnumTest.c deleted file mode 100644 index 4bf8d23..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/EnumTest.c +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ -#include - -int test_untagged_enum(int val) { - return val; -} - -int test_untagged_typedef_enum(int val) { - return val; -} - -uint8_t test_untagged_nonint_enum(uint8_t val) { - return val; -} - -uint16_t test_tagged_nonint_enum1(uint16_t val) { - return val; -} - -uint32_t test_tagged_nonint_enum2(uint32_t val) { - return val; -} - -uint64_t test_tagged_nonint_enum3(uint64_t val) { - return val; -} - -typedef enum {c1, c2, c3, c4} enum_type1; -enum_type1 test_tagged_typedef_enum1(enum_type1 val) { - return val; -} - -typedef enum {c5 = 42, c6, c7, c8} enum_type2; -enum_type2 test_tagged_typedef_enum2(enum_type2 val) { - return val; -} - -typedef enum {c9 = 42, c10, c11 = 4242, c12} enum_type3; -enum_type3 test_tagged_typedef_enum3(enum_type3 val) { - return val; -} - -typedef enum {c13 = 42, c14 = 4242, c15 = 424242, c16 = 42424242} enum_type4; -enum_type4 test_tagged_typedef_enum4(enum_type4 val) { - return val; -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/FunctionTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/FunctionTest.c deleted file mode 100644 index b4d45bb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/FunctionTest.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - -#ifdef _WIN32 -#include -#define sleep(x) Sleep(x) -#endif - -#ifndef _WIN32 -#include -#include -#endif - -int testAdd(int a, int b) -{ - return a + b; -}; - -int testFunctionAdd(int a, int b, int (*f)(int, int)) -{ - return f(a, b); -}; - -void testBlocking(int seconds) { - sleep(seconds); -}; - -struct async_data { - void (*fn)(int); - int value; -}; - -static void* asyncThreadCall(void *data) -{ - struct async_data* d = (struct async_data *) data; - if (d != NULL && d->fn != NULL) { - (*d->fn)(d->value); - } - - return NULL; -} - -void testAsyncCallback(void (*fn)(int), int value) -{ -#ifndef _WIN32 - pthread_t t; - struct async_data d; - d.fn = fn; - d.value = value; - pthread_create(&t, NULL, asyncThreadCall, &d); - pthread_join(t, NULL); -#else - (*fn)(value); -#endif -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/GNUmakefile b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/GNUmakefile deleted file mode 100644 index d730419..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/GNUmakefile +++ /dev/null @@ -1,149 +0,0 @@ -# -*- makefile -*- - -ifeq ($(OS),) - BUILD_OS := $(shell uname -s | tr '[:upper:]' '[:lower:]') - OS := $(BUILD_OS) -endif - -ifeq ($(CPU),) - CPU := $(shell uname -m | sed -e 's/i[345678]86/i386/') -endif - -PLATFORM = $(CPU)-$(OS) - -ifeq ($(OS), sunos) - OS = solaris -endif - -SRC_DIR = . -BUILD_DIR ?= . -TEST_BUILD_DIR = . -# Set defaults to unix (linux/solaris/bsd) -PREFIX = lib -LIBEXT ?= so -LIBNAME = $(PREFIX)test.$(LIBEXT) - -export MACOSX_DEPLOYMENT_TARGET=10.4 - -CCACHE := $(strip $(realpath $(shell which ccache 2> /dev/null))) - -TEST_SRCS = $(wildcard $(SRC_DIR)/*.c) -TEST_OBJS := $(patsubst $(SRC_DIR)/%.c, $(TEST_BUILD_DIR)/%.o, $(TEST_SRCS)) - -# -# Compiler/linker flags from: -# http://weblogs.java.net/blog/kellyohair/archive/2006/01/compilation_of_1.html -JFLAGS = -fno-omit-frame-pointer -fno-strict-aliasing -OFLAGS = -O2 $(JFLAGS) -WFLAGS = -W -Wall -Wno-unused -Wno-parentheses -PICFLAGS = -fPIC -SOFLAGS = -shared -LDFLAGS += $(SOFLAGS) - -IFLAGS = -I"$(BUILD_DIR)" -CFLAGS = $(OFLAGS) $(WFLAGS) $(IFLAGS) $(PICFLAGS) -D_REENTRANT - -ifneq ($(strip $(findstring $(OS), win32, mingw, cygwin)),) - # For cygwin => win32-native builds, strip out cygwin deps - ifneq ($(findstring cygwin, $(BUILD_OS)),) - CC += -mno-cygwin -mwin32 - LDFLAGS += -mno-cygwin -Wl,--add-stdcall-alias - endif - PICFLAGS= - LIBEXT=dll - CC = gcc -endif - -ifeq ($(OS), darwin) - ifneq ($(findstring $(CPU),ppc),) - ARCHFLAGS += -arch ppc - endif - ifneq ($(findstring $(CPU),i386 x86_64),) - ARCHFLAGS += -arch i386 -arch x86_64 - endif - CFLAGS += $(ARCHFLAGS) -DTARGET_RT_MAC_CFM=0 - CFLAGS += -fno-common - LDFLAGS = $(ARCHFLAGS) -dynamiclib - # link against the universal libraries on ppc machines - LDFLAGS += -L$(MACSDK)/usr/lib - LIBEXT = dylib - FFI_CFLAGS += -isysroot $(MACSDK) - PICFLAGS = - SOFLAGS = -endif - -ifeq ($(OS), linux) - SOFLAGS += -Wl,-soname,$(LIBNAME) -endif - -ifeq ($(OS), solaris) - CC = /usr/sfw/bin/gcc -std=c99 - LD = /usr/ccs/bin/ld - SOFLAGS = -shared -static-libgcc -endif - -ifeq ($(OS), aix) - LIBEXT = a - SOFLAGS = -shared -static-libgcc - PICFLAGS += -pthread -endif - -ifneq ($(findstring bsd, $(OS)),) - SOFLAGS = -shared -static-libgcc - CFLAGS += -pthread - LDFLAGS += -pthread -endif - -ifeq ($(CPU), i386) - MODEL = 32 -endif - -ifeq ($(CPU), sparcv9) - MODEL = 64 -endif - -ifeq ($(CPU), amd64) - MODEL = 64 -endif - -ifeq ($(CPU), x86_64) - MODEL = 64 -endif - -ifeq ($(CPU), ppc64) - MODEL = 64 -endif - -ifeq ($(CPU), powerpc64) - MODEL = 64 -endif - -MODELFLAG = -ifneq ($(MODEL),) - MODELFLAG = -m$(MODEL) -endif - -# On platforms (linux, solaris) that support both 32bit and 64bit, force building for one or the other -ifneq ($(or $(findstring linux, $(OS)), $(findstring solaris, $(OS))),) - # Change the CC/LD instead of CFLAGS/LDFLAGS, incase other things in the flags - # makes the libffi build choke - CC += $(MODELFLAG) - LD += $(MODELFLAG) -endif - -LIBTEST = $(LIBNAME) - -all: $(LIBTEST) - -$(TEST_BUILD_DIR)/%.o : $(SRC_DIR)/%.c - @mkdir -p $(@D) - $(CCACHE) $(CC) $(CFLAGS) -c $< -o $@ - -$(LIBTEST): $(TEST_OBJS) - $(CC) -o $@ $(LDFLAGS) $(TEST_OBJS) -lm - -clean:: - # nothing to do - ant will delete the build dir - -debug:: - @echo "SRCS=$(TEST_SRCS)" diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/GlobalVariable.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/GlobalVariable.c deleted file mode 100644 index 39c12a2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/GlobalVariable.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - -#include -#include - -typedef int8_t s8; -typedef uint8_t u8; -typedef int16_t s16; -typedef uint16_t u16; -typedef int32_t s32; -typedef uint32_t u32; -typedef int64_t s64; -typedef uint64_t u64; -typedef signed long sL; -typedef unsigned long uL; -typedef float f32; -typedef double f64; -#if !defined(__OpenBSD__) -typedef unsigned long ulong; -#endif -typedef void* pointer; -typedef void* P; - -#define GVAR(T) \ - extern T gvar_##T; \ - T gvar_##T = (T) -1; \ - T gvar_##T##_get() { return gvar_##T; }; \ - void gvar_##T##_set(T v) { gvar_##T = v; } - -GVAR(s8); -GVAR(u8); -GVAR(s16); -GVAR(u16); -GVAR(s32); -GVAR(u32); -GVAR(s64); -GVAR(u64); -GVAR(long); -GVAR(ulong); -GVAR(pointer); - -struct gstruct { - long data; -}; - -struct gstruct gvar_gstruct = { -1 }; - -struct gstruct* -gvar_gstruct_get(void) -{ - return &gvar_gstruct; -} - -void -gvar_gstruct_set(const struct gstruct* val) -{ - gvar_gstruct = *val; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/LastErrorTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/LastErrorTest.c deleted file mode 100644 index 02ce4a8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/LastErrorTest.c +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - -#if defined(_WIN32) || defined(__WIN32__) -# include -#else -# include -#endif - -int setLastError(int error) { -#if defined(_WIN32) || defined(__WIN32__) - SetLastError(error); -#else - errno = error; -#endif - return -1; -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/NumberTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/NumberTest.c deleted file mode 100644 index 3fa25a8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/NumberTest.c +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - -#include -#include -#include -#include - -#if defined(__sparc) && defined(__sun__) - #define fix_mem_access __asm("ta 6") -#else - #define fix_mem_access -#endif - -typedef int8_t s8; -typedef uint8_t u8; -typedef int16_t s16; -typedef uint16_t u16; -typedef int32_t s32; -typedef uint32_t u32; -typedef int64_t s64; -typedef uint64_t u64; -typedef signed long sL; -typedef unsigned long uL; -typedef float f32; -typedef double f64; -typedef long double f128; -#if !defined(__OpenBSD__) -typedef unsigned long ulong; -#endif - -#define ADD(T) T add_##T(T arg1, T arg2) { return arg1 + arg2; } -#define SUB(T) T sub_##T(T arg1, T arg2) { return arg1 - arg2; } -#define MUL(T) T mul_##T(T arg1, T arg2) { return arg1 * arg2; } -#define DIV(T) T div_##T(T arg1, T arg2) { return arg1 / arg2; } -#define RET(T) T ret_##T(T arg1) { return arg1; } -#define SET(T) static T T##_;void set_##T(T arg1) { T##_ = arg1; } -#define GET(T) T get_##T() { return T##_; } -typedef char* ptr; -#define TEST(T) ADD(T) SUB(T) MUL(T) DIV(T) RET(T) SET(T) GET(T) -TEST(s8); -TEST(u8); -TEST(s16); -TEST(u16); -TEST(s32); -TEST(u32); -TEST(s64); -TEST(u64); -TEST(float); -TEST(double); -TEST(long); -TEST(ulong); -TEST(f128); - -#define ADD2(R, T1, T2) R add_##T1##T2##_##R(T1 arg1, T2 arg2) { return arg1 + arg2; } -#define SUB2(R, T1, T2) R sub_##T1##T2##_##R(T1 arg1, T2 arg2) { return arg1 - arg2; } -#define MUL2(R, T1, T2) R mul_##T1##T2##_##R(T1 arg1, T2 arg2) { return arg1 * arg2; } -#define DIV2(R, T1, T2) R div_##T1##T2##_##R(T1 arg1, T2 arg2) { return arg1 / arg2; } - -#define T2__(R, T1, T2) ADD2(R, T1, T2) SUB2(R, T1, T2) MUL2(R, T1, T2) DIV2(R, T1, T2) -#define T2_(R, T1) \ - T2__(R, T1, s8) T2__(R, T1, u8) \ - T2__(R, T1, s16) T2__(R, T1, u16) \ - T2__(R, T1, s32) T2__(R, T1, u32) \ - T2__(R, T1, sL) T2__(R, T1, uL) \ - T2__(R, T1, s64) T2__(R, T1, u64) \ - -#define TEST2(R) \ - T2_(R, s8) T2_(R, u8) T2_(R, s16) T2_(R, u16) T2_(R, s32) T2_(R, u32) \ - T2_(R, sL) T2_(R, uL) T2_(R, s64) T2_(R, u64) - -#ifdef notyet -TEST2(s32) -TEST2(u32) -TEST2(s64) -TEST2(u64) -#endif - -#define ADD3(R, T1, T2, T3) R add_##T1##T2##T3##_##R(T1 arg1, T2 arg2, T3 arg3) { return arg1 + arg2 + arg3; } -#define pack_f32(buf, v) do { float f = v; memcpy((buf), &f, sizeof(f)); } while(0) -#define pack_f64(buf, v) do { double f = v; memcpy((buf), &f, sizeof(f)); } while(0) -#define pack_int(buf, v) do { *(buf) = v; } while(0) -#define pack_s8 pack_int -#define pack_u8 pack_int -#define pack_s16 pack_int -#define pack_u16 pack_int -#define pack_s32 pack_int -#define pack_u32 pack_int -#define pack_s64 pack_int -#define pack_u64 pack_int -#define pack_sL pack_int -#define pack_uL pack_int - -#define PACK3(R, T1, T2, T3) void pack_##T1##T2##T3##_##R(T1 arg1, T2 arg2, T3 arg3, R* r) { \ - fix_mem_access; \ - pack_##T1(&r[0], arg1); \ - pack_##T2(&r[1], arg2); \ - pack_##T3(&r[2], arg3); \ -} - -#define T3___(R, T1, T2, T3) PACK3(R, T1, T2, T3) /* SUB2(R, T1, T2) MUL2(R, T1, T2) DIV2(R, T1, T2) */ -#define T3__(R, T1, T2) \ - T3___(R, T1, T2, s8) T3___(R, T1, T2, u8) \ - T3___(R, T1, T2, s16) T3___(R, T1, T2, u16) \ - T3___(R, T1, T2, s32) T3___(R, T1, T2, u32) \ - T3___(R, T1, T2, sL) T3___(R, T1, T2, uL) \ - T3___(R, T1, T2, s64) T3___(R, T1, T2, u64) \ - T3___(R, T1, T2, f32) T3___(R, T1, T2, f64) \ - -#define T3_(R, T1) \ - T3__(R, T1, s8) T3__(R, T1, u8) \ - T3__(R, T1, s16) T3__(R, T1, u16) \ - T3__(R, T1, s32) T3__(R, T1, u32) \ - T3__(R, T1, sL) T3__(R, T1, uL) \ - T3__(R, T1, s64) T3__(R, T1, u64) \ - T3__(R, T1, f32) T3__(R, T1, f64) \ - -#define TEST3(R) \ - T3_(R, s8) T3_(R, u8) T3_(R, s16) T3_(R, u16) T3_(R, s32) T3_(R, u32) \ - T3_(R, sL) T3_(R, uL) T3_(R, s64) T3_(R, u64) T3_(R, f32) T3_(R, f64) - -TEST3(s64) - -void -foo6(intptr_t i1, intptr_t i2, intptr_t i3, intptr_t i4, intptr_t i5, intptr_t i6) { } - -void -foo5(intptr_t i1, intptr_t i2, intptr_t i3, intptr_t i4, intptr_t i5) { } - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/PointerTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/PointerTest.c deleted file mode 100644 index 7237ab2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/PointerTest.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - -#include -#include -#include -#include -#include -#include -typedef void* ptr; -typedef void* pointer; -#ifdef _WIN32 -typedef char* caddr_t; -#endif - -#define RET(T) T ptr_ret_##T(void* arg1, int offset) { \ - T tmp; memcpy(&tmp, (caddr_t) arg1 + offset, sizeof(tmp)); return tmp; \ -} -#define SET(T) void ptr_set_##T(void* arg1, int offset, T value) { \ - memcpy((caddr_t) arg1 + offset, &value, sizeof(value)); \ -} -#define TEST(T) SET(T) RET(T) - -TEST(int8_t); -TEST(int16_t); -TEST(int32_t); -TEST(int64_t); -TEST(float); -TEST(double); -TEST(pointer); - -void* -ptr_return_array_element(void **ptrArray, int arrayIndex) -{ - return ptrArray[arrayIndex]; -} - -void -ptr_set_array_element(void **ptrArray, int arrayIndex, void *value) -{ - ptrArray[arrayIndex] = value; -} - -void* -ptr_malloc(int size) -{ - return calloc(1, size); -} -void -ptr_free(void* ptr) -{ - free(ptr); -} - -void* -ptr_from_address(uintptr_t addr) -{ - return (void *) addr; -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/ReferenceTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/ReferenceTest.c deleted file mode 100644 index d1dd88b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/ReferenceTest.c +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - -#include - -#define REF(T) void ref_##T(T arg, T* result) { *result = arg; } -#define ADD(T) void ref_add_##T(T arg1, T arg2, T* result) { *result = arg1 + arg2; } -#define SUB(T) void ref_sub_##T(T arg1, T arg2, T* result) { *result = arg1 - arg2; } -#define MUL(T) void ref_mul_##T(T arg1, T arg2, T* result) { *result = arg1 * arg2; } -#define DIV(T) void ref_div_##T(T arg1, T arg2, T* result) { *result = arg1 / arg2; } -#define TEST(T) ADD(T) SUB(T) MUL(T) DIV(T) REF(T) - -TEST(int8_t); -TEST(int16_t); -TEST(int32_t); -TEST(int64_t); -TEST(float); -TEST(double); - - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/StringTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/StringTest.c deleted file mode 100644 index 292242b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/StringTest.c +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - -#include - -int -string_equals(const char* s1, const char* s2) -{ - return strcmp(s1, s2) == 0; -} - -void -string_set(char* s1, const char* s2) -{ - strcpy(s1, s2); -} -void -string_concat(char* dst, const char* src) -{ - strcat(dst, src); -} -void -string_dummy(char* dummy) -{ -} -const char* -string_null(void) -{ - return NULL; -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/StructTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/StructTest.c deleted file mode 100644 index 25683d3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/StructTest.c +++ /dev/null @@ -1,243 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. - * Copyright (c) 2009 Andrea Fazzi . - * - * All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - -#include -#include -#include -#include -#include -#include - -typedef char s8; -typedef short s16; -typedef int s32; -typedef long long s64; -typedef float f32; -typedef double f64; - -typedef struct bugged_struct { - unsigned char visible; - unsigned int x; - unsigned int y; - short rx; - short ry; - unsigned char order; - unsigned char size; -} bugged_struct_t; - -unsigned int -bugged_struct_size() { - return sizeof(bugged_struct_t); -} - -struct test1 { - char b; - short s; - int i; - long long j; - long l; - float f; - double d; - char string[32]; -}; - -struct struct_with_array { - char c; - int a[5]; -}; - -struct nested { - int i; -}; - -struct container { - char first; - struct nested s; -}; - -int -struct_align_nested_struct(struct container* a) { return a->s.i; } - -void* -struct_field_array(struct struct_with_array* s) { return &s->a; } - -struct container* -struct_make_container_struct(int i) -{ - static struct container cs; - memset(&cs, 0, sizeof(cs)); - cs.first = 1; - cs.s.i = i; - return &cs; -} - -#define T(x, type) \ - type struct_field_##type(struct test1* t) { return t->x; } \ - struct type##_align { char first; type value; }; \ - type struct_align_##type(struct type##_align* a) { return a->value; } - -T(b, s8); -T(s, s16); -T(i, s32); -T(j, s64); -T(f, f32); -T(d, f64); -T(l, long); - -void -struct_set_string(struct test1* t, char* s) -{ - strcpy(t->string, s); -} - -struct test1* -struct_make_struct(char b, short s, int i, long long ll, float f, double d) -{ - static struct test1 t; - memset(&t, 0, sizeof(t)); - t.b = b; - t.s = s; - t.i = i; - t.j = ll; - t.f = f; - t.d = d; - return &t; -} - -typedef int (*add_cb)(int a1, int a2); -typedef int (*sub_cb)(int a1, int a2); -struct test2 { - add_cb add_callback; - sub_cb sub_callback; -}; - -int -struct_call_add_cb(struct test2* t, int a1, int a2) -{ - return t->add_callback(a1, a2); -} - -int -struct_call_sub_cb(struct test2* t, int a1, int a2) -{ - return t->sub_callback(a1, a2); -} - - -struct struct_with_array* -struct_make_struct_with_array(int a_0, int a_1, int a_2, int a_3, int a_4) -{ - static struct struct_with_array s; - - memset(&s, 0, sizeof(s)); - - s.a[0] = a_0; - s.a[1] = a_1; - s.a[2] = a_2; - s.a[3] = a_3; - s.a[4] = a_4; - - return &s; - -} - -struct s8s32 { - char s8; - int s32; -}; - -struct s8s32 -struct_return_s8s32() -{ - struct s8s32 s; - s.s8 = 0x7f; - s.s32 = 0x12345678; - - return s; -} - -struct s8s32 -struct_s8s32_set(char s8, int s32) -{ - struct s8s32 s; - - s.s8 = s8; - s.s32 = s32; - - return s; -} - -int -struct_s8s32_get_s8(struct s8s32 s) -{ - return s.s8; -} - -int -struct_s8s32_get_s32(struct s8s32 s) -{ - return s.s32; -} - -struct s8s32 -struct_s8s32_ret_s8s32(struct s8s32 s) -{ - return s; -} - -// Pass a struct and an int arg, ensure the int arg is passed correctly -int -struct_s8s32_s32_ret_s32(struct s8s32 s, int s32) -{ - return s32; -} - -// Pass a struct and a long long arg, ensure the long long arg is passed correctly -long long -struct_s8s32_s64_ret_s64(struct s8s32 s, long long s64) -{ - return s64; -} - -// Pass a struct and a long long arg, ensure the long long arg is passed correctly -int -struct_s32_ptr_s32_s8s32_ret_s32(int s32a, void *ptr, int s32b, struct s8s32 s) -{ - if (ptr != NULL) *(struct s8s32 *) ptr = s; - return s.s32; -} - -// Pass a char *, copy into buffer length struct -struct struct_string { - char *bytes; - int len; -}; - -struct struct_string -struct_varargs_ret_struct_string(int len, ...) -{ - struct struct_string ss; - va_list vl; - char* cp = NULL; - - va_start(vl, len); - - ss.len = len; - ss.bytes = va_arg(vl, char *); - if (ss.bytes != NULL) { - cp = malloc(strlen(ss.bytes) + 1); - strcpy(cp, ss.bytes); - ss.bytes = cp; - } - - va_end(vl); - - return ss; -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/UnionTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/UnionTest.c deleted file mode 100644 index 0929a31..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/UnionTest.c +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - -#include -#include -#include -#include -#include - -typedef char s8; -typedef short s16; -typedef int s32; -typedef long long s64; -typedef float f32; -typedef double f64; - -typedef union union_test { - char b; - short s; - int i; - long long j; - long l; - float f; - double d; - s8 a[10]; -} union_test_t; - -#define T(x, type) \ - type union_align_##type(union_test_t* u) { return u->x; } \ - union_test_t* union_make_union_with_##type(type value) { static union_test_t u; u.x = value; return &u; } - -T(b, s8); -T(s, s16); -T(i, s32); -T(j, s64); -T(f, f32); -T(d, f64); -T(l, long); - -unsigned int union_size() { return sizeof(union_test_t); } diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/VariadicTest.c b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/VariadicTest.c deleted file mode 100644 index 2f3d801..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/VariadicTest.c +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (c) 2007 Wayne Meissner. All rights reserved. - * - * For licensing, see LICENSE.SPECS - */ - -#include -#include -#include -#include -#include - -typedef int8_t s8; -typedef uint8_t u8; -typedef int16_t s16; -typedef uint16_t u16; -typedef int32_t s32; -typedef uint32_t u32; -typedef int64_t s64; -typedef uint64_t u64; -typedef signed long sL; -typedef unsigned long uL; -typedef float F; -typedef double D; - -void pack_varargs(s64* buf, const char* fmt, ...) -{ - va_list ap; - int c; - double d; - va_start(ap, fmt); - while ((c = *fmt++)) { - switch (c) { - case 'c': - case 's': - case 'i': - *buf++ = va_arg(ap, s32); - break; - case 'l': - *buf++ = va_arg(ap, long); - break; - case 'j': - *buf++ = va_arg(ap, s64); - break; - case 'f': - case 'd': - d = va_arg(ap, double); - memcpy(buf++, &d, sizeof(d)); - break; - case 'C': - case 'S': - case 'I': - *buf++ = va_arg(ap, u32); - break; - case 'L': - *buf++ = va_arg(ap, unsigned long); - break; - } - } - va_end(ap); -} - -int pack_varargs2(s64* buf, int retval, const char* fmt, ...) -{ - va_list ap; - int c; - double d; - va_start(ap, fmt); - while ((c = *fmt++)) { - switch (c) { - case 'c': - case 's': - case 'i': - *buf++ = va_arg(ap, s32); - break; - case 'l': - *buf++ = va_arg(ap, long); - break; - case 'j': - *buf++ = va_arg(ap, s64); - break; - case 'f': - case 'd': - d = va_arg(ap, double); - memcpy(buf++, &d, sizeof(d)); - break; - case 'C': - case 'S': - case 'I': - *buf++ = va_arg(ap, u32); - break; - case 'L': - *buf++ = va_arg(ap, unsigned long); - break; - } - } - va_end(ap); - return retval + 1; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/classes.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/classes.rb deleted file mode 100644 index 581768c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/fixtures/classes.rb +++ /dev/null @@ -1,438 +0,0 @@ -module FFISpecs - # - # Callback fixtures - # - module LibTest - callback :cbVrS8, [ ], :char - callback :cbVrU8, [ ], :uchar - callback :cbVrS16, [ ], :short - callback :cbVrU16, [ ], :ushort - callback :cbVrS32, [ ], :int - callback :cbVrU32, [ ], :uint - callback :cbVrL, [ ], :long - callback :cbVrUL, [ ], :ulong - callback :cbVrS64, [ ], :long_long - callback :cbVrU64, [ ], :ulong_long - callback :cbVrP, [], :pointer - callback :cbCrV, [ :char ], :void - callback :cbSrV, [ :short ], :void - callback :cbIrV, [ :int ], :void - callback :cbLrV, [ :long ], :void - callback :cbULrV, [ :ulong ], :void - callback :cbLrV, [ :long_long ], :void - - attach_function :testCallbackVrS8, :testClosureVrB, [ :cbVrS8 ], :char - attach_function :testCallbackVrU8, :testClosureVrB, [ :cbVrU8 ], :uchar - attach_function :testCallbackVrS16, :testClosureVrS, [ :cbVrS16 ], :short - attach_function :testCallbackVrU16, :testClosureVrS, [ :cbVrU16 ], :ushort - attach_function :testCallbackVrS32, :testClosureVrI, [ :cbVrS32 ], :int - attach_function :testCallbackVrU32, :testClosureVrI, [ :cbVrU32 ], :uint - attach_function :testCallbackVrL, :testClosureVrL, [ :cbVrL ], :long - attach_function :testCallbackVrUL, :testClosureVrL, [ :cbVrUL ], :ulong - attach_function :testCallbackVrS64, :testClosureVrLL, [ :cbVrS64 ], :long_long - attach_function :testCallbackVrU64, :testClosureVrLL, [ :cbVrU64 ], :ulong_long - attach_function :testCallbackVrP, :testClosureVrP, [ :cbVrP ], :pointer - attach_function :testCallbackCrV, :testClosureBrV, [ :cbCrV, :char ], :void - attach_variable :cbVrS8, :gvar_pointer, :cbVrS8 - attach_variable :pVrS8, :gvar_pointer, :pointer - attach_function :testGVarCallbackVrS8, :testClosureVrB, [ :pointer ], :char - attach_function :testOptionalCallbackCrV, :testOptionalClosureBrV, [ :cbCrV, :char ], :void - - attach_function :testCallbackVrS8, :testClosureVrB, [ callback([ ], :char) ], :char - - callback :cb_return_type, [ :int ], :int - callback :cb_lookup, [ ], :cb_return_type - attach_function :testReturnsCallback, :testReturnsClosure, [ :cb_lookup, :int ], :int - - callback :funcptr, [ :int ], :int - attach_function :testReturnsFunctionPointer, [ ], :funcptr - - callback :cbS8rV, [ :char ], :void - callback :cbU8rV, [ :uchar ], :void - callback :cbS16rV, [ :short ], :void - callback :cbU16rV, [ :ushort ], :void - - callback :cbS32rV, [ :int ], :void - callback :cbU32rV, [ :uint ], :void - - callback :cbLrV, [ :long ], :void - callback :cbULrV, [ :ulong ], :void - - callback :cbS64rV, [ :long_long ], :void - attach_function :testCallbackCrV, :testClosureBrV, [ :cbS8rV, :char ], :void - attach_function :testCallbackU8rV, :testClosureBrV, [ :cbU8rV, :uchar ], :void - attach_function :testCallbackSrV, :testClosureSrV, [ :cbS16rV, :short ], :void - attach_function :testCallbackU16rV, :testClosureSrV, [ :cbU16rV, :ushort ], :void - attach_function :testCallbackIrV, :testClosureIrV, [ :cbS32rV, :int ], :void - attach_function :testCallbackU32rV, :testClosureIrV, [ :cbU32rV, :uint ], :void - - attach_function :testCallbackLrV, :testClosureLrV, [ :cbLrV, :long ], :void - attach_function :testCallbackULrV, :testClosureULrV, [ :cbULrV, :ulong ], :void - - attach_function :testCallbackLLrV, :testClosureLLrV, [ :cbS64rV, :long_long ], :void - end - - # - # Enum fixtures - # - module TestEnum0 - extend FFI::Library - end - - module TestEnum1 - extend FFI::Library - ffi_lib LIBRARY - - enum [:c1, :c2, :c3, :c4] - enum [:c5, 42, :c6, :c7, :c8] - enum [:c9, 42, :c10, :c11, 4242, :c12] - enum [:c13, 42, :c14, 4242, :c15, 424242, :c16, 42424242] - - attach_function :test_untagged_enum, [:int], :int - end - - module TestEnum3 - extend FFI::Library - ffi_lib LIBRARY - - enum :enum_type1, [:c1, :c2, :c3, :c4] - enum :enum_type2, [:c5, 42, :c6, :c7, :c8] - enum :enum_type3, [:c9, 42, :c10, :c11, 4242, :c12] - enum :enum_type4, [:c13, 42, :c14, 4242, :c15, 424242, :c16, 42424242] - - attach_function :test_tagged_typedef_enum1, [:enum_type1], :enum_type1 - attach_function :test_tagged_typedef_enum2, [:enum_type2], :enum_type2 - attach_function :test_tagged_typedef_enum3, [:enum_type3], :enum_type3 - attach_function :test_tagged_typedef_enum4, [:enum_type4], :enum_type4 - end - - # - # Errno fixtures - # - module LibTest - attach_function :setLastError, [ :int ], :void - end - - # - # ManagedStruct fixtures - # - module LibTest - attach_function :ptr_from_address, [ FFI::Platform::ADDRESS_SIZE == 32 ? :uint : :ulong_long ], :pointer - end - - class NoRelease < ManagedStruct - layout :i, :int - end - - class WhatClassAmI < ManagedStruct - layout :i, :int - def self.release; end - end - - class PleaseReleaseMe < ManagedStruct - layout :i, :int - @@count = 0 - def self.release - @@count += 1 - end - def self.wait_gc(count) - loop = 5 - while loop > 0 && @@count < count - loop -= 1 - if RUBY_PLATFORM =~ /java/ - require 'java' - java.lang.System.gc - else - GC.start - end - sleep 0.05 if @@count < count - end - end - end - - # - # Number fixtures - # - module LibTest - attach_function :ret_s8, [ :char ], :char - attach_function :ret_u8, [ :uchar ], :uchar - attach_function :ret_s16, [ :short ], :short - attach_function :ret_u16, [ :ushort ], :ushort - attach_function :ret_s32, [ :int ], :int - attach_function :ret_u32, [ :uint ], :uint - attach_function :ret_s64, [ :long_long ], :long_long - attach_function :ret_u64, [ :ulong_long ], :ulong_long - attach_function :ret_long, [ :long ], :long - attach_function :ret_ulong, [ :ulong ], :ulong - attach_function :set_s8, [ :char ], :void - attach_function :get_s8, [ ], :char - attach_function :set_float, [ :float ], :void - attach_function :get_float, [ ], :float - attach_function :set_double, [ :double ], :void - attach_function :get_double, [ ], :double - end - - PACK_VALUES = { - 's8' => [ 0x12 ], - 'u8' => [ 0x34 ], - 's16' => [ 0x5678 ], - 'u16' => [ 0x9abc ], - 's32' => [ 0x7654321f ], - 'u32' => [ 0xfee1babe ], - 'sL' => [ 0x1f2e3d4c ], - 'uL' => [ 0xf7e8d9ca ], - 's64' => [ 0x1eafdeadbeefa1b2 ], - #'f32' => [ 1.234567 ], # TODO: Why is this disabled? - 'f64' => [ 9.87654321 ] - } - - TYPE_MAP = { - 's8' => :char, 'u8' => :uchar, 's16' => :short, 'u16' => :ushort, - 's32' => :int, 'u32' => :uint, 's64' => :long_long, 'u64' => :ulong_long, - 'sL' => :long, 'uL' => :ulong, 'f32' => :float, 'f64' => :double - } - TYPES = TYPE_MAP.keys - - module LibTest - [ 's32', 'u32', 's64', 'u64' ].each do |rt| - TYPES.each do |t1| - TYPES.each do |t2| - TYPES.each do |t3| - begin - attach_function "pack_#{t1}#{t2}#{t3}_#{rt}", - [ TYPE_MAP[t1], TYPE_MAP[t2], TYPE_MAP[t3], :buffer_out ], :void - rescue FFI::NotFoundError - end - end - end - end - end - end - - # - # Pointer fixtures - # - module LibTest - attach_function :ptr_ret_int32_t, [ :pointer, :int ], :int - attach_function :ptr_from_address, [ FFI::Platform::ADDRESS_SIZE == 32 ? :uint : :ulong_long ], :pointer - attach_function :ptr_set_pointer, [ :pointer, :int, :pointer ], :void - end - - class ToPtrTest - def initialize(ptr) - @ptr = ptr - end - def to_ptr - @ptr - end - end - - require 'delegate' - class PointerDelegate < DelegateClass(FFI::Pointer) - def initialize(ptr) - super - @ptr = ptr - end - def to_ptr - @ptr - end - end - - class AutoPointerTestHelper - @@count = 0 - def self.release - @@count += 1 if @@count > 0 - end - def self.reset - @@count = 0 - end - def self.gc_everything(count) - loop = 5 - while @@count < count && loop > 0 - loop -= 1 - if RUBY_PLATFORM =~ /java/ - require "java" - java.lang.System.gc - else - GC.start - end - sleep 0.05 unless @@count == count - end - @@count = 0 - end - def self.finalizer - self.method(:release).to_proc - end - end - - # - # String fixtures - # - module LibTest - attach_function :ptr_ret_pointer, [ :pointer, :int], :string - attach_function :string_equals, [ :string, :string ], :int - attach_function :string_dummy, [ :string ], :void - end - - # - # Struct initialize fixtures - # - class StructWithInitialize < FFI::Struct - layout :string, :string - attr_accessor :magic - def initialize - super - self.magic = 42 - end - end - - # - # Struct fixtures - # - StructTypes = { - 's8' => :char, - 's16' => :short, - 's32' => :int, - 's64' => :long_long, - 'long' => :long, - 'f32' => :float, - 'f64' => :double - } - - module LibTest - attach_function :ptr_ret_pointer, [ :pointer, :int], :string - attach_function :ptr_ret_int32_t, [ :pointer, :int ], :int - attach_function :ptr_from_address, [ :ulong ], :pointer - attach_function :string_equals, [ :string, :string ], :int - [ 's8', 's16', 's32', 's64', 'f32', 'f64', 'long' ].each do |t| - attach_function "struct_align_#{t}", [ :pointer ], StructTypes[t] - end - end - - class PointerMember < FFI::Struct - layout :pointer, :pointer - end - - class StringMember < FFI::Struct - layout :string, :string - end - - module CallbackMember - extend FFI::Library - ffi_lib LIBRARY - callback :add, [ :int, :int ], :int - callback :sub, [ :int, :int ], :int - - class TestStruct < FFI::Struct - layout :add, :add, - :sub, :sub - end - - attach_function :struct_call_add_cb, [TestStruct, :int, :int], :int - attach_function :struct_call_sub_cb, [TestStruct, :int, :int], :int - end - - module LibTest - class NestedStruct < FFI::Struct - layout :i, :int - end - - class ContainerStruct < FFI::Struct - layout :first, :char, :ns, NestedStruct - end - - attach_function :struct_align_nested_struct, [ :pointer ], :int - attach_function :struct_make_container_struct, [ :int ], :pointer - - class StructWithArray < FFI::Struct - layout :first, :char, :a, [:int, 5] - end - - attach_function :struct_make_struct_with_array, [:int, :int, :int, :int, :int], :pointer - attach_function :struct_field_array, [:pointer], :pointer - - class BuggedStruct < FFI::Struct - layout :visible, :uchar, - :x, :uint, - :y, :uint, - :rx, :short, - :ry, :short, - :order, :uchar, - :size, :uchar - end - - attach_function :bugged_struct_size, [], :uint - end - - module StructCustomTypedef - extend FFI::Library - ffi_lib LIBRARY - typedef :uint, :fubar3_t - - class S < FFI::Struct - layout :a, :fubar3_t - end - end - - # - # Union fixtures - # - module LibTest - Types = { - 's8' => [:char, :c, 1], - 's16' => [:short, :s, 0xff0], - 's32' => [:int, :i, 0xff00], - 's64' => [:long_long, :j, 0xffff00], - 'long' => [:long, :l, 0xffff], - 'f32' => [:float, :f, 1.0001], - 'f64' => [:double, :d, 1.000000001] - } - - class TestUnion < FFI::Union - layout( :a, [:char, 10], - :i, :int, - :f, :float, - :d, :double, - :s, :short, - :l, :long, - :j, :long_long, - :c, :char ) - end - - Types.keys.each do |k| - attach_function "union_align_#{k}", [ :pointer ], Types[k][0] - attach_function "union_make_union_with_#{k}", [ Types[k][0] ], :pointer - end - - attach_function :union_size, [], :uint - end - - # - # Variadic fixtures - # - module LibTest - attach_function :pack_varargs, [ :buffer_out, :string, :varargs ], :void - end - - module Varargs - PACK_VALUES = { - 'c' => [ 0x12 ], - 'C' => [ 0x34 ], - 's' => [ 0x5678 ], - 'S' => [ 0x9abc ], - 'i' => [ 0x7654321f ], - 'I' => [ 0xfee1babe ], - 'l' => [ 0x1f2e3d4c ], - 'L' => [ 0xf7e8d9ca ], - 'j' => [ 0x1eafdeadbeefa1b2 ], - 'f' => [ 1.23456789 ], - 'd' => [ 9.87654321 ] - } - - TYPE_MAP = { - 'c' => :char, 'C' => :uchar, 's' => :short, 'S' => :ushort, - 'i' => :int, 'I' => :uint, 'j' => :long_long, 'J' => :ulong_long, - 'l' => :long, 'L' => :ulong, 'f' => :float, 'd' => :double - } - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/function_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/function_spec.rb deleted file mode 100644 index ab08f35..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/function_spec.rb +++ /dev/null @@ -1,92 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -describe FFI::Function do - module LibTest - extend FFI::Library - ffi_lib TestLibrary::PATH - attach_function :testFunctionAdd, [:int, :int, :pointer], :int - end - before do - @libtest = FFI::DynamicLibrary.open(TestLibrary::PATH, - FFI::DynamicLibrary::RTLD_LAZY | FFI::DynamicLibrary::RTLD_GLOBAL) - end - - it 'is initialized with a signature and a block' do - fn = FFI::Function.new(:int, []) { 5 } - expect(fn.call).to eql 5 - end - - it 'raises an error when passing a wrong signature' do - expect { FFI::Function.new([], :int).new { } }.to raise_error TypeError - end - - it 'returns a native pointer' do - expect(FFI::Function.new(:int, []) { }).to be_a_kind_of FFI::Pointer - end - - it 'can be used as callback from C passing to it a block' do - function_add = FFI::Function.new(:int, [:int, :int]) { |a, b| a + b } - expect(LibTest.testFunctionAdd(10, 10, function_add)).to eq(20) - end - - it 'can be used as callback from C passing to it a Proc object' do - function_add = FFI::Function.new(:int, [:int, :int], Proc.new { |a, b| a + b }) - expect(LibTest.testFunctionAdd(10, 10, function_add)).to eq(20) - end - - it 'can be used to wrap an existing function pointer' do - expect(FFI::Function.new(:int, [:int, :int], @libtest.find_function('testAdd')).call(10, 10)).to eq(20) - end - - it 'can be attached to a module' do - module Foo; end - fp = FFI::Function.new(:int, [:int, :int], @libtest.find_function('testAdd')) - fp.attach(Foo, 'add') - expect(Foo.add(10, 10)).to eq(20) - end - - it 'can be used to extend an object' do - fp = FFI::Function.new(:int, [:int, :int], @libtest.find_function('testAdd')) - foo = Object.new - class << foo - def singleton_class - class << self; self; end - end - end - fp.attach(foo.singleton_class, 'add') - expect(foo.add(10, 10)).to eq(20) - end - - it 'can wrap a blocking function' do - fp = FFI::Function.new(:void, [ :int ], @libtest.find_function('testBlocking'), :blocking => true) - threads = 10.times.map do |x| - Thread.new do - time = Time.now - fp.call(2) - expect(Time.now - time).to be >= 2 - end - end - threads.each { |t| t.join } - end - - it 'autorelease flag is set to true by default' do - fp = FFI::Function.new(:int, [:int, :int], @libtest.find_function('testAdd')) - expect(fp.autorelease?).to be true - end - - it 'can explicity free itself' do - fp = FFI::Function.new(:int, []) { } - fp.free - expect { fp.free }.to raise_error RuntimeError - end - - it 'can\'t explicity free itself if not previously allocated' do - fp = FFI::Function.new(:int, [:int, :int], @libtest.find_function('testAdd')) - expect { fp.free }.to raise_error RuntimeError - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/io_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/io_spec.rb deleted file mode 100644 index 22c238a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/io_spec.rb +++ /dev/null @@ -1,16 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -if false # disabled for #390 - describe "FFI::IO.for_fd" do - it "produces an IO wrapping the specified file descriptor" do - expect do - FFI::IO.for_fd(2, "r") - end.to_not raise_error - end - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/library_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/library_spec.rb deleted file mode 100644 index 4359b93..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/library_spec.rb +++ /dev/null @@ -1,276 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -describe "Library" do - describe ".enum_value" do - m = Module.new do - extend FFI::Library - enum :something, [:one, :two] - end - - it "should return a value for a valid key" do - expect(m.enum_value(:one)).to eq(0) - expect(m.enum_value(:two)).to eq(1) - end - - it "should return nil for an invalid key" do - expect(m.enum_value(:three)).to be nil - end - end - - describe "#ffi_convention" do - it "defaults to :default" do - m = Module.new do - extend FFI::Library - end - expect(m.ffi_convention).to eq(:default) - end - - it "should be settable" do - m = Module.new do - extend FFI::Library - end - - expect(m.ffi_convention).to eq(:default) - m.ffi_convention :stdcall - expect(m.ffi_convention).to eq(:stdcall) - end - end - - if FFI::Platform::OS =~ /windows|cygwin/ && FFI::Platform::ARCH == 'i386' - module LibTestStdcall - extend FFI::Library - ffi_lib TestLibrary::PATH - ffi_convention :stdcall - - class StructUCDP < FFI::Struct - layout :a1, :uchar, - :a2, :double, - :a3, :pointer - end - - attach_function :testStdcallManyParams, [ :pointer, :int8, :int16, :int32, :int64, - StructUCDP.by_value, StructUCDP.by_ref, :float, :double ], :void - end - - it "adds stdcall decoration: testStdcallManyParams@64" do - s = LibTestStdcall::StructUCDP.new - po = FFI::MemoryPointer.new :long - LibTestStdcall.testStdcallManyParams po, 1, 2, 3, 4, s, s, 1.0, 2.0 - end - end - - describe "ffi_lib" do - it "empty name list should raise error" do - expect { - Module.new do |m| - m.extend FFI::Library - ffi_lib - end - }.to raise_error(LoadError) - end - - end - - unless RbConfig::CONFIG['target_os'] =~ /mswin|mingw/ - it "attach_function with no library specified" do - expect { - Module.new do |m| - m.extend FFI::Library - attach_function :getpid, [ ], :uint - end - }.to raise_error - end - - it "attach_function :getpid from this process" do - expect { - expect(Module.new do |m| - m.extend FFI::Library - ffi_lib FFI::Library::CURRENT_PROCESS - attach_function :getpid, [ ], :uint - end.getpid).to eq(Process.pid) - }.not_to raise_error - end - - it "attach_function :getpid from [ 'c', 'libc.so.6'] " do - expect { - expect(Module.new do |m| - m.extend FFI::Library - ffi_lib [ 'c', 'libc.so.6' ] - attach_function :getpid, [ ], :uint - end.getpid).to eq(Process.pid) - }.not_to raise_error - end - - it "attach_function :getpid from [ 'libc.so.6', 'c' ] " do - expect { - expect(Module.new do |m| - m.extend FFI::Library - ffi_lib [ 'libc.so.6', 'c' ] - attach_function :getpid, [ ], :uint - end.getpid).to eq(Process.pid) - }.not_to raise_error - end - - it "attach_function :getpid from [ 'libfubar.so.0xdeadbeef', nil, 'c' ] " do - expect { - expect(Module.new do |m| - m.extend FFI::Library - ffi_lib [ 'libfubar.so.0xdeadbeef', nil, 'c' ] - attach_function :getpid, [ ], :uint - end.getpid).to eq(Process.pid) - }.not_to raise_error - end - - it "attach_function :getpid from [ 'libfubar.so.0xdeadbeef' ] " do - expect { - expect(Module.new do |m| - m.extend FFI::Library - ffi_lib 'libfubar.so.0xdeadbeef' - attach_function :getpid, [ ], :uint - end.getpid).to eq(Process.pid) - }.to raise_error(LoadError) - end - - it "attach_function :bool_return_true from [ File.expand_path(#{TestLibrary::PATH.inspect}) ]" do - mod = Module.new do |m| - m.extend FFI::Library - ffi_lib File.expand_path(TestLibrary::PATH) - attach_function :bool_return_true, [ ], :bool - end - expect(mod.bool_return_true).to be true - end - end - - def gvar_lib(name, type) - Module.new do |m| - m.extend FFI::Library - ffi_lib TestLibrary::PATH - attach_variable :gvar, "gvar_#{name}", type - attach_function :get, "gvar_#{name}_get", [], type - attach_function :set, "gvar_#{name}_set", [ type ], :void - end - end - - def gvar_test(name, type, val) - lib = gvar_lib(name, type) - lib.set(val) - expect(lib.gvar).to eq(val) - lib.set(0) - lib.gvar = val - expect(lib.get).to eq(val) - end - - [ 0, 127, -128, -1 ].each do |i| - it ":char variable" do - gvar_test("s8", :char, i) - end - end - - [ 0, 0x7f, 0x80, 0xff ].each do |i| - it ":uchar variable" do - gvar_test("u8", :uchar, i) - end - end - - [ 0, 0x7fff, -0x8000, -1 ].each do |i| - it ":short variable" do - gvar_test("s16", :short, i) - end - end - - [ 0, 0x7fff, 0x8000, 0xffff ].each do |i| - it ":ushort variable" do - gvar_test("u16", :ushort, i) - end - end - - [ 0, 0x7fffffff, -0x80000000, -1 ].each do |i| - it ":int variable" do - gvar_test("s32", :int, i) - end - end - - [ 0, 0x7fffffff, 0x80000000, 0xffffffff ].each do |i| - it ":uint variable" do - gvar_test("u32", :uint, i) - end - end - - [ 0, 0x7fffffffffffffff, -0x8000000000000000, -1 ].each do |i| - it ":long_long variable" do - gvar_test("s64", :long_long, i) - end - end - - [ 0, 0x7fffffffffffffff, 0x8000000000000000, 0xffffffffffffffff ].each do |i| - it ":ulong_long variable" do - gvar_test("u64", :ulong_long, i) - end - end - - if FFI::Platform::LONG_SIZE == 32 - [ 0, 0x7fffffff, -0x80000000, -1 ].each do |i| - it ":long variable" do - gvar_test("long", :long, i) - end - end - - [ 0, 0x7fffffff, 0x80000000, 0xffffffff ].each do |i| - it ":ulong variable" do - gvar_test("ulong", :ulong, i) - end - end - else - [ 0, 0x7fffffffffffffff, -0x8000000000000000, -1 ].each do |i| - it ":long variable" do - gvar_test("long", :long, i) - end - end - - [ 0, 0x7fffffffffffffff, 0x8000000000000000, 0xffffffffffffffff ].each do |i| - it ":ulong variable" do - gvar_test("ulong", :ulong, i) - end - end - end - - it "Pointer variable" do - lib = gvar_lib("pointer", :pointer) - val = FFI::MemoryPointer.new :long - lib.set(val) - expect(lib.gvar).to eq(val) - lib.set(nil) - lib.gvar = val - expect(lib.get).to eq(val) - end - - [ 0, 0x7fffffff, -0x80000000, -1 ].each do |i| - it "structure" do - class GlobalStruct < FFI::Struct - layout :data, :long - end - - lib = Module.new do |m| - m.extend FFI::Library - ffi_lib TestLibrary::PATH - attach_variable :gvar, "gvar_gstruct", GlobalStruct - attach_function :get, "gvar_gstruct_get", [], GlobalStruct - attach_function :set, "gvar_gstruct_set", [ GlobalStruct ], :void - end - - val = GlobalStruct.new - val[:data] = i - lib.set(val) - expect(lib.gvar[:data]).to eq(i) - val[:data] = 0 - lib.gvar[:data] = i - val = GlobalStruct.new(lib.get) - expect(val[:data]).to eq(i) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/long_double.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/long_double.rb deleted file mode 100644 index b16613b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/long_double.rb +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) -require 'bigdecimal' - -describe ":long_double arguments and return values" do - module LibTest - extend FFI::Library - ffi_lib TestLibrary::PATH - attach_function :add_f128, [ :long_double, :long_double ], :long_double - attach_function :ret_f128, [ :long_double ], :long_double - end - - it "returns first parameter" do - expect(LibTest.ret_f128(0.1)).to be_within(0.01).of(0.1) - end - - it "returns first parameter with high precision" do - ld = BigDecimal.new("1.234567890123456789") - tolerance = BigDecimal.new("0.0000000000000000001") - expect(LibTest.ret_f128(ld)).to be_within(tolerance).of(ld) - end - - it "add two long double numbers" do - expect(LibTest.add_f128(0.1, 0.2)).to be_within(0.01).of(0.3) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/managed_struct_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/managed_struct_spec.rb deleted file mode 100644 index 99e0f54..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/managed_struct_spec.rb +++ /dev/null @@ -1,67 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -describe "Managed Struct" do - include FFI - module ManagedStructTestLib - extend FFI::Library - ffi_lib TestLibrary::PATH - attach_function :ptr_from_address, [ FFI::Platform::ADDRESS_SIZE == 32 ? :uint : :ulong_long ], :pointer - end - - it "should raise an error if release() is not defined" do - class NoRelease < FFI::ManagedStruct ; layout :i, :int; end - expect { NoRelease.new(ManagedStructTestLib.ptr_from_address(0x12345678)) }.to raise_error(NoMethodError) - end - - it "should be the right class" do - class WhatClassAmI < FFI::ManagedStruct - layout :i, :int - def self.release - end - end - - expect(WhatClassAmI.new(ManagedStructTestLib.ptr_from_address(0x12345678)).class).to eq(WhatClassAmI) - end - - it "should build with self reference" do - class ClassWithSelfRef < FFI::ManagedStruct - layout :data, self.ptr - def self.release - end - end - - expect(ClassWithSelfRef.new(ManagedStructTestLib.ptr_from_address(0x12345678)).class).to eq(ClassWithSelfRef) - end - - it "should release memory properly" do - class PleaseReleaseMe < FFI::ManagedStruct - layout :i, :int - @@count = 0 - def self.release - @@count += 1 - end - def self.wait_gc(count) - loop = 5 - while loop > 0 && @@count < count - loop -= 1 - TestLibrary.force_gc - sleep 0.05 if @@count < count - end - end - end - - loop_count = 30 - wiggle_room = 5 - - expect(PleaseReleaseMe).to receive(:release).at_least(loop_count-wiggle_room).times - loop_count.times do - PleaseReleaseMe.new(ManagedStructTestLib.ptr_from_address(0x12345678)) - end - PleaseReleaseMe.wait_gc loop_count - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/memorypointer_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/memorypointer_spec.rb deleted file mode 100644 index d819f35..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/memorypointer_spec.rb +++ /dev/null @@ -1,78 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -MemoryPointer = FFI::MemoryPointer - -describe "MemoryPointer#total" do - it "MemoryPointer.new(:char, 1).total == 1" do - expect(MemoryPointer.new(:char, 1).total).to eq 1 - end - - it "MemoryPointer.new(:short, 1).total == 2" do - expect(MemoryPointer.new(:short, 1).total).to eq 2 - end - - it "MemoryPointer.new(:int, 1).total == 4" do - expect(MemoryPointer.new(:int, 1).total).to eq 4 - end - - it "MemoryPointer.new(:long_long, 1).total == 8" do - expect(MemoryPointer.new(:long_long, 1).total).to eq 8 - end - - it "MemoryPointer.new(1024).total == 1024" do - expect(MemoryPointer.new(1024).total).to eq 1024 - end -end -describe "MemoryPointer#read_array_of_long" do - it "foo" do - ptr = MemoryPointer.new(:long, 1024) - ptr[0].write_long 1234 - ptr[1].write_long 5678 - l = ptr.read_array_of_long(2) - expect(l[0]).to eq 1234 - expect(l[1]).to eq 5678 - end -end -describe "MemoryPointer argument" do - module Ptr - extend FFI::Library - ffi_lib FFI::Platform::LIBC - attach_function :memset, [ :pointer, :int, :ulong ], :pointer - attach_function :memcpy, [ :pointer, :pointer, :ulong ], :pointer - end - - it "Pointer passed correctly" do - p = MemoryPointer.new :int, 1 - ret = Ptr.memset(p, 0, p.total) - expect(ret).to eq p - end - - it "Data passed to native function" do - p = MemoryPointer.new :int, 1 - p2 = MemoryPointer.new :int, 1 - p2.put_int(0, 0x5eadbeef) - Ptr.memcpy(p, p2, p.total) - expect(p.get_int(0)).to eq p2.get_int(0) - expect(p2.get_int(0)).not_to eql 0 - end -end -describe "MemoryPointer return value" do - module Stdio - extend FFI::Library - ffi_lib FFI::Platform::LIBC - attach_function :fopen, [ :string, :string ], :pointer - attach_function :fclose, [ :pointer ], :int - attach_function :fwrite, [ :pointer, :ulong, :ulong, :string ], :ulong - end - - it "fopen returns non-nil" do - fp = Stdio.fopen("/dev/null", "w") - expect(fp).to_not be_nil - expect(Stdio.fclose(fp)).to eq 0 unless fp.nil? or fp.null? - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/number_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/number_spec.rb deleted file mode 100644 index acb9562..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/number_spec.rb +++ /dev/null @@ -1,247 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -describe "Function with primitive integer arguments" do - module LibTest - extend FFI::Library - ffi_lib TestLibrary::PATH - attach_function :ret_s8, [ :char ], :char - attach_function :ret_u8, [ :uchar ], :uchar - attach_function :ret_s16, [ :short ], :short - attach_function :ret_u16, [ :ushort ], :ushort - attach_function :ret_s32, [ :int ], :int - attach_function :ret_u32, [ :uint ], :uint - attach_function :ret_s64, [ :long_long ], :long_long - attach_function :ret_u64, [ :ulong_long ], :ulong_long - attach_function :ret_long, [ :long ], :long - attach_function :ret_ulong, [ :ulong ], :ulong - attach_function :set_s8, [ :char ], :void - attach_function :get_s8, [ ], :char - attach_function :set_float, [ :float ], :void - attach_function :get_float, [ ], :float - attach_function :set_double, [ :double ], :void - attach_function :get_double, [ ], :double - end - - it "int8.size" do - expect(FFI::TYPE_INT8.size).to eq(1) - end - - it "uint8.size" do - expect(FFI::TYPE_UINT8.size).to eq(1) - end - - it "int16.size" do - expect(FFI::TYPE_INT16.size).to eq(2) - end - - it "uint16.size" do - expect(FFI::TYPE_UINT16.size).to eq(2) - end - - it "int32.size" do - expect(FFI::TYPE_INT32.size).to eq(4) - end - - it "uint32.size" do - expect(FFI::TYPE_UINT32.size).to eq(4) - end - - it "int64.size" do - expect(FFI::TYPE_INT64.size).to eq(8) - end - - it "uint64.size" do - expect(FFI::TYPE_UINT64.size).to eq(8) - end - - it "float.size" do - expect(FFI::TYPE_FLOAT32.size).to eq(4) - end - - it "double.size" do - expect(FFI::TYPE_FLOAT64.size).to eq(8) - end - [ 0, 127, -128, -1 ].each do |i| - it ":char call(:char (#{i}))" do - expect(LibTest.ret_s8(i)).to eq(i) - end - end - [ 0, 0x7f, 0x80, 0xff ].each do |i| - it ":uchar call(:uchar (#{i}))" do - expect(LibTest.ret_u8(i)).to eq(i) - end - end - [ 0, 0x7fff, -0x8000, -1 ].each do |i| - it ":short call(:short (#{i}))" do - expect(LibTest.ret_s16(i)).to eq(i) - end - end - [ 0, 0x7fff, 0x8000, 0xffff ].each do |i| - it ":ushort call(:ushort (#{i}))" do - expect(LibTest.ret_u16(i)).to eq(i) - end - end - [ 0, 0x7fffffff, -0x80000000, -1 ].each do |i| - it ":int call(:int (#{i}))" do - expect(LibTest.ret_s32(i)).to eq(i) - end - end - [ 0, 0x7fffffff, 0x80000000, 0xffffffff ].each do |i| - it ":uint call(:uint (#{i}))" do - expect(LibTest.ret_u32(i)).to eq(i) - end - end - [ 0, 0x7fffffffffffffff, -0x8000000000000000, -1 ].each do |i| - it ":long_long call(:long_long (#{i}))" do - expect(LibTest.ret_s64(i)).to eq(i) - end - end - [ 0, 0x7fffffffffffffff, 0x8000000000000000, 0xffffffffffffffff ].each do |i| - it ":ulong_long call(:ulong_long (#{i}))" do - expect(LibTest.ret_u64(i)).to eq(i) - end - end - if FFI::Platform::LONG_SIZE == 32 - [ 0, 0x7fffffff, -0x80000000, -1 ].each do |i| - it ":long call(:long (#{i}))" do - expect(LibTest.ret_long(i)).to eq(i) - end - end - [ 0, 0x7fffffff, 0x80000000, 0xffffffff ].each do |i| - it ":ulong call(:ulong (#{i}))" do - expect(LibTest.ret_ulong(i)).to eq(i) - end - end - else - [ 0, 0x7fffffffffffffff, -0x8000000000000000, -1 ].each do |i| - it ":long call(:long (#{i}))" do - expect(LibTest.ret_long(i)).to eq(i) - end - end - [ 0, 0x7fffffffffffffff, 0x8000000000000000, 0xffffffffffffffff ].each do |i| - it ":ulong call(:ulong (#{i}))" do - expect(LibTest.ret_ulong(i)).to eq(i) - end - end - [ 0.0, 0.1, 1.1, 1.23 ].each do |f| - it ":float call(:double (#{f}))" do - LibTest.set_float(f) - expect((LibTest.get_float - f).abs).to be < 0.001 - end - end - [ 0.0, 0.1, 1.1, 1.23 ].each do |f| - it ":double call(:double (#{f}))" do - LibTest.set_double(f) - expect((LibTest.get_double - f).abs).to be < 0.001 - end - end - end -end -describe "Integer parameter range checking" do - [ 128, -129 ].each do |i| - it ":char call(:char (#{i}))" do - expect { expect(LibTest.ret_int8_t(i)).to eq(i) }.to raise_error - end - end - [ -1, 256 ].each do |i| - it ":uchar call(:uchar (#{i}))" do - expect { expect(LibTest.ret_u_int8_t(i)).to eq(i) }.to raise_error - end - end - [ 0x8000, -0x8001 ].each do |i| - it ":short call(:short (#{i}))" do - expect { expect(LibTest.ret_int16_t(i)).to eq(i) }.to raise_error - end - end - [ -1, 0x10000 ].each do |i| - it ":ushort call(:ushort (#{i}))" do - expect { expect(LibTest.ret_u_int16_t(i)).to eq(i) }.to raise_error - end - end - [ 0x80000000, -0x80000001 ].each do |i| - it ":int call(:int (#{i}))" do - expect { expect(LibTest.ret_int32_t(i)).to eq(i) }.to raise_error - end - end - [ -1, 0x100000000 ].each do |i| - it ":ushort call(:ushort (#{i}))" do - expect { expect(LibTest.ret_u_int32_t(i)).to eq(i) }.to raise_error - end - end -end -describe "Three different size Integer arguments" do - TYPE_MAP = { - 's8' => :char, 'u8' => :uchar, 's16' => :short, 'u16' => :ushort, - 's32' => :int, 'u32' => :uint, 's64' => :long_long, 'u64' => :ulong_long, - 'sL' => :long, 'uL' => :ulong, 'f32' => :float, 'f64' => :double - } - TYPES = TYPE_MAP.keys - module LibTest - extend FFI::Library - ffi_lib TestLibrary::PATH - - - [ 's32', 'u32', 's64', 'u64' ].each do |rt| - TYPES.each do |t1| - TYPES.each do |t2| - TYPES.each do |t3| - begin - attach_function "pack_#{t1}#{t2}#{t3}_#{rt}", - [ TYPE_MAP[t1], TYPE_MAP[t2], TYPE_MAP[t3], :buffer_out ], :void - rescue FFI::NotFoundError - end - end - end - end - end - end - - PACK_VALUES = { - 's8' => [ 0x12 ], - 'u8' => [ 0x34 ], - 's16' => [ 0x5678 ], - 'u16' => [ 0x9abc ], - 's32' => [ 0x7654321f ], - 'u32' => [ 0xfee1babe ], - 'sL' => [ 0x1f2e3d4c ], - 'uL' => [ 0xf7e8d9ca ], - 's64' => [ 0x1eafdeadbeefa1b2 ], -# 'f32' => [ 1.234567 ], - 'f64' => [ 9.87654321 ] - } - - def verify(p, off, t, v) - if t == 'f32' - expect(p.get_float32(off)).to eq(v) - elsif t == 'f64' - expect(p.get_float64(off)).to eq(v) - else - expect(p.get_int64(off)).to eq(v) - end - end - - PACK_VALUES.keys.each do |t1| - PACK_VALUES.keys.each do |t2| - PACK_VALUES.keys.each do |t3| - PACK_VALUES[t1].each do |v1| - PACK_VALUES[t2].each do |v2| - PACK_VALUES[t3].each do |v3| - it "call(#{TYPE_MAP[t1]} (#{v1}), #{TYPE_MAP[t2]} (#{v2}), #{TYPE_MAP[t3]} (#{v3}))" do - p = FFI::Buffer.new :long_long, 3 - LibTest.send("pack_#{t1}#{t2}#{t3}_s64", v1, v2, v3, p) - verify(p, 0, t1, v1) - verify(p, 8, t2, v2) - verify(p, 16, t3, v3) - end - end - end - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/platform_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/platform_spec.rb deleted file mode 100644 index 7c56719..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/platform_spec.rb +++ /dev/null @@ -1,114 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -describe "FFI::Platform::LIBSUFFIX" do - case OS - when "linux" - it "returns 'so'" do - expect(FFI::Platform::LIBSUFFIX).to eq('so') - end - when "windows" - it "returns 'dll'" do - expect(FFI::Platform::LIBSUFFIX).to eq('dll') - end - when "darwin" - it "returns 'dylib'" do - expect(FFI::Platform::LIBSUFFIX).to eq('dylib') - end - end -end - -describe "FFI::Platform::IS_WINDOWS" do - case OS - when "linux" - it "returns false" do - expect(FFI::Platform::IS_WINDOWS).to be false - end - when "windows" - it "returns true" do - expect(FFI::Platform::IS_WINDOWS).to be true - end - when "darwin" - it "returns false" do - expect(FFI::Platform::IS_WINDOWS).to be false - end - end -end - -describe "FFI::Platform::ARCH" do - it "returns the architecture type" do - expect(FFI::Platform::ARCH).to eq(CPU) - end -end - -describe "FFI::Platform::OS" do - case OS - when "linux" - it "returns 'linux' as a string" do - expect(FFI::Platform::OS).to eq('linux') - end - when "windows" - it "returns 'windows' as a string" do - expect(FFI::Platform::OS).to eq('windows') - end - when "darwin" - it "returns 'darwin' as a string" do - expect(FFI::Platform::OS).to eq('darwin') - end - end -end - -describe "FFI::Platform.windows?" do - case OS - when "linux" - it "returns false" do - expect(FFI::Platform.windows?).to be false - end - when "windows" - it "returns true" do - expect(FFI::Platform.windows?).to be true - end - when "darwin" - it "returns false" do - expect(FFI::Platform.windows?).to be false - end - end -end - -describe "FFI::Platform.mac?" do - case OS - when "linux" - it "returns false" do - expect(FFI::Platform.mac?).to be false - end - when "windows" - it "returns false" do - expect(FFI::Platform.mac?).to be false - end - when "darwin" - it "returns true" do - expect(FFI::Platform.mac?).to be true - end - end -end - -describe "FFI::Platform.unix?" do - case OS - when "linux" - it "returns true" do - expect(FFI::Platform.unix?).to be true - end - when "windows" - it "returns false" do - expect(FFI::Platform.unix?).to be false - end - when "darwin" - it "returns true" do - expect(FFI::Platform.unix?).to be true - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/pointer_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/pointer_spec.rb deleted file mode 100644 index 6071c71..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/pointer_spec.rb +++ /dev/null @@ -1,275 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) -require 'delegate' - -module PointerTestLib - extend FFI::Library - ffi_lib TestLibrary::PATH - begin - attach_function :ptr_ret_int32_t, [ :pointer, :int ], :int - rescue FFI::NotFoundError - # NetBSD uses #define instead of typedef for these - attach_function :ptr_ret_int32_t, :ptr_ret___int32_t, [ :pointer, :int ], :int - end - attach_function :ptr_from_address, [ FFI::Platform::ADDRESS_SIZE == 32 ? :uint : :ulong_long ], :pointer - attach_function :ptr_set_pointer, [ :pointer, :int, :pointer ], :void - attach_function :ptr_ret_pointer, [ :pointer, :int ], :pointer -end -describe "Pointer" do - include FFI - class ToPtrTest - def initialize(ptr) - @ptr = ptr - end - def to_ptr - @ptr - end - end - - it "Any object implementing #to_ptr can be passed as a :pointer parameter" do - memory = FFI::MemoryPointer.new :long_long - magic = 0x12345678 - memory.put_int32(0, magic) - tp = ToPtrTest.new(memory) - expect(PointerTestLib.ptr_ret_int32_t(tp, 0)).to eq(magic) - end - class PointerDelegate < DelegateClass(FFI::Pointer) - def initialize(ptr) - @ptr = ptr - end - def to_ptr - @ptr - end - end - - it "A DelegateClass(Pointer) can be passed as a :pointer parameter" do - memory = FFI::MemoryPointer.new :long_long - magic = 0x12345678 - memory.put_int32(0, magic) - ptr = PointerDelegate.new(memory) - expect(PointerTestLib.ptr_ret_int32_t(ptr, 0)).to eq(magic) - end - - it "Fixnum cannot be used as a Pointer argument" do - expect { PointerTestLib.ptr_ret_int32(0, 0) }.to raise_error - end - - it "Bignum cannot be used as a Pointer argument" do - expect { PointerTestLib.ptr_ret_int32(0xfee1deadbeefcafebabe, 0) }.to raise_error - end - - describe "pointer type methods" do - - it "#read_pointer" do - memory = FFI::MemoryPointer.new :pointer - PointerTestLib.ptr_set_pointer(memory, 0, PointerTestLib.ptr_from_address(0xdeadbeef)) - expect(memory.read_pointer.address).to eq(0xdeadbeef) - end - - it "#write_pointer" do - memory = FFI::MemoryPointer.new :pointer - memory.write_pointer(PointerTestLib.ptr_from_address(0xdeadbeef)) - expect(PointerTestLib.ptr_ret_pointer(memory, 0).address).to eq(0xdeadbeef) - end - - it "#read_array_of_pointer" do - values = [0x12345678, 0xfeedf00d, 0xdeadbeef] - memory = FFI::MemoryPointer.new :pointer, values.size - values.each_with_index do |address, j| - PointerTestLib.ptr_set_pointer(memory, j * FFI.type_size(:pointer), PointerTestLib.ptr_from_address(address)) - end - array = memory.read_array_of_pointer(values.size) - values.each_with_index do |address, j| - expect(array[j].address).to eq(address) - end - end - - end - - describe 'NULL' do - it 'should be obtained using Pointer::NULL constant' do - null_ptr = FFI::Pointer::NULL - expect(null_ptr).to be_null - end - it 'should be obtained passing address 0 to constructor' do - expect(FFI::Pointer.new(0)).to be_null - end - it 'should raise an error when attempting read/write operations on it' do - null_ptr = FFI::Pointer::NULL - expect { null_ptr.read_int }.to raise_error(FFI::NullPointerError) - expect { null_ptr.write_int(0xff1) }.to raise_error(FFI::NullPointerError) - end - it 'returns true when compared with nil' do - expect((FFI::Pointer::NULL == nil)).to be true - end - end - - it "Pointer.size returns sizeof pointer on platform" do - expect(FFI::Pointer.size).to eq((FFI::Platform::ADDRESS_SIZE / 8)) - end - - describe "#slice" do - before(:each) do - @mptr = FFI::MemoryPointer.new(:char, 12) - @mptr.put_uint(0, 0x12345678) - @mptr.put_uint(4, 0xdeadbeef) - end - - it "contents of sliced pointer matches original pointer at offset" do - expect(@mptr.slice(4, 4).get_uint(0)).to eq(0xdeadbeef) - end - - it "modifying sliced pointer is reflected in original pointer" do - @mptr.slice(4, 4).put_uint(0, 0xfee1dead) - expect(@mptr.get_uint(4)).to eq(0xfee1dead) - end - - it "access beyond bounds should raise IndexError" do - expect { @mptr.slice(4, 4).get_int(4) }.to raise_error(IndexError) - end - end - - describe "#type_size" do - it "should be same as FFI.type_size(type)" do - expect(FFI::MemoryPointer.new(:int, 1).type_size).to eq(FFI.type_size(:int)) - end - end -end - -describe "AutoPointer" do - loop_count = 30 - wiggle_room = 5 # GC rarely cleans up all objects. we can get most of them, and that's enough to determine if the basic functionality is working. - magic = 0x12345678 - - class AutoPointerTestHelper - @@count = 0 - def self.release - @@count += 1 if @@count > 0 - end - def self.reset - @@count = 0 - end - def self.gc_everything(count) - loop = 5 - while @@count < count && loop > 0 - loop -= 1 - TestLibrary.force_gc - sleep 0.05 unless @@count == count - end - @@count = 0 - end - def self.finalizer - self.method(:release).to_proc - end - end - class AutoPointerSubclass < FFI::AutoPointer - def self.release(ptr); end - end - - it "cleanup via default release method" do - expect(AutoPointerSubclass).to receive(:release).at_least(loop_count-wiggle_room).times - AutoPointerTestHelper.reset - loop_count.times do - # note that if we called - # AutoPointerTestHelper.method(:release).to_proc inline, we'd - # have a reference to the pointer and it would never get GC'd. - AutoPointerSubclass.new(PointerTestLib.ptr_from_address(magic)) - end - AutoPointerTestHelper.gc_everything loop_count - end - - it "cleanup when passed a proc" do - # NOTE: passing a proc is touchy, because it's so easy to create a memory leak. - # - # specifically, if we made an inline call to - # - # AutoPointerTestHelper.method(:release).to_proc - # - # we'd have a reference to the pointer and it would - # never get GC'd. - expect(AutoPointerTestHelper).to receive(:release).at_least(loop_count-wiggle_room).times - AutoPointerTestHelper.reset - loop_count.times do - FFI::AutoPointer.new(PointerTestLib.ptr_from_address(magic), - AutoPointerTestHelper.finalizer) - end - AutoPointerTestHelper.gc_everything loop_count - end - - it "cleanup when passed a method" do - expect(AutoPointerTestHelper).to receive(:release).at_least(loop_count-wiggle_room).times - AutoPointerTestHelper.reset - loop_count.times do - FFI::AutoPointer.new(PointerTestLib.ptr_from_address(magic), - AutoPointerTestHelper.method(:release)) - end - AutoPointerTestHelper.gc_everything loop_count - end - - it "can be used as the return type of a function" do - expect do - Module.new do - extend FFI::Library - ffi_lib TestLibrary::PATH - class CustomAutoPointer < FFI::AutoPointer - def self.release(ptr); end - end - attach_function :ptr_from_address, [ FFI::Platform::ADDRESS_SIZE == 32 ? :uint : :ulong_long ], CustomAutoPointer - end - end.not_to raise_error - end - - describe "#new" do - it "MemoryPointer argument raises TypeError" do - expect { FFI::AutoPointer.new(FFI::MemoryPointer.new(:int))}.to raise_error(::TypeError) - end - it "AutoPointer argument raises TypeError" do - expect { AutoPointerSubclass.new(AutoPointerSubclass.new(PointerTestLib.ptr_from_address(0))) }.to raise_error(::TypeError) - end - it "Buffer argument raises TypeError" do - expect { FFI::AutoPointer.new(FFI::Buffer.new(:int))}.to raise_error(::TypeError) - end - - end - - describe "#autorelease?" do - ptr_class = Class.new(FFI::AutoPointer) do - def self.release(ptr); end - end - - it "should be true by default" do - expect(ptr_class.new(FFI::Pointer.new(0xdeadbeef)).autorelease?).to be true - end - - it "should return false when autorelease=(false)" do - ptr = ptr_class.new(FFI::Pointer.new(0xdeadbeef)) - ptr.autorelease = false - expect(ptr.autorelease?).to be false - end - end - - describe "#type_size" do - ptr_class = Class.new(FFI::AutoPointer) do - def self.release(ptr); end - end - - it "type_size of AutoPointer should match wrapped Pointer" do - aptr = ptr_class.new(FFI::Pointer.new(:int, 0xdeadbeef)) - expect(aptr.type_size).to eq(FFI.type_size(:int)) - end - - it "[] offset should match wrapped Pointer" do - mptr = FFI::MemoryPointer.new(:int, 1024) - aptr = ptr_class.new(FFI::Pointer.new(:int, mptr)) - aptr[0].write_uint(0xfee1dead) - aptr[1].write_uint(0xcafebabe) - expect(mptr[0].read_uint).to eq(0xfee1dead) - expect(mptr[1].read_uint).to eq(0xcafebabe) - end - end -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/rbx/attach_function_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/rbx/attach_function_spec.rb deleted file mode 100644 index 1ab880e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/rbx/attach_function_spec.rb +++ /dev/null @@ -1,33 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -class Timeval < FFI::Struct - layout :tv_sec, :ulong, 0, :tv_usec, :ulong, 4 -end - -module LibC - extend FFI::Library - ffi_lib FFI::Library::LIBC - - attach_function :gettimeofday, [:pointer, :pointer], :int -end - -describe FFI::Library, "#attach_function" do - it "correctly returns a value for gettimeofday" do - t = Timeval.new - time = LibC.gettimeofday(t.pointer, nil) - expect(time).to be_kind_of(Integer) - end - - it "correctly populates a struct for gettimeofday" do - t = Timeval.new - time = LibC.gettimeofday(t.pointer, nil) - expect(t[:tv_sec]).to be_kind_of(Numeric) - expect(t[:tv_usec]).to be_kind_of(Numeric) - end -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/rbx/memory_pointer_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/rbx/memory_pointer_spec.rb deleted file mode 100644 index 0fe3597..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/rbx/memory_pointer_spec.rb +++ /dev/null @@ -1,130 +0,0 @@ -# coding: utf-8 -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -module CTest - extend FFI::Library - ffi_lib FFI::Library::LIBC - - attach_function :strcat, [:pointer, :pointer], :pointer -end - -describe "MemoryPointer" do - it "makes a pointer from a string" do - m = FFI::MemoryPointer.from_string("FFI is Awesome") - expect(m.total).to eq(15) - expect(m.type_size).to eq(1) - end - - it "does not make a pointer from non-strings" do - expect { FFI::MemoryPointer.from_string(nil) }.to raise_error(TypeError) - end - - it "makes a pointer from a string with multibyte characters" do - m = FFI::MemoryPointer.from_string("ã±ã‚“ã ") - expect(m.total).to eq(10) - expect(m.type_size).to eq(1) - end - - it "reads back a string" do - m = FFI::MemoryPointer.from_string("FFI is Awesome") - expect(m.read_string).to eq("FFI is Awesome") - end - - it "makes a pointer for a certain number of bytes" do - m = FFI::MemoryPointer.new(8) - m.write_array_of_int([1,2]) - expect(m.read_array_of_int(2)).to eq([1,2]) - end - - it "allows access to an element of the pointer (as an array)" do - m = FFI::MemoryPointer.new(:int, 2) - m.write_array_of_int([1,2]) - expect(m[0].read_int).to eq(1) - expect(m[1].read_int).to eq(2) - end - - it "allows writing as an int" do - m = FFI::MemoryPointer.new(:int) - m.write_int(1) - expect(m.read_int).to eq(1) - end - - it "allows writing as a long" do - m = FFI::MemoryPointer.new(:long) - m.write_long(10) - expect(m.read_long).to eq(10) - end - - it "raises an error if you try putting a long into a pointer of size 1" do - m = FFI::MemoryPointer.new(1) - expect { m.write_long(10) }.to raise_error - end - - it "raises an error if you try putting an int into a pointer of size 1" do - m = FFI::MemoryPointer.new(1) - expect { m.write_int(10) }.to raise_error - end -# it "does not raise IndexError for opaque pointers" do -# m = FFI::MemoryPointer.new(8) -# p2 = FFI::MemoryPointer.new(1024) -# m.write_long(p2.address) -# p = m.read_pointer -# lambda { p.write_int(10) }.should_not raise_error -# end - - it "makes a pointer for a certain type" do - m = FFI::MemoryPointer.new(:int) - m.write_int(10) - expect(m.read_int).to eq(10) - end - - it "makes a memory pointer for a number of a certain type" do - m = FFI::MemoryPointer.new(:int, 2) - m.write_array_of_int([1,2]) - expect(m.read_array_of_int(2)).to eq([1,2]) - end - - it "makes a pointer for an object responding to #size" do - m = FFI::MemoryPointer.new(Struct.new(:size).new(8)) - m.write_array_of_int([1,2]) - expect(m.read_array_of_int(2)).to eq([1,2]) - end - - it "makes a pointer for a number of an object responding to #size" do - m = FFI::MemoryPointer.new(Struct.new(:size).new(4), 2) - m.write_array_of_int([1,2]) - expect(m.read_array_of_int(2)).to eq([1,2]) - end - - it "MemoryPointer#address returns correct value" do - m = FFI::MemoryPointer.new(:long_long) - magic = 0x12345678 - m.write_long(magic) - expect(m.read_pointer.address).to eq(magic) - end - - it "MemoryPointer#null? returns true for zero value" do - m = FFI::MemoryPointer.new(:long_long) - m.write_long(0) - expect(m.read_pointer.null?).to be true - end - - it "MemoryPointer#null? returns false for non-zero value" do - m = FFI::MemoryPointer.new(:long_long) - m.write_long(0x12345678) - expect(m.read_pointer.null?).to be false - end - - it "initialize with block should execute block" do - block_executed = false - FFI::MemoryPointer.new(:pointer) do |ptr| - block_executed = true - end - expect(block_executed).to be true - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/rbx/spec_helper.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/rbx/spec_helper.rb deleted file mode 100644 index 6e009d8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/rbx/spec_helper.rb +++ /dev/null @@ -1,6 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "../spec_helper")) diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/rbx/struct_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/rbx/struct_spec.rb deleted file mode 100644 index a7ed85b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/rbx/struct_spec.rb +++ /dev/null @@ -1,18 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -class Timeval < FFI::Struct - layout :tv_sec, :ulong, 0, :tv_usec, :ulong, 4 -end - -describe FFI::Struct do - it "allows setting fields" do - t = Timeval.new - t[:tv_sec] = 12 - expect(t[:tv_sec]).to eq(12) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/spec_helper.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/spec_helper.rb deleted file mode 100644 index 00c43ec..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/spec_helper.rb +++ /dev/null @@ -1,95 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require 'rbconfig' -require 'fileutils' -require 'ffi' - -CPU = case RbConfig::CONFIG['host_cpu'].downcase - when /i[3456]86/ - # Darwin always reports i686, even when running in 64bit mode - if RbConfig::CONFIG['host_os'] =~ /darwin/ && 0xfee1deadbeef.is_a?(Fixnum) - "x86_64" - else - "i386" - end - - when /amd64|x86_64/ - "x86_64" - - when /ppc64|powerpc64/ - "powerpc64" - - when /ppc|powerpc/ - "powerpc" - - when /^arm/ - "arm" - - else - RbConfig::CONFIG['host_cpu'] - end - -OS = case RbConfig::CONFIG['host_os'].downcase - when /linux/ - "linux" - when /darwin/ - "darwin" - when /freebsd/ - "freebsd" - when /openbsd/ - "openbsd" - when /sunos|solaris/ - "solaris" - when /mswin|mingw/ - "win32" - else - RbConfig::CONFIG['host_os'].downcase - end - -def compile_library(path, lib) - - dir = File.expand_path(path, File.dirname(__FILE__)) - lib = "#{dir}/#{lib}" - if !File.exists?(lib) - ldshared = RbConfig::CONFIG["LDSHARED"] || "clang -dynamic -bundle" - libs = RbConfig::CONFIG["LIBS"] - dldflags = RbConfig::CONFIG["DLDFLAGS"] || "-Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress" - - puts Dir.pwd, dir, File.dirname(__FILE__) - - output = nil - FileUtils.cd(dir) do - output = system(*%{#{system('which gmake >/dev/null') && 'gmake' || 'make'} CPU=#{CPU} OS=#{OS} }.tap{|x| puts x.inspect}) - end - - if $?.exitstatus != 0 - puts "ERROR:\n#{output}" - raise "Unable to compile \"#{lib}\"" - end - end - - lib -end - -require "ffi" - -module TestLibrary - PATH = compile_library("fixtures", "libtest.#{FFI::Platform::LIBSUFFIX}") - - def self.force_gc - if RUBY_PLATFORM =~ /java/ - java.lang.System.gc - elsif defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx' - GC.run(true) - else - GC.start - end - end -end -module LibTest - extend FFI::Library - ffi_lib TestLibrary::PATH -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/string_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/string_spec.rb deleted file mode 100644 index fac11f0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/string_spec.rb +++ /dev/null @@ -1,118 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) -describe "String tests" do - include FFI - module StrLibTest - extend FFI::Library - ffi_lib TestLibrary::PATH - attach_function :ptr_ret_pointer, [ :pointer, :int], :string - attach_function :string_equals, [ :string, :string ], :int - attach_function :string_dummy, [ :string ], :void - attach_function :string_null, [ ], :string - end - - it "MemoryPointer#get_string returns a tainted string" do - mp = FFI::MemoryPointer.new 1024 - mp.put_string(0, "test\0") - str = mp.get_string(0) - expect(str.tainted?).to be true - end - - it "String returned by a method is tainted" do - mp = FFI::MemoryPointer.new :pointer - sp = FFI::MemoryPointer.new 1024 - sp.put_string(0, "test") - mp.put_pointer(0, sp) - str = StrLibTest.ptr_ret_pointer(mp, 0) - expect(str).to eq("test") - expect(str).to be_tainted - end - - it "Poison null byte raises error" do - s = "123\0abc" - expect { StrLibTest.string_equals(s, s) }.to raise_error - end - - it "Tainted String parameter should throw a SecurityError" do - $SAFE = 1 - str = "test" - str.taint - begin - expect(LibTest.string_equals(str, str)).to be false - rescue SecurityError - end - end if false - it "casts nil as NULL pointer" do - expect(StrLibTest.string_dummy(nil)).to be_nil - end - - it "return nil for NULL char*" do - expect(StrLibTest.string_null).to be_nil - end - - it "reads an array of strings until encountering a NULL pointer" do - strings = ["foo", "bar", "baz", "testing", "ffi"] - ptrary = FFI::MemoryPointer.new(:pointer, 6) - ary = strings.inject([]) do |a, str| - f = FFI::MemoryPointer.new(1024) - f.put_string(0, str) - a << f - end - ary.insert(3, nil) - ptrary.write_array_of_pointer(ary) - expect(ptrary.get_array_of_string(0)).to eq(["foo", "bar", "baz"]) - end - - it "reads an array of strings of the size specified, substituting nil when a pointer is NULL" do - strings = ["foo", "bar", "baz", "testing", "ffi"] - ptrary = FFI::MemoryPointer.new(:pointer, 6) - ary = strings.inject([]) do |a, str| - f = FFI::MemoryPointer.new(1024) - f.put_string(0, str) - a << f - end - ary.insert(2, nil) - ptrary.write_array_of_pointer(ary) - expect(ptrary.get_array_of_string(0, 4)).to eq(["foo", "bar", nil, "baz"]) - end - - it "reads an array of strings, taking a memory offset parameter" do - strings = ["foo", "bar", "baz", "testing", "ffi"] - ptrary = FFI::MemoryPointer.new(:pointer, 5) - ary = strings.inject([]) do |a, str| - f = FFI::MemoryPointer.new(1024) - f.put_string(0, str) - a << f - end - ptrary.write_array_of_pointer(ary) - expect(ptrary.get_array_of_string(2 * FFI.type_size(:pointer), 3)).to eq(["baz", "testing", "ffi"]) - end - - it "raises an IndexError when trying to read an array of strings out of bounds" do - strings = ["foo", "bar", "baz", "testing", "ffi"] - ptrary = FFI::MemoryPointer.new(:pointer, 5) - ary = strings.inject([]) do |a, str| - f = FFI::MemoryPointer.new(1024) - f.put_string(0, str) - a << f - end - ptrary.write_array_of_pointer(ary) - expect { ptrary.get_array_of_string(0, 6) }.to raise_error - end - - it "raises an IndexError when trying to read an array of strings using a negative offset" do - strings = ["foo", "bar", "baz", "testing", "ffi"] - ptrary = FFI::MemoryPointer.new(:pointer, 5) - ary = strings.inject([]) do |a, str| - f = FFI::MemoryPointer.new(1024) - f.put_string(0, str) - a << f - end - ptrary.write_array_of_pointer(ary) - expect { ptrary.get_array_of_string(-1) }.to raise_error - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/strptr_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/strptr_spec.rb deleted file mode 100644 index a6400f4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/strptr_spec.rb +++ /dev/null @@ -1,50 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -describe "functions returning :strptr" do - - it "can attach function with :strptr return type" do - expect do - Module.new do - extend FFI::Library - ffi_lib FFI::Library::LIBC - if !FFI::Platform.windows? - attach_function :strdup, [ :string ], :strptr - else - attach_function :_strdup, [ :string ], :strptr - end - end - end.not_to raise_error - end - - module StrPtr - extend FFI::Library - ffi_lib FFI::Library::LIBC - attach_function :free, [ :pointer ], :void - if !FFI::Platform.windows? - attach_function :strdup, [ :string ], :strptr - else - attach_function :strdup, :_strdup, [ :string ], :strptr - end - end - - it "should return [ String, Pointer ]" do - result = StrPtr.strdup("test") - expect(result[0].is_a?(String)).to be true - expect(result[1].is_a?(FFI::Pointer)).to be true - end - - it "should return the correct value" do - result = StrPtr.strdup("test") - expect(result[0]).to eq("test") - end - - it "should return non-NULL pointer" do - result = StrPtr.strdup("test") - expect(result[1]).not_to be_null - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/struct_by_ref_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/struct_by_ref_spec.rb deleted file mode 100644 index 0858423..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/struct_by_ref_spec.rb +++ /dev/null @@ -1,43 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -describe FFI::Struct, ' by_ref' do - before :all do - @struct_class = struct_class = Class.new(FFI::Struct) do - layout :a, :pointer - end - - @api = Module.new do - extend FFI::Library - ffi_lib TestLibrary::PATH - fn = FFI::Type::POINTER.size == FFI::Type::LONG.size ? :ret_ulong : :ret_u64 - attach_function :struct_test, fn, [ struct_class.by_ref ], :pointer - end - end - - it "should accept instances of exact struct class" do - s = @struct_class.new - expect(@api.struct_test(s)).to eq(s.pointer) - end - - it "should accept nil" do - expect(@api.struct_test(nil)).to be_null - end - - it "should reject other types" do - expect { expect(@api.struct_test('test')).to be_nil }.to raise_error(TypeError) - end - - it "should reject instances of other struct classes" do - other_class = Class.new(FFI::Struct) do - layout :a, :pointer - end - - expect { @api.struct_test(other_class.new) }.to raise_error(TypeError) - end -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/struct_callback_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/struct_callback_spec.rb deleted file mode 100644 index 7cab301..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/struct_callback_spec.rb +++ /dev/null @@ -1,69 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -describe FFI::Struct, ' with inline callback functions' do - it 'should be able to define inline callback field' do - expect(module CallbackMember1 - extend FFI::Library - ffi_lib TestLibrary::PATH - DUMMY_CB = callback :dummy_cb, [ :int ], :int - class TestStruct < FFI::Struct - layout \ - :add, callback([ :int, :int ], :int), - :sub, callback([ :int, :int ], :int), - :cb_with_cb_parameter, callback([ DUMMY_CB, :int ], :int) - end - attach_function :struct_call_add_cb, [TestStruct, :int, :int], :int - attach_function :struct_call_sub_cb, [TestStruct, :int, :int], :int - end).to be_an_instance_of FFI::Function - end - - it 'should take methods as callbacks' do - module CallbackMember2 - extend FFI::Library - ffi_lib TestLibrary::PATH - class TestStruct < FFI::Struct - layout \ - :add, callback([ :int, :int ], :int), - :sub, callback([ :int, :int ], :int) - end - attach_function :struct_call_add_cb, [TestStruct, :int, :int], :int - attach_function :struct_call_sub_cb, [TestStruct, :int, :int], :int - end - module StructCallbacks - def self.add a, b - a+b - end - end - - ts = CallbackMember2::TestStruct.new - ts[:add] = StructCallbacks.method(:add) - - expect(CallbackMember2.struct_call_add_cb(ts, 1, 2)).to eq(3) - end - - it 'should return callable object from []' do - module CallbackMember3 - extend FFI::Library - ffi_lib TestLibrary::PATH - class TestStruct < FFI::Struct - layout \ - :add, callback([ :int, :int ], :int), - :sub, callback([ :int, :int ], :int) - end - attach_function :struct_call_add_cb, [TestStruct, :int, :int], :int - attach_function :struct_call_sub_cb, [TestStruct, :int, :int], :int - end - - s = CallbackMember3::TestStruct.new - add = Proc.new { |a,b| a+b} - s[:add] = add - fn = s[:add] - expect(fn.respond_to?(:call)).to be true - expect(fn.call(1, 2)).to eq(3) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/struct_initialize_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/struct_initialize_spec.rb deleted file mode 100644 index beb2477..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/struct_initialize_spec.rb +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -describe FFI::Struct, ' with an initialize function' do - it "should call the initialize function" do - class StructWithInitialize < FFI::Struct - layout :string, :string - attr_accessor :magic - def initialize - super - self.magic = 42 - end - end - expect(StructWithInitialize.new.magic).to eq(42) - end -end - -describe FFI::ManagedStruct, ' with an initialize function' do - it "should call the initialize function" do - class ManagedStructWithInitialize < FFI::ManagedStruct - layout :string, :string - attr_accessor :magic - def initialize - super FFI::MemoryPointer.new(:pointer).put_int(0, 0x1234).get_pointer(0) - self.magic = 42 - end - def self.release;end - end - expect(ManagedStructWithInitialize.new.magic).to eq(42) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/struct_packed_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/struct_packed_spec.rb deleted file mode 100644 index 8132be7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/struct_packed_spec.rb +++ /dev/null @@ -1,50 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -describe FFI::Struct do - it "packed :char followed by :int should have size of 5" do - expect(Class.new(FFI::Struct) do - packed - layout :c, :char, :i, :int - end.size).to eq(5) - end - - it "packed :char followed by :int should have alignment of 1" do - expect(Class.new(FFI::Struct) do - packed - layout :c, :char, :i, :int - end.alignment).to eq(1) - end - - it "packed(2) :char followed by :int should have size of 6" do - expect(Class.new(FFI::Struct) do - packed 2 - layout :c, :char, :i, :int - end.size).to eq(6) - end - - it "packed(2) :char followed by :int should have alignment of 2" do - expect(Class.new(FFI::Struct) do - packed 2 - layout :c, :char, :i, :int - end.alignment).to eq(2) - end - - it "packed :short followed by int should have size of 6" do - expect(Class.new(FFI::Struct) do - packed - layout :s, :short, :i, :int - end.size).to eq(6) - end - - it "packed :short followed by int should have alignment of 1" do - expect(Class.new(FFI::Struct) do - packed - layout :s, :short, :i, :int - end.alignment).to eq(1) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/struct_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/struct_spec.rb deleted file mode 100644 index 9cb08bc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/struct_spec.rb +++ /dev/null @@ -1,882 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -describe "Struct aligns fields correctly" do - it "char, followed by an int" do - class CIStruct < FFI::Struct - layout :c => :char, :i => :int - end - expect(CIStruct.size).to eq(8) - end - - it "short, followed by an int" do - class SIStruct < FFI::Struct - layout :s => :short, :i => :int - end - expect(SIStruct.size).to eq(8) - end - - it "int, followed by an int" do - class IIStruct < FFI::Struct - layout :i1 => :int, :i => :int - end - expect(IIStruct.size).to eq(8) - end - - it "long long, followed by an int" do - class LLIStruct < FFI::Struct - layout :l => :long_long, :i => :int - end - expect(LLIStruct.size).to eq(FFI::TYPE_UINT64.alignment == 4 ? 12 : 16) - end -end - -describe "Struct tests" do - StructTypes = { - 's8' => :char, - 's16' => :short, - 's32' => :int, - 's64' => :long_long, - 'long' => :long, - 'f32' => :float, - 'f64' => :double - } - module LibTest - extend FFI::Library - ffi_lib TestLibrary::PATH - attach_function :ptr_ret_pointer, [ :pointer, :int], :string - begin - attach_function :ptr_ret_int32_t, [ :pointer, :int ], :int - rescue FFI::NotFoundError - # NetBSD uses #define instead of typedef for these - attach_function :ptr_ret_int32_t, :ptr_ret___int32_t, [ :pointer, :int ], :int - end - attach_function :ptr_from_address, [ :ulong ], :pointer - attach_function :string_equals, [ :string, :string ], :int - [ 's8', 's16', 's32', 's64', 'f32', 'f64', 'long' ].each do |t| - attach_function "struct_align_#{t}", [ :pointer ], StructTypes[t] - end - end - class PointerMember < FFI::Struct - layout :pointer, :pointer - end - class StringMember < FFI::Struct - layout :string, :string - end - - it "Struct#[:pointer]" do - magic = 0x12345678 - mp = FFI::MemoryPointer.new :long - mp.put_long(0, magic) - smp = FFI::MemoryPointer.new :pointer - smp.put_pointer(0, mp) - s = PointerMember.new smp - expect(s[:pointer]).to eq(mp) - end - - it "Struct#[:pointer].nil? for NULL value" do - magic = 0x12345678 - mp = FFI::MemoryPointer.new :long - mp.put_long(0, magic) - smp = FFI::MemoryPointer.new :pointer - smp.put_pointer(0, nil) - s = PointerMember.new smp - expect(s[:pointer].null?).to be true - end - - it "Struct#[:pointer]=" do - magic = 0x12345678 - mp = FFI::MemoryPointer.new :long - mp.put_long(0, magic) - smp = FFI::MemoryPointer.new :pointer - s = PointerMember.new smp - s[:pointer] = mp - expect(smp.get_pointer(0)).to eq(mp) - end - - it "Struct#[:pointer]=struct" do - smp = FFI::MemoryPointer.new :pointer - s = PointerMember.new smp - expect { s[:pointer] = s }.not_to raise_error Exception - expect { foo = s[:pointer] }.not_to raise_error Exception - end - - it "Struct#[:pointer]=nil" do - smp = FFI::MemoryPointer.new :pointer - s = PointerMember.new smp - s[:pointer] = nil - expect(smp.get_pointer(0)).to be_null - end - - it "Struct#[:string]" do - magic = "test" - mp = FFI::MemoryPointer.new 1024 - mp.put_string(0, magic) - smp = FFI::MemoryPointer.new :pointer - smp.put_pointer(0, mp) - s = StringMember.new smp - expect(s[:string]).to eq(magic) - end - - it "Struct#[:string].nil? for NULL value" do - smp = FFI::MemoryPointer.new :pointer - smp.put_pointer(0, nil) - s = StringMember.new smp - expect(s[:string]).to be_nil - end - - it "Struct#layout works with :name, :type pairs" do - class PairLayout < FFI::Struct - layout :a, :int, :b, :long_long - end - ll_off = (FFI::TYPE_UINT64.alignment == 4 ? 4 : 8) - expect(PairLayout.size).to eq((ll_off + 8)) - mp = FFI::MemoryPointer.new(PairLayout.size) - s = PairLayout.new mp - s[:a] = 0x12345678 - expect(mp.get_int(0)).to eq(0x12345678) - s[:b] = 0xfee1deadbeef - expect(mp.get_int64(ll_off)).to eq(0xfee1deadbeef) - end - - it "Struct#layout works with :name, :type, offset tuples" do - class PairLayout < FFI::Struct - layout :a, :int, 0, :b, :long_long, 4 - end - expect(PairLayout.size).to eq((FFI::TYPE_UINT64.alignment == 4 ? 12 : 16)) - mp = FFI::MemoryPointer.new(PairLayout.size) - s = PairLayout.new mp - s[:a] = 0x12345678 - expect(mp.get_int(0)).to eq(0x12345678) - s[:b] = 0xfee1deadbeef - expect(mp.get_int64(4)).to eq(0xfee1deadbeef) - end - - it "Struct#layout works with mixed :name,:type and :name,:type,offset" do - class MixedLayout < FFI::Struct - layout :a, :int, :b, :long_long, 4 - end - expect(MixedLayout.size).to eq((FFI::TYPE_UINT64.alignment == 4 ? 12 : 16)) - mp = FFI::MemoryPointer.new(MixedLayout.size) - s = MixedLayout.new mp - s[:a] = 0x12345678 - expect(mp.get_int(0)).to eq(0x12345678) - s[:b] = 0xfee1deadbeef - expect(mp.get_int64(4)).to eq(0xfee1deadbeef) - end - - rb_maj, rb_min = RUBY_VERSION.split('.') - if rb_maj.to_i >= 1 && rb_min.to_i >= 9 || RUBY_PLATFORM =~ /java/ - it "Struct#layout withs with a hash of :name => type" do - class HashLayout < FFI::Struct - layout :a => :int, :b => :long_long - end - ll_off = (FFI::TYPE_UINT64.alignment == 4 ? 4 : 8) - expect(HashLayout.size).to eq(ll_off + 8) - mp = FFI::MemoryPointer.new(HashLayout.size) - s = HashLayout.new mp - s[:a] = 0x12345678 - expect(mp.get_int(0)).to eq(0x12345678) - s[:b] = 0xfee1deadbeef - expect(mp.get_int64(ll_off)).to eq(0xfee1deadbeef) - end - end - - it "subclass overrides initialize without calling super" do - class InitializeWithoutSuper < FFI::Struct - layout :a, :int, :b, :long_long, :d, [:double, 2] - - def initialize(a, b) - self[:a] = a - self[:b] = b - self[:d][0] = 1.2 - self[:d][1] = 3.4 - end - - end - s = InitializeWithoutSuper.new(0x1eefbeef, 0xdeadcafebabe) - expect(s[:a]).to eq(0x1eefbeef) - expect(s[:b]).to eq(0xdeadcafebabe) - end - - it "Can use Struct subclass as parameter type" do - expect(module StructParam - extend FFI::Library - ffi_lib TestLibrary::PATH - class TestStruct < FFI::Struct - layout :c, :char - end - attach_function :struct_field_s8, [ TestStruct.in ], :char - end).to be_an_instance_of FFI::Function - end - - it "Can use Struct subclass as IN parameter type" do - expect(module StructParam2 - extend FFI::Library - ffi_lib TestLibrary::PATH - class TestStruct < FFI::Struct - layout :c, :char - end - attach_function :struct_field_s8, [ TestStruct.in ], :char - end).to be_an_instance_of FFI::Function - end - - it "Can use Struct subclass as OUT parameter type" do - expect(module StructParam3 - extend FFI::Library - ffi_lib TestLibrary::PATH - class TestStruct < FFI::Struct - layout :c, :char - end - attach_function :struct_field_s8, [ TestStruct.out ], :char - end).to be_an_instance_of FFI::Function - end - - it "can be passed directly as a :pointer parameter" do - class TestStruct < FFI::Struct - layout :i, :int - end - s = TestStruct.new - s[:i] = 0x12 - expect(LibTest.ptr_ret_int32_t(s, 0)).to eq(0x12) - end - - it ":char member aligned correctly" do - class AlignChar < FFI::Struct - layout :c, :char, :v, :char - end - s = AlignChar.new - s[:v] = 0x12 - expect(LibTest.struct_align_s8(s.pointer)).to eq(0x12) - end - - it ":short member aligned correctly" do - class AlignShort < FFI::Struct - layout :c, :char, :v, :short - end - s = AlignShort.alloc_in - s[:v] = 0x1234 - expect(LibTest.struct_align_s16(s.pointer)).to eq(0x1234) - end - - it ":int member aligned correctly" do - class AlignInt < FFI::Struct - layout :c, :char, :v, :int - end - s = AlignInt.alloc_in - s[:v] = 0x12345678 - expect(LibTest.struct_align_s32(s.pointer)).to eq(0x12345678) - end - - it ":long_long member aligned correctly" do - class AlignLongLong < FFI::Struct - layout :c, :char, :v, :long_long - end - s = AlignLongLong.alloc_in - s[:v] = 0x123456789abcdef0 - expect(LibTest.struct_align_s64(s.pointer)).to eq(0x123456789abcdef0) - end - - it ":long member aligned correctly" do - class AlignLong < FFI::Struct - layout :c, :char, :v, :long - end - s = AlignLong.alloc_in - s[:v] = 0x12345678 - expect(LibTest.struct_align_long(s.pointer)).to eq(0x12345678) - end - - it ":float member aligned correctly" do - class AlignFloat < FFI::Struct - layout :c, :char, :v, :float - end - s = AlignFloat.alloc_in - s[:v] = 1.23456 - expect((LibTest.struct_align_f32(s.pointer) - 1.23456).abs).to be < 0.00001 - end - - it ":double member aligned correctly" do - class AlignDouble < FFI::Struct - layout :c, :char, :v, :double - end - s = AlignDouble.alloc_in - s[:v] = 1.23456789 - expect((LibTest.struct_align_f64(s.pointer) - 1.23456789).abs).to be < 0.00000001 - end - - it ":ulong, :pointer struct" do - class ULPStruct < FFI::Struct - layout :ul, :ulong, :p, :pointer - end - s = ULPStruct.alloc_in - s[:ul] = 0xdeadbeef - s[:p] = LibTest.ptr_from_address(0x12345678) - expect(s.pointer.get_ulong(0)).to eq(0xdeadbeef) - end - def test_num_field(type, v) - klass = Class.new(FFI::Struct) - klass.layout :v, type, :dummy, :long - - s = klass.new - s[:v] = v - expect(s.pointer.send("get_#{type.to_s}", 0)).to eq(v) - s.pointer.send("put_#{type.to_s}", 0, 0) - expect(s[:v]).to eq(0) - end - def self.int_field_test(type, values) - values.each do |v| - it "#{type} field r/w (#{v.to_s(16)})" do - test_num_field(type, v) - end - end - end - int_field_test(:char, [ 0, 127, -128, -1 ]) - int_field_test(:uchar, [ 0, 0x7f, 0x80, 0xff ]) - int_field_test(:short, [ 0, 0x7fff, -0x8000, -1 ]) - int_field_test(:ushort, [ 0, 0x7fff, 0x8000, 0xffff ]) - int_field_test(:int, [ 0, 0x7fffffff, -0x80000000, -1 ]) - int_field_test(:uint, [ 0, 0x7fffffff, 0x80000000, 0xffffffff ]) - int_field_test(:long_long, [ 0, 0x7fffffffffffffff, -0x8000000000000000, -1 ]) - int_field_test(:ulong_long, [ 0, 0x7fffffffffffffff, 0x8000000000000000, 0xffffffffffffffff ]) - if FFI::Platform::LONG_SIZE == 32 - int_field_test(:long, [ 0, 0x7fffffff, -0x80000000, -1 ]) - int_field_test(:ulong, [ 0, 0x7fffffff, 0x80000000, 0xffffffff ]) - else - int_field_test(:long, [ 0, 0x7fffffffffffffff, -0x8000000000000000, -1 ]) - int_field_test(:ulong, [ 0, 0x7fffffffffffffff, 0x8000000000000000, 0xffffffffffffffff ]) - end - - it ":float field r/w" do - klass = Class.new(FFI::Struct) - klass.layout :v, :float, :dummy, :long - - s = klass.new - value = 1.23456 - s[:v] = value - expect((s.pointer.get_float(0) - value).abs).to be < 0.0001 - end - - it ":double field r/w" do - klass = Class.new(FFI::Struct) - klass.layout :v, :double, :dummy, :long - - s = klass.new - value = 1.23456 - s[:v] = value - expect((s.pointer.get_double(0) - value).abs).to be < 0.0001 - end - module EnumFields - extend FFI::Library - TestEnum = enum :test_enum, [:c1, 10, :c2, 20, :c3, 30, :c4, 40] - class TestStruct < FFI::Struct - layout :a, :int, :c, :test_enum, - :d, [ TestEnum, TestEnum.symbols.length ] - end - end - - it ":enum field r/w" do - s = EnumFields::TestStruct.new - s[:c] = :c3 - - expect(s.pointer.get_uint(FFI::Type::INT32.size)).to eq(30) - expect(s[:c]).to eq(:c3) - end - - it "array of :enum field" do - s = EnumFields::TestStruct.new - EnumFields::TestEnum.symbols.each_with_index do |val, i| - s[:d][i] = val - end - - EnumFields::TestEnum.symbols.each_with_index do |val, i| - expect(s.pointer.get_uint(FFI::Type::INT32.size * (2 + i))).to eq(EnumFields::TestEnum[val]) - end - - s[:d].each_with_index do |val, i| - expect(val).to eq(EnumFields::TestEnum.symbols[i]) - end - end - - module CallbackMember - extend FFI::Library - ffi_lib TestLibrary::PATH - callback :add, [ :int, :int ], :int - callback :sub, [ :int, :int ], :int - class TestStruct < FFI::Struct - layout :add, :add, - :sub, :sub - end - attach_function :struct_call_add_cb, [TestStruct.in, :int, :int], :int - attach_function :struct_call_sub_cb, [TestStruct.in, :int, :int], :int - end - - it "Can have CallbackInfo struct field" do - s = CallbackMember::TestStruct.new - add_proc = lambda { |a, b| a+b } - sub_proc = lambda { |a, b| a-b } - s[:add] = add_proc - s[:sub] = sub_proc - expect(CallbackMember.struct_call_add_cb(s, 40, 2)).to eq(42) - expect(CallbackMember.struct_call_sub_cb(s, 44, 2)).to eq(42) - end - - it "Can return its members as a list" do - class TestStruct < FFI::Struct - layout :a, :int, :b, :int, :c, :int - end - expect(TestStruct.members).to include(:a, :b, :c) - end - - it "Can return its instance members and values as lists" do - class TestStruct < FFI::Struct - layout :a, :int, :b, :int, :c, :int - end - s = TestStruct.new - expect(s.members).to include(:a, :b, :c) - s[:a] = 1 - s[:b] = 2 - s[:c] = 3 - expect(s.values).to include(1, 2, 3) - end - - it 'should return an ordered field/offset pairs array' do - class TestStruct < FFI::Struct - layout :a, :int, :b, :int, :c, :int - end - s = TestStruct.new - expect(s.offsets).to eq([[:a, 0], [:b, 4], [:c, 8]]) - expect(TestStruct.offsets).to eq([[:a, 0], [:b, 4], [:c, 8]]) - end - - it "Struct#offset_of returns offset of field within struct" do - class TestStruct < FFI::Struct - layout :a, :int, :b, :int, :c, :int - end - expect(TestStruct.offset_of(:a)).to eq(0) - expect(TestStruct.offset_of(:b)).to eq(4) - expect(TestStruct.offset_of(:c)).to eq(8) - end -end - -describe FFI::Struct, ".layout" do - module FFISpecs - module LibTest - extend FFI::Library - ffi_lib TestLibrary::PATH - begin - attach_function :ptr_ret_int32_t, [ :pointer, :int ], :int - rescue FFI::NotFoundError - # NetBSD uses #define instead of typedef for these - attach_function :ptr_ret_int32_t, :ptr_ret___int32_t, [ :pointer, :int ], :int - end - end - end - - describe "when derived class is not assigned to any constant" do - it "resolves a built-in type" do - klass = Class.new FFI::Struct - klass.layout :number, :int - - instance = klass.new - instance[:number] = 0xA1 - expect(FFISpecs::LibTest.ptr_ret_int32_t(instance, 0)).to eq(0xA1) - end - end - - describe "when derived class is assigned to a constant" do - it "resolves a built-in type" do - class FFISpecs::TestStruct < FFI::Struct - layout :number, :int - end - - instance = FFISpecs::TestStruct.new - instance[:number] = 0xA1 - expect(FFISpecs::LibTest.ptr_ret_int32_t(instance, 0)).to eq(0xA1) - end - - it "resolves a type from the enclosing module" do - module FFISpecs::LibTest - typedef :uint, :custom_int - - class TestStruct < FFI::Struct - layout :number, :custom_int - end - end - - instance = FFISpecs::LibTest::TestStruct.new - instance[:number] = 0xA1 - expect(FFISpecs::LibTest.ptr_ret_int32_t(instance, 0)).to eq(0xA1) - end - end -end - -describe FFI::Struct, ' with a nested struct field' do - module LibTest - extend FFI::Library - ffi_lib TestLibrary::PATH - class NestedStruct < FFI::Struct - layout :i, :int - end - class ContainerStruct < FFI::Struct - layout :first, :char, :ns, NestedStruct - end - attach_function :struct_align_nested_struct, [ :pointer ], :int - attach_function :struct_make_container_struct, [ :int ], :pointer - end - before do - @cs = LibTest::ContainerStruct.new - end - - it 'should align correctly nested struct field' do - @cs[:ns][:i] = 123 - expect(LibTest.struct_align_nested_struct(@cs.to_ptr)).to eq(123) - end - - it 'should correctly calculate Container size (in bytes)' do - expect(LibTest::ContainerStruct.size).to eq(8) - end - - it 'should return a Struct object when the field is accessed' do - expect(@cs[:ns].is_a?(FFI::Struct)).to be true - end - - it 'should read a value from memory' do - @cs = LibTest::ContainerStruct.new(LibTest.struct_make_container_struct(123)) - expect(@cs[:ns][:i]).to eq(123) - end - - it 'should write a value to memory' do - @cs = LibTest::ContainerStruct.new(LibTest.struct_make_container_struct(123)) - @cs[:ns][:i] = 456 - expect(LibTest.struct_align_nested_struct(@cs.to_ptr)).to eq(456) - end - - it 'should be able to assign struct instance to nested field' do - cs = LibTest::ContainerStruct.new(LibTest.struct_make_container_struct(123)) - ns = LibTest::NestedStruct.new - ns[:i] = 567 - cs[:ns] = ns - expect(cs[:ns][:i]).to eq(567) - expect(LibTest.struct_align_nested_struct(cs.to_ptr)).to eq(567) - end -end - -describe FFI::Struct, ' with a nested array of structs' do - module InlineArrayOfStructs - extend FFI::Library - ffi_lib TestLibrary::PATH - class NestedStruct < FFI::Struct - layout :i, :int - end - class ContainerStruct < FFI::Struct - layout :first, :char, :ns, [ NestedStruct, 1 ] - end - attach_function :struct_align_nested_struct, [ :pointer ], :int - attach_function :struct_make_container_struct, [ :int ], :pointer - end - - before do - @cs = InlineArrayOfStructs::ContainerStruct.new - end - - it 'should align correctly nested struct field' do - @cs[:ns][0][:i] = 123 - expect(InlineArrayOfStructs.struct_align_nested_struct(@cs.to_ptr)).to eq(123) - end - - it 'should correctly calculate Container size (in bytes)' do - expect(InlineArrayOfStructs::ContainerStruct.size).to eq(8) - end - - it 'should return a Struct object when the field is accessed' do - expect(@cs[:ns][0].is_a?(FFI::Struct)).to be true - end - - it 'should read a value from memory' do - @cs = InlineArrayOfStructs::ContainerStruct.new(InlineArrayOfStructs.struct_make_container_struct(123)) - expect(@cs[:ns][0][:i]).to eq(123) - end - - it 'should write a value to memory' do - @cs = InlineArrayOfStructs::ContainerStruct.new(InlineArrayOfStructs.struct_make_container_struct(123)) - @cs[:ns][0][:i] = 456 - expect(InlineArrayOfStructs.struct_align_nested_struct(@cs.to_ptr)).to eq(456) - end - - it 'should support Enumerable#each' do - @cs = InlineArrayOfStructs::ContainerStruct.new(InlineArrayOfStructs.struct_make_container_struct(123)) - ints = [] - @cs[:ns].each { |s| ints << s[:i] } - expect(ints[0]).to eq(123) - end -end - -describe FFI::Struct, ' by value' do - module LibTest - extend FFI::Library - ffi_lib TestLibrary::PATH - - class S8S32 < FFI::Struct - layout :s8, :char, :s32, :int - end - - class StructString < FFI::Struct - layout :bytes, :string, :len, :int - end - - attach_function :struct_return_s8s32, [ ], S8S32.by_value - attach_function :struct_s8s32_set, [ :char, :int ], S8S32.by_value - attach_function :struct_s8s32_get_s8, [ S8S32.by_value ], :char - attach_function :struct_s8s32_get_s32, [ S8S32.by_value ], :int - attach_function :struct_s8s32_s32_ret_s32, [ S8S32.by_value, :int ], :int - attach_function :struct_s8s32_s64_ret_s64, [ S8S32.by_value, :long_long ], :long_long - attach_function :struct_s8s32_ret_s8s32, [ S8S32.by_value ], S8S32.by_value - attach_function :struct_s32_ptr_s32_s8s32_ret_s32, [ :int, :pointer, :int, S8S32.by_value ], :int - attach_function :struct_varargs_ret_struct_string, [ :int, :varargs ], StructString.by_value - end - - it 'return using pre-set values' do - s = LibTest.struct_return_s8s32 - expect(s[:s8]).to eq(0x7f) - expect(s[:s32]).to eq(0x12345678) - end - - it 'return using passed in values' do - s = LibTest.struct_s8s32_set(123, 456789) - expect(s[:s8]).to eq(123) - expect(s[:s32]).to eq(456789) - end - - it 'parameter' do - s = LibTest::S8S32.new - s[:s8] = 0x12 - s[:s32] = 0x34567890 - expect(LibTest.struct_s8s32_get_s8(s)).to eq(0x12) - expect(LibTest.struct_s8s32_get_s32(s)).to eq(0x34567890) - end - - it 'parameter with following s32' do - s = LibTest::S8S32.new - s[:s8] = 0x12 - s[:s32] = 0x34567890 - - expect(LibTest.struct_s8s32_s32_ret_s32(s, 0x1eefdead)).to eq(0x1eefdead) - end - - # it 'parameter with following s64' do - # s = LibTest::S8S64.new - # s[:s8] = 0x12 - # s[:s64] = 0x34567890 - # - # - # LibTest.struct_s8s64_s64_ret_s64(s, 0x1eefdead1eefdead).should == 0x1eefdead1eefdead - # end - - it 'parameter with preceding s32,ptr,s32' do - s = LibTest::S8S32.new - s[:s8] = 0x12 - s[:s32] = 0x34567890 - out = LibTest::S8S32.new - expect(LibTest.struct_s32_ptr_s32_s8s32_ret_s32(0x1000000, out, 0x1eafbeef, s)).to eq(0x34567890) - expect(out[:s8]).to eq(s[:s8]) - expect(out[:s32]).to eq(s[:s32]) - end - - it 'parameter with preceding s32,string,s32' do - s = LibTest::S8S32.new - s[:s8] = 0x12 - s[:s32] = 0x34567890 - out = 0.chr * 32 - expect(LibTest.struct_s32_ptr_s32_s8s32_ret_s32(0x1000000, out, 0x1eafbeef, s)).to eq(0x34567890) - end - - it 'parameter, returning struct by value' do - s = LibTest::S8S32.new - s[:s8] = 0x12 - s[:s32] = 0x34567890 - - ret = LibTest.struct_s8s32_ret_s8s32(s) - expect(ret[:s8]).to eq(s[:s8]) - expect(ret[:s32]).to eq(s[:s32]) - end - - it 'varargs returning a struct' do - string = "test" - s = LibTest.struct_varargs_ret_struct_string(4, :string, string) - expect(s[:len]).to eq(string.length) - expect(s[:bytes]).to eq(string) - end -end - -describe FFI::Struct, ' with an array field' do - module LibTest - extend FFI::Library - ffi_lib TestLibrary::PATH - class StructWithArray < FFI::Struct - layout :first, :char, :a, [:int, 5] - end - attach_function :struct_make_struct_with_array, [:int, :int, :int, :int, :int], :pointer - attach_function :struct_field_array, [:pointer], :pointer - end - before do - @s = LibTest::StructWithArray.new - end - - it 'should correctly calculate StructWithArray size (in bytes)' do - expect(LibTest::StructWithArray.size).to eq(24) - end - - it 'should read values from memory' do - @s = LibTest::StructWithArray.new(LibTest.struct_make_struct_with_array(0, 1, 2, 3, 4)) - expect(@s[:a].to_a).to eq([0, 1, 2, 3, 4]) - end -# it 'should cache array object for successive calls' do -# @s[:a].object_id.should == @s[:a].object_id -# end - - it 'should return the number of elements in the array field' do - @s = LibTest::StructWithArray.new(LibTest.struct_make_struct_with_array(0, 1, 2, 3, 4)) - expect(@s[:a].size).to eq(5) - end - - it 'should allow iteration through the array elements' do - @s = LibTest::StructWithArray.new(LibTest.struct_make_struct_with_array(0, 1, 2, 3, 4)) - @s[:a].each_with_index { |elem, i| expect(elem).to eq(i) } - end - - it 'should return the pointer to the array' do - @s = LibTest::StructWithArray.new(LibTest.struct_make_struct_with_array(0, 1, 2, 3, 4)) - expect(@s[:a].to_ptr).to eq(LibTest::struct_field_array(@s.to_ptr)) - end -end - -describe 'BuggedStruct' do - module LibTest - extend FFI::Library - ffi_lib TestLibrary::PATH - class BuggedStruct < FFI::Struct - layout :visible, :uchar, - :x, :uint, - :y, :uint, - :rx, :short, - :ry, :short, - :order, :uchar, - :size, :uchar - end - attach_function :bugged_struct_size, [], :uint - end - - it 'should return its correct size' do - expect(LibTest::BuggedStruct.size).to eq(LibTest.bugged_struct_size) - end - - it "offsets within struct should be correct" do - expect(LibTest::BuggedStruct.offset_of(:visible)).to eq(0) - expect(LibTest::BuggedStruct.offset_of(:x)).to eq(4) - expect(LibTest::BuggedStruct.offset_of(:y)).to eq(8) - expect(LibTest::BuggedStruct.offset_of(:rx)).to eq(12) - expect(LibTest::BuggedStruct.offset_of(:ry)).to eq(14) - expect(LibTest::BuggedStruct.offset_of(:order)).to eq(16) - expect(LibTest::BuggedStruct.offset_of(:size)).to eq(17) - end - - it 'should return correct field/offset pairs' do - expect(LibTest::BuggedStruct.offsets.sort do |a, b| - a[1] <=> b[1] - end).to eq([[:visible, 0], [:x, 4], [:y, 8], [:rx, 12], [:ry, 14], [:order, 16], [:size, 17]]) - end -end - -describe "Struct allocation" do - it "MemoryPointer.new(Struct, 2)" do - class S < FFI::Struct - layout :i, :uint - end - p = FFI::MemoryPointer.new(S, 2) - expect(p.total).to eq(8) - expect(p.type_size).to eq(4) - p.put_uint(4, 0xdeadbeef) - expect(S.new(p[1])[:i]).to eq(0xdeadbeef) - expect(p[1].address).to eq((p[0].address + 4)) - end - - it "Buffer.new(Struct, 2)" do - class S < FFI::Struct - layout :i, :uint - end - p = FFI::Buffer.new(S, 2) - expect(p.total).to eq(8) - expect(p.type_size).to eq(4) - p.put_uint(4, 0xdeadbeef) - expect(S.new(p[1])[:i]).to eq(0xdeadbeef) - end - - it "null? should be true when initialized with NULL pointer" do - class S < FFI::Struct - layout :i, :uint - end - expect(S.new(FFI::Pointer::NULL)).to be_null - end - - it "null? should be false when initialized with non-NULL pointer" do - class S < FFI::Struct - layout :i, :uint - end - expect(S.new(FFI::MemoryPointer.new(S))).not_to be_null - end - - it "supports :bool as a struct member" do - expect do - c = Class.new(FFI::Struct) do - layout :b, :bool - end - struct = c.new - struct[:b] = ! struct[:b] - end.not_to raise_error Exception - end - -end - -describe "variable-length arrays" do - it "zero length array should be accepted as last field" do - expect { - Class.new(FFI::Struct) do - layout :count, :int, :data, [ :char, 0 ] - end - }.not_to raise_error Exception - end - - it "zero length array before last element should raise error" do - expect { - Class.new(FFI::Struct) do - layout :data, [ :char, 0 ], :count, :int - end - }.to raise_error - end - - it "can access elements of array" do - struct_class = Class.new(FFI::Struct) do - layout :count, :int, :data, [ :long, 0 ] - end - s = struct_class.new(FFI::MemoryPointer.new(1024)) - s[:data][0] = 0x1eadbeef - s[:data][1] = 0x12345678 - expect(s[:data][0]).to eq(0x1eadbeef) - expect(s[:data][1]).to eq(0x12345678) - end - - it "non-variable length array is bounds checked" do - struct_class = Class.new(FFI::Struct) do - layout :count, :int, :data, [ :long, 1 ] - end - s = struct_class.new(FFI::MemoryPointer.new(1024)) - s[:data][0] = 0x1eadbeef - expect { s[:data][1] = 0x12345678 }.to raise_error - expect(s[:data][0]).to eq(0x1eadbeef) - expect { expect(s[:data][1]).to == 0x12345678 }.to raise_error - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/typedef_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/typedef_spec.rb deleted file mode 100644 index d73247f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/typedef_spec.rb +++ /dev/null @@ -1,91 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) -describe "Custom type definitions" do - it "attach_function with custom typedef" do - module CustomTypedef - extend FFI::Library - ffi_lib TestLibrary::PATH - typedef :uint, :fubar_t - attach_function :ret_u32, [ :fubar_t ], :fubar_t - end - expect(CustomTypedef.ret_u32(0x12345678)).to eq(0x12345678) - end - - it "variadic invoker with custom typedef" do - module VariadicCustomTypedef - extend FFI::Library - ffi_lib TestLibrary::PATH - typedef :uint, :fubar_t - attach_function :pack_varargs, [ :buffer_out, :string, :varargs ], :void - end - buf = FFI::Buffer.new :uint, 10 - VariadicCustomTypedef.pack_varargs(buf, "i", :fubar_t, 0x12345678) - expect(buf.get_int64(0)).to eq(0x12345678) - end - - it "Callback with custom typedef parameter" do - module CallbackCustomTypedef - extend FFI::Library - ffi_lib TestLibrary::PATH - typedef :uint, :fubar3_t - callback :cbIrV, [ :fubar3_t ], :void - attach_function :testCallbackU32rV, :testClosureIrV, [ :cbIrV, :fubar3_t ], :void - end - i = 0 - CallbackCustomTypedef.testCallbackU32rV(0xdeadbeef) { |v| i = v } - expect(i).to eq(0xdeadbeef) - end - module StructCustomTypedef - extend FFI::Library - ffi_lib TestLibrary::PATH - typedef :uint, :fubar3_t - class S < FFI::Struct - layout :a, :fubar3_t - end - end - - it "Struct with custom typedef field" do - s = StructCustomTypedef::S.new - s[:a] = 0x12345678 - expect(s.pointer.get_uint(0)).to eq(0x12345678) - end - - it "attach_function after a typedef should not reject normal types" do - expect do - Module.new do - extend FFI::Library - # enum() will insert a custom typedef called :foo for the enum - enum :foo, [ :a, :b ] - typedef :int, :bar - - ffi_lib TestLibrary::PATH - begin - attach_function :ptr_ret_int32_t, [ :string, :foo ], :bar - rescue FFI::NotFoundError - # NetBSD uses #define instead of typedef for these - attach_function :ptr_ret_int32_t, :ptr_ret___int32_t, [ :string, :foo ], :bar - end - end - end.not_to raise_error - end - - it "detects the correct type for size_t" do - expect do - Module.new do - extend FFI::Library - ffi_lib "c" - if FFI::Platform.windows? - # _read() is a function of msvcrt.dll - attach_function :_read, [:int, :pointer, :uint], :int - else - # read(2) is a standard UNIX function - attach_function :read, [:int, :pointer, :size_t], :ssize_t - end - end - end.not_to raise_error - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/union_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/union_spec.rb deleted file mode 100644 index 45bf7ec..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/union_spec.rb +++ /dev/null @@ -1,67 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -module LibTest - Types = { - 's8' => [:char, :c, 1], - 's16' => [:short, :s, 0xff0], - 's32' => [:int, :i, 0xff00], - 's64' => [:long_long, :j, 0xffff00], - 'long' => [:long, :l, 0xffff], - 'f32' => [:float, :f, 1.0001], - 'f64' => [:double, :d, 1.000000001] - } - class TestUnion < FFI::Union - layout( :a, [:char, 10], - :i, :int, - :f, :float, - :d, :double, - :s, :short, - :l, :long, - :j, :long_long, - :c, :char ) - end - Types.keys.each do |k| - attach_function "union_align_#{k}", [ :pointer ], Types[k][0] - attach_function "union_make_union_with_#{k}", [ Types[k][0] ], :pointer - end - attach_function :union_size, [], :uint -end - -describe 'Union' do - before do - @u = LibTest::TestUnion.new - end - - it 'should place all the fields at offset 0' do - expect(LibTest::TestUnion.members.all? { |m| LibTest::TestUnion.offset_of(m) == 0 }).to be true - end - LibTest::Types.each do |k, type| - it "should correctly align/write a #{type[0]} value" do - @u[type[1]] = type[2] - if k == 'f32' or k == 'f64' - expect((@u[type[1]] - LibTest.send("union_align_#{k}", @u.to_ptr)).abs).to be < 0.00001 - else - expect(@u[type[1]]).to eq(LibTest.send("union_align_#{k}", @u.to_ptr)) - end - end - end - LibTest::Types.each do |k, type| - it "should read a #{type[0]} value from memory" do - @u = LibTest::TestUnion.new(LibTest.send("union_make_union_with_#{k}", type[2])) - if k == 'f32' or k == 'f64' - expect((@u[type[1]] - type[2]).abs).to be < 0.00001 - else - expect(@u[type[1]]).to eq(type[2]) - end - end - end - - it 'should return a size equals to the size of the biggest field' do - expect(LibTest::TestUnion.size).to eq(LibTest.union_size) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/variadic_spec.rb b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/variadic_spec.rb deleted file mode 100644 index 4138280..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/ffi/variadic_spec.rb +++ /dev/null @@ -1,113 +0,0 @@ -# -# This file is part of ruby-ffi. -# For licensing, see LICENSE.SPECS -# - -require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) - -describe "Function with variadic arguments" do - module LibTest - extend FFI::Library - ffi_lib TestLibrary::PATH - enum :enum_type1, [:c1, :c2] - enum :enum_type2, [:c3, 42, :c4] - attach_function :pack_varargs, [ :buffer_out, :string, :varargs ], :void - attach_function :pack_varargs2, [ :buffer_out, :enum_type1, :string, :varargs ], :enum_type1 - end - - it "takes enum arguments" do - buf = FFI::Buffer.new :long_long, 2 - LibTest.pack_varargs(buf, "ii", :int, :c3, :int, :c4) - expect(buf.get_int64(0)).to eq(42) - expect(buf.get_int64(8)).to eq(43) - end - - it "returns symbols for enums" do - buf = FFI::Buffer.new :long_long, 2 - expect(LibTest.pack_varargs2(buf, :c1, "ii", :int, :c3, :int, :c4)).to eq(:c2) - end - - [ 0, 127, -128, -1 ].each do |i| - it "call variadic with (:char (#{i})) argument" do - buf = FFI::Buffer.new :long_long - LibTest.pack_varargs(buf, "c", :char, i) - expect(buf.get_int64(0)).to eq(i) - end - end - - [ 0, 0x7f, 0x80, 0xff ].each do |i| - it "call variadic with (:uchar (#{i})) argument" do - buf = FFI::Buffer.new :long_long - LibTest.pack_varargs(buf, "C", :uchar, i) - expect(buf.get_int64(0)).to eq(i) - end - end - - [ 0, 1.234567, 9.87654321 ].each do |v| - it "call variadic with (:float (#{v})) argument" do - buf = FFI::Buffer.new :long_long - LibTest.pack_varargs(buf, "f", :float, v.to_f) - expect(buf.get_float64(0)).to eq(v) - end - end - - [ 0, 1.234567, 9.87654321 ].each do |v| - it "call variadic with (:double (#{v})) argument" do - buf = FFI::Buffer.new :long_long - LibTest.pack_varargs(buf, "f", :double, v.to_f) - expect(buf.get_float64(0)).to eq(v) - end - end - - module Varargs - PACK_VALUES = { - 'c' => [ 0x12 ], - 'C' => [ 0x34 ], - 's' => [ 0x5678 ], - 'S' => [ 0x9abc ], - 'i' => [ 0x7654321f ], - 'I' => [ 0xfee1babe ], - 'l' => [ 0x1f2e3d4c ], - 'L' => [ 0xf7e8d9ca ], - 'j' => [ 0x1eafdeadbeefa1b2 ], - 'f' => [ 1.23456789 ], - 'd' => [ 9.87654321 ] - } - - TYPE_MAP = { - 'c' => :char, 'C' => :uchar, 's' => :short, 'S' => :ushort, - 'i' => :int, 'I' => :uint, 'j' => :long_long, 'J' => :ulong_long, - 'l' => :long, 'L' => :ulong, 'f' => :float, 'd' => :double - } - end - - def verify(p, off, v) - if v.kind_of?(Float) - expect(p.get_float64(off)).to eq(v) - else - expect(p.get_int64(off)).to eq(v) - end - end - - Varargs::PACK_VALUES.keys.each do |t1| - Varargs::PACK_VALUES.keys.each do |t2| - Varargs::PACK_VALUES.keys.each do |t3| - Varargs::PACK_VALUES[t1].each do |v1| - Varargs::PACK_VALUES[t2].each do |v2| - Varargs::PACK_VALUES[t3].each do |v3| - fmt = "#{t1}#{t2}#{t3}" - params = [ Varargs::TYPE_MAP[t1], v1, Varargs::TYPE_MAP[t2], v2, Varargs::TYPE_MAP[t3], v3 ] - it "call(#{fmt}, #{params.join(',')})" do - buf = FFI::Buffer.new :long_long, 3 - LibTest.pack_varargs(buf, fmt, *params) - verify(buf, 0, v1) - verify(buf, 8, v2) - verify(buf, 16, v3) - end - end - end - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/spec.opts b/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/spec.opts deleted file mode 100644 index 4cc9a8a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/ffi-1.9.8/spec/spec.opts +++ /dev/null @@ -1,3 +0,0 @@ ---color ---format -documentation diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/CONTRIBUTING.md b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/CONTRIBUTING.md deleted file mode 100644 index 3e33e43..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/CONTRIBUTING.md +++ /dev/null @@ -1,19 +0,0 @@ -## Welcome! - -We're so glad you're thinking about contributing to an 18F open source project! If you're unsure about anything, just ask -- or submit the issue or pull request anyway. The worst that can happen is you'll be politely asked to change something. We love all friendly contributions. - -We want to ensure a welcoming environment for all of our projects. Our staff follow the [18F Code of Conduct](https://github.com/18F/code-of-conduct/blob/master/code-of-conduct.md) and all contributors should do the same. - -We encourage you to read this project's CONTRIBUTING policy (you are here), its [LICENSE](LICENSE.md), and its [README](README.md). - -If you have any questions or want to read more, check out the [18F Open Source Policy GitHub repository]( https://github.com/18f/open-source-policy), or just [shoot us an email](mailto:18f@gsa.gov). - -## Public domain - -This project is in the public domain within the United States, and -copyright and related rights in the work worldwide are waived through -the [CC0 1.0 Universal public domain dedication](https://creativecommons.org/publicdomain/zero/1.0/). - -All contributions to this project will be released under the CC0 -dedication. By submitting a pull request, you are agreeing to comply -with this waiver of copyright interest. diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/LICENSE.md b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/LICENSE.md deleted file mode 100644 index 19fa33d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/LICENSE.md +++ /dev/null @@ -1,31 +0,0 @@ -As a work of the United States Government, this project is in the -public domain within the United States. - -Additionally, we waive copyright and related rights in the work -worldwide through the CC0 1.0 Universal public domain dedication. - -## CC0 1.0 Universal Summary - -This is a human-readable summary of the [Legal Code (read the full text)](https://creativecommons.org/publicdomain/zero/1.0/legalcode). - -### No Copyright - -The person who associated a work with this deed has dedicated the work to -the public domain by waiving all of his or her rights to the work worldwide -under copyright law, including all related and neighboring rights, to the -extent allowed by law. - -You can copy, modify, distribute and perform the work, even for commercial -purposes, all without asking permission. - -### Other Information - -In no way are the patent or trademark rights of any person affected by CC0, -nor are the rights that other persons may have in the work or in how the -work is used, such as publicity or privacy rights. - -Unless expressly stated otherwise, the person who associated a work with -this deed makes no warranties about the work, and disclaims liability for -all uses of the work, to the fullest extent permitted by applicable law. -When using or citing the work, you should not imply endorsement by the -author or the affirmer. diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/README.md b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/README.md deleted file mode 100644 index aee4d99..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/README.md +++ /dev/null @@ -1,100 +0,0 @@ -## [`guides_style_18f`](https://rubygems.org/gems/guides_style_18f): 18F Guides style gem - -Provides consistent style elements for [Jekyll](https://jekyllrb.com/)-based -web sites based on the -[18F Guides Template](https://pages.18f.gov/guides-template/). The 18F Guides -theme is based on [DOCter](https://github.com/cfpb/docter/) from -[CFPB](http://cfpb.github.io/). - -### Usage - -In your [`Gemfile`](http://bundler.io/gemfile.html), include the following: - -```ruby -group :jekyll_plugins do - gem 'guides_style_18f' -end -``` - -Add an `assets/css/styles.scss` file that contains at least the following: - -```scss ---- ---- - -@import "guides_style_18f"; -``` - -Then in your [`_config.yml` file](https://jekyllrb.com/docs/configuration/), -add the following (you may need to remove any `layout:` -[front matter](https://jekyllrb.com/docs/frontmatter/) from existing pages for -this to take effect): - -```yaml -defaults: - - - scope: - path: "" - values: - layout: "guides_style_18f_default" -``` - -Build the site per usual, and observe the results. - -### Additional features - -Here are some other features that can be enabled via `_config.yml`: - -```yaml -# To use the shared 18F Guides Teamplate assets when deploying to -# pages.18f.gov, to avoid having to rebuild the site for minor style and -# script updates: -asset_root: /guides-template - -# This adds the "back to" breadcrumb link under the page title: -back_link: - url: "https://pages.18f.gov/guides/" - text: Read more 18F Guides - -# If you use Analytics, add your code here: -google_analytics_ua: UA-????????-?? -``` - -### Additional scripts and styles - -If you'd like to add additional scripts or styles to every page on the site, -you can add `styles:` and `scripts:` lists to `_config.yml`. To add them to a -particular page, add these lists to the page's front matter. - -### Development - -First, choose a Jekyll site you'd like to use to view the impact of your -updates and clone its repository; then clone this repository into the same -parent directory. For example, to use the 18F Guides Template: - -```shell -$ git clone git@github.com:18F/guides-template.git -$ git clone git@github.com:18F/guides-style.git -``` - -In the `Gemfile` of the Jekyll site's repository, include the following: - -```ruby -group :jekyll_plugins do - gem 'guides_style_18f', :path => '../guides-style' -end -``` - -You can find the different style assets and templates within subdirectories of -the `assets` and `lib/guides_style_18f` directories of this repository. Edit -those, then rebuild the Jekyll site as usual to see the results. - -### Public domain - -This project is in the worldwide [public domain](LICENSE.md). As stated in [CONTRIBUTING](CONTRIBUTING.md): - -> This project is in the public domain within the United States, and copyright and related rights in the work worldwide are waived through the [CC0 1.0 Universal public domain dedication](https://creativecommons.org/publicdomain/zero/1.0/). -> -> All contributions to this project will be released under the CC0 ->dedication. By submitting a pull request, you are agreeing to comply ->with this waiver of copyright interest. diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/favicons/18f-center-114.png b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/favicons/18f-center-114.png deleted file mode 100644 index c925bd8ccd785632a8c592e69a0abbbedbf28b7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2483 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 diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/favicons/18f-center-144.png b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/favicons/18f-center-144.png deleted file mode 100644 index 0a0b18d443f5640206738c6e7cfc7756993d9dfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2802 zcmV%H*xJ@U$6>Gro4u!qFkuKom@tGPOc=rtCJbQ+6NWH^2}2mdgdq%J!Vrcq zVF*K*u&{S6z)@XgI8um|BJ2d(##*to6)HN?7Fu<*RBi28b#&CW&eXT!IMT6dv7=5a zWb z)Tddgcxg8dH^MhAT|>@MJhuhYW2uO0+4|f+u*Y!R6-kA4qoF5*kC;nrxCgnfN2Y(mv}8g>PQ&Cf!2Km5hN+wsXnHB>#Y z0+lTY7|A7=u1?p#W*1?+#xYOWlx6f)9lfxK183;i9Ci|>3FG;GVI{5(zz5oU!Jwn@ z!&UHP8~xe;1z~eDaJ&`u?LLI`xCd1dHaP}gUd8v6;^0~Qc`qJFL&%b$nEnd6V}qrFx8@zH6y2rnTd76=m0*QidkvCWM(p&Iu#PePpof;7pUt$ z+>ATpsV)we#Npi*L!Xyb0RRR>tSIB3f?C2>R`T!Q<5qq+$qoerrHBRud*_LjsO8ilz5yu~w^*f82#Z12@9;F2hJom_@=E zxS#p2_hH#$x+TKs#=g4=10EsUWffmJVVW@3JEmDC>^rZEgk>usOcQo@A}Zd;jcDyw zpkcq?DVoHr3KfKD!fuaaVOPL?DLiy5K}Y;y9dy_f)-PjsU%-nyg#f|tK&C*9JX!tH zVZEBfd0{>TboA1E1*~2VWkSH&4rPh6E=@7S@J2*oU>1yJ`=Uk&c&m=KR}Eph_&YI* z^J@aydN9{-BSu5Iq(D;q{b{Z){;KSUaXzlI9|B66X~(E%rmI{(*oM{U{ZG3DMJ&@FQ#FaisvGWvuosWBy5wa8$A}O~x`5hi#gXlvzeHk(^CBJLAuMgFP zSuNT=k#p0*DbFB!1~{>_uO7QkbIA8VVQUTF(Bk20!sHRhtTYaN zD#w6_h2VRVX>2uNswy4qH+J^H1Q=zUXhrn}P+H+JU;+$49?n!yt=ELn48|OS4_xj+ z%|&X-6FL0Qk3?X6+=ZXAFQ{5V$=W{EJ~3XoR|IXEkTzwX1MD{0Lp zMf0aa-mawT+!~EA9xf7&zy}uZ5$CZqVSZ#?ht5F?!(iniu==`#l}T)`W2`8}q8_ z4pUr=>B~7VB5Alhy`C@7gqf*j@E#K>UO8Y%v81Xt!O1~YZ*=uzW|E0MfF|rSD{#Ks z+f4BW%PB6qwrspv18)>IAS_lB<~u=_jNA|z<(L?4?-rdi9g+&xFScpIe0GGty%FBX zuSIC2tw%u9cV|3PI>P+WswV9HE(o}IjYiV`izjDKZ;i_mf{MxmCj9(u7fl#?S=xx-l3BXD0&3fY4dB5PdQhR# z(R!7CK$2%>jvgHr&tQ|7<6Nf5vta2KHE^yIIPTUVs_k~j-(Z9sEp zN7V&*fmT}2)_;gRoF(ojGKShwwhU1@T#R?N*TEarttPCoCTyyU^8tWlj_So-OtF=Y z0`R9yrGg~BE-V6|th344OgbAti@m9z{Czn>rL-#*LVN)r~~j>Km+n_8;pF-VE~ z2JsmDy%*$f@tsK_|I3N`sFK>5g!Yoyf!V`GcdQ%rvVShaz z<~_8eO7BaoZ>Kr>z&h2nsn|&B;yeFnD~rNCZUg|sV2Sx)1D;%`rrh;a5;lC9hC!!0 z<_Ke8_S~EJW!|tnyG2YhxicR*H>Ch{RWr$XE#rTA~{Z5+fm9sN43o_qH0TOt=I$tu`|W z(yA~St!fb>D$Lr#zw*e-n7D~Zh@^|(IX%xg=Y8)nA`XA``zIh|vn)@rFqaAx6b2MB z|L^jj86)ZtyGf$O);k1M%7KQ$efJs7t9p}5yh*&p*d!~82-xV7eZ}RMEX;6dl5}4{ z`7Jv&C;(she!c00000NkvXX Hu0mjfsCL(x diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/favicons/18f-center-192.png b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/favicons/18f-center-192.png deleted file mode 100644 index 30b1cecf04764ba1be877eb55bbc6a64123bb726..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1122 zcmV-o1fBbdP)|A@r@m&^ae;r~sh{~(Y5KA!*K@c;k+|I+FIwc7vi`2T9P|9QOsrqci68Y|WS z00ZhtL_t(|0qntn00000fS~=U7pVdO00000003Zi&TYwY90Z_}5xSs@_5WYHJ6ln& z<4rKr$t@GlhOcX_d^dB%f2_yvn zpg=}?2>QD*0F#$gQiinjrP!-_g59`qw`qAKj5*Toz2m~5^ z(T6**9~5K)yZjswg4Y83^WB=7FcrzO-TMVReX(tkx`9RoA|L<3Alej| zbYosU(M$>?x>3^8N6Oj-76sah-!as+3k(YMa{}VFfkA;JN|GznW_toF2X)7?&U3p0 zDEe1+djcR62=otNS0FeR_)`Ku{{!1^?E(17LVxZY$RBzRxFR`;ce^LCn}WO0vTPOw zHo7scuR^=N0CSt`_OH_yCB=5N%BC|ZkUH@zWHQ=UiVf7Tx1Gc z$kdFK1o+lKKgOAWDJ@zOaP2{HH*J$E?&=FL<@JJyohh$d5|B4ItO_hfA%+=k3#{-N z(6T@*bPal|0;!Pu+XwkC?fx-5-*#%dV z1%b{lYStiF5V($?F^KvC`}1#8P=P7x0=^%LC1NryKwDs5_UHK`S5LYEUi5+7*)eqm zrhEfDS$aKb3V6OEEvg}brT|DYD3ghbra)OSd;@rRC8BHM`vkIlq?l<7PCWs>+;ui#p%`~cTka;D6CNGEzt`Z6Yzz+||FLPP~ z>pGoYOhQddAielPLpR_x0sU9Xs3s6zT0`wPt*j%k$r~F?5}kSiuD`V|q#zL9P?_th z#ohMZ(pIL0R~3lt)ICErQeJnBnI&TYT6kpvPv2=VZFX8r4!+Uk%bjkNWWCMG$4{I2 zMmHaSFg9uczZri`=7v3zyQI^id#514PfXV=PoR`d4m^S5$cIOV(UG$f-80gpe;Ia% z{_t^ZK6Haae~U>+O2}u$fpnl}bAzuy_jHK2AblL6(j7Hh{L3Dlq|Efu!{2=~JAS_v z`PXkuU;*9!4|A@r@m&^ae;r~sh{~(Y5KA!*K@c;k+|I+FIwc7vi`2T9P|9QOsrqci68Y|WS z00a$5L_t(|UhKdz0RR91!XW#nHp6~c0ssI2000000C4v0b+>I8h61o<-7l2&{!hCN zSivrw9Y)BiT0uF=YPf75O1qUE|<@#&Zq%FoAeyu%SnQY5qy#HK?y0^ z_lh;=UDYFO530zTmi*iI>}%| zws5u6=*9LOB1E3?(D9iPEwN*4@Q|$)4!PgzxDT-#j}4LMBiVb;2zDSt^e0x(5YD)C z40fPHdcKwfNQj=n@c|zaa?!*aY)EWH8;cCtNdl_>l`JLIz(U-E!GFHol)8J+PymF; zpOx=XNX>(#qe0|2IFhQTbts5*cxK3S5)u>$JNU+fwzYLIh`;DY*WGQ0f(+GCgOj*Y zC;>sbT>9y!$Th-142j}>MdDx}RXARg1Q5t^^}p3@f@KVdA+cAbOX3M61Y}&@K+zpA zPy~ROGW}E@eFgwzOcaP{cNCXHjQDxH63bPx8e&D~o$6e9IV6h~I`@_A0`e^3t&qeW zbSja{eJO-jw{gnBy@D1)vT7{U+zd=hA!fSN<+Zz|kX>^`t2>5hOCff;XUUIP3Te|N zA`k2S2C4o$>75Wi-F#)4rIiCB@o+XBF5U%@cRr9XA@iTx{}+e_gM35oU+f5w4A6ez z21K(G(&Vyeeu}aV!ZW`5hDqa6$SxL$(;wTGLZVn$P1m}efIu#F!vq9r^P%zP!#aq3 zt8l*gj>V9T-nBuu8sgrwWl8{>*b}ECvc%kS$ks&voH?^H>mi|t-2-(h(m@Y@B{j}g zdNBwPQzj2Xcd*0I&CVT9C*nSVd|^QEDEkHiNyL%~hl9LSV_$aE2zt#aYU-RFWS}md zHI~$*=)0T*d==1MGg8I83MeHdGggvE5f0$%vi_uf8AsUHW#wxl*(G7^zI+a)4G+RK z%%Nt(Z;c7vacOW@z=UjpiasO$7q4B=4*nv{p0!^GD1>9_DZ{5*yet;MUlwyO9Mp$F zCyIJRO+E6nmM2*Mh{&Ux?Upg&u-5;~uyzkW+JOTa0001lLH18=j}Mjr0000000007 XXaUL);tB%300000NkvXXu0mjfRrexK diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/favicons/18f-center-32.png b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/favicons/18f-center-32.png deleted file mode 100644 index cbd62818c103aae4d97c6e7bf63c707b2f4f5d6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 851 zcmV-Z1FZasP)1AO6-bJFO}6>H=>uK*C@IOscGbM4?T9#ZCA(pEic4cX$5Jz?v^k5 zQs$B=t?Wuhlp>_)u8KmqYVK-Z=fJ=;O|<6HLnItTX3sglbG~!_{}~}V2Y=Q6AHXs| z%z-`|YqJr_f3<%6P-jG#5s|!}TN2a_d-Q!dE}0d>Eg`_zauZ2eSiPi++?yLYN7{O)lRzuL5MYVa$u8_Yry< zA(`B$cMiFBgc=n9m35&3!YzatWTR}NcF5$K(nK{9K+e9q9GyeRwyUHseS^2dER?7K zNFq{SGoFBegbL0@O@u4KFuj7)O=AxlK*2PqJ6&*ku&06>Uy+HumFS;Djf)kF4iZ2{ z%Iqq~ivhSisB-WY^^C$Xg3X0I=imXH<#Zj~Qvg`2jzIvtY*$;9F)ketlZ)gg-nqv; z*inkuJjCTAHlJtiTR@JT@uCz2V1FehXHnFFNS>$a=%w2*?L$%{?UD?*Y-2a7iES}} z^?4}o!n;vyDS}=?v>FgsfLa%wP3nxaA{aX-T9DL)6dO)HB8NZ#l44*Ik{v>ZwsH1M zf6n-WX1=4Q<}maHy<>PkhQ0}yyRoy3>i8{y_GE6JvhYJKAR>z{B?cUOfYnAtqIJ1s zq*7psxW|bZTx*s0U2QD=MGJa7IC4)0q+0nfMoDa{zlh2@0ifHB!gfe)X#b3bZ)oX5d@&s~If}L@buj>{@qihIHf4*6p)>M3 z;I4zOAg3D-T}W)iDg)K7M3Gj9s;R#K0QvIKX{Ji0(Jl!$AYA9v;hIV*gfPK>RUqbH d{4QDsdeaD diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/favicons/18f-center-57.png b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/favicons/18f-center-57.png deleted file mode 100644 index be6e1bf06285f5bb172db5f61ea0aff85f51af4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1382 zcmV-s1)2JZP)N=XP0Bk>Q%c}89_F(K(J)a$9dMO{4^UGOU zEr27n3|vTNz=k!&$GJ-YfBvKKmEqFds{pQdZCNET-INuQ>wU^k0PL_~)$<*{fu>e~ z;v;&dJ+qX8N!hsO;@gRZEO)mCM_^T4U*0Sr*E~DT;byyhwa@*Enux5oe4x|>Do$x+ zy1yfew(8jq(AdJz6;W7~mwi1%!HAue2bP60G84zD#fIl&?A|5e zDDCBM?`eSNi}X8@ti$q@Z1;5=0xVekX+7R0+<}sTh*~>8{NGGV~>5B z;Cxl6W|d)VSiS~#L~+gLcpbp$dL>C>SyeS3T&|~VL46aW*C^7r<#5Mh{k^glV-q$C zE3vF*fZp*l4H*0VJi%ieIzvk*o`#Il+q`qCyYHeqWP>^#AkLi&1fCyrHX z4_LtFD%!2Oj_hqr+QO?PEdP;<&9vLhZ?!9TB3M-{2Q6ajZ-CC&@){mpiEE~o?B`Rd z>MxP^(tPYb3FzFK79>qAufp6R>MCKqJq%vRhJzUM?$E?| zvZ^)7DF^fdO)e$X8_m0k(+Dtry>{5n8pWmrwdi%Ts>!cy0C@Iu^DWg)X_KaI zyi+E(?W}DUYkyXeeq~E1O)Ak7$Ov3Nt4>j4kFRPkK;2D)kM{$tIiRnG{vGmlYLH%8 zs&t)YKx1INb1}xATz$=~ODh1@9a8f2k3-G6eGwO$0LHDoCRPnDJqGZ`*K!q)`kLX_ zZ{VW}dg<8g{=22-5SXC8J3g!dB|b7WP~A^}(S;a$xImzBVAUFr6oi_<;!1jSeHLhY zDPF2-Lw;_}iQ^fYuKNotXlc_Kn-nd&V(OjE#>1hH?{Vvd9?#xImG$IB(`2d8CP!-t zbQxnIt(MT{t*s1jq}SCf<_#2d)^Lyi4? zR;o|u!gtjet8Zpg6*IRowTLOjWbM$!o4Gt|vy?N*9#rG(Sf~A0tcTA69Qd0QoBJ%q z@`WPmA|C5%!^aeAq|H5{7h|)_=o2%mA~7_NQJ?Too_L&AL7xRk6bC|cjd}SjI0JlQHk!$tqj(4)OFvRxMt`SP4Q}$yKCoyj{pA))FKX$ oa6A9oa9AByht*+qSZ|E}1@J#yIBYD<6aWAK07*qoM6N<$f}p6J$^ZZW diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/favicons/18f-center-72.png b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/favicons/18f-center-72.png deleted file mode 100644 index bcecd673cd57b7d07a324c32c1d1a78ba4cebfda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1527 zcmV{wZU{DxDJn8waTr3TJxW@wMARBY7_=txLmFvml|(E z2v$m#QHo-s_M#FKB#APMFyAf+DQ_1Lu5jU6 zvLA2M;LbdlQW0U%dxq#Ngnob!UB*2Xn-*BK71e*@%j45n<*&FoNArgG`CKJhIx$JZ zqj+U&@*ZL zeoq0PkSrlpxe7M&O7Lkd4Z4k28BgD(CT)!U6H$lkJ&ok=)W89l5FhH05IytvU0{MLxU~O!$ko$h8PVnrbLdd z2ai_}EJ$3@gC$z7*cLpl$ly`a3L(oO%+2tU>uh+W3_|U}5Ii^zi*ljr=}LzCsr!Uw zu<{Vv)yn*1bTE;E3mXBz!`R4Fw!lWb2n#=>vluNq1|T$anKdyFG&&fKBuyQl7)9_) zCu@&3u)#2WxiV#1 z+#~#~RLo6B@&PzUpelJk3uwcEDWpP0GgK8HWl7~@9XZc}*blMqBvd8t#=Hz;f$?EK zvlXgrhq=m9Y&tId4!$`7RS6}=0%K(JKnUg^IC^@o&12cF5c;i)YkS2QU<~eMO`yQV zIXzSVwR!ifyqqowy}6fOIu)$J!DW9~#`H!X4men7I(oRBdTe|FqThJPOI4u2%J`=2 zsbI{CYpapCXL?(^laC{SUL1~y0}IABqtKe2 zqMY@^cwiNy2t4eR{AaN4OMwNWamI^<@S|mZQPDU_EC(T!Si|yV64)OXv0^ix+A_U8 z`6(lF0KwRn>34~ZEZhGN*elf#%B^R2eRBKFfoswjLcJLG4=`BYh}ej@LchW2(yKm) zP}wmu%y770XcHYmUOv9qZ!m`Jw`w7ja)3W)7K}bncMbr%-%or3#ZNF+&jk$-dbX11 znOQKFvm1VbP<9=E`UOT3u1y()u)M+ml}DtNF+*t3#n!KXRB=V)87cN7LzGlp1vhs> zDF28WcJ&)W#nu)G)t%+TGDs23)T}mV?#dUzSEunoJiiU9;tH6ojRF>G#@;pv^$pXt z6x|hYd=VdqP<{hTK0~db`A)TW7(%D}5Sz!;q!|fUZowd_sHXFL3um;}04wwr<&0^n zUfj-J!2C>g&ZzN*8*j|U>oxE|h{pYcfpHdbKJacd8m8fy9G1U(;9Ex= zSX$z}k3cYvq}wCj&|fJqPM8Nv_?~}hDZgt4amKfYOF5D3_4x5Lx(4BJqP7ir^<41A z7ZZu^qqQ#jP$?2V#(hO}2Sfekh|XzxAEso`Qu*_$`Y)A2lYbJEU=qwICcz|_1e0JA dOoB&`gPBIJqKH1`gMlXOwWAX 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 diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/favicons/favicon.png b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/favicons/favicon.png deleted file mode 100644 index f875fee1c4f205d0adcb8517e0904cd7b1dfe52c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2309 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 diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/js/accordion.js b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/js/accordion.js deleted file mode 100644 index 3f30304..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/js/accordion.js +++ /dev/null @@ -1,53 +0,0 @@ -/* Originally from the Government Wide Pattern Library. - Modified to check for items expanded on page load and - to allow you to close an accordion without opening another -*/ - -function Accordion($el) { - var self = this; - this.$root = $el; - this.$root.on('click', 'button', function(ev) { - ev.preventDefault(); - if ( $(this).attr('aria-expanded') === 'true' ) { - self.hide($(this)); - } else { - self.show($(this)); - } - }); - -} - -Accordion.prototype.$ = function(selector) { - return this.$root.find(selector); -} - -Accordion.prototype.hide = function($button) { - var selector = $button.attr('aria-controls'), - $content = this.$('#' + selector); - $button.attr('aria-expanded', false); - $content.attr('aria-hidden', true); -}; - -Accordion.prototype.show = function($button) { - var selector = $button.attr('aria-controls'), - $content = this.$('#' + selector); - $button.attr('aria-expanded', true); - $content.attr('aria-hidden', false); -}; - -Accordion.prototype.hideAll = function() { - var self = this; - this.$('button').each(function() { - self.hide($(this)); - }); -}; - -function accordion($el) { - return new Accordion($el); -} - -$(function() { - $('.sidebar-nav').each(function() { - accordion($(this)); - }); -}); \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/js/html5shiv.js b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/js/html5shiv.js deleted file mode 100755 index 205bdfe..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/assets/js/html5shiv.js +++ /dev/null @@ -1,301 +0,0 @@ -/** -* @preserve HTML5 Shiv prev3.7.1 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed -*/ -;(function(window, document) { -/*jshint evil:true */ - /** version */ - var version = '3.7.0'; - - /** Preset options */ - var options = window.html5 || {}; - - /** Used to skip problem elements */ - var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i; - - /** Not all elements can be cloned in IE **/ - var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i; - - /** Detect whether the browser supports default html5 styles */ - var supportsHtml5Styles; - - /** Name of the expando, to work with multiple documents or to re-shiv one document */ - var expando = '_html5shiv'; - - /** The id for the the documents expando */ - var expanID = 0; - - /** Cached data for each document */ - var expandoData = {}; - - /** Detect whether the browser supports unknown elements */ - var supportsUnknownElements; - - (function() { - try { - var a = document.createElement('a'); - a.innerHTML = ''; - //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles - supportsHtml5Styles = ('hidden' in a); - - supportsUnknownElements = a.childNodes.length == 1 || (function() { - // assign a false positive if unable to shiv - (document.createElement)('a'); - var frag = document.createDocumentFragment(); - return ( - typeof frag.cloneNode == 'undefined' || - typeof frag.createDocumentFragment == 'undefined' || - typeof frag.createElement == 'undefined' - ); - }()); - } catch(e) { - // assign a false positive if detection fails => unable to shiv - supportsHtml5Styles = true; - supportsUnknownElements = true; - } - - }()); - - /*--------------------------------------------------------------------------*/ - - /** - * Creates a style sheet with the given CSS text and adds it to the document. - * @private - * @param {Document} ownerDocument The document. - * @param {String} cssText The CSS text. - * @returns {StyleSheet} The style element. - */ - function addStyleSheet(ownerDocument, cssText) { - var p = ownerDocument.createElement('p'), - parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement; - - p.innerHTML = 'x'; - return parent.insertBefore(p.lastChild, parent.firstChild); - } - - /** - * Returns the value of `html5.elements` as an array. - * @private - * @returns {Array} An array of shived element node names. - */ - function getElements() { - var elements = html5.elements; - return typeof elements == 'string' ? elements.split(' ') : elements; - } - - /** - * Returns the data associated to the given document - * @private - * @param {Document} ownerDocument The document. - * @returns {Object} An object of data. - */ - function getExpandoData(ownerDocument) { - var data = expandoData[ownerDocument[expando]]; - if (!data) { - data = {}; - expanID++; - ownerDocument[expando] = expanID; - expandoData[expanID] = data; - } - return data; - } - - /** - * returns a shived element for the given nodeName and document - * @memberOf html5 - * @param {String} nodeName name of the element - * @param {Document} ownerDocument The context document. - * @returns {Object} The shived element. - */ - function createElement(nodeName, ownerDocument, data){ - if (!ownerDocument) { - ownerDocument = document; - } - if(supportsUnknownElements){ - return ownerDocument.createElement(nodeName); - } - if (!data) { - data = getExpandoData(ownerDocument); - } - var node; - - if (data.cache[nodeName]) { - node = data.cache[nodeName].cloneNode(); - } else if (saveClones.test(nodeName)) { - node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode(); - } else { - node = data.createElem(nodeName); - } - - // Avoid adding some elements to fragments in IE < 9 because - // * Attributes like `name` or `type` cannot be set/changed once an element - // is inserted into a document/fragment - // * Link elements with `src` attributes that are inaccessible, as with - // a 403 response, will cause the tab/window to crash - // * Script elements appended to fragments will execute when their `src` - // or `text` property is set - return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node; - } - - /** - * returns a shived DocumentFragment for the given document - * @memberOf html5 - * @param {Document} ownerDocument The context document. - * @returns {Object} The shived DocumentFragment. - */ - function createDocumentFragment(ownerDocument, data){ - if (!ownerDocument) { - ownerDocument = document; - } - if(supportsUnknownElements){ - return ownerDocument.createDocumentFragment(); - } - data = data || getExpandoData(ownerDocument); - var clone = data.frag.cloneNode(), - i = 0, - elems = getElements(), - l = elems.length; - for(;i -1 ? ( eminpx || getEmValue() ) : 1 ); - } - if( !!max ){ - max = parseFloat( max ) * ( max.indexOf( em ) > -1 ? ( eminpx || getEmValue() ) : 1 ); - } - - // if there's no media query at all (the () part), or min or max is not null, and if either is present, they're true - if( !thisstyle.hasquery || ( !minnull || !maxnull ) && ( minnull || currWidth >= min ) && ( maxnull || currWidth <= max ) ){ - if( !styleBlocks[ thisstyle.media ] ){ - styleBlocks[ thisstyle.media ] = []; - } - styleBlocks[ thisstyle.media ].push( rules[ thisstyle.rules ] ); - } - } - } - - //remove any existing respond style element(s) - for( var j in appendedEls ){ - if( appendedEls.hasOwnProperty( j ) ){ - if( appendedEls[ j ] && appendedEls[ j ].parentNode === head ){ - head.removeChild( appendedEls[ j ] ); - } - } - } - appendedEls.length = 0; - - //inject active styles, grouped by media type - for( var k in styleBlocks ){ - if( styleBlocks.hasOwnProperty( k ) ){ - var ss = doc.createElement( "style" ), - css = styleBlocks[ k ].join( "\n" ); - - ss.type = "text/css"; - ss.media = k; - - //originally, ss was appended to a documentFragment and sheets were appended in bulk. - //this caused crashes in IE in a number of circumstances, such as when the HTML element had a bg image set, so appending beforehand seems best. Thanks to @dvelyk for the initial research on this one! - head.insertBefore( ss, lastLink.nextSibling ); - - if ( ss.styleSheet ){ - ss.styleSheet.cssText = css; - } - else { - ss.appendChild( doc.createTextNode( css ) ); - } - - //push to appendedEls to track for later removal - appendedEls.push( ss ); - } - } - }, - //find media blocks in css text, convert to style blocks - translate = function( styles, href, media ){ - var qs = styles.replace( respond.regex.keyframes, '' ).match( respond.regex.media ), - ql = qs && qs.length || 0; - - //try to get CSS path - href = href.substring( 0, href.lastIndexOf( "/" ) ); - - var repUrls = function( css ){ - return css.replace( respond.regex.urls, "$1" + href + "$2$3" ); - }, - useMedia = !ql && media; - - //if path exists, tack on trailing slash - if( href.length ){ href += "/"; } - - //if no internal queries exist, but media attr does, use that - //note: this currently lacks support for situations where a media attr is specified on a link AND - //its associated stylesheet has internal CSS media queries. - //In those cases, the media attribute will currently be ignored. - if( useMedia ){ - ql = 1; - } - - for( var i = 0; i < ql; i++ ){ - var fullq, thisq, eachq, eql; - - //media attr - if( useMedia ){ - fullq = media; - rules.push( repUrls( styles ) ); - } - //parse for styles - else{ - fullq = qs[ i ].match( respond.regex.findStyles ) && RegExp.$1; - rules.push( RegExp.$2 && repUrls( RegExp.$2 ) ); - } - - eachq = fullq.split( "," ); - eql = eachq.length; - - for( var j = 0; j < eql; j++ ){ - thisq = eachq[ j ]; - mediastyles.push( { - media : thisq.split( "(" )[ 0 ].match( respond.regex.only ) && RegExp.$2 || "all", - rules : rules.length - 1, - hasquery : thisq.indexOf("(") > -1, - minw : thisq.match( respond.regex.minw ) && parseFloat( RegExp.$1 ) + ( RegExp.$2 || "" ), - maxw : thisq.match( respond.regex.maxw ) && parseFloat( RegExp.$1 ) + ( RegExp.$2 || "" ) - } ); - } - } - - applyMedia(); - }, - - //recurse through request queue, get css text - makeRequests = function(){ - if( requestQueue.length ){ - var thisRequest = requestQueue.shift(); - - ajax( thisRequest.href, function( styles ){ - translate( styles, thisRequest.href, thisRequest.media ); - parsedSheets[ thisRequest.href ] = true; - - // by wrapping recursive function call in setTimeout - // we prevent "Stack overflow" error in IE7 - w.setTimeout(function(){ makeRequests(); },0); - } ); - } - }, - - //loop stylesheets, send text content to translate - ripCSS = function(){ - - for( var i = 0; i < links.length; i++ ){ - var sheet = links[ i ], - href = sheet.href, - media = sheet.media, - isCSS = sheet.rel && sheet.rel.toLowerCase() === "stylesheet"; - - //only links plz and prevent re-parsing - if( !!href && isCSS && !parsedSheets[ href ] ){ - // selectivizr exposes css through the rawCssText expando - if (sheet.styleSheet && sheet.styleSheet.rawCssText) { - translate( sheet.styleSheet.rawCssText, href, media ); - parsedSheets[ href ] = true; - } else { - if( (!/^([a-zA-Z:]*\/\/)/.test( href ) && !base) || - href.replace( RegExp.$1, "" ).split( "/" )[0] === w.location.host ){ - // IE7 doesn't handle urls that start with '//' for ajax request - // manually add in the protocol - if ( href.substring(0,2) === "//" ) { href = w.location.protocol + href; } - requestQueue.push( { - href: href, - media: media - } ); - } - } - } - } - makeRequests(); - }; - - //translate CSS - ripCSS(); - - //expose update for re-running respond later on - respond.update = ripCSS; - - //expose getEmValue - respond.getEmValue = getEmValue; - - //adjust on resize - function callMedia(){ - applyMedia( true ); - } - - if( w.addEventListener ){ - w.addEventListener( "resize", callMedia, false ); - } - else if( w.attachEvent ){ - w.attachEvent( "onresize", callMedia ); - } -})(this); diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f.rb b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f.rb deleted file mode 100644 index 5d8be9a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f.rb +++ /dev/null @@ -1,8 +0,0 @@ -# @author Mike Bland (michael.bland@gsa.gov) - -require 'guides_style_18f/assets' -require 'guides_style_18f/generator' -require 'guides_style_18f/includes' -require 'guides_style_18f/layouts' -require 'guides_style_18f/sass' -require 'guides_style_18f/version' diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/assets.rb b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/assets.rb deleted file mode 100644 index 0f31c8a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/assets.rb +++ /dev/null @@ -1,35 +0,0 @@ -# @author Mike Bland (michael.bland@gsa.gov) - -require 'jekyll/static_file' -require 'liquid' - -module GuidesStyle18F - class Assets - SOURCE = File.realpath File.join(__FILE__, '..', '..', '..') - BEGIN_PATH = SOURCE.size + File::SEPARATOR.size - - def self.copy_to_site(site) - Dir.glob File.join(SOURCE, 'assets', '**', '*') do |asset| - next unless File.file? asset - asset = asset[BEGIN_PATH..-1] - site.static_files << ::Jekyll::StaticFile.new( - site, SOURCE, File.dirname(asset), File.basename(asset)) - end - end - end - - class AssetRootTag < ::Liquid::Tag - ::Liquid::Template.register_tag 'guides_style_18f_asset_root', self - - def render(context) - self.class.do_render context - end - - def self.do_render(context) - @asset_root ||= begin - config = context.registers[:site].config - config['asset_root'] || config['baseurl'] - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/generator.rb b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/generator.rb deleted file mode 100644 index 4e903ff..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/generator.rb +++ /dev/null @@ -1,12 +0,0 @@ -# @author Mike Bland (michael.bland@gsa.gov) - -require 'jekyll/generator' - -module GuidesStyle18F - class Generator < ::Jekyll::Generator - def generate(site) - Layouts.register site - Assets.copy_to_site site - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/includes.rb b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/includes.rb deleted file mode 100644 index 55448ec..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/includes.rb +++ /dev/null @@ -1,19 +0,0 @@ -# @author Mike Bland (michael.bland@gsa.gov) - -require 'jekyll/tags/include' -require 'liquid' - -module GuidesStyle18F - class IncludeTag < ::Jekyll::Tags::IncludeTag - ::Liquid::Template.register_tag 'guides_style_18f_include', self - - def initialize(_tag_name, _name, _tokens) - super - @includes_dir = File.join File.dirname(__FILE__), 'includes' - end - - def resolved_includes_dir(_context) - includes_dir - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/includes/analytics.html b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/includes/analytics.html deleted file mode 100644 index bb81078..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/includes/analytics.html +++ /dev/null @@ -1,16 +0,0 @@ -{% if site.google_analytics_ua %} - - - -{% endif %} diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/includes/footer.html b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/includes/footer.html deleted file mode 100644 index 129f79e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/includes/footer.html +++ /dev/null @@ -1,9 +0,0 @@ -

diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/includes/header.html b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/includes/header.html deleted file mode 100644 index 03cba68..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/includes/header.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - {{ page.title }} - {{ site.name }} - - - - - - - - - - {% for style in site.styles %} - {% endfor %}{% for style in page.styles %} - {% endfor %} - - diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/includes/scripts.html b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/includes/scripts.html deleted file mode 100644 index e7dc4fa..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/includes/scripts.html +++ /dev/null @@ -1,5 +0,0 @@ - - -{% for script in site.scripts %} -{% endfor %}{% for script in page.scripts %} -{% endfor %} diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/includes/sidebar.html b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/includes/sidebar.html deleted file mode 100644 index c2f22ee..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/includes/sidebar.html +++ /dev/null @@ -1,30 +0,0 @@ - diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/layouts.rb b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/layouts.rb deleted file mode 100644 index 07550e5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/layouts.rb +++ /dev/null @@ -1,37 +0,0 @@ -# @author Mike Bland (michael.bland@gsa.gov) - -require 'jekyll/layout' -require 'safe_yaml' - -module GuidesStyle18F - # We have to essentially recreate the ::Jekyll::Layout constructor to loosen - # the default restriction that layouts be included in the site source. - class Layouts < ::Jekyll::Layout - private_class_method :new - - def initialize(site, layout_file) - @site = site - @base = File.join File.dirname(__FILE__), 'layouts' - @name = "#{layout_file}.html" - parse_content_and_data File.join(@base, name) - process name - end - - def parse_content_and_data(file_path) - self.data = {} - self.content = File.read file_path - - front_matter_pattern = /^(---\n.*)---\n/m - front_matter_match = front_matter_pattern.match content - return unless front_matter_match - - self.content = front_matter_match.post_match - self.data = SafeYAML.load front_matter_match[1], safe: true - end - private :parse_content_and_data - - def self.register(site) - site.layouts['guides_style_18f_default'] = new site, 'default' - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/layouts/default.html b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/layouts/default.html deleted file mode 100644 index 09572f7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/layouts/default.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - {% guides_style_18f_include header.html %} - - - -
- -
- -
- {% if site.logourl != null %} - - {% endif %} -

{{ site.name }}

{% if site.back_link %} - {% endif %} -
- -
- -
- -
-

{{ page.title }}

- {{ content }} -
- - {% guides_style_18f_include sidebar.html %} - -
- - {% guides_style_18f_include footer.html %} - -
- - -{% guides_style_18f_include analytics.html %} -{% guides_style_18f_include scripts.html %} - diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/sass.rb b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/sass.rb deleted file mode 100644 index 5042f73..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/sass.rb +++ /dev/null @@ -1,12 +0,0 @@ -# @author Mike Bland (michael.bland@gsa.gov) - -require 'sass' - -module GuidesStyle18F - class Sass - DIR = File.join File.dirname(__FILE__), 'sass' - GUIDES_STYLES_FILE = File.join DIR, 'guides_style_18f.scss' - end -end - -Sass.load_paths << ::GuidesStyle18F::Sass::DIR diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/sass/_guides_style_18f_custom.scss b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/sass/_guides_style_18f_custom.scss deleted file mode 100644 index 4c7bc56..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/sass/_guides_style_18f_custom.scss +++ /dev/null @@ -1,50 +0,0 @@ -/* -This is where custom styles for your guide should live. -*/ - -div.skip-nav a { - position: absolute; - left: -10000; - top: 0; - width: 1px; - height: auto; - overflow: hidden; -} -div.skip-nav a:focus { - position: absolute; - top: 5px; - left: 5px; - width: auto; - height: auto; - z-index: 999999; - background-color: white; - padding-left: 2px; - padding-right: 2px; - overflow: visible; - } - - .mainContent:focus { - outline: none; - } - - table, th, td { - border: 1px solid black; - padding: 5px; - margin:5px; -} -th { - background: #767576; - color:white; -} -li.active > a{ - background-color: #317ab9; -} - -div.back-link { - display: block; - padding-top: .5em; -} - -header { - padding-bottom: 1.5em; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/sass/_guides_style_18f_main.scss b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/sass/_guides_style_18f_main.scss deleted file mode 100644 index 5c54be1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/sass/_guides_style_18f_main.scss +++ /dev/null @@ -1,606 +0,0 @@ -/* -Main.css -================================== -Begin with generic 'mobile first' styles -*/ - -/* -Normalize the box model -================================== -*/ - -*, -*:before, -*:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - -/* -global styles -================================== -*/ - -html, body { - height: 100%; -} - -/* -Typography -================================== -*/ - -body { - font-family: "Open Sans", Arial, sans-serif; - font-weight: 400; - font-style: normal; - line-height: 1.466666667; - margin: 0; -} - -h1, -h2, -h3, -h4, -h5 { - font-family: "Raleway", Arial, sans-serif; - font-weight: 600; -} - -.site-title { - font-size: 1.9em; - color: #919395; - margin: 0; - line-height: 1.2941176470588236; - display: inline-block; -} - -h2 { - font-size: 1.375em; - margin: 1.4em 0 0 0; -} - -h3 { - margin-top: 30px; -} - -h4 { - font-size: 1em; - text-transform: uppercase; -} - -.page-title { - margin-top: .727272727em; /* 16/22 */ -} - -/* -Lists --------------------------------- -*/ - -.main-content ul { - padding-left: 1.1em; -} - -.main-content li { - margin-bottom: 1em; -} - -li h3, -li h4 { - margin: 0; -} - -li p { - margin-top: 0; -} - -/* -Links -================================== -*/ - -a { - -webkit-transition: .2s; - -moz-transition: .2s; - transition: .2s; -} - -a, -a:link, -a:visited { - color: #0072ce; - border-bottom: 1px dotted #0072ce; - text-decoration: none; -} - -a:hover { - border-bottom: 1px solid #7eb8dd; - color: #7eb8dd; - text-decoration: none; -} - -a:active { - border-bottom: 1px solid #002d72; - color: #002d72; - text-decoration: none; -} - -a:focus { - border-bottom: 1px solid #0072ce; - color: #0072ce; - outline: thin dotted; - text-decoration: none; -} - -a.title-link { - color: #75787B; - border-bottom: none; -} - -a.title-link:hover, -a.title-link:active, -a.title-link:focus { - color: #7eb8dd; - border-bottom: none; -} - -a.skip-link { - color: #0072ce; - border-bottom: none; - padding: .25em; -} - -a.skip-link:hover, -a.skip-link:active, -a.skip-link:focus { - background-color: #0072ce; - color: #fff; - border-bottom: none; -} - - -/* -Navigation -================================== -*/ - -.sidebar-nav a { - display: block; - padding-bottom: 10px; - padding-right: 10px; - padding-left: 14px; - padding-top: 10px; - -webkit-transition: .4s; - transition: .4s; - width: 80%; - float: left; -} - -.sidebar-nav a, -.sidebar-nav a:link, -.sidebar-nav a:visited { - border-bottom: none; - color: #74767B; -} - -.sidebar-nav a:hover, -.sidebar-nav a:focus, -.sidebar-nav a:active, -.sidebar-nav .sidebar-nav-active > a { - color: #74767B; - border-left: 4px solid #1188ff; - background-color: transparent; -} - -.sidebar-nav ul { - margin: 0; - padding: 0; -} - -.sidebar-nav li { - list-style: none; - border-bottom: 1px solid #babbbd; - font-size: 1.125em; - overflow: hidden; -} - -.sidebar-nav li:last-child { - border-bottom: none; -} - -.nav-children { - clear: both; - display: block; - font-size: 14px; - max-height: 0; - opacity: 0; - overflow: hidden; - position: relative; - -webkit-transition: max-height .2s, opacity .2s; - -moz-transition: max-height .2s, opacity .2s; - -o-transition: max-height .2s, opacity .2s; - transition: max-height .2s, opacity .2s; -} - -.nav-children li { - border-bottom: none; - padding-left: 0; -} - -.nav-children a { - padding: 5px 5px 5px 20px; -} - -.nav-children li:last-child a { - padding-bottom: 10px; -} - -.expand-subnav { - background: none; - border: none; - border-radius: 30px; - color: #0072ce; - cursor: pointer; - display: block; - float: right; - font-size: 20px; - height: 30px; - line-height: 1; - margin: 8px; - padding-bottom: 5px; - position: relative; - width: 30px; - -webkit-appearance: none; - -moz-appearance: none; - -o-appearance: none; - appearance: none; - -webkit-transition: -webkit-transform .2s; - -moz-transition: -moz-transform .2s; - -o-transition: -o-transform .2s; - transition: transform .2s; -} - -.expand-subnav:hover, -.expand-subnav:focus { - background-color: #0072ce; - color: #fff; - outline: none; -} - -.expand-subnav[aria-expanded=true] { - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); -} - - -.nav-children[aria-hidden=true] { - max-height: 0; -} - -.nav-children { - display: block; - max-height: 400px; - opacity: 1; - -webkit-transition: max-height .2s, opacity .2s; - -moz-transition: max-height .2s, opacity .2s; - -o-transition: max-height .2s, opacity .2s; - transition: max-height .2s, opacity .2s; -} - -/* -Layout -================================== -*/ - -.logo { - display: block; -} - -.content { - padding-top: 2em; - padding-bottom: 2em; -} - -/* offset the fixed position header for jump links */ -section:before { - display: block; - content: ""; - height: 60px; - margin: -60px 0 0; -} - -.wrap { - max-width: 1200px; - margin: 0 auto; - padding-left: 20px; - padding-right: 20px; -} - -header { - width: 100%; - border-bottom: 4px solid #1188ff; - background-color: #fff; - padding: 2em 0; -} - - -/* -Footer -================================== -*/ - -/* for sticky footer */ -.container { - display: table; - height: 100%; - width: 100%; -} - -footer { - display: table-row; /* for sticky footer */ - height: 1px; /* for sticky footer */ - border-top: 2px solid #babbbd; - background: #f1f2f2; - width: 100%; - font-size: 0.875em; -} - -footer .wrap { - padding-top: 2em; - padding-bottom: 2em; -} - - -/* -Helpers -================================== -*/ - -/* Hide from both screenreaders and browsers: h5bp.com/u */ -.hidden { - display: none !important; - visibility: hidden; -} - -/* Hide only visually, but have it available for screenreaders: h5bp.com/v */ -.visuallyhidden { - border: 0; - clip: rect(0 0 0 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; -} - -/* Extends the .visuallyhidden class to allow the element to be focusable - * when navigated to via the keyboard: h5bp.com/p */ -.visuallyhidden.focusable:active, -.visuallyhidden.focusable:focus { - clip: auto; - height: auto; - margin: 0; - overflow: visible; - position: static; - width: auto; -} - -/* Hide visually and from screenreaders, but maintain layout */ -.invisible { - visibility: hidden; -} - - -/* -Style -================================== -*/ - -.intro { - color: #75787B; -} - -li h4 { - margin: 0; -} - -.license { - font-family: "Avenir Next Demi", Arial, sans-serif; - font-weight: normal; - font-style: normal; -} - -pre { - max-width: 100%; - font-size: 0.875em; - overflow-y: scroll; - background-color: #f1f2f2; - padding: 10px; -} - -/* -Post list ----------------------------------- -*/ - -ul.posts { - padding: 0; -} - -.posts li { - list-style: none; -} - -.post-date { - color: #75787B; -} - -/* -Repo list ----------------------------------- -*/ - -ul.repo-list { - margin: .5em 0 1em 0; - padding: 0; -} - -.repo-list li { - list-style: none; -} - -.repo-list p { - margin: 0; - font-size: 0.875em; -} - -.repo-list h4 { - text-transform: none; -} - -/* -Helper Classes -================================== -*/ - -/* -Clearfix list ----------------------------------- -*/ - -.group:before, -.group:after { - content: " "; - display: table; -} - -.group:after { - clear: both; -} - -.group { - *zoom: 1; -} - -/* -Desktop Styles -================================== -*/ - -@media screen and (min-width: 45em) and (min-height: 32.5em) { - - /* - Typography - ============================== - */ - - /* - Layout - ============================== - */ - - .logo { - max-width: 30%; - padding-right: 20px; - margin-top: -12px; - float: right; - } - - aside { - width: 30%; - float: left; - } - - .main-content { - width: 67%; - float: right; - margin-bottom: 120px; - } - - .main-content img { - max-width: 100%; - } - - /* - Navigation - ============================== - */ - - - /* - Style - ============================== - */ - - /* - Repo list - ------------------------------ - */ - - .repo-list li { - list-style: none; - display: block; - float: left; - height: 4.0625em; - max-height: 4.0625em; - background-color: #E7E7E6; - border-left: 1px solid #BABBBD; - width: 30%; - } - - .repo-list a:link, - .repo-list a:visited { - display: block; - max-height: 4.0625em; - background-color: #E7E7E6; - border-bottom: none; - padding: .625em 1em 1em 1em; - } - - .repo-list a:hover { - color: #4D5F87; - background-color: #CDE3F1; - } - - .repo-list li:first-child { - text-align: center; - border-left: none; - line-height: 60px; - padding: .625em 1em; - width: 10%; - } - -} - -@media screen and (max-width: 54.375em) and (min-height: 32.5em) { - - /* keep the repo list containers the same height, but account for the need for more height */ - - .repo-list li { - height: 6em; - max-height: 6em; - } - - .repo-list a:link, - .repo-list a:visited { - max-height: 6em; - } -} - -/* -Mobile Styles -================================== -*/ - -@media screen and (max-width: 40.5em) { - - .main-content { - margin-top: 1.5em; - } - -} diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/sass/_guides_style_18f_syntax.scss b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/sass/_guides_style_18f_syntax.scss deleted file mode 100644 index 1e651cf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/sass/_guides_style_18f_syntax.scss +++ /dev/null @@ -1,60 +0,0 @@ -.highlight { background: #ffffff; } -.highlight .c { color: #999988; font-style: italic } /* Comment */ -.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ -.highlight .k { font-weight: bold } /* Keyword */ -.highlight .o { font-weight: bold } /* Operator */ -.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */ -.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */ -.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ -.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .gr { color: #aa0000 } /* Generic.Error */ -.highlight .gh { color: #999999 } /* Generic.Heading */ -.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ -.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */ -.highlight .go { color: #888888 } /* Generic.Output */ -.highlight .gp { color: #555555 } /* Generic.Prompt */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #aaaaaa } /* Generic.Subheading */ -.highlight .gt { color: #aa0000 } /* Generic.Traceback */ -.highlight .kc { font-weight: bold } /* Keyword.Constant */ -.highlight .kd { font-weight: bold } /* Keyword.Declaration */ -.highlight .kp { font-weight: bold } /* Keyword.Pseudo */ -.highlight .kr { font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */ -.highlight .m { color: #009999 } /* Literal.Number */ -.highlight .s { color: #d14 } /* Literal.String */ -.highlight .na { color: #008080 } /* Name.Attribute */ -.highlight .nb { color: #0086B3 } /* Name.Builtin */ -.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */ -.highlight .no { color: #008080 } /* Name.Constant */ -.highlight .ni { color: #800080 } /* Name.Entity */ -.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */ -.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */ -.highlight .nn { color: #555555 } /* Name.Namespace */ -.highlight .nt { color: #000080 } /* Name.Tag */ -.highlight .nv { color: #008080 } /* Name.Variable */ -.highlight .ow { font-weight: bold } /* Operator.Word */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ -.highlight .mf { color: #009999 } /* Literal.Number.Float */ -.highlight .mh { color: #009999 } /* Literal.Number.Hex */ -.highlight .mi { color: #009999 } /* Literal.Number.Integer */ -.highlight .mo { color: #009999 } /* Literal.Number.Oct */ -.highlight .sb { color: #d14 } /* Literal.String.Backtick */ -.highlight .sc { color: #d14 } /* Literal.String.Char */ -.highlight .sd { color: #d14 } /* Literal.String.Doc */ -.highlight .s2 { color: #d14 } /* Literal.String.Double */ -.highlight .se { color: #d14 } /* Literal.String.Escape */ -.highlight .sh { color: #d14 } /* Literal.String.Heredoc */ -.highlight .si { color: #d14 } /* Literal.String.Interpol */ -.highlight .sx { color: #d14 } /* Literal.String.Other */ -.highlight .sr { color: #009926 } /* Literal.String.Regex */ -.highlight .s1 { color: #d14 } /* Literal.String.Single */ -.highlight .ss { color: #990073 } /* Literal.String.Symbol */ -.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */ -.highlight .vc { color: #008080 } /* Name.Variable.Class */ -.highlight .vg { color: #008080 } /* Name.Variable.Global */ -.highlight .vi { color: #008080 } /* Name.Variable.Instance */ -.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/sass/guides_style_18f.scss b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/sass/guides_style_18f.scss deleted file mode 100644 index 5040bdc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/sass/guides_style_18f.scss +++ /dev/null @@ -1,3 +0,0 @@ -@import "./_guides_style_18f_main"; -@import "./_guides_style_18f_syntax"; -@import "./_guides_style_18f_custom"; diff --git a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/version.rb b/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/version.rb deleted file mode 100644 index c0e0207..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/guides_style_18f-0.0.1/lib/guides_style_18f/version.rb +++ /dev/null @@ -1,5 +0,0 @@ -# @author Mike Bland (michael.bland@gsa.gov) - -module GuidesStyle18F - VERSION = '0.0.1' -end diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/.travis.yml b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/.travis.yml deleted file mode 100644 index 232b1de..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/.travis.yml +++ /dev/null @@ -1,11 +0,0 @@ -language: ruby -rvm: - - "1.8.7" - - "1.9.2" - - "1.9.3" - - "2.0.0" - - "2.1.0" - - jruby-18mode # JRuby in 1.8 mode - - jruby-19mode # JRuby in 1.9 mode - - rbx -install: rake develop diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/CONTRIBUTING.md b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/CONTRIBUTING.md deleted file mode 100644 index 9133c4f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/CONTRIBUTING.md +++ /dev/null @@ -1,45 +0,0 @@ -# Hi there! - -I see you are interested in contributing. That is wonderful. I love -contributions. - -I guarantee that there are bugs in this software. And I guarantee that there is -a feature you want that is not in here yet. As such, any and all bugs reports -are gratefully accepted, bugfixes even more so. Helping out with bugs is the -easiest way to contribute. - - -## The Quick Version - -* Have a [GitHub Account][]. -* Search the [GitHub Issues][] and see if your issue already present. If so - add your comments, :thumbsup:, etc. -* Issue not there? Not a problem, open up a [new issue][]. - * **Bug reports** please be as detailed as possible. Include: - * full ruby engine and version: `ruby -e 'puts RUBY_DESCRIPTION'` - * operating system and version - * version of hitimes `ruby -rubygems -e "require 'hitimes'; puts Hitimes::VERSION"` - * as much detail about the bug as possible so I can replicated it. Feel free - to link in a [gist][] - * **New Feature** - * What the new feature should do. - * What benefit the new feature brings to the project. -* Fork the [repo][]. -* Create a new branch for your issue: `git checkout -b issue/my-issue` -* Lovingly craft your contribution: - * `rake develop` to get started, or if you prefer bundler `rake develop:using_bunder && bundle`. - * `rake test` to run tests -* Make sure that `rake test` passes. Its important, I said it twice. -* Add yourself to the contributors section below. -* Submit your [pull request][]. - -# Contributors - -* Jeremy Hinegardner - -[GitHub Account]: https://github.com/signup/free "GitHub Signup" -[GitHub Issues]: https://github.com/copiousfreetime/hitimes/issues "Hitimes Issues" -[new issue]: https://github.com/copiousfreetime/hitimes/issues/new "New Hitimes Issue" -[gist]: https://gist.github.com/ "New Gist" -[repo]: https://github.com/copiousfreetime/hitimes "hitimes Repo" -[pull request]: https://help.github.com/articles/using-pull-requests "Using Pull Requests" diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/HISTORY.md b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/HISTORY.md deleted file mode 100644 index eed7711..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/HISTORY.md +++ /dev/null @@ -1,97 +0,0 @@ -# Hitimes Changelog - -## Version 1.2.2 2014-07-09 - -* fix compilation issue with clock_gettime in libc (reported by eradman and virtualfunction) -* Switch to minispec for tests - -## Version 1.2.1 2013-03-12 - -* Update dependencies -* Ruby 2.0 fixes -* Switch to Markdown, Yeah RDoc 4.0! - -## Version 1.2.0 2013-02-09 - -* Update dependencies -* Documentation cleanup -* Fix use of deprecated JRuby API in java extension -* Fix use of deprecated OSX system calls in C extension -* Make hitimes -w clean -* Fix ambiguity of calling duration on non-started Interval -* Use RbConfig instead of Config (eregon) -* Added Hitimes.measure -* Switch to using rake-compiler for cross compilation of gems - -## Version 1.1.1 2010-09-04 - -* Remove the unnecessary dependencies that should be development dependencies - -## Version 1.1.0 2010-07-28 - -* Add a pure java extension so hitimes may be used in jruby with the same API - -## Version 1.0.5 2010-07-20 - -* Fix 'circular require considered harmful' warnings in 1.9.x (reported by Roger Pack) -* Fix 'method redefined' warnings in 1.9.x (reported by Roger Pack) - -## Version 1.0.4 2009-08-01 - -* Add in support for x86-mingw32 gem -* Add version subdirectory for extension on all platforms - -## Version 1.0.3 2009-06-28 - -* Fix bug with time.h on linode (reported by Roger Pack) -* Fix potential garbage collection issue with Interval class -* Windows gem is now a fat binary to support installing in 1.8 or 1.9 from the - same gem - -## Version 1.0.1 2009-06-12 - -* Fix examples -* performance tuning, new Hitimes::Metric derived classes are faster than old Timer class - -## Version 1.0.0 2009-06-12 - -* Major version bump with complete refactor of the metric collection API -* 3 types of metrics now instead of just 1 Timer - * Hitimes::ValueMetric - * Hitimes::TimedMetric - * Hitimes::TimedValueMetric -* The ability to convert all metrics #to_hash -* Updated documentation with examples using each metric type - -## Version 0.4.1 2009-02-19 - -* change to ISC License -* fix bug in compilation on gentoo - -## Version 0.4.0 2008-12-20 - -* Added new stat 'rate' -* Added new stat method to_hash -* Added Hitimes::MutexedStats class for threadsafe stats collection - - not needed when used in MRI 1.8.x -* remove stale dependency on mkrf - -## Version 0.3.0 - -* switched to extconf for building extensions -* first release of windows binary gem -* reverted back to normal rdoc - -## Version 0.2.1 - -* added Timer#rate method -* switched to darkfish rdoc - -## Version 0.2.0 - -* Performance improvements -* Added Hitimes::Stats class - -## Version 0.1.0 - -* Initial completion diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/LICENSE b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/LICENSE deleted file mode 100644 index c99635d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/LICENSE +++ /dev/null @@ -1,16 +0,0 @@ -ISC LICENSE - http://opensource.org/licenses/isc-license.txt - -Copyright (c) 2008-2012 Jeremy Hinegardner - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/Manifest.txt b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/Manifest.txt deleted file mode 100644 index 3f01ae4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/Manifest.txt +++ /dev/null @@ -1,45 +0,0 @@ -.travis.yml -CONTRIBUTING.md -HISTORY.md -LICENSE -Manifest.txt -README.md -Rakefile -examples/benchmarks.rb -examples/stats.rb -ext/hitimes/c/extconf.rb -ext/hitimes/c/hitimes.c -ext/hitimes/c/hitimes_instant_clock_gettime.c -ext/hitimes/c/hitimes_instant_osx.c -ext/hitimes/c/hitimes_instant_windows.c -ext/hitimes/c/hitimes_interval.c -ext/hitimes/c/hitimes_interval.h -ext/hitimes/c/hitimes_stats.c -ext/hitimes/c/hitimes_stats.h -ext/hitimes/java/src/hitimes/Hitimes.java -ext/hitimes/java/src/hitimes/HitimesInterval.java -ext/hitimes/java/src/hitimes/HitimesService.java -ext/hitimes/java/src/hitimes/HitimesStats.java -lib/hitimes.rb -lib/hitimes/metric.rb -lib/hitimes/mutexed_stats.rb -lib/hitimes/paths.rb -lib/hitimes/stats.rb -lib/hitimes/timed_metric.rb -lib/hitimes/timed_value_metric.rb -lib/hitimes/value_metric.rb -lib/hitimes/version.rb -spec/hitimes_spec.rb -spec/interval_spec.rb -spec/metric_spec.rb -spec/mutex_stats_spec.rb -spec/paths_spec.rb -spec/spec_helper.rb -spec/stats_spec.rb -spec/timed_metric_spec.rb -spec/timed_value_metric_spec.rb -spec/value_metric_spec.rb -spec/version_spec.rb -tasks/default.rake -tasks/extension.rake -tasks/this.rb diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/README.md b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/README.md deleted file mode 100644 index bfba1d8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/README.md +++ /dev/null @@ -1,163 +0,0 @@ -## hitimes - -* [Homepage](http://github.com/copiousfreetime/hitimes) -* [Github project](http://github.com.org/copiousfreetime/hitimes) -* email jeremy at copiousfreetime dot org -* `git clone url git://github.com/copiousfreetime/hitimes.git` - -## INSTALL - -* `gem install hitimes` - -## DESCRIPTION - -Hitimes is a fast, high resolution timer library for recording -performance metrics. It uses the appropriate low method calls for each -system to get the highest granularity time increments possible. - -It currently supports any of the following systems: - -* any system with the POSIX call `clock_gettime()` -* Mac OS X -* Windows -* JRuby - -Using Hitimes can be faster than using a series of `Time.new` calls, and -it will have a much higher granularity. It is definitely faster than -using `Process.times`. - -## SYNOPSIS - -### Interval - -Use Hitimes::Interval to calculate only the duration of a block of code - -``` ruby -duration = Hitimes::Interval.measure do - # some operation ... - end - -puts duration -``` - -### TimedMetric - -Use a Hitimes::TimedMetric to calculate statistics about an iterative operation - -``` ruby -timed_metric = Hitimes::TimedMetric.new('operation on items') -``` - -Explicitly use `start` and `stop`: - -``` ruby -collection.each do |item| - timed_metric.start - # .. do something with item - timed_metric.stop -end -``` - -Or use the block. In TimedMetric the return value of +measure+ is the return -value of the block - -``` ruby -collection.each do |item| - result_of_do_something = timed_metric.measure { do_something( item ) } -end -``` -And then look at the stats - -``` ruby -puts timed_metric.mean -puts timed_metric.max -puts timed_metric.min -puts timed_metric.stddev -puts timed_metric.rate -``` -### ValueMetric - -Use a Hitimes::ValueMetric to calculate statistics about measured samples - -``` ruby -value_metric = Hitimes::ValueMetric.new( 'size of thing' ) -loop do - # ... do stuff changing sizes of 'thing' - value_metric.measure( thing.size ) - # ... do other stuff that may change size of thing -end - -puts value_metric.mean -puts value_metric.max -puts value_metric.min -puts value_metric.stddev -puts value_metric.rate -``` - -### TimedValueMetric - -Use a Hitimes::TimedValueMetric to calculate statistics about batches of samples - -``` ruby -timed_value_metric = Hitimes::TimedValueMetric.new( 'batch times' ) -loop do - batch = ... # get a batch of things - timed_value_metric.start - # .. do something with batch - timed_value_metric.stop( batch.size ) -end - -puts timed_value_metric.rate - -puts timed_value_metric.timed_stats.mean -puts timed_value_metric.timed_stats.max -puts timed_value_metric.timed_stats.min -puts timed_value_metric.timed_stats.stddev - -puts timed_value_metric.value_stats.mean -puts timed_value_metric.value_stats.max -puts timed_value_metric.value_stats.min -puts timed_value_metric.value_stats.stddev -``` - -## CHANGES - -Read the HISTORY.md file. - -## BUILDING FOR WINDOWS - -[rake-compiler](https://github.com/luislavena/rake-compiler) is use for building -the windows version. For me, on OSX to cross compile the process is: - -``` -% gem install rake-compiler # in each rvm instance, 1.8.7, 1.9.3 -% rvm use 2.0.0@hitimes -% rake-compiler cross-ruby VERSION=2.0.0-p0 # or latest -% rvm use 1.9.3@hitimes -% rake-compiler cross-ruby VERSION=1.9.3-p374 # or latest -% rvm use 1.8.7@hitimes -% rake-compiler cross-ruby VERSION=1.8.7-p371 - -# This only works via 1.8.7 at the current moment -% rake cross native gem RUBY_CC_VERSION=1.8.7:1.9.3:2.0.0 -``` - -## CREDITS - -* [Bruce Williams](https://github.com/bruce) for suggesting the idea - -## ISC License - -Copyright (c) 2008-2012 Jeremy Hinegardner - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/Rakefile b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/Rakefile deleted file mode 100644 index 8d19d0c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/Rakefile +++ /dev/null @@ -1,25 +0,0 @@ -# vim: syntax=ruby -load 'tasks/this.rb' - -This.name = "hitimes" -This.author = "Jeremy Hinegardner" -This.email = "jeremy@copiousfreetime.org" -This.homepage = "http://github.com/copiousfreetime/#{ This.name }" - -This.ruby_gemspec do |spec| - spec.add_development_dependency( 'rake' , '~> 10.0') - spec.add_development_dependency( 'minitest' , '~> 5.3' ) - spec.add_development_dependency( 'rdoc' , '~> 4.1' ) - spec.add_development_dependency( 'json' , '~> 1.7.7' ) - spec.add_development_dependency( 'rake-compiler', '~> 0.9' ) - - spec.extensions.concat This.extension_conf_files - spec.license = "ISC" -end - -This.java_gemspec( This.ruby_gemspec ) do |spec| - spec.extensions.clear -end - -load 'tasks/default.rake' -load 'tasks/extension.rake' diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/examples/benchmarks.rb b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/examples/benchmarks.rb deleted file mode 100644 index ed8a60c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/examples/benchmarks.rb +++ /dev/null @@ -1,113 +0,0 @@ -require 'benchmark' -require 'time' - -# -# this is all here in case this example is run from the examples directory -# -begin - require 'hitimes' -rescue LoadError => le - ext_path = File.expand_path( File.join( File.dirname( __FILE__ ), "..", "ext" ) ) - lib_path = File.expand_path( File.join( File.dirname( __FILE__ ), "..", "lib" ) ) - if $:.include?( ext_path ) then - raise le - end - $: << ext_path - $: << lib_path - retry -end - -#---------------------------------------------------------------------- -# test program to look at the performance sampling time durations using -# different methods -#---------------------------------------------------------------------- - -include Benchmark - -# -# Normal apprach to Interval usage -# -def hitimes_duration_i1 - i = Hitimes::Interval.new - i.start - i.stop -end - -# -# Use the easy access method to start stop an interval -# -def hitimes_duration_i2 - Hitimes::Interval.now.stop -end - -# -# Use a new timer each time -# -def hitimes_duration_t1 - Hitimes::TimedMetric.now('duration_t1').stop -end - -# -# reuse the same timer over and over -# -HT2= Hitimes::TimedMetric.new( 'duration_t2' ) -def hitimes_duration_t2 - HT2.start - HT2.stop -end - -HT3 = Hitimes::TimedMetric.new( 'duration_t3' ) -def hitimes_duration_t3 - HT3.measure { nil } -end - -# -# Check out the speed of the TimedValueMetric too -# -def hitimes_duration_tv1 - Hitimes::TimedValueMetric.now( 'duration_tv1' ).stop( 42 ) -end - -HTV2 = Hitimes::TimedValueMetric.new( 'duration_tv2' ) -def hitimes_duration_tv2 - HTV2.start - HTV2.stop( 42 ) -end - -HTV3 = Hitimes::TimedValueMetric.new( 'duration_tv3' ) -def hitimes_duration_tv3 - HTV3.measure( 42 ) { nil } -end - -# -# use the Struct::Tms values and return the difference in User time between 2 -# successive calls -# -def process_duration - t1 = Process.times.utime - Process.times.utime - t1 -end - -# -# Take 2 times and subtract one from the other -# -def time_duration - t1 = Time.now.to_f - Time.now.to_f - t1 -end - - -puts "Testing time sampling 100,000 times" - -bm(30) do |x| - x.report("Process") { 100_000.times { process_duration } } - x.report("Time") { 100_000.times { time_duration } } - x.report("Hitimes::TimedMetric 1") { 100_000.times { hitimes_duration_t1 } } - x.report("Hitimes::TimedMetric 2") { 100_000.times { hitimes_duration_t2 } } - x.report("Hitimes::TimedMetric 3") { 100_000.times { hitimes_duration_t3 } } - x.report("Hitimes::Interval 1") { 100_000.times { hitimes_duration_i1 } } - x.report("Hitimes::Interval 2") { 100_000.times { hitimes_duration_i2 } } - x.report("Hitimes::TimedValueMetric 1") { 100_000.times { hitimes_duration_tv1 } } - x.report("Hitimes::TimedValueMetric 2") { 100_000.times { hitimes_duration_tv2 } } - x.report("Hitimes::TimedValueMetric 3") { 100_000.times { hitimes_duration_tv3 } } -end diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/examples/stats.rb b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/examples/stats.rb deleted file mode 100644 index 97d1980..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/examples/stats.rb +++ /dev/null @@ -1,31 +0,0 @@ -# -# this is all here in case this example is run from the examples directory -# -begin - require 'hitimes' -rescue LoadError => le - %w[ ext lib ].each do |p| - path = File.expand_path( File.join( File.dirname( __FILE__ ), "..", p ) ) - if $:.include?( path ) then - raise le - end - $: << path - end - retry -end - -s = Hitimes::Stats.new -dir = ARGV.shift || Dir.pwd -Dir.entries( dir ).each do |entry| - fs = File.stat( entry ) - if fs.file? then - s.update( fs.size ) - end -end - -Hitimes::Stats::STATS.each do |m| - puts "#{m.rjust(6)} : #{s.send( m ) }" -end - -puts s.to_hash.inspect - diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/.RUBYARCHDIR.-.hitimes.-.2.2.time b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/.RUBYARCHDIR.-.hitimes.-.2.2.time deleted file mode 100644 index e69de29..0000000 diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/Makefile b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/Makefile deleted file mode 100644 index 21a6a43..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/Makefile +++ /dev/null @@ -1,260 +0,0 @@ - -SHELL = /bin/sh - -# V=0 quiet, V=1 verbose. other values don't work. -V = 0 -Q1 = $(V:1=) -Q = $(Q1:0=@) -ECHO1 = $(V:1=@:) -ECHO = $(ECHO1:0=@echo) -NULLCMD = : - -#### Start of system configuration section. #### - -srcdir = . -topdir = /Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0 -hdrdir = $(topdir) -arch_hdrdir = /Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/x86_64-darwin14 -PATH_SEPARATOR = : -VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby -prefix = $(DESTDIR)/Users/elainekamlley/.rvm/rubies/ruby-2.2.0 -rubysitearchprefix = $(rubylibprefix)/$(sitearch) -rubyarchprefix = $(rubylibprefix)/$(arch) -rubylibprefix = $(libdir)/$(RUBY_BASE_NAME) -exec_prefix = $(prefix) -vendorarchhdrdir = $(vendorhdrdir)/$(sitearch) -sitearchhdrdir = $(sitehdrdir)/$(sitearch) -rubyarchhdrdir = $(rubyhdrdir)/$(arch) -vendorhdrdir = $(rubyhdrdir)/vendor_ruby -sitehdrdir = $(rubyhdrdir)/site_ruby -rubyhdrdir = $(includedir)/$(RUBY_VERSION_NAME) -vendorarchdir = $(vendorlibdir)/$(sitearch) -vendorlibdir = $(vendordir)/$(ruby_version) -vendordir = $(rubylibprefix)/vendor_ruby -sitearchdir = $(DESTDIR)./.gem.20180423-68206-xz1dep -sitelibdir = $(DESTDIR)./.gem.20180423-68206-xz1dep -sitedir = $(rubylibprefix)/site_ruby -rubyarchdir = $(rubylibdir)/$(arch) -rubylibdir = $(rubylibprefix)/$(ruby_version) -sitearchincludedir = $(includedir)/$(sitearch) -archincludedir = $(includedir)/$(arch) -sitearchlibdir = $(libdir)/$(sitearch) -archlibdir = $(libdir)/$(arch) -ridir = $(datarootdir)/$(RI_BASE_NAME) -mandir = $(datarootdir)/man -localedir = $(datarootdir)/locale -libdir = $(exec_prefix)/lib -psdir = $(docdir) -pdfdir = $(docdir) -dvidir = $(docdir) -htmldir = $(docdir) -infodir = $(datarootdir)/info -docdir = $(datarootdir)/doc/$(PACKAGE) -oldincludedir = $(DESTDIR)/usr/include -includedir = $(prefix)/include -localstatedir = $(prefix)/var -sharedstatedir = $(prefix)/com -sysconfdir = $(prefix)/etc -datadir = $(datarootdir) -datarootdir = $(prefix)/share -libexecdir = $(exec_prefix)/libexec -sbindir = $(exec_prefix)/sbin -bindir = $(exec_prefix)/bin -archdir = $(rubyarchdir) - - -CC = gcc -CXX = g++ -LIBRUBY = $(LIBRUBY_SO) -LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a -LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME) -LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static -framework CoreFoundation -empty = -OUTFLAG = -o $(empty) -COUTFLAG = -o $(empty) - -RUBY_EXTCONF_H = -cflags = $(optflags) $(debugflags) $(warnflags) -optflags = -O3 -fno-fast-math -debugflags = -ggdb3 -warnflags = -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens -CCDLFLAGS = -fno-common -CFLAGS = $(CCDLFLAGS) $(cflags) -fno-common -pipe -DUSE_INSTANT_OSX=1 -Wall $(ARCH_FLAG) -INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir) -DEFS = -CPPFLAGS = -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT $(DEFS) $(cppflags) -CXXFLAGS = $(CCDLFLAGS) $(cxxflags) $(ARCH_FLAG) -ldflags = -L. -fstack-protector -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -framework CoreServices -dldflags = -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -ARCH_FLAG = -DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG) -LDSHARED = $(CC) -dynamic -bundle -LDSHAREDXX = $(CXX) -dynamic -bundle -AR = ar -EXEEXT = - -RUBY_INSTALL_NAME = $(RUBY_BASE_NAME) -RUBY_SO_NAME = ruby.2.2.0 -RUBYW_INSTALL_NAME = -RUBY_VERSION_NAME = $(RUBY_BASE_NAME)-$(ruby_version) -RUBYW_BASE_NAME = rubyw -RUBY_BASE_NAME = ruby - -arch = x86_64-darwin14 -sitearch = $(arch) -ruby_version = 2.2.0 -ruby = $(bindir)/$(RUBY_BASE_NAME) -RUBY = $(ruby) -ruby_headers = $(hdrdir)/ruby.h $(hdrdir)/ruby/ruby.h $(hdrdir)/ruby/defines.h $(hdrdir)/ruby/missing.h $(hdrdir)/ruby/intern.h $(hdrdir)/ruby/st.h $(hdrdir)/ruby/subst.h $(arch_hdrdir)/ruby/config.h - -RM = rm -f -RM_RF = $(RUBY) -run -e rm -- -rf -RMDIRS = rmdir -p -MAKEDIRS = mkdir -p -INSTALL = /usr/bin/install -c -INSTALL_PROG = $(INSTALL) -m 0755 -INSTALL_DATA = $(INSTALL) -m 644 -COPY = cp -TOUCH = exit > - -#### End of system configuration section. #### - -preload = - -libpath = /usr/local/opt/libyaml/lib /usr/local/opt/readline/lib /usr/local/opt/libksba/lib /usr/local/opt/openssl/lib . $(libdir) -LIBPATH = -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L. -L$(libdir) -DEFFILE = - -CLEANFILES = mkmf.log -DISTCLEANFILES = -DISTCLEANDIRS = - -extout = -extout_prefix = -target_prefix = /hitimes/2.2 -LOCAL_LIBS = -LIBS = $(LIBRUBYARG_SHARED) -lpthread -ldl -lobjc -ORIG_SRCS = hitimes.c hitimes_instant_clock_gettime.c hitimes_instant_osx.c hitimes_instant_windows.c hitimes_interval.c hitimes_stats.c -SRCS = $(ORIG_SRCS) -OBJS = hitimes.o hitimes_instant_clock_gettime.o hitimes_instant_osx.o hitimes_instant_windows.o hitimes_interval.o hitimes_stats.o -HDRS = $(srcdir)/hitimes_interval.h $(srcdir)/hitimes_stats.h -TARGET = hitimes -TARGET_NAME = hitimes -TARGET_ENTRY = Init_$(TARGET_NAME) -DLLIB = $(TARGET).bundle -EXTSTATIC = -STATIC_LIB = - -TIMESTAMP_DIR = . -BINDIR = $(bindir) -RUBYCOMMONDIR = $(sitedir)$(target_prefix) -RUBYLIBDIR = $(sitelibdir)$(target_prefix) -RUBYARCHDIR = $(sitearchdir)$(target_prefix) -HDRDIR = $(rubyhdrdir)/ruby$(target_prefix) -ARCHHDRDIR = $(rubyhdrdir)/$(arch)/ruby$(target_prefix) - -TARGET_SO = $(DLLIB) -CLEANLIBS = $(TARGET).bundle -CLEANOBJS = *.o *.bak - -all: $(DLLIB) -static: $(STATIC_LIB) -.PHONY: all install static install-so install-rb -.PHONY: clean clean-so clean-static clean-rb - -clean-static:: -clean-rb-default:: -clean-rb:: -clean-so:: -clean: clean-so clean-static clean-rb-default clean-rb - -$(Q)$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) .*.time - -distclean-rb-default:: -distclean-rb:: -distclean-so:: -distclean-static:: -distclean: clean distclean-so distclean-static distclean-rb-default distclean-rb - -$(Q)$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log - -$(Q)$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES) - -$(Q)$(RMDIRS) $(DISTCLEANDIRS) 2> /dev/null || true - -realclean: distclean -install: install-so install-rb - -install-so: $(DLLIB) $(TIMESTAMP_DIR)/.RUBYARCHDIR.-.hitimes.-.2.2.time - $(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR) -clean-static:: - -$(Q)$(RM) $(STATIC_LIB) -install-rb: pre-install-rb install-rb-default -install-rb-default: pre-install-rb-default -pre-install-rb: Makefile -pre-install-rb-default: Makefile -pre-install-rb-default: - @$(NULLCMD) -$(TIMESTAMP_DIR)/.RUBYARCHDIR.-.hitimes.-.2.2.time: - $(Q) $(MAKEDIRS) $(@D) $(RUBYARCHDIR) - $(Q) $(TOUCH) $@ - -site-install: site-install-so site-install-rb -site-install-so: install-so -site-install-rb: install-rb - -.SUFFIXES: .c .m .cc .mm .cxx .cpp .o .S - -.cc.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< - -.cc.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $< - -.mm.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< - -.mm.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $< - -.cxx.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< - -.cxx.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $< - -.cpp.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< - -.cpp.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $< - -.c.o: - $(ECHO) compiling $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $< - -.c.S: - $(ECHO) translating $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $< - -.m.o: - $(ECHO) compiling $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $< - -.m.S: - $(ECHO) translating $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $< - -$(DLLIB): $(OBJS) Makefile - $(ECHO) linking shared-object hitimes/2.2/$(DLLIB) - -$(Q)$(RM) $(@) - $(Q) $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS) - $(Q) $(POSTLINK) - - - -$(OBJS): $(HDRS) $(ruby_headers) diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/extconf.rb b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/extconf.rb deleted file mode 100644 index 132ff2d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/extconf.rb +++ /dev/null @@ -1,24 +0,0 @@ -require 'rbconfig' -require 'mkmf' - -if RbConfig::CONFIG['host_os'] =~ /darwin/ then - $CFLAGS += " -DUSE_INSTANT_OSX=1 -Wall" - $LDFLAGS += " -framework CoreServices" -elsif RbConfig::CONFIG['host_os'] =~ /win32/ or RbConfig::CONFIG['host_os'] =~ /mingw/ then - $CFLAGS += " -DUSE_INSTANT_WINDOWS=1" -else - if have_library("rt", "clock_gettime") then - $CFLAGS += " -DUSE_INSTANT_CLOCK_GETTIME=1" - elsif have_library("c", "clock_gettime") then - $CFLAGS += " -DUSE_INSTANT_CLOCK_GETTIME=1" - else - raise NotImplementedError, <<-_ -Unable to find the function 'clock_gettime' in either libc or librt. -Please file an issue at https://github.com/copiousfreetime/hitimes. -_ - end -end - -# put in a different location if on windows so we can have fat binaries -subdir = RUBY_VERSION.gsub(/\.\d$/,'') -create_makefile("hitimes/#{subdir}/hitimes") diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes.bundle b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes.bundle deleted file mode 100755 index 4fd33dfdb59db78a2891d5742c09c37c91919b96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19504 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 -#include "hitimes_interval.h" - -/* Module and Classes */ -VALUE mH; /* module Hitimes */ -VALUE eH_Error; /* class Hitimes::Error */ - -/* - * Document-class: Hitimes::Error - * - * General error class for the Hitimes module - */ -void Init_hitimes( ) -{ - mH = rb_define_module("Hitimes"); - - eH_Error = rb_define_class_under(mH, "Error", rb_eStandardError); - - Init_hitimes_interval(); - Init_hitimes_stats( ); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes.o b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes.o deleted file mode 100644 index 7561be2ebc49a1e66bfbdc68734399f2d212a56d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2588 zcma)8&2Jk;6n|@H9p}q+2!)nXutb4^@NPc%P+FD5&{Pft2}+Vypfaqz8++CDuC-p9 z1cB58s#H~#I3QFm2o6X{J#njg>aEBA6GemrcLd_&_jYFzdy_(*^yYocd%t}%^JeV( zfBg3MFp-ue4B#PfN#_9!Itu=goe!ZlCxR9^2Xsl=z$E4ZJ3&H3&SsS8iM_gXadp>L z+BvB(9)I?`JkbdIhUf|lMMBg&QRw;&=@4QNPvNNVUzPQ#{ESj|^6NpX75K_6#M#Pf zMOj22%XJlZT_jzxhxe|Zgs`1jw;@nu>;~S2%6U~4ky`paneFmY(CAHq?x!DG3U%Zx8k4sF~r|=Z)LGjw%ns2q7P8x4p0=*_{I(fkQfER7G_u@S* zS2HW|#Q)-DGp-g^a;`TrW%s@Hz5-Z*m_G20why%wWXuTR9*^~vguSDuUg_xk5& z?#9;4-Alj5ac<qR@UDs^_;Nd27YPYm^P+MC+i-rLwSB0hA}s9 z%)UU)B-5yqxz<6j>39~l^s?3RJZH;n2Vt}kcy3@ex~}bX%%0=hL1@;xzU?_?*sX1u zv&O73Z8n@%$CPO08MtOmJlM)()~Qt`FYp_suHSJRzGIhMKce-@%Gwe+RgqM_?7NYW zAf!!d&laZiY@zu0vBISG2yT4lWy%(orxuQ$8aq9f!TDq#qvfe=fla&vCouc^*cepZ zAkJ7klFTje&(J0~c`EX8hmO-rymz2i6A_Q+FlN5Su)vBwl2tEv_ANMWfwd2YzJVCd zXMTc+!*V0pCU*d6rwJHHTfc)bgR`7t2`1tf>_ss4<2{I-wQs-}SU+qsz`JQ&!QMUO z3X*+8E>~k`O`xg z8j)8Ur$3?TqoZ%@`P?0SF4xnGxo`Et16|Mcx|uvmLi`(?LsUKmi4!XGIlzCMj~+)= z=Jf*a@Dq@DBF;=D_VIB@thLO~2G2Jjk(c`j5;!@2msvg~{Sfi|=TaVqJj4Y^;ubrE z1l1;2q^-K^0_?u8yODE;vy`g;j~Bdn-1=pzx$^8>M p-N=)+vw^2T;L+%G@H1dL;UI#*4R*qw<;74kx)s=6&mn>K{uc_0T_XSh diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_instant_clock_gettime.c b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_instant_clock_gettime.c deleted file mode 100644 index c932938..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_instant_clock_gettime.c +++ /dev/null @@ -1,28 +0,0 @@ -#ifdef USE_INSTANT_CLOCK_GETTIME - -#include "hitimes_interval.h" - -#include -#ifndef CLOCK_MONOTONIC -# include -# ifndef CLOCK_MONOTONIC -# ifdef __linux__ -# include -# endif -# endif -#endif - -hitimes_instant_t hitimes_get_current_instant( ) -{ - struct timespec time; - int rc; - - rc = clock_gettime( CLOCK_MONOTONIC, &time); - if ( 0 != rc ) { - char* e = strerror( rc ); - rb_raise(eH_Error, "Unable to retrieve time for CLOCK_MONOTONIC : %s", e ); - } - - return ( ( NANOSECONDS_PER_SECOND * (long)time.tv_sec ) + time.tv_nsec ); -} -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_instant_clock_gettime.o b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_instant_clock_gettime.o deleted file mode 100644 index 6780efccbf8ccf8cbd27d9af560a6e0801fbee42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1008 zcma)*PfNov6u{F>amXB#9YjUxK|#Sab)I${sHb_6`R5k;C#z*?I@)fyn;*ubM~{90 zZ-QP#KZEz7AimTDw>hzozP!BGmtS5U$;12G=Nv*>9>D;b1AP{Q4hpgidN2GxWGLf9 znWKDQBB2HOpOA!JCei^zNbBId_2W;@6mKMcH8O|wF133eiIXS|6S9BSI6fRrN#{2* zGKDvGD#c@=GnJ<}YJ+RhuyL8nvurz}eR1CL`V_A$8CiKgZ--*ZB=1gg)}_78SYKpu zkH)`wFOs9oV@6(JIcbTL^(mgXV?wg>n9r%mpX9xYAjsOcK~MkGw*h%+uZ#2Pibl7~ zsNQUz9_f7=#eT^3x?viozU44zNwsc*W9-$9+BUlI6F;Ca@p+tBJRuHTk`D1`BEp7) z@JS2^Oqm76cC3IgI>6m9O4=dwL+tf@m&UkHxf@2 -#include - -/* All this OSX code is adapted from http://developer.apple.com/library/mac/#qa/qa1398/_index.html */ - -/* - * returns the conversion factor, this value is used to convert - * the value from hitimes_get_current_instant() into seconds - */ -long double hitimes_instant_conversion_factor() -{ - static mach_timebase_info_data_t s_timebase_info; - static long double conversion_factor; - static uint64_t nano_conversion; - - /** - * If this is the first time we've run, get the timebase. - * We can use denom == 0 to indicate that s_timebase_info is - * uninitialised because it makes no sense to have a zero - * denominator is a fraction. - */ - - if ( s_timebase_info.denom == 0 ) { - mach_timebase_info(&s_timebase_info); - nano_conversion = s_timebase_info.numer / s_timebase_info.denom; - conversion_factor = (long double) (nano_conversion) * (1e9l); - } - - return conversion_factor; -} - -/* - * returns the mach absolute time, which has no meaning outside of a conversion - * factor. - */ -hitimes_instant_t hitimes_get_current_instant() -{ - return mach_absolute_time(); -} - - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_instant_osx.o b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_instant_osx.o deleted file mode 100644 index 0a0fbbf055195cf1673566453da6107621ccb4f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3428 zcmbVOU1%It6uz^wGuh21n{DGyON^O^wAN~N(zJ@T)He2qR9mg3ja4kSv%9mKrL!~Z z{KUkkVnirXDL&|npa@ERQuM*TC}Q?DzRaBkIo(>1Iuk%aSZyeEWW?D{LfOU1^Z zbl%RvdCBuS1f1`lK0MtPG{w2JwkY&3W+`@^gY$}63ToW*-B1j?N2d?%ZK)g=t5=2L zYa)Ivg>H8dzX;EA%AraU?^?ov9TfcT(Rut9o>3~f<~-%6+rJp^1%a_ryt-X=$Rvq( zTD<)af%k>*?=tc$j=rpau3^_qBqoXXOd^3FX9RGYEQ{AL%At$b!;8bXQoLqRvWyndam0cVlsXU0`IZ_ zI0rl$8{nVFQI~(?*ej62K%_{UYcMCFPpx|f^jlE)!46{5Af0$pIJy8yVFhDpdzfgy z@8Se$pFc8l>c^R-ONE)!+ll{~9?yqo+4RkychOsBPVKq!L*vSKgQH-+|L9_sejzKI^@RPg^+NLpjtWh(4UJhK>L?A^#d#rsXt&-N|hZQ+rxOpVMN?MIlOBEqp zt?pbS=kLvJ%k3N9fjd;*!sPtEVG^WJmgzQ&&)-dK-*BXiS{;_;d@e_dxIhP6R`-C- zjDx)|m%}n!WW6t8zoBTNzRrX_GQjQ(3yHD&1tmgPY^&4{fRSb&hPpiXKGyQmw=*(V{CZ=>c==)I@GDjH)iVjZ1_ zE|&&ovMP>3)|=@Ikp5e?H+JmDE!B&%3tGt*fQY?~+4hQ#7M5jiZPIySH{#d$VdPqE zL;1LVhfqAbs+}^`*(8*lUh^<_^op=Cpwcy{E-(<{?$Mc%<@Rq7>eADPn6yxk3Ilza zGe8-K{1(g$SFeRb;4}6}zVKXX*Ptk>P;WQ%t_VHx*=KCJTkjHdQtV|sCF!sHAf8mC zyl9{SP}meae#|+WY`K3SY$4lljv)TcZ6mXw8*TjhyT%e z!-ABqgtW}EQU1ZmgOZ~4%L9_quljPes3@weRaN=8resxlvd&6{njeNX90p+~DizHc-Idh-1(gT`#BxitA=#MDTRqk-l(c^y`RM zO;EV0Qa*{^A>_9TstF20_UfC0;#ZO7VGw^BrUf5=6`;$8@QCY#@Q9Dc2Uv8l?5zaP rcpT5=KESQbxKVoh@xN7y|H~-Z!T%i}DhvVNHNB$FV^-wxgXGv6xIsk6>btB!K3 z#i?DX9PQg38VeSMcF8F^MSDHqa3qCN5dvqso3FjW(-MfjboHW9+xX8mBmJ`#tPBu2aMf+7wvR3tNzK zF+38J!2z;n(OPb9GM&rMFXdqFMbHT~e?}c-7Hz5sA$9ZRV@;tsu$J|an*nRdGEi0h E1w+P&Gynhq diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_interval.c b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_interval.c deleted file mode 100644 index 951a54e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_interval.c +++ /dev/null @@ -1,370 +0,0 @@ -/** - * Copyright (c) 2008 Jeremy Hinegardner - * All rights reserved. See LICENSE and/or COPYING for details. - * - * vim: shiftwidth=4 - */ - -#include "hitimes_interval.h" - -/* Modules and Classes -- defined here */ -VALUE cH_Interval; /* class Hitimes::Interval */ - -/** - * Allocator and Deallocator for Interval classes - */ - -VALUE hitimes_interval_free(hitimes_interval_t* i) -{ - xfree( i ); - return Qnil; -} - -VALUE hitimes_interval_alloc(VALUE klass) -{ - VALUE obj; - hitimes_interval_t* i = xmalloc( sizeof( hitimes_interval_t ) ); - - i->start_instant = 0L; - i->stop_instant = 0L; - i->duration = -1.0l; - - obj = Data_Wrap_Struct(klass, NULL, hitimes_interval_free, i); - return obj; -} - -/** - * call-seq: - * Interval.now -> Interval - * - * Create an interval that has already started - */ -VALUE hitimes_interval_now( ) -{ - VALUE obj; - hitimes_interval_t *i = xmalloc( sizeof( hitimes_interval_t ) ); - - i->start_instant = hitimes_get_current_instant( ); - i->stop_instant = 0L; - i->duration = -1.0l; - - obj = Data_Wrap_Struct(cH_Interval, NULL, hitimes_interval_free, i); - - return obj; -} - -/** - * call-seq: - * Interval.measure { } -> Float - * - * Times the execution of the block returning the number of seconds it took - */ -VALUE hitimes_interval_measure( ) -{ - hitimes_instant_t before; - hitimes_instant_t after; - long double duration; - - if ( !rb_block_given_p() ) { - rb_raise(eH_Error, "No block given to Interval.measure" ); - } - - before = hitimes_get_current_instant( ); - rb_yield( Qnil ); - after = hitimes_get_current_instant( ); - - duration = ( after - before ) / HITIMES_INSTANT_CONVERSION_FACTOR; - return rb_float_new( duration ); -} - -/** - * call-seq: - * interval.split -> Interval - * - * Immediately stop the current interval and start a new interval that has a - * start_instant equivalent to the stop_interval of self. - */ -VALUE hitimes_interval_split( VALUE self ) -{ - hitimes_interval_t *first; - hitimes_interval_t *second = xmalloc( sizeof( hitimes_interval_t ) ); - VALUE obj; - - Data_Get_Struct( self, hitimes_interval_t, first ); - first->stop_instant = hitimes_get_current_instant( ); - - second->start_instant = first->stop_instant; - second->stop_instant = 0L; - second->duration = -1.0l; - - obj = Data_Wrap_Struct(cH_Interval, NULL, hitimes_interval_free, second); - - return obj; -} - - -/** - * call-seq: - * interval.start -> boolean - * - * mark the start of the interval. Calling start on an already started - * interval has no effect. An interval can only be started once. If the - * interval is truely started +true+ is returned otherwise +false+. - */ -VALUE hitimes_interval_start( VALUE self ) -{ - hitimes_interval_t *i; - VALUE rc = Qfalse; - - Data_Get_Struct( self, hitimes_interval_t, i ); - if ( 0L == i->start_instant ) { - i->start_instant = hitimes_get_current_instant( ); - i->stop_instant = 0L; - i->duration = -1.0l; - - rc = Qtrue; - } - - return rc; -} - - -/** - * call-seq: - * interval.stop -> bool or Float - * - * mark the stop of the interval. Calling stop on an already stopped interval - * has no effect. An interval can only be stopped once. If the interval is - * truely stopped then the duration is returned, otherwise +false+. - */ -VALUE hitimes_interval_stop( VALUE self ) -{ - hitimes_interval_t *i; - VALUE rc = Qfalse; - - Data_Get_Struct( self, hitimes_interval_t, i ); - if ( 0L == i->start_instant ) { - rb_raise(eH_Error, "Attempt to stop an interval that has not started" ); - } - - if ( 0L == i->stop_instant ) { - i->stop_instant = hitimes_get_current_instant( ); - i->duration = ( i->stop_instant - i->start_instant ) / HITIMES_INSTANT_CONVERSION_FACTOR; - rc = rb_float_new( i->duration ); - } - - return rc; -} - -/** - * call-seq: - * interval.duration_so_far -> Float or false - * - * return how the duration so far. This will return the duration from the time - * the Interval was started if the interval is running, otherwise it will return - * false. - */ -VALUE hitimes_interval_duration_so_far( VALUE self ) -{ - hitimes_interval_t *i; - VALUE rc = Qfalse; - - Data_Get_Struct( self, hitimes_interval_t, i ); - if ( 0L == i->start_instant ) { - return rc; - } - - if ( 0L == i->stop_instant ) { - long double d; - hitimes_instant_t now = hitimes_get_current_instant( ); - d = ( now - i->start_instant ) / HITIMES_INSTANT_CONVERSION_FACTOR; - rc = rb_float_new( d ); - } - return rc; -} - - -/** - * call-seq: - * interval.started? -> boolean - * - * returns whether or not the interval has been started - */ -VALUE hitimes_interval_started( VALUE self ) -{ - hitimes_interval_t *i; - - Data_Get_Struct( self, hitimes_interval_t, i ); - - return ( 0L == i->start_instant ) ? Qfalse : Qtrue; -} - - -/** - * call-seq: - * interval.stopped? -> boolean - * - * returns whether or not the interval has been stopped - */ -VALUE hitimes_interval_stopped( VALUE self ) -{ - hitimes_interval_t *i; - - Data_Get_Struct( self, hitimes_interval_t, i ); - - return ( 0L == i->stop_instant ) ? Qfalse : Qtrue; -} - -/** - * call-seq: - * interval.running? -> boolean - * - * returns whether or not the interval is running or not. This means that it - * has started, but not stopped. - */ -VALUE hitimes_interval_running( VALUE self ) -{ - hitimes_interval_t *i; - VALUE rc = Qfalse; - - Data_Get_Struct( self, hitimes_interval_t, i ); - if ( ( 0L != i->start_instant ) && ( 0L == i->stop_instant ) ) { - rc = Qtrue; - } - - return rc; -} - - -/** - * call-seq: - * interval.start_instant -> Integer - * - * The integer representing the start instant of the Interval. This value - * is not useful on its own. It is a platform dependent value. - */ -VALUE hitimes_interval_start_instant( VALUE self ) -{ - hitimes_interval_t *i; - - Data_Get_Struct( self, hitimes_interval_t, i ); - - return ULL2NUM( i->start_instant ); -} - - -/** - * call-seq: - * interval.stop_instant -> Integer - * - * The integer representing the stop instant of the Interval. This value - * is not useful on its own. It is a platform dependent value. - */ -VALUE hitimes_interval_stop_instant( VALUE self ) -{ - hitimes_interval_t *i; - - Data_Get_Struct( self, hitimes_interval_t, i ); - - return ULL2NUM( i->stop_instant ); -} - - - -/** - * call-seq: - * interval.duration -> Float - * interval.to_f -> Float - * interval.to_seconds -> Float - * interval.length -> Float - * - * Returns the Float value of the interval, the value is in seconds. If the - * interval has not had stop called yet, it will report the number of seconds - * in the interval up to the current point in time. - * - * Raises Error if duration is called on an interval that has not started yet. - */ -VALUE hitimes_interval_duration ( VALUE self ) -{ - hitimes_interval_t *i; - - Data_Get_Struct( self, hitimes_interval_t, i ); - - /* raise an error if the internval is not started */ - if ( 0L == i->start_instant ) { - rb_raise(eH_Error, "Attempt to report a duration on an interval that has not started" ); - } - - - /** - * if stop has not yet been called, then return the amount of time so far - */ - if ( 0L == i->stop_instant ) { - long double d; - hitimes_instant_t now = hitimes_get_current_instant( ); - d = ( now - i->start_instant ) / HITIMES_INSTANT_CONVERSION_FACTOR; - return rb_float_new( d ); - } - - /* - * stop has been called, calculate the duration and save the result - */ - if ( i->duration < 0.0 ) { - i->duration = ( i->stop_instant - i->start_instant ) / HITIMES_INSTANT_CONVERSION_FACTOR; - } - - return rb_float_new( i->duration ); -} - - -/** - * Document-class: Hitimes::Interval - * - * This is the lowest level timing mechanism available. It allows for easy - * measuring based upon a block: - * - * duration = Interval.measure { ... } - * - * Or measuring something specifically - * - * interval = Interval.new - * interval.start - * duration = interval.stop - * - * Allocating and starting an interval can be done in one method call with - * - * interval = Interval.now - * - * Interval is useful when you only need to track a single interval of time, or - * if you do not want to track statistics about an operation. - * - */ -void Init_hitimes_interval() -{ - mH = rb_define_module("Hitimes"); - - cH_Interval = rb_define_class_under( mH, "Interval", rb_cObject ); - rb_define_alloc_func( cH_Interval, hitimes_interval_alloc ); - - rb_define_module_function( cH_Interval, "now", hitimes_interval_now, 0 ); /* in hitimes_interval.c */ - rb_define_module_function( cH_Interval, "measure", hitimes_interval_measure, 0 ); /* in hitimes_interval.c */ - - rb_define_method( cH_Interval, "duration", hitimes_interval_duration, 0 ); /* in hitimes_interval.c */ - rb_define_method( cH_Interval, "length", hitimes_interval_duration, 0 ); - rb_define_method( cH_Interval, "to_f", hitimes_interval_duration, 0 ); - rb_define_method( cH_Interval, "to_seconds", hitimes_interval_duration, 0 ); - - rb_define_method( cH_Interval, "duration_so_far", hitimes_interval_duration_so_far, 0); /* in hitimes_interval.c */ - - rb_define_method( cH_Interval, "started?", hitimes_interval_started, 0 ); /* in hitimes_interval.c */ - rb_define_method( cH_Interval, "running?", hitimes_interval_running, 0 ); /* in hitimes_interval.c */ - rb_define_method( cH_Interval, "stopped?", hitimes_interval_stopped, 0 ); /* in hitimes_interval.c */ - - rb_define_method( cH_Interval, "start_instant", hitimes_interval_start_instant, 0 ); /* in hitimes_interval.c */ - rb_define_method( cH_Interval, "stop_instant", hitimes_interval_stop_instant, 0 ); /* in hitimes_interval.c */ - - rb_define_method( cH_Interval, "start", hitimes_interval_start, 0); /* in hitimes_interval.c */ - rb_define_method( cH_Interval, "stop", hitimes_interval_stop, 0); /* in hitimes_interval.c */ - rb_define_method( cH_Interval, "split", hitimes_interval_split, 0); /* in hitimes_interval.c */ - -} diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_interval.h b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_interval.h deleted file mode 100644 index 45f6076..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_interval.h +++ /dev/null @@ -1,73 +0,0 @@ -/** - * Copyright (c) 2008 Jeremy Hinegardner - * All rights reserved. See LICENSE and/or COPYING for details. - * - * vim: shiftwidth=4 - */ - -#ifndef __HITIMES_INTERVAL_H__ -#define __HITIMES_INTERVAL_H__ - -#include - -#define NANOSECONDS_PER_SECOND 1e9l - -#ifdef USE_INSTANT_CLOCK_GETTIME -# define HITIMES_U64INT unsigned long long int -# define HITIMES_INSTANT_CONVERSION_FACTOR 1e9l -#elif USE_INSTANT_OSX -# define HITIMES_U64INT uint64_t -# define HITIMES_INSTANT_CONVERSION_FACTOR hitimes_instant_conversion_factor() -#elif USE_INSTANT_WINDOWS -# define HITIMES_U64INT unsigned __int64 -# define HITIMES_INSTANT_CONVERSION_FACTOR hitimes_instant_conversion_factor() -#else -# error "Unable to build hitimes, no Instance backend available" -#endif - - -/* an alias for a 64bit unsigned integer. The various sytem dependenent - * files must define hitimes_u64int_t - */ -typedef HITIMES_U64INT hitimes_instant_t; - -typedef struct hitimes_interval { - hitimes_instant_t start_instant; - hitimes_instant_t stop_instant; - long double duration; -} hitimes_interval_t; - -/* all the backends must define these methods */ -hitimes_instant_t hitimes_get_current_instant( ); -long double hitimes_instant_conversion_factor( ); - -/* init methods */ -void Init_hitimes_stats(); -void Init_hitimes_interval(); - - -/* Module and Classes -- defined at the top level */ -extern VALUE mH; /* module Hitimes */ -extern VALUE eH_Error; /* class Hitimes::Error */ -extern VALUE cH_Interval; /* class Hitimes::Interval */ - - -/** - * Methods for Interval - */ - -VALUE hitimes_interval_free(hitimes_interval_t* i) ; -VALUE hitimes_interval_alloc(VALUE klass); -VALUE hitimes_interval_now( ); -VALUE hitimes_interval_measure( ); -VALUE hitimes_interval_split( VALUE self ); -VALUE hitimes_interval_start( VALUE self ); -VALUE hitimes_interval_stop( VALUE self ); -VALUE hitimes_interval_started( VALUE self ); -VALUE hitimes_interval_stopped( VALUE self ); -VALUE hitimes_interval_running( VALUE self ); -VALUE hitimes_interval_start_instant( VALUE self ); -VALUE hitimes_interval_stop_instant( VALUE self ); -VALUE hitimes_interval_duration ( VALUE self ); - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_interval.o b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_interval.o deleted file mode 100644 index ae92f3fbdc1b4f48733720e24da6c2317eeea1f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14480 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 = 0.0; - s->max = 0.0; - s->count = 0; - s->sum = 0.0; - s->sumsq = 0.0; - - obj = Data_Wrap_Struct(klass, NULL, hitimes_stats_free, s); - - return obj; -} - - -/** - * call-seq: - * stat.update( val ) -> val - * - * Update the running stats with the new value. - * Return the input value. - */ -VALUE hitimes_stats_update( VALUE self, VALUE v ) -{ - long double new_v; - hitimes_stats_t *stats; - - Data_Get_Struct( self, hitimes_stats_t, stats ); - new_v = NUM2DBL( v ); - - if ( 0 == stats->count ) { - stats->min = new_v; - stats->max = new_v; - } else { - stats->min = ( new_v < stats->min) ? ( new_v ) : ( stats->min ); - stats->max = ( new_v > stats->max) ? ( new_v ) : ( stats->max ); - } - - stats->count += 1; - stats->sum += new_v; - stats->sumsq += ( new_v * new_v ); - - return v; -} - -/** - * call-seq: - * stat.mean -> Float - * - * Return the arithmetic mean of the values put into the Stats object. If no - * values have passed through the stats object then 0.0 is returned; - */ -VALUE hitimes_stats_mean( VALUE self ) -{ - hitimes_stats_t *stats; - long double mean = 0.0; - - Data_Get_Struct( self, hitimes_stats_t, stats ); - - if ( stats->count > 0 ) { - mean = stats->sum / stats->count ; - } - - return rb_float_new( mean ); -} - - -/** - * call-seq: - * stat.rate -> Float - * - * Return the +count+ divided by +sum+. - * - * In many cases when Stats#update( _value_ ) is called, the _value_ is a unit - * of time, typically seconds or microseconds. #rate is a convenience for those - * times. In this case, where _value_ is a unit if time, then count divided by - * sum is a useful value, i.e. +something per unit of time+. - * - * In the case where _value_ is a non-time related value, then the value - * returned by _rate_ is not really useful. - * - */ -VALUE hitimes_stats_rate( VALUE self ) -{ - hitimes_stats_t *stats; - long double rate = 0.0; - - Data_Get_Struct( self, hitimes_stats_t, stats ); - - if ( stats->sum > 0.0 ) { - rate = stats->count / stats->sum; - } - - return rb_float_new( rate ); -} - - -/** - * call-seq: - * stat.max -> Float - * - * Return the maximum value that has passed through the Stats object - */ -VALUE hitimes_stats_max( VALUE self ) -{ - hitimes_stats_t *stats; - - Data_Get_Struct( self, hitimes_stats_t, stats ); - - return rb_float_new( stats->max ); -} - - - -/** - * call-seq: - * stat.min -> Float - * - * Return the minimum value that has passed through the Stats object - */ -VALUE hitimes_stats_min( VALUE self ) -{ - hitimes_stats_t *stats; - - Data_Get_Struct( self, hitimes_stats_t, stats ); - - return rb_float_new( stats->min ); -} - - -/** - * call-seq: - * stat.count -> Integer - * - * Return the number of values that have passed through the Stats object. - */ -VALUE hitimes_stats_count( VALUE self ) -{ - hitimes_stats_t *stats; - - Data_Get_Struct( self, hitimes_stats_t, stats ); - - return LONG2NUM( stats->count ); -} - - -/** - * call-seq: - * stat.sum -> Float - * - * Return the sum of all the values that have passed through the Stats object. - */ -VALUE hitimes_stats_sum( VALUE self ) -{ - hitimes_stats_t *stats; - - Data_Get_Struct( self, hitimes_stats_t, stats ); - - return rb_float_new( stats->sum ); -} - -/** - * call-seq: - * stat.sumsq -> Float - * - * Return the sum of the squars of all the values that passed through the Stats - * object. - */ -VALUE hitimes_stats_sumsq( VALUE self ) -{ - hitimes_stats_t *stats; - - Data_Get_Struct( self, hitimes_stats_t, stats ); - - return rb_float_new( stats->sumsq ); -} - - -/** - * call-seq: - * stat.stddev -> Float - * - * Return the standard deviation of all the values that have passed through the - * Stats object. The standard deviation has no meaning unless the count is > 1, - * therefore if the current _stat.count_ is < 1 then 0.0 will be returned; - */ -VALUE hitimes_stats_stddev ( VALUE self ) -{ - hitimes_stats_t *stats; - long double stddev = 0.0; - - Data_Get_Struct( self, hitimes_stats_t, stats ); - if ( stats->count > 1 ) { - stddev = sqrt( ( stats->sumsq - ( stats->sum * stats->sum / stats->count ) ) / ( stats->count - 1 ) ); - } - - return rb_float_new( stddev ); -} - - -/** - * Document-class: Hitimes::Stats - * - * The Stats class encapulsates capturing and reporting statistics. It is - * modeled after the RFuzz::Sampler class, but implemented in C. For general use - * you allocate a new Stats object, and then update it with new values. The - * Stats object will keep track of the _min_, _max_, _count_, _sum_ and _sumsq_ - * and when you want you may also retrieve the _mean_, _stddev_ and _rate_. - * - * this contrived example shows getting a list of all the files in a directory - * and running stats on file sizes. - * - * s = Hitimes::Stats.new - * dir = ARGV.shift || Dir.pwd - * Dir.entries( dir ).each do |entry| - * fs = File.stat( entry ) - * if fs.file? then - * s.update( fs.size ) - * end - * end - * - * %w[ count min max mean sum stddev rate ].each do |m| - * puts "#{m.rjust(6)} : #{s.send( m ) }" - * end - */ -void Init_hitimes_stats() -{ - - mH = rb_define_module("Hitimes"); - - cH_Stats = rb_define_class_under( mH, "Stats", rb_cObject ); /* in hitimes_stats.c */ - rb_define_alloc_func( cH_Stats, hitimes_stats_alloc ); - - rb_define_method( cH_Stats, "update", hitimes_stats_update, 1 ); /* in hitimes_stats.c */ - - rb_define_method( cH_Stats, "count", hitimes_stats_count, 0 ); /* in hitimes_stats.c */ - rb_define_method( cH_Stats, "max", hitimes_stats_max, 0 ); /* in hitimes_stats.c */ - rb_define_method( cH_Stats, "mean", hitimes_stats_mean, 0 ); /* in hitimes_stats.c */ - rb_define_method( cH_Stats, "min", hitimes_stats_min, 0 ); /* in hitimes_stats.c */ - rb_define_method( cH_Stats, "rate", hitimes_stats_rate, 0 ); /* in hitimes_stats.c */ - rb_define_method( cH_Stats, "sum", hitimes_stats_sum, 0 ); /* in hitimes_stats.c */ - rb_define_method( cH_Stats, "sumsq", hitimes_stats_sumsq, 0 ); /* in hitimes_stats.c */ - rb_define_method( cH_Stats, "stddev", hitimes_stats_stddev, 0 ); /* in hitimes_stats.c */ -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_stats.h b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_stats.h deleted file mode 100644 index e691918..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_stats.h +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Copyright (c) 2008 Jeremy Hinegardner - * All rights reserved. See LICENSE and/or COPYING for details. - * - * vim: shiftwidth=4 - */ - -#ifndef __HITIMES_STATS_H__ -#define __HITIMES_STATS_H__ - -#include -#include - -/* classes and modules defined elswhere */ -extern VALUE mH; /* Hitimes */ -extern VALUE eH_Error; /* Hitimes::Error */ -extern VALUE cH_Stats; /* Hitimes::Stats */ - - -typedef struct hitimes_stats { - long double min; - long double max; - long double sum; - long double sumsq; - long long count; -} hitimes_stats_t; - -#endif - - diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_stats.o b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/c/hitimes_stats.o deleted file mode 100644 index 5e1ada438050c541fa3a540b329ca47a8000fd69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11112 zcmbVS3v^t?d7i7g_iC-@O7=>!Y~eNUK(&$`lR^=A*OKg&tcQ`bLgsa~l2+2jyDOvJ zwMFO&ss*ie9D`dzfi&e&4kb-U+k}&Zk^rV80g}`9KoW|p0y?LV+K@VghVTsZ`{!|Y z@9x^@bdK))^Z)-h|Nqb9&YhXnzkTpOAD1$w=?obj7apHM86Kpyc)mu$Q=}ssgd#w7 zkPb>7HW@utBt){TbaXB)%7P#292v^;s&t9;MfRxp?AeU9lhVcJiKt{*|8GOH>^@M1ub#1h;Mu*k(fy;v1N4xhk}aBw#%IrG3qmwsPA%JoSY$jzP(lEI$6k)qV^JzaUNoRe2+_eY8-#RLVJ5NW64M&n##BLgtQlx20vc8z4Q%x3+%Gcb&&rg;3?$ zi%wgUvuLVN=D%+T8-@HmY42IA1G(=) zAW`*(n~5;87aSf8E&R&UwfH;OeS$`Z+YKGM+SjxAE-$}bUDJ8|<<8@wL+ydkEl1Pd zr3;r%EIq$;>Czt0vFDaf;CcQ{6K*fXbE7Bp$`fZuI@`BrD>ED+M(o2v*N?%1jcXHVz&oaD*x zXnzs^)4rksoXY>wbn9vGMf!Iq#w!?@>?$?ckm^m(NuNsh!fAAmoksV-X>^B9qoWPXsbab2G&=h3+x5f?9*U)7 z_-?SlbR?Z(nY|N{bd-(HWRhu?h|IA>G?HYASdz_>Je5h%le(Uz(i0Q-UI+K?jYoYw zJ;S}eebL!eY$oZu#NX;~^_@Q+#}~8tl2$PO&tBr+{24YaJYg#WPyTV%5>BB?OEezA z+Pf!`h{vNhwCtUkO;66mV>2yNnb<@$)v_;|oS2zy8OtOm;?b7b%-9VroBf;ptu0g0 zM5;yFY~BRX<`(Sil%!>xjfX7JsQ65B%9lx|VpGZJgfE7c4F`L|oopbyZMSvBWF(%7 z%5r)(ql(E`TngbiIw{Isy}g|sUBRJFt2a2fQ^>Y=jr4_kt?fO*9a7NKPl6nT5M&X9 zyL-3w_vBO=+|}9M73{GFLtWd47&X#L?TwDdB5`a7lPL@gk9ElE>+h3s4_W=&x;xv4 zl%~BWI5?=7-u{koj}6@3(;u{PgF^#deKOJ^YoK#S=g2NqEjTa`+^v{Ua4@9Gs1(k+ z+SauL4OF`AU0F|juPQ_B4Gy*22HN|3clC6Rs5%3|p|1YEV2|Say6hr6WdjfP4BCw7 zG*v_Ny5hop9i7`1)7Rf&SL$+f%T@io+q!HWA0Xb>`y%m7)S~^4utCkRwuk%L`ON3j zXJRHZ7LW2*BKs1E*M#eNMpMf%%blE+W@C|5Y@AKTBU351Cmu;*V7GD6L?SY~hfPe* zMxzX`V1x~HP;Q$g)3ak1sjQi?&quMLnu?|wiX- zUdiZwYoA!M#BwF7VbSAB9c?rgRw70DmJN*Djp9=fR>f|K(b%9Wj@Y6CLuW}<7Lvcq zW1|vseb$O9-eijgWyvO^vZPLi8XHo@V^XED>uk6ztiZ7H`R}%s0^iG0^(z|^R>h6< zr9?vSh(b135dG63)e=&Hz4N`dyOI61Cvb1plqh{51?SlY3;MQIs@iNwSQY1NQ9+~% za@D6prX=L_k#~}E@|c8)QYVY+vZDN0gwuOO!%uY#@IsXf@h7RjUoX%2U6tsz$5D#ZAc;rdM^X-n#aW z$}cT1!SPzJV_mEDDq?X%cQ&+_mzSexxHP@0yc}|D{mt_sUys8qI9FbcC@NN~%CJ;f$z76%i@{deI+&=ob;d!hn$(`GgxH!a8UV&>&*ffL`_Z;q zGteL+KW{BHiLo^XE2$SEip;yk!PZgRDGbup`w=3wj_Ug0slgChgS2a#v`wqY!$|pV z=o-oHCdk*3JX|lN>-{V@2nv9;p^sgB9Nhd3s$hR0N2N_tB6PJ`@>LYJ;wdR#rK>wv zoxYRb!=qj0dJv@4ZG>URrQM{NkAr9CbI8`1KS%C1UqQabd;@u@`7v_Mq_2T)`jD5H zn~+zS+mO4N@f2o@OZ$dq#=tW(gIqHgke8T8kn83>$X(_)kQ*i~SEl(4@>28X$lWHb zPOHq5$ji)+ke8co7_2a9X{t17k*G3hJ*YMV$ZO1<$ZJhn23DIB$k&*&$i3z~@^vP? zTR+a00mG7x?Lu=*7D1V#qYXi*n8W@+y<$^84?S2B{s;f{wUwcBY zZbjkukZ4cpZszF%N3m%~b&scCF;D3Yo-i1SQTu1z$7;5L^Jp&J?fD!^G`O0fGfx|s zGvQ1#VXT(Ku2F~#w<|`(g^4AS2Sgjb8^V$rg7F*MKcUG|GYlteH32Av@Myyi6R@5G z&w_y52-X`1%j-2#y}EhQtR*0;PoS(l=;A>)kOB*s#0S^aByP5mCm5Q5aP}bg$HmhwET}GE|Y5Wl6?;%E8mMKTtfkzwu1sUw+ z?t-Yx-Er3Y6|i3>qr1qcm#zT0yMA)VeW>jc_c748A9CqKZEE_skK^QH5BKpVFx&@c zy&VYYZt{`jK4`LX9|_xs+URf}dmCxWOCR$vMX4E&HvA#^nCCw30EYYEtd|yQZuEd{ zbWv92MsIHXY1XLPXVB`Q4OdcVf6k58z&MTx?0&Ts5Jo%6=u_M% z#lVen*83Y}^l96u+7ED}KWhBftWouir&ED8yqk>vj2p!lMi}L+Hv#q@(!R*&&0m4# zf&aqxp}zav$4iafK#0KC(|SdTFD%1Jvho2_`>txKR2x2;Z$(oCLm+hYyUYdXY{x0j z;%88L5sMswsfUUjfxi#5(}+CXUR0pqr{lK^o#IHl1IC?J=q~Kr1yXUe{W1E*iI&%7 z*A@5_$M0JUobq$)1?Yq#XWjLM=5czy06l77bzNT!g5xx$SMeYYB^NynRzaUpa?iTzk+*NM3Z%-hg8r7jpCx+ZL_> zq}Ux8&0TSGcc((++}uEvljJuBex1qj?O|GhepJHg^RbbY6zG?wp0D>s>O0ozB6`O< zTSV_zGK=UP>s%4NV|6N`cPunT^o}*7h(7myM^_Z|5C7Pc;tK;zoAYR%icO1_V zzO^l5G%Y~jHw^P;*e`e23iHR@j|uBF`opkZFHC!3WF3sGO#|Oz>R-R<9(dJXVr{6q z#@#0Bem`6HC#dT+CylZLAT34}%&e1jza;AZj`_*&v!d$Xx{nCA8}(OEwGqB54j9bT zD_#_UJFIYZ7$bux%B&b7I3cvP$>aFE44f9TL9FX2aK|AV*?u9ibiZ{GdldnwzP4M-Z-uW^6IMu+EF;F-77o`5DQvXA#e;l+F`tM5pKS=%8r2c+Tthr5Jk^0-E{!3DS3n=yy zO<$Dy{ZhYI>gmjfzos!{)V`}hDZU|4ioYAQ0(`sF)3J{97lGDL{|I^0xl+CXv=;Ju zA@^2-Vz+sj4q6HN5uD)L()=zc`Fn#h@P7k}8oB#1{K>Q3n|p(DN8H(V_7%aBp(k$S;#+Z;bH_1}ep>Mu*c1Cm$!t#>4^ z_HSoOUhRi|qV(t|O1I)6d!v$HCH;?*66q=M__I?lO1b=oJUzvktEYW-E>H6;mmkg3 z`}26(hvni=;~xa9ar(Iw|3x+toh|Ui|0N;M6&=*_MfA@Mc{2I|lDy#8)6ElO zabCueXY*KWDj&+vW_i`+p^~>~Iy$~b{ED0tc4B5CgCCA9exRA-N6kDFLY8f4BAT9_ knNT$n;-tte=KT08rH*}%{7pBJeremy Hinegardner - */ -@JRubyModule( name = "Hitimes" ) -public class Hitimes { - - public static RubyClass hitimesIntervalClass; - /** - * Create the Hitimes module and add it to the Ruby runtime. - */ - public static RubyModule createHitimes( Ruby runtime ) { - RubyModule mHitimes = runtime.defineModule("Hitimes"); - - RubyClass cStandardError = runtime.getStandardError(); - RubyClass cHitimesError = mHitimes.defineClassUnder("Error", cStandardError, cStandardError.getAllocator()); - - RubyClass cHitimesStats = mHitimes.defineClassUnder("Stats", runtime.getObject(), HitimesStats.ALLOCATOR ); - cHitimesStats.defineAnnotatedMethods( HitimesStats.class ); - - RubyClass cHitimesInterval = mHitimes.defineClassUnder("Interval", runtime.getObject(), HitimesInterval.ALLOCATOR ); - Hitimes.hitimesIntervalClass = cHitimesInterval; - cHitimesInterval.defineAnnotatedMethods( HitimesInterval.class ); - - return mHitimes; - } - - static RaiseException newHitimesError( Ruby runtime, String message ) { - RubyClass errorClass = runtime.getModule("Hitimes").getClass( "Error" ); - return new RaiseException( RubyException.newException( runtime, errorClass, message ), true ); - } - - - - @JRubyClass( name = "Hitimes::Error", parent = "StandardError" ) - public static class Error {}; - -} diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/java/src/hitimes/HitimesInterval.java b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/java/src/hitimes/HitimesInterval.java deleted file mode 100644 index 0d67106..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/java/src/hitimes/HitimesInterval.java +++ /dev/null @@ -1,181 +0,0 @@ -package hitimes; - -import org.jruby.runtime.builtin.IRubyObject; - -import org.jruby.Ruby; -import org.jruby.RubyClass; -import org.jruby.RubyObject; - -import org.jruby.runtime.Block; -import org.jruby.runtime.ObjectAllocator; -import org.jruby.runtime.ThreadContext; - -import org.jruby.anno.JRubyClass; -import org.jruby.anno.JRubyMethod; - -@JRubyClass( name = "Hitimes::Interval" ) -public class HitimesInterval extends RubyObject { - - /* this is a double to force all division by the conversion factor - * to cast to doubles - */ - private static final double INSTANT_CONVERSION_FACTOR = 1000000000d; - - private static final long INSTANT_NOT_SET = Long.MIN_VALUE; - private static final double DURATION_NOT_SET = Double.NaN; - - public static final ObjectAllocator ALLOCATOR = new ObjectAllocator() { - public IRubyObject allocate(Ruby runtime, RubyClass klass) { - return new HitimesInterval( runtime, klass ); - } - }; - - public HitimesInterval( Ruby runtime, RubyClass klass ) { - super( runtime, klass ); - } - - public HitimesInterval( Ruby runtime, RubyClass klass, long start ) { - super( runtime, klass ); - this.start_instant = start; - } - - - private long start_instant = INSTANT_NOT_SET; - private long stop_instant = INSTANT_NOT_SET; - private double duration = DURATION_NOT_SET; - - @JRubyMethod( name = "duration", alias = { "length", "to_f", "to_seconds" } ) - public IRubyObject duration() { - - /* - * if start has not yet been called, then raise an exception. - */ - if ( INSTANT_NOT_SET == this.start_instant ) { - throw Hitimes.newHitimesError( getRuntime(), "Attempt to report a duration on an interval that has not started"); - } - - /* - * if stop has not yet been called, then return the amount of time so far - */ - if ( INSTANT_NOT_SET == this.stop_instant ) { - double d = ( System.nanoTime() - this.start_instant ) / INSTANT_CONVERSION_FACTOR; - return getRuntime().newFloat( d ); - } - - /* - * if stop has been called, then calculate the duration and return - */ - if ( DURATION_NOT_SET == this.duration ) { - this.duration = (this.stop_instant - this.start_instant) / INSTANT_CONVERSION_FACTOR; - } - - return getRuntime().newFloat( this.duration ); - - } - - @JRubyMethod( name = "duration_so_far" ) - public IRubyObject duration_so_far() { - IRubyObject rc = getRuntime().getFalse(); - - if ( INSTANT_NOT_SET == this.start_instant ) { - return rc; - } - - if ( INSTANT_NOT_SET == this.stop_instant ) { - double d = ( System.nanoTime() - this.start_instant ) / INSTANT_CONVERSION_FACTOR; - return getRuntime().newFloat( d ); - } - - return rc; - } - - @JRubyMethod( name = "started?" ) - public IRubyObject is_started() { - if ( INSTANT_NOT_SET == this.start_instant ) { - return getRuntime().getFalse(); - } - return getRuntime().getTrue(); - } - - @JRubyMethod( name = "running?" ) - public IRubyObject is_running() { - if ( ( INSTANT_NOT_SET != this.start_instant ) && ( INSTANT_NOT_SET == this.stop_instant ) ) { - return getRuntime().getTrue(); - } - return getRuntime().getFalse(); - } - - @JRubyMethod( name = "stopped?" ) - public IRubyObject is_stopped() { - if ( INSTANT_NOT_SET == this.stop_instant ) { - return getRuntime().getFalse(); - } - return getRuntime().getTrue(); - } - - @JRubyMethod( name = "start_instant" ) - public IRubyObject start_instant() { - return getRuntime().newFixnum( this.start_instant ); - } - - @JRubyMethod( name = "stop_instant" ) - public IRubyObject stop_instant() { - return getRuntime().newFixnum( this.stop_instant ); - } - - @JRubyMethod( name = "start" ) - public IRubyObject start() { - if ( INSTANT_NOT_SET == this.start_instant ) { - this.start_instant = System.nanoTime(); - return getRuntime().getTrue(); - } - return getRuntime().getFalse(); - } - - @JRubyMethod( name = "stop" ) - public IRubyObject stop() { - if ( INSTANT_NOT_SET == this.start_instant ) { - throw Hitimes.newHitimesError( getRuntime(), "Attempt to stop an interval that has not started" ); - } - - if ( INSTANT_NOT_SET == this.stop_instant ) { - this.stop_instant = System.nanoTime(); - this.duration = (this.stop_instant - this.start_instant) / INSTANT_CONVERSION_FACTOR; - return getRuntime().newFloat( this.duration ); - } - - return getRuntime().getFalse(); - } - - @JRubyMethod( name = "split" ) - public IRubyObject split() { - this.stop(); - return new HitimesInterval( getRuntime(), Hitimes.hitimesIntervalClass, this.stop_instant ); - } - - @JRubyMethod( name = "now", module = true ) - public static IRubyObject now( IRubyObject self ) { - return new HitimesInterval( self.getRuntime(), Hitimes.hitimesIntervalClass, System.nanoTime() ); - } - - @JRubyMethod( name = "measure", module = true, frame = true ) - public static IRubyObject measure( IRubyObject self, Block block ) { - - Ruby runtime = self.getRuntime(); - - if ( block.isGiven() ) { - IRubyObject nil = runtime.getNil(); - ThreadContext context = runtime.getCurrentContext(); - - HitimesInterval interval = new HitimesInterval( runtime, Hitimes.hitimesIntervalClass ); - - interval.start(); - block.yield( context, nil ); - interval.stop(); - - return interval.duration(); - } else { - throw Hitimes.newHitimesError( runtime, "No block given to Interval.measure" ); - } - } -} diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/java/src/hitimes/HitimesService.java b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/java/src/hitimes/HitimesService.java deleted file mode 100644 index e52bd9d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/java/src/hitimes/HitimesService.java +++ /dev/null @@ -1,16 +0,0 @@ -package hitimes; - -import java.io.IOException; - -import org.jruby.Ruby; - -import org.jruby.runtime.load.BasicLibraryService; - -public class HitimesService implements BasicLibraryService { - public boolean basicLoad( final Ruby runtime ) throws IOException { - Hitimes.createHitimes( runtime ); - return true; - } -} - - diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/java/src/hitimes/HitimesStats.java b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/java/src/hitimes/HitimesStats.java deleted file mode 100644 index f1fe314..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/ext/hitimes/java/src/hitimes/HitimesStats.java +++ /dev/null @@ -1,112 +0,0 @@ -package hitimes; - -import org.jruby.Ruby; -import org.jruby.RubyClass; -import org.jruby.RubyObject; - -import org.jruby.RubyNumeric; -import org.jruby.runtime.builtin.IRubyObject; -import org.jruby.runtime.ObjectAllocator; - -import org.jruby.anno.JRubyMethod; -import org.jruby.anno.JRubyClass; - -@JRubyClass( name = "Hitimes::Stats" ) -public class HitimesStats extends RubyObject { - - private double min = 0.0; - private double max = 0.0; - private double sum = 0.0; - private double sumsq = 0.0; - private long count = 0; - - public static final ObjectAllocator ALLOCATOR = new ObjectAllocator() { - public IRubyObject allocate(Ruby runtime, RubyClass klass) { - return new HitimesStats( runtime, klass ); - } - }; - - public HitimesStats( Ruby runtime, RubyClass klass ) { - super( runtime, klass ); - } - - @JRubyMethod( name = "update", required = 1, argTypes = RubyNumeric.class ) - public IRubyObject update( IRubyObject val ) { - double v = RubyNumeric.num2dbl( val ); - - if ( 0 == this.count ) { - this.min = this.max = v; - } else { - this.min = ( v < this.min ) ? v : this.min; - this.max = ( v > this.max ) ? v : this.max; - } - - this.count += 1; - this.sum += v; - this.sumsq += (v * v); - - return val; - } - - @JRubyMethod( name = "mean" ) - public IRubyObject mean() { - double mean = 0.0; - - if ( this.count > 0 ) { - mean = this.sum / this.count; - } - - return getRuntime().newFloat( mean ); - } - - - @JRubyMethod( name = "rate" ) - public IRubyObject rate() { - double rate = 0.0; - - if ( this.sum > 0.0 ) { - rate = this.count / this.sum ; - } - - return getRuntime().newFloat( rate ); - } - - @JRubyMethod( name = "stddev" ) - public IRubyObject stddev() { - double stddev = 0.0; - - if ( this.count > 1 ) { - double sq_sum = this.sum * this.sum; - stddev = Math.sqrt( ( this.sumsq - ( sq_sum / this.count ) ) / ( this.count - 1 ) ); - } - return getRuntime().newFloat( stddev ); - } - - - @JRubyMethod( name = "min" ) - public IRubyObject min() { - return getRuntime().newFloat( this.min ); - } - - @JRubyMethod( name = "max" ) - public IRubyObject max() { - return getRuntime().newFloat( this.max ); - } - - @JRubyMethod( name = "sum" ) - public IRubyObject sum() { - return getRuntime().newFloat( this.sum ); - } - - @JRubyMethod( name = "sumsq" ) - public IRubyObject sumsq() { - return getRuntime().newFloat( this.sumsq ); - } - - @JRubyMethod( name = "count" ) - public IRubyObject count() { - return getRuntime().newFixnum( this.count ); - } -} - - diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes.rb b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes.rb deleted file mode 100644 index 7228426..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes.rb +++ /dev/null @@ -1,47 +0,0 @@ -#-- -# Copyright (c) 2008 Jeremy Hinegardner -# All rights reserved. See LICENSE and/or COPYING for details. -#++ - -# -# The top level module containing the contents of the hitimes library -# -# use the library with: -# -# require 'hitimes' -# -module Hitimes - # - # Base class of all errors in Hitimes - # - class Error < ::StandardError; end - - # Hitimes.measure { } -> Float - # - # Times the execution of the block, returning the number of seconds it took - def self.measure(&block) - Hitimes::Interval.measure(&block) - end -end -require 'hitimes/paths' -require 'hitimes/version' - -# Load the binary extension, try loading one for the specific version of ruby -# and if that fails, then fall back to one in the top of the library. -# this is the method recommended by rake-compiler -begin - # this will be for windows - require "hitimes/#{RUBY_VERSION.sub(/\.\d$/,'')}/hitimes" -rescue LoadError - # everyone else. - require 'hitimes/hitimes' -end - -require 'hitimes/stats' -require 'hitimes/mutexed_stats' - -require 'hitimes/metric' -require 'hitimes/value_metric' -require 'hitimes/timed_metric' -require 'hitimes/timed_value_metric' - diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/2.2/hitimes.bundle b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/2.2/hitimes.bundle deleted file mode 100755 index 4fd33dfdb59db78a2891d5742c09c37c91919b96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19504 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 Metric - # Metric.new( 'my_metric', 'foo' => 'bar', 'this' => 42 ) -> Metric - # - # Create a new ValueMetric giving it a name and additional data. - # - # +additional_data+ may be anything that follows the +to_hash+ protocol. - # +name+ may be anything that follows the +to_s+ protocol. - # - def initialize( name, additional_data = {} ) - @sampling_start_time = nil - @sampling_start_interval = nil - @sampling_delta = 0 - - @name = name.to_s - @additional_data = additional_data.to_hash - end - - # - # :call-seq: - # metric.sampling_start_time -> Float or nil - # - # The time at which the first sample was taken. - # This is the number of microseconds since UNIX epoch UTC as a Float - # - # If the metric has not started measuring then the start time is nil. - # - def sampling_start_time - if @sampling_start_interval then - @sampling_start_time ||= self.utc_microseconds() - else - nil - end - end - - # - # :call-seq: - # metric.sampling_stop_time -> Float or nil - # - # The time at which the last sample was taken - # This is the number of microseconds since UNIX epoch UTC as a Float - # - # If the metric has not completely measured at least one thing then - # stop time is nil. - # - # Because accessing the actual 'time of day' is an expesive operation, we - # only get the time of day at the beginning of the first measurement and we - # keep track of the offset from that point in @sampling_delta. - # - # When sampling_stop_time is called, the actual time of day is caculated. - # - def sampling_stop_time - if @sampling_delta > 0 then - (self.sampling_start_time + (@sampling_delta * 1_000_000)) - else - nil - end - end - - # - # :call-seq: - # metric.to_hash -> Hash - # metric.to_hash - # - # Convert the metric to a Hash. - # - def to_hash - { 'sampling_start_time' => self.sampling_start_time, - 'sampling_stop_time' => self.sampling_stop_time, - 'additional_data' => self.additional_data, - 'name' => self.name } - end - - # - # :call-seq: - # metric.utc_microseconds -> Float - # - # The current time in microseconds from the UNIX Epoch in the UTC - # - def utc_microseconds - Time.now.gmtime.to_f * 1_000_000 - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/mutexed_stats.rb b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/mutexed_stats.rb deleted file mode 100644 index 2d3b6fe..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/mutexed_stats.rb +++ /dev/null @@ -1,32 +0,0 @@ -#-- -# Copyright (c) 2008, 2009 Jeremy Hinegardner -# All rights reserved. See LICENSE and/or COPYING for details. -#++ - -require 'thread' - -module Hitimes - # - # MutexedStats is the start of a threadsafe Stats class. Currently, on MRI - # Ruby the Stats object is already threadsafe, so there is no need to use - # MutexedStats. - # - class MutexedStats < Stats - def initialize - @mutex = Mutex.new - end - - # call-seq: - # mutex_stat.update( val ) -> nil - # - # Update the running stats with the new value in a threadsafe manner. - # - def update( value ) - @mutex.synchronize do - super( value ) - end - end - end -end - - diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/paths.rb b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/paths.rb deleted file mode 100644 index db0bb3b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/paths.rb +++ /dev/null @@ -1,53 +0,0 @@ -#-- -# Copyright (c) 2008 Jeremy Hinegardner -# All rights reserved. See LICENSE and/or COPYING for details. -#++ -# -module Hitimes - # - # Access to various paths inside the project programatically - # - module Paths - # - # :call-seq: - # Hitimes::Paths.root_dir -> String - # - # Returns The full expanded path of the parent directory of +lib+ - # going up the path from the current file. A trailing File::SEPARATOR - # is guaranteed. - # - def self.root_dir - @root_dir ||=( - path_parts = ::File.expand_path(__FILE__).split(::File::SEPARATOR) - lib_index = path_parts.rindex("lib") - @root_dir = path_parts[0...lib_index].join(::File::SEPARATOR) + ::File::SEPARATOR - ) - end - - # - # :call-seq: - # Hitimes::Paths.lib_path( *args ) -> String - # - # Returns The full expanded path of the +lib+ directory below - # _root_dir_. All parameters passed in are joined onto the - # result. A trailing File::SEPARATOR is guaranteed if - # _args_ are *not* present. - # - def self.lib_path(*args) - self.sub_path("lib", *args) - end - - # - # :call-seq: - # Hitimes::Paths.sub_path( sub, *args ) -> String - # - # Returns the full expanded path of the +sub+ directory below _root_dir. All - # _arg_ parameters passed in are joined onto the result. A trailing - # File::SEPARATOR is guaranteed if _args_ are *not* present. - # - def self.sub_path(sub,*args) - sp = ::File.join(root_dir, sub) + File::SEPARATOR - sp = ::File.join(sp, *args) if args - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/stats.rb b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/stats.rb deleted file mode 100644 index cc46579..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/stats.rb +++ /dev/null @@ -1,58 +0,0 @@ -#-- -# Copyright (c) 2008, 2009 Jeremy Hinegardner -# All rights reserved. See LICENSE and/or COPYING for details. -#++ - -require 'stringio' -module Hitimes - class Stats - # A list of the available stats - STATS = %w[ count max mean min rate stddev sum sumsq ] - - # - # call-seq: - # stat.to_hash -> Hash - # stat.to_hash( %w[ count max mean ]) -> Hash - # - # return a hash of the stats. By default this returns a hash of all stats - # but passing in an array of items will limit the stats returned to only - # those in the Array. - # - # If passed in an empty array or nil to to_hash then STATS is assumed to be - # the list of stats to return in the hash. - # - def to_hash( *args ) - h = {} - args = [ args ].flatten - args = STATS if args.empty? - args.each do |meth| - h[meth] = self.send( meth ) - end - return h - end - - # - # call-seq: - # stat.to_json -> String - # stat.to_json( *args ) -> String - # - # return a json string of the stats. By default this returns a json string - # of all the stats. If an array of items is passed in, those that match the - # known stats will be all that is included in the json output. - # - def to_json( *args ) - h = to_hash( *args ) - a = [] - s = StringIO.new - - s.print "{ " - h.each_pair do |k,v| - a << "\"#{k}\": #{v}" - end - s.print a.join(", ") - s.print "}" - return s.string - end - - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/timed_metric.rb b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/timed_metric.rb deleted file mode 100644 index 5ac731e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/timed_metric.rb +++ /dev/null @@ -1,176 +0,0 @@ -#-- -# Copyright (c) 2008, 2009 Jeremy Hinegardner -# All rights reserved. See LICENSE and/or COPYING for details. -#++ - -require 'forwardable' -module Hitimes - # - # A TimedMetric holds the metrics on how long it takes to do something. For - # example, measuring how long a method takes to operate. - # - # tm = TimedMetric.new( 'my-method' ) - # - # 200.times do - # my_method_result = tm.measure do - # my_method( ... ) - # end - # end - # - # puts "#{ tm.name } operated at a rate of #{ tm.rate } calls per second" - # - # Since TimedMetric is a child class of Metric make sure to look at the - # Metric API also. - # - # A TimedMetric measures the execution time of an option with the Interval - # class. - # - # A TimedMetric contains a Stats object, therefore TimedMetric has +count+, +max+, - # +mean+, +min+, +rate+, +stddev+, +sum+, +sumsq+ methods that delegate to that Stats - # object for convenience. - # - # - class TimedMetric < Metric - # holds all the statistics - attr_reader :stats - - class << TimedMetric - # - # :call-seq: - # TimedMetric.now -> TimedMetric - # - # Return a TimedMetric that has been started - # - def now( name, additional_data = {} ) - t = TimedMetric.new( name, additional_data ) - t.start - return t - end - end - - # - # :call-seq: - # TimedMetric.new( 'name') -> TimedMetric - # TimedMetric.new( 'name', 'other' => 'data') -> TimedMetric - # - # Create a new TimedMetric giving it a name and additional data. - # +additional_data+ may be anything that follows the +to_hash+ protocol - # - def initialize( name, additional_data = {} ) - super( name, additional_data ) - @stats = Stats.new - @current_interval = Interval.new - end - - # - # :call-seq: - # timed_metric.running? -> true or false - # - # return whether or not the timer is currently running. - # - def running? - @current_interval.running? - end - - # - # :call-seq: - # timed_metric.start -> nil - # - # Start the current metric, if the current metric is already started, then - # this is a noop. - # - def start - if not @current_interval.running? then - @current_interval.start - @sampling_start_time ||= self.utc_microseconds() - @sampling_start_interval ||= Interval.now - end - nil - end - - # - # :call-seq: - # timed_metric.stop -> Float or nil - # - # Stop the current metric. This updates the stats and removes the current - # interval. If the timer was stopped then the duration of the last Interval - # is returned. If the timer was already stopped then false is returned and - # no stats are updated. - # - def stop - if @current_interval.running? then - d = @current_interval.stop - @stats.update( d ) - @current_interval = Interval.new - - # update the length of time we have been sampling - @sampling_delta = @sampling_start_interval.duration_so_far - - return d - end - return false - end - - # - # :call-seq: - # timed_metric.measure { ... } -> Object - # - # Measure the execution of a block and add those stats to the running stats. - # The return value is the return value of the block - # - def measure( &block ) - return_value = nil - begin - start - return_value = yield - ensure - stop - end - return return_value - end - - # - # :call-seq: - # timed_metric.split -> Float - # - # Split the current TimedMetric. Essentially, mark a split time. This means - # stop the current interval and create a new interval, but make sure - # that the new interval lines up exactly, timewise, behind the previous - # interval. - # - # If the timer is running, then split returns the duration of the previous - # interval, i.e. the split-time. If the timer is not running, nothing - # happens and false is returned. - # - def split - if @current_interval.running? then - next_interval = @current_interval.split - d = @current_interval.duration - @stats.update( d ) - @current_interval = next_interval - return d - end - return false - end - - # - # :call-seq: - # metric.to_hash -> Hash - # - # Convert the metric to a hash - # - def to_hash - h = super - Stats::STATS.each do |s| - h[s] = self.send( s ) - end - return h - end - - - # forward appropriate calls directly to the stats object - extend Forwardable - def_delegators :@stats, :count, :max, :mean, :min, :rate, :stddev, :sum, :sumsq - alias :duration :sum - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/timed_value_metric.rb b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/timed_value_metric.rb deleted file mode 100644 index 2614884..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/timed_value_metric.rb +++ /dev/null @@ -1,233 +0,0 @@ -#-- -# Copyright (c) 2008, 2009 Jeremy Hinegardner -# All rights reserved. See LICENSE and/or COPYING for details. -#++ - -module Hitimes - # - # A TimedValueMetric holds the metrics on how long it takes to do a batch of something. - # something. For measuring how long a method takes to operate on N items. - # - # tm = TimedValueMetric.new( 'my-batch-method' ) - # - # 42.times do - # tm.start - # number_of_items_processed = do_something - # tm.stop( number_of_items_processed ) - # end - # - # puts "#{ tm.name } operated at a rate of #{ tm.rate } calls per second" - # - # TimedValueMetric combines the usefulness of a ValueMetric and a TimedMetric. - # The stats are available for both the time it took to do the operation and - # the sizes of the batches that were run. - # - # A TimedValueMetric keeps track of both the time it took to do an operation - # and the size of the batch that was operated on. These metrics are kept - # separately as +timed_stats+ and +value_stats+ accessors. - # - class TimedValueMetric < Metric - # holds all the Timed statistics - attr_reader :timed_stats - - # holds all the Value statistics - attr_reader :value_stats - - class << TimedValueMetric - # - # :call-seq: - # TimedValueMetric.now( 'name' ) -> TimedValueMetric - # - # Return a TimedValueMetric that has been started - # - def now( name, additional_data = {} ) - t = TimedValueMetric.new( name, additional_data ) - t.start - return t - end - end - - # - # :call-seq: - # TimedValueMetric.new( 'name') -> TimedValueMetric - # TimedValueMetric.new( 'name', 'other' => 'data') -> TimedValueMetric - # - # Create a new TimedValueMetric giving it a name and additional data. - # +additional_data+ may be anything that follows the +to_hash+ protocol - # - def initialize( name, additional_data = {} ) - super( name, additional_data ) - @timed_stats = Stats.new - @value_stats = Stats.new - @current_interval = Interval.new - end - - # - # :call-seq: - # timed_value_metric.running? -> true or false - # - # return whether or not the metric is currently timing something. - # - def running? - @current_interval.running? - end - - # - # :call-seq: - # timed_value_metric.start -> nil - # - # Start the current timer, if the current timer is already started, then - # this is a noop. - # - def start - if not @current_interval.running? then - @current_interval.start - @sampling_start_time ||= self.utc_microseconds() - @sampling_start_interval ||= Interval.now - end - nil - end - - # - # :call-seq: - # timed_value_metric.stop( count ) -> Float or nil - # - # Stop the current metric. The +count+ parameter must be a - # value to update to the _value_ portion of the TimedValueMetric. Generally - # this is probably the number of things that were operated upon since - # +start+ was invoked. - # - # This updates both the +value_stats+ and +timed_stats+ stats and removes - # the current interval. If the metric is stopped then the duration of the - # last Interval is returned. If the metric was already stopped before this - # call, then false is returned and no stats are updated. - # - # - def stop( value ) - if @current_interval.running? then - d = @current_interval.stop - @timed_stats.update( d ) - @current_interval = Interval.new - @value_stats.update( value ) - - # update the lenght of time we have been sampling - @sampling_delta = @sampling_start_interval.duration_so_far - - return d - end - return false - end - - # - # :call-seq: - # timed_value_metric.measure( value ) { ... } -> Object - # - # Measure the execution of a block and add those stats to the running stats. - # The return value is the return value of the block. A value must be passed - # into +measure+ to update the +value_stats+ portion of the TimedValueMetric. - # - def measure( value, &block ) - return_value = nil - begin - start - return_value = yield - ensure - stop( value ) - end - return return_value - end - - # - # :call-seq: - # timed_value_metric.split( value ) -> Float - # - # Split the current metric. Essentially, mark a split time. This means - # stop the current interval, with the givein +value+ and create a new - # interval, but make sure that the new interval lines up exactly, timewise, - # behind the previous interval. - # - # If the metric is running, then split returns the duration of the previous - # interval, i.e. the split-time. If the metric is not running, nothing - # happens, no stats are updated, and false is returned. - # - # - def split( value ) - if @current_interval.running? then - next_interval = @current_interval.split - d = @current_interval.duration - @timed_stats.update( d ) - @value_stats.update( value ) - @current_interval = next_interval - return d - end - return false - end - - # - # :call-seq: - # timed_value_metric.duration -> Float - # - # The duration of measured time from the metric. - # - def duration - @timed_stats.sum - end - - # - # :call-seq: - # timed_value_metric.unit_count -> Float - # - # The sum of all values passed to +stop+ or +skip+ or +measure+ - # - def unit_count - @value_stats.sum - end - - # - # :call-seq: - # timed_value_metric.rate -> Float - # - # Rate in the context of the TimedValueMetric is different than the - # TimedMetric. In the TimedValueMetric, each measurement of time is - # associated with a quantity of things done during that unit of time. So - # the +rate+ for a TimedValueMetric is the (sum of all quantities sampled) / - # ( sum of all durations measured ) - # - # For example, say you were measuring, using a TimedValueMetric batch jobs - # that had individual units of work. - # - # tvm = TimedValueMetric.new( 'some-batch' ) - # tvm.start - # # process a batch of 12 units - # duration1 = tvm.stop( 12 ) - # - # tvm.start - # # process a larger batch of 42 units - # duration2 = tvm.stop( 42 ) - # - # At this point the rate of units per second is calculated as ( 12 + 42 ) / ( duration1 + duration2 ) - # - # some_batch_rate = tvm.rate # returns ( 34 / ( duration1+duration2 ) ) - # - def rate - @value_stats.sum / @timed_stats.sum - end - - # - # :call-seq: - # metric.to_hash -> Hash - # - # Convert the metric to a hash - # - def to_hash - h = super - h['timed_stats'] = @timed_stats.to_hash - h['value_stats'] = @value_stats.to_hash( Stats::STATS - %w[ rate ] ) - h['rate'] = self.rate - h['unit_count'] = self.unit_count - return h - end - - - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/value_metric.rb b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/value_metric.rb deleted file mode 100644 index 34a83ce..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/value_metric.rb +++ /dev/null @@ -1,71 +0,0 @@ -#-- -# Copyright (c) 2008, 2009 Jeremy Hinegardner -# All rights reserved. See LICENSE and/or COPYING for details. -#++ - -require 'forwardable' -module Hitimes - # - # A ValueMetric holds the data from measuring a single value over a period of - # time. In most cases this may be a single measurement at a single point in - # time. - # - # A good example of a ValueMetric is measuring the number of items in a queue. - # - # A ValueMetric contains a Stats object, therefore ValueMetric has +count+, +max+, - # +mean+, +min+, +stddev+, +sum+, +sumsq+ methods that delegate to that Stats - # object for convenience. - # - class ValueMetric < Metric - - # holds all the statistics - attr_reader :stats - - # - # :call-seq: - # ValueMetric.new( 'my_metric' ) -> ValueMetric - # ValueMetric.new( 'my_metric', 'foo' => 'bar', 'this' => 42 ) -> ValueMetric - # - # Create a new ValueMetric giving it a name and additional data. - # +additional_data+ may be anything that follows the +to_hash+ protocol. - # - def initialize( name, additional_data = {} ) - super( name, additional_data ) - @stats = Stats.new - end - - # - # :call-seq: - # metric.measure( value ) -> Float - # - # Give the +value+ as the measurement to the metric. The value is returned - # - def measure( value ) - @sampling_start_time ||= self.utc_microseconds() - @sampling_start_interval ||= Interval.now - - @stats.update( value ) - - # update the length of time we have been sampling - @sampling_delta = @sampling_start_interval.duration_so_far - end - - # - # :call-seq: - # metric.to_hash -> Hash - # - # Convert the metric to a hash - # - def to_hash - h = super - (Stats::STATS - %w[ rate ]).each do |s| - h[s] = self.send( s ) - end - return h - end - - # forward appropriate calls directly to the stats object - extend Forwardable - def_delegators :@stats, :count, :max, :mean, :min, :stddev, :sum, :sumsq - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/version.rb b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/version.rb deleted file mode 100644 index 454f602..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/lib/hitimes/version.rb +++ /dev/null @@ -1,8 +0,0 @@ -#-- -# Copyright (c) 2008 Jeremy Hinegardner -# All rights reserved. See LICENSE and/or COPYING for details -#++ - -module Hitimes - VERSION = "1.2.2" -end diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/hitimes_spec.rb b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/hitimes_spec.rb deleted file mode 100644 index d44caea..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/hitimes_spec.rb +++ /dev/null @@ -1,14 +0,0 @@ -require 'spec_helper' - -describe Hitimes do - it "can time a block of code" do - d = Hitimes.measure do - sleep 0.2 - end - d.must_be_close_to(0.2, 0.002) - end - - it "raises an error if measure is called with no block" do - lambda{ Hitimes.measure }.must_raise( Hitimes::Error ) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/interval_spec.rb b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/interval_spec.rb deleted file mode 100644 index 980f8ca..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/interval_spec.rb +++ /dev/null @@ -1,136 +0,0 @@ -require "spec_helper" - -describe Hitimes::Interval do - it "raises an error if duration is called on a non-started interval" do - i = Hitimes::Interval.new - lambda{ i.duration }.must_raise( Hitimes::Error, /\AAttempt to report a duration on an interval that has not started\Z/ ) - end - - it "raises an error if stop is called on a non-started interval" do - i = Hitimes::Interval.new - lambda { i.stop }.must_raise( Hitimes::Error, /\AAttempt to stop an interval that has not started\Z/ ) - end - - it "knows if it has been started" do - i = Hitimes::Interval.new - i.started?.must_equal false - - i.start - i.started?.must_equal true - end - - it "knows if it has been stopped" do - i = Hitimes::Interval.new - i.start - i.stopped?.must_equal false - i.stop - i.stopped?.must_equal true - end - - it "knows if it is currently running" do - i = Hitimes::Interval.new - i.running?.must_equal false - i.start - i.running?.must_equal true - i.stop - i.running?.must_equal false - end - - it "can time a block of code" do - d = Hitimes::Interval.measure do - sleep 0.2 - end - d.must_be_close_to(0.2, 0.002) - end - - it "raises an error if measure is called with no block" do - lambda{ Hitimes::Interval.measure }.must_raise( Hitimes::Error, /\ANo block given to Interval.measure\Z/ ) - end - - it "creates an interval via #now" do - i = Hitimes::Interval.now - i.started?.must_equal true - i.stopped?.must_equal false - end - - it "calling duration multiple times returns successivly grater durations" do - i = Hitimes::Interval.new - i.start - y = i.duration - z = i.duration - z.must_be :>, y - end - - it "calling start multiple times on has no effect after the first call" do - i = Hitimes::Interval.new - i.start.must_equal true - x = i.start_instant - i.start_instant.must_be :>, 0 - i.start.must_equal false - x.must_equal i.start_instant - end - - it "returns the duration on the first call to stop" do - i = Hitimes::Interval.now - d = i.stop - d.must_be_instance_of( Float ) - end - - it "calling stop multiple times on has no effect after the first call" do - i = Hitimes::Interval.new - i.start.must_equal true - i.stop - - x = i.stop_instant - i.stop_instant.must_be :>, 0 - i.stop.must_equal false - x.must_equal i.stop_instant - - end - - it "duration does not change after stop is calledd" do - i = Hitimes::Interval.new - i.start - x = i.stop - y = i.duration - i.stop.must_equal false - - z = i.duration - - x.must_equal y - x.must_equal z - - y.must_equal z - end - - it "can return how much time has elapsed from the start without stopping the interval" do - i = Hitimes::Interval.new - i.start - x = i.duration_so_far - i.running?.must_equal true - y = i.duration_so_far - i.stop - x.must_be :<, y - x.must_be :<, i.duration - y.must_be :<, i.duration - end - - describe "#split" do - - it "creates a new Interval object" do - i = Hitimes::Interval.new - i.start - i2 = i.split - i.object_id.wont_equal i2.object_id - end - - it "with the stop instant equivialent to the previous Interval's start instant" do - i = Hitimes::Interval.new - i.start - i2 = i.split - i.stop_instant.must_equal i2.start_instant - end - end - -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/metric_spec.rb b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/metric_spec.rb deleted file mode 100644 index ffad56b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/metric_spec.rb +++ /dev/null @@ -1,28 +0,0 @@ -require "spec_helper" - -describe Hitimes::Metric do - before( :each ) do - @metric = Hitimes::Metric.new( "testing" ) - end - - it 'has a name' do - @metric.name.must_equal "testing" - end - - it "has associated data from initialization" do - m = Hitimes::Metric.new( "more-data", 'foo' => 'bar', 'this' => 'that' ) - m.additional_data['foo'].must_equal 'bar' - m.additional_data['this'].must_equal 'that' - - m = Hitimes::Metric.new( "more-data", { 'foo' => 'bar', 'this' => 'that' } ) - m.additional_data['foo'].must_equal 'bar' - m.additional_data['this'].must_equal 'that' - end - - it "initially has no sampling times" do - @metric.sampling_start_time.must_be_nil - @metric.sampling_stop_time.must_be_nil - end -end - - diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/mutex_stats_spec.rb b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/mutex_stats_spec.rb deleted file mode 100644 index 843c948..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/mutex_stats_spec.rb +++ /dev/null @@ -1,36 +0,0 @@ -require 'spec_helper' - -describe Hitimes::MutexedStats do - before( :each ) do - @threads = 5 - @iters = 10_000 - @final_value = @threads * @iters - end - - def run_with_scissors( stats, threads, iters ) - spool = [] - threads.times do |t| - spool << Thread.new { iters.times{ stats.update( 1 ) } } - end - spool.each { |t| t.join } - return stats - end - - if (not defined? RUBY_ENGINE) or (RUBY_ENGINE == "ruby") then - it "Hitimes::Stats is threadsafe" do - stats = run_with_scissors( ::Hitimes::Stats.new, @threads, @iters ) - stats.count.must_equal @final_value - end - else - it "Hitimes::Stats is not threadsafe" do - stats = run_with_scissors( ::Hitimes::Stats.new, @threads, @iters ) - stats.count.wont_equal @final_value - end - end - - it "has a threadsafe update" do - stats = run_with_scissors( ::Hitimes::MutexedStats.new, @threads, @iters ) - stats.count.must_equal @final_value - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/paths_spec.rb b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/paths_spec.rb deleted file mode 100644 index 6cdbd6b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/paths_spec.rb +++ /dev/null @@ -1,11 +0,0 @@ -require 'spec_helper' - -describe Hitimes::Paths do - it "can access the root dir of the project" do - Hitimes::Paths.root_dir.must_equal File.expand_path( File.join( File.dirname( __FILE__ ), ".." ) ) + ::File::SEPARATOR - end - - it "can access the lib path of the project" do - Hitimes::Paths.lib_path.must_equal File.expand_path( File.join( File.dirname( __FILE__ ), "..", "lib" ) ) + ::File::SEPARATOR - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/spec_helper.rb b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/spec_helper.rb deleted file mode 100644 index ad7d437..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/spec_helper.rb +++ /dev/null @@ -1,11 +0,0 @@ -if RUBY_VERSION >= '1.9.2' then - require 'simplecov' - puts "Using coverage!" - SimpleCov.start if ENV['COVERAGE'] -end - -gem 'minitest' -require 'hitimes' -require 'minitest/autorun' -require 'minitest/pride' - diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/stats_spec.rb b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/stats_spec.rb deleted file mode 100644 index cb735cb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/stats_spec.rb +++ /dev/null @@ -1,98 +0,0 @@ -require 'spec_helper' -require 'json' - -describe Hitimes::Stats do - before( :each ) do - @stats = Hitimes::Stats.new - @full_stats = Hitimes::Stats.new - - [ 1, 2, 3].each { |i| @full_stats.update( i ) } - end - - it "is initialized with 0 values" do - @stats.count.must_equal 0 - @stats.min.must_equal 0.0 - @stats.max.must_equal 0.0 - @stats.sum.must_equal 0.0 - @stats.rate.must_equal 0.0 - end - - it "calculates the mean correctly" do - @full_stats.mean.must_equal 2.0 - end - - it "calculates the rate correctly" do - @full_stats.rate.must_equal 0.5 - end - - it "tracks the maximum value" do - @full_stats.max.must_equal 3.0 - end - - it "tracks the minimum value" do - @full_stats.min.must_equal 1.0 - end - - it "tracks the count" do - @full_stats.count.must_equal 3 - end - - it "tracks the sum" do - @full_stats.sum.must_equal 6.0 - end - - it "calculates the standard deviation" do - @full_stats.stddev.must_equal 1.0 - end - - it "calculates the sum of squares " do - @full_stats.sumsq.must_equal 14.0 - end - - describe "#to_hash " do - it "converts to a Hash" do - h = @full_stats.to_hash - h.size.must_equal ::Hitimes::Stats::STATS.size - h.keys.sort.must_equal ::Hitimes::Stats::STATS - end - - it "converts to a limited Hash if given arguments" do - h = @full_stats.to_hash( "min", "max", "mean" ) - h.size.must_equal 3 - h.keys.sort.must_equal %w[ max mean min ] - - h = @full_stats.to_hash( %w[ count rate ] ) - h.size.must_equal 2 - h.keys.sort.must_equal %w[ count rate ] - end - - it "raises NoMethodError if an invalid stat is used" do - lambda { @full_stats.to_hash( "wibble" ) }.must_raise( NoMethodError ) - end - end - - describe "#to_json" do - it "converts to a json string" do - j = @full_stats.to_json - h = JSON.parse( j ) - h.size.must_equal ::Hitimes::Stats::STATS.size - h.keys.sort.must_equal ::Hitimes::Stats::STATS - end - - it "converts to a limited Hash if given arguments" do - j = @full_stats.to_json( "min", "max", "mean" ) - h = JSON.parse( j ) - h.size.must_equal 3 - h.keys.sort.must_equal %w[ max mean min ] - - j = @full_stats.to_json( %w[ count rate ] ) - h = JSON.parse( j ) - h.size.must_equal 2 - h.keys.sort.must_equal %w[ count rate ] - end - - it "raises NoMethodError if an invalid stat is used" do - lambda { @full_stats.to_json( "wibble" ) }.must_raise( NoMethodError ) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/timed_metric_spec.rb b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/timed_metric_spec.rb deleted file mode 100644 index 487f2f2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/timed_metric_spec.rb +++ /dev/null @@ -1,155 +0,0 @@ -require 'spec_helper' - -describe Hitimes::TimedMetric do - before( :each ) do - @tm = Hitimes::TimedMetric.new( 'test-timed-metric' ) - end - - it "knows if it is running or not" do - @tm.running?.must_equal false - @tm.start - @tm.running?.must_equal true - @tm.stop - @tm.running?.must_equal false - end - - it "#split returns the last duration and the timer is still running" do - @tm.start - d = @tm.split - @tm.running?.must_equal true - d.must_be :>, 0 - @tm.count.must_equal 1 - @tm.duration.must_equal d - end - - it "#stop returns false if called more than once in a row" do - @tm.start - @tm.stop.must_be :>, 0 - @tm.stop.must_equal false - end - - it "does not count a currently running interval as an interval in calculations" do - @tm.start - @tm.count.must_equal 0 - @tm.split - @tm.count.must_equal 1 - end - - it "#split called on a stopped timer does nothing" do - @tm.start - @tm.stop - @tm.split.must_equal false - end - - it "calculates the mean of the durations" do - 2.times { @tm.start ; sleep 0.05 ; @tm.stop } - @tm.mean.must_be_close_to(0.05, 0.002) - end - - it "calculates the rate of the counts " do - 5.times { @tm.start ; sleep 0.05 ; @tm.stop } - @tm.rate.must_be_close_to(20.00, 0.5) - end - - - it "calculates the stddev of the durations" do - 3.times { |x| @tm.start ; sleep(0.05 * x) ; @tm.stop } - @tm.stddev.must_be_close_to(0.05) - end - - it "returns 0.0 for stddev if there is no data" do - @tm.stddev.must_equal 0.0 - end - - it "keeps track of the min value" do - 2.times { @tm.start ; sleep 0.05 ; @tm.stop } - @tm.min.must_be_close_to(0.05, 0.01) - end - - it "keeps track of the max value" do - 2.times { @tm.start ; sleep 0.05 ; @tm.stop } - @tm.max.must_be_close_to(0.05, 0.01) - end - - it "keeps track of the sum value" do - 2.times { @tm.start ; sleep 0.05 ; @tm.stop } - @tm.sum.must_be_close_to(0.10, 0.01) - end - - it "keeps track of the sum of squars value" do - 3.times { @tm.start ; sleep 0.05 ; @tm.stop } - @tm.sumsq.must_be_close_to(0.0075) - end - - it "keeps track of the minimum start time of all the intervals" do - f1 = Time.now.gmtime.to_f * 1_000_000 - 5.times { @tm.start ; sleep 0.05 ; @tm.stop } - f2 = Time.now.gmtime.to_f * 1_000_000 - @tm.sampling_start_time.must_be :>=, f1 - @tm.sampling_start_time.must_be :<, f2 - # distance from now to start time should be greater than the distance from - # the start to the min start_time - (f2 - @tm.sampling_start_time).must_be :>, ( @tm.sampling_start_time - f1 ) - end - - it "keeps track of the last stop time of all the intervals" do - f1 = Time.now.gmtime.to_f * 1_000_000 - sleep 0.01 - 5.times { @tm.start ; sleep 0.05 ; @tm.stop } - sleep 0.01 - f2 = Time.now.gmtime.to_f * 1_000_000 - @tm.sampling_stop_time.must_be :>, f1 - @tm.sampling_stop_time.must_be :<=, f2 - # distance from now to max stop time time should be less than the distance - # from the start to the max stop time - (f2 - @tm.sampling_stop_time).must_be :<, ( @tm.sampling_stop_time - f1 ) - end - - it "can create an already running timer" do - t = Hitimes::TimedMetric.now( 'already-running' ) - t.running?.must_equal true - end - - it "can measure a block of code from an instance" do - t = Hitimes::TimedMetric.new( 'measure a block' ) - 3.times { t.measure { sleep 0.05 } } - t.duration.must_be_close_to(0.15, 0.01) - t.count.must_equal 3 - end - - it "returns the value of the block when measuring" do - t = Hitimes::TimedMetric.new( 'measure a block' ) - x = t.measure { sleep 0.05; 42 } - t.duration.must_be_close_to(0.05, 0.002) - x.must_equal 42 - end - - describe "#to_hash" do - - it "has name value" do - h = @tm.to_hash - h['name'].must_equal "test-timed-metric" - end - - it "has an empty hash for additional_data" do - h = @tm.to_hash - h['additional_data'].must_equal Hash.new - h['additional_data'].size.must_equal 0 - end - - it "has the right sum" do - 10.times { |x| @tm.measure { sleep 0.01*x } } - h = @tm.to_hash - h['sum'].must_be_close_to(0.45, 0.01) - end - - fields = ::Hitimes::Stats::STATS.dup + %w[ name additional_data sampling_start_time sampling_stop_time ] - fields.each do |f| - it "has a value for #{f}" do - @tm.measure { sleep 0.001 } - h = @tm.to_hash - h[f].wont_be_nil - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/timed_value_metric_spec.rb b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/timed_value_metric_spec.rb deleted file mode 100644 index ddb1d09..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/timed_value_metric_spec.rb +++ /dev/null @@ -1,171 +0,0 @@ -require 'spec_helper' - -describe Hitimes::TimedValueMetric do - before( :each ) do - @tm = Hitimes::TimedValueMetric.new( 'test-timed-value-metric' ) - end - - it "knows if it is running or not" do - @tm.running?.must_equal false - @tm.start - @tm.running?.must_equal true - @tm.stop( 1 ) - @tm.running?.must_equal false - end - - it "#split returns the last duration and the timer is still running" do - @tm.start - d = @tm.split( 1 ) - @tm.running?.must_equal true - d.must_be :>, 0 - @tm.value_stats.count.must_equal 1 - @tm.timed_stats.count.must_equal 1 - @tm.duration.must_equal d - end - - it "#stop returns false if called more than once in a row" do - @tm.start - @tm.stop( 1 ).must_be :>, 0 - @tm.stop( 1 ).must_equal false - end - - it "does not count a currently running interval as an interval in calculations" do - @tm.start - @tm.value_stats.count.must_equal 0 - @tm.timed_stats.count.must_equal 0 - @tm.split( 1 ) - @tm.value_stats.count.must_equal 1 - @tm.timed_stats.count.must_equal 1 - end - - it "#split called on a stopped timer does nothing" do - @tm.start - @tm.stop( 1 ) - @tm.split( 1 ).must_equal false - end - - it "calculates the mean of the durations" do - 3.times { |x| @tm.start ; sleep 0.05 ; @tm.stop(x) } - @tm.timed_stats.mean.must_be_close_to(0.05, 0.01) - @tm.value_stats.mean.must_equal 1.00 - end - - it "calculates the rate of the counts " do - 5.times { |x| @tm.start ; sleep 0.05 ; @tm.stop( x ) } - @tm.rate.must_be_close_to(40.0, 1.0) - end - - - it "calculates the stddev of the durations" do - 3.times { |x| @tm.start ; sleep(0.05 * x) ; @tm.stop(x) } - @tm.timed_stats.stddev.must_be_close_to(0.05, 0.001) - @tm.value_stats.stddev.must_equal 1.0 - end - - it "returns 0.0 for stddev if there is no data" do - @tm.timed_stats.stddev.must_equal 0.0 - @tm.value_stats.stddev.must_equal 0.0 - end - - it "keeps track of the min value" do - 3.times { |x| @tm.start ; sleep 0.05 ; @tm.stop( x ) } - @tm.timed_stats.min.must_be_close_to( 0.05, 0.003 ) - @tm.value_stats.min.must_equal 0 - end - - it "keeps track of the max value" do - 3.times { |x| @tm.start ; sleep 0.05 ; @tm.stop( x ) } - @tm.timed_stats.max.must_be_close_to( 0.05, 0.003 ) - @tm.value_stats.max.must_equal 2 - end - - it "keeps track of the sum value" do - 3.times { |x| @tm.start ; sleep 0.05 ; @tm.stop( x ) } - @tm.timed_stats.sum.must_be_close_to( 0.15, 0.01 ) - @tm.value_stats.sum.must_equal 3 - end - - it "keeps track of the sum of squares value" do - 3.times { |x| @tm.start ; sleep 0.05 ; @tm.stop( x ) } - @tm.timed_stats.sumsq.must_be_close_to(0.0075, 0.0005) - @tm.value_stats.sumsq.must_equal 5 - end - - it "keeps track of the minimum start time of all the intervals" do - f1 = Time.now.gmtime.to_f * 1000000 - 5.times { @tm.start ; sleep 0.05 ; @tm.stop( 1 ) } - f2 = Time.now.gmtime.to_f * 1000000 - @tm.sampling_start_time.must_be :>=, f1 - @tm.sampling_start_time.must_be :<, f2 - # distance from now to start time should be greater than the distance from - # the start to the min start_time - (f2 - @tm.sampling_start_time).must_be :>, ( @tm.sampling_start_time - f1 ) - end - - it "keeps track of the last stop time of all the intervals" do - f1 = Time.now.gmtime.to_f * 1_000_000 - 5.times { @tm.start ; sleep 0.05 ; @tm.stop( 1 ) } - sleep 0.05 - f2 = Time.now.gmtime.to_f * 1_000_000 - @tm.sampling_stop_time.must_be :>, f1 - @tm.sampling_stop_time.must_be :<=, f2 - # distance from now to max stop time time should be less than the distance - # from the start to the max stop time - (f2 - @tm.sampling_stop_time).must_be :<, ( @tm.sampling_stop_time - f1 ) - end - - it "can create an already running timer" do - t = Hitimes::TimedValueMetric.now( 'already-running' ) - t.running?.must_equal true - end - - it "can measure a block of code from an instance" do - t = Hitimes::TimedValueMetric.new( 'measure a block' ) - 3.times { t.measure( 1 ) { sleep 0.05 } } - t.duration.must_be_close_to(0.15, 0.004) - t.timed_stats.count.must_equal 3 - t.value_stats.count.must_equal 3 - end - - it "returns the value of the block when measuring" do - t = Hitimes::TimedValueMetric.new( 'measure a block' ) - x = t.measure( 42 ) { sleep 0.05; 42 } - t.duration.must_be_close_to(0.05, 0.002) - x.must_equal 42 - end - - describe "#to_hash" do - - it "has name value" do - h = @tm.to_hash - h['name'].must_equal "test-timed-value-metric" - end - - it "has an empty has for additional_data" do - h = @tm.to_hash - h['additional_data'].must_equal Hash.new - h['additional_data'].size.must_equal 0 - end - - it "has a rate" do - 5.times { |x| @tm.start ; sleep 0.05 ; @tm.stop( x ) } - h = @tm.to_hash - h['rate'].must_be_close_to(40.0, 1.0) - end - - it "has a unit_count" do - 5.times { |x| @tm.start ; sleep 0.05 ; @tm.stop( x ) } - h = @tm.to_hash - h['unit_count'].must_equal 10 - end - - fields = %w[ name additional_data sampling_start_time sampling_stop_time value_stats timed_stats rate unit_count ] - fields.each do |f| - it "has a value for #{f}" do - 3.times { |x| @tm.measure(x) { sleep 0.001 } } - h = @tm.to_hash - h[f].wont_be_nil - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/value_metric_spec.rb b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/value_metric_spec.rb deleted file mode 100644 index 1887d71..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/value_metric_spec.rb +++ /dev/null @@ -1,108 +0,0 @@ -require 'spec_helper' - -describe Hitimes::ValueMetric do - before( :each ) do - @metric = Hitimes::ValueMetric.new( "testing" ) - 10.times { |x| @metric.measure( x ) } - end - - it 'has a name' do - @metric.name.must_equal "testing" - end - - it "has associated data from initialization" do - m = Hitimes::ValueMetric.new( "more-data", 'foo' => 'bar', 'this' => 'that' ) - m.additional_data['foo'].must_equal 'bar' - m.additional_data['this'].must_equal 'that' - - m = Hitimes::ValueMetric.new( "more-data", { 'foo' => 'bar', 'this' => 'that' } ) - m.additional_data['foo'].must_equal 'bar' - m.additional_data['this'].must_equal 'that' - end - - it "calculates the mean of the measurements" do - @metric.mean.must_equal 4.5 - end - - it "calculates the stddev of the measurements" do - @metric.stddev.must_be :>, 0.0 - end - - it "returns 0.0 for stddev if there is no data" do - m = Hitimes::ValueMetric.new('0-data') - m.stddev.must_equal 0.0 - end - - it "keeps track of the sum of data" do - @metric.sum.must_equal 45.0 - end - - it "keeps track of the sum of squars of data" do - @metric.sumsq.must_equal 285.0 - end - - it "retuns 0.0 for mean if there is no data" do - Hitimes::ValueMetric.new('0-data').mean.must_equal 0.0 - end - - it "keeps track of the min value" do - @metric.min.must_equal 0 - end - - it "keeps track of the max value" do - @metric.max.must_equal 9 - end - - it "keeps track of the first start time of all the measurements" do - m = Hitimes::ValueMetric.new( "first-start-time" ) - f1 = Time.now.gmtime.to_f * 1_000_000 - 10.times{ |x| m.measure( x ); sleep 0.1 } - f2 = Time.now.gmtime.to_f * 1_000_000 - m.sampling_start_time.must_be :>=, f1 - m.sampling_start_time.must_be :<, f2 - # distance from now to start time should be greater than the distance from - # the start to the min start_time - (f2 - m.sampling_start_time).must_be :>, ( m.sampling_start_time - f1 ) - end - - it "keeps track of the last stop time of all the intervals" do - m = Hitimes::ValueMetric.new( "last-stop-time" ) - f1 = Time.now.gmtime.to_f * 1_000_000 - 10.times {|x| m.measure( x ); sleep 0.1 } - f2 = Time.now.gmtime.to_f * 1_000_000 - m.sampling_stop_time.must_be :>, f1 - m.sampling_stop_time.must_be :<=, f2 - # distance from now to max stop time time should be less than the distance - # from the start to the max stop time - (f2 - m.sampling_stop_time).must_be :<, ( m.sampling_stop_time - f1 ) - end - - describe "#to_hash" do - - it "has name value" do - h = @metric.to_hash - h['name'].must_equal "testing" - end - - it "has an empty has for additional_data" do - h = @metric.to_hash - h['additional_data'].must_equal Hash.new - h['additional_data'].size.must_equal 0 - end - - it "has the right sum" do - h = @metric.to_hash - h['sum'].must_equal 45 - end - - fields = ::Hitimes::Stats::STATS.dup + %w[ name additional_data sampling_start_time sampling_stop_time ] - fields = fields - [ 'rate' ] - fields.each do |f| - it "has a value for #{f}" do - h = @metric.to_hash - h[f].wont_be_nil - end - end - end -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/version_spec.rb b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/version_spec.rb deleted file mode 100644 index 0a23bdb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/spec/version_spec.rb +++ /dev/null @@ -1,7 +0,0 @@ -require "spec_helper" - -describe "Hitimes::Version" do - it "should be accessable as a constant" do - Hitimes::VERSION.must_match(/\d+\.\d+\.\d+/) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/tasks/default.rake b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/tasks/default.rake deleted file mode 100644 index c149993..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/tasks/default.rake +++ /dev/null @@ -1,276 +0,0 @@ -# vim: syntax=ruby -require 'rake/clean' -require 'digest' -#------------------------------------------------------------------------------ -# If you want to Develop on this project just run 'rake develop' and you'll -# have all you need to get going. If you want to use bundler for development, -# then run 'rake develop:using_bundler' -#------------------------------------------------------------------------------ -namespace :develop do - - # Install all the development and runtime dependencies of this gem using the - # gemspec. - task :default do - require 'rubygems/dependency_installer' - installer = ::Gem::DependencyInstaller.new - - This.set_coverage_gem - - puts "Installing gem depedencies needed for development" - This.platform_gemspec.dependencies.each do |dep| - if dep.matching_specs.empty? then - puts "Installing : #{dep}" - installer.install dep - else - puts "Skipping : #{dep} -> already installed #{dep.matching_specs.first.full_name}" - end - end - puts "\n\nNow run 'rake test'" - end - - # Create a Gemfile that just references the gemspec - file 'Gemfile' => :gemspec do - File.open( "Gemfile", "w+" ) do |f| - f.puts "# DO NOT EDIT - This file is automatically generated" - f.puts "# Make changes to Manifest.txt and/or Rakefile and regenerate" - f.puts 'source "https://rubygems.org/"' - f.puts 'gemspec' - end - end - - desc "Create a bundler Gemfile" - task :using_bundler => 'Gemfile' do - puts "Now you can 'bundle'" - end - - # Gemfiles are build artifacts - CLOBBER << FileList['Gemfile*'] -end -desc "Boostrap development" -task :develop => "develop:default" - -#------------------------------------------------------------------------------ -# Minitest - standard TestTask -#------------------------------------------------------------------------------ -begin - require 'rake/testtask' - Rake::TestTask.new( :test ) do |t| - t.ruby_opts = %w[ -w -rubygems ] - t.libs = %w[ lib spec test ] - t.pattern = "{test,spec}/**/{test_*,*_spec}.rb" - end - - task :test_requirements - task :test => :test_requirements - task :default => :test -rescue LoadError - This.task_warning( 'test' ) -end - -#------------------------------------------------------------------------------ -# RDoc - standard rdoc rake task, although we must make sure to use a more -# recent version of rdoc since it is the one that has 'tomdoc' markup -#------------------------------------------------------------------------------ -begin - gem 'rdoc' # otherwise we get the wrong task from stdlib - require 'rdoc/task' - RDoc::Task.new do |t| - t.markup = 'tomdoc' - t.rdoc_dir = 'doc' - t.main = 'README.md' - t.title = "#{This.name} #{This.version}" - t.rdoc_files.include( FileList['*.{rdoc,md,txt}'], FileList['ext/**/*.c'], - FileList['lib/**/*.rb'] ) - end -rescue StandardError, LoadError - This.task_warning( 'rdoc' ) -end - -#------------------------------------------------------------------------------ -# Coverage - optional code coverage, rcov for 1.8 and simplecov for 1.9, so -# for the moment only rcov is listed. -#------------------------------------------------------------------------------ -if RUBY_VERSION < "1.9.0" - begin - require 'rcov/rcovtask' - Rcov::RcovTask.new( 'coverage' ) do |t| - t.libs << 'spec' - t.pattern = 'spec/**/*_spec.rb' - t.verbose = true - t.rcov_opts << "-x ^/" # remove all the global files - t.rcov_opts << "--sort coverage" # so we see the worst files at the top - end - rescue LoadError - This.task_warning( 'rcov' ) - end -else - begin - require 'simplecov' - desc 'Run tests with code coverage' - task :coverage do - ENV['COVERAGE'] = 'true' - Rake::Task[:test].invoke - end - CLOBBER << FileList["coverage"] if File.directory?( "coverage" ) - rescue LoadError - This.task_warning( 'simplecov' ) - end -end - -#------------------------------------------------------------------------------ -# Manifest - We want an explicit list of thos files that are to be packaged in -# the gem. Most of this is from Hoe. -#------------------------------------------------------------------------------ -namespace 'manifest' do - desc "Check the manifest" - task :check => :clean do - files = FileList["**/*", ".*"].exclude( This.exclude_from_manifest ).to_a.sort - files = files.select{ |f| File.file?( f ) } - - tmp = "Manifest.tmp" - File.open( tmp, 'w' ) do |f| - f.puts files.join("\n") - end - - begin - sh "diff -du Manifest.txt #{tmp}" - ensure - rm tmp - end - puts "Manifest looks good" - end - - desc "Generate the manifest" - task :generate => :clean do - files = %x[ git ls-files ].split("\n").sort - files.reject! { |f| f =~ This.exclude_from_manifest } - File.open( "Manifest.txt", "w" ) do |f| - f.puts files.join("\n") - end - end -end - -#------------------------------------------------------------------------------ -# Fixme - look for fixmes and report them -#------------------------------------------------------------------------------ -namespace :fixme do - task :default => 'manifest:check' do - This.manifest.each do |file| - next if file == __FILE__ - next unless file =~ %r/(txt|rb|md|rdoc|css|html|xml|css)\Z/ - puts "FIXME: Rename #{file}" if file =~ /fixme/i - IO.readlines( file ).each_with_index do |line, idx| - prefix = "FIXME: #{file}:#{idx+1}".ljust(42) - puts "#{prefix} => #{line.strip}" if line =~ /fixme/i - end - end - end - - def fixme_project_root - This.project_path( '../fixme' ) - end - - def fixme_project_path( subtree ) - fixme_project_root.join( subtree ) - end - - def local_fixme_files - This.manifest.select { |p| p =~ %r|^tasks/| } - end - - def outdated_fixme_files - local_fixme_files.reject do |local| - upstream = fixme_project_path( local ) - Digest::SHA256.file( local ) == Digest::SHA256.file( upstream ) - end - end - - def fixme_up_to_date? - outdated_fixme_files.empty? - end - - desc "See if the fixme tools are outdated" - task :outdated => :release_check do - if fixme_up_to_date? then - puts "Fixme files are up to date." - else - outdated_fixme_files.each do |f| - puts "#{f} is outdated" - end - end - end - - desc "Update outdated fixme files" - task :update => :release_check do - if fixme_up_to_date? then - puts "Fixme files are already up to date." - else - puts "Updating fixme files:" - outdated_fixme_files.each do |local| - upstream = fixme_project_path( local ) - puts " * #{local}" - FileUtils.cp( upstream, local ) - end - puts "Use your git commands as appropriate." - end - end -end -desc "Look for fixmes and report them" -task :fixme => "fixme:default" - -#------------------------------------------------------------------------------ -# Gem Specification -#------------------------------------------------------------------------------ -# Really this is only here to support those who use bundler -desc "Build the #{This.name}.gemspec file" -task :gemspec do - File.open( This.gemspec_file, "wb+" ) do |f| - f.puts "# DO NOT EDIT - This file is automatically generated" - f.puts "# Make changes to Manifest.txt and/or Rakefile and regenerate" - f.write This.platform_gemspec.to_ruby - end -end - -# the gemspec is also a dev artifact and should not be kept around. -CLOBBER << This.gemspec_file.to_s - -# .rbc files from ruby 2.0 -CLOBBER << FileList["**/*.rbc"] - -# The standard gem packaging task, everyone has it. -require 'rubygems/package_task' -::Gem::PackageTask.new( This.platform_gemspec ) do - # nothing -end - -#------------------------------------------------------------------------------ -# Release - the steps we go through to do a final release, this is pulled from -# a compbination of mojombo's rakegem, hoe and hoe-git -# -# 1) make sure we are on the master branch -# 2) make sure there are no uncommitted items -# 3) check the manifest and make sure all looks good -# 4) build the gem -# 5) do an empty commit to have the commit message of the version -# 6) tag that commit as the version -# 7) push master -# 8) push the tag -# 7) pus the gem -#------------------------------------------------------------------------------ -task :release_check do - unless `git branch` =~ /^\* master$/ - abort "You must be on the master branch to release!" - end - unless `git status` =~ /^nothing to commit/m - abort "Nope, sorry, you have unfinished business" - end -end - -desc "Create tag v#{This.version}, build and push #{This.platform_gemspec.full_name} to rubygems.org" -task :release => [ :release_check, 'manifest:check', :gem ] do - sh "git commit --allow-empty -a -m 'Release #{This.version}'" - sh "git tag -a -m 'v#{This.version}' v#{This.version}" - sh "git push origin master" - sh "git push origin v#{This.version}" - sh "gem push pkg/#{This.platform_gemspec.full_name}.gem" -end diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/tasks/extension.rake b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/tasks/extension.rake deleted file mode 100644 index e47abb3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/tasks/extension.rake +++ /dev/null @@ -1,38 +0,0 @@ -# To be used if the gem has extensions. -# If this task set is inclueded then you will need to also have -# -# spec.add_development_dependency( 'rake-compiler', '~> 0.8.1' ) -# -# in your top level rakefile -begin - require 'rake/extensiontask' - require 'rake/javaextensiontask' - - if RUBY_PLATFORM == "java" then - - Rake::JavaExtensionTask.new( This.name) do |ext| - ext.ext_dir = File.join( 'ext', This.name, "java" ) - ext.lib_dir = File.join( 'lib', This.name ) - ext.gem_spec = This.java_gemspec - end - - else - - Rake::ExtensionTask.new( This.name ) do |ext| - ext.ext_dir = File.join( 'ext', This.name, "c" ) - ext.lib_dir = File.join( 'lib', This.name ) - ext.gem_spec = This.ruby_gemspec - - ext.cross_compile = true # enable cross compilation (requires cross compile toolchain) - ext.cross_platform = 'i386-mswin32' # forces the Windows platform instead of the default one - # configure options only for cross compile - end - end - - task :test_requirements => :compile -rescue LoadError - This.task_warning( 'extension' ) -end - -CLOBBER << FileList["lib/**/*.{jar,so,bundle}"] -CLOBBER << FileList["lib/#{This.name}/{1.8,1.9,2.0}/"] diff --git a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/tasks/this.rb b/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/tasks/this.rb deleted file mode 100644 index 671870d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/hitimes-1.2.2/tasks/this.rb +++ /dev/null @@ -1,214 +0,0 @@ -require 'pathname' - -# Public: A Class containing all the metadata and utilities needed to manage a -# ruby project. -class ThisProject - # The name of this project - attr_accessor :name - - # The author's name - attr_accessor :author - - # The email address of the author(s) - attr_accessor :email - - # The homepage of this project - attr_accessor :homepage - - # The regex of files to exclude from the manifest - attr_accessor :exclude_from_manifest - - # The hash of Gem::Specifications keyed' by platform - attr_accessor :gemspecs - - # Public: Initialize ThisProject - # - # Yields self - def initialize(&block) - @exclude_from_manifest = %r/\.(git|DS_Store)|^(doc|coverage|pkg|tmp|Gemfile(\.lock)?)|^[^\/]+\.gemspec|\.(swp|jar|bundle|so|rvmrc)$|~$/ - @gemspecs = Hash.new - yield self if block_given? - end - - # Public: return the version of ThisProject - # - # Search the ruby files in the project looking for the one that has the - # version string in it. This does not eval any code in the project, it parses - # the source code looking for the string. - # - # Returns a String version - def version - [ "lib/#{ name }.rb", "lib/#{ name }/version.rb" ].each do |v| - path = project_path( v ) - line = path.read[/^\s*VERSION\s*=\s*.*/] - if line then - return line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1] - end - end - end - - # Internal: Return a section of an RDoc file with the given section name - # - # path - the relative path in the project of the file to parse - # section_name - the section out of the file from which to parse data - # - # Retuns the text of the section as an array of paragrphs. - def section_of( file, section_name ) - re = /^[=#]+ (.*)$/ - sectional = project_path( file ) - parts = sectional.read.split( re )[1..-1] - parts.map! { |p| p.strip } - - sections = Hash.new - Hash[*parts].each do |k,v| - sections[k] = v.split("\n\n") - end - return sections[section_name] - end - - # Internal: print out a warning about the give task - def task_warning( task ) - warn "WARNING: '#{task}' tasks are not defined. Please run 'rake develop'" - end - - # Internal: Return the full path to the file that is relative to the project - # root. - # - # path - the relative path of the file from the project root - # - # Returns the Pathname of the file - def project_path( *relative_path ) - project_root.join( *relative_path ) - end - - # Internal: The absolute path of this file - # - # Returns the Pathname of this file. - def this_file_path - Pathname.new( __FILE__ ).expand_path - end - - # Internal: The root directory of this project - # - # This is defined as being the directory that is in the path of this project - # that has the first Rakefile - # - # Returns the Pathname of the directory - def project_root - this_file_path.ascend do |p| - rakefile = p.join( 'Rakefile' ) - return p if rakefile.exist? - end - end - - # Internal: Returns the contents of the Manifest.txt file as an array - # - # Returns an Array of strings - def manifest - manifest_file = project_path( "Manifest.txt" ) - abort "You need a Manifest.txt" unless manifest_file.readable? - manifest_file.readlines.map { |l| l.strip } - end - - # Internal: Return the files that define the extensions - # - # Returns an Array - def extension_conf_files - manifest.grep( /extconf.rb\Z/ ) - end - - # Internal: Returns the gemspace associated with the current ruby platform - def platform_gemspec - gemspecs[platform] - end - - def core_gemspec - Gem::Specification.new do |spec| - spec.name = name - spec.version = version - spec.author = author - spec.email = email - spec.homepage = homepage - - spec.summary = summary - spec.description = description - spec.license = license - - spec.files = manifest - spec.executables = spec.files.grep(/^bin/) { |f| File.basename(f) } - spec.test_files = spec.files.grep(/^spec/) - - spec.extra_rdoc_files += spec.files.grep(/(txt|rdoc|md)$/) - spec.rdoc_options = [ "--main" , 'README.md', - "--markup", "tomdoc" ] - end - end - - # Internal: Return the gemspec for the ruby platform - def ruby_gemspec( core = core_gemspec, &block ) - yielding_gemspec( 'ruby', core, &block ) - end - - # Internal: Return the gemspec for the jruby platform - def java_gemspec( core = core_gemspec, &block ) - yielding_gemspec( 'java', core, &block ) - end - - # Internal: give an initial spec and a key, create a new gemspec based off of - # it. - # - # This will force the new gemspecs 'platform' to be that of the key, since the - # only reason you would have multiple gemspecs at this point is to deal with - # different platforms. - def yielding_gemspec( key, core ) - spec = gemspecs[key] ||= core.dup - spec.platform = key - yield spec if block_given? - return spec - end - - # Internal: Set the recovery gem development dependency - # - # These are dynamically set since they cannot be hard coded as there is - # no way to ship them correctly in the gemspec - # - # Returns nothing. - def set_coverage_gem - if RUBY_VERSION < "1.9.0" - platform_gemspec.add_development_dependency( 'rcov', '~> 1.0.0' ) - else - platform_gemspec.add_development_dependency( 'simplecov', '~> 0.8.2' ) - end - end - - # Internal: Return the platform of ThisProject at the current moment in time. - def platform - (RUBY_PLATFORM == "java") ? 'java' : Gem::Platform::RUBY - end - - # Internal: Return the DESCRIPTION section of the README.rdoc file - def description_section - section_of( 'README.md', 'DESCRIPTION') - end - - # Internal: Return the summary text from the README - def summary - description_section.first - end - - # Internal: Return the full description text from the README - def description - description_section.join(" ").tr("\n", ' ').gsub(/[{}]/,'').gsub(/\[[^\]]+\]/,'') # strip rdoc - end - - def license - "ISC" - end - - # Internal: The path to the gemspec file - def gemspec_file - project_path( "#{ name }.gemspec" ) - end -end - -This = ThisProject.new diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/LICENSE b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/LICENSE deleted file mode 100644 index 0e5f844..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -(The MIT License) - -Copyright (c) 2008-2014 Tom Preston-Werner - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the 'Software'), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/README.markdown b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/README.markdown deleted file mode 100644 index b68166c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/README.markdown +++ /dev/null @@ -1,36 +0,0 @@ -# [Jekyll](http://jekyllrb.com/) - -[![Gem Version](https://badge.fury.io/rb/jekyll.svg)](https://rubygems.org/gems/jekyll) -[![Build Status](https://secure.travis-ci.org/jekyll/jekyll.svg?branch=master)](https://travis-ci.org/jekyll/jekyll) -[![Code Climate](http://img.shields.io/codeclimate/github/jekyll/jekyll.svg)](https://codeclimate.com/github/jekyll/jekyll) -[![Dependency Status](https://gemnasium.com/jekyll/jekyll.svg)](https://gemnasium.com/jekyll/jekyll) -[![Security](https://hakiri.io/github/jekyll/jekyll/master.svg)](https://hakiri.io/github/jekyll/jekyll/master) - -By Tom Preston-Werner, Nick Quaranto, Parker Moore, and many [awesome contributors](https://github.com/jekyll/jekyll/graphs/contributors)! - -Jekyll is a simple, blog-aware, static site generator perfect for personal, project, or organization sites. Think of it like a file-based CMS, without all the complexity. Jekyll takes your content, renders Markdown and Liquid templates, and spits out a complete, static website ready to be served by Apache, Nginx or another web server. Jekyll is the engine behind [GitHub Pages](http://pages.github.com), which you can use to host sites right from your GitHub repositories. - -## Philosophy - -Jekyll does what you tell it to do — no more, no less. It doesn't try to outsmart users by making bold assumptions, nor does it burden them with needless complexity and configuration. Put simply, Jekyll gets out of your way and allows you to concentrate on what truly matters: your content. - -## Getting Started - -* [Install](http://jekyllrb.com/docs/installation/) the gem -* Read up about its [Usage](http://jekyllrb.com/docs/usage/) and [Configuration](http://jekyllrb.com/docs/configuration/) -* Take a gander at some existing [Sites](https://wiki.github.com/jekyll/jekyll/sites) -* Fork and [Contribute](http://jekyllrb.com/docs/contributing/) your own modifications -* Have questions? Check out [`#jekyll` on irc.freenode.net](https://botbot.me/freenode/jekyll/). - -## Diving In - -* [Migrate](http://import.jekyllrb.com/docs/home/) from your previous system -* Learn how the [YAML Front Matter](http://jekyllrb.com/docs/frontmatter/) works -* Put information on your site with [Variables](http://jekyllrb.com/docs/variables/) -* Customize the [Permalinks](http://jekyllrb.com/docs/permalinks/) your posts are generated with -* Use the built-in [Liquid Extensions](http://jekyllrb.com/docs/templates/) to make your life easier -* Use custom [Plugins](http://jekyllrb.com/docs/plugins/) to generate content specific to your site - -## License - -See [LICENSE](https://github.com/jekyll/jekyll/blob/master/LICENSE). diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/bin/jekyll b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/bin/jekyll deleted file mode 100755 index 060c912..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/bin/jekyll +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env ruby -STDOUT.sync = true - -$:.unshift File.join(File.dirname(__FILE__), *%w{ .. lib }) - -require 'jekyll' -require 'mercenary' - -%w[jekyll-import].each do |blessed_gem| - begin - require blessed_gem - rescue LoadError - end -end - -Jekyll::PluginManager.require_from_bundler - -Jekyll::Deprecator.process(ARGV) - -Mercenary.program(:jekyll) do |p| - p.version Jekyll::VERSION - p.description 'Jekyll is a blog-aware, static site generator in Ruby' - p.syntax 'jekyll [options]' - - p.option 'source', '-s', '--source [DIR]', 'Source directory (defaults to ./)' - p.option 'destination', '-d', '--destination [DIR]', 'Destination directory (defaults to ./_site)' - p.option 'safe', '--safe', 'Safe mode (defaults to false)' - p.option 'plugins', '-p', '--plugins PLUGINS_DIR1[,PLUGINS_DIR2[,...]]', Array, 'Plugins directory (defaults to ./_plugins)' - p.option 'layouts', '--layouts DIR', String, 'Layouts directory (defaults to ./_layouts)' - - Jekyll::Command.subclasses.each { |c| c.init_with_program(p) } - - p.action do |args, options| - if args.empty? - puts p - else - unless p.has_command?(args.first) - Jekyll.logger.abort_with "Invalid command. Use --help for more information" - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll.rb deleted file mode 100644 index 0372410..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll.rb +++ /dev/null @@ -1,172 +0,0 @@ -$:.unshift File.dirname(__FILE__) # For use/testing when no gem is installed - -# Require all of the Ruby files in the given directory. -# -# path - The String relative path from here to the directory. -# -# Returns nothing. -def require_all(path) - glob = File.join(File.dirname(__FILE__), path, '*.rb') - Dir[glob].each do |f| - require f - end -end - -# rubygems -require 'rubygems' - -# stdlib -require 'fileutils' -require 'time' -require 'English' -require 'pathname' -require 'logger' - -# 3rd party -require 'safe_yaml/load' -require 'liquid' -require 'kramdown' -require 'colorator' - -SafeYAML::OPTIONS[:suppress_warnings] = true - -module Jekyll - - # internal requires - autoload :Cleaner, 'jekyll/cleaner' - autoload :Collection, 'jekyll/collection' - autoload :Configuration, 'jekyll/configuration' - autoload :Convertible, 'jekyll/convertible' - autoload :Deprecator, 'jekyll/deprecator' - autoload :Document, 'jekyll/document' - autoload :Draft, 'jekyll/draft' - autoload :EntryFilter, 'jekyll/entry_filter' - autoload :Errors, 'jekyll/errors' - autoload :Excerpt, 'jekyll/excerpt' - autoload :Filters, 'jekyll/filters' - autoload :FrontmatterDefaults, 'jekyll/frontmatter_defaults' - autoload :Layout, 'jekyll/layout' - autoload :LayoutReader, 'jekyll/layout_reader' - autoload :LogAdapter, 'jekyll/log_adapter' - autoload :Page, 'jekyll/page' - autoload :PluginManager, 'jekyll/plugin_manager' - autoload :Post, 'jekyll/post' - autoload :Publisher, 'jekyll/publisher' - autoload :RelatedPosts, 'jekyll/related_posts' - autoload :Renderer, 'jekyll/renderer' - autoload :Site, 'jekyll/site' - autoload :StaticFile, 'jekyll/static_file' - autoload :Stevenson, 'jekyll/stevenson' - autoload :URL, 'jekyll/url' - autoload :Utils, 'jekyll/utils' - autoload :VERSION, 'jekyll/version' - - # extensions - require 'jekyll/plugin' - require 'jekyll/converter' - require 'jekyll/generator' - require 'jekyll/command' - require 'jekyll/liquid_extensions' - - class << self - # Public: Tells you which Jekyll environment you are building in so you can skip tasks - # if you need to. This is useful when doing expensive compression tasks on css and - # images and allows you to skip that when working in development. - - def env - ENV["JEKYLL_ENV"] || "development" - end - - # Public: Generate a Jekyll configuration Hash by merging the default - # options with anything in _config.yml, and adding the given options on top. - # - # override - A Hash of config directives that override any options in both - # the defaults and the config file. See Jekyll::Configuration::DEFAULTS for a - # list of option names and their defaults. - # - # Returns the final configuration Hash. - def configuration(override = Hash.new) - config = Configuration[Configuration::DEFAULTS] - override = Configuration[override].stringify_keys - unless override.delete('skip_config_files') - config = config.read_config_files(config.config_files(override)) - end - - # Merge DEFAULTS < _config.yml < override - config = Utils.deep_merge_hashes(config, override).stringify_keys - set_timezone(config['timezone']) if config['timezone'] - - config - end - - # Public: Set the TZ environment variable to use the timezone specified - # - # timezone - the IANA Time Zone - # - # Returns nothing - def set_timezone(timezone) - ENV['TZ'] = timezone - end - - # Public: Fetch the logger instance for this Jekyll process. - # - # Returns the LogAdapter instance. - def logger - @logger ||= LogAdapter.new(Stevenson.new, (ENV["JEKYLL_LOG_LEVEL"] || :info).to_sym) - end - - # Public: Set the log writer. - # New log writer must respond to the same methods - # as Ruby's interal Logger. - # - # writer - the new Logger-compatible log transport - # - # Returns the new logger. - def logger=(writer) - @logger = LogAdapter.new(writer) - end - - # Public: An array of sites - # - # Returns the Jekyll sites created. - def sites - @sites ||= [] - end - - # Public: Ensures the questionable path is prefixed with the base directory - # and prepends the questionable path with the base directory if false. - # - # base_directory - the directory with which to prefix the questionable path - # questionable_path - the path we're unsure about, and want prefixed - # - # Returns the sanitized path. - def sanitized_path(base_directory, questionable_path) - return base_directory if base_directory.eql?(questionable_path) - - clean_path = File.expand_path(questionable_path, "/") - clean_path = clean_path.sub(/\A\w\:\//, '/') - - unless clean_path.start_with?(base_directory.sub(/\A\w\:\//, '/')) - File.join(base_directory, clean_path) - else - clean_path - end - end - - end -end - -require_all 'jekyll/commands' -require_all 'jekyll/converters' -require_all 'jekyll/converters/markdown' -require_all 'jekyll/generators' -require_all 'jekyll/tags' - -# Eventually remove these for 3.0 as non-core -Jekyll::Deprecator.gracefully_require(%w[ - toml - jekyll-paginate - jekyll-gist - jekyll-coffeescript - jekyll-sass-converter -]) diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/cleaner.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/cleaner.rb deleted file mode 100644 index 6dd59ea..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/cleaner.rb +++ /dev/null @@ -1,95 +0,0 @@ -require 'set' - -module Jekyll - class Site - # Handles the cleanup of a site's destination before it is built. - class Cleaner - attr_reader :site - - def initialize(site) - @site = site - end - - # Cleans up the site's destination directory - def cleanup! - FileUtils.rm_rf(obsolete_files) - end - - private - - # Private: The list of files and directories to be deleted during cleanup process - # - # Returns an Array of the file and directory paths - def obsolete_files - (existing_files - new_files - new_dirs + replaced_files).to_a - end - - # Private: The list of existing files, apart from those included in keep_files and hidden files. - # - # Returns a Set with the file paths - def existing_files - files = Set.new - Dir.glob(site.in_dest_dir("**", "*"), File::FNM_DOTMATCH) do |file| - files << file unless file =~ /\/\.{1,2}$/ || file =~ keep_file_regex || keep_dirs.include?(file) - end - files - end - - # Private: The list of files to be created when site is built. - # - # Returns a Set with the file paths - def new_files - files = Set.new - site.each_site_file { |item| files << item.destination(site.dest) } - files - end - - # Private: The list of directories to be created when site is built. - # These are the parent directories of the files in #new_files. - # - # Returns a Set with the directory paths - def new_dirs - new_files.map { |file| parent_dirs(file) }.flatten.to_set - end - - # Private: The list of parent directories of a given file - # - # Returns an Array with the directory paths - def parent_dirs(file) - parent_dir = File.dirname(file) - if parent_dir == site.dest - [] - else - [parent_dir] + parent_dirs(parent_dir) - end - end - - # Private: The list of existing files that will be replaced by a directory during build - # - # Returns a Set with the file paths - def replaced_files - new_dirs.select { |dir| File.file?(dir) }.to_set - end - - # Private: The list of directories that need to be kept because they are parent directories - # of files specified in keep_files - # - # Returns a Set with the directory paths - def keep_dirs - site.keep_files.map { |file| parent_dirs(site.in_dest_dir(file)) }.flatten.to_set - end - - # Private: Creates a regular expression from the config's keep_files array - # - # Examples - # ['.git','.svn'] creates the following regex: /\/(\.git|\/.svn)/ - # - # Returns the regular expression - def keep_file_regex - or_list = site.keep_files.join("|") - pattern = "\/(#{or_list.gsub(".", "\.")})" - Regexp.new pattern - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/collection.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/collection.rb deleted file mode 100644 index 73e480d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/collection.rb +++ /dev/null @@ -1,188 +0,0 @@ -module Jekyll - class Collection - attr_reader :site, :label, :metadata - - # Create a new Collection. - # - # site - the site to which this collection belongs. - # label - the name of the collection - # - # Returns nothing. - def initialize(site, label) - @site = site - @label = sanitize_label(label) - @metadata = extract_metadata - end - - # Fetch the Documents in this collection. - # Defaults to an empty array if no documents have been read in. - # - # Returns an array of Jekyll::Document objects. - def docs - @docs ||= [] - end - - # Fetch the static files in this collection. - # Defaults to an empty array if no static files have been read in. - # - # Returns an array of Jekyll::StaticFile objects. - def files - @files ||= [] - end - - # Read the allowed documents into the collection's array of docs. - # - # Returns the sorted array of docs. - def read - filtered_entries.each do |file_path| - full_path = collection_dir(file_path) - next if File.directory?(full_path) - if Utils.has_yaml_header? full_path - doc = Jekyll::Document.new(full_path, { site: site, collection: self }) - doc.read - docs << doc - else - relative_dir = Jekyll.sanitized_path(relative_directory, File.dirname(file_path)).chomp("/.") - files << StaticFile.new(site, site.source, relative_dir, File.basename(full_path), self) - end - end - docs.sort! - end - - # All the entries in this collection. - # - # Returns an Array of file paths to the documents in this collection - # relative to the collection's directory - def entries - return Array.new unless exists? - @entries ||= - Dir.glob(collection_dir("**", "*.*")).map do |entry| - entry["#{collection_dir}/"] = ''; entry - end - end - - # Filtered version of the entries in this collection. - # See `Jekyll::EntryFilter#filter` for more information. - # - # Returns a list of filtered entry paths. - def filtered_entries - return Array.new unless exists? - @filtered_entries ||= - Dir.chdir(directory) do - entry_filter.filter(entries).reject do |f| - path = collection_dir(f) - File.directory?(path) || (File.symlink?(f) && site.safe) - end - end - end - - # The directory for this Collection, relative to the site source. - # - # Returns a String containing the directory name where the collection - # is stored on the filesystem. - def relative_directory - @relative_directory ||= "_#{label}" - end - - # The full path to the directory containing the collection. - # - # Returns a String containing th directory name where the collection - # is stored on the filesystem. - def directory - @directory ||= site.in_source_dir(relative_directory) - end - - # The full path to the directory containing the collection, with - # optional subpaths. - # - # *files - (optional) any other path pieces relative to the - # directory to append to the path - # - # Returns a String containing th directory name where the collection - # is stored on the filesystem. - def collection_dir(*files) - return directory if files.empty? - site.in_source_dir(relative_directory, *files) - end - - # Checks whether the directory "exists" for this collection. - # The directory must exist on the filesystem and must not be a symlink - # if in safe mode. - # - # Returns false if the directory doesn't exist or if it's a symlink - # and we're in safe mode. - def exists? - File.directory?(directory) && !(File.symlink?(directory) && site.safe) - end - - # The entry filter for this collection. - # Creates an instance of Jekyll::EntryFilter. - # - # Returns the instance of Jekyll::EntryFilter for this collection. - def entry_filter - @entry_filter ||= Jekyll::EntryFilter.new(site, relative_directory) - end - - # An inspect string. - # - # Returns the inspect string - def inspect - "#" - end - - # Produce a sanitized label name - # Label names may not contain anything but alphanumeric characters, - # underscores, and hyphens. - # - # label - the possibly-unsafe label - # - # Returns a sanitized version of the label. - def sanitize_label(label) - label.gsub(/[^a-z0-9_\-\.]/i, '') - end - - # Produce a representation of this Collection for use in Liquid. - # Exposes two attributes: - # - label - # - docs - # - # Returns a representation of this collection for use in Liquid. - def to_liquid - metadata.merge({ - "label" => label, - "docs" => docs, - "files" => files, - "directory" => directory, - "output" => write?, - "relative_directory" => relative_directory - }) - end - - # Whether the collection's documents ought to be written as individual - # files in the output. - # - # Returns true if the 'write' metadata is true, false otherwise. - def write? - !!metadata['output'] - end - - # The URL template to render collection's documents at. - # - # Returns the URL template to render collection's documents at. - def url_template - metadata.fetch('permalink', "/:collection/:path:output_ext") - end - - # Extract options for this collection from the site configuration. - # - # Returns the metadata for this collection - def extract_metadata - if site.config['collections'].is_a?(Hash) - site.config['collections'][label] || Hash.new - else - {} - end - end - - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/command.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/command.rb deleted file mode 100644 index a1cc8c0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/command.rb +++ /dev/null @@ -1,66 +0,0 @@ -module Jekyll - class Command - - class << self - - # A list of subclasses of Jekyll::Command - def subclasses - @subclasses ||= [] - end - - # Keep a list of subclasses of Jekyll::Command every time it's inherited - # Called automatically. - # - # base - the subclass - # - # Returns nothing - def inherited(base) - subclasses << base - super(base) - end - - # Run Site#process and catch errors - # - # site - the Jekyll::Site object - # - # Returns nothing - def process_site(site) - site.process - rescue Jekyll::Errors::FatalException => e - Jekyll.logger.error "ERROR:", "YOUR SITE COULD NOT BE BUILT:" - Jekyll.logger.error "", "------------------------------------" - Jekyll.logger.error "", e.message - exit(1) - end - - # Create a full Jekyll configuration with the options passed in as overrides - # - # options - the configuration overrides - # - # Returns a full Jekyll configuration - def configuration_from_options(options) - Jekyll.configuration(options) - end - - # Add common options to a command for building configuration - # - # c - the Jekyll::Command to add these options to - # - # Returns nothing - def add_build_options(c) - c.option 'config', '--config CONFIG_FILE[,CONFIG_FILE2,...]', Array, 'Custom configuration file' - c.option 'future', '--future', 'Publishes posts with a future date' - c.option 'limit_posts', '--limit_posts MAX_POSTS', Integer, 'Limits the number of posts to parse and publish' - c.option 'watch', '-w', '--[no-]watch', 'Watch for changes and rebuild' - c.option 'force_polling', '--force_polling', 'Force watch to use polling' - c.option 'lsi', '--lsi', 'Use LSI for improved related posts' - c.option 'show_drafts', '-D', '--drafts', 'Render posts in the _drafts folder' - c.option 'unpublished', '--unpublished', 'Render posts that were marked as unpublished' - c.option 'quiet', '-q', '--quiet', 'Silence output.' - c.option 'verbose', '-V', '--verbose', 'Print verbose output.' - end - - end - - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/commands/build.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/commands/build.rb deleted file mode 100644 index de23432..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/commands/build.rb +++ /dev/null @@ -1,75 +0,0 @@ -module Jekyll - module Commands - class Build < Command - - class << self - - # Create the Mercenary command for the Jekyll CLI for this Command - def init_with_program(prog) - prog.command(:build) do |c| - c.syntax 'build [options]' - c.description 'Build your site' - c.alias :b - - add_build_options(c) - - c.action do |args, options| - options["serving"] = false - Jekyll::Commands::Build.process(options) - end - end - end - - # Build your jekyll site - # Continuously watch if `watch` is set to true in the config. - def process(options) - Jekyll.logger.log_level = :error if options['quiet'] - - options = configuration_from_options(options) - site = Jekyll::Site.new(options) - - if options.fetch('skip_initial_build', false) - Jekyll.logger.warn "Build Warning:", "Skipping the initial build. This may result in an out-of-date site." - else - build(site, options) - end - - if options.fetch('watch', false) - watch(site, options) - else - Jekyll.logger.info "Auto-regeneration:", "disabled. Use --watch to enable." - end - end - - # Build your Jekyll site. - # - # site - the Jekyll::Site instance to build - # options - A Hash of options passed to the command - # - # Returns nothing. - def build(site, options) - source = options['source'] - destination = options['destination'] - Jekyll.logger.info "Source:", source - Jekyll.logger.info "Destination:", destination - Jekyll.logger.info "Generating..." - process_site(site) - Jekyll.logger.info "", "done." - end - - # Private: Watch for file changes and rebuild the site. - # - # site - A Jekyll::Site instance - # options - A Hash of options passed to the command - # - # Returns nothing. - def watch(site, options) - Deprecator.gracefully_require 'jekyll-watch' - Jekyll::Watcher.watch(options) - end - - end # end of class << self - - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/commands/docs.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/commands/docs.rb deleted file mode 100644 index 71c1016..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/commands/docs.rb +++ /dev/null @@ -1,30 +0,0 @@ -module Jekyll - module Commands - class Docs < Command - - class << self - - def init_with_program(prog) - prog.command(:docs) do |c| - c.syntax 'docs' - c.description "Launch local server with docs for Jekyll v#{Jekyll::VERSION}" - - c.option 'port', '-P', '--port [PORT]', 'Port to listen on' - c.option 'host', '-H', '--host [HOST]', 'Host to bind to' - - c.action do |args, options| - options.merge!({ - 'source' => File.expand_path("../../../site", File.dirname(__FILE__)), - 'destination' => File.expand_path("../../../site/_site", File.dirname(__FILE__)) - }) - Jekyll::Commands::Build.process(options) - Jekyll::Commands::Serve.process(options) - end - end - end - - end - - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/commands/doctor.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/commands/doctor.rb deleted file mode 100644 index 0fab8b3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/commands/doctor.rb +++ /dev/null @@ -1,84 +0,0 @@ -module Jekyll - module Commands - class Doctor < Command - class << self - - def init_with_program(prog) - prog.command(:doctor) do |c| - c.syntax 'doctor' - c.description 'Search site and print specific deprecation warnings' - c.alias(:hyde) - - c.option '--config CONFIG_FILE[,CONFIG_FILE2,...]', Array, 'Custom configuration file' - - c.action do |args, options| - Jekyll::Commands::Doctor.process(options) - end - end - end - - def process(options) - site = Jekyll::Site.new(configuration_from_options(options)) - site.read - - if healthy?(site) - Jekyll.logger.info "Your test results", "are in. Everything looks fine." - else - abort - end - end - - def healthy?(site) - [ - !deprecated_relative_permalinks(site), - !conflicting_urls(site) - ].all? - end - - def deprecated_relative_permalinks(site) - contains_deprecated_pages = false - site.pages.each do |page| - if page.uses_relative_permalinks - Jekyll.logger.warn "Deprecation:", "'#{page.path}' uses relative" + - " permalinks which will be deprecated in" + - " Jekyll v2.0.0 and beyond." - contains_deprecated_pages = true - end - end - contains_deprecated_pages - end - - def conflicting_urls(site) - conflicting_urls = false - urls = {} - urls = collect_urls(urls, site.pages, site.dest) - urls = collect_urls(urls, site.posts, site.dest) - urls.each do |url, paths| - if paths.size > 1 - conflicting_urls = true - Jekyll.logger.warn "Conflict:", "The URL '#{url}' is the destination" + - " for the following pages: #{paths.join(", ")}" - end - end - conflicting_urls - end - - private - - def collect_urls(urls, things, destination) - things.each do |thing| - dest = thing.destination(destination) - if urls[dest] - urls[dest] << thing.path - else - urls[dest] = [thing.path] - end - end - urls - end - - end - - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/commands/help.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/commands/help.rb deleted file mode 100644 index 421d87e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/commands/help.rb +++ /dev/null @@ -1,33 +0,0 @@ -module Jekyll - module Commands - class Help < Command - class << self - - def init_with_program(prog) - prog.command(:help) do |c| - c.syntax 'help [subcommand]' - c.description 'Show the help message, optionally for a given subcommand.' - - c.action do |args, _| - cmd = (args.first || "").to_sym - if args.empty? - puts prog - elsif prog.has_command? cmd - puts prog.commands[cmd] - else - invalid_command(prog, cmd) - abort - end - end - end - end - - def invalid_command(prog, cmd) - Jekyll.logger.error "Error:", "Hmm... we don't know what the '#{cmd}' command is." - Jekyll.logger.info "Valid commands:", prog.commands.keys.join(", ") - end - - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/commands/new.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/commands/new.rb deleted file mode 100644 index 724a1d8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/commands/new.rb +++ /dev/null @@ -1,82 +0,0 @@ -require 'erb' - -module Jekyll - module Commands - class New < Command - class << self - def init_with_program(prog) - prog.command(:new) do |c| - c.syntax 'new PATH' - c.description 'Creates a new Jekyll site scaffold in PATH' - - c.option 'force', '--force', 'Force creation even if PATH already exists' - c.option 'blank', '--blank', 'Creates scaffolding but with empty files' - - c.action do |args, options| - Jekyll::Commands::New.process(args, options) - end - end - end - - def process(args, options = {}) - raise ArgumentError.new('You must specify a path.') if args.empty? - - new_blog_path = File.expand_path(args.join(" "), Dir.pwd) - FileUtils.mkdir_p new_blog_path - if preserve_source_location?(new_blog_path, options) - Jekyll.logger.abort_with "Conflict:", "#{new_blog_path} exists and is not empty." - end - - if options["blank"] - create_blank_site new_blog_path - else - create_sample_files new_blog_path - - File.open(File.expand_path(initialized_post_name, new_blog_path), "w") do |f| - f.write(scaffold_post_content) - end - end - - Jekyll.logger.info "New jekyll site installed in #{new_blog_path}." - end - - def create_blank_site(path) - Dir.chdir(path) do - FileUtils.mkdir(%w(_layouts _posts _drafts)) - FileUtils.touch("index.html") - end - end - - def scaffold_post_content - ERB.new(File.read(File.expand_path(scaffold_path, site_template))).result - end - - # Internal: Gets the filename of the sample post to be created - # - # Returns the filename of the sample post, as a String - def initialized_post_name - "_posts/#{Time.now.strftime('%Y-%m-%d')}-welcome-to-jekyll.markdown" - end - - private - - def preserve_source_location?(path, options) - !options["force"] && !Dir["#{path}/**/*"].empty? - end - - def create_sample_files(path) - FileUtils.cp_r site_template + '/.', path - FileUtils.rm File.expand_path(scaffold_path, path) - end - - def site_template - File.expand_path("../../site_template", File.dirname(__FILE__)) - end - - def scaffold_path - "_posts/0000-00-00-welcome-to-jekyll.markdown.erb" - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/commands/serve.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/commands/serve.rb deleted file mode 100644 index 2909f32..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/commands/serve.rb +++ /dev/null @@ -1,136 +0,0 @@ -# -*- encoding: utf-8 -*- -module Jekyll - module Commands - class Serve < Command - - class << self - - def init_with_program(prog) - prog.command(:serve) do |c| - c.syntax 'serve [options]' - c.description 'Serve your site locally' - c.alias :server - c.alias :s - - add_build_options(c) - - c.option 'detach', '-B', '--detach', 'Run the server in the background (detach)' - c.option 'port', '-P', '--port [PORT]', 'Port to listen on' - c.option 'host', '-H', '--host [HOST]', 'Host to bind to' - c.option 'baseurl', '-b', '--baseurl [URL]', 'Base URL' - c.option 'skip_initial_build', '--skip-initial-build', 'Skips the initial site build which occurs before the server is started.' - - c.action do |args, options| - options["serving"] = true - options["watch"] = true unless options.key?("watch") - Jekyll::Commands::Build.process(options) - Jekyll::Commands::Serve.process(options) - end - end - end - - # Boot up a WEBrick server which points to the compiled site's root. - def process(options) - options = configuration_from_options(options) - destination = options['destination'] - setup(destination) - - s = WEBrick::HTTPServer.new(webrick_options(options)) - s.unmount("") - - s.mount( - options['baseurl'], - WEBrick::HTTPServlet::FileHandler, - destination, - file_handler_options - ) - - Jekyll.logger.info "Server address:", server_address(s, options) - - if options['detach'] # detach the server - pid = Process.fork { s.start } - Process.detach(pid) - Jekyll.logger.info "Server detached with pid '#{pid}'.", "Run `kill -9 #{pid}' to stop the server." - else # create a new server thread, then join it with current terminal - t = Thread.new { s.start } - trap("INT") { s.shutdown } - t.join - end - end - - def setup(destination) - require 'webrick' - - FileUtils.mkdir_p(destination) - - # monkey patch WEBrick using custom 404 page (/404.html) - if File.exist?(File.join(destination, '404.html')) - WEBrick::HTTPResponse.class_eval do - def create_error_page - @header['content-type'] = "text/html; charset=UTF-8" - @body = IO.read(File.join(@config[:DocumentRoot], '404.html')) - end - end - end - end - - def webrick_options(config) - opts = { - :BindAddress => config['host'], - :DirectoryIndex => %w(index.html index.htm index.cgi index.rhtml index.xml), - :DocumentRoot => config['destination'], - :DoNotReverseLookup => true, - :MimeTypes => mime_types, - :Port => config['port'], - :StartCallback => start_callback(config['detach']) - } - - if config['verbose'] - opts.merge!({ - :Logger => WEBrick::Log.new($stdout, WEBrick::Log::DEBUG) - }) - else - opts.merge!({ - :AccessLog => [], - :Logger => WEBrick::Log.new([], WEBrick::Log::WARN) - }) - end - - opts - end - - def start_callback(detached) - unless detached - Proc.new { Jekyll.logger.info "Server running...", "press ctrl-c to stop." } - end - end - - def mime_types - mime_types_file = File.expand_path('../mime.types', File.dirname(__FILE__)) - WEBrick::HTTPUtils::load_mime_types(mime_types_file) - end - - def server_address(server, options) - baseurl = "#{options['baseurl']}/" if options['baseurl'] - [ - "http://", - server.config[:BindAddress], - ":", - server.config[:Port], - baseurl || "" - ].map(&:to_s).join("") - end - - # recreate NondisclosureName under utf-8 circumstance - def file_handler_options - WEBrick::Config::FileHandler.merge({ - :FancyIndexing => true, - :NondisclosureName => ['.ht*','~*'] - }) - end - - end - - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/configuration.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/configuration.rb deleted file mode 100644 index 7f1148a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/configuration.rb +++ /dev/null @@ -1,276 +0,0 @@ -# encoding: UTF-8 - -module Jekyll - class Configuration < Hash - - # Default options. Overridden by values in _config.yml. - # Strings rather than symbols are used for compatibility with YAML. - DEFAULTS = { - # Where things are - 'source' => Dir.pwd, - 'destination' => File.join(Dir.pwd, '_site'), - 'plugins' => '_plugins', - 'layouts' => '_layouts', - 'data_source' => '_data', - 'collections' => nil, - - # Handling Reading - 'safe' => false, - 'include' => ['.htaccess'], - 'exclude' => [], - 'keep_files' => ['.git','.svn'], - 'encoding' => 'utf-8', - 'markdown_ext' => 'markdown,mkdown,mkdn,mkd,md', - 'textile_ext' => 'textile', - - # Filtering Content - 'show_drafts' => nil, - 'limit_posts' => 0, - 'future' => true, # remove and make true just default - 'unpublished' => false, - - # Plugins - 'whitelist' => [], - 'gems' => [], - - # Conversion - 'markdown' => 'kramdown', - 'highlighter' => 'pygments', - 'lsi' => false, - 'excerpt_separator' => "\n\n", - - # Serving - 'detach' => false, # default to not detaching the server - 'port' => '4000', - 'host' => '127.0.0.1', - 'baseurl' => '', - - # Backwards-compatibility options - 'relative_permalinks' => false, - - # Output Configuration - 'permalink' => 'date', - 'paginate_path' => '/page:num', - 'timezone' => nil, # use the local timezone - - 'quiet' => false, - 'defaults' => [], - - 'maruku' => { - 'use_tex' => false, - 'use_divs' => false, - 'png_engine' => 'blahtex', - 'png_dir' => 'images/latex', - 'png_url' => '/images/latex', - 'fenced_code_blocks' => true - }, - - 'rdiscount' => { - 'extensions' => [] - }, - - 'redcarpet' => { - 'extensions' => [] - }, - - 'kramdown' => { - 'auto_ids' => true, - 'footnote_nr' => 1, - 'entity_output' => 'as_char', - 'toc_levels' => '1..6', - 'smart_quotes' => 'lsquo,rsquo,ldquo,rdquo', - 'use_coderay' => false, - - 'coderay' => { - 'coderay_wrap' => 'div', - 'coderay_line_numbers' => 'inline', - 'coderay_line_number_start' => 1, - 'coderay_tab_width' => 4, - 'coderay_bold_every' => 10, - 'coderay_css' => 'style' - } - }, - - 'redcloth' => { - 'hard_breaks' => true - } - } - - # Public: Turn all keys into string - # - # Return a copy of the hash where all its keys are strings - def stringify_keys - reduce({}) { |hsh,(k,v)| hsh.merge(k.to_s => v) } - end - - # Public: Directory of the Jekyll source folder - # - # override - the command-line options hash - # - # Returns the path to the Jekyll source directory - def source(override) - override['source'] || self['source'] || DEFAULTS['source'] - end - - def quiet?(override = {}) - override['quiet'] || self['quiet'] || DEFAULTS['quiet'] - end - - def safe_load_file(filename) - case File.extname(filename) - when /\.toml/i - TOML.load_file(filename) - when /\.ya?ml/i - SafeYAML.load_file(filename) - else - raise ArgumentError, "No parser for '#{filename}' is available. Use a .toml or .y(a)ml file instead." - end - end - - # Public: Generate list of configuration files from the override - # - # override - the command-line options hash - # - # Returns an Array of config files - def config_files(override) - # Be quiet quickly. - Jekyll.logger.log_level = :error if quiet?(override) - - # Get configuration from /_config.yml or / - config_files = override.delete('config') - if config_files.to_s.empty? - default = %w[yml yaml].find(Proc.new { 'yml' }) do |ext| - File.exists? Jekyll.sanitized_path(source(override), "_config.#{ext}") - end - config_files = Jekyll.sanitized_path(source(override), "_config.#{default}") - @default_config_file = true - end - config_files = [config_files] unless config_files.is_a? Array - config_files - end - - # Public: Read configuration and return merged Hash - # - # file - the path to the YAML file to be read in - # - # Returns this configuration, overridden by the values in the file - def read_config_file(file) - next_config = safe_load_file(file) - raise ArgumentError.new("Configuration file: (INVALID) #{file}".yellow) unless next_config.is_a?(Hash) - Jekyll.logger.info "Configuration file:", file - next_config - rescue SystemCallError - if @default_config_file - Jekyll.logger.warn "Configuration file:", "none" - {} - else - Jekyll.logger.error "Fatal:", "The configuration file '#{file}' could not be found." - raise LoadError, "The Configuration file '#{file}' could not be found." - end - end - - # Public: Read in a list of configuration files and merge with this hash - # - # files - the list of configuration file paths - # - # Returns the full configuration, with the defaults overridden by the values in the - # configuration files - def read_config_files(files) - configuration = clone - - begin - files.each do |config_file| - new_config = read_config_file(config_file) - configuration = Utils.deep_merge_hashes(configuration, new_config) - end - rescue ArgumentError => err - Jekyll.logger.warn "WARNING:", "Error reading configuration. " + - "Using defaults (and options)." - $stderr.puts "#{err}" - end - - configuration.fix_common_issues.backwards_compatibilize - end - - # Public: Split a CSV string into an array containing its values - # - # csv - the string of comma-separated values - # - # Returns an array of the values contained in the CSV - def csv_to_array(csv) - csv.split(",").map(&:strip) - end - - # Public: Ensure the proper options are set in the configuration to allow for - # backwards-compatibility with Jekyll pre-1.0 - # - # Returns the backwards-compatible configuration - def backwards_compatibilize - config = clone - # Provide backwards-compatibility - if config.key?('auto') || config.key?('watch') - Jekyll.logger.warn "Deprecation:", "Auto-regeneration can no longer" + - " be set from your configuration file(s). Use the"+ - " --[no-]watch/-w command-line option instead." - config.delete('auto') - config.delete('watch') - end - - if config.key? 'server' - Jekyll.logger.warn "Deprecation:", "The 'server' configuration option" + - " is no longer accepted. Use the 'jekyll serve'" + - " subcommand to serve your site with WEBrick." - config.delete('server') - end - - if config.key? 'server_port' - Jekyll.logger.warn "Deprecation:", "The 'server_port' configuration option" + - " has been renamed to 'port'. Please update your config" + - " file accordingly." - # copy but don't overwrite: - config['port'] = config['server_port'] unless config.key?('port') - config.delete('server_port') - end - - if config.key? 'pygments' - Jekyll.logger.warn "Deprecation:", "The 'pygments' configuration option" + - " has been renamed to 'highlighter'. Please update your" + - " config file accordingly. The allowed values are 'rouge', " + - "'pygments' or null." - - config['highlighter'] = 'pygments' if config['pygments'] - config.delete('pygments') - end - - %w[include exclude].each do |option| - if config.fetch(option, []).is_a?(String) - Jekyll.logger.warn "Deprecation:", "The '#{option}' configuration option" + - " must now be specified as an array, but you specified" + - " a string. For now, we've treated the string you provided" + - " as a list of comma-separated values." - config[option] = csv_to_array(config[option]) - end - config[option].map!(&:to_s) - end - - if config.fetch('markdown', 'kramdown').to_s.downcase.eql?("maruku") - Jekyll::Deprecator.deprecation_message "You're using the 'maruku' " + - "Markdown processor. Maruku support has been deprecated and will " + - "be removed in 3.0.0. We recommend you switch to Kramdown." - end - config - end - - def fix_common_issues - config = clone - - if config.key?('paginate') && (!config['paginate'].is_a?(Integer) || config['paginate'] < 1) - Jekyll.logger.warn "Config Warning:", "The `paginate` key must be a" + - " positive integer or nil. It's currently set to '#{config['paginate'].inspect}'." - config['paginate'] = nil - end - - config - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converter.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converter.rb deleted file mode 100644 index c30f494..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converter.rb +++ /dev/null @@ -1,48 +0,0 @@ -module Jekyll - class Converter < Plugin - # Public: Get or set the highlighter prefix. When an argument is specified, - # the prefix will be set. If no argument is specified, the current prefix - # will be returned. - # - # highlighter_prefix - The String prefix (default: nil). - # - # Returns the String prefix. - def self.highlighter_prefix(highlighter_prefix = nil) - @highlighter_prefix = highlighter_prefix if highlighter_prefix - @highlighter_prefix - end - - # Public: Get or set the highlighter suffix. When an argument is specified, - # the suffix will be set. If no argument is specified, the current suffix - # will be returned. - # - # highlighter_suffix - The String suffix (default: nil). - # - # Returns the String suffix. - def self.highlighter_suffix(highlighter_suffix = nil) - @highlighter_suffix = highlighter_suffix if highlighter_suffix - @highlighter_suffix - end - - # Initialize the converter. - # - # Returns an initialized Converter. - def initialize(config = {}) - @config = config - end - - # Get the highlighter prefix. - # - # Returns the String prefix. - def highlighter_prefix - self.class.highlighter_prefix - end - - # Get the highlighter suffix. - # - # Returns the String suffix. - def highlighter_suffix - self.class.highlighter_suffix - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/identity.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/identity.rb deleted file mode 100644 index 69171b0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/identity.rb +++ /dev/null @@ -1,21 +0,0 @@ -module Jekyll - module Converters - class Identity < Converter - safe true - - priority :lowest - - def matches(ext) - true - end - - def output_ext(ext) - ext - end - - def convert(content) - content - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/markdown.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/markdown.rb deleted file mode 100644 index f0d1afb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/markdown.rb +++ /dev/null @@ -1,83 +0,0 @@ -module Jekyll - module Converters - class Markdown < Converter - safe true - - highlighter_prefix "\n" - highlighter_suffix "\n" - - def setup - return if @setup - @parser = - case @config['markdown'].downcase - when 'redcarpet' then RedcarpetParser.new(@config) - when 'kramdown' then KramdownParser.new(@config) - when 'rdiscount' then RDiscountParser.new(@config) - when 'maruku' then MarukuParser.new(@config) - else - # So they can't try some tricky bullshit or go down the ancestor chain, I hope. - if allowed_custom_class?(@config['markdown']) - self.class.const_get(@config['markdown']).new(@config) - else - Jekyll.logger.error "Invalid Markdown Processor:", "#{@config['markdown']}" - Jekyll.logger.error "", "Valid options are [ #{valid_processors.join(" | ")} ]" - raise Errors::FatalException, "Invalid Markdown Processor: #{@config['markdown']}" - end - end - @setup = true - end - - def valid_processors - %w[ - maruku - rdiscount - kramdown - redcarpet - ] + third_party_processors - end - - def third_party_processors - self.class.constants - %w[ - KramdownParser - MarukuParser - RDiscountParser - RedcarpetParser - PRIORITIES - ].map(&:to_sym) - end - - def extname_matches_regexp - @extname_matches_regexp ||= Regexp.new( - '^\.(' + @config['markdown_ext'].gsub(',','|') +')$', - Regexp::IGNORECASE - ) - end - - def matches(ext) - ext =~ extname_matches_regexp - end - - def output_ext(ext) - ".html" - end - - def convert(content) - setup - @parser.convert(content) - end - - private - - # Private: Determine whether a class name is an allowed custom markdown - # class name - # - # parser_name - the name of the parser class - # - # Returns true if the parser name contains only alphanumeric characters - # and is defined within Jekyll::Converters::Markdown - def allowed_custom_class?(parser_name) - parser_name !~ /[^A-Za-z0-9]/ && self.class.constants.include?(parser_name.to_sym) - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/markdown/kramdown_parser.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/markdown/kramdown_parser.rb deleted file mode 100644 index 097c921..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/markdown/kramdown_parser.rb +++ /dev/null @@ -1,29 +0,0 @@ -module Jekyll - module Converters - class Markdown - class KramdownParser - def initialize(config) - require 'kramdown' - @config = config - rescue LoadError - STDERR.puts 'You are missing a library required for Markdown. Please run:' - STDERR.puts ' $ [sudo] gem install kramdown' - raise Errors::FatalException.new("Missing dependency: kramdown") - end - - def convert(content) - # Check for use of coderay - if @config['kramdown']['use_coderay'] - %w[wrap line_numbers line_numbers_start tab_width bold_every css default_lang].each do |opt| - key = "coderay_#{opt}" - @config['kramdown'][key] = @config['kramdown']['coderay'][key] unless @config['kramdown'].key?(key) - end - end - - Kramdown::Document.new(content, Utils.symbolize_hash_keys(@config["kramdown"])).to_html - end - - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/markdown/maruku_parser.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/markdown/maruku_parser.rb deleted file mode 100644 index 7be577c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/markdown/maruku_parser.rb +++ /dev/null @@ -1,55 +0,0 @@ -module Jekyll - module Converters - class Markdown - class MarukuParser - def initialize(config) - require 'maruku' - @config = config - @errors = [] - load_divs_library if @config['maruku']['use_divs'] - load_blahtext_library if @config['maruku']['use_tex'] - - # allow fenced code blocks (new in Maruku 0.7.0) - MaRuKu::Globals[:fenced_code_blocks] = !!@config['maruku']['fenced_code_blocks'] - - rescue LoadError - STDERR.puts 'You are missing a library required for Markdown. Please run:' - STDERR.puts ' $ [sudo] gem install maruku' - raise Errors::FatalException.new("Missing dependency: maruku") - end - - def load_divs_library - require 'maruku/ext/div' - STDERR.puts 'Maruku: Using extended syntax for div elements.' - end - - def load_blahtext_library - require 'maruku/ext/math' - STDERR.puts "Maruku: Using LaTeX extension. Images in `#{@config['maruku']['png_dir']}`." - - # Switch off MathML output - MaRuKu::Globals[:html_math_output_mathml] = false - MaRuKu::Globals[:html_math_engine] = 'none' - - # Turn on math to PNG support with blahtex - # Resulting PNGs stored in `images/latex` - MaRuKu::Globals[:html_math_output_png] = true - MaRuKu::Globals[:html_png_engine] = @config['maruku']['png_engine'] - MaRuKu::Globals[:html_png_dir] = @config['maruku']['png_dir'] - MaRuKu::Globals[:html_png_url] = @config['maruku']['png_url'] - end - - def print_errors_and_fail - print @errors.join - raise MaRuKu::Exception, "MaRuKu encountered problem(s) while converting your markup." - end - - def convert(content) - converted = Maruku.new(content, :error_stream => @errors).to_html.strip - print_errors_and_fail unless @errors.empty? - converted - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/markdown/rdiscount_parser.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/markdown/rdiscount_parser.rb deleted file mode 100644 index 0c8634e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/markdown/rdiscount_parser.rb +++ /dev/null @@ -1,33 +0,0 @@ -module Jekyll - module Converters - class Markdown - class RDiscountParser - def initialize(config) - Jekyll::Deprecator.gracefully_require "rdiscount" - @config = config - @rdiscount_extensions = @config['rdiscount']['extensions'].map { |e| e.to_sym } - end - - def convert(content) - rd = RDiscount.new(content, *@rdiscount_extensions) - html = rd.to_html - if @config['rdiscount']['toc_token'] - html = replace_generated_toc(rd, html, @config['rdiscount']['toc_token']) - end - html - end - - private - def replace_generated_toc(rd, html, toc_token) - if rd.generate_toc && html.include?(toc_token) - utf8_toc = rd.toc_content - utf8_toc.force_encoding('utf-8') if utf8_toc.respond_to?(:force_encoding) - html.gsub(toc_token, utf8_toc) - else - html - end - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/markdown/redcarpet_parser.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/markdown/redcarpet_parser.rb deleted file mode 100644 index 468069e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/markdown/redcarpet_parser.rb +++ /dev/null @@ -1,103 +0,0 @@ -module Jekyll - module Converters - class Markdown - class RedcarpetParser - - module CommonMethods - def add_code_tags(code, lang) - code = code.to_s - code = code.sub(/
/, "
")
-            code = code.sub(/<\/pre>/,"
") - end - end - - module WithPygments - include CommonMethods - def block_code(code, lang) - Jekyll::Deprecator.gracefully_require("pygments") - lang = lang && lang.split.first || "text" - add_code_tags( - Pygments.highlight(code, :lexer => lang, :options => { :encoding => 'utf-8' }), - lang - ) - end - end - - module WithoutHighlighting - require 'cgi' - - include CommonMethods - - def code_wrap(code) - "
#{CGI::escapeHTML(code)}
" - end - - def block_code(code, lang) - lang = lang && lang.split.first || "text" - add_code_tags(code_wrap(code), lang) - end - end - - module WithRouge - def block_code(code, lang) - code = "
#{super}
" - - output = "
" - output << add_code_tags(code, lang) - output << "
" - end - - protected - def rouge_formatter(lexer) - Rouge::Formatters::HTML.new(:wrap => false) - end - end - - - def initialize(config) - Deprecator.gracefully_require("redcarpet") - @config = config - @redcarpet_extensions = {} - @config['redcarpet']['extensions'].each { |e| @redcarpet_extensions[e.to_sym] = true } - - @renderer ||= class_with_proper_highlighter(@config['highlighter']) - end - - def class_with_proper_highlighter(highlighter) - case highlighter - when "pygments" - Class.new(Redcarpet::Render::HTML) do - include WithPygments - end - when "rouge" - Class.new(Redcarpet::Render::HTML) do - Jekyll::Deprecator.gracefully_require(%w[ - rouge - rouge/plugins/redcarpet - ]) - - if Rouge.version < '1.3.0' - abort "Please install Rouge 1.3.0 or greater and try running Jekyll again." - end - - include Rouge::Plugins::Redcarpet - include CommonMethods - include WithRouge - end - else - Class.new(Redcarpet::Render::HTML) do - include WithoutHighlighting - end - end - end - - def convert(content) - @redcarpet_extensions[:fenced_code_blocks] = !@redcarpet_extensions[:no_fenced_code_blocks] - @renderer.send :include, Redcarpet::Render::SmartyPants if @redcarpet_extensions[:smart] - markdown = Redcarpet::Markdown.new(@renderer.new(@redcarpet_extensions), @redcarpet_extensions) - markdown.render(content) - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/textile.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/textile.rb deleted file mode 100644 index c8137a3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/converters/textile.rb +++ /dev/null @@ -1,56 +0,0 @@ -module Jekyll - module Converters - class Textile < Converter - safe true - - highlighter_prefix '' - highlighter_suffix '' - - def setup - return if @setup - require 'redcloth' - @setup = true - rescue LoadError - STDERR.puts 'You are missing a library required for Textile. Please run:' - STDERR.puts ' $ [sudo] gem install RedCloth' - raise Errors::FatalException.new("Missing dependency: RedCloth") - end - - def extname_matches_regexp - @extname_matches_regexp ||= Regexp.new( - '(' + @config['textile_ext'].gsub(',','|') +')$', - Regexp::IGNORECASE - ) - end - - def matches(ext) - ext =~ extname_matches_regexp - end - - def output_ext(ext) - ".html" - end - - def convert(content) - setup - - # Shortcut if config doesn't contain RedCloth section - return RedCloth.new(content).to_html if @config['redcloth'].nil? - - # List of attributes defined on RedCloth - # (from https://github.com/jgarber/redcloth/blob/master/lib/redcloth/textile_doc.rb) - attrs = ['filter_classes', 'filter_html', 'filter_ids', 'filter_styles', - 'hard_breaks', 'lite_mode', 'no_span_caps', 'sanitize_html'] - - r = RedCloth.new(content) - - # Set attributes in r if they are NOT nil in the config - attrs.each do |attr| - r.instance_variable_set("@#{attr}".to_sym, @config['redcloth'][attr]) unless @config['redcloth'][attr].nil? - end - - r.to_html - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/convertible.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/convertible.rb deleted file mode 100644 index 4b21a66..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/convertible.rb +++ /dev/null @@ -1,268 +0,0 @@ -# encoding: UTF-8 - -require 'set' - -# Convertible provides methods for converting a pagelike item -# from a certain type of markup into actual content -# -# Requires -# self.site -> Jekyll::Site -# self.content -# self.content= -# self.data= -# self.ext= -# self.output= -# self.name -# self.path -# self.type -> :page, :post or :draft - -module Jekyll - module Convertible - # Returns the contents as a String. - def to_s - content || '' - end - - # Whether the file is published or not, as indicated in YAML front-matter - def published? - !(data.key?('published') && data['published'] == false) - end - - # Returns merged option hash for File.read of self.site (if exists) - # and a given param - def merged_file_read_opts(opts) - (site ? site.file_read_opts : {}).merge(opts) - end - - # Read the YAML frontmatter. - # - # base - The String path to the dir containing the file. - # name - The String filename of the file. - # opts - optional parameter to File.read, default at site configs - # - # Returns nothing. - def read_yaml(base, name, opts = {}) - begin - self.content = File.read(site.in_source_dir(base, name), - merged_file_read_opts(opts)) - if content =~ /\A(---\s*\n.*?\n?)^((---|\.\.\.)\s*$\n?)/m - self.content = $POSTMATCH - self.data = SafeYAML.load($1) - end - rescue SyntaxError => e - Jekyll.logger.warn "YAML Exception reading #{File.join(base, name)}: #{e.message}" - rescue Exception => e - Jekyll.logger.warn "Error reading file #{File.join(base, name)}: #{e.message}" - end - - self.data ||= {} - end - - # Transform the contents based on the content type. - # - # Returns the transformed contents. - def transform - converters.reduce(content) do |output, converter| - begin - converter.convert output - rescue => e - Jekyll.logger.error "Conversion error:", "#{converter.class} encountered an error while converting '#{path}':" - Jekyll.logger.error("", e.to_s) - raise e - end - end - end - - # Determine the extension depending on content_type. - # - # Returns the String extension for the output file. - # e.g. ".html" for an HTML output file. - def output_ext - if converters.all? { |c| c.is_a?(Jekyll::Converters::Identity) } - ext - else - converters.map { |c| - c.output_ext(ext) unless c.is_a?(Jekyll::Converters::Identity) - }.compact.last - end - end - - # Determine which converter to use based on this convertible's - # extension. - # - # Returns the Converter instance. - def converters - @converters ||= site.converters.select { |c| c.matches(ext) }.sort - end - - # Render Liquid in the content - # - # content - the raw Liquid content to render - # payload - the payload for Liquid - # info - the info for Liquid - # - # Returns the converted content - def render_liquid(content, payload, info, path = nil) - Liquid::Template.parse(content).render!(payload, info) - rescue Tags::IncludeTagError => e - Jekyll.logger.error "Liquid Exception:", "#{e.message} in #{e.path}, included in #{path || self.path}" - raise e - rescue Exception => e - Jekyll.logger.error "Liquid Exception:", "#{e.message} in #{path || self.path}" - raise e - end - - # Convert this Convertible's data to a Hash suitable for use by Liquid. - # - # Returns the Hash representation of this Convertible. - def to_liquid(attrs = nil) - further_data = Hash[(attrs || self.class::ATTRIBUTES_FOR_LIQUID).map { |attribute| - [attribute, send(attribute)] - }] - - defaults = site.frontmatter_defaults.all(relative_path, type) - Utils.deep_merge_hashes defaults, Utils.deep_merge_hashes(data, further_data) - end - - # The type of a document, - # i.e., its classname downcase'd and to_sym'd. - # - # Returns the type of self. - def type - if is_a?(Draft) - :drafts - elsif is_a?(Post) - :posts - elsif is_a?(Page) - :pages - end - end - - # Determine whether the document is an asset file. - # Asset files include CoffeeScript files and Sass/SCSS files. - # - # Returns true if the extname belongs to the set of extensions - # that asset files use. - def asset_file? - sass_file? || coffeescript_file? - end - - # Determine whether the document is a Sass file. - # - # Returns true if extname == .sass or .scss, false otherwise. - def sass_file? - %w[.sass .scss].include?(ext) - end - - # Determine whether the document is a CoffeeScript file. - # - # Returns true if extname == .coffee, false otherwise. - def coffeescript_file? - '.coffee'.eql?(ext) - end - - # Determine whether the file should be rendered with Liquid. - # - # Always returns true. - def render_with_liquid? - true - end - - # Determine whether the file should be placed into layouts. - # - # Returns false if the document is an asset file. - def place_in_layout? - !asset_file? - end - - # Checks if the layout specified in the document actually exists - # - # layout - the layout to check - # - # Returns true if the layout is invalid, false if otherwise - def invalid_layout?(layout) - !data["layout"].nil? && layout.nil? && !(self.is_a? Jekyll::Excerpt) - end - - # Recursively render layouts - # - # layouts - a list of the layouts - # payload - the payload for Liquid - # info - the info for Liquid - # - # Returns nothing - def render_all_layouts(layouts, payload, info) - # recursively render layouts - layout = layouts[data["layout"]] - - Jekyll.logger.warn("Build Warning:", "Layout '#{data["layout"]}' requested in #{path} does not exist.") if invalid_layout? layout - - used = Set.new([layout]) - - while layout - payload = Utils.deep_merge_hashes(payload, {"content" => output, "page" => layout.data}) - - self.output = render_liquid(layout.content, - payload, - info, - File.join(site.config['layouts'], layout.name)) - - if layout = layouts[layout.data["layout"]] - if used.include?(layout) - layout = nil # avoid recursive chain - else - used << layout - end - end - end - end - - # Add any necessary layouts to this convertible document. - # - # payload - The site payload Hash. - # layouts - A Hash of {"name" => "layout"}. - # - # Returns nothing. - def do_layout(payload, layouts) - info = { :filters => [Jekyll::Filters], :registers => { :site => site, :page => payload['page'] } } - - # render and transform content (this becomes the final content of the object) - payload["highlighter_prefix"] = converters.first.highlighter_prefix - payload["highlighter_suffix"] = converters.first.highlighter_suffix - - self.content = render_liquid(content, payload, info) if render_with_liquid? - self.content = transform - - # output keeps track of what will finally be written - self.output = content - - render_all_layouts(layouts, payload, info) if place_in_layout? - end - - # Write the generated page file to the destination directory. - # - # dest - The String path to the destination dir. - # - # Returns nothing. - def write(dest) - path = destination(dest) - FileUtils.mkdir_p(File.dirname(path)) - File.open(path, 'wb') do |f| - f.write(output) - end - end - - # Accessor for data properties by Liquid. - # - # property - The String name of the property to retrieve. - # - # Returns the String value or nil if the property isn't included. - def [](property) - if self.class::ATTRIBUTES_FOR_LIQUID.include?(property) - send(property) - else - data[property] - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/deprecator.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/deprecator.rb deleted file mode 100644 index 8e4daf9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/deprecator.rb +++ /dev/null @@ -1,61 +0,0 @@ -module Jekyll - module Deprecator - extend self - - def process(args) - no_subcommand(args) - arg_is_present? args, "--server", "The --server command has been replaced by the \ - 'serve' subcommand." - arg_is_present? args, "--no-server", "To build Jekyll without launching a server, \ - use the 'build' subcommand." - arg_is_present? args, "--auto", "The switch '--auto' has been replaced with '--watch'." - arg_is_present? args, "--no-auto", "To disable auto-replication, simply leave off \ - the '--watch' switch." - arg_is_present? args, "--pygments", "The 'pygments'settings has been removed in \ - favour of 'highlighter'." - arg_is_present? args, "--paginate", "The 'paginate' setting can only be set in your \ - config files." - arg_is_present? args, "--url", "The 'url' setting can only be set in your config files." - end - - def no_subcommand(args) - if args.size > 0 && args.first =~ /^--/ && !%w[--help --version].include?(args.first) - deprecation_message "Jekyll now uses subcommands instead of just \ - switches. Run `jekyll --help' to find out more." - end - end - - def arg_is_present?(args, deprecated_argument, message) - if args.include?(deprecated_argument) - deprecation_message(message) - end - end - - def deprecation_message(message) - Jekyll.logger.error "Deprecation:", message - end - - def defaults_deprecate_type(old, current) - Jekyll.logger.warn "Defaults:", "The '#{old}' type has become '#{current}'." - Jekyll.logger.warn "Defaults:", "Please update your front-matter defaults to use 'type: #{current}'." - end - - def gracefully_require(gem_name) - Array(gem_name).each do |name| - begin - require name - rescue LoadError => e - Jekyll.logger.error "Dependency Error:", <<-MSG - Yikes! It looks like you don't have #{name} or one of its dependencies installed. - In order to use Jekyll as currently configured, you'll need to install this gem. - - The full error message from Ruby is: '#{e.message}' - - If you run into trouble, you can find helpful resources at http://jekyllrb.com/help/! -MSG - raise Errors::MissingDependencyException.new(name) - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/document.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/document.rb deleted file mode 100644 index 003c04e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/document.rb +++ /dev/null @@ -1,280 +0,0 @@ -# encoding: UTF-8 - -module Jekyll - class Document - include Comparable - - attr_reader :path, :site, :extname - attr_accessor :content, :collection, :output - - # Create a new Document. - # - # site - the Jekyll::Site instance to which this Document belongs - # path - the path to the file - # - # Returns nothing. - def initialize(path, relations) - @site = relations[:site] - @path = path - @extname = File.extname(path) - @collection = relations[:collection] - @has_yaml_header = nil - end - - # Fetch the Document's data. - # - # Returns a Hash containing the data. An empty hash is returned if - # no data was read. - def data - @data ||= Hash.new - end - - # The path to the document, relative to the site source. - # - # Returns a String path which represents the relative path - # from the site source to this document - def relative_path - @relative_path ||= Pathname.new(path).relative_path_from(Pathname.new(site.source)).to_s - end - - # The base filename of the document, without the file extname. - # - # Returns the basename without the file extname. - def basename_without_ext - @basename_without_ext ||= File.basename(path, '.*') - end - - # The base filename of the document. - # - # Returns the base filename of the document. - def basename - @basename ||= File.basename(path) - end - - # Produces a "cleaned" relative path. - # The "cleaned" relative path is the relative path without the extname - # and with the collection's directory removed as well. - # This method is useful when building the URL of the document. - # - # Examples: - # When relative_path is "_methods/site/generate.md": - # cleaned_relative_path - # # => "/site/generate" - # - # Returns the cleaned relative path of the document. - def cleaned_relative_path - @cleaned_relative_path ||= - relative_path[0 .. -extname.length - 1].sub(collection.relative_directory, "") - end - - # Determine whether the document is a YAML file. - # - # Returns true if the extname is either .yml or .yaml, false otherwise. - def yaml_file? - %w[.yaml .yml].include?(extname) - end - - # Determine whether the document is an asset file. - # Asset files include CoffeeScript files and Sass/SCSS files. - # - # Returns true if the extname belongs to the set of extensions - # that asset files use. - def asset_file? - sass_file? || coffeescript_file? - end - - # Determine whether the document is a Sass file. - # - # Returns true if extname == .sass or .scss, false otherwise. - def sass_file? - %w[.sass .scss].include?(extname) - end - - # Determine whether the document is a CoffeeScript file. - # - # Returns true if extname == .coffee, false otherwise. - def coffeescript_file? - '.coffee'.eql?(extname) - end - - # Determine whether the file should be rendered with Liquid. - # - # Returns false if the document is either an asset file or a yaml file, - # true otherwise. - def render_with_liquid? - !(coffeescript_file? || yaml_file?) - end - - # Determine whether the file should be placed into layouts. - # - # Returns false if the document is either an asset file or a yaml file, - # true otherwise. - def place_in_layout? - !(asset_file? || yaml_file?) - end - - # The URL template where the document would be accessible. - # - # Returns the URL template for the document. - def url_template - collection.url_template - end - - # Construct a Hash of key-value pairs which contain a mapping between - # a key in the URL template and the corresponding value for this document. - # - # Returns the Hash of key-value pairs for replacement in the URL. - def url_placeholders - { - collection: collection.label, - path: cleaned_relative_path, - output_ext: Jekyll::Renderer.new(site, self).output_ext, - name: Utils.slugify(basename_without_ext), - title: Utils.slugify(data['title']) || Utils.slugify(basename_without_ext) - } - end - - # The permalink for this Document. - # Permalink is set via the data Hash. - # - # Returns the permalink or nil if no permalink was set in the data. - def permalink - data && data.is_a?(Hash) && data['permalink'] - end - - # The computed URL for the document. See `Jekyll::URL#to_s` for more details. - # - # Returns the computed URL for the document. - def url - @url = URL.new({ - template: url_template, - placeholders: url_placeholders, - permalink: permalink - }).to_s - end - - # The full path to the output file. - # - # base_directory - the base path of the output directory - # - # Returns the full path to the output file of this document. - def destination(base_directory) - dest = site.in_dest_dir(base_directory) - path = site.in_dest_dir(dest, url) - path = File.join(path, "index.html") if url =~ /\/$/ - path - end - - # Write the generated Document file to the destination directory. - # - # dest - The String path to the destination dir. - # - # Returns nothing. - def write(dest) - path = destination(dest) - FileUtils.mkdir_p(File.dirname(path)) - File.open(path, 'wb') do |f| - f.write(output) - end - end - - # Returns merged option hash for File.read of self.site (if exists) - # and a given param - # - # opts - override options - # - # Return the file read options hash. - def merged_file_read_opts(opts) - site ? site.file_read_opts.merge(opts) : opts - end - - # Whether the file is published or not, as indicated in YAML front-matter - # - # Returns true if the 'published' key is specified in the YAML front-matter and not `false`. - def published? - !(data.key?('published') && data['published'] == false) - end - - # Read in the file and assign the content and data based on the file contents. - # Merge the frontmatter of the file with the frontmatter default - # values - # - # Returns nothing. - def read(opts = {}) - if yaml_file? - @data = SafeYAML.load_file(path) - else - begin - defaults = @site.frontmatter_defaults.all(url, collection.label.to_sym) - unless defaults.empty? - @data = defaults - end - @content = File.read(path, merged_file_read_opts(opts)) - if content =~ /\A(---\s*\n.*?\n?)^(---\s*$\n?)/m - @content = $POSTMATCH - data_file = SafeYAML.load($1) - unless data_file.nil? - @data = Utils.deep_merge_hashes(defaults, data_file) - end - end - rescue SyntaxError => e - puts "YAML Exception reading #{path}: #{e.message}" - rescue Exception => e - puts "Error reading file #{path}: #{e.message}" - end - end - end - - # Create a Liquid-understandable version of this Document. - # - # Returns a Hash representing this Document's data. - def to_liquid - if data.is_a?(Hash) - Utils.deep_merge_hashes data, { - "output" => output, - "content" => content, - "path" => path, - "relative_path" => relative_path, - "url" => url, - "collection" => collection.label - } - else - data - end - end - - # The inspect string for this document. - # Includes the relative path and the collection label. - # - # Returns the inspect string for this document. - def inspect - "#" - end - - # The string representation for this document. - # - # Returns the content of the document - def to_s - content || '' - end - - # Compare this document against another document. - # Comparison is a comparison between the 2 paths of the documents. - # - # Returns -1, 0, +1 or nil depending on whether this doc's path is less than, - # equal or greater than the other doc's path. See String#<=> for more details. - def <=>(anotherDocument) - path <=> anotherDocument.path - end - - # Determine whether this document should be written. - # Based on the Collection to which it belongs. - # - # True if the document has a collection and if that collection's #write? - # method returns true, otherwise false. - def write? - collection && collection.write? - end - - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/draft.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/draft.rb deleted file mode 100644 index 16daefd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/draft.rb +++ /dev/null @@ -1,40 +0,0 @@ -module Jekyll - - class Draft < Post - - # Valid post name regex (no date) - MATCHER = /^(.*)(\.[^.]+)$/ - - # Draft name validator. Draft filenames must be like: - # my-awesome-post.textile - # - # Returns true if valid, false if not. - def self.valid?(name) - name =~ MATCHER - end - - # Get the full path to the directory containing the draft files - def containing_dir(dir) - site.in_source_dir(dir, '_drafts') - end - - # The path to the draft source file, relative to the site source - def relative_path - File.join(@dir, '_drafts', @name) - end - - # Extract information from the post filename. - # - # name - The String filename of the post file. - # - # Returns nothing. - def process(name) - m, slug, ext = *name.match(MATCHER) - self.date = File.mtime(File.join(@base, name)) - self.slug = slug - self.ext = ext - end - - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/entry_filter.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/entry_filter.rb deleted file mode 100644 index e427018..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/entry_filter.rb +++ /dev/null @@ -1,72 +0,0 @@ -module Jekyll - class EntryFilter - SPECIAL_LEADING_CHARACTERS = ['.', '_', '#'].freeze - - attr_reader :site - - def initialize(site, base_directory = nil) - @site = site - @base_directory = derive_base_directory(@site, base_directory.to_s.dup) - end - - def base_directory - @base_directory.to_s - end - - def derive_base_directory(site, base_dir) - if base_dir.start_with?(site.source) - base_dir[site.source] = "" - end - base_dir - end - - def relative_to_source(entry) - File.join(base_directory, entry) - end - - def filter(entries) - entries.reject do |e| - unless included?(e) - special?(e) || backup?(e) || excluded?(e) || symlink?(e) - end - end - end - - def included?(entry) - glob_include?(site.include, entry) - end - - def special?(entry) - SPECIAL_LEADING_CHARACTERS.include?(entry[0..0]) || - SPECIAL_LEADING_CHARACTERS.include?(File.basename(entry)[0..0]) - end - - def backup?(entry) - entry[-1..-1] == '~' - end - - def excluded?(entry) - excluded = glob_include?(site.exclude, relative_to_source(entry)) - Jekyll.logger.debug "EntryFilter:", "excluded?(#{relative_to_source(entry)}) ==> #{excluded}" - excluded - end - - def symlink?(entry) - File.symlink?(entry) && site.safe - end - - def ensure_leading_slash(path) - path[0..0] == "/" ? path : "/#{path}" - end - - # Returns true if path matches against any glob pattern. - # Look for more detail about glob pattern in method File::fnmatch. - def glob_include?(enum, e) - entry = ensure_leading_slash(e) - enum.any? do |exp| - item = ensure_leading_slash(exp) - File.fnmatch?(item, entry) || entry.start_with?(item) - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/errors.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/errors.rb deleted file mode 100644 index dc5238a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/errors.rb +++ /dev/null @@ -1,9 +0,0 @@ -module Jekyll - module Errors - class FatalException < RuntimeError - end - - class MissingDependencyException < FatalException - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/excerpt.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/excerpt.rb deleted file mode 100644 index 41d4976..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/excerpt.rb +++ /dev/null @@ -1,114 +0,0 @@ -require 'forwardable' - -module Jekyll - class Excerpt - include Convertible - extend Forwardable - - attr_accessor :post - attr_accessor :content, :output, :ext - - def_delegator :@post, :site, :site - def_delegator :@post, :name, :name - def_delegator :@post, :ext, :ext - - # Initialize this Post instance. - # - # site - The Site. - # base - The String path to the dir containing the post file. - # name - The String filename of the post file. - # - # Returns the new Post. - def initialize(post) - self.post = post - self.content = extract_excerpt(post.content) - end - - def to_liquid - post.to_liquid(post.class::EXCERPT_ATTRIBUTES_FOR_LIQUID) - end - - # Fetch YAML front-matter data from related post, without layout key - # - # Returns Hash of post data - def data - @data ||= post.data.dup - @data.delete("layout") - @data - end - - # 'Path' of the excerpt. - # - # Returns the path for the post this excerpt belongs to with #excerpt appended - def path - File.join(post.path, "#excerpt") - end - - # Check if excerpt includes a string - # - # Returns true if the string passed in - def include?(something) - (output && output.include?(something)) || content.include?(something) - end - - # The UID for this post (useful in feeds). - # e.g. /2008/11/05/my-awesome-post - # - # Returns the String UID. - def id - File.join(post.dir, post.slug, "#excerpt") - end - - def to_s - output || content - end - - # Returns the shorthand String identifier of this Post. - def inspect - "" - end - - protected - - # Internal: Extract excerpt from the content - # - # By default excerpt is your first paragraph of a post: everything before - # the first two new lines: - # - # --- - # title: Example - # --- - # - # First paragraph with [link][1]. - # - # Second paragraph. - # - # [1]: http://example.com/ - # - # This is fairly good option for Markdown and Textile files. But might cause - # problems for HTML posts (which is quite unusual for Jekyll). If default - # excerpt delimiter is not good for you, you might want to set your own via - # configuration option `excerpt_separator`. For example, following is a good - # alternative for HTML posts: - # - # # file: _config.yml - # excerpt_separator: "" - # - # Notice that all markdown-style link references will be appended to the - # excerpt. So the example post above will have this excerpt source: - # - # First paragraph with [link][1]. - # - # [1]: http://example.com/ - # - # Excerpts are rendered same time as content is rendered. - # - # Returns excerpt String - def extract_excerpt(post_content) - separator = site.config['excerpt_separator'] - head, _, tail = post_content.to_s.partition(separator) - - "" << head << "\n\n" << tail.scan(/^\[[^\]]+\]:.+$/).join("\n") - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/filters.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/filters.rb deleted file mode 100644 index f92c02b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/filters.rb +++ /dev/null @@ -1,351 +0,0 @@ -require 'uri' -require 'json' - -module Jekyll - module Filters - # Convert a Textile string into HTML output. - # - # input - The Textile String to convert. - # - # Returns the HTML formatted String. - def textilize(input) - site = @context.registers[:site] - converter = site.getConverterImpl(Jekyll::Converters::Textile) - converter.convert(input) - end - - # Convert a Markdown string into HTML output. - # - # input - The Markdown String to convert. - # - # Returns the HTML formatted String. - def markdownify(input) - site = @context.registers[:site] - converter = site.getConverterImpl(Jekyll::Converters::Markdown) - converter.convert(input) - end - - # Convert a Sass string into CSS output. - # - # input - The Sass String to convert. - # - # Returns the CSS formatted String. - def sassify(input) - site = @context.registers[:site] - converter = site.getConverterImpl(Jekyll::Converters::Sass) - converter.convert(input) - end - - # Convert a Scss string into CSS output. - # - # input - The Scss String to convert. - # - # Returns the CSS formatted String. - def scssify(input) - site = @context.registers[:site] - converter = site.getConverterImpl(Jekyll::Converters::Scss) - converter.convert(input) - end - - # Slugify a filename or title. - # - # input - The filename or title to slugify. - # - # Returns the given filename or title as a lowercase String, with every - # sequence of spaces and non-alphanumeric characters replaced with a - # hyphen. - def slugify(input) - Utils.slugify(input) - end - - # Format a date in short format e.g. "27 Jan 2011". - # - # date - the Time to format. - # - # Returns the formatting String. - def date_to_string(date) - time(date).strftime("%d %b %Y") - end - - # Format a date in long format e.g. "27 January 2011". - # - # date - The Time to format. - # - # Returns the formatted String. - def date_to_long_string(date) - time(date).strftime("%d %B %Y") - end - - # Format a date for use in XML. - # - # date - The Time to format. - # - # Examples - # - # date_to_xmlschema(Time.now) - # # => "2011-04-24T20:34:46+08:00" - # - # Returns the formatted String. - def date_to_xmlschema(date) - time(date).xmlschema - end - - # Format a date according to RFC-822 - # - # date - The Time to format. - # - # Examples - # - # date_to_rfc822(Time.now) - # # => "Sun, 24 Apr 2011 12:34:46 +0000" - # - # Returns the formatted String. - def date_to_rfc822(date) - time(date).rfc822 - end - - # XML escape a string for use. Replaces any special characters with - # appropriate HTML entity replacements. - # - # input - The String to escape. - # - # Examples - # - # xml_escape('foo "bar" ') - # # => "foo "bar" <baz>" - # - # Returns the escaped String. - def xml_escape(input) - CGI.escapeHTML(input.to_s) - end - - # CGI escape a string for use in a URL. Replaces any special characters - # with appropriate %XX replacements. - # - # input - The String to escape. - # - # Examples - # - # cgi_escape('foo,bar;baz?') - # # => "foo%2Cbar%3Bbaz%3F" - # - # Returns the escaped String. - def cgi_escape(input) - CGI::escape(input) - end - - # URI escape a string. - # - # input - The String to escape. - # - # Examples - # - # uri_escape('foo, bar \\baz?') - # # => "foo,%20bar%20%5Cbaz?" - # - # Returns the escaped String. - def uri_escape(input) - URI.escape(input) - end - - # Count the number of words in the input string. - # - # input - The String on which to operate. - # - # Returns the Integer word count. - def number_of_words(input) - input.split.length - end - - # Join an array of things into a string by separating with commas and the - # word "and" for the last one. - # - # array - The Array of Strings to join. - # - # Examples - # - # array_to_sentence_string(["apples", "oranges", "grapes"]) - # # => "apples, oranges, and grapes" - # - # Returns the formatted String. - def array_to_sentence_string(array) - connector = "and" - case array.length - when 0 - "" - when 1 - array[0].to_s - when 2 - "#{array[0]} #{connector} #{array[1]}" - else - "#{array[0...-1].join(', ')}, #{connector} #{array[-1]}" - end - end - - # Convert the input into json string - # - # input - The Array or Hash to be converted - # - # Returns the converted json string - def jsonify(input) - as_liquid(input).to_json - end - - # Group an array of items by a property - # - # input - the inputted Enumerable - # property - the property - # - # Returns an array of Hashes, each looking something like this: - # {"name" => "larry" - # "items" => [...] } # all the items where `property` == "larry" - def group_by(input, property) - if groupable?(input) - input.group_by do |item| - item_property(item, property).to_s - end.inject([]) do |memo, i| - memo << {"name" => i.first, "items" => i.last} - end - else - input - end - end - - # Filter an array of objects - # - # input - the object array - # property - property within each object to filter by - # value - desired value - # - # Returns the filtered array of objects - def where(input, property, value) - return input unless input.is_a?(Enumerable) - input = input.values if input.is_a?(Hash) - input.select { |object| item_property(object, property) == value } - end - - # Sort an array of objects - # - # input - the object array - # property - property within each object to filter by - # nils ('first' | 'last') - nils appear before or after non-nil values - # - # Returns the filtered array of objects - def sort(input, property = nil, nils = "first") - if property.nil? - input.sort - else - case - when nils == "first" - order = - 1 - when nils == "last" - order = + 1 - else - raise ArgumentError.new("Invalid nils order: " + - "'#{nils}' is not a valid nils order. It must be 'first' or 'last'.") - end - - input.sort { |apple, orange| - apple_property = item_property(apple, property) - orange_property = item_property(orange, property) - - if !apple_property.nil? && orange_property.nil? - - order - elsif apple_property.nil? && !orange_property.nil? - + order - else - apple_property <=> orange_property - end - } - end - end - - def pop(array, input = 1) - return array unless array.is_a?(Array) - new_ary = array.dup - new_ary.pop(input.to_i || 1) - new_ary - end - - def push(array, input) - return array unless array.is_a?(Array) - new_ary = array.dup - new_ary.push(input) - new_ary - end - - def shift(array, input = 1) - return array unless array.is_a?(Array) - new_ary = array.dup - new_ary.shift(input.to_i || 1) - new_ary - end - - def unshift(array, input) - return array unless array.is_a?(Array) - new_ary = array.dup - new_ary.unshift(input) - new_ary - end - - # Convert an object into its String representation for debugging - # - # input - The Object to be converted - # - # Returns a String representation of the object. - def inspect(input) - CGI.escapeHTML(input.inspect) - end - - private - def time(input) - case input - when Time - input - when String - Time.parse(input) rescue Time.at(input.to_i) - when Numeric - Time.at(input) - else - Jekyll.logger.error "Invalid Date:", "'#{input}' is not a valid datetime." - exit(1) - end - end - - def groupable?(element) - element.respond_to?(:group_by) - end - - def item_property(item, property) - if item.respond_to?(:to_liquid) - item.to_liquid[property.to_s] - elsif item.respond_to?(:data) - item.data[property.to_s] - else - item[property.to_s] - end - end - - def as_liquid(item) - case item - when Hash - pairs = item.map { |k, v| as_liquid([k, v]) } - Hash[pairs] - when Array - item.map{ |i| as_liquid(i) } - else - if item.respond_to?(:to_liquid) - liquidated = item.to_liquid - # prevent infinite recursion for simple types (which return `self`) - if liquidated == item - item - else - as_liquid(liquidated) - end - else - item - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/frontmatter_defaults.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/frontmatter_defaults.rb deleted file mode 100644 index 8355fa9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/frontmatter_defaults.rb +++ /dev/null @@ -1,180 +0,0 @@ -module Jekyll - # This class handles custom defaults for YAML frontmatter settings. - # These are set in _config.yml and apply both to internal use (e.g. layout) - # and the data available to liquid. - # - # It is exposed via the frontmatter_defaults method on the site class. - class FrontmatterDefaults - # Initializes a new instance. - def initialize(site) - @site = site - end - - def update_deprecated_types(set) - return set unless set.key?('scope') && set['scope'].key?('type') - - set['scope']['type'] = case set['scope']['type'] - when 'page' - Deprecator.defaults_deprecate_type('page', 'pages') - 'pages' - when 'post' - Deprecator.defaults_deprecate_type('post', 'posts') - 'posts' - when 'draft' - Deprecator.defaults_deprecate_type('draft', 'drafts') - 'drafts' - else - set['scope']['type'] - end - - set - end - - # Finds a default value for a given setting, filtered by path and type - # - # path - the path (relative to the source) of the page, post or :draft the default is used in - # type - a symbol indicating whether a :page, a :post or a :draft calls this method - # - # Returns the default value or nil if none was found - def find(path, type, setting) - value = nil - old_scope = nil - - matching_sets(path, type).each do |set| - if set['values'].key?(setting) && has_precedence?(old_scope, set['scope']) - value = set['values'][setting] - old_scope = set['scope'] - end - end - value - end - - # Collects a hash with all default values for a page or post - # - # path - the relative path of the page or post - # type - a symbol indicating the type (:post, :page or :draft) - # - # Returns a hash with all default values (an empty hash if there are none) - def all(path, type) - defaults = {} - old_scope = nil - matching_sets(path, type).each do |set| - if has_precedence?(old_scope, set['scope']) - defaults = Utils.deep_merge_hashes(defaults, set['values']) - old_scope = set['scope'] - else - defaults = Utils.deep_merge_hashes(set['values'], defaults) - end - end - defaults - end - - private - - # Checks if a given default setting scope matches the given path and type - # - # scope - the hash indicating the scope, as defined in _config.yml - # path - the path to check for - # type - the type (:post, :page or :draft) to check for - # - # Returns true if the scope applies to the given path and type - def applies?(scope, path, type) - applies_path?(scope, path) && applies_type?(scope, type) - end - - def applies_path?(scope, path) - return true if !scope.has_key?('path') || scope['path'].empty? - - scope_path = Pathname.new(scope['path']) - Pathname.new(sanitize_path(path)).ascend do |path| - if path == scope_path - return true - end - end - end - - # Determines whether the scope applies to type. - # The scope applies to the type if: - # 1. no 'type' is specified - # 2. the 'type' in the scope is the same as the type asked about - # - # scope - the Hash defaults set being asked about application - # type - the type of the document being processed / asked about - # its defaults. - # - # Returns true if either of the above conditions are satisfied, - # otherwise returns false - def applies_type?(scope, type) - !scope.key?('type') || scope['type'].eql?(type.to_s) - end - - # Checks if a given set of default values is valid - # - # set - the default value hash, as defined in _config.yml - # - # Returns true if the set is valid and can be used in this class - def valid?(set) - set.is_a?(Hash) && set['values'].is_a?(Hash) - end - - # Determines if a new scope has precedence over an old one - # - # old_scope - the old scope hash, or nil if there's none - # new_scope - the new scope hash - # - # Returns true if the new scope has precedence over the older - def has_precedence?(old_scope, new_scope) - return true if old_scope.nil? - - new_path = sanitize_path(new_scope['path']) - old_path = sanitize_path(old_scope['path']) - - if new_path.length != old_path.length - new_path.length >= old_path.length - elsif new_scope.key? 'type' - true - else - !old_scope.key? 'type' - end - end - - # Collects a list of sets that match the given path and type - # - # Returns an array of hashes - def matching_sets(path, type) - valid_sets.select do |set| - !set.has_key?('scope') || applies?(set['scope'], path, type) - end - end - - # Returns a list of valid sets - # - # This is not cached to allow plugins to modify the configuration - # and have their changes take effect - # - # Returns an array of hashes - def valid_sets - sets = @site.config['defaults'] - return [] unless sets.is_a?(Array) - - sets.map do |set| - if valid?(set) - update_deprecated_types(set) - else - Jekyll.logger.warn "Defaults:", "An invalid front-matter default set was found:" - Jekyll.logger.warn "#{set}" - nil - end - end.compact - end - - # Sanitizes the given path by removing a leading and addding a trailing slash - def sanitize_path(path) - if path.nil? || path.empty? - "" - else - path.gsub(/\A\//, '').gsub(/([^\/])\z/, '\1/') - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/generator.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/generator.rb deleted file mode 100644 index 57973a7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/generator.rb +++ /dev/null @@ -1,4 +0,0 @@ -module Jekyll - class Generator < Plugin - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/layout.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/layout.rb deleted file mode 100644 index 4dde59b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/layout.rb +++ /dev/null @@ -1,45 +0,0 @@ -module Jekyll - class Layout - include Convertible - - # Gets the Site object. - attr_reader :site - - # Gets the name of this layout. - attr_reader :name - - # Gets/Sets the extension of this layout. - attr_accessor :ext - - # Gets/Sets the Hash that holds the metadata for this layout. - attr_accessor :data - - # Gets/Sets the content of this layout. - attr_accessor :content - - # Initialize a new Layout. - # - # site - The Site. - # base - The String path to the source. - # name - The String filename of the post file. - def initialize(site, base, name) - @site = site - @base = base - @name = name - - self.data = {} - - process(name) - read_yaml(base, name) - end - - # Extract information from the layout filename. - # - # name - The String filename of the layout file. - # - # Returns nothing. - def process(name) - self.ext = File.extname(name) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/layout_reader.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/layout_reader.rb deleted file mode 100644 index a8466be..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/layout_reader.rb +++ /dev/null @@ -1,53 +0,0 @@ -module Jekyll - class LayoutReader - attr_reader :site - def initialize(site) - @site = site - @layouts = {} - end - - def read - layout_entries.each do |f| - @layouts[layout_name(f)] = Layout.new(site, layout_directory, f) - end - - @layouts - end - - def layout_directory - @layout_directory ||= (layout_directory_in_cwd || layout_directory_inside_source) - end - - private - - def layout_entries - entries = [] - within(layout_directory) do - entries = EntryFilter.new(site).filter(Dir['**/*.*']) - end - entries - end - - def layout_name(file) - file.split(".")[0..-2].join(".") - end - - def within(directory) - return unless File.exist?(directory) - Dir.chdir(directory) { yield } - end - - def layout_directory_inside_source - site.in_source_dir(site.config['layouts']) - end - - def layout_directory_in_cwd - dir = Jekyll.sanitized_path(Dir.pwd, site.config['layouts']) - if File.directory?(dir) && !site.safe - dir - else - nil - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/liquid_extensions.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/liquid_extensions.rb deleted file mode 100644 index 5ba7dd8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/liquid_extensions.rb +++ /dev/null @@ -1,22 +0,0 @@ -module Jekyll - module LiquidExtensions - - # Lookup a Liquid variable in the given context. - # - # context - the Liquid context in question. - # variable - the variable name, as a string. - # - # Returns the value of the variable in the context - # or the variable name if not found. - def lookup_variable(context, variable) - lookup = context - - variable.split(".").each do |value| - lookup = lookup[value] - end - - lookup || variable - end - - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/log_adapter.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/log_adapter.rb deleted file mode 100644 index 63e23fc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/log_adapter.rb +++ /dev/null @@ -1,102 +0,0 @@ -module Jekyll - class LogAdapter - attr_reader :writer - - LOG_LEVELS = { - :debug => ::Logger::DEBUG, - :info => ::Logger::INFO, - :warn => ::Logger::WARN, - :error => ::Logger::ERROR - } - - # Public: Create a new instance of Jekyll's log writer - # - # writer - Logger compatible instance - # log_level - (optional, symbol) the log level - # - # Returns nothing - def initialize(writer, level = :info) - @writer = writer - self.log_level = level - end - - # Public: Set the log level on the writer - # - # level - (symbol) the log level - # - # Returns nothing - def log_level=(level) - writer.level = LOG_LEVELS.fetch(level) - end - - # Public: Print a jekyll debug message - # - # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc. - # message - the message detail - # - # Returns nothing - def debug(topic, message = nil) - writer.debug(message(topic, message)) - end - - # Public: Print a jekyll message - # - # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc. - # message - the message detail - # - # Returns nothing - def info(topic, message = nil) - writer.info(message(topic, message)) - end - - # Public: Print a jekyll message - # - # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc. - # message - the message detail - # - # Returns nothing - def warn(topic, message = nil) - writer.warn(message(topic, message)) - end - - # Public: Print a jekyll error message - # - # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc. - # message - the message detail - # - # Returns nothing - def error(topic, message = nil) - writer.error(message(topic, message)) - end - - # Public: Print a Jekyll error message and immediately abort the process - # - # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc. - # message - the message detail (can be omitted) - # - # Returns nothing - def abort_with(topic, message = nil) - error(topic, message) - abort - end - - # Internal: Build a Jekyll topic method - # - # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc. - # message - the message detail - # - # Returns the formatted message - def message(topic, message) - formatted_topic(topic) + message.to_s.gsub(/\s+/, ' ') - end - - # Internal: Format the topic - # - # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc. - # - # Returns the formatted topic statement - def formatted_topic(topic) - "#{topic} ".rjust(20) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/mime.types b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/mime.types deleted file mode 100644 index ee7aa44..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/mime.types +++ /dev/null @@ -1,95 +0,0 @@ --# These are the same MIME types that GitHub Pages uses as of 26 January 2014 - -text/html html htm shtml -text/css css -text/xml xml rss xsl xsd -image/gif gif -image/jpeg jpeg jpg -application/x-javascript js -application/atom+xml atom -application/json json geojson topojson - -text/mathml mml -text/plain txt -text/vnd.sun.j2me.app-descriptor jad -text/vnd.wap.wml wml -text/x-component htc -text/cache-manifest manifest appcache -text/coffeescript coffee -text/plain pde -text/plain md markdown -text/vcard vcf vcard - -image/png png -image/svg+xml svg -image/svg+xml svgz -image/tiff tif tiff -image/vnd.wap.wbmp wbmp -image/x-icon ico -image/x-jng jng -image/x-ms-bmp bmp - -application/vnd.ms-fontobject eot -application/x-font-ttf ttf -application/x-font-woff woff -font/opentype otf - -application/java-archive jar ear -application/mac-binhex40 hqx -application/msword doc -application/pdf pdf -application/postscript ps eps ai -application/rdf+xml rdf -application/rtf rtf -application/vnd.apple.pkpass pkpass -application/vnd.ms-excel xls -application/vnd.ms-powerpoint ppt -application/vnd.wap.wmlc wmlc -application/xhtml+xml xhtml -application/x-cocoa cco -application/x-chrome-extension crx -application/x-java-archive-diff jardiff -application/x-java-jnlp-file jnlp -application/x-makeself run -application/x-ms-application application -application/x-ms-manifest manifest -application/x-ms-vsto vsto -application/x-ns-proxy-autoconfig pac -application/x-perl pl pm -application/x-pilot prc pdb -application/x-rar-compressed rar -application/x-redhat-package-manager rpm -application/x-sea sea -application/x-shockwave-flash swf -application/x-stuffit sit -application/x-tcl tcl tk -application/x-web-app-manifest+json webapp -application/x-x509-ca-cert der pem crt -application/x-xpinstall xpi -application/x-zip war -application/zip zip - -application/octet-stream bin exe dll -application/octet-stream deb -application/octet-stream deploy -application/octet-stream dmg -application/octet-stream iso img -application/octet-stream msi msp msm - -audio/midi mid midi kar -audio/mpeg mp3 -audio/x-realaudio ra -audio/ogg ogg - -video/3gpp 3gpp 3gp -video/m4v m4v -video/mp4 mp4 -video/mpeg mpeg mpg -video/ogg ogg ogv -video/quicktime mov -video/webm webm -video/x-flv flv -video/x-mng mng -video/x-ms-asf asx asf -video/x-ms-wmv wmv -video/x-msvideo avi diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/page.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/page.rb deleted file mode 100644 index 98f730b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/page.rb +++ /dev/null @@ -1,167 +0,0 @@ -module Jekyll - class Page - include Convertible - - attr_writer :dir - attr_accessor :site, :pager - attr_accessor :name, :ext, :basename - attr_accessor :data, :content, :output - - # Attributes for Liquid templates - ATTRIBUTES_FOR_LIQUID = %w[ - content - dir - name - path - url - ] - - # Initialize a new Page. - # - # site - The Site object. - # base - The String path to the source. - # dir - The String path between the source and the file. - # name - The String filename of the file. - def initialize(site, base, dir, name) - @site = site - @base = base - @dir = dir - @name = name - - - process(name) - read_yaml(File.join(base, dir), name) - - data.default_proc = proc do |hash, key| - site.frontmatter_defaults.find(File.join(dir, name), type, key) - end - end - - # The generated directory into which the page will be placed - # upon generation. This is derived from the permalink or, if - # permalink is absent, we be '/' - # - # Returns the String destination directory. - def dir - url[-1, 1] == '/' ? url : File.dirname(url) - end - - # The full path and filename of the post. Defined in the YAML of the post - # body. - # - # Returns the String permalink or nil if none has been set. - def permalink - return nil if data.nil? || data['permalink'].nil? - if site.config['relative_permalinks'] - File.join(@dir, data['permalink']) - else - data['permalink'] - end - end - - # The template of the permalink. - # - # Returns the template String. - def template - if site.permalink_style == :pretty - if index? && html? - "/:path/" - elsif html? - "/:path/:basename/" - else - "/:path/:basename:output_ext" - end - else - "/:path/:basename:output_ext" - end - end - - # The generated relative url of this page. e.g. /about.html. - # - # Returns the String url. - def url - @url ||= URL.new({ - :template => template, - :placeholders => url_placeholders, - :permalink => permalink - }).to_s - end - - # Returns a hash of URL placeholder names (as symbols) mapping to the - # desired placeholder replacements. For details see "url.rb" - def url_placeholders - { - :path => @dir, - :basename => basename, - :output_ext => output_ext - } - end - - # Extract information from the page filename. - # - # name - The String filename of the page file. - # - # Returns nothing. - def process(name) - self.ext = File.extname(name) - self.basename = name[0 .. -ext.length - 1] - end - - # Add any necessary layouts to this post - # - # layouts - The Hash of {"name" => "layout"}. - # site_payload - The site payload Hash. - # - # Returns nothing. - def render(layouts, site_payload) - payload = Utils.deep_merge_hashes({ - "page" => to_liquid, - 'paginator' => pager.to_liquid - }, site_payload) - - do_layout(payload, layouts) - end - - # The path to the source file - # - # Returns the path to the source file - def path - data.fetch('path') { relative_path.sub(/\A\//, '') } - end - - # The path to the page source file, relative to the site source - def relative_path - File.join(*[@dir, @name].map(&:to_s).reject(&:empty?)) - end - - # Obtain destination path. - # - # dest - The String path to the destination dir. - # - # Returns the destination file path String. - def destination(dest) - path = site.in_dest_dir(dest, URL.unescape_path(url)) - path = File.join(path, "index.html") if url =~ /\/$/ - path - end - - # Returns the object as a debug String. - def inspect - "#" - end - - # Returns the Boolean of whether this Page is HTML or not. - def html? - output_ext == '.html' - end - - # Returns the Boolean of whether this Page is an index file or not. - def index? - basename == 'index' - end - - def uses_relative_permalinks - permalink && !@dir.empty? && site.config['relative_permalinks'] - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/plugin.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/plugin.rb deleted file mode 100644 index 0207314..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/plugin.rb +++ /dev/null @@ -1,77 +0,0 @@ -module Jekyll - class Plugin - PRIORITIES = { :lowest => -100, - :low => -10, - :normal => 0, - :high => 10, - :highest => 100 } - - # Fetch all the subclasses of this class and its subclasses' subclasses. - # - # Returns an array of descendant classes. - def self.descendants - descendants = [] - ObjectSpace.each_object(singleton_class) do |k| - descendants.unshift k unless k == self - end - descendants - end - - # Get or set the priority of this plugin. When called without an - # argument it returns the priority. When an argument is given, it will - # set the priority. - # - # priority - The Symbol priority (default: nil). Valid options are: - # :lowest, :low, :normal, :high, :highest - # - # Returns the Symbol priority. - def self.priority(priority = nil) - @priority ||= nil - if priority && PRIORITIES.key?(priority) - @priority = priority - end - @priority || :normal - end - - # Get or set the safety of this plugin. When called without an argument - # it returns the safety. When an argument is given, it will set the - # safety. - # - # safe - The Boolean safety (default: nil). - # - # Returns the safety Boolean. - def self.safe(safe = nil) - if safe - @safe = safe - end - @safe || false - end - - # Spaceship is priority [higher -> lower] - # - # other - The class to be compared. - # - # Returns -1, 0, 1. - def self.<=>(other) - PRIORITIES[other.priority] <=> PRIORITIES[self.priority] - end - - # Spaceship is priority [higher -> lower] - # - # other - The class to be compared. - # - # Returns -1, 0, 1. - def <=>(other) - self.class <=> other.class - end - - # Initialize a new plugin. This should be overridden by the subclass. - # - # config - The Hash of configuration options. - # - # Returns a new instance. - def initialize(config = {}) - # no-op for default - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/plugin_manager.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/plugin_manager.rb deleted file mode 100644 index 64dea86..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/plugin_manager.rb +++ /dev/null @@ -1,92 +0,0 @@ -module Jekyll - class PluginManager - attr_reader :site - - # Create an instance of this class. - # - # site - the instance of Jekyll::Site we're concerned with - # - # Returns nothing - def initialize(site) - @site = site - end - - # Require all the plugins which are allowed. - # - # Returns nothing - def conscientious_require - require_plugin_files - require_gems - end - - # Require each of the gem plugins specified. - # - # Returns nothing. - def require_gems - site.gems.each do |gem| - if plugin_allowed?(gem) - Jekyll.logger.debug("PluginManager:", "Requiring #{gem}") - require gem - end - end - end - - def self.require_from_bundler - if !ENV["JEKYLL_NO_BUNDLER_REQUIRE"] && File.file?("Gemfile") - require "bundler" - Bundler.setup # puts all groups on the load path - required_gems = Bundler.require(:jekyll_plugins) # requires the gems in this group only - Jekyll.logger.debug("PluginManager:", "Required #{required_gems.map(&:name).join(', ')}") - ENV["JEKYLL_NO_BUNDLER_REQUIRE"] = "true" - true - else - false - end - rescue LoadError, Bundler::GemfileNotFound - false - end - - # Check whether a gem plugin is allowed to be used during this build. - # - # gem_name - the name of the gem - # - # Returns true if the gem name is in the whitelist or if the site is not - # in safe mode. - def plugin_allowed?(gem_name) - !site.safe || whitelist.include?(gem_name) - end - - # Build an array of allowed plugin gem names. - # - # Returns an array of strings, each string being the name of a gem name - # that is allowed to be used. - def whitelist - @whitelist ||= Array[site.config['whitelist']].flatten - end - - # Require all .rb files if safe mode is off - # - # Returns nothing. - def require_plugin_files - unless site.safe - plugins_path.each do |plugins| - Dir[File.join(plugins, "**", "*.rb")].sort.each do |f| - require f - end - end - end - end - - # Public: Setup the plugin search path - # - # Returns an Array of plugin search paths - def plugins_path - if (site.config['plugins'] == Jekyll::Configuration::DEFAULTS['plugins']) - [site.in_source_dir(site.config['plugins'])] - else - Array(site.config['plugins']).map { |d| File.expand_path(d) } - end - end - - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/post.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/post.rb deleted file mode 100644 index c377e37..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/post.rb +++ /dev/null @@ -1,313 +0,0 @@ -module Jekyll - class Post - include Comparable - include Convertible - - # Valid post name regex. - MATCHER = /^(.+\/)*(\d+-\d+-\d+)-(.*)(\.[^.]+)$/ - - EXCERPT_ATTRIBUTES_FOR_LIQUID = %w[ - title - url - dir - date - id - categories - next - previous - tags - path - ] - - # Attributes for Liquid templates - ATTRIBUTES_FOR_LIQUID = EXCERPT_ATTRIBUTES_FOR_LIQUID + %w[ - content - excerpt - ] - - # Post name validator. Post filenames must be like: - # 2008-11-05-my-awesome-post.textile - # - # Returns true if valid, false if not. - def self.valid?(name) - name =~ MATCHER - end - - attr_accessor :site - attr_accessor :data, :extracted_excerpt, :content, :output, :ext - attr_accessor :date, :slug, :tags, :categories - - attr_reader :name - - # Initialize this Post instance. - # - # site - The Site. - # base - The String path to the dir containing the post file. - # name - The String filename of the post file. - # - # Returns the new Post. - def initialize(site, source, dir, name) - @site = site - @dir = dir - @base = containing_dir(dir) - @name = name - - self.categories = dir.downcase.split('/').reject { |x| x.empty? } - process(name) - read_yaml(@base, name) - - data.default_proc = proc do |hash, key| - site.frontmatter_defaults.find(File.join(dir, name), type, key) - end - - if data.key?('date') - self.date = Utils.parse_date(data["date"].to_s, "Post '#{relative_path}' does not have a valid date in the YAML front matter.") - end - - populate_categories - populate_tags - end - - def published? - if data.key?('published') && data['published'] == false - false - else - true - end - end - - def populate_categories - categories_from_data = Utils.pluralized_array_from_hash(data, 'category', 'categories') - self.categories = ( - Array(categories) + categories_from_data - ).map {|c| c.to_s.downcase}.flatten.uniq - end - - def populate_tags - self.tags = Utils.pluralized_array_from_hash(data, "tag", "tags").flatten - end - - # Get the full path to the directory containing the post files - def containing_dir(dir) - site.in_source_dir(dir, '_posts') - end - - # Read the YAML frontmatter. - # - # base - The String path to the dir containing the file. - # name - The String filename of the file. - # - # Returns nothing. - def read_yaml(base, name) - super(base, name) - self.extracted_excerpt = extract_excerpt - end - - # The post excerpt. This is either a custom excerpt - # set in YAML front matter or the result of extract_excerpt. - # - # Returns excerpt string. - def excerpt - data.fetch('excerpt') { extracted_excerpt.to_s } - end - - # Public: the Post title, from the YAML Front-Matter or from the slug - # - # Returns the post title - def title - data.fetch('title') { titleized_slug } - end - - # Turns the post slug into a suitable title - def titleized_slug - slug.split('-').select {|w| w.capitalize! || w }.join(' ') - end - - # Public: the path to the post relative to the site source, - # from the YAML Front-Matter or from a combination of - # the directory it's in, "_posts", and the name of the - # post file - # - # Returns the path to the file relative to the site source - def path - data.fetch('path') { relative_path.sub(/\A\//, '') } - end - - # The path to the post source file, relative to the site source - def relative_path - File.join(*[@dir, "_posts", @name].map(&:to_s).reject(&:empty?)) - end - - # Compares Post objects. First compares the Post date. If the dates are - # equal, it compares the Post slugs. - # - # other - The other Post we are comparing to. - # - # Returns -1, 0, 1 - def <=>(other) - cmp = self.date <=> other.date - if 0 == cmp - cmp = self.slug <=> other.slug - end - return cmp - end - - # Extract information from the post filename. - # - # name - The String filename of the post file. - # - # Returns nothing. - def process(name) - m, cats, date, slug, ext = *name.match(MATCHER) - self.date = Utils.parse_date(date, "Post '#{relative_path}' does not have a valid date in the filename.") - self.slug = slug - self.ext = ext - end - - # The generated directory into which the post will be placed - # upon generation. This is derived from the permalink or, if - # permalink is absent, set to the default date - # e.g. "/2008/11/05/" if the permalink style is :date, otherwise nothing. - # - # Returns the String directory. - def dir - File.dirname(url) - end - - # The full path and filename of the post. Defined in the YAML of the post - # body (optional). - # - # Returns the String permalink. - def permalink - data && data['permalink'] - end - - def template - case site.permalink_style - when :pretty - "/:categories/:year/:month/:day/:title/" - when :none - "/:categories/:title.html" - when :date - "/:categories/:year/:month/:day/:title.html" - when :ordinal - "/:categories/:year/:y_day/:title.html" - else - site.permalink_style.to_s - end - end - - # The generated relative url of this post. - # - # Returns the String url. - def url - @url ||= URL.new({ - :template => template, - :placeholders => url_placeholders, - :permalink => permalink - }).to_s - end - - # Returns a hash of URL placeholder names (as symbols) mapping to the - # desired placeholder replacements. For details see "url.rb" - def url_placeholders - { - :year => date.strftime("%Y"), - :month => date.strftime("%m"), - :day => date.strftime("%d"), - :title => slug, - :i_day => date.strftime("%-d"), - :i_month => date.strftime("%-m"), - :categories => (categories || []).map { |c| c.to_s }.join('/'), - :short_month => date.strftime("%b"), - :short_year => date.strftime("%y"), - :y_day => date.strftime("%j"), - :output_ext => output_ext - } - end - - # The UID for this post (useful in feeds). - # e.g. /2008/11/05/my-awesome-post - # - # Returns the String UID. - def id - File.join(dir, slug) - end - - # Calculate related posts. - # - # Returns an Array of related Posts. - def related_posts(posts) - Jekyll::RelatedPosts.new(self).build - end - - # Add any necessary layouts to this post. - # - # layouts - A Hash of {"name" => "layout"}. - # site_payload - The site payload hash. - # - # Returns nothing. - def render(layouts, site_payload) - # construct payload - payload = Utils.deep_merge_hashes({ - "site" => { "related_posts" => related_posts(site_payload["site"]["posts"]) }, - "page" => to_liquid(self.class::EXCERPT_ATTRIBUTES_FOR_LIQUID) - }, site_payload) - - if generate_excerpt? - extracted_excerpt.do_layout(payload, {}) - end - - do_layout(payload.merge({"page" => to_liquid}), layouts) - end - - # Obtain destination path. - # - # dest - The String path to the destination dir. - # - # Returns destination file path String. - def destination(dest) - # The url needs to be unescaped in order to preserve the correct filename - path = site.in_dest_dir(dest, URL.unescape_path(url)) - path = File.join(path, "index.html") if path[/\.html?$/].nil? - path - end - - # Returns the shorthand String identifier of this Post. - def inspect - "" - end - - def next - pos = site.posts.index {|post| post.equal?(self) } - if pos && pos < site.posts.length - 1 - site.posts[pos + 1] - else - nil - end - end - - def previous - pos = site.posts.index {|post| post.equal?(self) } - if pos && pos > 0 - site.posts[pos - 1] - else - nil - end - end - - protected - - def extract_excerpt - if generate_excerpt? - Jekyll::Excerpt.new(self) - else - "" - end - end - - def generate_excerpt? - !(site.config['excerpt_separator'].to_s.empty?) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/publisher.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/publisher.rb deleted file mode 100644 index e86e96b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/publisher.rb +++ /dev/null @@ -1,21 +0,0 @@ -module Jekyll - class Publisher - def initialize(site) - @site = site - end - - def publish?(thing) - can_be_published?(thing) && !hidden_in_the_future?(thing) - end - - private - - def can_be_published?(thing) - thing.data.fetch('published', true) || @site.unpublished - end - - def hidden_in_the_future?(thing) - thing.is_a?(Post) && !@site.future && thing.date > @site.time - end - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/related_posts.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/related_posts.rb deleted file mode 100644 index 041ee55..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/related_posts.rb +++ /dev/null @@ -1,58 +0,0 @@ -module Jekyll - class RelatedPosts - - class << self - attr_accessor :lsi - end - - attr_reader :post, :site - - def initialize(post) - @post = post - @site = post.site - require 'classifier-reborn' if site.lsi - end - - def build - return [] unless site.posts.size > 1 - - if site.lsi - build_index - lsi_related_posts - else - most_recent_posts - end - end - - - def build_index - self.class.lsi ||= begin - lsi = ClassifierReborn::LSI.new(:auto_rebuild => false) - display("Populating LSI...") - - site.posts.each do |x| - lsi.add_item(x) - end - - display("Rebuilding index...") - lsi.build_index - display("") - lsi - end - end - - def lsi_related_posts - self.class.lsi.find_related(post.content, 11) - [post] - end - - def most_recent_posts - @most_recent_posts ||= (site.posts.reverse - [post]).first(10) - end - - def display(output) - $stdout.print("\n") - $stdout.print(Jekyll.logger.formatted_topic(output)) - $stdout.flush - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/renderer.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/renderer.rb deleted file mode 100644 index f88a418..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/renderer.rb +++ /dev/null @@ -1,154 +0,0 @@ -# encoding: UTF-8 - -module Jekyll - class Renderer - - attr_reader :document, :site - - def initialize(site, document) - @site = site - @document = document - end - - # Determine which converters to use based on this document's - # extension. - # - # Returns an array of Converter instances. - def converters - @converters ||= site.converters.select { |c| c.matches(document.extname) } - end - - # Determine the extname the outputted file should have - # - # Returns the output extname including the leading period. - def output_ext - converters.first.output_ext(document.extname) - end - - ###################### - ## DAT RENDER THO - ###################### - - def run - payload = Utils.deep_merge_hashes({ - "page" => document.to_liquid - }, site.site_payload) - - info = { - filters: [Jekyll::Filters], - registers: { :site => site, :page => payload['page'] } - } - - # render and transform content (this becomes the final content of the object) - payload["highlighter_prefix"] = converters.first.highlighter_prefix - payload["highlighter_suffix"] = converters.first.highlighter_suffix - - output = document.content - - if document.render_with_liquid? - output = render_liquid(output, payload, info) - end - - output = convert(output) - document.content = output - - if document.place_in_layout? - place_in_layouts( - output, - payload, - info - ) - else - output - end - end - - # Convert the given content using the converters which match this renderer's document. - # - # content - the raw, unconverted content - # - # Returns the converted content. - def convert(content) - converters.reduce(content) do |output, converter| - begin - converter.convert output - rescue => e - Jekyll.logger.error "Conversion error:", "#{converter.class} encountered an error while converting '#{document.relative_path}':" - Jekyll.logger.error("", e.to_s) - raise e - end - end - end - - # Render the given content with the payload and info - # - # content - - # payload - - # info - - # path - (optional) the path to the file, for use in ex - # - # Returns the content, rendered by Liquid. - def render_liquid(content, payload, info, path = nil) - Liquid::Template.parse(content).render!(payload, info) - rescue Tags::IncludeTagError => e - Jekyll.logger.error "Liquid Exception:", "#{e.message} in #{e.path}, included in #{path || document.relative_path}" - raise e - rescue Exception => e - Jekyll.logger.error "Liquid Exception:", "#{e.message} in #{path || document.relative_path}" - raise e - end - - # Checks if the layout specified in the document actually exists - # - # layout - the layout to check - # - # Returns true if the layout is invalid, false if otherwise - def invalid_layout?(layout) - !document.data["layout"].nil? && layout.nil? - end - - # Render layouts and place given content inside. - # - # content - the content to be placed in the layout - # - # - # Returns the content placed in the Liquid-rendered layouts - def place_in_layouts(content, payload, info) - output = content.dup - layout = site.layouts[document.data["layout"]] - - Jekyll.logger.warn("Build Warning:", "Layout '#{document.data["layout"]}' requested in #{document.relative_path} does not exist.") if invalid_layout? layout - - used = Set.new([layout]) - - while layout - payload = Utils.deep_merge_hashes( - payload, - { - "content" => output, - "page" => document.to_liquid, - "layout" => layout.data - } - ) - - output = render_liquid( - layout.content, - payload, - info, - File.join(site.config['layouts'], layout.name) - ) - - if layout = site.layouts[layout.data["layout"]] - if used.include?(layout) - layout = nil # avoid recursive chain - else - used << layout - end - end - end - - output - end - - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/site.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/site.rb deleted file mode 100644 index 115b413..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/site.rb +++ /dev/null @@ -1,511 +0,0 @@ -# encoding: UTF-8 -require 'csv' - -module Jekyll - class Site - attr_reader :source, :dest, :config - attr_accessor :layouts, :posts, :pages, :static_files, - :exclude, :include, :lsi, :highlighter, :permalink_style, - :time, :future, :unpublished, :safe, :plugins, :limit_posts, - :show_drafts, :keep_files, :baseurl, :data, :file_read_opts, - :gems, :plugin_manager - - attr_accessor :converters, :generators - - # Public: Initialize a new Site. - # - # config - A Hash containing site configuration details. - def initialize(config) - @config = config.clone - - %w[safe lsi highlighter baseurl exclude include future unpublished - show_drafts limit_posts keep_files gems].each do |opt| - self.send("#{opt}=", config[opt]) - end - - # Source and destination may not be changed after the site has been created. - @source = File.expand_path(config['source']).freeze - @dest = File.expand_path(config['destination']).freeze - - self.plugin_manager = Jekyll::PluginManager.new(self) - self.plugins = plugin_manager.plugins_path - - self.file_read_opts = {} - self.file_read_opts[:encoding] = config['encoding'] if config['encoding'] - - self.permalink_style = config['permalink'].to_sym - - Jekyll.sites << self - - reset - setup - end - - # Public: Read, process, and write this Site to output. - # - # Returns nothing. - def process - reset - read - generate - render - cleanup - write - end - - # Reset Site details. - # - # Returns nothing - def reset - self.time = (config['time'] ? Utils.parse_date(config['time'].to_s, "Invalid time in _config.yml.") : Time.now) - self.layouts = {} - self.posts = [] - self.pages = [] - self.static_files = [] - self.data = {} - @collections = nil - - if limit_posts < 0 - raise ArgumentError, "limit_posts must be a non-negative number" - end - end - - # Load necessary libraries, plugins, converters, and generators. - # - # Returns nothing. - def setup - ensure_not_in_dest - - plugin_manager.conscientious_require - - self.converters = instantiate_subclasses(Jekyll::Converter) - self.generators = instantiate_subclasses(Jekyll::Generator) - end - - # Check that the destination dir isn't the source dir or a directory - # parent to the source dir. - def ensure_not_in_dest - dest_pathname = Pathname.new(dest) - Pathname.new(source).ascend do |path| - if path == dest_pathname - raise Errors::FatalException.new "Destination directory cannot be or contain the Source directory." - end - end - end - - # Public: Prefix a given path with the source directory. - # - # paths - (optional) path elements to a file or directory within the - # source directory - # - # Returns a path which is prefixed with the source directory. - def in_source_dir(*paths) - paths.reduce(source) do |base, path| - Jekyll.sanitized_path(base, path) - end - end - - # Public: Prefix a given path with the destination directory. - # - # paths - (optional) path elements to a file or directory within the - # destination directory - # - # Returns a path which is prefixed with the destination directory. - def in_dest_dir(*paths) - paths.reduce(dest) do |base, path| - Jekyll.sanitized_path(base, path) - end - end - - # The list of collections and their corresponding Jekyll::Collection instances. - # If config['collections'] is set, a new instance is created for each item in the collection. - # If config['collections'] is not set, a new hash is returned. - # - # Returns a Hash containing collection name-to-instance pairs. - def collections - @collections ||= Hash[collection_names.map { |coll| [coll, Jekyll::Collection.new(self, coll)] } ] - end - - # The list of collection names. - # - # Returns an array of collection names from the configuration, - # or an empty array if the `collections` key is not set. - def collection_names - case config['collections'] - when Hash - config['collections'].keys - when Array - config['collections'] - when nil - [] - else - raise ArgumentError, "Your `collections` key must be a hash or an array." - end - end - - # Read Site data from disk and load it into internal data structures. - # - # Returns nothing. - def read - self.layouts = LayoutReader.new(self).read - read_directories - read_data(config['data_source']) - read_collections - end - - # Recursively traverse directories to find posts, pages and static files - # that will become part of the site according to the rules in - # filter_entries. - # - # dir - The String relative path of the directory to read. Default: ''. - # - # Returns nothing. - def read_directories(dir = '') - base = in_source_dir(dir) - entries = Dir.chdir(base) { filter_entries(Dir.entries('.'), base) } - - read_posts(dir) - read_drafts(dir) if show_drafts - posts.sort! - limit_posts! if limit_posts > 0 # limit the posts if :limit_posts option is set - - entries.each do |f| - f_abs = in_source_dir(base, f) - if File.directory?(f_abs) - f_rel = File.join(dir, f) - read_directories(f_rel) unless dest.sub(/\/$/, '') == f_abs - elsif Utils.has_yaml_header?(f_abs) - page = Page.new(self, source, dir, f) - pages << page if publisher.publish?(page) - else - static_files << StaticFile.new(self, source, dir, f) - end - end - - pages.sort_by!(&:name) - end - - # Read all the files in //_posts and create a new Post - # object with each one. - # - # dir - The String relative path of the directory to read. - # - # Returns nothing. - def read_posts(dir) - posts = read_content(dir, '_posts', Post) - - posts.each do |post| - aggregate_post_info(post) if publisher.publish?(post) - end - end - - # Read all the files in //_drafts and create a new Post - # object with each one. - # - # dir - The String relative path of the directory to read. - # - # Returns nothing. - def read_drafts(dir) - drafts = read_content(dir, '_drafts', Draft) - - drafts.each do |draft| - if draft.published? - aggregate_post_info(draft) - end - end - end - - def read_content(dir, magic_dir, klass) - get_entries(dir, magic_dir).map do |entry| - klass.new(self, source, dir, entry) if klass.valid?(entry) - end.reject do |entry| - entry.nil? - end - end - - # Read and parse all yaml files under / - # - # Returns nothing - def read_data(dir) - base = in_source_dir(dir) - read_data_to(base, self.data) - end - - # Read and parse all yaml files under and add them to the - # variable. - # - # dir - The string absolute path of the directory to read. - # data - The variable to which data will be added. - # - # Returns nothing - def read_data_to(dir, data) - return unless File.directory?(dir) && (!safe || !File.symlink?(dir)) - - entries = Dir.chdir(dir) do - Dir['*.{yaml,yml,json,csv}'] + Dir['*'].select { |fn| File.directory?(fn) } - end - - entries.each do |entry| - path = in_source_dir(dir, entry) - next if File.symlink?(path) && safe - - key = sanitize_filename(File.basename(entry, '.*')) - if File.directory?(path) - read_data_to(path, data[key] = {}) - else - case File.extname(path).downcase - when '.csv' - data[key] = CSV.read(path, :headers => true).map(&:to_hash) - else - data[key] = SafeYAML.load_file(path) - end - end - end - end - - # Read in all collections specified in the configuration - # - # Returns nothing. - def read_collections - collections.each do |_, collection| - collection.read unless collection.label.eql?("data") - end - end - - # Run each of the Generators. - # - # Returns nothing. - def generate - generators.each do |generator| - generator.generate(self) - end - end - - # Render the site to the destination. - # - # Returns nothing. - def render - relative_permalinks_deprecation_method - - collections.each do |label, collection| - collection.docs.each do |document| - document.output = Jekyll::Renderer.new(self, document).run - end - end - - payload = site_payload - [posts, pages].flatten.each do |page_or_post| - page_or_post.render(layouts, payload) - end - rescue Errno::ENOENT => e - # ignore missing layout dir - end - - # Remove orphaned files and empty directories in destination. - # - # Returns nothing. - def cleanup - site_cleaner.cleanup! - end - - # Write static files, pages, and posts. - # - # Returns nothing. - def write - each_site_file { |item| item.write(dest) } - end - - # Construct a Hash of Posts indexed by the specified Post attribute. - # - # post_attr - The String name of the Post attribute. - # - # Examples - # - # post_attr_hash('categories') - # # => { 'tech' => [, ], - # # 'ruby' => [] } - # - # Returns the Hash: { attr => posts } where - # attr - One of the values for the requested attribute. - # posts - The Array of Posts with the given attr value. - def post_attr_hash(post_attr) - # Build a hash map based on the specified post attribute ( post attr => - # array of posts ) then sort each array in reverse order. - hash = Hash.new { |h, key| h[key] = [] } - posts.each { |p| p.send(post_attr.to_sym).each { |t| hash[t] << p } } - hash.values.each { |posts| posts.sort!.reverse! } - hash - end - - def tags - post_attr_hash('tags') - end - - def categories - post_attr_hash('categories') - end - - # Prepare site data for site payload. The method maintains backward compatibility - # if the key 'data' is already used in _config.yml. - # - # Returns the Hash to be hooked to site.data. - def site_data - config['data'] || data - end - - # The Hash payload containing site-wide data. - # - # Returns the Hash: { "site" => data } where data is a Hash with keys: - # "time" - The Time as specified in the configuration or the - # current time if none was specified. - # "posts" - The Array of Posts, sorted chronologically by post date - # and then title. - # "pages" - The Array of all Pages. - # "html_pages" - The Array of HTML Pages. - # "categories" - The Hash of category values and Posts. - # See Site#post_attr_hash for type info. - # "tags" - The Hash of tag values and Posts. - # See Site#post_attr_hash for type info. - def site_payload - { - "jekyll" => { - "version" => Jekyll::VERSION, - "environment" => Jekyll.env - }, - "site" => Utils.deep_merge_hashes(config, - Utils.deep_merge_hashes(Hash[collections.map{|label, coll| [label, coll.docs]}], { - "time" => time, - "posts" => posts.sort { |a, b| b <=> a }, - "pages" => pages, - "static_files" => static_files.sort { |a, b| a.relative_path <=> b.relative_path }, - "html_pages" => pages.select { |page| page.html? || page.url.end_with?("/") }, - "categories" => post_attr_hash('categories'), - "tags" => post_attr_hash('tags'), - "collections" => collections, - "documents" => documents, - "data" => site_data - })) - } - end - - # Filter out any files/directories that are hidden or backup files (start - # with "." or "#" or end with "~"), or contain site content (start with "_"), - # or are excluded in the site configuration, unless they are web server - # files such as '.htaccess'. - # - # entries - The Array of String file/directory entries to filter. - # - # Returns the Array of filtered entries. - def filter_entries(entries, base_directory = nil) - EntryFilter.new(self, base_directory).filter(entries) - end - - # Get the implementation class for the given Converter. - # - # klass - The Class of the Converter to fetch. - # - # Returns the Converter instance implementing the given Converter. - def getConverterImpl(klass) - matches = converters.select { |c| c.class == klass } - if impl = matches.first - impl - else - raise "Converter implementation not found for #{klass}" - end - end - - # Create array of instances of the subclasses of the class or module - # passed in as argument. - # - # klass - class or module containing the subclasses which should be - # instantiated - # - # Returns array of instances of subclasses of parameter - def instantiate_subclasses(klass) - klass.descendants.select do |c| - !safe || c.safe - end.sort.map do |c| - c.new(config) - end - end - - # Read the entries from a particular directory for processing - # - # dir - The String relative path of the directory to read - # subfolder - The String directory to read - # - # Returns the list of entries to process - def get_entries(dir, subfolder) - base = in_source_dir(dir, subfolder) - return [] unless File.exist?(base) - entries = Dir.chdir(base) { filter_entries(Dir['**/*'], base) } - entries.delete_if { |e| File.directory?(in_source_dir(base, e)) } - end - - # Aggregate post information - # - # post - The Post object to aggregate information for - # - # Returns nothing - def aggregate_post_info(post) - posts << post - end - - def relative_permalinks_deprecation_method - if config['relative_permalinks'] && has_relative_page? - Jekyll.logger.warn "Deprecation:", "Starting in 2.0, permalinks for pages" + - " in subfolders must be relative to the" + - " site source directory, not the parent" + - " directory. Check http://jekyllrb.com/docs/upgrading/"+ - " for more info." - end - end - - def docs_to_write - documents.select(&:write?) - end - - def documents - collections.reduce(Set.new) do |docs, (_, collection)| - docs + collection.docs + collection.files - end.to_a - end - - def each_site_file - %w(posts pages static_files docs_to_write).each do |type| - send(type).each do |item| - yield item - end - end - end - - def frontmatter_defaults - @frontmatter_defaults ||= FrontmatterDefaults.new(self) - end - - private - - def has_relative_page? - pages.any? { |page| page.uses_relative_permalinks } - end - - def limit_posts! - limit = posts.length < limit_posts ? posts.length : limit_posts - self.posts = posts[-limit, limit] - end - - def site_cleaner - @site_cleaner ||= Cleaner.new(self) - end - - def sanitize_filename(name) - name.gsub!(/[^\w\s_-]+/, '') - name.gsub!(/(^|\b\s)\s+($|\s?\b)/, '\\1\\2') - name.gsub(/\s+/, '_') - end - - def publisher - @publisher ||= Publisher.new(self) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/static_file.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/static_file.rb deleted file mode 100644 index eae85b5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/static_file.rb +++ /dev/null @@ -1,104 +0,0 @@ -module Jekyll - class StaticFile - # The cache of last modification times [path] -> mtime. - @@mtimes = Hash.new - - # Initialize a new StaticFile. - # - # site - The Site. - # base - The String path to the . - # dir - The String path between and the file. - # name - The String filename of the file. - def initialize(site, base, dir, name, collection = nil) - @site = site - @base = base - @dir = dir - @name = name - @collection = collection - end - - # Returns source file path. - def path - File.join(*[@base, @dir, @name].compact) - end - - # Returns the source file path relative to the site source - def relative_path - @relative_path ||= File.join(*[@dir, @name].compact) - end - - def extname - File.extname(path) - end - - # Obtain destination path. - # - # dest - The String path to the destination dir. - # - # Returns destination file path. - def destination(dest) - @site.in_dest_dir(*[dest, destination_rel_dir, @name].compact) - end - - def destination_rel_dir - if @collection - @dir.gsub(/\A_/, '') - else - @dir - end - end - - # Returns last modification time for this file. - def mtime - File.stat(path).mtime.to_i - end - - # Is source path modified? - # - # Returns true if modified since last write. - def modified? - @@mtimes[path] != mtime - end - - # Whether to write the file to the filesystem - # - # Returns true. - def write? - true - end - - # Write the static file to the destination directory (if modified). - # - # dest - The String path to the destination dir. - # - # Returns false if the file was not modified since last time (no-op). - def write(dest) - dest_path = destination(dest) - - return false if File.exist?(dest_path) and !modified? - @@mtimes[path] = mtime - - FileUtils.mkdir_p(File.dirname(dest_path)) - FileUtils.rm(dest_path) if File.exist?(dest_path) - FileUtils.cp(path, dest_path) - - true - end - - # Reset the mtimes cache (for testing purposes). - # - # Returns nothing. - def self.reset_cache - @@mtimes = Hash.new - nil - end - - def to_liquid - { - "path" => File.join("", relative_path), - "modified_time" => mtime.to_s, - "extname" => File.extname(relative_path) - } - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/stevenson.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/stevenson.rb deleted file mode 100644 index 9a9f412..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/stevenson.rb +++ /dev/null @@ -1,58 +0,0 @@ -module Jekyll - class Stevenson < ::Logger - def initialize - @progname = nil - @level = DEBUG - @default_formatter = Formatter.new - @logdev = $stdout - @formatter = proc do |severity, datetime, progname, msg| - "#{msg}" - end - end - - def add(severity, message = nil, progname = nil, &block) - severity ||= UNKNOWN - @logdev = set_logdevice(severity) - - if @logdev.nil? or severity < @level - return true - end - progname ||= @progname - if message.nil? - if block_given? - message = yield - else - message = progname - progname = @progname - end - end - @logdev.puts( - format_message(format_severity(severity), Time.now, progname, message)) - true - end - - # Log a +WARN+ message - def warn(progname = nil, &block) - add(WARN, nil, progname.yellow, &block) - end - - # Log an +ERROR+ message - def error(progname = nil, &block) - add(ERROR, nil, progname.red, &block) - end - - def close - # No LogDevice in use - end - - private - - def set_logdevice(severity) - if severity > INFO - $stderr - else - $stdout - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/tags/highlight.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/tags/highlight.rb deleted file mode 100644 index b51712b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/tags/highlight.rb +++ /dev/null @@ -1,125 +0,0 @@ -module Jekyll - module Tags - class HighlightBlock < Liquid::Block - include Liquid::StandardFilters - - # The regular expression syntax checker. Start with the language specifier. - # Follow that by zero or more space separated options that take one of three - # forms: name, name=value, or name="" - # - # is a space-separated list of numbers - SYNTAX = /^([a-zA-Z0-9.+#-]+)((\s+\w+(=(\w+|"([0-9]+\s)*[0-9]+"))?)*)$/ - - def initialize(tag_name, markup, tokens) - super - if markup.strip =~ SYNTAX - @lang = $1.downcase - @options = {} - if defined?($2) && $2 != '' - # Split along 3 possible forms -- key="", key=value, or key - $2.scan(/(?:\w="[^"]*"|\w=\w|\w)+/) do |opt| - key, value = opt.split('=') - # If a quoted list, convert to array - if value && value.include?("\"") - value.gsub!(/"/, "") - value = value.split - end - @options[key.to_sym] = value || true - end - end - @options[:linenos] = "inline" if @options.key?(:linenos) and @options[:linenos] == true - else - raise SyntaxError.new <<-eos -Syntax Error in tag 'highlight' while parsing the following markup: - - #{markup} - -Valid syntax: highlight [linenos] -eos - end - end - - def render(context) - prefix = context["highlighter_prefix"] || "" - suffix = context["highlighter_suffix"] || "" - code = super.to_s.strip - - is_safe = !!context.registers[:site].safe - - output = - case context.registers[:site].highlighter - when 'pygments' - render_pygments(code, is_safe) - when 'rouge' - render_rouge(code) - else - render_codehighlighter(code) - end - - rendered_output = add_code_tag(output) - prefix + rendered_output + suffix - end - - def sanitized_opts(opts, is_safe) - if is_safe - Hash[[ - [:startinline, opts.fetch(:startinline, nil)], - [:hl_linenos, opts.fetch(:hl_linenos, nil)], - [:linenos, opts.fetch(:linenos, nil)], - [:encoding, opts.fetch(:encoding, 'utf-8')], - [:cssclass, opts.fetch(:cssclass, nil)] - ].reject {|f| f.last.nil? }] - else - opts - end - end - - def render_pygments(code, is_safe) - require 'pygments' - - @options[:encoding] = 'utf-8' - - highlighted_code = Pygments.highlight( - code, - :lexer => @lang, - :options => sanitized_opts(@options, is_safe) - ) - - if highlighted_code.nil? - Jekyll.logger.error "There was an error highlighting your code:" - puts - Jekyll.logger.error code - puts - Jekyll.logger.error "While attempting to convert the above code, Pygments.rb" + - " returned an unacceptable value." - Jekyll.logger.error "This is usually a timeout problem solved by running `jekyll build` again." - raise ArgumentError.new("Pygments.rb returned an unacceptable value when attempting to highlight some code.") - end - - highlighted_code - end - - def render_rouge(code) - require 'rouge' - formatter = Rouge::Formatters::HTML.new(line_numbers: @options[:linenos], wrap: false) - lexer = Rouge::Lexer.find_fancy(@lang, code) || Rouge::Lexers::PlainText - code = formatter.format(lexer.lex(code)) - "
#{code}
" - end - - def render_codehighlighter(code) - "
#{h(code).strip}
" - end - - def add_code_tag(code) - # Add nested tags to code blocks - code = code.sub(/
\n*/,'
')
-        code = code.sub(/\n*<\/pre>/,"
") - code.strip - end - - end - end -end - -Liquid::Template.register_tag('highlight', Jekyll::Tags::HighlightBlock) diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/tags/include.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/tags/include.rb deleted file mode 100644 index 3eb4d7c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/tags/include.rb +++ /dev/null @@ -1,171 +0,0 @@ -# encoding: UTF-8 - -module Jekyll - module Tags - class IncludeTagError < StandardError - attr_accessor :path - - def initialize(msg, path) - super(msg) - @path = path - end - end - - class IncludeTag < Liquid::Tag - - attr_reader :includes_dir - - VALID_SYNTAX = /([\w-]+)\s*=\s*(?:"([^"\\]*(?:\\.[^"\\]*)*)"|'([^'\\]*(?:\\.[^'\\]*)*)'|([\w\.-]+))/ - VARIABLE_SYNTAX = /(?[^{]*\{\{\s*(?[\w\-\.]+)\s*(\|.*)?\}\}[^\s}]*)(?.*)/ - - def initialize(tag_name, markup, tokens) - super - @includes_dir = tag_includes_dir - matched = markup.strip.match(VARIABLE_SYNTAX) - if matched - @file = matched['variable'].strip - @params = matched['params'].strip - else - @file, @params = markup.strip.split(' ', 2); - end - validate_params if @params - @tag_name = tag_name - end - - def syntax_example - "{% #{@tag_name} file.ext param='value' param2='value' %}" - end - - def parse_params(context) - params = {} - markup = @params - - while match = VALID_SYNTAX.match(markup) do - markup = markup[match.end(0)..-1] - - value = if match[2] - match[2].gsub(/\\"/, '"') - elsif match[3] - match[3].gsub(/\\'/, "'") - elsif match[4] - context[match[4]] - end - - params[match[1]] = value - end - params - end - - def validate_file_name(file) - if file !~ /^[a-zA-Z0-9_\/\.-]+$/ || file =~ /\.\// || file =~ /\/\./ - raise ArgumentError.new <<-eos -Invalid syntax for include tag. File contains invalid characters or sequences: - - #{file} - -Valid syntax: - - #{syntax_example} - -eos - end - end - - def validate_params - full_valid_syntax = Regexp.compile('\A\s*(?:' + VALID_SYNTAX.to_s + '(?=\s|\z)\s*)*\z') - unless @params =~ full_valid_syntax - raise ArgumentError.new <<-eos -Invalid syntax for include tag: - - #{@params} - -Valid syntax: - - #{syntax_example} - -eos - end - end - - # Grab file read opts in the context - def file_read_opts(context) - context.registers[:site].file_read_opts - end - - # Render the variable if required - def render_variable(context) - if @file.match(VARIABLE_SYNTAX) - partial = Liquid::Template.parse(@file) - partial.render!(context) - end - end - - def tag_includes_dir - '_includes' - end - - def render(context) - dir = resolved_includes_dir(context) - - file = render_variable(context) || @file - validate_file_name(file) - - path = File.join(dir, file) - validate_path(path, dir, context.registers[:site].safe) - - begin - partial = Liquid::Template.parse(source(path, context)) - - context.stack do - context['include'] = parse_params(context) if @params - partial.render!(context) - end - rescue => e - raise IncludeTagError.new e.message, File.join(@includes_dir, @file) - end - end - - def resolved_includes_dir(context) - File.join(File.realpath(context.registers[:site].source), @includes_dir) - end - - def validate_path(path, dir, safe) - if safe && !realpath_prefixed_with?(path, dir) - raise IOError.new "The included file '#{path}' should exist and should not be a symlink" - elsif !File.exist?(path) - raise IOError.new "Included file '#{path_relative_to_source(dir, path)}' not found" - end - end - - def path_relative_to_source(dir, path) - File.join(@includes_dir, path.sub(Regexp.new("^#{dir}"), "")) - end - - def realpath_prefixed_with?(path, dir) - File.exist?(path) && File.realpath(path).start_with?(dir) - end - - # This method allows to modify the file content by inheriting from the class. - def source(file, context) - File.read(file, file_read_opts(context)) - end - end - - class IncludeRelativeTag < IncludeTag - def tag_includes_dir - '.' - end - - def page_path(context) - context.registers[:page].nil? ? includes_dir : File.dirname(context.registers[:page]["path"]) - end - - def resolved_includes_dir(context) - context.registers[:site].in_source_dir(page_path(context)) - end - end - end -end - -Liquid::Template.register_tag('include', Jekyll::Tags::IncludeTag) -Liquid::Template.register_tag('include_relative', Jekyll::Tags::IncludeRelativeTag) diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/tags/post_url.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/tags/post_url.rb deleted file mode 100644 index ce97642..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/tags/post_url.rb +++ /dev/null @@ -1,91 +0,0 @@ -module Jekyll - module Tags - class PostComparer - MATCHER = /^(.+\/)*(\d+-\d+-\d+)-(.*)$/ - - attr_reader :path, :date, :slug, :name - - def initialize(name) - @name = name - all, @path, @date, @slug = *name.sub(/^\//, "").match(MATCHER) - raise ArgumentError.new("'#{name}' does not contain valid date and/or title.") unless all - - @name_regex = /^#{path}#{date}-#{slug}\.[^.]+/ - end - - def ==(other) - other.name.match(@name_regex) - end - - def deprecated_equality(other) - date = Utils.parse_date(name, "'#{name}' does not contain valid date and/or title.") - slug == post_slug(other) && - date.year == other.date.year && - date.month == other.date.month && - date.day == other.date.day - end - - private - # Construct the directory-aware post slug for a Jekyll::Post - # - # other - the Jekyll::Post - # - # Returns the post slug with the subdirectory (relative to _posts) - def post_slug(other) - path = other.name.split("/")[0...-1].join("/") - if path.nil? || path == "" - other.slug - else - path + '/' + other.slug - end - end - end - - class PostUrl < Liquid::Tag - def initialize(tag_name, post, tokens) - super - @orig_post = post.strip - begin - @post = PostComparer.new(@orig_post) - rescue - raise ArgumentError.new <<-eos -Could not parse name of post "#{@orig_post}" in tag 'post_url'. - -Make sure the post exists and the name is correct. -eos - end - end - - def render(context) - site = context.registers[:site] - - site.posts.each do |p| - if @post == p - return p.url - end - end - - # New matching method did not match, fall back to old method - # with deprecation warning if this matches - - site.posts.each do |p| - if @post.deprecated_equality p - Jekyll::Deprecator.deprecation_message "A call to '{{ post_url #{name} }}' did not match " + - "a post using the new matching method of checking name " + - "(path-date-slug) equality. Please make sure that you " + - "change this tag to match the post's name exactly." - return p.url - end - end - - raise ArgumentError.new <<-eos -Could not find post "#{@orig_post}" in tag 'post_url'. - -Make sure the post exists and the name is correct. -eos - end - end - end -end - -Liquid::Template.register_tag('post_url', Jekyll::Tags::PostUrl) diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/url.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/url.rb deleted file mode 100644 index 6bed8d5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/url.rb +++ /dev/null @@ -1,122 +0,0 @@ -require 'uri' - -# Public: Methods that generate a URL for a resource such as a Post or a Page. -# -# Examples -# -# URL.new({ -# :template => /:categories/:title.html", -# :placeholders => {:categories => "ruby", :title => "something"} -# }).to_s -# -module Jekyll - class URL - - # options - One of :permalink or :template must be supplied. - # :template - The String used as template for URL generation, - # for example "/:path/:basename:output_ext", where - # a placeholder is prefixed with a colon. - # :placeholders - A hash containing the placeholders which will be - # replaced when used inside the template. E.g. - # { "year" => Time.now.strftime("%Y") } would replace - # the placeholder ":year" with the current year. - # :permalink - If supplied, no URL will be generated from the - # template. Instead, the given permalink will be - # used as URL. - def initialize(options) - @template = options[:template] - @placeholders = options[:placeholders] || {} - @permalink = options[:permalink] - - if (@template || @permalink).nil? - raise ArgumentError, "One of :template or :permalink must be supplied." - end - end - - # The generated relative URL of the resource - # - # Returns the String URL - def to_s - sanitize_url(generated_permalink || generated_url) - end - - # Generates a URL from the permalink - # - # Returns the _unsanitized String URL - def generated_permalink - (@generated_permlink ||= generate_url(@permalink)) if @permalink - end - - # Generates a URL from the template - # - # Returns the _unsanitized String URL - def generated_url - @generated_url ||= generate_url(@template) - end - - # Internal: Generate the URL by replacing all placeholders with their - # respective values in the given template - # - # Returns the _unsanitizied_ String URL - def generate_url(template) - @placeholders.inject(template) do |result, token| - break result if result.index(':').nil? - result.gsub(/:#{token.first}/, self.class.escape_path(token.last)) - end - end - - # Returns a sanitized String URL - def sanitize_url(in_url) - url = in_url \ - # Remove all double slashes - .gsub(/\/\//, '/') \ - # Remove every URL segment that consists solely of dots - .split('/').reject{ |part| part =~ /^\.+$/ }.join('/') \ - # Always add a leading slash - .gsub(/\A([^\/])/, '/\1') - - # Append a trailing slash to the URL if the unsanitized URL had one - url << "/" if in_url[-1].eql?('/') - - url - end - - # Escapes a path to be a valid URL path segment - # - # path - The path to be escaped. - # - # Examples: - # - # URL.escape_path("/a b") - # # => "/a%20b" - # - # Returns the escaped path. - def self.escape_path(path) - # Because URI.escape doesn't escape '?', '[' and ']' by default, - # specify unsafe string (except unreserved, sub-delims, ":", "@" and "/"). - # - # URI path segment is defined in RFC 3986 as follows: - # segment = *pchar - # pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - # unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - # pct-encoded = "%" HEXDIG HEXDIG - # sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - # / "*" / "+" / "," / ";" / "=" - URI.escape(path, /[^a-zA-Z\d\-._~!$&\'()*+,;=:@\/]/).encode('utf-8') - end - - # Unescapes a URL path segment - # - # path - The path to be unescaped. - # - # Examples: - # - # URL.unescape_path("/a%20b") - # # => "/a b" - # - # Returns the unescaped path. - def self.unescape_path(path) - URI.unescape(path.encode('utf-8')) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/utils.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/utils.rb deleted file mode 100644 index 3486159..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/utils.rb +++ /dev/null @@ -1,125 +0,0 @@ -module Jekyll - module Utils - extend self - - # Merges a master hash with another hash, recursively. - # - # master_hash - the "parent" hash whose values will be overridden - # other_hash - the other hash whose values will be persisted after the merge - # - # This code was lovingly stolen from some random gem: - # http://gemjack.com/gems/tartan-0.1.1/classes/Hash.html - # - # Thanks to whoever made it. - def deep_merge_hashes(master_hash, other_hash) - target = master_hash.dup - - other_hash.each_key do |key| - if other_hash[key].is_a? Hash and target[key].is_a? Hash - target[key] = Utils.deep_merge_hashes(target[key], other_hash[key]) - next - end - - target[key] = other_hash[key] - end - - target - end - - # Read array from the supplied hash favouring the singular key - # and then the plural key, and handling any nil entries. - # - # hash - the hash to read from - # singular_key - the singular key - # plural_key - the plural key - # - # Returns an array - def pluralized_array_from_hash(hash, singular_key, plural_key) - [].tap do |array| - array << (value_from_singular_key(hash, singular_key) || value_from_plural_key(hash, plural_key)) - end.flatten.compact - end - - def value_from_singular_key(hash, key) - hash[key] if (hash.key?(key) || (hash.default_proc && hash[key])) - end - - def value_from_plural_key(hash, key) - if hash.key?(key) || (hash.default_proc && hash[key]) - val = hash[key] - case val - when String - val.split - when Array - val.compact - end - end - end - - def transform_keys(hash) - result = {} - hash.each_key do |key| - result[yield(key)] = hash[key] - end - result - end - - # Apply #to_sym to all keys in the hash - # - # hash - the hash to which to apply this transformation - # - # Returns a new hash with symbolized keys - def symbolize_hash_keys(hash) - transform_keys(hash) { |key| key.to_sym rescue key } - end - - # Apply #to_s to all keys in the Hash - # - # hash - the hash to which to apply this transformation - # - # Returns a new hash with stringified keys - def stringify_hash_keys(hash) - transform_keys(hash) { |key| key.to_s rescue key } - end - - # Parse a date/time and throw an error if invalid - # - # input - the date/time to parse - # msg - (optional) the error message to show the user - # - # Returns the parsed date if successful, throws a FatalException - # if not - def parse_date(input, msg = "Input could not be parsed.") - Time.parse(input) - rescue ArgumentError - raise Errors::FatalException.new("Invalid date '#{input}': " + msg) - end - - # Determines whether a given file has - # - # Returns true if the YAML front matter is present. - def has_yaml_header?(file) - !!(File.open(file, 'rb') { |f| f.read(5) } =~ /\A---\r?\n/) - end - - # Slugify a filename or title. - # - # name - the filename or title to slugify - # - # Returns the given filename or title in lowercase, with every - # sequence of spaces and non-alphanumeric characters replaced with a - # hyphen. - def slugify(string) - unless string.nil? - string \ - # Replace each non-alphanumeric character sequence with a hyphen - .gsub(/[^a-z0-9]+/i, '-') \ - # Remove leading/trailing hyphen - .gsub(/^\-|\-$/i, '') \ - # Downcase it - .downcase - end - end - - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/version.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/version.rb deleted file mode 100644 index 91ff740..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-2.5.3/lib/jekyll/version.rb +++ /dev/null @@ -1,3 +0,0 @@ -module Jekyll - VERSION = '2.5.3' -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-coffeescript-1.0.1/lib/jekyll-coffeescript.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-coffeescript-1.0.1/lib/jekyll-coffeescript.rb deleted file mode 100644 index 6814f78..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-coffeescript-1.0.1/lib/jekyll-coffeescript.rb +++ /dev/null @@ -1,9 +0,0 @@ -require "jekyll" -require "coffee-script" -require "jekyll-coffeescript/version" -require "jekyll/converters/coffeescript" - -module Jekyll - module Coffeescript - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-coffeescript-1.0.1/lib/jekyll-coffeescript/version.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-coffeescript-1.0.1/lib/jekyll-coffeescript/version.rb deleted file mode 100644 index 9f5de88..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-coffeescript-1.0.1/lib/jekyll-coffeescript/version.rb +++ /dev/null @@ -1,5 +0,0 @@ -module Jekyll - module Coffeescript - VERSION = "1.0.1" - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-coffeescript-1.0.1/lib/jekyll/converters/coffeescript.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-coffeescript-1.0.1/lib/jekyll/converters/coffeescript.rb deleted file mode 100644 index c5f9174..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-coffeescript-1.0.1/lib/jekyll/converters/coffeescript.rb +++ /dev/null @@ -1,20 +0,0 @@ -module Jekyll - module Converters - class CoffeeScript < Converter - safe true - priority :low - - def matches(ext) - ext.downcase == ".coffee" - end - - def output_ext(ext) - ".js" - end - - def convert(content) - ::CoffeeScript.compile(content) - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/.gitignore b/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/.gitignore deleted file mode 100644 index 31cafb5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/.gitignore +++ /dev/null @@ -1,22 +0,0 @@ -*.gem -*.rbc -.bundle -.config -.yardoc -Gemfile.lock -InstalledFiles -_yardoc -coverage -doc/ -lib/bundler/man -pkg -rdoc -spec/reports -test/tmp -test/version_tmp -tmp -*.bundle -*.so -*.o -*.a -mkmf.log diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/.rspec b/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/.rspec deleted file mode 100644 index 5f16476..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/.rspec +++ /dev/null @@ -1,2 +0,0 @@ ---color ---format progress diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/.travis.yml b/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/.travis.yml deleted file mode 100644 index ef917d4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: ruby -script : script/cibuild -rvm: -- 2.1 -- 2.0 -- 1.9.3 -notifications: - email: false diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/Gemfile b/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/Gemfile deleted file mode 100644 index e93fa5b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -# Specify your gem's dependencies in jekyll-gist.gemspec -gemspec diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/History.markdown b/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/History.markdown deleted file mode 100644 index d03c97c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/History.markdown +++ /dev/null @@ -1,23 +0,0 @@ -## 1.2.1 / 2015-03-22 - - * Use `has_key?` (#6) - -## 1.2.0 / 2015-03-21 - -### Minor Enhancements - - * Allow variables as parameters (#4) - -### Development Fixes - - * Fix RSpec deprecation warning (#5) - -## 1.1.0 / 2014-06-18 - -### Minor Enhancements - - * Update regex to allow for new sha-ish ids in Gist. (#1) - -## 1.0.0 / 2014-06-01 - - * Birthday! diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/LICENSE.txt b/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/LICENSE.txt deleted file mode 100644 index 3ed9f59..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2014 Parker Moore - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/README.md b/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/README.md deleted file mode 100644 index ccd2f0e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# Jekyll::Gist - -Liquid tag for displaying GitHub Gists in Jekyll sites: `{% gist %}`. - -[![Build Status](https://travis-ci.org/jekyll/jekyll-gist.svg?branch=master)](https://travis-ci.org/jekyll/jekyll-gist) - -## Installation - -Add this line to your application's Gemfile: - - gem 'jekyll-gist' - -And then execute: - - $ bundle - -Or install it yourself as: - - $ gem install jekyll-gist - -## Usage - -Use the tag as follows in your Jekyll pages, posts and collections: - -```liquid -{% gist parkr/c08ee0f2726fd0e3909d %} -``` - -This will create the associated script tag: - -```html - -``` - -You may optionally specify a `filename` after the `gist_id`: - -```liquid -{% gist parkr/c08ee0f2726fd0e3909d test.md %} -``` - -This will produce the correct URL to show just the specified file in your post rather than the entire Gist. - -## Contributing - -1. Fork it ( https://github.com/jekyll/jekyll-gist/fork ) -2. Create your feature branch (`git checkout -b my-new-feature`) -3. Commit your changes (`git commit -am 'Add some feature'`) -4. Push to the branch (`git push origin my-new-feature`) -5. Create a new Pull Request diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/Rakefile b/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/Rakefile deleted file mode 100644 index 809eb56..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/Rakefile +++ /dev/null @@ -1,2 +0,0 @@ -require "bundler/gem_tasks" - diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/jekyll-gist.gemspec b/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/jekyll-gist.gemspec deleted file mode 100644 index d1ec8f5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/jekyll-gist.gemspec +++ /dev/null @@ -1,24 +0,0 @@ -# coding: utf-8 -lib = File.expand_path('../lib', __FILE__) -$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) -require 'jekyll-gist/version' - -Gem::Specification.new do |spec| - spec.name = "jekyll-gist" - spec.version = Jekyll::Gist::VERSION - spec.authors = ["Parker Moore"] - spec.email = ["parkrmoore@gmail.com"] - spec.summary = %q{Liquid tag for displaying GitHub Gists in Jekyll sites.} - spec.homepage = "https://github.com/jekyll/jekyll-gist" - spec.license = "MIT" - - spec.files = `git ls-files -z`.split("\x0") - spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } - spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) - spec.require_paths = ["lib"] - - spec.add_development_dependency "bundler", "~> 1.6" - spec.add_development_dependency "rake" - spec.add_development_dependency "rspec" - spec.add_development_dependency "jekyll", "~> 2.0" -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/lib/jekyll-gist.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/lib/jekyll-gist.rb deleted file mode 100644 index 3a82b0a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/lib/jekyll-gist.rb +++ /dev/null @@ -1,7 +0,0 @@ -require "jekyll-gist/version" -require "jekyll-gist/gist_tag" - -module Jekyll - module Gist - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/lib/jekyll-gist/gist_tag.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/lib/jekyll-gist/gist_tag.rb deleted file mode 100644 index 9822bd7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/lib/jekyll-gist/gist_tag.rb +++ /dev/null @@ -1,49 +0,0 @@ -module Jekyll - module Gist - class GistTag < Liquid::Tag - - def render(context) - if tag_contents = determine_arguments(@markup.strip) - gist_id, filename = tag_contents[0], tag_contents[1] - if context.has_key?(gist_id) - gist_id = context[gist_id] - end - if context.has_key?(filename) - filename = context[filename] - end - gist_script_tag(gist_id, filename) - else - raise ArgumentError.new <<-eos - Syntax error in tag 'gist' while parsing the following markup: - - #{@markup} - - Valid syntax: - {% gist user/1234567 %} - {% gist user/1234567 foo.js %} - {% gist 28949e1d5ee2273f9fd3 %} - {% gist 28949e1d5ee2273f9fd3 best.md %} - eos - end - end - - private - - def determine_arguments(input) - matched = input.match(/\A([\S]+|.*(?=\/).+)\s?(\S*)\Z/) - [matched[1].strip, matched[2].strip] if matched && matched.length >= 3 - end - - def gist_script_tag(gist_id, filename = nil) - if filename.empty? - "" - else - "" - end - end - - end - end -end - -Liquid::Template.register_tag('gist', Jekyll::Gist::GistTag) diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/lib/jekyll-gist/version.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/lib/jekyll-gist/version.rb deleted file mode 100644 index 5e90394..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/lib/jekyll-gist/version.rb +++ /dev/null @@ -1,5 +0,0 @@ -module Jekyll - module Gist - VERSION = "1.2.1" - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/script/bootstrap b/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/script/bootstrap deleted file mode 100755 index 7021d72..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/script/bootstrap +++ /dev/null @@ -1,3 +0,0 @@ -#! /usr/bin/env bash - -bundle install diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/script/cibuild b/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/script/cibuild deleted file mode 100755 index ca49f4c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/script/cibuild +++ /dev/null @@ -1,3 +0,0 @@ -#! /usr/bin/env bash - -bundle exec rspec diff --git a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/spec/gist_tag_spec.rb b/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/spec/gist_tag_spec.rb deleted file mode 100644 index 64c5df7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/jekyll-gist-1.2.1/spec/gist_tag_spec.rb +++ /dev/null @@ -1,90 +0,0 @@ -require 'spec_helper' - -describe(Jekyll::Gist::GistTag) do - let(:doc) { doc_with_content(content) } - let(:content) { "{% gist #{gist} %}" } - let(:output) do - doc.content = content - doc.output = Jekyll::Renderer.new(doc.site, doc).run - end - - - context "valid gist" do - context "with user prefix" do - let(:gist) { "mattr-/24081a1d93d2898ecf0f" } - - it "produces the correct script tag" do - expect(output).to match(/ - {title:} | kramdown - - -
-
-

kramdown

-

fast, pure-Ruby Markdown-superset converter

-
- - -
- -
- <% if context.content_node.blocks.has_key?('intro') %> - - <% end %> - - - -
- -
-
-
- -
-
Copyright © 2009-2015 Thomas Leitner
-
Generated by webgen
-
- - - - - - - - - - diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/documentation.page b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/documentation.page deleted file mode 100644 index ebafaaf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/documentation.page +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: Documentation -in_menu: true -sort_info: 7 ---- -# kramdown Documentation - -## Overview - -kramdown is first and foremost a library for converting text written in a superset of Markdown to -HTML. However, due to its modular architecture it is able to support additional input and output -formats. The following input and output formats are currently supported: - -* Input: [kramdown](parser/kramdown.html) (a superset of Markdown), - [Markdown](parser/markdown.html), [Github Flavored Markdown](parser/gfm.html), [HTML](parser/html.html) - -* Output: [HTML](converter/html.html), [LaTeX](converter/latex.html), - [kramdown](converter/kramdown.html), [RemoveHtmlTags](converter/remove_html_tags.html) (a special - converter which removes HTML tags, normally used in conjunction with the LaTeX or kramdown - converters) - -The [kramdown syntax page](syntax.html) describes in detail what is supported and how it differs -from standard Markdown. - -For all available options have a look at the [options documentation](options.html) or have a look at -a parser/converter page to see which options they support! - - -## Usage - -{:ruby: .language-ruby} - -The kramdown package provides two ways for using it: - -* **As a library** - - kramdown uses basically the same API as [RedCloth], [BlueCloth] and [Maruku]: - - require 'kramdown' - - puts Kramdown::Document.new(text).to_html - {:ruby} - - The second parameter to the `new` call is an options hash for (de)activating certain features. For - example, to disable automatic header ID generation, you can do the following: - - puts Kramdown::Document.new(text, :auto_ids => false).to_html - {:ruby} - - The default parser used is `kramdown`, however, you can select a different one with the `:input` - option: - - puts Kramdown::Document.new(text, :input => 'html').to_latex - {:ruby} - - You can also reuse the created document object to produce multiple outputs: - - doc = Kramdown::Document.new(text, :input => 'html') - puts doc.to_html - puts doc.to_latex - {:ruby} - - More information on how to use or extend kramdown can be found in the [API - documentation](rdoc/index.html)! - -* **As an application** - - Together with the library files a binary called `kramdown` is shipped which can be used to convert - text in any supported input format to any supported output format. It either reads from the files - specified as the command line arguments or from the standard input. For example: - - kramdown path/to/kramdown/doc/syntax.page - - The input and output formats as well as all available kramdown options are supported through - command line switches. - - -## Tests - -kramdown uses various test suites to verify the correct working of the parsers and converters. For -more information, have a look at the [tests document](tests.html). - - -{include_file: doc/links.markdown} diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/documentation.template b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/documentation.template deleted file mode 100644 index 15edee1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/documentation.template +++ /dev/null @@ -1,29 +0,0 @@ ---- name:sidebar pipeline:erb,tags,kramdown -

Documentation

- -* Parsers - * [kramdown](parser/kramdown.html) - * [Markdown](parser/markdown.html) - * [GFM](parser/gfm.html) - * [HTML](parser/html.html) -* Converters - * [HTML](converter/html.html) - * [LaTeX](converter/latex.html) - * [kramdown](converter/kramdown.html) - * [RemoveHtmlTags](converter/remove_html_tags.html) -* Syntax Highlighters - * [Coderay](syntax_highlighter/coderay.html) - * [Rouge](syntax_highlighter/rouge.html) -* Math Engines - * [MathJax](math_engine/mathjax.html) - * [Ritex](math_engine/ritex.html) - * [itex2MML](math_engine/itex2mml.html) - * [Mathjax-Node](math_engine/mathjaxnode.html) -* [Configuration Options](options.html) -* [Tests](tests.html) - -<% if context.node.children.first && context.node.children.first.children.length > 1 %> -

Contents

-<% end %> - -{menu: {options: {descendants: true, levels: [3,6]}}} diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/index.page b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/index.page deleted file mode 100644 index f369b8c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/index.page +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: Home -in_menu: true -sort_info: 1 ---- -## Overview - -If you want to get started with kramdown, have a look at the [installation page](installation.html) -to see how you can install it on your system. Then look through the -[documentation](documentation.html) for finding information about how to actually use kramdown and -its parsers/converters. The [quick reference](quickref.html) provides a overview of the syntax -- if -you need a more detailed description of the superset of Markdown which kramdown supports the [syntax -page](syntax.html) is the place to go! - -{tikz:: -path: overview.png -img_attr: {style: 'background:transparent'} -content_processor.tikz.libraries: [mindmap, trees, arrows] -content_processor.tikz.transparent: true -content_processor.tikz.resolution: 300 100 -content_processor.tikz.opts: | - mindmap, concept color=black, text=white, - root concept/.append style={font=\Large}, - level 1 concept/.append style={font=\Large, minimum size=2.6cm}, - level 2 concept/.append style={font=\Large}, -} -\node[concept, font=\Large] (lib) {kramdown's internal representation} - child[concept color=orange, grow=120, ->] {node[concept] (i-kramdown) {kramdown}} - child[concept color=orange, grow=160] {node[concept] (i-html) {HTML}} - child[concept color=orange, grow=200] {node[concept] (i-gfm) {GFM}} - child[concept color=orange, grow=240] {node[concept] (i-markdown) {Markdown}} - child[concept color=green!50!black, grow=60] {node[concept] (o-html) {HTML}} - child[concept color=green!50!black, grow=20] {node[concept] (o-kramdown) {kramdown}} - child[concept color=green!50!black, grow=-20] { - node[concept] (o-latex) {\LaTeX} - child[grow=0] { - node[concept] (o-latex-pdf) {PDF} - } - } - child[concept color=green!50!black, grow=-60] {node[concept] (o-pdf) {PDF}} -; -\draw [dash pattern=on 0pt off 2pt,line width=5pt,arrows=-angle 60,shorten >=15pt,shorten <=10pt,color=orange] - (i-kramdown) edge(lib) - (i-markdown) edge(lib) - (i-html) edge (lib) - (i-gfm) edge (lib); -\draw [dash pattern=on 0pt off 2pt,line width=5pt,arrows=-angle 60,shorten >=10pt,shorten <=15pt,color=green!50!black] - (lib) edge(o-html) - (lib) edge (o-kramdown) - (lib) edge (o-latex) - (lib) edge (o-pdf); -{tikz} -{: style="text-align: center"} - - -## Bugs, Forums, Mailing Lists - -If you have found a bug, you should [report it here][bug_report]. Also, there is the [kramdown-users -google group][ml] available if you have any questions! - -[bug_report]: http://github.com/gettalong/kramdown/issues -[ml]: https://groups.google.com/forum/#!forum/kramdown-users - - -## Thanks - -kramdown would not be possible without the prior work of many other people. I want to thank everyone -involved with making Markdown such a nice markup language and especially the developers of other -Markdown implementations because kramdown borrowed many ideas from existing packages. - - -## Author - -* Thomas Leitner -* e-Mail: - -[PHP Markdown Extra]: http://michelf.com/projects/php-markdown/extra/ -[Maruku]: http://maruku.rubyforge.org -[BlueFeather]: http://ruby.morphball.net/bluefeather/index_en.html - ---- intro -
- - - - -**kramdown**{:itemprop="name"} (sic, not Kramdown or KramDown, just kramdown) is a *free* -[MIT](https://github.com/gettalong/kramdown/blob/master/COPYING){:itemprop="license"}-licensed -[Ruby](http://www.ruby-lang.org) library for parsing and converting a superset of Markdown. It is -completely written in Ruby, supports standard Markdown (with some minor modifications) and various -extensions that have been made popular by the [PHP Markdown Extra] package and [Maruku]. -{:itemprop="description"} - -It is probably the fastest pure-Ruby Markdown converter available (September 2014), being about 3x -faster than [Maruku] and about 4.5x faster than [BlueFeather]. - -Version **1.7.0**{:itemprop="softwareVersion"} released on -**2015-04-27**{:itemprop="datePublished"}, [more news](news.html) -{: style="text-align: center; font-size: 80%"} - -
- - -[PHP Markdown Extra]: http://michelf.com/projects/php-markdown/extra/ -[Maruku]: http://maruku.rubyforge.org -[BlueFeather]: http://ruby.morphball.net/bluefeather/index_en.html diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/installation.page b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/installation.page deleted file mode 100644 index ffb2221..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/installation.page +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: Installation -in_menu: true -sort_info: 5 ---- -# Download & Installation - -## Dependencies - -Since kramdown is written in Ruby, you just need the [Ruby interpreter](http://www.ruby-lang.org), -version 1.8.5, 1.8.6, 1.8.7, 1.9.2, 1.9.3 or 2.0.0. There are no other dependencies. - - -## Compatibility Notes - -kramdown should work on any platform which supports Ruby. It has been successfully tested on the -following platforms: - -* Linux with Ruby 1.8.5, 1.8.6, 1.8.7, 1.9.2, 1.9.3, 2.0.0 and jruby 1.7.3. - -See the platform specific installation notes for more information! - - -## Platform Specific Installation Instructions - -### Linux - -There are a variety of Linux distributions out there with different package management systems. So -we will focus on instructions for Ubuntu 9.04 here (which should probably also work for any newer -Ubuntu version or any recent Debian based distribution). - -After running the following commands, kramdown is installed and ready to use: - - sudo aptitude install ruby rubygems - sudo gem install kramdown - -> You will also need to add `export PATH=$PATH:/var/lib/gems/1.9/bin` to your `~/.bashrc` because -> this is the binary path the executable files get installed to. - - -### Mac OS X - -Mac OS X Snow Leopard comes with Ruby and Rubygems preinstalled. So installing kramdown is as easy -as running: - - sudo gem install kramdown - - -### Windows - -You need to install Ruby first. This can easily be done by using the [RubyInstaller] - just download -the installation binary and run it. After that open a command shell (select `Start -> Run...`, then -enter `cmd` and click on `Ok`) and type in the following: - - gem install kramdown - -[RubyInstaller]: http://rubyinstaller.org - - -## Generic Installation Instructions - - -### Using Rubygems - -If you are using Rubygems, installing the latest version of kramdown is as simple as executing - - gem install kramdown - - -### Manual Installation - -The latest version of kramdown can always be downloaded as `.tar.gz` or `.zip` via the [Github -releases page][ghreleases]. After the download the package needs to be decompressed and then you can -install kramdown using the included `setup.rb` installation method: - - $ ruby setup.rb config - $ ruby setup.rb setup - $ ruby setup.rb install - -[ghreleases]: https://github.com/gettalong/kramdown/releases - - -### Using the repository version - -kramdown uses git as its versioning system and kramdown's repository is hosted on GitHub. The -repository always contains a clean state of the current development version of kramdown. To check -out kramdown use the following command: - - git clone git://github.com/gettalong/kramdown.git diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/links.markdown b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/links.markdown deleted file mode 100644 index 6baa05a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/links.markdown +++ /dev/null @@ -1,6 +0,0 @@ -[Maruku]: http://maruku.rubyforge.org -[PHP Markdown Extra]: http://michelf.com/projects/php-markdown/extra/ -[Pandoc]: http://johnmacfarlane.net/pandoc/ -[MathJax]: http://www.mathjax.org -[BlueCloth]: http://deveiate.org/projects/BlueCloth -[RedCloth]: http://redcloth.org/ diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/metainfo b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/metainfo deleted file mode 100644 index efce601..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/metainfo +++ /dev/null @@ -1,3 +0,0 @@ ---- alcn -[converter/*.html, parser/*.html, documentation.en.html, options.en.html, tests.en.html]: - template: ../documentation.template diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/news.feed b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/news.feed deleted file mode 100644 index 65e511f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/news.feed +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: kramdown News -description: kramdown - a fast, pure Ruby Markdown-superset converter -author: Thomas Leitner -author_url: http://kramdown.gettalong.org -entries: {alcn: news/*.html, sort: sort_info, reverse: true, limit: 10} -versions: - atom: - diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/news.page b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/news.page deleted file mode 100644 index b0f7f42..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/news.page +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: News -in_menu: false -sort_info: 30 ---- pipeline:tags,blocks,fragments - -

News

- -Atom-Feed - - - ---- name:newsdata pipeline:erb -<% -opts = {:alcn => '/news/*.html', :sort => 'sort_info', :reverse => true, :flatten => true} -context.website.ext.item_tracker.add(context.dest_node, :nodes, :node_finder_option_set, - {:opts => opts, :ref_alcn => context.node.alcn}, :content) -context.website.ext.node_finder.find(opts, context.node).each do |node| - # context.options['contentprocessor.kramdown.options'] = {:auto_id_prefix => node.lcn.tr('.', '-')} -%> - -
-
- Published on <%= node['created_at'].strftime("%A, %d %B %Y") %> -
-<%= context.render_block(:name => 'content', :chain => [node]) %> -
- -<% end %> diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/options.page b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/options.page deleted file mode 100644 index 6b8bb48..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/options.page +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Options ---- -## Options - -The behaviour of kramdown can be adjusted via the available options. - -Options can be specified in multiple ways: - -On the command line -: The `kramdown` binary allows setting any option by using command line switches. - - For example, the following command will disable automatic header ID generation and defines the - first footnote number as 5: - - ~~~ - $ kramdown --no-auto-ids --footnote-nr 5 - ~~~ - - As you can see all underscores in option names have to be replaced with dashes. The built-in help - of the binary as well as the man-page show all available options. - -Within a kramdown document -: By using the special extension syntax, it is possible to set options within a document. - - Using the above example, the options would be set like this within a document: - - ~~~ - {::options auto_ids="false" footnote_nr="5" /} - ~~~ - -Using Ruby code - -: If you are using kramdown as a library, you can pass any options as second parameter to the - `Kramdown::Document.new` method. - - Again, using the above example you would initalize the kramdown document class as follows: - - ~~~ ruby - Kramdown::Document.new(source_text, \{auto_ids: false, footnote_nr: 5}) - ~~~ - - -## Available Options - -Below is a list of all currently available options. Have a look at the documentation of a converter -or parser to see directly which options they support! - -{options: {items: all}} diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/quickref.page b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/quickref.page deleted file mode 100644 index f21663a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/quickref.page +++ /dev/null @@ -1,599 +0,0 @@ ---- -title: Quick Reference -in_menu: true -sort_info: 9 ---- name:sidebar -

Contents

- -{menu: {options: {descendants: true, levels: [2,6]}}} ---- name:content -# Quick Reference - -Below are examples of all available structural elements that can be used in a kramdown text. Since -the kramdown syntax is a superset of the Markdown syntax, only a small part of the available syntax -is not available in standard Markdown syntax. Note, that only the most basic syntax information is -given. However, a link to the detailed syntax for each element is provided (which also details the -differences to the standard Markdown syntax). The quick reference is for version **<%= -::Kramdown::VERSION %>** of the syntax documentation. - -kramdown has two main classes of elements: block and span-level elements. Block-level elements are -used to create paragraphs, headers, lists and so on whereas span-level elements are used to markup -text phrases as emphasized, as a link and so on. - -All examples below feature the kramdown source, the converted HTML source (shown when hovering over -the kramdown source) and the output as it appears in the browser. This looks like this: - - - - - - -
kramdown example code
Example code converted to HTML
-
-Live browser view of example code -
-
- - -# Block-level Elements - Main Structural Elements - -## Paragraphs - -{kdlink: {oid: paragraphs, part: "paragraphs"}} - -Consecutive lines of text are considered to be one paragraph. As with other block level elements you -have to add a blank line to separate it from the following block-level element: - -{kdexample::} -The first paragraph. - -Another paragraph -{kdexample} - -Explicit line breaks in a paragraph can be made by using two spaces or two backslashes at the end of a line: - -{kdexample::} -This is a paragraph -which contains a hard line break. -{kdexample} - - -## Headers - -{kdlink: {oid: headers, part: "headers"}} - -kramdown supports Setext style headers and atx style headers. A header must always be preceded by a -blank line except at the beginning of the document: - - -{kdexample::} -First level header -================== - -Second level header -------------------- -{kdexample} - -{kdexample::} -# H1 header - -## H2 header - -### H3 header - -#### H4 header - -##### H5 header - -###### H6 header -{kdexample} - -If you set the option `auto_ids` to `false` (for example, by using the `options` extension, see -[Extensions](#extensions)), then the automatic header ID generation is turned off: - -{kdexample::} -{::options auto_ids="false" /} - -# A header without an ID -{kdexample} - - -## Blockquotes - -{kdlink: {oid: blockquotes, part: "blockquotes"}} - -A blockquote is started using the `>` marker followed by an optional space; all following lines that -are also started with the blockquote marker belong to the blockquote. You can use any block-level -elements inside a blockquote: - -{kdexample::} -> A sample blockquote. -> -> >Nested blockquotes are -> >also possible. -> -> ## Headers work too -> This is the outer quote again. -{kdexample} - -You may also be lazy with the `>` markers as long as there is no blank line: - -{kdexample::} -> This is a blockquote -continued on this -and this line. - -But this is a separate paragraph. -{kdexample} - -## Code Blocks - -{kdlink: {oid: code-blocks, part: "code blocks"}} - -kramdown supports two different code block styles. One uses lines indented with either four spaces -or one tab whereas the other uses lines with tilde characters as delimiters -- therefore the content -does not need to be indented: - -{kdexample::} - This is a sample code block. - - Continued here. -{kdexample} - -{kdexample::} -~~~~~~ -This is also a code block. -~~~ -Ending lines must have at least as -many tildes as the starting line. -~~~~~~~~~~~~ -{kdexample} - -The following is a code block with a language specified: - -{kdexample::} -~~~ ruby -def what? - 42 -end -~~~ -{kdexample} - - -## Horizontal Rules - -{kdlink: {oid: horizontal-rules, part: "horizontal rules"}} - -It is easy to insert a horizontal rule in kramdown: just use three or more asterisks, dashes or -underscores, optionally separated by spaces or tabs, on an otherwise blank line: - -{kdexample::} -* * * - -\--- - - _ _ _ _ - ---------------- -{kdexample} - - -## Lists - -{kdlink: {oid: lists, part: "lists"}} - -kramdown supports ordered and unordered lists. Ordered lists are started by using a number followed -by a period, a space and then the list item text. The content of a list item consists of block-level -elements. All lines which have the same indent as the text of the line with the list marker belong -to the list item: - -{kdexample::} -1. This is a list item -2. And another item -2. And the third one - with additional text -{kdexample} - -As with block quotes, you may be lazy when using the list item marker: - -{kdexample::} -* A list item -with additional text -{kdexample} - -As the content consists of block-level elements you can do things like the following: - -{kdexample::} -1. This is a list item - - > with a blockquote - - # And a header - -2. Followed by another item -{kdexample} - -Nested lists are also easy to create: - -{kdexample::} -1. Item one - 1. sub item one - 2. sub item two - 3. sub item three -2. Item two -{kdexample} - -Lists can occur directly after other block-level elements, however, there has to be at least one -blank line if you want to follow a paragraph with a list: - -{kdexample::} -This is a paragraph. -1. This is NOT a list. - -1. This is a list! -{kdexample} - -Unordered lists are started by using an asterisk, a dash or a plus sign (they can be mixed) and a -space. Apart from that unordered lists follow the same rules as ordered lists: - -{kdexample::} -* Item one -+ Item two -- Item three -{kdexample} - -## Definition Lists - -{kdlink: {oid: definition-lists, part: "definition lists"}} - -A definition list works similar to a normal list and is used to associate definitions with terms. -Definition lists are started when a normal paragraph is followed by a line starting with a colon and -then the definition text. One term can have many definitions and multiple terms can have the same -definition. Each line of the preceding paragraph is assumed to contain one term, for example: - -{kdexample::} -term -: definition -: another definition - -another term -and another term -: and a definition for the term -{kdexample} - -If you insert a blank line before a definition (note: there must only be one blank line between the -terms and the first definition), the definition will be wrapped in a paragraph: - -{kdexample::} -term - -: definition -: definition -{kdexample} - -Each term can be styled using span-level elements and each definition is parsed as block-level -elements, i.e. you can use any block-level in a definition. Just use the same indent for the lines -following the definition line: - -{kdexample::} -This *is* a term - -: This will be a para - - > a blockquote - - # A header -{kdexample} - - -## Tables - -{kdlink: {oid: tables, part: "tables"}} - -kramdown supports a syntax for creating simple tables. A line starting with a pipe character (`|`) -starts a table row. However, if the pipe characters is immediately followed by a dash (`-`), a -separator line is created. Separator lines are used to split the table header from the table body -(and optionally align the table columns) and to split the table body into multiple parts. If the -pipe character is followed by an equal sign (`=`), the tables rows below it are part of the table -footer. - -{kdexample::} -| A simple | table | -| with multiple | lines| -{kdexample} - -{kdexample::} -| Header1 | Header2 | Header3 | -|:--------|:-------:|--------:| -| cell1 | cell2 | cell3 | -| cell4 | cell5 | cell6 | -|---- -| cell1 | cell2 | cell3 | -| cell4 | cell5 | cell6 | -|===== -| Foot1 | Foot2 | Foot3 -{: rules="groups"} -{kdexample} - - -## HTML elements - -{kdlink: {oid: html-blocks, part: "HTML blocks"}} - -kramdown allows you to use block-level HTML tags (`div`, `p`, `pre`, ...) to markup whole blocks of -text -- just start a line with a block-level HTML tag. kramdown syntax is normally not processed -inside an HTML tag but this can be changed with the `parse_block_html` option. If this options is -set to `true`, then the content of a block-level HTML tag is parsed by kramdown either as block -level or span-level text, depending on the tag: - -{kdexample::} -
-Something that stays right and is not wrapped in a para. -
- -{::options parse_block_html="true" /} - -
-This is wrapped in a para. -
-

-This can contain only *span* level elements. -

-{kdexample} - - -## Block Attributes - -{kdlink: {oid: block-ials, part: "block IALs"}} -{kdlink: {oid: attribute-list-definitions, part: "ALDs"}} - -You can assign any attribute to a block-level element. Just directly follow the block with a *block -inline attribute list* (or short: block IAL). A block IAL consists of a left curly brace, followed -by a colon, the attribute definitions and a right curly brace. Here is a simple example which sets the -`title` attribute of a block quote: - -{kdexample::} -> A nice blockquote -{: title="Blockquote title"} -{kdexample} - -As one often wants to set one or more CSS classes on an element, there is an easy shortcut: - -{kdexample::} -> A nice blockquote -{: .class1 .class2} -{kdexample} - -A shortcut for setting the ID is also provided. Just prefix the ID with a hash symbol: - -{kdexample::} -> A nice blockquote -{: #with-an-id} -{kdexample} - -Sometimes one wants to use the same attributes for many elements. kramdown allows you to define the -attributes in one place with an *attribute list definition* (or short: ALD) and just reference this -definition in a block IAL. An ALD has the same structure as a block IAL but the colon has to be -replace with a colon, the reference name and another colon. By just using the reference name as-is -in a block IAL, one can include the attributes of the referenced ALD: - -{kdexample::} -{:refdef: .c1 #id .c2 title="title"} -paragraph -{: refdef} -{kdexample} - -The order in a block IAL or ALD is important because later defined attributes overwrite (with the -exception of the shortcut for CSS classes) prior defined attributes: - -{kdexample::} -{:refdef: .c1 #id .c2 title="title"} -paragraph -{: refdef .c3 title="t" #para} -{kdexample} - - -## Extensions - -{kdlink: {oid: extensions, part: "extensions"}} - -kramdown provides some less used functionality through a common syntax. This will allow the easy -addition of other extensions if need arises. Currently, there are extensions for ignoring text (i.e. -treating text as comment), for inserting arbitrary text as-is into the output and for setting -kramdown options. - -Here is an example that shows how to insert comments into text: - -{kdexample::} -This is a paragraph -{::comment} -This is a comment which is -completely ignored. -{:/comment} -... paragraph continues here. - -Extensions can also be used -inline {::nomarkdown}**see**{:/}! -{kdexample} - -As one can see from the above example, the syntax for extensions is nearly identical to that of -ALDs. However, there is no trailing colon after the extension name and the extension end tag needs a -slash between the colon and the extension name. One can also use the short form of the end tag, i.e. -`{:/}`. Attribute definitions can be specified on the start tag by separating them with a space from -the extension name. Also, if the extension does not have a body, there needs to be a slash right -before the closing brace: - -{kdexample::} -{::options auto_ids="false" /} - -# Header without id -{kdexample} - - - - -# Span-Level Elements - Text Modifiers - -## Emphasis - -{kdlink: {oid: emphasis, part: "emphasis"}} - -Emphasis can be added to text by surrounding the text with either asterisks or underscores: - -{kdexample::} -This is *emphasized*, -_this_ too! -{kdexample} - -Strong emphasis can be done by doubling the delimiters: - -{kdexample::} -This is **strong**, -__this__ too! -{kdexample} - -The form with the asterisks can also be used to markup parts of words: - -{kdexample::} -This w**ork**s as expected! -{kdexample} - - -## Links and Images - -{kdlink: {oid: links-and-images, part: "links and images"}} - -A simple link can be created by surrounding the text with square brackets and the link URL with -parentheses: - -{kdexample::} -A [link](http://kramdown.gettalong.org) -to the kramdown homepage. -{kdexample} - -You can also add title information to the link: - -{kdexample::} -A [link](http://kramdown.gettalong.org "hp") -to the homepage. -{kdexample} - -There is another way to create links which does not interrupt the text flow. The URL and title are -defined using a reference name and this reference name is then used in square brackets instead of -the link URL: - -{kdexample::} -A [link][kramdown hp] -to the homepage. - -[kramdown hp]: http://kramdown.gettalong.org "hp" -{kdexample} - -If the link text itself is the reference name, the second set of square brackets can be omitted: - -{kdexample::} -A link to the [kramdown hp]. - -[kramdown hp]: http://kramdown.gettalong.org "hp" -{kdexample} - -Images can be created in a similar way: just use an exclamation mark before the square brackets. The -link text will become the alternative text of the image and the link URL specifies the image source: - -{kdexample::} -An image: ![gras](img/image.jpg) -{kdexample} - - -## Inline Code - -{kdlink: {oid: code-spans, part: "code spans"}} - -Text phrases can be easily marked up as code by surrounding them with backticks: - -{kdexample::} -Use `Kramdown::Document.new(text).to_html` -to convert the `text` in kramdown -syntax to HTML. -{kdexample} - -If you want to use literal backticks in your code, just use two or more backticks as delimiters. The -space right after the beginning delimiter and the one right before the closing delimiter are ignore: - -{kdexample::} -Use backticks to markup code, -e.g. `` `code` ``. -{kdexample} - - -## Footnotes - -{kdlink: {oid: footnotes, part: "footnotes"}} - -Footnotes can easily be used in kramdown. Just set a footnote marker (consists of square brackets -with a caret and the footnote name inside) in the text and somewhere else the footnote definition (which -basically looks like a reference link definition): - -{kdexample::} -This is a text with a -footnote[^1]. - -[^1]: And here is the definition. -{kdexample} - -The footnote definition can contain any block-level element, all lines following a footnote -definition indented with four spaces or one tab belong to the definition: - -{kdexample::} -This is a text with a -footnote[^2]. - -[^2]: - And here is the definition. - - > With a quote! -{kdexample} - -As can be seen above the footnote name is only used for the anchors and the numbering is done -automatically in document order. Repeated footnote markers will link to the same footnote -definition. - - -## Abbreviations - -{kdlink: {oid: abbreviations, part: "abbreviations"}} - -Abbreviations will work out of the box once you add an abbreviation definition. So you can just -write the text and add the definitions later on. - -{kdexample::} -This is an HTML -example. - -*[HTML]: Hyper Text Markup Language -{kdexample} - - -## HTML Elements - -{kdlink: {oid: html-spans, part: "HTML spans"}} - -HTML is not only supported on the block-level but also on the span-level: - -{kdexample::} -This is written in -red. -{kdexample} - - -## Inline Attributes - -{kdlink: {oid: span-ials, part: "span IALs"}} - -As with a block-level element you can assign any attribute to a span-level elements using a *span -inline attribute list* (or short: span IAL). A span IAL has the same syntax as a block IAL and must -immediately follow the span-level element: - -{kdexample::} -This is *red*{: style="color: red"}. -{kdexample} diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/sidebar.template b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/sidebar.template deleted file mode 100644 index 9e462d6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/sidebar.template +++ /dev/null @@ -1,19 +0,0 @@ -

Support kramdown

- -

If you like kramdown and would like to support it, you are welcome to make a small -donation (PayPal or Pledgie) -- it will surely be appreciated! Thanks!

- -
- - - - -
- -Click here to lend your support to: kramdown and make a donation at www.pledgie.com ! - -

Sponsors

- -

GROSSWEBER provides software -development consulting and training services. We like to work on open source. We use it heavily. -We love kramdown!

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/sitemap.sitemap b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/sitemap.sitemap deleted file mode 100644 index 1f19756..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/sitemap.sitemap +++ /dev/null @@ -1,5 +0,0 @@ ---- -entries: - alcn: /**/*.html -default_change_freq: monthly ---- diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/syntax.page b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/syntax.page deleted file mode 100644 index 0c0fd9b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/doc/syntax.page +++ /dev/null @@ -1,1737 +0,0 @@ ---- -title: Syntax -in_menu: true -sort_info: 10 ---- name:sidebar -

Contents

- -{menu: {options: {descendants: true, levels: [2,6]}}} ---- name:content - -# kramdown Syntax - -This is version **<%= ::Kramdown::VERSION %>** of the syntax documentation. - -The kramdown syntax is based on the Markdown syntax and has been enhanced with features that are -found in other Markdown implementations like [Maruku], [PHP Markdown Extra] and [Pandoc]. However, -it strives to provide a strict syntax with definite rules and therefore isn't completely compatible -with Markdown. Nonetheless, most Markdown documents should work fine when parsed with kramdown. All -places where the kramdown syntax differs from the Markdown syntax are highlighted. - -Following is the complete syntax definition for all elements kramdown supports. Together with the -documentation on the available converters, it is clearly specified what you will get when a kramdown -document is converted. - - -## Source Text Formatting - -A kramdown document may be in any encoding, for example ASCII, UTF-8 or ISO-8859-1, and the output -will have the same encoding as the source. - -The document consists of two types of elements, block-level elements and span-level elements: - -* Block-level elements define the main structure of the content, for example, what part of the text - should be a paragraph, a list, a blockquote and so on. - -* Span-level elements mark up small text parts as, for example, emphasized text or a link. - -Thus span-level elements can only occur inside block-level elements or other span-level elements. - -You will often find references to the "first column" or "first character" of a line in a block-level -element descriptions. Such a reference is always to be taken relative to the current indentation -level because some block-level elements open up a new indentation level (e.g. blockquotes). The -beginning of a kramdown document opens up the default indentation level which begins at the first -column of the text. - - -### Line Wrapping - -Some lightweight markup syntax don't work well in environments where lines are hard-wrapped. For -example, this is the case with many email programs. Therefore kramdown allows content like -paragraphs or blockquotes to be hard-wrapped, i.e. broken across lines. This is sometimes referred -to as "lazy syntax" since the indentation or line prefix required for the first line of content is -not required for the consecutive lines. - -Block-level elements that support line wrapping always end when one of the following conditions is -met: - -* a [blank line](#blank-lines), an [EOB marker line](#eob-marker), a [block IAL](#block-ials) or the - end of the document (i.e. a [block boundary](#block-boundaries)), - -* or an [HTML block](#html-blocks). - -Line wrapping is allowed throughout a kramdown document but there are some block-level elements that -do *not* support being hard-wrapped: - -[headers](#headers) - -: This is not an issue in most situations since headers normally fit on one line. If a header text - gets too long for one line, you need to use HTML syntax instead. - -[fenced code blocks](#fenced-code-blocks) - -: The delimiting lines of a fenced code block do not support hard-wrapping. Since everything between - the delimiting lines is taken as is, the content of a fenced code block does also not support - hard-wrapping. - -[definition list terms](#definition-lists) - -: Each definition term has to appear on a separate line. Hard-wrapping would therefore introduce - additional definition terms. The definitions themselves, however, do support hard-wrapping. - -[tables](#tables) - -: Since each line of a kramdown table describes one table row or a separator, it is not possible to - hard-wrap tables. - -**Note** that it is **NOT** recommended to use lazy syntax to write a kramdown document. The -flexibility that the kramdown syntax offers due to the issue of line wrapping hinders readability -and should therefore not be used. - - -### Usage of Tabs - -kramdown assumes that tab stops are set at multiples of four. This is especially important when -using tabs for indentation in lists. Also, tabs may only be used at the beginning of a line when -indenting text and must not be preceded by spaces. Otherwise the results may be unexpected. - - -### Automatic and Manual Escaping - -Depending on the output format, there are often characters that need special treatment. For example, -when converting a kramdown document to HTML one needs to take care of the characters `<`, `>` and -`&`. To ease working with these special characters, they are automatically and correctly escaped -depending on the output format. - -This means, for example, that you can just use `<`, `>` and `&` in a kramdown document and need not -think about when to use their HTML entity counterparts. However, if you *do use* HTML entities or -HTML tags which use one of the characters, the result will be correct nonetheless! - -Since kramdown also uses some characters to mark-up the text, there needs to be a way to escape -these special characters so that they can have their normal meaning. This can be done by using -backslash escapes. For example, you can use a literal back tick like this: - - This \`is not a code\` span! - -Following is a list of all the characters (character sequences) that can be escaped: - - \ backslash - . period - * asterisk - _ underscore - + plus - - minus - = equal sign - ` back tick - ()[]{}<> left and right parens/brackets/braces/angle brackets - # hash - ! bang - << left guillemet - >> right guillemet - : colon - | pipe - " double quote - ' single quote - $ dollar sign - - -## Block Boundaries - -Some block-level elements have to start and/or end on so called block boundaries, as stated in their -documentation. There are two cases where block boundaries come into play: - -* If a block-level element has to start on a block boundary, it has to be preceded by either a - [blank line](#blank-lines), an [EOB marker](#eob-marker), a [block IAL](#block-ials) or it has to - be the first element. - -* If a block-level element has to end on a block boundary, it has to be followed by either a [blank - line](#blank-lines), an [EOB marker](#eob-marker), a [block IAL](#block-ials) or it has to be the - last element. - - - -# Structural Elements - -All structural elements are block-level elements and they are used to structure the content. They -can mark up some text as, for example, a simple paragraph, a quote or as a list item. - - -## Blank lines - -Any line that just contains white space characters such as spaces and tabs is considered a blank -line by kramdown. One or more consecutive blank lines are handled as one empty blank line. Blank -lines are used to separate block-level elements from each other and in this case they don't have -semantic meaning. However, there are some cases where blank lines do have a semantic meaning: - -* When used in headers -- see the [headers section](#headers) -* When used in code blocks -- see the [code blocks section](#code-blocks) -* When used in lists -- see the [lists section](#lists) -* When used in math blocks -- see the [math blocks section](#math-blocks) -* When used for elements that have to start/end on [block boundaries](#block-boundaries) - - -## Paragraphs - -Paragraphs are the most used block-level elements. One or more consecutive lines of text are -interpreted as one paragraph. The first line of a paragraph may be indented up to three spaces, the -other lines can have any amount of indentation because paragraphs support [line -wrapping](#line-wrapping). In addition to the rules outlined in the section about line wrapping, a -paragraph ends when a [definition list line](#definition-lists) is encountered. - -You can separate two consecutive paragraphs from each other by using one or more blank lines. Notice -that a line break in the source does not mean a line break in the output (due to the [lazy -syntax](#line-wrapping))!. If you want to have an explicit line break (i.e. a `
` tag) you need -to end a line with two or more spaces or two backslashes! Note, however, that a line break on the -last text line of a paragraph is not possible and will be ignored. Leading and trailing spaces will -be stripped from the paragraph text. - -The following gives you an example of how paragraphs look like: - - This para line starts at the first column. However, - the following lines can be indented any number of spaces/tabs. - The para continues here. - - This is another paragraph, not connected to the above one. But - with a hard line break. \\ - And another one. -{: .show-whitespaces .ws-lr} - - -## Headers - -kramdown supports so called Setext style and atx style headers. Both forms can be used inside a -single document. - -### Setext Style - -Setext style headers have to start on a [block boundary](#block-boundaries) with a line of text (the -header text) and a line with only equal signs (for a first level header) or dashes (for a second -level header). The header text may be indented up to three spaces but any leading or trailing spaces -are stripped from the header text. The amount of equal signs or dashes is not significant, just one -is enough but more may look better. The equal signs or dashes have to begin at the first column. For -example: - - First level header - ================== - - Second level header - ------ - - Other first level header - = - -Since Setext headers start on block boundaries, this means in most situations that they have to be -preceded by a blank line. However, blank lines are not necessary after a Setext header: - - This is a normal - paragraph. - - And A Header - ------------ - And a paragraph - - > This is a blockquote. - - And A Header - ------------ - -However, it is generally a good idea to also use a blank line after a Setext header because it looks -more appropriate and eases reading of the document. - -> The original Markdown syntax allows one to omit the blank line before a Setext header. However, -> this leads to ambiguities and makes reading the document harder than necessary. Therefore it is -> not allowed in a kramdown document. -{: .markdown-difference} - -An edge case worth mentioning is the following: - - header - --- - para - -One might ask if this represents two paragraphs separated by a [horizontal rule](#horizontal-rules) -or a second level header and a paragraph. As suggested by the wording in the example, the latter is -the case. The general rule is that Setext headers are processed before horizontal rules. - -### atx Style - -atx style headers have to start on a [block boundary](#block-boundaries) with a line that contains -one or more hash characters and then the header text. No spaces are allowed before the hash -characters. The number of hash characters specifies the heading level: one hash character gives you -a first level heading, two a second level heading and so on until the maximum of six hash characters -for a sixth level heading. You may optionally use any number of hashes at the end of the line to -close the header. Any leading or trailing spaces are stripped from the header text. For example: - - # First level header - - ### Third level header ### - - ## Second level header ###### - -> Again, the original Markdown syntax allows one to omit the blank line before an atx style header. -{: .markdown-difference} - - -### Specifying a Header ID - -kramdown supports a nice way for explicitly setting the header ID which is taken from [PHP Markdown -Extra] and [Maruku]: If you follow the header text with an opening curly bracket (separated from the -text with a least one space), a hash, the ID and a closing curly bracket, the ID is set on the -header. If you use the trailing hash feature of atx style headers, the header ID has to go after the -trailing hashes. For example: - - Hello {#id} - ----- - - # Hello {#id} - - # Hello # {#id} - -> This additional syntax is not part of standard Markdown. -{: .markdown-difference} - - -## Blockquotes - -A blockquote is started using the `>` marker followed by an optional space and the content of the -blockquote. The marker itself may be indented up to three spaces. All following lines, whether they -are started with the blockquote marker or just contain text, belong to the blockquote because -blockquotes support [line wrapping](#line-wrapping). - -The contents of a blockquote are block-level elements. This means that if you are just using text as -content that it will be wrapped in a paragraph. For example, the following gives you one blockquote -with two paragraphs in it: - - > This is a blockquote. - > on multiple lines - that may be lazy. - > - > This is the second paragraph. - -Since the contents of a blockquote are block-level elements, you can nest blockquotes and use other -block-level elements (this is also the reason why blockquotes need to support line wrapping): - - > This is a paragraph. - > - > > A nested blockquote. - > - > ## Headers work - > - > * lists too - > - > and all other block-level elements - -Note that the first space character after the `>` marker does *not* count when counting spaces for -the indentation of the block-level elements inside the blockquote! So [code blocks](#code-blocks) -will have to be indented with five spaces or one space and one tab, like this: - - > A code block: - > - > ruby -e 'puts :works' - -[Line wrapping](#line-wrapping) allows one to be lazy but hinders readability and should therefore -be avoided, especially with blockquotes. Here is an example of using blockquotes with line wrapping: - - > This is a paragraph inside - a blockquote. - > - > > This is a nested paragraph - that continues here - > and here - > > and here - - -## Code Blocks - -Code blocks can be used to represent verbatim text like markup, HTML or a program fragment because -no syntax is parsed within a code block. - -### Standard Code Blocks - -A code block can be started by using four spaces or one tab and then the text of the code block. All -following lines containing text, whether they adhere to this syntax or not, belong to the code block -because code blocks support [line wrapping](#line-wrapping)). A wrapped code line is automatically -appended to the preceding code line by substituting the line break with a space character. The -indentation (four spaces or one tab) is stripped from each line of the code block. - -> The original Markdown syntax does not allow line wrapping in code blocks. -{: .markdown-difference} - -Note that consecutive code blocks that are only separate by [blank lines](#blank-lines) are merged -together into one code block: - - Here comes some code - - This text belongs to the same code block. - -If you want to have one code block directly after another one, you need to use an [EOB -marker](#eob-marker) to separate the two: - - Here comes some code - ^ - This one is separate. - -### Fenced Code Blocks - -> This alternative syntax is not part of the original Markdown syntax. The idea and syntax comes -> from the [PHP Markdown Extra] package. -{: .markdown-difference} - -kramdown also supports an alternative syntax for code blocks which does not use indented blocks but -delimiting lines. The starting line needs to begin with three or more tilde characters (`~`) and the -closing line needs to have at least the number of tildes the starting line has. Everything between -is taken literally as with the other syntax but there is no need for indenting the text. For -example: - - ~~~~~~~~ - Here comes some code. - ~~~~~~~~ - -If you need lines of tildes in such a code block, just start the code block with more tildes. For -example: - - ~~~~~~~~~~~~ - ~~~~~~~ - code with tildes - ~~~~~~~~ - ~~~~~~~~~~~~~~~~~~ - -This type of code block is especially useful for copy-pasted code since you don't need to indent the -code. - -### Language of Code Blocks - -You can tell kramdown the language of a code block by using an [IAL](#inline-attribute-lists): - - ~~~ - def what? - 42 - end - ~~~ - {: .language-ruby} - -The specially named class `language-ruby` tells kramdown that this code block is written in the Ruby -language. Such information can be used, for example, by converters to do syntax highlighting on the -code block. - -Fenced code blocks provide an easier way to specify the language, namely by appending the language -of the code block to the end of the starting line: - - ~~~ ruby - def what? - 42 - end - ~~~ - - -## Lists - -kramdown provides syntax elements for creating ordered and unordered lists as well as definition -lists. - -### Ordered and Unordered lists - -Both ordered and unordered lists follow the same rules. - -A list is started with a list marker (in case of unordered lists one of `+`, `-` or `*` -- you can -mix them -- and in case of ordered lists a number followed by a period) followed by one tab or at -least one space, optionally followed by an [IAL](#inline-attribute-lists) that should be applied to -the list item and then the first part of the content of the list item. The leading tabs or spaces -are stripped away from this first line of content to allow for a nice alignment with the following -content of a list item (see below). All following list items with the same marker type (unordered or -ordered) are put into the same list. The numbers used for ordered lists are irrelevant, an ordered -list always starts at 1. - -The following gives you an unordered list and an ordered list: - - * kram - + down - - now - - 1. kram - 2. down - 3. now - -> The original Markdown syntax allows the markers of ordered and unordered lists to be mixed, the -> first marker specifying the list type (ordered or unordered). This is not allowed in kramdown. As -> stated, the above example will give you two lists (an unordered and an ordered) in kramdown and -> only one unordered list in Markdown. -{: .markdown-difference} - -The first list marker in a list may be indented up to three spaces. The column number of the first -non-space character which appears after the list item marker on the same line specifies the -indentation that has to be used for the following lines of content of the list item. If there is no -such character, the indentation that needs to be used is four spaces or one tab. Indented lines may -be followed by lines containing text with any amount of indentation due to [line -wrapping](#line-wrapping). Note, however, that in addition to the rules outlined in the section -about line wrapping, a list item also ends when a line with another list item marker is encountered --- see the next paragraph. - -The indentation is stripped from the content and the content (note that the content naturally also -contains the content of the line with the item marker) is processed as text containing block-level -elements. All other list markers in the list may be indented up to three spaces or the number of -spaces used for the indentation of the last list item minus one, whichever number is smaller. For -example: - - * This is the first line. Since the first non-space characters appears in - column 3, all other indented lines have to be indented 2 spaces. - However, one could be lazy and not indent a line but this is not - recommended. - * This is the another item of the list. It uses a different number - of spaces for indentation which is okay but should generally be avoided. - * The list item marker is indented 3 spaces which is allowed but should - also be avoided and starts the third list item. Note that the lazy - line in the second list item may make you believe that this is a - sub-list which it isn't! So avoid being lazy! - -So, while the above is possible and creates one list with three items, it is not advised to use -different (marker and list content) indents for same level list items as well as lazy indentation! -It is much better to write such a list in the following way: - - * This is the first list item bla blabla blabla blabla blabla blabla - blabla blabla blabla blabla blabla blabla blabla blabla blabla blabla - blabla blabla blabla bla - * This is the another item of the list. bla blabla blabla blabla blabla - blabla blabla blabla blabla blabla blabla blabla blabla blabla blabla - -> The original Markdown syntax also allows you to indent the marker, however, the behaviour of what -> happens with the list items is not clearly specified and may surprise you. -> -> Also, Markdown uses a fixed number of spaces/tabs to indent the lines that belong to a list item! -{: .markdown-difference} - -When using tabs for indenting the content of a list item, remember that tab stops occur at multiples -of four for kramdown. Tabs are correctly converted to spaces for calculating the indentation. For -example: - - * Using a tab to indent this line, the tab only counts as three spaces - and therefore the overall indentation is four spaces. - - 1. The tab after the marker counts here as three spaces. Since the - indentation of the marker is three spaces and the marker itself - takes two characters, the overall indentation needed for the - following lines is eight spaces or two tabs. - -It is clear that you might get unexpected results if you mix tabs and spaces or if you don't have -the tab stops set to multiples of four in your editor! Therefore this should be avoided! - -The content of a list item is made up of either text or block-level elements. Simple list items only -contain text like in the above examples. They are not even wrapped in a paragraph tag. If the first -list text is followed by one or more blank lines, it will be wrapped in a paragraph tag: - - * kram - - * down - * now - -In the above example, the first list item text will be wrapped in a paragraph tag since it is -followed by a blank line whereas the second list item contains just text. There is obviously a -problem for doing this with the last list item when it contains only text. You can circumvent this -by leaving a blank line after the last list item and using an EOB marker: - - * Not wrapped in a paragraph - * Wrapped in a paragraph due to the following blank line. - - * Also wrapped in a paragraph due to the - following blank line and the EOB marker. - - ^ - -The text of the last list item is also wrapped in a paragraph tag if *all* other list items contain -a proper paragraph as first element. This makes the following use case work like expected, i.e. -*all* the list items are wrapped in paragraphs: - - * First list item - - * Second list item - - * Last list item - -> The original Markdown syntax page specifies that list items which are separated by one or more -> blank lines are wrapped in paragraph tags. This means that the first text will also be wrapped in -> a paragraph if you have block-level elements in a list which are separated by blank lines. The -> above rule is easy to remember and lets you exactly specify when the first list text should be -> wrapped in a paragraph. The idea for the above rule comes from the [Pandoc] package. -{: .markdown-difference} - -As seen in the examples above, blank lines between list items are allowed. - -Since the content of a list item can contain block-level elements, you can do the following: - - * First item - - A second paragraph - - * nested list - - > blockquote - - * Second item - -However, there is a problem when you want to have a code block immediately after a list item. You -can use an EOB marker to circumvent this problem: - - * This is a list item. - - The second para of the list item. - ^ - A code block following the list item. - -You can have any block-level element as first element in a list item. However, as described above, -the leading tabs or spaces of the line with the list item marker are stripped away. This leads to a -problem when you want to have a code block as first element. The solution to this problem is the -following construct: - - * - This is a code block (indentation needs to be 4(1)+4(1) - spaces (tabs)). -{: .show-whitespaces .ws-lr} - -Note that the list marker needs to be followed with at least one space or tab! Otherwise the line is -not recognized as the start of a list item but interpreted as a paragraph containing the list -marker. - -If you want to have one list directly after another one (both with the same list type, i.e. ordered -or unordered), you need to use an EOB marker to separate the two: - - * List one - ^ - * List two - -Since paragraphs support [line wrapping](#line-wrapping), it would usually not be possible to create -compact nested list, i.e. a list where the text is not wrapped in paragraphs because there is no -blank line but a sub list after it: - - * This is just text. - * this is a sub list item - * this is a sub sub list item - * This is just text, - spanning two lines - * this is a nested list item. - -However, this is an often used syntax and is therefore support by kramdown. - -If you want to start a paragraph with something that looks like a list item marker, you need to -escape it. This is done by escaping the period in an ordered list or the list item marker in an -unordered list: - - 1984\. It was great - \- others say that, too! - -As mentioned at the beginning, an optional IAL for applying attributes to a list item can be used -after the list item marker: - - * {:.cls} This item has the class "cls". - Here continues the above paragraph. - - * This is a normal list item. - - -### Definition Lists - -> This syntax feature is not part of the original Markdown syntax. The idea and syntax comes from -> the [PHP Markdown Extra] package. -{: .markdown-difference} - -Definition lists allow you to assign one or more definitions to one or more terms. - -A definition list is started when a normal paragraph is followed by a line with a definition marker -(a colon which may be optionally indented up to three spaces), then at least one tab or one space, -optionally followed by an [IAL](#inline-attribute-lists) that should be applied to the list item and -then the first part of the definition. The line with the definition marker may optionally be -separated from the preceding paragraph by a blank line. The leading tabs or spaces are stripped away -from this first line of the definition to allow for a nice alignment with the following definition -content. Each line of the preceding paragraph is taken to be a term and the lines separately parsed -as span-level elements. - -The following is a simple definition list: - - kramdown - : A Markdown-superset converter - - Maruku - : Another Markdown-superset converter - -The column number of the first non-space character which appears after a definition marker on the -same line specifies the indentation that has to be used for the following lines of the definition. -If there is no such character, the indentation that needs to be used is four spaces or one tab. -Indented lines may be followed by lines containing text with any amount of indentation due to [line -wrapping](#line-wrapping). Note, however, that in addition to the rules outlined in the section -about line wrapping, a list item also ends when a line with another definition marker is encountered. - -The indentation is stripped from the definition and it (note that the definition naturally also -contains the content of the line with the definition marker) is processed as text containing block -level elements. If there is more than one definition, all other definition markers for the term may -be indented up to three spaces or the number of spaces used for the indentation of the last -definition minus one, whichever number is smaller. For example: - - definition term 1 - definition term 2 - : This is the first line. Since the first non-space characters appears in - column 3, all other lines have to be indented 2 spaces (or lazy syntax may - be used after an indented line). This tells kramdown that the lines - belong to the definition. - : This is the another definition for the same term. It uses a - different number of spaces for indentation which is okay but - should generally be avoided. - : The definition marker is indented 3 spaces which is allowed but - should also be avoided. - -So, while the above is possible and creates a definition list with two terms and three definitions -for them, it is not advised to use different (definition marker and definition) indents in the same -definition list as well as lazy indentation! - -The definition for a term is made up of text and/or block-level elements. If a definition is *not* -preceded by a blank line, the first part of the definition will just be text if it would be a -paragraph otherwise: - - definition term - : This definition will just be text because it would normally be a - paragraph and the there is no preceding blank line. - - > although the definition contains other block-level elements - - : This definition *will* be a paragraph since it is preceded by a - blank line. - -The rules about having any block-level element as first element in a list item also apply to a -definition. - - -## Tables - -> This syntax feature is not part of the original Markdown syntax. The syntax is based on the one -> from the [PHP Markdown Extra] package. -{: .markdown-difference} - -Sometimes one wants to include simple tabular data in a kramdown document for which using a -full-blown HTML table is just too much. kramdown supports this with a simple syntax for ASCII -tables. - -Tables can be created with or without a leading pipe character: If the first line of a table -contains a pipe character at the start of the line (optionally indented up to three spaces), then -all leading pipe characters (i.e. pipe characters that are only preceded by whitespace) are ignored -on all table lines. Otherwise they are not ignored and count when dividing a table line into table -cells. - -There are four different line types that can be used in a table: - -* *Table rows* define the content of a table. - - A table row is any line that contains at least one pipe character and is not identified as any - other type of table line! The table row is divided into individual table cells by pipe characters. - An optional trailing pipe character is ignored. Note that literal pipe characters need to be - escaped *except* if they occur in code spans or HTML `` elements! - - Header rows, footer rows and normal rows are all done using these table rows. Table cells can only - contain a single line of text, no multi-line text is supported. The text of a table cell is parsed - as span-level elements. - - Here are some example table rows: - - | First cell|Second cell|Third cell - | First | Second | Third | - - First | Second | | Fourth | - -* *Separator lines* are used to split the table body into multiple body parts. - - A separator line is any line that contains only pipes, dashes, pluses, colons and spaces and which - contains at least one dash and one pipe character. The pipe and plus characters can be used to - visually separate columns although this is not needed. Multiple separator lines after another are - treated as one separator line. - - Here are some example separator lines: - - |----+----| - +----|----+ - |---------| - |- - | :-----: | - -|- - -* The first separator line after at least one table row is treated specially, namely as *header - separator line*. It is used to demarcate header rows from normal table rows and/or to set column - alignments. All table rows above the header separator line are considered to be header rows. - - The header separator line can be specially formatted to contain column alignment definitions: An - alignment definition consists of an optional space followed by an optional colon, one or more - dashes, an optional colon and another optional space. The colons of an alignment definition are - used to set the alignment of a column: if there are no colons, the column uses the default - alignment, if there is a colon only before the dashes, the column is left aligned, if there are - colons before and after the dashes, the column is center aligned and if there is only a colon - after the dashes, the column is right aligned. Each alignment definition sets the alignment for - one column, the first alignment definition for the first column, the second alignment definition - for the second column and so on. - - Here are some example header separator lines with alignment definitions: - - |---+---+---| - + :-: |:------| ---:| - | :-: :- -: - - :-: | :- - -* A *footer separator line* is used to demarcate footer rows from normal table rows. All table rows - below the footer separator line are considered to be footer rows. - - A footer separator line is like a normal separator line except that dashes are replaced by equal - signs. A footer separator line may only appear once in a table. If multiple footer separator lines - are used in one table, only the last is treated as footer separator line, all others are treated - as normal separator lines. Normal separator lines that are used after the footer separator line - are ignored. - - Here are some example footer separator lines: - - |====+====| - +====|====+ - |=========| - |= - -Trailing spaces or tabs are ignored in all cases. To simplify table creation and maintenance, -header, footer and normal separator lines need not specify the same number of columns as table rows; -even `|-` and `|=` are a valid separators. - -Given the above components, a table is specified by - -* an optional separator line, -* optionally followed by zero, one or more table rows followed by a header separator line, -* one or more table rows, optionally interspersed with separator lines, -* optionally followed by a footer separator line and zero, one or more table rows and -* an optional trailing separator line. - -Also note - -* that the first line of a table must not have more than three spaces of indentation before the - first non-space character, -* that each line of a table needs to have at least one not escaped pipe character so that kramdown - recognizes it as a line belonging to the table and -* that tables have to start and end on [block boundaries](#block-boundaries)! - -> The table syntax differs from the one used in [PHP Markdown Extra] as follows: -> -> * kramdown tables do not need to have a table header. -> * kramdown tables can be structured using separator lines. -> * kramdown tables can contain a table footer. -> * kramdown tables need to be separated from other block-level elements. -{: .markdown-difference} - -Here is an example for a kramdown table with a table header row, two table bodies and a table footer -row: - - |-----------------+------------+-----------------+----------------| - | Default aligned |Left aligned| Center aligned | Right aligned | - |-----------------|:-----------|:---------------:|---------------:| - | First body part |Second cell | Third cell | fourth cell | - | Second line |foo | **strong** | baz | - | Third line |quux | baz | bar | - |-----------------+------------+-----------------+----------------| - | Second body | | | | - | 2 line | | | | - |=================+============+=================+================| - | Footer row | | | | - |-----------------+------------+-----------------+----------------| - -The above example table is rather time-consuming to create without the help of an ASCII table -editor. However, the table syntax is flexible and the above table could also be written like this: - - |--- - | Default aligned | Left aligned | Center aligned | Right aligned - |-|:-|:-:|-: - | First body part | Second cell | Third cell | fourth cell - | Second line |foo | **strong** | baz - | Third line |quux | baz | bar - |--- - | Second body - | 2 line - |=== - | Footer row - - -## Horizontal Rules - -A horizontal rule for visually separating content is created by using three or more asterisks, -dashes or underscores (these may not be mixed on a line), optionally separated by spaces or tabs, on -an otherwise blank line. The first asterisk, dash or underscore may optionally be indented up to -three spaces. The following examples show different possibilities to create a horizontal rule: - - * * * - - --- - - _ _ _ _ - - --------------- - - -## Math Blocks - -> This syntax feature is not part of the original Markdown syntax. The idea comes from the [Maruku] -> and [Pandoc] packages. -{: .markdown-difference} - -kramdown has built-in support for block and span-level mathematics written in LaTeX. - -A math block needs to start and end on [block boundaries](#block-boundaries). It is started using -two dollar signs, optionally indented up to three spaces. The math block continues until the next -two dollar signs (which may be on the same line or on one of the next lines) that appear at the end -of a line, i.e. they may only be followed by whitespace characters. The content of a math block has -to be valid LaTeX math. It is always wrapped inside a `\begin{displaymath}...\end{displaymath}` -enviroment except if it begins with a `\begin` statement. - -The following kramdown fragment - - $$ - \begin{align*} - & \phi(x,y) = \phi \left(\sum_{i=1}^n x_ie_i, \sum_{j=1}^n y_je_j \right) - = \sum_{i=1}^n \sum_{j=1}^n x_i y_j \phi(e_i, e_j) = \\ - & (x_1, \ldots, x_n) \left( \begin{array}{ccc} - \phi(e_1, e_1) & \cdots & \phi(e_1, e_n) \\ - \vdots & \ddots & \vdots \\ - \phi(e_n, e_1) & \cdots & \phi(e_n, e_n) - \end{array} \right) - \left( \begin{array}{c} - y_1 \\ - \vdots \\ - y_n - \end{array} \right) - \end{align*} - $$ - -renders (using Javascript library [MathJax](http://www.mathjax.org/)) as - -$$ -\begin{align*} - & \phi(x,y) = \phi \left(\sum_{i=1}^n x_ie_i, \sum_{j=1}^n y_je_j \right) - = \sum_{i=1}^n \sum_{j=1}^n x_i y_j \phi(e_i, e_j) = \\ - & (x_1, \ldots, x_n) \left( \begin{array}{ccc} - \phi(e_1, e_1) & \cdots & \phi(e_1, e_n) \\ - \vdots & \ddots & \vdots \\ - \phi(e_n, e_1) & \cdots & \phi(e_n, e_n) - \end{array} \right) - \left( \begin{array}{c} - y_1 \\ - \vdots \\ - y_n - \end{array} \right) -\end{align*} -$$ - -Using inline math is also easy: just surround your math content with two dollar signs, like with a -math block. If you don't want to start an inline math statement, just escape the dollar signs and -they will be treated as simple dollar signs. - -> **Note** that LaTeX code that uses the pipe symbol `|` in inline math statements may lead to a -> line being recognized as a table line. This problem can be avoided by using the `\vert` command -> instead of `|`! -{:.information} - -If you have a paragraph that looks like a math block but should actually be a paragraph with just an -inline math statement, you need to escape the first dollar sign: - - The following is a math block: - - $$ 5 + 5 $$ - - But next comes a paragraph with an inline math statement: - - \$$ 5 + 5 $$ - -If you don't even want the inline math statement, escape the first two dollar signs: - - \$\$ 5 + 5 $$ - -## HTML Blocks - -> The original Markdown syntax specifies that an HTML block must start at the left margin, i.e. no -> indentation is allowed. Also, the HTML block has to be surrounded by blank lines. Both -> restrictions are lifted for kramdown documents. Additionally, the original syntax does not allow -> you to use Markdown syntax in HTML blocks which is allowed with kramdown. -{: .markdown-difference} - -An HTML block is potentially started if a line is encountered that begins with a non-span-level HTML -tag or a general XML tag (opening or closing) which may be indented up to three spaces. - -The following HTML tags count as span-level HTML tags and *won't* start an HTML block if found at -the beginning of an HTML block line: - - a abbr acronym b big bdo br button cite code del dfn em i img input - ins kbd label option q rb rbc rp rt rtc ruby samp select small span - strong sub sup textarea tt var - -Further parsing of a found start tag depends on the tag and in which of three possible ways its -content is parsed: - -* Parse as raw HTML block: If the HTML/XML tag content should be handled as raw HTML, then only - HTML/XML tags are parsed from this point onwards and text is handled as raw, unparsed text until - the matching end tag is found or until the end of the document. Each found tag will be parsed as - raw HTML again. However, if a tag has a `markdown` attribute, this attribute controls parsing of - this one tag (see below). - - Note that the parser basically supports only correct XHTML! However, there are some exceptions. - For example, attributes without values (i.e. boolean attributes) are also supported and elements - without content like `
` can be written as `
`. If an invalid closing tag is found, it is - ignored. - -* Parse as block-level elements: If the HTML/XML tag content should be parsed as text containing - block-level elements, the remaining text on the line will be parsed by the block-level parser as - if it appears on a separate line (**Caution**: This also means that if the line consists of the - start tag, text and the end tag, the end tag will not be found!). All following lines are parsed - as block-level elements until an HTML block line with the matching end tag is found or until the - end of the document. - -* Parse as span-level elements: If the HTML/XML tag content should be parsed as text containing span - level elements, then all text until the *next* matching end tag or until the end of the document - will be the content of the tag and will later be parsed by the span-level parser. This also means - that if the matching end tag is inside what appears to be a code span, it is still used! - -If there is text after an end tag, it will be parsed as if it appears on a separate line except when -inside a raw HTML block. - -Also, if an invalid closing tag is found, it is ignored. - -Note that all HTML tag and attribute names are converted to lowercase! - -By default, kramdown parses all block HTML tags and all XML tags as raw HTML blocks. However, this -can be configured with the `parse_block_html`. If this is set to `true`, then syntax parsing in HTML -blocks is globally enabled. It is also possible to enable/disable syntax parsing on a tag per tag -basis using the `markdown` attribute: - -* If an HTML tag has an attribute `markdown="0"`, then the tag is parsed as raw HTML block. - -* If an HTML tag has an attribute `markdown="1"`, then the default mechanism for parsing syntax in - this tag is used. - -* If an HTML tag has an attribute `markdown="block"`, then the content of the tag is parsed as block - level elements. - -* If an HTML tag has an attribute `markdown="span"`, then the content of the tag is parsed as span - level elements. - -The following list shows which HTML tags are parsed in which mode by default when `markdown="1"` is -applied or `parse_block_html` is `true`: - -Parse as raw HTML -: - script style math option textarea pre code kbd samp var - - Also, all general XML tags are parsed as raw HTML blocks. - -Parse as block-level elements -: - applet button blockquote body colgroup dd div dl fieldset form iframe li - map noscript object ol table tbody thead tfoot tr td ul - -Parse as span-level elements -: - a abbr acronym address b bdo big cite caption code del dfn dt em - h1 h2 h3 h4 h5 h6 i ins kbd label legend optgroup p pre q rb rbc - rp rt rtc ruby samp select small span strong sub sup th tt var - -> Remember that all span-level HTML tags like `a` or `b` do not start a HTML block! However, the -> above lists also include span-level HTML tags in the case the `markdown` attribute is used on a -> tag inside a raw HTML block. - -Here is a simple example input and its HTML output with `parse_block_html` set to `false`: - - This is a para. -
- Something in here. -
- Other para. -^ -

This is a para.

-
- Something in here. -
-

Other para.

- -As one can see the content of the `div` tag will be parsed as raw HTML block and left alone. -However, if the `markdown="1"` attribute was used on the `div` tag, the content would be parsed as -block-level elements and therefore converted to a paragraph. - -You can also use several HTML tags at once: - -
- This is some text in the `layer1` div. -
- This is some text in the `layers` div. -
- This is a para outside the HTML block. - -However, remember that if the content of a tag is parsed as block-level elements, the content that -appears after a start/end tag but on the same line, is processed as if it appears on a new line: - -
This is the first part of a para, - which is continued here. -
- -

This works without problems because it is parsed as - span-level elements

- -
The end tag is not found because - this line is parsed as a paragraph
- -Since setting `parse_block_html` to `true` can lead to some not wanted behaviour, it is generally -better to selectively enable or disable block/span-level elements parsing by using the `markdown` -attribute! - -Unclosed block-level HTML tags are correctly closed at the end of the document to ensure correct -nesting and invalidly used end tags are removed from the output: - - This is a para. -
- Another para. -

-^ -

This is a para.

-
-

Another para.

-
- -The parsing of processing instructions and XML comments is also supported. The content of both, PIs -and XML comments, may span multiple lines. The start of a PI/XML comment may only appear at the -beginning of a line, optionally indented up to three spaces. If there is text after the end of a PI -or XML comment, it will be parsed as if it appears on a separate line. kramdown syntax in PIs/XML -comments is not processed: - - This is a para. - - First part of para, - continues here. - - - -# Text Markup - -These elements are all span-level elements and used inside block-level elements to markup text -fragments. For example, one can easily create links or apply emphasis to certain text parts. - -Note that empty span-level elements are not converted to empty HTML tags but are copied as-is to the -output. - - - -## Links and Images - -Three types of links are supported: automatic links, inline links and reference links. - -### Automatic Links - -This is the easiest one to create: Just surround a web address or an email address with angle -brackets and the address will be turned into a proper link. The address will be used as link target -and as link text. For example: - - Information can be found on the homepage. - You can also mail me: - -It is not possible to specify a different link text using automatic links -- use the other link -types for this! - - -### Inline Links - -As the wording suggests, inline links provide all information inline in the text flow. Reference -style links only provide the link text in the text flow and everything else is defined -elsewhere. This also allows you to reuse link definitions. - -An inline style link can be created by surrounding the link text which must contain at least one -character with square brackets, followed immediately by the link URL (and an optional title in -single or double quotes preceded by at least one space) in normal parentheses. For example: - - This is [a link](http://rubyforge.org) to a page. - A [link](../test "local URI") can also have a title. - And [spaces](link with spaces.html)! - -Notes: - -* The link text is treated like normal span-level text and therefore is parsed and converted. - However, if you use square brackets within the link text, you have to either properly nest them or - to escape them. It is not possible to create nested links! - -* The link URL has to contain properly nested parentheses if no title is specified, or the link URL - must be contained in angle brackets (incorrectly nested parentheses are allowed). - -* The link title may not contain its delimiters and may not be empty. - -* Additional link attributes can be added by using a [span IAL](#span-ials) after the inline link, - for example: - - This is a [link](http://example.com){:hreflang="de"} - -### Reference Links - -To create a reference style link, you need to surround the link text with square brackets (as with -inline links), followed by optional spaces/tabs/line breaks and then optionally followed with -another set of square brackets with the link identifier in them. A link identifier may not contain a -closing bracket and, when specified in a link definition, newline characters; it is also not case -sensitive, line breaks and tabs are converted to spaces and multiple spaces are compressed into one. -For example: - - This is a [reference style link][linkid] to a page. And [this] - [linkid] is also a link. As is [this][] and [THIS]. - -If you don't specify a link identifier (i.e. only use empty square brackets) or completely omit the -second pair of square brackets, the link text is converted to a valid link identifier by removing -all invalid characters and inserting spaces for line breaks. If there is a link definition found for -the link identifier, a link will be created. Otherwise the text is not converted to a link. - -As with inline links, additional link attributes can be added by using a [span IAL](#span-ials) -after the reference link. - -### Link Definitions - -The link definition can be put anywhere in the document. It does not appear in the output. A link -definition looks like this: - - [linkid]: http://www.example.com/ "Optional Title" - -> Link definitions are, despite being described here, non-content block-level elements. -{: .information} - -The link definition has the following structure: - -* The link identifier in square brackets, optionally indented up to three spaces, -* then a colon and one or more optional spaces/tabs, -* then the link URL which must contain at least one non-space character, or a left angle bracket, - the link URL and a right angle bracket, -* then optionally the title in single or double quotes, separated from the link URL by one or more - spaces or on the next line by itself indented any number of spaces/tabs. - -> The original Markdown syntax also allowed the title to be specified in parenthesis. This is not -> allowed for consistency with the inline title. -{: .markdown-difference} - -If you have some text that looks like a link definition but should really be a link and some text, -you can escape the colon after the link identifier: - - The next paragraph contains a link and some text. - - [Room 100]\: There you should find everything you need! - - [Room 100]: link_to_room_100.html - -Although link definitions are non-content block-level elements, [block IALs](#block-ials) can be -used on them to specify additional attributes for the links: - - [linkid]: http://example.com - {:hreflang="de"} - -### Images - -Images can be specified via a syntax that is similar to the one used by links. The difference is -that you have to use an exclamation mark before the first square bracket and that the link text of a -normal link, which may also be the empty string in case of image links, becomes the alternative text -of the image link. As with normal links, image links can be written inline or reference style. For -example: - - Here comes a ![smiley](../images/smiley.png)! And here - ![too](../images/other.png 'Title text'). Or ![here]. - With empty alt text ![](see.jpg) - -The link definition for images is exactly the same as the link definition for normal links. Since -additional attributes can be added via span and block IALs, it is possible, for example, to specify -image width and height: - - Here is an inline ![smiley](smiley.png){:height="36px" width="36px"}. - - And here is a referenced ![smile] - - [smile]: smile.png - {: height="36px" width="36px"} - -## Emphasis - -kramdown supports two types of emphasis: light and strong emphasis. Text parts that are surrounded -with single asterisks `*` or underscores `_` are treated as text with light emphasis, text parts -surrounded with two asterisks or underscores are treated as text with strong emphasis. Surrounded -means that the starting delimiter must not be followed by a space and that the stopping delimiter -must not be preceded by a space. - -Here is an example for text with light and strong emphasis: - - *some text* - _some text_ - **some text** - __some text__ - -The asterisk form is also allowed within a single word: - - This is un*believe*able! This d_oe_s not work! - -Text can be marked up with both light and strong emphasis, possibly using different delimiters. -However, it is not possible to nest strong within strong or light within light emphasized text: - - This is a ***text with light and strong emphasis***. - This **is _emphasized_ as well**. - This *does _not_ work*. - This **does __not__ work either**. - -If one or two asterisks or underscores are surrounded by spaces, they are treated literally. If you -want to force the literal meaning of an asterisk or an underscore you can backslash-escape it: - - This is a * literal asterisk. - These are ** two literal asterisk. - As \*are\* these! - - -## Code Spans - -This is the span-level equivalent of the [code block](#code-blocks) element. You can markup a text -part as code span by surrounding it with backticks `` ` ``. For example: - - Use `` tags for this. - -Note that all special characters in a code span are treated correctly. For example, when a code span -is converted to HTML, the characters `<`, `>` and `&` are substituted by their respective HTML -counterparts. - -To include a literal backtick in a code span, you need to use two or more backticks as delimiters. -You can insert one optional space after the starting and before the ending delimiter (these spaces -are not used in the output). For example: - - Here is a literal `` ` `` backtick. - And here is `` `some` `` text (note the two spaces so that one is left - in the output!). - -A single backtick surrounded by spaces is treated as literal backtick. If you want to force the -literal meaning of a backtick you can backslash-escape it: - - This is a ` literal backtick. - As \`are\` these! - -As with [code blocks](#language-of-code-blocks) you can set the language of a code span by using an -[IAL](#inline-attribute-lists): - - This is a Ruby code fragment `x = Class.new`{:.language-ruby} - - -## HTML Spans - -HTML tags cannot only be used on the block-level but also on the span-level. Span-level HTML tags -can only be used inside one block-level element, it is not possible to use a start tag in one block -level element and the end tag in another. Note that only correct XHTML is supported! This means that -you have to use, for example, `
` instead of `
` (although kramdown tries to fix such errors -if possible). - -By default, kramdown parses kramdown syntax inside span HTML tags. However, this behaviour can be -configured with the `parse_span_html` option. If this is set to `true`, then syntax parsing in HTML -spans is enabled, if it is set to `false`, parsing is disabled. It is also possible to -enable/disable syntax parsing on a tag per tag basis using the `markdown` attribute: - -* If an HTML tag has an attribute `markdown="0"`, then no parsing (except parsing of HTML span tags) - is done inside that HTML tag. - -* If an HTML tag has an attribute `markdown="1"`, then the content of the tag is parsed as span - level elements. - -* If an HTML tag has an attribute `markdown="block"`, then a warning is issued because HTML spans - cannot contain block-level elements and the attribute is ignored. - -* If an HTML tag has an attribute `markdown="span"`, then the content of the tag is parsed as span - level elements. - -The content of a span-level HTML tag is normally parsed as span-level elements. Note, however, that -some tags like `

- - - - -

parsed -This too -

- - - - - - - - - -

http://example.com

- - - diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_raw.htmlinput b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_raw.htmlinput deleted file mode 100644 index 22b9ea5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_raw.htmlinput +++ /dev/null @@ -1,34 +0,0 @@ -

baz { |qux| quux }

- -

This is some para. -

- - - - -

parsed -This too -

- - - - - - - - - -

http://example.com

- - diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_raw.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_raw.options deleted file mode 100644 index a660da2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_raw.options +++ /dev/null @@ -1 +0,0 @@ -:parse_block_html: true diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_raw.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_raw.text deleted file mode 100644 index e0617c4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_raw.text +++ /dev/null @@ -1,33 +0,0 @@ -

baz { |qux| quux }

- -This is some para. - - - - -

*parsed* -This too -

- - - - - - - - - - - - diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_span.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_span.html deleted file mode 100644 index 2a6191f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_span.html +++ /dev/null @@ -1,12 +0,0 @@ -

This text -should be parsed -as span -

- -

This produces `

-

` an unwanted result.</p>

- -

This text too

-

-some text -

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_span.htmlinput b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_span.htmlinput deleted file mode 100644 index 4199b8b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_span.htmlinput +++ /dev/null @@ -1,12 +0,0 @@ -

This text -should be parsed -as span -

- -

This produces `

-

` an unwanted result.</p>

- -

This text too

-

-some text -

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_span.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_span.options deleted file mode 100644 index a660da2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_span.options +++ /dev/null @@ -1 +0,0 @@ -:parse_block_html: true diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_span.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_span.text deleted file mode 100644 index d07cf6d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_as_span.text +++ /dev/null @@ -1,9 +0,0 @@ -

This *text -should* be parsed -as span -

- -

This produces `

` an unwanted result.

- -

This *text* too

-some text diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_block_html.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_block_html.html deleted file mode 100644 index 8de78c0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_block_html.html +++ /dev/null @@ -1,21 +0,0 @@ -

-

test

-
- -
-
test
-
-
-
test
-
-
-
- -
-
code block with </div>
-
-
- -
-

No matching end tag

-
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_block_html.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_block_html.options deleted file mode 100644 index a660da2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_block_html.options +++ /dev/null @@ -1 +0,0 @@ -:parse_block_html: true diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_block_html.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_block_html.text deleted file mode 100644 index b8b1845..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/parse_block_html.text +++ /dev/null @@ -1,17 +0,0 @@ -
- test -
- -
- test -
- test -
-
- -
- code block with
-
- -
-No matching end tag diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/processing_instruction.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/processing_instruction.html deleted file mode 100644 index b292a05..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/processing_instruction.html +++ /dev/null @@ -1,13 +0,0 @@ - - -

para

- - -

para

- -

other

- - diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/processing_instruction.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/processing_instruction.text deleted file mode 100644 index fcb866f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/processing_instruction.text +++ /dev/null @@ -1,12 +0,0 @@ - - -para - - para - -other - - diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/simple.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/simple.html deleted file mode 100644 index edf4161..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/simple.html +++ /dev/null @@ -1,64 +0,0 @@ -
-

test

-
- -

-para2 -

- -
-

tes

- -

test -weiter -

-
- -

para4

- -
-
-
-

foo

-
-
-
-
-

bar 

-
-
- -

para5

- -
-

id

-
-

test

- -
-

hallo

-
-
-

hallo

-
- -

para6

- -
-
-

Another para.

-
- - - -doit - -

Test

- -

Test

- -

Test - -

- - diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/simple.html.19 b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/simple.html.19 deleted file mode 100644 index ac026e5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/simple.html.19 +++ /dev/null @@ -1,64 +0,0 @@ -
-

test

-
- -

-para2 -

- -
-

tes

- -

test -weiter -

-
- -

para4

- -
-
-
-

foo

-
-
-
-
-

bar 

-
-
- -

para5

- -
-

id

-
-

test

- -
-

hallo

-
-
-

hallo

-
- -

para6

- -
-
-

Another para.

-
- - - -doit - -

Test

- -

Test

- -

Test - -

- - diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/simple.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/simple.options deleted file mode 100644 index a660da2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/simple.options +++ /dev/null @@ -1 +0,0 @@ -:parse_block_html: true diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/simple.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/simple.text deleted file mode 100644 index 17cc689..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/simple.text +++ /dev/null @@ -1,59 +0,0 @@ -
-test -
- -

-para2 -

- -
-

tes

- -

test -weiter -

-
- -para4 - -
-
-
-foo -
-
-
-
bar  -
-
- -para5 - -
id -
test - -
-hallo -
-hallo -
- -para6 - -
-Another para. -
- - - -doit - -Test - -

Test

- -

Test - -

- - diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/textarea.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/textarea.html deleted file mode 100644 index 6f5693e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/textarea.html +++ /dev/null @@ -1,8 +0,0 @@ -

This is a

- - diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/textarea.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/textarea.text deleted file mode 100644 index a240f5c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/09_html/textarea.text +++ /dev/null @@ -1,8 +0,0 @@ -This is a - - diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/10_ald/simple.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/10_ald/simple.html deleted file mode 100644 index 74b03d5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/10_ald/simple.html +++ /dev/null @@ -1,2 +0,0 @@ -

Some paragraph

- diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/10_ald/simple.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/10_ald/simple.text deleted file mode 100644 index f58768a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/10_ald/simple.text +++ /dev/null @@ -1,8 +0,0 @@ -Some paragraph - -{:id: ref1} -{:id: .class1} - {:id: #id} - {:id: key="value"} - {:id: .class2 .class3 ref2 #id-with key="value" key='value' key='dfsd\}' } -{:test: k ey=value} diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/auto_id_and_ial.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/auto_id_and_ial.html deleted file mode 100644 index 9857a03..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/auto_id_and_ial.html +++ /dev/null @@ -1 +0,0 @@ -

A header

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/auto_id_and_ial.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/auto_id_and_ial.options deleted file mode 100644 index 8776b55..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/auto_id_and_ial.options +++ /dev/null @@ -1 +0,0 @@ -:auto_ids: true diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/auto_id_and_ial.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/auto_id_and_ial.text deleted file mode 100644 index f521fb0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/auto_id_and_ial.text +++ /dev/null @@ -1,2 +0,0 @@ -## A header -{:#myid .cls} diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/nested.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/nested.html deleted file mode 100644 index 84cc368..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/nested.html +++ /dev/null @@ -1,11 +0,0 @@ -
-test -
- -
-

test

-
- -
-

para

-
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/nested.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/nested.text deleted file mode 100644 index 827645c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/nested.text +++ /dev/null @@ -1,15 +0,0 @@ -{:.cls} -
-test -
-{:#id} - -{:.cls} -
-test -
-{:#id} - -{:.cls} -> para -{:#id} diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/simple.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/simple.html deleted file mode 100644 index 1086f0c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/simple.html +++ /dev/null @@ -1,29 +0,0 @@ -

Some paragraph.

- -

Some paragraph.

- -
-

quote

-
- -
    -
  • list
  • -
- -
code block
-
- -
other code block
-
- -

A header

- -

Some paragraph here

- -

Some paragraph here

- -

Paragraph

-

Paragraph

- -

Another header

- diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/simple.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/simple.text deleted file mode 100644 index b97eef3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/11_ial/simple.text +++ /dev/null @@ -1,41 +0,0 @@ -Some paragraph. -{:.class .-class id key="val"} - -Some paragraph. -{:.cls1#id.cls2} - -> quote -{: #id} - {: .class} - -* list -{: key="val"} - - code block -{: #other} - - other code block - -## A header -{:#myid} - -{:.cls} -Some paragraph here - -{:.cls1} -{:.cls2} -Some paragraph here - -Paragraph -{:.cls} -Paragraph - -Another header -============== -{: .class #other} - -{:id: #id key="valo"} -{:id: #other .myclass other} -{:other: key1="val\"" - ig.nored as_is#this key2='val\'' .other-class} - -{:.invalid} diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/comment.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/comment.html deleted file mode 100644 index 20b4c66..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/comment.html +++ /dev/null @@ -1,8 +0,0 @@ -

This is a simple paragraph.

- - - -

And another paragraph

- -

{::comment} -Another paragraph

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/comment.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/comment.text deleted file mode 100644 index 2dfc919..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/comment.text +++ /dev/null @@ -1,12 +0,0 @@ -This is a simple paragraph. - -{::comment} -This is a comment {:/}which is {:/comment} ignored. -{:/comment} - -And another paragraph - -{::comment this='is' .ignore /} - -{::comment} -Another paragraph diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/ignored.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/ignored.html deleted file mode 100644 index 17aae5c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/ignored.html +++ /dev/null @@ -1,8 +0,0 @@ -

paragraph

- -

{::something} -anotherthing -{:/something}

- -

{::something/} -paragraph

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/ignored.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/ignored.text deleted file mode 100644 index ae94a8f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/ignored.text +++ /dev/null @@ -1,8 +0,0 @@ -paragraph - -{::something} -anotherthing -{:/something} - -{::something/} -paragraph diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/nomarkdown.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/nomarkdown.html deleted file mode 100644 index 7fe58d5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/nomarkdown.html +++ /dev/null @@ -1,10 +0,0 @@ -

This is a simple paragraph.

- -This *is* not processed - -

And another paragraph

- -bold - -

{::nomarkdown} -Another paragraph

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/nomarkdown.kramdown b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/nomarkdown.kramdown deleted file mode 100644 index 2cee512..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/nomarkdown.kramdown +++ /dev/null @@ -1,20 +0,0 @@ -This is a simple paragraph. - -{::nomarkdown} -This *is* not processed -{:/} - -And another paragraph - -{::nomarkdown type="html"} -bold -{:/} - -{::nomarkdown type="latex"} -\begin{itemize} -\item[Yes] YESSSS! -\end{itemize} -{:/} - -\{::nomarkdown} Another paragraph - diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/nomarkdown.latex b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/nomarkdown.latex deleted file mode 100644 index 5af0263..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/nomarkdown.latex +++ /dev/null @@ -1,13 +0,0 @@ -This is a simple paragraph. - -This *is* not processed - -And another paragraph - -\begin{itemize} -\item[Yes] YESSSS! -\end{itemize} - -\{::nomarkdown\} -Another paragraph - diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/nomarkdown.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/nomarkdown.text deleted file mode 100644 index 43d441d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/nomarkdown.text +++ /dev/null @@ -1,21 +0,0 @@ -This is a simple paragraph. - -{::nomarkdown} -This *is* not processed - {:/nomarkdown} - -And another paragraph - -{::nomarkdown this='is' .ignore /} - -{::nomarkdown type='html'} -bold -{:/} -{::nomarkdown type="latex"} -\begin{itemize} -\item[Yes] YESSSS! -\end{itemize} -{:/} - -{::nomarkdown} -Another paragraph diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/options.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/options.html deleted file mode 100644 index 8a3a47e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/options.html +++ /dev/null @@ -1,21 +0,0 @@ -

No header id

- -

without header id

- -
-some *para* -
- -
-

some para

-
- -

Some text10.

- -
-
    -
  1. -

    Some text.

    -
  2. -
-
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/options.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/options.text deleted file mode 100644 index 5991ab7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/options.text +++ /dev/null @@ -1,21 +0,0 @@ -# No header id - -{::options unusedvar="val" /} - -# without header id - -
-some *para* -
- -{::options parse_block_html="true" parse_span_html="true" /} - -
-some *para* -
- -{::options footnote_nr="10" /} - -Some text[^ab]. - -[^ab]: Some text. diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/options2.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/options2.html deleted file mode 100644 index f2ad2ef..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/options2.html +++ /dev/null @@ -1,10 +0,0 @@ - -

Some text1.

- -
-
    -
  1. -

    Some text.

    -
  2. -
-
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/options2.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/options2.text deleted file mode 100644 index 78abfbe..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/options2.text +++ /dev/null @@ -1,5 +0,0 @@ -{::options footnote_nr="da10" /} - -Some text[^ab]. - -[^ab]: Some text. diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/options3.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/options3.html deleted file mode 100644 index 26cad5d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/options3.html +++ /dev/null @@ -1,7 +0,0 @@ -
x = Class.new - -
- -
x = Class.new - -
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/options3.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/options3.text deleted file mode 100644 index e0ee87c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/12_extension/options3.text +++ /dev/null @@ -1,7 +0,0 @@ - x = Class.new -{: .language-ruby} - -{::options coderay_wrap="span" coderay_line_numbers="" coderay_css="class" coderay_tab_width="4" /} - - x = Class.new -{: .language-ruby} diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/definition_at_beginning.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/definition_at_beginning.html deleted file mode 100644 index 7c5cc04..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/definition_at_beginning.html +++ /dev/null @@ -1 +0,0 @@ -

: no definition

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/definition_at_beginning.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/definition_at_beginning.text deleted file mode 100644 index cd3671b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/definition_at_beginning.text +++ /dev/null @@ -1 +0,0 @@ -: no definition diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/deflist_ial.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/deflist_ial.html deleted file mode 100644 index 3090b1e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/deflist_ial.html +++ /dev/null @@ -1,4 +0,0 @@ -
-
item
-
definition
-
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/deflist_ial.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/deflist_ial.text deleted file mode 100644 index 587c3b0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/deflist_ial.text +++ /dev/null @@ -1,4 +0,0 @@ -{:.dl-horizontal} -item -: definition -{:.dl-other} diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/item_ial.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/item_ial.html deleted file mode 100644 index 2bbf1b0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/item_ial.html +++ /dev/null @@ -1,12 +0,0 @@ -
-
item
-
definition -continued
-
another {:.cls}
-
-
code
-
-
-
IAL at last - no code bc of text
-
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/item_ial.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/item_ial.text deleted file mode 100644 index f75da18..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/item_ial.text +++ /dev/null @@ -1,8 +0,0 @@ -item -: {:.cls} definition - continued -: another {:.cls} -: {:.class} - code -: {:.cls} IAL at last - no code bc of text diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/multiple_terms.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/multiple_terms.html deleted file mode 100644 index e2e089b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/multiple_terms.html +++ /dev/null @@ -1,13 +0,0 @@ -
-
kram
-
down
-
now
-
definition 1
-
definition 2
-
-

definition 3

-
-
-

definition 4

-
-
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/multiple_terms.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/multiple_terms.text deleted file mode 100644 index b834258..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/multiple_terms.text +++ /dev/null @@ -1,10 +0,0 @@ -kram -*down* -now -: definition 1 -: definition 2 - -: definition 3 - - -: definition 4 diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/no_def_list.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/no_def_list.html deleted file mode 100644 index c16f962..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/no_def_list.html +++ /dev/null @@ -1,2 +0,0 @@ -

This is a para -: and not a definition list

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/no_def_list.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/no_def_list.text deleted file mode 100644 index 98b52b3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/no_def_list.text +++ /dev/null @@ -1,2 +0,0 @@ -This is a para -\: and not a definition list diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/para_wrapping.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/para_wrapping.html deleted file mode 100644 index 5f28fdf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/para_wrapping.html +++ /dev/null @@ -1,10 +0,0 @@ -
-
term
-
-

definition

-
-
definition
-
-

definition

-
-
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/para_wrapping.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/para_wrapping.text deleted file mode 100644 index 280fa47..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/para_wrapping.text +++ /dev/null @@ -1,6 +0,0 @@ -term - -: definition -: definition - -: definition diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/separated_by_eob.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/separated_by_eob.html deleted file mode 100644 index 0a1c4dc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/separated_by_eob.html +++ /dev/null @@ -1,8 +0,0 @@ -
-
kram
-
down
-
-
-
kram
-
down
-
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/separated_by_eob.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/separated_by_eob.text deleted file mode 100644 index 56fedf1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/separated_by_eob.text +++ /dev/null @@ -1,5 +0,0 @@ -kram -: down -^ -kram -: down diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/simple.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/simple.html deleted file mode 100644 index 791f145..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/simple.html +++ /dev/null @@ -1,10 +0,0 @@ -
-
kram
-
down
-
novalue
-
-
kram
-
down -kram
-
down
-
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/simple.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/simple.text deleted file mode 100644 index e3bf730..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/simple.text +++ /dev/null @@ -1,10 +0,0 @@ -kram -: down - -novalue -: - -kram -: down -kram -: down diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/styled_terms.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/styled_terms.html deleted file mode 100644 index cf7d785..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/styled_terms.html +++ /dev/null @@ -1,4 +0,0 @@ -
-
kram
-
down
-
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/styled_terms.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/styled_terms.text deleted file mode 100644 index 76eb355..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/styled_terms.text +++ /dev/null @@ -1,2 +0,0 @@ -*kram* -: down diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/too_much_space.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/too_much_space.html deleted file mode 100644 index b4df878..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/too_much_space.html +++ /dev/null @@ -1,3 +0,0 @@ -

para

- -

: no definition

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/too_much_space.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/too_much_space.text deleted file mode 100644 index 30ab445..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/too_much_space.text +++ /dev/null @@ -1,4 +0,0 @@ -para - - -: no definition diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/with_blocks.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/with_blocks.html deleted file mode 100644 index 45b5865..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/with_blocks.html +++ /dev/null @@ -1,38 +0,0 @@ -
-
kram
-
this is some -text
-
-

this is some -more text

-
-
kram
-
-
-

blockquote

-
-
-
kram
-
-
code
-
-
-
kram
-
-
-
kram
-
down
-
-
-
kram
-
-

header

-
-
kram
-
-
    -
  • list
  • -
  • items
  • -
-
-
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/with_blocks.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/with_blocks.text deleted file mode 100644 index 15195ce..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/13_definition_list/with_blocks.text +++ /dev/null @@ -1,24 +0,0 @@ -kram -: this is some - text - - : this is some - more text - -kram -: > blockquote - -kram -: - code - -kram -: kram - : down - -kram -: # header - -kram -: * list - * items diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/errors.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/errors.html deleted file mode 100644 index 70e1fa7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/errors.html +++ /dev/null @@ -1,8 +0,0 @@ -

No table body

- -

|-|-|-

- -

|no|table|here|

- -

|no|table|here| -paragraph

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/errors.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/errors.text deleted file mode 100644 index a13107b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/errors.text +++ /dev/null @@ -1,9 +0,0 @@ -No table body - -|-|-|- - -[5]: test -|no|table|here| - -|no|table|here| -paragraph diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/escaping.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/escaping.html deleted file mode 100644 index b4528a1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/escaping.html +++ /dev/null @@ -1,52 +0,0 @@ -

cell 1 | cell 2

- -

cell 1 | cell 2

- - - - - - - - -
cell 1cell 2 | continued
- - - - - - - - -
cell 1cell 2
- - - - - - - - -
cell 1code | span
- -

cell 1 code | span

- -

cell 1 | code | span

- - - - - - - - - - - - - - -
cell 1cell `2cell 3
cell 1`cell 2cell 3
- -

cell 1 | cell 2 | cell 3 -cell 1 | cell 2 | cell 3

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/escaping.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/escaping.text deleted file mode 100644 index a8a24d6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/escaping.text +++ /dev/null @@ -1,19 +0,0 @@ -`cell 1 | cell 2` - -cell 1 \| cell 2 - -cell 1 | cell 2 \| continued - -cell 1 | cell `2` - -cell 1 | `code | span` - -cell 1 `code | span` - -cell 1 \| `code | span` - -cell 1 | cell `2 | cell 3 -cell 1` | cell 2 | cell 3 - -cell 1 \| cell `2 | cell 3 -cell 1` | cell 2 | cell 3 diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/footer.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/footer.html deleted file mode 100644 index e6596ed..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/footer.html +++ /dev/null @@ -1,65 +0,0 @@ -

Simple footer

- - - - - - - - - - - - - - -
cell1cell2
cell3cell4
- -

Full footer

- - - - - - - - - - - - - - -
cell1cell2
cell3cell4
- -

Footer with separator lines

- - - - - - - - - - - - - - - - - - -
cell1cell2
cell3cell4
cell5cell6
- -

Empty footer

- - - - - - - - -
cell1cell2
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/footer.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/footer.text deleted file mode 100644 index faaed8d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/footer.text +++ /dev/null @@ -1,25 +0,0 @@ -Simple footer - -| cell1 | cell2 -|= -| cell3 | cell4 - -Full footer - -| cell1 | cell2 -|=======|=======| -| cell3 | cell4 - -Footer with separator lines - -| cell1 | cell2 -|=======|=======| -| cell3 | cell4 -|--- -| cell5 | cell6 -|--- - -Empty footer - -| cell1 | cell2 -|= diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/header.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/header.html deleted file mode 100644 index cc7c6e6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/header.html +++ /dev/null @@ -1,96 +0,0 @@ -

Simple header

- - - - - - - - - - - - - - -
cell1cell2
cell3cell4
- -

Full header

- - - - - - - - - - - - - - -
cell1cell2
cell3cell4
- -

With alignment and superfluous alignment defs

- - - - - - - - - - - - - - - - - - - - -
defaultleftcenterrightdefault
cell1cell2cell3cell4cell5
- -

With leading sep line

- - - - - - - - - - - - - - -
cell1cell2
cell3cell4
- -

Multiple bodies

- - - - - - - - - - - - - - - - - - - - -
cell1cell2
cell3cell4
cell5cell6
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/header.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/header.text deleted file mode 100644 index a42827b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/header.text +++ /dev/null @@ -1,32 +0,0 @@ -Simple header - -| cell1 | cell2 -|----- -| cell3 | cell4 - -Full header - -| cell1 | cell2 -|-------|-------| -| cell3 | cell4 - -With alignment and superfluous alignment defs - -| default | left | center | right | default -|-| :- |:-: | -: | - | :-: | :- -| cell1 | cell2 | cell3 | cell4 | cell5 - -With leading sep line - -|:-:|-:| -| cell1 | cell2 -|-------|-------| -| cell3 | cell4 - -Multiple bodies - -| cell1 | cell2 -+ :-: | -| cell3 | cell4 -|----||| -| cell5 | cell6 diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/no_table.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/no_table.html deleted file mode 100644 index dce46b1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/no_table.html +++ /dev/null @@ -1,3 +0,0 @@ -

No table

- -

| Some | thing | here

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/no_table.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/no_table.text deleted file mode 100644 index 90f90b3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/no_table.text +++ /dev/null @@ -1,3 +0,0 @@ -No table - -\| Some \| thing \| here diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/simple.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/simple.html deleted file mode 100644 index 186b1a1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/simple.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - - - - - - - - - - - - - - -
cell1cell2
cell3cell4
cell5cell6 |
cell7cell8
- -

Missing cells at end

- - - - - - - - - - - - - - - - - - - -
cell1cell2cell3
cell1  
 cell2cell3
- -

Escaped pipe characters

- - - - - - - - - - - - - - - - -
cell1 | cell1cell2
cell1cell2 |
cell1 | concell2
- -

Table with code elements

- - - - - - - - - - - - - - - - -
This is a span | with a pipe.   
Some span</em> herea span | with apipe.
- -

Special cases regarding codespan syntax

- - - - - - - - -
ab
- - - - - - - -
a
- - - - - - - - - -
tablewithial
- - - - - - - - - -
tablewithial
- -

not starting with a bar

- - - - - - - - -
simpletable
- - - - - - - - - - - - - - -
head1head2
cell1cell2
- - - - - - - - - - - - - - -
head1head2
 cell2
- - - - - - - - - - - - - - - - -
ab
cd
ef
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/simple.html.19 b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/simple.html.19 deleted file mode 100644 index db7c892..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/simple.html.19 +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - - - - - - - - - - - - - - -
cell1cell2
cell3cell4
cell5cell6 |
cell7cell8
- -

Missing cells at end

- - - - - - - - - - - - - - - - - - - -
cell1cell2cell3
cell1  
 cell2cell3
- -

Escaped pipe characters

- - - - - - - - - - - - - - - - -
cell1 | cell1cell2
cell1cell2 |
cell1 | concell2
- -

Table with code elements

- - - - - - - - - - - - - - - - -
This is a span | with a pipe.   
Some span</em> herea span | with apipe.
- -

Special cases regarding codespan syntax

- - - - - - - - -
ab
- - - - - - - -
a
- - - - - - - - - -
tablewithial
- - - - - - - - - -
tablewithial
- -

not starting with a bar

- - - - - - - - -
simpletable
- - - - - - - - - - - - - - -
head1head2
cell1cell2
- - - - - - - - - - - - - - -
head1head2
 cell2
- - - - - - - - - - - - - - - - -
ab
cd
ef
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/simple.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/simple.text deleted file mode 100644 index 2c176e8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/simple.text +++ /dev/null @@ -1,49 +0,0 @@ -| cell1 | cell2 | -|cell3 | cell4| -|cell5|cell6 \| -| cell7|cell8 - -Missing cells at end - -| cell1 | cell2 | cell3 | -| cell1 || -|| cell2 | cell3 - -Escaped pipe characters - -| cell1 \| cell1 | cell2 | -| cell1 | cell2 \| -| cell1 `|` con | cell2 - -Table with code elements - -| This is a span | with a pipe. -| Some span | here | a span | with a | pipe. - -Special cases regarding codespan syntax - -|a|`b` - -|`a` - -{:.cls} -| table | with | ial - -| table | with | ial -{:.cls} - -not starting with a bar - -simple | table - -head1 | head2 -------|------ -cell1 | cell2 - - head1 | head2 --------|------ - | cell2 - -| a | b | - c | d -| e | f | diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/table_with_footnote.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/table_with_footnote.html deleted file mode 100644 index 0bf6781..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/table_with_footnote.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - -
this is 1a table
with afootnote
- -
-
    -
  1. -

    Something

    - -
    -

    special here

    -
    -

    -
  2. -
-
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/table_with_footnote.latex b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/table_with_footnote.latex deleted file mode 100644 index 99b5312..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/table_with_footnote.latex +++ /dev/null @@ -1,11 +0,0 @@ -\begin{longtable}{|l|l|} -\hline -this is \footnote{Something - -\begin{quote} -special here -\end{quote}} & a table\\ -with a & footnote\\ -\hline -\end{longtable} - diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/table_with_footnote.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/table_with_footnote.text deleted file mode 100644 index 345fc5d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/14_table/table_with_footnote.text +++ /dev/null @@ -1,6 +0,0 @@ -| this is [^1] | a table -| with a | footnote - -[^1]: Something - - > special here diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/gh_128.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/gh_128.html deleted file mode 100644 index ab27b4b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/gh_128.html +++ /dev/null @@ -1,2 +0,0 @@ - diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/gh_128.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/gh_128.text deleted file mode 100644 index 95252a7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/gh_128.text +++ /dev/null @@ -1 +0,0 @@ -$$ $$ diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/itex2mml.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/itex2mml.html deleted file mode 100644 index 214212a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/itex2mml.html +++ /dev/null @@ -1 +0,0 @@ -f(x)=ax 3+bx 2+cx+df(x) = a{x^3} + b{x^2} + cx + d diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/itex2mml.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/itex2mml.options deleted file mode 100644 index 953bdae..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/itex2mml.options +++ /dev/null @@ -1 +0,0 @@ -:math_engine: itex2mml diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/itex2mml.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/itex2mml.text deleted file mode 100644 index 23fe297..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/itex2mml.text +++ /dev/null @@ -1 +0,0 @@ -$$f(x) = a{x^3} + b{x^2} + cx + d$$ diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjax_preview.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjax_preview.html deleted file mode 100644 index 5ef3a83..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjax_preview.html +++ /dev/null @@ -1,4 +0,0 @@ -

This is a 5 + 5 statement

- -
5 + 5
- diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjax_preview.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjax_preview.options deleted file mode 100644 index 75f702c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjax_preview.options +++ /dev/null @@ -1,2 +0,0 @@ -:math_engine_opts: - :preview: true diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjax_preview.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjax_preview.text deleted file mode 100644 index 7068767..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjax_preview.text +++ /dev/null @@ -1,5 +0,0 @@ -This is a $$5 + 5$$ statement - -$$ -5 + 5 -$$ diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjax_preview_simple.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjax_preview_simple.html deleted file mode 100644 index 623d286..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjax_preview_simple.html +++ /dev/null @@ -1,4 +0,0 @@ -

This is a math statement

- -
math
- diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjax_preview_simple.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjax_preview_simple.options deleted file mode 100644 index 28a68b5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjax_preview_simple.options +++ /dev/null @@ -1,2 +0,0 @@ -:math_engine_opts: - :preview: 'math' diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjax_preview_simple.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjax_preview_simple.text deleted file mode 100644 index 7068767..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjax_preview_simple.text +++ /dev/null @@ -1,5 +0,0 @@ -This is a $$5 + 5$$ statement - -$$ -5 + 5 -$$ diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode.html.19 b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode.html.19 deleted file mode 100644 index 4f95e8c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode.html.19 +++ /dev/null @@ -1,27 +0,0 @@ - - f - ( - x - ) - = - a - - - x - 3 - - - + - b - - - x - 2 - - - + - c - x - + - d - diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode.options deleted file mode 100644 index adc27e8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode.options +++ /dev/null @@ -1 +0,0 @@ -:math_engine: mathjaxnode diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode.text deleted file mode 100644 index 23fe297..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode.text +++ /dev/null @@ -1 +0,0 @@ -$$f(x) = a{x^3} + b{x^2} + cx + d$$ diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode_notexhints.html.19 b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode_notexhints.html.19 deleted file mode 100644 index 078f47d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode_notexhints.html.19 +++ /dev/null @@ -1,23 +0,0 @@ - - f - ( - x - ) - = - a - - x - 3 - - + - b - - x - 2 - - + - c - x - + - d - diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode_notexhints.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode_notexhints.options deleted file mode 100644 index 827e462..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode_notexhints.options +++ /dev/null @@ -1,3 +0,0 @@ -:math_engine: mathjaxnode -:math_engine_opts: - :texhints: false diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode_notexhints.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode_notexhints.text deleted file mode 100644 index 23fe297..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode_notexhints.text +++ /dev/null @@ -1 +0,0 @@ -$$f(x) = a{x^3} + b{x^2} + cx + d$$ diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode_semantics.html.19 b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode_semantics.html.19 deleted file mode 100644 index 7c39c20..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode_semantics.html.19 +++ /dev/null @@ -1,32 +0,0 @@ - - - - f - ( - x - ) - = - a - - - x - 3 - - - + - b - - - x - 2 - - - + - c - x - + - d - - f(x) = a{x^3} + b{x^2} + cx + d - - diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode_semantics.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode_semantics.options deleted file mode 100644 index 1f645b1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode_semantics.options +++ /dev/null @@ -1,3 +0,0 @@ -:math_engine: mathjaxnode -:math_engine_opts: - :semantics: true diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode_semantics.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode_semantics.text deleted file mode 100644 index 23fe297..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/mathjaxnode_semantics.text +++ /dev/null @@ -1 +0,0 @@ -$$f(x) = a{x^3} + b{x^2} + cx + d$$ diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/normal.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/normal.html deleted file mode 100644 index 3000a86..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/normal.html +++ /dev/null @@ -1,29 +0,0 @@ -

This is a para. -

- - - -

-This is a para.

- - - - - - - - - - - -
$$5+5$$
-
- - - - - diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/normal.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/normal.text deleted file mode 100644 index aa5984a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/normal.text +++ /dev/null @@ -1,30 +0,0 @@ -This is a para. -$$ \text{LaTeX} \lambda_5 $$ - -$$\lambda_5 = \alpha + 4$$ - -$$\lambda_\alpha > 5$$ -This is a para. - -$$\begin{align*} -&=5 \\ -&=6 \\ -\end{align*}$$ - -$$5+5$$ - - $$5+5$$ - - $$5+5$$ - - $$5+5$$ - - $$5+5$$ - -{:.cls} -$$5+5$$ -^ -$$5+5$$ -{:.cls} - -$$|x| = 5$$ diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/ritex.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/ritex.html deleted file mode 100644 index e9d61b5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/ritex.html +++ /dev/null @@ -1 +0,0 @@ -f(x)=ax3+bx2+cx+d diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/ritex.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/ritex.options deleted file mode 100644 index 0ef54eb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/ritex.options +++ /dev/null @@ -1 +0,0 @@ -:math_engine: ritex diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/ritex.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/ritex.text deleted file mode 100644 index 23fe297..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/15_math/ritex.text +++ /dev/null @@ -1 +0,0 @@ -$$f(x) = a{x^3} + b{x^2} + cx + d$$ diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/no_toc.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/no_toc.html deleted file mode 100644 index bbb831e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/no_toc.html +++ /dev/null @@ -1,14 +0,0 @@ - -

Header level 1

- -

Header level 2

- -

Header level 3

- -

Header level 4

- -

Other header level 1

- -

Other header level 2

- -

Other header level 3

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/no_toc.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/no_toc.text deleted file mode 100644 index 11ad829..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/no_toc.text +++ /dev/null @@ -1,16 +0,0 @@ -* Here comes the table of content -{:toc} - -# Header level 1 - -## Header level 2 - -### Header level 3 - -#### Header level 4 - -# Other header level 1 - -## Other header level 2 - -### Other header level 3 diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_exclude.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_exclude.html deleted file mode 100644 index d352684..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_exclude.html +++ /dev/null @@ -1,35 +0,0 @@ -

Contents

- - - -

Header level 1

- -

Header level 2

- -

Header level 3

- -

Header level 4

- -

Other header level 1

- -

Other header level 2

- -

Other header level 3

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_exclude.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_exclude.options deleted file mode 100644 index 8776b55..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_exclude.options +++ /dev/null @@ -1 +0,0 @@ -:auto_ids: true diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_exclude.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_exclude.text deleted file mode 100644 index d8f0b86..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_exclude.text +++ /dev/null @@ -1,19 +0,0 @@ -# Contents -{:.no_toc} - -* Here comes the table of content -{:toc} - -# Header level 1 - -## Header level 2 - -### Header level 3 - -#### Header level 4 - -# Other header level 1 - -## Other header level 2 - -### Other header level 3 diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_levels.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_levels.html deleted file mode 100644 index dee7055..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_levels.html +++ /dev/null @@ -1,24 +0,0 @@ - - -

Header level 1

- -

Header level 2

- -

Header level 3

- -

Header level 4

- -

Other header level 1

- -

Other header level 2

- -

Other header level 3

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_levels.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_levels.options deleted file mode 100644 index bdfbeba..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_levels.options +++ /dev/null @@ -1,2 +0,0 @@ -:toc_levels: 2..3 -:auto_ids: true diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_levels.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_levels.text deleted file mode 100644 index 11ad829..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_levels.text +++ /dev/null @@ -1,16 +0,0 @@ -* Here comes the table of content -{:toc} - -# Header level 1 - -## Header level 2 - -### Header level 3 - -#### Header level 4 - -# Other header level 1 - -## Other header level 2 - -### Other header level 3 diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_with_footnotes.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_with_footnotes.html deleted file mode 100644 index 14557e0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_with_footnotes.html +++ /dev/null @@ -1,13 +0,0 @@ - - -

Header1 level 1

- -
-
    -
  1. -

    Some footnote content here

    -
  2. -
-
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_with_footnotes.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_with_footnotes.options deleted file mode 100644 index 8776b55..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_with_footnotes.options +++ /dev/null @@ -1 +0,0 @@ -:auto_ids: true diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_with_footnotes.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_with_footnotes.text deleted file mode 100644 index 5879ed5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/block/16_toc/toc_with_footnotes.text +++ /dev/null @@ -1,6 +0,0 @@ -* Here comes the table of content -{:toc} - -# Header[^1] level 1 - -[^1]: Some footnote content here diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/encoding.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/encoding.html deleted file mode 100644 index 0339347..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/encoding.html +++ /dev/null @@ -1,46 +0,0 @@ -

Das ist gewöhnlich ein Über-Problem mit manchen
-Sälen http://example.org und anderen Dinge. Siehe -Über mich!

- -
-

Vielleicht höre ich nicht richtig?

-
- -
    -
  • Sollten wir uns das überlegen? Verhöhne mich nicht!
  • -
  • Ho ho höher! Sind *wir* da?
  • -
- -

Titel sind urschön

- -

Manche mögens ärmer

- -
öha
-was nun?
-
- -
-
Töne
-
Laute Geräusche
-
vielleicht noch was ähnliches
-
- - - - - - - - - - - - - - - - -
hochhöheram höchsten
überdrübermüde
- -

Das ist schön -gemacht

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/encoding.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/encoding.text deleted file mode 100644 index 65edf4b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/encoding.text +++ /dev/null @@ -1,28 +0,0 @@ -Das ist gewöhnlich *ein* [Über-Problem](http://example.org) mit manchen -Sälen und anderen Dinge. Siehe -![Über mich](http://example.org)! - -> Vielleicht *höre*{:.red} ich nicht richtig? -{:.test} - -* Sollten wir uns das überl*egen*? *Verhöhne* mich nicht! -* Ho ho höher! Sind \*wir\* da? - -Titel sind urschön -================== - -## Manche mögens *ärmer* {#hot} - - öha - was nun? - -Töne -: Laute Geräusche -: vielleicht noch was ä*hnliches* - -| hoch | höher | am höchsten | -|----------------------------| -| über | drüber | müde | - -

Das ist schön -gemacht

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/empty.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/empty.html deleted file mode 100644 index 56bac53..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/empty.html +++ /dev/null @@ -1,5 +0,0 @@ -

This is [] empty.

- -

This is [][] empty.

- -

This is [](test.html) empty.

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/empty.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/empty.text deleted file mode 100644 index cca5de5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/empty.text +++ /dev/null @@ -1,5 +0,0 @@ -This is [] empty. - -This is [][] empty. - -This is [](test.html) empty. diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/empty_title.htmlinput b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/empty_title.htmlinput deleted file mode 100644 index b95b2cc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/empty_title.htmlinput +++ /dev/null @@ -1,3 +0,0 @@ -

Image with empty title: alt text

- -

Link reference with empty title.

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/empty_title.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/empty_title.text deleted file mode 100644 index baabe7d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/empty_title.text +++ /dev/null @@ -1,7 +0,0 @@ -Image with empty title: ![alt text](/images/other.png) - -Link [reference][1] with empty title. - - - -[1]: http://example.tld diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/image_in_a.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/image_in_a.html deleted file mode 100644 index e1f4ade..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/image_in_a.html +++ /dev/null @@ -1,5 +0,0 @@ -

Simple: Some alt text

- -

Nested: Some alt ![img](text.png) text

- -

Simple: Some text alt text text

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/image_in_a.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/image_in_a.text deleted file mode 100644 index bdbfb65..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/image_in_a.text +++ /dev/null @@ -1,5 +0,0 @@ -Simple: [Some ![alt text](/images/other.png)](local.html) - -Nested: [Some ![alt ![img](text.png) text](/images/other.png)](local.html) - -Simple: [Some *text ![alt text](/images/other.png) text*](local.html) diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/imagelinks.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/imagelinks.html deleted file mode 100644 index 565d36f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/imagelinks.html +++ /dev/null @@ -1,15 +0,0 @@ -

Simple: alt text

- -

Simple with title: alt text

- -

Empty img link: alt text

- -

Reference style: alt text

- -

Reference style with title: alt text

- -

No alt text:

- -

No id: imgo

- -

With escaped pipe: an | pipe

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/imagelinks.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/imagelinks.text deleted file mode 100644 index 05050a2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/imagelinks.text +++ /dev/null @@ -1,18 +0,0 @@ -Simple: ![alt text](/images/other.png) - -Simple with title: ![alt text](/images/other.png "title") - -Empty img link: ![alt text]() - -Reference style: ![alt text][img] - -Reference style with title: ![alt text][imgo] - -No alt text: ![](other.png) - -No id: ![imgo] - -[img]: other.png -[imgo]: other.png "Title" - -With escaped pipe: ![an \| pipe](other.png) diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/inline.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/inline.html deleted file mode 100644 index 0810bc7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/inline.html +++ /dev/null @@ -1,46 +0,0 @@ -

simple URL

- -

simple URL

- -

simple URL with formatting

- -

simple URL with single quoted title

- -

simple URL with double quoted title

- -

simple URL [with ] escaped

- -

simple URL with ] escaped

- -

simple URL [with] nested

- -

simple URL with [no](link.html) inside

- -

simple URL with parens

- -

simple URL with parens

- -

simple URL broken -on line

- -

simple URL with spaces

- -

simple URL with spaces

- -

simple URL with spaces

- -

simple leading/trailing spaces

- -

simple leading/trailing spaces

- -

simple leading/trailing spaces

- -

bad [URL not

- -

bad [URL with parens](something(new.html)

- -

bad [URL with empty title](something.html ‘’)

- -

bad [URL](

- -

bad [URL](no

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/inline.html.19 b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/inline.html.19 deleted file mode 100644 index 8d00efa..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/inline.html.19 +++ /dev/null @@ -1,46 +0,0 @@ -

simple URL

- -

simple URL

- -

simple URL with formatting

- -

simple URL with single quoted title

- -

simple URL with double quoted title

- -

simple URL [with ] escaped

- -

simple URL with ] escaped

- -

simple URL [with] nested

- -

simple URL with [no](link.html) inside

- -

simple URL with parens

- -

simple URL with parens

- -

simple URL broken -on line

- -

simple URL with spaces

- -

simple URL with spaces

- -

simple URL with spaces

- -

simple leading/trailing spaces

- -

simple leading/trailing spaces

- -

simple leading/trailing spaces

- -

bad [URL not

- -

bad [URL with parens](something(new.html)

- -

bad [URL with empty title](something.html ‘’)

- -

bad [URL](

- -

bad [URL](no

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/inline.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/inline.text deleted file mode 100644 index c705764..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/inline.text +++ /dev/null @@ -1,48 +0,0 @@ -simple [URL]() - -simple [URL](something.html) - -simple [URL *with* formatting](something.html) - -simple [URL with single quoted title](something.html 'a t"itle') - -simple [URL with double quoted title](something.html "a t'itle") - -simple [URL \[with \] escaped](something.html) - -simple [URL with \] escaped](something.html) - -simple [URL [with] nested](something.html) - -simple [URL with [no](link.html) inside](something.html) - -simple [URL with parens](/something/to(do)) - -simple [URL with parens](/something/to(do "doit") - -simple [URL broken -on line](something.html -"title") - -simple [URL with spaces](with spaces.html) - -simple [URL with spaces](with spaces.html 'title') - -simple [URL with spaces](with (spaces).html) - -simple [leading/trailing spaces]( spaces.html) - -simple [leading/trailing spaces](spaces.html ) - -simple [leading/trailing spaces]( spaces.html ) - - -bad [URL [not](something.html) - -bad [URL with parens](something(new.html) - -bad [URL with empty title](something.html '') - -bad [URL]( - -bad [URL](no diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/link_defs.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/link_defs.html deleted file mode 100644 index 15e2ca7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/link_defs.html +++ /dev/null @@ -1,9 +0,0 @@ -

This is a para. -[id]: http://www.example.com/

- -
[4]: nourl
-
- -

Points to 1 and 2 and 3 but not [4]

- -

Points to _.:,;!?- and otherid8

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/link_defs.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/link_defs.text deleted file mode 100644 index 16a25b5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/link_defs.text +++ /dev/null @@ -1,27 +0,0 @@ -This is a para. -[id]: http://www.example.com/ - -[otherid1]: http://wwww.example.com/ "title 1" -[otherid2]: http://wwww.example.com/ 'title 2' -[otherid3]: -[otherid4]: 'title' -[otherid5]: some spaces.html -[otherid6]: some spaces.html 'title' -[otherid7]: some spaces - "title" -[otherid8]:test.html#'test' 'title' - -[break]: http://www.example.com/test/asdf.html - 'Another title' - -[1]: ignored.url - [1]: one.url - [2]: two.url - [3]: three.url - [4]: nourl - -Points to [1] and [2] and [3] but not [4] - -[_.:,;!?-]: http://example.com - -Points to [_.:,;!?-] and [otherid8] diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/link_defs_with_ial.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/link_defs_with_ial.html deleted file mode 100644 index f56d77d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/link_defs_with_ial.html +++ /dev/null @@ -1,4 +0,0 @@ -

Link def with attr and attr 2 and attr 3 and attr before

- -

test

- diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/link_defs_with_ial.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/link_defs_with_ial.text deleted file mode 100644 index 59398a3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/link_defs_with_ial.text +++ /dev/null @@ -1,16 +0,0 @@ -Link def with [attr] and [attr 2] and [attr 3] and [attr before] - -[attr]: http://example.com 'title' -{: hreflang="en" .test} - -[attr 2]: http://example.com 'title' -{: hreflang="en"} -{: .test} - -[attr 3]: http://example.com -{: .test} -test - -{: hreflang="en"} -{: .test} -[attr before]: http://example.com diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/links_with_angle_brackets.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/links_with_angle_brackets.html deleted file mode 100644 index ecaa31e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/links_with_angle_brackets.html +++ /dev/null @@ -1,3 +0,0 @@ -

This is a link.

- -

This is a link.

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/links_with_angle_brackets.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/links_with_angle_brackets.text deleted file mode 100644 index 2cf0ece..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/links_with_angle_brackets.text +++ /dev/null @@ -1,3 +0,0 @@ -This is a [link](). - -This is a [link]( 'and title'). diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/reference.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/reference.html deleted file mode 100644 index 49afd2e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/reference.html +++ /dev/null @@ -1,37 +0,0 @@ - -

simple URL and URL

- -

simple URL and URL

- -

simple 1 and isurl

- -

simple 1 and isurl

- -

this is [a holy isurl]

- -

no [resolution][] here and [here]

- -

with a break in -the text

- -

this not [isurl] and not [isurl]

- -

a Link with_BIG letters

- -

bad [no URL] d isurl

- -

[no url] invalid.html -[no url]:

- -

“title”

- -

test url but no title -test [urldef]

- -

[urldef]: some.url ‘title”

- -

some with spaces

- -

this is a ‘special’ occasion for /all/ of us

- -

this is predefined for URI

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/reference.html.19 b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/reference.html.19 deleted file mode 100644 index f6fed18..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/reference.html.19 +++ /dev/null @@ -1,37 +0,0 @@ - -

simple URL and URL

- -

simple URL and URL

- -

simple 1 and isurl

- -

simple 1 and isurl

- -

this is [a holy isurl]

- -

no [resolution][] here and [here]

- -

with a break in -the text

- -

this not [isurl] and not [isurl]

- -

a Link with_BIG letters

- -

bad [no URL] d isurl

- -

[no url] invalid.html -[no url]:

- -

“titleâ€

- -

test url but no title -test [urldef]

- -

[urldef]: some.url ‘titleâ€

- -

some with spaces

- -

this is a ‘special’ occasion for /all/ of us

- -

this is predefined for URI

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/reference.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/reference.options deleted file mode 100644 index efb4b01..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/reference.options +++ /dev/null @@ -1,3 +0,0 @@ -:link_defs: - predefined: [predefined.html] - URI: [uri.html, My URI] diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/reference.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/reference.text deleted file mode 100644 index 9f39fa7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/01_link/reference.text +++ /dev/null @@ -1,53 +0,0 @@ -[isurl]: someurl.html - [1]: otherurl.html - -simple [URL][1] and [URL][isurl] - -simple [URL] [1] and [URL] -[isurl] - -simple [1][] and [isurl][] - -simple [1] and [isurl] - -this is [a holy [isurl]] - -no [resolution][] here and [here] - -with a [break in -the text] - - [break in the text]: url.html - -this not \[isurl] and not [isurl\] - -a [Link with_BIG] letters - - [link WITH_big]: letters.html - 'This is the title' - -bad [no URL] d [isurl] - -[no url] invalid.html -[no url]: - -[URL but no title]: invalid.html - - "title" - -test [url but no title] -test [urldef] - -[urldef]: some.url 'title" - - -some [with spaces] - -[with spaces]: with spaces.html "title" - -this [is a 'special' occasion for /all/ of us] - -[is a 'special' occasion for /all/ of us]: occasion.html - - -this is [predefined] for [URI] diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/empty.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/empty.html deleted file mode 100644 index 127e694..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/empty.html +++ /dev/null @@ -1,3 +0,0 @@ -

This __is **empty.

- -

This **is empty.

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/empty.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/empty.text deleted file mode 100644 index c99d053..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/empty.text +++ /dev/null @@ -1,3 +0,0 @@ -This __is **empty. - -This ****is empty. diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/errors.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/errors.html deleted file mode 100644 index e62f03f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/errors.html +++ /dev/null @@ -1,9 +0,0 @@ -

This is a *star.

- -

This is a **star.

- -

This is *a *star.

- -

This is *a star*.

- -

This** is** a star.

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/errors.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/errors.text deleted file mode 100644 index e80e5eb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/errors.text +++ /dev/null @@ -1,9 +0,0 @@ -This is a *star. - -This is a **star. - -This is **a *star*. - -This is *a star\*. - -This** is** a star. diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/nesting.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/nesting.html deleted file mode 100644 index 3d34cee..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/nesting.html +++ /dev/null @@ -1,41 +0,0 @@ -
    -
  • test test
  • -
  • test test
  • -
  • test test
  • -
  • test test
  • -
  • test test
  • -
  • test test
  • -
  • test test
  • -
  • test test
  • -
  • test test
  • -
  • test test
  • -
  • test test
  • -
  • test test
  • -
  • test test
  • -
  • test test
  • -
  • test test
  • -
  • test test
  • -
-
    -
  • ab
  • -
  • ab
  • -
  • abc
  • -
  • ab
  • -
  • ab
  • -
  • abc
  • -
-
    -
  • _a_b
  • -
  • a_b_
  • -
  • a_b_c
  • -
  • __a__b
  • -
  • a__b__
  • -
  • a__b__c
  • -
  • a__2__c
  • -
  • a__2__3
  • -
  • 1__2__3
  • -
-
    -
  • a _b_ c
  • -
  • a __b__ c
  • -
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/nesting.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/nesting.text deleted file mode 100644 index ba67e84..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/nesting.text +++ /dev/null @@ -1,36 +0,0 @@ -- ***test test*** -- ___test test___ -- *test **test*** -- **test *test*** -- ***test* test** -- ***test** test* -- ***test* test** -- **test *test*** -- *test **test*** -- _test __test___ -- __test _test___ -- ___test_ test__ -- ___test__ test_ -- ___test_ test__ -- __test _test___ -- _test __test___ -^ -- *a*b -- a*b* -- a*b*c -- **a**b -- a**b** -- a**b**c -^ -- _a_b -- a_b_ -- a_b_c -- __a__b -- a__b__ -- a__b__c -- a__2__c -- a__2__3 -- 1__2__3 -^ -- *a _b_ c* -- **a __b__ c** diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/normal.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/normal.html deleted file mode 100644 index e9b04d3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/normal.html +++ /dev/null @@ -1,48 +0,0 @@ -

This is so hard.

- -

This is so hard too.

- -

At start -At start

- -

At end -At end

- -

At start -At start

- -

At end -At end

- -

And nested.

- -

And nest**ed.

- -

And *nested* like this.

- -

And not_nest_ed.

- -

And nested.

- -

And nested.

- -

And neste.

- -

And lonely * here*.

- -

And lonely ** here**.

- -

And lonely ** here.

- -

** and here**.

- -

And compli*cated * here

- -

Some**what more * **here

- -

Do it *this* way -Or this *this* way -Or that *that* way -Or that *that* way

- -

http://blah.com/blah_%28

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/normal.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/normal.text deleted file mode 100644 index e3c82bb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/02_emphasis/normal.text +++ /dev/null @@ -1,48 +0,0 @@ -This *is* so **hard**. - -This _is_ so __hard__ too. - -*At* start -*At* start - -At *end* -At *end* - -_At_ start -_At_ start - -At _end_ -At _end_ - -And *nest**ed***. - -And *nest**ed*. - -And *nest**ed* like** this. - -And *not_nest_ed*. - -And ***nested***. - -And ___nested___. - -And **nest*e***. - -And lonely * here*. - -And lonely ** here**. - -And **lonely ** here**. - -** and here**. - -And **compli*cated \*** here - -Some***what* more * ***he*re - -Do it *\*this\** way -Or this \**this*\* way -Or that *\*that*\* way -Or that \**that\** way - -[http://blah.com/blah_%28](http://blah.com/blah_%28) diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/empty.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/empty.html deleted file mode 100644 index 20c5051..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/empty.html +++ /dev/null @@ -1,5 +0,0 @@ -

This is `` empty.

- -

This is ``empty.

- -

This is ````empty.

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/empty.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/empty.text deleted file mode 100644 index cbb9152..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/empty.text +++ /dev/null @@ -1,5 +0,0 @@ -This is `` empty. - -This is ``empty. - -This is ````empty. diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/errors.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/errors.html deleted file mode 100644 index 1d341a8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/errors.html +++ /dev/null @@ -1 +0,0 @@ -

Not ended `span.

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/errors.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/errors.text deleted file mode 100644 index 7a948b4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/errors.text +++ /dev/null @@ -1 +0,0 @@ -Not ended `span. diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting-minted.latex b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting-minted.latex deleted file mode 100644 index a1f84d9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting-minted.latex +++ /dev/null @@ -1,2 +0,0 @@ -You can say \mintinline{ruby}{x = Class.new}, for example. - diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting-minted.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting-minted.options deleted file mode 100644 index c11ebb6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting-minted.options +++ /dev/null @@ -1 +0,0 @@ -:syntax_highlighter: minted diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting-minted.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting-minted.text deleted file mode 100644 index 7373290..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting-minted.text +++ /dev/null @@ -1 +0,0 @@ -You can say `x = Class.new`{:.language-ruby}, for example. diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting-rouge.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting-rouge.html deleted file mode 100644 index 4294542..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting-rouge.html +++ /dev/null @@ -1 +0,0 @@ -

You can say x = Class.new, for example.

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting-rouge.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting-rouge.options deleted file mode 100644 index 9ac61e7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting-rouge.options +++ /dev/null @@ -1 +0,0 @@ -:syntax_highlighter: rouge diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting-rouge.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting-rouge.text deleted file mode 100644 index 7373290..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting-rouge.text +++ /dev/null @@ -1 +0,0 @@ -You can say `x = Class.new`{:.language-ruby}, for example. diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting.html deleted file mode 100644 index c6860f6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting.html +++ /dev/null @@ -1 +0,0 @@ -

You can say x = Class.new, for example.

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting.text deleted file mode 100644 index 7373290..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/highlighting.text +++ /dev/null @@ -1 +0,0 @@ -You can say `x = Class.new`{:.language-ruby}, for example. diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/normal.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/normal.html deleted file mode 100644 index 68eddbe..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/normal.html +++ /dev/null @@ -1,16 +0,0 @@ -

This is a simple span.

- -

With some<ht>&ml in it.

- -

And ` backticks.

- -

And ``some`` more.

- -

With backslash in\ it.

- -

This is a ` literal backtick. -As `are` these!

- -

No literal backtick.

- -

something

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/normal.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/normal.text deleted file mode 100644 index 10d06e2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/03_codespan/normal.text +++ /dev/null @@ -1,16 +0,0 @@ -This is `a` simple span. - -With `some&ml` in it. - -And `` ` `` backticks. - -And ``` ``some`` ``` more. - -With backslash `in\` it. - -This is a ` literal backtick. -As \`are\` these! - -No `` literal backtick``. - -`something` diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/definitions.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/definitions.html deleted file mode 100644 index 9012cc0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/definitions.html +++ /dev/null @@ -1,17 +0,0 @@ -

Some para.

- -
-

blockquote

-
- -
    -
  • a list -with some text
  • -
- -
    -
  • other list
  • -
-
code
-
- diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/definitions.latex b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/definitions.latex deleted file mode 100644 index f666976..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/definitions.latex +++ /dev/null @@ -1,17 +0,0 @@ -Some para. - -\begin{quote} -blockquote -\end{quote} - -\begin{itemize} -\item a list -with some text -\end{itemize} - -\begin{itemize} -\item other list -\end{itemize} -\begin{verbatim}code -\end{verbatim} - diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/definitions.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/definitions.text deleted file mode 100644 index 44b52e0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/definitions.text +++ /dev/null @@ -1,24 +0,0 @@ -Some para. - -[^footnote]: ignored definition -[^footnote]: Some footnote text - -> blockquote - -[^other]: some - foot - - note text - -* a list - with some text - -[^tnote]: foot note - -* other list -^ - code - -[^1]: - > a blockquote - and some para diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/footnote_nr.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/footnote_nr.html deleted file mode 100644 index 5133521..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/footnote_nr.html +++ /dev/null @@ -1,12 +0,0 @@ -

This is a footnote35. And another36.

- -
-
    -
  1. -

    Some text.

    -
  2. -
  3. -

    Some other text.

    -
  4. -
-
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/footnote_nr.latex b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/footnote_nr.latex deleted file mode 100644 index 8f07dde..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/footnote_nr.latex +++ /dev/null @@ -1,2 +0,0 @@ -This is a footnote\footnote{Some text.}. And another\footnote{Some other text.}. - diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/footnote_nr.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/footnote_nr.options deleted file mode 100644 index f606ecf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/footnote_nr.options +++ /dev/null @@ -1 +0,0 @@ -:footnote_nr: 35 diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/footnote_nr.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/footnote_nr.text deleted file mode 100644 index cad2935..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/footnote_nr.text +++ /dev/null @@ -1,4 +0,0 @@ -This is a footnote[^ab]. And another[^bc]. - -[^ab]: Some text. -[^bc]: Some other text. diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/inside_footnote.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/inside_footnote.html deleted file mode 100644 index be59f7f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/inside_footnote.html +++ /dev/null @@ -1,17 +0,0 @@ -

Lorem ipsum1 dolor sit amet.

- -

Lorem ipsum2 dolor sit amet.

- -
-
    -
  1. -

    Consecutur adisping.3

    -
  2. -
  3. -

    Sed ut perspiciatis unde omnis.

    -
  4. -
  5. -

    Sed ut.

    -
  6. -
-
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/inside_footnote.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/inside_footnote.text deleted file mode 100644 index f4f91e9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/inside_footnote.text +++ /dev/null @@ -1,9 +0,0 @@ -Lorem ipsum[^first] dolor sit amet. - -Lorem ipsum[^second] dolor sit amet. - -[^first]: Consecutur adisping.[^third] - -[^second]: Sed ut perspiciatis unde omnis. - -[^third]: Sed ut. diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/markers.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/markers.html deleted file mode 100644 index 3a5bc28..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/markers.html +++ /dev/null @@ -1,46 +0,0 @@ -

This is some *ref.1

- -
-

a blockquote 2

-
- -
    -
  • and a list item 3
  • -
- -

And a header4

- -

A marker without a definition [^without].

- -

A marker 5 used twice1 and thrice1.

- -
-
    -
  1. -

    Some foot note text 2 3

    -
  2. -
  3. -

    other text -with more lines

    - -
    -

    and a quote

    -
    -

    -
  4. -
  5. -

    some text

    -
  6. -
  7. - -
    code block
    -continued here
    -
    -

    -
  8. -
  9. - -

    -
  10. -
-
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/markers.latex b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/markers.latex deleted file mode 100644 index fb5237e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/markers.latex +++ /dev/null @@ -1,23 +0,0 @@ -This is some *ref.\footnote{Some foot note text} - -\begin{quote} -a blockquote \footnote{other text -with more lines - -\begin{quote} -and a quote -\end{quote}} -\end{quote} - -\begin{itemize} -\item and a list item \footnote{some \emph{text}} -\end{itemize} - -\section*{And a header\footnote{\begin{verbatim}code block -continued here -\end{verbatim}}} - -A marker without a definition [\^{}without]. - -A marker \footnote{} used twice\footnote{Some foot note text} and thrice\footnote{Some foot note text}. - diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/markers.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/markers.text deleted file mode 100644 index 42b77fb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/markers.text +++ /dev/null @@ -1,27 +0,0 @@ -This is some *ref.[^fn] - -[^fn]: Some foot note text -{: .class} - -> a blockquote [^3] - -* and a list item [^1] - -# And a header[^now] - -[^1]:some *text* -[^3]: other text - with more lines - - > and a quote - -A marker without a definition [^without]. - -A marker [^empty] used twice[^fn] and thrice[^fn]. - -[^now]: - - code block - continued here - -[^empty]: diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/placement.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/placement.html deleted file mode 100644 index c6d0eb8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/placement.html +++ /dev/null @@ -1,11 +0,0 @@ -
-
    -
  1. -

    Footnote text

    -
  2. -
-
- -

Some para with a1 footnote.

- -

And another para.

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/placement.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/placement.text deleted file mode 100644 index eb8ab3d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/04_footnote/placement.text +++ /dev/null @@ -1,8 +0,0 @@ -* footnotes will be placed here -{:footnotes} - -Some para with a[^1] footnote. - -[^1]: Footnote text - -And another para. diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/across_lines.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/across_lines.html deleted file mode 100644 index e7cec40..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/across_lines.html +++ /dev/null @@ -1 +0,0 @@ -

Link: test

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/across_lines.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/across_lines.text deleted file mode 100644 index 8f39d95..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/across_lines.text +++ /dev/null @@ -1,2 +0,0 @@ -Link: test diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/button.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/button.html deleted file mode 100644 index c49bb52..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/button.html +++ /dev/null @@ -1,7 +0,0 @@ -

- -

First some text and then a

- -

and then text.

- -

A it.

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/button.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/button.text deleted file mode 100644 index e0a7783..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/button.text +++ /dev/null @@ -1,7 +0,0 @@ - - -First some text and then a - - and then text. - -A it. diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/invalid.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/invalid.html deleted file mode 100644 index 030552f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/invalid.html +++ /dev/null @@ -1 +0,0 @@ -

This is some text

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/invalid.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/invalid.text deleted file mode 100644 index 383f0a8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/invalid.text +++ /dev/null @@ -1 +0,0 @@ -This is some text diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/link_with_mailto.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/link_with_mailto.html deleted file mode 100644 index 7d0d6ad..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/link_with_mailto.html +++ /dev/null @@ -1 +0,0 @@ -

Link: text

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/link_with_mailto.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/link_with_mailto.text deleted file mode 100644 index fb01619..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/link_with_mailto.text +++ /dev/null @@ -1 +0,0 @@ -Link: text diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/markdown_attr.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/markdown_attr.html deleted file mode 100644 index 44158c3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/markdown_attr.html +++ /dev/null @@ -1,6 +0,0 @@ -

This is text -This is *text* -This is text -This is text -This is *nothing* to fear about. -This is <http://example.com>.

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/markdown_attr.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/markdown_attr.text deleted file mode 100644 index dcc10ff..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/markdown_attr.text +++ /dev/null @@ -1,6 +0,0 @@ -This is *text* -This is *text* -This is *text* -This is *text* -This is *nothing* to *fear* about. -This is . diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/normal.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/normal.html deleted file mode 100644 index 0da5f26..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/normal.html +++ /dev/null @@ -1,43 +0,0 @@ -

Empty !

- -

title is a title.

- -

This is .

- -

This is comment.

- -

This is multiline comment.

- -

This is tag -now .

- -

This is tag - now.

- -

This is an empty tag.

- -

This is something strange.

- -

Auto-closing:

- -

Expanding:

- -

An invalid tag: <hR>

- -

A <p>block tag</p>.

- -

An invalid </closing> tag.

- -

A tag.

- -

An unclosed tag.

- -

Some element with | pipe symbol

- -

Some element with | pipe symbol

- -

Some element with | pipe -symbol|

- -

underlined

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/normal.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/normal.text deleted file mode 100644 index 0156d7c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/normal.text +++ /dev/null @@ -1,43 +0,0 @@ -Empty ! - -title is a title. - -This is . - -This is comment. - -This is multiline comment. - -This is tag -now . - -This is tag - now. - -This is an empty tag. - -This is _something strange_. - -Auto-closing:
- -Expanding: - -An invalid tag:
- -A

block tag

. - -An invalid tag. - -A tag. - -An unclosed *tag.* - -Some element with | pipe symbol - -Some element with | pipe symbol - -Some element with | pipe -symbol| - -underlined diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/raw_span_elements.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/raw_span_elements.html deleted file mode 100644 index 808f1db..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/raw_span_elements.html +++ /dev/null @@ -1,2 +0,0 @@ -

This is raw --version and --version and --version and ----version.

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/raw_span_elements.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/raw_span_elements.text deleted file mode 100644 index 5b128fc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/05_html/raw_span_elements.text +++ /dev/null @@ -1,2 +0,0 @@ -This is raw --version and --version and --version and ----version. diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/abbreviations/abbrev.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/abbreviations/abbrev.html deleted file mode 100644 index f247c53..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/abbreviations/abbrev.html +++ /dev/null @@ -1,21 +0,0 @@ -

This is some text.

- -

There is some real concern about OtHeR!

- -

is some Think empty about Oesterreich. CSS und CSS3

- -

no abbrev here because there is someone and kulis some

- -
    -
  • (X)HTML test
  • -
  • line two
  • -
- -

(X)HTML

- -
    -
  • test (X)HTML
  • -
- -

This is awesome.

- diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/abbreviations/abbrev.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/abbreviations/abbrev.text deleted file mode 100644 index 1aa8100..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/abbreviations/abbrev.text +++ /dev/null @@ -1,34 +0,0 @@ -This is some text. - -*[is some]: Yes it is -*[OtHeR!]: This & that - -*[is some]: It is, yes -*[empty]: - -There *is some real* concern about OtHeR! - -is some Think empty about Oesterreich. CSS und CSS3 - -no abbrev here because there is someone and kulis some - -*[Oesterreich]: Very nice country - -*[CSS]: Cascading -*[CSS3]: Cascading 3 - -* (X)HTML test -* line two - -[(X)HTML](http://en.wikipedia.org/wiki/Xhtml) - -* test (X)HTML - -*[(X)HTML]: (eXtensible) HyperText Markup Language - - -This is awesome. - -{:.testit} -*[awesome]: Some text here -{:.test} diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/abbreviations/abbrev_defs.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/abbreviations/abbrev_defs.html deleted file mode 100644 index 108fcfc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/abbreviations/abbrev_defs.html +++ /dev/null @@ -1,2 +0,0 @@ -
*[4]: noabbrev
-
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/abbreviations/abbrev_defs.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/abbreviations/abbrev_defs.text deleted file mode 100644 index 3f3a0e5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/abbreviations/abbrev_defs.text +++ /dev/null @@ -1,5 +0,0 @@ -*[ABBR]: Some abbreviations - *[one abbr]: one abbrev - *[2 and other]: another - *[3]: yet another - *[4]: noabbrev diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/autolinks/url_links.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/autolinks/url_links.html deleted file mode 100644 index d170eef..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/autolinks/url_links.html +++ /dev/null @@ -1,14 +0,0 @@ -

This should be a http://www.example.com/ link. -This should be a john.doe@example.com link. -As should john.doe@example.com this. -As should CSS@example.com this. -Another ampersand http://www.example.com/?doit&x=y link. -More entities http://www.example.com/?doit&x="y&z=y.

- -

Email international übung@macht.den.meister.de, ü.äß@hülse.de -Email invalid: <me@example.com>

- -

Autolink with underscore: http://www.example.com/with_under_score

- -

http://www.example.com/

- diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/autolinks/url_links.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/autolinks/url_links.text deleted file mode 100644 index f63e599..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/autolinks/url_links.text +++ /dev/null @@ -1,15 +0,0 @@ -This should be a link. -This should be a link. -As should this. -As should this. -Another ampersand link. -More entities . - -Email international <übung@macht.den.meister.de>, <ü.äß@hülse.de> -Email invalid: <[me@example.com](mailtos:me@example.com)> - -Autolink with underscore: - - - -*[CSS]: Cascading diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/escaped_chars/normal.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/escaped_chars/normal.html deleted file mode 100644 index 015d594..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/escaped_chars/normal.html +++ /dev/null @@ -1,47 +0,0 @@ -

\

- -

.

- -

*

- -

_

- -

+

- -

-

- -

`

- -

(

- -

)

- -

[

- -

]

- -

{

- -

}

- -

#

- -

!

- -

<<

- -

>>

- -

:

- -

|

- -

"

- -

'

- -

=

- -

>

- -

<

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/escaped_chars/normal.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/escaped_chars/normal.text deleted file mode 100644 index 1c47104..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/escaped_chars/normal.text +++ /dev/null @@ -1,47 +0,0 @@ -\\ - -\. - -\* - -\_ - -\+ - -\- - -\` - -\( - -\) - -\[ - -\] - -\{ - -\} - -\# - -\! - -\<< - -\>> - -\: - -\| - -\" - -\' - -\= - -\> - -\< diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/comment.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/comment.html deleted file mode 100644 index 3544d49..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/comment.html +++ /dev/null @@ -1,6 +0,0 @@ -

This is a paragraph. -This is a paragraph. -This is a . -This is a paragraph. -This is a {:/comment} simple {:/} paragraph. -This is a {::comment} paragraph.

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/comment.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/comment.text deleted file mode 100644 index 8b9e8d3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/comment.text +++ /dev/null @@ -1,6 +0,0 @@ -This is a {::comment}simple{:/} paragraph. -This is a {::comment}simple{:/comment} paragraph. -This is a {::comment}simple {:/other} paragraph{:/comment}. -This is a {::comment/} paragraph. -This is a {:/comment} simple {:/} paragraph. -This is a {::comment} paragraph. diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/ignored.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/ignored.html deleted file mode 100644 index 63c2c40..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/ignored.html +++ /dev/null @@ -1 +0,0 @@ -

This is {::something}paragraph{:/}

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/ignored.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/ignored.text deleted file mode 100644 index a7e7737..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/ignored.text +++ /dev/null @@ -1 +0,0 @@ -This is {::something}paragraph{:/} diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/nomarkdown.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/nomarkdown.html deleted file mode 100644 index 83de931..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/nomarkdown.html +++ /dev/null @@ -1 +0,0 @@ -

This is *some* text.

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/nomarkdown.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/nomarkdown.text deleted file mode 100644 index 57c4b38..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/nomarkdown.text +++ /dev/null @@ -1 +0,0 @@ -This is {::nomarkdown}*some*{:/} text. diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/options.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/options.html deleted file mode 100644 index 48e3076..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/options.html +++ /dev/null @@ -1 +0,0 @@ -

This is an option *true*!

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/options.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/options.text deleted file mode 100644 index e289491..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/extension/options.text +++ /dev/null @@ -1 +0,0 @@ -This is an {::options parse_span_html="false" /} option *true*! diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/ial/simple.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/ial/simple.html deleted file mode 100644 index c0f3a47..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/ial/simple.html +++ /dev/null @@ -1,6 +0,0 @@ -

This is a span.

- -

This is a span.

- -

This is an{: .ignored} span ial. -This is an{: .escaped} span ial.

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/ial/simple.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/ial/simple.text deleted file mode 100644 index 8945602..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/ial/simple.text +++ /dev/null @@ -1,6 +0,0 @@ -This is a `span`{: .hund #dog}. - -This is a `span`{: .hund #dog}{: .katz key='val'}. - -This is an{: .ignored} span ial. -This is an\{: .escaped} span ial. diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/line_breaks/normal.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/line_breaks/normal.html deleted file mode 100644 index 11066a5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/line_breaks/normal.html +++ /dev/null @@ -1,11 +0,0 @@ -

This is a line
-with a line break.

- -

This is a line -without a line break.

- -

This is a line
-with a line\
-break.

- -

Line break on last line.

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/line_breaks/normal.latex b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/line_breaks/normal.latex deleted file mode 100644 index a62ff56..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/line_breaks/normal.latex +++ /dev/null @@ -1,12 +0,0 @@ -This is a line\newline -with a line break. - -This is a line -without a line break. - -This is a line \newline -with a line\textbackslash{} \newline -break. - -Line break on last line. - diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/line_breaks/normal.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/line_breaks/normal.text deleted file mode 100644 index 92f866f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/line_breaks/normal.text +++ /dev/null @@ -1,11 +0,0 @@ -This is a line -with a line break. - -This is a line -without a line break. - -This is a line \\ -with a line\\ -break. - -Line break on last line. diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/itex2mml.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/itex2mml.html deleted file mode 100644 index 4e195d1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/itex2mml.html +++ /dev/null @@ -1 +0,0 @@ -

This is f(x)=ax 3+bx 2+cx+df(x) = a{x^3} + b{x^2} + cx + d something!

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/itex2mml.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/itex2mml.options deleted file mode 100644 index 953bdae..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/itex2mml.options +++ /dev/null @@ -1 +0,0 @@ -:math_engine: itex2mml diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/itex2mml.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/itex2mml.text deleted file mode 100644 index 3e20b55..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/itex2mml.text +++ /dev/null @@ -1 +0,0 @@ -This is $$f(x) = a{x^3} + b{x^2} + cx + d$$ something! diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/mathjaxnode.html.19 b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/mathjaxnode.html.19 deleted file mode 100644 index 5ba3a68..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/mathjaxnode.html.19 +++ /dev/null @@ -1,27 +0,0 @@ -

This is - f - ( - x - ) - = - a - - - x - 3 - - - + - b - - - x - 2 - - - + - c - x - + - d - something!

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/mathjaxnode.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/mathjaxnode.options deleted file mode 100644 index adc27e8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/mathjaxnode.options +++ /dev/null @@ -1 +0,0 @@ -:math_engine: mathjaxnode diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/mathjaxnode.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/mathjaxnode.text deleted file mode 100644 index 3e20b55..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/mathjaxnode.text +++ /dev/null @@ -1 +0,0 @@ -This is $$f(x) = a{x^3} + b{x^2} + cx + d$$ something! diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/normal.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/normal.html deleted file mode 100644 index d99130e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/normal.html +++ /dev/null @@ -1,10 +0,0 @@ -

This is some math. With new line characters in between.

- -

inline math, $5.00 $$no math$$

- -

$$5+5$$ inline math

- -

- -

$$5+5$$

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/normal.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/normal.text deleted file mode 100644 index e37a007..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/normal.text +++ /dev/null @@ -1,10 +0,0 @@ -This is $$\lambda_\alpha > 5$$ some math. With $$1 -+ 1$$ new line characters in between. - -$$5+5$$ inline math, $5.00 \$$no math$$ - -\$\$5+5$$ inline math - -\$$5+5$$ - -\$\$5+5$$ diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/ritex.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/ritex.html deleted file mode 100644 index 60ba8fe..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/ritex.html +++ /dev/null @@ -1 +0,0 @@ -

This is f(x)=ax3+bx2+cx+d something!

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/ritex.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/ritex.options deleted file mode 100644 index 0ef54eb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/ritex.options +++ /dev/null @@ -1 +0,0 @@ -:math_engine: ritex diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/ritex.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/ritex.text deleted file mode 100644 index 3e20b55..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/math/ritex.text +++ /dev/null @@ -1 +0,0 @@ -This is $$f(x) = a{x^3} + b{x^2} + cx + d$$ something! diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities.html deleted file mode 100644 index 96b3b5c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities.html +++ /dev/null @@ -1,6 +0,0 @@ -

This is the A&O. © 2008 by me -As well \& as this. Some ŗ other -values may ¯ may also show but -not st. like &#xYZ;.

- -

This is BS&T; done!

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities.options deleted file mode 100644 index 036c561..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities.options +++ /dev/null @@ -1 +0,0 @@ -:entity_output: :as_input diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities.text deleted file mode 100644 index 0446f4c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities.text +++ /dev/null @@ -1,6 +0,0 @@ -This is the A&O. © 2008 by me -As well \& as this. Some ŗ other -values may ¯ may also show but -not st. like &#xYZ;. - -This is BS&T; done! diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_char.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_char.html deleted file mode 100644 index 7507f75..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_char.html +++ /dev/null @@ -1 +0,0 @@ -

This "is" 'the' A&O. © 2008 by me ŗ and λ

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_char.html.19 b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_char.html.19 deleted file mode 100644 index ed2817b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_char.html.19 +++ /dev/null @@ -1 +0,0 @@ -

This "is" 'the' A&O. © 2008 by me ŗ and λ

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_char.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_char.options deleted file mode 100644 index 32a751e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_char.options +++ /dev/null @@ -1,2 +0,0 @@ -:entity_output: :as_char -:smart_quotes: apos,apos,quot,quot diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_char.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_char.text deleted file mode 100644 index 279b511..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_char.text +++ /dev/null @@ -1 +0,0 @@ -This "is" 'the' A&O. © 2008 by me ŗ and λ diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_input.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_input.html deleted file mode 100644 index d2eec9d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_input.html +++ /dev/null @@ -1 +0,0 @@ -

This is the A&O. © 2008 by me ŗ and λ

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_input.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_input.options deleted file mode 100644 index 036c561..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_input.options +++ /dev/null @@ -1 +0,0 @@ -:entity_output: :as_input diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_input.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_input.text deleted file mode 100644 index 1ddf7cd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_as_input.text +++ /dev/null @@ -1 +0,0 @@ -This is the A&O. © 2008 by me ŗ and λ diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_numeric.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_numeric.html deleted file mode 100644 index d04613e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_numeric.html +++ /dev/null @@ -1 +0,0 @@ -

This is the A&O. © 2008 by me ŗ and λ

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_numeric.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_numeric.options deleted file mode 100644 index 2e6e0a1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_numeric.options +++ /dev/null @@ -1 +0,0 @@ -:entity_output: :numeric diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_numeric.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_numeric.text deleted file mode 100644 index 1ddf7cd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_numeric.text +++ /dev/null @@ -1 +0,0 @@ -This is the A&O. © 2008 by me ŗ and λ diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_symbolic.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_symbolic.html deleted file mode 100644 index 258ba14..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_symbolic.html +++ /dev/null @@ -1 +0,0 @@ -

This is the A&O. © 2008 by me ŗ and λ

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_symbolic.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_symbolic.options deleted file mode 100644 index c195785..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_symbolic.options +++ /dev/null @@ -1 +0,0 @@ -:entity_output: :symbolic diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_symbolic.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_symbolic.text deleted file mode 100644 index 1ddf7cd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/entities_symbolic.text +++ /dev/null @@ -1 +0,0 @@ -This is the A&O. © 2008 by me ŗ and λ diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/greaterthan.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/greaterthan.html deleted file mode 100644 index dcce4cc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/greaterthan.html +++ /dev/null @@ -1 +0,0 @@ -

2 > 1 > 0

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/greaterthan.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/greaterthan.text deleted file mode 100644 index 7dfb7f1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/greaterthan.text +++ /dev/null @@ -1 +0,0 @@ -2 > 1 > 0 diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/lowerthan.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/lowerthan.html deleted file mode 100644 index 8ebac23..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/lowerthan.html +++ /dev/null @@ -1 +0,0 @@ -

0 < 1 < 2

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/lowerthan.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/lowerthan.text deleted file mode 100644 index 038df8b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/lowerthan.text +++ /dev/null @@ -1 +0,0 @@ -0 < 1 < 2 diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/typography.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/typography.html deleted file mode 100644 index 0effd5b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/typography.html +++ /dev/null @@ -1,30 +0,0 @@ -

This is… something—this too–!

- -

This «is» some text, « this » too!

- -

“Fancy quotes” are ‘cool’, even in the ’80s! -Je t’ aime. You’re a funny one! Thomas’ name -Mark’s name. “…you” -“‘Nested’ quotes are ‘possible’”, too! -‘“Otherway” is “round”’!

- -

‘Opening now!’

- -

’80s are really cool.

- -

Cluster’s Last Stand.

- -

Nam liber tempor -“…At vero eos et accusam”

- -

Single underscores should work.”

- -

Single asterisks should work.”

- -

Double underscores should work.’

- -

Double asterisks should work.’

- -

Hurrah!

- -

Absolutely.’

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/typography.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/typography.options deleted file mode 100644 index 4f1c17c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/typography.options +++ /dev/null @@ -1 +0,0 @@ -:entity_output: symbolic diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/typography.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/typography.text deleted file mode 100644 index e4cdb41..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases/span/text_substitutions/typography.text +++ /dev/null @@ -1,30 +0,0 @@ -This is... something---this too--! - -This <> some text, << this >> too! - -"Fancy quotes" are 'cool', even in the '80s! -Je t' aime. You're a funny one! Thomas' name -Mark's name. "...you" -"'Nested' quotes are 'possible'", too! -'"Otherway" is "round"'! - -'Opening now!' - -'80s are really cool. - -Cluster's Last Stand. - -Nam liber tempor -"...At vero eos et accusam" - -"_Single underscores_ should work." - -"*Single asterisks* should work." - -'__Double underscores__ should work.' - -'**Double asterisks** should work.' - -"_Hurrah!_" - -'__Absolutely__.' diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/atx_header.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/atx_header.html deleted file mode 100644 index 776d7a1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/atx_header.html +++ /dev/null @@ -1,3 +0,0 @@ -

header

- -

#no header

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/atx_header.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/atx_header.text deleted file mode 100644 index 5e70e2b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/atx_header.text +++ /dev/null @@ -1,3 +0,0 @@ -# header - -#no header diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/backticks_disable_highlighting.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/backticks_disable_highlighting.html deleted file mode 100644 index 8390d09..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/backticks_disable_highlighting.html +++ /dev/null @@ -1,2 +0,0 @@ -
Kramdown::Document.new(text, :input => 'GFM')
-
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/backticks_disable_highlighting.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/backticks_disable_highlighting.options deleted file mode 100644 index 72e9bc1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/backticks_disable_highlighting.options +++ /dev/null @@ -1 +0,0 @@ -:enable_coderay: false diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/backticks_disable_highlighting.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/backticks_disable_highlighting.text deleted file mode 100644 index 98cf3a8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/backticks_disable_highlighting.text +++ /dev/null @@ -1,3 +0,0 @@ -```ruby -Kramdown::Document.new(text, :input => 'GFM') -``` diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/backticks_syntax.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/backticks_syntax.html deleted file mode 100644 index 168f644..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/backticks_syntax.html +++ /dev/null @@ -1,20 +0,0 @@ -
Three backticks
-
- -
Four backticks
-
- -
Unbalanced bottom heavy
-
- -
-
1language no space
-
-
-
- -
-
1language with space
-
-
-
diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/backticks_syntax.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/backticks_syntax.text deleted file mode 100644 index fb5c611..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/backticks_syntax.text +++ /dev/null @@ -1,19 +0,0 @@ -``` -Three backticks -``` - -```` -Four backticks -```` - -``` -Unbalanced bottom heavy -`````` - -````ruby -language no space -```` - -```` ruby -language with space -```` diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/hard_line_breaks.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/hard_line_breaks.html deleted file mode 100644 index 1dfb2f0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/hard_line_breaks.html +++ /dev/null @@ -1,3 +0,0 @@ -

one
-two
-three

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/hard_line_breaks.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/hard_line_breaks.text deleted file mode 100644 index f1287bd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/hard_line_breaks.text +++ /dev/null @@ -1,3 +0,0 @@ -one -_two_ -three diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/hard_line_breaks_off.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/hard_line_breaks_off.html deleted file mode 100644 index e1dba2b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/hard_line_breaks_off.html +++ /dev/null @@ -1,2 +0,0 @@ -

This is just a normal paragraph.
-Containing a manual line break above.

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/hard_line_breaks_off.options b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/hard_line_breaks_off.options deleted file mode 100644 index f2da683..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/hard_line_breaks_off.options +++ /dev/null @@ -1 +0,0 @@ -:hard_wrap: false diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/hard_line_breaks_off.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/hard_line_breaks_off.text deleted file mode 100644 index 2fe88b9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/hard_line_breaks_off.text +++ /dev/null @@ -1,2 +0,0 @@ -This is just a normal paragraph. -Containing a manual line break above. diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/two_para_hard_line_breaks.html b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/two_para_hard_line_breaks.html deleted file mode 100644 index d5ba2e4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/two_para_hard_line_breaks.html +++ /dev/null @@ -1,4 +0,0 @@ -

This is just a normal paragraph.
-Containing a line break.

- -

Another paragraph.

diff --git a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/two_para_hard_line_breaks.text b/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/two_para_hard_line_breaks.text deleted file mode 100644 index 6b3d7c5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/kramdown-1.7.0/test/testcases_gfm/two_para_hard_line_breaks.text +++ /dev/null @@ -1,4 +0,0 @@ -This is just a normal paragraph. -Containing a line break. - -Another paragraph. diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/History.md b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/History.md deleted file mode 100644 index 8e0d626..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/History.md +++ /dev/null @@ -1,123 +0,0 @@ -# Liquid Version History - -IMPORTANT: Liquid 2.6 is going to be the last version of Liquid which maintains explicit Ruby 1.8 compatability. -The following releases will only be tested against Ruby 1.9 and Ruby 2.0 and are likely to break on Ruby 1.8. - -## 2.6.1 / 2014-01-10 / branch "2-6-stable" - -Security fix, cherry-picked from master (4e14a65): -* Don't call to_sym when creating conditions for security reasons, see #273 [Bouke van der Bijl, bouk] -* Prevent arbitrary method invocation on condition objects, see #274 [Dylan Thacker-Smith, dylanahsmith] - -## 2.6.0 / 2013-11-25 - -* ... -* Bugfix for #106: fix example servlet [gnowoel] -* Bugfix for #97: strip_html filter supports multi-line tags [Jo Liss, joliss] -* Bugfix for #114: strip_html filter supports style tags [James Allardice, jamesallardice] -* Bugfix for #117: 'now' support for date filter in Ruby 1.9 [Notre Dame Webgroup, ndwebgroup] -* Bugfix for #166: truncate filter on UTF-8 strings with Ruby 1.8 [Florian Weingarten, fw42] -* Bugfix for #204: 'raw' parsing bug [Florian Weingarten, fw42] -* Bugfix for #150: 'for' parsing bug [Peter Schröder, phoet] -* Bugfix for #126: Strip CRLF in strip_newline [Peter Schröder, phoet] -* Bugfix for #174, "can't convert Fixnum into String" for "replace" [wǒ_is神仙, jsw0528] -* Allow a Liquid::Drop to be passed into Template#render [Daniel Huckstep, darkhelmet] -* Resource limits [Florian Weingarten, fw42] -* Add reverse filter [Jay Strybis, unreal] -* Add utf-8 support -* Use array instead of Hash to keep the registered filters [Tasos Stathopoulos, astathopoulos] -* Cache tokenized partial templates [Tom Burns, boourns] -* Avoid warnings in Ruby 1.9.3 [Marcus Stollsteimer, stomar] -* Better documentation for 'include' tag (closes #163) [Peter Schröder, phoet] -* Use of BigDecimal on filters to have better precision (closes #155) [Arthur Nogueira Neves, arthurnn] - -## 2.5.4 / 2013-11-11 / branch "2.5-stable" - -* Fix "can't convert Fixnum into String" for "replace", see #173, [wǒ_is神仙, jsw0528] - -## 2.5.3 / 2013-10-09 - -* #232, #234, #237: Fix map filter bugs [Florian Weingarten, fw42] - -## 2.5.2 / 2013-09-03 / deleted - -Yanked from rubygems, as it contained too many changes that broke compatibility. Those changes will be on following major releases. - -## 2.5.1 / 2013-07-24 - -* #230: Fix security issue with map filter, Use invoke_drop in map filter [Florian Weingarten, fw42] - -## 2.5.0 / 2013-03-06 - -* Prevent Object methods from being called on drops -* Avoid symbol injection from liquid -* Added break and continue statements -* Fix filter parser for args without space separators -* Add support for filter keyword arguments - - -## 2.4.0 / 2012-08-03 - -* Performance improvements -* Allow filters in `assign` -* Add `modulo` filter -* Ruby 1.8, 1.9, and Rubinius compatibility fixes -* Add support for `quoted['references']` in `tablerow` -* Add support for Enumerable to `tablerow` -* `strip_html` filter removes html comments - - -## 2.3.0 / 2011-10-16 - -* Several speed/memory improvements -* Numerous bug fixes -* Added support for MRI 1.9, Rubinius, and JRuby -* Added support for integer drop parameters -* Added epoch support to `date` filter -* New `raw` tag that suppresses parsing -* Added `else` option to `for` tag -* New `increment` tag -* New `split` filter - - -## 2.2.1 / 2010-08-23 - -* Added support for literal tags - - -## 2.2.0 / 2010-08-22 - -* Compatible with Ruby 1.8.7, 1.9.1 and 1.9.2-p0 -* Merged some changed made by the community - - -## 1.9.0 / 2008-03-04 - -* Fixed gem install rake task -* Improve Error encapsulation in liquid by maintaining a own set of exceptions instead of relying on ruby build ins - - -## Before 1.9.0 - -* Added If with or / and expressions -* Implemented .to_liquid for all objects which can be passed to liquid like Strings Arrays Hashes Numerics and Booleans. To export new objects to liquid just implement .to_liquid on them and return objects which themselves have .to_liquid methods. -* Added more tags to standard library -* Added include tag ( like partials in rails ) -* [...] Gazillion of detail improvements -* Added strainers as filter hosts for better security [Tobias Luetke] -* Fixed that rails integration would call filter with the wrong "self" [Michael Geary] -* Fixed bad error reporting when a filter called a method which doesn't exist. Liquid told you that it couldn't find the filter which was obviously misleading [Tobias Luetke] -* Removed count helper from standard lib. use size [Tobias Luetke] -* Fixed bug with string filter parameters failing to tolerate commas in strings. [Paul Hammond] -* Improved filter parameters. Filter parameters are now context sensitive; Types are resolved according to the rules of the context. Multiple parameters are now separated by the Liquid::ArgumentSeparator: , by default [Paul Hammond] - {{ 'Typo' | link_to: 'http://typo.leetsoft.com', 'Typo - a modern weblog engine' }} -* Added Liquid::Drop. A base class which you can use for exporting proxy objects to liquid which can acquire more data when used in liquid. [Tobias Luetke] - - class ProductDrop < Liquid::Drop - def top_sales - Shop.current.products.find(:all, :order => 'sales', :limit => 10 ) - end - end - t = Liquid::Template.parse( ' {% for product in product.top_sales %} {{ product.name }} {% endfor %} ' ) - t.render('product' => ProductDrop.new ) -* Added filter parameters support. Example: {{ date | format_date: "%Y" }} [Paul Hammond] diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/MIT-LICENSE b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/MIT-LICENSE deleted file mode 100644 index 926b04e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/MIT-LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2005, 2006 Tobias Luetke - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/README.md b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/README.md deleted file mode 100644 index 124b452..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/README.md +++ /dev/null @@ -1,50 +0,0 @@ -# Liquid template engine - -* [Contributing guidelines](CONTRIBUTING.md) -* [Version history](History.md) -* [Liquid documentation from Shopify](http://docs.shopify.com/themes/liquid-basics) -* [Liquid Wiki from Shopify](http://wiki.shopify.com/Liquid) -* [Website](http://liquidmarkup.org/) - -## Introduction - -Liquid is a template engine which was written with very specific requirements: - -* It has to have beautiful and simple markup. Template engines which don't produce good looking markup are no fun to use. -* It needs to be non evaling and secure. Liquid templates are made so that users can edit them. You don't want to run code on your server which your users wrote. -* It has to be stateless. Compile and render steps have to be separate so that the expensive parsing and compiling can be done once and later on you can just render it passing in a hash with local variables and objects. - -## Why you should use Liquid - -* You want to allow your users to edit the appearance of your application but don't want them to run **insecure code on your server**. -* You want to render templates directly from the database. -* You like smarty (PHP) style template engines. -* You need a template engine which does HTML just as well as emails. -* You don't like the markup of your current templating engine. - -## What does it look like? - -```html -
    - {% for product in products %} -
  • -

    {{ product.name }}

    - Only {{ product.price | price }} - - {{ product.description | prettyprint | paragraph }} -
  • - {% endfor %} -
-``` - -## How to use Liquid - -Liquid supports a very simple API based around the Liquid::Template class. -For standard use you can just pass it the content of a file and call render with a parameters hash. - -```ruby -@template = Liquid::Template.parse("hi {{name}}") # Parses and compiles the template -@template.render('name' => 'tobi') # => "hi tobi" -``` - -[![Build Status](https://secure.travis-ci.org/Shopify/liquid.png)](http://travis-ci.org/Shopify/liquid) diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/extras/liquid_view.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/extras/liquid_view.rb deleted file mode 100644 index 843a539..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/extras/liquid_view.rb +++ /dev/null @@ -1,51 +0,0 @@ -# LiquidView is a action view extension class. You can register it with rails -# and use liquid as an template system for .liquid files -# -# Example -# -# ActionView::Base::register_template_handler :liquid, LiquidView -class LiquidView - PROTECTED_ASSIGNS = %w( template_root response _session template_class action_name request_origin session template - _response url _request _cookies variables_added _flash params _headers request cookies - ignore_missing_templates flash _params logger before_filter_chain_aborted headers ) - PROTECTED_INSTANCE_VARIABLES = %w( @_request @controller @_first_render @_memoized__pick_template @view_paths - @helpers @assigns_added @template @_render_stack @template_format @assigns ) - - def self.call(template) - "LiquidView.new(self).render(template, local_assigns)" - end - - def initialize(view) - @view = view - end - - def render(template, local_assigns = nil) - @view.controller.headers["Content-Type"] ||= 'text/html; charset=utf-8' - - # Rails 2.2 Template has source, but not locals - if template.respond_to?(:source) && !template.respond_to?(:locals) - assigns = (@view.instance_variables - PROTECTED_INSTANCE_VARIABLES).inject({}) do |hash, ivar| - hash[ivar[1..-1]] = @view.instance_variable_get(ivar) - hash - end - else - assigns = @view.assigns.reject{ |k,v| PROTECTED_ASSIGNS.include?(k) } - end - - source = template.respond_to?(:source) ? template.source : template - local_assigns = (template.respond_to?(:locals) ? template.locals : local_assigns) || {} - - if content_for_layout = @view.instance_variable_get("@content_for_layout") - assigns['content_for_layout'] = content_for_layout - end - assigns.merge!(local_assigns.stringify_keys) - - liquid = Liquid::Template.parse(source) - liquid.render(assigns, :filters => [@view.controller.master_helper_module], :registers => {:action_view => @view, :controller => @view.controller}) - end - - def compilable? - false - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid.rb deleted file mode 100644 index cb84a6e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid.rb +++ /dev/null @@ -1,69 +0,0 @@ -# Copyright (c) 2005 Tobias Luetke -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -module Liquid - FilterSeparator = /\|/ - ArgumentSeparator = ',' - FilterArgumentSeparator = ':' - VariableAttributeSeparator = '.' - TagStart = /\{\%/ - TagEnd = /\%\}/ - VariableSignature = /\(?[\w\-\.\[\]]\)?/ - VariableSegment = /[\w\-]/ - VariableStart = /\{\{/ - VariableEnd = /\}\}/ - VariableIncompleteEnd = /\}\}?/ - QuotedString = /"[^"]*"|'[^']*'/ - QuotedFragment = /#{QuotedString}|(?:[^\s,\|'"]|#{QuotedString})+/o - StrictQuotedFragment = /"[^"]+"|'[^']+'|[^\s|:,]+/ - FirstFilterArgument = /#{FilterArgumentSeparator}(?:#{StrictQuotedFragment})/o - OtherFilterArgument = /#{ArgumentSeparator}(?:#{StrictQuotedFragment})/o - SpacelessFilter = /^(?:'[^']+'|"[^"]+"|[^'"])*#{FilterSeparator}(?:#{StrictQuotedFragment})(?:#{FirstFilterArgument}(?:#{OtherFilterArgument})*)?/o - Expression = /(?:#{QuotedFragment}(?:#{SpacelessFilter})*)/o - TagAttributes = /(\w+)\s*\:\s*(#{QuotedFragment})/o - AnyStartingTag = /\{\{|\{\%/ - PartialTemplateParser = /#{TagStart}.*?#{TagEnd}|#{VariableStart}.*?#{VariableIncompleteEnd}/o - TemplateParser = /(#{PartialTemplateParser}|#{AnyStartingTag})/o - VariableParser = /\[[^\]]+\]|#{VariableSegment}+\??/o -end - -require "liquid/version" -require 'liquid/drop' -require 'liquid/extensions' -require 'liquid/errors' -require 'liquid/interrupts' -require 'liquid/strainer' -require 'liquid/context' -require 'liquid/tag' -require 'liquid/block' -require 'liquid/document' -require 'liquid/variable' -require 'liquid/file_system' -require 'liquid/template' -require 'liquid/htmltags' -require 'liquid/standardfilters' -require 'liquid/condition' -require 'liquid/module_ex' -require 'liquid/utils' - -# Load all the tags of the standard library -# -Dir[File.dirname(__FILE__) + '/liquid/tags/*.rb'].each { |f| require f } diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/block.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/block.rb deleted file mode 100644 index 794283a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/block.rb +++ /dev/null @@ -1,126 +0,0 @@ -module Liquid - - class Block < Tag - IsTag = /^#{TagStart}/o - IsVariable = /^#{VariableStart}/o - FullToken = /^#{TagStart}\s*(\w+)\s*(.*)?#{TagEnd}$/o - ContentOfVariable = /^#{VariableStart}(.*)#{VariableEnd}$/o - - def parse(tokens) - @nodelist ||= [] - @nodelist.clear - - while token = tokens.shift - - case token - when IsTag - if token =~ FullToken - - # if we found the proper block delimiter just end parsing here and let the outer block - # proceed - if block_delimiter == $1 - end_tag - return - end - - # fetch the tag from registered blocks - if tag = Template.tags[$1] - @nodelist << tag.new($1, $2, tokens) - else - # this tag is not registered with the system - # pass it to the current block for special handling or error reporting - unknown_tag($1, $2, tokens) - end - else - raise SyntaxError, "Tag '#{token}' was not properly terminated with regexp: #{TagEnd.inspect} " - end - when IsVariable - @nodelist << create_variable(token) - when '' - # pass - else - @nodelist << token - end - end - - # Make sure that it's ok to end parsing in the current block. - # Effectively this method will throw an exception unless the current block is - # of type Document - assert_missing_delimitation! - end - - def end_tag - end - - def unknown_tag(tag, params, tokens) - case tag - when 'else' - raise SyntaxError, "#{block_name} tag does not expect else tag" - when 'end' - raise SyntaxError, "'end' is not a valid delimiter for #{block_name} tags. use #{block_delimiter}" - else - raise SyntaxError, "Unknown tag '#{tag}'" - end - end - - def block_delimiter - "end#{block_name}" - end - - def block_name - @tag_name - end - - def create_variable(token) - token.scan(ContentOfVariable) do |content| - return Variable.new(content.first) - end - raise SyntaxError.new("Variable '#{token}' was not properly terminated with regexp: #{VariableEnd.inspect} ") - end - - def render(context) - render_all(@nodelist, context) - end - - protected - - def assert_missing_delimitation! - raise SyntaxError.new("#{block_name} tag was never closed") - end - - def render_all(list, context) - output = [] - context.resource_limits[:render_length_current] = 0 - context.resource_limits[:render_score_current] += list.length - - list.each do |token| - # Break out if we have any unhanded interrupts. - break if context.has_interrupt? - - begin - # If we get an Interrupt that means the block must stop processing. An - # Interrupt is any command that stops block execution such as {% break %} - # or {% continue %} - if token.is_a? Continue or token.is_a? Break - context.push_interrupt(token.interrupt) - break - end - - token_output = (token.respond_to?(:render) ? token.render(context) : token) - context.resource_limits[:render_length_current] += (token_output.respond_to?(:length) ? token_output.length : 1) - if context.resource_limits_reached? - context.resource_limits[:reached] = true - raise MemoryError.new("Memory limits exceeded") - end - output << token_output - rescue MemoryError => e - raise e - rescue ::StandardError => e - output << (context.handle_error(e)) - end - end - - output.join - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/condition.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/condition.rb deleted file mode 100644 index ade7ac1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/condition.rb +++ /dev/null @@ -1,120 +0,0 @@ -module Liquid - # Container for liquid nodes which conveniently wraps decision making logic - # - # Example: - # - # c = Condition.new('1', '==', '1') - # c.evaluate #=> true - # - class Condition #:nodoc: - @@operators = { - '==' => lambda { |cond, left, right| cond.send(:equal_variables, left, right) }, - '!=' => lambda { |cond, left, right| !cond.send(:equal_variables, left, right) }, - '<>' => lambda { |cond, left, right| !cond.send(:equal_variables, left, right) }, - '<' => :<, - '>' => :>, - '>=' => :>=, - '<=' => :<=, - 'contains' => lambda { |cond, left, right| left && right ? left.include?(right) : false } - } - - def self.operators - @@operators - end - - attr_reader :attachment - attr_accessor :left, :operator, :right - - def initialize(left = nil, operator = nil, right = nil) - @left, @operator, @right = left, operator, right - @child_relation = nil - @child_condition = nil - end - - def evaluate(context = Context.new) - result = interpret_condition(left, right, operator, context) - - case @child_relation - when :or - result || @child_condition.evaluate(context) - when :and - result && @child_condition.evaluate(context) - else - result - end - end - - def or(condition) - @child_relation, @child_condition = :or, condition - end - - def and(condition) - @child_relation, @child_condition = :and, condition - end - - def attach(attachment) - @attachment = attachment - end - - def else? - false - end - - def inspect - "#" - end - - private - - def equal_variables(left, right) - if left.is_a?(Symbol) - if right.respond_to?(left) - return right.send(left.to_s) - else - return nil - end - end - - if right.is_a?(Symbol) - if left.respond_to?(right) - return left.send(right.to_s) - else - return nil - end - end - - left == right - end - - def interpret_condition(left, right, op, context) - # If the operator is empty this means that the decision statement is just - # a single variable. We can just poll this variable from the context and - # return this as the result. - return context[left] if op == nil - - left, right = context[left], context[right] - - operation = self.class.operators[op] || raise(ArgumentError.new("Unknown operator #{op}")) - - if operation.respond_to?(:call) - operation.call(self, left, right) - elsif left.respond_to?(operation) and right.respond_to?(operation) - left.send(operation, right) - else - nil - end - end - end - - - class ElseCondition < Condition - def else? - true - end - - def evaluate(context) - true - end - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/context.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/context.rb deleted file mode 100644 index 452b750..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/context.rb +++ /dev/null @@ -1,267 +0,0 @@ -module Liquid - - # Context keeps the variable stack and resolves variables, as well as keywords - # - # context['variable'] = 'testing' - # context['variable'] #=> 'testing' - # context['true'] #=> true - # context['10.2232'] #=> 10.2232 - # - # context.stack do - # context['bob'] = 'bobsen' - # end - # - # context['bob'] #=> nil class Context - class Context - attr_reader :scopes, :errors, :registers, :environments, :resource_limits - - def initialize(environments = {}, outer_scope = {}, registers = {}, rethrow_errors = false, resource_limits = {}) - @environments = [environments].flatten - @scopes = [(outer_scope || {})] - @registers = registers - @errors = [] - @rethrow_errors = rethrow_errors - @resource_limits = (resource_limits || {}).merge!({ :render_score_current => 0, :assign_score_current => 0 }) - squash_instance_assigns_with_environments - - @interrupts = [] - end - - def resource_limits_reached? - (@resource_limits[:render_length_limit] && @resource_limits[:render_length_current] > @resource_limits[:render_length_limit]) || - (@resource_limits[:render_score_limit] && @resource_limits[:render_score_current] > @resource_limits[:render_score_limit] ) || - (@resource_limits[:assign_score_limit] && @resource_limits[:assign_score_current] > @resource_limits[:assign_score_limit] ) - end - - def strainer - @strainer ||= Strainer.create(self) - end - - # Adds filters to this context. - # - # Note that this does not register the filters with the main Template object. see Template.register_filter - # for that - def add_filters(filters) - filters = [filters].flatten.compact - - filters.each do |f| - raise ArgumentError, "Expected module but got: #{f.class}" unless f.is_a?(Module) - Strainer.add_known_filter(f) - strainer.extend(f) - end - end - - # are there any not handled interrupts? - def has_interrupt? - @interrupts.any? - end - - # push an interrupt to the stack. this interrupt is considered not handled. - def push_interrupt(e) - @interrupts.push(e) - end - - # pop an interrupt from the stack - def pop_interrupt - @interrupts.pop - end - - def handle_error(e) - errors.push(e) - raise if @rethrow_errors - - case e - when SyntaxError - "Liquid syntax error: #{e.message}" - else - "Liquid error: #{e.message}" - end - end - - def invoke(method, *args) - strainer.invoke(method, *args) - end - - # Push new local scope on the stack. use Context#stack instead - def push(new_scope={}) - @scopes.unshift(new_scope) - raise StackLevelError, "Nesting too deep" if @scopes.length > 100 - end - - # Merge a hash of variables in the current local scope - def merge(new_scopes) - @scopes[0].merge!(new_scopes) - end - - # Pop from the stack. use Context#stack instead - def pop - raise ContextError if @scopes.size == 1 - @scopes.shift - end - - # Pushes a new local scope on the stack, pops it at the end of the block - # - # Example: - # context.stack do - # context['var'] = 'hi' - # end - # - # context['var] #=> nil - def stack(new_scope={}) - push(new_scope) - yield - ensure - pop - end - - def clear_instance_assigns - @scopes[0] = {} - end - - # Only allow String, Numeric, Hash, Array, Proc, Boolean or Liquid::Drop - def []=(key, value) - @scopes[0][key] = value - end - - def [](key) - resolve(key) - end - - def has_key?(key) - resolve(key) != nil - end - - private - LITERALS = { - nil => nil, 'nil' => nil, 'null' => nil, '' => nil, - 'true' => true, - 'false' => false, - 'blank' => :blank?, - 'empty' => :empty? - } - - # Look up variable, either resolve directly after considering the name. We can directly handle - # Strings, digits, floats and booleans (true,false). - # If no match is made we lookup the variable in the current scope and - # later move up to the parent blocks to see if we can resolve the variable somewhere up the tree. - # Some special keywords return symbols. Those symbols are to be called on the rhs object in expressions - # - # Example: - # products == empty #=> products.empty? - def resolve(key) - if LITERALS.key?(key) - LITERALS[key] - else - case key - when /^'(.*)'$/ # Single quoted strings - $1 - when /^"(.*)"$/ # Double quoted strings - $1 - when /^(-?\d+)$/ # Integer and floats - $1.to_i - when /^\((\S+)\.\.(\S+)\)$/ # Ranges - (resolve($1).to_i..resolve($2).to_i) - when /^(-?\d[\d\.]+)$/ # Floats - $1.to_f - else - variable(key) - end - end - end - - # Fetches an object starting at the local scope and then moving up the hierachy - def find_variable(key) - scope = @scopes.find { |s| s.has_key?(key) } - variable = nil - - if scope.nil? - @environments.each do |e| - if variable = lookup_and_evaluate(e, key) - scope = e - break - end - end - end - - scope ||= @environments.last || @scopes.last - variable ||= lookup_and_evaluate(scope, key) - - variable = variable.to_liquid - variable.context = self if variable.respond_to?(:context=) - - return variable - end - - # Resolves namespaced queries gracefully. - # - # Example - # @context['hash'] = {"name" => 'tobi'} - # assert_equal 'tobi', @context['hash.name'] - # assert_equal 'tobi', @context['hash["name"]'] - def variable(markup) - parts = markup.scan(VariableParser) - square_bracketed = /^\[(.*)\]$/ - - first_part = parts.shift - - if first_part =~ square_bracketed - first_part = resolve($1) - end - - if object = find_variable(first_part) - - parts.each do |part| - part = resolve($1) if part_resolved = (part =~ square_bracketed) - - # If object is a hash- or array-like object we look for the - # presence of the key and if its available we return it - if object.respond_to?(:[]) and - ((object.respond_to?(:has_key?) and object.has_key?(part)) or - (object.respond_to?(:fetch) and part.is_a?(Integer))) - - # if its a proc we will replace the entry with the proc - res = lookup_and_evaluate(object, part) - object = res.to_liquid - - # Some special cases. If the part wasn't in square brackets and - # no key with the same name was found we interpret following calls - # as commands and call them on the current object - elsif !part_resolved and object.respond_to?(part) and ['size', 'first', 'last'].include?(part) - - object = object.send(part.intern).to_liquid - - # No key was present with the desired value and it wasn't one of the directly supported - # keywords either. The only thing we got left is to return nil - else - return nil - end - - # If we are dealing with a drop here we have to - object.context = self if object.respond_to?(:context=) - end - end - - object - end # variable - - def lookup_and_evaluate(obj, key) - if (value = obj[key]).is_a?(Proc) && obj.respond_to?(:[]=) - obj[key] = (value.arity == 0) ? value.call : value.call(self) - else - value - end - end # lookup_and_evaluate - - def squash_instance_assigns_with_environments - @scopes.last.each_key do |k| - @environments.each do |env| - if env.has_key?(k) - scopes.last[k] = lookup_and_evaluate(env, k) - break - end - end - end - end # squash_instance_assigns_with_environments - end # Context - -end # Liquid diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/document.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/document.rb deleted file mode 100644 index a128762..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/document.rb +++ /dev/null @@ -1,17 +0,0 @@ -module Liquid - class Document < Block - # we don't need markup to open this block - def initialize(tokens) - parse(tokens) - end - - # There isn't a real delimiter - def block_delimiter - [] - end - - # Document blocks don't need to be terminated since they are not actually opened - def assert_missing_delimitation! - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/drop.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/drop.rb deleted file mode 100644 index e8eb233..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/drop.rb +++ /dev/null @@ -1,61 +0,0 @@ -require 'set' - -module Liquid - - # A drop in liquid is a class which allows you to export DOM like things to liquid. - # Methods of drops are callable. - # The main use for liquid drops is to implement lazy loaded objects. - # If you would like to make data available to the web designers which you don't want loaded unless needed then - # a drop is a great way to do that. - # - # Example: - # - # class ProductDrop < Liquid::Drop - # def top_sales - # Shop.current.products.find(:all, :order => 'sales', :limit => 10 ) - # end - # end - # - # tmpl = Liquid::Template.parse( ' {% for product in product.top_sales %} {{ product.name }} {%endfor%} ' ) - # tmpl.render('product' => ProductDrop.new ) # will invoke top_sales query. - # - # Your drop can either implement the methods sans any parameters or implement the before_method(name) method which is a - # catch all. - class Drop - attr_writer :context - - EMPTY_STRING = ''.freeze - - # Catch all for the method - def before_method(method) - nil - end - - # called by liquid to invoke a drop - def invoke_drop(method_or_key) - if method_or_key && method_or_key != EMPTY_STRING && self.class.invokable?(method_or_key) - send(method_or_key) - else - before_method(method_or_key) - end - end - - def has_key?(name) - true - end - - def to_liquid - self - end - - alias :[] :invoke_drop - - private - - # Check for method existence without invoking respond_to?, which creates symbols - def self.invokable?(method_name) - @invokable_methods ||= Set.new(["to_liquid"] + (public_instance_methods - Liquid::Drop.public_instance_methods).map(&:to_s)) - @invokable_methods.include?(method_name.to_s) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/errors.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/errors.rb deleted file mode 100644 index 85cb373..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/errors.rb +++ /dev/null @@ -1,12 +0,0 @@ -module Liquid - class Error < ::StandardError; end - - class ArgumentError < Error; end - class ContextError < Error; end - class FilterNotFound < Error; end - class FileSystemError < Error; end - class StandardError < Error; end - class SyntaxError < Error; end - class StackLevelError < Error; end - class MemoryError < Error; end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/extensions.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/extensions.rb deleted file mode 100644 index 24fc8e3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/extensions.rb +++ /dev/null @@ -1,62 +0,0 @@ -require 'time' -require 'date' - -class String # :nodoc: - def to_liquid - self - end -end - -class Array # :nodoc: - def to_liquid - self - end -end - -class Hash # :nodoc: - def to_liquid - self - end -end - -class Numeric # :nodoc: - def to_liquid - self - end -end - -class Time # :nodoc: - def to_liquid - self - end -end - -class DateTime < Date # :nodoc: - def to_liquid - self - end -end - -class Date # :nodoc: - def to_liquid - self - end -end - -class TrueClass - def to_liquid # :nodoc: - self - end -end - -class FalseClass - def to_liquid # :nodoc: - self - end -end - -class NilClass - def to_liquid # :nodoc: - self - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/file_system.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/file_system.rb deleted file mode 100644 index c7eeddc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/file_system.rb +++ /dev/null @@ -1,62 +0,0 @@ -module Liquid - # A Liquid file system is a way to let your templates retrieve other templates for use with the include tag. - # - # You can implement subclasses that retrieve templates from the database, from the file system using a different - # path structure, you can provide them as hard-coded inline strings, or any manner that you see fit. - # - # You can add additional instance variables, arguments, or methods as needed. - # - # Example: - # - # Liquid::Template.file_system = Liquid::LocalFileSystem.new(template_path) - # liquid = Liquid::Template.parse(template) - # - # This will parse the template with a LocalFileSystem implementation rooted at 'template_path'. - class BlankFileSystem - # Called by Liquid to retrieve a template file - def read_template_file(template_path, context) - raise FileSystemError, "This liquid context does not allow includes." - end - end - - # This implements an abstract file system which retrieves template files named in a manner similar to Rails partials, - # ie. with the template name prefixed with an underscore. The extension ".liquid" is also added. - # - # For security reasons, template paths are only allowed to contain letters, numbers, and underscore. - # - # Example: - # - # file_system = Liquid::LocalFileSystem.new("/some/path") - # - # file_system.full_path("mypartial") # => "/some/path/_mypartial.liquid" - # file_system.full_path("dir/mypartial") # => "/some/path/dir/_mypartial.liquid" - # - class LocalFileSystem - attr_accessor :root - - def initialize(root) - @root = root - end - - def read_template_file(template_path, context) - full_path = full_path(template_path) - raise FileSystemError, "No such template '#{template_path}'" unless File.exists?(full_path) - - File.read(full_path) - end - - def full_path(template_path) - raise FileSystemError, "Illegal template name '#{template_path}'" unless template_path =~ /^[^.\/][a-zA-Z0-9_\/]+$/ - - full_path = if template_path.include?('/') - File.join(root, File.dirname(template_path), "_#{File.basename(template_path)}.liquid") - else - File.join(root, "_#{template_path}.liquid") - end - - raise FileSystemError, "Illegal template path '#{File.expand_path(full_path)}'" unless File.expand_path(full_path) =~ /^#{File.expand_path(root)}/ - - full_path - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/htmltags.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/htmltags.rb deleted file mode 100644 index c66817e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/htmltags.rb +++ /dev/null @@ -1,73 +0,0 @@ -module Liquid - class TableRow < Block - Syntax = /(\w+)\s+in\s+(#{QuotedFragment}+)/o - - def initialize(tag_name, markup, tokens) - if markup =~ Syntax - @variable_name = $1 - @collection_name = $2 - @attributes = {} - markup.scan(TagAttributes) do |key, value| - @attributes[key] = value - end - else - raise SyntaxError.new("Syntax Error in 'table_row loop' - Valid syntax: table_row [item] in [collection] cols=3") - end - - super - end - - def render(context) - collection = context[@collection_name] or return '' - - from = @attributes['offset'] ? context[@attributes['offset']].to_i : 0 - to = @attributes['limit'] ? from + context[@attributes['limit']].to_i : nil - - collection = Utils.slice_collection_using_each(collection, from, to) - - length = collection.length - - cols = context[@attributes['cols']].to_i - - row = 1 - col = 0 - - result = "\n" - context.stack do - - collection.each_with_index do |item, index| - context[@variable_name] = item - context['tablerowloop'] = { - 'length' => length, - 'index' => index + 1, - 'index0' => index, - 'col' => col + 1, - 'col0' => col, - 'rindex' => length - index, - 'rindex0' => length - index - 1, - 'first' => (index == 0), - 'last' => (index == length - 1), - 'col_first' => (col == 0), - 'col_last' => (col == cols - 1) - } - - - col += 1 - - result << "" << render_all(@nodelist, context) << '' - - if col == cols and (index != length - 1) - col = 0 - row += 1 - result << "\n" - end - - end - end - result << "\n" - result - end - end - - Template.register_tag('tablerow', TableRow) -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/interrupts.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/interrupts.rb deleted file mode 100644 index d6bf61e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/interrupts.rb +++ /dev/null @@ -1,17 +0,0 @@ -module Liquid - - # An interrupt is any command that breaks processing of a block (ex: a for loop). - class Interrupt - attr_reader :message - - def initialize(message=nil) - @message = message || "interrupt" - end - end - - # Interrupt that is thrown whenever a {% break %} is called. - class BreakInterrupt < Interrupt; end - - # Interrupt that is thrown whenever a {% continue %} is called. - class ContinueInterrupt < Interrupt; end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/module_ex.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/module_ex.rb deleted file mode 100644 index 40fa3a4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/module_ex.rb +++ /dev/null @@ -1,62 +0,0 @@ -# Copyright 2007 by Domizio Demichelis -# This library is free software. It may be used, redistributed and/or modified -# under the same terms as Ruby itself -# -# This extension is used in order to expose the object of the implementing class -# to liquid as it were a Drop. It also limits the liquid-callable methods of the instance -# to the allowed method passed with the liquid_methods call -# Example: -# -# class SomeClass -# liquid_methods :an_allowed_method -# -# def an_allowed_method -# 'this comes from an allowed method' -# end -# def unallowed_method -# 'this will never be an output' -# end -# end -# -# if you want to extend the drop to other methods you can defines more methods -# in the class ::LiquidDropClass -# -# class SomeClass::LiquidDropClass -# def another_allowed_method -# 'and this from another allowed method' -# end -# end -# end -# -# usage: -# @something = SomeClass.new -# -# template: -# {{something.an_allowed_method}}{{something.unallowed_method}} {{something.another_allowed_method}} -# -# output: -# 'this comes from an allowed method and this from another allowed method' -# -# You can also chain associations, by adding the liquid_method call in the -# association models. -# -class Module - - def liquid_methods(*allowed_methods) - drop_class = eval "class #{self.to_s}::LiquidDropClass < Liquid::Drop; self; end" - define_method :to_liquid do - drop_class.new(self) - end - drop_class.class_eval do - def initialize(object) - @object = object - end - allowed_methods.each do |sym| - define_method sym do - @object.send sym - end - end - end - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/standardfilters.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/standardfilters.rb deleted file mode 100644 index 3f3730a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/standardfilters.rb +++ /dev/null @@ -1,272 +0,0 @@ -require 'cgi' -require 'bigdecimal' - -module Liquid - - module StandardFilters - - # Return the size of an array or of an string - def size(input) - - input.respond_to?(:size) ? input.size : 0 - end - - # convert an input string to DOWNCASE - def downcase(input) - input.to_s.downcase - end - - # convert an input string to UPCASE - def upcase(input) - input.to_s.upcase - end - - # capitalize words in the input centence - def capitalize(input) - input.to_s.capitalize - end - - def escape(input) - CGI.escapeHTML(input) rescue input - end - - def escape_once(input) - ActionView::Helpers::TagHelper.escape_once(input) - rescue NameError - input - end - - alias_method :h, :escape - - # Truncate a string down to x characters - def truncate(input, length = 50, truncate_string = "...") - if input.nil? then return end - l = length.to_i - truncate_string.length - l = 0 if l < 0 - truncated = RUBY_VERSION[0,3] == "1.8" ? input.scan(/./mu)[0...l].to_s : input[0...l] - input.length > length.to_i ? truncated + truncate_string : input - end - - def truncatewords(input, words = 15, truncate_string = "...") - if input.nil? then return end - wordlist = input.to_s.split - l = words.to_i - 1 - l = 0 if l < 0 - wordlist.length > l ? wordlist[0..l].join(" ") + truncate_string : input - end - - # Split input string into an array of substrings separated by given pattern. - # - # Example: - #
{{ post | split '//' | first }}
- # - def split(input, pattern) - input.split(pattern) - end - - def strip_html(input) - input.to_s.gsub(//m, '').gsub(//m, '').gsub(//m, '').gsub(/<.*?>/m, '') - end - - # Remove all newlines from the string - def strip_newlines(input) - input.to_s.gsub(/\r?\n/, '') - end - - # Join elements of the array with certain character between them - def join(input, glue = ' ') - [input].flatten.join(glue) - end - - # Sort elements of the array - # provide optional property with which to sort an array of hashes or drops - def sort(input, property = nil) - ary = [input].flatten - if property.nil? - ary.sort - elsif ary.first.respond_to?('[]') and !ary.first[property].nil? - ary.sort {|a,b| a[property] <=> b[property] } - elsif ary.first.respond_to?(property) - ary.sort {|a,b| a.send(property) <=> b.send(property) } - end - end - - # Reverse the elements of an array - def reverse(input) - ary = [input].flatten - ary.reverse - end - - # map/collect on a given property - def map(input, property) - ary = [input].flatten - ary.map do |e| - e = e.call if e.is_a?(Proc) - e = e.to_liquid if e.respond_to?(:to_liquid) - - if property == "to_liquid" - e - elsif e.respond_to?(:[]) - e[property] - end - end - end - - # Replace occurrences of a string with another - def replace(input, string, replacement = '') - input.to_s.gsub(string, replacement.to_s) - end - - # Replace the first occurrences of a string with another - def replace_first(input, string, replacement = '') - input.to_s.sub(string, replacement.to_s) - end - - # remove a substring - def remove(input, string) - input.to_s.gsub(string, '') - end - - # remove the first occurrences of a substring - def remove_first(input, string) - input.to_s.sub(string, '') - end - - # add one string to another - def append(input, string) - input.to_s + string.to_s - end - - # prepend a string to another - def prepend(input, string) - string.to_s + input.to_s - end - - # Add
tags in front of all newlines in input string - def newline_to_br(input) - input.to_s.gsub(/\n/, "
\n") - end - - # Reformat a date - # - # %a - The abbreviated weekday name (``Sun'') - # %A - The full weekday name (``Sunday'') - # %b - The abbreviated month name (``Jan'') - # %B - The full month name (``January'') - # %c - The preferred local date and time representation - # %d - Day of the month (01..31) - # %H - Hour of the day, 24-hour clock (00..23) - # %I - Hour of the day, 12-hour clock (01..12) - # %j - Day of the year (001..366) - # %m - Month of the year (01..12) - # %M - Minute of the hour (00..59) - # %p - Meridian indicator (``AM'' or ``PM'') - # %S - Second of the minute (00..60) - # %U - Week number of the current year, - # starting with the first Sunday as the first - # day of the first week (00..53) - # %W - Week number of the current year, - # starting with the first Monday as the first - # day of the first week (00..53) - # %w - Day of the week (Sunday is 0, 0..6) - # %x - Preferred representation for the date alone, no time - # %X - Preferred representation for the time alone, no date - # %y - Year without a century (00..99) - # %Y - Year with century - # %Z - Time zone name - # %% - Literal ``%'' character - def date(input, format) - - if format.to_s.empty? - return input.to_s - end - - if ((input.is_a?(String) && !/^\d+$/.match(input.to_s).nil?) || input.is_a?(Integer)) && input.to_i > 0 - input = Time.at(input.to_i) - end - - date = if input.is_a?(String) - case input.downcase - when 'now', 'today' - Time.now - else - Time.parse(input) - end - else - input - end - - if date.respond_to?(:strftime) - date.strftime(format.to_s) - else - input - end - rescue - input - end - - # Get the first element of the passed in array - # - # Example: - # {{ product.images | first | to_img }} - # - def first(array) - array.first if array.respond_to?(:first) - end - - # Get the last element of the passed in array - # - # Example: - # {{ product.images | last | to_img }} - # - def last(array) - array.last if array.respond_to?(:last) - end - - # addition - def plus(input, operand) - apply_operation(input, operand, :+) - end - - # subtraction - def minus(input, operand) - apply_operation(input, operand, :-) - end - - # multiplication - def times(input, operand) - apply_operation(input, operand, :*) - end - - # division - def divided_by(input, operand) - apply_operation(input, operand, :/) - end - - def modulo(input, operand) - apply_operation(input, operand, :%) - end - - private - - def to_number(obj) - case obj - when Float - BigDecimal.new(obj.to_s) - when Numeric - obj - when String - (obj.strip =~ /^\d+\.\d+$/) ? BigDecimal.new(obj) : obj.to_i - else - 0 - end - end - - def apply_operation(input, operand, operation) - result = to_number(input).send(operation, to_number(operand)) - result.is_a?(BigDecimal) ? result.to_f : result - end - end - - Template.register_filter(StandardFilters) -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/strainer.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/strainer.rb deleted file mode 100644 index 5e75cdd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/strainer.rb +++ /dev/null @@ -1,53 +0,0 @@ -require 'set' - -module Liquid - - # Strainer is the parent class for the filters system. - # New filters are mixed into the strainer class which is then instantiated for each liquid template render run. - # - # The Strainer only allows method calls defined in filters given to it via Strainer.global_filter, - # Context#add_filters or Template.register_filter - class Strainer #:nodoc: - @@filters = [] - @@known_filters = Set.new - @@known_methods = Set.new - - def initialize(context) - @context = context - end - - def self.global_filter(filter) - raise ArgumentError, "Passed filter is not a module" unless filter.is_a?(Module) - add_known_filter(filter) - @@filters << filter unless @@filters.include?(filter) - end - - def self.add_known_filter(filter) - unless @@known_filters.include?(filter) - @@method_blacklist ||= Set.new(Strainer.instance_methods.map(&:to_s)) - new_methods = filter.instance_methods.map(&:to_s) - new_methods.reject!{ |m| @@method_blacklist.include?(m) } - @@known_methods.merge(new_methods) - @@known_filters.add(filter) - end - end - - def self.create(context) - strainer = Strainer.new(context) - @@filters.each { |m| strainer.extend(m) } - strainer - end - - def invoke(method, *args) - if invokable?(method) - send(method, *args) - else - args.first - end - end - - def invokable?(method) - @@known_methods.include?(method.to_s) && respond_to?(method) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tag.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tag.rb deleted file mode 100644 index c88ea9b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tag.rb +++ /dev/null @@ -1,26 +0,0 @@ -module Liquid - - class Tag - - attr_accessor :nodelist - - def initialize(tag_name, markup, tokens) - @tag_name = tag_name - @markup = markup - parse(tokens) - end - - def parse(tokens) - end - - def name - self.class.name.downcase - end - - def render(context) - '' - end - - end # Tag - -end # Liquid diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/assign.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/assign.rb deleted file mode 100644 index 34fdf19..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/assign.rb +++ /dev/null @@ -1,35 +0,0 @@ -module Liquid - - # Assign sets a variable in your template. - # - # {% assign foo = 'monkey' %} - # - # You can then use the variable later in the page. - # - # {{ foo }} - # - class Assign < Tag - Syntax = /(#{VariableSignature}+)\s*=\s*(.*)\s*/o - - def initialize(tag_name, markup, tokens) - if markup =~ Syntax - @to = $1 - @from = Variable.new($2) - else - raise SyntaxError.new("Syntax Error in 'assign' - Valid syntax: assign [var] = [source]") - end - - super - end - - def render(context) - val = @from.render(context) - context.scopes.last[@to] = val - context.resource_limits[:assign_score_current] += (val.respond_to?(:length) ? val.length : 1) - '' - end - - end - - Template.register_tag('assign', Assign) -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/break.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/break.rb deleted file mode 100644 index 0626338..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/break.rb +++ /dev/null @@ -1,21 +0,0 @@ -module Liquid - - # Break tag to be used to break out of a for loop. - # - # == Basic Usage: - # {% for item in collection %} - # {% if item.condition %} - # {% break %} - # {% endif %} - # {% endfor %} - # - class Break < Tag - - def interrupt - BreakInterrupt.new - end - - end - - Template.register_tag('break', Break) -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/capture.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/capture.rb deleted file mode 100644 index 495a6f7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/capture.rb +++ /dev/null @@ -1,36 +0,0 @@ -module Liquid - - # Capture stores the result of a block into a variable without rendering it inplace. - # - # {% capture heading %} - # Monkeys! - # {% endcapture %} - # ... - #

{{ heading }}

- # - # Capture is useful for saving content for use later in your template, such as - # in a sidebar or footer. - # - class Capture < Block - Syntax = /(\w+)/ - - def initialize(tag_name, markup, tokens) - if markup =~ Syntax - @to = $1 - else - raise SyntaxError.new("Syntax Error in 'capture' - Valid syntax: capture [var]") - end - - super - end - - def render(context) - output = super - context.scopes.last[@to] = output - context.resource_limits[:assign_score_current] += (output.respond_to?(:length) ? output.length : 1) - '' - end - end - - Template.register_tag('capture', Capture) -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/case.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/case.rb deleted file mode 100644 index 9150b15..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/case.rb +++ /dev/null @@ -1,79 +0,0 @@ -module Liquid - class Case < Block - Syntax = /(#{QuotedFragment})/o - WhenSyntax = /(#{QuotedFragment})(?:(?:\s+or\s+|\s*\,\s*)(#{QuotedFragment}.*))?/o - - def initialize(tag_name, markup, tokens) - @blocks = [] - - if markup =~ Syntax - @left = $1 - else - raise SyntaxError.new("Syntax Error in tag 'case' - Valid syntax: case [condition]") - end - - super - end - - def unknown_tag(tag, markup, tokens) - @nodelist = [] - case tag - when 'when' - record_when_condition(markup) - when 'else' - record_else_condition(markup) - else - super - end - end - - def render(context) - context.stack do - execute_else_block = true - - output = '' - @blocks.each do |block| - if block.else? - return render_all(block.attachment, context) if execute_else_block - elsif block.evaluate(context) - execute_else_block = false - output << render_all(block.attachment, context) - end - end - output - end - end - - private - - def record_when_condition(markup) - while markup - # Create a new nodelist and assign it to the new block - if not markup =~ WhenSyntax - raise SyntaxError.new("Syntax Error in tag 'case' - Valid when condition: {% when [condition] [or condition2...] %} ") - end - - markup = $2 - - block = Condition.new(@left, '==', $1) - block.attach(@nodelist) - @blocks.push(block) - end - end - - def record_else_condition(markup) - - if not markup.strip.empty? - raise SyntaxError.new("Syntax Error in tag 'case' - Valid else condition: {% else %} (no parameters) ") - end - - block = ElseCondition.new - block.attach(@nodelist) - @blocks << block - end - - - end - - Template.register_tag('case', Case) -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/comment.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/comment.rb deleted file mode 100644 index 37fb4c8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/comment.rb +++ /dev/null @@ -1,9 +0,0 @@ -module Liquid - class Comment < Block - def render(context) - '' - end - end - - Template.register_tag('comment', Comment) -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/continue.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/continue.rb deleted file mode 100644 index 0512a7d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/continue.rb +++ /dev/null @@ -1,21 +0,0 @@ -module Liquid - - # Continue tag to be used to break out of a for loop. - # - # == Basic Usage: - # {% for item in collection %} - # {% if item.condition %} - # {% continue %} - # {% endif %} - # {% endfor %} - # - class Continue < Tag - - def interrupt - ContinueInterrupt.new - end - - end - - Template.register_tag('continue', Continue) -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/cycle.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/cycle.rb deleted file mode 100644 index 276f9f5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/cycle.rb +++ /dev/null @@ -1,59 +0,0 @@ -module Liquid - - # Cycle is usually used within a loop to alternate between values, like colors or DOM classes. - # - # {% for item in items %} - #
{{ item }}
- # {% end %} - # - #
Item one
- #
Item two
- #
Item three
- #
Item four
- #
Item five
- # - class Cycle < Tag - SimpleSyntax = /^#{QuotedFragment}+/o - NamedSyntax = /^(#{QuotedFragment})\s*\:\s*(.*)/o - - def initialize(tag_name, markup, tokens) - case markup - when NamedSyntax - @variables = variables_from_string($2) - @name = $1 - when SimpleSyntax - @variables = variables_from_string(markup) - @name = "'#{@variables.to_s}'" - else - raise SyntaxError.new("Syntax Error in 'cycle' - Valid syntax: cycle [name :] var [, var2, var3 ...]") - end - super - end - - def render(context) - context.registers[:cycle] ||= Hash.new(0) - - context.stack do - key = context[@name] - iteration = context.registers[:cycle][key] - result = context[@variables[iteration]] - iteration += 1 - iteration = 0 if iteration >= @variables.size - context.registers[:cycle][key] = iteration - result - end - end - - private - - def variables_from_string(markup) - markup.split(',').collect do |var| - var =~ /\s*(#{QuotedFragment})\s*/o - $1 ? $1 : nil - end.compact - end - - end - - Template.register_tag('cycle', Cycle) -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/decrement.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/decrement.rb deleted file mode 100644 index 217d96d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/decrement.rb +++ /dev/null @@ -1,39 +0,0 @@ -module Liquid - - # decrement is used in a place where one needs to insert a counter - # into a template, and needs the counter to survive across - # multiple instantiations of the template. - # NOTE: decrement is a pre-decrement, --i, - # while increment is post: i++. - # - # (To achieve the survival, the application must keep the context) - # - # if the variable does not exist, it is created with value 0. - - # Hello: {% decrement variable %} - # - # gives you: - # - # Hello: -1 - # Hello: -2 - # Hello: -3 - # - class Decrement < Tag - def initialize(tag_name, markup, tokens) - @variable = markup.strip - - super - end - - def render(context) - value = context.environments.first[@variable] ||= 0 - value = value - 1 - context.environments.first[@variable] = value - value.to_s - end - - private - end - - Template.register_tag('decrement', Decrement) -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/for.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/for.rb deleted file mode 100644 index 47e67d1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/for.rb +++ /dev/null @@ -1,142 +0,0 @@ -module Liquid - - # "For" iterates over an array or collection. - # Several useful variables are available to you within the loop. - # - # == Basic usage: - # {% for item in collection %} - # {{ forloop.index }}: {{ item.name }} - # {% endfor %} - # - # == Advanced usage: - # {% for item in collection %} - #
- # Item {{ forloop.index }}: {{ item.name }} - #
- # {% else %} - # There is nothing in the collection. - # {% endfor %} - # - # You can also define a limit and offset much like SQL. Remember - # that offset starts at 0 for the first item. - # - # {% for item in collection limit:5 offset:10 %} - # {{ item.name }} - # {% end %} - # - # To reverse the for loop simply use {% for item in collection reversed %} - # - # == Available variables: - # - # forloop.name:: 'item-collection' - # forloop.length:: Length of the loop - # forloop.index:: The current item's position in the collection; - # forloop.index starts at 1. - # This is helpful for non-programmers who start believe - # the first item in an array is 1, not 0. - # forloop.index0:: The current item's position in the collection - # where the first item is 0 - # forloop.rindex:: Number of items remaining in the loop - # (length - index) where 1 is the last item. - # forloop.rindex0:: Number of items remaining in the loop - # where 0 is the last item. - # forloop.first:: Returns true if the item is the first item. - # forloop.last:: Returns true if the item is the last item. - # - class For < Block - Syntax = /\A(\w+)\s+in\s+(#{QuotedFragment}+)\s*(reversed)?/o - - def initialize(tag_name, markup, tokens) - if markup =~ Syntax - @variable_name = $1 - @collection_name = $2 - @name = "#{$1}-#{$2}" - @reversed = $3 - @attributes = {} - markup.scan(TagAttributes) do |key, value| - @attributes[key] = value - end - else - raise SyntaxError.new("Syntax Error in 'for loop' - Valid syntax: for [item] in [collection]") - end - - @nodelist = @for_block = [] - super - end - - def unknown_tag(tag, markup, tokens) - return super unless tag == 'else' - @nodelist = @else_block = [] - end - - def render(context) - context.registers[:for] ||= Hash.new(0) - - collection = context[@collection_name] - collection = collection.to_a if collection.is_a?(Range) - - # Maintains Ruby 1.8.7 String#each behaviour on 1.9 - return render_else(context) unless iterable?(collection) - - from = if @attributes['offset'] == 'continue' - context.registers[:for][@name].to_i - else - context[@attributes['offset']].to_i - end - - limit = context[@attributes['limit']] - to = limit ? limit.to_i + from : nil - - - segment = Utils.slice_collection_using_each(collection, from, to) - - return render_else(context) if segment.empty? - - segment.reverse! if @reversed - - result = '' - - length = segment.length - - # Store our progress through the collection for the continue flag - context.registers[:for][@name] = from + segment.length - - context.stack do - segment.each_with_index do |item, index| - context[@variable_name] = item - context['forloop'] = { - 'name' => @name, - 'length' => length, - 'index' => index + 1, - 'index0' => index, - 'rindex' => length - index, - 'rindex0' => length - index - 1, - 'first' => (index == 0), - 'last' => (index == length - 1) } - - result << render_all(@for_block, context) - - # Handle any interrupts if they exist. - if context.has_interrupt? - interrupt = context.pop_interrupt - break if interrupt.is_a? BreakInterrupt - next if interrupt.is_a? ContinueInterrupt - end - end - end - result - end - - private - - def render_else(context) - return @else_block ? [render_all(@else_block, context)] : '' - end - - def iterable?(collection) - collection.respond_to?(:each) || Utils.non_blank_string?(collection) - end - end - - Template.register_tag('for', For) -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/if.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/if.rb deleted file mode 100644 index 4b4a3ac..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/if.rb +++ /dev/null @@ -1,79 +0,0 @@ -module Liquid - - # If is the conditional block - # - # {% if user.admin %} - # Admin user! - # {% else %} - # Not admin user - # {% endif %} - # - # There are {% if count < 5 %} less {% else %} more {% endif %} items than you need. - # - # - class If < Block - SyntaxHelp = "Syntax Error in tag 'if' - Valid syntax: if [expression]" - Syntax = /(#{QuotedFragment})\s*([=!<>a-z_]+)?\s*(#{QuotedFragment})?/o - ExpressionsAndOperators = /(?:\b(?:\s?and\s?|\s?or\s?)\b|(?:\s*(?!\b(?:\s?and\s?|\s?or\s?)\b)(?:#{QuotedFragment}|\S+)\s*)+)/o - BOOLEAN_OPERATORS = %w(and or) - - def initialize(tag_name, markup, tokens) - @blocks = [] - - push_block('if', markup) - - super - end - - def unknown_tag(tag, markup, tokens) - if ['elsif', 'else'].include?(tag) - push_block(tag, markup) - else - super - end - end - - def render(context) - context.stack do - @blocks.each do |block| - if block.evaluate(context) - return render_all(block.attachment, context) - end - end - '' - end - end - - private - - def push_block(tag, markup) - block = if tag == 'else' - ElseCondition.new - else - - expressions = markup.scan(ExpressionsAndOperators).reverse - raise(SyntaxError, SyntaxHelp) unless expressions.shift =~ Syntax - - condition = Condition.new($1, $2, $3) - - while not expressions.empty? - operator = (expressions.shift).to_s.strip - - raise(SyntaxError, SyntaxHelp) unless expressions.shift.to_s =~ Syntax - - new_condition = Condition.new($1, $2, $3) - raise SyntaxError, "invalid boolean operator" unless BOOLEAN_OPERATORS.include?(operator) - new_condition.send(operator, condition) - condition = new_condition - end - - condition - end - - @blocks.push(block) - @nodelist = block.attach(Array.new) - end - end - - Template.register_tag('if', If) -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/ifchanged.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/ifchanged.rb deleted file mode 100644 index c18a5c5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/ifchanged.rb +++ /dev/null @@ -1,20 +0,0 @@ -module Liquid - class Ifchanged < Block - - def render(context) - context.stack do - - output = render_all(@nodelist, context) - - if output != context.registers[:ifchanged] - context.registers[:ifchanged] = output - output - else - '' - end - end - end - end - - Template.register_tag('ifchanged', Ifchanged) -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/include.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/include.rb deleted file mode 100644 index e19c373..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/include.rb +++ /dev/null @@ -1,93 +0,0 @@ -module Liquid - - # Include allows templates to relate with other templates - # - # Simply include another template: - # - # {% include 'product' %} - # - # Include a template with a local variable: - # - # {% include 'product' with products[0] %} - # - # Include a template for a collection: - # - # {% include 'product' for products %} - # - class Include < Tag - Syntax = /(#{QuotedFragment}+)(\s+(?:with|for)\s+(#{QuotedFragment}+))?/o - - def initialize(tag_name, markup, tokens) - if markup =~ Syntax - - @template_name = $1 - @variable_name = $3 - @attributes = {} - - markup.scan(TagAttributes) do |key, value| - @attributes[key] = value - end - - else - raise SyntaxError.new("Error in tag 'include' - Valid syntax: include '[template]' (with|for) [object|collection]") - end - - super - end - - def parse(tokens) - end - - def render(context) - partial = load_cached_partial(context) - variable = context[@variable_name || @template_name[1..-2]] - - context.stack do - @attributes.each do |key, value| - context[key] = context[value] - end - - if variable.is_a?(Array) - variable.collect do |var| - context[@template_name[1..-2]] = var - partial.render(context) - end - else - context[@template_name[1..-2]] = variable - partial.render(context) - end - end - end - - private - def load_cached_partial(context) - cached_partials = context.registers[:cached_partials] || {} - template_name = context[@template_name] - - if cached = cached_partials[template_name] - return cached - end - source = read_template_from_file_system(context) - partial = Liquid::Template.parse(source) - cached_partials[template_name] = partial - context.registers[:cached_partials] = cached_partials - partial - end - - def read_template_from_file_system(context) - file_system = context.registers[:file_system] || Liquid::Template.file_system - - # make read_template_file call backwards-compatible. - case file_system.method(:read_template_file).arity - when 1 - file_system.read_template_file(context[@template_name]) - when 2 - file_system.read_template_file(context[@template_name], context) - else - raise ArgumentError, "file_system.read_template_file expects two parameters: (template_name, context)" - end - end - end - - Template.register_tag('include', Include) -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/increment.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/increment.rb deleted file mode 100644 index 8626114..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/increment.rb +++ /dev/null @@ -1,35 +0,0 @@ -module Liquid - - # increment is used in a place where one needs to insert a counter - # into a template, and needs the counter to survive across - # multiple instantiations of the template. - # (To achieve the survival, the application must keep the context) - # - # if the variable does not exist, it is created with value 0. - - # Hello: {% increment variable %} - # - # gives you: - # - # Hello: 0 - # Hello: 1 - # Hello: 2 - # - class Increment < Tag - def initialize(tag_name, markup, tokens) - @variable = markup.strip - - super - end - - def render(context) - value = context.environments.first[@variable] ||= 0 - context.environments.first[@variable] = value + 1 - value.to_s - end - - private - end - - Template.register_tag('increment', Increment) -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/raw.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/raw.rb deleted file mode 100644 index 43b685e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/raw.rb +++ /dev/null @@ -1,22 +0,0 @@ -module Liquid - class Raw < Block - FullTokenPossiblyInvalid = /^(.*)#{TagStart}\s*(\w+)\s*(.*)?#{TagEnd}$/o - - def parse(tokens) - @nodelist ||= [] - @nodelist.clear - while token = tokens.shift - if token =~ FullTokenPossiblyInvalid - @nodelist << $1 if $1 != "" - if block_delimiter == $2 - end_tag - return - end - end - @nodelist << token if not token.empty? - end - end - end - - Template.register_tag('raw', Raw) -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/unless.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/unless.rb deleted file mode 100644 index e561481..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/tags/unless.rb +++ /dev/null @@ -1,33 +0,0 @@ -require File.dirname(__FILE__) + '/if' - -module Liquid - - # Unless is a conditional just like 'if' but works on the inverse logic. - # - # {% unless x < 0 %} x is greater than zero {% end %} - # - class Unless < If - def render(context) - context.stack do - - # First condition is interpreted backwards ( if not ) - first_block = @blocks.first - unless first_block.evaluate(context) - return render_all(first_block.attachment, context) - end - - # After the first condition unless works just like if - @blocks[1..-1].each do |block| - if block.evaluate(context) - return render_all(block.attachment, context) - end - end - - '' - end - end - end - - - Template.register_tag('unless', Unless) -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/template.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/template.rb deleted file mode 100644 index 5e0675f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/template.rb +++ /dev/null @@ -1,156 +0,0 @@ -module Liquid - - # Templates are central to liquid. - # Interpretating templates is a two step process. First you compile the - # source code you got. During compile time some extensive error checking is performed. - # your code should expect to get some SyntaxErrors. - # - # After you have a compiled template you can then render it. - # You can use a compiled template over and over again and keep it cached. - # - # Example: - # - # template = Liquid::Template.parse(source) - # template.render('user_name' => 'bob') - # - class Template - attr_accessor :root, :resource_limits - @@file_system = BlankFileSystem.new - - class << self - def file_system - @@file_system - end - - def file_system=(obj) - @@file_system = obj - end - - def register_tag(name, klass) - tags[name.to_s] = klass - end - - def tags - @tags ||= {} - end - - # Pass a module with filter methods which should be available - # to all liquid views. Good for registering the standard library - def register_filter(mod) - Strainer.global_filter(mod) - end - - # creates a new Template object from liquid source code - def parse(source) - template = Template.new - template.parse(source) - template - end - end - - # creates a new Template from an array of tokens. Use Template.parse instead - def initialize - @resource_limits = {} - end - - # Parse source code. - # Returns self for easy chaining - def parse(source) - @root = Document.new(tokenize(source)) - self - end - - def registers - @registers ||= {} - end - - def assigns - @assigns ||= {} - end - - def instance_assigns - @instance_assigns ||= {} - end - - def errors - @errors ||= [] - end - - # Render takes a hash with local variables. - # - # if you use the same filters over and over again consider registering them globally - # with Template.register_filter - # - # Following options can be passed: - # - # * filters : array with local filters - # * registers : hash with register variables. Those can be accessed from - # filters and tags and might be useful to integrate liquid more with its host application - # - def render(*args) - return '' if @root.nil? - - context = case args.first - when Liquid::Context - args.shift - when Liquid::Drop - drop = args.shift - drop.context = Context.new([drop, assigns], instance_assigns, registers, @rethrow_errors, @resource_limits) - when Hash - Context.new([args.shift, assigns], instance_assigns, registers, @rethrow_errors, @resource_limits) - when nil - Context.new(assigns, instance_assigns, registers, @rethrow_errors, @resource_limits) - else - raise ArgumentError, "Expect Hash or Liquid::Context as parameter" - end - - case args.last - when Hash - options = args.pop - - if options[:registers].is_a?(Hash) - self.registers.merge!(options[:registers]) - end - - if options[:filters] - context.add_filters(options[:filters]) - end - - when Module - context.add_filters(args.pop) - when Array - context.add_filters(args.pop) - end - - begin - # render the nodelist. - # for performance reasons we get an array back here. join will make a string out of it. - result = @root.render(context) - result.respond_to?(:join) ? result.join : result - rescue Liquid::MemoryError => e - context.handle_error(e) - ensure - @errors = context.errors - end - end - - def render!(*args) - @rethrow_errors = true; render(*args) - end - - private - - # Uses the Liquid::TemplateParser regexp to tokenize the passed source - def tokenize(source) - source = source.source if source.respond_to?(:source) - return [] if source.to_s.empty? - tokens = source.split(TemplateParser) - - # removes the rogue empty element at the beginning of the array - tokens.shift if tokens[0] and tokens[0].empty? - - tokens - end - - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/utils.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/utils.rb deleted file mode 100644 index 0bf6df2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/utils.rb +++ /dev/null @@ -1,30 +0,0 @@ -module Liquid - module Utils - def self.slice_collection_using_each(collection, from, to) - segments = [] - index = 0 - - # Maintains Ruby 1.8.7 String#each behaviour on 1.9 - return [collection] if non_blank_string?(collection) - - collection.each do |item| - - if to && to <= index - break - end - - if from <= index - segments << item - end - - index += 1 - end - - segments - end - - def self.non_blank_string?(collection) - collection.is_a?(String) && collection != '' - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/variable.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/variable.rb deleted file mode 100644 index 883e3ea..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/variable.rb +++ /dev/null @@ -1,57 +0,0 @@ -module Liquid - - # Holds variables. Variables are only loaded "just in time" - # and are not evaluated as part of the render stage - # - # {{ monkey }} - # {{ user.name }} - # - # Variables can be combined with filters: - # - # {{ user | link }} - # - class Variable - FilterParser = /(?:#{FilterSeparator}|(?:\s*(?:#{QuotedFragment}|#{ArgumentSeparator})\s*)+)/o - attr_accessor :filters, :name - - def initialize(markup) - @markup = markup - @name = nil - @filters = [] - if match = markup.match(/\s*(#{QuotedFragment})(.*)/o) - @name = match[1] - if match[2].match(/#{FilterSeparator}\s*(.*)/o) - filters = Regexp.last_match(1).scan(FilterParser) - filters.each do |f| - if matches = f.match(/\s*(\w+)/) - filtername = matches[1] - filterargs = f.scan(/(?:#{FilterArgumentSeparator}|#{ArgumentSeparator})\s*((?:\w+\s*\:\s*)?#{QuotedFragment})/o).flatten - @filters << [filtername, filterargs] - end - end - end - end - end - - def render(context) - return '' if @name.nil? - @filters.inject(context[@name]) do |output, filter| - filterargs = [] - keyword_args = {} - filter[1].to_a.each do |a| - if matches = a.match(/\A#{TagAttributes}\z/o) - keyword_args[matches[1]] = context[matches[2]] - else - filterargs << context[a] - end - end - filterargs << keyword_args unless keyword_args.empty? - begin - output = context.invoke(filter[0], output, *filterargs) - rescue FilterNotFound - raise FilterNotFound, "Error - filter '#{filter[0]}' in '#{@markup.strip}' could not be found." - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/version.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/version.rb deleted file mode 100644 index 9544885..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/lib/liquid/version.rb +++ /dev/null @@ -1,4 +0,0 @@ -# encoding: utf-8 -module Liquid - VERSION = "2.6.2" -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/assign_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/assign_test.rb deleted file mode 100644 index d1eb615..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/assign_test.rb +++ /dev/null @@ -1,21 +0,0 @@ -require 'test_helper' - -class AssignTest < Test::Unit::TestCase - include Liquid - - def test_assigned_variable - assert_template_result('.foo.', - '{% assign foo = values %}.{{ foo[0] }}.', - 'values' => %w{foo bar baz}) - - assert_template_result('.bar.', - '{% assign foo = values %}.{{ foo[1] }}.', - 'values' => %w{foo bar baz}) - end - - def test_assign_with_filter - assert_template_result('.bar.', - '{% assign foo = values | split: "," %}.{{ foo[1] }}.', - 'values' => "foo,bar,baz") - end -end # AssignTest diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/block_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/block_test.rb deleted file mode 100644 index f4b4494..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/block_test.rb +++ /dev/null @@ -1,58 +0,0 @@ -require 'test_helper' - -class BlockTest < Test::Unit::TestCase - include Liquid - - def test_blankspace - template = Liquid::Template.parse(" ") - assert_equal [" "], template.root.nodelist - end - - def test_variable_beginning - template = Liquid::Template.parse("{{funk}} ") - assert_equal 2, template.root.nodelist.size - assert_equal Variable, template.root.nodelist[0].class - assert_equal String, template.root.nodelist[1].class - end - - def test_variable_end - template = Liquid::Template.parse(" {{funk}}") - assert_equal 2, template.root.nodelist.size - assert_equal String, template.root.nodelist[0].class - assert_equal Variable, template.root.nodelist[1].class - end - - def test_variable_middle - template = Liquid::Template.parse(" {{funk}} ") - assert_equal 3, template.root.nodelist.size - assert_equal String, template.root.nodelist[0].class - assert_equal Variable, template.root.nodelist[1].class - assert_equal String, template.root.nodelist[2].class - end - - def test_variable_many_embedded_fragments - template = Liquid::Template.parse(" {{funk}} {{so}} {{brother}} ") - assert_equal 7, template.root.nodelist.size - assert_equal [String, Variable, String, Variable, String, Variable, String], - block_types(template.root.nodelist) - end - - def test_with_block - template = Liquid::Template.parse(" {% comment %} {% endcomment %} ") - assert_equal [String, Comment, String], block_types(template.root.nodelist) - assert_equal 3, template.root.nodelist.size - end - - def test_with_custom_tag - Liquid::Template.register_tag("testtag", Block) - - assert_nothing_thrown do - template = Liquid::Template.parse( "{% testtag %} {% endtesttag %}") - end - end - - private - def block_types(nodelist) - nodelist.collect { |node| node.class } - end -end # VariableTest diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/capture_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/capture_test.rb deleted file mode 100644 index cf27ff1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/capture_test.rb +++ /dev/null @@ -1,40 +0,0 @@ -require 'test_helper' - -class CaptureTest < Test::Unit::TestCase - include Liquid - - def test_captures_block_content_in_variable - assert_template_result("test string", "{% capture 'var' %}test string{% endcapture %}{{var}}", {}) - end - - def test_capture_to_variable_from_outer_scope_if_existing - template_source = <<-END_TEMPLATE - {% assign var = '' %} - {% if true %} - {% capture var %}first-block-string{% endcapture %} - {% endif %} - {% if true %} - {% capture var %}test-string{% endcapture %} - {% endif %} - {{var}} - END_TEMPLATE - template = Template.parse(template_source) - rendered = template.render - assert_equal "test-string", rendered.gsub(/\s/, '') - end - - def test_assigning_from_capture - template_source = <<-END_TEMPLATE - {% assign first = '' %} - {% assign second = '' %} - {% for number in (1..3) %} - {% capture first %}{{number}}{% endcapture %} - {% assign second = first %} - {% endfor %} - {{ first }}-{{ second }} - END_TEMPLATE - template = Template.parse(template_source) - rendered = template.render - assert_equal "3-3", rendered.gsub(/\s/, '') - end -end # CaptureTest diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/condition_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/condition_test.rb deleted file mode 100644 index 3e57897..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/condition_test.rb +++ /dev/null @@ -1,127 +0,0 @@ -require 'test_helper' - -class ConditionTest < Test::Unit::TestCase - include Liquid - - def test_basic_condition - assert_equal false, Condition.new('1', '==', '2').evaluate - assert_equal true, Condition.new('1', '==', '1').evaluate - end - - def test_default_operators_evalute_true - assert_evalutes_true '1', '==', '1' - assert_evalutes_true '1', '!=', '2' - assert_evalutes_true '1', '<>', '2' - assert_evalutes_true '1', '<', '2' - assert_evalutes_true '2', '>', '1' - assert_evalutes_true '1', '>=', '1' - assert_evalutes_true '2', '>=', '1' - assert_evalutes_true '1', '<=', '2' - assert_evalutes_true '1', '<=', '1' - # negative numbers - assert_evalutes_true '1', '>', '-1' - assert_evalutes_true '-1', '<', '1' - assert_evalutes_true '1.0', '>', '-1.0' - assert_evalutes_true '-1.0', '<', '1.0' - end - - def test_default_operators_evalute_false - assert_evalutes_false '1', '==', '2' - assert_evalutes_false '1', '!=', '1' - assert_evalutes_false '1', '<>', '1' - assert_evalutes_false '1', '<', '0' - assert_evalutes_false '2', '>', '4' - assert_evalutes_false '1', '>=', '3' - assert_evalutes_false '2', '>=', '4' - assert_evalutes_false '1', '<=', '0' - assert_evalutes_false '1', '<=', '0' - end - - def test_contains_works_on_strings - assert_evalutes_true "'bob'", 'contains', "'o'" - assert_evalutes_true "'bob'", 'contains', "'b'" - assert_evalutes_true "'bob'", 'contains', "'bo'" - assert_evalutes_true "'bob'", 'contains', "'ob'" - assert_evalutes_true "'bob'", 'contains', "'bob'" - - assert_evalutes_false "'bob'", 'contains', "'bob2'" - assert_evalutes_false "'bob'", 'contains', "'a'" - assert_evalutes_false "'bob'", 'contains', "'---'" - end - - def test_contains_works_on_arrays - @context = Liquid::Context.new - @context['array'] = [1,2,3,4,5] - - assert_evalutes_false "array", 'contains', '0' - assert_evalutes_true "array", 'contains', '1' - assert_evalutes_true "array", 'contains', '2' - assert_evalutes_true "array", 'contains', '3' - assert_evalutes_true "array", 'contains', '4' - assert_evalutes_true "array", 'contains', '5' - assert_evalutes_false "array", 'contains', '6' - assert_evalutes_false "array", 'contains', '"1"' - end - - def test_contains_returns_false_for_nil_operands - @context = Liquid::Context.new - assert_evalutes_false "not_assigned", 'contains', '0' - assert_evalutes_false "0", 'contains', 'not_assigned' - end - - def test_or_condition - condition = Condition.new('1', '==', '2') - - assert_equal false, condition.evaluate - - condition.or Condition.new('2', '==', '1') - - assert_equal false, condition.evaluate - - condition.or Condition.new('1', '==', '1') - - assert_equal true, condition.evaluate - end - - def test_and_condition - condition = Condition.new('1', '==', '1') - - assert_equal true, condition.evaluate - - condition.and Condition.new('2', '==', '2') - - assert_equal true, condition.evaluate - - condition.and Condition.new('2', '==', '1') - - assert_equal false, condition.evaluate - end - - def test_should_allow_custom_proc_operator - Condition.operators['starts_with'] = Proc.new { |cond, left, right| left =~ %r{^#{right}} } - - assert_evalutes_true "'bob'", 'starts_with', "'b'" - assert_evalutes_false "'bob'", 'starts_with', "'o'" - - ensure - Condition.operators.delete 'starts_with' - end - - def test_left_or_right_may_contain_operators - @context = Liquid::Context.new - @context['one'] = @context['another'] = "gnomeslab-and-or-liquid" - - assert_evalutes_true "one", '==', "another" - end - - private - def assert_evalutes_true(left, op, right) - assert Condition.new(left, op, right).evaluate(@context || Liquid::Context.new), - "Evaluated false: #{left} #{op} #{right}" - end - - def assert_evalutes_false(left, op, right) - assert !Condition.new(left, op, right).evaluate(@context || Liquid::Context.new), - "Evaluated true: #{left} #{op} #{right}" - end -end # ConditionTest diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/context_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/context_test.rb deleted file mode 100644 index e50b237..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/context_test.rb +++ /dev/null @@ -1,478 +0,0 @@ -require 'test_helper' - -class HundredCentes - def to_liquid - 100 - end -end - -class CentsDrop < Liquid::Drop - def amount - HundredCentes.new - end - - def non_zero? - true - end -end - -class ContextSensitiveDrop < Liquid::Drop - def test - @context['test'] - end -end - -class Category < Liquid::Drop - attr_accessor :name - - def initialize(name) - @name = name - end - - def to_liquid - CategoryDrop.new(self) - end -end - -class CategoryDrop - attr_accessor :category, :context - def initialize(category) - @category = category - end -end - -class CounterDrop < Liquid::Drop - def count - @count ||= 0 - @count += 1 - end -end - -class ArrayLike - def fetch(index) - end - - def [](index) - @counts ||= [] - @counts[index] ||= 0 - @counts[index] += 1 - end - - def to_liquid - self - end -end - -class ContextTest < Test::Unit::TestCase - include Liquid - - def setup - @context = Liquid::Context.new - end - - def test_variables - @context['string'] = 'string' - assert_equal 'string', @context['string'] - - @context['num'] = 5 - assert_equal 5, @context['num'] - - @context['time'] = Time.parse('2006-06-06 12:00:00') - assert_equal Time.parse('2006-06-06 12:00:00'), @context['time'] - - @context['date'] = Date.today - assert_equal Date.today, @context['date'] - - now = DateTime.now - @context['datetime'] = now - assert_equal now, @context['datetime'] - - @context['bool'] = true - assert_equal true, @context['bool'] - - @context['bool'] = false - assert_equal false, @context['bool'] - - @context['nil'] = nil - assert_equal nil, @context['nil'] - assert_equal nil, @context['nil'] - end - - def test_variables_not_existing - assert_equal nil, @context['does_not_exist'] - end - - def test_scoping - assert_nothing_raised do - @context.push - @context.pop - end - - assert_raise(Liquid::ContextError) do - @context.pop - end - - assert_raise(Liquid::ContextError) do - @context.push - @context.pop - @context.pop - end - end - - def test_length_query - - @context['numbers'] = [1,2,3,4] - - assert_equal 4, @context['numbers.size'] - - @context['numbers'] = {1 => 1,2 => 2,3 => 3,4 => 4} - - assert_equal 4, @context['numbers.size'] - - @context['numbers'] = {1 => 1,2 => 2,3 => 3,4 => 4, 'size' => 1000} - - assert_equal 1000, @context['numbers.size'] - - end - - def test_hyphenated_variable - - @context['oh-my'] = 'godz' - assert_equal 'godz', @context['oh-my'] - - end - - def test_add_filter - - filter = Module.new do - def hi(output) - output + ' hi!' - end - end - - context = Context.new - context.add_filters(filter) - assert_equal 'hi? hi!', context.invoke(:hi, 'hi?') - - context = Context.new - assert_equal 'hi?', context.invoke(:hi, 'hi?') - - context.add_filters(filter) - assert_equal 'hi? hi!', context.invoke(:hi, 'hi?') - - end - - def test_override_global_filter - global = Module.new do - def notice(output) - "Global #{output}" - end - end - - local = Module.new do - def notice(output) - "Local #{output}" - end - end - - Template.register_filter(global) - assert_equal 'Global test', Template.parse("{{'test' | notice }}").render - assert_equal 'Local test', Template.parse("{{'test' | notice }}").render({}, :filters => [local]) - end - - def test_only_intended_filters_make_it_there - - filter = Module.new do - def hi(output) - output + ' hi!' - end - end - - context = Context.new - assert_equal "Wookie", context.invoke("hi", "Wookie") - - context.add_filters(filter) - assert_equal "Wookie hi!", context.invoke("hi", "Wookie") - end - - def test_add_item_in_outer_scope - @context['test'] = 'test' - @context.push - assert_equal 'test', @context['test'] - @context.pop - assert_equal 'test', @context['test'] - end - - def test_add_item_in_inner_scope - @context.push - @context['test'] = 'test' - assert_equal 'test', @context['test'] - @context.pop - assert_equal nil, @context['test'] - end - - def test_hierachical_data - @context['hash'] = {"name" => 'tobi'} - assert_equal 'tobi', @context['hash.name'] - assert_equal 'tobi', @context['hash["name"]'] - end - - def test_keywords - assert_equal true, @context['true'] - assert_equal false, @context['false'] - end - - def test_digits - assert_equal 100, @context['100'] - assert_equal 100.00, @context['100.00'] - end - - def test_strings - assert_equal "hello!", @context['"hello!"'] - assert_equal "hello!", @context["'hello!'"] - end - - def test_merge - @context.merge({ "test" => "test" }) - assert_equal 'test', @context['test'] - @context.merge({ "test" => "newvalue", "foo" => "bar" }) - assert_equal 'newvalue', @context['test'] - assert_equal 'bar', @context['foo'] - end - - def test_array_notation - @context['test'] = [1,2,3,4,5] - - assert_equal 1, @context['test[0]'] - assert_equal 2, @context['test[1]'] - assert_equal 3, @context['test[2]'] - assert_equal 4, @context['test[3]'] - assert_equal 5, @context['test[4]'] - end - - def test_recoursive_array_notation - @context['test'] = {'test' => [1,2,3,4,5]} - - assert_equal 1, @context['test.test[0]'] - - @context['test'] = [{'test' => 'worked'}] - - assert_equal 'worked', @context['test[0].test'] - end - - def test_hash_to_array_transition - @context['colors'] = { - 'Blue' => ['003366','336699', '6699CC', '99CCFF'], - 'Green' => ['003300','336633', '669966', '99CC99'], - 'Yellow' => ['CC9900','FFCC00', 'FFFF99', 'FFFFCC'], - 'Red' => ['660000','993333', 'CC6666', 'FF9999'] - } - - assert_equal '003366', @context['colors.Blue[0]'] - assert_equal 'FF9999', @context['colors.Red[3]'] - end - - def test_try_first - @context['test'] = [1,2,3,4,5] - - assert_equal 1, @context['test.first'] - assert_equal 5, @context['test.last'] - - @context['test'] = {'test' => [1,2,3,4,5]} - - assert_equal 1, @context['test.test.first'] - assert_equal 5, @context['test.test.last'] - - @context['test'] = [1] - assert_equal 1, @context['test.first'] - assert_equal 1, @context['test.last'] - end - - def test_access_hashes_with_hash_notation - @context['products'] = {'count' => 5, 'tags' => ['deepsnow', 'freestyle'] } - @context['product'] = {'variants' => [ {'title' => 'draft151cm'}, {'title' => 'element151cm'} ]} - - assert_equal 5, @context['products["count"]'] - assert_equal 'deepsnow', @context['products["tags"][0]'] - assert_equal 'deepsnow', @context['products["tags"].first'] - assert_equal 'draft151cm', @context['product["variants"][0]["title"]'] - assert_equal 'element151cm', @context['product["variants"][1]["title"]'] - assert_equal 'draft151cm', @context['product["variants"][0]["title"]'] - assert_equal 'element151cm', @context['product["variants"].last["title"]'] - end - - def test_access_variable_with_hash_notation - @context['foo'] = 'baz' - @context['bar'] = 'foo' - - assert_equal 'baz', @context['["foo"]'] - assert_equal 'baz', @context['[bar]'] - end - - def test_access_hashes_with_hash_access_variables - - @context['var'] = 'tags' - @context['nested'] = {'var' => 'tags'} - @context['products'] = {'count' => 5, 'tags' => ['deepsnow', 'freestyle'] } - - assert_equal 'deepsnow', @context['products[var].first'] - assert_equal 'freestyle', @context['products[nested.var].last'] - end - - def test_hash_notation_only_for_hash_access - @context['array'] = [1,2,3,4,5] - @context['hash'] = {'first' => 'Hello'} - - assert_equal 1, @context['array.first'] - assert_equal nil, @context['array["first"]'] - assert_equal 'Hello', @context['hash["first"]'] - end - - def test_first_can_appear_in_middle_of_callchain - - @context['product'] = {'variants' => [ {'title' => 'draft151cm'}, {'title' => 'element151cm'} ]} - - assert_equal 'draft151cm', @context['product.variants[0].title'] - assert_equal 'element151cm', @context['product.variants[1].title'] - assert_equal 'draft151cm', @context['product.variants.first.title'] - assert_equal 'element151cm', @context['product.variants.last.title'] - - end - - def test_cents - @context.merge( "cents" => HundredCentes.new ) - assert_equal 100, @context['cents'] - end - - def test_nested_cents - @context.merge( "cents" => { 'amount' => HundredCentes.new} ) - assert_equal 100, @context['cents.amount'] - - @context.merge( "cents" => { 'cents' => { 'amount' => HundredCentes.new} } ) - assert_equal 100, @context['cents.cents.amount'] - end - - def test_cents_through_drop - @context.merge( "cents" => CentsDrop.new ) - assert_equal 100, @context['cents.amount'] - end - - def test_nested_cents_through_drop - @context.merge( "vars" => {"cents" => CentsDrop.new} ) - assert_equal 100, @context['vars.cents.amount'] - end - - def test_drop_methods_with_question_marks - @context.merge( "cents" => CentsDrop.new ) - assert @context['cents.non_zero?'] - end - - def test_context_from_within_drop - @context.merge( "test" => '123', "vars" => ContextSensitiveDrop.new ) - assert_equal '123', @context['vars.test'] - end - - def test_nested_context_from_within_drop - @context.merge( "test" => '123', "vars" => {"local" => ContextSensitiveDrop.new } ) - assert_equal '123', @context['vars.local.test'] - end - - def test_ranges - @context.merge( "test" => '5' ) - assert_equal (1..5), @context['(1..5)'] - assert_equal (1..5), @context['(1..test)'] - assert_equal (5..5), @context['(test..test)'] - end - - def test_cents_through_drop_nestedly - @context.merge( "cents" => {"cents" => CentsDrop.new} ) - assert_equal 100, @context['cents.cents.amount'] - - @context.merge( "cents" => { "cents" => {"cents" => CentsDrop.new}} ) - assert_equal 100, @context['cents.cents.cents.amount'] - end - - def test_drop_with_variable_called_only_once - @context['counter'] = CounterDrop.new - - assert_equal 1, @context['counter.count'] - assert_equal 2, @context['counter.count'] - assert_equal 3, @context['counter.count'] - end - - def test_drop_with_key_called_only_once - @context['counter'] = CounterDrop.new - - assert_equal 1, @context['counter["count"]'] - assert_equal 2, @context['counter["count"]'] - assert_equal 3, @context['counter["count"]'] - end - - def test_proc_as_variable - @context['dynamic'] = Proc.new { 'Hello' } - - assert_equal 'Hello', @context['dynamic'] - end - - def test_lambda_as_variable - @context['dynamic'] = proc { 'Hello' } - - assert_equal 'Hello', @context['dynamic'] - end - - def test_nested_lambda_as_variable - @context['dynamic'] = { "lambda" => proc { 'Hello' } } - - assert_equal 'Hello', @context['dynamic.lambda'] - end - - def test_array_containing_lambda_as_variable - @context['dynamic'] = [1,2, proc { 'Hello' } ,4,5] - - assert_equal 'Hello', @context['dynamic[2]'] - end - - def test_lambda_is_called_once - @context['callcount'] = proc { @global ||= 0; @global += 1; @global.to_s } - - assert_equal '1', @context['callcount'] - assert_equal '1', @context['callcount'] - assert_equal '1', @context['callcount'] - - @global = nil - end - - def test_nested_lambda_is_called_once - @context['callcount'] = { "lambda" => proc { @global ||= 0; @global += 1; @global.to_s } } - - assert_equal '1', @context['callcount.lambda'] - assert_equal '1', @context['callcount.lambda'] - assert_equal '1', @context['callcount.lambda'] - - @global = nil - end - - def test_lambda_in_array_is_called_once - @context['callcount'] = [1,2, proc { @global ||= 0; @global += 1; @global.to_s } ,4,5] - - assert_equal '1', @context['callcount[2]'] - assert_equal '1', @context['callcount[2]'] - assert_equal '1', @context['callcount[2]'] - - @global = nil - end - - def test_access_to_context_from_proc - @context.registers[:magic] = 345392 - - @context['magic'] = proc { @context.registers[:magic] } - - assert_equal 345392, @context['magic'] - end - - def test_to_liquid_and_context_at_first_level - @context['category'] = Category.new("foobar") - assert_kind_of CategoryDrop, @context['category'] - assert_equal @context, @context['category'].context - end -end # ContextTest diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/drop_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/drop_test.rb deleted file mode 100644 index fc972aa..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/drop_test.rb +++ /dev/null @@ -1,180 +0,0 @@ -require 'test_helper' - -class ContextDrop < Liquid::Drop - def scopes - @context.scopes.size - end - - def scopes_as_array - (1..@context.scopes.size).to_a - end - - def loop_pos - @context['forloop.index'] - end - - def before_method(method) - return @context[method] - end -end - -class ProductDrop < Liquid::Drop - - class TextDrop < Liquid::Drop - def array - ['text1', 'text2'] - end - - def text - 'text1' - end - end - - class CatchallDrop < Liquid::Drop - def before_method(method) - return 'method: ' << method.to_s - end - end - - def texts - TextDrop.new - end - - def catchall - CatchallDrop.new - end - - def context - ContextDrop.new - end - - protected - def callmenot - "protected" - end -end - -class EnumerableDrop < Liquid::Drop - - def size - 3 - end - - def each - yield 1 - yield 2 - yield 3 - end -end - -class DropsTest < Test::Unit::TestCase - include Liquid - - def test_product_drop - assert_nothing_raised do - tpl = Liquid::Template.parse( ' ' ) - tpl.render('product' => ProductDrop.new) - end - end - - def test_drop_does_only_respond_to_whitelisted_methods - assert_equal "", Liquid::Template.parse("{{ product.inspect }}").render('product' => ProductDrop.new) - assert_equal "", Liquid::Template.parse("{{ product.pretty_inspect }}").render('product' => ProductDrop.new) - assert_equal "", Liquid::Template.parse("{{ product.whatever }}").render('product' => ProductDrop.new) - assert_equal "", Liquid::Template.parse('{{ product | map: "inspect" }}').render('product' => ProductDrop.new) - assert_equal "", Liquid::Template.parse('{{ product | map: "pretty_inspect" }}').render('product' => ProductDrop.new) - assert_equal "", Liquid::Template.parse('{{ product | map: "whatever" }}').render('product' => ProductDrop.new) - end - - def test_drops_respond_to_to_liquid - assert_equal "text1", Liquid::Template.parse("{{ product.to_liquid.texts.text }}").render('product' => ProductDrop.new) - assert_equal "text1", Liquid::Template.parse('{{ product | map: "to_liquid" | map: "texts" | map: "text" }}').render('product' => ProductDrop.new) - end - - def test_text_drop - output = Liquid::Template.parse( ' {{ product.texts.text }} ' ).render('product' => ProductDrop.new) - assert_equal ' text1 ', output - end - - def test_unknown_method - output = Liquid::Template.parse( ' {{ product.catchall.unknown }} ' ).render('product' => ProductDrop.new) - assert_equal ' method: unknown ', output - end - - def test_integer_argument_drop - output = Liquid::Template.parse( ' {{ product.catchall[8] }} ' ).render('product' => ProductDrop.new) - assert_equal ' method: 8 ', output - end - - def test_text_array_drop - output = Liquid::Template.parse( '{% for text in product.texts.array %} {{text}} {% endfor %}' ).render('product' => ProductDrop.new) - assert_equal ' text1 text2 ', output - end - - def test_context_drop - output = Liquid::Template.parse( ' {{ context.bar }} ' ).render('context' => ContextDrop.new, 'bar' => "carrot") - assert_equal ' carrot ', output - end - - def test_nested_context_drop - output = Liquid::Template.parse( ' {{ product.context.foo }} ' ).render('product' => ProductDrop.new, 'foo' => "monkey") - assert_equal ' monkey ', output - end - - def test_protected - output = Liquid::Template.parse( ' {{ product.callmenot }} ' ).render('product' => ProductDrop.new) - assert_equal ' ', output - end - - def test_object_methods_not_allowed - [:dup, :clone, :singleton_class, :eval, :class_eval, :inspect].each do |method| - output = Liquid::Template.parse(" {{ product.#{method} }} ").render('product' => ProductDrop.new) - assert_equal ' ', output - end - end - - def test_scope - assert_equal '1', Liquid::Template.parse( '{{ context.scopes }}' ).render('context' => ContextDrop.new) - assert_equal '2', Liquid::Template.parse( '{%for i in dummy%}{{ context.scopes }}{%endfor%}' ).render('context' => ContextDrop.new, 'dummy' => [1]) - assert_equal '3', Liquid::Template.parse( '{%for i in dummy%}{%for i in dummy%}{{ context.scopes }}{%endfor%}{%endfor%}' ).render('context' => ContextDrop.new, 'dummy' => [1]) - end - - def test_scope_though_proc - assert_equal '1', Liquid::Template.parse( '{{ s }}' ).render('context' => ContextDrop.new, 's' => Proc.new{|c| c['context.scopes'] }) - assert_equal '2', Liquid::Template.parse( '{%for i in dummy%}{{ s }}{%endfor%}' ).render('context' => ContextDrop.new, 's' => Proc.new{|c| c['context.scopes'] }, 'dummy' => [1]) - assert_equal '3', Liquid::Template.parse( '{%for i in dummy%}{%for i in dummy%}{{ s }}{%endfor%}{%endfor%}' ).render('context' => ContextDrop.new, 's' => Proc.new{|c| c['context.scopes'] }, 'dummy' => [1]) - end - - def test_scope_with_assigns - assert_equal 'variable', Liquid::Template.parse( '{% assign a = "variable"%}{{a}}' ).render('context' => ContextDrop.new) - assert_equal 'variable', Liquid::Template.parse( '{% assign a = "variable"%}{%for i in dummy%}{{a}}{%endfor%}' ).render('context' => ContextDrop.new, 'dummy' => [1]) - assert_equal 'test', Liquid::Template.parse( '{% assign header_gif = "test"%}{{header_gif}}' ).render('context' => ContextDrop.new) - assert_equal 'test', Liquid::Template.parse( "{% assign header_gif = 'test'%}{{header_gif}}" ).render('context' => ContextDrop.new) - end - - def test_scope_from_tags - assert_equal '1', Liquid::Template.parse( '{% for i in context.scopes_as_array %}{{i}}{% endfor %}' ).render('context' => ContextDrop.new, 'dummy' => [1]) - assert_equal '12', Liquid::Template.parse( '{%for a in dummy%}{% for i in context.scopes_as_array %}{{i}}{% endfor %}{% endfor %}' ).render('context' => ContextDrop.new, 'dummy' => [1]) - assert_equal '123', Liquid::Template.parse( '{%for a in dummy%}{%for a in dummy%}{% for i in context.scopes_as_array %}{{i}}{% endfor %}{% endfor %}{% endfor %}' ).render('context' => ContextDrop.new, 'dummy' => [1]) - end - - def test_access_context_from_drop - assert_equal '123', Liquid::Template.parse( '{%for a in dummy%}{{ context.loop_pos }}{% endfor %}' ).render('context' => ContextDrop.new, 'dummy' => [1,2,3]) - end - - def test_enumerable_drop - assert_equal '123', Liquid::Template.parse( '{% for c in collection %}{{c}}{% endfor %}').render('collection' => EnumerableDrop.new) - end - - def test_enumerable_drop_size - assert_equal '3', Liquid::Template.parse( '{{collection.size}}').render('collection' => EnumerableDrop.new) - end - - def test_empty_string_value_access - assert_equal '', Liquid::Template.parse('{{ product[value] }}').render('product' => ProductDrop.new, 'value' => '') - end - - def test_nil_value_access - assert_equal '', Liquid::Template.parse('{{ product[value] }}').render('product' => ProductDrop.new, 'value' => nil) - end -end # DropsTest diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/error_handling_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/error_handling_test.rb deleted file mode 100644 index 22603bb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/error_handling_test.rb +++ /dev/null @@ -1,81 +0,0 @@ -require 'test_helper' - -class ErrorDrop < Liquid::Drop - def standard_error - raise Liquid::StandardError, 'standard error' - end - - def argument_error - raise Liquid::ArgumentError, 'argument error' - end - - def syntax_error - raise Liquid::SyntaxError, 'syntax error' - end - - def exception - raise Exception, 'exception' - end - -end - -class ErrorHandlingTest < Test::Unit::TestCase - include Liquid - - def test_standard_error - assert_nothing_raised do - template = Liquid::Template.parse( ' {{ errors.standard_error }} ' ) - assert_equal ' Liquid error: standard error ', template.render('errors' => ErrorDrop.new) - - assert_equal 1, template.errors.size - assert_equal StandardError, template.errors.first.class - end - end - - def test_syntax - - assert_nothing_raised do - - template = Liquid::Template.parse( ' {{ errors.syntax_error }} ' ) - assert_equal ' Liquid syntax error: syntax error ', template.render('errors' => ErrorDrop.new) - - assert_equal 1, template.errors.size - assert_equal SyntaxError, template.errors.first.class - - end - end - - def test_argument - assert_nothing_raised do - - template = Liquid::Template.parse( ' {{ errors.argument_error }} ' ) - assert_equal ' Liquid error: argument error ', template.render('errors' => ErrorDrop.new) - - assert_equal 1, template.errors.size - assert_equal ArgumentError, template.errors.first.class - end - end - - def test_missing_endtag_parse_time_error - assert_raise(Liquid::SyntaxError) do - template = Liquid::Template.parse(' {% for a in b %} ... ') - end - end - - def test_unrecognized_operator - assert_nothing_raised do - template = Liquid::Template.parse(' {% if 1 =! 2 %}ok{% endif %} ') - assert_equal ' Liquid error: Unknown operator =! ', template.render - assert_equal 1, template.errors.size - assert_equal Liquid::ArgumentError, template.errors.first.class - end - end - - # Liquid should not catch Exceptions that are not subclasses of StandardError, like Interrupt and NoMemoryError - def test_exceptions_propagate - assert_raise Exception do - template = Liquid::Template.parse( ' {{ errors.exception }} ' ) - template.render('errors' => ErrorDrop.new) - end - end -end # ErrorHandlingTest diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/file_system_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/file_system_test.rb deleted file mode 100644 index e9abaa8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/file_system_test.rb +++ /dev/null @@ -1,29 +0,0 @@ -require 'test_helper' - -class FileSystemTest < Test::Unit::TestCase - include Liquid - - def test_default - assert_raise(FileSystemError) do - BlankFileSystem.new.read_template_file("dummy", {'dummy'=>'smarty'}) - end - end - - def test_local - file_system = Liquid::LocalFileSystem.new("/some/path") - assert_equal "/some/path/_mypartial.liquid" , file_system.full_path("mypartial") - assert_equal "/some/path/dir/_mypartial.liquid", file_system.full_path("dir/mypartial") - - assert_raise(FileSystemError) do - file_system.full_path("../dir/mypartial") - end - - assert_raise(FileSystemError) do - file_system.full_path("/dir/../../dir/mypartial") - end - - assert_raise(FileSystemError) do - file_system.full_path("/etc/passwd") - end - end -end # FileSystemTest diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/filter_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/filter_test.rb deleted file mode 100644 index d924c6a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/filter_test.rb +++ /dev/null @@ -1,125 +0,0 @@ -require 'test_helper' - -module MoneyFilter - def money(input) - sprintf(' %d$ ', input) - end - - def money_with_underscore(input) - sprintf(' %d$ ', input) - end -end - -module CanadianMoneyFilter - def money(input) - sprintf(' %d$ CAD ', input) - end -end - -module SubstituteFilter - def substitute(input, params={}) - input.gsub(/%\{(\w+)\}/) { |match| params[$1] } - end -end - -class FiltersTest < Test::Unit::TestCase - include Liquid - - def setup - @context = Context.new - end - - def test_local_filter - @context['var'] = 1000 - @context.add_filters(MoneyFilter) - - assert_equal ' 1000$ ', Variable.new("var | money").render(@context) - end - - def test_underscore_in_filter_name - @context['var'] = 1000 - @context.add_filters(MoneyFilter) - assert_equal ' 1000$ ', Variable.new("var | money_with_underscore").render(@context) - end - - def test_second_filter_overwrites_first - @context['var'] = 1000 - @context.add_filters(MoneyFilter) - @context.add_filters(CanadianMoneyFilter) - - assert_equal ' 1000$ CAD ', Variable.new("var | money").render(@context) - end - - def test_size - @context['var'] = 'abcd' - @context.add_filters(MoneyFilter) - - assert_equal 4, Variable.new("var | size").render(@context) - end - - def test_join - @context['var'] = [1,2,3,4] - - assert_equal "1 2 3 4", Variable.new("var | join").render(@context) - end - - def test_sort - @context['value'] = 3 - @context['numbers'] = [2,1,4,3] - @context['words'] = ['expected', 'as', 'alphabetic'] - @context['arrays'] = [['flattened'], ['are']] - - assert_equal [1,2,3,4], Variable.new("numbers | sort").render(@context) - assert_equal ['alphabetic', 'as', 'expected'], Variable.new("words | sort").render(@context) - assert_equal [3], Variable.new("value | sort").render(@context) - assert_equal ['are', 'flattened'], Variable.new("arrays | sort").render(@context) - end - - def test_strip_html - @context['var'] = "bla blub" - - assert_equal "bla blub", Variable.new("var | strip_html").render(@context) - end - - def test_strip_html_ignore_comments_with_html - @context['var'] = "bla blub" - - assert_equal "bla blub", Variable.new("var | strip_html").render(@context) - end - - def test_capitalize - @context['var'] = "blub" - - assert_equal "Blub", Variable.new("var | capitalize").render(@context) - end - - def test_nonexistent_filter_is_ignored - @context['var'] = 1000 - - assert_equal 1000, Variable.new("var | xyzzy").render(@context) - end - - def test_filter_with_keyword_arguments - @context['surname'] = 'john' - @context.add_filters(SubstituteFilter) - output = Variable.new(%! 'hello %{first_name}, %{last_name}' | substitute: first_name: surname, last_name: 'doe' !).render(@context) - assert_equal 'hello john, doe', output - end -end - -class FiltersInTemplate < Test::Unit::TestCase - include Liquid - - def test_local_global - Template.register_filter(MoneyFilter) - - assert_equal " 1000$ ", Template.parse("{{1000 | money}}").render(nil, nil) - assert_equal " 1000$ CAD ", Template.parse("{{1000 | money}}").render(nil, :filters => CanadianMoneyFilter) - assert_equal " 1000$ CAD ", Template.parse("{{1000 | money}}").render(nil, :filters => [CanadianMoneyFilter]) - end - - def test_local_filter_with_deprecated_syntax - assert_equal " 1000$ CAD ", Template.parse("{{1000 | money}}").render(nil, CanadianMoneyFilter) - assert_equal " 1000$ CAD ", Template.parse("{{1000 | money}}").render(nil, [CanadianMoneyFilter]) - end -end # FiltersTest diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/hash_ordering_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/hash_ordering_test.rb deleted file mode 100644 index 3b77709..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/hash_ordering_test.rb +++ /dev/null @@ -1,25 +0,0 @@ -require 'test_helper' - -module MoneyFilter - def money(input) - sprintf(' %d$ ', input) - end -end - -module CanadianMoneyFilter - def money(input) - sprintf(' %d$ CAD ', input) - end -end - -class HashOrderingTest < Test::Unit::TestCase - include Liquid - - def test_global_register_order - Template.register_filter(MoneyFilter) - Template.register_filter(CanadianMoneyFilter) - - assert_equal " 1000$ CAD ", Template.parse("{{1000 | money}}").render(nil, nil) - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/module_ex_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/module_ex_test.rb deleted file mode 100644 index 45bde8c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/module_ex_test.rb +++ /dev/null @@ -1,87 +0,0 @@ -require 'test_helper' - -class TestClassA - liquid_methods :allowedA, :chainedB - def allowedA - 'allowedA' - end - def restrictedA - 'restrictedA' - end - def chainedB - TestClassB.new - end -end - -class TestClassB - liquid_methods :allowedB, :chainedC - def allowedB - 'allowedB' - end - def chainedC - TestClassC.new - end -end - -class TestClassC - liquid_methods :allowedC - def allowedC - 'allowedC' - end -end - -class TestClassC::LiquidDropClass - def another_allowedC - 'another_allowedC' - end -end - -class ModuleExTest < Test::Unit::TestCase - include Liquid - - def setup - @a = TestClassA.new - @b = TestClassB.new - @c = TestClassC.new - end - - def test_should_create_LiquidDropClass - assert TestClassA::LiquidDropClass - assert TestClassB::LiquidDropClass - assert TestClassC::LiquidDropClass - end - - def test_should_respond_to_liquid - assert @a.respond_to?(:to_liquid) - assert @b.respond_to?(:to_liquid) - assert @c.respond_to?(:to_liquid) - end - - def test_should_return_LiquidDropClass_object - assert @a.to_liquid.is_a?(TestClassA::LiquidDropClass) - assert @b.to_liquid.is_a?(TestClassB::LiquidDropClass) - assert @c.to_liquid.is_a?(TestClassC::LiquidDropClass) - end - - def test_should_respond_to_liquid_methods - assert @a.to_liquid.respond_to?(:allowedA) - assert @a.to_liquid.respond_to?(:chainedB) - assert @b.to_liquid.respond_to?(:allowedB) - assert @b.to_liquid.respond_to?(:chainedC) - assert @c.to_liquid.respond_to?(:allowedC) - assert @c.to_liquid.respond_to?(:another_allowedC) - end - - def test_should_not_respond_to_restricted_methods - assert ! @a.to_liquid.respond_to?(:restricted) - end - - def test_should_use_regular_objects_as_drops - assert_equal 'allowedA', Liquid::Template.parse("{{ a.allowedA }}").render('a'=>@a) - assert_equal 'allowedB', Liquid::Template.parse("{{ a.chainedB.allowedB }}").render('a'=>@a) - assert_equal 'allowedC', Liquid::Template.parse("{{ a.chainedB.chainedC.allowedC }}").render('a'=>@a) - assert_equal 'another_allowedC', Liquid::Template.parse("{{ a.chainedB.chainedC.another_allowedC }}").render('a'=>@a) - assert_equal '', Liquid::Template.parse("{{ a.restricted }}").render('a'=>@a) - assert_equal '', Liquid::Template.parse("{{ a.unknown }}").render('a'=>@a) - end -end # ModuleExTest diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/output_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/output_test.rb deleted file mode 100644 index e545a41..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/output_test.rb +++ /dev/null @@ -1,116 +0,0 @@ -require 'test_helper' - -module FunnyFilter - def make_funny(input) - 'LOL' - end - - def cite_funny(input) - "LOL: #{input}" - end - - def add_smiley(input, smiley = ":-)") - "#{input} #{smiley}" - end - - def add_tag(input, tag = "p", id = "foo") - %|<#{tag} id="#{id}">#{input}| - end - - def paragraph(input) - "

#{input}

" - end - - def link_to(name, url) - %|#{name}| - end - -end - -class OutputTest < Test::Unit::TestCase - include Liquid - - def setup - @assigns = { - 'best_cars' => 'bmw', - 'car' => {'bmw' => 'good', 'gm' => 'bad'} - } - end - - def test_variable - text = %| {{best_cars}} | - - expected = %| bmw | - assert_equal expected, Template.parse(text).render(@assigns) - end - - def test_variable_traversing - text = %| {{car.bmw}} {{car.gm}} {{car.bmw}} | - - expected = %| good bad good | - assert_equal expected, Template.parse(text).render(@assigns) - end - - def test_variable_piping - text = %( {{ car.gm | make_funny }} ) - expected = %| LOL | - - assert_equal expected, Template.parse(text).render(@assigns, :filters => [FunnyFilter]) - end - - def test_variable_piping_with_input - text = %( {{ car.gm | cite_funny }} ) - expected = %| LOL: bad | - - assert_equal expected, Template.parse(text).render(@assigns, :filters => [FunnyFilter]) - end - - def test_variable_piping_with_args - text = %! {{ car.gm | add_smiley : ':-(' }} ! - expected = %| bad :-( | - - assert_equal expected, Template.parse(text).render(@assigns, :filters => [FunnyFilter]) - end - - def test_variable_piping_with_no_args - text = %! {{ car.gm | add_smiley }} ! - expected = %| bad :-) | - - assert_equal expected, Template.parse(text).render(@assigns, :filters => [FunnyFilter]) - end - - def test_multiple_variable_piping_with_args - text = %! {{ car.gm | add_smiley : ':-(' | add_smiley : ':-('}} ! - expected = %| bad :-( :-( | - - assert_equal expected, Template.parse(text).render(@assigns, :filters => [FunnyFilter]) - end - - def test_variable_piping_with_args - text = %! {{ car.gm | add_tag : 'span', 'bar'}} ! - expected = %| bad | - - assert_equal expected, Template.parse(text).render(@assigns, :filters => [FunnyFilter]) - end - - def test_variable_piping_with_variable_args - text = %! {{ car.gm | add_tag : 'span', car.bmw}} ! - expected = %| bad | - - assert_equal expected, Template.parse(text).render(@assigns, :filters => [FunnyFilter]) - end - - def test_multiple_pipings - text = %( {{ best_cars | cite_funny | paragraph }} ) - expected = %|

LOL: bmw

| - - assert_equal expected, Template.parse(text).render(@assigns, :filters => [FunnyFilter]) - end - - def test_link_to - text = %( {{ 'Typo' | link_to: 'http://typo.leetsoft.com' }} ) - expected = %| Typo | - - assert_equal expected, Template.parse(text).render(@assigns, :filters => [FunnyFilter]) - end -end # OutputTest diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/parsing_quirks_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/parsing_quirks_test.rb deleted file mode 100644 index f5c4426..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/parsing_quirks_test.rb +++ /dev/null @@ -1,52 +0,0 @@ -require 'test_helper' - -class ParsingQuirksTest < Test::Unit::TestCase - include Liquid - - def test_error_with_css - text = %| div { font-weight: bold; } | - template = Template.parse(text) - - assert_equal text, template.render - assert_equal [String], template.root.nodelist.collect {|i| i.class} - end - - def test_raise_on_single_close_bracet - assert_raise(SyntaxError) do - Template.parse("text {{method} oh nos!") - end - end - - def test_raise_on_label_and_no_close_bracets - assert_raise(SyntaxError) do - Template.parse("TEST {{ ") - end - end - - def test_raise_on_label_and_no_close_bracets_percent - assert_raise(SyntaxError) do - Template.parse("TEST {% ") - end - end - - def test_error_on_empty_filter - assert_nothing_raised do - Template.parse("{{test |a|b|}}") - Template.parse("{{test}}") - Template.parse("{{|test|}}") - end - end - - def test_meaningless_parens - assigns = {'b' => 'bar', 'c' => 'baz'} - markup = "a == 'foo' or (b == 'bar' and c == 'baz') or false" - assert_template_result(' YES ',"{% if #{markup} %} YES {% endif %}", assigns) - end - - def test_unexpected_characters_silently_eat_logic - markup = "true && false" - assert_template_result(' YES ',"{% if #{markup} %} YES {% endif %}") - markup = "false || true" - assert_template_result('',"{% if #{markup} %} YES {% endif %}") - end -end # ParsingQuirksTest diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/regexp_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/regexp_test.rb deleted file mode 100644 index 280d62b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/regexp_test.rb +++ /dev/null @@ -1,44 +0,0 @@ -require 'test_helper' - -class RegexpTest < Test::Unit::TestCase - include Liquid - - def test_empty - assert_equal [], ''.scan(QuotedFragment) - end - - def test_quote - assert_equal ['"arg 1"'], '"arg 1"'.scan(QuotedFragment) - end - - def test_words - assert_equal ['arg1', 'arg2'], 'arg1 arg2'.scan(QuotedFragment) - end - - def test_tags - assert_equal ['', ''], ' '.scan(QuotedFragment) - assert_equal [''], ''.scan(QuotedFragment) - assert_equal ['', ''], %||.scan(QuotedFragment) - end - - def test_quoted_words - assert_equal ['arg1', 'arg2', '"arg 3"'], 'arg1 arg2 "arg 3"'.scan(QuotedFragment) - end - - def test_quoted_words - assert_equal ['arg1', 'arg2', "'arg 3'"], 'arg1 arg2 \'arg 3\''.scan(QuotedFragment) - end - - def test_quoted_words_in_the_middle - assert_equal ['arg1', 'arg2', '"arg 3"', 'arg4'], 'arg1 arg2 "arg 3" arg4 '.scan(QuotedFragment) - end - - def test_variable_parser - assert_equal ['var'], 'var'.scan(VariableParser) - assert_equal ['var', 'method'], 'var.method'.scan(VariableParser) - assert_equal ['var', '[method]'], 'var[method]'.scan(VariableParser) - assert_equal ['var', '[method]', '[0]'], 'var[method][0]'.scan(VariableParser) - assert_equal ['var', '["method"]', '[0]'], 'var["method"][0]'.scan(VariableParser) - assert_equal ['var', '[method]', '[0]', 'method'], 'var[method][0].method'.scan(VariableParser) - end -end # RegexpTest diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/security_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/security_test.rb deleted file mode 100644 index 0e9ac33..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/security_test.rb +++ /dev/null @@ -1,64 +0,0 @@ -require 'test_helper' - -module SecurityFilter - def add_one(input) - "#{input} + 1" - end -end - -class SecurityTest < Test::Unit::TestCase - include Liquid - - def test_no_instance_eval - text = %( {{ '1+1' | instance_eval }} ) - expected = %| 1+1 | - - assert_equal expected, Template.parse(text).render(@assigns) - end - - def test_no_existing_instance_eval - text = %( {{ '1+1' | __instance_eval__ }} ) - expected = %| 1+1 | - - assert_equal expected, Template.parse(text).render(@assigns) - end - - - def test_no_instance_eval_after_mixing_in_new_filter - text = %( {{ '1+1' | instance_eval }} ) - expected = %| 1+1 | - - assert_equal expected, Template.parse(text).render(@assigns) - end - - - def test_no_instance_eval_later_in_chain - text = %( {{ '1+1' | add_one | instance_eval }} ) - expected = %| 1+1 + 1 | - - assert_equal expected, Template.parse(text).render(@assigns, :filters => SecurityFilter) - end - - def test_does_not_add_filters_to_symbol_table - current_symbols = Symbol.all_symbols - - test = %( {{ "some_string" | a_bad_filter }} ) - - template = Template.parse(test) - assert_equal [], (Symbol.all_symbols - current_symbols) - - template.render - assert_equal [], (Symbol.all_symbols - current_symbols) - end - - def test_does_not_add_drop_methods_to_symbol_table - current_symbols = Symbol.all_symbols - - drop = Drop.new - drop.invoke_drop("custom_method_1") - drop.invoke_drop("custom_method_2") - drop.invoke_drop("custom_method_3") - - assert_equal [], (Symbol.all_symbols - current_symbols) - end -end # SecurityTest diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/standard_filter_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/standard_filter_test.rb deleted file mode 100644 index a034c50..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/standard_filter_test.rb +++ /dev/null @@ -1,251 +0,0 @@ -# encoding: utf-8 - -require 'test_helper' - -class Filters - include Liquid::StandardFilters -end - -class TestThing - def initialize - @foo = 0 - end - - def to_s - "woot: #{@foo}" - end - - def to_liquid - @foo += 1 - self - end -end - -class TestDrop < Liquid::Drop - def test - "testfoo" - end -end - -class StandardFiltersTest < Test::Unit::TestCase - include Liquid - - def setup - @filters = Filters.new - end - - def test_size - assert_equal 3, @filters.size([1,2,3]) - assert_equal 0, @filters.size([]) - assert_equal 0, @filters.size(nil) - end - - def test_downcase - assert_equal 'testing', @filters.downcase("Testing") - assert_equal '', @filters.downcase(nil) - end - - def test_upcase - assert_equal 'TESTING', @filters.upcase("Testing") - assert_equal '', @filters.upcase(nil) - end - - def test_upcase - assert_equal 'TESTING', @filters.upcase("Testing") - assert_equal '', @filters.upcase(nil) - end - - def test_truncate - assert_equal '1234...', @filters.truncate('1234567890', 7) - assert_equal '1234567890', @filters.truncate('1234567890', 20) - assert_equal '...', @filters.truncate('1234567890', 0) - assert_equal '1234567890', @filters.truncate('1234567890') - assert_equal "测试...", @filters.truncate("测试测试测试测试", 5) - end - - def test_strip - assert_equal ['12','34'], @filters.split('12~34', '~') - assert_equal ['A? ',' ,Z'], @filters.split('A? ~ ~ ~ ,Z', '~ ~ ~') - assert_equal ['A?Z'], @filters.split('A?Z', '~') - # Regexp works although Liquid does not support. - assert_equal ['A','Z'], @filters.split('AxZ', /x/) - end - - def test_escape - assert_equal '<strong>', @filters.escape('') - assert_equal '<strong>', @filters.h('') - end - - def test_escape_once - assert_equal '<strong>', @filters.escape_once(@filters.escape('')) - end - - def test_truncatewords - assert_equal 'one two three', @filters.truncatewords('one two three', 4) - assert_equal 'one two...', @filters.truncatewords('one two three', 2) - assert_equal 'one two three', @filters.truncatewords('one two three') - assert_equal 'Two small (13” x 5.5” x 10” high) baskets fit inside one large basket (13”...', @filters.truncatewords('Two small (13” x 5.5” x 10” high) baskets fit inside one large basket (13” x 16” x 10.5” high) with cover.', 15) - assert_equal "测试测试测试测试", @filters.truncatewords('测试测试测试测试', 5) - end - - def test_strip_html - assert_equal 'test', @filters.strip_html("
test
") - assert_equal 'test', @filters.strip_html("
test
") - assert_equal '', @filters.strip_html("") - assert_equal '', @filters.strip_html("") - assert_equal 'test', @filters.strip_html("test
") - assert_equal 'test', @filters.strip_html("test") - assert_equal '', @filters.strip_html(nil) - end - - def test_join - assert_equal '1 2 3 4', @filters.join([1,2,3,4]) - assert_equal '1 - 2 - 3 - 4', @filters.join([1,2,3,4], ' - ') - end - - def test_sort - assert_equal [1,2,3,4], @filters.sort([4,3,2,1]) - assert_equal [{"a" => 1}, {"a" => 2}, {"a" => 3}, {"a" => 4}], @filters.sort([{"a" => 4}, {"a" => 3}, {"a" => 1}, {"a" => 2}], "a") - end - - def test_reverse - assert_equal [4,3,2,1], @filters.reverse([1,2,3,4]) - end - - def test_map - assert_equal [1,2,3,4], @filters.map([{"a" => 1}, {"a" => 2}, {"a" => 3}, {"a" => 4}], 'a') - assert_template_result 'abc', "{{ ary | map:'foo' | map:'bar' }}", - 'ary' => [{'foo' => {'bar' => 'a'}}, {'foo' => {'bar' => 'b'}}, {'foo' => {'bar' => 'c'}}] - end - - def test_map_doesnt_call_arbitrary_stuff - assert_equal "", Liquid::Template.parse('{{ "foo" | map: "__id__" }}').render - assert_equal "", Liquid::Template.parse('{{ "foo" | map: "inspect" }}').render - end - - def test_map_calls_to_liquid - t = TestThing.new - assert_equal "woot: 1", Liquid::Template.parse('{{ foo }}').render("foo" => t) - end - - def test_map_over_proc - drop = TestDrop.new - p = Proc.new{ drop } - templ = '{{ procs | map: "test" }}' - assert_equal "testfoo", Liquid::Template.parse(templ).render("procs" => [p]) - end - - def test_date - assert_equal 'May', @filters.date(Time.parse("2006-05-05 10:00:00"), "%B") - assert_equal 'June', @filters.date(Time.parse("2006-06-05 10:00:00"), "%B") - assert_equal 'July', @filters.date(Time.parse("2006-07-05 10:00:00"), "%B") - - assert_equal 'May', @filters.date("2006-05-05 10:00:00", "%B") - assert_equal 'June', @filters.date("2006-06-05 10:00:00", "%B") - assert_equal 'July', @filters.date("2006-07-05 10:00:00", "%B") - - assert_equal '2006-07-05 10:00:00', @filters.date("2006-07-05 10:00:00", "") - assert_equal '2006-07-05 10:00:00', @filters.date("2006-07-05 10:00:00", "") - assert_equal '2006-07-05 10:00:00', @filters.date("2006-07-05 10:00:00", "") - assert_equal '2006-07-05 10:00:00', @filters.date("2006-07-05 10:00:00", nil) - - assert_equal '07/05/2006', @filters.date("2006-07-05 10:00:00", "%m/%d/%Y") - - assert_equal "07/16/2004", @filters.date("Fri Jul 16 01:00:00 2004", "%m/%d/%Y") - assert_equal "#{Date.today.year}", @filters.date('now', '%Y') - assert_equal "#{Date.today.year}", @filters.date('today', '%Y') - - assert_equal nil, @filters.date(nil, "%B") - - assert_equal "07/05/2006", @filters.date(1152098955, "%m/%d/%Y") - assert_equal "07/05/2006", @filters.date("1152098955", "%m/%d/%Y") - end - - - def test_first_last - assert_equal 1, @filters.first([1,2,3]) - assert_equal 3, @filters.last([1,2,3]) - assert_equal nil, @filters.first([]) - assert_equal nil, @filters.last([]) - end - - def test_replace - assert_equal '2 2 2 2', @filters.replace('1 1 1 1', '1', 2) - assert_equal '2 1 1 1', @filters.replace_first('1 1 1 1', '1', 2) - assert_template_result '2 1 1 1', "{{ '1 1 1 1' | replace_first: '1', 2 }}" - end - - def test_remove - assert_equal ' ', @filters.remove("a a a a", 'a') - assert_equal 'a a a', @filters.remove_first("a a a a", 'a ') - assert_template_result 'a a a', "{{ 'a a a a' | remove_first: 'a ' }}" - end - - def test_pipes_in_string_arguments - assert_template_result 'foobar', "{{ 'foo|bar' | remove: '|' }}" - end - - def test_strip_newlines - assert_template_result 'abc', "{{ source | strip_newlines }}", 'source' => "a\nb\nc" - assert_template_result 'abc', "{{ source | strip_newlines }}", 'source' => "a\r\nb\nc" - end - - def test_newlines_to_br - assert_template_result "a
\nb
\nc", "{{ source | newline_to_br }}", 'source' => "a\nb\nc" - end - - def test_plus - assert_template_result "2", "{{ 1 | plus:1 }}" - assert_template_result "2.0", "{{ '1' | plus:'1.0' }}" - end - - def test_minus - assert_template_result "4", "{{ input | minus:operand }}", 'input' => 5, 'operand' => 1 - assert_template_result "2.3", "{{ '4.3' | minus:'2' }}" - end - - def test_times - assert_template_result "12", "{{ 3 | times:4 }}" - assert_template_result "0", "{{ 'foo' | times:4 }}" - - # Ruby v1.9.2-rc1, or higher, backwards compatible Float test - assert_match(/(6\.3)|(6\.(0{13})1)/, Template.parse("{{ '2.1' | times:3 }}").render) - - assert_template_result "6", "{{ '2.1' | times:3 | replace: '.','-' | plus:0}}" - - assert_template_result "7.25", "{{ 0.0725 | times:100 }}" - end - - def test_divided_by - assert_template_result "4", "{{ 12 | divided_by:3 }}" - assert_template_result "4", "{{ 14 | divided_by:3 }}" - - # Ruby v1.9.2-rc1, or higher, backwards compatible Float test - assert_match(/4\.(6{13,14})7/, Template.parse("{{ 14 | divided_by:'3.0' }}").render) - - assert_template_result "5", "{{ 15 | divided_by:3 }}" - assert_template_result "Liquid error: divided by 0", "{{ 5 | divided_by:0 }}" - - assert_template_result "0.5", "{{ 2.0 | divided_by:4 }}" - end - - def test_modulo - assert_template_result "1", "{{ 3 | modulo:2 }}" - end - - def test_append - assigns = {'a' => 'bc', 'b' => 'd' } - assert_template_result('bcd',"{{ a | append: 'd'}}",assigns) - assert_template_result('bcd',"{{ a | append: b}}",assigns) - end - - def test_prepend - assigns = {'a' => 'bc', 'b' => 'a' } - assert_template_result('abc',"{{ a | prepend: 'a'}}",assigns) - assert_template_result('abc',"{{ a | prepend: b}}",assigns) - end - - def test_cannot_access_private_methods - assert_template_result('a',"{{ 'a' | to_number }}") - end -end # StandardFiltersTest diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/strainer_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/strainer_test.rb deleted file mode 100644 index 582ed7f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/strainer_test.rb +++ /dev/null @@ -1,52 +0,0 @@ -require 'test_helper' - -class StrainerTest < Test::Unit::TestCase - include Liquid - - module AccessScopeFilters - def public_filter - "public" - end - - def private_filter - "private" - end - private :private_filter - end - - Strainer.global_filter(AccessScopeFilters) - - def test_strainer - strainer = Strainer.create(nil) - assert_equal 5, strainer.invoke('size', 'input') - assert_equal "public", strainer.invoke("public_filter") - end - - def test_strainer_only_invokes_public_filter_methods - strainer = Strainer.create(nil) - assert_equal false, strainer.invokable?('__test__') - assert_equal false, strainer.invokable?('test') - assert_equal false, strainer.invokable?('instance_eval') - assert_equal false, strainer.invokable?('__send__') - assert_equal true, strainer.invokable?('size') # from the standard lib - end - - def test_strainer_returns_nil_if_no_filter_method_found - strainer = Strainer.create(nil) - assert_nil strainer.invoke("private_filter") - assert_nil strainer.invoke("undef_the_filter") - end - - def test_strainer_returns_first_argument_if_no_method_and_arguments_given - strainer = Strainer.create(nil) - assert_equal "password", strainer.invoke("undef_the_method", "password") - end - - def test_strainer_only_allows_methods_defined_in_filters - strainer = Strainer.create(nil) - assert_equal "1 + 1", strainer.invoke("instance_eval", "1 + 1") - assert_equal "puts", strainer.invoke("__send__", "puts", "Hi Mom") - assert_equal "has_method?", strainer.invoke("invoke", "has_method?", "invoke") - end - -end # StrainerTest diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/break_tag_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/break_tag_test.rb deleted file mode 100644 index cbe3095..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/break_tag_test.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'test_helper' - -class BreakTagTest < Test::Unit::TestCase - include Liquid - - # tests that no weird errors are raised if break is called outside of a - # block - def test_break_with_no_block - assigns = {'i' => 1} - markup = '{% break %}' - expected = '' - - assert_template_result(expected, markup, assigns) - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/continue_tag_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/continue_tag_test.rb deleted file mode 100644 index 5825a23..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/continue_tag_test.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'test_helper' - -class ContinueTagTest < Test::Unit::TestCase - include Liquid - - # tests that no weird errors are raised if continue is called outside of a - # block - def test_continue_with_no_block - assigns = {} - markup = '{% continue %}' - expected = '' - - assert_template_result(expected, markup, assigns) - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/for_tag_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/for_tag_test.rb deleted file mode 100644 index 9186d3f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/for_tag_test.rb +++ /dev/null @@ -1,297 +0,0 @@ -require 'test_helper' - -class ForTagTest < Test::Unit::TestCase - include Liquid - - def test_for - assert_template_result(' yo yo yo yo ','{%for item in array%} yo {%endfor%}','array' => [1,2,3,4]) - assert_template_result('yoyo','{%for item in array%}yo{%endfor%}','array' => [1,2]) - assert_template_result(' yo ','{%for item in array%} yo {%endfor%}','array' => [1]) - assert_template_result('','{%for item in array%}{%endfor%}','array' => [1,2]) - expected = < [1,2,3]) - end - - def test_for_reversed - assigns = {'array' => [ 1, 2, 3] } - assert_template_result('321','{%for item in array reversed %}{{item}}{%endfor%}',assigns) - end - - def test_for_with_range - assert_template_result(' 1 2 3 ','{%for item in (1..3) %} {{item}} {%endfor%}') - end - - def test_for_with_variable - assert_template_result(' 1 2 3 ','{%for item in array%} {{item}} {%endfor%}','array' => [1,2,3]) - assert_template_result('123','{%for item in array%}{{item}}{%endfor%}','array' => [1,2,3]) - assert_template_result('123','{% for item in array %}{{item}}{% endfor %}','array' => [1,2,3]) - assert_template_result('abcd','{%for item in array%}{{item}}{%endfor%}','array' => ['a','b','c','d']) - assert_template_result('a b c','{%for item in array%}{{item}}{%endfor%}','array' => ['a',' ','b',' ','c']) - assert_template_result('abc','{%for item in array%}{{item}}{%endfor%}','array' => ['a','','b','','c']) - end - - def test_for_helpers - assigns = {'array' => [1,2,3] } - assert_template_result(' 1/3 2/3 3/3 ', - '{%for item in array%} {{forloop.index}}/{{forloop.length}} {%endfor%}', - assigns) - assert_template_result(' 1 2 3 ', '{%for item in array%} {{forloop.index}} {%endfor%}', assigns) - assert_template_result(' 0 1 2 ', '{%for item in array%} {{forloop.index0}} {%endfor%}', assigns) - assert_template_result(' 2 1 0 ', '{%for item in array%} {{forloop.rindex0}} {%endfor%}', assigns) - assert_template_result(' 3 2 1 ', '{%for item in array%} {{forloop.rindex}} {%endfor%}', assigns) - assert_template_result(' true false false ', '{%for item in array%} {{forloop.first}} {%endfor%}', assigns) - assert_template_result(' false false true ', '{%for item in array%} {{forloop.last}} {%endfor%}', assigns) - end - - def test_for_and_if - assigns = {'array' => [1,2,3] } - assert_template_result('+--', - '{%for item in array%}{% if forloop.first %}+{% else %}-{% endif %}{%endfor%}', - assigns) - end - - def test_for_else - assert_template_result('+++', '{%for item in array%}+{%else%}-{%endfor%}', 'array'=>[1,2,3]) - assert_template_result('-', '{%for item in array%}+{%else%}-{%endfor%}', 'array'=>[]) - assert_template_result('-', '{%for item in array%}+{%else%}-{%endfor%}', 'array'=>nil) - end - - def test_limiting - assigns = {'array' => [1,2,3,4,5,6,7,8,9,0]} - assert_template_result('12', '{%for i in array limit:2 %}{{ i }}{%endfor%}', assigns) - assert_template_result('1234', '{%for i in array limit:4 %}{{ i }}{%endfor%}', assigns) - assert_template_result('3456', '{%for i in array limit:4 offset:2 %}{{ i }}{%endfor%}', assigns) - assert_template_result('3456', '{%for i in array limit: 4 offset: 2 %}{{ i }}{%endfor%}', assigns) - end - - def test_dynamic_variable_limiting - assigns = {'array' => [1,2,3,4,5,6,7,8,9,0]} - assigns['limit'] = 2 - assigns['offset'] = 2 - - assert_template_result('34', '{%for i in array limit: limit offset: offset %}{{ i }}{%endfor%}', assigns) - end - - def test_nested_for - assigns = {'array' => [[1,2],[3,4],[5,6]] } - assert_template_result('123456', '{%for item in array%}{%for i in item%}{{ i }}{%endfor%}{%endfor%}', assigns) - end - - def test_offset_only - assigns = {'array' => [1,2,3,4,5,6,7,8,9,0]} - assert_template_result('890', '{%for i in array offset:7 %}{{ i }}{%endfor%}', assigns) - end - - def test_pause_resume - assigns = {'array' => {'items' => [1,2,3,4,5,6,7,8,9,0]}} - markup = <<-MKUP - {%for i in array.items limit: 3 %}{{i}}{%endfor%} - next - {%for i in array.items offset:continue limit: 3 %}{{i}}{%endfor%} - next - {%for i in array.items offset:continue limit: 3 %}{{i}}{%endfor%} - MKUP - expected = <<-XPCTD - 123 - next - 456 - next - 789 - XPCTD - assert_template_result(expected,markup,assigns) - end - - def test_pause_resume_limit - assigns = {'array' => {'items' => [1,2,3,4,5,6,7,8,9,0]}} - markup = <<-MKUP - {%for i in array.items limit:3 %}{{i}}{%endfor%} - next - {%for i in array.items offset:continue limit:3 %}{{i}}{%endfor%} - next - {%for i in array.items offset:continue limit:1 %}{{i}}{%endfor%} - MKUP - expected = <<-XPCTD - 123 - next - 456 - next - 7 - XPCTD - assert_template_result(expected,markup,assigns) - end - - def test_pause_resume_BIG_limit - assigns = {'array' => {'items' => [1,2,3,4,5,6,7,8,9,0]}} - markup = <<-MKUP - {%for i in array.items limit:3 %}{{i}}{%endfor%} - next - {%for i in array.items offset:continue limit:3 %}{{i}}{%endfor%} - next - {%for i in array.items offset:continue limit:1000 %}{{i}}{%endfor%} - MKUP - expected = <<-XPCTD - 123 - next - 456 - next - 7890 - XPCTD - assert_template_result(expected,markup,assigns) - end - - - def test_pause_resume_BIG_offset - assigns = {'array' => {'items' => [1,2,3,4,5,6,7,8,9,0]}} - markup = %q({%for i in array.items limit:3 %}{{i}}{%endfor%} - next - {%for i in array.items offset:continue limit:3 %}{{i}}{%endfor%} - next - {%for i in array.items offset:continue limit:3 offset:1000 %}{{i}}{%endfor%}) - expected = %q(123 - next - 456 - next - ) - assert_template_result(expected,markup,assigns) - end - - def test_for_with_break - assigns = {'array' => {'items' => [1,2,3,4,5,6,7,8,9,10]}} - - markup = '{% for i in array.items %}{% break %}{% endfor %}' - expected = "" - assert_template_result(expected,markup,assigns) - - markup = '{% for i in array.items %}{{ i }}{% break %}{% endfor %}' - expected = "1" - assert_template_result(expected,markup,assigns) - - markup = '{% for i in array.items %}{% break %}{{ i }}{% endfor %}' - expected = "" - assert_template_result(expected,markup,assigns) - - markup = '{% for i in array.items %}{{ i }}{% if i > 3 %}{% break %}{% endif %}{% endfor %}' - expected = "1234" - assert_template_result(expected,markup,assigns) - - # tests to ensure it only breaks out of the local for loop - # and not all of them. - assigns = {'array' => [[1,2],[3,4],[5,6]] } - markup = '{% for item in array %}' + - '{% for i in item %}' + - '{% if i == 1 %}' + - '{% break %}' + - '{% endif %}' + - '{{ i }}' + - '{% endfor %}' + - '{% endfor %}' - expected = '3456' - assert_template_result(expected, markup, assigns) - - # test break does nothing when unreached - assigns = {'array' => {'items' => [1,2,3,4,5]}} - markup = '{% for i in array.items %}{% if i == 9999 %}{% break %}{% endif %}{{ i }}{% endfor %}' - expected = '12345' - assert_template_result(expected, markup, assigns) - end - - def test_for_with_continue - assigns = {'array' => {'items' => [1,2,3,4,5]}} - - markup = '{% for i in array.items %}{% continue %}{% endfor %}' - expected = "" - assert_template_result(expected,markup,assigns) - - markup = '{% for i in array.items %}{{ i }}{% continue %}{% endfor %}' - expected = "12345" - assert_template_result(expected,markup,assigns) - - markup = '{% for i in array.items %}{% continue %}{{ i }}{% endfor %}' - expected = "" - assert_template_result(expected,markup,assigns) - - markup = '{% for i in array.items %}{% if i > 3 %}{% continue %}{% endif %}{{ i }}{% endfor %}' - expected = "123" - assert_template_result(expected,markup,assigns) - - markup = '{% for i in array.items %}{% if i == 3 %}{% continue %}{% else %}{{ i }}{% endif %}{% endfor %}' - expected = "1245" - assert_template_result(expected,markup,assigns) - - # tests to ensure it only continues the local for loop and not all of them. - assigns = {'array' => [[1,2],[3,4],[5,6]] } - markup = '{% for item in array %}' + - '{% for i in item %}' + - '{% if i == 1 %}' + - '{% continue %}' + - '{% endif %}' + - '{{ i }}' + - '{% endfor %}' + - '{% endfor %}' - expected = '23456' - assert_template_result(expected, markup, assigns) - - # test continue does nothing when unreached - assigns = {'array' => {'items' => [1,2,3,4,5]}} - markup = '{% for i in array.items %}{% if i == 9999 %}{% continue %}{% endif %}{{ i }}{% endfor %}' - expected = '12345' - assert_template_result(expected, markup, assigns) - end - - def test_for_tag_string - # ruby 1.8.7 "String".each => Enumerator with single "String" element. - # ruby 1.9.3 no longer supports .each on String though we mimic - # the functionality for backwards compatibility - - assert_template_result('test string', - '{%for val in string%}{{val}}{%endfor%}', - 'string' => "test string") - - assert_template_result('test string', - '{%for val in string limit:1%}{{val}}{%endfor%}', - 'string' => "test string") - - assert_template_result('val-string-1-1-0-1-0-true-true-test string', - '{%for val in string%}' + - '{{forloop.name}}-' + - '{{forloop.index}}-' + - '{{forloop.length}}-' + - '{{forloop.index0}}-' + - '{{forloop.rindex}}-' + - '{{forloop.rindex0}}-' + - '{{forloop.first}}-' + - '{{forloop.last}}-' + - '{{val}}{%endfor%}', - 'string' => "test string") - end - - def test_blank_string_not_iterable - assert_template_result('', "{% for char in characters %}I WILL NOT BE OUTPUT{% endfor %}", 'characters' => '') - end - - def test_bad_variable_naming_in_for_loop - assert_raise(Liquid::SyntaxError) do - Liquid::Template.parse('{% for a/b in x %}{% endfor %}') - end - end - - def test_spacing_with_variable_naming_in_for_loop - expected = '12345' - template = '{% for item in items %}{{item}}{% endfor %}' - assigns = {'items' => [1,2,3,4,5]} - assert_template_result(expected, template, assigns) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/html_tag_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/html_tag_test.rb deleted file mode 100644 index d7252a1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/html_tag_test.rb +++ /dev/null @@ -1,63 +0,0 @@ -require 'test_helper' - -class HtmlTagTest < Test::Unit::TestCase - include Liquid - - class ArrayDrop < Liquid::Drop - include Enumerable - - def initialize(array) - @array = array - end - - def each(&block) - @array.each(&block) - end - end - - def test_html_table - - assert_template_result("\n 1 2 3 \n 4 5 6 \n", - '{% tablerow n in numbers cols:3%} {{n}} {% endtablerow %}', - 'numbers' => [1,2,3,4,5,6]) - - assert_template_result("\n\n", - '{% tablerow n in numbers cols:3%} {{n}} {% endtablerow %}', - 'numbers' => []) - end - - def test_html_table_with_different_cols - assert_template_result("\n 1 2 3 4 5 \n 6 \n", - '{% tablerow n in numbers cols:5%} {{n}} {% endtablerow %}', - 'numbers' => [1,2,3,4,5,6]) - - end - - def test_html_col_counter - assert_template_result("\n12\n12\n12\n", - '{% tablerow n in numbers cols:2%}{{tablerowloop.col}}{% endtablerow %}', - 'numbers' => [1,2,3,4,5,6]) - end - - def test_quoted_fragment - assert_template_result("\n 1 2 3 \n 4 5 6 \n", - "{% tablerow n in collections.frontpage cols:3%} {{n}} {% endtablerow %}", - 'collections' => {'frontpage' => [1,2,3,4,5,6]}) - assert_template_result("\n 1 2 3 \n 4 5 6 \n", - "{% tablerow n in collections['frontpage'] cols:3%} {{n}} {% endtablerow %}", - 'collections' => {'frontpage' => [1,2,3,4,5,6]}) - - end - - def test_enumerable_drop - assert_template_result("\n 1 2 3 \n 4 5 6 \n", - '{% tablerow n in numbers cols:3%} {{n}} {% endtablerow %}', - 'numbers' => ArrayDrop.new([1,2,3,4,5,6])) - end - - def test_offset_and_limit - assert_template_result("\n 1 2 3 \n 4 5 6 \n", - '{% tablerow n in numbers cols:3 offset:1 limit:6%} {{n}} {% endtablerow %}', - 'numbers' => [0,1,2,3,4,5,6,7]) - end -end # HtmlTagTest diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/if_else_tag_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/if_else_tag_test.rb deleted file mode 100644 index 19869fb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/if_else_tag_test.rb +++ /dev/null @@ -1,166 +0,0 @@ -require 'test_helper' - -class IfElseTagTest < Test::Unit::TestCase - include Liquid - - def test_if - assert_template_result(' ',' {% if false %} this text should not go into the output {% endif %} ') - assert_template_result(' this text should go into the output ', - ' {% if true %} this text should go into the output {% endif %} ') - assert_template_result(' you rock ?','{% if false %} you suck {% endif %} {% if true %} you rock {% endif %}?') - end - - def test_if_else - assert_template_result(' YES ','{% if false %} NO {% else %} YES {% endif %}') - assert_template_result(' YES ','{% if true %} YES {% else %} NO {% endif %}') - assert_template_result(' YES ','{% if "foo" %} YES {% else %} NO {% endif %}') - end - - def test_if_boolean - assert_template_result(' YES ','{% if var %} YES {% endif %}', 'var' => true) - end - - def test_if_or - assert_template_result(' YES ','{% if a or b %} YES {% endif %}', 'a' => true, 'b' => true) - assert_template_result(' YES ','{% if a or b %} YES {% endif %}', 'a' => true, 'b' => false) - assert_template_result(' YES ','{% if a or b %} YES {% endif %}', 'a' => false, 'b' => true) - assert_template_result('', '{% if a or b %} YES {% endif %}', 'a' => false, 'b' => false) - - assert_template_result(' YES ','{% if a or b or c %} YES {% endif %}', 'a' => false, 'b' => false, 'c' => true) - assert_template_result('', '{% if a or b or c %} YES {% endif %}', 'a' => false, 'b' => false, 'c' => false) - end - - def test_if_or_with_operators - assert_template_result(' YES ','{% if a == true or b == true %} YES {% endif %}', 'a' => true, 'b' => true) - assert_template_result(' YES ','{% if a == true or b == false %} YES {% endif %}', 'a' => true, 'b' => true) - assert_template_result('','{% if a == false or b == false %} YES {% endif %}', 'a' => true, 'b' => true) - end - - def test_comparison_of_strings_containing_and_or_or - assert_nothing_raised do - awful_markup = "a == 'and' and b == 'or' and c == 'foo and bar' and d == 'bar or baz' and e == 'foo' and foo and bar" - assigns = {'a' => 'and', 'b' => 'or', 'c' => 'foo and bar', 'd' => 'bar or baz', 'e' => 'foo', 'foo' => true, 'bar' => true} - assert_template_result(' YES ',"{% if #{awful_markup} %} YES {% endif %}", assigns) - end - end - - def test_comparison_of_expressions_starting_with_and_or_or - assigns = {'order' => {'items_count' => 0}, 'android' => {'name' => 'Roy'}} - assert_nothing_raised do - assert_template_result( "YES", - "{% if android.name == 'Roy' %}YES{% endif %}", - assigns) - end - assert_nothing_raised do - assert_template_result( "YES", - "{% if order.items_count == 0 %}YES{% endif %}", - assigns) - end - end - - def test_if_and - assert_template_result(' YES ','{% if true and true %} YES {% endif %}') - assert_template_result('','{% if false and true %} YES {% endif %}') - assert_template_result('','{% if false and true %} YES {% endif %}') - end - - - def test_hash_miss_generates_false - assert_template_result('','{% if foo.bar %} NO {% endif %}', 'foo' => {}) - end - - def test_if_from_variable - assert_template_result('','{% if var %} NO {% endif %}', 'var' => false) - assert_template_result('','{% if var %} NO {% endif %}', 'var' => nil) - assert_template_result('','{% if foo.bar %} NO {% endif %}', 'foo' => {'bar' => false}) - assert_template_result('','{% if foo.bar %} NO {% endif %}', 'foo' => {}) - assert_template_result('','{% if foo.bar %} NO {% endif %}', 'foo' => nil) - assert_template_result('','{% if foo.bar %} NO {% endif %}', 'foo' => true) - - assert_template_result(' YES ','{% if var %} YES {% endif %}', 'var' => "text") - assert_template_result(' YES ','{% if var %} YES {% endif %}', 'var' => true) - assert_template_result(' YES ','{% if var %} YES {% endif %}', 'var' => 1) - assert_template_result(' YES ','{% if var %} YES {% endif %}', 'var' => {}) - assert_template_result(' YES ','{% if var %} YES {% endif %}', 'var' => []) - assert_template_result(' YES ','{% if "foo" %} YES {% endif %}') - assert_template_result(' YES ','{% if foo.bar %} YES {% endif %}', 'foo' => {'bar' => true}) - assert_template_result(' YES ','{% if foo.bar %} YES {% endif %}', 'foo' => {'bar' => "text"}) - assert_template_result(' YES ','{% if foo.bar %} YES {% endif %}', 'foo' => {'bar' => 1 }) - assert_template_result(' YES ','{% if foo.bar %} YES {% endif %}', 'foo' => {'bar' => {} }) - assert_template_result(' YES ','{% if foo.bar %} YES {% endif %}', 'foo' => {'bar' => [] }) - - assert_template_result(' YES ','{% if var %} NO {% else %} YES {% endif %}', 'var' => false) - assert_template_result(' YES ','{% if var %} NO {% else %} YES {% endif %}', 'var' => nil) - assert_template_result(' YES ','{% if var %} YES {% else %} NO {% endif %}', 'var' => true) - assert_template_result(' YES ','{% if "foo" %} YES {% else %} NO {% endif %}', 'var' => "text") - - assert_template_result(' YES ','{% if foo.bar %} NO {% else %} YES {% endif %}', 'foo' => {'bar' => false}) - assert_template_result(' YES ','{% if foo.bar %} YES {% else %} NO {% endif %}', 'foo' => {'bar' => true}) - assert_template_result(' YES ','{% if foo.bar %} YES {% else %} NO {% endif %}', 'foo' => {'bar' => "text"}) - assert_template_result(' YES ','{% if foo.bar %} NO {% else %} YES {% endif %}', 'foo' => {'notbar' => true}) - assert_template_result(' YES ','{% if foo.bar %} NO {% else %} YES {% endif %}', 'foo' => {}) - assert_template_result(' YES ','{% if foo.bar %} NO {% else %} YES {% endif %}', 'notfoo' => {'bar' => true}) - end - - def test_nested_if - assert_template_result('', '{% if false %}{% if false %} NO {% endif %}{% endif %}') - assert_template_result('', '{% if false %}{% if true %} NO {% endif %}{% endif %}') - assert_template_result('', '{% if true %}{% if false %} NO {% endif %}{% endif %}') - assert_template_result(' YES ', '{% if true %}{% if true %} YES {% endif %}{% endif %}') - - assert_template_result(' YES ', '{% if true %}{% if true %} YES {% else %} NO {% endif %}{% else %} NO {% endif %}') - assert_template_result(' YES ', '{% if true %}{% if false %} NO {% else %} YES {% endif %}{% else %} NO {% endif %}') - assert_template_result(' YES ', '{% if false %}{% if true %} NO {% else %} NONO {% endif %}{% else %} YES {% endif %}') - - end - - def test_comparisons_on_null - assert_template_result('','{% if null < 10 %} NO {% endif %}') - assert_template_result('','{% if null <= 10 %} NO {% endif %}') - assert_template_result('','{% if null >= 10 %} NO {% endif %}') - assert_template_result('','{% if null > 10 %} NO {% endif %}') - - assert_template_result('','{% if 10 < null %} NO {% endif %}') - assert_template_result('','{% if 10 <= null %} NO {% endif %}') - assert_template_result('','{% if 10 >= null %} NO {% endif %}') - assert_template_result('','{% if 10 > null %} NO {% endif %}') - end - - def test_else_if - assert_template_result('0','{% if 0 == 0 %}0{% elsif 1 == 1%}1{% else %}2{% endif %}') - assert_template_result('1','{% if 0 != 0 %}0{% elsif 1 == 1%}1{% else %}2{% endif %}') - assert_template_result('2','{% if 0 != 0 %}0{% elsif 1 != 1%}1{% else %}2{% endif %}') - - assert_template_result('elsif','{% if false %}if{% elsif true %}elsif{% endif %}') - end - - def test_syntax_error_no_variable - assert_raise(SyntaxError){ assert_template_result('', '{% if jerry == 1 %}')} - end - - def test_syntax_error_no_expression - assert_raise(SyntaxError) { assert_template_result('', '{% if %}') } - end - - def test_if_with_custom_condition - Condition.operators['contains'] = :[] - - assert_template_result('yes', %({% if 'bob' contains 'o' %}yes{% endif %})) - assert_template_result('no', %({% if 'bob' contains 'f' %}yes{% else %}no{% endif %})) - ensure - Condition.operators.delete 'contains' - end - - def test_operators_are_ignored_unless_isolated - Condition.operators['contains'] = :[] - - assert_template_result('yes', - %({% if 'gnomeslab-and-or-liquid' contains 'gnomeslab-and-or-liquid' %}yes{% endif %})) - end - - def test_operators_are_whitelisted - assert_raise(SyntaxError) do - assert_template_result('', %({% if 1 or throw or or 1 %}yes{% endif %})) - end - end -end # IfElseTest diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/include_tag_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/include_tag_test.rb deleted file mode 100644 index 8bdb19c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/include_tag_test.rb +++ /dev/null @@ -1,166 +0,0 @@ -require 'test_helper' - -class TestFileSystem - def read_template_file(template_path, context) - case template_path - when "product" - "Product: {{ product.title }} " - - when "locale_variables" - "Locale: {{echo1}} {{echo2}}" - - when "variant" - "Variant: {{ variant.title }}" - - when "nested_template" - "{% include 'header' %} {% include 'body' %} {% include 'footer' %}" - - when "body" - "body {% include 'body_detail' %}" - - when "nested_product_template" - "Product: {{ nested_product_template.title }} {%include 'details'%} " - - when "recursively_nested_template" - "-{% include 'recursively_nested_template' %}" - - when "pick_a_source" - "from TestFileSystem" - - else - template_path - end - end -end - -class OtherFileSystem - def read_template_file(template_path, context) - 'from OtherFileSystem' - end -end - -class CountingFileSystem - attr_reader :count - def read_template_file(template_path, context) - @count ||= 0 - @count += 1 - 'from CountingFileSystem' - end -end - -class IncludeTagTest < Test::Unit::TestCase - include Liquid - - def setup - Liquid::Template.file_system = TestFileSystem.new - end - - def test_include_tag_looks_for_file_system_in_registers_first - assert_equal 'from OtherFileSystem', - Template.parse("{% include 'pick_a_source' %}").render({}, :registers => {:file_system => OtherFileSystem.new}) - end - - - def test_include_tag_with - assert_equal "Product: Draft 151cm ", - Template.parse("{% include 'product' with products[0] %}").render( "products" => [ {'title' => 'Draft 151cm'}, {'title' => 'Element 155cm'} ] ) - end - - def test_include_tag_with_default_name - assert_equal "Product: Draft 151cm ", - Template.parse("{% include 'product' %}").render( "product" => {'title' => 'Draft 151cm'} ) - end - - def test_include_tag_for - - assert_equal "Product: Draft 151cm Product: Element 155cm ", - Template.parse("{% include 'product' for products %}").render( "products" => [ {'title' => 'Draft 151cm'}, {'title' => 'Element 155cm'} ] ) - end - - def test_include_tag_with_local_variables - assert_equal "Locale: test123 ", - Template.parse("{% include 'locale_variables' echo1: 'test123' %}").render - end - - def test_include_tag_with_multiple_local_variables - assert_equal "Locale: test123 test321", - Template.parse("{% include 'locale_variables' echo1: 'test123', echo2: 'test321' %}").render - end - - def test_include_tag_with_multiple_local_variables_from_context - assert_equal "Locale: test123 test321", - Template.parse("{% include 'locale_variables' echo1: echo1, echo2: more_echos.echo2 %}").render('echo1' => 'test123', 'more_echos' => { "echo2" => 'test321'}) - end - - def test_nested_include_tag - assert_equal "body body_detail", - Template.parse("{% include 'body' %}").render - - assert_equal "header body body_detail footer", - Template.parse("{% include 'nested_template' %}").render - end - - def test_nested_include_with_variable - - assert_equal "Product: Draft 151cm details ", - Template.parse("{% include 'nested_product_template' with product %}").render("product" => {"title" => 'Draft 151cm'}) - - assert_equal "Product: Draft 151cm details Product: Element 155cm details ", - Template.parse("{% include 'nested_product_template' for products %}").render("products" => [{"title" => 'Draft 151cm'}, {"title" => 'Element 155cm'}]) - - end - - def test_recursively_included_template_does_not_produce_endless_loop - - infinite_file_system = Class.new do - def read_template_file(template_path, context) - "-{% include 'loop' %}" - end - end - - Liquid::Template.file_system = infinite_file_system.new - - assert_raise(Liquid::StackLevelError) do - Template.parse("{% include 'loop' %}").render! - end - - end - - def test_backwards_compatability_support_for_overridden_read_template_file - infinite_file_system = Class.new do - def read_template_file(template_path) # testing only one argument here. - "- hi mom" - end - end - - Liquid::Template.file_system = infinite_file_system.new - - Template.parse("{% include 'hi_mom' %}").render! - end - - def test_dynamically_choosen_template - - assert_equal "Test123", Template.parse("{% include template %}").render("template" => 'Test123') - assert_equal "Test321", Template.parse("{% include template %}").render("template" => 'Test321') - - assert_equal "Product: Draft 151cm ", Template.parse("{% include template for product %}").render("template" => 'product', 'product' => { 'title' => 'Draft 151cm'}) - end - - def test_include_tag_caches_second_read_of_same_partial - file_system = CountingFileSystem.new - assert_equal 'from CountingFileSystemfrom CountingFileSystem', - Template.parse("{% include 'pick_a_source' %}{% include 'pick_a_source' %}").render({}, :registers => {:file_system => file_system}) - assert_equal 1, file_system.count - end - - def test_include_tag_doesnt_cache_partials_across_renders - file_system = CountingFileSystem.new - assert_equal 'from CountingFileSystem', - Template.parse("{% include 'pick_a_source' %}").render({}, :registers => {:file_system => file_system}) - assert_equal 1, file_system.count - - assert_equal 'from CountingFileSystem', - Template.parse("{% include 'pick_a_source' %}").render({}, :registers => {:file_system => file_system}) - assert_equal 2, file_system.count - end -end # IncludeTagTest diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/increment_tag_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/increment_tag_test.rb deleted file mode 100644 index 6c673ff..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/increment_tag_test.rb +++ /dev/null @@ -1,24 +0,0 @@ -require 'test_helper' - -class IncrementTagTest < Test::Unit::TestCase - include Liquid - - def test_inc - assert_template_result('0','{%increment port %}', {}) - assert_template_result('0 1','{%increment port %} {%increment port%}', {}) - assert_template_result('0 0 1 2 1', - '{%increment port %} {%increment starboard%} ' + - '{%increment port %} {%increment port%} ' + - '{%increment starboard %}', {}) - end - - def test_dec - assert_template_result('9','{%decrement port %}', { 'port' => 10}) - assert_template_result('-1 -2','{%decrement port %} {%decrement port%}', {}) - assert_template_result('1 5 2 2 5', - '{%increment port %} {%increment starboard%} ' + - '{%increment port %} {%decrement port%} ' + - '{%decrement starboard %}', { 'port' => 1, 'starboard' => 5 }) - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/raw_tag_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/raw_tag_test.rb deleted file mode 100644 index 4323bc7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/raw_tag_test.rb +++ /dev/null @@ -1,24 +0,0 @@ -require 'test_helper' - -class RawTagTest < Test::Unit::TestCase - include Liquid - - def test_tag_in_raw - assert_template_result '{% comment %} test {% endcomment %}', - '{% raw %}{% comment %} test {% endcomment %}{% endraw %}' - end - - def test_output_in_raw - assert_template_result '{{ test }}', '{% raw %}{{ test }}{% endraw %}' - end - - def test_open_tag_in_raw - assert_template_result ' Foobar {% invalid ', '{% raw %} Foobar {% invalid {% endraw %}' - assert_template_result ' Foobar invalid %} ', '{% raw %} Foobar invalid %} {% endraw %}' - assert_template_result ' Foobar {{ invalid ', '{% raw %} Foobar {{ invalid {% endraw %}' - assert_template_result ' Foobar invalid }} ', '{% raw %} Foobar invalid }} {% endraw %}' - assert_template_result ' Foobar {% invalid {% {% endraw ', '{% raw %} Foobar {% invalid {% {% endraw {% endraw %}' - assert_template_result ' Foobar {% {% {% ', '{% raw %} Foobar {% {% {% {% endraw %}' - assert_template_result ' test {% raw %} {% endraw %}', '{% raw %} test {% raw %} {% {% endraw %}endraw %}' - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/standard_tag_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/standard_tag_test.rb deleted file mode 100644 index 4d8bdd3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/standard_tag_test.rb +++ /dev/null @@ -1,295 +0,0 @@ -require 'test_helper' - -class StandardTagTest < Test::Unit::TestCase - include Liquid - - def test_tag - tag = Tag.new('tag', [], []) - assert_equal 'liquid::tag', tag.name - assert_equal '', tag.render(Context.new) - end - - def test_no_transform - assert_template_result('this text should come out of the template without change...', - 'this text should come out of the template without change...') - - assert_template_result('blah','blah') - assert_template_result('','') - assert_template_result('|,.:','|,.:') - assert_template_result('','') - - text = %|this shouldnt see any transformation either but has multiple lines - as you can clearly see here ...| - assert_template_result(text,text) - end - - def test_has_a_block_which_does_nothing - assert_template_result(%|the comment block should be removed .. right?|, - %|the comment block should be removed {%comment%} be gone.. {%endcomment%} .. right?|) - - assert_template_result('','{%comment%}{%endcomment%}') - assert_template_result('','{%comment%}{% endcomment %}') - assert_template_result('','{% comment %}{%endcomment%}') - assert_template_result('','{% comment %}{% endcomment %}') - assert_template_result('','{%comment%}comment{%endcomment%}') - assert_template_result('','{% comment %}comment{% endcomment %}') - - assert_template_result('foobar','foo{%comment%}comment{%endcomment%}bar') - assert_template_result('foobar','foo{% comment %}comment{% endcomment %}bar') - assert_template_result('foobar','foo{%comment%} comment {%endcomment%}bar') - assert_template_result('foobar','foo{% comment %} comment {% endcomment %}bar') - - assert_template_result('foo bar','foo {%comment%} {%endcomment%} bar') - assert_template_result('foo bar','foo {%comment%}comment{%endcomment%} bar') - assert_template_result('foo bar','foo {%comment%} comment {%endcomment%} bar') - - assert_template_result('foobar','foo{%comment%} - {%endcomment%}bar') - end - - def test_assign - assigns = {'var' => 'content' } - assert_template_result('var2: var2:content', 'var2:{{var2}} {%assign var2 = var%} var2:{{var2}}', assigns) - - end - - def test_hyphenated_assign - assigns = {'a-b' => '1' } - assert_template_result('a-b:1 a-b:2', 'a-b:{{a-b}} {%assign a-b = 2 %}a-b:{{a-b}}', assigns) - - end - - def test_assign_with_colon_and_spaces - assigns = {'var' => {'a:b c' => {'paged' => '1' }}} - assert_template_result('var2: 1', '{%assign var2 = var["a:b c"].paged %}var2: {{var2}}', assigns) - end - - def test_capture - assigns = {'var' => 'content' } - assert_template_result('content foo content foo ', - '{{ var2 }}{% capture var2 %}{{ var }} foo {% endcapture %}{{ var2 }}{{ var2 }}', - assigns) - end - - def test_capture_detects_bad_syntax - assert_raise(SyntaxError) do - assert_template_result('content foo content foo ', - '{{ var2 }}{% capture %}{{ var }} foo {% endcapture %}{{ var2 }}{{ var2 }}', - {'var' => 'content' }) - end - end - - def test_case - assigns = {'condition' => 2 } - assert_template_result(' its 2 ', - '{% case condition %}{% when 1 %} its 1 {% when 2 %} its 2 {% endcase %}', - assigns) - - assigns = {'condition' => 1 } - assert_template_result(' its 1 ', - '{% case condition %}{% when 1 %} its 1 {% when 2 %} its 2 {% endcase %}', - assigns) - - assigns = {'condition' => 3 } - assert_template_result('', - '{% case condition %}{% when 1 %} its 1 {% when 2 %} its 2 {% endcase %}', - assigns) - - assigns = {'condition' => "string here" } - assert_template_result(' hit ', - '{% case condition %}{% when "string here" %} hit {% endcase %}', - assigns) - - assigns = {'condition' => "bad string here" } - assert_template_result('', - '{% case condition %}{% when "string here" %} hit {% endcase %}',\ - assigns) - end - - def test_case_with_else - assigns = {'condition' => 5 } - assert_template_result(' hit ', - '{% case condition %}{% when 5 %} hit {% else %} else {% endcase %}', - assigns) - - assigns = {'condition' => 6 } - assert_template_result(' else ', - '{% case condition %}{% when 5 %} hit {% else %} else {% endcase %}', - assigns) - - assigns = {'condition' => 6 } - assert_template_result(' else ', - '{% case condition %} {% when 5 %} hit {% else %} else {% endcase %}', - assigns) - end - - def test_case_on_size - assert_template_result('', '{% case a.size %}{% when 1 %}1{% when 2 %}2{% endcase %}', 'a' => []) - assert_template_result('1', '{% case a.size %}{% when 1 %}1{% when 2 %}2{% endcase %}', 'a' => [1]) - assert_template_result('2', '{% case a.size %}{% when 1 %}1{% when 2 %}2{% endcase %}', 'a' => [1, 1]) - assert_template_result('', '{% case a.size %}{% when 1 %}1{% when 2 %}2{% endcase %}', 'a' => [1, 1, 1]) - assert_template_result('', '{% case a.size %}{% when 1 %}1{% when 2 %}2{% endcase %}', 'a' => [1, 1, 1, 1]) - assert_template_result('', '{% case a.size %}{% when 1 %}1{% when 2 %}2{% endcase %}', 'a' => [1, 1, 1, 1, 1]) - end - - def test_case_on_size_with_else - assert_template_result('else', - '{% case a.size %}{% when 1 %}1{% when 2 %}2{% else %}else{% endcase %}', - 'a' => []) - - assert_template_result('1', - '{% case a.size %}{% when 1 %}1{% when 2 %}2{% else %}else{% endcase %}', - 'a' => [1]) - - assert_template_result('2', - '{% case a.size %}{% when 1 %}1{% when 2 %}2{% else %}else{% endcase %}', - 'a' => [1, 1]) - - assert_template_result('else', - '{% case a.size %}{% when 1 %}1{% when 2 %}2{% else %}else{% endcase %}', - 'a' => [1, 1, 1]) - - assert_template_result('else', - '{% case a.size %}{% when 1 %}1{% when 2 %}2{% else %}else{% endcase %}', - 'a' => [1, 1, 1, 1]) - - assert_template_result('else', - '{% case a.size %}{% when 1 %}1{% when 2 %}2{% else %}else{% endcase %}', - 'a' => [1, 1, 1, 1, 1]) - end - - def test_case_on_length_with_else - assert_template_result('else', - '{% case a.empty? %}{% when true %}true{% when false %}false{% else %}else{% endcase %}', - {}) - - assert_template_result('false', - '{% case false %}{% when true %}true{% when false %}false{% else %}else{% endcase %}', - {}) - - assert_template_result('true', - '{% case true %}{% when true %}true{% when false %}false{% else %}else{% endcase %}', - {}) - - assert_template_result('else', - '{% case NULL %}{% when true %}true{% when false %}false{% else %}else{% endcase %}', - {}) - end - - def test_assign_from_case - # Example from the shopify forums - code = %q({% case collection.handle %}{% when 'menswear-jackets' %}{% assign ptitle = 'menswear' %}{% when 'menswear-t-shirts' %}{% assign ptitle = 'menswear' %}{% else %}{% assign ptitle = 'womenswear' %}{% endcase %}{{ ptitle }}) - template = Liquid::Template.parse(code) - assert_equal "menswear", template.render("collection" => {'handle' => 'menswear-jackets'}) - assert_equal "menswear", template.render("collection" => {'handle' => 'menswear-t-shirts'}) - assert_equal "womenswear", template.render("collection" => {'handle' => 'x'}) - assert_equal "womenswear", template.render("collection" => {'handle' => 'y'}) - assert_equal "womenswear", template.render("collection" => {'handle' => 'z'}) - end - - def test_case_when_or - code = '{% case condition %}{% when 1 or 2 or 3 %} its 1 or 2 or 3 {% when 4 %} its 4 {% endcase %}' - assert_template_result(' its 1 or 2 or 3 ', code, {'condition' => 1 }) - assert_template_result(' its 1 or 2 or 3 ', code, {'condition' => 2 }) - assert_template_result(' its 1 or 2 or 3 ', code, {'condition' => 3 }) - assert_template_result(' its 4 ', code, {'condition' => 4 }) - assert_template_result('', code, {'condition' => 5 }) - - code = '{% case condition %}{% when 1 or "string" or null %} its 1 or 2 or 3 {% when 4 %} its 4 {% endcase %}' - assert_template_result(' its 1 or 2 or 3 ', code, {'condition' => 1 }) - assert_template_result(' its 1 or 2 or 3 ', code, {'condition' => 'string' }) - assert_template_result(' its 1 or 2 or 3 ', code, {'condition' => nil }) - assert_template_result('', code, {'condition' => 'something else' }) - end - - def test_case_when_comma - code = '{% case condition %}{% when 1, 2, 3 %} its 1 or 2 or 3 {% when 4 %} its 4 {% endcase %}' - assert_template_result(' its 1 or 2 or 3 ', code, {'condition' => 1 }) - assert_template_result(' its 1 or 2 or 3 ', code, {'condition' => 2 }) - assert_template_result(' its 1 or 2 or 3 ', code, {'condition' => 3 }) - assert_template_result(' its 4 ', code, {'condition' => 4 }) - assert_template_result('', code, {'condition' => 5 }) - - code = '{% case condition %}{% when 1, "string", null %} its 1 or 2 or 3 {% when 4 %} its 4 {% endcase %}' - assert_template_result(' its 1 or 2 or 3 ', code, {'condition' => 1 }) - assert_template_result(' its 1 or 2 or 3 ', code, {'condition' => 'string' }) - assert_template_result(' its 1 or 2 or 3 ', code, {'condition' => nil }) - assert_template_result('', code, {'condition' => 'something else' }) - end - - def test_assign - assert_equal 'variable', Liquid::Template.parse( '{% assign a = "variable"%}{{a}}' ).render - end - - def test_assign_an_empty_string - assert_equal '', Liquid::Template.parse( '{% assign a = ""%}{{a}}' ).render - end - - def test_assign_is_global - assert_equal 'variable', - Liquid::Template.parse( '{%for i in (1..2) %}{% assign a = "variable"%}{% endfor %}{{a}}' ).render - end - - def test_case_detects_bad_syntax - assert_raise(SyntaxError) do - assert_template_result('', '{% case false %}{% when %}true{% endcase %}', {}) - end - - assert_raise(SyntaxError) do - assert_template_result('', '{% case false %}{% huh %}true{% endcase %}', {}) - end - - end - - def test_cycle - assert_template_result('one','{%cycle "one", "two"%}') - assert_template_result('one two','{%cycle "one", "two"%} {%cycle "one", "two"%}') - assert_template_result(' two','{%cycle "", "two"%} {%cycle "", "two"%}') - - assert_template_result('one two one','{%cycle "one", "two"%} {%cycle "one", "two"%} {%cycle "one", "two"%}') - - assert_template_result('text-align: left text-align: right', - '{%cycle "text-align: left", "text-align: right" %} {%cycle "text-align: left", "text-align: right"%}') - end - - def test_multiple_cycles - assert_template_result('1 2 1 1 2 3 1', - '{%cycle 1,2%} {%cycle 1,2%} {%cycle 1,2%} {%cycle 1,2,3%} {%cycle 1,2,3%} {%cycle 1,2,3%} {%cycle 1,2,3%}') - end - - def test_multiple_named_cycles - assert_template_result('one one two two one one', - '{%cycle 1: "one", "two" %} {%cycle 2: "one", "two" %} {%cycle 1: "one", "two" %} {%cycle 2: "one", "two" %} {%cycle 1: "one", "two" %} {%cycle 2: "one", "two" %}') - end - - def test_multiple_named_cycles_with_names_from_context - assigns = {"var1" => 1, "var2" => 2 } - assert_template_result('one one two two one one', - '{%cycle var1: "one", "two" %} {%cycle var2: "one", "two" %} {%cycle var1: "one", "two" %} {%cycle var2: "one", "two" %} {%cycle var1: "one", "two" %} {%cycle var2: "one", "two" %}', assigns) - end - - def test_size_of_array - assigns = {"array" => [1,2,3,4]} - assert_template_result('array has 4 elements', "array has {{ array.size }} elements", assigns) - end - - def test_size_of_hash - assigns = {"hash" => {:a => 1, :b => 2, :c=> 3, :d => 4}} - assert_template_result('hash has 4 elements', "hash has {{ hash.size }} elements", assigns) - end - - def test_illegal_symbols - assert_template_result('', '{% if true == empty %}?{% endif %}', {}) - assert_template_result('', '{% if true == null %}?{% endif %}', {}) - assert_template_result('', '{% if empty == true %}?{% endif %}', {}) - assert_template_result('', '{% if null == true %}?{% endif %}', {}) - end - - def test_ifchanged - assigns = {'array' => [ 1, 1, 2, 2, 3, 3] } - assert_template_result('123','{%for item in array%}{%ifchanged%}{{item}}{% endifchanged %}{%endfor%}',assigns) - - assigns = {'array' => [ 1, 1, 1, 1] } - assert_template_result('1','{%for item in array%}{%ifchanged%}{{item}}{% endifchanged %}{%endfor%}',assigns) - end -end # StandardTagTest diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/statements_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/statements_test.rb deleted file mode 100644 index 5ab68cc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/statements_test.rb +++ /dev/null @@ -1,134 +0,0 @@ -require 'test_helper' - -class StatementsTest < Test::Unit::TestCase - include Liquid - - def test_true_eql_true - text = %| {% if true == true %} true {% else %} false {% endif %} | - expected = %| true | - assert_equal expected, Template.parse(text).render - end - - def test_true_not_eql_true - text = %| {% if true != true %} true {% else %} false {% endif %} | - expected = %| false | - assert_equal expected, Template.parse(text).render - end - - def test_true_lq_true - text = %| {% if 0 > 0 %} true {% else %} false {% endif %} | - expected = %| false | - assert_equal expected, Template.parse(text).render - end - - def test_one_lq_zero - text = %| {% if 1 > 0 %} true {% else %} false {% endif %} | - expected = %| true | - assert_equal expected, Template.parse(text).render - end - - def test_zero_lq_one - text = %| {% if 0 < 1 %} true {% else %} false {% endif %} | - expected = %| true | - assert_equal expected, Template.parse(text).render - end - - def test_zero_lq_or_equal_one - text = %| {% if 0 <= 0 %} true {% else %} false {% endif %} | - expected = %| true | - assert_equal expected, Template.parse(text).render - end - - def test_zero_lq_or_equal_one_involving_nil - text = %| {% if null <= 0 %} true {% else %} false {% endif %} | - expected = %| false | - assert_equal expected, Template.parse(text).render - - - text = %| {% if 0 <= null %} true {% else %} false {% endif %} | - expected = %| false | - assert_equal expected, Template.parse(text).render - end - - def test_zero_lqq_or_equal_one - text = %| {% if 0 >= 0 %} true {% else %} false {% endif %} | - expected = %| true | - assert_equal expected, Template.parse(text).render - end - - def test_strings - text = %| {% if 'test' == 'test' %} true {% else %} false {% endif %} | - expected = %| true | - assert_equal expected, Template.parse(text).render - end - - def test_strings_not_equal - text = %| {% if 'test' != 'test' %} true {% else %} false {% endif %} | - expected = %| false | - assert_equal expected, Template.parse(text).render - end - - def test_var_strings_equal - text = %| {% if var == "hello there!" %} true {% else %} false {% endif %} | - expected = %| true | - assert_equal expected, Template.parse(text).render('var' => 'hello there!') - end - - def test_var_strings_are_not_equal - text = %| {% if "hello there!" == var %} true {% else %} false {% endif %} | - expected = %| true | - assert_equal expected, Template.parse(text).render('var' => 'hello there!') - end - - def test_var_and_long_string_are_equal - text = %| {% if var == 'hello there!' %} true {% else %} false {% endif %} | - expected = %| true | - assert_equal expected, Template.parse(text).render('var' => 'hello there!') - end - - - def test_var_and_long_string_are_equal_backwards - text = %| {% if 'hello there!' == var %} true {% else %} false {% endif %} | - expected = %| true | - assert_equal expected, Template.parse(text).render('var' => 'hello there!') - end - - #def test_is_nil - # text = %| {% if var != nil %} true {% else %} false {% end %} | - # @template.assigns = { 'var' => 'hello there!'} - # expected = %| true | - # assert_equal expected, @template.parse(text) - #end - - def test_is_collection_empty - text = %| {% if array == empty %} true {% else %} false {% endif %} | - expected = %| true | - assert_equal expected, Template.parse(text).render('array' => []) - end - - def test_is_not_collection_empty - text = %| {% if array == empty %} true {% else %} false {% endif %} | - expected = %| false | - assert_equal expected, Template.parse(text).render('array' => [1,2,3]) - end - - def test_nil - text = %| {% if var == nil %} true {% else %} false {% endif %} | - expected = %| true | - assert_equal expected, Template.parse(text).render('var' => nil) - - text = %| {% if var == null %} true {% else %} false {% endif %} | - expected = %| true | - assert_equal expected, Template.parse(text).render('var' => nil) - end - - def test_not_nil - text = %| {% if var != nil %} true {% else %} false {% endif %} | - expected = %| true | - assert_equal expected, Template.parse(text).render('var' => 1 ) - - text = %| {% if var != null %} true {% else %} false {% endif %} | - expected = %| true | - assert_equal expected, Template.parse(text).render('var' => 1 ) - end -end # StatementsTest diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/unless_else_tag_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/unless_else_tag_test.rb deleted file mode 100644 index 352b6d6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/tags/unless_else_tag_test.rb +++ /dev/null @@ -1,26 +0,0 @@ -require 'test_helper' - -class UnlessElseTagTest < Test::Unit::TestCase - include Liquid - - def test_unless - assert_template_result(' ',' {% unless true %} this text should not go into the output {% endunless %} ') - assert_template_result(' this text should go into the output ', - ' {% unless false %} this text should go into the output {% endunless %} ') - assert_template_result(' you rock ?','{% unless true %} you suck {% endunless %} {% unless false %} you rock {% endunless %}?') - end - - def test_unless_else - assert_template_result(' YES ','{% unless true %} NO {% else %} YES {% endunless %}') - assert_template_result(' YES ','{% unless false %} YES {% else %} NO {% endunless %}') - assert_template_result(' YES ','{% unless "foo" %} NO {% else %} YES {% endunless %}') - end - - def test_unless_in_loop - assert_template_result '23', '{% for i in choices %}{% unless i %}{{ forloop.index }}{% endunless %}{% endfor %}', 'choices' => [1, nil, false] - end - - def test_unless_else_in_loop - assert_template_result ' TRUE 2 3 ', '{% for i in choices %}{% unless i %} {{ forloop.index }} {% else %} TRUE {% endunless %}{% endfor %}', 'choices' => [1, nil, false] - end -end # UnlessElseTest diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/template_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/template_test.rb deleted file mode 100644 index 04f1e50..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/template_test.rb +++ /dev/null @@ -1,146 +0,0 @@ -require 'test_helper' - -class TemplateContextDrop < Liquid::Drop - def before_method(method) - method - end - - def foo - 'fizzbuzz' - end - - def baz - @context.registers['lulz'] - end -end - -class TemplateTest < Test::Unit::TestCase - include Liquid - - def test_tokenize_strings - assert_equal [' '], Template.new.send(:tokenize, ' ') - assert_equal ['hello world'], Template.new.send(:tokenize, 'hello world') - end - - def test_tokenize_variables - assert_equal ['{{funk}}'], Template.new.send(:tokenize, '{{funk}}') - assert_equal [' ', '{{funk}}', ' '], Template.new.send(:tokenize, ' {{funk}} ') - assert_equal [' ', '{{funk}}', ' ', '{{so}}', ' ', '{{brother}}', ' '], Template.new.send(:tokenize, ' {{funk}} {{so}} {{brother}} ') - assert_equal [' ', '{{ funk }}', ' '], Template.new.send(:tokenize, ' {{ funk }} ') - end - - def test_tokenize_blocks - assert_equal ['{%comment%}'], Template.new.send(:tokenize, '{%comment%}') - assert_equal [' ', '{%comment%}', ' '], Template.new.send(:tokenize, ' {%comment%} ') - - assert_equal [' ', '{%comment%}', ' ', '{%endcomment%}', ' '], Template.new.send(:tokenize, ' {%comment%} {%endcomment%} ') - assert_equal [' ', '{% comment %}', ' ', '{% endcomment %}', ' '], Template.new.send(:tokenize, " {% comment %} {% endcomment %} ") - end - - def test_instance_assigns_persist_on_same_template_object_between_parses - t = Template.new - assert_equal 'from instance assigns', t.parse("{% assign foo = 'from instance assigns' %}{{ foo }}").render - assert_equal 'from instance assigns', t.parse("{{ foo }}").render - end - - def test_instance_assigns_persist_on_same_template_parsing_between_renders - t = Template.new.parse("{{ foo }}{% assign foo = 'foo' %}{{ foo }}") - assert_equal 'foo', t.render - assert_equal 'foofoo', t.render - end - - def test_custom_assigns_do_not_persist_on_same_template - t = Template.new - assert_equal 'from custom assigns', t.parse("{{ foo }}").render('foo' => 'from custom assigns') - assert_equal '', t.parse("{{ foo }}").render - end - - def test_custom_assigns_squash_instance_assigns - t = Template.new - assert_equal 'from instance assigns', t.parse("{% assign foo = 'from instance assigns' %}{{ foo }}").render - assert_equal 'from custom assigns', t.parse("{{ foo }}").render('foo' => 'from custom assigns') - end - - def test_persistent_assigns_squash_instance_assigns - t = Template.new - assert_equal 'from instance assigns', t.parse("{% assign foo = 'from instance assigns' %}{{ foo }}").render - t.assigns['foo'] = 'from persistent assigns' - assert_equal 'from persistent assigns', t.parse("{{ foo }}").render - end - - def test_lambda_is_called_once_from_persistent_assigns_over_multiple_parses_and_renders - t = Template.new - t.assigns['number'] = lambda { @global ||= 0; @global += 1 } - assert_equal '1', t.parse("{{number}}").render - assert_equal '1', t.parse("{{number}}").render - assert_equal '1', t.render - @global = nil - end - - def test_lambda_is_called_once_from_custom_assigns_over_multiple_parses_and_renders - t = Template.new - assigns = {'number' => lambda { @global ||= 0; @global += 1 }} - assert_equal '1', t.parse("{{number}}").render(assigns) - assert_equal '1', t.parse("{{number}}").render(assigns) - assert_equal '1', t.render(assigns) - @global = nil - end - - def test_resource_limits_render_length - t = Template.parse("0123456789") - t.resource_limits = { :render_length_limit => 5 } - assert_equal "Liquid error: Memory limits exceeded", t.render() - assert t.resource_limits[:reached] - t.resource_limits = { :render_length_limit => 10 } - assert_equal "0123456789", t.render() - assert_not_nil t.resource_limits[:render_length_current] - end - - def test_resource_limits_render_score - t = Template.parse("{% for a in (1..10) %} {% for a in (1..10) %} foo {% endfor %} {% endfor %}") - t.resource_limits = { :render_score_limit => 50 } - assert_equal "Liquid error: Memory limits exceeded", t.render() - assert t.resource_limits[:reached] - t = Template.parse("{% for a in (1..100) %} foo {% endfor %}") - t.resource_limits = { :render_score_limit => 50 } - assert_equal "Liquid error: Memory limits exceeded", t.render() - assert t.resource_limits[:reached] - t.resource_limits = { :render_score_limit => 200 } - assert_equal (" foo " * 100), t.render() - assert_not_nil t.resource_limits[:render_score_current] - end - - def test_resource_limits_assign_score - t = Template.parse("{% assign foo = 42 %}{% assign bar = 23 %}") - t.resource_limits = { :assign_score_limit => 1 } - assert_equal "Liquid error: Memory limits exceeded", t.render() - assert t.resource_limits[:reached] - t.resource_limits = { :assign_score_limit => 2 } - assert_equal "", t.render() - assert_not_nil t.resource_limits[:assign_score_current] - end - - def test_resource_limits_aborts_rendering_after_first_error - t = Template.parse("{% for a in (1..100) %} foo1 {% endfor %} bar {% for a in (1..100) %} foo2 {% endfor %}") - t.resource_limits = { :render_score_limit => 50 } - assert_equal "Liquid error: Memory limits exceeded", t.render() - assert t.resource_limits[:reached] - end - - def test_resource_limits_hash_in_template_gets_updated_even_if_no_limits_are_set - t = Template.parse("{% for a in (1..100) %} {% assign foo = 1 %} {% endfor %}") - t.render() - assert t.resource_limits[:assign_score_current] > 0 - assert t.resource_limits[:render_score_current] > 0 - assert t.resource_limits[:render_length_current] > 0 - end - - def test_can_use_drop_as_context - t = Template.new - t.registers['lulz'] = 'haha' - drop = TemplateContextDrop.new - assert_equal 'fizzbuzz', t.parse('{{foo}}').render(drop) - assert_equal 'bar', t.parse('{{bar}}').render(drop) - assert_equal 'haha', t.parse("{{baz}}").render(drop) - end -end # TemplateTest diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/variable_test.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/variable_test.rb deleted file mode 100644 index 7554e00..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/liquid/variable_test.rb +++ /dev/null @@ -1,186 +0,0 @@ -require 'test_helper' - -class VariableTest < Test::Unit::TestCase - include Liquid - - def test_variable - var = Variable.new('hello') - assert_equal 'hello', var.name - end - - def test_filters - var = Variable.new('hello | textileze') - assert_equal 'hello', var.name - assert_equal [["textileze",[]]], var.filters - - var = Variable.new('hello | textileze | paragraph') - assert_equal 'hello', var.name - assert_equal [["textileze",[]], ["paragraph",[]]], var.filters - - var = Variable.new(%! hello | strftime: '%Y'!) - assert_equal 'hello', var.name - assert_equal [["strftime",["'%Y'"]]], var.filters - - var = Variable.new(%! 'typo' | link_to: 'Typo', true !) - assert_equal %!'typo'!, var.name - assert_equal [["link_to",["'Typo'", "true"]]], var.filters - - var = Variable.new(%! 'typo' | link_to: 'Typo', false !) - assert_equal %!'typo'!, var.name - assert_equal [["link_to",["'Typo'", "false"]]], var.filters - - var = Variable.new(%! 'foo' | repeat: 3 !) - assert_equal %!'foo'!, var.name - assert_equal [["repeat",["3"]]], var.filters - - var = Variable.new(%! 'foo' | repeat: 3, 3 !) - assert_equal %!'foo'!, var.name - assert_equal [["repeat",["3","3"]]], var.filters - - var = Variable.new(%! 'foo' | repeat: 3, 3, 3 !) - assert_equal %!'foo'!, var.name - assert_equal [["repeat",["3","3","3"]]], var.filters - - var = Variable.new(%! hello | strftime: '%Y, okay?'!) - assert_equal 'hello', var.name - assert_equal [["strftime",["'%Y, okay?'"]]], var.filters - - var = Variable.new(%! hello | things: "%Y, okay?", 'the other one'!) - assert_equal 'hello', var.name - assert_equal [["things",["\"%Y, okay?\"","'the other one'"]]], var.filters - end - - def test_filter_with_date_parameter - - var = Variable.new(%! '2006-06-06' | date: "%m/%d/%Y"!) - assert_equal "'2006-06-06'", var.name - assert_equal [["date",["\"%m/%d/%Y\""]]], var.filters - - end - - def test_filters_without_whitespace - var = Variable.new('hello | textileze | paragraph') - assert_equal 'hello', var.name - assert_equal [["textileze",[]], ["paragraph",[]]], var.filters - - var = Variable.new('hello|textileze|paragraph') - assert_equal 'hello', var.name - assert_equal [["textileze",[]], ["paragraph",[]]], var.filters - - var = Variable.new("hello|replace:'foo','bar'|textileze") - assert_equal 'hello', var.name - assert_equal [["replace", ["'foo'", "'bar'"]], ["textileze", []]], var.filters - end - - def test_symbol - var = Variable.new("http://disney.com/logo.gif | image: 'med' ") - assert_equal 'http://disney.com/logo.gif', var.name - assert_equal [["image",["'med'"]]], var.filters - end - - def test_string_single_quoted - var = Variable.new(%| "hello" |) - assert_equal '"hello"', var.name - end - - def test_string_double_quoted - var = Variable.new(%| 'hello' |) - assert_equal "'hello'", var.name - end - - def test_integer - var = Variable.new(%| 1000 |) - assert_equal "1000", var.name - end - - def test_float - var = Variable.new(%| 1000.01 |) - assert_equal "1000.01", var.name - end - - def test_string_with_special_chars - var = Variable.new(%| 'hello! $!@.;"ddasd" ' |) - assert_equal %|'hello! $!@.;"ddasd" '|, var.name - end - - def test_string_dot - var = Variable.new(%| test.test |) - assert_equal 'test.test', var.name - end - - def test_filter_with_keyword_arguments - var = Variable.new(%! hello | things: greeting: "world", farewell: 'goodbye'!) - assert_equal 'hello', var.name - assert_equal [['things',["greeting: \"world\"","farewell: 'goodbye'"]]], var.filters - end - - def test_lax_filter_argument_parsing - var = Variable.new(%! number_of_comments | pluralize: 'comment': 'comments' !) - assert_equal 'number_of_comments', var.name - assert_equal [['pluralize',["'comment'","'comments'"]]], var.filters - end -end - - -class VariableResolutionTest < Test::Unit::TestCase - include Liquid - - def test_simple_variable - template = Template.parse(%|{{test}}|) - assert_equal 'worked', template.render('test' => 'worked') - assert_equal 'worked wonderfully', template.render('test' => 'worked wonderfully') - end - - def test_simple_with_whitespaces - template = Template.parse(%| {{ test }} |) - assert_equal ' worked ', template.render('test' => 'worked') - assert_equal ' worked wonderfully ', template.render('test' => 'worked wonderfully') - end - - def test_ignore_unknown - template = Template.parse(%|{{ test }}|) - assert_equal '', template.render - end - - def test_hash_scoping - template = Template.parse(%|{{ test.test }}|) - assert_equal 'worked', template.render('test' => {'test' => 'worked'}) - end - - def test_preset_assigns - template = Template.parse(%|{{ test }}|) - template.assigns['test'] = 'worked' - assert_equal 'worked', template.render - end - - def test_reuse_parsed_template - template = Template.parse(%|{{ greeting }} {{ name }}|) - template.assigns['greeting'] = 'Goodbye' - assert_equal 'Hello Tobi', template.render('greeting' => 'Hello', 'name' => 'Tobi') - assert_equal 'Hello ', template.render('greeting' => 'Hello', 'unknown' => 'Tobi') - assert_equal 'Hello Brian', template.render('greeting' => 'Hello', 'name' => 'Brian') - assert_equal 'Goodbye Brian', template.render('name' => 'Brian') - assert_equal({'greeting'=>'Goodbye'}, template.assigns) - end - - def test_assigns_not_polluted_from_template - template = Template.parse(%|{{ test }}{% assign test = 'bar' %}{{ test }}|) - template.assigns['test'] = 'baz' - assert_equal 'bazbar', template.render - assert_equal 'bazbar', template.render - assert_equal 'foobar', template.render('test' => 'foo') - assert_equal 'bazbar', template.render - end - - def test_hash_with_default_proc - template = Template.parse(%|Hello {{ test }}|) - assigns = Hash.new { |h,k| raise "Unknown variable '#{k}'" } - assigns['test'] = 'Tobi' - assert_equal 'Hello Tobi', template.render!(assigns) - assigns.delete('test') - e = assert_raises(RuntimeError) { - template.render!(assigns) - } - assert_equal "Unknown variable 'test'", e.message - end -end # VariableTest diff --git a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/test_helper.rb b/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/test_helper.rb deleted file mode 100644 index 30dd9a1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/liquid-2.6.2/test/test_helper.rb +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env ruby - -require 'test/unit' -require 'test/unit/assertions' -begin - require 'ruby-debug' -rescue LoadError - puts "Couldn't load ruby-debug. gem install ruby-debug if you need it." -end -require File.join(File.dirname(__FILE__), '..', 'lib', 'liquid') - - -module Test - module Unit - module Assertions - include Liquid - - def assert_template_result(expected, template, assigns = {}, message = nil) - assert_equal expected, Template.parse(template).render(assigns) - end - - def assert_template_result_matches(expected, template, assigns = {}, message = nil) - return assert_template_result(expected, template, assigns, message) unless expected.is_a? Regexp - - assert_match expected, Template.parse(template).render(assigns) - end - end # Assertions - end # Unit -end # Test diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/CHANGELOG.md b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/CHANGELOG.md deleted file mode 100644 index 232adbd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/CHANGELOG.md +++ /dev/null @@ -1 +0,0 @@ -# Moved to [GitHub releases](https://github.com/guard/listen/releases) page. diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/CONTRIBUTING.md b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/CONTRIBUTING.md deleted file mode 100644 index 5a5d6de..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/CONTRIBUTING.md +++ /dev/null @@ -1,38 +0,0 @@ -Contribute to Listen -=================== - -File an issue -------------- - -If you haven't already, first see [TROUBLESHOOTING](https://github.com/guard/listen/wiki/Troubleshooting) for known issues, solutions and workarounds. - -You can report bugs and feature requests to [GitHub Issues](https://github.com/guard/listen/issues). - -**Please don't ask question in the issue tracker**, instead ask them in our -[Google group](http://groups.google.com/group/guard-dev) or on `#guard` (irc.freenode.net). - -Try to figure out where the issue belongs to: Is it an issue with Listen itself or with Guard? - - -**It's most likely that your bug gets resolved faster if you provide as much information as possible!** - -The MOST useful information is debugging output from Listen (`LISTEN_GEM_DEBUGGING=1`) - see [TROUBLESHOOTING](https://github.com/guard/listen/wiki/Troubleshooting) for details. - - -Development ------------ - -* Documentation hosted at [RubyDoc](http://rubydoc.info/github/guard/listen/master/frames). -* Source hosted at [GitHub](https://github.com/guard/listen). - -Pull requests are very welcome! Please try to follow these simple rules if applicable: - -* Please create a topic branch for every separate change you make. -* Make sure your patches are well tested. All specs run with `rake spec` must pass. -* Update the [Yard](http://yardoc.org/) documentation. -* Update the [README](https://github.com/guard/listen/blob/master/README.md). -* Update the [CHANGELOG](https://github.com/guard/listen/blob/master/CHANGELOG.md) for noteworthy changes. -* Please **do not change** the version number. - -For questions please join us in our [Google group](http://groups.google.com/group/guard-dev) or on -`#guard` (irc.freenode.net). diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/LICENSE.txt b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/LICENSE.txt deleted file mode 100644 index b5f71c8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2013 Thibaud Guillaume-Gentil - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/README.md b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/README.md deleted file mode 100644 index 6b46908..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/README.md +++ /dev/null @@ -1,338 +0,0 @@ -### :warning: Listen is [looking for new maintainers](https://groups.google.com/forum/#!topic/guard-dev/2Td0QTvTIsE). Please [contact me](mailto:thibaud@thibaud.gg) if you're interested. - -# Listen - -[![Gem Version](https://badge.fury.io/rb/listen.png)](http://badge.fury.io/rb/listen) [![Build Status](https://travis-ci.org/guard/listen.png)](https://travis-ci.org/guard/listen) [![Dependency Status](https://gemnasium.com/guard/listen.png)](https://gemnasium.com/guard/listen) [![Code Climate](https://codeclimate.com/github/guard/listen.png)](https://codeclimate.com/github/guard/listen) [![Coverage Status](https://coveralls.io/repos/guard/listen/badge.png?branch=master)](https://coveralls.io/r/guard/listen) - -The Listen gem listens to file modifications and notifies you about the changes. - -## Known issues / Quickfixes / Workarounds - -Just head over here: https://github.com/guard/listen/wiki/Quickfixes,-known-issues-and-workarounds - -## Tips and Techniques - -Make sure you know these few basic tricks: https://github.com/guard/listen/wiki/Tips-and-Techniques - -## Features - -* OS-optimized adapters on MRI for Mac OS X 10.6+, Linux, \*BSD and Windows, [more info](#listen-adapters) below. -* Detects file modification, addition and removal. -* You can watch multiple directories. -* Regexp-patterns for ignoring paths for more accuracy and speed -* Forwarding file events over TCP, [more info](#forwarding-file-events-over-tcp) below. -* Increased change detection accuracy on OS X HFS and VFAT volumes. -* Tested on MRI Ruby environments (1.9+ only) via [Travis CI](https://travis-ci.org/guard/listen), - -Please note that: -- Some filesystems won't work without polling (VM/Vagrant Shared folders, NFS, Samba, sshfs, etc.) -- Specs suite on JRuby and Rubinius aren't reliable on Travis CI, but should work. -- Windows and \*BSD adapter aren't continuously and automaticaly tested. - -## Pending features / issues - -* symlinked directories aren't fully transparent yet: https://github.com/guard/listen/issues/279 -* Directory/adapter specific configuration options -* Support for plugins - -Pull request or help is very welcome for these. - -## Install - -The simplest way to install Listen is to use [Bundler](http://bundler.io). - -```ruby -gem 'listen', '~> 2.7' # this prevents upgrading to 3.x -``` - -## Usage - -Call `Listen.to` with either a single directory or multiple directories, then define the "changes" callback in a block. - -``` ruby -listener = Listen.to('dir/to/listen', 'dir/to/listen2') do |modified, added, removed| - puts "modified absolute path: #{modified}" - puts "added absolute path: #{added}" - puts "removed absolute path: #{removed}" -end -listener.start # not blocking -sleep -``` - -### Pause / unpause / stop - -Listeners can also be easily paused/unpaused: - -``` ruby -listener = Listen.to('dir/path/to/listen') { |modified, added, removed| # ... } - -listener.start -listener.paused? # => false -listener.processing? # => true - -listener.pause # stops processing changes (but keeps on collecting them) -listener.paused? # => true -listener.processing? # => false - -listener.unpause # resumes processing changes ("start" would do the same) -listener.stop # stop both listening to changes and processing them -``` - - Note: While paused, Listen keeps on collecting changes in the background - to clear them, call "stop" - - Note: You should keep track of all started listeners and stop them properly on finish. - -### Ignore / ignore! - -Listen ignores some directories and extensions by default (See DEFAULT_IGNORED_DIRECTORIES and DEFAULT_IGNORED_EXTENSIONS in Listen::Silencer), you can add ignoring patterns with the `ignore` option/method or overwrite default with `ignore!` option/method. - -``` ruby -listener = Listen.to('dir/path/to/listen', ignore: /\.txt/) { |modified, added, removed| # ... } -listener.start -listener.ignore! /\.pkg/ # overwrite all patterns and only ignore pkg extension. -listener.ignore /\.rb/ # ignore rb extension in addition of pkg. -sleep -``` - -Note: Ignoring regexp patterns are evaluated against relative paths. - -Note: ignoring paths does not improve performance - except when Polling - -### Only - -Listen catches all files (less the ignored once) by default, if you want to only listen to a specific type of file (ie: just rb extension) you should use the `only` option/method. - -``` ruby -listener = Listen.to('dir/path/to/listen', only: /\.rb$/) { |modified, added, removed| # ... } -listener.start -listener.only /_spec\.rb$/ # overwrite all existing only patterns. -sleep -``` - -Note: ':only' regexp patterns are evaluated only against relative **file** paths. - - -## Changes callback - -Changes to the listened-to directories gets reported back to the user in a callback. -The registered callback gets invoked, when there are changes, with **three** parameters: -`modified`, `added` and `removed` paths, in that particular order. -Paths are always returned in their absolute form. - -Example: - -```ruby -listener = Listen.to('path/to/app') do |modified, added, removed| - # This block will be called when there are changes. -end -listener.start -sleep -``` - -or ... - -```ruby -# Create a callback -callback = Proc.new do |modified, added, removed| - # This proc will be called when there are changes. -end -listener = Listen.to('dir', &callback) -listener.start -sleep -``` - -## Options - -All the following options can be set through the `Listen.to` after the directory path(s) params. - -```ruby -ignore: [%r{/foo/bar}, /\.pid$/, /\.coffee$/] # Ignore a list of paths - # default: See DEFAULT_IGNORED_DIRECTORIES and DEFAULT_IGNORED_EXTENSIONS in Listen::Silencer - -ignore!: %r{/foo/bar} # Same as ignore options, but overwrite default ignored paths. - -only: %r{.rb$} # Only listen to specific files - # default: none - -latency: 0.5 # Set the delay (**in seconds**) between checking for changes - # default: 0.25 sec (1.0 sec for polling) - -wait_for_delay: 4 # Set the delay (**in seconds**) between calls to the callback when changes exist - # default: 0.10 sec - -force_polling: true # Force the use of the polling adapter - # default: none - -relative: false # Whether changes should be relative to current dir or not - # default: false - -debug: true # Enable Celluloid logger - # default: false - -polling_fallback_message: 'custom message' # Set a custom polling fallback message (or disable it with false) - # default: "Listen will be polling for changes. Learn more at https://github.com/guard/listen#listen-adapters." -``` - -Also, setting the environment variable `LISTEN_GEM_DEBUGGING=1` does the same as `debug: true` above. - - -## Listen adapters - -The Listen gem has a set of adapters to notify it when there are changes. - -There are 4 OS-specific adapters to support Darwin, Linux, \*BSD and Windows. -These adapters are fast as they use some system-calls to implement the notifying function. - -There is also a polling adapter - although it's much slower than other adapters, -it works on every platform/system and scenario (including network filesystems such as VM shared folders). - -The Darwin and Linux adapters are dependencies of the Listen gem so they work out of the box. For other adapters a specific gem will have to be added to your Gemfile, please read below. - -The Listen gem will choose the best adapter automatically, if present. If you -want to force the use of the polling adapter, use the `:force_polling` option -while initializing the listener. - -### On Windows - -If your are on Windows, it's recommended to use the [`wdm`](https://github.com/Maher4Ever/wdm) adapter instead of polling. - -Please add the following to your Gemfile: - -```ruby -gem 'wdm', '>= 0.1.0' if Gem.win_platform? -``` - -### On \*BSD - -If your are on \*BSD you can try to use the [`rb-kqueue`](https://github.com/mat813/rb-kqueue) adapter instead of polling. - -Please add the following to your Gemfile: - -```ruby -require 'rbconfig' -if RbConfig::CONFIG['target_os'] =~ /bsd|dragonfly/i - gem 'rb-kqueue', '>= 0.2' -end - -``` - -### Getting the [polling fallback message](#options)? - -Please visit the [installation section of the Listen WIKI](https://github.com/guard/listen/wiki#installation) for more information and options for potential fixes. - -### Issues and troubleshooting - -*NOTE: without providing the output after setting the `LISTEN_GEM_DEBUGGING=1` environment variable, it can be almost impossible to guess why listen is not working as expected.* - -See [TROUBLESHOOTING](https://github.com/guard/listen/wiki/Troubleshooting) - - -## Performance - -If Listen seems slow or unresponsive, make sure you're not using the Polling adapter (you should see a warning upon startup if you are). - -Also, if the directories you're watching contain many files, make sure you're: - -* not using Polling (ideally) -* using `:ignore` and `:only` options to avoid tracking directories you don't care about (important with Polling and on MacOS) -* running Listen with the `:latency` and `:wait_for_delay` options not too small or too big (depends on needs) -* not watching directories with log files, database files or other frequently changing files -* not using a version of Listen prior to 2.7.7 -* not getting silent crashes within Listen (see LISTEN_GEM_DEBUGGING=2) -* not running multiple instances of Listen in the background -* using a file system with atime modification disabled (ideally) -* not using a filesystem with inaccurate file modification times (ideally), e.g. HFS, VFAT -* not buffering to a slow terminal (e.g. transparency + fancy font + slow gfx card + lots of output) -* ideally not running a slow encryption stack, e.g. btrfs + ecryptfs - -When in doubt, LISTEN_GEM_DEBUGGING=2 can help discover the actual events and time they happened. - -## Forwarding file events over TCP - -Listen is capable of forwarding file events over the network using a messaging protocol. This can be useful for virtualized development environments when file events are unavailable, as is the case with shared folders in VMs. - -[Vagrant](https://github.com/mitchellh/vagrant) uses Listen in it's rsync-auto mode to solve this issue. - -To broadcast events over TCP programmatically, use the `forward_to` option with an address - just a port or a hostname/port combination: - -```ruby -listener = Listen.to 'path/to/app', forward_to: '10.0.0.2:4000' do |modified, added, removed| - # After broadcasting the changes to any connected recipients, - # this block will still be called -end -listener.start -sleep -``` - -As a convenience, the `listen` script is supplied which listens to a directory and forwards the events to a network address - -```bash -listen -f "10.0.0.2:4000" # changes in current directory are sent as absolute paths -listen -r -f "10.0.0.2:4000" # changes in current directory are sent as relative paths -listen -v -d "/projects/my_project" -f "10.0.0.2:4000" # changes in given directory are also shown -``` - -*NOTE: if you are using a gem like `guard` and the paths on host and guest are not exactly the same, you'll generally want to use the `-r` option for relative paths* - -To connect to a broadcasting listener as a recipient, specify its address using `Listen.on`: - -```ruby -listener = Listen.on '10.0.0.2:4000' do |modified, added, removed| - # This block will be called -end -listener.start -sleep -``` - -### Security considerations - -Since file events potentially expose sensitive information, care must be taken when specifying the broadcaster address. It is recommended to **always** specify a hostname and make sure it is as specific as possible to reduce any undesirable eavesdropping. - -## Development - -* Documentation hosted at [RubyDoc](http://rubydoc.info/github/guard/listen/master/frames). -* Source hosted at [GitHub](https://github.com/guard/listen). - -Pull requests are very welcome! Please try to follow these simple rules if applicable: - -* Please create a topic branch for every separate change you make. -* Make sure your patches are well tested. All specs must pass on [Travis CI](https://travis-ci.org/guard/listen). -* Update the [Yard](http://yardoc.org/) documentation. -* Update the [README](https://github.com/guard/listen/blob/master/README.md). -* Please **do not change** the version number. - -For questions please join us in our [Google group](http://groups.google.com/group/guard-dev) or on -`#guard` (irc.freenode.net). - -## Acknowledgments - -* [Michael Kessler (netzpirat)][] for having written the [initial specs](https://github.com/guard/listen/commit/1e457b13b1bb8a25d2240428ce5ed488bafbed1f). -* [Travis Tilley (ttilley)][] for this awesome work on [fssm][] & [rb-fsevent][]. -* [Nathan Weizenbaum (nex3)][] for [rb-inotify][], a thorough inotify wrapper. -* [Mathieu Arnold (mat813)][] for [rb-kqueue][], a simple kqueue wrapper. -* [Maher Sallam][] for [wdm][], windows support wouldn't exist without him. -* [Yehuda Katz (wycats)][] for [vigilo][], that has been a great source of inspiration. - -## Author - -[Thibaud Guillaume-Gentil](https://github.com/thibaudgg) ([@thibaudgg](https://twitter.com/thibaudgg)) - -## Contributors - -[https://github.com/guard/listen/graphs/contributors](https://github.com/guard/listen/graphs/contributors) - -[Thibaud Guillaume-Gentil (thibaudgg)]: https://github.com/thibaudgg -[Maher Sallam]: https://github.com/Maher4Ever -[Michael Kessler (netzpirat)]: https://github.com/netzpirat -[Travis Tilley (ttilley)]: https://github.com/ttilley -[fssm]: https://github.com/ttilley/fssm -[rb-fsevent]: https://github.com/thibaudgg/rb-fsevent -[Mathieu Arnold (mat813)]: https://github.com/mat813 -[Nathan Weizenbaum (nex3)]: https://github.com/nex3 -[rb-inotify]: https://github.com/nex3/rb-inotify -[stereobooster]: https://github.com/stereobooster -[rb-fchange]: https://github.com/stereobooster/rb-fchange -[rb-kqueue]: https://github.com/mat813/rb-kqueue -[Yehuda Katz (wycats)]: https://github.com/wycats -[vigilo]: https://github.com/wycats/vigilo -[wdm]: https://github.com/Maher4Ever/wdm diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/bin/listen b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/bin/listen deleted file mode 100755 index dbbdef2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/bin/listen +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env ruby - -require 'listen' -require 'listen/cli' - -unless defined?(JRUBY_VERSION) - if Signal.list.keys.include?('INT') - Signal.trap('INT') { Thread.new { Listen.stop } } - end -end - -Listen::CLI.start diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen.rb deleted file mode 100644 index e494147..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen.rb +++ /dev/null @@ -1,76 +0,0 @@ -require 'celluloid' -require 'listen/listener' - -require 'listen/internals/thread_pool' - -module Listen - class << self - # Listens to file system modifications on a either single directory or - # multiple directories. - # - # When :forward_to is specified, this listener will broadcast modifications - # over TCP. - # - # @param (see Listen::Listener#new) - # - # @yield [modified, added, removed] the changed files - # @yieldparam [Array] modified the list of modified files - # @yieldparam [Array] added the list of added files - # @yieldparam [Array] removed the list of removed files - # - # @return [Listen::Listener] the listener - # - def to(*args, &block) - Celluloid.boot unless Celluloid.running? - options = args.last.is_a?(Hash) ? args.last : {} - target = options.delete(:forward_to) - args = ([target, :broadcaster] + args) if target - _add_listener(*args, &block) - end - - # Stop all listeners & Celluloid - # - # Use it for testing purpose or when you are sure that Celluloid could be - # ended. - # - # This is used by the `listen` binary to handle Ctrl-C - # - def stop - Internals::ThreadPool.stop - @listeners ||= [] - - # TODO: should use a mutex for this - @listeners.each do |listener| - # call stop to halt the main loop - listener.stop - end - @listeners = nil - - Celluloid.shutdown - end - - # Listens to file system modifications broadcast over TCP. - # - # @param [String/Fixnum] target to listen on (hostname:port or port) - # - # @yield [modified, added, removed] the changed files - # @yieldparam [Array] modified the list of modified files - # @yieldparam [Array] added the list of added files - # @yieldparam [Array] removed the list of removed files - # - # @return [Listen::Listener] the listener - # - def on(target, *args, &block) - _add_listener(target, :recipient, *args, &block) - end - - private - - def _add_listener(*args, &block) - @listeners ||= [] - Listener.new(*args, &block).tap do |listener| - @listeners << listener - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter.rb deleted file mode 100644 index 058b8f5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter.rb +++ /dev/null @@ -1,45 +0,0 @@ -require 'listen/adapter/base' -require 'listen/adapter/bsd' -require 'listen/adapter/darwin' -require 'listen/adapter/linux' -require 'listen/adapter/polling' -require 'listen/adapter/windows' - -module Listen - module Adapter - OPTIMIZED_ADAPTERS = [Darwin, Linux, BSD, Windows] - POLLING_FALLBACK_MESSAGE = 'Listen will be polling for changes.'\ - 'Learn more at https://github.com/guard/listen#listen-adapters.' - - def self.select(options = {}) - _log :debug, 'Adapter: considering TCP ...' - return TCP if options[:force_tcp] - _log :debug, 'Adapter: considering polling ...' - return Polling if options[:force_polling] - _log :debug, 'Adapter: considering optimized backend...' - return _usable_adapter_class if _usable_adapter_class - _log :debug, 'Adapter: falling back to polling...' - _warn_polling_fallback(options) - Polling - rescue - _log :warn, format('Adapter: failed: %s:%s', $ERROR_POSITION.inspect, - $ERROR_POSITION * "\n") - raise - end - - private - - def self._usable_adapter_class - OPTIMIZED_ADAPTERS.detect(&:usable?) - end - - def self._warn_polling_fallback(options) - msg = options.fetch(:polling_fallback_message, POLLING_FALLBACK_MESSAGE) - Kernel.warn "[Listen warning]:\n #{msg}" if msg - end - - def self._log(type, message) - Celluloid::Logger.send(type, message) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/base.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/base.rb deleted file mode 100644 index 6e4d32a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/base.rb +++ /dev/null @@ -1,99 +0,0 @@ -require 'listen/options' - -module Listen - module Adapter - class Base - include Celluloid - - attr_reader :options - - # TODO: only used by tests - DEFAULTS = {} - - def initialize(opts) - @configured = nil - options = opts.dup - @mq = options.delete(:mq) - @directories = options.delete(:directories) - - Array(@directories).each do |dir| - next if dir.is_a?(Pathname) - fail ArgumentError, "not a Pathname: #{dir.inspect}" - end - - # TODO: actually use this in every adapter - @recursion = options.delete(:recursion) - @recursion = true if @recursion.nil? - - defaults = self.class.const_get('DEFAULTS') - @options = Listen::Options.new(options, defaults) - rescue - _log_exception 'adapter config failed: %s:%s' - raise - end - - # TODO: it's a separate method as a temporary workaround for tests - def configure - return if @configured - @configured = true - - @callbacks ||= {} - @directories.each do |dir| - unless dir.is_a?(Pathname) - fail ArgumentError, "not a Pathname: #{dir.inspect}" - end - - callback = @callbacks[dir] || lambda do |event| - _process_event(dir, event) - end - @callbacks[dir] = callback - _configure(dir, &callback) - end - end - - def start - configure - Listen::Internals::ThreadPool.add do - begin - _run - rescue - _log_exception 'run() in thread failed: %s:%s' - raise - end - end - end - - def self.local_fs? - true - end - - def self.usable? - const_get('OS_REGEXP') =~ RbConfig::CONFIG['target_os'] - end - - private - - def _queue_change(type, dir, rel_path, options) - # TODO: temporary workaround to remove dependency on Change through - # Celluloid in tests - @mq.send(:_queue_raw_change, type, dir, rel_path, options) - end - - def _log(*args, &block) - self.class.send(:_log, *args, &block) - end - - def _log_exception(msg) - _log :error, format(msg, $ERROR_INFO, $ERROR_POSITION * "\n") - end - - def self._log(*args, &block) - if block - Celluloid::Logger.send(*args, block.call) - else - Celluloid::Logger.send(*args) - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/bsd.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/bsd.rb deleted file mode 100644 index b559049..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/bsd.rb +++ /dev/null @@ -1,106 +0,0 @@ -# Listener implementation for BSD's `kqueue`. -# @see http://www.freebsd.org/cgi/man.cgi?query=kqueue -# @see https://github.com/mat813/rb-kqueue/blob/master/lib/rb-kqueue/queue.rb -# -module Listen - module Adapter - class BSD < Base - OS_REGEXP = /bsd|dragonfly/i - - DEFAULTS = { - events: [ - :delete, - :write, - :extend, - :attrib, - :rename - # :link, :revoke - ] - } - - BUNDLER_DECLARE_GEM = <<-EOS.gsub(/^ {6}/, '') - Please add the following to your Gemfile to avoid polling for changes: - require 'rbconfig' - if RbConfig::CONFIG['target_os'] =~ /#{OS_REGEXP}/ - gem 'rb-kqueue', '>= 0.2' - end - EOS - - def self.usable? - return false unless super - require 'rb-kqueue' - require 'find' - true - rescue LoadError - Kernel.warn BUNDLER_DECLARE_GEM - false - end - - private - - def _configure(directory, &_callback) - @worker ||= KQueue::Queue.new - @callback = _callback - # use Record to make a snapshot of dir, so we - # can detect new files - _find(directory.to_s) { |path| _watch_file(path, @worker) } - end - - def _run - @worker.run - end - - def _process_event(dir, event) - full_path = _event_path(event) - if full_path.directory? - # Force dir content tracking to kick in, or we won't have - # names of added files - _queue_change(:dir, dir, '.', recursive: true) - elsif full_path.exist? - path = full_path.relative_path_from(dir) - _queue_change(:file, dir, path.to_s, change: _change(event.flags)) - end - - # If it is a directory, and it has a write flag, it means a - # file has been added so find out which and deal with it. - # No need to check for removed files, kqueue will forget them - # when the vfs does. - _watch_for_new_file(event) if full_path.directory? - end - - def _change(event_flags) - { modified: [:attrib, :extend], - added: [:write], - removed: [:rename, :delete] - }.each do |change, flags| - return change unless (flags & event_flags).empty? - end - nil - end - - def _event_path(event) - Pathname.new(event.watcher.path) - end - - def _watch_for_new_file(event) - queue = event.watcher.queue - _find(_event_path(event).to_s) do |file_path| - unless queue.watchers.detect { |_, v| v.path == file_path.to_s } - _watch_file(file_path, queue) - end - end - end - - def _watch_file(path, queue) - queue.watch_file(path, *options.events, &@callback) - rescue Errno::ENOENT => e - _log :warn, "kqueue: watch file failed: #{e.message}" - end - - # Quick rubocop workaround - def _find(*paths, &block) - Find.send(:find, *paths, &block) - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/darwin.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/darwin.rb deleted file mode 100644 index bab73d2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/darwin.rb +++ /dev/null @@ -1,53 +0,0 @@ -require 'listen/internals/thread_pool' - -module Listen - module Adapter - # Adapter implementation for Mac OS X `FSEvents`. - # - class Darwin < Base - OS_REGEXP = /darwin(1.+)?$/i - - # The default delay between checking for changes. - DEFAULTS = { latency: 0.1 } - - private - - # NOTE: each directory gets a DIFFERENT callback! - def _configure(dir, &callback) - require 'rb-fsevent' - opts = { latency: options.latency } - - @workers ||= Queue.new - @workers << FSEvent.new.tap do |worker| - worker.watch(dir.to_s, opts, &callback) - end - end - - # NOTE: _run is called within a thread, so run every other - # worker in it's own thread - def _run - first = @workers.pop - until @workers.empty? - Listen::Internals::ThreadPool.add do - begin - @workers.pop.run - rescue - _log_exception 'run() in extra thread(s) failed: %s: %s' - end - end - end - first.run - end - - def _process_event(dir, event) - event.each do |path| - new_path = Pathname.new(path.sub(/\/$/, '')) - _log :debug, "fsevent: #{new_path}" - # TODO: does this preserve symlinks? - rel_path = new_path.relative_path_from(dir).to_s - _queue_change(:dir, dir, rel_path, recursive: true) - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/linux.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/linux.rb deleted file mode 100644 index 72f5e00..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/linux.rb +++ /dev/null @@ -1,104 +0,0 @@ -module Listen - module Adapter - # @see https://github.com/nex3/rb-inotify - class Linux < Base - OS_REGEXP = /linux/i - - DEFAULTS = { - events: [ - :recursive, - :attrib, - :create, - :delete, - :move, - :close_write - ] - } - - private - - WIKI_URL = 'https://github.com/guard/listen'\ - '/wiki/Increasing-the-amount-of-inotify-watchers' - - INOTIFY_LIMIT_MESSAGE = <<-EOS.gsub(/^\s*/, '') - FATAL: Listen error: unable to monitor directories for changes. - Visit #{WIKI_URL} for info on how to fix this. - EOS - - def _configure(directory, &callback) - require 'rb-inotify' - @worker ||= INotify::Notifier.new - @worker.watch(directory.to_s, *options.events, &callback) - rescue Errno::ENOSPC - # workaround - Celluloid catches abort and prints nothing - STDERR.puts INOTIFY_LIMIT_MESSAGE - STDERR.flush - abort(INOTIFY_LIMIT_MESSAGE) - end - - def _run - @worker.run - end - - def _process_event(dir, event) - # NOTE: avoid using event.absolute_name since new API - # will need to have a custom recursion implemented - # to properly match events to configured directories - path = Pathname.new(event.watcher.path) + event.name - rel_path = path.relative_path_from(dir).to_s - - _log :debug, "inotify: #{rel_path} (#{event.flags.inspect})" - - if /1|true/ =~ ENV['LISTEN_GEM_SIMULATE_FSEVENT'] - if (event.flags & [:moved_to, :moved_from]) || _dir_event?(event) - rel_path = path.dirname.relative_path_from(dir).to_s - _queue_change(:dir, dir, rel_path, {}) - else - _queue_change(:dir, dir, rel_path, {}) - end - return - end - - return if _skip_event?(event) - - cookie_params = event.cookie.zero? ? {} : { cookie: event.cookie } - - # Note: don't pass options to force rescanning the directory, so we can - # detect moving/deleting a whole tree - if _dir_event?(event) - _queue_change(:dir, dir, rel_path, cookie_params) - return - end - - params = cookie_params.merge(change: _change(event.flags)) - - _queue_change(:file, dir, rel_path, params) - end - - def _skip_event?(event) - # Event on root directory - return true if event.name == '' - # INotify reports changes to files inside directories as events - # on the directories themselves too. - # - # @see http://linux.die.net/man/7/inotify - _dir_event?(event) && (event.flags & [:close, :modify]).any? - end - - def _change(event_flags) - { modified: [:attrib, :close_write], - moved_to: [:moved_to], - moved_from: [:moved_from], - added: [:create], - removed: [:delete] }.each do |change, flags| - return change unless (flags & event_flags).empty? - end - nil - end - - def _dir_event?(event) - event.flags.include?(:isdir) - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/polling.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/polling.rb deleted file mode 100644 index c677588..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/polling.rb +++ /dev/null @@ -1,36 +0,0 @@ -module Listen - module Adapter - # Polling Adapter that works cross-platform and - # has no dependencies. This is the adapter that - # uses the most CPU processing power and has higher - # file IO than the other implementations. - # - class Polling < Base - OS_REGEXP = // # match every OS - - DEFAULTS = { latency: 1.0 } - - private - - def _configure(_, &callback) - @polling_callbacks ||= [] - @polling_callbacks << callback - end - - def _run - loop do - start = Time.now.to_f - @polling_callbacks.each do |callback| - callback.call(nil) - nap_time = options.latency - (Time.now.to_f - start) - sleep(nap_time) if nap_time > 0 - end - end - end - - def _process_event(dir, _) - _queue_change(:dir, dir, '.', recursive: true) - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/tcp.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/tcp.rb deleted file mode 100644 index 752bd39..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/tcp.rb +++ /dev/null @@ -1,88 +0,0 @@ -require 'celluloid/io' - -require 'listen/tcp/message' - -module Listen - module Adapter - # Adapter to receive file system modifications over TCP - class TCP < Base - OS_REGEXP = // # match any - - include Celluloid::IO - finalizer :finalize - - DEFAULTS = { - host: 'localhost', - port: '4000' - } - - attr_reader :buffer, :socket - - # Initializes and starts a Celluloid::IO-powered TCP-recipient - def start - attempts ||= 3 - _log :info, "TCP: opening socket #{options.host}:#{options.port}" - @socket = TCPSocket.new(options.host, options.port) - @buffer = '' - async.run - rescue Celluloid::Task::TerminatedError - _log :debug, "TCP adapter was terminated: #{$ERROR_INFO.inspect}" - rescue Errno::ECONNREFUSED - sleep 1 - attempts -= 1 - _log :warn, "TCP.start: #{$ERROR_INFO.inspect}" - retry if attempts > 0 - _log :error, format('TCP.start: %s:%s', $ERROR_INFO.inspect, - $ERROR_POSITION * "\n") - raise - rescue - _log :error, format('TCP.start: %s:%s', $ERROR_INFO.inspect, - $ERROR_POSITION * "\n") - raise - end - - # Cleans up buffer and socket - def finalize - @buffer = nil - return unless @socket - - @socket.close - @socket = nil - end - - # Number of bytes to receive at a time - RECEIVE_WINDOW = 1024 - - # Continuously receive and asynchronously handle data - def run - while (data = @socket.recv(RECEIVE_WINDOW)) - async.handle_data(data) - end - end - - # Buffers incoming data and handles messages accordingly - def handle_data(data) - @buffer << data - while (message = Listen::TCP::Message.from_buffer(@buffer)) - handle_message(message) - end - rescue - _log :error, format('TCP.handle_data crashed: %s:%s', $ERROR_INFO, - $ERROR_POSITION * "\n") - raise - end - - # Handles incoming message by notifying of path changes - def handle_message(message) - type, change, dir, path, _ = message.object - _log(:debug) { "TCP message: #{[type, change, dir, path].inspect}" } - - _queue_change(type.to_sym, Pathname(dir), path, change: change.to_sym) - end - - def self.local_fs? - false - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/windows.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/windows.rb deleted file mode 100644 index b15fb4c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/adapter/windows.rb +++ /dev/null @@ -1,99 +0,0 @@ -module Listen - module Adapter - # Adapter implementation for Windows `wdm`. - # - class Windows < Base - OS_REGEXP = /mswin|mingw|cygwin/i - - BUNDLER_DECLARE_GEM = <<-EOS.gsub(/^ {6}/, '') - Please add the following to your Gemfile to avoid polling for changes: - gem 'wdm', '>= 0.1.0' if Gem.win_platform? - EOS - - def self.usable? - return false unless super - require 'wdm' - true - rescue LoadError - _log :debug, format('wdm - load failed: %s:%s', $ERROR_INFO, - $ERROR_POSITION * "\n") - - Kernel.warn BUNDLER_DECLARE_GEM - false - end - - private - - def _configure(dir, &callback) - require 'wdm' - _log :debug, 'wdm - starting...' - @worker ||= WDM::Monitor.new - @worker.watch_recursively(dir.to_s, :files) do |change| - callback.call([:file, change]) - end - - @worker.watch_recursively(dir.to_s, :directories) do |change| - callback.call([:dir, change]) - end - - events = [:attributes, :last_write] - @worker.watch_recursively(dir.to_s, *events) do |change| - callback.call([:attr, change]) - end - end - - def _run - @worker.run! - end - - def _process_event(dir, event) - _log :debug, "wdm - callback: #{event.inspect}" - - type, change = event - - full_path = Pathname(change.path) - - rel_path = full_path.relative_path_from(dir).to_s - - options = { change: _change(change.type) } - - case type - when :file - _queue_change(:file, dir, rel_path, options) - when :attr - unless full_path.directory? - _queue_change(:file, dir, rel_path, options) - end - when :dir - if change.type == :removed - # TODO: check if watched dir? - _queue_change(:dir, dir, Pathname(rel_path).dirname.to_s, {}) - elsif change.type == :added - _queue_change(:dir, dir, rel_path, {}) - else - # do nothing - changed directory means either: - # - removed subdirs (handled above) - # - added subdirs (handled above) - # - removed files (handled by _file_callback) - # - added files (handled by _file_callback) - # so what's left? - end - end - rescue - details = event.inspect - _log :error, format('wdm - callback (%): %s:%s', details, $ERROR_INFO, - $ERROR_POSITION * "\n") - raise - end - - def _change(type) - { modified: [:modified, :attrib], # TODO: is attrib really passed? - added: [:added, :renamed_new_file], - removed: [:removed, :renamed_old_file] }.each do |change, types| - return change if types.include?(type) - end - nil - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/change.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/change.rb deleted file mode 100644 index ed49acc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/change.rb +++ /dev/null @@ -1,59 +0,0 @@ -require 'listen/file' -require 'listen/directory' - -module Listen - class Change - include Celluloid - - attr_accessor :listener - - def initialize(listener) - @listener = listener - end - - def change(type, watched_dir, rel_path, options = {}) - change = options[:change] - cookie = options[:cookie] - - if !cookie && listener.silencer.silenced?(Pathname(rel_path), type) - _log :debug, "(silenced): #{rel_path.inspect}" - return - end - - path = watched_dir + rel_path - - log_details = options[:silence] && 'recording' || change || 'unknown' - _log :debug, "#{log_details}: #{type}:#{path} (#{options.inspect})" - - if change - # TODO: move this to Listener to avoid Celluloid overhead - # from caller - options = cookie ? { cookie: cookie } : {} - listener.queue(type, change, watched_dir, rel_path, options) - else - return unless (record = listener.sync(:record)) - - if type == :dir - return unless (change_queue = listener.async(:change_pool)) - Directory.scan(change_queue, record, watched_dir, rel_path, options) - else - change = File.change(record, watched_dir, rel_path) - return if !change || options[:silence] - listener.queue(:file, change, watched_dir, rel_path) - end - end - rescue Celluloid::Task::TerminatedError - _log :debug, "Change#change was terminated: #{$ERROR_INFO.inspect}" - rescue RuntimeError - _log :error, format('Change#change crashed %s:%s', $ERROR_INFO.inspect, - $ERROR_POSITION * "\n") - raise - end - - private - - def _log(type, message) - Celluloid::Logger.send(type, message) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/cli.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/cli.rb deleted file mode 100644 index 06bdd2c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/cli.rb +++ /dev/null @@ -1,73 +0,0 @@ -require 'thor' -require 'listen' -require 'logger' - -module Listen - class CLI < Thor - default_task :start - - desc 'start', 'Starts Listen' - - class_option :verbose, - type: :boolean, - default: false, - aliases: '-v', - banner: 'Verbose' - - class_option :forward, - type: :string, - default: '127.0.0.1:4000', - aliases: '-f', - banner: 'The address to forward filesystem events' - - class_option :directory, - type: :array, - default: '.', - aliases: '-d', - banner: 'The directory to listen to' - - class_option :relative, - type: :boolean, - default: false, - aliases: '-r', - banner: 'Convert paths relative to current directory' - - def start - Listen::Forwarder.new(options).start - end - end - - class Forwarder - attr_reader :logger - def initialize(options) - @options = options - @logger = Logger.new(STDOUT) - @logger.level = Logger::INFO - @logger.formatter = proc { |_, _, _, msg| "#{msg}\n" } - end - - def start - logger.info 'Starting listen...' - address = @options[:forward] - directory = @options[:directory] - relative = @options[:relative] - callback = proc do |modified, added, removed| - if @options[:verbose] - logger.info "+ #{added}" unless added.empty? - logger.info "- #{removed}" unless removed.empty? - logger.info "> #{modified}" unless modified.empty? - end - end - - listener = Listen.to( - directory, - forward_to: address, - relative: relative, - &callback) - - listener.start - - sleep 0.5 while listener.listen? - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/directory.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/directory.rb deleted file mode 100644 index 7f06720..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/directory.rb +++ /dev/null @@ -1,78 +0,0 @@ -require 'set' - -module Listen - class Directory - def self.scan(queue, sync_record, dir, rel_path, options) - return unless (record = sync_record.async) - - previous = sync_record.dir_entries(dir, rel_path) - - record.add_dir(dir, rel_path) - - # TODO: use children(with_directory: false) - path = dir + rel_path - current = Set.new(path.children) - - _log(:debug) do - format('%s: %s(%s): %s -> %s', - (options[:silence] ? 'Recording' : 'Scanning'), - rel_path, options.inspect, previous.inspect, current.inspect) - end - - current.each do |full_path| - type = full_path.directory? ? :dir : :file - item_rel_path = full_path.relative_path_from(dir).to_s - _change(queue, type, dir, item_rel_path, options) - end - - # TODO: this is not tested properly - previous.reject! { |entry, _| current.include? path + entry } - - _async_changes(dir, rel_path, queue, previous, options) - - rescue Errno::ENOENT, Errno::EHOSTDOWN - record.unset_path(dir, rel_path) - _async_changes(dir, rel_path, queue, previous, options) - - rescue Errno::ENOTDIR - # TODO: path not tested - record.unset_path(dir, rel_path) - _async_changes(dir, path, queue, previous, options) - _change(queue, :file, dir, rel_path, options) - rescue - _log(:warn) do - format('scan DIED: %s:%s', $ERROR_INFO, $ERROR_POSITION * "\n") - end - raise - end - - def self._async_changes(dir, path, queue, previous, options) - previous.each do |entry, data| - # TODO: this is a hack with insufficient testing - type = data.key?(:mtime) ? :file : :dir - _change(queue, type, dir, (Pathname(path) + entry).to_s, options) - end - end - - def self._change(queue, type, dir, path, options) - return queue.change(type, dir, path, options) if type == :dir - - # Minor param cleanup for tests - # TODO: use a dedicated Event class - opts = options.dup - opts.delete(:recursive) - if opts.empty? - queue.change(type, dir, path) - else - queue.change(type, dir, path, opts) - end - end - - def self._log(type, &block) - return unless Celluloid.logger - Celluloid.logger.send(type) do - block.call - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/file.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/file.rb deleted file mode 100644 index 94f7ddb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/file.rb +++ /dev/null @@ -1,78 +0,0 @@ -module Listen - class File - def self.change(record, dir, rel_path) - path = dir + rel_path - lstat = path.lstat - - data = { mtime: lstat.mtime.to_f, mode: lstat.mode } - - record_data = record.file_data(dir, rel_path) - - if record_data.empty? - record.async.update_file(dir, rel_path, data) - return :added - end - - if data[:mode] != record_data[:mode] - record.async.update_file(dir, rel_path, data) - return :modified - end - - if data[:mtime] != record_data[:mtime] - record.async.update_file(dir, rel_path, data) - return :modified - end - - return if /1|true/ =~ ENV['LISTEN_GEM_DISABLE_HASHING'] - return unless self.inaccurate_mac_time?(lstat) - - # Check if change happened within 1 second (maybe it's even - # too much, e.g. 0.3-0.5 could be sufficient). - # - # With rb-fsevent, there's a (configurable) latency between - # when file was changed and when the event was triggered. - # - # If a file is saved at ???14.998, by the time the event is - # actually received by Listen, the time could already be e.g. - # ???15.7. - # - # And since Darwin adapter uses directory scanning, the file - # mtime may be the same (e.g. file was changed at ???14.001, - # then at ???14.998, but the fstat time would be ???14.0 in - # both cases). - # - # If change happend at ???14.999997, the mtime is 14.0, so for - # an mtime=???14.0 we assume it could even be almost ???15.0 - # - # So if Time.now.to_f is ???15.999998 and stat reports mtime - # at ???14.0, then event was due to that file'd change when: - # - # ???15.999997 - ???14.999998 < 1.0s - # - # So the "2" is "1 + 1" (1s to cover rb-fsevent latency + - # 1s maximum difference between real mtime and that recorded - # in the file system) - # - return if data[:mtime].to_i + 2 <= Time.now.to_f - - md5 = Digest::MD5.file(path).digest - record.async.update_file(dir, rel_path, data.merge(md5: md5)) - :modified if record_data[:md5] && md5 != record_data[:md5] - rescue SystemCallError - record.async.unset_path(dir, rel_path) - :removed - rescue - Celluloid::Logger.debug "lstat failed for: #{rel_path} (#{$ERROR_INFO})" - raise - end - - def self.inaccurate_mac_time?(stat) - # 'mac' means Modified/Accessed/Created - - # Since precision depends on mounted FS (e.g. you can have a FAT partiion - # mounted on Linux), check for fields with a remainder to detect this - - [stat.mtime, stat.ctime, stat.atime].map(&:usec).all?(&:zero?) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/internals/logging.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/internals/logging.rb deleted file mode 100644 index 2460c34..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/internals/logging.rb +++ /dev/null @@ -1,35 +0,0 @@ -require 'celluloid/logger' - -module Listen - module Internals - module Logging - def _info(*args, &block) - _log(:info, *args, &block) - end - - def _warn(*args, &block) - _log(:warn, *args, &block) - end - - def _debug(*args, &block) - _log(:debug, *args, &block) - end - - def _log(*args, &block) - if block - Celluloid::Logger.send(*args, block.call) - else - Celluloid::Logger.send(*args) - end - end - - def _format_error(fmt) - format(fmt, $ERROR_INFO, ", Backtrace: \n" + $ERROR_POSITION * "\n") - end - - def _error_exception(fmt) - _log :error, _format_error(fmt) - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/internals/thread_pool.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/internals/thread_pool.rb deleted file mode 100644 index ea2621f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/internals/thread_pool.rb +++ /dev/null @@ -1,19 +0,0 @@ -module Listen - # @private api - module Internals - # Just a wrapper for tests to avoid interfereing with Celluloid's threads - module ThreadPool - def self.add(&block) - (@threads ||= Queue.new) << Thread.new { block.call } - end - - def self.stop - return unless @threads ||= nil - - killed = Queue.new - killed << @threads.pop.kill until @threads.empty? - killed.pop.join until killed.empty? - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/listener.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/listener.rb deleted file mode 100644 index 0c79f5a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/listener.rb +++ /dev/null @@ -1,357 +0,0 @@ -require 'pathname' - -require 'listen/version' -require 'listen/adapter' -require 'listen/change' -require 'listen/record' -require 'listen/silencer' -require 'listen/queue_optimizer' -require 'English' - -require 'listen/internals/logging' - -module Listen - class Listener - include Celluloid::FSM - include QueueOptimizer - - attr_accessor :block - - attr_reader :silencer - - # TODO: deprecate - attr_reader :options, :directories - attr_reader :registry, :supervisor - - # TODO: deprecate - # NOTE: these are VERY confusing (broadcast + recipient modes) - attr_reader :host, :port - - # Initializes the directories listener. - # - # @param [String] directory the directories to listen to - # @param [Hash] options the listen options (see Listen::Listener::Options) - # - # @yield [modified, added, removed] the changed files - # @yieldparam [Array] modified the list of modified files - # @yieldparam [Array] added the list of added files - # @yieldparam [Array] removed the list of removed files - # - def initialize(*args, &block) - @options = _init_options(args.last.is_a?(Hash) ? args.pop : {}) - - # Setup logging first - if Celluloid.logger - Celluloid.logger.level = _debug_level - _info "Celluloid loglevel set to: #{Celluloid.logger.level}" - _info "Listen version: #{Listen::VERSION}" - end - - @silencer = Silencer.new - _reconfigure_silencer({}) - - @tcp_mode = nil - if [:recipient, :broadcaster].include? args[1] - target = args.shift - @tcp_mode = args.shift - _init_tcp_options(target) - end - - @directories = args.flatten.map { |path| Pathname.new(path).realpath } - @queue = Queue.new - @block = block - @registry = Celluloid::Registry.new - - transition :stopped - end - - default_state :initializing - - state :initializing, to: :stopped - state :paused, to: [:processing, :stopped] - - state :stopped, to: [:processing] do - _stop_wait_thread - if @supervisor - @supervisor.terminate - @supervisor = nil - end - end - - state :processing, to: [:paused, :stopped] do - if wait_thread # means - was paused - _wakeup_wait_thread - else - @last_queue_event_time = nil - _start_wait_thread - _init_actors - - # Note: make sure building is finished before starting adapter (for - # consistent results both in specs and normal usage) - sync(:record).build - - _start_adapter - end - end - - # Starts processing events and starts adapters - # or resumes invoking callbacks if paused - def start - transition :processing - end - - # TODO: depreciate - alias_method :unpause, :start - - # Stops processing and terminates all actors - def stop - transition :stopped - end - - # Stops invoking callbacks (messages pile up) - def pause - transition :paused - end - - # processing means callbacks are called - def processing? - state == :processing - end - - def paused? - state == :paused - end - - # TODO: deprecate - alias_method :listen?, :processing? - - # TODO: deprecate - def paused=(value) - transition value ? :paused : :processing - end - - # TODO: deprecate - alias_method :paused, :paused? - - # Add files and dirs to ignore on top of defaults - # - # (@see Listen::Silencer for default ignored files and dirs) - # - def ignore(regexps) - _reconfigure_silencer(ignore: [options[:ignore], regexps]) - end - - # Replace default ignore patterns with provided regexp - def ignore!(regexps) - _reconfigure_silencer(ignore: [], ignore!: regexps) - end - - # Listen only to files and dirs matching regexp - def only(regexps) - _reconfigure_silencer(only: regexps) - end - - def async(type) - proxy = sync(type) - proxy ? proxy.async : nil - end - - def sync(type) - @registry[type] - end - - def queue(type, change, dir, path, options = {}) - fail "Invalid type: #{type.inspect}" unless [:dir, :file].include? type - fail "Invalid change: #{change.inspect}" unless change.is_a?(Symbol) - fail "Invalid path: #{path.inspect}" unless path.is_a?(String) - if @options[:relative] - dir = begin - cwd = Pathname.pwd - dir.relative_path_from(cwd) - rescue ArgumentError - dir - end - end - @queue << [type, change, dir, path, options] - - @last_queue_event_time = Time.now.to_f - _wakeup_wait_thread unless state == :paused - - return unless @tcp_mode == :broadcaster - - message = TCP::Message.new(type, change, dir, path, options) - registry[:broadcaster].async.broadcast(message.payload) - end - - private - - include Internals::Logging - - def _init_options(options = {}) - { debug: false, - latency: nil, - wait_for_delay: 0.1, - force_polling: false, - relative: false, - polling_fallback_message: nil }.merge(options) - end - - def _debug_level - debugging = ENV['LISTEN_GEM_DEBUGGING'] || options[:debug] - case debugging.to_s - when /2/ - Logger::DEBUG - when /true|yes|1/i - Logger::INFO - else - Logger::ERROR - end - end - - def _init_actors - options = [mq: self, directories: directories] - - @supervisor = Celluloid::SupervisionGroup.run!(registry) - supervisor.add(Record, as: :record, args: self) - supervisor.pool(Change, as: :change_pool, args: self) - - # TODO: broadcaster should be a separate plugin - if @tcp_mode == :broadcaster - require 'listen/tcp/broadcaster' - supervisor.add(TCP::Broadcaster, as: :broadcaster, args: [@host, @port]) - - # TODO: should be auto started, because if it crashes - # a new instance is spawned by supervisor, but it's 'start' isn't - # called - registry[:broadcaster].start - elsif @tcp_mode == :recipient - # TODO: adapter options should be configured in Listen.{on/to} - options.first.merge!(host: @host, port: @port) - end - - supervisor.add(_adapter_class, as: :adapter, args: options) - end - - def _wait_for_changes - latency = options[:wait_for_delay] - - loop do - break if state == :stopped - - if state == :paused || @queue.empty? - sleep - break if state == :stopped - end - - # Assure there's at least latency between callbacks to allow - # for accumulating changes - now = Time.now.to_f - diff = latency + (@last_queue_event_time || now) - now - if diff > 0 - sleep diff - next - end - - _process_changes unless state == :paused - end - rescue RuntimeError - Kernel.warn _format_error('exception while processing events: %s %s') - end - - def _silenced?(path, type) - @silencer.silenced?(path, type) - end - - def _start_adapter - # Don't run async, because configuration has to finish first - adapter = sync(:adapter) - adapter.start - end - - def _adapter_class - @adapter_class ||= Adapter.select(options) - end - - # for easier testing without sleep loop - def _process_changes - return if @queue.empty? - - @last_queue_event_time = nil - - changes = [] - changes << @queue.pop until @queue.empty? - - return if block.nil? - - hash = _smoosh_changes(changes) - result = [hash[:modified], hash[:added], hash[:removed]] - - block_start = Time.now.to_f - # TODO: condition not tested, but too complex to test ATM - block.call(*result) unless result.all?(&:empty?) - _debug "Callback took #{Time.now.to_f - block_start} seconds" - end - - attr_reader :wait_thread - - def _init_tcp_options(target) - # Handle TCP options here - require 'listen/tcp' - fail ArgumentError, 'missing host/port for TCP' unless target - - if @tcp_mode == :recipient - @host = 'localhost' - @options[:force_tcp] = true - end - - if target.is_a? Fixnum - @port = target - else - @host, port = target.split(':') - @port = port.to_i - end - end - - def _reconfigure_silencer(extra_options) - @options.merge!(extra_options) - - # TODO: this should be directory specific - rules = [:only, :ignore, :ignore!].map do |option| - [option, @options[option]] if @options.key? option - end - - @silencer.configure(Hash[rules.compact]) - end - - def _start_wait_thread - @wait_thread = Thread.new { _wait_for_changes } - end - - def _wakeup_wait_thread - wait_thread.wakeup if wait_thread && wait_thread.alive? - end - - def _stop_wait_thread - return unless wait_thread - if wait_thread.alive? - wait_thread.wakeup - wait_thread.join - end - @wait_thread = nil - end - - def _queue_raw_change(type, dir, rel_path, options) - _debug { "raw queue: #{[type, dir, rel_path, options].inspect}" } - - unless (worker = async(:change_pool)) - _warn 'Failed to allocate worker from change pool' - return - end - - worker.change(type, dir, rel_path, options) - rescue RuntimeError - _error_exception "_queue_raw_change exception %s:\n%s:\n" - raise - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/options.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/options.rb deleted file mode 100644 index fff23e1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/options.rb +++ /dev/null @@ -1,23 +0,0 @@ -module Listen - class Options - def initialize(opts, defaults) - @options = {} - given_options = opts.dup - defaults.keys.each do |key| - @options[key] = given_options.delete(key) || defaults[key] - end - - return if given_options.empty? - - msg = "Unknown options: #{given_options.inspect}" - Celluloid::Logger.warn msg - fail msg - end - - def method_missing(name, *_) - return @options[name] if @options.key?(name) - msg = "Bad option: #{name.inspect} (valid:#{@options.keys.inspect})" - fail NameError, msg - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/queue_optimizer.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/queue_optimizer.rb deleted file mode 100644 index a208c1d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/queue_optimizer.rb +++ /dev/null @@ -1,114 +0,0 @@ -module Listen - module QueueOptimizer - private - - def _smoosh_changes(changes) - # TODO: adapter could be nil at this point (shutdown) - if _adapter_class.local_fs? - cookies = changes.group_by do |_, _, _, _, options| - (options || {})[:cookie] - end - _squash_changes(_reinterpret_related_changes(cookies)) - else - smooshed = { modified: [], added: [], removed: [] } - changes.each do |_, change, dir, rel_path, _| - smooshed[change] << (dir + rel_path).to_s - end - smooshed.tap { |s| s.each { |_, v| v.uniq! } } - end - end - - # groups changes into the expected structure expected by - # clients - def _squash_changes(changes) - # We combine here for backward compatibility - # Newer clients should receive dir and path separately - changes = changes.map { |change, dir, path| [change, dir + path] } - - actions = changes.group_by(&:last).map do |path, action_list| - [_logical_action_for(path, action_list.map(&:first)), path.to_s] - end - _log :info, "listen: raw changes: #{actions.inspect}" - - { modified: [], added: [], removed: [] }.tap do |squashed| - actions.each do |type, path| - squashed[type] << path unless type.nil? - end - _log :info, "listen: final changes: #{squashed.inspect}" - end - end - - def _logical_action_for(path, actions) - actions << :added if actions.delete(:moved_to) - actions << :removed if actions.delete(:moved_from) - - modified = actions.detect { |x| x == :modified } - _calculate_add_remove_difference(actions, path, modified) - end - - def _calculate_add_remove_difference(actions, path, default_if_exists) - added = actions.count { |x| x == :added } - removed = actions.count { |x| x == :removed } - diff = added - removed - - # TODO: avoid checking if path exists and instead assume the events are - # in order (if last is :removed, it doesn't exist, etc.) - if path.exist? - if diff > 0 - :added - elsif diff.zero? && added > 0 - :modified - else - default_if_exists - end - else - diff < 0 ? :removed : nil - end - end - - # remove extraneous rb-inotify events, keeping them only if it's a possible - # editor rename() call (e.g. Kate and Sublime) - def _reinterpret_related_changes(cookies) - table = { moved_to: :added, moved_from: :removed } - cookies.map do |_, changes| - data = _detect_possible_editor_save(changes) - if data - to_dir, to_file = data - [[:modified, to_dir, to_file]] - else - not_silenced = changes.reject do |type, _, _, path, _| - _silenced?(Pathname(path), type) - end - not_silenced.map do |_, change, dir, path, _| - [table.fetch(change, change), dir, path] - end - end - end.flatten(1) - end - - def _detect_possible_editor_save(changes) - return unless changes.size == 2 - - from_type = from_change = from = nil - to_type = to_change = to_dir = to = nil - - changes.each do |data| - case data[1] - when :moved_from - from_type, from_change, _, from, _ = data - when :moved_to - to_type, to_change, to_dir, to, _ = data - else - return nil - end - end - - return unless from && to - - # Expect an ignored moved_from and non-ignored moved_to - # to qualify as an "editor modify" - return unless _silenced?(Pathname(from), from_type) - _silenced?(Pathname(to), to_type) ? nil : [to_dir, to] - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/record.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/record.rb deleted file mode 100644 index 3255fc4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/record.rb +++ /dev/null @@ -1,134 +0,0 @@ -require 'listen/record/entry' -require 'listen/record/symlink_detector' - -module Listen - class Record - include Celluloid - # TODO: one Record object per watched directory? - - # TODO: deprecate - attr_accessor :paths, :listener - - def initialize(listener) - @listener = listener - @paths = _auto_hash - end - - def add_dir(dir, rel_path) - return if [nil, '', '.'].include? rel_path - @paths[dir.to_s][rel_path] ||= {} - end - - def update_file(dir, rel_path, data) - dirname, basename = Pathname(rel_path).split.map(&:to_s) - _fast_update_file(dir, dirname, basename, data) - end - - def unset_path(dir, rel_path) - dirname, basename = Pathname(rel_path).split.map(&:to_s) - _fast_unset_path(dir, dirname, basename) - end - - def file_data(dir, rel_path) - root = @paths[dir.to_s] - dirname, basename = Pathname(rel_path).split.map(&:to_s) - if [nil, '', '.'].include? dirname - root[basename] ||= {} - root[basename].dup - else - root[dirname] ||= {} - root[dirname][basename] ||= {} - root[dirname][basename].dup - end - end - - def dir_entries(dir, rel_path) - tree = if [nil, '', '.'].include? rel_path.to_s - @paths[dir.to_s] - else - @paths[dir.to_s][rel_path.to_s] ||= _auto_hash - @paths[dir.to_s][rel_path.to_s] - end - - result = {} - tree.each do |key, values| - # only get data for file entries - result[key] = values.key?(:mtime) ? values : {} - end - result - end - - def build - start = Time.now.to_f - @paths = _auto_hash - - # TODO: refactor this out (1 Record = 1 watched dir) - listener.directories.each do |directory| - _fast_build(directory.to_s) - end - - Celluloid::Logger.info "Record.build(): #{Time.now.to_f - start} seconds" - rescue - Celluloid::Logger.warn "build crashed: #{$ERROR_INFO.inspect}" - raise - end - - private - - def _auto_hash - Hash.new { |h, k| h[k] = Hash.new } - end - - def _fast_update_file(dir, dirname, basename, data) - root = @paths[dir.to_s] - if [nil, '', '.'].include? dirname - root[basename] = (root[basename] || {}).merge(data) - else - root[dirname] ||= {} - root[dirname][basename] = (root[dirname][basename] || {}).merge(data) - end - end - - def _fast_unset_path(dir, dirname, basename) - root = @paths[dir.to_s] - # this may need to be reworked to properly remove - # entries from a tree, without adding non-existing dirs to the record - if [nil, '', '.'].include? dirname - return unless root.key?(basename) - root.delete(basename) - else - return unless root.key?(dirname) - root[dirname].delete(basename) - end - end - - # TODO: test with a file name given - # TODO: test other permissions - # TODO: test with mixed encoding - def _fast_build(root) - symlink_detector = SymlinkDetector.new - @paths[root] = _auto_hash - remaining = Queue.new - remaining << Entry.new(root, nil, nil) - _fast_build_dir(remaining, symlink_detector) until remaining.empty? - end - - def _fast_build_dir(remaining, symlink_detector) - entry = remaining.pop - children = entry.children # NOTE: children() implicitly tests if dir - symlink_detector.verify_unwatched!(entry) - children.each { |child| remaining << child } - add_dir(entry.root, entry.record_dir_key) - rescue Errno::ENOTDIR - _fast_try_file(entry) - rescue SystemCallError, SymlinkDetector::Error - _fast_unset_path(entry.root, entry.relative, entry.name) - end - - def _fast_try_file(entry) - _fast_update_file(entry.root, entry.relative, entry.name, entry.meta) - rescue SystemCallError - _fast_unset_path(entry.root, entry.relative, entry.name) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/record/entry.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/record/entry.rb deleted file mode 100644 index 1080977..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/record/entry.rb +++ /dev/null @@ -1,51 +0,0 @@ -module Listen - # @private api - class Record - # Represents a directory entry (dir or file) - class Entry - # file: "/home/me/watched_dir", "app/models", "foo.rb" - # dir, "/home/me/watched_dir", "." - def initialize(root, relative, name = nil) - @root, @relative, @name = root, relative, name - end - - attr_reader :root, :relative, :name - - def children - child_relative = _join - (Dir.entries(sys_path) - %w(. ..)).map do |name| - Entry.new(@root, child_relative, name) - end - end - - def meta - lstat = ::File.lstat(sys_path) - { mtime: lstat.mtime.to_f, mode: lstat.mode } - end - - # record hash is e.g. - # if @record["/home/me/watched_dir"]["project/app/models"]["foo.rb"] - # if @record["/home/me/watched_dir"]["project/app"]["models"] - # record_dir_key is "project/app/models" - def record_dir_key - ::File.join(*[@relative, @name].compact) - end - - def sys_path - # Use full path in case someone uses chdir - ::File.join(*[@root, @relative, @name].compact) - end - - def real_path - @real_path ||= ::File.realpath(sys_path) - end - - private - - def _join - args = [@relative, @name].compact - args.empty? ? nil : ::File.join(*args) - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/record/symlink_detector.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/record/symlink_detector.rb deleted file mode 100644 index 48d2200..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/record/symlink_detector.rb +++ /dev/null @@ -1,39 +0,0 @@ -require 'set' - -module Listen - # @private api - class Record - class SymlinkDetector - WIKI = 'https://github.com/guard/listen/wiki/Duplicate-directory-errors' - - SYMLINK_LOOP_ERROR = <<-EOS - ** ERROR: directory is already being watched! ** - - Directory: %s - - is already begin watched through: %s - - MORE INFO: #{WIKI} - EOS - - class Error < RuntimeError - end - - def initialize - @real_dirs = Set.new - end - - def verify_unwatched!(entry) - real_path = entry.real_path - @real_dirs.add?(real_path) || _fail(entry.sys_path, real_path) - end - - private - - def _fail(symlinked, real_path) - STDERR.puts format(SYMLINK_LOOP_ERROR, symlinked, real_path) - fail Error, 'Failed due to looped symlinks' - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/silencer.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/silencer.rb deleted file mode 100644 index 3c9f84b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/silencer.rb +++ /dev/null @@ -1,97 +0,0 @@ -module Listen - class Silencer - # The default list of directories that get ignored. - DEFAULT_IGNORED_DIRECTORIES = %r{^(?: - \.git - | \.svn - | \.hg - | \.rbx - | \.bundle - | bundle - | vendor/bundle - | log - | tmp - |vendor/ruby - )(/|$)}x - - # The default list of files that get ignored. - DEFAULT_IGNORED_EXTENSIONS = /(?: - # Kate's tmp\/swp files - \..*\d+\.new - | \.kate-swp - - # Gedit tmp files - | \.goutputstream-.{6} - - # Intellij files - | ___jb_bak___ - | ___jb_old___ - - # Vim swap files and write test - | \.sw[px] - | \.swpx - | ^4913 - - # Sed temporary files - but without actual words, like 'sedatives' - | (?:^ - sed - - (?: - [a-zA-Z0-9]{0}[A-Z]{1}[a-zA-Z0-9]{5} | - [a-zA-Z0-9]{1}[A-Z]{1}[a-zA-Z0-9]{4} | - [a-zA-Z0-9]{2}[A-Z]{1}[a-zA-Z0-9]{3} | - [a-zA-Z0-9]{3}[A-Z]{1}[a-zA-Z0-9]{2} | - [a-zA-Z0-9]{4}[A-Z]{1}[a-zA-Z0-9]{1} | - [a-zA-Z0-9]{5}[A-Z]{1}[a-zA-Z0-9]{0} - ) - ) - - # other files - | \.DS_Store - | \.tmp - | ~ - )$/x - - attr_accessor :only_patterns, :ignore_patterns - - def initialize - configure({}) - end - - def configure(options) - @only_patterns = options[:only] ? Array(options[:only]) : nil - @ignore_patterns = _init_ignores(options[:ignore], options[:ignore!]) - end - - # Note: relative_path is temporarily expected to be a relative Pathname to - # make refactoring easier (ideally, it would take a string) - - # TODO: switch type and path places - and verify - def silenced?(relative_path, type) - path = relative_path.to_s - - if only_patterns && type == :file - return true unless only_patterns.any? { |pattern| path =~ pattern } - end - - ignore_patterns.any? { |pattern| path =~ pattern } - end - - private - - attr_reader :options - - def _init_ignores(ignores, overrides) - patterns = [] - unless overrides - patterns << DEFAULT_IGNORED_DIRECTORIES - patterns << DEFAULT_IGNORED_EXTENSIONS - end - - patterns << ignores - patterns << overrides - - patterns.compact.flatten - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/tcp.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/tcp.rb deleted file mode 100644 index c784c22..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/tcp.rb +++ /dev/null @@ -1,8 +0,0 @@ -begin - require 'celluloid/io' -rescue LoadError - Kernel.fail 'TCP forwarding requires Celluloid::IO to be present. ' \ - "Please install or add as a dependency: gem 'celluloid-io'" -end - -require 'listen/adapter/tcp' diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/tcp/broadcaster.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/tcp/broadcaster.rb deleted file mode 100644 index 85d6fcb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/tcp/broadcaster.rb +++ /dev/null @@ -1,79 +0,0 @@ -require 'celluloid/io' - -module Listen - module TCP - class Broadcaster - include Celluloid::IO - - finalizer :finalize - - # Initializes a Celluloid::IO-powered TCP-broadcaster - # - # @param [String] host to broadcast on - # @param [String] port to broadcast on - # - # Note: Listens on all addresses when host is nil - # - def initialize(host, port) - @sockets = [] - _log :debug, format('Broadcaster: tcp server listening on: %s:%s', - host, port) - @server = TCPServer.new(host, port) - rescue - _log :error, format('Broadcaster.initialize: %s:%s', $ERROR_INFO, - $ERROR_POSITION * "\n") - raise - end - - # Asynchronously start accepting connections - def start - async.run - end - - # Cleans up sockets and server - def finalize - @sockets.map(&:close) if @sockets - @sockets = nil - - return unless @server - @server.close - @server = nil - end - - # Broadcasts given payload to all connected sockets - def broadcast(payload) - active_sockets = @sockets.select do |socket| - _unicast(socket, payload) - end - @sockets.replace(active_sockets) - end - - # Continuously accept and handle incoming connections - def run - while (socket = @server.accept) - @sockets << socket - end - rescue Celluloid::Task::TerminatedError - _log :debug, "TCP adapter was terminated: #{$ERROR_INFO}" - rescue - _log :error, format('Broadcaster.run: %s:%s', $ERROR_INFO, - $ERROR_POSITION * "\n") - raise - end - - private - - def _log(type, message) - Celluloid::Logger.send(type, message) - end - - def _unicast(socket, payload) - socket.write(payload) - true - rescue IOError, Errno::ECONNRESET, Errno::EPIPE - _log :debug, "Broadcaster failed: #{socket.inspect}" - false - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/tcp/message.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/tcp/message.rb deleted file mode 100644 index eafd8b6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/tcp/message.rb +++ /dev/null @@ -1,50 +0,0 @@ -require 'json' - -module Listen - module TCP - class Message - attr_reader :body, :object, :payload, :size - - HEADER_SIZE = 4 - HEADER_FORMAT = 'N' - PAYLOAD_FORMAT = "#{HEADER_FORMAT}a*" - - # Initializes a new message - # - # @param [Object] object to initialize message with - # - def initialize(*args) - self.object = args - end - - # Generates message size and payload for given object - def object=(obj) - @object = obj - @body = JSON.generate(@object) - @size = @body.bytesize - @payload = [@size, @body].pack(PAYLOAD_FORMAT) - end - - # Extracts message size and loads object from given payload - def payload=(payload) - @payload = payload - @size, @body = @payload.unpack(PAYLOAD_FORMAT) - @object = JSON.parse(@body) - end - - # Extracts a message from given buffer - def self.from_buffer(buffer) - if buffer.bytesize > HEADER_SIZE - size = buffer.unpack(HEADER_FORMAT).first - payload_size = HEADER_SIZE + size - if buffer.bytesize >= payload_size - payload = buffer.slice!(0...payload_size) - new.tap do |message| - message.payload = payload - end - end - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/version.rb b/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/version.rb deleted file mode 100644 index f166af6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/listen-2.10.0/lib/listen/version.rb +++ /dev/null @@ -1,3 +0,0 @@ -module Listen - VERSION = '2.10.0' -end diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/.gitignore b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/.gitignore deleted file mode 100644 index d87d4be..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -*.gem -*.rbc -.bundle -.config -.yardoc -Gemfile.lock -InstalledFiles -_yardoc -coverage -doc/ -lib/bundler/man -pkg -rdoc -spec/reports -test/tmp -test/version_tmp -tmp diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/.rspec b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/.rspec deleted file mode 100644 index 5f16476..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/.rspec +++ /dev/null @@ -1,2 +0,0 @@ ---color ---format progress diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/.travis.yml b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/.travis.yml deleted file mode 100644 index d7c261d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -language: ruby -rvm: - - 1.9.3 - - 2.0.0 - - 2.1 -sudo: false -cache: bundler -before_script: bundle update -script: "./script/cibuild" -notifications: - email: - recipients: - - mercenary@jekyllrb.com - on_success: change - on_failure: change diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/Gemfile b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/Gemfile deleted file mode 100644 index 50c90db..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -# Specify your gem's dependencies in mercenary.gemspec -gemspec diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/History.markdown b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/History.markdown deleted file mode 100644 index 1e0c62e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/History.markdown +++ /dev/null @@ -1,107 +0,0 @@ -## 0.3.5 / 2014-11-12 - -### Bug Fixes - - * Capture `OptionsParser::InvalidOption` and show a nice error message (#38) - * Absolute paths for requires and autoloads (#39) - -### Development Fixes - - * Bump to RSpec 3 (#40) - -## 0.3.4 / 2014-07-11 - -### Bug Fixes - -* Use option object as key in the command's `@map` hash (#35) - -## 0.3.3 / 2014-05-07 - -### Bug Fixes - -* The `--version` flag should not exit with code 1, but instead code 0. (#33) - -## 0.3.2 / 2014-03-18 - -### Bug Fixes - -* Remove duplicate commands from help output; show aliases w/command names - (#29) - -## 0.3.1 / 2014-02-21 - -### Minor Enhancements - -* Add `-t/--trace` to list of options in help message (#19) - -### Bug Fixes - -* `Mercenary::Option` now accepts return values in the form of Class constants - (#22) - -## 0.3.0 / 2014-02-20 - -### Major Enhancements - -* Officially drop 1.8.7 support (#14) -* Allow Commands to set their own versions (#17) -* Show subcommands, options and usage in help and attach to all commands (#18) -* Add `-t, --trace` to allow full exception backtrace to print, otherwise print - just the error message (#19) - -### Minor Enhancements - -* Logging state is maintained throughout process (#12) -* Tidy up Command#logger output (#21) - -### Development Fixes - -* Added specs for `Program` (#13) - -## 0.2.1 / 2013-12-25 - -### Bug Fixes - -* Added missing comma to fix '-v' and '--version' options (#9) - -## 0.2.0 / 2013-11-30 - -### Major Enhancements - -* Add `Command#default_command` to specify a default command if none is given - by the user at runtime (#7) - -### Minor Enhancements - -* Add `Command#execute` to execute the actions of a command (#6) - -### Development Fixes - -* Add standard GitHub bootstrap and cibuild scripts to `script/` (#2) - -## 0.1.0 / 2013-11-08 - -### Major Enhancements - -* It works! - -### Minor Enhancements - -* Add a logger to `Command` -* Add `--version` switch to all programs - -### Bug Fixes - -* Fix `Command#syntax` and `Command#description`'s handing of setting vs getting -* Fix load path problem in `lib/mercenary.rb` - -### Development Fixes - -* Add TomDoc to everything -* Add a couple starter specs -* Add TravisCI badge -* Add Travis configuration - -## 0.0.1 / 2013-11-06 - -* Birthday! diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/LICENSE.txt b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/LICENSE.txt deleted file mode 100644 index 354c0b2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2013-2014 Parker Moore - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/README.md b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/README.md deleted file mode 100644 index ed9b1a1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/README.md +++ /dev/null @@ -1,250 +0,0 @@ -# Mercenary - -Lightweight and flexible library for writing command-line apps in Ruby. - -[![Build Status](https://secure.travis-ci.org/jekyll/mercenary.png)](https://travis-ci.org/jekyll/mercenary) - -## Installation - -Add this line to your application's Gemfile: - - gem 'mercenary' - -And then execute: - - $ bundle - -Or install it yourself as: - - $ gem install mercenary - -**Note: Mercenary may not work with Ruby < 1.9.3.** - -## Usage - -Creating programs and commands with Mercenary is easy: - -```ruby -Mercenary.program(:jekyll) do |p| - p.version Jekyll::VERSION - p.description 'Jekyll is a blog-aware, static site generator in Ruby' - p.syntax "jekyll [options]" - - p.command(:new) do |c| - c.syntax "new PATH" # do not include the program name or super commands - c.description "Creates a new Jekyll site scaffold in PATH" - c.option 'blank', '--blank', 'Initialize the new site without any content.' - - c.action do |args, options| - Jekyll::Commands::New.process(args, blank: options['blank']) - end - end - - p.command(:build) do |c| - c.syntax "build [options]" - c.description "Builds your Jekyll site" - - c.option 'safe', '--safe', 'Run in safe mode' - c.option 'source', '--source DIR', 'From where to collect the source files' - c.option 'destination', '--dest DIR', 'To where the compiled files should be written' - - c.action do |_, options| - Jekyll::Commands::Build.process(options) - end - end - - # Bring in command bundled in external gem - begin - require "jekyll-import" - JekyllImport.init_with_program(p) - rescue LoadError - end - - p.default_command(:build) -end -``` - -All commands have the following default options: - -- `-h/--help` - show a help message -- `-v/--version` - show the program version -- `-t/--trace` - show the full backtrace when an error occurs - -## API - -### `Mercenary` - -#### `.program` - -Creates and executes a program. Accepts two arguments: - -- `name` - program name as a Symbol -- `block` - the specification for the program, passed the program instance as an - argument. - -Example is above, under the heading [Usage](#usage). - -### `Program` - -`Program` is a subclass of `Command`, so it has all of the methods documented -below as well as those for `Command`. - -#### `#config` - -Fetches the program configuration hash. - -### `Command` - -#### `#new` - -Create a new command. Accepts two arguments: - -- `name` - the name of your command, as a symbol -- `parent` - (optional) the parent Command - -#### `#version` - -Sets or gets the version of the command. Accepts an optional argument: - -- `version` - (optional) the version to set for the command. If present, this - becomes the new version for the command and persists. - -#### `#syntax` - -Sets or gets the syntax of the command. Built on parent syntaxes if a parent -exists. Accepts one optional argument: - -- `syntax` - (optional) the syntax to set for the command. Will inherit from the - parent commands or program. Usually in the form of - `"command_name [OPTIONS]"` - -When a parent command exists, say `supercommand`, with syntax set as -`supercommand [OPTIONS]`, the syntax of the command in question -will be `supercommand command_name [OPTIONS]` with both -`` and `[OPTIONS]` stripped out. Any text between `<` and `>` or -between `[` and `]` will be stripped from parent command syntaxes. The purpose -of this chaining is to reduce redundancy. - -#### `#description` - -Sets or gets the description of the command. Accepts one optional argument: - -- `desc` - (optional) the description to set for the command. If - provided, will override any previous description set for the command. - -#### `#default_command` - -Sets or gets the default subcommand of the command to execute in the event no -subcommand is passed during execution. Accepts one optional argument: - -- `command_name` - (optional) the `Symbol` name of the subcommand to be - executed. Raises an `ArgumentError` if the subcommand doesn't exist. - Overwrites previously-set default commands. - -#### `#option` - -Adds a new option to the command. Accepts many arguments: - -- `config_key` - the configuration key that the value of this option maps to. -- `*options` - all the options, globbed, to be passed to `OptionParser`, namely the - switches and the option description. Usually in the format - `"-s", "--switch", "Sets the 'switch' flag"`. - -Valid option calls: - -```ruby -cmd.option 'config_key', '-c', 'Sets the "config" flag' -cmd.option 'config_key', '--config', 'Sets the "config" flag' -cmd.option 'config_key', '-c', '--config', 'Sets the "config" flag.' -cmd.option 'config_key', '-c FILE', '--config FILE', 'The config file.' -cmd.option 'config_key', '-c FILE1[,FILE2[,FILE3...]]', '--config FILE1[,FILE2[,FILE3...]]', Array, 'The config files.' -``` - -Notice that you can specify either a short switch, a long switch, or both. If -you want to accept an argument, you have to specify it in the switch strings. -The class of the argument defaults to `String`, but you can optionally set a -different class to create, e.g. `Array`, if you are expecting a particular class -in your code from this option's value. The description is also optional, but -it's highly recommended to include a description. - -#### `#alias` - -Specifies an alias for this command such that the alias may be used in place of -the command during execution. Accepts one argument: - -- `cmd_name` - the alias name for this command as a `Symbol` - -Example: - -```ruby -cmd.alias(:my_alias) -# Now `cmd` is now also executable via "my_alias" -``` - -#### `#action` - -Specifies a block to be executed in the event the command is specified at -runtime. The block is given two arguments: - -- `args` - the non-switch arguments given from the command-line -- `options` - the options hash built via the switches passed - -**Note that actions are additive**, meaning any new call to `#action` will -result in another action to be executed at runtime. Actions will be executed in -the order they are specified in. - -Example: - -```ruby -cmd.action do |args, options| - # do something! -end -``` - -#### `#logger` - -Access the logger for this command. Useful for outputting information to STDOUT. -Accepts one optional argument: - -- `level` - (optional) the severity threshold at which to begin logging. Uses - Ruby's built-in - [`Logger`](http://www.ruby-doc.org/stdlib-2.1.0/libdoc/logger/rdoc/Logger.html) - levels. - -Log level defaults to `Logger::INFO`. - -Examples: - -```ruby -cmd.logger(Logger::DEBUG) -cmd.logger.debug "My debug message." -cmd.logger.info "My informative message." -cmd.logger.warn "ACHTUNG!!" -cmd.logger.error "Something terrible has happened." -cmd.logger.fatal "I can't continue doing what I'm doing." -``` - -#### `#command` - -Creates a new subcommand for the current command. Accepts two arguments: - -- `cmd_name` - the command name, as a Symbol -- `block` - the specification of the subcommand in a block - -Example: - -```ruby -my_command.command(:my_subcommand) do |subcmd| - subcmd.description 'My subcommand' - subcmd.syntax 'my_subcommand [OPTIONS]' - # ... -end -``` - -## Contributing - -1. Fork it -2. Create your feature branch (`git checkout -b my-new-feature`) -3. Commit your changes (`git commit -am 'Add some feature'`) -4. Push to the branch (`git push origin my-new-feature`) -5. Create new Pull Request diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/Rakefile b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/Rakefile deleted file mode 100644 index 2995527..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/Rakefile +++ /dev/null @@ -1 +0,0 @@ -require "bundler/gem_tasks" diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/examples/help_dialogue.rb b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/examples/help_dialogue.rb deleted file mode 100755 index 807e587..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/examples/help_dialogue.rb +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env ruby - -$:.unshift File.join(File.dirname(__FILE__), *%w{ .. lib }) - -require "mercenary" - -# This example sets the logging mode of mercenary to -# debug. Logging messages from "p.logger.debug" will -# be output to STDOUT. - -Mercenary.program(:help_dialogue) do |p| - - p.version "2.0.1" - p.description 'An example of the help dialogue in Mercenary' - p.syntax 'help_dialogue ' - - p.command(:some_subcommand) do |c| - c.version '1.4.2' - c.syntax 'some_subcommand [options]' - c.description 'Some subcommand to do something' - c.option 'an_option', '-o', '--option', 'Some option' - c.alias(:blah) - - c.command(:yet_another_sub) do |f| - f.syntax 'yet_another_sub [options]' - f.description 'Do amazing things' - f.option 'blah', '-b', '--blah', 'Trigger blah flag' - f.option 'heh', '-H ARG', '--heh ARG', 'Give a heh' - - f.action do |args, options| - print "Args: " - p args - print "Opts: " - p options - end - end - end - - p.command(:another_subcommand) do |c| - c.syntax 'another_subcommand [options]' - c.description 'Another subcommand to do something different.' - c.option 'an_option', '-O', '--option', 'Some option' - c.option 'another_options', '--pluginzzz', 'Set where the plugins should be found from' - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/examples/logging.rb b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/examples/logging.rb deleted file mode 100644 index 2cb867a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/examples/logging.rb +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env ruby - -$:.unshift File.join(File.dirname(__FILE__), *%w{ .. lib }) - -require "mercenary" - -# This example sets the logging mode of mercenary to -# debug. Logging messages from "p.logger.debug" will -# be output to STDOUT. - -Mercenary.program(:logger_output) do |p| - - p.version "5.2.6" - p.description 'An example of turning on logging for Mercenary.' - p.syntax 'logger_output' - - - p.logger.info "The default log level is INFO. So this will output." - p.logger.debug "Since DEBUG is below INFO, this will not output." - - p.logger(Logger::DEBUG) - p.logger.debug "Logger level now set to DEBUG. So everything will output." - - p.logger.debug "Example of DEBUG level message." - p.logger.info "Example of INFO level message." - p.logger.warn "Example of WARN level message." - p.logger.error "Example of ERROR level message." - p.logger.fatal "Example of FATAL level message." - p.logger.unknown "Example of UNKNOWN level message." - - p.action do |args, options| - - p.logger(Logger::INFO) - p.logger.debug "Logger level back to INFO. This line will not output." - p.logger.info "This INFO message will output." - - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/examples/trace.rb b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/examples/trace.rb deleted file mode 100644 index 0aaa365..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/examples/trace.rb +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env ruby - -$:.unshift File.join(File.dirname(__FILE__), *%w{ .. lib }) - -require "mercenary" - -# This example sets the logging mode of mercenary to -# debug. Logging messages from "p.logger.debug" will -# be output to STDOUT. - -Mercenary.program(:trace) do |p| - - p.version "2.0.1" - p.description 'An example of traces in Mercenary' - p.syntax 'trace ' - - p.action do |_, _| - raise ArgumentError.new("YOU DID SOMETHING TERRIBLE YOU BUFFOON") - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/lib/mercenary.rb b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/lib/mercenary.rb deleted file mode 100644 index 1c4be62..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/lib/mercenary.rb +++ /dev/null @@ -1,21 +0,0 @@ -require File.expand_path("../mercenary/version", __FILE__) -require "optparse" -require "logger" - -module Mercenary - autoload :Command, File.expand_path("../mercenary/command", __FILE__) - autoload :Option, File.expand_path("../mercenary/option", __FILE__) - autoload :Presenter, File.expand_path("../mercenary/presenter", __FILE__) - autoload :Program, File.expand_path("../mercenary/program", __FILE__) - - # Public: Instantiate a new program and execute. - # - # name - the name of your program - # - # Returns nothing. - def self.program(name) - program = Program.new(name) - yield program - program.go(ARGV) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/lib/mercenary/command.rb b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/lib/mercenary/command.rb deleted file mode 100644 index 0bcc4dd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/lib/mercenary/command.rb +++ /dev/null @@ -1,280 +0,0 @@ -module Mercenary - class Command - attr_reader :name - attr_reader :description - attr_reader :syntax - attr_accessor :options - attr_accessor :commands - attr_accessor :actions - attr_reader :map - attr_accessor :parent - attr_reader :trace - attr_reader :aliases - - # Public: Creates a new Command - # - # name - the name of the command - # parent - (optional) the instancce of Mercenary::Command which you wish to - # be the parent of this command - # - # Returns nothing - def initialize(name, parent = nil) - @name = name - @options = [] - @commands = {} - @actions = [] - @map = {} - @parent = parent - @trace = false - @aliases = [] - end - - # Public: Sets or gets the command version - # - # version - the command version (optional) - # - # Returns the version and sets it if an argument is non-nil - def version(version = nil) - @version = version if version - @version - end - - # Public: Sets or gets the syntax string - # - # syntax - the string which describes this command's usage syntax (optional) - # - # Returns the syntax string and sets it if an argument is present - def syntax(syntax = nil) - @syntax = syntax if syntax - syntax_list = [] - if parent - syntax_list << parent.syntax.to_s.gsub(/<[\w\s-]+>/, '').gsub(/\[[\w\s-]+\]/, '').strip - end - syntax_list << (@syntax || name.to_s) - syntax_list.join(" ") - end - - # Public: Sets or gets the command description - # - # description - the description of what the command does (optional) - # - # Returns the description and sets it if an argument is present - def description(desc = nil) - @description = desc if desc - @description - end - - # Public: Sets the default command - # - # command_name - the command name to be executed in the event no args are - # present - # - # Returns the default command if there is one, `nil` otherwise - def default_command(command_name = nil) - if command_name - if commands.has_key?(command_name) - @default_command = commands[command_name] if command_name - @default_command - else - raise ArgumentError.new("'#{command_name}' couldn't be found in this command's list of commands.") - end - else - @default_command - end - end - - # Public: Adds an option switch - # - # sym - the variable key which is used to identify the value of the switch - # at runtime in the options hash - # - # Returns nothing - def option(sym, *options) - new_option = Option.new(sym, options) - @options << new_option - @map[new_option] = sym - end - - # Public: Adds a subcommand - # - # cmd_name - the name of the command - # block - a block accepting the new instance of Mercenary::Command to be - # modified (optional) - # - # Returns nothing - def command(cmd_name) - cmd = Command.new(cmd_name, self) - yield cmd - @commands[cmd_name] = cmd - end - - # Public: Add an alias for this command's name to be attached to the parent - # - # cmd_name - the name of the alias - # - # Returns nothing - def alias(cmd_name) - logger.debug "adding alias to parent for self: '#{cmd_name}'" - aliases << cmd_name - @parent.commands[cmd_name] = self - end - - # Public: Add an action Proc to be executed at runtime - # - # block - the Proc to be executed at runtime - # - # Returns nothing - def action(&block) - @actions << block - end - - # Public: Fetch a Logger (stdlib) - # - # level - the logger level (a Logger constant, see docs for more info) - # - # Returns the instance of Logger - def logger(level = nil) - unless @logger - @logger = Logger.new(STDOUT) - @logger.level = level || Logger::INFO - @logger.formatter = proc do |severity, datetime, progname, msg| - "#{identity} | " << "#{severity.downcase.capitalize}:".ljust(7) << " #{msg}\n" - end - end - - @logger.level = level unless level.nil? - @logger - end - - # Public: Run the command - # - # argv - an array of string args - # opts - the instance of OptionParser - # config - the output config hash - # - # Returns the command to be executed - def go(argv, opts, config) - opts.banner = "Usage: #{syntax}" - process_options(opts, config) - add_default_options(opts) - - if argv[0] && cmd = commands[argv[0].to_sym] - logger.debug "Found subcommand '#{cmd.name}'" - argv.shift - cmd.go(argv, opts, config) - else - logger.debug "No additional command found, time to exec" - self - end - end - - # Public: Add this command's options to OptionParser and set a default - # action of setting the value of the option to the inputted hash - # - # opts - instance of OptionParser - # config - the Hash in which the option values should be placed - # - # Returns nothing - def process_options(opts, config) - options.each do |option| - opts.on(*option.for_option_parser) do |x| - config[map[option]] = x - end - end - end - - # Public: Add version and help options to the command - # - # opts - instance of OptionParser - # - # Returns nothing - def add_default_options(opts) - option 'show_help', '-h', '--help', 'Show this message' - option 'show_version', '-v', '--version', 'Print the name and version' - option 'show_backtrace', '-t', '--trace', 'Show the full backtrace when an error occurs' - opts.on("-v", "--version", "Print the version") do - puts "#{name} #{version}" - exit(0) - end - - opts.on('-t', '--trace', 'Show full backtrace if an error occurs') do - @trace = true - end - - opts.on_tail("-h", "--help", "Show this message") do - puts self - exit - end - end - - # Public: Execute all actions given the inputted args and options - # - # argv - (optional) command-line args (sans opts) - # config - (optional) the Hash configuration of string key to value - # - # Returns nothing - def execute(argv = [], config = {}) - if actions.empty? && !default_command.nil? - default_command.execute - else - actions.each { |a| a.call(argv, config) } - end - end - - # Public: Check if this command has a subcommand - # - # sub_command - the name of the subcommand - # - # Returns true if this command is the parent of a command of name - # 'sub_command' and false otherwise - def has_command?(sub_command) - commands.keys.include?(sub_command) - end - - # Public: Identify this command - # - # Returns a string which identifies this command - def ident - "" - end - - # Public: Get the full identity (name & version) of this command - # - # Returns a string containing the name and version if it exists - def identity - "#{full_name} #{version if version}".strip - end - - # Public: Get the name of the current command plus that of - # its parent commands - # - # Returns the full name of the command - def full_name - the_name = [] - the_name << parent.full_name if parent && parent.full_name - the_name << name - the_name.join(" ") - end - - # Public: Return all the names and aliases for this command. - # - # Returns a comma-separated String list of the name followed by its aliases - def names_and_aliases - ([name.to_s] + aliases).compact.join(", ") - end - - # Public: Build a string containing a summary of the command - # - # Returns a one-line summary of the command. - def summarize - " #{names_and_aliases.ljust(20)} #{description}" - end - - # Public: Build a string containing the command name, options and any subcommands - # - # Returns the string identifying this command, its options and its subcommands - def to_s - Presenter.new(self).print_command - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/lib/mercenary/option.rb b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/lib/mercenary/option.rb deleted file mode 100644 index 56a49b6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/lib/mercenary/option.rb +++ /dev/null @@ -1,87 +0,0 @@ -module Mercenary - class Option - attr_reader :config_key, :description, :short, :long, :return_type - - # Public: Create a new Option - # - # config_key - the key in the config hash to which the value of this option - # will map - # info - an array containing first the switches, then an optional - # return type (e.g. Array), then a description of the option - # - # Returns nothing - def initialize(config_key, info) - @config_key = config_key - while arg = info.shift - begin - @return_type = Object.const_get("#{arg}") - next - rescue NameError - end - if arg.start_with?("-") - if arg.start_with?("--") - @long = arg - else - @short = arg - end - next - end - @description = arg - end - end - - # Public: Fetch the array containing the info OptionParser is interested in - # - # Returns the array which OptionParser#on wants - def for_option_parser - [short, long, return_type, description].flatten.reject{ |o| o.to_s.empty? } - end - - # Public: Build a string representation of this option including the - # switches and description - # - # Returns a string representation of this option - def to_s - "#{formatted_switches} #{description}" - end - - # Public: Build a beautifully-formatted string representation of the switches - # - # Returns a formatted string representation of the switches - def formatted_switches - [ - switches.first.rjust(10), - switches.last.ljust(13) - ].join(", ").gsub(/ , /, ' ').gsub(/, /, ' ') - end - - # Public: Hash based on the hash value of instance variables - # - # Returns a Fixnum which is unique to this Option based on the instance variables - def hash - instance_variables.map do |var| - instance_variable_get(var).hash - end.reduce(:^) - end - - # Public: Check equivalence of two Options based on equivalence of their - # instance variables - # - # Returns true if all the instance variables are equal, false otherwise - def eql?(other) - return false unless self.class.eql?(other.class) - instance_variables.map do |var| - instance_variable_get(var).eql?(other.instance_variable_get(var)) - end.all? - end - - # Public: Fetch an array of switches, including the short and long versions - # - # Returns an array of two strings. An empty string represents no switch in - # that position. - def switches - [short, long].map(&:to_s) - end - - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/lib/mercenary/presenter.rb b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/lib/mercenary/presenter.rb deleted file mode 100644 index 0e1af39..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/lib/mercenary/presenter.rb +++ /dev/null @@ -1,80 +0,0 @@ -module Mercenary - class Presenter - attr_accessor :command - - # Public: Make a new Presenter - # - # command - a Mercenary::Command to present - # - # Returns nothing - def initialize(command) - @command = command - end - - # Public: Builds a string representation of the command usage - # - # Returns the string representation of the command usage - def usage_presentation - " #{command.syntax}" - end - - # Public: Builds a string representation of the options - # - # Returns the string representation of the options - def options_presentation - return nil unless command.options.size > 0 - command.options.map(&:to_s).join("\n") - end - - # Public: Builds a string representation of the subcommands - # - # Returns the string representation of the subcommands - def subcommands_presentation - return nil unless command.commands.size > 0 - command.commands.values.uniq.map(&:summarize).join("\n") - end - - # Public: Builds the command header, including the command identity and description - # - # Returns the command header as a String - def command_header - header = "#{command.identity}" - header << " -- #{command.description}" if command.description - header - end - - # Public: Builds a string representation of the whole command - # - # Returns the string representation of the whole command - def command_presentation - msg = [] - msg << command_header - msg << "Usage:" - msg << usage_presentation - - if opts = options_presentation - msg << "Options:\n#{opts}" - end - if subcommands = subcommands_presentation - msg << "Subcommands:\n#{subcommands_presentation}" - end - msg.join("\n\n") - end - - # Public: Turn a print_* into a *_presentation or freak out - # - # meth - the method being called - # args - an array of arguments passed to the missing method - # block - the block passed to the missing method - # - # Returns the value of whatever function is called - def method_missing(meth, *args, &block) - if meth.to_s =~ /^print_(.+)$/ - send("#{$1.downcase}_presentation") - else - super # You *must* call super if you don't handle the method, - # otherwise you'll mess up Ruby's method lookup. - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/lib/mercenary/program.rb b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/lib/mercenary/program.rb deleted file mode 100644 index 53591c0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/lib/mercenary/program.rb +++ /dev/null @@ -1,53 +0,0 @@ -module Mercenary - class Program < Command - attr_reader :optparse - attr_reader :config - - # Public: Creates a new Program - # - # name - the name of the program - # - # Returns nothing - def initialize(name) - @config = {} - super(name) - end - - # Public: Run the program - # - # argv - an array of string args (usually ARGV) - # - # Returns nothing - def go(argv) - logger.debug("Using args passed in: #{argv.inspect}") - - cmd = nil - - @optparse = OptionParser.new do |opts| - cmd = super(argv, opts, @config) - end - - begin - @optparse.parse!(argv) - rescue OptionParser::InvalidOption => e - logger.error "Whoops, we can't understand your command." - logger.error "#{e.message}" - logger.error "Run your command again with the --help switch to see available options." - abort - end - - logger.debug("Parsed config: #{@config.inspect}") - - begin - cmd.execute(argv, @config) - rescue => e - if cmd.trace - raise e - else - logger.error e.message - abort - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/lib/mercenary/version.rb b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/lib/mercenary/version.rb deleted file mode 100644 index 65ae544..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/lib/mercenary/version.rb +++ /dev/null @@ -1,3 +0,0 @@ -module Mercenary - VERSION = "0.3.5" -end diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/mercenary.gemspec b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/mercenary.gemspec deleted file mode 100644 index e9f8294..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/mercenary.gemspec +++ /dev/null @@ -1,24 +0,0 @@ -# coding: utf-8 -lib = File.expand_path('../lib', __FILE__) -$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) -require 'mercenary/version' - -Gem::Specification.new do |spec| - spec.name = "mercenary" - spec.version = Mercenary::VERSION - spec.authors = ["Tom Preston-Werner", "Parker Moore"] - spec.email = ["tom@mojombo.com", "parkrmoore@gmail.com"] - spec.description = %q{Lightweight and flexible library for writing command-line apps in Ruby.} - spec.summary = %q{Lightweight and flexible library for writing command-line apps in Ruby.} - spec.homepage = "https://github.com/jekyll/mercenary" - spec.license = "MIT" - - spec.files = `git ls-files`.split($/) - spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } - spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) - spec.require_paths = ["lib"] - - spec.add_development_dependency "bundler", "~> 1.3" - spec.add_development_dependency "rake" - spec.add_development_dependency "rspec", "~> 3.0" -end diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/script/bootstrap b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/script/bootstrap deleted file mode 100755 index a0cf262..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/script/bootstrap +++ /dev/null @@ -1,7 +0,0 @@ -#! /bin/sh - -set -e - -echo "Time to get set up." -bundle install -echo "Boom." diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/script/cibuild b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/script/cibuild deleted file mode 100755 index 260e363..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/script/cibuild +++ /dev/null @@ -1,6 +0,0 @@ -#! /bin/sh - -set -ex - -bundle exec rspec -./script/examples diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/script/console b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/script/console deleted file mode 100755 index 27ed279..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/script/console +++ /dev/null @@ -1,3 +0,0 @@ -#! /bin/bash - -irb -r./lib/mercenary.rb diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/script/examples b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/script/examples deleted file mode 100755 index a722ab3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/script/examples +++ /dev/null @@ -1,18 +0,0 @@ -#! /bin/bash - -set -e - -function run () { - echo "+ ruby ./examples/$@" - ruby -e "puts '=' * 79" - ruby ./examples/$@ - ruby -e "puts '=' * 79" -} - -run logging.rb -run logging.rb -v -run help_dialogue.rb -h -run help_dialogue.rb some_subcommand -h -run help_dialogue.rb another_subcommand -h -run help_dialogue.rb some_subcommand yet_another_sub -h -run help_dialogue.rb some_subcommand yet_another_sub -b diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/spec/command_spec.rb b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/spec/command_spec.rb deleted file mode 100644 index e1c029a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/spec/command_spec.rb +++ /dev/null @@ -1,98 +0,0 @@ -require "spec_helper" - -describe(Mercenary::Command) do - - context "a basic command" do - let(:command) { Mercenary::Command.new(:my_name) } - let(:parent) { Mercenary::Command.new(:my_parent) } - let(:with_sub) do - c = Mercenary::Command.new(:i_have_subcommand) - add_sub.call(c) - c - end - let(:command_with_parent) do - Mercenary::Command.new( - :i_have_parent, - parent - ) - end - let(:add_sub) do - Proc.new do |c| - c.command(:sub_command) { |p| } - end - end - - it "can be created with just a name" do - expect(command.name).to eql(:my_name) - end - - it "can hold a parent command" do - expect(command_with_parent.parent).to eql(parent) - end - - it "can create subcommands" do - expect(add_sub.call(command)).to be_a(Mercenary::Command) - expect(add_sub.call(command).parent).to eq(command) - end - - it "can set its version" do - version = "1.4.2" - command.version version - expect(command.version).to eq(version) - end - - it "can set its syntax" do - syntax_string = "my_name [options]" - cmd = described_class.new(:my_name) - cmd.syntax syntax_string - expect(cmd.syntax).to eq(syntax_string) - end - - it "can set its description" do - desc = "run all the things" - command.description desc - expect(command.description).to eq(desc) - end - - it "can set its options" do - name = "show_drafts" - opts = ['--drafts', 'Render posts in the _drafts folder'] - option = Mercenary::Option.new(name, opts) - command.option name, *opts - expect(command.options).to eql([option]) - expect(command.map.values).to include(name) - end - - it "knows its full name" do - expect(command_with_parent.full_name).to eql("my_parent i_have_parent") - end - - it "knows its identity" do - command_with_parent.version '1.8.7' - expect(command_with_parent.identity).to eql("my_parent i_have_parent 1.8.7") - end - - it "raises an ArgumentError if I specify a default_command that isn't there" do - c = command # some weird NameError with the block below? - expect { c.default_command(:nope) }.to raise_error(ArgumentError) - end - - it "sets the default_command" do - expect(with_sub.default_command(:sub_command).name).to eq(:sub_command) - end - - context "with an alias" do - before(:each) do - command_with_parent.alias(:an_alias) - end - it "shows the alias in the summary" do - expect(command_with_parent.summarize).to eql(" i_have_parent, an_alias ") - end - - it "its names_and_aliases method reports both the name and alias" do - expect(command_with_parent.names_and_aliases).to eql("i_have_parent, an_alias") - end - end - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/spec/option_spec.rb b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/spec/option_spec.rb deleted file mode 100644 index 83e58fd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/spec/option_spec.rb +++ /dev/null @@ -1,83 +0,0 @@ -require 'spec_helper' - -describe(Mercenary::Option) do - let(:config_key) { "largo" } - let(:description) { "This is a description" } - let(:switches) { ['-l', '--largo'] } - let(:option) { described_class.new(config_key, [switches, description].flatten.reject(&:nil?)) } - - it "knows its config key" do - expect(option.config_key).to eql(config_key) - end - - it "knows its description" do - expect(option.description).to eql(description) - end - - it "knows its switches" do - expect(option.switches).to eql(switches) - end - - it "knows how to present itself" do - expect(option.to_s).to eql(" -l, --largo #{description}") - end - - it "has an OptionParser representation" do - expect(option.for_option_parser).to eql([switches, description].flatten) - end - - it "compares itself with other options well" do - new_option = described_class.new(config_key, ['-l', '--largo', description]) - expect(option.eql?(new_option)).to be(true) - expect(option.hash.eql?(new_option.hash)).to be(true) - end - - it "has a custom #hash" do - expect(option.hash.to_s).to match(/\d+/) - end - - context "with just the long switch" do - let(:switches) { ['--largo'] } - - it "adds an empty string in place of the short switch" do - expect(option.switches).to eql(['', '--largo']) - end - - it "sets its description properly" do - expect(option.description).to eql(description) - end - - it "knows how to present the switch" do - expect(option.formatted_switches).to eql(" --largo ") - end - end - - context "with just the short switch" do - let(:switches) { ['-l'] } - - it "adds an empty string in place of the long switch" do - expect(option.switches).to eql(['-l', '']) - end - - it "sets its description properly" do - expect(option.description).to eql(description) - end - - it "knows how to present the switch" do - expect(option.formatted_switches).to eql(" -l ") - end - end - - context "without a description" do - let(:description) { nil } - - it "knows there is no description" do - expect(option.description).to be(nil) - end - - it "knows both inputs are switches" do - expect(option.switches).to eql(switches) - end - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/spec/presenter_spec.rb b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/spec/presenter_spec.rb deleted file mode 100644 index f61ed45..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/spec/presenter_spec.rb +++ /dev/null @@ -1,39 +0,0 @@ -require 'spec_helper' - -describe(Mercenary::Presenter) do - let(:supercommand) { Mercenary::Command.new(:script_name) } - let(:command) { Mercenary::Command.new(:subcommand, supercommand) } - let(:presenter) { described_class.new(command) } - - before(:each) do - command.version '1.4.2' - command.description 'Do all the things.' - command.option 'one', '-1', '--one', 'The first option' - command.option 'two', '-2', '--two', 'The second option' - command.alias :cmd - supercommand.commands[command.name] = command - end - - it "knows how to present the command" do - expect(presenter.command_presentation).to eql("script_name subcommand 1.4.2 -- Do all the things.\n\nUsage:\n\n script_name subcommand\n\nOptions:\n -1, --one The first option\n -2, --two The second option") - end - - it "knows how to present the subcommands, without duplicates for aliases" do - expect(described_class.new(supercommand).subcommands_presentation).to eql(" subcommand, cmd Do all the things.") - end - - it "knows how to present the usage" do - expect(presenter.usage_presentation).to eql(" script_name subcommand") - end - - it "knows how to present the options" do - expect(presenter.options_presentation).to eql(" -1, --one The first option\n -2, --two The second option") - end - - it "allows you to say print_* instead of *_presentation" do - expect(presenter.print_usage).to eql(presenter.usage_presentation) - expect(presenter.print_subcommands).to eql(presenter.subcommands_presentation) - expect(presenter.print_options).to eql(presenter.options_presentation) - expect(presenter.print_command).to eql(presenter.command_presentation) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/spec/program_spec.rb b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/spec/program_spec.rb deleted file mode 100644 index f5d961e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/spec/program_spec.rb +++ /dev/null @@ -1,19 +0,0 @@ -require "spec_helper" - -describe(Mercenary::Program) do - - context "a basic program" do - let(:program) { Mercenary::Program.new(:my_name) } - - it "can be created with just a name" do - expect(program.name).to eql(:my_name) - end - - it "can set its version" do - version = Mercenary::VERSION - program.version version - expect(program.version).to eq(version) - end - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/spec/spec_helper.rb b/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/spec/spec_helper.rb deleted file mode 100644 index c379985..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/mercenary-0.3.5/spec/spec_helper.rb +++ /dev/null @@ -1,14 +0,0 @@ -lib = File.expand_path('../../lib', __FILE__) -$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) -require 'mercenary' - -RSpec.configure do |config| - config.run_all_when_everything_filtered = true - config.filter_run :focus - - # Run specs in random order to surface order dependencies. If you find an - # order dependency and want to debug it, you can fix the order by providing - # the seed, which is printed after each run. - # --seed 1234 - config.order = 'random' -end diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/HISTORY.txt b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/HISTORY.txt deleted file mode 100644 index a4491e2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/HISTORY.txt +++ /dev/null @@ -1,211 +0,0 @@ -= 2.0 / ?? (future release changes, like a reminder to self) - - - prsnt? and absnt? are now finally banned into oblivion. Wasting vocals for - the win. - -= 1.5 / ?? - - + Handles unconsumed input at end of parse completely differently. Instead - of generating a toplevel error, it now raises an error in every branch - of the parse. More information in the resulting exception ensues! Thanks - again to John Mettraux for inspiration & acceptance specs. - - NOTE that this means that the UnconsumedInput exception is gone, since the - unconsumed input case is nothing special anymore. - - * This history now finally reads like the Changelog of the linux kernel. - Meaning that probably no one ever reads this. - - + Captures and parsing subsequent input based on captured values. This has - been long overdue - finally you can parse HEREdocs with parslet! - -= 1.4.0 / 25May2012 - - + Revised documentation. A few new API features have finally made it into - the documentation. Examples in the documentation are now curated and - run against the current code so that they really really work. - Also, the website generation tools have been replaced with 2012-style - tools. Much less pain to update now. - - + Parslet::Source now doesn't hold a StringIO, it directly holds the - buffer to be parsed. The api of Source has changed a tiny bit. This change - has been made for speed optimisation reasons. - - + :reporter argument to parse, allowing to customize error reporting within - wide boundaries. See issue #64 for a discussion. - Included are two error reporters, one (default) with the existing error - tree functionality, one reporting deepest errors as defined by the above - ticket. - - + Optimistic parse: Parsing is two phase, with the first phase assuming - there will be no errors. This yields ~ 20% speed improvement in the - case where the parse succeeds. - Also, internal error handling is now using tuples. This and other - optimizations have yielded ~ 30% overall improvement. - - ! #error_tree and #cause removed from all of parslet. The - Parslet::ParseFailed exception now contains a #cause field that can - be asked for an #ascii_tree as before. - Cleaner internal error handling, not stateful in atoms anymore. Some - parsers will see correct error reporting for the first time. (issue #65) - - + Made it possible to pass a custom Parslet::Source implementor to #parse. - (see #63) - - + #parse has now a second argument that is an options hash. See - Parslet::Atoms::Base#parse for documentation. - - - VM engine on the way out. No benefit except for the intellectual - challenge. - -= 1.3.0 / 5Mar2012 - - ! Parslet::Transform::Context is now much more well-behaved. It has - #respond_to? and #method_missing; it now looks like a plain old Ruby - object with instance variables and attribute readers. - - - Grammar transforms turned out to be a dead end and have been removed. - - ! A few problems in error message generation have been fixed. This will - improve diagnostics further. - - + A VM driven parser engine: Removes the limitation that parsing needs a - lot of stack space, something dearly missing from Ruby 1.9.3 fibers. - This engine is experimental and might be removed in the future. - - ! Interaction with mathn fixed - Line number generation will terminate. - - . Internal reorganisation, removing cruft and bit rot. - -= 1.2.3 / 22Sep2011 - - + Transform#apply can now be called with a hash as second argument. This - provides bindings and a way to inject context. - - ! Fixes a bug thar modified parslet atoms in place, defeating oop chaining. - (#50) - -= 1.2.1 / 6Jun2011 - - ! FIX: Input at the end of a parse raises Parslet::UnconsumedInput. (see - issue 18) - - ! FIX: Unicode parsing should now work as expected. (see issue 38) - - ! FIX: Slice#slice returned wrong bits at times (see issue 36). - -= 1.2.0 / 4Feb2011 - - + Parslet::Parser is now also a grammar atom, it can be composed freely with - other atoms. (str('f') >> MiniLispParser.new >> str('b')) - - + No strings, only slices are returned as part of the parser result. - Parslet::Slice is almost a string class, but one that remembers the - source offset. This has also bought us a slight speedup. - - + require 'parslet/convenience' now brings #parse_with_debug to all parslets. - This is a consequence of the above change. - - + Deprecates prsnt? and absnt? in favor of the more readable absent? and - prsnt?. Uses 3 bytes more RAM. The old variants will exist until we release - 2.0. - - INTERNALLY - - + Visitors now should have methods that all begin with 'visit_*'. #str - becomes #visit_str. - - + Parslet::Atoms::Entity now takes only a block argument instead of context - and block. - -= 1.1.1 / 4Feb2011 - - ! FIX: Line counting was broken by performance optimisations. - - + Squeezed out another few drops of performance. - -= 1.1.0 / 2Feb2011 - - + Uses return (fail/success), cached line counts, memoizing of parse results - and other tricks internally for at least an order of magnitude increase - in execution speed. - - + str('foo').maybe will now return an empty string again. Use .as(...) to - name things and get back [] from #repeat and nil from #maybe. - - + If you require 'parslet/atoms/visitor', you'll get an accept method on - all known Parslet::Atoms. - - + If you require 'parslet/export', you can call #to_citrus and #to_treetop - to produce string versions of your grammar in those dialects. - - + Requiring 'parslet/convenience' will given you a parse_with_debug on - your Parslet::Parser class. This prints some diagnostics on parse failure. - (Thanks to Florian Hanke) - -= 1.0.1 / 17Jan2011 - - A happy new year! - - ! FIX: Parslet::Transform was wrongly fixed earlier - it now wont mangle - hashes anymore. (Blake Sweeney) - - + parslet/rig/rspec.rb contains useful rspec matchers. (R. Konstantin Haase) - -= 1.0.0 / 29Dez2010 - - - #each_match was removed. There was some duplication of code that even - confused me - and we should not have 2 methods of achieving the same - goal. - - + Full documentation. Fixed sdoc. - -= 0.11.0 / 25Nov2010 - - ! Bugfixes to tree handling. Let's hope that was the last such significant - change to the core. - -= 0.10.1 / 22Nov2010 - - + Allow match['a-z'], shortcut for match('[a-z]') - - ! Fixed output inconsistencies (behaviour in connection to 'maybe') - -= 0.10.0 / 22Nov2010 - - + Parslet::Transform now takes a block on initialisation, wherein you can - define all the rules directly. - - + Parslet::Transform now only passes a hash to the block during transform - when its arity is 1. Otherwise all hash contents as bound as local - variables. - - + Both inline and other documentation have been improved. - - + You can now use 'subtree(:x)' to bind any subtree to x during tree pattern - matching. - - + Transform classes can now include rules into class definition. This makes - Parser and Transformer behave the same. - -= 0.9.0 / 28Oct2010 - * More of everything: Examples, documentation, etc... - - * Breaking change: Ruby's binary or ('|') is now used for alternatives, - instead of the division sign ('/') - this reduces the amount of - parenthesis needed for a grammar overall. - - * parslet.maybe now yields the result or nil in case of parse failure. This - is probably better than the array it did before; the jury is still out on - that. - - * parslet.repeat(min, max) is now valid syntax - -= 0.1.0 / not released. - - * Initial version. Classes for parsing, matching in the resulting trees - and transforming the trees into something more useful. - - * Parses and outputs intermediary trees - - * Matching of single elements and sequences \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/LICENSE b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/LICENSE deleted file mode 100644 index e57eec2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ - - Copyright (c) 2010 Kaspar Schiess - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation - files (the "Software"), to deal in the Software without - restriction, including without limitation the rights to use, - copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following - conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/README b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/README deleted file mode 100644 index 5eb3f0f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/README +++ /dev/null @@ -1,70 +0,0 @@ -INTRODUCTION - -Parslet makes developing complex parsers easy. It does so by - -* providing the best error reporting possible -* not generating reams of code for you to debug - -Parslet takes the long way around to make your job easier. It allows for -incremental language construction. Often, you start out small, implementing -the atoms of your language first; _parslet_ takes pride in making this -possible. - -Eager to try this out? Please see the associated web site: -http://kschiess.github.com/parslet - -SYNOPSIS - - require 'parslet' - include Parslet - - # parslet parses strings - str('foo'). - parse('foo') # => "foo"@0 - - # it matches character sets - match['abc'].parse('a') # => "a"@0 - match['abc'].parse('b') # => "b"@0 - match['abc'].parse('c') # => "c"@0 - - # and it annotates its output - str('foo').as(:important_bit). - parse('foo') # => {:important_bit=>"foo"@0} - - # you can construct parsers with just a few lines - quote = str('"') - simple_string = quote >> (quote.absent? >> any).repeat >> quote - - simple_string. - parse('"Simple Simple Simple"') # => "\"Simple Simple Simple\""@0 - - # or by making a fuss about it - class Smalltalk < Parslet::Parser - root :smalltalk - - rule(:smalltalk) { statements } - rule(:statements) { - # insert smalltalk parser here (outside of the scope of this readme) - } - end - - # and then - Smalltalk.new.parse('smalltalk') - -COMPATIBILITY - -This library should work with most rubies. I've tested it with MRI 1.8 -(except 1.8.6), 1.9, rbx-head, jruby. Please report as a bug if you encounter -issues. - -Note that due to Ruby 1.8 internals, Unicode parsing is not supported on that -version. - -On Mac OS X Lion, ruby-1.8.7-p352 has been known to segfault. Use -ruby-1.8.7-p334 for better results. - -STATUS - -Production worthy. - -(c) 2010, 2011, 2012 Kaspar Schiess \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/Rakefile b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/Rakefile deleted file mode 100644 index cf39b82..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/Rakefile +++ /dev/null @@ -1,30 +0,0 @@ -require 'rdoc/task' -require 'sdoc' - -require 'rspec/core/rake_task' -require "rubygems/package_task" - -desc "Run all tests: Exhaustive." -RSpec::Core::RakeTask.new - -namespace :spec do - desc "Only run unit tests: Fast. " - RSpec::Core::RakeTask.new(:unit) do |task| - task.pattern = "spec/parslet/**/*_spec.rb" - end -end - -task :default => :spec - -# This task actually builds the gem. -task :gem => :spec -spec = eval(File.read('parslet.gemspec')) - -desc "Prints LOC stats" -task :stat do - %w(lib spec example).each do |dir| - loc = %x(find #{dir} -name "*.rb" | xargs wc -l | grep 'total').split.first.to_i - printf("%20s %d\n", dir, loc) - end -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/boolean_algebra.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/boolean_algebra.rb deleted file mode 100644 index bea8634..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/boolean_algebra.rb +++ /dev/null @@ -1,70 +0,0 @@ -$:.unshift File.dirname(__FILE__) + "/../lib" - -require "parslet" -require "pp" - -# Parses strings like "var1 and (var2 or var3)" respecting operator precedence -# and parentheses. After that transforms the parse tree into an array of -# arrays like this: -# -# [["1", "2"], ["1", "3"]] -# -# The array represents a DNF (disjunctive normal form). Elements of outer -# array are connected with "or" operator, while elements of inner arrays are -# joined with "and". -# -class Parser < Parslet::Parser - rule(:space) { match[" "].repeat(1) } - rule(:space?) { space.maybe } - - rule(:lparen) { str("(") >> space? } - rule(:rparen) { str(")") >> space? } - - rule(:and_operator) { str("and") >> space? } - rule(:or_operator) { str("or") >> space? } - - rule(:var) { str("var") >> match["0-9"].repeat(1).as(:var) >> space? } - - # The primary rule deals with parentheses. - rule(:primary) { lparen >> or_operation >> rparen | var } - - # Note that following rules are both right-recursive. - rule(:and_operation) { - (primary.as(:left) >> and_operator >> - and_operation.as(:right)).as(:and) | - primary } - - rule(:or_operation) { - (and_operation.as(:left) >> or_operator >> - or_operation.as(:right)).as(:or) | - and_operation } - - # We start at the lowest precedence rule. - root(:or_operation) -end - -class Transformer < Parslet::Transform - rule(:var => simple(:var)) { [[String(var)]] } - - rule(:or => { :left => subtree(:left), :right => subtree(:right) }) do - (left + right) - end - - rule(:and => { :left => subtree(:left), :right => subtree(:right) }) do - res = [] - left.each do |l| - right.each do |r| - res << (l + r) - end - end - res - end -end - -pp tree = Parser.new.parse("var1 and (var2 or var3)") -# {:and=> -# {:left=>{:var=>"1"@3}, -# :right=>{:or=>{:left=>{:var=>"2"@13}, :right=>{:var=>"3"@21}}}}} -pp Transformer.new.apply(tree) -# [["1", "2"], ["1", "3"]] - diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/calc.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/calc.rb deleted file mode 100644 index 541d7a5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/calc.rb +++ /dev/null @@ -1,153 +0,0 @@ -# A simple integer calculator to answer the question about how to do -# left and right associativity in parslet (PEG) once and for all. - -$:.unshift File.dirname(__FILE__) + "/../lib" - -require 'rspec' -require 'parslet' -require 'parslet/rig/rspec' - -# This is the parsing stage. It expresses left associativity by compiling -# list of things that have the same associativity. -class CalcParser < Parslet::Parser - root :addition - - rule(:addition) { - multiplication.as(:l) >> (add_op >> multiplication.as(:r)).repeat(1) | - multiplication - } - - rule(:multiplication) { - integer.as(:l) >> (mult_op >> integer.as(:r)).repeat(1) | - integer } - - rule(:integer) { digit.repeat(1).as(:i) >> space? } - - rule(:mult_op) { match['*/'].as(:o) >> space? } - rule(:add_op) { match['+-'].as(:o) >> space? } - - rule(:digit) { match['0-9'] } - rule(:space?) { match['\s'].repeat } -end - -# Classes for the abstract syntax tree. -Int = Struct.new(:int) { - def eval; self end - def op(operation, other) - left = int - right = other.int - - Int.new( - case operation - when '+' - left + right - when '-' - left - right - when '*' - left * right - when '/' - left / right - end) - end - def to_i - int - end -} -Seq = Struct.new(:sequence) { - def eval - sequence.reduce { |accum, operation| - operation.call(accum) } - end -} -LeftOp = Struct.new(:operation, :right) { - def call(left) - left = left.eval - right = self.right.eval - - left.op(operation, right) - end -} - -# Transforming intermediary syntax tree into a real AST. -class CalcTransform < Parslet::Transform - rule(i: simple(:i)) { Int.new(Integer(i)) } - rule(o: simple(:o), r: simple(:i)) { LeftOp.new(o, i) } - rule(l: simple(:i)) { i } - rule(sequence(:seq)) { Seq.new(seq) } -end - -# And this calls everything in the right order. -def calculate(str) - intermediary_tree = CalcParser.new.parse(str) - abstract_tree = CalcTransform.new.apply(intermediary_tree) - result = abstract_tree.eval - - result.to_i -end - -# A test suite for the above parser -describe CalcParser do - let(:p) { described_class.new } - describe '#integer' do - let(:i) { p.integer } - it "parses integers" do - i.should parse('1') - i.should parse('123') - end - it "consumes trailing white space" do - i.should parse('123 ') - end - it "doesn't parse floats" do - i.should_not parse('1.3') - end - end - describe '#multiplication' do - let(:m) { p.multiplication } - it "parses simple multiplication" do - m.should parse('1*2') - end - it "parses division" do - m.should parse('1/2') - end - end - describe '#addition' do - let(:a) { p.addition } - - it "parses simple addition" do - a.should parse('1+2') - a.should parse('1+2+3-4') - end - end -end -describe CalcTransform do - def t(obj) - described_class.new.apply(obj) - end - - it "transforms integers" do - t(i: '1').should == Int.new(1) - end - it "unwraps left operand" do - t(l: :obj).should == :obj - end -end -describe 'whole computation specs' do - def self.result_of(str, int) - it(str) { calculate(str).should == int } - end - - result_of '1+1', 2 - result_of '1-1-1', -1 - result_of '1+1+3*5/2', 9 - result_of '123*2', 246 -end - - -# Enable these if you want to change the code. -# RSpec::Core::Runner.run([], $stderr, $stdout) - -str = ARGV.join -str = '123*2' if str.match(/^\s*$/) - -print "#{str} (command line): -> " -puts calculate(str) diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/capture.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/capture.rb deleted file mode 100644 index 4e4b8d1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/capture.rb +++ /dev/null @@ -1,49 +0,0 @@ - -# This example demonstrates how pieces of input can be captured and matched -# against later on. Without this, you cannot match here-documents and other -# self-dependent grammars. - -$:.unshift File.dirname(__FILE__) + "/../lib" -require 'parslet' -require 'parslet/convenience' -require 'pp' - -class CapturingParser < Parslet::Parser - root :document - - # Introduce a scope for each document. This ensures that documents can be - # nested. - rule(:document) { scope { doc_start >> text >> doc_end } } - - # Start of a document is a heredoc marker. This is captured in :marker - rule(:doc_start) { str('<') >> marker >> newline } - rule(:marker) { match['A-Z'].repeat(1).capture(:marker) } - - # The content of a document can be either lines of text or another - # document, introduced by > any >> - (newline.absent? >> any).repeat >> newline } - - # The end of the document is marked by the marker that was at the beginning - # of the document, by itself on a line. - rule(:doc_end) { captured_marker } - rule(:captured_marker) { - dynamic { |source, context| - str(context.captures[:marker]) - } - } - - rule(:newline) { match["\n"] } -end - -parser = CapturingParser.new -pp parser.parse_with_debug %Q(> expression.repeat >> newline } - rule(:newline) { str("\n") >> str("\r").maybe } - - rule(:expression) { (str('a').as(:a) >> spaces).as(:exp) } - - rule(:spaces) { space.repeat } - rule(:space) { multiline_comment | line_comment | str(' ') } - - rule(:line_comment) { (str('//') >> (newline.absent? >> any).repeat).as(:line) } - rule(:multiline_comment) { (str('/*') >> (str('*/').absent? >> any).repeat >> str('*/')).as(:multi) } -end - -code = %q( - a - // line comment - a a a // line comment - a /* inline comment */ a - /* multiline - comment */ -) - -pp ALanguage.new.parse_with_debug(code) diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/deepest_errors.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/deepest_errors.rb deleted file mode 100644 index 3573907..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/deepest_errors.rb +++ /dev/null @@ -1,131 +0,0 @@ -$:.unshift File.dirname(__FILE__) + "/../lib" - -# This example demonstrates how to do deepest error reporting, as invented -# by John Mettraux (issue #64). - -require 'parslet' -require 'parslet/convenience' - -def prettify(str) - puts " "*3 + " "*4 + "." + " "*4 + "10" + " "*3 + "." + " "*4 + "20" - str.lines.each_with_index do |line, index| - printf "%02d %s\n", - index+1, - line.chomp - end -end - -class Parser < Parslet::Parser - # commons - - rule(:space) { match('[ \t]').repeat(1) } - rule(:space?) { space.maybe } - - rule(:newline) { match('[\r\n]') } - - rule(:comment) { str('#') >> match('[^\r\n]').repeat } - - rule(:line_separator) { - (space? >> ((comment.maybe >> newline) | str(';')) >> space?).repeat(1) - } - - rule(:blank) { line_separator | space } - rule(:blank?) { blank.maybe } - - rule(:identifier) { match('[a-zA-Z0-9_]').repeat(1) } - - # res_statement - - rule(:reference) { - (str('@').repeat(1,2) >> identifier).as(:reference) - } - - rule(:res_action_or_link) { - str('.').as(:dot) >> (identifier >> str('?').maybe ).as(:name) >> str('()') - } - - rule(:res_actions) { - ( - reference - ).as(:resources) >> - ( - res_action_or_link.as(:res_action) - ).repeat(0).as(:res_actions) - } - - rule(:res_statement) { - res_actions >> - (str(':') >> identifier.as(:name)).maybe.as(:res_field) - } - - # expression - - rule(:expression) { - res_statement - } - - # body - - rule(:body) { - (line_separator >> (block | expression)).repeat(1).as(:body) >> - line_separator - } - - # blocks - - rule(:begin_block) { - (str('concurrent').as(:type) >> space).maybe.as(:pre) >> - str('begin').as(:begin) >> - body >> - str('end') - } - - rule(:define_block) { - str('define').as(:define) >> space >> - identifier.as(:name) >> str('()') >> - body >> - str('end') - } - - rule(:block) { - define_block | begin_block - } - - # root - - rule(:radix) { - line_separator.maybe >> block >> line_separator.maybe - } - - root(:radix) -end - -ds = [ - %{ - define f() - @res.name - end - }, - %{ - define f() - begin - @res.name - end - end - } -] - -ds.each do |d| - - puts '-' * 80 - prettify(d) - - parser = Parser.new - - begin - parser.parse_with_debug(d, - :reporter => Parslet::ErrorReporter::Deepest.new) - end -end - -puts '-' * 80 \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/documentation.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/documentation.rb deleted file mode 100644 index 4ce66e4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/documentation.rb +++ /dev/null @@ -1,18 +0,0 @@ -# A small example that shows a really small parser and what happens on parser -# errors. - -$:.unshift File.dirname(__FILE__) + "/../lib" - -require 'pp' -require 'parslet' - -class MyParser < Parslet::Parser - rule(:a) { str('a').repeat } - - def parse(str) - a.parse(str) - end -end - -pp MyParser.new.parse('aaaa') -pp MyParser.new.parse('bbbb') diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/email_parser.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/email_parser.rb deleted file mode 100644 index e1a858e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/email_parser.rb +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env ruby - -# Example contributed by Hal Brodigan (postmodern). Thanks! - -$:.unshift File.dirname(__FILE__) + "/../lib" -require 'parslet' -require 'parslet/convenience' - -class EmailParser < Parslet::Parser - rule(:space) { match('\s').repeat(1) } - rule(:space?) { space.maybe } - rule(:dash?) { match['_-'].maybe } - - rule(:at) { - str('@') | - (dash? >> (str('at') | str('AT')) >> dash?) - } - rule(:dot) { - str('.') | - (dash? >> (str('dot') | str('DOT')) >> dash?) - } - - rule(:word) { match('[a-z0-9]').repeat(1).as(:word) >> space? } - rule(:separator) { dot.as(:dot) >> space? | space } - rule(:words) { word >> (separator >> word).repeat } - - rule(:email) { - (words.as(:username) >> space? >> at >> space? >> words).as(:email) - } - - root(:email) -end - -class EmailSanitizer < Parslet::Transform - rule(:dot => simple(:dot), :word => simple(:word)) { ".#{word}" } - rule(:word => simple(:word)) { word } - - rule(:username => sequence(:username)) { username.join + "@" } - rule(:username => simple(:username)) { username.to_s + "@" } - - rule(:email => sequence(:email)) { email.join } -end - -parser = EmailParser.new -sanitizer = EmailSanitizer.new - -unless ARGV[0] - STDERR.puts "usage: #{$0} \"EMAIL_ADDR\"" - STDOUT.puts "since you haven't specified any EMAIL_ADDR, for testing purposes we're using a.b.c.d@gmail.com" -end - -p sanitizer.apply(parser.parse_with_debug(ARGV[0] || 'a.b.c.d@gmail.com')) diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/empty.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/empty.rb deleted file mode 100644 index 2b60a7e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/empty.rb +++ /dev/null @@ -1,13 +0,0 @@ -# Basically just demonstrates that you can leave rules empty and get a nice -# NotImplementedError. A way to quickly spec out your parser rules? - -$:.unshift File.dirname(__FILE__) + "/../lib" - -require 'parslet' - -class Parser < Parslet::Parser - rule(:empty) { } -end - - -Parser.new.empty.parslet diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/erb.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/erb.rb deleted file mode 100644 index c013a8c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/erb.rb +++ /dev/null @@ -1,47 +0,0 @@ -# Example that demonstrates how a simple erb-like parser could be constructed. - -$:.unshift File.dirname(__FILE__) + "/../lib" - -require 'parslet' - -class ErbParser < Parslet::Parser - rule(:ruby) { (str('%>').absent? >> any).repeat.as(:ruby) } - - rule(:expression) { (str('=') >> ruby).as(:expression) } - rule(:comment) { (str('#') >> ruby).as(:comment) } - rule(:code) { ruby.as(:code) } - rule(:erb) { expression | comment | code } - - rule(:erb_with_tags) { str('<%') >> erb >> str('%>') } - rule(:text) { (str('<%').absent? >> any).repeat(1) } - - rule(:text_with_ruby) { (text.as(:text) | erb_with_tags).repeat.as(:text) } - root(:text_with_ruby) -end - -parser = ErbParser.new -p parser.parse "The value of x is <%= x %>." -p parser.parse "<% 1 + 2 %>" -p parser.parse "<%# commented %>" - - -evaluator = Parslet::Transform.new do - - erb_binding = binding - - rule(:code => { :ruby => simple(:ruby) }) { eval(ruby, erb_binding); '' } - rule(:expression => { :ruby => simple(:ruby) }) { eval(ruby, erb_binding) } - rule(:comment => { :ruby => simple(:ruby) }) { '' } - - rule(:text => simple(:text)) { text } - rule(:text => sequence(:texts)) { texts.join } - -end - -puts evaluator.apply(parser.parse(<<-ERB -The <% a = 2 %>not printed result of "a = 2". -The <%# a = 1 %>not printed non-evaluated comment "a = 1", see the value of a below. -The <%= 'nicely' %> printed result. -The <% b = 3 %>value of a is <%= a %>, and b is <%= b %>. -ERB -)) diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/ignore.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/ignore.rb deleted file mode 100644 index 4b14acb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/ignore.rb +++ /dev/null @@ -1,33 +0,0 @@ -# A small example on how to make parslet ignore parts of the parse tree. - -$:.unshift File.dirname(__FILE__) + "/../lib" -require 'parslet' - -class IgnoreParslet < Parslet::Atoms::Base - def initialize(parslet) - @parslet = parslet - end - def to_s_inner(prec) - @parslet.to_s(prec) - end - def try(source, context, consume_all) - success, value = result = @parslet.try(source, context, consume_all) - - return succ(nil) if success - return result - end - -end -module IgnoreDSL - def ignore - IgnoreParslet.new(self) - end -end - -class Parslet::Atoms::Base - include IgnoreDSL -end - -include Parslet -p (str('a') >> str('b').ignore >> str('c')). - parse('abc') \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/ip_address.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/ip_address.rb deleted file mode 100644 index 3873500..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/ip_address.rb +++ /dev/null @@ -1,125 +0,0 @@ -# This example is heavily inspired by citrus' ip.citrus. Have a look at both -# of these to get some choice! - -# The grammars in this file conform to the ABNF given in Appendix A of RFC 3986 -# Uniform Resource Identifier (URI): Generic Syntax. -# -# See http://tools.ietf.org/html/rfc3986#appendix-A for more information. - -$:.unshift File.dirname(__FILE__) + "/../lib" - -require 'pp' -require 'parslet' - -module IPv4 - include Parslet - - # A host identified by an IPv4 literal address is represented in - # dotted-decimal notation (a sequence of four decimal numbers in the range 0 - # to 255, separated by "."), as described in [RFC1123] by reference to - # [RFC0952]. Note that other forms of dotted notation may be interpreted on - # some platforms, as described in Section 7.4, but only the dotted-decimal - # form of four octets is allowed by this grammar. - rule(:ipv4) { - (dec_octet >> str('.') >> dec_octet >> str('.') >> - dec_octet >> str('.') >> dec_octet).as(:ipv4) - } - - rule(:dec_octet) { - str('25') >> match("[0-5]") | - str('2') >> match("[0-4]") >> digit | - str('1') >> digit >> digit | - match('[1-9]') >> digit | - digit - } - - rule(:digit) { - match('[0-9]') - } -end - -# Must be used in concert with IPv4 -module IPv6 - include Parslet - - rule(:colon) { str(':') } - rule(:dcolon) { colon >> colon } - - # h16 : - def h16r(times) - (h16 >> colon).repeat(times, times) - end - - # : h16 - def h16l(times) - (colon >> h16).repeat(0,times) - end - - # A 128-bit IPv6 address is divided into eight 16-bit pieces. Each piece is - # represented numerically in case-insensitive hexadecimal, using one to four - # hexadecimal digits (leading zeroes are permitted). The eight encoded - # pieces are given most-significant first, separated by colon characters. - # Optionally, the least-significant two pieces may instead be represented in - # IPv4 address textual format. A sequence of one or more consecutive - # zero-valued 16-bit pieces within the address may be elided, omitting all - # their digits and leaving exactly two consecutive colons in their place to - # mark the elision. - rule(:ipv6) { - ( - ( - h16r(6) | - dcolon >> h16r(5) | - h16.maybe >> dcolon >> h16r(4) | - (h16 >> h16l(1)).maybe >> dcolon >> h16r(3) | - (h16 >> h16l(2)).maybe >> dcolon >> h16r(2) | - (h16 >> h16l(3)).maybe >> dcolon >> h16r(1) | - (h16 >> h16l(4)).maybe >> dcolon - ) >> ls32 | - (h16 >> h16l(5)).maybe >> dcolon >> h16 | - (h16 >> h16l(6)).maybe >> dcolon - ).as(:ipv6) - } - - rule(:h16) { - hexdigit.repeat(1,4) - } - - rule(:ls32) { - (h16 >> colon >> h16) | - ipv4 - } - - rule(:hexdigit) { - digit | match("[a-fA-F]") - } -end - -class Parser - include IPv4 - include IPv6 - - def parse(str) - (ipv4 | ipv6).parse(str) - end -end - -%W( - 0.0.0.0 - 255.255.255.255 - 255.255.255 - 1:2:3:4:5:6:7:8 - 12AD:34FC:A453:1922:: - 12AD::34FC - 12AD:: - :: - 1:2 -).each do |address| - parser = Parser.new - printf "%30s -> ", address - begin - result = parser.parse(address) - puts result.inspect - rescue Parslet::ParseFailed => m - puts "Failed: #{m}" - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/json.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/json.rb deleted file mode 100644 index 1ea1370..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/json.rb +++ /dev/null @@ -1,128 +0,0 @@ -$:.unshift File.dirname(__FILE__) + "/../lib" - -# -# MIT License - (c) 2011 John Mettraux -# - -require 'rubygems' -require 'parslet' # gem install parslet - - -module MyJson - - class Parser < Parslet::Parser - - rule(:spaces) { match('\s').repeat(1) } - rule(:spaces?) { spaces.maybe } - - rule(:comma) { spaces? >> str(',') >> spaces? } - rule(:digit) { match('[0-9]') } - - rule(:number) { - ( - str('-').maybe >> ( - str('0') | (match('[1-9]') >> digit.repeat) - ) >> ( - str('.') >> digit.repeat(1) - ).maybe >> ( - match('[eE]') >> (str('+') | str('-')).maybe >> digit.repeat(1) - ).maybe - ).as(:number) - } - - rule(:string) { - str('"') >> ( - str('\\') >> any | str('"').absent? >> any - ).repeat.as(:string) >> str('"') - } - - rule(:array) { - str('[') >> spaces? >> - (value >> (comma >> value).repeat).maybe.as(:array) >> - spaces? >> str(']') - } - - rule(:object) { - str('{') >> spaces? >> - (entry >> (comma >> entry).repeat).maybe.as(:object) >> - spaces? >> str('}') - } - - rule(:value) { - string | number | - object | array | - str('true').as(:true) | str('false').as(:false) | - str('null').as(:null) - } - - rule(:entry) { - ( - string.as(:key) >> spaces? >> - str(':') >> spaces? >> - value.as(:val) - ).as(:entry) - } - - rule(:attribute) { (entry | value).as(:attribute) } - - rule(:top) { spaces? >> value >> spaces? } - - root(:top) - end - - class Transformer < Parslet::Transform - - class Entry < Struct.new(:key, :val); end - - rule(:array => subtree(:ar)) { - ar.is_a?(Array) ? ar : [ ar ] - } - rule(:object => subtree(:ob)) { - (ob.is_a?(Array) ? ob : [ ob ]).inject({}) { |h, e| h[e.key] = e.val; h } - } - - rule(:entry => { :key => simple(:ke), :val => simple(:va) }) { - Entry.new(ke, va) - } - - rule(:string => simple(:st)) { - st.to_s - } - rule(:number => simple(:nb)) { - nb.match(/[eE\.]/) ? Float(nb) : Integer(nb) - } - - rule(:null => simple(:nu)) { nil } - rule(:true => simple(:tr)) { true } - rule(:false => simple(:fa)) { false } - end - - def self.parse(s) - - parser = Parser.new - transformer = Transformer.new - - tree = parser.parse(s) - puts; p tree; puts - out = transformer.apply(tree) - - out - end -end - - -s = %{ - [ 1, 2, 3, null, - "asdfasdf asdfds", { "a": -1.2 }, { "b": true, "c": false }, - 0.1e24, true, false, [ 1 ] ] -} - -out = MyJson.parse(s) - -p out; puts - -out == [ - 1, 2, 3, nil, - "asdfasdf asdfds", { "a" => -1.2 }, { "b" => true, "c" => false }, - 0.1e24, true, false, [ 1 ] -] || raise("MyJson is a failure") diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/local.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/local.rb deleted file mode 100644 index a944082..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/local.rb +++ /dev/null @@ -1,34 +0,0 @@ - -# An exploration of two ideas: -# a) Constructing a whole parser inline, without the artificial class around -# it. -# and: -# b) Constructing non-greedy or non-blind parsers by transforming the -# grammar. - -$:.unshift File.dirname(__FILE__) + "/../lib" - -require 'parslet' -include Parslet - -a = str('a').repeat >> str('aa') - -# E1% E2 -# -# S = E2 | E1 S - -def this(name, &block); return Parslet::Atoms::Entity.new(name, &block) end -def epsilon; any.absent? end - -# Traditional repetition will try as long as the pattern can be matched and -# then give up. This is greedy and blind. -a = str('a').as(:e) >> this('a') { a }.as(:rec) | epsilon - -# Here's a pattern match that is greedy and non-blind. The first pattern -# 'a'* will be tried as many times as possible, while still matching the -# end pattern 'aa'. -b = str('aa').as(:e2) >> epsilon | str('a').as(:e1) >> this('b') { b }.as(:rec) - -p a.parse('aaaa') -p b -p b.parse('aaaa') diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/mathn.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/mathn.rb deleted file mode 100644 index 44c0e5c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/mathn.rb +++ /dev/null @@ -1,44 +0,0 @@ -# Demonstrates that we have a compatibility fix to mathn's weird idea of -# integer mathematics. -# This was contributed by Jonathan Hinkle (https://github.com/hynkle). Thanks! - -$:.unshift File.dirname(__FILE__) + "/../lib" - -require 'parslet' -require 'parslet/convenience' -include Parslet - -def attempt_parse - possible_whitespace = match['\s'].repeat - - cephalopod = - str('octopus') | - str('squid') - - parenthesized_cephalopod = - str('(') >> - possible_whitespace >> - cephalopod >> - possible_whitespace >> - str(')') - - parser = - possible_whitespace >> - parenthesized_cephalopod >> - possible_whitespace - - # This parse fails, but that is not the point. When mathn is in the current - # ruby environment, it modifies integer division in a way that makes - # parslet loop indefinitely. - parser.parse %{(\nsqeed)\n} -rescue Parslet::ParseFailed -end - -attempt_parse -puts 'it terminates before we require mathn' - -puts "requiring mathn now" -require 'mathn' -puts "and trying again (will hang without the fix)" -attempt_parse # but it doesn't terminate after requiring mathn -puts "okay!" \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/minilisp.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/minilisp.rb deleted file mode 100644 index fe7ac4e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/minilisp.rb +++ /dev/null @@ -1,94 +0,0 @@ -# Reproduces [1] using parslet. -# [1] http://thingsaaronmade.com/blog/a-quick-intro-to-writing-a-parser-using-treetop.html - -$:.unshift File.dirname(__FILE__) + "/../lib" - -require 'pp' -require 'parslet' -require 'parslet/convenience' - -module MiniLisp - class Parser < Parslet::Parser - root :expression - rule(:expression) { - space? >> str('(') >> space? >> body >> str(')') >> space? - } - - rule(:body) { - (expression | identifier | float | integer | string).repeat.as(:exp) - } - - rule(:space) { - match('\s').repeat(1) - } - rule(:space?) { - space.maybe - } - - rule(:identifier) { - (match('[a-zA-Z=*]') >> match('[a-zA-Z=*_]').repeat).as(:identifier) >> space? - } - - rule(:float) { - ( - integer >> ( - str('.') >> match('[0-9]').repeat(1) | - str('e') >> match('[0-9]').repeat(1) - ).as(:e) - ).as(:float) >> space? - } - - rule(:integer) { - ((str('+') | str('-')).maybe >> match("[0-9]").repeat(1)).as(:integer) >> space? - } - - rule(:string) { - str('"') >> ( - str('\\') >> any | - str('"').absent? >> any - ).repeat.as(:string) >> str('"') >> space? - } - end - - class Transform - include Parslet - - attr_reader :t - def initialize - @t = Parslet::Transform.new - - # To understand these, take a look at what comes out of the parser. - t.rule(:identifier => simple(:ident)) { ident.to_sym } - - t.rule(:string => simple(:str)) { str } - - t.rule(:integer => simple(:int)) { Integer(int) } - - t.rule(:float=>{:integer=> simple(:a), :e=> simple(:b)}) { Float(a + b) } - - t.rule(:exp => subtree(:exp)) { exp } - end - - def do(tree) - t.apply(tree) - end - end -end - -parser = MiniLisp::Parser.new -transform = MiniLisp::Transform.new - -result = parser.parse_with_debug %Q{ - (define test (lambda () - (begin - (display "something") - (display 1) - (display 3.08)))) -} - -# Transform the result -pp transform.do(result) if result - -# Thereby reducing it to the earlier problem: -# http://github.com/kschiess/toylisp - diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/modularity.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/modularity.rb deleted file mode 100644 index 0e655fa..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/modularity.rb +++ /dev/null @@ -1,47 +0,0 @@ -$:.unshift File.dirname(__FILE__) + "/../lib" - -require 'pp' -require "parslet" - -# Demonstrates modular parsers, split out over many classes. Please look at -# ip_address.rb as well. - -module ALanguage - include Parslet - - # Parslet rules are really a special kind of method. Mix them into your - # classes! - rule(:a_language) { str('aaa') } -end - -# Parslet parsers are parslet atoms as well. Create an instance and chain them -# to your other rules. -# -class BLanguage < Parslet::Parser - root :blang - - rule(:blang) { str('bbb') } -end - -# Parslet atoms are really Ruby values, pass them around. -c_language = Parslet.str('ccc') - -class Language < Parslet::Parser - def initialize(c_language) - @c_language = c_language - super() - end - - root :root - - include ALanguage - - rule(:root) { str('a(') >> a_language >> str(')') >> space | - str('b(') >> BLanguage.new >> str(')') >> space | - str('c(') >> @c_language >> str(')') >> space } - rule(:space) { str(' ').maybe } -end - -Language.new(c_language).parse('a(aaa)') -Language.new(c_language).parse('b(bbb)') -Language.new(c_language).parse('c(ccc)') \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/nested_errors.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/nested_errors.rb deleted file mode 100644 index 3feafcd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/nested_errors.rb +++ /dev/null @@ -1,132 +0,0 @@ -$:.unshift File.dirname(__FILE__) + "/../lib" - -require 'parslet' -require 'parslet/convenience' - -# This example demonstrates tree error reporting in a real life example. -# The parser code has been contributed by John Mettraux. - -def prettify(str) - puts " "*3 + " "*4 + "." + " "*4 + "10" + " "*3 + "." + " "*4 + "20" - str.lines.each_with_index do |line, index| - printf "%02d %s\n", - index+1, - line.chomp - end -end - -class Parser < Parslet::Parser - - # commons - - rule(:space) { match('[ \t]').repeat(1) } - rule(:space?) { space.maybe } - - rule(:newline) { match('[\r\n]') } - - rule(:comment) { str('#') >> match('[^\r\n]').repeat } - - rule(:line_separator) { - (space? >> ((comment.maybe >> newline) | str(';')) >> space?).repeat(1) - } - - rule(:blank) { line_separator | space } - rule(:blank?) { blank.maybe } - - rule(:identifier) { match('[a-zA-Z0-9_]').repeat(1) } - - # res_statement - - rule(:reference) { - (str('@').repeat(1,2) >> identifier).as(:reference) - } - - rule(:res_action_or_link) { - str('.').as(:dot) >> (identifier >> str('?').maybe ).as(:name) >> str('()') - } - - rule(:res_actions) { - ( - reference - ).as(:resources) >> - ( - res_action_or_link.as(:res_action) - ).repeat(0).as(:res_actions) - } - - rule(:res_statement) { - res_actions >> - (str(':') >> identifier.as(:name)).maybe.as(:res_field) - } - - # expression - - rule(:expression) { - res_statement - } - - # body - - rule(:body) { - (line_separator >> (block | expression)).repeat(1).as(:body) >> - line_separator - } - - # blocks - - rule(:begin_block) { - (str('concurrent').as(:type) >> space).maybe.as(:pre) >> - str('begin').as(:begin) >> - body >> - str('end') - } - - rule(:define_block) { - str('define').as(:define) >> space >> - identifier.as(:name) >> str('()') >> - body >> - str('end') - } - - rule(:block) { - define_block | begin_block - } - - # root - - rule(:radix) { - line_separator.maybe >> block >> line_separator.maybe - } - - root(:radix) -end - - -ds = [ - %{ - define f() - @res.name - end - }, - %{ - define f() - begin - @res.name - end - end - } -] - -ds.each do |d| - - puts '-' * 80 - prettify(d) - - parser = Parser.new - - begin - parser.parse_with_debug(d) - end -end - -puts '-' * 80 \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/boolean_algebra.out b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/boolean_algebra.out deleted file mode 100644 index 430ed54..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/boolean_algebra.out +++ /dev/null @@ -1,4 +0,0 @@ -{:and=> - {:left=>{:var=>"1"@3}, - :right=>{:or=>{:left=>{:var=>"2"@13}, :right=>{:var=>"3"@21}}}}} -[["1", "2"], ["1", "3"]] diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/calc.out b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/calc.out deleted file mode 100644 index d780a04..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/calc.out +++ /dev/null @@ -1 +0,0 @@ -123*2 (command line): -> 246 diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/capture.out b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/capture.out deleted file mode 100644 index 87519e2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/capture.out +++ /dev/null @@ -1,3 +0,0 @@ -[{:line=>"Text1\n"@9}, - {:doc=>[{:line=>"Text3\n"@23}, {:line=>"Text4\n"@29}]}, - {:line=>"\nText2\n"@41}] diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/comments.out b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/comments.out deleted file mode 100644 index 4026a30..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/comments.out +++ /dev/null @@ -1,8 +0,0 @@ -[{:exp=>{:a=>"a"@3}}, - {:line=>"// line comment"@7}, - {:exp=>{:a=>"a"@25}}, - {:exp=>{:a=>"a"@27}}, - {:exp=>[{:a=>"a"@29}, {:line=>"// line comment"@31}]}, - {:exp=>[{:a=>"a"@49}, {:multi=>"/* inline comment */"@51}]}, - {:exp=>{:a=>"a"@72}}, - {:multi=>"/* multiline\n comment */"@77}] diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/deepest_errors.out b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/deepest_errors.out deleted file mode 100644 index 6b81f9b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/deepest_errors.out +++ /dev/null @@ -1,54 +0,0 @@ --------------------------------------------------------------------------------- - . 10 . 20 -01 -02 define f() -03 @res.name -04 end -05 -Failed to match sequence (LINE_SEPARATOR? BLOCK LINE_SEPARATOR?) at line 2 char 5. -`- Expected one of [DEFINE_BLOCK, BEGIN_BLOCK] at line 2 char 5. - |- Failed to match sequence (define:'define' SPACE name:IDENTIFIER '()' BODY 'end') at line 2 char 15. - | `- Failed to match sequence (body:((LINE_SEPARATOR (BLOCK / EXPRESSION)){1, }) LINE_SEPARATOR) at line 3 char 11. - | `- Expected at least 1 of SPACE? (COMMENT? NEWLINE / ';') SPACE? at line 3 char 11. - | `- Failed to match sequence (SPACE? (COMMENT? NEWLINE / ';') SPACE?) at line 3 char 11. - | `- Expected one of [COMMENT? NEWLINE, ';'] at line 3 char 11. - | |- Failed to match sequence (COMMENT? NEWLINE) at line 3 char 11. - | | `- Expected "()", but got "\n " at line 3 char 16. - | `- Expected "()", but got "\n " at line 3 char 16. - `- Failed to match sequence (pre:((type:'concurrent' SPACE)?) begin:'begin' BODY 'end') at line 2 char 5. - `- Expected "()", but got "\n " at line 3 char 16. --------------------------------------------------------------------------------- - . 10 . 20 -01 -02 define f() -03 begin -04 @res.name -05 end -06 end -07 -Failed to match sequence (LINE_SEPARATOR? BLOCK LINE_SEPARATOR?) at line 2 char 5. -`- Expected one of [DEFINE_BLOCK, BEGIN_BLOCK] at line 2 char 5. - |- Failed to match sequence (define:'define' SPACE name:IDENTIFIER '()' BODY 'end') at line 2 char 15. - | `- Failed to match sequence (body:((LINE_SEPARATOR (BLOCK / EXPRESSION)){1, }) LINE_SEPARATOR) at line 2 char 15. - | `- Expected at least 1 of LINE_SEPARATOR (BLOCK / EXPRESSION) at line 2 char 15. - | `- Failed to match sequence (LINE_SEPARATOR (BLOCK / EXPRESSION)) at line 3 char 7. - | `- Expected one of [BLOCK, EXPRESSION] at line 3 char 7. - | |- Expected one of [DEFINE_BLOCK, BEGIN_BLOCK] at line 3 char 7. - | | |- Failed to match sequence (define:'define' SPACE name:IDENTIFIER '()' BODY 'end') at line 3 char 7. - | | | `- Expected "define", but got "begin\n" at line 3 char 7. - | | `- Failed to match sequence (pre:((type:'concurrent' SPACE)?) begin:'begin' BODY 'end') at line 3 char 12. - | | `- Failed to match sequence (body:((LINE_SEPARATOR (BLOCK / EXPRESSION)){1, }) LINE_SEPARATOR) at line 4 char 13. - | | `- Expected at least 1 of SPACE? (COMMENT? NEWLINE / ';') SPACE? at line 4 char 13. - | | `- Failed to match sequence (SPACE? (COMMENT? NEWLINE / ';') SPACE?) at line 4 char 13. - | | `- Expected one of [COMMENT? NEWLINE, ';'] at line 4 char 13. - | | |- Failed to match sequence (COMMENT? NEWLINE) at line 4 char 13. - | | | `- Expected "()", but got "\n " at line 4 char 18. - | | `- Expected "()", but got "\n " at line 4 char 18. - | `- Failed to match sequence (RES_ACTIONS res_field:((':' name:IDENTIFIER)?)) at line 3 char 7. - | `- Failed to match sequence (resources:REFERENCE res_actions:(res_action:RES_ACTION_OR_LINK{0, })) at line 3 char 7. - | `- Failed to match sequence ('@'{1, 2} IDENTIFIER) at line 3 char 7. - | `- Expected at least 1 of '@' at line 3 char 7. - | `- Expected "()", but got "\n " at line 4 char 18. - `- Failed to match sequence (pre:((type:'concurrent' SPACE)?) begin:'begin' BODY 'end') at line 2 char 5. - `- Expected "()", but got "\n " at line 4 char 18. --------------------------------------------------------------------------------- diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/documentation.err b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/documentation.err deleted file mode 100644 index 16b382f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/documentation.err +++ /dev/null @@ -1,4 +0,0 @@ -/Users/kaspar/git_work/own/parslet/lib/parslet/atoms/base.rb:326:in `parse_failed': Don't know what to do with bbbb at line 1 char 1. (Parslet::ParseFailed) - from /Users/kaspar/git_work/own/parslet/lib/parslet/atoms/base.rb:55:in `parse' - from example/documentation.rb:13:in `parse' - from example/documentation.rb:18:in `
' diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/documentation.out b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/documentation.out deleted file mode 100644 index 55aa425..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/documentation.out +++ /dev/null @@ -1 +0,0 @@ -"aaaa"@0 diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/email_parser.out b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/email_parser.out deleted file mode 100644 index da385c6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/email_parser.out +++ /dev/null @@ -1,2 +0,0 @@ -since you haven't specified any EMAIL_ADDR, for testing purposes we're using a.b.c.d@gmail.com -"a.b.c.d@gmail.com" diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/empty.err b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/empty.err deleted file mode 100644 index 61658ec..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/empty.err +++ /dev/null @@ -1 +0,0 @@ -example/empty.rb:13:in `
': rule(:empty) { ... } returns nil. Still not implemented, but already used? (NotImplementedError) diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/erb.out b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/erb.out deleted file mode 100644 index b86db3a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/erb.out +++ /dev/null @@ -1,7 +0,0 @@ -{:text=>[{:text=>"The value of x is "@0}, {:expression=>{:ruby=>" x "@21}}, {:text=>"."@26}]} -{:text=>[{:code=>{:ruby=>" 1 + 2 "@2}}]} -{:text=>[{:comment=>{:ruby=>" commented "@3}}]} -The not printed result of "a = 2". -The not printed non-evaluated comment "a = 1", see the value of a below. -The nicely printed result. -The value of a is 2, and b is 3. diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/ignore.out b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/ignore.out deleted file mode 100644 index 450fdfd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/ignore.out +++ /dev/null @@ -1 +0,0 @@ -"ac"@0 diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/ignore_whitespace.out b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/ignore_whitespace.out deleted file mode 100644 index f778f09..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/ignore_whitespace.out +++ /dev/null @@ -1 +0,0 @@ -[{:a=>"a"@0}, {:a=>"a"@1}, {:a=>"a"@5}, {:a=>"a"@7}] diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/ip_address.out b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/ip_address.out deleted file mode 100644 index a15d777..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/ip_address.out +++ /dev/null @@ -1,9 +0,0 @@ - 0.0.0.0 -> {:ipv4=>"0.0.0.0"@0} - 255.255.255.255 -> {:ipv4=>"255.255.255.255"@0} - 255.255.255 -> Failed: Expected one of [IPV4, IPV6] at line 1 char 1. - 1:2:3:4:5:6:7:8 -> {:ipv6=>"1:2:3:4:5:6:7:8"@0} - 12AD:34FC:A453:1922:: -> {:ipv6=>"12AD:34FC:A453:1922::"@0} - 12AD::34FC -> {:ipv6=>"12AD::34FC"@0} - 12AD:: -> {:ipv6=>"12AD::"@0} - :: -> {:ipv6=>"::"@0} - 1:2 -> Failed: Expected one of [IPV4, IPV6] at line 1 char 1. diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/json.out b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/json.out deleted file mode 100644 index c3190ad..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/json.out +++ /dev/null @@ -1,5 +0,0 @@ - -{:array=>[{:number=>"1"@5}, {:number=>"2"@8}, {:number=>"3"@11}, {:null=>"null"@14}, {:string=>"asdfasdf asdfds"@25}, {:object=>{:entry=>{:key=>{:string=>"a"@46}, :val=>{:number=>"-1.2"@50}}}}, {:object=>[{:entry=>{:key=>{:string=>"b"@61}, :val=>{:true=>"true"@65}}}, {:entry=>{:key=>{:string=>"c"@72}, :val=>{:false=>"false"@76}}}]}, {:number=>"0.1e24"@89}, {:true=>"true"@97}, {:false=>"false"@103}, {:array=>{:number=>"1"@112}}]} - -[1, 2, 3, nil, "asdfasdf asdfds", {"a"=>-1.2}, {"b"=>true, "c"=>false}, 1.0e+23, true, false, [1]] - diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/local.out b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/local.out deleted file mode 100644 index f6f44ca..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/local.out +++ /dev/null @@ -1,3 +0,0 @@ -{:e=>"a"@0, :rec=>{:e=>"a"@1, :rec=>{:e=>"a"@2, :rec=>{:e=>"a"@3, :rec=>nil}}}} -e2:'aa' !. / e1:'a' rec:B -{:e1=>"a"@0, :rec=>{:e1=>"a"@1, :rec=>{:e2=>"aa"@2}}} diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/mathn.out b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/mathn.out deleted file mode 100644 index e1187d0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/mathn.out +++ /dev/null @@ -1,4 +0,0 @@ -it terminates before we require mathn -requiring mathn now -and trying again (will hang without the fix) -okay! diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/minilisp.out b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/minilisp.out deleted file mode 100644 index 423431f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/minilisp.out +++ /dev/null @@ -1,5 +0,0 @@ -[:define, - :test, - [:lambda, - [], - [:begin, [:display, "something"@54], [:display, 1], [:display, 3.08]]]] diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/modularity.out b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/modularity.out deleted file mode 100644 index e69de29..0000000 diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/nested_errors.out b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/nested_errors.out deleted file mode 100644 index b6bd833..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/nested_errors.out +++ /dev/null @@ -1,54 +0,0 @@ --------------------------------------------------------------------------------- - . 10 . 20 -01 -02 define f() -03 @res.name -04 end -05 -Failed to match sequence (LINE_SEPARATOR? BLOCK LINE_SEPARATOR?) at line 2 char 5. -`- Expected one of [DEFINE_BLOCK, BEGIN_BLOCK] at line 2 char 5. - |- Failed to match sequence (define:'define' SPACE name:IDENTIFIER '()' BODY 'end') at line 2 char 15. - | `- Failed to match sequence (body:((LINE_SEPARATOR (BLOCK / EXPRESSION)){1, }) LINE_SEPARATOR) at line 3 char 11. - | `- Expected at least 1 of SPACE? (COMMENT? NEWLINE / ';') SPACE? at line 3 char 11. - | `- Failed to match sequence (SPACE? (COMMENT? NEWLINE / ';') SPACE?) at line 3 char 11. - | `- Expected one of [COMMENT? NEWLINE, ';'] at line 3 char 11. - | |- Failed to match sequence (COMMENT? NEWLINE) at line 3 char 11. - | | `- Failed to match [\\r\\n] at line 3 char 11. - | `- Expected ";", but got "." at line 3 char 11. - `- Failed to match sequence (pre:((type:'concurrent' SPACE)?) begin:'begin' BODY 'end') at line 2 char 5. - `- Expected "begin", but got "defin" at line 2 char 5. --------------------------------------------------------------------------------- - . 10 . 20 -01 -02 define f() -03 begin -04 @res.name -05 end -06 end -07 -Failed to match sequence (LINE_SEPARATOR? BLOCK LINE_SEPARATOR?) at line 2 char 5. -`- Expected one of [DEFINE_BLOCK, BEGIN_BLOCK] at line 2 char 5. - |- Failed to match sequence (define:'define' SPACE name:IDENTIFIER '()' BODY 'end') at line 2 char 15. - | `- Failed to match sequence (body:((LINE_SEPARATOR (BLOCK / EXPRESSION)){1, }) LINE_SEPARATOR) at line 2 char 15. - | `- Expected at least 1 of LINE_SEPARATOR (BLOCK / EXPRESSION) at line 2 char 15. - | `- Failed to match sequence (LINE_SEPARATOR (BLOCK / EXPRESSION)) at line 3 char 7. - | `- Expected one of [BLOCK, EXPRESSION] at line 3 char 7. - | |- Expected one of [DEFINE_BLOCK, BEGIN_BLOCK] at line 3 char 7. - | | |- Failed to match sequence (define:'define' SPACE name:IDENTIFIER '()' BODY 'end') at line 3 char 7. - | | | `- Expected "define", but got "begin\n" at line 3 char 7. - | | `- Failed to match sequence (pre:((type:'concurrent' SPACE)?) begin:'begin' BODY 'end') at line 3 char 12. - | | `- Failed to match sequence (body:((LINE_SEPARATOR (BLOCK / EXPRESSION)){1, }) LINE_SEPARATOR) at line 4 char 13. - | | `- Expected at least 1 of SPACE? (COMMENT? NEWLINE / ';') SPACE? at line 4 char 13. - | | `- Failed to match sequence (SPACE? (COMMENT? NEWLINE / ';') SPACE?) at line 4 char 13. - | | `- Expected one of [COMMENT? NEWLINE, ';'] at line 4 char 13. - | | |- Failed to match sequence (COMMENT? NEWLINE) at line 4 char 13. - | | | `- Failed to match [\\r\\n] at line 4 char 13. - | | `- Expected ";", but got "." at line 4 char 13. - | `- Failed to match sequence (RES_ACTIONS res_field:((':' name:IDENTIFIER)?)) at line 3 char 7. - | `- Failed to match sequence (resources:REFERENCE res_actions:(res_action:RES_ACTION_OR_LINK{0, })) at line 3 char 7. - | `- Failed to match sequence ('@'{1, 2} IDENTIFIER) at line 3 char 7. - | `- Expected at least 1 of '@' at line 3 char 7. - | `- Expected "@", but got "b" at line 3 char 7. - `- Failed to match sequence (pre:((type:'concurrent' SPACE)?) begin:'begin' BODY 'end') at line 2 char 5. - `- Expected "begin", but got "defin" at line 2 char 5. --------------------------------------------------------------------------------- diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/parens.out b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/parens.out deleted file mode 100644 index d635101..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/parens.out +++ /dev/null @@ -1,8 +0,0 @@ - (): {:l=>"("@0, :m=>nil, :r=>")"@1} (1 parens) - - (()): {:l=>"("@0, :m=>{:l=>"("@1, :m=>nil, :r=>")"@2}, :r=>")"@3} (2 parens) - - ((((())))): {:l=>"("@0, :m=>{:l=>"("@1, :m=>{:l=>"("@2, :m=>{:l=>"("@3, :m=>{:l=>"("@4, :m=>nil, :r=>")"@5}, :r=>")"@6}, :r=>")"@7}, :r=>")"@8}, :r=>")"@9} (5 parens) - - ((()): Failed to match sequence (l:'(' m:(BALANCED?) r:')') at line 1 char 6. - diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/readme.out b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/readme.out deleted file mode 100644 index b04aa33..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/readme.out +++ /dev/null @@ -1 +0,0 @@ -String contents: This is a \"String\" in which you can escape stuff diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/scopes.out b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/scopes.out deleted file mode 100644 index 8d9b2df..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/scopes.out +++ /dev/null @@ -1 +0,0 @@ -parses 'aba' diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/seasons.out b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/seasons.out deleted file mode 100644 index e018f82..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/seasons.out +++ /dev/null @@ -1,28 +0,0 @@ -"And when Spring comes" -{:bud=>{:stem=>[{:branch=>:leaf}]}} - -"And when Summer comes" -{:bud=>{:stem=>[{:branch=>[:leaf, :flower]}]}} - -"And when Fall comes" -Fruit! -Falling Leaves! -{:bud=>{:stem=>[{:branch=>[]}]}} - -"And when Winter comes" -{:bud=>{:stem=>[]}} - -"And when Spring comes" -{:bud=>{:stem=>[{:branch=>:leaf}]}} - -"And when Summer comes" -{:bud=>{:stem=>[{:branch=>[:leaf, :flower]}]}} - -"And when Fall comes" -Fruit! -Falling Leaves! -{:bud=>{:stem=>[{:branch=>[]}]}} - -"And when Winter comes" -{:bud=>{:stem=>[]}} - diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/sentence.out b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/sentence.out deleted file mode 100644 index f183a24..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/sentence.out +++ /dev/null @@ -1 +0,0 @@ -["RubyKaigi2009ã®ãƒ†ãƒ¼ãƒžã¯ã€ã€Œå¤‰ã‚ã‚‹ï¼å¤‰ãˆã‚‹ã€ã§ã™ã€‚", " å‰å›žã®RubyKaigi2008ã®ãƒ†ãƒ¼ãƒžã§ã‚ã£ãŸã€Œå¤šæ§˜æ€§ã€ã®è¨€è‘‰ã®é€šã‚Šã€ 2008å¹´ã¯Rubyãã®ã‚‚ã®ã«é–¢ã—ã¦ã‚‚ã€ã¾ãŸRubyã®æ´»èºã™ã‚‹èˆžå°ã«é–¢ã—ã¦ã‚‚〠ã¾ã™ã¾ã™å¤šæ§˜åŒ–ãŒé€²ã¿ã¤ã¤ã‚りã¾ã™ã€‚", "RubyKaigi2008ã¯ã€ãã®ã‚ˆã†ãª Rubyã®ç”Ÿæ…‹ç³»ã‚’ã‚らãŸã‚ã¦èªè­˜ã™ã‚‹å ´ã¨ãªã‚Šã¾ã—ãŸã€‚", " ã—ã‹ã—ã€ã“ã†ã—ãŸå¤šæ§˜åŒ–ãŒé€²ã‚€ä¸­ã€ç•°ãªã‚‹è€…åŒå£«ãŒå˜ç´”ã«è·é›¢ã‚’ ç½®ã„ãŸã¾ã¾ã§ã¯ã€ãã®é•ã„ã‚’èªè­˜ã—ãŸã¨ã“ã‚ã§ã‚ã¾ã‚Šæ„味ãŒã‚りã¾ã›ã‚“。", " ç•°ãªã‚‹å®Ÿè£…ã€ç•°ãªã‚‹æ€æƒ³ã€ç•°ãªã‚‹èƒŒæ™¯ã¨ã„ã£ãŸã€æ§˜ã€…ãªå¤šæ§˜æ€§ã‚’ç†è§£ã—ã¤ã¤ã€ ã™ã‚Šåˆã‚ã›ã‚‹ã¹ãã‚‚ã®ã‚’ã™ã‚Šåˆã‚ã›ã€å¤‰ãˆã¦ã„ãã¹ãã¨ã“ã‚ã‚’ 変ãˆã¦ã„ãã“ã¨ãŒã€è±Šã‹ãªæœªæ¥ã¸ã¨ã¤ãªãŒã‚‹é“ã«é•ã„ã‚りã¾ã›ã‚“。"] diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/simple_xml.out b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/simple_xml.out deleted file mode 100644 index 015941f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/simple_xml.out +++ /dev/null @@ -1,2 +0,0 @@ -"verified" -{:o=>{:name=>"b"@1}, :i=>"verified", :c=>{:name=>"a"@33}} diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/string_parser.out b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/string_parser.out deleted file mode 100644 index b7e497f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/output/string_parser.out +++ /dev/null @@ -1,3 +0,0 @@ -[#, - #, - #] diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/parens.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/parens.rb deleted file mode 100644 index bcc20f4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/parens.rb +++ /dev/null @@ -1,42 +0,0 @@ -# A small example that demonstrates the power of tree pattern matching. Also -# uses '.as(:name)' to construct a tree that can reliably be matched -# afterwards. - -$:.unshift File.dirname(__FILE__) + "/../lib" - -require 'pp' -require 'parslet' - -module LISP # as in 'lots of insipid and stupid parenthesis' - class Parser < Parslet::Parser - rule(:balanced) { - str('(').as(:l) >> balanced.maybe.as(:m) >> str(')').as(:r) - } - - root(:balanced) - end - - class Transform < Parslet::Transform - rule(:l => '(', :m => simple(:x), :r => ')') { - # innermost :m will contain nil - x.nil? ? 1 : x+1 - } - end -end - -parser = LISP::Parser.new -transform = LISP::Transform.new -%w! - () - (()) - ((((())))) - ((()) -!.each do |pexp| - begin - result = parser.parse(pexp) - puts "#{"%20s"%pexp}: #{result.inspect} (#{transform.apply(result)} parens)" - rescue Parslet::ParseFailed => m - puts "#{"%20s"%pexp}: #{m}" - end - puts -end diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/readme.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/readme.rb deleted file mode 100644 index 36f38d0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/readme.rb +++ /dev/null @@ -1,30 +0,0 @@ -# The example from the readme. With this, I am making sure that the readme -# 'works'. Is this too messy? - -$:.unshift File.dirname(__FILE__) + "/../lib" - -# cut here ------------------------------------------------------------------- -require 'parslet' -include Parslet - -# Constructs a parser using a Parser Expression Grammar like DSL: -parser = str('"') >> - ( - str('\\') >> any | - str('"').absent? >> any - ).repeat.as(:string) >> - str('"') - -# Parse the string and capture parts of the interpretation (:string above) -tree = parser.parse('"This is a \\"String\\" in which you can escape stuff"') - -tree # => {:string=>"This is a \\\"String\\\" in which you can escape stuff"} - -# Here's how you can grab results from that tree: - -transform = Parslet::Transform.new do - rule(:string => simple(:x)) { - puts "String contents: #{x}" } -end -transform.apply(tree) - diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/scopes.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/scopes.rb deleted file mode 100644 index 8de07d9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/scopes.rb +++ /dev/null @@ -1,15 +0,0 @@ - -$:.unshift File.dirname(__FILE__) + "/../lib" -require 'parslet' - -include Parslet - -parser = str('a').capture(:a) >> scope { str('b').capture(:a) } >> - dynamic { |s,c| str(c.captures[:a]) } - -begin - parser.parse('aba') - puts "parses 'aba'" -rescue - puts "exception!" -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/seasons.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/seasons.rb deleted file mode 100644 index 41c525b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/seasons.rb +++ /dev/null @@ -1,46 +0,0 @@ -$:.unshift File.dirname(__FILE__) + "/../lib" - -require 'parslet' -require 'pp' - -tree = {:bud => {:stem => []}} - -class Spring < Parslet::Transform - rule(:stem => sequence(:branches)) { - {:stem => (branches + [{:branch => :leaf}])} - } -end -class Summer < Parslet::Transform - rule(:stem => subtree(:branches)) { - new_branches = branches.map { |b| {:branch => [:leaf, :flower]} } - {:stem => new_branches} - } -end -class Fall < Parslet::Transform - rule(:branch => sequence(:x)) { - x.each { |e| puts "Fruit!" if e==:flower } - x.each { |e| puts "Falling Leaves!" if e==:leaf } - {:branch => []} - } -end -class Winter < Parslet::Transform - rule(:stem => subtree(:x)) { - {:stem => []} - } -end - -def do_seasons(tree) - [Spring, Summer, Fall, Winter].each do |season| - p "And when #{season} comes" - tree = season.new.apply(tree) - pp tree - puts - end - tree -end - -# What marvel of life! -tree = do_seasons(tree) -tree = do_seasons(tree) - - diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/sentence.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/sentence.rb deleted file mode 100644 index b73d140..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/sentence.rb +++ /dev/null @@ -1,36 +0,0 @@ -# encoding: UTF-8 - -# A small example contributed by John Mettraux (jmettraux) that demonstrates -# working with Unicode. This only works on Ruby 1.9. - -$:.unshift File.dirname(__FILE__) + "/../lib" - -require 'parslet' - -class Parser < Parslet::Parser - rule(:sentence) { (match('[^。]').repeat(1) >> str("。")).as(:sentence) } - rule(:sentences) { sentence.repeat } - root(:sentences) -end - -class Transformer < Parslet::Transform - rule(:sentence => simple(:sen)) { sen.to_s } -end - -string = - "RubyKaigi2009ã®ãƒ†ãƒ¼ãƒžã¯ã€ã€Œå¤‰ã‚ã‚‹ï¼å¤‰ãˆã‚‹ã€ã§ã™ã€‚ å‰å›žã®" + - "RubyKaigi2008ã®ãƒ†ãƒ¼ãƒžã§ã‚ã£ãŸã€Œå¤šæ§˜æ€§ã€ã®è¨€è‘‰ã®é€šã‚Šã€ " + - "2008å¹´ã¯Rubyãã®ã‚‚ã®ã«é–¢ã—ã¦ã‚‚ã€ã¾ãŸRubyã®æ´»èºã™ã‚‹èˆžå°ã«é–¢ã—ã¦ã‚‚〠" + - "ã¾ã™ã¾ã™å¤šæ§˜åŒ–ãŒé€²ã¿ã¤ã¤ã‚りã¾ã™ã€‚RubyKaigi2008ã¯ã€ãã®ã‚ˆã†ãª " + - "Rubyã®ç”Ÿæ…‹ç³»ã‚’ã‚らãŸã‚ã¦èªè­˜ã™ã‚‹å ´ã¨ãªã‚Šã¾ã—ãŸã€‚ ã—ã‹ã—ã€" + - "ã“ã†ã—ãŸå¤šæ§˜åŒ–ãŒé€²ã‚€ä¸­ã€ç•°ãªã‚‹è€…åŒå£«ãŒå˜ç´”ã«è·é›¢ã‚’ ç½®ã„ãŸã¾ã¾ã§ã¯ã€" + - "ãã®é•ã„ã‚’èªè­˜ã—ãŸã¨ã“ã‚ã§ã‚ã¾ã‚Šæ„味ãŒã‚りã¾ã›ã‚“。 ç•°ãªã‚‹å®Ÿè£…ã€" + - "ç•°ãªã‚‹æ€æƒ³ã€ç•°ãªã‚‹èƒŒæ™¯ã¨ã„ã£ãŸã€æ§˜ã€…ãªå¤šæ§˜æ€§ã‚’ç†è§£ã—ã¤ã¤ã€ " + - "ã™ã‚Šåˆã‚ã›ã‚‹ã¹ãã‚‚ã®ã‚’ã™ã‚Šåˆã‚ã›ã€å¤‰ãˆã¦ã„ãã¹ãã¨ã“ã‚ã‚’ " + - "変ãˆã¦ã„ãã“ã¨ãŒã€è±Šã‹ãªæœªæ¥ã¸ã¨ã¤ãªãŒã‚‹é“ã«é•ã„ã‚りã¾ã›ã‚“。" - -parser = Parser.new -transformer = Transformer.new - -tree = parser.parse(string) -p transformer.apply(tree) diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/simple.lit b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/simple.lit deleted file mode 100644 index fa5a49b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/simple.lit +++ /dev/null @@ -1,3 +0,0 @@ -123 -12345 -" Some String with \"escapes\"" diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/simple_xml.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/simple_xml.rb deleted file mode 100644 index d6462e0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/simple_xml.rb +++ /dev/null @@ -1,54 +0,0 @@ -# A simple xml parser. It is simple in the respect as that it doesn't address -# any of the complexities of XML. This is ruby 1.9. - -$:.unshift File.dirname(__FILE__) + "/../lib" - -require 'pp' -require 'parslet' - -class XML < Parslet::Parser - root :document - - rule(:document) { - tag(close: false).as(:o) >> document.as(:i) >> tag(close: true).as(:c) | - text - } - - # Perhaps we could have some syntax sugar to make this more easy? - # - def tag(opts={}) - close = opts[:close] || false - - parslet = str('<') - parslet = parslet >> str('/') if close - parslet = parslet >> (str('>').absent? >> match("[a-zA-Z]")).repeat(1).as(:name) - parslet = parslet >> str('>') - - parslet - end - - rule(:text) { - match('[^<>]').repeat(0) - } -end - -def check(xml) - r = XML.new.parse(xml) - - # We'll validate the tree by reducing valid pairs of tags into simply the - # string "verified". If the transformation ends on a string, then the - # document was 'valid'. - # - t = Parslet::Transform.new do - rule( - o: {name: simple(:tag)}, - c: {name: simple(:tag)}, - i: simple(:t) - ) { 'verified' } - end - - t.apply(r) -end - -pp check("some text in the tags") -pp check("some text in the tags") diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/string_parser.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/string_parser.rb deleted file mode 100644 index b38bbe0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/string_parser.rb +++ /dev/null @@ -1,77 +0,0 @@ -# A more complex parser that illustrates how a compiler might be constructed. -# The parser recognizes strings and integer literals and constructs almost a -# useful AST from the file contents. - -require 'pp' - -$:.unshift File.dirname(__FILE__) + "/../lib" -require 'parslet' - -include Parslet - -class LiteralsParser < Parslet::Parser - rule :space do - (match '[ ]').repeat(1) - end - - rule :literals do - (literal >> eol).repeat - end - - rule :literal do - (integer | string).as(:literal) >> space.maybe - end - - rule :string do - str('"') >> - ( - (str('\\') >> any) | - (str('"').absent? >> any) - ).repeat.as(:string) >> - str('"') - end - - rule :integer do - match('[0-9]').repeat(1).as(:integer) - end - - rule :eol do - line_end.repeat(1) - end - - rule :line_end do - crlf >> space.maybe - end - - rule :crlf do - match('[\r\n]').repeat(1) - end - - root :literals -end - -input_name = File.join(File.dirname(__FILE__), 'simple.lit') -file = File.read(input_name) - -parsetree = LiteralsParser.new.parse(file) - -class Lit < Struct.new(:text) - def to_s - text.inspect - end -end -class StringLit < Lit -end -class IntLit < Lit - def to_s - text - end -end - -transform = Parslet::Transform.new do - rule(:literal => {:integer => simple(:x)}) { IntLit.new(x) } - rule(:literal => {:string => simple(:s)}) { StringLit.new(s) } -end - -ast = transform.apply(parsetree) -pp ast diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/test.lit b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/test.lit deleted file mode 100644 index b1edd0d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/example/test.lit +++ /dev/null @@ -1,4 +0,0 @@ -"THis is a string" -"This is another string" -"This string is escaped \"embedded quoted stuff \" " -12 // an integer literal and a comment diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet.rb deleted file mode 100644 index cebd3c5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet.rb +++ /dev/null @@ -1,270 +0,0 @@ -# A simple parser generator library. Typical usage would look like this: -# -# require 'parslet' -# -# class MyParser < Parslet::Parser -# rule(:a) { str('a').repeat } -# root(:a) -# end -# -# pp MyParser.new.parse('aaaa') # => 'aaaa'@0 -# pp MyParser.new.parse('bbbb') # => Parslet::Atoms::ParseFailed: -# # Don't know what to do with bbbb at line 1 char 1. -# -# The simple DSL allows you to define grammars in PEG-style. This kind of -# grammar construction does away with the ambiguities that usually comes with -# parsers; instead, it allows you to construct grammars that are easier to -# debug, since less magic is involved. -# -# Parslet is typically used in stages: -# -# -# * Parsing the input string; this yields an intermediary tree, see -# Parslet.any, Parslet.match, Parslet.str, Parslet::ClassMethods#rule and -# Parslet::ClassMethods#root. -# * Transformation of the tree into something useful to you, see -# Parslet::Transform, Parslet.simple, Parslet.sequence and Parslet.subtree. -# -# The first stage is traditionally intermingled with the second stage; output -# from the second stage is usually called the 'Abstract Syntax Tree' or AST. -# -# The stages are completely decoupled; You can change your grammar around and -# use the second stage to isolate the rest of your code from the changes -# you've effected. -# -# == Further reading -# -# All parslet atoms are subclasses of {Parslet::Atoms::Base}. You might want to -# look at all of those: {Parslet::Atoms::Re}, {Parslet::Atoms::Str}, -# {Parslet::Atoms::Repetition}, {Parslet::Atoms::Sequence}, -# {Parslet::Atoms::Alternative}. -# -# == When things go wrong -# -# A parse that fails will raise {Parslet::ParseFailed}. This exception contains -# all the details of what went wrong, including a detailed error trace that -# can be printed out as an ascii tree. ({Parslet::Cause}) -# -module Parslet - # Extends classes that include Parslet with the module - # {Parslet::ClassMethods}. - # - def self.included(base) - base.extend(ClassMethods) - end - - # Raised when the parse failed to match. It contains the message that should - # be presented to the user. More details can be extracted from the - # exceptions #cause member: It contains an instance of {Parslet::Cause} that - # stores all the details of your failed parse in a tree structure. - # - # begin - # parslet.parse(str) - # rescue Parslet::ParseFailed => failure - # puts failure.cause.ascii_tree - # end - # - # Alternatively, you can just require 'parslet/convenience' and call the - # method #parse_with_debug instead of #parse. This method will never raise - # and print error trees to stdout. - # - # require 'parslet/convenience' - # parslet.parse_with_debug(str) - # - class ParseFailed < StandardError - def initialize(message, cause=nil) - super(message) - @cause = cause - end - - # Why the parse failed. - # - # @return [Parslet::Cause] - attr_reader :cause - end - - module ClassMethods - # Define an entity for the parser. This generates a method of the same - # name that can be used as part of other patterns. Those methods can be - # freely mixed in your parser class with real ruby methods. - # - # class MyParser - # include Parslet - # - # rule(:bar) { str('bar') } - # rule(:twobar) do - # bar >> bar - # end - # - # root :twobar - # end - # - def rule(name, &definition) - define_method(name) do - @rules ||= {} # memoization - return @rules[name] if @rules.has_key?(name) - - # Capture the self of the parser class along with the definition. - definition_closure = proc { - self.instance_eval(&definition) - } - - @rules[name] = Atoms::Entity.new(name, &definition_closure) - end - end - end - - # Allows for delayed construction of #match. See also Parslet.match. - # - # @api private - class DelayedMatchConstructor - def [](str) - Atoms::Re.new("[" + str + "]") - end - end - - # Returns an atom matching a character class. All regular expressions can be - # used, as long as they match only a single character at a time. - # - # match('[ab]') # will match either 'a' or 'b' - # match('[\n\s]') # will match newlines and spaces - # - # There is also another (convenience) form of this method: - # - # match['a-z'] # synonymous to match('[a-z]') - # match['\n'] # synonymous to match('[\n]') - # - # @overload match(str) - # @param str [String] character class to match (regexp syntax) - # @return [Parslet::Atoms::Re] a parslet atom - # - def match(str=nil) - return DelayedMatchConstructor.new unless str - - return Atoms::Re.new(str) - end - module_function :match - - # Returns an atom matching the +str+ given: - # - # str('class') # will match 'class' - # - # @param str [String] string to match verbatim - # @return [Parslet::Atoms::Str] a parslet atom - # - def str(str) - Atoms::Str.new(str) - end - module_function :str - - # Returns an atom matching any character. It acts like the '.' (dot) - # character in regular expressions. - # - # any.parse('a') # => 'a' - # - # @return [Parslet::Atoms::Re] a parslet atom - # - def any - Atoms::Re.new('.') - end - module_function :any - - # Introduces a new capture scope. This means that all old captures stay - # accessible, but new values stored will only be available during the block - # given and the old values will be restored after the block. - # - # Example: - # # :a will be available until the end of the block. Afterwards, - # # :a from the outer scope will be available again, if such a thing - # # exists. - # scope { str('a').capture(:a) } - # - def scope(&block) - Parslet::Atoms::Scope.new(block) - end - module_function :scope - - # Designates a piece of the parser as being dynamic. Dynamic parsers can - # either return a parser at runtime, which will be applied on the input, or - # return a result from a parse. - # - # Dynamic parse pieces are never cached and can introduce performance - # abnormalitites - use sparingly where other constructs fail. - # - # Example: - # # Parses either 'a' or 'b', depending on the weather - # dynamic { rand() < 0.5 ? str('a') : str('b') } - # - def dynamic(&block) - Parslet::Atoms::Dynamic.new(block) - end - module_function :dynamic - - # A special kind of atom that allows embedding whole treetop expressions - # into parslet construction. - # - # # the same as str('a') >> str('b').maybe - # exp(%Q("a" "b"?)) - # - # @param str [String] a treetop expression - # @return [Parslet::Atoms::Base] the corresponding parslet parser - # - def exp(str) - Parslet::Expression.new(str).to_parslet - end - module_function :exp - - # Returns a placeholder for a tree transformation that will only match a - # sequence of elements. The +symbol+ you specify will be the key for the - # matched sequence in the returned dictionary. - # - # # This would match a body element that contains several declarations. - # { :body => sequence(:declarations) } - # - # The above example would match :body => ['a', 'b'], but not - # :body => 'a'. - # - # see {Parslet::Transform} - # - def sequence(symbol) - Pattern::SequenceBind.new(symbol) - end - module_function :sequence - - # Returns a placeholder for a tree transformation that will only match - # simple elements. This matches everything that #sequence - # doesn't match. - # - # # Matches a single header. - # { :header => simple(:header) } - # - # see {Parslet::Transform} - # - def simple(symbol) - Pattern::SimpleBind.new(symbol) - end - module_function :simple - - # Returns a placeholder for tree transformation patterns that will match - # any kind of subtree. - # - # { :expression => subtree(:exp) } - # - def subtree(symbol) - Pattern::SubtreeBind.new(symbol) - end - module_function :subtree - - autoload :Expression, 'parslet/expression' -end - -require 'parslet/slice' -require 'parslet/cause' -require 'parslet/source' -require 'parslet/atoms' -require 'parslet/pattern' -require 'parslet/pattern/binding' -require 'parslet/transform' -require 'parslet/parser' -require 'parslet/error_reporter' -require 'parslet/scope' \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms.rb deleted file mode 100644 index 91e52e3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms.rb +++ /dev/null @@ -1,34 +0,0 @@ - -# This is where parslets name comes from: Small parser atoms. -# -module Parslet::Atoms - # The precedence module controls parenthesis during the #inspect printing - # of parslets. It is not relevant to other aspects of the parsing. - # - module Precedence - prec = 0 - BASE = (prec+=1) # everything else - LOOKAHEAD = (prec+=1) # &SOMETHING - REPETITION = (prec+=1) # 'a'+, 'a'? - SEQUENCE = (prec+=1) # 'a' 'b' - ALTERNATE = (prec+=1) # 'a' | 'b' - OUTER = (prec+=1) # printing is done here. - end - - require 'parslet/atoms/can_flatten' - require 'parslet/atoms/context' - require 'parslet/atoms/dsl' - require 'parslet/atoms/base' - require 'parslet/atoms/named' - require 'parslet/atoms/lookahead' - require 'parslet/atoms/alternative' - require 'parslet/atoms/sequence' - require 'parslet/atoms/repetition' - require 'parslet/atoms/re' - require 'parslet/atoms/str' - require 'parslet/atoms/entity' - require 'parslet/atoms/capture' - require 'parslet/atoms/dynamic' - require 'parslet/atoms/scope' -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/alternative.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/alternative.rb deleted file mode 100644 index c5f2e39..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/alternative.rb +++ /dev/null @@ -1,50 +0,0 @@ - -# Alternative during matching. Contains a list of parslets that is tried each -# one in turn. Only fails if all alternatives fail. -# -# Example: -# -# str('a') | str('b') # matches either 'a' or 'b' -# -class Parslet::Atoms::Alternative < Parslet::Atoms::Base - attr_reader :alternatives - - # Constructs an Alternative instance using all given parslets in the order - # given. This is what happens if you call '|' on existing parslets, like - # this: - # - # str('a') | str('b') - # - def initialize(*alternatives) - super() - - @alternatives = alternatives - @error_msg = "Expected one of #{alternatives.inspect}" - end - - #--- - # Don't construct a hanging tree of Alternative parslets, instead store them - # all here. This reduces the number of objects created. - #+++ - def |(parslet) - self.class.new(*@alternatives + [parslet]) - end - - def try(source, context, consume_all) - errors = alternatives.map { |a| - success, value = result = a.apply(source, context, consume_all) - return result if success - - # Aggregate all errors - value - } - - # If we reach this point, all alternatives have failed. - context.err(self, source, @error_msg, errors) - end - - precedence ALTERNATE - def to_s_inner(prec) - alternatives.map { |a| a.to_s(prec) }.join(' / ') - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/base.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/base.rb deleted file mode 100644 index 4687905..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/base.rb +++ /dev/null @@ -1,151 +0,0 @@ -# Base class for all parslets, handles orchestration of calls and implements -# a lot of the operator and chaining methods. -# -# Also see Parslet::Atoms::DSL chaining parslet atoms together. -# -class Parslet::Atoms::Base - include Parslet::Atoms::Precedence - include Parslet::Atoms::DSL - include Parslet::Atoms::CanFlatten - - # Given a string or an IO object, this will attempt a parse of its contents - # and return a result. If the parse fails, a Parslet::ParseFailed exception - # will be thrown. - # - # @param io [String, Source] input for the parse process - # @option options [Parslet::ErrorReporter] :reporter error reporter to use, - # defaults to Parslet::ErrorReporter::Tree - # @option options [Boolean] :prefix Should a prefix match be accepted? - # (default: false) - # @return [Hash, Array, Parslet::Slice] PORO (Plain old Ruby object) result - # tree - # - def parse(io, options={}) - source = io.respond_to?(:line_and_column) ? - io : - Parslet::Source.new(io) - - # Try to cheat. Assuming that we'll be able to parse the input, don't - # run error reporting code. - success, value = setup_and_apply(source, nil, !options[:prefix]) - - # If we didn't succeed the parse, raise an exception for the user. - # Stack trace will be off, but the error tree should explain the reason - # it failed. - unless success - # Cheating has not paid off. Now pay the cost: Rerun the parse, - # gathering error information in the process. - reporter = options[:reporter] || Parslet::ErrorReporter::Tree.new - source.pos = 0 - success, value = setup_and_apply(source, reporter, !options[:prefix]) - - fail "Assertion failed: success was true when parsing with reporter" \ - if success - - # Value is a Parslet::Cause, which can be turned into an exception: - value.raise - - fail "NEVER REACHED" - end - - # assert: success is true - - # Extra input is now handled inline with the rest of the parsing. If - # really we have success == true, prefix: false and still some input - # is left dangling, that is a BUG. - if !options[:prefix] && source.chars_left > 0 - fail "BUG: New error strategy should not reach this point." - end - - return flatten(value) - end - - # Creates a context for parsing and applies the current atom to the input. - # Returns the parse result. - # - # @return [] Result of the parse. If the first member is - # true, the parse has succeeded. - def setup_and_apply(source, error_reporter, consume_all) - context = Parslet::Atoms::Context.new(error_reporter) - apply(source, context, consume_all) - end - - # Calls the #try method of this parslet. Success consumes input, error will - # rewind the input. - # - # @param source [Parslet::Source] source to read input from - # @param context [Parslet::Atoms::Context] context to use for the parsing - # @param consume_all [Boolean] true if the current parse must consume - # all input by itself. - def apply(source, context, consume_all=false) - old_pos = source.pos - - success, value = result = context.try_with_cache(self, source, consume_all) - - if success - # If a consume_all parse was made and doesn't result in the consumption - # of all the input, that is considered an error. - if consume_all && source.chars_left>0 - # Read 10 characters ahead. Why ten? I don't know. - offending_pos = source.pos - offending_input = source.consume(10) - - # Rewind input (as happens always in error case) - source.pos = old_pos - - return context.err_at( - self, - source, - "Don't know what to do with #{offending_input.to_s.inspect}", - offending_pos - ) - end - - # Looks like the parse was successful after all. Don't rewind the input. - return result - end - - # We only reach this point if the parse has failed. Rewind the input. - source.pos = old_pos - return result - end - - # Override this in your Atoms::Base subclasses to implement parsing - # behaviour. - # - def try(source, context, consume_all) - raise NotImplementedError, \ - "Atoms::Base doesn't have behaviour, please implement #try(source, context)." - end - - # Returns true if this atom can be cached in the packrat cache. Most parslet - # atoms are cached, so this always returns true, unless overridden. - # - def cached? - true - end - - # Debug printing - in Treetop syntax. - # - def self.precedence(prec) - define_method(:precedence) { prec } - end - precedence BASE - def to_s(outer_prec=OUTER) - if outer_prec < precedence - "("+to_s_inner(precedence)+")" - else - to_s_inner(precedence) - end - end - def inspect - to_s(OUTER) - end -private - - # Produces an instance of Success and returns it. - # - def succ(result) - [true, result] - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/can_flatten.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/can_flatten.rb deleted file mode 100644 index 8f5badc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/can_flatten.rb +++ /dev/null @@ -1,137 +0,0 @@ - -module Parslet::Atoms - # A series of helper functions that have the common topic of flattening - # result values into the intermediary tree that consists of Ruby Hashes and - # Arrays. - # - # This module has one main function, #flatten, that takes an annotated - # structure as input and returns the reduced form that users expect from - # Atom#parse. - # - # NOTE: Since all of these functions are just that, functions without - # side effects, they are in a module and not in a class. Its hard to draw - # the line sometimes, but this is beyond. - # - module CanFlatten - # Takes a mixed value coming out of a parslet and converts it to a return - # value for the user by dropping things and merging hashes. - # - # Named is set to true if this result will be embedded in a Hash result from - # naming something using .as(...). It changes the folding - # semantics of repetition. - # - def flatten(value, named=false) - # Passes through everything that isn't an array of things - return value unless value.instance_of? Array - - # Extracts the s-expression tag - tag, *tail = value - - # Merges arrays: - result = tail. - map { |e| flatten(e) } # first flatten each element - - case tag - when :sequence - return flatten_sequence(result) - when :maybe - return named ? result.first : result.first || '' - when :repetition - return flatten_repetition(result, named) - end - - fail "BUG: Unknown tag #{tag.inspect}." - end - - # Lisp style fold left where the first element builds the basis for - # an inject. - # - def foldl(list, &block) - return '' if list.empty? - list[1..-1].inject(list.first, &block) - end - - # Flatten results from a sequence of parslets. - # - # @api private - # - def flatten_sequence(list) - foldl(list.compact) { |r, e| # and then merge flat elements - merge_fold(r, e) - } - end - # @api private - def merge_fold(l, r) - # equal pairs: merge. ---------------------------------------------------- - if l.class == r.class - if l.is_a?(Hash) - warn_about_duplicate_keys(l, r) - return l.merge(r) - else - return l + r - end - end - - # unequal pairs: hoist to same level. ------------------------------------ - - # Maybe classes are not equal, but both are stringlike? - if l.respond_to?(:to_str) && r.respond_to?(:to_str) - # if we're merging a String with a Slice, the slice wins. - return r if r.respond_to? :to_slice - return l if l.respond_to? :to_slice - - fail "NOTREACHED: What other stringlike classes are there?" - end - - # special case: If one of them is a string/slice, the other is more important - return l if r.respond_to? :to_str - return r if l.respond_to? :to_str - - # otherwise just create an array for one of them to live in - return l + [r] if r.class == Hash - return [l] + r if l.class == Hash - - fail "Unhandled case when foldr'ing sequence." - end - - # Flatten results from a repetition of a single parslet. named indicates - # whether the user has named the result or not. If the user has named - # the results, we want to leave an empty list alone - otherwise it is - # turned into an empty string. - # - # @api private - # - def flatten_repetition(list, named) - if list.any? { |e| e.instance_of?(Hash) } - # If keyed subtrees are in the array, we'll want to discard all - # strings inbetween. To keep them, name them. - return list.select { |e| e.instance_of?(Hash) } - end - - if list.any? { |e| e.instance_of?(Array) } - # If any arrays are nested in this array, flatten all arrays to this - # level. - return list. - select { |e| e.instance_of?(Array) }. - flatten(1) - end - - # Consistent handling of empty lists, when we act on a named result - return [] if named && list.empty? - - # If there are only strings, concatenate them and return that. - foldl(list) { |s,e| s+e } - end - - # That annoying warning 'Duplicate subtrees while merging result' comes - # from here. You should add more '.as(...)' names to your intermediary tree. - # - def warn_about_duplicate_keys(h1, h2) - d = h1.keys & h2.keys - unless d.empty? - warn "Duplicate subtrees while merging result of \n #{self.inspect}\nonly the values"+ - " of the latter will be kept. (keys: #{d.inspect})" - end - end - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/capture.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/capture.rb deleted file mode 100644 index 58acd83..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/capture.rb +++ /dev/null @@ -1,38 +0,0 @@ - -# Stores the result of matching an atom against input in the #captures in -# parse context. Doing so will allow you to pull parts of the ongoing parse -# out later and use them to match other pieces of input. -# -# Example: -# # After this, context.captures[:an_a] returns 'a' -# str('a').capture(:an_a) -# -# # Capture and use of the capture: (matches either 'aa' or 'bb') -# match['ab'].capture(:first) >> -# dynamic { |src, ctx| str(ctx.captures[:first]) } -# -class Parslet::Atoms::Capture < Parslet::Atoms::Base - attr_reader :parslet, :name - - def initialize(parslet, name) - super() - - @parslet, @name = parslet, name - end - - def apply(source, context, consume_all) - success, value = result = parslet.apply(source, context, consume_all) - - if success - context.captures[name.to_sym] = - flatten(value) - end - - return result - end - - def to_s_inner(prec) - "(#{name.inspect} = #{parslet.to_s(prec)})" - end -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/context.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/context.rb deleted file mode 100644 index 231f5e0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/context.rb +++ /dev/null @@ -1,91 +0,0 @@ -module Parslet::Atoms - # Helper class that implements a transient cache that maps position and - # parslet object to results. This is used for memoization in the packrat - # style. - # - # Also, error reporter is stored here and error reporting happens through - # this class. This makes the reporting pluggable. - # - class Context - # @param reporter [#err, #err_at] Error reporter (leave empty for default - # reporter) - def initialize(reporter=Parslet::ErrorReporter::Tree.new) - @cache = Hash.new { |h, k| h[k] = {} } - @reporter = reporter - @captures = Parslet::Scope.new - end - - # Caches a parse answer for obj at source.pos. Applying the same parslet - # at one position of input always yields the same result, unless the input - # has changed. - # - # We need the entire source here so we can ask for how many characters - # were consumed by a successful parse. Imitation of such a parse must - # advance the input pos by the same amount of bytes. - # - def try_with_cache(obj, source, consume_all) - beg = source.pos - - # Not in cache yet? Return early. - unless entry = lookup(obj, beg) - result = obj.try(source, self, consume_all) - - if obj.cached? - set obj, beg, [result, source.pos-beg] - end - - return result - end - - # the condition in unless has returned true, so entry is not nil. - result, advance = entry - - # The data we're skipping here has been read before. (since it is in - # the cache) PLUS the actual contents are not interesting anymore since - # we know obj matches at beg. So skip reading. - source.pos = beg + advance - return result - end - - # Report an error at a given position. - # @see ErrorReporter - # - def err_at(*args) - return [false, @reporter.err_at(*args)] if @reporter - return [false, nil] - end - - # Report an error. - # @see ErrorReporter - # - def err(*args) - return [false, @reporter.err(*args)] if @reporter - return [false, nil] - end - - # Returns the current captures made on the input (see - # Parslet::Atoms::Base#capture). Use as follows: - # - # context.captures[:foobar] # => returns capture :foobar - # - attr_reader :captures - - # Starts a new scope. Use the #scope method of Parslet::Atoms::DSL - # to call this. - # - def scope - captures.push - yield - ensure - captures.pop - end - - private - def lookup(obj, pos) - @cache[pos][obj] - end - def set(obj, pos, val) - @cache[pos][obj] = val - end - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/dsl.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/dsl.rb deleted file mode 100644 index 5e403ae..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/dsl.rb +++ /dev/null @@ -1,109 +0,0 @@ - -# A mixin module that defines operations that can be called on any subclass -# of Parslet::Atoms::Base. These operations make parslets atoms chainable and -# allow combination of parslet atoms to form bigger parsers. -# -# Example: -# -# str('foo') >> str('bar') -# str('f').repeat -# any.absent? # also called The Epsilon -# -module Parslet::Atoms::DSL - # Construct a new atom that repeats the current atom min times at least and - # at most max times. max can be nil to indicate that no maximum is present. - # - # Example: - # # match any number of 'a's - # str('a').repeat - # - # # match between 1 and 3 'a's - # str('a').repeat(1,3) - # - def repeat(min=0, max=nil) - Parslet::Atoms::Repetition.new(self, min, max) - end - - # Returns a new parslet atom that is only maybe present in the input. This - # is synonymous to calling #repeat(0,1). Generated tree value will be - # either nil (if atom is not present in the input) or the matched subtree. - # - # Example: - # str('foo').maybe - # - def maybe - Parslet::Atoms::Repetition.new(self, 0, 1, :maybe) - end - - # Chains two parslet atoms together as a sequence. - # - # Example: - # str('a') >> str('b') - # - def >>(parslet) - Parslet::Atoms::Sequence.new(self, parslet) - end - - # Chains two parslet atoms together to express alternation. A match will - # always be attempted with the parslet on the left side first. If it doesn't - # match, the right side will be tried. - # - # Example: - # # matches either 'a' OR 'b' - # str('a') | str('b') - # - def |(parslet) - Parslet::Atoms::Alternative.new(self, parslet) - end - - # Tests for absence of a parslet atom in the input stream without consuming - # it. - # - # Example: - # # Only proceed the parse if 'a' is absent. - # str('a').absent? - # - def absent? - Parslet::Atoms::Lookahead.new(self, false) - end - - # Tests for presence of a parslet atom in the input stream without consuming - # it. - # - # Example: - # # Only proceed the parse if 'a' is present. - # str('a').present? - # - def present? - Parslet::Atoms::Lookahead.new(self, true) - end - - # Alias for present? that will disappear in 2.0 (deprecated) - # - alias prsnt? present? - - # Alias for absent? that will disappear in 2.0 (deprecated) - # - alias absnt? absent? - - # Marks a parslet atom as important for the tree output. This must be used - # to achieve meaningful output from the #parse method. - # - # Example: - # str('a').as(:b) # will produce {:b => 'a'} - # - def as(name) - Parslet::Atoms::Named.new(self, name) - end - - # Captures a part of the input and stores it under the name given. This - # is very useful to create self-referential parses. A capture stores - # the result of its parse (may be complex) on a successful parse action. - # - # Example: - # str('a').capture(:b) # will store captures[:b] == 'a' - # - def capture(name) - Parslet::Atoms::Capture.new(self, name) - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/dynamic.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/dynamic.rb deleted file mode 100644 index 2dc4a84..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/dynamic.rb +++ /dev/null @@ -1,32 +0,0 @@ -# Evaluates a block at parse time. The result from the block must be a parser -# (something which implements #apply). In the first case, the parser will then -# be applied to the input, creating the result. -# -# Dynamic parses are never cached. -# -# Example: -# dynamic { rand < 0.5 ? str('a') : str('b') } -# -class Parslet::Atoms::Dynamic < Parslet::Atoms::Base - attr_reader :block - - def initialize(block) - @block = block - end - - def cached? - false - end - - def try(source, context, consume_all) - result = block.call(source, context) - - # Result is a parslet atom. - return result.apply(source, context, consume_all) - end - - def to_s_inner(prec) - "dynamic { ... }" - end -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/entity.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/entity.rb deleted file mode 100644 index 4df6050..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/entity.rb +++ /dev/null @@ -1,41 +0,0 @@ -# This wraps pieces of parslet definition and gives them a name. The wrapped -# piece is lazily evaluated and cached. This has two purposes: -# -# * Avoid infinite recursion during evaluation of the definition -# * Be able to print things by their name, not by their sometimes -# complicated content. -# -# You don't normally use this directly, instead you should generated it by -# using the structuring method Parslet.rule. -# -class Parslet::Atoms::Entity < Parslet::Atoms::Base - attr_reader :name, :block - def initialize(name, &block) - super() - - @name = name - @block = block - end - - def try(source, context, consume_all) - parslet.apply(source, context, consume_all) - end - - def parslet - @parslet ||= @block.call.tap { |p| - raise_not_implemented unless p - } - end - - def to_s_inner(prec) - name.to_s.upcase - end -private - def raise_not_implemented - trace = caller.reject {|l| l =~ %r{#{Regexp.escape(__FILE__)}}} # blatantly stolen from dependencies.rb in activesupport - exception = NotImplementedError.new("rule(#{name.inspect}) { ... } returns nil. Still not implemented, but already used?") - exception.set_backtrace(trace) - - raise exception - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/lookahead.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/lookahead.rb deleted file mode 100644 index d50a1b9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/lookahead.rb +++ /dev/null @@ -1,49 +0,0 @@ -# Either positive or negative lookahead, doesn't consume its input. -# -# Example: -# -# str('foo').present? # matches when the input contains 'foo', but leaves it -# -class Parslet::Atoms::Lookahead < Parslet::Atoms::Base - attr_reader :positive - attr_reader :bound_parslet - - def initialize(bound_parslet, positive=true) - super() - - # Model positive and negative lookahead by testing this flag. - @positive = positive - @bound_parslet = bound_parslet - - @error_msgs = { - :positive => ["Input should start with ", bound_parslet], - :negative => ["Input should not start with ", bound_parslet] - } - end - - def try(source, context, consume_all) - pos = source.pos - - success, value = bound_parslet.apply(source, context, consume_all) - - if positive - return succ(nil) if success - return context.err_at(self, source, @error_msgs[:positive], pos) - else - return succ(nil) unless success - return context.err_at(self, source, @error_msgs[:negative], pos) - end - - # This is probably the only parslet that rewinds its input in #try. - # Lookaheads NEVER consume their input, even on success, that's why. - ensure - source.pos = pos - end - - precedence LOOKAHEAD - def to_s_inner(prec) - char = positive ? '&' : '!' - - "#{char}#{bound_parslet.to_s(prec)}" - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/named.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/named.rb deleted file mode 100644 index b5412ba..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/named.rb +++ /dev/null @@ -1,32 +0,0 @@ -# Names a match to influence tree construction. -# -# Example: -# -# str('foo') # will return 'foo', -# str('foo').as(:foo) # will return :foo => 'foo' -# -class Parslet::Atoms::Named < Parslet::Atoms::Base - attr_reader :parslet, :name - def initialize(parslet, name) - super() - - @parslet, @name = parslet, name - end - - def apply(source, context, consume_all) - success, value = result = parslet.apply(source, context, consume_all) - - return result unless success - succ( - produce_return_value( - value)) - end - - def to_s_inner(prec) - "#{name}:#{parslet.to_s(prec)}" - end -private - def produce_return_value(val) - { name => flatten(val, true) } - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/re.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/re.rb deleted file mode 100644 index b6c2ea9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/re.rb +++ /dev/null @@ -1,38 +0,0 @@ -# Matches a special kind of regular expression that only ever matches one -# character at a time. Useful members of this family are: character -# ranges, \\w, \\d, \\r, \\n, ... -# -# Example: -# -# match('[a-z]') # matches a-z -# match('\s') # like regexps: matches space characters -# -class Parslet::Atoms::Re < Parslet::Atoms::Base - attr_reader :match, :re - def initialize(match) - super() - - @match = match.to_s - @re = Regexp.new(self.match, Regexp::MULTILINE) - @error_msgs = { - :premature => "Premature end of input", - :failed => "Failed to match #{match.inspect[1..-2]}" - } - end - - def try(source, context, consume_all) - return succ(source.consume(1)) if source.matches?(re) - - # No string could be read - return context.err(self, source, @error_msgs[:premature]) \ - if source.chars_left < 1 - - # No match - return context.err(self, source, @error_msgs[:failed]) - end - - def to_s_inner(prec) - match.inspect[1..-2] - end -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/repetition.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/repetition.rb deleted file mode 100644 index b45822f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/repetition.rb +++ /dev/null @@ -1,78 +0,0 @@ - -# Matches a parslet repeatedly. -# -# Example: -# -# str('a').repeat(1,3) # matches 'a' at least once, but at most three times -# str('a').maybe # matches 'a' if it is present in the input (repeat(0,1)) -# -class Parslet::Atoms::Repetition < Parslet::Atoms::Base - attr_reader :min, :max, :parslet - def initialize(parslet, min, max, tag=:repetition) - super() - - @parslet = parslet - @min, @max = min, max - @tag = tag - @error_msgs = { - :minrep => "Expected at least #{min} of #{parslet.inspect}", - :unconsumed => "Extra input after last repetition" - } - end - - def try(source, context, consume_all) - occ = 0 - accum = [@tag] # initialize the result array with the tag (for flattening) - start_pos = source.pos - - break_on = nil - loop do - success, value = parslet.apply(source, context, false) - - break_on = value - break unless success - - occ += 1 - accum << value - - # If we're not greedy (max is defined), check if that has been reached. - return succ(accum) if max && occ>=max - end - - # Last attempt to match parslet was a failure, failure reason in break_on. - - # Greedy matcher has produced a failure. Check if occ (which will - # contain the number of sucesses) is >= min. - return context.err_at( - self, - source, - @error_msgs[:minrep], - start_pos, - [break_on]) if occ < min - - # consume_all is true, that means that we're inside the part of the parser - # that should consume the input completely. Repetition failing here means - # probably that we didn't. - # - # We have a special clause to create an error here because otherwise - # break_on would get thrown away. It turns out, that contains very - # interesting information in a lot of cases. - # - return context.err( - self, - source, - @error_msgs[:unconsumed], - [break_on]) if consume_all && source.chars_left>0 - - return succ(accum) - end - - precedence REPETITION - def to_s_inner(prec) - minmax = "{#{min}, #{max}}" - minmax = '?' if min == 0 && max == 1 - - parslet.to_s(prec) + minmax - end -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/scope.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/scope.rb deleted file mode 100644 index 0642601..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/scope.rb +++ /dev/null @@ -1,26 +0,0 @@ -# Starts a new scope in the parsing process. Please also see the #captures -# method. -# -class Parslet::Atoms::Scope < Parslet::Atoms::Base - attr_reader :block - def initialize(block) - super() - - @block = block - end - - def cached? - false - end - - def apply(source, context, consume_all) - context.scope do - parslet = block.call - return parslet.apply(source, context, consume_all) - end - end - - def to_s_inner(prec) - "scope { #{block.call.to_s(prec)} }" - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/sequence.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/sequence.rb deleted file mode 100644 index b556cc9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/sequence.rb +++ /dev/null @@ -1,45 +0,0 @@ -# A sequence of parslets, matched from left to right. Denoted by '>>' -# -# Example: -# -# str('a') >> str('b') # matches 'a', then 'b' -# -class Parslet::Atoms::Sequence < Parslet::Atoms::Base - attr_reader :parslets - def initialize(*parslets) - super() - - @parslets = parslets - @error_msgs = { - :failed => "Failed to match sequence (#{self.inspect})" - } - end - - def >>(parslet) - self.class.new(* @parslets+[parslet]) - end - - def try(source, context, consume_all) - # Presize an array - result = Array.new(parslets.size + 1) - result[0] = :sequence - - parslets.each_with_index do |p, idx| - child_consume_all = consume_all && (idx == parslets.size-1) - success, value = p.apply(source, context, child_consume_all) - - unless success - return context.err(self, source, @error_msgs[:failed], [value]) - end - - result[idx+1] = value - end - - return succ(result) - end - - precedence SEQUENCE - def to_s_inner(prec) - parslets.map { |p| p.to_s(prec) }.join(' ') - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/str.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/str.rb deleted file mode 100644 index ade63dc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/str.rb +++ /dev/null @@ -1,38 +0,0 @@ -# Matches a string of characters. -# -# Example: -# -# str('foo') # matches 'foo' -# -class Parslet::Atoms::Str < Parslet::Atoms::Base - attr_reader :str - def initialize(str) - super() - - @str = str.to_s - @len = str.size - @error_msgs = { - :premature => "Premature end of input", - :failed => "Expected #{str.inspect}, but got " - } - end - - def try(source, context, consume_all) - return succ(source.consume(@len)) if source.matches?(str) - - # Input ending early: - return context.err(self, source, @error_msgs[:premature]) \ - if source.chars_left<@len - - # Expected something, but got something else instead: - error_pos = source.pos - return context.err_at( - self, source, - [@error_msgs[:failed], source.consume(@len)], error_pos) - end - - def to_s_inner(prec) - "'#{str}'" - end -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/visitor.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/visitor.rb deleted file mode 100644 index 8cb7375..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/atoms/visitor.rb +++ /dev/null @@ -1,89 +0,0 @@ -# Augments all parslet atoms with an accept method that will call back -# to the visitor given. - -# -module Parslet::Atoms - class Base - def accept(visitor) - raise NotImplementedError, "No #accept method on #{self.class.name}." - end - end - - class Str - # Call back visitors #visit_str method. See parslet/export for an example. - # - def accept(visitor) - visitor.visit_str(str) - end - end - - class Entity - # Call back visitors #visit_entity method. See parslet/export for an - # example. - # - def accept(visitor) - visitor.visit_entity(name, block) - end - end - - class Named - # Call back visitors #visit_named method. See parslet/export for an - # example. - # - def accept(visitor) - visitor.visit_named(name, parslet) - end - end - - class Sequence - # Call back visitors #visit_sequence method. See parslet/export for an - # example. - # - def accept(visitor) - visitor.visit_sequence(parslets) - end - end - - class Repetition - # Call back visitors #visit_repetition method. See parslet/export for an - # example. - # - def accept(visitor) - visitor.visit_repetition(@tag, min, max, parslet) - end - end - - class Alternative - # Call back visitors #visit_alternative method. See parslet/export for an - # example. - # - def accept(visitor) - visitor.visit_alternative(alternatives) - end - end - - class Lookahead - # Call back visitors #visit_lookahead method. See parslet/export for an - # example. - # - def accept(visitor) - visitor.visit_lookahead(positive, bound_parslet) - end - end - - class Re - # Call back visitors #visit_re method. See parslet/export for an example. - # - def accept(visitor) - visitor.visit_re(match) - end - end -end - -class Parslet::Parser - # Call back visitors #visit_parser method. - # - def accept(visitor) - visitor.visit_parser(root) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/cause.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/cause.rb deleted file mode 100644 index ce5672c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/cause.rb +++ /dev/null @@ -1,94 +0,0 @@ -module Parslet - # Represents a cause why a parse did fail. A lot of these objects are - # constructed - not all of the causes turn out to be failures for the whole - # parse. - # - class Cause - def initialize(message, source, pos, children) - @message, @source, @pos, @children = - message, source, pos, children - end - - # @return [String, Array] A string or an array of message pieces that - # provide failure information. Use #to_s to get a formatted string. - attr_reader :message - - # @return [Parslet::Source] Source that was parsed when this error - # happend. Mainly used for line number information. - attr_reader :source - - # Location of the error. - # - # @return [Fixnum] Position where the error happened. (character offset) - attr_reader :pos - - # When this cause is part of a tree of error causes: child nodes for this - # node. Very often carries the reasons for this cause. - # - # @return [Array] A list of reasons for this cause. - def children - @children ||= [] - end - - # Appends 'at line LINE char CHAR' to the string given. Use +pos+ to - # override the position of the +source+. This method returns an object - # that can be turned into a string using #to_s. - # - # @param source [Parslet::Source] source that was parsed when this error - # happened - # @param pos [Fixnum] position of error - # @param str [String, Array] message parts - # @param children [Array] child nodes for this error tree - # @return [Parslet::Cause] a new instance of {Parslet::Cause} - # - def self.format(source, pos, str, children=[]) - self.new(str, source, pos, children) - end - - def to_s - line, column = source.line_and_column(pos) - # Allow message to be a list of objects. Join them here, since we now - # really need it. - Array(message).map { |o| - o.respond_to?(:to_slice) ? - o.str.inspect : - o.to_s }.join + " at line #{line} char #{column}." - end - - # Signals to the outside that the parse has failed. Use this in - # conjunction with .format for nice error messages. - # - def raise(exception_klass=Parslet::ParseFailed) - exception = exception_klass.new(self.to_s, self) - Kernel.raise exception - end - - # Returns an ascii tree representation of the causes of this node and its - # children. - # - def ascii_tree - StringIO.new.tap { |io| - recursive_ascii_tree(self, io, [true]) }. - string - end - - private - def recursive_ascii_tree(node, stream, curved) - append_prefix(stream, curved) - stream.puts node.to_s - - node.children.each do |child| - last_child = (node.children.last == child) - - recursive_ascii_tree(child, stream, curved + [last_child]) - end - end - def append_prefix(stream, curved) - return if curved.size < 2 - curved[1..-2].each do |c| - stream.print c ? " " : "| " - end - stream.print curved.last ? "`- " : "|- " - end - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/convenience.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/convenience.rb deleted file mode 100644 index 3220bc0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/convenience.rb +++ /dev/null @@ -1,33 +0,0 @@ -class Parslet::Atoms::Base - - # Packages the common idiom - # - # begin - # tree = parser.parse('something') - # rescue Parslet::ParseFailed => error - # puts parser.cause.ascii_tree - # end - # - # into a convenient method. - # - # Usage: - # - # require 'parslet' - # require 'parslet/convenience' - # - # class FooParser < Parslet::Parser - # rule(:foo) { str('foo') } - # root(:foo) - # end - # - # FooParser.new.parse_with_debug('bar') - # - # @see Parslet::Atoms::Base#parse - # - def parse_with_debug str, opts={} - parse str, opts - rescue Parslet::ParseFailed => error - puts error.cause.ascii_tree - end - -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/error_reporter.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/error_reporter.rb deleted file mode 100644 index 567c63a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/error_reporter.rb +++ /dev/null @@ -1,7 +0,0 @@ -# A namespace for all error reporters. -# -module Parslet::ErrorReporter -end - -require 'parslet/error_reporter/tree' -require 'parslet/error_reporter/deepest' \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/error_reporter/deepest.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/error_reporter/deepest.rb deleted file mode 100644 index 102b4f8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/error_reporter/deepest.rb +++ /dev/null @@ -1,95 +0,0 @@ -module Parslet - module ErrorReporter - # Instead of reporting the latest error that happens like {Tree} does, - # this class reports the deepest error. Depth is defined here as how - # advanced into the input an error happens. The errors close to the - # greatest depth tend to be more relevant to the end user, since they - # specify what could be done to make them go away. - # - # More specifically, errors produced by this reporter won't be related to - # the structure of the grammar at all. The positions of the errors will - # be advanced and convey at every grammar level what the deepest rule - # was to fail. - # - class Deepest - def initialize - @deepest_cause = nil - end - - # Produces an error cause that combines the message at the current level - # with the errors that happened at a level below (children). - # - # @param atom [Parslet::Atoms::Base] parslet that failed - # @param source [Source] Source that we're using for this parse. (line - # number information...) - # @param message [String, Array] Error message at this level. - # @param children [Array] A list of errors from a deeper level (or nil). - # @return [Cause] An error tree combining children with message. - # - def err(atom, source, message, children=nil) - position = source.pos - cause = Cause.format(source, position, message, children) - return deepest(cause) - end - - # Produces an error cause that combines the message at the current level - # with the errors that happened at a level below (children). - # - # @param atom [Parslet::Atoms::Base] parslet that failed - # @param source [Source] Source that we're using for this parse. (line - # number information...) - # @param message [String, Array] Error message at this level. - # @param pos [Fixnum] The real position of the error. - # @param children [Array] A list of errors from a deeper level (or nil). - # @return [Cause] An error tree combining children with message. - # - def err_at(atom, source, message, pos, children=nil) - position = pos - cause = Cause.format(source, position, message, children) - return deepest(cause) - end - - # Returns the cause that is currently deepest. Mainly for specs. - # - attr_reader :deepest_cause - - # Checks to see if the lineage of the cause given includes a cause with - # an error position deeper than the current deepest cause stored. If - # yes, it passes the cause through to the caller. If no, it returns the - # current deepest error that was saved as a reference. - # - def deepest(cause) - rank, leaf = deepest_child(cause) - - if !deepest_cause || leaf.pos >= deepest_cause.pos - # This error reaches deeper into the input, save it as reference. - @deepest_cause = leaf - return cause - end - - return deepest_cause - end - - private - # Returns the leaf from a given error tree with the biggest rank. - # - def deepest_child(cause, rank=0) - max_child = cause - max_rank = rank - - if cause.children && !cause.children.empty? - cause.children.each do |child| - c_rank, c_cause = deepest_child(child, rank+1) - - if c_rank > max_rank - max_rank = c_rank - max_child = c_cause - end - end - end - - return max_rank, max_child - end - end - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/error_reporter/tree.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/error_reporter/tree.rb deleted file mode 100644 index 2fb2750..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/error_reporter/tree.rb +++ /dev/null @@ -1,57 +0,0 @@ -module Parslet - module ErrorReporter - # An error reporter has two central methods, one for reporting errors at - # the current parse position (#err) and one for reporting errors at a - # given parse position (#err_at). The reporter can return an object (a - # 'cause') that will be returned to the caller along with the information - # that the parse failed. - # - # When reporting errors on the outer levels of your parser, these methods - # get passed a list of error objects ('causes') from the inner levels. In - # this default implementation, the inner levels are considered error - # subtrees and are appended to the generated tree node at each level, - # thereby constructing an error tree. - # - # This error tree will report in parallel with the grammar structure that - # failed. A one-to-one correspondence exists between each error in the - # tree and the parslet atom that produced that error. - # - # The implementor is really free to use these return values as he sees - # fit. One example would be to return an error state object from these - # methods that is then updated as errors cascade up the parse derivation - # tree. - # - class Tree - # Produces an error cause that combines the message at the current level - # with the errors that happened at a level below (children). - # - # @param atom [Parslet::Atoms::Base] parslet that failed - # @param source [Source] Source that we're using for this parse. (line - # number information...) - # @param message [String, Array] Error message at this level. - # @param children [Array] A list of errors from a deeper level (or nil). - # @return [Cause] An error tree combining children with message. - # - def err(atom, source, message, children=nil) - position = source.pos - Cause.format(source, position, message, children) - end - - # Produces an error cause that combines the message at the current level - # with the errors that happened at a level below (children). - # - # @param atom [Parslet::Atoms::Base] parslet that failed - # @param source [Source] Source that we're using for this parse. (line - # number information...) - # @param message [String, Array] Error message at this level. - # @param pos [Fixnum] The real position of the error. - # @param children [Array] A list of errors from a deeper level (or nil). - # @return [Cause] An error tree combining children with message. - # - def err_at(atom, source, message, pos, children=nil) - position = pos - Cause.format(source, position, message, children) - end - end - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/export.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/export.rb deleted file mode 100644 index 37ab20d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/export.rb +++ /dev/null @@ -1,162 +0,0 @@ -# Allows exporting parslet grammars to other lingos. - -require 'set' -require 'parslet/atoms/visitor' - -class Parslet::Parser - module Visitors - class Citrus - attr_reader :context, :output - def initialize(context) - @context = context - end - - def visit_str(str) - "\"#{str.inspect[1..-2]}\"" - end - def visit_re(match) - match.to_s - end - - def visit_entity(name, block) - context.deferred(name, block) - - "(#{context.mangle_name(name)})" - end - def visit_named(name, parslet) - parslet.accept(self) - end - - def visit_sequence(parslets) - '(' << - parslets. - map { |el| el.accept(self) }. - join(' ') << - ')' - end - def visit_repetition(tag, min, max, parslet) - parslet.accept(self) << "#{min}*#{max}" - end - def visit_alternative(alternatives) - '(' << - alternatives. - map { |el| el.accept(self) }. - join(' | ') << - ')' - end - - def visit_lookahead(positive, bound_parslet) - (positive ? '&' : '!') << - bound_parslet.accept(self) - end - end - - class Treetop < Citrus - def visit_repetition(tag, min, max, parslet) - parslet.accept(self) << "#{min}..#{max}" - end - - def visit_alternative(alternatives) - '(' << - alternatives. - map { |el| el.accept(self) }. - join(' / ') << - ')' - end - end - end - - # A helper class that formats Citrus and Treetop grammars as a string. - # - class PrettyPrinter - attr_reader :visitor - def initialize(visitor_klass) - @visitor = visitor_klass.new(self) - end - - # Pretty prints the given parslet using the visitor that has been - # configured in initialize. Returns the string representation of the - # Citrus or Treetop grammar. - # - def pretty_print(name, parslet) - output = "grammar #{name}\n" - - output << rule('root', parslet) - - seen = Set.new - loop do - # @todo is constantly filled by the visitor (see #deferred). We - # keep going until it is empty. - break if @todo.empty? - name, block = @todo.shift - - # Track what rules we've already seen. This breaks loops. - next if seen.include?(name) - seen << name - - output << rule(name, block.call) - end - - output << "end\n" - end - - # Formats a rule in either dialect. - # - def rule(name, parslet) - " rule #{mangle_name name}\n" << - " " << parslet.accept(visitor) << "\n" << - " end\n" - end - - # Whenever the visitor encounters an rule in a parslet, it defers the - # pretty printing of the rule by calling this method. - # - def deferred(name, content) - @todo ||= [] - @todo << [name, content] - end - - # Mangles names so that Citrus and Treetop can live with it. This mostly - # transforms some of the things that Ruby allows into other patterns. If - # there is collision, we will not detect it for now. - # - def mangle_name(str) - str.to_s.sub(/\?$/, '_p') - end - end - - # Exports the current parser instance as a string in the Citrus dialect. - # - # Example: - # - # require 'parslet/export' - # class MyParser < Parslet::Parser - # root(:expression) - # rule(:expression) { str('foo') } - # end - # - # MyParser.new.to_citrus # => a citrus grammar as a string - # - def to_citrus - PrettyPrinter.new(Visitors::Citrus). - pretty_print(self.class.name, root) - end - - # Exports the current parser instance as a string in the Treetop dialect. - # - # Example: - # - # require 'parslet/export' - # class MyParser < Parslet::Parser - # root(:expression) - # rule(:expression) { str('foo') } - # end - # - # MyParser.new.to_treetop # => a treetop grammar as a string - # - def to_treetop - PrettyPrinter.new(Visitors::Treetop). - pretty_print(self.class.name, root) - end -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/expression.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/expression.rb deleted file mode 100644 index 1cd13e4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/expression.rb +++ /dev/null @@ -1,51 +0,0 @@ - -# Allows specifying rules as strings using the exact same grammar that treetop -# does, minus the actions. This is on one hand a good example of a fully -# fledged parser and on the other hand might even turn out really useful. -# -# This can be viewed as an extension to parslet and might even be hosted in -# its own gem one fine day. -# -class Parslet::Expression - include Parslet - - autoload :Treetop, 'parslet/expression/treetop' - - # Creates a parslet from a foreign language expression. - # - # Example: - # - # Parslet::Expression.new("'a' 'b'") - # - def initialize(str, opts={}, context=self) - @type = opts[:type] || :treetop - @exp = str - @parslet = transform( - parse(str)) - end - - # Transforms the parse tree into a parslet expression. - # - def transform(tree) - transform = Treetop::Transform.new - - # pp tree - transform.apply(tree) - rescue - warn "Could not transform: " + tree.inspect - raise - end - - # Parses the string and returns a parse tree. - # - def parse(str) - parser = Treetop::Parser.new - parser.parse(str) - end - - # Turns this expression into a parslet. - # - def to_parslet - @parslet - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/expression/treetop.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/expression/treetop.rb deleted file mode 100644 index 35da40b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/expression/treetop.rb +++ /dev/null @@ -1,92 +0,0 @@ -class Parslet::Expression::Treetop - class Parser < Parslet::Parser - root(:expression) - - rule(:expression) { alternatives } - - # alternative 'a' / 'b' - rule(:alternatives) { - (simple >> (spaced('/') >> simple).repeat).as(:alt) - } - - # sequence by simple concatenation 'a' 'b' - rule(:simple) { occurrence.repeat(1).as(:seq) } - - # occurrence modifiers - rule(:occurrence) { - atom.as(:repetition) >> spaced('*').as(:sign) | - atom.as(:repetition) >> spaced('+').as(:sign) | - atom.as(:repetition) >> repetition_spec | - - atom.as(:maybe) >> spaced('?') | - atom - } - - rule(:atom) { - spaced('(') >> expression.as(:unwrap) >> spaced(')') | - dot | - string | - char_class - } - - # a character class - rule(:char_class) { - (str('[') >> - (str('\\') >> any | - str(']').absent? >> any).repeat(1) >> - str(']')).as(:match) >> space? - } - - # anything at all - rule(:dot) { spaced('.').as(:any) } - - # recognizing strings - rule(:string) { - str('\'') >> - ( - (str('\\') >> any) | - (str("'").absent? >> any) - ).repeat.as(:string) >> - str('\'') >> space? - } - - # repetition specification like {1, 2} - rule(:repetition_spec) { - spaced('{') >> - integer.maybe.as(:min) >> spaced(',') >> - integer.maybe.as(:max) >> spaced('}') - } - rule(:integer) { - match['0-9'].repeat(1) - } - - # whitespace handling - rule(:space) { match("\s").repeat(1) } - rule(:space?) { space.maybe } - - def spaced(str) - str(str) >> space? - end - end - - class Transform < Parslet::Transform - - rule(:repetition => simple(:rep), :sign => simple(:sign)) { - min = sign=='+' ? 1 : 0 - Parslet::Atoms::Repetition.new(rep, min, nil) } - rule(:repetition => simple(:rep), :min => simple(:min), :max => simple(:max)) { - Parslet::Atoms::Repetition.new(rep, - Integer(min || 0), - max && Integer(max) || nil) } - - rule(:alt => subtree(:alt)) { Parslet::Atoms::Alternative.new(*alt) } - rule(:seq => sequence(:s)) { Parslet::Atoms::Sequence.new(*s) } - rule(:unwrap => simple(:u)) { u } - rule(:maybe => simple(:m)) { |d| d[:m].maybe } - rule(:string => simple(:s)) { Parslet::Atoms::Str.new(s) } - rule(:match => simple(:m)) { Parslet::Atoms::Re.new(m) } - rule(:any => simple(:a)) { Parslet::Atoms::Re.new('.') } - end - -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/parser.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/parser.rb deleted file mode 100644 index a78e443..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/parser.rb +++ /dev/null @@ -1,67 +0,0 @@ - -# The base class for all your parsers. Use as follows: -# -# require 'parslet' -# -# class MyParser < Parslet::Parser -# rule(:a) { str('a').repeat } -# root(:a) -# end -# -# pp MyParser.new.parse('aaaa') # => 'aaaa' -# pp MyParser.new.parse('bbbb') # => Parslet::Atoms::ParseFailed: -# # Don't know what to do with bbbb at line 1 char 1. -# -# Parslet::Parser is also a grammar atom. This means that you can mix full -# fledged parsers freely with small parts of a different parser. -# -# Example: -# class ParserA < Parslet::Parser -# root :aaa -# rule(:aaa) { str('a').repeat(3,3) } -# end -# class ParserB < Parslet::Parser -# root :expression -# rule(:expression) { str('b') >> ParserA.new >> str('b') } -# end -# -# In the above example, ParserB would parse something like 'baaab'. -# -class Parslet::Parser < Parslet::Atoms::Base - include Parslet - - class < { -# :name => 'foobar', -# :args => [1, 2, 3] -# } -# } -# -# A pattern that would match against this tree would be: -# -# { :function_call => { :name => simple(:name), :args => sequence(:args) }} -# -# Note that Parslet::Pattern only matches at a given subtree; it wont try -# to match recursively. To do that, please use Parslet::Transform. -# -class Parslet::Pattern - def initialize(pattern) - @pattern = pattern - end - - # Decides if the given subtree matches this pattern. Returns the bindings - # made on a successful match or nil if the match fails. If you specify - # bindings to be a hash, the mappings in it will be treated like bindings - # made during an attempted match. - # - # Pattern.new('a').match('a', :foo => 'bar') # => { :foo => 'bar' } - # - # @param subtree [String, Hash, Array] poro subtree returned by a parse - # @param bindings [Hash] variable bindings to be verified - # @return [Hash, nil] On success: variable bindings that allow a match. On - # failure: nil - # - def match(subtree, bindings=nil) - bindings = bindings && bindings.dup || Hash.new - return bindings if element_match(subtree, @pattern, bindings) - end - - # Returns true if the tree element given by +tree+ matches the expression - # given by +exp+. This match must respect bindings already made in - # +bindings+. Note that bindings is carried along and modified. - # - # @api private - # - def element_match(tree, exp, bindings) - # p [:elm, tree, exp] - case [tree, exp].map { |e| e.class } - when [Hash,Hash] - return element_match_hash(tree, exp, bindings) - when [Array,Array] - return element_match_ary_single(tree, exp, bindings) - else - # If elements match exactly, then that is good enough in all cases - return true if tree == exp - - # If exp is a bind variable: Check if the binding matches - if exp.respond_to?(:can_bind?) && exp.can_bind?(tree) - return element_match_binding(tree, exp, bindings) - end - - # Otherwise: No match (we don't know anything about the element - # combination) - return false - end - end - - # @api private - # - def element_match_binding(tree, exp, bindings) - var_name = exp.variable_name - - # TODO test for the hidden :_ feature. - if var_name && bound_value = bindings[var_name] - return bound_value == tree - end - - # New binding: - bindings.store var_name, tree - - return true - end - - # @api private - # - def element_match_ary_single(sequence, exp, bindings) - return false if sequence.size != exp.size - - return sequence.zip(exp).all? { |elt, subexp| - element_match(elt, subexp, bindings) } - end - - # @api private - # - def element_match_hash(tree, exp, bindings) - # Early failure when one hash is bigger than the other - return false unless exp.size == tree.size - - # We iterate over expected pattern, since we demand that the keys that - # are there should be in tree as well. - exp.each do |expected_key, expected_value| - return false unless tree.has_key? expected_key - - # Recurse into the value and stop early on failure - value = tree[expected_key] - return false unless element_match(value, expected_value, bindings) - end - - return true - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/pattern/binding.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/pattern/binding.rb deleted file mode 100644 index 2197db7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/pattern/binding.rb +++ /dev/null @@ -1,49 +0,0 @@ - -# Used internally for representing a bind placeholder in a Parslet::Transform -# pattern. This is the superclass for all bindings. -# -# It defines the most permissive kind of bind, the one that matches any subtree -# whatever it looks like. -# -class Parslet::Pattern::SubtreeBind < Struct.new(:symbol) - def variable_name - symbol - end - - def inspect - "#{bind_type_name}(#{symbol.inspect})" - end - - def can_bind?(subtree) - true - end - -private - def bind_type_name - if md=self.class.name.match(/(\w+)Bind/) - md.captures.first.downcase - else - # This path should never be used, but since this is for inspection only, - # let's not raise. - 'unknown_bind' - end - end -end - -# Binds a symbol to a simple subtree, one that is not either a sequence of -# elements or a collection of attributes. -# -class Parslet::Pattern::SimpleBind < Parslet::Pattern::SubtreeBind - def can_bind?(subtree) - not [Hash, Array].include?(subtree.class) - end -end - -# Binds a symbol to a sequence of simple leafs ([element1, element2, ...]) -# -class Parslet::Pattern::SequenceBind < Parslet::Pattern::SubtreeBind - def can_bind?(subtree) - subtree.kind_of?(Array) && - (not subtree.any? { |el| [Hash, Array].include?(el.class) }) - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/rig/rspec.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/rig/rspec.rb deleted file mode 100644 index 0ce2175..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/rig/rspec.rb +++ /dev/null @@ -1,51 +0,0 @@ -RSpec::Matchers.define(:parse) do |input, opts| - as = block = nil - result = trace = nil - match do |parser| - begin - result = parser.parse(input) - block ? - block.call(result) : - (as == result || as.nil?) - rescue Parslet::ParseFailed => ex - trace = ex.cause.ascii_tree if opts && opts[:trace] - false - end - end - - failure_message_for_should do |is| - if block - "expected output of parsing #{input.inspect}" << - " with #{is.inspect} to meet block conditions, but it didn't" - else - "expected " << - (as ? - "output of parsing #{input.inspect}"<< - " with #{is.inspect} to equal #{as.inspect}, but was #{result.inspect}" : - "#{is.inspect} to be able to parse #{input.inspect}") << - (trace ? - "\n"+trace : - '') - end - end - - failure_message_for_should_not do |is| - if block - "expected output of parsing #{input.inspect} with #{is.inspect} not to meet block conditions, but it did" - else - "expected " << - (as ? - "output of parsing #{input.inspect}"<< - " with #{is.inspect} not to equal #{as.inspect}" : - - "#{is.inspect} to not parse #{input.inspect}, but it did") - end - end - - # NOTE: This has a nodoc tag since the rdoc parser puts this into - # Object, a thing I would never allow. - chain :as do |expected_output, &block| - as = expected_output - block = block - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/scope.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/scope.rb deleted file mode 100644 index 3c41e22..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/scope.rb +++ /dev/null @@ -1,42 +0,0 @@ -class Parslet::Scope - # Raised when the accessed slot has never been assigned a value. - # - class NotFound < StandardError - end - - class Binding - attr_reader :parent - - def initialize(parent=nil) - @parent = parent - @hash = Hash.new - end - - def [](k) - @hash.has_key?(k) && @hash[k] || - parent && parent[k] or - raise NotFound - end - def []=(k,v) - @hash.store(k,v) - end - end - - def [](k) - @current[k] - end - def []=(k,v) - @current[k] = v - end - - def initialize - @current = Binding.new - end - - def push - @current = Binding.new(@current) - end - def pop - @current = @current.parent - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/slice.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/slice.rb deleted file mode 100644 index 3e2dd46..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/slice.rb +++ /dev/null @@ -1,101 +0,0 @@ - -# A slice is a small part from the parse input. A slice mainly behaves like -# any other string, except that it remembers where it came from (offset in -# original input). -# -# == Extracting line and column -# -# Using the #line_and_column method, you can extract the line and column in -# the original input where this slice starts. -# -# Example: -# slice.line_and_column # => [1, 13] -# slice.offset # => 12 -# -# == Likeness to strings -# -# Parslet::Slice behaves in many ways like a Ruby String. This likeness -# however is not complete - many of the myriad of operations String supports -# are not yet in Slice. You can always extract the internal string instance by -# calling #to_s. -# -# These omissions are somewhat intentional. Rather than maintaining a full -# delegation, we opt for a partial emulation that gets the job done. -# -class Parslet::Slice - attr_reader :str, :offset - attr_reader :line_cache - - # Construct a slice using a string, an offset and an optional line cache. - # The line cache should be able to answer to the #line_and_column message. - # - def initialize(string, offset, line_cache=nil) - @str, @offset = string, offset - @line_cache = line_cache - end - - # Compares slices to other slices or strings. - # - def == other - str == other - end - - # Match regular expressions. - # - def match(regexp) - str.match(regexp) - end - - # Returns the slices size in characters. - # - def size - str.size - end - - # Concatenate two slices; it is assumed that the second slice begins - # where the first one ends. The offset of the resulting slice is the same - # as the one of this slice. - # - def +(other) - self.class.new(str + other.to_s, offset, line_cache) - end - - # Returns a tuple referring to the original input. - # - def line_and_column - raise ArgumentError, "No line cache was given, cannot infer line and column." \ - unless line_cache - - line_cache.line_and_column(self.offset) - end - - - # Conversion operators ----------------------------------------------------- - def to_str - str - end - alias to_s to_str - - def to_slice - self - end - def to_sym - str.to_sym - end - def to_int - Integer(str) - end - def to_i - str.to_i - end - def to_f - str.to_f - end - - # Inspection & Debugging --------------------------------------------------- - - # Prints the slice as "string"@offset. - def inspect - str.inspect << "@#{offset}" - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/source.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/source.rb deleted file mode 100644 index 3ec14a9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/source.rb +++ /dev/null @@ -1,62 +0,0 @@ - -require 'stringio' - -require 'parslet/source/line_cache' - -module Parslet - # Wraps the input string for parslet. - # - class Source - def initialize(str) - raise ArgumentError unless str.respond_to?(:to_str) - - @pos = 0 - @str = str - - @line_cache = LineCache.new - @line_cache.scan_for_line_endings(0, @str) - end - - # Checks if the given pattern matches at the current input position. - # - # @param pattern [Regexp, String] pattern to check for - # @return [Boolean] true if the pattern matches at #pos - # - def matches?(pattern) - @str.index(pattern, @pos) == @pos - end - alias match matches? - - # Consumes n characters from the input, returning them as a slice of the - # input. - # - def consume(n) - slice_str = @str.slice(@pos, n) - slice = Parslet::Slice.new( - slice_str, - pos, - @line_cache) - - @pos += slice_str.size - return slice - end - - # Returns how many chars remain in the input. - # - def chars_left - @str.size - @pos - end - - # Position of the parse as a character offset into the original string. - # @note: Encodings... - attr_accessor :pos - - # Returns a tuple for the given position. If no position is - # given, line/column information is returned for the current position - # given by #pos. - # - def line_and_column(position=nil) - @line_cache.line_and_column(position || self.pos) - end - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/source/line_cache.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/source/line_cache.rb deleted file mode 100644 index 4699162..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/source/line_cache.rb +++ /dev/null @@ -1,95 +0,0 @@ - - -class Parslet::Source - # A cache for line start positions. - # - class LineCache - def initialize - # Stores line endings as a simple position number. The first line always - # starts at 0; numbers beyond the biggest entry are on any line > size, - # but probably make a scan to that position neccessary. - @line_ends = [] - @line_ends.extend RangeSearch - end - - # Returns a tuple for the given input position. - # - def line_and_column(pos) - eol_idx = @line_ends.lbound(pos) - - if eol_idx - # eol_idx points to the offset that ends the current line. - # Let's try to find the offset that starts it: - offset = eol_idx>0 && @line_ends[eol_idx-1] || 0 - return [eol_idx+1, pos-offset+1] - else - # eol_idx is nil, that means that we're beyond the last line end that - # we know about. Pretend for now that we're just on the last line. - offset = @line_ends.last || 0 - return [@line_ends.size+1, pos-offset+1] - end - end - - def scan_for_line_endings(start_pos, buf) - return unless buf - return unless buf.index("\n") - cur = -1 - - # If we have already read part or all of buf, we already know about - # line ends in that portion. remove it and correct cur (search index) - if @last_line_end && start_pos < @last_line_end - # Let's not search the range from start_pos to last_line_end again. - cur = @last_line_end - start_pos -1 - end - - # Scan the string for line endings; store the positions of all endings - # in @line_ends. - while buf && cur = buf.index("\n", cur+1) - @last_line_end = (start_pos + cur+1) - @line_ends << @last_line_end - end - end - end - - # Mixin for arrays that implicitly give a number of ranges, where one range - # begins where the other one ends. - # - # Example: - # - # [10, 20, 30] - # # would describe [0, 10], (10, 20], (20, 30] - # - module RangeSearch - def find_mid(left, right) - # NOTE: Jonathan Hinkle reported that when mathn is required, just - # dividing and relying on the integer truncation is not enough. - left + ((right - left) / 2).floor - end - - # Scans the array for the first number that is > than bound. Returns the - # index of that number. - # - def lbound(bound) - return nil if empty? - return nil unless last > bound - - left = 0 - right = size - 1 - - loop do - mid = find_mid(left, right) - - if self[mid] > bound - right = mid - else - # assert: self[mid] <= bound - left = mid+1 - end - - if right <= left - return right - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/transform.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/transform.rb deleted file mode 100644 index e3ee4ac..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/transform.rb +++ /dev/null @@ -1,236 +0,0 @@ - -require 'parslet/pattern' - -# Transforms an expression tree into something else. The transformation -# performs a depth-first, post-order traversal of the expression tree. During -# that traversal, each time a rule matches a node, the node is replaced by the -# result of the block associated to the rule. Otherwise the node is accepted -# as is into the result tree. -# -# This is almost what you would generally do with a tree visitor, except that -# you can match several levels of the tree at once. -# -# As a consequence of this, the resulting tree will contain pieces of the -# original tree and new pieces. Most likely, you will want to transform the -# original tree wholly, so this isn't a problem. -# -# You will not be able to create a loop, given that each node will be replaced -# only once and then left alone. This means that the results of a replacement -# will not be acted upon. -# -# Example: -# -# class Example < Parslet::Transform -# rule(:string => simple(:x)) { # (1) -# StringLiteral.new(x) -# } -# end -# -# A tree transform (Parslet::Transform) is defined by a set of rules. Each -# rule can be defined by calling #rule with the pattern as argument. The block -# given will be called every time the rule matches somewhere in the tree given -# to #apply. It is passed a Hash containing all the variable bindings of this -# pattern match. -# -# In the above example, (1) illustrates a simple matching rule. -# -# Let's say you want to parse matching parentheses and distill a maximum nest -# depth. You would probably write a parser like the one in example/parens.rb; -# here's the relevant part: -# -# rule(:balanced) { -# str('(').as(:l) >> balanced.maybe.as(:m) >> str(')').as(:r) -# } -# -# If you now apply this to a string like '(())', you get a intermediate parse -# tree that looks like this: -# -# { -# l: '(', -# m: { -# l: '(', -# m: nil, -# r: ')' -# }, -# r: ')' -# } -# -# This parse tree is good for debugging, but what we would really like to have -# is just the nesting depth. This transformation rule will produce that: -# -# rule(:l => '(', :m => simple(:x), :r => ')') { -# # innermost :m will contain nil -# x.nil? ? 1 : x+1 -# } -# -# = Usage patterns -# -# There are four ways of using this class. The first one is very much -# recommended, followed by the second one for generality. The other ones are -# omitted here. -# -# Recommended usage is as follows: -# -# class MyTransformator < Parslet::Transform -# rule(...) { ... } -# rule(...) { ... } -# # ... -# end -# MyTransformator.new.apply(tree) -# -# Alternatively, you can use the Transform class as follows: -# -# transform = Parslet::Transform.new do -# rule(...) { ... } -# end -# transform.apply(tree) -# -# = Execution context -# -# The execution context of action blocks differs depending on the arity of -# said blocks. This can be confusing. It is however somewhat intentional. You -# should not create fat Transform descendants containing a lot of helper methods, -# instead keep your AST class construction in global scope or make it available -# through a factory. The following piece of code illustrates usage of global -# scope: -# -# transform = Parslet::Transform.new do -# rule(...) { AstNode.new(a_variable) } -# rule(...) { Ast.node(a_variable) } # modules are nice -# end -# transform.apply(tree) -# -# And here's how you would use a class builder (a factory): -# -# transform = Parslet::Transform.new do -# rule(...) { builder.add_node(a_variable) } -# rule(...) { |d| d[:builder].add_node(d[:a_variable]) } -# end -# transform.apply(tree, :builder => Builder.new) -# -# As you can see, Transform allows you to inject local context for your rule -# action blocks to use. -# -class Parslet::Transform - # FIXME: Maybe only part of it? Or maybe only include into constructor - # context? - include Parslet - - autoload :Context, 'parslet/transform/context' - - class << self - # FIXME: Only do this for subclasses? - include Parslet - - # Define a rule for the transform subclass. - # - def rule(expression, &block) - @__transform_rules ||= [] - @__transform_rules << [Parslet::Pattern.new(expression), block] - end - - # Allows accessing the class' rules - # - def rules - @__transform_rules || [] - end - end - - def initialize(&block) - @rules = [] - - if block - instance_eval(&block) - end - end - - # Defines a rule to be applied whenever apply is called on a tree. A rule - # is composed of two parts: - # - # * an *expression pattern* - # * a *transformation block* - # - def rule(expression, &block) - @rules << [ - Parslet::Pattern.new(expression), - block - ] - end - - # Applies the transformation to a tree that is generated by Parslet::Parser - # or a simple parslet. Transformation will proceed down the tree, replacing - # parts/all of it with new objects. The resulting object will be returned. - # - def apply(obj, context=nil) - transform_elt( - case obj - when Hash - recurse_hash(obj, context) - when Array - recurse_array(obj, context) - else - obj - end, - context - ) - end - - # Executes the block on the bindings obtained by Pattern#match, if such a match - # can be made. Depending on the arity of the given block, it is called in - # one of two environments: the current one or a clean toplevel environment. - # - # If you would like the current environment preserved, please use the - # arity 1 variant of the block. Alternatively, you can inject a context object - # and call methods on it (think :ctx => self). - # - # # the local variable a is simulated - # t.call_on_match(:a => :b) { a } - # # no change of environment here - # t.call_on_match(:a => :b) { |d| d[:a] } - # - def call_on_match(bindings, block) - if block - if block.arity == 1 - return block.call(bindings) - else - context = Context.new(bindings) - return context.instance_eval(&block) - end - end - end - - # Allow easy access to all rules, the ones defined in the instance and the - # ones predefined in a subclass definition. - # - def rules - self.class.rules + @rules - end - - # @api private - # - def transform_elt(elt, context) - rules.each do |pattern, block| - if bindings=pattern.match(elt, context) - # Produces transformed value - return call_on_match(bindings, block) - end - end - - # No rule matched - element is not transformed - return elt - end - - # @api private - # - def recurse_hash(hsh, ctx) - hsh.inject({}) do |new_hsh, (k,v)| - new_hsh[k] = apply(v, ctx) - new_hsh - end - end - # @api private - # - def recurse_array(ary, ctx) - ary.map { |elt| apply(elt, ctx) } - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/transform/context.rb b/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/transform/context.rb deleted file mode 100644 index 3a974b6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/parslet-1.5.0/lib/parslet/transform/context.rb +++ /dev/null @@ -1,32 +0,0 @@ -require 'blankslate' - -# Provides a context for tree transformations to run in. The context allows -# accessing each of the bindings in the bindings hash as local method. -# -# Example: -# -# ctx = Context.new(:a => :b) -# ctx.instance_eval do -# a # => :b -# end -# -class Parslet::Transform::Context < BlankSlate - reveal :methods - reveal :respond_to? - reveal :inspect - reveal :to_s - reveal :instance_variable_set - - def meta_def(name, &body) - metaclass = class < - and Aman Gupta - -Permission is hereby granted, free of charge, to any person ob- -taining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without restric- -tion, including without limitation the rights to use, copy, modi- -fy, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is fur- -nished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONIN- -FRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -A small portion of the environ dup'ing code in ext/posix-spawn.c -was taken from glibc and is maybe -Copyright (c) 2011 by The Free Software Foundation or maybe -by others mentioned in the glibc LICENSES file. glibc is -distributed under the terms of the LGPL license. diff --git a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/Gemfile b/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/Gemfile deleted file mode 100644 index 851fabc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/Gemfile +++ /dev/null @@ -1,2 +0,0 @@ -source 'https://rubygems.org' -gemspec diff --git a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/HACKING b/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/HACKING deleted file mode 100644 index 1be9755..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/HACKING +++ /dev/null @@ -1,26 +0,0 @@ -Clone the project: - - git clone http://github.com/rtomayko/posix-spawn.git - cd posix-spawn - bundle install - -Rake tasks can be run without further setup: - - rake build - rake test - rake benchmark - -Just `rake' builds the extension and runs the tests. - -If you want to run the benchmark scripts or tests directly out of a -working copy, first setup your PATH and RUBYLIB environment: - - PATH="$(pwd)/bin:$PATH" - RUBYLIB="$(pwd)/lib:$(pwd)/ext:$RUBYLIB" - export RUBYLIB - -Or, use the following rbdev script to quickly setup your PATH and -RUBYLIB environment for this and other projects adhering to the -Ruby Packaging Standard: - - https://github.com/rtomayko/dotfiles/blob/rtomayko/bin/rbdev diff --git a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/README.md b/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/README.md deleted file mode 100644 index cabf1ac..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/README.md +++ /dev/null @@ -1,260 +0,0 @@ -# posix-spawn - -`fork(2)` calls slow down as the parent process uses more memory due to the need -to copy page tables. In many common uses of fork(), where it is followed by one -of the exec family of functions to spawn child processes (`Kernel#system`, -`IO::popen`, `Process::spawn`, etc.), it's possible to remove this overhead by using -special process spawning interfaces (`posix_spawn()`, `vfork()`, etc.) - -The posix-spawn library aims to implement a subset of the Ruby 1.9 `Process::spawn` -interface in a way that takes advantage of fast process spawning interfaces when -available and provides sane fallbacks on systems that do not. - -### FEATURES - - - Fast, constant-time spawn times across a variety of platforms. - - A largish compatible subset of Ruby 1.9's `Process::spawn` interface and - enhanced versions of `Kernel#system`, Kernel#`, etc. under - Ruby >= 1.8.7 (currently MRI only). - - High level `POSIX::Spawn::Child` class for quick (but correct!) - non-streaming IPC scenarios. - -## BENCHMARKS - -The following benchmarks illustrate time needed to fork/exec a child process at -increasing resident memory sizes on Linux 2.6 and MacOS X. Tests were run using -the [`posix-spawn-benchmark`][pb] program included with the package. - -[pb]: https://github.com/rtomayko/posix-spawn/tree/master/bin - -### Linux - -![](https://chart.googleapis.com/chart?chbh=a,5,25&chxr=1,0,36,7&chd=t:5.77,10.37,15.72,18.31,19.73,25.13,26.70,29.31,31.44,35.49|0.86,0.82,1.06,0.99,0.79,1.06,0.84,0.79,0.93,0.94&chxs=1N**%20secs&chs=900x200&chds=0,36&chxl=0:|50%20MB|100%20MB|150%20MB|200%20MB|250%20MB|300%20MB|350%20MB|400%20MB|450%20MB|500%20MB&cht=bvg&chdl=fspawn%20%28fork%2Bexec%29|pspawn%20%28posix_spawn%29&chtt=posix-spawn-benchmark%20--graph%20--count%20500%20--mem-size%20500%20%28x86_64-linux%29&chco=1f77b4,ff7f0e&chf=bg,s,f8f8f8&chxt=x,y#.png) - -`posix_spawn` is faster than `fork+exec`, and executes in constant time when -used with `POSIX_SPAWN_USEVFORK`. - -`fork+exec` is extremely slow for large parent processes. - -### OSX - -![](https://chart.googleapis.com/chart?chxl=0:|50%20MB|100%20MB|150%20MB|200%20MB|250%20MB|300%20MB|350%20MB|400%20MB|450%20MB|500%20MB&cht=bvg&chdl=fspawn%20%28fork%2Bexec%29|pspawn%20%28posix_spawn%29&chtt=posix-spawn-benchmark%20--graph%20--count%20500%20--mem-size%20500%20%28i686-darwin10.5.0%29&chco=1f77b4,ff7f0e&chf=bg,s,f8f8f8&chxt=x,y&chbh=a,5,25&chxr=1,0,3,0&chd=t:1.95,2.07,2.56,2.29,2.21,2.32,2.15,2.25,1.96,2.02|0.84,0.97,0.89,0.82,1.13,0.89,0.93,0.81,0.83,0.81&chxs=1N**%20secs&chs=900x200&chds=0,3#.png) - -`posix_spawn` is faster than `fork+exec`, but neither is affected by the size of -the parent process. - -## USAGE - -This library includes two distinct interfaces: `POSIX::Spawn::spawn`, a lower -level process spawning interface based on the new Ruby 1.9 `Process::spawn` -method, and `POSIX::Spawn::Child`, a higher level class geared toward easy -spawning of processes with simple string based standard input/output/error -stream handling. The former is much more versatile, the latter requires much -less code for certain common scenarios. - -### POSIX::Spawn::spawn - -The `POSIX::Spawn` module (with help from the accompanying C extension) -implements a subset of the [Ruby 1.9 Process::spawn][ps] interface, largely -through the use of the [IEEE Std 1003.1 `posix_spawn(2)` systems interfaces][po]. -These are widely supported by various UNIX operating systems. - -[ps]: http://www.ruby-doc.org/core-1.9/classes/Process.html#M002230 -[po]: http://pubs.opengroup.org/onlinepubs/009695399/functions/posix_spawn.html - -In its simplest form, the `POSIX::Spawn::spawn` method can be used to execute a -child process similar to `Kernel#system`: - - require 'posix/spawn' - pid = POSIX::Spawn::spawn('echo', 'hello world') - stat = Process::waitpid(pid) - -The first line executes `echo` with a single argument and immediately returns -the new process's `pid`. The second line waits for the process to complete and -returns a `Process::Status` object. Note that `spawn` *does not* wait for the -process to finish execution like `system` and does not reap the child's exit -status -- you must call `Process::waitpid` (or equivalent) or the process will -become a zombie. - -The `spawn` method is capable of performing a large number of additional -operations, from setting up the new process's environment, to changing the -child's working directory, to redirecting arbitrary file descriptors. - -See the Ruby 1.9 [`Process::spawn` documentation][ps] for details and the -`STATUS` section below for a full account of the various `Process::spawn` -features supported by `POSIX::Spawn::spawn`. - -### `system`, `popen4`, and ` - -In addition to the `spawn` method, Ruby 1.9 compatible implementations of -`Kernel#system` and Kernel#\` are provided in the `POSIX::Spawn` -module. The `popen4` method can be used to spawn a process with redirected -stdin, stdout, and stderr objects. - -### POSIX::Spawn as a Mixin - -The `POSIX::Spawn` module can also be mixed in to classes and modules to include -`spawn` and all utility methods in that namespace: - - require 'posix/spawn' - - class YourGreatClass - include POSIX::Spawn - - def speak(message) - pid = spawn('echo', message) - Process::waitpid(pid) - end - - def calculate(expression) - pid, in, out, err = popen4('bc') - in.write(expression) - in.close - out.read - ensure - [in, out, err].each { |io| io.close if !io.closed? } - Process::waitpid(pid) - end - end - -### POSIX::Spawn::Child - -The `POSIX::Spawn::Child` class includes logic for executing child processes and -reading/writing from their standard input, output, and error streams. It's -designed to take all input in a single string and provides all output as single -strings and is therefore not well-suited to streaming large quantities of data -in and out of commands. That said, it has some benefits: - - - **Simple** - requires little code for simple stream input and capture. - - **Internally non-blocking** (using `select(2)`) - handles all pipe hang cases - due to exceeding `PIPE_BUF` limits on one or more streams. - - **Potentially portable** - abstracts lower-level process and stream - management APIs so the class can be made to work on platforms like Java and - Windows where UNIX process spawning and stream APIs are not supported. - -`POSIX::Spawn::Child` takes the standard `spawn` arguments when instantiated, -and runs the process to completion after writing all input and reading all -output: - - >> require 'posix/spawn' - >> child = POSIX::Spawn::Child.new('git', '--help') - -Retrieve process output written to stdout / stderr, or inspect the process's -exit status: - - >> child.out - => "usage: git [--version] [--exec-path[=GIT_EXEC_PATH]]\n ..." - >> child.err - => "" - >> child.status - => # - -Use the `:input` option to write data on the new process's stdin immediately -after spawning: - - >> child = POSIX::Spawn::Child.new('bc', :input => '40 + 2') - >> child.out - "42\n" - -Additional options can be used to specify the maximum output size (`:max`) and -time of execution (`:timeout`) before the child process is aborted. See the -`POSIX::Spawn::Child` docs for more info. - -#### Reading Partial Results - -`POSIX::Spawn::Child.new` spawns the process immediately when instantiated. -As a result, if it is interrupted by an exception (either from reaching the -maximum output size, the time limit, or another factor), it is not possible to -access the `out` or `err` results because the constructor did not complete. - -If you want to get the `out` and `err` data was available when the process -was interrupted, use the `POSIX::Spawn::Child.build` alternate form to -create the child without immediately spawning the process. Call `exec!` -to run the command at a place where you can catch any exceptions: - - >> child = POSIX::Spawn::Child.build('git', 'log', :max => 100) - >> begin - ?> child.exec! - ?> rescue POSIX::Spawn::MaximumOutputExceeded - ?> # limit was reached - ?> end - >> child.out - "commit fa54abe139fd045bf6dc1cc259c0f4c06a9285bb\n..." - -Please note that when the `MaximumOutputExceeded` exception is raised, the -actual combined `out` and `err` data may be a bit longer than the `:max` -value due to internal buffering. - -## STATUS - -The `POSIX::Spawn::spawn` method is designed to be as compatible with Ruby 1.9's -`Process::spawn` as possible. Right now, it is a compatible subset. - -These `Process::spawn` arguments are currently supported to any of -`Spawn::spawn`, `Spawn::system`, `Spawn::popen4`, and `Spawn::Child.new`: - - env: hash - name => val : set the environment variable - name => nil : unset the environment variable - command...: - commandline : command line string which is passed to a shell - cmdname, arg1, ... : command name and one or more arguments (no shell) - [cmdname, argv0], arg1, ... : command name, argv[0] and zero or more arguments (no shell) - options: hash - clearing environment variables: - :unsetenv_others => true : clear environment variables except specified by env - :unsetenv_others => false : don't clear (default) - current directory: - :chdir => str : Not thread-safe when using posix_spawn (see below) - process group: - :pgroup => true or 0 : make a new process group - :pgroup => pgid : join to specified process group - :pgroup => nil : don't change the process group (default) - redirection: - key: - FD : single file descriptor in child process - [FD, FD, ...] : multiple file descriptor in child process - value: - FD : redirect to the file descriptor in parent process - :close : close the file descriptor in child process - string : redirect to file with open(string, "r" or "w") - [string] : redirect to file with open(string, File::RDONLY) - [string, open_mode] : redirect to file with open(string, open_mode, 0644) - [string, open_mode, perm] : redirect to file with open(string, open_mode, perm) - FD is one of follows - :in : the file descriptor 0 which is the standard input - :out : the file descriptor 1 which is the standard output - :err : the file descriptor 2 which is the standard error - integer : the file descriptor of specified the integer - io : the file descriptor specified as io.fileno - -These options are currently NOT supported: - - options: hash - resource limit: resourcename is core, cpu, data, etc. See Process.setrlimit. - :rlimit_resourcename => limit - :rlimit_resourcename => [cur_limit, max_limit] - umask: - :umask => int - redirection: - value: - [:child, FD] : redirect to the redirected file descriptor - file descriptor inheritance: close non-redirected non-standard fds (3, 4, 5, ...) or not - :close_others => false : inherit fds (default for system and exec) - :close_others => true : don't inherit (default for spawn and IO.popen) - -The `:chdir` option provided by Posix::Spawn::Child, Posix::Spawn#spawn, -Posix::Spawn#system and Posix::Spawn#popen4 is not thread-safe because -processes spawned with the posix_spawn(2) system call inherit the working -directory of the calling process. The posix-spawn gem works around this -limitation in the system call by changing the working directory of the calling -process immediately before and after spawning the child process. - -## ACKNOWLEDGEMENTS - -Copyright (c) by -[Ryan Tomayko](http://tomayko.com/about) -and -[Aman Gupta](https://github.com/tmm1). - -See the `COPYING` file for more information on license and redistribution. diff --git a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/Rakefile b/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/Rakefile deleted file mode 100644 index 4175983..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/Rakefile +++ /dev/null @@ -1,43 +0,0 @@ -task :default => :test - -# ========================================================== -# Packaging -# ========================================================== - -GEMSPEC = eval(File.read('posix-spawn.gemspec')) - -require 'rubygems/package_task' -Gem::PackageTask.new(GEMSPEC) do |pkg| -end - -# ========================================================== -# Ruby Extension -# ========================================================== - -begin - require 'rake/extensiontask' -rescue LoadError => boom - warn "ERROR: The rake-compiler gem dependency is missing." - warn "Please run `bundle install' and try again." - raise -end -Rake::ExtensionTask.new('posix_spawn_ext', GEMSPEC) do |ext| - ext.ext_dir = 'ext' -end -task :build => :compile - -# ========================================================== -# Testing -# ========================================================== - -require 'rake/testtask' -Rake::TestTask.new 'test' do |t| - t.libs << "test" - t.test_files = FileList['test/test_*.rb'] -end -task :test => :build - -desc 'Run some benchmarks' -task :benchmark => :build do - ruby '-Ilib', 'bin/posix-spawn-benchmark' -end diff --git a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/TODO b/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/TODO deleted file mode 100644 index bc4c8f9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/TODO +++ /dev/null @@ -1,23 +0,0 @@ -[x] license (LGPL) -[x] fucking name this thing -[x] fastspawn-bm should take iterations and memsize arguments -[x] high level Grit::Process like class (string based) (tmm1) -[x] add FD => '/path/to/file' (all variations) (rtomayko) -[x] raise exception on unhandled options -[x] benchmarks in README (tmm1) -[x] POSIX::Spawn::spawn usage examples in README -[x] POSIX::Spawn#pspawn should be just #spawn -[x] :err => :out case -- currently closing out after dup2'ing -[x] POSIX::Spawn::Process.new should have same method signature as Process::spawn -[x] POSIX::Spawn::Process renamed to POSIX::Spawn::Child -[x] Better POSIX::Spawn#spawn comment docs -[x] POSIX::Spawn::Child usage examples in README - - -[ ] popen* interfaces -[x] system interface -[x] ` interface -[ ] jruby Grit::Process stuff -[ ] make :vfork an option to Spawn#spawn -[ ] check all posix_spawn_* function call return values -[ ] POSIX::Spawn as ::Spawn? (maybe, we'll see) diff --git a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/bin/posix-spawn-benchmark b/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/bin/posix-spawn-benchmark deleted file mode 100755 index 71d0b01..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/bin/posix-spawn-benchmark +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/env ruby -#/ Usage: posix-spawn-benchmark [-n ] [-m ] -#/ Run posix-spawn (Ruby extension) benchmarks and report to standard output. -#/ -#/ Options: -#/ -n, --count=NUM total number of processes to spawn. -#/ -m, --mem-size=MB RES size to bloat to before performing benchmarks. -#/ -g, --graph benchmark at 10MB itervals up to RES and graph results. -#/ -#/ Benchmarks run with -n 1000 -m 100 by default. -require 'optparse' -require 'posix-spawn' -require 'benchmark' -include Benchmark - -allocate = 100 * (1024 ** 2) -iterations = 1_000 -graphmode = false -ARGV.options do |o| - o.set_summary_indent(' ') - o.on("-n", "--count=num") { |val| iterations = val.to_i } - o.on("-m", "--mem-size=MB") { |val| allocate = val.to_i * (1024 ** 2) } - o.on("-g", "--graph") { graphmode = true } - o.on_tail("-h", "--help") { exec "grep ^#/ <'#{__FILE__}' |cut -c4-" } - o.parse! -end - -if graphmode - bloat = [] - data = {} - chunk = allocate / 10 - max = 0 - - 10.times do - puts "allocating #{chunk / (1024 ** 2)}MB (#{(bloat.size+1) * chunk / (1024 ** 2)}MB total)" - bloat << ('x' * chunk) - # size = bloat.size / (1024 ** 2) - - %w[ fspawn pspawn ].each do |type| - print " - benchmarking #{type}... " - time = Benchmark.realtime do - iterations.times do - pid = POSIX::Spawn.send(type, 'true') - Process.wait(pid) - end - end - puts "done (#{time})" - - data[type] ||= [] - data[type] << time - max = time if time > max - end - end - - max = max < 0.5 ? (max * 10).round / 10.0 : max.ceil - minmb, maxmb = chunk/(1024**2), allocate/(1024**2) - series = %w[ fspawn pspawn ].map{|name| data[name].map{|d| "%.2f" % d }.join(',') } - - chart = { - :chs => '900x200', - :cht => 'bvg', # grouped vertical bar chart - :chtt => "posix-spawn-benchmark --graph --count #{iterations} --mem-size #{maxmb} (#{RUBY_PLATFORM})", - - :chf => 'bg,s,f8f8f8', # background - :chbh => 'a,5,25', # 25px between bar groups - - :chd => "t:#{series.join('|')}", # data - :chds => "0,#{max}", # scale - :chdl => 'fspawn (fork+exec)|pspawn (posix_spawn)', # legend - :chco => '1f77b4,ff7f0e', # colors - - :chxt => 'x,y', - :chxr => "1,0,#{max},#{max/5}", # y labels up to max time - :chxs => '1N** secs', # y labels are +=' secs' - :chxl => "0:|#{minmb.step(maxmb, maxmb/10).map{ |mb| "#{mb} MB"}.join('|')}", # x bucket labels - } - - url = "https://chart.googleapis.com/chart?" - url += chart.map do |key, val| - "#{key}=#{val.gsub(' ','%20').gsub('(','%28').gsub(')','%29').gsub('+','%2B')}" - end.join('&') - url += '#.png' - - puts url - - exit! -end - -puts "benchmarking fork/exec vs. posix_spawn over #{iterations} runs" + - " at #{allocate / (1024 ** 2)}M res" - -# bloat the process -bloat = 'x' * allocate - -# run the benchmarks -bm 40 do |x| - x.report("fspawn (fork/exec):") do - iterations.times do - pid = POSIX::Spawn.fspawn('true') - Process.wait(pid) - end - end - x.report("pspawn (posix_spawn):") do - iterations.times do - pid = POSIX::Spawn.pspawn('true') - Process.wait(pid) - end - end - if Process.respond_to?(:spawn) - x.report("spawn (native):") do - iterations.times do - pid = Process.spawn('true') - Process.wait(pid) - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/ext/.RUBYARCHDIR.time b/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/ext/.RUBYARCHDIR.time deleted file mode 100644 index e69de29..0000000 diff --git a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/ext/extconf.rb b/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/ext/extconf.rb deleted file mode 100644 index ac39b60..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/ext/extconf.rb +++ /dev/null @@ -1,11 +0,0 @@ -require 'mkmf' - -# warnings save lives -$CFLAGS << " -Wall " if RbConfig::CONFIG['GCC'] != "" - -if RUBY_PLATFORM =~ /(mswin|mingw|cygwin|bccwin)/ - File.open('Makefile','w'){|f| f.puts "default: \ninstall: " } -else - create_makefile('posix_spawn_ext') -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/ext/posix-spawn.c b/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/ext/posix-spawn.c deleted file mode 100644 index b6f6fe2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/ext/posix-spawn.c +++ /dev/null @@ -1,482 +0,0 @@ -/* we want GNU extensions like POSIX_SPAWN_USEVFORK */ -#ifndef _GNU_SOURCE -#define _GNU_SOURCE 1 -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef RUBY_VM -#include -#else -#include -#endif - -#ifndef RARRAY_LEN -#define RARRAY_LEN(ary) RARRAY(ary)->len -#endif -#ifndef RARRAY_PTR -#define RARRAY_PTR(ary) RARRAY(ary)->ptr -#endif -#ifndef RHASH_SIZE -#define RHASH_SIZE(hash) RHASH(hash)->tbl->num_entries -#endif - -#ifdef __APPLE__ -#include -#define environ (*_NSGetEnviron()) -#else -extern char **environ; -#endif - -static VALUE rb_mPOSIX; -static VALUE rb_mPOSIXSpawn; - -/* Determine the fd number for a Ruby object VALUE. - * - * obj - This can be any valid Ruby object, but only the following return - * an actual fd number: - * - The symbols :in, :out, or :err for fds 0, 1, or 2. - * - An IO object. (IO#fileno is returned) - * - A Fixnum. - * - * Returns the fd number >= 0 if one could be established, or -1 if the object - * does not map to an fd. - */ -static int -posixspawn_obj_to_fd(VALUE obj) -{ - int fd = -1; - switch (TYPE(obj)) { - case T_FIXNUM: - /* Fixnum fd number */ - fd = FIX2INT(obj); - break; - - case T_SYMBOL: - /* (:in|:out|:err) */ - if (SYM2ID(obj) == rb_intern("in")) fd = 0; - else if (SYM2ID(obj) == rb_intern("out")) fd = 1; - else if (SYM2ID(obj) == rb_intern("err")) fd = 2; - break; - - case T_FILE: - /* IO object */ - if (rb_respond_to(obj, rb_intern("posix_fileno"))) { - fd = FIX2INT(rb_funcall(obj, rb_intern("posix_fileno"), 0)); - } else { - fd = FIX2INT(rb_funcall(obj, rb_intern("fileno"), 0)); - } - break; - - case T_OBJECT: - /* some other object */ - if (rb_respond_to(obj, rb_intern("to_io"))) { - obj = rb_funcall(obj, rb_intern("to_io"), 0); - if (rb_respond_to(obj, rb_intern("posix_fileno"))) { - fd = FIX2INT(rb_funcall(obj, rb_intern("posix_fileno"), 0)); - } else { - fd = FIX2INT(rb_funcall(obj, rb_intern("fileno"), 0)); - } - } - break; - } - return fd; -} - -/* - * Hash iterator that sets up the posix_spawn_file_actions_t with addclose - * operations. Only hash pairs whose value is :close are processed. Keys may - * be the :in, :out, :err, an IO object, or a Fixnum fd number. - * - * Returns ST_DELETE when an addclose operation was added; ST_CONTINUE when - * no operation was performed. - */ -static int -posixspawn_file_actions_addclose(VALUE key, VALUE val, posix_spawn_file_actions_t *fops) -{ - int fd; - - /* we only care about { (IO|FD|:in|:out|:err) => :close } */ - if (TYPE(val) != T_SYMBOL || SYM2ID(val) != rb_intern("close")) - return ST_CONTINUE; - - fd = posixspawn_obj_to_fd(key); - if (fd >= 0) { - /* raise an exception if 'fd' is invalid */ - if (fcntl(fd, F_GETFD) == -1) { - char error_context[32]; - snprintf(error_context, sizeof(error_context), "when closing fd %d", fd); - rb_sys_fail(error_context); - return ST_DELETE; - } - posix_spawn_file_actions_addclose(fops, fd); - return ST_DELETE; - } else { - return ST_CONTINUE; - } -} - -/* - * Hash iterator that sets up the posix_spawn_file_actions_t with adddup2 + - * close operations for all redirects. Only hash pairs whose key and value - * represent fd numbers are processed. - * - * Returns ST_DELETE when an adddup2 operation was added; ST_CONTINUE when - * no operation was performed. - */ -static int -posixspawn_file_actions_adddup2(VALUE key, VALUE val, posix_spawn_file_actions_t *fops) -{ - int fd, newfd; - - newfd = posixspawn_obj_to_fd(key); - if (newfd < 0) - return ST_CONTINUE; - - fd = posixspawn_obj_to_fd(val); - if (fd < 0) - return ST_CONTINUE; - - fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) & ~FD_CLOEXEC); - fcntl(newfd, F_SETFD, fcntl(newfd, F_GETFD) & ~FD_CLOEXEC); - posix_spawn_file_actions_adddup2(fops, fd, newfd); - return ST_DELETE; -} - -/* - * Hash iterator that sets up the posix_spawn_file_actions_t with adddup2 + - * clone operations for all file redirects. Only hash pairs whose key is an - * fd number and value is a valid three-tuple [file, flags, mode] are - * processed. - * - * Returns ST_DELETE when an adddup2 operation was added; ST_CONTINUE when - * no operation was performed. - */ -static int -posixspawn_file_actions_addopen(VALUE key, VALUE val, posix_spawn_file_actions_t *fops) -{ - int fd; - char *path; - int oflag; - mode_t mode; - - fd = posixspawn_obj_to_fd(key); - if (fd < 0) - return ST_CONTINUE; - - if (TYPE(val) != T_ARRAY || RARRAY_LEN(val) != 3) - return ST_CONTINUE; - - path = StringValuePtr(RARRAY_PTR(val)[0]); - oflag = FIX2INT(RARRAY_PTR(val)[1]); - mode = FIX2INT(RARRAY_PTR(val)[2]); - - posix_spawn_file_actions_addopen(fops, fd, path, oflag, mode); - return ST_DELETE; -} - -/* - * Main entry point for iterating over the options hash to perform file actions. - * This function dispatches to the addclose and adddup2 functions, stopping once - * an operation was added. - * - * Returns ST_DELETE if one of the handlers performed an operation; ST_CONTINUE - * if not. - */ -static int -posixspawn_file_actions_operations_iter(VALUE key, VALUE val, posix_spawn_file_actions_t *fops) -{ - int act; - - act = posixspawn_file_actions_addclose(key, val, fops); - if (act != ST_CONTINUE) return act; - - act = posixspawn_file_actions_adddup2(key, val, fops); - if (act != ST_CONTINUE) return act; - - act = posixspawn_file_actions_addopen(key, val, fops); - if (act != ST_CONTINUE) return act; - - return ST_CONTINUE; -} - -/* - * Initialize the posix_spawn_file_actions_t structure and add operations from - * the options hash. Keys in the options Hash that are processed by handlers are - * removed. - * - * Returns nothing. - */ -static void -posixspawn_file_actions_init(posix_spawn_file_actions_t *fops, VALUE options) -{ - posix_spawn_file_actions_init(fops); - rb_hash_foreach(options, posixspawn_file_actions_operations_iter, (VALUE)fops); -} - -/* - * Initialize pgroup related flags in the posix_spawnattr struct based on the - * options Hash. - * - * :pgroup => 0 | true - spawned process is in a new process group with the - * same id as the new process's pid. - * :pgroup => pgid - spawned process is in a new process group with id - * pgid. - * :pgroup => nil - spawned process has the same pgid as the parent - * process (this is the default). - * - * The options Hash is modified in place with the :pgroup key being removed. - */ -static void -posixspawn_set_pgroup(VALUE options, posix_spawnattr_t *pattr, short *pflags) -{ - VALUE pgroup_val; - pgroup_val = rb_hash_delete(options, ID2SYM(rb_intern("pgroup"))); - - switch (TYPE(pgroup_val)) { - case T_TRUE: - (*pflags) |= POSIX_SPAWN_SETPGROUP; - posix_spawnattr_setpgroup(pattr, 0); - break; - case T_FIXNUM: - (*pflags) |= POSIX_SPAWN_SETPGROUP; - posix_spawnattr_setpgroup(pattr, FIX2INT(pgroup_val)); - break; - case T_NIL: - break; - default: - rb_raise(rb_eTypeError, ":pgroup option is invalid"); - break; - } -} - -static int -each_env_check_i(VALUE key, VALUE val, VALUE arg) -{ - StringValuePtr(key); - if (!NIL_P(val)) StringValuePtr(val); - return ST_CONTINUE; -} - -static int -each_env_i(VALUE key, VALUE val, VALUE arg) -{ - char *name = StringValuePtr(key); - size_t len = strlen(name); - - /* - * Delete any existing values for this variable before inserting the new value. - * This implementation was copied from glibc's unsetenv(). - */ - char **ep = (char **)arg; - while (*ep != NULL) - if (!strncmp (*ep, name, len) && (*ep)[len] == '=') - { - /* Found it. Remove this pointer by moving later ones back. */ - char **dp = ep; - - do - dp[0] = dp[1]; - while (*dp++); - /* Continue the loop in case NAME appears again. */ - } - else - ++ep; - - /* - * Insert the new value if we have one. We can assume there is space - * at the end of the list, since ep was preallocated to be big enough - * for the new entries. - */ - if (RTEST(val)) { - char **ep = (char **)arg; - char *cval = StringValuePtr(val); - - size_t cval_len = strlen(cval); - size_t ep_len = len + 1 + cval_len + 1; /* +2 for null terminator and '=' separator */ - - /* find the last entry */ - while (*ep != NULL) ++ep; - *ep = malloc(ep_len); - - strncpy(*ep, name, len); - (*ep)[len] = '='; - strncpy(*ep + len + 1, cval, cval_len); - (*ep)[ep_len-1] = 0; - } - - return ST_CONTINUE; -} - -/* - * POSIX::Spawn#_pspawn(env, argv, options) - * - * env - Hash of the new environment. - * argv - The [[cmdname, argv0], argv1, ...] exec array. - * options - The options hash with fd redirect and close operations. - * - * Returns the pid of the newly spawned process. - */ -static VALUE -rb_posixspawn_pspawn(VALUE self, VALUE env, VALUE argv, VALUE options) -{ - int i, ret = 0; - char **envp = NULL; - VALUE dirname; - VALUE cmdname; - VALUE unsetenv_others_p = Qfalse; - char *file; - char *cwd = NULL; - pid_t pid; - posix_spawn_file_actions_t fops; - posix_spawnattr_t attr; - sigset_t mask; - short flags = 0; - - /* argv is a [[cmdname, argv0], argv1, argvN, ...] array. */ - if (TYPE(argv) != T_ARRAY || - TYPE(RARRAY_PTR(argv)[0]) != T_ARRAY || - RARRAY_LEN(RARRAY_PTR(argv)[0]) != 2) - rb_raise(rb_eArgError, "Invalid command name"); - - long argc = RARRAY_LEN(argv); - char *cargv[argc + 1]; - - cmdname = RARRAY_PTR(argv)[0]; - file = StringValuePtr(RARRAY_PTR(cmdname)[0]); - - cargv[0] = StringValuePtr(RARRAY_PTR(cmdname)[1]); - for (i = 1; i < argc; i++) - cargv[i] = StringValuePtr(RARRAY_PTR(argv)[i]); - cargv[argc] = NULL; - - if (TYPE(options) == T_HASH) { - unsetenv_others_p = rb_hash_delete(options, ID2SYM(rb_intern("unsetenv_others"))); - } - - if (RTEST(env)) { - /* - * Make sure env is a hash, and all keys and values are strings. - * We do this before allocating space for the new environment to - * prevent a leak when raising an exception after the calloc() below. - */ - Check_Type(env, T_HASH); - rb_hash_foreach(env, each_env_check_i, 0); - - if (RHASH_SIZE(env) > 0) { - int size = 0; - - char **curr = environ; - if (curr) { - while (*curr != NULL) ++curr, ++size; - } - - if (unsetenv_others_p == Qtrue) { - /* - * ignore the parent's environment by pretending it had - * no entries. the loop below will do nothing. - */ - size = 0; - } - - char **new_env = calloc(size+RHASH_SIZE(env)+1, sizeof(char*)); - for (i = 0; i < size; i++) { - new_env[i] = strdup(environ[i]); - } - envp = new_env; - - rb_hash_foreach(env, each_env_i, (VALUE)envp); - } - } - - posixspawn_file_actions_init(&fops, options); - posix_spawnattr_init(&attr); - - /* child does not block any signals */ - flags |= POSIX_SPAWN_SETSIGMASK; - sigemptyset(&mask); - posix_spawnattr_setsigmask(&attr, &mask); - - /* Child reverts SIGPIPE handler to the default. */ - flags |= POSIX_SPAWN_SETSIGDEF; - sigaddset(&mask, SIGPIPE); - posix_spawnattr_setsigdefault(&attr, &mask); - -#if defined(POSIX_SPAWN_USEVFORK) || defined(__GLIBC__) - /* Force USEVFORK on GNU libc. If this is undefined, it's probably - * because you forgot to define _GNU_SOURCE at the top of this file. - */ - flags |= POSIX_SPAWN_USEVFORK; -#endif - - /* setup pgroup options */ - posixspawn_set_pgroup(options, &attr, &flags); - - posix_spawnattr_setflags(&attr, flags); - - if (RTEST(dirname = rb_hash_delete(options, ID2SYM(rb_intern("chdir"))))) { - char *new_cwd = StringValuePtr(dirname); - cwd = getcwd(NULL, 0); - if (chdir(new_cwd) == -1) { - free(cwd); - cwd = NULL; - ret = errno; - } - } - - if (ret == 0) { - if (RHASH_SIZE(options) == 0) { - ret = posix_spawnp(&pid, file, &fops, &attr, cargv, envp ? envp : environ); - if (cwd) { - /* Ignore chdir failures here. There's already a child running, so - * raising an exception here would do more harm than good. */ - if (chdir(cwd) == -1) {} - } - } else { - ret = -1; - } - } - - if (cwd) - free(cwd); - - posix_spawn_file_actions_destroy(&fops); - posix_spawnattr_destroy(&attr); - if (envp) { - char **ep = envp; - while (*ep != NULL) free(*ep), ++ep; - free(envp); - } - - if (RHASH_SIZE(options) > 0) { - rb_raise(rb_eArgError, "Invalid option: %s", RSTRING_PTR(rb_inspect(rb_funcall(options, rb_intern("first"), 0)))); - return -1; - } - - if (ret != 0) { - char error_context[PATH_MAX+32]; - snprintf(error_context, sizeof(error_context), "when spawning '%s'", file); - errno = ret; - rb_sys_fail(error_context); - } - - return INT2FIX(pid); -} - -void -Init_posix_spawn_ext() -{ - rb_mPOSIX = rb_define_module("POSIX"); - rb_mPOSIXSpawn = rb_define_module_under(rb_mPOSIX, "Spawn"); - rb_define_method(rb_mPOSIXSpawn, "_pspawn", rb_posixspawn_pspawn, 3); -} - -/* vim: set noexpandtab sts=0 ts=4 sw=4: */ diff --git a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/ext/posix-spawn.o b/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/ext/posix-spawn.o deleted file mode 100644 index 0f180e35f9097b16087bd621c04592f5a4fc98be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26112 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 C9JKEM diff --git a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/ext/posix_spawn_ext.bundle b/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/ext/posix_spawn_ext.bundle deleted file mode 100755 index bc53d8d23b5457cbf6255c7220559a3bff29258e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18820 zcmeHPdvp|4ny=0Sf)6?%?0_J&Zcy3PyaYE0ano#Ct1-bSh$w2&Nq5pMo$kQ;5-?Qg$4I$jWL*@7VCAx%W`=L$j`B^}d|_SghLl9szx zE@!NfnPVgrIEGIFZdf7>Ns@gnGEw?r_1AQY&X*_YCE*;d%ZePK)eI#mDl4_o49n{8 zvl+T*BI-^DVNNof$Ni0Ci0ViFB)>1%26fkm$IKCpypNNF_+eJ61138%7b*G^F!{s?TY5 zeOq4t@IQRI>Dd)`{Z#>Y`J{guCOXpJ7?^lCPD5IaM7C@kXCX%_x+dz2M2mbuPax!5 z<7o^Aed~(~Bh8IP5v4ZZi&C-v!qURh!s4P}pq3JGfWayBt_Oxk-G3QM!++MI4-p-k zP^3g7hT*dHQQ6m6xY%UI>SeaW$^tJV?ZUM;*A+U=R)TOYw5Ywkh&PpUIo<L6S)hg!XyDJ*KX(F&hhf4?$}@E z+1sAL1=DHYx>JlDJk8$rBOvgn*xT*~RjKyH`fT?2tp=SPJD8=+POTxWp`AnNbXu8I zrS^%j-aOdn+1sunNg}5p);AlB@%DHH7^0f&Kpm>o1KI_st~)WafM^Hk!5)V)-kqo{ zaP;T8la&SesA0!=c_EBZw`>^OxAuy$L#Wyy?ufuf)xH3w?uhL}&GvCJJ9a2bnU#8% zbbhASOH_A=v0tNJhfuGVNRSXR)%qDQ)!|WGa*X=4gC4CuVqzMpu7$Wdv4~aOM|4sy z$gffllF2E9I~}sUN*(C86E%~lnXFk9@kB*FDxM|JPL<-c20J0_(Co3kY!cby)0iZu z0Ooo?^83eex%$*<>Opm%sK%R!O6KhP0rh{ZZ$O;81JT{YkQA+{xSWwI1+ro)*?$L)wO6?X`w>b)uQHW8L{k zdF1GRGD`4j*u;chO|)x69gEVh=tjx;8ePuo?X%lZ=+U1AJ6GZY7ShR}D^(5chesvX zo!C&|sIsNCi_N}sJ`&Si?pRNragGID8@3u}?#bCfj>W`dG};Ec#>$AH>Q%CW;3P!EDq_pqU!;3OOAllyNMhq`DuaSyU2CbIQGl&84F zM0q`CqZm&sGca{u!l2lW+6vmu*eqgpifZ{~kZV^mxK~uWwNj97wc9<^!v^Wx{#B@= zfoAkqi|QU@GAR!Xi{yFRDR@qml*rOpz;qWJ8a5iS~0!?-G8d9 zB%OKsL5lHCd)pSOUM{)7xQutoQ^i=BAlo5c65DVv4}%^_8TkUbh2X8BKsh^j8T#uvB=x^;l zh}mpdv`1SHbGMqamwI!-r^+ADpjWV7@iSGa-)eSNN7j>7$rt^6I6h21lJh&!cv0P3 zrT$qv01gy3bA>j*p7^6cXeb0v5s3j+rGBopLe`pm3=B+L#_^N8METswD0nBz=)mom zi-PtP30WsjfLyzWLDq?lAhAdlBibQahiLJ!w}o&YPV19=C2}lYHv#j-OL3%XNUE<) zXVkxR8foUqOIV-Ghv=TX)_t>E4^6VSjRR^uG*zC`dT6peKAp^xuTt|$2Ky&b=zoWu z2xnnHJpokz(nP`j+MhU6yNeVOQuYoK}Po;(8|aZqcDC&bL^`L#M2uTh1{5Lx05b4Bh`vl>upk6 zSQt*h+9xLTCA==qnvppDSvI;ShzqNC+v77yBUvff#H4S}D(4N(8=W^fr5n3wn4}7h zQcH91Vg_Xx`dN4IAjMJ;Xmv&NNk^Ia7h7 zBxEi57Hu}SkHltxLiKyZgkG;*#7ek?#oal@7Aoi9uJQ84?${Arr|Dvbdjxi& ze%_$zN^Ng@642RtQ{Cx`f7Y^KJLW7}Rf!mWfOQqCpuKGd zt<~z@N?d9_0x$I`bgER%xSreN&FBLRs}6E@7L?Vl_{S}4sXBJ%x*H2diznlHNV^4Y z=mK-p`3e+-?Ud0;htxN;n;_$=m?t%cCf8B-LS-SCVq#-Qr8S6xOUAYY~Q*|zfqb2q<6q1P(}yj8Z^6Anwa{=6z~-kaH=_W z0f(>)_y{t(v$cay_rlro)YLBUGIzk)_V|my6pIO{Crt{Xk6?YEJJ{*FN|56sbQ zi$lNvr|#s&d~GtB(1`v@dlMFh^=sT3_qQ%~e~WV`TJp4iBptPz)E_mew;Sr!iAHvV zyDJ~3&DVn9SK9xrQxE0QD)sl3>YubMaP@A%Alggw2zOKqUAvXZ*fn8!C^LP-0!q9ipu_-G@bYKdo5&@^Lk)uTKw^+QSyzU651di9eCVWp1Ub%_dPpy|K8SJ0iVpk@bs%2_s>mD?LHj3Wp8FhxB_F#N z^w`_#x#iOt%STO?Q^^u_6EweWc{_w`^TUj3R#AfkOo#^OHkgb*LHFy%f2$iWA>o3q zmw<$Atg|b3qz(YEj>8r+v$C|k4Q}c@cB?Rd2J@+3@b4v`EQtS(bL){fOoI@$AP#O> z<|2RtU{NPmB6!zjOrFe`?1sGmJSe`+6=}OuPKv;Sc56oQSzz9+{e{r)G3lS4(Z3?2 z|1VshI`ve>?a_|FrKon%Mrdc=D*aXn*E{)0Iz50Wd{;X6By?&hQb_4Jm!eYXITb8l z%<@W>U&eBg-UASx$34J;%@T zn^{h)OnOd;3Zbx3c_BmbbC|E|$|Xp!A%3SWZJBJ?Dok zrM^1&BZ{7gr4|wOCQ+qC?Ir4bqNs7HSw!I>n2?%6Q~^<^5QR51LP{WN2~mR> z8UAaD`hqAgQNJguiKsn9-A2@Jh`N`kokY>~EA=u_zawf3QR6VCQ%@6BMAV~1T|?CU zL@7jVBIqGX~zAnInK4imMSs96-h6-0eQZL1N$4xZigm+W9&?QR9u0Ym0LCEUFypEJ_nibTQ@;i|RM+I80Q^-VsV*FL#IqTk7T>efhg{xwpA z;)!^LRt=Ao*kNn0zz=M_`Y-8g@nd!TlHM$(nyo#boGe{-xleY5ngfw=NN5+<7BkOy zbb>PjmRU|z?+FBnUjcrdCm0OZ5fTZp=QjW~0QGetndz-05b^m)Yc=QwpIo=jOUMt@ znDNjAq(7@+&v@7q8_82g4}qeR$LrOf^}wvCv`vY_s5Q;QDNvFn#)`*OLxCAT2~@e2-LwN6ZB#O!5Mx3M4uRFGW^C00&{R--73~ zbhx;^fmZ>y=^~bsKJ$m?v~&<={!Ezs4d54cbUe-d88~CFi-+w^nCy!wNI14}djlKx z#YEtsg3fQoWWSo;DB#%1?F~%&RDTD1>^y95#$?|*jjRRXOKxvq!`^GLH*hxIHJ*!D z7~j=g!0|(8>;A6gcr(X$a@@i3GaPT>__rKyc;Jj*aoMm}8^=mvU_M=Q@s!{z(!x#h>1I6E@<%k7FbLr$I(?BmQL^8}avYY{dUz zj*a-g&an~yKXPou|4hs)@^8fdGLDV-M>sa(|2W4+{NLc%i2oqRM*PpgPhrTv5&xwe z8}Yw|VEqILuueIRy7JP>VKWV|; z7OYt?{m#$ap1Bsh*n(GDaKwU>7W}Uk+-t!f>KM6x?6=?{3!Z?U&{?|v*%n-6!IxU_ z5({2o!LkLnSup+3#C-mLw%}(h_+<<3wqW`ljM?9(7W}0JXJK76>(h&GGd|OT=`}Uv z@S-0j7QDcM7hCWZ7JNC}h)8avE0C&?s*#o=U5QkKbQRLoNXw9xBhegKfkZE-S0Y`9 zL>K2(NH-wSoVW=|LRyVfheY$jhg6T$faFICAl-~ab0mn=h!jE!BhgE4nkx~cD3Xk% zAT=YcL&8z91eph^7U}C3_e_@k7xr}e&TGWxj@{6W;ON^uV*|#wUVPJ~Z?}w% zma)YeakobA!H?Zsolu2st4^rF_EX2#Ft$L)*I=6Y2^bG5V13UD9YG z)Ar~%Vzw_b%bEn*r<-;{1V?Ux%p861a}0-XdWb)~>K-->69RP4Msz z#n_rqNqZ71*=9s1unRfnxyGp9Avc91a(y@$2p2Ud0gSz(W?#q~juh2mj~Vo_Pm_!E zPm>#bjnN|Z=;1>4=;6ZR!ix$^N{XLUEra)vO^xsh|Ecv?;H93*f!V*N|Br8x@ifEj)?nU22ci#8VMMs}>9m>9k z?)QkpMa3uY_o9(8!-YrEuRNpn@Tik|Y$p1BScJ!BVrE$!n~D16q40lgCSq$L{1-)L B1V#V= diff --git a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/lib/posix-spawn.rb b/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/lib/posix-spawn.rb deleted file mode 100644 index 3e28cc0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/lib/posix-spawn.rb +++ /dev/null @@ -1 +0,0 @@ -require "posix/spawn" diff --git a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/lib/posix/spawn.rb b/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/lib/posix/spawn.rb deleted file mode 100644 index ac01638..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/lib/posix/spawn.rb +++ /dev/null @@ -1,545 +0,0 @@ -unless RUBY_PLATFORM =~ /(mswin|mingw|cygwin|bccwin)/ - require 'posix_spawn_ext' -end - -require 'posix/spawn/version' -require 'posix/spawn/child' - -class IO - if defined? JRUBY_VERSION - require 'jruby' - def posix_fileno - case self - when STDIN, $stdin - 0 - when STDOUT, $stdout - 1 - when STDERR, $stderr - 2 - else - JRuby.reference(self).getOpenFile.getMainStream.getDescriptor.getChannel.getFDVal - end - end - else - alias :posix_fileno :fileno - end -end - -module POSIX - # The POSIX::Spawn module implements a compatible subset of Ruby 1.9's - # Process::spawn and related methods using the IEEE Std 1003.1 posix_spawn(2) - # system interfaces where available, or a pure Ruby fork/exec based - # implementation when not. - # - # In Ruby 1.9, a versatile new process spawning interface was added - # (Process::spawn) as the foundation for enhanced versions of existing - # process-related methods like Kernel#system, Kernel#`, and IO#popen. These - # methods are backward compatible with their Ruby 1.8 counterparts but - # support a large number of new options. The POSIX::Spawn module implements - # many of these methods with support for most of Ruby 1.9's features. - # - # The argument signatures for all of these methods follow a new convention, - # making it possible to take advantage of Process::spawn features: - # - # spawn([env], command, [argv1, ...], [options]) - # system([env], command, [argv1, ...], [options]) - # popen([[env], command, [argv1, ...]], mode="r", [options]) - # - # The env, command, and options arguments are described below. - # - # == Environment - # - # If a hash is given in the first argument (env), the child process's - # environment becomes a merge of the parent's and any modifications - # specified in the hash. When a value in env is nil, the variable is - # unset in the child: - # - # # set FOO as BAR and unset BAZ. - # spawn({"FOO" => "BAR", "BAZ" => nil}, 'echo', 'hello world') - # - # == Command - # - # The command and optional argvN string arguments specify the command to - # execute and any program arguments. When only command is given and - # includes a space character, the command text is executed by the system - # shell interpreter, as if by: - # - # /bin/sh -c 'command' - # - # When command does not include a space character, or one or more argvN - # arguments are given, the command is executed as if by execve(2) with - # each argument forming the new program's argv. - # - # NOTE: Use of the shell variation is generally discouraged unless you - # indeed want to execute a shell program. Specifying an explicitly argv is - # typically more secure and less error prone in most cases. - # - # == Options - # - # When a hash is given in the last argument (options), it specifies a - # current directory and zero or more fd redirects for the child process. - # - # The :chdir option specifies the current directory. Note that :chdir is not - # thread-safe on systems that provide posix_spawn(2), because it forces a - # temporary change of the working directory of the calling process. - # - # spawn(command, :chdir => "/var/tmp") - # - # The :in, :out, :err, a Fixnum, an IO object or an Array option specify - # fd redirection. For example, stderr can be merged into stdout as follows: - # - # spawn(command, :err => :out) - # spawn(command, 2 => 1) - # spawn(command, STDERR => :out) - # spawn(command, STDERR => STDOUT) - # - # The key is a fd in the newly spawned child process (stderr in this case). - # The value is a fd in the parent process (stdout in this case). - # - # You can also specify a filename for redirection instead of an fd: - # - # spawn(command, :in => "/dev/null") # read mode - # spawn(command, :out => "/dev/null") # write mode - # spawn(command, :err => "log") # write mode - # spawn(command, 3 => "/dev/null") # read mode - # - # When redirecting to stdout or stderr, the files are opened in write mode; - # otherwise, read mode is used. - # - # It's also possible to control the open flags and file permissions - # directly by passing an array value: - # - # spawn(command, :in=>["file"]) # read mode assumed - # spawn(command, :in=>["file", "r"]) # explicit read mode - # spawn(command, :out=>["log", "w"]) # explicit write mode, 0644 assumed - # spawn(command, :out=>["log", "w", 0600]) - # spawn(command, :out=>["log", File::APPEND | File::CREAT, 0600]) - # - # The array is a [filename, open_mode, perms] tuple. open_mode can be a - # string or an integer. When open_mode is omitted or nil, File::RDONLY is - # assumed. The perms element should be an integer. When perms is omitted or - # nil, 0644 is assumed. - # - # The :close It's possible to direct an fd be closed in the child process. This is - # important for implementing `popen`-style logic and other forms of IPC between - # processes using `IO.pipe`: - # - # rd, wr = IO.pipe - # pid = spawn('echo', 'hello world', rd => :close, :stdout => wr) - # wr.close - # output = rd.read - # Process.wait(pid) - # - # == Spawn Implementation - # - # The POSIX::Spawn#spawn method uses the best available implementation given - # the current platform and Ruby version. In order of preference, they are: - # - # 1. The posix_spawn based C extension method (pspawn). - # 2. Process::spawn when available (Ruby 1.9 only). - # 3. A simple pure-Ruby fork/exec based spawn implementation compatible - # with Ruby >= 1.8.7. - # - module Spawn - extend self - - # Spawn a child process with a variety of options using the best - # available implementation for the current platform and Ruby version. - # - # spawn([env], command, [argv1, ...], [options]) - # - # env - Optional hash specifying the new process's environment. - # command - A string command name, or shell program, used to determine the - # program to execute. - # argvN - Zero or more string program arguments (argv). - # options - Optional hash of operations to perform before executing the - # new child process. - # - # Returns the integer pid of the newly spawned process. - # Raises any number of Errno:: exceptions on failure. - def spawn(*args) - if respond_to?(:_pspawn) - pspawn(*args) - elsif ::Process.respond_to?(:spawn) - ::Process::spawn(*args) - else - fspawn(*args) - end - end - - # Spawn a child process with a variety of options using the posix_spawn(2) - # systems interfaces. Supports the standard spawn interface as described in - # the POSIX::Spawn module documentation. - # - # Raises NotImplementedError when the posix_spawn_ext module could not be - # loaded due to lack of platform support. - def pspawn(*args) - env, argv, options = extract_process_spawn_arguments(*args) - raise NotImplementedError unless respond_to?(:_pspawn) - - if defined? JRUBY_VERSION - # On the JVM, changes made to the environment are not propagated down - # to C via get/setenv, so we have to fake it here. - unless options[:unsetenv_others] == true - env = ENV.merge(env) - options[:unsetenv_others] = true - end - end - - _pspawn(env, argv, options) - end - - # Spawn a child process with a variety of options using a pure - # Ruby fork + exec. Supports the standard spawn interface as described in - # the POSIX::Spawn module documentation. - def fspawn(*args) - env, argv, options = extract_process_spawn_arguments(*args) - valid_options = [:chdir, :unsetenv_others, :pgroup] - - if badopt = options.find{ |key,val| !fd?(key) && !valid_options.include?(key) } - raise ArgumentError, "Invalid option: #{badopt[0].inspect}" - elsif !argv.is_a?(Array) || !argv[0].is_a?(Array) || argv[0].size != 2 - raise ArgumentError, "Invalid command name" - end - - fork do - begin - # handle FD => {FD, :close, [file,mode,perms]} options - options.each do |key, val| - if fd?(key) - key = fd_to_io(key) - - if fd?(val) - val = fd_to_io(val) - key.reopen(val) - if key.respond_to?(:close_on_exec=) - key.close_on_exec = false - val.close_on_exec = false - end - elsif val == :close - if key.respond_to?(:close_on_exec=) - key.close_on_exec = true - else - key.close - end - elsif val.is_a?(Array) - file, mode_string, perms = *val - key.reopen(File.open(file, mode_string, perms)) - end - end - end - - # setup child environment - ENV.replace({}) if options[:unsetenv_others] == true - env.each { |k, v| ENV[k] = v } - - # { :chdir => '/' } in options means change into that dir - ::Dir.chdir(options[:chdir]) if options[:chdir] - - # { :pgroup => pgid } options - pgroup = options[:pgroup] - pgroup = 0 if pgroup == true - Process::setpgid(0, pgroup) if pgroup - - # do the deed - if RUBY_VERSION =~ /\A1\.8/ - ::Kernel::exec(*argv) - else - argv_and_options = argv + [{:close_others=>false}] - ::Kernel::exec(*argv_and_options) - end - ensure - exit!(127) - end - end - end - - # Executes a command and waits for it to complete. The command's exit - # status is available as $?. Supports the standard spawn interface as - # described in the POSIX::Spawn module documentation. - # - # This method is compatible with Kernel#system. - # - # Returns true if the command returns a zero exit status, or false for - # non-zero exit. - def system(*args) - pid = spawn(*args) - return false if pid <= 0 - ::Process.waitpid(pid) - $?.exitstatus == 0 - rescue Errno::ENOENT - false - end - - # Executes a command in a subshell using the system's shell interpreter - # and returns anything written to the new process's stdout. This method - # is compatible with Kernel#`. - # - # Returns the String output of the command. - def `(cmd) - r, w = IO.pipe - command_and_args = system_command_prefixes + [cmd, {:out => w, r => :close}] - pid = spawn(*command_and_args) - - if pid > 0 - w.close - out = r.read - ::Process.waitpid(pid) - out - else - '' - end - ensure - [r, w].each{ |io| io.close rescue nil } - end - - # Spawn a child process with all standard IO streams piped in and out of - # the spawning process. Supports the standard spawn interface as described - # in the POSIX::Spawn module documentation. - # - # Returns a [pid, stdin, stdout, stderr] tuple, where pid is the new - # process's pid, stdin is a writeable IO object, and stdout / stderr are - # readable IO objects. The caller should take care to close all IO objects - # when finished and the child process's status must be collected by a call - # to Process::waitpid or equivalent. - def popen4(*argv) - # create some pipes (see pipe(2) manual -- the ruby docs suck) - ird, iwr = IO.pipe - ord, owr = IO.pipe - erd, ewr = IO.pipe - - # spawn the child process with either end of pipes hooked together - opts = - ((argv.pop if argv[-1].is_a?(Hash)) || {}).merge( - # redirect fds # close other sides - :in => ird, iwr => :close, - :out => owr, ord => :close, - :err => ewr, erd => :close - ) - pid = spawn(*(argv + [opts])) - - [pid, iwr, ord, erd] - ensure - # we're in the parent, close child-side fds - [ird, owr, ewr].each { |fd| fd.close if fd } - end - - ## - # Process::Spawn::Child Exceptions - - # Exception raised when the total number of bytes output on the command's - # stderr and stdout streams exceeds the maximum output size (:max option). - # Currently - class MaximumOutputExceeded < StandardError - end - - # Exception raised when timeout is exceeded. - class TimeoutExceeded < StandardError - end - - private - - # Turns the various varargs incantations supported by Process::spawn into a - # simple [env, argv, options] tuple. This just makes life easier for the - # extension functions. - # - # The following method signature is supported: - # Process::spawn([env], command, ..., [options]) - # - # The env and options hashes are optional. The command may be a variable - # number of strings or an Array full of strings that make up the new process's - # argv. - # - # Returns an [env, argv, options] tuple. All elements are guaranteed to be - # non-nil. When no env or options are given, empty hashes are returned. - def extract_process_spawn_arguments(*args) - # pop the options hash off the end if it's there - options = - if args[-1].respond_to?(:to_hash) - args.pop.to_hash - else - {} - end - flatten_process_spawn_options!(options) - normalize_process_spawn_redirect_file_options!(options) - - # shift the environ hash off the front if it's there and account for - # possible :env key in options hash. - env = - if args[0].respond_to?(:to_hash) - args.shift.to_hash - else - {} - end - env.merge!(options.delete(:env)) if options.key?(:env) - - # remaining arguments are the argv supporting a number of variations. - argv = adjust_process_spawn_argv(args) - - [env, argv, options] - end - - # Convert { [fd1, fd2, ...] => (:close|fd) } options to individual keys, - # like: { fd1 => :close, fd2 => :close }. This just makes life easier for the - # spawn implementations. - # - # options - The options hash. This is modified in place. - # - # Returns the modified options hash. - def flatten_process_spawn_options!(options) - options.to_a.each do |key, value| - if key.respond_to?(:to_ary) - key.to_ary.each { |fd| options[fd] = value } - options.delete(key) - end - end - end - - # Mapping of string open modes to integer oflag versions. - OFLAGS = { - "r" => File::RDONLY, - "r+" => File::RDWR | File::CREAT, - "w" => File::WRONLY | File::CREAT | File::TRUNC, - "w+" => File::RDWR | File::CREAT | File::TRUNC, - "a" => File::WRONLY | File::APPEND | File::CREAT, - "a+" => File::RDWR | File::APPEND | File::CREAT - } - - # Convert variations of redirecting to a file to a standard tuple. - # - # :in => '/some/file' => ['/some/file', 'r', 0644] - # :out => '/some/file' => ['/some/file', 'w', 0644] - # :err => '/some/file' => ['/some/file', 'w', 0644] - # STDIN => '/some/file' => ['/some/file', 'r', 0644] - # - # Returns the modified options hash. - def normalize_process_spawn_redirect_file_options!(options) - options.to_a.each do |key, value| - next if !fd?(key) - - # convert string and short array values to - if value.respond_to?(:to_str) - value = default_file_reopen_info(key, value) - elsif value.respond_to?(:to_ary) && value.size < 3 - defaults = default_file_reopen_info(key, value[0]) - value += defaults[value.size..-1] - else - value = nil - end - - # replace string open mode flag maybe and replace original value - if value - value[1] = OFLAGS[value[1]] if value[1].respond_to?(:to_str) - options[key] = value - end - end - end - - # The default [file, flags, mode] tuple for a given fd and filename. The - # default flags vary based on the what fd is being redirected. stdout and - # stderr default to write, while stdin and all other fds default to read. - # - # fd - The file descriptor that is being redirected. This may be an IO - # object, integer fd number, or :in, :out, :err for one of the standard - # streams. - # file - The string path to the file that fd should be redirected to. - # - # Returns a [file, flags, mode] tuple. - def default_file_reopen_info(fd, file) - case fd - when :in, STDIN, $stdin, 0 - [file, "r", 0644] - when :out, STDOUT, $stdout, 1 - [file, "w", 0644] - when :err, STDERR, $stderr, 2 - [file, "w", 0644] - else - [file, "r", 0644] - end - end - - # Determine whether object is fd-like. - # - # Returns true if object is an instance of IO, Fixnum >= 0, or one of the - # the symbolic names :in, :out, or :err. - def fd?(object) - case object - when Fixnum - object >= 0 - when :in, :out, :err, STDIN, STDOUT, STDERR, $stdin, $stdout, $stderr, IO - true - else - object.respond_to?(:to_io) && !object.to_io.nil? - end - end - - # Convert a fd identifier to an IO object. - # - # Returns nil or an instance of IO. - def fd_to_io(object) - case object - when STDIN, STDOUT, STDERR, $stdin, $stdout, $stderr - object - when :in, 0 - STDIN - when :out, 1 - STDOUT - when :err, 2 - STDERR - when Fixnum - object >= 0 ? IO.for_fd(object) : nil - when IO - object - else - object.respond_to?(:to_io) ? object.to_io : nil - end - end - - # Derives the shell command to use when running the spawn. - # - # On a Windows machine, this will yield: - # [['cmd.exe', 'cmd.exe'], '/c'] - # Note: 'cmd.exe' is used if the COMSPEC environment variable - # is not specified. If you would like to use something other - # than 'cmd.exe', specify its path in ENV['COMSPEC'] - # - # On all other systems, this will yield: - # [['/bin/sh', '/bin/sh'], '-c'] - # - # Returns a platform-specific [[, ], ] array. - def system_command_prefixes - if RUBY_PLATFORM =~ /(mswin|mingw|cygwin|bccwin)/ - sh = ENV['COMSPEC'] || 'cmd.exe' - [[sh, sh], '/c'] - else - [['/bin/sh', '/bin/sh'], '-c'] - end - end - - # Converts the various supported command argument variations into a - # standard argv suitable for use with exec. This includes detecting commands - # to be run through the shell (single argument strings with spaces). - # - # The args array may follow any of these variations: - # - # 'true' => [['true', 'true']] - # 'echo', 'hello', 'world' => [['echo', 'echo'], 'hello', 'world'] - # 'echo hello world' => [['/bin/sh', '/bin/sh'], '-c', 'echo hello world'] - # ['echo', 'fuuu'], 'hello' => [['echo', 'fuuu'], 'hello'] - # - # Returns a [[cmdname, argv0], argv1, ...] array. - def adjust_process_spawn_argv(args) - if args.size == 1 && args[0] =~ /[ |>]/ - # single string with these characters means run it through the shell - command_and_args = system_command_prefixes + [args[0]] - [*command_and_args] - elsif !args[0].respond_to?(:to_ary) - # [argv0, argv1, ...] - [[args[0], args[0]], *args[1..-1]] - else - # [[cmdname, argv0], argv1, ...] - args - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/lib/posix/spawn/child.rb b/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/lib/posix/spawn/child.rb deleted file mode 100644 index 4c12a29..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/lib/posix/spawn/child.rb +++ /dev/null @@ -1,283 +0,0 @@ -require 'posix/spawn' - -module POSIX - module Spawn - # POSIX::Spawn::Child includes logic for executing child processes and - # reading/writing from their standard input, output, and error streams. It's - # designed to take all input in a single string and provides all output - # (stderr and stdout) as single strings and is therefore not well-suited - # to streaming large quantities of data in and out of commands. - # - # Create and run a process to completion: - # - # >> child = POSIX::Spawn::Child.new('git', '--help') - # - # Retrieve stdout or stderr output: - # - # >> child.out - # => "usage: git [--version] [--exec-path[=GIT_EXEC_PATH]]\n ..." - # >> child.err - # => "" - # - # Check process exit status information: - # - # >> child.status - # => # - # - # To write data on the new process's stdin immediately after spawning: - # - # >> child = POSIX::Spawn::Child.new('bc', :input => '40 + 2') - # >> child.out - # "42\n" - # - # To access output from the process even if an exception was raised: - # - # >> child = POSIX::Spawn::Child.build('git', 'log', :max => 1000) - # >> begin - # ?> child.exec! - # ?> rescue POSIX::Spawn::MaximumOutputExceeded - # ?> # just so you know - # ?> end - # >> child.out - # "... first 1000 characters of log output ..." - # - # Q: Why use POSIX::Spawn::Child instead of popen3, hand rolled fork/exec - # code, or Process::spawn? - # - # - It's more efficient than popen3 and provides meaningful process - # hierarchies because it performs a single fork/exec. (popen3 double forks - # to avoid needing to collect the exit status and also calls - # Process::detach which creates a Ruby Thread!!!!). - # - # - It handles all max pipe buffer (PIPE_BUF) hang cases when reading and - # writing semi-large amounts of data. This is non-trivial to implement - # correctly and must be accounted for with popen3, spawn, or hand rolled - # fork/exec code. - # - # - It's more portable than hand rolled pipe, fork, exec code because - # fork(2) and exec aren't available on all platforms. In those cases, - # POSIX::Spawn::Child falls back to using whatever janky substitutes - # the platform provides. - class Child - include POSIX::Spawn - - # Spawn a new process, write all input and read all output, and wait for - # the program to exit. Supports the standard spawn interface as described - # in the POSIX::Spawn module documentation: - # - # new([env], command, [argv1, ...], [options]) - # - # The following options are supported in addition to the standard - # POSIX::Spawn options: - # - # :input => str Write str to the new process's standard input. - # :timeout => int Maximum number of seconds to allow the process - # to execute before aborting with a TimeoutExceeded - # exception. - # :max => total Maximum number of bytes of output to allow the - # process to generate before aborting with a - # MaximumOutputExceeded exception. - # :pgroup_kill => bool Boolean specifying whether to kill the process - # group (true) or individual process (false, default). - # Setting this option true implies :pgroup => true. - # - # Returns a new Child instance whose underlying process has already - # executed to completion. The out, err, and status attributes are - # immediately available. - def initialize(*args) - @env, @argv, options = extract_process_spawn_arguments(*args) - @options = options.dup - @input = @options.delete(:input) - @timeout = @options.delete(:timeout) - @max = @options.delete(:max) - if @options.delete(:pgroup_kill) - @pgroup_kill = true - @options[:pgroup] = true - end - @options.delete(:chdir) if @options[:chdir].nil? - exec! if !@options.delete(:noexec) - end - - # Set up a new process to spawn, but do not actually spawn it. - # - # Invoke this just like the normal constructor to set up a process - # to be run. Call `exec!` to actually run the child process, send - # the input, read the output, and wait for completion. Use this - # alternative way of constructing a POSIX::Spawn::Child if you want - # to read any partial output from the child process even after an - # exception. - # - # child = POSIX::Spawn::Child.build(... arguments ...) - # child.exec! - # - # The arguments are the same as the regular constructor. - # - # Returns a new Child instance but does not run the underlying process. - def self.build(*args) - options = - if args[-1].respond_to?(:to_hash) - args.pop.to_hash - else - {} - end - new(*(args + [{ :noexec => true }.merge(options)])) - end - - # All data written to the child process's stdout stream as a String. - attr_reader :out - - # All data written to the child process's stderr stream as a String. - attr_reader :err - - # A Process::Status object with information on how the child exited. - attr_reader :status - - # Total command execution time (wall-clock time) - attr_reader :runtime - - # The pid of the spawned child process. This is unlikely to be a valid - # current pid since Child#exec! doesn't return until the process finishes - # and is reaped. - attr_reader :pid - - # Determine if the process did exit with a zero exit status. - def success? - @status && @status.success? - end - - # Execute command, write input, and read output. This is called - # immediately when a new instance of this object is created, or - # can be called explicitly when creating the Child via `build`. - def exec! - # spawn the process and hook up the pipes - pid, stdin, stdout, stderr = popen4(@env, *(@argv + [@options])) - @pid = pid - - # async read from all streams into buffers - read_and_write(@input, stdin, stdout, stderr, @timeout, @max) - - # grab exit status - @status = waitpid(pid) - rescue Object => boom - [stdin, stdout, stderr].each { |fd| fd.close rescue nil } - if @status.nil? - if !@pgroup_kill - ::Process.kill('TERM', pid) rescue nil - else - ::Process.kill('-TERM', pid) rescue nil - end - @status = waitpid(pid) rescue nil - end - raise - ensure - # let's be absolutely certain these are closed - [stdin, stdout, stderr].each { |fd| fd.close rescue nil } - end - - private - # Maximum buffer size for reading - BUFSIZE = (32 * 1024) - - # Start a select loop writing any input on the child's stdin and reading - # any output from the child's stdout or stderr. - # - # input - String input to write on stdin. May be nil. - # stdin - The write side IO object for the child's stdin stream. - # stdout - The read side IO object for the child's stdout stream. - # stderr - The read side IO object for the child's stderr stream. - # timeout - An optional Numeric specifying the total number of seconds - # the read/write operations should occur for. - # - # Returns an [out, err] tuple where both elements are strings with all - # data written to the stdout and stderr streams, respectively. - # Raises TimeoutExceeded when all data has not been read / written within - # the duration specified in the timeout argument. - # Raises MaximumOutputExceeded when the total number of bytes output - # exceeds the amount specified by the max argument. - def read_and_write(input, stdin, stdout, stderr, timeout=nil, max=nil) - max = nil if max && max <= 0 - @out, @err = '', '' - offset = 0 - - # force all string and IO encodings to BINARY under 1.9 for now - if @out.respond_to?(:force_encoding) and stdin.respond_to?(:set_encoding) - [stdin, stdout, stderr].each do |fd| - fd.set_encoding('BINARY', 'BINARY') - end - @out.force_encoding('BINARY') - @err.force_encoding('BINARY') - input = input.dup.force_encoding('BINARY') if input - end - - timeout = nil if timeout && timeout <= 0.0 - @runtime = 0.0 - start = Time.now - - readers = [stdout, stderr] - writers = - if input - [stdin] - else - stdin.close - [] - end - slice_method = input.respond_to?(:byteslice) ? :byteslice : :slice - t = timeout - - while readers.any? || writers.any? - ready = IO.select(readers, writers, readers + writers, t) - raise TimeoutExceeded if ready.nil? - - # write to stdin stream - ready[1].each do |fd| - begin - boom = nil - size = fd.write_nonblock(input) - input = input.send(slice_method, size..-1) - rescue Errno::EPIPE => boom - rescue Errno::EAGAIN, Errno::EINTR - end - if boom || input.bytesize == 0 - stdin.close - writers.delete(stdin) - end - end - - # read from stdout and stderr streams - ready[0].each do |fd| - buf = (fd == stdout) ? @out : @err - begin - buf << fd.readpartial(BUFSIZE) - rescue Errno::EAGAIN, Errno::EINTR - rescue EOFError - readers.delete(fd) - fd.close - end - end - - # keep tabs on the total amount of time we've spent here - @runtime = Time.now - start - if timeout - t = timeout - @runtime - raise TimeoutExceeded if t < 0.0 - end - - # maybe we've hit our max output - if max && ready[0].any? && (@out.size + @err.size) > max - raise MaximumOutputExceeded - end - end - - [@out, @err] - end - - # Wait for the child process to exit - # - # Returns the Process::Status object obtained by reaping the process. - def waitpid(pid) - ::Process::waitpid(pid) - $? - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/lib/posix/spawn/version.rb b/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/lib/posix/spawn/version.rb deleted file mode 100644 index b868e6c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/lib/posix/spawn/version.rb +++ /dev/null @@ -1,5 +0,0 @@ -module POSIX - module Spawn - VERSION = '0.3.11' - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/posix-spawn.gemspec b/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/posix-spawn.gemspec deleted file mode 100644 index ea6fafd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/posix-spawn.gemspec +++ /dev/null @@ -1,25 +0,0 @@ -require File.expand_path('../lib/posix/spawn/version', __FILE__) - -Gem::Specification.new do |s| - s.name = 'posix-spawn' - s.version = POSIX::Spawn::VERSION - - s.summary = 'posix_spawnp(2) for ruby' - s.description = 'posix-spawn uses posix_spawnp(2) for faster process spawning' - - s.homepage = 'https://github.com/rtomayko/posix-spawn' - - s.authors = ['Ryan Tomayko', 'Aman Gupta'] - s.email = ['r@tomayko.com', 'aman@tmm1.net'] - s.licenses = ['MIT', 'LGPL'] - - s.add_development_dependency 'rake-compiler', '0.7.6' - s.add_development_dependency 'minitest', '>= 4' - - s.extensions = ['ext/extconf.rb'] - s.executables << 'posix-spawn-benchmark' - s.require_paths = ['lib'] - - s.files = `git ls-files`.split("\n") - s.extra_rdoc_files = %w[ COPYING HACKING ] -end diff --git a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/test/test_backtick.rb b/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/test/test_backtick.rb deleted file mode 100644 index 015f359..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/test/test_backtick.rb +++ /dev/null @@ -1,36 +0,0 @@ -require 'test_helper' - -class BacktickTest < Minitest::Test - include POSIX::Spawn - - def test_backtick_simple - out = `exit` - assert_equal '', out - assert_equal 0, $?.exitstatus - end - - def test_backtick_output - out = `echo 123` - assert_equal "123\n", out - assert_equal 0, $?.exitstatus, 0 - end - - def test_backtick_failure - out = `nosuchcmd 2> /dev/null` - assert_equal '', out - assert_equal 127, $?.exitstatus - end - - def test_backtick_redirect - out = `nosuchcmd 2>&1` - regex = %r{/bin/sh: (1: )?nosuchcmd: (command )?not found} - assert regex.match(out), "Got #{out.inspect}, expected match of pattern #{regex.inspect}" - assert_equal 127, $?.exitstatus, 127 - end - - def test_backtick_huge - out = `yes | head -50000` - assert_equal 100000, out.size - assert_equal 0, $?.exitstatus - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/test/test_child.rb b/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/test/test_child.rb deleted file mode 100644 index e869c64..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/test/test_child.rb +++ /dev/null @@ -1,236 +0,0 @@ -# coding: UTF-8 -require 'test_helper' - -class ChildTest < Minitest::Test - include POSIX::Spawn - - # Become a new process group. - def setup - Process.setpgrp - end - - # Kill any orphaned processes in our process group before continuing but - # ignore the TERM signal we receive. - def teardown - trap("TERM") { trap("TERM", "DEFAULT") } - begin - Process.kill("-TERM", Process.pid) - Process.wait - rescue Errno::ECHILD - end - end - - # verify the process is no longer running and has been reaped. - def assert_process_reaped(pid) - Process.kill(0, pid) - assert false, "Process #{pid} still running" - rescue Errno::ESRCH - end - - # verifies that all processes in the given process group are no longer running - # and have been reaped. The current ruby test process is excluded. - # XXX It's weird to use the SUT here but the :pgroup option is useful. Could - # be a IO.popen under Ruby >= 1.9 since it also supports :pgroup. - def assert_process_group_reaped(pgid) - command = "ps axo pgid,pid,args | grep '^#{pgid} ' | grep -v '^#{pgid} #$$'" - procs = POSIX::Spawn::Child.new(command, :pgroup => true).out - assert procs.empty?, "Processes in group #{pgid} still running:\n#{procs}" - end - - def test_sanity - assert_same POSIX::Spawn::Child, Child - end - - def test_argv_array_execs - p = Child.new('printf', '%s %s %s', '1', '2', '3 4') - assert p.success? - assert_equal "1 2 3 4", p.out - end - - def test_argv_string_uses_sh - p = Child.new("echo via /bin/sh") - assert p.success? - assert_equal "via /bin/sh\n", p.out - end - - def test_stdout - p = Child.new('echo', 'boom') - assert_equal "boom\n", p.out - assert_equal "", p.err - end - - def test_stderr - p = Child.new('echo boom 1>&2') - assert_equal "", p.out - assert_equal "boom\n", p.err - end - - def test_status - p = Child.new('exit 3') - assert !p.status.success? - assert_equal 3, p.status.exitstatus - end - - def test_env - p = Child.new({ 'FOO' => 'BOOYAH' }, 'echo $FOO') - assert_equal "BOOYAH\n", p.out - end - - def test_chdir - p = Child.new("pwd", :chdir => File.dirname(Dir.pwd)) - assert_equal File.dirname(Dir.pwd) + "\n", p.out - end - - def test_input - input = "HEY NOW\n" * 100_000 # 800K - p = Child.new('wc', '-l', :input => input) - assert_equal 100_000, p.out.strip.to_i - end - - def test_max - child = Child.build('yes', :max => 100_000) - assert_raises(MaximumOutputExceeded) { child.exec! } - assert_process_reaped child.pid - assert_process_group_reaped Process.pid - end - - def test_max_pgroup_kill - child = Child.build('yes', :max => 100_000, :pgroup_kill => true) - assert_raises(MaximumOutputExceeded) { child.exec! } - assert_process_reaped child.pid - assert_process_group_reaped child.pid - end - - def test_max_with_child_hierarchy - child = Child.build('/bin/sh', '-c', 'true && yes', :max => 100_000) - assert_raises(MaximumOutputExceeded) { child.exec! } - assert_process_reaped child.pid - assert_process_group_reaped Process.pid - end - - def test_max_with_child_hierarchy_pgroup_kill - child = Child.build('/bin/sh', '-c', 'true && yes', :max => 100_000, :pgroup_kill => true) - assert_raises(MaximumOutputExceeded) { child.exec! } - assert_process_reaped child.pid - assert_process_group_reaped child.pid - end - - def test_max_with_stubborn_child - child = Child.build("trap '' TERM; yes", :max => 100_000) - assert_raises(MaximumOutputExceeded) { child.exec! } - assert_process_reaped child.pid - assert_process_group_reaped Process.pid - end - - def test_max_with_stubborn_child_pgroup_kill - child = Child.build("trap '' TERM; yes", :max => 100_000, :pgroup_kill => true) - assert_raises(MaximumOutputExceeded) { child.exec! } - assert_process_reaped child.pid - assert_process_group_reaped child.pid - end - - def test_max_with_partial_output - p = Child.build('yes', :max => 100_000) - assert_nil p.out - assert_raises MaximumOutputExceeded do - p.exec! - end - assert_output_exceeds_repeated_string("y\n", 100_000, p.out) - assert_process_reaped p.pid - assert_process_group_reaped Process.pid - end - - def test_max_with_partial_output_long_lines - p = Child.build('yes', "nice to meet you", :max => 10_000) - assert_raises MaximumOutputExceeded do - p.exec! - end - assert_output_exceeds_repeated_string("nice to meet you\n", 10_000, p.out) - assert_process_reaped p.pid - assert_process_group_reaped Process.pid - end - - def test_timeout - start = Time.now - child = Child.build('sleep', '1', :timeout => 0.05) - assert_raises(TimeoutExceeded) { child.exec! } - assert_process_reaped child.pid - assert_process_group_reaped Process.pid - assert (Time.now-start) <= 0.2 - end - - def test_timeout_pgroup_kill - start = Time.now - child = Child.build('sleep', '1', :timeout => 0.05, :pgroup_kill => true) - assert_raises(TimeoutExceeded) { child.exec! } - assert_process_reaped child.pid - assert_process_group_reaped child.pid - assert (Time.now-start) <= 0.2 - end - - def test_timeout_with_child_hierarchy - child = Child.build('/bin/sh', '-c', 'true && sleep 1', :timeout => 0.05) - assert_raises(TimeoutExceeded) { child.exec! } - assert_process_reaped child.pid - end - - def test_timeout_with_child_hierarchy_pgroup_kill - child = Child.build('/bin/sh', '-c', 'true && sleep 1', :timeout => 0.05, :pgroup_kill => true) - assert_raises(TimeoutExceeded) { child.exec! } - assert_process_reaped child.pid - assert_process_group_reaped child.pid - end - - def test_timeout_with_partial_output - start = Time.now - p = Child.build('echo Hello; sleep 1', :timeout => 0.05, :pgroup_kill => true) - assert_raises(TimeoutExceeded) { p.exec! } - assert_process_reaped p.pid - assert_process_group_reaped Process.pid - assert (Time.now-start) <= 0.2 - assert_equal "Hello\n", p.out - end - - def test_lots_of_input_and_lots_of_output_at_the_same_time - input = "stuff on stdin \n" * 1_000 - command = " - while read line - do - echo stuff on stdout; - echo stuff on stderr 1>&2; - done - " - p = Child.new(command, :input => input) - assert_equal input.size, p.out.size - assert_equal input.size, p.err.size - assert p.success? - end - - def test_input_cannot_be_written_due_to_broken_pipe - input = "1" * 100_000 - p = Child.new('false', :input => input) - assert !p.success? - end - - def test_utf8_input - input = "hÃ¥lø" - p = Child.new('cat', :input => input) - assert p.success? - end - - def test_utf8_input_long - input = "hÃ¥lø" * 10_000 - p = Child.new('cat', :input => input) - assert p.success? - end - - ## - # Assertion Helpers - - def assert_output_exceeds_repeated_string(str, len, actual) - assert_operator actual.length, :>=, len - - expected = (str * (len / str.length + 1)).slice(0, len) - assert_equal expected, actual.slice(0, len) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/test/test_helper.rb b/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/test/test_helper.rb deleted file mode 100644 index 158ddab..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/test/test_helper.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'minitest/autorun' -require 'posix-spawn' - -if Minitest.const_defined?('Test') - # We're on Minitest 5+. Nothing to do here. -else - # Minitest 4 doesn't have Minitest::Test yet. - Minitest::Test = MiniTest::Unit::TestCase -end diff --git a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/test/test_popen.rb b/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/test/test_popen.rb deleted file mode 100644 index 8c7f85e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/test/test_popen.rb +++ /dev/null @@ -1,17 +0,0 @@ -require 'test_helper' - -class PopenTest < Minitest::Test - include POSIX::Spawn - - def test_popen4 - pid, i, o, e = popen4("cat") - i.write "hello world" - i.close - ::Process.wait(pid) - - assert_equal "hello world", o.read - assert_equal 0, $?.exitstatus - ensure - [i, o, e].each{ |io| io.close rescue nil } - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/test/test_spawn.rb b/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/test/test_spawn.rb deleted file mode 100644 index 486554f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/test/test_spawn.rb +++ /dev/null @@ -1,398 +0,0 @@ -require 'test_helper' - -module SpawnImplementationTests - def test_spawn_simple - pid = _spawn('true') - assert_process_exit_ok pid - end - - def test_spawn_with_args - pid = _spawn('true', 'with', 'some stuff') - assert_process_exit_ok pid - end - - def test_spawn_with_shell - pid = _spawn('true && exit 13') - assert_process_exit_status pid, 13 - end - - def test_spawn_with_cmdname_and_argv0_tuple - pid = _spawn(['true', 'not-true'], 'some', 'args', 'toooo') - assert_process_exit_ok pid - end - - def test_spawn_with_invalid_argv - assert_raises ArgumentError do - _spawn(['echo','b','c','d']) - end - end - - ## - # Environ - - def test_spawn_inherit_env - ENV['PSPAWN'] = 'parent' - pid = _spawn('test "$PSPAWN" = "parent"') - assert_process_exit_ok pid - ensure - ENV.delete('PSPAWN') - end - - def test_spawn_clean_env - ENV['PSPAWN'] = 'parent' - pid = _spawn({'TEMP'=>'child'}, 'test -z "$PSPAWN" && test "$TEMP" = "child"', :unsetenv_others => true) - assert_process_exit_ok pid - ensure - ENV.delete('PSPAWN') - end - - def test_spawn_set_env - ENV['PSPAWN'] = 'parent' - pid = _spawn({'PSPAWN'=>'child'}, 'test "$PSPAWN" = "child"') - assert_process_exit_ok pid - ensure - ENV.delete('PSPAWN') - end - - def test_spawn_unset_env - ENV['PSPAWN'] = 'parent' - pid = _spawn({'PSPAWN'=>nil}, 'test -z "$PSPAWN"') - assert_process_exit_ok pid - ensure - ENV.delete('PSPAWN') - end - - ## - # FD => :close options - - def test_sanity_of_checking_clone_with_sh - rd, wr = IO.pipe - pid = _spawn("exec 2>/dev/null 9<&#{rd.posix_fileno} || exit 1", rd => rd) - assert_process_exit_status pid, 0 - ensure - [rd, wr].each { |fd| fd.close rescue nil } - end - - def test_spawn_close_option_with_symbolic_standard_stream_names - pid = _spawn('true 2>/dev/null 9<&0 || exit 1', :in => :close) - assert_process_exit_status pid, 1 - - pid = _spawn('true 2>/dev/null 9>&1 8>&2 || exit 1', - :out => :close, :err => :close) - assert_process_exit_status pid, 1 - end - - def test_spawn_close_on_standard_stream_io_object - pid = _spawn('true 2>/dev/null 9<&0 || exit 1', STDIN => :close) - assert_process_exit_status pid, 1 - - pid = _spawn('true 2>/dev/null 9>&1 8>&2 || exit 1', - STDOUT => :close, STDOUT => :close) - assert_process_exit_status pid, 1 - end - - def test_spawn_close_option_with_fd_number - rd, wr = IO.pipe - pid = _spawn("true 2>/dev/null 9<&#{rd.posix_fileno} || exit 1", rd.posix_fileno => :close) - assert_process_exit_status pid, 1 - - assert !rd.closed? - assert !wr.closed? - ensure - [rd, wr].each { |fd| fd.close rescue nil } - end - - def test_spawn_close_option_with_io_object - rd, wr = IO.pipe - pid = _spawn("true 2>/dev/null 9<&#{rd.posix_fileno} || exit 1", rd => :close) - assert_process_exit_status pid, 1 - - assert !rd.closed? - assert !wr.closed? - ensure - [rd, wr].each { |fd| fd.close rescue nil } - end - - def test_spawn_close_invalid_fd_raises_exception - pid = _spawn("echo", "hiya", 250 => :close) - assert_process_exit_status pid, 127 - rescue Errno::EBADF - # this happens on darwin only. GNU does spawn and exits 127. - end - - def test_spawn_invalid_chdir_raises_exception - pid = _spawn("echo", "hiya", :chdir => "/this/does/not/exist") - # fspawn does chdir in child, so it exits with 127 - assert_process_exit_status pid, 127 - rescue Errno::ENOENT - # pspawn and native spawn do chdir in parent, so they throw an exception - end - - def test_spawn_closing_multiple_fds_with_array_keys - rd, wr = IO.pipe - pid = _spawn("true 2>/dev/null 9>&#{wr.posix_fileno} || exit 1", [rd, wr, :out] => :close) - assert_process_exit_status pid, 1 - ensure - [rd, wr].each { |fd| fd.close rescue nil } - end - - ## - # FD => FD options - - def test_spawn_redirect_fds_with_symbolic_names_and_io_objects - rd, wr = IO.pipe - pid = _spawn("echo", "hello world", :out => wr, rd => :close) - wr.close - output = rd.read - assert_process_exit_ok pid - assert_equal "hello world\n", output - ensure - [rd, wr].each { |fd| fd.close rescue nil } - end - - def test_spawn_redirect_fds_with_fd_numbers - rd, wr = IO.pipe - pid = _spawn("echo", "hello world", 1 => wr.posix_fileno, rd.posix_fileno => :close) - wr.close - output = rd.read - assert_process_exit_ok pid - assert_equal "hello world\n", output - ensure - [rd, wr].each { |fd| fd.close rescue nil } - end - - def test_spawn_redirect_invalid_fds_raises_exception - pid = _spawn("echo", "hiya", 1 => 250) - assert_process_exit_status pid, 127 - rescue Errno::EBADF - # this happens on darwin only. GNU does spawn and exits 127. - end - - def test_spawn_redirect_stderr_and_stdout_to_same_fd - rd, wr = IO.pipe - pid = _spawn("echo hello world 1>&2", :err => wr, :out => wr, rd => :close) - wr.close - output = rd.read - assert_process_exit_ok pid - assert_equal "hello world\n", output - ensure - [rd, wr].each { |fd| fd.close rescue nil } - end - - def test_spawn_does_not_close_fd_when_redirecting - pid = _spawn("exec 2>&1", :err => :out) - assert_process_exit_ok pid - end - - # Ruby 1.9 Process::spawn closes all fds by default. To keep an fd open, you - # have to pass it explicitly as fd => fd. - def test_explicitly_passing_an_fd_as_open - rd, wr = IO.pipe - pid = _spawn("exec 9>&#{wr.posix_fileno} || exit 1", wr => wr) - assert_process_exit_ok pid - ensure - [rd, wr].each { |fd| fd.close rescue nil } - end - - ## - # FD => file options - - def test_spawn_redirect_fd_to_file_with_symbolic_name - file = File.expand_path('../test-output', __FILE__) - text = 'redirect_fd_to_file_with_symbolic_name' - pid = _spawn('echo', text, :out => file) - assert_process_exit_ok pid - assert File.exist?(file) - assert_equal "#{text}\n", File.read(file) - ensure - File.unlink(file) rescue nil - end - - def test_spawn_redirect_fd_to_file_with_fd_number - file = File.expand_path('../test-output', __FILE__) - text = 'redirect_fd_to_file_with_fd_number' - pid = _spawn('echo', text, 1 => file) - assert_process_exit_ok pid - assert File.exist?(file) - assert_equal "#{text}\n", File.read(file) - ensure - File.unlink(file) rescue nil - end - - def test_spawn_redirect_fd_to_file_with_io_object - file = File.expand_path('../test-output', __FILE__) - text = 'redirect_fd_to_file_with_io_object' - pid = _spawn('echo', text, STDOUT => file) - assert_process_exit_ok pid - assert File.exist?(file) - assert_equal "#{text}\n", File.read(file) - ensure - File.unlink(file) rescue nil - end - - def test_spawn_redirect_fd_from_file_with_symbolic_name - file = File.expand_path('../test-input', __FILE__) - text = 'redirect_fd_from_file_with_symbolic_name' - File.open(file, 'w') { |fd| fd.write(text) } - - pid = _spawn(%Q{test "$(cat)" = "#{text}"}, :in => file) - assert_process_exit_ok pid - ensure - File.unlink(file) rescue nil - end - - def test_spawn_redirect_fd_from_file_with_fd_number - file = File.expand_path('../test-input', __FILE__) - text = 'redirect_fd_from_file_with_fd_number' - File.open(file, 'w') { |fd| fd.write(text) } - - pid = _spawn(%Q{test "$(cat)" = "#{text}"}, 0 => file) - assert_process_exit_ok pid - ensure - File.unlink(file) rescue nil - end - - def test_spawn_redirect_fd_from_file_with_io_object - file = File.expand_path('../test-input', __FILE__) - text = 'redirect_fd_from_file_with_io_object' - File.open(file, 'w') { |fd| fd.write(text) } - - pid = _spawn(%Q{test "$(cat)" = "#{text}"}, STDIN => file) - assert_process_exit_ok pid - ensure - File.unlink(file) rescue nil - end - - def test_spawn_redirect_fd_to_file_with_symbolic_name_and_flags - file = File.expand_path('../test-output', __FILE__) - text = 'redirect_fd_to_file_with_symbolic_name' - 5.times do - pid = _spawn('echo', text, :out => [file, 'a']) - assert_process_exit_ok pid - end - assert File.exist?(file) - assert_equal "#{text}\n" * 5, File.read(file) - ensure - File.unlink(file) rescue nil - end - - ## - # :pgroup => - - def test_spawn_inherit_pgroup_from_parent_by_default - pgrp = Process.getpgrp - pid = _spawn("ruby", "-e", "exit(Process.getpgrp == #{pgrp} ? 0 : 1)") - assert_process_exit_ok pid - end - - def test_spawn_inherit_pgroup_from_parent_when_nil - pgrp = Process.getpgrp - pid = _spawn("ruby", "-e", "exit(Process.getpgrp == #{pgrp} ? 0 : 1)", :pgroup => nil) - assert_process_exit_ok pid - end - - def test_spawn_new_pgroup_with_true - pid = _spawn("ruby", "-e", "exit(Process.getpgrp == $$ ? 0 : 1)", :pgroup => true) - assert_process_exit_ok pid - end - - def test_spawn_new_pgroup_with_zero - pid = _spawn("ruby", "-e", "exit(Process.getpgrp == $$ ? 0 : 1)", :pgroup => 0) - assert_process_exit_ok pid - end - - def test_spawn_explicit_pgroup - pgrp = Process.getpgrp - pid = _spawn("ruby", "-e", "exit(Process.getpgrp == #{pgrp} ? 0 : 1)", :pgroup => pgrp) - assert_process_exit_ok pid - end - - ## - # Exceptions - - def test_spawn_raises_exception_on_unsupported_options - exception = nil - - assert_raises ArgumentError do - begin - _spawn('echo howdy', :out => '/dev/null', :oops => 'blaahh') - rescue Exception => e - exception = e - raise e - end - end - - assert_match /oops/, exception.message - end - - ## - # Assertion Helpers - - def assert_process_exit_ok(pid) - assert_process_exit_status pid, 0 - end - - def assert_process_exit_status(pid, status) - assert pid.to_i > 0, "pid [#{pid}] should be > 0" - chpid = ::Process.wait(pid) - assert_equal chpid, pid - assert_equal status, $?.exitstatus - end -end - -class SpawnTest < Minitest::Test - include POSIX::Spawn - - def test_spawn_methods_exposed_at_module_level - assert POSIX::Spawn.respond_to?(:pspawn) - assert POSIX::Spawn.respond_to?(:_pspawn) - end - - ## - # Options Preprocessing - - def test_extract_process_spawn_arguments_with_options - assert_equal [{}, [['echo', 'echo'], 'hello', 'world'], {:err => :close}], - extract_process_spawn_arguments('echo', 'hello', 'world', :err => :close) - end - - def test_extract_process_spawn_arguments_with_options_and_env - options = {:err => :close} - env = {'X' => 'Y'} - assert_equal [env, [['echo', 'echo'], 'hello world'], options], - extract_process_spawn_arguments(env, 'echo', 'hello world', options) - end - - def test_extract_process_spawn_arguments_with_shell_command - assert_equal [{}, [['/bin/sh', '/bin/sh'], '-c', 'echo hello world'], {}], - extract_process_spawn_arguments('echo hello world') - end - - def test_extract_process_spawn_arguments_with_special_cmdname_argv_tuple - assert_equal [{}, [['echo', 'fuuu'], 'hello world'], {}], - extract_process_spawn_arguments(['echo', 'fuuu'], 'hello world') - end -end - -class PosixSpawnTest < Minitest::Test - include SpawnImplementationTests - def _spawn(*argv) - POSIX::Spawn.pspawn(*argv) - end -end - -class ForkSpawnTest < Minitest::Test - include SpawnImplementationTests - def _spawn(*argv) - POSIX::Spawn.fspawn(*argv) - end -end - -if ::Process::respond_to?(:spawn) - class NativeSpawnTest < Minitest::Test - include SpawnImplementationTests - def _spawn(*argv) - ::Process.spawn(*argv) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/test/test_system.rb b/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/test/test_system.rb deleted file mode 100644 index 9bbefaa..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/posix-spawn-0.3.11/test/test_system.rb +++ /dev/null @@ -1,28 +0,0 @@ -require 'test_helper' - -class SystemTest < Minitest::Test - include POSIX::Spawn - - def test_system - ret = system("true") - assert_equal true, ret - assert_equal 0, $?.exitstatus - end - - def test_system_nonzero - ret = system("false") - assert_equal false, ret - assert_equal 1, $?.exitstatus - end - - def test_system_nonzero_via_sh - ret = system("exit 1") - assert_equal false, ret - assert_equal 1, $?.exitstatus - end - - def test_system_failure - ret = system("nosuch") - assert_equal false, ret - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/.gitignore b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/.gitignore deleted file mode 100644 index 83f6ab9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -Gemfile.lock -ext/Makefile -lib/pygments_ext.* -tmp -pkg -*.pyc diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/CHANGELOG.md b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/CHANGELOG.md deleted file mode 100644 index 4035a11..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/CHANGELOG.md +++ /dev/null @@ -1,71 +0,0 @@ -changelog -=========== - -Version 0.5.4 (Nov 3, 2013) ------------------------------ - -* Update lexers file - -Version 0.5.3 (Sep 17, 2013) ------------------------------ - -* Fixes for Slash lexer -* Improve highlighting for Slash lexer -* Upgrade to latest pygments (1.7, changes summary follows. See pygments changelog for details) - * Add Clay lexer - * Add Perl 6 lexer - * Add Swig lexer - * Add nesC lexer - * Add BlitzBasic lexer - * Add EBNF lexer - * Add Igor Pro lexer - * Add Rexx lexer - * Add Agda lexer - * Recognize vim modelines - * Improve Python 3 lexer - * Improve Opa lexer - * Improve Julia lexer - * Improve Lasso lexer - * Improve Objective C/C++ lexer - * Improve Ruby lexer - * Improve Stan lexer - * Improve JavaScript lexer - * Improve HTTP lexer - * Improve Koka lexer - * Improve Haxe lexer - * Improve Prolog lexer - * Improve F# lexer - -Version 0.5.2 (July 17, 2013) ------------------------------ - -* Add Slash lexer - -Version 0.5.1 (June 25, 2013) ------------------------------ - -* Ensure compatability across distros by detecting if `python2` is available - -Version 0.5.0 (Apr 13, 2013) ------------------------------ - -* Use #rstrip to fix table mode bug - -Version 0.4.2 (Feb 25, 2013) ------------------------------ - -* Add new lexers, including custom lexers - -Version 0.3.7 (Jan 2, 2013) ------------------------------ - -* Fixed missing custom lexers -* Added syntax highlighting for Hxml - -Version 0.3.4 (Dec 28, 2012) ------------------------------ - -* Add support for Windows -* Add MIT license - - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/Gemfile b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/Gemfile deleted file mode 100644 index 3be9c3c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/Gemfile +++ /dev/null @@ -1,2 +0,0 @@ -source "https://rubygems.org" -gemspec diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/LICENSE b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/LICENSE deleted file mode 100644 index 9be0a09..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/LICENSE +++ /dev/null @@ -1,17 +0,0 @@ -The MIT License (MIT) -Copyright (c) Ted Nyman and Aman Gupta, 2012-2013 - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -associated documentation files (the "Software"), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial -portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/README.md b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/README.md deleted file mode 100644 index 3652448..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/README.md +++ /dev/null @@ -1,121 +0,0 @@ -# pygments.rb - -A Ruby wrapper for the Python [pygments syntax highlighter](http://pygments.org/). - -pygments.rb works by talking over a simple pipe to a long-lived -Python child process. This library replaces [github/albino](https://github.com/github/albino), -as well as a version of pygments.rb that used an embedded Python -interpreter. - -Each Ruby process that runs has its own 'personal Python'; -for example, 4 Unicorn workers will have one Python process each. -If a Python process dies, a new one will be spawned on the next -pygments.rb request. - -## system requirements - -- Python 2.5, Python 2.6, or Python 2.7. You can always use Python 2.x from a `virtualenv` if - your default Python install is 3.x. - -## usage - -``` ruby -require 'pygments' -``` - -``` ruby -Pygments.highlight(File.read(__FILE__), :lexer => 'ruby') -``` - -Encoding and other lexer/formatter options can be passed in via an -options hash: - -``` ruby -Pygments.highlight('code', :options => {:encoding => 'utf-8'}) -``` - -pygments.rb defaults to using an HTML formatter. -To use a formatter other than `html`, specify it explicitly -like so: - -``` ruby -Pygments.highlight('code', :formatter => 'bbcode') -Pygments.highlight('code', :formatter => 'terminal') -``` - -To generate CSS for HTML formatted code, use the `#css` method: - -``` ruby -Pygments.css -Pygments.css('.highlight') -``` - -To use a specific pygments style, pass the `:style` option to the `#css` method: - -``` ruby -Pygments.css(:style => "monokai") -``` - -Other Pygments high-level API methods are also available. -These methods return arrays detailing all the available lexers, formatters, -and styles. - -``` ruby -Pygments.lexers -Pygments.formatters -Pygments.styles -``` - -To use a custom pygments installation, specify the path to -`Pygments#start`: - -``` ruby -Pygments.start("/path/to/pygments") -``` - -If you'd like logging, set the environmental variable `MENTOS_LOG` to a file path for your logfile. - -By default pygments.rb will timeout calls to pygments that take over 8 seconds. You can change this -by setting the environmental variable `MENTOS_TIMEOUT` to a different positive integer value. - -## benchmarks - - - $ ruby bench.rb 50 - Benchmarking.... - Size: 698 bytes - Iterations: 50 - user system total real - pygments popen 0.010000 0.010000 0.020000 ( 0.460370) - pygments popen (process already started) 0.010000 0.000000 0.010000 ( 0.272975) - pygments popen (process already started 2) 0.000000 0.000000 0.000000 ( 0.273589) - - $ ruby bench.rb 10 - Benchmarking.... - Size: 15523 bytes - Iterations: 10 - user system total real - pygments popen 0.000000 0.000000 0.000000 ( 0.819419) - pygments popen (process already started) 0.010000 0.000000 0.010000 ( 0.676515) - pygments popen (process already started 2) 0.000000 0.010000 0.010000 ( 0.674189) - -## license - -The MIT License (MIT) - -Copyright (c) Ted Nyman and Aman Gupta, 2012-2013 - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -associated documentation files (the "Software"), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial -portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/Rakefile b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/Rakefile deleted file mode 100644 index d17ab5f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/Rakefile +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env rake -require "bundler/gem_tasks" - -task :default => :test - -# ========================================================== -# Packaging -# ========================================================== - -GEMSPEC = eval(File.read('pygments.rb.gemspec')) - -require 'rubygems/package_task' - -# ========================================================== -# Testing -# ========================================================== - -require 'rake/testtask' -Rake::TestTask.new 'test' do |t| - t.test_files = FileList['test/test_*.rb'] - t.ruby_opts = ['-rubygems'] -end - -# ========================================================== -# Benchmarking -# ========================================================== - -task :bench do - sh "ruby bench.rb" -end - -# ========================================================== -# Cache lexers -# ========================================================== - -# Write all the lexers to a file for easy lookup -task :lexers do - sh "ruby cache-lexers.rb" -end - -# ========================================================== -# Vendor -# ========================================================== - -namespace :vendor do - file 'vendor/pygments-main' do |f| - sh "hg clone https://bitbucket.org/birkenfeld/pygments-main #{f.name}" - sh "hg --repository #{f.name} identify --id > #{f.name}/REVISION" - rm_rf Dir["#{f.name}/.hg*"] - end - - task :clobber do - rm_rf 'vendor/pygments-main' - end - - # Load all the custom lexers in the `vendor/custom_lexers` folder - # and stick them in our custom Pygments vendor - task :load_lexers do - LEXERS_DIR = 'vendor/pygments-main/pygments/lexers' - lexers = FileList['vendor/custom_lexers/*.py'] - lexers.each { |l| FileUtils.copy l, LEXERS_DIR } - FileUtils.cd(LEXERS_DIR) { sh "python _mapping.py" } - end - - task :update => [:clobber, 'vendor/pygments-main', :load_lexers] -end diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/bench.rb b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/bench.rb deleted file mode 100644 index 9a63c9b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/bench.rb +++ /dev/null @@ -1,22 +0,0 @@ -require File.join(File.dirname(__FILE__), '/lib/pygments.rb') -require 'benchmark' - -include Benchmark -# number of iterations -num = ARGV[0] ? ARGV[0].to_i : 10 - -# we can also repeat the code itself -repeats = ARGV[1] ? ARGV[1].to_i : 1 - -code = File.open('test/test_data.py').read.to_s * repeats - -puts "Benchmarking....\n" -puts "Size: " + code.bytesize.to_s + " bytes\n" -puts "Iterations: " + num.to_s + "\n" - -Benchmark.bm(40) do |x| - x.report("pygments popen ") { for i in 1..num; Pygments.highlight(code, :lexer => 'python'); end } - x.report("pygments popen (process already started) ") { for i in 1..num; Pygments.highlight(code, :lexer => 'python'); end } - x.report("pygments popen (process already started 2) ") { for i in 1..num; Pygments.highlight(code, :lexer => 'python'); end } -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/cache-lexers.rb b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/cache-lexers.rb deleted file mode 100644 index 6157f6a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/cache-lexers.rb +++ /dev/null @@ -1,8 +0,0 @@ -require File.join(File.dirname(__FILE__), '/lib/pygments.rb') - -# Simple marshalling -serialized_lexers = Marshal.dump(Pygments.lexers!) - -# Write to a file -File.open("lexers", 'w') { |file| file.write(serialized_lexers) } - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/lexers b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/lexers deleted file mode 100644 index 609501fd36e2c19336d29c9b0115dc4b02fb54ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39087 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 A5C8xG diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/lib/pygments.rb b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/lib/pygments.rb deleted file mode 100644 index c5f96de..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/lib/pygments.rb +++ /dev/null @@ -1,8 +0,0 @@ -require File.join(File.dirname(__FILE__), 'pygments/popen') - - -module Pygments - extend Pygments::Popen - - autoload :Lexer, 'pygments/lexer' -end diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/lib/pygments/lexer.rb b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/lib/pygments/lexer.rb deleted file mode 100644 index ed542f0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/lib/pygments/lexer.rb +++ /dev/null @@ -1,148 +0,0 @@ -module Pygments - class Lexer < Struct.new(:name, :aliases, :filenames, :mimetypes) - @lexers = [] - @index = {} - @name_index = {} - @alias_index = {} - @extname_index = {} - @mimetypes_index = {} - - # Internal: Create a new Lexer object - # - # hash - A hash of attributes - # - # Returns a Lexer object - def self.create(hash) - lexer = new(hash[:name], hash[:aliases], hash[:filenames], hash[:mimetypes]) - - @lexers << lexer - - @index[lexer.name.downcase] = @name_index[lexer.name] = lexer - - lexer.aliases.each do |name| - @alias_index[name] = lexer - @index[name.downcase] ||= lexer - end - - lexer.filenames.each do |filename| - extnames = [] - - extname = File.extname(filename) - if m = extname.match(/\[(.+)\]/) - m[1].scan(/./).each do |s| - extnames << extname.sub(m[0], s) - end - elsif extname != "" - extnames << extname - end - - extnames.each do |extname| - @extname_index[extname] = lexer - @index[extname.downcase.sub(/^\./, "")] ||= lexer - end - end - - lexer.mimetypes.each do |type| - @mimetypes_index[type] = lexer - end - - lexer - end - - # Public: Get all Lexers - # - # Returns an Array of Lexers - def self.all - @lexers - end - - # Public: Look up Lexer by name or alias. - # - # name - A String name or alias - # - # Lexer.find('Ruby') - # => # - # - # Returns the Lexer or nil if none was found. - def self.find(name) - @index[name.to_s.downcase] - end - - # Public: Alias for find. - def self.[](name) - find(name) - end - - # Public: Look up Lexer by its proper name. - # - # name - The String name of the Lexer - # - # Examples - # - # Lexer.find_by_name('Ruby') - # # => # - # - # Returns the Lexer or nil if none was found. - def self.find_by_name(name) - @name_index[name] - end - - # Public: Look up Lexer by one of its aliases. - # - # name - A String alias of the Lexer - # - # Examples - # - # Lexer.find_by_alias('rb') - # # => # - # - # Returns the Lexer or nil if none was found. - def self.find_by_alias(name) - @alias_index[name] - end - - # Public: Look up Lexer by one of it's file extensions. - # - # extname - A String file extension. - # - # Examples - # - # Lexer.find_by_extname('.rb') - # # => # - # - # Returns the Lexer or nil if none was found. - def self.find_by_extname(extname) - @extname_index[extname] - end - - # Public: Look up Lexer by one of it's mime types. - # - # type - A mime type String. - # - # Examples - # - # Lexer.find_by_mimetype('application/x-ruby') - # # => # - # - # Returns the Lexer or nil if none was found. - def self.find_by_mimetype(type) - @mimetypes_index[type] - end - - # Public: Highlight syntax of text - # - # text - String of code to be highlighted - # options - Hash of options (defaults to {}) - # - # Returns html String - def highlight(text, options = {}) - options[:lexer] = aliases.first - Pygments.highlight(text, options) - end - - alias_method :==, :equal? - alias_method :eql?, :equal? - end - - lexers.values.each { |h| Lexer.create(h) } -end diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/lib/pygments/mentos.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/lib/pygments/mentos.py deleted file mode 100755 index c0d6e88..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/lib/pygments/mentos.py +++ /dev/null @@ -1,351 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -import sys, re, os, signal -import traceback -if 'PYGMENTS_PATH' in os.environ: - sys.path.insert(0, os.environ['PYGMENTS_PATH']) - -dirname = os.path.dirname - -base_dir = dirname(dirname(dirname(os.path.abspath(__file__)))) -sys.path.append(base_dir + "/vendor") -sys.path.append(base_dir + "/vendor/pygments-main") -sys.path.append(base_dir + "/vendor/simplejson") - -import pygments -from pygments import lexers, formatters, styles, filters - -from threading import Lock - -try: - import json -except ImportError: - import simplejson as json - -def _convert_keys(dictionary): - if not isinstance(dictionary, dict): - return dictionary - return dict((str(k), _convert_keys(v)) - for k, v in dictionary.items()) - -def _write_error(error): - res = {"error": error} - out_header = json.dumps(res).encode('utf-8') - bits = _get_fixed_bits_from_header(out_header) - sys.stdout.write(bits + "\n") - sys.stdout.flush() - sys.stdout.write(out_header + "\n") - sys.stdout.flush() - return - -def _get_fixed_bits_from_header(out_header): - size = len(out_header) - return "".join(map(lambda y:str((size>>y)&1), range(32-1, -1, -1))) - -def _signal_handler(signal, frame): - """ - Handle the signal given in the first argument, exiting gracefully - """ - sys.exit(0) - -class Mentos(object): - """ - Interacts with pygments.rb to provide access to pygments functionality - """ - def __init__(self): - pass - - def return_lexer(self, lexer, args, inputs, code=None): - """ - Accepting a variety of possible inputs, return a Lexer object. - - The inputs argument should be a hash with at least one of the following - keys: - - - 'lexer' ("python") - - 'mimetype' ("text/x-ruby") - - 'filename' ("yeaaah.py") - - The code argument should be a string, such as "import derp". - - The code guessing method is not especially great. It is advised that - clients pass in a literal lexer name whenever possible, which provides - the best probability of match (100 percent). - """ - - if lexer: - if inputs: - return lexers.get_lexer_by_name(lexer, **inputs) - else: - return lexers.get_lexer_by_name(lexer) - - if inputs: - if 'lexer' in inputs: - return lexers.get_lexer_by_name(inputs['lexer'], **inputs) - - elif 'mimetype' in inputs: - return lexers.get_lexer_for_mimetype(inputs['mimetype'], **inputs) - - elif 'filename' in inputs: - name = inputs['filename'] - - # If we have code and a filename, pygments allows us to guess - # with both. This is better than just guessing with code. - if code: - return lexers.guess_lexer_for_filename(name, code, **inputs) - else: - return lexers.get_lexer_for_filename(name, **inputs) - - # If all we got is code, try anyway. - if code: - return lexers.guess_lexer(code, **inputs) - - else: - return None - - - def highlight_text(self, code, lexer, formatter_name, args, kwargs): - """ - Highlight the relevant code, and return a result string. - The default formatter is html, but alternate formatters can be passed in via - the formatter_name argument. Additional paramters can be passed as args - or kwargs. - """ - # Default to html if we don't have the formatter name. - if formatter_name: - _format_name = str(formatter_name) - else: - _format_name = "html" - - # Return a lexer object - lexer = self.return_lexer(lexer, args, kwargs, code) - - # Make sure we sucessfuly got a lexer - if lexer: - formatter = pygments.formatters.get_formatter_by_name(str.lower(_format_name), **kwargs) - - # Do the damn thing. - res = pygments.highlight(code, lexer, formatter) - - return res - - else: - _write_error("No lexer") - - def get_data(self, method, lexer, args, kwargs, text=None): - """ - Based on the method argument, determine the action we'd like pygments - to do. Then return the data generated from pygments. - """ - if kwargs: - formatter_name = kwargs.get("formatter", None) - opts = kwargs.get("options", {}) - - # Ensure there's a 'method' key before proceeeding - if method: - res = None - - # Now check what that method is. For the get methods, pygments - # itself returns generators, so we make them lists so we can serialize - # easier. - if method == 'get_all_styles': - res = json.dumps(list(pygments.styles.get_all_styles())) - - elif method == 'get_all_filters': - res = json.dumps(list(pygments.filters.get_all_filters())) - - elif method == 'get_all_lexers': - res = json.dumps(list(pygments.lexers.get_all_lexers())) - - elif method == 'get_all_formatters': - res = [ [ft.__name__, ft.name, ft.aliases] for ft in pygments.formatters.get_all_formatters() ] - res = json.dumps(res) - - elif method == 'highlight': - try: - text = text.decode('utf-8') - except UnicodeDecodeError: - # The text may already be encoded - text = text - res = self.highlight_text(text, lexer, formatter_name, args, _convert_keys(opts)) - - elif method == 'css': - kwargs = _convert_keys(kwargs) - fmt = pygments.formatters.get_formatter_by_name(args[0], **kwargs) - res = fmt.get_style_defs(args[1]) - - elif method == 'lexer_name_for': - lexer = self.return_lexer(None, args, kwargs, text) - - if lexer: - # We don't want the Lexer itself, just the name. - # Take the first alias. - res = lexer.aliases[0] - - else: - _write_error("No lexer") - - else: - _write_error("Invalid method " + method) - - return res - - - def _send_data(self, res, method): - - # Base header. We'll build on this, adding keys as necessary. - base_header = {"method": method} - - res_bytes = len(res) + 1 - base_header["bytes"] = res_bytes - - out_header = json.dumps(base_header).encode('utf-8') - - # Following the protocol, send over a fixed size represenation of the - # size of the JSON header - bits = _get_fixed_bits_from_header(out_header) - - # Send it to Rubyland - sys.stdout.write(bits + "\n") - sys.stdout.flush() - - # Send the header. - sys.stdout.write(out_header + "\n") - sys.stdout.flush() - - # Finally, send the result - sys.stdout.write(res + "\n") - sys.stdout.flush() - - - def _get_ids(self, text): - start_id = text[:8] - end_id = text[-8:] - return start_id, end_id - - def _check_and_return_text(self, text, start_id, end_id): - - # Sanity check. - id_regex = re.compile('[A-Z]{8}') - - if not id_regex.match(start_id) and not id_regex.match(end_id): - _write_error("ID check failed. Not an ID.") - - if not start_id == end_id: - _write_error("ID check failed. ID's did not match.") - - # Passed the sanity check. Remove the id's and return - text = text[10:-10] - return text - - def _parse_header(self, header): - method = header["method"] - args = header.get("args", []) - kwargs = header.get("kwargs", {}) - lexer = kwargs.get("lexer", None) - return (method, args, kwargs, lexer) - - def start(self): - """ - Main loop, waiting for inputs on stdin. When it gets some data, - it goes to work. - - mentos exposes most of the "High-level API" of pygments. It always - expects and requires a JSON header of metadata. If there is data to be - pygmentized, this header will be followed by the text to be pygmentized. - - The header is of form: - { "method": "highlight", "args": [], "kwargs": {"arg1": "v"}, "bytes": 128, "fd": "8"} - """ - lock = Lock() - - while True: - # The loop begins by reading off a simple 32-arity string - # representing an integer of 32 bits. This is the length of - # our JSON header. - size = sys.stdin.read(32) - - lock.acquire() - - try: - # Read from stdin the amount of bytes we were told to expect. - header_bytes = int(size, 2) - - # Sanity check the size - size_regex = re.compile('[0-1]{32}') - if not size_regex.match(size): - _write_error("Size received is not valid.") - - line = sys.stdin.read(header_bytes) - - header = json.loads(line) - - method, args, kwargs, lexer = self._parse_header(header) - _bytes = 0 - - if lexer: - lexer = str(lexer) - - # Read more bytes if necessary - if kwargs: - _bytes = kwargs.get("bytes", 0) - - # Read up to the given number bytes (possibly 0) - text = sys.stdin.read(_bytes) - - # Sanity check the return. - if _bytes: - start_id, end_id = self._get_ids(text) - text = self._check_and_return_text(text, start_id, end_id) - - # Get the actual data from pygments. - res = self.get_data(method, lexer, args, kwargs, text) - - # Put back the sanity check values. - if method == "highlight": - res = start_id + " " + res + " " + end_id - - self._send_data(res, method) - - except: - tb = traceback.format_exc() - _write_error(tb) - - finally: - lock.release() - -def main(): - - # Signal handlers to trap signals. - signal.signal(signal.SIGINT, _signal_handler) - signal.signal(signal.SIGTERM, _signal_handler) - if sys.platform != "win32": - signal.signal(signal.SIGHUP, _signal_handler) - - mentos = Mentos() - - if sys.platform == "win32": - # disable CRLF - import msvcrt - msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) - else: - # close fd's inherited from the ruby parent - import resource - maxfd = resource.getrlimit(resource.RLIMIT_NOFILE)[1] - if maxfd == resource.RLIM_INFINITY: - maxfd = 65536 - - for fd in range(3, maxfd): - try: - os.close(fd) - except: - pass - - mentos.start() - -if __name__ == "__main__": - main() - - - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/lib/pygments/popen.rb b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/lib/pygments/popen.rb deleted file mode 100644 index 9598ebf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/lib/pygments/popen.rb +++ /dev/null @@ -1,420 +0,0 @@ -# coding: utf-8 -require 'posix/spawn' -require 'yajl' -require 'timeout' -require 'logger' -require 'time' - -# Error class -class MentosError < IOError -end - -# Pygments provides access to the Pygments library via a pipe and a long-running -# Python process. -module Pygments - module Popen - include POSIX::Spawn - extend self - - # Get things started by opening a pipe to mentos (the freshmaker), a - # Python process that talks to the Pygments library. We'll talk back and - # forth across this pipe. - def start(pygments_path = File.expand_path('../../../vendor/pygments-main/', __FILE__)) - is_windows = RUBY_PLATFORM =~ /mswin|mingw/ - begin - @log = Logger.new(ENV['MENTOS_LOG'] ||= is_windows ? 'NUL:' : '/dev/null') - @log.level = Logger::INFO - @log.datetime_format = "%Y-%m-%d %H:%M " - rescue - @log = Logger.new(is_windows ? 'NUL:' : '/dev/null') - end - - ENV['PYGMENTS_PATH'] = pygments_path - - # Make sure we kill off the child when we're done - at_exit { stop "Exiting" } - - # A pipe to the mentos python process. #popen4 gives us - # the pid and three IO objects to write and read. - python_path = python_binary(is_windows) - script = "#{python_path} #{File.expand_path('../mentos.py', __FILE__)}" - @pid, @in, @out, @err = popen4(script) - @log.info "[#{Time.now.iso8601}] Starting pid #{@pid.to_s} with fd #{@out.to_i.to_s}." - end - - # Detect a suitable Python binary to use. - def python_binary(is_windows) - if is_windows && which('py') - return 'py -2' - end - return which('python2') || 'python' - end - - # Cross platform which command - # from http://stackoverflow.com/a/5471032/284795 - def which(command) - exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : [''] - ENV['PATH'].split(File::PATH_SEPARATOR).each do |dir| - exts.each { |ext| - path = File.join(dir, "#{command}#{ext}") - return path if File.executable?(path) && !File.directory?(path) - } - end - return nil - end - - # Stop the child process by issuing a kill -9. - # - # We then call waitpid() with the pid, which waits for that particular - # child and reaps it. - # - # kill() can set errno to ESRCH if, for some reason, the file - # is gone; regardless the final outcome of this method - # will be to set our @pid variable to nil. - # - # Technically, kill() can also fail with EPERM or EINVAL (wherein - # the signal isn't sent); but we have permissions, and - # we're not doing anything invalid here. - def stop(reason) - if @pid - begin - Process.kill('KILL', @pid) - Process.waitpid(@pid) - rescue Errno::ESRCH, Errno::ECHILD - end - end - @log.info "[#{Time.now.iso8601}] Killing pid: #{@pid.to_s}. Reason: #{reason}" - @pid = nil - end - - # Check for a @pid variable, and then hit `kill -0` with the pid to - # check if the pid is still in the process table. If this function - # gives us an ENOENT or ESRCH, we can also safely return false (no process - # to worry about). Defensively, if EPERM is raised, in a odd/rare - # dying process situation (e.g., mentos is checking on the pid of a dead - # process and the pid has already been re-used) we'll want to raise - # that as a more informative Mentos exception. - # - # Returns true if the child is alive. - def alive? - return true if @pid && Process.kill(0, @pid) - false - rescue Errno::ENOENT, Errno::ESRCH - false - rescue Errno::EPERM - raise MentosError, "EPERM checking if child process is alive." - end - - # Public: Get an array of available Pygments formatters - # - # Returns an array of formatters. - def formatters - mentos(:get_all_formatters).inject(Hash.new) do | hash, (name, desc, aliases) | - # Remove the long-winded and repetitive 'Formatter' suffix - name.sub!(/Formatter$/, '') - hash[name] = { - :name => name, - :description => desc, - :aliases => aliases - } - hash - end - end - - - # Public: Get all lexers from a serialized array. This avoids needing to spawn - # mentos when it's not really needed (e.g,. one-off jobs, loading the Rails env, etc). - # - # Should be preferred to #lexers! - # - # Returns an array of lexers - def lexers - begin - lexer_file = File.expand_path('../../../lexers', __FILE__) - raw = File.open(lexer_file, "rb").read - Marshal.load(raw) - rescue Errno::ENOENT - raise MentosError, "Error loading lexer file. Was it created and vendored?" - end - end - - # Public: Get back all available lexers from mentos itself - # - # Returns an array of lexers - def lexers! - mentos(:get_all_lexers).inject(Hash.new) do |hash, lxr| - name = lxr[0] - hash[name] = { - :name => name, - :aliases => lxr[1], - :filenames => lxr[2], - :mimetypes => lxr[3] - } - hash["dasm16"] = {:name=>"dasm16", :aliases=>["DASM16"], :filenames=>["*.dasm16", "*.dasm"], :mimetypes=>['text/x-dasm16']} - hash["Puppet"] = {:name=>"Puppet", :aliases=>["puppet"], :filenames=>["*.pp"], :mimetypes=>[]} - hash["Augeas"] = {:name=>"Augeas", :aliases=>["augeas"], :filenames=>["*.aug"], :mimetypes=>[]} - hash["TOML"] = {:name=>"TOML", :aliases=>["toml"], :filenames=>["*.toml"], :mimetypes=>[]} - hash["Slash"] = {:name=>"Slash", :aliases=>["slash"], :filenames=>["*.sl"], :mimetypes=>[]} - hash - end - end - - # Public: Return an array of all available filters - def filters - mentos(:get_all_filters) - end - - # Public: Return an array of all available styles - def styles - mentos(:get_all_styles) - end - - # Public: Return css for highlighted code - def css(klass='', opts={}) - if klass.is_a?(Hash) - opts = klass - klass = '' - end - mentos(:css, ['html', klass], opts) - end - - # Public: Return the name of a lexer. - def lexer_name_for(*args) - # Pop off the last arg if it's a hash, which becomes our opts - if args.last.is_a?(Hash) - opts = args.pop - else - opts = {} - end - - if args.last.is_a?(String) - code = args.pop - else - code = nil - end - - mentos(:lexer_name_for, args, opts, code) - end - - # Public: Highlight code. - # - # Takes a first-position argument of the code to be highlighted, and a - # second-position hash of various arguments specifiying highlighting properties. - def highlight(code, opts={}) - # If the caller didn't give us any code, we have nothing to do, - # so return right away. - return code if code.nil? || code.empty? - - # Callers pass along options in the hash - opts[:options] ||= {} - - # Default to utf-8 for the output encoding, if not given. - opts[:options][:outencoding] ||= 'utf-8' - - # Get back the string from mentos and force encoding if we can - str = mentos(:highlight, nil, opts, code) - str.force_encoding(opts[:options][:outencoding]) if str.respond_to?(:force_encoding) - str - end - - private - - # Our 'rpc'-ish request to mentos. Requires a method name, and then optional - # args, kwargs, code. - def mentos(method, args=[], kwargs={}, original_code=nil) - # Open the pipe if necessary - start unless alive? - - begin - # Timeout requests that take too long. - # Invalid MENTOS_TIMEOUT results in just using default. - timeout_time = Integer(ENV["MENTOS_TIMEOUT"]) rescue 8 - - Timeout::timeout(timeout_time) do - # For sanity checking on both sides of the pipe when highlighting, we prepend and - # append an id. mentos checks that these are 8 character ids and that they match. - # It then returns the id's back to Rubyland. - id = (0...8).map{65.+(rand(25)).chr}.join - code = add_ids(original_code, id) if original_code - - # Add metadata to the header and generate it. - if code - bytesize = code.bytesize - else - bytesize = 0 - end - - kwargs.freeze - kwargs = kwargs.merge("fd" => @out.to_i, "id" => id, "bytes" => bytesize) - out_header = Yajl.dump(:method => method, :args => args, :kwargs => kwargs) - - # Get the size of the header itself and write that. - bits = get_fixed_bits_from_header(out_header) - @in.write(bits) - - # mentos is now waiting for the header, and, potentially, code. - write_data(out_header, code) - - # mentos will now return data to us. First it sends the header. - header = get_header - - # Now handle the header, any read any more data required. - res = handle_header_and_return(header, id) - - # Finally, return what we got. - return_result(res, method) - end - rescue Timeout::Error - # If we timeout, we need to clear out the pipe and start over. - @log.error "[#{Time.now.iso8601}] Timeout on a mentos #{method} call" - stop "Timeout on mentos #{method} call." - end - - rescue Errno::EPIPE, EOFError - stop "EPIPE" - raise MentosError, "EPIPE" - end - - - # Based on the header we receive, determine if we need - # to read more bytes, and read those bytes if necessary. - # - # Then, do a sanity check wih the ids. - # - # Returns a result — either highlighted text or metadata. - def handle_header_and_return(header, id) - if header - header = header_to_json(header) - bytes = header["bytes"] - - # Read more bytes (the actual response body) - res = @out.read(bytes.to_i) - - if header["method"] == "highlight" - # Make sure we have a result back; else consider this an error. - if res.nil? - @log.warn "[#{Time.now.iso8601}] No highlight result back from mentos." - stop "No highlight result back from mentos." - raise MentosError, "No highlight result back from mentos." - end - - # Remove the newline from Python - res = res[0..-2] - @log.info "[#{Time.now.iso8601}] Highlight in process." - - # Get the id's - start_id = res[0..7] - end_id = res[-8..-1] - - # Sanity check. - if not (start_id == id and end_id == id) - @log.error "[#{Time.now.iso8601}] ID's did not match. Aborting." - stop "ID's did not match. Aborting." - raise MentosError, "ID's did not match. Aborting." - else - # We're good. Remove the padding - res = res[10..-11] - @log.info "[#{Time.now.iso8601}] Highlighting complete." - res - end - end - res - else - @log.error "[#{Time.now.iso8601}] No header data back." - stop "No header data back." - raise MentosError, "No header received back." - end - end - - # With the code, prepend the id (with two spaces to avoid escaping weirdness if - # the following text starts with a slash (like terminal code), and append the - # id, with two padding also. This means we are sending over the 8 characters + - # code + 8 characters. - def add_ids(code, id) - code.freeze - code = id + " #{code} #{id}" - code - end - - # Write data to mentos, the Python Process. - # - # Returns nothing. - def write_data(out_header, code=nil) - @in.write(out_header) - @log.info "[#{Time.now.iso8601}] Out header: #{out_header.to_s}" - @in.write(code) if code - end - - # Sanity check for size (32-arity of 0's and 1's) - def size_check(size) - size_regex = /[0-1]{32}/ - if size_regex.match(size) - true - else - false - end - end - - # Read the header via the pipe. - # - # Returns a header. - def get_header - begin - size = @out.read(33) - size = size[0..-2] - - # Sanity check the size - if not size_check(size) - @log.error "[#{Time.now.iso8601}] Size returned from mentos.py invalid." - stop "Size returned from mentos.py invalid." - raise MentosError, "Size returned from mentos.py invalid." - end - - # Read the amount of bytes we should be expecting. We first - # convert the string of bits into an integer. - header_bytes = size.to_s.to_i(2) + 1 - @log.info "[#{Time.now.iso8601}] Size in: #{size.to_s} (#{header_bytes.to_s})" - @out.read(header_bytes) - rescue - @log.error "[#{Time.now.iso8601}] Failed to get header." - stop "Failed to get header." - raise MentosError, "Failed to get header." - end - end - - # Return the final result for the API. Return Ruby objects for the methods that - # want them, text otherwise. - def return_result(res, method) - unless method == :lexer_name_for || method == :highlight || method == :css - res = Yajl.load(res, :symbolize_keys => true) - end - res = res.rstrip if res.class == String - res - end - - # Convert a text header into JSON for easy access. - def header_to_json(header) - @log.info "[#{Time.now.iso8601}] In header: #{header.to_s} " - header = Yajl.load(header) - - if header["error"] - # Raise this as a Ruby exception of the MentosError class. - # Stop so we don't leave the pipe in an inconsistent state. - @log.error "[#{Time.now.iso8601}] Failed to convert header to JSON." - stop header["error"] - raise MentosError, header["error"] - else - header - end - end - - def get_fixed_bits_from_header(out_header) - size = out_header.bytesize - - # Fixed 32 bits to represent the int. We return a string - # represenation: e.g, "00000000000000000000000000011110" - Array.new(32) { |i| size[i] }.reverse!.join - end - end -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/lib/pygments/version.rb b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/lib/pygments/version.rb deleted file mode 100644 index d65e2ca..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/lib/pygments/version.rb +++ /dev/null @@ -1,3 +0,0 @@ -module Pygments - VERSION = '0.6.3' -end diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/pygments.rb.gemspec b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/pygments.rb.gemspec deleted file mode 100644 index 17d0971..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/pygments.rb.gemspec +++ /dev/null @@ -1,25 +0,0 @@ -require File.expand_path('../lib/pygments/version', __FILE__) - -Gem::Specification.new do |s| - s.name = 'pygments.rb' - s.version = Pygments::VERSION - - s.summary = 'pygments wrapper for ruby' - s.description = 'pygments.rb exposes the pygments syntax highlighter to Ruby' - - s.homepage = 'https://github.com/tmm1/pygments.rb' - s.has_rdoc = false - - s.authors = ['Aman Gupta', 'Ted Nyman'] - s.email = ['aman@tmm1.net'] - s.license = 'MIT' - - s.add_dependency 'yajl-ruby', '~> 1.2.0' - s.add_dependency 'posix-spawn', '~> 0.3.6' - s.add_development_dependency 'rake-compiler', '~> 0.7.6' - - # s.extensions = ['ext/extconf.rb'] - s.require_paths = ['lib'] - - s.files = `git ls-files`.split("\n") -end diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/test/test_data.c b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/test/test_data.c deleted file mode 100644 index e03198e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/test/test_data.c +++ /dev/null @@ -1,2581 +0,0 @@ -/* - * Copyright (c) 2009-2010, Salvatore Sanfilippo - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of Redis nor the names of its contributors may be used - * to endorse or promote products derived from this software without - * specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include "redis.h" -#include "slowlog.h" -#include "bio.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* Our shared "common" objects */ - -struct sharedObjectsStruct shared; - -/* Global vars that are actually used as constants. The following double - * values are used for double on-disk serialization, and are initialized - * at runtime to avoid strange compiler optimizations. */ - -double R_Zero, R_PosInf, R_NegInf, R_Nan; - -/*================================= Globals ================================= */ - -/* Global vars */ -struct redisServer server; /* server global state */ -struct redisCommand *commandTable; - -/* Our command table. - * - * Every entry is composed of the following fields: - * - * name: a string representing the command name. - * function: pointer to the C function implementing the command. - * arity: number of arguments, it is possible to use -N to say >= N - * sflags: command flags as string. See below for a table of flags. - * flags: flags as bitmask. Computed by Redis using the 'sflags' field. - * get_keys_proc: an optional function to get key arguments from a command. - * This is only used when the following three fields are not - * enough to specify what arguments are keys. - * first_key_index: first argument that is a key - * last_key_index: last argument that is a key - * key_step: step to get all the keys from first to last argument. For instance - * in MSET the step is two since arguments are key,val,key,val,... - * microseconds: microseconds of total execution time for this command. - * calls: total number of calls of this command. - * - * The flags, microseconds and calls fields are computed by Redis and should - * always be set to zero. - * - * Command flags are expressed using strings where every character represents - * a flag. Later the populateCommandTable() function will take care of - * populating the real 'flags' field using this characters. - * - * This is the meaning of the flags: - * - * w: write command (may modify the key space). - * r: read command (will never modify the key space). - * m: may increase memory usage once called. Don't allow if out of memory. - * a: admin command, like SAVE or SHUTDOWN. - * p: Pub/Sub related command. - * f: force replication of this command, regarless of server.dirty. - * s: command not allowed in scripts. - * R: random command. Command is not deterministic, that is, the same command - * with the same arguments, with the same key space, may have different - * results. For instance SPOP and RANDOMKEY are two random commands. - * S: Sort command output array if called from script, so that the output - * is deterministic. - */ -struct redisCommand redisCommandTable[] = { - {"get",getCommand,2,"r",0,NULL,1,1,1,0,0}, - {"set",setCommand,3,"wm",0,noPreloadGetKeys,1,1,1,0,0}, - {"setnx",setnxCommand,3,"wm",0,noPreloadGetKeys,1,1,1,0,0}, - {"setex",setexCommand,4,"wm",0,noPreloadGetKeys,1,1,1,0,0}, - {"psetex",psetexCommand,4,"wm",0,noPreloadGetKeys,1,1,1,0,0}, - {"append",appendCommand,3,"wm",0,NULL,1,1,1,0,0}, - {"strlen",strlenCommand,2,"r",0,NULL,1,1,1,0,0}, - {"del",delCommand,-2,"w",0,noPreloadGetKeys,1,-1,1,0,0}, - {"exists",existsCommand,2,"r",0,NULL,1,1,1,0,0}, - {"setbit",setbitCommand,4,"wm",0,NULL,1,1,1,0,0}, - {"getbit",getbitCommand,3,"r",0,NULL,1,1,1,0,0}, - {"setrange",setrangeCommand,4,"wm",0,NULL,1,1,1,0,0}, - {"getrange",getrangeCommand,4,"r",0,NULL,1,1,1,0,0}, - {"substr",getrangeCommand,4,"r",0,NULL,1,1,1,0,0}, - {"incr",incrCommand,2,"wm",0,NULL,1,1,1,0,0}, - {"decr",decrCommand,2,"wm",0,NULL,1,1,1,0,0}, - {"mget",mgetCommand,-2,"r",0,NULL,1,-1,1,0,0}, - {"rpush",rpushCommand,-3,"wm",0,NULL,1,1,1,0,0}, - {"lpush",lpushCommand,-3,"wm",0,NULL,1,1,1,0,0}, - {"rpushx",rpushxCommand,3,"wm",0,NULL,1,1,1,0,0}, - {"lpushx",lpushxCommand,3,"wm",0,NULL,1,1,1,0,0}, - {"linsert",linsertCommand,5,"wm",0,NULL,1,1,1,0,0}, - {"rpop",rpopCommand,2,"w",0,NULL,1,1,1,0,0}, - {"lpop",lpopCommand,2,"w",0,NULL,1,1,1,0,0}, - {"brpop",brpopCommand,-3,"ws",0,NULL,1,1,1,0,0}, - {"brpoplpush",brpoplpushCommand,4,"wms",0,NULL,1,2,1,0,0}, - {"blpop",blpopCommand,-3,"ws",0,NULL,1,-2,1,0,0}, - {"llen",llenCommand,2,"r",0,NULL,1,1,1,0,0}, - {"lindex",lindexCommand,3,"r",0,NULL,1,1,1,0,0}, - {"lset",lsetCommand,4,"wm",0,NULL,1,1,1,0,0}, - {"lrange",lrangeCommand,4,"r",0,NULL,1,1,1,0,0}, - {"ltrim",ltrimCommand,4,"w",0,NULL,1,1,1,0,0}, - {"lrem",lremCommand,4,"w",0,NULL,1,1,1,0,0}, - {"rpoplpush",rpoplpushCommand,3,"wm",0,NULL,1,2,1,0,0}, - {"sadd",saddCommand,-3,"wm",0,NULL,1,1,1,0,0}, - {"srem",sremCommand,-3,"w",0,NULL,1,1,1,0,0}, - {"smove",smoveCommand,4,"w",0,NULL,1,2,1,0,0}, - {"sismember",sismemberCommand,3,"r",0,NULL,1,1,1,0,0}, - {"scard",scardCommand,2,"r",0,NULL,1,1,1,0,0}, - {"spop",spopCommand,2,"wRs",0,NULL,1,1,1,0,0}, - {"srandmember",srandmemberCommand,2,"rR",0,NULL,1,1,1,0,0}, - {"sinter",sinterCommand,-2,"rS",0,NULL,1,-1,1,0,0}, - {"sinterstore",sinterstoreCommand,-3,"wm",0,NULL,1,-1,1,0,0}, - {"sunion",sunionCommand,-2,"rS",0,NULL,1,-1,1,0,0}, - {"sunionstore",sunionstoreCommand,-3,"wm",0,NULL,1,-1,1,0,0}, - {"sdiff",sdiffCommand,-2,"rS",0,NULL,1,-1,1,0,0}, - {"sdiffstore",sdiffstoreCommand,-3,"wm",0,NULL,1,-1,1,0,0}, - {"smembers",sinterCommand,2,"rS",0,NULL,1,1,1,0,0}, - {"zadd",zaddCommand,-4,"wm",0,NULL,1,1,1,0,0}, - {"zincrby",zincrbyCommand,4,"wm",0,NULL,1,1,1,0,0}, - {"zrem",zremCommand,-3,"w",0,NULL,1,1,1,0,0}, - {"zremrangebyscore",zremrangebyscoreCommand,4,"w",0,NULL,1,1,1,0,0}, - {"zremrangebyrank",zremrangebyrankCommand,4,"w",0,NULL,1,1,1,0,0}, - {"zunionstore",zunionstoreCommand,-4,"wm",0,zunionInterGetKeys,0,0,0,0,0}, - {"zinterstore",zinterstoreCommand,-4,"wm",0,zunionInterGetKeys,0,0,0,0,0}, - {"zrange",zrangeCommand,-4,"r",0,NULL,1,1,1,0,0}, - {"zrangebyscore",zrangebyscoreCommand,-4,"r",0,NULL,1,1,1,0,0}, - {"zrevrangebyscore",zrevrangebyscoreCommand,-4,"r",0,NULL,1,1,1,0,0}, - {"zcount",zcountCommand,4,"r",0,NULL,1,1,1,0,0}, - {"zrevrange",zrevrangeCommand,-4,"r",0,NULL,1,1,1,0,0}, - {"zcard",zcardCommand,2,"r",0,NULL,1,1,1,0,0}, - {"zscore",zscoreCommand,3,"r",0,NULL,1,1,1,0,0}, - {"zrank",zrankCommand,3,"r",0,NULL,1,1,1,0,0}, - {"zrevrank",zrevrankCommand,3,"r",0,NULL,1,1,1,0,0}, - {"hset",hsetCommand,4,"wm",0,NULL,1,1,1,0,0}, - {"hsetnx",hsetnxCommand,4,"wm",0,NULL,1,1,1,0,0}, - {"hget",hgetCommand,3,"r",0,NULL,1,1,1,0,0}, - {"hmset",hmsetCommand,-4,"wm",0,NULL,1,1,1,0,0}, - {"hmget",hmgetCommand,-3,"r",0,NULL,1,1,1,0,0}, - {"hincrby",hincrbyCommand,4,"wm",0,NULL,1,1,1,0,0}, - {"hincrbyfloat",hincrbyfloatCommand,4,"wm",0,NULL,1,1,1,0,0}, - {"hdel",hdelCommand,-3,"w",0,NULL,1,1,1,0,0}, - {"hlen",hlenCommand,2,"r",0,NULL,1,1,1,0,0}, - {"hkeys",hkeysCommand,2,"rS",0,NULL,1,1,1,0,0}, - {"hvals",hvalsCommand,2,"rS",0,NULL,1,1,1,0,0}, - {"hgetall",hgetallCommand,2,"r",0,NULL,1,1,1,0,0}, - {"hexists",hexistsCommand,3,"r",0,NULL,1,1,1,0,0}, - {"incrby",incrbyCommand,3,"wm",0,NULL,1,1,1,0,0}, - {"decrby",decrbyCommand,3,"wm",0,NULL,1,1,1,0,0}, - {"incrbyfloat",incrbyfloatCommand,3,"wm",0,NULL,1,1,1,0,0}, - {"getset",getsetCommand,3,"wm",0,NULL,1,1,1,0,0}, - {"mset",msetCommand,-3,"wm",0,NULL,1,-1,2,0,0}, - {"msetnx",msetnxCommand,-3,"wm",0,NULL,1,-1,2,0,0}, - {"randomkey",randomkeyCommand,1,"rR",0,NULL,0,0,0,0,0}, - {"select",selectCommand,2,"r",0,NULL,0,0,0,0,0}, - {"move",moveCommand,3,"w",0,NULL,1,1,1,0,0}, - {"rename",renameCommand,3,"w",0,renameGetKeys,1,2,1,0,0}, - {"renamenx",renamenxCommand,3,"w",0,renameGetKeys,1,2,1,0,0}, - {"expire",expireCommand,3,"w",0,NULL,1,1,1,0,0}, - {"expireat",expireatCommand,3,"w",0,NULL,1,1,1,0,0}, - {"pexpire",pexpireCommand,3,"w",0,NULL,1,1,1,0,0}, - {"pexpireat",pexpireatCommand,3,"w",0,NULL,1,1,1,0,0}, - {"keys",keysCommand,2,"rS",0,NULL,0,0,0,0,0}, - {"dbsize",dbsizeCommand,1,"r",0,NULL,0,0,0,0,0}, - {"auth",authCommand,2,"rs",0,NULL,0,0,0,0,0}, - {"ping",pingCommand,1,"r",0,NULL,0,0,0,0,0}, - {"echo",echoCommand,2,"r",0,NULL,0,0,0,0,0}, - {"save",saveCommand,1,"ars",0,NULL,0,0,0,0,0}, - {"bgsave",bgsaveCommand,1,"ar",0,NULL,0,0,0,0,0}, - {"bgrewriteaof",bgrewriteaofCommand,1,"ar",0,NULL,0,0,0,0,0}, - {"shutdown",shutdownCommand,-1,"ar",0,NULL,0,0,0,0,0}, - {"lastsave",lastsaveCommand,1,"r",0,NULL,0,0,0,0,0}, - {"type",typeCommand,2,"r",0,NULL,1,1,1,0,0}, - {"multi",multiCommand,1,"rs",0,NULL,0,0,0,0,0}, - {"exec",execCommand,1,"s",0,NULL,0,0,0,0,0}, - {"discard",discardCommand,1,"rs",0,NULL,0,0,0,0,0}, - {"sync",syncCommand,1,"ars",0,NULL,0,0,0,0,0}, - {"replconf",replconfCommand,-1,"ars",0,NULL,0,0,0,0,0}, - {"flushdb",flushdbCommand,1,"w",0,NULL,0,0,0,0,0}, - {"flushall",flushallCommand,1,"w",0,NULL,0,0,0,0,0}, - {"sort",sortCommand,-2,"wmS",0,NULL,1,1,1,0,0}, - {"info",infoCommand,-1,"r",0,NULL,0,0,0,0,0}, - {"monitor",monitorCommand,1,"ars",0,NULL,0,0,0,0,0}, - {"ttl",ttlCommand,2,"r",0,NULL,1,1,1,0,0}, - {"pttl",pttlCommand,2,"r",0,NULL,1,1,1,0,0}, - {"persist",persistCommand,2,"w",0,NULL,1,1,1,0,0}, - {"slaveof",slaveofCommand,3,"as",0,NULL,0,0,0,0,0}, - {"debug",debugCommand,-2,"as",0,NULL,0,0,0,0,0}, - {"config",configCommand,-2,"ar",0,NULL,0,0,0,0,0}, - {"subscribe",subscribeCommand,-2,"rps",0,NULL,0,0,0,0,0}, - {"unsubscribe",unsubscribeCommand,-1,"rps",0,NULL,0,0,0,0,0}, - {"psubscribe",psubscribeCommand,-2,"rps",0,NULL,0,0,0,0,0}, - {"punsubscribe",punsubscribeCommand,-1,"rps",0,NULL,0,0,0,0,0}, - {"publish",publishCommand,3,"pf",0,NULL,0,0,0,0,0}, - {"watch",watchCommand,-2,"rs",0,noPreloadGetKeys,1,-1,1,0,0}, - {"unwatch",unwatchCommand,1,"rs",0,NULL,0,0,0,0,0}, - {"cluster",clusterCommand,-2,"ar",0,NULL,0,0,0,0,0}, - {"restore",restoreCommand,4,"awm",0,NULL,1,1,1,0,0}, - {"migrate",migrateCommand,6,"aw",0,NULL,0,0,0,0,0}, - {"asking",askingCommand,1,"r",0,NULL,0,0,0,0,0}, - {"dump",dumpCommand,2,"ar",0,NULL,1,1,1,0,0}, - {"object",objectCommand,-2,"r",0,NULL,2,2,2,0,0}, - {"client",clientCommand,-2,"ar",0,NULL,0,0,0,0,0}, - {"eval",evalCommand,-3,"s",0,zunionInterGetKeys,0,0,0,0,0}, - {"evalsha",evalShaCommand,-3,"s",0,zunionInterGetKeys,0,0,0,0,0}, - {"slowlog",slowlogCommand,-2,"r",0,NULL,0,0,0,0,0}, - {"script",scriptCommand,-2,"ras",0,NULL,0,0,0,0,0}, - {"time",timeCommand,1,"rR",0,NULL,0,0,0,0,0}, - {"bitop",bitopCommand,-4,"wm",0,NULL,2,-1,1,0,0}, - {"bitcount",bitcountCommand,-2,"r",0,NULL,1,1,1,0,0} -}; - -/*============================ Utility functions ============================ */ - -/* Low level logging. To use only for very big messages, otherwise - * redisLog() is to prefer. */ -void redisLogRaw(int level, const char *msg) { - const int syslogLevelMap[] = { LOG_DEBUG, LOG_INFO, LOG_NOTICE, LOG_WARNING }; - const char *c = ".-*#"; - FILE *fp; - char buf[64]; - int rawmode = (level & REDIS_LOG_RAW); - - level &= 0xff; /* clear flags */ - if (level < server.verbosity) return; - - fp = (server.logfile == NULL) ? stdout : fopen(server.logfile,"a"); - if (!fp) return; - - if (rawmode) { - fprintf(fp,"%s",msg); - } else { - int off; - struct timeval tv; - - gettimeofday(&tv,NULL); - off = strftime(buf,sizeof(buf),"%d %b %H:%M:%S.",localtime(&tv.tv_sec)); - snprintf(buf+off,sizeof(buf)-off,"%03d",(int)tv.tv_usec/1000); - fprintf(fp,"[%d] %s %c %s\n",(int)getpid(),buf,c[level],msg); - } - fflush(fp); - - if (server.logfile) fclose(fp); - - if (server.syslog_enabled) syslog(syslogLevelMap[level], "%s", msg); -} - -/* Like redisLogRaw() but with printf-alike support. This is the funciton that - * is used across the code. The raw version is only used in order to dump - * the INFO output on crash. */ -void redisLog(int level, const char *fmt, ...) { - va_list ap; - char msg[REDIS_MAX_LOGMSG_LEN]; - - if ((level&0xff) < server.verbosity) return; - - va_start(ap, fmt); - vsnprintf(msg, sizeof(msg), fmt, ap); - va_end(ap); - - redisLogRaw(level,msg); -} - -/* Log a fixed message without printf-alike capabilities, in a way that is - * safe to call from a signal handler. - * - * We actually use this only for signals that are not fatal from the point - * of view of Redis. Signals that are going to kill the server anyway and - * where we need printf-alike features are served by redisLog(). */ -void redisLogFromHandler(int level, const char *msg) { - int fd; - char buf[64]; - - if ((level&0xff) < server.verbosity || - (server.logfile == NULL && server.daemonize)) return; - fd = server.logfile ? - open(server.logfile, O_APPEND|O_CREAT|O_WRONLY, 0644) : - STDOUT_FILENO; - if (fd == -1) return; - ll2string(buf,sizeof(buf),getpid()); - if (write(fd,"[",1) == -1) goto err; - if (write(fd,buf,strlen(buf)) == -1) goto err; - if (write(fd," | signal handler] (",20) == -1) goto err; - ll2string(buf,sizeof(buf),time(NULL)); - if (write(fd,buf,strlen(buf)) == -1) goto err; - if (write(fd,") ",2) == -1) goto err; - if (write(fd,msg,strlen(msg)) == -1) goto err; - if (write(fd,"\n",1) == -1) goto err; -err: - if (server.logfile) close(fd); -} - -/* Redis generally does not try to recover from out of memory conditions - * when allocating objects or strings, it is not clear if it will be possible - * to report this condition to the client since the networking layer itself - * is based on heap allocation for send buffers, so we simply abort. - * At least the code will be simpler to read... */ -void oom(const char *msg) { - redisLog(REDIS_WARNING, "%s: Out of memory\n",msg); - sleep(1); - abort(); -} - -/* Return the UNIX time in microseconds */ -long long ustime(void) { - struct timeval tv; - long long ust; - - gettimeofday(&tv, NULL); - ust = ((long long)tv.tv_sec)*1000000; - ust += tv.tv_usec; - return ust; -} - -/* Return the UNIX time in milliseconds */ -long long mstime(void) { - return ustime()/1000; -} - -/* After an RDB dump or AOF rewrite we exit from children using _exit() instead of - * exit(), because the latter may interact with the same file objects used by - * the parent process. However if we are testing the coverage normal exit() is - * used in order to obtain the right coverage information. */ -void exitFromChild(int retcode) { -#ifdef COVERAGE_TEST - exit(retcode); -#else - _exit(retcode); -#endif -} - -/*====================== Hash table type implementation ==================== */ - -/* This is an hash table type that uses the SDS dynamic strings libary as - * keys and radis objects as values (objects can hold SDS strings, - * lists, sets). */ - -void dictVanillaFree(void *privdata, void *val) -{ - DICT_NOTUSED(privdata); - zfree(val); -} - -void dictListDestructor(void *privdata, void *val) -{ - DICT_NOTUSED(privdata); - listRelease((list*)val); -} - -int dictSdsKeyCompare(void *privdata, const void *key1, - const void *key2) -{ - int l1,l2; - DICT_NOTUSED(privdata); - - l1 = sdslen((sds)key1); - l2 = sdslen((sds)key2); - if (l1 != l2) return 0; - return memcmp(key1, key2, l1) == 0; -} - -/* A case insensitive version used for the command lookup table. */ -int dictSdsKeyCaseCompare(void *privdata, const void *key1, - const void *key2) -{ - DICT_NOTUSED(privdata); - - return strcasecmp(key1, key2) == 0; -} - -void dictRedisObjectDestructor(void *privdata, void *val) -{ - DICT_NOTUSED(privdata); - - if (val == NULL) return; /* Values of swapped out keys as set to NULL */ - decrRefCount(val); -} - -void dictSdsDestructor(void *privdata, void *val) -{ - DICT_NOTUSED(privdata); - - sdsfree(val); -} - -int dictObjKeyCompare(void *privdata, const void *key1, - const void *key2) -{ - const robj *o1 = key1, *o2 = key2; - return dictSdsKeyCompare(privdata,o1->ptr,o2->ptr); -} - -unsigned int dictObjHash(const void *key) { - const robj *o = key; - return dictGenHashFunction(o->ptr, sdslen((sds)o->ptr)); -} - -unsigned int dictSdsHash(const void *key) { - return dictGenHashFunction((unsigned char*)key, sdslen((char*)key)); -} - -unsigned int dictSdsCaseHash(const void *key) { - return dictGenCaseHashFunction((unsigned char*)key, sdslen((char*)key)); -} - -int dictEncObjKeyCompare(void *privdata, const void *key1, - const void *key2) -{ - robj *o1 = (robj*) key1, *o2 = (robj*) key2; - int cmp; - - if (o1->encoding == REDIS_ENCODING_INT && - o2->encoding == REDIS_ENCODING_INT) - return o1->ptr == o2->ptr; - - o1 = getDecodedObject(o1); - o2 = getDecodedObject(o2); - cmp = dictSdsKeyCompare(privdata,o1->ptr,o2->ptr); - decrRefCount(o1); - decrRefCount(o2); - return cmp; -} - -unsigned int dictEncObjHash(const void *key) { - robj *o = (robj*) key; - - if (o->encoding == REDIS_ENCODING_RAW) { - return dictGenHashFunction(o->ptr, sdslen((sds)o->ptr)); - } else { - if (o->encoding == REDIS_ENCODING_INT) { - char buf[32]; - int len; - - len = ll2string(buf,32,(long)o->ptr); - return dictGenHashFunction((unsigned char*)buf, len); - } else { - unsigned int hash; - - o = getDecodedObject(o); - hash = dictGenHashFunction(o->ptr, sdslen((sds)o->ptr)); - decrRefCount(o); - return hash; - } - } -} - -/* Sets type hash table */ -dictType setDictType = { - dictEncObjHash, /* hash function */ - NULL, /* key dup */ - NULL, /* val dup */ - dictEncObjKeyCompare, /* key compare */ - dictRedisObjectDestructor, /* key destructor */ - NULL /* val destructor */ -}; - -/* Sorted sets hash (note: a skiplist is used in addition to the hash table) */ -dictType zsetDictType = { - dictEncObjHash, /* hash function */ - NULL, /* key dup */ - NULL, /* val dup */ - dictEncObjKeyCompare, /* key compare */ - dictRedisObjectDestructor, /* key destructor */ - NULL /* val destructor */ -}; - -/* Db->dict, keys are sds strings, vals are Redis objects. */ -dictType dbDictType = { - dictSdsHash, /* hash function */ - NULL, /* key dup */ - NULL, /* val dup */ - dictSdsKeyCompare, /* key compare */ - dictSdsDestructor, /* key destructor */ - dictRedisObjectDestructor /* val destructor */ -}; - -/* Db->expires */ -dictType keyptrDictType = { - dictSdsHash, /* hash function */ - NULL, /* key dup */ - NULL, /* val dup */ - dictSdsKeyCompare, /* key compare */ - NULL, /* key destructor */ - NULL /* val destructor */ -}; - -/* Command table. sds string -> command struct pointer. */ -dictType commandTableDictType = { - dictSdsCaseHash, /* hash function */ - NULL, /* key dup */ - NULL, /* val dup */ - dictSdsKeyCaseCompare, /* key compare */ - dictSdsDestructor, /* key destructor */ - NULL /* val destructor */ -}; - -/* Hash type hash table (note that small hashes are represented with zimpaps) */ -dictType hashDictType = { - dictEncObjHash, /* hash function */ - NULL, /* key dup */ - NULL, /* val dup */ - dictEncObjKeyCompare, /* key compare */ - dictRedisObjectDestructor, /* key destructor */ - dictRedisObjectDestructor /* val destructor */ -}; - -/* Keylist hash table type has unencoded redis objects as keys and - * lists as values. It's used for blocking operations (BLPOP) and to - * map swapped keys to a list of clients waiting for this keys to be loaded. */ -dictType keylistDictType = { - dictObjHash, /* hash function */ - NULL, /* key dup */ - NULL, /* val dup */ - dictObjKeyCompare, /* key compare */ - dictRedisObjectDestructor, /* key destructor */ - dictListDestructor /* val destructor */ -}; - -/* Cluster nodes hash table, mapping nodes addresses 1.2.3.4:6379 to - * clusterNode structures. */ -dictType clusterNodesDictType = { - dictSdsHash, /* hash function */ - NULL, /* key dup */ - NULL, /* val dup */ - dictSdsKeyCompare, /* key compare */ - dictSdsDestructor, /* key destructor */ - NULL /* val destructor */ -}; - -int htNeedsResize(dict *dict) { - long long size, used; - - size = dictSlots(dict); - used = dictSize(dict); - return (size && used && size > DICT_HT_INITIAL_SIZE && - (used*100/size < REDIS_HT_MINFILL)); -} - -/* If the percentage of used slots in the HT reaches REDIS_HT_MINFILL - * we resize the hash table to save memory */ -void tryResizeHashTables(void) { - int j; - - for (j = 0; j < server.dbnum; j++) { - if (htNeedsResize(server.db[j].dict)) - dictResize(server.db[j].dict); - if (htNeedsResize(server.db[j].expires)) - dictResize(server.db[j].expires); - } -} - -/* Our hash table implementation performs rehashing incrementally while - * we write/read from the hash table. Still if the server is idle, the hash - * table will use two tables for a long time. So we try to use 1 millisecond - * of CPU time at every serverCron() loop in order to rehash some key. */ -void incrementallyRehash(void) { - int j; - - for (j = 0; j < server.dbnum; j++) { - /* Keys dictionary */ - if (dictIsRehashing(server.db[j].dict)) { - dictRehashMilliseconds(server.db[j].dict,1); - break; /* already used our millisecond for this loop... */ - } - /* Expires */ - if (dictIsRehashing(server.db[j].expires)) { - dictRehashMilliseconds(server.db[j].expires,1); - break; /* already used our millisecond for this loop... */ - } - } -} - -/* This function is called once a background process of some kind terminates, - * as we want to avoid resizing the hash tables when there is a child in order - * to play well with copy-on-write (otherwise when a resize happens lots of - * memory pages are copied). The goal of this function is to update the ability - * for dict.c to resize the hash tables accordingly to the fact we have o not - * running childs. */ -void updateDictResizePolicy(void) { - if (server.rdb_child_pid == -1 && server.aof_child_pid == -1) - dictEnableResize(); - else - dictDisableResize(); -} - -/* ======================= Cron: called every 100 ms ======================== */ - -/* Try to expire a few timed out keys. The algorithm used is adaptive and - * will use few CPU cycles if there are few expiring keys, otherwise - * it will get more aggressive to avoid that too much memory is used by - * keys that can be removed from the keyspace. */ -void activeExpireCycle(void) { - int j, iteration = 0; - long long start = ustime(), timelimit; - - /* We can use at max REDIS_EXPIRELOOKUPS_TIME_PERC percentage of CPU time - * per iteration. Since this function gets called with a frequency of - * REDIS_HZ times per second, the following is the max amount of - * microseconds we can spend in this function. */ - timelimit = 1000000*REDIS_EXPIRELOOKUPS_TIME_PERC/REDIS_HZ/100; - if (timelimit <= 0) timelimit = 1; - - for (j = 0; j < server.dbnum; j++) { - int expired; - redisDb *db = server.db+j; - - /* Continue to expire if at the end of the cycle more than 25% - * of the keys were expired. */ - do { - unsigned long num = dictSize(db->expires); - unsigned long slots = dictSlots(db->expires); - long long now = mstime(); - - /* When there are less than 1% filled slots getting random - * keys is expensive, so stop here waiting for better times... - * The dictionary will be resized asap. */ - if (num && slots > DICT_HT_INITIAL_SIZE && - (num*100/slots < 1)) break; - - /* The main collection cycle. Sample random keys among keys - * with an expire set, checking for expired ones. */ - expired = 0; - if (num > REDIS_EXPIRELOOKUPS_PER_CRON) - num = REDIS_EXPIRELOOKUPS_PER_CRON; - while (num--) { - dictEntry *de; - long long t; - - if ((de = dictGetRandomKey(db->expires)) == NULL) break; - t = dictGetSignedIntegerVal(de); - if (now > t) { - sds key = dictGetKey(de); - robj *keyobj = createStringObject(key,sdslen(key)); - - propagateExpire(db,keyobj); - dbDelete(db,keyobj); - decrRefCount(keyobj); - expired++; - server.stat_expiredkeys++; - } - } - /* We can't block forever here even if there are many keys to - * expire. So after a given amount of milliseconds return to the - * caller waiting for the other active expire cycle. */ - iteration++; - if ((iteration & 0xf) == 0 && /* check once every 16 cycles. */ - (ustime()-start) > timelimit) return; - } while (expired > REDIS_EXPIRELOOKUPS_PER_CRON/4); - } -} - -void updateLRUClock(void) { - server.lruclock = (server.unixtime/REDIS_LRU_CLOCK_RESOLUTION) & - REDIS_LRU_CLOCK_MAX; -} - - -/* Add a sample to the operations per second array of samples. */ -void trackOperationsPerSecond(void) { - long long t = mstime() - server.ops_sec_last_sample_time; - long long ops = server.stat_numcommands - server.ops_sec_last_sample_ops; - long long ops_sec; - - ops_sec = t > 0 ? (ops*1000/t) : 0; - - server.ops_sec_samples[server.ops_sec_idx] = ops_sec; - server.ops_sec_idx = (server.ops_sec_idx+1) % REDIS_OPS_SEC_SAMPLES; - server.ops_sec_last_sample_time = mstime(); - server.ops_sec_last_sample_ops = server.stat_numcommands; -} - -/* Return the mean of all the samples. */ -long long getOperationsPerSecond(void) { - int j; - long long sum = 0; - - for (j = 0; j < REDIS_OPS_SEC_SAMPLES; j++) - sum += server.ops_sec_samples[j]; - return sum / REDIS_OPS_SEC_SAMPLES; -} - -/* Check for timeouts. Returns non-zero if the client was terminated */ -int clientsCronHandleTimeout(redisClient *c) { - time_t now = server.unixtime; - - if (server.maxidletime && - !(c->flags & REDIS_SLAVE) && /* no timeout for slaves */ - !(c->flags & REDIS_MASTER) && /* no timeout for masters */ - !(c->flags & REDIS_BLOCKED) && /* no timeout for BLPOP */ - dictSize(c->pubsub_channels) == 0 && /* no timeout for pubsub */ - listLength(c->pubsub_patterns) == 0 && - (now - c->lastinteraction > server.maxidletime)) - { - redisLog(REDIS_VERBOSE,"Closing idle client"); - freeClient(c); - return 1; - } else if (c->flags & REDIS_BLOCKED) { - if (c->bpop.timeout != 0 && c->bpop.timeout < now) { - addReply(c,shared.nullmultibulk); - unblockClientWaitingData(c); - } - } - return 0; -} - -/* The client query buffer is an sds.c string that can end with a lot of - * free space not used, this function reclaims space if needed. - * - * The funciton always returns 0 as it never terminates the client. */ -int clientsCronResizeQueryBuffer(redisClient *c) { - size_t querybuf_size = sdsAllocSize(c->querybuf); - time_t idletime = server.unixtime - c->lastinteraction; - - /* There are two conditions to resize the query buffer: - * 1) Query buffer is > BIG_ARG and too big for latest peak. - * 2) Client is inactive and the buffer is bigger than 1k. */ - if (((querybuf_size > REDIS_MBULK_BIG_ARG) && - (querybuf_size/(c->querybuf_peak+1)) > 2) || - (querybuf_size > 1024 && idletime > 2)) - { - /* Only resize the query buffer if it is actually wasting space. */ - if (sdsavail(c->querybuf) > 1024) { - c->querybuf = sdsRemoveFreeSpace(c->querybuf); - } - } - /* Reset the peak again to capture the peak memory usage in the next - * cycle. */ - c->querybuf_peak = 0; - return 0; -} - -void clientsCron(void) { - /* Make sure to process at least 1/(REDIS_HZ*10) of clients per call. - * Since this function is called REDIS_HZ times per second we are sure that - * in the worst case we process all the clients in 10 seconds. - * In normal conditions (a reasonable number of clients) we process - * all the clients in a shorter time. */ - int numclients = listLength(server.clients); - int iterations = numclients/(REDIS_HZ*10); - - if (iterations < 50) - iterations = (numclients < 50) ? numclients : 50; - while(listLength(server.clients) && iterations--) { - redisClient *c; - listNode *head; - - /* Rotate the list, take the current head, process. - * This way if the client must be removed from the list it's the - * first element and we don't incur into O(N) computation. */ - listRotate(server.clients); - head = listFirst(server.clients); - c = listNodeValue(head); - /* The following functions do different service checks on the client. - * The protocol is that they return non-zero if the client was - * terminated. */ - if (clientsCronHandleTimeout(c)) continue; - if (clientsCronResizeQueryBuffer(c)) continue; - } -} - -/* This is our timer interrupt, called REDIS_HZ times per second. - * Here is where we do a number of things that need to be done asynchronously. - * For instance: - * - * - Active expired keys collection (it is also performed in a lazy way on - * lookup). - * - Software watchdong. - * - Update some statistic. - * - Incremental rehashing of the DBs hash tables. - * - Triggering BGSAVE / AOF rewrite, and handling of terminated children. - * - Clients timeout of differnet kinds. - * - Replication reconnection. - * - Many more... - * - * Everything directly called here will be called REDIS_HZ times per second, - * so in order to throttle execution of things we want to do less frequently - * a macro is used: run_with_period(milliseconds) { .... } - */ - -/* Using the following macro you can run code inside serverCron() with the - * specified period, specified in milliseconds. - * The actual resolution depends on REDIS_HZ. */ -#define run_with_period(_ms_) if (!(loops % ((_ms_)/(1000/REDIS_HZ)))) - -int serverCron(struct aeEventLoop *eventLoop, long long id, void *clientData) { - int j, loops = server.cronloops; - REDIS_NOTUSED(eventLoop); - REDIS_NOTUSED(id); - REDIS_NOTUSED(clientData); - - /* Software watchdog: deliver the SIGALRM that will reach the signal - * handler if we don't return here fast enough. */ - if (server.watchdog_period) watchdogScheduleSignal(server.watchdog_period); - - /* We take a cached value of the unix time in the global state because - * with virtual memory and aging there is to store the current time - * in objects at every object access, and accuracy is not needed. - * To access a global var is faster than calling time(NULL) */ - server.unixtime = time(NULL); - - run_with_period(100) trackOperationsPerSecond(); - - /* We have just 22 bits per object for LRU information. - * So we use an (eventually wrapping) LRU clock with 10 seconds resolution. - * 2^22 bits with 10 seconds resoluton is more or less 1.5 years. - * - * Note that even if this will wrap after 1.5 years it's not a problem, - * everything will still work but just some object will appear younger - * to Redis. But for this to happen a given object should never be touched - * for 1.5 years. - * - * Note that you can change the resolution altering the - * REDIS_LRU_CLOCK_RESOLUTION define. - */ - updateLRUClock(); - - /* Record the max memory used since the server was started. */ - if (zmalloc_used_memory() > server.stat_peak_memory) - server.stat_peak_memory = zmalloc_used_memory(); - - /* We received a SIGTERM, shutting down here in a safe way, as it is - * not ok doing so inside the signal handler. */ - if (server.shutdown_asap) { - if (prepareForShutdown(0) == REDIS_OK) exit(0); - redisLog(REDIS_WARNING,"SIGTERM received but errors trying to shut down the server, check the logs for more information"); - } - - /* Show some info about non-empty databases */ - run_with_period(5000) { - for (j = 0; j < server.dbnum; j++) { - long long size, used, vkeys; - - size = dictSlots(server.db[j].dict); - used = dictSize(server.db[j].dict); - vkeys = dictSize(server.db[j].expires); - if (used || vkeys) { - redisLog(REDIS_VERBOSE,"DB %d: %lld keys (%lld volatile) in %lld slots HT.",j,used,vkeys,size); - /* dictPrintStats(server.dict); */ - } - } - } - - /* We don't want to resize the hash tables while a bacground saving - * is in progress: the saving child is created using fork() that is - * implemented with a copy-on-write semantic in most modern systems, so - * if we resize the HT while there is the saving child at work actually - * a lot of memory movements in the parent will cause a lot of pages - * copied. */ - if (server.rdb_child_pid == -1 && server.aof_child_pid == -1) { - tryResizeHashTables(); - if (server.activerehashing) incrementallyRehash(); - } - - /* Show information about connected clients */ - run_with_period(5000) { - redisLog(REDIS_VERBOSE,"%d clients connected (%d slaves), %zu bytes in use", - listLength(server.clients)-listLength(server.slaves), - listLength(server.slaves), - zmalloc_used_memory()); - } - - /* We need to do a few operations on clients asynchronously. */ - clientsCron(); - - /* Start a scheduled AOF rewrite if this was requested by the user while - * a BGSAVE was in progress. */ - if (server.rdb_child_pid == -1 && server.aof_child_pid == -1 && - server.aof_rewrite_scheduled) - { - rewriteAppendOnlyFileBackground(); - } - - /* Check if a background saving or AOF rewrite in progress terminated. */ - if (server.rdb_child_pid != -1 || server.aof_child_pid != -1) { - int statloc; - pid_t pid; - - if ((pid = wait3(&statloc,WNOHANG,NULL)) != 0) { - int exitcode = WEXITSTATUS(statloc); - int bysignal = 0; - - if (WIFSIGNALED(statloc)) bysignal = WTERMSIG(statloc); - - if (pid == server.rdb_child_pid) { - backgroundSaveDoneHandler(exitcode,bysignal); - } else { - backgroundRewriteDoneHandler(exitcode,bysignal); - } - updateDictResizePolicy(); - } - } else { - /* If there is not a background saving/rewrite in progress check if - * we have to save/rewrite now */ - for (j = 0; j < server.saveparamslen; j++) { - struct saveparam *sp = server.saveparams+j; - - if (server.dirty >= sp->changes && - server.unixtime-server.lastsave > sp->seconds) { - redisLog(REDIS_NOTICE,"%d changes in %d seconds. Saving...", - sp->changes, sp->seconds); - rdbSaveBackground(server.rdb_filename); - break; - } - } - - /* Trigger an AOF rewrite if needed */ - if (server.rdb_child_pid == -1 && - server.aof_child_pid == -1 && - server.aof_rewrite_perc && - server.aof_current_size > server.aof_rewrite_min_size) - { - long long base = server.aof_rewrite_base_size ? - server.aof_rewrite_base_size : 1; - long long growth = (server.aof_current_size*100/base) - 100; - if (growth >= server.aof_rewrite_perc) { - redisLog(REDIS_NOTICE,"Starting automatic rewriting of AOF on %lld%% growth",growth); - rewriteAppendOnlyFileBackground(); - } - } - } - - - /* If we postponed an AOF buffer flush, let's try to do it every time the - * cron function is called. */ - if (server.aof_flush_postponed_start) flushAppendOnlyFile(0); - - /* Expire a few keys per cycle, only if this is a master. - * On slaves we wait for DEL operations synthesized by the master - * in order to guarantee a strict consistency. */ - if (server.masterhost == NULL) activeExpireCycle(); - - /* Close clients that need to be closed asynchronous */ - freeClientsInAsyncFreeQueue(); - - /* Replication cron function -- used to reconnect to master and - * to detect transfer failures. */ - run_with_period(1000) replicationCron(); - - /* Run other sub-systems specific cron jobs */ - run_with_period(1000) { - if (server.cluster_enabled) clusterCron(); - } - - server.cronloops++; - return 1000/REDIS_HZ; -} - -/* This function gets called every time Redis is entering the - * main loop of the event driven library, that is, before to sleep - * for ready file descriptors. */ -void beforeSleep(struct aeEventLoop *eventLoop) { - REDIS_NOTUSED(eventLoop); - listNode *ln; - redisClient *c; - - /* Try to process pending commands for clients that were just unblocked. */ - while (listLength(server.unblocked_clients)) { - ln = listFirst(server.unblocked_clients); - redisAssert(ln != NULL); - c = ln->value; - listDelNode(server.unblocked_clients,ln); - c->flags &= ~REDIS_UNBLOCKED; - - /* Process remaining data in the input buffer. */ - if (c->querybuf && sdslen(c->querybuf) > 0) { - server.current_client = c; - processInputBuffer(c); - server.current_client = NULL; - } - } - - /* Write the AOF buffer on disk */ - flushAppendOnlyFile(0); -} - -/* =========================== Server initialization ======================== */ - -void createSharedObjects(void) { - int j; - - shared.crlf = createObject(REDIS_STRING,sdsnew("\r\n")); - shared.ok = createObject(REDIS_STRING,sdsnew("+OK\r\n")); - shared.err = createObject(REDIS_STRING,sdsnew("-ERR\r\n")); - shared.emptybulk = createObject(REDIS_STRING,sdsnew("$0\r\n\r\n")); - shared.czero = createObject(REDIS_STRING,sdsnew(":0\r\n")); - shared.cone = createObject(REDIS_STRING,sdsnew(":1\r\n")); - shared.cnegone = createObject(REDIS_STRING,sdsnew(":-1\r\n")); - shared.nullbulk = createObject(REDIS_STRING,sdsnew("$-1\r\n")); - shared.nullmultibulk = createObject(REDIS_STRING,sdsnew("*-1\r\n")); - shared.emptymultibulk = createObject(REDIS_STRING,sdsnew("*0\r\n")); - shared.pong = createObject(REDIS_STRING,sdsnew("+PONG\r\n")); - shared.queued = createObject(REDIS_STRING,sdsnew("+QUEUED\r\n")); - shared.wrongtypeerr = createObject(REDIS_STRING,sdsnew( - "-ERR Operation against a key holding the wrong kind of value\r\n")); - shared.nokeyerr = createObject(REDIS_STRING,sdsnew( - "-ERR no such key\r\n")); - shared.syntaxerr = createObject(REDIS_STRING,sdsnew( - "-ERR syntax error\r\n")); - shared.sameobjecterr = createObject(REDIS_STRING,sdsnew( - "-ERR source and destination objects are the same\r\n")); - shared.outofrangeerr = createObject(REDIS_STRING,sdsnew( - "-ERR index out of range\r\n")); - shared.noscripterr = createObject(REDIS_STRING,sdsnew( - "-NOSCRIPT No matching script. Please use EVAL.\r\n")); - shared.loadingerr = createObject(REDIS_STRING,sdsnew( - "-LOADING Redis is loading the dataset in memory\r\n")); - shared.slowscripterr = createObject(REDIS_STRING,sdsnew( - "-BUSY Redis is busy running a script. You can only call SCRIPT KILL or SHUTDOWN NOSAVE.\r\n")); - shared.masterdownerr = createObject(REDIS_STRING,sdsnew( - "-MASTERDOWN Link with MASTER is down and slave-serve-stale-data is set to 'no'.\r\n")); - shared.bgsaveerr = createObject(REDIS_STRING,sdsnew( - "-MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.\r\n")); - shared.roslaveerr = createObject(REDIS_STRING,sdsnew( - "-READONLY You can't write against a read only slave.\r\n")); - shared.oomerr = createObject(REDIS_STRING,sdsnew( - "-OOM command not allowed when used memory > 'maxmemory'.\r\n")); - shared.space = createObject(REDIS_STRING,sdsnew(" ")); - shared.colon = createObject(REDIS_STRING,sdsnew(":")); - shared.plus = createObject(REDIS_STRING,sdsnew("+")); - - for (j = 0; j < REDIS_SHARED_SELECT_CMDS; j++) { - shared.select[j] = createObject(REDIS_STRING, - sdscatprintf(sdsempty(),"select %d\r\n", j)); - } - shared.messagebulk = createStringObject("$7\r\nmessage\r\n",13); - shared.pmessagebulk = createStringObject("$8\r\npmessage\r\n",14); - shared.subscribebulk = createStringObject("$9\r\nsubscribe\r\n",15); - shared.unsubscribebulk = createStringObject("$11\r\nunsubscribe\r\n",18); - shared.psubscribebulk = createStringObject("$10\r\npsubscribe\r\n",17); - shared.punsubscribebulk = createStringObject("$12\r\npunsubscribe\r\n",19); - shared.del = createStringObject("DEL",3); - shared.rpop = createStringObject("RPOP",4); - shared.lpop = createStringObject("LPOP",4); - for (j = 0; j < REDIS_SHARED_INTEGERS; j++) { - shared.integers[j] = createObject(REDIS_STRING,(void*)(long)j); - shared.integers[j]->encoding = REDIS_ENCODING_INT; - } - for (j = 0; j < REDIS_SHARED_BULKHDR_LEN; j++) { - shared.mbulkhdr[j] = createObject(REDIS_STRING, - sdscatprintf(sdsempty(),"*%d\r\n",j)); - shared.bulkhdr[j] = createObject(REDIS_STRING, - sdscatprintf(sdsempty(),"$%d\r\n",j)); - } -} - -void initServerConfig() { - getRandomHexChars(server.runid,REDIS_RUN_ID_SIZE); - server.runid[REDIS_RUN_ID_SIZE] = '\0'; - server.arch_bits = (sizeof(long) == 8) ? 64 : 32; - server.port = REDIS_SERVERPORT; - server.bindaddr = NULL; - server.unixsocket = NULL; - server.unixsocketperm = 0; - server.ipfd = -1; - server.sofd = -1; - server.dbnum = REDIS_DEFAULT_DBNUM; - server.verbosity = REDIS_NOTICE; - server.maxidletime = REDIS_MAXIDLETIME; - server.client_max_querybuf_len = REDIS_MAX_QUERYBUF_LEN; - server.saveparams = NULL; - server.loading = 0; - server.logfile = NULL; /* NULL = log on standard output */ - server.syslog_enabled = 0; - server.syslog_ident = zstrdup("redis"); - server.syslog_facility = LOG_LOCAL0; - server.daemonize = 0; - server.aof_state = REDIS_AOF_OFF; - server.aof_fsync = AOF_FSYNC_EVERYSEC; - server.aof_no_fsync_on_rewrite = 0; - server.aof_rewrite_perc = REDIS_AOF_REWRITE_PERC; - server.aof_rewrite_min_size = REDIS_AOF_REWRITE_MIN_SIZE; - server.aof_rewrite_base_size = 0; - server.aof_rewrite_scheduled = 0; - server.aof_last_fsync = time(NULL); - server.aof_rewrite_time_last = -1; - server.aof_rewrite_time_start = -1; - server.aof_delayed_fsync = 0; - server.aof_fd = -1; - server.aof_selected_db = -1; /* Make sure the first time will not match */ - server.aof_flush_postponed_start = 0; - server.pidfile = zstrdup("/var/run/redis.pid"); - server.rdb_filename = zstrdup("dump.rdb"); - server.aof_filename = zstrdup("appendonly.aof"); - server.requirepass = NULL; - server.rdb_compression = 1; - server.rdb_checksum = 1; - server.activerehashing = 1; - server.maxclients = REDIS_MAX_CLIENTS; - server.bpop_blocked_clients = 0; - server.maxmemory = 0; - server.maxmemory_policy = REDIS_MAXMEMORY_VOLATILE_LRU; - server.maxmemory_samples = 3; - server.hash_max_ziplist_entries = REDIS_HASH_MAX_ZIPLIST_ENTRIES; - server.hash_max_ziplist_value = REDIS_HASH_MAX_ZIPLIST_VALUE; - server.list_max_ziplist_entries = REDIS_LIST_MAX_ZIPLIST_ENTRIES; - server.list_max_ziplist_value = REDIS_LIST_MAX_ZIPLIST_VALUE; - server.set_max_intset_entries = REDIS_SET_MAX_INTSET_ENTRIES; - server.zset_max_ziplist_entries = REDIS_ZSET_MAX_ZIPLIST_ENTRIES; - server.zset_max_ziplist_value = REDIS_ZSET_MAX_ZIPLIST_VALUE; - server.shutdown_asap = 0; - server.repl_ping_slave_period = REDIS_REPL_PING_SLAVE_PERIOD; - server.repl_timeout = REDIS_REPL_TIMEOUT; - server.cluster_enabled = 0; - server.cluster.configfile = zstrdup("nodes.conf"); - server.lua_caller = NULL; - server.lua_time_limit = REDIS_LUA_TIME_LIMIT; - server.lua_client = NULL; - server.lua_timedout = 0; - - updateLRUClock(); - resetServerSaveParams(); - - appendServerSaveParams(60*60,1); /* save after 1 hour and 1 change */ - appendServerSaveParams(300,100); /* save after 5 minutes and 100 changes */ - appendServerSaveParams(60,10000); /* save after 1 minute and 10000 changes */ - /* Replication related */ - server.masterauth = NULL; - server.masterhost = NULL; - server.masterport = 6379; - server.master = NULL; - server.repl_state = REDIS_REPL_NONE; - server.repl_syncio_timeout = REDIS_REPL_SYNCIO_TIMEOUT; - server.repl_serve_stale_data = 1; - server.repl_slave_ro = 1; - server.repl_down_since = time(NULL); - - /* Client output buffer limits */ - server.client_obuf_limits[REDIS_CLIENT_LIMIT_CLASS_NORMAL].hard_limit_bytes = 0; - server.client_obuf_limits[REDIS_CLIENT_LIMIT_CLASS_NORMAL].soft_limit_bytes = 0; - server.client_obuf_limits[REDIS_CLIENT_LIMIT_CLASS_NORMAL].soft_limit_seconds = 0; - server.client_obuf_limits[REDIS_CLIENT_LIMIT_CLASS_SLAVE].hard_limit_bytes = 1024*1024*256; - server.client_obuf_limits[REDIS_CLIENT_LIMIT_CLASS_SLAVE].soft_limit_bytes = 1024*1024*64; - server.client_obuf_limits[REDIS_CLIENT_LIMIT_CLASS_SLAVE].soft_limit_seconds = 60; - server.client_obuf_limits[REDIS_CLIENT_LIMIT_CLASS_PUBSUB].hard_limit_bytes = 1024*1024*32; - server.client_obuf_limits[REDIS_CLIENT_LIMIT_CLASS_PUBSUB].soft_limit_bytes = 1024*1024*8; - server.client_obuf_limits[REDIS_CLIENT_LIMIT_CLASS_PUBSUB].soft_limit_seconds = 60; - - /* Double constants initialization */ - R_Zero = 0.0; - R_PosInf = 1.0/R_Zero; - R_NegInf = -1.0/R_Zero; - R_Nan = R_Zero/R_Zero; - - /* Command table -- we intiialize it here as it is part of the - * initial configuration, since command names may be changed via - * redis.conf using the rename-command directive. */ - server.commands = dictCreate(&commandTableDictType,NULL); - populateCommandTable(); - server.delCommand = lookupCommandByCString("del"); - server.multiCommand = lookupCommandByCString("multi"); - server.lpushCommand = lookupCommandByCString("lpush"); - - /* Slow log */ - server.slowlog_log_slower_than = REDIS_SLOWLOG_LOG_SLOWER_THAN; - server.slowlog_max_len = REDIS_SLOWLOG_MAX_LEN; - - /* Debugging */ - server.assert_failed = ""; - server.assert_file = ""; - server.assert_line = 0; - server.bug_report_start = 0; - server.watchdog_period = 0; -} - -/* This function will try to raise the max number of open files accordingly to - * the configured max number of clients. It will also account for 32 additional - * file descriptors as we need a few more for persistence, listening - * sockets, log files and so forth. - * - * If it will not be possible to set the limit accordingly to the configured - * max number of clients, the function will do the reverse setting - * server.maxclients to the value that we can actually handle. */ -void adjustOpenFilesLimit(void) { - rlim_t maxfiles = server.maxclients+32; - struct rlimit limit; - - if (getrlimit(RLIMIT_NOFILE,&limit) == -1) { - redisLog(REDIS_WARNING,"Unable to obtain the current NOFILE limit (%s), assuming 1024 and setting the max clients configuration accordingly.", - strerror(errno)); - server.maxclients = 1024-32; - } else { - rlim_t oldlimit = limit.rlim_cur; - - /* Set the max number of files if the current limit is not enough - * for our needs. */ - if (oldlimit < maxfiles) { - rlim_t f; - - f = maxfiles; - while(f > oldlimit) { - limit.rlim_cur = f; - limit.rlim_max = f; - if (setrlimit(RLIMIT_NOFILE,&limit) != -1) break; - f -= 128; - } - if (f < oldlimit) f = oldlimit; - if (f != maxfiles) { - server.maxclients = f-32; - redisLog(REDIS_WARNING,"Unable to set the max number of files limit to %d (%s), setting the max clients configuration to %d.", - (int) maxfiles, strerror(errno), (int) server.maxclients); - } else { - redisLog(REDIS_NOTICE,"Max number of open files set to %d", - (int) maxfiles); - } - } - } -} - -void initServer() { - int j; - - signal(SIGHUP, SIG_IGN); - signal(SIGPIPE, SIG_IGN); - setupSignalHandlers(); - - if (server.syslog_enabled) { - openlog(server.syslog_ident, LOG_PID | LOG_NDELAY | LOG_NOWAIT, - server.syslog_facility); - } - - server.current_client = NULL; - server.clients = listCreate(); - server.clients_to_close = listCreate(); - server.slaves = listCreate(); - server.monitors = listCreate(); - server.unblocked_clients = listCreate(); - - createSharedObjects(); - adjustOpenFilesLimit(); - server.el = aeCreateEventLoop(server.maxclients+1024); - server.db = zmalloc(sizeof(redisDb)*server.dbnum); - - if (server.port != 0) { - server.ipfd = anetTcpServer(server.neterr,server.port,server.bindaddr); - if (server.ipfd == ANET_ERR) { - redisLog(REDIS_WARNING, "Opening port %d: %s", - server.port, server.neterr); - exit(1); - } - } - if (server.unixsocket != NULL) { - unlink(server.unixsocket); /* don't care if this fails */ - server.sofd = anetUnixServer(server.neterr,server.unixsocket,server.unixsocketperm); - if (server.sofd == ANET_ERR) { - redisLog(REDIS_WARNING, "Opening socket: %s", server.neterr); - exit(1); - } - } - if (server.ipfd < 0 && server.sofd < 0) { - redisLog(REDIS_WARNING, "Configured to not listen anywhere, exiting."); - exit(1); - } - for (j = 0; j < server.dbnum; j++) { - server.db[j].dict = dictCreate(&dbDictType,NULL); - server.db[j].expires = dictCreate(&keyptrDictType,NULL); - server.db[j].blocking_keys = dictCreate(&keylistDictType,NULL); - server.db[j].watched_keys = dictCreate(&keylistDictType,NULL); - server.db[j].id = j; - } - server.pubsub_channels = dictCreate(&keylistDictType,NULL); - server.pubsub_patterns = listCreate(); - listSetFreeMethod(server.pubsub_patterns,freePubsubPattern); - listSetMatchMethod(server.pubsub_patterns,listMatchPubsubPattern); - server.cronloops = 0; - server.rdb_child_pid = -1; - server.aof_child_pid = -1; - aofRewriteBufferReset(); - server.aof_buf = sdsempty(); - server.lastsave = time(NULL); - server.rdb_save_time_last = -1; - server.rdb_save_time_start = -1; - server.dirty = 0; - server.stat_numcommands = 0; - server.stat_numconnections = 0; - server.stat_expiredkeys = 0; - server.stat_evictedkeys = 0; - server.stat_starttime = time(NULL); - server.stat_keyspace_misses = 0; - server.stat_keyspace_hits = 0; - server.stat_peak_memory = 0; - server.stat_fork_time = 0; - server.stat_rejected_conn = 0; - memset(server.ops_sec_samples,0,sizeof(server.ops_sec_samples)); - server.ops_sec_idx = 0; - server.ops_sec_last_sample_time = mstime(); - server.ops_sec_last_sample_ops = 0; - server.unixtime = time(NULL); - server.lastbgsave_status = REDIS_OK; - server.stop_writes_on_bgsave_err = 1; - aeCreateTimeEvent(server.el, 1, serverCron, NULL, NULL); - if (server.ipfd > 0 && aeCreateFileEvent(server.el,server.ipfd,AE_READABLE, - acceptTcpHandler,NULL) == AE_ERR) oom("creating file event"); - if (server.sofd > 0 && aeCreateFileEvent(server.el,server.sofd,AE_READABLE, - acceptUnixHandler,NULL) == AE_ERR) oom("creating file event"); - - if (server.aof_state == REDIS_AOF_ON) { - server.aof_fd = open(server.aof_filename, - O_WRONLY|O_APPEND|O_CREAT,0644); - if (server.aof_fd == -1) { - redisLog(REDIS_WARNING, "Can't open the append-only file: %s", - strerror(errno)); - exit(1); - } - } - - /* 32 bit instances are limited to 4GB of address space, so if there is - * no explicit limit in the user provided configuration we set a limit - * at 3.5GB using maxmemory with 'noeviction' policy'. This saves - * useless crashes of the Redis instance. */ - if (server.arch_bits == 32 && server.maxmemory == 0) { - redisLog(REDIS_WARNING,"Warning: 32 bit instance detected but no memory limit set. Setting 3.5 GB maxmemory limit with 'noeviction' policy now."); - server.maxmemory = 3584LL*(1024*1024); /* 3584 MB = 3.5 GB */ - server.maxmemory_policy = REDIS_MAXMEMORY_NO_EVICTION; - } - - if (server.cluster_enabled) clusterInit(); - scriptingInit(); - slowlogInit(); - bioInit(); -} - -/* Populates the Redis Command Table starting from the hard coded list - * we have on top of redis.c file. */ -void populateCommandTable(void) { - int j; - int numcommands = sizeof(redisCommandTable)/sizeof(struct redisCommand); - - for (j = 0; j < numcommands; j++) { - struct redisCommand *c = redisCommandTable+j; - char *f = c->sflags; - int retval; - - while(*f != '\0') { - switch(*f) { - case 'w': c->flags |= REDIS_CMD_WRITE; break; - case 'r': c->flags |= REDIS_CMD_READONLY; break; - case 'm': c->flags |= REDIS_CMD_DENYOOM; break; - case 'a': c->flags |= REDIS_CMD_ADMIN; break; - case 'p': c->flags |= REDIS_CMD_PUBSUB; break; - case 'f': c->flags |= REDIS_CMD_FORCE_REPLICATION; break; - case 's': c->flags |= REDIS_CMD_NOSCRIPT; break; - case 'R': c->flags |= REDIS_CMD_RANDOM; break; - case 'S': c->flags |= REDIS_CMD_SORT_FOR_SCRIPT; break; - default: redisPanic("Unsupported command flag"); break; - } - f++; - } - - retval = dictAdd(server.commands, sdsnew(c->name), c); - assert(retval == DICT_OK); - } -} - -void resetCommandTableStats(void) { - int numcommands = sizeof(redisCommandTable)/sizeof(struct redisCommand); - int j; - - for (j = 0; j < numcommands; j++) { - struct redisCommand *c = redisCommandTable+j; - - c->microseconds = 0; - c->calls = 0; - } -} - -/* ========================== Redis OP Array API ============================ */ - -void redisOpArrayInit(redisOpArray *oa) { - oa->ops = NULL; - oa->numops = 0; -} - -int redisOpArrayAppend(redisOpArray *oa, struct redisCommand *cmd, int dbid, - robj **argv, int argc, int target) -{ - redisOp *op; - - oa->ops = zrealloc(oa->ops,sizeof(redisOp)*(oa->numops+1)); - op = oa->ops+oa->numops; - op->cmd = cmd; - op->dbid = dbid; - op->argv = argv; - op->argc = argc; - op->target = target; - oa->numops++; - return oa->numops; -} - -void redisOpArrayFree(redisOpArray *oa) { - while(oa->numops) { - int j; - redisOp *op; - - oa->numops--; - op = oa->ops+oa->numops; - for (j = 0; j < op->argc; j++) - decrRefCount(op->argv[j]); - zfree(op->argv); - } - zfree(oa->ops); -} - -/* ====================== Commands lookup and execution ===================== */ - -struct redisCommand *lookupCommand(sds name) { - return dictFetchValue(server.commands, name); -} - -struct redisCommand *lookupCommandByCString(char *s) { - struct redisCommand *cmd; - sds name = sdsnew(s); - - cmd = dictFetchValue(server.commands, name); - sdsfree(name); - return cmd; -} - -/* Propagate the specified command (in the context of the specified database id) - * to AOF, Slaves and Monitors. - * - * flags are an xor between: - * + REDIS_PROPAGATE_NONE (no propagation of command at all) - * + REDIS_PROPAGATE_AOF (propagate into the AOF file if is enabled) - * + REDIS_PROPAGATE_REPL (propagate into the replication link) - */ -void propagate(struct redisCommand *cmd, int dbid, robj **argv, int argc, - int flags) -{ - if (server.aof_state != REDIS_AOF_OFF && flags & REDIS_PROPAGATE_AOF) - feedAppendOnlyFile(cmd,dbid,argv,argc); - if (flags & REDIS_PROPAGATE_REPL && listLength(server.slaves)) - replicationFeedSlaves(server.slaves,dbid,argv,argc); -} - -/* Used inside commands to schedule the propagation of additional commands - * after the current command is propagated to AOF / Replication. */ -void alsoPropagate(struct redisCommand *cmd, int dbid, robj **argv, int argc, - int target) -{ - redisOpArrayAppend(&server.also_propagate,cmd,dbid,argv,argc,target); -} - -/* Call() is the core of Redis execution of a command */ -void call(redisClient *c, int flags) { - long long dirty, start = ustime(), duration; - - /* Sent the command to clients in MONITOR mode, only if the commands are - * not geneated from reading an AOF. */ - if (listLength(server.monitors) && !server.loading) - replicationFeedMonitors(c,server.monitors,c->db->id,c->argv,c->argc); - - /* Call the command. */ - redisOpArrayInit(&server.also_propagate); - dirty = server.dirty; - c->cmd->proc(c); - dirty = server.dirty-dirty; - duration = ustime()-start; - - /* When EVAL is called loading the AOF we don't want commands called - * from Lua to go into the slowlog or to populate statistics. */ - if (server.loading && c->flags & REDIS_LUA_CLIENT) - flags &= ~(REDIS_CALL_SLOWLOG | REDIS_CALL_STATS); - - /* Log the command into the Slow log if needed, and populate the - * per-command statistics that we show in INFO commandstats. */ - if (flags & REDIS_CALL_SLOWLOG) - slowlogPushEntryIfNeeded(c->argv,c->argc,duration); - if (flags & REDIS_CALL_STATS) { - c->cmd->microseconds += duration; - c->cmd->calls++; - } - - /* Propagate the command into the AOF and replication link */ - if (flags & REDIS_CALL_PROPAGATE) { - int flags = REDIS_PROPAGATE_NONE; - - if (c->cmd->flags & REDIS_CMD_FORCE_REPLICATION) - flags |= REDIS_PROPAGATE_REPL; - if (dirty) - flags |= (REDIS_PROPAGATE_REPL | REDIS_PROPAGATE_AOF); - if (flags != REDIS_PROPAGATE_NONE) - propagate(c->cmd,c->db->id,c->argv,c->argc,flags); - } - /* Commands such as LPUSH or BRPOPLPUSH may propagate an additional - * PUSH command. */ - if (server.also_propagate.numops) { - int j; - redisOp *rop; - - for (j = 0; j < server.also_propagate.numops; j++) { - rop = &server.also_propagate.ops[j]; - propagate(rop->cmd, rop->dbid, rop->argv, rop->argc, rop->target); - } - redisOpArrayFree(&server.also_propagate); - } - server.stat_numcommands++; -} - -/* If this function gets called we already read a whole - * command, argments are in the client argv/argc fields. - * processCommand() execute the command or prepare the - * server for a bulk read from the client. - * - * If 1 is returned the client is still alive and valid and - * and other operations can be performed by the caller. Otherwise - * if 0 is returned the client was destroied (i.e. after QUIT). */ -int processCommand(redisClient *c) { - /* The QUIT command is handled separately. Normal command procs will - * go through checking for replication and QUIT will cause trouble - * when FORCE_REPLICATION is enabled and would be implemented in - * a regular command proc. */ - if (!strcasecmp(c->argv[0]->ptr,"quit")) { - addReply(c,shared.ok); - c->flags |= REDIS_CLOSE_AFTER_REPLY; - return REDIS_ERR; - } - - /* Now lookup the command and check ASAP about trivial error conditions - * such as wrong arity, bad command name and so forth. */ - c->cmd = c->lastcmd = lookupCommand(c->argv[0]->ptr); - if (!c->cmd) { - addReplyErrorFormat(c,"unknown command '%s'", - (char*)c->argv[0]->ptr); - return REDIS_OK; - } else if ((c->cmd->arity > 0 && c->cmd->arity != c->argc) || - (c->argc < -c->cmd->arity)) { - addReplyErrorFormat(c,"wrong number of arguments for '%s' command", - c->cmd->name); - return REDIS_OK; - } - - /* Check if the user is authenticated */ - if (server.requirepass && !c->authenticated && c->cmd->proc != authCommand) - { - addReplyError(c,"operation not permitted"); - return REDIS_OK; - } - - /* If cluster is enabled, redirect here */ - if (server.cluster_enabled && - !(c->cmd->getkeys_proc == NULL && c->cmd->firstkey == 0)) { - int hashslot; - - if (server.cluster.state != REDIS_CLUSTER_OK) { - addReplyError(c,"The cluster is down. Check with CLUSTER INFO for more information"); - return REDIS_OK; - } else { - int ask; - clusterNode *n = getNodeByQuery(c,c->cmd,c->argv,c->argc,&hashslot,&ask); - if (n == NULL) { - addReplyError(c,"Multi keys request invalid in cluster"); - return REDIS_OK; - } else if (n != server.cluster.myself) { - addReplySds(c,sdscatprintf(sdsempty(), - "-%s %d %s:%d\r\n", ask ? "ASK" : "MOVED", - hashslot,n->ip,n->port)); - return REDIS_OK; - } - } - } - - /* Handle the maxmemory directive. - * - * First we try to free some memory if possible (if there are volatile - * keys in the dataset). If there are not the only thing we can do - * is returning an error. */ - if (server.maxmemory) { - int retval = freeMemoryIfNeeded(); - if ((c->cmd->flags & REDIS_CMD_DENYOOM) && retval == REDIS_ERR) { - addReply(c, shared.oomerr); - return REDIS_OK; - } - } - - /* Don't accept write commands if there are problems persisting on disk. */ - if (server.stop_writes_on_bgsave_err && - server.saveparamslen > 0 - && server.lastbgsave_status == REDIS_ERR && - c->cmd->flags & REDIS_CMD_WRITE) - { - addReply(c, shared.bgsaveerr); - return REDIS_OK; - } - - /* Don't accept wirte commands if this is a read only slave. But - * accept write commands if this is our master. */ - if (server.masterhost && server.repl_slave_ro && - !(c->flags & REDIS_MASTER) && - c->cmd->flags & REDIS_CMD_WRITE) - { - addReply(c, shared.roslaveerr); - return REDIS_OK; - } - - /* Only allow SUBSCRIBE and UNSUBSCRIBE in the context of Pub/Sub */ - if ((dictSize(c->pubsub_channels) > 0 || listLength(c->pubsub_patterns) > 0) - && - c->cmd->proc != subscribeCommand && - c->cmd->proc != unsubscribeCommand && - c->cmd->proc != psubscribeCommand && - c->cmd->proc != punsubscribeCommand) { - addReplyError(c,"only (P)SUBSCRIBE / (P)UNSUBSCRIBE / QUIT allowed in this context"); - return REDIS_OK; - } - - /* Only allow INFO and SLAVEOF when slave-serve-stale-data is no and - * we are a slave with a broken link with master. */ - if (server.masterhost && server.repl_state != REDIS_REPL_CONNECTED && - server.repl_serve_stale_data == 0 && - c->cmd->proc != infoCommand && c->cmd->proc != slaveofCommand) - { - addReply(c, shared.masterdownerr); - return REDIS_OK; - } - - /* Loading DB? Return an error if the command is not INFO */ - if (server.loading && c->cmd->proc != infoCommand) { - addReply(c, shared.loadingerr); - return REDIS_OK; - } - - /* Lua script too slow? Only allow SHUTDOWN NOSAVE and SCRIPT KILL. */ - if (server.lua_timedout && - !(c->cmd->proc == shutdownCommand && - c->argc == 2 && - tolower(((char*)c->argv[1]->ptr)[0]) == 'n') && - !(c->cmd->proc == scriptCommand && - c->argc == 2 && - tolower(((char*)c->argv[1]->ptr)[0]) == 'k')) - { - addReply(c, shared.slowscripterr); - return REDIS_OK; - } - - /* Exec the command */ - if (c->flags & REDIS_MULTI && - c->cmd->proc != execCommand && c->cmd->proc != discardCommand && - c->cmd->proc != multiCommand && c->cmd->proc != watchCommand) - { - queueMultiCommand(c); - addReply(c,shared.queued); - } else { - call(c,REDIS_CALL_FULL); - } - return REDIS_OK; -} - -/*================================== Shutdown =============================== */ - -int prepareForShutdown(int flags) { - int save = flags & REDIS_SHUTDOWN_SAVE; - int nosave = flags & REDIS_SHUTDOWN_NOSAVE; - - redisLog(REDIS_WARNING,"User requested shutdown..."); - /* Kill the saving child if there is a background saving in progress. - We want to avoid race conditions, for instance our saving child may - overwrite the synchronous saving did by SHUTDOWN. */ - if (server.rdb_child_pid != -1) { - redisLog(REDIS_WARNING,"There is a child saving an .rdb. Killing it!"); - kill(server.rdb_child_pid,SIGKILL); - rdbRemoveTempFile(server.rdb_child_pid); - } - if (server.aof_state != REDIS_AOF_OFF) { - /* Kill the AOF saving child as the AOF we already have may be longer - * but contains the full dataset anyway. */ - if (server.aof_child_pid != -1) { - redisLog(REDIS_WARNING, - "There is a child rewriting the AOF. Killing it!"); - kill(server.aof_child_pid,SIGKILL); - } - /* Append only file: fsync() the AOF and exit */ - redisLog(REDIS_NOTICE,"Calling fsync() on the AOF file."); - aof_fsync(server.aof_fd); - } - if ((server.saveparamslen > 0 && !nosave) || save) { - redisLog(REDIS_NOTICE,"Saving the final RDB snapshot before exiting."); - /* Snapshotting. Perform a SYNC SAVE and exit */ - if (rdbSave(server.rdb_filename) != REDIS_OK) { - /* Ooops.. error saving! The best we can do is to continue - * operating. Note that if there was a background saving process, - * in the next cron() Redis will be notified that the background - * saving aborted, handling special stuff like slaves pending for - * synchronization... */ - redisLog(REDIS_WARNING,"Error trying to save the DB, can't exit."); - return REDIS_ERR; - } - } - if (server.daemonize) { - redisLog(REDIS_NOTICE,"Removing the pid file."); - unlink(server.pidfile); - } - /* Close the listening sockets. Apparently this allows faster restarts. */ - if (server.ipfd != -1) close(server.ipfd); - if (server.sofd != -1) close(server.sofd); - if (server.unixsocket) { - redisLog(REDIS_NOTICE,"Removing the unix socket file."); - unlink(server.unixsocket); /* don't care if this fails */ - } - - redisLog(REDIS_WARNING,"Redis is now ready to exit, bye bye..."); - return REDIS_OK; -} - -/*================================== Commands =============================== */ - -/* Return zero if strings are the same, non-zero if they are not. - * The comparison is performed in a way that prevents an attacker to obtain - * information about the nature of the strings just monitoring the execution - * time of the function. - * - * Note that limiting the comparison length to strings up to 512 bytes we - * can avoid leaking any information about the password length and any - * possible branch misprediction related leak. - */ -int time_independent_strcmp(char *a, char *b) { - char bufa[REDIS_AUTHPASS_MAX_LEN], bufb[REDIS_AUTHPASS_MAX_LEN]; - /* The above two strlen perform len(a) + len(b) operations where either - * a or b are fixed (our password) length, and the difference is only - * relative to the length of the user provided string, so no information - * leak is possible in the following two lines of code. */ - int alen = strlen(a); - int blen = strlen(b); - int j; - int diff = 0; - - /* We can't compare strings longer than our static buffers. - * Note that this will never pass the first test in practical circumstances - * so there is no info leak. */ - if (alen > sizeof(bufa) || blen > sizeof(bufb)) return 1; - - memset(bufa,0,sizeof(bufa)); /* Constant time. */ - memset(bufb,0,sizeof(bufb)); /* Constant time. */ - /* Again the time of the following two copies is proportional to - * len(a) + len(b) so no info is leaked. */ - memcpy(bufa,a,alen); - memcpy(bufb,b,blen); - - /* Always compare all the chars in the two buffers without - * conditional expressions. */ - for (j = 0; j < sizeof(bufa); j++) { - diff |= (bufa[j] ^ bufb[j]); - } - /* Length must be equal as well. */ - diff |= alen ^ blen; - return diff; /* If zero strings are the same. */ -} - -void authCommand(redisClient *c) { - if (!server.requirepass) { - addReplyError(c,"Client sent AUTH, but no password is set"); - } else if (!time_independent_strcmp(c->argv[1]->ptr, server.requirepass)) { - c->authenticated = 1; - addReply(c,shared.ok); - } else { - c->authenticated = 0; - addReplyError(c,"invalid password"); - } -} - -void pingCommand(redisClient *c) { - addReply(c,shared.pong); -} - -void echoCommand(redisClient *c) { - addReplyBulk(c,c->argv[1]); -} - -void timeCommand(redisClient *c) { - struct timeval tv; - - /* gettimeofday() can only fail if &tv is a bad addresss so we - * don't check for errors. */ - gettimeofday(&tv,NULL); - addReplyMultiBulkLen(c,2); - addReplyBulkLongLong(c,tv.tv_sec); - addReplyBulkLongLong(c,tv.tv_usec); -} - -/* Convert an amount of bytes into a human readable string in the form - * of 100B, 2G, 100M, 4K, and so forth. */ -void bytesToHuman(char *s, unsigned long long n) { - double d; - - if (n < 1024) { - /* Bytes */ - sprintf(s,"%lluB",n); - return; - } else if (n < (1024*1024)) { - d = (double)n/(1024); - sprintf(s,"%.2fK",d); - } else if (n < (1024LL*1024*1024)) { - d = (double)n/(1024*1024); - sprintf(s,"%.2fM",d); - } else if (n < (1024LL*1024*1024*1024)) { - d = (double)n/(1024LL*1024*1024); - sprintf(s,"%.2fG",d); - } -} - -/* Create the string returned by the INFO command. This is decoupled - * by the INFO command itself as we need to report the same information - * on memory corruption problems. */ -sds genRedisInfoString(char *section) { - sds info = sdsempty(); - time_t uptime = server.unixtime-server.stat_starttime; - int j, numcommands; - struct rusage self_ru, c_ru; - unsigned long lol, bib; - int allsections = 0, defsections = 0; - int sections = 0; - - if (section) { - allsections = strcasecmp(section,"all") == 0; - defsections = strcasecmp(section,"default") == 0; - } - - getrusage(RUSAGE_SELF, &self_ru); - getrusage(RUSAGE_CHILDREN, &c_ru); - getClientsMaxBuffers(&lol,&bib); - - /* Server */ - if (allsections || defsections || !strcasecmp(section,"server")) { - struct utsname name; - - if (sections++) info = sdscat(info,"\r\n"); - uname(&name); - info = sdscatprintf(info, - "# Server\r\n" - "redis_version:%s\r\n" - "redis_git_sha1:%s\r\n" - "redis_git_dirty:%d\r\n" - "os:%s %s %s\r\n" - "arch_bits:%d\r\n" - "multiplexing_api:%s\r\n" - "gcc_version:%d.%d.%d\r\n" - "process_id:%ld\r\n" - "run_id:%s\r\n" - "tcp_port:%d\r\n" - "uptime_in_seconds:%ld\r\n" - "uptime_in_days:%ld\r\n" - "lru_clock:%ld\r\n", - REDIS_VERSION, - redisGitSHA1(), - strtol(redisGitDirty(),NULL,10) > 0, - name.sysname, name.release, name.machine, - server.arch_bits, - aeGetApiName(), -#ifdef __GNUC__ - __GNUC__,__GNUC_MINOR__,__GNUC_PATCHLEVEL__, -#else - 0,0,0, -#endif - (long) getpid(), - server.runid, - server.port, - uptime, - uptime/(3600*24), - (unsigned long) server.lruclock); - } - - /* Clients */ - if (allsections || defsections || !strcasecmp(section,"clients")) { - if (sections++) info = sdscat(info,"\r\n"); - info = sdscatprintf(info, - "# Clients\r\n" - "connected_clients:%lu\r\n" - "client_longest_output_list:%lu\r\n" - "client_biggest_input_buf:%lu\r\n" - "blocked_clients:%d\r\n", - listLength(server.clients)-listLength(server.slaves), - lol, bib, - server.bpop_blocked_clients); - } - - /* Memory */ - if (allsections || defsections || !strcasecmp(section,"memory")) { - char hmem[64]; - char peak_hmem[64]; - - bytesToHuman(hmem,zmalloc_used_memory()); - bytesToHuman(peak_hmem,server.stat_peak_memory); - if (sections++) info = sdscat(info,"\r\n"); - info = sdscatprintf(info, - "# Memory\r\n" - "used_memory:%zu\r\n" - "used_memory_human:%s\r\n" - "used_memory_rss:%zu\r\n" - "used_memory_peak:%zu\r\n" - "used_memory_peak_human:%s\r\n" - "used_memory_lua:%lld\r\n" - "mem_fragmentation_ratio:%.2f\r\n" - "mem_allocator:%s\r\n", - zmalloc_used_memory(), - hmem, - zmalloc_get_rss(), - server.stat_peak_memory, - peak_hmem, - ((long long)lua_gc(server.lua,LUA_GCCOUNT,0))*1024LL, - zmalloc_get_fragmentation_ratio(), - ZMALLOC_LIB - ); - } - - /* Persistence */ - if (allsections || defsections || !strcasecmp(section,"persistence")) { - if (sections++) info = sdscat(info,"\r\n"); - info = sdscatprintf(info, - "# Persistence\r\n" - "loading:%d\r\n" - "rdb_changes_since_last_save:%lld\r\n" - "rdb_bgsave_in_progress:%d\r\n" - "rdb_last_save_time:%ld\r\n" - "rdb_last_bgsave_status:%s\r\n" - "rdb_last_bgsave_time_sec:%ld\r\n" - "rdb_current_bgsave_time_sec:%ld\r\n" - "aof_enabled:%d\r\n" - "aof_rewrite_in_progress:%d\r\n" - "aof_rewrite_scheduled:%d\r\n" - "aof_last_rewrite_time_sec:%ld\r\n" - "aof_current_rewrite_time_sec:%ld\r\n", - server.loading, - server.dirty, - server.rdb_child_pid != -1, - server.lastsave, - server.lastbgsave_status == REDIS_OK ? "ok" : "err", - server.rdb_save_time_last, - (server.rdb_child_pid == -1) ? - -1 : time(NULL)-server.rdb_save_time_start, - server.aof_state != REDIS_AOF_OFF, - server.aof_child_pid != -1, - server.aof_rewrite_scheduled, - server.aof_rewrite_time_last, - (server.aof_child_pid == -1) ? - -1 : time(NULL)-server.aof_rewrite_time_start); - - if (server.aof_state != REDIS_AOF_OFF) { - info = sdscatprintf(info, - "aof_current_size:%lld\r\n" - "aof_base_size:%lld\r\n" - "aof_pending_rewrite:%d\r\n" - "aof_buffer_length:%zu\r\n" - "aof_rewrite_buffer_length:%zu\r\n" - "aof_pending_bio_fsync:%llu\r\n" - "aof_delayed_fsync:%lu\r\n", - (long long) server.aof_current_size, - (long long) server.aof_rewrite_base_size, - server.aof_rewrite_scheduled, - sdslen(server.aof_buf), - aofRewriteBufferSize(), - bioPendingJobsOfType(REDIS_BIO_AOF_FSYNC), - server.aof_delayed_fsync); - } - - if (server.loading) { - double perc; - time_t eta, elapsed; - off_t remaining_bytes = server.loading_total_bytes- - server.loading_loaded_bytes; - - perc = ((double)server.loading_loaded_bytes / - server.loading_total_bytes) * 100; - - elapsed = server.unixtime-server.loading_start_time; - if (elapsed == 0) { - eta = 1; /* A fake 1 second figure if we don't have - enough info */ - } else { - eta = (elapsed*remaining_bytes)/server.loading_loaded_bytes; - } - - info = sdscatprintf(info, - "loading_start_time:%ld\r\n" - "loading_total_bytes:%llu\r\n" - "loading_loaded_bytes:%llu\r\n" - "loading_loaded_perc:%.2f\r\n" - "loading_eta_seconds:%ld\r\n" - ,(unsigned long) server.loading_start_time, - (unsigned long long) server.loading_total_bytes, - (unsigned long long) server.loading_loaded_bytes, - perc, - eta - ); - } - } - - /* Stats */ - if (allsections || defsections || !strcasecmp(section,"stats")) { - if (sections++) info = sdscat(info,"\r\n"); - info = sdscatprintf(info, - "# Stats\r\n" - "total_connections_received:%lld\r\n" - "total_commands_processed:%lld\r\n" - "instantaneous_ops_per_sec:%lld\r\n" - "rejected_connections:%lld\r\n" - "expired_keys:%lld\r\n" - "evicted_keys:%lld\r\n" - "keyspace_hits:%lld\r\n" - "keyspace_misses:%lld\r\n" - "pubsub_channels:%ld\r\n" - "pubsub_patterns:%lu\r\n" - "latest_fork_usec:%lld\r\n", - server.stat_numconnections, - server.stat_numcommands, - getOperationsPerSecond(), - server.stat_rejected_conn, - server.stat_expiredkeys, - server.stat_evictedkeys, - server.stat_keyspace_hits, - server.stat_keyspace_misses, - dictSize(server.pubsub_channels), - listLength(server.pubsub_patterns), - server.stat_fork_time); - } - - /* Replication */ - if (allsections || defsections || !strcasecmp(section,"replication")) { - if (sections++) info = sdscat(info,"\r\n"); - info = sdscatprintf(info, - "# Replication\r\n" - "role:%s\r\n", - server.masterhost == NULL ? "master" : "slave"); - if (server.masterhost) { - info = sdscatprintf(info, - "master_host:%s\r\n" - "master_port:%d\r\n" - "master_link_status:%s\r\n" - "master_last_io_seconds_ago:%d\r\n" - "master_sync_in_progress:%d\r\n" - ,server.masterhost, - server.masterport, - (server.repl_state == REDIS_REPL_CONNECTED) ? - "up" : "down", - server.master ? - ((int)(server.unixtime-server.master->lastinteraction)) : -1, - server.repl_state == REDIS_REPL_TRANSFER - ); - - if (server.repl_state == REDIS_REPL_TRANSFER) { - info = sdscatprintf(info, - "master_sync_left_bytes:%ld\r\n" - "master_sync_last_io_seconds_ago:%d\r\n" - ,(long)server.repl_transfer_left, - (int)(server.unixtime-server.repl_transfer_lastio) - ); - } - - if (server.repl_state != REDIS_REPL_CONNECTED) { - info = sdscatprintf(info, - "master_link_down_since_seconds:%ld\r\n", - (long)server.unixtime-server.repl_down_since); - } - } - info = sdscatprintf(info, - "connected_slaves:%lu\r\n", - listLength(server.slaves)); - if (listLength(server.slaves)) { - int slaveid = 0; - listNode *ln; - listIter li; - - listRewind(server.slaves,&li); - while((ln = listNext(&li))) { - redisClient *slave = listNodeValue(ln); - char *state = NULL; - char ip[32]; - int port; - - if (anetPeerToString(slave->fd,ip,&port) == -1) continue; - switch(slave->replstate) { - case REDIS_REPL_WAIT_BGSAVE_START: - case REDIS_REPL_WAIT_BGSAVE_END: - state = "wait_bgsave"; - break; - case REDIS_REPL_SEND_BULK: - state = "send_bulk"; - break; - case REDIS_REPL_ONLINE: - state = "online"; - break; - } - if (state == NULL) continue; - info = sdscatprintf(info,"slave%d:%s,%d,%s\r\n", - slaveid,ip,slave->slave_listening_port,state); - slaveid++; - } - } - } - - /* CPU */ - if (allsections || defsections || !strcasecmp(section,"cpu")) { - if (sections++) info = sdscat(info,"\r\n"); - info = sdscatprintf(info, - "# CPU\r\n" - "used_cpu_sys:%.2f\r\n" - "used_cpu_user:%.2f\r\n" - "used_cpu_sys_children:%.2f\r\n" - "used_cpu_user_children:%.2f\r\n", - (float)self_ru.ru_stime.tv_sec+(float)self_ru.ru_stime.tv_usec/1000000, - (float)self_ru.ru_utime.tv_sec+(float)self_ru.ru_utime.tv_usec/1000000, - (float)c_ru.ru_stime.tv_sec+(float)c_ru.ru_stime.tv_usec/1000000, - (float)c_ru.ru_utime.tv_sec+(float)c_ru.ru_utime.tv_usec/1000000); - } - - /* cmdtime */ - if (allsections || !strcasecmp(section,"commandstats")) { - if (sections++) info = sdscat(info,"\r\n"); - info = sdscatprintf(info, "# Commandstats\r\n"); - numcommands = sizeof(redisCommandTable)/sizeof(struct redisCommand); - for (j = 0; j < numcommands; j++) { - struct redisCommand *c = redisCommandTable+j; - - if (!c->calls) continue; - info = sdscatprintf(info, - "cmdstat_%s:calls=%lld,usec=%lld,usec_per_call=%.2f\r\n", - c->name, c->calls, c->microseconds, - (c->calls == 0) ? 0 : ((float)c->microseconds/c->calls)); - } - } - - /* Cluster */ - if (allsections || defsections || !strcasecmp(section,"cluster")) { - if (sections++) info = sdscat(info,"\r\n"); - info = sdscatprintf(info, - "# Cluster\r\n" - "cluster_enabled:%d\r\n", - server.cluster_enabled); - } - - /* Key space */ - if (allsections || defsections || !strcasecmp(section,"keyspace")) { - if (sections++) info = sdscat(info,"\r\n"); - info = sdscatprintf(info, "# Keyspace\r\n"); - for (j = 0; j < server.dbnum; j++) { - long long keys, vkeys; - - keys = dictSize(server.db[j].dict); - vkeys = dictSize(server.db[j].expires); - if (keys || vkeys) { - info = sdscatprintf(info, "db%d:keys=%lld,expires=%lld\r\n", - j, keys, vkeys); - } - } - } - return info; -} - -void infoCommand(redisClient *c) { - char *section = c->argc == 2 ? c->argv[1]->ptr : "default"; - - if (c->argc > 2) { - addReply(c,shared.syntaxerr); - return; - } - sds info = genRedisInfoString(section); - addReplySds(c,sdscatprintf(sdsempty(),"$%lu\r\n", - (unsigned long)sdslen(info))); - addReplySds(c,info); - addReply(c,shared.crlf); -} - -void monitorCommand(redisClient *c) { - /* ignore MONITOR if aleady slave or in monitor mode */ - if (c->flags & REDIS_SLAVE) return; - - c->flags |= (REDIS_SLAVE|REDIS_MONITOR); - c->slaveseldb = 0; - listAddNodeTail(server.monitors,c); - addReply(c,shared.ok); -} - -/* ============================ Maxmemory directive ======================== */ - -/* This function gets called when 'maxmemory' is set on the config file to limit - * the max memory used by the server, before processing a command. - * - * The goal of the function is to free enough memory to keep Redis under the - * configured memory limit. - * - * The function starts calculating how many bytes should be freed to keep - * Redis under the limit, and enters a loop selecting the best keys to - * evict accordingly to the configured policy. - * - * If all the bytes needed to return back under the limit were freed the - * function returns REDIS_OK, otherwise REDIS_ERR is returned, and the caller - * should block the execution of commands that will result in more memory - * used by the server. - */ -int freeMemoryIfNeeded(void) { - size_t mem_used, mem_tofree, mem_freed; - int slaves = listLength(server.slaves); - - /* Remove the size of slaves output buffers and AOF buffer from the - * count of used memory. */ - mem_used = zmalloc_used_memory(); - if (slaves) { - listIter li; - listNode *ln; - - listRewind(server.slaves,&li); - while((ln = listNext(&li))) { - redisClient *slave = listNodeValue(ln); - unsigned long obuf_bytes = getClientOutputBufferMemoryUsage(slave); - if (obuf_bytes > mem_used) - mem_used = 0; - else - mem_used -= obuf_bytes; - } - } - if (server.aof_state != REDIS_AOF_OFF) { - mem_used -= sdslen(server.aof_buf); - mem_used -= aofRewriteBufferSize(); - } - - /* Check if we are over the memory limit. */ - if (mem_used <= server.maxmemory) return REDIS_OK; - - if (server.maxmemory_policy == REDIS_MAXMEMORY_NO_EVICTION) - return REDIS_ERR; /* We need to free memory, but policy forbids. */ - - /* Compute how much memory we need to free. */ - mem_tofree = mem_used - server.maxmemory; - mem_freed = 0; - while (mem_freed < mem_tofree) { - int j, k, keys_freed = 0; - - for (j = 0; j < server.dbnum; j++) { - long bestval = 0; /* just to prevent warning */ - sds bestkey = NULL; - struct dictEntry *de; - redisDb *db = server.db+j; - dict *dict; - - if (server.maxmemory_policy == REDIS_MAXMEMORY_ALLKEYS_LRU || - server.maxmemory_policy == REDIS_MAXMEMORY_ALLKEYS_RANDOM) - { - dict = server.db[j].dict; - } else { - dict = server.db[j].expires; - } - if (dictSize(dict) == 0) continue; - - /* volatile-random and allkeys-random policy */ - if (server.maxmemory_policy == REDIS_MAXMEMORY_ALLKEYS_RANDOM || - server.maxmemory_policy == REDIS_MAXMEMORY_VOLATILE_RANDOM) - { - de = dictGetRandomKey(dict); - bestkey = dictGetKey(de); - } - - /* volatile-lru and allkeys-lru policy */ - else if (server.maxmemory_policy == REDIS_MAXMEMORY_ALLKEYS_LRU || - server.maxmemory_policy == REDIS_MAXMEMORY_VOLATILE_LRU) - { - for (k = 0; k < server.maxmemory_samples; k++) { - sds thiskey; - long thisval; - robj *o; - - de = dictGetRandomKey(dict); - thiskey = dictGetKey(de); - /* When policy is volatile-lru we need an additonal lookup - * to locate the real key, as dict is set to db->expires. */ - if (server.maxmemory_policy == REDIS_MAXMEMORY_VOLATILE_LRU) - de = dictFind(db->dict, thiskey); - o = dictGetVal(de); - thisval = estimateObjectIdleTime(o); - - /* Higher idle time is better candidate for deletion */ - if (bestkey == NULL || thisval > bestval) { - bestkey = thiskey; - bestval = thisval; - } - } - } - - /* volatile-ttl */ - else if (server.maxmemory_policy == REDIS_MAXMEMORY_VOLATILE_TTL) { - for (k = 0; k < server.maxmemory_samples; k++) { - sds thiskey; - long thisval; - - de = dictGetRandomKey(dict); - thiskey = dictGetKey(de); - thisval = (long) dictGetVal(de); - - /* Expire sooner (minor expire unix timestamp) is better - * candidate for deletion */ - if (bestkey == NULL || thisval < bestval) { - bestkey = thiskey; - bestval = thisval; - } - } - } - - /* Finally remove the selected key. */ - if (bestkey) { - long long delta; - - robj *keyobj = createStringObject(bestkey,sdslen(bestkey)); - propagateExpire(db,keyobj); - /* We compute the amount of memory freed by dbDelete() alone. - * It is possible that actually the memory needed to propagate - * the DEL in AOF and replication link is greater than the one - * we are freeing removing the key, but we can't account for - * that otherwise we would never exit the loop. - * - * AOF and Output buffer memory will be freed eventually so - * we only care about memory used by the key space. */ - delta = (long long) zmalloc_used_memory(); - dbDelete(db,keyobj); - delta -= (long long) zmalloc_used_memory(); - mem_freed += delta; - server.stat_evictedkeys++; - decrRefCount(keyobj); - keys_freed++; - - /* When the memory to free starts to be big enough, we may - * start spending so much time here that is impossible to - * deliver data to the slaves fast enough, so we force the - * transmission here inside the loop. */ - if (slaves) flushSlavesOutputBuffers(); - } - } - if (!keys_freed) return REDIS_ERR; /* nothing to free... */ - } - return REDIS_OK; -} - -/* =================================== Main! ================================ */ - -#ifdef __linux__ -int linuxOvercommitMemoryValue(void) { - FILE *fp = fopen("/proc/sys/vm/overcommit_memory","r"); - char buf[64]; - - if (!fp) return -1; - if (fgets(buf,64,fp) == NULL) { - fclose(fp); - return -1; - } - fclose(fp); - - return atoi(buf); -} - -void linuxOvercommitMemoryWarning(void) { - if (linuxOvercommitMemoryValue() == 0) { - redisLog(REDIS_WARNING,"WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect."); - } -} -#endif /* __linux__ */ - -void createPidFile(void) { - /* Try to write the pid file in a best-effort way. */ - FILE *fp = fopen(server.pidfile,"w"); - if (fp) { - fprintf(fp,"%d\n",(int)getpid()); - fclose(fp); - } -} - -void daemonize(void) { - int fd; - - if (fork() != 0) exit(0); /* parent exits */ - setsid(); /* create a new session */ - - /* Every output goes to /dev/null. If Redis is daemonized but - * the 'logfile' is set to 'stdout' in the configuration file - * it will not log at all. */ - if ((fd = open("/dev/null", O_RDWR, 0)) != -1) { - dup2(fd, STDIN_FILENO); - dup2(fd, STDOUT_FILENO); - dup2(fd, STDERR_FILENO); - if (fd > STDERR_FILENO) close(fd); - } -} - -void version() { - printf("Redis server v=%s sha=%s:%d malloc=%s bits=%d\n", - REDIS_VERSION, - redisGitSHA1(), - atoi(redisGitDirty()) > 0, - ZMALLOC_LIB, - sizeof(long) == 4 ? 32 : 64); - exit(0); -} - -void usage() { - fprintf(stderr,"Usage: ./redis-server [/path/to/redis.conf] [options]\n"); - fprintf(stderr," ./redis-server - (read config from stdin)\n"); - fprintf(stderr," ./redis-server -v or --version\n"); - fprintf(stderr," ./redis-server -h or --help\n"); - fprintf(stderr," ./redis-server --test-memory \n\n"); - fprintf(stderr,"Examples:\n"); - fprintf(stderr," ./redis-server (run the server with default conf)\n"); - fprintf(stderr," ./redis-server /etc/redis/6379.conf\n"); - fprintf(stderr," ./redis-server --port 7777\n"); - fprintf(stderr," ./redis-server --port 7777 --slaveof 127.0.0.1 8888\n"); - fprintf(stderr," ./redis-server /etc/myredis.conf --loglevel verbose\n"); - exit(1); -} - -void redisAsciiArt(void) { -#include "asciilogo.h" - char *buf = zmalloc(1024*16); - - snprintf(buf,1024*16,ascii_logo, - REDIS_VERSION, - redisGitSHA1(), - strtol(redisGitDirty(),NULL,10) > 0, - (sizeof(long) == 8) ? "64" : "32", - server.cluster_enabled ? "cluster" : "stand alone", - server.port, - (long) getpid() - ); - redisLogRaw(REDIS_NOTICE|REDIS_LOG_RAW,buf); - zfree(buf); -} - -static void sigtermHandler(int sig) { - REDIS_NOTUSED(sig); - - redisLogFromHandler(REDIS_WARNING,"Received SIGTERM, scheduling shutdown..."); - server.shutdown_asap = 1; -} - -void setupSignalHandlers(void) { - struct sigaction act; - - /* When the SA_SIGINFO flag is set in sa_flags then sa_sigaction is used. - * Otherwise, sa_handler is used. */ - sigemptyset(&act.sa_mask); - act.sa_flags = 0; - act.sa_handler = sigtermHandler; - sigaction(SIGTERM, &act, NULL); - -#ifdef HAVE_BACKTRACE - sigemptyset(&act.sa_mask); - act.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO; - act.sa_sigaction = sigsegvHandler; - sigaction(SIGSEGV, &act, NULL); - sigaction(SIGBUS, &act, NULL); - sigaction(SIGFPE, &act, NULL); - sigaction(SIGILL, &act, NULL); -#endif - return; -} - -void memtest(size_t megabytes, int passes); - -int main(int argc, char **argv) { - long long start; - struct timeval tv; - - /* We need to initialize our libraries, and the server configuration. */ - zmalloc_enable_thread_safeness(); - srand(time(NULL)^getpid()); - gettimeofday(&tv,NULL); - dictSetHashFunctionSeed(tv.tv_sec^tv.tv_usec^getpid()); - initServerConfig(); - - if (argc >= 2) { - int j = 1; /* First option to parse in argv[] */ - sds options = sdsempty(); - char *configfile = NULL; - - /* Handle special options --help and --version */ - if (strcmp(argv[1], "-v") == 0 || - strcmp(argv[1], "--version") == 0) version(); - if (strcmp(argv[1], "--help") == 0 || - strcmp(argv[1], "-h") == 0) usage(); - if (strcmp(argv[1], "--test-memory") == 0) { - if (argc == 3) { - memtest(atoi(argv[2]),50); - exit(0); - } else { - fprintf(stderr,"Please specify the amount of memory to test in megabytes.\n"); - fprintf(stderr,"Example: ./redis-server --test-memory 4096\n\n"); - exit(1); - } - } - - /* First argument is the config file name? */ - if (argv[j][0] != '-' || argv[j][1] != '-') - configfile = argv[j++]; - /* All the other options are parsed and conceptually appended to the - * configuration file. For instance --port 6380 will generate the - * string "port 6380\n" to be parsed after the actual file name - * is parsed, if any. */ - while(j != argc) { - if (argv[j][0] == '-' && argv[j][1] == '-') { - /* Option name */ - if (sdslen(options)) options = sdscat(options,"\n"); - options = sdscat(options,argv[j]+2); - options = sdscat(options," "); - } else { - /* Option argument */ - options = sdscatrepr(options,argv[j],strlen(argv[j])); - options = sdscat(options," "); - } - j++; - } - resetServerSaveParams(); - loadServerConfig(configfile,options); - sdsfree(options); - } else { - redisLog(REDIS_WARNING,"Warning: no config file specified, using the default config. In order to specify a config file use 'redis-server /path/to/redis.conf'"); - } - if (server.daemonize) daemonize(); - initServer(); - if (server.daemonize) createPidFile(); - redisAsciiArt(); - redisLog(REDIS_WARNING,"Server started, Redis version " REDIS_VERSION); -#ifdef __linux__ - linuxOvercommitMemoryWarning(); -#endif - start = ustime(); - if (server.aof_state == REDIS_AOF_ON) { - if (loadAppendOnlyFile(server.aof_filename) == REDIS_OK) - redisLog(REDIS_NOTICE,"DB loaded from append only file: %.3f seconds",(float)(ustime()-start)/1000000); - } else { - if (rdbLoad(server.rdb_filename) == REDIS_OK) { - redisLog(REDIS_NOTICE,"DB loaded from disk: %.3f seconds", - (float)(ustime()-start)/1000000); - } else if (errno != ENOENT) { - redisLog(REDIS_WARNING,"Fatal error loading the DB. Exiting."); - exit(1); - } - } - if (server.ipfd > 0) - redisLog(REDIS_NOTICE,"The server is now ready to accept connections on port %d", server.port); - if (server.sofd > 0) - redisLog(REDIS_NOTICE,"The server is now ready to accept connections at %s", server.unixsocket); - aeSetBeforeSleepProc(server.el,beforeSleep); - aeMain(server.el); - aeDeleteEventLoop(server.el); - return 0; -} - -/* The End */ diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/test/test_data.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/test/test_data.py deleted file mode 100644 index 611a55e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/test/test_data.py +++ /dev/null @@ -1,514 +0,0 @@ -# -*- coding: utf-8 - -# -# This file is part of gunicorn released under the MIT license. -# See the NOTICE for more information. - -from __future__ import with_statement - -import errno -import os -import select -import signal -import sys -import time -import traceback - - -from gunicorn.errors import HaltServer -from gunicorn.pidfile import Pidfile -from gunicorn.sock import create_socket -from gunicorn import util - -from gunicorn import __version__, SERVER_SOFTWARE - -class Arbiter(object): - """ - Arbiter maintain the workers processes alive. It launches or - kills them if needed. It also manages application reloading - via SIGHUP/USR2. - """ - - # A flag indicating if a worker failed to - # to boot. If a worker process exist with - # this error code, the arbiter will terminate. - WORKER_BOOT_ERROR = 3 - - START_CTX = {} - - LISTENER = None - WORKERS = {} - PIPE = [] - - # I love dynamic languages - SIG_QUEUE = [] - SIGNALS = map( - lambda x: getattr(signal, "SIG%s" % x), - "HUP QUIT INT TERM TTIN TTOU USR1 USR2 WINCH".split() - ) - SIG_NAMES = dict( - (getattr(signal, name), name[3:].lower()) for name in dir(signal) - if name[:3] == "SIG" and name[3] != "_" - ) - - def __init__(self, app): - os.environ["SERVER_SOFTWARE"] = SERVER_SOFTWARE - - self.setup(app) - - self.pidfile = None - self.worker_age = 0 - self.reexec_pid = 0 - self.master_name = "Master" - - # get current path, try to use PWD env first - try: - a = os.stat(os.environ['PWD']) - b = os.stat(os.getcwd()) - if a.ino == b.ino and a.dev == b.dev: - cwd = os.environ['PWD'] - else: - cwd = os.getcwd() - except: - cwd = os.getcwd() - - args = sys.argv[:] - args.insert(0, sys.executable) - - # init start context - self.START_CTX = { - "args": args, - "cwd": cwd, - 0: sys.executable - } - - def setup(self, app): - self.app = app - self.cfg = app.cfg - self.log = self.cfg.logger_class(app.cfg) - - # reopen files - if 'GUNICORN_FD' in os.environ: - self.log.reopen_files() - - self.address = self.cfg.address - self.num_workers = self.cfg.workers - self.debug = self.cfg.debug - self.timeout = self.cfg.timeout - self.proc_name = self.cfg.proc_name - self.worker_class = self.cfg.worker_class - - if self.cfg.debug: - self.log.debug("Current configuration:") - for config, value in sorted(self.cfg.settings.iteritems()): - self.log.debug(" %s: %s", config, value.value) - - if self.cfg.preload_app: - if not self.cfg.debug: - self.app.wsgi() - else: - self.log.warning("debug mode: app isn't preloaded.") - - def start(self): - """\ - Initialize the arbiter. Start listening and set pidfile if needed. - """ - self.log.info("Starting gunicorn %s", __version__) - self.cfg.on_starting(self) - self.pid = os.getpid() - self.init_signals() - if not self.LISTENER: - self.LISTENER = create_socket(self.cfg, self.log) - - if self.cfg.pidfile is not None: - self.pidfile = Pidfile(self.cfg.pidfile) - self.pidfile.create(self.pid) - self.log.debug("Arbiter booted") - self.log.info("Listening at: %s (%s)", self.LISTENER, - self.pid) - self.log.info("Using worker: %s", - self.cfg.settings['worker_class'].get()) - - self.cfg.when_ready(self) - - def init_signals(self): - """\ - Initialize master signal handling. Most of the signals - are queued. Child signals only wake up the master. - """ - if self.PIPE: - map(os.close, self.PIPE) - self.PIPE = pair = os.pipe() - map(util.set_non_blocking, pair) - map(util.close_on_exec, pair) - self.log.close_on_exec() - map(lambda s: signal.signal(s, self.signal), self.SIGNALS) - signal.signal(signal.SIGCHLD, self.handle_chld) - - def signal(self, sig, frame): - if len(self.SIG_QUEUE) < 5: - self.SIG_QUEUE.append(sig) - self.wakeup() - - def run(self): - "Main master loop." - self.start() - util._setproctitle("master [%s]" % self.proc_name) - - self.manage_workers() - while True: - try: - self.reap_workers() - sig = self.SIG_QUEUE.pop(0) if len(self.SIG_QUEUE) else None - if sig is None: - self.sleep() - self.murder_workers() - self.manage_workers() - continue - - if sig not in self.SIG_NAMES: - self.log.info("Ignoring unknown signal: %s", sig) - continue - - signame = self.SIG_NAMES.get(sig) - handler = getattr(self, "handle_%s" % signame, None) - if not handler: - self.log.error("Unhandled signal: %s", signame) - continue - self.log.info("Handling signal: %s", signame) - handler() - self.wakeup() - except StopIteration: - self.halt() - except KeyboardInterrupt: - self.halt() - except HaltServer, inst: - self.halt(reason=inst.reason, exit_status=inst.exit_status) - except SystemExit: - raise - except Exception: - self.log.info("Unhandled exception in main loop:\n%s", - traceback.format_exc()) - self.stop(False) - if self.pidfile is not None: - self.pidfile.unlink() - sys.exit(-1) - - def handle_chld(self, sig, frame): - "SIGCHLD handling" - self.wakeup() - - def handle_hup(self): - """\ - HUP handling. - - Reload configuration - - Start the new worker processes with a new configuration - - Gracefully shutdown the old worker processes - """ - self.log.info("Hang up: %s", self.master_name) - self.reload() - - def handle_quit(self): - "SIGQUIT handling" - raise StopIteration - - def handle_int(self): - "SIGINT handling" - self.stop(False) - raise StopIteration - - def handle_term(self): - "SIGTERM handling" - self.stop(False) - raise StopIteration - - def handle_ttin(self): - """\ - SIGTTIN handling. - Increases the number of workers by one. - """ - self.num_workers += 1 - self.manage_workers() - - def handle_ttou(self): - """\ - SIGTTOU handling. - Decreases the number of workers by one. - """ - if self.num_workers <= 1: - return - self.num_workers -= 1 - self.manage_workers() - - def handle_usr1(self): - """\ - SIGUSR1 handling. - Kill all workers by sending them a SIGUSR1 - """ - self.kill_workers(signal.SIGUSR1) - self.log.reopen_files() - - def handle_usr2(self): - """\ - SIGUSR2 handling. - Creates a new master/worker set as a slave of the current - master without affecting old workers. Use this to do live - deployment with the ability to backout a change. - """ - self.reexec() - - def handle_winch(self): - "SIGWINCH handling" - if os.getppid() == 1 or os.getpgrp() != os.getpid(): - self.log.info("graceful stop of workers") - self.num_workers = 0 - self.kill_workers(signal.SIGQUIT) - else: - self.log.info("SIGWINCH ignored. Not daemonized") - - def wakeup(self): - """\ - Wake up the arbiter by writing to the PIPE - """ - try: - os.write(self.PIPE[1], '.') - except IOError, e: - if e.errno not in [errno.EAGAIN, errno.EINTR]: - raise - - def halt(self, reason=None, exit_status=0): - """ halt arbiter """ - self.stop() - self.log.info("Shutting down: %s", self.master_name) - if reason is not None: - self.log.info("Reason: %s", reason) - if self.pidfile is not None: - self.pidfile.unlink() - sys.exit(exit_status) - - def sleep(self): - """\ - Sleep until PIPE is readable or we timeout. - A readable PIPE means a signal occurred. - """ - try: - ready = select.select([self.PIPE[0]], [], [], 1.0) - if not ready[0]: - return - while os.read(self.PIPE[0], 1): - pass - except select.error, e: - if e[0] not in [errno.EAGAIN, errno.EINTR]: - raise - except OSError, e: - if e.errno not in [errno.EAGAIN, errno.EINTR]: - raise - except KeyboardInterrupt: - sys.exit() - - - def stop(self, graceful=True): - """\ - Stop workers - - :attr graceful: boolean, If True (the default) workers will be - killed gracefully (ie. trying to wait for the current connection) - """ - try: - self.LISTENER.close() - except Exception: - pass - self.LISTENER = None - sig = signal.SIGQUIT - if not graceful: - sig = signal.SIGTERM - limit = time.time() + self.cfg.graceful_timeout - while self.WORKERS and time.time() < limit: - self.kill_workers(sig) - time.sleep(0.1) - self.reap_workers() - self.kill_workers(signal.SIGKILL) - - def reexec(self): - """\ - Relaunch the master and workers. - """ - if self.pidfile is not None: - self.pidfile.rename("%s.oldbin" % self.pidfile.fname) - - self.reexec_pid = os.fork() - if self.reexec_pid != 0: - self.master_name = "Old Master" - return - - os.environ['GUNICORN_FD'] = str(self.LISTENER.fileno()) - os.chdir(self.START_CTX['cwd']) - self.cfg.pre_exec(self) - util.closerange(3, self.LISTENER.fileno()) - util.closerange(self.LISTENER.fileno()+1, util.get_maxfd()) - os.execvpe(self.START_CTX[0], self.START_CTX['args'], os.environ) - - def reload(self): - old_address = self.cfg.address - - # reload conf - self.app.reload() - self.setup(self.app) - - # reopen log files - self.log.reopen_files() - - # do we need to change listener ? - if old_address != self.cfg.address: - self.LISTENER.close() - self.LISTENER = create_socket(self.cfg, self.log) - self.log.info("Listening at: %s", self.LISTENER) - - # do some actions on reload - self.cfg.on_reload(self) - - # unlink pidfile - if self.pidfile is not None: - self.pidfile.unlink() - - # create new pidfile - if self.cfg.pidfile is not None: - self.pidfile = Pidfile(self.cfg.pidfile) - self.pidfile.create(self.pid) - - # set new proc_name - util._setproctitle("master [%s]" % self.proc_name) - - # spawn new workers - for i in range(self.cfg.workers): - self.spawn_worker() - - # manage workers - self.manage_workers() - - def murder_workers(self): - """\ - Kill unused/idle workers - """ - for (pid, worker) in self.WORKERS.items(): - try: - if time.time() - worker.tmp.last_update() <= self.timeout: - continue - except ValueError: - continue - - self.log.critical("WORKER TIMEOUT (pid:%s)", pid) - self.kill_worker(pid, signal.SIGKILL) - - def reap_workers(self): - """\ - Reap workers to avoid zombie processes - """ - try: - while True: - wpid, status = os.waitpid(-1, os.WNOHANG) - if not wpid: - break - if self.reexec_pid == wpid: - self.reexec_pid = 0 - else: - # A worker said it cannot boot. We'll shutdown - # to avoid infinite start/stop cycles. - exitcode = status >> 8 - if exitcode == self.WORKER_BOOT_ERROR: - reason = "Worker failed to boot." - raise HaltServer(reason, self.WORKER_BOOT_ERROR) - worker = self.WORKERS.pop(wpid, None) - if not worker: - continue - worker.tmp.close() - except OSError, e: - if e.errno == errno.ECHILD: - pass - - def manage_workers(self): - """\ - Maintain the number of workers by spawning or killing - as required. - """ - if len(self.WORKERS.keys()) < self.num_workers: - self.spawn_workers() - - workers = self.WORKERS.items() - workers.sort(key=lambda w: w[1].age) - while len(workers) > self.num_workers: - (pid, _) = workers.pop(0) - self.kill_worker(pid, signal.SIGQUIT) - - def spawn_worker(self): - self.worker_age += 1 - worker = self.worker_class(self.worker_age, self.pid, self.LISTENER, - self.app, self.timeout/2.0, - self.cfg, self.log) - self.cfg.pre_fork(self, worker) - pid = os.fork() - if pid != 0: - self.WORKERS[pid] = worker - return pid - - # Process Child - worker_pid = os.getpid() - try: - util._setproctitle("worker [%s]" % self.proc_name) - self.log.info("Booting worker with pid: %s", worker_pid) - self.cfg.post_fork(self, worker) - worker.init_process() - sys.exit(0) - except SystemExit: - raise - except: - self.log.debug("Exception in worker process:\n%s", - traceback.format_exc()) - if not worker.booted: - sys.exit(self.WORKER_BOOT_ERROR) - sys.exit(-1) - finally: - self.log.info("Worker exiting (pid: %s)", worker_pid) - try: - worker.tmp.close() - self.cfg.worker_exit(self, worker) - except: - pass - - def spawn_workers(self): - """\ - Spawn new workers as needed. - - This is where a worker process leaves the main loop - of the master process. - """ - - for i in range(self.num_workers - len(self.WORKERS.keys())): - self.spawn_worker() - - def kill_workers(self, sig): - """\ - Kill all workers with the signal `sig` - :attr sig: `signal.SIG*` value - """ - for pid in self.WORKERS.keys(): - self.kill_worker(pid, sig) - - def kill_worker(self, pid, sig): - """\ - Kill a worker - - :attr pid: int, worker pid - :attr sig: `signal.SIG*` value - """ - try: - os.kill(pid, sig) - except OSError, e: - if e.errno == errno.ESRCH: - try: - worker = self.WORKERS.pop(pid) - worker.tmp.close() - self.cfg.worker_exit(self, worker) - return - except (KeyError, OSError): - return - raise diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/test/test_data_generated b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/test/test_data_generated deleted file mode 100644 index a162bc8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/test/test_data_generated +++ /dev/null @@ -1,2582 +0,0 @@ -
/*
- * Copyright (c) 2009-2010, Salvatore Sanfilippo <antirez at gmail dot com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- *   * Redistributions of source code must retain the above copyright notice,
- *     this list of conditions and the following disclaimer.
- *   * Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *   * Neither the name of Redis nor the names of its contributors may be used
- *     to endorse or promote products derived from this software without
- *     specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "redis.h"
-#include "slowlog.h"
-#include "bio.h"
-
-#include <time.h>
-#include <signal.h>
-#include <sys/wait.h>
-#include <errno.h>
-#include <assert.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include <arpa/inet.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-#include <sys/uio.h>
-#include <limits.h>
-#include <float.h>
-#include <math.h>
-#include <sys/resource.h>
-#include <sys/utsname.h>
-
-/* Our shared "common" objects */
-
-struct sharedObjectsStruct shared;
-
-/* Global vars that are actually used as constants. The following double
- * values are used for double on-disk serialization, and are initialized
- * at runtime to avoid strange compiler optimizations. */
-
-double R_Zero, R_PosInf, R_NegInf, R_Nan;
-
-/*================================= Globals ================================= */
-
-/* Global vars */
-struct redisServer server; /* server global state */
-struct redisCommand *commandTable;
-
-/* Our command table.
- *
- * Every entry is composed of the following fields:
- *
- * name: a string representing the command name.
- * function: pointer to the C function implementing the command.
- * arity: number of arguments, it is possible to use -N to say >= N
- * sflags: command flags as string. See below for a table of flags.
- * flags: flags as bitmask. Computed by Redis using the 'sflags' field.
- * get_keys_proc: an optional function to get key arguments from a command.
- *                This is only used when the following three fields are not
- *                enough to specify what arguments are keys.
- * first_key_index: first argument that is a key
- * last_key_index: last argument that is a key
- * key_step: step to get all the keys from first to last argument. For instance
- *           in MSET the step is two since arguments are key,val,key,val,...
- * microseconds: microseconds of total execution time for this command.
- * calls: total number of calls of this command.
- *
- * The flags, microseconds and calls fields are computed by Redis and should
- * always be set to zero.
- *
- * Command flags are expressed using strings where every character represents
- * a flag. Later the populateCommandTable() function will take care of
- * populating the real 'flags' field using this characters.
- *
- * This is the meaning of the flags:
- *
- * w: write command (may modify the key space).
- * r: read command  (will never modify the key space).
- * m: may increase memory usage once called. Don't allow if out of memory.
- * a: admin command, like SAVE or SHUTDOWN.
- * p: Pub/Sub related command.
- * f: force replication of this command, regarless of server.dirty.
- * s: command not allowed in scripts.
- * R: random command. Command is not deterministic, that is, the same command
- *    with the same arguments, with the same key space, may have different
- *    results. For instance SPOP and RANDOMKEY are two random commands.
- * S: Sort command output array if called from script, so that the output
- *    is deterministic.
- */
-struct redisCommand redisCommandTable[] = {
-    {"get",getCommand,2,"r",0,NULL,1,1,1,0,0},
-    {"set",setCommand,3,"wm",0,noPreloadGetKeys,1,1,1,0,0},
-    {"setnx",setnxCommand,3,"wm",0,noPreloadGetKeys,1,1,1,0,0},
-    {"setex",setexCommand,4,"wm",0,noPreloadGetKeys,1,1,1,0,0},
-    {"psetex",psetexCommand,4,"wm",0,noPreloadGetKeys,1,1,1,0,0},
-    {"append",appendCommand,3,"wm",0,NULL,1,1,1,0,0},
-    {"strlen",strlenCommand,2,"r",0,NULL,1,1,1,0,0},
-    {"del",delCommand,-2,"w",0,noPreloadGetKeys,1,-1,1,0,0},
-    {"exists",existsCommand,2,"r",0,NULL,1,1,1,0,0},
-    {"setbit",setbitCommand,4,"wm",0,NULL,1,1,1,0,0},
-    {"getbit",getbitCommand,3,"r",0,NULL,1,1,1,0,0},
-    {"setrange",setrangeCommand,4,"wm",0,NULL,1,1,1,0,0},
-    {"getrange",getrangeCommand,4,"r",0,NULL,1,1,1,0,0},
-    {"substr",getrangeCommand,4,"r",0,NULL,1,1,1,0,0},
-    {"incr",incrCommand,2,"wm",0,NULL,1,1,1,0,0},
-    {"decr",decrCommand,2,"wm",0,NULL,1,1,1,0,0},
-    {"mget",mgetCommand,-2,"r",0,NULL,1,-1,1,0,0},
-    {"rpush",rpushCommand,-3,"wm",0,NULL,1,1,1,0,0},
-    {"lpush",lpushCommand,-3,"wm",0,NULL,1,1,1,0,0},
-    {"rpushx",rpushxCommand,3,"wm",0,NULL,1,1,1,0,0},
-    {"lpushx",lpushxCommand,3,"wm",0,NULL,1,1,1,0,0},
-    {"linsert",linsertCommand,5,"wm",0,NULL,1,1,1,0,0},
-    {"rpop",rpopCommand,2,"w",0,NULL,1,1,1,0,0},
-    {"lpop",lpopCommand,2,"w",0,NULL,1,1,1,0,0},
-    {"brpop",brpopCommand,-3,"ws",0,NULL,1,1,1,0,0},
-    {"brpoplpush",brpoplpushCommand,4,"wms",0,NULL,1,2,1,0,0},
-    {"blpop",blpopCommand,-3,"ws",0,NULL,1,-2,1,0,0},
-    {"llen",llenCommand,2,"r",0,NULL,1,1,1,0,0},
-    {"lindex",lindexCommand,3,"r",0,NULL,1,1,1,0,0},
-    {"lset",lsetCommand,4,"wm",0,NULL,1,1,1,0,0},
-    {"lrange",lrangeCommand,4,"r",0,NULL,1,1,1,0,0},
-    {"ltrim",ltrimCommand,4,"w",0,NULL,1,1,1,0,0},
-    {"lrem",lremCommand,4,"w",0,NULL,1,1,1,0,0},
-    {"rpoplpush",rpoplpushCommand,3,"wm",0,NULL,1,2,1,0,0},
-    {"sadd",saddCommand,-3,"wm",0,NULL,1,1,1,0,0},
-    {"srem",sremCommand,-3,"w",0,NULL,1,1,1,0,0},
-    {"smove",smoveCommand,4,"w",0,NULL,1,2,1,0,0},
-    {"sismember",sismemberCommand,3,"r",0,NULL,1,1,1,0,0},
-    {"scard",scardCommand,2,"r",0,NULL,1,1,1,0,0},
-    {"spop",spopCommand,2,"wRs",0,NULL,1,1,1,0,0},
-    {"srandmember",srandmemberCommand,2,"rR",0,NULL,1,1,1,0,0},
-    {"sinter",sinterCommand,-2,"rS",0,NULL,1,-1,1,0,0},
-    {"sinterstore",sinterstoreCommand,-3,"wm",0,NULL,1,-1,1,0,0},
-    {"sunion",sunionCommand,-2,"rS",0,NULL,1,-1,1,0,0},
-    {"sunionstore",sunionstoreCommand,-3,"wm",0,NULL,1,-1,1,0,0},
-    {"sdiff",sdiffCommand,-2,"rS",0,NULL,1,-1,1,0,0},
-    {"sdiffstore",sdiffstoreCommand,-3,"wm",0,NULL,1,-1,1,0,0},
-    {"smembers",sinterCommand,2,"rS",0,NULL,1,1,1,0,0},
-    {"zadd",zaddCommand,-4,"wm",0,NULL,1,1,1,0,0},
-    {"zincrby",zincrbyCommand,4,"wm",0,NULL,1,1,1,0,0},
-    {"zrem",zremCommand,-3,"w",0,NULL,1,1,1,0,0},
-    {"zremrangebyscore",zremrangebyscoreCommand,4,"w",0,NULL,1,1,1,0,0},
-    {"zremrangebyrank",zremrangebyrankCommand,4,"w",0,NULL,1,1,1,0,0},
-    {"zunionstore",zunionstoreCommand,-4,"wm",0,zunionInterGetKeys,0,0,0,0,0},
-    {"zinterstore",zinterstoreCommand,-4,"wm",0,zunionInterGetKeys,0,0,0,0,0},
-    {"zrange",zrangeCommand,-4,"r",0,NULL,1,1,1,0,0},
-    {"zrangebyscore",zrangebyscoreCommand,-4,"r",0,NULL,1,1,1,0,0},
-    {"zrevrangebyscore",zrevrangebyscoreCommand,-4,"r",0,NULL,1,1,1,0,0},
-    {"zcount",zcountCommand,4,"r",0,NULL,1,1,1,0,0},
-    {"zrevrange",zrevrangeCommand,-4,"r",0,NULL,1,1,1,0,0},
-    {"zcard",zcardCommand,2,"r",0,NULL,1,1,1,0,0},
-    {"zscore",zscoreCommand,3,"r",0,NULL,1,1,1,0,0},
-    {"zrank",zrankCommand,3,"r",0,NULL,1,1,1,0,0},
-    {"zrevrank",zrevrankCommand,3,"r",0,NULL,1,1,1,0,0},
-    {"hset",hsetCommand,4,"wm",0,NULL,1,1,1,0,0},
-    {"hsetnx",hsetnxCommand,4,"wm",0,NULL,1,1,1,0,0},
-    {"hget",hgetCommand,3,"r",0,NULL,1,1,1,0,0},
-    {"hmset",hmsetCommand,-4,"wm",0,NULL,1,1,1,0,0},
-    {"hmget",hmgetCommand,-3,"r",0,NULL,1,1,1,0,0},
-    {"hincrby",hincrbyCommand,4,"wm",0,NULL,1,1,1,0,0},
-    {"hincrbyfloat",hincrbyfloatCommand,4,"wm",0,NULL,1,1,1,0,0},
-    {"hdel",hdelCommand,-3,"w",0,NULL,1,1,1,0,0},
-    {"hlen",hlenCommand,2,"r",0,NULL,1,1,1,0,0},
-    {"hkeys",hkeysCommand,2,"rS",0,NULL,1,1,1,0,0},
-    {"hvals",hvalsCommand,2,"rS",0,NULL,1,1,1,0,0},
-    {"hgetall",hgetallCommand,2,"r",0,NULL,1,1,1,0,0},
-    {"hexists",hexistsCommand,3,"r",0,NULL,1,1,1,0,0},
-    {"incrby",incrbyCommand,3,"wm",0,NULL,1,1,1,0,0},
-    {"decrby",decrbyCommand,3,"wm",0,NULL,1,1,1,0,0},
-    {"incrbyfloat",incrbyfloatCommand,3,"wm",0,NULL,1,1,1,0,0},
-    {"getset",getsetCommand,3,"wm",0,NULL,1,1,1,0,0},
-    {"mset",msetCommand,-3,"wm",0,NULL,1,-1,2,0,0},
-    {"msetnx",msetnxCommand,-3,"wm",0,NULL,1,-1,2,0,0},
-    {"randomkey",randomkeyCommand,1,"rR",0,NULL,0,0,0,0,0},
-    {"select",selectCommand,2,"r",0,NULL,0,0,0,0,0},
-    {"move",moveCommand,3,"w",0,NULL,1,1,1,0,0},
-    {"rename",renameCommand,3,"w",0,renameGetKeys,1,2,1,0,0},
-    {"renamenx",renamenxCommand,3,"w",0,renameGetKeys,1,2,1,0,0},
-    {"expire",expireCommand,3,"w",0,NULL,1,1,1,0,0},
-    {"expireat",expireatCommand,3,"w",0,NULL,1,1,1,0,0},
-    {"pexpire",pexpireCommand,3,"w",0,NULL,1,1,1,0,0},
-    {"pexpireat",pexpireatCommand,3,"w",0,NULL,1,1,1,0,0},
-    {"keys",keysCommand,2,"rS",0,NULL,0,0,0,0,0},
-    {"dbsize",dbsizeCommand,1,"r",0,NULL,0,0,0,0,0},
-    {"auth",authCommand,2,"rs",0,NULL,0,0,0,0,0},
-    {"ping",pingCommand,1,"r",0,NULL,0,0,0,0,0},
-    {"echo",echoCommand,2,"r",0,NULL,0,0,0,0,0},
-    {"save",saveCommand,1,"ars",0,NULL,0,0,0,0,0},
-    {"bgsave",bgsaveCommand,1,"ar",0,NULL,0,0,0,0,0},
-    {"bgrewriteaof",bgrewriteaofCommand,1,"ar",0,NULL,0,0,0,0,0},
-    {"shutdown",shutdownCommand,-1,"ar",0,NULL,0,0,0,0,0},
-    {"lastsave",lastsaveCommand,1,"r",0,NULL,0,0,0,0,0},
-    {"type",typeCommand,2,"r",0,NULL,1,1,1,0,0},
-    {"multi",multiCommand,1,"rs",0,NULL,0,0,0,0,0},
-    {"exec",execCommand,1,"s",0,NULL,0,0,0,0,0},
-    {"discard",discardCommand,1,"rs",0,NULL,0,0,0,0,0},
-    {"sync",syncCommand,1,"ars",0,NULL,0,0,0,0,0},
-    {"replconf",replconfCommand,-1,"ars",0,NULL,0,0,0,0,0},
-    {"flushdb",flushdbCommand,1,"w",0,NULL,0,0,0,0,0},
-    {"flushall",flushallCommand,1,"w",0,NULL,0,0,0,0,0},
-    {"sort",sortCommand,-2,"wmS",0,NULL,1,1,1,0,0},
-    {"info",infoCommand,-1,"r",0,NULL,0,0,0,0,0},
-    {"monitor",monitorCommand,1,"ars",0,NULL,0,0,0,0,0},
-    {"ttl",ttlCommand,2,"r",0,NULL,1,1,1,0,0},
-    {"pttl",pttlCommand,2,"r",0,NULL,1,1,1,0,0},
-    {"persist",persistCommand,2,"w",0,NULL,1,1,1,0,0},
-    {"slaveof",slaveofCommand,3,"as",0,NULL,0,0,0,0,0},
-    {"debug",debugCommand,-2,"as",0,NULL,0,0,0,0,0},
-    {"config",configCommand,-2,"ar",0,NULL,0,0,0,0,0},
-    {"subscribe",subscribeCommand,-2,"rps",0,NULL,0,0,0,0,0},
-    {"unsubscribe",unsubscribeCommand,-1,"rps",0,NULL,0,0,0,0,0},
-    {"psubscribe",psubscribeCommand,-2,"rps",0,NULL,0,0,0,0,0},
-    {"punsubscribe",punsubscribeCommand,-1,"rps",0,NULL,0,0,0,0,0},
-    {"publish",publishCommand,3,"pf",0,NULL,0,0,0,0,0},
-    {"watch",watchCommand,-2,"rs",0,noPreloadGetKeys,1,-1,1,0,0},
-    {"unwatch",unwatchCommand,1,"rs",0,NULL,0,0,0,0,0},
-    {"cluster",clusterCommand,-2,"ar",0,NULL,0,0,0,0,0},
-    {"restore",restoreCommand,4,"awm",0,NULL,1,1,1,0,0},
-    {"migrate",migrateCommand,6,"aw",0,NULL,0,0,0,0,0},
-    {"asking",askingCommand,1,"r",0,NULL,0,0,0,0,0},
-    {"dump",dumpCommand,2,"ar",0,NULL,1,1,1,0,0},
-    {"object",objectCommand,-2,"r",0,NULL,2,2,2,0,0},
-    {"client",clientCommand,-2,"ar",0,NULL,0,0,0,0,0},
-    {"eval",evalCommand,-3,"s",0,zunionInterGetKeys,0,0,0,0,0},
-    {"evalsha",evalShaCommand,-3,"s",0,zunionInterGetKeys,0,0,0,0,0},
-    {"slowlog",slowlogCommand,-2,"r",0,NULL,0,0,0,0,0},
-    {"script",scriptCommand,-2,"ras",0,NULL,0,0,0,0,0},
-    {"time",timeCommand,1,"rR",0,NULL,0,0,0,0,0},
-    {"bitop",bitopCommand,-4,"wm",0,NULL,2,-1,1,0,0},
-    {"bitcount",bitcountCommand,-2,"r",0,NULL,1,1,1,0,0}
-};
-
-/*============================ Utility functions ============================ */
-
-/* Low level logging. To use only for very big messages, otherwise
- * redisLog() is to prefer. */
-void redisLogRaw(int level, const char *msg) {
-    const int syslogLevelMap[] = { LOG_DEBUG, LOG_INFO, LOG_NOTICE, LOG_WARNING };
-    const char *c = ".-*#";
-    FILE *fp;
-    char buf[64];
-    int rawmode = (level & REDIS_LOG_RAW);
-
-    level &= 0xff; /* clear flags */
-    if (level < server.verbosity) return;
-
-    fp = (server.logfile == NULL) ? stdout : fopen(server.logfile,"a");
-    if (!fp) return;
-
-    if (rawmode) {
-        fprintf(fp,"%s",msg);
-    } else {
-        int off;
-        struct timeval tv;
-
-        gettimeofday(&tv,NULL);
-        off = strftime(buf,sizeof(buf),"%d %b %H:%M:%S.",localtime(&tv.tv_sec));
-        snprintf(buf+off,sizeof(buf)-off,"%03d",(int)tv.tv_usec/1000);
-        fprintf(fp,"[%d] %s %c %s\n",(int)getpid(),buf,c[level],msg);
-    }
-    fflush(fp);
-
-    if (server.logfile) fclose(fp);
-
-    if (server.syslog_enabled) syslog(syslogLevelMap[level], "%s", msg);
-}
-
-/* Like redisLogRaw() but with printf-alike support. This is the funciton that
- * is used across the code. The raw version is only used in order to dump
- * the INFO output on crash. */
-void redisLog(int level, const char *fmt, ...) {
-    va_list ap;
-    char msg[REDIS_MAX_LOGMSG_LEN];
-
-    if ((level&0xff) < server.verbosity) return;
-
-    va_start(ap, fmt);
-    vsnprintf(msg, sizeof(msg), fmt, ap);
-    va_end(ap);
-
-    redisLogRaw(level,msg);
-}
-
-/* Log a fixed message without printf-alike capabilities, in a way that is
- * safe to call from a signal handler.
- *
- * We actually use this only for signals that are not fatal from the point
- * of view of Redis. Signals that are going to kill the server anyway and
- * where we need printf-alike features are served by redisLog(). */
-void redisLogFromHandler(int level, const char *msg) {
-    int fd;
-    char buf[64];
-
-    if ((level&0xff) < server.verbosity ||
-        (server.logfile == NULL && server.daemonize)) return;
-    fd = server.logfile ?
-        open(server.logfile, O_APPEND|O_CREAT|O_WRONLY, 0644) :
-        STDOUT_FILENO;
-    if (fd == -1) return;
-    ll2string(buf,sizeof(buf),getpid());
-    if (write(fd,"[",1) == -1) goto err;
-    if (write(fd,buf,strlen(buf)) == -1) goto err;
-    if (write(fd," | signal handler] (",20) == -1) goto err;
-    ll2string(buf,sizeof(buf),time(NULL));
-    if (write(fd,buf,strlen(buf)) == -1) goto err;
-    if (write(fd,") ",2) == -1) goto err;
-    if (write(fd,msg,strlen(msg)) == -1) goto err;
-    if (write(fd,"\n",1) == -1) goto err;
-err:
-    if (server.logfile) close(fd);
-}
-
-/* Redis generally does not try to recover from out of memory conditions
- * when allocating objects or strings, it is not clear if it will be possible
- * to report this condition to the client since the networking layer itself
- * is based on heap allocation for send buffers, so we simply abort.
- * At least the code will be simpler to read... */
-void oom(const char *msg) {
-    redisLog(REDIS_WARNING, "%s: Out of memory\n",msg);
-    sleep(1);
-    abort();
-}
-
-/* Return the UNIX time in microseconds */
-long long ustime(void) {
-    struct timeval tv;
-    long long ust;
-
-    gettimeofday(&tv, NULL);
-    ust = ((long long)tv.tv_sec)*1000000;
-    ust += tv.tv_usec;
-    return ust;
-}
-
-/* Return the UNIX time in milliseconds */
-long long mstime(void) {
-    return ustime()/1000;
-}
-
-/* After an RDB dump or AOF rewrite we exit from children using _exit() instead of
- * exit(), because the latter may interact with the same file objects used by
- * the parent process. However if we are testing the coverage normal exit() is
- * used in order to obtain the right coverage information. */
-void exitFromChild(int retcode) {
-#ifdef COVERAGE_TEST
-    exit(retcode);
-#else
-    _exit(retcode);
-#endif
-}
-
-/*====================== Hash table type implementation  ==================== */
-
-/* This is an hash table type that uses the SDS dynamic strings libary as
- * keys and radis objects as values (objects can hold SDS strings,
- * lists, sets). */
-
-void dictVanillaFree(void *privdata, void *val)
-{
-    DICT_NOTUSED(privdata);
-    zfree(val);
-}
-
-void dictListDestructor(void *privdata, void *val)
-{
-    DICT_NOTUSED(privdata);
-    listRelease((list*)val);
-}
-
-int dictSdsKeyCompare(void *privdata, const void *key1,
-        const void *key2)
-{
-    int l1,l2;
-    DICT_NOTUSED(privdata);
-
-    l1 = sdslen((sds)key1);
-    l2 = sdslen((sds)key2);
-    if (l1 != l2) return 0;
-    return memcmp(key1, key2, l1) == 0;
-}
-
-/* A case insensitive version used for the command lookup table. */
-int dictSdsKeyCaseCompare(void *privdata, const void *key1,
-        const void *key2)
-{
-    DICT_NOTUSED(privdata);
-
-    return strcasecmp(key1, key2) == 0;
-}
-
-void dictRedisObjectDestructor(void *privdata, void *val)
-{
-    DICT_NOTUSED(privdata);
-
-    if (val == NULL) return; /* Values of swapped out keys as set to NULL */
-    decrRefCount(val);
-}
-
-void dictSdsDestructor(void *privdata, void *val)
-{
-    DICT_NOTUSED(privdata);
-
-    sdsfree(val);
-}
-
-int dictObjKeyCompare(void *privdata, const void *key1,
-        const void *key2)
-{
-    const robj *o1 = key1, *o2 = key2;
-    return dictSdsKeyCompare(privdata,o1->ptr,o2->ptr);
-}
-
-unsigned int dictObjHash(const void *key) {
-    const robj *o = key;
-    return dictGenHashFunction(o->ptr, sdslen((sds)o->ptr));
-}
-
-unsigned int dictSdsHash(const void *key) {
-    return dictGenHashFunction((unsigned char*)key, sdslen((char*)key));
-}
-
-unsigned int dictSdsCaseHash(const void *key) {
-    return dictGenCaseHashFunction((unsigned char*)key, sdslen((char*)key));
-}
-
-int dictEncObjKeyCompare(void *privdata, const void *key1,
-        const void *key2)
-{
-    robj *o1 = (robj*) key1, *o2 = (robj*) key2;
-    int cmp;
-
-    if (o1->encoding == REDIS_ENCODING_INT &&
-        o2->encoding == REDIS_ENCODING_INT)
-            return o1->ptr == o2->ptr;
-
-    o1 = getDecodedObject(o1);
-    o2 = getDecodedObject(o2);
-    cmp = dictSdsKeyCompare(privdata,o1->ptr,o2->ptr);
-    decrRefCount(o1);
-    decrRefCount(o2);
-    return cmp;
-}
-
-unsigned int dictEncObjHash(const void *key) {
-    robj *o = (robj*) key;
-
-    if (o->encoding == REDIS_ENCODING_RAW) {
-        return dictGenHashFunction(o->ptr, sdslen((sds)o->ptr));
-    } else {
-        if (o->encoding == REDIS_ENCODING_INT) {
-            char buf[32];
-            int len;
-
-            len = ll2string(buf,32,(long)o->ptr);
-            return dictGenHashFunction((unsigned char*)buf, len);
-        } else {
-            unsigned int hash;
-
-            o = getDecodedObject(o);
-            hash = dictGenHashFunction(o->ptr, sdslen((sds)o->ptr));
-            decrRefCount(o);
-            return hash;
-        }
-    }
-}
-
-/* Sets type hash table */
-dictType setDictType = {
-    dictEncObjHash,            /* hash function */
-    NULL,                      /* key dup */
-    NULL,                      /* val dup */
-    dictEncObjKeyCompare,      /* key compare */
-    dictRedisObjectDestructor, /* key destructor */
-    NULL                       /* val destructor */
-};
-
-/* Sorted sets hash (note: a skiplist is used in addition to the hash table) */
-dictType zsetDictType = {
-    dictEncObjHash,            /* hash function */
-    NULL,                      /* key dup */
-    NULL,                      /* val dup */
-    dictEncObjKeyCompare,      /* key compare */
-    dictRedisObjectDestructor, /* key destructor */
-    NULL                       /* val destructor */
-};
-
-/* Db->dict, keys are sds strings, vals are Redis objects. */
-dictType dbDictType = {
-    dictSdsHash,                /* hash function */
-    NULL,                       /* key dup */
-    NULL,                       /* val dup */
-    dictSdsKeyCompare,          /* key compare */
-    dictSdsDestructor,          /* key destructor */
-    dictRedisObjectDestructor   /* val destructor */
-};
-
-/* Db->expires */
-dictType keyptrDictType = {
-    dictSdsHash,               /* hash function */
-    NULL,                      /* key dup */
-    NULL,                      /* val dup */
-    dictSdsKeyCompare,         /* key compare */
-    NULL,                      /* key destructor */
-    NULL                       /* val destructor */
-};
-
-/* Command table. sds string -> command struct pointer. */
-dictType commandTableDictType = {
-    dictSdsCaseHash,           /* hash function */
-    NULL,                      /* key dup */
-    NULL,                      /* val dup */
-    dictSdsKeyCaseCompare,     /* key compare */
-    dictSdsDestructor,         /* key destructor */
-    NULL                       /* val destructor */
-};
-
-/* Hash type hash table (note that small hashes are represented with zimpaps) */
-dictType hashDictType = {
-    dictEncObjHash,             /* hash function */
-    NULL,                       /* key dup */
-    NULL,                       /* val dup */
-    dictEncObjKeyCompare,       /* key compare */
-    dictRedisObjectDestructor,  /* key destructor */
-    dictRedisObjectDestructor   /* val destructor */
-};
-
-/* Keylist hash table type has unencoded redis objects as keys and
- * lists as values. It's used for blocking operations (BLPOP) and to
- * map swapped keys to a list of clients waiting for this keys to be loaded. */
-dictType keylistDictType = {
-    dictObjHash,                /* hash function */
-    NULL,                       /* key dup */
-    NULL,                       /* val dup */
-    dictObjKeyCompare,          /* key compare */
-    dictRedisObjectDestructor,  /* key destructor */
-    dictListDestructor          /* val destructor */
-};
-
-/* Cluster nodes hash table, mapping nodes addresses 1.2.3.4:6379 to
- * clusterNode structures. */
-dictType clusterNodesDictType = {
-    dictSdsHash,                /* hash function */
-    NULL,                       /* key dup */
-    NULL,                       /* val dup */
-    dictSdsKeyCompare,          /* key compare */
-    dictSdsDestructor,          /* key destructor */
-    NULL                        /* val destructor */
-};
-
-int htNeedsResize(dict *dict) {
-    long long size, used;
-
-    size = dictSlots(dict);
-    used = dictSize(dict);
-    return (size && used && size > DICT_HT_INITIAL_SIZE &&
-            (used*100/size < REDIS_HT_MINFILL));
-}
-
-/* If the percentage of used slots in the HT reaches REDIS_HT_MINFILL
- * we resize the hash table to save memory */
-void tryResizeHashTables(void) {
-    int j;
-
-    for (j = 0; j < server.dbnum; j++) {
-        if (htNeedsResize(server.db[j].dict))
-            dictResize(server.db[j].dict);
-        if (htNeedsResize(server.db[j].expires))
-            dictResize(server.db[j].expires);
-    }
-}
-
-/* Our hash table implementation performs rehashing incrementally while
- * we write/read from the hash table. Still if the server is idle, the hash
- * table will use two tables for a long time. So we try to use 1 millisecond
- * of CPU time at every serverCron() loop in order to rehash some key. */
-void incrementallyRehash(void) {
-    int j;
-
-    for (j = 0; j < server.dbnum; j++) {
-        /* Keys dictionary */
-        if (dictIsRehashing(server.db[j].dict)) {
-            dictRehashMilliseconds(server.db[j].dict,1);
-            break; /* already used our millisecond for this loop... */
-        }
-        /* Expires */
-        if (dictIsRehashing(server.db[j].expires)) {
-            dictRehashMilliseconds(server.db[j].expires,1);
-            break; /* already used our millisecond for this loop... */
-        }
-    }
-}
-
-/* This function is called once a background process of some kind terminates,
- * as we want to avoid resizing the hash tables when there is a child in order
- * to play well with copy-on-write (otherwise when a resize happens lots of
- * memory pages are copied). The goal of this function is to update the ability
- * for dict.c to resize the hash tables accordingly to the fact we have o not
- * running childs. */
-void updateDictResizePolicy(void) {
-    if (server.rdb_child_pid == -1 && server.aof_child_pid == -1)
-        dictEnableResize();
-    else
-        dictDisableResize();
-}
-
-/* ======================= Cron: called every 100 ms ======================== */
-
-/* Try to expire a few timed out keys. The algorithm used is adaptive and
- * will use few CPU cycles if there are few expiring keys, otherwise
- * it will get more aggressive to avoid that too much memory is used by
- * keys that can be removed from the keyspace. */
-void activeExpireCycle(void) {
-    int j, iteration = 0;
-    long long start = ustime(), timelimit;
-
-    /* We can use at max REDIS_EXPIRELOOKUPS_TIME_PERC percentage of CPU time
-     * per iteration. Since this function gets called with a frequency of
-     * REDIS_HZ times per second, the following is the max amount of
-     * microseconds we can spend in this function. */
-    timelimit = 1000000*REDIS_EXPIRELOOKUPS_TIME_PERC/REDIS_HZ/100;
-    if (timelimit <= 0) timelimit = 1;
-
-    for (j = 0; j < server.dbnum; j++) {
-        int expired;
-        redisDb *db = server.db+j;
-
-        /* Continue to expire if at the end of the cycle more than 25%
-         * of the keys were expired. */
-        do {
-            unsigned long num = dictSize(db->expires);
-            unsigned long slots = dictSlots(db->expires);
-            long long now = mstime();
-
-            /* When there are less than 1% filled slots getting random
-             * keys is expensive, so stop here waiting for better times...
-             * The dictionary will be resized asap. */
-            if (num && slots > DICT_HT_INITIAL_SIZE &&
-                (num*100/slots < 1)) break;
-
-            /* The main collection cycle. Sample random keys among keys
-             * with an expire set, checking for expired ones. */
-            expired = 0;
-            if (num > REDIS_EXPIRELOOKUPS_PER_CRON)
-                num = REDIS_EXPIRELOOKUPS_PER_CRON;
-            while (num--) {
-                dictEntry *de;
-                long long t;
-
-                if ((de = dictGetRandomKey(db->expires)) == NULL) break;
-                t = dictGetSignedIntegerVal(de);
-                if (now > t) {
-                    sds key = dictGetKey(de);
-                    robj *keyobj = createStringObject(key,sdslen(key));
-
-                    propagateExpire(db,keyobj);
-                    dbDelete(db,keyobj);
-                    decrRefCount(keyobj);
-                    expired++;
-                    server.stat_expiredkeys++;
-                }
-            }
-            /* We can't block forever here even if there are many keys to
-             * expire. So after a given amount of milliseconds return to the
-             * caller waiting for the other active expire cycle. */
-            iteration++;
-            if ((iteration & 0xf) == 0 && /* check once every 16 cycles. */
-                (ustime()-start) > timelimit) return;
-        } while (expired > REDIS_EXPIRELOOKUPS_PER_CRON/4);
-    }
-}
-
-void updateLRUClock(void) {
-    server.lruclock = (server.unixtime/REDIS_LRU_CLOCK_RESOLUTION) &
-                                                REDIS_LRU_CLOCK_MAX;
-}
-
-
-/* Add a sample to the operations per second array of samples. */
-void trackOperationsPerSecond(void) {
-    long long t = mstime() - server.ops_sec_last_sample_time;
-    long long ops = server.stat_numcommands - server.ops_sec_last_sample_ops;
-    long long ops_sec;
-
-    ops_sec = t > 0 ? (ops*1000/t) : 0;
-
-    server.ops_sec_samples[server.ops_sec_idx] = ops_sec;
-    server.ops_sec_idx = (server.ops_sec_idx+1) % REDIS_OPS_SEC_SAMPLES;
-    server.ops_sec_last_sample_time = mstime();
-    server.ops_sec_last_sample_ops = server.stat_numcommands;
-}
-
-/* Return the mean of all the samples. */
-long long getOperationsPerSecond(void) {
-    int j;
-    long long sum = 0;
-
-    for (j = 0; j < REDIS_OPS_SEC_SAMPLES; j++)
-        sum += server.ops_sec_samples[j];
-    return sum / REDIS_OPS_SEC_SAMPLES;
-}
-
-/* Check for timeouts. Returns non-zero if the client was terminated */
-int clientsCronHandleTimeout(redisClient *c) {
-    time_t now = server.unixtime;
-
-    if (server.maxidletime &&
-        !(c->flags & REDIS_SLAVE) &&    /* no timeout for slaves */
-        !(c->flags & REDIS_MASTER) &&   /* no timeout for masters */
-        !(c->flags & REDIS_BLOCKED) &&  /* no timeout for BLPOP */
-        dictSize(c->pubsub_channels) == 0 && /* no timeout for pubsub */
-        listLength(c->pubsub_patterns) == 0 &&
-        (now - c->lastinteraction > server.maxidletime))
-    {
-        redisLog(REDIS_VERBOSE,"Closing idle client");
-        freeClient(c);
-        return 1;
-    } else if (c->flags & REDIS_BLOCKED) {
-        if (c->bpop.timeout != 0 && c->bpop.timeout < now) {
-            addReply(c,shared.nullmultibulk);
-            unblockClientWaitingData(c);
-        }
-    }
-    return 0;
-}
-
-/* The client query buffer is an sds.c string that can end with a lot of
- * free space not used, this function reclaims space if needed.
- *
- * The funciton always returns 0 as it never terminates the client. */
-int clientsCronResizeQueryBuffer(redisClient *c) {
-    size_t querybuf_size = sdsAllocSize(c->querybuf);
-    time_t idletime = server.unixtime - c->lastinteraction;
-
-    /* There are two conditions to resize the query buffer:
-     * 1) Query buffer is > BIG_ARG and too big for latest peak.
-     * 2) Client is inactive and the buffer is bigger than 1k. */
-    if (((querybuf_size > REDIS_MBULK_BIG_ARG) &&
-         (querybuf_size/(c->querybuf_peak+1)) > 2) ||
-         (querybuf_size > 1024 && idletime > 2))
-    {
-        /* Only resize the query buffer if it is actually wasting space. */
-        if (sdsavail(c->querybuf) > 1024) {
-            c->querybuf = sdsRemoveFreeSpace(c->querybuf);
-        }
-    }
-    /* Reset the peak again to capture the peak memory usage in the next
-     * cycle. */
-    c->querybuf_peak = 0;
-    return 0;
-}
-
-void clientsCron(void) {
-    /* Make sure to process at least 1/(REDIS_HZ*10) of clients per call.
-     * Since this function is called REDIS_HZ times per second we are sure that
-     * in the worst case we process all the clients in 10 seconds.
-     * In normal conditions (a reasonable number of clients) we process
-     * all the clients in a shorter time. */
-    int numclients = listLength(server.clients);
-    int iterations = numclients/(REDIS_HZ*10);
-
-    if (iterations < 50)
-        iterations = (numclients < 50) ? numclients : 50;
-    while(listLength(server.clients) && iterations--) {
-        redisClient *c;
-        listNode *head;
-
-        /* Rotate the list, take the current head, process.
-         * This way if the client must be removed from the list it's the
-         * first element and we don't incur into O(N) computation. */
-        listRotate(server.clients);
-        head = listFirst(server.clients);
-        c = listNodeValue(head);
-        /* The following functions do different service checks on the client.
-         * The protocol is that they return non-zero if the client was
-         * terminated. */
-        if (clientsCronHandleTimeout(c)) continue;
-        if (clientsCronResizeQueryBuffer(c)) continue;
-    }
-}
-
-/* This is our timer interrupt, called REDIS_HZ times per second.
- * Here is where we do a number of things that need to be done asynchronously.
- * For instance:
- *
- * - Active expired keys collection (it is also performed in a lazy way on
- *   lookup).
- * - Software watchdong.
- * - Update some statistic.
- * - Incremental rehashing of the DBs hash tables.
- * - Triggering BGSAVE / AOF rewrite, and handling of terminated children.
- * - Clients timeout of differnet kinds.
- * - Replication reconnection.
- * - Many more...
- *
- * Everything directly called here will be called REDIS_HZ times per second,
- * so in order to throttle execution of things we want to do less frequently
- * a macro is used: run_with_period(milliseconds) { .... }
- */
-
-/* Using the following macro you can run code inside serverCron() with the
- * specified period, specified in milliseconds.
- * The actual resolution depends on REDIS_HZ. */
-#define run_with_period(_ms_) if (!(loops % ((_ms_)/(1000/REDIS_HZ))))
-
-int serverCron(struct aeEventLoop *eventLoop, long long id, void *clientData) {
-    int j, loops = server.cronloops;
-    REDIS_NOTUSED(eventLoop);
-    REDIS_NOTUSED(id);
-    REDIS_NOTUSED(clientData);
-
-    /* Software watchdog: deliver the SIGALRM that will reach the signal
-     * handler if we don't return here fast enough. */
-    if (server.watchdog_period) watchdogScheduleSignal(server.watchdog_period);
-
-    /* We take a cached value of the unix time in the global state because
-     * with virtual memory and aging there is to store the current time
-     * in objects at every object access, and accuracy is not needed.
-     * To access a global var is faster than calling time(NULL) */
-    server.unixtime = time(NULL);
-
-    run_with_period(100) trackOperationsPerSecond();
-
-    /* We have just 22 bits per object for LRU information.
-     * So we use an (eventually wrapping) LRU clock with 10 seconds resolution.
-     * 2^22 bits with 10 seconds resoluton is more or less 1.5 years.
-     *
-     * Note that even if this will wrap after 1.5 years it's not a problem,
-     * everything will still work but just some object will appear younger
-     * to Redis. But for this to happen a given object should never be touched
-     * for 1.5 years.
-     *
-     * Note that you can change the resolution altering the
-     * REDIS_LRU_CLOCK_RESOLUTION define.
-     */
-    updateLRUClock();
-
-    /* Record the max memory used since the server was started. */
-    if (zmalloc_used_memory() > server.stat_peak_memory)
-        server.stat_peak_memory = zmalloc_used_memory();
-
-    /* We received a SIGTERM, shutting down here in a safe way, as it is
-     * not ok doing so inside the signal handler. */
-    if (server.shutdown_asap) {
-        if (prepareForShutdown(0) == REDIS_OK) exit(0);
-        redisLog(REDIS_WARNING,"SIGTERM received but errors trying to shut down the server, check the logs for more information");
-    }
-
-    /* Show some info about non-empty databases */
-    run_with_period(5000) {
-        for (j = 0; j < server.dbnum; j++) {
-            long long size, used, vkeys;
-
-            size = dictSlots(server.db[j].dict);
-            used = dictSize(server.db[j].dict);
-            vkeys = dictSize(server.db[j].expires);
-            if (used || vkeys) {
-                redisLog(REDIS_VERBOSE,"DB %d: %lld keys (%lld volatile) in %lld slots HT.",j,used,vkeys,size);
-                /* dictPrintStats(server.dict); */
-            }
-        }
-    }
-
-    /* We don't want to resize the hash tables while a bacground saving
-     * is in progress: the saving child is created using fork() that is
-     * implemented with a copy-on-write semantic in most modern systems, so
-     * if we resize the HT while there is the saving child at work actually
-     * a lot of memory movements in the parent will cause a lot of pages
-     * copied. */
-    if (server.rdb_child_pid == -1 && server.aof_child_pid == -1) {
-        tryResizeHashTables();
-        if (server.activerehashing) incrementallyRehash();
-    }
-
-    /* Show information about connected clients */
-    run_with_period(5000) {
-        redisLog(REDIS_VERBOSE,"%d clients connected (%d slaves), %zu bytes in use",
-            listLength(server.clients)-listLength(server.slaves),
-            listLength(server.slaves),
-            zmalloc_used_memory());
-    }
-
-    /* We need to do a few operations on clients asynchronously. */
-    clientsCron();
-
-    /* Start a scheduled AOF rewrite if this was requested by the user while
-     * a BGSAVE was in progress. */
-    if (server.rdb_child_pid == -1 && server.aof_child_pid == -1 &&
-        server.aof_rewrite_scheduled)
-    {
-        rewriteAppendOnlyFileBackground();
-    }
-
-    /* Check if a background saving or AOF rewrite in progress terminated. */
-    if (server.rdb_child_pid != -1 || server.aof_child_pid != -1) {
-        int statloc;
-        pid_t pid;
-
-        if ((pid = wait3(&statloc,WNOHANG,NULL)) != 0) {
-            int exitcode = WEXITSTATUS(statloc);
-            int bysignal = 0;
-
-            if (WIFSIGNALED(statloc)) bysignal = WTERMSIG(statloc);
-
-            if (pid == server.rdb_child_pid) {
-                backgroundSaveDoneHandler(exitcode,bysignal);
-            } else {
-                backgroundRewriteDoneHandler(exitcode,bysignal);
-            }
-            updateDictResizePolicy();
-        }
-    } else {
-        /* If there is not a background saving/rewrite in progress check if
-         * we have to save/rewrite now */
-         for (j = 0; j < server.saveparamslen; j++) {
-            struct saveparam *sp = server.saveparams+j;
-
-            if (server.dirty >= sp->changes &&
-                server.unixtime-server.lastsave > sp->seconds) {
-                redisLog(REDIS_NOTICE,"%d changes in %d seconds. Saving...",
-                    sp->changes, sp->seconds);
-                rdbSaveBackground(server.rdb_filename);
-                break;
-            }
-         }
-
-         /* Trigger an AOF rewrite if needed */
-         if (server.rdb_child_pid == -1 &&
-             server.aof_child_pid == -1 &&
-             server.aof_rewrite_perc &&
-             server.aof_current_size > server.aof_rewrite_min_size)
-         {
-            long long base = server.aof_rewrite_base_size ?
-                            server.aof_rewrite_base_size : 1;
-            long long growth = (server.aof_current_size*100/base) - 100;
-            if (growth >= server.aof_rewrite_perc) {
-                redisLog(REDIS_NOTICE,"Starting automatic rewriting of AOF on %lld%% growth",growth);
-                rewriteAppendOnlyFileBackground();
-            }
-         }
-    }
-
-
-    /* If we postponed an AOF buffer flush, let's try to do it every time the
-     * cron function is called. */
-    if (server.aof_flush_postponed_start) flushAppendOnlyFile(0);
-
-    /* Expire a few keys per cycle, only if this is a master.
-     * On slaves we wait for DEL operations synthesized by the master
-     * in order to guarantee a strict consistency. */
-    if (server.masterhost == NULL) activeExpireCycle();
-
-    /* Close clients that need to be closed asynchronous */
-    freeClientsInAsyncFreeQueue();
-
-    /* Replication cron function -- used to reconnect to master and
-     * to detect transfer failures. */
-    run_with_period(1000) replicationCron();
-
-    /* Run other sub-systems specific cron jobs */
-    run_with_period(1000) {
-        if (server.cluster_enabled) clusterCron();
-    }
-
-    server.cronloops++;
-    return 1000/REDIS_HZ;
-}
-
-/* This function gets called every time Redis is entering the
- * main loop of the event driven library, that is, before to sleep
- * for ready file descriptors. */
-void beforeSleep(struct aeEventLoop *eventLoop) {
-    REDIS_NOTUSED(eventLoop);
-    listNode *ln;
-    redisClient *c;
-
-    /* Try to process pending commands for clients that were just unblocked. */
-    while (listLength(server.unblocked_clients)) {
-        ln = listFirst(server.unblocked_clients);
-        redisAssert(ln != NULL);
-        c = ln->value;
-        listDelNode(server.unblocked_clients,ln);
-        c->flags &= ~REDIS_UNBLOCKED;
-
-        /* Process remaining data in the input buffer. */
-        if (c->querybuf && sdslen(c->querybuf) > 0) {
-            server.current_client = c;
-            processInputBuffer(c);
-            server.current_client = NULL;
-        }
-    }
-
-    /* Write the AOF buffer on disk */
-    flushAppendOnlyFile(0);
-}
-
-/* =========================== Server initialization ======================== */
-
-void createSharedObjects(void) {
-    int j;
-
-    shared.crlf = createObject(REDIS_STRING,sdsnew("\r\n"));
-    shared.ok = createObject(REDIS_STRING,sdsnew("+OK\r\n"));
-    shared.err = createObject(REDIS_STRING,sdsnew("-ERR\r\n"));
-    shared.emptybulk = createObject(REDIS_STRING,sdsnew("$0\r\n\r\n"));
-    shared.czero = createObject(REDIS_STRING,sdsnew(":0\r\n"));
-    shared.cone = createObject(REDIS_STRING,sdsnew(":1\r\n"));
-    shared.cnegone = createObject(REDIS_STRING,sdsnew(":-1\r\n"));
-    shared.nullbulk = createObject(REDIS_STRING,sdsnew("$-1\r\n"));
-    shared.nullmultibulk = createObject(REDIS_STRING,sdsnew("*-1\r\n"));
-    shared.emptymultibulk = createObject(REDIS_STRING,sdsnew("*0\r\n"));
-    shared.pong = createObject(REDIS_STRING,sdsnew("+PONG\r\n"));
-    shared.queued = createObject(REDIS_STRING,sdsnew("+QUEUED\r\n"));
-    shared.wrongtypeerr = createObject(REDIS_STRING,sdsnew(
-        "-ERR Operation against a key holding the wrong kind of value\r\n"));
-    shared.nokeyerr = createObject(REDIS_STRING,sdsnew(
-        "-ERR no such key\r\n"));
-    shared.syntaxerr = createObject(REDIS_STRING,sdsnew(
-        "-ERR syntax error\r\n"));
-    shared.sameobjecterr = createObject(REDIS_STRING,sdsnew(
-        "-ERR source and destination objects are the same\r\n"));
-    shared.outofrangeerr = createObject(REDIS_STRING,sdsnew(
-        "-ERR index out of range\r\n"));
-    shared.noscripterr = createObject(REDIS_STRING,sdsnew(
-        "-NOSCRIPT No matching script. Please use EVAL.\r\n"));
-    shared.loadingerr = createObject(REDIS_STRING,sdsnew(
-        "-LOADING Redis is loading the dataset in memory\r\n"));
-    shared.slowscripterr = createObject(REDIS_STRING,sdsnew(
-        "-BUSY Redis is busy running a script. You can only call SCRIPT KILL or SHUTDOWN NOSAVE.\r\n"));
-    shared.masterdownerr = createObject(REDIS_STRING,sdsnew(
-        "-MASTERDOWN Link with MASTER is down and slave-serve-stale-data is set to 'no'.\r\n"));
-    shared.bgsaveerr = createObject(REDIS_STRING,sdsnew(
-        "-MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.\r\n"));
-    shared.roslaveerr = createObject(REDIS_STRING,sdsnew(
-        "-READONLY You can't write against a read only slave.\r\n"));
-    shared.oomerr = createObject(REDIS_STRING,sdsnew(
-        "-OOM command not allowed when used memory > 'maxmemory'.\r\n"));
-    shared.space = createObject(REDIS_STRING,sdsnew(" "));
-    shared.colon = createObject(REDIS_STRING,sdsnew(":"));
-    shared.plus = createObject(REDIS_STRING,sdsnew("+"));
-
-    for (j = 0; j < REDIS_SHARED_SELECT_CMDS; j++) {
-        shared.select[j] = createObject(REDIS_STRING,
-            sdscatprintf(sdsempty(),"select %d\r\n", j));
-    }
-    shared.messagebulk = createStringObject("$7\r\nmessage\r\n",13);
-    shared.pmessagebulk = createStringObject("$8\r\npmessage\r\n",14);
-    shared.subscribebulk = createStringObject("$9\r\nsubscribe\r\n",15);
-    shared.unsubscribebulk = createStringObject("$11\r\nunsubscribe\r\n",18);
-    shared.psubscribebulk = createStringObject("$10\r\npsubscribe\r\n",17);
-    shared.punsubscribebulk = createStringObject("$12\r\npunsubscribe\r\n",19);
-    shared.del = createStringObject("DEL",3);
-    shared.rpop = createStringObject("RPOP",4);
-    shared.lpop = createStringObject("LPOP",4);
-    for (j = 0; j < REDIS_SHARED_INTEGERS; j++) {
-        shared.integers[j] = createObject(REDIS_STRING,(void*)(long)j);
-        shared.integers[j]->encoding = REDIS_ENCODING_INT;
-    }
-    for (j = 0; j < REDIS_SHARED_BULKHDR_LEN; j++) {
-        shared.mbulkhdr[j] = createObject(REDIS_STRING,
-            sdscatprintf(sdsempty(),"*%d\r\n",j));
-        shared.bulkhdr[j] = createObject(REDIS_STRING,
-            sdscatprintf(sdsempty(),"$%d\r\n",j));
-    }
-}
-
-void initServerConfig() {
-    getRandomHexChars(server.runid,REDIS_RUN_ID_SIZE);
-    server.runid[REDIS_RUN_ID_SIZE] = '\0';
-    server.arch_bits = (sizeof(long) == 8) ? 64 : 32;
-    server.port = REDIS_SERVERPORT;
-    server.bindaddr = NULL;
-    server.unixsocket = NULL;
-    server.unixsocketperm = 0;
-    server.ipfd = -1;
-    server.sofd = -1;
-    server.dbnum = REDIS_DEFAULT_DBNUM;
-    server.verbosity = REDIS_NOTICE;
-    server.maxidletime = REDIS_MAXIDLETIME;
-    server.client_max_querybuf_len = REDIS_MAX_QUERYBUF_LEN;
-    server.saveparams = NULL;
-    server.loading = 0;
-    server.logfile = NULL; /* NULL = log on standard output */
-    server.syslog_enabled = 0;
-    server.syslog_ident = zstrdup("redis");
-    server.syslog_facility = LOG_LOCAL0;
-    server.daemonize = 0;
-    server.aof_state = REDIS_AOF_OFF;
-    server.aof_fsync = AOF_FSYNC_EVERYSEC;
-    server.aof_no_fsync_on_rewrite = 0;
-    server.aof_rewrite_perc = REDIS_AOF_REWRITE_PERC;
-    server.aof_rewrite_min_size = REDIS_AOF_REWRITE_MIN_SIZE;
-    server.aof_rewrite_base_size = 0;
-    server.aof_rewrite_scheduled = 0;
-    server.aof_last_fsync = time(NULL);
-    server.aof_rewrite_time_last = -1;
-    server.aof_rewrite_time_start = -1;
-    server.aof_delayed_fsync = 0;
-    server.aof_fd = -1;
-    server.aof_selected_db = -1; /* Make sure the first time will not match */
-    server.aof_flush_postponed_start = 0;
-    server.pidfile = zstrdup("/var/run/redis.pid");
-    server.rdb_filename = zstrdup("dump.rdb");
-    server.aof_filename = zstrdup("appendonly.aof");
-    server.requirepass = NULL;
-    server.rdb_compression = 1;
-    server.rdb_checksum = 1;
-    server.activerehashing = 1;
-    server.maxclients = REDIS_MAX_CLIENTS;
-    server.bpop_blocked_clients = 0;
-    server.maxmemory = 0;
-    server.maxmemory_policy = REDIS_MAXMEMORY_VOLATILE_LRU;
-    server.maxmemory_samples = 3;
-    server.hash_max_ziplist_entries = REDIS_HASH_MAX_ZIPLIST_ENTRIES;
-    server.hash_max_ziplist_value = REDIS_HASH_MAX_ZIPLIST_VALUE;
-    server.list_max_ziplist_entries = REDIS_LIST_MAX_ZIPLIST_ENTRIES;
-    server.list_max_ziplist_value = REDIS_LIST_MAX_ZIPLIST_VALUE;
-    server.set_max_intset_entries = REDIS_SET_MAX_INTSET_ENTRIES;
-    server.zset_max_ziplist_entries = REDIS_ZSET_MAX_ZIPLIST_ENTRIES;
-    server.zset_max_ziplist_value = REDIS_ZSET_MAX_ZIPLIST_VALUE;
-    server.shutdown_asap = 0;
-    server.repl_ping_slave_period = REDIS_REPL_PING_SLAVE_PERIOD;
-    server.repl_timeout = REDIS_REPL_TIMEOUT;
-    server.cluster_enabled = 0;
-    server.cluster.configfile = zstrdup("nodes.conf");
-    server.lua_caller = NULL;
-    server.lua_time_limit = REDIS_LUA_TIME_LIMIT;
-    server.lua_client = NULL;
-    server.lua_timedout = 0;
-
-    updateLRUClock();
-    resetServerSaveParams();
-
-    appendServerSaveParams(60*60,1);  /* save after 1 hour and 1 change */
-    appendServerSaveParams(300,100);  /* save after 5 minutes and 100 changes */
-    appendServerSaveParams(60,10000); /* save after 1 minute and 10000 changes */
-    /* Replication related */
-    server.masterauth = NULL;
-    server.masterhost = NULL;
-    server.masterport = 6379;
-    server.master = NULL;
-    server.repl_state = REDIS_REPL_NONE;
-    server.repl_syncio_timeout = REDIS_REPL_SYNCIO_TIMEOUT;
-    server.repl_serve_stale_data = 1;
-    server.repl_slave_ro = 1;
-    server.repl_down_since = time(NULL);
-
-    /* Client output buffer limits */
-    server.client_obuf_limits[REDIS_CLIENT_LIMIT_CLASS_NORMAL].hard_limit_bytes = 0;
-    server.client_obuf_limits[REDIS_CLIENT_LIMIT_CLASS_NORMAL].soft_limit_bytes = 0;
-    server.client_obuf_limits[REDIS_CLIENT_LIMIT_CLASS_NORMAL].soft_limit_seconds = 0;
-    server.client_obuf_limits[REDIS_CLIENT_LIMIT_CLASS_SLAVE].hard_limit_bytes = 1024*1024*256;
-    server.client_obuf_limits[REDIS_CLIENT_LIMIT_CLASS_SLAVE].soft_limit_bytes = 1024*1024*64;
-    server.client_obuf_limits[REDIS_CLIENT_LIMIT_CLASS_SLAVE].soft_limit_seconds = 60;
-    server.client_obuf_limits[REDIS_CLIENT_LIMIT_CLASS_PUBSUB].hard_limit_bytes = 1024*1024*32;
-    server.client_obuf_limits[REDIS_CLIENT_LIMIT_CLASS_PUBSUB].soft_limit_bytes = 1024*1024*8;
-    server.client_obuf_limits[REDIS_CLIENT_LIMIT_CLASS_PUBSUB].soft_limit_seconds = 60;
-
-    /* Double constants initialization */
-    R_Zero = 0.0;
-    R_PosInf = 1.0/R_Zero;
-    R_NegInf = -1.0/R_Zero;
-    R_Nan = R_Zero/R_Zero;
-
-    /* Command table -- we intiialize it here as it is part of the
-     * initial configuration, since command names may be changed via
-     * redis.conf using the rename-command directive. */
-    server.commands = dictCreate(&commandTableDictType,NULL);
-    populateCommandTable();
-    server.delCommand = lookupCommandByCString("del");
-    server.multiCommand = lookupCommandByCString("multi");
-    server.lpushCommand = lookupCommandByCString("lpush");
-
-    /* Slow log */
-    server.slowlog_log_slower_than = REDIS_SLOWLOG_LOG_SLOWER_THAN;
-    server.slowlog_max_len = REDIS_SLOWLOG_MAX_LEN;
-
-    /* Debugging */
-    server.assert_failed = "<no assertion failed>";
-    server.assert_file = "<no file>";
-    server.assert_line = 0;
-    server.bug_report_start = 0;
-    server.watchdog_period = 0;
-}
-
-/* This function will try to raise the max number of open files accordingly to
- * the configured max number of clients. It will also account for 32 additional
- * file descriptors as we need a few more for persistence, listening
- * sockets, log files and so forth.
- *
- * If it will not be possible to set the limit accordingly to the configured
- * max number of clients, the function will do the reverse setting
- * server.maxclients to the value that we can actually handle. */
-void adjustOpenFilesLimit(void) {
-    rlim_t maxfiles = server.maxclients+32;
-    struct rlimit limit;
-
-    if (getrlimit(RLIMIT_NOFILE,&limit) == -1) {
-        redisLog(REDIS_WARNING,"Unable to obtain the current NOFILE limit (%s), assuming 1024 and setting the max clients configuration accordingly.",
-            strerror(errno));
-        server.maxclients = 1024-32;
-    } else {
-        rlim_t oldlimit = limit.rlim_cur;
-
-        /* Set the max number of files if the current limit is not enough
-         * for our needs. */
-        if (oldlimit < maxfiles) {
-            rlim_t f;
-
-            f = maxfiles;
-            while(f > oldlimit) {
-                limit.rlim_cur = f;
-                limit.rlim_max = f;
-                if (setrlimit(RLIMIT_NOFILE,&limit) != -1) break;
-                f -= 128;
-            }
-            if (f < oldlimit) f = oldlimit;
-            if (f != maxfiles) {
-                server.maxclients = f-32;
-                redisLog(REDIS_WARNING,"Unable to set the max number of files limit to %d (%s), setting the max clients configuration to %d.",
-                    (int) maxfiles, strerror(errno), (int) server.maxclients);
-            } else {
-                redisLog(REDIS_NOTICE,"Max number of open files set to %d",
-                    (int) maxfiles);
-            }
-        }
-    }
-}
-
-void initServer() {
-    int j;
-
-    signal(SIGHUP, SIG_IGN);
-    signal(SIGPIPE, SIG_IGN);
-    setupSignalHandlers();
-
-    if (server.syslog_enabled) {
-        openlog(server.syslog_ident, LOG_PID | LOG_NDELAY | LOG_NOWAIT,
-            server.syslog_facility);
-    }
-
-    server.current_client = NULL;
-    server.clients = listCreate();
-    server.clients_to_close = listCreate();
-    server.slaves = listCreate();
-    server.monitors = listCreate();
-    server.unblocked_clients = listCreate();
-
-    createSharedObjects();
-    adjustOpenFilesLimit();
-    server.el = aeCreateEventLoop(server.maxclients+1024);
-    server.db = zmalloc(sizeof(redisDb)*server.dbnum);
-
-    if (server.port != 0) {
-        server.ipfd = anetTcpServer(server.neterr,server.port,server.bindaddr);
-        if (server.ipfd == ANET_ERR) {
-            redisLog(REDIS_WARNING, "Opening port %d: %s",
-                server.port, server.neterr);
-            exit(1);
-        }
-    }
-    if (server.unixsocket != NULL) {
-        unlink(server.unixsocket); /* don't care if this fails */
-        server.sofd = anetUnixServer(server.neterr,server.unixsocket,server.unixsocketperm);
-        if (server.sofd == ANET_ERR) {
-            redisLog(REDIS_WARNING, "Opening socket: %s", server.neterr);
-            exit(1);
-        }
-    }
-    if (server.ipfd < 0 && server.sofd < 0) {
-        redisLog(REDIS_WARNING, "Configured to not listen anywhere, exiting.");
-        exit(1);
-    }
-    for (j = 0; j < server.dbnum; j++) {
-        server.db[j].dict = dictCreate(&dbDictType,NULL);
-        server.db[j].expires = dictCreate(&keyptrDictType,NULL);
-        server.db[j].blocking_keys = dictCreate(&keylistDictType,NULL);
-        server.db[j].watched_keys = dictCreate(&keylistDictType,NULL);
-        server.db[j].id = j;
-    }
-    server.pubsub_channels = dictCreate(&keylistDictType,NULL);
-    server.pubsub_patterns = listCreate();
-    listSetFreeMethod(server.pubsub_patterns,freePubsubPattern);
-    listSetMatchMethod(server.pubsub_patterns,listMatchPubsubPattern);
-    server.cronloops = 0;
-    server.rdb_child_pid = -1;
-    server.aof_child_pid = -1;
-    aofRewriteBufferReset();
-    server.aof_buf = sdsempty();
-    server.lastsave = time(NULL);
-    server.rdb_save_time_last = -1;
-    server.rdb_save_time_start = -1;
-    server.dirty = 0;
-    server.stat_numcommands = 0;
-    server.stat_numconnections = 0;
-    server.stat_expiredkeys = 0;
-    server.stat_evictedkeys = 0;
-    server.stat_starttime = time(NULL);
-    server.stat_keyspace_misses = 0;
-    server.stat_keyspace_hits = 0;
-    server.stat_peak_memory = 0;
-    server.stat_fork_time = 0;
-    server.stat_rejected_conn = 0;
-    memset(server.ops_sec_samples,0,sizeof(server.ops_sec_samples));
-    server.ops_sec_idx = 0;
-    server.ops_sec_last_sample_time = mstime();
-    server.ops_sec_last_sample_ops = 0;
-    server.unixtime = time(NULL);
-    server.lastbgsave_status = REDIS_OK;
-    server.stop_writes_on_bgsave_err = 1;
-    aeCreateTimeEvent(server.el, 1, serverCron, NULL, NULL);
-    if (server.ipfd > 0 && aeCreateFileEvent(server.el,server.ipfd,AE_READABLE,
-        acceptTcpHandler,NULL) == AE_ERR) oom("creating file event");
-    if (server.sofd > 0 && aeCreateFileEvent(server.el,server.sofd,AE_READABLE,
-        acceptUnixHandler,NULL) == AE_ERR) oom("creating file event");
-
-    if (server.aof_state == REDIS_AOF_ON) {
-        server.aof_fd = open(server.aof_filename,
-                               O_WRONLY|O_APPEND|O_CREAT,0644);
-        if (server.aof_fd == -1) {
-            redisLog(REDIS_WARNING, "Can't open the append-only file: %s",
-                strerror(errno));
-            exit(1);
-        }
-    }
-
-    /* 32 bit instances are limited to 4GB of address space, so if there is
-     * no explicit limit in the user provided configuration we set a limit
-     * at 3.5GB using maxmemory with 'noeviction' policy'. This saves
-     * useless crashes of the Redis instance. */
-    if (server.arch_bits == 32 && server.maxmemory == 0) {
-        redisLog(REDIS_WARNING,"Warning: 32 bit instance detected but no memory limit set. Setting 3.5 GB maxmemory limit with 'noeviction' policy now.");
-        server.maxmemory = 3584LL*(1024*1024); /* 3584 MB = 3.5 GB */
-        server.maxmemory_policy = REDIS_MAXMEMORY_NO_EVICTION;
-    }
-
-    if (server.cluster_enabled) clusterInit();
-    scriptingInit();
-    slowlogInit();
-    bioInit();
-}
-
-/* Populates the Redis Command Table starting from the hard coded list
- * we have on top of redis.c file. */
-void populateCommandTable(void) {
-    int j;
-    int numcommands = sizeof(redisCommandTable)/sizeof(struct redisCommand);
-
-    for (j = 0; j < numcommands; j++) {
-        struct redisCommand *c = redisCommandTable+j;
-        char *f = c->sflags;
-        int retval;
-
-        while(*f != '\0') {
-            switch(*f) {
-            case 'w': c->flags |= REDIS_CMD_WRITE; break;
-            case 'r': c->flags |= REDIS_CMD_READONLY; break;
-            case 'm': c->flags |= REDIS_CMD_DENYOOM; break;
-            case 'a': c->flags |= REDIS_CMD_ADMIN; break;
-            case 'p': c->flags |= REDIS_CMD_PUBSUB; break;
-            case 'f': c->flags |= REDIS_CMD_FORCE_REPLICATION; break;
-            case 's': c->flags |= REDIS_CMD_NOSCRIPT; break;
-            case 'R': c->flags |= REDIS_CMD_RANDOM; break;
-            case 'S': c->flags |= REDIS_CMD_SORT_FOR_SCRIPT; break;
-            default: redisPanic("Unsupported command flag"); break;
-            }
-            f++;
-        }
-
-        retval = dictAdd(server.commands, sdsnew(c->name), c);
-        assert(retval == DICT_OK);
-    }
-}
-
-void resetCommandTableStats(void) {
-    int numcommands = sizeof(redisCommandTable)/sizeof(struct redisCommand);
-    int j;
-
-    for (j = 0; j < numcommands; j++) {
-        struct redisCommand *c = redisCommandTable+j;
-
-        c->microseconds = 0;
-        c->calls = 0;
-    }
-}
-
-/* ========================== Redis OP Array API ============================ */
-
-void redisOpArrayInit(redisOpArray *oa) {
-    oa->ops = NULL;
-    oa->numops = 0;
-}
-
-int redisOpArrayAppend(redisOpArray *oa, struct redisCommand *cmd, int dbid,
-                       robj **argv, int argc, int target)
-{
-    redisOp *op;
-
-    oa->ops = zrealloc(oa->ops,sizeof(redisOp)*(oa->numops+1));
-    op = oa->ops+oa->numops;
-    op->cmd = cmd;
-    op->dbid = dbid;
-    op->argv = argv;
-    op->argc = argc;
-    op->target = target;
-    oa->numops++;
-    return oa->numops;
-}
-
-void redisOpArrayFree(redisOpArray *oa) {
-    while(oa->numops) {
-        int j;
-        redisOp *op;
-
-        oa->numops--;
-        op = oa->ops+oa->numops;
-        for (j = 0; j < op->argc; j++)
-            decrRefCount(op->argv[j]);
-        zfree(op->argv);
-    }
-    zfree(oa->ops);
-}
-
-/* ====================== Commands lookup and execution ===================== */
-
-struct redisCommand *lookupCommand(sds name) {
-    return dictFetchValue(server.commands, name);
-}
-
-struct redisCommand *lookupCommandByCString(char *s) {
-    struct redisCommand *cmd;
-    sds name = sdsnew(s);
-
-    cmd = dictFetchValue(server.commands, name);
-    sdsfree(name);
-    return cmd;
-}
-
-/* Propagate the specified command (in the context of the specified database id)
- * to AOF, Slaves and Monitors.
- *
- * flags are an xor between:
- * + REDIS_PROPAGATE_NONE (no propagation of command at all)
- * + REDIS_PROPAGATE_AOF (propagate into the AOF file if is enabled)
- * + REDIS_PROPAGATE_REPL (propagate into the replication link)
- */
-void propagate(struct redisCommand *cmd, int dbid, robj **argv, int argc,
-               int flags)
-{
-    if (server.aof_state != REDIS_AOF_OFF && flags & REDIS_PROPAGATE_AOF)
-        feedAppendOnlyFile(cmd,dbid,argv,argc);
-    if (flags & REDIS_PROPAGATE_REPL && listLength(server.slaves))
-        replicationFeedSlaves(server.slaves,dbid,argv,argc);
-}
-
-/* Used inside commands to schedule the propagation of additional commands
- * after the current command is propagated to AOF / Replication. */
-void alsoPropagate(struct redisCommand *cmd, int dbid, robj **argv, int argc,
-                   int target)
-{
-    redisOpArrayAppend(&server.also_propagate,cmd,dbid,argv,argc,target);
-}
-
-/* Call() is the core of Redis execution of a command */
-void call(redisClient *c, int flags) {
-    long long dirty, start = ustime(), duration;
-
-    /* Sent the command to clients in MONITOR mode, only if the commands are
-     * not geneated from reading an AOF. */
-    if (listLength(server.monitors) && !server.loading)
-        replicationFeedMonitors(c,server.monitors,c->db->id,c->argv,c->argc);
-
-    /* Call the command. */
-    redisOpArrayInit(&server.also_propagate);
-    dirty = server.dirty;
-    c->cmd->proc(c);
-    dirty = server.dirty-dirty;
-    duration = ustime()-start;
-
-    /* When EVAL is called loading the AOF we don't want commands called
-     * from Lua to go into the slowlog or to populate statistics. */
-    if (server.loading && c->flags & REDIS_LUA_CLIENT)
-        flags &= ~(REDIS_CALL_SLOWLOG | REDIS_CALL_STATS);
-
-    /* Log the command into the Slow log if needed, and populate the
-     * per-command statistics that we show in INFO commandstats. */
-    if (flags & REDIS_CALL_SLOWLOG)
-        slowlogPushEntryIfNeeded(c->argv,c->argc,duration);
-    if (flags & REDIS_CALL_STATS) {
-        c->cmd->microseconds += duration;
-        c->cmd->calls++;
-    }
-
-    /* Propagate the command into the AOF and replication link */
-    if (flags & REDIS_CALL_PROPAGATE) {
-        int flags = REDIS_PROPAGATE_NONE;
-
-        if (c->cmd->flags & REDIS_CMD_FORCE_REPLICATION)
-            flags |= REDIS_PROPAGATE_REPL;
-        if (dirty)
-            flags |= (REDIS_PROPAGATE_REPL | REDIS_PROPAGATE_AOF);
-        if (flags != REDIS_PROPAGATE_NONE)
-            propagate(c->cmd,c->db->id,c->argv,c->argc,flags);
-    }
-    /* Commands such as LPUSH or BRPOPLPUSH may propagate an additional
-     * PUSH command. */
-    if (server.also_propagate.numops) {
-        int j;
-        redisOp *rop;
-
-        for (j = 0; j < server.also_propagate.numops; j++) {
-            rop = &server.also_propagate.ops[j];
-            propagate(rop->cmd, rop->dbid, rop->argv, rop->argc, rop->target);
-        }
-        redisOpArrayFree(&server.also_propagate);
-    }
-    server.stat_numcommands++;
-}
-
-/* If this function gets called we already read a whole
- * command, argments are in the client argv/argc fields.
- * processCommand() execute the command or prepare the
- * server for a bulk read from the client.
- *
- * If 1 is returned the client is still alive and valid and
- * and other operations can be performed by the caller. Otherwise
- * if 0 is returned the client was destroied (i.e. after QUIT). */
-int processCommand(redisClient *c) {
-    /* The QUIT command is handled separately. Normal command procs will
-     * go through checking for replication and QUIT will cause trouble
-     * when FORCE_REPLICATION is enabled and would be implemented in
-     * a regular command proc. */
-    if (!strcasecmp(c->argv[0]->ptr,"quit")) {
-        addReply(c,shared.ok);
-        c->flags |= REDIS_CLOSE_AFTER_REPLY;
-        return REDIS_ERR;
-    }
-
-    /* Now lookup the command and check ASAP about trivial error conditions
-     * such as wrong arity, bad command name and so forth. */
-    c->cmd = c->lastcmd = lookupCommand(c->argv[0]->ptr);
-    if (!c->cmd) {
-        addReplyErrorFormat(c,"unknown command '%s'",
-            (char*)c->argv[0]->ptr);
-        return REDIS_OK;
-    } else if ((c->cmd->arity > 0 && c->cmd->arity != c->argc) ||
-               (c->argc < -c->cmd->arity)) {
-        addReplyErrorFormat(c,"wrong number of arguments for '%s' command",
-            c->cmd->name);
-        return REDIS_OK;
-    }
-
-    /* Check if the user is authenticated */
-    if (server.requirepass && !c->authenticated && c->cmd->proc != authCommand)
-    {
-        addReplyError(c,"operation not permitted");
-        return REDIS_OK;
-    }
-
-    /* If cluster is enabled, redirect here */
-    if (server.cluster_enabled &&
-                !(c->cmd->getkeys_proc == NULL && c->cmd->firstkey == 0)) {
-        int hashslot;
-
-        if (server.cluster.state != REDIS_CLUSTER_OK) {
-            addReplyError(c,"The cluster is down. Check with CLUSTER INFO for more information");
-            return REDIS_OK;
-        } else {
-            int ask;
-            clusterNode *n = getNodeByQuery(c,c->cmd,c->argv,c->argc,&hashslot,&ask);
-            if (n == NULL) {
-                addReplyError(c,"Multi keys request invalid in cluster");
-                return REDIS_OK;
-            } else if (n != server.cluster.myself) {
-                addReplySds(c,sdscatprintf(sdsempty(),
-                    "-%s %d %s:%d\r\n", ask ? "ASK" : "MOVED",
-                    hashslot,n->ip,n->port));
-                return REDIS_OK;
-            }
-        }
-    }
-
-    /* Handle the maxmemory directive.
-     *
-     * First we try to free some memory if possible (if there are volatile
-     * keys in the dataset). If there are not the only thing we can do
-     * is returning an error. */
-    if (server.maxmemory) {
-        int retval = freeMemoryIfNeeded();
-        if ((c->cmd->flags & REDIS_CMD_DENYOOM) && retval == REDIS_ERR) {
-            addReply(c, shared.oomerr);
-            return REDIS_OK;
-        }
-    }
-
-    /* Don't accept write commands if there are problems persisting on disk. */
-    if (server.stop_writes_on_bgsave_err &&
-        server.saveparamslen > 0
-        && server.lastbgsave_status == REDIS_ERR &&
-        c->cmd->flags & REDIS_CMD_WRITE)
-    {
-        addReply(c, shared.bgsaveerr);
-        return REDIS_OK;
-    }
-
-    /* Don't accept wirte commands if this is a read only slave. But
-     * accept write commands if this is our master. */
-    if (server.masterhost && server.repl_slave_ro &&
-        !(c->flags & REDIS_MASTER) &&
-        c->cmd->flags & REDIS_CMD_WRITE)
-    {
-        addReply(c, shared.roslaveerr);
-        return REDIS_OK;
-    }
-
-    /* Only allow SUBSCRIBE and UNSUBSCRIBE in the context of Pub/Sub */
-    if ((dictSize(c->pubsub_channels) > 0 || listLength(c->pubsub_patterns) > 0)
-        &&
-        c->cmd->proc != subscribeCommand &&
-        c->cmd->proc != unsubscribeCommand &&
-        c->cmd->proc != psubscribeCommand &&
-        c->cmd->proc != punsubscribeCommand) {
-        addReplyError(c,"only (P)SUBSCRIBE / (P)UNSUBSCRIBE / QUIT allowed in this context");
-        return REDIS_OK;
-    }
-
-    /* Only allow INFO and SLAVEOF when slave-serve-stale-data is no and
-     * we are a slave with a broken link with master. */
-    if (server.masterhost && server.repl_state != REDIS_REPL_CONNECTED &&
-        server.repl_serve_stale_data == 0 &&
-        c->cmd->proc != infoCommand && c->cmd->proc != slaveofCommand)
-    {
-        addReply(c, shared.masterdownerr);
-        return REDIS_OK;
-    }
-
-    /* Loading DB? Return an error if the command is not INFO */
-    if (server.loading && c->cmd->proc != infoCommand) {
-        addReply(c, shared.loadingerr);
-        return REDIS_OK;
-    }
-
-    /* Lua script too slow? Only allow SHUTDOWN NOSAVE and SCRIPT KILL. */
-    if (server.lua_timedout &&
-        !(c->cmd->proc == shutdownCommand &&
-          c->argc == 2 &&
-          tolower(((char*)c->argv[1]->ptr)[0]) == 'n') &&
-        !(c->cmd->proc == scriptCommand &&
-          c->argc == 2 &&
-          tolower(((char*)c->argv[1]->ptr)[0]) == 'k'))
-    {
-        addReply(c, shared.slowscripterr);
-        return REDIS_OK;
-    }
-
-    /* Exec the command */
-    if (c->flags & REDIS_MULTI &&
-        c->cmd->proc != execCommand && c->cmd->proc != discardCommand &&
-        c->cmd->proc != multiCommand && c->cmd->proc != watchCommand)
-    {
-        queueMultiCommand(c);
-        addReply(c,shared.queued);
-    } else {
-        call(c,REDIS_CALL_FULL);
-    }
-    return REDIS_OK;
-}
-
-/*================================== Shutdown =============================== */
-
-int prepareForShutdown(int flags) {
-    int save = flags & REDIS_SHUTDOWN_SAVE;
-    int nosave = flags & REDIS_SHUTDOWN_NOSAVE;
-
-    redisLog(REDIS_WARNING,"User requested shutdown...");
-    /* Kill the saving child if there is a background saving in progress.
-       We want to avoid race conditions, for instance our saving child may
-       overwrite the synchronous saving did by SHUTDOWN. */
-    if (server.rdb_child_pid != -1) {
-        redisLog(REDIS_WARNING,"There is a child saving an .rdb. Killing it!");
-        kill(server.rdb_child_pid,SIGKILL);
-        rdbRemoveTempFile(server.rdb_child_pid);
-    }
-    if (server.aof_state != REDIS_AOF_OFF) {
-        /* Kill the AOF saving child as the AOF we already have may be longer
-         * but contains the full dataset anyway. */
-        if (server.aof_child_pid != -1) {
-            redisLog(REDIS_WARNING,
-                "There is a child rewriting the AOF. Killing it!");
-            kill(server.aof_child_pid,SIGKILL);
-        }
-        /* Append only file: fsync() the AOF and exit */
-        redisLog(REDIS_NOTICE,"Calling fsync() on the AOF file.");
-        aof_fsync(server.aof_fd);
-    }
-    if ((server.saveparamslen > 0 && !nosave) || save) {
-        redisLog(REDIS_NOTICE,"Saving the final RDB snapshot before exiting.");
-        /* Snapshotting. Perform a SYNC SAVE and exit */
-        if (rdbSave(server.rdb_filename) != REDIS_OK) {
-            /* Ooops.. error saving! The best we can do is to continue
-             * operating. Note that if there was a background saving process,
-             * in the next cron() Redis will be notified that the background
-             * saving aborted, handling special stuff like slaves pending for
-             * synchronization... */
-            redisLog(REDIS_WARNING,"Error trying to save the DB, can't exit.");
-            return REDIS_ERR;
-        }
-    }
-    if (server.daemonize) {
-        redisLog(REDIS_NOTICE,"Removing the pid file.");
-        unlink(server.pidfile);
-    }
-    /* Close the listening sockets. Apparently this allows faster restarts. */
-    if (server.ipfd != -1) close(server.ipfd);
-    if (server.sofd != -1) close(server.sofd);
-    if (server.unixsocket) {
-        redisLog(REDIS_NOTICE,"Removing the unix socket file.");
-        unlink(server.unixsocket); /* don't care if this fails */
-    }
-
-    redisLog(REDIS_WARNING,"Redis is now ready to exit, bye bye...");
-    return REDIS_OK;
-}
-
-/*================================== Commands =============================== */
-
-/* Return zero if strings are the same, non-zero if they are not.
- * The comparison is performed in a way that prevents an attacker to obtain
- * information about the nature of the strings just monitoring the execution
- * time of the function.
- *
- * Note that limiting the comparison length to strings up to 512 bytes we
- * can avoid leaking any information about the password length and any
- * possible branch misprediction related leak.
- */
-int time_independent_strcmp(char *a, char *b) {
-    char bufa[REDIS_AUTHPASS_MAX_LEN], bufb[REDIS_AUTHPASS_MAX_LEN];
-    /* The above two strlen perform len(a) + len(b) operations where either
-     * a or b are fixed (our password) length, and the difference is only
-     * relative to the length of the user provided string, so no information
-     * leak is possible in the following two lines of code. */
-    int alen = strlen(a);
-    int blen = strlen(b);
-    int j;
-    int diff = 0;
-
-    /* We can't compare strings longer than our static buffers.
-     * Note that this will never pass the first test in practical circumstances
-     * so there is no info leak. */
-    if (alen > sizeof(bufa) || blen > sizeof(bufb)) return 1;
-
-    memset(bufa,0,sizeof(bufa));        /* Constant time. */
-    memset(bufb,0,sizeof(bufb));        /* Constant time. */
-    /* Again the time of the following two copies is proportional to
-     * len(a) + len(b) so no info is leaked. */
-    memcpy(bufa,a,alen);
-    memcpy(bufb,b,blen);
-
-    /* Always compare all the chars in the two buffers without
-     * conditional expressions. */
-    for (j = 0; j < sizeof(bufa); j++) {
-        diff |= (bufa[j] ^ bufb[j]);
-    }
-    /* Length must be equal as well. */
-    diff |= alen ^ blen;
-    return diff; /* If zero strings are the same. */
-}
-
-void authCommand(redisClient *c) {
-    if (!server.requirepass) {
-        addReplyError(c,"Client sent AUTH, but no password is set");
-    } else if (!time_independent_strcmp(c->argv[1]->ptr, server.requirepass)) {
-      c->authenticated = 1;
-      addReply(c,shared.ok);
-    } else {
-      c->authenticated = 0;
-      addReplyError(c,"invalid password");
-    }
-}
-
-void pingCommand(redisClient *c) {
-    addReply(c,shared.pong);
-}
-
-void echoCommand(redisClient *c) {
-    addReplyBulk(c,c->argv[1]);
-}
-
-void timeCommand(redisClient *c) {
-    struct timeval tv;
-
-    /* gettimeofday() can only fail if &tv is a bad addresss so we
-     * don't check for errors. */
-    gettimeofday(&tv,NULL);
-    addReplyMultiBulkLen(c,2);
-    addReplyBulkLongLong(c,tv.tv_sec);
-    addReplyBulkLongLong(c,tv.tv_usec);
-}
-
-/* Convert an amount of bytes into a human readable string in the form
- * of 100B, 2G, 100M, 4K, and so forth. */
-void bytesToHuman(char *s, unsigned long long n) {
-    double d;
-
-    if (n < 1024) {
-        /* Bytes */
-        sprintf(s,"%lluB",n);
-        return;
-    } else if (n < (1024*1024)) {
-        d = (double)n/(1024);
-        sprintf(s,"%.2fK",d);
-    } else if (n < (1024LL*1024*1024)) {
-        d = (double)n/(1024*1024);
-        sprintf(s,"%.2fM",d);
-    } else if (n < (1024LL*1024*1024*1024)) {
-        d = (double)n/(1024LL*1024*1024);
-        sprintf(s,"%.2fG",d);
-    }
-}
-
-/* Create the string returned by the INFO command. This is decoupled
- * by the INFO command itself as we need to report the same information
- * on memory corruption problems. */
-sds genRedisInfoString(char *section) {
-    sds info = sdsempty();
-    time_t uptime = server.unixtime-server.stat_starttime;
-    int j, numcommands;
-    struct rusage self_ru, c_ru;
-    unsigned long lol, bib;
-    int allsections = 0, defsections = 0;
-    int sections = 0;
-
-    if (section) {
-        allsections = strcasecmp(section,"all") == 0;
-        defsections = strcasecmp(section,"default") == 0;
-    }
-
-    getrusage(RUSAGE_SELF, &self_ru);
-    getrusage(RUSAGE_CHILDREN, &c_ru);
-    getClientsMaxBuffers(&lol,&bib);
-
-    /* Server */
-    if (allsections || defsections || !strcasecmp(section,"server")) {
-        struct utsname name;
-
-        if (sections++) info = sdscat(info,"\r\n");
-        uname(&name);
-        info = sdscatprintf(info,
-            "# Server\r\n"
-            "redis_version:%s\r\n"
-            "redis_git_sha1:%s\r\n"
-            "redis_git_dirty:%d\r\n"
-            "os:%s %s %s\r\n"
-            "arch_bits:%d\r\n"
-            "multiplexing_api:%s\r\n"
-            "gcc_version:%d.%d.%d\r\n"
-            "process_id:%ld\r\n"
-            "run_id:%s\r\n"
-            "tcp_port:%d\r\n"
-            "uptime_in_seconds:%ld\r\n"
-            "uptime_in_days:%ld\r\n"
-            "lru_clock:%ld\r\n",
-            REDIS_VERSION,
-            redisGitSHA1(),
-            strtol(redisGitDirty(),NULL,10) > 0,
-            name.sysname, name.release, name.machine,
-            server.arch_bits,
-            aeGetApiName(),
-#ifdef __GNUC__
-            __GNUC__,__GNUC_MINOR__,__GNUC_PATCHLEVEL__,
-#else
-            0,0,0,
-#endif
-            (long) getpid(),
-            server.runid,
-            server.port,
-            uptime,
-            uptime/(3600*24),
-            (unsigned long) server.lruclock);
-    }
-
-    /* Clients */
-    if (allsections || defsections || !strcasecmp(section,"clients")) {
-        if (sections++) info = sdscat(info,"\r\n");
-        info = sdscatprintf(info,
-            "# Clients\r\n"
-            "connected_clients:%lu\r\n"
-            "client_longest_output_list:%lu\r\n"
-            "client_biggest_input_buf:%lu\r\n"
-            "blocked_clients:%d\r\n",
-            listLength(server.clients)-listLength(server.slaves),
-            lol, bib,
-            server.bpop_blocked_clients);
-    }
-
-    /* Memory */
-    if (allsections || defsections || !strcasecmp(section,"memory")) {
-        char hmem[64];
-        char peak_hmem[64];
-
-        bytesToHuman(hmem,zmalloc_used_memory());
-        bytesToHuman(peak_hmem,server.stat_peak_memory);
-        if (sections++) info = sdscat(info,"\r\n");
-        info = sdscatprintf(info,
-            "# Memory\r\n"
-            "used_memory:%zu\r\n"
-            "used_memory_human:%s\r\n"
-            "used_memory_rss:%zu\r\n"
-            "used_memory_peak:%zu\r\n"
-            "used_memory_peak_human:%s\r\n"
-            "used_memory_lua:%lld\r\n"
-            "mem_fragmentation_ratio:%.2f\r\n"
-            "mem_allocator:%s\r\n",
-            zmalloc_used_memory(),
-            hmem,
-            zmalloc_get_rss(),
-            server.stat_peak_memory,
-            peak_hmem,
-            ((long long)lua_gc(server.lua,LUA_GCCOUNT,0))*1024LL,
-            zmalloc_get_fragmentation_ratio(),
-            ZMALLOC_LIB
-            );
-    }
-
-    /* Persistence */
-    if (allsections || defsections || !strcasecmp(section,"persistence")) {
-        if (sections++) info = sdscat(info,"\r\n");
-        info = sdscatprintf(info,
-            "# Persistence\r\n"
-            "loading:%d\r\n"
-            "rdb_changes_since_last_save:%lld\r\n"
-            "rdb_bgsave_in_progress:%d\r\n"
-            "rdb_last_save_time:%ld\r\n"
-            "rdb_last_bgsave_status:%s\r\n"
-            "rdb_last_bgsave_time_sec:%ld\r\n"
-            "rdb_current_bgsave_time_sec:%ld\r\n"
-            "aof_enabled:%d\r\n"
-            "aof_rewrite_in_progress:%d\r\n"
-            "aof_rewrite_scheduled:%d\r\n"
-            "aof_last_rewrite_time_sec:%ld\r\n"
-            "aof_current_rewrite_time_sec:%ld\r\n",
-            server.loading,
-            server.dirty,
-            server.rdb_child_pid != -1,
-            server.lastsave,
-            server.lastbgsave_status == REDIS_OK ? "ok" : "err",
-            server.rdb_save_time_last,
-            (server.rdb_child_pid == -1) ?
-                -1 : time(NULL)-server.rdb_save_time_start,
-            server.aof_state != REDIS_AOF_OFF,
-            server.aof_child_pid != -1,
-            server.aof_rewrite_scheduled,
-            server.aof_rewrite_time_last,
-            (server.aof_child_pid == -1) ?
-                -1 : time(NULL)-server.aof_rewrite_time_start);
-
-        if (server.aof_state != REDIS_AOF_OFF) {
-            info = sdscatprintf(info,
-                "aof_current_size:%lld\r\n"
-                "aof_base_size:%lld\r\n"
-                "aof_pending_rewrite:%d\r\n"
-                "aof_buffer_length:%zu\r\n"
-                "aof_rewrite_buffer_length:%zu\r\n"
-                "aof_pending_bio_fsync:%llu\r\n"
-                "aof_delayed_fsync:%lu\r\n",
-                (long long) server.aof_current_size,
-                (long long) server.aof_rewrite_base_size,
-                server.aof_rewrite_scheduled,
-                sdslen(server.aof_buf),
-                aofRewriteBufferSize(),
-                bioPendingJobsOfType(REDIS_BIO_AOF_FSYNC),
-                server.aof_delayed_fsync);
-        }
-
-        if (server.loading) {
-            double perc;
-            time_t eta, elapsed;
-            off_t remaining_bytes = server.loading_total_bytes-
-                                    server.loading_loaded_bytes;
-
-            perc = ((double)server.loading_loaded_bytes /
-                   server.loading_total_bytes) * 100;
-
-            elapsed = server.unixtime-server.loading_start_time;
-            if (elapsed == 0) {
-                eta = 1; /* A fake 1 second figure if we don't have
-                            enough info */
-            } else {
-                eta = (elapsed*remaining_bytes)/server.loading_loaded_bytes;
-            }
-
-            info = sdscatprintf(info,
-                "loading_start_time:%ld\r\n"
-                "loading_total_bytes:%llu\r\n"
-                "loading_loaded_bytes:%llu\r\n"
-                "loading_loaded_perc:%.2f\r\n"
-                "loading_eta_seconds:%ld\r\n"
-                ,(unsigned long) server.loading_start_time,
-                (unsigned long long) server.loading_total_bytes,
-                (unsigned long long) server.loading_loaded_bytes,
-                perc,
-                eta
-            );
-        }
-    }
-
-    /* Stats */
-    if (allsections || defsections || !strcasecmp(section,"stats")) {
-        if (sections++) info = sdscat(info,"\r\n");
-        info = sdscatprintf(info,
-            "# Stats\r\n"
-            "total_connections_received:%lld\r\n"
-            "total_commands_processed:%lld\r\n"
-            "instantaneous_ops_per_sec:%lld\r\n"
-            "rejected_connections:%lld\r\n"
-            "expired_keys:%lld\r\n"
-            "evicted_keys:%lld\r\n"
-            "keyspace_hits:%lld\r\n"
-            "keyspace_misses:%lld\r\n"
-            "pubsub_channels:%ld\r\n"
-            "pubsub_patterns:%lu\r\n"
-            "latest_fork_usec:%lld\r\n",
-            server.stat_numconnections,
-            server.stat_numcommands,
-            getOperationsPerSecond(),
-            server.stat_rejected_conn,
-            server.stat_expiredkeys,
-            server.stat_evictedkeys,
-            server.stat_keyspace_hits,
-            server.stat_keyspace_misses,
-            dictSize(server.pubsub_channels),
-            listLength(server.pubsub_patterns),
-            server.stat_fork_time);
-    }
-
-    /* Replication */
-    if (allsections || defsections || !strcasecmp(section,"replication")) {
-        if (sections++) info = sdscat(info,"\r\n");
-        info = sdscatprintf(info,
-            "# Replication\r\n"
-            "role:%s\r\n",
-            server.masterhost == NULL ? "master" : "slave");
-        if (server.masterhost) {
-            info = sdscatprintf(info,
-                "master_host:%s\r\n"
-                "master_port:%d\r\n"
-                "master_link_status:%s\r\n"
-                "master_last_io_seconds_ago:%d\r\n"
-                "master_sync_in_progress:%d\r\n"
-                ,server.masterhost,
-                server.masterport,
-                (server.repl_state == REDIS_REPL_CONNECTED) ?
-                    "up" : "down",
-                server.master ?
-                ((int)(server.unixtime-server.master->lastinteraction)) : -1,
-                server.repl_state == REDIS_REPL_TRANSFER
-            );
-
-            if (server.repl_state == REDIS_REPL_TRANSFER) {
-                info = sdscatprintf(info,
-                    "master_sync_left_bytes:%ld\r\n"
-                    "master_sync_last_io_seconds_ago:%d\r\n"
-                    ,(long)server.repl_transfer_left,
-                    (int)(server.unixtime-server.repl_transfer_lastio)
-                );
-            }
-
-            if (server.repl_state != REDIS_REPL_CONNECTED) {
-                info = sdscatprintf(info,
-                    "master_link_down_since_seconds:%ld\r\n",
-                    (long)server.unixtime-server.repl_down_since);
-            }
-        }
-        info = sdscatprintf(info,
-            "connected_slaves:%lu\r\n",
-            listLength(server.slaves));
-        if (listLength(server.slaves)) {
-            int slaveid = 0;
-            listNode *ln;
-            listIter li;
-
-            listRewind(server.slaves,&li);
-            while((ln = listNext(&li))) {
-                redisClient *slave = listNodeValue(ln);
-                char *state = NULL;
-                char ip[32];
-                int port;
-
-                if (anetPeerToString(slave->fd,ip,&port) == -1) continue;
-                switch(slave->replstate) {
-                case REDIS_REPL_WAIT_BGSAVE_START:
-                case REDIS_REPL_WAIT_BGSAVE_END:
-                    state = "wait_bgsave";
-                    break;
-                case REDIS_REPL_SEND_BULK:
-                    state = "send_bulk";
-                    break;
-                case REDIS_REPL_ONLINE:
-                    state = "online";
-                    break;
-                }
-                if (state == NULL) continue;
-                info = sdscatprintf(info,"slave%d:%s,%d,%s\r\n",
-                    slaveid,ip,slave->slave_listening_port,state);
-                slaveid++;
-            }
-        }
-    }
-
-    /* CPU */
-    if (allsections || defsections || !strcasecmp(section,"cpu")) {
-        if (sections++) info = sdscat(info,"\r\n");
-        info = sdscatprintf(info,
-        "# CPU\r\n"
-        "used_cpu_sys:%.2f\r\n"
-        "used_cpu_user:%.2f\r\n"
-        "used_cpu_sys_children:%.2f\r\n"
-        "used_cpu_user_children:%.2f\r\n",
-        (float)self_ru.ru_stime.tv_sec+(float)self_ru.ru_stime.tv_usec/1000000,
-        (float)self_ru.ru_utime.tv_sec+(float)self_ru.ru_utime.tv_usec/1000000,
-        (float)c_ru.ru_stime.tv_sec+(float)c_ru.ru_stime.tv_usec/1000000,
-        (float)c_ru.ru_utime.tv_sec+(float)c_ru.ru_utime.tv_usec/1000000);
-    }
-
-    /* cmdtime */
-    if (allsections || !strcasecmp(section,"commandstats")) {
-        if (sections++) info = sdscat(info,"\r\n");
-        info = sdscatprintf(info, "# Commandstats\r\n");
-        numcommands = sizeof(redisCommandTable)/sizeof(struct redisCommand);
-        for (j = 0; j < numcommands; j++) {
-            struct redisCommand *c = redisCommandTable+j;
-
-            if (!c->calls) continue;
-            info = sdscatprintf(info,
-                "cmdstat_%s:calls=%lld,usec=%lld,usec_per_call=%.2f\r\n",
-                c->name, c->calls, c->microseconds,
-                (c->calls == 0) ? 0 : ((float)c->microseconds/c->calls));
-        }
-    }
-
-    /* Cluster */
-    if (allsections || defsections || !strcasecmp(section,"cluster")) {
-        if (sections++) info = sdscat(info,"\r\n");
-        info = sdscatprintf(info,
-        "# Cluster\r\n"
-        "cluster_enabled:%d\r\n",
-        server.cluster_enabled);
-    }
-
-    /* Key space */
-    if (allsections || defsections || !strcasecmp(section,"keyspace")) {
-        if (sections++) info = sdscat(info,"\r\n");
-        info = sdscatprintf(info, "# Keyspace\r\n");
-        for (j = 0; j < server.dbnum; j++) {
-            long long keys, vkeys;
-
-            keys = dictSize(server.db[j].dict);
-            vkeys = dictSize(server.db[j].expires);
-            if (keys || vkeys) {
-                info = sdscatprintf(info, "db%d:keys=%lld,expires=%lld\r\n",
-                    j, keys, vkeys);
-            }
-        }
-    }
-    return info;
-}
-
-void infoCommand(redisClient *c) {
-    char *section = c->argc == 2 ? c->argv[1]->ptr : "default";
-
-    if (c->argc > 2) {
-        addReply(c,shared.syntaxerr);
-        return;
-    }
-    sds info = genRedisInfoString(section);
-    addReplySds(c,sdscatprintf(sdsempty(),"$%lu\r\n",
-        (unsigned long)sdslen(info)));
-    addReplySds(c,info);
-    addReply(c,shared.crlf);
-}
-
-void monitorCommand(redisClient *c) {
-    /* ignore MONITOR if aleady slave or in monitor mode */
-    if (c->flags & REDIS_SLAVE) return;
-
-    c->flags |= (REDIS_SLAVE|REDIS_MONITOR);
-    c->slaveseldb = 0;
-    listAddNodeTail(server.monitors,c);
-    addReply(c,shared.ok);
-}
-
-/* ============================ Maxmemory directive  ======================== */
-
-/* This function gets called when 'maxmemory' is set on the config file to limit
- * the max memory used by the server, before processing a command.
- *
- * The goal of the function is to free enough memory to keep Redis under the
- * configured memory limit.
- *
- * The function starts calculating how many bytes should be freed to keep
- * Redis under the limit, and enters a loop selecting the best keys to
- * evict accordingly to the configured policy.
- *
- * If all the bytes needed to return back under the limit were freed the
- * function returns REDIS_OK, otherwise REDIS_ERR is returned, and the caller
- * should block the execution of commands that will result in more memory
- * used by the server.
- */
-int freeMemoryIfNeeded(void) {
-    size_t mem_used, mem_tofree, mem_freed;
-    int slaves = listLength(server.slaves);
-
-    /* Remove the size of slaves output buffers and AOF buffer from the
-     * count of used memory. */
-    mem_used = zmalloc_used_memory();
-    if (slaves) {
-        listIter li;
-        listNode *ln;
-
-        listRewind(server.slaves,&li);
-        while((ln = listNext(&li))) {
-            redisClient *slave = listNodeValue(ln);
-            unsigned long obuf_bytes = getClientOutputBufferMemoryUsage(slave);
-            if (obuf_bytes > mem_used)
-                mem_used = 0;
-            else
-                mem_used -= obuf_bytes;
-        }
-    }
-    if (server.aof_state != REDIS_AOF_OFF) {
-        mem_used -= sdslen(server.aof_buf);
-        mem_used -= aofRewriteBufferSize();
-    }
-
-    /* Check if we are over the memory limit. */
-    if (mem_used <= server.maxmemory) return REDIS_OK;
-
-    if (server.maxmemory_policy == REDIS_MAXMEMORY_NO_EVICTION)
-        return REDIS_ERR; /* We need to free memory, but policy forbids. */
-
-    /* Compute how much memory we need to free. */
-    mem_tofree = mem_used - server.maxmemory;
-    mem_freed = 0;
-    while (mem_freed < mem_tofree) {
-        int j, k, keys_freed = 0;
-
-        for (j = 0; j < server.dbnum; j++) {
-            long bestval = 0; /* just to prevent warning */
-            sds bestkey = NULL;
-            struct dictEntry *de;
-            redisDb *db = server.db+j;
-            dict *dict;
-
-            if (server.maxmemory_policy == REDIS_MAXMEMORY_ALLKEYS_LRU ||
-                server.maxmemory_policy == REDIS_MAXMEMORY_ALLKEYS_RANDOM)
-            {
-                dict = server.db[j].dict;
-            } else {
-                dict = server.db[j].expires;
-            }
-            if (dictSize(dict) == 0) continue;
-
-            /* volatile-random and allkeys-random policy */
-            if (server.maxmemory_policy == REDIS_MAXMEMORY_ALLKEYS_RANDOM ||
-                server.maxmemory_policy == REDIS_MAXMEMORY_VOLATILE_RANDOM)
-            {
-                de = dictGetRandomKey(dict);
-                bestkey = dictGetKey(de);
-            }
-
-            /* volatile-lru and allkeys-lru policy */
-            else if (server.maxmemory_policy == REDIS_MAXMEMORY_ALLKEYS_LRU ||
-                server.maxmemory_policy == REDIS_MAXMEMORY_VOLATILE_LRU)
-            {
-                for (k = 0; k < server.maxmemory_samples; k++) {
-                    sds thiskey;
-                    long thisval;
-                    robj *o;
-
-                    de = dictGetRandomKey(dict);
-                    thiskey = dictGetKey(de);
-                    /* When policy is volatile-lru we need an additonal lookup
-                     * to locate the real key, as dict is set to db->expires. */
-                    if (server.maxmemory_policy == REDIS_MAXMEMORY_VOLATILE_LRU)
-                        de = dictFind(db->dict, thiskey);
-                    o = dictGetVal(de);
-                    thisval = estimateObjectIdleTime(o);
-
-                    /* Higher idle time is better candidate for deletion */
-                    if (bestkey == NULL || thisval > bestval) {
-                        bestkey = thiskey;
-                        bestval = thisval;
-                    }
-                }
-            }
-
-            /* volatile-ttl */
-            else if (server.maxmemory_policy == REDIS_MAXMEMORY_VOLATILE_TTL) {
-                for (k = 0; k < server.maxmemory_samples; k++) {
-                    sds thiskey;
-                    long thisval;
-
-                    de = dictGetRandomKey(dict);
-                    thiskey = dictGetKey(de);
-                    thisval = (long) dictGetVal(de);
-
-                    /* Expire sooner (minor expire unix timestamp) is better
-                     * candidate for deletion */
-                    if (bestkey == NULL || thisval < bestval) {
-                        bestkey = thiskey;
-                        bestval = thisval;
-                    }
-                }
-            }
-
-            /* Finally remove the selected key. */
-            if (bestkey) {
-                long long delta;
-
-                robj *keyobj = createStringObject(bestkey,sdslen(bestkey));
-                propagateExpire(db,keyobj);
-                /* We compute the amount of memory freed by dbDelete() alone.
-                 * It is possible that actually the memory needed to propagate
-                 * the DEL in AOF and replication link is greater than the one
-                 * we are freeing removing the key, but we can't account for
-                 * that otherwise we would never exit the loop.
-                 *
-                 * AOF and Output buffer memory will be freed eventually so
-                 * we only care about memory used by the key space. */
-                delta = (long long) zmalloc_used_memory();
-                dbDelete(db,keyobj);
-                delta -= (long long) zmalloc_used_memory();
-                mem_freed += delta;
-                server.stat_evictedkeys++;
-                decrRefCount(keyobj);
-                keys_freed++;
-
-                /* When the memory to free starts to be big enough, we may
-                 * start spending so much time here that is impossible to
-                 * deliver data to the slaves fast enough, so we force the
-                 * transmission here inside the loop. */
-                if (slaves) flushSlavesOutputBuffers();
-            }
-        }
-        if (!keys_freed) return REDIS_ERR; /* nothing to free... */
-    }
-    return REDIS_OK;
-}
-
-/* =================================== Main! ================================ */
-
-#ifdef __linux__
-int linuxOvercommitMemoryValue(void) {
-    FILE *fp = fopen("/proc/sys/vm/overcommit_memory","r");
-    char buf[64];
-
-    if (!fp) return -1;
-    if (fgets(buf,64,fp) == NULL) {
-        fclose(fp);
-        return -1;
-    }
-    fclose(fp);
-
-    return atoi(buf);
-}
-
-void linuxOvercommitMemoryWarning(void) {
-    if (linuxOvercommitMemoryValue() == 0) {
-        redisLog(REDIS_WARNING,"WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.");
-    }
-}
-#endif /* __linux__ */
-
-void createPidFile(void) {
-    /* Try to write the pid file in a best-effort way. */
-    FILE *fp = fopen(server.pidfile,"w");
-    if (fp) {
-        fprintf(fp,"%d\n",(int)getpid());
-        fclose(fp);
-    }
-}
-
-void daemonize(void) {
-    int fd;
-
-    if (fork() != 0) exit(0); /* parent exits */
-    setsid(); /* create a new session */
-
-    /* Every output goes to /dev/null. If Redis is daemonized but
-     * the 'logfile' is set to 'stdout' in the configuration file
-     * it will not log at all. */
-    if ((fd = open("/dev/null", O_RDWR, 0)) != -1) {
-        dup2(fd, STDIN_FILENO);
-        dup2(fd, STDOUT_FILENO);
-        dup2(fd, STDERR_FILENO);
-        if (fd > STDERR_FILENO) close(fd);
-    }
-}
-
-void version() {
-    printf("Redis server v=%s sha=%s:%d malloc=%s bits=%d\n",
-        REDIS_VERSION,
-        redisGitSHA1(),
-        atoi(redisGitDirty()) > 0,
-        ZMALLOC_LIB,
-        sizeof(long) == 4 ? 32 : 64);
-    exit(0);
-}
-
-void usage() {
-    fprintf(stderr,"Usage: ./redis-server [/path/to/redis.conf] [options]\n");
-    fprintf(stderr,"       ./redis-server - (read config from stdin)\n");
-    fprintf(stderr,"       ./redis-server -v or --version\n");
-    fprintf(stderr,"       ./redis-server -h or --help\n");
-    fprintf(stderr,"       ./redis-server --test-memory <megabytes>\n\n");
-    fprintf(stderr,"Examples:\n");
-    fprintf(stderr,"       ./redis-server (run the server with default conf)\n");
-    fprintf(stderr,"       ./redis-server /etc/redis/6379.conf\n");
-    fprintf(stderr,"       ./redis-server --port 7777\n");
-    fprintf(stderr,"       ./redis-server --port 7777 --slaveof 127.0.0.1 8888\n");
-    fprintf(stderr,"       ./redis-server /etc/myredis.conf --loglevel verbose\n");
-    exit(1);
-}
-
-void redisAsciiArt(void) {
-#include "asciilogo.h"
-    char *buf = zmalloc(1024*16);
-
-    snprintf(buf,1024*16,ascii_logo,
-        REDIS_VERSION,
-        redisGitSHA1(),
-        strtol(redisGitDirty(),NULL,10) > 0,
-        (sizeof(long) == 8) ? "64" : "32",
-        server.cluster_enabled ? "cluster" : "stand alone",
-        server.port,
-        (long) getpid()
-    );
-    redisLogRaw(REDIS_NOTICE|REDIS_LOG_RAW,buf);
-    zfree(buf);
-}
-
-static void sigtermHandler(int sig) {
-    REDIS_NOTUSED(sig);
-
-    redisLogFromHandler(REDIS_WARNING,"Received SIGTERM, scheduling shutdown...");
-    server.shutdown_asap = 1;
-}
-
-void setupSignalHandlers(void) {
-    struct sigaction act;
-
-    /* When the SA_SIGINFO flag is set in sa_flags then sa_sigaction is used.
-     * Otherwise, sa_handler is used. */
-    sigemptyset(&act.sa_mask);
-    act.sa_flags = 0;
-    act.sa_handler = sigtermHandler;
-    sigaction(SIGTERM, &act, NULL);
-
-#ifdef HAVE_BACKTRACE
-    sigemptyset(&act.sa_mask);
-    act.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO;
-    act.sa_sigaction = sigsegvHandler;
-    sigaction(SIGSEGV, &act, NULL);
-    sigaction(SIGBUS, &act, NULL);
-    sigaction(SIGFPE, &act, NULL);
-    sigaction(SIGILL, &act, NULL);
-#endif
-    return;
-}
-
-void memtest(size_t megabytes, int passes);
-
-int main(int argc, char **argv) {
-    long long start;
-    struct timeval tv;
-
-    /* We need to initialize our libraries, and the server configuration. */
-    zmalloc_enable_thread_safeness();
-    srand(time(NULL)^getpid());
-    gettimeofday(&tv,NULL);
-    dictSetHashFunctionSeed(tv.tv_sec^tv.tv_usec^getpid());
-    initServerConfig();
-
-    if (argc >= 2) {
-        int j = 1; /* First option to parse in argv[] */
-        sds options = sdsempty();
-        char *configfile = NULL;
-
-        /* Handle special options --help and --version */
-        if (strcmp(argv[1], "-v") == 0 ||
-            strcmp(argv[1], "--version") == 0) version();
-        if (strcmp(argv[1], "--help") == 0 ||
-            strcmp(argv[1], "-h") == 0) usage();
-        if (strcmp(argv[1], "--test-memory") == 0) {
-            if (argc == 3) {
-                memtest(atoi(argv[2]),50);
-                exit(0);
-            } else {
-                fprintf(stderr,"Please specify the amount of memory to test in megabytes.\n");
-                fprintf(stderr,"Example: ./redis-server --test-memory 4096\n\n");
-                exit(1);
-            }
-        }
-
-        /* First argument is the config file name? */
-        if (argv[j][0] != '-' || argv[j][1] != '-')
-            configfile = argv[j++];
-        /* All the other options are parsed and conceptually appended to the
-         * configuration file. For instance --port 6380 will generate the
-         * string "port 6380\n" to be parsed after the actual file name
-         * is parsed, if any. */
-        while(j != argc) {
-            if (argv[j][0] == '-' && argv[j][1] == '-') {
-                /* Option name */
-                if (sdslen(options)) options = sdscat(options,"\n");
-                options = sdscat(options,argv[j]+2);
-                options = sdscat(options," ");
-            } else {
-                /* Option argument */
-                options = sdscatrepr(options,argv[j],strlen(argv[j]));
-                options = sdscat(options," ");
-            }
-            j++;
-        }
-        resetServerSaveParams();
-        loadServerConfig(configfile,options);
-        sdsfree(options);
-    } else {
-        redisLog(REDIS_WARNING,"Warning: no config file specified, using the default config. In order to specify a config file use 'redis-server /path/to/redis.conf'");
-    }
-    if (server.daemonize) daemonize();
-    initServer();
-    if (server.daemonize) createPidFile();
-    redisAsciiArt();
-    redisLog(REDIS_WARNING,"Server started, Redis version " REDIS_VERSION);
-#ifdef __linux__
-    linuxOvercommitMemoryWarning();
-#endif
-    start = ustime();
-    if (server.aof_state == REDIS_AOF_ON) {
-        if (loadAppendOnlyFile(server.aof_filename) == REDIS_OK)
-            redisLog(REDIS_NOTICE,"DB loaded from append only file: %.3f seconds",(float)(ustime()-start)/1000000);
-    } else {
-        if (rdbLoad(server.rdb_filename) == REDIS_OK) {
-            redisLog(REDIS_NOTICE,"DB loaded from disk: %.3f seconds",
-                (float)(ustime()-start)/1000000);
-        } else if (errno != ENOENT) {
-            redisLog(REDIS_WARNING,"Fatal error loading the DB. Exiting.");
-            exit(1);
-        }
-    }
-    if (server.ipfd > 0)
-        redisLog(REDIS_NOTICE,"The server is now ready to accept connections on port %d", server.port);
-    if (server.sofd > 0)
-        redisLog(REDIS_NOTICE,"The server is now ready to accept connections at %s", server.unixsocket);
-    aeSetBeforeSleepProc(server.el,beforeSleep);
-    aeMain(server.el);
-    aeDeleteEventLoop(server.el);
-    return 0;
-}
-
-/* The End */
-
diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/test/test_pygments.rb b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/test/test_pygments.rb deleted file mode 100644 index 61df666..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/test/test_pygments.rb +++ /dev/null @@ -1,287 +0,0 @@ -#coding: utf-8 - -require 'test/unit' -require File.join(File.dirname(__FILE__), '..', '/lib/pygments.rb') -ENV['mentos-test'] = "yes" - -P = Pygments - -class PygmentsHighlightTest < Test::Unit::TestCase - RUBY_CODE = "#!/usr/bin/ruby\nputs 'foo'" - RUBY_CODE_TRAILING_NEWLINE = "#!/usr/bin/ruby\nputs 'foo'\n" - REDIS_CODE = File.read(File.join(File.dirname(__FILE__), '..', '/test/test_data.c')) - - def test_highlight_defaults_to_html - code = P.highlight(RUBY_CODE) - assert_match '#!/usr/bin/ruby', code - assert_equal '
#!/usr/bin/ruby', code - assert_equal "
#!/usr/bin/ruby\nputs 'foo'\n
", code - end - - def test_full_table_highlight - code = P.highlight(RUBY_CODE, :options => {:linenos => true}) - assert_match '#!/usr/bin/ruby', code - assert_equal "
1\n2
#!/usr/bin/ruby\nputs 'foo'\n
\n
", code - end - - def test_highlight_works_with_larger_files - code = P.highlight(REDIS_CODE) - assert_match 'used_memory_peak_human', code - assert_equal 455203, code.bytesize.to_i - end - - def test_returns_nil_on_timeout - large_code = REDIS_CODE * 300 - code = P.highlight(large_code) # a 30 mb highlight request will timeout - assert_equal nil, code - end - - def test_highlight_works_with_null_bytes - code = P.highlight("\0hello", :lexer => 'rb') - assert_match "hello", code - end - - def test_highlight_works_on_utf8 - code = P.highlight('# ø', :lexer => 'rb', :options => {:encoding => 'utf-8'}) - assert_match "# ø", code - end - - def test_highlight_works_on_utf8_automatically - code = P.highlight('# ø', :lexer => 'rb') - assert_match "# ø", code - end - - def test_highlight_works_on_utf8_all_chars_automatically - code = P.highlight('def foo: # ø', :lexer => 'py') - - assert_equal '
 'rb', :options => {:encoding => 'utf-8'})
-    assert_match "# ø ø ø", code
-  end
-
-  def test_highlight_works_with_multiple_utf8_and_trailing_newline
-    code = P.highlight("#!/usr/bin/ruby\nputs 'ø..ø'\n", :lexer => 'rb')
-    assert_match "ø..ø", code
-  end
-
-  def test_highlight_formatter_bbcode
-    code = P.highlight(RUBY_CODE, :formatter => 'bbcode')
-    assert_match 'color=#408080][i]#!/usr/bin/ruby[/i]', code
-  end
-
-  def test_highlight_formatter_terminal
-    code = P.highlight(RUBY_CODE, :formatter => 'terminal')
-    assert_match '39;49;00m', code
-  end
-
-  def test_highlight_options
-    code = P.highlight(RUBY_CODE, :options => {:full => true, :title => 'test'})
-    assert_match 'test', code
-  end
-
-  def test_highlight_works_with_single_character_input
-    code = P.highlight("a")
-    assert_match 'a', code
-  end
-
-  def test_highlight_works_with_trailing_newline
-    code = P.highlight(RUBY_CODE_TRAILING_NEWLINE)
-    assert_match '#!/usr/bin/ruby', code
-  end
-
-  def test_highlight_works_with_multiple_newlines
-    code = P.highlight(RUBY_CODE_TRAILING_NEWLINE + "derp\n\n")
-    assert_match '#!/usr/bin/ruby', code
-  end
-
-  def test_highlight_works_with_trailing_cr
-    code = P.highlight(RUBY_CODE_TRAILING_NEWLINE + "\r")
-    assert_match '#!/usr/bin/ruby', code
-  end
-
-  def test_highlight_still_works_with_invalid_code
-    code = P.highlight("importr python;    wat?", :lexer => 'py')
-    assert_match ">importr", code
-  end
-end
-
-# Philosophically, I'm not the biggest fan of testing private
-# methods, but given the relative delicacy of validity checking
-# over the pipe I think it's necessary and informative.
-class PygmentsValidityTest < Test::Unit::TestCase
-  def test_add_ids_with_padding
-    res = P.send(:add_ids, "herp derp baz boo foo", "ABCDEFGH")
-    assert_equal "ABCDEFGH  herp derp baz boo foo  ABCDEFGH", res
-  end
-
-  def test_add_ids_on_empty_string
-    res = P.send(:add_ids, "", "ABCDEFGH")
-    assert_equal "ABCDEFGH    ABCDEFGH", res
-  end
-
-  def test_add_ids_with_unicode_data
-    res = P.send(:add_ids, "# ø ø ø", "ABCDEFGH")
-    assert_equal "ABCDEFGH  # ø ø ø  ABCDEFGH", res
-  end
-
-  def test_add_ids_with_starting_slashes
-    res = P.send(:add_ids, '\\# ø ø ø..//', "ABCDEFGH")
-    assert_equal "ABCDEFGH  \\# ø ø ø..//  ABCDEFGH", res
-  end
-
-  def test_get_fixed_bits_from_header
-    bits = P.send(:get_fixed_bits_from_header, '{"herp": "derp"}')
-    assert_equal "00000000000000000000000000010000", bits
-  end
-
-  def test_get_fixed_bits_from_header_works_with_large_headers
-    bits = P.send(:get_fixed_bits_from_header, '{"herp": "derp"}' * 10000)
-    assert_equal "00000000000000100111000100000000", bits
-  end
-
-  def test_size_check
-    size = "00000000000000000000000000100110"
-    res = P.send(:size_check, size)
-    assert_equal res, true
-  end
-
-  def test_size_check_bad
-    size = "some random thing"
-    res = P.send(:size_check, size)
-    assert_equal res, false
-  end
-end
-
-class PygmentsLexerTest < Test::Unit::TestCase
-  RUBY_CODE = "#!/usr/bin/ruby\nputs 'foo'"
-
-  def test_lexer_by_mimetype
-    assert_equal 'rb', P.lexer_name_for(:mimetype => 'text/x-ruby')
-    assert_equal 'json', P.lexer_name_for(:mimetype => 'application/json')
-  end
-
-  def test_lexer_by_filename
-    assert_equal 'rb', P.lexer_name_for(:filename => 'test.rb')
-    assert_equal 'scala', P.lexer_name_for(:filename => 'test.scala')
-  end
-
-  def test_lexer_by_name
-    assert_equal 'rb', P.lexer_name_for(:lexer => 'ruby')
-    assert_equal 'python', P.lexer_name_for(:lexer => 'python')
-    assert_equal 'c', P.lexer_name_for(:lexer => 'c')
-  end
-
-  def test_lexer_by_filename_and_content
-    assert_equal 'rb', P.lexer_name_for(RUBY_CODE, :filename => 'test.rb')
-  end
-
-  def test_lexer_by_content
-    assert_equal 'rb', P.lexer_name_for(RUBY_CODE)
-  end
-
-  def test_lexer_by_nothing
-    assert_raise MentosError do
-      P.lexer_name_for(:invalid => true)
-    end
-  end
-end
-
-class PygmentsLexerClassTest < Test::Unit::TestCase
-  def test_find
-    assert_equal 'Ruby', P::Lexer['Ruby'].name
-    assert_equal 'Ruby', P::Lexer['ruby'].name
-    assert_equal 'Ruby', P::Lexer['rb'].name
-    assert_equal 'Ruby', P::Lexer['rake'].name
-    assert_equal 'Ruby', P::Lexer['gemspec'].name
-  end
-
-  def test_find_by_name
-    assert_equal P::Lexer['Ruby'], P::Lexer.find_by_name('Ruby')
-    assert_equal P::Lexer['C'], P::Lexer.find_by_name('C')
-  end
-
-  def test_find_by_alias
-    assert_equal P::Lexer['Ruby'], P::Lexer.find_by_alias('rb')
-    assert_equal P::Lexer['Ruby'], P::Lexer.find_by_alias('ruby')
-    assert_equal P::Lexer['Scala'], P::Lexer.find_by_alias('scala')
-    assert_equal P::Lexer['Go'], P::Lexer.find_by_alias('go')
-  end
-
-  def test_find_lexer_by_extname
-    assert_equal P::Lexer['Ruby'], P::Lexer.find_by_extname('.rb')
-    assert_equal P::Lexer['PHP'], P::Lexer.find_by_extname('.php4')
-    assert_equal P::Lexer['PHP'], P::Lexer.find_by_extname('.php5')
-    assert_equal P::Lexer['Groff'], P::Lexer.find_by_extname('.1')
-    assert_equal P::Lexer['Groff'], P::Lexer.find_by_extname('.3')
-    assert_equal P::Lexer['C'], P::Lexer.find_by_extname('.c')
-    assert_equal P::Lexer['Python'], P::Lexer.find_by_extname('.py')
-    assert_equal P::Lexer['Java'], P::Lexer.find_by_extname('.java')
-  end
-
- def test_find_lexer_by_mimetype
-    assert_equal P::Lexer['Ruby'], P::Lexer.find_by_mimetype('text/x-ruby')
-    assert_equal P::Lexer['JSON'], P::Lexer.find_by_mimetype('application/json')
-    assert_equal P::Lexer['Python'], P::Lexer.find_by_mimetype('text/x-python')
-  end
-end
-
-
-class PygmentsCssTest < Test::Unit::TestCase
-  include Pygments
-
-  def test_css
-    assert_match /^\.err \{/, P.css
-  end
-
-  def test_css_prefix
-    assert_match /^\.highlight \.err \{/, P.css('.highlight')
-  end
-
-  def test_css_options
-    assert_match /^\.codeerr \{/, P.css(:classprefix => 'code')
-  end
-
-  def test_css_prefix_and_options
-    assert_match /^\.mycode \.codeerr \{/, P.css('.mycode', :classprefix => 'code')
-  end
-
-  def test_css_default
-    assert_match '.c { color: #408080; font-style: italic }', P.css
-  end
-
-  def test_css_colorful
-    assert_match '.c { color: #888888 }', P.css(:style => 'colorful')
-  end
-end
-
-class PygmentsConfigTest < Test::Unit::TestCase
-  def test_styles
-    assert P.styles.include?('colorful')
-  end
-
-  def test_filters
-    assert P.filters.include?('codetagify')
-  end
-
-  def test_lexers
-    list = P.lexers
-    assert list.has_key?('Ruby')
-    assert list['Ruby'][:aliases].include?('duby')
-  end
-
-  def test_formatters
-    list = P.formatters
-    assert list.has_key?('Html')
-    assert list['Html'][:aliases].include?('html')
-  end
-end
-
-
diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/custom_lexers/github.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/custom_lexers/github.py
deleted file mode 100644
index f6cfe57..0000000
--- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/custom_lexers/github.py
+++ /dev/null
@@ -1,565 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-    pygments.lexers.github
-    ~~~~~~~~~~~~~~~~~~~
-
-    Custom lexers for GitHub.com
-
-    :copyright: Copyright 2012 by GitHub, Inc
-    :license: BSD, see LICENSE for details.
-"""
-import re
-
-from pygments.lexer import RegexLexer, ExtendedRegexLexer, include, bygroups, \
-    using, DelegatingLexer
-from pygments.token import Text, Name, Number, String, Comment, Punctuation, \
-     Other, Keyword, Operator, Literal, Whitespace
-
-__all__ = ['Dasm16Lexer', 'PuppetLexer', 'AugeasLexer', "TOMLLexer", "SlashLexer"]
-
-class Dasm16Lexer(RegexLexer):
-    """
-    Simple lexer for DCPU-16 Assembly
-
-    Check http://0x10c.com/doc/dcpu-16.txt
-    """
-    name = 'dasm16'
-    aliases = ['DASM16']
-    filenames = ['*.dasm16', '*.dasm']
-    mimetypes = ['text/x-dasm16']
-
-    INSTRUCTIONS = [
-        'SET',
-        'ADD', 'SUB',
-        'MUL', 'MLI',
-        'DIV', 'DVI',
-        'MOD', 'MDI',
-        'AND', 'BOR', 'XOR',
-        'SHR', 'ASR', 'SHL',
-        'IFB', 'IFC', 'IFE', 'IFN', 'IFG', 'IFA', 'IFL', 'IFU',
-        'ADX', 'SBX',
-        'STI', 'STD',
-        'JSR',
-        'INT', 'IAG', 'IAS', 'RFI', 'IAQ', 'HWN', 'HWQ', 'HWI',
-    ]
-
-    REGISTERS = [
-        'A', 'B', 'C',
-        'X', 'Y', 'Z',
-        'I', 'J',
-        'SP', 'PC', 'EX',
-        'POP', 'PEEK', 'PUSH'
-    ]
-
-    # Regexes yo
-    char = r'[a-zA-Z$._0-9@]'
-    identifier = r'(?:[a-zA-Z$_]' + char + '*|\.' + char + '+)'
-    number = r'[+-]?(?:0[xX][a-zA-Z0-9]+|\d+)'
-    binary_number = r'0b[01_]+'
-    instruction = r'(?i)(' + '|'.join(INSTRUCTIONS) + ')'
-    single_char = r"'\\?" + char + "'"
-    string = r'"(\\"|[^"])*"'
-
-    def guess_identifier(lexer, match):
-        ident = match.group(0)
-        klass = Name.Variable if ident.upper() in lexer.REGISTERS else Name.Label
-        yield match.start(), klass, ident
-
-    tokens = {
-        'root': [
-            include('whitespace'),
-            (':' + identifier, Name.Label),
-            (identifier + ':', Name.Label),
-            (instruction, Name.Function, 'instruction-args'),
-            (r'\.' + identifier, Name.Function, 'data-args'),
-            (r'[\r\n]+', Text)
-        ],
-
-        'numeric' : [
-            (binary_number, Number.Integer),
-            (number, Number.Integer),
-            (single_char, String),
-        ],
-
-        'arg' : [
-            (identifier, guess_identifier),
-            include('numeric')
-        ],
-
-        'deref' : [
-            (r'\+', Punctuation),
-            (r'\]', Punctuation, '#pop'),
-            include('arg'),
-            include('whitespace')
-        ],
-
-        'instruction-line' : [
-            (r'[\r\n]+', Text, '#pop'),
-            (r';.*?$', Comment, '#pop'),
-            include('whitespace')
-        ],
-
-        'instruction-args': [
-            (r',', Punctuation),
-            (r'\[', Punctuation, 'deref'),
-            include('arg'),
-            include('instruction-line')
-        ],
-
-        'data-args' : [
-            (r',', Punctuation),
-            include('numeric'),
-            (string, String),
-            include('instruction-line')
-        ],
-
-        'whitespace': [
-            (r'\n', Text),
-            (r'\s+', Text),
-            (r';.*?\n', Comment)
-        ],
-    }
-
-class PuppetLexer(RegexLexer):
-    name = 'Puppet'
-    aliases = ['puppet']
-    filenames = ['*.pp']
-
-    tokens = {
-        'root': [
-            include('puppet'),
-        ],
-        'puppet': [
-            include('comments'),
-            (r'(class)(\s*)(\{)', bygroups(Name.Class, Text, Punctuation), ('type', 'namevar')),
-            (r'(class|define)', Keyword.Declaration, ('block','class_name')),
-            (r'node', Keyword.Declaration, ('block', 'node_name')),
-            (r'elsif', Keyword.Reserved, ('block', 'conditional')),
-            (r'if', Keyword.Reserved, ('block', 'conditional')),
-            (r'unless', Keyword.Reserved, ('block', 'conditional')),
-            (r'(else)(\s*)(\{)', bygroups(Keyword.Reserved, Text, Punctuation), 'block'),
-            (r'case', Keyword.Reserved, ('case', 'conditional')),
-            (r'(::)?([A-Z][\w:]+)+(\s*)(<{1,2}\|)', bygroups(Name.Class, Name.Class, Text, Punctuation), 'spaceinvader'),
-            (r'(::)?([A-Z][\w:]+)+(\s*)(\{)', bygroups(Name.Class, Name.Class, Text, Punctuation), 'type'),
-            (r'(::)?([A-Z][\w:]+)+(\s*)(\[)', bygroups(Name.Class, Name.Class, Text, Punctuation), ('type', 'override_name')),
-            (r'(@{0,2}[\w:]+)(\s*)(\{)(\s*)', bygroups(Name.Class, Text, Punctuation, Text), ('type', 'namevar')),
-            (r'\$(::)?(\w+::)*\w+', Name.Variable, 'var_assign'),
-            (r'(include|require)', Keyword.Namespace, 'include'),
-            (r'import', Keyword.Namespace, 'import'),
-            (r'(\w+)(\()', bygroups(Name.Function, Punctuation), 'function'),
-            (r'\s', Text),
-        ],
-        'block': [
-            include('puppet'),
-            (r'\}', Text, '#pop'),
-        ],
-        'override_name': [
-            include('strings'),
-            include('variables'),
-            (r'\]', Punctuation),
-            (r'\s', Text),
-            (r'\{', Punctuation, '#pop'),
-        ],
-        'node_name': [
-            (r'inherits', Keyword.Declaration),
-            (r'[\w\.]+', String),
-            include('strings'),
-            include('variables'),
-            (r',', Punctuation),
-            (r'\s', Text),
-            (r'\{', Punctuation, '#pop'),
-        ],
-        'class_name': [
-            (r'inherits', Keyword.Declaration),
-            (r'[\w:]+', Name.Class),
-            (r'\s', Text),
-            (r'\{', Punctuation, '#pop'),
-            (r'\(', Punctuation, 'paramlist'),
-        ],
-        'include': [
-            (r'\n', Text, '#pop'),
-            (r'[\w:-]+', Name.Class),
-            include('value'),
-            (r'\s', Text),
-        ],
-        'import': [
-            (r'\n', Text, '#pop'),
-            (r'[\/\w\.]+', String),
-            include('value'),
-            (r'\s', Text),
-        ],
-        'case': [
-            (r'(default)(:)(\s*)(\{)', bygroups(Keyword.Reserved, Punctuation, Text, Punctuation), 'block'),
-            include('case_values'),
-            (r'(:)(\s*)(\{)', bygroups(Punctuation, Text, Punctuation), 'block'),
-            (r'\s', Text),
-            (r'\}', Punctuation, '#pop'),
-        ],
-        'case_values': [
-            include('value'),
-            (r',', Punctuation),
-        ],
-        'comments': [
-            (r'\s*#.*\n', Comment.Singleline),
-        ],
-        'strings': [
-            (r"'.*?'", String.Single),
-            (r'\w+', String.Symbol),
-            (r'"', String.Double, 'dblstring'),
-            (r'\/.+?\/', String.Regex),
-        ],
-        'dblstring': [
-            (r'\$\{.+?\}', String.Interpol),
-            (r'(?:\\(?:[bdefnrstv\'"\$\\/]|[0-7][0-7]?[0-7]?|\^[a-zA-Z]))', String.Escape),
-            (r'[^"\\\$]+', String.Double),
-            (r'\$', String.Double),
-            (r'"', String.Double, '#pop'),
-        ],
-        'variables': [
-            (r'\$(::)?(\w+::)*\w+', Name.Variable),
-        ],
-        'var_assign': [
-            (r'\[', Punctuation, ('#pop', 'array')),
-            (r'\{', Punctuation, ('#pop', 'hash')),
-            (r'(\s*)(=)(\s*)', bygroups(Text, Operator, Text)),
-            (r'(\(|\))', Punctuation),
-            include('operators'),
-            include('value'),
-            (r'\s', Text, '#pop'),
-        ],
-        'booleans': [
-            (r'(true|false)', Literal),
-        ],
-        'operators': [
-            (r'(\s*)(==|=~|\*|-|\+|<<|>>|!=|!~|!|>=|<=|<|>|and|or|in)(\s*)', bygroups(Text, Operator, Text)),
-        ],
-        'conditional': [
-            include('operators'),
-            include('strings'),
-            include('variables'),
-            (r'\[', Punctuation, 'array'),
-            (r'\(', Punctuation, 'conditional'),
-            (r'\{', Punctuation, '#pop'),
-            (r'\)', Punctuation, '#pop'),
-            (r'\s', Text),
-        ],
-        'spaceinvader': [
-            include('operators'),
-            include('strings'),
-            include('variables'),
-            (r'\[', Punctuation, 'array'),
-            (r'\(', Punctuation, 'conditional'),
-            (r'\s', Text),
-            (r'\|>{1,2}', Punctuation, '#pop'),
-        ],
-        'namevar': [
-            include('value'),
-            (r'\[', Punctuation, 'array'),
-            (r'\s', Text),
-            (r':', Punctuation, '#pop'),
-            (r'\}', Punctuation, '#pop'),
-        ],
-        'function': [
-            (r'\[', Punctuation, 'array'),
-            include('value'),
-            (r',', Punctuation),
-            (r'\s', Text),
-            (r'\)', Punctuation, '#pop'),
-        ],
-        'paramlist': [
-            include('value'),
-            (r'=', Punctuation),
-            (r',', Punctuation),
-            (r'\s', Text),
-            (r'\[', Punctuation, 'array'),
-            (r'\)', Punctuation, '#pop'),
-        ],
-        'type': [
-            (r'(\w+)(\s*)(=>)(\s*)', bygroups(Name.Tag, Text, Punctuation, Text), 'param_value'),
-            (r'\}', Punctuation, '#pop'),
-            (r'\s', Text),
-            include('comments'),
-            (r'', Text, 'namevar'),
-        ],
-        'value': [
-            (r'[\d\.]', Number),
-            (r'([A-Z][\w:]+)+(\[)', bygroups(Name.Class, Punctuation), 'array'),
-            (r'(\w+)(\()', bygroups(Name.Function, Punctuation), 'function'),
-            include('strings'),
-            include('variables'),
-            include('comments'),
-            include('booleans'),
-            (r'(\s*)(\?)(\s*)(\{)', bygroups(Text, Punctuation, Text, Punctuation), 'selector'),
-            (r'\{', Punctuation, 'hash'),
-        ],
-        'selector': [
-            (r'default', Keyword.Reserved),
-            include('value'),
-            (r'=>', Punctuation),
-            (r',', Punctuation),
-            (r'\s', Text),
-            (r'\}', Punctuation, '#pop'),
-        ],
-        'param_value': [
-            include('value'),
-            (r'\[', Punctuation, 'array'),
-            (r',', Punctuation, '#pop'),
-            (r';', Punctuation, '#pop'),
-            (r'\s', Text, '#pop'),
-            (r'', Text, '#pop'),
-        ],
-        'array': [
-            include('value'),
-            (r'\[', Punctuation, 'array'),
-            (r',', Punctuation),
-            (r'\s', Text),
-            (r'\]', Punctuation, '#pop'),
-        ],
-        'hash': [
-            include('value'),
-            (r'\s', Text),
-            (r'=>', Punctuation),
-            (r',', Punctuation),
-            (r'\}', Punctuation, '#pop'),
-        ],
-    }
-
-class AugeasLexer(RegexLexer):
-    name = 'Augeas'
-    aliases = ['augeas']
-    filenames = ['*.aug']
-
-    tokens = {
-        'root': [
-            (r'(module)(\s*)([^\s=]+)', bygroups(Keyword.Namespace, Text, Name.Namespace)),
-            (r'(let)(\s*)([^\s=]+)', bygroups(Keyword.Declaration, Text, Name.Variable)),
-            (r'(del|store|value|counter|seq|key|label|autoload|incl|excl|transform|test|get|put)(\s+)', bygroups(Name.Builtin, Text)),
-            (r'(\()([^\:]+)(\:)(unit|string|regexp|lens|tree|filter)(\))', bygroups(Punctuation, Name.Variable, Punctuation, Keyword.Type, Punctuation)),
-            (r'\(\*', Comment.Multiline, 'comment'),
-            (r'[\+=\|\.\*\;\?-]', Operator),
-            (r'[\[\]\(\)\{\}]', Operator),
-            (r'"', String.Double, 'string'),
-            (r'\/', String.Regex, 'regex'),
-            (r'([A-Z]\w*)(\.)(\w+)', bygroups(Name.Namespace, Punctuation, Name.Variable)),
-            (r'.', Name.Variable),
-            (r'\s', Text),
-        ],
-        'string': [
-            (r'\\.', String.Escape),
-            (r'[^"]', String.Double),
-            (r'"', String.Double, '#pop'),
-        ],
-        'regex': [
-            (r'\\.', String.Escape),
-            (r'[^\/]', String.Regex),
-            (r'\/', String.Regex, '#pop'),
-        ],
-        'comment': [
-            (r'[^*\)]', Comment.Multiline),
-            (r'\(\*', Comment.Multiline, '#push'),
-            (r'\*\)', Comment.Multiline, '#pop'),
-            (r'[\*\)]', Comment.Multiline)
-        ],
-    }
-
-class TOMLLexer(RegexLexer):
-    """
-    Lexer for TOML, a simple language for config files
-    """
-
-    name = 'TOML'
-    aliases = ['toml']
-    filenames = ['*.toml']
-
-    tokens = {
-        'root': [
-
-            # Basics, comments, strings
-            (r'\s+', Text),
-            (r'#.*?$', Comment.Single),
-            (r'"(\\\\|\\"|[^"])*"', String),
-            (r'(true|false)$', Keyword.Constant),
-            ('[a-zA-Z_][a-zA-Z0-9_\-]*', Name),
-
-            # Datetime
-            (r'\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z', Number.Integer),
-
-            # Numbers
-            (r'(\d+\.\d*|\d*\.\d+)([eE][+-]?[0-9]+)?j?', Number.Float),
-            (r'\d+[eE][+-]?[0-9]+j?', Number.Float),
-            (r'\-?\d+', Number.Integer),
-
-            # Punctuation
-            (r'[]{}:(),;[]', Punctuation),
-            (r'\.', Punctuation),
-
-            # Operators
-            (r'=', Operator)
-
-        ]
-    }
-
-class SlashLanguageLexer(ExtendedRegexLexer):
-    _nkw = r'(?=[^a-zA-Z_0-9])'
-
-    def move_state(new_state):
-        return ("#pop", new_state)
-
-    def right_angle_bracket(lexer, match, ctx):
-        if len(ctx.stack) > 1 and ctx.stack[-2] == "string":
-            ctx.stack.pop()
-        yield match.start(), String.Interpol, u"}"
-        ctx.pos = match.end()
-        pass
-
-    tokens = {
-        "root": [
-            (r"<%=",        Comment.Preproc,    move_state("slash")),
-            (r"<%!!",       Comment.Preproc,    move_state("slash")),
-            (r"<%#.*?%>",   Comment.Multiline),
-            (r"<%",         Comment.Preproc,    move_state("slash")),
-            (r".|\n",       Other),
-        ],
-        "string": [
-            (r"\\",         String.Escape,      move_state("string_e")),
-            (r"\"",         String,             move_state("slash")),
-            (r"#\{",        String.Interpol,    "slash"),
-            (r'.|\n',       String),
-        ],
-        "string_e": [
-            (r'n',                  String.Escape,      move_state("string")),
-            (r't',                  String.Escape,      move_state("string")),
-            (r'r',                  String.Escape,      move_state("string")),
-            (r'e',                  String.Escape,      move_state("string")),
-            (r'x[a-fA-F0-9]{2}',    String.Escape,      move_state("string")),
-            (r'.',                  String.Escape,      move_state("string")),
-        ],
-        "regexp": [
-            (r'}[a-z]*',            String.Regex,       move_state("slash")),
-            (r'\\(.|\n)',           String.Regex),
-            (r'{',                  String.Regex,       "regexp_r"),
-            (r'.|\n',               String.Regex),
-        ],
-        "regexp_r": [
-            (r'}[a-z]*',            String.Regex,       "#pop"),
-            (r'\\(.|\n)',           String.Regex),
-            (r'{',                  String.Regex,       "regexp_r"),
-        ],
-        "slash": [
-            (r"%>",                     Comment.Preproc,    move_state("root")),
-            (r"\"",                     String,             move_state("string")),
-            (r"'[a-zA-Z0-9_]+",         String),
-            (r'%r{',                    String.Regex,       move_state("regexp")),
-            (r'/\*.*?\*/',              Comment.Multiline),
-            (r"(#|//).*?\n",            Comment.Single),
-            (r'-?[0-9]+e[+-]?[0-9]+',   Number.Float),
-            (r'-?[0-9]+\.[0-9]+(e[+-]?[0-9]+)?', Number.Float),
-            (r'-?[0-9]+',               Number.Integer),
-            (r'nil'+_nkw,               Name.Builtin),
-            (r'true'+_nkw,              Name.Builtin),
-            (r'false'+_nkw,             Name.Builtin),
-            (r'self'+_nkw,              Name.Builtin),
-            (r'(class)(\s+)([A-Z][a-zA-Z0-9_\']*)',
-                bygroups(Keyword, Whitespace, Name.Class)),
-            (r'class'+_nkw,             Keyword),
-            (r'extends'+_nkw,           Keyword),
-            (r'(def)(\s+)(self)(\s*)(\.)(\s*)([a-z_][a-zA-Z0-9_\']*=?|<<|>>|==|<=>|<=|<|>=|>|\+|-(self)?|~(self)?|\*|/|%|^|&&|&|\||\[\]=?)',
-                bygroups(Keyword, Whitespace, Name.Builtin, Whitespace, Punctuation, Whitespace, Name.Function)),
-            (r'(def)(\s+)([a-z_][a-zA-Z0-9_\']*=?|<<|>>|==|<=>|<=|<|>=|>|\+|-(self)?|~(self)?|\*|/|%|^|&&|&|\||\[\]=?)',
-                bygroups(Keyword, Whitespace, Name.Function)),
-            (r'def'+_nkw,               Keyword),
-            (r'if'+_nkw,                Keyword),
-            (r'elsif'+_nkw,             Keyword),
-            (r'else'+_nkw,              Keyword),
-            (r'unless'+_nkw,            Keyword),
-            (r'for'+_nkw,               Keyword),
-            (r'in'+_nkw,                Keyword),
-            (r'while'+_nkw,             Keyword),
-            (r'until'+_nkw,             Keyword),
-            (r'and'+_nkw,               Keyword),
-            (r'or'+_nkw,                Keyword),
-            (r'not'+_nkw,               Keyword),
-            (r'lambda'+_nkw,            Keyword),
-            (r'try'+_nkw,               Keyword),
-            (r'catch'+_nkw,             Keyword),
-            (r'return'+_nkw,            Keyword),
-            (r'next'+_nkw,              Keyword),
-            (r'last'+_nkw,              Keyword),
-            (r'throw'+_nkw,             Keyword),
-            (r'use'+_nkw,               Keyword),
-            (r'switch'+_nkw,            Keyword),
-            (r'\\',                     Keyword),
-            (r'λ',                      Keyword),
-            (r'__FILE__'+_nkw,          Name.Builtin.Pseudo),
-            (r'__LINE__'+_nkw,          Name.Builtin.Pseudo),
-            (r'[A-Z][a-zA-Z0-9_\']*'+_nkw, Name.Constant),
-            (r'[a-z_][a-zA-Z0-9_\']*'+_nkw, Name),
-            (r'@[a-z_][a-zA-Z0-9_\']*'+_nkw, Name.Variable.Instance),
-            (r'@@[a-z_][a-zA-Z0-9_\']*'+_nkw, Name.Variable.Class),
-            (r'\(',                     Punctuation),
-            (r'\)',                     Punctuation),
-            (r'\[',                     Punctuation),
-            (r'\]',                     Punctuation),
-            (r'\{',                     Punctuation),
-            (r'\}',                     right_angle_bracket),
-            (r';',                      Punctuation),
-            (r',',                      Punctuation),
-            (r'<<=',                    Operator),
-            (r'>>=',                    Operator),
-            (r'<<',                     Operator),
-            (r'>>',                     Operator),
-            (r'==',                     Operator),
-            (r'!=',                     Operator),
-            (r'=>',                     Operator),
-            (r'=',                      Operator),
-            (r'<=>',                    Operator),
-            (r'<=',                     Operator),
-            (r'>=',                     Operator),
-            (r'<',                      Operator),
-            (r'>',                      Operator),
-            (r'\+\+',                   Operator),
-            (r'\+=',                    Operator),
-            (r'-=',                     Operator),
-            (r'\*\*=',                  Operator),
-            (r'\*=',                    Operator),
-            (r'\*\*',                   Operator),
-            (r'\*',                     Operator),
-            (r'/=',                     Operator),
-            (r'\+',                     Operator),
-            (r'-',                      Operator),
-            (r'/',                      Operator),
-            (r'%=',                     Operator),
-            (r'%',                      Operator),
-            (r'^=',                     Operator),
-            (r'&&=',                    Operator),
-            (r'&=',                     Operator),
-            (r'&&',                     Operator),
-            (r'&',                      Operator),
-            (r'\|\|=',                  Operator),
-            (r'\|=',                    Operator),
-            (r'\|\|',                   Operator),
-            (r'\|',                     Operator),
-            (r'!',                      Operator),
-            (r'\.\.\.',                 Operator),
-            (r'\.\.',                   Operator),
-            (r'\.',                     Operator),
-            (r'::',                     Operator),
-            (r':',                      Operator),
-            (r'(\s|\n)+',               Whitespace),
-            (r'[a-z_][a-zA-Z0-9_\']*',  Name.Variable),
-        ],
-    }
-
-class SlashLexer(DelegatingLexer):
-    """
-    Lexer for the Slash programming language.
-    """
-
-    name = 'Slash'
-    aliases = ['slash']
-    filenames = ['*.sl']
-
-    def __init__(self, **options):
-        from pygments.lexers.web import HtmlLexer
-        super(SlashLexer, self).__init__(HtmlLexer, SlashLanguageLexer, **options)
-
diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/AUTHORS b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/AUTHORS
deleted file mode 100644
index 1bedef4..0000000
--- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/AUTHORS
+++ /dev/null
@@ -1,172 +0,0 @@
-Pygments is written and maintained by Georg Brandl .
-
-Major developers are Tim Hatch  and Armin Ronacher
-.
-
-Other contributors, listed alphabetically, are:
-
-* Sam Aaron -- Ioke lexer
-* Ali Afshar -- image formatter
-* Thomas Aglassinger -- Rexx lexer
-* Kumar Appaiah -- Debian control lexer
-* Andreas Amann -- AppleScript lexer
-* Timothy Armstrong -- Dart lexer fixes
-* Jeffrey Arnold -- R/S, Rd, BUGS, Jags, and Stan lexers
-* Jeremy Ashkenas -- CoffeeScript lexer
-* Stefan Matthias Aust -- Smalltalk lexer
-* Ben Bangert -- Mako lexers
-* Max Battcher -- Darcs patch lexer
-* Thomas Baruchel -- APL lexer
-* Tim Baumann -- (Literate) Agda lexer
-* Paul Baumgart, 280 North, Inc. -- Objective-J lexer
-* Michael Bayer -- Myghty lexers
-* John Benediktsson -- Factor lexer
-* Christopher Bertels -- Fancy lexer
-* Jarrett Billingsley -- MiniD lexer
-* Adam Blinkinsop -- Haskell, Redcode lexers
-* Frits van Bommel -- assembler lexers
-* Pierre Bourdon -- bugfixes
-* Hiram Chirino -- Scaml and Jade lexers
-* Ian Cooper -- VGL lexer
-* David Corbett -- Inform and Jasmin lexers
-* Leaf Corcoran -- MoonScript lexer
-* Christopher Creutzig -- MuPAD lexer
-* Daniël W. Crompton - Pike lexer
-* Pete Curry -- bugfixes
-* Bryan Davis -- EBNF lexer
-* Owen Durni -- Haxe lexer
-* Alexander Dutton, Oxford University Computing Services -- SPARQL lexer
-* Nick Efford -- Python 3 lexer
-* Sven Efftinge -- Xtend lexer
-* Artem Egorkine -- terminal256 formatter
-* James H. Fisher -- PostScript lexer
-* William S. Fulton -- SWIG lexer
-* Carlos Galdino -- Elixir and Elixir Console lexers
-* Michael Galloy -- IDL lexer
-* Naveen Garg -- Autohotkey lexer
-* Laurent Gautier -- R/S lexer
-* Alex Gaynor -- PyPy log lexer
-* Richard Gerkin -- Igor Pro lexer
-* Alain Gilbert -- TypeScript lexer
-* Alex Gilding -- BlitzBasic lexer
-* Bertrand Goetzmann -- Groovy lexer
-* Krzysiek Goj -- Scala lexer
-* Matt Good -- Genshi, Cheetah lexers
-* Michał Górny -- vim modeline support
-* Patrick Gotthardt -- PHP namespaces support
-* Olivier Guibe -- Asymptote lexer
-* Jordi Gutiérrez Hermoso -- Octave lexer
-* Martin Harriman -- SNOBOL lexer
-* Matthew Harrison -- SVG formatter
-* Steven Hazel -- Tcl lexer
-* Aslak Hellesøy -- Gherkin lexer
-* Greg Hendershott -- Racket lexer
-* David Hess, Fish Software, Inc. -- Objective-J lexer
-* Varun Hiremath -- Debian control lexer
-* Rob Hoelz -- Perl 6 lexer
-* Doug Hogan -- Mscgen lexer
-* Ben Hollis -- Mason lexer
-* Max Horn -- GAP lexer
-* Dustin Howett -- Logos lexer
-* Alastair Houghton -- Lexer inheritance facility
-* Tim Howard -- BlitzMax lexer
-* Ivan Inozemtsev -- Fantom lexer
-* Brian R. Jackson -- Tea lexer
-* Christian Jann -- ShellSession lexer
-* Dennis Kaarsemaker -- sources.list lexer
-* Dmitri Kabak - Inferno Limbo lexer
-* Igor Kalnitsky -- vhdl lexer
-* Alexander Kit -- MaskJS lexer
-* Pekka Klärck -- Robot Framework lexer
-* Eric Knibbe -- Lasso lexer
-* Stepan Koltsov -- Clay lexer
-* Adam Koprowski -- Opa lexer
-* Benjamin Kowarsch -- Modula-2 lexer
-* Domen Kožar -- Nix lexer
-* Alexander Kriegisch -- Kconfig and AspectJ lexers
-* Marek Kubica -- Scheme lexer
-* Jochen Kupperschmidt -- Markdown processor
-* Gerd Kurzbach -- Modelica lexer
-* Jon Larimer, Google Inc. -- Smali lexer
-* Olov Lassus -- Dart lexer
-* Sylvestre Ledru -- Scilab lexer
-* Mark Lee -- Vala lexer
-* Ben Mabey -- Gherkin lexer
-* Angus MacArthur -- QML lexer
-* Louis Marchand -- Eiffel lexer
-* Simone Margaritelli -- Hybris lexer
-* Kirk McDonald -- D lexer
-* Gordon McGregor -- SystemVerilog lexer
-* Stephen McKamey -- Duel/JBST lexer
-* Brian McKenna -- F# lexer
-* Charles McLaughlin -- Puppet lexer
-* Lukas Meuser -- BBCode formatter, Lua lexer
-* Cat Miller -- Pig lexer
-* Paul Miller -- LiveScript lexer
-* Hong Minhee -- HTTP lexer
-* Michael Mior -- Awk lexer
-* Bruce Mitchener -- Dylan lexer rewrite
-* Reuben Morais -- SourcePawn lexer
-* Jon Morton -- Rust lexer
-* Paulo Moura -- Logtalk lexer
-* Mher Movsisyan -- DTD lexer
-* Ana Nelson -- Ragel, ANTLR, R console lexers
-* Nam T. Nguyen -- Monokai style
-* Jesper Noehr -- HTML formatter "anchorlinenos"
-* Mike Nolta -- Julia lexer
-* Jonas Obrist -- BBCode lexer
-* Edward O'Callaghan -- Cryptol lexer
-* David Oliva -- Rebol lexer
-* Pat Pannuto -- nesC lexer
-* Jon Parise -- Protocol buffers lexer
-* Ronny Pfannschmidt -- BBCode lexer
-* Benjamin Peterson -- Test suite refactoring
-* Dominik Picheta -- Nimrod lexer
-* Andrew Pinkham -- RTF Formatter Refactoring
-* Clément Prévost -- UrbiScript lexer
-* raichoo -- Idris lexer
-* Kashif Rasul -- CUDA lexer
-* Justin Reidy -- MXML lexer
-* Norman Richards -- JSON lexer
-* Corey Richardson -- Rust lexer updates
-* Lubomir Rintel -- GoodData MAQL and CL lexers
-* Andre Roberge -- Tango style
-* Konrad Rudolph -- LaTeX formatter enhancements
-* Mario Ruggier -- Evoque lexers
-* Stou Sandalski -- NumPy, FORTRAN, tcsh and XSLT lexers
-* Matteo Sasso -- Common Lisp lexer
-* Joe Schafer -- Ada lexer
-* Ken Schutte -- Matlab lexers
-* Tassilo Schweyer -- Io, MOOCode lexers
-* Ted Shaw -- AutoIt lexer
-* Joerg Sieker -- ABAP lexer
-* Robert Simmons -- Standard ML lexer
-* Kirill Simonov -- YAML lexer
-* Alexander Smishlajev -- Visual FoxPro lexer
-* Steve Spigarelli -- XQuery lexer
-* Jerome St-Louis -- eC lexer
-* James Strachan -- Kotlin lexer
-* Tom Stuart -- Treetop lexer
-* Tiberius Teng -- default style overhaul
-* Jeremy Thurgood -- Erlang, Squid config lexers
-* Brian Tiffin -- OpenCOBOL lexer
-* Bob Tolbert -- Hy lexer
-* Erick Tryzelaar -- Felix lexer
-* Alexander Udalov -- Kotlin lexer improvements
-* Thomas Van Doren -- Chapel lexer
-* Daniele Varrazzo -- PostgreSQL lexers
-* Abe Voelker -- OpenEdge ABL lexer
-* Pepijn de Vos -- HTML formatter CTags support
-* Whitney Young -- ObjectiveC lexer
-* Matthias Vallentin -- Bro lexer
-* Linh Vu Hong -- RSL lexer
-* Nathan Weizenbaum -- Haml and Sass lexers
-* Dietmar Winkler -- Modelica lexer
-* Nils Winter -- Smalltalk lexer
-* Davy Wybiral -- Clojure lexer
-* Diego Zamboni -- CFengine3 lexer
-* Enrique Zamudio -- Ceylon lexer
-* Alex Zimin -- Nemerle lexer
-* Rob Zimmerman -- Kal lexer
-
-Many thanks for all contributions!
diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/CHANGES b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/CHANGES
deleted file mode 100644
index 8459e05..0000000
--- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/CHANGES
+++ /dev/null
@@ -1,941 +0,0 @@
-Pygments changelog
-==================
-
-Issue numbers refer to the tracker at
-,
-pull request numbers to the requests at
-.
-
-Version 2.0
------------
-(under development)
-
-- Dropped Python 2.4 and 2.5 compatibility.  This is in favor of single-source
-  compatibility between Python 2.6, 2.7 and 3.3+.
-
-- New website and documentation based on Sphinx (finally!)
-
-- Lexers added:
-
-  * Clay (PR#184)
-  * Perl 6 (PR#181)
-  * Swig (PR#168)
-  * nesC (PR#166)
-  * BlitzBasic (PR#197)
-  * EBNF (PR#193)
-  * Igor Pro (PR#172)
-  * Rexx (PR#199)
-  * Agda and Literate Agda (PR#203)
-  * Mathematica (PR#245)
-  * Nix (PR#267)
-  * Pike (PR#237)
-  * Hy (PR#238)
-  * Chapel (PR#256)
-  * Kal (PR#233)
-  * Eiffel (PR#273)
-  * Cirru (PR#275)
-  * ColdFusion CFC (PR#283)
-  * Idris (PR#210)
-  * Intel objdump (PR#279)
-  * MaskJS (PR#280)
-  * Inform 6/7 (PR#281)
-  * MQL (PR#285)
-  * APL (#969)
-
-- New styles: "xcode" and "igor", similar to the default highlighting of
-  the respective IDEs.
-
-- Updated the Makefile lexer to yield a little more useful highlighting.
-
-- Lexer aliases passed to ``get_lexer_by_name()`` are now case-insensitive.
-
-- File name matching in lexers and formatters will now use a regex cache
-  for speed (PR#205).
-
-- Pygments will now recognize "vim" modelines when guessing the lexer for
-  a file based on content (PR#118).
-
-- The NameHighlightFilter now works with any Name.* token type (#790).
-
-- Python 3 lexer: add new exceptions from PEP 3151.
-
-- Opa lexer: add new keywords (PR#170).
-
-- Julia lexer: add keywords and underscore-separated number
-  literals (PR#176).
-
-- Lasso lexer: fix method highlighting, update builtins. Fix
-  guessing so that plain XML isn't always taken as Lasso (PR#163).
-
-- Objective C/C++ lexers: allow "@" prefixing any expression (#871).
-
-- Ruby lexer: fix lexing of Name::Space tokens (#860) and of symbols
-  in hashes (#873).
-
-- Stan lexer: update for version 1.3.0 of the language (PR#162).
-
-- JavaScript lexer: add the "yield" keyword (PR#196).
-
-- HTTP lexer: support for PATCH method (PR#190).
-
-- Koka lexer: update to newest language spec (PR#201).
-
-- Haxe lexer: rewrite and support for Haxe 3 (PR#174).
-
-- Prolog lexer: add different kinds of numeric literals (#864).
-
-- F# lexer: rewrite with newest spec for F# 3.0 (#842), fix a bug with
-  dotted chains (#948).
-
-- Kotlin lexer: general update (PR#271).
-
-- Rebol lexer: fix comment detection and analyse_text (PR#261).
-
-- Stan lexer: update to v2.0.1 (PR#255).
-
-- LLVM lexer: update keywords to v3.4 (PR#258).
-
-- PHP lexer: add new keywords and binary literals (PR#222).
-
-- external/markdown-processor.py updated to newest python-markdown (PR#221).
-
-- CSS lexer: some highlighting order fixes (PR#231).
-
-- Ceylon lexer: fix parsing of nested multiline comments (#915).
-
-- C family lexers: fix parsing of indented preprocessor directives (#944).
-
-- Rust lexer: update to 0.9 language version (PR#270).
-
-
-Version 1.6
------------
-(released Feb 3, 2013)
-
-- Lexers added:
-
-  * Dylan console (PR#149)
-  * Logos (PR#150)
-  * Shell sessions (PR#158)
-
-- Fix guessed lexers not receiving lexer options (#838).
-
-- Fix unquoted HTML attribute lexing in Opa (#841).
-
-- Fixes to the Dart lexer (PR#160).
-
-
-Version 1.6rc1
---------------
-(released Jan 9, 2013)
-
-- Lexers added:
-
-  * AspectJ (PR#90)
-  * AutoIt (PR#122)
-  * BUGS-like languages (PR#89)
-  * Ceylon (PR#86)
-  * Croc (new name for MiniD)
-  * CUDA (PR#75)
-  * Dg (PR#116)
-  * IDL (PR#115)
-  * Jags (PR#89)
-  * Julia (PR#61)
-  * Kconfig (#711)
-  * Lasso (PR#95, PR#113)
-  * LiveScript (PR#84)
-  * Monkey (PR#117)
-  * Mscgen (PR#80)
-  * NSIS scripts (PR#136)
-  * OpenCOBOL (PR#72)
-  * QML (PR#123)
-  * Puppet (PR#133)
-  * Racket (PR#94)
-  * Rdoc (PR#99)
-  * Robot Framework (PR#137)
-  * RPM spec files (PR#124)
-  * Rust (PR#67)
-  * Smali (Dalvik assembly)
-  * SourcePawn (PR#39)
-  * Stan (PR#89)
-  * Treetop (PR#125)
-  * TypeScript (PR#114)
-  * VGL (PR#12)
-  * Visual FoxPro (#762)
-  * Windows Registry (#819)
-  * Xtend (PR#68)
-
-- The HTML formatter now supports linking to tags using CTags files, when the
-  python-ctags package is installed (PR#87).
-
-- The HTML formatter now has a "linespans" option that wraps every line in a
-   tag with a specific id (PR#82).
-
-- When deriving a lexer from another lexer with token definitions, definitions
-  for states not in the child lexer are now inherited.  If you override a state
-  in the child lexer, an "inherit" keyword has been added to insert the base
-  state at that position (PR#141).
-
-- The C family lexers now inherit token definitions from a common base class,
-  removing code duplication (PR#141).
-
-- Use "colorama" on Windows for console color output (PR#142).
-
-- Fix Template Haskell highlighting (PR#63).
-
-- Fix some S/R lexer errors (PR#91).
-
-- Fix a bug in the Prolog lexer with names that start with 'is' (#810).
-
-- Rewrite Dylan lexer, add Dylan LID lexer (PR#147).
-
-- Add a Java quickstart document (PR#146).
-
-- Add a "external/autopygmentize" file that can be used as .lessfilter (#802).
-
-
-Version 1.5
------------
-(codename Zeitdilatation, released Mar 10, 2012)
-
-- Lexers added:
-
-  * Awk (#630)
-  * Fancy (#633)
-  * PyPy Log
-  * eC
-  * Nimrod
-  * Nemerle (#667)
-  * F# (#353)
-  * Groovy (#501)
-  * PostgreSQL (#660)
-  * DTD
-  * Gosu (#634)
-  * Octave (PR#22)
-  * Standard ML (PR#14)
-  * CFengine3 (#601)
-  * Opa (PR#37)
-  * HTTP sessions (PR#42)
-  * JSON (PR#31)
-  * SNOBOL (PR#30)
-  * MoonScript (PR#43)
-  * ECL (PR#29)
-  * Urbiscript (PR#17)
-  * OpenEdge ABL (PR#27)
-  * SystemVerilog (PR#35)
-  * Coq (#734)
-  * PowerShell (#654)
-  * Dart (#715)
-  * Fantom (PR#36)
-  * Bro (PR#5)
-  * NewLISP (PR#26)
-  * VHDL (PR#45)
-  * Scilab (#740)
-  * Elixir (PR#57)
-  * Tea (PR#56)
-  * Kotlin (PR#58)
-
-- Fix Python 3 terminal highlighting with pygmentize (#691).
-
-- In the LaTeX formatter, escape special &, < and > chars (#648).
-
-- In the LaTeX formatter, fix display problems for styles with token
-  background colors (#670).
-
-- Enhancements to the Squid conf lexer (#664).
-
-- Several fixes to the reStructuredText lexer (#636).
-
-- Recognize methods in the ObjC lexer (#638).
-
-- Fix Lua "class" highlighting: it does not have classes (#665).
-
-- Fix degenerate regex in Scala lexer (#671) and highlighting bugs (#713, 708).
-
-- Fix number pattern order in Ocaml lexer (#647).
-
-- Fix generic type highlighting in ActionScript 3 (#666).
-
-- Fixes to the Clojure lexer (PR#9).
-
-- Fix degenerate regex in Nemerle lexer (#706).
-
-- Fix infinite looping in CoffeeScript lexer (#729).
-
-- Fix crashes and analysis with ObjectiveC lexer (#693, #696).
-
-- Add some Fortran 2003 keywords.
-
-- Fix Boo string regexes (#679).
-
-- Add "rrt" style (#727).
-
-- Fix infinite looping in Darcs Patch lexer.
-
-- Lots of misc fixes to character-eating bugs and ordering problems in many
-  different lexers.
-
-
-Version 1.4
------------
-(codename Unschärfe, released Jan 03, 2011)
-
-- Lexers added:
-
-  * Factor (#520)
-  * PostScript (#486)
-  * Verilog (#491)
-  * BlitzMax Basic (#478)
-  * Ioke (#465)
-  * Java properties, split out of the INI lexer (#445)
-  * Scss (#509)
-  * Duel/JBST
-  * XQuery (#617)
-  * Mason (#615)
-  * GoodData (#609)
-  * SSP (#473)
-  * Autohotkey (#417)
-  * Google Protocol Buffers
-  * Hybris (#506)
-
-- Do not fail in analyse_text methods (#618).
-
-- Performance improvements in the HTML formatter (#523).
-
-- With the ``noclasses`` option in the HTML formatter, some styles
-  present in the stylesheet were not added as inline styles.
-
-- Four fixes to the Lua lexer (#480, #481, #482, #497).
-
-- More context-sensitive Gherkin lexer with support for more i18n translations.
-
-- Support new OO keywords in Matlab lexer (#521).
-
-- Small fix in the CoffeeScript lexer (#519).
-
-- A bugfix for backslashes in ocaml strings (#499).
-
-- Fix unicode/raw docstrings in the Python lexer (#489).
-
-- Allow PIL to work without PIL.pth (#502).
-
-- Allow seconds as a unit in CSS (#496).
-
-- Support ``application/javascript`` as a JavaScript mime type (#504).
-
-- Support `Offload `_ C++ Extensions as
-  keywords in the C++ lexer (#484).
-
-- Escape more characters in LaTeX output (#505).
-
-- Update Haml/Sass lexers to version 3 (#509).
-
-- Small PHP lexer string escaping fix (#515).
-
-- Support comments before preprocessor directives, and unsigned/
-  long long literals in C/C++ (#613, #616).
-
-- Support line continuations in the INI lexer (#494).
-
-- Fix lexing of Dylan string and char literals (#628).
-
-- Fix class/procedure name highlighting in VB.NET lexer (#624).
-
-
-Version 1.3.1
--------------
-(bugfix release, released Mar 05, 2010)
-
-- The ``pygmentize`` script was missing from the distribution.
-
-
-Version 1.3
------------
-(codename Schneeglöckchen, released Mar 01, 2010)
-
-- Added the ``ensurenl`` lexer option, which can be used to suppress the
-  automatic addition of a newline to the lexer input.
-
-- Lexers added:
-
-  * Ada
-  * Coldfusion
-  * Modula-2
-  * Haxe
-  * R console
-  * Objective-J
-  * Haml and Sass
-  * CoffeeScript
-
-- Enhanced reStructuredText highlighting.
-
-- Added support for PHP 5.3 namespaces in the PHP lexer.
-
-- Added a bash completion script for `pygmentize`, to the external/
-  directory (#466).
-
-- Fixed a bug in `do_insertions()` used for multi-lexer languages.
-
-- Fixed a Ruby regex highlighting bug (#476).
-
-- Fixed regex highlighting bugs in Perl lexer (#258).
-
-- Add small enhancements to the C lexer (#467) and Bash lexer (#469).
-
-- Small fixes for the Tcl, Debian control file, Nginx config,
-  Smalltalk, Objective-C, Clojure, Lua lexers.
-
-- Gherkin lexer: Fixed single apostrophe bug and added new i18n keywords.
-
-
-Version 1.2.2
--------------
-(bugfix release, released Jan 02, 2010)
-
-* Removed a backwards incompatibility in the LaTeX formatter that caused
-  Sphinx to produce invalid commands when writing LaTeX output (#463).
-
-* Fixed a forever-backtracking regex in the BashLexer (#462).
-
-
-Version 1.2.1
--------------
-(bugfix release, released Jan 02, 2010)
-
-* Fixed mishandling of an ellipsis in place of the frames in a Python
-  console traceback, resulting in clobbered output.
-
-
-Version 1.2
------------
-(codename Neujahr, released Jan 01, 2010)
-
-- Dropped Python 2.3 compatibility.
-
-- Lexers added:
-
-  * Asymptote
-  * Go
-  * Gherkin (Cucumber)
-  * CMake
-  * Ooc
-  * Coldfusion
-  * Haxe
-  * R console
-
-- Added options for rendering LaTeX in source code comments in the
-  LaTeX formatter (#461).
-
-- Updated the Logtalk lexer.
-
-- Added `line_number_start` option to image formatter (#456).
-
-- Added `hl_lines` and `hl_color` options to image formatter (#457).
-
-- Fixed the HtmlFormatter's handling of noclasses=True to not output any
-  classes (#427).
-
-- Added the Monokai style (#453).
-
-- Fixed LLVM lexer identifier syntax and added new keywords (#442).
-
-- Fixed the PythonTracebackLexer to handle non-traceback data in header or
-  trailer, and support more partial tracebacks that start on line 2 (#437).
-
-- Fixed the CLexer to not highlight ternary statements as labels.
-
-- Fixed lexing of some Ruby quoting peculiarities (#460).
-
-- A few ASM lexer fixes (#450).
-
-
-Version 1.1.1
--------------
-(bugfix release, released Sep 15, 2009)
-
-- Fixed the BBCode lexer (#435).
-
-- Added support for new Jinja2 keywords.
-
-- Fixed test suite failures.
-
-- Added Gentoo-specific suffixes to Bash lexer.
-
-
-Version 1.1
------------
-(codename Brillouin, released Sep 11, 2009)
-
-- Ported Pygments to Python 3.  This needed a few changes in the way
-  encodings are handled; they may affect corner cases when used with
-  Python 2 as well.
-
-- Lexers added:
-
-  * Antlr/Ragel, thanks to Ana Nelson
-  * (Ba)sh shell
-  * Erlang shell
-  * GLSL
-  * Prolog
-  * Evoque
-  * Modelica
-  * Rebol
-  * MXML
-  * Cython
-  * ABAP
-  * ASP.net (VB/C#)
-  * Vala
-  * Newspeak
-
-- Fixed the LaTeX formatter's output so that output generated for one style
-  can be used with the style definitions of another (#384).
-
-- Added "anchorlinenos" and "noclobber_cssfile" (#396) options to HTML
-  formatter.
-
-- Support multiline strings in Lua lexer.
-
-- Rewrite of the JavaScript lexer by Pumbaa80 to better support regular
-  expression literals (#403).
-
-- When pygmentize is asked to highlight a file for which multiple lexers
-  match the filename, use the analyse_text guessing engine to determine the
-  winner (#355).
-
-- Fixed minor bugs in the JavaScript lexer (#383), the Matlab lexer (#378),
-  the Scala lexer (#392), the INI lexer (#391), the Clojure lexer (#387)
-  and the AS3 lexer (#389).
-
-- Fixed three Perl heredoc lexing bugs (#379, #400, #422).
-
-- Fixed a bug in the image formatter which misdetected lines (#380).
-
-- Fixed bugs lexing extended Ruby strings and regexes.
-
-- Fixed a bug when lexing git diffs.
-
-- Fixed a bug lexing the empty commit in the PHP lexer (#405).
-
-- Fixed a bug causing Python numbers to be mishighlighted as floats (#397).
-
-- Fixed a bug when backslashes are used in odd locations in Python (#395).
-
-- Fixed various bugs in Matlab and S-Plus lexers, thanks to Winston Chang (#410,
-  #411, #413, #414) and fmarc (#419).
-
-- Fixed a bug in Haskell single-line comment detection (#426).
-
-- Added new-style reStructuredText directive for docutils 0.5+ (#428).
-
-
-Version 1.0
------------
-(codename Dreiundzwanzig, released Nov 23, 2008)
-
-- Don't use join(splitlines()) when converting newlines to ``\n``,
-  because that doesn't keep all newlines at the end when the
-  ``stripnl`` lexer option is False.
-
-- Added ``-N`` option to command-line interface to get a lexer name
-  for a given filename.
-
-- Added Tango style, written by Andre Roberge for the Crunchy project.
-
-- Added Python3TracebackLexer and ``python3`` option to
-  PythonConsoleLexer.
-
-- Fixed a few bugs in the Haskell lexer.
-
-- Fixed PythonTracebackLexer to be able to recognize SyntaxError and
-  KeyboardInterrupt (#360).
-
-- Provide one formatter class per image format, so that surprises like::
-
-    pygmentize -f gif -o foo.gif foo.py
-
-  creating a PNG file are avoided.
-
-- Actually use the `font_size` option of the image formatter.
-
-- Fixed numpy lexer that it doesn't listen for `*.py` any longer.
-
-- Fixed HTML formatter so that text options can be Unicode
-  strings (#371).
-
-- Unified Diff lexer supports the "udiff" alias now.
-
-- Fixed a few issues in Scala lexer (#367).
-
-- RubyConsoleLexer now supports simple prompt mode (#363).
-
-- JavascriptLexer is smarter about what constitutes a regex (#356).
-
-- Add Applescript lexer, thanks to Andreas Amann (#330).
-
-- Make the codetags more strict about matching words (#368).
-
-- NginxConfLexer is a little more accurate on mimetypes and
-  variables (#370).
-
-
-Version 0.11.1
---------------
-(released Aug 24, 2008)
-
-- Fixed a Jython compatibility issue in pygments.unistring (#358).
-
-
-Version 0.11
-------------
-(codename Straußenei, released Aug 23, 2008)
-
-Many thanks go to Tim Hatch for writing or integrating most of the bug
-fixes and new features.
-
-- Lexers added:
-
-  * Nasm-style assembly language, thanks to delroth
-  * YAML, thanks to Kirill Simonov
-  * ActionScript 3, thanks to Pierre Bourdon
-  * Cheetah/Spitfire templates, thanks to Matt Good
-  * Lighttpd config files
-  * Nginx config files
-  * Gnuplot plotting scripts
-  * Clojure
-  * POV-Ray scene files
-  * Sqlite3 interactive console sessions
-  * Scala source files, thanks to Krzysiek Goj
-
-- Lexers improved:
-
-  * C lexer highlights standard library functions now and supports C99
-    types.
-  * Bash lexer now correctly highlights heredocs without preceding
-    whitespace.
-  * Vim lexer now highlights hex colors properly and knows a couple
-    more keywords.
-  * Irc logs lexer now handles xchat's default time format (#340) and
-    correctly highlights lines ending in ``>``.
-  * Support more delimiters for perl regular expressions (#258).
-  * ObjectiveC lexer now supports 2.0 features.
-
-- Added "Visual Studio" style.
-
-- Updated markdown processor to Markdown 1.7.
-
-- Support roman/sans/mono style defs and use them in the LaTeX
-  formatter.
-
-- The RawTokenFormatter is no longer registered to ``*.raw`` and it's
-  documented that tokenization with this lexer may raise exceptions.
-
-- New option ``hl_lines`` to HTML formatter, to highlight certain
-  lines.
-
-- New option ``prestyles`` to HTML formatter.
-
-- New option *-g* to pygmentize, to allow lexer guessing based on
-  filetext (can be slowish, so file extensions are still checked
-  first).
-
-- ``guess_lexer()`` now makes its decision much faster due to a cache
-  of whether data is xml-like (a check which is used in several
-  versions of ``analyse_text()``.  Several lexers also have more
-  accurate ``analyse_text()`` now.
-
-
-Version 0.10
-------------
-(codename Malzeug, released May 06, 2008)
-
-- Lexers added:
-
-  * Io
-  * Smalltalk
-  * Darcs patches
-  * Tcl
-  * Matlab
-  * Matlab sessions
-  * FORTRAN
-  * XSLT
-  * tcsh
-  * NumPy
-  * Python 3
-  * S, S-plus, R statistics languages
-  * Logtalk
-
-- In the LatexFormatter, the *commandprefix* option is now by default
-  'PY' instead of 'C', since the latter resulted in several collisions
-  with other packages.  Also, the special meaning of the *arg*
-  argument to ``get_style_defs()`` was removed.
-
-- Added ImageFormatter, to format code as PNG, JPG, GIF or BMP.
-  (Needs the Python Imaging Library.)
-
-- Support doc comments in the PHP lexer.
-
-- Handle format specifications in the Perl lexer.
-
-- Fix comment handling in the Batch lexer.
-
-- Add more file name extensions for the C++, INI and XML lexers.
-
-- Fixes in the IRC and MuPad lexers.
-
-- Fix function and interface name highlighting in the Java lexer.
-
-- Fix at-rule handling in the CSS lexer.
-
-- Handle KeyboardInterrupts gracefully in pygmentize.
-
-- Added BlackWhiteStyle.
-
-- Bash lexer now correctly highlights math, does not require
-  whitespace after semicolons, and correctly highlights boolean
-  operators.
-
-- Makefile lexer is now capable of handling BSD and GNU make syntax.
-
-
-Version 0.9
------------
-(codename Herbstzeitlose, released Oct 14, 2007)
-
-- Lexers added:
-
-  * Erlang
-  * ActionScript
-  * Literate Haskell
-  * Common Lisp
-  * Various assembly languages
-  * Gettext catalogs
-  * Squid configuration
-  * Debian control files
-  * MySQL-style SQL
-  * MOOCode
-
-- Lexers improved:
-
-  * Greatly improved the Haskell and OCaml lexers.
-  * Improved the Bash lexer's handling of nested constructs.
-  * The C# and Java lexers exhibited abysmal performance with some
-    input code; this should now be fixed.
-  * The IRC logs lexer is now able to colorize weechat logs too.
-  * The Lua lexer now recognizes multi-line comments.
-  * Fixed bugs in the D and MiniD lexer.
-
-- The encoding handling of the command line mode (pygmentize) was
-  enhanced. You shouldn't get UnicodeErrors from it anymore if you
-  don't give an encoding option.
-
-- Added a ``-P`` option to the command line mode which can be used to
-  give options whose values contain commas or equals signs.
-
-- Added 256-color terminal formatter.
-
-- Added an experimental SVG formatter.
-
-- Added the ``lineanchors`` option to the HTML formatter, thanks to
-  Ian Charnas for the idea.
-
-- Gave the line numbers table a CSS class in the HTML formatter.
-
-- Added a Vim 7-like style.
-
-
-Version 0.8.1
--------------
-(released Jun 27, 2007)
-
-- Fixed POD highlighting in the Ruby lexer.
-
-- Fixed Unicode class and namespace name highlighting in the C# lexer.
-
-- Fixed Unicode string prefix highlighting in the Python lexer.
-
-- Fixed a bug in the D and MiniD lexers.
-
-- Fixed the included MoinMoin parser.
-
-
-Version 0.8
------------
-(codename Maikäfer, released May 30, 2007)
-
-- Lexers added:
-
-  * Haskell, thanks to Adam Blinkinsop
-  * Redcode, thanks to Adam Blinkinsop
-  * D, thanks to Kirk McDonald
-  * MuPad, thanks to Christopher Creutzig
-  * MiniD, thanks to Jarrett Billingsley
-  * Vim Script, by Tim Hatch
-
-- The HTML formatter now has a second line-numbers mode in which it
-  will just integrate the numbers in the same ``
`` tag as the
-  code.
-
-- The `CSharpLexer` now is Unicode-aware, which means that it has an
-  option that can be set so that it correctly lexes Unicode
-  identifiers allowed by the C# specs.
-
-- Added a `RaiseOnErrorTokenFilter` that raises an exception when the
-  lexer generates an error token, and a `VisibleWhitespaceFilter` that
-  converts whitespace (spaces, tabs, newlines) into visible
-  characters.
-
-- Fixed the `do_insertions()` helper function to yield correct
-  indices.
-
-- The ReST lexer now automatically highlights source code blocks in
-  ".. sourcecode:: language" and ".. code:: language" directive
-  blocks.
-
-- Improved the default style (thanks to Tiberius Teng). The old
-  default is still available as the "emacs" style (which was an alias
-  before).
-
-- The `get_style_defs` method of HTML formatters now uses the
-  `cssclass` option as the default selector if it was given.
-
-- Improved the ReST and Bash lexers a bit.
-
-- Fixed a few bugs in the Makefile and Bash lexers, thanks to Tim
-  Hatch.
-
-- Fixed a bug in the command line code that disallowed ``-O`` options
-  when using the ``-S`` option.
-
-- Fixed a bug in the `RawTokenFormatter`.
-
-
-Version 0.7.1
--------------
-(released Feb 15, 2007)
-
-- Fixed little highlighting bugs in the Python, Java, Scheme and
-  Apache Config lexers.
-
-- Updated the included manpage.
-
-- Included a built version of the documentation in the source tarball.
-
-
-Version 0.7
------------
-(codename Faschingskrapfn, released Feb 14, 2007)
-
-- Added a MoinMoin parser that uses Pygments. With it, you get
-  Pygments highlighting in Moin Wiki pages.
-
-- Changed the exception raised if no suitable lexer, formatter etc. is
-  found in one of the `get_*_by_*` functions to a custom exception,
-  `pygments.util.ClassNotFound`. It is, however, a subclass of
-  `ValueError` in order to retain backwards compatibility.
-
-- Added a `-H` command line option which can be used to get the
-  docstring of a lexer, formatter or filter.
-
-- Made the handling of lexers and formatters more consistent. The
-  aliases and filename patterns of formatters are now attributes on
-  them.
-
-- Added an OCaml lexer, thanks to Adam Blinkinsop.
-
-- Made the HTML formatter more flexible, and easily subclassable in
-  order to make it easy to implement custom wrappers, e.g. alternate
-  line number markup. See the documentation.
-
-- Added an `outencoding` option to all formatters, making it possible
-  to override the `encoding` (which is used by lexers and formatters)
-  when using the command line interface. Also, if using the terminal
-  formatter and the output file is a terminal and has an encoding
-  attribute, use it if no encoding is given.
-
-- Made it possible to just drop style modules into the `styles`
-  subpackage of the Pygments installation.
-
-- Added a "state" keyword argument to the `using` helper.
-
-- Added a `commandprefix` option to the `LatexFormatter` which allows
-  to control how the command names are constructed.
-
-- Added quite a few new lexers, thanks to Tim Hatch:
-
-  * Java Server Pages
-  * Windows batch files
-  * Trac Wiki markup
-  * Python tracebacks
-  * ReStructuredText
-  * Dylan
-  * and the Befunge esoteric programming language (yay!)
-
-- Added Mako lexers by Ben Bangert.
-
-- Added "fruity" style, another dark background originally vim-based
-  theme.
-
-- Added sources.list lexer by Dennis Kaarsemaker.
-
-- Added token stream filters, and a pygmentize option to use them.
-
-- Changed behavior of `in` Operator for tokens.
-
-- Added mimetypes for all lexers.
-
-- Fixed some problems lexing Python strings.
-
-- Fixed tickets: #167, #178, #179, #180, #185, #201.
-
-
-Version 0.6
------------
-(codename Zimtstern, released Dec 20, 2006)
-
-- Added option for the HTML formatter to write the CSS to an external
-  file in "full document" mode.
-
-- Added RTF formatter.
-
-- Added Bash and Apache configuration lexers (thanks to Tim Hatch).
-
-- Improved guessing methods for various lexers.
-
-- Added `@media` support to CSS lexer (thanks to Tim Hatch).
-
-- Added a Groff lexer (thanks to Tim Hatch).
-
-- License change to BSD.
-
-- Added lexers for the Myghty template language.
-
-- Added a Scheme lexer (thanks to Marek Kubica).
-
-- Added some functions to iterate over existing lexers, formatters and
-  lexers.
-
-- The HtmlFormatter's `get_style_defs()` can now take a list as an
-  argument to generate CSS with multiple prefixes.
-
-- Support for guessing input encoding added.
-
-- Encoding support added: all processing is now done with Unicode
-  strings, input and output are converted from and optionally to byte
-  strings (see the ``encoding`` option of lexers and formatters).
-
-- Some improvements in the C(++) lexers handling comments and line
-  continuations.
-
-
-Version 0.5.1
--------------
-(released Oct 30, 2006)
-
-- Fixed traceback in ``pygmentize -L`` (thanks to Piotr Ozarowski).
-
-
-Version 0.5
------------
-(codename PyKleur, released Oct 30, 2006)
-
-- Initial public release.
diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/LICENSE b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/LICENSE
deleted file mode 100644
index 641c8e8..0000000
--- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/LICENSE
+++ /dev/null
@@ -1,25 +0,0 @@
-Copyright (c) 2006-2014 by the respective authors (see AUTHORS file).
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-* Redistributions of source code must retain the above copyright
-  notice, this list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright
-  notice, this list of conditions and the following disclaimer in the
-  documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/MANIFEST.in b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/MANIFEST.in
deleted file mode 100644
index cfec4e9..0000000
--- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/MANIFEST.in
+++ /dev/null
@@ -1,6 +0,0 @@
-include pygmentize
-include external/*
-include Makefile CHANGES LICENSE AUTHORS TODO ez_setup.py
-recursive-include tests *
-recursive-include doc *
-recursive-include scripts *
diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/Makefile b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/Makefile
deleted file mode 100644
index e28c90c..0000000
--- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/Makefile
+++ /dev/null
@@ -1,56 +0,0 @@
-#
-# Makefile for Pygments
-# ~~~~~~~~~~~~~~~~~~~~~
-#
-# Combines scripts for common tasks.
-#
-# :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS.
-# :license: BSD, see LICENSE for details.
-#
-
-PYTHON ?= python
-
-export PYTHONPATH = $(shell echo "$$PYTHONPATH"):$(shell python -c 'import os; print ":".join(os.path.abspath(line.strip()) for line in file("PYTHONPATH"))' 2>/dev/null)
-
-.PHONY: all check clean clean-pyc codetags docs mapfiles \
-	pylint reindent test test-coverage
-
-all: clean-pyc check test
-
-check:
-	@$(PYTHON) scripts/detect_missing_analyse_text.py || true
-	@$(PYTHON) scripts/check_sources.py -i build -i dist -i pygments/lexers/_mapping.py \
-		   -i docs/build -i pygments/formatters/_mapping.py -i pygments/unistring.py \
-		   -i pygments/lexers/_vimbuiltins.py
-
-clean: clean-pyc
-	-rm -rf build
-	-rm -f codetags.html
-
-clean-pyc:
-	find . -name '*.pyc' -exec rm -f {} +
-	find . -name '*.pyo' -exec rm -f {} +
-	find . -name '*~' -exec rm -f {} +
-
-codetags:
-	@$(PYTHON) scripts/find_codetags.py -i tests/examplefiles -i scripts/pylintrc \
-		   -i scripts/find_codetags.py -o codetags.html .
-
-docs:
-	make -C doc html
-
-mapfiles:
-	(cd pygments/lexers; $(PYTHON) _mapping.py)
-	(cd pygments/formatters; $(PYTHON) _mapping.py)
-
-pylint:
-	@pylint --rcfile scripts/pylintrc pygments
-
-reindent:
-	@$(PYTHON) scripts/reindent.py -r -B .
-
-test:
-	@$(PYTHON) tests/run.py $(TEST)
-
-test-coverage:
-	@$(PYTHON) tests/run.py -C $(TEST)
diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/REVISION b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/REVISION
deleted file mode 100644
index 6f4e224..0000000
--- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/REVISION
+++ /dev/null
@@ -1 +0,0 @@
-bec55c895c04
diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/TODO b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/TODO
deleted file mode 100644
index 3ff63a3..0000000
--- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/TODO
+++ /dev/null
@@ -1,15 +0,0 @@
-Todo
-====
-
-- suggested new lexers
-  * IPython sessions
-
-- lexers that need work:
-  * review perl lexer (numerous bugs, but so far no one had complaints ;)
-  * readd property support for C# lexer? that is, find a regex that doesn't
-    backtrack to death...
-  * add support for function name highlighting to C++ lexer
-
-- allow "overlay" token types to highlight specials: nth line, a word etc.
-
-- pygmentize option presets, more sophisticated method to output styles?
diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/Makefile b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/Makefile
deleted file mode 100644
index 7fb7541..0000000
--- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/Makefile
+++ /dev/null
@@ -1,153 +0,0 @@
-# Makefile for Sphinx documentation
-#
-
-# You can set these variables from the command line.
-SPHINXOPTS    =
-SPHINXBUILD   = PYTHONPATH=.. sphinx-build
-PAPER         =
-BUILDDIR      = _build
-
-# Internal variables.
-PAPEROPT_a4     = -D latex_paper_size=a4
-PAPEROPT_letter = -D latex_paper_size=letter
-ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-# the i18n builder cannot share the environment and doctrees with the others
-I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-
-.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
-
-help:
-	@echo "Please use \`make ' where  is one of"
-	@echo "  html       to make standalone HTML files"
-	@echo "  dirhtml    to make HTML files named index.html in directories"
-	@echo "  singlehtml to make a single large HTML file"
-	@echo "  pickle     to make pickle files"
-	@echo "  json       to make JSON files"
-	@echo "  htmlhelp   to make HTML files and a HTML help project"
-	@echo "  qthelp     to make HTML files and a qthelp project"
-	@echo "  devhelp    to make HTML files and a Devhelp project"
-	@echo "  epub       to make an epub"
-	@echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
-	@echo "  latexpdf   to make LaTeX files and run them through pdflatex"
-	@echo "  text       to make text files"
-	@echo "  man        to make manual pages"
-	@echo "  texinfo    to make Texinfo files"
-	@echo "  info       to make Texinfo files and run them through makeinfo"
-	@echo "  gettext    to make PO message catalogs"
-	@echo "  changes    to make an overview of all changed/added/deprecated items"
-	@echo "  linkcheck  to check all external links for integrity"
-	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
-
-clean:
-	-rm -rf $(BUILDDIR)/*
-
-html:
-	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
-	@echo
-	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
-
-dirhtml:
-	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
-	@echo
-	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
-
-singlehtml:
-	$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
-	@echo
-	@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
-
-pickle:
-	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
-	@echo
-	@echo "Build finished; now you can process the pickle files."
-
-json:
-	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
-	@echo
-	@echo "Build finished; now you can process the JSON files."
-
-htmlhelp:
-	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
-	@echo
-	@echo "Build finished; now you can run HTML Help Workshop with the" \
-	      ".hhp project file in $(BUILDDIR)/htmlhelp."
-
-qthelp:
-	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
-	@echo
-	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
-	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
-	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Pygments.qhcp"
-	@echo "To view the help file:"
-	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Pygments.qhc"
-
-devhelp:
-	$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
-	@echo
-	@echo "Build finished."
-	@echo "To view the help file:"
-	@echo "# mkdir -p $$HOME/.local/share/devhelp/Pygments"
-	@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Pygments"
-	@echo "# devhelp"
-
-epub:
-	$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
-	@echo
-	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
-
-latex:
-	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
-	@echo
-	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
-	@echo "Run \`make' in that directory to run these through (pdf)latex" \
-	      "(use \`make latexpdf' here to do that automatically)."
-
-latexpdf:
-	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
-	@echo "Running LaTeX files through pdflatex..."
-	$(MAKE) -C $(BUILDDIR)/latex all-pdf
-	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
-
-text:
-	$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
-	@echo
-	@echo "Build finished. The text files are in $(BUILDDIR)/text."
-
-man:
-	$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
-	@echo
-	@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
-
-texinfo:
-	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
-	@echo
-	@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
-	@echo "Run \`make' in that directory to run these through makeinfo" \
-	      "(use \`make info' here to do that automatically)."
-
-info:
-	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
-	@echo "Running Texinfo files through makeinfo..."
-	make -C $(BUILDDIR)/texinfo info
-	@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
-
-gettext:
-	$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
-	@echo
-	@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
-
-changes:
-	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
-	@echo
-	@echo "The overview file is in $(BUILDDIR)/changes."
-
-linkcheck:
-	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
-	@echo
-	@echo "Link check complete; look for any errors in the above output " \
-	      "or in $(BUILDDIR)/linkcheck/output.txt."
-
-doctest:
-	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
-	@echo "Testing of doctests in the sources finished, look at the " \
-	      "results in $(BUILDDIR)/doctest/output.txt."
diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_static/favicon.ico b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_static/favicon.ico
deleted file mode 100644
index 777f617dd904043a7ae5ae7469fc2b2afd18cee3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16958
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
XNySl69UDkT$>)lCmA+Hn{ipu}r=-;_

diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_static/logo_new.png b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_static/logo_new.png
deleted file mode 100644
index 0ae4b2095814ac2c57901369af7d0c880d4a185a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 40944
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

diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_static/logo_only.png b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_static/logo_only.png
deleted file mode 100644
index fdebcc474a87ef939de63bed9371f6beb099bc4e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16424
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
ZLT|PoRWU`_@&7beSJqLgQ+yrqe*mK>u#Nx#

diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_templates/docssidebar.html b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_templates/docssidebar.html
deleted file mode 100644
index 913acaa..0000000
--- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_templates/docssidebar.html
+++ /dev/null
@@ -1,3 +0,0 @@
-{% if pagename != 'docs/index' %}
-« Back to docs index
-{% endif %}
diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_templates/indexsidebar.html b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_templates/indexsidebar.html
deleted file mode 100644
index 2995455..0000000
--- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_templates/indexsidebar.html
+++ /dev/null
@@ -1,25 +0,0 @@
-

Download

-{% if version.endswith('(hg)') %} -

This documentation is for version {{ version }}, which is - not released yet.

-

You can use it from the - Mercurial repo or look for - released versions in the Python - Package Index.

-{% else %} -

Current version: {{ version }}

-

Get Pygments from the Python Package -Index, or install it with:

-
pip install Pygments
-{% endif %} - -

Questions? Suggestions?

- -

Clone at Bitbucket -or come to the #pocoo channel on FreeNode.

-

You can also open an issue at the - tracker.

- - - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_themes/pygments14/layout.html b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_themes/pygments14/layout.html deleted file mode 100644 index 93a3119..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_themes/pygments14/layout.html +++ /dev/null @@ -1,98 +0,0 @@ -{# - sphinxdoc/layout.html - ~~~~~~~~~~~~~~~~~~~~~ - - Sphinx layout template for the sphinxdoc theme. - - :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS. - :license: BSD, see LICENSE for details. -#} -{%- extends "basic/layout.html" %} - -{# put the sidebar before the body #} -{% block sidebar1 %}{{ sidebar() }}{% endblock %} -{% block sidebar2 %}{% endblock %} - -{% block relbar1 %}{% endblock %} -{% block relbar2 %}{% endblock %} - -{% block extrahead %} - -{{ super() }} -{%- if not embedded %} - - -{%- endif %} -{% endblock %} - -{% block header %} -
- -{% endblock %} - -{% block footer %} - -
{# closes "outerwrapper" div #} -{% endblock %} - -{% block sidebarrel %} -{% endblock %} - -{% block sidebarsourcelink %} -{% endblock %} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_themes/pygments14/static/bodybg.png b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_themes/pygments14/static/bodybg.png deleted file mode 100644 index 46892b801ac1088cdb7091f230bcb0eec1bfbe85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51903 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 diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_themes/pygments14/static/listitem.png b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_themes/pygments14/static/listitem.png deleted file mode 100644 index e45715f914df0b9ce5650cd81f826565d794bc6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRO!3HEZ#7tid5-9M9ECz~A24Tjhjus6-LG}_) zUsv|KjDqY+yxD&zFaw41JY5_^BrYc>NGv&UGh(5%v^3ic2_Tqf;9+ScrKuZn^uU2H zQyfn*9&-yU`CQ%jRM<_jbEVs=+4%-On`#az=vrO%C^ha<()jUzeq*EHImaYp10cwd vh@M+!5EQwitFh7Z?ulO_J-(9;uViOPP?5c=x_{|>pv?@Pu6{1-oD!M<&SgTz diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_themes/pygments14/static/logo.png b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_themes/pygments14/static/logo.png deleted file mode 100644 index 2c1a24dc7dc7e8d989ff3c98eee2c233074e3c0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26933 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
    iqU(V_fBwX^d}2|D=Bk$roABOZOF$hQ9i8_E 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 diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_themes/pygments14/static/pygments14.css_t b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_themes/pygments14/static/pygments14.css_t deleted file mode 100644 index 838782b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_themes/pygments14/static/pygments14.css_t +++ /dev/null @@ -1,401 +0,0 @@ -/* - * pygments14.css - * ~~~~~~~~~~~~~~ - * - * Sphinx stylesheet -- pygments14 theme. Heavily copied from sphinx13. - * - * :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -@import url("basic.css"); - -/* -- page layout ----------------------------------------------------------- */ - -body { - font-family: {{ theme_font }}, 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', - 'Verdana', sans-serif; - font-size: 14px; - text-align: center; - background-image: url(bodybg.png); - background-color: {{ theme_background }}; - color: black; - padding: 0; - /* - border-right: 1px solid {{ theme_border }}; - border-left: 1px solid {{ theme_border }}; - */ - - margin: 0 auto; - min-width: 780px; - max-width: 1080px; -} - -.outerwrapper { - background-image: url(docbg.png); - background-attachment: fixed; -} - -.pageheader { - text-align: left; - padding: 10px 15px; -} - -.pageheader ul { - float: right; - color: white; - list-style-type: none; - padding-left: 0; - margin-top: 40px; - margin-right: 10px; -} - -.pageheader li { - float: left; - margin: 0 0 0 10px; -} - -.pageheader li a { - border-radius: 3px; - padding: 8px 12px; - color: {{ theme_darkgray }}; - text-shadow: 0 0 5px rgba(0, 0, 0, 0.2); -} - -.pageheader li a:hover { - background-color: {{ theme_yellow }}; - color: black; - text-shadow: none; -} - -div.document { - text-align: left; - /*border-left: 1em solid {{ theme_lightyellow }};*/ -} - -div.bodywrapper { - margin: 0 12px 0 240px; - background-color: white; -/* border-right: 1px solid {{ theme_border }}; */ -} - -div.body { - margin: 0; - padding: 0.5em 20px 20px 20px; -} - -div.related { - font-size: 1em; - color: {{ theme_darkgray }}; -} - -div.related ul { - background-image: url(relbg.png); - background-repeat: repeat-y; - background-color: {{ theme_yellow }}; - height: 1.9em; - /* - border-top: 1px solid {{ theme_border }}; - border-bottom: 1px solid {{ theme_border }}; - */ -} - -div.related ul li { - margin: 0 5px 0 0; - padding: 0; - float: left; -} - -div.related ul li.right { - float: right; - margin-right: 5px; -} - -div.related ul li a { - margin: 0; - padding: 0 5px 0 5px; - line-height: 1.75em; - color: {{ theme_darkgray }}; - /*text-shadow: 0px 0px 1px rgba(0, 0, 0, 0.5);*/ -} - -div.related ul li a:hover { - text-decoration: underline; - text-shadow: 0px 0px 1px rgba(255, 255, 255, 0.5); -} - -div.sphinxsidebarwrapper { - position: relative; - top: 0px; - padding: 0; -} - -div.sphinxsidebar { - margin: 0; - padding: 0 0px 15px 15px; - width: 210px; - float: left; - font-size: 1em; - text-align: left; -} - -div.sphinxsidebar .logo { - font-size: 1.8em; - color: #666; - font-weight: 300; - text-align: center; -} - -div.sphinxsidebar .logo img { - vertical-align: middle; -} - -div.sphinxsidebar input { - border: 1px solid #aaa; - font-family: {{ theme_font }}, 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', - 'Verdana', sans-serif; - font-size: 1em; -} - -div.sphinxsidebar h3 { - font-size: 1.5em; - /* border-top: 1px solid {{ theme_border }}; */ - margin-top: 1em; - margin-bottom: 0.5em; - padding-top: 0.5em; -} - -div.sphinxsidebar h4 { - font-size: 1.2em; - margin-bottom: 0; -} - -div.sphinxsidebar h3, div.sphinxsidebar h4 { - margin-right: -15px; - margin-left: -15px; - padding-right: 14px; - padding-left: 14px; - color: #333; - font-weight: 300; - /*text-shadow: 0px 0px 0.5px rgba(0, 0, 0, 0.4);*/ -} - -div.sphinxsidebarwrapper > h3:first-child { - margin-top: 0.5em; - border: none; -} - -div.sphinxsidebar h3 a { - color: #333; -} - -div.sphinxsidebar ul { - color: #444; - margin-top: 7px; - padding: 0; - line-height: 130%; -} - -div.sphinxsidebar ul ul { - margin-left: 20px; - list-style-image: url(listitem.png); -} - -div.footer { - color: {{ theme_darkgray }}; - text-shadow: 0 0 .2px rgba(255, 255, 255, 0.8); - padding: 2em; - text-align: center; - clear: both; - font-size: 0.8em; -} - -/* -- body styles ----------------------------------------------------------- */ - -p { - margin: 0.8em 0 0.5em 0; -} - -a { - color: {{ theme_darkgreen }}; - text-decoration: none; -} - -a:hover { - color: {{ theme_darkyellow }}; -} - -div.body a { - text-decoration: underline; -} - -h1 { - margin: 10px 0 0 0; - font-size: 2.4em; - color: {{ theme_darkgray }}; - font-weight: 300; -} - -h2 { - margin: 1.em 0 0.2em 0; - font-size: 1.5em; - font-weight: 300; - padding: 0; - color: {{ theme_darkgreen }}; -} - -h3 { - margin: 1em 0 -0.3em 0; - font-size: 1.3em; - font-weight: 300; -} - -div.body h1 a, div.body h2 a, div.body h3 a, div.body h4 a, div.body h5 a, div.body h6 a { - text-decoration: none; -} - -div.body h1 a tt, div.body h2 a tt, div.body h3 a tt, div.body h4 a tt, div.body h5 a tt, div.body h6 a tt { - color: {{ theme_darkgreen }} !important; - font-size: inherit !important; -} - -a.headerlink { - color: {{ theme_green }} !important; - font-size: 12px; - margin-left: 6px; - padding: 0 4px 0 4px; - text-decoration: none !important; - float: right; -} - -a.headerlink:hover { - background-color: #ccc; - color: white!important; -} - -cite, code, tt { - font-family: 'Consolas', 'DejaVu Sans Mono', - 'Bitstream Vera Sans Mono', monospace; - font-size: 14px; - letter-spacing: -0.02em; -} - -tt { - background-color: #f2f2f2; - border: 1px solid #ddd; - border-radius: 2px; - color: #333; - padding: 1px; -} - -tt.descname, tt.descclassname, tt.xref { - border: 0; -} - -hr { - border: 1px solid #abc; - margin: 2em; -} - -a tt { - border: 0; - color: {{ theme_darkgreen }}; -} - -a tt:hover { - color: {{ theme_darkyellow }}; -} - -pre { - font-family: 'Consolas', 'DejaVu Sans Mono', - 'Bitstream Vera Sans Mono', monospace; - font-size: 13px; - letter-spacing: 0.015em; - line-height: 120%; - padding: 0.5em; - border: 1px solid #ccc; - border-radius: 2px; - background-color: #f8f8f8; -} - -pre a { - color: inherit; - text-decoration: underline; -} - -td.linenos pre { - padding: 0.5em 0; -} - -div.quotebar { - background-color: #f8f8f8; - max-width: 250px; - float: right; - padding: 0px 7px; - border: 1px solid #ccc; - margin-left: 1em; -} - -div.topic { - background-color: #f8f8f8; -} - -table { - border-collapse: collapse; - margin: 0 -0.5em 0 -0.5em; -} - -table td, table th { - padding: 0.2em 0.5em 0.2em 0.5em; -} - -div.admonition, div.warning { - font-size: 0.9em; - margin: 1em 0 1em 0; - border: 1px solid #86989B; - border-radius: 2px; - background-color: #f7f7f7; - padding: 0; -} - -div.admonition p, div.warning p { - margin: 0.5em 1em 0.5em 1em; - padding: 0; -} - -div.admonition pre, div.warning pre { - margin: 0.4em 1em 0.4em 1em; -} - -div.admonition p.admonition-title, -div.warning p.admonition-title { - margin-top: 1em; - padding-top: 0.5em; - font-weight: bold; -} - -div.warning { - border: 1px solid #940000; -/* background-color: #FFCCCF;*/ -} - -div.warning p.admonition-title { -} - -div.admonition ul, div.admonition ol, -div.warning ul, div.warning ol { - margin: 0.1em 0.5em 0.5em 3em; - padding: 0; -} - -.viewcode-back { - font-family: {{ theme_font }}, 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', - 'Verdana', sans-serif; -} - -div.viewcode-block:target { - background-color: #f4debf; - border-top: 1px solid #ac9; - border-bottom: 1px solid #ac9; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_themes/pygments14/theme.conf b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_themes/pygments14/theme.conf deleted file mode 100644 index fffe66d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/_themes/pygments14/theme.conf +++ /dev/null @@ -1,15 +0,0 @@ -[theme] -inherit = basic -stylesheet = pygments14.css -pygments_style = friendly - -[options] -green = #66b55e -darkgreen = #36852e -darkgray = #666666 -border = #66b55e -yellow = #f4cd00 -darkyellow = #d4ad00 -lightyellow = #fffbe3 -background = #f9f9f9 -font = PT Sans diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/conf.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/conf.py deleted file mode 100644 index 864ec7a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/conf.py +++ /dev/null @@ -1,249 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Pygments documentation build configuration file, created by -# sphinx-quickstart on Sat Jan 18 17:07:37 2014. -# -# This file is execfile()d with the current directory set to its containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys, os - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -sys.path.insert(0, os.path.abspath('..')) - -import pygments - -# -- General configuration ----------------------------------------------------- - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ['sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'pygments.sphinxext'] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'Pygments' -copyright = u'2014, Georg Brandl' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = pygments.__version__ -# The full version, including alpha/beta/rc tags. -release = version - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ['_build'] - -# The reST default role (used for this markup: `text`) to use for all documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -#pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - - -# -- Options for HTML output --------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'pygments14' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -html_theme_path = ['_themes'] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -html_favicon = 'favicon.ico' - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -html_sidebars = {'index': 'indexsidebar.html', - 'docs/*': 'docssidebar.html'} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Output file base name for HTML help builder. -htmlhelp_basename = 'Pygmentsdoc' - - -# -- Options for LaTeX output -------------------------------------------------- - -latex_elements = { -# The paper size ('letterpaper' or 'a4paper'). -#'papersize': 'letterpaper', - -# The font size ('10pt', '11pt' or '12pt'). -#'pointsize': '10pt', - -# Additional stuff for the LaTeX preamble. -#'preamble': '', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass [howto/manual]). -latex_documents = [ - ('index', 'Pygments.tex', u'Pygments Documentation', - u'Georg Brandl', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output -------------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ('index', 'pygments', u'Pygments Documentation', - [u'Georg Brandl'], 1) -] - -# If true, show URL addresses after external links. -#man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------------ - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ('index', 'Pygments', u'Pygments Documentation', - u'Georg Brandl', 'Pygments', 'One line description of project.', - 'Miscellaneous'), -] - -# Documents to append as an appendix to all manuals. -#texinfo_appendices = [] - -# If false, no module index is generated. -#texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#texinfo_show_urls = 'footnote' - - -# Example configuration for intersphinx: refer to the Python standard library. -#intersphinx_mapping = {'http://docs.python.org/': None} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/api.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/api.rst deleted file mode 100644 index 123a464..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/api.rst +++ /dev/null @@ -1,316 +0,0 @@ -.. -*- mode: rst -*- - -===================== -The full Pygments API -===================== - -This page describes the Pygments API. - -High-level API -============== - -.. module:: pygments - -Functions from the :mod:`pygments` module: - -.. function:: lex(code, lexer) - - Lex `code` with the `lexer` (must be a `Lexer` instance) - and return an iterable of tokens. Currently, this only calls - `lexer.get_tokens()`. - -.. function:: format(tokens, formatter, outfile=None) - - Format a token stream (iterable of tokens) `tokens` with the - `formatter` (must be a `Formatter` instance). The result is - written to `outfile`, or if that is ``None``, returned as a - string. - -.. function:: highlight(code, lexer, formatter, outfile=None) - - This is the most high-level highlighting function. - It combines `lex` and `format` in one function. - - -.. module:: pygments.lexers - -Functions from :mod:`pygments.lexers`: - -.. function:: get_lexer_by_name(alias, **options) - - Return an instance of a `Lexer` subclass that has `alias` in its - aliases list. The lexer is given the `options` at its - instantiation. - - Will raise :exc:`pygments.util.ClassNotFound` if no lexer with that alias is - found. - -.. function:: get_lexer_for_filename(fn, **options) - - Return a `Lexer` subclass instance that has a filename pattern - matching `fn`. The lexer is given the `options` at its - instantiation. - - Will raise :exc:`pygments.util.ClassNotFound` if no lexer for that filename - is found. - -.. function:: get_lexer_for_mimetype(mime, **options) - - Return a `Lexer` subclass instance that has `mime` in its mimetype - list. The lexer is given the `options` at its instantiation. - - Will raise :exc:`pygments.util.ClassNotFound` if not lexer for that mimetype - is found. - -.. function:: guess_lexer(text, **options) - - Return a `Lexer` subclass instance that's guessed from the text in - `text`. For that, the :meth:`.analyse_text()` method of every known lexer - class is called with the text as argument, and the lexer which returned the - highest value will be instantiated and returned. - - :exc:`pygments.util.ClassNotFound` is raised if no lexer thinks it can - handle the content. - -.. function:: guess_lexer_for_filename(filename, text, **options) - - As :func:`guess_lexer()`, but only lexers which have a pattern in `filenames` - or `alias_filenames` that matches `filename` are taken into consideration. - - :exc:`pygments.util.ClassNotFound` is raised if no lexer thinks it can - handle the content. - -.. function:: get_all_lexers() - - Return an iterable over all registered lexers, yielding tuples in the - format:: - - (longname, tuple of aliases, tuple of filename patterns, tuple of mimetypes) - - .. versionadded:: 0.6 - - -.. module:: pygments.formatters - -Functions from :mod:`pygments.formatters`: - -.. function:: get_formatter_by_name(alias, **options) - - Return an instance of a :class:`.Formatter` subclass that has `alias` in its - aliases list. The formatter is given the `options` at its instantiation. - - Will raise :exc:`pygments.util.ClassNotFound` if no formatter with that - alias is found. - -.. function:: get_formatter_for_filename(fn, **options) - - Return a :class:`.Formatter` subclass instance that has a filename pattern - matching `fn`. The formatter is given the `options` at its instantiation. - - Will raise :exc:`pygments.util.ClassNotFound` if no formatter for that filename - is found. - - -.. module:: pygments.styles - -Functions from :mod:`pygments.styles`: - -.. function:: get_style_by_name(name) - - Return a style class by its short name. The names of the builtin styles - are listed in :data:`pygments.styles.STYLE_MAP`. - - Will raise :exc:`pygments.util.ClassNotFound` if no style of that name is - found. - -.. function:: get_all_styles() - - Return an iterable over all registered styles, yielding their names. - - .. versionadded:: 0.6 - - -.. module:: pygments.lexer - -Lexers -====== - -The base lexer class from which all lexers are derived is: - -.. class:: Lexer(**options) - - The constructor takes a \*\*keywords dictionary of options. - Every subclass must first process its own options and then call - the `Lexer` constructor, since it processes the `stripnl`, - `stripall` and `tabsize` options. - - An example looks like this: - - .. sourcecode:: python - - def __init__(self, **options): - self.compress = options.get('compress', '') - Lexer.__init__(self, **options) - - As these options must all be specifiable as strings (due to the - command line usage), there are various utility functions - available to help with that, see `Option processing`_. - - .. method:: get_tokens(text) - - This method is the basic interface of a lexer. It is called by - the `highlight()` function. It must process the text and return an - iterable of ``(tokentype, value)`` pairs from `text`. - - Normally, you don't need to override this method. The default - implementation processes the `stripnl`, `stripall` and `tabsize` - options and then yields all tokens from `get_tokens_unprocessed()`, - with the ``index`` dropped. - - .. method:: get_tokens_unprocessed(text) - - This method should process the text and return an iterable of - ``(index, tokentype, value)`` tuples where ``index`` is the starting - position of the token within the input text. - - This method must be overridden by subclasses. - - .. staticmethod:: analyse_text(text) - - A static method which is called for lexer guessing. It should analyse - the text and return a float in the range from ``0.0`` to ``1.0``. - If it returns ``0.0``, the lexer will not be selected as the most - probable one, if it returns ``1.0``, it will be selected immediately. - - .. note:: You don't have to add ``@staticmethod`` to the definition of - this method, this will be taken care of by the Lexer's metaclass. - - For a list of known tokens have a look at the :doc:`tokens` page. - - A lexer also can have the following attributes (in fact, they are mandatory - except `alias_filenames`) that are used by the builtin lookup mechanism. - - .. attribute:: name - - Full name for the lexer, in human-readable form. - - .. attribute:: aliases - - A list of short, unique identifiers that can be used to lookup - the lexer from a list, e.g. using `get_lexer_by_name()`. - - .. attribute:: filenames - - A list of `fnmatch` patterns that match filenames which contain - content for this lexer. The patterns in this list should be unique among - all lexers. - - .. attribute:: alias_filenames - - A list of `fnmatch` patterns that match filenames which may or may not - contain content for this lexer. This list is used by the - :func:`.guess_lexer_for_filename()` function, to determine which lexers - are then included in guessing the correct one. That means that - e.g. every lexer for HTML and a template language should include - ``\*.html`` in this list. - - .. attribute:: mimetypes - - A list of MIME types for content that can be lexed with this - lexer. - - -.. module:: pygments.formatter - -Formatters -========== - -A formatter is derived from this class: - - -.. class:: Formatter(**options) - - As with lexers, this constructor processes options and then must call the - base class :meth:`__init__`. - - The :class:`Formatter` class recognizes the options `style`, `full` and - `title`. It is up to the formatter class whether it uses them. - - .. method:: get_style_defs(arg='') - - This method must return statements or declarations suitable to define - the current style for subsequent highlighted text (e.g. CSS classes - in the `HTMLFormatter`). - - The optional argument `arg` can be used to modify the generation and - is formatter dependent (it is standardized because it can be given on - the command line). - - This method is called by the ``-S`` :doc:`command-line option `, - the `arg` is then given by the ``-a`` option. - - .. method:: format(tokensource, outfile) - - This method must format the tokens from the `tokensource` iterable and - write the formatted version to the file object `outfile`. - - Formatter options can control how exactly the tokens are converted. - - .. versionadded:: 0.7 - A formatter must have the following attributes that are used by the - builtin lookup mechanism. - - .. attribute:: name - - Full name for the formatter, in human-readable form. - - .. attribute:: aliases - - A list of short, unique identifiers that can be used to lookup - the formatter from a list, e.g. using :func:`.get_formatter_by_name()`. - - .. attribute:: filenames - - A list of :mod:`fnmatch` patterns that match filenames for which this - formatter can produce output. The patterns in this list should be unique - among all formatters. - - -.. module:: pygments.util - -Option processing -================= - -The :mod:`pygments.util` module has some utility functions usable for option -processing: - -.. exception:: OptionError - - This exception will be raised by all option processing functions if - the type or value of the argument is not correct. - -.. function:: get_bool_opt(options, optname, default=None) - - Interpret the key `optname` from the dictionary `options` as a boolean and - return it. Return `default` if `optname` is not in `options`. - - The valid string values for ``True`` are ``1``, ``yes``, ``true`` and - ``on``, the ones for ``False`` are ``0``, ``no``, ``false`` and ``off`` - (matched case-insensitively). - -.. function:: get_int_opt(options, optname, default=None) - - As :func:`get_bool_opt`, but interpret the value as an integer. - -.. function:: get_list_opt(options, optname, default=None) - - If the key `optname` from the dictionary `options` is a string, - split it at whitespace and return it. If it is already a list - or a tuple, it is returned as a list. - -.. function:: get_choice_opt(options, optname, allowed, default=None) - - If the key `optname` from the dictionary is not in the sequence - `allowed`, raise an error, otherwise return it. - - .. versionadded:: 0.8 diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/authors.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/authors.rst deleted file mode 100644 index f8373f0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/authors.rst +++ /dev/null @@ -1,4 +0,0 @@ -Full contributor list -===================== - -.. include:: ../../AUTHORS diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/changelog.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/changelog.rst deleted file mode 100644 index f264cab..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/changelog.rst +++ /dev/null @@ -1 +0,0 @@ -.. include:: ../../CHANGES diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/cmdline.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/cmdline.rst deleted file mode 100644 index bf0177a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/cmdline.rst +++ /dev/null @@ -1,145 +0,0 @@ -.. -*- mode: rst -*- - -====================== -Command Line Interface -====================== - -You can use Pygments from the shell, provided you installed the -:program:`pygmentize` script:: - - $ pygmentize test.py - print "Hello World" - -will print the file test.py to standard output, using the Python lexer -(inferred from the file name extension) and the terminal formatter (because -you didn't give an explicit formatter name). - -If you want HTML output:: - - $ pygmentize -f html -l python -o test.html test.py - -As you can see, the -l option explicitly selects a lexer. As seen above, if you -give an input file name and it has an extension that Pygments recognizes, you can -omit this option. - -The ``-o`` option gives an output file name. If it is not given, output is -written to stdout. - -The ``-f`` option selects a formatter (as with ``-l``, it can also be omitted -if an output file name is given and has a supported extension). -If no output file name is given and ``-f`` is omitted, the -:class:`.TerminalFormatter` is used. - -The above command could therefore also be given as:: - - $ pygmentize -o test.html test.py - -To create a full HTML document, including line numbers and stylesheet (using the -"emacs" style), highlighting the Python file ``test.py`` to ``test.html``:: - - $ pygmentize -O full,style=emacs -o test.html test.py - - -Options and filters -------------------- - -Lexer and formatter options can be given using the ``-O`` option:: - - $ pygmentize -f html -O style=colorful,linenos=1 -l python test.py - -Be sure to enclose the option string in quotes if it contains any special shell -characters, such as spaces or expansion wildcards like ``*``. If an option -expects a list value, separate the list entries with spaces (you'll have to -quote the option value in this case too, so that the shell doesn't split it). - -Since the ``-O`` option argument is split at commas and expects the split values -to be of the form ``name=value``, you can't give an option value that contains -commas or equals signs. Therefore, an option ``-P`` is provided (as of Pygments -0.9) that works like ``-O`` but can only pass one option per ``-P``. Its value -can then contain all characters:: - - $ pygmentize -P "heading=Pygments, the Python highlighter" ... - -Filters are added to the token stream using the ``-F`` option:: - - $ pygmentize -f html -l pascal -F keywordcase:case=upper main.pas - -As you see, options for the filter are given after a colon. As for ``-O``, the -filter name and options must be one shell word, so there may not be any spaces -around the colon. - - -Generating styles ------------------ - -Formatters normally don't output full style information. For example, the HTML -formatter by default only outputs ```` tags with ``class`` attributes. -Therefore, there's a special ``-S`` option for generating style definitions. -Usage is as follows:: - - $ pygmentize -f html -S colorful -a .syntax - -generates a CSS style sheet (because you selected the HTML formatter) for -the "colorful" style prepending a ".syntax" selector to all style rules. - -For an explanation what ``-a`` means for :doc:`a particular formatter -`, look for the `arg` argument for the formatter's -:meth:`.get_style_defs()` method. - - -Getting lexer names -------------------- - -.. versionadded:: 1.0 - -The ``-N`` option guesses a lexer name for a given filename, so that :: - - $ pygmentize -N setup.py - -will print out ``python``. It won't highlight anything yet. If no specific -lexer is known for that filename, ``text`` is printed. - - -Getting help ------------- - -The ``-L`` option lists lexers, formatters, along with their short -names and supported file name extensions, styles and filters. If you want to see -only one category, give it as an argument:: - - $ pygmentize -L filters - -will list only all installed filters. - -The ``-H`` option will give you detailed information (the same that can be found -in this documentation) about a lexer, formatter or filter. Usage is as follows:: - - $ pygmentize -H formatter html - -will print the help for the HTML formatter, while :: - - $ pygmentize -H lexer python - -will print the help for the Python lexer, etc. - - -A note on encodings -------------------- - -.. versionadded:: 0.9 - -Pygments tries to be smart regarding encodings in the formatting process: - -* If you give an ``encoding`` option, it will be used as the input and - output encoding. - -* If you give an ``outencoding`` option, it will override ``encoding`` - as the output encoding. - -* If you don't give an encoding and have given an output file, the default - encoding for lexer and formatter is ``latin1`` (which will pass through - all non-ASCII characters). - -* If you don't give an encoding and haven't given an output file (that means - output is written to the console), the default encoding for lexer and - formatter is the terminal encoding (``sys.stdout.encoding``). diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/filterdevelopment.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/filterdevelopment.rst deleted file mode 100644 index bc399a6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/filterdevelopment.rst +++ /dev/null @@ -1,70 +0,0 @@ -.. -*- mode: rst -*- - -===================== -Write your own filter -===================== - -.. versionadded:: 0.7 - -Writing own filters is very easy. All you have to do is to subclass -the `Filter` class and override the `filter` method. Additionally a -filter is instanciated with some keyword arguments you can use to -adjust the behavior of your filter. - - -Subclassing Filters -=================== - -As an example, we write a filter that converts all `Name.Function` tokens -to normal `Name` tokens to make the output less colorful. - -.. sourcecode:: python - - from pygments.util import get_bool_opt - from pygments.token import Name - from pygments.filter import Filter - - class UncolorFilter(Filter): - - def __init__(self, **options): - Filter.__init__(self, **options) - self.class_too = get_bool_opt(options, 'classtoo') - - def filter(self, lexer, stream): - for ttype, value in stream: - if ttype is Name.Function or (self.class_too and - ttype is Name.Class): - ttype = Name - yield ttype, value - -Some notes on the `lexer` argument: that can be quite confusing since it doesn't -need to be a lexer instance. If a filter was added by using the `add_filter()` -function of lexers, that lexer is registered for the filter. In that case -`lexer` will refer to the lexer that has registered the filter. It *can* be used -to access options passed to a lexer. Because it could be `None` you always have -to check for that case if you access it. - - -Using a decorator -================= - -You can also use the `simplefilter` decorator from the `pygments.filter` module: - -.. sourcecode:: python - - from pygments.util import get_bool_opt - from pygments.token import Name - from pygments.filter import simplefilter - - - @simplefilter - def uncolor(lexer, stream, options): - class_too = get_bool_opt(options, 'classtoo') - for ttype, value in stream: - if ttype is Name.Function or (class_too and - ttype is Name.Class): - ttype = Name - yield ttype, value - -The decorator automatically subclasses an internal filter class and uses the -decorated function for filtering. diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/filters.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/filters.rst deleted file mode 100644 index ff2519a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/filters.rst +++ /dev/null @@ -1,41 +0,0 @@ -.. -*- mode: rst -*- - -======= -Filters -======= - -.. versionadded:: 0.7 - -You can filter token streams coming from lexers to improve or annotate the -output. For example, you can highlight special words in comments, convert -keywords to upper or lowercase to enforce a style guide etc. - -To apply a filter, you can use the `add_filter()` method of a lexer: - -.. sourcecode:: pycon - - >>> from pygments.lexers import PythonLexer - >>> l = PythonLexer() - >>> # add a filter given by a string and options - >>> l.add_filter('codetagify', case='lower') - >>> l.filters - [] - >>> from pygments.filters import KeywordCaseFilter - >>> # or give an instance - >>> l.add_filter(KeywordCaseFilter(case='lower')) - -The `add_filter()` method takes keyword arguments which are forwarded to -the constructor of the filter. - -To get a list of all registered filters by name, you can use the -`get_all_filters()` function from the `pygments.filters` module that returns an -iterable for all known filters. - -If you want to write your own filter, have a look at :doc:`Write your own filter -`. - - -Builtin Filters -=============== - -.. pygmentsdoc:: filters diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/formatterdevelopment.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/formatterdevelopment.rst deleted file mode 100644 index 2bfac05..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/formatterdevelopment.rst +++ /dev/null @@ -1,169 +0,0 @@ -.. -*- mode: rst -*- - -======================== -Write your own formatter -======================== - -As well as creating :doc:`your own lexer `, writing a new -formatter for Pygments is easy and straightforward. - -A formatter is a class that is initialized with some keyword arguments (the -formatter options) and that must provides a `format()` method. -Additionally a formatter should provide a `get_style_defs()` method that -returns the style definitions from the style in a form usable for the -formatter's output format. - - -Quickstart -========== - -The most basic formatter shipped with Pygments is the `NullFormatter`. It just -sends the value of a token to the output stream: - -.. sourcecode:: python - - from pygments.formatter import Formatter - - class NullFormatter(Formatter): - def format(self, tokensource, outfile): - for ttype, value in tokensource: - outfile.write(value) - -As you can see, the `format()` method is passed two parameters: `tokensource` -and `outfile`. The first is an iterable of ``(token_type, value)`` tuples, -the latter a file like object with a `write()` method. - -Because the formatter is that basic it doesn't overwrite the `get_style_defs()` -method. - - -Styles -====== - -Styles aren't instantiated but their metaclass provides some class functions -so that you can access the style definitions easily. - -Styles are iterable and yield tuples in the form ``(ttype, d)`` where `ttype` -is a token and `d` is a dict with the following keys: - -``'color'`` - Hexadecimal color value (eg: ``'ff0000'`` for red) or `None` if not - defined. - -``'bold'`` - `True` if the value should be bold - -``'italic'`` - `True` if the value should be italic - -``'underline'`` - `True` if the value should be underlined - -``'bgcolor'`` - Hexadecimal color value for the background (eg: ``'eeeeeee'`` for light - gray) or `None` if not defined. - -``'border'`` - Hexadecimal color value for the border (eg: ``'0000aa'`` for a dark - blue) or `None` for no border. - -Additional keys might appear in the future, formatters should ignore all keys -they don't support. - - -HTML 3.2 Formatter -================== - -For an more complex example, let's implement a HTML 3.2 Formatter. We don't -use CSS but inline markup (````, ````, etc). Because this isn't good -style this formatter isn't in the standard library ;-) - -.. sourcecode:: python - - from pygments.formatter import Formatter - - class OldHtmlFormatter(Formatter): - - def __init__(self, **options): - Formatter.__init__(self, **options) - - # create a dict of (start, end) tuples that wrap the - # value of a token so that we can use it in the format - # method later - self.styles = {} - - # we iterate over the `_styles` attribute of a style item - # that contains the parsed style values. - for token, style in self.style: - start = end = '' - # a style item is a tuple in the following form: - # colors are readily specified in hex: 'RRGGBB' - if style['color']: - start += '' % style['color'] - end = '' + end - if style['bold']: - start += '' - end = '' + end - if style['italic']: - start += '' - end = '' + end - if style['underline']: - start += '' - end = '' + end - self.styles[token] = (start, end) - - def format(self, tokensource, outfile): - # lastval is a string we use for caching - # because it's possible that an lexer yields a number - # of consecutive tokens with the same token type. - # to minimize the size of the generated html markup we - # try to join the values of same-type tokens here - lastval = '' - lasttype = None - - # wrap the whole output with
    -            outfile.write('
    ')
    -
    -            for ttype, value in tokensource:
    -                # if the token type doesn't exist in the stylemap
    -                # we try it with the parent of the token type
    -                # eg: parent of Token.Literal.String.Double is
    -                # Token.Literal.String
    -                while ttype not in self.styles:
    -                    ttype = ttype.parent
    -                if ttype == lasttype:
    -                    # the current token type is the same of the last
    -                    # iteration. cache it
    -                    lastval += value
    -                else:
    -                    # not the same token as last iteration, but we
    -                    # have some data in the buffer. wrap it with the
    -                    # defined style and write it to the output file
    -                    if lastval:
    -                        stylebegin, styleend = self.styles[lasttype]
    -                        outfile.write(stylebegin + lastval + styleend)
    -                    # set lastval/lasttype to current values
    -                    lastval = value
    -                    lasttype = ttype
    -
    -            # if something is left in the buffer, write it to the
    -            # output file, then close the opened 
     tag
    -            if lastval:
    -                stylebegin, styleend = self.styles[lasttype]
    -                outfile.write(stylebegin + lastval + styleend)
    -            outfile.write('
    \n') - -The comments should explain it. Again, this formatter doesn't override the -`get_style_defs()` method. If we would have used CSS classes instead of -inline HTML markup, we would need to generate the CSS first. For that -purpose the `get_style_defs()` method exists: - - -Generating Style Definitions -============================ - -Some formatters like the `LatexFormatter` and the `HtmlFormatter` don't -output inline markup but reference either macros or css classes. Because -the definitions of those are not part of the output, the `get_style_defs()` -method exists. It is passed one parameter (if it's used and how it's used -is up to the formatter) and has to return a string or ``None``. diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/formatters.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/formatters.rst deleted file mode 100644 index 9e7074e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/formatters.rst +++ /dev/null @@ -1,48 +0,0 @@ -.. -*- mode: rst -*- - -==================== -Available formatters -==================== - -This page lists all builtin formatters. - -Common options -============== - -All formatters support these options: - -`encoding` - If given, must be an encoding name (such as ``"utf-8"``). This will - be used to convert the token strings (which are Unicode strings) - to byte strings in the output (default: ``None``). - It will also be written in an encoding declaration suitable for the - document format if the `full` option is given (e.g. a ``meta - content-type`` directive in HTML or an invocation of the `inputenc` - package in LaTeX). - - If this is ``""`` or ``None``, Unicode strings will be written - to the output file, which most file-like objects do not support. - For example, `pygments.highlight()` will return a Unicode string if - called with no `outfile` argument and a formatter that has `encoding` - set to ``None`` because it uses a `StringIO.StringIO` object that - supports Unicode arguments to `write()`. Using a regular file object - wouldn't work. - - .. versionadded:: 0.6 - -`outencoding` - When using Pygments from the command line, any `encoding` option given is - passed to the lexer and the formatter. This is sometimes not desirable, - for example if you want to set the input encoding to ``"guess"``. - Therefore, `outencoding` has been introduced which overrides `encoding` - for the formatter if given. - - .. versionadded:: 0.7 - - -Formatter classes -================= - -All these classes are importable from :mod:`pygments.formatters`. - -.. pygmentsdoc:: formatters diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/index.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/index.rst deleted file mode 100644 index 30d5c08..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/index.rst +++ /dev/null @@ -1,66 +0,0 @@ -Pygments documentation -====================== - -**Starting with Pygments** - -.. toctree:: - :maxdepth: 1 - - ../download - quickstart - cmdline - -**Builtin components** - -.. toctree:: - :maxdepth: 1 - - lexers - filters - formatters - styles - -**Reference** - -.. toctree:: - :maxdepth: 1 - - unicode - tokens - api - -**Hacking for Pygments** - -.. toctree:: - :maxdepth: 1 - - lexerdevelopment - formatterdevelopment - filterdevelopment - plugins - -**Hints and tricks** - -.. toctree:: - :maxdepth: 1 - - rstdirective - moinmoin - java - integrate - -**About Pygments** - -.. toctree:: - :maxdepth: 1 - - changelog - authors - - -If you find bugs or have suggestions for the documentation, please look -:ref:`here ` for info on how to contact the team. - -.. XXX You can download an offline version of this documentation from the - :doc:`download page `. - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/integrate.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/integrate.rst deleted file mode 100644 index 03fc268..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/integrate.rst +++ /dev/null @@ -1,44 +0,0 @@ -.. -*- mode: rst -*- - -=================================== -Using Pygments in various scenarios -=================================== - -PyGtk ------ - -Armin has written a piece of sample code that shows how to create a Gtk -`TextBuffer` object containing Pygments-highlighted text. - -See the article here: http://lucumr.pocoo.org/cogitations/2007/05/30/pygments-gtk-rendering/ - -Wordpress ---------- - -He also has a snippet that shows how to use Pygments in WordPress: - -http://lucumr.pocoo.org/cogitations/2007/05/30/pygments-in-wordpress/ - -Markdown --------- - -Since Pygments 0.9, the distribution ships Markdown_ preprocessor sample code -that uses Pygments to render source code in -:file:`external/markdown-processor.py`. You can copy and adapt it to your -liking. - -.. _Markdown: http://www.freewisdom.org/projects/python-markdown/ - -TextMate --------- - -Antonio Cangiano has created a Pygments bundle for TextMate that allows to -colorize code via a simple menu option. It can be found here_. - -.. _here: http://antoniocangiano.com/2008/10/28/pygments-textmate-bundle/ - -Bash completion ---------------- - -The source distribution contains a file ``external/pygments.bashcomp`` that -sets up completion for the ``pygmentize`` command in bash. diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/java.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/java.rst deleted file mode 100644 index 5eb6196..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/java.rst +++ /dev/null @@ -1,70 +0,0 @@ -===================== -Use Pygments in Java -===================== - -Thanks to `Jython `__ it is possible to use Pygments in -Java. - -This page is a simple tutorial to get an idea of how this is working. You can -then look at the `Jython documentation `__ for more -advanced use. - -Since version 1.5, Pygments is deployed on `Maven Central -`__ as a JAR so is Jython -which makes it a lot easier to create the Java project. - -Here is an example of a `Maven `__ ``pom.xml`` file for a -project running Pygments: - -.. sourcecode:: xml - - - - - 4.0.0 - example - example - 1.0-SNAPSHOT - - - org.python - jython-standalone - 2.5.3 - - - org.pygments - pygments - 1.5 - runtime - - - - -The following Java example: - -.. sourcecode:: java - - PythonInterpreter interpreter = new PythonInterpreter(); - - // Set a variable with the content you want to work with - interpreter.set("code", code); - - // Simple use Pygments as you would in Python - interpreter.exec("from pygments import highlight\n" - + "from pygments.lexers import PythonLexer\n" - + "from pygments.formatters import HtmlFormatter\n" - + "\nresult = highlight(code, PythonLexer(), HtmlFormatter())"); - - // Get the result that has been set in a variable - System.out.println(interpreter.get("result", String.class)); - -will print something like: - -.. sourcecode:: html - -
    -
    print "Hello World"
    -
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/lexerdevelopment.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/lexerdevelopment.rst deleted file mode 100644 index eab1306..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/lexerdevelopment.rst +++ /dev/null @@ -1,602 +0,0 @@ -.. -*- mode: rst -*- - -==================== -Write your own lexer -==================== - -If a lexer for your favorite language is missing in the Pygments package, you can -easily write your own and extend Pygments. - -All you need can be found inside the :mod:`pygments.lexer` module. As you can -read in the :doc:`API documentation `, a lexer is a class that is -initialized with some keyword arguments (the lexer options) and that provides a -:meth:`.get_tokens_unprocessed()` method which is given a string or unicode -object with the data to parse. - -The :meth:`.get_tokens_unprocessed()` method must return an iterator or iterable -containing tuples in the form ``(index, token, value)``. Normally you don't need -to do this since there are numerous base lexers you can subclass. - - -RegexLexer -========== - -A very powerful (but quite easy to use) lexer is the :class:`RegexLexer`. This -lexer base class allows you to define lexing rules in terms of *regular -expressions* for different *states*. - -States are groups of regular expressions that are matched against the input -string at the *current position*. If one of these expressions matches, a -corresponding action is performed (normally yielding a token with a specific -type), the current position is set to where the last match ended and the -matching process continues with the first regex of the current state. - -Lexer states are kept in a state stack: each time a new state is entered, the -new state is pushed onto the stack. The most basic lexers (like the -`DiffLexer`) just need one state. - -Each state is defined as a list of tuples in the form (`regex`, `action`, -`new_state`) where the last item is optional. In the most basic form, `action` -is a token type (like `Name.Builtin`). That means: When `regex` matches, emit a -token with the match text and type `tokentype` and push `new_state` on the state -stack. If the new state is ``'#pop'``, the topmost state is popped from the -stack instead. (To pop more than one state, use ``'#pop:2'`` and so on.) -``'#push'`` is a synonym for pushing the current state on the -stack. - -The following example shows the `DiffLexer` from the builtin lexers. Note that -it contains some additional attributes `name`, `aliases` and `filenames` which -aren't required for a lexer. They are used by the builtin lexer lookup -functions. - -.. sourcecode:: python - - from pygments.lexer import RegexLexer - from pygments.token import * - - class DiffLexer(RegexLexer): - name = 'Diff' - aliases = ['diff'] - filenames = ['*.diff'] - - tokens = { - 'root': [ - (r' .*\n', Text), - (r'\+.*\n', Generic.Inserted), - (r'-.*\n', Generic.Deleted), - (r'@.*\n', Generic.Subheading), - (r'Index.*\n', Generic.Heading), - (r'=.*\n', Generic.Heading), - (r'.*\n', Text), - ] - } - -As you can see this lexer only uses one state. When the lexer starts scanning -the text, it first checks if the current character is a space. If this is true -it scans everything until newline and returns the parsed data as `Text` token. - -If this rule doesn't match, it checks if the current char is a plus sign. And -so on. - -If no rule matches at the current position, the current char is emitted as an -`Error` token that indicates a parsing error, and the position is increased by -1. - - -Adding and testing a new lexer -============================== - -To make pygments aware of your new lexer, you have to perform the following -steps: - -First, change to the current directory containing the pygments source code: - -.. sourcecode:: console - - $ cd .../pygments-main - -Next, make sure the lexer is known from outside of the module. All modules in -the ``pygments.lexers`` specify ``__all__``. For example, ``other.py`` sets: - -.. sourcecode:: python - - __all__ = ['BrainfuckLexer', 'BefungeLexer', ...] - -Simply add the name of your lexer class to this list. - -Finally the lexer can be made publically known by rebuilding the lexer -mapping: - -.. sourcecode:: console - - $ make mapfiles - -To test the new lexer, store an example file with the proper extension in -``tests/examplefiles``. For example, to test your ``DiffLexer``, add a -``tests/examplefiles/example.diff`` containing a sample diff output. - -Now you can use pygmentize to render your example to HTML: - -.. sourcecode:: console - - $ ./pygmentize -O full -f html -o /tmp/example.html tests/examplefiles/example.diff - -Note that this explicitely calls the ``pygmentize`` in the current directory -by preceding it with ``./``. This ensures your modifications are used. -Otherwise a possibly already installed, unmodified version without your new -lexer would have been called from the system search path (``$PATH``). - -To view the result, open ``/tmp/example.html`` in your browser. - -Once the example renders as expected, you should run the complete test suite: - -.. sourcecode:: console - - $ make test - - -Regex Flags -=========== - -You can either define regex flags in the regex (``r'(?x)foo bar'``) or by adding -a `flags` attribute to your lexer class. If no attribute is defined, it defaults -to `re.MULTILINE`. For more informations about regular expression flags see the -`regular expressions`_ help page in the python documentation. - -.. _regular expressions: http://docs.python.org/lib/re-syntax.html - - -Scanning multiple tokens at once -================================ - -Here is a more complex lexer that highlights INI files. INI files consist of -sections, comments and key = value pairs: - -.. sourcecode:: python - - from pygments.lexer import RegexLexer, bygroups - from pygments.token import * - - class IniLexer(RegexLexer): - name = 'INI' - aliases = ['ini', 'cfg'] - filenames = ['*.ini', '*.cfg'] - - tokens = { - 'root': [ - (r'\s+', Text), - (r';.*?$', Comment), - (r'\[.*?\]$', Keyword), - (r'(.*?)(\s*)(=)(\s*)(.*?)$', - bygroups(Name.Attribute, Text, Operator, Text, String)) - ] - } - -The lexer first looks for whitespace, comments and section names. And later it -looks for a line that looks like a key, value pair, separated by an ``'='`` -sign, and optional whitespace. - -The `bygroups` helper makes sure that each group is yielded with a different -token type. First the `Name.Attribute` token, then a `Text` token for the -optional whitespace, after that a `Operator` token for the equals sign. Then a -`Text` token for the whitespace again. The rest of the line is returned as -`String`. - -Note that for this to work, every part of the match must be inside a capturing -group (a ``(...)``), and there must not be any nested capturing groups. If you -nevertheless need a group, use a non-capturing group defined using this syntax: -``r'(?:some|words|here)'`` (note the ``?:`` after the beginning parenthesis). - -If you find yourself needing a capturing group inside the regex which -shouldn't be part of the output but is used in the regular expressions for -backreferencing (eg: ``r'(<(foo|bar)>)(.*?)()'``), you can pass `None` -to the bygroups function and it will skip that group will be skipped in the -output. - - -Changing states -=============== - -Many lexers need multiple states to work as expected. For example, some -languages allow multiline comments to be nested. Since this is a recursive -pattern it's impossible to lex just using regular expressions. - -Here is the solution: - -.. sourcecode:: python - - from pygments.lexer import RegexLexer - from pygments.token import * - - class ExampleLexer(RegexLexer): - name = 'Example Lexer with states' - - tokens = { - 'root': [ - (r'[^/]+', Text), - (r'/\*', Comment.Multiline, 'comment'), - (r'//.*?$', Comment.Singleline), - (r'/', Text) - ], - 'comment': [ - (r'[^*/]', Comment.Multiline), - (r'/\*', Comment.Multiline, '#push'), - (r'\*/', Comment.Multiline, '#pop'), - (r'[*/]', Comment.Multiline) - ] - } - -This lexer starts lexing in the ``'root'`` state. It tries to match as much as -possible until it finds a slash (``'/'``). If the next character after the slash -is a star (``'*'``) the `RegexLexer` sends those two characters to the output -stream marked as `Comment.Multiline` and continues parsing with the rules -defined in the ``'comment'`` state. - -If there wasn't a star after the slash, the `RegexLexer` checks if it's a -singleline comment (eg: followed by a second slash). If this also wasn't the -case it must be a single slash (the separate regex for a single slash must also -be given, else the slash would be marked as an error token). - -Inside the ``'comment'`` state, we do the same thing again. Scan until the lexer -finds a star or slash. If it's the opening of a multiline comment, push the -``'comment'`` state on the stack and continue scanning, again in the -``'comment'`` state. Else, check if it's the end of the multiline comment. If -yes, pop one state from the stack. - -Note: If you pop from an empty stack you'll get an `IndexError`. (There is an -easy way to prevent this from happening: don't ``'#pop'`` in the root state). - -If the `RegexLexer` encounters a newline that is flagged as an error token, the -stack is emptied and the lexer continues scanning in the ``'root'`` state. This -helps producing error-tolerant highlighting for erroneous input, e.g. when a -single-line string is not closed. - - -Advanced state tricks -===================== - -There are a few more things you can do with states: - -- You can push multiple states onto the stack if you give a tuple instead of a - simple string as the third item in a rule tuple. For example, if you want to - match a comment containing a directive, something like:: - - /* rest of comment */ - - you can use this rule: - - .. sourcecode:: python - - tokens = { - 'root': [ - (r'/\* <', Comment, ('comment', 'directive')), - ... - ], - 'directive': [ - (r'[^>]*', Comment.Directive), - (r'>', Comment, '#pop'), - ], - 'comment': [ - (r'[^*]+', Comment), - (r'\*/', Comment, '#pop'), - (r'\*', Comment), - ] - } - - When this encounters the above sample, first ``'comment'`` and ``'directive'`` - are pushed onto the stack, then the lexer continues in the directive state - until it finds the closing ``>``, then it continues in the comment state until - the closing ``*/``. Then, both states are popped from the stack again and - lexing continues in the root state. - - .. versionadded:: 0.9 - The tuple can contain the special ``'#push'`` and ``'#pop'`` (but not - ``'#pop:n'``) directives. - - -- You can include the rules of a state in the definition of another. This is - done by using `include` from `pygments.lexer`: - - .. sourcecode:: python - - from pygments.lexer import RegexLexer, bygroups, include - from pygments.token import * - - class ExampleLexer(RegexLexer): - tokens = { - 'comments': [ - (r'/\*.*?\*/', Comment), - (r'//.*?\n', Comment), - ], - 'root': [ - include('comments'), - (r'(function )(\w+)( {)', - bygroups(Keyword, Name, Keyword), 'function'), - (r'.', Text), - ], - 'function': [ - (r'[^}/]+', Text), - include('comments'), - (r'/', Text), - (r'}', Keyword, '#pop'), - ] - } - - This is a hypothetical lexer for a language that consist of functions and - comments. Because comments can occur at toplevel and in functions, we need - rules for comments in both states. As you can see, the `include` helper saves - repeating rules that occur more than once (in this example, the state - ``'comment'`` will never be entered by the lexer, as it's only there to be - included in ``'root'`` and ``'function'``). - - -- Sometimes, you may want to "combine" a state from existing ones. This is - possible with the `combine` helper from `pygments.lexer`. - - If you, instead of a new state, write ``combined('state1', 'state2')`` as the - third item of a rule tuple, a new anonymous state will be formed from state1 - and state2 and if the rule matches, the lexer will enter this state. - - This is not used very often, but can be helpful in some cases, such as the - `PythonLexer`'s string literal processing. - -- If you want your lexer to start lexing in a different state you can modify - the stack by overloading the `get_tokens_unprocessed()` method: - - .. sourcecode:: python - - from pygments.lexer import RegexLexer - - class MyLexer(RegexLexer): - tokens = {...} - - def get_tokens_unprocessed(self, text): - stack = ['root', 'otherstate'] - for item in RegexLexer.get_tokens_unprocessed(text, stack): - yield item - - Some lexers like the `PhpLexer` use this to make the leading ``', Name.Tag), - ], - 'script-content': [ - (r'(.+?)(<\s*/\s*script\s*>)', - bygroups(using(JavascriptLexer), Name.Tag), - '#pop'), - ] - } - -Here the content of a ```` end tag is processed by the `JavascriptLexer`, while the -end tag is yielded as a normal token with the `Name.Tag` type. - -As an additional goodie, if the lexer class is replaced by `this` (imported from -`pygments.lexer`), the "other" lexer will be the current one (because you cannot -refer to the current class within the code that runs at class definition time). - -Also note the ``(r'<\s*script\s*', Name.Tag, ('script-content', 'tag'))`` rule. -Here, two states are pushed onto the state stack, ``'script-content'`` and -``'tag'``. That means that first ``'tag'`` is processed, which will parse -attributes and the closing ``>``, then the ``'tag'`` state is popped and the -next state on top of the stack will be ``'script-content'``. - -The `using()` helper has a special keyword argument, `state`, which works as -follows: if given, the lexer to use initially is not in the ``"root"`` state, -but in the state given by this argument. This *only* works with a `RegexLexer`. - -Any other keywords arguments passed to `using()` are added to the keyword -arguments used to create the lexer. - - -Delegating Lexer -================ - -Another approach for nested lexers is the `DelegatingLexer` which is for -example used for the template engine lexers. It takes two lexers as -arguments on initialisation: a `root_lexer` and a `language_lexer`. - -The input is processed as follows: First, the whole text is lexed with the -`language_lexer`. All tokens yielded with a type of ``Other`` are then -concatenated and given to the `root_lexer`. The language tokens of the -`language_lexer` are then inserted into the `root_lexer`'s token stream -at the appropriate positions. - -.. sourcecode:: python - - from pygments.lexer import DelegatingLexer - from pygments.lexers.web import HtmlLexer, PhpLexer - - class HtmlPhpLexer(DelegatingLexer): - def __init__(self, **options): - super(HtmlPhpLexer, self).__init__(HtmlLexer, PhpLexer, **options) - -This procedure ensures that e.g. HTML with template tags in it is highlighted -correctly even if the template tags are put into HTML tags or attributes. - -If you want to change the needle token ``Other`` to something else, you can -give the lexer another token type as the third parameter: - -.. sourcecode:: python - - DelegatingLexer.__init__(MyLexer, OtherLexer, Text, **options) - - -Callbacks -========= - -Sometimes the grammar of a language is so complex that a lexer would be unable -to parse it just by using regular expressions and stacks. - -For this, the `RegexLexer` allows callbacks to be given in rule tuples, instead -of token types (`bygroups` and `using` are nothing else but preimplemented -callbacks). The callback must be a function taking two arguments: - -* the lexer itself -* the match object for the last matched rule - -The callback must then return an iterable of (or simply yield) ``(index, -tokentype, value)`` tuples, which are then just passed through by -`get_tokens_unprocessed()`. The ``index`` here is the position of the token in -the input string, ``tokentype`` is the normal token type (like `Name.Builtin`), -and ``value`` the associated part of the input string. - -You can see an example here: - -.. sourcecode:: python - - from pygments.lexer import RegexLexer - from pygments.token import Generic - - class HypotheticLexer(RegexLexer): - - def headline_callback(lexer, match): - equal_signs = match.group(1) - text = match.group(2) - yield match.start(), Generic.Headline, equal_signs + text + equal_signs - - tokens = { - 'root': [ - (r'(=+)(.*?)(\1)', headline_callback) - ] - } - -If the regex for the `headline_callback` matches, the function is called with the -match object. Note that after the callback is done, processing continues -normally, that is, after the end of the previous match. The callback has no -possibility to influence the position. - -There are not really any simple examples for lexer callbacks, but you can see -them in action e.g. in the `compiled.py`_ source code in the `CLexer` and -`JavaLexer` classes. - -.. _compiled.py: http://bitbucket.org/birkenfeld/pygments-main/src/tip/pygments/lexers/compiled.py - - -The ExtendedRegexLexer class -============================ - -The `RegexLexer`, even with callbacks, unfortunately isn't powerful enough for -the funky syntax rules of some languages that will go unnamed, such as Ruby. - -But fear not; even then you don't have to abandon the regular expression -approach. For Pygments has a subclass of `RegexLexer`, the `ExtendedRegexLexer`. -All features known from RegexLexers are available here too, and the tokens are -specified in exactly the same way, *except* for one detail: - -The `get_tokens_unprocessed()` method holds its internal state data not as local -variables, but in an instance of the `pygments.lexer.LexerContext` class, and -that instance is passed to callbacks as a third argument. This means that you -can modify the lexer state in callbacks. - -The `LexerContext` class has the following members: - -* `text` -- the input text -* `pos` -- the current starting position that is used for matching regexes -* `stack` -- a list containing the state stack -* `end` -- the maximum position to which regexes are matched, this defaults to - the length of `text` - -Additionally, the `get_tokens_unprocessed()` method can be given a -`LexerContext` instead of a string and will then process this context instead of -creating a new one for the string argument. - -Note that because you can set the current position to anything in the callback, -it won't be automatically be set by the caller after the callback is finished. -For example, this is how the hypothetical lexer above would be written with the -`ExtendedRegexLexer`: - -.. sourcecode:: python - - from pygments.lexer import ExtendedRegexLexer - from pygments.token import Generic - - class ExHypotheticLexer(ExtendedRegexLexer): - - def headline_callback(lexer, match, ctx): - equal_signs = match.group(1) - text = match.group(2) - yield match.start(), Generic.Headline, equal_signs + text + equal_signs - ctx.pos = match.end() - - tokens = { - 'root': [ - (r'(=+)(.*?)(\1)', headline_callback) - ] - } - -This might sound confusing (and it can really be). But it is needed, and for an -example look at the Ruby lexer in `agile.py`_. - -.. _agile.py: https://bitbucket.org/birkenfeld/pygments-main/src/tip/pygments/lexers/agile.py - - -Filtering Token Streams -======================= - -Some languages ship a lot of builtin functions (for example PHP). The total -amount of those functions differs from system to system because not everybody -has every extension installed. In the case of PHP there are over 3000 builtin -functions. That's an incredible huge amount of functions, much more than you -can put into a regular expression. - -But because only `Name` tokens can be function names it's solvable by overriding -the ``get_tokens_unprocessed()`` method. The following lexer subclasses the -`PythonLexer` so that it highlights some additional names as pseudo keywords: - -.. sourcecode:: python - - from pygments.lexers.agile import PythonLexer - from pygments.token import Name, Keyword - - class MyPythonLexer(PythonLexer): - EXTRA_KEYWORDS = ['foo', 'bar', 'foobar', 'barfoo', 'spam', 'eggs'] - - def get_tokens_unprocessed(self, text): - for index, token, value in PythonLexer.get_tokens_unprocessed(self, text): - if token is Name and value in self.EXTRA_KEYWORDS: - yield index, Keyword.Pseudo, value - else: - yield index, token, value - -The `PhpLexer` and `LuaLexer` use this method to resolve builtin functions. - -.. note:: Do not confuse this with the :doc:`filter ` system. diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/lexers.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/lexers.rst deleted file mode 100644 index 914b53e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/lexers.rst +++ /dev/null @@ -1,69 +0,0 @@ -.. -*- mode: rst -*- - -================ -Available lexers -================ - -This page lists all available builtin lexers and the options they take. - -Currently, **all lexers** support these options: - -`stripnl` - Strip leading and trailing newlines from the input (default: ``True``) - -`stripall` - Strip all leading and trailing whitespace from the input (default: - ``False``). - -`ensurenl` - Make sure that the input ends with a newline (default: ``True``). This - is required for some lexers that consume input linewise. - - .. versionadded:: 1.3 - -`tabsize` - If given and greater than 0, expand tabs in the input (default: ``0``). - -`encoding` - If given, must be an encoding name (such as ``"utf-8"``). This encoding - will be used to convert the input string to Unicode (if it is not already - a Unicode string). The default is ``"latin1"``. - - If this option is set to ``"guess"``, a simple UTF-8 vs. Latin-1 - detection is used, if it is set to ``"chardet"``, the - `chardet library `__ is used to - guess the encoding of the input. - - .. versionadded:: 0.6 - - -The "Short Names" field lists the identifiers that can be used with the -`get_lexer_by_name()` function. - -These lexers are builtin and can be imported from `pygments.lexers`: - -.. pygmentsdoc:: lexers - - -Iterating over all lexers -------------------------- - -.. versionadded:: 0.6 - -To get all lexers (both the builtin and the plugin ones), you can -use the `get_all_lexers()` function from the `pygments.lexers` -module: - -.. sourcecode:: pycon - - >>> from pygments.lexers import get_all_lexers - >>> i = get_all_lexers() - >>> i.next() - ('Diff', ('diff',), ('*.diff', '*.patch'), ('text/x-diff', 'text/x-patch')) - >>> i.next() - ('Delphi', ('delphi', 'objectpascal', 'pas', 'pascal'), ('*.pas',), ('text/x-pascal',)) - >>> i.next() - ('XML+Ruby', ('xml+erb', 'xml+ruby'), (), ()) - -As you can see, the return value is an iterator which yields tuples -in the form ``(name, aliases, filetypes, mimetypes)``. diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/moinmoin.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/moinmoin.rst deleted file mode 100644 index 8b2216b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/moinmoin.rst +++ /dev/null @@ -1,39 +0,0 @@ -.. -*- mode: rst -*- - -============================ -Using Pygments with MoinMoin -============================ - -From Pygments 0.7, the source distribution ships a `Moin`_ parser plugin that -can be used to get Pygments highlighting in Moin wiki pages. - -To use it, copy the file `external/moin-parser.py` from the Pygments -distribution to the `data/plugin/parser` subdirectory of your Moin instance. -Edit the options at the top of the file (currently ``ATTACHMENTS`` and -``INLINESTYLES``) and rename the file to the name that the parser directive -should have. For example, if you name the file ``code.py``, you can get a -highlighted Python code sample with this Wiki markup:: - - {{{ - #!code python - [...] - }}} - -where ``python`` is the Pygments name of the lexer to use. - -Additionally, if you set the ``ATTACHMENTS`` option to True, Pygments will also -be called for all attachments for whose filenames there is no other parser -registered. - -You are responsible for including CSS rules that will map the Pygments CSS -classes to colors. You can output a stylesheet file with `pygmentize`, put it -into the `htdocs` directory of your Moin instance and then include it in the -`stylesheets` configuration option in the Moin config, e.g.:: - - stylesheets = [('screen', '/htdocs/pygments.css')] - -If you do not want to do that and are willing to accept larger HTML output, you -can set the ``INLINESTYLES`` option to True. - - -.. _Moin: http://moinmoin.wikiwikiweb.de/ diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/plugins.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/plugins.rst deleted file mode 100644 index a6f8d7b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/plugins.rst +++ /dev/null @@ -1,93 +0,0 @@ -================ -Register Plugins -================ - -If you want to extend Pygments without hacking the sources, but want to -use the lexer/formatter/style/filter lookup functions (`lexers.get_lexer_by_name` -et al.), you can use `setuptools`_ entrypoints to add new lexers, formatters -or styles as if they were in the Pygments core. - -.. _setuptools: http://peak.telecommunity.com/DevCenter/setuptools - -That means you can use your highlighter modules with the `pygmentize` script, -which relies on the mentioned functions. - - -Entrypoints -=========== - -Here is a list of setuptools entrypoints that Pygments understands: - -`pygments.lexers` - - This entrypoint is used for adding new lexers to the Pygments core. - The name of the entrypoint values doesn't really matter, Pygments extracts - required metadata from the class definition: - - .. sourcecode:: ini - - [pygments.lexers] - yourlexer = yourmodule:YourLexer - - Note that you have to define ``name``, ``aliases`` and ``filename`` - attributes so that you can use the highlighter from the command line: - - .. sourcecode:: python - - class YourLexer(...): - name = 'Name Of Your Lexer' - aliases = ['alias'] - filenames = ['*.ext'] - - -`pygments.formatters` - - You can use this entrypoint to add new formatters to Pygments. The - name of an entrypoint item is the name of the formatter. If you - prefix the name with a slash it's used as a filename pattern: - - .. sourcecode:: ini - - [pygments.formatters] - yourformatter = yourmodule:YourFormatter - /.ext = yourmodule:YourFormatter - - -`pygments.styles` - - To add a new style you can use this entrypoint. The name of the entrypoint - is the name of the style: - - .. sourcecode:: ini - - [pygments.styles] - yourstyle = yourmodule:YourStyle - - -`pygments.filters` - - Use this entrypoint to register a new filter. The name of the - entrypoint is the name of the filter: - - .. sourcecode:: ini - - [pygments.filters] - yourfilter = yourmodule:YourFilter - - -How To Use Entrypoints -====================== - -This documentation doesn't explain how to use those entrypoints because this is -covered in the `setuptools documentation`_. That page should cover everything -you need to write a plugin. - -.. _setuptools documentation: http://peak.telecommunity.com/DevCenter/setuptools - - -Extending The Core -================== - -If you have written a Pygments plugin that is open source, please inform us -about that. There is a high chance that we'll add it to the Pygments -distribution. diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/quickstart.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/quickstart.rst deleted file mode 100644 index dba7698..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/quickstart.rst +++ /dev/null @@ -1,205 +0,0 @@ -.. -*- mode: rst -*- - -=========================== -Introduction and Quickstart -=========================== - - -Welcome to Pygments! This document explains the basic concepts and terms and -gives a few examples of how to use the library. - - -Architecture -============ - -There are four types of components that work together highlighting a piece of -code: - -* A **lexer** splits the source into tokens, fragments of the source that - have a token type that determines what the text represents semantically - (e.g., keyword, string, or comment). There is a lexer for every language - or markup format that Pygments supports. -* The token stream can be piped through **filters**, which usually modify - the token types or text fragments, e.g. uppercasing all keywords. -* A **formatter** then takes the token stream and writes it to an output - file, in a format such as HTML, LaTeX or RTF. -* While writing the output, a **style** determines how to highlight all the - different token types. It maps them to attributes like "red and bold". - - -Example -======= - -Here is a small example for highlighting Python code: - -.. sourcecode:: python - - from pygments import highlight - from pygments.lexers import PythonLexer - from pygments.formatters import HtmlFormatter - - code = 'print "Hello World"' - print highlight(code, PythonLexer(), HtmlFormatter()) - -which prints something like this: - -.. sourcecode:: html - -
    -
    print "Hello World"
    -
    - -As you can see, Pygments uses CSS classes (by default, but you can change that) -instead of inline styles in order to avoid outputting redundant style information over -and over. A CSS stylesheet that contains all CSS classes possibly used in the output -can be produced by: - -.. sourcecode:: python - - print HtmlFormatter().get_style_defs('.highlight') - -The argument to :func:`get_style_defs` is used as an additional CSS selector: -the output may look like this: - -.. sourcecode:: css - - .highlight .k { color: #AA22FF; font-weight: bold } - .highlight .s { color: #BB4444 } - ... - - -Options -======= - -The :func:`highlight()` function supports a fourth argument called *outfile*, it -must be a file object if given. The formatted output will then be written to -this file instead of being returned as a string. - -Lexers and formatters both support options. They are given to them as keyword -arguments either to the class or to the lookup method: - -.. sourcecode:: python - - from pygments import highlight - from pygments.lexers import get_lexer_by_name - from pygments.formatters import HtmlFormatter - - lexer = get_lexer_by_name("python", stripall=True) - formatter = HtmlFormatter(linenos=True, cssclass="source") - result = highlight(code, lexer, formatter) - -This makes the lexer strip all leading and trailing whitespace from the input -(`stripall` option), lets the formatter output line numbers (`linenos` option), -and sets the wrapping ``
    ``'s class to ``source`` (instead of -``highlight``). - -Important options include: - -`encoding` : for lexers and formatters - Since Pygments uses Unicode strings internally, this determines which - encoding will be used to convert to or from byte strings. -`style` : for formatters - The name of the style to use when writing the output. - - -For an overview of builtin lexers and formatters and their options, visit the -:doc:`lexer ` and :doc:`formatters ` lists. - -For a documentation on filters, see :doc:`this page `. - - -Lexer and formatter lookup -========================== - -If you want to lookup a built-in lexer by its alias or a filename, you can use -one of the following methods: - -.. sourcecode:: pycon - - >>> from pygments.lexers import (get_lexer_by_name, - ... get_lexer_for_filename, get_lexer_for_mimetype) - - >>> get_lexer_by_name('python') - - - >>> get_lexer_for_filename('spam.rb') - - - >>> get_lexer_for_mimetype('text/x-perl') - - -All these functions accept keyword arguments; they will be passed to the lexer -as options. - -A similar API is available for formatters: use :func:`.get_formatter_by_name()` -and :func:`.get_formatter_for_filename()` from the :mod:`pygments.formatters` -module for this purpose. - - -Guessing lexers -=============== - -If you don't know the content of the file, or you want to highlight a file -whose extension is ambiguous, such as ``.html`` (which could contain plain HTML -or some template tags), use these functions: - -.. sourcecode:: pycon - - >>> from pygments.lexers import guess_lexer, guess_lexer_for_filename - - >>> guess_lexer('#!/usr/bin/python\nprint "Hello World!"') - - - >>> guess_lexer_for_filename('test.py', 'print "Hello World!"') - - -:func:`.guess_lexer()` passes the given content to the lexer classes' -:meth:`analyse_text()` method and returns the one for which it returns the -highest number. - -All lexers have two different filename pattern lists: the primary and the -secondary one. The :func:`.get_lexer_for_filename()` function only uses the -primary list, whose entries are supposed to be unique among all lexers. -:func:`.guess_lexer_for_filename()`, however, will first loop through all lexers -and look at the primary and secondary filename patterns if the filename matches. -If only one lexer matches, it is returned, else the guessing mechanism of -:func:`.guess_lexer()` is used with the matching lexers. - -As usual, keyword arguments to these functions are given to the created lexer -as options. - - -Command line usage -================== - -You can use Pygments from the command line, using the :program:`pygmentize` -script:: - - $ pygmentize test.py - -will highlight the Python file test.py using ANSI escape sequences -(a.k.a. terminal colors) and print the result to standard output. - -To output HTML, use the ``-f`` option:: - - $ pygmentize -f html -o test.html test.py - -to write an HTML-highlighted version of test.py to the file test.html. -Note that it will only be a snippet of HTML, if you want a full HTML document, -use the "full" option:: - - $ pygmentize -f html -O full -o test.html test.py - -This will produce a full HTML document with included stylesheet. - -A style can be selected with ``-O style=``. - -If you need a stylesheet for an existing HTML file using Pygments CSS classes, -it can be created with:: - - $ pygmentize -S default -f html > style.css - -where ``default`` is the style name. - -More options and tricks and be found in the :doc:`command line reference -`. diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/rstdirective.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/rstdirective.rst deleted file mode 100644 index c0d503b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/rstdirective.rst +++ /dev/null @@ -1,22 +0,0 @@ -.. -*- mode: rst -*- - -================================ -Using Pygments in ReST documents -================================ - -Many Python people use `ReST`_ for documentation their sourcecode, programs, -scripts et cetera. This also means that documentation often includes sourcecode -samples or snippets. - -You can easily enable Pygments support for your ReST texts using a custom -directive -- this is also how this documentation displays source code. - -From Pygments 0.9, the directive is shipped in the distribution as -`external/rst-directive.py`. You can copy and adapt this code to your liking. - -.. removed -- too confusing - *Loosely related note:* The ReST lexer now recognizes ``.. sourcecode::`` and - ``.. code::`` directives and highlights the contents in the specified language - if the `handlecodeblocks` option is true. - -.. _ReST: http://docutils.sf.net/rst.html diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/styles.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/styles.rst deleted file mode 100644 index 7ef4de1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/styles.rst +++ /dev/null @@ -1,143 +0,0 @@ -.. -*- mode: rst -*- - -====== -Styles -====== - -Pygments comes with some builtin styles that work for both the HTML and -LaTeX formatter. - -The builtin styles can be looked up with the `get_style_by_name` function: - -.. sourcecode:: pycon - - >>> from pygments.styles import get_style_by_name - >>> get_style_by_name('colorful') - - -You can pass a instance of a `Style` class to a formatter as the `style` -option in form of a string: - -.. sourcecode:: pycon - - >>> from pygments.styles import get_style_by_name - >>> HtmlFormatter(style='colorful').style - - -Or you can also import your own style (which must be a subclass of -`pygments.style.Style`) and pass it to the formatter: - -.. sourcecode:: pycon - - >>> from yourapp.yourmodule import YourStyle - >>> HtmlFormatter(style=YourStyle).style - - - -Creating Own Styles -=================== - -So, how to create a style? All you have to do is to subclass `Style` and -define some styles: - -.. sourcecode:: python - - from pygments.style import Style - from pygments.token import Keyword, Name, Comment, String, Error, \ - Number, Operator, Generic - - class YourStyle(Style): - default_style = "" - styles = { - Comment: 'italic #888', - Keyword: 'bold #005', - Name: '#f00', - Name.Function: '#0f0', - Name.Class: 'bold #0f0', - String: 'bg:#eee #111' - } - -That's it. There are just a few rules. When you define a style for `Name` -the style automatically also affects `Name.Function` and so on. If you -defined ``'bold'`` and you don't want boldface for a subtoken use ``'nobold'``. - -(Philosophy: the styles aren't written in CSS syntax since this way -they can be used for a variety of formatters.) - -`default_style` is the style inherited by all token types. - -To make the style usable for Pygments, you must - -* either register it as a plugin (see :doc:`the plugin docs `) -* or drop it into the `styles` subpackage of your Pygments distribution one style - class per style, where the file name is the style name and the class name is - `StylenameClass`. For example, if your style should be called - ``"mondrian"``, name the class `MondrianStyle`, put it into the file - ``mondrian.py`` and this file into the ``pygments.styles`` subpackage - directory. - - -Style Rules -=========== - -Here a small overview of all allowed styles: - -``bold`` - render text as bold -``nobold`` - don't render text as bold (to prevent subtokens being highlighted bold) -``italic`` - render text italic -``noitalic`` - don't render text as italic -``underline`` - render text underlined -``nounderline`` - don't render text underlined -``bg:`` - transparent background -``bg:#000000`` - background color (black) -``border:`` - no border -``border:#ffffff`` - border color (white) -``#ff0000`` - text color (red) -``noinherit`` - don't inherit styles from supertoken - -Note that there may not be a space between ``bg:`` and the color value -since the style definition string is split at whitespace. -Also, using named colors is not allowed since the supported color names -vary for different formatters. - -Furthermore, not all lexers might support every style. - - -Builtin Styles -============== - -Pygments ships some builtin styles which are maintained by the Pygments team. - -To get a list of known styles you can use this snippet: - -.. sourcecode:: pycon - - >>> from pygments.styles import STYLE_MAP - >>> STYLE_MAP.keys() - ['default', 'emacs', 'friendly', 'colorful'] - - -Getting a list of available styles -================================== - -.. versionadded:: 0.6 - -Because it could be that a plugin registered a style, there is -a way to iterate over all styles: - -.. sourcecode:: pycon - - >>> from pygments.styles import get_all_styles - >>> styles = list(get_all_styles()) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/tokens.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/tokens.rst deleted file mode 100644 index 9193d5f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/docs/tokens.rst +++ /dev/null @@ -1,352 +0,0 @@ -.. -*- mode: rst -*- - -============== -Builtin Tokens -============== - -.. module:: pygments.token - -In the :mod:`pygments.token` module, there is a special object called `Token` -that is used to create token types. - -You can create a new token type by accessing an attribute of `Token`: - -.. sourcecode:: pycon - - >>> from pygments.token import Token - >>> Token.String - Token.String - >>> Token.String is Token.String - True - -Note that tokens are singletons so you can use the ``is`` operator for comparing -token types. - -As of Pygments 0.7 you can also use the ``in`` operator to perform set tests: - -.. sourcecode:: pycon - - >>> from pygments.token import Comment - >>> Comment.Single in Comment - True - >>> Comment in Comment.Multi - False - -This can be useful in :doc:`filters ` and if you write lexers on your -own without using the base lexers. - -You can also split a token type into a hierarchy, and get the parent of it: - -.. sourcecode:: pycon - - >>> String.split() - [Token, Token.Literal, Token.Literal.String] - >>> String.parent - Token.Literal - -In principle, you can create an unlimited number of token types but nobody can -guarantee that a style would define style rules for a token type. Because of -that, Pygments proposes some global token types defined in the -`pygments.token.STANDARD_TYPES` dict. - -For some tokens aliases are already defined: - -.. sourcecode:: pycon - - >>> from pygments.token import String - >>> String - Token.Literal.String - -Inside the :mod:`pygments.token` module the following aliases are defined: - -============= ============================ ==================================== -`Text` `Token.Text` for any type of text data -`Whitespace` `Token.Text.Whitespace` for specially highlighted whitespace -`Error` `Token.Error` represents lexer errors -`Other` `Token.Other` special token for data not - matched by a parser (e.g. HTML - markup in PHP code) -`Keyword` `Token.Keyword` any kind of keywords -`Name` `Token.Name` variable/function names -`Literal` `Token.Literal` Any literals -`String` `Token.Literal.String` string literals -`Number` `Token.Literal.Number` number literals -`Operator` `Token.Operator` operators (``+``, ``not``...) -`Punctuation` `Token.Punctuation` punctuation (``[``, ``(``...) -`Comment` `Token.Comment` any kind of comments -`Generic` `Token.Generic` generic tokens (have a look at - the explanation below) -============= ============================ ==================================== - -The `Whitespace` token type is new in Pygments 0.8. It is used only by the -`VisibleWhitespaceFilter` currently. - -Normally you just create token types using the already defined aliases. For each -of those token aliases, a number of subtypes exists (excluding the special tokens -`Token.Text`, `Token.Error` and `Token.Other`) - -The `is_token_subtype()` function in the `pygments.token` module can be used to -test if a token type is a subtype of another (such as `Name.Tag` and `Name`). -(This is the same as ``Name.Tag in Name``. The overloaded `in` operator was newly -introduced in Pygments 0.7, the function still exists for backwards -compatiblity.) - -With Pygments 0.7, it's also possible to convert strings to token types (for example -if you want to supply a token from the command line): - -.. sourcecode:: pycon - - >>> from pygments.token import String, string_to_tokentype - >>> string_to_tokentype("String") - Token.Literal.String - >>> string_to_tokentype("Token.Literal.String") - Token.Literal.String - >>> string_to_tokentype(String) - Token.Literal.String - - -Keyword Tokens -============== - -`Keyword` - For any kind of keyword (especially if it doesn't match any of the - subtypes of course). - -`Keyword.Constant` - For keywords that are constants (e.g. ``None`` in future Python versions). - -`Keyword.Declaration` - For keywords used for variable declaration (e.g. ``var`` in some programming - languages like JavaScript). - -`Keyword.Namespace` - For keywords used for namespace declarations (e.g. ``import`` in Python and - Java and ``package`` in Java). - -`Keyword.Pseudo` - For keywords that aren't really keywords (e.g. ``None`` in old Python - versions). - -`Keyword.Reserved` - For reserved keywords. - -`Keyword.Type` - For builtin types that can't be used as identifiers (e.g. ``int``, - ``char`` etc. in C). - - -Name Tokens -=========== - -`Name` - For any name (variable names, function names, classes). - -`Name.Attribute` - For all attributes (e.g. in HTML tags). - -`Name.Builtin` - Builtin names; names that are available in the global namespace. - -`Name.Builtin.Pseudo` - Builtin names that are implicit (e.g. ``self`` in Ruby, ``this`` in Java). - -`Name.Class` - Class names. Because no lexer can know if a name is a class or a function - or something else this token is meant for class declarations. - -`Name.Constant` - Token type for constants. In some languages you can recognise a token by the - way it's defined (the value after a ``const`` keyword for example). In - other languages constants are uppercase by definition (Ruby). - -`Name.Decorator` - Token type for decorators. Decorators are synatic elements in the Python - language. Similar syntax elements exist in C# and Java. - -`Name.Entity` - Token type for special entities. (e.g. `` `` in HTML). - -`Name.Exception` - Token type for exception names (e.g. ``RuntimeError`` in Python). Some languages - define exceptions in the function signature (Java). You can highlight - the name of that exception using this token then. - -`Name.Function` - Token type for function names. - -`Name.Label` - Token type for label names (e.g. in languages that support ``goto``). - -`Name.Namespace` - Token type for namespaces. (e.g. import paths in Java/Python), names following - the ``module``/``namespace`` keyword in other languages. - -`Name.Other` - Other names. Normally unused. - -`Name.Tag` - Tag names (in HTML/XML markup or configuration files). - -`Name.Variable` - Token type for variables. Some languages have prefixes for variable names - (PHP, Ruby, Perl). You can highlight them using this token. - -`Name.Variable.Class` - same as `Name.Variable` but for class variables (also static variables). - -`Name.Variable.Global` - same as `Name.Variable` but for global variables (used in Ruby, for - example). - -`Name.Variable.Instance` - same as `Name.Variable` but for instance variables. - - -Literals -======== - -`Literal` - For any literal (if not further defined). - -`Literal.Date` - for date literals (e.g. ``42d`` in Boo). - - -`String` - For any string literal. - -`String.Backtick` - Token type for strings enclosed in backticks. - -`String.Char` - Token type for single characters (e.g. Java, C). - -`String.Doc` - Token type for documentation strings (for example Python). - -`String.Double` - Double quoted strings. - -`String.Escape` - Token type for escape sequences in strings. - -`String.Heredoc` - Token type for "heredoc" strings (e.g. in Ruby or Perl). - -`String.Interpol` - Token type for interpolated parts in strings (e.g. ``#{foo}`` in Ruby). - -`String.Other` - Token type for any other strings (for example ``%q{foo}`` string constructs - in Ruby). - -`String.Regex` - Token type for regular expression literals (e.g. ``/foo/`` in JavaScript). - -`String.Single` - Token type for single quoted strings. - -`String.Symbol` - Token type for symbols (e.g. ``:foo`` in LISP or Ruby). - - -`Number` - Token type for any number literal. - -`Number.Bin` - Token type for binary literals (e.g. ``0b101010``). - -`Number.Float` - Token type for float literals (e.g. ``42.0``). - -`Number.Hex` - Token type for hexadecimal number literals (e.g. ``0xdeadbeef``). - -`Number.Integer` - Token type for integer literals (e.g. ``42``). - -`Number.Integer.Long` - Token type for long integer literals (e.g. ``42L`` in Python). - -`Number.Oct` - Token type for octal literals. - - -Operators -========= - -`Operator` - For any punctuation operator (e.g. ``+``, ``-``). - -`Operator.Word` - For any operator that is a word (e.g. ``not``). - - -Punctuation -=========== - -.. versionadded:: 0.7 - -`Punctuation` - For any punctuation which is not an operator (e.g. ``[``, ``(``...) - - -Comments -======== - -`Comment` - Token type for any comment. - -`Comment.Multiline` - Token type for multiline comments. - -`Comment.Preproc` - Token type for preprocessor comments (also ```. - -.. versionadded:: 0.7 - The formatters now also accept an `outencoding` option which will override - the `encoding` option if given. This makes it possible to use a single - options dict with lexers and formatters, and still have different input and - output encodings. - -.. _chardet: http://chardet.feedparser.org/ diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/download.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/download.rst deleted file mode 100644 index cf32f48..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/download.rst +++ /dev/null @@ -1,41 +0,0 @@ -Download and installation -========================= - -The current release is version |version|. - -Packaged versions ------------------ - -You can download it `from the Python Package Index -`_. For installation of packages from -PyPI, we recommend `Pip `_, which works on all -major platforms. - -Under Linux, most distributions include a package for Pygments, usually called -``pygments`` or ``python-pygments``. You can install it with the package -manager as usual. - -Development sources -------------------- - -We're using the `Mercurial `_ version control -system. You can get the development source using this command:: - - hg clone http://bitbucket.org/birkenfeld/pygments-main pygments - -Development takes place at `Bitbucket -`_, you can browse the source -online `here `_. - -The latest changes in the development source code are listed in the `changelog -`_. - -.. Documentation - ------------- - -.. XXX todo - - You can download the documentation either as - a bunch of rst files from the Mercurial repository, see above, or - as a tar.gz containing rendered HTML files:

    -

    pygmentsdocs.tar.gz

    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/faq.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/faq.rst deleted file mode 100644 index 0f65b9f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/faq.rst +++ /dev/null @@ -1,143 +0,0 @@ -:orphan: - -Pygments FAQ -============= - -What is Pygments? ------------------ - -Pygments is a syntax highlighting engine written in Python. That means, it will -take source code (or other markup) in a supported language and output a -processed version (in different formats) containing syntax highlighting markup. - -Its features include: - -* a wide range of common languages and markup formats is supported (look here - for a list) -* new languages and formats are added easily -* a number of output formats is available, including: - - - HTML - - ANSI sequences (console output) - - LaTeX - - RTF - -* it is usable as a command-line tool and as a library -* parsing and formatting is fast - -Pygments is licensed under the BSD license. - -Where does the name Pygments come from? ---------------------------------------- - -*Py* of course stands for Python, while *pigments* are used for coloring paint, -and in this case, source code! - -What are the system requirements? ---------------------------------- - -Pygments only needs a standard Python install, version 2.6 or higher or version -3.3 or higher for Python 3. No additional libraries are needed. - -How can I use Pygments? ------------------------ - -Pygments is usable as a command-line tool as well as a library. - -From the command-line, usage looks like this (assuming the pygmentize script is -properly installed):: - - pygmentize -f html /path/to/file.py - -This will print a HTML-highlighted version of /path/to/file.py to standard output. - -For a complete help, please run ``pygmentize -h``. - -Usage as a library is thoroughly demonstrated in the Documentation section. - -How do I make a new style? --------------------------- - -Please see the documentation on styles. - -How can I report a bug or suggest a feature? --------------------------------------------- - -Please report bugs and feature wishes in the tracker at Bitbucket. - -You can also e-mail the author or use IRC, see the contact details. - -I want this support for this language! --------------------------------------- - -Instead of waiting for others to include language support, why not write it -yourself? All you have to know is :doc:`outlined in the docs -`. - -Can I use Pygments for programming language processing? -------------------------------------------------------- - -The Pygments lexing machinery is quite powerful can be used to build lexers for -basically all languages. However, parsing them is not possible, though some -lexers go some steps in this direction in order to e.g. highlight function names -differently. - -Also, error reporting is not the scope of Pygments. It focuses on correctly -highlighting syntactically valid documents, not finding and compensating errors. - -Who uses Pygments? ------------------- - -This is an (incomplete) list of projects and sites known to use the Pygments highlighter. - -* `Pygments API `_, a HTTP POST interface to Pygments -* `The Sphinx documentation builder `_, for embedded source examples -* `rst2pdf `_, a reStructuredText to PDF converter -* `Zine `_, a Python blogging system -* `Trac `_, the universal project management tool -* `Bruce `_, a reStructuredText presentation tool -* `AsciiDoc `_, a text-based documentation generator -* `ActiveState Code `_, the Python Cookbook successor -* `ViewVC `_, a web-based version control repository browser -* `BzrFruit `_, a Bazaar branch viewer -* `QBzr `_, a cross-platform Qt-based GUI front end for Bazaar -* `BitBucket `_, a Mercurial and Git hosting site -* `GitHub `_, a site offering secure Git hosting and collaborative development -* `Review Board `_, a collaborative code reviewing tool -* `skeletonz `_, a Python powered content management system -* `Diamanda `_, a Django powered wiki system with support for Pygments -* `Progopedia `_ (`English `_), - an encyclopedia of programming languages -* `Postmarkup `_, a BBCode to XHTML generator -* `Language Comparison `_, a site that compares different programming languages -* `BPython `_, a curses-based intelligent Python shell -* `Challenge-You! `_, a site offering programming challenges -* `PIDA `_, a universal IDE written in Python -* `PuDB `_, a console Python debugger -* `XWiki `_, a wiki-based development framework in Java, using Jython -* `roux `_, a script for running R scripts - and creating beautiful output including graphs -* `hurl `_, a web service for making HTTP requests -* `wxHTMLPygmentizer `_ is - a GUI utility, used to make code-colorization easier -* `WpPygments `_, a highlighter plugin for WordPress -* `LodgeIt `_, a pastebin with XMLRPC support and diffs -* `SpammCan `_, a pastebin (demo see - `here `_) -* `WowAce.com pastes `_, a pastebin -* `Siafoo `_, a tool for sharing and storing useful code and programming experience -* `D source `_, a community for the D programming language -* `dumpz.org `_, a pastebin -* `dpaste.com `_, another Django pastebin -* `PylonsHQ Pasties `_, a pastebin -* `Django snippets `_, a pastebin for Django code -* `Fayaa `_, a Chinese pastebin -* `Incollo.com `_, a free collaborative debugging tool -* `PasteBox `_, a pastebin focused on privacy -* `xinotes.org `_, a site to share notes, code snippets etc. -* `hilite.me `_, a site to highlight code snippets -* `patx.me `_, a pastebin - -If you have a project or web site using Pygments, drop me a line, and I'll add a -link here. - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/index.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/index.rst deleted file mode 100644 index a0e4121..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/index.rst +++ /dev/null @@ -1,53 +0,0 @@ -Welcome! -======== - -This is the home of Pygments. It is a generic syntax highlighter for general use -in all kinds of software such as forum systems, wikis or other applications that -need to prettify source code. Highlights are: - -* a wide range of common languages and markup formats is supported -* special attention is paid to details that increase highlighting quality -* support for new languages and formats are added easily; most languages use a simple regex-based lexing mechanism -* a number of output formats is available, among them HTML, RTF, LaTeX and ANSI sequences -* it is usable as a command-line tool and as a library -* ... and it highlights even Brainf*ck! - -Read more in the FAQ list or the documentation, or download the latest release. - -Though Pygments has not yet won an award, we trust that you will notice it's a top quality product . - -.. _contribute: - -Contribute ----------- - -Like every open-source project, we are always looking for volunteers to help us -with programming. Python knowledge is required, but don't fear: Python is a very -clear and easy to learn language. - -Development takes place on `Bitbucket -`_, where the Mercurial -repository, tickets and pull requests can be viewed. - -Our primary communication instrument is the IRC channel **#pocoo** on the -Freenode network. To join it, let your IRC client connect to -``irc.freenode.net`` and do ``/join #pocoo``. - -If you found a bug, just open a ticket in the Bitbucket tracker. Be sure to log -in to be notified when the issue is fixed -- development is not fast-paced as -the library is quite stable. You can also send an e-mail to the developers, see -below. - -The authors ------------ - -Pygments is maintained by **Georg Brandl**, e-mail address *georg*\ *@*\ *python.org*. - -Many lexers and fixes have been contributed by **Armin Ronacher**, the rest of -the `Pocoo `_ team and **Tim Hatch**. - -.. toctree:: - :maxdepth: 1 - :hidden: - - docs/index diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/languages.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/languages.rst deleted file mode 100644 index 0f98c58..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/languages.rst +++ /dev/null @@ -1,151 +0,0 @@ -:orphan: - -Supported languages -=================== - -Pygments supports an ever-growing range of languages. Watch this space... - -Programming languages ---------------------- - -* ActionScript -* Ada -* ANTLR -* AppleScript -* Assembly (various) -* Asymptote -* Awk -* Befunge -* Boo -* BrainFuck -* C, C++ -* C# -* Clojure -* CoffeeScript -* ColdFusion -* Common Lisp -* Coq -* Cryptol (incl. Literate Cryptol) -* `Cython `_ -* `D `_ -* Dart -* Delphi -* Dylan -* Erlang -* Factor -* Fancy -* Fortran -* F# -* GAP -* Gherkin (Cucumber) -* GL shaders -* Groovy -* `Haskell `_ (incl. Literate Haskell) -* IDL -* Io -* Java -* JavaScript -* LLVM -* Logtalk -* `Lua `_ -* Matlab -* MiniD -* Modelica -* Modula-2 -* MuPad -* Nemerle -* Nimrod -* Objective-C -* Objective-J -* Octave -* OCaml -* PHP -* `Perl `_ -* PovRay -* PostScript -* PowerShell -* Prolog -* `Python `_ 2.x and 3.x (incl. console sessions and tracebacks) -* `REBOL `_ -* `Red `_ -* Redcode -* `Ruby `_ (incl. irb sessions) -* Rust -* S, S-Plus, R -* Scala -* Scheme -* Scilab -* Smalltalk -* SNOBOL -* Tcl -* Vala -* Verilog -* VHDL -* Visual Basic.NET -* Visual FoxPro -* XQuery -* Zephir -
- -Template languages ------------------- - -* Cheetah templates -* `Django `_ / `Jinja - `_ templates -* ERB (Ruby templating) -* `Genshi `_ (the Trac template language) -* JSP (Java Server Pages) -* `Myghty `_ (the HTML::Mason based framework) -* `Mako `_ (the Myghty successor) -* `Smarty `_ templates (PHP templating) -* Tea - -Other markup ------------- - -* Apache config files -* Bash shell scripts -* BBCode -* CMake -* CSS -* Debian control files -* Diff files -* DTD -* Gettext catalogs -* Gnuplot script -* Groff markup -* HTML -* HTTP sessions -* INI-style config files -* IRC logs (irssi style) -* Lighttpd config files -* Makefiles -* MoinMoin/Trac Wiki markup -* MySQL -* Nginx config files -* POV-Ray scenes -* Ragel -* Redcode -* ReST -* Robot Framework -* RPM spec files -* SQL, also MySQL, SQLite -* Squid configuration -* TeX -* tcsh -* Vim Script -* Windows batch files -* XML -* XSLT -* YAML - -... that's all? ---------------- - -Well, why not write your own? Contributing to Pygments is easy and fun. Look -:doc:`here ` for the docs on lexer development and -:ref:`here ` for contact details. - -Note: the languages listed here are supported in the development version. The -latest release may lack a few of them. diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/make.bat b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/make.bat deleted file mode 100644 index 8803c98..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/make.bat +++ /dev/null @@ -1,190 +0,0 @@ -@ECHO OFF - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set BUILDDIR=_build -set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . -set I18NSPHINXOPTS=%SPHINXOPTS% . -if NOT "%PAPER%" == "" ( - set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% - set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% -) - -if "%1" == "" goto help - -if "%1" == "help" ( - :help - echo.Please use `make ^` where ^ is one of - echo. html to make standalone HTML files - echo. dirhtml to make HTML files named index.html in directories - echo. singlehtml to make a single large HTML file - echo. pickle to make pickle files - echo. json to make JSON files - echo. htmlhelp to make HTML files and a HTML help project - echo. qthelp to make HTML files and a qthelp project - echo. devhelp to make HTML files and a Devhelp project - echo. epub to make an epub - echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter - echo. text to make text files - echo. man to make manual pages - echo. texinfo to make Texinfo files - echo. gettext to make PO message catalogs - echo. changes to make an overview over all changed/added/deprecated items - echo. linkcheck to check all external links for integrity - echo. doctest to run all doctests embedded in the documentation if enabled - goto end -) - -if "%1" == "clean" ( - for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i - del /q /s %BUILDDIR%\* - goto end -) - -if "%1" == "html" ( - %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/html. - goto end -) - -if "%1" == "dirhtml" ( - %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. - goto end -) - -if "%1" == "singlehtml" ( - %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. - goto end -) - -if "%1" == "pickle" ( - %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the pickle files. - goto end -) - -if "%1" == "json" ( - %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the JSON files. - goto end -) - -if "%1" == "htmlhelp" ( - %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run HTML Help Workshop with the ^ -.hhp project file in %BUILDDIR%/htmlhelp. - goto end -) - -if "%1" == "qthelp" ( - %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run "qcollectiongenerator" with the ^ -.qhcp project file in %BUILDDIR%/qthelp, like this: - echo.^> qcollectiongenerator %BUILDDIR%\qthelp\Pygments.qhcp - echo.To view the help file: - echo.^> assistant -collectionFile %BUILDDIR%\qthelp\Pygments.ghc - goto end -) - -if "%1" == "devhelp" ( - %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. - goto end -) - -if "%1" == "epub" ( - %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The epub file is in %BUILDDIR%/epub. - goto end -) - -if "%1" == "latex" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "text" ( - %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The text files are in %BUILDDIR%/text. - goto end -) - -if "%1" == "man" ( - %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The manual pages are in %BUILDDIR%/man. - goto end -) - -if "%1" == "texinfo" ( - %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. - goto end -) - -if "%1" == "gettext" ( - %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The message catalogs are in %BUILDDIR%/locale. - goto end -) - -if "%1" == "changes" ( - %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes - if errorlevel 1 exit /b 1 - echo. - echo.The overview file is in %BUILDDIR%/changes. - goto end -) - -if "%1" == "linkcheck" ( - %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck - if errorlevel 1 exit /b 1 - echo. - echo.Link check complete; look for any errors in the above output ^ -or in %BUILDDIR%/linkcheck/output.txt. - goto end -) - -if "%1" == "doctest" ( - %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest - if errorlevel 1 exit /b 1 - echo. - echo.Testing of doctests in the sources finished, look at the ^ -results in %BUILDDIR%/doctest/output.txt. - goto end -) - -:end diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/pygmentize.1 b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/pygmentize.1 deleted file mode 100644 index 71bb6f9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/doc/pygmentize.1 +++ /dev/null @@ -1,94 +0,0 @@ -.TH PYGMENTIZE 1 "February 15, 2007" - -.SH NAME -pygmentize \- highlights the input file - -.SH SYNOPSIS -.B \fBpygmentize\fP -.RI [-l\ \fI\fP]\ [-F\ \fI\fP[:\fI\fP]]\ [-f\ \fI\fP] -.RI [-O\ \fI\fP]\ [-P\ \fI\fP]\ [-o\ \fI\fP]\ [\fI\fP] -.br -.B \fBpygmentize\fP -.RI -S\ \fI - - -

%(title)s

- -''' - -DOC_HEADER_EXTERNALCSS = '''\ - - - - - %(title)s - - - - -

%(title)s

- -''' - -DOC_FOOTER = '''\ - - -''' - - -class HtmlFormatter(Formatter): - r""" - Format tokens as HTML 4 ```` tags within a ``
`` tag, wrapped
-    in a ``
`` tag. The ``
``'s CSS class can be set by the `cssclass` - option. - - If the `linenos` option is set to ``"table"``, the ``
`` is
-    additionally wrapped inside a ```` which has one row and two
-    cells: one containing the line numbers and one containing the code.
-    Example:
-
-    .. sourcecode:: html
-
-        
-
- - -
-
1
-            2
-
-
def foo(bar):
-              pass
-            
-
- - (whitespace added to improve clarity). - - Wrapping can be disabled using the `nowrap` option. - - A list of lines can be specified using the `hl_lines` option to make these - lines highlighted (as of Pygments 0.11). - - With the `full` option, a complete HTML 4 document is output, including - the style definitions inside a `` - - -

Code tags report for %s

- - -%s -
LineTagWhoDescription
- - -''' - - TABLE = '\nFile: %s\n' - - TR = ('%%(lno)d' - '%%(tag)s' - '%%(who)s%%(what)s') - - f = open(output, 'w') - table = '\n'.join(TABLE % fname + - '\n'.join(TR % (no % 2,) % entry - for no, entry in enumerate(store[fname])) - for fname in sorted(store)) - f.write(HTML % (', '.join(map(abspath, args)), table)) - f.close() - - print("Report written to %s." % output) - return 0 - -if __name__ == '__main__': - sys.exit(main()) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/scripts/find_error.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/scripts/find_error.py deleted file mode 100755 index 7aaa9be..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/scripts/find_error.py +++ /dev/null @@ -1,173 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -""" - Lexing error finder - ~~~~~~~~~~~~~~~~~~~ - - For the source files given on the command line, display - the text where Error tokens are being generated, along - with some context. - - :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -from __future__ import print_function - -import os -import sys - -# always prefer Pygments from source if exists -srcpath = os.path.join(os.path.dirname(__file__), '..') -if os.path.isdir(os.path.join(srcpath, 'pygments')): - sys.path.insert(0, srcpath) - - -from pygments.lexer import RegexLexer -from pygments.lexers import get_lexer_for_filename, get_lexer_by_name -from pygments.token import Error, Text, _TokenType -from pygments.cmdline import _parse_options - - -class DebuggingRegexLexer(RegexLexer): - """Make the state stack, position and current match instance attributes.""" - - def get_tokens_unprocessed(self, text, stack=('root',)): - """ - Split ``text`` into (tokentype, text) pairs. - - ``stack`` is the inital stack (default: ``['root']``) - """ - self.pos = 0 - tokendefs = self._tokens - self.statestack = list(stack) - statetokens = tokendefs[self.statestack[-1]] - while 1: - for rexmatch, action, new_state in statetokens: - self.m = m = rexmatch(text, self.pos) - if m: - if type(action) is _TokenType: - yield self.pos, action, m.group() - else: - for item in action(self, m): - yield item - self.pos = m.end() - if new_state is not None: - # state transition - if isinstance(new_state, tuple): - for state in new_state: - if state == '#pop': - self.statestack.pop() - elif state == '#push': - self.statestack.append(self.statestack[-1]) - else: - self.statestack.append(state) - elif isinstance(new_state, int): - # pop - del self.statestack[new_state:] - elif new_state == '#push': - self.statestack.append(self.statestack[-1]) - else: - assert False, 'wrong state def: %r' % new_state - statetokens = tokendefs[self.statestack[-1]] - break - else: - try: - if text[self.pos] == '\n': - # at EOL, reset state to 'root' - self.pos += 1 - self.statestack = ['root'] - statetokens = tokendefs['root'] - yield self.pos, Text, u'\n' - continue - yield self.pos, Error, text[self.pos] - self.pos += 1 - except IndexError: - break - - -def main(fn, lexer=None, options={}): - if lexer is not None: - lx = get_lexer_by_name(lexer) - else: - try: - lx = get_lexer_for_filename(os.path.basename(fn), **options) - except ValueError: - try: - name, rest = fn.split('_', 1) - lx = get_lexer_by_name(name, **options) - except ValueError: - raise AssertionError('no lexer found for file %r' % fn) - debug_lexer = False - # does not work for e.g. ExtendedRegexLexers - if lx.__class__.__bases__ == (RegexLexer,): - lx.__class__.__bases__ = (DebuggingRegexLexer,) - debug_lexer = True - elif lx.__class__.__bases__ == (DebuggingRegexLexer,): - # already debugged before - debug_lexer = True - lno = 1 - text = open(fn, 'U').read() - text = text.strip('\n') + '\n' - tokens = [] - states = [] - - def show_token(tok, state): - reprs = map(repr, tok) - print(' ' + reprs[1] + ' ' + ' ' * (29-len(reprs[1])) + reprs[0], end=' ') - if debug_lexer: - print(' ' + ' ' * (29-len(reprs[0])) + repr(state), end=' ') - print() - - for type, val in lx.get_tokens(text): - lno += val.count('\n') - if type == Error: - print('Error parsing', fn, 'on line', lno) - print('Previous tokens' + (debug_lexer and ' and states' or '') + ':') - if showall: - for tok, state in map(None, tokens, states): - show_token(tok, state) - else: - for i in range(max(len(tokens) - num, 0), len(tokens)): - show_token(tokens[i], states[i]) - print('Error token:') - l = len(repr(val)) - print(' ' + repr(val), end=' ') - if debug_lexer and hasattr(lx, 'statestack'): - print(' ' * (60-l) + repr(lx.statestack), end=' ') - print() - print() - return 1 - tokens.append((type, val)) - if debug_lexer: - if hasattr(lx, 'statestack'): - states.append(lx.statestack[:]) - else: - states.append(None) - if showall: - for tok, state in map(None, tokens, states): - show_token(tok, state) - return 0 - - -num = 10 -showall = False -lexer = None -options = {} - -if __name__ == '__main__': - import getopt - opts, args = getopt.getopt(sys.argv[1:], 'n:l:aO:') - for opt, val in opts: - if opt == '-n': - num = int(val) - elif opt == '-a': - showall = True - elif opt == '-l': - lexer = val - elif opt == '-O': - options = _parse_options([val]) - ret = 0 - for f in args: - ret += main(f, lexer, options) - sys.exit(bool(ret)) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/scripts/get_vimkw.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/scripts/get_vimkw.py deleted file mode 100644 index 4ea302f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/scripts/get_vimkw.py +++ /dev/null @@ -1,43 +0,0 @@ -from __future__ import print_function -import re - -r_line = re.compile(r"^(syn keyword vimCommand contained|syn keyword vimOption " - r"contained|syn keyword vimAutoEvent contained)\s+(.*)") -r_item = re.compile(r"(\w+)(?:\[(\w+)\])?") - -def getkw(input, output): - out = file(output, 'w') - - output_info = {'command': [], 'option': [], 'auto': []} - for line in file(input): - m = r_line.match(line) - if m: - # Decide which output gets mapped to d - if 'vimCommand' in m.group(1): - d = output_info['command'] - elif 'AutoEvent' in m.group(1): - d = output_info['auto'] - else: - d = output_info['option'] - - # Extract all the shortened versions - for i in r_item.finditer(m.group(2)): - d.append('(%r,%r)' % - (i.group(1), "%s%s" % (i.group(1), i.group(2) or ''))) - - output_info['option'].append("('nnoremap','nnoremap')") - output_info['option'].append("('inoremap','inoremap')") - output_info['option'].append("('vnoremap','vnoremap')") - - for a, b in output_info.items(): - b.sort() - print('%s=[%s]' % (a, ','.join(b)), file=out) - -def is_keyword(w, keywords): - for i in range(len(w), 0, -1): - if w[:i] in keywords: - return keywords[w[:i]][:len(w)] == w - return False - -if __name__ == "__main__": - getkw("/usr/share/vim/vim73/syntax/vim.vim", "temp.py") diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/scripts/pylintrc b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/scripts/pylintrc deleted file mode 100644 index aa04e12..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/scripts/pylintrc +++ /dev/null @@ -1,301 +0,0 @@ -# lint Python modules using external checkers. -# -# This is the main checker controling the other ones and the reports -# generation. It is itself both a raw checker and an astng checker in order -# to: -# * handle message activation / deactivation at the module level -# * handle some basic but necessary stats'data (number of classes, methods...) -# -[MASTER] - -# Specify a configuration file. -#rcfile= - -# Profiled execution. -profile=no - -# Add to the black list. It should be a base name, not a -# path. You may set this option multiple times. -ignore=.svn - -# Pickle collected data for later comparisons. -persistent=yes - -# Set the cache size for astng objects. -cache-size=500 - -# List of plugins (as comma separated values of python modules names) to load, -# usually to register additional checkers. -load-plugins= - - -[MESSAGES CONTROL] - -# Enable only checker(s) with the given id(s). This option conflict with the -# disable-checker option -#enable-checker= - -# Enable all checker(s) except those with the given id(s). This option conflict -# with the disable-checker option -#disable-checker= - -# Enable all messages in the listed categories. -#enable-msg-cat= - -# Disable all messages in the listed categories. -#disable-msg-cat= - -# Enable the message(s) with the given id(s). -#enable-msg= - -# Disable the message(s) with the given id(s). -disable-msg=C0323,W0142,C0301,C0103,C0111,E0213,C0302,C0203,W0703,R0201 - - -[REPORTS] - -# set the output format. Available formats are text, parseable, colorized and -# html -output-format=colorized - -# Include message's id in output -include-ids=yes - -# Put messages in a separate file for each module / package specified on the -# command line instead of printing them on stdout. Reports (if any) will be -# written in a file name "pylint_global.[txt|html]". -files-output=no - -# Tells wether to display a full report or only the messages -reports=yes - -# Python expression which should return a note less than 10 (10 is the highest -# note).You have access to the variables errors warning, statement which -# respectivly contain the number of errors / warnings messages and the total -# number of statements analyzed. This is used by the global evaluation report -# (R0004). -evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) - -# Add a comment according to your evaluation note. This is used by the global -# evaluation report (R0004). -comment=no - -# Enable the report(s) with the given id(s). -#enable-report= - -# Disable the report(s) with the given id(s). -#disable-report= - - -# checks for -# * unused variables / imports -# * undefined variables -# * redefinition of variable from builtins or from an outer scope -# * use of variable before assigment -# -[VARIABLES] - -# Tells wether we should check for unused import in __init__ files. -init-import=no - -# A regular expression matching names used for dummy variables (i.e. not used). -dummy-variables-rgx=_|dummy - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid to define new builtins when possible. -additional-builtins= - - -# try to find bugs in the code using type inference -# -[TYPECHECK] - -# Tells wether missing members accessed in mixin class should be ignored. A -# mixin class is detected if its name ends with "mixin" (case insensitive). -ignore-mixin-members=yes - -# When zope mode is activated, consider the acquired-members option to ignore -# access to some undefined attributes. -zope=no - -# List of members which are usually get through zope's acquisition mecanism and -# so shouldn't trigger E0201 when accessed (need zope=yes to be considered). -acquired-members=REQUEST,acl_users,aq_parent - - -# checks for : -# * doc strings -# * modules / classes / functions / methods / arguments / variables name -# * number of arguments, local variables, branchs, returns and statements in -# functions, methods -# * required module attributes -# * dangerous default values as arguments -# * redefinition of function / method / class -# * uses of the global statement -# -[BASIC] - -# Required attributes for module, separated by a comma -required-attributes= - -# Regular expression which should only match functions or classes name which do -# not require a docstring -no-docstring-rgx=__.*__ - -# Regular expression which should only match correct module names -module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ - -# Regular expression which should only match correct module level names -const-rgx=(([A-Z_][A-Z1-9_]*)|(__.*__))$ - -# Regular expression which should only match correct class names -class-rgx=[A-Z_][a-zA-Z0-9]+$ - -# Regular expression which should only match correct function names -function-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match correct method names -method-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match correct instance attribute names -attr-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match correct argument names -argument-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match correct variable names -variable-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match correct list comprehension / -# generator expression variable names -inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ - -# Good variable names which should always be accepted, separated by a comma -good-names=i,j,k,ex,Run,_ - -# Bad variable names which should always be refused, separated by a comma -bad-names=foo,bar,baz,toto,tutu,tata - -# List of builtins function names that should not be used, separated by a comma -bad-functions=apply,input - - -# checks for sign of poor/misdesign: -# * number of methods, attributes, local variables... -# * size, complexity of functions, methods -# -[DESIGN] - -# Maximum number of arguments for function / method -max-args=12 - -# Maximum number of locals for function / method body -max-locals=30 - -# Maximum number of return / yield for function / method body -max-returns=12 - -# Maximum number of branch for function / method body -max-branchs=30 - -# Maximum number of statements in function / method body -max-statements=60 - -# Maximum number of parents for a class (see R0901). -max-parents=7 - -# Maximum number of attributes for a class (see R0902). -max-attributes=20 - -# Minimum number of public methods for a class (see R0903). -min-public-methods=0 - -# Maximum number of public methods for a class (see R0904). -max-public-methods=20 - - -# checks for -# * external modules dependencies -# * relative / wildcard imports -# * cyclic imports -# * uses of deprecated modules -# -[IMPORTS] - -# Deprecated modules which should not be used, separated by a comma -deprecated-modules=regsub,string,TERMIOS,Bastion,rexec - -# Create a graph of every (i.e. internal and external) dependencies in the -# given file (report R0402 must not be disabled) -import-graph= - -# Create a graph of external dependencies in the given file (report R0402 must -# not be disabled) -ext-import-graph= - -# Create a graph of internal dependencies in the given file (report R0402 must -# not be disabled) -int-import-graph= - - -# checks for : -# * methods without self as first argument -# * overridden methods signature -# * access only to existant members via self -# * attributes not defined in the __init__ method -# * supported interfaces implementation -# * unreachable code -# -[CLASSES] - -# List of interface methods to ignore, separated by a comma. This is used for -# instance to not check methods defines in Zope's Interface base class. -ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by - -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__,__new__,setUp - - -# checks for similarities and duplicated code. This computation may be -# memory / CPU intensive, so you should disable it if you experiments some -# problems. -# -[SIMILARITIES] - -# Minimum lines number of a similarity. -min-similarity-lines=10 - -# Ignore comments when computing similarities. -ignore-comments=yes - -# Ignore docstrings when computing similarities. -ignore-docstrings=yes - - -# checks for: -# * warning notes in the code like FIXME, XXX -# * PEP 263: source code with non ascii character but no encoding declaration -# -[MISCELLANEOUS] - -# List of note tags to take in consideration, separated by a comma. -notes=FIXME,XXX,TODO - - -# checks for : -# * unauthorized constructions -# * strict indentation -# * line length -# * use of <> instead of != -# -[FORMAT] - -# Maximum number of characters on a single line. -max-line-length=90 - -# Maximum number of lines in a module -max-module-lines=1000 - -# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 -# tab). -indent-string=' ' diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/scripts/vim2pygments.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/scripts/vim2pygments.py deleted file mode 100755 index 42af0bb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/scripts/vim2pygments.py +++ /dev/null @@ -1,935 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" - Vim Colorscheme Converter - ~~~~~~~~~~~~~~~~~~~~~~~~~ - - This script converts vim colorscheme files to valid pygments - style classes meant for putting into modules. - - :copyright 2006 by Armin Ronacher. - :license: BSD, see LICENSE for details. -""" - -from __future__ import print_function - -import sys -import re -from os import path -from io import StringIO - -split_re = re.compile(r'(? 2 and \ - len(parts[0]) >= 2 and \ - 'highlight'.startswith(parts[0]): - token = parts[1].lower() - if token not in TOKENS: - continue - for item in parts[2:]: - p = item.split('=', 1) - if not len(p) == 2: - continue - key, value = p - if key in ('ctermfg', 'guifg'): - color = get_vim_color(value) - if color: - set('color', color) - elif key in ('ctermbg', 'guibg'): - color = get_vim_color(value) - if color: - set('bgcolor', color) - elif key in ('term', 'cterm', 'gui'): - items = value.split(',') - for item in items: - item = item.lower() - if item == 'none': - set('noinherit', True) - elif item == 'bold': - set('bold', True) - elif item == 'underline': - set('underline', True) - elif item == 'italic': - set('italic', True) - - if bg_color is not None and not colors['Normal'].get('bgcolor'): - colors['Normal']['bgcolor'] = bg_color - - color_map = {} - for token, styles in colors.items(): - if token in TOKENS: - tmp = [] - if styles.get('noinherit'): - tmp.append('noinherit') - if 'color' in styles: - tmp.append(styles['color']) - if 'bgcolor' in styles: - tmp.append('bg:' + styles['bgcolor']) - if styles.get('bold'): - tmp.append('bold') - if styles.get('italic'): - tmp.append('italic') - if styles.get('underline'): - tmp.append('underline') - tokens = TOKENS[token] - if not isinstance(tokens, tuple): - tokens = (tokens,) - for token in tokens: - color_map[token] = ' '.join(tmp) - - default_token = color_map.pop('') - return default_token, color_map - - -class StyleWriter(object): - - def __init__(self, code, name): - self.code = code - self.name = name.lower() - - def write_header(self, out): - out.write('# -*- coding: utf-8 -*-\n"""\n') - out.write(' %s Colorscheme\n' % self.name.title()) - out.write(' %s\n\n' % ('~' * (len(self.name) + 12))) - out.write(' Converted by %s\n' % SCRIPT_NAME) - out.write('"""\nfrom pygments.style import Style\n') - out.write('from pygments.token import Token, %s\n\n' % ', '.join(TOKEN_TYPES)) - out.write('class %sStyle(Style):\n\n' % self.name.title()) - - def write(self, out): - self.write_header(out) - default_token, tokens = find_colors(self.code) - tokens = list(tokens.items()) - tokens.sort(lambda a, b: cmp(len(a[0]), len(a[1]))) - bg_color = [x[3:] for x in default_token.split() if x.startswith('bg:')] - if bg_color: - out.write(' background_color = %r\n' % bg_color[0]) - out.write(' styles = {\n') - out.write(' %-20s%r,\n' % ('Token:', default_token)) - for token, definition in tokens: - if definition: - out.write(' %-20s%r,\n' % (token + ':', definition)) - out.write(' }') - - def __repr__(self): - out = StringIO() - self.write_style(out) - return out.getvalue() - - -def convert(filename, stream=None): - name = path.basename(filename) - if name.endswith('.vim'): - name = name[:-4] - f = file(filename) - code = f.read() - f.close() - writer = StyleWriter(code, name) - if stream is not None: - out = stream - else: - out = StringIO() - writer.write(out) - if stream is None: - return out.getvalue() - - -def main(): - if len(sys.argv) != 2 or sys.argv[1] in ('-h', '--help'): - print('Usage: %s ' % sys.argv[0]) - return 2 - if sys.argv[1] in ('-v', '--version'): - print('%s %s' % (SCRIPT_NAME, SCRIPT_VERSION)) - return - filename = sys.argv[1] - if not (path.exists(filename) and path.isfile(filename)): - print('Error: %s not found' % filename) - return 1 - convert(filename, sys.stdout) - sys.stdout.write('\n') - - -if __name__ == '__main__': - sys.exit(main() or 0) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/setup.cfg b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/setup.cfg deleted file mode 100644 index abca6bc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/setup.cfg +++ /dev/null @@ -1,7 +0,0 @@ -[egg_info] -tag_build = dev -tag_date = true - -[aliases] -release = egg_info -RDb '' -upload = upload --sign --identity=36580288 diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/setup.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/setup.py deleted file mode 100755 index a0b2e90..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/setup.py +++ /dev/null @@ -1,90 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" - Pygments - ~~~~~~~~ - - Pygments is a syntax highlighting package written in Python. - - It is a generic syntax highlighter for general use in all kinds of software - such as forum systems, wikis or other applications that need to prettify - source code. Highlights are: - - * a wide range of common languages and markup formats is supported - * special attention is paid to details, increasing quality by a fair amount - * support for new languages and formats are added easily - * a number of output formats, presently HTML, LaTeX, RTF, SVG, all image \ - formats that PIL supports and ANSI sequences - * it is usable as a command-line tool and as a library - * ... and it highlights even Brainfuck! - - The `Pygments tip`_ is installable with ``easy_install Pygments==dev``. - - .. _Pygments tip: - http://bitbucket.org/birkenfeld/pygments-main/get/default.zip#egg=Pygments-dev - - :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -try: - from setuptools import setup, find_packages - have_setuptools = True -except ImportError: - try: - import ez_setup - ez_setup.use_setuptools() - from setuptools import setup, find_packages - have_setuptools = True - except ImportError: - from distutils.core import setup - def find_packages(*args, **kwargs): - return [ - 'pygments', - 'pygments.lexers', - 'pygments.formatters', - 'pygments.styles', - 'pygments.filters', - ] - have_setuptools = False - -if have_setuptools: - add_keywords = dict( - entry_points = { - 'console_scripts': ['pygmentize = pygments.cmdline:main'], - }, - ) -else: - add_keywords = dict( - scripts = ['pygmentize'], - ) - -setup( - name = 'Pygments', - version = '2.0pre', - url = 'http://pygments.org/', - license = 'BSD License', - author = 'Georg Brandl', - author_email = 'georg@python.org', - description = 'Pygments is a syntax highlighting package written in Python.', - long_description = __doc__, - keywords = 'syntax highlighting', - packages = find_packages(exclude=['ez_setup']), - platforms = 'any', - zip_safe = False, - include_package_data = True, - classifiers = [ - 'License :: OSI Approved :: BSD License', - 'Intended Audience :: Developers', - 'Intended Audience :: End Users/Desktop', - 'Intended Audience :: System Administrators', - 'Development Status :: 6 - Mature', - 'Programming Language :: Python', - 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 3', - 'Operating System :: OS Independent', - 'Topic :: Text Processing :: Filters', - 'Topic :: Utilities', - ], - **add_keywords -) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTML4-f.dtd b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTML4-f.dtd deleted file mode 100644 index 9552012..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTML4-f.dtd +++ /dev/null @@ -1,37 +0,0 @@ - - - - - ... - - - ... - - ---> - - - -%HTML4.dtd; \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTML4-s.dtd b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTML4-s.dtd deleted file mode 100644 index 8ce7917..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTML4-s.dtd +++ /dev/null @@ -1,869 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -%HTMLlat1; - - -%HTMLsymbol; - - -%HTMLspecial; - - - - - - - - - - - - - -]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTML4.dcl b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTML4.dcl deleted file mode 100644 index db46db0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTML4.dcl +++ /dev/null @@ -1,88 +0,0 @@ - \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTML4.dtd b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTML4.dtd deleted file mode 100644 index 9e781db..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTML4.dtd +++ /dev/null @@ -1,1092 +0,0 @@ - - - - - ... - - - ... - - - - The URI used as a system identifier with the public identifier allows - the user agent to download the DTD and entity sets as needed. - - The FPI for the Strict HTML 4.0 DTD is: - - "-//W3C//DTD HTML 4.0//EN" - - and its URI is: - - http://www.w3.org/TR/REC-html40/strict.dtd - - Authors should use the Strict DTD unless they need the - presentation control for user agents that don't (adequately) - support style sheets. - - If you are writing a document that includes frames, use - the following FPI: - - "-//W3C//DTD HTML 4.0 Frameset//EN" - - with the URI: - - http://www.w3.org/TR/REC-html40/frameset.dtd - - The following URIs are supported in relation to HTML 4.0 - - "http://www.w3.org/TR/REC-html40/strict.dtd" (Strict DTD) - "http://www.w3.org/TR/REC-html40/loose.dtd" (Loose DTD) - "http://www.w3.org/TR/REC-html40/frameset.dtd" (Frameset DTD) - "http://www.w3.org/TR/REC-html40/HTMLlat1.ent" (Latin-1 entities) - "http://www.w3.org/TR/REC-html40/HTMLsymbol.ent" (Symbol entities) - "http://www.w3.org/TR/REC-html40/HTMLspecial.ent" (Special entities) - - These URIs point to the latest version of each file. To reference - this specific revision use the following URIs: - - "http://www.w3.org/TR/REC-html40-971218/strict.dtd" - "http://www.w3.org/TR/REC-html40-971218/loose.dtd" - "http://www.w3.org/TR/REC-html40-971218/frameset.dtd" - "http://www.w3.org/TR/REC-html40-971218/HTMLlat1.ent" - "http://www.w3.org/TR/REC-html40-971218/HTMLsymbol.ent" - "http://www.w3.org/TR/REC-html40-971218/HTMLspecial.ent" - ---> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -%HTMLlat1; - - -%HTMLsymbol; - - -%HTMLspecial; - - - - - - - - - - - - - -]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -]]> - - - - -]]> - - - - - -]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -]]> - - - - - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTML4.soc b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTML4.soc deleted file mode 100644 index ec4825f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTML4.soc +++ /dev/null @@ -1,9 +0,0 @@ -OVERRIDE YES -SGMLDECL HTML4.dcl -DOCTYPE HTML HTML4.dtd -PUBLIC "-//W3C//DTD HTML 4.0//EN" HTML4-s.dtd -PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" HTML4.dtd -PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" HTML4-f.dtd -PUBLIC "-//W3C//ENTITIES Latin1//EN//HTML" HTMLlat1.ent -PUBLIC "-//W3C//ENTITIES Special//EN//HTML" HTMLspec.ent -PUBLIC "-//W3C//ENTITIES Symbols//EN//HTML" HTMLsym.ent diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTMLlat1.ent b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTMLlat1.ent deleted file mode 100644 index 7632023..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTMLlat1.ent +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTMLspec.ent b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTMLspec.ent deleted file mode 100644 index 29011cc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTMLspec.ent +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTMLsym.ent b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTMLsym.ent deleted file mode 100644 index 2a6250b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/dtds/HTMLsym.ent +++ /dev/null @@ -1,241 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/99_bottles_of_beer.chpl b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/99_bottles_of_beer.chpl deleted file mode 100644 index f73be7b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/99_bottles_of_beer.chpl +++ /dev/null @@ -1,118 +0,0 @@ -/*********************************************************************** - * Chapel implementation of "99 bottles of beer" - * - * by Brad Chamberlain and Steve Deitz - * 07/13/2006 in Knoxville airport while waiting for flight home from - * HPLS workshop - * compiles and runs with chpl compiler version 1.7.0 - * for more information, contact: chapel_info@cray.com - * - * - * Notes: - * o as in all good parallel computations, boundary conditions - * constitute the vast bulk of complexity in this code (invite Brad to - * tell you about his zany boundary condition simplification scheme) - * o uses type inference for variables, arguments - * o relies on integer->string coercions - * o uses named argument passing (for documentation purposes only) - ***********************************************************************/ - -// allow executable command-line specification of number of bottles -// (e.g., ./a.out -snumBottles=999999) -config const numBottles = 99; -const numVerses = numBottles+1; - -// a domain to describe the space of lyrics -var LyricsSpace: domain(1) = {1..numVerses}; - -// array of lyrics -var Lyrics: [LyricsSpace] string; - -// parallel computation of lyrics array -[verse in LyricsSpace] Lyrics(verse) = computeLyric(verse); - -// as in any good parallel language, I/O to stdout is serialized. -// (Note that I/O to a file could be parallelized using a parallel -// prefix computation on the verse strings' lengths with file seeking) -writeln(Lyrics); - - -// HELPER FUNCTIONS: - -proc computeLyric(verseNum) { - var bottleNum = numBottles - (verseNum - 1); - var nextBottle = (bottleNum + numVerses - 1)%numVerses; - return "\n" // disguise space used to separate elements in array I/O - + describeBottles(bottleNum, startOfVerse=true) + " on the wall, " - + describeBottles(bottleNum) + ".\n" - + computeAction(bottleNum) - + describeBottles(nextBottle) + " on the wall.\n"; -} - - -proc describeBottles(bottleNum, startOfVerse:bool = false) { - // NOTE: bool should not be necessary here (^^^^); working around bug - var bottleDescription = if (bottleNum) then bottleNum:string - else (if startOfVerse then "N" - else "n") - + "o more"; - return bottleDescription - + " bottle" + (if (bottleNum == 1) then "" else "s") - + " of beer"; -} - - -proc computeAction(bottleNum) { - return if (bottleNum == 0) then "Go to the store and buy some more, " - else "Take one down and pass it around, "; -} - - -// Modules... -module M1 { - var x = 10; -} - -module M2 { - use M1; - proc main() { - writeln("M2 -> M1 -> x " + x); - } -} - - -// Classes, records, unions... -const PI: real = 3.14159; - -record Point { - var x, y: real; -} -var p: Point; -writeln("Distance from origin: " + sqrt(p.x ** 2 + p.y ** 2)); -p = new Point(1.0, 2.0); -writeln("Distance from origin: " + sqrt(p.x ** 2 + p.y ** 2)); - -class Circle { - var p: Point; - var r: real; -} -var c = new Circle(r=2.0); -proc Circle.area() - return PI * r ** 2; -writeln("Area of circle: " + c.area()); - -class Oval: Circle { - var r2: real; -} -proc Oval.area() - return PI * r * r2; - -delete c; -c = nil; -c = new Oval(r=1.0, r2=2.0); -writeln("Area of oval: " + c.area()); - -union U { - var i: int; - var r: real; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/AcidStateAdvanced.hs b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/AcidStateAdvanced.hs deleted file mode 100644 index 9e3e771..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/AcidStateAdvanced.hs +++ /dev/null @@ -1,209 +0,0 @@ -{-# LANGUAGE DeriveDataTypeable, FlexibleContexts, GeneralizedNewtypeDeriving - , MultiParamTypeClasses, OverloadedStrings, ScopedTypeVariables, TemplateHaskell - , TypeFamilies, FlexibleInstances #-} -module Main where -import Control.Applicative (Applicative, Alternative, (<$>)) -import Control.Exception.Lifted (bracket) -import Control.Monad.Trans.Control (MonadBaseControl) -import Control.Monad (MonadPlus, mplus) -import Control.Monad.Reader (MonadReader, ReaderT(..), ask) -import Control.Monad.Trans (MonadIO(..)) -import Data.Acid ( AcidState(..), EventState(..), EventResult(..) - , Query(..), QueryEvent(..), Update(..), UpdateEvent(..) - , IsAcidic(..), makeAcidic, openLocalState - ) -import Data.Acid.Local ( createCheckpointAndClose - , openLocalStateFrom - ) -import Data.Acid.Advanced (query', update') -import Data.Maybe (fromMaybe) -import Data.SafeCopy (SafeCopy, base, deriveSafeCopy) -import Data.Data (Data, Typeable) -import Data.Lens ((%=), (!=)) -import Data.Lens.Template (makeLens) -import Data.Text.Lazy (Text) -import Happstack.Server ( Happstack, HasRqData, Method(GET, POST), Request(rqMethod) - , Response - , ServerPartT(..), WebMonad, FilterMonad, ServerMonad - , askRq, decodeBody, dir, defaultBodyPolicy, lookText - , mapServerPartT, nullConf, nullDir, ok, simpleHTTP - , toResponse - ) -import Prelude hiding (head, id) -import System.FilePath (()) -import Text.Blaze ((!)) -import Text.Blaze.Html4.Strict (body, head, html, input, form, label, p, title, toHtml) -import Text.Blaze.Html4.Strict.Attributes (action, enctype, for, id, method, name, type_, value) -class HasAcidState m st where - getAcidState :: m (AcidState st) -query :: forall event m. - ( Functor m - , MonadIO m - , QueryEvent event - , HasAcidState m (EventState event) - ) => - event - -> m (EventResult event) -query event = - do as <- getAcidState - query' (as :: AcidState (EventState event)) event -update :: forall event m. - ( Functor m - , MonadIO m - , UpdateEvent event - , HasAcidState m (EventState event) - ) => - event - -> m (EventResult event) -update event = - do as <- getAcidState - update' (as :: AcidState (EventState event)) event --- | bracket the opening and close of the `AcidState` handle. - --- automatically creates a checkpoint on close -withLocalState :: (MonadBaseControl IO m, MonadIO m, IsAcidic st, Typeable st) => - Maybe FilePath -- ^ path to state directory - -> st -- ^ initial state value - -> (AcidState st -> m a) -- ^ function which uses the `AcidState` handle - -> m a -withLocalState mPath initialState = - bracket (liftIO $ (maybe openLocalState openLocalStateFrom mPath) initialState) - (liftIO . createCheckpointAndClose) --- State that stores a hit count - -data CountState = CountState { _count :: Integer } - deriving (Eq, Ord, Data, Typeable, Show) - -$(deriveSafeCopy 0 'base ''CountState) -$(makeLens ''CountState) - -initialCountState :: CountState -initialCountState = CountState { _count = 0 } - -incCount :: Update CountState Integer -incCount = count %= succ - -$(makeAcidic ''CountState ['incCount]) --- State that stores a greeting -data GreetingState = GreetingState { _greeting :: Text } - deriving (Eq, Ord, Data, Typeable, Show) - -$(deriveSafeCopy 0 'base ''GreetingState) -$(makeLens ''GreetingState) - -initialGreetingState :: GreetingState -initialGreetingState = GreetingState { _greeting = "Hello" } - -getGreeting :: Query GreetingState Text -getGreeting = _greeting <$> ask - -setGreeting :: Text -> Update GreetingState Text -setGreeting txt = greeting != txt - -$(makeAcidic ''GreetingState ['getGreeting, 'setGreeting]) -data Acid = Acid { acidCountState :: AcidState CountState - , acidGreetingState :: AcidState GreetingState - } - -withAcid :: Maybe FilePath -> (Acid -> IO a) -> IO a -withAcid mBasePath action = - let basePath = fromMaybe "_state" mBasePath - in withLocalState (Just $ basePath "count") initialCountState $ \c -> - withLocalState (Just $ basePath "greeting") initialGreetingState $ \g -> - action (Acid c g) -newtype App a = App { unApp :: ServerPartT (ReaderT Acid IO) a } - deriving ( Functor, Alternative, Applicative, Monad, MonadPlus, MonadIO - , HasRqData, ServerMonad ,WebMonad Response, FilterMonad Response - , Happstack, MonadReader Acid) - -runApp :: Acid -> App a -> ServerPartT IO a -runApp acid (App sp) = mapServerPartT (flip runReaderT acid) sp -instance HasAcidState App CountState where - getAcidState = acidCountState <$> ask - -instance HasAcidState App GreetingState where - getAcidState = acidGreetingState <$> ask -page :: App Response -page = - do nullDir - g <- greet - c <- update IncCount -- ^ a CountState event - ok $ toResponse $ - html $ do - head $ do - title "acid-state demo" - body $ do - form ! action "/" ! method "POST" ! enctype "multipart/form-data" $ do - label "new message: " ! for "msg" - input ! type_ "text" ! id "msg" ! name "greeting" - input ! type_ "submit" ! value "update message" - p $ toHtml g - p $ do "This page has been loaded " - toHtml c - " time(s)." - where - greet = - do m <- rqMethod <$> askRq - case m of - POST -> - do decodeBody (defaultBodyPolicy "/tmp/" 0 1000 1000) - newGreeting <- lookText "greeting" - update (SetGreeting newGreeting) -- ^ a GreetingState event - return newGreeting - GET -> - do query GetGreeting -- ^ a GreetingState event -main :: IO () -main = - withAcid Nothing $ \acid -> - simpleHTTP nullConf $ runApp acid page -newtype FooState = FooState { foo :: Text } - deriving (Eq, Ord, Data, Typeable, SafeCopy) - -initialFooState :: FooState -initialFooState = FooState { foo = "foo" } - -askFoo :: Query FooState Text -askFoo = foo <$> ask - -$(makeAcidic ''FooState ['askFoo]) -fooPlugin :: (Happstack m, HasAcidState m FooState) => m Response -fooPlugin = - dir "foo" $ do - txt <- query AskFoo - ok $ toResponse txt -data Acid' = Acid' { acidCountState' :: AcidState CountState - , acidGreetingState' :: AcidState GreetingState - , acidFooState' :: AcidState FooState - } -withAcid' :: Maybe FilePath -> (Acid' -> IO a) -> IO a -withAcid' mBasePath action = - let basePath = fromMaybe "_state" mBasePath - in withLocalState (Just $ basePath "count") initialCountState $ \c -> - withLocalState (Just $ basePath "greeting") initialGreetingState $ \g -> - withLocalState (Just $ basePath "foo") initialFooState $ \f -> - action (Acid' c g f) -newtype App' a = App' { unApp' :: ServerPartT (ReaderT Acid' IO) a } - deriving ( Functor, Alternative, Applicative, Monad, MonadPlus, MonadIO - , HasRqData, ServerMonad ,WebMonad Response, FilterMonad Response - , Happstack, MonadReader Acid') - -instance HasAcidState App' FooState where - getAcidState = acidFooState' <$> ask -fooAppPlugin :: App' Response -fooAppPlugin = fooPlugin -fooReaderPlugin :: ReaderT (AcidState FooState) (ServerPartT IO) Response -fooReaderPlugin = fooPlugin -instance HasAcidState (ReaderT (AcidState FooState) (ServerPartT IO)) FooState where - getAcidState = ask -withFooPlugin :: (MonadIO m, MonadBaseControl IO m) => - FilePath -- ^ path to state directory - -> (ServerPartT IO Response -> m a) -- ^ function that uses fooPlugin - -> m a -withFooPlugin basePath f = - do withLocalState (Just $ basePath "foo") initialFooState $ \fooState -> - f $ runReaderT fooReaderPlugin fooState -main' :: IO () -main' = - withFooPlugin "_state" $ \fooPlugin' -> - withAcid Nothing $ \acid -> - simpleHTTP nullConf $ fooPlugin' `mplus` runApp acid page diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/AlternatingGroup.mu b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/AlternatingGroup.mu deleted file mode 100644 index 2cb1992..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/AlternatingGroup.mu +++ /dev/null @@ -1,102 +0,0 @@ -/*++ $Id: AlternatingGroup.mu,v 1.4 2003/09/08 15:00:47 nthiery Exp $ - -Dom::AlternatingGroup(n) -- the Alternating Group of {1..n} - -n - integer >= 1 - -Elements are represented as in Dom::PermutationGroup(n) - -Author: Nicolas M. Thiéry -License: LGPL -Created: August 8th, 1999 -Last update: $Date: 2003/09/08 15:00:47 $ -++*/ - -domain Dom::AlternatingGroup(n: Type::PosInt) - inherits Dom::PermutationGroup(n,toBeDefined); - category Cat::PermutationGroup; - axiom Ax::canonicalRep; - -/*-- - size - - Size of the group. ---*/ - - size := fact(n)/2; - -/*-- - generators - - A list of generators of the group - - The first 3-cycle (1,2,3), and a maximal even cycle (1,...,n) or - (2,...,n) depending on the parity of n - ---*/ - - generators := - if n<=2 then generators:=[dom([[1]])]; - elif n=3 then generators:=[dom([[1,2,3]])]; - elif n mod 2=0 then generators:=[dom([[1,2,3]]), dom([[$2..n]])]; - else generators:=[dom([[1,2,3]]), dom([[$1..n]])]; - end_if; - -/*-- - allElements - - List of all the elements of the group ---*/ - - allElements := - proc() - option remember; - local p; - begin - [new(dom,p) $ p in select(combinat::permutations(n), - p->bool(combinat::permutations::sign(p)=1))]; - end_proc; - -/*-- - cycleTypes: - - Count the elements of the group by cycle type. - (Cf Cat::PermutationGroupModule). - - Same algorithm as for Dom::SymmetricGroup, but only even permutations - are considered. This is done by disregarding partitions p such - that n-length(p) is odd. ---*/ - - cycleTypes := - proc() - option remember; - local t, p, gen; - begin - userinfo(3, "cycleTypes: starting computation"); - t:=table(); - - gen := combinat::partitions::generator(n); - while (p:=gen()) <> FAIL do - userinfo(5, "working on partition", p); - if(n-nops(p) mod 2=0) then - // Compute the size of the conjugacy class of Sn indexed by p - // and the cycle type of a permutation in this conjugacy class - t[combinat::partitions::toExp(p,n)] - := combinat::partitions::conjugacyClassSize(p); - end_if; - end_while; - t; - end_proc; - -begin - if testargs() then - if args(0) <> 1 then error("wrong no of args"); end_if; - if not testtype(n,DOM_INT) then - error("argument must be integer") - end_if; - if n < 1 then - error("argument must be positive") - end_if; - end_if; -end_domain: diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/BOM.js b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/BOM.js deleted file mode 100644 index 930599c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/BOM.js +++ /dev/null @@ -1 +0,0 @@ -/* There is a BOM at the beginning of this file. */ \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/CPDictionary.j b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/CPDictionary.j deleted file mode 100755 index 50243f1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/CPDictionary.j +++ /dev/null @@ -1,611 +0,0 @@ -/* - * CPDictionary.j - * Foundation - * - * Created by Francisco Tolmasky. - * Copyright 2008, 280 North, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -//@import "CPRange.j" -@import "CPObject.j" -@import "CPEnumerator.j" -@import "CPException.j" - -/* @ignore */ -@implementation _CPDictionaryValueEnumerator : CPEnumerator -{ - CPEnumerator _keyEnumerator; - CPDictionary _dictionary; -} - -- (id)initWithDictionary:(CPDictionary)aDictionary -{ - self = [super init]; - - if (self) - { - _keyEnumerator = [aDictionary keyEnumerator]; - _dictionary = aDictionary; - } - - return self; -} - -- (id)nextObject -{ - var key = [_keyEnumerator nextObject]; - - if (!key) - return nil; - - return [_dictionary objectForKey:key]; -} - -@end - -/*! - @class CPDictionary - @ingroup foundation - @brief A mutable key-value pair collection. - - A dictionary is the standard way of passing around key-value pairs in - the Cappuccino framework. It is similar to the - Java map interface, - except all keys are CPStrings and values can be any - Cappuccino or JavaScript object. - - If you are familiar with dictionaries in Cocoa, you'll notice that - there is no CPMutableDictionary class. The regular CPDictionary - has \c -setObject:forKey: and \c -removeObjectForKey: methods. - In Cappuccino there is no distinction between immutable and mutable classes. - They are all mutable. -*/ -@implementation CPDictionary : CPObject -{ -} - -/* - @ignore -*/ -+ (id)alloc -{ - return new objj_dictionary(); -} - -/*! - Returns a new empty CPDictionary. -*/ -+ (id)dictionary -{ - return [[self alloc] init]; -} - -/*! - Returns a new dictionary, initialized with the contents of \c aDictionary. - @param aDictionary the dictionary to copy key-value pairs from - @return the new CPDictionary -*/ -+ (id)dictionaryWithDictionary:(CPDictionary)aDictionary -{ - return [[self alloc] initWithDictionary:aDictionary]; -} - -/*! - Creates a new dictionary with single key-value pair. - @param anObject the object for the paring - @param aKey the key for the pairing - @return the new CPDictionary -*/ -+ (id)dictionaryWithObject:(id)anObject forKey:(id)aKey -{ - return [[self alloc] initWithObjects:[anObject] forKeys:[aKey]]; -} - -/*! - Creates a dictionary with multiple key-value pairs. - @param objects the objects to place in the dictionary - @param keys the keys for each of the objects - @throws CPInvalidArgumentException if the number of objects and keys is different - @return the new CPDictionary -*/ -+ (id)dictionaryWithObjects:(CPArray)objects forKeys:(CPArray)keys -{ - return [[self alloc] initWithObjects:objects forKeys:keys]; -} - -/*! - Creates a dictionary with multiple key-value pairs. - @param JavaScript object - @return the new CPDictionary -*/ -+ (id)dictionaryWithJSObject:(JSObject)object -{ - return [self dictionaryWithJSObject:object recursively:NO]; -} - -/*! - Creates a dictionary with multiple key-value pairs, recursively. - @param JavaScript object - @return the new CPDictionary -*/ -+ (id)dictionaryWithJSObject:(JSObject)object recursively:(BOOL)recursively -{ - var dictionary = [[self alloc] init]; - - for (var key in object) - { - var value = object[key]; - - if (recursively && value.constructor === Object) - value = [CPDictionary dictionaryWithJSObject:value recursively:YES]; - - [dictionary setObject:value forKey:key]; - } - - return dictionary; -} - -/*! - Creates and returns a dictionary constructed by a given pairs of keys and values. - @param firstObject first object value - @param ... key for the first object and ongoing value-key pairs for more objects. - @throws CPInvalidArgumentException if the number of objects and keys is different - @return the new CPDictionary - - Assuming that there's no object retaining in Cappuccino, you can create - dictionaries same way as with alloc and initWithObjectsAndKeys: - var dict = [CPDictionary dictionaryWithObjectsAndKeys: - @"value1", @"key1", - @"value2", @"key2"]; - - Note, that there's no final nil like in Objective-C/Cocoa. - - @see [CPDictionary initWithObjectsAndKeys:] -*/ -+ (id)dictionaryWithObjectsAndKeys:(id)firstObject, ... -{ - arguments[0] = [self alloc]; - arguments[1] = @selector(initWithObjectsAndKeys:); - - return objj_msgSend.apply(this, arguments); -} - -/*! - Initializes the dictionary with the contents of another dictionary. - @param aDictionary the dictionary to copy key-value pairs from - @return the initialized dictionary -*/ -- (id)initWithDictionary:(CPDictionary)aDictionary -{ - var key = "", - dictionary = [[CPDictionary alloc] init]; - - for (key in aDictionary._buckets) - [dictionary setObject:[aDictionary objectForKey:key] forKey:key]; - - return dictionary; -} - -/*! - Initializes the dictionary from the arrays of keys and objects. - @param objects the objects to put in the dictionary - @param keyArray the keys for the objects to put in the dictionary - @throws CPInvalidArgumentException if the number of objects and keys is different - @return the initialized dictionary -*/ -- (id)initWithObjects:(CPArray)objects forKeys:(CPArray)keyArray -{ - self = [super init]; - - if ([objects count] != [keyArray count]) - [CPException raise:CPInvalidArgumentException reason:"Counts are different.("+[objects count]+"!="+[keyArray count]+")"]; - - if (self) - { - var i = [keyArray count]; - - while (i--) - [self setObject:objects[i] forKey:keyArray[i]]; - } - - return self; -} - -/*! - Creates and returns a dictionary constructed by a given pairs of keys and values. - @param firstObject first object value - @param ... key for the first object and ongoing value-key pairs for more objects. - @throws CPInvalidArgumentException if the number of objects and keys is different - @return the new CPDictionary - - You can create dictionaries this way: - var dict = [[CPDictionary alloc] initWithObjectsAndKeys: - @"value1", @"key1", - @"value2", @"key2"]; - - Note, that there's no final nil like in Objective-C/Cocoa. -*/ -- (id)initWithObjectsAndKeys:(id)firstObject, ... -{ - var argCount = arguments.length; - - if (argCount % 2 !== 0) - [CPException raise:CPInvalidArgumentException reason:"Key-value count is mismatched. (" + argCount + " arguments passed)"]; - - self = [super init]; - - if (self) - { - // The arguments array contains self and _cmd, so the first object is at position 2. - var index = 2; - - for(; index < argCount; index += 2) - { - var value = arguments[index]; - - if (value === nil) - break; - - [self setObject:value forKey:arguments[index + 1]]; - } - } - - return self; -} - -/*! - return a copy of the receiver (does not deep copy the objects contained in the dictionary). -*/ -- (CPDictionary)copy -{ - return [CPDictionary dictionaryWithDictionary:self]; -} - -/*! - Returns the number of entries in the dictionary -*/ -- (int)count -{ - return count; -} - -/*! - Returns an array of keys for all the entries in the dictionary. -*/ -- (CPArray)allKeys -{ - return _keys; -} - -/*! - Returns an array of values for all the entries in the dictionary. -*/ -- (CPArray)allValues -{ - var index = _keys.length, - values = []; - - while (index--) - values.push(dictionary_getValue(self, [_keys[index]])); - - return values; -} - -/*! - Returns an enumerator that enumerates over all the dictionary's keys. -*/ -- (CPEnumerator)keyEnumerator -{ - return [_keys objectEnumerator]; -} - -/*! - Returns an enumerator that enumerates over all the dictionary's values. -*/ -- (CPEnumerator)objectEnumerator -{ - return [[_CPDictionaryValueEnumerator alloc] initWithDictionary:self]; -} - -/*! - Compare the receiver to this dictionary, and return whether or not they are equal. -*/ -- (BOOL)isEqualToDictionary:(CPDictionary)aDictionary -{ - if (count !== [aDictionary count]) - return NO; - - var index = count; - while (index--) - { - var currentKey = _keys[index], - lhsObject = _buckets[currentKey], - rhsObject = aDictionary._buckets[currentKey]; - - if (lhsObject === rhsObject) - continue; - - if (lhsObject.isa && rhsObject.isa && [lhsObject respondsToSelector:@selector(isEqual:)] && [lhsObject isEqual:rhsObject]) - continue; - - return NO; - } - - return YES; -} - -/* - Instance.isEqualToDictionary(aDictionary) - { - if(this.count()!=aDictionary.count()) return NO; - - var i= this._keys.count(); - while(i--) if(this.objectForKey(this._keys[i])!=aDictionary.objectForKey(this._keys[i])) return NO; - - return YES; - } - - Instance.allKeys() - { - return this._keys; - } - - Instance.allKeysForObject(anObject) - { - var i= 0, - keys= CPArray.array(), - count= this.count(); - - while((i= this._objects.indexOfObjectInRage(0, count-i))!=CPNotFound) keys.addObject(this._keys[i]); - - return keys; - } - - Instance.allValues() - { - return this._objects; - } - - Instance.keyEnumerator() - { - return this._keys.objectEnumerator(); - } - - Instance.keysSortedByValueUsingSelector(aSelector) - { - var dictionary= this, - objectSelector= function(rhs) - { - return aSelector.apply(dictionary.objectForKey(this), [dictionary.objectForKey(rhs)]); - }; - - return this._keys.sortedArrayUsingSelector(objectSelector); - } - - Instance.objectEnumerator() - { - return this._objects.objectEnumerator(); - } -*/ -/*! - Returns the object for the entry with key \c aKey. - @param aKey the key for the object's entry - @return the object for the entry -*/ -- (id)objectForKey:(CPString)aKey -{ - var object = _buckets[aKey]; - - return (object === undefined) ? nil : object; -} -/* - Instance.objectsForKeys(keys, aNotFoundMarker) - { - var i= keys.length, - objects= CPArray.array(); - - while(i--) - { - var object= this.objectForKey(keys[i]); - objects.addObject(object==nil?aNotFoundMarker:object); - } - - return objects; - } - - Instance.valueForKey(aKey) - { - if(aKey.length && aKey[0]=="@") return this.objectForKey(aKey.substr(1)); - - return base.valueForKey(aKey); - } - - // - - Instance.addEntriesFromDictionary(aDictionary) - { - var key, - keyEnumerator= aDictionary.keyEnumerator(); - - while(key= keyEnumerator.nextObject()) this.setObjectForKey(aDictionary.objectForKey(key), key); - } -*/ -/*! - Removes all the entries from the dictionary. -*/ -- (void)removeAllObjects -{ - _keys = []; - count = 0; - _buckets = {}; -} - -/*! - Removes the entry for the specified key. - @param aKey the key of the entry to be removed -*/ -- (void)removeObjectForKey:(id)aKey -{ - dictionary_removeValue(self, aKey); -} - -/*! - Removes each entry in allKeys from the receiver. - @param allKeys an array of keys that will be removed from the dictionary -*/ -- (void)removeObjectsForKeys:(CPArray)allKeys -{ - var index = allKeys.length; - - while (index--) - dictionary_removeValue(self, allKeys[index]); -} - -/* - Instance.removeObjectForKey(aKey) - { - var entry= this._dictionary[aKey]; - - if(entry) - { - var range= CPMakeRange(entry.index, 1); - - this._keys.removeObjectsInRange(range); - this._objects.removeObjectsInRange(range); - - delete this._dictionary[aKey]; - } - } - - Instance.setDictionary(aDictionary) - { - this._keys= CPArray.arrayWithArray(aDictionary.allKeys()); - this._objects= CPArray.arrayWithArray(aDictionary.allValues()); - - this._dictionary= { }; - - var i= this._keys.count(); - while(i--) this._dictionary[this._keys[i]]= { object: this._objects[i], index: i }; - } -*/ -/*! - Adds an entry into the dictionary. - @param anObject the object for the entry - @param aKey the entry's key -*/ -- (void)setObject:(id)anObject forKey:(id)aKey -{ - dictionary_setValue(self, aKey, anObject); -} -/* - Instance.setValueForKey(aValue, aKey) - { - if(!aValue) this.removeObjectForKey(aKey); - else this.setObjectForKey(aValue, aKey); - } - - Instance.copy() - { - return CPDictionary.alloc().dictionaryWithDictionary(this); - } -*/ - -/*! - Take all the key/value pairs in aDictionary and apply them to this dictionary. -*/ -- (void)addEntriesFromDictionary:(CPDictionary)aDictionary -{ - if (!aDictionary) - return; - - var keys = [aDictionary allKeys], - index = [keys count]; - - while (index--) - { - var key = keys[index]; - - [self setObject:[aDictionary objectForKey:key] forKey:key]; - } -} - -/*! - Returns a human readable description of the dictionary. -*/ -- (CPString)description -{ - var description = @"CPDictionary {\n"; - - var i = _keys.length; - - while (i--) - { - description += _keys[i] + ":"; - - var object = _buckets[_keys[i]]; - - if (object && object.isa) - description += [object description]; - else - description += object; - - description += "\n"; - } - - description += "}"; - - return description; -} - -@end - -@implementation CPDictionary (CPCoding) - -/* - Initializes the dictionary by unarchiving the data from a coder. - @param aCoder the coder from which the data will be unarchived. - @return the initialized dictionary -*/ -- (id)initWithCoder:(CPCoder)aCoder -{ - return [aCoder _decodeDictionaryOfObjectsForKey:@"CP.objects"]; -} - -/*! - Archives the dictionary to a provided coder. - @param aCoder the coder to which the dictionary data will be archived. -*/ -- (void)encodeWithCoder:(CPCoder)aCoder -{ - [aCoder _encodeDictionaryOfObjects:self forKey:@"CP.objects"]; -} - -@end - -/*! - @class CPMutableDictionary - @ingroup compatability - - This class is just an empty subclass of CPDictionary. - CPDictionary already implements mutable methods and - this class only exists for source compatability. -*/ -@implementation CPMutableDictionary : CPDictionary - -@end - -objj_dictionary.prototype.isa = CPDictionary; diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Config.in.cache b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Config.in.cache deleted file mode 100644 index e2f6ad5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Config.in.cache +++ /dev/null @@ -1,1973 +0,0 @@ -# INCLUDE_BEGIN Config.in -mainmenu "Freetz Configuration" - -config FREETZ_HAVE_DOT_CONFIG - bool - default y - -comment "General --------------------------------" - -config FREETZ_AVM_VERSION_04_30 - bool -config FREETZ_AVM_VERSION_04_33 - bool -config FREETZ_AVM_VERSION_04_40 - bool -config FREETZ_AVM_VERSION_04_49 - bool -config FREETZ_AVM_VERSION_04_57 - bool -config FREETZ_AVM_VERSION_04_67 - bool -config FREETZ_AVM_VERSION_04_70 - bool -config FREETZ_AVM_VERSION_04_76 - bool -config FREETZ_AVM_VERSION_04_80 - bool -config FREETZ_AVM_VERSION_04_87 - bool -config FREETZ_AVM_VERSION_7270_04_86 - bool -config FREETZ_AVM_VERSION_7270_05_05 - bool -config FREETZ_AVM_VERSION_7320_04_86 - bool -config FREETZ_AVM_VERSION_7390_04_90 - bool -config FREETZ_AVM_VERSION_7390_05_05 - bool -config FREETZ_AVM_VERSION_r7203 - bool - -choice - prompt "Hardware type" - default FREETZ_TYPE_FON_WLAN_7270_V2 - help - Select your box type here. - - config FREETZ_TYPE_300IP_AS_FON - select FREETZ_AVM_VERSION_04_49 - bool "300IP as Fon" - - config FREETZ_TYPE_2170 - select FREETZ_AVM_VERSION_04_57 - bool "2170" - - config FREETZ_TYPE_FON - select FREETZ_AVM_VERSION_04_33 if FREETZ_TYPE_LANG_DE - select FREETZ_AVM_VERSION_04_49 if ! FREETZ_TYPE_LANG_DE - bool "Fon" - - config FREETZ_TYPE_FON_5010 - select FREETZ_AVM_VERSION_04_40 - bool "Fon 5010" - - config FREETZ_TYPE_FON_5050 - select FREETZ_AVM_VERSION_04_30 - bool "Fon 5050" - - config FREETZ_TYPE_FON_5124 - select FREETZ_AVM_VERSION_04_76 - bool "Fon 5124" - - config FREETZ_TYPE_FON_5140 - select FREETZ_AVM_VERSION_04_67 - bool "Fon 5140" - - config FREETZ_TYPE_FON_WLAN - select FREETZ_AVM_VERSION_04_33 if FREETZ_TYPE_LANG_DE - select FREETZ_AVM_VERSION_04_49 if ! FREETZ_TYPE_LANG_DE - bool "Fon WLAN" - - config FREETZ_TYPE_FON_WLAN_7050 - select FREETZ_AVM_VERSION_04_33 - bool "Fon WLAN 7050" - - config FREETZ_TYPE_FON_WLAN_7112 - select FREETZ_AVM_VERSION_04_87 - bool "Fon WLAN 7112" - - config FREETZ_TYPE_FON_WLAN_7113 - select FREETZ_AVM_VERSION_04_80 if FREETZ_TYPE_LANG_EN - select FREETZ_AVM_VERSION_04_67 if FREETZ_TYPE_LANG_DE - bool "Fon WLAN 7113" - - config FREETZ_TYPE_FON_WLAN_7140 - select FREETZ_AVM_VERSION_04_33 if FREETZ_TYPE_LANG_DE - select FREETZ_AVM_VERSION_04_76 if FREETZ_TYPE_LANG_A_CH - select FREETZ_AVM_VERSION_04_67 if FREETZ_TYPE_LANG_EN - bool "Fon WLAN 7140" - - config FREETZ_TYPE_FON_WLAN_7141 - select FREETZ_AVM_VERSION_04_76 - bool "Fon WLAN 7141" - - config FREETZ_TYPE_FON_7150 - select FREETZ_AVM_VERSION_04_70 - bool "Fon 7150" - - config FREETZ_TYPE_FON_WLAN_7170 - select FREETZ_AVM_VERSION_04_76 if FREETZ_TYPE_LANG_A_CH - select FREETZ_AVM_VERSION_04_80 if FREETZ_TYPE_LANG_EN - select FREETZ_AVM_VERSION_04_87 if FREETZ_TYPE_LANG_DE - bool "Fon WLAN 7170" - - config FREETZ_TYPE_FON_WLAN_7240 - select FREETZ_AVM_VERSION_7270_05_05 - bool "Fon WLAN 7240" - - config FREETZ_TYPE_FON_WLAN_7270_V1 - select FREETZ_TYPE_FON_WLAN_7270 - bool "Fon WLAN 7270 v1" - - config FREETZ_TYPE_FON_WLAN_7270_V2 - select FREETZ_TYPE_FON_WLAN_7270 - bool "Fon WLAN 7270 v2" - - config FREETZ_TYPE_FON_WLAN_7270_V3 - select FREETZ_TYPE_FON_WLAN_7270 - bool "Fon WLAN 7270 v3" - - config FREETZ_TYPE_FON_WLAN_7320 - select FREETZ_AVM_VERSION_7320_04_86 - bool "Fon WLAN 7320" - - config FREETZ_TYPE_FON_WLAN_7330 - select FREETZ_AVM_VERSION_7320_04_86 - bool "Fon WLAN 7330" - - config FREETZ_TYPE_FON_WLAN_7340 - select FREETZ_AVM_VERSION_7390_05_05 - bool "Fon WLAN 7340" - - config FREETZ_TYPE_FON_WLAN_7390 - select FREETZ_AVM_VERSION_7390_05_05 - bool "Fon WLAN 7390" - - config FREETZ_TYPE_FON_WLAN_7570 - select FREETZ_AVM_VERSION_7270_04_86 - bool "Fon WLAN 7570 VDSL" - - config FREETZ_TYPE_FON_WLAN_7570_IAD - bool "build firmware for Alice IAD 7570" - depends on FREETZ_TYPE_FON_WLAN_7570 - comment "Hint: Use replace kernel to get max filesystem size" - depends on FREETZ_TYPE_FON_WLAN_7570_IAD - - config FREETZ_TYPE_WLAN_3020 - select FREETZ_AVM_VERSION_04_33 - bool "WLAN 3020" - - config FREETZ_TYPE_WLAN_3030 - select FREETZ_AVM_VERSION_04_33 - bool "WLAN 3030" - - config FREETZ_TYPE_WLAN_3130 - select FREETZ_AVM_VERSION_04_33 - bool "WLAN 3130" - - config FREETZ_TYPE_WLAN_3131 - select FREETZ_AVM_VERSION_04_57 - bool "WLAN 3131" - - config FREETZ_TYPE_WLAN_3170 - select FREETZ_AVM_VERSION_04_57 - bool "WLAN 3170" - - config FREETZ_TYPE_WLAN_3270 - select FREETZ_AVM_VERSION_7270_05_05 - bool "WLAN 3270 (v1 and v2 only)" - - config FREETZ_TYPE_WLAN_3270_V3 - select FREETZ_AVM_VERSION_7270_05_05 - bool "WLAN 3270 (v3 only)" - - config FREETZ_TYPE_SPEEDPORT_W501V - select FREETZ_AVM_VERSION_r7203 - bool "Speedport W501V" - - config FREETZ_TYPE_CUSTOM - bool "Custom" - depends on FREETZ_SHOW_ADVANCED - select FREETZ_DL_OVERRIDE - -endchoice # "Hardware type" # - -config FREETZ_TYPE_FON_WLAN_7270 - depends on \ - FREETZ_TYPE_FON_WLAN_7270_V1 || \ - FREETZ_TYPE_FON_WLAN_7270_V2 || \ - FREETZ_TYPE_FON_WLAN_7270_V3 - select FREETZ_AVM_VERSION_7270_04_86 if \ - FREETZ_TYPE_FON_WLAN_7270_V1 - select FREETZ_AVM_VERSION_7270_05_05 if \ - (FREETZ_TYPE_FON_WLAN_7270_V2 || FREETZ_TYPE_FON_WLAN_7270_V3) - bool - -choice - prompt "Firmware language" - default FREETZ_TYPE_LANG_DE - - config FREETZ_TYPE_LANG_DE - bool "de - deutsch" - depends on \ - ! FREETZ_TYPE_FON_5010 && \ - ! FREETZ_TYPE_FON_5124 && \ - ! FREETZ_TYPE_FON_WLAN_7340 && \ - ! FREETZ_TYPE_FON_WLAN_7570 - - config FREETZ_TYPE_LANG_A_CH - bool "a-ch - deutsch" - depends on \ - FREETZ_TYPE_FON_5010 || \ - FREETZ_TYPE_FON_WLAN_7140 || \ - FREETZ_TYPE_FON_WLAN_7170 \ - - config FREETZ_TYPE_LANG_EN - bool "en - international" - depends on \ - FREETZ_TYPE_FON || \ - FREETZ_TYPE_300IP_AS_FON || \ - FREETZ_TYPE_FON_5124 || \ - FREETZ_TYPE_FON_WLAN || \ - FREETZ_TYPE_FON_WLAN_7113 || \ - FREETZ_TYPE_FON_WLAN_7140 || \ - FREETZ_TYPE_FON_WLAN_7170 || \ - FREETZ_TYPE_FON_WLAN_7270_V2 || \ - FREETZ_TYPE_FON_WLAN_7270_V3 || \ - FREETZ_TYPE_FON_WLAN_7340 || \ - FREETZ_TYPE_FON_WLAN_7390 || \ - FREETZ_TYPE_FON_WLAN_7570 \ - -endchoice # "Firmware language" # - -config FREETZ_TYPE_LANGUAGE - string - default "de" if FREETZ_TYPE_LANG_DE - default "a-ch" if FREETZ_TYPE_LANG_A_CH - default "en" if FREETZ_TYPE_LANG_EN - -config FREETZ_TYPE_LABOR - bool "Beta/Labor" - depends on \ - FREETZ_TYPE_LANG_DE && \ - ( \ - FREETZ_TYPE_FON_WLAN_7390 || \ - FREETZ_TYPE_FON_WLAN_7270_V2 || \ - FREETZ_TYPE_FON_WLAN_7270_V3 \ - ) - default n - help - Enable this to compile the mod based on an AVM "beta/labor" firmware. - -choice - prompt "Labor version" - depends on FREETZ_TYPE_LABOR - default FREETZ_TYPE_LABOR_PREVIEW - -# config FREETZ_TYPE_LABOR_DSL -# bool "DSL" -# help -# FRITZ!Lab DSL: This release optimizes the DSL (Digital Subscriber -# Line) software and adds related graphs. - - config FREETZ_TYPE_LABOR_PREVIEW - bool "Preview" - depends on \ - FREETZ_TYPE_FON_WLAN_7390 || \ - FREETZ_TYPE_FON_WLAN_7270_V2 || \ - FREETZ_TYPE_FON_WLAN_7270_V3 - help - Labor Preview - -endchoice # "Labor version" # - -config FREETZ_TYPE_ALIEN_HARDWARE - bool "Compile image for \"alien\" hardware" - depends on \ - FREETZ_TYPE_FON_WLAN_7170 || \ - FREETZ_TYPE_FON_WLAN_7270 || \ - FREETZ_TYPE_FON_WLAN_7570 - default n - help - Enable this to compile the mod image for another hardware type - -choice - prompt "Alien hardware type" - depends on FREETZ_TYPE_ALIEN_HARDWARE -# default FREETZ_TYPE_SINUS_W500V_7150 if FREETZ_TYPE_FON_7150 - default FREETZ_TYPE_SPEEDPORT_W701V_7170 if FREETZ_TYPE_FON_WLAN_7170 - default FREETZ_TYPE_7240_7270 if FREETZ_TYPE_FON_WLAN_7270_V2 - default FREETZ_TYPE_72702_72701 if FREETZ_TYPE_FON_WLAN_7270_V1 - -# config FREETZ_TYPE_SINUS_W500V_7150 -# bool "Sinus W500V" -# depends on FREETZ_TYPE_FON_7150 -# select FREETZ_MODULE_jffs2 -# help -# Enable this to compile a mod image for T-Com Sinus W500V based -# on a 7150 image. - - config FREETZ_TYPE_SPEEDPORT_W701V_7170 - bool "W701V" - depends on FREETZ_TYPE_FON_WLAN_7170 && FREETZ_TYPE_LANG_DE - select FREETZ_REMOVE_FTPD - select FREETZ_REMOVE_MEDIASRV - select FREETZ_REMOVE_PRINTSERV - select FREETZ_REMOVE_PRINTSERV_MODULE if ! FREETZ_MODULE_usblp - select FREETZ_REMOVE_SMBD - help - Enable this to compile a mod image for T-Com Speedport W701V based - on a 7170 image. - - config FREETZ_TYPE_SPEEDPORT_W900V_7170 - bool "W900V" - depends on FREETZ_TYPE_FON_WLAN_7170 && FREETZ_TYPE_LANG_DE - help - Enable this to compile a mod image for T-Com Speedport W900V based - on a 7170 image. - - config FREETZ_TYPE_SPEEDPORT_W920V_7570 - bool "W920V" - depends on FREETZ_TYPE_FON_WLAN_7570 - help - Enable this to compile a mod image for T-Com Speedport W920V based - on a 7570 image. - - config FREETZ_TYPE_3170_7170 - bool "3170" - depends on FREETZ_TYPE_FON_WLAN_7170 - select FREETZ_REMOVE_VOIPD - select FREETZ_REMOVE_VOIP_ISDN - select FREETZ_REMOVE_CAPIOVERTCP - help - Enable this to compile a mod image for FritzBox FON WLAN 3170 based - on a 7170 image. - - config FREETZ_TYPE_7112_7170 - bool "7112" - depends on FREETZ_TYPE_FON_WLAN_7170 - select FREETZ_REMOVE_FTPD - select FREETZ_REMOVE_MEDIASRV - select FREETZ_REMOVE_PRINTSERV - select FREETZ_REMOVE_PRINTSERV_MODULE if ! FREETZ_MODULE_usblp - select FREETZ_REMOVE_SMBD - help - Enable this to compile a mod image for FritzBox Fon WLAN 7112 based - on a 7170 image. - - config FREETZ_TYPE_7113_7170 - bool "7113" - depends on FREETZ_TYPE_FON_WLAN_7170 - select FREETZ_REMOVE_FTPD - select FREETZ_REMOVE_MEDIASRV - select FREETZ_REMOVE_PRINTSERV - select FREETZ_REMOVE_PRINTSERV_MODULE if ! FREETZ_MODULE_usblp - select FREETZ_REMOVE_SMBD - help - Enable this to compile a mod image for FritzBox Fon WLAN 7113 based - on a 7170 image. - - config FREETZ_TYPE_7140_7170 - bool "7140" - depends on FREETZ_TYPE_FON_WLAN_7170 - help - Enable this to compile a mod image for FritzBox FON WLAN 7140 based - on a 7170 image. - - config FREETZ_TYPE_7141_7170 - bool "7141" - depends on FREETZ_TYPE_FON_WLAN_7170 - help - Enable this to compile a mod image for FritzBox FON WLAN 7141 based - on a 7170 image. - - config FREETZ_TYPE_7240_7270 - bool "7240" - depends on FREETZ_TYPE_FON_WLAN_7270_V2 || FREETZ_TYPE_FON_WLAN_7270_V3 - help - Enable this to compile a mod image for FritzBox FON WLAN 7240 based - on a 7270 image. - - config FREETZ_TYPE_7270_7270 - bool "7270 v1" - depends on FREETZ_TYPE_FON_WLAN_7270_V2 && FREETZ_REPLACE_KERNEL_AVAILABLE - select FREETZ_REPLACE_KERNEL -# select FREETZ_REMOVE_AVM_VPN -# select FREETZ_REMOVE_CAPIOVERTCP -# select FREETZ_REMOVE_NTFS -# select FREETZ_REMOVE_SMBD -# select FREETZ_REMOVE_UMTSD -# select FREETZ_REMOVE_VOIPD -# select FREETZ_REMOVE_VOIP_ISDN -# select FREETZ_REMOVE_WEBDAV - help - Enable this to compile a mod image for FritzBox FON WLAN 7270 v1 based - on a 7270 v2 image. - - Caution: To fit into 8MB ROM some AVM components (e.g. telephony) have - to be removed. Please use usbroot for a full featured image. - - config FREETZ_TYPE_72702_72701 - bool "7270 v2" - depends on FREETZ_TYPE_FON_WLAN_7270_V1 && FREETZ_REPLACE_KERNEL_AVAILABLE - help - Enable this to compile a mod image for FritzBox FON WLAN 7270 v2 based - on a 7270 v1 image. - - config FREETZ_TYPE_IAD_3331_7170 - bool "Alice IAD 3331" - depends on FREETZ_TYPE_FON_WLAN_7170 && FREETZ_TYPE_LANG_DE - select FREETZ_REMOVE_PIGLET_V1 if FREETZ_SHOW_ADVANCED - select FREETZ_ENFORCE_URLADER_SETTINGS - help - Enable this to compile a mod image for Alice IAD 3331 based - on a 7170 image. - The firmware_version has to be enforced, because this variable is unset - in the 7170_HN bootloader. - Initial flashing might only be possible via ./tools/push_firmware - -endchoice # "Alien hardware type" # - -config FREETZ_AVM_VERSION_STRING - string - default "04.30" if FREETZ_AVM_VERSION_04_30 - default "04.33" if FREETZ_AVM_VERSION_04_33 - default "04.40" if FREETZ_AVM_VERSION_04_40 - default "04.49" if FREETZ_AVM_VERSION_04_49 - default "04.57" if FREETZ_AVM_VERSION_04_57 - default "04.67" if FREETZ_AVM_VERSION_04_67 - default "04.70" if FREETZ_AVM_VERSION_04_70 - default "04.76" if FREETZ_AVM_VERSION_04_76 - default "04.80" if FREETZ_AVM_VERSION_04_80 - default "04.87" if FREETZ_AVM_VERSION_04_87 - default "7270_04.86" if FREETZ_AVM_VERSION_7270_04_86 - default "7270_05.05" if FREETZ_AVM_VERSION_7270_05_05 - default "7320_04.86" if FREETZ_AVM_VERSION_7320_04_86 - default "7390_04.90" if FREETZ_AVM_VERSION_7390_04_90 - default "7390_05.05" if FREETZ_AVM_VERSION_7390_05_05 - default "r7203" if FREETZ_AVM_VERSION_r7203 - - -choice - prompt "Annex" - depends on FREETZ_TYPE_LANG_EN && \ - ! FREETZ_TYPE_FON_WLAN_7113 && \ - ! FREETZ_TYPE_FON_WLAN_7270 && \ - ! FREETZ_TYPE_FON_WLAN_7340 && \ - ! FREETZ_TYPE_FON_WLAN_7390 && \ - ! FREETZ_TYPE_FON_WLAN_7570 - default FREETZ_TYPE_ANNEX_B - - config FREETZ_TYPE_ANNEX_A - bool "A" - - config FREETZ_TYPE_ANNEX_B - bool "B" - -endchoice # prompt "Annex" # - -config FREETZ_TYPE_PREFIX - string - default "300ip_as_fon" if FREETZ_TYPE_300IP_AS_FON - default "2170" if FREETZ_TYPE_2170 - default "3020" if FREETZ_TYPE_WLAN_3020 - default "3030" if FREETZ_TYPE_WLAN_3030 - default "3130" if FREETZ_TYPE_WLAN_3130 - default "3131" if FREETZ_TYPE_WLAN_3131 - default "3170" if FREETZ_TYPE_WLAN_3170 - default "3270" if FREETZ_TYPE_WLAN_3270 - default "3270_v3" if FREETZ_TYPE_WLAN_3270_V3 - default "fon" if FREETZ_TYPE_FON - default "5010" if FREETZ_TYPE_FON_5010 - default "5050" if FREETZ_TYPE_FON_5050 - default "5124" if FREETZ_TYPE_FON_5124 - default "5140" if FREETZ_TYPE_FON_5140 - default "fon_wlan" if FREETZ_TYPE_FON_WLAN - default "7050" if FREETZ_TYPE_FON_WLAN_7050 - default "7112" if FREETZ_TYPE_FON_WLAN_7112 - default "7113" if FREETZ_TYPE_FON_WLAN_7113 - default "7140" if FREETZ_TYPE_FON_WLAN_7140 - default "7141" if FREETZ_TYPE_FON_WLAN_7141 - default "7150" if FREETZ_TYPE_FON_7150 - default "7170" if FREETZ_TYPE_FON_WLAN_7170 - default "7240" if FREETZ_TYPE_FON_WLAN_7240 && ! FREETZ_TYPE_LABOR -# default "7240_preview" if FREETZ_TYPE_FON_WLAN_7240 && FREETZ_TYPE_LABOR_PREVIEW - default "7270_v1" if FREETZ_TYPE_FON_WLAN_7270_V1 && ! FREETZ_TYPE_LABOR -# default "7270_v1_preview" if FREETZ_TYPE_FON_WLAN_7270_V1 && FREETZ_TYPE_LABOR_PREVIEW - default "7270_v2" if ( ( FREETZ_TYPE_FON_WLAN_7270_V2 && ! FREETZ_TYPE_ALIEN_HARDWARE ) || \ - FREETZ_TYPE_7270_7270 ) && \ - ! FREETZ_TYPE_LABOR - default "7270_v2_preview" if ( ( FREETZ_TYPE_FON_WLAN_7270_V2 && ! FREETZ_TYPE_ALIEN_HARDWARE ) || \ - FREETZ_TYPE_7270_7270 ) && \ - FREETZ_TYPE_LABOR_PREVIEW - default "7270_v3" if ( ( FREETZ_TYPE_FON_WLAN_7270_V3 && ! FREETZ_TYPE_ALIEN_HARDWARE ) || \ - FREETZ_TYPE_7240_7270 ) && \ - ! FREETZ_TYPE_LABOR - default "7270_v3_preview" if ( ( FREETZ_TYPE_FON_WLAN_7270_V3 && ! FREETZ_TYPE_ALIEN_HARDWARE ) || \ - FREETZ_TYPE_7240_7270 ) && \ - FREETZ_TYPE_LABOR_PREVIEW - default "7320" if FREETZ_TYPE_FON_WLAN_7320 && ! FREETZ_TYPE_LABOR - default "7330" if FREETZ_TYPE_FON_WLAN_7330 - default "7340" if FREETZ_TYPE_FON_WLAN_7340 - default "7390" if FREETZ_TYPE_FON_WLAN_7390 && ! FREETZ_TYPE_LABOR - default "7390_preview" if FREETZ_TYPE_FON_WLAN_7390 && FREETZ_TYPE_LABOR_PREVIEW - default "7570" if FREETZ_TYPE_FON_WLAN_7570 - default "W501V" if FREETZ_TYPE_SPEEDPORT_W501V - default "custom" if FREETZ_TYPE_CUSTOM - -config FREETZ_TYPE_PREFIX_ALIEN_HARDWARE - string - default "W500V_" if FREETZ_TYPE_SINUS_W500V_7150 - default "W701V_" if FREETZ_TYPE_SPEEDPORT_W701V_7170 - default "W900V_" if FREETZ_TYPE_SPEEDPORT_W900V_7170 - default "W920V_" if FREETZ_TYPE_SPEEDPORT_W920V_7570 - default "3170_" if FREETZ_TYPE_3170_7170 - default "7112_" if FREETZ_TYPE_7112_7170 - default "7113_" if FREETZ_TYPE_7113_7170 - default "7140_" if FREETZ_TYPE_7140_7170 - default "7141_" if FREETZ_TYPE_7141_7170 - default "7240_" if FREETZ_TYPE_7240_7270 - -comment "Custom options -------------------------" - depends on FREETZ_TYPE_CUSTOM - -config FREETZ_INSTALL_BASE - bool - select FREETZ_PACKAGE_MOD - select FREETZ_PACKAGE_HASERL - select FREETZ_LIB_ld_uClibc - select FREETZ_LIB_libcrypt - select FREETZ_LIB_libdl - select FREETZ_LIB_libgcc_s - select FREETZ_LIB_libm - select FREETZ_LIB_libnsl - select FREETZ_LIB_libpthread - select FREETZ_LIB_librt - select FREETZ_LIB_libuClibc - select FREETZ_LIB_libfreetz if FREETZ_HAS_USB_HOST - default y - help - This is mandatory - -config FREETZ_REPLACE_BUSYBOX - bool - select FREETZ_BUSYBOX_REALPATH - default y - help - This is mandatory - -config FREETZ_SHOW_ADVANCED - bool "Show advanced options" - default n - help - Show advanced Options for patching the firmware. This is only useful - for experienced users who really know what they are doing - -if FREETZ_SHOW_ADVANCED - -comment "Replace kernel (currently not available)" - depends on ! FREETZ_REPLACE_KERNEL_AVAILABLE - -config FREETZ_REPLACE_KERNEL_AVAILABLE - bool - depends on \ - ! (FREETZ_TYPE_FON && FREETZ_TYPE_LANG_EN) && \ - ! FREETZ_TYPE_LABOR - default y - -config FREETZ_REPLACE_KERNEL - bool "Replace kernel" - depends on FREETZ_REPLACE_KERNEL_AVAILABLE - select FREETZ_MODULE_fuse if ( \ - FREETZ_AVM_VERSION_7270_04_86 || \ - FREETZ_AVM_VERSION_7270_05_05 || \ - FREETZ_AVM_VERSION_7320_04_86 || \ - FREETZ_AVM_VERSION_7390_04_90 || \ - FREETZ_AVM_VERSION_7390_05_05 \ - ) - select FREETZ_MODULE_jffs2 if FREETZ_AVM_VERSION_7320_04_86 - select FREETZ_MODULE_msdos if FREETZ_AVM_VERSION_7270_05_05 - select FREETZ_MODULE_usbcore if \ - FREETZ_KERNEL_LAYOUT_UR8 && FREETZ_AVM_VERSION_7270_04_86 - select FREETZ_MODULE_vfat if FREETZ_AVM_VERSION_7270_05_05 - default n - help - Replace AVM kernel with self-built kernel. - -endif # FREETZ_SHOW_ADVANCED # - -comment "Hint: Select build toolchain if you want to enable IPv6 support" - depends on \ - ( \ - FREETZ_HAS_AVM_IPV6 || \ - (FREETZ_SHOW_ADVANCED && FREETZ_REPLACE_KERNEL_AVAILABLE) \ - ) && \ - (FREETZ_TARGET_UCLIBC_VERSION_0_9_28 && FREETZ_DOWNLOAD_TOOLCHAIN) - -config FREETZ_TARGET_IPV6_SUPPORT - bool "Enable IPv6 support" - depends on \ - ( \ - FREETZ_HAS_AVM_IPV6 || \ - (FREETZ_SHOW_ADVANCED && FREETZ_REPLACE_KERNEL_AVAILABLE) \ - ) && \ - ! (FREETZ_TARGET_UCLIBC_VERSION_0_9_28 && FREETZ_DOWNLOAD_TOOLCHAIN) - select FREETZ_REPLACE_KERNEL if ! (FREETZ_HAS_AVM_IPV6) - select FREETZ_MODULE_ipv6 if ! (FREETZ_HAS_AVM_IPV6) && FREETZ_REPLACE_KERNEL - select FREETZ_BUSYBOX_IP - select FREETZ_BUSYBOX_FEATURE_IP_ADDRESS - select FREETZ_BUSYBOX_FEATURE_IP_LINK - select FREETZ_BUSYBOX_FEATURE_IP_ROUTE - select FREETZ_BUSYBOX_FEATURE_IP_TUNNEL - default n - help - Copies the ipv6 kernel module to the firmware and enables ipv6 support - in uClibc and busybox. - Shows additional options for busybox and iptables and other packages. - To use IPv6 with Fritz!Box, at least the kernel, ucLibc and busybox - have to be recompiled with IPv6 enabled. - The toolchain will automatically be rebuild to achieve this. - It is also recommended to include the package iptables/ip6tables for - firewall settings. - -config FREETZ_TARGET_REF_4MB - bool - default y if \ - FREETZ_TYPE_2170 || \ - FREETZ_TYPE_300IP_AS_FON || \ - FREETZ_TYPE_FON || \ - FREETZ_TYPE_FON_5010 || \ - FREETZ_TYPE_FON_5050 || \ - FREETZ_TYPE_FON_5140 || \ - FREETZ_TYPE_FON_WLAN || \ - FREETZ_TYPE_FON_WLAN_7050 || \ - FREETZ_TYPE_SPEEDPORT_W501V || \ - FREETZ_TYPE_WLAN_3020 || \ - FREETZ_TYPE_WLAN_3030 || \ - FREETZ_TYPE_WLAN_3130 || \ - FREETZ_TYPE_WLAN_3131 || \ - FREETZ_TYPE_WLAN_3170 - -config FREETZ_TARGET_REF_8MB - bool - default y if \ - FREETZ_TYPE_FON_5124 || \ - FREETZ_TYPE_FON_WLAN_7112 || \ - FREETZ_TYPE_FON_WLAN_7113 || \ - FREETZ_TYPE_FON_WLAN_7141 || \ - FREETZ_TYPE_FON_WLAN_7140 || \ - FREETZ_TYPE_FON_7150 || \ - FREETZ_TYPE_FON_WLAN_7170 || \ - ( FREETZ_TYPE_FON_WLAN_7270_V1 && ! FREETZ_TYPE_72702_72701 ) - -config FREETZ_TARGET_REF_16MB - bool - default y if \ - FREETZ_TYPE_FON_WLAN_7240 || \ - ( FREETZ_TYPE_FON_WLAN_7270_V1 && FREETZ_TYPE_72702_72701 ) || \ - FREETZ_TYPE_FON_WLAN_7270_V2 || \ - FREETZ_TYPE_FON_WLAN_7270_V3 || \ - FREETZ_TYPE_FON_WLAN_7320 || \ - FREETZ_TYPE_FON_WLAN_7330 || \ - FREETZ_TYPE_FON_WLAN_7340 || \ - FREETZ_TYPE_FON_WLAN_7390 || \ - FREETZ_TYPE_FON_WLAN_7570 || \ - FREETZ_TYPE_WLAN_3270 || \ - FREETZ_TYPE_WLAN_3270_V3 - -config FREETZ_TARGET_REF - string "Target ref" if FREETZ_TYPE_CUSTOM - default "4mb" if FREETZ_TARGET_REF_4MB - default "8mb" if FREETZ_TARGET_REF_8MB - default "16mb" if FREETZ_TARGET_REF_16MB - -config FREETZ_KERNEL_REF_4MB - bool - default y if \ - FREETZ_TYPE_2170 || \ - FREETZ_TYPE_300IP_AS_FON || \ - FREETZ_TYPE_FON || \ - FREETZ_TYPE_FON_5010 || \ - FREETZ_TYPE_FON_5050 || \ - FREETZ_TYPE_FON_5140 || \ - FREETZ_TYPE_FON_WLAN || \ - FREETZ_TYPE_FON_WLAN_7050 || \ - FREETZ_TYPE_SPEEDPORT_W501V || \ - FREETZ_TYPE_WLAN_3020 || \ - FREETZ_TYPE_WLAN_3030 || \ - FREETZ_TYPE_WLAN_3130 || \ - FREETZ_TYPE_WLAN_3131 || \ - FREETZ_TYPE_WLAN_3170 - -config FREETZ_KERNEL_REF_8MB - bool - default y if \ - FREETZ_TYPE_FON_5124 || \ - FREETZ_TYPE_FON_WLAN_7112 || \ - FREETZ_TYPE_FON_WLAN_7113 || \ - FREETZ_TYPE_FON_WLAN_7141 || \ - FREETZ_TYPE_FON_WLAN_7140 || \ - FREETZ_TYPE_FON_7150 || \ - FREETZ_TYPE_FON_WLAN_7170 || \ - (FREETZ_TYPE_FON_WLAN_7270_V1 && ! FREETZ_TYPE_72702_72701) - -config FREETZ_KERNEL_REF_16MB - bool - default y if \ - FREETZ_TYPE_FON_WLAN_7240 || \ - (FREETZ_TYPE_FON_WLAN_7270_V1 && FREETZ_TYPE_72702_72701) || \ - FREETZ_TYPE_FON_WLAN_7270_V2 || \ - FREETZ_TYPE_FON_WLAN_7270_V3 || \ - FREETZ_TYPE_FON_WLAN_7320 || \ - FREETZ_TYPE_FON_WLAN_7330 || \ - FREETZ_TYPE_FON_WLAN_7340 || \ - FREETZ_TYPE_FON_WLAN_7390 || \ - FREETZ_TYPE_FON_WLAN_7570 || \ - FREETZ_TYPE_WLAN_3270 || \ - FREETZ_TYPE_WLAN_3270_V3 - -config FREETZ_KERNEL_REF - string "Kernel ref" if FREETZ_TYPE_CUSTOM - default "4mb" if FREETZ_KERNEL_REF_4MB - default "8mb" if FREETZ_KERNEL_REF_8MB - default "16mb" if FREETZ_KERNEL_REF_16MB - -config FREETZ_KERNEL_MTD_SIZE - int "Kernel (64K blocks)" if FREETZ_TYPE_CUSTOM - default 119 if \ - FREETZ_TYPE_FON_5124 || \ - FREETZ_TYPE_FON_7150 || \ - FREETZ_TYPE_FON_WLAN_7112 || \ - FREETZ_TYPE_FON_WLAN_7113 || \ - FREETZ_TYPE_FON_WLAN_7140 || \ - FREETZ_TYPE_FON_WLAN_7141 || \ - (FREETZ_TYPE_FON_WLAN_7170 && ! FREETZ_TYPE_3170_7170) || \ - (FREETZ_TYPE_FON_WLAN_7270_V1 && ! FREETZ_TYPE_72702_72701) || \ - FREETZ_TYPE_7270_7270 - default 122 if \ - FREETZ_TYPE_FON_WLAN_7570_IAD && ! FREETZ_REPLACE_KERNEL - default 238 if \ - FREETZ_TYPE_FON_WLAN_7340 || \ - FREETZ_TYPE_FON_WLAN_7390 - default 244 if \ - FREETZ_TYPE_FON_WLAN_7570_IAD && FREETZ_REPLACE_KERNEL - default 246 if \ - FREETZ_TYPE_FON_WLAN_7240 || \ - (FREETZ_TYPE_FON_WLAN_7270_V1 && FREETZ_TYPE_72702_72701) || \ - FREETZ_TYPE_FON_WLAN_7270_V2 || \ - FREETZ_TYPE_FON_WLAN_7270_V3 || \ - FREETZ_TYPE_FON_WLAN_7320 || \ - FREETZ_TYPE_FON_WLAN_7330 || \ - (FREETZ_TYPE_FON_WLAN_7570 && ! FREETZ_TYPE_FON_WLAN_7570_IAD) || \ - FREETZ_TYPE_WLAN_3270 || \ - FREETZ_TYPE_WLAN_3270_V3 - default 59 - help - Number of 64K blocks in the kernel mtd device. - -config FREETZ_HAS_AVM_AURA_USB - bool "Has remote USB connection (AURA = AVM USB Remote-Architcture)" if FREETZ_TYPE_CUSTOM - select FREETZ_REMOVE_AURA_USB if ! FREETZ_HAS_USB_HOST - default y if \ - FREETZ_HAS_USB_HOST || \ - FREETZ_TYPE_SPEEDPORT_W701V_7170 || \ - FREETZ_TYPE_7112_7170 || \ - FREETZ_TYPE_7113_7170 - default n - help - Select this if your original firmware has an aura-usb-daemon (remote USB - connection, USB-Fernanschluss) - -config FREETZ_HAS_AVM_MINID - bool "Has mini-daemon (minid)" if FREETZ_TYPE_CUSTOM - select FREETZ_REMOVE_MINID if \ - FREETZ_TYPE_7113_7170 || \ - FREETZ_TYPE_7112_7170 || \ - FREETZ_TYPE_3170_7170 || \ - FREETZ_TYPE_SPEEDPORT_W701V_7170 - default y if \ - FREETZ_TYPE_FON_WLAN_7141 || \ - FREETZ_TYPE_FON_WLAN_7170 || \ - FREETZ_TYPE_FON_WLAN_7240 || \ - FREETZ_TYPE_FON_WLAN_7270_V2 || \ - FREETZ_TYPE_FON_WLAN_7270_V3 || \ - FREETZ_TYPE_WLAN_3270 || \ - FREETZ_TYPE_WLAN_3270_V3 - default n - help - Select this if your original firmware has a mini-daemon (minid) - -config FREETZ_HAS_AVM_NTFS - bool "Has AVM NTFS" if FREETZ_TYPE_CUSTOM - default y if \ - FREETZ_TYPE_FON_WLAN_7240 || \ - FREETZ_TYPE_FON_WLAN_7270_V2 || \ - FREETZ_TYPE_FON_WLAN_7270_V3 || \ - FREETZ_TYPE_FON_WLAN_7320 || \ - FREETZ_TYPE_FON_WLAN_7330 || \ - FREETZ_TYPE_FON_WLAN_7390 || \ - FREETZ_TYPE_FON_WLAN_7570 || \ - FREETZ_TYPE_WLAN_3270 || \ - FREETZ_TYPE_WLAN_3270_V3 - default n - help - Select this if your original firmware has ntfs support. - -config FREETZ_HAS_AVM_IPV6 - bool "Has AVM IPv6" if FREETZ_TYPE_CUSTOM - select FREETZ_TARGET_IPV6_SUPPORT - default y if \ - FREETZ_TYPE_FON_WLAN_7240 || \ - FREETZ_TYPE_FON_WLAN_7270_V2 || \ - FREETZ_TYPE_FON_WLAN_7270_V3 || \ - FREETZ_TYPE_FON_WLAN_7320 || \ - FREETZ_TYPE_FON_WLAN_7330 || \ - FREETZ_TYPE_FON_WLAN_7340 || \ - FREETZ_TYPE_FON_WLAN_7390 || \ - FREETZ_TYPE_FON_WLAN_7570 || \ - FREETZ_TYPE_WLAN_3270 || \ - FREETZ_TYPE_WLAN_3270_V3 - default n - help - Select this if your original firmware has IPv6 support. - -config FREETZ_HAS_AVM_WEBDAV - bool "Has AVM WebDAV" if FREETZ_TYPE_CUSTOM - default y if \ - FREETZ_TYPE_FON_WLAN_7240 || \ - FREETZ_TYPE_FON_WLAN_7270 || \ - FREETZ_TYPE_FON_WLAN_7320 || \ - FREETZ_TYPE_FON_WLAN_7330 || \ - FREETZ_TYPE_FON_WLAN_7390 || \ - FREETZ_TYPE_FON_WLAN_7570 || \ - FREETZ_TYPE_WLAN_3270 || \ - FREETZ_TYPE_WLAN_3270_V3 - default n - help - Select this if your original firmware has WebDAV support. - -config FREETZ_HAS_AVM_INETD - bool "Has AVM inetd" if FREETZ_TYPE_CUSTOM - select FREETZ_PACKAGE_INETD - default y if \ - FREETZ_TYPE_WLAN_3270 || \ - FREETZ_TYPE_WLAN_3270_V3 || \ - FREETZ_TYPE_FON_WLAN_7170 || \ - FREETZ_TYPE_FON_WLAN_7240 || \ - FREETZ_TYPE_FON_WLAN_7270 || \ - FREETZ_TYPE_FON_WLAN_7320 || \ - FREETZ_TYPE_FON_WLAN_7330 || \ - FREETZ_TYPE_FON_WLAN_7340 || \ - FREETZ_TYPE_FON_WLAN_7390 || \ - FREETZ_TYPE_FON_WLAN_7570 - default n - help - Select this if your original firmware has inetd support. - -config FREETZ_HAS_AVM_EXT3 - bool "Has AVM ext3 built into the kernel" if FREETZ_TYPE_CUSTOM - default y if \ - FREETZ_TYPE_FON_WLAN_7320 || \ - FREETZ_TYPE_FON_WLAN_7330 || \ - FREETZ_TYPE_FON_WLAN_7270_V2 || \ - FREETZ_TYPE_FON_WLAN_7270_V3 || \ - FREETZ_TYPE_FON_WLAN_7390 - default n - help - Select this if your original firmware has ext3 support into the kernel. - -config FREETZ_HAS_AVM_TR069 - bool "Has AVM tr069" if FREETZ_TYPE_CUSTOM - default y if \ - FREETZ_TYPE_300IP_AS_FON || \ - FREETZ_TYPE_FON || \ - FREETZ_TYPE_FON_5124 || \ - FREETZ_TYPE_FON_WLAN || \ - FREETZ_TYPE_FON_WLAN_7050 || \ - FREETZ_TYPE_FON_WLAN_7113 || \ - FREETZ_TYPE_FON_WLAN_7140 || \ - FREETZ_TYPE_FON_WLAN_7141 || \ - FREETZ_TYPE_FON_7150 || \ - FREETZ_TYPE_FON_WLAN_7170 || \ - FREETZ_TYPE_FON_WLAN_7240 || \ - FREETZ_TYPE_FON_WLAN_7270 || \ - FREETZ_TYPE_FON_WLAN_7320 || \ - FREETZ_TYPE_FON_WLAN_7330 || \ - FREETZ_TYPE_FON_WLAN_7340 || \ - FREETZ_TYPE_FON_WLAN_7390 || \ - FREETZ_TYPE_FON_WLAN_7570 || \ - FREETZ_TYPE_WLAN_3020 || \ - FREETZ_TYPE_WLAN_3270 || \ - FREETZ_TYPE_WLAN_3270_V3 - default n - help - Select this if your original firmware has tr069 support (libtr069, libtr064). - -config FREETZ_HAS_CHRONYD - bool "Has chronyd" if FREETZ_TYPE_CUSTOM - default y if \ - FREETZ_TYPE_WLAN_3270 || \ - FREETZ_TYPE_WLAN_3270_V3 || \ - FREETZ_TYPE_FON_WLAN_7240 || \ - FREETZ_TYPE_FON_WLAN_7270 || \ - FREETZ_TYPE_FON_WLAN_7320 || \ - FREETZ_TYPE_FON_WLAN_7330 || \ - FREETZ_TYPE_FON_WLAN_7340 || \ - FREETZ_TYPE_FON_WLAN_7390 || \ - FREETZ_TYPE_FON_WLAN_7570 - default n - help - Select this if you have a box with chronyd. - -config FREETZ_HAS_DECT - bool "Has DECT" if FREETZ_TYPE_CUSTOM - default y if \ - FREETZ_TYPE_FON_7150 || \ - FREETZ_TYPE_FON_WLAN_7240 || \ - FREETZ_TYPE_FON_WLAN_7270 || \ - FREETZ_TYPE_FON_WLAN_7320 || \ - FREETZ_TYPE_FON_WLAN_7330 || \ - FREETZ_TYPE_FON_WLAN_7340 || \ - FREETZ_TYPE_FON_WLAN_7390 || \ - FREETZ_TYPE_FON_WLAN_7570 || \ - FREETZ_TYPE_SPEEDPORT_W900V_7170 - default n - help - Select this if you have a box with DECT. - -config FREETZ_HAS_OPENSSL_LIBS - bool "Has libssl" if FREETZ_TYPE_CUSTOM - default n if \ - FREETZ_TYPE_300IP_AS_FON || \ - FREETZ_TYPE_FON_5010 || \ - FREETZ_TYPE_FON_5050 || \ - FREETZ_TYPE_FON_WLAN || \ - FREETZ_TYPE_FON_WLAN_7050 || \ - FREETZ_TYPE_FON_WLAN_7140 || \ - FREETZ_TYPE_SPEEDPORT_W501V || \ - FREETZ_TYPE_WLAN_3020 || \ - FREETZ_TYPE_WLAN_3030 - default y - help - Select this if you have a box with AVM libcrypto and libssl. - -config FREETZ_HAS_LSOF - bool "Has lsof" if FREETZ_TYPE_CUSTOM - default y if \ - FREETZ_TYPE_FON_WLAN_7240 || \ - FREETZ_TYPE_FON_WLAN_7270_V2 || \ - FREETZ_TYPE_FON_WLAN_7270_V3 || \ - FREETZ_TYPE_FON_WLAN_7320 || \ - FREETZ_TYPE_FON_WLAN_7330 || \ - FREETZ_TYPE_FON_WLAN_7340 || \ - FREETZ_TYPE_FON_WLAN_7390 || \ - FREETZ_TYPE_WLAN_3270 || \ - FREETZ_TYPE_WLAN_3270_V3 - default n - help - Select this if you have a box with lsof binary. - -config FREETZ_HAS_NAS - bool "Has NAS" if FREETZ_TYPE_CUSTOM - select FREETZ_BUSYBOX_TAR_OLDGNU_COMPATIBILITY - default y if \ - ( \ - FREETZ_TYPE_FON_WLAN_7240 || \ - FREETZ_TYPE_FON_WLAN_7270_V2 || \ - FREETZ_TYPE_FON_WLAN_7270_V3 || \ - FREETZ_TYPE_FON_WLAN_7320 || \ - FREETZ_TYPE_FON_WLAN_7330 || \ - FREETZ_TYPE_FON_WLAN_7340 || \ - FREETZ_TYPE_FON_WLAN_7390 || \ - FREETZ_TYPE_WLAN_3270 || \ - FREETZ_TYPE_WLAN_3270_V3 \ - ) - default n - help - Select this if you have a box with NAS support. - -config FREETZ_HAS_PHONE - bool "Has Phone" if FREETZ_TYPE_CUSTOM - default n if \ - FREETZ_TYPE_2170 || \ - FREETZ_TYPE_WLAN_3020 || \ - FREETZ_TYPE_WLAN_3030 || \ - FREETZ_TYPE_WLAN_3130 || \ - FREETZ_TYPE_WLAN_3131 || \ - FREETZ_TYPE_WLAN_3170 || \ - FREETZ_TYPE_WLAN_3270 || \ - FREETZ_TYPE_WLAN_3270_V3 - default y - help - Select this if you have a box with phone support. - -config FREETZ_HAS_STRACE - bool "Has strace" if FREETZ_TYPE_CUSTOM - default y if \ - FREETZ_TYPE_FON_WLAN_7240 || \ - FREETZ_TYPE_FON_WLAN_7270_V2 || \ - FREETZ_TYPE_FON_WLAN_7270_V3 || \ - FREETZ_TYPE_FON_WLAN_7320 || \ - FREETZ_TYPE_FON_WLAN_7330 || \ - FREETZ_TYPE_FON_WLAN_7340 || \ - FREETZ_TYPE_FON_WLAN_7390 || \ - FREETZ_TYPE_WLAN_3270 || \ - FREETZ_TYPE_WLAN_3270_V3 - default n - help - Select this if you have a box with strace binary. - -config FREETZ_HAS_TAM - bool "Has TAM" if FREETZ_TYPE_CUSTOM - default y if \ - FREETZ_TYPE_FON_7150 || \ - FREETZ_TYPE_FON_WLAN_7141 || \ - FREETZ_TYPE_FON_WLAN_7170 || \ - FREETZ_TYPE_FON_WLAN_7240 || \ - FREETZ_TYPE_FON_WLAN_7270 || \ - FREETZ_TYPE_FON_WLAN_7320 || \ - FREETZ_TYPE_FON_WLAN_7330 || \ - FREETZ_TYPE_FON_WLAN_7340 || \ - FREETZ_TYPE_FON_WLAN_7390 || \ - FREETZ_TYPE_FON_WLAN_7570 - default n - help - Select this if you have a box with TAM (Telephone Answering Machine) support. - -config FREETZ_HAS_UDEV - bool "udev" if FREETZ_TYPE_CUSTOM - default y if \ - FREETZ_TYPE_FON_WLAN_7240 || \ - FREETZ_TYPE_FON_WLAN_7270_V2 || \ - FREETZ_TYPE_FON_WLAN_7270_V3 || \ - FREETZ_TYPE_FON_WLAN_7320 || \ - FREETZ_TYPE_FON_WLAN_7330 || \ - FREETZ_TYPE_FON_WLAN_7340 || \ - FREETZ_TYPE_FON_WLAN_7390 || \ - FREETZ_TYPE_WLAN_3270 || \ - FREETZ_TYPE_WLAN_3270_V3 - default n - help - Select this if you have a box with udev. - -config FREETZ_HAS_USB_CLIENT - bool "USB client" if FREETZ_TYPE_CUSTOM - default y if \ - FREETZ_TYPE_2170 || \ - FREETZ_TYPE_300IP_AS_FON || \ - FREETZ_TYPE_FON || \ - FREETZ_TYPE_FON_5050 || \ - FREETZ_TYPE_FON_WLAN || \ - FREETZ_TYPE_FON_WLAN_7050 || \ - FREETZ_TYPE_WLAN_3020 || \ - FREETZ_TYPE_WLAN_3030 || \ - FREETZ_TYPE_WLAN_3131 || \ - FREETZ_TYPE_WLAN_3170 - default n - help - Select this if you have a box with USB. - -config FREETZ_HAS_USB_HOST - bool "USB host" if FREETZ_TYPE_CUSTOM - default n if \ - FREETZ_TYPE_300IP_AS_FON || \ - FREETZ_TYPE_FON || \ - FREETZ_TYPE_FON_5010 || \ - FREETZ_TYPE_FON_5050 || \ - FREETZ_TYPE_FON_5140 || \ - FREETZ_TYPE_FON_WLAN || \ - FREETZ_TYPE_FON_WLAN_7050 || \ - FREETZ_TYPE_FON_WLAN_7112 || \ - FREETZ_TYPE_7112_7170 || \ - FREETZ_TYPE_FON_WLAN_7113 || \ - FREETZ_TYPE_7113_7170 || \ - FREETZ_TYPE_WLAN_3020 || \ - FREETZ_TYPE_WLAN_3030 || \ - FREETZ_TYPE_SINUS_W500V_7150 || \ - FREETZ_TYPE_SPEEDPORT_W501V || \ - FREETZ_TYPE_SPEEDPORT_W701V_7170 - default y - help - Select this if your USB port is a host adapter. - -config FREETZ_HAS_USB_HOST_AVM - bool "AVM USB host" if FREETZ_TYPE_CUSTOM - depends on FREETZ_HAS_USB_HOST - default y if \ - FREETZ_TYPE_2170 || \ - FREETZ_TYPE_FON_5124 || \ - FREETZ_TYPE_FON_7150 || \ - FREETZ_TYPE_FON_WLAN_7141 || \ - FREETZ_TYPE_FON_WLAN_7170 || \ - FREETZ_TYPE_WLAN_3130 || \ - FREETZ_TYPE_WLAN_3131 || \ - FREETZ_TYPE_WLAN_3170 - default n - help - Select this if you have a box with AVM USB host. - -config FREETZ_HAS_AVM_E2FSPROGS - bool "Has AVM e2fsprogs files" if FREETZ_TYPE_CUSTOM - default y if\ - FREETZ_TYPE_FON_WLAN_7240 || \ - FREETZ_TYPE_FON_WLAN_7270_V2 || \ - FREETZ_TYPE_FON_WLAN_7270_V3 || \ - FREETZ_TYPE_FON_WLAN_7340 || \ - FREETZ_TYPE_FON_WLAN_7390 || \ - FREETZ_TYPE_WLAN_3270 || \ - FREETZ_TYPE_WLAN_3270_V3 - default n - help - Select this if you have a firmware with blkid, fsck and mkfs. - -config FREETZ_HAS_WLAN - bool "Has WLAN" if FREETZ_TYPE_CUSTOM - default n if \ - FREETZ_TYPE_2170 || \ - FREETZ_TYPE_300IP_AS_FON || \ - FREETZ_TYPE_FON || \ - FREETZ_TYPE_FON_5010 || \ - FREETZ_TYPE_FON_5050 || \ - FREETZ_TYPE_FON_5124 || \ - FREETZ_TYPE_FON_5140 - default y - help - Select this if you have a box with WLAN. - -comment "Mod ------------------------------------" - -choice - prompt "Freetz Language" - default FREETZ_LANG_DE if FREETZ_TYPE_LANG_DE - default FREETZ_LANG_DE if FREETZ_TYPE_LANG_A_CH - default FREETZ_LANG_EN if FREETZ_TYPE_LANG_EN - - config FREETZ_LANG_DE - bool "de - deutsch" - - config FREETZ_LANG_EN - bool "en - english" - -endchoice # "Freetz Language" # - -config FREETZ_LANG_STRING - string - default "de" if FREETZ_LANG_DE - default "en" if FREETZ_LANG_EN - -menu "Patches" - -# INCLUDE_BEGIN patches/Config.in -comment "Web menu patches -----------------------" - -config FREETZ_PATCH_VCC - bool "Patch 2nd VCC" - depends on FREETZ_HAS_PHONE && FREETZ_TYPE_LANG_DE - default n - help - Patches the setting for 2nd VCC into web menu. It also adds two additional - settings (PCR & SCR) not available in the original AVM firmware. - - Please also note that it is not possible to change the value of traffic_class - setting via the web-interface. You have to do it some other way (e.g. using - FBEditor or nvi ar7.cfg). - - Warning: Please read up on what each VCC setting means before setting/changing it. - Besides not working wrong values may cause additional costs for you as your provider - may treat it as simultaneous dial-in attempts (Doppeleinwahl). - - The correct values for an 1&1-Komplettanschluss are: - VPI = 1; - VCI = 35; - traffic_class = atm_traffic_class_CBR; - pcr = 603; - scr = 0; - -config FREETZ_PATCH_ATA - bool "Patch ATA" - depends on \ - FREETZ_TYPE_SPEEDPORT_W501V - default n - help - Patches the ATA mode configuration pages into the web menu. - -config FREETZ_PATCH_ENUM - bool "Patch enum" - depends on \ - FREETZ_TYPE_LANG_DE && \ - ( \ - FREETZ_TYPE_FON || \ - FREETZ_TYPE_300IP_AS_FON || \ - FREETZ_TYPE_FON_5050 || \ - FREETZ_TYPE_FON_WLAN || \ - FREETZ_TYPE_FON_WLAN_7050 || \ - FREETZ_TYPE_FON_WLAN_7140 \ - ) - default n - help - Patches the enum configuration pages into the web menu. - -config FREETZ_PATCH_DSL_EXPERT - bool -# bool "Patch extended DSL settings" - depends on \ - ! FREETZ_TYPE_LABOR_DSL && \ - ! FREETZ_REMOVE_DSLD && \ - FREETZ_TYPE_LANG_DE && \ - ( \ - FREETZ_TYPE_FON_WLAN_7170 || \ - FREETZ_TYPE_FON_WLAN_7240 || \ - FREETZ_TYPE_FON_WLAN_7270 || \ - FREETZ_TYPE_FON_WLAN_7320 \ - ) - default n - help - Patches the extended dsl-settings from labor-dsl into all-in-one-firmwares. - -config FREETZ_ADD_REGEXT_GUI - bool "Patch GUI to enable external SIP connections" - depends on \ - FREETZ_TYPE_FON_WLAN_7570 || \ - ( \ - FREETZ_TYPE_FON_WLAN_7170 || \ - FREETZ_TYPE_FON_WLAN_7240 || \ - FREETZ_TYPE_FON_WLAN_7270 || \ - FREETZ_TYPE_FON_WLAN_7390 \ - ) && FREETZ_TYPE_LANG_DE - default n - help - Patches the WebUI and add a checkbox to enable setting "reg_from_outside" in the voip.conf. - -#config FREETZ_PATCH_INTERNATIONAL -# bool "Patch international" -# depends on FREETZ_HAS_PHONE && FREETZ_TYPE_LANG_DE -# default y -# help -# Reveals some options from the international firmware in the web menu. - -config FREETZ_PATCH_ALARMCLOCK - bool "Patch third alarm-clock" - depends on ( \ - FREETZ_TYPE_FON_WLAN_7150 || \ - FREETZ_TYPE_FON_WLAN_7112 || \ - FREETZ_TYPE_FON_WLAN_7141 || \ - (FREETZ_TYPE_FON_WLAN_7170 && FREETZ_TYPE_LANG_DE) || \ - FREETZ_TYPE_FON_WLAN_7270_V1 || \ - FREETZ_TYPE_FON_WLAN_7320 || \ - FREETZ_TYPE_FON_WLAN_7570 \ - ) - default n - help - Adds a third alarm-clock to AVM-Webinterface - -config FREETZ_PATCH_SIGNED - bool "Patch web menu signed message" - default n - help - Hides the "unsupported changes" message from the web interface. - -if FREETZ_HAS_USB_HOST -comment "USB storage patches --------------------" - -config FREETZ_PATCH_FREETZMOUNT - bool "FREETZMOUNT: Patch AVMs hotplug scripts, USB storage names, ..." - select FREETZ_USBSTORAGE_AUTOMOUNT - select FREETZ_BUSYBOX_BLKID if FREETZ_REMOVE_AVM_E2FSPROGS || ! FREETZ_HAS_AVM_E2FSPROGS - select FREETZ_BUSYBOX_BLKID_TYPE if FREETZ_REMOVE_AVM_E2FSPROGS || ! FREETZ_HAS_AVM_E2FSPROGS - select FREETZ_BUSYBOX_VOLUMEID - default y - help - 1. Replaces and deselects usb-storage patch. - - The names of USB storage directories can be defined by WebIF (default uStorXY) (or by volume LABEL). - 2. Replaces and deselects autorun.sh/autoend.sh patch. - - autorun/autoend behaviour can be activated/deactivated via WebIF. - - autorun/autoend are useful to start/terminate applications located on USB devices, eg - apache, samba or even swapfiles, after connecting or before disconnecting of USB devices. - 3. Auto-mounted USB storage devices will be fully accessible, eg it is now possible to put - user home directories for (e.g. for FTP) on a FAT32-formatted partition and permit shell - and FTP users to actually write to their own home directories. - 4. Avoid deleting whole filesystems on USB devices. - 5. Enhanced behaviour during mounting and unmounting. - 6. Provides mount-by-label feature. - - It is highly recommended to select this patch. - -config FREETZ_USBSTORAGE_AUTOMOUNT - bool "Automount filesystems" - depends on FREETZ_PATCH_FREETZMOUNT - default y - help - The filesystems ext2, ext3, ext4, fat, hfs, hfs+, ntfs and reiserfs and swap are mounted - automatically. Detection is done by blkid utility . It depends on the original firmware - which of the following points you have to select. - -if FREETZ_USBSTORAGE_AUTOMOUNT -config FREETZ_AUTOMOUNT_EXT2 - bool "ext2" - select FREETZ_BUSYBOX_VOLUMEID_EXT - select FREETZ_MODULE_ext2 - default n - help - This adds ext2 module to your firmware. - -config FREETZ_AUTOMOUNT_EXT3 - bool "ext3" - select FREETZ_BUSYBOX_VOLUMEID_EXT - select FREETZ_MODULE_ext3 if ! FREETZ_HAS_AVM_EXT3 - default n - help - This adds ext3 module to your firmware. - -config FREETZ_AUTOMOUNT_EXT4 - bool "ext4" - depends on FREETZ_KERNEL_VERSION_2_6_28 || \ - FREETZ_KERNEL_VERSION_2_6_32 - select FREETZ_BUSYBOX_VOLUMEID_EXT - select FREETZ_MODULE_ext4 - default n - help - This adds ext4 module to your firmware. - -config FREETZ_AUTOMOUNT_FAT - bool "fat" - select FREETZ_BUSYBOX_VOLUMEID_FAT - default n - help - This enables detection of fat partitions. - -config FREETZ_AUTOMOUNT_HFS - bool "HFS" - select FREETZ_BUSYBOX_VOLUMEID_HFS - select FREETZ_MODULE_hfs - default n - help - This adds hfs module to your firmware. - -config FREETZ_AUTOMOUNT_HFS_PLUS - bool "HFS+" - select FREETZ_BUSYBOX_VOLUMEID_HFS - select FREETZ_MODULE_hfsplus - default n - help - This adds hfs+ module to your firmware. - -config FREETZ_AUTOMOUNT_LUKS - bool "luks" - select FREETZ_BUSYBOX_VOLUMEID_LUKS - default n - help - This enables detection (not mounting) of luks partitions. - -config FREETZ_AUTOMOUNT_NTFS - bool "NTFS" - select FREETZ_PACKAGE_NTFS if ! FREETZ_HAS_AVM_NTFS - select FREETZ_BUSYBOX_VOLUMEID_NTFS - default n - help - This adds ntfs-3g mount helper to your firmware. - -config FREETZ_AUTOMOUNT_REISER_FS - bool "ReiserFS" - select FREETZ_BUSYBOX_VOLUMEID_REISERFS - select FREETZ_MODULE_reiserfs - default n - help - This adds reiserfs module to your firmware. - -config FREETZ_AUTOMOUNT_LINUXSWAP - bool "swap" - select FREETZ_BUSYBOX_VOLUMEID_LINUXSWAP - default n - help - This enables detection of linux-swap partitions. - -endif - -config FREETZ_PATCH_MAXDEVCOUNT - bool "Raise the count of connectable usb device to 9" - default n - help - Use this patch if you would connect more than 3 device to the box - -config FREETZ_PATCH_MULTIPLE_PRINTERS - bool "Add support for multiple printers" - depends on ! FREETZ_REMOVE_PRINTSERV && \ - ( \ - ( FREETZ_TYPE_FON_WLAN_7140 && ! FREETZ_TYPE_LANG_DE ) || \ - FREETZ_TYPE_FON_WLAN_7570 || \ - FREETZ_TYPE_FON_5124 || \ - FREETZ_TYPE_2170 || \ - FREETZ_TYPE_WLAN_3131 || \ - FREETZ_TYPE_WLAN_3170 || \ - FREETZ_TYPE_FON_WLAN_7141 || \ - FREETZ_TYPE_FON_7150 || \ - FREETZ_TYPE_FON_WLAN_7170 || \ - FREETZ_TYPE_FON_WLAN_7270_V1 || \ - FREETZ_TYPE_WLAN_3270 || \ - FREETZ_TYPE_WLAN_3270_V3 \ - ) - # no patch available atm: 7140_DE 2070 3070 3050 3130 - default n - help - Use this patch if you want to use more than one printer. - -endif - -comment "Removal patches ------------------------" - -config FREETZ_REMOVE_ANNEX_A_FIRMWARE - bool "Remove Annex A firmware file" - depends on \ - FREETZ_TYPE_FON_WLAN_7270_V2 || \ - FREETZ_TYPE_FON_WLAN_7270_V3 || \ - FREETZ_TYPE_FON_WLAN_7320 - default n - help - Remove lib/modules/dsp_ur8/ur8-A-dsl.bin. This saves about 400 KB of - uncompressed data size. - -config FREETZ_REMOVE_ANNEX_B_FIRMWARE - bool "Remove Annex B firmware file" - depends on \ - FREETZ_TYPE_FON_WLAN_7240 || \ - FREETZ_TYPE_FON_WLAN_7270 || \ - FREETZ_TYPE_FON_WLAN_7320 - default n - help - Remove lib/modules/dsp_ur8/ur8-B-dsl.bin. This saves about 400 KB of - uncompressed data size. - -menu "Remove v1/v2 piglet file(s)" - depends on FREETZ_SHOW_ADVANCED && \ - ( \ - (FREETZ_TYPE_FON_WLAN_7170 && ! FREETZ_TYPE_ALIEN_HARDWARE) || \ - FREETZ_TYPE_SPEEDPORT_W701V_7170 || \ - FREETZ_TYPE_SPEEDPORT_W900V_7170 || \ - FREETZ_TYPE_IAD_3331_7170 \ - ) - - config FREETZ_REMOVE_PIGLET_V1 - bool "Remove v1 piglet file(s)" - help - The firmware of this model contains double piglet files. Which instance is needed depends - on the hardware version (v1 or v2) of your box. You can safely remove the - unneeded instance. - - Hint: If "echo $HWRevision_BitFileCount" returns "1" you could select this patch. - - - config FREETZ_REMOVE_PIGLET_V2 - bool "Remove v2 piglet file(s)" - help - The firmware of this model contains double piglet files. Which instance is needed depends - on the hardware version (v1 or v2) of your box. You can safely remove the - unneeded instance. - - Hint: If "echo $HWRevision_BitFileCount" returns "" (nothing) you could select this patch. - -endmenu - -comment "WARNING: Both (v1 and v2) piglet files are selected for removal." - depends on \ - FREETZ_REMOVE_PIGLET_V1 && \ - FREETZ_REMOVE_PIGLET_V2 - -menu "Remove ISDN/POTS piglet file(s) (EXPERIMENTAL)" - depends on FREETZ_SHOW_ADVANCED && \ - ( \ - FREETZ_TYPE_FON_5113 || \ - FREETZ_TYPE_FON_WLAN_7113 || \ - FREETZ_TYPE_FON_WLAN_7240 || \ - FREETZ_TYPE_FON_WLAN_7340 || \ - FREETZ_TYPE_5113_7170 || \ - FREETZ_TYPE_7113_7170 \ - ) - - config FREETZ_REMOVE_PIGLET_ISDN - bool "Remove ISDN piglet file(s) (EXPERIMENTAL)" - help - The firmware of this model contains separate piglet files for ISDN and POTS. Depending - on your type of fixed line usage you can safely remove the unneeded bitfile(s). - - Hint: If you are using POTS fixed line you could select this patch. - - - config FREETZ_REMOVE_PIGLET_POTS - bool "Remove POTS piglet file(s) (EXPERIMENTAL)" - help - The firmware of this model contains separate piglet files for ISDN and POTS. Depending - on your type of fixed line usage you can safely remove the unneeded bitfile(s). - - Hint: If you are using ISDN fixed line you could select this patch. - -endmenu - -comment "WARNING: Both (ISDN and POTS) piglet files are selected for removal." - depends on \ - FREETZ_REMOVE_PIGLET_ISDN && \ - FREETZ_REMOVE_PIGLET_POTS - -config FREETZ_REMOVE_ASSISTANT - bool "Remove assistant" - default n - depends on \ - ! ( \ - ( \ - FREETZ_TYPE_FON_5124 || \ - FREETZ_TYPE_FON_WLAN_7140 || \ - FREETZ_TYPE_FON_WLAN_7170 \ - ) \ - && FREETZ_TYPE_LANG_EN \ - ) - help - Removes the installation assistant from the web menu. - -config FREETZ_REMOVE_AURA_USB - bool "Remove remote USB connection (AURA = AVM USB Remote-Architcture)" if FREETZ_SHOW_ADVANCED - default n - depends on FREETZ_HAS_AVM_AURA_USB - help - Remove the aura-usb-daemon (remote USB connection, USB-Fernanschluss) and some - related files. - - This patch only removes the files, not the settings in AVM's web interface. - -config FREETZ_REMOVE_USB_MODULE - bool "Remove avalanche_usb.ko" if FREETZ_SHOW_ADVANCED - depends on FREETZ_HAS_USB_CLIENT - default n - help - Removes avalanche_usb.ko to save 60kB uncompressed space. - -config FREETZ_REMOVE_NAS - bool "Remove AVM NAS Webinterface" - default n - depends on FREETZ_HAS_NAS && FREETZ_TYPE_LANG_DE - help - Removes the AVM NAS Webinterface and internal memory file (saves about 390 KB in compressed image). - -config FREETZ_REMOVE_AVM_VPN - bool "Remove AVM vpn" if FREETZ_SHOW_ADVANCED - default n - depends on \ - FREETZ_TYPE_2170 || \ - FREETZ_TYPE_FON_7150 || \ - (FREETZ_TYPE_FON_WLAN_7170 && FREETZ_TYPE_LANG_DE) || \ - FREETZ_TYPE_FON_WLAN_7240 || \ - FREETZ_TYPE_FON_WLAN_7270 || \ - FREETZ_TYPE_FON_WLAN_7320 || \ - FREETZ_TYPE_FON_WLAN_7330 || \ - FREETZ_TYPE_FON_WLAN_7340 || \ - FREETZ_TYPE_FON_WLAN_7390 || \ - FREETZ_TYPE_FON_WLAN_7570 || \ - FREETZ_TYPE_WLAN_3170 || \ - FREETZ_TYPE_WLAN_3270 || \ - FREETZ_TYPE_WLAN_3270_V3 - - help - Remove AVM's vpn and some other related files - This patch removes the files and related Web UI entrys, but not the - vpn settings. This will save about 120kB compressed size. - -config FREETZ_REMOVE_WEBSRV - bool "Remove AVM web server (replaced by httpd)" - depends on \ - ! FREETZ_TYPE_2170 \ - && ! FREETZ_TYPE_FON_5124 \ - && ! FREETZ_TYPE_FON_5140 \ - && ! FREETZ_TYPE_FON_WLAN_7112 \ - && ! ( FREETZ_TYPE_FON_WLAN_7140 && FREETZ_TYPE_LANG_EN ) \ - && ! ( FREETZ_TYPE_FON_WLAN_7140 && FREETZ_TYPE_LANG_A_CH ) \ - && ! ( FREETZ_TYPE_FON && FREETZ_TYPE_LANG_EN ) \ - && ! ( FREETZ_TYPE_300IP_AS_FON && FREETZ_TYPE_LANG_EN ) \ - && ! ( FREETZ_TYPE_FON_WLAN && FREETZ_TYPE_LANG_EN ) \ - && ! FREETZ_TYPE_FON_WLAN_7141 \ - && ! FREETZ_TYPE_FON_WLAN_7170 \ - && ! FREETZ_TYPE_FON_WLAN_7240 \ - && ! FREETZ_TYPE_FON_WLAN_7270 \ - && ! FREETZ_TYPE_FON_WLAN_7320 \ - && ! FREETZ_TYPE_FON_WLAN_7340 \ - && ! FREETZ_TYPE_FON_WLAN_7390 \ - && ! FREETZ_TYPE_FON_WLAN_7570 \ - && ! FREETZ_TYPE_WLAN_3131 \ - && ! FREETZ_TYPE_WLAN_3170 \ - && ! FREETZ_TYPE_WLAN_3270 \ - && ! FREETZ_TYPE_WLAN_3270_V3 - - default n - help - Patch init scripts so BusyBox's httpd is used instead of AVM's websrv. - The websrv binary will be removed from the firmware image. - - If "Remove UPnP daemon (igdd/upnpd)" patch is also selected and "Integrate - Media Server from USB Labor firmware" is not selected, 'libwebsrv.so' - will also be removed, because only those three binaries use it. - -comment "No brandings available to remove" - depends on \ - FREETZ_TYPE_SPEEDPORT_W501V - -menu "Remove brandings" - depends on \ - ! FREETZ_TYPE_SPEEDPORT_W501V - -comment "avm and tcom branding can't be removed" - depends on \ - FREETZ_TYPE_ALIEN_HARDWARE - -config FREETZ_REMOVE_BRANDING_1und1 - bool "1&1" - depends on \ - FREETZ_TYPE_LANG_DE && \ - ( \ - FREETZ_TYPE_FON || \ - FREETZ_TYPE_FON_5050 || \ - FREETZ_TYPE_FON_5140 || \ - FREETZ_TYPE_FON_WLAN || \ - FREETZ_TYPE_FON_WLAN_7050 || \ - FREETZ_TYPE_FON_WLAN_7112 || \ - FREETZ_TYPE_FON_WLAN_7113 || \ - FREETZ_TYPE_FON_WLAN_7141 || \ - FREETZ_TYPE_FON_WLAN_7170 || \ - FREETZ_TYPE_FON_WLAN_7240 || \ - FREETZ_TYPE_FON_WLAN_7270 || \ - FREETZ_TYPE_FON_WLAN_7320 || \ - FREETZ_TYPE_FON_WLAN_7330 || \ - FREETZ_TYPE_FON_WLAN_7340 || \ - FREETZ_TYPE_FON_WLAN_7390 || \ - FREETZ_TYPE_WLAN_3020 || \ - FREETZ_TYPE_WLAN_3030 || \ - FREETZ_TYPE_WLAN_3130 || \ - FREETZ_TYPE_CUSTOM \ - ) - default n - help - 1&1 branding - - Each branding provides the web UI templates for a certain manufacturer or OEM. - - NOTE: Make sure not to remove the branding corresponding to the one defined - in your box's boot loader environment. It can be determined by calling the - following command from the box's shell prompt: - - echo $(cat /proc/sys/urlader/firmware_version) - -config FREETZ_REMOVE_BRANDING_avm - bool "AVM" - depends on \ - ( \ - FREETZ_TYPE_LANG_A_CH || \ - FREETZ_TYPE_LANG_DE || \ - FREETZ_TYPE_CUSTOM \ - ) \ - && ! FREETZ_TYPE_ALIEN_HARDWARE - default n - help - AVM branding - - Each branding provides the web UI templates for a certain manufacturer or OEM. - - NOTE: Make sure not to remove the branding corresponding to the one defined - in your box's boot loader environment. It can be determined by calling the - following command from the box's shell prompt: - - echo $(cat /proc/sys/urlader/firmware_version) - -config FREETZ_REMOVE_BRANDING_avme - bool "AVM international" - depends on \ - ( \ - FREETZ_TYPE_LANG_EN || \ - FREETZ_TYPE_CUSTOM \ - ) - default n - help - AVM international branding - - Each branding provides the web UI templates for a certain manufacturer or OEM. - - NOTE: Make sure not to remove the branding corresponding to the one defined - in your box's boot loader environment. It can be determined by calling the - following command from the box's shell prompt: - - echo $(cat /proc/sys/urlader/firmware_version) - -config FREETZ_DL_KERNEL_SITE - string "Kernel site" if FREETZ_DL_OVERRIDE - default "ftp.avm.de/develper/opensrc" if FREETZ_AVM_VERSION_04_30 || \ - FREETZ_AVM_VERSION_04_33 || \ - FREETZ_AVM_VERSION_04_40 || \ - FREETZ_AVM_VERSION_04_49 || \ - FREETZ_AVM_VERSION_04_57 || \ - FREETZ_AVM_VERSION_04_67 || \ - FREETZ_AVM_VERSION_04_70 - default "@AVM/fritzbox.fon_wlan_7170/x_misc/opensrc" if FREETZ_AVM_VERSION_04_76 - default "@AVM/fritzbox.fon_wlan_7170/x_misc/opensrc" if FREETZ_AVM_VERSION_04_80 - default "@AVM/fritzbox.fon_wlan_7170/x_misc/opensrc" if FREETZ_AVM_VERSION_04_87 - default "@AVM/fritzbox.fon_wlan_7270_v1/x_misc/opensrc" if FREETZ_AVM_VERSION_7270_04_86 - default "@AVM/fritzbox.fon_wlan_7270_v3/x_misc/opensrc" if FREETZ_AVM_VERSION_7270_05_05 - default "@AVM/fritzbox.fon_wlan_7320/x_misc/opensrc" if FREETZ_AVM_VERSION_7320_04_86 - default "http://gpl.back2roots.org/source/fritzbox" if FREETZ_AVM_VERSION_7390_04_90 - default "@AVM/fritzbox.fon_wlan_7390/x_misc/opensrc" if FREETZ_AVM_VERSION_7390_05_05 - default "@TELEKOM/Speedport/Speedport_W501V" if FREETZ_AVM_VERSION_r7203 - -config FREETZ_DL_KERNEL_SOURCE - string "Kernel source" if FREETZ_DL_OVERRIDE - default "fritzbox7141-source-files-04.30.tar.bz2" if FREETZ_AVM_VERSION_04_30 - default "fritzbox-source-files-04.33.tar.bz2" if FREETZ_AVM_VERSION_04_33 - default "fritzbox-source-files.04.40.tar.bz2" if FREETZ_AVM_VERSION_04_40 - default "fritzbox-source-files-04.49.tar.gz" if FREETZ_AVM_VERSION_04_49 - default "fritzbox-source-files.04.57.tar.gz" if FREETZ_AVM_VERSION_04_57 - default "fritzbox-source-files.04.67.tar.gz" if FREETZ_AVM_VERSION_04_67 - default "fritzbox-source-files-04.70.tar.gz" if FREETZ_AVM_VERSION_04_70 - default "fritzbox7170-source-files-04.76.tar.gz" if FREETZ_AVM_VERSION_04_76 - default "fritzbox7170-source-files-04.80.tar.gz" if FREETZ_AVM_VERSION_04_80 - default "fritzbox7170-source-files-04.87.tar.gz" if FREETZ_AVM_VERSION_04_87 - default "fritzbox7270-source-files-04.86.tar.gz" if FREETZ_AVM_VERSION_7270_04_86 - default "fritzbox-source-files-05.05.tar.gz" if FREETZ_AVM_VERSION_7270_05_05 - default "fritzbox7320-source-files-04.86.tar.gz" if FREETZ_AVM_VERSION_7320_04_86 - default "fritz_box_fon_wlan_7390_source_files.04.91.tar.gz" if FREETZ_AVM_VERSION_7390_04_90 - default "fritz_box_fon_wlan_7390_source_files.05.05.tar.gz" if FREETZ_AVM_VERSION_7390_05_05 - default "GPL-r7203-4mb_26-tar.bz2" if FREETZ_AVM_VERSION_r7203 - -config FREETZ_DL_KERNEL_SOURCE_MD5 - string "MD5 checksum for downloaded Kernel source file" if FREETZ_DL_OVERRIDE - default "1a43eaf94b7989b8cf8e50b2e50c756c" if FREETZ_AVM_VERSION_04_30 - default "99b6a701f9cd09319086c8655fced242" if FREETZ_AVM_VERSION_04_33 - default "008ecd257e584fc5bbf5e276d4b03ff1" if FREETZ_AVM_VERSION_04_40 - default "e6889745b437bde0f5bdb5ada93c913d" if FREETZ_AVM_VERSION_04_49 - default "702f4adf12638bfa34a6b10c0ede4b55" if FREETZ_AVM_VERSION_04_57 - default "ec2c233bb836e822d9018fd41e123a91" if FREETZ_AVM_VERSION_04_67 - default "855d4ad80fc894d9dff52fcaf55d3c12" if FREETZ_AVM_VERSION_04_70 - default "4ffc088502c896c11931ba81536fa0e6" if FREETZ_AVM_VERSION_04_76 - default "6bf92b81b48a3a05efd3aae6c05fe3e2" if FREETZ_AVM_VERSION_04_80 - default "cad33bda041910e2aae01f027465162b" if FREETZ_AVM_VERSION_04_87 - default "55a11af7dcfd617c39e75877045ab468" if FREETZ_AVM_VERSION_7270_04_86 - default "19280ad861a7e88698d41211996c5ac6" if FREETZ_AVM_VERSION_7270_05_05 - default "0e2ddf32808eb329efc4b486c6de0011" if FREETZ_AVM_VERSION_7320_04_86 - default "2cad066e0e57aa3e58bf784b396ee676" if FREETZ_AVM_VERSION_7390_04_90 - default "fbf515bd77f3d3a64a3095889777cc13" if FREETZ_AVM_VERSION_7390_05_05 - default "582c74f0959a687c41c1bcfa599ace9c" if FREETZ_AVM_VERSION_r7203 - -config FREETZ_DL_SITE - string "Firmware site" if FREETZ_DL_OVERRIDE - depends on ! FREETZ_TYPE_LABOR - default "@AVM/fritzbox.2170/firmware/deutsch" if FREETZ_TYPE_2170 - default "@AVM/fritzbox.fon/firmware/deutsch" if (FREETZ_TYPE_300IP_AS_FON || \ - FREETZ_TYPE_FON) && \ - FREETZ_TYPE_LANG_DE - default "@AVM/fritzbox.fon/firmware/english/annex_a" if (FREETZ_TYPE_300IP_AS_FON || \ - FREETZ_TYPE_FON) && \ - FREETZ_TYPE_LANG_EN && \ - FREETZ_TYPE_ANNEX_A - default "@AVM/fritzbox.fon/firmware/english/annex_b" if (FREETZ_TYPE_300IP_AS_FON || \ - FREETZ_TYPE_FON) && \ - FREETZ_TYPE_LANG_EN && \ - FREETZ_TYPE_ANNEX_B - default "@AVM/fritzbox.fon_5010/firmware/deutsch_a-ch" if FREETZ_TYPE_FON_5010 - default "@AVM/fritzbox.fon_5050/firmware" if FREETZ_TYPE_FON_5050 - default "@AVM/fritzbox.fon_5124/firmware/english/annex_a" if FREETZ_TYPE_FON_5124 && \ - FREETZ_TYPE_LANG_EN && \ - FREETZ_TYPE_ANNEX_A - default "@AVM/fritzbox.fon_5124/firmware/english/annex_b" if FREETZ_TYPE_FON_5124 && \ - FREETZ_TYPE_LANG_EN && \ - FREETZ_TYPE_ANNEX_B - default "@AVM/fritzbox.fon_5140/firmware" if FREETZ_TYPE_FON_5140 - default "@AVM/fritzbox.fon_wlan/firmware/deutsch" if FREETZ_TYPE_FON_WLAN && \ - FREETZ_TYPE_LANG_DE - default "@AVM/fritzbox.fon_wlan/firmware/english/annex_a" if FREETZ_TYPE_FON_WLAN && \ - FREETZ_TYPE_LANG_EN && \ - FREETZ_TYPE_ANNEX_A - default "@AVM/fritzbox.fon_wlan/firmware/english/annex_b" if FREETZ_TYPE_FON_WLAN && \ - FREETZ_TYPE_LANG_EN && \ - FREETZ_TYPE_ANNEX_B - default "@AVM/fritzbox.fon_wlan_7050/firmware" if FREETZ_TYPE_FON_WLAN_7050 - default "@AVM/fritzbox.fon_wlan_7112/firmware/deutsch" if FREETZ_TYPE_FON_WLAN_7112 - default "@AVM/fritzbox.fon_wlan_7113/firmware/deutsch" if FREETZ_TYPE_FON_WLAN_7113 && \ - FREETZ_TYPE_LANG_DE - default "@AVM/fritzbox.fon_wlan_7113/firmware/english/annex_a" if FREETZ_TYPE_FON_WLAN_7113 && \ - FREETZ_TYPE_LANG_EN - default "@AVM/fritzbox.fon_wlan_7140/firmware/deutsch" if FREETZ_TYPE_FON_WLAN_7140 && \ - FREETZ_TYPE_LANG_DE - default "@AVM/fritzbox.fon_wlan_7140/firmware/deutsch_a-ch" if FREETZ_TYPE_FON_WLAN_7140 && \ - FREETZ_TYPE_LANG_A_CH - default "@AVM/fritzbox.fon_wlan_7140/firmware/english/annex_a" if FREETZ_TYPE_FON_WLAN_7140 && \ - FREETZ_TYPE_LANG_EN && \ - FREETZ_TYPE_ANNEX_A - default "@AVM/fritzbox.fon_wlan_7140/firmware/english/annex_b" if FREETZ_TYPE_FON_WLAN_7140 && \ - FREETZ_TYPE_LANG_EN && \ - FREETZ_TYPE_ANNEX_B - default "@AVM/fritzbox.fon_wlan_7141/firmware/deutsch" if FREETZ_TYPE_FON_WLAN_7141 - default "@AVM/fritzfon.7150/firmware" if FREETZ_TYPE_FON_7150 - default "@AVM/fritzbox.fon_wlan_7170/firmware/deutsch" if FREETZ_TYPE_FON_WLAN_7170 && \ - FREETZ_TYPE_LANG_DE - default "@AVM/fritzbox.fon_wlan_7170/firmware/deutsch_a-ch" if FREETZ_TYPE_FON_WLAN_7170 && \ - FREETZ_TYPE_LANG_A_CH - default "@AVM/fritzbox.fon_wlan_7170/firmware/english/annex_a" if FREETZ_TYPE_FON_WLAN_7170 && \ - FREETZ_TYPE_LANG_EN && \ - FREETZ_TYPE_ANNEX_A - default "@AVM/fritzbox.fon_wlan_7170/firmware/english/annex_b" if FREETZ_TYPE_FON_WLAN_7170 && \ - FREETZ_TYPE_LANG_EN && \ - FREETZ_TYPE_ANNEX_B - default "@AVM/fritzbox.fon_wlan_7240/firmware/deutsch" if FREETZ_TYPE_FON_WLAN_7240 - default "@AVM/fritzbox.fon_wlan_7270_v1/firmware/deutsch" if ( ( FREETZ_TYPE_FON_WLAN_7270_V1 && \ - ! FREETZ_TYPE_ALIEN_HARDWARE ) || \ - FREETZ_TYPE_72702_72701 ) && \ - FREETZ_TYPE_LANG_DE - default "@AVM/fritzbox.fon_wlan_7270_v2/firmware/deutsch" if ( ( FREETZ_TYPE_FON_WLAN_7270_V2 && \ - ! FREETZ_TYPE_ALIEN_HARDWARE ) || \ - FREETZ_TYPE_7270_7270 ) && \ - ! FREETZ_TYPE_LABOR && \ - FREETZ_TYPE_LANG_DE - default "@AVM/fritzbox.fon_wlan_7270_v2/firmware/english" if ( ( FREETZ_TYPE_FON_WLAN_7270_V2 && \ - ! FREETZ_TYPE_ALIEN_HARDWARE ) || \ - FREETZ_TYPE_7270_7270 ) && \ - FREETZ_TYPE_LANG_EN - default "@AVM/fritzbox.fon_wlan_7270_v3/firmware/deutsch" if ( ( FREETZ_TYPE_FON_WLAN_7270_V3 && \ - ! FREETZ_TYPE_ALIEN_HARDWARE ) || \ - FREETZ_TYPE_7240_7270 ) && \ - ! FREETZ_TYPE_LABOR && \ - FREETZ_TYPE_LANG_DE - default "@AVM/fritzbox.fon_wlan_7270_v3/firmware/english" if ( ( FREETZ_TYPE_FON_WLAN_7270_V3 && \ - ! FREETZ_TYPE_ALIEN_HARDWARE ) || \ - FREETZ_TYPE_7240_7270 ) && \ - FREETZ_TYPE_LANG_EN - default "@AVM/fritzbox.fon_wlan_7320/firmware/deutsch" if FREETZ_TYPE_FON_WLAN_7320 - default "@AVM/fritzbox.fon_wlan_7330/firmware/deutsch" if FREETZ_TYPE_FON_WLAN_7330 - default "@AVM/fritzbox.fon_wlan_7340/firmware/english" if FREETZ_TYPE_FON_WLAN_7340 - default "@AVM/fritzbox.fon_wlan_7390/firmware/deutsch" if FREETZ_TYPE_FON_WLAN_7390 && \ - FREETZ_TYPE_LANG_DE - default "@AVM/fritzbox.fon_wlan_7390/firmware/english" if FREETZ_TYPE_FON_WLAN_7390 && \ - FREETZ_TYPE_LANG_EN - default "@AVM/fritzbox.fon_wlan_7570/firmware/english" if FREETZ_TYPE_FON_WLAN_7570 - default "@AVM/fritzbox.sl_wlan/firmware" if FREETZ_TYPE_WLAN_3020 - default "@AVM/fritzbox.wlan_3030/firmware" if FREETZ_TYPE_WLAN_3030 - default "@AVM/fritzbox.wlan_3130/firmware" if FREETZ_TYPE_WLAN_3130 - default "@AVM/fritzbox.wlan_3131/firmware/deutsch" if FREETZ_TYPE_WLAN_3131 - default "@AVM/fritzbox.wlan_3170/firmware/deutsch" if FREETZ_TYPE_WLAN_3170 - default "@AVM/fritzbox.wlan_3270/firmware/deutsch" if FREETZ_TYPE_WLAN_3270 - default "@AVM/fritzbox.wlan_3270_v3/firmware/deutsch" if FREETZ_TYPE_WLAN_3270_V3 - default "@TELEKOM/Speedport/Speedport_W501V" if FREETZ_TYPE_SPEEDPORT_W501V - default "@AVM/..." if FREETZ_TYPE_CUSTOM - -config FREETZ_DL_SOURCE - string "Firmware source" if FREETZ_DL_OVERRIDE - default "FRITZ.Box_2170.51.04.57.image" if FREETZ_TYPE_2170 - default "fritz.box_fon.06.04.33.image" if (FREETZ_TYPE_300IP_AS_FON || \ - FREETZ_TYPE_FON) && \ - FREETZ_TYPE_LANG_DE - default "fritz.box_fon.annexa.en.06.04.49.image" if (FREETZ_TYPE_300IP_AS_FON || \ - FREETZ_TYPE_FON) && \ - FREETZ_TYPE_LANG_EN && \ - FREETZ_TYPE_ANNEX_A - default "fritz.box_fon.en.06.04.49.image" if (FREETZ_TYPE_300IP_AS_FON || \ - FREETZ_TYPE_FON) && \ - FREETZ_TYPE_LANG_EN && \ - FREETZ_TYPE_ANNEX_B - default "fritz.box_fon_5010.annexa.48.04.43.image" if FREETZ_TYPE_FON_5010 - default "fritz.box_fon_5050.12.04.31.image" if FREETZ_TYPE_FON_5050 - default "FRITZ.Box_Fon_5124.AnnexA.en.57.04.76.image" if FREETZ_TYPE_FON_5124 && \ - FREETZ_TYPE_LANG_EN && \ - FREETZ_TYPE_ANNEX_A - default "FRITZ.Box_Fon_5124.AnnexB.en.56.04.76.image" if FREETZ_TYPE_FON_5124 && \ - FREETZ_TYPE_LANG_EN && \ - FREETZ_TYPE_ANNEX_B - default "FRITZ.Box_Fon_5140.AnnexB.43.04.67.image" if FREETZ_TYPE_FON_5140 - default "fritz.box_fon_wlan.08.04.34.image" if FREETZ_TYPE_FON_WLAN && \ - FREETZ_TYPE_LANG_DE - default "FRITZ.Box_Fon_WLAN.AnnexA.en.08.04.49.image" if FREETZ_TYPE_FON_WLAN && \ - FREETZ_TYPE_LANG_EN && \ - FREETZ_TYPE_ANNEX_A - default "FRITZ.Box_Fon_WLAN.AnnexB.en.08.04.49.image" if FREETZ_TYPE_FON_WLAN && \ - FREETZ_TYPE_LANG_EN && \ - FREETZ_TYPE_ANNEX_B - default "fritz.box_fon_wlan_7050.14.04.33.image" if FREETZ_TYPE_FON_WLAN_7050 - default "FRITZ.Box_Fon_WLAN_7112.87.04.87.image" if FREETZ_TYPE_FON_WLAN_7112 - default "FRITZ.Box_Fon_WLAN_7113.60.04.68.image" if FREETZ_TYPE_FON_WLAN_7113 && \ - FREETZ_TYPE_LANG_DE - default "FRITZ.Box_Fon_WLAN_7113.AnnexA.de-en-es-it-fr.90.04.84.image" if FREETZ_TYPE_FON_WLAN_7113 && \ - FREETZ_TYPE_LANG_EN - default "fritz.box_fon_wlan_7140.annexb.30.04.33.image" if FREETZ_TYPE_FON_WLAN_7140 && \ - FREETZ_TYPE_LANG_DE - default "FRITZ.Box_Fon_WLAN_7140.AnnexA.39.04.76.image" if FREETZ_TYPE_FON_WLAN_7140 && \ - FREETZ_TYPE_LANG_A_CH - default "FRITZ.Box_Fon_WLAN_7140.AnnexA.en.39.04.67.image" if FREETZ_TYPE_FON_WLAN_7140 && \ - FREETZ_TYPE_LANG_EN && \ - FREETZ_TYPE_ANNEX_A - default "FRITZ.Box_Fon_WLAN_7140.AnnexB.en.30.04.67.image" if FREETZ_TYPE_FON_WLAN_7140 && \ - FREETZ_TYPE_LANG_EN && \ - FREETZ_TYPE_ANNEX_B - default "FRITZ.Box_Fon_WLAN_7141.40.04.76.image" if FREETZ_TYPE_FON_WLAN_7141 - default "fritz.fon_7150.annexb.38.04.71.image" if FREETZ_TYPE_FON_7150 - default "FRITZ.Box_Fon_WLAN_7170.29.04.87.image" if FREETZ_TYPE_FON_WLAN_7170 && \ - FREETZ_TYPE_LANG_DE - default "FRITZ.Box_Fon_WLAN_7170.AnnexA.58.04.76.image" if FREETZ_TYPE_FON_WLAN_7170 && \ - FREETZ_TYPE_LANG_A_CH - default "FRITZ.Box_Fon_WLAN_7170.AnnexA.en.58.04.84.image" if FREETZ_TYPE_FON_WLAN_7170 && \ - FREETZ_TYPE_LANG_EN && \ - FREETZ_TYPE_ANNEX_A - default "FRITZ.Box_Fon_WLAN_7170.AnnexB.en.29.04.82.image" if FREETZ_TYPE_FON_WLAN_7170 && \ - FREETZ_TYPE_LANG_EN && \ - FREETZ_TYPE_ANNEX_B - default "FRITZ.Box_Fon_WLAN_7240.73.05.05.image" if FREETZ_TYPE_FON_WLAN_7240 && \ - ! FREETZ_TYPE_LABOR -# default "Labor_FRITZ.Box_Fon_WLAN_7240.73.05.04-20170.image" if FREETZ_TYPE_FON_WLAN_7240 && \ -# FREETZ_TYPE_LABOR_PREVIEW - default "FRITZ.Box_Fon_WLAN_7270_v1.54.04.88.image" if FREETZ_TYPE_FON_WLAN_7270_V1 && \ - ! FREETZ_TYPE_LABOR && \ - FREETZ_TYPE_LANG_DE -# default "Labor_FRITZ.Box_Fon_WLAN_7270_v1.54.04.86-18582.image" if FREETZ_TYPE_FON_WLAN_7270_V1 && \ -# FREETZ_TYPE_LABOR_PREVIEW - default "FRITZ.Box_Fon_WLAN_7270_v2.54.05.05.image" if ( ( FREETZ_TYPE_FON_WLAN_7270_V2 && \ - ! FREETZ_TYPE_ALIEN_HARDWARE ) || \ - FREETZ_TYPE_7270_7270 ) && \ - ! FREETZ_TYPE_LABOR && \ - FREETZ_TYPE_LANG_DE - default "FRITZ.Box_Fon_WLAN_7270_v2_Labor.54.05.07-20870.image" if FREETZ_TYPE_FON_WLAN_7270_V2 && \ - FREETZ_TYPE_LABOR_PREVIEW - default "FRITZ.Box_Fon_WLAN_7270_16.en-de-es-it-fr.54.05.05.image" if ( ( FREETZ_TYPE_FON_WLAN_7270_V2 && \ - ! FREETZ_TYPE_ALIEN_HARDWARE ) || \ - FREETZ_TYPE_7270_7270 ) && \ - FREETZ_TYPE_LANG_EN - default "FRITZ.Box_Fon_WLAN_7270_v3.74.05.05.image" if ( ( FREETZ_TYPE_FON_WLAN_7270_V3 && \ - ! FREETZ_TYPE_ALIEN_HARDWARE ) || \ - FREETZ_TYPE_7240_7270 ) && \ - ! FREETZ_TYPE_LABOR && \ - FREETZ_TYPE_LANG_DE - default "FRITZ.Box_Fon_WLAN_7270_v3.en-de-es-it-fr.74.05.05.image" if ( ( FREETZ_TYPE_FON_WLAN_7270_V3 && \ - ! FREETZ_TYPE_ALIEN_HARDWARE ) || \ - FREETZ_TYPE_7240_7270 ) && \ - FREETZ_TYPE_LANG_EN - default "FRITZ.Box_Fon_WLAN_7270_v3_Labor.74.05.07-20870.image" if ( FREETZ_TYPE_FON_WLAN_7270_V3 || \ - ( FREETZ_TYPE_FON_WLAN_7270 && \ - FREETZ_TYPE_ALIEN_HARDWARE ) ) && \ - FREETZ_TYPE_LABOR_PREVIEW - default "FRITZ.Box_Fon_WLAN_7320.100.04.89.image" if FREETZ_TYPE_FON_WLAN_7320 && \ - ! FREETZ_TYPE_LABOR - default "FRITZ.Box_7330.107.05.06.image" if FREETZ_TYPE_FON_WLAN_7330 - default "FRITZ.Box_Fon_WLAN_7340.en-de-es-it-fr.99.05.05.image" if FREETZ_TYPE_FON_WLAN_7340 - default "FRITZ.Box_Fon_WLAN_7390.84.05.05.image" if FREETZ_TYPE_FON_WLAN_7390 && \ - ! FREETZ_TYPE_LABOR && \ - FREETZ_TYPE_LANG_DE - default "FRITZ.Box_Fon_WLAN_7390.en-de-es-it-fr.84.05.05.image" if FREETZ_TYPE_FON_WLAN_7390 && \ - ! FREETZ_TYPE_LANG_DE - default "FRITZ.Box_Fon_WLAN_7390_Labor.84.05.07-20869.image" if FREETZ_TYPE_FON_WLAN_7390 && \ - FREETZ_TYPE_LABOR_PREVIEW - default "FRITZ.Box_Fon_WLAN_7570_vDSL.en-de-fr.75.04.91.image" if FREETZ_TYPE_FON_WLAN_7570 - default "fritz.box_sl_wlan.09.04.34.image" if FREETZ_TYPE_WLAN_3020 - default "fritz.box_wlan_3030.21.04.34.image" if FREETZ_TYPE_WLAN_3030 - default "fritz.box_wlan_3130.44.04.34.image" if FREETZ_TYPE_WLAN_3130 - default "fritz.box_wlan_3131.50.04.57.image" if FREETZ_TYPE_WLAN_3131 - default "fritz.box_wlan_3170.49.04.58.image" if FREETZ_TYPE_WLAN_3170 - default "fritz.box_wlan_3270.67.05.05.image" if FREETZ_TYPE_WLAN_3270 - default "fritz.box_wlan_3270_v3.96.05.05.image" if FREETZ_TYPE_WLAN_3270_V3 - default "fw_Speedport_W501V_v_28.04.38.image" if FREETZ_TYPE_SPEEDPORT_W501V - default "fritz.box..." if FREETZ_TYPE_CUSTOM - -endmenu # "Toolchain options" # - -endmenu # "Advanced options" # - -# INCLUDE_END Config.in diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Constants.mo b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Constants.mo deleted file mode 100644 index a886277..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Constants.mo +++ /dev/null @@ -1,158 +0,0 @@ -within Modelica; -package Constants - "Library of mathematical constants and constants of nature (e.g., pi, eps, R, sigma)" - - import SI = Modelica.SIunits; - import NonSI = Modelica.SIunits.Conversions.NonSIunits; - - extends Modelica.Icons.Library2; - - // Mathematical constants - final constant Real e=Modelica.Math.exp(1.0); - final constant Real pi=2*Modelica.Math.asin(1.0); // 3.14159265358979; - final constant Real D2R=pi/180 "Degree to Radian"; - final constant Real R2D=180/pi "Radian to Degree"; - - // Machine dependent constants - // (the definition is a temporary fix since not adapted to the - // machine where the Modelica translator is running) - final constant Real eps=1.e-15 "Biggest number such that 1.0 + eps = 1.0"; - final constant Real small=1.e-60 - "Smallest number such that small and -small are representable on the machine"; - final constant Real inf=1.e+60 - "Biggest Real number such that inf and -inf are representable on the machine"; - final constant Integer Integer_inf=2147483647 - "Biggest Integer number such that Integer_inf and -Integer_inf are representable on the machine"; - - // Constants of nature - // (name, value, description from http://physics.nist.gov/cuu/Constants/) - final constant SI.Velocity c=299792458 "Speed of light in vacuum"; - final constant SI.Acceleration g_n=9.80665 - "Standard acceleration of gravity on earth"; - final constant Real G(final unit="m3/(kg.s2)") = 6.6742e-11 - "Newtonian constant of gravitation"; - final constant SI.FaradayConstant F = 9.64853399e4 "Faraday constant, C/mol"; - final constant Real h(final unit="J.s") = 6.6260693e-34 "Planck constant"; - final constant Real k(final unit="J/K") = 1.3806505e-23 "Boltzmann constant"; - final constant Real R(final unit="J/(mol.K)") = 8.314472 "Molar gas constant"; - final constant Real sigma(final unit="W/(m2.K4)") = 5.670400e-8 - "Stefan-Boltzmann constant"; - final constant Real N_A(final unit="1/mol") = 6.0221415e23 - "Avogadro constant"; - final constant Real mue_0(final unit="N/A2") = 4*pi*1.e-7 "Magnetic constant"; - final constant Real epsilon_0(final unit="F/m") = 1/(mue_0*c*c) - "Electric constant"; - final constant NonSI.Temperature_degC T_zero=-273.15 - "Absolute zero temperature"; - - annotation ( - Documentation(info=" -

-This package provides often needed constants from mathematics, machine -dependent constants and constants from nature. The latter constants -(name, value, description) are from the following source: -

- -
-
Peter J. Mohr and Barry N. Taylor (1999):
-
CODATA Recommended Values of the Fundamental Physical Constants: 1998. - Journal of Physical and Chemical Reference Data, Vol. 28, No. 6, 1999 and - Reviews of Modern Physics, Vol. 72, No. 2, 2000. See also http://physics.nist.gov/cuu/Constants/
-
- -

CODATA is the Committee on Data for Science and Technology.

- -
-
Main Author:
-
Martin Otter
- Deutsches Zentrum für Luft und Raumfahrt e. V. (DLR)
- Oberpfaffenhofen
- Postfach 11 16
- D-82230 Weßling
- email: Martin.Otter@dlr.de
-
- - -

-Copyright © 1998-2009, Modelica Association and DLR. -

-

-This Modelica package is free software; it can be redistributed and/or modified -under the terms of the Modelica license, see the license conditions -and the accompanying disclaimer -here. -


- -", revisions=" -
    -
  • Nov 8, 2004 - by Christian Schweiger:
    - Constants updated according to 2002 CODATA values.
  • -
  • Dec 9, 1999 - by Martin Otter:
    - Constants updated according to 1998 CODATA values. Using names, values - and description text from this source. Included magnetic and - electric constant.
  • -
  • Sep 18, 1999 - by Martin Otter:
    - Constants eps, inf, small introduced.
  • -
  • Nov 15, 1997 - by Martin Otter:
    - Realized.
  • -
-"), - Invisible=true, - Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{100, - 100}}), graphics={ - Line( - points={{-34,-38},{12,-38}}, - color={0,0,0}, - thickness=0.5), - Line( - points={{-20,-38},{-24,-48},{-28,-56},{-34,-64}}, - color={0,0,0}, - thickness=0.5), - Line( - points={{-2,-38},{2,-46},{8,-56},{14,-64}}, - color={0,0,0}, - thickness=0.5)}), - Diagram(graphics={ - Rectangle( - extent={{200,162},{380,312}}, - fillColor={235,235,235}, - fillPattern=FillPattern.Solid, - lineColor={0,0,255}), - Polygon( - points={{200,312},{220,332},{400,332},{380,312},{200,312}}, - fillColor={235,235,235}, - fillPattern=FillPattern.Solid, - lineColor={0,0,255}), - Polygon( - points={{400,332},{400,182},{380,162},{380,312},{400,332}}, - fillColor={235,235,235}, - fillPattern=FillPattern.Solid, - lineColor={0,0,255}), - Text( - extent={{210,302},{370,272}}, - lineColor={160,160,164}, - fillColor={0,0,0}, - fillPattern=FillPattern.Solid, - textString="Library"), - Line( - points={{266,224},{312,224}}, - color={0,0,0}, - thickness=1), - Line( - points={{280,224},{276,214},{272,206},{266,198}}, - color={0,0,0}, - thickness=1), - Line( - points={{298,224},{302,216},{308,206},{314,198}}, - color={0,0,0}, - thickness=1), - Text( - extent={{152,412},{458,334}}, - lineColor={255,0,0}, - textString="Modelica.Constants")})); -end Constants; diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/DancingSudoku.lhs b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/DancingSudoku.lhs deleted file mode 100644 index 368ab8e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/DancingSudoku.lhs +++ /dev/null @@ -1,411 +0,0 @@ - A Sukodku solver by Chris Kuklewicz (haskell (at) list (dot) mightyreason (dot) com) - The usual BSD license applies, copyright 2006. - Uploaded to HaskellWiki as DancingSudoku.lhs - - I compile on a powerbook G4 (Mac OS X, ghc 6.4.2) using - ghc -optc-O3 -funbox-strict-fields -O2 --make -fglasgow-exts - - This is a translation of Knuth's GDANCE from dance.w / dance.c - - http://www-cs-faculty.stanford.edu/~uno/preprints.html - http://www-cs-faculty.stanford.edu/~uno/programs.html - http://en.wikipedia.org/wiki/Dancing_Links - - I have an older verison that uses lazy ST to return the solutions on - demand, which was more useful when trying to generate new puzzles to - solve. - -> module Main where - -> import Prelude hiding (read) -> import Control.Monad -> import Control.Monad.Fix -> import Data.Array.IArray -> import Control.Monad.ST.Strict -> import Data.STRef.Strict -> import Data.Char(intToDigit,digitToInt) -> import Data.List(unfoldr,intersperse,inits) - -> new = newSTRef -> {-# INLINE new #-} -> read = readSTRef -> {-# INLINE read #-} -> write = writeSTRef -> {-# INLINE write #-} -> modify = modifySTRef -> {-# INLINE modify #-} - - Data types to prevent mixing different index and value types - -> type A = Int -> newtype R = R A deriving (Show,Read,Eq,Ord,Ix,Enum) -> newtype C = C A deriving (Show,Read,Eq,Ord,Ix,Enum) -> newtype V = V A deriving (Show,Read,Eq,Ord,Ix,Enum) -> newtype B = B A deriving (Show,Read,Eq,Ord,Ix,Enum) - - Sudoku also has block constraints, so we want to look up a block - index in an array: - -> lookupBlock :: Array (R,C) B -> lookupBlock = listArray bb [ toBlock ij | ij <- range bb ] -> where ra :: Array Int B -> ra = listArray (0,pred (rangeSize b)) [B (fst b) .. B (snd b)] -> toBlock (R i,C j) = ra ! ( (div (index b j) 3)+3*(div (index b i) 3) ) - - The values for an unknown location is 'u'. - The bound and range are given by b and rng. And bb is a 2D bound. - -> u = V 0 -- unknown value -> b :: (Int,Int) -> b = (1,9) -- min and max bounds -> rng = enumFromTo (fst b) (snd b) -- list from '1' to '9' -> bb = ((R (fst b),C (fst b)),(R (snd b),C (snd b))) - - A Spec can be turned into a parsed array with ease: - -> type Hint = ((R,C),V) -> newtype Spec = Spec [Hint] deriving (Eq,Show) - -> type PA = Array (R,C) V - -> parse :: Spec -> PA -> parse (Spec parsed) = let acc old new = new -> in accumArray acc u bb parsed - - The dancing links algorithm depends on a sparse 2D node structure. - Each column represents a constraint. Each row represents a Hint. - The number of possible hints is 9x9x9 = 271 - -> type (MutInt st) = (STRef st) Int - - The pointer types: - -> type (NodePtr st) = (STRef st) (Node st) -> type (HeadPtr st) = (STRef st) (Head st) - - The structures is a 2D grid of nodes, with Col's on the top of - columns and a sparse collection of nodes. Note that topNode of Head - is not a strict field. This is because the topNode needs to refer to - the Head, and they are both created monadically. - -> type HeadName = (Int,Int,Int) -- see below for meaning - -> data Head st = Head {headName:: !HeadName -> ,topNode:: (Node st) -- header node for this column -> ,len:: !(MutInt st) -- number of nodes below this head -> ,next,prev:: !(HeadPtr st) -- doubly-linked list -> } - -> data Node st = Node {getHint:: !Hint -> ,getHead:: !(Head st) -- head for the column this node is in -> ,up,down,left,right :: !(NodePtr st) -- two doubly-linked lists -> } - -> instance Eq (Head st) where -> a == b = headName a == headName b - -> instance Eq (Node st) where -> a == b = up a == up b - - To initialize the structures is a bit tedious. Knuth's code reads in - the problem description from a data file and builds the structure - based on that. Rather than short strings, I will use HeadName as the - identifier. - - The columns are (0,4,5) for nodes that put some value in Row 4 Col 5 - (1,2,3) for nodes that put Val 3 in Row 2 and some column - (2,7,4) for nodes that put Val 4 in Col 7 and some row - (3,1,8) for nodes that put Val 8 in some (row,column) in Block 1 - - The first head is (0,0,0) which is the root. The non-root head data - will be put in an array with the HeadName as an index. - -> headNames :: [HeadName] -> headNames = let names = [0,1,2,3] -> in (0,0,0):[ (l,i,j) | l<-names,i<-rng,j<-rng] - - A "row" of left-right linked nodes is a move. It is defined by a - list of head names. - -> type Move = [(Hint,HeadName)] - - Initial hints are enforced by making them the only legal move for - that location. Blank entries with value 'u = V 0' have a move for - all possible values [V 1..V 9]. - -> parseSpec :: Spec -> [Move] -> parseSpec spec = -> let rowsFrom :: Hint -> [Move] -> rowsFrom (rc@(R r,C c),mv@(V v')) = -> if mv == u then [ rsyms v | v <- rng ] -> else [ rsyms v' ] -> where (B b) = lookupBlock ! rc -> rsyms :: A -> Move -> rsyms v = map ( (,) (rc,V v) ) [(0,r,c),(1,r,v),(2,c,v),(3,b,v)] -> in concatMap rowsFrom (assocs (parse spec)) - - mkDList creates doubly linked lists using a monadic smart - constructor and the recursive "mdo" notation as documented at - http://www.haskell.org/ghc/docs/latest/html/users_guide/syntax-extns.html#mdo-notation - http://www.cse.ogi.edu/PacSoft/projects/rmb/ - - For more fun with this, see the wiki page at - http://haskell.org/hawiki/TyingTheKnot - -> mkDList :: (MonadFix m) => (b -> a -> b -> m b) -> [a] -> m b -> mkDList _ [] = error "must have at least one element" -> mkDList mkNode xs = mdo (first,last) <- go last xs first -> return first -> where go prev [] next = return (next,prev) -> go prev (x:xs) next = mdo this <- mkNode prev x rest -> (rest,last) <- go this xs next -> return (this,last) - - toSimple takes a function and a header node and iterates (read . function) - until the header is reached again, but does not return the header - itself. - -> toSingle step header = loop =<< (read . step) header -> where loop y = if header/=y then liftM (y:) (read (step y) >>= loop) -> else return [] -> - - forEach is an optimization of (toSimple step header >>= mapM_ act) - -> forEach step header act = loop =<< (read . step) header -> where loop y = if header/=y then (act y >> (read (step y)) >>= loop) -> else return () - - Now make the root node and all the head nodes. This also exploits mdo: - -> makeHeads :: [HeadName] -> (ST st) (Head st) -> makeHeads names = mkDList makeHead names -> where makeHead before name after = mdo -> ~newTopNode <- liftM4 (Node ((R 0,C 0),V 0) newHead) (new newTopNode) (new newTopNode) -> (new newTopNode) (new newTopNode) -> newHead <- liftM3 (Head name newTopNode) -> (new 0) (new after) (new before) -> return newHead - - The Head nodes will be places in an array for easy lookup while building moves: - -> type HArray st = Array HeadName (Head st) -> hBounds = ((0,1,1),(3,9,9)) -> type Root st = (Head st,HArray st) - - The addMove function creates the (four) nodes that represent a move and adds - them to the data structure. The HArray in Root makes for a fast - lookup of the Head data. - -> addMove :: forall st. (Root st) -> Move -> (ST st) (Node st) -> addMove (_,ha) move = mkDList addNode move -> where addNode :: (Node st) -> (Hint,HeadName) -> (Node st) -> (ST st) (Node st) -> addNode before (hint,name) after = do -> let head = ha ! name -> let below = topNode head -> above <- read (up below) -> newNode <- liftM4 (Node hint head) (new above) (new below) -> (new before) (new after) -> write (down above) newNode -> write (up below) newNode -> modify (len head) succ -> l <- read (len head) -> seq l (return newNode) - - Create the column headers, including the fast lookup array. These - will be resused between puzzles. - -> initHA :: (ST st) (Root st) -> initHA = do -> root <- makeHeads headNames -> heads <- toSingle next root -> let ha = array hBounds (zip (map headName heads) heads) -> return (root,ha) - - Take the Root from initHA and a puzzle Spec and fill in all the Nodes. - -> initRoot :: (Root st) -> Spec -> (ST st) () -> initRoot root spec = do -> let moves = parseSpec spec -> mapM_ (addMove root) moves - - Return the column headers to their condition after initHA - -> resetRoot :: (Root st) -> (ST st) () -> resetRoot (root,ha) = do -> let heads@(first:_) = elems ha -> let resetHead head = do -> write (len head) 0 -> let node = topNode head -> write (down node) node -> write (up node) node -> reset (last:[]) = do -> write (prev root) last -> write (next root) first -> reset (before:xs@(head:[])) = do -> resetHead head -> write (prev head) before -> write (next head) root -> reset xs -> reset (before:xs@(head:after:_)) = do -> resetHead head -> write (prev head) before -> write (next head) after -> reset xs -> reset (root:heads) - - getBest iterates over the unmet constraints (i.e. the Head that are - reachable from root). It locates the one with the lowest number of - possible moves that will solve it, aborting early if it finds 0 or 1 - moves. - -> getBest :: (Head st) -> (ST st) (Maybe (Head st)) -> getBest root = do -> first <- read (next root) -> if first == root then return Nothing -> else do -> let findMin m best head | head == root = return (Just best) -> | otherwise = do -> l <- read (len head) -> if l <= 1 then return (Just head) -> else if l < m then findMin l head =<< read (next head) -> else findMin l best =<< read (next head) -> findMin 10 first first - - The unlink and relink operations are from where Knuth got the name - "dancing links". So long as "a" does not change in between, the - relink call will undo the unlink call. Similarly, the unconver will - undo the changes of cover and unconverOthers will undo coverOthers. - -> unlink :: (a->STRef st a) -> (a->STRef st a) -> a -> (ST st) () -> unlink prev next a = do -> before <- read (prev a) -> after <- read (next a) -> write (next before) after -> write (prev after) before - -> relink :: (a->STRef st a) -> (a->STRef st a) -> a -> (ST st) () -> relink prev next a = do -> before <- read (prev a) -> after <- read (next a) -> write (next before) a -> write (prev after) a - -> cover :: (Head st) -> (ST st) () -> cover head = do -> unlink prev next head -> let eachDown rr = forEach right rr eachRight -> eachRight nn = do -> unlink up down nn -> modify (len $ getHead nn) pred -> forEach down (topNode head) eachDown - -> uncover :: (Head st) -> (ST st) () -> uncover head = do -> let eachUp rr = forEach left rr eachLeft -> eachLeft nn = do -> modify (len $ getHead nn) succ -> relink up down nn -> forEach up (topNode head) eachUp -> relink prev next head - -> coverOthers :: (Node st) -> (ST st) () -> coverOthers node = forEach right node (cover . getHead) - -> uncoverOthers :: (Node st) -> (ST st) () -> uncoverOthers node = forEach left node (uncover . getHead) - - A helper function for gdance: - -> choicesToSpec :: [(Node st)] -> Spec -> choicesToSpec = Spec . (map getHint) - - This is the heart of the algorithm. I have altered it to return only - the first solution, or produce an error if none is found. - - Knuth used several goto links to do what is done below with tail - recursion. - -> gdance :: (Head st) -> (ST st) Spec -- [Spec] -> gdance root = -> let -> forward choices = do -> maybeHead <- getBest root -> case maybeHead of -> Nothing -> if null choices -> then error "No choices in forward" -- return [] -- for [Spec] -> else do -- nextSols <- recover choices -- for [Spec] -> return $ (choicesToSpec choices) -- :nextSols -- for [Spec] -> Just head -> do cover head -> startRow <- readSTRef (down (topNode head)) -> advance (startRow:choices) -> -> advance choices@(newRow:oldChoices) = do -> let endOfRows = topNode (getHead newRow) -> if (newRow == endOfRows) -> then do uncover (getHead newRow) -> if (null oldChoices) -> then error "No choices in advance" -- return [] -- for [Spec] -> else recover oldChoices -> else do coverOthers newRow -> forward choices -> -> recover (oldRow:oldChoices) = do -> uncoverOthers oldRow -> newRow <- readSTRef (down oldRow) -> advance (newRow:oldChoices) -> -> in forward [] - - - Convert a text board into a Spec - -> parseBoard :: String -> Spec -> parseBoard s = Spec (zip rcs vs'check) -> where rcs :: [(R,C)] -> rcs = [ (R r,C c) | r <- rng, c <- rng ] -> isUnset c = (c=='.') || (c==' ') || (c=='0') -> isHint c = ('1'<=c) && (c<='9') -> cs = take 81 $ filter (\c -> isUnset c || isHint c) s -> vs :: [V] -> vs = map (\c -> if isUnset c then u else (V $ digitToInt c)) cs -> vs'check = if 81==length vs then vs else error ("parse of board failed\n"++s) - - This is quite useful as a utility function which partitions the list into groups of n elements. - Used by showSpec. - -> groupTake :: Int->[a]->[[a]] -> groupTake n b = unfoldr foo b -> where foo [] = Nothing -> foo b = Just (splitAt n b) - - Make a nice 2D ascii board from the Spec (not used at the moment) - -> showSpec :: Spec -> String -> showSpec spec = let pa = parse spec -> g = groupTake 9 (map (\(V v) -> if v == 0 then '.' else intToDigit v) $ elems pa) -> addV line = concat $ intersperse "|" (groupTake 3 line) -> addH list = concat $ intersperse ["---+---+---"] (groupTake 3 list) -> in unlines $ addH (map addV g) - - One line display - -> showCompact spec = map (\(V v) -> intToDigit v) (elems (parse spec)) - - The main routine is designed to handle the input from http://www.csse.uwa.edu.au/~gordon/sudoku17 - -> main = do -> all <- getContents -> let puzzles = zip [1..] (map parseBoard (lines all)) -> root <- stToIO initHA -> let act :: (Int,Spec) -> IO () -> act (i,spec) = do -> answer <- stToIO (do initRoot root spec -> answer <- gdance (fst root) -> resetRoot root -> return answer) -> print (i,showCompact answer) -> mapM_ act puzzles - -> inits' xn@(_:_) = zipWith take [0..] $ map (const xn) $ undefined:xn -> inits' _ = undefined diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Deflate.fs b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Deflate.fs deleted file mode 100755 index 7d3680e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Deflate.fs +++ /dev/null @@ -1,578 +0,0 @@ -// public domain - -module Deflate - -open System -open System.Collections.Generic -open System.IO -open System.Linq -open Crc - -let maxbuf = 32768 -let maxlen = 258 - -let getBit (b:byte) (bit:int) = - if b &&& (1uy <<< bit) = 0uy then 0 else 1 - -type BitReader(sin:Stream) = - let mutable bit = 8 - let mutable cur = 0uy - - member x.Skip() = - bit <- 8 - - member x.ReadBit() = - if bit = 8 then - bit <- 0 - let b = sin.ReadByte() - if b = -1 then - failwith "ãƒãƒƒãƒ•ã‚¡ã‚’è¶…éŽã—ã¾ã—ãŸ" - cur <- byte b - let ret = if cur &&& (1uy <<< bit) = 0uy then 0 else 1 - bit <- bit + 1 - ret - - member x.ReadLE n = - let mutable ret = 0 - for i = 0 to n - 1 do - if x.ReadBit() = 1 then ret <- ret ||| (1 <<< i) - ret - - member x.ReadBE n = - let mutable ret = 0 - for i = 0 to n - 1 do - ret <- (ret <<< 1) ||| x.ReadBit() - ret - - member x.ReadBytes len = - if bit <> 8 then bit <- 8 - let buf = Array.zeroCreate len - ignore <| sin.Read(buf, 0, len) - buf - -type WriteBuffer(sout:Stream) = - let mutable prev:byte[] = null - let mutable buf = Array.zeroCreate maxbuf - let mutable p = 0 - - let next newbuf = - prev <- buf - buf <- if newbuf then Array.zeroCreate maxbuf else null - p <- 0 - - member x.Close() = - next false - next false - - interface IDisposable with - member x.Dispose() = x.Close() - - member x.WriteByte (b:byte) = - buf.[p] <- b - sout.WriteByte b - p <- p + 1 - if p = maxbuf then next true - - member x.Write (src:byte[]) start len = - let maxlen = maxbuf - p - if len <= maxlen then - Array.Copy(src, start, buf, p, len) - sout.Write(src, start, len) - p <- p + len - if p = maxbuf then next true - else - x.Write src start maxlen - x.Write src (start + maxlen) (len - maxlen) - - member x.Copy len dist = - if dist < 1 then - failwith <| sprintf "dist too small: %d < 1" dist - elif dist > maxbuf then - failwith <| sprintf "dist too big: %d > %d" dist maxbuf - let pp = p - dist - if pp < 0 then - if prev = null then - failwith <| sprintf "dist too big: %d > %d" dist p - let pp = pp + maxbuf - let maxlen = maxbuf - pp - if len <= maxlen then - x.Write prev pp len - else - x.Write prev pp maxlen - x.Copy (len - maxlen) dist - else - let maxlen = p - pp - if len <= maxlen then - x.Write buf pp len - else - if dist = 1 then - let b = buf.[pp] - for i = 1 to len do - x.WriteByte b - else - let buf' = buf - let mutable len' = len - while len' > 0 do - let len'' = Math.Min(len', maxlen) - x.Write buf' pp len'' - len' <- len' - len'' - -type Huffman(lens:int[]) = - let vals = Array.zeroCreate lens.Length - let min = lens.Where(fun x -> x > 0).Min() - let max = lens.Max() - let counts = Array.zeroCreate (max + 1) - let firsts = Array.zeroCreate (max + 1) - let nexts = Array.zeroCreate (max + 1) - let tables = Array.zeroCreate(max + 1) - - do - for len in lens do - if len > 0 then counts.[len] <- counts.[len] + 1 - for i = 1 to max do - firsts.[i] <- (firsts.[i - 1] + counts.[i - 1]) <<< 1 - Array.Copy(firsts, 0, nexts, 0, max + 1) - for i = 0 to vals.Length - 1 do - let len = lens.[i] - if len > 0 then - vals.[i] <- nexts.[len] - nexts.[len] <- nexts.[len] + 1 - - for i = 0 to vals.Length - 1 do - let len = lens.[i] - if len > 0 then - let start = firsts.[len] - if tables.[len] = null then - let count = nexts.[len] - start - tables.[len] <- Array.zeroCreate count - tables.[len].[vals.[i] - start] <- i - - member x.GetValue h = - let rec getv i = - if i > max then -1 else - if h < nexts.[i] then - tables.[i].[h - firsts.[i]] - else - getv (i + 1) - getv min - - member x.Read(br:BitReader) = - let rec read h i = - if h < nexts.[i] then - tables.[i].[h - firsts.[i]] - else - read ((h <<< 1) ||| br.ReadBit()) (i + 1) - read (br.ReadBE min) min - -type [] HuffmanDecoder() = - abstract GetValue: unit->int - abstract GetDistance: unit->int - -type FixedHuffman(br:BitReader) = - inherit HuffmanDecoder() - - override x.GetValue() = - let v = br.ReadBE 7 - if v < 24 then v + 256 else - let v = (v <<< 1) ||| br.ReadBit() - if v < 192 then v - 48 - elif v < 200 then v + 88 - else ((v <<< 1) ||| br.ReadBit()) - 256 - - override x.GetDistance() = br.ReadBE 5 - -type DynamicHuffman(br:BitReader) = - inherit HuffmanDecoder() - - let lit, dist = - let hlit = - let hlit = (br.ReadLE 5) + 257 - if hlit > 286 then failwith <| sprintf "hlit: %d > 286" hlit - hlit - - let hdist = - let hdist = (br.ReadLE 5) + 1 - if hdist > 32 then failwith <| sprintf "hdist: %d > 32" hdist - hdist - - let hclen = - let hclen = (br.ReadLE 4) + 4 - if hclen > 19 then failwith <| sprintf "hclen: %d > 19" hclen - hclen - - let clen = - let hclens = Array.zeroCreate 19 - let order = [| 16; 17; 18; 0; 8; 7; 9; 6; 10; 5; - 11; 4; 12; 3; 13; 2; 14; 1; 15 |] - for i = 0 to hclen - 1 do - hclens.[order.[i]] <- br.ReadLE 3 - new Huffman(hclens) - - let ld = Array.zeroCreate(hlit + hdist) - let mutable i = 0 - while i < ld.Length do - let v = clen.Read(br) - if v < 16 then - ld.[i] <- v - i <- i + 1 - else - let r, v = - match v with - | 16 -> (br.ReadLE 2) + 3, ld.[i - 1] - | 17 -> (br.ReadLE 3) + 3, 0 - | 18 -> (br.ReadLE 7) + 11, 0 - | _ -> failwith "䏿­£ãªå€¤ã§ã™ã€‚" - for j = 0 to r - 1 do - ld.[i + j] <- v - i <- i + r - - new Huffman(ld.[0 .. hlit - 1]), - new Huffman(ld.[hlit .. hlit + hdist - 1]) - - override x.GetValue() = lit.Read br - override x.GetDistance() = dist.Read br - -let getLitExLen v = if v < 265 || v = 285 then 0 else (v - 261) >>> 2 -let getDistExLen d = if d < 4 then 0 else (d - 2) >>> 1 - -let litlens = - let litlens = Array.zeroCreate 286 - let mutable v = 3 - for i = 257 to 284 do - litlens.[i] <- v - v <- v + (1 <<< (getLitExLen i)) - litlens.[285] <- maxlen - litlens.[257..285] - -let distlens = - let distlens = Array.zeroCreate 30 - let mutable v = 1 - for i = 0 to 29 do - distlens.[i] <- v - v <- v + (1 <<< (getDistExLen i)) - distlens - -type Reader(sin:Stream) = - inherit Stream() - - let br = new BitReader(sin) - let fh = new FixedHuffman(br) - - let sout = new MemoryStream() - let dbuf = new WriteBuffer(sout) - - let mutable cache:byte[] = null - let mutable canRead = true - - let rec read (h:HuffmanDecoder) = - let v = h.GetValue() - if v > 285 then failwith <| sprintf "䏿­£ãªå€¤: %d" v - if v < 256 then - dbuf.WriteByte(byte v) - elif v > 256 then - let len = - if v < 265 then v - 254 else - litlens.[v - 257] + (br.ReadLE (getLitExLen v)) - let dist = - let d = h.GetDistance() - if d > 29 then failwith <| sprintf "䏿­£ãªè·é›¢: %d" d - if d < 4 then d + 1 else - distlens.[d] + (br.ReadLE (getDistExLen d)) - dbuf.Copy len dist - if v <> 256 then read h - - override x.CanRead = canRead - override x.CanWrite = false - override x.CanSeek = false - override x.Flush() = () - - override x.Close() = - dbuf.Close() - canRead <- false - - override x.Read(buffer, offset, count) = - let offset = - if cache = null then 0 else - let clen = cache.Length - let len = Math.Min(clen, count) - Array.Copy(cache, 0, buffer, offset, len) - cache <- if len = clen then null - else cache.[len .. clen - 1] - len - let req = int64 <| count - offset - while canRead && sout.Length < req do - x.readBlock() - let len = - if sout.Length = 0L then 0 else - let data = sout.ToArray() - sout.SetLength(0L) - let dlen = data.Length - let len = Math.Min(int req, dlen) - Array.Copy(data, 0, buffer, offset, len) - if dlen > len then - cache <- data.[len..] - len - offset + len - - override x.Position - with get() = raise <| new NotImplementedException() - and set(v) = raise <| new NotImplementedException() - - override x.Length = raise <| new NotImplementedException() - override x.Seek(_, _) = raise <| new NotImplementedException() - override x.Write(_, _, _) = raise <| new NotImplementedException() - override x.SetLength(_) = raise <| new NotImplementedException() - - member private x.readBlock() = - let bfinal = br.ReadBit() - match br.ReadLE 2 with - | 0 -> br.Skip() - let len = br.ReadLE 16 - let nlen = br.ReadLE 16 - if len + nlen <> 0x10000 then - failwith "䏿­£ãªéžåœ§ç¸®é•·" - dbuf.Write (br.ReadBytes len) 0 len - | 1 -> read fh - | 2 -> read (new DynamicHuffman(br)) - | _ -> failwith "䏿­£ãªãƒ–ロックタイプ" - if bfinal = 1 then - canRead <- false - x.Close() - -type BitWriter(sout:Stream) = - let mutable bit = 0 - let mutable cur = 0uy - - member x.Skip() = - if bit > 0 then - sout.WriteByte(cur) - bit <- 0 - cur <- 0uy - - interface IDisposable with - member x.Dispose() = - x.Skip() - sout.Flush() - - member x.WriteBit(b:int) = - cur <- cur ||| ((byte b) <<< bit) - bit <- bit + 1 - if bit = 8 then - sout.WriteByte(cur) - bit <- 0 - cur <- 0uy - - member x.WriteLE (len:int) (b:int) = - for i = 0 to len - 1 do - x.WriteBit <| if (b &&& (1 <<< i)) = 0 then 0 else 1 - - member x.WriteBE (len:int) (b:int) = - for i = len - 1 downto 0 do - x.WriteBit <| if (b &&& (1 <<< i)) = 0 then 0 else 1 - - member x.WriteBytes(data:byte[]) = - x.Skip() - sout.Write(data, 0, data.Length) - -type FixedHuffmanWriter(bw:BitWriter) = - member x.Write (b:int) = - if b < 144 then - bw.WriteBE 8 (b + 0b110000) - elif b < 256 then - bw.WriteBE 9 (b - 144 + 0b110010000) - elif b < 280 then - bw.WriteBE 7 (b - 256) - elif b < 288 then - bw.WriteBE 8 (b - 280 + 0b11000000) - - member x.WriteLen (len:int) = - if len < 3 || len > maxlen then - failwith <| sprintf "䏿­£ãªé•·ã•: %d" len - let mutable ll = 285 - while len < litlens.[ll - 257] do - ll <- ll - 1 - x.Write ll - bw.WriteLE (getLitExLen ll) (len - litlens.[ll - 257]) - - member x.WriteDist (d:int) = - if d < 1 || d > maxbuf then - failwith <| sprintf "䏿­£ãªè·é›¢: %d" d - let mutable dl = 29 - while d < distlens.[dl] do - dl <- dl - 1 - bw.WriteBE 5 dl - bw.WriteLE (getDistExLen dl) (d - distlens.[dl]) - -let maxbuf2 = maxbuf * 2 -let buflen = maxbuf2 + maxlen - -let inline getHash (buf:byte[]) pos = - ((int buf.[pos]) <<< 4) ^^^ ((int buf.[pos + 1]) <<< 2) ^^^ (int buf.[pos + 2]) - -let inline addHash (hash:List[]) (buf:byte[]) pos = - if buf.[pos] <> buf.[pos + 1] then - hash.[getHash buf pos].Add pos - -let inline addHash2 (tables:int[,]) (counts:int[]) (buf:byte[]) pos = - if buf.[pos] <> buf.[pos + 1] then - let h = getHash buf pos - let c = counts.[h] - tables.[h, c &&& 15] <- pos - counts.[h] <- c + 1 - -type Writer(t:int, sin:Stream) = - let mutable length = buflen - let buf = Array.zeroCreate buflen - let tables, counts = - if t = 2 then Array2D.zeroCreate 4096 16, Array.create 4096 0 else null, null - let hash = if tables = null then [| for _ in 0..4095 -> new List() |] else null - let mutable crc = ~~~0u - - let read pos len = - let rlen = sin.Read(buf, pos, len) - if rlen < len then length <- pos + rlen - for i = pos to pos + rlen - 1 do - let b = int(crc ^^^ (uint32 buf.[i])) &&& 0xff - crc <- (crc >>> 8) ^^^ crc32_table.[b] - if hash <> null then - for list in hash do list.Clear() - else - Array.fill counts 0 counts.Length 0 - - do - read 0 buflen - - let search (pos:int) = - let mutable maxp = -1 - let mutable maxl = 2 - let mlen = Math.Min(maxlen, length - pos) - let last = Math.Max(0, pos - maxbuf) - let h = getHash buf pos - if hash <> null then - let list = hash.[h] - let mutable i = list.Count - 1 - while i >= 0 do - let p = list.[i] - if p < last then i <- 0 else - let mutable len = 0 - while len < mlen && buf.[p + len] = buf.[pos + len] do - len <- len + 1 - if len > maxl then - maxp <- p - maxl <- len - i <- i - 1 - else - let c = counts.[h] - let p1, p2 = if c < 16 then 0, c - 1 else c + 1, c + 16 - let mutable i = p2 - while i >= p1 do - let p = tables.[h, i &&& 15] - if p < last then i <- 0 else - let mutable len = 0 - while len < mlen && buf.[p + len] = buf.[pos + len] do - len <- len + 1 - if len > maxl then - maxp <- p - maxl <- len - i <- i - 1 - maxp, maxl - - member x.Crc = ~~~crc - - member x.Compress (sout:Stream) = - use bw = new BitWriter(sout) - bw.WriteBit 1 - bw.WriteLE 2 1 - let hw = new FixedHuffmanWriter(bw) - let mutable p = 0 - match t with - | 2 -> - while p < length do - let b = buf.[p] - if p < length - 4 && b = buf.[p + 1] && b = buf.[p + 2] && b = buf.[p + 3] then - let mutable len = 4 - let mlen = Math.Min(maxlen + 1, length - p) - while len < mlen && b = buf.[p + len] do - len <- len + 1 - hw.Write(int b) - hw.WriteLen(len - 1) - hw.WriteDist 1 - p <- p + len - else - let maxp, maxl = search p - if maxp < 0 then - hw.Write(int b) - addHash2 tables counts buf p - p <- p + 1 - else - hw.WriteLen maxl - hw.WriteDist (p - maxp) - for i = p to p + maxl - 1 do - addHash2 tables counts buf i - p <- p + maxl - if p > maxbuf2 then - Array.Copy(buf, maxbuf, buf, 0, maxbuf + maxlen) - if length < buflen then length <- length - maxbuf else - read (maxbuf + maxlen) maxbuf - p <- p - maxbuf - for i = 0 to p - 1 do - addHash2 tables counts buf i - | 1 -> - while p < length do - let b = buf.[p] - if p < length - 4 && b = buf.[p + 1] && b = buf.[p + 2] && b = buf.[p + 3] then - let mutable len = 4 - let mlen = Math.Min(maxlen + 1, length - p) - while len < mlen && b = buf.[p + len] do - len <- len + 1 - hw.Write(int b) - hw.WriteLen(len - 1) - hw.WriteDist 1 - p <- p + len - else - let maxp, maxl = search p - if maxp < 0 then - hw.Write(int b) - addHash hash buf p - p <- p + 1 - else - hw.WriteLen maxl - hw.WriteDist (p - maxp) - for i = p to p + maxl - 1 do - addHash hash buf i - p <- p + maxl - if p > maxbuf2 then - Array.Copy(buf, maxbuf, buf, 0, maxbuf + maxlen) - if length < buflen then length <- length - maxbuf else - read (maxbuf + maxlen) maxbuf - p <- p - maxbuf - for i = 0 to p - 1 do - addHash hash buf i - | _ -> - while p < length do - let maxp, maxl = search p - if maxp < 0 then - hw.Write(int buf.[p]) - hash.[getHash buf p].Add p - p <- p + 1 - else - hw.WriteLen maxl - hw.WriteDist (p - maxp) - for i = p to p + maxl - 1 do - hash.[getHash buf i].Add i - p <- p + maxl - if p > maxbuf2 then - Array.Copy(buf, maxbuf, buf, 0, maxbuf + maxlen) - if length < buflen then length <- length - maxbuf else - read (maxbuf + maxlen) maxbuf - p <- p - maxbuf - for i = 0 to p - 1 do - hash.[getHash buf i].Add i - hw.Write 256 - -let GetCompressBytes (sin:Stream) = - let now = DateTime.Now - let ms = new MemoryStream() - let w = new Writer(1, sin) - w.Compress ms - ms.ToArray(), w.Crc diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Error.pmod b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Error.pmod deleted file mode 100644 index 808ecb0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Error.pmod +++ /dev/null @@ -1,38 +0,0 @@ -#pike __REAL_VERSION__ - -constant Generic = __builtin.GenericError; - -constant Index = __builtin.IndexError; - -constant BadArgument = __builtin.BadArgumentError; - -constant Math = __builtin.MathError; - -constant Resource = __builtin.ResourceError; - -constant Permission = __builtin.PermissionError; - -constant Decode = __builtin.DecodeError; - -constant Cpp = __builtin.CppError; - -constant Compilation = __builtin.CompilationError; - -constant MasterLoad = __builtin.MasterLoadError; - -constant ModuleLoad = __builtin.ModuleLoadError; - -//! Returns an Error object for any argument it receives. If the -//! argument already is an Error object or is empty, it does nothing. -object mkerror(mixed error) -{ - if (error == UNDEFINED) - return error; - if (objectp(error) && error->is_generic_error) - return error; - if (arrayp(error)) - return Error.Generic(@error); - if (stringp(error)) - return Error.Generic(error); - return Error.Generic(sprintf("%O", error)); -} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Errors.scala b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Errors.scala deleted file mode 100644 index 67198c0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Errors.scala +++ /dev/null @@ -1,18 +0,0 @@ -/* This file /* which is totally legal scala */ will not be highlighted - correcty by pygments */ - -object ⌘ { - val `interface` = """ -A -"Multiline" -String -""" - - val foo_+ = "foo plus" - val foo_⌬⌬ = "double benzene" - - def main(argv: Array[String]) { - println(⌘.interface + " " + foo_+ + " " + foo_⌬⌬ ) - } -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/FakeFile.pike b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/FakeFile.pike deleted file mode 100644 index 48f3ea6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/FakeFile.pike +++ /dev/null @@ -1,360 +0,0 @@ -#pike __REAL_VERSION__ - -//! A string wrapper that pretends to be a @[Stdio.File] object -//! in addition to some features of a @[Stdio.FILE] object. - - -//! This constant can be used to distinguish a FakeFile object -//! from a real @[Stdio.File] object. -constant is_fake_file = 1; - -protected string data; -protected int ptr; -protected int(0..1) r; -protected int(0..1) w; -protected int mtime; - -protected function read_cb; -protected function read_oob_cb; -protected function write_cb; -protected function write_oob_cb; -protected function close_cb; - -//! @seealso -//! @[Stdio.File()->close()] -int close(void|string direction) { - direction = lower_case(direction||"rw"); - int cr = has_value(direction, "r"); - int cw = has_value(direction, "w"); - - if(cr) { - r = 0; - } - - if(cw) { - w = 0; - } - - // FIXME: Close callback - return 1; -} - -//! @decl void create(string data, void|string type, void|int pointer) -//! @seealso -//! @[Stdio.File()->create()] -void create(string _data, void|string type, int|void _ptr) { - if(!_data) error("No data string given to FakeFile.\n"); - data = _data; - ptr = _ptr; - mtime = time(); - if(type) { - type = lower_case(type); - if(has_value(type, "r")) - r = 1; - if(has_value(type, "w")) - w = 1; - } - else - r = w = 1; -} - -protected string make_type_str() { - string type = ""; - if(r) type += "r"; - if(w) type += "w"; - return type; -} - -//! @seealso -//! @[Stdio.File()->dup()] -this_program dup() { - return this_program(data, make_type_str(), ptr); -} - -//! Always returns 0. -//! @seealso -//! @[Stdio.File()->errno()] -int errno() { return 0; } - -//! Returns size and the creation time of the string. -Stdio.Stat stat() { - Stdio.Stat st = Stdio.Stat(); - st->size = sizeof(data); - st->mtime=st->ctime=mtime; - st->atime=time(); - return st; -} - -//! @seealso -//! @[Stdio.File()->line_iterator()] -String.SplitIterator line_iterator(int|void trim) { - if(trim) - return String.SplitIterator( data-"\r", '\n' ); - return String.SplitIterator( data, '\n' ); -} - -protected mixed id; - -//! @seealso -//! @[Stdio.File()->query_id()] -mixed query_id() { return id; } - -//! @seealso -//! @[Stdio.File()->set_id()] -void set_id(mixed _id) { id = _id; } - -//! @seealso -//! @[Stdio.File()->read_function()] -function(:string) read_function(int nbytes) { - return lambda() { return read(nbytes); }; -} - -//! @seealso -//! @[Stdio.File()->peek()] -int(-1..1) peek(int|float|void timeout) { - if(!r) return -1; - if(ptr >= sizeof(data)) return 0; - return 1; -} - -//! Always returns 0. -//! @seealso -//! @[Stdio.File()->query_address()] -string query_address(void|int(0..1) is_local) { return 0; } - -//! @seealso -//! @[Stdio.File()->read()] -string read(void|int(0..) len, void|int(0..1) not_all) { - if(!r) return 0; - if (len < 0) error("Cannot read negative number of characters.\n"); - int start=ptr; - ptr += len; - if(zero_type(len) || ptr>sizeof(data)) - ptr = sizeof(data); - - // FIXME: read callback - return data[start..ptr-1]; -} - -//! @seealso -//! @[Stdio.FILE()->gets()] -string gets() { - if(!r) return 0; - string ret; - sscanf(data,"%*"+(string)ptr+"s%[^\n]",ret); - if(ret) - { - ptr+=sizeof(ret)+1; - if(ptr>sizeof(data)) - { - ptr=sizeof(data); - if(!sizeof(ret)) - ret = 0; - } - } - - // FIXME: read callback - return ret; -} - -//! @seealso -//! @[Stdio.FILE()->getchar()] -int getchar() { - if(!r) return 0; - int c; - if(catch(c=data[ptr])) - c=-1; - else - ptr++; - - // FIXME: read callback - return c; -} - -//! @seealso -//! @[Stdio.FILE()->unread()] -void unread(string s) { - if(!r) return; - if(data[ptr-sizeof(s)..ptr-1]==s) - ptr-=sizeof(s); - else - { - data=s+data[ptr..]; - ptr=0; - } -} - -//! @seealso -//! @[Stdio.File()->seek()] -int seek(int pos, void|int mult, void|int add) { - if(mult) - pos = pos*mult+add; - if(pos<0) - { - pos = sizeof(data)+pos; - if( pos < 0 ) - pos = 0; - } - ptr = pos; - if( ptr > strlen( data ) ) - ptr = strlen(data); - return ptr; -} - -//! Always returns 1. -//! @seealso -//! @[Stdio.File()->sync()] -int(1..1) sync() { return 1; } - -//! @seealso -//! @[Stdio.File()->tell()] -int tell() { return ptr; } - -//! @seealso -//! @[Stdio.File()->truncate()] -int(0..1) truncate(int length) { - data = data[..length-1]; - return sizeof(data)==length; -} - -//! @seealso -//! @[Stdio.File()->write()] -int(-1..) write(string|array(string) str, mixed ... extra) { - if(!w) return -1; - if(arrayp(str)) str=str*""; - if(sizeof(extra)) str=sprintf(str, @extra); - - if(ptr==sizeof(data)) { - data += str; - ptr = sizeof(data); - } - else if(sizeof(str)==1) - data[ptr++] = str[0]; - else { - data = data[..ptr-1] + str + data[ptr+sizeof(str)..]; - ptr += sizeof(str); - } - - // FIXME: write callback - return sizeof(str); -} - -//! @seealso -//! @[Stdio.File()->set_blocking] -void set_blocking() { - close_cb = 0; - read_cb = 0; - read_oob_cb = 0; - write_cb = 0; - write_oob_cb = 0; -} - -//! @seealso -//! @[Stdio.File()->set_blocking_keep_callbacks] -void set_blocking_keep_callbacks() { } - -//! @seealso -//! @[Stdio.File()->set_blocking] -void set_nonblocking(function rcb, function wcb, function ccb, - function rocb, function wocb) { - read_cb = rcb; - write_cb = wcb; - close_cb = ccb; - read_oob_cb = rocb; - write_oob_cb = wocb; -} - -//! @seealso -//! @[Stdio.File()->set_blocking_keep_callbacks] -void set_nonblocking_keep_callbacks() { } - - -//! @seealso -//! @[Stdio.File()->set_close_callback] -void set_close_callback(function cb) { close_cb = cb; } - -//! @seealso -//! @[Stdio.File()->set_read_callback] -void set_read_callback(function cb) { read_cb = cb; } - -//! @seealso -//! @[Stdio.File()->set_read_oob_callback] -void set_read_oob_callback(function cb) { read_oob_cb = cb; } - -//! @seealso -//! @[Stdio.File()->set_write_callback] -void set_write_callback(function cb) { write_cb = cb; } - -//! @seealso -//! @[Stdio.File()->set_write_oob_callback] -void set_write_oob_callback(function cb) { write_oob_cb = cb; } - - -//! @seealso -//! @[Stdio.File()->query_close_callback] -function query_close_callback() { return close_cb; } - -//! @seealso -//! @[Stdio.File()->query_read_callback] -function query_read_callback() { return read_cb; } - -//! @seealso -//! @[Stdio.File()->query_read_oob_callback] -function query_read_oob_callback() { return read_oob_cb; } - -//! @seealso -//! @[Stdio.File()->query_write_callback] -function query_write_callback() { return write_cb; } - -//! @seealso -//! @[Stdio.File()->query_write_oob_callback] -function query_write_oob_callback() { return write_oob_cb; } - -string _sprintf(int t) { - return t=='O' && sprintf("%O(%d,%O)", this_program, sizeof(data), - make_type_str()); -} - - -// FakeFile specials. - -//! A FakeFile can be casted to a string. -mixed cast(string to) { - switch(to) { - case "string": return data; - case "object": return this; - } - error("Can not cast object to %O.\n", to); -} - -//! Sizeof on a FakeFile returns the size of its contents. -int(0..) _sizeof() { - return sizeof(data); -} - -//! @ignore - -#define NOPE(X) mixed X (mixed ... args) { error("This is a FakeFile. %s is not available.\n", #X); } -NOPE(assign); -NOPE(async_connect); -NOPE(connect); -NOPE(connect_unix); -NOPE(open); -NOPE(open_socket); -NOPE(pipe); -NOPE(tcgetattr); -NOPE(tcsetattr); - -// Stdio.Fd -NOPE(dup2); -NOPE(lock); // We could implement this -NOPE(mode); // We could implement this -NOPE(proxy); // We could implement this -NOPE(query_fd); -NOPE(read_oob); -NOPE(set_close_on_exec); -NOPE(set_keepalive); -NOPE(trylock); // We could implement this -NOPE(write_oob); - -//! @endignore \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Get-CommandDefinitionHtml.ps1 b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Get-CommandDefinitionHtml.ps1 deleted file mode 100644 index b181955..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Get-CommandDefinitionHtml.ps1 +++ /dev/null @@ -1,66 +0,0 @@ - -function Get-CommandDefinitionHtml { - - # this tells powershell to allow advanced features, - # like the [validatenotnullorempty()] attribute below. - [CmdletBinding()] - param( - [ValidateNotNullOrEmpty()] - [string]$name - ) - - $command = get-command $name - - # Look mom! I'm a cmdlet! - $PSCmdlet.WriteVerbose("Dumping HTML for " + $command) - -@" - - - $($command.name) - - - -$( - $command.parametersets | % { -@" - - - - - -"@ - } -) -
$($_.name) - - - - -$( - $count = 0 - $_.parameters | % { - if (0 -eq ($count % 8)) { -@' - - -'@ - } -@" - -"@ - $count++ - } -) - -
Parameters
$($_.name)
-
- - -"@ -} - -Get-CommandDefinitionHtml get-item > out.html - -# show in browser -invoke-item out.html diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/IPDispatchC.nc b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/IPDispatchC.nc deleted file mode 100644 index 95a61a2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/IPDispatchC.nc +++ /dev/null @@ -1,104 +0,0 @@ -/* - * "Copyright (c) 2008-2011 The Regents of the University of California. - * All rights reserved." - * - * Permission to use, copy, modify, and distribute this software and its - * documentation for any purpose, without fee, and without written agreement is - * hereby granted, provided that the above copyright notice, the following - * two paragraphs and the author appear in all copies of this software. - * - * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR - * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT - * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF - * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS - * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO - * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." - * - */ - -/** - * - * - */ -#include "IPDispatch.h" -#include "BlipStatistics.h" - -configuration IPDispatchC { - provides { - interface SplitControl; - interface IPLower; - interface BlipStatistics; - } -} implementation { - - components MainC; - components NoLedsC as LedsC; - - /* IPDispatchP wiring -- fragment rassembly and lib6lowpan bindings */ - components IPDispatchP; - components CC2420RadioC as MessageC; - components ReadLqiC; - components new TimerMilliC(); - - SplitControl = IPDispatchP.SplitControl; - IPLower = IPDispatchP; - BlipStatistics = IPDispatchP; - - IPDispatchP.Boot -> MainC; -/* #else */ -/* components ResourceSendP; */ -/* ResourceSendP.SubSend -> MessageC; */ -/* ResourceSendP.Resource -> MessageC.SendResource[unique("RADIO_SEND_RESOURCE")]; */ -/* IPDispatchP.Ieee154Send -> ResourceSendP.Ieee154Send; */ -/* #endif */ - IPDispatchP.RadioControl -> MessageC; - - IPDispatchP.BarePacket -> MessageC.BarePacket; - IPDispatchP.Ieee154Send -> MessageC.BareSend; - IPDispatchP.Ieee154Receive -> MessageC.BareReceive; - -#ifdef LOW_POWER_LISTENING - IPDispatchP.LowPowerListening -> MessageC; -#endif - MainC.SoftwareInit -> IPDispatchP.Init; - - IPDispatchP.PacketLink -> MessageC; - IPDispatchP.ReadLqi -> ReadLqiC; - IPDispatchP.Leds -> LedsC; - IPDispatchP.ExpireTimer -> TimerMilliC; - - components new PoolC(message_t, N_FRAGMENTS) as FragPool; - components new PoolC(struct send_entry, N_FRAGMENTS) as SendEntryPool; - components new QueueC(struct send_entry *, N_FRAGMENTS); - components new PoolC(struct send_info, N_CONCURRENT_SENDS) as SendInfoPool; - - IPDispatchP.FragPool -> FragPool; - IPDispatchP.SendEntryPool -> SendEntryPool; - IPDispatchP.SendInfoPool -> SendInfoPool; - IPDispatchP.SendQueue -> QueueC; - - components IPNeighborDiscoveryP; - IPDispatchP.NeighborDiscovery -> IPNeighborDiscoveryP; - -/* components ICMPResponderC; */ -/* #ifdef BLIP_MULTICAST */ -/* components MulticastP; */ -/* components new TrickleTimerMilliC(2, 30, 2, 1); */ -/* IP = MulticastP.IP; */ - -/* MainC.SoftwareInit -> MulticastP.Init; */ -/* MulticastP.MulticastRx -> IPDispatchP.Multicast; */ -/* MulticastP.HopHeader -> IPExtensionP.HopByHopExt[0]; */ -/* MulticastP.TrickleTimer -> TrickleTimerMilliC.TrickleTimer[0]; */ -/* MulticastP.IPExtensions -> IPDispatchP; */ -/* #endif */ - -#ifdef DELUGE - components NWProgC; -#endif - -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/IPDispatchP.nc b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/IPDispatchP.nc deleted file mode 100644 index 628f39a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/IPDispatchP.nc +++ /dev/null @@ -1,671 +0,0 @@ -/* - * "Copyright (c) 2008 The Regents of the University of California. - * All rights reserved." - * - * Permission to use, copy, modify, and distribute this software and its - * documentation for any purpose, without fee, and without written agreement is - * hereby granted, provided that the above copyright notice, the following - * two paragraphs and the author appear in all copies of this software. - * - * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR - * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT - * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF - * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS - * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO - * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." - * - */ - -#include -#include -#include -#include -#include -#include - -#include "blip_printf.h" -#include "IPDispatch.h" -#include "BlipStatistics.h" -#include "table.h" - -/* - * Provides IP layer reception to applications on motes. - * - * @author Stephen Dawson-Haggerty - */ - -module IPDispatchP { - provides { - interface SplitControl; - // interface for protocols not requiring special hand-holding - interface IPLower; - - interface BlipStatistics; - - } - uses { - interface Boot; - - - /* link-layer wiring */ - interface SplitControl as RadioControl; - - interface Packet as BarePacket; - interface Send as Ieee154Send; - interface Receive as Ieee154Receive; - - /* context lookup */ - interface NeighborDiscovery; - - interface ReadLqi; - interface PacketLink; - interface LowPowerListening; - - /* buffers for outgoing fragments */ - interface Pool as FragPool; - interface Pool as SendInfoPool; - interface Pool as SendEntryPool; - interface Queue as SendQueue; - - /* expire reconstruction */ - interface Timer as ExpireTimer; - - interface Leds; - - } - provides interface Init; -} implementation { - -#define HAVE_LOWPAN_EXTERN_MATCH_CONTEXT -int lowpan_extern_read_context(struct in6_addr *addr, int context) { - return call NeighborDiscovery.getContext(context, addr); -} - -int lowpan_extern_match_context(struct in6_addr *addr, uint8_t *ctx_id) { - return call NeighborDiscovery.matchContext(addr, ctx_id); -} - - // generally including source files like this is a no-no. I'm doing - // this in the hope that the optimizer will do a better job when - // they're part of a component. -#include -#include -#include -#include - - enum { - S_RUNNING, - S_STOPPED, - S_STOPPING, - }; - uint8_t state = S_STOPPED; - bool radioBusy; - uint8_t current_local_label = 0; - ip_statistics_t stats; - - // this in theory could be arbitrarily large; however, it needs to - // be large enough to hold all active reconstructions, and any tags - // which we are dropping. It's important to keep dropped tags - // around for a while, or else there are pathological situations - // where you continually allocate buffers for packets which will - // never complete. - - //////////////////////////////////////// - // - // - - table_t recon_cache; - - // table of packets we are currently receiving fragments from, that - // are destined to us - struct lowpan_reconstruct recon_data[N_RECONSTRUCTIONS]; - - // - // - //////////////////////////////////////// - - // task void sendTask(); - - void reconstruct_clear(void *ent) { - struct lowpan_reconstruct *recon = (struct lowpan_reconstruct *)ent; - memclr((uint8_t *)&recon->r_meta, sizeof(struct ip6_metadata)); - recon->r_timeout = T_UNUSED; - recon->r_buf = NULL; - } - - struct send_info *getSendInfo() { - struct send_info *ret = call SendInfoPool.get(); - if (ret == NULL) return ret; - ret->_refcount = 1; - ret->upper_data = NULL; - ret->failed = FALSE; - ret->link_transmissions = 0; - ret->link_fragments = 0; - ret->link_fragment_attempts = 0; - return ret; - } -#define SENDINFO_INCR(X) ((X)->_refcount)++ -void SENDINFO_DECR(struct send_info *si) { - if (--(si->_refcount) == 0) { - call SendInfoPool.put(si); - } -} - - command error_t SplitControl.start() { - return call RadioControl.start(); - } - - command error_t SplitControl.stop() { - if (!radioBusy) { - state = S_STOPPED; - return call RadioControl.stop(); - } else { - // if there's a packet in the radio, wait for it to exit before - // stopping - state = S_STOPPING; - return SUCCESS; - } - } - - event void RadioControl.startDone(error_t error) { -#ifdef LPL_SLEEP_INTERVAL - call LowPowerListening.setLocalWakeupInterval(LPL_SLEEP_INTERVAL); -#endif - - if (error == SUCCESS) { - call Leds.led2Toggle(); - call ExpireTimer.startPeriodic(FRAG_EXPIRE_TIME); - state = S_RUNNING; - radioBusy = FALSE; - } - - signal SplitControl.startDone(error); - } - - event void RadioControl.stopDone(error_t error) { - signal SplitControl.stopDone(error); - } - - command error_t Init.init() { - // ip_malloc_init needs to be in init, not booted, because - // context for coap is initialised in init - ip_malloc_init(); - return SUCCESS; - } - - event void Boot.booted() { - call BlipStatistics.clear(); - - /* set up our reconstruction cache */ - table_init(&recon_cache, recon_data, sizeof(struct lowpan_reconstruct), N_RECONSTRUCTIONS); - table_map(&recon_cache, reconstruct_clear); - - call SplitControl.start(); - } - - /* - * Receive-side code. - */ - void deliver(struct lowpan_reconstruct *recon) { - struct ip6_hdr *iph = (struct ip6_hdr *)recon->r_buf; - - // printf("deliver [%i]: ", recon->r_bytes_rcvd); - // printf_buf(recon->r_buf, recon->r_bytes_rcvd); - - /* the payload length field is always compressed, have to put it back here */ - iph->ip6_plen = htons(recon->r_bytes_rcvd - sizeof(struct ip6_hdr)); - signal IPLower.recv(iph, (void *)(iph + 1), &recon->r_meta); - - // printf("ip_free(%p)\n", recon->r_buf); - ip_free(recon->r_buf); - recon->r_timeout = T_UNUSED; - recon->r_buf = NULL; - } - - /* - * Bulletproof recovery logic is very important to make sure we - * don't get wedged with no free buffers. - * - * The table is managed as follows: - * - unused entries are marked T_UNUSED - * - entries which - * o have a buffer allocated - * o have had a fragment reception before we fired - * are marked T_ACTIVE - * - entries which have not had a fragment reception during the last timer period - * and were active are marked T_ZOMBIE - * - zombie receptions are deleted: their buffer is freed and table entry marked unused. - * - when a fragment is dropped, it is entered into the table as T_FAILED1. - * no buffer is allocated - * - when the timer fires, T_FAILED1 entries are aged to T_FAILED2. - * - T_FAILED2 entries are deleted. Incomming fragments with tags - * that are marked either FAILED1 or FAILED2 are dropped; this - * prevents us from allocating a buffer for a packet which we - * have already dropped fragments from. - * - */ - void reconstruct_age(void *elt) { - struct lowpan_reconstruct *recon = (struct lowpan_reconstruct *)elt; - if (recon->r_timeout != T_UNUSED) - printf("recon src: 0x%x tag: 0x%x buf: %p recvd: %i/%i\n", - recon->r_source_key, recon->r_tag, recon->r_buf, - recon->r_bytes_rcvd, recon->r_size); - switch (recon->r_timeout) { - case T_ACTIVE: - recon->r_timeout = T_ZOMBIE; break; // age existing receptions - case T_FAILED1: - recon->r_timeout = T_FAILED2; break; // age existing receptions - case T_ZOMBIE: - case T_FAILED2: - // deallocate the space for reconstruction - printf("timing out buffer: src: %i tag: %i\n", recon->r_source_key, recon->r_tag); - if (recon->r_buf != NULL) { - printf("ip_free(%p)\n", recon->r_buf); - ip_free(recon->r_buf); - } - recon->r_timeout = T_UNUSED; - recon->r_buf = NULL; - break; - } - } - - void ip_print_heap() { -#ifdef PRINTFUART_ENABLED - bndrt_t *cur = (bndrt_t *)heap; - while (((uint8_t *)cur) - heap < IP_MALLOC_HEAP_SIZE) { - printf ("heap region start: %p length: %u used: %u\n", - cur, (*cur & IP_MALLOC_LEN), (*cur & IP_MALLOC_INUSE) >> 15); - cur = (bndrt_t *)(((uint8_t *)cur) + ((*cur) & IP_MALLOC_LEN)); - } -#endif - } - - event void ExpireTimer.fired() { - table_map(&recon_cache, reconstruct_age); - - - printf("Frag pool size: %i\n", call FragPool.size()); - printf("SendInfo pool size: %i\n", call SendInfoPool.size()); - printf("SendEntry pool size: %i\n", call SendEntryPool.size()); - printf("Forward queue length: %i\n", call SendQueue.size()); - ip_print_heap(); - printfflush(); - } - - /* - * allocate a structure for recording information about incomming fragments. - */ - - struct lowpan_reconstruct *get_reconstruct(uint16_t key, uint16_t tag) { - struct lowpan_reconstruct *ret = NULL; - int i; - - // printf("get_reconstruct: %x %i\n", key, tag); - - for (i = 0; i < N_RECONSTRUCTIONS; i++) { - struct lowpan_reconstruct *recon = (struct lowpan_reconstruct *)&recon_data[i]; - - if (recon->r_tag == tag && - recon->r_source_key == key) { - - if (recon->r_timeout > T_UNUSED) { - recon->r_timeout = T_ACTIVE; - ret = recon; - goto done; - - } else if (recon->r_timeout < T_UNUSED) { - // if we have already tried and failed to get a buffer, we - // need to drop remaining fragments. - ret = NULL; - goto done; - } - } - if (recon->r_timeout == T_UNUSED) - ret = recon; - } - done: - // printf("got%p\n", ret); - return ret; - } - - event message_t *Ieee154Receive.receive(message_t *msg, void *msg_payload, uint8_t len) { - struct packed_lowmsg lowmsg; - struct ieee154_frame_addr frame_address; - uint8_t *buf = msg_payload; - - // printf(" -- RECEIVE -- len : %i\n", len); - - BLIP_STATS_INCR(stats.rx_total); - - /* unpack the 802.15.4 address fields */ - buf = unpack_ieee154_hdr(msg_payload, &frame_address); - len -= buf - (uint8_t *)msg_payload; - - /* unpack and 6lowpan headers */ - lowmsg.data = buf; - lowmsg.len = len; - lowmsg.headers = getHeaderBitmap(&lowmsg); - if (lowmsg.headers == LOWMSG_NALP) { - goto fail; - } - - if (hasFrag1Header(&lowmsg) || hasFragNHeader(&lowmsg)) { - // start reassembly - int rv; - struct lowpan_reconstruct *recon; - uint16_t tag, source_key; - - source_key = ieee154_hashaddr(&frame_address.ieee_src); - getFragDgramTag(&lowmsg, &tag); - recon = get_reconstruct(source_key, tag); - if (!recon) { - goto fail; - } - - /* fill in metadata: on fragmented packets, it applies to the - first fragment only */ - memcpy(&recon->r_meta.sender, &frame_address.ieee_src, - sizeof(ieee154_addr_t)); - recon->r_meta.lqi = call ReadLqi.readLqi(msg); - recon->r_meta.rssi = call ReadLqi.readRssi(msg); - - if (hasFrag1Header(&lowmsg)) { - if (recon->r_buf != NULL) goto fail; - rv = lowpan_recon_start(&frame_address, recon, buf, len); - } else { - rv = lowpan_recon_add(recon, buf, len); - } - - if (rv < 0) { - recon->r_timeout = T_FAILED1; - goto fail; - } else { - // printf("start recon buf: %p\n", recon->r_buf); - recon->r_timeout = T_ACTIVE; - recon->r_source_key = source_key; - recon->r_tag = tag; - } - - if (recon->r_size == recon->r_bytes_rcvd) { - deliver(recon); - } - - } else { - /* no fragmentation, just deliver it */ - int rv; - struct lowpan_reconstruct recon; - - /* fill in metadata */ - memcpy(&recon.r_meta.sender, &frame_address.ieee_src, - sizeof(ieee154_addr_t)); - recon.r_meta.lqi = call ReadLqi.readLqi(msg); - recon.r_meta.rssi = call ReadLqi.readRssi(msg); - - buf = getLowpanPayload(&lowmsg); - if ((rv = lowpan_recon_start(&frame_address, &recon, buf, len)) < 0) { - goto fail; - } - - if (recon.r_size == recon.r_bytes_rcvd) { - deliver(&recon); - } else { - // printf("ip_free(%p)\n", recon.r_buf); - ip_free(recon.r_buf); - } - } - goto done; - fail: - BLIP_STATS_INCR(stats.rx_drop); - done: - return msg; - } - - - /* - * Send-side functionality - */ - task void sendTask() { - struct send_entry *s_entry; - - // printf("sendTask() - sending\n"); - - if (radioBusy || state != S_RUNNING) return; - if (call SendQueue.empty()) return; - // this does not dequeue - s_entry = call SendQueue.head(); - -#ifdef LPL_SLEEP_INTERVAL - call LowPowerListening.setRemoteWakeupInterval(s_entry->msg, - call LowPowerListening.getLocalWakeupInterval()); -#endif - - if (s_entry->info->failed) { - dbg("Drops", "drops: sendTask: dropping failed fragment\n"); - goto fail; - } - - if ((call Ieee154Send.send(s_entry->msg, - call BarePacket.payloadLength(s_entry->msg))) != SUCCESS) { - dbg("Drops", "drops: sendTask: send failed\n"); - goto fail; - } else { - radioBusy = TRUE; - } - - return; - fail: - printf("SEND FAIL\n"); - post sendTask(); - BLIP_STATS_INCR(stats.tx_drop); - - // deallocate the memory associated with this request. - // other fragments associated with this packet will get dropped. - s_entry->info->failed = TRUE; - SENDINFO_DECR(s_entry->info); - call FragPool.put(s_entry->msg); - call SendEntryPool.put(s_entry); - call SendQueue.dequeue(); - } - - - /* - * it will pack the message into the fragment pool and enqueue - * those fragments for sending - * - * it will set - * - payload length - * - version, traffic class and flow label - * - * the source and destination IP addresses must be set by higher - * layers. - */ - command error_t IPLower.send(struct ieee154_frame_addr *frame_addr, - struct ip6_packet *msg, - void *data) { - struct lowpan_ctx ctx; - struct send_info *s_info; - struct send_entry *s_entry; - message_t *outgoing; - - int frag_len = 1; - error_t rc = SUCCESS; - - if (state != S_RUNNING) { - return EOFF; - } - - /* set version to 6 in case upper layers forgot */ - msg->ip6_hdr.ip6_vfc &= ~IPV6_VERSION_MASK; - msg->ip6_hdr.ip6_vfc |= IPV6_VERSION; - - ctx.tag = current_local_label++; - ctx.offset = 0; - - s_info = getSendInfo(); - if (s_info == NULL) { - rc = ERETRY; - goto cleanup_outer; - } - s_info->upper_data = data; - - while (frag_len > 0) { - s_entry = call SendEntryPool.get(); - outgoing = call FragPool.get(); - - if (s_entry == NULL || outgoing == NULL) { - if (s_entry != NULL) - call SendEntryPool.put(s_entry); - if (outgoing != NULL) - call FragPool.put(outgoing); - // this will cause any fragments we have already enqueued to - // be dropped by the send task. - s_info->failed = TRUE; - printf("drops: IP send: no fragments\n"); - rc = ERETRY; - goto done; - } - - call BarePacket.clear(outgoing); - frag_len = lowpan_frag_get(call Ieee154Send.getPayload(outgoing, 0), - call BarePacket.maxPayloadLength(), - msg, - frame_addr, - &ctx); - if (frag_len < 0) { - printf(" get frag error: %i\n", frag_len); - } - - printf("fragment length: %i offset: %i\n", frag_len, ctx.offset); - call BarePacket.setPayloadLength(outgoing, frag_len); - - if (frag_len <= 0) { - call FragPool.put(outgoing); - call SendEntryPool.put(s_entry); - goto done; - } - - if (call SendQueue.enqueue(s_entry) != SUCCESS) { - BLIP_STATS_INCR(stats.encfail); - s_info->failed = TRUE; - printf("drops: IP send: enqueue failed\n"); - goto done; - } - - s_info->link_fragments++; - s_entry->msg = outgoing; - s_entry->info = s_info; - - /* configure the L2 */ - if (frame_addr->ieee_dst.ieee_mode == IEEE154_ADDR_SHORT && - frame_addr->ieee_dst.i_saddr == IEEE154_BROADCAST_ADDR) { - call PacketLink.setRetries(s_entry->msg, 0); - } else { - call PacketLink.setRetries(s_entry->msg, BLIP_L2_RETRIES); - } - call PacketLink.setRetryDelay(s_entry->msg, BLIP_L2_DELAY); - - SENDINFO_INCR(s_info);} - - // printf("got %i frags\n", s_info->link_fragments); - done: - BLIP_STATS_INCR(stats.sent); - SENDINFO_DECR(s_info); - post sendTask(); - cleanup_outer: - return rc; - } - - event void Ieee154Send.sendDone(message_t *msg, error_t error) { - struct send_entry *s_entry = call SendQueue.head(); - - radioBusy = FALSE; - - // printf("sendDone: %p %i\n", msg, error); - - if (state == S_STOPPING) { - call RadioControl.stop(); - state = S_STOPPED; - goto done; - } - - s_entry->info->link_transmissions += (call PacketLink.getRetries(msg)); - s_entry->info->link_fragment_attempts++; - - if (!call PacketLink.wasDelivered(msg)) { - printf("sendDone: was not delivered! (%i tries)\n", - call PacketLink.getRetries(msg)); - s_entry->info->failed = TRUE; - signal IPLower.sendDone(s_entry->info); -/* if (s_entry->info->policy.dest[0] != 0xffff) */ -/* dbg("Drops", "drops: sendDone: frag was not delivered\n"); */ - // need to check for broadcast frames - // BLIP_STATS_INCR(stats.tx_drop); - } else if (s_entry->info->link_fragment_attempts == - s_entry->info->link_fragments) { - signal IPLower.sendDone(s_entry->info); - } - - done: - // kill off any pending fragments - SENDINFO_DECR(s_entry->info); - call FragPool.put(s_entry->msg); - call SendEntryPool.put(s_entry); - call SendQueue.dequeue(); - - post sendTask(); - } - -#if 0 - command struct tlv_hdr *IPExtensions.findTlv(struct ip6_ext *ext, uint8_t tlv_val) { - int len = ext->len - sizeof(struct ip6_ext); - struct tlv_hdr *tlv = (struct tlv_hdr *)(ext + 1); - while (len > 0) { - if (tlv->type == tlv_val) return tlv; - if (tlv->len == 0) return NULL; - tlv = (struct tlv_hdr *)(((uint8_t *)tlv) + tlv->len); - len -= tlv->len; - } - return NULL; - } -#endif - - - /* - * BlipStatistics interface - */ - command void BlipStatistics.get(ip_statistics_t *statistics) { -#ifdef BLIP_STATS_IP_MEM - stats.fragpool = call FragPool.size(); - stats.sendinfo = call SendInfoPool.size(); - stats.sendentry= call SendEntryPool.size(); - stats.sndqueue = call SendQueue.size(); - stats.heapfree = ip_malloc_freespace(); - printf("frag: %i sendinfo: %i sendentry: %i sendqueue: %i heap: %i\n", - stats.fragpool, - stats.sendinfo, - stats.sendentry, - stats.sndqueue, - stats.heapfree); -#endif - memcpy(statistics, &stats, sizeof(ip_statistics_t)); - - } - - command void BlipStatistics.clear() { - memclr((uint8_t *)&stats, sizeof(ip_statistics_t)); - } - -/* default event void IP.recv[uint8_t nxt_hdr](struct ip6_hdr *iph, */ -/* void *payload, */ -/* struct ip_metadata *meta) { */ -/* } */ - -/* default event void Multicast.recv[uint8_t scope](struct ip6_hdr *iph, */ -/* void *payload, */ -/* struct ip_metadata *meta) { */ -/* } */ -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Intro.java b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Intro.java deleted file mode 100644 index 66d2fee..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Intro.java +++ /dev/null @@ -1,1660 +0,0 @@ -/* - * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * -Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * -Redistribution in binary form must reproduct the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the distribution. - * - * Neither the name of Sun Microsystems, Inc. or the names of contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided "AS IS," without a warranty of any kind. ALL - * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING - * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE - * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT - * BE LIABLE FOR ANY DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT - * OF OR RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR ITS - * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST - * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, - * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY - * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN - * IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - * - * You acknowledge that Software is not designed, licensed or intended for - * use in the design, construction, operation or maintenance of any nuclear - * facility. - */ - - -package java2d; - -import java.awt.*; -import java.awt.event.*; -import java.awt.geom.*; -import java.awt.image.BufferedImage; -import java.awt.image.DataBuffer; -import java.awt.font.*; -import javax.swing.*; -import javax.swing.border.*; -import javax.swing.table.*; -import javax.swing.event.*; -import java.util.Vector; -import java.util.List; -import java.util.Arrays; - - - -/** - * Introduction to the Java2Demo. - * - * @version @(#)Intro.java 1.19 03/06/26 - * @author Brian Lichtenwalter - */ -public class Intro extends JPanel { - - static Color black = new Color(20, 20, 20); - static Color white = new Color(240, 240, 255); - static Color red = new Color(149, 43, 42); - static Color blue = new Color(94, 105, 176); - static Color yellow = new Color(255, 255, 140); - - static Surface surface; - private ScenesTable scenesTable; - private boolean doTable; - - - public Intro() { - EmptyBorder eb = new EmptyBorder(80,110,80,110); - BevelBorder bb = new BevelBorder(BevelBorder.LOWERED); - setBorder(new CompoundBorder(eb,bb)); - setLayout(new BorderLayout()); - setBackground(Color.gray); - setToolTipText("click for scene table"); - add(surface = new Surface()); - addMouseListener(new MouseAdapter() { - public void mouseClicked(MouseEvent e) { - removeAll(); - if ((doTable = !doTable)) { - setToolTipText("click for animation"); - surface.stop(); - if (scenesTable == null) { - scenesTable = new ScenesTable(); - } - add(scenesTable); - } else { - setToolTipText("click for scene table"); - surface.start(); - add(surface); - } - revalidate(); - repaint(); - } - }); - } - - - public void start() { - if (!doTable) { - surface.start(); - } - } - - - public void stop() { - if (!doTable) { - surface.stop(); - } - } - - - public static void main(String argv[]) { - final Intro intro = new Intro(); - WindowListener l = new WindowAdapter() { - public void windowClosing(WindowEvent e) {System.exit(0);} - public void windowDeiconified(WindowEvent e) { intro.start(); } - public void windowIconified(WindowEvent e) { intro.stop(); } - }; - JFrame f = new JFrame("Java2D Demo - Intro"); - f.addWindowListener(l); - f.getContentPane().add("Center", intro); - f.pack(); - Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); - int w = 720; - int h = 510; - f.setLocation(screenSize.width/2 - w/2, screenSize.height/2 - h/2); - f.setSize(w, h); - f.setVisible(true); - intro.start(); - } - - - /** - * ScenesTable is the list of scenes known to the Director. - * Scene participation, scene name and scene pause amount columns. - * Global animation delay for scene's steps. - */ - static class ScenesTable extends JPanel implements ActionListener, ChangeListener { - - private JTable table; - private TableModel dataModel; - - public ScenesTable() { - setBackground(Color.white); - setLayout(new BorderLayout()); - final String[] names = { "", "Scenes", "Pause" }; - - dataModel = new AbstractTableModel() { - public int getColumnCount() { return names.length; } - public int getRowCount() { return surface.director.size();} - public Object getValueAt(int row, int col) { - Surface.Scene scene = (Surface.Scene) surface.director.get(row); - if (col == 0) { - return scene.participate; - } else if (col == 1) { - return scene.name; - } else { - return scene.pauseAmt; - } - } - public String getColumnName(int col) {return names[col]; } - public Class getColumnClass(int c) { - return getValueAt(0, c).getClass(); - } - public boolean isCellEditable(int row, int col) { - return col != 1 ? true : false; - } - public void setValueAt(Object aValue, int row, int col) { - Surface.Scene scene = (Surface.Scene) surface.director.get(row); - if (col == 0) { - scene.participate = aValue; - } else if (col == 1) { - scene.name = aValue; - } else { - scene.pauseAmt = aValue; - } - } - }; - - table = new JTable(dataModel); - TableColumn col = table.getColumn(""); - col.setWidth(16); - col.setMinWidth(16); - col.setMaxWidth(20); - col = table.getColumn("Pause"); - col.setWidth(60); - col.setMinWidth(60); - col.setMaxWidth(60); - table.sizeColumnsToFit(0); - - JScrollPane scrollpane = new JScrollPane(table); - add(scrollpane); - - JPanel panel = new JPanel(new BorderLayout()); - JButton b = new JButton("Unselect All"); - b.setHorizontalAlignment(JButton.LEFT); - Font font = new Font("serif", Font.PLAIN, 10); - b.setFont(font); - b.addActionListener(this); - panel.add("West", b); - - JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 200, (int) surface.sleepAmt); - slider.addChangeListener(this); - TitledBorder tb = new TitledBorder(new EtchedBorder()); - tb.setTitleFont(font); - tb.setTitle("Anim delay = " + String.valueOf(surface.sleepAmt) + " ms"); - slider.setBorder(tb); - slider.setPreferredSize(new Dimension(140,40)); - slider.setMinimumSize(new Dimension(100,40)); - slider.setMaximumSize(new Dimension(180,40)); - panel.add("East", slider); - - add("South", panel); - } - - - public void actionPerformed(ActionEvent e) { - JButton b = (JButton) e.getSource(); - b.setSelected(!b.isSelected()); - b.setText(b.isSelected() ? "Select All" : "Unselect All"); - for (int i = 0; i < surface.director.size(); i++) { - Surface.Scene scene = (Surface.Scene) surface.director.get(i); - scene.participate = new Boolean(!b.isSelected()); - } - table.tableChanged(new TableModelEvent(dataModel)); - } - - - public void stateChanged(ChangeEvent e) { - JSlider slider = (JSlider) e.getSource(); - int value = slider.getValue(); - TitledBorder tb = (TitledBorder) slider.getBorder(); - tb.setTitle("Anim delay = " + String.valueOf(value) + " ms"); - surface.sleepAmt = (long) value; - slider.repaint(); - } - } // End ScenesTable class - - - - /** - * Surface is the stage where the Director plays its scenes. - */ - static class Surface extends JPanel implements Runnable { - - static Surface surf; - static Image cupanim, java_logo; - static BufferedImage bimg; - public Director director; - public int index; - public long sleepAmt = 30; - private Thread thread; - - - public Surface() { - surf = this; - setBackground(black); - setLayout(new BorderLayout()); - addMouseListener(new MouseAdapter() { - public void mouseClicked(MouseEvent e) { - if (thread == null) start(); else stop(); - } - }); - cupanim = DemoImages.getImage("cupanim.gif", this); - java_logo = DemoImages.getImage("java_logo.png", this); - director = new Director(); - } - - - static FontMetrics getMetrics(Font font) { - return surf.getFontMetrics(font); - } - - - public void paint(Graphics g) { - Dimension d = getSize(); - if (d.width <= 0 || d.height <= 0) { - return; - } - if (bimg == null || bimg.getWidth() != d.width || bimg.getHeight() != d.height) { - bimg = getGraphicsConfiguration().createCompatibleImage(d.width, d.height); - // reset future scenes - for (int i = index+1; i < director.size(); i++) { - ((Scene) director.get(i)).reset(d.width, d.height); - } - } - - Scene scene = (Scene) director.get(index); - if (scene.index <= scene.length) { - if (thread != null) { - scene.step(d.width, d.height); - } - - Graphics2D g2 = bimg.createGraphics(); - g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); - g2.setBackground(getBackground()); - g2.clearRect(0, 0, d.width, d.height); - - scene.render(d.width, d.height, g2); - - if (thread != null) { - // increment scene.index after scene.render - scene.index++; - } - g2.dispose(); - } - g.drawImage(bimg, 0, 0, this); - } - - - - public void start() { - if (thread == null) { - thread = new Thread(this); - thread.setPriority(Thread.MIN_PRIORITY); - thread.setName("Intro"); - thread.start(); - } - } - - - public synchronized void stop() { - if (thread != null) { - thread.interrupt(); - } - thread = null; - notifyAll(); - } - - - public void reset() { - index = 0; - Dimension d = getSize(); - for (int i = 0; i < director.size(); i++) { - ((Scene) director.get(i)).reset(d.width, d.height); - } - } - - - public void run() { - - Thread me = Thread.currentThread(); - - while (thread == me && !isShowing() || getSize().width <= 0) { - try { - thread.sleep(500); - } catch (InterruptedException e) { return; } - } - - if (index == 0) { - reset(); - } - - while (thread == me) { - Scene scene = (Scene) director.get(index); - if (((Boolean) scene.participate).booleanValue()) { - repaint(); - try { - thread.sleep(sleepAmt); - } catch (InterruptedException e) { break; } - if (scene.index > scene.length) { - scene.pause(thread); - if (++index >= director.size()) { - reset(); - } - } - } else { - if (++index >= director.size()) { - reset(); - } - } - } - thread = null; - } - - - - /** - * Part is a piece of the scene. Classes must implement Part - * inorder to participate in a scene. - */ - interface Part { - public void reset(int newwidth, int newheight); - public void step(int w, int h); - public void render(int w, int h, Graphics2D g2); - public int getBegin(); - public int getEnd(); - } - - - - /** - * Director is the holder of the scenes, their names & pause amounts - * between scenes. - */ - static class Director extends Vector { - - GradientPaint gp = new GradientPaint(0,40,blue,38,2,black); - Font f1 = new Font("serif", Font.PLAIN, 200); - Font f2 = new Font("serif", Font.PLAIN, 120); - Font f3 = new Font("serif", Font.PLAIN, 72); - Object parts[][][] = { - { { "J - scale text on gradient", "0" }, - { new GpE(GpE.BURI, black, blue, 0, 20), - new TxE("J", f1, TxE.SCI, yellow, 2, 20) } }, - { { "2 - scale & rotate text on gradient" , "0" }, - { new GpE(GpE.BURI, blue, black, 0, 22), - new TxE("2", f1, TxE.RI | TxE.SCI, yellow, 2, 22) } }, - { { "D - scale text on gradient", "0" }, - { new GpE(GpE.BURI, black, blue, 0, 20), - new TxE("D", f1, TxE.SCI, yellow, 2, 20) } }, - { { "Java2D - scale & rotate text on gradient", "1000" }, - { new GpE(GpE.SIH, blue, black, 0, 40), - new TxE("Java2D", f2, TxE.RI | TxE.SCI, yellow, 0, 40) }}, - { { "Previous scene dither dissolve out", "0"}, - { new DdE(0, 20, 1) }}, - { { "Graphics Features", "999" }, - { new Temp(Temp.RECT, null, 0, 15), - new Temp(Temp.IMG, java_logo, 2, 15), - new Temp(Temp.RNA | Temp.INA, java_logo, 16, 130), - new Features(Features.GRAPHICS, 16, 130) }}, - { { "Java2D - texture text on gradient", "1000"}, - { new GpE(GpE.WI, blue, black, 0, 20), - new GpE(GpE.WD, blue, black, 21, 40), - new TpE(TpE.OI | TpE.NF, black, yellow, 4, 0, 10), - new TpE(TpE.OD | TpE.NF, black, yellow, 4, 11, 20), - new TpE(TpE.OI | TpE.NF | TpE.HAF, black, yellow,5,21,40), - new TxE("Java2D", f2, 0, null, 0, 40) }}, - { { "Previous scene random close out", "0"}, - { new CoE(CoE.RAND, 0, 20) } }, - { { "Text Features", "999" }, - { new Temp(Temp.RECT, null, 0, 15), - new Temp(Temp.IMG, java_logo, 2, 15), - new Temp(Temp.RNA | Temp.INA, java_logo, 16, 130), - new Features(Features.TEXT, 16, 130) }}, - { { "Java2D - composite text on texture", "1000"}, - { new TpE(TpE.RI, black, gp, 40, 0, 20), - new TpE(TpE.RD, black, gp, 40, 21, 40), - new TpE(TpE.RI, black, gp, 40, 41, 60), - new TxE("Java2D", f2, TxE.AC, yellow, 0, 60) }}, - { { "Previous scene dither dissolve out", "0"}, - { new DdE(0, 20, 4) }}, - { { "Imaging Features", "999" }, - { new Temp(Temp.RECT, null, 0, 15), - new Temp(Temp.IMG, java_logo, 2, 15), - new Temp(Temp.RNA | Temp.INA, java_logo, 16, 130), - new Features(Features.IMAGES, 16, 130) }}, - { { "Java2D - text on gradient", "1000" }, - { new GpE(GpE.SDH, blue, black, 0, 20), - new GpE(GpE.SIH, blue, black, 21, 40), - new GpE(GpE.SDH, blue, black, 41, 50), - new GpE(GpE.INC | GpE.NF, red, yellow, 0, 50), - new TxE("Java2D", f2, TxE.NOP, null, 0, 50) }}, - { { "Previous scene ellipse close out", "0"}, - { new CoE(CoE.OVAL, 0, 20) } }, - { { "Color Features", "999" }, - { new Temp(Temp.RECT, null, 0, 15), - new Temp(Temp.IMG, java_logo, 2, 15), - new Temp(Temp.RNA | Temp.INA, java_logo, 16, 99), - new Features(Features.COLOR, 16, 99) }}, - { { "Java2D - composite and rotate text on paints", "2000" }, - { new GpE(GpE.BURI, black, blue, 0, 20), - new GpE(GpE.BURD, black, blue, 21, 30), - new TpE(TpE.OI | TpE.HAF, black, blue, 10, 31, 40), - new TxE("Java2D", f2, TxE.AC | TxE.RI, yellow, 0, 40) }}, - { { "Previous scene subimage transform out", "0" }, - { new SiE(60, 60, 0, 40) }}, - { { "CREDITS - transform in", "1000" }, - { new LnE(LnE.ACI | LnE.ZOOMI | LnE.RI, 0, 60), - new TxE("CREDITS", f3, TxE.AC | TxE.SCI, Color.red,20,30), - new TxE("CREDITS", f3, TxE.SCXD, Color.red, 31, 38), - new TxE("CREDITS", f3, TxE.SCXI, Color.red, 39, 48), - new TxE("CREDITS", f3, TxE.SCXD, Color.red, 49, 54), - new TxE("CREDITS", f3, TxE.SCXI, Color.red, 55, 60) }}, - { { "CREDITS - transform out", "0" }, - { new LnE(LnE.ACD | LnE.ZOOMD | LnE.RD, 0, 45), - new TxE("CREDITS", f3, 0, Color.red, 0, 9), - new TxE("CREDITS", f3, TxE.SCD | TxE.RD, Color.red,10,30)}}, - { { "Contributors", "1000" }, - { new Temp(Temp.RECT, null, 0, 30), - new Temp(Temp.IMG, cupanim, 4, 30), - new Temp(Temp.RNA | Temp.INA, cupanim, 31, 200), - new Contributors(34, 200) } }, - }; - - - public Director() { - for (int i = 0; i < parts.length; i++) { - Vector v = new Vector(); - for (int j = 0; j < parts[i][1].length; j++) { - v.addElement(parts[i][1][j]); - } - addElement(new Scene(v, parts[i][0][0], parts[i][0][1])); - } - } - } - - - - /** - * Scene is the manager of the parts. - */ - static class Scene extends Object { - public Object name; - public Object participate = new Boolean(true); - public Object pauseAmt; - public Vector parts; - public int index; - public int length; - - public Scene(Vector parts, Object name, Object pauseAmt) { - this.name = name; - this.parts = parts; - this.pauseAmt = pauseAmt; - for (int i = 0; i < parts.size(); i++) { - if (((Part) parts.get(i)).getEnd() > length) { - length = ((Part) parts.get(i)).getEnd(); - } - } - } - - public void reset(int w, int h) { - index = 0; - for (int i = 0; i < parts.size(); i++) { - ((Part) parts.get(i)).reset(w, h); - } - } - - public void step(int w, int h) { - for (int i = 0; i < parts.size(); i++) { - Part part = (Part) parts.get(i); - if (index >= part.getBegin() && index <= part.getEnd()) { - part.step(w, h); - } - } - } - - public void render(int w, int h, Graphics2D g2) { - for (int i = 0; i < parts.size(); i++) { - Part part = (Part) parts.get(i); - if (index >= part.getBegin() && index <= part.getEnd()) { - part.render(w, h, g2); - } - } - } - - public void pause(Thread thread) { - try { - thread.sleep(Long.parseLong((String) pauseAmt)); - } catch (Exception e) { } - System.gc(); - } - } // End Scene class - - - - /** - * Text Effect. Transformation of characters. Clip or fill. - */ - static class TxE implements Part { - - static final int INC = 1; - static final int DEC = 2; - static final int R = 4; // rotate - static final int RI = R | INC; - static final int RD = R | DEC; - static final int SC = 8; // scale - static final int SCI = SC | INC; - static final int SCD = SC | DEC; - static final int SCX = 16; // scale invert x - static final int SCXI = SCX | SC | INC; - static final int SCXD = SCX | SC | DEC; - static final int SCY = 32; // scale invert y - static final int SCYI = SCY | SC | INC; - static final int SCYD = SCY | SC | DEC; - static final int AC = 64; // AlphaComposite - static final int CLIP = 128; // Clipping - static final int NOP = 512; // No Paint - private int beginning, ending; - private int type; - private double rIncr, sIncr; - private double sx, sy, rotate; - private Shape shapes[], txShapes[]; - private int sw; - private int numRev; - private Paint paint; - - - public TxE(String text, - Font font, - int type, - Paint paint, - int beg, - int end) { - this.type = type; - this.paint = paint; - this.beginning = beg; - this.ending = end; - - setIncrements(2); - - char[] chars = text.toCharArray(); - shapes = new Shape[chars.length]; - txShapes = new Shape[chars.length]; - FontRenderContext frc = new FontRenderContext(null,true,true); - TextLayout tl = new TextLayout(text, font, frc); - sw = (int) tl.getOutline(null).getBounds().getWidth(); - for (int j = 0; j < chars.length; j++) { - String s = String.valueOf(chars[j]); - shapes[j] = new TextLayout(s, font, frc).getOutline(null); - } - } - - - public void setIncrements(double numRevolutions) { - this.numRev = (int) numRevolutions; - rIncr = 360.0 / ((ending - beginning) / numRevolutions); - sIncr = 1.0 / (ending - beginning); - if ((type & SCX) != 0 || (type & SCY) != 0) { - sIncr *= 2; - } - if ((type & DEC) != 0) { - rIncr = -rIncr; - sIncr = -sIncr; - } - } - - - public void reset(int w, int h) { - if (type == SCXI) { - sx = -1.0; sy = 1.0; - } else if (type == SCYI) { - sx = 1.0; sy = -1.0; - } else { - sx = sy = (type & DEC) != 0 ? 1.0 : 0.0; - } - rotate = 0; - } - - - public void step(int w, int h) { - - float charWidth = w/2-sw/2; - - for (int i = 0; i < shapes.length; i++) { - AffineTransform at = new AffineTransform(); - Rectangle2D maxBounds = shapes[i].getBounds(); - at.translate(charWidth, h/2+maxBounds.getHeight()/2); - charWidth += (float) maxBounds.getWidth() + 1; - Shape shape = at.createTransformedShape(shapes[i]); - Rectangle2D b1 = shape.getBounds2D(); - - if ((type & R) != 0) { - at.rotate(Math.toRadians(rotate)); - } - if ((type & SC) != 0) { - at.scale(sx, sy); - } - shape = at.createTransformedShape(shapes[i]); - Rectangle2D b2 = shape.getBounds2D(); - - double xx = (b1.getX()+b1.getWidth()/2) - - (b2.getX()+b2.getWidth()/2); - double yy = (b1.getY()+b1.getHeight()/2) - - (b2.getY()+b2.getHeight()/2); - AffineTransform toCenterAT = new AffineTransform(); - toCenterAT.translate(xx, yy); - toCenterAT.concatenate(at); - txShapes[i] = toCenterAT.createTransformedShape(shapes[i]); - } - // avoid over rotation - if (Math.abs(rotate) <= numRev * 360) { - rotate += rIncr; - if ((type & SCX) != 0) { - sx += sIncr; - } else if ((type & SCY) != 0) { - sy += sIncr; - } else { - sx += sIncr; sy += sIncr; - } - } - } - - - public void render(int w, int h, Graphics2D g2) { - Composite saveAC = null; - if ((type & AC) != 0 && sx > 0 && sx < 1) { - saveAC = g2.getComposite(); - g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, (float) sx)); - } - GeneralPath path = null; - if ((type & CLIP) != 0) { - path = new GeneralPath(); - } - if (paint != null) { - g2.setPaint(paint); - } - for (int i = 0; i < txShapes.length; i++) { - if ((type & CLIP) != 0) { - path.append(txShapes[i], false); - } else { - g2.fill(txShapes[i]); - } - } - if ((type & CLIP) != 0) { - g2.clip(path); - } - if (saveAC != null) { - g2.setComposite(saveAC); - } - } - - - public int getBegin() { - return beginning; - } - - public int getEnd() { - return ending; - } - } // End TxE class - - - - - /** - * GradientPaint Effect. Burst, split, horizontal and - * vertical gradient fill effects. - */ - static class GpE implements Part { - - static final int INC = 1; // increasing - static final int DEC = 2; // decreasing - static final int CNT = 4; // center - static final int WID = 8; // width - static final int WI = WID | INC; - static final int WD = WID | DEC; - static final int HEI = 16; // height - static final int HI = HEI | INC; - static final int HD = HEI | DEC; - static final int SPL = 32 | CNT; // split - static final int SIW = SPL | INC | WID; - static final int SDW = SPL | DEC | WID; - static final int SIH = SPL | INC | HEI; - static final int SDH = SPL | DEC | HEI; - static final int BUR = 64 | CNT; // burst - static final int BURI = BUR | INC; - static final int BURD = BUR | DEC; - static final int NF = 128; // no fill - private Color c1, c2; - private int beginning, ending; - private float incr, index; - private Vector rect = new Vector(); - private Vector grad = new Vector(); - private int type; - - - public GpE(int type, Color c1, Color c2, int beg, int end) { - this.type = type; - this.c1 = c1; - this.c2 = c2; - this.beginning = beg; - this.ending = end; - } - - - public void reset(int w, int h) { - incr = 1.0f / (ending - beginning); - if ((type & CNT) != 0) { - incr /= 2.3f; - } - if ((type & CNT) != 0 && (type & INC) != 0) { - index = 0.5f; - } else if ((type & DEC) != 0) { - index = 1.0f; - incr = -incr; - } else { - index = 0.0f; - } - index += incr; - } - - - public void step(int w, int h) { - rect.clear(); - grad.clear(); - - if ((type & WID) != 0) { - float w2 = 0, x1 = 0, x2 = 0; - if ((type & SPL) != 0) { - w2 = w * 0.5f; - x1 = w * (1.0f - index); - x2 = w * index; - } else { - w2 = w * index; - x1 = x2 = w2; - } - rect.addElement(new Rectangle2D.Float(0, 0, w2, h)); - rect.addElement(new Rectangle2D.Float(w2, 0, w-w2, h)); - grad.addElement(new GradientPaint(0,0,c1,x1,0,c2)); - grad.addElement(new GradientPaint(x2,0,c2,w,0,c1)); - } else if ((type & HEI) != 0) { - float h2 = 0, y1 = 0, y2 = 0; - if ((type & SPL) != 0) { - h2 = h * 0.5f; - y1 = h * (1.0f - index); - y2 = h * index; - } else { - h2 = h * index; - y1 = y2 = h2; - } - rect.addElement(new Rectangle2D.Float(0, 0, w, h2)); - rect.addElement(new Rectangle2D.Float(0, h2, w, h-h2)); - grad.addElement(new GradientPaint(0,0,c1,0,y1,c2)); - grad.addElement(new GradientPaint(0,y2,c2,0,h,c1)); - } else if ((type & BUR) != 0) { - - float w2 = w/2; - float h2 = h/2; - - rect.addElement(new Rectangle2D.Float(0, 0, w2, h2)); - rect.addElement(new Rectangle2D.Float(w2, 0, w2, h2)); - rect.addElement(new Rectangle2D.Float(0, h2, w2, h2)); - rect.addElement(new Rectangle2D.Float(w2, h2, w2, h2)); - - float x1 = w * (1.0f - index); - float x2 = w * index; - float y1 = h * (1.0f - index); - float y2 = h * index; - - grad.addElement(new GradientPaint(0,0,c1,x1,y1,c2)); - grad.addElement(new GradientPaint(w,0,c1,x2,y1,c2)); - grad.addElement(new GradientPaint(0,h,c1,x1,y2,c2)); - grad.addElement(new GradientPaint(w,h,c1,x2,y2,c2)); - } else if ((type & NF) != 0) { - float x = w * index; - float y = h * index; - grad.addElement(new GradientPaint(0,0,c1,0,y,c2)); - } - - if ((type & INC) != 0 || (type & DEC) != 0) { - index += incr; - } - } - - - public void render(int w, int h, Graphics2D g2) { - g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_OFF); - for (int i = 0; i < grad.size(); i++) { - g2.setPaint((GradientPaint) grad.get(i)); - if ((type & NF) == 0) { - g2.fill((Rectangle2D) rect.get(i)); - } - } - g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); - } - - public int getBegin() { - return beginning; - } - - public int getEnd() { - return ending; - } - } // End GpE class - - - - /** - * TexturePaint Effect. Expand and collapse a texture. - */ - static class TpE implements Part { - - static final int INC = 1; // increasing - static final int DEC = 2; // decreasing - static final int OVAL = 4; // oval - static final int RECT = 8; // rectangle - static final int HAF = 16; // half oval or rect size - static final int OI = OVAL | INC; - static final int OD = OVAL | DEC; - static final int RI = RECT | INC; - static final int RD = RECT | DEC; - static final int NF = 32; // no fill - private Paint p1, p2; - private int beginning, ending; - private float incr, index; - private TexturePaint texture; - private int type; - private int size; - private BufferedImage bimg; - private Rectangle rect; - - - public TpE(int type, Paint p1, Paint p2, int size, - int beg, int end) { - this.type = type; - this.p1 = p1; - this.p2 = p2; - this.beginning = beg; - this.ending = end; - setTextureSize(size); - } - - - public void setTextureSize(int size) { - this.size = size; - bimg = new BufferedImage(size,size,BufferedImage.TYPE_INT_RGB); - rect = new Rectangle(0,0,size,size); - } - - - public void reset(int w, int h) { - incr = (float) (size) / (float) (ending - beginning); - if ((type & HAF) != 0) { - incr /= 2; - } - if ((type & DEC) != 0) { - index = size; - if ((type & HAF) != 0) { - index /= 2; - } - incr = -incr; - } else { - index = 0.0f; - } - index += incr; - } - - - public void step(int w, int h) { - Graphics2D g2 = bimg.createGraphics(); - g2.setPaint(p1); - g2.fillRect(0,0,size,size); - g2.setPaint(p2); - if ((type & OVAL) != 0) { - g2.fill(new Ellipse2D.Float(0,0,index,index)); - } else if ((type & RECT) != 0) { - g2.fill(new Rectangle2D.Float(0,0,index,index)); - } - texture = new TexturePaint(bimg, rect); - g2.dispose(); - index += incr; - } - - - public void render(int w, int h, Graphics2D g2) { - g2.setPaint(texture); - if ((type & NF) == 0) { - g2.fillRect(0, 0, w, h); - } - } - - public int getBegin() { - return beginning; - } - - public int getEnd() { - return ending; - } - } // End TpE class - - - - /** - * Close out effect. Close out the buffered image with different - * geometry shapes. - */ - static class CoE implements Part { - - static final int WID = 1; - static final int HEI = 2; - static final int OVAL = 4; - static final int RECT = 8; - static final int RAND = 16; - static final int ARC = 32; - private int type; - private int beginning, ending; - private BufferedImage bimg; - private Shape shape; - private double zoom, extent; - private double zIncr, eIncr; - private boolean doRandom; - - - public CoE(int type, int beg, int end) { - this.type = type; - this.beginning = beg; - this.ending = end; - zIncr = -(2.0 / (ending - beginning)); - eIncr = 360.0 / (ending - beginning); - doRandom = (type & RAND) != 0; - } - - - public void reset(int w, int h) { - if (doRandom) { - int num = (int) (Math.random() * 5.0); - switch (num) { - case 0 : type = OVAL; break; - case 1 : type = RECT; break; - case 2 : type = RECT | WID; break; - case 3 : type = RECT | HEI; break; - case 4 : type = ARC; break; - default : type = OVAL; - } - } - shape = null; - bimg = null; - extent = 360.0; - zoom = 2.0; - } - - - public void step(int w, int h) { - if (bimg == null) { - int biw = Surface.bimg.getWidth(); - int bih = Surface.bimg.getHeight(); - bimg = new BufferedImage(biw, bih, BufferedImage.TYPE_INT_RGB); - Graphics2D big = bimg.createGraphics(); - big.drawImage(Surface.bimg, 0, 0, null); - } - double z = Math.min(w, h) * zoom; - if ((type & OVAL) != 0) { - shape = new Ellipse2D.Double(w/2-z/2,h/2-z/2,z,z); - } else if ((type & ARC) != 0) { - shape = new Arc2D.Double(-100,-100,w+200,h+200,90,extent,Arc2D.PIE); - extent -= eIncr; - } else if ((type & RECT) != 0) { - if ((type & WID) != 0) { - shape = new Rectangle2D.Double(w/2-z/2,0,z,h); - } else if ((type & HEI) != 0) { - shape = new Rectangle2D.Double(0,h/2-z/2,w,z); - } else { - shape = new Rectangle2D.Double(w/2-z/2,h/2-z/2,z,z); - } - } - zoom += zIncr; - } - - - public void render(int w, int h, Graphics2D g2) { - g2.clip(shape); - g2.drawImage(bimg, 0, 0, null); - } - - public int getBegin() { - return beginning; - } - - public int getEnd() { - return ending; - } - } // End CoE class - - - - /** - * Dither Dissolve Effect. For each successive step in the animation, - * a pseudo-random starting horizontal position is chosen using list, - * and then the corresponding points created from xlist and ylist are - * blacked out for the current "chunk". The x and y chunk starting - * positions are each incremented by the associated chunk size, and - * this process is repeated for the number of "steps" in the - * animation, causing an equal number of pseudo-randomly picked - * "blocks" to be blacked out during each step of the animation. - */ - static class DdE implements Part { - - private int beginning, ending; - private BufferedImage bimg; - private Graphics2D big; - private List list, xlist, ylist; - private int xeNum, yeNum; // element number - private int xcSize, ycSize; // chunk size - private int inc; - private int blocksize; - - - public DdE(int beg, int end, int blocksize) { - this.beginning = beg; - this.ending = end; - this.blocksize = blocksize; - } - - private void createShuffledLists() { - int width = bimg.getWidth(); - int height = bimg.getHeight(); - Integer xarray[] = new Integer[width]; - Integer yarray[] = new Integer[height]; - Integer array[] = new Integer[ending - beginning + 1]; - for (int i = 0; i < xarray.length; i++) { - xarray[i] = new Integer(i); - } - for (int j = 0; j < yarray.length; j++) { - yarray[j] = new Integer(j); - } - for (int k = 0; k < array.length; k++) { - array[k] = new Integer(k); - } - java.util.Collections.shuffle(xlist = Arrays.asList(xarray)); - java.util.Collections.shuffle(ylist = Arrays.asList(yarray)); - java.util.Collections.shuffle(list = Arrays.asList(array)); - } - - public void reset(int w, int h) { - bimg = null; - } - - public void step(int w, int h) { - if (bimg == null) { - int biw = Surface.bimg.getWidth(); - int bih = Surface.bimg.getHeight(); - bimg = new BufferedImage(biw, bih, BufferedImage.TYPE_INT_RGB); - createShuffledLists(); - big = bimg.createGraphics(); - big.drawImage(Surface.bimg, 0, 0, null); - xcSize = (xlist.size() / (ending - beginning)) + 1; - ycSize = (ylist.size() / (ending - beginning)) + 1; - xeNum = 0; - inc = 0; - } - xeNum = xcSize * ((Integer)list.get(inc)).intValue(); - yeNum = -ycSize; - inc++; - } - - - public void render(int w, int h, Graphics2D g2) { - big.setColor(black); - - for (int k = 0; k <= (ending - beginning); k++) { - if ((xeNum + xcSize) > xlist.size()) { - xeNum = 0; - } else { - xeNum += xcSize; - } - yeNum += ycSize; - - for (int i = xeNum; i < xeNum+xcSize && i < xlist.size(); i++) { - for (int j = yeNum; j < yeNum+ycSize && j < ylist.size(); j++) { - int xval = ((Integer)xlist.get(i)).intValue(); - int yval = ((Integer)ylist.get(j)).intValue(); - if (((xval % blocksize) == 0) && - ((yval % blocksize) == 0)) { - big.fillRect(xval, yval, blocksize, blocksize); - } - } - } - } - - g2.drawImage(bimg, 0, 0, null); - } - - public int getBegin() { - return beginning; - } - - public int getEnd() { - return ending; - } - } // End DdE class - - - /** - * Subimage effect. Subimage the scene's buffered - * image then rotate and scale down the subimages. - */ - static class SiE implements Part { - - private int beginning, ending; - private BufferedImage bimg; - private double rIncr, sIncr; - private double scale, rotate; - private int siw, sih; - private Vector subs = new Vector(20); - private Vector pts = new Vector(20); - - - public SiE(int siw, int sih, int beg, int end) { - this.siw = siw; - this.sih = sih; - this.beginning = beg; - this.ending = end; - rIncr = 360.0 / (ending - beginning); - sIncr = 1.0 / (ending - beginning); - } - - - public void reset(int w, int h) { - scale = 1.0; - rotate = 0.0; - bimg = null; - subs.clear(); - pts.clear(); - } - - - public void step(int w, int h) { - if (bimg == null) { - int biw = Surface.bimg.getWidth(); - int bih = Surface.bimg.getHeight(); - bimg = new BufferedImage(biw, bih, BufferedImage.TYPE_INT_RGB); - Graphics2D big = bimg.createGraphics(); - big.drawImage(Surface.bimg, 0, 0, null); - for (int x = 0; x < w && scale > 0.0; x+=siw) { - int ww = x+siw < w ? siw : w-x; - for (int y = 0; y < h; y+=sih) { - int hh = y+sih < h ? sih : h-y; - subs.addElement(bimg.getSubimage(x,y,ww,hh)); - pts.addElement(new Point(x, y)); - } - } - } - - rotate += rIncr; - scale -= sIncr; - } - - - public void render(int w, int h, Graphics2D g2) { - AffineTransform saveTx = g2.getTransform(); - g2.setColor(blue); - for (int i = 0; i < subs.size() && scale > 0.0; i++) { - BufferedImage bi = (BufferedImage) subs.get(i); - Point p = (Point) pts.get(i); - int ww = bi.getWidth(); - int hh = bi.getHeight(); - AffineTransform at = new AffineTransform(); - at.rotate(Math.toRadians(rotate), p.x+ww/2, p.y+hh/2); - at.translate(p.x, p.y); - at.scale(scale, scale); - - Rectangle b1 = new Rectangle(0, 0, ww, hh); - Shape shape = at.createTransformedShape(b1); - Rectangle2D b2 = shape.getBounds2D(); - double xx = (p.x+ww/2) - (b2.getX()+b2.getWidth()/2); - double yy = (p.y+hh/2) - (b2.getY()+b2.getHeight()/2); - AffineTransform toCenterAT = new AffineTransform(); - toCenterAT.translate(xx, yy); - toCenterAT.concatenate(at); - - g2.setTransform(toCenterAT); - g2.drawImage(bi, 0, 0, null); - g2.draw(b1); - } - g2.setTransform(saveTx); - } - - public int getBegin() { - return beginning; - } - - public int getEnd() { - return ending; - } - } // End SiE class - - - - - /** - * Line Effect. Flattened ellipse with lines from the center - * to the edge. Expand or collapse the ellipse. Fade in or out - * the lines. - */ - static class LnE implements Part { - - static final int INC = 1; - static final int DEC = 2; - static final int R = 4; // rotate - static final int RI = R | INC; - static final int RD = R | DEC; - static final int ZOOM = 8; // zoom - static final int ZOOMI = ZOOM | INC; - static final int ZOOMD = ZOOM | DEC; - static final int AC = 32; // AlphaComposite - static final int ACI = 32 | INC; - static final int ACD = 32 | DEC; - private int beginning, ending; - private double rIncr, rotate; - private double zIncr, zoom; - private Vector pts = new Vector(); - private float alpha, aIncr; - private int type; - - - public LnE(int type, int beg, int end) { - this.type = type; - this.beginning = beg; - this.ending = end; - rIncr = 360.0 / (ending - beginning); - aIncr = 0.9f / (ending - beginning); - zIncr = 2.0 / (ending - beginning); - if ((type & DEC) != 0) { - rIncr = -rIncr; - aIncr = -aIncr; - zIncr = -zIncr; - } - } - - - public void generatePts(int w, int h, double sizeF) { - pts.clear(); - double size = Math.min(w, h) * sizeF; - Ellipse2D ellipse = new Ellipse2D.Double(w/2-size/2,h/2-size/2,size,size); - PathIterator pi = ellipse.getPathIterator(null, 0.8); - while ( !pi.isDone() ) { - double[] pt = new double[6]; - switch ( pi.currentSegment(pt) ) { - case FlatteningPathIterator.SEG_MOVETO: - case FlatteningPathIterator.SEG_LINETO: - pts.addElement(new Point2D.Double(pt[0], pt[1])); - } - pi.next(); - } - } - - - public void reset(int w, int h) { - if ((type & DEC) != 0) { - rotate = 360; - alpha = 1.0f; - zoom = 2.0; - } else { - rotate = alpha = 0; - zoom = 0; - } - if ((type & ZOOM) == 0) { - generatePts(w, h, 0.5); - } - } - - - public void step(int w, int h) { - if ((type & ZOOM) != 0) { - generatePts(w, h, zoom += zIncr); - } - if ((type & RI) != 0 || (type & RI) != 0) { - rotate += rIncr; - } - if ((type & ACI) != 0 || (type & ACD) != 0) { - alpha += aIncr; - } - } - - - public void render(int w, int h, Graphics2D g2) { - Composite saveAC = null; - if ((type & AC) != 0 && alpha >= 0 && alpha <= 1) { - saveAC = g2.getComposite(); - g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha)); - } - AffineTransform saveTx = null; - if ((type & R) != 0) { - saveTx = g2.getTransform(); - AffineTransform at = new AffineTransform(); - at.rotate(Math.toRadians(rotate), w/2, h/2); - g2.setTransform(at); - } - Point2D p1 = new Point2D.Double(w/2, h/2); - g2.setColor(Color.yellow); - for (int i = 0; i < pts.size()-1; i++) { - g2.draw(new Line2D.Float(p1, (Point2D) pts.get(i))); - } - if (saveTx != null) { - g2.setTransform(saveTx); - } - if (saveAC != null) { - g2.setComposite(saveAC); - } - } - - public int getBegin() { - return beginning; - } - - public int getEnd() { - return ending; - } - } // End LnE class - - - - /** - * Template for Features & Contributors consisting of translating - * blue and red rectangles and an image going from transparent to - * opaque. - */ - static class Temp implements Part { - static final int NOANIM = 1; - static final int RECT = 2; - static final int RNA = RECT | NOANIM; - static final int IMG = 4; - static final int INA = IMG | NOANIM; - private int beginning, ending; - private float alpha, aIncr; - private int type; - private Rectangle rect1, rect2; - private int x, y, xIncr, yIncr; - private Image img; - - - public Temp(int type, Image img, int beg, int end) { - this.type = type; - this.img = img; - this.beginning = beg; - this.ending = end; - aIncr = 0.9f / (ending - beginning); - if ((type & NOANIM) != 0) { - alpha = 1.0f; - } - } - - - - public void reset(int w, int h) { - rect1 = new Rectangle(8, 20, w-20, 30); - rect2 = new Rectangle(20, 8, 30, h-20); - if ((type & NOANIM) == 0) { - alpha = 0.0f; - xIncr = w / (ending - beginning); - yIncr = h / (ending - beginning); - x = w+(int)(xIncr*1.4); - y = h+(int)(yIncr*1.4); - } - } - - - public void step(int w, int h) { - if ((type & NOANIM) != 0) { - return; - } - if ((type & RECT) != 0) { - rect1.setLocation(x-=xIncr, 20); - rect2.setLocation(20, y-=yIncr); - } - if ((type & IMG) != 0) { - alpha += aIncr; - } - } - - - public void render(int w, int h, Graphics2D g2) { - if ((type & RECT) != 0) { - g2.setColor(blue); - g2.fill(rect1); - g2.setColor(red); - g2.fill(rect2); - } - if ((type & IMG) != 0) { - Composite saveAC = g2.getComposite(); - if (alpha >= 0 && alpha <= 1) { - g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha)); - } - g2.drawImage(img, 30, 30, null); - g2.setComposite(saveAC); - } - } - - public int getBegin() { - return beginning; - } - - public int getEnd() { - return ending; - } - } // End Temp class - - - - /** - * Features of Java2D. Single character advancement effect. - */ - static class Features implements Part { - - static final int GRAPHICS = 0; - static final int TEXT = 1; - static final int IMAGES = 2; - static final int COLOR = 3; - static Font font1 = new Font("serif", Font.BOLD, 38); - static Font font2 = new Font("serif", Font.PLAIN, 24); - static FontMetrics fm1 = Surface.getMetrics(font1); - static FontMetrics fm2 = Surface.getMetrics(font2); - static String table[][] = - {{ "Graphics", "Antialiased rendering", "Bezier paths", - "Transforms", "Compositing", "Stroking parameters" }, - { "Text", "Extended font support", - "Advanced text layout", "Dynamic font loading", - "AttributeSets for font customization" }, - { "Images", "Flexible image layouts", - "Extended imaging operations", - " Convolutions, Lookup Tables", - "RenderableImage interface"}, - { "Color", "ICC profile support", "Color conversion", - "Arbitrary color spaces"} }; - private String list[]; - private int beginning, ending; - private int strH; - private int endIndex, listIndex; - private Vector v = new Vector(); - - - public Features(int type, int beg, int end) { - list = table[type]; - this.beginning = beg; - this.ending = end; - } - - - public void reset(int w, int h) { - strH = (int) (fm2.getAscent()+fm2.getDescent()); - endIndex = 1; - listIndex = 0; - v.clear(); - v.addElement(list[listIndex].substring(0,endIndex)); - } - - - public void step(int w, int h) { - if (listIndex < list.length) { - if (++endIndex > list[listIndex].length()) { - if (++listIndex < list.length) { - endIndex = 1; - v.addElement(list[listIndex].substring(0,endIndex)); - } - } else { - v.set(listIndex, list[listIndex].substring(0,endIndex)); - } - } - } - - - public void render(int w, int h, Graphics2D g2) { - g2.setColor(white); - g2.setFont(font1); - g2.drawString((String) v.get(0), 90, 85); - g2.setFont(font2); - for (int i = 1, y = 90; i < v.size(); i++) { - g2.drawString((String) v.get(i), 120, y += strH); - } - } - - public int getBegin() { - return beginning; - } - - public int getEnd() { - return ending; - } - } // End Features class - - - - /** - * Scrolling text of Java2D contributors. - */ - static class Contributors implements Part { - - static String members[] = - { - "Brian Lichtenwalter", "Jeannette Hung", - "Thanh Nguyen", "Jim Graham", "Jerry Evans", - "John Raley", "Michael Peirce", "Robert Kim", - "Jennifer Ball", "Deborah Adair", "Paul Charlton", - "Dmitry Feld", "Gregory Stone", "Richard Blanchard", - "Link Perry", "Phil Race", "Vincent Hardy", - "Parry Kejriwal", "Doug Felt", "Rekha Rangarajan", - "Paula Patel", "Michael Bundschuh", "Joe Warzecha", - "Joey Beheler", "Aastha Bhardwaj", "Daniel Rice", - "Chris Campbell", "Shinsuke Fukuda", "Dmitri Trembovetski", - "Chet Haase", "Jennifer Godinez", "Nicholas Talian", - "Raul Vera", "Ankit Patel", "Ilya Bagrak" - }; - static Font font = new Font("serif", Font.PLAIN, 26); - static FontMetrics fm = Surface.getMetrics(font); - private int beginning, ending; - private int nStrs, strH, index, yh, height; - private Vector v = new Vector(); - private Vector cast = new Vector(members.length+3); - private int counter, cntMod; - private GradientPaint gp; - - - public Contributors(int beg, int end) { - this.beginning = beg; - this.ending = end; - java.util.Arrays.sort(members); - cast.addElement("CONTRIBUTORS"); - cast.addElement(" "); - for (int i = 0; i < members.length; i++) { - cast.addElement(members[i]); - } - cast.addElement(" "); cast.addElement(" "); - cntMod = (ending - beginning) / cast.size() - 1; - } - - - public void reset(int w, int h) { - v.clear(); - strH = (int) (fm.getAscent()+fm.getDescent()); - nStrs = (h-40)/strH + 1; - height = strH * (nStrs-1) + 48; - index = 0; - gp = new GradientPaint(0,h/2,Color.white,0,h+20,Color.black); - counter = 0; - } - - - public void step(int w, int h) { - if (counter++%cntMod == 0) { - if (index < cast.size()) { - v.addElement(cast.get(index)); - } - if ((v.size() == nStrs || index >= cast.size()) && v.size() != 0) { - v.removeElementAt(0); - } - ++index; - } - } - - - public void render(int w, int h, Graphics2D g2) { - g2.setPaint(gp); - g2.setFont(font); - double remainder = counter%cntMod; - double incr = 1.0-remainder/cntMod; - incr = incr == 1.0 ? 0 : incr; - int y = (int) (incr * strH); - - if (index >= cast.size()) { - y = yh + y; - } else { - y = yh = height - v.size() * strH + y; - } - for (int i = 0; i < v.size(); i++) { - String s = (String) v.get(i); - g2.drawString(s, w/2-fm.stringWidth(s)/2, y += strH); - } - } - - public int getBegin() { - return beginning; - } - - public int getEnd() { - return ending; - } - } // End Contributors class - - } // End Surface class -} // End Intro class diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Makefile b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Makefile deleted file mode 100644 index bf272c5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Makefile +++ /dev/null @@ -1,1131 +0,0 @@ -# Generated automatically from Makefile.pre by makesetup. -# Top-level Makefile for Python -# -# As distributed, this file is called Makefile.pre.in; it is processed -# into the real Makefile by running the script ./configure, which -# replaces things like @spam@ with values appropriate for your system. -# This means that if you edit Makefile, your changes get lost the next -# time you run the configure script. Ideally, you can do: -# -# ./configure -# make -# make test -# make install -# -# If you have a previous version of Python installed that you don't -# want to overwrite, you can use "make altinstall" instead of "make -# install". Refer to the "Installing" section in the README file for -# additional details. -# -# See also the section "Build instructions" in the README file. - -# === Variables set by makesetup === - -MODOBJS= Modules/threadmodule.o Modules/signalmodule.o Modules/posixmodule.o Modules/errnomodule.o Modules/pwdmodule.o Modules/_sre.o Modules/_codecsmodule.o Modules/zipimport.o Modules/symtablemodule.o Modules/xxsubtype.o -MODLIBS= $(LOCALMODLIBS) $(BASEMODLIBS) - -# === Variables set by configure -VERSION= 2.6 -srcdir= . - - -CC= gcc -pthread -CXX= g++ -pthread -MAINCC= $(CC) -LINKCC= $(PURIFY) $(MAINCC) -AR= ar -RANLIB= ranlib -SVNVERSION= svnversion $(srcdir) - -# Shell used by make (some versions default to the login shell, which is bad) -SHELL= /bin/sh - -# Use this to make a link between python$(VERSION) and python in $(BINDIR) -LN= ln - -# Portable install script (configure doesn't always guess right) -INSTALL= /usr/bin/install -c -INSTALL_PROGRAM=${INSTALL} -INSTALL_SCRIPT= ${INSTALL} -INSTALL_DATA= ${INSTALL} -m 644 -# Shared libraries must be installed with executable mode on some systems; -# rather than figuring out exactly which, we always give them executable mode. -# Also, making them read-only seems to be a good idea... -INSTALL_SHARED= ${INSTALL} -m 555 - -MAKESETUP= $(srcdir)/Modules/makesetup - -# Compiler options -OPT= -g -Wall -Wstrict-prototypes -BASECFLAGS= -fno-strict-aliasing -CFLAGS= $(BASECFLAGS) $(OPT) $(EXTRA_CFLAGS) -# Both CPPFLAGS and LDFLAGS need to contain the shell's value for setup.py to -# be able to build extension modules using the directories specified in the -# environment variables -CPPFLAGS= -I. -I$(srcdir)/Include -LDFLAGS= -LDLAST= -SGI_ABI= -CCSHARED= -fPIC -LINKFORSHARED= -Xlinker -export-dynamic -# Extra C flags added for building the interpreter object files. -CFLAGSFORSHARED= -# C flags used for building the interpreter object files -PY_CFLAGS= $(CFLAGS) $(CPPFLAGS) $(CFLAGSFORSHARED) -DPy_BUILD_CORE - - -# Machine-dependent subdirectories -MACHDEP= linux2 - -# Install prefix for architecture-independent files -prefix= /usr/local - -# Install prefix for architecture-dependent files -exec_prefix= ${prefix} - -# Expanded directories -BINDIR= $(exec_prefix)/bin -LIBDIR= $(exec_prefix)/lib -MANDIR= ${prefix}/man -INCLUDEDIR= ${prefix}/include -CONFINCLUDEDIR= $(exec_prefix)/include -SCRIPTDIR= $(prefix)/lib - -# Detailed destination directories -BINLIBDEST= $(LIBDIR)/python$(VERSION) -LIBDEST= $(SCRIPTDIR)/python$(VERSION) -INCLUDEPY= $(INCLUDEDIR)/python$(VERSION) -CONFINCLUDEPY= $(CONFINCLUDEDIR)/python$(VERSION) -LIBP= $(LIBDIR)/python$(VERSION) - -# Symbols used for using shared libraries -SO= .so -LDSHARED= $(CC) -shared -BLDSHARED= $(CC) -shared -DESTSHARED= $(BINLIBDEST)/lib-dynload - -# Executable suffix (.exe on Windows and Mac OS X) -EXE= -BUILDEXE= - -# Short name and location for Mac OS X Python framework -UNIVERSALSDK= -PYTHONFRAMEWORK= -PYTHONFRAMEWORKDIR= no-framework -PYTHONFRAMEWORKPREFIX= -PYTHONFRAMEWORKINSTALLDIR= -# Deployment target selected during configure, to be checked -# by distutils. The export statement is needed to ensure that the -# deployment target is active during build. -MACOSX_DEPLOYMENT_TARGET= -#export MACOSX_DEPLOYMENT_TARGET - -# Options to enable prebinding (for fast startup prior to Mac OS X 10.3) -OTHER_LIBTOOL_OPT= - -# Environment to run shared python without installed libraries -RUNSHARED= - -# Modes for directories, executables and data files created by the -# install process. Default to user-only-writable for all file types. -DIRMODE= 755 -EXEMODE= 755 -FILEMODE= 644 - -# configure script arguments -CONFIG_ARGS= '--with-pydebug' - - -# Subdirectories with code -SRCDIRS= Parser Grammar Objects Python Modules Mac - -# Other subdirectories -SUBDIRSTOO= Include Lib Misc Demo - -# Files and directories to be distributed -CONFIGFILES= configure configure.in acconfig.h pyconfig.h.in Makefile.pre.in -DISTFILES= README ChangeLog $(CONFIGFILES) -DISTDIRS= $(SUBDIRS) $(SUBDIRSTOO) Ext-dummy -DIST= $(DISTFILES) $(DISTDIRS) - - -LIBRARY= libpython$(VERSION).a -LDLIBRARY= libpython$(VERSION).a -BLDLIBRARY= $(LDLIBRARY) -DLLLIBRARY= -LDLIBRARYDIR= -INSTSONAME= $(LDLIBRARY) - - -LIBS= -lpthread -ldl -lutil -LIBM= -lm -LIBC= -SYSLIBS= $(LIBM) $(LIBC) -SHLIBS= $(LIBS) - -THREADOBJ= Python/thread.o -DLINCLDIR= . -DYNLOADFILE= dynload_shlib.o -MACHDEP_OBJS= -UNICODE_OBJS= Objects/unicodeobject.o Objects/unicodectype.o - -PYTHON= python$(EXE) -BUILDPYTHON= python$(BUILDEXE) - -# === Definitions added by makesetup === - -LOCALMODLIBS= -BASEMODLIBS= -GLHACK=-Dclear=__GLclear -PYTHONPATH=$(COREPYTHONPATH) -COREPYTHONPATH=$(DESTPATH)$(SITEPATH)$(TESTPATH)$(MACHDEPPATH)$(EXTRAMACHDEPPATH)$(TKPATH) -TKPATH=:lib-tk -EXTRAMACHDEPPATH= -MACHDEPPATH=:plat-$(MACHDEP) -TESTPATH= -SITEPATH= -DESTPATH= -MACHDESTLIB=$(BINLIBDEST) -DESTLIB=$(LIBDEST) - - - -########################################################################## -# Modules -MODULE_OBJS= \ - Modules/config.o \ - Modules/getpath.o \ - Modules/main.o \ - Modules/gcmodule.o - -# Used of signalmodule.o is not available -SIGNAL_OBJS= - - -########################################################################## -# Grammar -GRAMMAR_H= $(srcdir)/Include/graminit.h -GRAMMAR_C= $(srcdir)/Python/graminit.c -GRAMMAR_INPUT= $(srcdir)/Grammar/Grammar - - -########################################################################## -# Parser -PGEN= Parser/pgen$(EXE) - -POBJS= \ - Parser/acceler.o \ - Parser/grammar1.o \ - Parser/listnode.o \ - Parser/node.o \ - Parser/parser.o \ - Parser/parsetok.o \ - Parser/bitset.o \ - Parser/metagrammar.o \ - Parser/firstsets.o \ - Parser/grammar.o \ - Parser/pgen.o - -PARSER_OBJS= $(POBJS) Parser/myreadline.o Parser/tokenizer.o - -PGOBJS= \ - Objects/obmalloc.o \ - Python/mysnprintf.o \ - Parser/tokenizer_pgen.o \ - Parser/printgrammar.o \ - Parser/pgenmain.o - -PGENOBJS= $(PGENMAIN) $(POBJS) $(PGOBJS) - -########################################################################## -# AST -AST_H_DIR= $(srcdir)/Include -AST_H= $(AST_H_DIR)/Python-ast.h -AST_C_DIR= $(srcdir)/Python -AST_C= $(AST_C_DIR)/Python-ast.c -AST_ASDL= $(srcdir)/Parser/Python.asdl - -ASDLGEN_FILES= $(srcdir)/Parser/asdl.py $(srcdir)/Parser/asdl_c.py -# XXX Note that a build now requires Python exist before the build starts -ASDLGEN= $(srcdir)/Parser/asdl_c.py - -########################################################################## -# Python -PYTHON_OBJS= \ - Python/Python-ast.o \ - Python/asdl.o \ - Python/ast.o \ - Python/bltinmodule.o \ - Python/ceval.o \ - Python/compile.o \ - Python/codecs.o \ - Python/errors.o \ - Python/frozen.o \ - Python/frozenmain.o \ - Python/future.o \ - Python/getargs.o \ - Python/getcompiler.o \ - Python/getcopyright.o \ - Python/getmtime.o \ - Python/getplatform.o \ - Python/getversion.o \ - Python/graminit.o \ - Python/import.o \ - Python/importdl.o \ - Python/marshal.o \ - Python/modsupport.o \ - Python/mystrtoul.o \ - Python/mysnprintf.o \ - Python/peephole.o \ - Python/pyarena.o \ - Python/pyfpe.o \ - Python/pystate.o \ - Python/pythonrun.o \ - Python/structmember.o \ - Python/symtable.o \ - Python/sysmodule.o \ - Python/traceback.o \ - Python/getopt.o \ - Python/pystrtod.o \ - Python/$(DYNLOADFILE) \ - $(MACHDEP_OBJS) \ - $(THREADOBJ) - - -########################################################################## -# Objects -OBJECT_OBJS= \ - Objects/abstract.o \ - Objects/boolobject.o \ - Objects/bufferobject.o \ - Objects/cellobject.o \ - Objects/classobject.o \ - Objects/cobject.o \ - Objects/codeobject.o \ - Objects/complexobject.o \ - Objects/descrobject.o \ - Objects/enumobject.o \ - Objects/exceptions.o \ - Objects/genobject.o \ - Objects/fileobject.o \ - Objects/floatobject.o \ - Objects/frameobject.o \ - Objects/funcobject.o \ - Objects/intobject.o \ - Objects/iterobject.o \ - Objects/listobject.o \ - Objects/longobject.o \ - Objects/dictobject.o \ - Objects/methodobject.o \ - Objects/moduleobject.o \ - Objects/object.o \ - Objects/obmalloc.o \ - Objects/rangeobject.o \ - Objects/setobject.o \ - Objects/sliceobject.o \ - Objects/stringobject.o \ - Objects/structseq.o \ - Objects/tupleobject.o \ - Objects/typeobject.o \ - Objects/weakrefobject.o \ - $(UNICODE_OBJS) - - -########################################################################## -# objects that get linked into the Python library -LIBRARY_OBJS= \ - Modules/_typesmodule.o \ - Modules/getbuildinfo.o \ - $(PARSER_OBJS) \ - $(OBJECT_OBJS) \ - $(PYTHON_OBJS) \ - $(MODULE_OBJS) \ - $(SIGNAL_OBJS) \ - $(MODOBJS) - -######################################################################### -# Rules - -# Default target -all: $(BUILDPYTHON) oldsharedmods sharedmods - -# Build the interpreter -$(BUILDPYTHON): Modules/python.o $(LIBRARY) $(LDLIBRARY) - $(LINKCC) $(LDFLAGS) $(LINKFORSHARED) -o $@ \ - Modules/python.o \ - $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST) - -platform: $(BUILDPYTHON) - $(RUNSHARED) ./$(BUILDPYTHON) -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform - - -# Build the shared modules -sharedmods: $(BUILDPYTHON) - @case $$MAKEFLAGS in \ - *-s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \ - *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \ - esac - -# Build static library -# avoid long command lines, same as LIBRARY_OBJS -$(LIBRARY): $(LIBRARY_OBJS) - -rm -f $@ - $(AR) cr $@ Modules/getbuildinfo.o - $(AR) cr $@ Modules/_typesmodule.o - $(AR) cr $@ $(PARSER_OBJS) - $(AR) cr $@ $(OBJECT_OBJS) - $(AR) cr $@ $(PYTHON_OBJS) - $(AR) cr $@ $(MODULE_OBJS) $(SIGNAL_OBJS) - $(AR) cr $@ $(MODOBJS) - $(RANLIB) $@ - -libpython$(VERSION).so: $(LIBRARY_OBJS) - if test $(INSTSONAME) != $(LDLIBRARY); then \ - $(LDSHARED) -Wl,-h$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(SHLIBS) $(LIBC) $(LIBM); \ - $(LN) -f $(INSTSONAME) $@; \ - else\ - $(LDSHARED) -o $@ $(LIBRARY_OBJS) $(SHLIBS) $(LIBC) $(LIBM); \ - fi - -libpython$(VERSION).sl: $(LIBRARY_OBJS) - $(LDSHARED) -o $@ $(LIBRARY_OBJS) $(SHLIBS) $(LIBC) $(LIBM) - -# This rule is here for OPENSTEP/Rhapsody/MacOSX. It builds a temporary -# minimal framework (not including the Lib directory and such) in the current -# directory. -RESSRCDIR=$(srcdir)/Mac/Resources/framework -$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK): \ - $(LIBRARY) \ - $(RESSRCDIR)/Info.plist \ - $(RESSRCDIR)/version.plist \ - $(RESSRCDIR)/English.lproj/InfoPlist.strings - $(INSTALL) -d -m $(DIRMODE) $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION) - if test "${UNIVERSALSDK}"; then \ - $(CC) -o $(LDLIBRARY) -arch i386 -arch ppc -dynamiclib \ - -isysroot "${UNIVERSALSDK}" \ - -all_load $(LIBRARY) -Wl,-single_module \ - -install_name $(DESTDIR)$(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/Python \ - -compatibility_version $(VERSION) \ - -current_version $(VERSION); \ - else \ - libtool -o $(LDLIBRARY) -dynamic $(OTHER_LIBTOOL_OPT) $(LIBRARY) \ - ;\ - fi - $(INSTALL) -d -m $(DIRMODE) \ - $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/Resources/English.lproj - $(INSTALL_DATA) $(RESSRCDIR)/Info.plist \ - $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/Resources/Info.plist - $(INSTALL_DATA) $(RESSRCDIR)/version.plist \ - $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/Resources/version.plist - $(INSTALL_DATA) $(RESSRCDIR)/English.lproj/InfoPlist.strings \ - $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/Resources/English.lproj/InfoPlist.strings - $(LN) -fsn $(VERSION) $(PYTHONFRAMEWORKDIR)/Versions/Current - $(LN) -fsn Versions/Current/$(PYTHONFRAMEWORK) $(PYTHONFRAMEWORKDIR)/$(PYTHONFRAMEWORK) - $(LN) -fsn Versions/Current/Headers $(PYTHONFRAMEWORKDIR)/Headers - $(LN) -fsn Versions/Current/Resources $(PYTHONFRAMEWORKDIR)/Resources - -# This rule builds the Cygwin Python DLL and import library if configured -# for a shared core library; otherwise, this rule is a noop. -$(DLLLIBRARY) libpython$(VERSION).dll.a: $(LIBRARY_OBJS) - if test -n "$(DLLLIBRARY)"; then \ - $(LDSHARED) -Wl,--out-implib=$@ -o $(DLLLIBRARY) $^ \ - $(LIBS) $(MODLIBS) $(SYSLIBS); \ - else true; \ - fi - - -oldsharedmods: $(SHAREDMODS) - - -Makefile Modules/config.c: Makefile.pre \ - $(srcdir)/Modules/config.c.in \ - $(MAKESETUP) \ - Modules/Setup.config \ - Modules/Setup \ - Modules/Setup.local - $(SHELL) $(MAKESETUP) -c $(srcdir)/Modules/config.c.in \ - -s Modules \ - Modules/Setup.config \ - Modules/Setup.local \ - Modules/Setup - @mv config.c Modules - @echo "The Makefile was updated, you may need to re-run make." - - -Modules/Setup: $(srcdir)/Modules/Setup.dist - @if test -f Modules/Setup; then \ - echo "-----------------------------------------------"; \ - echo "Modules/Setup.dist is newer than Modules/Setup;"; \ - echo "check to make sure you have all the updates you"; \ - echo "need in your Modules/Setup file."; \ - echo "Usually, copying Setup.dist to Setup will work."; \ - echo "-----------------------------------------------"; \ - fi - -############################################################################ -# Special rules for object files - -Modules/getbuildinfo.o: $(PARSER_OBJS) \ - $(OBJECT_OBJS) \ - $(PYTHON_OBJS) \ - $(MODULE_OBJS) \ - $(SIGNAL_OBJS) \ - $(MODOBJS) \ - $(srcdir)/Modules/getbuildinfo.c - $(CC) -c $(PY_CFLAGS) -DSVNVERSION=\"`LC_ALL=C $(SVNVERSION)`\" -o $@ $(srcdir)/Modules/getbuildinfo.c - -Modules/getpath.o: $(srcdir)/Modules/getpath.c Makefile - $(CC) -c $(PY_CFLAGS) -DPYTHONPATH='"$(PYTHONPATH)"' \ - -DPREFIX='"$(prefix)"' \ - -DEXEC_PREFIX='"$(exec_prefix)"' \ - -DVERSION='"$(VERSION)"' \ - -DVPATH='"$(VPATH)"' \ - -o $@ $(srcdir)/Modules/getpath.c - -Modules/python.o: $(srcdir)/Modules/python.c - $(MAINCC) -c $(PY_CFLAGS) -o $@ $(srcdir)/Modules/python.c - - -$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT) - -$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C) - -$(PGEN): $(PGENOBJS) - $(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN) - -Parser/grammar.o: $(srcdir)/Parser/grammar.c \ - $(srcdir)/Include/token.h \ - $(srcdir)/Include/grammar.h -Parser/metagrammar.o: $(srcdir)/Parser/metagrammar.c - -Parser/tokenizer_pgen.o: $(srcdir)/Parser/tokenizer.c - -Parser/pgenmain.o: $(srcdir)/Include/parsetok.h - -$(AST_H): $(AST_ASDL) $(ASDLGEN_FILES) - $(ASDLGEN) -h $(AST_H_DIR) $(AST_ASDL) - -$(AST_C): $(AST_ASDL) $(ASDLGEN_FILES) - $(ASDLGEN) -c $(AST_C_DIR) $(AST_ASDL) - -Python/compile.o Python/symtable.o: $(GRAMMAR_H) $(AST_H) - -Python/getplatform.o: $(srcdir)/Python/getplatform.c - $(CC) -c $(PY_CFLAGS) -DPLATFORM='"$(MACHDEP)"' -o $@ $(srcdir)/Python/getplatform.c - -Python/importdl.o: $(srcdir)/Python/importdl.c - $(CC) -c $(PY_CFLAGS) -I$(DLINCLDIR) -o $@ $(srcdir)/Python/importdl.c - -Objects/unicodectype.o: $(srcdir)/Objects/unicodectype.c \ - $(srcdir)/Objects/unicodetype_db.h - -############################################################################ -# Header files - -PYTHON_HEADERS= \ - Include/Python.h \ - Include/Python-ast.h \ - Include/asdl.h \ - Include/abstract.h \ - Include/boolobject.h \ - Include/bufferobject.h \ - Include/ceval.h \ - Include/classobject.h \ - Include/cobject.h \ - Include/code.h \ - Include/codecs.h \ - Include/compile.h \ - Include/complexobject.h \ - Include/descrobject.h \ - Include/dictobject.h \ - Include/enumobject.h \ - Include/genobject.h \ - Include/fileobject.h \ - Include/floatobject.h \ - Include/funcobject.h \ - Include/import.h \ - Include/intobject.h \ - Include/intrcheck.h \ - Include/iterobject.h \ - Include/listobject.h \ - Include/longobject.h \ - Include/methodobject.h \ - Include/modsupport.h \ - Include/moduleobject.h \ - Include/object.h \ - Include/objimpl.h \ - Include/parsetok.h \ - Include/patchlevel.h \ - Include/pyarena.h \ - Include/pydebug.h \ - Include/pyerrors.h \ - Include/pyfpe.h \ - Include/pymem.h \ - Include/pyport.h \ - Include/pystate.h \ - Include/pythonrun.h \ - Include/rangeobject.h \ - Include/setobject.h \ - Include/sliceobject.h \ - Include/stringobject.h \ - Include/structseq.h \ - Include/structmember.h \ - Include/symtable.h \ - Include/sysmodule.h \ - Include/traceback.h \ - Include/tupleobject.h \ - Include/unicodeobject.h \ - Include/weakrefobject.h \ - pyconfig.h - -$(LIBRARY_OBJS) $(MODOBJS) Modules/python.o: $(PYTHON_HEADERS) - - -###################################################################### - -# Test the interpreter (twice, once without .pyc files, once with) -# In the past, we've had problems where bugs in the marshalling or -# elsewhere caused bytecode read from .pyc files to behave differently -# than bytecode generated directly from a .py source file. Sometimes -# the bytecode read from a .pyc file had the bug, somtimes the directly -# generated bytecode. This is sometimes a very shy bug needing a lot of -# sample data. - -TESTOPTS= -l $(EXTRATESTOPTS) -TESTPROG= $(srcdir)/Lib/test/regrtest.py -TESTPYTHON= $(RUNSHARED) ./$(BUILDPYTHON) -E -tt -test: all platform - -find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f - -$(TESTPYTHON) $(TESTPROG) $(TESTOPTS) - $(TESTPYTHON) $(TESTPROG) $(TESTOPTS) - -testall: all platform - -find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f - -$(TESTPYTHON) $(TESTPROG) $(TESTOPTS) -uall - $(TESTPYTHON) $(TESTPROG) $(TESTOPTS) -uall - -# Run the unitests for both architectures in a Universal build on OSX -# Must be run on an Intel box. -testuniversal: all platform - if [ `arch` != 'i386' ];then \ - echo "This can only be used on OSX/i386" ;\ - exit 1 ;\ - fi - -find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f - -$(TESTPYTHON) $(TESTPROG) $(TESTOPTS) -uall - $(TESTPYTHON) $(TESTPROG) $(TESTOPTS) -uall - $(RUNSHARED) /usr/libexec/oah/translate ./$(BUILDPYTHON) -E -tt $(TESTPROG) $(TESTOPTS) -uall - - -# Like testall, but with a single pass only -buildbottest: all platform - $(TESTPYTHON) $(TESTPROG) $(TESTOPTS) -uall -rw - -QUICKTESTOPTS= $(TESTOPTS) -x test_thread test_signal test_strftime \ - test_unicodedata test_re test_sre test_select test_poll \ - test_linuxaudiodev test_struct test_sunaudiodev test_zlib -quicktest: all platform - -find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f - -$(TESTPYTHON) $(TESTPROG) $(QUICKTESTOPTS) - $(TESTPYTHON) $(TESTPROG) $(QUICKTESTOPTS) - -MEMTESTOPTS= $(QUICKTESTOPTS) -x test_dl test___all__ test_fork1 \ - test_longexp -memtest: all platform - -rm -f $(srcdir)/Lib/test/*.py[co] - -$(TESTPYTHON) $(TESTPROG) $(MEMTESTOPTS) - $(TESTPYTHON) $(TESTPROG) $(MEMTESTOPTS) - -# Install everything -install: altinstall bininstall maninstall - -# Install almost everything without disturbing previous versions -altinstall: altbininstall libinstall inclinstall libainstall \ - sharedinstall oldsharedinstall - -# Install shared libraries enabled by Setup -DESTDIRS= $(exec_prefix) $(LIBDIR) $(BINLIBDEST) $(DESTSHARED) - -oldsharedinstall: $(DESTSHARED) $(SHAREDMODS) - @for i in X $(SHAREDMODS); do \ - if test $$i != X; then \ - echo $(INSTALL_SHARED) $$i $(DESTSHARED)/`basename $$i`; \ - $(INSTALL_SHARED) $$i $(DESTDIR)$(DESTSHARED)/`basename $$i`; \ - fi; \ - done - -$(DESTSHARED): - @for i in $(DESTDIRS); \ - do \ - if test ! -d $(DESTDIR)$$i; then \ - echo "Creating directory $$i"; \ - $(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$$i; \ - else true; \ - fi; \ - done - - -# Install the interpreter (by creating a hard link to python$(VERSION)) -bininstall: altbininstall - -if test -f $(DESTDIR)$(BINDIR)/$(PYTHON) -o -h $(DESTDIR)$(BINDIR)/$(PYTHON); \ - then rm -f $(DESTDIR)$(BINDIR)/$(PYTHON); \ - else true; \ - fi - (cd $(DESTDIR)$(BINDIR); $(LN) python$(VERSION)$(EXE) $(PYTHON)) - (cd $(DESTDIR)$(BINDIR); $(LN) -sf python$(VERSION)-config python-config) - -# Install the interpreter with $(VERSION) affixed -# This goes into $(exec_prefix) -altbininstall: $(BUILDPYTHON) - @for i in $(BINDIR) $(LIBDIR); \ - do \ - if test ! -d $(DESTDIR)$$i; then \ - echo "Creating directory $$i"; \ - $(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$$i; \ - else true; \ - fi; \ - done - $(INSTALL_PROGRAM) $(BUILDPYTHON) $(DESTDIR)$(BINDIR)/python$(VERSION)$(EXE) - if test -f libpython$(VERSION)$(SO); then \ - if test "$(SO)" = .dll; then \ - $(INSTALL_SHARED) libpython$(VERSION)$(SO) $(DESTDIR)$(BINDIR); \ - else \ - $(INSTALL_SHARED) libpython$(VERSION)$(SO) $(DESTDIR)$(LIBDIR)/$(INSTSONAME); \ - if test libpython$(VERSION)$(SO) != $(INSTSONAME); then \ - (cd $(DESTDIR)$(LIBDIR); $(LN) -sf $(INSTSONAME) libpython$(VERSION)$(SO)); \ - fi \ - fi; \ - else true; \ - fi - -# Install the manual page -maninstall: - @for i in $(MANDIR) $(MANDIR)/man1; \ - do \ - if test ! -d $(DESTDIR)$$i; then \ - echo "Creating directory $$i"; \ - $(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$$i; \ - else true; \ - fi; \ - done - $(INSTALL_DATA) $(srcdir)/Misc/python.man \ - $(DESTDIR)$(MANDIR)/man1/python.1 - -# Install the library -PLATDIR= plat-$(MACHDEP) -EXTRAPLATDIR= -EXTRAMACHDEPPATH= -MACHDEPS= $(PLATDIR) $(EXTRAPLATDIR) -XMLLIBSUBDIRS= xml xml/dom xml/etree xml/parsers xml/sax -PLATMACDIRS= plat-mac plat-mac/Carbon plat-mac/lib-scriptpackages \ - plat-mac/lib-scriptpackages/_builtinSuites \ - plat-mac/lib-scriptpackages/CodeWarrior \ - plat-mac/lib-scriptpackages/Explorer \ - plat-mac/lib-scriptpackages/Finder \ - plat-mac/lib-scriptpackages/Netscape \ - plat-mac/lib-scriptpackages/StdSuites \ - plat-mac/lib-scriptpackages/SystemEvents \ - plat-mac/lib-scriptpackages/Terminal -PLATMACPATH=:plat-mac:plat-mac/lib-scriptpackages -LIBSUBDIRS= lib-tk site-packages test test/output test/data \ - test/decimaltestdata \ - encodings compiler hotshot \ - email email/mime email/test email/test/data \ - sqlite3 sqlite3/test \ - logging bsddb bsddb/test csv wsgiref \ - ctypes ctypes/test ctypes/macholib idlelib idlelib/Icons \ - distutils distutils/command distutils/tests $(XMLLIBSUBDIRS) \ - setuptools setuptools/command setuptools/tests setuptools.egg-info \ - curses $(MACHDEPS) -libinstall: $(BUILDPYTHON) $(srcdir)/Lib/$(PLATDIR) - @for i in $(SCRIPTDIR) $(LIBDEST); \ - do \ - if test ! -d $(DESTDIR)$$i; then \ - echo "Creating directory $$i"; \ - $(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$$i; \ - else true; \ - fi; \ - done - @for d in $(LIBSUBDIRS); \ - do \ - a=$(srcdir)/Lib/$$d; \ - if test ! -d $$a; then continue; else true; fi; \ - b=$(LIBDEST)/$$d; \ - if test ! -d $(DESTDIR)$$b; then \ - echo "Creating directory $$b"; \ - $(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$$b; \ - else true; \ - fi; \ - done - @for i in $(srcdir)/Lib/*.py $(srcdir)/Lib/*.doc $(srcdir)/Lib/*.egg-info ; \ - do \ - if test -x $$i; then \ - $(INSTALL_SCRIPT) $$i $(DESTDIR)$(LIBDEST); \ - echo $(INSTALL_SCRIPT) $$i $(LIBDEST); \ - else \ - $(INSTALL_DATA) $$i $(DESTDIR)$(LIBDEST); \ - echo $(INSTALL_DATA) $$i $(LIBDEST); \ - fi; \ - done - @for d in $(LIBSUBDIRS); \ - do \ - a=$(srcdir)/Lib/$$d; \ - if test ! -d $$a; then continue; else true; fi; \ - if test `ls $$a | wc -l` -lt 1; then continue; fi; \ - b=$(LIBDEST)/$$d; \ - for i in $$a/*; \ - do \ - case $$i in \ - *CVS) ;; \ - *.py[co]) ;; \ - *.orig) ;; \ - *~) ;; \ - *) \ - if test -d $$i; then continue; fi; \ - if test -x $$i; then \ - echo $(INSTALL_SCRIPT) $$i $$b; \ - $(INSTALL_SCRIPT) $$i $(DESTDIR)$$b; \ - else \ - echo $(INSTALL_DATA) $$i $$b; \ - $(INSTALL_DATA) $$i $(DESTDIR)$$b; \ - fi;; \ - esac; \ - done; \ - done - $(INSTALL_DATA) $(srcdir)/LICENSE $(DESTDIR)$(LIBDEST)/LICENSE.txt - PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ - ./$(BUILDPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \ - -d $(LIBDEST) -f \ - -x 'bad_coding|badsyntax|site-packages' $(DESTDIR)$(LIBDEST) - PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ - ./$(BUILDPYTHON) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \ - -d $(LIBDEST) -f \ - -x 'bad_coding|badsyntax|site-packages' $(DESTDIR)$(LIBDEST) - -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ - ./$(BUILDPYTHON) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \ - -d $(LIBDEST)/site-packages -f \ - -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages - -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ - ./$(BUILDPYTHON) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \ - -d $(LIBDEST)/site-packages -f \ - -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages - -# Create the PLATDIR source directory, if one wasn't distributed.. -$(srcdir)/Lib/$(PLATDIR): - mkdir $(srcdir)/Lib/$(PLATDIR) - cp $(srcdir)/Lib/plat-generic/regen $(srcdir)/Lib/$(PLATDIR)/regen - export PATH; PATH="`pwd`:$$PATH"; \ - export PYTHONPATH; PYTHONPATH="`pwd`/Lib"; \ - export DYLD_FRAMEWORK_PATH; DYLD_FRAMEWORK_PATH="`pwd`"; \ - export EXE; EXE="$(BUILDEXE)"; \ - cd $(srcdir)/Lib/$(PLATDIR); ./regen - -# Install the include files -INCLDIRSTOMAKE=$(INCLUDEDIR) $(CONFINCLUDEDIR) $(INCLUDEPY) $(CONFINCLUDEPY) -inclinstall: - @for i in $(INCLDIRSTOMAKE); \ - do \ - if test ! -d $(DESTDIR)$$i; then \ - echo "Creating directory $$i"; \ - $(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$$i; \ - else true; \ - fi; \ - done - @for i in $(srcdir)/Include/*.h; \ - do \ - echo $(INSTALL_DATA) $$i $(INCLUDEPY); \ - $(INSTALL_DATA) $$i $(DESTDIR)$(INCLUDEPY); \ - done - $(INSTALL_DATA) pyconfig.h $(DESTDIR)$(CONFINCLUDEPY)/pyconfig.h - -# Install the library and miscellaneous stuff needed for extending/embedding -# This goes into $(exec_prefix) -LIBPL= $(LIBP)/config -libainstall: all - @for i in $(LIBDIR) $(LIBP) $(LIBPL); \ - do \ - if test ! -d $(DESTDIR)$$i; then \ - echo "Creating directory $$i"; \ - $(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$$i; \ - else true; \ - fi; \ - done - @if test -d $(LIBRARY); then :; else \ - if test "$(PYTHONFRAMEWORKDIR)" = no-framework; then \ - if test "$(SO)" = .dll; then \ - $(INSTALL_DATA) $(LDLIBRARY) $(DESTDIR)$(LIBPL) ; \ - else \ - $(INSTALL_DATA) $(LIBRARY) $(DESTDIR)$(LIBPL)/$(LIBRARY) ; \ - $(RANLIB) $(DESTDIR)$(LIBPL)/$(LIBRARY) ; \ - fi; \ - else \ - echo Skip install of $(LIBRARY) - use make frameworkinstall; \ - fi; \ - fi - $(INSTALL_DATA) Modules/config.c $(DESTDIR)$(LIBPL)/config.c - $(INSTALL_DATA) Modules/python.o $(DESTDIR)$(LIBPL)/python.o - $(INSTALL_DATA) $(srcdir)/Modules/config.c.in $(DESTDIR)$(LIBPL)/config.c.in - $(INSTALL_DATA) Makefile $(DESTDIR)$(LIBPL)/Makefile - $(INSTALL_DATA) Modules/Setup $(DESTDIR)$(LIBPL)/Setup - $(INSTALL_DATA) Modules/Setup.local $(DESTDIR)$(LIBPL)/Setup.local - $(INSTALL_DATA) Modules/Setup.config $(DESTDIR)$(LIBPL)/Setup.config - $(INSTALL_SCRIPT) $(srcdir)/Modules/makesetup $(DESTDIR)$(LIBPL)/makesetup - $(INSTALL_SCRIPT) $(srcdir)/install-sh $(DESTDIR)$(LIBPL)/install-sh - # Substitution happens here, as the completely-expanded BINDIR - # is not available in configure - sed -e "s,@EXENAME@,$(BINDIR)/python$(VERSION)$(EXE)," < $(srcdir)/Misc/python-config.in >python-config - $(INSTALL_SCRIPT) python-config $(DESTDIR)$(BINDIR)/python$(VERSION)-config - rm python-config - @if [ -s Modules/python.exp -a \ - "`echo $(MACHDEP) | sed 's/^\(...\).*/\1/'`" = "aix" ]; then \ - echo; echo "Installing support files for building shared extension modules on AIX:"; \ - $(INSTALL_DATA) Modules/python.exp \ - $(DESTDIR)$(LIBPL)/python.exp; \ - echo; echo "$(LIBPL)/python.exp"; \ - $(INSTALL_SCRIPT) $(srcdir)/Modules/makexp_aix \ - $(DESTDIR)$(LIBPL)/makexp_aix; \ - echo "$(LIBPL)/makexp_aix"; \ - $(INSTALL_SCRIPT) $(srcdir)/Modules/ld_so_aix \ - $(DESTDIR)$(LIBPL)/ld_so_aix; \ - echo "$(LIBPL)/ld_so_aix"; \ - echo; echo "See Misc/AIX-NOTES for details."; \ - else true; \ - fi - @case "$(MACHDEP)" in beos*) \ - echo; echo "Installing support files for building shared extension modules on BeOS:"; \ - $(INSTALL_DATA) Misc/BeOS-NOTES $(DESTDIR)$(LIBPL)/README; \ - echo; echo "$(LIBPL)/README"; \ - $(INSTALL_SCRIPT) Modules/ar_beos $(DESTDIR)$(LIBPL)/ar_beos; \ - echo "$(LIBPL)/ar_beos"; \ - $(INSTALL_SCRIPT) Modules/ld_so_beos $(DESTDIR)$(LIBPL)/ld_so_beos; \ - echo "$(LIBPL)/ld_so_beos"; \ - echo; echo "See Misc/BeOS-NOTES for details."; \ - ;; \ - esac - -# Install the dynamically loadable modules -# This goes into $(exec_prefix) -sharedinstall: - $(RUNSHARED) ./$(BUILDPYTHON) -E $(srcdir)/setup.py install \ - --prefix=$(prefix) \ - --install-scripts=$(BINDIR) \ - --install-platlib=$(DESTSHARED) \ - --root=/$(DESTDIR) - -# Here are a couple of targets for MacOSX again, to install a full -# framework-based Python. frameworkinstall installs everything, the -# subtargets install specific parts. Much of the actual work is offloaded to -# the Makefile in Mac -# -# -# This target is here for backward compatiblity, previous versions of Python -# hadn't integrated framework installation in the normal install process. -frameworkinstall: install - -# On install, we re-make the framework -# structure in the install location, /Library/Frameworks/ or the argument to -# --enable-framework. If --enable-framework has been specified then we have -# automatically set prefix to the location deep down in the framework, so we -# only have to cater for the structural bits of the framework. - -frameworkinstallframework: frameworkinstallstructure install frameworkinstallmaclib - -frameworkinstallstructure: $(LDLIBRARY) - @if test "$(PYTHONFRAMEWORKDIR)" = no-framework; then \ - echo Not configured with --enable-framework; \ - exit 1; \ - else true; \ - fi - @for i in $(prefix)/Resources/English.lproj $(prefix)/lib; do\ - if test ! -d $(DESTDIR)$$i; then \ - echo "Creating directory $(DESTDIR)$$i"; \ - $(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$$i; \ - else true; \ - fi; \ - done - $(LN) -fsn include/python$(VERSION) $(DESTDIR)$(prefix)/Headers - $(INSTALL_DATA) $(RESSRCDIR)/Info.plist $(DESTDIR)$(prefix)/Resources/Info.plist - $(INSTALL_DATA) $(RESSRCDIR)/version.plist $(DESTDIR)$(prefix)/Resources/version.plist - $(INSTALL_DATA) $(RESSRCDIR)/English.lproj/InfoPlist.strings \ - $(DESTDIR)$(prefix)/Resources/English.lproj/InfoPlist.strings - $(LN) -fsn $(VERSION) $(DESTDIR)$(PYTHONFRAMEWORKINSTALLDIR)/Versions/Current - $(LN) -fsn Versions/Current/Python $(DESTDIR)$(PYTHONFRAMEWORKINSTALLDIR)/Python - $(LN) -fsn Versions/Current/Headers $(DESTDIR)$(PYTHONFRAMEWORKINSTALLDIR)/Headers - $(LN) -fsn Versions/Current/Resources $(DESTDIR)$(PYTHONFRAMEWORKINSTALLDIR)/Resources - $(INSTALL_SHARED) $(LDLIBRARY) $(DESTDIR)$(PYTHONFRAMEWORKPREFIX)/$(LDLIBRARY) - -# This installs Mac/Lib into the framework -# Install a number of symlinks to keep software that expects a normal unix -# install (which includes python-config) happy. -frameworkinstallmaclib: - ln -fs "../../../Python" "$(DESTDIR)$(prefix)/lib/python$(VERSION)/config/libpython$(VERSION).a" - cd Mac && $(MAKE) installmacsubtree DESTDIR="$(DESTDIR)" - -# This installs the IDE, the Launcher and other apps into /Applications -frameworkinstallapps: - cd Mac && $(MAKE) installapps DESTDIR="$(DESTDIR)" - -# This install the unix python and pythonw tools in /usr/local/bin -frameworkinstallunixtools: - cd Mac && $(MAKE) installunixtools DESTDIR="$(DESTDIR)" - -frameworkaltinstallunixtools: - cd Mac && $(MAKE) altinstallunixtools DESTDIR="$(DESTDIR)" - -# This installs the Demos and Tools into the applications directory. -# It is not part of a normal frameworkinstall -frameworkinstallextras: - cd Mac && Make installextras DESTDIR="$(DESTDIR)" - -# This installs a few of the useful scripts in Tools/scripts -scriptsinstall: - SRCDIR=$(srcdir) $(RUNSHARED) \ - ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/setup.py install \ - --prefix=$(prefix) \ - --install-scripts=$(BINDIR) \ - --root=/$(DESTDIR) - -# Build the toplevel Makefile -Makefile.pre: Makefile.pre.in config.status - CONFIG_FILES=Makefile.pre CONFIG_HEADERS= $(SHELL) config.status - $(MAKE) -f Makefile.pre Makefile - -# Run the configure script. -config.status: $(srcdir)/configure - $(SHELL) $(srcdir)/configure $(CONFIG_ARGS) - -.PRECIOUS: config.status $(BUILDPYTHON) Makefile Makefile.pre - -# Some make's put the object file in the current directory -.c.o: - $(CC) -c $(PY_CFLAGS) -o $@ $< - -# Run reindent on the library -reindent: - ./python$(EXEEXT) $(srcdir)/Tools/scripts/reindent.py -r $(srcdir)/Lib - -# Rerun configure with the same options as it was run last time, -# provided the config.status script exists -recheck: - $(SHELL) config.status --recheck - $(SHELL) config.status - -# Rebuild the configure script from configure.in; also rebuild pyconfig.h.in -autoconf: - (cd $(srcdir); autoconf) - (cd $(srcdir); autoheader) - -# Create a tags file for vi -tags:: - cd $(srcdir); \ - ctags -w -t Include/*.h; \ - for i in $(SRCDIRS); do ctags -w -t -a $$i/*.[ch]; \ - done; \ - sort -o tags tags - -# Create a tags file for GNU Emacs -TAGS:: - cd $(srcdir); \ - etags Include/*.h; \ - for i in $(SRCDIRS); do etags -a $$i/*.[ch]; done - -# Sanitation targets -- clean leaves libraries, executables and tags -# files, which clobber removes those as well -pycremoval: - find $(srcdir) -name '*.py[co]' -exec rm -f {} ';' - -clean: pycremoval - find . -name '*.o' -exec rm -f {} ';' - find . -name '*.s[ol]' -exec rm -f {} ';' - find $(srcdir)/build -name 'fficonfig.h' -exec rm -f {} ';' || true - find $(srcdir)/build -name 'fficonfig.py' -exec rm -f {} ';' || true - -clobber: clean - -rm -f $(BUILDPYTHON) $(PGEN) $(LIBRARY) $(LDLIBRARY) $(DLLLIBRARY) \ - tags TAGS \ - config.cache config.log pyconfig.h Modules/config.c - -rm -rf build platform - -rm -rf $(PYTHONFRAMEWORKDIR) - -# Make things extra clean, before making a distribution: -# remove all generated files, even Makefile[.pre] -# Keep configure and Python-ast.[ch], it's possible they can't be generated -distclean: clobber - -rm -f core Makefile Makefile.pre config.status \ - Modules/Setup Modules/Setup.local Modules/Setup.config - find $(srcdir) '(' -name '*.fdc' -o -name '*~' \ - -o -name '[@,#]*' -o -name '*.old' \ - -o -name '*.orig' -o -name '*.rej' \ - -o -name '*.bak' ')' \ - -exec rm -f {} ';' - -# Check for smelly exported symbols (not starting with Py/_Py) -smelly: all - nm -p $(LIBRARY) | \ - sed -n "/ [TDB] /s/.* //p" | grep -v "^_*Py" | sort -u; \ - -# Find files with funny names -funny: - find $(DISTDIRS) -type d \ - -o -name '*.[chs]' \ - -o -name '*.py' \ - -o -name '*.doc' \ - -o -name '*.sty' \ - -o -name '*.bib' \ - -o -name '*.dat' \ - -o -name '*.el' \ - -o -name '*.fd' \ - -o -name '*.in' \ - -o -name '*.tex' \ - -o -name '*,[vpt]' \ - -o -name 'Setup' \ - -o -name 'Setup.*' \ - -o -name README \ - -o -name Makefile \ - -o -name ChangeLog \ - -o -name Repository \ - -o -name Root \ - -o -name Entries \ - -o -name Tag \ - -o -name tags \ - -o -name TAGS \ - -o -name .cvsignore \ - -o -name MANIFEST \ - -o -print - -# Dependencies - -Python/thread.o: $(srcdir)/Python/thread_atheos.h $(srcdir)/Python/thread_beos.h $(srcdir)/Python/thread_cthread.h $(srcdir)/Python/thread_foobar.h $(srcdir)/Python/thread_lwp.h $(srcdir)/Python/thread_nt.h $(srcdir)/Python/thread_os2.h $(srcdir)/Python/thread_pth.h $(srcdir)/Python/thread_pthread.h $(srcdir)/Python/thread_sgi.h $(srcdir)/Python/thread_solaris.h $(srcdir)/Python/thread_wince.h - -# Declare targets that aren't real files -.PHONY: all sharedmods oldsharedmods test quicktest memtest -.PHONY: install altinstall oldsharedinstall bininstall altbininstall -.PHONY: maninstall libinstall inclinstall libainstall sharedinstall -.PHONY: frameworkinstall frameworkinstallframework frameworkinstallstructure -.PHONY: frameworkinstallmaclib frameworkinstallapps frameworkinstallunixtools -.PHONY: frameworkaltinstallunixtools recheck autoconf clean clobber distclean -.PHONY: smelly funny - -# IF YOU PUT ANYTHING HERE IT WILL GO AWAY - -# Rules appended by makedepend - -Modules/threadmodule.o: $(srcdir)/Modules/threadmodule.c; $(CC) $(PY_CFLAGS) -c $(srcdir)/Modules/threadmodule.c -o Modules/threadmodule.o -Modules/threadmodule$(SO): Modules/threadmodule.o; $(LDSHARED) Modules/threadmodule.o -o Modules/threadmodule$(SO) -Modules/signalmodule.o: $(srcdir)/Modules/signalmodule.c; $(CC) $(PY_CFLAGS) -c $(srcdir)/Modules/signalmodule.c -o Modules/signalmodule.o -Modules/signalmodule$(SO): Modules/signalmodule.o; $(LDSHARED) Modules/signalmodule.o -o Modules/signalmodule$(SO) -Modules/posixmodule.o: $(srcdir)/Modules/posixmodule.c; $(CC) $(PY_CFLAGS) -c $(srcdir)/Modules/posixmodule.c -o Modules/posixmodule.o -Modules/posixmodule$(SO): Modules/posixmodule.o; $(LDSHARED) Modules/posixmodule.o -o Modules/posixmodule$(SO) -Modules/errnomodule.o: $(srcdir)/Modules/errnomodule.c; $(CC) $(PY_CFLAGS) -c $(srcdir)/Modules/errnomodule.c -o Modules/errnomodule.o -Modules/errnomodule$(SO): Modules/errnomodule.o; $(LDSHARED) Modules/errnomodule.o -o Modules/errnomodule$(SO) -Modules/pwdmodule.o: $(srcdir)/Modules/pwdmodule.c; $(CC) $(PY_CFLAGS) -c $(srcdir)/Modules/pwdmodule.c -o Modules/pwdmodule.o -Modules/pwdmodule$(SO): Modules/pwdmodule.o; $(LDSHARED) Modules/pwdmodule.o -o Modules/pwdmodule$(SO) -Modules/_sre.o: $(srcdir)/Modules/_sre.c; $(CC) $(PY_CFLAGS) -c $(srcdir)/Modules/_sre.c -o Modules/_sre.o -Modules/_sre$(SO): Modules/_sre.o; $(LDSHARED) Modules/_sre.o -o Modules/_sre$(SO) -Modules/_codecsmodule.o: $(srcdir)/Modules/_codecsmodule.c; $(CC) $(PY_CFLAGS) -c $(srcdir)/Modules/_codecsmodule.c -o Modules/_codecsmodule.o -Modules/_codecsmodule$(SO): Modules/_codecsmodule.o; $(LDSHARED) Modules/_codecsmodule.o -o Modules/_codecsmodule$(SO) -Modules/zipimport.o: $(srcdir)/Modules/zipimport.c; $(CC) $(PY_CFLAGS) -c $(srcdir)/Modules/zipimport.c -o Modules/zipimport.o -Modules/zipimport$(SO): Modules/zipimport.o; $(LDSHARED) Modules/zipimport.o -o Modules/zipimport$(SO) -Modules/symtablemodule.o: $(srcdir)/Modules/symtablemodule.c; $(CC) $(PY_CFLAGS) -c $(srcdir)/Modules/symtablemodule.c -o Modules/symtablemodule.o -Modules/_symtablemodule$(SO): Modules/symtablemodule.o; $(LDSHARED) Modules/symtablemodule.o -o Modules/_symtablemodule$(SO) -Modules/xxsubtype.o: $(srcdir)/Modules/xxsubtype.c; $(CC) $(PY_CFLAGS) -c $(srcdir)/Modules/xxsubtype.c -o Modules/xxsubtype.o -Modules/xxsubtype$(SO): Modules/xxsubtype.o; $(LDSHARED) Modules/xxsubtype.o -o Modules/xxsubtype$(SO) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Object.st b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Object.st deleted file mode 100644 index 4a1ca4c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Object.st +++ /dev/null @@ -1,4394 +0,0 @@ -!ProtoObject subclass: #Object - instanceVariableNames: '' - classVariableNames: 'DependentsFields' - poolDictionaries: '' - category: 'Kernel-Objects'! - -!Object methodsFor: '*39Deprecated' stamp: 'gk 2/24/2004 08:49'! -beep - "Deprecated." - - self deprecated: 'Use Beeper class>>beep instead.'. - Beeper beep! ! - -!Object methodsFor: '*39Deprecated' stamp: 'gk 2/24/2004 08:50'! -beepPrimitive - "Deprecated. Beep in the absence of sound support." - - self deprecated: 'Use Beeper class>>beep or Beeper class>>beepPrimitive instead.'. - Beeper beepPrimitive! ! - -!Object methodsFor: '*39Deprecated' stamp: 'md 12/12/2003 17:02'! -beep: soundName - "Make the given sound, unless the making of sound is disabled in Preferences." - - self deprecated: 'Use SampledSound>>playSoundNamed: instead.'. - Preferences soundsEnabled - ifTrue: [self playSoundNamed: soundName] -! ! - -!Object methodsFor: '*39Deprecated' stamp: 'sd 11/19/2004 16:57'! -contentsGetz: x - self deprecated: 'there is no method named contents in object and in addition only one sender in a method not called'. - self contents: x! ! - -!Object methodsFor: '*39Deprecated' stamp: 'sd 11/13/2003 21:10'! -deprecatedExplanation: aString - "This method is OBSOLETE. Use #deprecated: instead." - self deprecated: 'Use Object>>deprecated: instead of deprecatedExplanation:.'. - - Preferences showDeprecationWarnings ifTrue: - [Deprecation signal: ('{1} has been deprecated. {2}' translated format: {thisContext sender printString. aString})]! ! - -!Object methodsFor: '*39Deprecated' stamp: 'sd 11/13/2003 21:11'! -deprecated: aBlock explanation: aString - "This method is OBSOLETE. Use #deprecated:block: instead." - self deprecated: 'Use Object>>deprecated:block: instead of deprecated:explanation:.'. - - Preferences showDeprecationWarnings ifTrue: - [Deprecation - signal: ('{1} has been deprecated. {2}' translated format: {thisContext sender printString. aString})]. - ^ aBlock value. -! ! - -!Object methodsFor: '*39Deprecated' stamp: 'md 12/12/2003 16:25'! -doIfNotNil: aBlock - self deprecated: 'use ifNotNilDo:'. - ^ self ifNotNilDo: aBlock -! ! - -!Object methodsFor: '*39Deprecated' stamp: 'md 11/27/2004 12:20'! -ifKindOf: aClass thenDo: aBlock - self deprecated: 'Deprecated. Just use #isKindOf:'. - ^ (self isKindOf: aClass) ifTrue: [aBlock value: self]! ! - -!Object methodsFor: '*39Deprecated' stamp: 'gk 2/23/2004 20:51'! -playSoundNamed: soundName - "Deprecated. - Play the sound with the given name." - - self deprecated: 'Use "SoundService default playSoundNamed: aName" instead.'. - SoundService default playSoundNamed: soundName! ! - - -!Object methodsFor: '*Aida' stamp: 'JM 4/22/2007 15:23'! -aidaCanBeLocked - "can we get an exclusive lock on that object (not already locked)?" - ^false! ! - -!Object methodsFor: '*Aida' stamp: 'JM 4/22/2007 15:23'! -aidaDontCache - "don't cache web content in a browser. Appropriate header is added to http response" - ^false! ! - -!Object methodsFor: '*Aida' stamp: 'JM 4/22/2007 15:24'! -aidaIsLocked - "is object locked exclusively?" - ^false! ! - -!Object methodsFor: '*Aida' stamp: 'JM 4/22/2007 15:24'! -aidaLock - "get an exclusive lock on that object. Until unlocked, noon else can get that lock. Return false if already locked, true if successfull" - ^false! ! - -!Object methodsFor: '*Aida' stamp: 'JM 4/22/2007 15:24'! -aidaUnlock - "release an exclusive lock if any" - ^true! ! - -!Object methodsFor: '*Aida' stamp: 'JM 4/22/2007 15:24'! -app - "fastest and most convinient way to find a web app for that object" - ^self webAppFor: self firstSessionFromStack! ! - -!Object methodsFor: '*Aida' stamp: 'JM 4/22/2007 15:25'! -contentType - - "Janko Mivsek, apr98" - "return 'text/html' as content type for web pages" - - ^'text/html'! ! - -!Object methodsFor: '*Aida' stamp: 'JM 4/22/2007 15:25'! -deepSearchOfClass: aClassName - "finf all objects of that class down in object hierarchy" - | objectDictionary class | - objectDictionary := IdentityDictionary new. - self deepCopyNotIn: objectDictionary. - class := aClassName asSymbol. - ^objectDictionary keys select: [:each | each class name = class].! ! - -!Object methodsFor: '*Aida' stamp: 'JM 4/22/2007 15:26'! -deepSearchOfObsoleteClasses - "find all objects of obsolete classes down in object hierarchy" - | objectDictionary | - objectDictionary := IdentityDictionary new. - self deepCopyNotIn: objectDictionary. - ^objectDictionary keys select: [:each | each class isObsolete].! ! - -!Object methodsFor: '*Aida' stamp: 'JM 4/22/2007 15:26'! -expiresTimestamp - "until when content of this object wont be changed" - "used in http response, override if you like to be included" - ^self modifiedTimestamp "to reload pages immediately"! ! - -!Object methodsFor: '*Aida' stamp: 'JM 4/22/2007 15:26'! -firstAppFromStack - "try to find a first sender up in calling stack, who is WebApplication" - | context | - context := thisContext. - [context notNil] whileTrue: [ - (context receiver isKindOf: WebApplication) ifTrue: [^context receiver]. - context := context sender]. - ^self firstSessionFromStack lastApp! ! - -!Object methodsFor: '*Aida' stamp: 'JM 4/25/2007 21:34'! -firstSessionFromStack - "try to find a first sender up in calling stack, who is AIDASite and get session if that call" - | context | - context := thisContext. - [context notNil] whileTrue: [ - (context receiver isKindOf: AIDASite) ifTrue: [^(context at: 3) "always?"]. - context := context sender]. - ^nil! ! - -!Object methodsFor: '*Aida' stamp: 'mivsek 1/10/2008 18:14'! -forLanguage: aLanguageCodeSymbol - "for multilingual support: returns an apropriate instance of itself for that language. - Langage is defined by ISO 639 2-letter language code, see - http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes" - ^false! ! - -!Object methodsFor: '*Aida' stamp: 'mivsek 1/10/2008 18:14'! -isMultilingual - "for multilingual support: override this if your domain object responds - to #forLanguage: and returns an apropriate instance of itself for that language" - ^false! ! - -!Object methodsFor: '*Aida' stamp: 'JM 4/22/2007 15:27'! -isVersionedObject - ^false! ! - -!Object methodsFor: '*Aida' stamp: 'JM 4/22/2007 15:27'! -isWebApplication - ^false! ! - -!Object methodsFor: '*Aida' stamp: 'JM 4/22/2007 15:27'! -isWebStyle - ^false! ! - -!Object methodsFor: '*Aida' stamp: 'JM 4/22/2007 15:27'! -modifiedTimestamp - "when this object was last modified" - "used in http response, override if you like to be included" - ^nil! ! - -!Object methodsFor: '*Aida' stamp: 'JM 4/22/2007 15:28'! -preferedUrl - "override with a suggestion for url of this method!! If not already used, - it will be considered by URLResolver during automatic url generation" - ^nil! ! - -!Object methodsFor: '*Aida' stamp: 'JM 4/22/2007 15:28'! -printWebAppNotFoundFor: aSession - | page | - page := WebPage new. - page addText: 'Cannot find aWebApplication for object a', self class name. - ^page! ! - -!Object methodsFor: '*Aida' stamp: 'JM 4/22/2007 15:28'! -printWebPageFor: aSession - "find appropriate web application to represent self as web page" - - | webApp | - webApp := self webAppFor: aSession. - ^webApp notNil - ifTrue: [webApp printWebPage] - ifFalse: [self printWebAppNotFoundFor: aSession]! ! - -!Object methodsFor: '*Aida' stamp: 'JM 4/22/2007 15:29'! -sendOver: aStream - "from Wiki rendering" - self printOn: aStream! ! - -!Object methodsFor: '*Aida' stamp: 'JM 4/22/2007 15:29'! -webAppFor: aSession - | webApp | - aSession isNil ifTrue: [^nil]. - webApp := aSession webAppFor: self. - webApp notNil ifTrue: [^webApp]. - webApp := WebApplication newFor: self on: aSession. - webApp notNil ifTrue: [aSession addWebApp: webApp for: self]. - ^webApp! ! - - -!Object methodsFor: '*DynamicBindings' stamp: 'svp 3/6/2003 16:08'! -binding - "Answer the DynamicBinding for the receiver (if any)" - - ^Bindings bindingFor: self ifNotBound: [nil]! ! - -!Object methodsFor: '*DynamicBindings' stamp: 'svp 4/29/2003 00:35'! -binding: anObject - "Set the dynamic binding for the receiver, if anObject is nil, then - remove the receiver's dynamic binding (if any)" - - ^anObject - ifNil: [self removeBinding] - ifNotNil: [Bindings bind: self to: anObject]! ! - -!Object methodsFor: '*DynamicBindings' stamp: 'svp 3/6/2003 16:09'! -hasBinding - "Answer whether or not the receiver has a dynamic binding" - - ^Bindings includesKey: self! ! - -!Object methodsFor: '*DynamicBindings' stamp: 'svp 3/6/2003 16:09'! -removeBinding - "Remove the dynamic binding associated with the receiver" - - ^Bindings removeKey: self ifAbsent: []! ! - - -!Object methodsFor: '*KomHttpServer' stamp: 'SVP 8/23/1999 19:17'! -asHtmlDocumentForRequest: aNetworkRequest - - self error: - ('The requested object (', - self asString, - '), could not be converted into HTML for your browser.')! ! - -!Object methodsFor: '*KomHttpServer' stamp: 'SVP 8/23/1999 19:23'! -asHttpResponseTo: anHttpRequest - - ^(self asHtmlDocumentForRequest: anHttpRequest) - asHttpResponseTo: anHttpRequest -! ! - -!Object methodsFor: '*KomHttpServer' stamp: 'svp 5/16/2003 12:47'! -isComancheModule - - ^false! ! - -!Object methodsFor: '*KomHttpServer' stamp: 'SVP 8/17/1999 17:51'! -mimeType - - ^MIMEDocument defaultContentType! ! - - -!Object methodsFor: '*Morphic-NewCurve-testing''' stamp: 'wiz 12/31/2005 21:31'! -isNonZero -"Overriden in Number. This returns the backstop answer for non-numbers" -^false.! ! - - -!Object methodsFor: '*Pinesoft-EventEnhancements' stamp: 'gvc 10/25/2006 18:18'! -when: anEventSelector -send: aMessageSelector -to: anObject -exclusive: aValueHolder - - self - when: anEventSelector - evaluate: ((ExclusiveWeakMessageSend - receiver: anObject - selector: aMessageSelector) - basicExecuting: aValueHolder)! ! - -!Object methodsFor: '*Pinesoft-EventEnhancements' stamp: 'gvc 10/25/2006 18:17'! -when: anEventSelector -send: aMessageSelector -to: anObject -with: anArg -exclusive: aValueHolder - - self - when: anEventSelector - evaluate: ((ExclusiveWeakMessageSend - receiver: anObject - selector: aMessageSelector - arguments: (Array with: anArg)) - basicExecuting: aValueHolder)! ! - -!Object methodsFor: '*Pinesoft-EventEnhancements' stamp: 'gvc 10/25/2006 18:17'! -when: anEventSelector -send: aMessageSelector -to: anObject -withArguments: anArgArray -exclusive: aValueHolder - - self - when: anEventSelector - evaluate: ((ExclusiveWeakMessageSend - receiver: anObject - selector: aMessageSelector - arguments: anArgArray) - basicExecuting: aValueHolder)! ! - -!Object methodsFor: '*Pinesoft-EventEnhancements' stamp: 'gvc 10/24/2006 11:50'! -when: anEventSelector -sendOnce: aMessageSelector -to: anObject - - self - when: anEventSelector - evaluate: (NonReentrantWeakMessageSend - receiver: anObject - selector: aMessageSelector)! ! - -!Object methodsFor: '*Pinesoft-EventEnhancements' stamp: 'gvc 10/24/2006 11:49'! -when: anEventSelector -sendOnce: aMessageSelector -to: anObject -with: anArg - - self - when: anEventSelector - evaluate: (NonReentrantWeakMessageSend - receiver: anObject - selector: aMessageSelector - arguments: (Array with: anArg))! ! - -!Object methodsFor: '*Pinesoft-EventEnhancements' stamp: 'gvc 10/24/2006 11:49'! -when: anEventSelector -sendOnce: aMessageSelector -to: anObject -withArguments: anArgArray - - self - when: anEventSelector - evaluate: (NonReentrantWeakMessageSend - receiver: anObject - selector: aMessageSelector - arguments: anArgArray)! ! - - -!Object methodsFor: '*Pinesoft-Widgets' stamp: 'gvc 1/10/2007 11:41'! -okToClose - "Sent to models when a window closing. - Allows this check to be independent of okToChange." - - ^true! ! - -!Object methodsFor: '*Pinesoft-Widgets' stamp: 'gvc 4/17/2007 17:41'! -taskbarIcon - "Answer the icon for the receiver in a task bar - or nil for the default." - - ^self class taskbarIcon! ! - - -!Object methodsFor: '*Pinesoft-Widgets-override' stamp: 'gvc 9/4/2007 12:32'! -windowActiveOnFirstClick - "Return true if my window should be active on first click." - - ^true! ! - - -!Object methodsFor: '*SeasideAdaptersCompatibility' stamp: 'pmm 11/25/2007 14:17'! -toString - ^self! ! - - -!Object methodsFor: '*Tools-Explorer' stamp: 'stephaneducasse 9/17/2005 21:52'! -exploreAndYourself - "i.e. explore; yourself. Thisway i can peek w/o typing all the parentheses" - self explore. - ^self! ! - -!Object methodsFor: '*Tools-Explorer' stamp: 'stephaneducasse 9/17/2005 21:48'! -exploreWithLabel: label - - ^ ObjectExplorer new openExplorerFor: self withLabel: -label! ! - - -!Object methodsFor: '*kernel-extensions-flagging' stamp: 'mtf 1/26/2008 23:34'! -deprecated - "Warn that the sending method has been deprecated." - - Preferences showDeprecationWarnings ifTrue: - [Deprecation signal: thisContext sender printString, ' has been deprecated.']! ! - - -!Object methodsFor: '*kernel-extensions-flexibility' stamp: 'kph 1/27/2008 19:21'! -askFor: selector - - "returns true or false" - - ^ (self askFor: selector ifAbsent: nil) == true! ! - -!Object methodsFor: '*kernel-extensions-flexibility' stamp: 'kph 10/17/2007 14:01'! -askFor: selector ifAbsent: aBlock - - "enables a default value to be specified in order to be tolerant of potentially missing methods - - e.g. - (myPoint askFor: #originOffset) ifAbsent: [ 0@0 ]. - " - - ^ (self class canUnderstand: selector) ifFalse: [ aBlock value ] ifTrue: [self perform: selector]! ! - - -!Object methodsFor: '*kernel-extensions-logging' stamp: 'mtf 1/26/2008 23:52'! -log - "This method provides the univeral entry point fo all logging mechanisms" - - "Options: - 1. Null for null logging - 2. A LogRouter instance wih a FrameworkAdaptor. - 3. CurrentLog a process local variable supplying a LogRouter" - - ^ (Smalltalk at: #CurrentLog ifAbsent: [ Null default ]) value - sender: thisContext sender; beginEntry; yourself! ! - - -!Object methodsFor: '*magritte-model-accessing' stamp: 'lr 3/9/2006 11:31'! -description - "Return the description of the reciever. Subclasses might override this message to return instance-based descriptions." - - ^ self class description! ! - -!Object methodsFor: '*magritte-model-accessing' stamp: 'lr 3/9/2006 11:31'! -mementoClass - "Return a class to be used to remember or cache the receiver, namely a memento object." - - ^ MACheckedMemento! ! - - -!Object methodsFor: '*magritte-model-model' stamp: 'lr 3/9/2006 11:31'! -readUsing: aDescription - "Dispatch the read-access to the receiver using the accessor of aDescription." - - ^ aDescription accessor read: self! ! - -!Object methodsFor: '*magritte-model-model' stamp: 'lr 3/9/2006 11:31'! -write: anObject using: aDescription - "Dispatch the write-access to the receiver of anObject using the accessor of aDescription." - - aDescription accessor write: anObject to: self! ! - - -!Object methodsFor: '*magritte-model-testing' stamp: 'lr 3/9/2006 11:31'! -isDescription - ^ false! ! - - -!Object methodsFor: '*magritte-morph-converting' stamp: 'lr 3/9/2006 11:33'! -asMorph - ^ self description asMorphOn: self! ! - - -!Object methodsFor: '*magritte-seaside-converting' stamp: 'lr 3/9/2006 11:33'! -asComponent - ^ self description asComponentOn: self! ! - - -!Object methodsFor: '*monticello' stamp: 'dvf 8/10/2004 23:25'! -isConflict - ^false! ! - - -!Object methodsFor: '*null' stamp: 'kph 9/6/2007 23:31'! -ifNull: aBlock - - ^ self! ! - -!Object methodsFor: '*null' stamp: 'kph 9/6/2007 23:33'! -isNull - - ^ false! ! - -!Object methodsFor: '*null' stamp: 'kph 4/12/2007 08:27'! -orNull - - ^ self! ! - - -!Object methodsFor: '*ob-tools-inspector' stamp: 'lr 6/5/2008 11:07'! -basicInspectorNodes - - - | nodes | - nodes := OrderedCollection new: self class instSize + self basicSize + 5. - nodes add: self selfInspectorNode. - self class allInstVarNames withIndexDo: [ :name :index | - nodes add: (OTNamedVariableNode on: self index: index name: name) ]. - 1 to: self basicSize do: [ :index | - nodes add: (OTIndexedVariableNode on: self index: index) ]. - ^ nodes! ! - -!Object methodsFor: '*ob-tools-inspector' stamp: 'lr 6/5/2008 11:07'! -protocolInspectorNodes - - - ^ self class allSelectors asArray sort - collect: [ :each | OTProtocolInspectorNode on: self selector: each ]! ! - -!Object methodsFor: '*ob-tools-inspector' stamp: 'lr 6/5/2008 09:58'! -selfInspectorNode - ^ OTDerivedInspectorNode on: self label: 'self' block: [ :obj | obj ]! ! - - -!Object methodsFor: '*omnibrowser-converting' stamp: 'cwp 4/17/2006 12:16'! -asAnnouncement - ^ self! ! - - -!Object methodsFor: '*pier-model' stamp: 'lr 3/9/2006 11:29'! -accept: aVisitor - self subclassResponsibility! ! - -!Object methodsFor: '*pier-model' stamp: 'lr 3/9/2006 11:29'! -acceptDecorated: aVisitor - self accept: aVisitor! ! - - -!Object methodsFor: '*rio-kernel' stamp: 'kph 3/8/2007 21:25'! -isRio - - ^ false! ! - - -!Object methodsFor: '*scriptaculous' stamp: 'lr 1/4/2007 17:20'! -asFunction - ^ self asFunction: #()! ! - -!Object methodsFor: '*scriptaculous' stamp: 'lr 1/4/2007 17:21'! -asFunction: aCollection - ^ SUFunction new add: self; arguments: aCollection! ! - -!Object methodsFor: '*scriptaculous' stamp: 'lr 4/11/2006 19:49'! -asJavascript - ^ String streamContents: [ :stream | self javascriptOn: stream ]! ! - - -!Object methodsFor: '*scriptaculous-printing' stamp: 'lr 4/20/2006 21:10'! -javascriptOn: aStream - self printOn: aStream! ! - - -!Object methodsFor: '*seaside2' stamp: 'lr 6/5/2007 21:35'! -deprecatedApi - self deprecatedApi: thisContext sender displayString! ! - -!Object methodsFor: '*seaside2' stamp: 'lr 6/5/2007 21:35'! -deprecatedApi: aString - WADeprecatedApi raiseSignal: aString! ! - -!Object methodsFor: '*seaside2' stamp: 'lr 5/9/2007 08:47'! -inspectorFields - | members | - members := Array new writeStream. - self class allInstVarNames withIndexDo: [ :each :index | - members nextPut: each -> (self instVarAt: index) ]. - self class isVariable ifTrue: [ - 1 to: self size do: [ :index | - members nextPut: index -> (self at: index) ] ]. - ^ members contents! ! - -!Object methodsFor: '*seaside2' stamp: 'avi 3/14/2005 15:19'! -labelForSelector: aSymbol - ^ aSymbol asCapitalizedPhrase! ! - -!Object methodsFor: '*seaside2' stamp: 'pmm 4/7/2007 17:14'! -renderOn: aRenderer - "Override this method to customize how objects (not components) are rendered when passed as an argument to #render:. The default is the return value of #displayString. - Just remember that you can not use #callback:, #on:of:, or #call:" - - aRenderer text: self! ! - -!Object methodsFor: '*seaside2' stamp: 'lr 3/19/2007 23:13'! -restoreFromSnapshot: anObject - self copyFrom: anObject! ! - -!Object methodsFor: '*seaside2' stamp: 'avi 9/1/2004 21:20'! -snapshotCopy - ^ self shallowCopy! ! - -!Object methodsFor: '*seaside2' stamp: 'lr 10/28/2007 14:42'! -validationError: message - ^WAValidationNotification raiseSignal: message! ! - - -!Object methodsFor: '*seaside2-encoding' stamp: 'lr 3/26/2007 20:16'! -encodeOn: aDocument - aDocument print: self displayString! ! - - -!Object methodsFor: '*seaside2-squeak' stamp: 'pmm 5/22/2007 22:10'! -beMutable - "for VW compatibility, a hack that allows to cache a value in a literal array"! ! - -!Object methodsFor: '*seaside2-squeak' stamp: 'lr 7/12/2005 17:01'! -displayString - ^ self asString! ! - - -!Object methodsFor: '*services-base' stamp: 'rr 3/21/2006 11:54'! -requestor - "returns the focused window's requestor" - - "SystemWindow focusedWindow ifNotNilDo: [:w | ^ w requestor]." - - "triggers an infinite loop" - - ^ Requestor default! ! - - -!Object methodsFor: '*system-support' stamp: 'dvf 8/23/2003 12:27'! -systemNavigation - - ^ SystemNavigation default! ! - - -!Object methodsFor: '*tools-browser' stamp: 'mu 3/6/2004 15:13'! -browse - self systemNavigation browseClass: self class! ! - -!Object methodsFor: '*tools-browser' stamp: 'mu 3/11/2004 16:00'! -browseHierarchy - self systemNavigation browseHierarchy: self class! ! - - -!Object methodsFor: '*universes' stamp: 'ls 11/26/2006 12:33'! -isUPackage - ^false! ! - -!Object methodsFor: '*universes' stamp: 'ls 11/26/2006 12:33'! -isUPackageCategory - ^false! ! - - -!Object methodsFor: 'accessing' stamp: 'sw 4/30/1998 12:18'! -addInstanceVarNamed: aName withValue: aValue - "Add an instance variable named aName and give it value aValue" - self class addInstVarName: aName asString. - self instVarAt: self class instSize put: aValue! ! - -!Object methodsFor: 'accessing' stamp: 'yo 6/29/2004 11:39'! -at: index - "Primitive. Assumes receiver is indexable. Answer the value of an - indexable element in the receiver. Fail if the argument index is not an - Integer or is out of bounds. Essential. See Object documentation - whatIsAPrimitive." - - - index isInteger ifTrue: - [self class isVariable - ifTrue: [self errorSubscriptBounds: index] - ifFalse: [self errorNotIndexable]]. - index isNumber - ifTrue: [^self at: index asInteger] - ifFalse: [self errorNonIntegerIndex]! ! - -!Object methodsFor: 'accessing'! -at: index modify: aBlock - "Replace the element of the collection with itself transformed by the block" - ^ self at: index put: (aBlock value: (self at: index))! ! - -!Object methodsFor: 'accessing' stamp: 'yo 6/29/2004 13:08'! -at: index put: value - "Primitive. Assumes receiver is indexable. Store the argument value in - the indexable element of the receiver indicated by index. Fail if the - index is not an Integer or is out of bounds. Or fail if the value is not of - the right type for this kind of collection. Answer the value that was - stored. Essential. See Object documentation whatIsAPrimitive." - - - index isInteger ifTrue: - [self class isVariable - ifTrue: [(index >= 1 and: [index <= self size]) - ifTrue: [self errorImproperStore] - ifFalse: [self errorSubscriptBounds: index]] - ifFalse: [self errorNotIndexable]]. - index isNumber - ifTrue: [^self at: index asInteger put: value] - ifFalse: [self errorNonIntegerIndex]! ! - -!Object methodsFor: 'accessing' stamp: 'yo 9/20/2004 10:22'! -basicAddInstanceVarNamed: aName withValue: aValue - "Add an instance variable named aName and give it value aValue" - self class addInstVarName: aName asString. - self instVarAt: self class instSize put: aValue! ! - -!Object methodsFor: 'accessing'! -basicAt: index - "Primitive. Assumes receiver is indexable. Answer the value of an - indexable element in the receiver. Fail if the argument index is not an - Integer or is out of bounds. Essential. Do not override in a subclass. See - Object documentation whatIsAPrimitive." - - - index isInteger ifTrue: [self errorSubscriptBounds: index]. - index isNumber - ifTrue: [^self basicAt: index asInteger] - ifFalse: [self errorNonIntegerIndex]! ! - -!Object methodsFor: 'accessing'! -basicAt: index put: value - "Primitive. Assumes receiver is indexable. Store the second argument - value in the indexable element of the receiver indicated by index. Fail - if the index is not an Integer or is out of bounds. Or fail if the value is - not of the right type for this kind of collection. Answer the value that - was stored. Essential. Do not override in a subclass. See Object - documentation whatIsAPrimitive." - - - index isInteger - ifTrue: [(index >= 1 and: [index <= self size]) - ifTrue: [self errorImproperStore] - ifFalse: [self errorSubscriptBounds: index]]. - index isNumber - ifTrue: [^self basicAt: index asInteger put: value] - ifFalse: [self errorNonIntegerIndex]! ! - -!Object methodsFor: 'accessing'! -basicSize - "Primitive. Answer the number of indexable variables in the receiver. - This value is the same as the largest legal subscript. Essential. Do not - override in any subclass. See Object documentation whatIsAPrimitive." - - - "The number of indexable fields of fixed-length objects is 0" - ^0 ! ! - -!Object methodsFor: 'accessing'! -bindWithTemp: aBlock - ^ aBlock value: self value: nil! ! - -!Object methodsFor: 'accessing' stamp: 'md 10/7/2004 15:43'! -ifNil: nilBlock ifNotNilDo: aBlock - "Evaluate aBlock with the receiver as its argument." - - ^ aBlock value: self -! ! - -!Object methodsFor: 'accessing' stamp: 'di 11/8/2000 21:04'! -ifNotNilDo: aBlock - "Evaluate the given block with the receiver as its argument." - - ^ aBlock value: self -! ! - -!Object methodsFor: 'accessing' stamp: 'md 10/7/2004 15:43'! -ifNotNilDo: aBlock ifNil: nilBlock - "Evaluate aBlock with the receiver as its argument." - - ^ aBlock value: self -! ! - -!Object methodsFor: 'accessing' stamp: 'ajh 1/21/2003 12:59'! -in: aBlock - "Evaluate the given block with the receiver as its argument." - - ^ aBlock value: self -! ! - -!Object methodsFor: 'accessing' stamp: 'sw 10/17/2000 11:15'! -presenter - "Answer the presenter object associated with the receiver. For morphs, there is in effect a clear containment hierarchy of presenters (accessed via their association with PasteUpMorphs); for arbitrary objects the hook is simply via the current world, at least at present." - - ^ self currentWorld presenter! ! - -!Object methodsFor: 'accessing'! -readFromString: aString - "Create an object based on the contents of aString." - - ^self readFrom: (ReadStream on: aString)! ! - -!Object methodsFor: 'accessing' stamp: 'di 3/29/1999 13:10'! -size - "Primitive. Answer the number of indexable variables in the receiver. - This value is the same as the largest legal subscript. Essential. See Object - documentation whatIsAPrimitive." - - - self class isVariable ifFalse: [self errorNotIndexable]. - ^ 0! ! - -!Object methodsFor: 'accessing' stamp: 'md 5/16/2006 12:34'! -yourself - "Answer self." - ^self! ! - - -!Object methodsFor: 'associating' stamp: 'md 7/22/2005 16:03'! --> anObject - "Answer an Association between self and anObject" - - ^Association basicNew key: self value: anObject! ! - - -!Object methodsFor: 'binding'! -bindingOf: aString - ^nil! ! - - -!Object methodsFor: 'breakpoint' stamp: 'bkv 7/1/2003 12:33'! -break - "This is a simple message to use for inserting breakpoints during debugging. - The debugger is opened by sending a signal. This gives a chance to restore - invariants related to multiple processes." - - BreakPoint signal. - - "nil break."! ! - - -!Object methodsFor: 'casing'! -caseOf: aBlockAssociationCollection - "The elements of aBlockAssociationCollection are associations between blocks. - Answer the evaluated value of the first association in aBlockAssociationCollection - whose evaluated key equals the receiver. If no match is found, report an error." - - ^ self caseOf: aBlockAssociationCollection otherwise: [self caseError] - -"| z | z _ {[#a]->[1+1]. ['b' asSymbol]->[2+2]. [#c]->[3+3]}. #b caseOf: z" -"| z | z _ {[#a]->[1+1]. ['d' asSymbol]->[2+2]. [#c]->[3+3]}. #b caseOf: z" -"The following are compiled in-line:" -"#b caseOf: {[#a]->[1+1]. ['b' asSymbol]->[2+2]. [#c]->[3+3]}" -"#b caseOf: {[#a]->[1+1]. ['d' asSymbol]->[2+2]. [#c]->[3+3]}"! ! - -!Object methodsFor: 'casing'! -caseOf: aBlockAssociationCollection otherwise: aBlock - "The elements of aBlockAssociationCollection are associations between blocks. - Answer the evaluated value of the first association in aBlockAssociationCollection - whose evaluated key equals the receiver. If no match is found, answer the result - of evaluating aBlock." - - aBlockAssociationCollection associationsDo: - [:assoc | (assoc key value = self) ifTrue: [^assoc value value]]. - ^ aBlock value - -"| z | z _ {[#a]->[1+1]. ['b' asSymbol]->[2+2]. [#c]->[3+3]}. #b caseOf: z otherwise: [0]" -"| z | z _ {[#a]->[1+1]. ['d' asSymbol]->[2+2]. [#c]->[3+3]}. #b caseOf: z otherwise: [0]" -"The following are compiled in-line:" -"#b caseOf: {[#a]->[1+1]. ['b' asSymbol]->[2+2]. [#c]->[3+3]} otherwise: [0]" -"#b caseOf: {[#a]->[1+1]. ['d' asSymbol]->[2+2]. [#c]->[3+3]} otherwise: [0]"! ! - - -!Object methodsFor: 'class membership'! -class - "Primitive. Answer the object which is the receiver's class. Essential. See - Object documentation whatIsAPrimitive." - - - self primitiveFailed! ! - -!Object methodsFor: 'class membership' stamp: 'sw 9/27/2001 15:51'! -inheritsFromAnyIn: aList - "Answer whether the receiver inherits from any class represented by any element in the list. The elements of the list can be classes, class name symbols, or strings representing possible class names. This allows speculative membership tests to be made even when some of the classes may not be known to the current image, and even when their names are not interned symbols." - - | aClass | - aList do: - [:elem | Symbol hasInterned: elem asString ifTrue: - [:elemSymbol | (((aClass _ Smalltalk at: elemSymbol ifAbsent: [nil]) isKindOf: Class) - and: [self isKindOf: aClass]) - ifTrue: - [^ true]]]. - ^ false - - -" -{3. true. 'olive'} do: - [:token | - {{#Number. #Boolean}. {Number. Boolean }. {'Number'. 'Boolean'}} do: - [:list | - Transcript cr; show: token asString, ' list element provided as a ', list first class name, ' - ', (token inheritsFromAnyIn: list) asString]] -"! ! - -!Object methodsFor: 'class membership'! -isKindOf: aClass - "Answer whether the class, aClass, is a superclass or class of the receiver." - - self class == aClass - ifTrue: [^true] - ifFalse: [^self class inheritsFrom: aClass]! ! - -!Object methodsFor: 'class membership' stamp: 'sw 2/16/98 02:08'! -isKindOf: aClass orOf: anotherClass - "Answer whether either of the classes, aClass or anotherClass,, is a superclass or class of the receiver. A convenience; could be somewhat optimized" - ^ (self isKindOf: aClass) or: [self isKindOf: anotherClass]! ! - -!Object methodsFor: 'class membership'! -isMemberOf: aClass - "Answer whether the receiver is an instance of the class, aClass." - - ^self class == aClass! ! - -!Object methodsFor: 'class membership'! -respondsTo: aSymbol - "Answer whether the method dictionary of the receiver's class contains - aSymbol as a message selector." - - ^self class canUnderstand: aSymbol! ! - -!Object methodsFor: 'class membership' stamp: 'tk 10/21/1998 12:38'! -xxxClass - "For subclasses of nil, such as ObjectOut" - ^ self class! ! - - -!Object methodsFor: 'comparing' stamp: 'tk 4/16/1999 18:26'! -closeTo: anObject - "Answer whether the receiver and the argument represent the same - object. If = is redefined in any subclass, consider also redefining the - message hash." - - | ans | - [ans _ self = anObject] ifError: [:aString :aReceiver | ^ false]. - ^ ans! ! - -!Object methodsFor: 'comparing'! -hash - "Answer a SmallInteger whose value is related to the receiver's identity. - May be overridden, and should be overridden in any classes that define = " - - ^ self identityHash! ! - -!Object methodsFor: 'comparing' stamp: 'pm 9/23/97 09:36'! -hashMappedBy: map - "Answer what my hash would be if oops changed according to map." - - ^map newHashFor: self! ! - -!Object methodsFor: 'comparing' stamp: 'di 9/27/97 20:23'! -identityHashMappedBy: map - "Answer what my hash would be if oops changed according to map." - - ^map newHashFor: self! ! - -!Object methodsFor: 'comparing' stamp: 'sw 8/20/1998 12:34'! -identityHashPrintString - "'fred' identityHashPrintString" - - ^ '(', self identityHash printString, ')'! ! - -!Object methodsFor: 'comparing' stamp: 'ajh 2/2/2002 15:02'! -literalEqual: other - - ^ self class == other class and: [self = other]! ! - -!Object methodsFor: 'comparing'! -= anObject - "Answer whether the receiver and the argument represent the same - object. If = is redefined in any subclass, consider also redefining the - message hash." - - ^self == anObject! ! - -!Object methodsFor: 'comparing'! -~= anObject - "Answer whether the receiver and the argument do not represent the - same object." - - ^self = anObject == false! ! - - -!Object methodsFor: 'converting' stamp: 'di 11/9/1998 12:15'! -adaptToFloat: rcvr andSend: selector - "If no method has been provided for adapting an object to a Float, - then it may be adequate to simply adapt it to a number." - ^ self adaptToNumber: rcvr andSend: selector! ! - -!Object methodsFor: 'converting' stamp: 'di 11/9/1998 12:14'! -adaptToFraction: rcvr andSend: selector - "If no method has been provided for adapting an object to a Fraction, - then it may be adequate to simply adapt it to a number." - ^ self adaptToNumber: rcvr andSend: selector! ! - -!Object methodsFor: 'converting' stamp: 'di 11/9/1998 12:15'! -adaptToInteger: rcvr andSend: selector - "If no method has been provided for adapting an object to a Integer, - then it may be adequate to simply adapt it to a number." - ^ self adaptToNumber: rcvr andSend: selector! ! - -!Object methodsFor: 'converting' stamp: 'rw 4/27/2002 07:48'! -asActionSequence - - ^WeakActionSequence with: self! ! - -!Object methodsFor: 'converting' stamp: 'rw 7/20/2003 16:03'! -asActionSequenceTrappingErrors - - ^WeakActionSequenceTrappingErrors with: self! ! - -!Object methodsFor: 'converting' stamp: 'svp 5/16/2000 18:14'! -asDraggableMorph - ^(StringMorph contents: self printString) - color: Color white; - yourself! ! - -!Object methodsFor: 'converting' stamp: 'sma 5/12/2000 17:39'! -asOrderedCollection - "Answer an OrderedCollection with the receiver as its only element." - - ^ OrderedCollection with: self! ! - -!Object methodsFor: 'converting'! -asString - "Answer a string that represents the receiver." - - ^ self printString ! ! - -!Object methodsFor: 'converting' stamp: 'ajh 3/11/2003 10:27'! -asStringOrText - "Answer a string that represents the receiver." - - ^ self printString ! ! - -!Object methodsFor: 'converting'! -as: aSimilarClass - "Create an object of class aSimilarClass that has similar contents to the receiver." - - ^ aSimilarClass newFrom: self! ! - -!Object methodsFor: 'converting' stamp: 'RAA 8/2/1999 12:41'! -complexContents - - ^self! ! - -!Object methodsFor: 'converting' stamp: 'ajh 7/6/2003 20:37'! -mustBeBoolean - "Catches attempts to test truth of non-Booleans. This message is sent from the VM. The sending context is rewound to just before the jump causing this exception." - - ^ self mustBeBooleanIn: thisContext sender! ! - -!Object methodsFor: 'converting' stamp: 'ajh 7/6/2003 20:40'! -mustBeBooleanIn: context - "context is the where the non-boolean error occurred. Rewind context to before jump then raise error." - - | proceedValue | - context skipBackBeforeJump. - proceedValue _ NonBooleanReceiver new - object: self; - signal: 'proceed for truth.'. - ^ proceedValue ~~ false! ! - -!Object methodsFor: 'converting' stamp: 'sw 3/26/2001 12:12'! -printDirectlyToDisplay - "For debugging: write the receiver's printString directly to the display at (0, 100); senders of this are detected by the check-for-slips mechanism." - - self asString displayAt: 0@100 - -"StringMorph someInstance printDirectlyToDisplay"! ! - -!Object methodsFor: 'converting' stamp: 'RAA 3/31/1999 12:13'! -withoutListWrapper - - ^self! ! - - -!Object methodsFor: 'copying'! -clone - - - self primitiveFailed! ! - -!Object methodsFor: 'copying' stamp: 'ajh 8/18/2001 21:25'! -copy - "Answer another instance just like the receiver. Subclasses typically override postCopy; they typically do not override shallowCopy." - - ^self shallowCopy postCopy! ! - -!Object methodsFor: 'copying' stamp: 'tk 8/20/1998 16:01'! -copyAddedStateFrom: anotherObject - "Copy over the values of instance variables added by the receiver's class from anotherObject to the receiver. These will be remapped in mapUniClasses, if needed." - - self class superclass instSize + 1 to: self class instSize do: - [:index | self instVarAt: index put: (anotherObject instVarAt: index)]! ! - -!Object methodsFor: 'copying' stamp: 'tpr 2/14/2004 21:53'! -copyFrom: anotherObject - "Copy to myself all instance variables I have in common with anotherObject. This is dangerous because it ignores an object's control over its own inst vars. " - - | mine his | - - mine _ self class allInstVarNames. - his _ anotherObject class allInstVarNames. - 1 to: (mine size min: his size) do: [:ind | - (mine at: ind) = (his at: ind) ifTrue: [ - self instVarAt: ind put: (anotherObject instVarAt: ind)]]. - self class isVariable & anotherObject class isVariable ifTrue: [ - 1 to: (self basicSize min: anotherObject basicSize) do: [:ind | - self basicAt: ind put: (anotherObject basicAt: ind)]].! ! - -!Object methodsFor: 'copying' stamp: 'ajh 5/23/2002 00:38'! -copySameFrom: otherObject - "Copy to myself all instance variables named the same in otherObject. - This ignores otherObject's control over its own inst vars." - - | myInstVars otherInstVars match | - myInstVars _ self class allInstVarNames. - otherInstVars _ otherObject class allInstVarNames. - myInstVars doWithIndex: [:each :index | - (match _ otherInstVars indexOf: each) > 0 ifTrue: - [self instVarAt: index put: (otherObject instVarAt: match)]]. - 1 to: (self basicSize min: otherObject basicSize) do: [:i | - self basicAt: i put: (otherObject basicAt: i)]. -! ! - -!Object methodsFor: 'copying' stamp: 'tk 4/20/1999 14:44'! -copyTwoLevel - "one more level than a shallowCopy" - - | newObject class index | - class _ self class. - newObject _ self clone. - newObject == self ifTrue: [^ self]. - class isVariable - ifTrue: - [index _ self basicSize. - [index > 0] - whileTrue: - [newObject basicAt: index put: (self basicAt: index) shallowCopy. - index _ index - 1]]. - index _ class instSize. - [index > 0] - whileTrue: - [newObject instVarAt: index put: (self instVarAt: index) shallowCopy. - index _ index - 1]. - ^newObject! ! - -!Object methodsFor: 'copying'! -deepCopy - "Answer a copy of the receiver with its own copy of each instance - variable." - - | newObject class index | - class _ self class. - (class == Object) ifTrue: [^self]. - class isVariable - ifTrue: - [index _ self basicSize. - newObject _ class basicNew: index. - [index > 0] - whileTrue: - [newObject basicAt: index put: (self basicAt: index) deepCopy. - index _ index - 1]] - ifFalse: [newObject _ class basicNew]. - index _ class instSize. - [index > 0] - whileTrue: - [newObject instVarAt: index put: (self instVarAt: index) deepCopy. - index _ index - 1]. - ^newObject! ! - -!Object methodsFor: 'copying' stamp: 'hg 11/23/1999 13:43'! -initialDeepCopierSize - "default value is 4096; other classes may override this, esp. for smaller (=faster) sizes" - - ^4096! ! - -!Object methodsFor: 'copying' stamp: 'ajh 1/27/2003 18:45'! -postCopy - "self is a shallow copy, subclasses should copy fields as necessary to complete the full copy" - - ^ self! ! - -!Object methodsFor: 'copying' stamp: 'jm 11/14/97 11:08'! -shallowCopy - "Answer a copy of the receiver which shares the receiver's instance variables." - | class newObject index | - - class _ self class. - class isVariable - ifTrue: - [index _ self basicSize. - newObject _ class basicNew: index. - [index > 0] - whileTrue: - [newObject basicAt: index put: (self basicAt: index). - index _ index - 1]] - ifFalse: [newObject _ class basicNew]. - index _ class instSize. - [index > 0] - whileTrue: - [newObject instVarAt: index put: (self instVarAt: index). - index _ index - 1]. - ^ newObject! ! - -!Object methodsFor: 'copying' stamp: 'tk 3/11/2003 13:58'! -veryDeepCopy - "Do a complete tree copy using a dictionary. An object in the tree twice is only copied once. All references to the object in the copy of the tree will point to the new copy." - - | copier new | - copier _ DeepCopier new initialize: self initialDeepCopierSize. - new _ self veryDeepCopyWith: copier. - copier mapUniClasses. - copier references associationsDo: [:assoc | - assoc value veryDeepFixupWith: copier]. - copier fixDependents. - ^ new! ! - -!Object methodsFor: 'copying' stamp: 'tk 3/11/2003 13:58'! -veryDeepCopySibling - "Do a complete tree copy using a dictionary. Substitute a clone of oldPlayer for the root. Normally, a Player or non systemDefined object would have a new class. We do not want one this time. An object in the tree twice, is only copied once. All references to the object in the copy of the tree will point to the new copy." - - | copier new | - copier _ DeepCopier new initialize: self initialDeepCopierSize. - copier newUniClasses: false. - new _ self veryDeepCopyWith: copier. - copier mapUniClasses. - copier references associationsDo: [:assoc | - assoc value veryDeepFixupWith: copier]. - copier fixDependents. - ^ new! ! - -!Object methodsFor: 'copying' stamp: 'tk 5/13/2003 19:39'! -veryDeepCopyUsing: copier - "Do a complete tree copy using a dictionary. An object in the tree twice is only copied once. All references to the object in the copy of the tree will point to the new copy. - Same as veryDeepCopy except copier (with dictionary) is supplied. - ** do not delete this method, even if it has no callers **" - - | new refs newDep newModel | - new _ self veryDeepCopyWith: copier. - copier mapUniClasses. - copier references associationsDo: [:assoc | - assoc value veryDeepFixupWith: copier]. - "Fix dependents" - refs _ copier references. - DependentsFields associationsDo: [:pair | - pair value do: [:dep | - (newDep _ refs at: dep ifAbsent: [nil]) ifNotNil: [ - newModel _ refs at: pair key ifAbsent: [pair key]. - newModel addDependent: newDep]]]. - ^ new! ! - -!Object methodsFor: 'copying' stamp: 'tk 3/11/2003 14:12'! -veryDeepCopyWith: deepCopier - "Copy me and the entire tree of objects I point to. An object in the tree twice is copied once, and both references point to him. deepCopier holds a dictionary of objects we have seen. Some classes refuse to be copied. Some classes are picky about which fields get deep copied." - | class index sub subAss new uc sup has mine | - deepCopier references at: self ifPresent: [:newer | ^ newer]. "already did him" - class _ self class. - class isMeta ifTrue: [^ self]. "a class" - new _ self clone. - (class isSystemDefined not and: [deepCopier newUniClasses "allowed"]) ifTrue: [ - uc _ deepCopier uniClasses at: class ifAbsent: [nil]. - uc ifNil: [ - deepCopier uniClasses at: class put: (uc _ self copyUniClassWith: deepCopier). - deepCopier references at: class put: uc]. "remember" - new _ uc new. - new copyFrom: self]. "copy inst vars in case any are weak" - deepCopier references at: self put: new. "remember" - (class isVariable and: [class isPointers]) ifTrue: - [index _ self basicSize. - [index > 0] whileTrue: - [sub _ self basicAt: index. - (subAss _ deepCopier references associationAt: sub ifAbsent: [nil]) - ifNil: [new basicAt: index put: (sub veryDeepCopyWith: deepCopier)] - ifNotNil: [new basicAt: index put: subAss value]. - index _ index - 1]]. - "Ask each superclass if it wants to share (weak copy) any inst vars" - new veryDeepInner: deepCopier. "does super a lot" - - "other superclasses want all inst vars deep copied" - sup _ class. index _ class instSize. - [has _ sup compiledMethodAt: #veryDeepInner: ifAbsent: [nil]. - has _ has ifNil: [class isSystemDefined not "is a uniClass"] ifNotNil: [true]. - mine _ sup instVarNames. - has ifTrue: [index _ index - mine size] "skip inst vars" - ifFalse: [1 to: mine size do: [:xx | - sub _ self instVarAt: index. - (subAss _ deepCopier references associationAt: sub ifAbsent: [nil]) - "use association, not value, so nil is an exceptional value" - ifNil: [new instVarAt: index put: - (sub veryDeepCopyWith: deepCopier)] - ifNotNil: [new instVarAt: index put: subAss value]. - index _ index - 1]]. - (sup _ sup superclass) == nil] whileFalse. - new rehash. "force Sets and Dictionaries to rehash" - ^ new -! ! - -!Object methodsFor: 'copying' stamp: 'tk 1/6/1999 17:39'! -veryDeepFixupWith: deepCopier - "I have no fields and no superclass. Catch the super call." -! ! - -!Object methodsFor: 'copying' stamp: 'tk 9/4/2001 10:30'! -veryDeepInner: deepCopier - "No special treatment for inst vars of my superclasses. Override when some need to be weakly copied. Object>>veryDeepCopyWith: will veryDeepCopy any inst var whose class does not actually define veryDeepInner:" -! ! - - -!Object methodsFor: 'creation' stamp: 'nk 2/26/2004 13:35'! -asStringMorph - "Open a StringMorph, as best one can, on the receiver" - - ^ self asStringOrText asStringMorph -! ! - -!Object methodsFor: 'creation' stamp: 'nk 2/26/2004 13:35'! -asTextMorph - "Open a TextMorph, as best one can, on the receiver" - - ^ TextMorph new contentsAsIs: self asStringOrText -! ! - -!Object methodsFor: 'creation' stamp: 'sw 1/29/2002 21:45'! -openAsMorph - "Open a morph, as best one can, on the receiver" - - ^ self asMorph openInHand - -" -234 openAsMorph -(ScriptingSystem formAtKey: #TinyMenu) openAsMorph -'fred' openAsMorph -"! ! - - -!Object methodsFor: 'debugging' stamp: 'md 11/24/2004 11:45'! -haltIf: condition - "This is the typical message to use for inserting breakpoints during - debugging. Param can be a block or expression, halt if true. - If the Block has one arg, the receiver is bound to that. - If the condition is a selector, we look up in the callchain. Halt if - any method's selector equals selector." - | cntxt | - - condition isSymbol ifTrue:[ - "only halt if a method with selector symbol is in callchain" - cntxt := thisContext. - [cntxt sender isNil] whileFalse: [ - cntxt := cntxt sender. - (cntxt selector = condition) ifTrue: [Halt signal]. - ]. - ^self. - ]. - (condition isBlock - ifTrue: [condition valueWithPossibleArgument: self] - ifFalse: [condition] - ) ifTrue: [ - Halt signal - ].! ! - -!Object methodsFor: 'debugging'! -needsWork! ! - - -!Object methodsFor: 'debugging-haltOnce' stamp: 'sbw 6/2/2004 08:26'! -checkHaltCountExpired - | counter | - counter _ Smalltalk at: #HaltCount ifAbsent: [0]. - ^counter = 0! ! - -!Object methodsFor: 'debugging-haltOnce' stamp: 'sbw 5/19/2004 19:04'! -clearHaltOnce - "Turn on the halt once flag." - Smalltalk at: #HaltOnce put: false! ! - -!Object methodsFor: 'debugging-haltOnce' stamp: 'sbw 6/2/2004 08:30'! -decrementAndCheckHaltCount - self decrementHaltCount. - ^self checkHaltCountExpired! ! - -!Object methodsFor: 'debugging-haltOnce' stamp: 'sbw 6/2/2004 08:28'! -decrementHaltCount - | counter | - counter := Smalltalk - at: #HaltCount - ifAbsent: [0]. - counter > 0 ifTrue: [ - counter _ counter - 1. - self setHaltCountTo: counter]! ! - -!Object methodsFor: 'debugging-haltOnce' stamp: 'sbw 6/2/2004 08:42'! -doExpiredHaltCount - self clearHaltOnce. - self removeHaltCount. - self halt! ! - -!Object methodsFor: 'debugging-haltOnce' stamp: 'sbw 6/2/2004 08:44'! -doExpiredHaltCount: aString - self clearHaltOnce. - self removeHaltCount. - self halt: aString! ! - -!Object methodsFor: 'debugging-haltOnce' stamp: 'sbw 6/2/2004 08:45'! -doExpiredInspectCount - self clearHaltOnce. - self removeHaltCount. - self inspect! ! - -!Object methodsFor: 'debugging-haltOnce' stamp: 'sbw 6/2/2004 08:43'! -haltOnCount: int - self haltOnceEnabled - ifTrue: [self hasHaltCount - ifTrue: [self decrementAndCheckHaltCount - ifTrue: [self doExpiredHaltCount]] - ifFalse: [int = 1 - ifTrue: [self doExpiredHaltCount] - ifFalse: [self setHaltCountTo: int - 1]]]! ! - -!Object methodsFor: 'debugging-haltOnce' stamp: 'sbw 5/19/2004 19:05'! -haltOnce - "Halt unless we have already done it once." - self haltOnceEnabled - ifTrue: [self clearHaltOnce. - ^ self halt]! ! - -!Object methodsFor: 'debugging-haltOnce' stamp: 'sbw 5/19/2004 19:04'! -haltOnceEnabled - ^ Smalltalk - at: #HaltOnce - ifAbsent: [false]! ! - -!Object methodsFor: 'debugging-haltOnce' stamp: 'sbw 5/19/2004 19:05'! -haltOnce: aString - "Halt unless we have already done it once." - self haltOnceEnabled - ifTrue: [self clearHaltOnce. - ^ self halt: aString]! ! - -!Object methodsFor: 'debugging-haltOnce' stamp: 'sbw 6/2/2004 08:45'! -halt: aString onCount: int - self haltOnceEnabled - ifTrue: [self hasHaltCount - ifTrue: [self decrementAndCheckHaltCount - ifTrue: [self doExpiredHaltCount: aString]] - ifFalse: [int = 1 - ifTrue: [self doExpiredHaltCount: aString] - ifFalse: [self setHaltCountTo: int - 1]]]! ! - -!Object methodsFor: 'debugging-haltOnce' stamp: 'sbw 6/2/2004 08:36'! -hasHaltCount - ^Smalltalk - includesKey: #HaltCount! ! - -!Object methodsFor: 'debugging-haltOnce' stamp: 'sbw 6/2/2004 08:46'! -inspectOnCount: int - self haltOnceEnabled - ifTrue: [self hasHaltCount - ifTrue: [self decrementAndCheckHaltCount - ifTrue: [self doExpiredInspectCount]] - ifFalse: [int = 1 - ifTrue: [self doExpiredInspectCount] - ifFalse: [self setHaltCountTo: int - 1]]]! ! - -!Object methodsFor: 'debugging-haltOnce' stamp: 'sbw 5/19/2004 19:05'! -inspectOnce - "Inspect unless we have already done it once." - self haltOnceEnabled - ifTrue: [self clearHaltOnce. - ^ self inspect]! ! - -!Object methodsFor: 'debugging-haltOnce' stamp: 'sbw 6/2/2004 13:20'! -inspectUntilCount: int - self haltOnceEnabled - ifTrue: [self hasHaltCount - ifTrue: [self decrementAndCheckHaltCount - ifTrue: [self doExpiredInspectCount] - ifFalse: [self inspect]] - ifFalse: [int = 1 - ifTrue: [self doExpiredInspectCount] - ifFalse: [self setHaltCountTo: int - 1]]]! ! - -!Object methodsFor: 'debugging-haltOnce' stamp: 'sbw 6/2/2004 08:49'! -removeHaltCount - (Smalltalk includesKey: #HaltCount) ifTrue: [ - Smalltalk removeKey: #HaltCount]! ! - -!Object methodsFor: 'debugging-haltOnce' stamp: 'sbw 6/2/2004 08:25'! -setHaltCountTo: int - Smalltalk at: #HaltCount put: int! ! - -!Object methodsFor: 'debugging-haltOnce' stamp: 'sbw 5/19/2004 19:04'! -setHaltOnce - "Turn on the halt once flag." - Smalltalk at: #HaltOnce put: true! ! - -!Object methodsFor: 'debugging-haltOnce' stamp: 'sbw 5/19/2004 19:04'! -toggleHaltOnce - self haltOnceEnabled - ifTrue: [self clearHaltOnce] - ifFalse: [self setHaltOnce]! ! - - -!Object methodsFor: 'dependents access' stamp: 'ar 2/11/2001 01:55'! -addDependent: anObject - "Make the given object one of the receiver's dependents." - - | dependents | - dependents _ self dependents. - (dependents includes: anObject) ifFalse: - [self myDependents: (dependents copyWithDependent: anObject)]. - ^ anObject! ! - -!Object methodsFor: 'dependents access' stamp: 'sma 2/29/2000 19:53'! -breakDependents - "Remove all of the receiver's dependents." - - self myDependents: nil! ! - -!Object methodsFor: 'dependents access' stamp: 'sma 2/29/2000 19:26'! -canDiscardEdits - "Answer true if none of the views on this model has unaccepted edits that matter." - - self dependents - do: [:each | each canDiscardEdits ifFalse: [^ false]] - without: self. - ^ true! ! - -!Object methodsFor: 'dependents access' stamp: 'sma 2/29/2000 19:58'! -dependents - "Answer a collection of objects that are 'dependent' on the receiver; - that is, all objects that should be notified if the receiver changes." - - ^ self myDependents ifNil: [#()]! ! - -!Object methodsFor: 'dependents access'! -evaluate: actionBlock wheneverChangeIn: aspectBlock - | viewerThenObject objectThenViewer | - objectThenViewer _ self. - viewerThenObject _ ObjectViewer on: objectThenViewer. - objectThenViewer become: viewerThenObject. - "--- Then ---" - objectThenViewer xxxViewedObject: viewerThenObject - evaluate: actionBlock - wheneverChangeIn: aspectBlock! ! - -!Object methodsFor: 'dependents access' stamp: 'sma 2/29/2000 19:59'! -hasUnacceptedEdits - "Answer true if any of the views on this object has unaccepted edits." - - self dependents - do: [:each | each hasUnacceptedEdits ifTrue: [^ true]] - without: self. - ^ false! ! - -!Object methodsFor: 'dependents access' stamp: 'sma 2/29/2000 19:55'! -myDependents - "Private. Answer a list of all the receiver's dependents." - - ^ DependentsFields at: self ifAbsent: []! ! - -!Object methodsFor: 'dependents access' stamp: 'sma 2/29/2000 19:52'! -myDependents: aCollectionOrNil - "Private. Set (or remove) the receiver's dependents list." - - aCollectionOrNil - ifNil: [DependentsFields removeKey: self ifAbsent: []] - ifNotNil: [DependentsFields at: self put: aCollectionOrNil]! ! - -!Object methodsFor: 'dependents access' stamp: 'reThink 2/18/2001 17:06'! -release - "Remove references to objects that may refer to the receiver. This message - should be overridden by subclasses with any cycles, in which case the - subclass should also include the expression super release." - - self releaseActionMap! ! - -!Object methodsFor: 'dependents access' stamp: 'sma 2/29/2000 20:23'! -removeDependent: anObject - "Remove the given object as one of the receiver's dependents." - - | dependents | - dependents _ self dependents reject: [:each | each == anObject]. - self myDependents: (dependents isEmpty ifFalse: [dependents]). - ^ anObject! ! - - -!Object methodsFor: 'drag and drop' stamp: 'bh 9/16/2001 18:10'! -acceptDroppingMorph: transferMorph event: evt inMorph: dstListMorph - - ^false.! ! - -!Object methodsFor: 'drag and drop' stamp: 'mir 5/16/2000 11:35'! -dragAnimationFor: item transferMorph: transferMorph - "Default do nothing"! ! - -!Object methodsFor: 'drag and drop' stamp: 'panda 4/28/2000 16:20'! -dragPassengerFor: item inMorph: dragSource - ^item! ! - -!Object methodsFor: 'drag and drop' stamp: 'panda 4/28/2000 16:11'! -dragTransferType - ^nil! ! - -!Object methodsFor: 'drag and drop' stamp: 'panda 4/28/2000 16:05'! -dragTransferTypeForMorph: dragSource - ^nil! ! - -!Object methodsFor: 'drag and drop' stamp: 'mir 5/8/2000 17:19'! -wantsDroppedMorph: aMorph event: anEvent inMorph: destinationLM - ^false! ! - - -!Object methodsFor: 'error handling' stamp: 'sma 5/6/2000 19:35'! -assert: aBlock - "Throw an assertion error if aBlock does not evaluates to true." - - aBlock value ifFalse: [AssertionFailure signal: 'Assertion failed']! ! - -!Object methodsFor: 'error handling' stamp: 'nk 1/15/2004 10:54'! -assert: aBlock descriptionBlock: descriptionBlock - "Throw an assertion error if aBlock does not evaluate to true." - - aBlock value ifFalse: [AssertionFailure signal: descriptionBlock value asString ]! ! - -!Object methodsFor: 'error handling' stamp: 'nk 10/25/2003 16:47'! -assert: aBlock description: aString - "Throw an assertion error if aBlock does not evaluates to true." - - aBlock value ifFalse: [AssertionFailure signal: aString ]! ! - -!Object methodsFor: 'error handling' stamp: 'md 10/13/2004 15:59'! -backwardCompatibilityOnly: anExplanationString - "Warn that the sending method has been deprecated. Methods that are tagt with #backwardCompatibility: - are kept for compatibility." - - Preferences showDeprecationWarnings ifTrue: - [Deprecation signal: thisContext sender printString, ' has been deprecated (but will be kept for compatibility). ', anExplanationString]! ! - -!Object methodsFor: 'error handling'! -caseError - "Report an error from an in-line or explicit case statement." - - self error: 'Case not found, and no otherwise clause'! ! - -!Object methodsFor: 'error handling' stamp: 'rbb 3/1/2005 09:26'! -confirm: queryString - "Put up a yes/no menu with caption queryString. Answer true if the - response is yes, false if no. This is a modal question--the user must - respond yes or no." - - "nil confirm: 'Are you hungry?'" - - ^ UIManager default confirm: queryString! ! - -!Object methodsFor: 'error handling' stamp: 'rbb 3/1/2005 09:27'! -confirm: aString orCancel: cancelBlock - "Put up a yes/no/cancel menu with caption aString. Answer true if - the response is yes, false if no. If cancel is chosen, evaluate - cancelBlock. This is a modal question--the user must respond yes or no." - - ^ UIManager default confirm: aString orCancel: cancelBlock! ! - -!Object methodsFor: 'error handling' stamp: 'dew 10/6/2003 18:20'! -deprecated: anExplanationString - "Warn that the sending method has been deprecated." - - Preferences showDeprecationWarnings ifTrue: - [Deprecation signal: thisContext sender printString, ' has been deprecated. ', anExplanationString]! ! - -!Object methodsFor: 'error handling' stamp: 'dew 10/7/2003 00:26'! -deprecated: anExplanationString block: aBlock - "Warn that the sender has been deprecated. Answer the value of aBlock on resumption. (Note that #deprecated: is usually the preferred method.)" - - Preferences showDeprecationWarnings ifTrue: - [Deprecation - signal: thisContext sender printString, ' has been deprecated. ', anExplanationString]. - ^ aBlock value. -! ! - -!Object methodsFor: 'error handling' stamp: 'md 2/22/2006 21:21'! -doesNotUnderstand: aMessage - "Handle the fact that there was an attempt to send the given message to the receiver but the receiver does not understand this message (typically sent from the machine when a message is sent to the receiver and no method is defined for that selector)." - "Testing: (3 activeProcess)" - - MessageNotUnderstood new - message: aMessage; - receiver: self; - signal. - ^ aMessage sentTo: self. -! ! - -!Object methodsFor: 'error handling' stamp: 'TRee 11/4/2003 16:47'! -dpsTrace: reportObject - Transcript myDependents isNil ifTrue: [^self]. - self dpsTrace: reportObject levels: 1 withContext: thisContext - -" nil dpsTrace: 'sludder'. "! ! - -!Object methodsFor: 'error handling' stamp: 'TRee 11/4/2003 16:49'! -dpsTrace: reportObject levels: anInt - self dpsTrace: reportObject levels: anInt withContext: thisContext - -"(1 to: 3) do: [:int | nil dpsTrace: int levels: 5.]"! ! - -!Object methodsFor: 'error handling' stamp: 'TRee 11/4/2003 17:02'! -dpsTrace: reportObject levels: anInt withContext: currentContext - | reportString context displayCount | - reportString := (reportObject respondsTo: #asString) - ifTrue: [reportObject asString] ifFalse: [reportObject printString]. - (Smalltalk at: #Decompiler ifAbsent: [nil]) - ifNil: - [Transcript cr; show: reportString] - ifNotNil: - [context := currentContext. - displayCount := anInt > 1. - 1 to: anInt do: - [:count | - Transcript cr. - displayCount - ifTrue: [Transcript show: count printString, ': ']. - - reportString notNil - ifTrue: - [Transcript show: context home class name - , '/' , context sender selector, ' (' , reportString , ')'. - context := context sender. - reportString := nil] - ifFalse: - [(context notNil and: [(context := context sender) notNil]) - ifTrue: [Transcript show: context receiver class name , '/' , context selector]]]. - "Transcript cr"].! ! - -!Object methodsFor: 'error handling' stamp: 'md 8/2/2005 22:17'! -error - "Throw a generic Error exception." - - ^self error: 'Error!!'.! ! - -!Object methodsFor: 'error handling' stamp: 'tfei 4/12/1999 12:55'! -error: aString - "Throw a generic Error exception." - - ^Error new signal: aString! ! - -!Object methodsFor: 'error handling' stamp: 'al 9/16/2005 14:12'! -explicitRequirement - self error: 'Explicitly required method'! ! - -!Object methodsFor: 'error handling' stamp: 'al 2/13/2006 22:20'! -halt - "This is the typical message to use for inserting breakpoints during - debugging. It behaves like halt:, but does not call on halt: in order to - avoid putting this message on the stack. Halt is especially useful when - the breakpoint message is an arbitrary one." - - Halt signal! ! - -!Object methodsFor: 'error handling' stamp: 'tfei 4/12/1999 12:59'! -halt: aString - "This is the typical message to use for inserting breakpoints during - debugging. It creates and schedules a Notifier with the argument, - aString, as the label." - - Halt new signal: aString! ! - -!Object methodsFor: 'error handling' stamp: 'md 1/20/2006 16:24'! -handles: exception - "This method exists in case a non exception class is the first arg in an on:do: (for instance using a exception class that is not loaded). We prefer this to raising an error during error handling itself. Also, semantically it makes sense that the exception handler is not active if its exception class is not loaded" - - ^ false! ! - -!Object methodsFor: 'error handling' stamp: 'ar 9/27/2005 20:24'! -notifyWithLabel: aString - "Create and schedule a Notifier with aString as the window label as well as the contents of the window, in order to request confirmation before a process can proceed." - - ToolSet - debugContext: thisContext - label: aString - contents: aString - - "nil notifyWithLabel: 'let us see if this works'"! ! - -!Object methodsFor: 'error handling' stamp: 'hg 10/2/2001 20:49'! -notify: aString - "Create and schedule a Notifier with the argument as the message in - order to request confirmation before a process can proceed." - - Warning signal: aString - - "nil notify: 'confirmation message'"! ! - -!Object methodsFor: 'error handling'! -notify: aString at: location - "Create and schedule a Notifier with the argument as the message in - order to request confirmation before a process can proceed. Subclasses can - override this and insert an error message at location within aString." - - self notify: aString - - "nil notify: 'confirmation message' at: 12"! ! - -!Object methodsFor: 'error handling'! -primitiveFailed - "Announce that a primitive has failed and there is no appropriate - Smalltalk code to run." - - self error: 'a primitive has failed'! ! - -!Object methodsFor: 'error handling' stamp: 'al 9/16/2005 14:12'! -requirement - self error: 'Implicitly required method'! ! - -!Object methodsFor: 'error handling' stamp: 'AFi 2/8/2003 22:52'! -shouldBeImplemented - "Announce that this message should be implemented" - - self error: 'This message should be implemented'! ! - -!Object methodsFor: 'error handling'! -shouldNotImplement - "Announce that, although the receiver inherits this message, it should - not implement it." - - self error: 'This message is not appropriate for this object'! ! - -!Object methodsFor: 'error handling' stamp: 'md 2/17/2006 12:02'! -subclassResponsibility - "This message sets up a framework for the behavior of the class' subclasses. - Announce that the subclass should have implemented this message." - - self error: 'My subclass should have overridden ', thisContext sender selector printString! ! - -!Object methodsFor: 'error handling' stamp: 'al 12/16/2003 16:16'! -traitConflict - self error: 'A class or trait does not properly resolve a conflict between multiple traits it uses.'! ! - - -!Object methodsFor: 'evaluating' stamp: 'reThink 3/12/2001 18:14'! -value - - ^self! ! - -!Object methodsFor: 'evaluating' stamp: 'reThink 2/18/2001 15:23'! -valueWithArguments: aSequenceOfArguments - - ^self! ! - - -!Object methodsFor: 'events' stamp: 'nk 8/27/2003 16:23'! -actionsWithReceiver: anObject forEvent: anEventSelector - - ^(self actionSequenceForEvent: anEventSelector) - select: [:anAction | anAction receiver == anObject ]! ! - -!Object methodsFor: 'events' stamp: 'nk 8/27/2003 17:45'! -renameActionsWithReceiver: anObject forEvent: anEventSelector toEvent: newEvent - - | oldActions newActions | - oldActions _ Set new. - newActions _ Set new. - (self actionSequenceForEvent: anEventSelector) do: [ :action | - action receiver == anObject - ifTrue: [ oldActions add: anObject ] - ifFalse: [ newActions add: anObject ]]. - self setActionSequence: (ActionSequence withAll: newActions) forEvent: anEventSelector. - oldActions do: [ :act | self when: newEvent evaluate: act ].! ! - - -!Object methodsFor: 'events-accessing' stamp: 'nk 12/20/2002 17:48'! -actionForEvent: anEventSelector - "Answer the action to be evaluated when has been triggered." - - | actions | - actions := self actionMap - at: anEventSelector asSymbol - ifAbsent: [nil]. - actions ifNil: [^nil]. - ^ actions asMinimalRepresentation! ! - -!Object methodsFor: 'events-accessing' stamp: 'nk 12/20/2002 17:48'! -actionForEvent: anEventSelector -ifAbsent: anExceptionBlock - "Answer the action to be evaluated when has been triggered." - - | actions | - actions := self actionMap - at: anEventSelector asSymbol - ifAbsent: [nil]. - actions ifNil: [^anExceptionBlock value]. - ^ actions asMinimalRepresentation! ! - -!Object methodsFor: 'events-accessing' stamp: 'reThink 2/18/2001 14:43'! -actionMap - - ^EventManager actionMapFor: self! ! - -!Object methodsFor: 'events-accessing' stamp: 'rw 4/27/2002 08:35'! -actionSequenceForEvent: anEventSelector - - ^(self actionMap - at: anEventSelector asSymbol - ifAbsent: [^WeakActionSequence new]) - asActionSequence! ! - -!Object methodsFor: 'events-accessing' stamp: 'SqR 6/28/2001 13:19'! -actionsDo: aBlock - - self actionMap do: aBlock! ! - -!Object methodsFor: 'events-accessing' stamp: 'rw 2/10/2002 13:05'! -createActionMap - - ^IdentityDictionary new! ! - -!Object methodsFor: 'events-accessing' stamp: 'SqR 2/19/2001 14:04'! -hasActionForEvent: anEventSelector - "Answer true if there is an action associated with anEventSelector" - - ^(self actionForEvent: anEventSelector) notNil! ! - -!Object methodsFor: 'events-accessing' stamp: 'reThink 2/18/2001 15:29'! -setActionSequence: actionSequence -forEvent: anEventSelector - - | action | - action := actionSequence asMinimalRepresentation. - action == nil - ifTrue: - [self removeActionsForEvent: anEventSelector] - ifFalse: - [self updateableActionMap - at: anEventSelector asSymbol - put: action]! ! - -!Object methodsFor: 'events-accessing' stamp: 'reThink 2/25/2001 08:50'! -updateableActionMap - - ^EventManager updateableActionMapFor: self! ! - - -!Object methodsFor: 'events-registering' stamp: 'reThink 2/18/2001 15:04'! -when: anEventSelector evaluate: anAction - - | actions | - actions := self actionSequenceForEvent: anEventSelector. - (actions includes: anAction) - ifTrue: [^ self]. - self - setActionSequence: (actions copyWith: anAction) - forEvent: anEventSelector! ! - -!Object methodsFor: 'events-registering' stamp: 'rww 12/30/2002 10:37'! -when: anEventSelector -send: aMessageSelector -to: anObject - - self - when: anEventSelector - evaluate: (WeakMessageSend - receiver: anObject - selector: aMessageSelector)! ! - -!Object methodsFor: 'events-registering' stamp: 'rww 12/30/2002 10:37'! -when: anEventSelector -send: aMessageSelector -to: anObject -withArguments: anArgArray - - self - when: anEventSelector - evaluate: (WeakMessageSend - receiver: anObject - selector: aMessageSelector - arguments: anArgArray)! ! - -!Object methodsFor: 'events-registering' stamp: 'rww 12/30/2002 10:37'! -when: anEventSelector -send: aMessageSelector -to: anObject -with: anArg - - self - when: anEventSelector - evaluate: (WeakMessageSend - receiver: anObject - selector: aMessageSelector - arguments: (Array with: anArg))! ! - - -!Object methodsFor: 'events-removing' stamp: 'reThink 2/18/2001 15:33'! -releaseActionMap - - EventManager releaseActionMapFor: self! ! - -!Object methodsFor: 'events-removing' stamp: 'reThink 2/18/2001 15:33'! -removeActionsForEvent: anEventSelector - - | map | - map := self actionMap. - map removeKey: anEventSelector asSymbol ifAbsent: []. - map isEmpty - ifTrue: [self releaseActionMap]! ! - -!Object methodsFor: 'events-removing' stamp: 'nk 8/25/2003 21:46'! -removeActionsSatisfying: aBlock - - self actionMap keys do: - [:eachEventSelector | - self - removeActionsSatisfying: aBlock - forEvent: eachEventSelector - ]! ! - -!Object methodsFor: 'events-removing' stamp: 'reThink 2/18/2001 15:31'! -removeActionsSatisfying: aOneArgBlock -forEvent: anEventSelector - - self - setActionSequence: - ((self actionSequenceForEvent: anEventSelector) - reject: [:anAction | aOneArgBlock value: anAction]) - forEvent: anEventSelector! ! - -!Object methodsFor: 'events-removing' stamp: 'rw 7/29/2003 17:18'! -removeActionsWithReceiver: anObject - - self actionMap copy keysDo: - [:eachEventSelector | - self - removeActionsSatisfying: [:anAction | anAction receiver == anObject] - forEvent: eachEventSelector - ]! ! - -!Object methodsFor: 'events-removing' stamp: 'reThink 2/18/2001 15:36'! -removeActionsWithReceiver: anObject -forEvent: anEventSelector - - self - removeActionsSatisfying: - [:anAction | - anAction receiver == anObject] - forEvent: anEventSelector! ! - -!Object methodsFor: 'events-removing' stamp: 'reThink 2/18/2001 15:31'! -removeAction: anAction -forEvent: anEventSelector - - self - removeActionsSatisfying: [:action | action = anAction] - forEvent: anEventSelector! ! - - -!Object methodsFor: 'events-triggering' stamp: 'reThink 2/18/2001 15:22'! -triggerEvent: anEventSelector - "Evaluate all actions registered for . Return the value of the last registered action." - - ^(self actionForEvent: anEventSelector) value! ! - -!Object methodsFor: 'events-triggering' stamp: 'reThink 2/18/2001 17:09'! -triggerEvent: anEventSelector -ifNotHandled: anExceptionBlock - "Evaluate all actions registered for . Return the value of the last registered action." - - ^(self - actionForEvent: anEventSelector - ifAbsent: [^anExceptionBlock value]) value -! ! - -!Object methodsFor: 'events-triggering' stamp: 'reThink 2/18/2001 15:21'! -triggerEvent: anEventSelector -withArguments: anArgumentList - - ^(self actionForEvent: anEventSelector) - valueWithArguments: anArgumentList! ! - -!Object methodsFor: 'events-triggering' stamp: 'reThink 2/18/2001 15:21'! -triggerEvent: anEventSelector -withArguments: anArgumentList -ifNotHandled: anExceptionBlock - - ^(self - actionForEvent: anEventSelector - ifAbsent: [^anExceptionBlock value]) - valueWithArguments: anArgumentList! ! - -!Object methodsFor: 'events-triggering' stamp: 'reThink 2/18/2001 14:59'! -triggerEvent: anEventSelector -with: anObject - - ^self - triggerEvent: anEventSelector - withArguments: (Array with: anObject)! ! - -!Object methodsFor: 'events-triggering' stamp: 'reThink 2/18/2001 14:59'! -triggerEvent: anEventSelector -with: anObject -ifNotHandled: anExceptionBlock - - ^self - triggerEvent: anEventSelector - withArguments: (Array with: anObject) - ifNotHandled: anExceptionBlock! ! - - -!Object methodsFor: 'filter streaming' stamp: 'MPW 1/1/1901 00:42'! -byteEncode:aStream - self flattenOnStream:aStream. -! ! - -!Object methodsFor: 'filter streaming'! -drawOnCanvas:aStream - self flattenOnStream:aStream. -! ! - -!Object methodsFor: 'filter streaming' stamp: 'MPW 1/1/1901 01:31'! -elementSeparator - ^nil.! ! - -!Object methodsFor: 'filter streaming'! -encodePostscriptOn:aStream - self byteEncode:aStream. -! ! - -!Object methodsFor: 'filter streaming' stamp: 'MPW 1/1/1901 00:07'! -flattenOnStream:aStream - self writeOnFilterStream:aStream. -! ! - -!Object methodsFor: 'filter streaming' stamp: 'mpw 6/22/1930 22:56'! -fullDrawPostscriptOn:aStream - ^aStream fullDraw:self. -! ! - -!Object methodsFor: 'filter streaming' stamp: 'MPW 1/1/1901 01:51'! -printOnStream:aStream - self byteEncode:aStream. -! ! - -!Object methodsFor: 'filter streaming' stamp: 'MPW 1/1/1901 00:49'! -putOn:aStream - ^aStream nextPut:self. -! ! - -!Object methodsFor: 'filter streaming' stamp: 'MPW 1/1/1901 01:53'! -storeOnStream:aStream - self printOnStream:aStream. -! ! - -!Object methodsFor: 'filter streaming' stamp: 'MPW 1/1/1901 00:06'! -writeOnFilterStream:aStream - aStream writeObject:self. -! ! - - -!Object methodsFor: 'finalization' stamp: 'ar 3/21/98 16:26'! -actAsExecutor - "Prepare the receiver to act as executor for any resources associated with it" - self breakDependents! ! - -!Object methodsFor: 'finalization' stamp: 'ar 3/20/98 22:19'! -executor - "Return an object which can act as executor for finalization of the receiver" - ^self shallowCopy actAsExecutor! ! - -!Object methodsFor: 'finalization' stamp: 'ar 5/19/2003 20:10'! -finalizationRegistry - "Answer the finalization registry associated with the receiver." - ^WeakRegistry default! ! - -!Object methodsFor: 'finalization' stamp: 'ar 3/21/98 16:27'! -finalize - "Finalize the resource associated with the receiver. This message should only be sent during the finalization process. There is NO garantuee that the resource associated with the receiver hasn't been free'd before so take care that you don't run into trouble - this all may happen with interrupt priority."! ! - -!Object methodsFor: 'finalization' stamp: 'ar 3/21/98 18:38'! -retryWithGC: execBlock until: testBlock - "Retry execBlock as long as testBlock returns false. Do an incremental GC after the first try, a full GC after the second try." - | blockValue | - blockValue := execBlock value. - (testBlock value: blockValue) ifTrue:[^blockValue]. - Smalltalk garbageCollectMost. - blockValue := execBlock value. - (testBlock value: blockValue) ifTrue:[^blockValue]. - Smalltalk garbageCollect. - ^execBlock value.! ! - -!Object methodsFor: 'finalization' stamp: 'ar 5/19/2003 20:14'! -toFinalizeSend: aSelector to: aFinalizer with: aResourceHandle - "When I am finalized (e.g., garbage collected) close the associated resource handle by sending aSelector to the appropriate finalizer (the guy who knows how to get rid of the resource). - WARNING: Neither the finalizer nor the resource handle are allowed to reference me. If they do, then I will NEVER be garbage collected. Since this cannot be validated here, it is up to the client to make sure this invariant is not broken." - self == aFinalizer ifTrue:[self error: 'I cannot finalize myself']. - self == aResourceHandle ifTrue:[self error: 'I cannot finalize myself']. - ^self finalizationRegistry add: self executor: - (ObjectFinalizer new - receiver: aFinalizer - selector: aSelector - argument: aResourceHandle)! ! - - -!Object methodsFor: 'flagging' stamp: 'sw 8/4/97 16:49'! -isThisEverCalled - ^ self isThisEverCalled: thisContext sender printString! ! - -!Object methodsFor: 'flagging'! -isThisEverCalled: msg - "Send this message, with some useful printable argument, from methods or branches of methods which you believe are never reached. 2/5/96 sw" - - self halt: 'This is indeed called: ', msg printString! ! - -!Object methodsFor: 'flagging' stamp: 'jm 3/18/98 17:23'! -logEntry - - Transcript show: 'Entered ', thisContext sender printString; cr. -! ! - -!Object methodsFor: 'flagging' stamp: 'jm 3/18/98 17:23'! -logExecution - - Transcript show: 'Executing ', thisContext sender printString; cr. -! ! - -!Object methodsFor: 'flagging' stamp: 'jm 3/18/98 17:22'! -logExit - - Transcript show: 'Exited ', thisContext sender printString; cr. -! ! - - -!Object methodsFor: 'graph model' stamp: 'dgd 9/18/2004 15:07'! -addModelYellowButtonMenuItemsTo: aCustomMenu forMorph: aMorph hand: aHandMorph - "The receiver serves as the model for aMorph; a menu is being constructed for the morph, and here the receiver is able to add its own items" - Preferences cmdGesturesEnabled ifTrue: [ "build mode" - aCustomMenu add: 'inspect model' translated target: self action: #inspect. - ]. - - ^aCustomMenu -! ! - -!Object methodsFor: 'graph model' stamp: 'nk 1/23/2004 14:35'! -hasModelYellowButtonMenuItems - ^Preferences cmdGesturesEnabled! ! - - -!Object methodsFor: 'inspecting' stamp: 'ar 9/27/2005 18:31'! -basicInspect - "Create and schedule an Inspector in which the user can examine the - receiver's variables. This method should not be overriden." - ^ToolSet basicInspect: self! ! - -!Object methodsFor: 'inspecting' stamp: 'md 1/18/2006 19:09'! -inspect - "Create and schedule an Inspector in which the user can examine the receiver's variables." - ToolSet inspect: self! ! - -!Object methodsFor: 'inspecting' stamp: 'apb 7/14/2004 12:19'! -inspectorClass - "Answer the class of the inspector to be used on the receiver. Called by inspect; - use basicInspect to get a normal (less useful) type of inspector." - - ^ Inspector! ! - - -!Object methodsFor: 'locales' stamp: 'tak 8/4/2005 14:55'! -localeChanged - self shouldBeImplemented! ! - - -!Object methodsFor: 'macpal' stamp: 'sw 5/7/1998 23:00'! -codeStrippedOut: messageString - "When a method is stripped out for external release, it is replaced by a method that calls this" - - self halt: 'Code stripped out -- ', messageString, '-- do not proceed.'! ! - -!Object methodsFor: 'macpal' stamp: 'sw 1/28/1999 17:31'! -contentsChanged - self changed: #contents! ! - -!Object methodsFor: 'macpal' stamp: 'ar 3/18/2001 00:03'! -currentEvent - "Answer the current Morphic event. This method never returns nil." - ^ActiveEvent ifNil:[self currentHand lastEvent]! ! - -!Object methodsFor: 'macpal' stamp: 'nk 9/1/2004 10:41'! -currentHand - "Return a usable HandMorph -- the one associated with the object's current environment. This method will always return a hand, even if it has to conjure one up as a last resort. If a particular hand is actually handling events at the moment (such as a remote hand or a ghost hand), it will be returned." - - ^ActiveHand ifNil: [ self currentWorld primaryHand ]! ! - -!Object methodsFor: 'macpal' stamp: 'sw 5/17/2001 12:08'! -currentVocabulary - "Answer the currently-prevailing default vocabulary." - - ^ Smalltalk isMorphic ifTrue: - [ActiveWorld currentVocabulary] - ifFalse: - [Vocabulary fullVocabulary]! ! - -!Object methodsFor: 'macpal' stamp: 'ar 3/18/2001 00:08'! -currentWorld - "Answer a morphic world that is the current UI focus. - If in an embedded world, it's that world. - If in a morphic project, it's that project's world. - If in an mvc project, it is the topmost morphic-mvc-window's worldMorph. - If in an mvc project that has no morphic-mvc-windows, then it's just some existing worldmorph instance. - If in an mvc project in a Squeak that has NO WorldMorph instances, one is created. - - This method will never return nil, it will always return its best effort at returning a relevant world morph, but if need be -- if there are no worlds anywhere, it will create a new one." - - | aView aSubview | - ActiveWorld ifNotNil:[^ActiveWorld]. - World ifNotNil:[^World]. - aView _ ScheduledControllers controllerSatisfying: - [:ctrl | (aSubview _ ctrl view firstSubView) notNil and: - [aSubview model isMorph and: [aSubview model isWorldMorph]]]. - ^aView - ifNotNil: - [aSubview model] - ifNil: - [MVCWiWPasteUpMorph newWorldForProject: nil].! ! - -!Object methodsFor: 'macpal' stamp: 'jm 5/6/1998 22:35'! -flash - "Do nothing." -! ! - -!Object methodsFor: 'macpal' stamp: 'sw 6/16/1998 15:07'! -instanceVariableValues - "Answer a collection whose elements are the values of those instance variables of the receiver which were added by the receiver's class" - | c | - c _ OrderedCollection new. - self class superclass instSize + 1 to: self class instSize do: - [:i | c add: (self instVarAt: i)]. - ^ c! ! - -!Object methodsFor: 'macpal' stamp: 'sw 3/20/2001 13:29'! -isUniversalTiles - "Return true if I (my world) uses universal tiles. This message can be called in places where the current World is not known, such as when writing out a project. For more information about the project-writing subtlety addressed by this protocol, kindly contact Ted Kaehler." - - ^ Preferences universalTiles! ! - -!Object methodsFor: 'macpal' stamp: 'sw 10/24/2000 07:04'! -objectRepresented - "most objects represent themselves; this provides a hook for aliases to grab on to" - - ^ self! ! - -!Object methodsFor: 'macpal' stamp: 'sw 5/22/2001 18:31'! -refusesToAcceptCode - "Answer whether the receiver is a code-bearing instrument which at the moment refuses to allow its contents to be submitted" - - ^ false - ! ! - -!Object methodsFor: 'macpal' stamp: 'jm 2/24/1999 12:40'! -scriptPerformer - - ^ self -! ! - -!Object methodsFor: 'macpal' stamp: 'sw 3/20/2001 13:40'! -slotInfo - "Answer a list of slot-information objects. Initally only provides useful info for players" - - ^ Dictionary new! ! - - -!Object methodsFor: 'message handling' stamp: 'md 1/20/2006 16:28'! -executeMethod: compiledMethod - "Execute compiledMethod against the receiver with no args" - - "" "uncomment once prim 189 is in VM" - ^ self withArgs: #() executeMethod: compiledMethod! ! - -!Object methodsFor: 'message handling' stamp: 'di 3/26/1999 07:52'! -perform: aSymbol - "Send the unary selector, aSymbol, to the receiver. - Fail if the number of arguments expected by the selector is not zero. - Primitive. Optional. See Object documentation whatIsAPrimitive." - - - ^ self perform: aSymbol withArguments: (Array new: 0)! ! - -!Object methodsFor: 'message handling' stamp: 'st 11/5/2004 16:19'! -perform: selector orSendTo: otherTarget - "If I wish to intercept and handle selector myself, do it; else send it to otherTarget" - ^ (self respondsTo: selector) ifTrue: [self perform: selector] ifFalse: [otherTarget perform: selector]! ! - -!Object methodsFor: 'message handling' stamp: 'di 3/26/1999 07:55'! -perform: selector withArguments: argArray - "Send the selector, aSymbol, to the receiver with arguments in argArray. - Fail if the number of arguments expected by the selector - does not match the size of argArray. - Primitive. Optional. See Object documentation whatIsAPrimitive." - - - ^ self perform: selector withArguments: argArray inSuperclass: self class! ! - -!Object methodsFor: 'message handling' stamp: 'ar 4/25/2005 13:35'! -perform: selector withArguments: argArray inSuperclass: lookupClass - "NOTE: This is just like perform:withArguments:, except that - the message lookup process begins, not with the receivers's class, - but with the supplied superclass instead. It will fail if lookupClass - cannot be found among the receiver's superclasses. - Primitive. Essential. See Object documentation whatIsAPrimitive." - - - (selector isSymbol) - ifFalse: [^ self error: 'selector argument must be a Symbol']. - (selector numArgs = argArray size) - ifFalse: [^ self error: 'incorrect number of arguments']. - (self class == lookupClass or: [self class inheritsFrom: lookupClass]) - ifFalse: [^ self error: 'lookupClass is not in my inheritance chain']. - self primitiveFailed! ! - -!Object methodsFor: 'message handling' stamp: 'nk 4/11/2002 14:13'! -perform: selector withEnoughArguments: anArray - "Send the selector, aSymbol, to the receiver with arguments in argArray. - Only use enough arguments for the arity of the selector; supply nils for missing ones." - | numArgs args | - numArgs _ selector numArgs. - anArray size == numArgs - ifTrue: [ ^self perform: selector withArguments: anArray asArray ]. - - args _ Array new: numArgs. - args replaceFrom: 1 - to: (anArray size min: args size) - with: anArray - startingAt: 1. - - ^ self perform: selector withArguments: args! ! - -!Object methodsFor: 'message handling' stamp: 'di 3/26/1999 07:52'! -perform: aSymbol with: anObject - "Send the selector, aSymbol, to the receiver with anObject as its argument. - Fail if the number of arguments expected by the selector is not one. - Primitive. Optional. See Object documentation whatIsAPrimitive." - - - ^ self perform: aSymbol withArguments: (Array with: anObject)! ! - -!Object methodsFor: 'message handling' stamp: 'di 3/26/1999 07:52'! -perform: aSymbol with: firstObject with: secondObject - "Send the selector, aSymbol, to the receiver with the given arguments. - Fail if the number of arguments expected by the selector is not two. - Primitive. Optional. See Object documentation whatIsAPrimitive." - - - ^ self perform: aSymbol withArguments: (Array with: firstObject with: secondObject)! ! - -!Object methodsFor: 'message handling' stamp: 'di 3/26/1999 07:51'! -perform: aSymbol with: firstObject with: secondObject with: thirdObject - "Send the selector, aSymbol, to the receiver with the given arguments. - Fail if the number of arguments expected by the selector is not three. - Primitive. Optional. See Object documentation whatIsAPrimitive." - - - ^ self perform: aSymbol - withArguments: (Array with: firstObject with: secondObject with: thirdObject)! ! - -!Object methodsFor: 'message handling' stamp: 'NS 1/28/2004 11:19'! -withArgs: argArray executeMethod: compiledMethod - "Execute compiledMethod against the receiver and args in argArray" - - | selector | - - selector _ Symbol new. - self class addSelectorSilently: selector withMethod: compiledMethod. - ^ [self perform: selector withArguments: argArray] - ensure: [self class basicRemoveSelector: selector]! ! - -!Object methodsFor: 'message handling' stamp: 'md 1/20/2006 16:28'! -with: arg1 executeMethod: compiledMethod - "Execute compiledMethod against the receiver and arg1" - - "" "uncomment once prim 189 is in VM" - ^ self withArgs: {arg1} executeMethod: compiledMethod! ! - -!Object methodsFor: 'message handling' stamp: 'md 1/20/2006 16:28'! -with: arg1 with: arg2 executeMethod: compiledMethod - "Execute compiledMethod against the receiver and arg1 & arg2" - - "" "uncomment once prim 189 is in VM" - ^ self withArgs: {arg1. arg2} executeMethod: compiledMethod! ! - -!Object methodsFor: 'message handling' stamp: 'md 1/20/2006 16:28'! -with: arg1 with: arg2 with: arg3 executeMethod: compiledMethod - "Execute compiledMethod against the receiver and arg1, arg2, & arg3" - - "" "uncomment once prim 189 is in VM" - ^ self withArgs: {arg1. arg2. arg3} executeMethod: compiledMethod! ! - -!Object methodsFor: 'message handling' stamp: 'md 1/20/2006 16:28'! -with: arg1 with: arg2 with: arg3 with: arg4 executeMethod: compiledMethod - "Execute compiledMethod against the receiver and arg1, arg2, arg3, & arg4" - - "" "uncomment once prim 189 is in VM" - ^ self withArgs: {arg1. arg2. arg3. arg4} executeMethod: compiledMethod! ! - - -!Object methodsFor: 'objects from disk' stamp: 'tk 4/8/1999 12:46'! -comeFullyUpOnReload: smartRefStream - "Normally this read-in object is exactly what we want to store. 7/26/96 tk" - - ^ self! ! - -!Object methodsFor: 'objects from disk' stamp: 'RAA 12/20/2000 16:51'! -convertToCurrentVersion: varDict refStream: smartRefStrm - - "subclasses should implement if they wish to convert old instances to modern ones"! ! - -!Object methodsFor: 'objects from disk' stamp: 'tk 11/29/2004 15:04'! -fixUponLoad: aProject seg: anImageSegment - "change the object due to conventions that have changed on -the project level. (sent to all objects in the incoming project). -Specific classes should reimplement this."! ! - -!Object methodsFor: 'objects from disk' stamp: 'RAA 1/10/2001 14:02'! -indexIfCompact - - ^0 "helps avoid a #respondsTo: in publishing"! ! - -!Object methodsFor: 'objects from disk' stamp: 'tk 2/24/1999 11:08'! -objectForDataStream: refStrm - "Return an object to store on an external data stream." - - ^ self! ! - -!Object methodsFor: 'objects from disk' stamp: 'tk 4/8/1999 12:05'! -readDataFrom: aDataStream size: varsOnDisk - "Fill in the fields of self based on the contents of aDataStream. Return self. - Read in the instance-variables written by Object>>storeDataOn:. - NOTE: This method must send beginReference: before reading any objects from aDataStream that might reference it. - Allow aDataStream to have fewer inst vars. See SmartRefStream." - | cntInstVars cntIndexedVars | - - cntInstVars _ self class instSize. - self class isVariable - ifTrue: [cntIndexedVars _ varsOnDisk - cntInstVars. - cntIndexedVars < 0 ifTrue: [ - self error: 'Class has changed too much. Define a convertxxx method']] - ifFalse: [cntIndexedVars _ 0. - cntInstVars _ varsOnDisk]. "OK if fewer than now" - - aDataStream beginReference: self. - 1 to: cntInstVars do: - [:i | self instVarAt: i put: aDataStream next]. - 1 to: cntIndexedVars do: - [:i | self basicAt: i put: aDataStream next]. - "Total number read MUST be equal to varsOnDisk!!" - ^ self "If we ever return something other than self, fix calls - on (super readDataFrom: aDataStream size: anInteger)"! ! - -!Object methodsFor: 'objects from disk' stamp: 'CdG 10/17/2005 20:32'! -saveOnFile - "Ask the user for a filename and save myself on a SmartReferenceStream file. Writes out the version and class structure. The file is fileIn-able. Does not file out the class of the object. tk 6/26/97 13:48" - - | aFileName fileStream | - aFileName := self class name asFileName. "do better?" - aFileName := UIManager default - request: 'File name?' translated initialAnswer: aFileName. - aFileName size == 0 ifTrue: [^ Beeper beep]. - - fileStream := FileStream newFileNamed: aFileName asFileName. - fileStream fileOutClass: nil andObject: self.! ! - -!Object methodsFor: 'objects from disk' stamp: 'tk 8/9/2001 15:40'! -storeDataOn: aDataStream - "Store myself on a DataStream. Answer self. This is a low-level DataStream/ReferenceStream method. See also objectToStoreOnDataStream. NOTE: This method must send 'aDataStream beginInstance:size:' and then (nextPut:/nextPutWeak:) its subobjects. readDataFrom:size: reads back what we write here." - | cntInstVars cntIndexedVars | - - cntInstVars _ self class instSize. - cntIndexedVars _ self basicSize. - aDataStream - beginInstance: self class - size: cntInstVars + cntIndexedVars. - 1 to: cntInstVars do: - [:i | aDataStream nextPut: (self instVarAt: i)]. - - "Write fields of a variable length object. When writing to a dummy - stream, don't bother to write the bytes" - ((aDataStream byteStream class == DummyStream) and: [self class isBits]) ifFalse: [ - 1 to: cntIndexedVars do: - [:i | aDataStream nextPut: (self basicAt: i)]]. -! ! - - -!Object methodsFor: 'parts bin' stamp: 'sw 10/24/2001 16:34'! -descriptionForPartsBin - "If the receiver is a member of a class that would like to be represented in a parts bin, answer the name by which it should be known, and a documentation string to be provided, for example, as balloon help. When the 'nativitySelector' is sent to the 'globalReceiver', it is expected that some kind of Morph will result. The parameters used in the implementation below are for documentation purposes only!!" - - ^ DescriptionForPartsBin - formalName: 'PutFormalNameHere' - categoryList: #(PutACategoryHere MaybePutAnotherCategoryHere) - documentation: 'Put the balloon help here' - globalReceiverSymbol: #PutAGlobalHere - nativitySelector: #PutASelectorHere! ! - - -!Object methodsFor: 'printing' stamp: 'di 6/20/97 08:57'! -fullPrintString - "Answer a String whose characters are a description of the receiver." - - ^ String streamContents: [:s | self printOn: s]! ! - -!Object methodsFor: 'printing'! -isLiteral - "Answer whether the receiver has a literal text form recognized by the - compiler." - - ^false! ! - -!Object methodsFor: 'printing' stamp: 'sma 6/1/2000 09:28'! -longPrintOn: aStream - "Append to the argument, aStream, the names and values of all - of the receiver's instance variables." - - self class allInstVarNames doWithIndex: - [:title :index | - aStream nextPutAll: title; - nextPut: $:; - space; - tab; - print: (self instVarAt: index); - cr]! ! - -!Object methodsFor: 'printing' stamp: 'tk 10/19/2001 11:18'! -longPrintOn: aStream limitedTo: sizeLimit indent: indent - "Append to the argument, aStream, the names and values of all of the receiver's instance variables. Limit is the length limit for each inst var." - - self class allInstVarNames doWithIndex: - [:title :index | - indent timesRepeat: [aStream tab]. - aStream nextPutAll: title; - nextPut: $:; - space; - tab; - nextPutAll: - ((self instVarAt: index) printStringLimitedTo: (sizeLimit -3 -title size max: 1)); - cr]! ! - -!Object methodsFor: 'printing' stamp: 'tk 10/16/2001 19:41'! -longPrintString - "Answer a String whose characters are a description of the receiver." - - | str | - str _ String streamContents: [:aStream | self longPrintOn: aStream]. - "Objects without inst vars should return something" - ^ str isEmpty ifTrue: [self printString, String cr] ifFalse: [str]! ! - -!Object methodsFor: 'printing' stamp: 'BG 11/7/2004 13:39'! -longPrintStringLimitedTo: aLimitValue - "Answer a String whose characters are a description of the receiver." - - | str | - str _ String streamContents: [:aStream | self longPrintOn: aStream limitedTo: aLimitValue indent: 0]. - "Objects without inst vars should return something" - ^ str isEmpty ifTrue: [self printString, String cr] ifFalse: [str]! ! - -!Object methodsFor: 'printing' stamp: 'sw 3/7/2001 13:14'! -nominallyUnsent: aSelectorSymbol - "From within the body of a method which is not formally sent within the system, but which you intend to have remain in the system (for potential manual invocation, or for documentation, or perhaps because it's sent by commented-out-code that you anticipate uncommenting out someday, send this message, with the selector itself as the argument. - -This will serve two purposes: - - (1) The method will not be returned by searches for unsent selectors (because it, in a manner of speaking, sends itself). - (2) You can locate all such methods by browsing senders of #nominallyUnsent:" - - false ifTrue: [self flag: #nominallyUnsent:] "So that this method itself will appear to be sent" -! ! - -!Object methodsFor: 'printing' stamp: 'sma 6/1/2000 09:31'! -printOn: aStream - "Append to the argument, aStream, a sequence of characters that - identifies the receiver." - - | title | - title _ self class name. - aStream - nextPutAll: (title first isVowel ifTrue: ['an '] ifFalse: ['a ']); - nextPutAll: title! ! - -!Object methodsFor: 'printing' stamp: 'sma 6/1/2000 09:22'! -printString - "Answer a String whose characters are a description of the receiver. - If you want to print without a character limit, use fullPrintString." - - ^ self printStringLimitedTo: 50000! ! - -!Object methodsFor: 'printing' stamp: 'tk 5/7/1999 16:20'! -printStringLimitedTo: limit - "Answer a String whose characters are a description of the receiver. - If you want to print without a character limit, use fullPrintString." - | limitedString | - limitedString _ String streamContents: [:s | self printOn: s] limitedTo: limit. - limitedString size < limit ifTrue: [^ limitedString]. - ^ limitedString , '...etc...'! ! - -!Object methodsFor: 'printing' stamp: 'MPW 1/1/1901 00:30'! -propertyList - "Answer a String whose characters are a property-list description of the receiver." - - ^ PropertyListEncoder process:self. -! ! - -!Object methodsFor: 'printing' stamp: 'sw 10/17/2000 11:16'! -reportableSize - "Answer a string that reports the size of the receiver -- useful for showing in a list view, for example" - - ^ (self basicSize + self class instSize) printString! ! - -!Object methodsFor: 'printing'! -storeOn: aStream - "Append to the argument aStream a sequence of characters that is an - expression whose evaluation creates an object similar to the receiver." - - aStream nextPut: $(. - self class isVariable - ifTrue: [aStream nextPutAll: '(', self class name, ' basicNew: '; - store: self basicSize; - nextPutAll: ') '] - ifFalse: [aStream nextPutAll: self class name, ' basicNew']. - 1 to: self class instSize do: - [:i | - aStream nextPutAll: ' instVarAt: '; - store: i; - nextPutAll: ' put: '; - store: (self instVarAt: i); - nextPut: $;]. - 1 to: self basicSize do: - [:i | - aStream nextPutAll: ' basicAt: '; - store: i; - nextPutAll: ' put: '; - store: (self basicAt: i); - nextPut: $;]. - aStream nextPutAll: ' yourself)' -! ! - -!Object methodsFor: 'printing' stamp: 'di 6/20/97 09:12'! -storeString - "Answer a String representation of the receiver from which the receiver - can be reconstructed." - - ^ String streamContents: [:s | self storeOn: s]! ! - -!Object methodsFor: 'printing' stamp: 'sw 5/2/1998 13:55'! -stringForReadout - ^ self stringRepresentation! ! - -!Object methodsFor: 'printing'! -stringRepresentation - "Answer a string that represents the receiver. For most objects this is simply its printString, but for strings themselves, it's themselves. 6/12/96 sw" - - ^ self printString ! ! - - -!Object methodsFor: 'scripting' stamp: 'ar 3/17/2001 20:11'! -adaptedToWorld: aWorld - "If I refer to a world or a hand, return the corresponding items in the new world." - ^self! ! - -!Object methodsFor: 'scripting' stamp: 'sw 3/10/2000 13:57'! -defaultFloatPrecisionFor: aGetSelector - "Answer a number indicating the default float precision to be used in a numeric readout for which the receiver is the model." - - ^ 1! ! - -!Object methodsFor: 'scripting' stamp: 'RAA 3/9/2001 17:08'! -evaluateUnloggedForSelf: aCodeString - - ^Compiler evaluate: - aCodeString - for: self - logged: false! ! - -!Object methodsFor: 'scripting' stamp: 'yo 12/25/2003 16:43'! -methodInterfacesForCategory: aCategorySymbol inVocabulary: aVocabulary limitClass: aLimitClass - "Return a list of methodInterfaces for the receiver in the given category, given a vocabulary. aCategorySymbol is the inherent category symbol, not necessarily the wording as expressed in the vocabulary." - - | categorySymbol | - categorySymbol _ aCategorySymbol asSymbol. - - (categorySymbol == ScriptingSystem nameForInstanceVariablesCategory) ifTrue: [ - "user-defined instance variables" - ^ self methodInterfacesForInstanceVariablesCategoryIn: aVocabulary]. - (categorySymbol == ScriptingSystem nameForScriptsCategory) ifTrue: [ - "user-defined scripts" - ^ self methodInterfacesForScriptsCategoryIn: aVocabulary]. - "all others" - ^ self usableMethodInterfacesIn: (aVocabulary methodInterfacesInCategory: categorySymbol - forInstance: self - ofClass: self class - limitClass: aLimitClass) -! ! - -!Object methodsFor: 'scripting' stamp: 'sw 8/3/2001 13:54'! -methodInterfacesForInstanceVariablesCategoryIn: aVocabulary - "Return a collection of methodInterfaces for the instance-variables category. The vocabulary parameter, at present anyway, is not used. And for non-players, the method is at present vacuous in any case" - - ^ OrderedCollection new! ! - -!Object methodsFor: 'scripting' stamp: 'sw 8/3/2001 13:53'! -methodInterfacesForScriptsCategoryIn: aVocabulary - "Answer a list of method interfaces for the category #scripts, as seen in a viewer or other tool. The vocabulary argument is not presently used. Also, at present, only Players really do anyting interesting here." - - ^ OrderedCollection new! ! - -!Object methodsFor: 'scripting' stamp: 'RAA 2/16/2001 19:37'! -selfWrittenAsIll - - ^self! ! - -!Object methodsFor: 'scripting' stamp: 'RAA 2/16/2001 19:38'! -selfWrittenAsIm - - ^self! ! - -!Object methodsFor: 'scripting' stamp: 'RAA 2/16/2001 19:37'! -selfWrittenAsMe - - ^self! ! - -!Object methodsFor: 'scripting' stamp: 'RAA 2/16/2001 19:37'! -selfWrittenAsMy - - ^self! ! - -!Object methodsFor: 'scripting' stamp: 'RAA 2/16/2001 19:38'! -selfWrittenAsThis - - ^self! ! - - -!Object methodsFor: 'scripts-kernel' stamp: 'nk 10/14/2004 10:55'! -universalTilesForGetterOf: aMethodInterface - "Return universal tiles for a getter on the given method interface." - - | ms argTile argArray itsSelector | - itsSelector _ aMethodInterface selector. - argArray _ #(). - - "Four gratuituous special cases..." - - (itsSelector == #color:sees:) ifTrue: - [argTile _ ScriptingSystem tileForArgType: #Color. - argArray _ Array with: argTile colorSwatch color with: argTile colorSwatch color copy]. - - itsSelector == #seesColor: ifTrue: - [argTile _ ScriptingSystem tileForArgType: #Color. - argArray _ Array with: argTile colorSwatch color]. - - (#(touchesA: overlaps: overlapsAny:) includes: itsSelector) ifTrue: - [argTile _ ScriptingSystem tileForArgType: #Player. - argArray _ Array with: argTile actualObject]. - - ms _ MessageSend receiver: self selector: itsSelector arguments: argArray. - ^ ms asTilesIn: self class globalNames: (self class officialClass ~~ CardPlayer) - "For CardPlayers, use 'self'. For others, name it, and use its name."! ! - -!Object methodsFor: 'scripts-kernel' stamp: 'tk 9/28/2001 13:30'! -universalTilesForInterface: aMethodInterface - "Return universal tiles for the given method interface. Record who self is." - - | ms argTile itsSelector aType argList | - itsSelector _ aMethodInterface selector. - argList _ OrderedCollection new. - aMethodInterface argumentVariables doWithIndex: - [:anArgumentVariable :anIndex | - argTile _ ScriptingSystem tileForArgType: (aType _ aMethodInterface typeForArgumentNumber: anIndex). - argList add: (aType == #Player - ifTrue: [argTile actualObject] - ifFalse: [argTile literal]). "default value for each type"]. - - ms _ MessageSend receiver: self selector: itsSelector arguments: argList asArray. - ^ ms asTilesIn: self class globalNames: (self class officialClass ~~ CardPlayer) - "For CardPlayers, use 'self'. For others, name it, and use its name."! ! - - -!Object methodsFor: 'self evaluating' stamp: 'sd 7/31/2005 21:47'! -isSelfEvaluating - ^ self isLiteral! ! - - -!Object methodsFor: 'system primitives'! -asOop - "Primitive. Answer a SmallInteger whose value is half of the receiver's - object pointer (interpreting object pointers as 16-bit signed quantities). - Fail if the receiver is a SmallInteger. Essential. See Object documentation - whatIsAPrimitive." - - - self primitiveFailed! ! - -!Object methodsFor: 'system primitives' stamp: 'di 1/9/1999 15:19'! -becomeForward: otherObject - "Primitive. All variables in the entire system that used to point - to the receiver now point to the argument. - Fails if either argument is a SmallInteger." - - (Array with: self) - elementsForwardIdentityTo: - (Array with: otherObject)! ! - -!Object methodsFor: 'system primitives' stamp: 'zz 3/3/2004 23:53'! -becomeForward: otherObject copyHash: copyHash - "Primitive. All variables in the entire system that used to point to the receiver now point to the argument. - If copyHash is true, the argument's identity hash bits will be set to those of the receiver. - Fails if either argument is a SmallInteger." - - (Array with: self) - elementsForwardIdentityTo: - (Array with: otherObject) - copyHash: copyHash! ! - -!Object methodsFor: 'system primitives' stamp: 'sw 10/16/2000 10:59'! -className - "Answer a string characterizing the receiver's class, for use in list views for example" - - ^ self class name asString! ! - -!Object methodsFor: 'system primitives' stamp: 'sw 10/16/2000 11:04'! -creationStamp - "Answer a string which reports the creation particulars of the receiver. Intended perhaps for list views, but this is presently a feature not easily accessible" - - ^ ''! ! - -!Object methodsFor: 'system primitives'! -instVarAt: index - "Primitive. Answer a fixed variable in an object. The numbering of the - variables corresponds to the named instance variables. Fail if the index - is not an Integer or is not the index of a fixed variable. Essential. See - Object documentation whatIsAPrimitive." - - - "Access beyond fixed variables." - ^self basicAt: index - self class instSize ! ! - -!Object methodsFor: 'system primitives'! -instVarAt: anInteger put: anObject - "Primitive. Store a value into a fixed variable in the receiver. The - numbering of the variables corresponds to the named instance variables. - Fail if the index is not an Integer or is not the index of a fixed variable. - Answer the value stored as the result. Using this message violates the - principle that each object has sovereign control over the storing of - values into its instance variables. Essential. See Object documentation - whatIsAPrimitive." - - - "Access beyond fixed fields" - ^self basicAt: anInteger - self class instSize put: anObject! ! - -!Object methodsFor: 'system primitives' stamp: 'sw 10/16/2000 11:09'! -instVarNamed: aString - "Return the value of the instance variable in me with that name. Slow and unclean, but very useful. " - - ^ self instVarAt: (self class allInstVarNames indexOf: aString asString) - - -! ! - -!Object methodsFor: 'system primitives' stamp: 'sw 10/16/2000 11:10'! -instVarNamed: aString put: aValue - "Store into the value of the instance variable in me of that name. Slow and unclean, but very useful. " - - ^ self instVarAt: (self class allInstVarNames indexOf: aString asString) put: aValue -! ! - -!Object methodsFor: 'system primitives' stamp: 'sw 10/17/2000 11:12'! -oopString - "Answer a string that represents the oop of the receiver" - - ^ self asOop printString! ! - -!Object methodsFor: 'system primitives' stamp: 'ar 3/2/2001 01:34'! -primitiveChangeClassTo: anObject - "Primitive. Change the class of the receiver into the class of the argument given that the format of the receiver matches the format of the argument's class. Fail if receiver or argument are SmallIntegers, or the receiver is an instance of a compact class and the argument isn't, or when the argument's class is compact and the receiver isn't, or when the format of the receiver is different from the format of the argument's class, or when the arguments class is fixed and the receiver's size differs from the size that an instance of the argument's class should have. - Note: The primitive will fail in most cases that you think might work. This is mostly because of a) the difference between compact and non-compact classes, and b) because of differences in the format. As an example, '(Array new: 3) primitiveChangeClassTo: Morph basicNew' would fail for three of the reasons mentioned above. Array is compact, Morph is not (failure #1). Array is variable and Morph is fixed (different format - failure #2). Morph is a fixed-field-only object and the array is too short (failure #3). - The facility is really provided for certain, very specific applications (mostly related to classes changing shape) and not for casual use." - - - self primitiveFailed! ! - -!Object methodsFor: 'system primitives' stamp: 'di 3/27/1999 12:21'! -rootStubInImageSegment: imageSegment - - ^ ImageSegmentRootStub new - xxSuperclass: nil - format: nil - segment: imageSegment! ! - -!Object methodsFor: 'system primitives'! -someObject - "Primitive. Answer the first object in the enumeration of all - objects." - - - self primitiveFailed.! ! - - -!Object methodsFor: 'testing' stamp: 'sw 9/26/2001 11:58'! -basicType - "Answer a symbol representing the inherent type of the receiver" - - ^ #Object! ! - -!Object methodsFor: 'testing' stamp: 'sw 5/3/2001 16:19'! -beViewed - "Open up a viewer on the receiver. The Presenter is invited to decide just how to present this viewer" - - self uniqueNameForReference. "So the viewer will have something nice to refer to" - self presenter viewObject: self! ! - -!Object methodsFor: 'testing' stamp: 'sw 10/16/2000 11:01'! -costumes - "Answer a list of costumes associated with the receiver. The appearance of this method in class Object serves only as a backstop, probably only transitionally" - - ^ nil! ! - -!Object methodsFor: 'testing' stamp: 'sw 1/12/98 18:09'! -haltIfNil! ! - -!Object methodsFor: 'testing' stamp: 'md 1/20/2006 17:09'! -hasLiteralSuchThat: testBlock - "This is the end of the imbedded structure path so return false." - - ^ false! ! - -!Object methodsFor: 'testing' stamp: 'md 1/20/2006 17:10'! -hasLiteralThorough: literal - "Answer true if literal is identical to any literal in this array, even if imbedded in further structures. This is the end of the imbedded structure path so return false." - - ^ false! ! - -!Object methodsFor: 'testing' stamp: 'sw 1/30/2001 22:24'! -haveFullProtocolBrowsed - "Open up a Lexicon on the receiver" - - ^ self haveFullProtocolBrowsedShowingSelector: nil - - "(2@3) haveFullProtocolBrowsed" -! ! - -!Object methodsFor: 'testing' stamp: 'ar 9/27/2005 21:04'! -haveFullProtocolBrowsedShowingSelector: aSelector - "Open up a Lexicon on the receiver, having it open up showing aSelector, which may be nil" - - | aBrowser | - aBrowser := (Smalltalk at: #InstanceBrowser ifAbsent:[^nil]) new useVocabulary: Vocabulary fullVocabulary. - aBrowser openOnObject: self inWorld: ActiveWorld showingSelector: aSelector - - "(2@3) haveFullProtocolBrowsed"! ! - -!Object methodsFor: 'testing' stamp: 'md 7/30/2005 21:21'! -isArray - ^false! ! - -!Object methodsFor: 'testing' stamp: 'ar 7/9/1999 18:18'! -isBehavior - "Return true if the receiver is a behavior. - Note: Do not override in any class except behavior." - ^false! ! - -!Object methodsFor: 'testing' stamp: 'ajh 1/21/2003 13:15'! -isBlock - - ^ false! ! - -!Object methodsFor: 'testing' stamp: 'md 11/21/2003 12:14'! -isBlockClosure - - ^ false! ! - -!Object methodsFor: 'testing' stamp: 'yo 8/28/2002 13:41'! -isCharacter - - ^ false. -! ! - -!Object methodsFor: 'testing' stamp: 'ar 8/17/1999 19:43'! -isCollection - "Return true if the receiver is some sort of Collection and responds to basic collection messages such as #size and #do:" - ^false! ! - -!Object methodsFor: 'testing'! -isColor - "Answer true if receiver is a Color. False by default." - - ^ false -! ! - -!Object methodsFor: 'testing' stamp: 'nk 4/17/2004 19:43'! -isColorForm - ^false! ! - -!Object methodsFor: 'testing' stamp: 'md 11/21/2003 12:14'! -isCompiledMethod - - ^ false! ! - -!Object methodsFor: 'testing' stamp: 'mk 10/27/2003 17:33'! -isComplex - "Answer true if receiver is a Complex number. False by default." - - ^ false -! ! - -!Object methodsFor: 'testing' stamp: 'md 8/11/2005 16:45'! -isDictionary - ^false! ! - -!Object methodsFor: 'testing' stamp: 'di 11/9/1998 09:38'! -isFloat - "Overridden to return true in Float, natch" - ^ false! ! - -!Object methodsFor: 'testing' stamp: 'ar 10/30/2000 23:22'! -isForm - ^false! ! - -!Object methodsFor: 'testing' stamp: 'len 1/13/98 21:18'! -isFraction - "Answer true if the receiver is a Fraction." - - ^ false! ! - -!Object methodsFor: 'testing' stamp: 'rhi 8/14/2003 08:51'! -isHeap - - ^ false! ! - -!Object methodsFor: 'testing'! -isInteger - "Overridden to return true in Integer." - - ^ false! ! - -!Object methodsFor: 'testing' stamp: 'rhi 8/12/2003 09:52'! -isInterval - - ^ false! ! - -!Object methodsFor: 'testing' stamp: 'nk 4/25/2002 08:04'! -isMessageSend - ^false -! ! - -!Object methodsFor: 'testing' stamp: 'md 2/19/2006 11:24'! -isMethodProperties - ^false! ! - -!Object methodsFor: 'testing'! -isMorph - - ^ false! ! - -!Object methodsFor: 'testing' stamp: 'ar 9/13/2000 15:37'! -isMorphicEvent - ^false! ! - -!Object methodsFor: 'testing' stamp: 'gm 2/22/2003 12:56'! -isMorphicModel - "Return true if the receiver is a morphic model" - ^false -! ! - -!Object methodsFor: 'testing'! -isNumber - "Overridden to return true in Number, natch" - ^ false! ! - -!Object methodsFor: 'testing' stamp: 'di 11/6/1998 08:04'! -isPoint - "Overridden to return true in Point." - - ^ false! ! - -!Object methodsFor: 'testing' stamp: 'ikp 9/26/97 14:45'! -isPseudoContext - ^false! ! - -!Object methodsFor: 'testing' stamp: 'md 10/2/2005 21:52'! -isRectangle - ^false! ! - -!Object methodsFor: 'testing' stamp: 'nk 6/14/2004 16:49'! -isSketchMorph - ^false! ! - -!Object methodsFor: 'testing' stamp: 'ar 12/23/1999 15:43'! -isStream - "Return true if the receiver responds to the stream protocol" - ^false -! ! - -!Object methodsFor: 'testing' stamp: 'sma 6/15/2000 15:48'! -isString - "Overridden to return true in String, natch" - ^ false! ! - -!Object methodsFor: 'testing' stamp: 'md 4/30/2003 15:30'! -isSymbol - ^ false ! ! - -!Object methodsFor: 'testing' stamp: 'jam 3/9/2003 15:10'! -isSystemWindow -"answer whatever the receiver is a SystemWindow" - ^ false! ! - -!Object methodsFor: 'testing'! -isText - ^ false! ! - -!Object methodsFor: 'testing' stamp: 'pmm 7/6/2006 20:46'! -isTrait - "Return true if the receiver is a trait. - Note: Do not override in any class except TraitBehavior." - ^false! ! - -!Object methodsFor: 'testing' stamp: 'tk 10/21/97 12:45'! -isTransparent - ^ false! ! - -!Object methodsFor: 'testing' stamp: 'ar 8/14/2001 23:19'! -isVariableBinding - "Return true if I represent a literal variable binding" - ^false - ! ! - -!Object methodsFor: 'testing' stamp: 'ls 7/14/1998 21:45'! -isWebBrowser - "whether this object is a web browser. See class: Scamper" - ^false! ! - -!Object methodsFor: 'testing' stamp: 'sw 10/27/2000 06:58'! -knownName - "If a formal name has been handed out for this object, answer it, else nil" - - ^ Preferences capitalizedReferences - ifTrue: - [References keyAtValue: self ifAbsent: [nil]] - ifFalse: - [nil]! ! - -!Object methodsFor: 'testing' stamp: 'sw 9/27/96'! -name - "Answer a name for the receiver. This is used generically in the title of certain inspectors, such as the referred-to inspector, and specificially by various subsystems. By default, we let the object just print itself out.. " - - ^ self printString! ! - -!Object methodsFor: 'testing' stamp: 'sw 11/19/2001 13:28'! -nameForViewer - "Answer a name to be shown in a Viewer that is viewing the receiver" - - | aName | - (aName _ self uniqueNameForReferenceOrNil) ifNotNil: [^ aName]. - (aName _ self knownName) ifNotNil: [^ aName]. - - ^ [(self asString copyWithout: Character cr) truncateTo: 27] ifError: - [:msg :rcvr | ^ self class name printString]! ! - -!Object methodsFor: 'testing'! -notNil - "Coerces nil to false and everything else to true." - - ^true! ! - -!Object methodsFor: 'testing' stamp: 'tk 9/6/2001 19:15'! -openInstanceBrowserWithTiles - "Open up an instance browser on me with tiles as the code type, and with the search level as desired." - - | aBrowser | - aBrowser _ InstanceBrowser new. - aBrowser useVocabulary: Vocabulary fullVocabulary. - aBrowser limitClass: self class. - aBrowser contentsSymbol: #tiles. "preset it to make extra buttons (tile menus)" - aBrowser openOnObject: self inWorld: ActiveWorld showingSelector: nil. - aBrowser contentsSymbol: #source. - aBrowser toggleShowingTiles. - - " -(2@3) openInstanceBrowserWithTiles. -WatchMorph new openInstanceBrowserWithTiles -"! ! - -!Object methodsFor: 'testing' stamp: 'tk 7/28/2005 04:50'! -renameInternal: newName - "Change the internal name (because of a conflict) but leave the external name unchanged. Change Player class name, but do not change the names that appear in tiles. Any object that might be pointed to in the References dictionary might get this message sent to it upon reload" - - ^ nil "caller will renameTo:. new name may be different"! ! - -!Object methodsFor: 'testing' stamp: 'sw 2/27/2002 14:55'! -renameTo: newName - "If the receiver has an inherent idea about its own name, it should take action here. Any object that might be pointed to in the References dictionary might get this message sent to it upon reload"! ! - -!Object methodsFor: 'testing' stamp: 'sw 1/18/2001 13:43'! -showDiffs - "Answer whether the receiver, serving as the model of a text-bearing entity, is 'showing differences' -- if it is, the editor may wish to show special feedback" - - ^ false! ! - -!Object methodsFor: 'testing' stamp: 'sw 10/20/1999 14:52'! -stepAt: millisecondClockValue in: aWindow - - ^ self stepIn: aWindow! ! - -!Object methodsFor: 'testing' stamp: 'sw 10/19/1999 08:16'! -stepIn: aWindow - - ^ self step! ! - -!Object methodsFor: 'testing' stamp: 'sw 10/19/1999 08:21'! -stepTime - - ^ 1000 "milliseconds -- default backstop for objects serving as models of system windows"! ! - -!Object methodsFor: 'testing' stamp: 'sw 10/19/1999 08:22'! -stepTimeIn: aSystemWindow - - ^ 1000 "milliseconds -- default backstop for objects serving as models of system windows"! ! - -!Object methodsFor: 'testing' stamp: 'sw 5/3/2001 18:22'! -vocabularyDemanded - "Answer a vocabulary that the receiver insists be used when it is looked at in a Viewer. This allows specific classes to insist on specific custom vocabularies" - - ^ nil! ! - -!Object methodsFor: 'testing' stamp: 'sw 11/13/2001 07:26'! -wantsDiffFeedback - "Answer whether the receiver, serving as the model of a text-bearing entity, would like for 'diffs' green pane-border feedback to be shown" - - ^ false! ! - -!Object methodsFor: 'testing' stamp: 'di 1/8/1999 15:04'! -wantsSteps - "Overridden by morphic classes whose instances want to be stepped, - or by model classes who want their morphic views to be stepped." - - ^ false! ! - -!Object methodsFor: 'testing' stamp: 'sw 10/19/1999 08:26'! -wantsStepsIn: aSystemWindow - - ^ self wantsSteps! ! - - -!Object methodsFor: 'thumbnail' stamp: 'dgd 9/25/2004 23:17'! -iconOrThumbnailOfSize: aNumberOrPoint - "Answer an appropiate form to represent the receiver" - ^ nil! ! - - -!Object methodsFor: 'translation support'! -inline: inlineFlag - "For translation only; noop when running in Smalltalk."! ! - -!Object methodsFor: 'translation support'! -var: varSymbol declareC: declString - "For translation only; noop when running in Smalltalk."! ! - - -!Object methodsFor: 'undo' stamp: 'di 9/11/2000 20:32'! -capturedState - "May be overridden in subclasses." - - ^ self shallowCopy -! ! - -!Object methodsFor: 'undo' stamp: 'di 9/11/2000 20:29'! -commandHistory - "Return the command history for the receiver" - | w | - (w _ self currentWorld) ifNotNil: [^ w commandHistory]. - ^ CommandHistory new. "won't really record anything but prevent breaking things"! ! - -!Object methodsFor: 'undo' stamp: 'di 12/12/2000 15:01'! -purgeAllCommands - "Purge all commands for this object" - Preferences useUndo ifFalse: [^ self]. "get out quickly" - self commandHistory purgeAllCommandsSuchThat: [:cmd | cmd undoTarget == self]. -! ! - -!Object methodsFor: 'undo' stamp: 'di 9/12/2000 08:15'! -redoFromCapturedState: st - "May be overridden in subclasses. See also capturedState" - - self undoFromCapturedState: st "Simple cases are symmetric" -! ! - -!Object methodsFor: 'undo' stamp: 'sw 11/16/2000 14:42'! -refineRedoTarget: target selector: aSymbol arguments: arguments in: refineBlock - "Any object can override this method to refine its redo specification" - - ^ refineBlock - value: target - value: aSymbol - value: arguments! ! - -!Object methodsFor: 'undo' stamp: 'sw 11/16/2000 14:42'! -refineUndoTarget: target selector: aSymbol arguments: arguments in: refineBlock - "Any object can override this method to refine its undo specification" - - ^ refineBlock - value: target - value: aSymbol - value: arguments! ! - -!Object methodsFor: 'undo' stamp: 'di 9/11/2000 20:30'! -rememberCommand: aCommand - "Remember the given command for undo" - Preferences useUndo ifFalse: [^ self]. "get out quickly" - ^ self commandHistory rememberCommand: aCommand! ! - -!Object methodsFor: 'undo' stamp: 'di 9/11/2000 20:30'! -rememberUndoableAction: actionBlock named: caption - | cmd result | - cmd _ Command new cmdWording: caption. - cmd undoTarget: self selector: #undoFromCapturedState: argument: self capturedState. - result _ actionBlock value. - cmd redoTarget: self selector: #redoFromCapturedState: argument: self capturedState. - self rememberCommand: cmd. - ^ result! ! - -!Object methodsFor: 'undo' stamp: 'di 9/11/2000 20:32'! -undoFromCapturedState: st - "May be overridden in subclasses. See also capturedState" - - self copyFrom: st -! ! - - -!Object methodsFor: 'updating'! -changed - "Receiver changed in a general way; inform all the dependents by - sending each dependent an update: message." - - self changed: self! ! - -!Object methodsFor: 'updating'! -changed: aParameter - "Receiver changed. The change is denoted by the argument aParameter. - Usually the argument is a Symbol that is part of the dependent's change - protocol. Inform all of the dependents." - - self dependents do: [:aDependent | aDependent update: aParameter]! ! - -!Object methodsFor: 'updating' stamp: 'nk 2/17/2004 11:12'! -changed: anAspect with: anObject - "Receiver changed. The change is denoted by the argument anAspect. - Usually the argument is a Symbol that is part of the dependent's change - protocol. Inform all of the dependents. Also pass anObject for additional information." - - self dependents do: [:aDependent | aDependent update: anAspect with: anObject]! ! - -!Object methodsFor: 'updating' stamp: 'sw 10/12/1999 18:15'! -handledListVerification - "When a self-updating PluggableListMorph lazily checks to see the state of affairs, it first gives its model an opportunity to handle the list verification itself (this is appropriate for some models, such as VersionsBrowser); if a list's model has indeed handled things itself, it returns true here" - - ^ false! ! - -!Object methodsFor: 'updating' stamp: 'sw 10/31/1999 00:15'! -noteSelectionIndex: anInteger for: aSymbol - "backstop"! ! - -!Object methodsFor: 'updating'! -okToChange - "Allows a controller to ask this of any model" - ^ true! ! - -!Object methodsFor: 'updating' stamp: 'sw 10/19/1999 14:39'! -updateListsAndCodeIn: aWindow - self canDiscardEdits ifFalse: [^ self]. - aWindow updatablePanes do: [:aPane | aPane verifyContents]! ! - -!Object methodsFor: 'updating' stamp: 'sma 2/29/2000 20:05'! -update: aParameter - "Receive a change notice from an object of whom the receiver is a - dependent. The default behavior is to do nothing; a subclass might want - to change itself in some way." - - ^ self! ! - -!Object methodsFor: 'updating' stamp: 'nk 2/17/2004 11:13'! -update: anAspect with: anObject - "Receive a change notice from an object of whom the receiver is a - dependent. The default behavior is to call update:, - which by default does nothing; a subclass might want - to change itself in some way." - - ^ self update: anAspect! ! - -!Object methodsFor: 'updating' stamp: 'jm 8/20/1998 18:26'! -windowIsClosing - "This message is used to inform a models that its window is closing. Most models do nothing, but some, such as the Debugger, must do some cleanup. Note that this mechanism must be used with care by models that support multiple views, since one view may be closed while others left open." -! ! - - -!Object methodsFor: 'user interface' stamp: 'sw 10/4/1999 08:13'! -addModelItemsToWindowMenu: aMenu - "aMenu is being constructed to be presented to the user in response to the user's pressing on the menu widget in the title bar of a morphic window. Here, the model is given the opportunity to add any model-specific items to the menu, whose default target is the SystemWindow itself."! ! - -!Object methodsFor: 'user interface' stamp: 'sw 10/5/1998 14:39'! -addModelMenuItemsTo: aCustomMenu forMorph: aMorph hand: aHandMorph - "The receiver serves as the model for aMorph; a menu is being constructed for the morph, and here the receiver is able to add its own items" -! ! - -!Object methodsFor: 'user interface' stamp: 'sma 11/12/2000 11:43'! -asExplorerString - ^ self printString! ! - -!Object methodsFor: 'user interface' stamp: 'sw 7/13/1999 15:53'! -defaultBackgroundColor - "Answer the color to be used as the base window color for a window whose model is an object of the receiver's class" - - ^ Preferences windowColorFor: self class name! ! - -!Object methodsFor: 'user interface'! -defaultLabelForInspector - "Answer the default label to be used for an Inspector window on the receiver." - - ^ self class name! ! - -!Object methodsFor: 'user interface' stamp: 'RAA 7/10/2000 08:11'! -eToyStreamedRepresentationNotifying: aWidget - - | outData | - [ outData _ SmartRefStream streamedRepresentationOf: self ] - on: ProgressInitiationException - do: [ :ex | - ex sendNotificationsTo: [ :min :max :curr | - aWidget ifNotNil: [aWidget flashIndicator: #working]. - ]. - ]. - ^outData -! ! - -!Object methodsFor: 'user interface' stamp: 'ar 9/27/2005 20:29'! -explore - ^ToolSet explore: self! ! - -!Object methodsFor: 'user interface' stamp: 'sw 8/15/97 17:25'! -fullScreenSize - "Answer the size to which a window displaying the receiver should be set" - | adj | - adj _ (3 * Preferences scrollBarWidth) @ 0. - ^ Rectangle origin: adj extent: (DisplayScreen actualScreenSize - adj)! ! - -!Object methodsFor: 'user interface' stamp: 'RAA 6/21/1999 11:27'! -hasContentsInExplorer - - ^self basicSize > 0 or: [self class allInstVarNames isEmpty not] -! ! - -!Object methodsFor: 'user interface' stamp: 'rbb 3/1/2005 09:28'! -inform: aString - "Display a message for the user to read and then dismiss. 6/9/96 sw" - - aString isEmptyOrNil ifFalse: [UIManager default inform: aString]! ! - -!Object methodsFor: 'user interface'! -initialExtent - "Answer the desired extent for the receiver when a view on it is first opened on the screen. - 5/22/96 sw: in the absence of any override, obtain from RealEstateAgent" - - ^ RealEstateAgent standardWindowExtent! ! - -!Object methodsFor: 'user interface' stamp: 'ar 9/27/2005 20:30'! -inspectWithLabel: aLabel - "Create and schedule an Inspector in which the user can examine the receiver's variables." - ^ToolSet inspect: self label: aLabel! ! - -!Object methodsFor: 'user interface' stamp: 'sw 6/12/2001 11:09'! -launchPartVia: aSelector - "Obtain a morph by sending aSelector to self, and attach it to the morphic hand. This provides a general protocol for parts bins" - - | aMorph | - aMorph _ self perform: aSelector. - aMorph setProperty: #beFullyVisibleAfterDrop toValue: true. - aMorph openInHand! ! - -!Object methodsFor: 'user interface' stamp: 'sw 6/17/2004 01:47'! -launchPartVia: aSelector label: aString - "Obtain a morph by sending aSelector to self, and attach it to the morphic hand. This provides a general protocol for parts bins" - - | aMorph | - aMorph _ self perform: aSelector. - aMorph setNameTo: (ActiveWorld unusedMorphNameLike: aString). - aMorph setProperty: #beFullyVisibleAfterDrop toValue: true. - aMorph openInHand! ! - -!Object methodsFor: 'user interface' stamp: 'sw 10/16/2000 11:11'! -launchTileToRefer - "Create a tile to reference the receiver, and attach it to the hand" - - self currentHand attachMorph: self tileToRefer! ! - -!Object methodsFor: 'user interface' stamp: 'di 5/11/1999 22:26'! -modelSleep - "A window with me as model is being exited or collapsed or closed. - Default response is no-op" ! ! - -!Object methodsFor: 'user interface' stamp: 'di 5/11/1999 22:01'! -modelWakeUp - "A window with me as model is being entered or expanded. Default response is no-op" ! ! - -!Object methodsFor: 'user interface' stamp: 'sw 10/16/1999 22:45'! -modelWakeUpIn: aWindow - "A window with me as model is being entered or expanded. Default response is no-op" - self modelWakeUp! ! - -!Object methodsFor: 'user interface' stamp: 'sw 3/8/1999 15:27'! -mouseUpBalk: evt - "A button I own got a mouseDown, but the user moved out before letting up. Certain kinds of objects (so-called 'radio buttons', for example, and other structures that must always have some selection, e.g. PaintBoxMorph) wish to take special action in this case; this default does nothing." -! ! - -!Object methodsFor: 'user interface' stamp: 'sw 8/22/97 13:14'! -newTileMorphRepresentative - ^ TileMorph new setLiteral: self! ! - -!Object methodsFor: 'user interface' stamp: 'jcg 11/1/2001 13:13'! -notYetImplemented - self inform: 'Not yet implemented (', thisContext sender printString, ')'! ! - -!Object methodsFor: 'user interface' stamp: 'di 6/10/1998 15:06'! -windowReqNewLabel: labelString - "My window's title has been edited. - Return true if this is OK, and override for further behavior." - - ^ true! ! - - -!Object methodsFor: 'viewer' stamp: 'sw 10/16/2000 10:35'! -assureUniClass - "If the receiver is not yet an instance of a uniclass, create a uniclass for it and make the receiver become an instance of that class." - - | anInstance | - self belongsToUniClass ifTrue: [^ self]. - anInstance _ self class instanceOfUniqueClass. - self become: (self as: anInstance class). - ^ anInstance! ! - -!Object methodsFor: 'viewer' stamp: 'sw 10/16/2000 10:41'! -belongsToUniClass - "Answer whether the receiver belongs to a uniclass. For the moment (this is not entirely satisfactory) this is precisely equated with the classname ending in a digit" - - ^ self class name endsWithDigit! ! - -!Object methodsFor: 'viewer' stamp: 'sw 12/11/2000 15:37'! -browseOwnClassSubProtocol - "Open up a ProtocolBrowser on the subprotocol of the receiver" - - ProtocolBrowser openSubProtocolForClass: self class -! ! - -!Object methodsFor: 'viewer' stamp: 'sw 8/4/2001 00:51'! -categoriesForViewer: aViewer - "Answer a list of categories to offer in the given viewer" - - ^ aViewer currentVocabulary categoryListForInstance: self ofClass: self class limitClass: aViewer limitClass! ! - -!Object methodsFor: 'viewer' stamp: 'sw 8/3/2001 22:08'! -categoriesForVocabulary: aVocabulary limitClass: aLimitClass - "Answer a list of categories of methods for the receiver when using the given vocabulary, given that one considers only methods that are implemented not further away than aLimitClass" - - ^ aVocabulary categoryListForInstance: self ofClass: self class limitClass: aLimitClass! ! - -!Object methodsFor: 'viewer' stamp: 'sw 10/25/2000 07:20'! -chooseNewNameForReference - "Offer an opportunity for the receiver, presumed already to be known in the References registry, to be renamed" - - | nameSym current newName | - current _ References keyAtValue: self ifAbsent: [^ self error: 'not found in References']. - - newName _ FillInTheBlank request: 'Please enter new name' initialAnswer: current. - "Want to user some better way of determining the validity of the chosen identifier, and also want to give more precise diagnostic if the string the user types in is not acceptable. Work to be done here." - - newName isEmpty ifTrue: [^ nil]. - ((Scanner isLiteralSymbol: newName) and: [(newName includes: $:) not]) - ifTrue: - [nameSym _ newName capitalized asSymbol. - (((References includesKey: nameSym) not and: - [(Smalltalk includesKey: nameSym) not]) and: - [(ScriptingSystem allKnownClassVariableNames includes: nameSym) not]) - ifTrue: - [(References associationAt: current) key: nameSym. - References rehash. - ^ nameSym]]. - self inform: 'Sorry, that name is not available.'. - ^ nil! ! - -!Object methodsFor: 'viewer' stamp: 'sw 8/3/2001 21:22'! -defaultLimitClassForVocabulary: aVocabulary - "Answer the class to use, by default, as the limit class on a protocol browser or viewer opened up on the receiver, within the purview of the Vocabulary provided" - - ^ (aVocabulary isKindOf: FullVocabulary) - ifTrue: - [self class superclass == Object - ifTrue: - [self class] - ifFalse: - [self class superclass]] - ifFalse: - [ProtoObject]! ! - -!Object methodsFor: 'viewer' stamp: 'sw 2/14/2000 14:24'! -defaultNameStemForInstances - "Answer a basis for names of default instances of the receiver. The default is to let the class specify, but certain instances will want to override. (PasteUpMorphs serving as Worlds come to mind" - - ^ self class defaultNameStemForInstances! ! - -!Object methodsFor: 'viewer' stamp: 'sw 5/22/2001 16:53'! -elementTypeFor: aStringOrSymbol vocabulary: aVocabulary - "Answer a symbol characterizing what kind of element aStringOrSymbol represents. Realistically, at present, this always just returns #systemScript; a prototyped but not-incorporated architecture supported use of a leading colon to characterize an inst var of a system class, and for the moment we still see its remnant here." - - self flag: #deferred. "a loose end in the non-player case" - ^ #systemScript! ! - -!Object methodsFor: 'viewer' stamp: 'sw 5/4/2001 07:04'! -externalName - "Answer an external name by which the receiver is known. Generic implementation here is a transitional backstop. probably" - - ^ self nameForViewer! ! - -!Object methodsFor: 'viewer' stamp: 'sw 5/4/2001 07:06'! -graphicForViewerTab - "When a Viewer is open on the receiver, its tab needs some graphic to show to the user. Answer a form or a morph to serve that purpose. A generic image is used for arbitrary objects, but note my reimplementors" - - ^ ScriptingSystem formAtKey: 'Image'! ! - -!Object methodsFor: 'viewer' stamp: 'sw 5/4/2001 07:08'! -hasUserDefinedSlots - "Answer whether the receiver has any user-defined slots, in the omniuser sense of the term. This is needed to allow Viewers to look at any object, not just at Players." - - ^ false! ! - -!Object methodsFor: 'viewer' stamp: 'sw 8/22/2002 14:07'! -infoFor: anElement inViewer: aViewer - "The user made a gesture asking for info/menu relating to me. Some of the messages dispatched here are not yet available in this image" - - | aMenu elementType | - elementType _ self elementTypeFor: anElement vocabulary: aViewer currentVocabulary. - ((elementType = #systemSlot) | (elementType == #userSlot)) - ifTrue: [^ self slotInfoButtonHitFor: anElement inViewer: aViewer]. - self flag: #deferred. "Use a traditional MenuMorph, and reinstate the pacify thing" - aMenu _ MenuMorph new defaultTarget: aViewer. - #( ('implementors' browseImplementorsOf:) - ('senders' browseSendersOf:) - ('versions' browseVersionsOf:) - - - ('browse full' browseMethodFull:) - ('inheritance' browseMethodInheritance:) - - - ('about this method' aboutMethod:)) do: - - [:pair | - pair = '-' - ifTrue: - [aMenu addLine] - ifFalse: - [aMenu add: pair first target: aViewer selector: pair second argument: anElement]]. - aMenu addLine. - aMenu defaultTarget: self. - #( ('destroy script' removeScript:) - ('rename script' renameScript:) - ('pacify script' pacifyScript:)) do: - [:pair | - aMenu add: pair first target: self selector: pair second argument: anElement]. - - aMenu addLine. - aMenu add: 'show categories....' target: aViewer selector: #showCategoriesFor: argument: anElement. - aMenu items size == 0 ifTrue: "won't happen at the moment a/c the above" - [aMenu add: 'ok' action: nil]. "in case it was a slot -- weird, transitional" - - aMenu addTitle: anElement asString, ' (', elementType, ')'. - - aMenu popUpInWorld: self currentWorld. - ! ! - -!Object methodsFor: 'viewer' stamp: 'sw 9/26/2001 11:58'! -initialTypeForSlotNamed: aName - "Answer the initial type to be ascribed to the given instance variable" - - ^ #Object! ! - -!Object methodsFor: 'viewer' stamp: 'ar 5/26/2001 16:13'! -isPlayerLike - "Return true if the receiver is a player-like object" - ^false! ! - -!Object methodsFor: 'viewer' stamp: 'nk 9/11/2004 16:53'! -methodInterfacesInPresentationOrderFrom: interfaceList forCategory: aCategory - "Answer the interface list sorted in desired presentation order, using a - static master-ordering list, q.v. The category parameter allows an - escape in case one wants to apply different order strategies in different - categories, but for now a single master-priority-ordering is used -- see - the comment in method EToyVocabulary.masterOrderingOfPhraseSymbols" - - | masterOrder ordered unordered index | - masterOrder := Vocabulary eToyVocabulary masterOrderingOfPhraseSymbols. - ordered := SortedCollection sortBlock: [:a :b | a key < b key]. - unordered := SortedCollection sortBlock: [:a :b | a wording < b wording]. - - interfaceList do: [:interface | - index := masterOrder indexOf: interface elementSymbol. - index isZero - ifTrue: [unordered add: interface] - ifFalse: [ordered add: index -> interface]]. - - ^ Array - streamContents: [:stream | - ordered do: [:assoc | stream nextPut: assoc value]. - stream nextPutAll: unordered]! ! - -!Object methodsFor: 'viewer' stamp: 'sw 10/24/2000 11:36'! -newScriptorAround: aPhraseTileMorph - "Sprout a scriptor around aPhraseTileMorph, thus making a new script. This is where generalized scriptors will be threaded in" - - ^ nil! ! - -!Object methodsFor: 'viewer' stamp: 'sw 10/25/2000 17:42'! -offerViewerMenuForEvt: anEvent morph: aMorph - "Offer the viewer's primary menu to the user. aMorph is some morph within the viewer itself, the one within which a mousedown triggered the need for this menu, and it is used only to retrieve the Viewer itself" - - self offerViewerMenuFor: (aMorph ownerThatIsA: StandardViewer) event: anEvent! ! - -!Object methodsFor: 'viewer' stamp: 'sw 8/11/2002 02:03'! -offerViewerMenuFor: aViewer event: evt - "Offer the primary Viewer menu to the user. Copied up from Player code, but most of the functions suggested here don't work for non-Player objects, many aren't even defined, some relate to exploratory sw work not yet reflected in the current corpus. We are early in the life cycle of this method..." - - | aMenu | - aMenu _ MenuMorph new defaultTarget: self. - aMenu addStayUpItem. - aMenu title: '**CAUTION -- UNDER CONSTRUCTION!!** -Many things may not work!! -', self nameForViewer. - (aViewer affordsUniclass and: [self belongsToUniClass not]) ifTrue: - [aMenu add: 'give me a Uniclass' action: #assureUniClass. - aMenu addLine]. - aMenu add: 'choose vocabulary...' target: aViewer action: #chooseVocabulary. - aMenu add: 'choose limit class...' target: aViewer action: #chooseLimitClass. - aMenu add: 'add search pane' target: aViewer action: #addSearchPane. - aMenu balloonTextForLastItem: 'Specify which class should be the most generic one to have its methods shown in this Viewer'. - aMenu addLine. - - self belongsToUniClass ifTrue: - [aMenu add: 'add a new instance variable' target: self selector: #addInstanceVariableIn: argument: aViewer. - aMenu add: 'add a new script' target: aViewer selector: #newPermanentScriptIn: argument: aViewer. - aMenu addLine. - aMenu add: 'make my class be first-class' target: self selector: #makeFirstClassClassIn: argument: aViewer. - aMenu add: 'move my changes up to my superclass' target: self action: #promoteChangesToSuperclass. - aMenu addLine]. - - aMenu add: 'tear off a tile' target: self selector: #launchTileToRefer. - aMenu addLine. - - aMenu add: 'inspect me' target: self selector: #inspect. - aMenu add: 'inspect my class' target: self class action: #inspect. - aMenu addLine. - - aMenu add: 'browse vocabulary' action: #haveFullProtocolBrowsed. - aMenu add: 'inspect this Viewer' target: aViewer action: #inspect. - - aMenu popUpEvent: evt in: aViewer currentWorld - -" - aMenu add: 'references to me' target: aViewer action: #browseReferencesToObject. - aMenu add: 'toggle scratch pane' target: aViewer selector: #toggleScratchPane. - aMenu add: 'make a nascent script for me' target: aViewer selector: #makeNascentScript. - aMenu add: 'rename me' target: aViewer selector: #chooseNewNameForReference. - aMenu add: 'browse full' action: #browseOwnClassFull. - aMenu add: 'browse hierarchy' action: #browseOwnClassHierarchy. - aMenu add: 'set user level...' target: aViewer action: #setUserLevel. - aMenu add: 'browse sub-protocol' action: #browseOwnClassSubProtocol. - aMenu addLine. - -"! ! - -!Object methodsFor: 'viewer' stamp: 'sw 1/22/2001 15:20'! -renameScript: oldSelector - "prompt the user for a new selector and apply it. Presently only works for players" - - self notYetImplemented! ! - -!Object methodsFor: 'viewer' stamp: 'sw 8/10/2004 11:53'! -tilePhrasesForCategory: aCategorySymbol inViewer: aViewer - "Return a collection of phrases for the category." - - | interfaces | - interfaces _ self methodInterfacesForCategory: aCategorySymbol inVocabulary: aViewer currentVocabulary limitClass: aViewer limitClass. - interfaces _ self methodInterfacesInPresentationOrderFrom: interfaces forCategory: aCategorySymbol. - ^ self tilePhrasesForMethodInterfaces: interfaces inViewer: aViewer! ! - -!Object methodsFor: 'viewer' stamp: 'sw 8/10/2004 11:53'! -tilePhrasesForMethodInterfaces: methodInterfaceList inViewer: aViewer - "Return a collection of ViewerLine objects corresponding to the method-interface list provided. The resulting list will be in the same order as the incoming list, but may be smaller if the viewer's vocbulary suppresses some of the methods, or if, in classic tiles mode, the selector requires more arguments than can be handled." - - | toSuppress interfaces resultType itsSelector | - toSuppress _ aViewer currentVocabulary phraseSymbolsToSuppress. - interfaces _ methodInterfaceList reject: [:int | toSuppress includes: int selector]. - Preferences universalTiles ifFalse: "Classic tiles have their limitations..." - [interfaces _ interfaces select: - [:int | - itsSelector _ int selector. - itsSelector numArgs < 2 or: - "The lone two-arg loophole in classic tiles" - [#(color:sees:) includes: itsSelector]]]. - - ^ interfaces collect: - [:aMethodInterface | - ((resultType _ aMethodInterface resultType) notNil and: [resultType ~~ #unknown]) - ifTrue: - [aViewer phraseForVariableFrom: aMethodInterface] - ifFalse: - [aViewer phraseForCommandFrom: aMethodInterface]]! ! - -!Object methodsFor: 'viewer' stamp: 'sw 8/10/2004 12:23'! -tilePhrasesForSelectorList: aList inViewer: aViewer - "Particular to the search facility in viewers. Answer a list, in appropriate order, of ViewerLine objects to put into the viewer." - - | interfaces aVocab | - aVocab _ aViewer currentVocabulary. - interfaces _ self - methodInterfacesInPresentationOrderFrom: - (aList collect: [:aSel | aVocab methodInterfaceForSelector: aSel class: self class]) - forCategory: #search. - ^ self tilePhrasesForMethodInterfaces: interfaces inViewer: aViewer! ! - -!Object methodsFor: 'viewer' stamp: 'sw 5/4/2001 04:51'! -tileToRefer - "Answer a reference tile that comprises an alias to me" - - ^ TileMorph new setToReferTo: self! ! - -!Object methodsFor: 'viewer' stamp: 'sd 3/30/2005 22:04'! -uniqueInstanceVariableNameLike: aString excluding: takenNames - "Answer a nice instance-variable name to be added to the receiver which resembles aString, making sure it does not coincide with any element in takenNames" - - | okBase uniqueName usedNames | - usedNames _ self class allInstVarNamesEverywhere. - usedNames removeAllFoundIn: self class instVarNames. - usedNames addAll: takenNames. - okBase _ Scanner wellFormedInstanceVariableNameFrom: aString. - - uniqueName _ Utilities keyLike: okBase satisfying: - [:aKey | (usedNames includes: aKey) not]. - - ^ uniqueName! ! - -!Object methodsFor: 'viewer' stamp: 'sw 11/21/2001 15:16'! -uniqueNameForReference - "Answer a nice name by which the receiver can be referred to by other objects. At present this uses a global References dictionary to hold the database of references, but in due course this will need to acquire some locality" - - | aName nameSym stem knownClassVars | - (aName _ self uniqueNameForReferenceOrNil) ifNotNil: [^ aName]. - (stem _ self knownName) ifNil: - [stem _ self defaultNameStemForInstances asString]. - stem _ stem select: [:ch | ch isLetter or: [ch isDigit]]. - stem size == 0 ifTrue: [stem _ 'A']. - stem first isLetter ifFalse: - [stem _ 'A', stem]. - stem _ stem capitalized. - knownClassVars _ ScriptingSystem allKnownClassVariableNames. - aName _ Utilities keyLike: stem satisfying: - [:jinaLake | - nameSym _ jinaLake asSymbol. - ((References includesKey: nameSym) not and: - [(Smalltalk includesKey: nameSym) not]) and: - [(knownClassVars includes: nameSym) not]]. - - References at: (aName _ aName asSymbol) put: self. - ^ aName! ! - -!Object methodsFor: 'viewer' stamp: 'md 1/17/2006 17:58'! -uniqueNameForReferenceFrom: proposedName - "Answer a satisfactory symbol, similar to the proposedName but obeying the rules, to represent the receiver" - - | aName nameSym stem okay | - proposedName = self uniqueNameForReferenceOrNil - ifTrue: [^ proposedName]. "No change" - - stem _ proposedName select: [:ch | ch isLetter or: [ch isDigit]]. - stem size == 0 ifTrue: [stem _ 'A']. - stem first isLetter ifFalse: - [stem _ 'A', stem]. - stem _ stem capitalized. - aName _ Utilities keyLike: stem satisfying: - [:jinaLake | - nameSym _ jinaLake asSymbol. - okay _ true. - (self class bindingOf: nameSym) ifNotNil: [okay _ false "don't use it"]. - okay]. - ^ aName asSymbol! ! - -!Object methodsFor: 'viewer' stamp: 'sw 3/15/2004 23:01'! -uniqueNameForReferenceOrNil - "If the receiver has a unique name for reference, return it here, else return nil" - - ^ References keyAtValue: self ifAbsent: [nil]! ! - -!Object methodsFor: 'viewer' stamp: 'ar 5/16/2001 01:40'! -updateThresholdForGraphicInViewerTab - "When a Viewer is open on the receiver, its tab needs some graphic to show to the user. Computing this graphic can take quite some time so we want to make the update frequency depending on how long it takes to compute the thumbnail. The threshold returned by this method defines that the viewer will update at most every 'threshold * timeItTakesToDraw' milliseconds. Thus, if the time for computing the receiver's thumbnail is 200 msecs and the the threshold is 10, the viewer will update at most every two seconds." - ^20 "seems to be a pretty good general choice"! ! - -!Object methodsFor: 'viewer' stamp: 'sw 3/9/2001 13:48'! -usableMethodInterfacesIn: aListOfMethodInterfaces - "Filter aList, returning a subset list of apt phrases" - - ^ aListOfMethodInterfaces -! ! - - -!Object methodsFor: 'world hacking' stamp: 'ar 3/17/2001 23:45'! -couldOpenInMorphic - - "is there an obvious morphic world in which to open a new morph?" - - ^World notNil or: [ActiveWorld notNil]! ! - - -!Object methodsFor: 'private'! -errorImproperStore - "Create an error notification that an improper store was attempted." - - self error: 'Improper store into indexable object'! ! - -!Object methodsFor: 'private'! -errorNonIntegerIndex - "Create an error notification that an improper object was used as an index." - - self error: 'only integers should be used as indices'! ! - -!Object methodsFor: 'private' stamp: 'yo 6/29/2004 11:37'! -errorNotIndexable - "Create an error notification that the receiver is not indexable." - - self error: ('Instances of {1} are not indexable' translated format: {self class name})! ! - -!Object methodsFor: 'private'! -errorSubscriptBounds: index - "Create an error notification that an improper integer was used as an index." - - self error: 'subscript is out of bounds: ' , index printString! ! - -!Object methodsFor: 'private' stamp: 'ar 2/6/2004 14:47'! -primitiveError: aString - "This method is called when the error handling results in a recursion in - calling on error: or halt or halt:." - - | context | - (String - streamContents: - [:s | - s nextPutAll: '***System error handling failed***'. - s cr; nextPutAll: aString. - context _ thisContext sender sender. - 20 timesRepeat: [context == nil ifFalse: [s cr; print: (context _ context sender)]]. - s cr; nextPutAll: '-------------------------------'. - s cr; nextPutAll: 'Type CR to enter an emergency evaluator.'. - s cr; nextPutAll: 'Type any other character to restart.']) - displayAt: 0 @ 0. - [Sensor keyboardPressed] whileFalse. - Sensor keyboard = Character cr ifTrue: [Transcripter emergencyEvaluator]. - Smalltalk isMorphic - ifTrue: [World install "init hands and redisplay"] - ifFalse: [ScheduledControllers searchForActiveController]! ! - -!Object methodsFor: 'private'! -species - "Answer the preferred class for reconstructing the receiver. For example, - collections create new collections whenever enumeration messages such as - collect: or select: are invoked. The new kind of collection is determined by - the species of the original collection. Species and class are not always the - same. For example, the species of Interval is Array." - - ^self class! ! - -!Object methodsFor: 'private'! -storeAt: offset inTempFrame: aContext - "This message had to get sent to an expression already on the stack - as a Block argument being accessed by the debugger. - Just re-route it to the temp frame." - ^ aContext tempAt: offset put: self! ! - -"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! - -Object class - instanceVariableNames: ''! - -!Object class methodsFor: '*Pinesoft-Widgets' stamp: 'gvc 4/17/2007 17:40'! -taskbarIcon - "Answer the icon for an instance of the receiver in a task bar - or nil for the default." - - ^nil! ! - - -!Object class methodsFor: '*magritte-model-accessing' stamp: 'lr 3/27/2006 15:47'! -description - ^ MADescriptionBuilder for: self! ! - - -!Object class methodsFor: 'class initialization' stamp: 'ar 2/11/2001 02:00'! -flushDependents - DependentsFields keysAndValuesDo:[:key :dep| - key ifNotNil:[key removeDependent: nil]. - ]. - DependentsFields finalizeValues.! ! - -!Object class methodsFor: 'class initialization' stamp: 'rw 2/10/2002 13:09'! -flushEvents - "Object flushEvents" - - EventManager flushEvents. ! ! - -!Object class methodsFor: 'class initialization' stamp: 'rww 10/2/2001 07:35'! -initialize - "Object initialize" - DependentsFields ifNil:[self initializeDependentsFields].! ! - -!Object class methodsFor: 'class initialization' stamp: 'ar 2/11/2001 01:41'! -initializeDependentsFields - "Object initialize" - DependentsFields _ WeakIdentityKeyDictionary new. -! ! - -!Object class methodsFor: 'class initialization' stamp: 'ar 2/11/2001 01:45'! -reInitializeDependentsFields - "Object reInitializeDependentsFields" - | oldFields | - oldFields _ DependentsFields. - DependentsFields _ WeakIdentityKeyDictionary new. - oldFields keysAndValuesDo:[:obj :deps| - deps do:[:d| obj addDependent: d]]. -! ! - - -!Object class methodsFor: 'documentation'! -howToModifyPrimitives - "You are allowed to write methods which specify primitives, but please use - caution. If you make a subclass of a class which contains a primitive method, - the subclass inherits the primitive. The message which is implemented - primitively may be overridden in the subclass (E.g., see at:put: in String's - subclass Symbol). The primitive behavior can be invoked using super (see - Symbol string:). - - A class which attempts to mimic the behavior of another class without being - its subclass may or may not be able to use the primitives of the original class. - In general, if the instance variables read or written by a primitive have the - same meanings and are in the same fields in both classes, the primitive will - work. - - For certain frequently used 'special selectors', the compiler emits a - send-special-selector bytecode instead of a send-message bytecode. - Special selectors were created because they offer two advantages. Code - which sends special selectors compiles into fewer bytes than normal. For - some pairs of receiver classes and special selectors, the interpreter jumps - directly to a primitive routine without looking up the method in the class. - This is much faster than a normal message lookup. - - A selector which is a special selector solely in order to save space has a - normal behavior. Methods whose selectors are special in order to - gain speed contain the comment, 'No Lookup'. When the interpreter - encounters a send-special-selector bytecode, it checks the class of the - receiver and the selector. If the class-selector pair is a no-lookup pair, - then the interpreter swiftly jumps to the routine which implements the - corresponding primitive. (A special selector whose receiver is not of the - right class to make a no-lookup pair, is looked up normally). The pairs are - listed below. No-lookup methods contain a primitive number specification, - , which is redundant. Since the method is not normally looked - up, deleting the primitive number specification cannot prevent this - primitive from running. If a no-lookup primitive fails, the method is looked - up normally, and the expressions in it are executed. - - No Lookup pairs of (class, selector) - - SmallInteger with any of + - * / \\ bitOr: bitShift: bitAnd: // - SmallInteger with any of = ~= > < >= <= - Any class with == - Any class with @ - Point with either of x y - ContextPart with blockCopy: - BlockContext with either of value value: - " - - self error: 'comment only'! ! - -!Object class methodsFor: 'documentation'! -whatIsAPrimitive - "Some messages in the system are responded to primitively. A primitive - response is performed directly by the interpreter rather than by evaluating - expressions in a method. The methods for these messages indicate the - presence of a primitive response by including before the - first expression in the method. - - Primitives exist for several reasons. Certain basic or 'primitive' - operations cannot be performed in any other way. Smalltalk without - primitives can move values from one variable to another, but cannot add two - SmallIntegers together. Many methods for arithmetic and comparison - between numbers are primitives. Some primitives allow Smalltalk to - communicate with I/O devices such as the disk, the display, and the keyboard. - Some primitives exist only to make the system run faster; each does the same - thing as a certain Smalltalk method, and its implementation as a primitive is - optional. - - When the Smalltalk interpreter begins to execute a method which specifies a - primitive response, it tries to perform the primitive action and to return a - result. If the routine in the interpreter for this primitive is successful, - it will return a value and the expressions in the method will not be evaluated. - If the primitive routine is not successful, the primitive 'fails', and the - Smalltalk expressions in the method are executed instead. These - expressions are evaluated as though the primitive routine had not been - called. - - The Smalltalk code that is evaluated when a primitive fails usually - anticipates why that primitive might fail. If the primitive is optional, the - expressions in the method do exactly what the primitive would have done (See - Number @). If the primitive only works on certain classes of arguments, the - Smalltalk code tries to coerce the argument or appeals to a superclass to find - a more general way of doing the operation (see SmallInteger +). If the - primitive is never supposed to fail, the expressions signal an error (see - SmallInteger asFloat). - - Each method that specifies a primitive has a comment in it. If the primitive is - optional, the comment will say 'Optional'. An optional primitive that is not - implemented always fails, and the Smalltalk expressions do the work - instead. - - If a primitive is not optional, the comment will say, 'Essential'. Some - methods will have the comment, 'No Lookup'. See Object - howToModifyPrimitives for an explanation of special selectors which are - not looked up. - - For the primitives for +, -, *, and bitShift: in SmallInteger, and truncated - in Float, the primitive constructs and returns a 16-bit - LargePositiveInteger when the result warrants it. Returning 16-bit - LargePositiveIntegers from these primitives instead of failing is - optional in the same sense that the LargePositiveInteger arithmetic - primitives are optional. The comments in the SmallInteger primitives say, - 'Fails if result is not a SmallInteger', even though the implementor has the - option to construct a LargePositiveInteger. For further information on - primitives, see the 'Primitive Methods' part of the chapter on the formal - specification of the interpreter in the Smalltalk book." - - self error: 'comment only'! ! - - -!Object class methodsFor: 'file list services' stamp: 'nk 6/12/2004 11:41'! -fileReaderServicesForDirectory: aFileDirectory - "Backstop" - ^#()! ! - -!Object class methodsFor: 'file list services' stamp: 'nk 6/12/2004 11:30'! -fileReaderServicesForFile: fullName suffix: suffix - "Backstop" - ^#()! ! - -!Object class methodsFor: 'file list services' stamp: 'md 2/15/2006 17:20'! -services - "Backstop" - ^#()! ! - - -!Object class methodsFor: 'instance creation' stamp: 'sw 1/23/2003 09:45'! -categoryForUniclasses - "Answer the default system category into which to place unique-class instances" - - ^ 'UserObjects'! ! - -!Object class methodsFor: 'instance creation' stamp: 'sw 7/28/97 15:56'! -chooseUniqueClassName - | i className | - i _ 1. - [className _ (self name , i printString) asSymbol. - Smalltalk includesKey: className] - whileTrue: [i _ i + 1]. - ^ className! ! - -!Object class methodsFor: 'instance creation' stamp: 'tk 8/22/1998 08:22'! -initialInstance - "Answer the first instance of the receiver, generate an error if there is one already" - "self instanceCount > 0 ifTrue: [self error: 'instance(s) already exist.']." - "Debugging test that is very slow" - ^ self new! ! - -!Object class methodsFor: 'instance creation' stamp: 'sw 5/5/2000 09:30'! -initializedInstance - ^ self new! ! - -!Object class methodsFor: 'instance creation' stamp: 'sw 10/16/2000 10:58'! -instanceOfUniqueClass - "Answer an instance of a unique subclass of the receiver" - - ^ self instanceOfUniqueClassWithInstVarString: '' andClassInstVarString: ''! ! - -!Object class methodsFor: 'instance creation' stamp: 'tk 8/22/1998 08:27'! -instanceOfUniqueClassWithInstVarString: instVarString andClassInstVarString: classInstVarString - "Create a unique class for the receiver, and answer an instance of it" - - ^ (self newUniqueClassInstVars: instVarString - classInstVars: classInstVarString) initialInstance! ! - -!Object class methodsFor: 'instance creation' stamp: 'sw 10/23/1999 22:51'! -isUniClass - ^ false! ! - -!Object class methodsFor: 'instance creation' stamp: 'ajh 5/23/2002 00:35'! -newFrom: aSimilarObject - "Create an object that has similar contents to aSimilarObject. - If the classes have any instance varaibles with the same names, copy them across. - If this is bad for a class, override this method." - - ^ (self isVariable - ifTrue: [self basicNew: aSimilarObject basicSize] - ifFalse: [self basicNew] - ) copySameFrom: aSimilarObject! ! - -!Object class methodsFor: 'instance creation' stamp: 'tk 6/29/1998 12:11'! -newUniqueClassInstVars: instVarString classInstVars: classInstVarString - "Create a unique class for the receiver" - - | aName aClass | - self isSystemDefined ifFalse: - [^ superclass newUniqueClassInstVars: instVarString classInstVars: classInstVarString]. - aName _ self chooseUniqueClassName. - aClass _ self subclass: aName instanceVariableNames: instVarString - classVariableNames: '' poolDictionaries: '' category: self categoryForUniclasses. - classInstVarString size > 0 ifTrue: - [aClass class instanceVariableNames: classInstVarString]. - ^ aClass! ! - -!Object class methodsFor: 'instance creation' stamp: 'sw 7/28/97 15:56'! -newUserInstance - "Answer an instance of an appropriate class to serve as a user object in the containment hierarchy" - - ^ self instanceOfUniqueClass! ! - -!Object class methodsFor: 'instance creation' stamp: 'nk 8/30/2004 07:57'! -readCarefullyFrom: textStringOrStream - "Create an object based on the contents of textStringOrStream. Return an error instead of putting up a SyntaxError window." - - | object | - (Compiler couldEvaluate: textStringOrStream) - ifFalse: [^ self error: 'expected String, Stream, or Text']. - object _ Compiler evaluate: textStringOrStream for: nil - notifying: #error: "signal we want errors" logged: false. - (object isKindOf: self) ifFalse: [self error: self name, ' expected']. - ^object! ! - -!Object class methodsFor: 'instance creation' stamp: 'nk 8/30/2004 07:57'! -readFrom: textStringOrStream - "Create an object based on the contents of textStringOrStream." - - | object | - (Compiler couldEvaluate: textStringOrStream) - ifFalse: [^ self error: 'expected String, Stream, or Text']. - object _ Compiler evaluate: textStringOrStream. - (object isKindOf: self) ifFalse: [self error: self name, ' expected']. - ^object! ! - - -!Object class methodsFor: 'objects from disk' stamp: 'tk 1/8/97'! -createFrom: aSmartRefStream size: varsOnDisk version: instVarList - "Create an instance of me so objects on the disk can be read in. Tricky part is computing the size if variable. Inst vars will be filled in later. " - - ^ self isVariable - ifFalse: [self basicNew] - ifTrue: ["instVarList is names of old class's inst vars plus a version number" - self basicNew: (varsOnDisk - (instVarList size - 1))] -! ! - - -!Object class methodsFor: 'window color' stamp: 'nk 6/10/2004 08:10'! -windowColorSpecification - "Answer a WindowColorSpec object that declares my preference. - This is a backstop for classes that don't otherwise define a preference." - - ^ WindowColorSpec classSymbol: self name - wording: 'Default' brightColor: #white - pastelColor: #white - helpMessage: 'Other windows without color preferences.'! ! - - -!Object class methodsFor: 'private' stamp: 'mir 8/22/2001 15:20'! -releaseExternalSettings - "Do nothing as a default"! ! - - -Object initialize! diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/OrderedMap.hx b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/OrderedMap.hx deleted file mode 100644 index 13b21f2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/OrderedMap.hx +++ /dev/null @@ -1,584 +0,0 @@ -package util; - -import util.Map; -import util.Collection; -import util.Set; -import util.Option; -import util.Debug; -import util.Throwable; - -using util.StringFormat; - -/** - * An ordered map of (key,value) pairs. The key ordering is defined by - * a comparison function specified at construction. Duplicate keys - * are not allowed. - * - * Worst Case Time and Space Complexities: - * [operation] [time] [space] - * insert O(lg(n)) O(lg(n)) - * find O(lg(n)) O(1) - * delete O(lg(n)) O(lg(n)) - * range-query O(lg(n))* O(lg(n)) - * iteration O(n)** O(lg(n)) - * *range-query returns an iterator over elements in the range - * **total cost of iterating over the entire map - * - * The map is backed by a Left-Leaning Red-Black 2-3 Tree - * adapted from Robert Sedgewick (2008) (http://www.cs.princeton.edu/~rs/) - * - * Implementation choices (let size of tree be n) - * - Parent Pointers - * - This implementation omits parent pointers. - * - Omitting parent pointers saves n words of persistent memory - * at the expense of lg(n) stack space per operation. - * - Without parent pointers, most operations in the tree must - * either use recursion, or simulate recursion by saving a history - * of nodes via a stack. For example, each iterator will require - * lg(n) extra space to track progress through the tree. Insertions - * and deletions into the tree will also invalidate any existing - * iterators. - * - Node Size Information - * - This implementation omits the size of each node. - * - Omitting size information saves n words of long-term memory at - * the expense of not providing a find-kth operation. - * - This seems like a reasonable trade-off as range queries are - * generally more common than find-kth operations. The implementation - * used below could easily be modified to provide a version with - * size information should find-kth be of specific interest. - * - Recursive vs. Iterative - * - This implementation uses recursive algorithms. - * - The recursive implementations allow the code to remain compact and - * understandable. Since the height of LLRB 2-3 Trees is gaurenteed - * to be at most 2lg(n), stack overflow is typically not a concern. - * Unlike the standard single-rotation red-black algorithm, LLRB - * operations are not tail-recursive, so even an iterative - * version will require lg(n) extra memory. - */ -class OrderedMap -{ - private var root :Null>; - private var nodeCount :Int; - private var comp :K -> K -> Int; - - public function new( keyComp :K -> K -> Int ) - { - root = null; - comp = keyComp; - nodeCount = 0; - assertInvariants(); - } - - /** - * @returns Some(v) if (\key,v) is in the map, None otherwise. - */ - public function get(key :K) :Option - { - //normal BST search - var n = root; - while( n != null ) - { - var cmp = comp(key,n.key); - if( cmp < 0 ) - { - n = n.left; - } - else if ( cmp > 0 ) - { - n = n.right; - } - else - { - return Some(n.val); - } - } - return None; - } - - /** - * Puts (\key,\val) into the map or replaces the current value of \key - * with \val. - * - * @return None if \key currently is not in the map, or Some(v) if (\key,v) - * was in the map before the put operation. - */ - public function set(key :K, val :V) :Option - { - var ret = new Ref(null); - root = insertNode(root,key,val,ret); - root.color = black; - - assertInvariants(); - - if( ret.r == null ) - { - return None; - } - return Some(ret.r); - } - - private function insertNode(n :Node, key :K, val :V, ret :Ref) - { - //do the insertion at the leaf level - if( n == null ) - { - ++nodeCount; - return new Node(key,val); - } - - //normal BST search - var cmp = comp(key,n.key); - if( cmp < 0 ) - { - n.left = insertNode(n.left,key,val,ret); - } - else if( cmp > 0 ) - { - n.right = insertNode(n.right,key,val,ret); - } - else - { - //the key is already in the map, update the value - ret.r = n.val; - n.val = val; - } - - return fixInvariants(n); - } - - /** - * Removes (\key,v) from the map if it exists. - * - * @return None if (\key,v) wasn't in the map, Some(v) otherwise. - */ - public function remove(key :K) :Option - { - var ret = new Ref(null); - if( root != null ) - { - root = deleteNode(root,key,ret); - if( root != null ) - { - root.color = black; - } - } - - assertInvariants(); - - if( ret.r == null ) - { - return None; - } - return Some(ret.r); - } - - private function deleteNode( n :Node, key :K, ret :Ref ) - { - if( comp(key,n.key) < 0 ) - { - if( isBlack(n.left) && isBlack(n.left.left) ) - { - //ensure we move into a 3-node - n = moveRedLeft(n); - } - n.left = deleteNode(n.left,key,ret); - } - else - { - if( isRed(n.left) ) - { - //ensure we move into a 3-node - n = rotateRight(n); - } - if( comp(key,n.key) == 0 && n.right == null ) - { - //delete the node - ret.r = n.val; - --nodeCount; - return null; - } - if( isBlack(n.right) && isBlack(n.right.left) ) - { - //ensure we move into a 3-node - n = moveRedRight(n); - } - if( comp(key,n.key) == 0 ) - { - Debug.assert(n.right != null); - - ret.r = n.val; - - //ensure we are deleting a node with at most one child - var min = minNode(n.right); - n.val = min.val; - n.key = min.key; - n.right = deleteMinNode(n.right); - } - else - { - n.right = deleteNode(n.right,key,ret); - } - } - - return fixInvariants(n); - } - - /** returns a view of the set of keys in this TreeMap **/ - public function keys() :SetView - { - var _this = this; - - return { - size: function() return _this.size(), - iterator: function() return IterTools.mapIter(new NodeIterator(_this.root),function(x) return x.key), - exists: function(x) { - return switch(_this.get(x)) - { - case None: false; - case Some(_): true; - }; - }, - }; - } - - /** returns a view of the collection of values in this TreeMap **/ - public function values() :CollectionView - { - var _this = this; - - return { - size: function() return _this.size(), - iterator: function() return IterTools.mapIter(new NodeIterator(_this.root),function(x) return x.val), - }; - } - - /** returns a view of the (key,value) pairs in this TreeMap **/ - public function entries() :CollectionView> - { - var _this = this; - - return { - size: function() { - return _this.size(); - }, - iterator: function() { - return cast new NodeIterator(_this.root); - }, - }; - } - - /** returns the number of (key,value) pairs in the map **/ - public function size() :Int - { - return nodeCount; - } - - public function toString() :String - { - var sb = new StringBuf(); - - sb.add("{"); - for( entry in this.entries() ) - { - sb.add("%y => %y, ".sprintf([entry.key,entry.val])); - } - sb.add("}"); - - return sb.toString(); - } - - private static function isRed( n :Node ) - { - if( n == null ) return false; - return switch(n.color) - { - case red: true; - case black: false; - }; - } - - private static inline function isBlack( n :Node ) - { - return !isRed(n); - } - - private static function colorFlip( n :Node ) - { - n.color = oppositeColor(n.color); - n.left.color = oppositeColor(n.left.color); - n.right.color = oppositeColor(n.right.color); - } - - private static inline function oppositeColor( c :Color ) - { - return switch(c) - { - case red: black; - case black: red; - }; - } - - private static function rotateLeft( n :Node ) - { - Debug.assert(n != null); - Debug.assert(n.right != null); - /* - n x - / \ / \ - a x => n c - / \ / \ - b c a b - */ - var x = n.right; - n.right = x.left; - x.left = n; - x.color = n.color; - n.color = red; - return x; - } - - private static function rotateRight( n :Node ) - { - Debug.assert( n != null ); - Debug.assert( n.left != null ); - /* - n x - / \ / \ - x c => a n - / \ / \ - a b b c - */ - var x = n.left; - n.left = x.right; - x.right = n; - x.color = n.color; - n.color = red; - return x; - } - - private static function moveRedLeft( n :Node ) - { - //borrow extra node from right child (which is a 3-node) - colorFlip(n); - if( isRed(n.right.left) ) - { - n.right = rotateRight(n.right); - n = rotateLeft(n); - colorFlip(n); - } - return n; - } - - private static function moveRedRight( n :Node ) - { - //borrow extra node from left child (which is a 3-node) - colorFlip(n); - if( isRed(n.left.left) ) - { - n = rotateRight(n); - colorFlip(n); - } - return n; - } - - private static function fixInvariants( n :Node ) - { - if( isRed(n.right) && isBlack(n.left) ) - { - //ensure left-leaning property - n = rotateLeft(n); - } - if( isRed(n.left) && isRed(n.left.left) ) - { - //balance 4-node - n = rotateRight(n); - } - if( isRed(n.left) && isRed(n.right) ) - { - //split 4-node - colorFlip(n); - } - return n; - } - - private function deleteMinNode( n :Node ) - { - if( n.left == null ) - { - //delete - --nodeCount; - return null; - } - - if( isBlack(n.left) && isBlack(n.left.left) ) - { - n = moveRedLeft(n); - } - - n.left = deleteMinNode(n.left); - - return fixInvariants(n); - } - - private static function minNode( n :Node ) - { - Debug.assert(n != null); - - while( n.left != null ) - { - n = n.left; - } - return n; - } - - private static function maxNode( n :Node ) - { - Debug.assert(n != null); - - while( n.right != null ) - { - n = n.right; - } - return n; - } - - /** Used to verify that the invariants of the tree hold **/ - private inline function assertInvariants() - { - #if DEBUG - Debug.assert( isBlack(root), "root is black: " + root ); - - assertIsTree(root,new List>()); - assertBlackNodeCount(root); - assertBSTOrdering(root,comp); - #end - } - - private static function assertIsTree( n: Node, visited :List> ) - { - if( n == null ) - { - return; - } - - for( r in visited ) - { - Debug.assert( n != r ); - } - visited.push(n); - assertIsTree(n.left,visited); - assertIsTree(n.right,visited); - } - - private static function assertBlackNodeCount( n: Node ) :Int - { - if( n == null ) - { - return 1; - } - - var leftCount = assertBlackNodeCount(n.left); - var rightCount = assertBlackNodeCount(n.right); - - Debug.assert( - leftCount == rightCount, - "num of black nodes in all paths for left and right child not equal" + n - ); - - return leftCount + switch(n.color) { - case red: 0; - case black: 1; - } - } - - private static function assertBSTOrdering( n: Node, compK :K -> K -> Int ) :Void - { - if( n == null ) - { - return; - } - - if( n.left != null && n.left.val != null ) - { - Debug.assert( compK(n.left.key,n.key) < 0, "left child not less than its parent" + n ); - assertBSTOrdering(n.left,compK); - } - - if( n.right != null && n.right.val != null ) - { - Debug.assert( compK(n.key,n.right.key) < 0, "parent not less than its right child" + n ); - assertBSTOrdering(n.right,compK); - } - } -} - -private enum Color -{ - red; - black; -} - -private class Node /*implements Entry*/ -{ - public var left :Null>; - public var right :Null>; - public var color :Color; - - public var key :K; - public var val :V; - - public function new(k :K, v :V) - { - key = k; - val = v; - color = red; - } -} - -private class NodeIterator -{ - private var curr :Node; - private var fringe :Array>; - - public function new( root :Node ) - { - fringe = new Array>(); - traverseToMin(root); - curr = fringe.pop(); - } - - public inline function hasNext() :Bool - { - return curr != null; - } - - public function next() :Node - { - if( !hasNext() ) - { - throw new NoSuchElement(); - } - var ret = curr; - - if( fringe.length > 0 ) - { - curr = fringe.pop(); - traverseToMin(curr.right); - } - else - { - curr = null; - } - - return ret; - } - - private function traverseToMin( n :Node ) - { - while( n != null ) - { - fringe.push(n); - n = n.left; - } - } -} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/RoleQ.pm6 b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/RoleQ.pm6 deleted file mode 100644 index 9b66bde..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/RoleQ.pm6 +++ /dev/null @@ -1,23 +0,0 @@ -role q { - token stopper { \' } - - token escape:sym<\\> { } - - token backslash:sym { } - token backslash:sym<\\> { } - token backslash:sym { } - - token backslash:sym { {} . } - - method tweak_q($v) { self.panic("Too late for :q") } - method tweak_qq($v) { self.panic("Too late for :qq") } -} - -role qq does b1 does c1 does s1 does a1 does h1 does f1 { - token stopper { \" } - token backslash:sym { {} (\w) { self.throw_unrecog_backslash_seq: $/[0].Str } } - token backslash:sym { \W } - - method tweak_q($v) { self.panic("Too late for :q") } - method tweak_qq($v) { self.panic("Too late for :qq") } -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/SmallCheck.hs b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/SmallCheck.hs deleted file mode 100644 index 36c39ef..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/SmallCheck.hs +++ /dev/null @@ -1,378 +0,0 @@ ---------------------------------------------------------------------- --- SmallCheck: another lightweight testing library. --- Colin Runciman, August 2006 --- Version 0.2 (November 2006) --- --- After QuickCheck, by Koen Claessen and John Hughes (2000-2004). ---------------------------------------------------------------------- - -module SmallCheck ( - smallCheck, depthCheck, - Property, Testable, - forAll, forAllElem, - exists, existsDeeperBy, thereExists, thereExistsElem, - (==>), - Series, Serial(..), - (\/), (><), two, three, four, - cons0, cons1, cons2, cons3, cons4, - alts0, alts1, alts2, alts3, alts4, - N(..), Nat, Natural, - depth, inc, dec - ) where - -import Data.List (intersperse) -import Control.Monad (when) -import System.IO (stdout, hFlush) - ------------------- ----------------- - --- Series arguments should be interpreted as a depth bound (>=0) --- Series results should have finite length - -type Series a = Int -> [a] - --- sum -infixr 7 \/ -(\/) :: Series a -> Series a -> Series a -s1 \/ s2 = \d -> s1 d ++ s2 d - --- product -infixr 8 >< -(><) :: Series a -> Series b -> Series (a,b) -s1 >< s2 = \d -> [(x,y) | x <- s1 d, y <- s2 d] - -------------------- ------------------ - --- enumerated data values should be finite and fully defined --- enumerated functional values should be total and strict - --- bounds: --- for data values, the depth of nested constructor applications --- for functional values, both the depth of nested case analysis --- and the depth of results - -class Serial a where - series :: Series a - coseries :: Serial b => Series (a->b) - -instance Serial () where - series _ = [()] - coseries d = [ \() -> b - | b <- series d ] - -instance Serial Int where - series d = [(-d)..d] - coseries d = [ \i -> if i > 0 then f (N (i - 1)) - else if i < 0 then g (N (abs i - 1)) - else z - | z <- alts0 d, f <- alts1 d, g <- alts1 d ] - -instance Serial Integer where - series d = [ toInteger (i :: Int) - | i <- series d ] - coseries d = [ f . (fromInteger :: Integer->Int) - | f <- series d ] - -newtype N a = N a - -instance Show a => Show (N a) where - show (N i) = show i - -instance (Integral a, Serial a) => Serial (N a) where - series d = map N [0..d'] - where - d' = fromInteger (toInteger d) - coseries d = [ \(N i) -> if i > 0 then f (N (i - 1)) - else z - | z <- alts0 d, f <- alts1 d ] - -type Nat = N Int -type Natural = N Integer - -instance Serial Float where - series d = [ encodeFloat sig exp - | (sig,exp) <- series d, - odd sig || sig==0 && exp==0 ] - coseries d = [ f . decodeFloat - | f <- series d ] - -instance Serial Double where - series d = [ frac (x :: Float) - | x <- series d ] - coseries d = [ f . (frac :: Double->Float) - | f <- series d ] - -frac :: (Real a, Fractional a, Real b, Fractional b) => a -> b -frac = fromRational . toRational - -instance Serial Char where - series d = take (d+1) ['a'..'z'] - coseries d = [ \c -> f (N (fromEnum c - fromEnum 'a')) - | f <- series d ] - -instance (Serial a, Serial b) => - Serial (a,b) where - series = series >< series - coseries = map uncurry . coseries - -instance (Serial a, Serial b, Serial c) => - Serial (a,b,c) where - series = \d -> [(a,b,c) | (a,(b,c)) <- series d] - coseries = map uncurry3 . coseries - -instance (Serial a, Serial b, Serial c, Serial d) => - Serial (a,b,c,d) where - series = \d -> [(a,b,c,d) | (a,(b,(c,d))) <- series d] - coseries = map uncurry4 . coseries - -uncurry3 :: (a->b->c->d) -> ((a,b,c)->d) -uncurry3 f (x,y,z) = f x y z - -uncurry4 :: (a->b->c->d->e) -> ((a,b,c,d)->e) -uncurry4 f (w,x,y,z) = f w x y z - -two :: Series a -> Series (a,a) -two s = s >< s - -three :: Series a -> Series (a,a,a) -three s = \d -> [(x,y,z) | (x,(y,z)) <- (s >< s >< s) d] - -four :: Series a -> Series (a,a,a,a) -four s = \d -> [(w,x,y,z) | (w,(x,(y,z))) <- (s >< s >< s >< s) d] - -cons0 :: - a -> Series a -cons0 c _ = [c] - -cons1 :: Serial a => - (a->b) -> Series b -cons1 c d = [c z | d > 0, z <- series (d-1)] - -cons2 :: (Serial a, Serial b) => - (a->b->c) -> Series c -cons2 c d = [c y z | d > 0, (y,z) <- series (d-1)] - -cons3 :: (Serial a, Serial b, Serial c) => - (a->b->c->d) -> Series d -cons3 c d = [c x y z | d > 0, (x,y,z) <- series (d-1)] - -cons4 :: (Serial a, Serial b, Serial c, Serial d) => - (a->b->c->d->e) -> Series e -cons4 c d = [c w x y z | d > 0, (w,x,y,z) <- series (d-1)] - -alts0 :: Serial a => - Series a -alts0 d = series d - -alts1 :: (Serial a, Serial b) => - Series (a->b) -alts1 d = if d > 0 then series (dec d) - else [\_ -> x | x <- series d] - -alts2 :: (Serial a, Serial b, Serial c) => - Series (a->b->c) -alts2 d = if d > 0 then series (dec d) - else [\_ _ -> x | x <- series d] - -alts3 :: (Serial a, Serial b, Serial c, Serial d) => - Series (a->b->c->d) -alts3 d = if d > 0 then series (dec d) - else [\_ _ _ -> x | x <- series d] - -alts4 :: (Serial a, Serial b, Serial c, Serial d, Serial e) => - Series (a->b->c->d->e) -alts4 d = if d > 0 then series (dec d) - else [\_ _ _ _ -> x | x <- series d] - -instance Serial Bool where - series = cons0 True \/ cons0 False - coseries d = [ \x -> if x then b1 else b2 - | (b1,b2) <- series d ] - -instance Serial a => Serial (Maybe a) where - series = cons0 Nothing \/ cons1 Just - coseries d = [ \m -> case m of - Nothing -> z - Just x -> f x - | z <- alts0 d , - f <- alts1 d ] - -instance (Serial a, Serial b) => Serial (Either a b) where - series = cons1 Left \/ cons1 Right - coseries d = [ \e -> case e of - Left x -> f x - Right y -> g y - | f <- alts1 d , - g <- alts1 d ] - -instance Serial a => Serial [a] where - series = cons0 [] \/ cons2 (:) - coseries d = [ \xs -> case xs of - [] -> y - (x:xs') -> f x xs' - | y <- alts0 d , - f <- alts2 d ] - --- Warning: the coseries instance here may generate duplicates. -instance (Serial a, Serial b) => Serial (a->b) where - series = coseries - coseries d = [ \f -> g [f x | x <- series d] - | g <- series d ] - --- For customising the depth measure. Use with care! - -depth :: Int -> Int -> Int -depth d d' | d >= 0 = d'+1-d - | otherwise = error "SmallCheck.depth: argument < 0" - -dec :: Int -> Int -dec d | d > 0 = d-1 - | otherwise = error "SmallCheck.dec: argument <= 0" - -inc :: Int -> Int -inc d = d+1 - --- show the extension of a function (in part, bounded both by --- the number and depth of arguments) -instance (Serial a, Show a, Show b) => Show (a->b) where - show f = - if maxarheight == 1 - && sumarwidth + length ars * length "->;" < widthLimit then - "{"++( - concat $ intersperse ";" $ [a++"->"++r | (a,r) <- ars] - )++"}" - else - concat $ [a++"->\n"++indent r | (a,r) <- ars] - where - ars = take lengthLimit [ (show x, show (f x)) - | x <- series depthLimit ] - maxarheight = maximum [ max (height a) (height r) - | (a,r) <- ars ] - sumarwidth = sum [ length a + length r - | (a,r) <- ars] - indent = unlines . map (" "++) . lines - height = length . lines - (widthLimit,lengthLimit,depthLimit) = (80,20,3)::(Int,Int,Int) - ----------------- ------------------ - --- adapted from QuickCheck originals: here results come in lists, --- properties have depth arguments, stamps (for classifying random --- tests) are omitted, existentials are introduced - -newtype PR = Prop [Result] - -data Result = Result {ok :: Maybe Bool, arguments :: [String]} - -nothing :: Result -nothing = Result {ok = Nothing, arguments = []} - -result :: Result -> PR -result res = Prop [res] - -newtype Property = Property (Int -> PR) - -class Testable a where - property :: a -> Int -> PR - -instance Testable Bool where - property b _ = Prop [Result (Just b) []] - -instance Testable PR where - property prop _ = prop - -instance (Serial a, Show a, Testable b) => Testable (a->b) where - property f = f' where Property f' = forAll series f - -instance Testable Property where - property (Property f) d = f d - -evaluate :: Testable a => a -> Series Result -evaluate x d = rs where Prop rs = property x d - -forAll :: (Show a, Testable b) => Series a -> (a->b) -> Property -forAll xs f = Property $ \d -> Prop $ - [ r{arguments = show x : arguments r} - | x <- xs d, r <- evaluate (f x) d ] - -forAllElem :: (Show a, Testable b) => [a] -> (a->b) -> Property -forAllElem xs = forAll (const xs) - -thereExists :: Testable b => Series a -> (a->b) -> Property -thereExists xs f = Property $ \d -> Prop $ - [ Result - ( Just $ or [ all pass (evaluate (f x) d) - | x <- xs d ] ) - [] ] - where - pass (Result Nothing _) = True - pass (Result (Just b) _) = b - -thereExistsElem :: Testable b => [a] -> (a->b) -> Property -thereExistsElem xs = thereExists (const xs) - -exists :: (Serial a, Testable b) => - (a->b) -> Property -exists = thereExists series - -existsDeeperBy :: (Serial a, Testable b) => - (Int->Int) -> (a->b) -> Property -existsDeeperBy f = thereExists (series . f) - -infixr 0 ==> - -(==>) :: Testable a => Bool -> a -> Property -True ==> x = Property (property x) -False ==> x = Property (const (result nothing)) - ---------------------- ---------------------- - --- similar in spirit to QuickCheck but with iterative deepening - --- test for values of depths 0..d stopping when a property --- fails or when it has been checked for all these values -smallCheck :: Testable a => Int -> a -> IO String -smallCheck d = iterCheck 0 (Just d) - -depthCheck :: Testable a => Int -> a -> IO String -depthCheck d = iterCheck d (Just d) - -iterCheck :: Testable a => Int -> Maybe Int -> a -> IO String -iterCheck dFrom mdTo t = iter dFrom - where - iter :: Int -> IO String - iter d = do - let Prop results = property t d - (ok,s) <- check (mdTo==Nothing) 0 0 True results - maybe (iter (d+1)) - (\dTo -> if ok && d < dTo - then iter (d+1) - else return s) - mdTo - -check :: Bool -> Int -> Int -> Bool -> [Result] -> IO (Bool, String) -check i n x ok rs | null rs = do - let s = " Completed "++show n++" test(s)" - y = if i then "." else " without failure." - z | x > 0 = " But "++show x++" did not meet ==> condition." - | otherwise = "" - return (ok, s ++ y ++ z) - -check i n x ok (Result Nothing _ : rs) = do - progressReport i n x - check i (n+1) (x+1) ok rs - -check i n x f (Result (Just True) _ : rs) = do - progressReport i n x - check i (n+1) x f rs - -check i n x f (Result (Just False) args : rs) = do - let s = " Failed test no. "++show (n+1)++". Test values follow." - s' = s ++ ": " ++ concat (intersperse ", " args) - if i then - check i (n+1) x False rs - else - return (False, s') - -progressReport :: Bool -> Int -> Int -> IO () -progressReport _ _ _ = return () diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Sorting.mod b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Sorting.mod deleted file mode 100644 index d6a27c1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Sorting.mod +++ /dev/null @@ -1,470 +0,0 @@ -IMPLEMENTATION MODULE Sorting; - -(* J. Andrea, Dec.16/91 *) -(* This code may be freely used and distributed, it may not be sold. *) - -(* Adapted to ISO Module-2 by Frank Schoonjans Feb 2004 *) - -FROM Storage IMPORT ALLOCATE; - -CONST - max_stack = 20; - n_small = 6; (* use a simple sort for this size and smaller *) - -VAR - rtemp :REAL; - ctemp :CARDINAL; - - L, R, n :INTEGER; - top, bottom, lastflip :INTEGER; - - tos :CARDINAL; - Lstack, Rstack :ARRAY [1..max_stack] OF INTEGER; - - (* --------------------------------------------------- *) - PROCEDURE CardQSortIndex( x :ARRAY OF CARDINAL; array_len :CARDINAL; - VAR index :ARRAY OF CARDINAL ); - - VAR - median : CARDINAL; - i,j : INTEGER; - BEGIN - - n := VAL(INTEGER,array_len) - 1; (* back to zero offset *) - - (* initialize the index *) - FOR i := 0 TO n DO - index[i] := VAL(CARDINAL,i); - END; - - tos := 0; - - L := 0; R := n; - - (* PUSH very first set *) - tos := tos + 1; Lstack[tos] := L; Rstack[tos] := R; - - REPEAT - - (* POP *) - L := Lstack[tos]; R := Rstack[tos]; tos := tos - 1; - - IF R - L + 1 > n_small THEN - - REPEAT - i := L; j := R; median := x[index[( L + R ) DIV 2]]; - - REPEAT - WHILE x[index[i]] < median DO - i := i + 1; - END; - WHILE median < x[index[j]] DO - j := j - 1; - END; - - IF i <= j THEN (* swap *) - ctemp := index[i]; index[i] := index[j]; index[j] := ctemp; - i := i + 1; j := j - 1; - END; - UNTIL i > j; - - IF j - L < R - i THEN - IF i < R THEN (* PUSH *) - tos := tos + 1; Lstack[tos] := i; Rstack[tos] := R; - END; - R := j; - ELSE - IF L < j THEN (* push *) - tos := tos + 1; Lstack[tos] := L; Rstack[tos] := j; - END; - L := i; - END; - - UNTIL L >= R; - - ELSE - - (* small sort for small number of values *) - FOR i := L TO R - 1 DO - FOR j := i TO R DO - IF x[index[i]] > x[index[j]] THEN - ctemp := index[i]; - index[i] := index[j]; - index[j] := ctemp - END; - END; - END; - - END; (* check for small *) - - UNTIL tos = 0; - - END CardQSortIndex; - - (* --------------------------------------------------- *) - PROCEDURE RealQSortIndex( x :ARRAY OF REAL; array_len :CARDINAL; - VAR index :ARRAY OF CARDINAL ); - - VAR - median :REAL; - i,j :INTEGER; - BEGIN - - n := VAL(INTEGER,array_len) - 1; (* back to zero offset *) - - (* initialize the index *) - FOR i := 0 TO n DO - index[i] := VAL(CARDINAL,i); - END; - - tos := 0; - - L := 0; R := n; - - (* PUSH very first set *) - tos := tos + 1; Lstack[tos] := L; Rstack[tos] := R; - - REPEAT - - (* POP *) - L := Lstack[tos]; R := Rstack[tos]; tos := tos - 1; - - IF R - L + 1 > n_small THEN - - REPEAT - i := L; j := R; median := x[index[( L + R ) DIV 2]]; - - REPEAT - WHILE x[index[i]] < median DO - i := i + 1; - END; - WHILE median < x[index[j]] DO - j := j - 1; - END; - - IF i <= j THEN (* swap *) - ctemp := index[i]; index[i] := index[j]; index[j] := ctemp; - i := i + 1; j := j - 1; - END; - UNTIL i > j; - - IF j - L < R - i THEN - IF i < R THEN (* PUSH *) - tos := tos + 1; Lstack[tos] := i; Rstack[tos] := R; - END; - R := j; - ELSE - IF L < j THEN (* push *) - tos := tos + 1; Lstack[tos] := L; Rstack[tos] := j; - END; - L := i; - END; - - UNTIL L >= R; - - ELSE - - (* small sort for small number of values *) - FOR i := L TO R - 1 DO - FOR j := i TO R DO - IF x[index[i]] > x[index[j]] THEN - ctemp := index[i]; - index[i] := index[j]; - index[j] := ctemp - END; - END; - END; - - END; (* check for small *) - - UNTIL tos = 0; - - END RealQSortIndex; - - (* --------------------------------------------------- *) - PROCEDURE CardQSort( VAR x :ARRAY OF CARDINAL; array_len :CARDINAL ); - - VAR - median : CARDINAL; - n,i,j : INTEGER; - BEGIN - - n := VAL(INTEGER,array_len) - 1; (* back to zero offset *) - - tos := 0; - - L := 0; R := n; - - (* PUSH very first set *) - tos := tos + 1; Lstack[tos] := L; Rstack[tos] := R; - - REPEAT - - (* POP *) - L := Lstack[tos]; R := Rstack[tos]; tos := tos - 1; - - IF R - L + 1 > n_small THEN - - REPEAT - i := L; j := R; median := x[( L + R ) DIV 2]; - - REPEAT - WHILE x[i] < median DO - i := i + 1; - END; - WHILE median < x[j] DO - j := j - 1; - END; - - IF i <= j THEN (* swap *) - ctemp := x[i]; x[i] := x[j]; x[j] := ctemp; - i := i + 1; j := j - 1; - END; - UNTIL i > j; - - IF j - L < R - i THEN - IF i < R THEN (* PUSH *) - tos := tos + 1; Lstack[tos] := i; Rstack[tos] := R; - END; - R := j; - ELSE - IF L < j THEN (* push *) - tos := tos + 1; Lstack[tos] := L; Rstack[tos] := j; - END; - L := i; - END; - - UNTIL L >= R; - - ELSE - - (* small sort for small number of values *) - FOR i := L TO R - 1 DO - FOR j := i TO R DO - IF x[i] > x[j] THEN - ctemp := x[i]; - x[i] := x[j]; - x[j] := ctemp - END; - END; - END; - - END; (* check for small *) - - UNTIL tos = 0; - - END CardQSort; - - (* ----------------------------------------------------- *) - PROCEDURE CardBSort( VAR x :ARRAY OF CARDINAL; array_len :CARDINAL ); - VAR i,j : INTEGER; - BEGIN - top := 0; (* open arrays are zero offset *) - bottom := VAL(INTEGER,array_len) - 1; - - WHILE top < bottom DO - - lastflip := top; - - FOR i := top TO bottom-1 DO - IF x[i] > x[i+1] THEN (* flip *) - ctemp := x[i]; - x[i] := x[i+1]; - x[i+1] := ctemp; - lastflip := i; - END; - END; - - bottom := lastflip; - - IF bottom > top THEN - - i := bottom - 1; - FOR j := top TO bottom-1 DO - IF x[i] > x[i+1] THEN (* flip *) - ctemp := x[i]; - x[i] := x[i+1]; - x[i+1] := ctemp; - lastflip := i; - END; - i := i - 1; - END; - - top := lastflip + 1; - - ELSE - (* force a loop failure *) - top := bottom + 1; - END; - - END; - - END CardBSort; - - - (* ----------------------------------------------------- *) - PROCEDURE RealBSort( VAR x :ARRAY OF REAL; array_len :CARDINAL ); - VAR bottom,top : INTEGER; - i,j : INTEGER; - BEGIN - top := 0; (* open arrays are zero offset *) - bottom := VAL(INTEGER,array_len) - 1; - - WHILE top < bottom DO - - lastflip := top; - - FOR i := top TO bottom-1 DO - IF x[i] > x[i+1] THEN (* flip *) - rtemp := x[i]; - x[i] := x[i+1]; - x[i+1] := rtemp; - lastflip := i; - END; - END; - - bottom := lastflip; - - IF bottom > top THEN - - i := bottom - 1; - FOR j := top TO bottom-1 DO - IF x[i] > x[i+1] THEN (* flip *) - rtemp := x[i]; - x[i] := x[i+1]; - x[i+1] := rtemp; - lastflip := i; - END; - i := i - 1; - END; - - top := lastflip + 1; - - ELSE - (* force a loop failure *) - top := bottom + 1; - END; - - END; - - END RealBSort; - - - (* ----------------------------------------------------- *) - PROCEDURE TopoSort( x, y :ARRAY OF CARDINAL; n_pairs :CARDINAL; - VAR solution :ARRAY OF CARDINAL; VAR n_solution :CARDINAL; - VAR error, sorted :BOOLEAN ); - (* - This procedure needs some garbage collection added, i've tried but - will little success. J. Andrea, Dec.18/91 - *) - - TYPE - LPtr = POINTER TO Leader; - TPtr = POINTER TO Trailer; - - Leader = RECORD - key :CARDINAL; - count :INTEGER; - trail :TPtr; - next :LPtr; - END; - - Trailer = RECORD - id :LPtr; - next :TPtr; - END; - - VAR - p, q, head, tail :LPtr; - t :TPtr; - i, max_solutions :CARDINAL; - - (* -------------------------------------------- *) - PROCEDURE Find( w :CARDINAL ) :LPtr; - VAR h :LPtr; - BEGIN - h := head; tail^.key := w; (* sentinel *) - WHILE h^.key # w DO - h := h^.next; - END; - IF h = tail THEN - NEW( tail ); - n := n + 1; - h^.count := 0; - h^.trail := NIL; - h^.next := tail; - END; - RETURN h; - END Find; - - BEGIN - - error := FALSE; - n_solution := 0; - - IF n_pairs < 2 THEN - error := TRUE; - ELSE - - max_solutions := HIGH( solution ) + 1; - - NEW( head ); tail := head; n := 0; - - (* add all of the given pairs *) - - FOR i := 0 TO n_pairs - 1 DO - p := Find( x[i] ); q := Find( y[i] ); - NEW(t); - t^.id := q; - t^.next := p^.trail; - p^.trail := t; - q^.count := q^.count + 1; - END; - - (* search for leaders without predecessors *) - - p := head; head := NIL; - WHILE p # tail DO - q := p; p := q^.next; - IF q^.count = 0 THEN - (* insert q^ in new chain *) - q^.next := head; head := q; - END; - END; - - (* output phase *) - - q := head; - WHILE ( NOT error ) & ( q # NIL ) DO - n_solution := n_solution + 1; - IF n_solution > max_solutions THEN - error := TRUE; - ELSE - - solution[n_solution-1] := q^.key; - n := n - 1; - t := q^.trail; q := q^.next; - WHILE t # NIL DO - p := t^.id; p^.count := p^.count - 1; - IF p^.count = 0 THEN - (* insert p^ in leader list *) - p^.next := q; q := p; - END; - t := t^.next; - END; - END; - END; - - IF n # 0 THEN - sorted := FALSE; - ELSE - sorted := TRUE; - END; - - END; - - END TopoSort; - -BEGIN -END Sorting. diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Sudoku.lhs b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Sudoku.lhs deleted file mode 100644 index 6829cf6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/Sudoku.lhs +++ /dev/null @@ -1,382 +0,0 @@ -% Copyright 2005 Brian Alliet - -\documentclass[11pt]{article} -\usepackage{palatino} -\usepackage{fullpage} -\usepackage{parskip} -\usepackage{lhs} - -\begin{document} - -\title{Sudoku Solver} -\author{Brian Alliet} -\maketitle - -\ignore{ -\begin{code} -module Sudoku ( - Sudoku, - makeSudoku, solve, eliminate, analyze, backtrack, - main - ) where - -import Array -import Monad -import List (union,intersperse,transpose,(\\),nub,nubBy) -\end{code} -} - -\section{Introduction} - -This Haskell module implements a solver for Sudoku~\footnote{http://en.wikipedia.org/wiki/Sudoku} puzzles. It can solve -any Sudoku puzzle, even those that require backtracking. - -\section{Data Types} - -\begin{code} -data CellState a = Known a | Unknown [a] | Impossible deriving Eq -\end{code} - -Each cell in a Sudoku grid can be in one of three states: ``Known'' if it has a known correct value~\footnote{Actually -this doesn't always means it is correct. While we are in the backtracking stage we make our guesses ``Known''.}, -``Unknown'' if there is still more than one possible correct value, or ``Impossible'' if there is no value that can -possibly fit the cell. Sudoku grids with ``Impossible'' cells are quickly discarded by the {\tt solve} function. - -\begin{code} -type Coords = (Int,Int) -type Grid a = Array Coords (CellState a) -newtype Sudoku a = Sudoku { unSudoku :: Grid a } deriving Eq -\end{code} - -We represent a Sudoku grid as an Array indexed by integer coordinates. We additionally define a newtype wrapper for the -grid. The smart constructor, {\tt makeSudoku} verifies some invariants before creating the Sudoku value. All the public -API functions operate on the Sudoku type. - -\begin{code} -instance Show a => Show (Sudoku a) where showsPrec p = showParen (p>0) . showsGrid . unSudoku -instance Show a => Show (CellState a) where showsPrec _ = showsCell -\end{code} - -We define {\tt Show} instances for the above types. - -\section{Internal Functions} - -\begin{code} -size :: Grid a -> Int -size = (+1).fst.snd.bounds -\end{code} - -{\tt size} returns the size (the width, height, and number of subboxes) for a Sudoku grid. We ensure Grid's are always -square and indexed starting at $(0,0)$ so simply incrementing either of the array's upper bounds is correct. - -\begin{code} -getRow,getCol,getBox :: Grid a -> Int -> [(Coords,CellState a)] -getRow grid r = [let l = (r,c) in (l,grid!l)|c <- [0..size grid - 1]] -getCol grid c = [let l = (r,c) in (l,grid!l)|r <- [0..size grid - 1]] -getBox grid b = [let l = (r,c) in (l,grid!l)|r <- [boxR..boxR+boxN-1],c <- [boxC..boxC+boxN-1]] - where - boxN = intSqrt (size grid); boxR = b `quot` boxN * boxN; boxC = b `rem` boxN * boxN - -getBoxOf :: Grid a -> Coords -> [(Coords,CellState a)] -getBoxOf grid (r,c) = grid `getBox` ((r `quot` boxN * boxN) + (c `quot` boxN)) - where boxN = intSqrt (size grid) -\end{code} - -{\tt getRow}, {\tt getCol}, and {\tt getBox} return the coordinates and values of the cell in row, column, or box -number {\tt n}, {\tt r}, or {\tt b}. - -\begin{code} -getNeighbors :: Eq a => Grid a -> Coords -> [(Coords,CellState a)] -getNeighbors grid l@(r,c) = filter ((/=l).fst) - $ foldr (union.($grid)) [] - [(`getRow`r),(`getCol`c),(`getBoxOf`l)] -\end{code} - -{\tt getNeighbors} returns the coordinates and values of all the neighbors of this cell. - -\begin{code} -impossible :: Eq a => Grid a -> Coords -> [a] -impossible grid l = map snd $ justKnowns $ grid `getNeighbors` l -\end{code} - -{\tt impossible} returns a list of impossible values for a given cell. The impossible values consist of the values any -``Known'' neighbors. - -\begin{code} -justUnknowns :: [(Coords,CellState a)] -> [(Coords,[a])] -justUnknowns = foldr (\c -> case c of (p,Unknown xs) -> ((p,xs):); _ -> id) [] - -justKnowns :: [(Coords,CellState a)] -> [(Coords,a)] -justKnowns = foldr (\c -> case c of (p,Known x) -> ((p,x):); _ -> id) [] -\end{code} - -{\tt justUnknowns} and {\tt justKnowns} return only the Known or Unknown values (with the constructor stripped off) -from a list of cells. - -\begin{code} -updateGrid :: Grid a -> [(Coords,CellState a)] -> Maybe (Grid a) -updateGrid _ [] = Nothing -updateGrid grid xs = Just $ grid // nubBy (\(x,_) (y,_) -> x==y) xs -\end{code} - -{\tt updateGrid} applies a set of updates to a grid and returns the new grid only if it was updated. - -\section{Public API} - -\begin{code} -makeSudoku :: (Num a, Ord a, Enum a) => [[a]] -> Sudoku a -makeSudoku xs - | not (all ((==size).length) xs) = error "error not a square" - | (intSqrt size)^(2::Int) /= size = error "error dims aren't perfect squares" - | any (\x -> x < 0 || x > fromIntegral size) (concat xs) = error "value out of range" - | otherwise = Sudoku (listArray ((0,0),(size-1,size-1)) states) - where - size = length xs - states = map f (concat xs) - f 0 = Unknown [1..fromIntegral size] - f x = Known x -\end{code} - -{\tt makeSudoku} makes a {\tt Sudoku} value from a list of numbers. The given matrix must be square and have dimensions -that are a perfect square. The possible values for each cell range from 1 to the dimension of the square with ``0'' -representing unknown values.\footnote{The rest of the code doesn't depend on any of this weird ``0'' is unknown -representation. In fact, it doesn't depend on numeric values at all. ``0'' is just used here because it makes -representing grids in Haskell source code easier.} - -\begin{code} -eliminate :: Eq a => Sudoku a -> Maybe (Sudoku a) -eliminate (Sudoku grid) = fmap Sudoku $ updateGrid grid changes >>= sanitize - where - changes = concatMap findChange $ assocs grid - findChange (l,Unknown xs) - = map ((,) l) - $ case filter (not.(`elem`impossible grid l)) xs of - [] -> return Impossible - [x] -> return $ Known x - xs' - | xs' /= xs -> return $ Unknown xs' - | otherwise -> mzero - findChange _ = mzero - sanitize grid = return $ grid // [(l,Impossible) | - (l,x) <- justKnowns changes, x `elem` impossible grid l] -\end{code} - -The {\tt eliminate} phase tries to remove possible choices for ``Unknowns'' based on ``Known'' values in the same row, -column, or box as the ``Unknown'' value. For each cell on the grid we find its ``neighbors'', that is, cells in the -same row, column, or box. Out of those neighbors we get a list of all the ``Known'' values. We can eliminate all of -these from our list of candidates for this cell. If we're lucky enough to eliminate all the candidates but one we have -a new ``Known'' value. If we're unlucky enough to have eliminates {\bf all} the possible candidates we have a new -``Impossible'' value. - -After iterating though every cell we make one more pass looking for conflicting changes. {\tt sanitize} marks cells as -``Impossible'' if we have conflicting ``Known'' values. - -\begin{code} -analyze :: Eq a => Sudoku a -> Maybe (Sudoku a) -analyze (Sudoku grid) = fmap Sudoku $ updateGrid grid $ nub [u | - f <- map ($grid) [getRow,getCol,getBox], - n <- [0..size grid - 1], - u <- unique (f n)] - where - unique xs = foldr f [] $ foldr (union.snd) [] unknowns \\ map snd (justKnowns xs) - where - unknowns = justUnknowns xs - f c = case filter ((c`elem`).snd) unknowns of - [(p,_)] -> ((p,Known c):) - _ -> id -\end{code} - -The {\tt analyze} phase tries to turn ``Unknowns'' into ``Knowns'' when a certain ``Unknown'' is the only cell that -contains a value needed in a given row, column, or box. We apply each of the functions {\tt getRow}, {\tt getCol}, and -{\tt getBox} to all the indices on the grid, apply {\tt unique} to each group, and update the array with the -results. {\tt unique} gets a list of all the unknown cells in the group and finds all the unknown values in each of -those cells. Each of these values are iterated though looking for a value that is only contained in one cell. If such a -value is found the cell containing it must be that value. - -\begin{code} -backtrack :: (MonadPlus m, Eq a) => Sudoku a -> m (Sudoku a) -backtrack (Sudoku grid) = case (justUnknowns (assocs grid)) of - [] -> return $ Sudoku grid - ((p,xs):_) -> msum $ map (\x -> solve $ Sudoku $ grid // [(p,Known x)]) xs -\end{code} - -Sometimes the above two phases still aren't enough to solve a puzzle. For these rare puzzles backtracking is required. -We attempt to solve the puzzle by replacing the first ``Unknown'' value with each of the candidate values and solving -the resulting puzzles. Hopefully at least one of our choices will result in a solvable puzzle. - -We could actually solve any puzzle using backtracking alone, although this would be very inefficient. The above -functions simplify most puzzles enough that the backtracking phase has to do hardly any work. - -\begin{code} -solve :: (MonadPlus m, Eq a) => Sudoku a -> m (Sudoku a) -solve sudoku = - case eliminate sudoku of - Just new - | any (==Impossible) (elems (unSudoku new))-> mzero - | otherwise -> solve new - Nothing -> case analyze sudoku of - Just new -> solve new - Nothing -> backtrack sudoku -\end{code} - -{\tt solve} glues all the above phases together. First we run the {\tt eliminate} phase. If that found the puzzle to -be unsolvable we abort immediately. If {\tt eliminate} changed the grid we go though the {\tt eliminate} phase again -hoping to eliminate more. Once {\tt eliminate} can do no more work we move on to the {\tt analyze} phase. If this -succeeds in doing some work we start over again with the {\tt eliminate} phase. Once {\tt analyze} can do no more work -we have no choice but to resort to backtracking. (However in most cases backtracking won't actually do anything because -the puzzle is already solved.) - -\begin{code} -showsCell :: Show a => CellState a -> ShowS -showsCell (Known x) = shows x -showsCell (Impossible) = showChar 'X' -showsCell (Unknown xs) = \rest -> ('(':) - $ foldr id (')':rest) - $ intersperse (showChar ' ') - $ map shows xs -\end{code} - -{\tt showCell} shows a cell. - -\begin{code} -showsGrid :: Show a => Grid a -> ShowS -showsGrid grid = showsTable [[grid!(r,c) | c <- [0..size grid-1]] | r <- [0..size grid-1]] -\end{code} - -{\tt showGrid} show a grid. - -\begin{code} --- FEATURE: This is pretty inefficient -showsTable :: Show a => [[a]] -> ShowS -showsTable xs = (showChar '\n' .) $ showString $ unlines $ map (concat . intersperse " ") xs'' - where - xs' = (map.map) show xs - colWidths = map (max 2 . maximum . map length) (transpose xs') - xs'' = map (zipWith (\n s -> s ++ (replicate (n - length s) ' ')) colWidths) xs' -\end{code} - -{\tt showsTable} shows a table (or matrix). Every column has the same width so things line up. - -\begin{code} -intSqrt :: Integral a => a -> a -intSqrt n - | n < 0 = error "intSqrt: negative n" - | otherwise = f n - where - f x = if y < x then f y else x - where y = (x + (n `quot` x)) `quot` 2 -\end{code} - -{\tt intSqrt} is Newton`s Iteration for finding integral square roots. - -\ignore{ -\begin{code} -test :: Sudoku Int -test = makeSudoku [ - [0,6,0,1,0,4,0,5,0], - [0,0,8,3,0,5,6,0,0], - [2,0,0,0,0,0,0,0,1], - [8,0,0,4,0,7,0,0,6], - [0,0,6,0,0,0,3,0,0], - [7,0,0,9,0,1,0,0,4], - [5,0,0,0,0,0,0,0,2], - [0,0,7,2,0,6,9,0,0], - [0,4,0,5,0,8,0,7,0]] - -test2 :: Sudoku Int -test2 = makeSudoku [ - [0,7,0,0,0,0,8,0,0], - [0,0,0,2,0,4,0,0,0], - [0,0,6,0,0,0,0,3,0], - [0,0,0,5,0,0,0,0,6], - [9,0,8,0,0,2,0,4,0], - [0,5,0,0,3,0,9,0,0], - [0,0,2,0,8,0,0,6,0], - [0,6,0,9,0,0,7,0,1], - [4,0,0,0,0,3,0,0,0]] - -testSmall :: Sudoku Int -testSmall = makeSudoku [ - [1,0,0,0,0,0,0,0,0], - [0,0,2,7,4,0,0,0,0], - [0,0,0,5,0,0,0,0,4], - [0,3,0,0,0,0,0,0,0], - [7,5,0,0,0,0,0,0,0], - [0,0,0,0,0,9,6,0,0], - [0,4,0,0,0,6,0,0,0], - [0,0,0,0,0,0,0,7,1], - [0,0,0,0,0,1,0,3,0]] - -testHard :: Sudoku Int -testHard = makeSudoku [ - [0,0,0,8,0,2,0,0,0], - [5,0,0,0,0,0,0,0,1], - [0,0,6,0,5,0,3,0,0], - [0,0,9,0,1,0,8,0,0], - [1,0,0,0,0,0,0,0,2], - [0,0,0,9,0,7,0,0,0], - [0,6,1,0,3,0,7,8,0], - [0,5,0,0,0,0,0,4,0], - [0,7,2,0,4,0,1,5,0]] - -testHard2 :: Sudoku Int -testHard2 = makeSudoku [ - [3,0,0,2,0,0,9,0,0], - [0,0,0,0,0,0,0,0,5], - [0,7,0,1,0,4,0,0,0], - [0,0,9,0,0,0,8,0,0], - [5,0,0,0,7,0,0,0,6], - [0,0,1,0,0,0,2,0,0], - [0,0,0,3,0,9,0,4,0], - [8,0,0,0,0,0,0,0,0], - [0,0,6,0,0,5,0,0,7]] - -testHW :: Sudoku Int -testHW = makeSudoku [ - [0,0,0,1,0,0,7,0,2], - [0,3,0,9,5,0,0,0,0], - [0,0,1,0,0,2,0,0,3], - [5,9,0,0,0,0,3,0,1], - [0,2,0,0,0,0,0,7,0], - [7,0,3,0,0,0,0,9,8], - [8,0,0,2,0,0,1,0,0], - [0,0,0,0,8,5,0,6,0], - [6,0,5,0,0,9,0,0,0]] - -testTough :: Sudoku Int -testTough = makeSudoku $ map (map read . words) $ lines $ - "8 3 0 0 0 0 0 4 6\n"++ - "0 2 0 1 0 4 0 3 0\n"++ - "0 0 0 0 0 0 0 0 0\n"++ - "0 0 2 9 0 6 5 0 0\n"++ - "1 4 0 0 0 0 0 2 3\n"++ - "0 0 5 4 0 3 1 0 0\n"++ - "0 0 0 0 0 0 0 0 0\n"++ - "0 6 0 3 0 8 0 7 0\n"++ - "9 5 0 0 0 0 0 6 2\n" - -testDiabolical :: Sudoku Int -testDiabolical = makeSudoku $ map (map read . words) $ lines $ - "8 0 0 7 0 1 0 0 2\n"++ - "0 0 6 0 0 0 7 0 0\n"++ - "0 1 7 0 0 0 8 9 0\n"++ - "0 0 0 1 7 3 0 0 0\n"++ - "7 0 0 0 0 0 0 0 6\n"++ - "0 0 0 9 5 6 0 0 0\n"++ - "0 9 5 0 0 0 4 1 0\n"++ - "0 0 8 0 0 0 5 0 0\n"++ - "3 0 0 6 0 5 0 0 7\n" - -main :: IO () -main = do - let - solve' p = case solve p of - [] -> fail $ "couldn't solve: " ++ show p - sols -> return sols - mapM_ (\p -> solve' p >>= putStrLn.show) [test,test2,testSmall,testHard,testHard2,testHW,testTough,testDiabolical] - return () - -\end{code} -} - -\end{document} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/addressbook.proto b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/addressbook.proto deleted file mode 100644 index b14829e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/addressbook.proto +++ /dev/null @@ -1,30 +0,0 @@ -// See README.txt for information and build instructions. - -package tutorial; - -option java_package = "com.example.tutorial"; -option java_outer_classname = "AddressBookProtos"; - -message Person { - required string name = 1; - required int32 id = 2; // Unique ID number for this person. - optional string email = 3; - - enum PhoneType { - MOBILE = 0; - HOME = 1; - WORK = 2; - } - - message PhoneNumber { - required string number = 1; - optional PhoneType type = 2 [default = HOME]; - } - - repeated PhoneNumber phone = 4; -} - -// Our address book file is just one of these. -message AddressBook { - repeated Person person = 1; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/antlr_ANTLRv3.g b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/antlr_ANTLRv3.g deleted file mode 100644 index fbe6d65..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/antlr_ANTLRv3.g +++ /dev/null @@ -1,608 +0,0 @@ -/* - [The "BSD licence"] - Copyright (c) 2005-2007 Terence Parr - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/** ANTLR v3 grammar written in ANTLR v3 with AST construction */ -grammar ANTLRv3; - -options { - output=AST; - ASTLabelType=CommonTree; -} - -tokens { - DOC_COMMENT; - PARSER; - LEXER; - RULE; - BLOCK; - OPTIONAL; - CLOSURE; - POSITIVE_CLOSURE; - SYNPRED; - RANGE; - CHAR_RANGE; - EPSILON; - ALT; - EOR; - EOB; - EOA; // end of alt - ID; - ARG; - ARGLIST; - RET; - LEXER_GRAMMAR; - PARSER_GRAMMAR; - TREE_GRAMMAR; - COMBINED_GRAMMAR; - INITACTION; - LABEL; // $x used in rewrite rules - TEMPLATE; - SCOPE='scope'; - SEMPRED; - GATED_SEMPRED; // {p}? => - SYN_SEMPRED; // (...) => it's a manually-specified synpred converted to sempred - BACKTRACK_SEMPRED; // auto backtracking mode syn pred converted to sempred - FRAGMENT='fragment'; - TREE_BEGIN='^('; - ROOT='^'; - BANG='!'; - RANGE='..'; - REWRITE='->'; -} - -@members { - int gtype; -} - -grammarDef - : DOC_COMMENT? - ( 'lexer' {gtype=LEXER_GRAMMAR;} // pure lexer - | 'parser' {gtype=PARSER_GRAMMAR;} // pure parser - | 'tree' {gtype=TREE_GRAMMAR;} // a tree parser - | {gtype=COMBINED_GRAMMAR;} // merged parser/lexer - ) - g='grammar' id ';' optionsSpec? tokensSpec? attrScope* action* - rule+ - EOF - -> ^( {adaptor.create(gtype,$g)} - id DOC_COMMENT? optionsSpec? tokensSpec? attrScope* action* rule+ - ) - ; - -tokensSpec - : TOKENS tokenSpec+ '}' -> ^(TOKENS tokenSpec+) - ; - -tokenSpec - : TOKEN_REF - ( '=' (lit=STRING_LITERAL|lit=CHAR_LITERAL) -> ^('=' TOKEN_REF $lit) - | -> TOKEN_REF - ) - ';' - ; - -attrScope - : 'scope' id ACTION -> ^('scope' id ACTION) - ; - -/** Match stuff like @parser::members {int i;} */ -action - : '@' (actionScopeName '::')? id ACTION -> ^('@' actionScopeName? id ACTION) - ; - -/** Sometimes the scope names will collide with keywords; allow them as - * ids for action scopes. - */ -actionScopeName - : id - | l='lexer' -> ID[$l] - | p='parser' -> ID[$p] - ; - -optionsSpec - : OPTIONS (option ';')+ '}' -> ^(OPTIONS option+) - ; - -option - : id '=' optionValue -> ^('=' id optionValue) - ; - -optionValue - : id - | STRING_LITERAL - | CHAR_LITERAL - | INT - | s='*' -> STRING_LITERAL[$s] // used for k=* - ; - -rule -scope { - String name; -} - : DOC_COMMENT? - ( modifier=('protected'|'public'|'private'|'fragment') )? - id {$rule::name = $id.text;} - '!'? - ( arg=ARG_ACTION )? - ( 'returns' rt=ARG_ACTION )? - throwsSpec? optionsSpec? ruleScopeSpec? ruleAction* - ':' altList ';' - exceptionGroup? - -> ^( RULE id {modifier!=null?adaptor.create(modifier):null} ^(ARG $arg)? ^(RET $rt)? - optionsSpec? ruleScopeSpec? ruleAction* - altList - exceptionGroup? - EOR["EOR"] - ) - ; - -/** Match stuff like @init {int i;} */ -ruleAction - : '@' id ACTION -> ^('@' id ACTION) - ; - -throwsSpec - : 'throws' id ( ',' id )* -> ^('throws' id+) - ; - -ruleScopeSpec - : 'scope' ACTION -> ^('scope' ACTION) - | 'scope' id (',' id)* ';' -> ^('scope' id+) - | 'scope' ACTION - 'scope' id (',' id)* ';' - -> ^('scope' ACTION id+ ) - ; - -block - : lp='(' - ( (opts=optionsSpec)? ':' )? - a1=alternative rewrite ( '|' a2=alternative rewrite )* - rp=')' - -> ^( BLOCK[$lp,"BLOCK"] optionsSpec? alternative+ EOB[$rp,"EOB"] ) - ; - -altList -@init { - // must create root manually as it's used by invoked rules in real antlr tool. - // leave here to demonstrate use of {...} in rewrite rule - // it's really BLOCK[firstToken,"BLOCK"]; set line/col to previous ( or : token. - CommonTree blkRoot = (CommonTree)adaptor.create(BLOCK,input.LT(-1),"BLOCK"); -} - : a1=alternative rewrite ( '|' a2=alternative rewrite )* - -> ^( {blkRoot} (alternative rewrite?)+ EOB["EOB"] ) - ; - -alternative -@init { - Token firstToken = input.LT(1); - Token prevToken = input.LT(-1); // either : or | I think -} - : element+ -> ^(ALT[firstToken,"ALT"] element+ EOA["EOA"]) - | -> ^(ALT[prevToken,"ALT"] EPSILON[prevToken,"EPSILON"] EOA["EOA"]) - ; - -exceptionGroup - : ( exceptionHandler )+ ( finallyClause )? - | finallyClause - ; - -exceptionHandler - : 'catch' ARG_ACTION ACTION -> ^('catch' ARG_ACTION ACTION) - ; - -finallyClause - : 'finally' ACTION -> ^('finally' ACTION) - ; - -element - : elementNoOptionSpec - ; - -elementNoOptionSpec - : id (labelOp='='|labelOp='+=') atom - ( ebnfSuffix -> ^( ebnfSuffix ^(BLOCK["BLOCK"] ^(ALT["ALT"] ^($labelOp id atom) EOA["EOA"]) EOB["EOB"])) - | -> ^($labelOp id atom) - ) - | id (labelOp='='|labelOp='+=') block - ( ebnfSuffix -> ^( ebnfSuffix ^(BLOCK["BLOCK"] ^(ALT["ALT"] ^($labelOp id block) EOA["EOA"]) EOB["EOB"])) - | -> ^($labelOp id block) - ) - | atom - ( ebnfSuffix -> ^(BLOCK["BLOCK"] ^(ALT["ALT"] atom EOA["EOA"]) EOB["EOB"]) - | -> atom - ) - | ebnf - | ACTION - | SEMPRED ( '=>' -> GATED_SEMPRED | -> SEMPRED ) - | treeSpec - ; - -atom: range ( (op='^'|op='!') -> ^($op range) | -> range ) - | terminal - | notSet ( (op='^'|op='!') -> ^($op notSet) | -> notSet ) - | RULE_REF ( arg=ARG_ACTION )? ( (op='^'|op='!') )? - -> {$arg!=null&&op!=null}? ^($op RULE_REF $arg) - -> {$arg!=null}? ^(RULE_REF $arg) - -> {$op!=null}? ^($op RULE_REF) - -> RULE_REF - ; - -notSet - : '~' - ( notTerminal -> ^('~' notTerminal) - | block -> ^('~' block) - ) - ; - -treeSpec - : '^(' element ( element )+ ')' -> ^(TREE_BEGIN element+) - ; - -/** Matches ENBF blocks (and token sets via block rule) */ -ebnf -@init { - Token firstToken = input.LT(1); -} -@after { - $ebnf.tree.getToken().setLine(firstToken.getLine()); - $ebnf.tree.getToken().setCharPositionInLine(firstToken.getCharPositionInLine()); -} - : block {Token op=input.LT(1);} - ( '?' -> ^(OPTIONAL[op] block) - | '*' -> ^(CLOSURE[op] block) - | '+' -> ^(POSITIVE_CLOSURE[op] block) - | '^' -> ^('^' block) - | '!' -> ^('!' block) - | '=>' // syntactic predicate - -> {gtype==COMBINED_GRAMMAR && - Character.isUpperCase($rule::name.charAt(0))}? - // if lexer rule in combined, leave as pred for lexer - ^(SYNPRED["=>"] block) - // in real antlr tool, text for SYN_SEMPRED is predname - -> SYN_SEMPRED - | -> block - ) - ; - -range! - : c1=CHAR_LITERAL RANGE c2=CHAR_LITERAL -> ^(CHAR_RANGE[$c1,".."] $c1 $c2) - ; - -terminal - : ( CHAR_LITERAL -> CHAR_LITERAL - // Args are only valid for lexer rules - | TOKEN_REF - ( ARG_ACTION -> ^(TOKEN_REF ARG_ACTION) - | -> TOKEN_REF - ) - | STRING_LITERAL -> STRING_LITERAL - | '.' -> '.' - ) - ( '^' -> ^('^' $terminal) - | '!' -> ^('!' $terminal) - )? - ; - -notTerminal - : CHAR_LITERAL - | TOKEN_REF - | STRING_LITERAL - ; - -ebnfSuffix -@init { - Token op = input.LT(1); -} - : '?' -> OPTIONAL[op] - | '*' -> CLOSURE[op] - | '+' -> POSITIVE_CLOSURE[op] - ; - - - -// R E W R I T E S Y N T A X - -rewrite -@init { - Token firstToken = input.LT(1); -} - : (rew+='->' preds+=SEMPRED predicated+=rewrite_alternative)* - rew2='->' last=rewrite_alternative - -> ^($rew $preds $predicated)* ^($rew2 $last) - | - ; - -rewrite_alternative - : rewrite_template - | rewrite_tree_alternative - | /* empty rewrite */ -> ^(ALT["ALT"] EPSILON["EPSILON"] EOA["EOA"]) - ; - -rewrite_template_block - : lp='(' rewrite_template ')' -> ^(BLOCK[$lp,"BLOCK"] rewrite_template EOB[$lp,"EOB"]) - ; - -rewrite_tree_block - : lp='(' rewrite_tree_alternative ')' - -> ^(BLOCK[$lp,"BLOCK"] rewrite_tree_alternative EOB[$lp,"EOB"]) - ; - -rewrite_tree_alternative - : rewrite_tree_element+ -> ^(ALT["ALT"] rewrite_tree_element+ EOA["EOA"]) - ; - -rewrite_tree_element - : rewrite_tree_atom - | rewrite_tree_atom ebnfSuffix - -> ^( ebnfSuffix ^(BLOCK["BLOCK"] ^(ALT["ALT"] rewrite_tree_atom EOA["EOA"]) EOB["EOB"])) - | rewrite_tree - ( ebnfSuffix - -> ^(BLOCK["BLOCK"] ^(ALT["ALT"] rewrite_tree EOA["EOA"]) EOB["EOB"]) - | -> rewrite_tree - ) - | rewrite_tree_ebnf - ; - -rewrite_tree_atom - : CHAR_LITERAL - | TOKEN_REF ARG_ACTION? -> ^(TOKEN_REF ARG_ACTION?) // for imaginary nodes - | RULE_REF - | STRING_LITERAL - | d='$' id -> LABEL[$d,$id.text] // reference to a label in a rewrite rule - | ACTION - ; - -rewrite_tree_ebnf -@init { - Token firstToken = input.LT(1); -} -@after { - $rewrite_tree_ebnf.tree.getToken().setLine(firstToken.getLine()); - $rewrite_tree_ebnf.tree.getToken().setCharPositionInLine(firstToken.getCharPositionInLine()); -} - : rewrite_tree_block ebnfSuffix -> ^(ebnfSuffix rewrite_tree_block) - ; - -rewrite_tree - : '^(' rewrite_tree_atom rewrite_tree_element* ')' - -> ^(TREE_BEGIN rewrite_tree_atom rewrite_tree_element* ) - ; - -/** Build a tree for a template rewrite: - ^(TEMPLATE (ID|ACTION) ^(ARGLIST ^(ARG ID ACTION) ...) ) - where ARGLIST is always there even if no args exist. - ID can be "template" keyword. If first child is ACTION then it's - an indirect template ref - - -> foo(a={...}, b={...}) - -> ({string-e})(a={...}, b={...}) // e evaluates to template name - -> {%{$ID.text}} // create literal template from string (done in ActionTranslator) - -> {st-expr} // st-expr evaluates to ST - */ -rewrite_template - : // -> template(a={...},...) "..." inline template - {input.LT(1).getText().equals("template")}? - id lp='(' rewrite_template_args ')' - st=( DOUBLE_QUOTE_STRING_LITERAL | DOUBLE_ANGLE_STRING_LITERAL ) - -> ^(TEMPLATE[$lp,"TEMPLATE"] id rewrite_template_args $st) - - | // -> foo(a={...}, ...) - rewrite_template_ref - - | // -> ({expr})(a={...}, ...) - rewrite_indirect_template_head - - | // -> {...} - ACTION - ; - -/** -> foo(a={...}, ...) */ -rewrite_template_ref - : id lp='(' rewrite_template_args ')' - -> ^(TEMPLATE[$lp,"TEMPLATE"] id rewrite_template_args) - ; - -/** -> ({expr})(a={...}, ...) */ -rewrite_indirect_template_head - : lp='(' ACTION ')' '(' rewrite_template_args ')' - -> ^(TEMPLATE[$lp,"TEMPLATE"] ACTION rewrite_template_args) - ; - -rewrite_template_args - : rewrite_template_arg (',' rewrite_template_arg)* - -> ^(ARGLIST rewrite_template_arg+) - | -> ARGLIST - ; - -rewrite_template_arg - : id '=' ACTION -> ^(ARG[$id.start] id ACTION) - ; - -id : TOKEN_REF -> ID[$TOKEN_REF] - | RULE_REF -> ID[$RULE_REF] - ; - -// L E X I C A L R U L E S - -SL_COMMENT - : '//' - ( ' $ANTLR ' SRC // src directive - | ~('\r'|'\n')* - ) - '\r'? '\n' - {$channel=HIDDEN;} - ; - -ML_COMMENT - : '/*' {if (input.LA(1)=='*') $type=DOC_COMMENT; else $channel=HIDDEN;} .* '*/' - ; - -CHAR_LITERAL - : '\'' LITERAL_CHAR '\'' - ; - -STRING_LITERAL - : '\'' LITERAL_CHAR LITERAL_CHAR* '\'' - ; - -fragment -LITERAL_CHAR - : ESC - | ~('\''|'\\') - ; - -DOUBLE_QUOTE_STRING_LITERAL - : '"' LITERAL_CHAR* '"' - ; - -DOUBLE_ANGLE_STRING_LITERAL - : '<<' .* '>>' - ; - -fragment -ESC : '\\' - ( 'n' - | 'r' - | 't' - | 'b' - | 'f' - | '"' - | '\'' - | '\\' - | '>' - | 'u' XDIGIT XDIGIT XDIGIT XDIGIT - | . // unknown, leave as it is - ) - ; - -fragment -XDIGIT : - '0' .. '9' - | 'a' .. 'f' - | 'A' .. 'F' - ; - -INT : '0'..'9'+ - ; - -ARG_ACTION - : NESTED_ARG_ACTION - ; - -fragment -NESTED_ARG_ACTION : - '[' - ( options {greedy=false; k=1;} - : NESTED_ARG_ACTION - | ACTION_STRING_LITERAL - | ACTION_CHAR_LITERAL - | . - )* - ']' - {setText(getText().substring(1, getText().length()-1));} - ; - -ACTION - : NESTED_ACTION ( '?' {$type = SEMPRED;} )? - ; - -fragment -NESTED_ACTION : - '{' - ( options {greedy=false; k=3;} - : NESTED_ACTION - | SL_COMMENT - | ML_COMMENT - | ACTION_STRING_LITERAL - | ACTION_CHAR_LITERAL - | . - )* - '}' - {$channel = DEFAULT_TOKEN_CHANNEL;} - ; - -fragment -ACTION_CHAR_LITERAL - : '\'' (ACTION_ESC|~('\\'|'\'')) '\'' - ; - -fragment -ACTION_STRING_LITERAL - : '"' (ACTION_ESC|~('\\'|'"'))+ '"' - ; - -fragment -ACTION_ESC - : '\\\'' - | '\\"' - | '\\' ~('\''|'"') - ; - -TOKEN_REF - : 'A'..'Z' ('a'..'z'|'A'..'Z'|'_'|'0'..'9')* - ; - -RULE_REF - : 'a'..'z' ('a'..'z'|'A'..'Z'|'_'|'0'..'9')* - ; - -/** Match the start of an options section. Don't allow normal - * action processing on the {...} as it's not a action. - */ -OPTIONS - : 'options' WS_LOOP '{' {$channel=DEFAULT_TOKEN_CHANNEL;} // WS_LOOP sets channel - ; - -TOKENS - : 'tokens' WS_LOOP '{' {$channel=DEFAULT_TOKEN_CHANNEL;} - ; - -/** Reset the file and line information; useful when the grammar - * has been generated so that errors are shown relative to the - * original file like the old C preprocessor used to do. - */ -fragment -SRC : 'src' ' ' file=ACTION_STRING_LITERAL ' ' line=INT {$channel=HIDDEN;} - ; - -WS : ( ' ' - | '\t' - | '\r'? '\n' - )+ - {$channel=HIDDEN;} - ; - -fragment -WS_LOOP - : ( WS - | SL_COMMENT - | ML_COMMENT - )* - {$channel=HIDDEN;} - ; - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/antlr_throws b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/antlr_throws deleted file mode 100644 index 816d891..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/antlr_throws +++ /dev/null @@ -1 +0,0 @@ -public f throws a, b, c : x ; diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/apache2.conf b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/apache2.conf deleted file mode 100644 index d0e838e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/apache2.conf +++ /dev/null @@ -1,393 +0,0 @@ -# Based upon the NCSA server configuration files originally by Rob McCool. -# Changed extensively for the Debian package by Daniel Stone -# and also by Thom May . - -# ServerRoot: The top of the directory tree under which the server's -# configuration, error, and log files are kept. -# -# NOTE! If you intend to place this on an NFS (or otherwise network) -# mounted filesystem then please read the LockFile documentation -# (available at ); -# you will save yourself a lot of trouble. - -ServerRoot "/etc/apache2" - -# The LockFile directive sets the path to the lockfile used when Apache -# is compiled with either USE_FCNTL_SERIALIZED_ACCEPT or -# USE_FLOCK_SERIALIZED_ACCEPT. This directive should normally be left at -# its default value. The main reason for changing it is if the logs -# directory is NFS mounted, since the lockfile MUST BE STORED ON A LOCAL -# DISK. The PID of the main server process is automatically appended to -# the filename. - -LockFile /var/lock/apache2/accept.lock - -# PidFile: The file in which the server should record its process -# identification number when it starts. - -PidFile /var/run/apache2.pid - -# Timeout: The number of seconds before receives and sends time out. - -Timeout 300 - -# KeepAlive: Whether or not to allow persistent connections (more than -# one request per connection). Set to "Off" to deactivate. - -KeepAlive On - -# MaxKeepAliveRequests: The maximum number of requests to allow -# during a persistent connection. Set to 0 to allow an unlimited amount. -# We recommend you leave this number high, for maximum performance. - -MaxKeepAliveRequests 100 - -# KeepAliveTimeout: Number of seconds to wait for the next request from the -# same client on the same connection. - -KeepAliveTimeout 15 - -## -## Server-Pool Size Regulation (MPM specific) -## - -# prefork MPM -# StartServers ......... number of server processes to start -# MinSpareServers ...... minimum number of server processes which are kept spare -# MaxSpareServers ...... maximum number of server processes which are kept spare -# MaxClients ........... maximum number of server processes allowed to start -# MaxRequestsPerChild .. maximum number of requests a server process serves - -StartServers 5 -MinSpareServers 5 -MaxSpareServers 10 -MaxClients 20 -MaxRequestsPerChild 0 - - -# pthread MPM -# StartServers ......... initial number of server processes to start -# MaxClients ........... maximum number of server processes allowed to start -# MinSpareThreads ...... minimum number of worker threads which are kept spare -# MaxSpareThreads ...... maximum number of worker threads which are kept spare -# ThreadsPerChild ...... constant number of worker threads in each server process -# MaxRequestsPerChild .. maximum number of requests a server process serves - -StartServers 2 -MaxClients 150 -MinSpareThreads 25 -MaxSpareThreads 75 -ThreadsPerChild 25 -MaxRequestsPerChild 0 - - -# perchild MPM -# NumServers ........... constant number of server processes -# StartThreads ......... initial number of worker threads in each server process -# MinSpareThreads ...... minimum number of worker threads which are kept spare -# MaxSpareThreads ...... maximum number of worker threads which are kept spare -# MaxThreadsPerChild ... maximum number of worker threads in each server process -# MaxRequestsPerChild .. maximum number of connections per server process (then it dies) - -NumServers 5 -StartThreads 5 -MinSpareThreads 5 -MaxSpareThreads 10 -MaxThreadsPerChild 20 -MaxRequestsPerChild 0 -AcceptMutex fcntl - - -User www-data -Group www-data - -# The following directives define some format nicknames for use with -# a CustomLog directive (see below). -LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined -LogFormat "%h %l %u %t \"%r\" %>s %b" common -LogFormat "%{Referer}i -> %U" referer -LogFormat "%{User-agent}i" agent - - -# Global error log. -ErrorLog /var/log/apache2/error.log - -# Include module configuration: -Include /etc/apache2/mods-enabled/*.load -Include /etc/apache2/mods-enabled/*.conf - -# Include all the user configurations: -Include /etc/apache2/httpd.conf - -# Include ports listing -Include /etc/apache2/ports.conf - -# Include generic snippets of statements -Include /etc/apache2/conf.d/[^.#]* - -#Let's have some Icons, shall we? -Alias /icons/ "/usr/share/apache2/icons/" - - Options Indexes MultiViews - AllowOverride None - Order allow,deny - Allow from all - - -# Set up the default error docs. -# -# Customizable error responses come in three flavors: -# 1) plain text 2) local redirects 3) external redirects -# -# Some examples: -#ErrorDocument 500 "The server made a boo boo." -#ErrorDocument 404 /missing.html -#ErrorDocument 404 "/cgi-bin/missing_handler.pl" -#ErrorDocument 402 http://www.example.com/subscription_info.html -# - -# -# Putting this all together, we can Internationalize error responses. -# -# We use Alias to redirect any /error/HTTP_.html.var response to -# our collection of by-error message multi-language collections. We use -# includes to substitute the appropriate text. -# -# You can modify the messages' appearance without changing any of the -# default HTTP_.html.var files by adding the line; -# -# Alias /error/include/ "/your/include/path/" -# -# which allows you to create your own set of files by starting with the -# /usr/local/apache2/error/include/ files and -# copying them to /your/include/path/, even on a per-VirtualHost basis. -# - - - - Alias /error/ "/usr/share/apache2/error/" - - - AllowOverride None - Options IncludesNoExec - AddOutputFilter Includes html - AddHandler type-map var - Order allow,deny - Allow from all - LanguagePriority en es de fr - ForceLanguagePriority Prefer Fallback - - - ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var - ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var - ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var - ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var - ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var - ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var - ErrorDocument 410 /error/HTTP_GONE.html.var - ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var - ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var - ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var - ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var - ErrorDocument 415 /error/HTTP_SERVICE_UNAVAILABLE.html.var - ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var - ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var - ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var - ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var - ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var - - - - -DirectoryIndex index.html index.cgi index.pl index.php index.xhtml - -# UserDir is now a module -#UserDir public_html -#UserDir disabled root - -# -# AllowOverride FileInfo AuthConfig Limit -# Options Indexes SymLinksIfOwnerMatch IncludesNoExec -# - -AccessFileName .htaccess - - - Order allow,deny - Deny from all - - -UseCanonicalName Off - -TypesConfig /etc/mime.types -DefaultType text/plain - -HostnameLookups Off - -IndexOptions FancyIndexing VersionSort - -AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip - -AddIconByType (TXT,/icons/text.gif) text/* -AddIconByType (IMG,/icons/image2.gif) image/* -AddIconByType (SND,/icons/sound2.gif) audio/* -AddIconByType (VID,/icons/movie.gif) video/* - -# This really should be .jpg. - -AddIcon /icons/binary.gif .bin .exe -AddIcon /icons/binhex.gif .hqx -AddIcon /icons/tar.gif .tar -AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv -AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip -AddIcon /icons/a.gif .ps .ai .eps -AddIcon /icons/layout.gif .html .shtml .htm .pdf -AddIcon /icons/text.gif .txt -AddIcon /icons/c.gif .c -AddIcon /icons/p.gif .pl .py -AddIcon /icons/f.gif .for -AddIcon /icons/dvi.gif .dvi -AddIcon /icons/uuencoded.gif .uu -AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl -AddIcon /icons/tex.gif .tex -AddIcon /icons/bomb.gif core - -AddIcon /icons/back.gif .. -AddIcon /icons/hand.right.gif README -AddIcon /icons/folder.gif ^^DIRECTORY^^ -AddIcon /icons/blank.gif ^^BLANKICON^^ - - -# This is from Matty J's patch. Anyone want to make the icons? -#AddIcon /icons/dirsymlink.jpg ^^SYMDIR^^ -#AddIcon /icons/symlink.jpg ^^SYMLINK^^ - -DefaultIcon /icons/unknown.gif - -ReadmeName README.html -HeaderName HEADER.html - -IndexIgnore .??* *~ *# HEADER* RCS CVS *,t - -AddEncoding x-compress Z -AddEncoding x-gzip gz tgz - -AddLanguage da .dk -AddLanguage nl .nl -AddLanguage en .en -AddLanguage et .et -AddLanguage fr .fr -AddLanguage de .de -AddLanguage el .el -AddLanguage it .it -AddLanguage ja .ja -AddLanguage pl .po -AddLanguage ko .ko -AddLanguage pt .pt -AddLanguage no .no -AddLanguage pt-br .pt-br -AddLanguage ltz .ltz -AddLanguage ca .ca -AddLanguage es .es -AddLanguage sv .se -AddLanguage cz .cz -AddLanguage ru .ru -AddLanguage tw .tw -AddLanguage zh-tw .tw - -LanguagePriority en da nl et fr de el it ja ko no pl pt pt-br ltz ca es sv tw - - -#AddDefaultCharset ISO-8859-1 - -AddCharset ISO-8859-1 .iso8859-1 .latin1 -AddCharset ISO-8859-2 .iso8859-2 .latin2 .cen -AddCharset ISO-8859-3 .iso8859-3 .latin3 -AddCharset ISO-8859-4 .iso8859-4 .latin4 -AddCharset ISO-8859-5 .iso8859-5 .latin5 .cyr .iso-ru -AddCharset ISO-8859-6 .iso8859-6 .latin6 .arb -AddCharset ISO-8859-7 .iso8859-7 .latin7 .grk -AddCharset ISO-8859-8 .iso8859-8 .latin8 .heb -AddCharset ISO-8859-9 .iso8859-9 .latin9 .trk -AddCharset ISO-2022-JP .iso2022-jp .jis -AddCharset ISO-2022-KR .iso2022-kr .kis -AddCharset ISO-2022-CN .iso2022-cn .cis -AddCharset Big5 .Big5 .big5 -# For russian, more than one charset is used (depends on client, mostly): -AddCharset WINDOWS-1251 .cp-1251 .win-1251 -AddCharset CP866 .cp866 -AddCharset KOI8-r .koi8-r .koi8-ru -AddCharset KOI8-ru .koi8-uk .ua -AddCharset ISO-10646-UCS-2 .ucs2 -AddCharset ISO-10646-UCS-4 .ucs4 -AddCharset UTF-8 .utf8 - -AddCharset GB2312 .gb2312 .gb -AddCharset utf-7 .utf7 -AddCharset utf-8 .utf8 -AddCharset big5 .big5 .b5 -AddCharset EUC-TW .euc-tw -AddCharset EUC-JP .euc-jp -AddCharset EUC-KR .euc-kr -AddCharset shift_jis .sjis - -#AddType application/x-httpd-php .php -#AddType application/x-httpd-php-source .phps - -AddType application/x-tar .tgz - -# To use CGI scripts outside /cgi-bin/: -# -#AddHandler cgi-script .cgi - -# To use server-parsed HTML files -# - - SetOutputFilter INCLUDES - - -# If you wish to use server-parsed imagemap files, use -# -#AddHandler imap-file map - -BrowserMatch "Mozilla/2" nokeepalive -BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0 -BrowserMatch "RealPlayer 4\.0" force-response-1.0 -BrowserMatch "Java/1\.0" force-response-1.0 -BrowserMatch "JDK/1\.0" force-response-1.0 - -# -# The following directive disables redirects on non-GET requests for -# a directory that does not include the trailing slash. This fixes a -# problem with Microsoft WebFolders which does not appropriately handle -# redirects for folders with DAV methods. -# - -BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully -BrowserMatch "^WebDrive" redirect-carefully -BrowserMatch "^gnome-vfs" redirect-carefully -BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully - -# Allow server status reports, with the URL of http://servername/server-status -# Change the ".your_domain.com" to match your domain to enable. -# -# -# SetHandler server-status -# Order deny,allow -# Deny from all -# Allow from .your_domain.com -# - -# Allow remote server configuration reports, with the URL of -# http://servername/server-info (requires that mod_info.c be loaded). -# Change the ".your_domain.com" to match your domain to enable. -# -# -# SetHandler server-info -# Order deny,allow -# Deny from all -# Allow from .your_domain.com -# - -# Include the virtual host configurations: -Include /etc/apache2/sites-enabled/[^.#]* diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/as3_test.as b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/as3_test.as deleted file mode 100644 index d6b0842..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/as3_test.as +++ /dev/null @@ -1,143 +0,0 @@ - import flash.events.MouseEvent; - import com.example.programmingas3.playlist.PlayList; - import com.example.programmingas3.playlist.Song; - import com.example.programmingas3.playlist.SortProperty; - - // constants for the different "states" of the song form - private static const ADD_SONG:uint = 1; - private static const SONG_DETAIL:uint = 2; - - private var playList:PlayList = new PlayList.(); - - private function initApp():void - { - // set the initial state of the song form, for adding a new song - setFormState(ADD_SONG); - - // prepopulate the list with a few songs - playList.addSong(new Song("Nessun Dorma", "Luciano Pavarotti", 1990, "nessundorma.mp3", ["90's", "Opera"])); - playList.addSong(new Song("Come Undone", "Duran Duran", 1993, "comeundone.mp3", ["90's", "Pop"])); - playList.addSong(new Song("Think of Me", "Sarah Brightman", 1987, "thinkofme.mp3", ["Showtunes"])); - playList.addSong(new Song("Unbelievable", "EMF", 1991, "unbelievable.mp3", ["90's", "Pop"])); - - songList.dataProvider = playList.songList; - } - - - private function sortList(sortField:SortProperty.):void - { - // Make all the sort type buttons enabled. - // The active one will be grayed-out below - sortByTitle.selected = false; - sortByArtist.selected = false; - sortByYear.selected = false; - - switch (sortField) - { - case SortProperty.TITLE: - sortByTitle.selected = true; - break; - case SortProperty.ARTIST: - sortByArtist.selected = true; - break; - case SortProperty.YEAR: - sortByYear.selected = true; - break; - } - - playList.sortList(sortField); - - refreshList(); - } - - - private function refreshList():void - { - // remember which song was selected - var selectedSong:Song = Song(songList.selectedItem); - - // re-assign the song list as the dataprovider to get the newly sorted list - // and force the List control to refresh itself - songList.dataProvider = playList.songList; - - // reset the song selection - if (selectedSong != null) - { - songList.selectedItem = selectedSong; - } - } - - - private function songSelectionChange():void - { - if (songList.selectedIndex != -1) - { - setFormState(SONG_DETAIL); - } - else - { - setFormState(ADD_SONG); - } - } - - - private function addNewSong():void - { - // gather the values from the form and add the new song - var title:String = newSongTitle.text; - var artist:String = newSongArtist.text; - var year:uint = newSongYear.value; - var filename:String = newSongFilename.text; - var genres:Array = newSongGenres.selectedItems; - - playList.addSong(new Song(title, artist, year, filename, genres)); - - refreshList(); - - // clear out the "add song" form fields - setFormState(ADD_SONG); - } - - - private function songListLabel(item:Object):String - { - return item.toString(); - } - - - private function setFormState(state:uint):void - { - // set the form title and control state - switch (state) - { - case ADD_SONG: - formTitle.text = "Add New Song"; - // show the submit button - submitSongData.visible = true; - showAddControlsBtn.visible = false; - // clear the form fields - newSongTitle.text = ""; - newSongArtist.text = ""; - newSongYear.value = (new Date()).fullYear; - newSongFilename.text = ""; - newSongGenres.selectedIndex = -1; - // deselect the currently selected song (if any) - songList.selectedIndex = -1; - break; - - case SONG_DETAIL: - formTitle.text = "Song Details"; - // populate the form with the selected item's data - var selectedSong:Song = Song(songList.selectedItem); - newSongTitle.text = selectedSong.title; - newSongArtist.text = selectedSong.artist; - newSongYear.value = selectedSong.year; - newSongFilename.text = selectedSong.filename; - newSongGenres.selectedItems = selectedSong.genres; - // hide the submit button - submitSongData.visible = false; - showAddControlsBtn.visible = true; - break; - } - } - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/as3_test2.as b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/as3_test2.as deleted file mode 100644 index 630ea72..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/as3_test2.as +++ /dev/null @@ -1,46 +0,0 @@ -package ru.dfls.events { - import flash.events.Event; - import flash.events.ErrorEvent; - - /** - * This event is usually dispatched if some error was thrown from an asynchronous code, i.e. there - * is no relevant user stack part to process the error. There is only one type of such event: - * ErrorEvent.ERROR which is same as flash.events.ErrorEvent.ERROR. - * The only difference between flash.events.ErrorEvent and - * ru.dfls.events.ErrorEvent is the capability of the latter to store the underlying cause - * (the Error). - * - * @see flash.events.ErrorEvent - * @see Error - * @author dragonfly - */ - public class ErrorEvent extends flash.events.ErrorEvent { - - public static var ERROR : String = flash.events.ErrorEvent.ERROR; - - private var _error : Error; - - public function ErrorEvent(type : String, bubbles : Boolean = false, cancelable : Boolean = false, - text : String = "", error : Error = null) { - super(type, bubbles, cancelable, text); - _error = error; - } - - public function get error() : Error { - return _error; - } - - public function set error(value : Error) : void { - _error = value; - } - - public override function toString() : String { - return formatToString("ErrorEvent", "type", "bubbles", "cancelable", "eventPhase", "text", "error"); - } - - public override function clone() : Event { - return new ru.dfls.events.ErrorEvent(type, bubbles, cancelable, text, error); - } - - } -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/as3_test3.as b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/as3_test3.as deleted file mode 100644 index b695486..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/as3_test3.as +++ /dev/null @@ -1,3 +0,0 @@ -protected function remote(method : String, ...args : Array) : Boolean { - return true; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/aspx-cs_example b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/aspx-cs_example deleted file mode 100644 index 01de00e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/aspx-cs_example +++ /dev/null @@ -1,27 +0,0 @@ -<%@ Page Language="C#" %> - - - - - - - - Sample page - - -
-
- The current time is: -
-
- - - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/autoit_submit.au3 b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/autoit_submit.au3 deleted file mode 100644 index e5054de..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/autoit_submit.au3 +++ /dev/null @@ -1,25 +0,0 @@ -#include -;http://msdn.microsoft.com/en-us/library/Aa752084.aspx -$ourl="http://localhost:5000/" - -$oIE = _IEAttach ($ourl,"url") -If @error = $_IEStatus_NoMatch Then - $oIE = _IECreate ($ourl & "sample.html") -endIf - -$oForm = _IEFormGetObjByName ($oIE, "form1") -;username, call DOM directly -$oIE.document.getElementById("username").value="helloAutoIT" -;state select -$oSelect = _IEFormElementGetObjByName ($oForm, "state") -_IEFormElementOptionSelect ($oSelect, "S2", 1, "byText") -;options raido -_IEFormElementRadioSelect($oForm, "2nd", "type", 1, "byValue") - -ConsoleWrite(@Error) -Sleep(10000) -_IEFormSubmit($oForm, 0) -_IELoadWait($oIE) -Sleep(60000) -_IEQuit($oIE) - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/badcase.java b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/badcase.java deleted file mode 100644 index dc9b2e7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/badcase.java +++ /dev/null @@ -1,2 +0,0 @@ -// this used to take ages -void foo() throws xxxxxxxxxxxxxxxxxxxxxx{ } diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/batchfile.bat b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/batchfile.bat deleted file mode 100644 index 5cdc625..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/batchfile.bat +++ /dev/null @@ -1,49 +0,0 @@ -rem this is a demo file. -@rem -@echo off - -call c:\temp.bat somearg -call :lab somearg -rem This next one is wrong in the vim lexer! -call c:temp.bat - -echo "Hi!" -echo hi -echo on -echo off -echo. -@echo off -if exist *.log echo The log file has arrived. -rem These are all escapes, also done incorrectly by the vim lexer -echo ^^ ^> ^< ^| - -x=beginning -setlocal -x = new text -endlocal - -echo testrem x -echo test rem x - -for %%var in (*.jpg) do echo %%var -for /D %%var in (a b c) do echo %%var -for /R C:\temp %%var in (*.jpg) do iexplore.exe %%var -rem Vim has this one wrong too. -for /L %%var in (10,-1,1) do echo %%var -for /F %%var in ("hi!") do echo %%var -for /F "eol=c,skip=1,usebackq" %%var in (`command`) do echo %%var %~l %~fl %~dl %~pl %~nl %~xl %~sl %~al %~tl %~zl %~$PATH:l %~dpl %~dp$PATH:l %~ftzal - -echo some file ?! > somefile.txt - -set PATH=%PATH%;c:\windows - -goto answer%errorlevel% - :answer0 - echo Hi it's zero - :answer1 - echo New - -if exist a del a -else echo A is missing! - - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/bigtest.nsi b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/bigtest.nsi deleted file mode 100644 index 62f5211..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/bigtest.nsi +++ /dev/null @@ -1,308 +0,0 @@ -; bigtest.nsi -; -; This script attempts to test most of the functionality of the NSIS exehead. - -;-------------------------------- - -!ifdef HAVE_UPX -!packhdr tmp.dat "upx\upx -9 tmp.dat" -!endif - -!ifdef NOCOMPRESS -SetCompress off -!endif - -;-------------------------------- - -Name "BigNSISTest" -Caption "NSIS Big Test" -Icon "${NSISDIR}\Contrib\Graphics\Icons\nsis1-install.ico" -OutFile "bigtest.exe" - -SetDateSave on -SetDatablockOptimize on -CRCCheck on -SilentInstall normal -BGGradient 000000 800000 FFFFFF -InstallColors FF8080 000030 -XPStyle on - -InstallDir "$PROGRAMFILES\NSISTest\BigNSISTest" -InstallDirRegKey HKLM "Software\NSISTest\BigNSISTest" "Install_Dir" - -CheckBitmap "${NSISDIR}\Contrib\Graphics\Checks\classic-cross.bmp" - -LicenseText "A test text, make sure it's all there" -LicenseData "bigtest.nsi" - -RequestExecutionLevel admin - -;-------------------------------- - -Page license -Page components -Page directory -Page instfiles - -UninstPage uninstConfirm -UninstPage instfiles - -;-------------------------------- - -!ifndef NOINSTTYPES ; only if not defined - InstType "Most" - InstType "Full" - InstType "More" - InstType "Base" - ;InstType /NOCUSTOM - ;InstType /COMPONENTSONLYONCUSTOM -!endif - -AutoCloseWindow false -ShowInstDetails show - -;-------------------------------- - -Section "" ; empty string makes it hidden, so would starting with - - - ; write reg info - StrCpy $1 "POOOOOOOOOOOP" - DetailPrint "I like to be able to see what is going on (debug) $1" - WriteRegStr HKLM SOFTWARE\NSISTest\BigNSISTest "Install_Dir" "$INSTDIR" - - ; write uninstall strings - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\BigNSISTest" "DisplayName" "BigNSISTest (remove only)" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\BigNSISTest" "UninstallString" '"$INSTDIR\bt-uninst.exe"' - - SetOutPath $INSTDIR - File /a "silent.nsi" - CreateDirectory "$INSTDIR\MyProjectFamily\MyProject" ; 2 recursively create a directory for fun. - WriteUninstaller "bt-uninst.exe" - - Nop ; for fun - -SectionEnd - -Section "TempTest" - -SectionIn 1 2 3 - Start: MessageBox MB_OK "Start:" - - MessageBox MB_YESNO "Goto MyLabel" IDYES MyLabel - - MessageBox MB_OK "Right before MyLabel:" - - MyLabel: MessageBox MB_OK "MyLabel:" - - MessageBox MB_OK "Right after MyLabel:" - - MessageBox MB_YESNO "Goto Start:?" IDYES Start - -SectionEnd - -SectionGroup /e SectionGroup1 - -Section "Test Registry/INI functions" - -SectionIn 1 4 3 - - WriteRegStr HKLM SOFTWARE\NSISTest\BigNSISTest "StrTest_INSTDIR" "$INSTDIR" - WriteRegDword HKLM SOFTWARE\NSISTest\BigNSISTest "DwordTest_0xDEADBEEF" 0xdeadbeef - WriteRegDword HKLM SOFTWARE\NSISTest\BigNSISTest "DwordTest_123456" 123456 - WriteRegDword HKLM SOFTWARE\NSISTest\BigNSISTest "DwordTest_0123" 0123 - WriteRegBin HKLM SOFTWARE\NSISTest\BigNSISTest "BinTest_deadbeef01f00dbeef" "DEADBEEF01F00DBEEF" - StrCpy $8 "$SYSDIR\IniTest" - WriteINIStr "$INSTDIR\test.ini" "MySection" "Value1" $8 - WriteINIStr "$INSTDIR\test.ini" "MySectionIni" "Value1" $8 - WriteINIStr "$INSTDIR\test.ini" "MySectionIni" "Value2" $8 - WriteINIStr "$INSTDIR\test.ini" "IniOn" "Value1" $8 - - Call MyFunctionTest - - DeleteINIStr "$INSTDIR\test.ini" "IniOn" "Value1" - DeleteINISec "$INSTDIR\test.ini" "MySectionIni" - - ReadINIStr $1 "$INSTDIR\test.ini" "MySectionIni" "Value1" - StrCmp $1 "" INIDelSuccess - MessageBox MB_OK "DeleteINISec failed" - INIDelSuccess: - - ClearErrors - ReadRegStr $1 HKCR "software\microsoft" xyz_cc_does_not_exist - IfErrors 0 NoError - MessageBox MB_OK "could not read from HKCR\software\microsoft\xyz_cc_does_not_exist" - Goto ErrorYay - NoError: - MessageBox MB_OK "read '$1' from HKCR\software\microsoft\xyz_cc_does_not_exist" - ErrorYay: - -SectionEnd - -Section "Test CreateShortCut" - - SectionIn 1 2 3 - - Call CSCTest - -SectionEnd - -SectionGroup Group2 - -Section "Test Branching" - - BeginTestSection: - SectionIn 1 2 3 - - SetOutPath $INSTDIR - - IfFileExists "$INSTDIR\LogicLib.nsi" 0 BranchTest69 - - MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to overwrite $INSTDIR\LogicLib.nsi?" IDNO NoOverwrite ; skipped if file doesn't exist - - BranchTest69: - - SetOverwrite ifnewer ; NOT AN INSTRUCTION, NOT COUNTED IN SKIPPINGS - - NoOverwrite: - - File "LogicLib.nsi" ; skipped if answered no - SetOverwrite try ; NOT AN INSTRUCTION, NOT COUNTED IN SKIPPINGS - - MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to skip the rest of this section?" IDYES EndTestBranch - MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to go back to the beginning of this section?" IDYES BeginTestSection - MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to hide the installer and wait five seconds?" IDNO NoHide - - HideWindow - Sleep 5000 - BringToFront - - NoHide: - - MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to call the function 5 times?" IDNO NoRecurse - - StrCpy $1 "x" - - LoopTest: - - Call myfunc - StrCpy $1 "x$1" - StrCmp $1 "xxxxxx" 0 LoopTest - - NoRecurse: - - EndTestBranch: - -SectionEnd - -SectionGroupEnd - -Section "Test CopyFiles" - - SectionIn 1 2 3 - - SetOutPath $INSTDIR\cpdest - CopyFiles "$WINDIR\*.ini" "$INSTDIR\cpdest" 0 - -SectionEnd - -SectionGroupEnd - -Section "Test Exec functions" TESTIDX - - SectionIn 1 2 3 - - SearchPath $1 notepad.exe - - MessageBox MB_OK "notepad.exe=$1" - Exec '"$1"' - ExecShell "open" '"$INSTDIR"' - Sleep 500 - BringToFront - -SectionEnd - -Section "Test ActiveX control registration" - - SectionIn 2 - - UnRegDLL "$SYSDIR\spin32.ocx" - Sleep 1000 - RegDLL "$SYSDIR\spin32.ocx" - Sleep 1000 - -SectionEnd - -;-------------------------------- - -Function "CSCTest" - - CreateDirectory "$SMPROGRAMS\Big NSIS Test" - SetOutPath $INSTDIR ; for working directory - CreateShortCut "$SMPROGRAMS\Big NSIS Test\Uninstall BIG NSIS Test.lnk" "$INSTDIR\bt-uninst.exe" ; use defaults for parameters, icon, etc. - ; this one will use notepad's icon, start it minimized, and give it a hotkey (of Ctrl+Shift+Q) - CreateShortCut "$SMPROGRAMS\Big NSIS Test\silent.nsi.lnk" "$INSTDIR\silent.nsi" "" "$WINDIR\notepad.exe" 0 SW_SHOWMINIMIZED CONTROL|SHIFT|Q - CreateShortCut "$SMPROGRAMS\Big NSIS Test\TheDir.lnk" "$INSTDIR\" "" "" 0 SW_SHOWMAXIMIZED CONTROL|SHIFT|Z - -FunctionEnd - -Function myfunc - - StrCpy $2 "MyTestVar=$1" - MessageBox MB_OK "myfunc: $2" - -FunctionEnd - -Function MyFunctionTest - - ReadINIStr $1 "$INSTDIR\test.ini" "MySectionIni" "Value1" - StrCmp $1 $8 NoFailedMsg - MessageBox MB_OK "WriteINIStr failed" - - NoFailedMsg: - -FunctionEnd - -Function .onSelChange - - SectionGetText ${TESTIDX} $0 - StrCmp $0 "" e - SectionSetText ${TESTIDX} "" - Goto e2 -e: - SectionSetText ${TESTIDX} "TextInSection" -e2: - -FunctionEnd - -;-------------------------------- - -; Uninstaller - -UninstallText "This will uninstall example2. Hit next to continue." -UninstallIcon "${NSISDIR}\Contrib\Graphics\Icons\nsis1-uninstall.ico" - -Section "Uninstall" - - DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\BigNSISTest" - DeleteRegKey HKLM "SOFTWARE\NSISTest\BigNSISTest" - Delete "$INSTDIR\silent.nsi" - Delete "$INSTDIR\LogicLib.nsi" - Delete "$INSTDIR\bt-uninst.exe" - Delete "$INSTDIR\test.ini" - Delete "$SMPROGRAMS\Big NSIS Test\*.*" - RMDir "$SMPROGRAMS\BiG NSIS Test" - - MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to remove the directory $INSTDIR\cpdest?" IDNO NoDelete - Delete "$INSTDIR\cpdest\*.*" - RMDir "$INSTDIR\cpdest" ; skipped if no - NoDelete: - - RMDir "$INSTDIR\MyProjectFamily\MyProject" - RMDir "$INSTDIR\MyProjectFamily" - RMDir "$INSTDIR" - - IfFileExists "$INSTDIR" 0 NoErrorMsg - MessageBox MB_OK "Note: $INSTDIR could not be removed!" IDOK 0 ; skipped if file doesn't exist - NoErrorMsg: - -SectionEnd diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/boot-9.scm b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/boot-9.scm deleted file mode 100644 index 1f6ae24..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/boot-9.scm +++ /dev/null @@ -1,1557 +0,0 @@ -;;; installed-scm-file - -;;;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. -;;;; -;;;; This program is free software; you can redistribute it and/or modify -;;;; it under the terms of the GNU General Public License as published by -;;;; the Free Software Foundation; either version 2, or (at your option) -;;;; any later version. -;;;; -;;;; This program is distributed in the hope that it will be useful, -;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;;; GNU General Public License for more details. -;;;; -;;;; You should have received a copy of the GNU General Public License -;;;; along with this software; see the file COPYING. If not, write to -;;;; the Free Software Foundation, Inc., 59 Temple Place, Suite 330, -;;;; Boston, MA 02111-1307 USA -;;;; -;;;; As a special exception, the Free Software Foundation gives permission -;;;; for additional uses of the text contained in its release of GUILE. -;;;; -;;;; The exception is that, if you link the GUILE library with other files -;;;; to produce an executable, this does not by itself cause the -;;;; resulting executable to be covered by the GNU General Public License. -;;;; Your use of that executable is in no way restricted on account of -;;;; linking the GUILE library code into it. -;;;; -;;;; This exception does not however invalidate any other reasons why -;;;; the executable file might be covered by the GNU General Public License. -;;;; -;;;; This exception applies only to the code released by the -;;;; Free Software Foundation under the name GUILE. If you copy -;;;; code from other Free Software Foundation releases into a copy of -;;;; GUILE, as the General Public License permits, the exception does -;;;; not apply to the code that you add in this way. To avoid misleading -;;;; anyone as to the status of such modified files, you must delete -;;;; this exception notice from them. -;;;; -;;;; If you write modifications of your own for GUILE, it is your choice -;;;; whether to permit this exception to apply to your modifications. -;;;; If you do not wish that, delete this exception notice. -;;;; - - -;;; Commentary: - -;;; This file is the first thing loaded into Guile. It adds many mundane -;;; definitions and a few that are interesting. -;;; -;;; The module system (hence the hierarchical namespace) are defined in this -;;; file. -;;; - -;;; Code: - - -;;; {Deprecation} -;;; - -;; We don't have macros here, but we do want to define -;; `begin-deprecated' early. - -(define begin-deprecated - (procedure->memoizing-macro - (lambda (exp env) - (if (include-deprecated-features) - `(begin ,@(cdr exp)) - `#f)))) - - -;;; {Features} -;; - -(define (provide sym) - (if (not (memq sym *features*)) - (set! *features* (cons sym *features*)))) - -;;; Return #t iff FEATURE is available to this Guile interpreter. -;;; In SLIB, provided? also checks to see if the module is available. -;;; We should do that too, but don't. -(define (provided? feature) - (and (memq feature *features*) #t)) - -(begin-deprecated - (define (feature? sym) - (issue-deprecation-warning - "`feature?' is deprecated. Use `provided?' instead.") - (provided? sym))) - -;;; let format alias simple-format until the more complete version is loaded -(define format simple-format) - - -;;; {R4RS compliance} - -(primitive-load-path "ice-9/r4rs.scm") - - -;;; {Simple Debugging Tools} -;; - - -;; peek takes any number of arguments, writes them to the -;; current ouput port, and returns the last argument. -;; It is handy to wrap around an expression to look at -;; a value each time is evaluated, e.g.: -;; -;; (+ 10 (troublesome-fn)) -;; => (+ 10 (pk 'troublesome-fn-returned (troublesome-fn))) -;; - -(define (peek . stuff) - (newline) - (display ";;; ") - (write stuff) - (newline) - (car (last-pair stuff))) - -(define pk peek) - -(define (warn . stuff) - (with-output-to-port (current-error-port) - (lambda () - (newline) - (display ";;; WARNING ") - (display stuff) - (newline) - (car (last-pair stuff))))) - - -;;; {Trivial Functions} -;;; - -(define (identity x) x) -(define (1+ n) (+ n 1)) -(define (1- n) (+ n -1)) -(define (and=> value procedure) (and value (procedure value))) -(define (make-hash-table k) (make-vector k '())) - -(begin-deprecated - (define (id x) - (issue-deprecation-warning "`id' is deprecated. Use `identity' instead.") - (identity x)) - (define (-1+ n) - (issue-deprecation-warning "`-1+' is deprecated. Use `1-' instead.") - (1- n)) - (define (return-it . args) - (issue-deprecation-warning "`return-it' is deprecated. Use `noop' instead.") - (apply noop args))) - -;;; apply-to-args is functionally redundant with apply and, worse, -;;; is less general than apply since it only takes two arguments. -;;; -;;; On the other hand, apply-to-args is a syntacticly convenient way to -;;; perform binding in many circumstances when the "let" family of -;;; of forms don't cut it. E.g.: -;;; -;;; (apply-to-args (return-3d-mouse-coords) -;;; (lambda (x y z) -;;; ...)) -;;; - -(define (apply-to-args args fn) (apply fn args)) - - - -;;; {Integer Math} -;;; - -(define (ipow-by-squaring x k acc proc) - (cond ((zero? k) acc) - ((= 1 k) (proc acc x)) - (else (ipow-by-squaring (proc x x) - (quotient k 2) - (if (even? k) acc (proc acc x)) - proc)))) - -(begin-deprecated - (define (string-character-length s) - (issue-deprecation-warning "`string-character-length' is deprecated. Use `string-length' instead.") - (string-length s)) - (define (flags . args) - (issue-deprecation-warning "`flags' is deprecated. Use `logior' instead.") - (apply logior args))) - - -;;; {Symbol Properties} -;;; - -(define (symbol-property sym prop) - (let ((pair (assoc prop (symbol-pref sym)))) - (and pair (cdr pair)))) - -(define (set-symbol-property! sym prop val) - (let ((pair (assoc prop (symbol-pref sym)))) - (if pair - (set-cdr! pair val) - (symbol-pset! sym (acons prop val (symbol-pref sym)))))) - -(define (symbol-property-remove! sym prop) - (let ((pair (assoc prop (symbol-pref sym)))) - (if pair - (symbol-pset! sym (delq! pair (symbol-pref sym)))))) - -;;; {General Properties} -;;; - -;; This is a more modern interface to properties. It will replace all -;; other property-like things eventually. - -(define (make-object-property) - (let ((prop (primitive-make-property #f))) - (make-procedure-with-setter - (lambda (obj) (primitive-property-ref prop obj)) - (lambda (obj val) (primitive-property-set! prop obj val))))) - - - -;;; {Arrays} -;;; - -(if (provided? 'array) - (primitive-load-path "ice-9/arrays.scm")) - - -;;; {Keywords} -;;; - -(define (symbol->keyword symbol) - (make-keyword-from-dash-symbol (symbol-append '- symbol))) - -(define (keyword->symbol kw) - (let ((sym (symbol->string (keyword-dash-symbol kw)))) - (string->symbol (substring sym 1 (string-length sym))))) - -(define (kw-arg-ref args kw) - (let ((rem (member kw args))) - (and rem (pair? (cdr rem)) (cadr rem)))) - - - -;;; {Structs} - -(define (struct-layout s) - (struct-ref (struct-vtable s) vtable-index-layout)) - - - -;;; Environments - -(define the-environment - (procedure->syntax - (lambda (x e) - e))) - -(define the-root-environment (the-environment)) - -(define (environment-module env) - (let ((closure (and (pair? env) (car (last-pair env))))) - (and closure (procedure-property closure 'module)))) - - -;;; {Records} -;;; - -;; Printing records: by default, records are printed as -;; -;; # -;; -;; You can change that by giving a custom printing function to -;; MAKE-RECORD-TYPE (after the list of field symbols). This function -;; will be called like -;; -;; ( object port) -;; -;; It should print OBJECT to PORT. - -(define (inherit-print-state old-port new-port) - (if (get-print-state old-port) - (port-with-print-state new-port (get-print-state old-port)) - new-port)) - -;; 0: type-name, 1: fields -(define record-type-vtable - (make-vtable-vtable "prpr" 0 - (lambda (s p) - (cond ((eq? s record-type-vtable) - (display "#" p)) - (else - (display "#" p)))))) - -(define (record-type? obj) - (and (struct? obj) (eq? record-type-vtable (struct-vtable obj)))) - -(define (make-record-type type-name fields . opt) - (let ((printer-fn (and (pair? opt) (car opt)))) - (let ((struct (make-struct record-type-vtable 0 - (make-struct-layout - (apply string-append - (map (lambda (f) "pw") fields))) - (or printer-fn - (lambda (s p) - (display "#<" p) - (display type-name p) - (let loop ((fields fields) - (off 0)) - (cond - ((not (null? fields)) - (display " " p) - (display (car fields) p) - (display ": " p) - (display (struct-ref s off) p) - (loop (cdr fields) (+ 1 off))))) - (display ">" p))) - type-name - (copy-tree fields)))) - ;; Temporary solution: Associate a name to the record type descriptor - ;; so that the object system can create a wrapper class for it. - (set-struct-vtable-name! struct (if (symbol? type-name) - type-name - (string->symbol type-name))) - struct))) - -(define (record-type-name obj) - (if (record-type? obj) - (struct-ref obj vtable-offset-user) - (error 'not-a-record-type obj))) - -(define (record-type-fields obj) - (if (record-type? obj) - (struct-ref obj (+ 1 vtable-offset-user)) - (error 'not-a-record-type obj))) - -(define (record-constructor rtd . opt) - (let ((field-names (if (pair? opt) (car opt) (record-type-fields rtd)))) - (local-eval `(lambda ,field-names - (make-struct ',rtd 0 ,@(map (lambda (f) - (if (memq f field-names) - f - #f)) - (record-type-fields rtd)))) - the-root-environment))) - -(define (record-predicate rtd) - (lambda (obj) (and (struct? obj) (eq? rtd (struct-vtable obj))))) - -(define (record-accessor rtd field-name) - (let* ((pos (list-index (record-type-fields rtd) field-name))) - (if (not pos) - (error 'no-such-field field-name)) - (local-eval `(lambda (obj) - (and (eq? ',rtd (record-type-descriptor obj)) - (struct-ref obj ,pos))) - the-root-environment))) - -(define (record-modifier rtd field-name) - (let* ((pos (list-index (record-type-fields rtd) field-name))) - (if (not pos) - (error 'no-such-field field-name)) - (local-eval `(lambda (obj val) - (and (eq? ',rtd (record-type-descriptor obj)) - (struct-set! obj ,pos val))) - the-root-environment))) - - -(define (record? obj) - (and (struct? obj) (record-type? (struct-vtable obj)))) - -(define (record-type-descriptor obj) - (if (struct? obj) - (struct-vtable obj) - (error 'not-a-record obj))) - -(provide 'record) - - -;;; {Booleans} -;;; - -(define (->bool x) (not (not x))) - - -;;; {Symbols} -;;; - -(define (symbol-append . args) - (string->symbol (apply string-append (map symbol->string args)))) - -(define (list->symbol . args) - (string->symbol (apply list->string args))) - -(define (symbol . args) - (string->symbol (apply string args))) - - -;;; {Lists} -;;; - -(define (list-index l k) - (let loop ((n 0) - (l l)) - (and (not (null? l)) - (if (eq? (car l) k) - n - (loop (+ n 1) (cdr l)))))) - -(define (make-list n . init) - (if (pair? init) (set! init (car init))) - (let loop ((answer '()) - (n n)) - (if (<= n 0) - answer - (loop (cons init answer) (- n 1))))) - - -;;; {and-map and or-map} -;;; -;;; (and-map fn lst) is like (and (fn (car lst)) (fn (cadr lst)) (fn...) ...) -;;; (or-map fn lst) is like (or (fn (car lst)) (fn (cadr lst)) (fn...) ...) -;;; - -;; and-map f l -;; -;; Apply f to successive elements of l until exhaustion or f returns #f. -;; If returning early, return #f. Otherwise, return the last value returned -;; by f. If f has never been called because l is empty, return #t. -;; -(define (and-map f lst) - (let loop ((result #t) - (l lst)) - (and result - (or (and (null? l) - result) - (loop (f (car l)) (cdr l)))))) - -;; or-map f l -;; -;; Apply f to successive elements of l until exhaustion or while f returns #f. -;; If returning early, return the return value of f. -;; -(define (or-map f lst) - (let loop ((result #f) - (l lst)) - (or result - (and (not (null? l)) - (loop (f (car l)) (cdr l)))))) - - - -(if (provided? 'posix) - (primitive-load-path "ice-9/posix.scm")) - -(if (provided? 'socket) - (primitive-load-path "ice-9/networking.scm")) - -(define file-exists? - (if (provided? 'posix) - (lambda (str) - (->bool (false-if-exception (stat str)))) - (lambda (str) - (let ((port (catch 'system-error (lambda () (open-file str OPEN_READ)) - (lambda args #f)))) - (if port (begin (close-port port) #t) - #f))))) - -(define file-is-directory? - (if (provided? 'posix) - (lambda (str) - (eq? (stat:type (stat str)) 'directory)) - (lambda (str) - (let ((port (catch 'system-error - (lambda () (open-file (string-append str "/.") - OPEN_READ)) - (lambda args #f)))) - (if port (begin (close-port port) #t) - #f))))) - -(define (has-suffix? str suffix) - (let ((sufl (string-length suffix)) - (sl (string-length str))) - (and (> sl sufl) - (string=? (substring str (- sl sufl) sl) suffix)))) - -(define (system-error-errno args) - (if (eq? (car args) 'system-error) - (car (list-ref args 4)) - #f)) - - -;;; {Error Handling} -;;; - -(define (error . args) - (save-stack) - (if (null? args) - (scm-error 'misc-error #f "?" #f #f) - (let loop ((msg "~A") - (rest (cdr args))) - (if (not (null? rest)) - (loop (string-append msg " ~S") - (cdr rest)) - (scm-error 'misc-error #f msg args #f))))) - -;; bad-throw is the hook that is called upon a throw to a an unhandled -;; key (unless the throw has four arguments, in which case -;; it's usually interpreted as an error throw.) -;; If the key has a default handler (a throw-handler-default property), -;; it is applied to the throw. -;; -(define (bad-throw key . args) - (let ((default (symbol-property key 'throw-handler-default))) - (or (and default (apply default key args)) - (apply error "unhandled-exception:" key args)))) - - - -(define (tm:sec obj) (vector-ref obj 0)) -(define (tm:min obj) (vector-ref obj 1)) -(define (tm:hour obj) (vector-ref obj 2)) -(define (tm:mday obj) (vector-ref obj 3)) -(define (tm:mon obj) (vector-ref obj 4)) -(define (tm:year obj) (vector-ref obj 5)) -(define (tm:wday obj) (vector-ref obj 6)) -(define (tm:yday obj) (vector-ref obj 7)) -(define (tm:isdst obj) (vector-ref obj 8)) -(define (tm:gmtoff obj) (vector-ref obj 9)) -(define (tm:zone obj) (vector-ref obj 10)) - -(define (set-tm:sec obj val) (vector-set! obj 0 val)) -(define (set-tm:min obj val) (vector-set! obj 1 val)) -(define (set-tm:hour obj val) (vector-set! obj 2 val)) -(define (set-tm:mday obj val) (vector-set! obj 3 val)) -(define (set-tm:mon obj val) (vector-set! obj 4 val)) -(define (set-tm:year obj val) (vector-set! obj 5 val)) -(define (set-tm:wday obj val) (vector-set! obj 6 val)) -(define (set-tm:yday obj val) (vector-set! obj 7 val)) -(define (set-tm:isdst obj val) (vector-set! obj 8 val)) -(define (set-tm:gmtoff obj val) (vector-set! obj 9 val)) -(define (set-tm:zone obj val) (vector-set! obj 10 val)) - -(define (tms:clock obj) (vector-ref obj 0)) -(define (tms:utime obj) (vector-ref obj 1)) -(define (tms:stime obj) (vector-ref obj 2)) -(define (tms:cutime obj) (vector-ref obj 3)) -(define (tms:cstime obj) (vector-ref obj 4)) - -(define file-position ftell) -(define (file-set-position port offset . whence) - (let ((whence (if (eq? whence '()) SEEK_SET (car whence)))) - (seek port offset whence))) - -(define (move->fdes fd/port fd) - (cond ((integer? fd/port) - (dup->fdes fd/port fd) - (close fd/port) - fd) - (else - (primitive-move->fdes fd/port fd) - (set-port-revealed! fd/port 1) - fd/port))) - -(define (release-port-handle port) - (let ((revealed (port-revealed port))) - (if (> revealed 0) - (set-port-revealed! port (- revealed 1))))) - -(define (dup->port port/fd mode . maybe-fd) - (let ((port (fdopen (apply dup->fdes port/fd maybe-fd) - mode))) - (if (pair? maybe-fd) - (set-port-revealed! port 1)) - port)) - -(define (dup->inport port/fd . maybe-fd) - (apply dup->port port/fd "r" maybe-fd)) - -(define (dup->outport port/fd . maybe-fd) - (apply dup->port port/fd "w" maybe-fd)) - -(define (dup port/fd . maybe-fd) - (if (integer? port/fd) - (apply dup->fdes port/fd maybe-fd) - (apply dup->port port/fd (port-mode port/fd) maybe-fd))) - -(define (duplicate-port port modes) - (dup->port port modes)) - -(define (fdes->inport fdes) - (let loop ((rest-ports (fdes->ports fdes))) - (cond ((null? rest-ports) - (let ((result (fdopen fdes "r"))) - (set-port-revealed! result 1) - result)) - ((input-port? (car rest-ports)) - (set-port-revealed! (car rest-ports) - (+ (port-revealed (car rest-ports)) 1)) - (car rest-ports)) - (else - (loop (cdr rest-ports)))))) - -(define (fdes->outport fdes) - (let loop ((rest-ports (fdes->ports fdes))) - (cond ((null? rest-ports) - (let ((result (fdopen fdes "w"))) - (set-port-revealed! result 1) - result)) - ((output-port? (car rest-ports)) - (set-port-revealed! (car rest-ports) - (+ (port-revealed (car rest-ports)) 1)) - (car rest-ports)) - (else - (loop (cdr rest-ports)))))) - -(define (port->fdes port) - (set-port-revealed! port (+ (port-revealed port) 1)) - (fileno port)) - -(define (setenv name value) - (if value - (putenv (string-append name "=" value)) - (putenv name))) - - -;;; {Load Paths} -;;; - -;;; Here for backward compatability -;; -(define scheme-file-suffix (lambda () ".scm")) - -(define (in-vicinity vicinity file) - (let ((tail (let ((len (string-length vicinity))) - (if (zero? len) - #f - (string-ref vicinity (- len 1)))))) - (string-append vicinity - (if (or (not tail) - (eq? tail #\/)) - "" - "/") - file))) - - -;;; {Help for scm_shell} -;;; The argument-processing code used by Guile-based shells generates -;;; Scheme code based on the argument list. This page contains help -;;; functions for the code it generates. - -(define (command-line) (program-arguments)) - -;; This is mostly for the internal use of the code generated by -;; scm_compile_shell_switches. -(define (load-user-init) - (let* ((home (or (getenv "HOME") - (false-if-exception (passwd:dir (getpwuid (getuid)))) - "/")) ;; fallback for cygwin etc. - (init-file (in-vicinity home ".guile"))) - (if (file-exists? init-file) - (primitive-load init-file)))) - - -;;; {Loading by paths} - -;;; Load a Scheme source file named NAME, searching for it in the -;;; directories listed in %load-path, and applying each of the file -;;; name extensions listed in %load-extensions. -(define (load-from-path name) - (start-stack 'load-stack - (primitive-load-path name))) - - - -;;; {Transcendental Functions} -;;; -;;; Derived from "Transcen.scm", Complex trancendental functions for SCM. -;;; Written by Jerry D. Hedden, (C) FSF. -;;; See the file `COPYING' for terms applying to this program. -;;; - -(define (exp z) - (if (real? z) ($exp z) - (make-polar ($exp (real-part z)) (imag-part z)))) - -(define (log z) - (if (and (real? z) (>= z 0)) - ($log z) - (make-rectangular ($log (magnitude z)) (angle z)))) - -(define (sqrt z) - (if (real? z) - (if (negative? z) (make-rectangular 0 ($sqrt (- z))) - ($sqrt z)) - (make-polar ($sqrt (magnitude z)) (/ (angle z) 2)))) - -(define expt - (let ((integer-expt integer-expt)) - (lambda (z1 z2) - (cond ((integer? z2) - (if (negative? z2) - (/ 1 (integer-expt z1 (- z2))) - (integer-expt z1 z2))) - ((and (real? z2) (real? z1) (>= z1 0)) - ($expt z1 z2)) - (else - (exp (* z2 (log z1)))))))) - -(define (sinh z) - (if (real? z) ($sinh z) - (let ((x (real-part z)) (y (imag-part z))) - (make-rectangular (* ($sinh x) ($cos y)) - (* ($cosh x) ($sin y)))))) -(define (cosh z) - (if (real? z) ($cosh z) - (let ((x (real-part z)) (y (imag-part z))) - (make-rectangular (* ($cosh x) ($cos y)) - (* ($sinh x) ($sin y)))))) -(define (tanh z) - (if (real? z) ($tanh z) - (let* ((x (* 2 (real-part z))) - (y (* 2 (imag-part z))) - (w (+ ($cosh x) ($cos y)))) - (make-rectangular (/ ($sinh x) w) (/ ($sin y) w))))) - -(define (asinh z) - (if (real? z) ($asinh z) - (log (+ z (sqrt (+ (* z z) 1)))))) - -(define (acosh z) - (if (and (real? z) (>= z 1)) - ($acosh z) - (log (+ z (sqrt (- (* z z) 1)))))) - -(define (atanh z) - (if (and (real? z) (> z -1) (< z 1)) - ($atanh z) - (/ (log (/ (+ 1 z) (- 1 z))) 2))) - -(define (sin z) - (if (real? z) ($sin z) - (let ((x (real-part z)) (y (imag-part z))) - (make-rectangular (* ($sin x) ($cosh y)) - (* ($cos x) ($sinh y)))))) -(define (cos z) - (if (real? z) ($cos z) - (let ((x (real-part z)) (y (imag-part z))) - (make-rectangular (* ($cos x) ($cosh y)) - (- (* ($sin x) ($sinh y))))))) -(define (tan z) - (if (real? z) ($tan z) - (let* ((x (* 2 (real-part z))) - (y (* 2 (imag-part z))) - (w (+ ($cos x) ($cosh y)))) - (make-rectangular (/ ($sin x) w) (/ ($sinh y) w))))) - -(define (asin z) - (if (and (real? z) (>= z -1) (<= z 1)) - ($asin z) - (* -i (asinh (* +i z))))) - -(define (acos z) - (if (and (real? z) (>= z -1) (<= z 1)) - ($acos z) - (+ (/ (angle -1) 2) (* +i (asinh (* +i z)))))) - -(define (atan z . y) - (if (null? y) - (if (real? z) ($atan z) - (/ (log (/ (- +i z) (+ +i z))) +2i)) - ($atan2 z (car y)))) - -(define (log10 arg) - (/ (log arg) (log 10))) - - - -;;; {Reader Extensions} -;;; - -;;; Reader code for various "#c" forms. -;;; - -(read-hash-extend #\' (lambda (c port) - (read port))) - -(define read-eval? (make-fluid)) -(fluid-set! read-eval? #f) -(read-hash-extend #\. - (lambda (c port) - (if (fluid-ref read-eval?) - (eval (read port) (interaction-environment)) - (error - "#. read expansion found and read-eval? is #f.")))) - - -;;; {Command Line Options} -;;; - -(define (get-option argv kw-opts kw-args return) - (cond - ((null? argv) - (return #f #f argv)) - - ((or (not (eq? #\- (string-ref (car argv) 0))) - (eq? (string-length (car argv)) 1)) - (return 'normal-arg (car argv) (cdr argv))) - - ((eq? #\- (string-ref (car argv) 1)) - (let* ((kw-arg-pos (or (string-index (car argv) #\=) - (string-length (car argv)))) - (kw (symbol->keyword (substring (car argv) 2 kw-arg-pos))) - (kw-opt? (member kw kw-opts)) - (kw-arg? (member kw kw-args)) - (arg (or (and (not (eq? kw-arg-pos (string-length (car argv)))) - (substring (car argv) - (+ kw-arg-pos 1) - (string-length (car argv)))) - (and kw-arg? - (begin (set! argv (cdr argv)) (car argv)))))) - (if (or kw-opt? kw-arg?) - (return kw arg (cdr argv)) - (return 'usage-error kw (cdr argv))))) - - (else - (let* ((char (substring (car argv) 1 2)) - (kw (symbol->keyword char))) - (cond - - ((member kw kw-opts) - (let* ((rest-car (substring (car argv) 2 (string-length (car argv)))) - (new-argv (if (= 0 (string-length rest-car)) - (cdr argv) - (cons (string-append "-" rest-car) (cdr argv))))) - (return kw #f new-argv))) - - ((member kw kw-args) - (let* ((rest-car (substring (car argv) 2 (string-length (car argv)))) - (arg (if (= 0 (string-length rest-car)) - (cadr argv) - rest-car)) - (new-argv (if (= 0 (string-length rest-car)) - (cddr argv) - (cdr argv)))) - (return kw arg new-argv))) - - (else (return 'usage-error kw argv))))))) - -(define (for-next-option proc argv kw-opts kw-args) - (let loop ((argv argv)) - (get-option argv kw-opts kw-args - (lambda (opt opt-arg argv) - (and opt (proc opt opt-arg argv loop)))))) - -(define (display-usage-report kw-desc) - (for-each - (lambda (kw) - (or (eq? (car kw) #t) - (eq? (car kw) 'else) - (let* ((opt-desc kw) - (help (cadr opt-desc)) - (opts (car opt-desc)) - (opts-proper (if (string? (car opts)) (cdr opts) opts)) - (arg-name (if (string? (car opts)) - (string-append "<" (car opts) ">") - "")) - (left-part (string-append - (with-output-to-string - (lambda () - (map (lambda (x) (display (keyword->symbol x)) (display " ")) - opts-proper))) - arg-name)) - (middle-part (if (and (< (string-length left-part) 30) - (< (string-length help) 40)) - (make-string (- 30 (string-length left-part)) #\ ) - "\n\t"))) - (display left-part) - (display middle-part) - (display help) - (newline)))) - kw-desc)) - - - -(define (transform-usage-lambda cases) - (let* ((raw-usage (delq! 'else (map car cases))) - (usage-sans-specials (map (lambda (x) - (or (and (not (list? x)) x) - (and (symbol? (car x)) #t) - (and (boolean? (car x)) #t) - x)) - raw-usage)) - (usage-desc (delq! #t usage-sans-specials)) - (kw-desc (map car usage-desc)) - (kw-opts (apply append (map (lambda (x) (and (not (string? (car x))) x)) kw-desc))) - (kw-args (apply append (map (lambda (x) (and (string? (car x)) (cdr x))) kw-desc))) - (transmogrified-cases (map (lambda (case) - (cons (let ((opts (car case))) - (if (or (boolean? opts) (eq? 'else opts)) - opts - (cond - ((symbol? (car opts)) opts) - ((boolean? (car opts)) opts) - ((string? (caar opts)) (cdar opts)) - (else (car opts))))) - (cdr case))) - cases))) - `(let ((%display-usage (lambda () (display-usage-report ',usage-desc)))) - (lambda (%argv) - (let %next-arg ((%argv %argv)) - (get-option %argv - ',kw-opts - ',kw-args - (lambda (%opt %arg %new-argv) - (case %opt - ,@ transmogrified-cases)))))))) - - - - -;;; {Low Level Modules} -;;; -;;; These are the low level data structures for modules. -;;; -;;; !!! warning: The interface to lazy binder procedures is going -;;; to be changed in an incompatible way to permit all the basic -;;; module ops to be virtualized. -;;; -;;; (make-module size use-list lazy-binding-proc) => module -;;; module-{obarray,uses,binder}[|-set!] -;;; (module? obj) => [#t|#f] -;;; (module-locally-bound? module symbol) => [#t|#f] -;;; (module-bound? module symbol) => [#t|#f] -;;; (module-symbol-locally-interned? module symbol) => [#t|#f] -;;; (module-symbol-interned? module symbol) => [#t|#f] -;;; (module-local-variable module symbol) => [# | #f] -;;; (module-variable module symbol) => [# | #f] -;;; (module-symbol-binding module symbol opt-value) -;;; => [ | opt-value | an error occurs ] -;;; (module-make-local-var! module symbol) => # -;;; (module-add! module symbol var) => unspecified -;;; (module-remove! module symbol) => unspecified -;;; (module-for-each proc module) => unspecified -;;; (make-scm-module) => module ; a lazy copy of the symhash module -;;; (set-current-module module) => unspecified -;;; (current-module) => # -;;; -;;; - - -;;; {Printing Modules} -;; This is how modules are printed. You can re-define it. -;; (Redefining is actually more complicated than simply redefining -;; %print-module because that would only change the binding and not -;; the value stored in the vtable that determines how record are -;; printed. Sigh.) - -(define (%print-module mod port) ; unused args: depth length style table) - (display "#<" port) - (display (or (module-kind mod) "module") port) - (let ((name (module-name mod))) - (if name - (begin - (display " " port) - (display name port)))) - (display " " port) - (display (number->string (object-address mod) 16) port) - (display ">" port)) - -;; module-type -;; -;; A module is characterized by an obarray in which local symbols -;; are interned, a list of modules, "uses", from which non-local -;; bindings can be inherited, and an optional lazy-binder which -;; is a (CLOSURE module symbol) which, as a last resort, can provide -;; bindings that would otherwise not be found locally in the module. -;; -;; NOTE: If you change here, you also need to change libguile/modules.h. -;; -(define module-type - (make-record-type 'module - '(obarray uses binder eval-closure transformer name kind - observers weak-observers observer-id) - %print-module)) - -;; make-module &opt size uses binder -;; -;; Create a new module, perhaps with a particular size of obarray, -;; initial uses list, or binding procedure. -;; -(define make-module - (lambda args - - (define (parse-arg index default) - (if (> (length args) index) - (list-ref args index) - default)) - - (if (> (length args) 3) - (error "Too many args to make-module." args)) - - (let ((size (parse-arg 0 1021)) - (uses (parse-arg 1 '())) - (binder (parse-arg 2 #f))) - - (if (not (integer? size)) - (error "Illegal size to make-module." size)) - (if (not (and (list? uses) - (and-map module? uses))) - (error "Incorrect use list." uses)) - (if (and binder (not (procedure? binder))) - (error - "Lazy-binder expected to be a procedure or #f." binder)) - - (let ((module (module-constructor (make-vector size '()) - uses binder #f #f #f #f - '() - (make-weak-value-hash-table 31) - 0))) - - ;; We can't pass this as an argument to module-constructor, - ;; because we need it to close over a pointer to the module - ;; itself. - (set-module-eval-closure! module (standard-eval-closure module)) - - module)))) - -(define module-constructor (record-constructor module-type)) -(define module-obarray (record-accessor module-type 'obarray)) -(define set-module-obarray! (record-modifier module-type 'obarray)) -(define module-uses (record-accessor module-type 'uses)) -(define set-module-uses! (record-modifier module-type 'uses)) -(define module-binder (record-accessor module-type 'binder)) -(define set-module-binder! (record-modifier module-type 'binder)) - -;; NOTE: This binding is used in libguile/modules.c. -(define module-eval-closure (record-accessor module-type 'eval-closure)) - -(define module-transformer (record-accessor module-type 'transformer)) -(define set-module-transformer! (record-modifier module-type 'transformer)) -(define module-name (record-accessor module-type 'name)) -(define set-module-name! (record-modifier module-type 'name)) -(define module-kind (record-accessor module-type 'kind)) -(define set-module-kind! (record-modifier module-type 'kind)) -(define module-observers (record-accessor module-type 'observers)) -(define set-module-observers! (record-modifier module-type 'observers)) -(define module-weak-observers (record-accessor module-type 'weak-observers)) -(define module-observer-id (record-accessor module-type 'observer-id)) -(define set-module-observer-id! (record-modifier module-type 'observer-id)) -(define module? (record-predicate module-type)) - -(define set-module-eval-closure! - (let ((setter (record-modifier module-type 'eval-closure))) - (lambda (module closure) - (setter module closure) - ;; Make it possible to lookup the module from the environment. - ;; This implementation is correct since an eval closure can belong - ;; to maximally one module. - (set-procedure-property! closure 'module module)))) - -(begin-deprecated - (define (eval-in-module exp mod) - (issue-deprecation-warning - "`eval-in-module' is deprecated. Use `eval' instead.") - (eval exp mod))) - - -;;; {Observer protocol} -;;; - -(define (module-observe module proc) - (set-module-observers! module (cons proc (module-observers module))) - (cons module proc)) - -(define (module-observe-weak module proc) - (let ((id (module-observer-id module))) - (hash-set! (module-weak-observers module) id proc) - (set-module-observer-id! module (+ 1 id)) - (cons module id))) - -(define (module-unobserve token) - (let ((module (car token)) - (id (cdr token))) - (if (integer? id) - (hash-remove! (module-weak-observers module) id) - (set-module-observers! module (delq1! id (module-observers module))))) - *unspecified*) - -(define (module-modified m) - (for-each (lambda (proc) (proc m)) (module-observers m)) - (hash-fold (lambda (id proc res) (proc m)) #f (module-weak-observers m))) - - -;;; {Module Searching in General} -;;; -;;; We sometimes want to look for properties of a symbol -;;; just within the obarray of one module. If the property -;;; holds, then it is said to hold ``locally'' as in, ``The symbol -;;; DISPLAY is locally rebound in the module `safe-guile'.'' -;;; -;;; -;;; Other times, we want to test for a symbol property in the obarray -;;; of M and, if it is not found there, try each of the modules in the -;;; uses list of M. This is the normal way of testing for some -;;; property, so we state these properties without qualification as -;;; in: ``The symbol 'fnord is interned in module M because it is -;;; interned locally in module M2 which is a member of the uses list -;;; of M.'' -;;; - -;; module-search fn m -;; -;; return the first non-#f result of FN applied to M and then to -;; the modules in the uses of m, and so on recursively. If all applications -;; return #f, then so does this function. -;; -(define (module-search fn m v) - (define (loop pos) - (and (pair? pos) - (or (module-search fn (car pos) v) - (loop (cdr pos))))) - (or (fn m v) - (loop (module-uses m)))) - - -;;; {Is a symbol bound in a module?} -;;; -;;; Symbol S in Module M is bound if S is interned in M and if the binding -;;; of S in M has been set to some well-defined value. -;;; - -;; module-locally-bound? module symbol -;; -;; Is a symbol bound (interned and defined) locally in a given module? -;; -(define (module-locally-bound? m v) - (let ((var (module-local-variable m v))) - (and var - (variable-bound? var)))) - -;; module-bound? module symbol -;; -;; Is a symbol bound (interned and defined) anywhere in a given module -;; or its uses? -;; -(define (module-bound? m v) - (module-search module-locally-bound? m v)) - -;;; {Is a symbol interned in a module?} -;;; -;;; Symbol S in Module M is interned if S occurs in -;;; of S in M has been set to some well-defined value. -;;; -;;; It is possible to intern a symbol in a module without providing -;;; an initial binding for the corresponding variable. This is done -;;; with: -;;; (module-add! module symbol (make-undefined-variable)) -;;; -;;; In that case, the symbol is interned in the module, but not -;;; bound there. The unbound symbol shadows any binding for that -;;; symbol that might otherwise be inherited from a member of the uses list. -;;; - -(define (module-obarray-get-handle ob key) - ((if (symbol? key) hashq-get-handle hash-get-handle) ob key)) - -(define (module-obarray-ref ob key) - ((if (symbol? key) hashq-ref hash-ref) ob key)) - -(define (module-obarray-set! ob key val) - ((if (symbol? key) hashq-set! hash-set!) ob key val)) - -(define (module-obarray-remove! ob key) - ((if (symbol? key) hashq-remove! hash-remove!) ob key)) - -;; module-symbol-locally-interned? module symbol -;; -;; is a symbol interned (not neccessarily defined) locally in a given module -;; or its uses? Interned symbols shadow inherited bindings even if -;; they are not themselves bound to a defined value. -;; -(define (module-symbol-locally-interned? m v) - (not (not (module-obarray-get-handle (module-obarray m) v)))) - -;; module-symbol-interned? module symbol -;; -;; is a symbol interned (not neccessarily defined) anywhere in a given module -;; or its uses? Interned symbols shadow inherited bindings even if -;; they are not themselves bound to a defined value. -;; -(define (module-symbol-interned? m v) - (module-search module-symbol-locally-interned? m v)) - - -;;; {Mapping modules x symbols --> variables} -;;; - -;; module-local-variable module symbol -;; return the local variable associated with a MODULE and SYMBOL. -;; -;;; This function is very important. It is the only function that can -;;; return a variable from a module other than the mutators that store -;;; new variables in modules. Therefore, this function is the location -;;; of the "lazy binder" hack. -;;; -;;; If symbol is defined in MODULE, and if the definition binds symbol -;;; to a variable, return that variable object. -;;; -;;; If the symbols is not found at first, but the module has a lazy binder, -;;; then try the binder. -;;; -;;; If the symbol is not found at all, return #f. -;;; -(define (module-local-variable m v) -; (caddr -; (list m v - (let ((b (module-obarray-ref (module-obarray m) v))) - (or (and (variable? b) b) - (and (module-binder m) - ((module-binder m) m v #f))))) -;)) - -;; module-variable module symbol -;; -;; like module-local-variable, except search the uses in the -;; case V is not found in M. -;; -;; NOTE: This function is superseded with C code (see modules.c) -;;; when using the standard eval closure. -;; -(define (module-variable m v) - (module-search module-local-variable m v)) - - -;;; {Mapping modules x symbols --> bindings} -;;; -;;; These are similar to the mapping to variables, except that the -;;; variable is dereferenced. -;;; - -;; module-symbol-binding module symbol opt-value -;; -;; return the binding of a variable specified by name within -;; a given module, signalling an error if the variable is unbound. -;; If the OPT-VALUE is passed, then instead of signalling an error, -;; return OPT-VALUE. -;; -(define (module-symbol-local-binding m v . opt-val) - (let ((var (module-local-variable m v))) - (if var - (variable-ref var) - (if (not (null? opt-val)) - (car opt-val) - (error "Locally unbound variable." v))))) - -;; module-symbol-binding module symbol opt-value -;; -;; return the binding of a variable specified by name within -;; a given module, signalling an error if the variable is unbound. -;; If the OPT-VALUE is passed, then instead of signalling an error, -;; return OPT-VALUE. -;; -(define (module-symbol-binding m v . opt-val) - (let ((var (module-variable m v))) - (if var - (variable-ref var) - (if (not (null? opt-val)) - (car opt-val) - (error "Unbound variable." v))))) - - - -;;; {Adding Variables to Modules} -;;; -;;; - - -;; module-make-local-var! module symbol -;; -;; ensure a variable for V in the local namespace of M. -;; If no variable was already there, then create a new and uninitialzied -;; variable. -;; -(define (module-make-local-var! m v) - (or (let ((b (module-obarray-ref (module-obarray m) v))) - (and (variable? b) - (begin - (module-modified m) - b))) - (and (module-binder m) - ((module-binder m) m v #t)) - (begin - (let ((answer (make-undefined-variable))) - (variable-set-name-hint! answer v) - (module-obarray-set! (module-obarray m) v answer) - (module-modified m) - answer)))) - -;; module-ensure-local-variable! module symbol -;; -;; Ensure that there is a local variable in MODULE for SYMBOL. If -;; there is no binding for SYMBOL, create a new uninitialized -;; variable. Return the local variable. -;; -(define (module-ensure-local-variable! module symbol) - (or (module-local-variable module symbol) - (let ((var (make-undefined-variable))) - (variable-set-name-hint! var symbol) - (module-add! module symbol var) - var))) - -;; module-add! module symbol var -;; -;; ensure a particular variable for V in the local namespace of M. -;; -(define (module-add! m v var) - (if (not (variable? var)) - (error "Bad variable to module-add!" var)) - (module-obarray-set! (module-obarray m) v var) - (module-modified m)) - -;; module-remove! -;; -;; make sure that a symbol is undefined in the local namespace of M. -;; -(define (module-remove! m v) - (module-obarray-remove! (module-obarray m) v) - (module-modified m)) - -(define (module-clear! m) - (vector-fill! (module-obarray m) '()) - (module-modified m)) - -;; MODULE-FOR-EACH -- exported -;; -;; Call PROC on each symbol in MODULE, with arguments of (SYMBOL VARIABLE). -;; -(define (module-for-each proc module) - (let ((obarray (module-obarray module))) - (do ((index 0 (+ index 1)) - (end (vector-length obarray))) - ((= index end)) - (for-each - (lambda (bucket) - (proc (car bucket) (cdr bucket))) - (vector-ref obarray index))))) - - -(define (module-map proc module) - (let* ((obarray (module-obarray module)) - (end (vector-length obarray))) - - (let loop ((i 0) - (answer '())) - (if (= i end) - answer - (loop (+ 1 i) - (append! - (map (lambda (bucket) - (proc (car bucket) (cdr bucket))) - (vector-ref obarray i)) - answer)))))) - - -;;; {Low Level Bootstrapping} -;;; - -;; make-root-module - -;; A root module uses the pre-modules-obarray as its obarray. This -;; special obarray accumulates all bindings that have been established -;; before the module system is fully booted. -;; -;; (The obarray continues to be used by code that has been closed over -;; before the module system has been booted.) - -(define (make-root-module) - (let ((m (make-module 0))) - (set-module-obarray! m (%get-pre-modules-obarray)) - m)) - -;; make-scm-module - -;; The root interface is a module that uses the same obarray as the -;; root module. It does not allow new definitions, tho. - -(define (make-scm-module) - (let ((m (make-module 0))) - (set-module-obarray! m (%get-pre-modules-obarray)) - (set-module-eval-closure! m (standard-interface-eval-closure m)) - m)) - - - -;;; {Module-based Loading} -;;; - -(define (save-module-excursion thunk) - (let ((inner-module (current-module)) - (outer-module #f)) - (dynamic-wind (lambda () - (set! outer-module (current-module)) - (set-current-module inner-module) - (set! inner-module #f)) - thunk - (lambda () - (set! inner-module (current-module)) - (set-current-module outer-module) - (set! outer-module #f))))) - -(define basic-load load) - -(define (load-module filename) - (save-module-excursion - (lambda () - (let ((oldname (and (current-load-port) - (port-filename (current-load-port))))) - (basic-load (if (and oldname - (> (string-length filename) 0) - (not (char=? (string-ref filename 0) #\/)) - (not (string=? (dirname oldname) "."))) - (string-append (dirname oldname) "/" filename) - filename)))))) - - - -;;; {MODULE-REF -- exported} -;; -;; Returns the value of a variable called NAME in MODULE or any of its -;; used modules. If there is no such variable, then if the optional third -;; argument DEFAULT is present, it is returned; otherwise an error is signaled. -;; -(define (module-ref module name . rest) - (let ((variable (module-variable module name))) - (if (and variable (variable-bound? variable)) - (variable-ref variable) - (if (null? rest) - (error "No variable named" name 'in module) - (car rest) ; default value - )))) - -;; MODULE-SET! -- exported -;; -;; Sets the variable called NAME in MODULE (or in a module that MODULE uses) -;; to VALUE; if there is no such variable, an error is signaled. -;; -(define (module-set! module name value) - (let ((variable (module-variable module name))) - (if variable - (variable-set! variable value) - (error "No variable named" name 'in module)))) - -;; MODULE-DEFINE! -- exported -;; -;; Sets the variable called NAME in MODULE to VALUE; if there is no such -;; variable, it is added first. -;; -(define (module-define! module name value) - (let ((variable (module-local-variable module name))) - (if variable - (begin - (variable-set! variable value) - (module-modified module)) - (let ((variable (make-variable value))) - (variable-set-name-hint! variable name) - (module-add! module name variable))))) - -;; MODULE-DEFINED? -- exported -;; -;; Return #t iff NAME is defined in MODULE (or in a module that MODULE -;; uses) -;; -(define (module-defined? module name) - (let ((variable (module-variable module name))) - (and variable (variable-bound? variable)))) - -;; MODULE-USE! module interface -;; -;; Add INTERFACE to the list of interfaces used by MODULE. -;; -(define (module-use! module interface) - (set-module-uses! module - (cons interface (delq! interface (module-uses module)))) - (module-modified module)) - - -;;; {Recursive Namespaces} -;;; -;;; -;;; A hierarchical namespace emerges if we consider some module to be -;;; root, and variables bound to modules as nested namespaces. -;;; -;;; The routines in this file manage variable names in hierarchical namespace. -;;; Each variable name is a list of elements, looked up in successively nested -;;; modules. -;;; -;;; (nested-ref some-root-module '(foo bar baz)) -;;; => -;;; -;;; -;;; There are: -;;; -;;; ;; a-root is a module -;;; ;; name is a list of symbols -;;; -;;; nested-ref a-root name -;;; nested-set! a-root name val -;;; nested-define! a-root name val -;;; nested-remove! a-root name -;;; -;;; -;;; (current-module) is a natural choice for a-root so for convenience there are -;;; also: -;;; -;;; local-ref name == nested-ref (current-module) name -;;; local-set! name val == nested-set! (current-module) name val -;;; local-define! name val == nested-define! (current-module) name val -;;; local-remove! name == nested-remove! (current-module) name -;;; - - -(define (nested-ref root names) - (let loop ((cur root) - (elts names)) - (cond - ((null? elts) cur) - ((not (module? cur)) #f) - (else (loop (module-ref cur (car elts) #f) (cdr elts)))))) - -(define (nested-set! root names val) - (let loop ((cur root) - (elts names)) - (if (null? (cdr elts)) - (module-set! cur (car elts) val) - (loop (module-ref cur (car elts)) (cdr elts))))) - -(define (nested-define! root names val) - (let loop ((cur root) - (elts names)) - (if (null? (cdr elts)) - (module-define! cur (car elts) val) - (loop (module-ref cur (car elts)) (cdr elts))))) - -(define (nested-remove! root names) - (let loop ((cur root) - (elts names)) - (if (null? (cdr elts)) - (module-remove! cur (car elts)) - (loop (module-ref cur (car elts)) (cdr elts))))) - -(define (local-ref names) (nested-ref (current-module) names)) -(define (local-set! names val) (nested-set! (current-module) names val)) -(define (local-define names val) (nested-define! (current-module) names val)) -(define (local-remove names) (nested-remove! (current-module) names)) -;;; boot-9.scm ends here diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ca65_example b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ca65_example deleted file mode 100644 index 67c6313..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ca65_example +++ /dev/null @@ -1,284 +0,0 @@ -;-------------------------------------- -; Lychrel numbers. -; -; :author: Marc 'BlackJack' Rintsch -; :date: 2008-03-07 -; :version: 0.1 -; -; Prints all `Lychrel numbers`_ between 1 and 100000. -; -; The numbers are stored as array of "digits" in little endian -; order. Each digit is a byte with a value between 0 and 9. -; -; Runtime on C64: 00:21:01 -; -; .. _Lychrel numbers: http://en.wikipedia.org/wiki/Lychrel_number -; -; .. cl65 -l -tnone -C simple.cfg lychrel.s -o lychrel.prg -;-------------------------------------- - -;-------------------------------------- -; External addresses. -;-------------------------------------- - chrout = $ffd2 - -;-------------------------------------- -; Constants. -;-------------------------------------- - TO = 100000 - TO_DIGITS = 10 - ITERATIONS = 100 - MAX_DIGITS = TO_DIGITS + ITERATIONS - -;-------------------------------------- -; Global variables. -;-------------------------------------- -.zeropage -; -; Length of the currently tested `n` in digits. -; -n_length: - .res 1 -; -; Length of the number(s) `xa` and `xb` while testing. -; -length: - .res 1 - -.bss -; -; Number to be tested as digits i.e. bytes with values between -; 0 and 9. The length is stored in `n_length`. -; -n: - .res TO_DIGITS -; -; Space for calculating the reversed and added values. -; In the `main` code the current number is copied into `xa` -; and then repeatedly `reverse_add`\ed to itself with the -; result of that adding stored in `xb`. -; -xa: - .res MAX_DIGITS -xb: - .res MAX_DIGITS - -;-------------------------------------- -; BASIC header. -;-------------------------------------- -.code - .word 0800h ; Load address. - .byte 0 - .word @line_end - .word 2008 ; Line number. - .byte $9e ; SYS token. - .byte "2080 " ; SYS argument. - .byte "LYCHREL NUMBERS/BJ" -@line_end: - .byte 0, 0, 0 ; Line and program end marker. - -;-------------------------------------- -; Main program. -;-------------------------------------- -.proc main - -.zeropage -; -; Three byte counter for `TO` iterations (100000 = $0186a0). -; -i: - .res 3 - -.code -; -; Clear and set `n` and `i` to 1. -; - lda #0 ; n := 0; n := 1; i := 1 - sta i+1 - sta i+2 - ldx #TO_DIGITS -clear_n: - sta n-1,x - dex - bne clear_n - inx - stx i - stx n - stx n_length - -mainloop: - jsr is_lychrel - bcc no_lychrel - jsr print_n -no_lychrel: - jsr increase_n - - inc i ; INC(i) - bne skip - inc i+1 - bne skip - inc i+2 -skip: - lda i - cmp #TO - bne mainloop - lda i+2 - cmp #^TO - bne mainloop - - rts -.endproc - -;-------------------------------------- -; Print `n` and a trailing newline. -; -; :in: `n_length`, `n` -;-------------------------------------- -.proc print_n - ldy n_length -L1: - lda n-1,y - ora #%110000 ; = '0' - jsr chrout - dey - bne L1 - - lda #13 - jmp chrout -.endproc - -;-------------------------------------- -; Increase `n` by one. -; -; This procedure expects n[n_length] == 0 in case the number gets -; one digit longer. -; -; :in: `n`, `n_length` -; :out: `n`, `n_length` -;-------------------------------------- -.proc increase_n - ldx #0 -L1: - inc n,x ; Increase digit. - lda n,x - cmp #10 ; If "carry", store 0 and go to next digit. - bne return - lda #0 - sta n,x - inx - bne L1 -return: - cpx n_length ; If "carry" after last digit, increase length. - bcc skip - inc n_length -skip: - rts -.endproc - -;-------------------------------------- -; Tests if `n` is a Lychrel number. -; -; :in: `n`, `n_length` -; :out: C is set if yes, cleared otherwise. -; :uses: `length`, `xa`, `xb` -;-------------------------------------- -.proc is_lychrel -.zeropage -i: - .res 1 - -.code - ldx n_length ; xa := n; length := n_length - stx length -L1: - lda n-1,x - sta xa-1,x - dex - bne L1 - - lda #ITERATIONS ; i := ITERATIONS - sta i -L2: - jsr reverse_add - jsr is_palindrome - bne no_palindrome - clc - rts -no_palindrome: - ldx length ; a := b -L3: - lda xb-1,x - sta xa-1,x - dex - bne L3 - - dec i ; Loop body end. - bne L2 - - sec - rts -.endproc - -;-------------------------------------- -; Add the reverse to `xa` to itself and store the result in `xb`. -; -; :in: `length`, `xa` -; :out: `length`, `xb` -;-------------------------------------- -.proc reverse_add -.code - ldx #0 - ldy length - clc -L1: - lda xa,x - adc xa-1,y - - cmp #10 - bcc no_adjust - sbc #10 -no_adjust: - sta xb,x - - dey - inx - txa ; ``eor`` instead of ``cpx`` to keep the carry flag - eor length ; of the addition above. - bne L1 - - bcc no_carry - lda #1 - sta xb,x - inc length -no_carry: - rts -.endproc - -;-------------------------------------- -; Checks if `xb` is a palindrome. -; -; :in: `length`, `xb` -; :out: Z flag set if `xb` is a palindrome, cleared otherwise. -;-------------------------------------- -.proc is_palindrome -.code - ldx #0 - lda length - tay - lsr - sta L1+1 ; Self modifying code! -L1: - cpx #0 ; <<< 0 replaced by (`length` / 2). - beq return - lda xb,x - cmp xb-1,y - bne return - dey - inx - bne L1 -return: - rts -.endproc diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/cbmbas_example b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/cbmbas_example deleted file mode 100644 index 8d8ded9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/cbmbas_example +++ /dev/null @@ -1,9 +0,0 @@ -10 rem cbm basic v2 example -20 rem comment with keywords: for, data -30 dim a$(20) -35 rem the typical space efficient form of leaving spaces out: -40 fort=0to15:poke646,t:print"{revers on} ";:next -50 geta$:ifa$=chr$(0):goto40 -55 rem it is legal to omit the closing " on line end -60 print"{white}":print"bye... -70 end diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/cells.ps b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/cells.ps deleted file mode 100644 index d5bc325f5c3b6f12457724326afc672225deabbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8648 zcmcIqO>-MJ487}Dum>M)FG*0V^{vjwwVoz3J$4j(<7g`HW+Wx;OsD_74{L#h$js1Q zJ2}L{k^({CJrLmP?3bGl=fB>KpZarm(Jao+-t7AIVccDrn-72fvD+N_i}!f?adX)A zSLU|gZub{o_jq!%zVG)}#^U4K@%Gz8KOD~AkHZ1aK5icR{rT_X!+H>fn{jx%K0rg$ zUApeF>kLM&$8W>kX1Ko||G6^8_~r4x(Be}YmYDKxxO+1`uyS7Wy1(BHH@k5=-an2V zKVNQ!+b`zd)|rQI+yBg6|9NqFv)--`n_+yk!+hQhcb{S2!d^6unda|r*V}%2w(k$q zU(;X^!>4~Ry1V~$i&b}6mG_NpW8?ev_kMx7?c-PUAN>_G^nZU{AHFOMb**t7nTPRv ze;5}gU@3=Z+s$y4z43UK-UG< z_!oi{LtuDGsE`ntB}`l;lgx??HE9XkbcS3Sx7Z%}A0BmTZkE+y>UcWHjW-u)`+ z3)rh)DhRwh1lEQV7Fg>}SimmVEU<8iW`S*hO2q<$WTIJMx>FXIj#-jIWIC`&vB0cO zSzuO}uUKH<4$T770+osdrUhzM$W4370<*+?6>_u0e8mF8E>$crfTw1GK{z!F1i}J| z87wG5;9-JBJ;7ukNtUq85{-Ix5s)S04oS)b*-=JP@ymoFM=YlhICg;rR*b4bjp6>{i^*jOZ5I}b?P5UEcEV8`Qim#Gi98&+3P-50qMN0Cm;TR@WygHm0x)O85vH~<$R<8`$ zoD(@`3Qj$8PP{b33li<NBH}G`j`U%EgG9aRWgi0e<(aB&H)C($`YnY%prR%HJZ0L$r3b0X(V&Z*g< zih+=5ix)gMLh7U`t75L+5=|wL;+3ZdqCPVkDW$X+85$U&{1oy#4v=2ge}Qwh>elK@ z7ibX`(FBVnbkEFwLx&)KAP!AX@=pM4&WW5eIj4@C6BB26L82{Qpsb4JTLxX_5>gwd zKv_}(De}`zsLzaODe601$7mv3oY({ei4hi8H>68*)GUPZUB>H67ih6Z72+qpZqQ5c z^#C;~*BIR9=o^)?eLuZ&EIY!&1W^%9;4}|}$gYYT2V59=)Gl$HbI;2-Q?_NCJ5o~5 zJHw)LoZXz(Ll)6eG$c4KIq8WX90~+o#X6MYq#8E|`=u(6tw0072Ww|ouT78M|F-8$me^Z?yqQM-jGZ( zP8V5pl96XmWOb=DjjOBM`qBkjM1_RPfvBWPC5JMJZ*;{3=K)xC;Vx*C@fjwFifBU4 ziJUV9r(VA;%R9fkGt4^2$&0g^)4IPBTJna3iLFi+?gWTZPUcoshmu=aQdgq&r3aq_Of^LPf}*9Gk4`kWIvXL3%>3RMaOas?;x=!LxV%R9robDUl4 z*FzSKEE - -#ifndef WITH_TSC - -#define READ_TIMESTAMP(var) - -#else - -typedef unsigned long long uint64; - -#if defined(__ppc__) /* <- Don't know if this is the correct symbol; this - section should work for GCC on any PowerPC platform, - irrespective of OS. POWER? Who knows :-) */ - -#define READ_TIMESTAMP(var) ppc_getcounter(&var) - -static void -ppc_getcounter(uint64 *v) -{ - register unsigned long tbu, tb, tbu2; - - loop: - asm volatile ("mftbu %0" : "=r" (tbu) ); - asm volatile ("mftb %0" : "=r" (tb) ); - asm volatile ("mftbu %0" : "=r" (tbu2)); - if (__builtin_expect(tbu != tbu2, 0)) goto loop; - - /* The slightly peculiar way of writing the next lines is - compiled better by GCC than any other way I tried. */ - ((long*)(v))[0] = tbu; - ((long*)(v))[1] = tb; -} - -#else /* this is for linux/x86 (and probably any other GCC/x86 combo) */ - -#define READ_TIMESTAMP(val) \ - __asm__ __volatile__("rdtsc" : "=A" (val)) - -#endif - -void dump_tsc(int opcode, int ticked, uint64 inst0, uint64 inst1, - uint64 loop0, uint64 loop1, uint64 intr0, uint64 intr1) -{ - uint64 intr, inst, loop; - PyThreadState *tstate = PyThreadState_Get(); - if (!tstate->interp->tscdump) - return; - intr = intr1 - intr0; - inst = inst1 - inst0 - intr; - loop = loop1 - loop0 - intr; - fprintf(stderr, "opcode=%03d t=%d inst=%06lld loop=%06lld\n", - opcode, ticked, inst, loop); -} - -#endif - -/* Turn this on if your compiler chokes on the big switch: */ -/* #define CASE_TOO_BIG 1 */ - -#ifdef Py_DEBUG -/* For debugging the interpreter: */ -#define LLTRACE 1 /* Low-level trace feature */ -#define CHECKEXC 1 /* Double-check exception checking */ -#endif - -typedef PyObject *(*callproc)(PyObject *, PyObject *, PyObject *); - -/* Forward declarations */ -#ifdef WITH_TSC -static PyObject * call_function(PyObject ***, int, uint64*, uint64*); -#else -static PyObject * call_function(PyObject ***, int); -#endif -static PyObject * fast_function(PyObject *, PyObject ***, int, int, int); -static PyObject * do_call(PyObject *, PyObject ***, int, int); -static PyObject * ext_do_call(PyObject *, PyObject ***, int, int, int); -static PyObject * update_keyword_args(PyObject *, int, PyObject ***,PyObject *); -static PyObject * update_star_args(int, int, PyObject *, PyObject ***); -static PyObject * load_args(PyObject ***, int); -#define CALL_FLAG_VAR 1 -#define CALL_FLAG_KW 2 - -#ifdef LLTRACE -static int lltrace; -static int prtrace(PyObject *, char *); -#endif -static int call_trace(Py_tracefunc, PyObject *, PyFrameObject *, - int, PyObject *); -static void call_trace_protected(Py_tracefunc, PyObject *, - PyFrameObject *, int, PyObject *); -static void call_exc_trace(Py_tracefunc, PyObject *, PyFrameObject *); -static int maybe_call_line_trace(Py_tracefunc, PyObject *, - PyFrameObject *, int *, int *, int *); - -static PyObject * apply_slice(PyObject *, PyObject *, PyObject *); -static int assign_slice(PyObject *, PyObject *, - PyObject *, PyObject *); -static PyObject * cmp_outcome(int, PyObject *, PyObject *); -static PyObject * import_from(PyObject *, PyObject *); -static int import_all_from(PyObject *, PyObject *); -static PyObject * build_class(PyObject *, PyObject *, PyObject *); -static int exec_statement(PyFrameObject *, - PyObject *, PyObject *, PyObject *); -static void set_exc_info(PyThreadState *, PyObject *, PyObject *, PyObject *); -static void reset_exc_info(PyThreadState *); -static void format_exc_check_arg(PyObject *, char *, PyObject *); -static PyObject * string_concatenate(PyObject *, PyObject *, - PyFrameObject *, unsigned char *); - -#define NAME_ERROR_MSG \ - "name '%.200s' is not defined" -#define GLOBAL_NAME_ERROR_MSG \ - "global name '%.200s' is not defined" -#define UNBOUNDLOCAL_ERROR_MSG \ - "local variable '%.200s' referenced before assignment" -#define UNBOUNDFREE_ERROR_MSG \ - "free variable '%.200s' referenced before assignment" \ - " in enclosing scope" - -/* Dynamic execution profile */ -#ifdef DYNAMIC_EXECUTION_PROFILE -#ifdef DXPAIRS -static long dxpairs[257][256]; -#define dxp dxpairs[256] -#else -static long dxp[256]; -#endif -#endif - -/* Function call profile */ -#ifdef CALL_PROFILE -#define PCALL_NUM 11 -static int pcall[PCALL_NUM]; - -#define PCALL_ALL 0 -#define PCALL_FUNCTION 1 -#define PCALL_FAST_FUNCTION 2 -#define PCALL_FASTER_FUNCTION 3 -#define PCALL_METHOD 4 -#define PCALL_BOUND_METHOD 5 -#define PCALL_CFUNCTION 6 -#define PCALL_TYPE 7 -#define PCALL_GENERATOR 8 -#define PCALL_OTHER 9 -#define PCALL_POP 10 - -/* Notes about the statistics - - PCALL_FAST stats - - FAST_FUNCTION means no argument tuple needs to be created. - FASTER_FUNCTION means that the fast-path frame setup code is used. - - If there is a method call where the call can be optimized by changing - the argument tuple and calling the function directly, it gets recorded - twice. - - As a result, the relationship among the statistics appears to be - PCALL_ALL == PCALL_FUNCTION + PCALL_METHOD - PCALL_BOUND_METHOD + - PCALL_CFUNCTION + PCALL_TYPE + PCALL_GENERATOR + PCALL_OTHER - PCALL_FUNCTION > PCALL_FAST_FUNCTION > PCALL_FASTER_FUNCTION - PCALL_METHOD > PCALL_BOUND_METHOD -*/ - -#define PCALL(POS) pcall[POS]++ - -PyObject * -PyEval_GetCallStats(PyObject *self) -{ - return Py_BuildValue("iiiiiiiiii", - pcall[0], pcall[1], pcall[2], pcall[3], - pcall[4], pcall[5], pcall[6], pcall[7], - pcall[8], pcall[9]); -} -#else -#define PCALL(O) - -PyObject * -PyEval_GetCallStats(PyObject *self) -{ - Py_INCREF(Py_None); - return Py_None; -} -#endif - - -#ifdef WITH_THREAD - -#ifdef HAVE_ERRNO_H -#include -#endif -#include "pythread.h" - -static PyThread_type_lock interpreter_lock = 0; /* This is the GIL */ -static long main_thread = 0; - -int -PyEval_ThreadsInitialized(void) -{ - return interpreter_lock != 0; -} - -void -PyEval_InitThreads(void) -{ - if (interpreter_lock) - return; - interpreter_lock = PyThread_allocate_lock(); - PyThread_acquire_lock(interpreter_lock, 1); - main_thread = PyThread_get_thread_ident(); -} - -void -PyEval_AcquireLock(void) -{ - PyThread_acquire_lock(interpreter_lock, 1); -} - -void -PyEval_ReleaseLock(void) -{ - PyThread_release_lock(interpreter_lock); -} - -void -PyEval_AcquireThread(PyThreadState *tstate) -{ - if (tstate == NULL) - Py_FatalError("PyEval_AcquireThread: NULL new thread state"); - /* Check someone has called PyEval_InitThreads() to create the lock */ - assert(interpreter_lock); - PyThread_acquire_lock(interpreter_lock, 1); - if (PyThreadState_Swap(tstate) != NULL) - Py_FatalError( - "PyEval_AcquireThread: non-NULL old thread state"); -} - -void -PyEval_ReleaseThread(PyThreadState *tstate) -{ - if (tstate == NULL) - Py_FatalError("PyEval_ReleaseThread: NULL thread state"); - if (PyThreadState_Swap(NULL) != tstate) - Py_FatalError("PyEval_ReleaseThread: wrong thread state"); - PyThread_release_lock(interpreter_lock); -} - -/* This function is called from PyOS_AfterFork to ensure that newly - created child processes don't hold locks referring to threads which - are not running in the child process. (This could also be done using - pthread_atfork mechanism, at least for the pthreads implementation.) */ - -void -PyEval_ReInitThreads(void) -{ - if (!interpreter_lock) - return; - /*XXX Can't use PyThread_free_lock here because it does too - much error-checking. Doing this cleanly would require - adding a new function to each thread_*.h. Instead, just - create a new lock and waste a little bit of memory */ - interpreter_lock = PyThread_allocate_lock(); - PyThread_acquire_lock(interpreter_lock, 1); - main_thread = PyThread_get_thread_ident(); -} -#endif - -/* Functions save_thread and restore_thread are always defined so - dynamically loaded modules needn't be compiled separately for use - with and without threads: */ - -PyThreadState * -PyEval_SaveThread(void) -{ - PyThreadState *tstate = PyThreadState_Swap(NULL); - if (tstate == NULL) - Py_FatalError("PyEval_SaveThread: NULL tstate"); -#ifdef WITH_THREAD - if (interpreter_lock) - PyThread_release_lock(interpreter_lock); -#endif - return tstate; -} - -void -PyEval_RestoreThread(PyThreadState *tstate) -{ - if (tstate == NULL) - Py_FatalError("PyEval_RestoreThread: NULL tstate"); -#ifdef WITH_THREAD - if (interpreter_lock) { - int err = errno; - PyThread_acquire_lock(interpreter_lock, 1); - errno = err; - } -#endif - PyThreadState_Swap(tstate); -} - - -/* Mechanism whereby asynchronously executing callbacks (e.g. UNIX - signal handlers or Mac I/O completion routines) can schedule calls - to a function to be called synchronously. - The synchronous function is called with one void* argument. - It should return 0 for success or -1 for failure -- failure should - be accompanied by an exception. - - If registry succeeds, the registry function returns 0; if it fails - (e.g. due to too many pending calls) it returns -1 (without setting - an exception condition). - - Note that because registry may occur from within signal handlers, - or other asynchronous events, calling malloc() is unsafe! - -#ifdef WITH_THREAD - Any thread can schedule pending calls, but only the main thread - will execute them. -#endif - - XXX WARNING! ASYNCHRONOUSLY EXECUTING CODE! - There are two possible race conditions: - (1) nested asynchronous registry calls; - (2) registry calls made while pending calls are being processed. - While (1) is very unlikely, (2) is a real possibility. - The current code is safe against (2), but not against (1). - The safety against (2) is derived from the fact that only one - thread (the main thread) ever takes things out of the queue. - - XXX Darn! With the advent of thread state, we should have an array - of pending calls per thread in the thread state! Later... -*/ - -#define NPENDINGCALLS 32 -static struct { - int (*func)(void *); - void *arg; -} pendingcalls[NPENDINGCALLS]; -static volatile int pendingfirst = 0; -static volatile int pendinglast = 0; -static volatile int things_to_do = 0; - -int -Py_AddPendingCall(int (*func)(void *), void *arg) -{ - static volatile int busy = 0; - int i, j; - /* XXX Begin critical section */ - /* XXX If you want this to be safe against nested - XXX asynchronous calls, you'll have to work harder! */ - if (busy) - return -1; - busy = 1; - i = pendinglast; - j = (i + 1) % NPENDINGCALLS; - if (j == pendingfirst) { - busy = 0; - return -1; /* Queue full */ - } - pendingcalls[i].func = func; - pendingcalls[i].arg = arg; - pendinglast = j; - - _Py_Ticker = 0; - things_to_do = 1; /* Signal main loop */ - busy = 0; - /* XXX End critical section */ - return 0; -} - -int -Py_MakePendingCalls(void) -{ - static int busy = 0; -#ifdef WITH_THREAD - if (main_thread && PyThread_get_thread_ident() != main_thread) - return 0; -#endif - if (busy) - return 0; - busy = 1; - things_to_do = 0; - for (;;) { - int i; - int (*func)(void *); - void *arg; - i = pendingfirst; - if (i == pendinglast) - break; /* Queue empty */ - func = pendingcalls[i].func; - arg = pendingcalls[i].arg; - pendingfirst = (i + 1) % NPENDINGCALLS; - if (func(arg) < 0) { - busy = 0; - things_to_do = 1; /* We're not done yet */ - return -1; - } - } - busy = 0; - return 0; -} - - -/* The interpreter's recursion limit */ - -#ifndef Py_DEFAULT_RECURSION_LIMIT -#define Py_DEFAULT_RECURSION_LIMIT 1000 -#endif -static int recursion_limit = Py_DEFAULT_RECURSION_LIMIT; -int _Py_CheckRecursionLimit = Py_DEFAULT_RECURSION_LIMIT; - -int -Py_GetRecursionLimit(void) -{ - return recursion_limit; -} - -void -Py_SetRecursionLimit(int new_limit) -{ - recursion_limit = new_limit; - _Py_CheckRecursionLimit = recursion_limit; -} - -/* the macro Py_EnterRecursiveCall() only calls _Py_CheckRecursiveCall() - if the recursion_depth reaches _Py_CheckRecursionLimit. - If USE_STACKCHECK, the macro decrements _Py_CheckRecursionLimit - to guarantee that _Py_CheckRecursiveCall() is regularly called. - Without USE_STACKCHECK, there is no need for this. */ -int -_Py_CheckRecursiveCall(char *where) -{ - PyThreadState *tstate = PyThreadState_GET(); - -#ifdef USE_STACKCHECK - if (PyOS_CheckStack()) { - --tstate->recursion_depth; - PyErr_SetString(PyExc_MemoryError, "Stack overflow"); - return -1; - } -#endif - if (tstate->recursion_depth > recursion_limit) { - --tstate->recursion_depth; - PyErr_Format(PyExc_RuntimeError, - "maximum recursion depth exceeded%s", - where); - return -1; - } - _Py_CheckRecursionLimit = recursion_limit; - return 0; -} - -/* Status code for main loop (reason for stack unwind) */ -enum why_code { - WHY_NOT = 0x0001, /* No error */ - WHY_EXCEPTION = 0x0002, /* Exception occurred */ - WHY_RERAISE = 0x0004, /* Exception re-raised by 'finally' */ - WHY_RETURN = 0x0008, /* 'return' statement */ - WHY_BREAK = 0x0010, /* 'break' statement */ - WHY_CONTINUE = 0x0020, /* 'continue' statement */ - WHY_YIELD = 0x0040 /* 'yield' operator */ -}; - -static enum why_code do_raise(PyObject *, PyObject *, PyObject *); -static int unpack_iterable(PyObject *, int, PyObject **); - -/* for manipulating the thread switch and periodic "stuff" - used to be - per thread, now just a pair o' globals */ -int _Py_CheckInterval = 100; -volatile int _Py_Ticker = 100; - -PyObject * -PyEval_EvalCode(PyCodeObject *co, PyObject *globals, PyObject *locals) -{ - /* XXX raise SystemError if globals is NULL */ - return PyEval_EvalCodeEx(co, - globals, locals, - (PyObject **)NULL, 0, - (PyObject **)NULL, 0, - (PyObject **)NULL, 0, - NULL); -} - - -/* Interpreter main loop */ - -PyObject * -PyEval_EvalFrame(PyFrameObject *f) { - /* This is for backward compatibility with extension modules that - used this API; core interpreter code should call PyEval_EvalFrameEx() */ - return PyEval_EvalFrameEx(f, 0); -} - -PyObject * -PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) -{ -#ifdef DXPAIRS - int lastopcode = 0; -#endif - register PyObject **stack_pointer; /* Next free slot in value stack */ - register unsigned char *next_instr; - register int opcode; /* Current opcode */ - register int oparg; /* Current opcode argument, if any */ - register enum why_code why; /* Reason for block stack unwind */ - register int err; /* Error status -- nonzero if error */ - register PyObject *x; /* Result object -- NULL if error */ - register PyObject *v; /* Temporary objects popped off stack */ - register PyObject *w; - register PyObject *u; - register PyObject *t; - register PyObject *stream = NULL; /* for PRINT opcodes */ - register PyObject **fastlocals, **freevars; - PyObject *retval = NULL; /* Return value */ - PyThreadState *tstate = PyThreadState_GET(); - PyCodeObject *co; - - /* when tracing we set things up so that - - not (instr_lb <= current_bytecode_offset < instr_ub) - - is true when the line being executed has changed. The - initial values are such as to make this false the first - time it is tested. */ - int instr_ub = -1, instr_lb = 0, instr_prev = -1; - - unsigned char *first_instr; - PyObject *names; - PyObject *consts; -#if defined(Py_DEBUG) || defined(LLTRACE) - /* Make it easier to find out where we are with a debugger */ - char *filename; -#endif - -/* Tuple access macros */ - -#ifndef Py_DEBUG -#define GETITEM(v, i) PyTuple_GET_ITEM((PyTupleObject *)(v), (i)) -#else -#define GETITEM(v, i) PyTuple_GetItem((v), (i)) -#endif - -#ifdef WITH_TSC -/* Use Pentium timestamp counter to mark certain events: - inst0 -- beginning of switch statement for opcode dispatch - inst1 -- end of switch statement (may be skipped) - loop0 -- the top of the mainloop - loop1 -- place where control returns again to top of mainloop - (may be skipped) - intr1 -- beginning of long interruption - intr2 -- end of long interruption - - Many opcodes call out to helper C functions. In some cases, the - time in those functions should be counted towards the time for the - opcode, but not in all cases. For example, a CALL_FUNCTION opcode - calls another Python function; there's no point in charge all the - bytecode executed by the called function to the caller. - - It's hard to make a useful judgement statically. In the presence - of operator overloading, it's impossible to tell if a call will - execute new Python code or not. - - It's a case-by-case judgement. I'll use intr1 for the following - cases: - - EXEC_STMT - IMPORT_STAR - IMPORT_FROM - CALL_FUNCTION (and friends) - - */ - uint64 inst0, inst1, loop0, loop1, intr0 = 0, intr1 = 0; - int ticked = 0; - - READ_TIMESTAMP(inst0); - READ_TIMESTAMP(inst1); - READ_TIMESTAMP(loop0); - READ_TIMESTAMP(loop1); - - /* shut up the compiler */ - opcode = 0; -#endif - -/* Code access macros */ - -#define INSTR_OFFSET() ((int)(next_instr - first_instr)) -#define NEXTOP() (*next_instr++) -#define NEXTARG() (next_instr += 2, (next_instr[-1]<<8) + next_instr[-2]) -#define PEEKARG() ((next_instr[2]<<8) + next_instr[1]) -#define JUMPTO(x) (next_instr = first_instr + (x)) -#define JUMPBY(x) (next_instr += (x)) - -/* OpCode prediction macros - Some opcodes tend to come in pairs thus making it possible to predict - the second code when the first is run. For example, COMPARE_OP is often - followed by JUMP_IF_FALSE or JUMP_IF_TRUE. And, those opcodes are often - followed by a POP_TOP. - - Verifying the prediction costs a single high-speed test of register - variable against a constant. If the pairing was good, then the - processor has a high likelihood of making its own successful branch - prediction which results in a nearly zero overhead transition to the - next opcode. - - A successful prediction saves a trip through the eval-loop including - its two unpredictable branches, the HASARG test and the switch-case. - - If collecting opcode statistics, turn off prediction so that - statistics are accurately maintained (the predictions bypass - the opcode frequency counter updates). -*/ - -#ifdef DYNAMIC_EXECUTION_PROFILE -#define PREDICT(op) if (0) goto PRED_##op -#else -#define PREDICT(op) if (*next_instr == op) goto PRED_##op -#endif - -#define PREDICTED(op) PRED_##op: next_instr++ -#define PREDICTED_WITH_ARG(op) PRED_##op: oparg = PEEKARG(); next_instr += 3 - -/* Stack manipulation macros */ - -/* The stack can grow at most MAXINT deep, as co_nlocals and - co_stacksize are ints. */ -#define STACK_LEVEL() ((int)(stack_pointer - f->f_valuestack)) -#define EMPTY() (STACK_LEVEL() == 0) -#define TOP() (stack_pointer[-1]) -#define SECOND() (stack_pointer[-2]) -#define THIRD() (stack_pointer[-3]) -#define FOURTH() (stack_pointer[-4]) -#define SET_TOP(v) (stack_pointer[-1] = (v)) -#define SET_SECOND(v) (stack_pointer[-2] = (v)) -#define SET_THIRD(v) (stack_pointer[-3] = (v)) -#define SET_FOURTH(v) (stack_pointer[-4] = (v)) -#define BASIC_STACKADJ(n) (stack_pointer += n) -#define BASIC_PUSH(v) (*stack_pointer++ = (v)) -#define BASIC_POP() (*--stack_pointer) - -#ifdef LLTRACE -#define PUSH(v) { (void)(BASIC_PUSH(v), \ - lltrace && prtrace(TOP(), "push")); \ - assert(STACK_LEVEL() <= co->co_stacksize); } -#define POP() ((void)(lltrace && prtrace(TOP(), "pop")), BASIC_POP()) -#define STACKADJ(n) { (void)(BASIC_STACKADJ(n), \ - lltrace && prtrace(TOP(), "stackadj")); \ - assert(STACK_LEVEL() <= co->co_stacksize); } -#define EXT_POP(STACK_POINTER) (lltrace && prtrace(*(STACK_POINTER), "ext_pop"), *--(STACK_POINTER)) -#else -#define PUSH(v) BASIC_PUSH(v) -#define POP() BASIC_POP() -#define STACKADJ(n) BASIC_STACKADJ(n) -#define EXT_POP(STACK_POINTER) (*--(STACK_POINTER)) -#endif - -/* Local variable macros */ - -#define GETLOCAL(i) (fastlocals[i]) - -/* The SETLOCAL() macro must not DECREF the local variable in-place and - then store the new value; it must copy the old value to a temporary - value, then store the new value, and then DECREF the temporary value. - This is because it is possible that during the DECREF the frame is - accessed by other code (e.g. a __del__ method or gc.collect()) and the - variable would be pointing to already-freed memory. */ -#define SETLOCAL(i, value) do { PyObject *tmp = GETLOCAL(i); \ - GETLOCAL(i) = value; \ - Py_XDECREF(tmp); } while (0) - -/* Start of code */ - - if (f == NULL) - return NULL; - - /* push frame */ - if (Py_EnterRecursiveCall("")) - return NULL; - - tstate->frame = f; - - if (tstate->use_tracing) { - if (tstate->c_tracefunc != NULL) { - /* tstate->c_tracefunc, if defined, is a - function that will be called on *every* entry - to a code block. Its return value, if not - None, is a function that will be called at - the start of each executed line of code. - (Actually, the function must return itself - in order to continue tracing.) The trace - functions are called with three arguments: - a pointer to the current frame, a string - indicating why the function is called, and - an argument which depends on the situation. - The global trace function is also called - whenever an exception is detected. */ - if (call_trace(tstate->c_tracefunc, tstate->c_traceobj, - f, PyTrace_CALL, Py_None)) { - /* Trace function raised an error */ - goto exit_eval_frame; - } - } - if (tstate->c_profilefunc != NULL) { - /* Similar for c_profilefunc, except it needn't - return itself and isn't called for "line" events */ - if (call_trace(tstate->c_profilefunc, - tstate->c_profileobj, - f, PyTrace_CALL, Py_None)) { - /* Profile function raised an error */ - goto exit_eval_frame; - } - } - } - - co = f->f_code; - names = co->co_names; - consts = co->co_consts; - fastlocals = f->f_localsplus; - freevars = f->f_localsplus + co->co_nlocals; - first_instr = (unsigned char*) PyString_AS_STRING(co->co_code); - /* An explanation is in order for the next line. - - f->f_lasti now refers to the index of the last instruction - executed. You might think this was obvious from the name, but - this wasn't always true before 2.3! PyFrame_New now sets - f->f_lasti to -1 (i.e. the index *before* the first instruction) - and YIELD_VALUE doesn't fiddle with f_lasti any more. So this - does work. Promise. */ - next_instr = first_instr + f->f_lasti + 1; - stack_pointer = f->f_stacktop; - assert(stack_pointer != NULL); - f->f_stacktop = NULL; /* remains NULL unless yield suspends frame */ - -#ifdef LLTRACE - lltrace = PyDict_GetItemString(f->f_globals, "__lltrace__") != NULL; -#endif -#if defined(Py_DEBUG) || defined(LLTRACE) - filename = PyString_AsString(co->co_filename); -#endif - - why = WHY_NOT; - err = 0; - x = Py_None; /* Not a reference, just anything non-NULL */ - w = NULL; - - if (throwflag) { /* support for generator.throw() */ - why = WHY_EXCEPTION; - goto on_error; - } - - for (;;) { -#ifdef WITH_TSC - if (inst1 == 0) { - /* Almost surely, the opcode executed a break - or a continue, preventing inst1 from being set - on the way out of the loop. - */ - READ_TIMESTAMP(inst1); - loop1 = inst1; - } - dump_tsc(opcode, ticked, inst0, inst1, loop0, loop1, - intr0, intr1); - ticked = 0; - inst1 = 0; - intr0 = 0; - intr1 = 0; - READ_TIMESTAMP(loop0); -#endif - assert(stack_pointer >= f->f_valuestack); /* else underflow */ - assert(STACK_LEVEL() <= co->co_stacksize); /* else overflow */ - - /* Do periodic things. Doing this every time through - the loop would add too much overhead, so we do it - only every Nth instruction. We also do it if - ``things_to_do'' is set, i.e. when an asynchronous - event needs attention (e.g. a signal handler or - async I/O handler); see Py_AddPendingCall() and - Py_MakePendingCalls() above. */ - - if (--_Py_Ticker < 0) { - if (*next_instr == SETUP_FINALLY) { - /* Make the last opcode before - a try: finally: block uninterruptable. */ - goto fast_next_opcode; - } - _Py_Ticker = _Py_CheckInterval; - tstate->tick_counter++; -#ifdef WITH_TSC - ticked = 1; -#endif - if (things_to_do) { - if (Py_MakePendingCalls() < 0) { - why = WHY_EXCEPTION; - goto on_error; - } - if (things_to_do) - /* MakePendingCalls() didn't succeed. - Force early re-execution of this - "periodic" code, possibly after - a thread switch */ - _Py_Ticker = 0; - } -#ifdef WITH_THREAD - if (interpreter_lock) { - /* Give another thread a chance */ - - if (PyThreadState_Swap(NULL) != tstate) - Py_FatalError("ceval: tstate mix-up"); - PyThread_release_lock(interpreter_lock); - - /* Other threads may run now */ - - PyThread_acquire_lock(interpreter_lock, 1); - if (PyThreadState_Swap(tstate) != NULL) - Py_FatalError("ceval: orphan tstate"); - - /* Check for thread interrupts */ - - if (tstate->async_exc != NULL) { - x = tstate->async_exc; - tstate->async_exc = NULL; - PyErr_SetNone(x); - Py_DECREF(x); - why = WHY_EXCEPTION; - goto on_error; - } - } -#endif - } - - fast_next_opcode: - f->f_lasti = INSTR_OFFSET(); - - /* line-by-line tracing support */ - - if (tstate->c_tracefunc != NULL && !tstate->tracing) { - /* see maybe_call_line_trace - for expository comments */ - f->f_stacktop = stack_pointer; - - err = maybe_call_line_trace(tstate->c_tracefunc, - tstate->c_traceobj, - f, &instr_lb, &instr_ub, - &instr_prev); - /* Reload possibly changed frame fields */ - JUMPTO(f->f_lasti); - if (f->f_stacktop != NULL) { - stack_pointer = f->f_stacktop; - f->f_stacktop = NULL; - } - if (err) { - /* trace function raised an exception */ - goto on_error; - } - } - - /* Extract opcode and argument */ - - opcode = NEXTOP(); - oparg = 0; /* allows oparg to be stored in a register because - it doesn't have to be remembered across a full loop */ - if (HAS_ARG(opcode)) - oparg = NEXTARG(); - dispatch_opcode: -#ifdef DYNAMIC_EXECUTION_PROFILE -#ifdef DXPAIRS - dxpairs[lastopcode][opcode]++; - lastopcode = opcode; -#endif - dxp[opcode]++; -#endif - -#ifdef LLTRACE - /* Instruction tracing */ - - if (lltrace) { - if (HAS_ARG(opcode)) { - printf("%d: %d, %d\n", - f->f_lasti, opcode, oparg); - } - else { - printf("%d: %d\n", - f->f_lasti, opcode); - } - } -#endif - - /* Main switch on opcode */ - READ_TIMESTAMP(inst0); - - switch (opcode) { - - /* BEWARE! - It is essential that any operation that fails sets either - x to NULL, err to nonzero, or why to anything but WHY_NOT, - and that no operation that succeeds does this! */ - - /* case STOP_CODE: this is an error! */ - - case NOP: - goto fast_next_opcode; - - case LOAD_FAST: - x = GETLOCAL(oparg); - if (x != NULL) { - Py_INCREF(x); - PUSH(x); - goto fast_next_opcode; - } - format_exc_check_arg(PyExc_UnboundLocalError, - UNBOUNDLOCAL_ERROR_MSG, - PyTuple_GetItem(co->co_varnames, oparg)); - break; - - case LOAD_CONST: - x = GETITEM(consts, oparg); - Py_INCREF(x); - PUSH(x); - goto fast_next_opcode; - - PREDICTED_WITH_ARG(STORE_FAST); - case STORE_FAST: - v = POP(); - SETLOCAL(oparg, v); - goto fast_next_opcode; - - PREDICTED(POP_TOP); - case POP_TOP: - v = POP(); - Py_DECREF(v); - goto fast_next_opcode; - - case ROT_TWO: - v = TOP(); - w = SECOND(); - SET_TOP(w); - SET_SECOND(v); - goto fast_next_opcode; - - case ROT_THREE: - v = TOP(); - w = SECOND(); - x = THIRD(); - SET_TOP(w); - SET_SECOND(x); - SET_THIRD(v); - goto fast_next_opcode; - - case ROT_FOUR: - u = TOP(); - v = SECOND(); - w = THIRD(); - x = FOURTH(); - SET_TOP(v); - SET_SECOND(w); - SET_THIRD(x); - SET_FOURTH(u); - goto fast_next_opcode; - - case DUP_TOP: - v = TOP(); - Py_INCREF(v); - PUSH(v); - goto fast_next_opcode; - - case DUP_TOPX: - if (oparg == 2) { - x = TOP(); - Py_INCREF(x); - w = SECOND(); - Py_INCREF(w); - STACKADJ(2); - SET_TOP(x); - SET_SECOND(w); - goto fast_next_opcode; - } else if (oparg == 3) { - x = TOP(); - Py_INCREF(x); - w = SECOND(); - Py_INCREF(w); - v = THIRD(); - Py_INCREF(v); - STACKADJ(3); - SET_TOP(x); - SET_SECOND(w); - SET_THIRD(v); - goto fast_next_opcode; - } - Py_FatalError("invalid argument to DUP_TOPX" - " (bytecode corruption?)"); - break; - - case UNARY_POSITIVE: - v = TOP(); - x = PyNumber_Positive(v); - Py_DECREF(v); - SET_TOP(x); - if (x != NULL) continue; - break; - - case UNARY_NEGATIVE: - v = TOP(); - x = PyNumber_Negative(v); - Py_DECREF(v); - SET_TOP(x); - if (x != NULL) continue; - break; - - case UNARY_NOT: - v = TOP(); - err = PyObject_IsTrue(v); - Py_DECREF(v); - if (err == 0) { - Py_INCREF(Py_True); - SET_TOP(Py_True); - continue; - } - else if (err > 0) { - Py_INCREF(Py_False); - SET_TOP(Py_False); - err = 0; - continue; - } - STACKADJ(-1); - break; - - case UNARY_CONVERT: - v = TOP(); - x = PyObject_Repr(v); - Py_DECREF(v); - SET_TOP(x); - if (x != NULL) continue; - break; - - case UNARY_INVERT: - v = TOP(); - x = PyNumber_Invert(v); - Py_DECREF(v); - SET_TOP(x); - if (x != NULL) continue; - break; - - case BINARY_POWER: - w = POP(); - v = TOP(); - x = PyNumber_Power(v, w, Py_None); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case BINARY_MULTIPLY: - w = POP(); - v = TOP(); - x = PyNumber_Multiply(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case BINARY_DIVIDE: - if (!_Py_QnewFlag) { - w = POP(); - v = TOP(); - x = PyNumber_Divide(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - } - /* -Qnew is in effect: fall through to - BINARY_TRUE_DIVIDE */ - case BINARY_TRUE_DIVIDE: - w = POP(); - v = TOP(); - x = PyNumber_TrueDivide(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case BINARY_FLOOR_DIVIDE: - w = POP(); - v = TOP(); - x = PyNumber_FloorDivide(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case BINARY_MODULO: - w = POP(); - v = TOP(); - x = PyNumber_Remainder(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case BINARY_ADD: - w = POP(); - v = TOP(); - if (PyInt_CheckExact(v) && PyInt_CheckExact(w)) { - /* INLINE: int + int */ - register long a, b, i; - a = PyInt_AS_LONG(v); - b = PyInt_AS_LONG(w); - i = a + b; - if ((i^a) < 0 && (i^b) < 0) - goto slow_add; - x = PyInt_FromLong(i); - } - else if (PyString_CheckExact(v) && - PyString_CheckExact(w)) { - x = string_concatenate(v, w, f, next_instr); - /* string_concatenate consumed the ref to v */ - goto skip_decref_vx; - } - else { - slow_add: - x = PyNumber_Add(v, w); - } - Py_DECREF(v); - skip_decref_vx: - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case BINARY_SUBTRACT: - w = POP(); - v = TOP(); - if (PyInt_CheckExact(v) && PyInt_CheckExact(w)) { - /* INLINE: int - int */ - register long a, b, i; - a = PyInt_AS_LONG(v); - b = PyInt_AS_LONG(w); - i = a - b; - if ((i^a) < 0 && (i^~b) < 0) - goto slow_sub; - x = PyInt_FromLong(i); - } - else { - slow_sub: - x = PyNumber_Subtract(v, w); - } - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case BINARY_SUBSCR: - w = POP(); - v = TOP(); - if (PyList_CheckExact(v) && PyInt_CheckExact(w)) { - /* INLINE: list[int] */ - Py_ssize_t i = PyInt_AsSsize_t(w); - if (i < 0) - i += PyList_GET_SIZE(v); - if (i >= 0 && i < PyList_GET_SIZE(v)) { - x = PyList_GET_ITEM(v, i); - Py_INCREF(x); - } - else - goto slow_get; - } - else - slow_get: - x = PyObject_GetItem(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case BINARY_LSHIFT: - w = POP(); - v = TOP(); - x = PyNumber_Lshift(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case BINARY_RSHIFT: - w = POP(); - v = TOP(); - x = PyNumber_Rshift(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case BINARY_AND: - w = POP(); - v = TOP(); - x = PyNumber_And(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case BINARY_XOR: - w = POP(); - v = TOP(); - x = PyNumber_Xor(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case BINARY_OR: - w = POP(); - v = TOP(); - x = PyNumber_Or(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case LIST_APPEND: - w = POP(); - v = POP(); - err = PyList_Append(v, w); - Py_DECREF(v); - Py_DECREF(w); - if (err == 0) { - PREDICT(JUMP_ABSOLUTE); - continue; - } - break; - - case INPLACE_POWER: - w = POP(); - v = TOP(); - x = PyNumber_InPlacePower(v, w, Py_None); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case INPLACE_MULTIPLY: - w = POP(); - v = TOP(); - x = PyNumber_InPlaceMultiply(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case INPLACE_DIVIDE: - if (!_Py_QnewFlag) { - w = POP(); - v = TOP(); - x = PyNumber_InPlaceDivide(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - } - /* -Qnew is in effect: fall through to - INPLACE_TRUE_DIVIDE */ - case INPLACE_TRUE_DIVIDE: - w = POP(); - v = TOP(); - x = PyNumber_InPlaceTrueDivide(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case INPLACE_FLOOR_DIVIDE: - w = POP(); - v = TOP(); - x = PyNumber_InPlaceFloorDivide(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case INPLACE_MODULO: - w = POP(); - v = TOP(); - x = PyNumber_InPlaceRemainder(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case INPLACE_ADD: - w = POP(); - v = TOP(); - if (PyInt_CheckExact(v) && PyInt_CheckExact(w)) { - /* INLINE: int + int */ - register long a, b, i; - a = PyInt_AS_LONG(v); - b = PyInt_AS_LONG(w); - i = a + b; - if ((i^a) < 0 && (i^b) < 0) - goto slow_iadd; - x = PyInt_FromLong(i); - } - else if (PyString_CheckExact(v) && - PyString_CheckExact(w)) { - x = string_concatenate(v, w, f, next_instr); - /* string_concatenate consumed the ref to v */ - goto skip_decref_v; - } - else { - slow_iadd: - x = PyNumber_InPlaceAdd(v, w); - } - Py_DECREF(v); - skip_decref_v: - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case INPLACE_SUBTRACT: - w = POP(); - v = TOP(); - if (PyInt_CheckExact(v) && PyInt_CheckExact(w)) { - /* INLINE: int - int */ - register long a, b, i; - a = PyInt_AS_LONG(v); - b = PyInt_AS_LONG(w); - i = a - b; - if ((i^a) < 0 && (i^~b) < 0) - goto slow_isub; - x = PyInt_FromLong(i); - } - else { - slow_isub: - x = PyNumber_InPlaceSubtract(v, w); - } - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case INPLACE_LSHIFT: - w = POP(); - v = TOP(); - x = PyNumber_InPlaceLshift(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case INPLACE_RSHIFT: - w = POP(); - v = TOP(); - x = PyNumber_InPlaceRshift(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case INPLACE_AND: - w = POP(); - v = TOP(); - x = PyNumber_InPlaceAnd(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case INPLACE_XOR: - w = POP(); - v = TOP(); - x = PyNumber_InPlaceXor(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case INPLACE_OR: - w = POP(); - v = TOP(); - x = PyNumber_InPlaceOr(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case SLICE+0: - case SLICE+1: - case SLICE+2: - case SLICE+3: - if ((opcode-SLICE) & 2) - w = POP(); - else - w = NULL; - if ((opcode-SLICE) & 1) - v = POP(); - else - v = NULL; - u = TOP(); - x = apply_slice(u, v, w); - Py_DECREF(u); - Py_XDECREF(v); - Py_XDECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case STORE_SLICE+0: - case STORE_SLICE+1: - case STORE_SLICE+2: - case STORE_SLICE+3: - if ((opcode-STORE_SLICE) & 2) - w = POP(); - else - w = NULL; - if ((opcode-STORE_SLICE) & 1) - v = POP(); - else - v = NULL; - u = POP(); - t = POP(); - err = assign_slice(u, v, w, t); /* u[v:w] = t */ - Py_DECREF(t); - Py_DECREF(u); - Py_XDECREF(v); - Py_XDECREF(w); - if (err == 0) continue; - break; - - case DELETE_SLICE+0: - case DELETE_SLICE+1: - case DELETE_SLICE+2: - case DELETE_SLICE+3: - if ((opcode-DELETE_SLICE) & 2) - w = POP(); - else - w = NULL; - if ((opcode-DELETE_SLICE) & 1) - v = POP(); - else - v = NULL; - u = POP(); - err = assign_slice(u, v, w, (PyObject *)NULL); - /* del u[v:w] */ - Py_DECREF(u); - Py_XDECREF(v); - Py_XDECREF(w); - if (err == 0) continue; - break; - - case STORE_SUBSCR: - w = TOP(); - v = SECOND(); - u = THIRD(); - STACKADJ(-3); - /* v[w] = u */ - err = PyObject_SetItem(v, w, u); - Py_DECREF(u); - Py_DECREF(v); - Py_DECREF(w); - if (err == 0) continue; - break; - - case DELETE_SUBSCR: - w = TOP(); - v = SECOND(); - STACKADJ(-2); - /* del v[w] */ - err = PyObject_DelItem(v, w); - Py_DECREF(v); - Py_DECREF(w); - if (err == 0) continue; - break; - - case PRINT_EXPR: - v = POP(); - w = PySys_GetObject("displayhook"); - if (w == NULL) { - PyErr_SetString(PyExc_RuntimeError, - "lost sys.displayhook"); - err = -1; - x = NULL; - } - if (err == 0) { - x = PyTuple_Pack(1, v); - if (x == NULL) - err = -1; - } - if (err == 0) { - w = PyEval_CallObject(w, x); - Py_XDECREF(w); - if (w == NULL) - err = -1; - } - Py_DECREF(v); - Py_XDECREF(x); - break; - - case PRINT_ITEM_TO: - w = stream = POP(); - /* fall through to PRINT_ITEM */ - - case PRINT_ITEM: - v = POP(); - if (stream == NULL || stream == Py_None) { - w = PySys_GetObject("stdout"); - if (w == NULL) { - PyErr_SetString(PyExc_RuntimeError, - "lost sys.stdout"); - err = -1; - } - } - /* PyFile_SoftSpace() can exececute arbitrary code - if sys.stdout is an instance with a __getattr__. - If __getattr__ raises an exception, w will - be freed, so we need to prevent that temporarily. */ - Py_XINCREF(w); - if (w != NULL && PyFile_SoftSpace(w, 0)) - err = PyFile_WriteString(" ", w); - if (err == 0) - err = PyFile_WriteObject(v, w, Py_PRINT_RAW); - if (err == 0) { - /* XXX move into writeobject() ? */ - if (PyString_Check(v)) { - char *s = PyString_AS_STRING(v); - Py_ssize_t len = PyString_GET_SIZE(v); - if (len == 0 || - !isspace(Py_CHARMASK(s[len-1])) || - s[len-1] == ' ') - PyFile_SoftSpace(w, 1); - } -#ifdef Py_USING_UNICODE - else if (PyUnicode_Check(v)) { - Py_UNICODE *s = PyUnicode_AS_UNICODE(v); - Py_ssize_t len = PyUnicode_GET_SIZE(v); - if (len == 0 || - !Py_UNICODE_ISSPACE(s[len-1]) || - s[len-1] == ' ') - PyFile_SoftSpace(w, 1); - } -#endif - else - PyFile_SoftSpace(w, 1); - } - Py_XDECREF(w); - Py_DECREF(v); - Py_XDECREF(stream); - stream = NULL; - if (err == 0) - continue; - break; - - case PRINT_NEWLINE_TO: - w = stream = POP(); - /* fall through to PRINT_NEWLINE */ - - case PRINT_NEWLINE: - if (stream == NULL || stream == Py_None) { - w = PySys_GetObject("stdout"); - if (w == NULL) - PyErr_SetString(PyExc_RuntimeError, - "lost sys.stdout"); - } - if (w != NULL) { - err = PyFile_WriteString("\n", w); - if (err == 0) - PyFile_SoftSpace(w, 0); - } - Py_XDECREF(stream); - stream = NULL; - break; - - -#ifdef CASE_TOO_BIG - default: switch (opcode) { -#endif - case RAISE_VARARGS: - u = v = w = NULL; - switch (oparg) { - case 3: - u = POP(); /* traceback */ - /* Fallthrough */ - case 2: - v = POP(); /* value */ - /* Fallthrough */ - case 1: - w = POP(); /* exc */ - case 0: /* Fallthrough */ - why = do_raise(w, v, u); - break; - default: - PyErr_SetString(PyExc_SystemError, - "bad RAISE_VARARGS oparg"); - why = WHY_EXCEPTION; - break; - } - break; - - case LOAD_LOCALS: - if ((x = f->f_locals) != NULL) { - Py_INCREF(x); - PUSH(x); - continue; - } - PyErr_SetString(PyExc_SystemError, "no locals"); - break; - - case RETURN_VALUE: - retval = POP(); - why = WHY_RETURN; - goto fast_block_end; - - case YIELD_VALUE: - retval = POP(); - f->f_stacktop = stack_pointer; - why = WHY_YIELD; - goto fast_yield; - - case EXEC_STMT: - w = TOP(); - v = SECOND(); - u = THIRD(); - STACKADJ(-3); - READ_TIMESTAMP(intr0); - err = exec_statement(f, u, v, w); - READ_TIMESTAMP(intr1); - Py_DECREF(u); - Py_DECREF(v); - Py_DECREF(w); - break; - - case POP_BLOCK: - { - PyTryBlock *b = PyFrame_BlockPop(f); - while (STACK_LEVEL() > b->b_level) { - v = POP(); - Py_DECREF(v); - } - } - continue; - - case END_FINALLY: - v = POP(); - if (PyInt_Check(v)) { - why = (enum why_code) PyInt_AS_LONG(v); - assert(why != WHY_YIELD); - if (why == WHY_RETURN || - why == WHY_CONTINUE) - retval = POP(); - } - else if (PyExceptionClass_Check(v) || PyString_Check(v)) { - w = POP(); - u = POP(); - PyErr_Restore(v, w, u); - why = WHY_RERAISE; - break; - } - else if (v != Py_None) { - PyErr_SetString(PyExc_SystemError, - "'finally' pops bad exception"); - why = WHY_EXCEPTION; - } - Py_DECREF(v); - break; - - case BUILD_CLASS: - u = TOP(); - v = SECOND(); - w = THIRD(); - STACKADJ(-2); - x = build_class(u, v, w); - SET_TOP(x); - Py_DECREF(u); - Py_DECREF(v); - Py_DECREF(w); - break; - - case STORE_NAME: - w = GETITEM(names, oparg); - v = POP(); - if ((x = f->f_locals) != NULL) { - if (PyDict_CheckExact(x)) - err = PyDict_SetItem(x, w, v); - else - err = PyObject_SetItem(x, w, v); - Py_DECREF(v); - if (err == 0) continue; - break; - } - PyErr_Format(PyExc_SystemError, - "no locals found when storing %s", - PyObject_REPR(w)); - break; - - case DELETE_NAME: - w = GETITEM(names, oparg); - if ((x = f->f_locals) != NULL) { - if ((err = PyObject_DelItem(x, w)) != 0) - format_exc_check_arg(PyExc_NameError, - NAME_ERROR_MSG ,w); - break; - } - PyErr_Format(PyExc_SystemError, - "no locals when deleting %s", - PyObject_REPR(w)); - break; - - PREDICTED_WITH_ARG(UNPACK_SEQUENCE); - case UNPACK_SEQUENCE: - v = POP(); - if (PyTuple_CheckExact(v) && PyTuple_GET_SIZE(v) == oparg) { - PyObject **items = ((PyTupleObject *)v)->ob_item; - while (oparg--) { - w = items[oparg]; - Py_INCREF(w); - PUSH(w); - } - Py_DECREF(v); - continue; - } else if (PyList_CheckExact(v) && PyList_GET_SIZE(v) == oparg) { - PyObject **items = ((PyListObject *)v)->ob_item; - while (oparg--) { - w = items[oparg]; - Py_INCREF(w); - PUSH(w); - } - } else if (unpack_iterable(v, oparg, - stack_pointer + oparg)) - stack_pointer += oparg; - else { - if (PyErr_ExceptionMatches(PyExc_TypeError)) - PyErr_SetString(PyExc_TypeError, - "unpack non-sequence"); - why = WHY_EXCEPTION; - } - Py_DECREF(v); - break; - - case STORE_ATTR: - w = GETITEM(names, oparg); - v = TOP(); - u = SECOND(); - STACKADJ(-2); - err = PyObject_SetAttr(v, w, u); /* v.w = u */ - Py_DECREF(v); - Py_DECREF(u); - if (err == 0) continue; - break; - - case DELETE_ATTR: - w = GETITEM(names, oparg); - v = POP(); - err = PyObject_SetAttr(v, w, (PyObject *)NULL); - /* del v.w */ - Py_DECREF(v); - break; - - case STORE_GLOBAL: - w = GETITEM(names, oparg); - v = POP(); - err = PyDict_SetItem(f->f_globals, w, v); - Py_DECREF(v); - if (err == 0) continue; - break; - - case DELETE_GLOBAL: - w = GETITEM(names, oparg); - if ((err = PyDict_DelItem(f->f_globals, w)) != 0) - format_exc_check_arg( - PyExc_NameError, GLOBAL_NAME_ERROR_MSG, w); - break; - - case LOAD_NAME: - w = GETITEM(names, oparg); - if ((v = f->f_locals) == NULL) { - PyErr_Format(PyExc_SystemError, - "no locals when loading %s", - PyObject_REPR(w)); - break; - } - if (PyDict_CheckExact(v)) { - x = PyDict_GetItem(v, w); - Py_XINCREF(x); - } - else { - x = PyObject_GetItem(v, w); - if (x == NULL && PyErr_Occurred()) { - if (!PyErr_ExceptionMatches(PyExc_KeyError)) - break; - PyErr_Clear(); - } - } - if (x == NULL) { - x = PyDict_GetItem(f->f_globals, w); - if (x == NULL) { - x = PyDict_GetItem(f->f_builtins, w); - if (x == NULL) { - format_exc_check_arg( - PyExc_NameError, - NAME_ERROR_MSG ,w); - break; - } - } - Py_INCREF(x); - } - PUSH(x); - continue; - - case LOAD_GLOBAL: - w = GETITEM(names, oparg); - if (PyString_CheckExact(w)) { - /* Inline the PyDict_GetItem() calls. - WARNING: this is an extreme speed hack. - Do not try this at home. */ - long hash = ((PyStringObject *)w)->ob_shash; - if (hash != -1) { - PyDictObject *d; - PyDictEntry *e; - d = (PyDictObject *)(f->f_globals); - e = d->ma_lookup(d, w, hash); - if (e == NULL) { - x = NULL; - break; - } - x = e->me_value; - if (x != NULL) { - Py_INCREF(x); - PUSH(x); - continue; - } - d = (PyDictObject *)(f->f_builtins); - e = d->ma_lookup(d, w, hash); - if (e == NULL) { - x = NULL; - break; - } - x = e->me_value; - if (x != NULL) { - Py_INCREF(x); - PUSH(x); - continue; - } - goto load_global_error; - } - } - /* This is the un-inlined version of the code above */ - x = PyDict_GetItem(f->f_globals, w); - if (x == NULL) { - x = PyDict_GetItem(f->f_builtins, w); - if (x == NULL) { - load_global_error: - format_exc_check_arg( - PyExc_NameError, - GLOBAL_NAME_ERROR_MSG, w); - break; - } - } - Py_INCREF(x); - PUSH(x); - continue; - - case DELETE_FAST: - x = GETLOCAL(oparg); - if (x != NULL) { - SETLOCAL(oparg, NULL); - continue; - } - format_exc_check_arg( - PyExc_UnboundLocalError, - UNBOUNDLOCAL_ERROR_MSG, - PyTuple_GetItem(co->co_varnames, oparg) - ); - break; - - case LOAD_CLOSURE: - x = freevars[oparg]; - Py_INCREF(x); - PUSH(x); - if (x != NULL) continue; - break; - - case LOAD_DEREF: - x = freevars[oparg]; - w = PyCell_Get(x); - if (w != NULL) { - PUSH(w); - continue; - } - err = -1; - /* Don't stomp existing exception */ - if (PyErr_Occurred()) - break; - if (oparg < PyTuple_GET_SIZE(co->co_cellvars)) { - v = PyTuple_GET_ITEM(co->co_cellvars, - oparg); - format_exc_check_arg( - PyExc_UnboundLocalError, - UNBOUNDLOCAL_ERROR_MSG, - v); - } else { - v = PyTuple_GET_ITEM( - co->co_freevars, - oparg - PyTuple_GET_SIZE(co->co_cellvars)); - format_exc_check_arg( - PyExc_NameError, - UNBOUNDFREE_ERROR_MSG, - v); - } - break; - - case STORE_DEREF: - w = POP(); - x = freevars[oparg]; - PyCell_Set(x, w); - Py_DECREF(w); - continue; - - case BUILD_TUPLE: - x = PyTuple_New(oparg); - if (x != NULL) { - for (; --oparg >= 0;) { - w = POP(); - PyTuple_SET_ITEM(x, oparg, w); - } - PUSH(x); - continue; - } - break; - - case BUILD_LIST: - x = PyList_New(oparg); - if (x != NULL) { - for (; --oparg >= 0;) { - w = POP(); - PyList_SET_ITEM(x, oparg, w); - } - PUSH(x); - continue; - } - break; - - case BUILD_MAP: - x = PyDict_New(); - PUSH(x); - if (x != NULL) continue; - break; - - case LOAD_ATTR: - w = GETITEM(names, oparg); - v = TOP(); - x = PyObject_GetAttr(v, w); - Py_DECREF(v); - SET_TOP(x); - if (x != NULL) continue; - break; - - case COMPARE_OP: - w = POP(); - v = TOP(); - if (PyInt_CheckExact(w) && PyInt_CheckExact(v)) { - /* INLINE: cmp(int, int) */ - register long a, b; - register int res; - a = PyInt_AS_LONG(v); - b = PyInt_AS_LONG(w); - switch (oparg) { - case PyCmp_LT: res = a < b; break; - case PyCmp_LE: res = a <= b; break; - case PyCmp_EQ: res = a == b; break; - case PyCmp_NE: res = a != b; break; - case PyCmp_GT: res = a > b; break; - case PyCmp_GE: res = a >= b; break; - case PyCmp_IS: res = v == w; break; - case PyCmp_IS_NOT: res = v != w; break; - default: goto slow_compare; - } - x = res ? Py_True : Py_False; - Py_INCREF(x); - } - else { - slow_compare: - x = cmp_outcome(oparg, v, w); - } - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x == NULL) break; - PREDICT(JUMP_IF_FALSE); - PREDICT(JUMP_IF_TRUE); - continue; - - case IMPORT_NAME: - w = GETITEM(names, oparg); - x = PyDict_GetItemString(f->f_builtins, "__import__"); - if (x == NULL) { - PyErr_SetString(PyExc_ImportError, - "__import__ not found"); - break; - } - v = POP(); - u = TOP(); - if (PyInt_AsLong(u) != -1 || PyErr_Occurred()) - w = PyTuple_Pack(5, - w, - f->f_globals, - f->f_locals == NULL ? - Py_None : f->f_locals, - v, - u); - else - w = PyTuple_Pack(4, - w, - f->f_globals, - f->f_locals == NULL ? - Py_None : f->f_locals, - v); - Py_DECREF(v); - Py_DECREF(u); - if (w == NULL) { - u = POP(); - x = NULL; - break; - } - READ_TIMESTAMP(intr0); - x = PyEval_CallObject(x, w); - READ_TIMESTAMP(intr1); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case IMPORT_STAR: - v = POP(); - PyFrame_FastToLocals(f); - if ((x = f->f_locals) == NULL) { - PyErr_SetString(PyExc_SystemError, - "no locals found during 'import *'"); - break; - } - READ_TIMESTAMP(intr0); - err = import_all_from(x, v); - READ_TIMESTAMP(intr1); - PyFrame_LocalsToFast(f, 0); - Py_DECREF(v); - if (err == 0) continue; - break; - - case IMPORT_FROM: - w = GETITEM(names, oparg); - v = TOP(); - READ_TIMESTAMP(intr0); - x = import_from(v, w); - READ_TIMESTAMP(intr1); - PUSH(x); - if (x != NULL) continue; - break; - - case JUMP_FORWARD: - JUMPBY(oparg); - goto fast_next_opcode; - - PREDICTED_WITH_ARG(JUMP_IF_FALSE); - case JUMP_IF_FALSE: - w = TOP(); - if (w == Py_True) { - PREDICT(POP_TOP); - goto fast_next_opcode; - } - if (w == Py_False) { - JUMPBY(oparg); - goto fast_next_opcode; - } - err = PyObject_IsTrue(w); - if (err > 0) - err = 0; - else if (err == 0) - JUMPBY(oparg); - else - break; - continue; - - PREDICTED_WITH_ARG(JUMP_IF_TRUE); - case JUMP_IF_TRUE: - w = TOP(); - if (w == Py_False) { - PREDICT(POP_TOP); - goto fast_next_opcode; - } - if (w == Py_True) { - JUMPBY(oparg); - goto fast_next_opcode; - } - err = PyObject_IsTrue(w); - if (err > 0) { - err = 0; - JUMPBY(oparg); - } - else if (err == 0) - ; - else - break; - continue; - - PREDICTED_WITH_ARG(JUMP_ABSOLUTE); - case JUMP_ABSOLUTE: - JUMPTO(oparg); - continue; - - case GET_ITER: - /* before: [obj]; after [getiter(obj)] */ - v = TOP(); - x = PyObject_GetIter(v); - Py_DECREF(v); - if (x != NULL) { - SET_TOP(x); - PREDICT(FOR_ITER); - continue; - } - STACKADJ(-1); - break; - - PREDICTED_WITH_ARG(FOR_ITER); - case FOR_ITER: - /* before: [iter]; after: [iter, iter()] *or* [] */ - v = TOP(); - x = (*v->ob_type->tp_iternext)(v); - if (x != NULL) { - PUSH(x); - PREDICT(STORE_FAST); - PREDICT(UNPACK_SEQUENCE); - continue; - } - if (PyErr_Occurred()) { - if (!PyErr_ExceptionMatches(PyExc_StopIteration)) - break; - PyErr_Clear(); - } - /* iterator ended normally */ - x = v = POP(); - Py_DECREF(v); - JUMPBY(oparg); - continue; - - case BREAK_LOOP: - why = WHY_BREAK; - goto fast_block_end; - - case CONTINUE_LOOP: - retval = PyInt_FromLong(oparg); - if (!retval) { - x = NULL; - break; - } - why = WHY_CONTINUE; - goto fast_block_end; - - case SETUP_LOOP: - case SETUP_EXCEPT: - case SETUP_FINALLY: - /* NOTE: If you add any new block-setup opcodes that are not try/except/finally - handlers, you may need to update the PyGen_NeedsFinalizing() function. */ - - PyFrame_BlockSetup(f, opcode, INSTR_OFFSET() + oparg, - STACK_LEVEL()); - continue; - - case WITH_CLEANUP: - { - /* TOP is the context.__exit__ bound method. - Below that are 1-3 values indicating how/why - we entered the finally clause: - - SECOND = None - - (SECOND, THIRD) = (WHY_{RETURN,CONTINUE}), retval - - SECOND = WHY_*; no retval below it - - (SECOND, THIRD, FOURTH) = exc_info() - In the last case, we must call - TOP(SECOND, THIRD, FOURTH) - otherwise we must call - TOP(None, None, None) - - In addition, if the stack represents an exception, - *and* the function call returns a 'true' value, we - "zap" this information, to prevent END_FINALLY from - re-raising the exception. (But non-local gotos - should still be resumed.) - */ - - x = TOP(); - u = SECOND(); - if (PyInt_Check(u) || u == Py_None) { - u = v = w = Py_None; - } - else { - v = THIRD(); - w = FOURTH(); - } - /* XXX Not the fastest way to call it... */ - x = PyObject_CallFunctionObjArgs(x, u, v, w, NULL); - if (x == NULL) - break; /* Go to error exit */ - if (u != Py_None && PyObject_IsTrue(x)) { - /* There was an exception and a true return */ - Py_DECREF(x); - x = TOP(); /* Again */ - STACKADJ(-3); - Py_INCREF(Py_None); - SET_TOP(Py_None); - Py_DECREF(x); - Py_DECREF(u); - Py_DECREF(v); - Py_DECREF(w); - } else { - /* Let END_FINALLY do its thing */ - Py_DECREF(x); - x = POP(); - Py_DECREF(x); - } - break; - } - - case CALL_FUNCTION: - { - PyObject **sp; - PCALL(PCALL_ALL); - sp = stack_pointer; -#ifdef WITH_TSC - x = call_function(&sp, oparg, &intr0, &intr1); -#else - x = call_function(&sp, oparg); -#endif - stack_pointer = sp; - PUSH(x); - if (x != NULL) - continue; - break; - } - - case CALL_FUNCTION_VAR: - case CALL_FUNCTION_KW: - case CALL_FUNCTION_VAR_KW: - { - int na = oparg & 0xff; - int nk = (oparg>>8) & 0xff; - int flags = (opcode - CALL_FUNCTION) & 3; - int n = na + 2 * nk; - PyObject **pfunc, *func, **sp; - PCALL(PCALL_ALL); - if (flags & CALL_FLAG_VAR) - n++; - if (flags & CALL_FLAG_KW) - n++; - pfunc = stack_pointer - n - 1; - func = *pfunc; - - if (PyMethod_Check(func) - && PyMethod_GET_SELF(func) != NULL) { - PyObject *self = PyMethod_GET_SELF(func); - Py_INCREF(self); - func = PyMethod_GET_FUNCTION(func); - Py_INCREF(func); - Py_DECREF(*pfunc); - *pfunc = self; - na++; - n++; - } else - Py_INCREF(func); - sp = stack_pointer; - READ_TIMESTAMP(intr0); - x = ext_do_call(func, &sp, flags, na, nk); - READ_TIMESTAMP(intr1); - stack_pointer = sp; - Py_DECREF(func); - - while (stack_pointer > pfunc) { - w = POP(); - Py_DECREF(w); - } - PUSH(x); - if (x != NULL) - continue; - break; - } - - case MAKE_FUNCTION: - v = POP(); /* code object */ - x = PyFunction_New(v, f->f_globals); - Py_DECREF(v); - /* XXX Maybe this should be a separate opcode? */ - if (x != NULL && oparg > 0) { - v = PyTuple_New(oparg); - if (v == NULL) { - Py_DECREF(x); - x = NULL; - break; - } - while (--oparg >= 0) { - w = POP(); - PyTuple_SET_ITEM(v, oparg, w); - } - err = PyFunction_SetDefaults(x, v); - Py_DECREF(v); - } - PUSH(x); - break; - - case MAKE_CLOSURE: - { - v = POP(); /* code object */ - x = PyFunction_New(v, f->f_globals); - Py_DECREF(v); - if (x != NULL) { - v = POP(); - err = PyFunction_SetClosure(x, v); - Py_DECREF(v); - } - if (x != NULL && oparg > 0) { - v = PyTuple_New(oparg); - if (v == NULL) { - Py_DECREF(x); - x = NULL; - break; - } - while (--oparg >= 0) { - w = POP(); - PyTuple_SET_ITEM(v, oparg, w); - } - err = PyFunction_SetDefaults(x, v); - Py_DECREF(v); - } - PUSH(x); - break; - } - - case BUILD_SLICE: - if (oparg == 3) - w = POP(); - else - w = NULL; - v = POP(); - u = TOP(); - x = PySlice_New(u, v, w); - Py_DECREF(u); - Py_DECREF(v); - Py_XDECREF(w); - SET_TOP(x); - if (x != NULL) continue; - break; - - case EXTENDED_ARG: - opcode = NEXTOP(); - oparg = oparg<<16 | NEXTARG(); - goto dispatch_opcode; - - default: - fprintf(stderr, - "XXX lineno: %d, opcode: %d\n", - PyCode_Addr2Line(f->f_code, f->f_lasti), - opcode); - PyErr_SetString(PyExc_SystemError, "unknown opcode"); - why = WHY_EXCEPTION; - break; - -#ifdef CASE_TOO_BIG - } -#endif - - } /* switch */ - - on_error: - - READ_TIMESTAMP(inst1); - - /* Quickly continue if no error occurred */ - - if (why == WHY_NOT) { - if (err == 0 && x != NULL) { -#ifdef CHECKEXC - /* This check is expensive! */ - if (PyErr_Occurred()) - fprintf(stderr, - "XXX undetected error\n"); - else { -#endif - READ_TIMESTAMP(loop1); - continue; /* Normal, fast path */ -#ifdef CHECKEXC - } -#endif - } - why = WHY_EXCEPTION; - x = Py_None; - err = 0; - } - - /* Double-check exception status */ - - if (why == WHY_EXCEPTION || why == WHY_RERAISE) { - if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_SystemError, - "error return without exception set"); - why = WHY_EXCEPTION; - } - } -#ifdef CHECKEXC - else { - /* This check is expensive! */ - if (PyErr_Occurred()) { - char buf[1024]; - sprintf(buf, "Stack unwind with exception " - "set and why=%d", why); - Py_FatalError(buf); - } - } -#endif - - /* Log traceback info if this is a real exception */ - - if (why == WHY_EXCEPTION) { - PyTraceBack_Here(f); - - if (tstate->c_tracefunc != NULL) - call_exc_trace(tstate->c_tracefunc, - tstate->c_traceobj, f); - } - - /* For the rest, treat WHY_RERAISE as WHY_EXCEPTION */ - - if (why == WHY_RERAISE) - why = WHY_EXCEPTION; - - /* Unwind stacks if a (pseudo) exception occurred */ - -fast_block_end: - while (why != WHY_NOT && f->f_iblock > 0) { - PyTryBlock *b = PyFrame_BlockPop(f); - - assert(why != WHY_YIELD); - if (b->b_type == SETUP_LOOP && why == WHY_CONTINUE) { - /* For a continue inside a try block, - don't pop the block for the loop. */ - PyFrame_BlockSetup(f, b->b_type, b->b_handler, - b->b_level); - why = WHY_NOT; - JUMPTO(PyInt_AS_LONG(retval)); - Py_DECREF(retval); - break; - } - - while (STACK_LEVEL() > b->b_level) { - v = POP(); - Py_XDECREF(v); - } - if (b->b_type == SETUP_LOOP && why == WHY_BREAK) { - why = WHY_NOT; - JUMPTO(b->b_handler); - break; - } - if (b->b_type == SETUP_FINALLY || - (b->b_type == SETUP_EXCEPT && - why == WHY_EXCEPTION)) { - if (why == WHY_EXCEPTION) { - PyObject *exc, *val, *tb; - PyErr_Fetch(&exc, &val, &tb); - if (val == NULL) { - val = Py_None; - Py_INCREF(val); - } - /* Make the raw exception data - available to the handler, - so a program can emulate the - Python main loop. Don't do - this for 'finally'. */ - if (b->b_type == SETUP_EXCEPT) { - PyErr_NormalizeException( - &exc, &val, &tb); - set_exc_info(tstate, - exc, val, tb); - } - if (tb == NULL) { - Py_INCREF(Py_None); - PUSH(Py_None); - } else - PUSH(tb); - PUSH(val); - PUSH(exc); - } - else { - if (why & (WHY_RETURN | WHY_CONTINUE)) - PUSH(retval); - v = PyInt_FromLong((long)why); - PUSH(v); - } - why = WHY_NOT; - JUMPTO(b->b_handler); - break; - } - } /* unwind stack */ - - /* End the loop if we still have an error (or return) */ - - if (why != WHY_NOT) - break; - READ_TIMESTAMP(loop1); - - } /* main loop */ - - assert(why != WHY_YIELD); - /* Pop remaining stack entries. */ - while (!EMPTY()) { - v = POP(); - Py_XDECREF(v); - } - - if (why != WHY_RETURN) - retval = NULL; - -fast_yield: - if (tstate->use_tracing) { - if (tstate->c_tracefunc) { - if (why == WHY_RETURN || why == WHY_YIELD) { - if (call_trace(tstate->c_tracefunc, - tstate->c_traceobj, f, - PyTrace_RETURN, retval)) { - Py_XDECREF(retval); - retval = NULL; - why = WHY_EXCEPTION; - } - } - else if (why == WHY_EXCEPTION) { - call_trace_protected(tstate->c_tracefunc, - tstate->c_traceobj, f, - PyTrace_RETURN, NULL); - } - } - if (tstate->c_profilefunc) { - if (why == WHY_EXCEPTION) - call_trace_protected(tstate->c_profilefunc, - tstate->c_profileobj, f, - PyTrace_RETURN, NULL); - else if (call_trace(tstate->c_profilefunc, - tstate->c_profileobj, f, - PyTrace_RETURN, retval)) { - Py_XDECREF(retval); - retval = NULL; - why = WHY_EXCEPTION; - } - } - } - - if (tstate->frame->f_exc_type != NULL) - reset_exc_info(tstate); - else { - assert(tstate->frame->f_exc_value == NULL); - assert(tstate->frame->f_exc_traceback == NULL); - } - - /* pop frame */ - exit_eval_frame: - Py_LeaveRecursiveCall(); - tstate->frame = f->f_back; - - return retval; -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/cheetah_example.html b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/cheetah_example.html deleted file mode 100644 index e2a0f47..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/cheetah_example.html +++ /dev/null @@ -1,13 +0,0 @@ - - $title - - - #for $client in $clients - - - - - #end for -
$client.surname, $client.firstname$client.email
- - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/classes.dylan b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/classes.dylan deleted file mode 100644 index 83faf69..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/classes.dylan +++ /dev/null @@ -1,125 +0,0 @@ -module: sample -comment: for make sure that does not highlight per word. - and it continues on to the next line. - -define class () - slot serial-number :: = unique-serial-number(); - constant slot model-name :: , - required-init-keyword: model:; - each-subclass slot has-sunroof? :: , - init-keyword: sunroof?:, - init-value: #f; - keyword foo:; - required keyword bar:; -end class ; - -define class () -end class ; - -let flying-car = make(); -let car? :: = #f; -let prefixed-car :: = #f; -let model :: = #f; - -define constant $empty-string = ""; -define constant $escaped-backslash = '\\'; -define constant $escaped-single-quote = '\''; - -define variable *unique-serial-number* = 0; - -define function unique-serial-number() => (usn :: ) - let serial = *unique-serial-number*; - *unique-serial-number* := *unique-serial-number* + 1; - serial; -end function; - -define constant $blue-car = make(, model: "Viper"); -define constant $black-car = make(, model: "Town Car", sunroof?: #t); -define constant $red-car = make(, model: "F40", sunroof?: #f); - -define method foo() => _ :: - #t -end method; - -define method foo() => _ :: ; - #t -end method; - -define method \+ - (offset1 :: , offset2 :: ) - => (sum :: ) - let sum = offset1.total-seconds + offset2.total-seconds; - make(, total-seconds: sum); -end method \+; - -define method bar () - 1 | 2 & 3 -end - -if (bar) - 1 -elseif (foo) - 2 -else - 3 -end if; - -select (foo by instance?) - => 1 - otherwise => 3 -end select; - -/* multi - line - comment -*/ - -/* multi line comments - /* can be */ - nested */ - -define constant $symbol = #"hello"; -define variable *vector* = #[3.5, 5] -define constant $list = #(1, 2); -define constant $pair = #(1 . "foo") - -let octal-number = #o238; -let hex-number = #x3890ADEF; -let binary-number = #b1010; -let float-exponent = 3.5e10; - -block (return) - with-lock (lock) - return(); - end; -exception (e :: ) - format-out("Oh no"); -cleanup - return(); -afterwards - format-out("Hello"); -end; - -define macro repeat - { repeat ?:body end } - => { block (?=stop!) - local method again() ?body; again() end; - again(); - end } -end macro repeat; - -define macro with-decoded-seconds - { - with-decoded-seconds - (?max:variable, ?min:variable, ?sec:variable = ?time:expression) - ?:body - end - } - => { - let (?max, ?min, ?sec) = decode-total-seconds(?time); - ?body - } -end macro; - -let x = "This size call should be seen as a builtin despite the odd case.".siZe; - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/clojure-weird-keywords.clj b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/clojure-weird-keywords.clj deleted file mode 100644 index 2d914c5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/clojure-weird-keywords.clj +++ /dev/null @@ -1,5 +0,0 @@ -; Note, clojure lexer is here (and is a good deal more liberal than the language spec: -; https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/LispReader.java#L62 - -(defn valid [#^java.lang.reflect.Method meth] - [:keyword :#initial-hash :h#sh-in-middle :hash-at-end# #js {:keyword "value"}]) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/condensed_ruby.rb b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/condensed_ruby.rb deleted file mode 100644 index afe57aa..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/condensed_ruby.rb +++ /dev/null @@ -1,10 +0,0 @@ -# Server: ruby p2p.rb password server server-uri merge-servers -# Sample: ruby p2p.rb foobar server druby://localhost:1337 druby://foo.bar:1337 -# Client: ruby p2p.rb password client server-uri download-pattern -# Sample: ruby p2p.rb foobar client druby://localhost:1337 *.rb -require'drb';F,D,C,P,M,U,*O=File,Class,Dir,*ARGV;def s(p)F.split(p[/[^|].*/])[-1 -]end;def c(u);DRbObject.new((),u)end;def x(u)[P,u].hash;end;M=="client"&&c(U).f( -x(U)).each{|n|p,c=x(n),c(n);(c.f(p,O[0],0).map{|f|s f}-D["*"]).each{|f|F.open(f, -"w"){|o|o< R x y -> False. - -(** Opaque for proof-search. *) -Typeclasses Opaque complement. - -(** These are convertible. *) - -Lemma complement_inverse : forall A (R : relation A), complement (inverse R) = inverse (complement R). -Proof. reflexivity. Qed. - -(** We rebind relations in separate classes to be able to overload each proof. *) - -Set Implicit Arguments. -Unset Strict Implicit. - -Class Reflexive {A} (R : relation A) := - reflexivity : forall x, R x x. - -Class Irreflexive {A} (R : relation A) := - irreflexivity : Reflexive (complement R). - -Hint Extern 1 (Reflexive (complement _)) => class_apply @irreflexivity : typeclass_instances. - -Class Symmetric {A} (R : relation A) := - symmetry : forall x y, R x y -> R y x. - -Class Asymmetric {A} (R : relation A) := - asymmetry : forall x y, R x y -> R y x -> False. - -Class Transitive {A} (R : relation A) := - transitivity : forall x y z, R x y -> R y z -> R x z. - -Hint Resolve @irreflexivity : ord. - -Unset Implicit Arguments. - -(** A HintDb for relations. *) - -Ltac solve_relation := - match goal with - | [ |- ?R ?x ?x ] => reflexivity - | [ H : ?R ?x ?y |- ?R ?y ?x ] => symmetry ; exact H - end. - -Hint Extern 4 => solve_relation : relations. - -(** We can already dualize all these properties. *) - -Generalizable Variables A B C D R S T U l eqA eqB eqC eqD. - -Lemma flip_Reflexive `{Reflexive A R} : Reflexive (flip R). -Proof. tauto. Qed. - -Hint Extern 3 (Reflexive (flip _)) => apply flip_Reflexive : typeclass_instances. - -Program Definition flip_Irreflexive `(Irreflexive A R) : Irreflexive (flip R) := - irreflexivity (R:=R). - -Program Definition flip_Symmetric `(Symmetric A R) : Symmetric (flip R) := - fun x y H => symmetry (R:=R) H. - -Program Definition flip_Asymmetric `(Asymmetric A R) : Asymmetric (flip R) := - fun x y H H' => asymmetry (R:=R) H H'. - -Program Definition flip_Transitive `(Transitive A R) : Transitive (flip R) := - fun x y z H H' => transitivity (R:=R) H' H. - -Hint Extern 3 (Irreflexive (flip _)) => class_apply flip_Irreflexive : typeclass_instances. -Hint Extern 3 (Symmetric (flip _)) => class_apply flip_Symmetric : typeclass_instances. -Hint Extern 3 (Asymmetric (flip _)) => class_apply flip_Asymmetric : typeclass_instances. -Hint Extern 3 (Transitive (flip _)) => class_apply flip_Transitive : typeclass_instances. - -Definition Reflexive_complement_Irreflexive `(Reflexive A (R : relation A)) - : Irreflexive (complement R). -Proof. firstorder. Qed. - -Definition complement_Symmetric `(Symmetric A (R : relation A)) : Symmetric (complement R). -Proof. firstorder. Qed. - -Hint Extern 3 (Symmetric (complement _)) => class_apply complement_Symmetric : typeclass_instances. -Hint Extern 3 (Irreflexive (complement _)) => class_apply Reflexive_complement_Irreflexive : typeclass_instances. - -(** * Standard instances. *) - -Ltac reduce_hyp H := - match type of H with - | context [ _ <-> _ ] => fail 1 - | _ => red in H ; try reduce_hyp H - end. - -Ltac reduce_goal := - match goal with - | [ |- _ <-> _ ] => fail 1 - | _ => red ; intros ; try reduce_goal - end. - -Tactic Notation "reduce" "in" hyp(Hid) := reduce_hyp Hid. - -Ltac reduce := reduce_goal. - -Tactic Notation "apply" "*" constr(t) := - first [ refine t | refine (t _) | refine (t _ _) | refine (t _ _ _) | refine (t _ _ _ _) | - refine (t _ _ _ _ _) | refine (t _ _ _ _ _ _) | refine (t _ _ _ _ _ _ _) ]. - -Ltac simpl_relation := - unfold flip, impl, arrow ; try reduce ; program_simpl ; - try ( solve [ intuition ]). - -Local Obligation Tactic := simpl_relation. - -(** Logical implication. *) - -Program Instance impl_Reflexive : Reflexive impl. -Program Instance impl_Transitive : Transitive impl. - -(** Logical equivalence. *) - -Program Instance iff_Reflexive : Reflexive iff. -Program Instance iff_Symmetric : Symmetric iff. -Program Instance iff_Transitive : Transitive iff. - -(** Leibniz equality. *) - -Instance eq_Reflexive {A} : Reflexive (@eq A) := @eq_refl A. -Instance eq_Symmetric {A} : Symmetric (@eq A) := @eq_sym A. -Instance eq_Transitive {A} : Transitive (@eq A) := @eq_trans A. - -(** Various combinations of reflexivity, symmetry and transitivity. *) - -(** A [PreOrder] is both Reflexive and Transitive. *) - -Class PreOrder {A} (R : relation A) : Prop := { - PreOrder_Reflexive :> Reflexive R ; - PreOrder_Transitive :> Transitive R }. - -(** A partial equivalence relation is Symmetric and Transitive. *) - -Class PER {A} (R : relation A) : Prop := { - PER_Symmetric :> Symmetric R ; - PER_Transitive :> Transitive R }. - -(** Equivalence relations. *) - -Class Equivalence {A} (R : relation A) : Prop := { - Equivalence_Reflexive :> Reflexive R ; - Equivalence_Symmetric :> Symmetric R ; - Equivalence_Transitive :> Transitive R }. - -(** An Equivalence is a PER plus reflexivity. *) - -Instance Equivalence_PER `(Equivalence A R) : PER R | 10 := - { PER_Symmetric := Equivalence_Symmetric ; - PER_Transitive := Equivalence_Transitive }. - -(** We can now define antisymmetry w.r.t. an equivalence relation on the carrier. *) - -Class Antisymmetric A eqA `{equ : Equivalence A eqA} (R : relation A) := - antisymmetry : forall {x y}, R x y -> R y x -> eqA x y. - -Program Definition flip_antiSymmetric `(Antisymmetric A eqA R) : - Antisymmetric A eqA (flip R). -Proof. firstorder. Qed. - -(** Leibinz equality [eq] is an equivalence relation. - The instance has low priority as it is always applicable - if only the type is constrained. *) - -Program Instance eq_equivalence : Equivalence (@eq A) | 10. - -(** Logical equivalence [iff] is an equivalence relation. *) - -Program Instance iff_equivalence : Equivalence iff. - -(** We now develop a generalization of results on relations for arbitrary predicates. - The resulting theory can be applied to homogeneous binary relations but also to - arbitrary n-ary predicates. *) - -Local Open Scope list_scope. - -(* Notation " [ ] " := nil : list_scope. *) -(* Notation " [ x ; .. ; y ] " := (cons x .. (cons y nil) ..) (at level 1) : list_scope. *) - -(** A compact representation of non-dependent arities, with the codomain singled-out. *) - -Fixpoint arrows (l : list Type) (r : Type) : Type := - match l with - | nil => r - | A :: l' => A -> arrows l' r - end. - -(** We can define abbreviations for operation and relation types based on [arrows]. *) - -Definition unary_operation A := arrows (A::nil) A. -Definition binary_operation A := arrows (A::A::nil) A. -Definition ternary_operation A := arrows (A::A::A::nil) A. - -(** We define n-ary [predicate]s as functions into [Prop]. *) - -Notation predicate l := (arrows l Prop). - -(** Unary predicates, or sets. *) - -Definition unary_predicate A := predicate (A::nil). - -(** Homogeneous binary relations, equivalent to [relation A]. *) - -Definition binary_relation A := predicate (A::A::nil). - -(** We can close a predicate by universal or existential quantification. *) - -Fixpoint predicate_all (l : list Type) : predicate l -> Prop := - match l with - | nil => fun f => f - | A :: tl => fun f => forall x : A, predicate_all tl (f x) - end. - -Fixpoint predicate_exists (l : list Type) : predicate l -> Prop := - match l with - | nil => fun f => f - | A :: tl => fun f => exists x : A, predicate_exists tl (f x) - end. - -(** Pointwise extension of a binary operation on [T] to a binary operation - on functions whose codomain is [T]. - For an operator on [Prop] this lifts the operator to a binary operation. *) - -Fixpoint pointwise_extension {T : Type} (op : binary_operation T) - (l : list Type) : binary_operation (arrows l T) := - match l with - | nil => fun R R' => op R R' - | A :: tl => fun R R' => - fun x => pointwise_extension op tl (R x) (R' x) - end. - -(** Pointwise lifting, equivalent to doing [pointwise_extension] and closing using [predicate_all]. *) - -Fixpoint pointwise_lifting (op : binary_relation Prop) (l : list Type) : binary_relation (predicate l) := - match l with - | nil => fun R R' => op R R' - | A :: tl => fun R R' => - forall x, pointwise_lifting op tl (R x) (R' x) - end. - -(** The n-ary equivalence relation, defined by lifting the 0-ary [iff] relation. *) - -Definition predicate_equivalence {l : list Type} : binary_relation (predicate l) := - pointwise_lifting iff l. - -(** The n-ary implication relation, defined by lifting the 0-ary [impl] relation. *) - -Definition predicate_implication {l : list Type} := - pointwise_lifting impl l. - -(** Notations for pointwise equivalence and implication of predicates. *) - -Infix "<∙>" := predicate_equivalence (at level 95, no associativity) : predicate_scope. -Infix "-∙>" := predicate_implication (at level 70, right associativity) : predicate_scope. - -Open Local Scope predicate_scope. - -(** The pointwise liftings of conjunction and disjunctions. - Note that these are [binary_operation]s, building new relations out of old ones. *) - -Definition predicate_intersection := pointwise_extension and. -Definition predicate_union := pointwise_extension or. - -Infix "/∙\" := predicate_intersection (at level 80, right associativity) : predicate_scope. -Infix "\∙/" := predicate_union (at level 85, right associativity) : predicate_scope. - -(** The always [True] and always [False] predicates. *) - -Fixpoint true_predicate {l : list Type} : predicate l := - match l with - | nil => True - | A :: tl => fun _ => @true_predicate tl - end. - -Fixpoint false_predicate {l : list Type} : predicate l := - match l with - | nil => False - | A :: tl => fun _ => @false_predicate tl - end. - -Notation "∙⊤∙" := true_predicate : predicate_scope. -Notation "∙⊥∙" := false_predicate : predicate_scope. - -(** Predicate equivalence is an equivalence, and predicate implication defines a preorder. *) - -Program Instance predicate_equivalence_equivalence : Equivalence (@predicate_equivalence l). - Next Obligation. - induction l ; firstorder. - Qed. - Next Obligation. - induction l ; firstorder. - Qed. - Next Obligation. - fold pointwise_lifting. - induction l. firstorder. - intros. simpl in *. pose (IHl (x x0) (y x0) (z x0)). - firstorder. - Qed. - -Program Instance predicate_implication_preorder : - PreOrder (@predicate_implication l). - Next Obligation. - induction l ; firstorder. - Qed. - Next Obligation. - induction l. firstorder. - unfold predicate_implication in *. simpl in *. - intro. pose (IHl (x x0) (y x0) (z x0)). firstorder. - Qed. - -(** We define the various operations which define the algebra on binary relations, - from the general ones. *) - -Definition relation_equivalence {A : Type} : relation (relation A) := - @predicate_equivalence (_::_::nil). - -Class subrelation {A:Type} (R R' : relation A) : Prop := - is_subrelation : @predicate_implication (A::A::nil) R R'. - -Implicit Arguments subrelation [[A]]. - -Definition relation_conjunction {A} (R : relation A) (R' : relation A) : relation A := - @predicate_intersection (A::A::nil) R R'. - -Definition relation_disjunction {A} (R : relation A) (R' : relation A) : relation A := - @predicate_union (A::A::nil) R R'. - -(** Relation equivalence is an equivalence, and subrelation defines a partial order. *) - -Set Automatic Introduction. - -Instance relation_equivalence_equivalence (A : Type) : - Equivalence (@relation_equivalence A). -Proof. exact (@predicate_equivalence_equivalence (A::A::nil)). Qed. - -Instance relation_implication_preorder A : PreOrder (@subrelation A). -Proof. exact (@predicate_implication_preorder (A::A::nil)). Qed. - -(** *** Partial Order. - A partial order is a preorder which is additionally antisymmetric. - We give an equivalent definition, up-to an equivalence relation - on the carrier. *) - -Class PartialOrder {A} eqA `{equ : Equivalence A eqA} R `{preo : PreOrder A R} := - partial_order_equivalence : relation_equivalence eqA (relation_conjunction R (inverse R)). - -(** The equivalence proof is sufficient for proving that [R] must be a morphism - for equivalence (see Morphisms). - It is also sufficient to show that [R] is antisymmetric w.r.t. [eqA] *) - -Instance partial_order_antisym `(PartialOrder A eqA R) : ! Antisymmetric A eqA R. -Proof with auto. - reduce_goal. - pose proof partial_order_equivalence as poe. do 3 red in poe. - apply <- poe. firstorder. -Qed. - -(** The partial order defined by subrelation and relation equivalence. *) - -Program Instance subrelation_partial_order : - ! PartialOrder (relation A) relation_equivalence subrelation. - - Next Obligation. - Proof. - unfold relation_equivalence in *. firstorder. - Qed. - -Typeclasses Opaque arrows predicate_implication predicate_equivalence - relation_equivalence pointwise_lifting. - -(** Rewrite relation on a given support: declares a relation as a rewrite - relation for use by the generalized rewriting tactic. - It helps choosing if a rewrite should be handled - by the generalized or the regular rewriting tactic using leibniz equality. - Users can declare an [RewriteRelation A RA] anywhere to declare default - relations. This is also done automatically by the [Declare Relation A RA] - commands. *) - -Class RewriteRelation {A : Type} (RA : relation A). - -Instance: RewriteRelation impl. -Instance: RewriteRelation iff. -Instance: RewriteRelation (@relation_equivalence A). - -(** Any [Equivalence] declared in the context is automatically considered - a rewrite relation. *) - -Instance equivalence_rewrite_relation `(Equivalence A eqA) : RewriteRelation eqA. - -(** Strict Order *) - -Class StrictOrder {A : Type} (R : relation A) := { - StrictOrder_Irreflexive :> Irreflexive R ; - StrictOrder_Transitive :> Transitive R -}. - -Instance StrictOrder_Asymmetric `(StrictOrder A R) : Asymmetric R. -Proof. firstorder. Qed. - -(** Inversing a [StrictOrder] gives another [StrictOrder] *) - -Lemma StrictOrder_inverse `(StrictOrder A R) : StrictOrder (inverse R). -Proof. firstorder. Qed. - -(** Same for [PartialOrder]. *) - -Lemma PreOrder_inverse `(PreOrder A R) : PreOrder (inverse R). -Proof. firstorder. Qed. - -Hint Extern 3 (StrictOrder (inverse _)) => class_apply StrictOrder_inverse : typeclass_instances. -Hint Extern 3 (PreOrder (inverse _)) => class_apply PreOrder_inverse : typeclass_instances. - -Lemma PartialOrder_inverse `(PartialOrder A eqA R) : PartialOrder eqA (inverse R). -Proof. firstorder. Qed. - -Hint Extern 3 (PartialOrder (inverse _)) => class_apply PartialOrder_inverse : typeclass_instances. diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/core.cljs b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/core.cljs deleted file mode 100644 index f135b83..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/core.cljs +++ /dev/null @@ -1,52 +0,0 @@ - -(ns bounder.core - (:require [bounder.html :as html] - [domina :refer [value set-value! single-node]] - [domina.css :refer [sel]] - [lowline.functions :refer [debounce]] - [enfocus.core :refer [at]] - [cljs.reader :as reader] - [clojure.string :as s]) - (:require-macros [enfocus.macros :as em])) - -(def filter-input - (single-node - (sel ".search input"))) - -(defn project-matches [query project] - (let [words (cons (:name project) - (map name (:categories project))) - to-match (->> words - (s/join "") - (s/lower-case))] - (<= 0 (.indexOf to-match (s/lower-case query))))) - -(defn apply-filter-for [projects] - (let [query (value filter-input)] - (html/render-projects - (filter (partial project-matches query) - projects)))) - -(defn filter-category [projects evt] - (let [target (.-currentTarget evt)] - (set-value! filter-input - (.-innerHTML target)) - (apply-filter-for projects))) - -(defn init-listeners [projects] - (at js/document - ["input"] (em/listen - :keyup - (debounce - (partial apply-filter-for projects) - 500)) - [".category-links li"] (em/listen - :click - (partial filter-category projects)))) - -(defn init [projects-edn] - (let [projects (reader/read-string projects-edn)] - (init-listeners projects) - (html/render-projects projects) - (html/loaded))) - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/database.pytb b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/database.pytb deleted file mode 100644 index 9138e01..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/database.pytb +++ /dev/null @@ -1,20 +0,0 @@ -Text before - -Traceback (most recent call last): - File "/usr/lib/python2.3/site-packages/trac/web/main.py", line 314, in dispatch_request - dispatcher.dispatch(req) - File "/usr/lib/python2.3/site-packages/trac/web/main.py", line 186, in dispatch - req.session = Session(self.env, req) - File "/usr/lib/python2.3/site-packages/trac/web/session.py", line 52, in __init__ - self.promote_session(sid) - File "/usr/lib/python2.3/site-packages/trac/web/session.py", line 125, in promote_session - "AND authenticated=0", (sid,)) - File "/usr/lib/python2.3/site-packages/trac/db/util.py", line 47, in execute - return self.cursor.execute(sql_escape_percent(sql), args) - File "/usr/lib/python2.3/site-packages/trac/db/sqlite_backend.py", line 44, in execute - args or []) - File "/usr/lib/python2.3/site-packages/trac/db/sqlite_backend.py", line 36, in _rollback_on_error - return function(self, *args, **kwargs) -OperationalError: database is locked - -Text after diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/de.MoinMoin.po b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/de.MoinMoin.po deleted file mode 100644 index 1574d8b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/de.MoinMoin.po +++ /dev/null @@ -1,2461 +0,0 @@ -## Please edit system and help pages ONLY in the moinmaster wiki! For more -## information, please see MoinMaster:MoinPagesEditorGroup. -##master-page:None -##master-date:None -#acl MoinPagesEditorGroup:read,write,delete,revert All:read -#format gettext -#language de - -# -# MoinMoin de system text translation -# -msgid "" -msgstr "" -"Project-Id-Version: MoinMoin 1.6\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-05-26 23:12+0200\n" -"PO-Revision-Date: 2005-09-21 00:00+0100\n" -"Last-Translator: Thomas Waldmann \n" -"Language-Team: German \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Language: Deutsch\n" -"X-Language-in-English: German\n" -"X-HasWikiMarkup: True\n" -"X-Direction: ltr\n" - -msgid "" -"This wiki is not enabled for mail processing.\n" -"Contact the owner of the wiki, who can enable email." -msgstr "" -"In diesem Wiki ist Mail-Verarbeitung nicht eingeschaltet.\n" -"Bitte kontaktieren Sie den Eigentümer des Wiki, der die Mailfunktionen " -"einschalten kann." - -msgid "Please provide a valid email address!" -msgstr "Bitte eine gültige E-Mail-Adresse angeben!" - -#, python-format -msgid "Found no account matching the given email address '%(email)s'!" -msgstr "" -"Es wurde kein Benutzerkonto mit der E-Mail-Adresse '%(email)s' gefunden!" - -msgid "Use UserPreferences to change your settings or create an account." -msgstr "" -"Benutzen Sie BenutzerEinstellungen, um Ihre Einstellungen zu ändern oder ein " -"Konto zu erzeugen." - -msgid "Empty user name. Please enter a user name." -msgstr "Leerer Benutzername, bitte geben Sie einen Benutzernamen ein." - -#, python-format -msgid "" -"Invalid user name {{{'%s'}}}.\n" -"Name may contain any Unicode alpha numeric character, with optional one\n" -"space between words. Group page name is not allowed." -msgstr "" -"Ungültiger Benutzername {{{'%s'}}}.\n" -"Der Name darf beliebige alphanumerische Unicode-Zeichen enthalten, mit " -"optional einem\n" -"Leerzeichen zwischen den Worten. Gruppennamen sind nicht erlaubt." - -msgid "This user name already belongs to somebody else." -msgstr "Dieser Benutzername gehört bereits jemand anderem." - -msgid "Passwords don't match!" -msgstr "Die Passworte sind nicht gleich!" - -msgid "Please specify a password!" -msgstr "Bitte geben Sie ein Passwort an!" - -msgid "" -"Please provide your email address. If you lose your login information, you " -"can get it by email." -msgstr "" -"Bitte geben Sie Ihre E-Mail-Adresse an. Wenn Sie Ihre Login-Informationen " -"verlieren können Sie sie per E-Mail wieder bekommen." - -msgid "This email already belongs to somebody else." -msgstr "Diese E-Mail-Adresse gehört bereits jemand anderem." - -msgid "User account created! You can use this account to login now..." -msgstr "" -"Es wurde ein Benutzerkonto für Sie angelegt. Sie können sich nun anmelden..." - -msgid "Use UserPreferences to change settings of the selected user account" -msgstr "" -"Benutzen Sie BenutzerEinstellungen, um die Einstellungen des ausgewählten " -"Benutzers zu ändern." - -#, python-format -msgid "The theme '%(theme_name)s' could not be loaded!" -msgstr "Das Theme '%(theme_name)s' konnte nicht geladen werden!" - -msgid "User preferences saved!" -msgstr "Persönliche Einstellungen gespeichert!" - -msgid "Default" -msgstr "Standardeinstellung" - -msgid "" -msgstr "" - -msgid "the one preferred" -msgstr "der Bevorzugte" - -msgid "free choice" -msgstr "Freie Auswahl" - -msgid "Select User" -msgstr "Benutzer auswählen" - -msgid "Save" -msgstr "Speichern" - -msgid "Cancel" -msgstr "Abbrechen" - -msgid "Preferred theme" -msgstr "Bevorzugter Stil" - -msgid "Editor Preference" -msgstr "Bevorzugter Editor" - -msgid "Editor shown on UI" -msgstr "Angezeigter Editor" - -msgid "Time zone" -msgstr "Zeitzone" - -msgid "Your time is" -msgstr "Die lokale Zeit ist" - -msgid "Server time is" -msgstr "Die Zeit des Servers ist" - -msgid "Date format" -msgstr "Datumsformat" - -msgid "Preferred language" -msgstr "Bevorzugte Sprache" - -msgid "General options" -msgstr "Allgemeine Optionen" - -msgid "Quick links" -msgstr "Expressverweise" - -msgid "This list does not work, unless you have entered a valid email address!" -msgstr "" -"Änderungsnachrichten werden nur versandt, wenn eine gültige E-Mail-Adresse " -"eingegeben wurde!" - -msgid "Subscribed wiki pages (one regex per line)" -msgstr "Abonnierte Wiki-Seiten (ein regulärer Ausdruck pro Zeile)" - -msgid "Create Profile" -msgstr "Benutzer anlegen" - -msgid "Mail me my account data" -msgstr "E-Mail mit den Zugangsdaten senden" - -msgid "Email" -msgstr "E-Mail" - -#, python-format -msgid "" -"To create an account, see the %(userprefslink)s page. To recover a lost " -"password, go to %(sendmypasswordlink)s." -msgstr "" -"Siehe Seite %(userprefslink)s, um einen Account anzulegen. Um ein verlorenes " -"Passwort wieder zu erhalten, siehe %(sendmypasswordlink)s." - -msgid "Name" -msgstr "Name" - -msgid "Password" -msgstr "Passwort" - -msgid "Login" -msgstr "Anmelden" - -msgid "Action" -msgstr "Aktion" - -#, python-format -msgid "Expected \"=\" to follow \"%(token)s\"" -msgstr "\"=\" fehlt hinter dem Attribut \"%(token)s\"" - -#, python-format -msgid "Expected a value for key \"%(token)s\"" -msgstr "Attribut \"%(token)s\" wurde kein Wert zugewiesen" - -msgid "You are not allowed to edit this page." -msgstr "Sie dürfen diese Seite nicht editieren." - -msgid "Page is immutable!" -msgstr "Die Seite ist gegen Änderungen geschützt!" - -msgid "Cannot edit old revisions!" -msgstr "Alte Versionen können nicht editiert werden!" - -msgid "The lock you held timed out. Be prepared for editing conflicts!" -msgstr "" -"Die von Ihnen gehaltene Sperre ist abgelaufen. Das Auftreten von " -"Änderungskonflikten ist wahrscheinlich!" - -#, python-format -msgid "Draft of \"%(pagename)s\"" -msgstr "Entwurf von \"%(pagename)s\"" - -#, python-format -msgid "Edit \"%(pagename)s\"" -msgstr "\"%(pagename)s\" editieren" - -#, python-format -msgid "Preview of \"%(pagename)s\"" -msgstr "Vorschau für \"%(pagename)s\"" - -#, python-format -msgid "Your edit lock on %(lock_page)s has expired!" -msgstr "Ihre Sperre der Seite %(lock_page)s ist abgelaufen!" - -#, python-format -msgid "Your edit lock on %(lock_page)s will expire in # minutes." -msgstr "Ihre Sperre der Seite %(lock_page)s läuft in # Minuten ab." - -#, python-format -msgid "Your edit lock on %(lock_page)s will expire in # seconds." -msgstr "Ihre Sperre der Seite %(lock_page)s läuft in # Sekunden ab." - -msgid "Someone else deleted this page while you were editing!" -msgstr "Ein anderer Benutzer hat diese Seite inzwischen gelöscht!" - -msgid "Someone else changed this page while you were editing!" -msgstr "Ein anderer Benutzer hat diese Seite inzwischen geändert!" - -msgid "" -"Someone else saved this page while you were editing!\n" -"Please review the page and save then. Do not save this page as it is!" -msgstr "" -"Ein anderer Benutzer hat gespeichert, während Sie editiert haben!\n" -"Bitte schauen Sie die Seite nochmal durch und speichern Sie dann. Speichern " -"Sie die Seite nicht so, wie sie ist!" - -msgid "[Content loaded from draft]" -msgstr "[Inhalt der Seite mit dem Entwurf geladen]" - -#, python-format -msgid "[Content of new page loaded from %s]" -msgstr "[Inhalt der neuen Seite auf Basis der Vorlage %s]" - -#, python-format -msgid "[Template %s not found]" -msgstr "[Vorlage %s nicht gefunden]" - -#, python-format -msgid "[You may not read %s]" -msgstr "[Sie dürfen %s nicht lesen]" - -#, python-format -msgid "" -"'''[[BR]]Your draft based on revision %(draft_rev)d (saved %" -"(draft_timestamp_str)s) can be loaded instead of the current revision %" -"(page_rev)d by using the load draft button - in case you lost your last edit " -"somehow without saving it.''' A draft gets saved for you when you do a " -"preview, cancel an edit or unsuccessfully save." -msgstr "" -"'''[[BR]]Ihr Entwurf basierend auf Revision %(draft_rev)d (gespeichert %" -"(draft_timestamp_str)s kann anstatt der aktuellen Revision %(page_rev)d " -"geladen werden, indem Sie den Knopf ''Entwurf laden'' drücken (falls Sie " -"Ihre letzten Änderungen verloren haben, bevor Sie sie gespeichert " -"hatten).''' Ein Entwurf wird für Sie gespeichert, wenn Sie auf Vorschau oder " -"Abbrechen drücken oder das Speichern nicht funktioniert." - -#, python-format -msgid "Describe %s here." -msgstr "%s hier beschreiben..." - -msgid "Check Spelling" -msgstr "Rechtschreibung prüfen" - -msgid "Save Changes" -msgstr "Änderungen speichern" - -#, python-format -msgid "" -"By hitting '''%(save_button_text)s''' you put your changes under the %" -"(license_link)s.\n" -"If you don't want that, hit '''%(cancel_button_text)s''' to cancel your " -"changes." -msgstr "" -"Durch Anklicken von '''%(save_button_text)s''' stellen Sie Ihre Änderungen " -"unter die %(license_link)s.\n" -"Wenn Sie das nicht wollen, klicken Sie auf '''%(cancel_button_text)s''', um " -"Ihre Änderungen zu verwerfen." - -msgid "Preview" -msgstr "Vorschau anzeigen" - -msgid "Text mode" -msgstr "Text-Modus" - -msgid "Load Draft" -msgstr "Entwurf laden" - -msgid "Comment:" -msgstr "Kommentar:" - -msgid "" -msgstr "" - -#, python-format -msgid "Add to: %(category)s" -msgstr "Zu %(category)s hinzufügen:" - -msgid "Trivial change" -msgstr "Triviale Änderung" - -msgid "Remove trailing whitespace from each line" -msgstr "Leerzeichen am Ende jeder Zeile entfernen" - -msgid "The wiki is currently not reachable." -msgstr "Das Wiki ist derzeit nicht erreichbar." - -msgid "" -"The remote version of MoinMoin is too old, version 1.6 is required at least." -msgstr "" -"Die ferne MoinMoin-Version ist zu alt, mindestens Version 1.6 wird benötigt." - -msgid "Invalid username or password." -msgstr "Ungültiger Username oder Passwort." - -#, python-format -msgid "" -"The remote wiki uses a different InterWiki name (%(remotename)s) internally " -"than you specified (%(localname)s)." -msgstr "" -"Das ferne Wiki benutzt intern einen anderen InterWiki-Namen (%(remotename)s) " -"als Sie angegeben haben (%(localname)s)." - -#, python-format -msgid "The package needs a newer version of MoinMoin (at least %s)." -msgstr "Das Paket erfordert eine neuere Version von MoinMoin (mindestens %s)." - -msgid "The theme name is not set." -msgstr "Theme-Name ist nicht gesetzt." - -msgid "Installing theme files is only supported for standalone type servers." -msgstr "" -"Das Installieren von Theme-Dateien wird nur für Server-Typ standalone " -"unterstützt." - -#, python-format -msgid "Installation of '%(filename)s' failed." -msgstr "Installation von '%(filename)s' fehlgeschlagen." - -#, python-format -msgid "The file %s is not a MoinMoin package file." -msgstr "Die Datei %s ist keine MoinMoin-Paket-Datei." - -#, python-format -msgid "The page %s does not exist." -msgstr "Die Seite %s existiert nicht." - -msgid "Invalid package file header." -msgstr "Ungültiger Paket-Datei-Header." - -msgid "Package file format unsupported." -msgstr "Paket-Datei-Format nicht unterstützt." - -#, python-format -msgid "Unknown function %(func)s in line %(lineno)i." -msgstr "Unbekannte Funktion %(func)s in Zeile %(lineno)i." - -#, python-format -msgid "The file %s was not found in the package." -msgstr "Die Datei %s wurde im Paket nicht gefunden." - -msgid "Your changes are not saved!" -msgstr "Ihre Änderungen sind nicht gesichert!" - -msgid "Page name is too long, try shorter name." -msgstr "Seitenname ist zu lang, bitte kürzen." - -msgid "GUI Mode" -msgstr "GUI-Modus" - -msgid "Edit was cancelled." -msgstr "Editierung wurde abgebrochen." - -msgid "You can't copy to an empty pagename." -msgstr "Sie können eine Seite nicht auf einen leeren Seitennamen kopieren." - -msgid "You are not allowed to copy this page!" -msgstr "Sie dürfen diese Seite nicht kopieren!" - -#, python-format -msgid "" -"'''A page with the name {{{'%s'}}} already exists.'''\n" -"Try a different name." -msgstr "" -"'''Es gibt bereits eine Seite mit dem Namen {{{'%s'}}}.'''\n" -"Versuchen Sie es mit einem anderen Namen." - -#, python-format -msgid "Could not copy page because of file system error: %s." -msgstr "" -"Konnte die Seite nicht kopieren wegen eines Dateisystem-Fehlercodes: %s." - -msgid "You are not allowed to rename this page!" -msgstr "Sie dürfen diese Seite nicht umbenennen!" - -msgid "You can't rename to an empty pagename." -msgstr "Sie können eine Seite nicht auf einen leeren Seitennamen umbenennen." - -#, python-format -msgid "" -"'''A page with the name {{{'%s'}}} already exists.'''\n" -"\n" -"Try a different name." -msgstr "" -"'''Es gibt bereits eine Seite mit dem Namen {{{'%s'}}}.'''\n" -"Versuchen Sie es mit einem anderen Namen." - -#, python-format -msgid "Could not rename page because of file system error: %s." -msgstr "" -"Konnte die Seite nicht umbenennen wegen eines Dateisystem-Fehlercodes: %s." - -msgid "You are not allowed to delete this page!" -msgstr "Sie dürfen diese Seite nicht löschen!" - -msgid "Thank you for your changes. Your attention to detail is appreciated." -msgstr "Danke für die Änderung und die Sorgfalt beim Editieren." - -#, python-format -msgid "Page \"%s\" was successfully deleted!" -msgstr "Seite \"%s\" wurde erfolgreich gelöscht!" - -#, python-format -msgid "" -"Dear Wiki user,\n" -"\n" -"You have subscribed to a wiki page or wiki category on \"%(sitename)s\" for " -"change notification.\n" -"\n" -"The following page has been changed by %(editor)s:\n" -"%(pagelink)s\n" -"\n" -msgstr "" -"Sehr geehrter Wikibenutzer,\n" -"\n" -"Sie haben die Änderungen einer Wikiseite oder Kategorie von \"%(sitename)s\" " -"abonniert.\n" -"\n" -"Die folgende Seite wurde durch %(editor)s verändert:\n" -"%(pagelink)s\n" -"\n" - -#, python-format -msgid "" -"The comment on the change is:\n" -"%(comment)s\n" -"\n" -msgstr "" -"Der Kommentar zur Änderung ist:\n" -"%(comment)s\n" -"\n" - -msgid "New page:\n" -msgstr "Neue Seite:\n" - -msgid "No differences found!\n" -msgstr "Es wurden keine Änderungen gefunden!\n" - -#, python-format -msgid "[%(sitename)s] %(trivial)sUpdate of \"%(pagename)s\" by %(username)s" -msgstr "" -"[%(sitename)s] %(trivial)sÄnderung von \"%(pagename)s\" von %(username)s" - -msgid "Trivial " -msgstr "Triviale " - -msgid "Status of sending notification mails:" -msgstr "Status des Versands der Änderungsnachrichten:" - -#, python-format -msgid "[%(lang)s] %(recipients)s: %(status)s" -msgstr "[%(lang)s] %(recipients)s: %(status)s" - -#, python-format -msgid "Page could not get locked. Unexpected error (errno=%d)." -msgstr "Seite konnte nicht gesperrt werden. Unerwarteter Fehler (errno=%d)." - -msgid "Page could not get locked. Missing 'current' file?" -msgstr "Seite konnte nicht gesperrt werden. Fehlende Datei 'current'?" - -msgid "You are not allowed to edit this page!" -msgstr "Sie dürfen diese Seite nicht editieren!" - -msgid "You cannot save empty pages." -msgstr "Leere Seiten können nicht gespeichert werden!" - -msgid "You already saved this page!" -msgstr "Sie haben diese Seite bereits gesichert!" - -msgid "You already edited this page! Please do not use the back button." -msgstr "" -"Sie haben diese Seite bereits editiert! Bitte benutzen Sie nicht den Zurück-" -"Button." - -msgid "You did not change the page content, not saved!" -msgstr "Der Seiteninhalt wurde nicht verändert und folglich nicht gesichert!" - -msgid "" -"You can't change ACLs on this page since you have no admin rights on it!" -msgstr "" -"Sie dürfen keine ACLs auf dieser Seite ändern, weil Sie keine admin-Rechte " -"auf ihr haben!" - -#, python-format -msgid "" -"The lock of %(owner)s timed out %(mins_ago)d minute(s) ago, and you were " -"granted the lock for this page." -msgstr "" -"Die Sperre von %(owner)s ist vor %(mins_ago)d Minute(n) abgelaufen und wurde " -"an Sie übertragen." - -#, python-format -msgid "" -"Other users will be ''blocked'' from editing this page until %(bumptime)s." -msgstr "" -"Anderen Benutzern wird die Editierung dieser Seite bis %(bumptime)s " -"''verweigert''." - -#, python-format -msgid "" -"Other users will be ''warned'' until %(bumptime)s that you are editing this " -"page." -msgstr "" -"Andere Benutzer erhalten bis %(bumptime)s eine ''Warnung'', dass Sie diese " -"Seite editieren." - -msgid "Use the Preview button to extend the locking period." -msgstr "Mit \"Vorschau anzeigen\" können Sie diesen Zeitraum verlängern." - -#, python-format -msgid "" -"This page is currently ''locked'' for editing by %(owner)s until %(timestamp)" -"s, i.e. for %(mins_valid)d minute(s)." -msgstr "" -"Diese Seite ist derzeit zur Editierung durch %(owner)s gegen Änderungen " -"''gesperrt'' bis %(timestamp)s, also weitere %(mins_valid)d Minute(n)." - -#, python-format -msgid "" -"This page was opened for editing or last previewed at %(timestamp)s by %" -"(owner)s.[[BR]]\n" -"'''You should ''refrain from editing'' this page for at least another %" -"(mins_valid)d minute(s),\n" -"to avoid editing conflicts.'''[[BR]]\n" -"To leave the editor, press the Cancel button." -msgstr "" -"Diese Seite wurde zum letzten Mal um %(timestamp)s durch %(owner)s zum " -"Editieren geöffnet\n" -"oder in der Vorschau angezeigt.[[BR]]\n" -"'''Sie sollten diese Seite für mindestens weitere %(mins_valid)d Minute(n) " -"''nicht editieren'', um Konflikte auszuschließen.'''[[BR]]\n" -"Benutzen Sie \"Abbrechen\" zum Verlassen des Editors." - -msgid "" -msgstr "" - -#, python-format -msgid "" -"Login Name: %s\n" -"\n" -"Login Password: %s\n" -"\n" -"Login URL: %s/%s?action=login\n" -msgstr "" -"Anmelde-Name: %s\n" -"\n" -"Anmelde-Passwort: %s\n" -"\n" -"Anmelde-URL: %s/%s?action=login\n" - -msgid "" -"Somebody has requested to submit your account data to this email address.\n" -"\n" -"If you lost your password, please use the data below and just enter the\n" -"password AS SHOWN into the wiki's password form field (use copy and paste\n" -"for that).\n" -"\n" -"After successfully logging in, it is of course a good idea to set a new and " -"known password.\n" -msgstr "" -"Jemand hat angefordert, Ihre Accountdaten an diese E-Mail-Adresse zu " -"senden.\n" -"\n" -"Wenn Sie Ihr Passwort vergessen haben, benutzen Sie bitte die Daten unten " -"und\n" -"geben Sie das Passwort GENAUSO WIE ANGEZEIGT in das Passwort-Feld des Wikis " -"ein (benutzen Sie kopieren und einfügen dazu).\n" -"\n" -"Nachdem Sie sich erfolgreich angemeldet haben, setzen Sie bitte Ihr Passwort " -"neu.\n" - -#, python-format -msgid "[%(sitename)s] Your wiki account data" -msgstr "[%(sitename)s] Ihre Wiki-Acount-Daten" - -msgid "" -"The backed up content of this page is deprecated and will not be included in " -"search results!" -msgstr "" -"Der Inhalt der letzten Sicherungskopie ist veraltet und wird von der " -"Volltextsuche ignoriert!" - -#, python-format -msgid "Revision %(rev)d as of %(date)s" -msgstr "Revision %(rev)d vom %(date)s" - -#, python-format -msgid "Redirected from page \"%(page)s\"" -msgstr "Hierher umgeleitet von Seite \"%(page)s\"" - -#, python-format -msgid "This page redirects to page \"%(page)s\"" -msgstr "Diese Seite wird umgeleitet auf \"%(page)s\"" - -msgid "Create New Page" -msgstr "Neue Seite anlegen" - -msgid "You are not allowed to view this page." -msgstr "Sie dürfen diese Seite nicht ansehen." - -#, python-format -msgid "" -"Results %(bs)s%(hitsFrom)d - %(hitsTo)d%(be)s of %(aboutHits)s %(bs)s%(hits)d" -"%(be)s results out of about %(pages)d pages." -msgstr "" -"Ergebnisse %(bs)s%(hitsFrom)d - %(hitsTo)d%(be)s von %(aboutHits)s %(bs)s%" -"(hits)d%(be)s Ergebnisse aus ungefähr %(pages)d Seiten." - -msgid "seconds" -msgstr "Sekunden" - -msgid "Previous" -msgstr "Vorherige" - -msgid "Next" -msgstr "Nächste" - -msgid "current" -msgstr "aktuelle" - -#, python-format -msgid "last modified: %s" -msgstr "zuletzt geändert: %s" - -msgid "match" -msgstr "Treffer" - -msgid "matches" -msgstr "Treffer" - -msgid "Go To Page" -msgstr "Gehe zu Seite" - -msgid "Include system pages" -msgstr "Systemseiten einschließen" - -msgid "Exclude system pages" -msgstr "Systemseiten ausschließen" - -#, python-format -msgid "Please use a more selective search term instead of {{{\"%s\"}}}" -msgstr "" -"Bitte verwenden Sie einen selektiveren Suchbegriff anstatt {{{\"%s\"}}}" - -#, python-format -msgid "ERROR in regex '%s'" -msgstr "FEHLER in regulärem Ausdruck '%s'" - -#, python-format -msgid "Bad timestamp '%s'" -msgstr "Ungültige Zeitangabe '%s'" - -#, python-format -msgid "Unsupported navigation scheme '%(scheme)s'!" -msgstr "Nicht bekanntes Navigationsschema '%(scheme)s'!" - -msgid "No parent page found!" -msgstr "Diese Seite ist keine Unterseite!" - -msgid "Wiki" -msgstr "Wiki" - -msgid "Edit" -msgstr "Editieren" - -msgid "Slideshow" -msgstr "Diaschau" - -msgid "Start" -msgstr "Start" - -#, python-format -msgid "Slide %(pos)d of %(size)d" -msgstr "Seite %(pos)d von %(size)d" - -msgid "Search Titles" -msgstr "Titel durchsuchen" - -msgid "Display context of search results" -msgstr "Umgebung der Treffer anzeigen" - -msgid "Case-sensitive searching" -msgstr "Groß-/Kleinschreibung beachten" - -msgid "Search Text" -msgstr "Text durchsuchen" - -#, python-format -msgid "Not supported mimetype of file: %s" -msgstr "MIME-Typ der Datei wird nicht unterstützt: %s" - -msgid "Embedded" -msgstr "Eingebettet" - -#, python-format -msgid "Upload new attachment \"%(filename)s\"" -msgstr "Neuen Dateianhang \"%(filename)s\" hochladen" - -#, python-format -msgid "Invalid MonthCalendar calparms \"%s\"!" -msgstr "Ungültige MonthCalendaer calparms \"%s\"!" - -#, python-format -msgid "Invalid MonthCalendar arguments \"%s\"!" -msgstr "Ungültige MonthCalendar-Argumente: \"%s\"!" - -msgid "No orphaned pages in this wiki." -msgstr "Es existieren keine verwaisten Seiten in diesem Wiki." - -msgid "Python Version" -msgstr "Python Version" - -msgid "MoinMoin Version" -msgstr "MoinMoin Version" - -#, python-format -msgid "Release %s [Revision %s]" -msgstr "Version %s [Revision %s]" - -msgid "4Suite Version" -msgstr "4Suite Version" - -msgid "Number of pages" -msgstr "Seitenanzahl" - -msgid "Number of system pages" -msgstr "Anzahl der Systemseiten" - -msgid "Accumulated page sizes" -msgstr "Kumulierte Seitengrößen" - -#, python-format -msgid "Disk usage of %(data_dir)s/pages/" -msgstr "Plattenbelegung von %(data_dir)s/pages/" - -#, python-format -msgid "Disk usage of %(data_dir)s/" -msgstr "Plattenbelegung von %(data_dir)s/" - -msgid "Entries in edit log" -msgstr "Einträge in der Änderungshistorie" - -msgid "NONE" -msgstr "KEINE" - -msgid "Global extension macros" -msgstr "Globale Erweiterungsmakros" - -msgid "Local extension macros" -msgstr "Lokale Erweiterungsmakros" - -msgid "Global extension actions" -msgstr "Globale Erweiterungsaktionen" - -msgid "Local extension actions" -msgstr "Lokale Erweiterungsaktionen" - -msgid "Global parsers" -msgstr "Globale Parser" - -msgid "Local extension parsers" -msgstr "Lokale Erweiterungsparser" - -msgid "Disabled" -msgstr "Deaktiviert" - -msgid "Enabled" -msgstr "Aktiviert" - -msgid "index available" -msgstr "Index verfügbar" - -msgid "index unavailable" -msgstr "Index nicht verfügbar" - -msgid "N/A" -msgstr "k.A." - -msgid "Xapian and/or Python Xapian bindings not installed" -msgstr "Xapian und/oder Python-Xapian-Bindings nicht installiert" - -msgid "Xapian search" -msgstr "Xapian-Suche" - -msgid "Xapian Version" -msgstr "Xapian-Version" - -msgid "Xapian stemming" -msgstr "Xapian-Wortstamm-Bildung" - -msgid "Active threads" -msgstr "Aktive Threads" - -#, python-format -msgid "No quotes on %(pagename)s." -msgstr "Keine Zitate auf Seite %(pagename)s gefunden." - -#, python-format -msgid "Upload of attachment '%(filename)s'." -msgstr "Dateianhang '%(filename)s' wurde angelegt." - -#, python-format -msgid "Attachment '%(filename)s' deleted." -msgstr "Dateianhang '%(filename)s' wurde gelöscht." - -#, python-format -msgid "Drawing '%(filename)s' saved." -msgstr "Zeichnung '%(filename)s' wurde gesichert." - -#, python-format -msgid "Revert to revision %(rev)d." -msgstr "Revision %(rev)d restauriert." - -#, python-format -msgid "Renamed from '%(oldpagename)s'." -msgstr "Umbenannt von '%(oldpagename)s'." - -#, python-format -msgid "%(mins)dm ago" -msgstr "vor %(mins)dm" - -msgid "(no bookmark set)" -msgstr "(kein Lesezeichen gesetzt)" - -#, python-format -msgid "(currently set to %s)" -msgstr "(derzeit %s)" - -msgid "Delete bookmark" -msgstr "Lesezeichen löschen" - -msgid "Set bookmark" -msgstr "Lesezeichen setzen" - -msgid "[Bookmark reached]" -msgstr "[Lesezeichen erreicht]" - -#, python-format -msgid "Invalid include arguments \"%s\"!" -msgstr "Ungültige \"Include\"-Argumente: \"%s\"!" - -#, python-format -msgid "Nothing found for \"%s\"!" -msgstr "Textmarkierung \"%s\" nicht gefunden!" - -msgid "edit" -msgstr "ändern" - -msgid "Contents" -msgstr "Inhaltsverzeichnis" - -msgid "You need to provide a chart type!" -msgstr "Es muss ein Diagrammtyp angegeben werden!" - -#, python-format -msgid "Bad chart type \"%s\"!" -msgstr "Unbekannter Diagrammtyp \"%s\"!" - -msgid "Search for items" -msgstr "Nach Items suchen" - -msgid "containing all the following terms" -msgstr "die alle folgenden Ausdrücke enthalten" - -msgid "containing one or more of the following terms" -msgstr "die einen oder mehrere der folgenden Ausdrücke enthalten" - -msgid "not containing the following terms" -msgstr "die folgende Ausdrücke nicht enthalten" - -msgid "belonging to one of the following categories" -msgstr "die einer der folgenden Kategorien angehören" - -msgid "last modified since (e.g. last 2 weeks)" -msgstr "die zuletzt geändert wurden seit (z.B. 'last 2 weeks')" - -msgid "any language" -msgstr "jede Sprache" - -msgid "any mimetype" -msgstr "jeder MIME-Typ" - -msgid "Language" -msgstr "Sprache" - -msgid "File Type" -msgstr "Dateityp" - -msgid "Search only in titles" -msgstr "Nur Titel durchsuchen" - -msgid "Case-sensitive search" -msgstr "Groß-/Kleinschreibung bei der Suche beachten" - -msgid "Exclude underlay" -msgstr "Underlay ausschließen" - -msgid "No system items" -msgstr "Keine System-Items" - -msgid "Search in all page revisions" -msgstr "In allen Seitenrevisionen suchen" - -msgid "Go get it!" -msgstr "Los geht's" - -#, python-format -msgid "Check your argument %s" -msgstr "Überprüfen Sie das Argument %s" - -msgid "Markup" -msgstr "Notation" - -msgid "Display" -msgstr "Anzeige" - -msgid "No wanted pages in this wiki." -msgstr "Es existieren keine gewünschten Seiten in diesem Wiki." - -#, python-format -msgid "Connection to mailserver '%(server)s' failed: %(reason)s" -msgstr "Verbindung zum Mailserver '%(server)s' gestört: %(reason)s" - -msgid "Mail not sent" -msgstr "E-Mail wurde nicht versandt" - -msgid "Mail sent OK" -msgstr "E-Mail wurde erfolgreich versandt" - -msgid "Date" -msgstr "Datum" - -msgid "From" -msgstr "Von" - -msgid "To" -msgstr "An" - -msgid "Content" -msgstr "Inhalt" - -msgid "Attachments" -msgstr "Dateianhänge" - -msgid "XSLT option disabled, please look at HelpOnConfiguration." -msgstr "XSLT-Option ist abgeschaltet, siehe HelpOnConfiguration." - -msgid "XSLT processing is not available, please install 4suite 1.x." -msgstr "" -"Die Verarbeitung von XSLT-Stylesheets ist nicht verfügbar, bitte 4suite 1.x " -"installieren." - -#, python-format -msgid "%(errortype)s processing error" -msgstr "Verarbeitungsfehler vom Typ \"%(errortype)s\"" - -#, python-format -msgid "Expected \"%(wanted)s\" after \"%(key)s\", got \"%(token)s\"" -msgstr "Erwartete \"%(wanted)s\" nach \"%(key)s\", bekam \"%(token)s\"" - -#, python-format -msgid "Expected an integer \"%(key)s\" before \"%(token)s\"" -msgstr "Erwartete eine Ganzzahl \"%(key)s\" vor \"%(token)s\"" - -#, python-format -msgid "Expected an integer \"%(arg)s\" after \"%(key)s\"" -msgstr "Erwartete eine Ganzzahl \"%(arg)s\" nach \"%(key)s\"" - -#, python-format -msgid "Expected a color value \"%(arg)s\" after \"%(key)s\"" -msgstr "Erwartete einen Farbwert \"%(arg)s\" nach \"%(key)s\"" - -msgid "" -"Rendering of reStructured text is not possible, please install Docutils." -msgstr "" -"Anzeigen von reStructured Text ist nicht möglich, bitte installieren Sie " -"Docutils." - -msgid "**Maximum number of allowed includes exceeded**" -msgstr "**Maximale Anzahl erlaubter Includes überschritten**" - -#, python-format -msgid "**Could not find the referenced page: %s**" -msgstr "**Konnte die referenzierte Seite nicht finden: %s**" - -#, python-format -msgid "Inlined image: %(url)s" -msgstr "Eingebettetes Bild: %(url)s" - -#, python-format -msgid "Create new drawing \"%(filename)s (opens in new window)\"" -msgstr "Neue Zeichnung \"%(filename)s\" anlegen (öffnet ein neues Fenster)" - -#, python-format -msgid "Edit drawing %(filename)s (opens in new window)" -msgstr "Zeichnung %(filename)s bearbeiten (öffnet ein neues Fenster)" - -#, python-format -msgid "Clickable drawing: %(filename)s" -msgstr "Anklickbare Zeichnung %(filename)s" - -msgid "Toggle line numbers" -msgstr "Zeilennummern ein/ausschalten" - -msgid "[all]" -msgstr "[alle]" - -msgid "[not empty]" -msgstr "[nicht leer]" - -msgid "[empty]" -msgstr "[leer]" - -msgid "filter" -msgstr "Filter" - -msgid "Line" -msgstr "Zeile" - -msgid "No differences found!" -msgstr "Es wurden keine Änderungen gefunden!" - -msgid "Deletions are marked like this." -msgstr "Gelöschter Text ist auf diese Art markiert." - -msgid "Additions are marked like this." -msgstr "Hinzugefügter Text ist auf diese Art markiert." - -#, python-format -msgid "" -"Sorry, can not save page because \"%(content)s\" is not allowed in this wiki." -msgstr "" -"Kann die Seite nicht speichern, weil der Inhalt \"%(content)s\" in diesem " -"Wiki nicht erlaubt ist." - -msgid "Page" -msgstr "Seite" - -msgid "User" -msgstr "Benutzer" - -msgid "Diffs" -msgstr "DifferenzAnzeige" - -msgid "Info" -msgstr "Info" - -msgid "Unsubscribe" -msgstr "Nicht abonnieren" - -msgid "Subscribe" -msgstr "Abonnieren" - -msgid "Raw" -msgstr "Rohform" - -msgid "XML" -msgstr "XML" - -msgid "Print" -msgstr "Druckansicht" - -msgid "View" -msgstr "Anzeigen" - -msgid "Home" -msgstr "Heim" - -msgid "Up" -msgstr "Hoch" - -msgid "[RSS]" -msgstr "[RSS]" - -msgid "[DELETED]" -msgstr "[GELÖSCHT]" - -msgid "[UPDATED]" -msgstr "[AKTUALISIERT]" - -msgid "[RENAMED]" -msgstr "[UMBENANNT]" - -msgid "[CONFLICT]" -msgstr "[KONFLIKT]" - -msgid "[NEW]" -msgstr "[NEU]" - -msgid "[DIFF]" -msgstr "[DIFF]" - -msgid "[BOTTOM]" -msgstr "[FUSS]" - -msgid "[TOP]" -msgstr "[KOPF]" - -msgid "Click to do a full-text search for this title" -msgstr "Hier klicken für eine Liste der Seiten, die auf diese verweisen" - -msgid "Preferences" -msgstr "Einstellungen" - -msgid "Logout" -msgstr "Abmelden" - -msgid "Clear message" -msgstr "Nachricht löschen" - -#, python-format -msgid "last edited %(time)s by %(editor)s" -msgstr "zuletzt geändert am %(time)s durch %(editor)s" - -#, python-format -msgid "last modified %(time)s" -msgstr "zuletzt geändert %(time)s" - -msgid "Search:" -msgstr "Suchen:" - -msgid "Text" -msgstr "Text" - -msgid "Titles" -msgstr "Titel" - -msgid "Search" -msgstr "Suche" - -msgid "More Actions:" -msgstr "Weitere Aktionen:" - -msgid "------------------------" -msgstr "------------------------" - -msgid "Raw Text" -msgstr "Rohform" - -msgid "Print View" -msgstr "Druckansicht" - -msgid "Delete Cache" -msgstr "Cache löschen" - -msgid "Rename Page" -msgstr "Seite umbenennen" - -msgid "Copy Page" -msgstr "Seite kopieren" - -msgid "Delete Page" -msgstr "Seite löschen" - -msgid "Like Pages" -msgstr "Ähnliche Seiten" - -msgid "Local Site Map" -msgstr "ÜbersichtsKarte" - -msgid "My Pages" -msgstr "Meine Seiten" - -msgid "Subscribe User" -msgstr "Abo für Benutzer" - -msgid "Remove Spam" -msgstr "Spam entfernen" - -msgid "Revert to this revision" -msgstr "Diese Revision restaurieren" - -msgid "Package Pages" -msgstr "Seiten paketieren" - -msgid "Render as Docbook" -msgstr "Docbook ausgeben" - -msgid "Sync Pages" -msgstr "Seiten synchronisieren" - -msgid "Do" -msgstr "Los!" - -msgid "Comments" -msgstr "Kommentare" - -msgid "Edit (Text)" -msgstr "Editieren (Text)" - -msgid "Edit (GUI)" -msgstr "Editieren (GUI)" - -msgid "Immutable Page" -msgstr "Geschützte Seite" - -msgid "Remove Link" -msgstr "Verweis entfernen" - -msgid "Add Link" -msgstr "Verweis hinzufügen" - -#, python-format -msgid "Show %s days." -msgstr "%s Tage anzeigen." - -msgid "Wiki Markup" -msgstr "Wiki Quelltext" - -msgid "DeleteCache" -msgstr "CacheLöschen" - -#, python-format -msgid "(cached %s)" -msgstr "(gecached %s)" - -msgid "Or try one of these actions:" -msgstr "Oder benutze eine dieser Aktionen:" - -msgid "FrontPage" -msgstr "StartSeite" - -msgid "RecentChanges" -msgstr "AktuelleÄnderungen" - -msgid "TitleIndex" -msgstr "TitelIndex" - -msgid "WordIndex" -msgstr "WortIndex" - -msgid "FindPage" -msgstr "SeiteFinden" - -msgid "SiteNavigation" -msgstr "WegWeiser" - -msgid "HelpContents" -msgstr "HilfeInhalt" - -msgid "HelpOnFormatting" -msgstr "HilfeZumFormatieren" - -msgid "UserPreferences" -msgstr "BenutzerEinstellungen" - -msgid "WikiLicense" -msgstr "WikiLizenz" - -msgid "MissingPage" -msgstr "FehlendeSeite" - -msgid "MissingHomePage" -msgstr "FehlendePersönlicheSeite" - -msgid "Mon" -msgstr "Mo" - -msgid "Tue" -msgstr "Di" - -msgid "Wed" -msgstr "Mi" - -msgid "Thu" -msgstr "Do" - -msgid "Fri" -msgstr "Fr" - -msgid "Sat" -msgstr "Sa" - -msgid "Sun" -msgstr "So" - -msgid "AttachFile" -msgstr "DateiAnhänge" - -msgid "DeletePage" -msgstr "SeiteLöschen" - -msgid "LikePages" -msgstr "ÄhnlicheSeiten" - -msgid "LocalSiteMap" -msgstr "ÜbersichtsKarte" - -msgid "RenamePage" -msgstr "SeiteUmbenennen" - -msgid "SpellCheck" -msgstr "RechtSchreibung" - -#, python-format -msgid "Unknown action %(action_name)s." -msgstr "Unbekannte Aktion %(action_name)s." - -#, python-format -msgid "You are not allowed to do %(action_name)s on this page." -msgstr "Sie dürfen die Aktion %(action_name)s auf dieser Seite nicht benutzen!" - -msgid "Login and try again." -msgstr "Melden Sie sich an und probieren Sie es noch einmal." - -msgid "Charts are not available!" -msgstr "Die Diagrammoption ist nicht verfügbar!" - -msgid "Page Size Distribution" -msgstr "Verteilung der Seitengrößen" - -msgid "page size upper bound [bytes]" -msgstr "Obere Grenze der Seitengröße [bytes]" - -msgid "# of pages of this size" -msgstr "Anzahl der Seiten in dieser Größenklasse" - -msgid "User agent" -msgstr "Browsertyp" - -msgid "Others" -msgstr "Sonstige" - -msgid "Distribution of User-Agent Types" -msgstr "Verteilung der Zugriffe auf Browsertypen" - -msgid "Views/day" -msgstr "Lesezugriffe/Tag" - -msgid "Edits/day" -msgstr "Schreibzugriffe/Tag" - -msgid "Page hits and edits" -msgstr "Seitenzugriffe und Änderungen" - -#, python-format -msgid "%(chart_title)s for %(filterpage)s" -msgstr "%(chart_title)s für %(filterpage)s" - -msgid "" -"green=view\n" -"red=edit" -msgstr "" -"grün=Anzeigen\n" -"rot=Änderungen" - -msgid "date" -msgstr "Datum" - -msgid "# of hits" -msgstr "Anzahl der Zugriffe" - -msgid "" -" Emphasis:: [[Verbatim('')]]''italics''[[Verbatim('')]]; [[Verbatim" -"(''')]]'''bold'''[[Verbatim(''')]]; [[Verbatim(''''')]]'''''bold " -"italics'''''[[Verbatim(''''')]]; [[Verbatim('')]]''mixed ''[[Verbatim" -"(''')]]'''''bold'''[[Verbatim(''')]] and italics''[[Verbatim('')]]; " -"[[Verbatim(----)]] horizontal rule.\n" -" Headings:: [[Verbatim(=)]] Title 1 [[Verbatim(=)]]; [[Verbatim(==)]] Title " -"2 [[Verbatim(==)]]; [[Verbatim(===)]] Title 3 [[Verbatim(===)]]; [[Verbatim" -"(====)]] Title 4 [[Verbatim(====)]]; [[Verbatim(=====)]] Title 5 [[Verbatim" -"(=====)]].\n" -" Lists:: space and one of: * bullets; 1., a., A., i., I. numbered items; 1." -"#n start numbering at n; space alone indents.\n" -" Links:: [[Verbatim(JoinCapitalizedWords)]]; [[Verbatim([\"brackets and " -"double quotes\"])]]; url; [url]; [url label].\n" -" Tables:: || cell text |||| cell text spanning 2 columns ||; no trailing " -"white space allowed after tables or titles.\n" -"\n" -"(!) For more help, see HelpOnEditing or SyntaxReference.\n" -msgstr "" -" Betonung:: [[Verbatim('')]]''kursiv''[[Verbatim('')]]; [[Verbatim" -"(''')]]'''fett'''[[Verbatim(''')]]; [[Verbatim(''''')]]'''''fett und " -"kursiv'''''[[Verbatim(''''')]]; [[Verbatim('')]]''gemischt ''[[Verbatim" -"(''')]]'''''fett'''[[Verbatim(''')]] und kursiv''[[Verbatim('')]]; [[Verbatim" -"(----)]] horizontaler Balken.\n" -" Überschriften:: [[Verbatim(=)]] Überschrift 1 [[Verbatim(=)]]; [[Verbatim" -"(==)]] Überschrift 2 [[Verbatim(==)]]; [[Verbatim(===)]] Ü 3 [[Verbatim" -"(===)]]; [[Verbatim(====)]] Ü 4 [[Verbatim(====)]]; [[Verbatim(=====)]] Ü " -"5 [[Verbatim(=====)]].\n" -" Listen:: Leerzeichen und eins von: * Punkte; 1., a., A., i., I. nummerierte " -"Punkte; 1.#n starte Nummerierung bei n; nur Leerzeichen rückt ein.\n" -" Links:: [[Verbatim(ZusammenGeschriebeneGroßeWorte)]]; [[Verbatim" -"([\"Klammern und doppelte Anführungszeichen\"])]]; url; [url]; [url " -"label].\n" -" Tabellen:: || Zellentext |||| Zellentext, 2 Zellen überspannend ||; " -"keine anhängenden Leerzeichen nach Überschriften oder Tabellen.\n" -"\n" -"(!) Weitere Hilfe finden Sie unter HilfeZumEditieren oder SyntaxReferenz.\n" - -msgid "" -"Emphasis: *italic* **bold** ``monospace``
\n" -"
\n"
-"Headings: Heading 1  Heading 2  Heading 3\n"
-"          =========  ---------  ~~~~~~~~~\n"
-"\n"
-"Horizontal rule: ---- \n"
-"Links: TrailingUnderscore_ `multi word with backticks`_ external_ \n"
-"\n"
-".. _external: http://external-site.net/foo/\n"
-"\n"
-"Lists: * bullets; 1., a. numbered items.\n"
-"
\n" -"
\n" -"(!) For more help, see the \n" -"\n" -"reStructuredText Quick Reference\n" -".\n" -msgstr "" -"Betonung: *kursiv* **fett** ``gleiche Zeichenbreite``
\n" -"
\n"
-"Überschriften: Überschrift 1  Überschrift 2  Überschrift 3\n"
-"               =============  -------------  ~~~~~~~~~~~~~\n"
-"\n"
-"Horizontale Linie: ---- \n"
-"Links: AngehängterUnterstrich_ `mehrere Worte mit Rückwärtsapostroph`_ "
-"extern_ \n"
-"\n"
-".. _extern: http://externe-seite.de/\n"
-"\n"
-"Listen: * Punkte; 1., a. nummerierte Punkte.\n"
-"
\n" -"
\n" -"(!) Für mehr Hilfe siehe die \n" -"\n" -"reStructuredText Quick Reference\n" -".\n" - -msgid "UnSubscribe" -msgstr "Nicht abonnieren" - -msgid "Publish my email (not my wiki homepage) in author info" -msgstr "" -"Veröffentliche meine E-Mail-Adresse (nicht meine Wiki-Homepage) in der " -"Autoren-Info" - -msgid "Open editor on double click" -msgstr "Editor per Doppelklick öffnen" - -msgid "After login, jump to last visited page" -msgstr "Nach dem Anmelden zur zuletzt besuchten Seite springen" - -msgid "Show comment sections" -msgstr "Kommentarabschnitte anzeigen" - -msgid "Show question mark for non-existing pagelinks" -msgstr "Verweise auf unbekannte Seiten mit Fragezeichen markieren" - -msgid "Show page trail" -msgstr "Kürzlich besuchte Seiten anzeigen (Verlauf)" - -msgid "Show icon toolbar" -msgstr "Werkzeugleiste mit Bildsymbolen anzeigen" - -msgid "Show top/bottom links in headings" -msgstr "Verweise zum Anfang und Ende der Seite in Überschriften anzeigen" - -msgid "Show fancy diffs" -msgstr "Unterschiede farbig markiert anzeigen" - -msgid "Add spaces to displayed wiki names" -msgstr "Angezeigte Wikinamen mit Leerzeichen trennen" - -msgid "Remember login information" -msgstr "Speichere Login-Informationen" - -msgid "Subscribe to trivial changes" -msgstr "Triviale Änderungen abonnieren" - -msgid "Disable this account forever" -msgstr "Dieses Benutzerkonto für immer deaktivieren" - -msgid "(Use Firstname''''''Lastname)" -msgstr "(Vorname''''''Nachname verwenden)" - -msgid "Alias-Name" -msgstr "Alias-Name" - -msgid "Password repeat" -msgstr "Passwort wiederholen" - -msgid "(Only for password change or new account)" -msgstr "(Nur für Passwort-Änderung oder neue Benutzerkonten)" - -msgid "User CSS URL" -msgstr "Benutzer CSS URL" - -msgid "(Leave it empty for disabling user CSS)" -msgstr "Leer lassen, um benutzerdefiniertes CSS auszuschalten)" - -msgid "Editor size" -msgstr "Größe des Texteingabefelds" - -msgid "Do it." -msgstr "Ausführen" - -#, python-format -msgid "Execute action %(actionname)s?" -msgstr "Aktion %(actionname)s ausführen?" - -#, python-format -msgid "Action %(actionname)s is excluded in this wiki!" -msgstr "Aktion %(actionname)s ist ausgeschlossen in diesem Wiki!" - -#, python-format -msgid "You are not allowed to use action %(actionname)s on this page!" -msgstr "Sie dürfen die Aktion %(actionname)s auf dieser Seite nicht benutzen!" - -#, python-format -msgid "Please use the interactive user interface to use action %(actionname)s!" -msgstr "" -"Für die Aktion %(actionname)s bitte nur die vorgesehenen Webseiten benutzen!" - -msgid "You must login to add a quicklink." -msgstr "Sie müssen sich anmelden, um einen Expressverweis hinzuzufügen." - -msgid "Your quicklink to this page has been removed." -msgstr "Ihr Expressverweis für diese Seite wurde entfernt." - -msgid "Your quicklink to this page could not be removed." -msgstr "Ihr Expressverweis für diese Seite konnte nicht entfernt werden." - -msgid "A quicklink to this page has been added for you." -msgstr "Ein Expressverweis für diese Seite wurde hinzugefügt." - -msgid "A quicklink to this page could not be added for you." -msgstr "Ein Expressverweis für diese Seite konnte nicht hinzugefügt werden." - -msgid "Missing password. Please enter user name and password." -msgstr "Fehlendes Passwort. Bitte geben Sie Benutzername und Passwort ein." - -msgid "Sorry, login failed." -msgstr "Login fehlgeschlagen." - -#, python-format -msgid "[%d attachments]" -msgstr "[%d Anhänge]" - -#, python-format -msgid "" -"There are %(count)s attachment(s) stored for this " -"page." -msgstr "" -"Es sind %(count)s Anhänge für diese Seite " -"gespeichert." - -#, python-format -msgid "Attachment '%(target)s' already exists." -msgstr "Dateianhang '%(target)s' existiert bereits." - -msgid "Filename of attachment not specified!" -msgstr "Dateiname des Anhangs fehlt oder ist leer!" - -#, python-format -msgid "Attachment '%(filename)s' does not exist!" -msgstr "Dateianhang '%(filename)s' existiert nicht!" - -msgid "" -"To refer to attachments on a page, use '''{{{attachment:filename}}}''', \n" -"as shown below in the list of files. \n" -"Do '''NOT''' use the URL of the {{{[get]}}} link, \n" -"since this is subject to change and can break easily." -msgstr "" -"Um Dateianhänge in eine Seite einzufügen sollte unbedingt eine Angabe \n" -"wie '''{{{attachment:dateiname}}}''' benutzt werden, \n" -"wie sie auch in der folgenden Liste der Dateien erscheint. \n" -"Es sollte '''niemals''' die URL des Verweises (\"laden\") kopiert werden, \n" -"da sich diese jederzeit ändern kann und damit der Verweis auf die Datei " -"brechen würde." - -msgid "del" -msgstr "löschen" - -msgid "move" -msgstr "verschieben" - -msgid "get" -msgstr "laden" - -msgid "view" -msgstr "anzeigen" - -msgid "unzip" -msgstr "auspacken" - -msgid "install" -msgstr "installieren" - -#, python-format -msgid "No attachments stored for %(pagename)s" -msgstr "Es wurden keine Anhänge für die Seite %(pagename)s gespeichert." - -msgid "Edit drawing" -msgstr "Zeichnung editieren" - -msgid "New Attachment" -msgstr "Neuer Dateianhang" - -msgid "" -"An upload will never overwrite an existing file. If there is a name\n" -"conflict, you have to rename the file that you want to upload.\n" -"Otherwise, if \"Rename to\" is left blank, the original filename will be " -"used." -msgstr "" -"Ein neuer Anhang überschreibt niemals einen bereits vorhandenen gleichen " -"Namens.\n" -"Besteht ein Namenskonflikt, muss dem neuen Anhang ein alternativer Name " -"zugewiesen werden.\n" -"Ansonsten kann das Feld \"Umbenennen auf\" leer bleiben und es wird der " -"originale Dateiname benutzt." - -msgid "File to upload" -msgstr "Neuer Dateianhang" - -msgid "Rename to" -msgstr "Umbenennen auf" - -msgid "Overwrite existing attachment of same name" -msgstr "Anhänge gleichen Namens überschreiben" - -msgid "Upload" -msgstr "Datei hochladen" - -msgid "Attached Files" -msgstr "Gespeicherte Dateianhänge" - -msgid "You are not allowed to attach a file to this page." -msgstr "Sie dürfen keine Anhänge an diese Seite anhängen!" - -msgid "File attachments are not allowed in this wiki!" -msgstr "Dateianhänge sind in diesem Wiki nicht erlaubt!" - -msgid "You are not allowed to save a drawing on this page." -msgstr "Sie dürfen auf dieser Seite keine Zeichnung speichern." - -msgid "" -"No file content. Delete non ASCII characters from the file name and try " -"again." -msgstr "" -"Kein Dateiinhalt. Löschen Sie nicht-ASCII-Zeichen aus dem Dateinamen und " -"probieren Sie es noch einmal." - -msgid "You are not allowed to delete attachments on this page." -msgstr "Sie dürfen keine Anhänge dieser Seite löschen!" - -msgid "You are not allowed to move attachments from this page." -msgstr "Sie dürfen keine Anhänge von dieser Seite verschieben." - -msgid "Move aborted!" -msgstr "Verschieben abgebrochen!" - -msgid "Please use the interactive user interface to move attachments!" -msgstr "" -"Für die das Verschieben von Anhängen bitte nur die vorgesehenen Webseiten " -"benutzen!" - -msgid "You are not allowed to get attachments from this page." -msgstr "Sie dürfen auf keine Anhänge dieser Seite zugreifen." - -msgid "You are not allowed to unzip attachments of this page." -msgstr "Sie dürfen keine Anhänge dieser Seite auspacken." - -msgid "You are not allowed to install files." -msgstr "Sie dürfen keine Dateien installieren." - -msgid "You are not allowed to view attachments of this page." -msgstr "Sie dürfen keine Anhänge dieser Seite ansehen." - -#, python-format -msgid "Unsupported upload action: %s" -msgstr "Unbekannte Aktion für Dateianhang: %s" - -#, python-format -msgid "Attachments for \"%(pagename)s\"" -msgstr "Dateianhänge für \"%(pagename)s\"" - -#, python-format -msgid "" -"Attachment '%(target)s' (remote name '%(filename)s') with %(bytes)d bytes " -"saved." -msgstr "" -"Dateianhang '%(target)s' (ursprünglicher Name '%(filename)s') mit %(bytes)d " -"Bytes gesichert." - -#, python-format -msgid "Attachment '%(target)s' (remote name '%(filename)s') already exists." -msgstr "" -"Dateianhang '%(target)s' (ursprünglicher Name '%(filename)s') existiert " -"bereits." - -#, python-format -msgid "Attachment '%(filename)s' already exists." -msgstr "Dateianhang '%(filename)s' existiert bereits." - -#, python-format -msgid "Attachment '%(filename)s' moved to %(page)s." -msgstr "Dateianhang '%(filename)s' auf Seite %(page)s verschoben." - -msgid "Nothing changed" -msgstr "Keine Änderung." - -#, python-format -msgid "Page %(newpagename)s does not exists or you don't have enough rights." -msgstr "" -"Seite %(newpagename)s existiert nicht oder Sie haben nicht ausreichend " -"Rechte." - -msgid "Move aborted because empty page name" -msgstr "Sie können eine Seite nicht auf einen leeren Seitennamen umbenennen." - -#, python-format -msgid "Please use a valid filename for attachment '%(filename)s'." -msgstr "" -"Bitte benutzen Sie einen gültigen Dateinamen für Dateianhang '%(filename)s'." - -msgid "Move aborted because empty attachment name" -msgstr "Verschieben wegen eines leeren Anhangsnamens abgebrochen" - -msgid "Move" -msgstr "Verschieben" - -msgid "New page name" -msgstr "Neuer Seitenname" - -msgid "New attachment name" -msgstr "Neuer Name des Dateianhangs" - -#, python-format -msgid "Attachment '%(filename)s' installed." -msgstr "Dateianhang '%(filename)s' wurde installiert." - -#, python-format -msgid "" -"Attachment '%(filename)s' could not be unzipped because the resulting files " -"would be too large (%(space)d kB missing)." -msgstr "" -"Dateianhang '%(filename)s' konnte nicht ausgepackt werden, weil die " -"ausgepackten Dateien zu groß wären (%(space)d kB fehlen)." - -#, python-format -msgid "" -"Attachment '%(filename)s' could not be unzipped because the resulting files " -"would be too many (%(count)d missing)." -msgstr "" -"Dateianhang '%(filename)s' konnte nicht ausgepackt werden, weil die " -"ausgepackten Dateien zu viele wären (%(count)d fehlen)." - -#, python-format -msgid "Attachment '%(filename)s' unzipped." -msgstr "Dateianhang '%(filename)s' wurde ausgepackt." - -#, python-format -msgid "" -"Attachment '%(filename)s' not unzipped because the files are too big, .zip " -"files only, exist already or reside in folders." -msgstr "" -"Dateianhang '%(filename)s' wurde nicht ausgepackt, weil die Datei zu groß " -"sind, weil nur .zip-Dateien erlaubt sind, weil sie bereits existieren oder " -"weil Dateien in Ordnern enthalten sind." - -#, python-format -msgid "The file %(filename)s is not a .zip file." -msgstr "Die Datei %(filename)s ist keine .zip-Datei." - -#, python-format -msgid "Attachment '%(filename)s'" -msgstr "Dateianhang '%(filename)s'" - -msgid "Package script:" -msgstr "Paket-Skript:" - -msgid "File Name" -msgstr "Dateiname" - -msgid "Modified" -msgstr "Modifiziert" - -msgid "Size" -msgstr "Größe" - -msgid "Unknown file type, cannot display this attachment inline." -msgstr "" -"Dieser Anhang besitzt einen unbekannten Dateityp und kann deshalb nicht " -"direkt angezeigt werden." - -#, python-format -msgid "attachment:%(filename)s of %(pagename)s" -msgstr "[[Verbatim(attachment:)]]%(filename)s für %(pagename)s" - -msgid "This page is already deleted or was never created!" -msgstr "Diese Seite wurde bereits gelöscht oder wurde bisher nicht angelegt!" - -msgid "Rename all /subpages too?" -msgstr "Alle /UnterSeiten auch umbenennen?" - -msgid "New name" -msgstr "Neuer Name" - -msgid "Optional reason for the renaming" -msgstr "Optionale Begründung für das Umbenennen" - -msgid "Really rename this page?" -msgstr "Diese Seite wirklich umbenennen?" - -#, python-format -msgid "Full Link List for \"%s\"" -msgstr "Liste aller Seitenverweise für \"%s\"" - -msgid "Editor" -msgstr "Autor" - -msgid "Pages" -msgstr "Seiten" - -msgid "Select Author" -msgstr "Autor auswählen" - -msgid "Revert all!" -msgstr "Alle restaurieren!" - -msgid "You are not allowed to use this action." -msgstr "Sie dürfen diese Aktion nicht ausführen." - -#, python-format -msgid "Rolled back changes to the page %s." -msgstr "Änderungen an der Seite %s rückgängig gemacht" - -msgid "Exception while calling rollback function:" -msgstr "Fehler beim Aufrufen der Rollback-Funktion:" - -msgid "" -"Please enter your password of your account at the remote wiki below. " -"[[BR]] /!\\ You should trust both wikis because the password could be read " -"by the particular administrators." -msgstr "" -"Bitte geben Sie das Passwort Ihres Accounts im fernen Wiki unten ein. " -"[[BR]] /!\\ Sie sollten beiden Wikis vertrauen, weil das Passwort von den " -"entsprechenden Administratoren gelesen werden könnte." - -msgid "Operation was canceled." -msgstr "Operation wurde abgebrochen." - -msgid "The only supported directions are BOTH and DOWN." -msgstr "Es werden nur die Richtungen BOTH und DOWN unterstützt." - -msgid "" -"Please set an interwikiname in your wikiconfig (see HelpOnConfiguration) to " -"be able to use this action." -msgstr "" -"Bitte setzen Sie interwikiname in Ihrer wikiconfig (siehe " -"HilfeZurKonfiguration), um diese Aktion benutzen zu können." - -msgid "" -"Incorrect parameters. Please supply at least the ''remoteWiki'' parameter. " -"Refer to HelpOnSynchronisation for help." -msgstr "" -"Ungültige Parameter, bitte geben Sie mindestens den ''remoteWiki''-Parameter " -"an. Siehe HilfeZurSynchronisation für weitere Informationen." - -msgid "The ''remoteWiki'' is unknown." -msgstr "Das ''remoteWiki'' ist nicht bekannt." - -msgid "A severe error occured:" -msgstr "Ein schwerwiegender Fehler ist aufgetreten:" - -msgid "Synchronisation finished. Look below for the status messages." -msgstr "Synchronisierung beendet, siehe Status-Nachrichten unten." - -msgid "Synchronisation started -" -msgstr "Synchronisierung gestartet -" - -#, python-format -msgid "" -"Got a list of %s local and %s remote pages. This results in %s different " -"pages over-all." -msgstr "" -"%s lokale und %s ferne Seiten, resultierend in insgesamt %s " -"unterschiedlichen Seiten." - -#, python-format -msgid "After filtering: %s pages" -msgstr "Nach dem Filtern: %s Seiten" - -#, python-format -msgid "Skipped page %s because of no write access to local page." -msgstr "" -"Seite %s wurde wegen fehlenden Schreibrechten auf die lokale Seite " -"übersprungen." - -#, python-format -msgid "Deleted page %s locally." -msgstr "Lokale Seite %s gelöscht." - -#, python-format -msgid "Error while deleting page %s locally:" -msgstr "Fehler beim lokalen Löschen der Seite %s:" - -#, python-format -msgid "Deleted page %s remotely." -msgstr "Ferne Seite %s gelöscht." - -#, python-format -msgid "Error while deleting page %s remotely:" -msgstr "Fehler beim fernen Löschen der Seite %s:" - -#, python-format -msgid "" -"The item %s cannot be merged automatically but was changed in both wikis. " -"Please delete it in one of both wikis and try again." -msgstr "" -"Das Objekt %s kann nicht automatisch zusammengeführt werden, wurde aber in " -"beiden Wikis geändert. Bitte löschen Sie es in einem der beiden Wikis und " -"versuchen Sie es erneut." - -#, python-format -msgid "" -"The item %s has different mime types in both wikis and cannot be merged. " -"Please delete it in one of both wikis or unify the mime type, and try again." -msgstr "" -"Das Objekt %s hat einen unterschiedlichen Mime-Typ in beiden Wikis und kann " -"nicht zusammengeführt werden. Bitte löschen Sie es in einem der beiden Wikis " -"oder vereinheitlichen Sie den Mime-Typ und probieren Sie es nochmal." - -#, python-format -msgid "" -"The item %s was renamed locally. This is not implemented yet. Therefore the " -"full synchronisation history is lost for this page." -msgstr "" -"Seite %s wurde lokal umbenannt. Dies wird noch nicht unterstützt, daher geht " -"für diese Seite die ganze Synchronisierungs-Historie verloren." - -#, python-format -msgid "Synchronising page %s with remote page %s ..." -msgstr "Synchronisiere Seite %s mit der entfernten Seite %s ..." - -#, python-format -msgid "The page %s was deleted remotely but changed locally." -msgstr "Seite %s wurde lokal geändert, aber ferne gelöscht." - -#, python-format -msgid "" -"The page %s could not be synced. The remote page was renamed. This is not " -"supported yet. You may want to delete one of the pages to get it synced." -msgstr "" -"Seite %s konnte nicht synchronisiert werden. Die entfernte Seite wurde " -"umbenannt, was bis jetzt noch nicht unterstützt wird. Vielleicht möchten Sie " -"eine der Seiten löschen, um die Seite erfolgreich zu synchronisieren." - -#, python-format -msgid "Skipped page %s because of a locally or remotely unresolved conflict." -msgstr "" -"Seite %s wurde wegen eines lokalen oder entfernten nicht beseitigten " -"Konflikts übersprungen." - -#, python-format -msgid "" -"This is the first synchronisation between the local and the remote wiki for " -"the page %s." -msgstr "" -"Dies ist die erste Synchronisation zwischen dem lokalen und fernen Wiki für " -"die Seite %s." - -#, python-format -msgid "" -"The page %s could not be merged because you are not allowed to modify the " -"page in the remote wiki." -msgstr "" -"Die Seite %s konnte nicht zusammengeführt werden, weil Sie die Seite im " -"fernen Wiki nicht ändern dürfen." - -#, python-format -msgid "Page %s successfully merged." -msgstr "Seite \"%s\" wurde erfolgreich zusammengeführt." - -#, python-format -msgid "Page %s contains conflicts that were introduced on the remote side." -msgstr "Seite %s enthält von der fernen Seite eingeführte Konflikte." - -#, python-format -msgid "Page %s merged with conflicts." -msgstr "Seite %s wurde mit Konflikten zusammengeführt." - -msgid "Load" -msgstr "Laden" - -msgid "New Page or New Attachment" -msgstr "Neue Seite oder neuer Dateianhang" - -msgid "" -"You can upload a file to a new page or choose to upload a file as attachment " -"for the current page" -msgstr "" -"Sie können eine Datei in eine neue Seite hochladen oder eine Datei als " -"Dateianhang an die aktuelle Seite hochladen" - -msgid "attachment" -msgstr "Dateianhang" - -msgid "overwrite" -msgstr "überschreiben" - -msgid "New Name" -msgstr "Neuer Name" - -#, python-format -msgid "(including %(localwords)d %(pagelink)s)" -msgstr "(inklusive %(localwords)d %(pagelink)s)" - -#, python-format -msgid "" -"The following %(badwords)d words could not be found in the dictionary of %" -"(totalwords)d words%(localwords)s and are highlighted below:" -msgstr "" -"Die nachfolgenden %(badwords)d Worte konnten nicht im Wörterbuch mit %" -"(totalwords)d Worten%(localwords)s gefunden werden und sind im Text " -"hervorgehoben:" - -msgid "Add checked words to dictionary" -msgstr "Markierte Wörter zum Wörterbuch hinzufügen" - -msgid "No spelling errors found!" -msgstr "Keine Rechtschreibfehler gefunden!" - -msgid "You can't save spelling words." -msgstr "Sie können keine Rechtschreibkorrektur-Wörter abspeichern." - -msgid "You can't check spelling on a page you can't read." -msgstr "" -"Sie dürfen keine Seite auf Rechtschreibung prüfen, die Sie nicht lesen " -"können." - -msgid "You are now logged out." -msgstr "Sie sind nun abgemeldet." - -msgid "You are not allowed to subscribe to a page you can't read." -msgstr "Sie dürfen keine Seiten abonnieren, die Sie nicht lesen dürfen." - -msgid "This wiki is not enabled for mail processing." -msgstr "In diesem Wiki ist Mail-Verarbeitung nicht eingeschaltet." - -msgid "You must log in to use subscriptions." -msgstr "Sie müssen sich anmelden, um Abonnements verwenden zu können." - -msgid "Add your email address in your UserPreferences to use subscriptions." -msgstr "" -"Fügen Sie Ihre E-Mail-Adresse in den BenutzerEinstellungen hinzu, um " -"Abonnements benutzen zu können." - -msgid "Your subscription to this page has been removed." -msgstr "Ihr Abonnementsfür diese Seite wurde entfernt." - -msgid "Can't remove regular expression subscription!" -msgstr "Kann nicht Abonnement mit regulärem Ausdruck entfernen." - -msgid "Edit the subscription regular expressions in your UserPreferences." -msgstr "" -"Editieren Sie die regulären Ausdrücke für Abonnements in Ihren " -"BenutzerEinstellungen." - -msgid "You have been subscribed to this page." -msgstr "Die Seite wurde zur Liste abonnierter Seiten hinzugefügt." - -msgid "You could not get subscribed to this page." -msgstr "" -"Die Seite konnte nicht zur Liste abonnierter Seiten hinzugefügt werden." - -msgid "General Information" -msgstr "Allgemeine Informationen" - -#, python-format -msgid "Page size: %d" -msgstr "Seitengröße: %d" - -msgid "SHA digest of this page's content is:" -msgstr "Signatur des Seiteninhalts nach dem SHA-Verfahren:" - -msgid "The following users subscribed to this page:" -msgstr "Nachfolgende Benutzer haben diese Seite abonniert:" - -msgid "This page links to the following pages:" -msgstr "Diese Seite verweist auf die folgenden Seiten:" - -msgid "Diff" -msgstr "Differenz" - -msgid "Comment" -msgstr "Kommentar" - -msgid "Revision History" -msgstr "Versionshistorie" - -msgid "No log entries found." -msgstr "Keine Log-Einträge gefunden." - -#, python-format -msgid "Info for \"%s\"" -msgstr "Info für \"%s\"" - -#, python-format -msgid "Show \"%(title)s\"" -msgstr "\"%(title)s\" anzeigen" - -msgid "General Page Infos" -msgstr "Allgemeine Seiten-Informationen" - -msgid "Please log in first." -msgstr "Bitte melden Sie sich vorher an." - -msgid "Please first create a homepage before creating additional pages." -msgstr "" -"Bitte erzeugen Sie zuerst eine Homepage, bevor Sie weitere Seiten anlegen." - -#, python-format -msgid "" -"You can add some additional sub pages to your already existing homepage " -"here.\n" -"\n" -"You can choose how open to other readers or writers those pages shall be,\n" -"access is controlled by group membership of the corresponding group page.\n" -"\n" -"Just enter the sub page's name and click on the button to create a new " -"page.\n" -"\n" -"Before creating access protected pages, make sure the corresponding group " -"page\n" -"exists and has the appropriate members in it. Use HomepageGroupsTemplate for " -"creating\n" -"the group pages.\n" -"\n" -"||'''Add a new personal page:'''||'''Related access control list " -"group:'''||\n" -"||[[NewPage(HomepageReadWritePageTemplate,read-write page,%(username)s)]]||" -"[\"%(username)s/ReadWriteGroup\"]||\n" -"||[[NewPage(HomepageReadPageTemplate,read-only page,%(username)s)]]||[\"%" -"(username)s/ReadGroup\"]||\n" -"||[[NewPage(HomepagePrivatePageTemplate,private page,%(username)s)]]||%" -"(username)s only||\n" -"\n" -msgstr "" -"Hier können Sie zusätzliche Unterseiten zu Ihrer bereits existierenden " -"Homepage hinzufügen.\n" -"\n" -"Sie können wählen, wie offen diese Seiten für andere Leser oder Autoren sein " -"sollen,\n" -"der Zugriff wird über Gruppenmitgliedschaft in der entsprechenden Gruppe " -"kontrolliert.\n" -"\n" -"Geben Sie einfach den Namen der Unterseite ein und klicken Sie auf den " -"Knopf, um eine neue Seite zu erzeugen.\n" -"\n" -"Bevor Sie zugriffsgeschützte Seiten erzeugen, stellen Sie sicher, dass die " -"entsprechende Gruppenseite existiert und die richtigen Mitglieder hat. " -"Benutzen Sie HomepageGroupsTemplate für das Erzeugen der Gruppenseiten.\n" -"\n" -"||'''Neue persönliche Seite hinzufügen:'''||'''Zugeordnete ACL-Gruppe:'''||\n" -"||[[NewPage(HomepageReadWritePageTemplate,Seite (read/write),%(username)" -"s)]]||[\"%(username)s/ReadWriteGroup\"]||\n" -"||[[NewPage(HomepageReadPageTemplate,Seite (read-only),%(username)s)]]||[\"%" -"(username)s/ReadGroup\"]||\n" -"||[[NewPage(HomepagePrivatePageTemplate,Seite (privat),%(username)s)]]||nur %" -"(username)s||\n" -"\n" - -msgid "MyPages management" -msgstr "Verwaltung meiner Seiten" - -#, python-format -msgid "Subscribe users to the page %s" -msgstr "Seite %s für Benutzer abonnieren" - -#, python-format -msgid "Subscribed for %s:" -msgstr "Abonnenten von %s:" - -msgid "Not a user:" -msgstr "Kein Benutzer:" - -msgid "You are not allowed to perform this action." -msgstr "Sie dürfen diese Aktion nicht ausführen." - -#, python-format -msgid "(!) Only pages changed since '''%s''' are being displayed!" -msgstr "(!) Nur Seiten, die seit '''%s''' geändert wurden, werden angezeigt!" - -msgid "" -"/!\\ The modification date you entered was not recognized and is therefore " -"not considered for the search results!" -msgstr "" -"/!\\ Das eingegebene Änderungsdatum wurde nicht erkannt und wird deshalb " -"nicht bei der Suche berücksichtigt." - -#, python-format -msgid "Title Search: \"%s\"" -msgstr "Titelsuche: \"%s\"" - -#, python-format -msgid "Advanced Search: \"%s\"" -msgstr "Erweiterte Suche: \"%s\"" - -#, python-format -msgid "Full Text Search: \"%s\"" -msgstr "Volltextsuche: \"%s\"" - -#, python-format -msgid "" -"Your search query {{{\"%s\"}}} is invalid. Please refer to HelpOnSearching " -"for more information." -msgstr "" -"Ihre Suchanfrage {{{\"%s\"}}} ist ungültig. Siehe HilfeZumSuchen für weitere " -"Informationen." - -#, python-format -msgid "" -"Your search query {{{\"%s\"}}} didn't return any results. Please change some " -"terms and refer to HelpOnSearching for more information.%s" -msgstr "" -"Ihre Suche nach {{{\"%s\"}}} hat keine Resultate ergeben. Bitte ändern Sie " -"einige Suchbegriffe und lesen Sie für weitere Informationen auf " -"HilfeZumSuchen nach. %s" - -msgid "(!) Consider performing a" -msgstr "(!) Erwägen Sie eine" - -msgid "full-text search with your search terms" -msgstr "Volltextsuche mit Ihren Suchbegriffen" - -msgid "" -"(!) You're performing a title search that might not include all related " -"results of your search query in this wiki. [[BR]]" -msgstr "" -"(!) Sie führen eine Titelsuche durch, die möglicherweise nicht alle " -"relevanten Ergebnisse Ihrer Sucheanfrage in diesem Wiki enthält. [[BR]]" - -msgid "Click here to perform a full-text search with your search terms!" -msgstr "Hier klicken für eine Volltextsuche mit diesen Suchbegriffen!" - -#, python-format -msgid "" -"Restored Backup: %(filename)s to target dir: %(targetdir)s.\n" -"Files: %(filecount)d, Directories: %(dircount)d" -msgstr "" -"Wiederhergestelltes Backup: %(filename)s nach Zielverzeichnis: %(targetdir)" -"s.\n" -"Dateien: %(filecount)d, Verzeichnisse: %(dircount)d" - -#, python-format -msgid "Restoring backup: %(filename)s to target dir: %(targetdir)s failed." -msgstr "" -"Wiederherstellen von Backup %(filename)s in das Zielverzeichnis %(targetdir)" -"s fehlgeschlagen." - -msgid "Wiki Backup / Restore" -msgstr "Wiki Sicherung / Wiederherstellung" - -msgid "" -"Some hints:\n" -" * To restore a backup:\n" -" * Restoring a backup will overwrite existing data, so be careful.\n" -" * Rename it to .tar. (remove the --date--time--UTC " -"stuff).\n" -" * Put the backup file into the backup_storage_dir (use scp, ftp, ...).\n" -" * Hit the [[GetText(Restore)]] button below.\n" -"\n" -" * To make a backup, just hit the [[GetText(Backup)]] button and save the " -"file\n" -" you get to a secure place.\n" -"\n" -"Please make sure your wiki configuration backup_* values are correct and " -"complete.\n" -"\n" -msgstr "" -"Hinweise:\n" -" * Um ein Backup wiederherzustellen:\n" -" * Das Wiederherstellen eines Backups wird bestehende Daten überschreiben, " -"also seien Sie vorsichtig.\n" -" * Benennen Sie es auf .tar. um (entfernen Sie --date--" -"time--UTC).\n" -" * Legen Sie die Backupdatei in das backup_storage_dir (mit scp, " -"ftp, ...).\n" -" * Drücken Sie unten auf [[GetText(Restore)]]-Knopf unten.\n" -"\n" -" * Um ein Backup zu erstellen, drücken Sie einfach auf den [[GetText" -"(Backup)]]-Knopf und sichern Sie die Datei,\n" -" die Sie erhalten an eine sichere Stelle.\n" -"\n" -"Bitte stellen Sie sicher, dass die backup_* Werte in Ihrer Wiki-" -"Konfiguration korrekt und vollständig sind.\n" - -msgid "Backup" -msgstr "Datensicherung" - -msgid "Restore" -msgstr "Datenwiederherstellung" - -msgid "You are not allowed to do remote backup." -msgstr "Sie dürfen kein Remote-Backup ausführen." - -#, python-format -msgid "Unknown backup subaction: %s." -msgstr "Unbekannte backup Unteraktion: %s." - -msgid "You are not allowed to revert this page!" -msgstr "Sie dürfen diese Seite nicht restaurieren!" - -msgid "" -"You were viewing the current revision of this page when you called the " -"revert action. If you want to revert to an older revision, first view that " -"older revision and then call revert to this (older) revision again." -msgstr "" -"Sie haben die aktuelle Revision dieser Seite angeschaut als Sie die " -"Restaurieren-Funktion aufgerufen haben. Wenn Sie eine ältere Revision " -"restaurieren wollen, betrachten Sie erst diese ältere Revision und rufen Sie " -"dann die Restaurieren-Funktion für diese ältere Revision erneut auf." - -#, python-format -msgid "Local Site Map for \"%s\"" -msgstr "Lokale Seitenverweise für \"%s\"" - -#, python-format -msgid "No pages like \"%s\"!" -msgstr "Keine Seite ähnlich wie \"%s\"!" - -#, python-format -msgid "Invalid filename \"%s\"!" -msgstr "Ungültiger Dateiname \"%s\"!" - -#, python-format -msgid "Created the package %s containing the pages %s." -msgstr "Paket %s, das die Seiten %s enthält wurde erzeugt." - -msgid "Package pages" -msgstr "Seiten paketieren" - -msgid "Package name" -msgstr "Paketname" - -msgid "List of page names - separated by a comma" -msgstr "Liste von Seitennamen - getrennt durch ein Komma" - -msgid "No older revisions available!" -msgstr "Es sind keine älteren Versionen dieser Seite verfügbar!" - -#, python-format -msgid "Diff for \"%s\"" -msgstr "Änderungen von \"%s\"" - -#, python-format -msgid "Differences between revisions %d and %d" -msgstr "Unterschiede zwischen den Revisionen %d und %d" - -#, python-format -msgid "(spanning %d versions)" -msgstr "(über %d Versionen hinweg)" - -#, python-format -msgid "The page was saved %(count)d times, though!" -msgstr "Die Seite wurde jedoch %(count)d mal gespeichert!" - -msgid "(ignoring whitespace)" -msgstr "(ignoriere Leerraum)" - -msgid "Ignore changes in the amount of whitespace" -msgstr "Ausschließlich Leerraum betreffende Änderungen ignorieren" - -#, python-format -msgid "Exactly one page like \"%s\" found, redirecting to page." -msgstr "Genau eine Seite wie \"%s\" gefunden, leite dorthin weiter." - -#, python-format -msgid "Pages like \"%s\"" -msgstr "Seiten ähnlich wie \"%s\"" - -#, python-format -msgid "%(matchcount)d %(matches)s for \"%(title)s\"" -msgstr "%(matchcount)d %(matches)s passen zu \"%(title)s\"" - -msgid "Copy all /subpages too?" -msgstr "Alle /UnterSeiten auch kopieren?" - -msgid "Optional reason for the copying" -msgstr "Optionale Begründung für das Kopieren" - -msgid "Really copy this page?" -msgstr "Diese Seite wirklich kopieren?" - -msgid "" -"Cannot create a new page without a page name. Please specify a page name." -msgstr "" -"Kann keine neue Seite ohne Seitennamen anlegen - bitte geben Sie einen " -"Seitennamen an." - -msgid "Delete" -msgstr "Löschen" - -msgid "Delete all /subpages too?" -msgstr "Alle /UnterSeiten auch löschen?" - -msgid "Optional reason for the deletion" -msgstr "Optionale Begründung für die Löschung" - -msgid "Really delete this page?" -msgstr "Diese Seite wirklich löschen?" - -#~ msgid "filename" -#~ msgstr "Dateiname" - -#~ msgid "" -#~ "~-If you submit this form, the submitted values will be displayed.\n" -#~ "To use this form on other pages, insert a\n" -#~ "[[BR]][[BR]]'''{{{ [[Form(\"%(pagename)s\")]]}}}'''[[BR]][[BR]]\n" -#~ "macro call.-~\n" -#~ msgstr "" -#~ "~-Das Absenden dieses Formulars zeigt die eingegebenen Werte an.\n" -#~ "Um das Formular auf anderen Seiten zu benutzen, muss folgender " -#~ "Makroaufruf\n" -#~ "[[BR]][[BR]]'''{{{ [[Form(\"%(pagename)s\")]]}}}'''[[BR]][[BR]]\n" -#~ "auf diesen Seiten platziert werden.-~\n" - -#~ msgid "" -#~ "Unknown user name: {{{\"%s\"}}}. Please enter user name and password." -#~ msgstr "" -#~ "Unbekannter Benutzername: {{{\"%s\"}}}. Bitte geben Sie Benutzername und " -#~ "Passwort ein." diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/demo.ahk b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/demo.ahk deleted file mode 100644 index a75a8bf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/demo.ahk +++ /dev/null @@ -1,181 +0,0 @@ -/* -multiline comment -msgbox(comment) -*/ -send, key[pgdn] -string := "hello" . x . "world!" -string := "hello ""world""! " -string := "hello `"world""! " -; single line comment1 -;;; single line comment2 - -::stopi::viper_off() - -a::send, ^a -mylabel:send, ^{space} ;; set mark -e::send, ^e -n:: - send, ^n - return -!i:: -viper("iviper") ; stdlib -x = "viper"" " ; escaped quote -Return -#If WinExist("iviper" ) -indexdir = %A_ScriptDir%\%dir% -FileCreateDir, % indexdir -fileindex = %indexdir%\_files -FileSelectFile, file,,, Select an image:, Images (*.gif; *.jpg; *.bmp; *.png; *.tif; *.ico; *.cur; *.ani; *.exe; *.dll) - -; viper - - -i::viper_off() -#If - -;; keybindings -#If WinExist("iviper") and WinActive("ahk_class Emacs") - -p:: -k:: -send, ^p -return -,::send, +!, ;; beginning of page -.::send, +!. ;; end of page -[::send, !a -]::send, !e -d:: ^k ;; kill line -x:: send ^d -\:: ^!k ;; kill next word or sexp - - -#IfWinActive -#Persistent - -F2:: ;; hotkey -start: ;; label -start2: ; label - ppm := ppm_new(50, 50, 255) - ppm_fill(ppm, 80, 90, 95) - msgbox % getPixel(ppm, 1, 1) - setPixel(90, 90, 90, ppm, 1, 1) - msgbox % getPixel(ppm, 1, 1) - ListVars ; command - msgbox % ppm - return - - - ppm_read(file) - { - fileread, ppm, % file - return ppm -} - -::hotstring:: -::hot3:: -ppm_width(ppm) -{ - regexmatch(ppm, "\R(\d+)\s(\d+)", dim) - return dim1 -} -ppm_height(ppm) -{ - regexmatch(ppm, "\R(\d+)\s(\d+)", dim) - return dim2 -} - -ppm_colors(ppm) -{ -regexmatch(ppm, "\R(\d+)\D*\R", colors) ; \R stands for any -return colors1 -} - -ppm_data(ppm) -{ -pos := regexmatch(ppm, "\R(\d+)\D*\R", colors) ; \R stands for any newline -stringtrimleft, data, ppm, pos + strlen(colors1) -return data -} -ppm_header(ppm) -{ -pos := regexmatch(ppm, "\R(\d+)\D*\R", colors) ; \R stands for any newline -stringleft, header, ppm, pos + strlen(colors1) -return header -} - -ppm_fill(ByRef ppm, r, g, b) -{ - width := ppm_width(ppm) - height := ppm_height(ppm) - header := ppm_header(ppm) - headerLength := strlen(header) - varsetcapacity(data, width * height, 0) - loop, % (width * height) - { - if r - numput(r, data, (A_Index - 1) * 3, "uchar") - if g - numput(g, data, (A_Index - 1) * 3 + 1, "uchar") - if b - numput(b, data, (A_Index - 1) * 3 + 2, "uchar") -} -VarCopy(&ppm + headerLength, &data, width * height) - -} - -ppm_new(width, height, colors) -{ - header = P6`n%width% %height%`n%colors%`n - headerLength := strlen(header) - varsetcapacity(ppm, width * height + headerLength, 1) - varsetcapacity(data, width * height, 0) - VarCopy(&ppm, &header, headerLength) - VarCopy(&ppm + headerLength, &data, width * height) - return ppm -} - -heredoc = -( - P6 - # lasdjkf - 87 09 - 255 - color data... -) - -; Example: Simple image viewer: - -Gui, +Resize -Gui, Add, Button, default, &Load New Image -Gui, Add, Radio, ym+5 x+10 vRadio checked, Load &actual size -Gui, Add, Radio, ym+5 x+10, Load to &fit screen -Gui, Add, Pic, xm vPic -Gui, Show -return - -ButtonLoadNewImage: -FileSelectFile, file,,, Select an image:, Images (*.gif; *.jpg; *.bmp; *.png; *.tif; *.ico; *.cur; *.ani; *.exe; *.dll) -if file = - return -Gui, Submit, NoHide ; Save the values of the radio buttons. -if Radio = 1 ; Display image at its actual size. -{ - Width = 0 - Height = 0 -} -else ; Second radio is selected: Resize the image to fit the screen. -{ - Width := A_ScreenWidth - 28 ; Minus 28 to allow room for borders and margins inside. - Height = -1 ; "Keep aspect ratio" seems best. -} -GuiControl,, Pic, *w%width% *h%height% %file% ; Load the image. -Gui, Show, xCenter y0 AutoSize, %file% ; Resize the window to match the picture size. -return - -GuiClose: -ExitApp -; Example: Simple text editor with menu bar. - -; Create the sub-menus for the menu bar: -Menu, FileMenu, Add, &New, FileNew - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/demo.cfm b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/demo.cfm deleted file mode 100644 index 78098c0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/demo.cfm +++ /dev/null @@ -1,50 +0,0 @@ - - ---> - ----> - - - -Date Functions - - - - - #RightNow#
- #DateFormat(RightNow)#
- #DateFormat(RightNow,"mm/dd/yy")#
- #TimeFormat(RightNow)#
- #TimeFormat(RightNow,"hh:mm tt")#
- #IsDate(RightNow)#
- #IsDate("January 31, 2007")#
- #IsDate("foo")#
- #DaysInMonth(RightNow)# -
- - - - - #x# - #y# - #z# - - - - - - - - - - - - - - - - - ---> comment ---> diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/demo.hbs b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/demo.hbs deleted file mode 100644 index 1b9ed5a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/demo.hbs +++ /dev/null @@ -1,12 +0,0 @@ - - -
- {{intro}} -
- -{{#if isExpanded}} -
{{body}}
- -{{else}} - -{{/if}} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/django_sample.html+django b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/django_sample.html+django deleted file mode 100644 index b1fdc5e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/django_sample.html+django +++ /dev/null @@ -1,68 +0,0 @@ -{% extends "admin/base_site.html" %} -{% load i18n admin_modify adminmedia %} -{% block extrahead %}{{ block.super }} - -{% for js in javascript_imports %}{% include_admin_script js %}{% endfor %} -{% endblock %} -{% block stylesheet %}{% admin_media_prefix %}css/forms.css{% endblock %} -{% block coltype %}{% if ordered_objects %}colMS{% else %}colM{% endif %}{% endblock %} -{% block bodyclass %}{{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% endblock %} -{% block userlinks %}{% trans 'Documentation' %} / {% trans 'Change password' %} / {% trans 'Log out' %}{% endblock %} -{% block breadcrumbs %}{% if not is_popup %} - -{% endif %}{% endblock %} -{% block content %}
-{% if change %}{% if not is_popup %} - -{% endif %}{% endif %} -
{% block form_top %}{% endblock %} -
-{% if is_popup %}{% endif %} -{% if opts.admin.save_on_top %}{% submit_row %}{% endif %} -{% if form.error_dict %} -

- {% blocktrans count form.error_dict.items|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %} -

-{% endif %} -{% for bound_field_set in bound_field_sets %} -
- {% if bound_field_set.name %}

{{ bound_field_set.name }}

{% endif %} - {% if bound_field_set.description %}
{{ bound_field_set.description }}
{% endif %} - {% for bound_field_line in bound_field_set %} - {% admin_field_line bound_field_line %} - {% for bound_field in bound_field_line %} - {% filter_interface_script_maybe bound_field %} - {% endfor %} - {% endfor %} -
-{% endfor %} -{% block after_field_sets %}{% endblock %} -{% if change %} - {% if ordered_objects %} -

{% trans "Ordering" %}

-
- {% if form.order_.errors %}{{ form.order_.html_error_list }}{% endif %} -

{{ form.order_ }}

-
- {% endif %} -{% endif %} -{% for related_object in inline_related_objects %}{% edit_inline related_object %}{% endfor %} -{% block after_related_objects %}{% endblock %} -{% submit_row %} -{% if add %} - -{% endif %} -{% if auto_populated_fields %} - -{% endif %} -
-
-{% endblock %} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/dwarf.cw b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/dwarf.cw deleted file mode 100644 index ad8bb61..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/dwarf.cw +++ /dev/null @@ -1,17 +0,0 @@ -;redcode -;name Dwarf -;author A. K. Dewdney -;version 94.1 -;date April 29, 1993 -;strategy Bombs every fourth instruction. - ORG start ; Indicates the instruction with - ; the label "start" should be the - ; first to execute. -step EQU 4 ; Replaces all occurrences of "step" - ; with the character "4". -target DAT.F #0, #0 ; Pointer to target instruction. -start ADD.AB #step, target ; Increments pointer by step. - MOV.AB #0, @target ; Bombs target instruction. - JMP.A start ; Same as JMP.A -2. Loops back to - ; the instruction labelled "start". - END diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ember.handlebars b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ember.handlebars deleted file mode 100644 index 515dffb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ember.handlebars +++ /dev/null @@ -1,33 +0,0 @@ -{{#view EmberFirebaseChat.ChatView class="chat-container"}} -
-
    - {{#each message in content}} -
  • - [{{formatTimestamp "message.timestamp" fmtString="h:mm:ss A"}}] - {{message.sender}}: {{message.content}} -
  • - {{/each}} -
-
- - {{! Comment }} - {{{unescaped value}}} - - {{#view EmberFirebaseChat.InputView class="chat-input-container"}} -
- {{#if "auth.authed"}} - {{#if "auth.hasName"}} - - - {{else}} - - - {{/if}} - {{else}} - - - {{/if}} -
- {{/view}} -{{/view}} - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/erl_session b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/erl_session deleted file mode 100644 index c207781..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/erl_session +++ /dev/null @@ -1,10 +0,0 @@ -1> io:format("Hello\n"). -Hello -ok -2> fun(X) -> X + 1 end. -#Fun -3> 123 + 234. -357 -4> X = Y. -* 1: variable 'Y' is unbound -5> diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/escape_semicolon.clj b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/escape_semicolon.clj deleted file mode 100644 index b46a852..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/escape_semicolon.clj +++ /dev/null @@ -1 +0,0 @@ -(= c (int \;)) (do (.readLine s) :line-start) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/evil_regex.js b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/evil_regex.js deleted file mode 100644 index 3839c3f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/evil_regex.js +++ /dev/null @@ -1,48 +0,0 @@ -/regexp/.test(foo) || x = [/regexp/,/regexp/, /regexp/, // comment -// comment -/regexp/]; -if (/regexp/.test(string)) -{/regexp/.test(string);}; -x =/regexp/; -x = /regexp/; -if (0/regexp/.exec(string)) -x = { u:/regexp/, v: /regexp/ }; -foo();/regexp/.test(string); /regexp/.test(string); -if (!/regexp/) foobar(); -x = u %/regexp/.exec(string) */regexp/.exec(string) / /regexp/.exec(string); -x = u?/regexp/.exec(string) : v +/regexp/.exec(string) -/regexp/.exec(string); -a = u^/regexp/.exec(string) &/regexp/.exec(string) |/regexp/.exec(string) +~/regexp/.exec(string); -x = /regexp/ /* a comment */ ; -x = /[reg/exp]/; -x = 4/2/i; -x = (a == b) ?/* this is a comment */ c : d; -/// a comment // -a = /regex//2/1; //syntactically correct, returns NaN - - - - -/* original examples */ - -// regex - -blah(/abc/); -x = /abc/; -x = /abc/.match; - -// math - -blah(1/2); //comment -x = 1 / 2 / 3; -x = 1/1/.1; - -// broken - -x=/1/; -x=1/a/g; -x=a/a/g; - -// real-world - -var x = 1/(1+Math.sqrt(sum)); // convert to number between 1-0 -return Math.round((num / den) * 100)/100; diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.Rd b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.Rd deleted file mode 100644 index 2b8de0b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.Rd +++ /dev/null @@ -1,78 +0,0 @@ -\name{foo} -\alias{foo} -% I'm a comment -\title{The foo function} - -\description{It doesn't do much} - -\usage{ -foo(x, y) -} - -\arguments{ - \item{x}{A number} - \item{y}{Another number} -} -\details{ - I just adds \code{x} and \code{y}, -} -\value{\code{numeric}. The sum of \code{x} and \code{y}.} -\references{ - \href{http://en.wikipedia.org/wiki/Sum}{Sum} -} -\author{ - Anonymous -} -\note{ - Lorem ipsum \dots \R \emph{emp}, \strong{strong}, \bold{bold}, - \sQuote{single quotes}, \dQuote{double quotes}, \code{code}, - \preformatted{x <- 2 + 2}, \kbd{type this}, \samp{literal seq}, - \pkg{base}, \file{foo.txt}, \email{email@hostname}, - \url{http://cran.r-project.org/}, \var{foo}, \env{HOME}, - \option{-d}, \dfn{something new}, \acronym{GNU}. - - Escaped symbols: \\ \{ \} \% not comment. \\NotAMacro. - - \tabular{rlll}{ - [,1] \tab alpha \tab numeric \tab A (ppb)\cr - [,2] \tab bravo \tab integer \tab B \cr - [,3] \tab charlie \tab character \tab C \cr - } - \enumerate{ - \item delta - \item echo - } - \itemize{ - \item foxtrot - \item golf - } - - \deqn{p(x; \mu, \sigma^2) = \frac{1}{\sigma \sqrt{2 \pi}} \exp \frac{-(x - \mu)^2}{2 \sigma}{% - p(\mu; x) = 1/\sigma (2 \pi)^(-1/2) exp( -(x - \mu)^2 / (2 \sigma)) } - for \eqn{x = 0, 1, 2, \ldots}. - - \if{latex}{\out{\beta}}\ifelse{html}{\out{β}}{beta} - -#ifdef unix -Now windows -#endif -#ifndef windows -Using windows -#endif - -} -\section{Misc}{ - Stuff. -} - -\seealso{ - \code{\link{sum}} -} -\examples{ -x <- 1 -y <- 2 -z <- foo(x, y) -\dontrun{plot(z)} -\dontshow{log(x)} -} -\keyword{arith} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.als b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.als deleted file mode 100644 index 3a5ab82..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.als +++ /dev/null @@ -1,217 +0,0 @@ -module examples/systems/views - -/* - * Model of views in object-oriented programming. - * - * Two object references, called the view and the backing, - * are related by a view mechanism when changes to the - * backing are automatically propagated to the view. Note - * that the state of a view need not be a projection of the - * state of the backing; the keySet method of Map, for - * example, produces two view relationships, and for the - * one in which the map is modified by changes to the key - * set, the value of the new map cannot be determined from - * the key set. Note that in the iterator view mechanism, - * the iterator is by this definition the backing object, - * since changes are propagated from iterator to collection - * and not vice versa. Oddly, a reference may be a view of - * more than one backing: there can be two iterators on the - * same collection, eg. A reference cannot be a view under - * more than one view type. - * - * A reference is made dirty when it is a backing for a view - * with which it is no longer related by the view invariant. - * This usually happens when a view is modified, either - * directly or via another backing. For example, changing a - * collection directly when it has an iterator invalidates - * it, as does changing the collection through one iterator - * when there are others. - * - * More work is needed if we want to model more closely the - * failure of an iterator when its collection is invalidated. - * - * As a terminological convention, when there are two - * complementary view relationships, we will give them types - * t and t'. For example, KeySetView propagates from map to - * set, and KeySetView' propagates from set to map. - * - * author: Daniel Jackson - */ - -open util/ordering[State] as so -open util/relation as rel - -sig Ref {} -sig Object {} - --- t->b->v in views when v is view of type t of backing b --- dirty contains refs that have been invalidated -sig State { - refs: set Ref, - obj: refs -> one Object, - views: ViewType -> refs -> refs, - dirty: set refs --- , anyviews: Ref -> Ref -- for visualization - } --- {anyviews = ViewType.views} - -sig Map extends Object { - keys: set Ref, - map: keys -> one Ref - }{all s: State | keys + Ref.map in s.refs} -sig MapRef extends Ref {} -fact {State.obj[MapRef] in Map} - -sig Iterator extends Object { - left, done: set Ref, - lastRef: lone done - }{all s: State | done + left + lastRef in s.refs} -sig IteratorRef extends Ref {} -fact {State.obj[IteratorRef] in Iterator} - -sig Set extends Object { - elts: set Ref - }{all s: State | elts in s.refs} -sig SetRef extends Ref {} -fact {State.obj[SetRef] in Set} - -abstract sig ViewType {} -one sig KeySetView, KeySetView', IteratorView extends ViewType {} -fact ViewTypes { - State.views[KeySetView] in MapRef -> SetRef - State.views[KeySetView'] in SetRef -> MapRef - State.views[IteratorView] in IteratorRef -> SetRef - all s: State | s.views[KeySetView] = ~(s.views[KeySetView']) - } - -/** - * mods is refs modified directly or by view mechanism - * doesn't handle possibility of modifying an object and its view at once? - * should we limit frame conds to non-dirty refs? - */ -pred modifies [pre, post: State, rs: set Ref] { - let vr = pre.views[ViewType], mods = rs.*vr { - all r: pre.refs - mods | pre.obj[r] = post.obj[r] - all b: mods, v: pre.refs, t: ViewType | - b->v in pre.views[t] => viewFrame [t, pre.obj[v], post.obj[v], post.obj[b]] - post.dirty = pre.dirty + - {b: pre.refs | some v: Ref, t: ViewType | - b->v in pre.views[t] && !viewFrame [t, pre.obj[v], post.obj[v], post.obj[b]] - } - } - } - -pred allocates [pre, post: State, rs: set Ref] { - no rs & pre.refs - post.refs = pre.refs + rs - } - -/** - * models frame condition that limits change to view object from v to v' when backing object changes to b' - */ -pred viewFrame [t: ViewType, v, v', b': Object] { - t in KeySetView => v'.elts = dom [b'.map] - t in KeySetView' => b'.elts = dom [v'.map] - t in KeySetView' => (b'.elts) <: (v.map) = (b'.elts) <: (v'.map) - t in IteratorView => v'.elts = b'.left + b'.done - } - -pred MapRef.keySet [pre, post: State, setRefs: SetRef] { - post.obj[setRefs].elts = dom [pre.obj[this].map] - modifies [pre, post, none] - allocates [pre, post, setRefs] - post.views = pre.views + KeySetView->this->setRefs + KeySetView'->setRefs->this - } - -pred MapRef.put [pre, post: State, k, v: Ref] { - post.obj[this].map = pre.obj[this].map ++ k->v - modifies [pre, post, this] - allocates [pre, post, none] - post.views = pre.views - } - -pred SetRef.iterator [pre, post: State, iterRef: IteratorRef] { - let i = post.obj[iterRef] { - i.left = pre.obj[this].elts - no i.done + i.lastRef - } - modifies [pre,post,none] - allocates [pre, post, iterRef] - post.views = pre.views + IteratorView->iterRef->this - } - -pred IteratorRef.remove [pre, post: State] { - let i = pre.obj[this], i' = post.obj[this] { - i'.left = i.left - i'.done = i.done - i.lastRef - no i'.lastRef - } - modifies [pre,post,this] - allocates [pre, post, none] - pre.views = post.views - } - -pred IteratorRef.next [pre, post: State, ref: Ref] { - let i = pre.obj[this], i' = post.obj[this] { - ref in i.left - i'.left = i.left - ref - i'.done = i.done + ref - i'.lastRef = ref - } - modifies [pre, post, this] - allocates [pre, post, none] - pre.views = post.views - } - -pred IteratorRef.hasNext [s: State] { - some s.obj[this].left - } - -assert zippishOK { - all - ks, vs: SetRef, - m: MapRef, - ki, vi: IteratorRef, - k, v: Ref | - let s0=so/first, - s1=so/next[s0], - s2=so/next[s1], - s3=so/next[s2], - s4=so/next[s3], - s5=so/next[s4], - s6=so/next[s5], - s7=so/next[s6] | - ({ - precondition [s0, ks, vs, m] - no s0.dirty - ks.iterator [s0, s1, ki] - vs.iterator [s1, s2, vi] - ki.hasNext [s2] - vi.hasNext [s2] - ki.this/next [s2, s3, k] - vi.this/next [s3, s4, v] - m.put [s4, s5, k, v] - ki.remove [s5, s6] - vi.remove [s6, s7] - } => no State.dirty) - } - -pred precondition [pre: State, ks, vs, m: Ref] { - // all these conditions and other errors discovered in scope of 6 but 8,3 - // in initial state, must have view invariants hold - (all t: ViewType, b, v: pre.refs | - b->v in pre.views[t] => viewFrame [t, pre.obj[v], pre.obj[v], pre.obj[b]]) - // sets are not aliases --- ks != vs - // sets are not views of map --- no (ks+vs)->m & ViewType.pre.views - // no iterator currently on either set --- no Ref->(ks+vs) & ViewType.pre.views - } - -check zippishOK for 6 but 8 State, 3 ViewType expect 1 - -/** - * experiment with controlling heap size - */ -fact {all s: State | #s.obj < 5} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.bug b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.bug deleted file mode 100644 index 9ccd531..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.bug +++ /dev/null @@ -1,54 +0,0 @@ -# Alligators: multinomial - logistic regression -# http://www.openbugs.info/Examples/Aligators.html -model { - # PRIORS - alpha[1] <- 0; # zero contrast for baseline food - for (k in 2 : K) { - alpha[k] ~ dnorm(0, 0.00001) # vague priors - } - # Loop around lakes: - for (k in 1 : K){ - beta[1, k] <- 0 - } # corner-point contrast with first lake - for (i in 2 : I) { - beta[i, 1] <- 0 ; # zero contrast for baseline food - for (k in 2 : K){ - beta[i, k] ~ dnorm(0, 0.00001) # vague priors - } - } - # Loop around sizes: - for (k in 1 : K){ - gamma[1, k] <- 0 # corner-point contrast with first size - } - for (j in 2 : J) { - gamma[j, 1] <- 0 ; # zero contrast for baseline food - for ( k in 2 : K){ - gamma[j, k] ~ dnorm(0, 0.00001) # vague priors - } - } - - # LIKELIHOOD - for (i in 1 : I) { # loop around lakes - for (j in 1 : J) { # loop around sizes - - # Fit standard Poisson regressions relative to baseline - lambda[i, j] ~ dflat() # vague priors - for (k in 1 : K) { # loop around foods - X[i, j, k] ~ dpois(mu[i, j, k]) - log(mu[i, j, k]) <- lambda[i, j] + alpha[k] + beta[i, k] + gamma[j, k] - culmative.X[i, j, k] <- culmative(X[i, j, k], X[i, j, k]) - } - } - } - - # TRANSFORM OUTPUT TO ENABLE COMPARISON - # WITH AGRESTI'S RESULTS - for (k in 1 : K) { # loop around foods - for (i in 1 : I) { # loop around lakes - b[i, k] <- beta[i, k] - mean(beta[, k]); # sum to zero constraint - } - for (j in 1 : J) { # loop around sizes - g[j, k] <- gamma[j, k] - mean(gamma[, k]); # sum to zero constraint - } - } -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.c b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.c deleted file mode 100644 index 7bf7014..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.c +++ /dev/null @@ -1,2080 +0,0 @@ -#include -#include -#include -#include "codegen.h" -#include "symboltable.h" -#include "stringbuffer.h" - -extern void yyerror(char* msg); - -static stringBuffer* staticVariableBuffer; -static stringBuffer* classInitBuffer; -static stringBuffer* currentMethodBuffer; -static stringBuffer* finishedMethodsBuffer; -static stringBuffer* mainBuffer; - -static int currentMethodBufferIndex; -static int currentMethodStackSize; -static int currentMethodStackSizeMax; -static int currentMethodNumberOfLocals; - -static int classInitBufferIndex; -static int classInitStackSize; -static int classInitStackSizeMax; - -static int labelCounter = 0; -static int global = 1; - -char tempString[MAX_LENGTH_OF_COMMAND]; - -extern char* className; /* from minako-syntax.y */ - -/* forward declarations */ -static void increaseStackby(int stackdiff); -char convertType(int type); - -void codegenInit() { - staticVariableBuffer = newStringBuffer(); - classInitBuffer = newStringBuffer(); - currentMethodBuffer = 0; - finishedMethodsBuffer = newStringBuffer(); - mainBuffer = newStringBuffer(); - - stringBufferAppend(mainBuffer, "; ------- Header --------------------------------------------"); - sprintf(tempString, ".class public synchronized %s", className); - stringBufferAppend(mainBuffer, tempString); - stringBufferAppend(mainBuffer, ".super java/lang/Object"); - stringBufferAppend(mainBuffer, "; -----------------------------------------------------------"); - stringBufferAppend(mainBuffer, ""); - - stringBufferAppend(finishedMethodsBuffer, "; ------- Constructor ---------------------------------------"); - stringBufferAppend(finishedMethodsBuffer, ".method public ()V"); - stringBufferAppend(finishedMethodsBuffer, "\t.limit stack 1"); - stringBufferAppend(finishedMethodsBuffer, "\t.limit locals 1"); - stringBufferAppend(finishedMethodsBuffer, "\taload_0"); - stringBufferAppend(finishedMethodsBuffer, "\tinvokenonvirtual java/lang/Object/()V"); - stringBufferAppend(finishedMethodsBuffer, "\treturn"); - stringBufferAppend(finishedMethodsBuffer, ".end method"); - stringBufferAppend(finishedMethodsBuffer, "; -----------------------------------------------------------"); - stringBufferAppend(finishedMethodsBuffer, ""); - - stringBufferAppend(staticVariableBuffer, "; ------- Class Variables -----------------------------------"); - - stringBufferAppend(classInitBuffer, "; ------- Class Initializer ---------------------------------"); - stringBufferAppend(classInitBuffer, ".method static ()V"); - classInitBufferIndex = classInitBuffer->numberOfNextElement; - stringBufferAppend(classInitBuffer, "\t.limit locals 0"); - -} - -void codegenAppendCommand(char* cmd, int stackdiff) { - char tempString[MAX_LENGTH_OF_COMMAND]; - sprintf(tempString, "\t%s", cmd); - if (global) stringBufferAppend(classInitBuffer, tempString); - else stringBufferAppend(currentMethodBuffer, tempString); - increaseStackby(stackdiff); -} - -void codegenInsertCommand(int address, char* cmd, int stackdiff) { - char tempString[MAX_LENGTH_OF_COMMAND]; - sprintf(tempString, "\t%s", cmd); - if (global) stringBufferInsert(classInitBuffer, address, tempString); - else stringBufferInsert(currentMethodBuffer, address, tempString); - increaseStackby(stackdiff); -} - -void codegenAppendLabel(int label) { - char tempString[MAX_LENGTH_OF_COMMAND]; - sprintf(tempString, "Label%d:", label); - if (global) stringBufferAppend(classInitBuffer, tempString); - else stringBufferAppend(currentMethodBuffer, tempString); -} - -void codegenAddVariable(char* name, int type) { - /*fprintf(stderr, "add variable %s(%d) global=%d ", name, convertType(type), global);*/ - if (global) { - if (type == TYPE_INT) sprintf(tempString, ".field static %s %c", name, 'I'); - else if (type == TYPE_FLOAT) sprintf(tempString, ".field static %s %c", name, 'F'); - else if (type == TYPE_BOOLEAN) sprintf(tempString, ".field static %s %c", name, 'Z'); - else yyerror("compiler-intern error in codegenAddGlobalVariable().\n"); - stringBufferAppend(staticVariableBuffer, tempString); - } - else { - currentMethodNumberOfLocals++; - } -} - -int codegenGetNextLabel() { - return labelCounter++; -} - -int codegenGetCurrentAddress() { - if (global) return classInitBuffer->numberOfNextElement; - else return currentMethodBuffer->numberOfNextElement; -} - -void codegenEnterFunction(symtabEntry* entry) { - currentMethodBuffer = newStringBuffer(); - currentMethodStackSize = 0; - currentMethodStackSizeMax = 0; - labelCounter = 1; - global = 0; - - if (strcmp(entry->name, "main") == 0) { - if (entry->idtype != TYPE_VOID) yyerror("main has to be void.\n"); - currentMethodNumberOfLocals = 1; - symtabInsert(strdup("#main-param#"), TYPE_VOID, CLASS_FUNC); - stringBufferAppend(currentMethodBuffer, "; ------- Methode ---- void main() --------------------------"); - stringBufferAppend(currentMethodBuffer, ".method public static main([Ljava/lang/String;)V"); - } - else { - int i; - currentMethodNumberOfLocals = entry->paramIndex; - stringBufferAppend(currentMethodBuffer, "; ------- Methode -------------------------------------------"); - sprintf(tempString, ".method public static %s(", entry->name); - for (i=entry->paramIndex-1; i>=0; i--) { - int type = entry->params[i]->idtype; - tempString[strlen(tempString)+1] = 0; - tempString[strlen(tempString)] = convertType(type); - } - tempString[strlen(tempString)+2] = 0; - tempString[strlen(tempString)+1] = convertType(entry->idtype); - tempString[strlen(tempString)] = ')'; - stringBufferAppend(currentMethodBuffer, tempString); - } - currentMethodBufferIndex = currentMethodBuffer->numberOfNextElement; -} - -void codegenLeaveFunction() { - global = 1; - sprintf(tempString, "\t.limit locals %d", currentMethodNumberOfLocals); - stringBufferInsert(currentMethodBuffer, currentMethodBufferIndex, tempString); - sprintf(tempString, "\t.limit stack %d", currentMethodStackSizeMax); - stringBufferInsert(currentMethodBuffer, currentMethodBufferIndex, tempString); - stringBufferAppend(currentMethodBuffer, "\treturn"); - stringBufferAppend(currentMethodBuffer, ".end method"); - stringBufferAppend(currentMethodBuffer, "; -----------------------------------------------------------"); - stringBufferAppend(currentMethodBuffer, ""); - - stringBufferConcatenate(finishedMethodsBuffer, currentMethodBuffer); -} - - - -void codegenFinishCode() { - stringBufferAppend(staticVariableBuffer, "; -----------------------------------------------------------"); - stringBufferAppend(staticVariableBuffer, ""); - - sprintf(tempString, "\t.limit stack %d", classInitStackSizeMax); - stringBufferInsert(classInitBuffer, classInitBufferIndex, tempString); - stringBufferAppend(classInitBuffer, "\treturn"); - stringBufferAppend(classInitBuffer, ".end method"); - stringBufferAppend(classInitBuffer, "; -----------------------------------------------------------"); - - stringBufferConcatenate(mainBuffer, staticVariableBuffer); - stringBufferConcatenate(mainBuffer, finishedMethodsBuffer); - stringBufferConcatenate(mainBuffer, classInitBuffer); - - stringBufferPrint(mainBuffer); -} - -static void increaseStackby(int stackdiff) { - if (global) { - classInitStackSize += stackdiff; - if (classInitStackSize > classInitStackSizeMax) classInitStackSizeMax = classInitStackSize; - } - else { - currentMethodStackSize += stackdiff; - if (currentMethodStackSize > currentMethodStackSizeMax) currentMethodStackSizeMax = currentMethodStackSize; - } -} - -char convertType(int type) { - switch(type) { - case TYPE_VOID: return 'V'; - case TYPE_INT: return 'I'; - case TYPE_FLOAT: return 'F'; - case TYPE_BOOLEAN: return 'Z'; - default : yyerror("compiler-intern error in convertType().\n"); - } - return 0; /* to avoid compiler-warning */ -} - - -//#include -//#include - -int main() { - int a = 12, b = 44; - while (a != b) { - if (a > b) - a -= b; - else - b -= a; - } - printf("%d\n%d", a, 0X0);\ -} - - -/********************************************************************** - - array.c - - - $Author: murphy $ - $Date: 2005-11-05 04:33:55 +0100 (Sa, 05 Nov 2005) $ - created at: Fri Aug 6 09:46:12 JST 1993 - - Copyright (C) 1993-2003 Yukihiro Matsumoto - Copyright (C) 2000 Network Applied Communication Laboratory, Inc. - Copyright (C) 2000 Information-technology Promotion Agency, Japan - -**********************************************************************/ - -#include "ruby.h" -#include "util.h" -#include "st.h" -#include "node.h" - -VALUE rb_cArray, rb_cValues; - -static ID id_cmp; - -#define ARY_DEFAULT_SIZE 16 - - -void -rb_mem_clear(mem, size) - register VALUE *mem; - register long size; -{ - while (size--) { - *mem++ = Qnil; - } -} - -static inline void -memfill(mem, size, val) - register VALUE *mem; - register long size; - register VALUE val; -{ - while (size--) { - *mem++ = val; - } -} - -#define ARY_TMPLOCK FL_USER1 - -static inline void -rb_ary_modify_check(ary) - VALUE ary; -{ - if (OBJ_FROZEN(ary)) rb_error_frozen("array"); - if (FL_TEST(ary, ARY_TMPLOCK)) - rb_raise(rb_eRuntimeError, "can't modify array during iteration"); - if (!OBJ_TAINTED(ary) && rb_safe_level() >= 4) - rb_raise(rb_eSecurityError, "Insecure: can't modify array"); -} - -static void -rb_ary_modify(ary) - VALUE ary; -{ - VALUE *ptr; - - rb_ary_modify_check(ary); - if (FL_TEST(ary, ELTS_SHARED)) { - ptr = ALLOC_N(VALUE, RARRAY(ary)->len); - FL_UNSET(ary, ELTS_SHARED); - RARRAY(ary)->aux.capa = RARRAY(ary)->len; - MEMCPY(ptr, RARRAY(ary)->ptr, VALUE, RARRAY(ary)->len); - RARRAY(ary)->ptr = ptr; - } -} - -VALUE -rb_ary_freeze(ary) - VALUE ary; -{ - return rb_obj_freeze(ary); -} - -/* - * call-seq: - * array.frozen? -> true or false - * - * Return true if this array is frozen (or temporarily frozen - * while being sorted). - */ - -static VALUE -rb_ary_frozen_p(ary) - VALUE ary; -{ - if (OBJ_FROZEN(ary)) return Qtrue; - if (FL_TEST(ary, ARY_TMPLOCK)) return Qtrue; - return Qfalse; -} - -static VALUE ary_alloc(VALUE); -static VALUE -ary_alloc(klass) - VALUE klass; -{ - NEWOBJ(ary, struct RArray); - OBJSETUP(ary, klass, T_ARRAY); - - ary->len = 0; - ary->ptr = 0; - ary->aux.capa = 0; - - return (VALUE)ary; -} - -static VALUE -ary_new(klass, len) - VALUE klass; - long len; -{ - VALUE ary; - - if (len < 0) { - rb_raise(rb_eArgError, "negative array size (or size too big)"); - } - if (len > 0 && len * sizeof(VALUE) <= len) { - rb_raise(rb_eArgError, "array size too big"); - } - if (len == 0) len++; - - ary = ary_alloc(klass); - RARRAY(ary)->ptr = ALLOC_N(VALUE, len); - RARRAY(ary)->aux.capa = len; - - return ary; -} - -VALUE -rb_ary_new2(len) - long len; -{ - return ary_new(rb_cArray, len); -} - - -VALUE -rb_ary_new() -{ - return rb_ary_new2(ARY_DEFAULT_SIZE); -} - -#ifdef HAVE_STDARG_PROTOTYPES -#include -#define va_init_list(a,b) va_start(a,b) -#else -#include -#define va_init_list(a,b) va_start(a) -#endif - -VALUE -#ifdef HAVE_STDARG_PROTOTYPES -rb_ary_new3(long n, ...) -#else -rb_ary_new3(n, va_alist) - long n; - va_dcl -#endif -{ - va_list ar; - VALUE ary; - long i; - - ary = rb_ary_new2(n); - - va_init_list(ar, n); - for (i=0; iptr[i] = va_arg(ar, VALUE); - } - va_end(ar); - - RARRAY(ary)->len = n; - return ary; -} - -VALUE -rb_ary_new4(n, elts) - long n; - const VALUE *elts; -{ - VALUE ary; - - ary = rb_ary_new2(n); - if (n > 0 && elts) { - MEMCPY(RARRAY(ary)->ptr, elts, VALUE, n); - } - RARRAY(ary)->len = n; - - return ary; -} - -VALUE -#ifdef HAVE_STDARG_PROTOTYPES -rb_values_new(long n, ...) -#else -rb_values_new(n, va_alist) - long n; - va_dcl -#endif -{ - va_list ar; - VALUE val; - long i; - - val = ary_new(rb_cValues, n); - va_init_list(ar, n); - for (i=0; iptr[i] = va_arg(ar, VALUE); - } - va_end(ar); - RARRAY(val)->len = n; - - return val; -} - -VALUE -rb_values_new2(n, elts) - long n; - const VALUE *elts; -{ - VALUE val; - - val = ary_new(rb_cValues, n); - if (n > 0 && elts) { - RARRAY(val)->len = n; - MEMCPY(RARRAY(val)->ptr, elts, VALUE, n); - } - - return val; -} - -static VALUE -ary_make_shared(ary) - VALUE ary; -{ - if (!FL_TEST(ary, ELTS_SHARED)) { - NEWOBJ(shared, struct RArray); - OBJSETUP(shared, rb_cArray, T_ARRAY); - - shared->len = RARRAY(ary)->len; - shared->ptr = RARRAY(ary)->ptr; - shared->aux.capa = RARRAY(ary)->aux.capa; - RARRAY(ary)->aux.shared = (VALUE)shared; - FL_SET(ary, ELTS_SHARED); - OBJ_FREEZE(shared); - return (VALUE)shared; - } - else { - return RARRAY(ary)->aux.shared; - } -} - -static VALUE -ary_shared_array(klass, ary) - VALUE klass, ary; -{ - VALUE val = ary_alloc(klass); - - ary_make_shared(ary); - RARRAY(val)->ptr = RARRAY(ary)->ptr; - RARRAY(val)->len = RARRAY(ary)->len; - RARRAY(val)->aux.shared = RARRAY(ary)->aux.shared; - FL_SET(val, ELTS_SHARED); - return val; -} - -VALUE -rb_values_from_ary(ary) - VALUE ary; -{ - return ary_shared_array(rb_cValues, ary); -} - -VALUE -rb_ary_from_values(val) - VALUE val; -{ - return ary_shared_array(rb_cArray, val); -} - -VALUE -rb_assoc_new(car, cdr) - VALUE car, cdr; -{ - return rb_values_new(2, car, cdr); -} - -static VALUE -to_ary(ary) - VALUE ary; -{ - return rb_convert_type(ary, T_ARRAY, "Array", "to_ary"); -} - -static VALUE -to_a(ary) - VALUE ary; -{ - return rb_convert_type(ary, T_ARRAY, "Array", "to_a"); -} - -VALUE -rb_check_array_type(ary) - VALUE ary; -{ - return rb_check_convert_type(ary, T_ARRAY, "Array", "to_ary"); -} - -static VALUE rb_ary_replace _((VALUE, VALUE)); - -/* - * call-seq: - * Array.new(size=0, obj=nil) - * Array.new(array) - * Array.new(size) {|index| block } - * - * Returns a new array. In the first form, the new array is - * empty. In the second it is created with _size_ copies of _obj_ - * (that is, _size_ references to the same - * _obj_). The third form creates a copy of the array - * passed as a parameter (the array is generated by calling - * to_ary on the parameter). In the last form, an array - * of the given size is created. Each element in this array is - * calculated by passing the element's index to the given block and - * storing the return value. - * - * Array.new - * Array.new(2) - * Array.new(5, "A") - * - * # only one copy of the object is created - * a = Array.new(2, Hash.new) - * a[0]['cat'] = 'feline' - * a - * a[1]['cat'] = 'Felix' - * a - * - * # here multiple copies are created - * a = Array.new(2) { Hash.new } - * a[0]['cat'] = 'feline' - * a - * - * squares = Array.new(5) {|i| i*i} - * squares - * - * copy = Array.new(squares) - */ - -static VALUE -rb_ary_initialize(argc, argv, ary) - int argc; - VALUE *argv; - VALUE ary; -{ - long len; - VALUE size, val; - - if (rb_scan_args(argc, argv, "02", &size, &val) == 0) { - RARRAY(ary)->len = 0; - if (rb_block_given_p()) { - rb_warning("given block not used"); - } - return ary; - } - - if (argc == 1 && !FIXNUM_P(size)) { - val = rb_check_array_type(size); - if (!NIL_P(val)) { - rb_ary_replace(ary, val); - return ary; - } - } - - len = NUM2LONG(size); - if (len < 0) { - rb_raise(rb_eArgError, "negative array size"); - } - if (len > 0 && len * (long)sizeof(VALUE) <= len) { - rb_raise(rb_eArgError, "array size too big"); - } - rb_ary_modify(ary); - if (len > RARRAY(ary)->aux.capa) { - REALLOC_N(RARRAY(ary)->ptr, VALUE, len); - RARRAY(ary)->aux.capa = len; - } - if (rb_block_given_p()) { - long i; - - if (argc == 2) { - rb_warn("block supersedes default value argument"); - } - for (i=0; ilen = i + 1; - } - } - else { - memfill(RARRAY(ary)->ptr, len, val); - RARRAY(ary)->len = len; - } - - return ary; -} - - -/* -* Returns a new array populated with the given objects. -* -* Array.[]( 1, 'a', /^A/ ) -* Array[ 1, 'a', /^A/ ] -* [ 1, 'a', /^A/ ] -*/ - -static VALUE -rb_ary_s_create(argc, argv, klass) - int argc; - VALUE *argv; - VALUE klass; -{ - VALUE ary = ary_alloc(klass); - - if (argc > 0) { - RARRAY(ary)->ptr = ALLOC_N(VALUE, argc); - MEMCPY(RARRAY(ary)->ptr, argv, VALUE, argc); - } - RARRAY(ary)->len = RARRAY(ary)->aux.capa = argc; - - return ary; -} - -void -rb_ary_store(ary, idx, val) - VALUE ary; - long idx; - VALUE val; -{ - if (idx < 0) { - idx += RARRAY(ary)->len; - if (idx < 0) { - rb_raise(rb_eIndexError, "index %ld out of array", - idx - RARRAY(ary)->len); - } - } - - rb_ary_modify(ary); - if (idx >= RARRAY(ary)->aux.capa) { - long new_capa = RARRAY(ary)->aux.capa / 2; - - if (new_capa < ARY_DEFAULT_SIZE) { - new_capa = ARY_DEFAULT_SIZE; - } - new_capa += idx; - if (new_capa * (long)sizeof(VALUE) <= new_capa) { - rb_raise(rb_eArgError, "index too big"); - } - REALLOC_N(RARRAY(ary)->ptr, VALUE, new_capa); - RARRAY(ary)->aux.capa = new_capa; - } - if (idx > RARRAY(ary)->len) { - rb_mem_clear(RARRAY(ary)->ptr + RARRAY(ary)->len, - idx-RARRAY(ary)->len + 1); - } - - if (idx >= RARRAY(ary)->len) { - RARRAY(ary)->len = idx + 1; - } - RARRAY(ary)->ptr[idx] = val; -} - -static VALUE -ary_shared_first(argc, argv, ary) - int argc; - VALUE *argv; - VALUE ary; -{ - VALUE nv, result; - long n; - - rb_scan_args(argc, argv, "1", &nv); - n = NUM2LONG(nv); - if (n > RARRAY(ary)->len) { - n = RARRAY(ary)->len; - } - else if (n < 0) { - rb_raise(rb_eArgError, "negative array size"); - } - result = ary_shared_array(rb_cArray, ary); - RARRAY(result)->len = n; - return result; -} - -static VALUE -ary_shared_last(argc, argv, ary) - int argc; - VALUE *argv; - VALUE ary; -{ - VALUE result = ary_shared_first(argc, argv, ary); - - RARRAY(result)->ptr += RARRAY(ary)->len - RARRAY(result)->len; - return result; -} - -/* - * call-seq: - * array << obj -> array - * - * Append---Pushes the given object on to the end of this array. This - * expression returns the array itself, so several appends - * may be chained together. - * - * [ 1, 2 ] << "c" << "d" << [ 3, 4 ] - * #=> [ 1, 2, "c", "d", [ 3, 4 ] ] - * - */ - -VALUE -rb_ary_push(ary, item) - VALUE ary; - VALUE item; -{ - rb_ary_store(ary, RARRAY(ary)->len, item); - return ary; -} - -/* - * call-seq: - * array.push(obj, ... ) -> array - * - * Append---Pushes the given object(s) on to the end of this array. This - * expression returns the array itself, so several appends - * may be chained together. - * - * a = [ "a", "b", "c" ] - * a.push("d", "e", "f") - * #=> ["a", "b", "c", "d", "e", "f"] - */ - -static VALUE -rb_ary_push_m(argc, argv, ary) - int argc; - VALUE *argv; - VALUE ary; -{ - while (argc--) { - rb_ary_push(ary, *argv++); - } - return ary; -} - -VALUE -rb_ary_pop(ary) - VALUE ary; -{ - rb_ary_modify_check(ary); - if (RARRAY(ary)->len == 0) return Qnil; - if (!FL_TEST(ary, ELTS_SHARED) && - RARRAY(ary)->len * 2 < RARRAY(ary)->aux.capa && - RARRAY(ary)->aux.capa > ARY_DEFAULT_SIZE) { - RARRAY(ary)->aux.capa = RARRAY(ary)->len * 2; - REALLOC_N(RARRAY(ary)->ptr, VALUE, RARRAY(ary)->aux.capa); - } - return RARRAY(ary)->ptr[--RARRAY(ary)->len]; -} - -/* - * call-seq: - * array.pop -> obj or nil - * - * Removes the last element from self and returns it, or - * nil if the array is empty. - * - * a = [ "a", "b", "c", "d" ] - * a.pop #=> "d" - * a.pop(2) #=> ["b", "c"] - * a #=> ["a"] - */ - -static VALUE -rb_ary_pop_m(argc, argv, ary) - int argc; - VALUE *argv; - VALUE ary; -{ - VALUE result; - - if (argc == 0) { - return rb_ary_pop(ary); - } - - rb_ary_modify_check(ary); - - result = ary_shared_last(argc, argv, ary); - RARRAY(ary)->len -= RARRAY(result)->len; - return result; -} - -VALUE -rb_ary_shift(ary) - VALUE ary; -{ - VALUE top; - - rb_ary_modify_check(ary); - if (RARRAY(ary)->len == 0) return Qnil; - top = RARRAY(ary)->ptr[0]; - ary_make_shared(ary); - RARRAY(ary)->ptr++; /* shift ptr */ - RARRAY(ary)->len--; - - return top; -} - -/* - * call-seq: - * array.shift -> obj or nil - * - * Returns the first element of self and removes it (shifting all - * other elements down by one). Returns nil if the array - * is empty. - * - * args = [ "-m", "-q", "filename" ] - * args.shift #=> "-m" - * args #=> ["-q", "filename"] - * - * args = [ "-m", "-q", "filename" ] - * args.shift(2) #=> ["-m", "-q"] - * args #=> ["filename"] - */ - -static VALUE -rb_ary_shift_m(argc, argv, ary) - int argc; - VALUE *argv; - VALUE ary; -{ - VALUE result; - long n; - - if (argc == 0) { - return rb_ary_shift(ary); - } - - rb_ary_modify_check(ary); - - result = ary_shared_first(argc, argv, ary); - n = RARRAY(result)->len; - RARRAY(ary)->ptr += n; - RARRAY(ary)->len -= n; - - return result; -} - -VALUE -rb_ary_unshift(ary, item) - VALUE ary, item; -{ - rb_ary_modify(ary); - if (RARRAY(ary)->len == RARRAY(ary)->aux.capa) { - long capa_inc = RARRAY(ary)->aux.capa / 2; - if (capa_inc < ARY_DEFAULT_SIZE) { - capa_inc = ARY_DEFAULT_SIZE; - } - RARRAY(ary)->aux.capa += capa_inc; - REALLOC_N(RARRAY(ary)->ptr, VALUE, RARRAY(ary)->aux.capa); - } - - /* sliding items */ - MEMMOVE(RARRAY(ary)->ptr + 1, RARRAY(ary)->ptr, VALUE, RARRAY(ary)->len); - - RARRAY(ary)->len++; - RARRAY(ary)->ptr[0] = item; - - return ary; -} - -/* - * call-seq: - * array.unshift(obj, ...) -> array - * - * Prepends objects to the front of array. - * other elements up one. - * - * a = [ "b", "c", "d" ] - * a.unshift("a") #=> ["a", "b", "c", "d"] - * a.unshift(1, 2) #=> [ 1, 2, "a", "b", "c", "d"] - */ - -static VALUE -rb_ary_unshift_m(argc, argv, ary) - int argc; - VALUE *argv; - VALUE ary; -{ - long len = RARRAY(ary)->len; - - if (argc == 0) return ary; - - /* make rooms by setting the last item */ - rb_ary_store(ary, len + argc - 1, Qnil); - - /* sliding items */ - MEMMOVE(RARRAY(ary)->ptr + argc, RARRAY(ary)->ptr, VALUE, len); - MEMCPY(RARRAY(ary)->ptr, argv, VALUE, argc); - - return ary; -} - -/* faster version - use this if you don't need to treat negative offset */ -static inline VALUE -rb_ary_elt(ary, offset) - VALUE ary; - long offset; -{ - if (RARRAY(ary)->len == 0) return Qnil; - if (offset < 0 || RARRAY(ary)->len <= offset) { - return Qnil; - } - return RARRAY(ary)->ptr[offset]; -} - -VALUE -rb_ary_entry(ary, offset) - VALUE ary; - long offset; -{ - if (offset < 0) { - offset += RARRAY(ary)->len; - } - return rb_ary_elt(ary, offset); -} - -static VALUE -rb_ary_subseq(ary, beg, len) - VALUE ary; - long beg, len; -{ - VALUE klass, ary2, shared; - VALUE *ptr; - - if (beg > RARRAY(ary)->len) return Qnil; - if (beg < 0 || len < 0) return Qnil; - - if (beg + len > RARRAY(ary)->len) { - len = RARRAY(ary)->len - beg; - if (len < 0) - len = 0; - } - klass = rb_obj_class(ary); - if (len == 0) return ary_new(klass, 0); - - shared = ary_make_shared(ary); - ptr = RARRAY(ary)->ptr; - ary2 = ary_alloc(klass); - RARRAY(ary2)->ptr = ptr + beg; - RARRAY(ary2)->len = len; - RARRAY(ary2)->aux.shared = shared; - FL_SET(ary2, ELTS_SHARED); - - return ary2; -} - -/* - * call-seq: - * array[index] -> obj or nil - * array[start, length] -> an_array or nil - * array[range] -> an_array or nil - * array.slice(index) -> obj or nil - * array.slice(start, length) -> an_array or nil - * array.slice(range) -> an_array or nil - * - * Element Reference---Returns the element at _index_, - * or returns a subarray starting at _start_ and - * continuing for _length_ elements, or returns a subarray - * specified by _range_. - * Negative indices count backward from the end of the - * array (-1 is the last element). Returns nil if the index - * (or starting index) are out of range. - * - * a = [ "a", "b", "c", "d", "e" ] - * a[2] + a[0] + a[1] #=> "cab" - * a[6] #=> nil - * a[1, 2] #=> [ "b", "c" ] - * a[1..3] #=> [ "b", "c", "d" ] - * a[4..7] #=> [ "e" ] - * a[6..10] #=> nil - * a[-3, 3] #=> [ "c", "d", "e" ] - * # special cases - * a[5] #=> nil - * a[5, 1] #=> [] - * a[5..10] #=> [] - * - */ - -VALUE -rb_ary_aref(argc, argv, ary) - int argc; - VALUE *argv; - VALUE ary; -{ - VALUE arg; - long beg, len; - - if (argc == 2) { - beg = NUM2LONG(argv[0]); - len = NUM2LONG(argv[1]); - if (beg < 0) { - beg += RARRAY(ary)->len; - } - return rb_ary_subseq(ary, beg, len); - } - if (argc != 1) { - rb_scan_args(argc, argv, "11", 0, 0); - } - arg = argv[0]; - /* special case - speeding up */ - if (FIXNUM_P(arg)) { - return rb_ary_entry(ary, FIX2LONG(arg)); - } - /* check if idx is Range */ - switch (rb_range_beg_len(arg, &beg, &len, RARRAY(ary)->len, 0)) { - case Qfalse: - break; - case Qnil: - return Qnil; - default: - return rb_ary_subseq(ary, beg, len); - } - return rb_ary_entry(ary, NUM2LONG(arg)); -} - -/* - * call-seq: - * array.at(index) -> obj or nil - * - * Returns the element at _index_. A - * negative index counts from the end of _self_. Returns +nil+ - * if the index is out of range. See also Array#[]. - * (Array#at is slightly faster than Array#[], - * as it does not accept ranges and so on.) - * - * a = [ "a", "b", "c", "d", "e" ] - * a.at(0) #=> "a" - * a.at(-1) #=> "e" - */ - -static VALUE -rb_ary_at(ary, pos) - VALUE ary, pos; -{ - return rb_ary_entry(ary, NUM2LONG(pos)); -} - -/* - * call-seq: - * array.first -> obj or nil - * array.first(n) -> an_array - * - * Returns the first element of the array. If the array is empty, - * returns nil. - * - * a = [ "q", "r", "s", "t" ] - * a.first #=> "q" - * a.first(2) #=> ["q", "r"] - */ - -static VALUE -rb_ary_first(argc, argv, ary) - int argc; - VALUE *argv; - VALUE ary; -{ - if (argc == 0) { - if (RARRAY(ary)->len == 0) return Qnil; - return RARRAY(ary)->ptr[0]; - } - else { - return ary_shared_first(argc, argv, ary); - } -} - -/* - * call-seq: - * array.last -> obj or nil - * array.last(n) -> an_array - * - * Returns the last element(s) of self. If the array is empty, - * the first form returns nil. - * - * a = [ "w", "x", "y", "z" ] - * a.last #=> "z" - * a.last(2) #=> ["y", "z"] - */ - -static VALUE -rb_ary_last(argc, argv, ary) - int argc; - VALUE *argv; - VALUE ary; -{ - if (argc == 0) { - if (RARRAY(ary)->len == 0) return Qnil; - return RARRAY(ary)->ptr[RARRAY(ary)->len-1]; - } - else { - return ary_shared_last(argc, argv, ary); - } -} - -/* - * call-seq: - * array.fetch(index) -> obj - * array.fetch(index, default ) -> obj - * array.fetch(index) {|index| block } -> obj - * - * Tries to return the element at position index. If the index - * lies outside the array, the first form throws an - * IndexError exception, the second form returns - * default, and the third form returns the value of invoking - * the block, passing in the index. Negative values of index - * count from the end of the array. - * - * a = [ 11, 22, 33, 44 ] - * a.fetch(1) #=> 22 - * a.fetch(-1) #=> 44 - * a.fetch(4, 'cat') #=> "cat" - * a.fetch(4) { |i| i*i } #=> 16 - */ - -static VALUE -rb_ary_fetch(argc, argv, ary) - int argc; - VALUE *argv; - VALUE ary; -{ - VALUE pos, ifnone; - long block_given; - long idx; - - rb_scan_args(argc, argv, "11", &pos, &ifnone); - block_given = rb_block_given_p(); - if (block_given && argc == 2) { - rb_warn("block supersedes default value argument"); - } - idx = NUM2LONG(pos); - - if (idx < 0) { - idx += RARRAY(ary)->len; - } - if (idx < 0 || RARRAY(ary)->len <= idx) { - if (block_given) return rb_yield(pos); - if (argc == 1) { - rb_raise(rb_eIndexError, "index %ld out of array", idx); - } - return ifnone; - } - return RARRAY(ary)->ptr[idx]; -} - -/* - * call-seq: - * array.index(obj) -> int or nil - * array.index {|item| block} -> int or nil - * - * Returns the index of the first object in self such that is - * == to obj. If a block is given instead of an - * argument, returns first object for which block is true. - * Returns nil if no match is found. - * - * a = [ "a", "b", "c" ] - * a.index("b") #=> 1 - * a.index("z") #=> nil - * a.index{|x|x=="b"} #=> 1 - */ - -static VALUE -rb_ary_index(argc, argv, ary) - int argc; - VALUE *argv; - VALUE ary; -{ - VALUE val; - long i; - - if (rb_scan_args(argc, argv, "01", &val) == 0) { - for (i=0; ilen; i++) { - if (RTEST(rb_yield(RARRAY(ary)->ptr[i]))) { - return LONG2NUM(i); - } - } - } - else { - for (i=0; ilen; i++) { - if (rb_equal(RARRAY(ary)->ptr[i], val)) - return LONG2NUM(i); - } - } - return Qnil; -} - -/* - * call-seq: - * array.rindex(obj) -> int or nil - * - * Returns the index of the last object in array - * == to obj. If a block is given instead of an - * argument, returns first object for which block is - * true. Returns nil if no match is found. - * - * a = [ "a", "b", "b", "b", "c" ] - * a.rindex("b") #=> 3 - * a.rindex("z") #=> nil - * a.rindex{|x|x=="b"} #=> 3 - */ - -static VALUE -rb_ary_rindex(argc, argv, ary) - int argc; - VALUE *argv; - VALUE ary; -{ - VALUE val; - long i = RARRAY(ary)->len; - - if (rb_scan_args(argc, argv, "01", &val) == 0) { - while (i--) { - if (RTEST(rb_yield(RARRAY(ary)->ptr[i]))) - return LONG2NUM(i); - if (i > RARRAY(ary)->len) { - i = RARRAY(ary)->len; - } - } - } - else { - while (i--) { - if (rb_equal(RARRAY(ary)->ptr[i], val)) - return LONG2NUM(i); - if (i > RARRAY(ary)->len) { - i = RARRAY(ary)->len; - } - } - } - return Qnil; -} - -VALUE -rb_ary_to_ary(obj) - VALUE obj; -{ - if (TYPE(obj) == T_ARRAY) { - return obj; - } - if (rb_respond_to(obj, rb_intern("to_ary"))) { - return to_ary(obj); - } - return rb_ary_new3(1, obj); -} - -static void -rb_ary_splice(ary, beg, len, rpl) - VALUE ary; - long beg, len; - VALUE rpl; -{ - long rlen; - - if (len < 0) rb_raise(rb_eIndexError, "negative length (%ld)", len); - if (beg < 0) { - beg += RARRAY(ary)->len; - if (beg < 0) { - beg -= RARRAY(ary)->len; - rb_raise(rb_eIndexError, "index %ld out of array", beg); - } - } - if (beg + len > RARRAY(ary)->len) { - len = RARRAY(ary)->len - beg; - } - - if (rpl == Qundef) { - rlen = 0; - } - else { - rpl = rb_ary_to_ary(rpl); - rlen = RARRAY(rpl)->len; - } - rb_ary_modify(ary); - - if (beg >= RARRAY(ary)->len) { - len = beg + rlen; - if (len >= RARRAY(ary)->aux.capa) { - REALLOC_N(RARRAY(ary)->ptr, VALUE, len); - RARRAY(ary)->aux.capa = len; - } - rb_mem_clear(RARRAY(ary)->ptr + RARRAY(ary)->len, beg - RARRAY(ary)->len); - if (rlen > 0) { - MEMCPY(RARRAY(ary)->ptr + beg, RARRAY(rpl)->ptr, VALUE, rlen); - } - RARRAY(ary)->len = len; - } - else { - long alen; - - if (beg + len > RARRAY(ary)->len) { - len = RARRAY(ary)->len - beg; - } - - alen = RARRAY(ary)->len + rlen - len; - if (alen >= RARRAY(ary)->aux.capa) { - REALLOC_N(RARRAY(ary)->ptr, VALUE, alen); - RARRAY(ary)->aux.capa = alen; - } - - if (len != rlen) { - MEMMOVE(RARRAY(ary)->ptr + beg + rlen, RARRAY(ary)->ptr + beg + len, - VALUE, RARRAY(ary)->len - (beg + len)); - RARRAY(ary)->len = alen; - } - if (rlen > 0) { - MEMMOVE(RARRAY(ary)->ptr + beg, RARRAY(rpl)->ptr, VALUE, rlen); - } - } -} - -/* - * call-seq: - * array[index] = obj -> obj - * array[start, length] = obj or an_array or nil -> obj or an_array or nil - * array[range] = obj or an_array or nil -> obj or an_array or nil - * - * Element Assignment---Sets the element at _index_, - * or replaces a subarray starting at _start_ and - * continuing for _length_ elements, or replaces a subarray - * specified by _range_. If indices are greater than - * the current capacity of the array, the array grows - * automatically. A negative indices will count backward - * from the end of the array. Inserts elements if _length_ is - * zero. An +IndexError+ is raised if a negative index points - * past the beginning of the array. See also - * Array#push, and Array#unshift. - * - * a = Array.new - * a[4] = "4"; #=> [nil, nil, nil, nil, "4"] - * a[0, 3] = [ 'a', 'b', 'c' ] #=> ["a", "b", "c", nil, "4"] - * a[1..2] = [ 1, 2 ] #=> ["a", 1, 2, nil, "4"] - * a[0, 2] = "?" #=> ["?", 2, nil, "4"] - * a[0..2] = "A" #=> ["A", "4"] - * a[-1] = "Z" #=> ["A", "Z"] - * a[1..-1] = nil #=> ["A", nil] - * a[1..-1] = [] #=> ["A"] - */ - -static VALUE -rb_ary_aset(argc, argv, ary) - int argc; - VALUE *argv; - VALUE ary; -{ - long offset, beg, len; - - if (argc == 3) { - rb_ary_splice(ary, NUM2LONG(argv[0]), NUM2LONG(argv[1]), argv[2]); - return argv[2]; - } - if (argc != 2) { - rb_raise(rb_eArgError, "wrong number of arguments (%d for 2)", argc); - } - if (FIXNUM_P(argv[0])) { - offset = FIX2LONG(argv[0]); - goto fixnum; - } - if (rb_range_beg_len(argv[0], &beg, &len, RARRAY(ary)->len, 1)) { - /* check if idx is Range */ - rb_ary_splice(ary, beg, len, argv[1]); - return argv[1]; - } - - offset = NUM2LONG(argv[0]); -fixnum: - rb_ary_store(ary, offset, argv[1]); - return argv[1]; -} - -/* - * call-seq: - * array.insert(index, obj...) -> array - * - * Inserts the given values before the element with the given index - * (which may be negative). - * - * a = %w{ a b c d } - * a.insert(2, 99) #=> ["a", "b", 99, "c", "d"] - * a.insert(-2, 1, 2, 3) #=> ["a", "b", 99, "c", 1, 2, 3, "d"] - */ - -static VALUE -rb_ary_insert(argc, argv, ary) - int argc; - VALUE *argv; - VALUE ary; -{ - long pos; - - if (argc < 1) { - rb_raise(rb_eArgError, "wrong number of arguments (at least 1)"); - } - pos = NUM2LONG(argv[0]); - if (pos == -1) { - pos = RARRAY(ary)->len; - } - else if (pos < 0) { - pos++; - } - - if (argc == 1) return ary; - rb_ary_splice(ary, pos, 0, rb_ary_new4(argc - 1, argv + 1)); - return ary; -} - -/* - * call-seq: - * array.each {|item| block } -> array - * - * Calls block once for each element in self, passing that - * element as a parameter. - * - * a = [ "a", "b", "c" ] - * a.each {|x| print x, " -- " } - * - * produces: - * - * a -- b -- c -- - */ - -VALUE -rb_ary_each(ary) - VALUE ary; -{ - long i; - - for (i=0; ilen; i++) { - rb_yield(RARRAY(ary)->ptr[i]); - } - return ary; -} - -/* - * call-seq: - * array.each_index {|index| block } -> array - * - * Same as Array#each, but passes the index of the element - * instead of the element itself. - * - * a = [ "a", "b", "c" ] - * a.each_index {|x| print x, " -- " } - * - * produces: - * - * 0 -- 1 -- 2 -- - */ - -static VALUE -rb_ary_each_index(ary) - VALUE ary; -{ - long i; - - for (i=0; ilen; i++) { - rb_yield(LONG2NUM(i)); - } - return ary; -} - -/* - * call-seq: - * array.reverse_each {|item| block } - * - * Same as Array#each, but traverses self in reverse - * order. - * - * a = [ "a", "b", "c" ] - * a.reverse_each {|x| print x, " " } - * - * produces: - * - * c b a - */ - -static VALUE -rb_ary_reverse_each(ary) - VALUE ary; -{ - long len = RARRAY(ary)->len; - - while (len--) { - rb_yield(RARRAY(ary)->ptr[len]); - if (RARRAY(ary)->len < len) { - len = RARRAY(ary)->len; - } - } - return ary; -} - -/* - * call-seq: - * array.length -> int - * - * Returns the number of elements in self. May be zero. - * - * [ 1, 2, 3, 4, 5 ].length #=> 5 - */ - -static VALUE -rb_ary_length(ary) - VALUE ary; -{ - return LONG2NUM(RARRAY(ary)->len); -} - -/* - * call-seq: - * array.empty? -> true or false - * - * Returns true if self array contains no elements. - * - * [].empty? #=> true - */ - -static VALUE -rb_ary_empty_p(ary) - VALUE ary; -{ - if (RARRAY(ary)->len == 0) - return Qtrue; - return Qfalse; -} - -VALUE -rb_ary_dup(ary) - VALUE ary; -{ - VALUE dup = rb_ary_new2(RARRAY(ary)->len); - - DUPSETUP(dup, ary); - MEMCPY(RARRAY(dup)->ptr, RARRAY(ary)->ptr, VALUE, RARRAY(ary)->len); - RARRAY(dup)->len = RARRAY(ary)->len; - return dup; -} - -extern VALUE rb_output_fs; - -static VALUE -recursive_join(ary, arg, recur) - VALUE ary; - VALUE *arg; - int recur; -{ - if (recur) { - return rb_str_new2("[...]"); - } - return rb_ary_join(arg[0], arg[1]); -} - -VALUE -rb_ary_join(ary, sep) - VALUE ary, sep; -{ - long len = 1, i; - int taint = Qfalse; - VALUE result, tmp; - - if (RARRAY(ary)->len == 0) return rb_str_new(0, 0); - if (OBJ_TAINTED(ary) || OBJ_TAINTED(sep)) taint = Qtrue; - - for (i=0; ilen; i++) { - tmp = rb_check_string_type(RARRAY(ary)->ptr[i]); - len += NIL_P(tmp) ? 10 : RSTRING(tmp)->len; - } - if (!NIL_P(sep)) { - StringValue(sep); - len += RSTRING(sep)->len * (RARRAY(ary)->len - 1); - } - result = rb_str_buf_new(len); - for (i=0; ilen; i++) { - tmp = RARRAY(ary)->ptr[i]; - switch (TYPE(tmp)) { - case T_STRING: - break; - case T_ARRAY: - { - VALUE args[2]; - - args[0] = tmp; - args[1] = sep; - tmp = rb_exec_recursive(recursive_join, ary, (VALUE)args); - } - break; - default: - tmp = rb_obj_as_string(tmp); - } - if (i > 0 && !NIL_P(sep)) - rb_str_buf_append(result, sep); - rb_str_buf_append(result, tmp); - if (OBJ_TAINTED(tmp)) taint = Qtrue; - } - - if (taint) OBJ_TAINT(result); - return result; -} - -/* - * call-seq: - * array.join(sep=$,) -> str - * - * Returns a string created by converting each element of the array to - * a string, separated by sep. - * - * [ "a", "b", "c" ].join #=> "abc" - * [ "a", "b", "c" ].join("-") #=> "a-b-c" - */ - -static VALUE -rb_ary_join_m(argc, argv, ary) - int argc; - VALUE *argv; - VALUE ary; -{ - VALUE sep; - - rb_scan_args(argc, argv, "01", &sep); - if (NIL_P(sep)) sep = rb_output_fs; - - return rb_ary_join(ary, sep); -} - -/* - * call-seq: - * array.to_s -> string - * - * Returns _self_.join. - * - * [ "a", "e", "i", "o" ].to_s #=> "aeio" - * - */ - -VALUE -rb_ary_to_s(ary) - VALUE ary; -{ - if (RARRAY(ary)->len == 0) return rb_str_new(0, 0); - - return rb_ary_join(ary, rb_output_fs); -} - -static VALUE -inspect_ary(ary, dummy, recur) - VALUE ary; - VALUE dummy; - int recur; -{ - int tainted = OBJ_TAINTED(ary); - long i; - VALUE s, str; - - if (recur) return rb_tainted_str_new2("[...]"); - str = rb_str_buf_new2("["); - for (i=0; ilen; i++) { - s = rb_inspect(RARRAY(ary)->ptr[i]); - if (OBJ_TAINTED(s)) tainted = Qtrue; - if (i > 0) rb_str_buf_cat2(str, ", "); - rb_str_buf_append(str, s); - } - rb_str_buf_cat2(str, "]"); - if (tainted) OBJ_TAINT(str); - return str; -} - -/* - * call-seq: - * array.inspect -> string - * - * Create a printable version of array. - */ - -static VALUE -rb_ary_inspect(ary) - VALUE ary; -{ - if (RARRAY(ary)->len == 0) return rb_str_new2("[]"); - return rb_exec_recursive(inspect_ary, ary, 0); -} - -/* - * call-seq: - * array.to_a -> array - * - * Returns _self_. If called on a subclass of Array, converts - * the receiver to an Array object. - */ - -static VALUE -rb_ary_to_a(ary) - VALUE ary; -{ - if (rb_obj_class(ary) != rb_cArray) { - VALUE dup = rb_ary_new2(RARRAY(ary)->len); - rb_ary_replace(dup, ary); - return dup; - } - return ary; -} - -/* - * call-seq: - * array.to_ary -> array - * - * Returns _self_. - */ - -static VALUE -rb_ary_to_ary_m(ary) - VALUE ary; -{ - return ary; -} - -VALUE -rb_ary_reverse(ary) - VALUE ary; -{ - VALUE *p1, *p2; - VALUE tmp; - - rb_ary_modify(ary); - if (RARRAY(ary)->len > 1) { - p1 = RARRAY(ary)->ptr; - p2 = p1 + RARRAY(ary)->len - 1; /* points last item */ - - while (p1 < p2) { - tmp = *p1; - *p1++ = *p2; - *p2-- = tmp; - } - } - return ary; -} - -/* - * call-seq: - * array.reverse! -> array - * - * Reverses _self_ in place. - * - * a = [ "a", "b", "c" ] - * a.reverse! #=> ["c", "b", "a"] - * a #=> ["c", "b", "a"] - */ - -static VALUE -rb_ary_reverse_bang(ary) - VALUE ary; -{ - return rb_ary_reverse(ary); -} - -/* - * call-seq: - * array.reverse -> an_array - * - * Returns a new array containing self's elements in reverse order. - * - * [ "a", "b", "c" ].reverse #=> ["c", "b", "a"] - * [ 1 ].reverse #=> [1] - */ - -static VALUE -rb_ary_reverse_m(ary) - VALUE ary; -{ - return rb_ary_reverse(rb_ary_dup(ary)); -} - -struct ary_sort_data { - VALUE ary; - VALUE *ptr; - long len; -}; - -static void -ary_sort_check(data) - struct ary_sort_data *data; -{ - if (RARRAY(data->ary)->ptr != data->ptr || RARRAY(data->ary)->len != data->len) { - rb_raise(rb_eRuntimeError, "array modified during sort"); - } -} - -static int -sort_1(a, b, data) - VALUE *a, *b; - struct ary_sort_data *data; -{ - VALUE retval = rb_yield_values(2, *a, *b); - int n; - - n = rb_cmpint(retval, *a, *b); - ary_sort_check(data); - return n; -} - -static int -sort_2(ap, bp, data) - VALUE *ap, *bp; - struct ary_sort_data *data; -{ - VALUE retval; - VALUE a = *ap, b = *bp; - int n; - - if (FIXNUM_P(a) && FIXNUM_P(b)) { - if ((long)a > (long)b) return 1; - if ((long)a < (long)b) return -1; - return 0; - } - if (TYPE(a) == T_STRING && TYPE(b) == T_STRING) { - return rb_str_cmp(a, b); - } - - retval = rb_funcall(a, id_cmp, 1, b); - n = rb_cmpint(retval, a, b); - ary_sort_check(data); - - return n; -} - -static VALUE -sort_internal(ary) - VALUE ary; -{ - struct ary_sort_data data; - - data.ary = ary; - data.ptr = RARRAY(ary)->ptr; data.len = RARRAY(ary)->len; - qsort(RARRAY(ary)->ptr, RARRAY(ary)->len, sizeof(VALUE), - rb_block_given_p()?sort_1:sort_2, &data); - return ary; -} - -static VALUE -sort_unlock(ary) - VALUE ary; -{ - FL_UNSET(ary, ARY_TMPLOCK); - return ary; -} - -/* - * call-seq: - * array.sort! -> array - * array.sort! {| a,b | block } -> array - * - * Sorts _self_. Comparisons for - * the sort will be done using the <=> operator or using - * an optional code block. The block implements a comparison between - * a and b, returning -1, 0, or +1. See also - * Enumerable#sort_by. - * - * a = [ "d", "a", "e", "c", "b" ] - * a.sort #=> ["a", "b", "c", "d", "e"] - * a.sort {|x,y| y <=> x } #=> ["e", "d", "c", "b", "a"] - */ - -VALUE -rb_ary_sort_bang(ary) - VALUE ary; -{ - rb_ary_modify(ary); - if (RARRAY(ary)->len > 1) { - FL_SET(ary, ARY_TMPLOCK); /* prohibit modification during sort */ - rb_ensure(sort_internal, ary, sort_unlock, ary); - } - return ary; -} - -/* - * call-seq: - * array.sort -> an_array - * array.sort {| a,b | block } -> an_array - * - * Returns a new array created by sorting self. Comparisons for - * the sort will be done using the <=> operator or using - * an optional code block. The block implements a comparison between - * a and b, returning -1, 0, or +1. See also - * Enumerable#sort_by. - * - * a = [ "d", "a", "e", "c", "b" ] - * a.sort #=> ["a", "b", "c", "d", "e"] - * a.sort {|x,y| y <=> x } #=> ["e", "d", "c", "b", "a"] - */ - -VALUE -rb_ary_sort(ary) - VALUE ary; -{ - ary = rb_ary_dup(ary); - rb_ary_sort_bang(ary); - return ary; -} - -/* - * call-seq: - * array.collect {|item| block } -> an_array - * array.map {|item| block } -> an_array - * - * Invokes block once for each element of self. Creates a - * new array containing the values returned by the block. - * See also Enumerable#collect. - * - * a = [ "a", "b", "c", "d" ] - * a.collect {|x| x + "!" } #=> ["a!", "b!", "c!", "d!"] - * a #=> ["a", "b", "c", "d"] - */ - -static VALUE -rb_ary_collect(ary) - VALUE ary; -{ - long i; - VALUE collect; - - if (!rb_block_given_p()) { - return rb_ary_new4(RARRAY(ary)->len, RARRAY(ary)->ptr); - } - - collect = rb_ary_new2(RARRAY(ary)->len); - for (i = 0; i < RARRAY(ary)->len; i++) { - rb_ary_push(collect, rb_yield(RARRAY(ary)->ptr[i])); - } - return collect; -} - -/* - * call-seq: - * array.collect! {|item| block } -> array - * array.map! {|item| block } -> array - * - * Invokes the block once for each element of _self_, replacing the - * element with the value returned by _block_. - * See also Enumerable#collect. - * - * a = [ "a", "b", "c", "d" ] - * a.collect! {|x| x + "!" } - * a #=> [ "a!", "b!", "c!", "d!" ] - */ - -static VALUE -rb_ary_collect_bang(ary) - VALUE ary; -{ - long i; - - rb_ary_modify(ary); - for (i = 0; i < RARRAY(ary)->len; i++) { - rb_ary_store(ary, i, rb_yield(RARRAY(ary)->ptr[i])); - } - return ary; -} - -VALUE -rb_get_values_at(obj, olen, argc, argv, func) - VALUE obj; - long olen; - int argc; - VALUE *argv; - VALUE (*func) _((VALUE,long)); -{ - VALUE result = rb_ary_new2(argc); - long beg, len, i, j; - - for (i=0; i an_array - * - * Returns an array containing the elements in - * _self_ corresponding to the given selector(s). The selectors - * may be either integer indices or ranges. - * See also Array#select. - * - * a = %w{ a b c d e f } - * a.values_at(1, 3, 5) - * a.values_at(1, 3, 5, 7) - * a.values_at(-1, -3, -5, -7) - * a.values_at(1..3, 2...5) - */ - -static VALUE -rb_ary_values_at(argc, argv, ary) - int argc; - VALUE *argv; - VALUE ary; -{ - return rb_get_values_at(ary, RARRAY(ary)->len, argc, argv, rb_ary_entry); -} - -/* - * call-seq: - * array.select {|item| block } -> an_array - * - * Invokes the block passing in successive elements from array, - * returning an array containing those elements for which the block - * returns a true value (equivalent to Enumerable#select). - * - * a = %w{ a b c d e f } - * a.select {|v| v =~ /[aeiou]/} #=> ["a", "e"] - */ - -static VALUE -rb_ary_select(ary) - VALUE ary; -{ - VALUE result; - long i; - - result = rb_ary_new2(RARRAY(ary)->len); - for (i = 0; i < RARRAY(ary)->len; i++) { - if (RTEST(rb_yield(RARRAY(ary)->ptr[i]))) { - rb_ary_push(result, rb_ary_elt(ary, i)); - } - } - return result; -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.ceylon b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.ceylon deleted file mode 100644 index 04223c5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.ceylon +++ /dev/null @@ -1,52 +0,0 @@ -import ceylon.language { parseInteger } - -doc "A top-level function, - with multi-line documentation." -void topLevel(String? a, Integer b=5, String* seqs) { - function nested(String s) { - print(s[1..2]); - return true; - } - for (s in seqs.filter((String x) => x.size > 2)) { - nested(s); - } - value uppers = seqs.map((String x) { - return x.uppercased; - }); - String|Null z = a; - {Integer+} ints = { 1, 2, 3, 4, 5 }; - value numbers = [ 1, #ffff, #ffff_ffff, $10101010, $1010_1010_1010_1010, - 123_456_789 ]; - value chars = ['a', '\{#ffff}' ]; -} - -shared class Example_1(name, element) satisfies Comparable> - given Element satisfies Comparable { - shared String name; - shared Element element; - shared [Integer,String] tuple = [1, "2"]; - shared late String lastName; - variable Integer cnt = 0; - - shared Integer count => cnt; - assign count { - assert(count >= cnt); - cnt = count; - } - - shared actual Comparison compare(Example_1 other) { - return element <=> other.element; - } - - shared actual String string { - return "Example with ``element.string``"; - } -} - -Example_1 instance = Example_1 { - element = 5; - name = "Named args call \{#0060}"; -}; - -object example1 extends Example_1("object", 5) { -} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.chai b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.chai deleted file mode 100644 index 85f53c3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.chai +++ /dev/null @@ -1,6 +0,0 @@ -var f = fun(x) { x + 2; } -// comment -puts(someFunc(2 + 2 - 1 * 5 / 4)); -var x = "str"; -def dosomething(lhs, rhs) { print("lhs: ${lhs}, rhs: ${rhs}"); } -callfunc(`+`, 1, 4); diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.clay b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.clay deleted file mode 100644 index 784752c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.clay +++ /dev/null @@ -1,33 +0,0 @@ - -/// @section StringLiteralRef - -record StringLiteralRef ( - sizep : Pointer[SizeT], -); - - -/// @section predicates - -overload ContiguousSequence?(#StringLiteralRef) : Bool = true; -[s when StringLiteral?(s)] -overload ContiguousSequence?(#Static[s]) : Bool = true; - - - -/// @section size, begin, end, index - -forceinline overload size(a:StringLiteralRef) = a.sizep^; - -forceinline overload begin(a:StringLiteralRef) : Pointer[Char] = Pointer[Char](a.sizep + 1); -forceinline overload end(a:StringLiteralRef) = begin(a) + size(a); - -[I when Integer?(I)] -forceinline overload index(a:StringLiteralRef, i:I) : ByRef[Char] { - assert["boundsChecks"](i >= 0 and i < size(a), "StringLiteralRef index out of bounds"); - return ref (begin(a) + i)^; -} - -foo() = """ -long\tlong -story -""" diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.cls b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.cls deleted file mode 100644 index d36ad6f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.cls +++ /dev/null @@ -1,15 +0,0 @@ -USING Progress.Lang.*. - -CLASS Test INHERITS Progress.Sucks: - - DEFINE PRIVATE VARIABLE cTest AS CHAR NO-UNDO. - - CONSTRUCTOR PUBLIC Test(): - SUPER(). - MESSAGE "Why are you punishing yourself by coding in this language?". - END CONSTRUCTOR. - - METHOD PUBLIC LOGICAL Blowup(INPUT iTime AS INT): - END. - -END CLASS. diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.cob b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.cob deleted file mode 100644 index 3f65e49..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.cob +++ /dev/null @@ -1,3556 +0,0 @@ - IDENTIFICATION DIVISION. - PROGRAM-ID. OCic. - ***************************************************************** - ** This program provides a Textual User Interface (TUI) to the ** - ** process of compiling and (optionally) executing an OpenCOBOL** - ** program. ** - ** ** - ** This programs execution syntax is as follows: ** - ** ** - ** ocic [ ... ] ** - ** ** - ** Once executed, a display screen will be presented showing ** - ** the compilation options that will be used. The user will ** - ** have the opportunity to change options, specify new ones ** - ** and specify any program execution arguments to be used if ** - ** you select the "Execute" option. When you press the Enter ** - ** key the program will be compiled. ** - ** ** - ** The SCREEN SECTION contains an image of the screen. ** - ** ** - ** The "010-Parse-Args" section in the PROCEDURE DIVISION has ** - ** documentation on switches and their function. ** - ***************************************************************** - ** ** - ** AUTHOR: GARY L. CUTLER ** - ** CutlerGL@gmail.com ** - ** Copyright (C) 2009-2010, Gary L. Cutler, GPL ** - ** ** - ** DATE-WRITTEN: June 14, 2009 ** - ** ** - ***************************************************************** - ** Note: Depending on which extended DISPLAY handler you're ** - ** using (PDCurses, Curses, ...), you may need to un- ** - ** comment any source lines tagged with "SCROLL" in cols ** - ** 1-6 in order to have error messages scroll properly ** - ** in the OCic shell window. ** - ***************************************************************** - ** DATE CHANGE DESCRIPTION ** - ** ====== ==================================================== ** - ** GC0609 Don't display compiler messages file if compilation ** - ** Is successful. Also don't display messages if the ** - ** output file is busy (just put a message on the ** - ** screen, leave the OC screen up & let the user fix ** - ** the problem & resubmit. ** - ** GC0709 When 'EXECUTE' is selected, a 'FILE BUSY' error will ** - ** still cause the (old) executable to be launched. ** - ** Also, the 'EXTRA SWITCHES' field is being ignored. ** - ** Changed the title bar to lowlighted reverse video & ** - ** the message area to highlighted reverse-video. ** - ** GC0809 Add a SPACE in from of command-line args when ** - ** executing users program. Add a SPACE after the ** - ** -ftraceall switch when building cobc command. ** - ** GC0909 Convert to work on Cygwin/Linux as well as MinGW ** - ** GC0310 Virtualized the key codes for S-F1 thru S-F7 as they ** - ** differ depending upon whether PDCurses or NCurses is ** - ** being used. ** - ** GC0410 Introduced the cross-reference and source listing ** - ** features. Also fixed a bug in @EXTRA switch proces- ** - ** sing where garbage will result if more than the ** - ** @EXTRA switch is specified. ** - ***************************************************************** - ENVIRONMENT DIVISION. - CONFIGURATION SECTION. - REPOSITORY. - FUNCTION ALL INTRINSIC. - INPUT-OUTPUT SECTION. - FILE-CONTROL. - SELECT Bat-File ASSIGN TO Bat-File-Name - ORGANIZATION IS LINE SEQUENTIAL. - - SELECT Cobc-Output ASSIGN TO Cobc-Output-File - ORGANIZATION IS LINE SEQUENTIAL. - - SELECT Source-Code ASSIGN TO File-Name - ORGANIZATION IS LINE SEQUENTIAL - FILE STATUS IS FSM-Status. - DATA DIVISION. - FILE SECTION. - FD Bat-File. - 01 Bat-File-Rec PIC X(2048). - - FD Cobc-Output. - 01 Cobc-Output-Rec PIC X(256). - - FD Source-Code. - 01 Source-Code-Record PIC X(80). - - WORKING-STORAGE SECTION. - COPY screenio. - - 01 Bat-File-Name PIC X(256). - -GC0909 01 Cmd PIC X(512). - - 01 Cobc-Cmd PIC X(256). - - 01 Cobc-Output-File PIC X(256). - - 01 Command-Line-Args PIC X(256). - - 01 Config-File PIC X(12). - -GC0310 01 Config-Keys. -GC0310 05 CK-S-F1 PIC 9(4). -GC0310 05 CK-S-F2 PIC 9(4). -GC0310 05 CK-S-F3 PIC 9(4). -GC0310 05 CK-S-F4 PIC 9(4). -GC0310 05 CK-S-F5 PIC 9(4). -GC0310 05 CK-S-F6 PIC 9(4). -GC0310 05 CK-S-F7 PIC 9(4). - -GC0909 01 Dir-Char PIC X(1). - - 01 Dummy PIC X(1). - - 01 Env-TEMP PIC X(256). - - 01 File-Name. - 05 FN-Char OCCURS 256 TIMES PIC X(1). - - 01 File-Status-Message. - 05 FILLER PIC X(13) VALUE 'Status Code: '. - 05 FSM-Status PIC 9(2). - 05 FILLER PIC X(11) VALUE ', Meaning: '. - 05 FSM-Msg PIC X(25). - - 01 Flags. - 05 F-Compilation-Succeeded PIC X(1). - 88 88-Compile-OK VALUE 'Y'. -GC0909 88 88-Compile-OK-Warn VALUE 'W'. - 88 88-Compile-Failed VALUE 'N'. -GC0609 05 F-Complete PIC X(1). -GC0609 88 88-Complete VALUE 'Y'. -GC0609 88 88-Not-Complete VALUE 'N'. -GC0809 05 F-IDENT-DIVISION PIC X(1). -GC0809 88 88-1st-Prog-Complete VALUE 'Y'. -GC0809 88 88-More-To-1st-Prog VALUE 'N'. - 05 F-LINKAGE-SECTION PIC X(1). - 88 88-Compile-As-Subpgm VALUE 'Y'. - 88 88-Compile-As-Mainpgm VALUE 'N'. - 05 F-No-Switch-Changes PIC X(1). - 88 88-No-Switch-Changes VALUE 'Y'. - 88 88-Switch-Changes VALUE 'N'. -GC0709 05 F-Output-File-Busy PIC X(1). -GC0709 88 88-Output-File-Busy VALUE 'Y'. -GC0709 88 88-Output-File-Avail VALUE 'N'. -GC0809 05 F-Source-Record-Type PIC X(1). -GC0809 88 88-Source-Rec-Linkage VALUE 'L'. -GC0809 88 88-Source-Rec-Ident VALUE 'I'. -GC0809 88 88-Source-Rec-IgnoCOB-COLOR-RED VALUE ' '. - 05 F-Switch-Error PIC X(1). - 88 88-Switch-Is-Bad VALUE 'Y'. - 88 88-Switch-Is-Good VALUE 'N'. - -GC0909 01 Horizontal-Line PIC X(80). -GC0909 - 01 I USAGE BINARY-LONG. - - 01 J USAGE BINARY-LONG. - -GC0909 01 MS USAGE BINARY-LONG. - -GC0909 01 ML USAGE BINARY-LONG. - - 01 OC-Compiled PIC XXXX/XX/XXBXX/XX. - -GC0909 01 OS-Type USAGE BINARY-LONG. -GC0909 88 OS-Unknown VALUE 0. -GC0909 88 OS-Windows VALUE 1. -GC0909 88 OS-Cygwin VALUE 2. -GC0909 88 OS-UNIX VALUE 3. - -GC0909 01 OS-Type-Literal PIC X(7). - - 01 Output-Message PIC X(80). - - 01 Path-Delimiter PIC X(1). - - 01 Prog-Folder PIC X(256). - - 01 Prog-Extension PIC X(30). - - 01 Prog-File-Name PIC X(40). - - 01 Prog-Name PIC X(31). - - 78 Selection-Char VALUE '>'. - - 01 Switch-Display. - 05 SD-Switch-And-Value PIC X(19). - 05 FILLER PIC X(1). - 05 SD-Description PIC X(60). - - 01 Switch-Keyword PIC X(12). -GC0410 88 Switch-Is-CONFIG VALUE '@CONFIG', '@C'. -GC0410 88 Switch-Is-DEBUG VALUE '@DEBUG', '@D'. -GC0410 88 Switch-Is-DLL VALUE '@DLL'. -GC0410 88 Switch-Is-EXECUTE VALUE '@EXECUTE', '@E'. -GC0410 88 Switch-Is-EXTRA VALUE '@EXTRA', '@EX'. -GC0410 88 Switch-Is-NOTRUNC VALUE '@NOTRUNC', '@N'. -GC0410 88 Switch-Is-TRACE VALUE '@TRACE', '@T'. -GC0410 88 Switch-Is-SOURCE VALUE '@SOURCE', '@S'. -GC0410 88 Switch-Is-XREF VALUE '@XREF', '@X'. - - 01 Switch-Keyword-And-Value PIC X(256). - - 01 Switch-Value. - 05 SV-1 PIC X(1). - 05 FILLER PIC X(255). - 01 Switch-Value-Alt REDEFINES Switch-Value - PIC X(256). - 88 Valid-Config-Filename - VALUE 'BS2000', 'COBOL85', 'COBOL2002', 'DEFAULT', - 'IBM', 'MF', 'MVS'. - - 01 Switches. - 05 S-ARGS PIC X(75) VALUE SPACES. - 05 S-CfgS. - 10 S-Cfg-BS2000 PIC X(1) VALUE ' '. - 10 S-Cfg-COBOL85 PIC X(1) VALUE ' '. - 10 S-Cfg-COBOL2002 PIC X(1) VALUE ' '. - 10 S-Cfg-DEFAULT PIC X(1) VALUE Selection-Char. - 10 S-Cfg-IBM PIC X(1) VALUE ' '. - 10 S-Cfg-MF PIC X(1) VALUE ' '. - 10 S-Cfg-MVS PIC X(1) VALUE ' '. - 05 S-EXTRA PIC X(75) VALUE SPACES. - 05 S-Yes-No-Switches. - 10 S-DEBUG PIC X(1) VALUE 'N'. - 10 S-DLL PIC X(1) VALUE 'N'. -GC0410 10 S-XREF PIC X(1) VALUE 'N'. -GC0410 10 S-SOURCE PIC X(1) VALUE 'N'. - 10 S-EXECUTE PIC X(1) VALUE 'N'. - 10 S-NOTRUNC PIC X(1) VALUE 'Y'. - 10 S-SUBROUTINE PIC X(1) VALUE 'A'. - 10 S-TRACE PIC X(1) VALUE 'N'. - 10 S-TRACEALL PIC X(1) VALUE 'N'. - - 01 Tally USAGE BINARY-LONG. - - SCREEN SECTION. - *> - *> Here is the layout of the OCic screen. - *> - *> Note that this program can utilize the traditional PC line-drawing characters, - *> if they are available. - *> - *> If this program is run on Windows, it must run with codepage 437 activated to - *> display the line-drawing characters. With a native Windows build or a - *> Windows/MinGW build, one could use the command "chcp 437" to set that codepage - *> for display within a Windows console window (that should be the default, though). - *> With a Windows/Cygwin build, set the environment variable CYGWIN to a value of - *> "codepage:oem" (this cannot be done from within the program though - you will - *> have to use the "Computer/Advanced System Settings/Environment Variables" (Vista or - *> Windows 7) function to define the variable. XP Users: use "My Computer/Properties/ - *> Advanced/Environment Variables". - *> - *> To use OCic without the line-drawing characters, comment-out the first set of - *> 78 "LD" items and uncomment the second. - *> - *> The following sample screen layout shows how the screen looks with line-drawing - *> characters disabled. - *> - *>=================================================================================== - *> OCic (2010/04/02 11:36) - OpenCOBOL V1.1 Interactive Compilation Windows 01 - *> +-----------------------------------------------------------------------------+ 02 - *> | Program: OCic F-Key: Select Opt | 03 - *> | Folder: E:\OpenCOBOL\Samples Enter: Compile | 04 - *> | Filename: OCic.cbl Esc: Quit | 05 - *> +-----------------------------------------------------------------------------+ 06 - *> On/Off Switches: Configuration: 07 - *> +---------------------------------------------------------+-------------------+ 08 - *> | F1 Compile debug lines F8 Produce source listing | S-F1 BS2000 | 09 - *> | F2 Always make DLLs F9 Produce xref listing | S-F2 COBOL85 | 10 - *> | F3 Pgm is a SUBROUTINE | S-F3 COBOL2002 | 11 - *> | F4 Execute if compile OK | S-F4 > Default | 12 - *> | F5 > No COMP/BINARY trunc | S-F5 IBM | 13 - *> | F6 Trace procedures | S-F6 MicroFocus | 14 - *> | F7 Trace proc + stmnts | S-F7 MVS | 15 - *> +---------------------------------------------------------+-------------------+ 16 - *> Additional "cobc" Switches (if any): 17 - *> +-----------------------------------------------------------------------------+ 18 - *> | -O2________________________________________________________________________ | 19 - *> +-----------------------------------------------------------------------------+ 20 - *> Program Execution Arguments (if any): 21 - *> +-----------------------------------------------------------------------------+ 22 - *> | ___________________________________________________________________________ | 23 - *> +-----------------------------------------------------------------------------+ 24 - *> OCic Copyright (C) 2009-2010, Gary L. Cutler, GPL 25 - *>=================================================================================== - *>12345678901234567890123456789012345678901234567890123456789012345678901234567890 - *> 1 2 3 4 5 6 7 8 - *> - *> USE THESE CHARS FOR LINE-DRAWING IF YOU HAVE ACCESS TO PC-DOS CODEPAGE 437: - *> - 78 LD-UL-Corner VALUE X"DA". - 78 LD-LL-Corner VALUE X"C0". - 78 LD-UR-Corner VALUE X"BF". - 78 LD-LR-Corner VALUE X"D9". - 78 LD-Upper-T VALUE X"C2". - 78 LD-Lower-T VALUE X"C1". - 78 LD-Horiz-Line VALUE X"C4". - 78 LD-Vert-Line VALUE X"B3". - *> - *> USE THESE CHARS FOR LINE-DRAWING IF YOU DO NOT HAVE ACCESS TO PC-DOS CODEPAGE 437: - *> - *> 78 LD-UL-Corner VALUE '+'. - *> 78 LD-LL-Corner VALUE '+'. - *> 78 LD-UR-Corner VALUE '+'. - *> 78 LD-LR-Corner VALUE '+'. - *> 78 LD-Upper-T VALUE '+'. - *> 78 LD-Lower-T VALUE '+'. - *> 78 LD-Horiz-Line VALUE '-'. - *> 78 LD-Vert-Line VALUE '|'. - *> - 01 Blank-Screen LINE 1 COLUMN 1 BLANK SCREEN. - - 01 Switches-Screen BACKGROUND-COLOR COB-COLOR-BLACK - FOREGROUND-COLOR COB-COLOR-WHITE AUTO. - *> - *> GENERAL SCREEN FRAMEWORK - *> - 03 BACKGROUND-COLOR COB-COLOR-BLACK - FOREGROUND-COLOR COB-COLOR-BLUE HIGHLIGHT. - 05 LINE 02 COL 02 VALUE LD-UL-Corner. - 05 PIC X(77) FROM Horizontal-Line. - 05 COL 80 VALUE LD-UR-Corner. - - 05 LINE 03 COL 02 VALUE LD-Vert-Line. - 05 COL 80 VALUE LD-Vert-Line. - - 05 LINE 04 COL 02 VALUE LD-Vert-Line. - 05 COL 80 VALUE LD-Vert-Line. - - 05 LINE 05 COL 02 VALUE LD-Vert-Line. - 05 COL 80 VALUE LD-Vert-Line. - - 05 LINE 06 COL 02 VALUE LD-LL-Corner. - 05 PIC X(77) FROM Horizontal-Line. - 05 COL 80 VALUE LD-LR-Corner. - - 05 LINE 08 COL 02 VALUE LD-UL-Corner. - 05 PIC X(57) FROM Horizontal-Line. - 05 COL 60 VALUE LD-Upper-T. - 05 PIC X(19) FROM Horizontal-Line. - 05 COL 80 VALUE LD-UR-Corner. - - 05 LINE 09 COL 02 VALUE LD-Vert-Line. - 05 COL 60 VALUE LD-Vert-Line. - 05 COL 80 VALUE LD-Vert-Line. - - 05 LINE 10 COL 02 VALUE LD-Vert-Line. - 05 COL 60 VALUE LD-Vert-Line. - 05 COL 80 VALUE LD-Vert-Line. - - 05 LINE 11 COL 02 VALUE LD-Vert-Line. - 05 COL 60 VALUE LD-Vert-Line. - 05 COL 80 VALUE LD-Vert-Line. - - 05 LINE 12 COL 02 VALUE LD-Vert-Line. - 05 COL 60 VALUE LD-Vert-Line. - 05 COL 80 VALUE LD-Vert-Line. - - 05 LINE 13 COL 02 VALUE LD-Vert-Line. - 05 COL 60 VALUE LD-Vert-Line. - 05 COL 80 VALUE LD-Vert-Line. - - 05 LINE 14 COL 02 VALUE LD-Vert-Line. - 05 COL 60 VALUE LD-Vert-Line. - 05 COL 80 VALUE LD-Vert-Line. - - 05 LINE 15 COL 02 VALUE LD-Vert-Line. - 05 COL 60 VALUE LD-Vert-Line. - 05 COL 80 VALUE LD-Vert-Line. - - 05 LINE 16 COL 02 VALUE LD-LL-Corner. - 05 PIC X(57) FROM Horizontal-Line. - 05 COL 60 VALUE LD-Lower-T. - 05 PIC X(19) FROM Horizontal-Line. - 05 COL 80 VALUE LD-LR-Corner. - - 05 LINE 18 COL 02 VALUE LD-UL-Corner. - 05 PIC X(77) FROM Horizontal-Line. - 05 COL 80 VALUE LD-UR-Corner. - - 05 LINE 19 COL 02 VALUE LD-Vert-Line. - 05 COL 80 VALUE LD-Vert-Line. - - 05 LINE 20 COL 02 VALUE LD-LL-Corner. - 05 PIC X(77) FROM Horizontal-Line. - 05 COL 80 VALUE LD-LR-Corner. - - 05 LINE 22 COL 02 VALUE LD-UL-Corner. - 05 PIC X(77) FROM Horizontal-Line. - 05 COL 80 VALUE LD-UR-Corner. - - 05 LINE 23 COL 02 VALUE LD-Vert-Line. - 05 COL 80 VALUE LD-Vert-Line. - - 05 LINE 24 COL 02 VALUE LD-LL-Corner. - 05 PIC X(77) FROM Horizontal-Line. - 05 COL 80 VALUE LD-LR-Corner. - *> - *> TOP AND BOTTOM LINES - *> - 03 BACKGROUND-COLOR COB-COLOR-BLUE BLINK - FOREGROUND-COLOR COB-COLOR-WHITE HIGHLIGHT. -GC0410 05 LINE 01 COL 01 VALUE ' OCic ('. -GC0410 05 PIC X(16) FROM OC-Compiled. -GC0410 05 VALUE ') OpenCOBOL V1.1 06FEB2009 ' & -GC0410 'Interactive Compilation '. -GC0410 05 LINE 25 COL 01 PIC X(81) FROM Output-Message. - *> - *> LABELS - *> - 03 BACKGROUND-COLOR COB-COLOR-BLACK - FOREGROUND-COLOR COB-COLOR-CYAN HIGHLIGHT. - 05 LINE 07 COL 04 VALUE 'On/Off Switches:'. - 05 COL 62 VALUE 'Configuration:'. - 05 LINE 17 COL 04 VALUE 'Additional "cobc" Switches (if any - - '):'. - 05 LINE 21 COL 04 VALUE 'Program Execution Arguments (if an - - 'y):'. - *> - *> TOP SECTION BACKGROUND - *> - 03 BACKGROUND-COLOR COB-COLOR-BLACK - FOREGROUND-COLOR COB-COLOR-CYAN LOWLIGHT. - 05 LINE 03 COL 04 VALUE 'Program: '. - 05 LINE 04 COL 04 VALUE 'Folder: '. - 05 LINE 05 COL 04 VALUE 'Filename: '. - - 05 LINE 03 COL 62 VALUE 'F-Key: Select Opt'. - 05 LINE 04 COL 62 VALUE 'Enter: Compile '. - 05 LINE 05 COL 62 VALUE 'Esc: Quit '. - *> - *> TOP SECTION PROGRAM INFO - *> - 03 BACKGROUND-COLOR COB-COLOR-BLACK - FOREGROUND-COLOR COB-COLOR-WHITE HIGHLIGHT. - 05 LINE 03 COL 14 PIC X(47) FROM Prog-Name. - 05 LINE 04 COL 14 PIC X(47) FROM Prog-Folder. - 05 LINE 05 COL 14 PIC X(47) FROM Prog-File-Name. - *> - *> MIDDLE LEFT SECTION F-KEYS - *> - 03 BACKGROUND-COLOR COB-COLOR-BLACK - FOREGROUND-COLOR COB-COLOR-WHITE HIGHLIGHT. - 05 LINE 09 COL 04 VALUE 'F1'. - 05 LINE 10 COL 04 VALUE 'F2'. - 05 LINE 11 COL 04 VALUE 'F3'. - 05 LINE 12 COL 04 VALUE 'F4'. - 05 LINE 13 COL 04 VALUE 'F5'. - 05 LINE 14 COL 04 VALUE 'F6'. - 05 LINE 15 COL 04 VALUE 'F7'. - 05 LINE 09 COL 32 VALUE 'F8'. - 05 LINE 10 COL 32 VALUE 'F9'. - *> - *> MIDDLE LEFT SECTION SWITCHES - *> - 03 BACKGROUND-COLOR COB-COLOR-BLACK - FOREGROUND-COLOR COB-COLOR-RED HIGHLIGHT. - 05 LINE 09 COL 07 PIC X(1) FROM S-DEBUG. - 05 LINE 10 COL 07 PIC X(1) FROM S-DLL. - 05 LINE 11 COL 07 PIC X(1) FROM S-SUBROUTINE. - 05 LINE 12 COL 07 PIC X(1) FROM S-EXECUTE. - 05 LINE 13 COL 07 PIC X(1) FROM S-NOTRUNC. - 05 LINE 14 COL 07 PIC X(1) FROM S-TRACE. - 05 LINE 15 COL 07 PIC X(1) FROM S-TRACEALL. - 05 LINE 09 COL 35 PIC X(1) FROM S-SOURCE. - 05 LINE 10 COL 35 PIC X(1) FROM S-XREF. - *> - *> MIDDLE LEFT SECTION BACKGROUND - *> - 03 BACKGROUND-COLOR COB-COLOR-BLACK - FOREGROUND-COLOR COB-COLOR-CYAN LOWLIGHT. - 05 LINE 09 COL 09 VALUE 'Compile debug lines '. - 05 LINE 10 COL 09 VALUE 'Always make DLLs '. - 05 LINE 11 COL 09 VALUE 'Pgm is a SUBROUTINE '. - 05 LINE 12 COL 09 VALUE 'Execute if compile OK '. - 05 LINE 13 COL 09 VALUE 'No COMP/BINARY trunc '. - 05 LINE 14 COL 09 VALUE 'Trace procedures '. - 05 LINE 15 COL 09 VALUE 'Trace proc + stmnts '. - 05 LINE 09 COL 37 VALUE 'Produce source listing'. - 05 LINE 10 COL 37 VALUE 'Produce xref listing '. - *> - *> MIDDLE RIGHT SECTION F-KEYS - *> - 03 BACKGROUND-COLOR COB-COLOR-BLACK - FOREGROUND-COLOR COB-COLOR-WHITE HIGHLIGHT. - 05 LINE 09 COL 62 VALUE 'S-F1'. - 05 LINE 10 COL 62 VALUE 'S-F2'. - 05 LINE 11 COL 62 VALUE 'S-F3'. - 05 LINE 12 COL 62 VALUE 'S-F4'. - 05 LINE 13 COL 62 VALUE 'S-F5'. - 05 LINE 14 COL 62 VALUE 'S-F6'. - 05 LINE 15 COL 62 VALUE 'S-F7'. - *> - *> MIDDLE RIGHT SECTION SWITCHES - *> - 03 BACKGROUND-COLOR COB-COLOR-BLACK - FOREGROUND-COLOR COB-COLOR-RED HIGHLIGHT. - 05 LINE 09 COL 67 PIC X(1) FROM S-Cfg-BS2000. - 05 LINE 10 COL 67 PIC X(1) FROM S-Cfg-COBOL85. - 05 LINE 11 COL 67 PIC X(1) FROM S-Cfg-COBOL2002. - 05 LINE 12 COL 67 PIC X(1) FROM S-Cfg-DEFAULT. - 05 LINE 13 COL 67 PIC X(1) FROM S-Cfg-IBM. - 05 LINE 14 COL 67 PIC X(1) FROM S-Cfg-MF. - 05 LINE 15 COL 67 PIC X(1) FROM S-Cfg-MVS. - *> - *> MIDDLE RIGHT SECTION BACKGROUND - *> - 03 BACKGROUND-COLOR COB-COLOR-BLACK - FOREGROUND-COLOR COB-COLOR-CYAN LOWLIGHT. - 05 LINE 09 COL 69 VALUE 'BS2000 '. - 05 LINE 10 COL 69 VALUE 'COBOL85 '. - 05 LINE 11 COL 69 VALUE 'COBOL2002 '. - 05 LINE 12 COL 69 VALUE 'Default '. - 05 LINE 13 COL 69 VALUE 'IBM '. - 05 LINE 14 COL 69 VALUE 'MicroFocus'. - 05 LINE 15 COL 69 VALUE 'MVS '. - *> - *> FREE-FORM OPTIONS FIELDS - *> - 03 BACKGROUND-COLOR COB-COLOR-BLACK - FOREGROUND-COLOR COB-COLOR-WHITE HIGHLIGHT. - 05 LINE 19 COL 04 PIC X(75) USING S-EXTRA. - 05 LINE 23 COL 04 PIC X(75) USING S-ARGS. - / - PROCEDURE DIVISION. - ***************************************************************** - ** Legend to procedure names: ** - ** ** - ** 00x-xxx All MAIN driver procedures ** - ** 0xx-xxx All GLOBAL UTILITY procedures ** - ** 1xx-xxx All INITIALIZATION procedures ** - ** 2xx-xxx All CORE PROCESSING procedures ** - ** 9xx-xxx All TERMINATION procedures ** - ***************************************************************** - DECLARATIVES. - 000-File-Error SECTION. - USE AFTER STANDARD ERROR PROCEDURE ON Source-Code. - 000-Handle-Error. - COPY FileStat-Msgs - REPLACING STATUS BY FSM-Status - MSG BY FSM-Msg. - MOVE SPACES TO Output-Message - IF FSM-Status = 35 - DISPLAY - 'File not found: "' - TRIM(File-Name,TRAILING) - '"' - END-DISPLAY - ELSE - DISPLAY - 'Error accessing file: "' - TRIM(File-Name,TRAILING) - '"' - END-DISPLAY - END-IF - GOBACK - . - END DECLARATIVES. - / - 000-Main SECTION. - - PERFORM 100-Initialization -GC0609 SET 88-Not-Complete TO TRUE -GC0609 PERFORM UNTIL 88-Complete -GC0609 PERFORM 200-Let-User-Set-Switches -GC0609 PERFORM 210-Run-Compiler -GC0410 IF (88-Compile-OK OR 88-Compile-OK-Warn) -GC0410 AND (S-XREF NOT = SPACE OR S-SOURCE NOT = SPACE) -GC0410 PERFORM 220-Make-Listing -GC0410 END-IF -GC0709 IF (S-EXECUTE NOT = SPACES) -GC0709 AND (88-Output-File-Avail) -GC0609 PERFORM 230-Run-Program -GC0609 END-IF -GC0609 END-PERFORM - . - - 009-Done. - PERFORM 900-Terminate - . - * -- Control will NOT return - / - 010-Parse-Args SECTION. - ***************************************************************** - ** Process a sequence of KEYWORD=VALUE items. These are items ** - ** specified on the command-line to provide the initial ** - ** options shown selected on the screen. When integrating ** - ** OCic into an edirot or framework, include these switches on ** - ** the ocic.exe command the editor/framework executes. Any ** - ** underlined choice is the default value for that switch. ** - ** ** - ** @CONFIG=BS2000|COBOL85|COBOL2002|DEFAULT|IBM|MF|MVS ** - ** ======= ** - ** This switch specifies the default cobc compiler configura- ** - ** tion file to be used ** - ** ** - ** @DEBUG=YES|NO ** - ** == ** - ** This switch specifies whether (YES) or not (NO) debugging ** - ** lines (those with a "D" in column 7) will be compiled. ** - ** ** - ** @DLL=YES|NO ** - ** == ** - ** Use this switch to force ALL compiled programs to be built ** - ** as DLLs ("@DLL=YES"). When main programs are built as DLLs ** - ** they must be executed using the cobcrun utility. When ** - ** "@DLL=NO" is in effect, main programs are generated as ** - ** actual "exe" files and only subprograms will be generated ** - ** as DLLs. ** - ** ** - ** @EXECUTE=YES|NO ** - ** == ** - ** This switch specifies whether ("@EXECUTE=YES") or not ** - ** ("@EXECUTE=NO") the program will be executed after it is ** - ** successfully compiled. ** - ** ** - ** @EXTRA=extra cobc argument(s) ** - ** ** - ** This switch allows you to specify additional cobc arguments ** - ** that aren't managed by the other OC switches. If used, ** - ** this must be the last switch specified on the command line, ** - ** as everything that follows the "=" will be placed on the ** - ** cobc command generated by OC. ** - ** ** - ** @NOTRUNC=YES|NO ** - ** === ** - ** This switch specifies whether (YES) or not (NO) the sup- ** - ** pression of binary field truncation will occur. If a PIC ** - ** 99 COMP field (one byte of storage), for example, is given ** - ** the value 123, it may have its value truncated to 23 when ** - ** DISPLAYed. Regardless of the NOTRUNC setting, internally ** - ** the full precision of the field (allowing a maximum value ** - ** of 255) will be preserved. Even though truncation - if it ** - ** does occur - would appear to have a minimal disruption on ** - ** program operation, it has a significant effect on program ** - ** run-time speed. ** - ** ** - ** @TRACE=YES|NO|ALL ** - ** == ** - ** This switch controls whether or not code will be added to ** - ** the object program to produce execution-time logic traces. ** - ** A specification of "@TRACE=NO" means no such code will be ** - ** produced. By specifying "@TRACE=YES", code will be genera- ** - ** ted to display procedure names as they are entered. A ** - ** "@TRACE=ALL" specification will generate not only procedure ** - ** traces (as "@TRACE=YES" would) but also statement-level ** - ** traces too! All trace output is written to STDERR, so ** - ** adding a "2>file" to the execution of the program will pipe ** - ** the trace output to a file. You may find it valuable to ** - ** add your own DISPLAY statements to the debugging output via ** - ** "DISPLAY xx UPON SYSERR" The SYSERR device corresponds to ** - ** the Windows or UNIX STDERR device and will therefore honor ** - ** any "2>file" placed at the end of your program's execution. ** - ** Add a "D" in column 7 and you can control the generation or ** - ** ignoring of these DISPLAY statements via the "@DEBUG" ** - ** switch. ** - ** ** -GC0410** @SOURCE=YES|NO ** -GC0410** == ** -GC0410** Use this switch to produce a source listing of the program, ** -GC0410** PROVIDED it compiles without errors. ** - ** ** -GC0410** @XREF=YES|NO ** -GC0410** == ** -GC0410** Use this switch to produce a cross-reference listing of the ** -GC0410** program, PROVIDED it compiles without errors. ** - ***************************************************************** - - 011-Init. - MOVE 1 TO I - . - - 012-Extract-Kwd-And-Value. - PERFORM UNTIL I NOT < LENGTH(Command-Line-Args) - MOVE I TO J - UNSTRING Command-Line-Args - DELIMITED BY ALL SPACES - INTO Switch-Keyword-And-Value - WITH POINTER I - END-UNSTRING - IF Switch-Keyword-And-Value NOT = SPACES - UNSTRING Switch-Keyword-And-Value - DELIMITED BY '=' - INTO Switch-Keyword, Switch-Value - END-UNSTRING - PERFORM 030-Process-Keyword - END-IF - END-PERFORM - . - - 019-Done. - EXIT. - - ***************************************************************** - ** Since this program uses the SCREEN SECTION, it cannot do ** - ** conventional console DISPLAY operations. This routine ** - ** (which, I admit, is like using an H-bomb to hunt rabbits) ** - ** will submit an "ECHO" command to the system to simulate a ** - ** DISPLAY. ** - ***************************************************************** - 021-Build-And-Issue-Command. - DISPLAY - Output-Message - END-DISPLAY - . - - 029-Done. - EXIT. - / - 030-Process-Keyword SECTION. - ***************************************************************** - ** Process a single KEYWORD=VALUE item. ** - ***************************************************************** - - 031-Init. - MOVE UPPER-CASE(Switch-Keyword) TO Switch-Keyword - SET 88-Switch-Is-Good TO TRUE - . - - 032-Process. - EVALUATE TRUE - WHEN Switch-Is-EXTRA -GC0410 MOVE J TO I - UNSTRING Command-Line-Args DELIMITED BY '=' - INTO Dummy, S-EXTRA -GC0410 WITH POINTER I -GC0410 END-UNSTRING - MOVE LENGTH(Command-Line-Args) TO I - WHEN Switch-Is-CONFIG - MOVE 'CONFIG' TO Switch-Keyword - MOVE UPPER-CASE(Switch-Value) - TO Switch-Value - EVALUATE Switch-Value - WHEN 'BS2000' - MOVE SPACES TO S-CfgS - MOVE Selection-Char TO S-Cfg-BS2000 - WHEN 'COBOL85' - MOVE SPACES TO S-CfgS - MOVE Selection-Char TO S-Cfg-COBOL85 - WHEN 'COBOL2002' - MOVE SPACES TO S-CfgS - MOVE Selection-Char TO S-Cfg-COBOL2002 - WHEN 'DEFAULT' - MOVE SPACES TO S-CfgS - MOVE Selection-Char TO S-Cfg-DEFAULT - WHEN 'IBM' - MOVE SPACES TO S-CfgS - MOVE Selection-Char TO S-Cfg-IBM - WHEN 'MF' - MOVE SPACES TO S-CfgS - MOVE Selection-Char TO S-Cfg-MF - WHEN 'MVS' - MOVE SPACES TO S-CfgS - MOVE Selection-Char TO S-Cfg-MVS - WHEN OTHER - MOVE 'An invalid /CONFIG switch value ' & - 'was specified on the command line ' & - '- ignored' - TO Output-Message - END-EVALUATE - WHEN Switch-Is-DEBUG - MOVE 'DEBUG' TO Switch-Keyword - MOVE UPPER-CASE(Switch-Value) - TO Switch-Value - PERFORM 040-Process-Yes-No-Value - IF 88-Switch-Is-Good - MOVE SV-1 TO S-DEBUG - END-IF -GC0410 WHEN Switch-Is-DLL -GC0410 MOVE 'DLL' TO Switch-Keyword -GC0410 MOVE UPPER-CASE(Switch-Value) -GC0410 TO Switch-Value -GC0410 PERFORM 040-Process-Yes-No-Value -GC0410 IF 88-Switch-Is-Good -GC0410 MOVE SV-1 TO S-DLL -GC0410 END-IF - WHEN Switch-Is-EXECUTE - MOVE 'EXECUTE' TO Switch-Keyword - MOVE UPPER-CASE(Switch-Value) - TO Switch-Value - PERFORM 040-Process-Yes-No-Value - IF 88-Switch-Is-Good - MOVE SV-1 TO S-EXECUTE - END-IF - WHEN Switch-Is-NOTRUNC - MOVE 'NOTRUNC' TO Switch-Keyword - MOVE UPPER-CASE(Switch-Value) - TO Switch-Value - PERFORM 040-Process-Yes-No-Value - IF 88-Switch-Is-Good - MOVE SV-1 TO S-NOTRUNC - END-IF -GC0410 WHEN Switch-Is-SOURCE -GC0410 MOVE 'SOURCE' TO Switch-Keyword -GC0410 MOVE UPPER-CASE(Switch-Value) -GC0410 TO Switch-Value -GC0410 PERFORM 050-Process-Yes-No-All -GC0410 IF 88-Switch-Is-Good -GC0410 MOVE SV-1 TO S-SOURCE -GC0410 END-IF - WHEN Switch-Is-TRACE - MOVE 'TRACE' TO Switch-Keyword - MOVE UPPER-CASE(Switch-Value) - TO Switch-Value - PERFORM 050-Process-Yes-No-All - IF 88-Switch-Is-Good - MOVE SV-1 TO S-TRACE - END-IF -GC0410 WHEN Switch-Is-XREF -GC0410 MOVE 'XREF' TO Switch-Keyword -GC0410 MOVE UPPER-CASE(Switch-Value) -GC0410 TO Switch-Value -GC0410 PERFORM 050-Process-Yes-No-All -GC0410 IF 88-Switch-Is-Good -GC0410 MOVE SV-1 TO S-XREF -GC0410 END-IF - WHEN OTHER - MOVE SPACES TO Output-Message - STRING '"' - TRIM(Switch-Keyword) - '" is not a valid switch ' & - '- ignored' - DELIMITED SIZE - INTO Output-Message - END-STRING - SET 88-Switch-Is-Bad TO TRUE - END-EVALUATE - . - - 039-Done. - EXIT. - / - 040-Process-Yes-No-Value SECTION. - ***************************************************************** - ** Process a switch value of YES or NO ** - ***************************************************************** - - 042-Process. - EVALUATE SV-1 - WHEN 'Y' - MOVE 'YES' TO Switch-Value - WHEN 'N' - MOVE 'NO' To Switch-Value - WHEN OTHER - MOVE SPACES TO Output-Message - STRING '*ERROR: "' TRIM(Switch-Value) - '" is not a valid value for the "' - TRIM(Switch-Keyword) '" switch' - DELIMITED SPACES - INTO Output-Message - END-STRING - SET 88-Switch-Is-Bad TO TRUE - END-EVALUATE - . - - 049-Done. - EXIT. - / - 050-Process-Yes-No-All SECTION. - ***************************************************************** - ** Process a switch value of YES, NO or ALL ** - ***************************************************************** - - 052-Process. - IF SV-1 = 'A' - MOVE 'ALL' TO Switch-Value - ELSE - PERFORM 040-Process-Yes-No-Value - END-IF - . - - 059-Done. - EXIT. - / - 060-Process-Yes-No-Auto SECTION. - ***************************************************************** - ** Process a switch value of YES, NO or AUTO ** - ***************************************************************** - - 061-Init. - IF SV-1 = 'A' - PERFORM 070-Find-LINKAGE-SECTION - IF 88-Compile-As-Subpgm - MOVE 'Y' TO Switch-Value - ELSE - MOVE 'N' TO Switch-Value - END-IF - ELSE - PERFORM 040-Process-Yes-No-Value - END-IF - . - / - 070-Find-LINKAGE-SECTION SECTION. - ***************************************************************** - ** Determine if the program being compiled is a MAIN program ** - ***************************************************************** - - 071-Init. - OPEN INPUT Source-Code - SET 88-Compile-As-Mainpgm TO TRUE - SET 88-More-To-1st-Prog TO TRUE - PERFORM UNTIL 88-1st-Prog-Complete - READ Source-Code AT END - CLOSE Source-Code - EXIT SECTION - END-READ - CALL 'CHECKSOURCE' USING Source-Code-Record - F-Source-Record-Type - END-CALL - IF 88-Source-Rec-Ident - SET 88-1st-Prog-Complete TO TRUE - END-IF - END-PERFORM - . - - 072-Process-Source. - SET 88-Source-Rec-IgnoCOB-COLOR-RED TO TRUE - PERFORM UNTIL 88-Source-Rec-Linkage - OR 88-Source-Rec-Ident - READ Source-Code AT END - CLOSE Source-Code - EXIT SECTION - END-READ - CALL 'CHECKSOURCE' USING Source-Code-Record - F-Source-Record-Type - END-CALL - END-PERFORM - CLOSE Source-Code - IF 88-Source-Rec-Linkage - SET 88-Compile-As-Subpgm TO TRUE - END-IF - . - - 079-Done. - EXIT. - / - 100-Initialization SECTION. - ***************************************************************** - ** Perform all program-wide initialization operations ** - ***************************************************************** - - -GC0909 101-Determine-OS-Type. -GC0909 CALL 'GETOSTYPE' -GC0909 END-CALL -GC0909 MOVE RETURN-CODE TO OS-Type -GC0909 EVALUATE TRUE -GC0909 WHEN OS-Unknown -GC0909 MOVE '\' TO Dir-Char -GC0909 MOVE 'Unknown' TO OS-Type-Literal -GC0310 MOVE COB-SCR-F11 TO CK-S-F1 -GC0310 MOVE COB-SCR-F12 TO CK-S-F2 -GC0310 MOVE COB-SCR-F13 TO CK-S-F3 -GC0310 MOVE COB-SCR-F14 TO CK-S-F4 -GC0310 MOVE COB-SCR-F15 TO CK-S-F5 -GC0310 MOVE COB-SCR-F16 TO CK-S-F6 -GC0310 MOVE COB-SCR-F17 TO CK-S-F7 -GC0909 WHEN OS-Windows -GC0909 MOVE '\' TO Dir-Char -GC0909 MOVE 'Windows' TO OS-Type-Literal -GC0310 MOVE COB-SCR-F13 TO CK-S-F1 -GC0310 MOVE COB-SCR-F14 TO CK-S-F2 -GC0310 MOVE COB-SCR-F15 TO CK-S-F3 -GC0310 MOVE COB-SCR-F16 TO CK-S-F4 -GC0310 MOVE COB-SCR-F17 TO CK-S-F5 -GC0310 MOVE COB-SCR-F18 TO CK-S-F6 -GC0310 MOVE COB-SCR-F19 TO CK-S-F7 -GC0909 WHEN OS-Cygwin -GC0909 MOVE '/' TO Dir-Char -GC0410 MOVE 'Cygwin' TO OS-Type-Literal -GC0310 MOVE COB-SCR-F11 TO CK-S-F1 -GC0310 MOVE COB-SCR-F12 TO CK-S-F2 -GC0310 MOVE COB-SCR-F13 TO CK-S-F3 -GC0310 MOVE COB-SCR-F14 TO CK-S-F4 -GC0310 MOVE COB-SCR-F15 TO CK-S-F5 -GC0310 MOVE COB-SCR-F16 TO CK-S-F6 -GC0310 MOVE COB-SCR-F17 TO CK-S-F7 -GC0909 WHEN OS-UNIX -GC0909 MOVE '/' TO Dir-Char -GC0410 MOVE 'UNIX ' TO OS-Type-Literal -GC0310 MOVE COB-SCR-F11 TO CK-S-F1 -GC0310 MOVE COB-SCR-F12 TO CK-S-F2 -GC0310 MOVE COB-SCR-F13 TO CK-S-F3 -GC0310 MOVE COB-SCR-F14 TO CK-S-F4 -GC0310 MOVE COB-SCR-F15 TO CK-S-F5 -GC0310 MOVE COB-SCR-F16 TO CK-S-F6 -GC0310 MOVE COB-SCR-F17 TO CK-S-F7 -GC0909 END-EVALUATE -GC0909 . - - 102-Set-Environment-Vars. - SET ENVIRONMENT 'COB_SCREEN_EXCEPTIONS' TO 'Y' - SET ENVIRONMENT 'COB_SCREEN_ESC' TO 'Y' - . - - 103-Generate-Cobc-Output-Fn. - ACCEPT Env-TEMP - FROM ENVIRONMENT "TEMP" - END-ACCEPT - MOVE SPACES TO Cobc-Output-File - STRING TRIM(Env-TEMP,TRAILING) -GC0909 Dir-Char -GC0909 'OC-Messages.TXT' - DELIMITED SIZE - INTO Cobc-Output-File - END-STRING - . - - 104-Generate-Banner-Line-Info. - MOVE WHEN-COMPILED (1:12) TO OC-Compiled - INSPECT OC-Compiled - REPLACING ALL '/' BY ':' - AFTER INITIAL SPACE - . - - 105-Establish-Switch-Settings. - ACCEPT Command-Line-Args - FROM COMMAND-LINE - END-ACCEPT - MOVE TRIM(Command-Line-Args, Leading) - TO Command-Line-Args - MOVE 0 TO Tally -GC0410 INSPECT Command-Line-Args TALLYING Tally FOR ALL '@' - IF Tally = 0 - MOVE Command-Line-Args TO File-Name - MOVE SPACES TO Command-Line-Args - ELSE -GC0410 UNSTRING Command-Line-Args DELIMITED BY '@' - INTO File-Name, Dummy - END-UNSTRING - INSPECT Command-Line-Args -GC0410 REPLACING FIRST '@' BY LOW-VALUES - UNSTRING Command-Line-Args - DELIMITED BY LOW-VALUES - INTO Dummy, Cmd - END-UNSTRING - MOVE SPACES TO Command-Line-Args -GC0410 STRING '@' Cmd DELIMITED SIZE - INTO Command-Line-Args - END-STRING - END-IF - IF File-Name = SPACES - DISPLAY - 'No program filename was specified' - END-DISPLAY - PERFORM 900-Terminate - END-IF - PERFORM 010-Parse-Args - IF S-SUBROUTINE = 'A' - MOVE 'S' TO Switch-Keyword - MOVE 'A' TO Switch-Value - PERFORM 070-Find-LINKAGE-SECTION - IF 88-Compile-As-Subpgm - MOVE 'Y' TO S-SUBROUTINE - ELSE - MOVE 'N' TO S-SUBROUTINE - END-IF - END-IF - INSPECT S-Yes-No-Switches REPLACING ALL 'Y' BY Selection-Char - INSPECT S-Yes-No-Switches REPLACING ALL 'N' BY ' ' - . - - 106-Determine-Folder-Path. - Move 256 TO I -GC0909 IF OS-Cygwin AND File-Name (2:1) = ':' -GC0909 MOVE '\' TO Dir-Char -GC0909 END-IF - PERFORM UNTIL I = 0 OR FN-Char (I) = Dir-Char - SUBTRACT 1 FROM I - END-PERFORM - IF I = 0 - MOVE SPACES TO Prog-Folder - MOVE File-Name TO Prog-File-Name - ELSE - MOVE '*' TO FN-Char (I) - UNSTRING File-Name DELIMITED BY '*' - INTO Prog-Folder - Prog-File-Name - END-UNSTRING - MOVE Dir-Char TO FN-Char (I) - END-IF - UNSTRING Prog-File-Name DELIMITED BY '.' - INTO Prog-Name, Prog-Extension - END-UNSTRING - IF Prog-Folder = SPACES - ACCEPT Prog-Folder - FROM ENVIRONMENT 'CD' - END-ACCEPT -GC0909 ELSE -GC0909 CALL "CBL_CHANGE_DIR" -GC0909 USING TRIM(Prog-Folder,TRAILING) -GC0909 END-CALL - END-IF -GC0909 IF OS-Cygwin AND File-Name (2:1) = ':' -GC0909 MOVE '/' TO Dir-Char -GC0909 END-IF - . - -GC0909 107-Other. -GC0909 MOVE ALL LD-Horiz-Line TO Horizontal-Line. -GC0410 MOVE CONCATENATE(' OCic for ', -GC0410 TRIM(OS-Type-Literal,Trailing), -GC0410 ' Copyright (C) 2009-2010, Gary L. Cutler,', -GC0410 ' GPL') -GC0410 TO Output-Message. -GC0909 . -GC0909 - 109-Done. - EXIT. - / - 200-Let-User-Set-Switches SECTION. - ***************************************************************** - ** Show the user the current switch settings and allow them to ** - ** be changed. ** - ***************************************************************** - - 201-Init. - SET 88-Switch-Changes TO TRUE - . - - 202-Show-And-Change-Switches. - PERFORM UNTIL 88-No-Switch-Changes - ACCEPT - Switches-Screen - END-ACCEPT - IF COB-CRT-STATUS > 0 - EVALUATE COB-CRT-STATUS - WHEN COB-SCR-F1 - IF S-DEBUG = SPACE - MOVE Selection-Char TO S-DEBUG - ELSE - MOVE ' ' TO S-DEBUG - END-IF - WHEN COB-SCR-F2 - IF S-DLL = SPACE - MOVE Selection-Char TO S-DLL - ELSE - MOVE ' ' TO S-DLL - END-IF - WHEN COB-SCR-F3 - IF S-SUBROUTINE = SPACE - MOVE Selection-Char TO S-SUBROUTINE - MOVE ' ' TO S-EXECUTE - ELSE - MOVE ' ' TO S-SUBROUTINE - END-IF - WHEN COB-SCR-F4 - IF S-EXECUTE = SPACE - AND S-SUBROUTINE = SPACE - MOVE Selection-Char TO S-EXECUTE - ELSE - MOVE ' ' TO S-EXECUTE - END-IF - WHEN COB-SCR-F5 - IF S-NOTRUNC = SPACE - MOVE Selection-Char TO S-NOTRUNC - ELSE - MOVE ' ' TO S-NOTRUNC - END-IF - WHEN COB-SCR-F6 - IF S-TRACE = SPACE - MOVE Selection-Char TO S-TRACE - MOVE ' ' TO S-TRACEALL - ELSE - MOVE ' ' TO S-TRACE - END-IF - WHEN COB-SCR-F7 - IF S-TRACEALL = SPACE - MOVE Selection-Char TO S-TRACEALL - MOVE ' ' TO S-TRACE - ELSE - MOVE ' ' TO S-TRACEALL - END-IF -GC0410 WHEN COB-SCR-F8 -GC0410 IF S-SOURCE = SPACE -GC0410 MOVE Selection-Char TO S-SOURCE -GC0410 ELSE -GC0410 MOVE ' ' TO S-SOURCE -GC0410 END-IF -GC0410 WHEN COB-SCR-F9 -GC0410 IF S-XREF = SPACE -GC0410 MOVE Selection-Char TO S-XREF -GC0410 ELSE -GC0410 MOVE ' ' TO S-XREF -GC0410 END-IF - WHEN COB-SCR-ESC - PERFORM 900-Terminate -GC0310 WHEN CK-S-F1 - MOVE SPACES TO S-CfgS - MOVE Selection-Char TO S-Cfg-BS2000 -GC0310 WHEN CK-S-F2 - MOVE SPACES TO S-CfgS - MOVE Selection-Char TO S-Cfg-COBOL85 -GC0310 WHEN CK-S-F3 - MOVE SPACES TO S-CfgS - MOVE Selection-Char TO S-Cfg-COBOL2002 -GC0310 WHEN CK-S-F4 - MOVE SPACES TO S-CfgS - MOVE Selection-Char TO S-Cfg-DEFAULT -GC0310 WHEN CK-S-F5 - MOVE SPACES TO S-CfgS - MOVE Selection-Char TO S-Cfg-IBM -GC0310 WHEN CK-S-F6 - MOVE SPACES TO S-CfgS - MOVE Selection-Char TO S-Cfg-MF -GC0310 WHEN CK-S-F7 - MOVE SPACES TO S-CfgS - MOVE Selection-Char TO S-Cfg-MVS - WHEN OTHER - MOVE 'An unsupported key was pressed' - TO Output-Message - END-EVALUATE - ELSE - SET 88-No-Switch-Changes TO TRUE - END-IF - END-PERFORM - . - - 209-Done. - EXIT. - / - 210-Run-Compiler SECTION. - ***************************************************************** - ** Run the compiler using the switch settings we've prepared. ** - ***************************************************************** - - 211-Init. - MOVE SPACES TO Cmd - Cobc-Cmd - Output-Message - DISPLAY - Switches-Screen - END-DISPLAY - MOVE 1 TO I - EVALUATE TRUE - WHEN S-Cfg-BS2000 NOT = SPACES - MOVE 'bs2000' TO Config-File - WHEN S-Cfg-COBOL85 NOT = SPACES - MOVE 'cobol85' TO Config-File - WHEN S-Cfg-COBOL2002 NOT = SPACES - MOVE 'cobol2002' TO Config-File - WHEN S-Cfg-IBM NOT = SPACES - MOVE 'ibm' TO Config-File - WHEN S-Cfg-MF NOT = SPACES - MOVE 'mf' TO Config-File - WHEN S-Cfg-MVS NOT = SPACES - MOVE 'mvs' TO Config-File - WHEN OTHER - MOVE 'default' TO Config-File - END-EVALUATE - . - - 212-Build-Compile-Command. -GC0909 MOVE SPACES TO Cobc-Cmd -GC0909 STRING 'cobc -std=' -GC0909 TRIM(Config-File,TRAILING) -GC0909 ' ' -GC0909 INTO Cobc-Cmd -GC0909 WITH POINTER I -GC0909 END-STRING - IF S-SUBROUTINE NOT = ' ' - STRING '-m ' - DELIMITED SIZE INTO Cobc-Cmd - WITH POINTER I - END-STRING - ELSE - STRING '-x ' - DELIMITED SIZE INTO Cobc-Cmd - WITH POINTER I - END-STRING - END-IF - IF S-DEBUG NOT = ' ' - STRING '-fdebugging-line ' - DELIMITED SIZE INTO Cobc-Cmd - WITH POINTER I - END-STRING - END-IF - IF S-NOTRUNC NOT = ' ' - STRING '-fnotrunc ' - DELIMITED SIZE INTO Cobc-Cmd - WITH POINTER I - END-STRING - END-IF - IF S-TRACEALL NOT = ' ' -GC0809 STRING '-ftraceall ' - DELIMITED SIZE INTO Cobc-Cmd - WITH POINTER I - END-STRING - END-IF - IF S-TRACE NOT = ' ' - STRING '-ftrace ' - DELIMITED SIZE INTO Cobc-Cmd - WITH POINTER I - END-STRING - END-IF - -GC0709 IF S-EXTRA > SPACES -GC0709 STRING ' ' -GC0709 TRIM(S-Extra,TRAILING) -GC0709 ' ' -GC0709 DELIMITED SIZE INTO Cobc-Cmd -GC0709 WITH POINTER I -GC0709 END-STRING -GC0709 END-IF -GC0909 STRING TRIM(Prog-File-Name,TRAILING) -GC0909 DELIMITED SIZE INTO Cobc-Cmd -GC0909 WITH POINTER I -GC0909 END-STRING - . - - 213-Run-Compiler. -GC0410 MOVE ' Compiling...' TO Output-Message -GC0410 DISPLAY -GC0410 Switches-Screen -GC0410 END-DISPLAY -GC0609 SET 88-Output-File-Avail TO TRUE - MOVE SPACES TO Cmd - STRING TRIM(Cobc-Cmd,TRAILING) - ' 2>' - TRIM(Cobc-Output-File,TRAILING) - DELIMITED SIZE - INTO Cmd - END-STRING - CALL 'SYSTEM' - USING TRIM(Cmd,TRAILING) - END-CALL -GC0909 IF RETURN-CODE = 0 -GC0909 SET 88-Compile-OK TO TRUE -GC0909 ELSE -GC0909 SET 88-Compile-Failed TO TRUE -GC0909 END-IF -GC0909 IF 88-Compile-OK -GC0909 OPEN INPUT Cobc-Output -GC0909 READ Cobc-Output -GC0909 AT END -GC0909 CONTINUE -GC0909 NOT AT END -GC0909 SET 88-Compile-OK-Warn TO TRUE -GC0909 END-READ -GC0909 CLOSE Cobc-Output -GC0909 END-IF -GC0909 MOVE SPACES TO Output-Message - IF 88-Compile-OK -GC0909 MOVE ' Compilation Was Successful' TO Output-Message -GC0909 DISPLAY -GC0909 Switches-Screen -GC0909 END-DISPLAY -GC0909 CALL 'C$SLEEP' -GC0909 USING 2 -GC0909 END-CALL -GC0909 MOVE SPACES TO Output-Message -GC0609 SET 88-Complete TO TRUE - ELSE -GC0909 DISPLAY -GC0909 Blank-Screen -GC0909 END-DISPLAY -GC0909 IF 88-Compile-OK-Warn -GC0909 DISPLAY ' Compilation was successful, but ' & -GC0909 'warnings were generated:' -SCROLL* AT LINE 24 COLUMN 1 -SCROLL* WITH SCROLL UP 1 LINE -GC0909 END-DISPLAY -GC0909 ELSE -GC0909 DISPLAY 'Compilation Failed:' -SCROLL* AT LINE 24 COLUMN 1 -SCROLL* WITH SCROLL UP 1 LINE -GC0909 END-DISPLAY -GC0909 END-IF -GC0609 SET 88-Compile-Failed TO TRUE -GC0609 SET 88-Complete TO TRUE -GC0909 DISPLAY ' ' -SCROLL* AT LINE 24 COLUMN 1 -SCROLL* WITH SCROLL UP 1 LINE -GC0909 END-DISPLAY -GC0909 OPEN INPUT Cobc-Output -GC0909 PERFORM FOREVER -GC0909 READ Cobc-Output AT END -GC0909 EXIT PERFORM -GC0909 END-READ -GC0909 DISPLAY TRIM(Cobc-Output-Rec,TRAILING) -SCROLL* AT LINE 24 COLUMN 1 -SCROLL* WITH SCROLL UP 1 LINE -GC0909 END-DISPLAY -GC0909 END-PERFORM -GC0909 CLOSE Cobc-Output -GC0909 DISPLAY ' ' -SCROLL* AT LINE 24 COLUMN 1 -SCROLL* WITH SCROLL UP 2 LINES -GC0909 END-DISPLAY -GC0909 DISPLAY 'Press ENTER to close:' -SCROLL* AT LINE 24 COLUMN 1 -SCROLL* WITH SCROLL UP 1 LINE -GC0909 END-DISPLAY -GC0909 ACCEPT Dummy -GC0909 FROM CONSOLE -GC0909 END-ACCEPT -GC0909 DISPLAY -GC0909 Blank-Screen -GC0909 END-DISPLAY - END-IF - . - - 219-Done. - IF 88-Compile-Failed - PERFORM 900-Terminate - END-IF - . - / -GC0410 220-Make-Listing SECTION. -GC0410***************************************************************** -GC0410** Generate a source and/or xref listing using XREF ** -GC0410***************************************************************** -GC0410 -GC0410 221-Init. -GC0410 MOVE ' Generating cross-reference listing...' -GC0410 TO Output-Message -GC0410 DISPLAY -GC0410 Switches-Screen -GC0410 END-DISPLAY -GC0410 CALL "CBL_DELETE_FILE" -GC0410 USING CONCATENATE(TRIM(Prog-Name,Trailing),".lst") -GC0410 END-CALL -GC0410 MOVE 0 TO RETURN-CODE -GC0410 . -GC0410 -GC0410 213-Run-OCXref. -GC0410 MOVE SPACES TO Output-Message -GC0410 CALL 'LISTING' -GC0410 USING S-SOURCE -GC0410 S-XREF -GC0410 File-Name -GC0410 ON EXCEPTION -GC0410 MOVE ' LISTING module is not available' -GC0410 TO Output-Message -GC0410 MOVE 1 TO RETURN-CODE -GC0410 END-CALL -GC0410 IF RETURN-CODE = 0 -GC0410 MOVE ' Listing generated' -GC0410 TO Output-Message -GC0410 IF OS-Windows OR OS-Cygwin -GC0410 MOVE SPACES TO Cmd -GC0410 STRING -GC0410 'cmd /c ' -GC0410 TRIM(Prog-Name,TRAILING) -GC0410 '.lst' -GC0410 DELIMITED SIZE INTO Cmd -GC0410 END-STRING -GC0410 CALL 'SYSTEM' -GC0410 USING TRIM(Cmd,TRAILING) -GC0410 END-CALL -GC0410 END-IF -GC0410 ELSE -GC0410 IF Output-Message = SPACES -GC0410 MOVE ' Listing generation failed' -GC0410 TO Output-Message -GC0410 END-IF -GC0410 END-IF -GC0410 DISPLAY -GC0410 Switches-Screen -GC0410 END-DISPLAY -GC0410 CALL 'C$SLEEP' -GC0410 USING 2 -GC0410 END-CALL -GC0410 . - / - 230-Run-Program SECTION. - ***************************************************************** - ** Run the compiled program ** - ***************************************************************** - - 232-Build-Command. -GC0909 MOVE SPACES TO Cmd -GC0909 MOVE 1 TO I - IF S-SUBROUTINE NOT = ' ' - OR S-DLL NOT = ' ' - STRING 'cobcrun ' DELIMITED SIZE - INTO Cmd - WITH POINTER I - END-STRING - END-IF - IF Prog-Folder NOT = SPACES -GC0909 IF OS-Cygwin AND Prog-Folder (2:1) = ':' -GC0909 STRING '/cygdrive/' -GC0909 INTO Cmd -GC0909 WITH POINTER I -GC0909 END-STRING -GC0909 STRING LOWER-CASE(Prog-Folder (1:1)) -GC0909 INTO Cmd -GC0909 WITH POINTER I -GC0909 END-STRING -GC0909 PERFORM VARYING J FROM 3 BY 1 -GC0909 UNTIL J > LENGTH(TRIM(Prog-Folder)) -GC0909 IF Prog-Folder (J:1) = '\' -GC0909 STRING '/' -GC0909 INTO Cmd -GC0909 WITH POINTER I -GC0909 END-STRING -GC0909 ELSE -GC0909 STRING Prog-Folder (J:1) -GC0909 INTO Cmd -GC0909 WITH POINTER I -GC0909 END-STRING -GC0909 END-IF -GC0909 END-PERFORM -GC0909 ELSE -GC0410 STRING '"' TRIM(Prog-Folder,TRAILING) -GC0909 INTO Cmd -GC0909 WITH POINTER I -GC0909 END-STRING -GC0909 END-IF -GC0909 STRING Dir-Char -GC0909 INTO Cmd -GC0909 WITH POINTER I -GC0909 END-STRING -GC0909 ELSE -GC0909 IF OS-Cygwin OR OS-UNIX -GC0909 STRING './' -GC0909 INTO Cmd -GC0909 WITH POINTER I -GC0909 END-STRING -GC0909 END-IF - END-IF -GC0909 STRING TRIM(Prog-Name,TRAILING) -GC0909 INTO Cmd -GC0909 WITH POINTER I -GC0909 END-STRING -GC0909 IF S-SUBROUTINE = ' ' -GC0909 AND S-DLL NOT = ' ' -GC0909 STRING '.exe' DELIMITED SIZE - INTO Cmd - WITH POINTER I - END-STRING - END-IF - IF S-ARGS NOT = SPACES -GC0809 STRING ' ' TRIM(S-ARGS,TRAILING) - INTO Cmd - WITH POINTER I - END-STRING - END-IF - IF OS-Unknown OR OS-Windows -GC0410 STRING '"&&pause' - INTO Cmd - WITH POINTER I - END-STRING - ELSE - STRING ';echo "Press ENTER to close...";read' - INTO Cmd - WITH POINTER I - END-STRING - END-IF - . - - 233-Run-Program. -GC0909 DISPLAY -GC0909 Blank-Screen -GC0909 END-DISPLAY - - CALL 'SYSTEM' - USING TRIM(Cmd,TRAILING) - END-CALL - PERFORM 900-Terminate - . - - 239-Done. - EXIT. - / - 900-Terminate SECTION. - ***************************************************************** - ** Display a message and halt the program ** - ***************************************************************** - - 901-Display-Message. -GC0909 IF Output-Message > SPACES -GC0909 DISPLAY -GC0909 Switches-Screen -GC0909 END-DISPLAY -GC0909 CALL 'C$SLEEP' -GC0909 USING 2 -GC0909 END-CALL -GC0909 END-IF - DISPLAY - Blank-Screen - END-DISPLAY - . - - 909-Done. - GOBACK - . - - END PROGRAM OCic. - - IDENTIFICATION DIVISION. - PROGRAM-ID. GETOSTYPE. - ***************************************************************** - ** This subprogram determine the OS type the program is run- ** - ** ning under, passing that result back in RETURN-CODE as fol- ** - ** lows: ** - ** ** - ** 0: Cannot be determined ** - ** 1: Native Windows or Windows/MinGW ** - ** 2: Cygwin ** - ** 3: UNIX/Linux/MacOS ** - ***************************************************************** - ** DATE CHANGE DESCRIPTION ** - ** ====== ==================================================== ** - ** GC0909 Initial coding. ** - ***************************************************************** - ENVIRONMENT DIVISION. - CONFIGURATION SECTION. - REPOSITORY. - FUNCTION ALL INTRINSIC. - DATA DIVISION. - WORKING-STORAGE SECTION. - 01 Env-Path PIC X(1024). - 01 Tally USAGE BINARY-LONG. - PROCEDURE DIVISION. - 000-Main SECTION. - 010-Get-TEMP-Var. - MOVE SPACES TO Env-Path - ACCEPT Env-Path - FROM ENVIRONMENT "PATH" - ON EXCEPTION - MOVE 0 TO RETURN-CODE - GOBACK - END-ACCEPT - IF Env-Path = SPACES - MOVE 0 TO RETURN-CODE - ELSE - MOVE 0 TO Tally - INSPECT Env-Path - TALLYING Tally FOR ALL ";" - IF Tally = 0 *> Must be some form of UNIX - MOVE 0 TO Tally - INSPECT Env-Path - TALLYING TALLY FOR ALL "/cygdrive/" - IF Tally = 0 *> UNIX/MacOS - MOVE 3 TO RETURN-CODE - ELSE *> Cygwin - MOVE 2 TO RETURN-CODE - END-IF - ELSE *> Assume Windows[/MinGW] - MOVE 1 TO RETURN-CODE - END-IF - END-IF - GOBACK - . - END PROGRAM GETOSTYPE. - - IDENTIFICATION DIVISION. - PROGRAM-ID. CHECKSOURCE. - ***************************************************************** - ** This subprogram will scan a line of source code it is given ** - ** looking for "LINKAGE SECTION" or "IDENTIFICATION DIVISION". ** - ** ** - ** ****NOTE**** ****NOTE**** ****NOTE**** ****NOTE*** ** - ** ** - ** These two strings must be found IN THEIR ENTIRETY within ** - ** the 1st 80 columns of program source records, and cannot ** - ** follow either a "*>" sequence OR a "*" in col 7. ** - ***************************************************************** - ** DATE CHANGE DESCRIPTION ** - ** ====== ==================================================== ** - ** GC0809 Initial coding. ** - ***************************************************************** - ENVIRONMENT DIVISION. - CONFIGURATION SECTION. - REPOSITORY. - FUNCTION ALL INTRINSIC. - DATA DIVISION. - WORKING-STORAGE SECTION. - 01 Compressed-Src. - 05 CS-Char OCCURS 80 TIMES PIC X(1). - - 01 Flags. - 05 F-Found-SPACE PIC X(1). - 88 88-Skipping-SPACE VALUE 'Y'. - 88 88-Not-Skipping-SPACE VALUE 'N'. - - 01 I USAGE BINARY-CHAR. - - 01 J USAGE BINARY-CHAR. - LINKAGE SECTION. - 01 Argument-1. - 02 A1-Char OCCURS 80 TIMES PIC X(1). - - 01 Argument-2 PIC X(1). - 88 88-A2-LINKAGE-SECTION VALUE 'L'. - 88 88-A2-IDENTIFICATION-DIVISION VALUE 'I'. - 88 88-A2-Nothing-Special VALUE ' '. - PROCEDURE DIVISION USING Argument-1, Argument-2. - 000-Main SECTION. - - 010-Initialize. - SET 88-A2-Nothing-Special TO TRUE - IF A1-Char (7) = '*' - GOBACK - END-IF - . - - 020-Compress-Multiple-SPACES. - SET 88-Not-Skipping-SPACE TO TRUE - MOVE 0 TO J - MOVE SPACES TO Compressed-Src - PERFORM VARYING I FROM 1 BY 1 - UNTIL I > 80 - IF A1-Char (I) = SPACE - IF 88-Not-Skipping-SPACE - ADD 1 TO J - MOVE UPPER-CASE(A1-Char (I)) TO CS-Char (J) - SET 88-Skipping-SPACE TO TRUE - END-IF - ELSE - SET 88-Not-Skipping-SPACE TO TRUE - ADD 1 TO J - MOVE A1-Char (I) TO CS-Char (J) - END-IF - END-PERFORM - . - - 030-Scan-Compressed-Src. - PERFORM VARYING I FROM 1 BY 1 - UNTIL I > 66 - EVALUATE TRUE - WHEN CS-Char (I) = '*' - IF Compressed-Src (I : 2) = '*>' - GOBACK - END-IF - WHEN (CS-Char (I) = 'L') AND (I < 66) - IF Compressed-Src (I : 15) = 'LINKAGE SECTION' - SET 88-A2-LINKAGE-SECTION TO TRUE - GOBACK - END-IF - WHEN (CS-Char (I) = 'I') AND (I < 58) - IF Compressed-Src (I : 23) = 'IDENTIFICATION ' & - 'DIVISION' - SET 88-A2-IDENTIFICATION-DIVISION TO TRUE - GOBACK - END-IF - END-EVALUATE - END-PERFORM - . - - 099-Never-Found-Either-One. - GOBACK - . - END PROGRAM CHECKSOURCE. - - IDENTIFICATION DIVISION. - PROGRAM-ID. LISTING. - ***************************************************************** - ** This subprogram generates a cross-reference listing of an ** - ** OpenCOBOL program. ** - ** ** - ** Linkage: CALL "LISTING" USING ** - ** ** - ** ** - ** ** - ** Where: ** - ** is a PIC X(1) flag indicating ** - ** whether or not a source listing ** - ** should be produced (space=NO, ** - ** non-space=yes) ** - ** is a PIC X(1) flag indicating ** - ** whether or not an xref listing ** - ** should be produced (space=NO, ** - ** non-space=yes) ** - ** is the [path]filename of the ** - ** program being listed and/or ** - ** xreffed in a PIC X(256) form. ** - ***************************************************************** - ** ** - ** AUTHOR: GARY L. CUTLER ** - ** CutlerGL@gmail.com ** - ** Copyright (C) 2010, Gary L. Cutler, GPL ** - ** ** - ** DATE-WRITTEN: April 1, 2010 ** - ** ** - ***************************************************************** - ** DATE CHANGE DESCRIPTION ** - ** ====== ==================================================== ** - ** GC0410 Initial coding ** - ** GC0710 Handle duplicate data names (i.e. "CORRESPONDING" or ** - ** qualified items) better; ignore "END PROGRAM" recs ** - ** so program name doesn't appear in listing. ** - ***************************************************************** - ENVIRONMENT DIVISION. - CONFIGURATION SECTION. - REPOSITORY. - FUNCTION ALL INTRINSIC. - INPUT-OUTPUT SECTION. - FILE-CONTROL. - SELECT Expand-Code ASSIGN TO Expanded-Src-Filename - ORGANIZATION IS LINE SEQUENTIAL. - SELECT Report-File ASSIGN TO Report-Filename - ORGANIZATION IS LINE SEQUENTIAL. - SELECT Sort-File ASSIGN TO DISK. - SELECT Source-Code ASSIGN TO Src-Filename - ORGANIZATION IS LINE SEQUENTIAL. - DATA DIVISION. - FILE SECTION. - FD Expand-Code. - 01 Expand-Code-Rec. - 05 ECR-1 PIC X. - 05 ECR-2-256 PIC X(256). - 01 Expand-Code-Rec-Alt. - 05 ECR-1-128 PIC X(128). - 05 ECR-129-256 PIC X(128). - - FD Report-File. - 01 Report-Rec PIC X(135). - - SD Sort-File. - 01 Sort-Rec. - 05 SR-Prog-ID PIC X(15). - 05 SR-Token-UC PIC X(32). - 05 SR-Token PIC X(32). - 05 SR-Section PIC X(15). - 05 SR-Line-No-Def PIC 9(6). - 05 SR-Reference. - 10 SR-Line-No-Ref PIC 9(6). - 10 SR-Ref-Flag PIC X(1). - - FD Source-Code. - 01 Source-Code-Rec. -GC0410 05 SCR-1-128. -GC0410 10 FILLER PIC X(6). -GC0410 10 SCR-7 PIC X(1). -GC0410 10 FILLER PIC X(121). - 05 SCR-129-256 PIC X(128). - - WORKING-STORAGE SECTION. - 78 Line-Nos-Per-Rec VALUE 8. - - 01 Cmd PIC X(256). - - 01 Delim PIC X(2). - - 01 Detail-Line-S. - 05 DLS-Line-No PIC ZZZZZ9. - 05 FILLER PIC X(1). - 05 DLS-Statement PIC X(128). - - 01 Detail-Line-X. - 05 DLX-Prog-ID PIC X(15). - 05 FILLER PIC X(1). - 05 DLX-Token PIC X(32). - 05 FILLER PIC X(1). - 05 DLX-Line-No-Def PIC ZZZZZ9. - 05 FILLER PIC X(1). - 05 DLX-Section PIC X(15). - 05 FILLER PIC X(1). - 05 DLX-Reference OCCURS Line-Nos-Per-Rec TIMES. - 10 DLX-Line-No-Ref PIC ZZZZZ9. - 10 DLX-Ref-Flag PIC X(1). - 10 FILLER PIC X(1). - - 01 Dummy PIC X(1). - - 01 Env-TEMP PIC X(256). - - 01 Expanded-Src-Filename PIC X(256). - - 01 Filename PIC X(256). - - 01 Flags. -GC0710 05 F-Duplicate PIC X(1). - 05 F-First-Record PIC X(1). - 05 F-In-Which-Pgm PIC X(1). - 88 In-Main-Module VALUE 'M'. - 88 In-Copybook VALUE 'C'. - 05 F-Last-Token-Ended-Sent PIC X(1). - 05 F-Processing-PICTURE PIC X(1). - 05 F-Token-Ended-Sentence PIC X(1). -GC0710 05 F-Verb-Has-Been-Found PIC X(1). - - 01 Group-Indicators. - 05 GI-Prog-ID PIC X(15). - 05 GI-Token PIC X(32). - - 01 Heading-1S. - 05 FILLER PIC X(125) VALUE - "OpenCOBOL 1.1 06FEB2009 Source Listing - " & - "OCic Copyright (C) 2009-2010, Gary L. Cutler, GPL". - 05 H1S-Date PIC 9999/99/99. - - 01 Heading-1X. - 05 FILLER PIC X(125) VALUE - "OpenCOBOL 1.1 06FEB2009 Cross-Reference Listing - " & - "OCic Copyright (C) 2009-2010, Gary L. Cutler, GPL". - 05 H1X-Date PIC 9999/99/99. - - 01 Heading-2 PIC X(135). - - 01 Heading-4S PIC X(16) VALUE - "Line Statement". - - 01 Heading-4X PIC X(96) VALUE - "PROGRAM-ID Identifier/Register/Function Defn Wher - - "e Defined References (* = Updated)". - - 01 Heading-5S PIC X(135) VALUE - "====== ===================================================== - - "============================================================ - - "===============". - - 01 Heading-5X PIC X(135) VALUE - "=============== ================================ ====== ==== - - "=========== ================================================ - - "===============". - - 01 Held-Reference PIC X(100). - - 01 I USAGE BINARY-LONG. - - 01 J USAGE BINARY-LONG. - - 01 Lines-Left USAGE BINARY-LONG. - - 01 Lines-Per-Page USAGE BINARY-LONG. - - 01 Lines-Per-Page-ENV PIC X(256). - - 01 Num-UserNames USAGE BINARY-LONG. - - 01 PIC-X10 PIC X(10). - - 01 PIC-X32 PIC X(32). - - 01 PIC-X256 PIC X(256). - - 01 Program-Path PIC X(256). - - 01 Report-Filename PIC X(256). - - 01 Reserved-Words. - 05 FILLER PIC X(33) VALUE "IABS". - 05 FILLER PIC X(33) VALUE "VACCEPT". - 05 FILLER PIC X(33) VALUE " ACCESS". - 05 FILLER PIC X(33) VALUE "IACOS". - 05 FILLER PIC X(33) VALUE " ACTIVE-CLASS". - 05 FILLER PIC X(33) VALUE "VADD". - 05 FILLER PIC X(33) VALUE " ADDRESS". - 05 FILLER PIC X(33) VALUE " ADVANCING". - 05 FILLER PIC X(33) VALUE "KAFTER". - 05 FILLER PIC X(33) VALUE " ALIGNED". - 05 FILLER PIC X(33) VALUE " ALL". - 05 FILLER PIC X(33) VALUE "VALLOCATE". - 05 FILLER PIC X(33) VALUE " ALPHABET". - 05 FILLER PIC X(33) VALUE " ALPHABETIC". - 05 FILLER PIC X(33) VALUE " ALPHABETIC-LOWER". - 05 FILLER PIC X(33) VALUE " ALPHABETIC-UPPER". - 05 FILLER PIC X(33) VALUE " ALPHANUMERIC". - 05 FILLER PIC X(33) VALUE " ALPHANUMERIC-EDITED". - 05 FILLER PIC X(33) VALUE " ALSO". - 05 FILLER PIC X(33) VALUE "VALTER". - 05 FILLER PIC X(33) VALUE " ALTERNATE". - 05 FILLER PIC X(33) VALUE " AND". - 05 FILLER PIC X(33) VALUE "IANNUITY". - 05 FILLER PIC X(33) VALUE " ANY". - 05 FILLER PIC X(33) VALUE " ANYCASE". - 05 FILLER PIC X(33) VALUE " ARE". - 05 FILLER PIC X(33) VALUE " AREA". - 05 FILLER PIC X(33) VALUE " AREAS". - 05 FILLER PIC X(33) VALUE " ARGUMENT-NUMBER". - 05 FILLER PIC X(33) VALUE " ARGUMENT-VALUE". - 05 FILLER PIC X(33) VALUE " AS". - 05 FILLER PIC X(33) VALUE " ASCENDING". - 05 FILLER PIC X(33) VALUE "IASIN". - 05 FILLER PIC X(33) VALUE " ASSIGN". - 05 FILLER PIC X(33) VALUE " AT". - 05 FILLER PIC X(33) VALUE "IATAN". - 05 FILLER PIC X(33) VALUE " AUTHOR". - 05 FILLER PIC X(33) VALUE " AUTO". - 05 FILLER PIC X(33) VALUE " AUTO-SKIP". - 05 FILLER PIC X(33) VALUE " AUTOMATIC". - 05 FILLER PIC X(33) VALUE " AUTOTERMINATE". - 05 FILLER PIC X(33) VALUE " BACKGROUND-COLOR". - 05 FILLER PIC X(33) VALUE " BASED". - 05 FILLER PIC X(33) VALUE " BEEP". - 05 FILLER PIC X(33) VALUE " BEFORE". - 05 FILLER PIC X(33) VALUE " BELL". - 05 FILLER PIC X(33) VALUE " BINARY". - 05 FILLER PIC X(33) VALUE " BINARY-C-LONG". - 05 FILLER PIC X(33) VALUE " BINARY-CHAR". - 05 FILLER PIC X(33) VALUE " BINARY-DOUBLE". - 05 FILLER PIC X(33) VALUE " BINARY-LONG". - 05 FILLER PIC X(33) VALUE " BINARY-SHORT". - 05 FILLER PIC X(33) VALUE " BIT". - 05 FILLER PIC X(33) VALUE " BLANK". - 05 FILLER PIC X(33) VALUE " BLINK". - 05 FILLER PIC X(33) VALUE " BLOCK". - 05 FILLER PIC X(33) VALUE " BOOLEAN". - 05 FILLER PIC X(33) VALUE " BOTTOM". - 05 FILLER PIC X(33) VALUE "YBY". - 05 FILLER PIC X(33) VALUE "IBYTE-LENGTH". - 05 FILLER PIC X(33) VALUE "MC01". - 05 FILLER PIC X(33) VALUE "MC02". - 05 FILLER PIC X(33) VALUE "MC03". - 05 FILLER PIC X(33) VALUE "MC04". - 05 FILLER PIC X(33) VALUE "MC05". - 05 FILLER PIC X(33) VALUE "MC06". - 05 FILLER PIC X(33) VALUE "MC07". - 05 FILLER PIC X(33) VALUE "MC08". - 05 FILLER PIC X(33) VALUE "MC09". - 05 FILLER PIC X(33) VALUE "MC10". - 05 FILLER PIC X(33) VALUE "MC11". - 05 FILLER PIC X(33) VALUE "MC12". - 05 FILLER PIC X(33) VALUE "VCALL". - 05 FILLER PIC X(33) VALUE "VCANCEL". - 05 FILLER PIC X(33) VALUE " CF". - 05 FILLER PIC X(33) VALUE " CH". - 05 FILLER PIC X(33) VALUE " CHAINING". - 05 FILLER PIC X(33) VALUE "ICHAR". - 05 FILLER PIC X(33) VALUE " CHARACTER". - 05 FILLER PIC X(33) VALUE " CHARACTERS". - 05 FILLER PIC X(33) VALUE " CLASS". - 05 FILLER PIC X(33) VALUE " CLASS-ID". - 05 FILLER PIC X(33) VALUE "VCLOSE". - 05 FILLER PIC X(33) VALUE "ICOB-CRT-STATUS". - 05 FILLER PIC X(33) VALUE " CODE". - 05 FILLER PIC X(33) VALUE " CODE-SET". - 05 FILLER PIC X(33) VALUE " COL". - 05 FILLER PIC X(33) VALUE " COLLATING". - 05 FILLER PIC X(33) VALUE " COLS". - 05 FILLER PIC X(33) VALUE " COLUMN". - 05 FILLER PIC X(33) VALUE " COLUMNS". - 05 FILLER PIC X(33) VALUE "ICOMBINED-DATETIME". - 05 FILLER PIC X(33) VALUE " COMMA". - 05 FILLER PIC X(33) VALUE " COMMAND-LINE". - 05 FILLER PIC X(33) VALUE "VCOMMIT". - 05 FILLER PIC X(33) VALUE " COMMON". - 05 FILLER PIC X(33) VALUE " COMP". - 05 FILLER PIC X(33) VALUE " COMP-1". - 05 FILLER PIC X(33) VALUE " COMP-2". - 05 FILLER PIC X(33) VALUE " COMP-3". - 05 FILLER PIC X(33) VALUE " COMP-4". - 05 FILLER PIC X(33) VALUE " COMP-5". - 05 FILLER PIC X(33) VALUE " COMP-X". - 05 FILLER PIC X(33) VALUE " COMPUTATIONAL". - 05 FILLER PIC X(33) VALUE " COMPUTATIONAL-1". - 05 FILLER PIC X(33) VALUE " COMPUTATIONAL-2". - 05 FILLER PIC X(33) VALUE " COMPUTATIONAL-3". - 05 FILLER PIC X(33) VALUE " COMPUTATIONAL-4". - 05 FILLER PIC X(33) VALUE " COMPUTATIONAL-5". - 05 FILLER PIC X(33) VALUE " COMPUTATIONAL-X". - 05 FILLER PIC X(33) VALUE "VCOMPUTE". - 05 FILLER PIC X(33) VALUE "ICONCATENATE". - 05 FILLER PIC X(33) VALUE " CONDITION". - 05 FILLER PIC X(33) VALUE "KCONFIGURATION". - 05 FILLER PIC X(33) VALUE "MCONSOLE". - 05 FILLER PIC X(33) VALUE " CONSTANT". - 05 FILLER PIC X(33) VALUE " CONTAINS". - 05 FILLER PIC X(33) VALUE " CONTENT". - 05 FILLER PIC X(33) VALUE "VCONTINUE". - 05 FILLER PIC X(33) VALUE " CONTROL". - 05 FILLER PIC X(33) VALUE " CONTROLS". - 05 FILLER PIC X(33) VALUE "KCONVERTING". - 05 FILLER PIC X(33) VALUE " COPY". - 05 FILLER PIC X(33) VALUE " CORR". - 05 FILLER PIC X(33) VALUE " CORRESPONDING". - 05 FILLER PIC X(33) VALUE "ICOS". - 05 FILLER PIC X(33) VALUE "KCOUNT". - 05 FILLER PIC X(33) VALUE " CRT". - 05 FILLER PIC X(33) VALUE " CURRENCY". - 05 FILLER PIC X(33) VALUE "ICURRENT-DATE". - 05 FILLER PIC X(33) VALUE " CURSOR". - 05 FILLER PIC X(33) VALUE " CYCLE". - 05 FILLER PIC X(33) VALUE "KDATA". - 05 FILLER PIC X(33) VALUE " DATA-POINTER". - 05 FILLER PIC X(33) VALUE " DATE". - 05 FILLER PIC X(33) VALUE " DATE-COMPILED". - 05 FILLER PIC X(33) VALUE " DATE-MODIFIED". - 05 FILLER PIC X(33) VALUE "IDATE-OF-INTEGER". - 05 FILLER PIC X(33) VALUE "IDATE-TO-YYYYMMDD". - 05 FILLER PIC X(33) VALUE " DATE-WRITTEN". - 05 FILLER PIC X(33) VALUE " DAY". - 05 FILLER PIC X(33) VALUE "IDAY-OF-INTEGER". - 05 FILLER PIC X(33) VALUE " DAY-OF-WEEK". - 05 FILLER PIC X(33) VALUE "IDAY-TO-YYYYDDD". - 05 FILLER PIC X(33) VALUE " DE". - 05 FILLER PIC X(33) VALUE " DEBUGGING". - 05 FILLER PIC X(33) VALUE " DECIMAL-POINT". - 05 FILLER PIC X(33) VALUE " DECLARATIVES". - 05 FILLER PIC X(33) VALUE " DEFAULT". - 05 FILLER PIC X(33) VALUE "VDELETE". - 05 FILLER PIC X(33) VALUE " DELIMITED". - 05 FILLER PIC X(33) VALUE "KDELIMITER". - 05 FILLER PIC X(33) VALUE " DEPENDING". - 05 FILLER PIC X(33) VALUE " DESCENDING". - 05 FILLER PIC X(33) VALUE " DESTINATION". - 05 FILLER PIC X(33) VALUE " DETAIL". - 05 FILLER PIC X(33) VALUE " DISABLE". - 05 FILLER PIC X(33) VALUE " DISK". - 05 FILLER PIC X(33) VALUE "VDISPLAY". - 05 FILLER PIC X(33) VALUE "VDIVIDE". - 05 FILLER PIC X(33) VALUE "KDIVISION". - 05 FILLER PIC X(33) VALUE "KDOWN". - 05 FILLER PIC X(33) VALUE " DUPLICATES". - 05 FILLER PIC X(33) VALUE " DYNAMIC". - 05 FILLER PIC X(33) VALUE "IE". - 05 FILLER PIC X(33) VALUE " EBCDIC". - 05 FILLER PIC X(33) VALUE " EC". - 05 FILLER PIC X(33) VALUE "VELSE". -GC0710 05 FILLER PIC X(33) VALUE "KEND". - 05 FILLER PIC X(33) VALUE " END-ACCEPT". - 05 FILLER PIC X(33) VALUE " END-ADD". - 05 FILLER PIC X(33) VALUE " END-CALL". - 05 FILLER PIC X(33) VALUE " END-COMPUTE". - 05 FILLER PIC X(33) VALUE " END-DELETE". - 05 FILLER PIC X(33) VALUE " END-DISPLAY". - 05 FILLER PIC X(33) VALUE " END-DIVIDE". - 05 FILLER PIC X(33) VALUE " END-EVALUATE". - 05 FILLER PIC X(33) VALUE " END-IF". - 05 FILLER PIC X(33) VALUE " END-MULTIPLY". - 05 FILLER PIC X(33) VALUE " END-OF-PAGE". - 05 FILLER PIC X(33) VALUE " END-PERFORM". - 05 FILLER PIC X(33) VALUE " END-READ". - 05 FILLER PIC X(33) VALUE " END-RETURN". - 05 FILLER PIC X(33) VALUE " END-REWRITE". - 05 FILLER PIC X(33) VALUE " END-SEARCH". - 05 FILLER PIC X(33) VALUE " END-START". - 05 FILLER PIC X(33) VALUE " END-STRING". - 05 FILLER PIC X(33) VALUE " END-SUBTRACT". - 05 FILLER PIC X(33) VALUE " END-UNSTRING". - 05 FILLER PIC X(33) VALUE " END-WRITE". - 05 FILLER PIC X(33) VALUE "VENTRY". - 05 FILLER PIC X(33) VALUE "KENVIRONMENT". - 05 FILLER PIC X(33) VALUE " ENVIRONMENT-NAME". - 05 FILLER PIC X(33) VALUE " ENVIRONMENT-VALUE". - 05 FILLER PIC X(33) VALUE " EO". - 05 FILLER PIC X(33) VALUE " EOL". - 05 FILLER PIC X(33) VALUE " EOP". - 05 FILLER PIC X(33) VALUE " EOS". - 05 FILLER PIC X(33) VALUE " EQUAL". - 05 FILLER PIC X(33) VALUE "KEQUALS". - 05 FILLER PIC X(33) VALUE " ERASE". - 05 FILLER PIC X(33) VALUE " ERROR". - 05 FILLER PIC X(33) VALUE " ESCAPE". - 05 FILLER PIC X(33) VALUE "VEVALUATE". - 05 FILLER PIC X(33) VALUE " EXCEPTION". - 05 FILLER PIC X(33) VALUE "IEXCEPTION-FILE". - 05 FILLER PIC X(33) VALUE "IEXCEPTION-LOCATION". - 05 FILLER PIC X(33) VALUE " EXCEPTION-OBJECT". - 05 FILLER PIC X(33) VALUE "IEXCEPTION-STATEMENT". - 05 FILLER PIC X(33) VALUE "IEXCEPTION-STATUS". - 05 FILLER PIC X(33) VALUE " EXCLUSIVE". - 05 FILLER PIC X(33) VALUE "VEXIT". - 05 FILLER PIC X(33) VALUE "IEXP". - 05 FILLER PIC X(33) VALUE "IEXP10". - 05 FILLER PIC X(33) VALUE " EXTEND". - 05 FILLER PIC X(33) VALUE " EXTERNAL". - 05 FILLER PIC X(33) VALUE "IFACTORIAL". - 05 FILLER PIC X(33) VALUE " FACTORY". - 05 FILLER PIC X(33) VALUE " FALSE". - 05 FILLER PIC X(33) VALUE "KFD". - 05 FILLER PIC X(33) VALUE "KFILE". - 05 FILLER PIC X(33) VALUE " FILE-CONTROL". - 05 FILLER PIC X(33) VALUE " FILE-ID". - 05 FILLER PIC X(33) VALUE " FILLER". - 05 FILLER PIC X(33) VALUE " FINAL". - 05 FILLER PIC X(33) VALUE " FIRST". - 05 FILLER PIC X(33) VALUE " FLOAT-BINARY-16". - 05 FILLER PIC X(33) VALUE " FLOAT-BINARY-34". - 05 FILLER PIC X(33) VALUE " FLOAT-BINARY-7". - 05 FILLER PIC X(33) VALUE " FLOAT-DECIMAL-16". - 05 FILLER PIC X(33) VALUE " FLOAT-DECIMAL-34". - 05 FILLER PIC X(33) VALUE " FLOAT-EXTENDED". - 05 FILLER PIC X(33) VALUE " FLOAT-LONG". - 05 FILLER PIC X(33) VALUE " FLOAT-SHORT". - 05 FILLER PIC X(33) VALUE " FOOTING". - 05 FILLER PIC X(33) VALUE " FOR". - 05 FILLER PIC X(33) VALUE " FOREGROUND-COLOR". - 05 FILLER PIC X(33) VALUE " FOREVER". - 05 FILLER PIC X(33) VALUE " FORMAT". - 05 FILLER PIC X(33) VALUE "MFORMFEED". - 05 FILLER PIC X(33) VALUE "IFRACTION-PART". - 05 FILLER PIC X(33) VALUE "VFREE". - 05 FILLER PIC X(33) VALUE " FROM". - 05 FILLER PIC X(33) VALUE " FULL". - 05 FILLER PIC X(33) VALUE " FUNCTION". - 05 FILLER PIC X(33) VALUE " FUNCTION-ID". - 05 FILLER PIC X(33) VALUE " FUNCTION-POINTER". - 05 FILLER PIC X(33) VALUE "VGENERATE". - 05 FILLER PIC X(33) VALUE " GET". - 05 FILLER PIC X(33) VALUE "KGIVING". - 05 FILLER PIC X(33) VALUE " GLOBAL". - 05 FILLER PIC X(33) VALUE "VGO". - 05 FILLER PIC X(33) VALUE "VGOBACK". - 05 FILLER PIC X(33) VALUE " GREATER". - 05 FILLER PIC X(33) VALUE " GROUP". - 05 FILLER PIC X(33) VALUE " GROUP-USAGE". - 05 FILLER PIC X(33) VALUE " HEADING". - 05 FILLER PIC X(33) VALUE " HIGH-VALUE". - 05 FILLER PIC X(33) VALUE " HIGH-VALUES". - 05 FILLER PIC X(33) VALUE " HIGHLIGHT". - 05 FILLER PIC X(33) VALUE " I-O". - 05 FILLER PIC X(33) VALUE " I-O-CONTROL". - 05 FILLER PIC X(33) VALUE "KID". - 05 FILLER PIC X(33) VALUE "KIDENTIFICATION". - 05 FILLER PIC X(33) VALUE "VIF". - 05 FILLER PIC X(33) VALUE " IGNORE". - 05 FILLER PIC X(33) VALUE " IGNORING". - 05 FILLER PIC X(33) VALUE " IN". - 05 FILLER PIC X(33) VALUE " INDEX". - 05 FILLER PIC X(33) VALUE "KINDEXED". - 05 FILLER PIC X(33) VALUE " INDICATE". - 05 FILLER PIC X(33) VALUE " INFINITY". - 05 FILLER PIC X(33) VALUE " INHERITS". - 05 FILLER PIC X(33) VALUE " INITIAL". - 05 FILLER PIC X(33) VALUE " INITIALISED". - 05 FILLER PIC X(33) VALUE "VINITIALIZE". - 05 FILLER PIC X(33) VALUE " INITIALIZED". - 05 FILLER PIC X(33) VALUE "VINITIATE". - 05 FILLER PIC X(33) VALUE " INPUT". - 05 FILLER PIC X(33) VALUE "KINPUT-OUTPUT". - 05 FILLER PIC X(33) VALUE "VINSPECT". - 05 FILLER PIC X(33) VALUE " INSTALLATION". - 05 FILLER PIC X(33) VALUE "IINTEGER". - 05 FILLER PIC X(33) VALUE "IINTEGER-OF-DATE". - 05 FILLER PIC X(33) VALUE "IINTEGER-OF-DAY". - 05 FILLER PIC X(33) VALUE "IINTEGER-PART". - 05 FILLER PIC X(33) VALUE " INTERFACE". - 05 FILLER PIC X(33) VALUE " INTERFACE-ID". - 05 FILLER PIC X(33) VALUE "KINTO". - 05 FILLER PIC X(33) VALUE " INTRINSIC". - 05 FILLER PIC X(33) VALUE " INVALID". - 05 FILLER PIC X(33) VALUE " INVOKE". - 05 FILLER PIC X(33) VALUE " IS". - 05 FILLER PIC X(33) VALUE " JUST". - 05 FILLER PIC X(33) VALUE " JUSTIFIED". - 05 FILLER PIC X(33) VALUE " KEY". - 05 FILLER PIC X(33) VALUE " LABEL". - 05 FILLER PIC X(33) VALUE " LAST". - 05 FILLER PIC X(33) VALUE " LEADING". - 05 FILLER PIC X(33) VALUE " LEFT". - 05 FILLER PIC X(33) VALUE " LEFT-JUSTIFY". - 05 FILLER PIC X(33) VALUE "ILENGTH". - 05 FILLER PIC X(33) VALUE " LESS". - 05 FILLER PIC X(33) VALUE " LIMIT". - 05 FILLER PIC X(33) VALUE " LIMITS". - 05 FILLER PIC X(33) VALUE " LINAGE". - 05 FILLER PIC X(33) VALUE "ILINAGE-COUNTER". - 05 FILLER PIC X(33) VALUE " LINE". - 05 FILLER PIC X(33) VALUE " LINE-COUNTER". - 05 FILLER PIC X(33) VALUE " LINES". - 05 FILLER PIC X(33) VALUE "KLINKAGE". - 05 FILLER PIC X(33) VALUE "KLOCAL-STORAGE". - 05 FILLER PIC X(33) VALUE " LOCALE". - 05 FILLER PIC X(33) VALUE "ILOCALE-DATE". - 05 FILLER PIC X(33) VALUE "ILOCALE-TIME". - 05 FILLER PIC X(33) VALUE "ILOCALE-TIME-FROM-SECONDS". - 05 FILLER PIC X(33) VALUE " LOCK". - 05 FILLER PIC X(33) VALUE "ILOG". - 05 FILLER PIC X(33) VALUE "ILOG10". - 05 FILLER PIC X(33) VALUE " LOW-VALUE". - 05 FILLER PIC X(33) VALUE " LOW-VALUES". - 05 FILLER PIC X(33) VALUE " LOWER". - 05 FILLER PIC X(33) VALUE "ILOWER-CASE". - 05 FILLER PIC X(33) VALUE " LOWLIGHT". - 05 FILLER PIC X(33) VALUE " MANUAL". - 05 FILLER PIC X(33) VALUE "IMAX". - 05 FILLER PIC X(33) VALUE "IMEAN". - 05 FILLER PIC X(33) VALUE "IMEDIAN". - 05 FILLER PIC X(33) VALUE " MEMORY". - 05 FILLER PIC X(33) VALUE "VMERGE". - 05 FILLER PIC X(33) VALUE " METHOD". - 05 FILLER PIC X(33) VALUE " METHOD-ID". - 05 FILLER PIC X(33) VALUE "IMIDRANGE". - 05 FILLER PIC X(33) VALUE "IMIN". - 05 FILLER PIC X(33) VALUE " MINUS". - 05 FILLER PIC X(33) VALUE "IMOD". - 05 FILLER PIC X(33) VALUE " MODE". - 05 FILLER PIC X(33) VALUE "VMOVE". - 05 FILLER PIC X(33) VALUE " MULTIPLE". - 05 FILLER PIC X(33) VALUE "VMULTIPLY". - 05 FILLER PIC X(33) VALUE " NATIONAL". - 05 FILLER PIC X(33) VALUE " NATIONAL-EDITED". - 05 FILLER PIC X(33) VALUE " NATIVE". - 05 FILLER PIC X(33) VALUE " NEGATIVE". - 05 FILLER PIC X(33) VALUE " NESTED". - 05 FILLER PIC X(33) VALUE "VNEXT". - 05 FILLER PIC X(33) VALUE " NO". - 05 FILLER PIC X(33) VALUE " NOT". - 05 FILLER PIC X(33) VALUE " NULL". - 05 FILLER PIC X(33) VALUE " NULLS". - 05 FILLER PIC X(33) VALUE " NUMBER". - 05 FILLER PIC X(33) VALUE "INUMBER-OF-CALL-PARAMETERS". - 05 FILLER PIC X(33) VALUE " NUMBERS". - 05 FILLER PIC X(33) VALUE " NUMERIC". - 05 FILLER PIC X(33) VALUE " NUMERIC-EDITED". - 05 FILLER PIC X(33) VALUE "INUMVAL". - 05 FILLER PIC X(33) VALUE "INUMVAL-C". - 05 FILLER PIC X(33) VALUE " OBJECT". - 05 FILLER PIC X(33) VALUE " OBJECT-COMPUTER". - 05 FILLER PIC X(33) VALUE " OBJECT-REFERENCE". - 05 FILLER PIC X(33) VALUE " OCCURS". - 05 FILLER PIC X(33) VALUE " OF". - 05 FILLER PIC X(33) VALUE " OFF". - 05 FILLER PIC X(33) VALUE " OMITTED". - 05 FILLER PIC X(33) VALUE " ON". - 05 FILLER PIC X(33) VALUE " ONLY". - 05 FILLER PIC X(33) VALUE "VOPEN". - 05 FILLER PIC X(33) VALUE " OPTIONAL". - 05 FILLER PIC X(33) VALUE " OPTIONS". - 05 FILLER PIC X(33) VALUE " OR". - 05 FILLER PIC X(33) VALUE "IORD". - 05 FILLER PIC X(33) VALUE "IORD-MAX". - 05 FILLER PIC X(33) VALUE "IORD-MIN". - 05 FILLER PIC X(33) VALUE " ORDER". - 05 FILLER PIC X(33) VALUE " ORGANIZATION". - 05 FILLER PIC X(33) VALUE " OTHER". - 05 FILLER PIC X(33) VALUE " OUTPUT". - 05 FILLER PIC X(33) VALUE " OVERFLOW". - 05 FILLER PIC X(33) VALUE " OVERLINE". - 05 FILLER PIC X(33) VALUE " OVERRIDE". - 05 FILLER PIC X(33) VALUE " PACKED-DECIMAL". - 05 FILLER PIC X(33) VALUE " PADDING". - 05 FILLER PIC X(33) VALUE " PAGE". - 05 FILLER PIC X(33) VALUE " PAGE-COUNTER". - 05 FILLER PIC X(33) VALUE " PARAGRAPH". - 05 FILLER PIC X(33) VALUE "VPERFORM". - 05 FILLER PIC X(33) VALUE " PF". - 05 FILLER PIC X(33) VALUE " PH". - 05 FILLER PIC X(33) VALUE "IPI". - 05 FILLER PIC X(33) VALUE "KPIC". - 05 FILLER PIC X(33) VALUE "KPICTURE". - 05 FILLER PIC X(33) VALUE " PLUS". - 05 FILLER PIC X(33) VALUE "KPOINTER". - 05 FILLER PIC X(33) VALUE " POSITION". - 05 FILLER PIC X(33) VALUE " POSITIVE". - 05 FILLER PIC X(33) VALUE " PRESENT". - 05 FILLER PIC X(33) VALUE "IPRESENT-VALUE". - 05 FILLER PIC X(33) VALUE " PREVIOUS". - 05 FILLER PIC X(33) VALUE "MPRINTER". - 05 FILLER PIC X(33) VALUE " PRINTING". - 05 FILLER PIC X(33) VALUE "KPROCEDURE". - 05 FILLER PIC X(33) VALUE " PROCEDURE-POINTER". - 05 FILLER PIC X(33) VALUE " PROCEDURES". - 05 FILLER PIC X(33) VALUE " PROCEED". - 05 FILLER PIC X(33) VALUE " PROGRAM". - 05 FILLER PIC X(33) VALUE "KPROGRAM-ID". - 05 FILLER PIC X(33) VALUE " PROGRAM-POINTER". - 05 FILLER PIC X(33) VALUE " PROMPT". - 05 FILLER PIC X(33) VALUE " PROPERTY". - 05 FILLER PIC X(33) VALUE " PROTOTYPE". - 05 FILLER PIC X(33) VALUE " QUOTE". - 05 FILLER PIC X(33) VALUE " QUOTES". - 05 FILLER PIC X(33) VALUE " RAISE". - 05 FILLER PIC X(33) VALUE " RAISING". - 05 FILLER PIC X(33) VALUE "IRANDOM". - 05 FILLER PIC X(33) VALUE "IRANGE". - 05 FILLER PIC X(33) VALUE " RD". - 05 FILLER PIC X(33) VALUE "VREAD". - 05 FILLER PIC X(33) VALUE "VREADY". - 05 FILLER PIC X(33) VALUE " RECORD". - 05 FILLER PIC X(33) VALUE " RECORDING". - 05 FILLER PIC X(33) VALUE " RECORDS". - 05 FILLER PIC X(33) VALUE " RECURSIVE". - 05 FILLER PIC X(33) VALUE "KREDEFINES". - 05 FILLER PIC X(33) VALUE " REEL". - 05 FILLER PIC X(33) VALUE " REFERENCE". - 05 FILLER PIC X(33) VALUE " RELATIVE". - 05 FILLER PIC X(33) VALUE "VRELEASE". - 05 FILLER PIC X(33) VALUE "IREM". - 05 FILLER PIC X(33) VALUE " REMAINDER". - 05 FILLER PIC X(33) VALUE " REMARKS". - 05 FILLER PIC X(33) VALUE " REMOVAL". - 05 FILLER PIC X(33) VALUE "KRENAMES". - 05 FILLER PIC X(33) VALUE "KREPLACING". - 05 FILLER PIC X(33) VALUE "KREPORT". - 05 FILLER PIC X(33) VALUE " REPORTING". - 05 FILLER PIC X(33) VALUE " REPORTS". - 05 FILLER PIC X(33) VALUE " REPOSITORY". - 05 FILLER PIC X(33) VALUE " REPRESENTS-NOT-A-NUMBER". - 05 FILLER PIC X(33) VALUE " REQUIRED". - 05 FILLER PIC X(33) VALUE " RESERVE". - 05 FILLER PIC X(33) VALUE " RESUME". - 05 FILLER PIC X(33) VALUE " RETRY". - 05 FILLER PIC X(33) VALUE "VRETURN". - 05 FILLER PIC X(33) VALUE "IRETURN-CODE". - 05 FILLER PIC X(33) VALUE "KRETURNING". - 05 FILLER PIC X(33) VALUE "IREVERSE". - 05 FILLER PIC X(33) VALUE " REVERSE-VIDEO". - 05 FILLER PIC X(33) VALUE " REWIND". - 05 FILLER PIC X(33) VALUE "VREWRITE". - 05 FILLER PIC X(33) VALUE " RF". - 05 FILLER PIC X(33) VALUE " RH". - 05 FILLER PIC X(33) VALUE " RIGHT". - 05 FILLER PIC X(33) VALUE " RIGHT-JUSTIFY". - 05 FILLER PIC X(33) VALUE "VROLLBACK". - 05 FILLER PIC X(33) VALUE " ROUNDED". - 05 FILLER PIC X(33) VALUE " RUN". - 05 FILLER PIC X(33) VALUE " SAME". - 05 FILLER PIC X(33) VALUE "KSCREEN". - 05 FILLER PIC X(33) VALUE " SCROLL". - 05 FILLER PIC X(33) VALUE "KSD". - 05 FILLER PIC X(33) VALUE "VSEARCH". - 05 FILLER PIC X(33) VALUE "ISECONDS-FROM-FORMATTED-TIME". - 05 FILLER PIC X(33) VALUE "ISECONDS-PAST-MIDNIGHT". - 05 FILLER PIC X(33) VALUE "KSECTION". - 05 FILLER PIC X(33) VALUE " SECURE". - 05 FILLER PIC X(33) VALUE " SECURITY". - 05 FILLER PIC X(33) VALUE " SEGMENT-LIMIT". - 05 FILLER PIC X(33) VALUE " SELECT". - 05 FILLER PIC X(33) VALUE " SELF". - 05 FILLER PIC X(33) VALUE " SENTENCE". - 05 FILLER PIC X(33) VALUE " SEPARATE". - 05 FILLER PIC X(33) VALUE " SEQUENCE". - 05 FILLER PIC X(33) VALUE " SEQUENTIAL". - 05 FILLER PIC X(33) VALUE "VSET". - 05 FILLER PIC X(33) VALUE " SHARING". - 05 FILLER PIC X(33) VALUE "ISIGN". - 05 FILLER PIC X(33) VALUE " SIGNED". - 05 FILLER PIC X(33) VALUE " SIGNED-INT". - 05 FILLER PIC X(33) VALUE " SIGNED-LONG". - 05 FILLER PIC X(33) VALUE " SIGNED-SHORT". - 05 FILLER PIC X(33) VALUE "ISIN". - 05 FILLER PIC X(33) VALUE " SIZE". - 05 FILLER PIC X(33) VALUE "VSORT". - 05 FILLER PIC X(33) VALUE " SORT-MERGE". - 05 FILLER PIC X(33) VALUE "ISORT-RETURN". - 05 FILLER PIC X(33) VALUE " SOURCE". - 05 FILLER PIC X(33) VALUE " SOURCE-COMPUTER". - 05 FILLER PIC X(33) VALUE " SOURCES". - 05 FILLER PIC X(33) VALUE " SPACE". - 05 FILLER PIC X(33) VALUE " SPACE-FILL". - 05 FILLER PIC X(33) VALUE " SPACES". - 05 FILLER PIC X(33) VALUE " SPECIAL-NAMES". - 05 FILLER PIC X(33) VALUE "ISQRT". - 05 FILLER PIC X(33) VALUE " STANDARD". - 05 FILLER PIC X(33) VALUE " STANDARD-1". - 05 FILLER PIC X(33) VALUE " STANDARD-2". - 05 FILLER PIC X(33) VALUE "ISTANDARD-DEVIATION". - 05 FILLER PIC X(33) VALUE "VSTART". - 05 FILLER PIC X(33) VALUE " STATUS". - 05 FILLER PIC X(33) VALUE "VSTOP". - 05 FILLER PIC X(33) VALUE "ISTORED-CHAR-LENGTH". - 05 FILLER PIC X(33) VALUE "VSTRING". - 05 FILLER PIC X(33) VALUE "ISUBSTITUTE". - 05 FILLER PIC X(33) VALUE "ISUBSTITUTE-CASE". - 05 FILLER PIC X(33) VALUE "VSUBTRACT". - 05 FILLER PIC X(33) VALUE "ISUM". - 05 FILLER PIC X(33) VALUE " SUPER". - 05 FILLER PIC X(33) VALUE "VSUPPRESS". - 05 FILLER PIC X(33) VALUE "MSWITCH-1". - 05 FILLER PIC X(33) VALUE "MSWITCH-2". - 05 FILLER PIC X(33) VALUE "MSWITCH-3". - 05 FILLER PIC X(33) VALUE "MSWITCH-4". - 05 FILLER PIC X(33) VALUE "MSWITCH-5". - 05 FILLER PIC X(33) VALUE "MSWITCH-6". - 05 FILLER PIC X(33) VALUE "MSWITCH-7". - 05 FILLER PIC X(33) VALUE "MSWITCH-8". - 05 FILLER PIC X(33) VALUE " SYMBOLIC". - 05 FILLER PIC X(33) VALUE " SYNC". - 05 FILLER PIC X(33) VALUE " SYNCHRONIZED". - 05 FILLER PIC X(33) VALUE "MSYSERR". - 05 FILLER PIC X(33) VALUE "MSYSIN". - 05 FILLER PIC X(33) VALUE "MSYSIPT". - 05 FILLER PIC X(33) VALUE "MSYSLIST". - 05 FILLER PIC X(33) VALUE "MSYSLST". - 05 FILLER PIC X(33) VALUE "MSYSOUT". - 05 FILLER PIC X(33) VALUE " SYSTEM-DEFAULT". - 05 FILLER PIC X(33) VALUE " TABLE". - 05 FILLER PIC X(33) VALUE "KTALLYING". - 05 FILLER PIC X(33) VALUE "ITAN". - 05 FILLER PIC X(33) VALUE " TAPE". - 05 FILLER PIC X(33) VALUE "VTERMINATE". - 05 FILLER PIC X(33) VALUE " TEST". - 05 FILLER PIC X(33) VALUE "ITEST-DATE-YYYYMMDD". - 05 FILLER PIC X(33) VALUE "ITEST-DAY-YYYYDDD". - 05 FILLER PIC X(33) VALUE " THAN". - 05 FILLER PIC X(33) VALUE " THEN". - 05 FILLER PIC X(33) VALUE " THROUGH". - 05 FILLER PIC X(33) VALUE " THRU". - 05 FILLER PIC X(33) VALUE " TIME". - 05 FILLER PIC X(33) VALUE " TIMES". - 05 FILLER PIC X(33) VALUE "KTO". - 05 FILLER PIC X(33) VALUE " TOP". - 05 FILLER PIC X(33) VALUE " TRAILING". - 05 FILLER PIC X(33) VALUE " TRAILING-SIGN". - 05 FILLER PIC X(33) VALUE "VTRANSFORM". - 05 FILLER PIC X(33) VALUE "ITRIM". - 05 FILLER PIC X(33) VALUE " TRUE". - 05 FILLER PIC X(33) VALUE " TYPE". - 05 FILLER PIC X(33) VALUE " TYPEDEF". - 05 FILLER PIC X(33) VALUE " UNDERLINE". - 05 FILLER PIC X(33) VALUE " UNIT". - 05 FILLER PIC X(33) VALUE " UNIVERSAL". - 05 FILLER PIC X(33) VALUE "VUNLOCK". - 05 FILLER PIC X(33) VALUE " UNSIGNED". - 05 FILLER PIC X(33) VALUE " UNSIGNED-INT". - 05 FILLER PIC X(33) VALUE " UNSIGNED-LONG". - 05 FILLER PIC X(33) VALUE " UNSIGNED-SHORT". - 05 FILLER PIC X(33) VALUE "VUNSTRING". - 05 FILLER PIC X(33) VALUE " UNTIL". - 05 FILLER PIC X(33) VALUE "KUP". - 05 FILLER PIC X(33) VALUE " UPDATE". - 05 FILLER PIC X(33) VALUE " UPON". - 05 FILLER PIC X(33) VALUE " UPPER". - 05 FILLER PIC X(33) VALUE "IUPPER-CASE". - 05 FILLER PIC X(33) VALUE " USAGE". - 05 FILLER PIC X(33) VALUE "VUSE". - 05 FILLER PIC X(33) VALUE " USER-DEFAULT". - 05 FILLER PIC X(33) VALUE "KUSING". - 05 FILLER PIC X(33) VALUE " VAL-STATUS". - 05 FILLER PIC X(33) VALUE " VALID". - 05 FILLER PIC X(33) VALUE " VALIDATE". - 05 FILLER PIC X(33) VALUE " VALIDATE-STATUS". - 05 FILLER PIC X(33) VALUE " VALUE". - 05 FILLER PIC X(33) VALUE " VALUES". - 05 FILLER PIC X(33) VALUE "IVARIANCE". - 05 FILLER PIC X(33) VALUE "KVARYING". - 05 FILLER PIC X(33) VALUE " WAIT". - 05 FILLER PIC X(33) VALUE "VWHEN". - 05 FILLER PIC X(33) VALUE "IWHEN-COMPILED". - 05 FILLER PIC X(33) VALUE " WITH". - 05 FILLER PIC X(33) VALUE " WORDS". - 05 FILLER PIC X(33) VALUE "KWORKING-STORAGE". - 05 FILLER PIC X(33) VALUE "VWRITE". - 05 FILLER PIC X(33) VALUE "IYEAR-TO-YYYY". - 05 FILLER PIC X(33) VALUE " YYYYDDD". - 05 FILLER PIC X(33) VALUE " YYYYMMDD". - 05 FILLER PIC X(33) VALUE " ZERO". - 05 FILLER PIC X(33) VALUE " ZERO-FILL". - 05 FILLER PIC X(33) VALUE " ZEROES". - 05 FILLER PIC X(33) VALUE " ZEROS". - 01 Reserved-Word-Table REDEFINES Reserved-Words. - 05 Reserved-Word OCCURS 591 TIMES - ASCENDING KEY RW-Word - INDEXED RW-Idx. - 10 RW-Type PIC X(1). - 10 RW-Word PIC X(32). - - 01 Saved-Section PIC X(15). - - 01 Search-Token PIC X(32). - - 01 Source-Line-No PIC 9(6). - - 01 Src-Ptr USAGE BINARY-LONG. - - 01 Syntax-Parsing-Items. - 05 SPI-Current-Char PIC X(1). - 88 Current-Char-Is-Punct VALUE "=", "(", ")", "*", "/", - "&", ";", ",", "<", ">", - ":". - 88 Current-Char-Is-Quote VALUE '"', "'". - 88 Current-Char-Is-X VALUE "x", "X". - 88 Current-Char-Is-Z VALUE "z", "Z". - 05 SPI-Current-Division PIC X(1). - 88 In-IDENTIFICATION-DIVISION VALUE "I", "?". - 88 In-ENVIRONMENT-DIVISION VALUE "E". - 88 In-DATA-DIVISION VALUE "D". - 88 In-PROCEDURE-DIVISION VALUE "P". - 05 SPI-Current-Line-No PIC 9(6). - 05 SPI-Current-Program-ID. - 10 FILLER PIC X(12). - 10 SPI-CP-13-15 PIC X(3). - 05 SPI-Current-Section. - 10 SPI-CS-1 PIC X(1). - 10 SPI-CS-2-14. - 15 FILLER PIC X(10). - 15 SPI-CS-11-14 PIC X(3). - 10 SPI-CS-15 PIC X(1). - 05 SPI-Current-Token PIC X(32). - 05 SPI-Current-Token-UC PIC X(32). - 05 SPI-Current-Verb PIC X(12). - 05 SPI-Next-Char PIC X(1). - 88 Next-Char-Is-Quote VALUE '"', "'". - 05 SPI-Prior-Token PIC X(32). - 05 SPI-Token-Type PIC X(1). - 88 Token-Is-EOF VALUE HIGH-VALUES. - 88 Token-Is-Identifier VALUE "I". - 88 Token-Is-Key-Word VALUE "K", "V". - 88 Token-Is-Literal-Alpha VALUE "L". - 88 Token-Is-Literal-Number VALUE "N". - 88 Token-Is-Verb VALUE "V". -GC0710 88 Token-Is-Reserved-Word VALUE " ". - - 01 Tally USAGE BINARY-LONG. - - 01 Todays-Date PIC 9(8). - - LINKAGE SECTION. - 01 Produce-Source-Listing PIC X(1). - 01 Produce-Xref-Listing PIC X(1). - 01 Src-Filename PIC X(256). - / - PROCEDURE DIVISION USING Produce-Source-Listing - Produce-Xref-Listing - Src-Filename. - 000-Main SECTION. - 001-Init. - PERFORM 100-Initialization - PERFORM 200-Execute-cobc - OPEN OUTPUT Report-File - IF Produce-Source-Listing NOT = SPACE - PERFORM 500-Produce-Source-Listing - END-IF - IF Produce-Xref-Listing NOT = SPACE - SORT Sort-File - ASCENDING KEY SR-Prog-ID - SR-Token-UC - SR-Line-No-Ref - INPUT PROCEDURE 300-Tokenize-Source - OUTPUT PROCEDURE 400-Produce-Xref-Listing - END-IF - CLOSE Report-File - GOBACK - . - / - 100-Initialization SECTION. - ***************************************************************** - ** Perform all program-wide initialization operations ** - ***************************************************************** - 101-Establish-Working-Env. - MOVE TRIM(Src-Filename,Leading) TO Src-Filename - ACCEPT Env-TEMP - FROM ENVIRONMENT "TEMP" - END-ACCEPT - ACCEPT Lines-Per-Page-ENV - FROM ENVIRONMENT "OCXREF_LINES" - END-ACCEPT - INSPECT Src-Filename REPLACING ALL "\" BY "/" - INSPECT Env-TEMP REPLACING ALL "\" BY "/" - MOVE Src-Filename TO Program-Path - MOVE Program-Path TO Heading-2 - CALL "C$JUSTIFY" - USING Heading-2, "Right" - END-CALL - MOVE LENGTH(TRIM(Src-Filename,Trailing)) TO I - MOVE 0 TO J - PERFORM UNTIL Src-Filename(I:1) = '/' - OR I = 0 - SUBTRACT 1 FROM I - ADD 1 TO J - END-PERFORM - UNSTRING Src-Filename((I + 1):J) DELIMITED BY "." - INTO Filename, Dummy - END-UNSTRING - STRING TRIM(Env-TEMP,Trailing) - "/" - TRIM(Filename,Trailing) - ".i" - DELIMITED SIZE - INTO Expanded-Src-Filename - END-STRING - STRING Program-Path(1:I) - TRIM(Filename,Trailing) - ".lst" - DELIMITED SIZE - INTO Report-Filename - END-STRING - IF Lines-Per-Page-ENV NOT = SPACES - MOVE NUMVAL(Lines-Per-Page-ENV) TO Lines-Per-Page - ELSE - MOVE 60 TO Lines-Per-Page - END-IF - ACCEPT Todays-Date - FROM DATE YYYYMMDD - END-ACCEPT - MOVE Todays-Date TO H1X-Date - H1S-Date - MOVE "????????????..." TO SPI-Current-Program-ID - MOVE SPACES TO SPI-Current-Verb - Held-Reference - MOVE "Y" TO F-First-Record - . - / - 200-Execute-cobc SECTION. - 201-Build-Cmd. - STRING "cobc -E " - TRIM(Program-Path, Trailing) - " > " - TRIM(Expanded-Src-Filename,Trailing) - DELIMITED SIZE - INTO Cmd - END-STRING - CALL "SYSTEM" - USING Cmd - END-CALL - IF RETURN-CODE NOT = 0 - DISPLAY - "Cross-reference terminated by previous errors" - UPON SYSERR - END-DISPLAY - GOBACK - END-IF - . - - 209-Exit. - EXIT - . - / - 300-Tokenize-Source SECTION. - 301-Driver. - OPEN INPUT Expand-Code - MOVE SPACES TO Expand-Code-Rec - MOVE 256 TO Src-Ptr - MOVE 0 TO Num-UserNames - SPI-Current-Line-No - MOVE "?" TO SPI-Current-Division -GC0710 MOVE "N" TO F-Verb-Has-Been-Found. - PERFORM FOREVER - PERFORM 310-Get-Token - IF Token-Is-EOF - EXIT PERFORM - END-IF - MOVE UPPER-CASE(SPI-Current-Token) - TO SPI-Current-Token-UC - IF Token-Is-Verb - MOVE SPI-Current-Token-UC TO SPI-Current-Verb - SPI-Prior-Token - IF Held-Reference NOT = SPACES - MOVE Held-Reference TO Sort-Rec - MOVE SPACES TO Held-Reference - RELEASE Sort-Rec - END-IF - END-IF - EVALUATE TRUE - WHEN In-IDENTIFICATION-DIVISION - PERFORM 320-IDENTIFICATION-DIVISION - WHEN In-ENVIRONMENT-DIVISION - PERFORM 330-ENVIRONMENT-DIVISION - WHEN In-DATA-DIVISION - PERFORM 340-DATA-DIVISION - WHEN In-PROCEDURE-DIVISION - PERFORM 350-PROCEDURE-DIVISION - END-EVALUATE - IF Token-Is-Key-Word - MOVE SPI-Current-Token-UC TO SPI-Prior-Token - END-IF - IF F-Token-Ended-Sentence = "Y" - AND SPI-Current-Division NOT = "I" - MOVE SPACES TO SPI-Prior-Token - SPI-Current-Verb - END-IF - - END-PERFORM - CLOSE Expand-Code - EXIT SECTION - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 310-Get-Token. - *>-- Position to 1st non-blank character - MOVE F-Token-Ended-Sentence TO F-Last-Token-Ended-Sent - MOVE "N" TO F-Token-Ended-Sentence - PERFORM UNTIL Expand-Code-Rec(Src-Ptr : 1) NOT = SPACE - IF Src-Ptr > 255 - READ Expand-Code AT END - IF Held-Reference NOT = SPACES - MOVE Held-Reference TO Sort-Rec - MOVE SPACES TO Held-Reference - RELEASE Sort-Rec - END-IF - SET Token-Is-EOF TO TRUE - MOVE 0 TO SPI-Current-Line-No - EXIT PARAGRAPH - END-READ - IF ECR-1 = "#" - PERFORM 311-Control-Record - ELSE - PERFORM 312-Expand-Code-Record - END-IF - ELSE - ADD 1 TO Src-Ptr - END-IF - END-PERFORM - *>-- Extract token string - MOVE Expand-Code-Rec(Src-Ptr : 1) TO SPI-Current-Char - MOVE Expand-Code-Rec(Src-Ptr + 1: 1) TO SPI-Next-Char - IF SPI-Current-Char = "." - ADD 1 TO Src-Ptr - MOVE SPI-Current-Char TO SPI-Current-Token - MOVE SPACE TO SPI-Token-Type - MOVE "Y" TO F-Token-Ended-Sentence - EXIT PARAGRAPH - END-IF - IF Current-Char-Is-Punct - AND SPI-Current-Char = "=" - AND SPI-Current-Division = "P" - ADD 1 TO Src-Ptr - MOVE "EQUALS" TO SPI-Current-Token - MOVE "K" TO SPI-Token-Type - EXIT PARAGRAPH - END-IF - IF Current-Char-Is-Punct *> So subscripts don't get flagged w/ "*" - AND SPI-Current-Char = "(" - AND SPI-Current-Division = "P" - MOVE SPACES TO SPI-Prior-Token - END-IF - IF Current-Char-Is-Punct - ADD 1 TO Src-Ptr - MOVE SPI-Current-Char TO SPI-Current-Token - MOVE SPACE TO SPI-Token-Type - EXIT PARAGRAPH - END-IF - IF Current-Char-Is-Quote - ADD 1 TO Src-Ptr - UNSTRING Expand-Code-Rec - DELIMITED BY SPI-Current-Char - INTO SPI-Current-Token - WITH POINTER Src-Ptr - END-UNSTRING - IF Expand-Code-Rec(Src-Ptr : 1) = "." - MOVE "Y" TO F-Token-Ended-Sentence - ADD 1 TO Src-Ptr - END-IF - SET Token-Is-Literal-Alpha TO TRUE - EXIT PARAGRAPH - END-IF - IF Current-Char-Is-X AND Next-Char-Is-Quote - ADD 2 TO Src-Ptr - UNSTRING Expand-Code-Rec - DELIMITED BY SPI-Next-Char - INTO SPI-Current-Token - WITH POINTER Src-Ptr - END-UNSTRING - IF Expand-Code-Rec(Src-Ptr : 1) = "." - MOVE "Y" TO F-Token-Ended-Sentence - ADD 1 TO Src-Ptr - END-IF - SET Token-Is-Literal-Number TO TRUE - EXIT PARAGRAPH - END-IF - IF Current-Char-Is-Z AND Next-Char-Is-Quote - ADD 2 TO Src-Ptr - UNSTRING Expand-Code-Rec - DELIMITED BY SPI-Next-Char - INTO SPI-Current-Token - WITH POINTER Src-Ptr - END-UNSTRING - IF Expand-Code-Rec(Src-Ptr : 1) = "." - MOVE "Y" TO F-Token-Ended-Sentence - ADD 1 TO Src-Ptr - END-IF - SET Token-Is-Literal-Alpha TO TRUE - EXIT PARAGRAPH - END-IF - IF F-Processing-PICTURE = "Y" - UNSTRING Expand-Code-Rec - DELIMITED BY ". " OR " " - INTO SPI-Current-Token - DELIMITER IN Delim - WITH POINTER Src-Ptr - END-UNSTRING - IF Delim = ". " - MOVE "Y" TO F-Token-Ended-Sentence - ADD 1 TO Src-Ptr - END-IF - IF UPPER-CASE(SPI-Current-Token) = "IS" - MOVE SPACE TO SPI-Token-Type - EXIT PARAGRAPH - ELSE - MOVE "N" TO F-Processing-PICTURE - MOVE SPACE TO SPI-Token-Type - EXIT PARAGRAPH - END-IF - END-IF - UNSTRING Expand-Code-Rec - DELIMITED BY ". " OR " " OR "=" OR "(" OR ")" OR "*" - OR "/" OR "&" OR ";" OR "," OR "<" - OR ">" OR ":" - INTO SPI-Current-Token - DELIMITER IN Delim - WITH POINTER Src-Ptr - END-UNSTRING - IF Delim = ". " - MOVE "Y" TO F-Token-Ended-Sentence - END-IF - IF Delim NOT = ". " AND " " - SUBTRACT 1 FROM Src-Ptr - END-IF - *>-- Classify Token - MOVE UPPER-CASE(SPI-Current-Token) TO Search-Token - IF Search-Token = "EQUAL" OR "EQUALS" - MOVE "EQUALS" TO SPI-Current-Token - MOVE "K" TO SPI-Token-Type - EXIT PARAGRAPH - END-IF - SEARCH ALL Reserved-Word - WHEN RW-Word (RW-Idx) = Search-Token - MOVE RW-Type (RW-Idx) TO SPI-Token-Type -GC0710 IF Token-Is-Verb -GC0710 MOVE "Y" TO F-Verb-Has-Been-Found -GC0710 END-IF - EXIT PARAGRAPH - END-SEARCH - *>-- Not a reserved word, must be a user name - SET Token-Is-Identifier TO TRUE *> NEEDS EXPANSION!!!! - PERFORM 313-Check-For-Numeric-Token - IF Token-Is-Literal-Number - IF (F-Last-Token-Ended-Sent = "Y") - AND (SPI-Current-Division = "D") - MOVE "LEVEL #" TO SPI-Current-Token - MOVE "K" TO SPI-Token-Type - EXIT PARAGRAPH - ELSE - EXIT PARAGRAPH - END-IF - END-IF - EXIT PARAGRAPH - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 311-Control-Record. - UNSTRING ECR-2-256 - DELIMITED BY '"' - INTO PIC-X10, PIC-X256, Dummy - END-UNSTRING - INSPECT PIC-X10 REPLACING ALL '"' BY SPACE - COMPUTE I = NUMVAL(PIC-X10) - 1 - IF TRIM(PIC-X256,Trailing) = TRIM(Program-Path,Trailing) - MOVE I TO SPI-Current-Line-No - SET In-Main-Module TO TRUE - IF Saved-Section NOT = SPACES - MOVE Saved-Section TO SPI-Current-Section - END-IF - ELSE - SET In-Copybook TO TRUE - IF Saved-Section = SPACES - MOVE SPI-Current-Section TO Saved-Section - END-IF - MOVE LENGTH(TRIM(PIC-X256,Trailing)) TO I - MOVE 0 TO J - PERFORM UNTIL PIC-X256(I:1) = '/' - OR I = 0 - SUBTRACT 1 FROM I - ADD 1 TO J - END-PERFORM - UNSTRING PIC-X256((I + 1):J) DELIMITED BY "." - INTO Filename, Dummy - END-UNSTRING - MOVE "[" TO SPI-CS-1 - MOVE Filename TO SPI-CS-2-14 - IF SPI-CS-11-14 NOT = SPACES - MOVE "..." TO SPI-CS-11-14 - END-IF - MOVE "]" TO SPI-CS-15 - END-IF - MOVE SPACES TO Expand-Code-Rec *> Force another READ - MOVE 256 TO Src-Ptr - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 312-Expand-Code-Record. - MOVE 1 TO Src-Ptr - IF In-Main-Module - ADD 1 To SPI-Current-Line-No - END-IF - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 313-Check-For-Numeric-Token. - MOVE SPI-Current-Token TO PIC-X32 - INSPECT PIC-X32 - REPLACING TRAILING SPACES BY "0" - IF PIC-X32 IS NUMERIC *> Simple Unsigned Integer - SET Token-Is-Literal-Number TO TRUE - EXIT PARAGRAPH - END-IF - IF PIC-X32(1:1) = "+" OR "-" - MOVE "0" TO PIC-X32(1:1) - END-IF - MOVE 0 TO Tally - INSPECT PIC-X32 - TALLYING Tally FOR ALL "." - IF Tally = 1 - INSPECT PIC-X32 REPLACING ALL "." BY "0" - END-IF - IF PIC-X32 IS NUMERIC - SET Token-Is-Literal-Number TO TRUE - EXIT PARAGRAPH - END-IF - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 320-IDENTIFICATION-DIVISION. -GC0710 MOVE "N" TO F-Verb-Has-Been-Found - IF Token-Is-Key-Word AND SPI-Current-Token = "DIVISION" - MOVE SPI-Prior-Token TO SPI-Current-Division - EXIT PARAGRAPH - END-IF - IF SPI-Prior-Token = "PROGRAM-ID" - MOVE SPACES TO SPI-Prior-Token - MOVE SPI-Current-Token TO SPI-Current-Program-ID - IF SPI-CP-13-15 NOT = SPACES - MOVE "..." TO SPI-CP-13-15 - END-IF - EXIT PARAGRAPH - END-IF - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 330-ENVIRONMENT-DIVISION. - IF Token-Is-Key-Word AND SPI-Current-Token = "DIVISION" - MOVE SPI-Prior-Token TO SPI-Current-Division - EXIT PARAGRAPH - END-IF - IF Token-Is-Key-Word AND SPI-Current-Token = "SECTION" - MOVE SPI-Prior-Token TO SPI-Current-Section - EXIT PARAGRAPH - END-IF - IF Token-Is-Identifier - PERFORM 361-Release-Ref - END-IF - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 340-DATA-DIVISION. - IF Token-Is-Key-Word AND SPI-Current-Token = "DIVISION" - MOVE SPI-Prior-Token TO SPI-Current-Division - EXIT PARAGRAPH - END-IF - IF Token-Is-Key-Word AND SPI-Current-Token = "SECTION" - MOVE SPI-Prior-Token TO SPI-Current-Section - EXIT PARAGRAPH - END-IF - IF (SPI-Current-Token = "PIC" OR "PICTURE") - AND (Token-Is-Key-Word) - MOVE "Y" TO F-Processing-PICTURE - EXIT PARAGRAPH - END-IF -GC0710 IF Token-Is-Reserved-Word -GC0710 AND SPI-Prior-Token = "LEVEL #" -GC0710 MOVE SPACES TO SPI-Prior-Token -GC0710 EXIT PARAGRAPH -GC0710 END-IF - IF Token-Is-Identifier - EVALUATE SPI-Prior-Token - WHEN "FD" - PERFORM 360-Release-Def - MOVE SPACES TO SPI-Prior-Token - WHEN "SD" - PERFORM 360-Release-Def - MOVE SPACES TO SPI-Prior-Token - WHEN "LEVEL #" - PERFORM 360-Release-Def - MOVE SPACES TO SPI-Prior-Token - WHEN "INDEXED" - PERFORM 360-Release-Def - MOVE SPACES TO SPI-Prior-Token - WHEN "USING" - PERFORM 362-Release-Upd - MOVE SPACES TO SPI-Prior-Token - WHEN "INTO" - PERFORM 362-Release-Upd - MOVE SPACES TO SPI-Prior-Token - WHEN OTHER - PERFORM 361-Release-Ref - END-EVALUATE - EXIT PARAGRAPH - END-IF - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 350-PROCEDURE-DIVISION. - IF SPI-Current-Section NOT = "PROCEDURE" - MOVE "PROCEDURE" TO SPI-Current-Section - END-IF -GC0710 IF SPI-Current-Token-UC = "PROGRAM" -GC0710 AND SPI-Prior-Token = "END" -GC0710 MOVE "?" TO SPI-Current-Division -GC0710 EXIT PARAGRAPH -GC0710 END-IF - IF Token-Is-Key-Word AND SPI-Current-Token = "DIVISION" - MOVE SPI-Prior-Token TO SPI-Current-Division - EXIT PARAGRAPH - END-IF - IF SPI-Current-Verb = SPACES -GC0710 AND F-Verb-Has-Been-Found = "Y" - IF Token-Is-Identifier - PERFORM 360-Release-Def - MOVE SPACES TO SPI-Prior-Token - END-IF - EXIT PARAGRAPH - END-IF - IF NOT Token-Is-Identifier - EXIT PARAGRAPH - END-IF - EVALUATE SPI-Current-Verb - WHEN "ACCEPT" - PERFORM 351-ACCEPT - WHEN "ADD" - PERFORM 351-ADD - WHEN "ALLOCATE" - PERFORM 351-ALLOCATE - WHEN "CALL" - PERFORM 351-CALL - WHEN "COMPUTE" - PERFORM 351-COMPUTE - WHEN "DIVIDE" - PERFORM 351-DIVIDE - WHEN "FREE" - PERFORM 351-FREE - WHEN "INITIALIZE" - PERFORM 351-INITIALIZE - WHEN "INSPECT" - PERFORM 351-INSPECT - WHEN "MOVE" - PERFORM 351-MOVE - WHEN "MULTIPLY" - PERFORM 351-MULTIPLY - WHEN "PERFORM" - PERFORM 351-PERFORM - WHEN "SET" - PERFORM 351-SET - WHEN "STRING" - PERFORM 351-STRING - WHEN "SUBTRACT" - PERFORM 351-SUBTRACT - WHEN "TRANSFORM" - PERFORM 351-TRANSFORM - WHEN "UNSTRING" - PERFORM 351-UNSTRING - WHEN OTHER - PERFORM 361-Release-Ref - END-EVALUATE - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 351-ACCEPT. - EVALUATE SPI-Prior-Token - WHEN "ACCEPT" - PERFORM 362-Release-Upd - MOVE SPACES TO SPI-Prior-Token - WHEN OTHER - PERFORM 361-Release-Ref - END-EVALUATE - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 351-ADD. - EVALUATE SPI-Prior-Token - WHEN "GIVING" - PERFORM 362-Release-Upd - WHEN "TO" - PERFORM 362-Release-Upd - WHEN OTHER - PERFORM 361-Release-Ref - END-EVALUATE - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 351-ALLOCATE. - EVALUATE SPI-Prior-Token - WHEN "ALLOCATE" - PERFORM 362-Release-Upd - MOVE SPACES TO SPI-Prior-Token - WHEN "RETURNING" - PERFORM 362-Release-Upd - WHEN OTHER - PERFORM 361-Release-Ref - END-EVALUATE - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 351-CALL. - EVALUATE SPI-Prior-Token - WHEN "RETURNING" - PERFORM 362-Release-Upd - WHEN "GIVING" - PERFORM 362-Release-Upd - WHEN OTHER - PERFORM 361-Release-Ref - END-EVALUATE - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 351-COMPUTE. - EVALUATE SPI-Prior-Token - WHEN "COMPUTE" - PERFORM 362-Release-Upd - WHEN OTHER - PERFORM 361-Release-Ref - END-EVALUATE - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 351-DIVIDE. - EVALUATE SPI-Prior-Token - WHEN "INTO" - PERFORM 363-Set-Upd - MOVE Sort-Rec TO Held-Reference - WHEN "GIVING" - IF Held-Reference NOT = SPACES - MOVE Held-Reference To Sort-Rec - MOVE SPACES To Held-Reference - SR-Ref-Flag - RELEASE Sort-Rec - END-IF - PERFORM 362-Release-Upd - WHEN "REMAINDER" - PERFORM 362-Release-Upd - WHEN OTHER - PERFORM 361-Release-Ref - END-EVALUATE - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 351-FREE. - PERFORM 362-Release-Upd - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 351-INITIALIZE. - EVALUATE SPI-Prior-Token - WHEN "INITIALIZE" - PERFORM 362-Release-Upd - WHEN "REPLACING" - PERFORM 361-Release-Ref - END-EVALUATE - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 351-INSPECT. - EVALUATE SPI-Prior-Token - WHEN "INSPECT" - PERFORM 364-Set-Ref - MOVE SPACES TO Held-Reference - MOVE SPACES TO SPI-Prior-Token - WHEN "TALLYING" - PERFORM 362-Release-Upd - MOVE SPACES TO SPI-Prior-Token - WHEN "REPLACING" - IF Held-Reference NOT = SPACES - MOVE Held-Reference TO Sort-Rec - MOVE SPACES TO Held-Reference - MOVE "*" TO SR-Ref-Flag - RELEASE Sort-Rec - END-IF - MOVE SPACES TO SPI-Prior-Token - WHEN "CONVERTING" - IF Held-Reference NOT = SPACES - MOVE Held-Reference TO Sort-Rec - MOVE SPACES TO Held-Reference - MOVE "*" TO SR-Ref-Flag - RELEASE Sort-Rec - END-IF - MOVE SPACES TO SPI-Prior-Token - WHEN OTHER - PERFORM 361-Release-Ref - END-EVALUATE - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 351-MOVE. - EVALUATE SPI-Prior-Token - WHEN "TO" - PERFORM 362-Release-Upd - WHEN OTHER - PERFORM 361-Release-Ref - END-EVALUATE - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 351-MULTIPLY. - EVALUATE SPI-Prior-Token - WHEN "BY" - PERFORM 363-Set-Upd - MOVE Sort-Rec TO Held-Reference - WHEN "GIVING" - MOVE Held-Reference TO Sort-Rec - MOVE SPACES TO Held-Reference - SR-Ref-Flag - RELEASE Sort-Rec - PERFORM 362-Release-Upd - WHEN OTHER - PERFORM 361-Release-Ref - END-EVALUATE - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 351-PERFORM. - EVALUATE SPI-Prior-Token - WHEN "VARYING" - PERFORM 362-Release-Upd - MOVE SPACES TO SPI-Prior-Token - WHEN "AFTER" - PERFORM 362-Release-Upd - MOVE SPACES TO SPI-Prior-Token - WHEN OTHER - PERFORM 361-Release-Ref - END-EVALUATE - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 351-SET. - EVALUATE SPI-Prior-Token - WHEN "SET" - PERFORM 362-Release-Upd - WHEN OTHER - PERFORM 361-Release-Ref - END-EVALUATE - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 351-STRING. - EVALUATE SPI-Prior-Token - WHEN "INTO" - PERFORM 362-Release-Upd - WHEN "POINTER" - PERFORM 362-Release-Upd - WHEN OTHER - PERFORM 361-Release-Ref - END-EVALUATE - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 351-SUBTRACT. - EVALUATE SPI-Prior-Token - WHEN "GIVING" - PERFORM 362-Release-Upd - WHEN "FROM" - PERFORM 362-Release-Upd - WHEN OTHER - PERFORM 361-Release-Ref - END-EVALUATE - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 351-TRANSFORM. - EVALUATE SPI-Prior-Token - WHEN "TRANSFORM" - PERFORM 362-Release-Upd - MOVE SPACES TO SPI-Prior-Token - WHEN OTHER - PERFORM 361-Release-Ref - END-EVALUATE - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 351-UNSTRING. - EVALUATE SPI-Prior-Token - WHEN "INTO" - PERFORM 362-Release-Upd - WHEN "DELIMITER" - PERFORM 362-Release-Upd - WHEN "COUNT" - PERFORM 362-Release-Upd - WHEN "POINTER" - PERFORM 362-Release-Upd - WHEN "TALLYING" - PERFORM 362-Release-Upd - WHEN OTHER - PERFORM 361-Release-Ref - END-EVALUATE - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 360-Release-Def. - MOVE SPACES TO Sort-Rec - MOVE SPI-Current-Program-ID TO SR-Prog-ID - MOVE SPI-Current-Token-UC TO SR-Token-UC - MOVE SPI-Current-Token TO SR-Token - MOVE SPI-Current-Section TO SR-Section - MOVE SPI-Current-Line-No TO SR-Line-No-Def - MOVE 0 TO SR-Line-No-Ref - RELEASE Sort-Rec - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 361-Release-Ref. - PERFORM 364-Set-Ref - RELEASE Sort-Rec - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 362-Release-Upd. - PERFORM 363-Set-Upd - RELEASE Sort-Rec - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 363-Set-Upd. - MOVE SPACES TO Sort-Rec - MOVE SPI-Current-Program-ID TO SR-Prog-ID - MOVE SPI-Current-Token-UC TO SR-Token-UC - MOVE SPI-Current-Token TO SR-Token - MOVE SPI-Current-Section TO SR-Section - MOVE SPI-Current-Line-No TO SR-Line-No-Ref - MOVE "*" TO SR-Ref-Flag - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 364-Set-Ref. - MOVE SPACES TO Sort-Rec - MOVE SPI-Current-Program-ID TO SR-Prog-ID - MOVE SPI-Current-Token-UC TO SR-Token-UC - MOVE SPI-Current-Token TO SR-Token - MOVE SPI-Current-Section TO SR-Section - MOVE SPI-Current-Line-No TO SR-Line-No-Ref - . - / - 400-Produce-Xref-Listing SECTION. - 401-Init. - MOVE SPACES TO Detail-Line-X - Group-Indicators - MOVE 0 TO I - Lines-Left -GC0710 MOVE 'N' TO F-Duplicate - . - - 402-Process-Sorted-Recs. - PERFORM FOREVER - RETURN Sort-File AT END - EXIT PERFORM - END-RETURN - IF SR-Prog-ID NOT = GI-Prog-ID - OR SR-Token-UC NOT = GI-Token -GC0710 MOVE 'N' TO F-Duplicate - IF Detail-Line-X NOT = SPACES - PERFORM 410-Generate-Report-Line - END-IF - IF SR-Prog-ID NOT = GI-Prog-ID - MOVE 0 TO Lines-Left - END-IF - MOVE SR-Prog-ID TO GI-Prog-ID - MOVE SR-Token-UC TO GI-Token - END-IF -GC0710 IF SR-Token-UC = GI-Token -GC0710 AND SR-Line-No-Def NOT = SPACES -GC0710 AND Detail-Line-X NOT = SPACES -GC0710 MOVE 'Y' TO F-Duplicate -GC0710 PERFORM 410-Generate-Report-Line -GC0710 MOVE 0 TO I -GC0710 MOVE SR-Prog-ID TO DLX-Prog-ID -GC0710 MOVE ' (Duplicate Definition)' TO DLX-Token -GC0710 MOVE SR-Section TO DLX-Section -GC0710 MOVE SR-Line-No-Def TO DLX-Line-No-Def -GC0710 EXIT PERFORM CYCLE -GC0710 END-IF -GC0710 IF SR-Token-UC = GI-Token -GC0710 AND SR-Line-No-Def = SPACES -GC0710 AND F-Duplicate = 'Y' -GC0710 MOVE 'N' TO F-Duplicate -GC0710 PERFORM 410-Generate-Report-Line -GC0710 MOVE 0 TO I -GC0710 MOVE SR-Prog-ID TO DLX-Prog-ID -GC0710 MOVE ' (Duplicate References)' TO DLX-Token -GC0710 END-IF - IF Detail-Line-X = SPACES - MOVE SR-Prog-ID TO DLX-Prog-ID - MOVE SR-Token TO DLX-Token - MOVE SR-Section TO DLX-Section - IF SR-Line-No-Def NOT = SPACES - MOVE SR-Line-No-Def TO DLX-Line-No-Def - END-IF - END-IF - IF SR-Reference > '000000' - ADD 1 TO I - IF I > Line-Nos-Per-Rec - PERFORM 410-Generate-Report-Line - MOVE 1 TO I - END-IF - MOVE SR-Line-No-Ref TO DLX-Line-No-Ref (I) - MOVE SR-Ref-Flag TO DLX-Ref-Flag (I) - END-IF - END-PERFORM - IF Detail-Line-X NOT = SPACES - PERFORM 410-Generate-Report-Line - END-IF - EXIT SECTION - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 410-Generate-Report-Line. - IF Lines-Left < 1 - IF F-First-Record = "Y" - MOVE "N" TO F-First-Record - WRITE Report-Rec FROM Heading-1X BEFORE 1 - ELSE - MOVE SPACES TO Report-Rec - WRITE Report-Rec BEFORE PAGE - MOVE SPACES TO Report-Rec - WRITE Report-Rec BEFORE 1 - WRITE Report-Rec FROM Heading-1X BEFORE 1 - END-IF - WRITE Report-Rec FROM Heading-2 BEFORE 1 - WRITE Report-Rec FROM Heading-4X BEFORE 1 - WRITE Report-Rec FROM Heading-5X BEFORE 1 - COMPUTE - Lines-Left = Lines-Per-Page - 4 - END-COMPUTE - END-IF - WRITE Report-Rec FROM Detail-Line-X BEFORE 1 - MOVE SPACES TO Detail-Line-X - MOVE 0 TO I - SUBTRACT 1 FROM Lines-Left - . - / - 500-Produce-Source-Listing SECTION. - 501-Generate-Source-Listing. - OPEN INPUT Source-Code - Expand-Code - MOVE 0 TO Source-Line-No - PERFORM FOREVER - READ Expand-Code AT END - EXIT PERFORM - END-READ - IF ECR-1 = "#" - PERFORM 510-Control-Record - ELSE - PERFORM 520-Expand-Code-Record - END-IF - END-PERFORM - CLOSE Source-Code - Expand-Code - EXIT SECTION - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 510-Control-Record. - UNSTRING ECR-2-256 - DELIMITED BY '"' - INTO PIC-X10, PIC-X256, Dummy - END-UNSTRING - IF TRIM(PIC-X256,Trailing) = TRIM(Program-Path,Trailing) *> Main Pgm - SET In-Main-Module TO TRUE - IF Source-Line-No > 0 - READ Expand-Code END-READ - END-IF - ELSE *> COPY - SET In-Copybook TO TRUE - END-IF - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 520-Expand-Code-Record. - IF In-Main-Module - ADD 1 To SPI-Current-Line-No - READ Source-Code AT END NEXT SENTENCE END-READ - ADD 1 TO Source-Line-No - MOVE SPACES TO Detail-Line-S - MOVE Source-Line-No TO DLS-Line-No - MOVE SCR-1-128 TO DLS-Statement -GC0410 IF SCR-7 = "/" -GC0410 MOVE 0 TO Lines-Left -GC0410 END-IF - PERFORM 530-Generate-Source-Line - IF SCR-129-256 NOT = SPACES - MOVE SPACES TO Detail-Line-S - MOVE SCR-129-256 TO DLS-Statement - PERFORM 530-Generate-Source-Line - END-IF - ELSE - IF Expand-Code-Rec NOT = SPACES - MOVE SPACES TO Detail-Line-S - MOVE ECR-1-128 TO DLS-Statement - PERFORM 530-Generate-Source-Line - IF ECR-129-256 NOT = SPACES - MOVE SPACES TO Detail-Line-S - MOVE ECR-129-256 TO DLS-Statement - PERFORM 530-Generate-Source-Line - END-IF - END-IF - END-IF - . - *>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - 530-Generate-Source-Line. - IF Lines-Left < 1 - IF F-First-Record = "Y" - MOVE "N" TO F-First-Record - WRITE Report-Rec FROM Heading-1S BEFORE 1 - ELSE - MOVE SPACES TO Report-Rec - WRITE Report-Rec BEFORE PAGE - MOVE SPACES TO Report-Rec - WRITE Report-Rec BEFORE 1 - WRITE Report-Rec FROM Heading-1S BEFORE 1 - END-IF - WRITE Report-Rec FROM Heading-2 BEFORE 1 - WRITE Report-Rec FROM Heading-4S BEFORE 1 - WRITE Report-Rec FROM Heading-5S BEFORE 1 - COMPUTE - Lines-Left = Lines-Per-Page - 4 - END-COMPUTE - END-IF - WRITE Report-Rec FROM Detail-Line-S BEFORE 1 - MOVE SPACES TO Detail-Line-S - SUBTRACT 1 FROM Lines-Left - . - - END PROGRAM LISTING. diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.coffee b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.coffee deleted file mode 100644 index 2cbd1df..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.coffee +++ /dev/null @@ -1,27 +0,0 @@ -# function arrows - -methodA:-> 'A' -methodB:=> 'B' -methodC:()=> 'C' -methodD:()-> 'D' -methodE:(a,b)-> 'E' -methodF:(c,d)-> 'F' --> 'G' -=> 'H' - -(-> 'I') -(=> 'J') - -# strings - -"#{wow}" -"w#{wow}w" -"#wow" -"wow#" -"w#ow" - -'#{wow}' -'w#{wow}w' -'#wow' -'wow#' -'w#ow' diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.cpp b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.cpp deleted file mode 100644 index 334e7ca..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.cpp +++ /dev/null @@ -1,2363 +0,0 @@ -/*************************************************************************** - ansigenerator.cpp - description - ------------------- - begin : Jul 5 2004 - copyright : (C) 2004 by André Simon - email : andre.simon1@gmx.de - ***************************************************************************/ - -/*************************************************************************** - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ - -#include "ansigenerator.h" - -using namespace std; - -namespace highlight { - - -string AnsiGenerator::getOpenTag(const string&font, - const string&fgCol, const string&bgCol) { - ostringstream s; - s << "\033["< -#include -#include -#include - -#include "codegenerator.h" -#include "charcodes.h" -#include "version.h" - -namespace highlight { - -/** - \brief This class generates ANSI escape sequences. - - It contains information about the resulting document structure (document - header and footer), the colour system, white space handling and text - formatting attributes. - -* @author Andre Simon -*/ - -class AnsiGenerator : public highlight::CodeGenerator - { - public: - - /** Constructor - \param colourTheme Name of Colour theme to use - */ - AnsiGenerator( const string &colourTheme); - AnsiGenerator(); - ~AnsiGenerator(); - - /** prints document header - \param title Title of the document - */ - string getHeader(const string & title); - - /** Prints document footer*/ - string getFooter(); - - /** Prints document body*/ - void printBody(); - - private: - - /** \return escaped character*/ - virtual string maskCharacter(unsigned char ); - - - /** gibt ANSI-"Tags" zurueck (Farbindex+bold+kursiv)*/ - string getOpenTag(const string&font, - const string&fgCol, const string&bgCol=""); - - - - string getMatchingOpenTag(unsigned int styleID); - string getMatchingCloseTag(unsigned int styleID); - }; - -} -#endif -/* - * Copyright (c) 1998,1999,2000,2001,2002 Tal Davidson. All rights reserved. - * - * ASBeautifier.cpp - * by Tal Davidson (davidsont@bigfoot.com) - * This file is a part of "Artistic Style" - an indentater and reformatter - * of C, C, C# and Java source files. - * - * The "Artistic Style" project, including all files needed to compile it, - * is free software; you can redistribute it and/or use it and/or modify it - * under the terms of the GNU General Public License as published - * by the Free Software Foundation; either version 2 of the License, - * or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU General Public - * License along with this program. - * - * Patches: - * 18 March 1999 - Brian Rampel - - * Fixed inverse insertion of spaces vs. tabs when in -t mode. - * 08 may 2004 - * applied ASBeautifier.cpp.BITFIELD.patch.bz2 - */ - -#include "compiler_defines.h" -#include "ASBeautifier.h" - -#include -#include -#include -#include -#include - - -#define INIT_CONTAINER(container, value) {if ( (container) != NULL ) delete (container); (container) = (value); } -#define DELETE_CONTAINER(container) {if ( (container) != NULL ) delete (container) ; } - -#ifdef USES_NAMESPACE -using namespace std; -#endif - - - - -#ifdef USES_NAMESPACE -namespace astyle - { -#endif - - bool ASBeautifier::calledInitStatic = false; - - vector ASBeautifier::headers; - vector ASBeautifier::nonParenHeaders; - vector ASBeautifier::preBlockStatements; - vector ASBeautifier::assignmentOperators; - vector ASBeautifier::nonAssignmentOperators; - - /* - * initialize the static vars - */ - void ASBeautifier::initStatic() - { - if (calledInitStatic) - return; - - calledInitStatic = true; - - headers.push_back(&AS_IF); - headers.push_back(&AS_ELSE); - headers.push_back(&AS_FOR); - headers.push_back(&AS_WHILE); - headers.push_back(&AS_DO); - headers.push_back(&AS_TRY); - headers.push_back(&AS_CATCH); - headers.push_back(&AS_FINALLY); - headers.push_back(&AS_SYNCHRONIZED); - headers.push_back(&AS_SWITCH); - headers.push_back(&AS_CASE); - headers.push_back(&AS_DEFAULT); - headers.push_back(&AS_FOREACH); - headers.push_back(&AS_LOCK); - headers.push_back(&AS_UNSAFE); - headers.push_back(&AS_FIXED); - headers.push_back(&AS_GET); - headers.push_back(&AS_SET); - headers.push_back(&AS_ADD); - headers.push_back(&AS_REMOVE); - //headers.push_back(&AS_PUBLIC); - //headers.push_back(&AS_PRIVATE); - //headers.push_back(&AS_PROTECTED); - - //headers.push_back(&AS_OPERATOR); - headers.push_back(&AS_TEMPLATE); - headers.push_back(&AS_CONST); - /**/ - headers.push_back(&AS_STATIC); - headers.push_back(&AS_EXTERN); - - nonParenHeaders.push_back(&AS_ELSE); - nonParenHeaders.push_back(&AS_DO); - nonParenHeaders.push_back(&AS_TRY); - nonParenHeaders.push_back(&AS_FINALLY); - nonParenHeaders.push_back(&AS_STATIC); - nonParenHeaders.push_back(&AS_CONST); - nonParenHeaders.push_back(&AS_EXTERN); - nonParenHeaders.push_back(&AS_CASE); - nonParenHeaders.push_back(&AS_DEFAULT); - nonParenHeaders.push_back(&AS_UNSAFE); - nonParenHeaders.push_back(&AS_GET); - nonParenHeaders.push_back(&AS_SET); - nonParenHeaders.push_back(&AS_ADD); - nonParenHeaders.push_back(&AS_REMOVE); - - - - nonParenHeaders.push_back(&AS_PUBLIC); - nonParenHeaders.push_back(&AS_PRIVATE); - nonParenHeaders.push_back(&AS_PROTECTED); - nonParenHeaders.push_back(&AS_TEMPLATE); - nonParenHeaders.push_back(&AS_CONST); - /// nonParenHeaders.push_back(&AS_ASM); - - preBlockStatements.push_back(&AS_CLASS); - preBlockStatements.push_back(&AS_STRUCT); - preBlockStatements.push_back(&AS_UNION); - preBlockStatements.push_back(&AS_INTERFACE); - preBlockStatements.push_back(&AS_NAMESPACE); - preBlockStatements.push_back(&AS_THROWS); - preBlockStatements.push_back(&AS_EXTERN); - - assignmentOperators.push_back(&AS_ASSIGN); - assignmentOperators.push_back(&AS_PLUS_ASSIGN); - assignmentOperators.push_back(&AS_MINUS_ASSIGN); - assignmentOperators.push_back(&AS_MULT_ASSIGN); - assignmentOperators.push_back(&AS_DIV_ASSIGN); - assignmentOperators.push_back(&AS_MOD_ASSIGN); - assignmentOperators.push_back(&AS_OR_ASSIGN); - assignmentOperators.push_back(&AS_AND_ASSIGN); - assignmentOperators.push_back(&AS_XOR_ASSIGN); - assignmentOperators.push_back(&AS_GR_GR_GR_ASSIGN); - assignmentOperators.push_back(&AS_GR_GR_ASSIGN); - assignmentOperators.push_back(&AS_LS_LS_LS_ASSIGN); - assignmentOperators.push_back(&AS_LS_LS_ASSIGN); - - assignmentOperators.push_back(&AS_RETURN); - - nonAssignmentOperators.push_back(&AS_EQUAL); - nonAssignmentOperators.push_back(&AS_PLUS_PLUS); - nonAssignmentOperators.push_back(&AS_MINUS_MINUS); - nonAssignmentOperators.push_back(&AS_NOT_EQUAL); - nonAssignmentOperators.push_back(&AS_GR_EQUAL); - nonAssignmentOperators.push_back(&AS_GR_GR_GR); - nonAssignmentOperators.push_back(&AS_GR_GR); - nonAssignmentOperators.push_back(&AS_LS_EQUAL); - nonAssignmentOperators.push_back(&AS_LS_LS_LS); - nonAssignmentOperators.push_back(&AS_LS_LS); - nonAssignmentOperators.push_back(&AS_ARROW); - nonAssignmentOperators.push_back(&AS_AND); - nonAssignmentOperators.push_back(&AS_OR); - } - - /** - * ASBeautifier's constructor - */ - ASBeautifier::ASBeautifier() - { - initStatic(); - - waitingBeautifierStack = NULL; - activeBeautifierStack = NULL; - waitingBeautifierStackLengthStack = NULL; - activeBeautifierStackLengthStack = NULL; - - headerStack = NULL; - tempStacks = NULL; - blockParenDepthStack = NULL; - blockStatementStack = NULL; - parenStatementStack = NULL; - bracketBlockStateStack = NULL; - inStatementIndentStack = NULL; - inStatementIndentStackSizeStack = NULL; - parenIndentStack = NULL; - sourceIterator = NULL; - - isMinimalConditinalIndentSet = false; - shouldForceTabIndentation = false; - - setSpaceIndentation(4); - setMaxInStatementIndentLength(40); - setClassIndent(false); - setSwitchIndent(false); - setCaseIndent(false); - setBlockIndent(false); - setBracketIndent(false); - setNamespaceIndent(false); - setLabelIndent(false); - setEmptyLineFill(false); - setCStyle(); - setPreprocessorIndent(false); - } - - ASBeautifier::ASBeautifier(const ASBeautifier &other) - { - waitingBeautifierStack = NULL; - activeBeautifierStack = NULL; - waitingBeautifierStackLengthStack = NULL; - activeBeautifierStackLengthStack = NULL; - - headerStack = new vector; - *headerStack = *other.headerStack; - - tempStacks = new vector< vector* >; - vector< vector* >::iterator iter; - for (iter = other.tempStacks->begin(); - iter != other.tempStacks->end(); - ++iter) - { - vector *newVec = new vector; - *newVec = **iter; - tempStacks->push_back(newVec); - } - blockParenDepthStack = new vector; - *blockParenDepthStack = *other.blockParenDepthStack; - - blockStatementStack = new vector; - *blockStatementStack = *other.blockStatementStack; - - parenStatementStack = new vector; - *parenStatementStack = *other.parenStatementStack; - - bracketBlockStateStack = new vector; - *bracketBlockStateStack = *other.bracketBlockStateStack; - - inStatementIndentStack = new vector; - *inStatementIndentStack = *other.inStatementIndentStack; - - inStatementIndentStackSizeStack = new vector; - *inStatementIndentStackSizeStack = *other.inStatementIndentStackSizeStack; - - parenIndentStack = new vector; - *parenIndentStack = *other.parenIndentStack; - - sourceIterator = other.sourceIterator; - - indentString = other.indentString; - currentHeader = other.currentHeader; - previousLastLineHeader = other.previousLastLineHeader; - immediatelyPreviousAssignmentOp = other.immediatelyPreviousAssignmentOp; - isInQuote = other.isInQuote; - isInComment = other.isInComment; - isInCase = other.isInCase; - isInQuestion = other.isInQuestion; - isInStatement =other. isInStatement; - isInHeader = other.isInHeader; - isCStyle = other.isCStyle; - isInOperator = other.isInOperator; - isInTemplate = other.isInTemplate; - isInConst = other.isInConst; - classIndent = other.classIndent; - isInClassHeader = other.isInClassHeader; - isInClassHeaderTab = other.isInClassHeaderTab; - switchIndent = other.switchIndent; - caseIndent = other.caseIndent; - namespaceIndent = other.namespaceIndent; - bracketIndent = other.bracketIndent; - blockIndent = other.blockIndent; - labelIndent = other.labelIndent; - preprocessorIndent = other.preprocessorIndent; - parenDepth = other.parenDepth; - indentLength = other.indentLength; - blockTabCount = other.blockTabCount; - leadingWhiteSpaces = other.leadingWhiteSpaces; - maxInStatementIndent = other.maxInStatementIndent; - templateDepth = other.templateDepth; - quoteChar = other.quoteChar; - prevNonSpaceCh = other.prevNonSpaceCh; - currentNonSpaceCh = other.currentNonSpaceCh; - currentNonLegalCh = other.currentNonLegalCh; - prevNonLegalCh = other.prevNonLegalCh; - isInConditional = other.isInConditional; - minConditionalIndent = other.minConditionalIndent; - prevFinalLineSpaceTabCount = other.prevFinalLineSpaceTabCount; - prevFinalLineTabCount = other.prevFinalLineTabCount; - emptyLineFill = other.emptyLineFill; - probationHeader = other.probationHeader; - isInDefine = other.isInDefine; - isInDefineDefinition = other.isInDefineDefinition; - backslashEndsPrevLine = other.backslashEndsPrevLine; - defineTabCount = other.defineTabCount; - } - - /** - * ASBeautifier's destructor - */ - ASBeautifier::~ASBeautifier() - { - DELETE_CONTAINER( headerStack ); - DELETE_CONTAINER( tempStacks ); - DELETE_CONTAINER( blockParenDepthStack ); - DELETE_CONTAINER( blockStatementStack ); - DELETE_CONTAINER( parenStatementStack ); - DELETE_CONTAINER( bracketBlockStateStack ); - DELETE_CONTAINER( inStatementIndentStack ); - DELETE_CONTAINER( inStatementIndentStackSizeStack ); - DELETE_CONTAINER( parenIndentStack ); - - // DELETE_CONTAINER( sourceIterator ); - } - - /** - * initialize the ASBeautifier. - * - * init() should be called every time a ABeautifier object is to start - * beautifying a NEW source file. - * init() recieves a pointer to a DYNAMICALLY CREATED ASSourceIterator object - * that will be used to iterate through the source code. This object will be - * deleted during the ASBeautifier's destruction, and thus should not be - * deleted elsewhere. - * - * @param iter a pointer to the DYNAMICALLY CREATED ASSourceIterator object. - */ - void ASBeautifier::init(ASSourceIterator *iter) - - { - sourceIterator = iter; - init(); - } - - /** - * initialize the ASBeautifier. - */ - void ASBeautifier::init() - { - INIT_CONTAINER( waitingBeautifierStack, new vector ); - INIT_CONTAINER( activeBeautifierStack, new vector ); - - INIT_CONTAINER( waitingBeautifierStackLengthStack, new vector ); - INIT_CONTAINER( activeBeautifierStackLengthStack, new vector ); - - INIT_CONTAINER( headerStack, new vector ); - INIT_CONTAINER( tempStacks, new vector< vector* > ); - tempStacks->push_back(new vector); - - INIT_CONTAINER( blockParenDepthStack, new vector ); - INIT_CONTAINER( blockStatementStack, new vector ); - INIT_CONTAINER( parenStatementStack, new vector ); - - INIT_CONTAINER( bracketBlockStateStack, new vector ); - bracketBlockStateStack->push_back(true); - - INIT_CONTAINER( inStatementIndentStack, new vector ); - INIT_CONTAINER( inStatementIndentStackSizeStack, new vector ); - inStatementIndentStackSizeStack->push_back(0); - INIT_CONTAINER( parenIndentStack, new vector ); - - immediatelyPreviousAssignmentOp = NULL; - previousLastLineHeader = NULL; - - isInQuote = false; - isInComment = false; - isInStatement = false; - isInCase = false; - isInQuestion = false; - isInClassHeader = false; - isInClassHeaderTab = false; - isInHeader = false; - isInOperator = false; - isInTemplate = false; - isInConst = false; - isInConditional = false; - templateDepth = 0; - parenDepth=0; - blockTabCount = 0; - leadingWhiteSpaces = 0; - prevNonSpaceCh = '{'; - currentNonSpaceCh = '{'; - prevNonLegalCh = '{'; - currentNonLegalCh = '{'; - prevFinalLineSpaceTabCount = 0; - prevFinalLineTabCount = 0; - probationHeader = NULL; - backslashEndsPrevLine = false; - isInDefine = false; - isInDefineDefinition = false; - defineTabCount = 0; - } - - /** - * set indentation style to ANSI C/C++. - */ - void ASBeautifier::setCStyle() - { - isCStyle = true; - } - - /** - * set indentation style to Java / K&R. - */ - void ASBeautifier::setJavaStyle() - { - isCStyle = false; - } - - /** - * indent using one tab per indentation - */ - void ASBeautifier::setTabIndentation(int length, bool forceTabs) - { - indentString = "\t"; - indentLength = length; - shouldForceTabIndentation = forceTabs; - - if (!isMinimalConditinalIndentSet) - minConditionalIndent = indentLength * 2; - } - - /** - - * indent using a number of spaces per indentation. - * - * @param length number of spaces per indent. - */ - void ASBeautifier::setSpaceIndentation(int length) - { - indentString=string(length, ' '); - indentLength = length; - - if (!isMinimalConditinalIndentSet) - minConditionalIndent = indentLength * 2; - } - - /** - * set the maximum indentation between two lines in a multi-line statement. - * - * @param max maximum indentation length. - */ - void ASBeautifier::setMaxInStatementIndentLength(int max) - { - maxInStatementIndent = max; - } - - /** - * set the minimum indentation between two lines in a multi-line condition. - * - * @param min minimal indentation length. - */ - void ASBeautifier::setMinConditionalIndentLength(int min) - { - minConditionalIndent = min; - isMinimalConditinalIndentSet = true; - } - - /** - * set the state of the bracket indentation option. If true, brackets will - * be indented one additional indent. - * - * @param state state of option. - */ - void ASBeautifier::setBracketIndent(bool state) - { - bracketIndent = state; - } - - /** - * set the state of the block indentation option. If true, entire blocks - * will be indented one additional indent, similar to the GNU indent style. - * - * @param state state of option. - */ - void ASBeautifier::setBlockIndent(bool state) - { - if (state) - setBracketIndent(false); // so that we don't have both bracket and block indent - blockIndent = state; - } - - /** - * set the state of the class indentation option. If true, C++ class - * definitions will be indented one additional indent. - * - * @param state state of option. - */ - void ASBeautifier::setClassIndent(bool state) - { - classIndent = state; - } - - /** - * set the state of the switch indentation option. If true, blocks of 'switch' - * statements will be indented one additional indent. - * - * @param state state of option. - */ - void ASBeautifier::setSwitchIndent(bool state) - { - switchIndent = state; - } - - /** - * set the state of the case indentation option. If true, lines of 'case' - * statements will be indented one additional indent. - * - * @param state state of option. - */ - void ASBeautifier::setCaseIndent(bool state) - { - caseIndent = state; - } - /** - * set the state of the namespace indentation option. - * If true, blocks of 'namespace' statements will be indented one - * additional indent. Otherwise, NO indentation will be added. - * - * @param state state of option. - */ - void ASBeautifier::setNamespaceIndent(bool state) - { - namespaceIndent = state; - } - - /** - * set the state of the label indentation option. - * If true, labels will be indented one indent LESS than the - * current indentation level. - * If false, labels will be flushed to the left with NO - * indent at all. - * - * @param state state of option. - */ - void ASBeautifier::setLabelIndent(bool state) - { - labelIndent = state; - } - - /** - * set the state of the preprocessor indentation option. - * If true, multiline #define statements will be indented. - * - * @param state state of option. - */ - void ASBeautifier::setPreprocessorIndent(bool state) - { - preprocessorIndent = state; - } - - /** - * set the state of the empty line fill option. - * If true, empty lines will be filled with the whitespace. - * of their previous lines. - * If false, these lines will remain empty. - * - * @param state state of option. - */ - void ASBeautifier::setEmptyLineFill(bool state) - { - emptyLineFill = state; - } - - /** - * check if there are any indented lines ready to be read by nextLine() - * - * @return are there any indented lines ready? - */ - bool ASBeautifier::hasMoreLines() const - { - return sourceIterator->hasMoreLines(); - } - - /** - * get the next indented line. - * - * @return indented line. - */ - string ASBeautifier::nextLine() - { - return beautify(sourceIterator->nextLine()); - } - - /** - * beautify a line of source code. - * every line of source code in a source code file should be sent - * one after the other to the beautify method. - * - * @return the indented line. - * @param originalLine the original unindented line. - */ - string ASBeautifier::beautify(const string &originalLine) - { - string line; - bool isInLineComment = false; - bool lineStartsInComment = false; - bool isInClass = false; - bool isInSwitch = false; - bool isImmediatelyAfterConst = false; - bool isSpecialChar = false; - - char ch = ' '; - char prevCh; - string outBuffer; // the newly idented line is bufferd here - int tabCount = 0; - const string *lastLineHeader = NULL; - bool closingBracketReached = false; - int spaceTabCount = 0; - char tempCh; - unsigned int headerStackSize = headerStack->size(); - //bool isLineInStatement = isInStatement; - bool shouldIndentBrackettedLine = true; - int lineOpeningBlocksNum = 0; - int lineClosingBlocksNum = 0; - bool previousLineProbation = (probationHeader != NULL); - unsigned int i; - - currentHeader = NULL; - - lineStartsInComment = isInComment; - - // handle and remove white spaces around the line: - // If not in comment, first find out size of white space before line, - // so that possible comments starting in the line continue in - // relation to the preliminary white-space. - if (!isInComment) - { - leadingWhiteSpaces = 0; - while (leadingWhiteSpacesinit(); - //defineBeautifier->isInDefineDefinition = true; - //defineBeautifier->beautify(""); - activeBeautifierStack->push_back(defineBeautifier); - } - else - { - // the is the cloned beautifier that is in charge of indenting the #define. - isInDefine = true; - } - } - else if (preproc.COMPARE(0, 2, string("if")) == 0) - { - // push a new beautifier into the stack - waitingBeautifierStackLengthStack->push_back(waitingBeautifierStack->size()); - activeBeautifierStackLengthStack->push_back(activeBeautifierStack->size()); - waitingBeautifierStack->push_back(new ASBeautifier(*this)); - } - else if (preproc.COMPARE(0, 4/*2*/, string("else")) == 0) - { - if (!waitingBeautifierStack->empty()) - { - // MOVE current waiting beautifier to active stack. - activeBeautifierStack->push_back(waitingBeautifierStack->back()); - waitingBeautifierStack->pop_back(); - } - } - else if (preproc.COMPARE(0, 4, string("elif")) == 0) - { - if (!waitingBeautifierStack->empty()) - { - // append a COPY current waiting beautifier to active stack, WITHOUT deleting the original. - activeBeautifierStack->push_back( new ASBeautifier( *(waitingBeautifierStack->back()) ) ); - } - } - else if (preproc.COMPARE(0, 5, string("endif")) == 0) - { - unsigned int stackLength; - ASBeautifier *beautifier; - - if (!waitingBeautifierStackLengthStack->empty()) - { - stackLength = waitingBeautifierStackLengthStack->back(); - waitingBeautifierStackLengthStack->pop_back(); - while (waitingBeautifierStack->size() > stackLength) - { - beautifier = waitingBeautifierStack->back(); - waitingBeautifierStack->pop_back(); - delete beautifier; - } - } - - if (!activeBeautifierStackLengthStack->empty()) - { - stackLength = activeBeautifierStackLengthStack->back(); - activeBeautifierStackLengthStack->pop_back(); - while (activeBeautifierStack->size() > stackLength) - { - beautifier = activeBeautifierStack->back(); - activeBeautifierStack->pop_back(); - delete beautifier; - } - } - - - } - } - - // check if the last char is a backslash - if(line.length() > 0) - backslashEndsPrevLine = (line[line.length() - 1] == '\\'); - else - backslashEndsPrevLine = false; - - // check if this line ends a multi-line #define - // if so, use the #define's cloned beautifier for the line's indentation - // and then remove it from the active beautifier stack and delete it. - if (!backslashEndsPrevLine && isInDefineDefinition && !isInDefine) - { - string beautifiedLine; - ASBeautifier *defineBeautifier; - - isInDefineDefinition = false; - defineBeautifier = activeBeautifierStack->back(); - activeBeautifierStack->pop_back(); - - beautifiedLine = defineBeautifier->beautify(line); - delete defineBeautifier; - return beautifiedLine; - } - - // unless this is a multi-line #define, return this precompiler line as is. - if (!isInDefine && !isInDefineDefinition) - return originalLine; - } - - // if there exists any worker beautifier in the activeBeautifierStack, - // then use it instead of me to indent the current line. - if (!isInDefine && activeBeautifierStack != NULL && !activeBeautifierStack->empty()) - { - return activeBeautifierStack->back()->beautify(line); - } - - // calculate preliminary indentation based on data from past lines - if (!inStatementIndentStack->empty()) - spaceTabCount = inStatementIndentStack->back(); - - - for (i=0; i0 && (*headerStack)[i-1] != &AS_OPEN_BRACKET - && (*headerStack)[i] == &AS_OPEN_BRACKET))) - ++tabCount; - - if (isCStyle && !namespaceIndent && i >= 1 - && (*headerStack)[i-1] == &AS_NAMESPACE - && (*headerStack)[i] == &AS_OPEN_BRACKET) - --tabCount; - - if (isCStyle && i >= 1 - && (*headerStack)[i-1] == &AS_CLASS - && (*headerStack)[i] == &AS_OPEN_BRACKET ) - { - if (classIndent) - ++tabCount; - isInClass = true; - } - - // is the switchIndent option is on, indent switch statements an additional indent. - else if (switchIndent && i > 1 && - (*headerStack)[i-1] == &AS_SWITCH && - (*headerStack)[i] == &AS_OPEN_BRACKET - ) - { - ++tabCount; - isInSwitch = true; - } - - } - - if (!lineStartsInComment - && isCStyle - && isInClass - && classIndent - && headerStackSize >= 2 - &&(*headerStack)[headerStackSize-2] == &AS_CLASS - && (*headerStack)[headerStackSize-1] == &AS_OPEN_BRACKET - && line[0] == '}') - --tabCount; - - else if (!lineStartsInComment - && isInSwitch - && switchIndent - && headerStackSize >= 2 - && (*headerStack)[headerStackSize-2] == &AS_SWITCH - && (*headerStack)[headerStackSize-1] == &AS_OPEN_BRACKET - && line[0] == '}') - --tabCount; - - if (isInClassHeader) - { - isInClassHeaderTab = true; - tabCount += 2; - } - - if (isInConditional) - { - --tabCount; - } - - - // parse characters in the current line. - - for (i=0; ipush_back(probationHeader); - - // handle the specific probation header - isInConditional = (probationHeader == &AS_SYNCHRONIZED); - if (probationHeader == &AS_CONST) - isImmediatelyAfterConst = true; - // isInConst = true; - /* TODO: - * There is actually no more need for the global isInConst variable. - * The only reason for checking const is to see if there is a const - * immediately before an open-bracket. - * Since CONST is now put into probation and is checked during itspost-char, - * isImmediatelyAfterConst can be set by its own... - */ - - isInStatement = false; - // if the probation comes from the previous line, then indent by 1 tab count. - if (previousLineProbation && ch == '{') - tabCount++; - previousLineProbation = false; - } - - // dismiss the probation header - probationHeader = NULL; - } - - prevNonSpaceCh = currentNonSpaceCh; - currentNonSpaceCh = ch; - if (!isLegalNameChar(ch) && ch != ',' && ch != ';' ) - { - prevNonLegalCh = currentNonLegalCh; - currentNonLegalCh = ch; - } - - //if (isInConst) - //{ - // isInConst = false; - // isImmediatelyAfterConst = true; - //} - - if (isInHeader) - { - isInHeader = false; - currentHeader = headerStack->back(); - } - else - currentHeader = NULL; - - if (isCStyle && isInTemplate - && (ch == '<' || ch == '>') - && findHeader(line, i, nonAssignmentOperators) == NULL) //; - { - if (ch == '<') - { - ++templateDepth; - } - else if (ch == '>') - { - if (--templateDepth <= 0) - { - if (isInTemplate) - ch = ';'; - else - ch = 't'; - isInTemplate = false; - templateDepth = 0; - } - - } - } - - // handle parenthesies - if (ch == '(' || ch == '[' || ch == ')' || ch == ']') - { - if (ch == '(' || ch == '[') - { - if (parenDepth == 0) - { - parenStatementStack->push_back(isInStatement); - isInStatement = true; - } - parenDepth++; - - inStatementIndentStackSizeStack->push_back(inStatementIndentStack->size()); - - if (currentHeader != NULL) - registerInStatementIndent(line, i, spaceTabCount, minConditionalIndent/*indentLength*2*/, true); - else - registerInStatementIndent(line, i, spaceTabCount, 0, true); - } - else if (ch == ')' || ch == ']') - { - parenDepth--; - if (parenDepth == 0) - { - isInStatement = parenStatementStack->back(); - parenStatementStack->pop_back(); - ch = ' '; - - isInConditional = false; - } - - if (!inStatementIndentStackSizeStack->empty()) - { - unsigned int previousIndentStackSize = inStatementIndentStackSizeStack->back(); - inStatementIndentStackSizeStack->pop_back(); - while (previousIndentStackSize < inStatementIndentStack->size()) - inStatementIndentStack->pop_back(); - - if (!parenIndentStack->empty()) - { - int poppedIndent = parenIndentStack->back(); - parenIndentStack->pop_back(); - - if (i == 0) - spaceTabCount = poppedIndent; - } - } - } - - continue; - } - - - if (ch == '{') - { - bool isBlockOpener = false; - - // first, check if '{' is a block-opener or an static-array opener - isBlockOpener = ( (prevNonSpaceCh == '{' && bracketBlockStateStack->back()) - || prevNonSpaceCh == '}' - || prevNonSpaceCh == ')' - || prevNonSpaceCh == ';' - || isInClassHeader - || isBlockOpener - || isImmediatelyAfterConst - || (isInDefine && - (prevNonSpaceCh == '(' - || prevNonSpaceCh == '_' - || isalnum(prevNonSpaceCh))) ); - - isInClassHeader = false; - if (!isBlockOpener && currentHeader != NULL) - { - for (unsigned int n=0; n < nonParenHeaders.size(); n++) - if (currentHeader == nonParenHeaders[n]) - { - isBlockOpener = true; - break; - } - } - bracketBlockStateStack->push_back(isBlockOpener); - if (!isBlockOpener) - { - inStatementIndentStackSizeStack->push_back(inStatementIndentStack->size()); - registerInStatementIndent(line, i, spaceTabCount, 0, true); - parenDepth++; - if (i == 0) - shouldIndentBrackettedLine = false; - - continue; - } - - // this bracket is a block opener... - - ++lineOpeningBlocksNum; - - if (isInClassHeader) - isInClassHeader = false; - if (isInClassHeaderTab) - { - isInClassHeaderTab = false; - tabCount -= 2; - } - - blockParenDepthStack->push_back(parenDepth); - blockStatementStack->push_back(isInStatement); - - inStatementIndentStackSizeStack->push_back(inStatementIndentStack->size()); - - blockTabCount += isInStatement? 1 : 0; - parenDepth = 0; - isInStatement = false; - - tempStacks->push_back(new vector); - headerStack->push_back(&AS_OPEN_BRACKET); - lastLineHeader = &AS_OPEN_BRACKET; // <------ - - continue; - } - - //check if a header has been reached - if (prevCh == ' ') - { - bool isIndentableHeader = true; - const string *newHeader = findHeader(line, i, headers); - if (newHeader != NULL) - { - // if we reached here, then this is a header... - isInHeader = true; - - vector *lastTempStack; - if (tempStacks->empty()) - lastTempStack = NULL; - else - lastTempStack = tempStacks->back(); - - // if a new block is opened, push a new stack into tempStacks to hold the - // future list of headers in the new block. - - // take care of the special case: 'else if (...)' - if (newHeader == &AS_IF && lastLineHeader == &AS_ELSE) - { - //spaceTabCount += indentLength; // to counter the opposite addition that occurs when the 'if' is registered below... - headerStack->pop_back(); - } - - // take care of 'else' - else if (newHeader == &AS_ELSE) - { - if (lastTempStack != NULL) - { - int indexOfIf = indexOf(*lastTempStack, &AS_IF); // <--- - if (indexOfIf != -1) - { - // recreate the header list in headerStack up to the previous 'if' - // from the temporary snapshot stored in lastTempStack. - int restackSize = lastTempStack->size() - indexOfIf - 1; - for (int r=0; rpush_back(lastTempStack->back()); - lastTempStack->pop_back(); - } - if (!closingBracketReached) - tabCount += restackSize; - } - /* - * If the above if is not true, i.e. no 'if' before the 'else', - * then nothing beautiful will come out of this... - * I should think about inserting an Exception here to notify the caller of this... - */ - } - } - - // check if 'while' closes a previous 'do' - else if (newHeader == &AS_WHILE) - { - if (lastTempStack != NULL) - { - int indexOfDo = indexOf(*lastTempStack, &AS_DO); // <--- - if (indexOfDo != -1) - { - // recreate the header list in headerStack up to the previous 'do' - // from the temporary snapshot stored in lastTempStack. - int restackSize = lastTempStack->size() - indexOfDo - 1; - for (int r=0; rpush_back(lastTempStack->back()); - lastTempStack->pop_back(); - } - if (!closingBracketReached) - tabCount += restackSize; - } - } - } - // check if 'catch' closes a previous 'try' or 'catch' - else if (newHeader == &AS_CATCH || newHeader == &AS_FINALLY) - { - if (lastTempStack != NULL) - { - int indexOfTry = indexOf(*lastTempStack, &AS_TRY); - if (indexOfTry == -1) - indexOfTry = indexOf(*lastTempStack, &AS_CATCH); - if (indexOfTry != -1) - { - // recreate the header list in headerStack up to the previous 'try' - // from the temporary snapshot stored in lastTempStack. - int restackSize = lastTempStack->size() - indexOfTry - 1; - for (int r=0; rpush_back(lastTempStack->back()); - lastTempStack->pop_back(); - } - - if (!closingBracketReached) - tabCount += restackSize; - } - } - } - else if (newHeader == &AS_CASE) - { - isInCase = true; - if (!caseIndent) - --tabCount; - } - else if(newHeader == &AS_DEFAULT) - { - isInCase = true; - if (!caseIndent) - --tabCount; - } - else if (newHeader == &AS_PUBLIC || newHeader == &AS_PROTECTED || newHeader == &AS_PRIVATE) - { - if (isCStyle && !isInClassHeader) - --tabCount; - isIndentableHeader = false; - } - //else if ((newHeader == &STATIC || newHeader == &SYNCHRONIZED) && - // !headerStack->empty() && - // (headerStack->back() == &STATIC || headerStack->back() == &SYNCHRONIZED)) - //{ - // isIndentableHeader = false; - //} - else if (newHeader == &AS_STATIC - || newHeader == &AS_SYNCHRONIZED - || (newHeader == &AS_CONST && isCStyle)) - { - if (!headerStack->empty() && - (headerStack->back() == &AS_STATIC - || headerStack->back() == &AS_SYNCHRONIZED - || headerStack->back() == &AS_CONST)) - { - isIndentableHeader = false; - } - else - { - isIndentableHeader = false; - probationHeader = newHeader; - } - } - else if (newHeader == &AS_CONST) - { - // this will be entered only if NOT in C style - // since otherwise the CONST would be found to be a probstion header... - - //if (isCStyle) - // isInConst = true; - isIndentableHeader = false; - } - /* - else if (newHeader == &OPERATOR) - { - if (isCStyle) - isInOperator = true; - isIndentableHeader = false; - } - */ - else if (newHeader == &AS_TEMPLATE) - { - if (isCStyle) - isInTemplate = true; - isIndentableHeader = false; - } - - - if (isIndentableHeader) - { - // 3.2.99 - //spaceTabCount-=indentLength; - headerStack->push_back(newHeader); - isInStatement = false; - if (indexOf(nonParenHeaders, newHeader) == -1) - { - isInConditional = true; - } - lastLineHeader = newHeader; - } - else - isInHeader = false; - - //lastLineHeader = newHeader; - - outBuffer.append(newHeader->substr(1)); - i += newHeader->length() - 1; - - continue; - } - } - - if (isCStyle && !isalpha(prevCh) - && line.COMPARE(i, 8, AS_OPERATOR) == 0 && !isalnum(line[i+8])) - { - isInOperator = true; - outBuffer.append(AS_OPERATOR.substr(1)); - i += 7; - continue; - } - - if (ch == '?') - isInQuestion = true; - - - // special handling of 'case' statements - if (ch == ':') - { - if (line.length() > i+1 && line[i+1] == ':') // look for :: - { - ++i; - outBuffer.append(1, ':'); - ch = ' '; - continue; - } - - else if (isCStyle && isInClass && prevNonSpaceCh != ')') - { - // BEGIN Content of ASBeautifier.cpp.BITFIELD.patch: - - unsigned int chIndex; - char nextCh = 0; - for (chIndex = i+1; chIndex < line.length(); chIndex++) - if (!isWhiteSpace(line[chIndex])) - break; - if (chIndex< line.length()) - nextCh = line[chIndex]; - int nWord =0; - for (chIndex = 0; chIndex < i; chIndex++) - { - if (!isWhiteSpace(line[chIndex])) - { - nWord ++; - while (!isWhiteSpace(line[++chIndex])); - } - } - if ((nextCh >= '0' && nextCh <= '9') || (nWord >1)) - continue; - // END Content of ASBeautifier.cpp.BITFIELD.patch: - - --tabCount; - // found a 'private:' or 'public:' inside a class definition - // so do nothing special - } - - else if (isCStyle && isInClassHeader) - { - - // found a 'class A : public B' definition - // so do nothing special - } - - else if (isInQuestion) - { - isInQuestion = false; - } - else if (isCStyle && prevNonSpaceCh == ')') - { - isInClassHeader = true; - if (i==0) - tabCount += 2; - } - else - { - currentNonSpaceCh = ';'; // so that brackets after the ':' will appear as block-openers - if (isInCase) - { - isInCase = false; - ch = ';'; // from here on, treat char as ';' - } - // BEGIN content of ASBeautifier.cpp.BITFIELD.patch.bz2 - else // bitfield or labels - { - unsigned int chIndex; - char nextCh = 0; - for (chIndex = i+1; (isCStyle && chIndex < line.length()); chIndex++) - if (!isWhiteSpace(line[chIndex])) - break; - if (chIndex< line.length()) - nextCh = line[chIndex]; - - int nWord =0; - for (chIndex = 0; chIndex < i; chIndex++) - { - if (!isWhiteSpace(line[chIndex])) - { - nWord ++; - while (!isWhiteSpace(line[++chIndex])); - } - } - if (isCStyle && (nextCh >= '0' && nextCh <= '9') || (nWord >1)) - { - continue; - } - // END content of ASASBeautifier.cpp.BITFIELD.patch.bz2 - - else // is in a label (e.g. 'label1:') - { - if (labelIndent) - --tabCount; // unindent label by one indent - else - tabCount = 0; // completely flush indent to left - } - - // BEGIN content of ASASBeautifier.cpp.BITFIELD.patch.bz2 - } - // END content of ASASBeautifier.cpp.BITFIELD.patch.bz2 - - } - } - - if ((ch == ';' || (parenDepth>0 && ch == ',')) && !inStatementIndentStackSizeStack->empty()) - while ((unsigned int)inStatementIndentStackSizeStack->back() + (parenDepth>0 ? 1 : 0) < inStatementIndentStack->size()) - inStatementIndentStack->pop_back(); - - - // handle ends of statements - if ( (ch == ';' && parenDepth == 0) || ch == '}'/* || (ch == ',' && parenDepth == 0)*/) - { - if (ch == '}') - { - // first check if this '}' closes a previous block, or a static array... - if (!bracketBlockStateStack->empty()) - { - bool bracketBlockState = bracketBlockStateStack->back(); - bracketBlockStateStack->pop_back(); - if (!bracketBlockState) - { - if (!inStatementIndentStackSizeStack->empty()) - { - // this bracket is a static array - - unsigned int previousIndentStackSize = inStatementIndentStackSizeStack->back(); - inStatementIndentStackSizeStack->pop_back(); - while (previousIndentStackSize < inStatementIndentStack->size()) - inStatementIndentStack->pop_back(); - parenDepth--; - if (i == 0) - shouldIndentBrackettedLine = false; - - if (!parenIndentStack->empty()) - { - int poppedIndent = parenIndentStack->back(); - parenIndentStack->pop_back(); - if (i == 0) - spaceTabCount = poppedIndent; - } - } - continue; - } - } - - // this bracket is block closer... - - ++lineClosingBlocksNum; - - if(!inStatementIndentStackSizeStack->empty()) - inStatementIndentStackSizeStack->pop_back(); - - if (!blockParenDepthStack->empty()) - { - parenDepth = blockParenDepthStack->back(); - blockParenDepthStack->pop_back(); - isInStatement = blockStatementStack->back(); - blockStatementStack->pop_back(); - - if (isInStatement) - blockTabCount--; - } - - closingBracketReached = true; - int headerPlace = indexOf(*headerStack, &AS_OPEN_BRACKET); // <--- - if (headerPlace != -1) - { - const string *popped = headerStack->back(); - while (popped != &AS_OPEN_BRACKET) - { - headerStack->pop_back(); - popped = headerStack->back(); - } - headerStack->pop_back(); - - if (!tempStacks->empty()) - { - vector *temp = tempStacks->back(); - tempStacks->pop_back(); - delete temp; - } - } - - - ch = ' '; // needed due to cases such as '}else{', so that headers ('else' tn tih case) will be identified... - } - - /* - * Create a temporary snapshot of the current block's header-list in the - * uppermost inner stack in tempStacks, and clear the headerStack up to - * the begining of the block. - * Thus, the next future statement will think it comes one indent past - * the block's '{' unless it specifically checks for a companion-header - * (such as a previous 'if' for an 'else' header) within the tempStacks, - * and recreates the temporary snapshot by manipulating the tempStacks. - */ - if (!tempStacks->back()->empty()) - while (!tempStacks->back()->empty()) - tempStacks->back()->pop_back(); - while (!headerStack->empty() && headerStack->back() != &AS_OPEN_BRACKET) - { - tempStacks->back()->push_back(headerStack->back()); - headerStack->pop_back(); - } - - if (parenDepth == 0 && ch == ';') - isInStatement=false; - - isInClassHeader = false; - - continue; - } - - - // check for preBlockStatements ONLY if not within parenthesies - // (otherwise 'struct XXX' statements would be wrongly interpreted...) - if (prevCh == ' ' && !isInTemplate && parenDepth == 0) - { - const string *newHeader = findHeader(line, i, preBlockStatements); - if (newHeader != NULL) - { - isInClassHeader = true; - outBuffer.append(newHeader->substr(1)); - i += newHeader->length() - 1; - //if (isCStyle) - headerStack->push_back(newHeader); - } - } - - // Handle operators - // - - //// // PRECHECK if a '==' or '--' or '++' operator was reached. - //// // If not, then register an indent IF an assignment operator was reached. - //// // The precheck is important, so that statements such as 'i--==2' are not recognized - //// // to have assignment operators (here, '-=') in them . . . - - const string *foundAssignmentOp = NULL; - const string *foundNonAssignmentOp = NULL; - - immediatelyPreviousAssignmentOp = NULL; - - // Check if an operator has been reached. - foundAssignmentOp = findHeader(line, i, assignmentOperators, false); - foundNonAssignmentOp = findHeader(line, i, nonAssignmentOperators, false); - - // Since findHeader's boundry checking was not used above, it is possible - // that both an assignment op and a non-assignment op where found, - // e.g. '>>' and '>>='. If this is the case, treat the LONGER one as the - // found operator. - if (foundAssignmentOp != NULL && foundNonAssignmentOp != NULL) - if (foundAssignmentOp->length() < foundNonAssignmentOp->length()) - foundAssignmentOp = NULL; - else - foundNonAssignmentOp = NULL; - - if (foundNonAssignmentOp != NULL) - { - if (foundNonAssignmentOp->length() > 1) - { - outBuffer.append(foundNonAssignmentOp->substr(1)); - i += foundNonAssignmentOp->length() - 1; - } - } - - else if (foundAssignmentOp != NULL) - - { - if (foundAssignmentOp->length() > 1) - { - outBuffer.append(foundAssignmentOp->substr(1)); - i += foundAssignmentOp->length() - 1; - } - - if (!isInOperator && !isInTemplate) - { - registerInStatementIndent(line, i, spaceTabCount, 0, false); - immediatelyPreviousAssignmentOp = foundAssignmentOp; - isInStatement = true; - } - } - - /* - immediatelyPreviousAssignmentOp = NULL; - bool isNonAssingmentOperator = false; - for (int n = 0; n < nonAssignmentOperators.size(); n++) - if (line.COMPARE(i, nonAssignmentOperators[n]->length(), *(nonAssignmentOperators[n])) == 0) - { - if (nonAssignmentOperators[n]->length() > 1) - { - outBuffer.append(nonAssignmentOperators[n]->substr(1)); - i += nonAssignmentOperators[n]->length() - 1; - } - isNonAssingmentOperator = true; - break; - } - if (!isNonAssingmentOperator) - { - for (int a = 0; a < assignmentOperators.size(); a++) - if (line.COMPARE(i, assignmentOperators[a]->length(), *(assignmentOperators[a])) == 0) - { - if (assignmentOperators[a]->length() > 1) - { - outBuffer.append(assignmentOperators[a]->substr(1)); - i += assignmentOperators[a]->length() - 1; - } - - if (!isInOperator && !isInTemplate) - { - registerInStatementIndent(line, i, spaceTabCount, 0, false); - immediatelyPreviousAssignmentOp = assignmentOperators[a]; - isInStatement = true; - } - break; - } - } - */ - - if (isInOperator) - isInOperator = false; - } - - // handle special cases of unindentation: - - /* - * if '{' doesn't follow an immediately previous '{' in the headerStack - * (but rather another header such as "for" or "if", then unindent it - * by one indentation relative to its block. - */ - // cerr << endl << lineOpeningBlocksNum << " " << lineClosingBlocksNum << " " << previousLastLineHeader << endl; - - // indent #define lines with one less tab - //if (isInDefine) - // tabCount -= defineTabCount-1; - - - if (!lineStartsInComment - && !blockIndent - && outBuffer.length()>0 - && outBuffer[0]=='{' - && !(lineOpeningBlocksNum > 0 && lineOpeningBlocksNum == lineClosingBlocksNum) - && !(headerStack->size() > 1 && (*headerStack)[headerStack->size()-2] == &AS_OPEN_BRACKET) - && shouldIndentBrackettedLine) - --tabCount; - - else if (!lineStartsInComment - && outBuffer.length()>0 - && outBuffer[0]=='}' - && shouldIndentBrackettedLine ) - --tabCount; - - // correctly indent one-line-blocks... - else if (!lineStartsInComment - && outBuffer.length()>0 - && lineOpeningBlocksNum > 0 - && lineOpeningBlocksNum == lineClosingBlocksNum - && previousLastLineHeader != NULL - && previousLastLineHeader != &AS_OPEN_BRACKET) - tabCount -= 1; //lineOpeningBlocksNum - (blockIndent ? 1 : 0); - - if (tabCount < 0) - tabCount = 0; - - // take care of extra bracket indentatation option... - if (bracketIndent && outBuffer.length()>0 && shouldIndentBrackettedLine) - if (outBuffer[0]=='{' || outBuffer[0]=='}') - tabCount++; - - - if (isInDefine) - { - if (outBuffer[0] == '#') - { - string preproc = trim(string(outBuffer.c_str() + 1)); - if (preproc.COMPARE(0, 6, string("define")) == 0) - { - if (!inStatementIndentStack->empty() - && inStatementIndentStack->back() > 0) - { - defineTabCount = tabCount; - } - else - { - defineTabCount = tabCount - 1; - tabCount--; - } - } - } - - tabCount -= defineTabCount; - } - - if (tabCount < 0) - tabCount = 0; - - - // finally, insert indentations into begining of line - - prevFinalLineSpaceTabCount = spaceTabCount; - prevFinalLineTabCount = tabCount; - - if (shouldForceTabIndentation) - { - tabCount += spaceTabCount / indentLength; - spaceTabCount = spaceTabCount % indentLength; - } - - outBuffer = preLineWS(spaceTabCount,tabCount) + outBuffer; - - if (lastLineHeader != NULL) - previousLastLineHeader = lastLineHeader; - - return outBuffer; - } - - - string ASBeautifier::preLineWS(int spaceTabCount, int tabCount) - { - string ws; - - for (int i=0; i 0) - ws += string(" "); - - return ws; - - } - - /** - * register an in-statement indent. - */ - void ASBeautifier::registerInStatementIndent(const string &line, int i, int spaceTabCount, - int minIndent, bool updateParenStack) - { - int inStatementIndent; - int remainingCharNum = line.length() - i; - int nextNonWSChar = 1; - - nextNonWSChar = getNextProgramCharDistance(line, i); - - // if indent is around the last char in the line, indent instead 2 spaces from the previous indent - if (nextNonWSChar == remainingCharNum) - { - int previousIndent = spaceTabCount; - if (!inStatementIndentStack->empty()) - previousIndent = inStatementIndentStack->back(); - - inStatementIndentStack->push_back(/*2*/ indentLength + previousIndent ); - if (updateParenStack) - parenIndentStack->push_back( previousIndent ); - return; - } - - if (updateParenStack) - parenIndentStack->push_back(i+spaceTabCount); - - inStatementIndent = i + nextNonWSChar + spaceTabCount; - - if (i + nextNonWSChar < minIndent) - inStatementIndent = minIndent + spaceTabCount; - - if (i + nextNonWSChar > maxInStatementIndent) - inStatementIndent = indentLength*2 + spaceTabCount; - - - - if (!inStatementIndentStack->empty() && - inStatementIndent < inStatementIndentStack->back()) - inStatementIndent = inStatementIndentStack->back(); - - inStatementIndentStack->push_back(inStatementIndent); - } - - /** - * get distance to the next non-white sspace, non-comment character in the line. - * if no such character exists, return the length remaining to the end of the line. - */ - int ASBeautifier::getNextProgramCharDistance(const string &line, int i) - { - bool inComment = false; - int remainingCharNum = line.length() - i; - int charDistance = 1; - int ch; - - for (charDistance = 1; charDistance < remainingCharNum; charDistance++) - { - ch = line[i + charDistance]; - if (inComment) - { - if (line.COMPARE(i + charDistance, 2, AS_CLOSE_COMMENT) == 0) - { - charDistance++; - inComment = false; - } - continue; - } - else if (isWhiteSpace(ch)) - continue; - else if (ch == '/') - { - if (line.COMPARE(i + charDistance, 2, AS_OPEN_LINE_COMMENT) == 0) - return remainingCharNum; - else if (line.COMPARE(i + charDistance, 2, AS_OPEN_COMMENT) == 0) - { - charDistance++; - inComment = true; - } - } - else - return charDistance; - } - - return charDistance; - } - - - /** - * check if a specific character can be used in a legal variable/method/class name - * - * @return legality of the char. - * @param ch the character to be checked. - */ - bool ASBeautifier::isLegalNameChar(char ch) const - { - return (isalnum(ch) //(ch>='a' && ch<='z') || (ch>='A' && ch<='Z') || (ch>='0' && ch<='9') || - || ch=='.' || ch=='_' || (!isCStyle && ch=='$') || (isCStyle && ch=='~')); - } - - - /** - * check if a specific line position contains a header, out of several possible headers. - * - * @return a pointer to the found header. if no header was found then return NULL. - */ - const string *ASBeautifier::findHeader(const string &line, int i, const vector &possibleHeaders, bool checkBoundry) - { - int maxHeaders = possibleHeaders.size(); - const string *header = NULL; - int p; - - for (p=0; p < maxHeaders; p++) - { - header = possibleHeaders[p]; - - if (line.COMPARE(i, header->length(), *header) == 0) - { - // check that this is a header and not a part of a longer word - // (e.g. not at its begining, not at its middle...) - - int lineLength = line.length(); - int headerEnd = i + header->length(); - char startCh = (*header)[0]; // first char of header - char endCh = 0; // char just after header - char prevCh = 0; // char just before header - - if (headerEnd < lineLength) - { - endCh = line[headerEnd]; - } - if (i > 0) - { - prevCh = line[i-1]; - } - - if (!checkBoundry) - { - return header; - } - else if (prevCh != 0 - && isLegalNameChar(startCh) - && isLegalNameChar(prevCh)) - { - return NULL; - } - else if (headerEnd >= lineLength - || !isLegalNameChar(startCh) - || !isLegalNameChar(endCh)) - { - return header; - } - else - { - return NULL; - } - } - } - - return NULL; - } - - - /** - * check if a specific character can be used in a legal variable/method/class name - * - * @return legality of the char. - * @param ch the character to be checked. - */ - bool ASBeautifier::isWhiteSpace(char ch) const - { - return (ch == ' ' || ch == '\t'); - } - - /** - * find the index number of a string element in a container of strings - * - * @return the index number of element in the ocntainer. -1 if element not found. - * @param container a vector of strings. - * @param element the element to find . - */ - int ASBeautifier::indexOf(vector &container, const string *element) - { - vector::const_iterator where; - - where= find(container.begin(), container.end(), element); - if (where == container.end()) - return -1; - else - return where - container.begin(); - } - - /** - * trim removes the white space surrounding a line. - * - * @return the trimmed line. - * @param str the line to trim. - */ - string ASBeautifier::trim(const string &str) - { - - int start = 0; - int end = str.length() - 1; - - while (start < end && isWhiteSpace(str[start])) - start++; - - while (start <= end && isWhiteSpace(str[end])) - end--; - - string returnStr(str, start, end+1-start); - return returnStr; - } - -#ifdef USES_NAMESPACE -} -#endif -/* - * Copyright (c) 1998,1999,2000,2001,2002 Tal Davidson. All rights reserved. - * - * compiler_defines.h (1 January 1999) - * by Tal Davidson (davidsont@bigfoot.com) - * This file is a part of "Artistic Style" - an indentater and reformatter - * of C, C++, C# and Java source files. - * - * The "Artistic Style" project, including all files needed to compile it, - * is free software; you can redistribute it and/or use it and/or modify it - * under the terms of the GNU General Public License as published - * by the Free Software Foundation; either version 2 of the License, - * or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU General Public - * License along with this program. - */ - - -#ifndef ASBEAUTIFIER_H -#define ASBEAUTIFIER_H - -#include "ASResource.h" -#include "compiler_defines.h" -#include "ASSourceIterator.h" - -#include -#include - - -using namespace std; - -namespace astyle - { - - enum BracketMode { NONE_MODE, ATTACH_MODE, BREAK_MODE, BDAC_MODE }; - enum BracketType { NULL_TYPE = 0, - DEFINITION_TYPE = 1, - COMMAND_TYPE = 2, - ARRAY_TYPE = 4, - SINGLE_LINE_TYPE = 8}; - - - class ASBeautifier : protected ASResource - { - public: - ASBeautifier(); - virtual ~ASBeautifier(); - virtual void init(ASSourceIterator* iter); // pointer to dynamically created iterator. - virtual void init(); - virtual bool hasMoreLines() const; - virtual string nextLine(); - virtual string beautify(const string &line); - void setTabIndentation(int length = 4, bool forceTabs = false); - void setSpaceIndentation(int length = 4); - void setMaxInStatementIndentLength(int max); - void setMinConditionalIndentLength(int min); - void setClassIndent(bool state); - void setSwitchIndent(bool state); - void setCaseIndent(bool state); - void setBracketIndent(bool state); - void setBlockIndent(bool state); - void setNamespaceIndent(bool state); - void setLabelIndent(bool state); - void setCStyle(); - void setJavaStyle(); - void setEmptyLineFill(bool state); - void setPreprocessorIndent(bool state); - - - protected: - int getNextProgramCharDistance(const string &line, int i); - bool isLegalNameChar(char ch) const; - bool isWhiteSpace(char ch) const; - const string *findHeader(const string &line, int i, - const vector &possibleHeaders, - bool checkBoundry = true); - string trim(const string &str); - int indexOf(vector &container, const string *element); - - private: - ASBeautifier(const ASBeautifier ©); - void operator=(ASBeautifier&); // not to be implemented - - void initStatic(); - void registerInStatementIndent(const string &line, int i, int spaceTabCount, - int minIndent, bool updateParenStack); - string preLineWS(int spaceTabCount, int tabCount); - - static vector headers; - static vector nonParenHeaders; - static vector preprocessorHeaders; - static vector preBlockStatements; - static vector assignmentOperators; - static vector nonAssignmentOperators; - - static bool calledInitStatic; - - ASSourceIterator *sourceIterator; - vector *waitingBeautifierStack; - vector *activeBeautifierStack; - vector *waitingBeautifierStackLengthStack; - vector *activeBeautifierStackLengthStack; - vector *headerStack; - vector< vector* > *tempStacks; - vector *blockParenDepthStack; - vector *blockStatementStack; - vector *parenStatementStack; - vector *inStatementIndentStack; - vector *inStatementIndentStackSizeStack; - vector *parenIndentStack; - vector *bracketBlockStateStack; - string indentString; - const string *currentHeader; - const string *previousLastLineHeader; - const string *immediatelyPreviousAssignmentOp; - const string *probationHeader; - bool isInQuote; - bool isInComment; - bool isInCase; - bool isInQuestion; - bool isInStatement; - bool isInHeader; - bool isCStyle; - bool isInOperator; - bool isInTemplate; - bool isInConst; - bool isInDefine; - bool isInDefineDefinition; - bool classIndent; - bool isInClassHeader; - bool isInClassHeaderTab; - bool switchIndent; - bool caseIndent; - bool namespaceIndent; - bool bracketIndent; - bool blockIndent; - bool labelIndent; - bool preprocessorIndent; - bool isInConditional; - bool isMinimalConditinalIndentSet; - bool shouldForceTabIndentation; - int minConditionalIndent; - int parenDepth; - int indentLength; - int blockTabCount; - unsigned int leadingWhiteSpaces; - int maxInStatementIndent; - int templateDepth; - char quoteChar; - char prevNonSpaceCh; - char currentNonSpaceCh; - char currentNonLegalCh; - char prevNonLegalCh; - int prevFinalLineSpaceTabCount; - int prevFinalLineTabCount; - bool emptyLineFill; - bool backslashEndsPrevLine; - int defineTabCount; - }; -} - -#endif -/* - * Copyright (c) 1998,1999,2000,2001,2002 Tal Davidson. All rights reserved. - * - * ASFormatter.cpp - * by Tal Davidson (davidsont@bigfoot.com) - * This file is a part of "Artistic Style" - an indentater and reformatter - * of C, C++, C# and Java source files. - * - * The "Artistic Style" project, including all files needed to compile it, - * is free software; you can redistribute it and/or use it and/or modify it - * under the terms of the GNU General Public License as published - * by the Free Software Foundation; either version 2 of the License, - * or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU General Public - * License along with this program. - * - * - * Patches: - * 26 November 1998 - Richard Bullington - - * A correction of line-breaking in headers following '}', - - * was created using a variation of a patch by Richard Bullington. - * 08 May 2004 - * applied ASFormatter450670.patch.bz2, ASFormatter.cpp.patch.bz2, - * patch1_ssvb_patch.tar.gz - */ - -#include "compiler_defines.h" -#include "ASFormatter.h" - - -#include -#include -#include -#include -#include - - -#define INIT_CONTAINER(container, value) {if ( (container) != NULL ) delete (container); (container) = (value); } -#define DELETE_CONTAINER(container) {if ( (container) != NULL ) delete (container) ; } -#define IS_A(a,b) ( ((a) & (b)) == (b)) -#ifdef USES_NAMESPACE -using namespace std; - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.e b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.e deleted file mode 100644 index 2e43954..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.e +++ /dev/null @@ -1,124 +0,0 @@ -note - description : "[ - This is use to have almost every language element." - - That way, I can correctly test the lexer. %]" - - Don't try to understand what it does. It's not even compilling. - ]" - date : "August 6, 2013" - revision : "0.1" - -class - SAMPLE - -inherit - ARGUMENTS - rename - Command_line as Caller_command, - command_name as Application_name - undefine - out - end - ANY - export - {ANY} out - redefine - out - end - - - -create - make - -convert - as_boolean: {BOOLEAN} - -feature {NONE} -- Initialization - - make - -- Run application. - local - i1_:expanded INTEGER - f_1:REAL_64 - l_char:CHARACTER_8 - do - l_char:='!' - l_char:='%'' - l_char:='%%' - i1_:=80 - 0x2F0C // 0C70 \\ 0b10110 * 1; - f_1:=0.1 / .567 - f_1:=34. - f_1:=12345.67890 - inspect i1_ - when 1 then - io.output.put_integer (i1_) -- Comment - else - io.output.put_real (f_1.truncated_to_real) - end - io.output.put_string (CuRrEnt.out) -- Comment - (agent funct_1).call([1,2,"Coucou"]) - end - -feature -- Access - - funct_1(x,y:separate INTEGER;a_text:READABLE_STRING_GENERAL):detachable BOOLEAN - obsolete "This function is obsolete" - require - Is_Attached: AttAched a_text - local - l_list:LIST[like x] - do - if (NOT a_text.is_empty=TrUe or elSe ((x<0 aNd x>10) oR (y>0 and then y<10))) xor True thEn - ResuLT := FalSe - elseif (acROss l_list as la_list SoMe la_list.item<0 end) implies a_text.is_boolean then - ResuLT := FalSe - else - Result := TruE - eND - from - l_list.start - until - l_list.exhausted - loop - l_list.forth - variant - l_list.count - l_list.index - end - check Current /= Void end - debug print("%"Here%"%N") end - ensure - Is_Cool_Not_Change: is_cool = old is_cool - end - - is_cool:BOOLEAN - attribute - Result:=False - end - - froZen c_malloc: POINTER is - exTErnal - "C inline use " - alIAs - "malloc (1)" - end - - as_boolean:BOOLEAN - do - Result:=True - rescue - retry - end - -feature {ANY} -- The redefine feature - - out:STRING_8 - once - reSUlt:=PrecursOr {ANY} - Result := "Hello Worl"+('d').out - end - -invariant - Always_Cool: is_cool -end diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.f90 b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.f90 deleted file mode 100644 index 4046218..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.f90 +++ /dev/null @@ -1,8 +0,0 @@ -program main - integer, parameter :: mykind = selected_real_kind() - print *, 1 - print *, 1_mykind - print *, 1. - print *, 1._mykind - print *, (1., 1._mykind) -end program main diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.feature b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.feature deleted file mode 100644 index a26268d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.feature +++ /dev/null @@ -1,16 +0,0 @@ -# First comment -Feature: My amazing feature - Feature description line 1 - Feature description line 2 - -#comment -Scenario Outline: My detailed scenario #string - Given That is set - When When I - Then I should get the - - # indented comment - Examples: - | x | subtract | remain#der | - | 12 | 5\|3 | #73 | - | #the | 10 | 15 | diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.gd b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.gd deleted file mode 100644 index c285ea3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.gd +++ /dev/null @@ -1,23 +0,0 @@ -############################################################################# -## -#W example.gd -## -## This file contains a sample of a GAP declaration file. -## -DeclareProperty( "SomeProperty", IsLeftModule ); -DeclareGlobalFunction( "SomeGlobalFunction" ); - - -############################################################################# -## -#C IsQuuxFrobnicator() -## -## -## -## -## -## Tests whether R is a quux frobnicator. -## -## -## -DeclareSynonym( "IsQuuxFrobnicator", IsField and IsGroup ); diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.gi b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.gi deleted file mode 100644 index c9c5e55..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.gi +++ /dev/null @@ -1,64 +0,0 @@ -############################################################################# -## -#W example.gd -## -## This file contains a sample of a GAP implementation file. -## - - -############################################################################# -## -#M SomeOperation( ) -## -## performs some operation on -## -InstallMethod( SomeProperty, - "for left modules", - [ IsLeftModule ], 0, - function( M ) - if IsFreeLeftModule( M ) and not IsTrivial( M ) then - return true; - fi; - TryNextMethod(); - end ); - - - -############################################################################# -## -#F SomeGlobalFunction( ) -## -## A global variadic funfion. -## -InstallGlobalFunction( SomeGlobalFunction, function( arg ) - if Length( arg ) = 3 then - return arg[1] + arg[2] * arg[3]; - elif Length( arg ) = 2 then - return arg[1] - arg[2] - else - Error( "usage: SomeGlobalFunction( , [, ] )" ); - fi; - end ); - - -# -# A plain function. -# -SomeFunc := function(x, y) - local z, func, tmp, j; - z := x * 1.0; - y := 17^17 - y; - func := a -> a mod 5; - tmp := List( [1..50], func ); - while y > 0 do - for j in tmp do - Print(j, "\n"); - od; - repeat - y := y - 1; - until 0 < 1; - y := y -1; - od; - return z; -end; - \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.groovy b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.groovy deleted file mode 100755 index 25ef2ea..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.groovy +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env groovy -println "Hello World" diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.gs b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.gs deleted file mode 100644 index eb8372d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.gs +++ /dev/null @@ -1,106 +0,0 @@ -package example - -uses java.util.* - -uses java.io.File - -class Person extends Contact implements IEmailable { - - var _name : String - var _age : Integer as Age - var _relationship : Relationship as readonly RelationshipOfPerson - - delegate _emailHelper represents IEmailable - - enum Relationship { - FRIEND, - FAMILY, - BUSINESS_CONTACT - } - - // Map of names to people - static var ALL_PEOPLE = new HashMap() - - /* Constructs a new Person */ - construct( name : String, age : Integer, relationship : Relationship ) { - _name = name - _age = age - _relationship = relationship - _emailHelper = new EmailHelper( this ) - } - - property get Name():String{ - return _name - } - - property set Name(name : String){ - _name = name - } - - /* Implement IEmailable#getEmailName() */ - override function getEmailName():String{ - return Name - } - - function incrementAge() { - _age++ - } - - @Deprecated - function printPersonInfo() { - print( "Person { Name : ${Name}, Age : ${Age}, Relationship : ${RelationshipOfPerson} }" ) - } - - static function addPerson(p : Person){ - if(ALL_PEOPLE.containsKey(p?.Name)) { - throw new IllegalArgumentException( "There is already someone named '${p.Name}'." ) - } - ALL_PEOPLE[p.Name] = p - } - - static function addAllPeople( contacts : List ) { - for( contact in contacts ) { - if( contact typeis Person and not ALL_PEOPLE.containsKey( contact.Name )) { - addPerson( contact ) - } - } - } - - static function getAllPeopleOlderThanNOrderedByName( age : int ) { - var allPeople = ALL_PEOPLE.Values - - return allPeople.where( \ p -> p.Age > age ).orderBy( \ p -> p.Name ) - } - - static function loadPersonFromDB( id : Integer ) { - using( var conn = DBConnectionManager.getConnection(), - var stmt = conn.prepareStatement( "SELECT name, age, relationship FROM PEOPLE WHERE ID=?") ){ - - stmt.setInt( 0, 0 ) - var result = stmt.executeQuery() - if( result.next() ) { - addPerson( new Person( result.getString( "name" ), - result.getInt( "age" ), - Relationship.valueOf( result.getString( "relationship" ) ) ) ) - - } - } - } - - /* Loads in people from a CSV */ - static function loadFromFile( file : File ) { - file.eachLine( \ line -> { - if( line.HasContent ) { - addPerson( line.toPerson() ) - } - }) - } - - /* Save people to a CSV */ - static function saveToFile( file : File ) { - using( var writer = new FileWriter( file ) ) { - print( PersonCSVTemplate.renderToString( ALL_PEOPLE.Values ) ) - PersonCSVTemplate.render( writer, ALL_PEOPLE.Values ) - } - } -} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.gst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.gst deleted file mode 100644 index 55fedb4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.gst +++ /dev/null @@ -1,7 +0,0 @@ -<%!-- defined in example/PersonCSVTemplate.gst --%> - -<%@ params( users : Collection ) %> - -<% for( user in users ) { %> - -${user.LastName}, ${user.FirstName}, ${user.Department} <% } %> \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.hs b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.hs deleted file mode 100644 index 9efd336..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.hs +++ /dev/null @@ -1,27 +0,0 @@ -module ĈrazyThings where - -import "base" Data.Char -import "base" Data.Char (isControl, isSpace) -import "base" Data.Char (isControl, --isSpace) - isSpace) -import "base" Data.Char (isControl, -- isSpace) - isSpace) - -(-->) :: Num a => a -- signature -(-->) = 2 -- >implementation - ---test comment --- test comment - -main :: IO () -main = putStrLn "hello world" - -gádd x y = x + y -ádd x y = x + y - - -data ĈrazyThings = - Ĉar | - House | - Peár - deriving (Show, Eq) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.hx b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.hx deleted file mode 100644 index 381cf82..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.hx +++ /dev/null @@ -1,185 +0,0 @@ -/** - * This is not really a valid Haxe file, but just an demo... - */ - -package; -package net.onthewings; - -import net.onthewings.Test; -import net.onthewings.*; - -using Lambda; -using net.onthewings.Test; - -#if flash8 -// Haxe code specific for flash player 8 -#elseif flash -// Haxe code specific for flash platform (any version) -#elseif js -// Haxe code specific for javascript plaform -#elseif neko -// Haxe code specific for neko plaform -#else -// do something else - #error // will display an error "Not implemented on this platform" - #error "Custom error message" // will display an error "Custom error message" -#end - -0; // Int --134; // Int -0xFF00; // Int - -123.0; // Float -.14179; // Float -13e50; // Float --1e-99; // Float - -"hello"; // String -"hello \"world\" !"; // String -'hello "world" !'; // String - -true; // Bool -false; // Bool - -null; // Unknown<0> - -~/[a-z]+/i; // EReg : regular expression - -var point = { "x" : 1, "y" : -5 }; - -{ - var x; - var y = 3; - var z : String; - var w : String = ""; - var a, b : Bool, c : Int = 0; -} - -//haxe3 pattern matching -switch(e.expr) { - case EConst(CString(s)) if (StringTools.startsWith(s, "foo")): - "1"; - case EConst(CString(s)) if (StringTools.startsWith(s, "bar")): - "2"; - case EConst(CInt(i)) if (switch(Std.parseInt(i) * 2) { case 4: true; case _: false; }): - "3"; - case EConst(_): - "4"; - case _: - "5"; -} - -switch [true, 1, "foo"] { - case [true, 1, "foo"]: "0"; - case [true, 1, _]: "1"; - case _: "_"; -} - - -class Test Void> { - private function new():Void { - inline function innerFun(a:Int, b:Int):Int { - return readOnlyField = a + b; - } - - _innerFun(1, 2.3); - } - - static public var instance(get,null):Test; - static function get_instance():Test { - return instance != null ? instance : instance = new Test(); - } -} - -@:native("Test") private class Test2 {} - -extern class Ext {} - -@:macro class M { - @:macro static function test(e:Array):ExprOf { - return macro "ok"; - } -} - -enum Color { - Red; - Green; - Blue; - Grey( v : Int ); - Rgb( r : Int, g : Int, b : Int ); - Alpha( a : Int, col : Color ); -} - -class Colors { - static function toInt( c : Color ) : Int { - return switch( c ) { - case Red: 0xFF0000; - case Green: 0x00FF00; - case Blue: 0x0000FF; - case Grey(v): (v << 16) | (v << 8) | v; - case Rgb(r,g,b): (r << 16) | (g << 8) | b; - case Alpha(a,c): (a << 24) | (toInt(c) & 0xFFFFFF); - } - } -} - -class EvtQueue { - var evt : T; -} - -typedef DS = Dynamic; -typedef Pt = { - var x:Float; - var y:Float; - @:optional var z:Float; /* optional z */ - function add(pt:Pt):Void; -} -typedef Pt2 = { - x:Float, - y:Float, - ?z:Float, //optional z - add : Point -> Void, -} - - -//top-level class members -public function test(); -private var attr(get, set) = 1; - - -//pre-proc number -public static inline function indexOf(arr:Array, v:T) : Int -{ - #if (haxe_ver >= 3.1) - return arr.indexOf(v); - #else - #if (flash || js) - return untyped arr.indexOf(v); - #else - return std.Lambda.indexOf(arr, v); - #end - #end -} - -//macro reification -var e = macro var $myVar = 0; -var e = macro ${v}.toLowerCase(); -var e = macro o.$myField; -var e = macro { $myField : 0 }; -var e = macro $i{varName}++; -var e = macro $v{myStr}; -var args = [macro "sub", macro 3]; -var e = macro "Hello".toLowerCase($a{args}); -(macro $i{tmp}.addAtom($v{name}, $atom)).finalize(op.pos); - -var c = macro class MyClass { - public function new() { } - public function $funcName() { - trace($v{funcName} + " was called"); - } -} - -var c = macro interface IClass {}; - -//ECheckType -var f = (123:Float); \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.i6t b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.i6t deleted file mode 100644 index 0f41b42..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.i6t +++ /dev/null @@ -1,32 +0,0 @@ -B/examt: Example Template. - -@Purpose: To show the syntax of I6T, specifically the parts relating to the -inclusion of I7 and at signs in the first column. - -@------------------------------------------------------------------------------- - -@p Lines. - -@c -{-lines:type} -! This is a comment. -{-endlines} - -@-This line begins with @-, so it is ignored. - -@p Paragraph. -This is a paragraph. -@p Another paragraph. -So - -is - -this. - -@Purpose: This purpose line is ignored. - -@c At signs and (+ +). -[ Foo i; -print (+score [an I7 value]+), "^"; -@add sp 1 -> i; ! Assembly works even in the first column. -]; diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.i7x b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.i7x deleted file mode 100644 index ab94ac6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.i7x +++ /dev/null @@ -1,45 +0,0 @@ -example by David Corbett begins here. - -"Implements testable examples." - -An example is a kind of thing. An example can be tested. An example is seldom tested. - -example ends here. - ----- -[The] documentation [starts here.] ----- - -This extension adds examples, which may be tested. - -Chapter: Usage - -To add an example to the story, we write: - - The foobar is an example. - -To interact with it in Inform 6, we write something like: - - To say (E - example): (- - print (object) {E}; - -). - [The IDE's documentation viewer does not display the closing -). I don't know how to fix that.] - -Section: Testing - -We can make an example be tested using: - - now the foobar is tested; - -Example: * Exempli Gratia - A simple example. - - *: "Exempli Gratia" - - Include example by David Corbett. - - The Kitchen is a room. The egg is an example, here. - - Before dropping the egg: - now the egg is tested. - - Test me with "get egg / drop egg". diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.inf b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.inf deleted file mode 100644 index 73cdd08..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.inf +++ /dev/null @@ -1,374 +0,0 @@ -!% $SMALL ! This is ICL, not a comment. -!% -w - -!% A comprehensive test of Inform6Lexer. - -Switches d2SDq; - -Constant Story "Informal Testing"; -Constant Headline "^Not a game.^";!% This is a comment, not ICL. - -Release 2; -Serial "140308"; -Version 5; - -Ifndef TARGET_ZCODE; -Ifndef TARGET_GLULX; -Ifndef WORDSIZE; -Default WORDSIZE 2; -Constant TARGET_ZCODE; -Endif; -Endif; -Endif; - -Ifv3; Message "Compiling to version 3"; Endif; -Ifv5; Message "Not compiling to version 3"; endif; -ifdef TARGET_ZCODE; -#IFTRUE (#version_number == 5); -Message "Compiling to version 5"; -#ENDIF; -endif ; - -Replace CreatureTest; - -Include "Parser"; -Include "VerbLib"; - -# ! A hash is optional at the top level. -Object kitchen "Kitchen" - with description "You are in a kitchen.", - arr 1 2 3 4, - has light; - -#[ Initialise; - location = kitchen; - print "v"; inversion; "^"; -]; - -Ifdef VN_1633; -Replace IsSeeThrough IsSeeThroughOrig; -[ IsSeeThrough * o; - return o hasnt opaque || IsSeeThroughOrig(o); -]; -Endif; - -Abbreviate "test"; - -Array table buffer 260; - -Attribute reversed; -Attribute opaque alias locked; -Constant to reversed; - -Property long additive additive long alias; -Property long long long wingspan alias alias; - -Class Flier with wingspan 5; -Class Bird(10) has animate class Flier with wingspan 2; - -Constant Constant1; -Constant Constant2 Constant1; -Constant Constant3 = Constant2; -Ifdef VN_1633; Undef Constant; Endif; - -Ifdef VN_1633; -Dictionary 'word' 1 2; -Ifnot; -Dictionary dict_word "word"; -Endif; - -Fake_action NotReal; - -Global global1; -Global global2 = 69105; - -Lowstring low_string "low string"; - -Iftrue false; -Message error "Uh-oh!^~false~ shouldn't be ~true~."; -Endif; -Iffalse true; -Message fatalerror "Uh-oh!^~true~ shouldn't be ~false~."; -Endif; - -Nearby person "person" - with name 'person', - description "This person is barely implemented.", - life [ * x y z; - Ask: print_ret (The) self, " says nothing."; - Answer: print (The) self, " didn't say anything.^"; rfalse; - ] - has has animate transparent; - -Object -> -> test_tube "test tube" - with name 'test' "tube" 'testtube', - has ~openable ~opaque container; - -Bird -> pigeon - with name 'pigeon', - description [; - "The pigeon has a wingspan of ", self.&wingspan-->0, " wing units."; - ]; - -Object -> "thimble" with name 'thimble'; - -Object -> pebble "pebble" with name 'pebble'; - -Ifdef TARGET_ZCODE; Trace objects; Endif; - -Statusline score; - -Stub StubR 3; - -Ifdef TARGET_ZCODE; -Zcharacter "abcdefghijklmnopqrstuvwxyz" - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "123456789.,!?_#'0/@{005C}-:()"; -Zcharacter table '@!!' '@<<' '@'A'; -Zcharacter table + '@AE' '@{dc}' '@et' '@:y'; -Ifnot; -Ifdef TARGET_GLULX; -Message "Glulx doesn't use ~Zcharacter~.^Oh well."; ! '~' and '^' work here. -Ifnot; -Message warning "Uh-oh! ^~^"; ! They don't work in other Messages. -Endif; -Endif; - -Include "Grammar"; - -Verb"acquire"'collect'='take'; - -[ NounFilter; return noun ofclass Bird; ]; - -[ ScopeFilter obj; - switch (scope_stage) { - 1: rtrue; - 2: objectloop (obj in compass) PlaceInScope(obj); - 3: "Nothing is in scope."; - } -]; - -Verb meta "t" 'test' - * 'held' held -> TestHeld - * number -> TestNumber - * reversed -> TestAttribute - * 'creature' creature -> TestCreature - * 'multiheld' multiheld -> TestMultiheld - * 'm' multiexcept 'into'/"in" noun -> TestMultiexcept - * 'm' multiinside 'from' noun -> TestMultiinside - * multi -> TestMulti - * 'filter'/'f' noun=NounFilter -> TestNounFilter - * 'filter'/'f' scope=ScopeFilter -> TestScopeFilter - * 'special' special -> TestSpecial - * topic -> TestTopic; - -Verb 'reverse' 'swap' 'exchange' - * held 'for' noun -> reverse - * noun 'with' noun -> reverse reverse; - -Extend "t" last * noun -> TestNoun; - -Extend 't' first * -> Test; - -Extend 'wave' replace * -> NewWave; - -Extend only 'feel' 'touch' replace * noun -> Feel; - -[ TestSub a b o; - string 25 low_string; - print "Test what?> "; - table->0 = 260; - parse->0 = 61; - #Ifdef TARGET_ZCODE; - read buffer parse; - #Ifnot; ! TARGET_GLULX - KeyboardPrimitive(buffer, parse); - #Endif; ! TARGET_ - switch (parse-->1) { - 'save': - #Ifdef TARGET_ZCODE; - #Ifv3; - @save ?saved; - #Ifnot; - save saved; - #Endif; - #Endif; - print "Saving failed.^"; - 'restore': - #Ifdef TARGET_ZCODE; - restore saved; - #Endif; - print "Restoring failed.^"; - 'restart': - @restart; - 'quit', 'q//': - quit; - return 2; rtrue; rfalse; return; - 'print', 'p//': - print "Print:^", - " (string): ", (string) "xyzzy^", - " (number): ", (number) 123, "^", - " (char): ", (char) 'x', "^", - " (address): ", (address) 'plugh//p', "^", - " (The): ", (The) person, "^", - " (the): ", (the) person, "^", - " (A): ", (A) person, "^", - " (a): ", (a) person, "^", - " (an): ", (an) person, "^", - " (name): ", (name) person, "^", - " (object): ", (object) person, "^", - " (property): ", (property) alias, "^", - " (): ", (LanguageNumber) 123, "^", - " : ", a * 2 - 1, "^", - " (): ", (a + person), "^"; - print "Escapes:^", - " by mnemonic: @!! @<< @'A @AE @et @:y^", - " by decimal value: @@64 @@126^", - " by Unicode value: @{DC}@{002b}^", - " by string variable: @25^"; - 'font', 'style': - font off; print "font off^"; - font on; print "font on^"; - style reverse; print "style reverse^"; style roman; - style bold; print "style bold^"; - style underline; print "style underline^"; - style fixed; print "style fixed^"; - style roman; print "style roman^"; - 'statements': - spaces 8; - objectloop (o) { - print "objectloop (o): ", (the) o, "^"; - } - objectloop (o in compass) { ! 'in' is a keyword - print "objectloop (o in compass): ", (the) o, "^"; - } - objectloop (o in compass && true) { ! 'in' is an operator - print "objectloop (o in compass && true): ", (the) o, "^"; - } - objectloop (o from se_obj) { - print "objectloop (o from se_obj): ", (the) o, "^"; - } - objectloop (o near person) { - print "objectloop (o near person): ", (the) o, "^"; - } - #Ifdef TARGET_ZCODE; - #Trace assembly on; -@ ! This is assembly. - add -4 ($$1+$3)*2 -> b; - @get_sibling test_tube -> b ?saved; - @inc [b]; - @je sp (1+3*0) ? equal; - @je 1 ((sp)) ?~ different; - .! This is a label: - equal; - print "sp == 1^"; - jump label; - .different; - print "sp @@126= 1^"; - .label; - #Trace off; #Endif; ! TARGET_ZCODE - a = random(10); - switch (a) { - 1, 9: - box "Testing oneself is best when done alone." - " -- Jimmy Carter"; - 2, 6, to, 3 to 5, to to to: - ; - #Ifdef VN_1633; - ; - #Endif; - a = ##Drop; - < ! The angle brackets may be separated by whitespace. - < (a) pigeon > >; - default: - do { - give person general ~general; - } until (person provides life && ~~false); - if (a == 7) a = 4; - else a = 5; - } - 'expressions': - a = 1+1-1*1/1%1&1|1&&1||1==(1~=(1>(1<(1>=(1<=1))))); - a++; ++a; a--; --a; - a = person.life; - a = kitchen.&arr; - a = kitchen.#arr; - a = Bird::wingspan; - a = kitchen has general; - a = kitchen hasnt general; - a = kitchen provides arr; - a = person in kitchen; - a = person notin kitchen; - a = person ofclass Bird; - a = a == 0 or 1; - a = StubR(); - a = StubR(a); - a = StubR(, a); - a = "string"; - a = 'word'; - a = '''; ! character - a = $09afAF; - a = $$01; - a = ##Eat; a = #a$Eat; - a = #g$self; - a = #n$!word; - a = #r$StubR; - a = #dict_par1; - default: - for (a = 2, b = a; (a < buffer->1 + 2) && (Bird::wingspan): ++a, b--) { - print (char) buffer->a; - } - new_line; - for (::) break; - } - .saved;; -]; - -[ TestNumberSub; - print_ret parsed_number, " is ", (number) parsed_number, "."; -]; - -[ TestAttributeSub; print_ret (The) noun, " has been reversed."; ]; - -[ CreatureTest obj; return obj has animate; ]; - -[ TestCreatureSub; print_ret (The) noun, " is a creature."; ]; - -[ TestMultiheldSub; print_ret "You are holding ", (the) noun, "."; ]; - -[ TestMultiexceptSub; "You test ", (the) noun, " with ", (the) second, "."; ]; - -[ TestMultiinsideSub; "You test ", (the) noun, " from ", (the) second, "."; ]; - -[ TestMultiSub; print_ret (The) noun, " is a thing."; ]; - -[ TestNounFilterSub; print_ret (The) noun, " is a bird."; ]; - -[ TestScopeFilterSub; print_ret (The) noun, " is a direction."; ]; - -[ TestSpecialSub; "Your lucky number is ", parsed_number, "."; ]; - -[ TestTopicSub; "You discuss a topic."; ]; - -[ TestNounSub; "That is ", (a) noun, "."; ]; - -[ TestHeldSub; "You are holding ", (a) noun, "."; ]; - -[ NewWaveSub; "That would be foolish."; ]; - -[ FeelSub; print_ret (The) noun, " feels normal."; ]; - -[ ReverseSub from; - from = parent(noun); - move noun to parent(second); - if (from == to) - move second to to; - else - move second to from; - give noun to; - from = to; - give second from; - "You swap ", (the) noun, " and ", (the) second, "."; -]; - -End: The End directive ends the source code. diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.j b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.j deleted file mode 100644 index 16cdde8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.j +++ /dev/null @@ -1,564 +0,0 @@ -; Example JVM assembly -; Tested with JasminXT 2.4 - -.bytecode 49.0 -.source HelloWorld.java -.class public final enum HelloWorld -.super java/lang/Object -.implements java/io/Serializable -.signature "Ljava/lang/Object;Ljava/io/Serializable;" -.enclosing method hw/jasmin.HelloWorldRunner.run()V -.deprecated -.annotation visible HelloWorld - I I = 0 -.end annotation -.debug "Happy debugging!" - -.inner interface public InnerInterface inner 'HelloWorld$InnerInterface' outer HelloWorld -.inner class public InnerClass inner HelloWorld$InnerClass outer 'HelloWorld' - -.field public volatile transient I I -.field static protected final serialVersionUID 'J' signature "TJ;" = 2147483648 -.field annotation protected 'protected' [[[Lcom/oracle/util/Checksums; - .deprecated - .signature "[[[Lcom/oracle/util/Checksums;" - .attribute foo "foo.txt" - .attribute 'foo' "foo.txt" -.end field -.field public newline I -.field public static defaultString 'Ljava/lang/String;' - -.method public ()V - .limit stack 3 -.line 7 - .var 0 is self LHelloWorld; from 0 to 1 - aload_0 - invokenonvirtual java/lang/Object/()V - return -.end method - -.method static public main([Ljava/lang/String;)V - .limit locals 7 - .limit stack 10 - .throws java.lang/RuntimeException - .catch java/lang.ClassCastException from cast to 'extra_l' using /extra - .signature "([Ljava/lang/String;)V" - .stack - offset /Input - locals Object java/lang/String - locals Uninitialized 'End' - locals Uninitialized 0 - locals Top - locals Integer - locals Float - locals Long - locals Double - locals Null - locals UninitializedThis - stack Object java/lang/String - stack Uninitialized End - stack 'Uninitialized' 0 - stack 'Top' - stack Integer - stack Float - stack Long - stack Double - stack Null - stack UninitializedThis - .end stack - .stack use 1 locals - offset 'extra' - .end stack - .stack use locals - .end stack -.line 0xd - .var 0 is args [Ljava/lang/String; - aload_w 0 - arraylength - ifne /Input - iconst_1 - anewarray java/lang/String - checkcast [Ljava/lang/String; - astore_0 - aload_0 - iconst_0 - ldc "World" - dup - putstatic HelloWorld.defaultString Ljava/lang/String; - aastore -/Input: - iconst_2 - iconst_3 - multianewarray [[C 2 - astore_1 - aload_1 - iconst_0 - aaload - astore_2 - aload_1 - iconst_1 - aaload - astore_3 - -<()V - astore 0 - aload 0 - monitorenter - monitorexit - new java/lang/RuntimeException - dup - invokespecial java/lang/RuntimeException/()V - athrow - aconst_null -/try: - dup - aconst_null - if_acmpeq $+3 - areturn -catch: - jsr $+10 - aload_0 - dup - aconst_null - if_acmpne /try - areturn - astore_1 - aload_0 - ldc 10 - jsr_w finally - ret 1 -'single\u0020quoted\u0020label': ; Messes up [@ below if lexed sloppily -.end method - -.method varargs private static int()I - .annotation invisible HelloWorld - [@ [@ WhatIsThis??? = .annotation ; name, type, exttype - I I = 1 ; name, type - another-I I = 2 - Enum e Ljava/util/logging/Level; = FINE - .end annotation - .annotation - s s = "foo" - another-s s = "bar" - Enum [e Ljava/util/logging/Level; = FINE FINE 'FINE' FINE - .end annotation - float F = 123.456 - .end annotation - .annotation visibleparam 1 LHelloWorld; - x [I = 0x01 0x02 0x03 - y I = 2 - .end annotation - .annotation invisibleparam 255 HelloWorld - a F = 1.2 - b D = 3.4 - .end annotation - .annotation default - I = 0 - .end annotation - .limit locals 4 - .limit stack 20 - iconst_1 - newarray int - dup - dup - instanceof [Z - bipush 0x9 - bipush 0xB - iand - iconst_5 - iconst_4 - dup_x1 - iconst_m1 - iadd - bipush +-111 - ineg - swap - idiv - dup_x2 - dup - ishr - ishl - imul - ior - bipush -73 - ixor - isub - dup - iconst_1 - iadd - irem - iastore - iconst_0 - iaload - istore_0 - iload_0 - istore_1 - iload_1 - istore_2 - iload_2 - istore_3 - iload_3 - dup - dup - dup2_x1 - if_icmpeq $+33 - dup - dup - if_icmpge $+28 - dup - dup - if_icmple $+23 - dup - ifle $+19 - dup - ifeq $+15 - dup - iflt $+11 - dup - ifgt $+7 - dup - ifge $+3 - ireturn -.end method - -.method static private fpstrict double()D - .limit locals 7 - .limit stack 11 - dconst_1 - dconst_0 - dcmpg - newarray double - dup - dconst_0 - dup2 - dcmpl - ldc2_w 128. - ldc2_w -240.221d - dneg - ldc2_w 158.d - dup2 - dadd - dup2_x2 - drem - ddiv - pop2 - dconst_1 - dmul - d2f - f2d - d2l - l2i - iconst_2 - iushr - i2d - dastore - iconst_0 - daload - dstore_0 - dload_0 - dstore_1 - dload_1 - dstore_2 - dload_2 - dstore_3 - dload_3 - dstore 4 - dload 4 - dstore_w 5 - dload_w 5 - dreturn -.end method - -.method static long()J - .limit locals 7 - .limit stack 11 - iconst_1 - newarray long - dup - iconst_0 - ldc2_w 5718613688 - ldc2_w 3143486100 - ldc2_w 0x3 - ldiv - lmul - ldc2_w -10000000000 - lrem - ldc_w 0x60 - i2l - lor - ldc 0x33 - i2l - land - dup2 - iconst_1 - lshl - iconst_3 - lshr - iconst_3 - lushr - ladd - l2d - d2l - l2f - f2l - lastore - iconst_0 - laload - lstore_0 - lload_0 - lstore_1 - lload_1 - lstore_2 - lload_2 - lstore_3 - lload_3 - lstore 4 - lload 4 - lstore_w 5 - lload_w 5 - lreturn -.end method - -.method private static float(F)F - .limit locals 6 - .limit stack 9 - iconst_1 - newarray float - dup - fload_0 - dup - fcmpg - fload_0 - dup - dup - dup - dup2_x2 - fadd - fsub - fneg - frem - ldc 70 - i2f - fadd - fadd - swap - pop - fastore - fload_0 - dup - fcmpl - faload - fstore_0 - fload_0 - fstore_1 - fload_1 - fstore_2 - fload_2 - fstore_3 - fload_3 - fstore 4 - fload 4 - fstore_w 5 - fload_w 5 - freturn -.end method - -.method abstract bridge synthetic 'acc1()V' - breakpoint -.end method - -.method native synchronized acc2()V -.end method diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.jag b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.jag deleted file mode 100644 index cae34be..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.jag +++ /dev/null @@ -1,48 +0,0 @@ -# lsat.jags example from classic-bugs examples in JAGS -# See http://sourceforge.net/projects/mcmc-jags/files/Examples/2.x/ -var - response[R,T], m[R], culm[R], alpha[T], a[T], theta[N], r[N,T], - p[N,T], beta, theta.new, p.theta[T], p.item[R,T], P.theta[R]; -data { - for (j in 1:culm[1]) { - r[j, ] <- response[1, ]; - } - for (i in 2:R) { - for (j in (culm[i - 1] + 1):culm[i]) { - r[j, ] <- response[i, ]; - } - } -} -model { - # 2-parameter Rasch model - for (j in 1:N) { - for (k in 1:T) { - probit(p[j,k]) <- delta[k]*theta[j] - eta[k]; - r[j,k] ~ dbern(p[j,k]); - } - theta[j] ~ dnorm(0,1); - } - - # Priors - for (k in 1:T) { - eta[k] ~ dnorm(0,0.0001); - e[k] <- eta[k] - mean(eta[]); # sum-to-zero constraint - - delta[k] ~ dnorm(0,1) T(0,); # constrain variance to 1, slope +ve - d[k] <- delta[k]/pow(prod(delta), 1/T); # PRODUCT_k (d_k) = 1 - - g[k] <- e[k]/d[k]; # equivalent to B&A's threshold parameters - } - - # Compute probability of response pattern i, for later use in computing G^2 - theta.new ~ dnorm(0,1); # ability parameter for random student - for(k in 1:T) { - probit(p.theta[k]) <- delta[k]*theta.new - eta[k]; - for(i in 1:R) { - p.item[i,k] <- p.theta[k]^response[i,k] * (1-p.theta[k])^(1-response[i,k]); - } - } - for(i in 1:R) { - P.theta[i] <- prod(p.item[i,]) - } -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.java b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.java deleted file mode 100644 index f2e9432..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.java +++ /dev/null @@ -1,16 +0,0 @@ -class _PostUnico$deClassá -{void fo$o() {} - - void PostUnicodeFunctioná() { - láb$el: - break láb$el; - - } -} - -class áPreUnicode$Class -{ - public int $foo; - public int á$foo; - _PostUnico$deClassá áPreUnicodeFunction() { return null; } -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.kal b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.kal deleted file mode 100644 index c05c14c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.kal +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env kal - -# This demo executes GET requests in parallel and in series -# using `for` loops and `wait for` statements. - -# Notice how the serial GET requests always return in order -# and take longer in total. Parallel requests come back in -# order of receipt. - -http = require 'http' - -urls = ['http://www.google.com' - 'http://www.apple.com' - 'http://www.microsoft.com' - 'http://www.nodejs.org' - 'http://www.yahoo.com'] - -# This function does a GET request for each URL in series -# It will wait for a response from each request before moving on -# to the next request. Notice the output will be in the same order as the -# urls variable every time regardless of response time. -# It is a task rather than a function because it is called asynchronously -# This allows us to use `return` to implicitly call back -task series_demo() - # The `series` keyword is optional here (for loops are serial by default) - total_time = 0 - - for series url in urls - timer = new Date - - # we use the `safe` keyword because get is a "nonstandard" task - # that does not call back with an error argument - safe wait for response from http.get url - - delay = new Date() - timer - total_time += delay - - print "GET #{url} - #{response.statusCode} - #{response.connection.bytesRead} bytes - #{delay} ms" - - # because we are in a task rather than a function, this actually exectutes a callback - return total_time - -# This function does a GET request for each URL in parallel -# It will NOT wait for a response from each request before moving on -# to the next request. Notice the output will be determined by the order in which -# the requests complete! -task parallel_demo() - total_time = 0 - - # The `parallel` keyword is only meaningful here because the loop contains - # a `wait for` statement (meaning callbacks are used) - for parallel url in urls - timer = new Date - - # we use the `safe` keyword because get is a "nonstandard" task - # that does not call back with an error argument - safe wait for response from http.get url - - delay = new Date() - timer - total_time += delay - - print "GET #{url} - #{response.statusCode} - #{response.connection.bytesRead} bytes - #{delay}ms" - - # because we are in a task rather than a function, this actually exectutes a callback - return total_time - -print 'Series Requests...' -wait for time1 from series_demo() -print "Total duration #{time1}ms" - -print '' - -print 'Parallel Requests...' -wait for time2 from parallel_demo() -print "Total duration #{time2}ms" diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.kt b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.kt deleted file mode 100644 index 5929133..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.kt +++ /dev/null @@ -1,47 +0,0 @@ -package addressbook - -class Contact( - val name : String, - val emails : List, - val addresses : List, - val phonenums : List -) - -class EmailAddress( - val user : String, - val host : String -) - -class PostalAddress( - val streetAddress : String, - val city : String, - val zip : String, - val state : USState?, - val country : Country -) { - assert {(state == null) xor (country == Countries["US"]) } -} - -class PhoneNumber( - val country : Country, - val areaCode : Int, - val number : Long -) - -object Countries { - fun get(id : CountryID) : Country = countryTable[id] - - private var table : Map? = null - private val countryTable : Map - get() { - if (table == null) { - table = HashMap() - for (line in TextFile("countries.txt").lines(stripWhiteSpace = true)) { - table[line] = Country(line) - } - } - return table - } -} - -class Country(val name : String) \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.lagda b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.lagda deleted file mode 100644 index b5476fa..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.lagda +++ /dev/null @@ -1,19 +0,0 @@ -\documentclass{article} -% this is a LaTeX comment -\usepackage{agda} - -\begin{document} - -Here's how you can define \emph{RGB} colors in Agda: - -\begin{code} -module example where - -open import Data.Fin -open import Data.Nat - -data Color : Set where - RGB : Fin 256 → Fin 256 → Fin 256 → Color -\end{code} - -\end{document} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.liquid b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.liquid deleted file mode 100644 index 8f3ea9e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.liquid +++ /dev/null @@ -1,42 +0,0 @@ -# This is an example file. Process it with `./pygmentize -O full -f html -o /liquid-example.html example.liquid`. - -{% raw %} -some {{raw}} liquid syntax - -{% raw %} -{% endraw %} - -Just regular text - what happens? - -{% comment %}My lovely {{comment}} {% comment %}{% endcomment %} - -{% custom_tag params: true %} -{% custom_block my="abc" c = false %} - Just usual {{liquid}}. -{% endcustom_block %} - -{% another_tag "my string param" %} - -{{ variable | upcase }} -{{ var.field | textilize | markdownify }} -{{ var.field.property | textilize | markdownify }} -{{ 'string' | truncate: 100 param='df"g' }} - -{% cycle '1', 2, var %} -{% cycle 'group1': '1', var, 2 %} -{% cycle group2: '1', var, 2 %} - -{% if a == 'B' %} -{% elsif a == 'C%}' %} -{% else %} -{% endif %} - -{% unless not a %} -{% else %} -{% endunless %} - -{% case a %} -{% when 'B' %} -{% when 'C' %} -{% else %} -{% endcase %} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.lua b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.lua deleted file mode 100644 index 0289e58..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.lua +++ /dev/null @@ -1,250 +0,0 @@ ---[[ - Auctioneer Advanced - Version: <%version%> (<%codename%>) - Revision: $Id: CoreMain.lua 2233 2007-09-25 03:57:33Z norganna $ - URL: http://auctioneeraddon.com/ - - This is an addon for World of Warcraft that adds statistical history to the auction data that is collected - when the auction is scanned, so that you can easily determine what price - you will be able to sell an item for at auction or at a vendor whenever you - mouse-over an item in the game - - License: - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program(see GPL.txt); if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - Note: - This AddOn's source code is specifically designed to work with - World of Warcraft's interpreted AddOn system. - You have an implicit licence to use this AddOn with these facilities - since that is its designated purpose as per: - http://www.fsf.org/licensing/licenses/gpl-faq.html#InterpreterIncompat -]] - - ---[[ - See CoreAPI.lua for a description of the modules API -]] - -if (not AucAdvanced) then AucAdvanced = {} end -if (not AucAdvancedData) then AucAdvancedData = {} end -if (not AucAdvancedLocal) then AucAdvancedLocal = {} end -if (not AucAdvancedConfig) then AucAdvancedConfig = {} end - -AucAdvanced.Version="<%version%>"; -if (AucAdvanced.Version == "<".."%version%>") then - AucAdvanced.Version = "5.0.DEV"; -end - -local private = {} - --- For our modular stats system, each stats engine should add their --- subclass to AucAdvanced.Modules.. and store their data into their own --- data table in AucAdvancedData.Stats. -if (not AucAdvanced.Modules) then AucAdvanced.Modules = {Stat={},Util={},Filter={}} end -if (not AucAdvancedData.Stats) then AucAdvancedData.Stats = {} end -if (not AucAdvancedLocal.Stats) then AucAdvancedLocal.Stats = {} end - -function private.TooltipHook(vars, ret, frame, name, hyperlink, quality, quantity, cost, additional) - if EnhTooltip.LinkType(hyperlink) ~= "item" then - return -- Auctioneer hooks into item tooltips only - end - - -- Check to see if we need to force load scandata - local getter = AucAdvanced.Settings.GetSetting - if (getter("scandata.tooltip.display") and getter("scandata.force")) then - AucAdvanced.Scan.GetImage() - end - - for system, systemMods in pairs(AucAdvanced.Modules) do - for engine, engineLib in pairs(systemMods) do - if (engineLib.Processor) then engineLib.Processor("tooltip", frame, name, hyperlink, quality, quantity, cost, additional) end - end - end -end - -function private.HookAH() - hooksecurefunc("AuctionFrameBrowse_Update", AucAdvanced.API.ListUpdate) - for system, systemMods in pairs(AucAdvanced.Modules) do - for engine, engineLib in pairs(systemMods) do - if (engineLib.Processor) then - engineLib.Processor("auctionui") - end - end - end -end - -function private.OnLoad(addon) - addon = addon:lower() - - -- Check if the actual addon itself is loading - if (addon == "auc-advanced") then - Stubby.RegisterAddOnHook("Blizzard_AuctionUi", "Auc-Advanced", private.HookAH) - Stubby.RegisterFunctionHook("EnhTooltip.AddTooltip", 600, private.TooltipHook) - for pos, module in ipairs(AucAdvanced.EmbeddedModules) do - -- These embedded modules have also just been loaded - private.OnLoad(module) - end - end - - -- Notify the actual module if it exists - local auc, sys, eng = strsplit("-", addon) - if (auc == "auc" and sys and eng) then - for system, systemMods in pairs(AucAdvanced.Modules) do - if (sys == system:lower()) then - for engine, engineLib in pairs(systemMods) do - if (eng == engine:lower() and engineLib.OnLoad) then - engineLib.OnLoad(addon) - end - end - end - end - end - - -- Check all modules' load triggers and pass event to processors - for system, systemMods in pairs(AucAdvanced.Modules) do - for engine, engineLib in pairs(systemMods) do - if (engineLib.LoadTriggers and engineLib.LoadTriggers[addon]) then - if (engineLib.OnLoad) then - engineLib.OnLoad(addon) - end - end - if (engineLib.Processor and auc == "auc" and sys and eng) then - engineLib.Processor("load", addon) - end - end - end -end - -function private.OnUnload() - for system, systemMods in pairs(AucAdvanced.Modules) do - for engine, engineLib in pairs(systemMods) do - if (engineLib.OnUnload) then - engineLib.OnUnload() - end - end - end -end - -private.Schedule = {} -function private.OnEvent(...) - local event, arg = select(2, ...) - if (event == "ADDON_LOADED") then - local addon = string.lower(arg) - if (addon:sub(1,4) == "auc-") then - private.OnLoad(addon) - end - elseif (event == "AUCTION_HOUSE_SHOW") then - -- Do Nothing for now - elseif (event == "AUCTION_HOUSE_CLOSED") then - AucAdvanced.Scan.Interrupt() - elseif (event == "PLAYER_LOGOUT") then - AucAdvanced.Scan.Commit(true) - private.OnUnload() - elseif event == "UNIT_INVENTORY_CHANGED" - or event == "ITEM_LOCK_CHANGED" - or event == "CURSOR_UPDATE" - or event == "BAG_UPDATE" - then - private.Schedule["inventory"] = GetTime() + 0.15 - end -end - -function private.OnUpdate(...) - if event == "inventory" then - AucAdvanced.Post.AlertBagsChanged() - end - - local now = GetTime() - for event, time in pairs(private.Schedule) do - if time > now then - for system, systemMods in pairs(AucAdvanced.Modules) do - for engine, engineLib in pairs(systemMods) do - if engineLib.Processor then - engineLib.Processor(event, time) - end - end - end - end - private.Schedule[event] = nil - end -end - -private.Frame = CreateFrame("Frame") -private.Frame:RegisterEvent("ADDON_LOADED") -private.Frame:RegisterEvent("AUCTION_HOUSE_SHOW") -private.Frame:RegisterEvent("AUCTION_HOUSE_CLOSED") -private.Frame:RegisterEvent("UNIT_INVENTORY_CHANGED") -private.Frame:RegisterEvent("ITEM_LOCK_CHANGED") -private.Frame:RegisterEvent("CURSOR_UPDATE") -private.Frame:RegisterEvent("BAG_UPDATE") -private.Frame:RegisterEvent("PLAYER_LOGOUT") -private.Frame:SetScript("OnEvent", private.OnEvent) -private.Frame:SetScript("OnUpdate", private.OnUpdate) - --- Auctioneer's debug functions -AucAdvanced.Debug = {} -local addonName = "Auctioneer" -- the addon's name as it will be displayed in - -- the debug messages -------------------------------------------------------------------------------- --- Prints the specified message to nLog. --- --- syntax: --- errorCode, message = debugPrint([message][, category][, title][, errorCode][, level]) --- --- parameters: --- message - (string) the error message --- nil, no error message specified --- category - (string) the category of the debug message --- nil, no category specified --- title - (string) the title for the debug message --- nil, no title specified --- errorCode - (number) the error code --- nil, no error code specified --- level - (string) nLog message level --- Any nLog.levels string is valid. --- nil, no level specified --- --- returns: --- errorCode - (number) errorCode, if one is specified --- nil, otherwise --- message - (string) message, if one is specified --- nil, otherwise -------------------------------------------------------------------------------- -function AucAdvanced.Debug.DebugPrint(message, category, title, errorCode, level) - return DebugLib.DebugPrint(addonName, message, category, title, errorCode, level) -end - -------------------------------------------------------------------------------- --- Used to make sure that conditions are met within functions. --- If test is false, the error message will be written to nLog and the user's --- default chat channel. --- --- syntax: --- assertion = assert(test, message) --- --- parameters: --- test - (any) false/nil, if the assertion failed --- anything else, otherwise --- message - (string) the message which will be output to the user --- --- returns: --- assertion - (boolean) true, if the test passed --- false, otherwise -------------------------------------------------------------------------------- -function AucAdvanced.Debug.Assert(test, message) - return DebugLib.Assert(addonName, test, message) -end - - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.ma b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.ma deleted file mode 100644 index a8119ea..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.ma +++ /dev/null @@ -1,8 +0,0 @@ -1 + 1 (* This is a comment *) -Global` -SomeNamespace`Foo -f[x_, y__, 3, z___] := tsneirsnteintie "fosrt" neisnrteiasrn -E + 3 -Plus[1,Times[2,3]] -Map[#1 + #2&, SomePairList] -Plus[1.,-1,-1.,-1.0,] \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.monkey b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.monkey deleted file mode 100644 index facd3a7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.monkey +++ /dev/null @@ -1,152 +0,0 @@ -Strict - -' single line comment - -#rem -multi -line -comment -#end - -#rem -nested -#rem -multi -line -#end -comment -#end - -Import mojo - -Const ONECONST:Int = 1 -Const TWOCONST := 2 -Const THREECONST := 3, FOURCONST:Int = 4 - -Global someVariable:Int = 4 - -' sample class from the documentation -Class Game Extends App - - Function New() - End - - Function DrawSpiral(clock) - Local w=DeviceWidth/2 - For Local i#=0 Until w*1.5 Step .2 - Local x#,y# - x=w+i*Sin(i*3+clock) - y=w+i*Cos(i*2+clock) - DrawRect x,y,1,1 - Next - hitbox.Collide(event.pos) - End - - Field updateCount - - Method OnCreate() - Print "spiral" - - SetUpdateRate 60 - End - - Method OnUpdate() - updateCount+=1 - End - - Method OnRender() - Cls - DrawSpiral updateCount - DrawSpiral updateCount*1.1 - End - -End - -Class Enemy - Method Die () Abstract -End - -' extending -Class Hoodlum Extends Enemy - ' field - Field testField:Bool = True - - ' naming class with modulepath - Local currentNode:list.Node - - Method Die () - Print "B'oss, he-- he killed me, b'oss!" - End -End - -' extending with generics -Class VectorNode Extends Node -End - -' interfaces -Interface Computer - Method Boot () - Method Process () - Method Display () -End - -Class PC Implements Computer -End - -' array syntax -Global listOfStuff:String[42] -Global lessStuff:String[5] = listOfStuff[4..8] -Global oneStuff:String = listOfStuff[23] - -'a comma separated sequence -Global scores:Int[]=[10,20,30] -'a comma separated sequence -Global text:String[]=["Hello","There","World"] -Global worstCase:worst.List - -' string type -Global string1:String = "Hello world" -Global string2$ = "Hello world" - -' escape characers in strings -Global string3 := "Hello~zWorld" -Global string4 := "~qHello World~q" -Global string5 := "~tIndented~n" -Global string6 := "tilda is wavey... ~~" - -' string pseudofunctions -Print " Hello World ~n".Trim() ' prints "Hello World" -Print "Hello World".ToUpper() ' prints "HELLO WORLD" - -' Boolean shorttype -Global boolVariable1:Bool = True -Global boolVariable2? = False - -' number formats -Global hexNum1:Int = $3d0dead -Global hexNum2% = $CAFEBABE - -Global floatNum1:Float = 3.141516 -Global floatNum2# = 3.141516 -Global floatNum3 := .141516 - -' preprocessor keywords -#If TARGET = "android" -DoStuff() -#ElseIf TARGET = "ios" -DoOtherStuff() -#End - -' preprocessor variable -#SOMETHING = True -#Print SOMETHING -#If SOMETHING -#End - -' operators -Global a = 32 -Global b = 32 ~ 0 -b ~= 16 -b |= 16 -b &= 16 -Global c = a | b diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.moo b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.moo deleted file mode 100644 index 1a15914..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.moo +++ /dev/null @@ -1,26 +0,0 @@ -if (this.running) - player:tell("[Train] Error: already a jump in progress"); - return; -endif -this.running = 1; -this.aborted = 0; -this:announce_all("[Train] departure in 20 seconds"); -dest = this.targets[random(length(this.targets))]; -this:announce_all("[Train] Next stop is '", dest:title(), "'"); -this:announce_all("You hear the engines starting up"); -this.location:announce("The MOOTrain starts up his engines"); -suspend(20); -if (this.aborted) - this.running = 0; - this.aborted = 0; - return; -endif -this:announce_all("[Train] Departure!"); -this.location:announce_all("The MOOTrain leaves into the 42th dimension!"); -this:announce_all("Outside you see the lights of the 42th dimension"); -this:moveto(dest); -suspend(4); -this:announce_all("The glowing gets less, until you can see the clear shape of the room, the MOOTrain has landed in"); -this.location:announce_all("The MOOTrain arrives out of the 42th dimension!"); -this:announce_all("[Train] arrived in '", dest:title(), "'"); -this.running = 0; \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.moon b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.moon deleted file mode 100644 index d4415e3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.moon +++ /dev/null @@ -1,629 +0,0 @@ --- transform.moon --- Leaf Corcoran (leafot@gmail.com) 2011 --- --- This is part of the MoonScript compiler. See --- MoonScript is licensed under the MIT License --- - -module "moonscript.transform", package.seeall - -types = require "moonscript.types" -util = require "moonscript.util" -data = require "moonscript.data" - -import reversed from util -import ntype, build, smart_node, is_slice from types -import insert from table - -export Statement, Value, NameProxy, LocalName, Run - --- always declares as local -class LocalName - new: (@name) => self[1] = "temp_name" - get_name: => @name - -class NameProxy - new: (@prefix) => - self[1] = "temp_name" - - get_name: (scope) => - if not @name - @name = scope\free_name @prefix, true - @name - - chain: (...) => - items = {...} -- todo: fix ... propagation - items = for i in *items - if type(i) == "string" - {"dot", i} - else - i - - build.chain { - base: self - unpack items - } - - index: (key) => - build.chain { - base: self, {"index", key} - } - - __tostring: => - if @name - ("name<%s>")\format @name - else - ("name")\format @prefix - -class Run - new: (@fn) => - self[1] = "run" - - call: (state) => - self.fn state - --- transform the last stm is a list of stms --- will puke on group -apply_to_last = (stms, fn) -> - -- find last (real) exp - last_exp_id = 0 - for i = #stms, 1, -1 - stm = stms[i] - if stm and util.moon.type(stm) != Run - last_exp_id = i - break - - return for i, stm in ipairs stms - if i == last_exp_id - fn stm - else - stm - --- is a body a sindle expression/statement -is_singular = (body) -> - return false if #body != 1 - if "group" == ntype body - is_singular body[2] - else - true - -constructor_name = "new" - -class Transformer - new: (@transformers, @scope) => - @seen_nodes = {} - - transform: (scope, node, ...) => - -- print scope, node, ... - return node if @seen_nodes[node] - @seen_nodes[node] = true - while true - transformer = @transformers[ntype node] - res = if transformer - transformer(scope, node, ...) or node - else - node - return node if res == node - node = res - - __call: (node, ...) => - @transform @scope, node, ... - - instance: (scope) => - Transformer @transformers, scope - - can_transform: (node) => - @transformers[ntype node] != nil - -construct_comprehension = (inner, clauses) -> - current_stms = inner - for _, clause in reversed clauses - t = clause[1] - current_stms = if t == "for" - _, names, iter = unpack clause - {"foreach", names, iter, current_stms} - elseif t == "when" - _, cond = unpack clause - {"if", cond, current_stms} - else - error "Unknown comprehension clause: "..t - current_stms = {current_stms} - - current_stms[1] - -Statement = Transformer { - assign: (node) => - _, names, values = unpack node - -- bubble cascading assigns - if #values == 1 and types.cascading[ntype values[1]] - values[1] = @transform.statement values[1], (stm) -> - t = ntype stm - if types.is_value stm - {"assign", names, {stm}} - else - stm - - build.group { - {"declare", names} - values[1] - } - else - node - - export: (node) => - -- assign values if they are included - if #node > 2 - if node[2] == "class" - cls = smart_node node[3] - build.group { - {"export", {cls.name}} - cls - } - else - build.group { - node - build.assign { - names: node[2] - values: node[3] - } - } - else - nil - - update: (node) => - _, name, op, exp = unpack node - op_final = op\match "^(.+)=$" - error "Unknown op: "..op if not op_final - build.assign_one name, {"exp", name, op_final, exp} - - import: (node) => - _, names, source = unpack node - - stubs = for name in *names - if type(name) == "table" - name - else - {"dot", name} - - real_names = for name in *names - type(name) == "table" and name[2] or name - - if type(source) == "string" - build.assign { - names: real_names - values: [build.chain { base: source, stub} for stub in *stubs] - } - else - source_name = NameProxy "table" - build.group { - {"declare", real_names} - build["do"] { - build.assign_one source_name, source - build.assign { - names: real_names - values: [build.chain { base: source_name, stub} for stub in *stubs] - } - } - } - - comprehension: (node, action) => - _, exp, clauses = unpack node - - action = action or (exp) -> {exp} - construct_comprehension action(exp), clauses - - -- handle cascading return decorator - if: (node, ret) => - if ret - smart_node node - -- mutate all the bodies - node['then'] = apply_to_last node['then'], ret - for i = 4, #node - case = node[i] - body_idx = #node[i] - case[body_idx] = apply_to_last case[body_idx], ret - node - - with: (node, ret) => - _, exp, block = unpack node - scope_name = NameProxy "with" - build["do"] { - build.assign_one scope_name, exp - Run => @set "scope_var", scope_name - build.group block - if ret - ret scope_name - } - - foreach: (node) => - smart_node node - if ntype(node.iter) == "unpack" - list = node.iter[2] - - index_name = NameProxy "index" - list_name = NameProxy "list" - - slice_var = nil - bounds = if is_slice list - slice = list[#list] - table.remove list - table.remove slice, 1 - - slice[2] = if slice[2] and slice[2] != "" - max_tmp_name = NameProxy "max" - slice_var = build.assign_one max_tmp_name, slice[2] - {"exp", max_tmp_name, "<", 0 - "and", {"length", list_name}, "+", max_tmp_name - "or", max_tmp_name } - else - {"length", list_name} - - slice - else - {1, {"length", list_name}} - - build.group { - build.assign_one list_name, list - slice_var - build["for"] { - name: index_name - bounds: bounds - body: { - {"assign", node.names, {list_name\index index_name}} - build.group node.body - } - } - } - - switch: (node, ret) => - _, exp, conds = unpack node - exp_name = NameProxy "exp" - - -- convert switch conds into if statment conds - convert_cond = (cond) -> - t, case_exp, body = unpack cond - out = {} - insert out, t == "case" and "elseif" or "else" - if t != "else" - insert out, {"exp", case_exp, "==", exp_name} if t != "else" - else - body = case_exp - - if ret - body = apply_to_last body, ret - - insert out, body - - out - - first = true - if_stm = {"if"} - for cond in *conds - if_cond = convert_cond cond - if first - first = false - insert if_stm, if_cond[2] - insert if_stm, if_cond[3] - else - insert if_stm, if_cond - - build.group { - build.assign_one exp_name, exp - if_stm - } - - class: (node) => - _, name, parent_val, body = unpack node - - -- split apart properties and statements - statements = {} - properties = {} - for item in *body - switch item[1] - when "stm" - insert statements, item[2] - when "props" - for tuple in *item[2,] - insert properties, tuple - - -- find constructor - constructor = nil - properties = for tuple in *properties - if tuple[1] == constructor_name - constructor = tuple[2] - nil - else - tuple - - parent_cls_name = NameProxy "parent" - base_name = NameProxy "base" - self_name = NameProxy "self" - cls_name = NameProxy "class" - - if not constructor - constructor = build.fndef { - args: {{"..."}} - arrow: "fat" - body: { - build["if"] { - cond: parent_cls_name - then: { - build.chain { base: "super", {"call", {"..."}} } - } - } - } - } - else - smart_node constructor - constructor.arrow = "fat" - - cls = build.table { - {"__init", constructor} - {"__base", base_name} - {"__name", {"string", '"', name}} -- "quote the string" - {"__parent", parent_cls_name} - } - - -- look up a name in the class object - class_lookup = build["if"] { - cond: {"exp", "val", "==", "nil", "and", parent_cls_name} - then: { - parent_cls_name\index"name" - } - } - insert class_lookup, {"else", {"val"}} - - cls_mt = build.table { - {"__index", build.fndef { - args: {{"cls"}, {"name"}} - body: { - build.assign_one LocalName"val", build.chain { - base: "rawget", {"call", {base_name, "name"}} - } - class_lookup - } - }} - {"__call", build.fndef { - args: {{"cls"}, {"..."}} - body: { - build.assign_one self_name, build.chain { - base: "setmetatable" - {"call", {"{}", base_name}} - } - build.chain { - base: "cls.__init" - {"call", {self_name, "..."}} - } - self_name - } - }} - } - - cls = build.chain { - base: "setmetatable" - {"call", {cls, cls_mt}} - } - - value = nil - with build - value = .block_exp { - Run => - @set "super", (block, chain) -> - if chain - slice = [item for item in *chain[3,]] - new_chain = {"chain", parent_cls_name} - - head = slice[1] - - if head == nil - return parent_cls_name - - switch head[1] - -- calling super, inject calling name and self into chain - when "call" - calling_name = block\get"current_block" - slice[1] = {"call", {"self", unpack head[2]}} - act = if ntype(calling_name) != "value" then "index" else "dot" - insert new_chain, {act, calling_name} - - -- colon call on super, replace class with self as first arg - when "colon" - call = head[3] - insert new_chain, {"dot", head[2]} - slice[1] = { "call", { "self", unpack call[2] } } - - insert new_chain, item for item in *slice - - new_chain - else - parent_cls_name - - .assign_one parent_cls_name, parent_val == "" and "nil" or parent_val - .assign_one base_name, {"table", properties} - .assign_one base_name\chain"__index", base_name - - build["if"] { - cond: parent_cls_name - then: { - .chain { - base: "setmetatable" - {"call", { - base_name, - .chain { base: parent_cls_name, {"dot", "__base"}} - }} - } - } - } - - .assign_one cls_name, cls - .assign_one base_name\chain"__class", cls_name - - .group if #statements > 0 { - .assign_one LocalName"self", cls_name - .group statements - } else {} - - cls_name - } - - value = .group { - .declare names: {name} - .assign { - names: {name} - values: {value} - } - } - - value -} - -class Accumulator - body_idx: { for: 4, while: 3, foreach: 4 } - - new: => - @accum_name = NameProxy "accum" - @value_name = NameProxy "value" - @len_name = NameProxy "len" - - -- wraps node and mutates body - convert: (node) => - index = @body_idx[ntype node] - node[index] = @mutate_body node[index] - @wrap node - - -- wrap the node into a block_exp - wrap: (node) => - build.block_exp { - build.assign_one @accum_name, build.table! - build.assign_one @len_name, 0 - node - @accum_name - } - - -- mutates the body of a loop construct to save last value into accumulator - -- can optionally skip nil results - mutate_body: (body, skip_nil=true) => - val = if not skip_nil and is_singular body - with body[1] - body = {} - else - body = apply_to_last body, (n) -> - build.assign_one @value_name, n - @value_name - - update = { - {"update", @len_name, "+=", 1} - build.assign_one @accum_name\index(@len_name), val - } - - if skip_nil - table.insert body, build["if"] { - cond: {"exp", @value_name, "!=", "nil"} - then: update - } - else - table.insert body, build.group update - - body - -default_accumulator = (node) => - Accumulator!\convert node - - -implicitly_return = (scope) -> - fn = (stm) -> - t = ntype stm - if types.manual_return[t] or not types.is_value stm - stm - elseif types.cascading[t] - scope.transform.statement stm, fn - else - if t == "comprehension" and not types.comprehension_has_value stm - stm - else - {"return", stm} - - fn - -Value = Transformer { - for: default_accumulator - while: default_accumulator - foreach: default_accumulator - - comprehension: (node) => - a = Accumulator! - node = @transform.statement node, (exp) -> - a\mutate_body {exp}, false - a\wrap node - - tblcomprehension: (node) => - _, key_exp, value_exp, clauses = unpack node - - accum = NameProxy "tbl" - dest = build.chain { base: accum, {"index", key_exp} } - inner = build.assign_one dest, value_exp - - build.block_exp { - build.assign_one accum, build.table! - construct_comprehension {inner}, clauses - accum - } - - fndef: (node) => - smart_node node - node.body = apply_to_last node.body, implicitly_return self - node - - if: (node) => build.block_exp { node } - with: (node) => build.block_exp { node } - switch: (node) => - build.block_exp { node } - - -- pull out colon chain - chain: (node) => - stub = node[#node] - if type(stub) == "table" and stub[1] == "colon_stub" - table.remove node, #node - - base_name = NameProxy "base" - fn_name = NameProxy "fn" - - is_super = node[2] == "super" - @transform.value build.block_exp { - build.assign { - names: {base_name} - values: {node} - } - - build.assign { - names: {fn_name} - values: { - build.chain { base: base_name, {"dot", stub[2]} } - } - } - - build.fndef { - args: {{"..."}} - body: { - build.chain { - base: fn_name, {"call", {is_super and "self" or base_name, "..."}} - } - } - } - } - - block_exp: (node) => - _, body = unpack node - - fn = nil - arg_list = {} - - insert body, Run => - if @has_varargs - insert arg_list, "..." - insert fn.args, {"..."} - - fn = smart_node build.fndef body: body - build.chain { base: {"parens", fn}, {"call", arg_list} } -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.mq4 b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.mq4 deleted file mode 100644 index 54a5fa6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.mq4 +++ /dev/null @@ -1,187 +0,0 @@ -//+------------------------------------------------------------------+ -//| PeriodConverter.mq4 | -//| Copyright 2006-2014, MetaQuotes Software Corp. | -//| http://www.metaquotes.net | -//+------------------------------------------------------------------+ -#property copyright "2006-2014, MetaQuotes Software Corp." -#property link "http://www.mql4.com" -#property description "Period Converter to updated format of history base" -#property strict -#property show_inputs -#include - -input int InpPeriodMultiplier=3; // Period multiplier factor -int ExtHandle=-1; -//+------------------------------------------------------------------+ -//| script program start function | -//+------------------------------------------------------------------+ -void OnStart() - { - datetime time0; - ulong last_fpos=0; - long last_volume=0; - int i,start_pos,periodseconds; - int hwnd=0,cnt=0; -//---- History header - int file_version=401; - string c_copyright; - string c_symbol=Symbol(); - int i_period=Period()*InpPeriodMultiplier; - int i_digits=Digits; - int i_unused[13]; - MqlRates rate; -//--- - ExtHandle=FileOpenHistory(c_symbol+(string)i_period+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI); - if(ExtHandle<0) - return; - c_copyright="(C)opyright 2003, MetaQuotes Software Corp."; - ArrayInitialize(i_unused,0); -//--- write history file header - FileWriteInteger(ExtHandle,file_version,LONG_VALUE); - FileWriteString(ExtHandle,c_copyright,64); - FileWriteString(ExtHandle,c_symbol,12); - FileWriteInteger(ExtHandle,i_period,LONG_VALUE); - FileWriteInteger(ExtHandle,i_digits,LONG_VALUE); - FileWriteInteger(ExtHandle,0,LONG_VALUE); - FileWriteInteger(ExtHandle,0,LONG_VALUE); - FileWriteArray(ExtHandle,i_unused,0,13); -//--- write history file - periodseconds=i_period*60; - start_pos=Bars-1; - rate.open=Open[start_pos]; - rate.low=Low[start_pos]; - rate.high=High[start_pos]; - rate.tick_volume=(long)Volume[start_pos]; - rate.spread=0; - rate.real_volume=0; - //--- normalize open time - rate.time=Time[start_pos]/periodseconds; - rate.time*=periodseconds; - for(i=start_pos-1; i>=0; i--) - { - if(IsStopped()) - break; - time0=Time[i]; - //--- history may be updated - if(i==0) - { - //--- modify index if history was updated - if(RefreshRates()) - i=iBarShift(NULL,0,time0); - } - //--- - if(time0>=rate.time+periodseconds || i==0) - { - if(i==0 && time0Low[0]) - rate.low=Low[0]; - if(rate.high=rate.time+periodseconds) - { - rate.time=time0/periodseconds; - rate.time*=periodseconds; - rate.open=Open[i]; - rate.low=Low[i]; - rate.high=High[i]; - rate.close=Close[i]; - rate.tick_volume=last_volume; - } - } - else - { - rate.tick_volume+=(long)Volume[i]; - if(rate.low>Low[i]) - rate.low=Low[i]; - if(rate.highLow[0]) - rate.low=Low[0]; - if(rate.highLow[1]) - rate.low=Low[1]; - if(rate.high=2) - { - PostMessageA(hwnd,WM_COMMAND,33324,0); - last_time=cur_time; - } - } - Sleep(50); - } -//--- - } -//+------------------------------------------------------------------+ -//| | -//+------------------------------------------------------------------+ -void OnDeinit(const int reason) - { -//--- - if(ExtHandle>=0) - { - FileClose(ExtHandle); - ExtHandle=-1; - } -//--- - } -//+------------------------------------------------------------------+ \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.mqh b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.mqh deleted file mode 100644 index ee80ed5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.mqh +++ /dev/null @@ -1,123 +0,0 @@ -//+------------------------------------------------------------------+ -//| Array.mqh | -//| Copyright 2009-2013, MetaQuotes Software Corp. | -//| http://www.mql4.com | -//+------------------------------------------------------------------+ -#include -//+------------------------------------------------------------------+ -//| Class CArray | -//| Purpose: Base class of dynamic arrays. | -//| Derives from class CObject. | -//+------------------------------------------------------------------+ -class CArray : public CObject - { -protected: - int m_step_resize; // increment size of the array - int m_data_total; // number of elements - int m_data_max; // maximmum size of the array without memory reallocation - int m_sort_mode; // mode of array sorting - -public: - CArray(void); - ~CArray(void); - //--- methods of access to protected data - int Step(void) const { return(m_step_resize); } - bool Step(const int step); - int Total(void) const { return(m_data_total); } - int Available(void) const { return(m_data_max-m_data_total); } - int Max(void) const { return(m_data_max); } - bool IsSorted(const int mode=0) const { return(m_sort_mode==mode); } - int SortMode(void) const { return(m_sort_mode); } - //--- cleaning method - void Clear(void) { m_data_total=0; } - //--- methods for working with files - virtual bool Save(const int file_handle); - virtual bool Load(const int file_handle); - //--- sorting method - void Sort(const int mode=0); - -protected: - virtual void QuickSort(int beg,int end,const int mode=0) { } - }; -//+------------------------------------------------------------------+ -//| Constructor | -//+------------------------------------------------------------------+ -CArray::CArray(void) : m_step_resize(16), - m_data_total(0), - m_data_max(0), - m_sort_mode(-1) - { - } -//+------------------------------------------------------------------+ -//| Destructor | -//+------------------------------------------------------------------+ -CArray::~CArray(void) - { - } -//+------------------------------------------------------------------+ -//| Method Set for variable m_step_resize | -//+------------------------------------------------------------------+ -bool CArray::Step(const int step) - { -//--- check - if(step>0) - { - m_step_resize=step; - return(true); - } -//--- failure - return(false); - } -//+------------------------------------------------------------------+ -//| Sorting an array in ascending order | -//+------------------------------------------------------------------+ -void CArray::Sort(const int mode) - { -//--- check - if(IsSorted(mode)) - return; - m_sort_mode=mode; - if(m_data_total<=1) - return; -//--- sort - QuickSort(0,m_data_total-1,mode); - } -//+------------------------------------------------------------------+ -//| Writing header of array to file | -//+------------------------------------------------------------------+ -bool CArray::Save(const int file_handle) - { -//--- check handle - if(file_handle!=INVALID_HANDLE) - { - //--- write start marker - 0xFFFFFFFFFFFFFFFF - if(FileWriteLong(file_handle,-1)==sizeof(long)) - { - //--- write array type - if(FileWriteInteger(file_handle,Type(),INT_VALUE)==INT_VALUE) - return(true); - } - } -//--- failure - return(false); - } -//+------------------------------------------------------------------+ -//| Reading header of array from file | -//+------------------------------------------------------------------+ -bool CArray::Load(const int file_handle) - { -//--- check handle - if(file_handle!=INVALID_HANDLE) - { - //--- read and check start marker - 0xFFFFFFFFFFFFFFFF - if(FileReadLong(file_handle)==-1) - { - //--- read and check array type - if(FileReadInteger(file_handle,INT_VALUE)==Type()) - return(true); - } - } -//--- failure - return(false); - } -//+------------------------------------------------------------------+ diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.msc b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.msc deleted file mode 100644 index d51b32a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.msc +++ /dev/null @@ -1,43 +0,0 @@ -msc { - hscale=5; - - //test comment - - a,b,c,d; - -/* another -comment -goes here */ /* too */ // now - - ... [label="test1", id="1"]; - --- [label="test2", id="2"]; - ||| [label="test3", id="2"]; - a ABOX b; - a--b [label="test4", id="2"]; - a == b [label="test5", id="2"]; - a .. b [label="test6", id="2"]; - a::b [label="test7", id="2"]; - a<<=>> b [label="test8", id="2"], - b <->c [label="test9", id="2"], - b RBOX c; - a BOX d; - a<=> b [label="test10", id="2"]; - a <<>> b [label="test11", id="2"]; - a<:>b [label="test12", id="2"]; - a->b [label="test13", id="2"]; - a =>> b [label="test14", id="2"], - b >> c [label="test15", id="2"], - a=> b [label="test16", id="2"]; - a :>b [label="test17", id="2"]; - a-x b [label="test18", id="2"]; - a -Xb [label="test19", id="2"]; - a<- b [label="test20", id="2"]; - a <<=b [label="test21", id="2"]; - a<< b [label="test22", id="2"]; - a <= b [label="test23", id="2"]; - a<: b [label="test24", id="2"]; - a -xb [label="test25", id="2"]; - a-X b [ label="test26",id="2" ]; - a->* [label="test27" , id="2"]; - *<-b [label="test28",id="28"]; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.ni b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.ni deleted file mode 100644 index 32279e8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.ni +++ /dev/null @@ -1,57 +0,0 @@ - | | | -"Informal by Nature" -[ * * * ] -by -[ * * * ] -David Corbett - -[This is a [nested] comment.] - -Section 1 - Use option translation - -Use maximum tests of at least 100 translates as (- -@c -Constant MAX_TESTS = {N}; —). | Section 2 - -A room has a number called size. - -The Kitchen is a room. "A nondescript kitchen.“ The Kitchen has size 2. - -When play begins: - say "Testing:[line break]"; - test 0. - -To test (N — number): (— - if (Test({N}) == (+size of the Kitchen [this should succeed]+)) {-open—brace} - print â€Success.^â€; - {-close-brace} else { - print “Failure.^"; - } -]; ! You shouldn't end a routine within a phrase definition, but it works. -[ Unused; - #Include "\ -@p \ -"; ! At signs hold no power here. -! Of course, the file "@p .h" must exist. --). - -Include (-!% This is not ICL. - -[ Test x; - if (x) {x++;} - {–! Single line comment.} -@inc x; -@p At signs. -... -@Purpose: ... -... -@-... -@c ... -@inc x; -@c -@c - return x; -]; -@Purpose: ... -@------------------------------------------------------------------------------- --). diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.nim b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.nim deleted file mode 100644 index 319da01..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.nim +++ /dev/null @@ -1,1010 +0,0 @@ -import glib2, gtk2, gdk2, gtksourceview, dialogs, os, pango, osproc, strutils -import pegs, streams -import settings, types, cfg, search - -{.push callConv:cdecl.} - -const - NimrodProjectExt = ".nimprj" - -var win: types.MainWin -win.Tabs = @[] - -search.win = addr(win) - -var lastSession: seq[string] = @[] - -var confParseFail = False # This gets set to true - # When there is an error parsing the config - -# Load the settings -try: - win.settings = cfg.load(lastSession) -except ECFGParse: - # TODO: Make the dialog show the exception - confParseFail = True - win.settings = cfg.defaultSettings() -except EIO: - win.settings = cfg.defaultSettings() - -proc getProjectTab(): int = - for i in 0..high(win.tabs): - if win.tabs[i].filename.endswith(NimrodProjectExt): return i - -proc saveTab(tabNr: int, startpath: string) = - if tabNr < 0: return - if win.Tabs[tabNr].saved: return - var path = "" - if win.Tabs[tabNr].filename == "": - path = ChooseFileToSave(win.w, startpath) - # dialogs.nim STOCK_OPEN instead of STOCK_SAVE - else: - path = win.Tabs[tabNr].filename - - if path != "": - var buffer = PTextBuffer(win.Tabs[tabNr].buffer) - # Get the text from the TextView - var startIter: TTextIter - buffer.getStartIter(addr(startIter)) - - var endIter: TTextIter - buffer.getEndIter(addr(endIter)) - - var text = buffer.getText(addr(startIter), addr(endIter), False) - # Save it to a file - var f: TFile - if open(f, path, fmWrite): - f.write(text) - f.close() - - win.tempStuff.lastSaveDir = splitFile(path).dir - - # Change the tab name and .Tabs.filename etc. - win.Tabs[tabNr].filename = path - win.Tabs[tabNr].saved = True - var name = extractFilename(path) - - var cTab = win.Tabs[tabNr] - cTab.label.setText(name) - else: - error(win.w, "Unable to write to file") - -proc saveAllTabs() = - for i in 0..high(win.tabs): - saveTab(i, os.splitFile(win.tabs[i].filename).dir) - -# GTK Events -# -- w(PWindow) -proc destroy(widget: PWidget, data: pgpointer) {.cdecl.} = - # gather some settings - win.settings.VPanedPos = PPaned(win.sourceViewTabs.getParent()).getPosition() - win.settings.winWidth = win.w.allocation.width - win.settings.winHeight = win.w.allocation.height - - # save the settings - win.save() - # then quit - main_quit() - -proc delete_event(widget: PWidget, event: PEvent, user_data: pgpointer): bool = - var quit = True - for i in low(win.Tabs)..len(win.Tabs)-1: - if not win.Tabs[i].saved: - var askSave = dialogNewWithButtons("", win.w, 0, - STOCK_SAVE, RESPONSE_ACCEPT, STOCK_CANCEL, - RESPONSE_CANCEL, - "Close without saving", RESPONSE_REJECT, nil) - askSave.setTransientFor(win.w) - # TODO: Make this dialog look better - var label = labelNew(win.Tabs[i].filename & - " is unsaved, would you like to save it ?") - PBox(askSave.vbox).pack_start(label, False, False, 0) - label.show() - - var resp = askSave.run() - gtk2.destroy(PWidget(askSave)) - case resp - of RESPONSE_ACCEPT: - saveTab(i, os.splitFile(win.tabs[i].filename).dir) - quit = True - of RESPONSE_CANCEL: - quit = False - break - of RESPONSE_REJECT: - quit = True - else: - quit = False - break - - # If False is returned the window will close - return not quit - -proc windowState_Changed(widget: PWidget, event: PEventWindowState, - user_data: pgpointer) = - win.settings.winMaximized = (event.newWindowState and - WINDOW_STATE_MAXIMIZED) != 0 - -# -- SourceView(PSourceView) & SourceBuffer -proc updateStatusBar(buffer: PTextBuffer){.cdecl.} = - # Incase this event gets fired before - # bottomBar is initialized - if win.bottomBar != nil and not win.tempStuff.stopSBUpdates: - var iter: TTextIter - - win.bottomBar.pop(0) - buffer.getIterAtMark(addr(iter), buffer.getInsert()) - var row = getLine(addr(iter)) + 1 - var col = getLineOffset(addr(iter)) - discard win.bottomBar.push(0, "Line: " & $row & " Column: " & $col) - -proc cursorMoved(buffer: PTextBuffer, location: PTextIter, - mark: PTextMark, user_data: pgpointer){.cdecl.} = - updateStatusBar(buffer) - -proc onCloseTab(btn: PButton, user_data: PWidget) = - if win.sourceViewTabs.getNPages() > 1: - var tab = win.sourceViewTabs.pageNum(user_data) - win.sourceViewTabs.removePage(tab) - - win.Tabs.delete(tab) - -proc onSwitchTab(notebook: PNotebook, page: PNotebookPage, pageNum: guint, - user_data: pgpointer) = - if win.Tabs.len()-1 >= pageNum: - win.w.setTitle("Aporia IDE - " & win.Tabs[pageNum].filename) - -proc createTabLabel(name: string, t_child: PWidget): tuple[box: PWidget, - label: PLabel] = - var box = hboxNew(False, 0) - var label = labelNew(name) - var closebtn = buttonNew() - closeBtn.setLabel(nil) - var iconSize = iconSizeFromName("tabIconSize") - if iconSize == 0: - iconSize = iconSizeRegister("tabIconSize", 10, 10) - var image = imageNewFromStock(STOCK_CLOSE, iconSize) - discard gSignalConnect(closebtn, "clicked", G_Callback(onCloseTab), t_child) - closebtn.setImage(image) - gtk2.setRelief(closebtn, RELIEF_NONE) - box.packStart(label, True, True, 0) - box.packEnd(closebtn, False, False, 0) - box.showAll() - return (box, label) - -proc changed(buffer: PTextBuffer, user_data: pgpointer) = - # Update the 'Line & Column' - #updateStatusBar(buffer) - - # Change the tabs state to 'unsaved' - # and add '*' to the Tab Name - var current = win.SourceViewTabs.getCurrentPage() - var name = "" - if win.Tabs[current].filename == "": - win.Tabs[current].saved = False - name = "Untitled *" - else: - win.Tabs[current].saved = False - name = extractFilename(win.Tabs[current].filename) & " *" - - var cTab = win.Tabs[current] - cTab.label.setText(name) - -# Other(Helper) functions - -proc initSourceView(SourceView: var PWidget, scrollWindow: var PScrolledWindow, - buffer: var PSourceBuffer) = - # This gets called by addTab - # Each tabs creates a new SourceView - # SourceScrolledWindow(ScrolledWindow) - scrollWindow = scrolledWindowNew(nil, nil) - scrollWindow.setPolicy(POLICY_AUTOMATIC, POLICY_AUTOMATIC) - scrollWindow.show() - - # SourceView(gtkSourceView) - SourceView = sourceViewNew(buffer) - PSourceView(SourceView).setInsertSpacesInsteadOfTabs(True) - PSourceView(SourceView).setIndentWidth(win.settings.indentWidth) - PSourceView(SourceView).setShowLineNumbers(win.settings.showLineNumbers) - PSourceView(SourceView).setHighlightCurrentLine( - win.settings.highlightCurrentLine) - PSourceView(SourceView).setShowRightMargin(win.settings.rightMargin) - PSourceView(SourceView).setAutoIndent(win.settings.autoIndent) - - var font = font_description_from_string(win.settings.font) - SourceView.modifyFont(font) - - scrollWindow.add(SourceView) - SourceView.show() - - buffer.setHighlightMatchingBrackets( - win.settings.highlightMatchingBrackets) - - # UGLY workaround for yet another compiler bug: - discard gsignalConnect(buffer, "mark-set", - GCallback(aporia.cursorMoved), nil) - discard gsignalConnect(buffer, "changed", GCallback(aporia.changed), nil) - - # -- Set the syntax highlighter scheme - buffer.setScheme(win.scheme) - -proc addTab(name, filename: string) = - ## Adds a tab, if filename is not "" reads the file. And sets - ## the tabs SourceViews text to that files contents. - assert(win.nimLang != nil) - var buffer: PSourceBuffer = sourceBufferNew(win.nimLang) - - if filename != nil and filename != "": - var lang = win.langMan.guessLanguage(filename, nil) - if lang != nil: - buffer.setLanguage(lang) - else: - buffer.setHighlightSyntax(False) - - var nam = name - if nam == "": nam = "Untitled" - if filename == "": nam.add(" *") - elif filename != "" and name == "": - # Disable the undo/redo manager. - buffer.begin_not_undoable_action() - - # Load the file. - var file: string = readFile(filename) - if file != nil: - buffer.set_text(file, len(file)) - - # Enable the undo/redo manager. - buffer.end_not_undoable_action() - - # Get the name.ext of the filename, for the tabs title - nam = extractFilename(filename) - - # Init the sourceview - var sourceView: PWidget - var scrollWindow: PScrolledWindow - initSourceView(sourceView, scrollWindow, buffer) - - var (TabLabel, labelText) = createTabLabel(nam, scrollWindow) - # Add a tab - discard win.SourceViewTabs.appendPage(scrollWindow, TabLabel) - - var nTab: Tab - nTab.buffer = buffer - nTab.sourceView = sourceView - nTab.label = labelText - nTab.saved = (filename != "") - nTab.filename = filename - win.Tabs.add(nTab) - - PTextView(SourceView).setBuffer(nTab.buffer) - -# GTK Events Contd. -# -- TopMenu & TopBar - -proc newFile(menuItem: PMenuItem, user_data: pgpointer) = - addTab("", "") - win.sourceViewTabs.setCurrentPage(win.Tabs.len()-1) - -proc openFile(menuItem: PMenuItem, user_data: pgpointer) = - var startpath = "" - var currPage = win.SourceViewTabs.getCurrentPage() - if currPage <% win.tabs.len: - startpath = os.splitFile(win.tabs[currPage].filename).dir - - if startpath.len == 0: - # Use lastSavePath as the startpath - startpath = win.tempStuff.lastSaveDir - if startpath.len == 0: - startpath = os.getHomeDir() - - var files = ChooseFilesToOpen(win.w, startpath) - if files.len() > 0: - for f in items(files): - try: - addTab("", f) - except EIO: - error(win.w, "Unable to read from file") - # Switch to the newly created tab - win.sourceViewTabs.setCurrentPage(win.Tabs.len()-1) - -proc saveFile_Activate(menuItem: PMenuItem, user_data: pgpointer) = - var current = win.SourceViewTabs.getCurrentPage() - saveTab(current, os.splitFile(win.tabs[current].filename).dir) - -proc saveFileAs_Activate(menuItem: PMenuItem, user_data: pgpointer) = - var current = win.SourceViewTabs.getCurrentPage() - var (filename, saved) = (win.Tabs[current].filename, win.Tabs[current].saved) - - win.Tabs[current].saved = False - win.Tabs[current].filename = "" - saveTab(current, os.splitFile(filename).dir) - # If the user cancels the save file dialog. Restore the previous filename - # and saved state - if win.Tabs[current].filename == "": - win.Tabs[current].filename = filename - win.Tabs[current].saved = saved - -proc undo(menuItem: PMenuItem, user_data: pgpointer) = - var current = win.SourceViewTabs.getCurrentPage() - if win.Tabs[current].buffer.canUndo(): - win.Tabs[current].buffer.undo() - -proc redo(menuItem: PMenuItem, user_data: pgpointer) = - var current = win.SourceViewTabs.getCurrentPage() - if win.Tabs[current].buffer.canRedo(): - win.Tabs[current].buffer.redo() - -proc find_Activate(menuItem: PMenuItem, user_data: pgpointer) = - # Get the selected text, and set the findEntry to it. - var currentTab = win.SourceViewTabs.getCurrentPage() - var insertIter: TTextIter - win.Tabs[currentTab].buffer.getIterAtMark(addr(insertIter), - win.Tabs[currentTab].buffer.getInsert()) - var insertOffset = addr(insertIter).getOffset() - - var selectIter: TTextIter - win.Tabs[currentTab].buffer.getIterAtMark(addr(selectIter), - win.Tabs[currentTab].buffer.getSelectionBound()) - var selectOffset = addr(selectIter).getOffset() - - if insertOffset != selectOffset: - var text = win.Tabs[currentTab].buffer.getText(addr(insertIter), - addr(selectIter), false) - win.findEntry.setText(text) - - win.findBar.show() - win.findEntry.grabFocus() - win.replaceEntry.hide() - win.replaceLabel.hide() - win.replaceBtn.hide() - win.replaceAllBtn.hide() - -proc replace_Activate(menuitem: PMenuItem, user_data: pgpointer) = - win.findBar.show() - win.findEntry.grabFocus() - win.replaceEntry.show() - win.replaceLabel.show() - win.replaceBtn.show() - win.replaceAllBtn.show() - -proc settings_Activate(menuitem: PMenuItem, user_data: pgpointer) = - settings.showSettings(win) - -proc viewBottomPanel_Toggled(menuitem: PCheckMenuItem, user_data: pgpointer) = - win.settings.bottomPanelVisible = menuitem.itemGetActive() - if win.settings.bottomPanelVisible: - win.bottomPanelTabs.show() - else: - win.bottomPanelTabs.hide() - -var - pegLineError = peg"{[^(]*} '(' {\d+} ', ' \d+ ') Error:' \s* {.*}" - pegLineWarning = peg"{[^(]*} '(' {\d+} ', ' \d+ ') ' ('Warning:'/'Hint:') \s* {.*}" - pegOtherError = peg"'Error:' \s* {.*}" - pegSuccess = peg"'Hint: operation successful'.*" - -proc addText(textView: PTextView, text: string, colorTag: PTextTag = nil) = - if text != nil: - var iter: TTextIter - textView.getBuffer().getEndIter(addr(iter)) - - if colorTag == nil: - textView.getBuffer().insert(addr(iter), text, len(text)) - else: - textView.getBuffer().insertWithTags(addr(iter), text, len(text), colorTag, - nil) - -proc createColor(textView: PTextView, name, color: string): PTextTag = - var tagTable = textView.getBuffer().getTagTable() - result = tagTable.tableLookup(name) - if result == nil: - result = textView.getBuffer().createTag(name, "foreground", color, nil) - -when not defined(os.findExe): - proc findExe(exe: string): string = - ## returns "" if the exe cannot be found - result = addFileExt(exe, os.exeExt) - if ExistsFile(result): return - var path = os.getEnv("PATH") - for candidate in split(path, pathSep): - var x = candidate / result - if ExistsFile(x): return x - result = "" - -proc GetCmd(cmd, filename: string): string = - var f = quoteIfContainsWhite(filename) - if cmd =~ peg"\s* '$' y'findExe' '(' {[^)]+} ')' {.*}": - var exe = quoteIfContainsWhite(findExe(matches[0])) - if exe.len == 0: exe = matches[0] - result = exe & " " & matches[1] % f - else: - result = cmd % f - -proc showBottomPanel() = - if not win.settings.bottomPanelVisible: - win.bottomPanelTabs.show() - win.settings.bottomPanelVisible = true - PCheckMenuItem(win.viewBottomPanelMenuItem).itemSetActive(true) - # Scroll to the end of the TextView - # This is stupid, it works sometimes... it's random - var endIter: TTextIter - win.outputTextView.getBuffer().getEndIter(addr(endIter)) - discard win.outputTextView.scrollToIter( - addr(endIter), 0.25, False, 0.0, 0.0) - -proc compileRun(currentTab: int, shouldRun: bool) = - if win.Tabs[currentTab].filename.len == 0: return - # Clear the outputTextView - win.outputTextView.getBuffer().setText("", 0) - - var outp = osProc.execProcess(GetCmd(win.settings.nimrodCmd, - win.Tabs[currentTab].filename)) - # Colors - var normalTag = createColor(win.outputTextView, "normalTag", "#3d3d3d") - var errorTag = createColor(win.outputTextView, "errorTag", "red") - var warningTag = createColor(win.outputTextView, "warningTag", "darkorange") - var successTag = createColor(win.outputTextView, "successTag", "darkgreen") - for x in outp.splitLines(): - if x =~ pegLineError / pegOtherError: - win.outputTextView.addText("\n" & x, errorTag) - elif x=~ pegSuccess: - win.outputTextView.addText("\n" & x, successTag) - - # Launch the process - if shouldRun: - var filename = changeFileExt(win.Tabs[currentTab].filename, os.ExeExt) - var output = "\n" & osProc.execProcess(filename) - win.outputTextView.addText(output) - elif x =~ pegLineWarning: - win.outputTextView.addText("\n" & x, warningTag) - else: - win.outputTextView.addText("\n" & x, normalTag) - showBottomPanel() - -proc CompileCurrent_Activate(menuitem: PMenuItem, user_data: pgpointer) = - saveFile_Activate(nil, nil) - compileRun(win.SourceViewTabs.getCurrentPage(), false) - -proc CompileRunCurrent_Activate(menuitem: PMenuItem, user_data: pgpointer) = - saveFile_Activate(nil, nil) - compileRun(win.SourceViewTabs.getCurrentPage(), true) - -proc CompileProject_Activate(menuitem: PMenuItem, user_data: pgpointer) = - saveAllTabs() - compileRun(getProjectTab(), false) - -proc CompileRunProject_Activate(menuitem: PMenuItem, user_data: pgpointer) = - saveAllTabs() - compileRun(getProjectTab(), true) - -proc RunCustomCommand(cmd: string) = - saveFile_Activate(nil, nil) - var currentTab = win.SourceViewTabs.getCurrentPage() - if win.Tabs[currentTab].filename.len == 0 or cmd.len == 0: return - # Clear the outputTextView - win.outputTextView.getBuffer().setText("", 0) - var outp = osProc.execProcess(GetCmd(cmd, win.Tabs[currentTab].filename)) - var normalTag = createColor(win.outputTextView, "normalTag", "#3d3d3d") - for x in outp.splitLines(): - win.outputTextView.addText("\n" & x, normalTag) - showBottomPanel() - -proc RunCustomCommand1(menuitem: PMenuItem, user_data: pgpointer) = - RunCustomCommand(win.settings.customCmd1) - -proc RunCustomCommand2(menuitem: PMenuItem, user_data: pgpointer) = - RunCustomCommand(win.settings.customCmd2) - -proc RunCustomCommand3(menuitem: PMenuItem, user_data: pgpointer) = - RunCustomCommand(win.settings.customCmd3) - -# -- FindBar - -proc nextBtn_Clicked(button: PButton, user_data: pgpointer) = findText(True) -proc prevBtn_Clicked(button: PButton, user_data: pgpointer) = findText(False) - -proc replaceBtn_Clicked(button: PButton, user_data: pgpointer) = - var currentTab = win.SourceViewTabs.getCurrentPage() - var start, theEnd: TTextIter - if not win.Tabs[currentTab].buffer.getSelectionBounds( - addr(start), addr(theEnd)): - # If no text is selected, try finding a match. - findText(True) - if not win.Tabs[currentTab].buffer.getSelectionBounds( - addr(start), addr(theEnd)): - # No match - return - - # Remove the text - win.Tabs[currentTab].buffer.delete(addr(start), addr(theEnd)) - # Insert the replacement - var text = getText(win.replaceEntry) - win.Tabs[currentTab].buffer.insert(addr(start), text, len(text)) - -proc replaceAllBtn_Clicked(button: PButton, user_data: pgpointer) = - var find = getText(win.findEntry) - var replace = getText(win.replaceEntry) - discard replaceAll(find, replace) - -proc closeBtn_Clicked(button: PButton, user_data: pgpointer) = - win.findBar.hide() - -proc caseSens_Changed(radiomenuitem: PRadioMenuitem, user_data: pgpointer) = - win.settings.search = "casesens" -proc caseInSens_Changed(radiomenuitem: PRadioMenuitem, user_data: pgpointer) = - win.settings.search = "caseinsens" -proc style_Changed(radiomenuitem: PRadioMenuitem, user_data: pgpointer) = - win.settings.search = "style" -proc regex_Changed(radiomenuitem: PRadioMenuitem, user_data: pgpointer) = - win.settings.search = "regex" -proc peg_Changed(radiomenuitem: PRadioMenuitem, user_data: pgpointer) = - win.settings.search = "peg" - -proc extraBtn_Clicked(button: PButton, user_data: pgpointer) = - var extraMenu = menuNew() - var group: PGSList - - var caseSensMenuItem = radio_menu_item_new(group, "Case sensitive") - extraMenu.append(caseSensMenuItem) - discard signal_connect(caseSensMenuItem, "toggled", - SIGNAL_FUNC(caseSens_Changed), nil) - caseSensMenuItem.show() - group = caseSensMenuItem.ItemGetGroup() - - var caseInSensMenuItem = radio_menu_item_new(group, "Case insensitive") - extraMenu.append(caseInSensMenuItem) - discard signal_connect(caseInSensMenuItem, "toggled", - SIGNAL_FUNC(caseInSens_Changed), nil) - caseInSensMenuItem.show() - group = caseInSensMenuItem.ItemGetGroup() - - var styleMenuItem = radio_menu_item_new(group, "Style insensitive") - extraMenu.append(styleMenuItem) - discard signal_connect(styleMenuItem, "toggled", - SIGNAL_FUNC(style_Changed), nil) - styleMenuItem.show() - group = styleMenuItem.ItemGetGroup() - - var regexMenuItem = radio_menu_item_new(group, "Regex") - extraMenu.append(regexMenuItem) - discard signal_connect(regexMenuItem, "toggled", - SIGNAL_FUNC(regex_Changed), nil) - regexMenuItem.show() - group = regexMenuItem.ItemGetGroup() - - var pegMenuItem = radio_menu_item_new(group, "Pegs") - extraMenu.append(pegMenuItem) - discard signal_connect(pegMenuItem, "toggled", - SIGNAL_FUNC(peg_Changed), nil) - pegMenuItem.show() - - # Make the correct radio button active - case win.settings.search - of "casesens": - PCheckMenuItem(caseSensMenuItem).ItemSetActive(True) - of "caseinsens": - PCheckMenuItem(caseInSensMenuItem).ItemSetActive(True) - of "style": - PCheckMenuItem(styleMenuItem).ItemSetActive(True) - of "regex": - PCheckMenuItem(regexMenuItem).ItemSetActive(True) - of "peg": - PCheckMenuItem(pegMenuItem).ItemSetActive(True) - - extraMenu.popup(nil, nil, nil, nil, 0, get_current_event_time()) - -# GUI Initialization - -proc createAccelMenuItem(toolsMenu: PMenu, accGroup: PAccelGroup, - label: string, acc: gint, - action: proc (i: PMenuItem, p: pgpointer)) = - var result = menu_item_new(label) - result.addAccelerator("activate", accGroup, acc, 0, ACCEL_VISIBLE) - ToolsMenu.append(result) - show(result) - discard signal_connect(result, "activate", SIGNAL_FUNC(action), nil) - -proc createSeparator(menu: PMenu) = - var sep = separator_menu_item_new() - menu.append(sep) - sep.show() - -proc initTopMenu(MainBox: PBox) = - # Create a accelerator group, used for shortcuts - # like CTRL + S in SaveMenuItem - var accGroup = accel_group_new() - add_accel_group(win.w, accGroup) - - # TopMenu(MenuBar) - var TopMenu = menuBarNew() - - # FileMenu - var FileMenu = menuNew() - - var NewMenuItem = menu_item_new("New") # New - FileMenu.append(NewMenuItem) - show(NewMenuItem) - discard signal_connect(NewMenuItem, "activate", - SIGNAL_FUNC(newFile), nil) - - createSeparator(FileMenu) - - var OpenMenuItem = menu_item_new("Open...") # Open... - # CTRL + O - OpenMenuItem.add_accelerator("activate", accGroup, - KEY_o, CONTROL_MASK, ACCEL_VISIBLE) - FileMenu.append(OpenMenuItem) - show(OpenMenuItem) - discard signal_connect(OpenMenuItem, "activate", - SIGNAL_FUNC(aporia.openFile), nil) - - var SaveMenuItem = menu_item_new("Save") # Save - # CTRL + S - SaveMenuItem.add_accelerator("activate", accGroup, - KEY_s, CONTROL_MASK, ACCEL_VISIBLE) - FileMenu.append(SaveMenuItem) - show(SaveMenuItem) - discard signal_connect(SaveMenuItem, "activate", - SIGNAL_FUNC(saveFile_activate), nil) - - var SaveAsMenuItem = menu_item_new("Save As...") # Save as... - - SaveAsMenuItem.add_accelerator("activate", accGroup, - KEY_s, CONTROL_MASK or gdk2.SHIFT_MASK, ACCEL_VISIBLE) - FileMenu.append(SaveAsMenuItem) - show(SaveAsMenuItem) - discard signal_connect(SaveAsMenuItem, "activate", - SIGNAL_FUNC(saveFileAs_Activate), nil) - - var FileMenuItem = menuItemNewWithMnemonic("_File") - - FileMenuItem.setSubMenu(FileMenu) - FileMenuItem.show() - TopMenu.append(FileMenuItem) - - # Edit menu - var EditMenu = menuNew() - - var UndoMenuItem = menu_item_new("Undo") # Undo - EditMenu.append(UndoMenuItem) - show(UndoMenuItem) - discard signal_connect(UndoMenuItem, "activate", - SIGNAL_FUNC(aporia.undo), nil) - - var RedoMenuItem = menu_item_new("Redo") # Undo - EditMenu.append(RedoMenuItem) - show(RedoMenuItem) - discard signal_connect(RedoMenuItem, "activate", - SIGNAL_FUNC(aporia.redo), nil) - - createSeparator(EditMenu) - - var FindMenuItem = menu_item_new("Find") # Find - FindMenuItem.add_accelerator("activate", accGroup, - KEY_f, CONTROL_MASK, ACCEL_VISIBLE) - EditMenu.append(FindMenuItem) - show(FindMenuItem) - discard signal_connect(FindMenuItem, "activate", - SIGNAL_FUNC(aporia.find_Activate), nil) - - var ReplaceMenuItem = menu_item_new("Replace") # Replace - ReplaceMenuItem.add_accelerator("activate", accGroup, - KEY_h, CONTROL_MASK, ACCEL_VISIBLE) - EditMenu.append(ReplaceMenuItem) - show(ReplaceMenuItem) - discard signal_connect(ReplaceMenuItem, "activate", - SIGNAL_FUNC(aporia.replace_Activate), nil) - - createSeparator(EditMenu) - - var SettingsMenuItem = menu_item_new("Settings...") # Settings - EditMenu.append(SettingsMenuItem) - show(SettingsMenuItem) - discard signal_connect(SettingsMenuItem, "activate", - SIGNAL_FUNC(aporia.Settings_Activate), nil) - - var EditMenuItem = menuItemNewWithMnemonic("_Edit") - - EditMenuItem.setSubMenu(EditMenu) - EditMenuItem.show() - TopMenu.append(EditMenuItem) - - # View menu - var ViewMenu = menuNew() - - win.viewBottomPanelMenuItem = check_menu_item_new("Bottom Panel") - PCheckMenuItem(win.viewBottomPanelMenuItem).itemSetActive( - win.settings.bottomPanelVisible) - win.viewBottomPanelMenuItem.add_accelerator("activate", accGroup, - KEY_f9, CONTROL_MASK, ACCEL_VISIBLE) - ViewMenu.append(win.viewBottomPanelMenuItem) - show(win.viewBottomPanelMenuItem) - discard signal_connect(win.viewBottomPanelMenuItem, "toggled", - SIGNAL_FUNC(aporia.viewBottomPanel_Toggled), nil) - - var ViewMenuItem = menuItemNewWithMnemonic("_View") - - ViewMenuItem.setSubMenu(ViewMenu) - ViewMenuItem.show() - TopMenu.append(ViewMenuItem) - - - # Tools menu - var ToolsMenu = menuNew() - - createAccelMenuItem(ToolsMenu, accGroup, "Compile current file", - KEY_F4, aporia.CompileCurrent_Activate) - createAccelMenuItem(ToolsMenu, accGroup, "Compile & run current file", - KEY_F5, aporia.CompileRunCurrent_Activate) - createSeparator(ToolsMenu) - createAccelMenuItem(ToolsMenu, accGroup, "Compile project", - KEY_F8, aporia.CompileProject_Activate) - createAccelMenuItem(ToolsMenu, accGroup, "Compile & run project", - KEY_F9, aporia.CompileRunProject_Activate) - createSeparator(ToolsMenu) - createAccelMenuItem(ToolsMenu, accGroup, "Run custom command 1", - KEY_F1, aporia.RunCustomCommand1) - createAccelMenuItem(ToolsMenu, accGroup, "Run custom command 2", - KEY_F2, aporia.RunCustomCommand2) - createAccelMenuItem(ToolsMenu, accGroup, "Run custom command 3", - KEY_F3, aporia.RunCustomCommand3) - - var ToolsMenuItem = menuItemNewWithMnemonic("_Tools") - - ToolsMenuItem.setSubMenu(ToolsMenu) - ToolsMenuItem.show() - TopMenu.append(ToolsMenuItem) - - # Help menu - MainBox.packStart(TopMenu, False, False, 0) - TopMenu.show() - -proc initToolBar(MainBox: PBox) = - # TopBar(ToolBar) - var TopBar = toolbarNew() - TopBar.setStyle(TOOLBAR_ICONS) - - var NewFileItem = TopBar.insertStock(STOCK_NEW, "New File", - "New File", SIGNAL_FUNC(aporia.newFile), nil, 0) - TopBar.appendSpace() - var OpenItem = TopBar.insertStock(STOCK_OPEN, "Open", - "Open", SIGNAL_FUNC(aporia.openFile), nil, -1) - var SaveItem = TopBar.insertStock(STOCK_SAVE, "Save", - "Save", SIGNAL_FUNC(saveFile_Activate), nil, -1) - TopBar.appendSpace() - var UndoItem = TopBar.insertStock(STOCK_UNDO, "Undo", - "Undo", SIGNAL_FUNC(aporia.undo), nil, -1) - var RedoItem = TopBar.insertStock(STOCK_REDO, "Redo", - "Redo", SIGNAL_FUNC(aporia.redo), nil, -1) - - MainBox.packStart(TopBar, False, False, 0) - TopBar.show() - -proc initSourceViewTabs() = - win.SourceViewTabs = notebookNew() - #win.sourceViewTabs.dragDestSet(DEST_DEFAULT_DROP, nil, 0, ACTION_MOVE) - discard win.SourceViewTabs.signalConnect( - "switch-page", SIGNAL_FUNC(onSwitchTab), nil) - #discard win.SourceViewTabs.signalConnect( - # "drag-drop", SIGNAL_FUNC(svTabs_DragDrop), nil) - #discard win.SourceViewTabs.signalConnect( - # "drag-data-received", SIGNAL_FUNC(svTabs_DragDataRecv), nil) - #discard win.SourceViewTabs.signalConnect( - # "drag-motion", SIGNAL_FUNC(svTabs_DragMotion), nil) - win.SourceViewTabs.set_scrollable(True) - - win.SourceViewTabs.show() - if lastSession.len != 0: - for i in 0 .. len(lastSession)-1: - var splitUp = lastSession[i].split('|') - var (filename, offset) = (splitUp[0], splitUp[1]) - addTab("", filename) - - var iter: TTextIter - win.Tabs[i].buffer.getIterAtOffset(addr(iter), offset.parseInt()) - win.Tabs[i].buffer.moveMarkByName("insert", addr(iter)) - win.Tabs[i].buffer.moveMarkByName("selection_bound", addr(iter)) - - # TODO: Fix this..... :( - discard PTextView(win.Tabs[i].sourceView). - scrollToIter(addr(iter), 0.25, true, 0.0, 0.0) - else: - addTab("", "") - - # This doesn't work :\ - win.Tabs[0].sourceView.grabFocus() - - -proc initBottomTabs() = - win.bottomPanelTabs = notebookNew() - if win.settings.bottomPanelVisible: - win.bottomPanelTabs.show() - - # output tab - var tabLabel = labelNew("Output") - var outputTab = vboxNew(False, 0) - discard win.bottomPanelTabs.appendPage(outputTab, tabLabel) - # Compiler tabs, gtktextview - var outputScrolledWindow = scrolledwindowNew(nil, nil) - outputScrolledWindow.setPolicy(POLICY_AUTOMATIC, POLICY_AUTOMATIC) - outputTab.packStart(outputScrolledWindow, true, true, 0) - outputScrolledWindow.show() - - win.outputTextView = textviewNew() - outputScrolledWindow.add(win.outputTextView) - win.outputTextView.show() - - outputTab.show() - -proc initTAndBP(MainBox: PBox) = - # This init's the HPaned, which splits the sourceViewTabs - # and the BottomPanelTabs - initSourceViewTabs() - initBottomTabs() - - var TAndBPVPaned = vpanedNew() - tandbpVPaned.pack1(win.sourceViewTabs, resize=True, shrink=False) - tandbpVPaned.pack2(win.bottomPanelTabs, resize=False, shrink=False) - MainBox.packStart(TAndBPVPaned, True, True, 0) - tandbpVPaned.setPosition(win.settings.VPanedPos) - TAndBPVPaned.show() - -proc initFindBar(MainBox: PBox) = - # Create a fixed container - win.findBar = HBoxNew(False, 0) - win.findBar.setSpacing(4) - - # Add a Label 'Find' - var findLabel = labelNew("Find:") - win.findBar.packStart(findLabel, False, False, 0) - findLabel.show() - - # Add a (find) text entry - win.findEntry = entryNew() - win.findBar.packStart(win.findEntry, False, False, 0) - discard win.findEntry.signalConnect("activate", SIGNAL_FUNC( - aporia.nextBtn_Clicked), nil) - win.findEntry.show() - var rq: TRequisition - win.findEntry.sizeRequest(addr(rq)) - - # Make the (find) text entry longer - win.findEntry.set_size_request(190, rq.height) - - # Add a Label 'Replace' - # - This Is only shown, when the 'Search & Replace'(CTRL + H) is shown - win.replaceLabel = labelNew("Replace:") - win.findBar.packStart(win.replaceLabel, False, False, 0) - #replaceLabel.show() - - # Add a (replace) text entry - # - This Is only shown, when the 'Search & Replace'(CTRL + H) is shown - win.replaceEntry = entryNew() - win.findBar.packStart(win.replaceEntry, False, False, 0) - #win.replaceEntry.show() - var rq1: TRequisition - win.replaceEntry.sizeRequest(addr(rq1)) - - # Make the (replace) text entry longer - win.replaceEntry.set_size_request(100, rq1.height) - - # Find next button - var nextBtn = buttonNew("Next") - win.findBar.packStart(nextBtn, false, false, 0) - discard nextBtn.signalConnect("clicked", - SIGNAL_FUNC(aporia.nextBtn_Clicked), nil) - nextBtn.show() - var nxtBtnRq: TRequisition - nextBtn.sizeRequest(addr(nxtBtnRq)) - - # Find previous button - var prevBtn = buttonNew("Previous") - win.findBar.packStart(prevBtn, false, false, 0) - discard prevBtn.signalConnect("clicked", - SIGNAL_FUNC(aporia.prevBtn_Clicked), nil) - prevBtn.show() - - # Replace button - # - This Is only shown, when the 'Search & Replace'(CTRL + H) is shown - win.replaceBtn = buttonNew("Replace") - win.findBar.packStart(win.replaceBtn, false, false, 0) - discard win.replaceBtn.signalConnect("clicked", - SIGNAL_FUNC(aporia.replaceBtn_Clicked), nil) - #replaceBtn.show() - - # Replace all button - # - this Is only shown, when the 'Search & Replace'(CTRL + H) is shown - win.replaceAllBtn = buttonNew("Replace All") - win.findBar.packStart(win.replaceAllBtn, false, false, 0) - discard win.replaceAllBtn.signalConnect("clicked", - SIGNAL_FUNC(aporia.replaceAllBtn_Clicked), nil) - #replaceAllBtn.show() - - # Right side ... - - # Close button - With a close stock image - var closeBtn = buttonNew() - var closeImage = imageNewFromStock(STOCK_CLOSE, ICON_SIZE_SMALL_TOOLBAR) - var closeBox = hboxNew(False, 0) - closeBtn.add(closeBox) - closeBox.show() - closeBox.add(closeImage) - closeImage.show() - discard closeBtn.signalConnect("clicked", - SIGNAL_FUNC(aporia.closeBtn_Clicked), nil) - win.findBar.packEnd(closeBtn, False, False, 2) - closeBtn.show() - - # Extra button - When clicked shows a menu with options like 'Use regex' - var extraBtn = buttonNew() - var extraImage = imageNewFromStock(STOCK_PROPERTIES, ICON_SIZE_SMALL_TOOLBAR) - - var extraBox = hboxNew(False, 0) - extraBtn.add(extraBox) - extraBox.show() - extraBox.add(extraImage) - extraImage.show() - discard extraBtn.signalConnect("clicked", - SIGNAL_FUNC(aporia.extraBtn_Clicked), nil) - win.findBar.packEnd(extraBtn, False, False, 0) - extraBtn.show() - - MainBox.packStart(win.findBar, False, False, 0) - win.findBar.show() - -proc initStatusBar(MainBox: PBox) = - win.bottomBar = statusbarNew() - MainBox.packStart(win.bottomBar, False, False, 0) - win.bottomBar.show() - - discard win.bottomBar.push(0, "Line: 0 Column: 0") - -proc initControls() = - # Load up the language style - win.langMan = languageManagerGetDefault() - var langpaths: array[0..1, cstring] = - [cstring(os.getApplicationDir() / langSpecs), nil] - win.langMan.setSearchPath(addr(langpaths)) - var nimLang = win.langMan.getLanguage("nimrod") - win.nimLang = nimLang - - # Load the scheme - var schemeMan = schemeManagerGetDefault() - var schemepaths: array[0..1, cstring] = - [cstring(os.getApplicationDir() / styles), nil] - schemeMan.setSearchPath(addr(schemepaths)) - win.scheme = schemeMan.getScheme(win.settings.colorSchemeID) - - # Window - win.w = windowNew(gtk2.WINDOW_TOPLEVEL) - win.w.setDefaultSize(win.settings.winWidth, win.settings.winHeight) - win.w.setTitle("Aporia IDE") - if win.settings.winMaximized: win.w.maximize() - - win.w.show() # The window has to be shown before - # setting the position of the VPaned so that - # it gets set correctly, when the window is maximized. - - discard win.w.signalConnect("destroy", SIGNAL_FUNC(aporia.destroy), nil) - discard win.w.signalConnect("delete_event", - SIGNAL_FUNC(aporia.delete_event), nil) - discard win.w.signalConnect("window-state-event", - SIGNAL_FUNC(aporia.windowState_Changed), nil) - - # MainBox (vbox) - var MainBox = vboxNew(False, 0) - win.w.add(MainBox) - - initTopMenu(MainBox) - initToolBar(MainBox) - initTAndBP(MainBox) - initFindBar(MainBox) - initStatusBar(MainBox) - - MainBox.show() - if confParseFail: - dialogs.warning(win.w, "Error parsing config file, using default settings.") - -nimrod_init() -initControls() -main() - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.nix b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.nix deleted file mode 100644 index 515b686..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.nix +++ /dev/null @@ -1,80 +0,0 @@ -{ stdenv, fetchurl, fetchgit, openssl, zlib, pcre, libxml2, libxslt, expat -, rtmp ? false -, fullWebDAV ? false -, syslog ? false -, moreheaders ? false, ...}: - -let - version = "1.4.4"; - mainSrc = fetchurl { - url = "http://nginx.org/download/nginx-${version}.tar.gz"; - sha256 = "1f82845mpgmhvm151fhn2cnqjggw9w7cvsqbva9rb320wmc9m63w"; - }; - - rtmp-ext = fetchgit { - url = git://github.com/arut/nginx-rtmp-module.git; - rev = "1cfb7aeb582789f3b15a03da5b662d1811e2a3f1"; - sha256 = "03ikfd2l8mzsjwx896l07rdrw5jn7jjfdiyl572yb9jfrnk48fwi"; - }; - - dav-ext = fetchgit { - url = git://github.com/arut/nginx-dav-ext-module.git; - rev = "54cebc1f21fc13391aae692c6cce672fa7986f9d"; - sha256 = "1dvpq1fg5rslnl05z8jc39sgnvh3akam9qxfl033akpczq1bh8nq"; - }; - - syslog-ext = fetchgit { - url = https://github.com/yaoweibin/nginx_syslog_patch.git; - rev = "165affd9741f0e30c4c8225da5e487d33832aca3"; - sha256 = "14dkkafjnbapp6jnvrjg9ip46j00cr8pqc2g7374z9aj7hrvdvhs"; - }; - - moreheaders-ext = fetchgit { - url = https://github.com/agentzh/headers-more-nginx-module.git; - rev = "refs/tags/v0.23"; - sha256 = "12pbjgsxnvcf2ff2i2qdn39q4cm5czlgrng96j8ml4cgxvnbdh39"; - }; -in - -stdenv.mkDerivation rec { - name = "nginx-${version}"; - src = mainSrc; - - buildInputs = [ openssl zlib pcre libxml2 libxslt - ] ++ stdenv.lib.optional fullWebDAV expat; - - patches = if syslog then [ "${syslog-ext}/syslog_1.4.0.patch" ] else []; - - configureFlags = [ - "--with-http_ssl_module" - "--with-http_spdy_module" - "--with-http_xslt_module" - "--with-http_sub_module" - "--with-http_dav_module" - "--with-http_gzip_static_module" - "--with-http_secure_link_module" - "--with-ipv6" - # Install destination problems - # "--with-http_perl_module" - ] ++ stdenv.lib.optional rtmp "--add-module=${rtmp-ext}" - ++ stdenv.lib.optional fullWebDAV "--add-module=${dav-ext}" - ++ stdenv.lib.optional syslog "--add-module=${syslog-ext}" - ++ stdenv.lib.optional moreheaders "--add-module=${moreheaders-ext}"; - - preConfigure = '' - export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I${libxml2 }/include/libxml2" - ''; - - # escape example - postInstall = '' - mv $out/sbin $out/bin ''' ''${ - ${ if true then ${ "" } else false } - ''; - - meta = { - description = "A reverse proxy and lightweight webserver"; - maintainers = [ stdenv.lib.maintainers.raskin]; - platforms = stdenv.lib.platforms.all; - inherit version; - }; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.ns2 b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.ns2 deleted file mode 100644 index b1c6b92..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.ns2 +++ /dev/null @@ -1,69 +0,0 @@ -Newsqueak2 -'Langexplr -' - -class ShapesExperiment usingLib: platform = ( -"A small experiment for using Hopscotch shape classes ." -| - CanvasDependent = platform CanvasDependent. - Presenter = platform HPresenter. - Subject = platform Subject. - EllipseShape = platform EllipseShape. - Color = platform Color. -| -) -( - -class ShapesExperimentSubject = Subject( -"Subject for shapes experiment" -| - -| -) -('as yet unclassified' -createPresenter = ( - ^ShapesExperimentPresenter new subject: self. -) - -) - -class ShapesExperimentPresenter = Presenter ( -"A presenter for a small experiment of using shape classes" -| -| -) -('as yet unclassified' -controlPoint = ( - ^ControlPoint new. -) - -definition = ( - ^ column: { - canvas: { - at: 10 @ 10 display: controlPoint. - at: 15 @ 10 display: controlPoint. - } - } -) - -) - -class ControlPoint = CanvasDependent( -"A class that represents a small point in the screen" -| -| -) -('as yet unclassified' -addVisualsTo: container = ( - container add: visual. - updateLayout. -) - -createVisual = ( - | s | - s:: EllipseShape new size: 5@5 . - s color: Color red. - ^ s -) - -)) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.pas b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.pas deleted file mode 100644 index ab11ee6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.pas +++ /dev/null @@ -1,2708 +0,0 @@ -// vim:ft=pascal - -unit YTools; - -{=============================================================================== - - cYcnus.YTools 1.0.3 Beta for Delphi 4+ - by licenser and Murphy - - ©2000-2003 by cYcnus - visit www.cYcnus.de - - licenser@cYcnus.de (Heinz N. Gies) - murphy@cYcnus.de (Kornelius Kalnbach) - - this unit is published under the terms of the GPL - -===============================================================================} - -interface - -uses - Windows, SysUtils, Classes, YTypes; - -const - BackSpace = #8; - Tab = #9; - LF = #10; //Line Feed - CR = #13; //Carriage Return - Space = #32; - EOLChars = [CR, LF]; -{$IFNDEF VER140} - sLineBreak = #13#10; - SwitchChars = ['/', '-']; -{$ENDIF} - EOL = sLineBreak; - MaxCard = High(Cardinal); - AllChars = [#0..#255]; - Alphabetical = ['A'..'Z', 'a'..'z']; - DecimalChars = ['0'..'9']; - AlphaNumerical = Alphabetical + DecimalChars; - StrangeChars = [#0..#31, #127, #129, #141..#144, #157, #158]; - - HexadecimalChars = DecimalChars + ['A'..'F', 'a'..'f']; - OctalChars = ['0'..'7']; - BinaryChars = ['0', '1']; - - QuoteChars = ['''', '"']; - WildCards = ['*', '?']; - FileNameEnemies = WildCards + ['\', '/', ':', '<', '>', '|']; - - HexChar: array[THex] of Char = ( - '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'); - LowerHexChar: array[THex] of Char = ( - '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'); - BaseNChar: array[TBaseN] of Char = ( - '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H', - 'I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'); - - cYcnusOverlayColor = $050001; - - faFindEveryFile = faReadOnly + faHidden + faSysFile + faArchive; - - platWin9x = [VER_PLATFORM_WIN32s, VER_PLATFORM_WIN32_WINDOWS]; - - -{ Debugging } -procedure ClearReport(const ReportName: string); -procedure Report(const ReportName, Text: string); -procedure ReportFmt(const ReportName, Fmt: string; const Args: array of const); - -{ Params } -procedure GetParams(Strings: TStrings); overload; -function GetParams(const Separator: string = ' '): string; overload; - -function ParamNum(const S: string): Integer; -function ParamPrefixNum(const Prefix: string): Integer; -function Param(const S: string): Boolean; -function ParamPrefix(const Prefix: string): Boolean; - -function Switch(const Switch: string; const PrefixChars: TCharSet = SwitchChars; - IgnoreCase: Boolean = True): Boolean; -function GetParam(const Prefix: string = ''; const Default: string = ''): string; - -{ Dirs & UserName} -function GetMyDir(FullPath: Boolean = False): string; -function WinDir: string; -function SysDir: string; -function UserName: string; - -{ Strings & Chars} -function FirstChar(const S: string): Char; -function LastChar(const S: string): Char; - -function CharPos(C: Char; const S: string; Offset: Integer = 1): Integer; overload; -function CharPos(C: TCharSet; const S: string; Offset: Integer = 1): Integer; overload; -function CharPosR(C: Char; const S: string; Offset: Integer = -1): Integer; -function PosEx(const SubStr, S: string; Offset: Integer = 1): Integer; -function PosExText(const SubStr, S: string; Offset: Integer = 1): Integer; -function PosExAnsiText(const SubStr, S: string; Offset: Integer = 1): Integer; - -function UntilChar(const S: string; Brake: Char): string; overload; -function UntilChar(const S: string; Brake: TCharSet): string; overload; -function UntilLastChar(const S: string; Brake: Char; - IgnoreNoBrake: Boolean = True): string; - -function FromChar(const S: string; Brake: Char): string; overload; -function FromChar(const S: string; Brake: TCharSet): string; overload; -function FromLastChar(const S: string; Brake: Char; - IgnoreNoBrake: Boolean = False): string; - -function BetweenChars(const S: string; Start, Finish: Char; - Inclusive: Boolean = False): string; - -function UntilStr(const S: string; Brake: string): string; -function FromStr(const S: string; Brake: string): string; - -function StringWrap(const S: string; Width: Integer; const LineEnd: string = EOL): string; - -{ Splitting & Combining } -function Split(const S, Separator: string; IgnoreMultiSep: Boolean = True; - MinCount: Integer = 0): TStrA; overload; -procedure Split(const S, Separator: string; Strings: TStrings; - IgnoreMultiSep: Boolean = True); overload; -function Split(const S: string; Separators: TCharSet; - IgnoreMultiSep: Boolean = True; MinCount: Integer = 0): TStrA; overload; - -procedure TileStr(const S: string; BrakeStart: Integer; BrakeEnd: Integer; - out Left, Right: string); - -function Join(Strings: TStrings; Separator: string = ' '): string; overload; -function Join(StrA: TStrA; Separator: string = ' '): string; overload; - -function MulStr(const S: string; Count: Integer): string; - -{ Strings ausrichten } -function AlignR(const S: string; Width: Integer; Filler: Char = ' '): string; -function MaxStr(const S: string; MaxLen: Integer): string; - -{ Stringing } -function TrimAll(const S: string): string; - -function ControlChar(C: Char): Boolean; -function FriendlyChar(C: Char): Char; - -function FriendlyStr(const S: string): string; overload; -function FriendlyStr(a: TByteA): string; overload; - -function Quote(const S: string; Quoter: Char = '"'): string; -function UnQuote(const S: string): string; -function DeQuote(const S: string): string; - -function StrNumerus(const Value: Integer; const Singular, Plural: string; - const Zero: string = '0'): string; - -function MakeStr(const Items: array of const; Separator: string = ''): string; -procedure ShowText(const Items: array of const; Separator: string = ''); - -{ Delete } -function DeleteChars(const S: string; C: Char): string; overload; -function DeleteChars(const S: string; C: TCharSet): string; overload; -function ExtractChars(const S: string; C: TCharSet): string; - -{ Find } -function CharCount(const S: string; C: Char): Integer; - -function CharIn(const S: string; C: Char): Boolean; overload; -function CharIn(const S: string; C: TCharSet): Boolean; overload; - -function StrAtPos(const S: string; Pos: Integer; const Str: string): Boolean; -function StrAtBegin(const S, Str: string): Boolean; -function StrIn(const S, SubStr: string): Boolean; overload; -function StrIn(A: TStrA; const S: string): Boolean; overload; -function StrIn(SL: TStrings; const S: string): Boolean; overload; -function StrIndex(A: TStrA; const S: string): Integer; overload; -function StrIndex(SL: TStrings; const S: string): Integer; overload; - -function TextAtPos(const S: string; Pos: Integer; const Text: string): Boolean; -function TextAtBegin(const S, Text: string): Boolean; -function TextIn(const S, Text: string): Boolean; overload; -function TextIn(A: TStrA; const Text: string): Boolean; overload; -function TextIn(SL: TStrings; const Text: string): Boolean; overload; -function TextIndex(A: TStrA; const Text: string): Integer; overload; -function TextIndex(SL: TStrings; const Text: string): Integer; overload; - -{ Replace } -function ReplaceChars(const S: string; Old, New: Char): string; overload; -function ReplaceChars(const S: string; Old: TCharSet; New: Char): string; overload; - -function Replace(const S, Old, New: string): string; - -{ TStrings } -function SLOfFile(const FileName: string): TStringList; -function ContainsEmptyLines(SL: TStrings): Boolean; -procedure DeleteEmptyLines(SL: TStrings); -procedure DeleteCommentLines(SL: TStrings; const CommentSign: string = '//'); -procedure WriteSL(Strings: TStrings; const Prefix: string = ''; - const Suffix: string = ''); - -function FindLine(SL: TStrings; const S: string): Integer; - -procedure QuickSortSL(SL: TStringList); - -{ TStrA } -function IncStrA(StrA: TStrA): Integer; - -{ TByteA } -function StrOfByteA(a: TByteA): string; -function ByteAOfStr(const S: string): TByteA; -function ByteAOfInt(i: Integer): TByteA; -function IntOfByteA(A: TByteA): Integer; -function ByteAOfHex(const Hex: string): TByteA; - -function SameByteA(const A, B: TByteA): Boolean; -function Reverse(a: TByteA): TByteA; -function SaveByteA(Data: TByteA; const FileName: string; Overwrite: Boolean = True): Boolean; -function LoadByteA(const FileName: string): TByteA; - -function Endian(i: Integer): Integer; - -{ Files } -function SizeOfFile(const FileName: string): Integer; -function FileEx(const FileName: string; AllowFolders: Boolean = False): Boolean; -function LWPSolve(const Dir: string): string; -function LWPSlash(const Dir: string): string; - -function ExtractDrive(const FileName: string): string; -function ExtractPath(const FileName: string): string; -function ExtractPrefix(const FileName: string): string; -function ExtractSuffix(const FileName: string): string; - -function IsValidFileName(const FileName: string): Boolean; -function MakeValidFileName(FileName: string; const Default: string = 'File'): string; - -{ Converting } -function IsValidInteger(const S: string): Boolean; -function IsValidCardinal(const S: string): Boolean; - -function StrOfBool(flag: Boolean; const TrueStr: string = 'True'; - const FalseStr: string = 'False'): string; -function StrOfInt(i: Integer): string; -function CardOfStr(const S: string): Cardinal; - -function HexOrd(Hex: Char): THex; -function ByteOfHex(Hex: THexByteStr): Byte; - -function DecOfHex(const Hex: string): string; -function HexOfByte(b: Byte): THexByteStr; -function HexOfCard(i: Cardinal): string; overload; -function HexOfCard(i: Cardinal; Digits: Integer): string; overload; - -function PascalHexArray(a: TByteA; Name: string): string; - -function HexOfByteA(a: TByteA; Blocks: Integer = 1; - const Splitter: string = ' '): string; -function BinOfByteA(a: TByteA; Blocks: Integer = 4; - const Splitter: string = ' '): string; - -function CardOfHex(Hex: string): Cardinal; -function IntOfBin(Bin: string): Cardinal; - -function BinOfIntFill(n: cardinal; MinCount: Integer = 8): string; -function BinOfInt(n: cardinal): string; - -function BaseNOfInt(I: Cardinal; B: TBaseN): string; -function IntOfBaseN(V: string; B: TBaseN): Cardinal; - -{ Ranges } -function KeepIn(i, Bottom, Top: Variant): Variant; -function InRange(Value, Bottom, Top: Variant): Boolean; -function InStrictRange(Value, Bottom, Top: Variant): Boolean; -function Min(const A, B: Integer): Integer; overload; -function Min(const A: TIntA): Integer; overload; -function Max(const A, B: Integer): Integer; overload; -function Max(const A: TIntA): Integer; overload; - -const - RangesSeparator = ','; - RangeInnerSeparator = '-'; - RangeInfinite = '*'; - RangeSpecialChars = [RangesSeparator, RangeInnerSeparator, RangeInfinite]; - -function RangesOfStr(const S: string): TRanges; -function InRanges(Ranges: TRanges; TestValue: Cardinal): Boolean; - -function Success(Res: Integer; ResultOnSuccess: Integer = ERROR_SUCCESS): Boolean; -function Failure(Res: Integer; ResultOnSuccess: Integer = ERROR_SUCCESS): Boolean; - -function ExpandString(const S: string): string; - -{ Files } -procedure DeleteFiles(const Mask: string; ScanSubDirs: Boolean = True; - Attributes: Integer = faFindEveryFile); -procedure FileNew(const FileName: string); -function DateTimeOfFileTime(const FileTime: TFileTime): TDateTime; - -{ FileNames } -function GetFileNew(FileName: string; NoFloppyDrives: Boolean = True): string; - -{ Finding Files } -function FindAll(Strings: TStrings; const Mask: string; - ScanSubDirs: Boolean = True; Attributes: Integer = faFindEveryFile; - FileReturn: TFileNameFunc = nil): Boolean; -function FindAllFirst(const Mask: string; ScanSubDirs: Boolean = True; - Attributes: Integer = faFindEveryFile): string; - -function FullOSInfo: string; -function Win32PlatformStr: string; -function Win9x: Boolean; -function WinNT: Boolean; -function Win2000: Boolean; -function WinXP: Boolean; - -var - MyDir: string = ''; - LastSuccessRes: Integer = 0; - -{ Backward compatibility } -{$IFNDEF VER130} -function SameText(const S1, S2: string): Boolean; -{$ENDIF} - -implementation -{$IFNDEF VER140} -uses FileCtrl; -{$ENDIF} - -{$IFNDEF VER130} -function SameText(const S1, S2: string): Boolean; -begin - Result := CompareText(S1, S2) = 0; -end; -{$ENDIF} - -procedure Report(const ReportName, Text: string); -var - F: TextFile; - FileName: string; -begin - FileName := MyDir + ReportName + '.rep'; - Assign(F, FileName); - try - if not FileExists(FileName) then - Rewrite(F) - else - Append(F); - WriteLn(F, Text); - finally - Close(F); - end; -end; - -procedure ClearReport(const ReportName: string); -var - FileName: string; -begin - FileName := MyDir + ReportName + '.rep'; - DeleteFile(FileName); -end; - -procedure ReportFmt(const ReportName, Fmt: string; const Args: array of const); -begin - Report(ReportName, Format(Fmt, Args)); -end; - -procedure GetParams(Strings: TStrings); -var - P: PChar; - Param: string; - - function GetParamStr(var P: PChar; var Param: string): Boolean; - var - Quoted: Boolean; - begin - Param := ''; - - repeat - while (P[0] <> #0) and (P[0] <= ' ') do - Inc(P); - - Quoted := False; - while P[0] <> #0 do begin - if P[0] = '"' then begin - Quoted := not Quoted; - Inc(P); - Continue; end; - if (P[0] <= ' ') and not Quoted then - Break; - Param := Param + P[0]; - Inc(P); - end; - until (Param <> '') or (P[0] = #0); - - Result := Param <> ''; - end; - -begin - Strings.Clear; - P := GetCommandLine; - GetParamStr(P, Param); - while GetParamStr(P, Param) do - Strings.Add(Param); -end; - -function GetParams(const Separator: string = ' '): string; -var - SL: TStringList; -begin - SL := TStringList.Create; - GetParams(SL); - Result := Join(SL, Separator); - SL.Free; -end; - -function Switch(const Switch: string; const PrefixChars: TCharSet = SwitchChars; - IgnoreCase: Boolean = True): Boolean; -//= SysUtils.FindCmdLineSwitch -var - i: Integer; - s: string; -begin - Result := True; - - for i := 1 to ParamCount do begin - s := ParamStr(i); - - if (s <> '') and (s[1] in PrefixChars) then begin - //i know that always s <> '', but this is saver - s := Copy(s, 2, MaxInt); - if (s = Switch) or (IgnoreCase and (0=AnsiCompareText(s, Switch))) then - Exit; - end; - end; - - Result := False; -end; - -function ParamNum(const S: string): Integer; -begin - for Result := 1 to ParamCount do - if 0=AnsiCompareText(ParamStr(Result), S) then - Exit; - - Result := 0; -end; - -function ParamPrefixNum(const Prefix: string): Integer; -var - Len: Integer; -begin - Len := Length(Prefix); - for Result := 1 to ParamCount do - if 0=AnsiCompareText(Copy(ParamStr(Result), 1, Len), Prefix) then - Exit; - - Result := 0; -end; - -function Param(const S: string): Boolean; -begin - Result := ParamNum(S) > 0; -end; - -function ParamPrefix(const Prefix: string): Boolean; -begin - Result := ParamPrefixNum(Prefix) > 0; -end; - -function GetParam(const Prefix: string = ''; const Default: string = ''): string; -var - i: Integer; -begin - Result := Default; - - if Prefix = '' then begin - Result := ParamStr(1); - Exit; end; - - i := ParamPrefixNum(Prefix); - if i > 0 then - Result := Copy(ParamStr(i), Length(Prefix) + 1, MaxInt); -end; - -function GetMyDir(FullPath: Boolean = False): string; -var - Buffer: array[0..260] of Char; -begin - Result := ''; - SetString(Result, Buffer, GetModuleFileName(0, Buffer, SizeOf(Buffer))); - if FullPath then - Result := GetFileNew(Result); - Result := ExtractPath(Result); -end; - -function WinDir: string; -var - Res: PChar; -begin - Result := '\'; - GetMem(Res, MAX_PATH); - GetWindowsDirectory(Res, MAX_PATH); - Result := Res + '\'; - FreeMem(Res, MAX_PATH); -end; - -function SysDir: string; -var - Res: PChar; -begin - Result := '\'; - GetMem(Res, MAX_PATH); - GetSystemDirectory(Res, MAX_PATH); - Result := Res + '\'; - FreeMem(Res, MAX_PATH); -end; - -function UserName: string; -var - Len: Cardinal; - Res: PChar; -begin - Result := ''; - GetMem(Res, MAX_PATH); - Len := MAX_PATH; - GetUserName(Res, Len); - Result := Res; - FreeMem(Res, MAX_PATH); -end; - -function FirstChar(const S: string): Char; -begin - if s = '' then - Result := #0 - else - Result := s[1]; -end; - -function LastChar(const S: string): Char; -begin - if s = '' then - Result := #0 - else - Result := s[Length(s)]; -end; - -function CharPos(C: Char; const S: string; Offset: Integer = 1): Integer; -var - MaxPosToSearch: Integer; -begin - Result := Offset; - MaxPosToSearch := Length(S); - - while Result <= MaxPosToSearch do begin - if S[Result] = C then - Exit; - Inc(Result); - end; - - Result := 0; -end; - -function CharPos(C: TCharSet; const S: string; Offset: Integer = 1): Integer; -var - MaxPosToSearch: Integer; -begin - Result := Offset; - MaxPosToSearch := Length(S); - - while Result <= MaxPosToSearch do begin - if S[Result] in C then - Exit; - Inc(Result); - end; - - Result := 0; -end; - -function CharPosR(C: Char; const S: string; Offset: Integer = -1): Integer; -begin - if Offset < 0 then - Result := Length(S) + 1 - Offset - else - Result := Offset; - if Result > Length(S) then - Result := Length(S); - - while Result > 0 do begin - if S[Result] = C then - Exit; - Dec(Result); - end; -end; - -function PosEx(const SubStr, S: string; Offset: Integer = 1): Integer; -var - MaxPosToSearch, LenSubStr, i: Integer; -begin - if SubStr = '' then begin - Result := 0; - Exit; end; - - if Offset < 1 then - Result := 1 - else - Result := Offset; - - LenSubStr := Length(SubStr); - MaxPosToSearch := Length(S) - LenSubStr + 1; - - while Result <= MaxPosToSearch do begin - if S[Result] = SubStr[1] then begin - i := 1; - - while (i < LenSubStr) - and (S[Result + i] = SubStr[i + 1]) do - Inc(i); - - if i = LenSubStr then - Exit; - end; - Inc(Result); - end; - - Result := 0; -end; - -function PosExText(const SubStr, S: string; Offset: Integer = 1): Integer; -var - MaxPosToSearch, LenSubStr, i: Integer; - - function SameChar(a, b: Char): Boolean; - begin - Result := UpCase(a) = UpCase(b) - end; - -begin - if SubStr = '' then begin - Result := 0; - Exit; end; - - if Offset < 1 then - Result := 1 - else - Result := Offset; - - LenSubStr := Length(SubStr); - MaxPosToSearch := Length(S) - LenSubStr + 1; - - while Result <= MaxPosToSearch do begin - if SameChar(S[Result], SubStr[1]) then begin - i := 1; - - while (i < LenSubStr) - and (SameChar(S[Result + i], SubStr[i + 1])) do - Inc(i); - - if i = LenSubStr then - Exit; - end; - Inc(Result); - end; - - Result := 0; -end; - -function PosExAnsiText(const SubStr, S: string; Offset: Integer = 1): Integer; -var - MaxPosToSearch, LenSubStr, i: Integer; - - function SameChar(a, b: Char): Boolean; - begin - Result := CharLower(PChar(a)) = CharLower(PChar(b)); - end; - -begin - if SubStr = '' then begin - Result := 0; - Exit; end; - - if Offset < 1 then - Result := 1 - else - Result := Offset; - - LenSubStr := Length(SubStr); - MaxPosToSearch := Length(S) - LenSubStr + 1; - - while Result <= MaxPosToSearch do begin - if SameChar(S[Result], SubStr[1]) then begin - i := 1; - - while (i < LenSubStr) - and (SameChar(S[Result + i], SubStr[i + 1])) do - Inc(i); - - if i = LenSubStr then - Exit; - end; - Inc(Result); - end; - - Result := 0; -end; - -function UntilChar(const S: string; Brake: Char): string; -var - p: Integer; -begin - p := CharPos(Brake, S); - - if p > 0 then - Result := Copy(S, 1, p - 1) - else - Result := S; -end; - -function UntilChar(const S: string; Brake: TCharSet): string; -var - p: Integer; -begin - Result := ''; - p := CharPos(Brake, S); - - if p > 0 then - Result := Copy(S, 1, p - 1) - else - Result := S; -end; - -function UntilLastChar(const S: string; Brake: Char; - IgnoreNoBrake: Boolean = True): string; -var - p: Integer; -begin - Result := ''; - p := CharPosR(Brake, S); - - if p > 0 then - Result := Copy(S, 1, p - 1) - else if IgnoreNoBrake then - Result := S; -end; - -function FromChar(const S: string; Brake: Char): string; -var - p: Integer; -begin - Result := ''; - p := CharPos(Brake, S); - - if p > 0 then - Result := Copy(S, p + 1, Length(S) - p); -end; - -function FromChar(const S: string; Brake: TCharSet): string; -var - p: Integer; -begin - Result := ''; - p := CharPos(Brake, S); - - if p > 0 then - Result := Copy(S, p + 1, Length(S) - p); -end; - -function FromLastChar(const S: string; Brake: Char; - IgnoreNoBrake: Boolean = False): string; -var - p: Integer; -begin - Result := ''; - p := CharPosR(Brake, S); - - if p > 0 then - Result := Copy(S, p + 1, Length(S) - p) - else if IgnoreNoBrake then - Result := S; -end; - -function BetweenChars(const S: string; Start, Finish: Char; - Inclusive: Boolean = False): string; -var - p, fin: Integer; -begin - Result := ''; - - p := CharPos(Start, S); - if p = 0 then - Exit; - - fin := CharPos(Finish, S, p + 1); - if fin = 0 then - Exit; - - if not Inclusive then begin - Inc(p); - Dec(fin); - end; - - Result := Copy(S, p, fin - p + 1); -end; - -function UntilStr(const S: string; Brake: string): string; -var - p: Integer; -begin - if Length(Brake) = 1 then begin - Result := UntilChar(S, Brake[1]); - Exit; end; - - p := PosEx(Brake, S); - - if p > 0 then - Result := Copy(S, 1, p - 1) - else - Result := S; -end; - -function FromStr(const S: string; Brake: string): string; -var - p: Integer; -begin - if Length(Brake) = 1 then begin - Result := FromChar(S, Brake[1]); - Exit; end; - - Result := ''; - p := PosEx(Brake, s); - - if p > 0 then begin - Inc(p, Length(Brake)); - Result := Copy(S, p, Length(S) - p + 1); - end; -end; - -function StringWrap(const S: string; Width: Integer; const LineEnd: string = EOL): string; -var - i: Integer; -begin - Result := ''; - if (S = '') or (Width < 1) then - Exit; - - i := 1; - while True do begin - Result := Result + Copy(S, i, Width); - Inc(i, Width); - if i <= Length(S) then - Result := Result + LineEnd - else - Exit; - end; -end; - -function Split(const S, Separator: string; IgnoreMultiSep: Boolean = True; - MinCount: Integer = 0): TStrA; -var - p, fin, SepLen: Integer; - - procedure Add(const S: string); - begin - if IgnoreMultiSep and (S = '') then - Exit; - SetLength(Result, Length(Result) + 1); - Result[High(Result)] := S; - end; - -begin - if S = '' then begin - if Length(Result) < MinCount then - SetLength(Result, MinCount); - Exit; end; - - Result := nil; - SepLen := Length(Separator); - - p := 1; - fin := PosEx(Separator, S); - while fin > 0 do begin - Add(Copy(S, p, fin - p)); - p := fin + SepLen; - fin := PosEx(Separator, S, p); - end; - Add(Copy(S, p, Length(S) - p + 1)); - - if Length(Result) < MinCount then - SetLength(Result, MinCount); -end; - -procedure Split(const S, Separator: string; Strings: TStrings; - IgnoreMultiSep: Boolean = True); -var - p, fin, SepLen: Integer; - - procedure Add(const S: string); - begin - if IgnoreMultiSep and (S = '') then - Exit; - Strings.Add(S); - end; - -begin - if S = '' then - Exit; - - Strings.BeginUpdate; - SepLen := Length(Separator); - p := 1; - fin := PosEx(Separator, S); - while fin > 0 do begin - Add(Copy(S, p, fin - p)); - p := fin + SepLen; - fin := PosEx(Separator, S, p); - end; - Add(Copy(S, p, Length(S) - p + 1)); - Strings.EndUpdate; -end; - -function Split(const S: string; Separators: TCharSet; - IgnoreMultiSep: Boolean = True; MinCount: Integer = 0): TStrA; -var - p, fin: Integer; - - procedure Add(const S: string); - begin - if IgnoreMultiSep and (S = '') then - Exit; - SetLength(Result, Length(Result) + 1); - Result[High(Result)] := S; - end; - -begin - if S = '' then begin - if Length(Result) < MinCount then - SetLength(Result, MinCount); - Exit; end; - - Result := nil; - - p := 1; - fin := CharPos(Separators, S); - while fin > 0 do begin - Add(Copy(S, p, fin - p)); - p := fin + 1; - fin := CharPos(Separators, S, p); - end; - Add(Copy(S, p, Length(S) - p + 1)); - - if Length(Result) < MinCount then - SetLength(Result, MinCount); -end; - -procedure TileStr(const S: string; BrakeStart: Integer; BrakeEnd: Integer; - out Left, Right: string); -begin - Left := Copy(S, 1, BrakeStart-1); - Right := Copy(S, BrakeEnd + 1, MaxInt); -end; - -function Join(Strings: TStrings; Separator: string = ' '): string; -var - i, imax: Integer; -begin - Result := ''; - imax := Strings.Count-1; - for i := 0 to imax do begin - Result := Result + Strings[i]; - if i < imax then - Result := Result + Separator; - end; -end; - -function Join(StrA: TStrA; Separator: string = ' '): string; overload; -var - i: Integer; -begin - Result := ''; - for i := 0 to High(StrA) do begin - Result := Result + StrA[i]; - if i < High(StrA) then - Result := Result + Separator; - end; -end; - -function MulStr(const S: string; Count: Integer): string; -var - P: PChar; - Len, i: Integer; -begin - Result := ''; - if Count = 0 then - Exit; - - Len := Length(S); - SetLength(Result, Len * Count); - - P := Pointer(Result); - for i := 1 to Count do begin - Move(Pointer(S)^, P^, Len); - Inc(P, Len); - end; -end; - -function AlignR(const S: string; Width: Integer; Filler: Char = ' '): string; -begin - Result := MulStr(Filler, Width - Length(S)) + S; -end; - -function MaxStr(const S: string; MaxLen: Integer): string; -var - Len: Integer; -begin - Len := Length(S); - if Len <= MaxLen then begin - Result := S; - Exit end; - - Result := Copy(S, 1, MaxLen - 3) + '...'; -end; - -function TrimAll(const S: string): string; -var - i: Integer; -begin - for i := 1 to Length(S) do - if S[i] > #32 then - Result := Result + S[i]; -end; - -function ControlChar(C: Char): Boolean; -begin - Result := C in StrangeChars; -end; - -function FriendlyChar(C: Char): Char; -begin - case C of - #0: Result := '.'; - #1..#31: Result := '?'; - #255: Result := '#'; - else - Result := C; - end; -end; - -function FriendlyStr(const S: string): string; -var - i: Integer; -begin - SetLength(Result, Length(S)); - for i := 1 to Length(S) do - Result[i] := FriendlyChar(S[i]); -end; - -function FriendlyStr(a: TByteA): string; -var - i: Integer; -begin - SetLength(Result, Length(a)); - for i := 0 to High(a) do - Result[i + 1] := FriendlyChar(Char(a[i])); -end; - -function Quote(const S: string; Quoter: Char = '"'): string; -begin - Result := S; - - if FirstChar(S) <> Quoter then - Result := Quoter + Result; - - if LastChar(S) <> Quoter then - Result := Result + Quoter; -end; - -function DeQuote(const S: string): string; -begin - Result := ''; - if Length(S) > 2 then - Result := Copy(S, 2, Length(S) - 2); -end; - -function UnQuote(const S: string): string; -var - Start, Len: Integer; -begin - Start := 1; - Len := Length(S); - - if (S <> '') and (S[1] in ([#0..#32] + QuoteChars)) then begin - if (LastChar(S) = S[1]) then - Dec(Len); - Inc(Start); - end; - - Result := Copy(S, Start, Len - Start + 1); -end; - -function StrNumerus(const Value: Integer; const Singular, Plural: string; - const Zero: string = '0'): string; -begin - if Abs(Value) = 1 then - Result := IntToStr(Value) + ' ' + Singular - else if Value = 0 then - Result := Zero + ' ' + Plural - else - Result := IntToStr(Value) + ' ' + Plural; -end; - -function MakeStr(const Items: array of const; Separator: string = ''): string; -const - BoolStrings: array[Boolean] of string = ('False', 'True'); - -var - i: Integer; - - function StrOfP(P: Pointer): string; - begin - if P = nil then - Result := '[nil]' - else - Result := '[' + IntToStr(Cardinal(P)) + ']'; - end; - - procedure Add(const S: string); - begin - Result := Result + s + Separator; - end; - -begin - Result := ''; - for i := 0 to High(Items) do - with Items[i] do - case VType of - vtString: Add(VString^); - vtInteger: Add(IntToStr(VInteger)); - vtBoolean: Add(BoolStrings[VBoolean]); - vtChar: Add(VChar); - vtPChar: Add(VPChar); - vtExtended: Add(FloatToStr(VExtended^)); - vtObject: if VObject is TComponent then - Add(TComponent(VObject).Name) - else - Add(VObject.ClassName); - vtClass: Add(VClass.ClassName); - vtAnsiString: Add(string(VAnsiString)); - vtCurrency: Add(CurrToStr(VCurrency^)); - vtInt64: Add(IntToStr(VInt64^)); - vtVariant: Add(string(VVariant^)); - - vtWideChar: Add(VWideChar); - vtPWideChar: Add(VPWideChar); - vtInterface: Add(StrOfP(VInterface)); - vtPointer: Add(StrOfP(VPointer)); - vtWideString: Add(WideString(VWideString)); - end; - if Result <> '' then - SetLength(result, Length(Result) - Length(Separator)); -end; - -procedure ShowText(const Items: array of const; Separator: string = ''); -var - Text: string; -begin - Text := MakeStr(Items, Separator); - - MessageBox(0, PChar(Text), 'Info', MB_OK and MB_APPLMODAL); -end; - -function DeleteChars(const S: string; C: Char): string; -var - i: Integer; -begin - Result := ''; - for i := 1 to Length(S) do - if S[i] <> C then - Result := Result + S[i]; -end; - -function DeleteChars(const S: string; C: TCharSet): string; -var - i: Integer; -begin - Result := ''; - for i := 1 to Length(S) do - if not (S[i] in C) then - Result := Result + S[i]; -end; - -function ExtractChars(const S: string; C: TCharSet): string; -var - i: Integer; -begin - Result := ''; - for i := 1 to Length(S) do - if S[i] in C then - Result := Result + S[i]; -end; - -function CharCount(const S: string; C: Char): Integer; -var - i: Integer; -begin - Result := 0; - for i := 1 to Length(S) do - if S[i] = C then - Inc(Result); -end; - -function StrAtPos(const S: string; Pos: Integer; const Str: string): Boolean; -begin - Result := (Str <> '') and (Str = Copy(S, Pos, Length(Str))); -end; - -function TextAtPos(const S: string; Pos: Integer; const Text: string): Boolean; -begin - Result := (Text <> '') and SameText(Text, Copy(S, Pos, Length(Text))); -end; - -function StrAtBegin(const S, Str: string): Boolean; -begin - Result := StrAtPos(S, 1, Str); -end; - -function TextAtBegin(const S, Text: string): Boolean; -begin - Result := TextAtPos(S, 1, Text); -end; - -function CharIn(const S: string; C: Char): Boolean; -var - i: Integer; -begin - Result := True; - for i := 1 to Length(S) do - if S[i] = C then Exit; - Result := False; -end; - -function CharIn(const S: string; C: TCharSet): Boolean; -var - i: Integer; -begin - Result := False; - for i := 1 to Length(S) do begin - Result := S[i] in C; - if Result then - Exit; - end; -end; - -function StrIn(const S, SubStr: string): Boolean; -begin - Result := PosEx(SubStr, S) > 0; -end; - -function StrIn(SL: TStrings; const S: string): Boolean; -var - i: Integer; -begin - Result := False; - for i := 0 to SL.Count-1 do begin - Result := (S = SL[i]); - if Result then - Exit; - end; -end; - -function StrIn(A: TStrA; const S: string): Boolean; -var - i: Integer; -begin - Result := False; - for i := Low(A) to High(A) do begin - Result := (S = A[i]); - if Result then - Exit; - end; -end; - -function TextIn(const S, Text: string): Boolean; -begin - Result := PosExText(Text, S) > 0; -end; - -function TextIn(SL: TStrings; const Text: string): Boolean; -var - i: Integer; -begin - Result := False; - for i := 0 to SL.Count-1 do begin - Result := SameText(Text, SL[i]); - if Result then - Exit; - end; -end; - -function TextIn(A: TStrA; const Text: string): Boolean; -var - i: Integer; -begin - Result := False; - for i := Low(A) to High(A) do begin - Result := SameText(Text, A[i]); - if Result then - Exit; - end; -end; - -function StrIndex(SL: TStrings; const S: string): Integer; -begin - for Result := 0 to SL.Count-1 do - if S = SL[Result] then - Exit; - Result := -1; -end; - -function StrIndex(A: TStrA; const S: string): Integer; -begin - for Result := Low(A) to High(A) do - if S = A[Result] then - Exit; - Result := -1; -end; - -function TextIndex(SL: TStrings; const Text: string): Integer; -begin - for Result := 0 to SL.Count-1 do - if SameText(Text, SL[Result]) then - Exit; - Result := -1; -end; - -function TextIndex(A: TStrA; const Text: string): Integer; -begin - for Result := Low(A) to High(A) do - if SameText(Text, A[Result]) then - Exit; - Result := -1; -end; - -function ReplaceChars(const S: string; Old, New: Char): string; -var - i: Integer; -begin - Result := S; - for i := 1 to Length(Result) do - if Result[i] = Old then - Result[i] := New; -end; - -function ReplaceChars(const S: string; Old: TCharSet; New: Char): string; -var - i: Integer; -begin - Result := S; - for i := 1 to Length(Result) do - if Result[i] in Old then - Result[i] := New; -end; - -function Replace(const S, Old, New: string): string; -var - oldp, ps: Integer; -begin - ps := 1; - Result := ''; - while True do begin - oldp := ps; - ps := PosEx(Old, S, oldp); - if ps = 0 then begin - Result := Result + Copy(S, oldp, Length(S) - oldp + 1); - Exit; end; - Result := Result + Copy(S, oldp, ps - oldp) + New; - Inc(ps, Length(Old)); - end; -end; - -function SLOfFile(const FileName: string): TStringList; -begin - Result := TStringList.Create; - if FileExists(FileName) then - Result.LoadFromFile(FileName); -end; - -function ContainsEmptyLines(SL: TStrings): Boolean; -begin - Result := StrIn(SL, ''); -end; - -procedure DeleteEmptyLines(SL: TStrings); -var - i: Integer; -begin - i := 0; - while i < SL.Count do begin - if SL[i] = '' then - SL.Delete(i) - else - Inc(i); - end; -end; - -procedure DeleteCommentLines(SL: TStrings; const CommentSign: string = '//'); -var - i: Integer; -begin - i := 0; - while i < SL.Count do begin - if (SL[i] = '') or (StrAtBegin(TrimLeft(SL[i]), CommentSign)) then - SL.Delete(i) - else - Inc(i); - end; -end; - -function FindLine(SL: TStrings; const S: string): Integer; -begin - for Result := 0 to SL.Count-1 do - if TextAtBegin(SL[Result], S) then - Exit; - Result := -1; -end; - -procedure QuickSortSL(SL: TStringList); - - procedure Sort(l, r: Integer); - var - i,j: Integer; - z,x: string; - begin - i := l; - j := r; - x := SL[(j + i) div 2]; - repeat - while SL[i] < x do Inc(i); - while SL[j] > x do Dec(j); - if i <= j then begin - z := SL[i]; - SL[i] := SL[j]; - SL[j] := z; - Inc(i); Dec(j); - end; - until i > j; - if j > l then Sort(l, j); - if i < r then Sort(i, r); - end; - -begin - if SL.Count > 0 then - Sort(0, SL.Count-1); -end; - -function IncStrA(StrA: TStrA): Integer; -begin - SetLength(StrA, Length(StrA) + 1); - Result := High(StrA); -end; - -function StrOfByteA(a: TByteA): string; -begin - Result := string(Copy(a, 0, Length(a))); -end; - -function ByteAOfStr(const S: string): TByteA; -begin - Result := TByteA(Copy(S, 1, Length(s))); -end; - -function ByteAOfInt(i: Integer): TByteA; -begin - SetLength(Result, SizeOf(Integer)); - Move(i, Pointer(Result)^, SizeOf(Integer)); -end; - -function IntOfByteA(A: TByteA): Integer; -begin - Result := 0; - Move(Pointer(A)^, Result, Min(Length(A), SizeOf(Integer))); -end; - -function ByteAOfHex(const Hex: string): TByteA; -var - i: Integer; - h: string; -begin - h := ExtractChars(Hex, HexadecimalChars); - SetLength(Result, Length(h) div 2); - for i := 0 to High(Result) do - Result[i] := ByteOfHex(Copy(h, (i shl 1) + 1, 2)); -end; - -function SizeOfFile(const FileName: string): Integer; -var - F: file; -begin - AssignFile(F, FileName); - {$I-}Reset(F, 1);{$I+} - if IOResult = 0 then begin - Result := FileSize(F); - CloseFile(F); - end else - Result := 0; -end; - -function FileEx(const FileName: string; AllowFolders: Boolean = False): Boolean; -var - FindData: TWin32FindData; -begin - if FileName = '' then begin - Result := False; - Exit; end; - - Result := (AllowFolders and DirectoryExists(FileName)) or - (FindFirstFile(PChar(FileName), FindData) <> INVALID_HANDLE_VALUE); - Result := Result and not CharIn(FileName, WildCards); - Result := Result and (AllowFolders - or ((FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0)); -end; - -function LWPSolve(const Dir: string): string; -begin - if (Dir <> '') and (Dir[Length(Dir)] = '\') then begin - Result := Copy(Dir, 1, Length(Dir) - 1); - end else - Result := Dir; -end; - -function LWPSlash(const Dir: string): string; -begin - if (Dir <> '') and (Dir[Length(Dir)] = '\') then begin - Result := Copy(Dir, 1, Length(Dir)); - end else - Result := Dir + '\'; -end; - -function ExtractDrive(const FileName: string): string; -begin - Result := ''; - if (Length(FileName) >= 2) and (FileName[2] = ':') then - Result := UpperCase(FileName[1] + ':\'); -end; - -function ExtractPath(const FileName: string): string; -var - p: Integer; -begin - p := CharPosR('\', FileName); - if P > 0 then - Result := Copy(FileName, 1, p) - else - Result := FileName; -end; - -function ExtractPrefix(const FileName: string): string; -begin - Result := UntilLastChar(ExtractFileName(FileName), '.'); -end; - -function ExtractSuffix(const FileName: string): string; -begin - Result := FromLastChar(ExtractFileName(FileName), '.'); -end; - -function SameByteA(const A, B: TByteA): Boolean; -begin - Result := (A = B) or ((Length(A) = Length(B)) and CompareMem(A, B, Length(A))); -end; - -function Reverse(A: TByteA): TByteA; -var - i: Integer; -begin - SetLength(Result, Length(A)); - - for i := 0 to High(A) do - Result[High(Result) - i] := A[i]; -end; - -function Endian(i: Integer): Integer; -type - EndianArray = packed array[0..3] of Byte; -var - a, b: EndianArray; -begin - a := EndianArray(i); - b[0] := a[3]; - b[1] := a[2]; - b[2] := a[1]; - b[3] := a[0]; - Result := Integer(b); -end; - -function SaveByteA(Data: TByteA; const FileName: string; - Overwrite: Boolean = True): Boolean; -var - F: file; -begin - if FileExists(FileName) and not Overwrite then begin - Result := False; - Exit end; - - AssignFile(F, FileName); - {$I-}Rewrite(F, 1);{$I+} - if IOResult = 0 then begin - if Length(Data) > 0 then - BlockWrite(F, Data[0], Length(Data)); - CloseFile(F); - Result := True; - end else - Result := False; -end; - -function LoadByteA(const FileName: string): TByteA; -var - F: file; -begin - AssignFile(F, FileName); - {$I-}Reset(F, 1);{$I+} - if IOResult = 0 then begin - SetLength(Result, FileSize(F)); - if Length(Result) > 0 then - BlockRead(F, Result[0], FileSize(F)); - CloseFile(F); - end else - SetLength(Result, 0); -end; - -function IsValidFileName(const FileName: string): Boolean; -begin - Result := (FileName <> '') and not CharIn(FileName, FileNameEnemies) - and CharIn(Trim(FileName), AllChars - ['.']); -end; - -function MakeValidFileName(FileName: string; const Default: string = 'File'): string; -begin - if FileName = '' then - FileName := Default; - - if CharIn(FileName, FileNameEnemies) then - Result := ReplaceChars(FileName, FileNameEnemies, '_') - else if not CharIn(Trim(FileName), AllChars - ['.']) then - Result := Default - else - Result := FileName; -end; - -function IsValidInteger(const S: string): Boolean; -{const - LowInt = '2147483648'; - HighInt = '2147483647'; -var - len, RealLen, i, o: Integer; - c: Char; -begin - Result := False; - if S = '' then - Exit; - - len := Length(S); - o := 1; - - if S[1] = '-' then begin - if len = 1 then - Exit; - Inc(o); - while (o <= len) and (S[o] = '0') do - Inc(o); - if o > len then - Exit; - if o < len then begin - RealLen := len - o + 1; - if RealLen > Length(LowInt) then - Exit - else if RealLen = Length(LowInt) then begin - for i := 1 to Length(LowInt) do begin - c := S[i + o - 1]; - if (c < '0') or (c > LowInt[i]) then - Exit; - if c in ['0'..Char((Byte(LowInt[i])-1))] then - Break; - end; - Inc(o, i); - end; - end; - end else begin - while (o <= len) and (S[o] = '0') do - Inc(o); - if o <= len then begin - RealLen := len - o + 1; - if RealLen > Length(HighInt) then - Exit - else if RealLen = Length(HighInt) then begin - for i := 1 to Length(HighInt) do begin - c := S[i + o - 1]; - if (c < '0') or (c > HighInt[i]) then - Exit; - if c in ['0'..Char((Byte(HighInt[i])-1))] then - Break; - end; - Inc(o, i); - end; - end; - end; - - for i := o to len do - if not (S[i] in ['0'..'9']) then - Exit; - - Result := True; } -var - i: Int64; -begin - i := StrToInt64Def(S, High(Int64)); - Result := (i >= Low(Integer)) and (i <= High(Integer)); -end; - -function IsValidCardinal(const S: string): Boolean; -{const - HighCard = '4294967295'; -var - len, RealLen, i, o: Integer; -begin - Result := False; - if S = '' then - Exit; - - len := Length(S); - o := 1; - - while (o <= len) and (S[o] = '0') do - Inc(o); - if o <= len then begin - RealLen := len - o + 1; - if RealLen > Length(HighCard) then - Exit - else if RealLen = Length(HighCard) then begin - for i := 1 to Length(HighCard) do begin - if S[i + o - 1] > HighCard[i] then - Exit; - if S[i + o - 1] in ['0'..Char((Byte(HighCard[i])-1))] then - Break; - end; - Inc(o, i); - end; - end; - - for i := o to len do - if not (S[i] in ['0'..'9']) then - Exit; - - Result := True; } -var - i: Int64; -begin - i := StrToInt64Def(S, -1); - Result := (i >= 0) and (i <= High(Cardinal)); -end; - -function StrOfBool(flag: Boolean; const TrueStr: string = 'True'; - const FalseStr: string = 'False'): string; -begin - if Flag then - Result := TrueStr - else - Result := FalseStr; -end; - -function StrOfInt(i: Integer): string; -begin -{ if i = 0 then begin - Result := '0'; - Exit end; - - while i > 0 do begin - Result := Char(Byte('0') + (i mod 10)) + Result; - i := i div 10; - end;} - Result := IntToStr(i); -end; - -function CardOfStr(const S: string): Cardinal; -var - Res: Int64; -begin - Res := StrToInt64Def(S, -1); - if Res > High(Cardinal) then - Res := High(Cardinal) - else if Res < 0 then - Res := 0; - Result := Cardinal(Res); -end; - -function HexOrd(Hex: Char): THex; -begin - case Hex of - '0'..'9': - Result := Byte(Hex) - 48; - 'A'..'F': - Result := Byte(Hex) - 55; - 'a'..'f': - Result := Byte(Hex) - 87; - else - Result := 0; - end; -end; - -function ByteOfHex(Hex: THexByteStr): Byte; -begin - Result := (HexOrd(Hex[1]) shl 4) + HexOrd(Hex[2]); -end; - -function DecOfHex(const Hex: string): string; -begin - Result := IntToStr(CardOfHex(Hex)); -end; - -function HexOfByte(b: Byte): THexByteStr; -begin - Result := HexChar[(b and $F0) shr 4] - + HexChar[ b and $0F ]; -end; - -{function HexOfCard2(c: Cardinal): string; -var - Data: array[0..(1 shl 4) - 1] of Char; - i: Integer; -begin - for i := 0 to (1 shl 4) - 1 do - if i < 10 then - Data[i] := Char(Ord('0') + i) - else - Data[i] := Char(Ord('A') + i - 10); - - Result := Data[(c and (((1 shl (1 shl 2)) - 1) shl (7 shl 2))) shr (7 shl 2)] - + Data[(c and (((1 shl (1 shl 2)) - 1) shl (6 shl 2))) shr (6 shl 2)] - + Data[(c and (((1 shl (1 shl 2)) - 1) shl (5 shl 2))) shr (5 shl 2)] - + Data[(c and (((1 shl (1 shl 2)) - 1) shl (4 shl 2))) shr (4 shl 2)] - + Data[(c and (((1 shl (1 shl 2)) - 1) shl (3 shl 2))) shr (3 shl 2)] - + Data[(c and (((1 shl (1 shl 2)) - 1) shl (2 shl 2))) shr (2 shl 2)] - + Data[(c and (((1 shl (1 shl 2)) - 1) shl (1 shl 2))) shr (1 shl 2)] - + Data[(c and (((1 shl (1 shl 2)) - 1) shl (0 shl 2))) shr (0 shl 2)]; -end; } - -function HexOfCard(i: Cardinal): string; -var - a: Cardinal; -begin - Result := ''; - while i > 0 do begin - a := i and $F; - Result := HexChar[a] + Result; - i := i shr 4; - end; -end; - -function HexOfCard(i: Cardinal; Digits: Integer): string; -var - a: Cardinal; -begin - Result := ''; - while i > 0 do begin - a := i and $F; - Result := HexChar[a] + Result; - i := i shr 4; - end; - Result := MulStr('0', Digits - Length(Result)) + Result; -end; - -function PascalHexArray(a: TByteA; Name: string): string; -var - i, len: Integer; -begin - Result := 'const' + EOL + - ' ' + Name + ': array[0..' + IntToStr(High(a)) + '] of Byte = ('; - - len := Length(a); - for i := 0 to len-1 do begin - if (i mod 19) = 0 then - Result := Result + EOL + ' ' + ' '; - Result := Result + '$' + HexOfByte(a[i]); - if i < len-1 then - Result := Result + ','; - end; - Result := Result + EOL + ' );'; -end; - -function HexOfByteA(a: TByteA; Blocks: Integer = 1; - const Splitter: string = ' '): string; -var - i: Integer; -begin - Result := ''; - - if Blocks > 0 then - for i := 0 to High(a) do begin - Result := Result + HexOfByte(a[i]); - if i < High(a) then - if ((i+1) mod Blocks) = 0 then - Result := Result + Splitter; - end - else - for i := 0 to High(a) do - Result := Result + HexOfByte(a[i]); -end; - -function BinOfByteA(a: TByteA; Blocks: Integer = 4; - const Splitter: string = ' '): string; -var - i, max: Integer; - Bit: Boolean; -begin - Result := ''; - - if Blocks > 0 then begin - max := 8 * (High(a)) + 7; - for i := 0 to max do begin - Bit := 7-(i mod 8) in TBitSet(a[i div 8]); - Result := Result + Char(Byte('0') + Byte(Bit)); - if i < max then - if ((i+1) mod Blocks) = 0 then - Result := Result + Splitter; - end; - end else - for i := 0 to High(a) do - Result := Result + Char(Byte('0') + a[i] shr (i and 8)); -end; - -function CardOfHex(Hex: string): Cardinal; -var - i: Integer; -begin - Result := 0; - Hex := Copy(ExtractChars(Hex, HexadecimalChars), 1, 8); - - for i := 1 to Length(Hex) do - if Hex[i] <> '0' then - Inc(Result, HexOrd(Hex[i]) shl ((Length(Hex) - i) shl 2)); -end; - -function IntOfBin(Bin: string): Cardinal; -var - i: Integer; -begin - Result := 0; - Bin := Copy(ExtractChars(Bin, BinaryChars), 1, 32); - - for i := Length(Bin) downto 1 do - if Bin[i] = '1' then - Inc(Result, 1 shl (Length(Bin) - i)); -end; - -function BinOfInt(n: Cardinal): string; -var - a: Integer; -begin - if n = 0 then begin - Result := '0'; - exit; end; - - Result := ''; - while n > 0 do begin - a := n and 1; - Result := Char(a + Byte('0')) + Result; - n := n shr 1; - end; -end; - -function BinOfIntFill(n: Cardinal; MinCount: Integer = 8): string; -var - a: Integer; -begin - if n = 0 then begin - Result := MulStr('0', MinCount); - Exit; end; - - Result := ''; - while n > 0 do begin - a := n and 1; - Result := Char(a + Byte('0')) + Result; - n := n shr 1; - end; - Result := MulStr('0', MinCount - Length(Result)) + Result; -end; - -function BaseNOfInt(I: Cardinal; B: TBaseN): string; -var - a: Integer; -begin - if (B < 2) or (i = 0) then begin - Result := '0'; - Exit; end; - - Result := ''; - while i > 0 do begin - a := i mod B; - Result := BaseNChar[a] + Result; - i := i div B; - end; -end; - -function IntOfBaseN(V: string; B: TBaseN): Cardinal; -var - i: Integer; - F: Cardinal; - c: Byte; -begin - Result := 0; - V := TrimAll(V); - F := 1; - for i := Length(V) downto 1 do begin - c := Byte(UpCase(V[i])); - case Char(c) of - '0'..'9': c := c - 48; - 'A'..'Z': c := c - 55; - end; - if c < B then - Result := Result + Byte(c) * F; - F := F * B; - end; -end; - -function KeepIn(i, Bottom, Top: Variant): Variant; -begin - Result := i; - if Result > Top then - Result := Top - else if Result < Bottom then - Result := Bottom; -end; - -function InRange(Value, Bottom, Top: Variant): Boolean; -begin - Result := (Value >= Bottom) and (Value <= Top); -end; - -function InStrictRange(Value, Bottom, Top: Variant): Boolean; -begin - Result := (Value > Bottom) and (Value < Top); -end; - -function Min(const A, B: Integer): Integer; -begin - if A < B then - Result := A - else - Result := B; -end; - -function Min(const A: TIntA): Integer; -var - i: Integer; -begin - Result := 0; - if Length(A) = 0 then - Exit; - - Result := A[0]; - for i := 1 to High(A) do - if A[i] < Result then - Result := A[i]; -end; - -function Max(const A, B: Integer): Integer; -begin - if A > B then - Result := A - else - Result := B; -end; - -function Max(const A: TIntA): Integer; -var - i: Integer; -begin - Result := 0; - if Length(A) = 0 then - Exit; - - Result := A[0]; - for i := 1 to High(A) do - if A[i] > Result then - Result := A[i]; -end; - -function RangesOfStr(const S: string): TRanges; -var - SL: TStringList; - r, b, t: string; - i, p: Integer; - - function TryStrToCard(const S: string; out Value: Cardinal): Boolean; - var - E: Integer; - begin - Val(S, Value, E); - Result := E = 0; - end; - -begin - Result := nil; - SL := TStringList.Create; - try - Split(S, RangesSeparator, SL); - SetLength(Result, SL.Count); - for i := 0 to SL.Count-1 do begin - r := SL[i]; - with Result[i] do begin - p := CharPos(RangeInnerSeparator, r); - Simple := p = 0; // no '-' found - if Simple then begin - if r = RangeInfinite then begin // * --> *-* - Simple := False; - Bottom := Low(Bottom); - Top := High(Top); - end else if not TryStrToCard(r, Value) then - Break; - - end else begin - TileStr(r, p, p, b, t); - - if b = RangeInfinite then - Bottom := Low(Bottom) - else if not TryStrToCard(b, Bottom) then - Break; - - if t = RangeInfinite then - Top := High(Top) - else if not TryStrToCard(t, Top) then - Break; - if Bottom > Top then begin - p := Bottom; Bottom := Top; Top := p; - end; - end; - end; - end; - - if i <> SL.Count then - Result := nil; - - finally - SL.Free; - end; -end; - -function InRanges(Ranges: TRanges; TestValue: Cardinal): Boolean; -var - i: Integer; -begin - Result := True; - - for i := 0 to High(Ranges) do - with Ranges[i] do - if Simple then begin - if TestValue = Value then - Exit; - end else begin - if InRange(TestValue, Bottom, Top) then - Exit; - end; - - Result := False; -end; - -procedure WriteSL(Strings: TStrings; const Prefix: string = ''; - const Suffix: string = ''); -var - i: Integer; -begin - for i := 0 to Strings.Count-1 do - WriteLn(Prefix + Strings[i] + Suffix); -end; - -function Success(Res: Integer; ResultOnSuccess: Integer = ERROR_SUCCESS): Boolean; -begin - Result := (Res = ResultOnSuccess); - LastSuccessRes := Res; -end; - -function Failure(Res: Integer; ResultOnSuccess: Integer = ERROR_SUCCESS): Boolean; -begin - Result := not Success(Res, ResultOnSuccess); -end; - -function ExpandString(const S: string): string; -var - Len: Integer; - P, Res: PChar; -begin - Result := ''; - P := PChar(S); - Len := ExpandEnvironmentStrings(P, nil, 0); - if Len = 0 then - Exit; - - GetMem(Res, Len); - ExpandEnvironmentStrings(P, Res, Len); - - Result := Res; - FreeMem(Res, Len); -end; - -function FindAll(Strings: TStrings; const Mask: string; - ScanSubDirs: Boolean = True; Attributes: Integer = faFindEveryFile; - FileReturn: TFileNameFunc = nil): Boolean; -var - Path, FileName: string; - - procedure ScanDir(const Path, FileName: string); - var - PSR: TSearchRec; - Res: Integer; - - procedure Add(const S: string); - begin - if S <> '' then - Strings.Add(S); - end; - - begin - Res := FindFirst(Path + FileName, Attributes, PSR); - while Success(Res, 0) do begin - if Assigned(FileReturn) then - Add(FileReturn(Path + PSR.Name)) - else - Add(Path + PSR.Name); - Res := FindNext(PSR); - end; - FindClose(PSR); - if not ScanSubDirs then - Exit; - - Res := FindFirst(Path + '*', faDirectory, PSR); - while Success(Res, 0) do begin - if (PSR.Attr and faDirectory > 0) - and (PSR.Name <> '.') and (PSR.Name <> '..') then - ScanDir(Path + PSR.Name + '\', FileName); - Res := FindNext(PSR); - end; - FindClose(PSR); - end; - -begin - Strings.Clear; - Path := ExtractPath(Mask); - FileName := ExtractFileName(Mask); - ScanDir(Path, FileName); - Result := Strings.Count > 0; -end; - -function FindAllFirst(const Mask: string; ScanSubDirs: Boolean = True; - Attributes: Integer = faFindEveryFile): string; -var - Path, FileName: string; - - function ScanDir(const Path, FileName: string): Boolean; - var - PSR: TSearchRec; - Res: Integer; - begin - Result := False; - if Success(FindFirst(Path + FileName, Attributes, PSR), 0) then begin - FindAllFirst := Path + PSR.Name; - Result := True; - FindClose(PSR); - Exit; end; - if not ScanSubDirs then - Exit; - - Res := FindFirst(Path + '*', faDirectory, PSR); - while not Result and Success(Res, 0) do begin - if (PSR.Attr and faDirectory > 0) - and (PSR.Name <> '.') and (PSR.Name <> '..') then - Result := ScanDir(Path + PSR.Name + '\', FileName); - Res := FindNext(PSR); - end; - FindClose(PSR); - end; -begin - Result := ''; - Path := ExtractPath(Mask); - FileName := ExtractFileName(Mask); - ScanDir(Path, FileName); -end; - -procedure DeleteFiles(const Mask: string; ScanSubDirs: Boolean = True; - Attributes: Integer = faFindEveryFile); -var - Path, FileName: string; - - procedure ScanDir(const Path, FileName: string); - var - PSR: TSearchRec; - Res: Integer; - - procedure TryDeleteFile(const FileName: string); - begin - try - DeleteFile(Path + PSR.Name); - except - end; - end; - - begin - Res := FindFirst(Path + FileName, Attributes, PSR); - while Success(Res, 0) do begin - TryDeleteFile(Path + PSR.Name); - Res := FindNext(PSR); - end; - FindClose(PSR); - if not ScanSubDirs then - Exit; - - Res := FindFirst(Path + '*', faDirectory, PSR); - while Success(Res, 0) do begin - if (PSR.Attr and faDirectory > 0) - and (PSR.Name <> '.') and (PSR.Name <> '..') then begin - ScanDir(Path + PSR.Name + '\', FileName); - TryDeleteFile(Path + PSR.Name); - end; - Res := FindNext(PSR); - end; - FindClose(PSR); - end; -begin - Path := ExtractPath(Mask); - FileName := ExtractFileName(Mask); - ScanDir(Path, FileName); -end; - -function GetFileNew(FileName: string; NoFloppyDrives: Boolean = True): string; -var - Drive: string; - pf, pd, Len: Integer; - PSR: TSearchRec; -begin - Result := ''; - FileName := Trim(FileName); - if Length(FileName) < 2 then - Exit; - - Drive := ExtractDrive(FileName); - if not DirectoryExists(Drive) then - Exit; - - if NoFloppyDrives and (Drive[1] in ['A', 'B']) then - Exit; - - Len := Length(FileName); - Result := Drive; - pf := Length(Drive) + 1; - while pf <= Len do begin - if FileName[pf] = '\' then begin - Result := Result + '\'; - Inc(pf); - Continue; end; - - pd := CharPos('\', FileName, pf); - if pd = 0 then begin - if 0=FindFirst(Result + Copy(FileName, pf, MaxInt), faFindEveryFile, PSR) then begin - Result := Result + PSR.Name; - Break; end else begin - FindClose(PSR); - if 0=FindFirst(Result + Copy(FileName, pf, MaxInt), faDirectory, PSR) then - Result := Result + PSR.Name + '\' - else - Result := ''; - FindClose(PSR); - if Result = '' then - Break; - end; - end; - - if 0=FindFirst(Result + Copy(FileName, pf, pd - pf), faDirectory, PSR) then - Result := Result + PSR.Name + '\' - else - Result := ''; - FindClose(PSR); - if Result = '' then - Break; - - pf := pd + 1; - end; - - if (Result <> '') and not FileEx(Result, True) then - Result := ''; -end; - -function DateTimeOfFileTime(const FileTime: TFileTime): TDateTime; -var - LocalFileTime: TFileTime; - Res: Integer; -begin - Result := 0; - - FileTimeToLocalFileTime(FileTime, LocalFileTime); - if not FileTimeToDosDateTime(LocalFileTime, LongRec(Res).Hi, - LongRec(Res).Lo) then - Res := -1; - - if (Res = -1) or (Res = 0) then - Exit; - try - Result := FileDateToDateTime(Res); - except - end; -end; - -procedure FileNew(const FileName: string); -var - Handle: Integer; -begin - Handle := FileCreate(FileName); - FileClose(Handle); -end; - -function Win32PlatformStr: string; -const - PlatformStrings: array[VER_PLATFORM_WIN32s..VER_PLATFORM_WIN32_NT] of string = - ('VER_PLATFORM_WIN32s', 'VER_PLATFORM_WIN32_WINDOWS', 'VER_PLATFORM_WIN32_NT'); -begin - Result := PlatformStrings[Win32Platform]; -end; - -function FullOSInfo: string; -begin - Result := Format( - 'Platform: %s' + EOL + - 'Version: %d.%d Build %d' + EOL + - 'CSD: %s', - [ - Win32PlatformStr, - Win32MajorVersion, Win32MinorVersion, Win32BuildNumber, - Win32CSDVersion - ] - ); -end; - -function Win9x: Boolean; -begin - Result := Win32Platform = VER_PLATFORM_WIN32_WINDOWS; -end; - -function WinNT: Boolean; -begin - Result := Win32Platform = VER_PLATFORM_WIN32_NT; -end; - -function Win2000: Boolean; -begin - Result := (Win32Platform = VER_PLATFORM_WIN32_NT) - and (Win32MajorVersion = 4); -end; - -function WinXP: Boolean; -begin - Result := Win32MajorVersion >= 5; -end; - -initialization - MyDir := GetMyDir; - -end. - -unit FifoStream; - -interface - -uses Classes, windows, Dialogs; - -const - DefaultChunksize = 32768; // 32kb per chunk as default. - -type - PMemChunk = ^TMemChunk; - TMemChunk = record - Filled: Longword; - Read: Longword; - Data: pointer; - end; - - TFifo = class - private - FBuffers: TList; - FChunksize: Longword; - FCritSect: TRTLCriticalSection; - FIsWinNT: boolean; - FBytesInFifo: LongWord; - protected - function GetBytesInFifo: LongWord; - public - constructor Create; - destructor Destroy; override; - procedure Write(Data: pointer; Size: LongWord); - procedure Read(Buff: pointer; var ReqSize: LongWord); - procedure PeekData(Buff: pointer; var ReqSize: LongWord); - published - property BytesInFifo: LongWord read FBytesInFifo; - end; - -implementation - -constructor TFifo.Create; -begin - inherited; - FBuffers := TList.Create; - // set default chunksize... - FChunksize := DefaultChunksize; - InitializeCriticalSection(FCritSect); -end; - -destructor TFifo.Destroy; -var - I: Integer; -begin - EnterCriticalSection(FCritSect); - for I := 0 to FBuffers.count - 1 do - begin - FreeMem(PMemChunk(Fbuffers[I]).Data); - Dispose(PMemChunk(Fbuffers[I])); - end; - FBuffers.Clear; - FBuffers.Free; - LeaveCriticalSection(FCritSect); - - DeleteCriticalSection(FCritSect); - inherited; -end; - -function TFifo.GetBytesInFifo: LongWord; -begin - Result := 0; - if FBuffers.Count = 0 then - begin - exit; - end - else - begin - if FBuffers.Count > 1 then - Inc(Result, (FBuffers.Count - 1) * FChunkSize); - Inc(Result, PMemChunk(FBuffers[Fbuffers.Count - 1]).Filled); - Dec(Result, PMemChunk(FBuffers[0]).Read); - end; -end; - -procedure TFifo.Write(Data: pointer; Size: LongWord); -var - Privpointer: pointer; - PrivSize: LongWord; - Chunk: PMemChunk; - PosInChunk: pointer; -begin - if LongWord(Data) = 0 then - begin - // null pointer? somebody is trying to fool us, get out... - Exit; - end; - EnterCriticalSection(FCritSect); - PrivPointer := Data; - PrivSize := 0; - // are already buffers there? - if FBuffers.count > 0 then - begin - // is the last one of them not completely filled? - if PMemChunk(FBuffers[FBuffers.count - 1]).filled < FChunksize then - // not completely filled, so fill up the buffer. - begin - Chunk := PMemChunk(FBuffers[FBuffers.count - 1]); - // fetch chunkdata. - PosInChunk := Chunk.Data; - // move to current fill pos... - Inc(LongWord(PosInChunk), Chunk.Filled); - // can we fill the chunk completely? - if Size > FChunksize - Chunk.Filled then - begin - // yes we can. - Move(PrivPointer^, PosInChunk^, FChunksize - Chunk.Filled); - Inc(PrivSize, FChunksize - Chunk.Filled); - Inc(LongWord(PrivPointer), FChunksize - Chunk.Filled); - Chunk.Filled := FChunkSize; - end - else - // we have to less data for filling the chunk completely, - // just put everything in. - begin - Move(PrivPointer^, PosInChunk^, Size); - Inc(PrivSize, Size); - Inc(Chunk.Filled, Size); - end; - end; - end; - // as long as we have remaining stuff put it into new chunks. - while (PrivSize < Size) do - begin - new(Chunk); - GetMem(Chunk.Data, FChunksize); - Chunk.Read := 0; - // can we fill an entire chunk with the remaining data? - if Privsize + FChunksize < Size then - begin - // yes we can, so put the stuff in. - Move(Privpointer^, Chunk.Data^, FChunksize); - Inc(LongWord(PrivPointer), FChunksize); - Inc(PrivSize, FChunksize); - Chunk.Filled := FChunksize; - end - else // we have to less data to fill the entire chunk, just put the remaining stuff in. - begin - Move(Privpointer^, Chunk.Data^, Size - Privsize); - Chunk.Filled := Size - Privsize; - Inc(PrivSize, Size - Privsize); - end; - Fbuffers.Add(Chunk); - end; - if Size <> Privsize then - Showmessage('miscalculation in TFifo.write'); - FBytesInFifo := GetBytesInFifo; - LeaveCriticalSection(FCritSect); -end; - -procedure TFifo.Read(Buff: pointer; var ReqSize: LongWord); -var - PrivSize: Integer; - Privpos: pointer; - Chunk: PMemChunk; - ChunkPos: pointer; -begin - if LongWord(Buff) = 0 then - begin - // null pointer? somebody is trying to fool us, get out... - Exit; - end; - EnterCriticalSection(FCritSect); - PrivSize := 0; - Privpos := Buff; - while FBuffers.Count > 0 do - begin - Chunk := PMemChunk(FBuffers[0]); - ChunkPos := Chunk.data; - Inc(LongWord(ChunkPos), Chunk.Read); - // does the remaining part of the chunk fit into the buffer? - if PrivSize + (Chunk.Filled - Chunk.read) < ReqSize then - begin // yep, it fits - Move(ChunkPos^, Privpos^, Chunk.Filled - Chunk.read); - Inc(PrivSize, Chunk.Filled - Chunk.read); - FreeMem(Chunk.Data); - Dispose(Chunk); - FBuffers.Delete(0); - end - else // remaining part didn't fit, get as much as we can and increment the - // read attribute. - begin - Move(ChunkPos^, Privpos^, ReqSize - PrivSize); - Inc(Chunk.read, ReqSize - PrivSize); - Inc(PrivSize, ReqSize - PrivSize); - // as we filled the buffer, we'll have to break here. - break; - end; - end; - FBytesInFifo := GetBytesInFifo; - LeaveCriticalSection(FCritSect); - ReqSize := PrivSize; -end; - -// read Data from Stream without removing it from the Stream... - -procedure TFifo.PeekData(Buff: pointer; var ReqSize: LongWord); -var - PrivSize: Integer; - Privpos: pointer; - Chunk: PMemChunk; - ChunkPos: pointer; - ChunkNr: Integer; -begin - if LongWord(Buff) = 0 then - begin - // null pointer? somebody is trying to fool us, get out... - Exit; - end; - EnterCriticalSection(FCritSect); - PrivSize := 0; - Privpos := Buff; - ChunkNr := 0; - while FBuffers.Count > ChunkNr do - begin - Chunk := PMemChunk(FBuffers[ChunkNr]); - ChunkPos := Chunk.data; - Inc(LongWord(ChunkPos), Chunk.Read); - // does the remaining part of the chunk fit into the buffer? - if PrivSize + (Chunk.Filled - Chunk.read) < ReqSize then - begin // yep, it fits - Move(ChunkPos^, Privpos^, Chunk.Filled - Chunk.read); - Inc(PrivSize, Chunk.Filled - Chunk.read); - Inc(ChunkNr); - end - else // remaining part didn't fit, get as much as we can and increment the - // read attribute. - begin - Move(ChunkPos^, Privpos^, ReqSize - PrivSize); - Inc(PrivSize, ReqSize - PrivSize); - // as we filled the buffer, we'll have to break here. - break; - end; - end; - LeaveCriticalSection(FCritSect); - ReqSize := PrivSize; -end; - -end. diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.pp b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.pp deleted file mode 100644 index ea697be..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.pp +++ /dev/null @@ -1,8 +0,0 @@ -exec { 'grep': - command => 'grep "\'" -rI *', - path => '/bin:/usr/bin', -} - -node default { - notify {"Hello World":;} -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.prg b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.prg deleted file mode 100644 index b70d9e4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.prg +++ /dev/null @@ -1,161 +0,0 @@ -&& This is a concatenation of all VFP examples on Wikipedia. -&& Copyright 2013 Wikimedia, under the GFDL. - -FOR i = 1 to 10 - x = x + 6.5 -ENDFOR - -IF i = 25 - i = i + 1 -ELSE - i = i + 3 -ENDIF - -x = 1 -DO WHILE x < 50 - x = x + 1 -ENDDO - -x = 1 -DO WHILE .T. - x = x + 1 - IF x < 50 - LOOP - ELSE - EXIT - ENDIF -ENDDO - -nMonth = MONTH(DATE()) -DO CASE - CASE nMonth <= 3 - MESSAGEBOX("Q1") - - CASE nMonth <= 6 - MESSAGEBOX("Q2") - - CASE nMonth <= 9 - MESSAGEBOX("Q3") - - OTHERWISE - MESSAGEBOX("Q4") -ENDCASE - -FOR EACH oControl IN THISFORM.Controls - MESSAGEBOX(oControl.Name) -ENDFOR - -f = Factorial(10) - -FUNCTION Factorial(n) - LOCAL i,r - r = 1 - FOR i = n TO 1 STEP -1 - r = r * n - ENDFOR - RETURN r -ENDFUNC - -loForm = CREATEOBJECT("HiForm") -loForm.Show(1) - -DEFINE CLASS HiForm AS Form - AutoCenter = .T. - Caption = "Hello, World" - - ADD OBJECT lblHi as Label WITH ; - Caption = "Hello, World!" -ENDDEFINE - -loMine = CREATEOBJECT("MyClass") -? loMine.cProp1 && This will work. (Double-ampersand marks an end-of-line comment) -? loMine.cProp2 && Program Error: Property CPROP2 is not found. - -? loMine.MyMethod1() && This will work. -? loMine.MyMethod2() && Program Error: Property MYMETHOD2 is not found. - -DEFINE CLASS MyClass AS Custom - cProp1 = "My Property" && This is a public property - HIDDEN cProp2 && This is a private (hidden) property - dProp3 = {} && Another public property - - PROCEDURE Init() && Class constructor - This.cProp2 = "This is a hidden property." - ENDPROC - - PROCEDURE dProp3_Access && Property Getter - RETURN DATE() - ENDPROC - PROCEDURE dProp3_Assign(vNewVal) && Property Setter - IF VARTYPE(vNewVal) = "D" - THIS.dProp3 = vNewVal - ENDIF - ENDPROC - - PROCEDURE MyMethod1() - * This is a public method, calling a hidden method that returns - * the value of a hidden property. - RETURN This.MyMethod2() - ENDPROC - - HIDDEN PROCEDURE MyMethod2() && This is a private (hidden) method - RETURN This.cProp2 - ENDPROC -ENDDEFINE - -&& Create a table -CREATE TABLE randData (iData I) - -&& Populate with random data using xBase and SQL DML commands -FOR i = 1 TO 50 - APPEND BLANK - REPLACE iData WITH (RAND() * 100) - - INSERT INTO randData (iData) VALUES (RAND() * 100) -ENDFOR - -&& Place a structural index on the data -INDEX ON iData TAG iData -CLOSE ALL - -&& Display ordered data using xBase-style commands -USE randData -SET ORDER TO iData -GO TOP -LIST NEXT 10 && First 10 -GO BOTTOM -SKIP -10 -LIST REST && Last 10 -CLOSE ALL - -&& Browse ordered data using SQL DML commands -SELECT * ; - FROM randData ; - ORDER BY iData DESCENDING - - -&& Connect to an ODBC data source -LOCAL nHnd -nHnd = SQLCONNECT ("ODBCDSN", "user", "pwd") - -&& Execute a SQL command -LOCAL nResult -nResult = SQLEXEC (nHnd, "USE master") -IF nResult < 0 - MESSAGEBOX ("MASTER database does not exist!") - RETURN -ENDIF - -&& Retrieve data from the remote server and stores it in -&& a local data cursor -nResult = SQLEXEC (nHnd, "SELECT * FROM authors", "QAUTHORS") - -&& Update a record in a remote table using parameters -PRIVATE cAuthorID, cAuthorName -cAuthorID = "1001" -cAuthorName = "New name" -nResult = SQLEXEC (nHnd, "UPDATE authors SET auth_name = ?cAuthorName WHERE auth_id = ?cAuthorID") - -&& Close the connection -SQLDISCONNECT(nHnd) - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.rb b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.rb deleted file mode 100644 index 93f8dc2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.rb +++ /dev/null @@ -1,1852 +0,0 @@ -module CodeRay - module Scanners - -class Ruby < Scanner - - RESERVED_WORDS = [ - 'and', 'def', 'end', 'in', 'or', 'unless', 'begin', - 'defined?', 'ensure', 'module', 'redo', 'super', 'until', - 'BEGIN', 'break', 'do', 'next', 'rescue', 'then', - 'when', 'END', 'case', 'else', 'for', 'retry', - 'while', 'alias', 'class', 'elsif', 'if', 'not', 'return', - 'undef', 'yield', - ] - - DEF_KEYWORDS = ['def'] - MODULE_KEYWORDS = ['class', 'module'] - DEF_NEW_STATE = WordList.new(:initial). - add(DEF_KEYWORDS, :def_expected). - add(MODULE_KEYWORDS, :module_expected) - - WORDS_ALLOWING_REGEXP = [ - 'and', 'or', 'not', 'while', 'until', 'unless', 'if', 'elsif', 'when' - ] - REGEXP_ALLOWED = WordList.new(false). - add(WORDS_ALLOWING_REGEXP, :set) - - PREDEFINED_CONSTANTS = [ - 'nil', 'true', 'false', 'self', - 'DATA', 'ARGV', 'ARGF', '__FILE__', '__LINE__', - ] - - IDENT_KIND = WordList.new(:ident). - add(RESERVED_WORDS, :reserved). - add(PREDEFINED_CONSTANTS, :pre_constant) - - METHOD_NAME = / #{IDENT} [?!]? /xo - METHOD_NAME_EX = / - #{METHOD_NAME} # common methods: split, foo=, empty?, gsub! - | \*\*? # multiplication and power - | [-+~]@? # plus, minus - | [\/%&|^`] # division, modulo or format strings, &and, |or, ^xor, `system` - | \[\]=? # array getter and setter - | <=?>? | >=? # comparison, rocket operator - | << | >> # append or shift left, shift right - | ===? # simple equality and case equality - /ox - GLOBAL_VARIABLE = / \$ (?: #{IDENT} | \d+ | [~&+`'=\/,;_.<>!@0$?*":F\\] | -[a-zA-Z_0-9] ) /ox - - DOUBLEQ = / " [^"\#\\]* (?: (?: \#\{.*?\} | \#(?:$")? | \\. ) [^"\#\\]* )* "? /ox - SINGLEQ = / ' [^'\\]* (?: \\. [^'\\]* )* '? /ox - STRING = / #{SINGLEQ} | #{DOUBLEQ} /ox - SHELL = / ` [^`\#\\]* (?: (?: \#\{.*?\} | \#(?:$`)? | \\. ) [^`\#\\]* )* `? /ox - REGEXP = / \/ [^\/\#\\]* (?: (?: \#\{.*?\} | \#(?:$\/)? | \\. ) [^\/\#\\]* )* \/? /ox - - DECIMAL = /\d+(?:_\d+)*/ # doesn't recognize 09 as octal error - OCTAL = /0_?[0-7]+(?:_[0-7]+)*/ - HEXADECIMAL = /0x[0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*/ - BINARY = /0b[01]+(?:_[01]+)*/ - - EXPONENT = / [eE] [+-]? #{DECIMAL} /ox - FLOAT = / #{DECIMAL} (?: #{EXPONENT} | \. #{DECIMAL} #{EXPONENT}? ) / - INTEGER = /#{OCTAL}|#{HEXADECIMAL}|#{BINARY}|#{DECIMAL}/ - - def reset - super - @regexp_allowed = false - end - - def next_token - return if @scanner.eos? - - kind = :error - if @scanner.scan(/\s+/) # in every state - kind = :space - @regexp_allowed = :set if @regexp_allowed or @scanner.matched.index(?\n) # delayed flag setting - - elsif @state == :def_expected - if @scanner.scan(/ (?: (?:#{IDENT}(?:\.|::))* | (?:@@?|$)? #{IDENT}(?:\.|::) ) #{METHOD_NAME_EX} /ox) - kind = :method - @state = :initial - else - @scanner.getch - end - @state = :initial - - elsif @state == :module_expected - if @scanner.scan(/<#\\\\]*(?:(?:#\{.*?\}|#|\\\\.)[^>#\\\\]*)*>?|([^a-zA-Z\\\\])(?:(?!\1)[^#\\\\])*(?:(?:#\{.*?\}|#|\\\\.)(?:(?!\1)[^#\\\\])*)*\1?)|\([^)#\\\\]*(?:(?:#\{.*?\}|#|\\\\.)[^)#\\\\]*)*\)?|\[[^\]#\\\\]*(?:(?:#\{.*?\}|#|\\\\.)[^\]#\\\\]*)*\]?|\{[^}#\\\\]*(?:(?:#\{.*?\}|#|\\\\.)[^}#\\\\]*)*\}?|<[^>#\\\\]*(?:(?:#\{.*?\}|#|\\\\.)[^>#\\\\]*)*>?|([^a-zA-Z\s\\\\])(?:(?!\2)[^#\\\\])*(?:(?:#\{.*?\}|#|\\\\.)(?:(?!\2)[^#\\\\])*)*\2?|\\\\[^#\\\\]*(?:(?:#\{.*?\}|#)[^#\\\\]*)*\\\\?)/ - elsif @scanner.scan(/:(?:#{GLOBAL_VARIABLE}|#{METHOD_NAME_EX}|#{STRING})/ox) - kind = :symbol - elsif @scanner.scan(/ - \? (?: - [^\s\\] - | - \\ (?:M-\\C-|C-\\M-|M-\\c|c\\M-|c|C-|M-))? (?: \\ (?: . | [0-7]{3} | x[0-9A-Fa-f][0-9A-Fa-f] ) - ) - /mox) - kind = :integer - - elsif @scanner.scan(/ [-+*\/%=<>;,|&!()\[\]{}~?] | \.\.?\.? | ::? /x) - kind = :operator - @regexp_allowed = :set if @scanner.matched[-1,1] =~ /[~=!<>|&^,\(\[+\-\/\*%]\z/ - elsif @scanner.scan(FLOAT) - kind = :float - elsif @scanner.scan(INTEGER) - kind = :integer - else - @scanner.getch - end - end - - token = Token.new @scanner.matched, kind - - if kind == :regexp - token.text << @scanner.scan(/[eimnosux]*/) - end - - @regexp_allowed = (@regexp_allowed == :set) # delayed flag setting - - token - end -end - -register Ruby, 'ruby', 'rb' - - end -end -class Set - include Enumerable - - # Creates a new set containing the given objects. - def self.[](*ary) - new(ary) - end - - # Creates a new set containing the elements of the given enumerable - # object. - # - # If a block is given, the elements of enum are preprocessed by the - # given block. - def initialize(enum = nil, &block) # :yields: o - @hash ||= Hash.new - - enum.nil? and return - - if block - enum.each { |o| add(block[o]) } - else - merge(enum) - end - end - - # Copy internal hash. - def initialize_copy(orig) - @hash = orig.instance_eval{@hash}.dup - end - - # Returns the number of elements. - def size - @hash.size - end - alias length size - - # Returns true if the set contains no elements. - def empty? - @hash.empty? - end - - # Removes all elements and returns self. - def clear - @hash.clear - self - end - - # Replaces the contents of the set with the contents of the given - # enumerable object and returns self. - def replace(enum) - if enum.class == self.class - @hash.replace(enum.instance_eval { @hash }) - else - enum.is_a?(Enumerable) or raise ArgumentError, "value must be enumerable" - clear - enum.each { |o| add(o) } - end - - self - end - - # Converts the set to an array. The order of elements is uncertain. - def to_a - @hash.keys - end - - def flatten_merge(set, seen = Set.new) - set.each { |e| - if e.is_a?(Set) - if seen.include?(e_id = e.object_id) - raise ArgumentError, "tried to flatten recursive Set" - end - - seen.add(e_id) - flatten_merge(e, seen) - seen.delete(e_id) - else - add(e) - end - } - - self - end - protected :flatten_merge - - # Returns a new set that is a copy of the set, flattening each - # containing set recursively. - def flatten - self.class.new.flatten_merge(self) - end - - # Equivalent to Set#flatten, but replaces the receiver with the - # result in place. Returns nil if no modifications were made. - def flatten! - if detect { |e| e.is_a?(Set) } - replace(flatten()) - else - nil - end - end - - # Returns true if the set contains the given object. - def include?(o) - @hash.include?(o) - end - alias member? include? - - # Returns true if the set is a superset of the given set. - def superset?(set) - set.is_a?(Set) or raise ArgumentError, "value must be a set" - return false if size < set.size - set.all? { |o| include?(o) } - end - - # Returns true if the set is a proper superset of the given set. - def proper_superset?(set) - set.is_a?(Set) or raise ArgumentError, "value must be a set" - return false if size <= set.size - set.all? { |o| include?(o) } - end - - # Returns true if the set is a subset of the given set. - def subset?(set) - set.is_a?(Set) or raise ArgumentError, "value must be a set" - return false if set.size < size - all? { |o| set.include?(o) } - end - - # Returns true if the set is a proper subset of the given set. - def proper_subset?(set) - set.is_a?(Set) or raise ArgumentError, "value must be a set" - return false if set.size <= size - all? { |o| set.include?(o) } - end - - # Calls the given block once for each element in the set, passing - # the element as parameter. - def each - @hash.each_key { |o| yield(o) } - self - end - - # Adds the given object to the set and returns self. Use +merge+ to - # add several elements at once. - def add(o) - @hash[o] = true - self - end - alias << add - - # Adds the given object to the set and returns self. If the - # object is already in the set, returns nil. - def add?(o) - if include?(o) - nil - else - add(o) - end - end - - # Deletes the given object from the set and returns self. Use +subtract+ to - # delete several items at once. - def delete(o) - @hash.delete(o) - self - end - - # Deletes the given object from the set and returns self. If the - # object is not in the set, returns nil. - def delete?(o) - if include?(o) - delete(o) - else - nil - end - end - - # Deletes every element of the set for which block evaluates to - # true, and returns self. - def delete_if - @hash.delete_if { |o,| yield(o) } - self - end - - # Do collect() destructively. - def collect! - set = self.class.new - each { |o| set << yield(o) } - replace(set) - end - alias map! collect! - - # Equivalent to Set#delete_if, but returns nil if no changes were - # made. - def reject! - n = size - delete_if { |o| yield(o) } - size == n ? nil : self - end - - # Merges the elements of the given enumerable object to the set and - # returns self. - def merge(enum) - if enum.is_a?(Set) - @hash.update(enum.instance_eval { @hash }) - else - enum.is_a?(Enumerable) or raise ArgumentError, "value must be enumerable" - enum.each { |o| add(o) } - end - - self - end - - # Deletes every element that appears in the given enumerable object - # and returns self. - def subtract(enum) - enum.is_a?(Enumerable) or raise ArgumentError, "value must be enumerable" - enum.each { |o| delete(o) } - self - end - - # Returns a new set built by merging the set and the elements of the - # given enumerable object. - def |(enum) - enum.is_a?(Enumerable) or raise ArgumentError, "value must be enumerable" - dup.merge(enum) - end - alias + | ## - alias union | ## - - # Returns a new set built by duplicating the set, removing every - # element that appears in the given enumerable object. - def -(enum) - enum.is_a?(Enumerable) or raise ArgumentError, "value must be enumerable" - dup.subtract(enum) - end - alias difference - ## - - # Returns a new array containing elements common to the set and the - # given enumerable object. - def &(enum) - enum.is_a?(Enumerable) or raise ArgumentError, "value must be enumerable" - n = self.class.new - enum.each { |o| n.add(o) if include?(o) } - n - end - alias intersection & ## - - # Returns a new array containing elements exclusive between the set - # and the given enumerable object. (set ^ enum) is equivalent to - # ((set | enum) - (set & enum)). - def ^(enum) - enum.is_a?(Enumerable) or raise ArgumentError, "value must be enumerable" - n = dup - enum.each { |o| if n.include?(o) then n.delete(o) else n.add(o) end } - n - end - - # Returns true if two sets are equal. The equality of each couple - # of elements is defined according to Object#eql?. - def ==(set) - equal?(set) and return true - - set.is_a?(Set) && size == set.size or return false - - hash = @hash.dup - set.all? { |o| hash.include?(o) } - end - - def hash # :nodoc: - @hash.hash - end - - def eql?(o) # :nodoc: - return false unless o.is_a?(Set) - @hash.eql?(o.instance_eval{@hash}) - end - - # Classifies the set by the return value of the given block and - # returns a hash of {value => set of elements} pairs. The block is - # called once for each element of the set, passing the element as - # parameter. - # - # e.g.: - # - # require 'set' - # files = Set.new(Dir.glob("*.rb")) - # hash = files.classify { |f| File.mtime(f).year } - # p hash # => {2000=>#, - # # 2001=>#, - # # 2002=>#} - def classify # :yields: o - h = {} - - each { |i| - x = yield(i) - (h[x] ||= self.class.new).add(i) - } - - h - end - - # Divides the set into a set of subsets according to the commonality - # defined by the given block. - # - # If the arity of the block is 2, elements o1 and o2 are in common - # if block.call(o1, o2) is true. Otherwise, elements o1 and o2 are - # in common if block.call(o1) == block.call(o2). - # - # e.g.: - # - # require 'set' - # numbers = Set[1, 3, 4, 6, 9, 10, 11] - # set = numbers.divide { |i,j| (i - j).abs == 1 } - # p set # => #, - # # #, - # # #, - # # #}> - def divide(&func) - if func.arity == 2 - require 'tsort' - - class << dig = {} # :nodoc: - include TSort - - alias tsort_each_node each_key - def tsort_each_child(node, &block) - fetch(node).each(&block) - end - end - - each { |u| - dig[u] = a = [] - each{ |v| func.call(u, v) and a << v } - } - - set = Set.new() - dig.each_strongly_connected_component { |css| - set.add(self.class.new(css)) - } - set - else - Set.new(classify(&func).values) - end - end - - InspectKey = :__inspect_key__ # :nodoc: - - # Returns a string containing a human-readable representation of the - # set. ("#") - def inspect - ids = (Thread.current[InspectKey] ||= []) - - if ids.include?(object_id) - return sprintf('#<%s: {...}>', self.class.name) - end - - begin - ids << object_id - return sprintf('#<%s: {%s}>', self.class, to_a.inspect[1..-2]) - ensure - ids.pop - end - end - - def pretty_print(pp) # :nodoc: - pp.text sprintf('#<%s: {', self.class.name) - pp.nest(1) { - pp.seplist(self) { |o| - pp.pp o - } - } - pp.text "}>" - end - - def pretty_print_cycle(pp) # :nodoc: - pp.text sprintf('#<%s: {%s}>', self.class.name, empty? ? '' : '...') - end -end - -# SortedSet implements a set which elements are sorted in order. See Set. -class SortedSet < Set - @@setup = false - - class << self - def [](*ary) # :nodoc: - new(ary) - end - - def setup # :nodoc: - @@setup and return - - begin - require 'rbtree' - - module_eval %{ - def initialize(*args, &block) - @hash = RBTree.new - super - end - } - rescue LoadError - module_eval %{ - def initialize(*args, &block) - @keys = nil - super - end - - def clear - @keys = nil - super - end - - def replace(enum) - @keys = nil - super - end - - def add(o) - @keys = nil - @hash[o] = true - self - end - alias << add - - def delete(o) - @keys = nil - @hash.delete(o) - self - end - - def delete_if - n = @hash.size - @hash.delete_if { |o,| yield(o) } - @keys = nil if @hash.size != n - self - end - - def merge(enum) - @keys = nil - super - end - - def each - to_a.each { |o| yield(o) } - end - - def to_a - (@keys = @hash.keys).sort! unless @keys - @keys - end - } - end - - @@setup = true - end - end - - def initialize(*args, &block) # :nodoc: - SortedSet.setup - initialize(*args, &block) - end -end - -module Enumerable - # Makes a set from the enumerable object with given arguments. - def to_set(klass = Set, *args, &block) - klass.new(self, *args, &block) - end -end - -# =begin -# == RestricedSet class -# RestricedSet implements a set with restrictions defined by a given -# block. -# -# === Super class -# Set -# -# === Class Methods -# --- RestricedSet::new(enum = nil) { |o| ... } -# --- RestricedSet::new(enum = nil) { |rset, o| ... } -# Creates a new restricted set containing the elements of the given -# enumerable object. Restrictions are defined by the given block. -# -# If the block's arity is 2, it is called with the RestrictedSet -# itself and an object to see if the object is allowed to be put in -# the set. -# -# Otherwise, the block is called with an object to see if the object -# is allowed to be put in the set. -# -# === Instance Methods -# --- restriction_proc -# Returns the restriction procedure of the set. -# -# =end -# -# class RestricedSet < Set -# def initialize(*args, &block) -# @proc = block or raise ArgumentError, "missing a block" -# -# if @proc.arity == 2 -# instance_eval %{ -# def add(o) -# @hash[o] = true if @proc.call(self, o) -# self -# end -# alias << add -# -# def add?(o) -# if include?(o) || !@proc.call(self, o) -# nil -# else -# @hash[o] = true -# self -# end -# end -# -# def replace(enum) -# enum.is_a?(Enumerable) or raise ArgumentError, "value must be enumerable" -# clear -# enum.each { |o| add(o) } -# -# self -# end -# -# def merge(enum) -# enum.is_a?(Enumerable) or raise ArgumentError, "value must be enumerable" -# enum.each { |o| add(o) } -# -# self -# end -# } -# else -# instance_eval %{ -# def add(o) -# if @proc.call(o) -# @hash[o] = true -# end -# self -# end -# alias << add -# -# def add?(o) -# if include?(o) || !@proc.call(o) -# nil -# else -# @hash[o] = true -# self -# end -# end -# } -# end -# -# super(*args) -# end -# -# def restriction_proc -# @proc -# end -# end - -if $0 == __FILE__ - eval DATA.read, nil, $0, __LINE__+4 -end - -# = rweb - CGI Support Library -# -# Author:: Johannes Barre (mailto:rweb@igels.net) -# Copyright:: Copyright (c) 2003, 04 by Johannes Barre -# License:: GNU Lesser General Public License (COPYING, http://www.gnu.org/copyleft/lesser.html) -# Version:: 0.1.0 -# CVS-ID:: $Id: example.rb 39 2005-11-05 03:33:55Z murphy $ -# -# == What is Rweb? -# Rweb is a replacement for the cgi class included in the ruby distribution. -# -# == How to use -# -# === Basics -# -# This class is made to be as easy as possible to use. An example: -# -# require "rweb" -# -# web = Rweb.new -# web.out do -# web.puts "Hello world!" -# end -# -# The visitor will get a simple "Hello World!" in his browser. Please notice, -# that won't set html-tags for you, so you should better do something like this: -# -# require "rweb" -# -# web = Rweb.new -# web.out do -# web.puts "Hello world!" -# end -# -# === Set headers -# Of course, it's also possible to tell the browser, that the content of this -# page is plain text instead of html code: -# -# require "rweb" -# -# web = Rweb.new -# web.out do -# web.header("content-type: text/plain") -# web.puts "Hello plain world!" -# end -# -# Please remember, headers can't be set after the page content has been send. -# You have to set all nessessary headers before the first puts oder print. It's -# possible to cache the content until everything is complete. Doing it this -# way, you can set headers everywhere. -# -# If you set a header twice, the second header will replace the first one. The -# header name is not casesensitive, it will allways converted in to the -# capitalised form suggested by the w3c (http://w3.org) -# -# === Set cookies -# Setting cookies is quite easy: -# include 'rweb' -# -# web = Rweb.new -# Cookie.new("Visits", web.cookies['visits'].to_i +1) -# web.out do -# web.puts "Welcome back! You visited this page #{web.cookies['visits'].to_i +1} times" -# end -# -# See the class Cookie for more details. -# -# === Get form and cookie values -# There are four ways to submit data from the browser to the server and your -# ruby script: via GET, POST, cookies and file upload. Rweb doesn't support -# file upload by now. -# -# include 'rweb' -# -# web = Rweb.new -# web.out do -# web.print "action: #{web.get['action']} " -# web.puts "The value of the cookie 'visits' is #{web.cookies['visits']}" -# web.puts "The post parameter 'test['x']' is #{web.post['test']['x']}" -# end - -RWEB_VERSION = "0.1.0" -RWEB = "rweb/#{RWEB_VERSION}" - -#require 'rwebcookie' -> edit by bunny :-) - -class Rweb - # All parameter submitted via the GET method are available in attribute - # get. This is Hash, where every parameter is available as a key-value - # pair. - # - # If your input tag has a name like this one, it's value will be available - # as web.get["fieldname"] - # - # You can submit values as a Hash - # - # - # will be available as - # web.get["text"]["index"] - # web.get["text"]["index2"] - # Integers are also possible - # - # - # - # will be available as - # web.get["int"][0] # First Field - # web.get["int"][1] # Second one - # Please notice, this doesn'd work like you might expect: - # - # It will not be available as web.get["text"]["index"] but - # web.get["text[index]"] - attr_reader :get - - # All parameters submitted via POST are available in the attribute post. It - # works like the get attribute. - # - # will be available as - # web.post["text"][0] - attr_reader :post - - # All cookies submitted by the browser are available in cookies. This is a - # Hash, where every cookie is a key-value pair. - attr_reader :cookies - - # The name of the browser identification is submitted as USER_AGENT and - # available in this attribute. - attr_reader :user_agent - - # The IP address of the client. - attr_reader :remote_addr - - # Creates a new Rweb object. This should only done once. You can set various - # options via the settings hash. - # - # "cache" => true: Everything you script send to the client will be cached - # until the end of the out block or until flush is called. This way, you - # can modify headers and cookies even after printing something to the client. - # - # "safe" => level: Changes the $SAFE attribute. By default, $SAFE will be set - # to 1. If $SAFE is already higher than this value, it won't be changed. - # - # "silend" => true: Normaly, Rweb adds automaticly a header like this - # "X-Powered-By: Rweb/x.x.x (Ruby/y.y.y)". With the silend option you can - # suppress this. - def initialize (settings = {}) - # {{{ - @header = {} - @cookies = {} - @get = {} - @post = {} - - # Internal attributes - @status = nil - @reasonPhrase = nil - @setcookies = [] - @output_started = false; - @output_allowed = false; - - @mod_ruby = false - @env = ENV.to_hash - - if defined?(MOD_RUBY) - @output_method = "mod_ruby" - @mod_ruby = true - elsif @env['SERVER_SOFTWARE'] =~ /^Microsoft-IIS/i - @output_method = "nph" - else - @output_method = "ph" - end - - unless settings.is_a?(Hash) - raise TypeError, "settings must be a Hash" - end - @settings = settings - - unless @settings.has_key?("safe") - @settings["safe"] = 1 - end - - if $SAFE < @settings["safe"] - $SAFE = @settings["safe"] - end - - unless @settings.has_key?("cache") - @settings["cache"] = false - end - - # mod_ruby sets no QUERY_STRING variable, if no GET-Parameters are given - unless @env.has_key?("QUERY_STRING") - @env["QUERY_STRING"] = "" - end - - # Now we split the QUERY_STRING by the seperators & and ; or, if - # specified, settings['get seperator'] - unless @settings.has_key?("get seperator") - get_args = @env['QUERY_STRING'].split(/[&;]/) - else - get_args = @env['QUERY_STRING'].split(@settings['get seperator']) - end - - get_args.each do | arg | - arg_key, arg_val = arg.split(/=/, 2) - arg_key = Rweb::unescape(arg_key) - arg_val = Rweb::unescape(arg_val) - - # Parse names like name[0], name['text'] or name[] - pattern = /^(.+)\[("[^\]]*"|'[^\]]*'|[0-9]*)\]$/ - keys = [] - while match = pattern.match(arg_key) - arg_key = match[1] - keys = [match[2]] + keys - end - keys = [arg_key] + keys - - akt = @get - last = nil - lastkey = nil - keys.each do |key| - if key == "" - # No key specified (like in "test[]"), so we use the - # lowerst unused Integer as key - key = 0 - while akt.has_key?(key) - key += 1 - end - elsif /^[0-9]*$/ =~ key - # If the index is numerical convert it to an Integer - key = key.to_i - elsif key[0].chr == "'" || key[0].chr == '"' - key = key[1, key.length() -2] - end - if !akt.has_key?(key) || !akt[key].class == Hash - # create an empty Hash if there isn't already one - akt[key] = {} - end - last = akt - lastkey = key - akt = akt[key] - end - last[lastkey] = arg_val - end - - if @env['REQUEST_METHOD'] == "POST" - if @env.has_key?("CONTENT_TYPE") && @env['CONTENT_TYPE'] == "application/x-www-form-urlencoded" && @env.has_key?('CONTENT_LENGTH') - unless @settings.has_key?("post seperator") - post_args = $stdin.read(@env['CONTENT_LENGTH'].to_i).split(/[&;]/) - else - post_args = $stdin.read(@env['CONTENT_LENGTH'].to_i).split(@settings['post seperator']) - end - post_args.each do | arg | - arg_key, arg_val = arg.split(/=/, 2) - arg_key = Rweb::unescape(arg_key) - arg_val = Rweb::unescape(arg_val) - - # Parse names like name[0], name['text'] or name[] - pattern = /^(.+)\[("[^\]]*"|'[^\]]*'|[0-9]*)\]$/ - keys = [] - while match = pattern.match(arg_key) - arg_key = match[1] - keys = [match[2]] + keys - end - keys = [arg_key] + keys - - akt = @post - last = nil - lastkey = nil - keys.each do |key| - if key == "" - # No key specified (like in "test[]"), so we use - # the lowerst unused Integer as key - key = 0 - while akt.has_key?(key) - key += 1 - end - elsif /^[0-9]*$/ =~ key - # If the index is numerical convert it to an Integer - key = key.to_i - elsif key[0].chr == "'" || key[0].chr == '"' - key = key[1, key.length() -2] - end - if !akt.has_key?(key) || !akt[key].class == Hash - # create an empty Hash if there isn't already one - akt[key] = {} - end - last = akt - lastkey = key - akt = akt[key] - end - last[lastkey] = arg_val - end - else - # Maybe we should print a warning here? - $stderr.print("Unidentified form data recived and discarded.") - end - end - - if @env.has_key?("HTTP_COOKIE") - cookie = @env['HTTP_COOKIE'].split(/; ?/) - cookie.each do | c | - cookie_key, cookie_val = c.split(/=/, 2) - - @cookies [Rweb::unescape(cookie_key)] = Rweb::unescape(cookie_val) - end - end - - if defined?(@env['HTTP_USER_AGENT']) - @user_agent = @env['HTTP_USER_AGENT'] - else - @user_agent = nil; - end - - if defined?(@env['REMOTE_ADDR']) - @remote_addr = @env['REMOTE_ADDR'] - else - @remote_addr = nil - end - # }}} - end - - # Prints a String to the client. If caching is enabled, the String will - # buffered until the end of the out block ends. - def print(str = "") - # {{{ - unless @output_allowed - raise "You just can write to output inside of a Rweb::out-block" - end - - if @settings["cache"] - @buffer += [str.to_s] - else - unless @output_started - sendHeaders - end - $stdout.print(str) - end - nil - # }}} - end - - # Prints a String to the client and adds a line break at the end. Please - # remember, that a line break is not visible in HTML, use the
HTML-Tag - # for this. If caching is enabled, the String will buffered until the end - # of the out block ends. - def puts(str = "") - # {{{ - self.print(str + "\n") - # }}} - end - - # Alias to print. - def write(str = "") - # {{{ - self.print(str) - # }}} - end - - # If caching is enabled, all cached data are send to the cliend and the - # cache emptied. - def flush - # {{{ - unless @output_allowed - raise "You can't use flush outside of a Rweb::out-block" - end - buffer = @buffer.join - - unless @output_started - sendHeaders - end - $stdout.print(buffer) - - @buffer = [] - # }}} - end - - # Sends one or more header to the client. All headers are cached just - # before body data are send to the client. If the same header are set - # twice, only the last value is send. - # - # Example: - # web.header("Last-Modified: Mon, 16 Feb 2004 20:15:41 GMT") - # web.header("Location: http://www.ruby-lang.org") - # - # You can specify more than one header at the time by doing something like - # this: - # web.header("Content-Type: text/plain\nContent-Length: 383") - # or - # web.header(["Content-Type: text/plain", "Content-Length: 383"]) - def header(str) - # {{{ - if @output_started - raise "HTTP-Headers are already send. You can't change them after output has started!" - end - unless @output_allowed - raise "You just can set headers inside of a Rweb::out-block" - end - if str.is_a?Array - str.each do | value | - self.header(value) - end - - elsif str.split(/\n/).length > 1 - str.split(/\n/).each do | value | - self.header(value) - end - - elsif str.is_a? String - str.gsub!(/\r/, "") - - if (str =~ /^HTTP\/1\.[01] [0-9]{3} ?.*$/) == 0 - pattern = /^HTTP\/1.[01] ([0-9]{3}) ?(.*)$/ - - result = pattern.match(str) - self.setstatus(result[0], result[1]) - elsif (str =~ /^status: [0-9]{3} ?.*$/i) == 0 - pattern = /^status: ([0-9]{3}) ?(.*)$/i - - result = pattern.match(str) - self.setstatus(result[0], result[1]) - else - a = str.split(/: ?/, 2) - - @header[a[0].downcase] = a[1] - end - end - # }}} - end - - # Changes the status of this page. There are several codes like "200 OK", - # "302 Found", "404 Not Found" or "500 Internal Server Error". A list of - # all codes is available at - # http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10 - # - # You can just send the code number, the reason phrase will be added - # automaticly with the recommendations from the w3c if not specified. If - # you set the status twice or more, only the last status will be send. - # Examples: - # web.status("401 Unauthorized") - # web.status("410 Sad but true, this lonely page is gone :(") - # web.status(206) - # web.status("400") - # - # The default status is "200 OK". If a "Location" header is set, the - # default status is "302 Found". - def status(str) - # {{{ - if @output_started - raise "HTTP-Headers are already send. You can't change them after output has started!" - end - unless @output_allowed - raise "You just can set headers inside of a Rweb::out-block" - end - if str.is_a?Integer - @status = str - elsif str.is_a?String - p1 = /^([0-9]{3}) ?(.*)$/ - p2 = /^HTTP\/1\.[01] ([0-9]{3}) ?(.*)$/ - p3 = /^status: ([0-9]{3}) ?(.*)$/i - - if (a = p1.match(str)) == nil - if (a = p2.match(str)) == nil - if (a = p3.match(str)) == nil - raise ArgumentError, "Invalid argument", caller - end - end - end - @status = a[1].to_i - if a[2] != "" - @reasonPhrase = a[2] - else - @reasonPhrase = getReasonPhrase(@status) - end - else - raise ArgumentError, "Argument of setstatus must be integer or string", caller - end - # }}} - end - - # Handles the output of your content and rescues all exceptions. Send all - # data in the block to this method. For example: - # web.out do - # web.header("Content-Type: text/plain") - # web.puts("Hello, plain world!") - # end - def out - # {{{ - @output_allowed = true - @buffer = []; # We use an array as buffer, because it's more performant :) - - begin - yield - rescue Exception => exception - $stderr.puts "Ruby exception rescued (#{exception.class}): #{exception.message}" - $stderr.puts exception.backtrace.join("\n") - - unless @output_started - self.setstatus(500) - @header = {} - end - - unless (@settings.has_key?("hide errors") and @settings["hide errors"] == true) - unless @output_started - self.header("Content-Type: text/html") - self.puts "" - self.puts "" - self.puts "" - self.puts "500 Internal Server Error" - self.puts "" - self.puts "" - end - if @header.has_key?("content-type") and (@header["content-type"] =~ /^text\/html/i) == 0 - self.puts "

Internal Server Error

" - self.puts "

The server encountered an exception and was unable to complete your request.

" - self.puts "

The exception has provided the following information:

" - self.puts "
#{exception.class}: #{exception.message} on"
-                    self.puts
-                    self.puts "#{exception.backtrace.join("\n")}
" - self.puts "" - self.puts "" - else - self.puts "The server encountered an exception and was unable to complete your request" - self.puts "The exception has provided the following information:" - self.puts "#{exception.class}: #{exception.message}" - self.puts - self.puts exception.backtrace.join("\n") - end - end - end - - if @settings["cache"] - buffer = @buffer.join - - unless @output_started - unless @header.has_key?("content-length") - self.header("content-length: #{buffer.length}") - end - - sendHeaders - end - $stdout.print(buffer) - elsif !@output_started - sendHeaders - end - @output_allowed = false; - # }}} - end - - # Decodes URL encoded data, %20 for example stands for a space. - def Rweb.unescape(str) - # {{{ - if defined? str and str.is_a? String - str.gsub!(/\+/, " ") - str.gsub(/%.{2}/) do | s | - s[1,2].hex.chr - end - end - # }}} - end - - protected - def sendHeaders - # {{{ - - Cookie.disallow # no more cookies can be set or modified - if !(@settings.has_key?("silent") and @settings["silent"] == true) and !@header.has_key?("x-powered-by") - if @mod_ruby - header("x-powered-by: #{RWEB} (Ruby/#{RUBY_VERSION}, #{MOD_RUBY})"); - else - header("x-powered-by: #{RWEB} (Ruby/#{RUBY_VERSION})"); - end - end - - if @output_method == "ph" - if ((@status == nil or @status == 200) and !@header.has_key?("content-type") and !@header.has_key?("location")) - header("content-type: text/html") - end - - if @status != nil - $stdout.print "Status: #{@status} #{@reasonPhrase}\r\n" - end - - @header.each do |key, value| - key = key *1 # "unfreeze" key :) - key[0] = key[0,1].upcase![0] - - key = key.gsub(/-[a-z]/) do |char| - "-" + char[1,1].upcase - end - - $stdout.print "#{key}: #{value}\r\n" - end - cookies = Cookie.getHttpHeader # Get all cookies as an HTTP Header - if cookies - $stdout.print cookies - end - - $stdout.print "\r\n" - - elsif @output_method == "nph" - elsif @output_method == "mod_ruby" - r = Apache.request - - if ((@status == nil or @status == 200) and !@header.has_key?("content-type") and !@header.has_key?("location")) - header("text/html") - end - - if @status != nil - r.status_line = "#{@status} #{@reasonPhrase}" - end - - r.send_http_header - @header.each do |key, value| - key = key *1 # "unfreeze" key :) - - key[0] = key[0,1].upcase![0] - key = key.gsub(/-[a-z]/) do |char| - "-" + char[1,1].upcase - end - puts "#{key}: #{value.class}" - #r.headers_out[key] = value - end - end - @output_started = true - # }}} - end - - def getReasonPhrase (status) - # {{{ - if status == 100 - "Continue" - elsif status == 101 - "Switching Protocols" - elsif status == 200 - "OK" - elsif status == 201 - "Created" - elsif status == 202 - "Accepted" - elsif status == 203 - "Non-Authoritative Information" - elsif status == 204 - "No Content" - elsif status == 205 - "Reset Content" - elsif status == 206 - "Partial Content" - elsif status == 300 - "Multiple Choices" - elsif status == 301 - "Moved Permanently" - elsif status == 302 - "Found" - elsif status == 303 - "See Other" - elsif status == 304 - "Not Modified" - elsif status == 305 - "Use Proxy" - elsif status == 307 - "Temporary Redirect" - elsif status == 400 - "Bad Request" - elsif status == 401 - "Unauthorized" - elsif status == 402 - "Payment Required" - elsif status == 403 - "Forbidden" - elsif status == 404 - "Not Found" - elsif status == 405 - "Method Not Allowed" - elsif status == 406 - "Not Acceptable" - elsif status == 407 - "Proxy Authentication Required" - elsif status == 408 - "Request Time-out" - elsif status == 409 - "Conflict" - elsif status == 410 - "Gone" - elsif status == 411 - "Length Required" - elsif status == 412 - "Precondition Failed" - elsif status == 413 - "Request Entity Too Large" - elsif status == 414 - "Request-URI Too Large" - elsif status == 415 - "Unsupported Media Type" - elsif status == 416 - "Requested range not satisfiable" - elsif status == 417 - "Expectation Failed" - elsif status == 500 - "Internal Server Error" - elsif status == 501 - "Not Implemented" - elsif status == 502 - "Bad Gateway" - elsif status == 503 - "Service Unavailable" - elsif status == 504 - "Gateway Time-out" - elsif status == 505 - "HTTP Version not supported" - else - raise "Unknown Statuscode. See http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1 for more information." - end - # }}} - end -end - -class Cookie - attr_reader :name, :value, :maxage, :path, :domain, :secure, :comment - - # Sets a cookie. Please see below for details of the attributes. - def initialize (name, value = nil, maxage = nil, path = nil, domain = nil, secure = false) - # {{{ - # HTTP headers (Cookies are a HTTP header) can only set, while no content - # is send. So an exception will be raised, when @@allowed is set to false - # and a new cookie has set. - unless defined?(@@allowed) - @@allowed = true - end - unless @@allowed - raise "You can't set cookies after the HTTP headers are send." - end - - unless defined?(@@list) - @@list = [] - end - @@list += [self] - - unless defined?(@@type) - @@type = "netscape" - end - - unless name.class == String - raise TypeError, "The name of a cookie must be a string", caller - end - if value.class.superclass == Integer || value.class == Float - value = value.to_s - elsif value.class != String && value != nil - raise TypeError, "The value of a cookie must be a string, integer, float or nil", caller - end - if maxage.class == Time - maxage = maxage - Time.now - elsif !maxage.class.superclass == Integer || !maxage == nil - raise TypeError, "The maxage date of a cookie must be an Integer or Time object or nil.", caller - end - unless path.class == String || path == nil - raise TypeError, "The path of a cookie must be nil or a string", caller - end - unless domain.class == String || domain == nil - raise TypeError, "The value of a cookie must be nil or a string", caller - end - unless secure == true || secure == false - raise TypeError, "The secure field of a cookie must be true or false", caller - end - - @name, @value, @maxage, @path, @domain, @secure = name, value, maxage, path, domain, secure - @comment = nil - # }}} - end - - # Modifies the value of this cookie. The information you want to store. If the - # value is nil, the cookie will be deleted by the client. - # - # This attribute can be a String, Integer or Float object or nil. - def value=(value) - # {{{ - if value.class.superclass == Integer || value.class == Float - value = value.to_s - elsif value.class != String && value != nil - raise TypeError, "The value of a cookie must be a string, integer, float or nil", caller - end - @value = value - # }}} - end - - # Modifies the maxage of this cookie. This attribute defines the lifetime of - # the cookie, in seconds. A value of 0 means the cookie should be discarded - # imediatly. If it set to nil, the cookie will be deleted when the browser - # will be closed. - # - # Attention: This is different from other implementations like PHP, where you - # gives the seconds since 1/1/1970 0:00:00 GMT. - # - # This attribute must be an Integer or Time object or nil. - def maxage=(maxage) - # {{{ - if maxage.class == Time - maxage = maxage - Time.now - elsif maxage.class.superclass == Integer || !maxage == nil - raise TypeError, "The maxage of a cookie must be an Interger or Time object or nil.", caller - end - @maxage = maxage - # }}} - end - - # Modifies the path value of this cookie. The client will send this cookie - # only, if the requested document is this directory or a subdirectory of it. - # - # The value of the attribute must be a String object or nil. - def path=(path) - # {{{ - unless path.class == String || path == nil - raise TypeError, "The path of a cookie must be nil or a string", caller - end - @path = path - # }}} - end - - # Modifies the domain value of this cookie. The client will send this cookie - # only if it's connected with this domain (or a subdomain, if the first - # character is a dot like in ".ruby-lang.org") - # - # The value of this attribute must be a String or nil. - def domain=(domain) - # {{{ - unless domain.class == String || domain == nil - raise TypeError, "The domain of a cookie must be a String or nil.", caller - end - @domain = domain - # }}} - end - - # Modifies the secure flag of this cookie. If it's true, the client will only - # send this cookie if it is secured connected with us. - # - # The value od this attribute has to be true or false. - def secure=(secure) - # {{{ - unless secure == true || secure == false - raise TypeError, "The secure field of a cookie must be true or false", caller - end - @secure = secure - # }}} - end - - # Modifies the comment value of this cookie. The comment won't be send, if - # type is "netscape". - def comment=(comment) - # {{{ - unless comment.class == String || comment == nil - raise TypeError, "The comment of a cookie must be a string or nil", caller - end - @comment = comment - # }}} - end - - # Changes the type of all cookies. - # Allowed values are RFC2109 and netscape (default). - def Cookie.type=(type) - # {{{ - unless @@allowed - raise "The cookies are allready send, so you can't change the type anymore." - end - unless type.downcase == "rfc2109" && type.downcase == "netscape" - raise "The type of the cookies must be \"RFC2109\" or \"netscape\"." - end - @@type = type; - # }}} - end - - # After sending this message, no cookies can be set or modified. Use it, when - # HTTP-Headers are send. Rweb does this for you. - def Cookie.disallow - # {{{ - @@allowed = false - true - # }}} - end - - # Returns a HTTP header (type String) with all cookies. Rweb does this for - # you. - def Cookie.getHttpHeader - # {{{ - if defined?(@@list) - if @@type == "netscape" - str = "" - @@list.each do |cookie| - if cookie.value == nil - cookie.maxage = 0 - cookie.value = "" - end - # TODO: Name and value should be escaped! - str += "Set-Cookie: #{cookie.name}=#{cookie.value}" - unless cookie.maxage == nil - expire = Time.now + cookie.maxage - expire.gmtime - str += "; Expire=#{expire.strftime("%a, %d-%b-%Y %H:%M:%S %Z")}" - end - unless cookie.domain == nil - str += "; Domain=#{cookie.domain}" - end - unless cookie.path == nil - str += "; Path=#{cookie.path}" - end - if cookie.secure - str += "; Secure" - end - str += "\r\n" - end - return str - else # type == "RFC2109" - str = "Set-Cookie: " - comma = false; - - @@list.each do |cookie| - if cookie.value == nil - cookie.maxage = 0 - cookie.value = "" - end - if comma - str += "," - end - comma = true - - str += "#{cookie.name}=\"#{cookie.value}\"" - unless cookie.maxage == nil - str += "; Max-Age=\"#{cookie.maxage}\"" - end - unless cookie.domain == nil - str += "; Domain=\"#{cookie.domain}\"" - end - unless cookie.path == nil - str += "; Path=\"#{cookie.path}\"" - end - if cookie.secure - str += "; Secure" - end - unless cookie.comment == nil - str += "; Comment=\"#{cookie.comment}\"" - end - str += "; Version=\"1\"" - end - str - end - else - false - end - # }}} - end -end - -require 'strscan' - -module BBCode - DEBUG = true - - use 'encoder', 'tags', 'tagstack', 'smileys' - -=begin - The Parser class takes care of the encoding. - It scans the given BBCode (as plain text), finds tags - and smilies and also makes links of urls in text. - - Normal text is send directly to the encoder. - - If a tag was found, an instance of a Tag subclass is created - to handle the case. - - The @tagstack manages tag nesting and ensures valid HTML. -=end - - class Parser - class Attribute - # flatten and use only one empty_arg - def self.create attr - attr = flatten attr - return @@empty_attr if attr.empty? - new attr - end - - private_class_method :new - - # remove leading and trailing whitespace; concat lines - def self.flatten attr - attr.strip.gsub(/\n/, ' ') - # -> ^ and $ can only match at begin and end now - end - - ATTRIBUTE_SCAN = / - (?!$) # don't match at end - \s* - ( # $1 = key - [^=\s\]"\\]* - (?: - (?: \\. | "[^"\\]*(?:\\.[^"\\]*)*"? ) - [^=\s\]"\\]* - )* - ) - (?: - = - ( # $2 = value - [^\s\]"\\]* - (?: - (?: \\. | "[^"\\]*(?:\\.[^"\\]*)*"? ) - [^\s\]"\\]* - )* - )? - )? - \s* - /x - - def self.parse source - source = source.dup - # empty_tag: the tag looks like [... /] - # slice!: this deletes the \s*/] at the end - # \s+ because [url=http://rubybb.org/forum/] is NOT an empty tag. - # In RubyBBCode, you can use [url=http://rubybb.org/forum/ /], and this has to be - # interpreted correctly. - empty_tag = source.sub!(/^:/, '=') or source.slice!(/\/$/) - debug 'PARSE: ' + source.inspect + ' => ' + empty_tag.inspect - #-> we have now an attr that's EITHER empty OR begins and ends with non-whitespace. - - attr = Hash.new - attr[:flags] = [] - source.scan(ATTRIBUTE_SCAN) { |key, value| - if not value - attr[:flags] << unescape(key) - else - next if value.empty? and key.empty? - attr[unescape(key)] = unescape(value) - end - } - debug attr.inspect - - return empty_tag, attr - end - - def self.unescape_char esc - esc[1] - end - - def self.unquote qt - qt[1..-1].chomp('"').gsub(/\\./) { |esc| unescape_char esc } - end - - def self.unescape str - str.gsub(/ (\\.) | (" [^"\\]* (?:\\.[^"\\]*)* "?) /x) { - if $1 - unescape_char $1 - else - unquote $2 - end - } - end - - include Enumerable - def each &block - @args.each(&block) - end - - attr_reader :source, :args, :value - - def initialize source - @source = source - debug 'Attribute#new(%p)' % source - @empty_tag, @attr = Attribute.parse source - @value = @attr[''].to_s - end - - def empty? - self == @@empty_attr - end - - def empty_tag? - @empty_tag - end - - def [] *keys - res = @attr[*keys] - end - - def flags - attr[:flags] - end - - def to_s - @attr - end - - def inspect - 'ATTR[' + @attr.inspect + (@empty_tag ? ' | empty tag' : '') + ']' - end - end - class Attribute - @@empty_attr = new '' - end - end - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.red b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.red deleted file mode 100644 index 37c17ef..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.red +++ /dev/null @@ -1,257 +0,0 @@ -Red [ - Title: "Red console" - Author: ["Nenad Rakocevic" "Kaj de Vos"] - File: %console.red - Tabs: 4 - Rights: "Copyright (C) 2012-2013 Nenad Rakocevic. All rights reserved." - License: { - Distributed under the Boost Software License, Version 1.0. - See https://github.com/dockimbel/Red/blob/master/BSL-License.txt - } - Purpose: "Just some code for testing Pygments colorizer" - Language: http://www.red-lang.org/ -] - -#system-global [ - #either OS = 'Windows [ - #import [ - "kernel32.dll" stdcall [ - AttachConsole: "AttachConsole" [ - processID [integer!] - return: [integer!] - ] - SetConsoleTitle: "SetConsoleTitleA" [ - title [c-string!] - return: [integer!] - ] - ReadConsole: "ReadConsoleA" [ - consoleInput [integer!] - buffer [byte-ptr!] - charsToRead [integer!] - numberOfChars [int-ptr!] - inputControl [int-ptr!] - return: [integer!] - ] - ] - ] - line-buffer-size: 16 * 1024 - line-buffer: allocate line-buffer-size - ][ - #switch OS [ - MacOSX [ - #define ReadLine-library "libreadline.dylib" - ] - #default [ - #define ReadLine-library "libreadline.so.6" - #define History-library "libhistory.so.6" - ] - ] - #import [ - ReadLine-library cdecl [ - read-line: "readline" [ ; Read a line from the console. - prompt [c-string!] - return: [c-string!] - ] - rl-bind-key: "rl_bind_key" [ - key [integer!] - command [integer!] - return: [integer!] - ] - rl-insert: "rl_insert" [ - count [integer!] - key [integer!] - return: [integer!] - ] - ] - #if OS <> 'MacOSX [ - History-library cdecl [ - add-history: "add_history" [ ; Add line to the history. - line [c-string!] - ] - ] - ] - ] - - rl-insert-wrapper: func [ - [cdecl] - count [integer!] - key [integer!] - return: [integer!] - ][ - rl-insert count key - ] - - ] -] - -Windows?: system/platform = 'Windows - -read-argument: routine [ - /local - args [str-array!] - str [red-string!] -][ - if system/args-count <> 2 [ - SET_RETURN(none-value) - exit - ] - args: system/args-list + 1 ;-- skip binary filename - str: simple-io/read-txt args/item - SET_RETURN(str) -] - -init-console: routine [ - str [string!] - /local - ret -][ - #either OS = 'Windows [ - ;ret: AttachConsole -1 - ;if zero? ret [print-line "ReadConsole failed!" halt] - - ret: SetConsoleTitle as c-string! string/rs-head str - if zero? ret [print-line "SetConsoleTitle failed!" halt] - ][ - rl-bind-key as-integer tab as-integer :rl-insert-wrapper - ] -] - -input: routine [ - prompt [string!] - /local - len ret str buffer line -][ - #either OS = 'Windows [ - len: 0 - print as c-string! string/rs-head prompt - ret: ReadConsole stdin line-buffer line-buffer-size :len null - if zero? ret [print-line "ReadConsole failed!" halt] - len: len + 1 - line-buffer/len: null-byte - str: string/load as c-string! line-buffer len - ][ - line: read-line as c-string! string/rs-head prompt - if line = null [halt] ; EOF - - #if OS <> 'MacOSX [add-history line] - - str: string/load line 1 + length? line -; free as byte-ptr! line - ] - SET_RETURN(str) -] - -count-delimiters: function [ - buffer [string!] - return: [block!] -][ - list: copy [0 0] - c: none - - foreach c buffer [ - case [ - escaped? [ - escaped?: no - ] - in-comment? [ - switch c [ - #"^/" [in-comment?: no] - ] - ] - 'else [ - switch c [ - #"^^" [escaped?: yes] - #";" [if zero? list/2 [in-comment?: yes]] - #"[" [list/1: list/1 + 1] - #"]" [list/1: list/1 - 1] - #"{" [list/2: list/2 + 1] - #"}" [list/2: list/2 - 1] - ] - ] - ] - ] - list -] - -do-console: function [][ - buffer: make string! 10000 - prompt: red-prompt: "red>> " - mode: 'mono - - switch-mode: [ - mode: case [ - cnt/1 > 0 ['block] - cnt/2 > 0 ['string] - 'else [ - prompt: red-prompt - do eval - 'mono - ] - ] - prompt: switch mode [ - block ["[^-"] - string ["{^-"] - mono [red-prompt] - ] - ] - - eval: [ - code: load/all buffer - - unless tail? code [ - set/any 'result do code - - unless unset? :result [ - if 67 = length? result: mold/part :result 67 [ ;-- optimized for width = 72 - clear back tail result - append result "..." - ] - print ["==" result] - ] - ] - clear buffer - ] - - while [true][ - unless tail? line: input prompt [ - append buffer line - cnt: count-delimiters buffer - - either Windows? [ - remove skip tail buffer -2 ;-- clear extra CR (Windows) - ][ - append buffer lf ;-- Unix - ] - - switch mode [ - block [if cnt/1 <= 0 [do switch-mode]] - string [if cnt/2 <= 0 [do switch-mode]] - mono [do either any [cnt/1 > 0 cnt/2 > 0][switch-mode][eval]] - ] - ] - ] -] - -q: :quit - -if script: read-argument [ - script: load script - either any [ - script/1 <> 'Red - not block? script/2 - ][ - print "*** Error: not a Red program!" - ][ - do skip script 2 - ] - quit -] - -init-console "Red Console" - -print { --=== Red Console alpha version ===- -(only ASCII input supported) -} - -do-console \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.reds b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.reds deleted file mode 100644 index eb92310..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.reds +++ /dev/null @@ -1,150 +0,0 @@ -Red/System [ - Title: "Red/System example file" - Purpose: "Just some code for testing Pygments colorizer" - Language: http://www.red-lang.org/ -] - -#include %../common/FPU-configuration.reds - -; C types - -#define time! long! -#define clock! long! - -date!: alias struct! [ - second [integer!] ; 0-61 (60?) - minute [integer!] ; 0-59 - hour [integer!] ; 0-23 - - day [integer!] ; 1-31 - month [integer!] ; 0-11 - year [integer!] ; Since 1900 - - weekday [integer!] ; 0-6 since Sunday - yearday [integer!] ; 0-365 - daylight-saving-time? [integer!] ; Negative: unknown -] - -#either OS = 'Windows [ - #define clocks-per-second 1000 -][ - ; CLOCKS_PER_SEC value for Syllable, Linux (XSI-conformant systems) - ; TODO: check for other systems - #define clocks-per-second 1000'000 -] - -#import [LIBC-file cdecl [ - - ; Error handling - - form-error: "strerror" [ ; Return error description. - code [integer!] - return: [c-string!] - ] - print-error: "perror" [ ; Print error to standard error output. - string [c-string!] - ] - - - ; Memory management - - make: "calloc" [ ; Allocate zero-filled memory. - chunks [size!] - size [size!] - return: [binary!] - ] - resize: "realloc" [ ; Resize memory allocation. - memory [binary!] - size [size!] - return: [binary!] - ] - ] - - JVM!: alias struct! [ - reserved0 [int-ptr!] - reserved1 [int-ptr!] - reserved2 [int-ptr!] - - DestroyJavaVM [function! [[JNICALL] vm [JVM-ptr!] return: [jint!]]] - AttachCurrentThread [function! [[JNICALL] vm [JVM-ptr!] penv [struct! [p [int-ptr!]]] args [byte-ptr!] return: [jint!]]] - DetachCurrentThread [function! [[JNICALL] vm [JVM-ptr!] return: [jint!]]] - GetEnv [function! [[JNICALL] vm [JVM-ptr!] penv [struct! [p [int-ptr!]]] version [integer!] return: [jint!]]] - AttachCurrentThreadAsDaemon [function! [[JNICALL] vm [JVM-ptr!] penv [struct! [p [int-ptr!]]] args [byte-ptr!] return: [jint!]]] -] - - ;just some datatypes for testing: - - #some-hash - 10-1-2013 - quit - - ;binary: - #{00FF0000} - #{00FF0000 FF000000} - #{00FF0000 FF000000} ;with tab instead of space - 2#{00001111} - 64#{/wAAAA==} - 64#{/wAAA A==} ;with space inside - 64#{/wAAA A==} ;with tab inside - - - ;string with char - {bla ^(ff) foo} - {bla ^(( foo} - ;some numbers: - 12 - 1'000 - 1.2 - FF00FF00h - - ;some tests of hexa number notation with not common ending - [ff00h ff00h] ff00h{} FFh"foo" 00h(1 + 2) (AEh) - -;normal words: -foo char - -;get-word -:foo - -;lit-word: -'foo 'foo - -;multiple comment tests... -1 + 1 -comment "aa" -2 + 2 -comment {aa} -3 + 3 -comment {a^{} -4 + 4 -comment {{}} -5 + 5 -comment { - foo: 6 -} -6 + 6 -comment [foo: 6] -7 + 7 -comment [foo: "[" ] -8 + 8 -comment [foo: {^{} ] -9 + 9 -comment [foo: {boo} ] -10 + 10 -comment 5-May-2014/11:17:34+2:00 -11 + 11 - - -to-integer foo -foo/(a + 1)/b - -call/output reform ['which interpreter] path: copy "" - - version-1.1: 00010001h - - #if type = 'exe [ - push system/stack/frame ;-- save previous frame pointer - system/stack/frame: system/stack/top ;-- @@ reposition frame pointer just after the catch flag -] -push CATCH_ALL ;-- exceptions root barrier -push 0 ;-- keep stack aligned on 64-bit \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.reg b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.reg deleted file mode 100644 index bc4e9df..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.reg +++ /dev/null @@ -1,19 +0,0 @@ -Windows Registry Editor Version 5.00 -; comment - -[HKEY_CURRENT_USER\SOFTWARE\Pygments] -@="Hello" -"Key With Spaces"="Something" -"Key With ="="With Quotes" -"Key With = 2"=dword:123 -"Key" = "Value" -"Hex"=hex(0):1,2,3,a,b,f -"Hex 2"=hex(5):80,00,00,ff - -[-HKEY_CURRENT_USER\SOFTWARE\Pygments\Subkey] - -[HKEY_CURRENT_USER\SOFTWARE\Pygments\Subkey2] -; comment -@=- -"Foo"=- -"Foo"="Value" diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.rexx b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.rexx deleted file mode 100644 index ec4da5a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.rexx +++ /dev/null @@ -1,50 +0,0 @@ -/* REXX example. */ - -/* Some basic constructs. */ -almost_pi = 0.1415 + 3 -if almost_pi < 3 then - say 'huh?' -else do - say 'almost_pi=' almost_pi || " - ok" -end -x = '"' || "'" || '''' || """" /* quotes */ - -/* A comment - * spawning multiple - lines. /* / */ - -/* Built-in functions. */ -line = 'line containing some short text' -say WordPos(line, 'some') -say Word(line, 4) - -/* Labels and procedures. */ -some_label : - -divide: procedure - parse arg some other - return some / other - -call divide(5, 2) - -/* Loops */ -do i = 1 to 5 - do j = -3 to -9 by -3 - say i '+' j '=' i + j - end j -end i - -do forever - leave -end - -/* Print a text file on MVS. */ -ADDRESS TSO -"ALLOC F(TEXTFILE) DSN('some.text.dsn') SHR REU" -"EXECIO * DISKR TEXTFILE ( FINIS STEM LINES." -"FREE F(TEXTFILE)" -I = 1 -DO WHILE I <= LINES.0 - SAY ' LINE ' I ' : ' LINES.I - I = I + 1 -END diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.rhtml b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.rhtml deleted file mode 100644 index 041bec1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.rhtml +++ /dev/null @@ -1,561 +0,0 @@ -<% @title = 'Moderatoren-Interface' %> - -
-
<%= link_to 'Proben', :controller => '/admin/proben' %>
-
Die angesetzten Proben des Orchesters
-
<%= link_to 'Auftritte', :controller => '/admin/proben' %>
-
Die Auftritte des Orchesters
- <%- if @valid_user and @valid_user.admin? -%> -
<%= link_to 'Benutzer', :controller => '/admin/user' %>
-
Benutzer organisieren (nur für den Admin)
- <%- end -%> -
-<% @title = 'Anmeldung' %> - -<%= render :partial => 'user_form', :object => @user %> -<% @title = 'Administrator erstellen' %> - -<%= render :partial => 'user_form', :object => @user %> -<%= form_tag %> - - - - - - - - - - - - -
Name:<%= text_field 'user', 'name' %>
Passwort:<%= password_field 'user', 'password' %>
<%= submit_tag 'Anmelden' %>
-<%= end_form_tag %> -<% @title = 'Neuer Benutzer' -%> -<%= error_messages_for :user %> -<%= render :partial => 'form', :object => @user %> -<%= form_tag %> - - - - - - - - - - - - -
Name:<%= text_field 'user', 'name' %>
Passwort:<%= password_field 'user', 'password' %>
<%= submit_tag 'Anlegen' %>
-<%= end_form_tag %> -<% @title = 'Auftritte' %> - - - <%= render :partial => 'head' %> - <%= render :partial => 'day', :collection => @days %> -
-<% day, auftritte = *day -%> -<% - for auftritt in auftritte --%> - - - - <%= colorize day.to_s(:dots) if day %> - <% if day and day.wday == 6 %>
Samstag<% end %> - - - <%= colorize auftritt.time %> - - - <%= colorize auftritt.program %> - <%= link_to 'E', :controller => 'admin/auftritte', :action => :edit, :id => auftritt %> - - - <%= colorize(auftritt.place, 'Ort: ') + '
' unless auftritt.place.blank? %> - - - -<% - day = nil - end --%> - - Datum - Zeit - Programm - Ort - -<% @title = "Besetzung - #{@instrument.name}" %> - -

-<%= pluralize(@members.size, 'Schüler spielt', 'Schüler spielen') %> <%= h @instrument.name %>: -

- - - <%= render :partial => 'member', :collection => @members %> -
-<% @title = 'Besetzung: %d Mitglieder' % Member.count -%> - - - - -<%= render :partial => 'member', :collection => @members %> -
-<% @title = "Besetzung - Instrument wählen" %> - -
    -<% for instr in @instruments -%> -
  • - <%= link_to h(instr.name), :action => :instrument, :id => instr.name %> - (<%= h instr.members.size %>) -
  • -<% end -%> -
-<% @title = "Besetzung: #{@member.name}" -%> - -
- -
Instrument / Aufgabe:
-
<%= link_to_instruments_of @member %>
- -
Geburtstag:
-
<%= h @member.birthday.to_s(:dots) %>
- -
Adresse:
-
<%= h @member.street %>
<%= h @member.plz %>
- -
Telefon:
-
<%= h @member.phone %>
- -
Email:
-
<%= mail_to @member.email, @member.email, :encode => 'javascript' %>
- -
- - <%= link_to member.name, :action => :show, :id => member %>: - <%= link_to_instruments_of member %> - - -<% @title = 'Arbeitsgruppen' -%> -

- Die Arbeitsgruppen sind verantwortlich für die Organisation und Durchführung verschiedenster Aufgaben: -

- -
    - -
  • Plakate und Konzertkarten -
      -
    • Frau Schraps
    • -
    • Paul-Robert Achcenich
    • -
    • Josefine Dahms
    • -
    -
  • - -
  • Noten
    -
      -
    • Frau Puppe
    • -
    • Theresa Rebin
    • -
    -
  • - -
  • Programme
    -
      -
    • ?
    • -
    -
  • - -
  • Instrumentenstransporte
    -
      -
    • Frau Feldmann
    • -
    • Knut Müller
    • -
    • Patrick Wolter
    • -
    • Alexaner Wolf
    • -
    -
  • - -
  • Internetseite
    -
      -
    • Frau Sternbeck
    • -
    • Uwe Ritzschke
    • -
    • Paul-Robert Achcenich
    • -
    • Knut Müller
    • -
    • Alexander Wolf
    • -
    -
  • - -
-<% @title = 'Chronik' -%> -

- Das Jugendsinfonieorchester Marzahn-Hellersdorf wurde im Januar 2005 an der - Musikschule Marzahn-Hellersdorf gegründet und gab im Mai 2005 sein erstes - umjubeltes Konzert im FEZ Wuhlheide. Das Orchester umfasst zur Zeit ca. 65 - jugendliche Musiker und soll auf die Größe eines ausgewachsenen - Sinfonieorchesters erweitert werden (80-100 Musiker). -

- -

- Als musikalischer Leiter konnte der Dirigent und Echo-Preisträger Jobst - Liebrecht gewonnen werden, der die Musikschule schon aus einer früheren - Zusammenarbeit anlässlich der Kinderoper 'Pollicino' von Hans Werner Henze - kennt. Das Orchester probt wöchentlich. Neben den Tuttiproben finden außerdem - ebenfalls wöchentlich Stimmsatzproben statt, die von Lehrkräften betreut werden. - Das gemeinsame Ziel ist der Aufbau eines leistungsstarken, lebendigen - Klangkörpers, der die Jugendlichen und die Zuhörer ganz neu und direkt für die - Orchestermusik begeistert und diese Musik in den sozialen Brennpunkt Marzahn- - Hellersdorf trägt. -

- -

- Im Jahr sind etwa 2-3 Konzertprogramme geplant, mit denen wir in Konzertsälen - auftreten. Das erste Konzert des Jugendsinfonieorchesters Marzahn-Hellersdorf - wurde von DeutschlandRadio Kultur aufgezeichnet und in einer Sendung mit dem - Titel „EINSTAND: Nicht nur auf der Strasse herumhängen” porträtiert. - Wir wollen außerdem vor Ort in Marzahn und Hellersdorf in die Öffentlichkeit - gehen und spielen, um so für die Kultur zu werben und auch weitere Kinder und - Jugendliche für die Musik und fürs Mitmachen zu gewinnen. Durch die Einrichtung - eines zusätzlichen Vororchesters wird längerfristig versucht, die Arbeit auf ein - breites Fundament zu stellen, eine Werkstatt, ein musikalisches Bauhaus zu - gründen. Wenn die Orchesterarbeit erfolgreich angelaufen ist, sollen auch - übergreifende Projekte (Theater, Tanz, Chor) stattfinden. -

- -

- Das Orchester will Musik von heute spielen in jedem Sinn, ob es sich um Stücke - aus der sinfonischen Tradition handelt oder um zeitgenössische Musik. Wir kennen - keine Berührungsängste und sind neugierig auf Musik aller Art und möchten diese - Neugierde mit unserem Publikum teilen. -

-<% @title = 'Dirigent - Jobst Liebrecht' -%> -

- <%= image_tag 'jobstliebrecht.jpg', :alt => 'Jobst Liebrecht', :title => 'Jobst Liebrecht', :class => 'pic_right' %> - Jobst Liebrecht studierte Dirigieren an der Musikhochschule in München und bei Peter Eötvös. Sein spezielles Interesse - für neue Musik führte schnell zur Zusammenarbeit mit renommierten Ensembles auf dem Gebiet wie dem Ensemble Modern, - Frankfurt, dem Klangforum-Ensemble, Wien, dem Ensemble Köln sowie dem Ensemble United Berlin. Aufnahmen entstanden beim - WDR, beim DeutschlandRadio Berlin, beim BR und beim SFB. Er dirigierte u.a. das Rundfunk Sinfonieorchester Berlin, die - Duisburger Philharmoniker und das Münchner Kammerorchester sowie in den Opernhäusern in Halle und Giessen. Tourneen im - Ausland führten ihn nach Argentinien, Georgien, Südkorea und in die USA. -

- -

- Zu den Ur- und Erstaufführungen, die er betreut hat, gehören die Opern 'Lunu' von Moritz Eggert, 'Gloria von Jaxtberg' von - HK Gruber sowie in Zusammenarbeit mit dem Regisseur Einar Schleef das Musiktheaterspiel 'Der Golem in Bayreuth' von Ulla - Berkewicz/Lesch Schmidt am Wiener Burgtheater. -

- -

- Jobst Liebrecht war mehrere Jahre lang Assistent von Hans Werner Henze und auch immer wieder pädagogisch tätig. Seine - Aufnahme von Henzes Märchenoper 'Pollicino', die als CD bei Wergo erschienen ist, wurde mit dem ECHO-Preis 2004 in der - Sparte 'Klassik für Kinder' ausgezeichnet. -

- -

- Als Komponist ist Jobst Liebrecht mit Liedern, Kammermusik sowie Bühnenmusiken an die Öffentlichkeit getreten. -

-<% message, backtrace = session[:boom] -%> -<% @title = 'Fehler in Zeile %d' % [backtrace[/line\s+#(\d+)/,1]] -%> -
-
<%= h message %>
-
-<%= debug backtrace %> -<% cache :action_suffix => (action = params[:action]) do -%> -

-Der Inhalt für die Aktion <%= h action.inspect %> fehlt noch. -

-<% end -%> -<% @title = 'Schulferien Berlin' -%> -

- Unser Orchester besteht zu einem sehr großen Teil aus Schülern und auch die - Musikschule, der die meisten von uns entstammen, hat in den Schulferien - geschlossen.
- Deshalb finden innerhalb der Berliner Ferienzeiten keine Proben statt. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Zeitraum200620072008
- Winter - 30.01. - 03.02. - 05.02. - 10.02. - 04.02. - 09.02.
- Ostern/Frühjahr - 10.04. - 21.04. - 02.04. - 13.04. - 17.03. - 28.03.
- Himmelf./Pfingsten - 30.04. / 18.05. - 30.04. / 18.05. - 02.05.
- Sommer - 06.07. - 19.08. - 12.07. - 25.08. - 17.07. - 30.08.
- Herbst - 02.10. - 14.10. - 15.10. - 27.10. -
- Weihnachten - 27.12. - 05.01.07 - 24.12. - 04.01.08 -
-<% @title = 'Termine' -%> - -
    -
  • <%= link_to 'Auftritte', :controller => '/auftritte' %>
  • -
  • <%= link_to 'Schulferien', :controller => '/content', :action => :schulferien %>
  • -
- - - - <%= tag 'meta', :'http-equiv' => 'content-language', :content => 'de' %> - <%= tag 'meta', :'http-equiv' => 'content-type', :content => 'text/html; charset=UTF-8' %> - - - - - - - - - - - - - JSO<%-if @title-%> - <%= h @title %><%- end -%> - <%= stylesheet_link_tag '/rcss/main' %> - <%#= stylesheet_link_tag 'main' %> - <%= javascript_include_tag 'nospam' %> - <%#= javascript_include_tag :defaults %> - - - - - - - - - - - - - - - - - -
- <%= image_tag 'JSO-Logo.gif', :alt => 'JSO-Logo' %> - - -
jugendsinfonieorchester
-
-<% if valid_user -%> -
    - -
-<% end -%> -<% cache :controller => 'menu', :action => 'main_menu' do -%> - <%= render_component :controller => 'menu', :action => 'index' %> -<% end -%> -
-<% unless @flash.keys.empty? -%> -
- <%- for kind, msg in @flash -%> -
<%= h msg %>
- <%- end -%> -
-<% end -%> -<%= content_tag 'h3', h(@title) if @title %> -<%= @content_for_layout %> -
- -
- powered by Ruby on Rails <%= Rails::Info.properties.value_for 'Rails version' %> [<%= h RAILS_ENV[/^./] %>] - <%= image_tag 'css.png', :alt => 'valid CSS', :title => 'valid Cascading Style Sheet', :style => 'display: inline; vertical-align: middle' %> - <%= image_tag 'xhtml11.png', :alt => 'valid XHTML 1.1', :title => 'valid eXtensible Hypertext Markup Language 1.1', :style => 'display: inline; vertical-align: middle' %> -
-
- - - - -<% @title = 'Übersicht' -%> - -

nächste Probe

- - <%= render :partial => 'proben/head' %> - <%= render :partial => 'proben/day', :object => @next_probe %> -
-

<%= link_to 'weitere Proben...', :controller => 'proben' %>

- -

nächster Auftritt

- - <%= render :partial => 'auftritte/head' %> - <%= render :partial => 'auftritte/day', :object => @next_auftritt %> -
-

<%= link_to 'mehr Auftritte...', :controller => 'auftritte' %>

-
    - <%= category 'Übersicht', home_url %> - <%= subcat 'Wer sind wir?', :wer %> - <%= subcat 'Dirigent' %> - <%= subcat 'Besetzung', url_for(:controller => '/besetzung') %> - <%= subcat 'Repertoire' %> - - <%= category 'Termine' %> - <%= subcat 'Auftritte', url_for(:controller => '/auftritte', :action => :plan) %> - <%= subcat 'Schulferien' %> - - <%= category 'Probenplan', url_for(:controller => '/proben', :action => :plan) %> - - <%= category 'Organisation' %> - <%= subcat 'Orchesterrat' %> - <%= subcat 'Arbeitsgruppen' %> - - <%= category 'Chronik' %> - <%= subcat 'Konzerte' %> - <%= subcat 'Audio' %> - <%= subcat 'Presse' %> - - <%= category 'Links', '#' %> - <%= subcat 'Bilderseite', 'http://musikschule.iden04.de' %> - <%= subcat 'Musikschule', 'http://www.musikschule-marzahn-hellersdorf.de' %> - -

  • - - <%= category 'Kontakt' %> -
-<% @title = 'Probenplan' %> - - - <%= render :partial => 'head' %> - <%= render :partial => 'day', :collection => @days %> -
- -

-Ort (wenn nicht anders angegeben): Schule am Pappelhof -

- -<%= render_partial 'raum' %> -<% day, proben = *day -%> -<% - for probe in proben --%> - - - - <%= colorize day.to_s(:dots) if day %> - <% if day and day.wday == 6 %>
Samstag<% end %> - - - <%= colorize probe.time %> - - - <%= colorize(probe.place, 'Ort: ') + '
' unless probe.place.blank? %> - <%= colorize probe.program %> - <%= link_to 'E', :controller => 'admin/proben', :action => :edit, :id => probe %> - - - <%= h probe.instrumentation %> - - - -<% - day = nil - end --%> - - Datum - Zeit - Stücke - Besetzung - -

Probenräume

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
WerRaumAdresse
StreicherSchule am Pappelhof
(Raum Nr.)
(Anschrifft Pappelhofschule)
BlechbläserMusikschule Marzahn
(Raum Nr.)
(Anschrifft Musikscule Marzahn)
HolzbläserSchule am Pappelhof
(Raum Nr.)
(Anschrifft Pappelhofschule)
...(Ort)
(Raum Nr.)
(Anschrifft)
diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.rkt b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.rkt deleted file mode 100644 index acc0328..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.rkt +++ /dev/null @@ -1,743 +0,0 @@ -#lang racket - -(require (only-in srfi/13 string-contains)) - -; Single-line comment style. - -;; Single-line comment style. - -#| Multi-line comment style ... on one line |# - -#| -Multi-line comment style ... -#|### #| nested |#||| |# -... on multiple lines -|# - -#;(s-expression comment (one line)) - -#; -(s-expression comment - (multiple lines)) - -#! shebang comment - -#!/shebang comment - -#! shebang \ -comment - -#!/shebang \ -comment - -;; Uncommented numbers after single-line comments -;; NEL…133 -;; LS
8232 -;; PS
8233 - -#reader racket -(define(a-function x #:keyword [y 0]) - (define foo0 'symbol) ; () - [define foo1 'symbol] ; [] - {define foo2 'symbol} ; {} - (define 100-Continue 'symbol) - (and (append (car'(1 2 3)))) - (regexp-match? #rx"foobar" "foobar") - (regexp-match? #px"\"foo\\(bar\\)?\"" "foobar") - (regexp-match? #rx#"foobar" "foobar") - (regexp-match? #px#"foobar" "foobar") - (define #csa 1) - #Ci (let ([#%A|||b #true C -\|d "foo"]) - (displayln #cS #%\ab\ #true\ C\ -\\d||)) - (for/list ([x (in-list (list 1 2 (list 3 4)))]) - (cond - [(pair? x) (car x)] - [else x]))) - -;; Literals -(values - ;; #b - #b1 - #b+1 - #b-1 - #b.1 - #b1. - #b0.1 - #b+0.1 - #b-0.1 - #b1/10 - #b+1/10 - #b-1/10 - #b1e11 - #b+1e11 - #b-1e11 - #b.1e11 - #b1.e11 - #b0.1e11 - #b+0.1e11 - #b-0.1e11 - #b1/10e11 - #b+1/10e11 - #b-1/10e11 - #b+i - #b1+i - #b+1+i - #b-1+i - #b.1+i - #b1.+i - #b0.1+i - #b+0.1+i - #b-0.1+i - #b1/10+i - #b+1/10+i - #b-1/10+i - #b1e11+i - #b+1e11+i - #b-1e11+i - #b1.e11+i - #b.1e11+i - #b0.1e11+i - #b+0.1e11+i - #b-0.1e11+i - #b1/10e11+i - #b+1/10e11+i - #b-1/10e11+i - #b+1i - #b1+1i - #b+1+1i - #b-1+1i - #b1.+1i - #b.1+1i - #b0.1+1i - #b+0.1+1i - #b-0.1+1i - #b1/10+1i - #b+1/10+1i - #b-1/10+1i - #b1e11+1i - #b+1e11+1i - #b-1e11+1i - #b.1e11+1i - #b0.1e11+1i - #b+0.1e11+1i - #b-0.1e11+1i - #b1/10e11+1i - #b+1/10e11+1i - #b-1/10e11+1i - #b+1/10e11i - #b1+1/10e11i - #b+1+1/10e11i - #b-1+1/10e11i - #b.1+1/10e11i - #b0.1+1/10e11i - #b+0.1+1/10e11i - #b-0.1+1/10e11i - #b1/10+1/10e11i - #b+1/10+1/10e11i - #b-1/10+1/10e11i - #b1e11+1/10e11i - #b+1e11+1/10e11i - #b-1e11+1/10e11i - #b.1e11+1/10e11i - #b0.1e11+1/10e11i - #b+0.1e11+1/10e11i - #b-0.1e11+1/10e11i - #b1/10e11+1/10e11i - #b+1/10e11+1/10e11i - #b-1/10e11+1/10e11i - ;; #d - #d1 - #d+1 - #d-1 - #d.1 - #d1. - #d1.2 - #d+1.2 - #d-1.2 - #d1/2 - #d+1/2 - #d-1/2 - #d1e3 - #d+1e3 - #d-1e3 - #d.1e3 - #d1.e3 - #d1.2e3 - #d+1.2e3 - #d-1.2e3 - #d1/2e3 - #d+1/2e3 - #d-1/2e3 - #d+i - #d1+i - #d+1+i - #d-1+i - #d.1+i - #d1.+i - #d1.2+i - #d+1.2+i - #d-1.2+i - #d1/2+i - #d+1/2+i - #d-1/2+i - #d1e3+i - #d+1e3+i - #d-1e3+i - #d1.e3+i - #d.1e3+i - #d1.2e3+i - #d+1.2e3+i - #d-1.2e3+i - #d1/2e3+i - #d+1/2e3+i - #d-1/2e3+i - #d+1i - #d1+1i - #d+1+1i - #d-1+1i - #d1.+1i - #d.1+1i - #d1.2+1i - #d+1.2+1i - #d-1.2+1i - #d1/2+1i - #d+1/2+1i - #d-1/2+1i - #d1e3+1i - #d+1e3+1i - #d-1e3+1i - #d.1e3+1i - #d1.2e3+1i - #d+1.2e3+1i - #d-1.2e3+1i - #d1/2e3+1i - #d+1/2e3+1i - #d-1/2e3+1i - #d+1/2e3i - #d1+1/2e3i - #d+1+1/2e3i - #d-1+1/2e3i - #d.1+1/2e3i - #d1.2+1/2e3i - #d+1.2+1/2e3i - #d-1.2+1/2e3i - #d1/2+1/2e3i - #d+1/2+1/2e3i - #d-1/2+1/2e3i - #d1e3+1/2e3i - #d+1e3+1/2e3i - #d-1e3+1/2e3i - #d.1e3+1/2e3i - #d1.2e3+1/2e3i - #d+1.2e3+1/2e3i - #d-1.2e3+1/2e3i - #d1/2e3+1/2e3i - #d+1/2e3+1/2e3i - #d-1/2e3+1/2e3i - ;; Extflonums - +nan.t - 1t3 - +1t3 - -1t3 - .1t3 - 1.t3 - 1.2t3 - +1.2t3 - -1.2t3 - 1/2t3 - +1/2t3 - -1/2t3 - 1#t0 - 1.#t0 - .2#t0 - 1.2#t0 - 1#/2t0 - 1/2#t0 - 1#/2#t0 - 1#t3 - 1.#t3 - .2#t3 - 1.2#t3 - 1#/2t3 - 1/2#t3 - 1#/2#t3 - ;; No # reader prefix -- same as #d - -1.23 - 1.123 - 1e3 - 1e-22 - 1/2 - -1/2 - 1 - -1 - ;; #e - #e-1.23 - #e1.123 - #e1e3 - #e1e-22 - #e1 - #e-1 - #e1/2 - #e-1/2 - ;; #d#e - #d#e-1.23 - #d#e1.123 - #d#e1e3 - #d#e1e-22 - #d#e1 - #d#e-1 - #d#e1/2 - #d#e-1/2 - ;; #e#d - #e#d-1.23 - #e#d1.123 - #e#d1e3 - #e#d1e-22 - #e#d1 - #e#d-1 - #e#d1/2 - #e#d-1/2 - ;; #i always float - #i-1.23 - #i1.123 - #i1e3 - #i1e-22 - #i1/2 - #i-1/2 - #i1 - #i-1 - ;; Implicitly inexact numbers - +nan.0 - 1# - 1.# - .2# - 1.2# - 1#/2 - 1/2# - 1#/2# - 1#e3 - 1.#e3 - .2#e3 - 1.2#e3 - 1#/2e3 - 1/2#e3 - 1#/2#e3 - +nan.0+i - 1#+i - 1.#+i - .2#+i - 1.2#+i - 1#/2+i - 1/2#+i - 1#/2#+i - 1#e3+i - 1.#e3+i - .2#e3+i - 1.2#e3+i - 1#/2e3+i - 1/2#e3+i - 1#/2#e3+i - +nan.0i - +1#i - +1.#i - +.2#i - +1.2#i - +1#/2i - +1/2#i - +1#/2#i - +1#e3i - +1.#e3i - +.2#e3i - +1.2#e3i - +1#/2e3i - +1/2#e3i - +1#/2#e3i - 0+nan.0i - 0+1#i - 0+1.#i - 0+.2#i - 0+1.2#i - 0+1#/2i - 0+1/2#i - 0+1#/2#i - 0+1#e3i - 0+1.#e3i - 0+.2#e3i - 0+1.2#e3i - 0+1#/2e3i - 0+1/2#e3i - 0+1#/2#e3i - 1#/2#e3+nan.0i - 1#/2#e3+1#i - 1#/2#e3+1.#i - 1#/2#e3+.2#i - 1#/2#e3+1.2#i - 1#/2#e3+1#/2i - 1#/2#e3+1/2#i - 1#/2#e3+1#/2#i - 1#/2#e3+1#e3i - 1#/2#e3+1.#e3i - 1#/2#e3+.2#e3i - 1#/2#e3+1.2#e3i - 1#/2#e3+1#/2e3i - 1#/2#e3+1/2#e3i - 1#/2#e3+1#/2#e3i - +nan.0@1 - 1#@1 - 1.#@1 - .2#@1 - 1.2#@1 - 1#/2@1 - 1/2#@1 - 1#/2#@1 - 1#e3@1 - 1.#e3@1 - .2#e3@1 - 1.2#e3@1 - 1#/2e3@1 - 1/2#e3@1 - 1#/2#e3@1 - 1@+nan.0 - 1@1# - 1@1.# - 1@.2# - 1@1.2# - 1@1#/2 - 1@1/2# - 1@1#/2# - 1@1#e3 - 1@1.#e3 - 1@.2#e3 - 1@1.2#e3 - 1@1#/2e3 - 1@1/2#e3 - 1@1#/2#e3 - 1#/2#e3@1# - 1#/2#e3@1.# - 1#/2#e3@.2# - 1#/2#e3@1.2# - 1#/2#e3@1#/2 - 1#/2#e3@1/2# - 1#/2#e3@1#/2# - 1#/2#e3@1#e3 - 1#/2#e3@1.#e3 - 1#/2#e3@.2#e3 - 1#/2#e3@1.2#e3 - 1#/2#e3@1#/2e3 - 1#/2#e3@1/2#e3 - 1#/2#e3@1#/2#e3 - ;; #o - #o777.777 - #o-777.777 - #o777e777 - #o777e-777 - #o3/7 - #o-3/7 - #o777 - #o-777 - #e#o777.777 - #e#o-777.777 - #e#o777e777 - #e#o777e-777 - #e#o3/7 - #e#o-3/7 - #e#o777 - #e#o-777 - #i#o777.777 - #i#o-777.777 - #i#o777e777 - #i#o777e-777 - #i#o3/7 - #i#o-3/7 - #i#o777 - #i#o-777 - ;; #x - #x-f.f - #xf.f - #xfsf - #xfs-f - #x7/f - #x-7/f - #x-f - #xf - #e#x-f.f - #e#xf.f - #e#xfsf - #e#xfs-f - #e#x7/f - #e#x-7/f - #e#x-f - #e#xf - #i#x-f.f - #i#xf.f - #i#xfsf - #i#xfs-f - #i#x7/f - #i#x-7/f - #i#x-f - #i#xf - ;; Not numbers - '-1.23x - '1.123x - '1e3x - '1e-22x - '1/2x - '-1/2x - '1x - '-1x - '/ - '1/ - '/2 - '1//2 - '1e3. - '1e - 'e3 - '.i - '1.2.3 - '1..2 - '.1. - '@ - '1@ - '@2 - '1@@2 - '1@2@3 - '1@2i - '1+-2i - '1i+2 - '1i+2i - '1+2i+3i - '- - '--1 - '+ - '++1 - '1/2.3 - '1#2 - '1#.2 - '1.#2 - '.#2 - '+nan.t+nan.ti - '+nan.t@nan.t - ;; Booleans - #t - #T - #true - #f - #F - #false - ;; Characters, strings, and byte strings - #\ - #\Null9 - #\n9 - #\99 - #\0009 - #\u3BB - #\u03BB9 - #\U3BB - #\U000003BB9 - #\λ9 - "string\ - \a.\b.\t.\n.\v.\f.\r.\e.\".\'.\\.\1.\123.\1234.\x9.\x30.\x303" - "\u9.\u1234.\u12345.\U9.\U00100000.\U001000000" - #"byte-string\7\xff\t" - #< (listof string?) string?) -;; Appends all the strings together, quoting them as appropriate for Python, -;; with commas and spaces between them, wrapping at 80 characters, with an -;; indentation of 8 spaces. -(define (wrap-lines lst) - (define INDENTATION '" ") - (define WIDTH '80) - (define (wrap-lines* lst done-lines current-line) - (if (null? lst) - (string-append (foldr string-append "" done-lines) current-line) - (let* ([str (first lst)] - [wrapped-str (if (regexp-match-exact? '#px"[[:ascii:]]+" str) - (string-append "'" str "',") - (string-append "u'" str "',"))] - [new-line (string-append current-line " " wrapped-str)]) - (if ((string-length new-line) . >= . WIDTH) - (wrap-lines* (rest lst) - (append done-lines - `(,(string-append current-line "\n"))) - (string-append INDENTATION wrapped-str)) - (wrap-lines* (rest lst) - done-lines - new-line))))) - (wrap-lines* lst '() INDENTATION)) - -;; (-> string? boolean?) -;; Returns #t if str represents a syntax identifier in the current namespace, -;; otherwise #f. -(define (syntax-identifier? str) - (with-handlers ([exn? exn?]) - (not (eval (call-with-input-string str read))))) - -(define RACKET-NAMESPACE - (parameterize ([current-namespace (make-base-namespace)]) - (namespace-require 'racket) - (current-namespace))) - -(define BOUND-IDENTIFIERS - (parameterize ([current-namespace RACKET-NAMESPACE]) - (sort (map symbol->string (namespace-mapped-symbols)) - string<=?))) - -(define-values (KEYWORDS BUILTINS) - (parameterize ([current-namespace RACKET-NAMESPACE]) - (partition syntax-identifier? BOUND-IDENTIFIERS))) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.rpf b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.rpf deleted file mode 100644 index 162b5ed..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.rpf +++ /dev/null @@ -1,4 +0,0 @@ -declare xyz true -declare s "some string" -i = 2 -f = 0.2 diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.sh b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.sh deleted file mode 100644 index 2112cdd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -printf "%d %s\n" 10 "foo" -printf "%d %s\n" $((10#1)) "bar" - -let "m = 10#${1:1:2}" -echo $m - -m=$((10#${1:4:3} + 10#${1:1:3})) -echo $m - -m=$((10#${1:4:3})) -echo $m - -m=$((10#$1)) -echo $m - -m=$((10#1)) -echo $m - -m=$((10)) -echo $m diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.sh-session b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.sh-session deleted file mode 100644 index 02f3bb0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.sh-session +++ /dev/null @@ -1,19 +0,0 @@ -user@host:~/path$ ls -a -. .. a b c -user@host:~/path$ diff -u a b ---- a 2008-07-26 17:10:07.000000000 -0700 -+++ b 2008-07-26 17:10:10.000000000 -0700 -@@ -1,3 +1,3 @@ - a --b -+x - c -user@host:~/path$ echo \ -> a -a -user@host:~/path$ su -root@host:~# -sh-3.1$ # on hardy -sh$ # on etch -(virtualenv-name)user@host:~$ ls -a - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.shell-session b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.shell-session deleted file mode 100644 index 66984aa..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.shell-session +++ /dev/null @@ -1,45 +0,0 @@ -[user@linuxbox imx-bootlets-src-10.05.02]$ make CROSS_COMPILE=arm-none-eabi- clean -rm -rf *.sb -rm -f sd_mmc_bootstream.raw -rm -f linux_prep/board/*.o -... -Files: -rm -f power_prep.o eabi.o -Build output: -make[1]: Leaving directory `/home/...' -[user@linuxbox imx-bootlets-src-10.05.02]$ make CROSS_COMPILE=arm-none-eabi- -make[1]: Entering directory `/home/...' -... -#@echo "generating U-Boot boot stream image" -#elftosb2 -z -c ./uboot_prebuilt.db -o imx23_uboot.sb -echo "generating kernel bootstream file sd_mmc_bootstream.raw" -generating kernel bootstream file sd_mmc_bootstream.raw -#Please use cfimager to burn xxx_linux.sb. The below way will no -#work at imx28 platform. -> test -$ test -rm -f sd_mmc_bootstream.raw -[user@linuxbox imx-bootlets-src-10.05.02]$ -pi@raspberrypi ~ $ sudo sh -c "echo 17 > /sys/class/gpio/export" -pi@raspberrypi ~ $ sudo sh -c "echo out > /sys/class/gpio/gpio17/direction" -pi@raspberrypi ~ $ sudo sh -c "echo 1 > /sys/class/gpio/gpio17/value" -pi@raspberrypi ~ $ sudo sh -c "echo 0 > /sys/class/gpio/gpio17/value" -pi@raspberrypi ~ $ -[user@linuxbox ~]$ # copy other stuff to the SD card -root@imx233-olinuxino-micro:~# lsmod - Not tainted -[user@linuxbox ~]$ tail -n 2 /mnt/rpi/etc/inittab -#Spawn a getty on Raspberry Pi serial line -T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100 -pi@raspberrypi:~/Adafruit-WebIDE$ mkdir tmp -pi@raspberrypi:~/Adafruit-WebIDE$ npm config set tmp tmp -pi@raspberrypi:~/Adafruit-WebIDE$ npm install -pi@raspberrypi ~/Adafruit-WebIDE $ ifconfig eth0 -eth0 Link encap:Ethernet HWaddr b5:33:ff:33:ee:aq - inet addr:10.42.0.60 Bcast:10.42.0.255 Mask:255.255.255.0 - UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 - RX packets:21867 errors:0 dropped:0 overruns:0 frame:0 - TX packets:8684 errors:0 dropped:0 overruns:0 carrier:0 - collisions:0 txqueuelen:1000 - RX bytes:27338495 (26.0 MiB) TX bytes:1268356 (1.2 MiB) - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.slim b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.slim deleted file mode 100644 index 0e20920..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.slim +++ /dev/null @@ -1,31 +0,0 @@ -doctype html -html - head - title Slim Examples - meta name="keywords" content="template language" - meta name="author" content=author - javascript: - alert('Slim supports embedded javascript!') - - body - h1 Markup examples - - #content - p This example shows you how a basic Slim file looks like. - - == yield - - - unless items.empty? - table - - for item in items do - tr - td.name = item.name - td.price = item.price - - else - p - | No items found. Please add some inventory. - Thank you! - - div id="footer" - = render 'footer' - | Copyright (C) #{year} #{author} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.sls b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.sls deleted file mode 100644 index 824700e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.sls +++ /dev/null @@ -1,51 +0,0 @@ -include: - - moosefs - -{% for mnt in salt['cmd.run']('ls /dev/data/moose*').split() %} -/mnt/moose{{ mnt[-1] }}: - mount.mounted: - - device: {{ mnt }} - - fstype: xfs - - mkmnt: True - file.directory: - - user: mfs - - group: mfs - - require: - - user: mfs - - group: mfs -{% endfor %} - -/etc/mfshdd.cfg: - file.managed: - - source: salt://moosefs/mfshdd.cfg - - user: root - - group: root - - mode: 644 - - template: jinja - - require: - - pkg: mfs-chunkserver - -/etc/mfschunkserver.cfg: - file.managed: - - source: salt://moosefs/mfschunkserver.cfg - - user: root - - group: root - - mode: 644 - - template: jinja - - require: - - pkg: mfs-chunkserver - -mfs-chunkserver: - pkg: - - installed -mfschunkserver: - service: - - running - - require: -{% for mnt in salt['cmd.run']('ls /dev/data/moose*') %} - - mount: /mnt/moose{{ mnt[-1] }} - - file: /mnt/moose{{ mnt[-1] }} -{% endfor %} - - file: /etc/mfschunkserver.cfg - - file: /etc/mfshdd.cfg - - file: /var/lib/mfs diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.sml b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.sml deleted file mode 100644 index 31db47d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.sml +++ /dev/null @@ -1,156 +0,0 @@ -structure C = struct - val a = 12 - fun f x = x + 5 -end - -(*(*(*(*(* This file is all pretty strange Standard ML *)*)*)*) (**)*) -(* Robert J. Simmons *) - -(* Comments (* can be nested *) *) -structure S = struct - val x = (1, 2, "three") -end - -structure Sv = struct - (* These look good *) - val x = (1, 2, "three") - val z = #2 x - - (* Although these look bad (not all the numbers are constants), * - * they never occur in practice, as they are equivalent to the above. *) - val x = {1 = 1, 3 = "three", 2 = 2} - val z = # - 2 x - - val || = 12 -end - -signature S = sig end - -structure S = struct - val x = (1, 2, "three") - datatype 'a t = T of 'a - and u = U of v * v - withtype v = {left: int t, right: int t} - exception E1 of int and E2 - fun 'a id (x: 'a) : 'a = x - - val - 'a id = fn (x : 'a) => x -end - -signature R = sig - type t - val x : t - val f : t * int -> int -end -structure R : R = struct - datatype t = T of int - val x : t = T 0 - fun f (T x, i : int) : int = x + i - fun 'a id (x: 'a) : 'a = x -end - -signature BA_Z = sig - val s: int - include S R -end - -structure b______ = struct (* What (* A * strange * name *) for ) a ( struct *) - -val !%&$#+-/:<=>?@\~`^|* = 3 - -type struct' = int list -and 'a sig' = 'a list -and ('a, 'b) end' = 'b option * 'a list - -structure baz = struct - structure Bar = struct - val foo = !%&$#+-/:<=>?@\~`^|* - end -end - -infixr +!+ -fun (a +!+ b) = (op +) (a, b) - -open baz S R - -val$$$ = fn x => fn y => fn z => fn w => w -val (foo, ++, bar, ||) = (4, baz.Bar.foo, !%&$#+-/:<=>?@\~`^|*, Bar.foo) -val _ = $$$foo++bar|| - -val val'ue : ' list = [] -val struct3 : (' -> ') = fn x => x -val end_struct_' : ('a -> 'a) = fn x => x -val x : (''a -> ''a) = fn x => x -val x : ('''' -> '''') = fn x => x -val x : unit = print "Weird, huh?\n" -val w = {x=1,y=2,##= =3,4=3} -val {##=, x, 4=a,...} = w -val z = #4 w -val z = # ##= w - -fun f x y 0 = 4 - | f x y z = 4 + Sv.|| - -exception Foo of int -datatype ('0, 'b, '_, ') f'o'o = Bar | baZ12' | dsfa_fad | #@$ | Bug -and (', ''', '''', ''''') bar = - Bee of unit - | Ben of (', ''', '''', ''''') f'o'o * int - | X of ''' list - -fun q x = raise Foo x -and h x = raise Foo (~x) - -val x = 4 -and y = 5 - -fun q 0 = 4 - | q 1 = (case 1 of 1 => 2 | 3 => 4 | x => y) - | q y = case y of 1 => 2 | 3 => 4 | x => y - -val x = ref true -fun q 0 = 4 - | q 1 = if false then case 1 of 1 => 2 | 3 => 4 | x => y else 19 - | q 2 = (while !x handle Match => !x | Fail _ => !x do () ; 2) - | q x = (raise Match) handle Domain => 9 | Match => 3 - -fun p 0 = 12 - | p 1 = 8 - | p 2 = r false - | p x = r true -and r true = 19 - | r false = 12 - -val _ = 123 -val _ = 0001 -val _ = ~123 -val _ = ~0001 -val _ = 0w12412 -val _ = 0w12412 -val _ = 0xfA0 -val _ = ~0xfA0 -val _ = 0wxfA0 -val _ = 1.4 -val _ = ~1.4 -val _ = 1e~2 -val _ = 1E~2 -val _ = 1e2 -val _ = 1E2 -val _ = 1.4e~2 -val _ = 1.4E~2 -val _ = 1.4e2 -val _ = 1.4E2 - -val c = #"\000" -val st = "foo \ - \ bar" ^ "baz \ - \ and \ - \ such\n" - -val () = print st - -val _ = foo::bar::4::[++] - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.snobol b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.snobol deleted file mode 100644 index 26ca5cf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.snobol +++ /dev/null @@ -1,15 +0,0 @@ --SOME RANDOM DIRECTIVE WOULD GO HERE -* -* SNOBOL4 example file for lexer -* - SOME.THING_OR_OTHER32 = 1 + 1.0 - 1E3 * 1E-3 ** 2.718284590E0 -+ :F(END)S(IN_LOOP) - PATTERN = LEN(3) ("GAR" | "BAR") -IN_LOOP THING = INPUT :F(END) - THING LEN(3) ("GAR" | "BAR") :S(OK) - OUTPUT = THING " : Failure!" :(IN_LOOP) -OK OUTPUT = THING ' : "Success"!' :(IN_LOOP) -END -FOOBAR -FOOGAR -THiNIg diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.stan b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.stan deleted file mode 100644 index 7eb6fdf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.stan +++ /dev/null @@ -1,110 +0,0 @@ -/* -A file for testing Stan syntax highlighting. - -It is not a real model and will not compile -*/ -# also a comment -// also a comment -data { - // valid name - int abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_abc; - // all types should be highlighed - int a3; - real foo[2]; - vector[3] bar; - row_vector[3] baz; - matrix[3,3] qux; - simplex[3] quux; - ordered[3] corge; - positive_ordered[3] wibble; - corr_matrix[3] grault; - cov_matrix[3] garply; - cholesky_factor_cov[3] waldo; - - real foo1; - real foo2; - real foo3; -} -transformed data { - real xyzzy; - int thud; - row_vector grault2; - matrix qux2; - - // all floating point literals should be recognized - // all operators should be recognized - // paren should be recognized; - xyzzy <- 1234.5687 + .123 - (2.7e3 / 2E-5 * 135e-5); - // integer literal - thud <- -12309865; - // ./ and .* should be recognized as operators - grault2 <- grault .* garply ./ garply; - // ' and \ should be regognized as operators - qux2 <- qux' \ bar; - -} -parameters { - real fred; - real plugh; -} -transformed parameters { -} -model { - // ~, <- are operators, - // T may be be recognized - // normal is a function - fred ~ normal(0, 1) T(-0.5, 0.5); - real tmp; - // C++ reserved - real public; - - // control structures - for (i in 1:10) { - tmp <- tmp + 0.1; - } - tmp <- 0.0; - while (tmp < 5.0) { - tmp <- tmp + 1; - } - if (tmp > 0.0) { - print(tmp); - } else { - print(tmp); - } - - // operators - tmp || tmp; - tmp && tmp; - tmp == tmp; - tmp != tmp; - tmp < tmp; - tmp <= tmp; - tmp > tmp; - tmp >= tmp; - tmp + tmp; - tmp - tmp; - tmp * tmp; - tmp / tmp; - tmp .* tmp; - tmp ./ tmp; - ! tmp; - - tmp; - + tmp; - tmp '; - - // lp__ should be highlighted - // normal_log as a function - lp__ <- lp__ + normal_log(plugh, 0, 1); - increment_log_prob(normal_log(plugh, 0, 1)); - - // print statement and string literal - print("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_~@#$%^&*`'-+={}[].,;: "); - print("Hello, world!"); - print(""); - -} -generated quantities { - real bar1; - bar1 <- foo + 1; -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.tea b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.tea deleted file mode 100644 index 6859e34..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.tea +++ /dev/null @@ -1,34 +0,0 @@ -<% template example() {...} -a = 123 -b = "test"; -c = 4.5 -d = call other() -f = other2() - -define g as String - -h = true -i = false -j = null -%> - - -Example<title> -<body> -<a href="http://example.com">Test link</a> -<% // Second block -if(a == 123 and b == "test") { - 'yes' -} else { - 'no' -} - -foreach(i in 1..10) { - i & "," -} - -foreach(i in #(1,2,3) reverse { - i & ";" -} - -%> \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.todotxt b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.todotxt deleted file mode 100644 index 55ee528..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.todotxt +++ /dev/null @@ -1,9 +0,0 @@ -(A) Call Mom @Phone +Family -(A) 2014-01-08 Schedule annual checkup +Health -(B) Outline chapter 5 +Novel @Computer -(C) Add cover sheets @Office +TPSReports -Plan backyard herb garden @Home -Pick up milk @GroceryStore -Research self-publishing services +Novel @Computer -x 2014-01-10 Download Todo.txt mobile app @Phone -x 2014-01-10 2014-01-07 Download Todo.txt CLI @Computer diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.ts b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.ts deleted file mode 100644 index 545c6cf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.ts +++ /dev/null @@ -1,28 +0,0 @@ -class Animal { - constructor(public name) { } - move(meters) { - alert(this.name + " moved " + meters + "m."); - } -} - -class Snake extends Animal { - constructor(name) { super(name); } - move() { - alert("Slithering..."); - super.move(5); - } -} - -class Horse extends Animal { - constructor(name) { super(name); } - move() { - alert("Galloping..."); - super.move(45); - } -} - -var sam = new Snake("Sammy the Python") -var tom: Animal = new Horse("Tommy the Palomino") - -sam.move() -tom.move(34) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.u b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.u deleted file mode 100644 index 42c8590..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.u +++ /dev/null @@ -1,548 +0,0 @@ - // This is a one line comment. - /* an inner comment */ - - /* nested /* comments */ */ - - /* - /* - Multi-line. - */ - */ - -// Binary blob escape. -//"some text \B(3)("\") ouhyeah" == "\"\\\""; -"some text \B(3)("\") ouhyeah" == "\"\\\""; -'some text \B(3)('\') ouhyeah' == '\'\\\''; - -//"\B(4)()"'()"; -"\B(4)()"'()"; -'\B(4)()'"()'; - -//blob size limits -"hey ! \B(0)() oh !" - -//blob format is wrong -"hey ! \B(2)(aaa) oh !" -"hey ! \B(100)(aaa) oh !" - -//multiple blob in a string -"hey ! \B(3)(aaa) hey ! \B(3)(aaa) oh !" - -// multiple digits blob size -"hey ! \B(10)(aaaaaaaaaa) !" -"hey ! \B(10)(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) !" -"hey ! \B(100)(a) !" - -// multiple digits blob size -"hey ! \B(007)(aaaaaaa) !" -"hey ! \B(007)(aa) !" -"hey ! \B(007)(aaaaaaaaaaaaaaaaaa) !" - -// deprecated and restricted keyworks -emit Event.new; -static int main(); - -loopn (2) {echo("a");}; - -foreach (var i : [1,2,3,4]) { - echo(i); -}; - -function() {}; - -var 'if'; -var this.'else'; - -var '%x'; -var '1 2 3'; -var this.'[]'; - -// angles -pi == 180deg; -pi == 200grad; - -// Dictionary -[ => ]; // The empty dictionary - -// duration -1d == 24h; -0.5d == 12h; -1h == 60min; -1min == 60s; -1s == 1000ms; - -1s == 1; -1s 2s 3s == 6; -1s 1ms == 1.001; -1ms 1s == 1.001; - - - 1 == 1; - 1 == 1.0; - 1.2 == 1.2000; - 1.234e6 == 1234000; - 1e+11 == 1E+11; - 1e10 == 10000000000; - 1e30 == 1e10 * 1e10 * 1e10; - - -0.000001; - -0.0000001; - -0.00000000001; - -1e+3; - -1E-5; - - -1.; -// [00004701:error] !!! syntax error: unexpected ; - - 0x2a == 42; - 0x2A == 42; - 0xabcdef == 11259375; - 0xABCDEF == 11259375; -0xFFFFFFFF == 4294967295; - - -//123foo; -//[00005658:error] !!! syntax error: invalid token: '123foo' -//12.3foo; -//[00018827:error] !!! syntax error: invalid token: '12.3foo' -0xabcdef; -//[00060432] 11259375 -//0xabcdefg; -//[00061848:error] !!! syntax error: invalid token: '0xabcdefg' - - -[]; // The empty list -[1, 2, 3]; - -// Special characters. -"\"" == "\""; -"\\" == "\\"; - -// ASCII characters. -"\a" == "\007"; "\a" == "\x07"; -"\b" == "\010"; "\b" == "\x08"; -"\f" == "\014"; "\f" == "\x0c"; -"\n" == "\012"; "\n" == "\x0a"; -"\r" == "\015"; "\r" == "\x0d"; -"\t" == "\011"; "\t" == "\x09"; -"\v" == "\013"; "\v" == "\x0b"; - -// Octal escapes. -"\0" == "\00"; "\0" == "\000"; -"\0000" == "\0""0"; -"\062\063" == "23"; - -// Hexadecimal escapes. -"\x00" == "\0"; -"\x32\x33" == "23"; - - - -"foo" "bar" "baz" == "foobarbaz"; - -// Tuples -(); -[00000000] () -(1,); -[00000000] (1,) -(1, 2); -[00000000] (1, 2) -(1, 2, 3, 4,); -[00000000] (1, 2, 3, 4) - -function Global.verboseId(var x) -{ - echo(x) | x -}|; -class verboseId(Global).math : verboseId(Math) -{ -}; - -{ - for (3) - { - sleep(1s); - echo("ping"); - }, - sleep(0.5s); - for (3) - { - sleep(1s); - echo("pong"); - }, -}; - - 1 + 1 == 2; - 1 - 2 == -1; - 2 * 3 == 6; - 10 / 2 == 5; - 2 ** 10 == 1024; - -(1 + 2) == -3; - 1 + 2 * 3 == 7; - (1 + 2) * 3 == 9; - -2 ** 2 == -4; - - - - - 1 == 1; - -a = b -a += b -a -= b -a *= b -a /= b -a %= b -a ^= b - - -var value = 0|; -var valueAlias = value|; -value += 10; -valueAlias; -var myList = []|; -var myList.specialFeature = 42|; -myList += [1, 2, 3]; -myList.specialFeature; -var myOtherList = myList + [4, 5]; -myOtherList.specialFeature; -var something = []|; -var somethingElse = something|; -something += [1, 2]; -somethingElse += [3, 4]; -something; - - -class Counter -{ - var count = 0; - function init (n) { var this.count = n }; - // Display the value, and the identity. - function asString() { "%s @ %s" % [count, uid ] }; - function '+'(var n) { new(count + n) }; - function '-'(var n) { new(count - n) }; -}|; - - -class ImmutableCounter : Counter -{ - function '+='(var n) { this + n }; - function '-='(var n) { this - n }; -}|; - -var ic1 = ImmutableCounter.new(0); -var ic2 = ic1; - -ic1 += 1; -ic1; -ic2; - - -a << b -a >> b -a ^ b - -4 << 2 == 16; -4 >> 2 == 1; - -!a -a && b -a || b - -true && true; -true || false; -!true == false; -true || (1 / 0); -(false && (1 / 0)) == false; - -a == b -a != b -a === b -a !== b -a ~= b -a =~= b -a < b -a <= b -a > b -a >= b - -assert{ - ! (0 < 0); - 0 <= 0; - 0 == 0; - 0 !== 0; -}; - -a in b -a not in b -a[args] -a[args] = v - -1 in [0, 1, 2]; -3 not in [0, 1, 2]; - -"one" in ["zero" => 0, "one" => 1, "two" => 2]; -"three" not in ["zero" => 0, "one" => 1, "two" => 2]; - -a.b -a.b(args) -a->b -a->b = v -a.&b - -var obj = Object.new|; -function obj.f() { 24 }|; - - -var f = function(a, b) { - echo(b + a); -}| -f(1, 0); - - -function g3() -{ - return; // Stop execution at this point and return void - echo(0); // This is not executed -}| - -Object.setProperty, to define/set a property. -Object.getProperty, to get a property. -Object.removeProperty, to delete a property. -Object.hasProperty, to test for the existence of a property. -Object.properties, to get all the properties of a slot. - -enum Suit -{ - hearts, - diamonds, - clubs, - spades, // Last comma is optional -}; - -for (var suit in Suit) - echo("%s the ace of %s." % [find_ace(suit), suit]); - -switch ( ("foo", [1, 2]) ) -{ - // The pattern does not match the values of the list. - case ("foo", [2, 1]): - echo("fail"); - - // The pattern does not match the tuple. - case ["foo", [1, 2]]: - echo("fail"); - - // The pattern matches and binds the variable "l" - // but the condition is not verified. - case ("foo", var l) if l.size == 0: - echo("fail"); - - // The pattern matches. - case ("foo", [var a, var b]): - echo("foo(%s, %s)" % [a, b]); -}; -//[00000000] *** foo(1, 2) - -{ - ["b" => var b, "a" => var a] = ["a" => 1, "b" => 2, "c" => 3]; - echo("a = %d, b = %d" % [a, b]); -}; -//[00000000] *** a = 1, b = 2 - - -switch (["speed" => 2, "time" => 6s]) -{ - case ["speed" => var s] if s > 3: - echo("Too fast"); - case ["speed" => var s, "time" => var t] if s * t > 10: - echo("Too far"); -}; -//[00000000] *** Too far - - -try -{ - throw ("message", 0) -} -catch (var e if e.isA(Exception)) -{ - echo(e.message) -} -catch ((var msg, var value) if value.isA(Float)) -{ - echo("%s: %d" % [msg, value]) -}; -//[00000000] *** message: 0 - - -{ - var e = Event.new; - at (e?(var msg, var value) if value % 2 == 0) - echo("%s: %d" % [msg, value]); - - // Does not trigger the "at" because the guard is not verified. - e!("message", 1); - - // Trigger the "at". - e!("message", 2); -}; -//[00000000] *** message: 2 - -for (var i = 0; i < 8; i++) -{ - if (i % 2 != 0) - continue; - echo(i); -}; - -do (1024) -{ - assert(this == 1024); - assert(sqrt == 32); - setSlot("y", 23); -}.y; - -{ - var n = 10|; - var res = []|; - loop;{ - n--; - res << n; - if (n == 0) - break - }; - res -} - - -{ - var n = 10|; - var res = []|; - loop|{ - n--; - res << n; - if (n == 0) - break - }; - res -} - - -var j = 3| -while (0 < j) -{ - echo(j); - j--; -}; - - -{ - var i = 4| - while| (true) - { - i -= 1; - echo ("in: " + i); - if (i == 1) - break - else if (i == 2) - continue; - echo ("out: " + i); - }; -}; - - - -function test(e) -{ - try - { throw e; } - catch (0) - { echo("zero") } - catch ([var x, var y]) - { echo(x + y) } -} | {}; - -try { echo("try") } -catch { echo("catch")} -else { echo("else")}; - - -try -{ - echo("inside"); -} -finally -{ - echo("finally"); -}; -//[00000001] *** inside -//[00000002] *** finally - -at (e?(var start) ~ 1s) - echo("in : %s" % (time - start).round) -onleave - echo("out: %s" % (time - start).round); - -// This emission is too short to trigger the at. -e!(time); - -// This one is long enough. -// The body triggers 1s after the emission started. -e!(time) ~ 2s; -//[00001000] *** in : 1 -//[00002000] *** out: 2 - - -timeout (2.1s) - every (1s) - echo("Are you still there?"); -//[00000000] *** Are you still there? -//[00001000] *** Are you still there? -//[00002000] *** Are you still there? - - every| (1s) - { - echo("aba"); - }; - -for, (var i = 3; 0 < i; i -= 1) -{ - echo (i); -}; - - -for& (var i: [0, 1, 2]) -{ - echo (i * i); -}; - -loop,{ -}; - - -waituntil (e?(1, var b)); - -whenever (e?("arg", var arg) if arg % 2) - echo("e (%s) on" % arg) -else - echo("e off"); - - - while, (i) - { - var j = i -= 1; - }| - - -var y = 0; -{ - sleep(0.5s); - y = 100 smooth:3s, -}, - - - - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.weechatlog b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.weechatlog deleted file mode 100644 index 9f03616..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.weechatlog +++ /dev/null @@ -1,9 +0,0 @@ -**** Beginning of log 2007 Sep 01 00:23:55 **** -2007 Sep 01 00:23:55 --> weechat_user (weechat@localhost.) ist in den Channel &bitlbee gekommen -2007 Sep 01 00:23:55 -=- Modus &bitlbee [+t] durch localhost. -2007 Sep 01 00:23:55 -@- Nicks &bitlbee: [@root @weechat_user] -2007 Sep 01 00:23:55 -=- Channel &bitlbee: 2 Nicks (2 Operatoren, 0 Halb-Operator, 0 Gevoiceter, 0 normal) -2007 Sep 01 00:23:55 -=- Das Topic von &bitlbee lautet: "Welcome to the control channel. Type help for help information." -2007 Sep 01 00:23:55 <root> Welcome to the BitlBee gateway! -2007 Sep 01 00:23:55 <root> -2007 Sep 01 00:23:55 <root> If you've never used BitlBee before, please do read the help information using the help command. Lots of FAQ's are answered there. \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.xhtml b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.xhtml deleted file mode 100644 index a08cf75..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.xhtml +++ /dev/null @@ -1,376 +0,0 @@ -<html> - <head> - <script lang="javascript" type="text/javascript"> - // <!-- - function toggleVisible(element) { - if (element.style.display == 'block') { - element.style.display = 'none'; - } else { - element.style.display = 'block'; - } - return false; - } - // --> - </script> - <title>Error - - - -

Error

- - - -
Path: #{path}
-
#{CGI.escapeHTML(error.to_s)}
-
- Reload this page. - Go to the referer or the home page. -
-
- - In file '#{error.hot_file}' #{error.hot_file =~ /\.xhtml$/ ? '(line numbering is aproximate due to template transformation)' : nil}: -

- -
#{line}
- -
#{line}
- -
-

Stack Trace

- - - -

Request

- - -

Response

- - -

Session

- - -

- Powered by Nitro version #{Nitro::Version} - - - - - -

Home > System > #{"%plural%".humanize} > Edit #{"%name%".humanize}

- - Show editable - #{form_for @obj, :action => "#{base}/save", :cancel => "#{base}/list", :all => true} - - Show all - #{form_for @obj, :action => "#{base}/save", :cancel => "#{base}/list"} - -
-#{form_for(@%name%)} - - -

#{"%plural%".humanize}

-

New #{"%name%".humanize}

-
- Search #{"%plural%".humanize}:   -
- - - - - - - - - - - -
#{obj.to_s}#{obj.update_time.stamp(:db)}editdel
-
- - -

Home > System > #{"%plural%".humanize}

- New #{"%name%".humanize} -

-

- Search #{"%plural%".humanize}:   -
-

- - - - - - - - - - - -
#(obj.to_s)#{obj.update_time.stamp(:db)}editdel
-
- #{@pager.navigation} -
-
- - -

Home > System > #{"%plural%".humanize} > New #{"%name%".humanize}

- - Show editable - #{form_for @obj, :action => "#{base}/save", :cancel => "#{base}/list", :all => true, :enctype => "multipart/form-data"} - - Show all - #{form_for @obj, :action => "#{base}/save", :cancel => "#{base}/list", :enctype => "multipart/form-data"} - -
- - -

Home > System > #{"%plural%".humanize} > Search for '#@query'

-

-

- Search #{"%plural%".humanize}:   -
-

- -

Search method is not implemented for this object

- - - - - - - - - - - - -
#(obj.to_s)#{obj.update_time.stamp(:db)}editdel
-
- #{@pager.navigation} -
- -
- - -

View %name%

-

List of %plural%

- - #{@obj.to_yaml} - -
-Access denied - - -

Home > System

- -

Og managed classes

- - - - - - - - - - - - - - - - - -
ClassCountCleanupProperties
#{c.name}#{c.count}deletedestroy#{c.properties.values.join(', ')}
- -

System configuration

- - - - - - - - - - - - - - - - -
NameValueTypeDescription
#{s.owner}.#{s.name}#{s.value.inspect}#{s.type}#{s.options[:doc]}
-
- - - - - Test - - - - - - - -hello -Hello #{username} - -how do you feel? - -Here is your Token: #{token} - -
- -

Questions with Tags: #{@tags.join(" ")}

- - 0 ?> - - Too many results for that Tag, please reduce the number by using one of the following Tags: - #{cloud_of(@qtags)} - -
- -

#{q.question}

-

- - #{excerpt} -

-

#{q.answers.size.to_i} answers

- -
-
- #{@qpager.navigation} -
- -
-

no question with this/these tag(s) found

-

Ask a question here.

-
- - - 0 ?> -

Tips with Tags: #{@tags.join(" ")}

- - Too many results for that Tag, please reduce the number by using one of the following Tags: - #{cloud_of(@ttags)} - -
- -

#{t.title}

-

- - #{excerpt} -

- -
-
- #{@tpager.navigation} -
- - - 0 ?> -

Tutorials with Tags: #{@tags.join(" ")}

- - Too many results for that Tag, please reduce the number by using one of the following Tags: - #{cloud_of(@tuttags)} - -
- -

#{t.title}

-

- - #{excerpt} -

- -
-
- #{@tpager.navigation} -
- - - - -
- - - #{t.name} - -
- -
- - -
- - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.xtend b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.xtend deleted file mode 100644 index f6a51f7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.xtend +++ /dev/null @@ -1,34 +0,0 @@ -package beer - -import static extension beer.BottleSupport.* -import org.junit.Test - -class BottleSong { - - @Test - def void singIt() { - println(singTheSong(99)) - } - - def singTheSong(int all) ''' - «FOR i : all .. 1» - «i.Bottles» of beer on the wall, «i.bottles» of beer. - Take one down and pass it around, «(i - 1).bottles» of beer on the wall. - - «ENDFOR» - No more bottles of beer on the wall, no more bottles of beer. - Go to the store and buy some more, «all.bottles» of beer on the wall. - ''' - - def private java.lang.String bottles(int i) { - switch i { - case 0 : 'no more bottles' - case 1 : 'one bottle' - default : '''«i» bottles''' - }.toString - } - - def String Bottles(int i) { - bottles(i).toFirstUpper - } -} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.yaml b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.yaml deleted file mode 100644 index 9c0ed9d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example.yaml +++ /dev/null @@ -1,302 +0,0 @@ - -# -# Examples from the Preview section of the YAML specification -# (http://yaml.org/spec/1.2/#Preview) -# - -# Sequence of scalars ---- -- Mark McGwire -- Sammy Sosa -- Ken Griffey - -# Mapping scalars to scalars ---- -hr: 65 # Home runs -avg: 0.278 # Batting average -rbi: 147 # Runs Batted In - -# Mapping scalars to sequences ---- -american: - - Boston Red Sox - - Detroit Tigers - - New York Yankees -national: - - New York Mets - - Chicago Cubs - - Atlanta Braves - -# Sequence of mappings ---- -- - name: Mark McGwire - hr: 65 - avg: 0.278 -- - name: Sammy Sosa - hr: 63 - avg: 0.288 - -# Sequence of sequences ---- -- [name , hr, avg ] -- [Mark McGwire, 65, 0.278] -- [Sammy Sosa , 63, 0.288] - -# Mapping of mappings ---- -Mark McGwire: {hr: 65, avg: 0.278} -Sammy Sosa: { - hr: 63, - avg: 0.288 - } - -# Two documents in a stream ---- # Ranking of 1998 home runs -- Mark McGwire -- Sammy Sosa -- Ken Griffey ---- # Team ranking -- Chicago Cubs -- St Louis Cardinals - -# Documents with the end indicator ---- -time: 20:03:20 -player: Sammy Sosa -action: strike (miss) -... ---- -time: 20:03:47 -player: Sammy Sosa -action: grand slam -... - -# Comments ---- -hr: # 1998 hr ranking - - Mark McGwire - - Sammy Sosa -rbi: - # 1998 rbi ranking - - Sammy Sosa - - Ken Griffey - -# Anchors and aliases ---- -hr: - - Mark McGwire - # Following node labeled SS - - &SS Sammy Sosa -rbi: - - *SS # Subsequent occurrence - - Ken Griffey - -# Mapping between sequences ---- -? - Detroit Tigers - - Chicago cubs -: - - 2001-07-23 -? [ New York Yankees, - Atlanta Braves ] -: [ 2001-07-02, 2001-08-12, - 2001-08-14 ] - -# Inline nested mapping ---- -# products purchased -- item : Super Hoop - quantity: 1 -- item : Basketball - quantity: 4 -- item : Big Shoes - quantity: 1 - -# Literal scalars ---- | # ASCII art - \//||\/|| - // || ||__ - -# Folded scalars ---- > - Mark McGwire's - year was crippled - by a knee injury. - -# Preserved indented block in a folded scalar ---- -> - Sammy Sosa completed another - fine season with great stats. - - 63 Home Runs - 0.288 Batting Average - - What a year! - -# Indentation determines scope ---- -name: Mark McGwire -accomplishment: > - Mark set a major league - home run record in 1998. -stats: | - 65 Home Runs - 0.278 Batting Average - -# Quoted scalars ---- -unicode: "Sosa did fine.\u263A" -control: "\b1998\t1999\t2000\n" -hex esc: "\x0d\x0a is \r\n" -single: '"Howdy!" he cried.' -quoted: ' # not a ''comment''.' -tie-fighter: '|\-*-/|' - -# Multi-line flow scalars ---- -plain: - This unquoted scalar - spans many lines. -quoted: "So does this - quoted scalar.\n" - -# Integers ---- -canonical: 12345 -decimal: +12_345 -sexagesimal: 3:25:45 -octal: 014 -hexadecimal: 0xC - -# Floating point ---- -canonical: 1.23015e+3 -exponential: 12.3015e+02 -sexagesimal: 20:30.15 -fixed: 1_230.15 -negative infinity: -.inf -not a number: .NaN - -# Miscellaneous ---- -null: ~ -true: boolean -false: boolean -string: '12345' - -# Timestamps ---- -canonical: 2001-12-15T02:59:43.1Z -iso8601: 2001-12-14t21:59:43.10-05:00 -spaced: 2001-12-14 21:59:43.10 -5 -date: 2002-12-14 - -# Various explicit tags ---- -not-date: !!str 2002-04-28 -picture: !!binary | - R0lGODlhDAAMAIQAAP//9/X - 17unp5WZmZgAAAOfn515eXv - Pz7Y6OjuDg4J+fn5OTk6enp - 56enmleECcgggoBADs= -application specific tag: !something | - The semantics of the tag - above may be different for - different documents. - -# Global tags -%TAG ! tag:clarkevans.com,2002: ---- !shape - # Use the ! handle for presenting - # tag:clarkevans.com,2002:circle -- !circle - center: &ORIGIN {x: 73, y: 129} - radius: 7 -- !line - start: *ORIGIN - finish: { x: 89, y: 102 } -- !label - start: *ORIGIN - color: 0xFFEEBB - text: Pretty vector drawing. - -# Unordered sets ---- !!set -# sets are represented as a -# mapping where each key is -# associated with the empty string -? Mark McGwire -? Sammy Sosa -? Ken Griff - -# Ordered mappings ---- !!omap -# ordered maps are represented as -# a sequence of mappings, with -# each mapping having one key -- Mark McGwire: 65 -- Sammy Sosa: 63 -- Ken Griffy: 58 - -# Full length example ---- ! -invoice: 34843 -date : 2001-01-23 -bill-to: &id001 - given : Chris - family : Dumars - address: - lines: | - 458 Walkman Dr. - Suite #292 - city : Royal Oak - state : MI - postal : 48046 -ship-to: *id001 -product: - - sku : BL394D - quantity : 4 - description : Basketball - price : 450.00 - - sku : BL4438H - quantity : 1 - description : Super Hoop - price : 2392.00 -tax : 251.42 -total: 4443.52 -comments: - Late afternoon is best. - Backup contact is Nancy - Billsmer @ 338-4338. - -# Another full-length example ---- -Time: 2001-11-23 15:01:42 -5 -User: ed -Warning: - This is an error message - for the log file ---- -Time: 2001-11-23 15:02:31 -5 -User: ed -Warning: - A slightly different error - message. ---- -Date: 2001-11-23 15:03:17 -5 -User: ed -Fatal: - Unknown variable "bar" -Stack: - - file: TopClass.py - line: 23 - code: | - x = MoreObject("345\n") - - file: MoreClass.py - line: 58 - code: |- - foo = bar - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example2.aspx b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example2.aspx deleted file mode 100644 index 52b7c00..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example2.aspx +++ /dev/null @@ -1,29 +0,0 @@ -<%@ Register TagPrefix="Acme" TagName="Message" Src="userctrl2_vb.ascx" %> - - - - - - - -

A Simple User Control w/ Properties

- -
- - - -

- - - - - - - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example2.msc b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example2.msc deleted file mode 100644 index 61e2ef8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example2.msc +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/mscgen -Tpng -# -# testinput2.msc : Sample msc input file with URLs -# -# This file is PUBLIC DOMAIN and may be freely reproduced, distributed, -# transmitted, used, modified, built upon, or otherwise exploited by -# anyone for any purpose, commercial or non-commercial, and in any way, -# including by methods that have not yet been invented or conceived. -# -# This file is provided "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER -# EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -# - -# Note: This is from mscgen-0.20 - -msc { - -A,B; - ---- [label="Start", ID="1"]; - -A->B [label="signal"]; -A<-B [label="signal"]; - - -A=>B [label="method"]; -A<=B [label="method"]; - -A>>B [label="return"]; -A<>B [label="call-back"]; -A<<=B [label="call-back", URL="www.google.com"]; - -A x- B [label="loss"]; -A -x B [label="loss"]; - ---- [label="Left arcs", ID="2", IDURL="www.google.co.uk"]; - -A->A [label="signal"]; -A<-A [label="signal"]; - - -A=>A [label="method"]; -A<=A [label="method"]; - -A>>A [label="return"]; -A<>A [label="call-back"]; -A<<=A [label="call-back", URL="www.google.com", ID="3"]; - -A x- A [label="loss"]; -A -x A [label="loss"]; - ---- [label="Right arcs"]; - -B->B [label="signal"]; -B<-B [label="signal"]; - - -B=>B [label="method"]; -B<=B [label="method"]; - -B>>B [label="return"]; -B<>B [label="call-back", ID="4"]; -B<<=B [label="call-back", URL="www.google.com"]; - -B x- B [label="loss"]; -B -x B [label="loss"]; - ---- [label="End of arcs", URL="www.google.com"]; - - -... [label="Some time passes", URL="www.google.com"]; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/exampleScript.cfc b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/exampleScript.cfc deleted file mode 100644 index 002acbc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/exampleScript.cfc +++ /dev/null @@ -1,241 +0,0 @@ - -/** -******************************************************************************** -ContentBox - A Modular Content Platform -Copyright 2012 by Luis Majano and Ortus Solutions, Corp -www.gocontentbox.org | www.luismajano.com | www.ortussolutions.com -******************************************************************************** -Apache License, Version 2.0 - -Copyright Since [2012] [Luis Majano and Ortus Solutions,Corp] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -******************************************************************************** -* A generic content service for content objects -*/ -component extends="coldbox.system.orm.hibernate.VirtualEntityService" singleton{ - - // DI - property name="settingService" inject="id:settingService@cb"; - property name="cacheBox" inject="cachebox"; - property name="log" inject="logbox:logger:{this}"; - property name="customFieldService" inject="customFieldService@cb"; - property name="categoryService" inject="categoryService@cb"; - property name="commentService" inject="commentService@cb"; - property name="contentVersionService" inject="contentVersionService@cb"; - property name="authorService" inject="authorService@cb"; - property name="populator" inject="wirebox:populator"; - property name="systemUtil" inject="SystemUtil@cb"; - - /* - * Constructor - * @entityName.hint The content entity name to bind this service to. - */ - ContentService function init(entityName="cbContent"){ - // init it - super.init(entityName=arguments.entityName, useQueryCaching=true); - - // Test scope coloring in pygments - this.colorTestVar = "Just for testing pygments!"; - cookie.colorTestVar = ""; - client.colorTestVar = "" - session.colorTestVar = ""; - application.colorTestVar = ""; - - return this; - } - - /** - * Clear all content caches - * @async.hint Run it asynchronously or not, defaults to false - */ - function clearAllCaches(boolean async=false){ - var settings = settingService.getAllSettings(asStruct=true); - // Get appropriate cache provider - var cache = cacheBox.getCache( settings.cb_content_cacheName ); - cache.clearByKeySnippet(keySnippet="cb-content",async=arguments.async); - return this; - } - - /** - * Clear all page wrapper caches - * @async.hint Run it asynchronously or not, defaults to false - */ - function clearAllPageWrapperCaches(boolean async=false){ - var settings = settingService.getAllSettings(asStruct=true); - // Get appropriate cache provider - var cache = cacheBox.getCache( settings.cb_content_cacheName ); - cache.clearByKeySnippet(keySnippet="cb-content-pagewrapper",async=arguments.async); - return this; - } - - /** - * Clear all page wrapper caches - * @slug.hint The slug partial to clean on - * @async.hint Run it asynchronously or not, defaults to false - */ - function clearPageWrapperCaches(required any slug, boolean async=false){ - var settings = settingService.getAllSettings(asStruct=true); - // Get appropriate cache provider - var cache = cacheBox.getCache( settings.cb_content_cacheName ); - cache.clearByKeySnippet(keySnippet="cb-content-pagewrapper-#arguments.slug#",async=arguments.async); - return this; - } - - /** - * Clear a page wrapper cache - * @slug.hint The slug to clean - * @async.hint Run it asynchronously or not, defaults to false - */ - function clearPageWrapper(required any slug, boolean async=false){ - var settings = settingService.getAllSettings(asStruct=true); - // Get appropriate cache provider - var cache = cacheBox.getCache( settings.cb_content_cacheName ); - cache.clear("cb-content-pagewrapper-#arguments.slug#/"); - return this; - } - - /** - * Searches published content with cool paramters, remember published content only - * @searchTerm.hint The search term to search - * @max.hint The maximum number of records to paginate - * @offset.hint The offset in the pagination - * @asQuery.hint Return as query or array of objects, defaults to array of objects - * @sortOrder.hint The sorting of the search results, defaults to publishedDate DESC - * @isPublished.hint Search for published, non-published or both content objects [true, false, 'all'] - * @searchActiveContent.hint Search only content titles or both title and active content. Defaults to both. - */ - function searchContent( - any searchTerm="", - numeric max=0, - numeric offset=0, - boolean asQuery=false, - any sortOrder="publishedDate DESC", - any isPublished=true, - boolean searchActiveContent=true){ - - var results = {}; - var c = newCriteria(); - - // only published content - if( isBoolean( arguments.isPublished ) ){ - // Published bit - c.isEq( "isPublished", javaCast( "Boolean", arguments.isPublished ) ); - // Published eq true evaluate other params - if( arguments.isPublished ){ - c.isLt("publishedDate", now() ) - .$or( c.restrictions.isNull("expireDate"), c.restrictions.isGT("expireDate", now() ) ) - .isEq("passwordProtection",""); - } - } - - // Search Criteria - if( len( arguments.searchTerm ) ){ - // like disjunctions - c.createAlias("activeContent","ac"); - // Do we search title and active content or just title? - if( arguments.searchActiveContent ){ - c.$or( c.restrictions.like("title","%#arguments.searchTerm#%"), - c.restrictions.like("ac.content", "%#arguments.searchTerm#%") ); - } - else{ - c.like( "title", "%#arguments.searchTerm#%" ); - } - } - - // run criteria query and projections count - results.count = c.count( "contentID" ); - results.content = c.resultTransformer( c.DISTINCT_ROOT_ENTITY ) - .list(offset=arguments.offset, max=arguments.max, sortOrder=arguments.sortOrder, asQuery=arguments.asQuery); - - return results; - } - -/********************************************* PRIVATE *********************************************/ - - - /** - * Update the content hits - * @contentID.hint The content id to update - */ - private function syncUpdateHits(required contentID){ - var q = new Query(sql="UPDATE cb_content SET hits = hits + 1 WHERE contentID = #arguments.contentID#").execute(); - return this; - } - - - private function closureTest(){ - methodCall( - param1, - function( arg1, required arg2 ){ - var settings = settingService.getAllSettings(asStruct=true); - // Get appropriate cache provider - var cache = cacheBox.getCache( settings.cb_content_cacheName ); - cache.clear("cb-content-pagewrapper-#arguments.slug#/"); - return this; - }, - param1 - ); - } - - private function StructliteralTest(){ - return { - foo = bar, - brad = 'Wood', - func = function( arg1, required arg2 ){ - var settings = settingService.getAllSettings(asStruct=true); - // Get appropriate cache provider - var cache = cacheBox.getCache( settings.cb_content_cacheName ); - cache.clear("cb-content-pagewrapper-#arguments.slug#/"); - return this; - }, - array = [ - 1, - 2, - 3, - 4, - 5, - 'test', - 'testing', - 'testerton', - { - foo = true, - brad = false, - wood = null - } - ], - last = "final" - }; - } - - private function arrayliteralTest(){ - return [ - 1, - 2, - 3, - 4, - 5, - 'test', - 'testing', - 'testerton', - { - foo = true, - brad = false, - wood = null - }, - 'testy-von-testavich' - ]; - } - -} - \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/exampleTag.cfc b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/exampleTag.cfc deleted file mode 100644 index 753bb82..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/exampleTag.cfc +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example_elixir.ex b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example_elixir.ex deleted file mode 100644 index 0912d09..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example_elixir.ex +++ /dev/null @@ -1,205 +0,0 @@ -# Numbers -0b0101011 -1234 ; 0x1A ; 0xbeef ; 0763 -3.14 ; 5.0e21 ; 0.5e-12 -100_000_000 - -# Characters -?a ; ?1 ; ?\n ; ?\s ; ?\c ; ? ; ?, -?\x{12} ; ?\x{abcd} -?\x34 ; ?\xf -?\123 ; ?\12 ; ?\7 - -# Atoms -:this ; :that -:'complex atom' -:"with' \"\" 'quotes" -:" multi - line ' \s \123 \xff -atom" -:... ; :<<>> ; :%{} ; :% ; :{} -:++; :--; :*; :~~~ - -# Strings -"Hello world" -"Interspersed \x{ff} codes \7 \8 \65 \016 and \t\s\z\+ \\ escapes" -"Quotes ' inside \" \123 the \"\" \xF string \\\" end" -"Multiline - string" - -# Char lists -'this is a list' -'escapes \' \t \\\'' -'Multiline - char - list -' - -# Binaries -<<1, 2, 3>> -<<"hello"::binary, c :: utf8, x::[4, unit(2)]>> = "hello™1" - -# Sigils -~r/this + i\s "a" regex/ -~R'this + i\s "a" regex too' -~w(hello #{ ["has" <> "123", '\c\d', "\123 interpol" | []] } world)s -~W(hello #{no "123" \c\d \123 interpol} world)s - -~S"No escapes \s\t\n and no #{interpolation}" - -:"atoms work #{"to" <> "o"}" - -# Operators -x = 1 + 2.0 * 3 -y = true and false; z = false xor true -... = 144 -... == !x && y || z -"hello" |> String.upcase |> String.downcase() -{^z, a} = {true, x} - -# Lists, tuples, maps, keywords -[1, :a, 'hello'] ++ [2, 3] -[:head | [?t, ?a, ?i, ?l]] - -{:one, 2.0, "three"} - -[...: "this", <<>>: "is", %{}: "a keyword", %: "list", {}: "too"] -["this is an atom too": 1, "so is this": 2] -[option: "value", key: :word] -[++: "operator", ~~~: :&&&] - -map = %{shortcut: "syntax"} -%{map | "update" => "me"} -%{ 12 => 13, :weird => ['thing'] } - -# Comprehensions -for x <- 1..10, x < 5, do: {x, x} -pixels = "12345678" -for << <> <- pixels >> do - [r, {g, %{"b" => a}}] -end - -# String interpolation -"String #{inspect "interpolation"} is quite #{1+4+7} difficult" - -# Modules -defmodule Long.Module.Name do - @moduledoc "Simple module docstring" - - @doc """ - Multiline docstring - "with quotes" - and #{ %{"interpolation" => "in" <> "action"} } - """ - defstruct [:a, :name, :height] - - @doc ~S''' - No #{interpolation} of any kind. - \000 \x{ff} - - \n #{\x{ff}} - ''' - def func(a, b \\ []), do: :ok - - @doc false - def __before_compile__(_) do - :ok - end -end - -# Structs -defmodule Second.Module do - s = %Long.Module.Name{name: "Silly"} - %{s | height: {192, :cm}} -end - -# Types, pseudo-vars, attributes -defmodule M do - @custom_attr :some_constant - - @before_compile Long.Module.Name - - @typedoc "This is a type" - @type typ :: integer - - @typedoc """ - Another type - """ - @opaque typtyp :: 1..10 - - @spec func(typ, typtyp) :: :ok | :fail - def func(a, b) do - a || b || :ok || :fail - Path.expand("..", __DIR__) - IO.inspect __ENV__ - __NOTAPSEUDOVAR__ = 11 - __MODULE__.func(b, a) - end - - defmacro m() do - __CALLER__ - end -end - -# Functions -anon = fn x, y, z -> - fn(a, b, c) -> - &(x + y - z * a / &1 + b + div(&2, c)) - end -end - -&Set.put(&1, &2) ; & Set.put(&1, &2) ; &( Set.put(&1, &1) ) - -# Function calls -anon.(1, 2, 3); self; hd([1,2,3]) -Kernel.spawn(fn -> :ok end) -IO.ANSI.black - -# Control flow -if :this do - :that -else - :otherwise -end - -pid = self -receive do - {:EXIT, _} -> :done - {^pid, :_} -> nil - after 100 -> :no_luck -end - -case __ENV__.line do - x when is_integer(x) -> x - x when x in 1..12 -> -x -end - -cond do - false -> "too bad" - 4 > 5 -> "oops" - true -> nil -end - -# Lexical scope modifiers -import Kernel, except: [spawn: 1, +: 2, /: 2, Unless: 2] -alias Long.Module.Name, as: Namen -use Bitwise - -4 &&& 5 -2 <<< 3 - -# Protocols -defprotocol Useless do - def func1(this) - def func2(that) -end - -defimpl Useless, for: Atom do -end - -# Exceptions -defmodule NotAnError do - defexception [:message] -end - -raise NotAnError, message: "This is not an error" diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example_file.fy b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example_file.fy deleted file mode 100644 index 43e80c1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/example_file.fy +++ /dev/null @@ -1,128 +0,0 @@ -class Person { - def initialize: @name age: @age { - """ - This is a docstring for the Person constructor method. - Docstrings usually are multi-line, like this one. - """ - } - - def to_s { - # return is optional in this case, but we use it nontheless - return "Person with name: #{@name inspect} and age: #{@age}" - } -} - -class PersonWithCity : Person { - def initialize: @name age: @age city: @city { - } - - def to_s { - super to_s ++ " living in: #{@city inspect}" - } -} - -p1 = Person new: "Johnny Jackson" age: 42 -p1 println # prints: Person with name: "Johnny Jackson" and age: 42 - -p2 = PersonWithCity new: "John Appleseed" age: 55 city: "New York" -p2 println # prints: Person with name: "John Appleseed" age: 55 living in: "New York" - -array = [1,2,3, "foo", 'bar] -hash = <['foo => "bar", 'bar => 42]> -tuple = (1,2,"hello","world") -block = |x, y| { - x + y println -} -block call: [4,2] - -0b010101 & 0b00101 to_s: 2 . println -0xFF & 0xAB to_s: 16 . println -0o77 > 0o76 println -123.123 + 0.222 println - -x = 0 -try { - 10 / x println -} catch ZeroDivisionError => e { - x = 3 - retry -} finally { - "Finally, done!" println -} - -def a_method: arg1 with_default_arg: arg2 (42) { - arg1 * arg2 println -} - -a_method: 42 -a_method: 42 with_default_arg: 85 - -class ClassWithClassMethod { - def self class_method1 { - 'works - } - - def ClassWithClassMethod class_method2 { - 'this_as_well - } -} - -ClassWithClassMethod class_method1 println -ClassWithClassMethod class_method2 println - -def another_method: block { - 1 upto: 10 . map: block -} - -# local returns -another_method: |x| { return_local x * 2 } . inspect println - - -# pattern matching: -class PatternMatching { - def match_it: obj { - match obj { - case String -> "It's a String!" println - case Fixnum -> "It's a Number!" println - case _ -> "Aything else!" println - } - } - - def match_with_extract: str { - match str { - # m holds the MatchData object, m1 & m2 the first and second matches - case /^(.*) : (.*)$/ -> |m, m1, m2| - "First match: #{m1}" println - "Second match: #{m2}" println - } - } -} - -pm = PatternMatching new -pm match_it: "foo" -pm match_it: 42 -pm match_it: 'foo - -pm match_with_extract: "Hello : World!" - - -# calling ruby methods: -[3, 2, 1] reverse() each() |a| { puts(a) } -"Hello" sub("ll", "y") println -[3, 2, 1] map() |a| { a * 2 } inject(0) |s i| { s + i } println - -# test symbol highlighting -['foo] -['foo?!] -{'foo} -{'foo!?} -{'foo:bar?!=&/:} -('foo) - -# future sends -42 @ to_s class println -42 @ to_s: 16 . value println - -# async sends -42 @@ println -42 @@ upto: 100 diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/firefox.mak b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/firefox.mak deleted file mode 100644 index 4dc0f16..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/firefox.mak +++ /dev/null @@ -1,586 +0,0 @@ -# -# ***** BEGIN LICENSE BLOCK ***** -# Version: MPL 1.1/GPL 2.0/LGPL 2.1 -# -# The contents of this file are subject to the Mozilla Public License Version -# 1.1 (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# http://www.mozilla.org/MPL/ -# -# Software distributed under the License is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -# for the specific language governing rights and limitations under the -# License. -# -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# -# Alternatively, the contents of this file may be used under the terms of -# either the GNU General Public License Version 2 or later (the "GPL"), or -# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -# in which case the provisions of the GPL or the LGPL are applicable instead -# of those above. If you wish to allow use of your version of this file only -# under the terms of either the GPL or the LGPL, and not to allow others to -# use your version of this file under the terms of the MPL, indicate your -# decision by deleting the provisions above and replace them with the notice -# and other provisions required by the GPL or the LGPL. If you do not delete -# the provisions above, a recipient may use your version of this file under -# the terms of any one of the MPL, the GPL or the LGPL. -# -# ***** END LICENSE BLOCK ***** - -DEPTH = . -topsrcdir = @top_srcdir@ -srcdir = @srcdir@ -VPATH = @srcdir@ - -include $(DEPTH)/config/autoconf.mk - -include $(topsrcdir)/build/unix/modules.mk - -ifeq ($(BUILD_MODULES),all) -# -# And now for something completely different... -# Divide the default build into tiers. -# Tiers must be defined on module boundaries -# -SUPPRESS_DEFAULT_RULES = 1 - -default alldep all:: $(SUBMAKEFILES) - $(RM) -rf $(DIST)/sdk - $(RM) -rf $(DIST)/include - $(MAKE) -C config export - $(MAKE) nspr - $(MAKE) ldap - $(MAKE) tier_0 - $(MAKE) tier_1 - $(MAKE) tier_2 - $(MAKE) tier_9 - $(MAKE) tier_50 - $(MAKE) tier_99 - -# Make sure that the existing rulesets work -DIRS = \ - $(tier_0_dirs) \ - $(tier_1_dirs) \ - $(tier_2_dirs) \ - $(tier_9_dirs) \ - $(tier_50_dirs) \ - $(NULL) - -ifdef GC_LEAK_DETECTOR -DIRS += gc/boehm -endif - -DIRS += $(tier_99_dirs) - -# -# tier 0 - base build config dirs -# -tier_0_dirs = \ - config \ - build \ - $(NULL) - -# -# tier 1 - 3rd party individual libraries -# -tier_1_dirs += dbm - -ifndef MOZ_NATIVE_JPEG -tier_1_dirs += jpeg -endif - -ifndef MOZ_NATIVE_ZLIB -tier_1_dirs += modules/zlib -endif - -# Installer needs standalone libjar, hence standalone zlib -ifdef MOZ_INSTALLER -tier_1_dirs += modules/zlib/standalone -endif - -ifdef MOZ_UPDATER -tier_1_dirs += modules/libbz2 -tier_1_dirs += modules/libmar -endif - -ifdef MOZ_SVG_RENDERER_LIBART -tier_1_dirs += other-licenses/libart_lgpl -endif - -# -# tier 2 - base libraries -# -tier_2_dirs = \ - js \ - xpcom \ - $(NULL) - -ifndef MOZ_NO_XPCOM_OBSOLETE -tier_2_dirs += modules/libreg xpcom/obsolete -endif - -ifdef NS_TRACE_MALLOC -tier_2_dirs += tools/trace-malloc/lib -endif - -# -# tier 9 - core components (necko,gecko) -# - -tier_9_dirs += \ - js/src/xpconnect \ - intl \ - db \ - $(NULL) - -ifdef MOZ_STORAGE -tier_9_dirs += storage -endif - -ifdef MOZ_ENABLE_XLIB -tier_9_dirs += gfx/src/xlibrgb widget/src/xlibxtbin -endif - -ifdef MOZ_ENABLE_GTK -tier_9_dirs += widget/src/gtksuperwin widget/src/gtkxtbin -endif - -ifdef MOZ_ENABLE_GTK2 -tier_9_dirs += widget/src/gtkxtbin -endif - -ifdef MOZ_IPCD -tier_9_dirs += ipc/ipcd -endif - -ifdef MOZ_JSDEBUGGER -tier_9_dirs += js/jsd -endif - -tier_9_dirs += \ - modules/libutil \ - netwerk \ - modules/libjar \ - uriloader \ - modules/libpref \ - modules/libimg \ - caps \ - rdf \ - parser/expat \ - parser/xml \ - parser/htmlparser \ - gfx \ - modules/libpr0n \ - sun-java \ - modules/plugin \ - dom \ - view \ - widget \ - content \ - layout \ - xpfe/components/shistory \ - docshell \ - webshell \ - embedding \ - editor \ - xpfe/appshell \ - $(NULL) - -ifdef MOZ_OJI -tier_9_dirs += \ - js/src/liveconnect \ - modules/oji \ - $(NULL) -endif - -ifdef ACCESSIBILITY -tier_9_dirs += accessible -endif - -# -# tier 50 - xpfe & toolkit -# - -ifdef MOZ_XUL -ifdef MOZ_XUL_APP -tier_50_dirs += chrome -else -tier_50_dirs += rdf/chrome -endif -else -tier_50_dirs += embedding/minimo/chromelite -endif - -tier_50_dirs += profile - -# This must preceed xpfe -ifdef MOZ_JPROF -tier_50_dirs += tools/jprof -endif - -ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT))) -tier_50_dirs += xpfe/bootstrap/appleevents -endif - -tier_50_dirs += \ - xpfe \ - toolkit/components \ - $(NULL) - -ifndef MOZ_XUL_APP -tier_50_dirs += themes -endif - -ifdef MOZ_ENABLE_XREMOTE -tier_50_dirs += widget/src/xremoteclient -endif - -ifdef MOZ_XUL_APP -tier_50_dirs += toolkit -endif - -ifdef MOZ_PHOENIX -#XXXBlake this shell path is a temp hack; toolkit shouldn't depend on browser -tier_50_dirs += browser/components/shell/public -endif - -ifdef MOZ_XPINSTALL -tier_50_dirs += xpinstall -endif - -# JavaXPCOM JNI code is compiled into libXUL -ifdef MOZ_JAVAXPCOM -tier_50_dirs += extensions/java/xpcom/src -endif - -ifdef MOZ_ENABLE_LIBXUL -tier_50_dirs += \ - toolkit/library \ - xpcom/stub \ - $(NULL) -endif - -ifdef NS_TRACE_MALLOC -tier_50_dirs += tools/trace-malloc -endif - -ifdef MOZ_PSM -tier_50_dirs += security/manager -else -tier_50_dirs += security/manager/boot/public security/manager/ssl/public -endif - -ifdef MOZ_LDAP_XPCOM -tier_50_dirs += directory/xpcom -endif - -ifndef MINIMO -ifdef MOZ_XUL_APP -ifdef MOZ_ENABLE_GTK2 -tier_50_dirs += toolkit/components/gnome -endif -endif -endif - -ifdef MOZ_LEAKY -tier_50_dirs += tools/leaky -endif - -ifdef MOZ_MAPINFO -tier_50_dirs += tools/codesighs -endif - -# -# tier 99 - application features -# - -ifdef MOZ_MAIL_NEWS -tier_99_dirs += mailnews -endif - -ifdef MOZ_CALENDAR -tier_99_dirs += calendar -endif - -ifdef MOZ_EXTENSIONS -tier_99_dirs += extensions -endif - -ifdef MOZ_JAVAXPCOM -tier_99_dirs += extensions/java -endif - -# axcontrol -ifeq ($(OS_ARCH),WINNT) -ifndef MOZ_NO_ACTIVEX_SUPPORT -tier_99_dirs += \ - embedding/browser/activex/src/control \ - embedding/browser/activex/src/control_kicker \ - $(NULL) -endif -endif - -# Java Embedding Plugin -ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT))) -tier_99_dirs += plugin/oji/JEP -endif - -ifneq (,$(filter browser suite,$(MOZ_BUILD_APP))) -tier_99_dirs += xpfe/components/search -endif - -ifdef MOZ_BRANDING_DIRECTORY -tier_99_dirs += $(MOZ_BRANDING_DIRECTORY) -endif - -ifdef MOZ_PHOENIX -tier_99_dirs += browser xpfe/bootstrap/init.d -endif - -ifdef MOZ_XULRUNNER -tier_99_dirs += xulrunner -endif - -ifdef MOZ_COMPOSER -tier_99_dirs += editor/ui -endif - -ifdef MOZ_THUNDERBIRD -tier_99_dirs += mail xpfe/bootstrap/init.d -endif - -ifdef MOZ_STANDALONE_COMPOSER -tier_99_dirs += composer -endif - -ifdef MOZ_SUNBIRD -tier_99_dirs += calendar/sunbird -endif - -ifdef MOZ_SUITE -tier_99_dirs += suite -endif - -ifdef MINIMO -tier_99_dirs += minimo -endif - -ifdef MOZ_XUL_APP -ifdef MOZ_INSTALLER -tier_99_dirs += toolkit/mozapps/installer -endif -else -ifneq (,$(MOZ_XPFE_COMPONENTS)$(MOZ_XUL)) -ifndef MINIMO -tier_99_dirs += xpfe/bootstrap -endif -endif -endif - -ifneq (,$(MOZ_ENABLE_GTK)$(MOZ_ENABLE_GTK2)) -tier_99_dirs += embedding/browser/gtk -endif - -# viewer -ifneq (,$(ENABLE_TESTS)) -ifndef MOZ_ENABLE_LIBXUL -tier_99_dirs += webshell/tests -endif -endif - -# winembed, mfcembed -ifeq ($(OS_ARCH),WINNT) -ifneq (,$(ENABLE_TESTS)$(MOZILLA_OFFICIAL)) -tier_99_dirs += embedding/tests -endif -endif - -# os2embed -ifeq ($(OS_ARCH),OS2) -ifneq (,$(ENABLE_TESTS)$(MOZILLA_OFFICIAL)) -tier_99_dirs += embedding/tests -endif -endif - -ifeq ($(MOZ_BUILD_APP),macbrowser) -tier_99_dirs += \ - embedding/config \ - camino \ - $(NULL) -endif - -# test harnesses -ifdef ENABLE_TESTS -tier_99_dirs += tools/test-harness -endif - -else - -# Standalone build - -DIRS = $(BUILD_MODULE_DIRS) - -# Hack to generate xpidl Makefile -ifneq ($(BUILD_MODULES),all) -ifneq (,$(findstring xpcom, $(BUILD_MODULE_DIRS))) -DIRS := xpcom/typelib $(DIRS) -SUBMAKEFILES := xpcom/typelib/Makefile -endif -endif - -default:: $(SUBMAKEFILES) - $(MAKE) export - $(MAKE) libs - -endif # BUILD_MODULES == all - -STATIC_MAKEFILES := nsprpub directory/c-sdk security/nss - -GARBAGE_DIRS += dist -DIST_GARBAGE = config.cache config.log config.status config-defs.h \ - dependencies.beos config/autoconf.mk config/myrules.mk config/myconfig.mk \ - unallmakefiles mozilla-config.h \ - $(topsrcdir)/.mozconfig.mk $(topsrcdir)/.mozconfig.out - -# Build pseudo-external modules first when export is explicitly called -export:: - $(RM) -rf $(DIST)/sdk - $(MAKE) -C config export - $(MAKE) nspr - $(MAKE) ldap -ifneq ($(BUILD_MODULES),all) -ifneq (,$(findstring xpcom, $(BUILD_MODULE_DIRS))) - $(MAKE) -C xpcom/typelib - $(MAKE) export-idl -endif -endif - -install:: -ifndef MOZ_NATIVE_NSPR - $(MAKE) -C nsprpub real_install DESTDIR=$(DESTDIR) libdir=$(mozappdir) includedir=$(includedir)/nspr - $(RM) -f $(addprefix $(DESTDIR)$(mozappdir)/$(LIB_PREFIX), $(addsuffix .$(LIB_SUFFIX), nspr4 plds4 plc4)) - $(RM) -f $(addprefix $(DESTDIR)$(bindir)/,nspr-config compile-et.pl prerr.properties) -endif -ifdef MOZ_LDAP_XPCOM - $(MAKE) -C directory/c-sdk real_install DESTDIR=$(DESTDIR) libdir=$(mozappdir) includedir=$(includedir)/ldap -endif - -include $(topsrcdir)/config/rules.mk - -# Clean up after pseudo-external modules -clean clobber realclean clobber_all distclean:: -ifndef MOZ_NATIVE_NSPR - $(MAKE) -C nsprpub $@ -endif -ifdef MOZ_LDAP_XPCOM - $(MAKE) -C directory/c-sdk $@ -endif - -# Map mozilla targets to standard automake target -ifdef MOZ_ENABLE_LIBXUL -tier_50: $(addsuffix /Makefile, $(filter-out $(STATIC_MAKEFILES), $($@_dirs))) - @echo "tier_50: $(tier_50_dirs)" - @$(EXIT_ON_ERROR) \ - for d in $(tier_50_dirs); do \ - $(UPDATE_TITLE) \ - if test ! -f $$d/Makefile; then \ - $(PERL) $(AUTOCONF_TOOLS)/make-makefile -t $(topsrcdir) -d $(DEPTH) $(CYGWIN_TOPSRCDIR) $$d/Makefile; \ - fi; \ - $(MAKE) -C $$d export; \ - done ; \ - for d in $(tier_50_dirs); do \ - $(UPDATE_TITLE) \ - $(MAKE) -C $$d libs; \ - done - @echo "Building tools from tier 2/9/50" - @$(EXIT_ON_ERROR) \ - for d in $(tier_2_dirs) $(tier_9_dirs) $(tier_50_dirs); do \ - $(UPDATE_TITLE) \ - $(MAKE) -C $$d tools; \ - done; -endif - -tier_%: - @echo "$@: $($@_dirs)" - @$(EXIT_ON_ERROR) \ - for d in $($@_dirs); do \ - $(UPDATE_TITLE) \ - if test ! -f $$d/Makefile; then \ - $(PERL) $(AUTOCONF_TOOLS)/make-makefile -t $(topsrcdir) -d $(DEPTH) $(CYGWIN_TOPSRCDIR) $$d/Makefile; \ - fi; \ - $(MAKE) -C $$d export; \ - done ; \ - for d in $($@_dirs); do $(UPDATE_TITLE) \ - $(MAKE) -C $$d libs; \ - done - -# -# Individual modules -# -boehm: -ifdef GC_LEAK_DETECTOR - $(MAKE) -C gc/boehm -endif - -nspr: boehm -ifndef MOZ_NATIVE_NSPR - $(MAKE) -C nsprpub -endif - -ldap: -ifdef MOZ_LDAP_XPCOM - $(MAKE) -C directory/c-sdk -endif - -distclean:: - cat unallmakefiles | $(XARGS) rm -f - rm -f unallmakefiles $(DIST_GARBAGE) - -ifeq ($(OS_ARCH),WINNT) -rebase: -ifdef MOZILLA_OFFICIAL - echo rebasing $(DIST) - /bin/find $(DIST) -name "*.dll" > rebase.lst - rebase -b 60000000 -R . -G rebase.lst - rm rebase.lst -endif - -splitsymbols: -ifdef MOZILLA_OFFICIAL -ifdef MOZ_DEBUG_SYMBOLS - echo finding pdb files - mkdir -p $(DIST)/$(BUILDID) - -cp `/bin/find . -path "./dist" -prune -o -name "*.dll" | sed "s/\.dll$$/\.pdb/" | xargs` $(DIST)/$(BUILDID) - -cp `/bin/find . -path "./dist" -prune -o -name "*.exe" | sed "s/\.exe$$/\.pdb/" | xargs` $(DIST)/$(BUILDID) - -cp `/bin/find . -path "./dist" -prune -o -name "*.EXE" | sed "s/\.EXE$$/\.pdb/" | xargs` $(DIST)/$(BUILDID) -endif # MOZ_DEBUG_SYMBOLS -ifdef MOZ_PROFILE - echo splitting symbols out of binaries - /bin/find $(DIST) -name "*.dll" -exec splitsym {} \; - /bin/find $(DIST) -name "*.exe" -exec splitsym {} \; - /bin/find $(DIST) -name "*.EXE" -exec splitsym {} \; - mkdir -p $(DIST)/$(BUILDID) - /bin/find $(DIST) -name "*.dbg" -exec mv {} $(DIST)/$(BUILDID) \; -endif # MOZ_PROFILE -endif # MOZILLA_OFFICIAL - -signnss: -ifdef MOZILLA_OFFICIAL - echo signing NSS libs - cd $(DIST)/bin; ./shlibsign.exe -v -i softokn3.dll - cd $(DIST)/bin; ./shlibsign.exe -v -i freebl3.dll -endif # MOZILLA_OFFICIAL - -BUILDID = $(shell cat $(DEPTH)/config/build_number) -deliver: splitsymbols rebase signnss - -endif # WINNT - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/flipflop.sv b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/flipflop.sv deleted file mode 100644 index fe52ed4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/flipflop.sv +++ /dev/null @@ -1,19 +0,0 @@ -module toplevel(clock,reset); - input clock; - input reset; - - reg flop1; - reg flop2; - - always @ (posedge reset or posedge clock) - if (reset) - begin - flop1 <= 0; - flop2 <= 1; - end - else - begin - flop1 <= flop2; - flop2 <= flop1; - end -endmodule diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/foo.sce b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/foo.sce deleted file mode 100644 index 0e5d6af..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/foo.sce +++ /dev/null @@ -1,6 +0,0 @@ -// Scilab -// -disp(%pi); - -assert_checkequal(2+2,4); - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/format.ml b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/format.ml deleted file mode 100644 index 49b4067..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/format.ml +++ /dev/null @@ -1,1213 +0,0 @@ -(***********************************************************************) -(* *) -(* Objective Caml *) -(* *) -(* Pierre Weis, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. All rights reserved. This file is distributed *) -(* under the terms of the GNU Library General Public License, with *) -(* the special exception on linking described in file ../LICENSE. *) -(* *) -(***********************************************************************) - -(* $Id: format.ml,v 1.65 2005/09/26 10:13:08 weis Exp $ *) - -(************************************************************** - - Data structures definitions. - - **************************************************************) - -type size;; - -external size_of_int : int -> size = "%identity";; -external int_of_size : size -> int = "%identity";; - -(* Tokens are one of the following : *) - -type pp_token = -| Pp_text of string (* normal text *) -| Pp_break of int * int (* complete break *) -| Pp_tbreak of int * int (* go to next tabulation *) -| Pp_stab (* set a tabulation *) -| Pp_begin of int * block_type (* beginning of a block *) -| Pp_end (* end of a block *) -| Pp_tbegin of tblock (* beginning of a tabulation block *) -| Pp_tend (* end of a tabulation block *) -| Pp_newline (* to force a newline inside a block *) -| Pp_if_newline (* to do something only if this very - line has been broken *) -| Pp_open_tag of string (* opening a tag name *) -| Pp_close_tag (* closing the most recently opened tag *) - -and tag = string - -and block_type = -| Pp_hbox (* Horizontal block no line breaking *) -| Pp_vbox (* Vertical block each break leads to a new line *) -| Pp_hvbox (* Horizontal-vertical block: same as vbox, except if this block - is small enough to fit on a single line *) -| Pp_hovbox (* Horizontal or Vertical block: breaks lead to new line - only when necessary to print the content of the block *) -| Pp_box (* Horizontal or Indent block: breaks lead to new line - only when necessary to print the content of the block, or - when it leads to a new indentation of the current line *) -| Pp_fits (* Internal usage: when a block fits on a single line *) - -and tblock = Pp_tbox of int list ref (* Tabulation box *) -;; - -(* The Queue: - contains all formatting elements. - elements are tuples (size, token, length), where - size is set when the size of the block is known - len is the declared length of the token. *) -type pp_queue_elem = { - mutable elem_size : size; token : pp_token; length : int -};; - -(* Scan stack: - each element is (left_total, queue element) where left_total - is the value of pp_left_total when the element has been enqueued. *) -type pp_scan_elem = Scan_elem of int * pp_queue_elem;; - -(* Formatting stack: - used to break the lines while printing tokens. - The formatting stack contains the description of - the currently active blocks. *) -type pp_format_elem = Format_elem of block_type * int;; - -(* General purpose queues, used in the formatter. *) -type 'a queue_elem = | Nil | Cons of 'a queue_cell -and 'a queue_cell = {mutable head : 'a; mutable tail : 'a queue_elem};; - -type 'a queue = { - mutable insert : 'a queue_elem; - mutable body : 'a queue_elem -};; - -(* The formatter specific tag handling functions. *) -type formatter_tag_functions = { - mark_open_tag : tag -> string; - mark_close_tag : tag -> string; - print_open_tag : tag -> unit; - print_close_tag : tag -> unit; - -};; - -(* A formatter with all its machinery. *) -type formatter = { - mutable pp_scan_stack : pp_scan_elem list; - mutable pp_format_stack : pp_format_elem list; - mutable pp_tbox_stack : tblock list; - mutable pp_tag_stack : tag list; - mutable pp_mark_stack : tag list; - (* Global variables: default initialization is - set_margin 78 - set_min_space_left 0. *) - (* Value of right margin. *) - mutable pp_margin : int; - (* Minimal space left before margin, when opening a block. *) - mutable pp_min_space_left : int; - (* Maximum value of indentation: - no blocks can be opened further. *) - mutable pp_max_indent : int; - (* Space remaining on the current line. *) - mutable pp_space_left : int; - (* Current value of indentation. *) - mutable pp_current_indent : int; - (* True when the line has been broken by the pretty-printer. *) - mutable pp_is_new_line : bool; - (* Total width of tokens already printed. *) - mutable pp_left_total : int; - (* Total width of tokens ever put in queue. *) - mutable pp_right_total : int; - (* Current number of opened blocks. *) - mutable pp_curr_depth : int; - (* Maximum number of blocks which can be simultaneously opened. *) - mutable pp_max_boxes : int; - (* Ellipsis string. *) - mutable pp_ellipsis : string; - (* Output function. *) - mutable pp_output_function : string -> int -> int -> unit; - (* Flushing function. *) - mutable pp_flush_function : unit -> unit; - (* Output of new lines. *) - mutable pp_output_newline : unit -> unit; - (* Output of indentation spaces. *) - mutable pp_output_spaces : int -> unit; - (* Are tags printed ? *) - mutable pp_print_tags : bool; - (* Are tags marked ? *) - mutable pp_mark_tags : bool; - (* Find opening and closing markers of tags. *) - mutable pp_mark_open_tag : tag -> string; - mutable pp_mark_close_tag : tag -> string; - mutable pp_print_open_tag : tag -> unit; - mutable pp_print_close_tag : tag -> unit; - (* The pretty-printer queue. *) - mutable pp_queue : pp_queue_elem queue -};; - -(************************************************************** - - Auxilliaries and basic functions. - - **************************************************************) - - -(* Queues auxilliaries. *) -let make_queue () = {insert = Nil; body = Nil};; - -let clear_queue q = q.insert <- Nil; q.body <- Nil;; - -let add_queue x q = - let c = Cons {head = x; tail = Nil} in - match q with - | {insert = Cons cell} -> q.insert <- c; cell.tail <- c - (* Invariant: when insert is Nil body should be Nil. *) - | _ -> q.insert <- c; q.body <- c;; - -exception Empty_queue;; - -let peek_queue = function - | {body = Cons {head = x}} -> x - | _ -> raise Empty_queue;; - -let take_queue = function - | {body = Cons {head = x; tail = tl}} as q -> - q.body <- tl; - if tl = Nil then q.insert <- Nil; (* Maintain the invariant. *) - x - | _ -> raise Empty_queue;; - -(* Enter a token in the pretty-printer queue. *) -let pp_enqueue state ({length = len} as token) = - state.pp_right_total <- state.pp_right_total + len; - add_queue token state.pp_queue;; - -let pp_clear_queue state = - state.pp_left_total <- 1; state.pp_right_total <- 1; - clear_queue state.pp_queue;; - -(* Pp_infinity: large value for default tokens size. - - Pp_infinity is documented as being greater than 1e10; to avoid - confusion about the word ``greater'', we choose pp_infinity greater - than 1e10 + 1; for correct handling of tests in the algorithm, - pp_infinity must be even one more than 1e10 + 1; let's stand on the - safe side by choosing 1.e10+10. - - Pp_infinity could probably be 1073741823 that is 2^30 - 1, that is - the minimal upper bound for integers; now that max_int is defined, - this limit could also be defined as max_int - 1. - - However, before setting pp_infinity to something around max_int, we - must carefully double-check all the integer arithmetic operations - that involve pp_infinity, since any overflow would wreck havoc the - pretty-printing algorithm's invariants. Given that this arithmetic - correctness check is difficult and error prone and given that 1e10 - + 1 is in practice large enough, there is no need to attempt to set - pp_infinity to the theoretically maximum limit. Is it not worth the - burden ! *) - -let pp_infinity = 1000000010;; - -(* Output functions for the formatter. *) -let pp_output_string state s = state.pp_output_function s 0 (String.length s) -and pp_output_newline state = state.pp_output_newline ();; - -let pp_display_blanks state n = state.pp_output_spaces n;; - -(* To format a break, indenting a new line. *) -let break_new_line state offset width = - pp_output_newline state; - state.pp_is_new_line <- true; - let indent = state.pp_margin - width + offset in - (* Don't indent more than pp_max_indent. *) - let real_indent = min state.pp_max_indent indent in - state.pp_current_indent <- real_indent; - state.pp_space_left <- state.pp_margin - state.pp_current_indent; - pp_display_blanks state state.pp_current_indent;; - -(* To force a line break inside a block: no offset is added. *) -let break_line state width = break_new_line state 0 width;; - -(* To format a break that fits on the current line. *) -let break_same_line state width = - state.pp_space_left <- state.pp_space_left - width; - pp_display_blanks state width;; - -(* To indent no more than pp_max_indent, if one tries to open a block - beyond pp_max_indent, then the block is rejected on the left - by simulating a break. *) -let pp_force_break_line state = - match state.pp_format_stack with - | Format_elem (bl_ty, width) :: _ -> - if width > state.pp_space_left then - (match bl_ty with - | Pp_fits -> () | Pp_hbox -> () | _ -> break_line state width) - | _ -> pp_output_newline state;; - -(* To skip a token, if the previous line has been broken. *) -let pp_skip_token state = - (* When calling pp_skip_token the queue cannot be empty. *) - match take_queue state.pp_queue with - {elem_size = size; length = len} -> - state.pp_left_total <- state.pp_left_total - len; - state.pp_space_left <- state.pp_space_left + int_of_size size;; - -(************************************************************** - - The main pretting printing functions. - - **************************************************************) - -(* To format a token. *) -let format_pp_token state size = function - - | Pp_text s -> - state.pp_space_left <- state.pp_space_left - size; - pp_output_string state s; - state.pp_is_new_line <- false - - | Pp_begin (off, ty) -> - let insertion_point = state.pp_margin - state.pp_space_left in - if insertion_point > state.pp_max_indent then - (* can't open a block right there. *) - begin pp_force_break_line state end; - let offset = state.pp_space_left - off in - let bl_type = - begin match ty with - | Pp_vbox -> Pp_vbox - | _ -> if size > state.pp_space_left then ty else Pp_fits - end in - state.pp_format_stack <- - Format_elem (bl_type, offset) :: state.pp_format_stack - - | Pp_end -> - begin match state.pp_format_stack with - | x :: (y :: l as ls) -> state.pp_format_stack <- ls - | _ -> () (* No more block to close. *) - end - - | Pp_tbegin (Pp_tbox _ as tbox) -> - state.pp_tbox_stack <- tbox :: state.pp_tbox_stack - - | Pp_tend -> - begin match state.pp_tbox_stack with - | x :: ls -> state.pp_tbox_stack <- ls - | _ -> () (* No more tabulation block to close. *) - end - - | Pp_stab -> - begin match state.pp_tbox_stack with - | Pp_tbox tabs :: _ -> - let rec add_tab n = function - | [] -> [n] - | x :: l as ls -> if n < x then n :: ls else x :: add_tab n l in - tabs := add_tab (state.pp_margin - state.pp_space_left) !tabs - | _ -> () (* No opened tabulation block. *) - end - - | Pp_tbreak (n, off) -> - let insertion_point = state.pp_margin - state.pp_space_left in - begin match state.pp_tbox_stack with - | Pp_tbox tabs :: _ -> - let rec find n = function - | x :: l -> if x >= n then x else find n l - | [] -> raise Not_found in - let tab = - match !tabs with - | x :: l -> - begin try find insertion_point !tabs with Not_found -> x end - | _ -> insertion_point in - let offset = tab - insertion_point in - if offset >= 0 then break_same_line state (offset + n) else - break_new_line state (tab + off) state.pp_margin - | _ -> () (* No opened tabulation block. *) - end - - | Pp_newline -> - begin match state.pp_format_stack with - | Format_elem (_, width) :: _ -> break_line state width - | _ -> pp_output_newline state - end - - | Pp_if_newline -> - if state.pp_current_indent != state.pp_margin - state.pp_space_left - then pp_skip_token state - - | Pp_break (n, off) -> - begin match state.pp_format_stack with - | Format_elem (ty, width) :: _ -> - begin match ty with - | Pp_hovbox -> - if size > state.pp_space_left - then break_new_line state off width - else break_same_line state n - | Pp_box -> - (* Have the line just been broken here ? *) - if state.pp_is_new_line then break_same_line state n else - if size > state.pp_space_left - then break_new_line state off width else - (* break the line here leads to new indentation ? *) - if state.pp_current_indent > state.pp_margin - width + off - then break_new_line state off width - else break_same_line state n - | Pp_hvbox -> break_new_line state off width - | Pp_fits -> break_same_line state n - | Pp_vbox -> break_new_line state off width - | Pp_hbox -> break_same_line state n - end - | _ -> () (* No opened block. *) - end - - | Pp_open_tag tag_name -> - let marker = state.pp_mark_open_tag tag_name in - pp_output_string state marker; - state.pp_mark_stack <- tag_name :: state.pp_mark_stack - - | Pp_close_tag -> - begin match state.pp_mark_stack with - | tag_name :: tags -> - let marker = state.pp_mark_close_tag tag_name in - pp_output_string state marker; - state.pp_mark_stack <- tags - | _ -> () (* No more tag to close. *) - end;; - -(* Print if token size is known or printing is delayed. - Size is known when not negative. - Printing is delayed when the text waiting in the queue requires - more room to format than exists on the current line. *) -let rec advance_left state = - try - match peek_queue state.pp_queue with - {elem_size = size; token = tok; length = len} -> - let size = int_of_size size in - if not - (size < 0 && - (state.pp_right_total - state.pp_left_total < state.pp_space_left)) - then begin - ignore(take_queue state.pp_queue); - format_pp_token state (if size < 0 then pp_infinity else size) tok; - state.pp_left_total <- len + state.pp_left_total; - advance_left state - end - with Empty_queue -> ();; - -let enqueue_advance state tok = pp_enqueue state tok; advance_left state;; - -(* To enqueue a string : try to advance. *) -let make_queue_elem size tok len = - {elem_size = size; token = tok; length = len};; - -let enqueue_string_as state size s = - let len = int_of_size size in - enqueue_advance state (make_queue_elem size (Pp_text s) len);; - -let enqueue_string state s = - let len = String.length s in - enqueue_string_as state (size_of_int len) s;; - -(* Routines for scan stack - determine sizes of blocks. *) - -(* The scan_stack is never empty. *) -let scan_stack_bottom = - let q_elem = make_queue_elem (size_of_int (-1)) (Pp_text "") 0 in - [Scan_elem (-1, q_elem)];; - -(* Set size of blocks on scan stack: - if ty = true then size of break is set else size of block is set; - in each case pp_scan_stack is popped. *) -let clear_scan_stack state = state.pp_scan_stack <- scan_stack_bottom;; - -(* Pattern matching on scan stack is exhaustive, - since scan_stack is never empty. - Pattern matching on token in scan stack is also exhaustive, - since scan_push is used on breaks and opening of boxes. *) -let set_size state ty = - match state.pp_scan_stack with - | Scan_elem - (left_tot, - ({elem_size = size; token = tok} as queue_elem)) :: t -> - let size = int_of_size size in - (* test if scan stack contains any data that is not obsolete. *) - if left_tot < state.pp_left_total then clear_scan_stack state else - begin match tok with - | Pp_break (_, _) | Pp_tbreak (_, _) -> - if ty then - begin - queue_elem.elem_size <- size_of_int (state.pp_right_total + size); - state.pp_scan_stack <- t - end - | Pp_begin (_, _) -> - if not ty then - begin - queue_elem.elem_size <- size_of_int (state.pp_right_total + size); - state.pp_scan_stack <- t - end - | _ -> () (* scan_push is only used for breaks and boxes. *) - end - | _ -> () (* scan_stack is never empty. *);; - -(* Push a token on scan stack. If b is true set_size is called. *) -let scan_push state b tok = - pp_enqueue state tok; - if b then set_size state true; - state.pp_scan_stack <- - Scan_elem (state.pp_right_total, tok) :: state.pp_scan_stack;; - -(* To open a new block : - the user may set the depth bound pp_max_boxes - any text nested deeper is printed as the ellipsis string. *) -let pp_open_box_gen state indent br_ty = - state.pp_curr_depth <- state.pp_curr_depth + 1; - if state.pp_curr_depth < state.pp_max_boxes then - let elem = - make_queue_elem - (size_of_int (- state.pp_right_total)) - (Pp_begin (indent, br_ty)) - 0 in - scan_push state false elem else - if state.pp_curr_depth = state.pp_max_boxes - then enqueue_string state state.pp_ellipsis;; - -(* The box which is always opened. *) -let pp_open_sys_box state = pp_open_box_gen state 0 Pp_hovbox;; - -(* Close a block, setting sizes of its subblocks. *) -let pp_close_box state () = - if state.pp_curr_depth > 1 then - begin - if state.pp_curr_depth < state.pp_max_boxes then - begin - pp_enqueue state - {elem_size = size_of_int 0; token = Pp_end; length = 0}; - set_size state true; set_size state false - end; - state.pp_curr_depth <- state.pp_curr_depth - 1; - end;; - -(* Open a tag, pushing it on the tag stack. *) -let pp_open_tag state tag_name = - if state.pp_print_tags then begin - state.pp_tag_stack <- tag_name :: state.pp_tag_stack; - state.pp_print_open_tag tag_name end; - if state.pp_mark_tags then - pp_enqueue state - {elem_size = size_of_int 0; token = Pp_open_tag tag_name; length = 0};; - -(* Close a tag, popping it from the tag stack. *) -let pp_close_tag state () = - if state.pp_mark_tags then - pp_enqueue state - {elem_size = size_of_int 0; token = Pp_close_tag; length = 0}; - if state.pp_print_tags then - begin match state.pp_tag_stack with - | tag_name :: tags -> - state.pp_print_close_tag tag_name; - state.pp_tag_stack <- tags - | _ -> () (* No more tag to close. *) - end;; - -let pp_set_print_tags state b = state.pp_print_tags <- b;; -let pp_set_mark_tags state b = state.pp_mark_tags <- b;; -let pp_get_print_tags state () = state.pp_print_tags;; -let pp_get_mark_tags state () = state.pp_mark_tags;; -let pp_set_tags state b = pp_set_print_tags state b; pp_set_mark_tags state b;; - -let pp_get_formatter_tag_functions state () = { - mark_open_tag = state.pp_mark_open_tag; - mark_close_tag = state.pp_mark_close_tag; - print_open_tag = state.pp_print_open_tag; - print_close_tag = state.pp_print_close_tag; -};; - -let pp_set_formatter_tag_functions state { - mark_open_tag = mot; - mark_close_tag = mct; - print_open_tag = pot; - print_close_tag = pct; - } = - state.pp_mark_open_tag <- mot; - state.pp_mark_close_tag <- mct; - state.pp_print_open_tag <- pot; - state.pp_print_close_tag <- pct;; - -(* Initialize pretty-printer. *) -let pp_rinit state = - pp_clear_queue state; - clear_scan_stack state; - state.pp_format_stack <- []; - state.pp_tbox_stack <- []; - state.pp_tag_stack <- []; - state.pp_mark_stack <- []; - state.pp_current_indent <- 0; - state.pp_curr_depth <- 0; - state.pp_space_left <- state.pp_margin; - pp_open_sys_box state;; - -(* Flushing pretty-printer queue. *) -let pp_flush_queue state b = - while state.pp_curr_depth > 1 do - pp_close_box state () - done; - state.pp_right_total <- pp_infinity; - advance_left state; - if b then pp_output_newline state; - pp_rinit state;; - -(************************************************************** - - Procedures to format objects, and use boxes - - **************************************************************) - -(* To format a string. *) -let pp_print_as_size state size s = - if state.pp_curr_depth < state.pp_max_boxes - then enqueue_string_as state size s;; - -let pp_print_as state isize s = - pp_print_as_size state (size_of_int isize) s;; - -let pp_print_string state s = - pp_print_as state (String.length s) s;; - -(* To format an integer. *) -let pp_print_int state i = pp_print_string state (string_of_int i);; - -(* To format a float. *) -let pp_print_float state f = pp_print_string state (string_of_float f);; - -(* To format a boolean. *) -let pp_print_bool state b = pp_print_string state (string_of_bool b);; - -(* To format a char. *) -let pp_print_char state c = - let s = String.create 1 in - s.[0] <- c; - pp_print_as state 1 s;; - -(* Opening boxes. *) -let pp_open_hbox state () = pp_open_box_gen state 0 Pp_hbox -and pp_open_vbox state indent = pp_open_box_gen state indent Pp_vbox - -and pp_open_hvbox state indent = pp_open_box_gen state indent Pp_hvbox -and pp_open_hovbox state indent = pp_open_box_gen state indent Pp_hovbox -and pp_open_box state indent = pp_open_box_gen state indent Pp_box;; - -(* Print a new line after printing all queued text - (same for print_flush but without a newline). *) -let pp_print_newline state () = - pp_flush_queue state true; state.pp_flush_function () -and pp_print_flush state () = - pp_flush_queue state false; state.pp_flush_function ();; - -(* To get a newline when one does not want to close the current block. *) -let pp_force_newline state () = - if state.pp_curr_depth < state.pp_max_boxes then - enqueue_advance state (make_queue_elem (size_of_int 0) Pp_newline 0);; - -(* To format something if the line has just been broken. *) -let pp_print_if_newline state () = - if state.pp_curr_depth < state.pp_max_boxes then - enqueue_advance state (make_queue_elem (size_of_int 0) Pp_if_newline 0);; - -(* Breaks: indicate where a block may be broken. - If line is broken then offset is added to the indentation of the current - block else (the value of) width blanks are printed. - To do (?) : add a maximum width and offset value. *) -let pp_print_break state width offset = - if state.pp_curr_depth < state.pp_max_boxes then - let elem = - make_queue_elem - (size_of_int (- state.pp_right_total)) - (Pp_break (width, offset)) - width in - scan_push state true elem;; - -let pp_print_space state () = pp_print_break state 1 0 -and pp_print_cut state () = pp_print_break state 0 0;; - -(* Tabulation boxes. *) -let pp_open_tbox state () = - state.pp_curr_depth <- state.pp_curr_depth + 1; - if state.pp_curr_depth < state.pp_max_boxes then - let elem = - make_queue_elem (size_of_int 0) (Pp_tbegin (Pp_tbox (ref []))) 0 in - enqueue_advance state elem;; - -(* Close a tabulation block. *) -let pp_close_tbox state () = - if state.pp_curr_depth > 1 then begin - if state.pp_curr_depth < state.pp_max_boxes then - let elem = make_queue_elem (size_of_int 0) Pp_tend 0 in - enqueue_advance state elem; - state.pp_curr_depth <- state.pp_curr_depth - 1 end;; - -(* Print a tabulation break. *) -let pp_print_tbreak state width offset = - if state.pp_curr_depth < state.pp_max_boxes then - let elem = - make_queue_elem - (size_of_int (- state.pp_right_total)) - (Pp_tbreak (width, offset)) - width in - scan_push state true elem;; - -let pp_print_tab state () = pp_print_tbreak state 0 0;; - -let pp_set_tab state () = - if state.pp_curr_depth < state.pp_max_boxes then - let elem = - make_queue_elem (size_of_int 0) Pp_stab 0 in - enqueue_advance state elem;; - -(************************************************************** - - Procedures to control the pretty-printers - - **************************************************************) - -(* Fit max_boxes. *) -let pp_set_max_boxes state n = if n > 1 then state.pp_max_boxes <- n;; - -(* To know the current maximum number of boxes allowed. *) -let pp_get_max_boxes state () = state.pp_max_boxes;; - -let pp_over_max_boxes state () = state.pp_curr_depth = state.pp_max_boxes;; - -(* Ellipsis. *) -let pp_set_ellipsis_text state s = state.pp_ellipsis <- s -and pp_get_ellipsis_text state () = state.pp_ellipsis;; - -(* To set the margin of pretty-printer. *) -let pp_limit n = - if n < pp_infinity then n else pred pp_infinity;; - -let pp_set_min_space_left state n = - if n >= 1 then - let n = pp_limit n in - state.pp_min_space_left <- n; - state.pp_max_indent <- state.pp_margin - state.pp_min_space_left; - pp_rinit state;; - -(* Initially, we have : - pp_max_indent = pp_margin - pp_min_space_left, and - pp_space_left = pp_margin. *) -let pp_set_max_indent state n = - pp_set_min_space_left state (state.pp_margin - n);; -let pp_get_max_indent state () = state.pp_max_indent;; - -let pp_set_margin state n = - if n >= 1 then - let n = pp_limit n in - state.pp_margin <- n; - let new_max_indent = - (* Try to maintain max_indent to its actual value. *) - if state.pp_max_indent <= state.pp_margin - then state.pp_max_indent else - (* If possible maintain pp_min_space_left to its actual value, - if this leads to a too small max_indent, take half of the - new margin, if it is greater than 1. *) - max (max (state.pp_margin - state.pp_min_space_left) - (state.pp_margin / 2)) 1 in - (* Rebuild invariants. *) - pp_set_max_indent state new_max_indent;; - -let pp_get_margin state () = state.pp_margin;; - -let pp_set_formatter_output_functions state f g = - state.pp_output_function <- f; state.pp_flush_function <- g;; -let pp_get_formatter_output_functions state () = - (state.pp_output_function, state.pp_flush_function);; - -let pp_set_all_formatter_output_functions state - ~out:f ~flush:g ~newline:h ~spaces:i = - pp_set_formatter_output_functions state f g; - state.pp_output_newline <- (function () -> h ()); - state.pp_output_spaces <- (function n -> i n);; -let pp_get_all_formatter_output_functions state () = - (state.pp_output_function, state.pp_flush_function, - state.pp_output_newline, state.pp_output_spaces);; - -let pp_set_formatter_out_channel state os = - state.pp_output_function <- output os; - state.pp_flush_function <- (fun () -> flush os);; - -(************************************************************** - - Creation of specific formatters - - **************************************************************) - -let default_pp_mark_open_tag s = "<" ^ s ^ ">";; -let default_pp_mark_close_tag s = "";; - -let default_pp_print_open_tag s = ();; -let default_pp_print_close_tag = default_pp_print_open_tag;; - -let pp_make_formatter f g h i = - (* The initial state of the formatter contains a dummy box. *) - let pp_q = make_queue () in - let sys_tok = - make_queue_elem (size_of_int (-1)) (Pp_begin (0, Pp_hovbox)) 0 in - add_queue sys_tok pp_q; - let sys_scan_stack = - (Scan_elem (1, sys_tok)) :: scan_stack_bottom in - {pp_scan_stack = sys_scan_stack; - pp_format_stack = []; - pp_tbox_stack = []; - pp_tag_stack = []; - pp_mark_stack = []; - pp_margin = 78; - pp_min_space_left = 10; - pp_max_indent = 78 - 10; - pp_space_left = 78; - pp_current_indent = 0; - pp_is_new_line = true; - pp_left_total = 1; - pp_right_total = 1; - pp_curr_depth = 1; - pp_max_boxes = max_int; - pp_ellipsis = "."; - pp_output_function = f; - pp_flush_function = g; - pp_output_newline = h; - pp_output_spaces = i; - pp_print_tags = false; - pp_mark_tags = false; - pp_mark_open_tag = default_pp_mark_open_tag; - pp_mark_close_tag = default_pp_mark_close_tag; - pp_print_open_tag = default_pp_print_open_tag; - pp_print_close_tag = default_pp_print_close_tag; - pp_queue = pp_q - };; - -(* Default function to output spaces. *) -let blank_line = String.make 80 ' ';; -let rec display_blanks state n = - if n > 0 then - if n <= 80 then state.pp_output_function blank_line 0 n else - begin - state.pp_output_function blank_line 0 80; - display_blanks state (n - 80) - end;; - -(* Default function to output new lines. *) -let display_newline state () = state.pp_output_function "\n" 0 1;; - -let make_formatter f g = - let ff = pp_make_formatter f g ignore ignore in - ff.pp_output_newline <- display_newline ff; - ff.pp_output_spaces <- display_blanks ff; - ff;; - -let formatter_of_out_channel oc = - make_formatter (output oc) (fun () -> flush oc);; - -let formatter_of_buffer b = - make_formatter (Buffer.add_substring b) ignore;; - -let stdbuf = Buffer.create 512;; - -let str_formatter = formatter_of_buffer stdbuf;; -let std_formatter = formatter_of_out_channel stdout;; -let err_formatter = formatter_of_out_channel stderr;; - -let flush_str_formatter () = - pp_flush_queue str_formatter false; - let s = Buffer.contents stdbuf in - Buffer.reset stdbuf; - s;; - -(************************************************************** - - Basic functions on the standard formatter - - **************************************************************) - -let open_hbox = pp_open_hbox std_formatter -and open_vbox = pp_open_vbox std_formatter -and open_hvbox = pp_open_hvbox std_formatter -and open_hovbox = pp_open_hovbox std_formatter -and open_box = pp_open_box std_formatter -and close_box = pp_close_box std_formatter -and open_tag = pp_open_tag std_formatter -and close_tag = pp_close_tag std_formatter -and print_as = pp_print_as std_formatter -and print_string = pp_print_string std_formatter -and print_int = pp_print_int std_formatter -and print_float = pp_print_float std_formatter -and print_char = pp_print_char std_formatter -and print_bool = pp_print_bool std_formatter -and print_break = pp_print_break std_formatter -and print_cut = pp_print_cut std_formatter -and print_space = pp_print_space std_formatter -and force_newline = pp_force_newline std_formatter -and print_flush = pp_print_flush std_formatter -and print_newline = pp_print_newline std_formatter -and print_if_newline = pp_print_if_newline std_formatter - -and open_tbox = pp_open_tbox std_formatter -and close_tbox = pp_close_tbox std_formatter -and print_tbreak = pp_print_tbreak std_formatter - -and set_tab = pp_set_tab std_formatter -and print_tab = pp_print_tab std_formatter - -and set_margin = pp_set_margin std_formatter -and get_margin = pp_get_margin std_formatter - -and set_max_indent = pp_set_max_indent std_formatter -and get_max_indent = pp_get_max_indent std_formatter - -and set_max_boxes = pp_set_max_boxes std_formatter -and get_max_boxes = pp_get_max_boxes std_formatter -and over_max_boxes = pp_over_max_boxes std_formatter - -and set_ellipsis_text = pp_set_ellipsis_text std_formatter -and get_ellipsis_text = pp_get_ellipsis_text std_formatter - -and set_formatter_out_channel = - pp_set_formatter_out_channel std_formatter - -and set_formatter_output_functions = - pp_set_formatter_output_functions std_formatter -and get_formatter_output_functions = - pp_get_formatter_output_functions std_formatter - -and set_all_formatter_output_functions = - pp_set_all_formatter_output_functions std_formatter -and get_all_formatter_output_functions = - pp_get_all_formatter_output_functions std_formatter - -and set_formatter_tag_functions = - pp_set_formatter_tag_functions std_formatter -and get_formatter_tag_functions = - pp_get_formatter_tag_functions std_formatter -and set_print_tags = - pp_set_print_tags std_formatter -and get_print_tags = - pp_get_print_tags std_formatter -and set_mark_tags = - pp_set_mark_tags std_formatter -and get_mark_tags = - pp_get_mark_tags std_formatter -and set_tags = - pp_set_tags std_formatter -;; - - -(************************************************************** - - Printf implementation. - - **************************************************************) - -(* Error messages when processing formats. *) - -(* Trailer: giving up at character number ... *) -let giving_up mess fmt i = - "fprintf: " ^ mess ^ " ``" ^ fmt ^ "'', \ - giving up at character number " ^ string_of_int i ^ - (if i < String.length fmt - then " (" ^ String.make 1 fmt.[i] ^ ")." - else String.make 1 '.');; - -(* When an invalid format deserves a special error explanation. *) -let format_invalid_arg mess fmt i = invalid_arg (giving_up mess fmt i);; - -(* Standard invalid format. *) -let invalid_format fmt i = format_invalid_arg "bad format" fmt i;; - -(* Cannot find a valid integer into that format. *) -let invalid_integer fmt i = - invalid_arg (giving_up "bad integer specification" fmt i);; - -(* Finding an integer out of a sub-string of the format. *) -let format_int_of_string fmt i s = - let sz = - try int_of_string s with - | Failure s -> invalid_integer fmt i in - size_of_int sz;; - -(* Getting strings out of buffers. *) -let get_buffer_out b = - let s = Buffer.contents b in - Buffer.reset b; - s;; - -(* [ppf] is supposed to be a pretty-printer that outputs in buffer [b]: - to extract contents of [ppf] as a string we flush [ppf] and get the string - out of [b]. *) -let string_out b ppf = - pp_flush_queue ppf false; - get_buffer_out b;; - -(* Applies [printer] to a formatter that outputs on a fresh buffer, - then returns the resulting material. *) -let exstring printer arg = - let b = Buffer.create 512 in - let ppf = formatter_of_buffer b in - printer ppf arg; - string_out b ppf;; - -(* To turn out a character accumulator into the proper string result. *) -let implode_rev s0 = function - | [] -> s0 - | l -> String.concat "" (List.rev (s0 :: l));; - -external format_to_string : ('a, 'b, 'c, 'd) format4 -> string = "%identity";; - -(* [fprintf_out] is the printf-like function generator: given the - - [str] flag that tells if we are printing into a string, - - the [out] function that has to be called at the end of formatting, - it generates a [fprintf] function that takes as arguments a [ppf] - formatter and a printing format to print the rest of arguments - according to the format. - Regular [fprintf]-like functions of this module are obtained via partial - applications of [fprintf_out]. *) -let mkprintf str get_out = - let rec kprintf k fmt = - let fmt = format_to_string fmt in - let len = String.length fmt in - - let kpr fmt v = - let ppf = get_out fmt in - let print_as = ref None in - let pp_print_as_char c = - match !print_as with - | None -> pp_print_char ppf c - | Some size -> - pp_print_as_size ppf size (String.make 1 c); - print_as := None - and pp_print_as_string s = - match !print_as with - | None -> pp_print_string ppf s - | Some size -> - pp_print_as_size ppf size s; - print_as := None in - - let rec doprn n i = - if i >= len then Obj.magic (k ppf) else - match fmt.[i] with - | '%' -> - Printf.scan_format fmt v n i cont_s cont_a cont_t cont_f cont_m - | '@' -> - let i = succ i in - if i >= len then invalid_format fmt i else - begin match fmt.[i] with - | '[' -> - do_pp_open_box ppf n (succ i) - | ']' -> - pp_close_box ppf (); - doprn n (succ i) - | '{' -> - do_pp_open_tag ppf n (succ i) - | '}' -> - pp_close_tag ppf (); - doprn n (succ i) - | ' ' -> - pp_print_space ppf (); - doprn n (succ i) - | ',' -> - pp_print_cut ppf (); - doprn n (succ i) - | '?' -> - pp_print_flush ppf (); - doprn n (succ i) - | '.' -> - pp_print_newline ppf (); - doprn n (succ i) - | '\n' -> - pp_force_newline ppf (); - doprn n (succ i) - | ';' -> - do_pp_break ppf n (succ i) - | '<' -> - let got_size size n i = - print_as := Some size; - doprn n (skip_gt i) in - get_int n (succ i) got_size - | '@' as c -> - pp_print_as_char c; - doprn n (succ i) - | c -> invalid_format fmt i - end - | c -> - pp_print_as_char c; - doprn n (succ i) - - and cont_s n s i = - pp_print_as_string s; doprn n i - and cont_a n printer arg i = - if str then - pp_print_as_string ((Obj.magic printer : unit -> _ -> string) () arg) - else - printer ppf arg; - doprn n i - and cont_t n printer i = - if str then - pp_print_as_string ((Obj.magic printer : unit -> string) ()) - else - printer ppf; - doprn n i - and cont_f n i = - pp_print_flush ppf (); doprn n i - - and cont_m n sfmt i = - kprintf (Obj.magic (fun _ -> doprn n i)) sfmt - - and get_int n i c = - if i >= len then invalid_integer fmt i else - match fmt.[i] with - | ' ' -> get_int n (succ i) c - | '%' -> - let cont_s n s i = c (format_int_of_string fmt i s) n i - and cont_a n printer arg i = invalid_integer fmt i - and cont_t n printer i = invalid_integer fmt i - and cont_f n i = invalid_integer fmt i - and cont_m n sfmt i = invalid_integer fmt i in - Printf.scan_format fmt v n i cont_s cont_a cont_t cont_f cont_m - | _ -> - let rec get j = - if j >= len then invalid_integer fmt j else - match fmt.[j] with - | '0' .. '9' | '-' -> get (succ j) - | _ -> - let size = - if j = i then size_of_int 0 else - format_int_of_string fmt j (String.sub fmt i (j - i)) in - c size n j in - get i - - and skip_gt i = - if i >= len then invalid_format fmt i else - match fmt.[i] with - | ' ' -> skip_gt (succ i) - | '>' -> succ i - | _ -> invalid_format fmt i - - and get_box_kind i = - if i >= len then Pp_box, i else - match fmt.[i] with - | 'h' -> - let i = succ i in - if i >= len then Pp_hbox, i else - begin match fmt.[i] with - | 'o' -> - let i = succ i in - if i >= len then format_invalid_arg "bad box format" fmt i else - begin match fmt.[i] with - | 'v' -> Pp_hovbox, succ i - | c -> - format_invalid_arg - ("bad box name ho" ^ String.make 1 c) fmt i end - | 'v' -> Pp_hvbox, succ i - | c -> Pp_hbox, i - end - | 'b' -> Pp_box, succ i - | 'v' -> Pp_vbox, succ i - | _ -> Pp_box, i - - and get_tag_name n i c = - let rec get accu n i j = - if j >= len - then c (implode_rev (String.sub fmt i (j - i)) accu) n j else - match fmt.[j] with - | '>' -> c (implode_rev (String.sub fmt i (j - i)) accu) n j - | '%' -> - let s0 = String.sub fmt i (j - i) in - let cont_s n s i = get (s :: s0 :: accu) n i i - and cont_a n printer arg i = - let s = - if str - then (Obj.magic printer : unit -> _ -> string) () arg - else exstring printer arg in - get (s :: s0 :: accu) n i i - and cont_t n printer i = - let s = - if str - then (Obj.magic printer : unit -> string) () - else exstring (fun ppf () -> printer ppf) () in - get (s :: s0 :: accu) n i i - and cont_f n i = - format_invalid_arg "bad tag name specification" fmt i - and cont_m n sfmt i = - format_invalid_arg "bad tag name specification" fmt i in - Printf.scan_format fmt v n j cont_s cont_a cont_t cont_f cont_m - | c -> get accu n i (succ j) in - get [] n i i - - and do_pp_break ppf n i = - if i >= len then begin pp_print_space ppf (); doprn n i end else - match fmt.[i] with - | '<' -> - let rec got_nspaces nspaces n i = - get_int n i (got_offset nspaces) - and got_offset nspaces offset n i = - pp_print_break ppf (int_of_size nspaces) (int_of_size offset); - doprn n (skip_gt i) in - get_int n (succ i) got_nspaces - | c -> pp_print_space ppf (); doprn n i - - and do_pp_open_box ppf n i = - if i >= len then begin pp_open_box_gen ppf 0 Pp_box; doprn n i end else - match fmt.[i] with - | '<' -> - let kind, i = get_box_kind (succ i) in - let got_size size n i = - pp_open_box_gen ppf (int_of_size size) kind; - doprn n (skip_gt i) in - get_int n i got_size - | c -> pp_open_box_gen ppf 0 Pp_box; doprn n i - - and do_pp_open_tag ppf n i = - if i >= len then begin pp_open_tag ppf ""; doprn n i end else - match fmt.[i] with - | '<' -> - let got_name tag_name n i = - pp_open_tag ppf tag_name; - doprn n (skip_gt i) in - get_tag_name n (succ i) got_name - | c -> pp_open_tag ppf ""; doprn n i in - - doprn (Printf.index_of_int 0) 0 in - - Printf.kapr kpr fmt in - - kprintf;; - -(************************************************************** - - Defining [fprintf] and various flavors of [fprintf]. - - **************************************************************) - -let kfprintf k ppf = mkprintf false (fun _ -> ppf) k;; - -let fprintf ppf = kfprintf ignore ppf;; -let printf fmt = fprintf std_formatter fmt;; -let eprintf fmt = fprintf err_formatter fmt;; - -let kbprintf k b = - mkprintf false (fun _ -> formatter_of_buffer b) k;; - -let bprintf b = kbprintf ignore b;; - -let ksprintf k = - let b = Buffer.create 512 in - let k ppf = k (string_out b ppf) in - mkprintf true (fun _ -> formatter_of_buffer b) k;; - -let kprintf = ksprintf;; - -let sprintf fmt = ksprintf (fun s -> s) fmt;; - -at_exit print_flush;; diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/fucked_up.rb b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/fucked_up.rb deleted file mode 100644 index b1d0ee3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/fucked_up.rb +++ /dev/null @@ -1,77 +0,0 @@ -# vim:ft=ruby - -events = Hash.new { |h, k| h[k] = [] } -DATA.read.split(/\n\n\n\s*/).each do |event| - name = event[/^.*/].sub(/http:.*/, '') - event[/\n.*/m].scan(/^([A-Z]{2}\S*)\s*(\S*)\s*(\S*)(\s*\S*)/) do |kind, day, daytime, comment| - events[ [day, daytime] ] << [kind, name + comment] - end -end - -conflicts = 0 -events.to_a.sort_by do |(day, daytime),| - [%w(Mo Di Mi Do Fr).index(day) || 0, daytime] -end.each do |(day, daytime), names| - if names.size > 1 - conflicts += 1 - print '!!! ' - end - print "#{day} #{daytime}: " - names.each { |kind, name| puts " #{kind} #{name}" } - puts -end - -puts '%d conflicts' % conflicts -puts '%d SWS' % (events.inject(0) { |sum, ((day, daytime),)| sum + (daytime[/\d+$/].to_i - daytime[/^\d+/].to_i) }) - -string = % foo # strange. huh? -print "Escape here: \n" -print 'Dont escape here: \n' - -__END__ -Informatik und Informationsgesellschaft I: Digitale Medien (32 214) -Computer lassen ihre eigentliche Bestimmung durch Multimedia und Vernetzung erkennen: Es sind digitale Medien, die alle bisherigen Massen- und Kommunikationsmedien simulieren, kopieren oder ersetzen können. Die kurze Geschichte elektronischer Medien vom Telegramm bis zum Fernsehen wird so zur Vorgeschichte des Computers als Medium. Der Prozess der Mediatisierung der Rechnernetze soll in Technik, Theorie und Praxis untersucht werden. Das PR soll die Techniken der ortsverteilten und zeitversetzten Lehre an Hand praktischer Übungen vorführen und untersuchen. -VL Di 15-17 wöch. RUD 25, 3.101 J. Koubek -VL Do 15-17 wöch. RUD 25, 3.101 -UE/PR Do 17-19 wöch. RUD 25, 3.101 J.-M. Loebel - - -Methoden und Modelle des Systementwurfs (32 223) -Gute Methoden zum Entwurf und zur Verifikation von Systemen sind ein Schlüssel für gute Software. Dieses Seminar betrachtet moderne Entwurfsmethoden. - VL Di 09-11 wöch. RUD 26, 0’313 W. Reisig - VL Do 09-11 wöch. RUD 26, 0’313 - UE Di 11-13 wöch. RUD 26, 0’313 - PR Di 13-15 wöch. RUD 26, 0’313 D. Weinberg - - -Komplexitätstheorie (32 229) -In dieser Vorlesung untersuchen wir eine Reihe von wichtigen algorithmischen Problemstellungen aus verschiedenen Bereichen der Informatik. Unser besonderes Interesse gilt dabei der Abschätzung der Rechenressourcen, die zu ihrer Lösung aufzubringen sind. Die Vorlesung bildet eine wichtige Grundlage für weiterführende Veranstaltungen in den Bereichen Algorithmen, Kryptologie, Algorithmisches Lernen und Algorithmisches Beweisen. - VL Di 09-11 wöch. RUD 26, 1’303 J. Köbler - VL Do 09-11 wöch. RUD 26, 1’305 - UE Do 11-13 wöch. RUD 26, 1’305 - - -Zuverlässige Systeme (32 234) -Mit zunehmender Verbreitung der Computertechnologie in immer mehr Bereichen des menschlichen Lebens wird die Zuverlässigkeit solcher Systeme zu einer immer zentraleren Frage. -Der Halbkurs "Zuverlässige Systeme" konzentriert sich auf folgende Schwerpunkte: Zuverlässigkeit, Fehlertoleranz, Responsivität, Messungen, Anwendungen, Systemmodelle und Techniken, Ausfallverhalten, Fehlermodelle, Schedulingtechniken, Software/Hardware - responsives Systemdesign, Analyse und Synthese, Bewertung, Fallstudien in Forschung und Industrie. -Der Halbkurs kann mit dem Halbkurs "Eigenschaften mobiler und eingebetteter Systeme" zu einem Projektkurs kombiniert werden. Ein gemeinsames Projekt begleitet beide Halbkurse. -VL Di 09-11 wöch. RUD 26, 1’308 M. Malek -VL Do 09-11 wöch. RUD 26, 1’308 -PR n.V. - - -Stochastik für InformatikerInnen (32 239) -Grundlagen der Wahrscheinlichkeitsrechnung, Diskrete und stetige Wahrscheinlichkeitsmodelle in der Informatik, Grenzwertsätze, Simulationsverfahren, Zufallszahlen, Statistische Schätz- und Testverfahren, Markoffsche Ketten, Simulated Annealing, Probabilistische Analyse von Algorithmen. -VL Mo 09-11 wöch. RUD 25, 3.101 W. Kössler -VL Mi 09-11 wöch. RUD 25, 3.101 -UE Mo 11-13 wöch. RUD 25, 3.101 - UE Mi 11-13 wöch. RUD 25. 3.101 - - -Geschichte der Informatik – Ausgewählte Kapitel (32 243) -VL Mi 13-15 wöch. RUD 25, 3.113 W. Coy - - -Aktuelle Themen der Theoretischen Informatik (32 260) -In diesem Seminar sollen wichtige aktuelle Veröffentlichungen aus der theoretischen Informatik gemeinsam erarbeitet werden. Genaueres wird erst kurz vor dem Seminar entschieden. Bei Interesse wenden Sie sich bitte möglichst frühzeitig an den Veranstalter. - SE Fr 09-11 wöch. RUD 26, 1’307 M. Grohe  diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/function.mu b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/function.mu deleted file mode 100644 index 46bb259..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/function.mu +++ /dev/null @@ -1 +0,0 @@ -a::b () diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/functional.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/functional.rst deleted file mode 100644 index bfe67d1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/functional.rst +++ /dev/null @@ -1,1472 +0,0 @@ -Functional Programming HOWTO -================================ - -**Version 0.30** - -(This is a first draft. Please send comments/error -reports/suggestions to amk@amk.ca. This URL is probably not going to -be the final location of the document, so be careful about linking to -it -- you may want to add a disclaimer.) - -In this document, we'll take a tour of Python's features suitable for -implementing programs in a functional style. After an introduction to -the concepts of functional programming, we'll look at language -features such as iterators and generators and relevant library modules -such as ``itertools`` and ``functools``. - - -.. contents:: - -Introduction ----------------------- - -This section explains the basic concept of functional programming; if -you're just interested in learning about Python language features, -skip to the next section. - -Programming languages support decomposing problems in several different -ways: - -* Most programming languages are **procedural**: - programs are lists of instructions that tell the computer what to - do with the program's input. - C, Pascal, and even Unix shells are procedural languages. - -* In **declarative** languages, you write a specification that describes - the problem to be solved, and the language implementation figures out - how to perform the computation efficiently. SQL is the declarative - language you're most likely to be familiar with; a SQL query describes - the data set you want to retrieve, and the SQL engine decides whether to - scan tables or use indexes, which subclauses should be performed first, - etc. - -* **Object-oriented** programs manipulate collections of objects. - Objects have internal state and support methods that query or modify - this internal state in some way. Smalltalk and Java are - object-oriented languages. C++ and Python are languages that - support object-oriented programming, but don't force the use - of object-oriented features. - -* **Functional** programming decomposes a problem into a set of functions. - Ideally, functions only take inputs and produce outputs, and don't have any - internal state that affects the output produced for a given input. - Well-known functional languages include the ML family (Standard ML, - OCaml, and other variants) and Haskell. - -The designers of some computer languages have chosen one approach to -programming that's emphasized. This often makes it difficult to -write programs that use a different approach. Other languages are -multi-paradigm languages that support several different approaches. Lisp, -C++, and Python are multi-paradigm; you can write programs or -libraries that are largely procedural, object-oriented, or functional -in all of these languages. In a large program, different sections -might be written using different approaches; the GUI might be object-oriented -while the processing logic is procedural or functional, for example. - -In a functional program, input flows through a set of functions. Each -function operates on its input and produces some output. Functional -style frowns upon functions with side effects that modify internal -state or make other changes that aren't visible in the function's -return value. Functions that have no side effects at all are -called **purely functional**. -Avoiding side effects means not using data structures -that get updated as a program runs; every function's output -must only depend on its input. - -Some languages are very strict about purity and don't even have -assignment statements such as ``a=3`` or ``c = a + b``, but it's -difficult to avoid all side effects. Printing to the screen or -writing to a disk file are side effects, for example. For example, in -Python a ``print`` statement or a ``time.sleep(1)`` both return no -useful value; they're only called for their side effects of sending -some text to the screen or pausing execution for a second. - -Python programs written in functional style usually won't go to the -extreme of avoiding all I/O or all assignments; instead, they'll -provide a functional-appearing interface but will use non-functional -features internally. For example, the implementation of a function -will still use assignments to local variables, but won't modify global -variables or have other side effects. - -Functional programming can be considered the opposite of -object-oriented programming. Objects are little capsules containing -some internal state along with a collection of method calls that let -you modify this state, and programs consist of making the right set of -state changes. Functional programming wants to avoid state changes as -much as possible and works with data flowing between functions. In -Python you might combine the two approaches by writing functions that -take and return instances representing objects in your application -(e-mail messages, transactions, etc.). - -Functional design may seem like an odd constraint to work under. Why -should you avoid objects and side effects? There are theoretical and -practical advantages to the functional style: - -* Formal provability. -* Modularity. -* Composability. -* Ease of debugging and testing. - -Formal provability -'''''''''''''''''''''' - -A theoretical benefit is that it's easier to construct a mathematical proof -that a functional program is correct. - -For a long time researchers have been interested in finding ways to -mathematically prove programs correct. This is different from testing -a program on numerous inputs and concluding that its output is usually -correct, or reading a program's source code and concluding that the -code looks right; the goal is instead a rigorous proof that a program -produces the right result for all possible inputs. - -The technique used to prove programs correct is to write down -**invariants**, properties of the input data and of the program's -variables that are always true. For each line of code, you then show -that if invariants X and Y are true **before** the line is executed, -the slightly different invariants X' and Y' are true **after** -the line is executed. This continues until you reach the end of the -program, at which point the invariants should match the desired -conditions on the program's output. - -Functional programming's avoidance of assignments arose because -assignments are difficult to handle with this technique; -assignments can break invariants that were true before the assignment -without producing any new invariants that can be propagated onward. - -Unfortunately, proving programs correct is largely impractical and not -relevant to Python software. Even trivial programs require proofs that -are several pages long; the proof of correctness for a moderately -complicated program would be enormous, and few or none of the programs -you use daily (the Python interpreter, your XML parser, your web -browser) could be proven correct. Even if you wrote down or generated -a proof, there would then be the question of verifying the proof; -maybe there's an error in it, and you wrongly believe you've proved -the program correct. - -Modularity -'''''''''''''''''''''' - -A more practical benefit of functional programming is that it forces -you to break apart your problem into small pieces. Programs are more -modular as a result. It's easier to specify and write a small -function that does one thing than a large function that performs a -complicated transformation. Small functions are also easier to read -and to check for errors. - - -Ease of debugging and testing -'''''''''''''''''''''''''''''''''' - -Testing and debugging a functional-style program is easier. - -Debugging is simplified because functions are generally small and -clearly specified. When a program doesn't work, each function is an -interface point where you can check that the data are correct. You -can look at the intermediate inputs and outputs to quickly isolate the -function that's responsible for a bug. - -Testing is easier because each function is a potential subject for a -unit test. Functions don't depend on system state that needs to be -replicated before running a test; instead you only have to synthesize -the right input and then check that the output matches expectations. - - - -Composability -'''''''''''''''''''''' - -As you work on a functional-style program, you'll write a number of -functions with varying inputs and outputs. Some of these functions -will be unavoidably specialized to a particular application, but -others will be useful in a wide variety of programs. For example, a -function that takes a directory path and returns all the XML files in -the directory, or a function that takes a filename and returns its -contents, can be applied to many different situations. - -Over time you'll form a personal library of utilities. Often you'll -assemble new programs by arranging existing functions in a new -configuration and writing a few functions specialized for the current -task. - - - -Iterators ------------------------ - -I'll start by looking at a Python language feature that's an important -foundation for writing functional-style programs: iterators. - -An iterator is an object representing a stream of data; this object -returns the data one element at a time. A Python iterator must -support a method called ``next()`` that takes no arguments and always -returns the next element of the stream. If there are no more elements -in the stream, ``next()`` must raise the ``StopIteration`` exception. -Iterators don't have to be finite, though; it's perfectly reasonable -to write an iterator that produces an infinite stream of data. - -The built-in ``iter()`` function takes an arbitrary object and tries -to return an iterator that will return the object's contents or -elements, raising ``TypeError`` if the object doesn't support -iteration. Several of Python's built-in data types support iteration, -the most common being lists and dictionaries. An object is called -an **iterable** object if you can get an iterator for it. - -You can experiment with the iteration interface manually:: - - >>> L = [1,2,3] - >>> it = iter(L) - >>> print it - - >>> it.next() - 1 - >>> it.next() - 2 - >>> it.next() - 3 - >>> it.next() - Traceback (most recent call last): - File "", line 1, in ? - StopIteration - >>> - -Python expects iterable objects in several different contexts, the -most important being the ``for`` statement. In the statement ``for X in Y``, -Y must be an iterator or some object for which ``iter()`` can create -an iterator. These two statements are equivalent:: - - for i in iter(obj): - print i - - for i in obj: - print i - -Iterators can be materialized as lists or tuples by using the -``list()`` or ``tuple()`` constructor functions:: - - >>> L = [1,2,3] - >>> iterator = iter(L) - >>> t = tuple(iterator) - >>> t - (1, 2, 3) - -Sequence unpacking also supports iterators: if you know an iterator -will return N elements, you can unpack them into an N-tuple:: - - >>> L = [1,2,3] - >>> iterator = iter(L) - >>> a,b,c = iterator - >>> a,b,c - (1, 2, 3) - -Built-in functions such as ``max()`` and ``min()`` can take a single -iterator argument and will return the largest or smallest element. -The ``"in"`` and ``"not in"`` operators also support iterators: ``X in -iterator`` is true if X is found in the stream returned by the -iterator. You'll run into obvious problems if the iterator is -infinite; ``max()``, ``min()``, and ``"not in"`` will never return, and -if the element X never appears in the stream, the ``"in"`` operator -won't return either. - -Note that you can only go forward in an iterator; there's no way to -get the previous element, reset the iterator, or make a copy of it. -Iterator objects can optionally provide these additional capabilities, -but the iterator protocol only specifies the ``next()`` method. -Functions may therefore consume all of the iterator's output, and if -you need to do something different with the same stream, you'll have -to create a new iterator. - - - -Data Types That Support Iterators -''''''''''''''''''''''''''''''''''' - -We've already seen how lists and tuples support iterators. In fact, -any Python sequence type, such as strings, will automatically support -creation of an iterator. - -Calling ``iter()`` on a dictionary returns an iterator that will loop -over the dictionary's keys:: - - >>> m = {'Jan': 1, 'Feb': 2, 'Mar': 3, 'Apr': 4, 'May': 5, 'Jun': 6, - ... 'Jul': 7, 'Aug': 8, 'Sep': 9, 'Oct': 10, 'Nov': 11, 'Dec': 12} - >>> for key in m: - ... print key, m[key] - Mar 3 - Feb 2 - Aug 8 - Sep 9 - May 5 - Jun 6 - Jul 7 - Jan 1 - Apr 4 - Nov 11 - Dec 12 - Oct 10 - -Note that the order is essentially random, because it's based on the -hash ordering of the objects in the dictionary. - -Applying ``iter()`` to a dictionary always loops over the keys, but -dictionaries have methods that return other iterators. If you want to -iterate over keys, values, or key/value pairs, you can explicitly call -the ``iterkeys()``, ``itervalues()``, or ``iteritems()`` methods to -get an appropriate iterator. - -The ``dict()`` constructor can accept an iterator that returns a -finite stream of ``(key, value)`` tuples:: - - >>> L = [('Italy', 'Rome'), ('France', 'Paris'), ('US', 'Washington DC')] - >>> dict(iter(L)) - {'Italy': 'Rome', 'US': 'Washington DC', 'France': 'Paris'} - -Files also support iteration by calling the ``readline()`` -method until there are no more lines in the file. This means you can -read each line of a file like this:: - - for line in file: - # do something for each line - ... - -Sets can take their contents from an iterable and let you iterate over -the set's elements:: - - S = set((2, 3, 5, 7, 11, 13)) - for i in S: - print i - - - -Generator expressions and list comprehensions ----------------------------------------------------- - -Two common operations on an iterator's output are 1) performing some -operation for every element, 2) selecting a subset of elements that -meet some condition. For example, given a list of strings, you might -want to strip off trailing whitespace from each line or extract all -the strings containing a given substring. - -List comprehensions and generator expressions (short form: "listcomps" -and "genexps") are a concise notation for such operations, borrowed -from the functional programming language Haskell -(http://www.haskell.org). You can strip all the whitespace from a -stream of strings with the following code:: - - line_list = [' line 1\n', 'line 2 \n', ...] - - # Generator expression -- returns iterator - stripped_iter = (line.strip() for line in line_list) - - # List comprehension -- returns list - stripped_list = [line.strip() for line in line_list] - -You can select only certain elements by adding an ``"if"`` condition:: - - stripped_list = [line.strip() for line in line_list - if line != ""] - -With a list comprehension, you get back a Python list; -``stripped_list`` is a list containing the resulting lines, not an -iterator. Generator expressions return an iterator that computes the -values as necessary, not needing to materialize all the values at -once. This means that list comprehensions aren't useful if you're -working with iterators that return an infinite stream or a very large -amount of data. Generator expressions are preferable in these -situations. - -Generator expressions are surrounded by parentheses ("()") and list -comprehensions are surrounded by square brackets ("[]"). Generator -expressions have the form:: - - ( expression for expr in sequence1 - if condition1 - for expr2 in sequence2 - if condition2 - for expr3 in sequence3 ... - if condition3 - for exprN in sequenceN - if conditionN ) - -Again, for a list comprehension only the outside brackets are -different (square brackets instead of parentheses). - -The elements of the generated output will be the successive values of -``expression``. The ``if`` clauses are all optional; if present, -``expression`` is only evaluated and added to the result when -``condition`` is true. - -Generator expressions always have to be written inside parentheses, -but the parentheses signalling a function call also count. If you -want to create an iterator that will be immediately passed to a -function you can write:: - - obj_total = sum(obj.count for obj in list_all_objects()) - -The ``for...in`` clauses contain the sequences to be iterated over. -The sequences do not have to be the same length, because they are -iterated over from left to right, **not** in parallel. For each -element in ``sequence1``, ``sequence2`` is looped over from the -beginning. ``sequence3`` is then looped over for each -resulting pair of elements from ``sequence1`` and ``sequence2``. - -To put it another way, a list comprehension or generator expression is -equivalent to the following Python code:: - - for expr1 in sequence1: - if not (condition1): - continue # Skip this element - for expr2 in sequence2: - if not (condition2): - continue # Skip this element - ... - for exprN in sequenceN: - if not (conditionN): - continue # Skip this element - - # Output the value of - # the expression. - -This means that when there are multiple ``for...in`` clauses but no -``if`` clauses, the length of the resulting output will be equal to -the product of the lengths of all the sequences. If you have two -lists of length 3, the output list is 9 elements long:: - - seq1 = 'abc' - seq2 = (1,2,3) - >>> [ (x,y) for x in seq1 for y in seq2] - [('a', 1), ('a', 2), ('a', 3), - ('b', 1), ('b', 2), ('b', 3), - ('c', 1), ('c', 2), ('c', 3)] - -To avoid introducing an ambiguity into Python's grammar, if -``expression`` is creating a tuple, it must be surrounded with -parentheses. The first list comprehension below is a syntax error, -while the second one is correct:: - - # Syntax error - [ x,y for x in seq1 for y in seq2] - # Correct - [ (x,y) for x in seq1 for y in seq2] - - -Generators ------------------------ - -Generators are a special class of functions that simplify the task of -writing iterators. Regular functions compute a value and return it, -but generators return an iterator that returns a stream of values. - -You're doubtless familiar with how regular function calls work in -Python or C. When you call a function, it gets a private namespace -where its local variables are created. When the function reaches a -``return`` statement, the local variables are destroyed and the -value is returned to the caller. A later call to the same function -creates a new private namespace and a fresh set of local -variables. But, what if the local variables weren't thrown away on -exiting a function? What if you could later resume the function where -it left off? This is what generators provide; they can be thought of -as resumable functions. - -Here's the simplest example of a generator function:: - - def generate_ints(N): - for i in range(N): - yield i - -Any function containing a ``yield`` keyword is a generator function; -this is detected by Python's bytecode compiler which compiles the -function specially as a result. - -When you call a generator function, it doesn't return a single value; -instead it returns a generator object that supports the iterator -protocol. On executing the ``yield`` expression, the generator -outputs the value of ``i``, similar to a ``return`` -statement. The big difference between ``yield`` and a -``return`` statement is that on reaching a ``yield`` the -generator's state of execution is suspended and local variables are -preserved. On the next call to the generator's ``.next()`` method, -the function will resume executing. - -Here's a sample usage of the ``generate_ints()`` generator:: - - >>> gen = generate_ints(3) - >>> gen - - >>> gen.next() - 0 - >>> gen.next() - 1 - >>> gen.next() - 2 - >>> gen.next() - Traceback (most recent call last): - File "stdin", line 1, in ? - File "stdin", line 2, in generate_ints - StopIteration - -You could equally write ``for i in generate_ints(5)``, or -``a,b,c = generate_ints(3)``. - -Inside a generator function, the ``return`` statement can only be used -without a value, and signals the end of the procession of values; -after executing a ``return`` the generator cannot return any further -values. ``return`` with a value, such as ``return 5``, is a syntax -error inside a generator function. The end of the generator's results -can also be indicated by raising ``StopIteration`` manually, or by -just letting the flow of execution fall off the bottom of the -function. - -You could achieve the effect of generators manually by writing your -own class and storing all the local variables of the generator as -instance variables. For example, returning a list of integers could -be done by setting ``self.count`` to 0, and having the -``next()`` method increment ``self.count`` and return it. -However, for a moderately complicated generator, writing a -corresponding class can be much messier. - -The test suite included with Python's library, ``test_generators.py``, -contains a number of more interesting examples. Here's one generator -that implements an in-order traversal of a tree using generators -recursively. - -:: - - # A recursive generator that generates Tree leaves in in-order. - def inorder(t): - if t: - for x in inorder(t.left): - yield x - - yield t.label - - for x in inorder(t.right): - yield x - -Two other examples in ``test_generators.py`` produce -solutions for the N-Queens problem (placing N queens on an NxN -chess board so that no queen threatens another) and the Knight's Tour -(finding a route that takes a knight to every square of an NxN chessboard -without visiting any square twice). - - - -Passing values into a generator -'''''''''''''''''''''''''''''''''''''''''''''' - -In Python 2.4 and earlier, generators only produced output. Once a -generator's code was invoked to create an iterator, there was no way to -pass any new information into the function when its execution is -resumed. You could hack together this ability by making the -generator look at a global variable or by passing in some mutable object -that callers then modify, but these approaches are messy. - -In Python 2.5 there's a simple way to pass values into a generator. -``yield`` became an expression, returning a value that can be assigned -to a variable or otherwise operated on:: - - val = (yield i) - -I recommend that you **always** put parentheses around a ``yield`` -expression when you're doing something with the returned value, as in -the above example. The parentheses aren't always necessary, but it's -easier to always add them instead of having to remember when they're -needed. - -(PEP 342 explains the exact rules, which are that a -``yield``-expression must always be parenthesized except when it -occurs at the top-level expression on the right-hand side of an -assignment. This means you can write ``val = yield i`` but have to -use parentheses when there's an operation, as in ``val = (yield i) -+ 12``.) - -Values are sent into a generator by calling its -``send(value)`` method. This method resumes the -generator's code and the ``yield`` expression returns the specified -value. If the regular ``next()`` method is called, the -``yield`` returns ``None``. - -Here's a simple counter that increments by 1 and allows changing the -value of the internal counter. - -:: - - def counter (maximum): - i = 0 - while i < maximum: - val = (yield i) - # If value provided, change counter - if val is not None: - i = val - else: - i += 1 - -And here's an example of changing the counter: - - >>> it = counter(10) - >>> print it.next() - 0 - >>> print it.next() - 1 - >>> print it.send(8) - 8 - >>> print it.next() - 9 - >>> print it.next() - Traceback (most recent call last): - File ``t.py'', line 15, in ? - print it.next() - StopIteration - -Because ``yield`` will often be returning ``None``, you -should always check for this case. Don't just use its value in -expressions unless you're sure that the ``send()`` method -will be the only method used resume your generator function. - -In addition to ``send()``, there are two other new methods on -generators: - -* ``throw(type, value=None, traceback=None)`` is used to raise an exception inside the - generator; the exception is raised by the ``yield`` expression - where the generator's execution is paused. - -* ``close()`` raises a ``GeneratorExit`` - exception inside the generator to terminate the iteration. - On receiving this - exception, the generator's code must either raise - ``GeneratorExit`` or ``StopIteration``; catching the - exception and doing anything else is illegal and will trigger - a ``RuntimeError``. ``close()`` will also be called by - Python's garbage collector when the generator is garbage-collected. - - If you need to run cleanup code when a ``GeneratorExit`` occurs, - I suggest using a ``try: ... finally:`` suite instead of - catching ``GeneratorExit``. - -The cumulative effect of these changes is to turn generators from -one-way producers of information into both producers and consumers. - -Generators also become **coroutines**, a more generalized form of -subroutines. Subroutines are entered at one point and exited at -another point (the top of the function, and a ``return`` -statement), but coroutines can be entered, exited, and resumed at -many different points (the ``yield`` statements). - - -Built-in functions ----------------------------------------------- - -Let's look in more detail at built-in functions often used with iterators. - -Two Python's built-in functions, ``map()`` and ``filter()``, are -somewhat obsolete; they duplicate the features of list comprehensions -but return actual lists instead of iterators. - -``map(f, iterA, iterB, ...)`` returns a list containing ``f(iterA[0], -iterB[0]), f(iterA[1], iterB[1]), f(iterA[2], iterB[2]), ...``. - -:: - - def upper(s): - return s.upper() - map(upper, ['sentence', 'fragment']) => - ['SENTENCE', 'FRAGMENT'] - - [upper(s) for s in ['sentence', 'fragment']] => - ['SENTENCE', 'FRAGMENT'] - -As shown above, you can achieve the same effect with a list -comprehension. The ``itertools.imap()`` function does the same thing -but can handle infinite iterators; it'll be discussed later, in the section on -the ``itertools`` module. - -``filter(predicate, iter)`` returns a list -that contains all the sequence elements that meet a certain condition, -and is similarly duplicated by list comprehensions. -A **predicate** is a function that returns the truth value of -some condition; for use with ``filter()``, the predicate must take a -single value. - -:: - - def is_even(x): - return (x % 2) == 0 - - filter(is_even, range(10)) => - [0, 2, 4, 6, 8] - -This can also be written as a list comprehension:: - - >>> [x for x in range(10) if is_even(x)] - [0, 2, 4, 6, 8] - -``filter()`` also has a counterpart in the ``itertools`` module, -``itertools.ifilter()``, that returns an iterator and -can therefore handle infinite sequences just as ``itertools.imap()`` can. - -``reduce(func, iter, [initial_value])`` doesn't have a counterpart in -the ``itertools`` module because it cumulatively performs an operation -on all the iterable's elements and therefore can't be applied to -infinite iterables. ``func`` must be a function that takes two elements -and returns a single value. ``reduce()`` takes the first two elements -A and B returned by the iterator and calculates ``func(A, B)``. It -then requests the third element, C, calculates ``func(func(A, B), -C)``, combines this result with the fourth element returned, and -continues until the iterable is exhausted. If the iterable returns no -values at all, a ``TypeError`` exception is raised. If the initial -value is supplied, it's used as a starting point and -``func(initial_value, A)`` is the first calculation. - -:: - - import operator - reduce(operator.concat, ['A', 'BB', 'C']) => - 'ABBC' - reduce(operator.concat, []) => - TypeError: reduce() of empty sequence with no initial value - reduce(operator.mul, [1,2,3], 1) => - 6 - reduce(operator.mul, [], 1) => - 1 - -If you use ``operator.add`` with ``reduce()``, you'll add up all the -elements of the iterable. This case is so common that there's a special -built-in called ``sum()`` to compute it:: - - reduce(operator.add, [1,2,3,4], 0) => - 10 - sum([1,2,3,4]) => - 10 - sum([]) => - 0 - -For many uses of ``reduce()``, though, it can be clearer to just write -the obvious ``for`` loop:: - - # Instead of: - product = reduce(operator.mul, [1,2,3], 1) - - # You can write: - product = 1 - for i in [1,2,3]: - product *= i - - -``enumerate(iter)`` counts off the elements in the iterable, returning -2-tuples containing the count and each element. - -:: - - enumerate(['subject', 'verb', 'object']) => - (0, 'subject'), (1, 'verb'), (2, 'object') - -``enumerate()`` is often used when looping through a list -and recording the indexes at which certain conditions are met:: - - f = open('data.txt', 'r') - for i, line in enumerate(f): - if line.strip() == '': - print 'Blank line at line #%i' % i - -``sorted(iterable, [cmp=None], [key=None], [reverse=False)`` -collects all the elements of the iterable into a list, sorts -the list, and returns the sorted result. The ``cmp``, ``key``, -and ``reverse`` arguments are passed through to the -constructed list's ``.sort()`` method. - -:: - - import random - # Generate 8 random numbers between [0, 10000) - rand_list = random.sample(range(10000), 8) - rand_list => - [769, 7953, 9828, 6431, 8442, 9878, 6213, 2207] - sorted(rand_list) => - [769, 2207, 6213, 6431, 7953, 8442, 9828, 9878] - sorted(rand_list, reverse=True) => - [9878, 9828, 8442, 7953, 6431, 6213, 2207, 769] - -(For a more detailed discussion of sorting, see the Sorting mini-HOWTO -in the Python wiki at http://wiki.python.org/moin/HowTo/Sorting.) - -The ``any(iter)`` and ``all(iter)`` built-ins look at -the truth values of an iterable's contents. ``any()`` returns -True if any element in the iterable is a true value, and ``all()`` -returns True if all of the elements are true values:: - - any([0,1,0]) => - True - any([0,0,0]) => - False - any([1,1,1]) => - True - all([0,1,0]) => - False - all([0,0,0]) => - False - all([1,1,1]) => - True - - -Small functions and the lambda statement ----------------------------------------------- - -When writing functional-style programs, you'll often need little -functions that act as predicates or that combine elements in some way. - -If there's a Python built-in or a module function that's suitable, you -don't need to define a new function at all:: - - stripped_lines = [line.strip() for line in lines] - existing_files = filter(os.path.exists, file_list) - -If the function you need doesn't exist, you need to write it. One way -to write small functions is to use the ``lambda`` statement. ``lambda`` -takes a number of parameters and an expression combining these parameters, -and creates a small function that returns the value of the expression:: - - lowercase = lambda x: x.lower() - - print_assign = lambda name, value: name + '=' + str(value) - - adder = lambda x, y: x+y - -An alternative is to just use the ``def`` statement and define a -function in the usual way:: - - def lowercase(x): - return x.lower() - - def print_assign(name, value): - return name + '=' + str(value) - - def adder(x,y): - return x + y - -Which alternative is preferable? That's a style question; my usual -course is to avoid using ``lambda``. - -One reason for my preference is that ``lambda`` is quite limited in -the functions it can define. The result has to be computable as a -single expression, which means you can't have multiway -``if... elif... else`` comparisons or ``try... except`` statements. -If you try to do too much in a ``lambda`` statement, you'll end up -with an overly complicated expression that's hard to read. Quick, -what's the following code doing? - -:: - - total = reduce(lambda a, b: (0, a[1] + b[1]), items)[1] - -You can figure it out, but it takes time to disentangle the expression -to figure out what's going on. Using a short nested -``def`` statements makes things a little bit better:: - - def combine (a, b): - return 0, a[1] + b[1] - - total = reduce(combine, items)[1] - -But it would be best of all if I had simply used a ``for`` loop:: - - total = 0 - for a, b in items: - total += b - -Or the ``sum()`` built-in and a generator expression:: - - total = sum(b for a,b in items) - -Many uses of ``reduce()`` are clearer when written as ``for`` loops. - -Fredrik Lundh once suggested the following set of rules for refactoring -uses of ``lambda``: - -1) Write a lambda function. -2) Write a comment explaining what the heck that lambda does. -3) Study the comment for a while, and think of a name that captures - the essence of the comment. -4) Convert the lambda to a def statement, using that name. -5) Remove the comment. - -I really like these rules, but you're free to disagree that this -lambda-free style is better. - - -The itertools module ------------------------ - -The ``itertools`` module contains a number of commonly-used iterators -as well as functions for combining several iterators. This section -will introduce the module's contents by showing small examples. - -The module's functions fall into a few broad classes: - -* Functions that create a new iterator based on an existing iterator. -* Functions for treating an iterator's elements as function arguments. -* Functions for selecting portions of an iterator's output. -* A function for grouping an iterator's output. - -Creating new iterators -'''''''''''''''''''''' - -``itertools.count(n)`` returns an infinite stream of -integers, increasing by 1 each time. You can optionally supply the -starting number, which defaults to 0:: - - itertools.count() => - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ... - itertools.count(10) => - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, ... - -``itertools.cycle(iter)`` saves a copy of the contents of a provided -iterable and returns a new iterator that returns its elements from -first to last. The new iterator will repeat these elements infinitely. - -:: - - itertools.cycle([1,2,3,4,5]) => - 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... - -``itertools.repeat(elem, [n])`` returns the provided element ``n`` -times, or returns the element endlessly if ``n`` is not provided. - -:: - - itertools.repeat('abc') => - abc, abc, abc, abc, abc, abc, abc, abc, abc, abc, ... - itertools.repeat('abc', 5) => - abc, abc, abc, abc, abc - -``itertools.chain(iterA, iterB, ...)`` takes an arbitrary number of -iterables as input, and returns all the elements of the first -iterator, then all the elements of the second, and so on, until all of -the iterables have been exhausted. - -:: - - itertools.chain(['a', 'b', 'c'], (1, 2, 3)) => - a, b, c, 1, 2, 3 - -``itertools.izip(iterA, iterB, ...)`` takes one element from each iterable -and returns them in a tuple:: - - itertools.izip(['a', 'b', 'c'], (1, 2, 3)) => - ('a', 1), ('b', 2), ('c', 3) - -It's similiar to the built-in ``zip()`` function, but doesn't -construct an in-memory list and exhaust all the input iterators before -returning; instead tuples are constructed and returned only if they're -requested. (The technical term for this behaviour is -`lazy evaluation `__.) - -This iterator is intended to be used with iterables that are all of -the same length. If the iterables are of different lengths, the -resulting stream will be the same length as the shortest iterable. - -:: - - itertools.izip(['a', 'b'], (1, 2, 3)) => - ('a', 1), ('b', 2) - -You should avoid doing this, though, because an element may be taken -from the longer iterators and discarded. This means you can't go on -to use the iterators further because you risk skipping a discarded -element. - -``itertools.islice(iter, [start], stop, [step])`` returns a stream -that's a slice of the iterator. With a single ``stop`` argument, -it will return the first ``stop`` -elements. If you supply a starting index, you'll get ``stop-start`` -elements, and if you supply a value for ``step``, elements will be -skipped accordingly. Unlike Python's string and list slicing, you -can't use negative values for ``start``, ``stop``, or ``step``. - -:: - - itertools.islice(range(10), 8) => - 0, 1, 2, 3, 4, 5, 6, 7 - itertools.islice(range(10), 2, 8) => - 2, 3, 4, 5, 6, 7 - itertools.islice(range(10), 2, 8, 2) => - 2, 4, 6 - -``itertools.tee(iter, [n])`` replicates an iterator; it returns ``n`` -independent iterators that will all return the contents of the source -iterator. If you don't supply a value for ``n``, the default is 2. -Replicating iterators requires saving some of the contents of the source -iterator, so this can consume significant memory if the iterator is large -and one of the new iterators is consumed more than the others. - -:: - - itertools.tee( itertools.count() ) => - iterA, iterB - - where iterA -> - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ... - - and iterB -> - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ... - - -Calling functions on elements -''''''''''''''''''''''''''''' - -Two functions are used for calling other functions on the contents of an -iterable. - -``itertools.imap(f, iterA, iterB, ...)`` returns -a stream containing ``f(iterA[0], iterB[0]), f(iterA[1], iterB[1]), -f(iterA[2], iterB[2]), ...``:: - - itertools.imap(operator.add, [5, 6, 5], [1, 2, 3]) => - 6, 8, 8 - -The ``operator`` module contains a set of functions -corresponding to Python's operators. Some examples are -``operator.add(a, b)`` (adds two values), -``operator.ne(a, b)`` (same as ``a!=b``), -and -``operator.attrgetter('id')`` (returns a callable that -fetches the ``"id"`` attribute). - -``itertools.starmap(func, iter)`` assumes that the iterable will -return a stream of tuples, and calls ``f()`` using these tuples as the -arguments:: - - itertools.starmap(os.path.join, - [('/usr', 'bin', 'java'), ('/bin', 'python'), - ('/usr', 'bin', 'perl'),('/usr', 'bin', 'ruby')]) - => - /usr/bin/java, /bin/python, /usr/bin/perl, /usr/bin/ruby - - -Selecting elements -'''''''''''''''''' - -Another group of functions chooses a subset of an iterator's elements -based on a predicate. - -``itertools.ifilter(predicate, iter)`` returns all the elements for -which the predicate returns true:: - - def is_even(x): - return (x % 2) == 0 - - itertools.ifilter(is_even, itertools.count()) => - 0, 2, 4, 6, 8, 10, 12, 14, ... - -``itertools.ifilterfalse(predicate, iter)`` is the opposite, -returning all elements for which the predicate returns false:: - - itertools.ifilterfalse(is_even, itertools.count()) => - 1, 3, 5, 7, 9, 11, 13, 15, ... - -``itertools.takewhile(predicate, iter)`` returns elements for as long -as the predicate returns true. Once the predicate returns false, -the iterator will signal the end of its results. - -:: - - def less_than_10(x): - return (x < 10) - - itertools.takewhile(less_than_10, itertools.count()) => - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 - - itertools.takewhile(is_even, itertools.count()) => - 0 - -``itertools.dropwhile(predicate, iter)`` discards elements while the -predicate returns true, and then returns the rest of the iterable's -results. - -:: - - itertools.dropwhile(less_than_10, itertools.count()) => - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, ... - - itertools.dropwhile(is_even, itertools.count()) => - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ... - - -Grouping elements -''''''''''''''''' - -The last function I'll discuss, ``itertools.groupby(iter, -key_func=None)``, is the most complicated. ``key_func(elem)`` is a -function that can compute a key value for each element returned by the -iterable. If you don't supply a key function, the key is simply each -element itself. - -``groupby()`` collects all the consecutive elements from the -underlying iterable that have the same key value, and returns a stream -of 2-tuples containing a key value and an iterator for the elements -with that key. - -:: - - city_list = [('Decatur', 'AL'), ('Huntsville', 'AL'), ('Selma', 'AL'), - ('Anchorage', 'AK'), ('Nome', 'AK'), - ('Flagstaff', 'AZ'), ('Phoenix', 'AZ'), ('Tucson', 'AZ'), - ... - ] - - def get_state ((city, state)): - return state - - itertools.groupby(city_list, get_state) => - ('AL', iterator-1), - ('AK', iterator-2), - ('AZ', iterator-3), ... - - where - iterator-1 => - ('Decatur', 'AL'), ('Huntsville', 'AL'), ('Selma', 'AL') - iterator-2 => - ('Anchorage', 'AK'), ('Nome', 'AK') - iterator-3 => - ('Flagstaff', 'AZ'), ('Phoenix', 'AZ'), ('Tucson', 'AZ') - -``groupby()`` assumes that the underlying iterable's contents will -already be sorted based on the key. Note that the returned iterators -also use the underlying iterable, so you have to consume the results -of iterator-1 before requesting iterator-2 and its corresponding key. - - -The functools module ----------------------------------------------- - -The ``functools`` module in Python 2.5 contains some higher-order -functions. A **higher-order function** takes one or more functions as -input and returns a new function. The most useful tool in this module -is the ``partial()`` function. - -For programs written in a functional style, you'll sometimes want to -construct variants of existing functions that have some of the -parameters filled in. Consider a Python function ``f(a, b, c)``; you -may wish to create a new function ``g(b, c)`` that's equivalent to -``f(1, b, c)``; you're filling in a value for one of ``f()``'s parameters. -This is called "partial function application". - -The constructor for ``partial`` takes the arguments ``(function, arg1, -arg2, ... kwarg1=value1, kwarg2=value2)``. The resulting object is -callable, so you can just call it to invoke ``function`` with the -filled-in arguments. - -Here's a small but realistic example:: - - import functools - - def log (message, subsystem): - "Write the contents of 'message' to the specified subsystem." - print '%s: %s' % (subsystem, message) - ... - - server_log = functools.partial(log, subsystem='server') - server_log('Unable to open socket') - - -The operator module -------------------- - -The ``operator`` module was mentioned earlier. It contains a set of -functions corresponding to Python's operators. These functions -are often useful in functional-style code because they save you -from writing trivial functions that perform a single operation. - -Some of the functions in this module are: - -* Math operations: ``add()``, ``sub()``, ``mul()``, ``div()``, ``floordiv()``, - ``abs()``, ... -* Logical operations: ``not_()``, ``truth()``. -* Bitwise operations: ``and_()``, ``or_()``, ``invert()``. -* Comparisons: ``eq()``, ``ne()``, ``lt()``, ``le()``, ``gt()``, and ``ge()``. -* Object identity: ``is_()``, ``is_not()``. - -Consult `the operator module's documentation `__ for a complete -list. - - - -The functional module ---------------------- - -Collin Winter's `functional module `__ -provides a number of more -advanced tools for functional programming. It also reimplements -several Python built-ins, trying to make them more intuitive to those -used to functional programming in other languages. - -This section contains an introduction to some of the most important -functions in ``functional``; full documentation can be found at `the -project's website `__. - -``compose(outer, inner, unpack=False)`` - -The ``compose()`` function implements function composition. -In other words, it returns a wrapper around the ``outer`` and ``inner`` callables, such -that the return value from ``inner`` is fed directly to ``outer``. That is, - -:: - - >>> def add(a, b): - ... return a + b - ... - >>> def double(a): - ... return 2 * a - ... - >>> compose(double, add)(5, 6) - 22 - -is equivalent to - -:: - - >>> double(add(5, 6)) - 22 - -The ``unpack`` keyword is provided to work around the fact that Python functions are not always -`fully curried `__. -By default, it is expected that the ``inner`` function will return a single object and that the ``outer`` -function will take a single argument. Setting the ``unpack`` argument causes ``compose`` to expect a -tuple from ``inner`` which will be expanded before being passed to ``outer``. Put simply, - -:: - - compose(f, g)(5, 6) - -is equivalent to:: - - f(g(5, 6)) - -while - -:: - - compose(f, g, unpack=True)(5, 6) - -is equivalent to:: - - f(*g(5, 6)) - -Even though ``compose()`` only accepts two functions, it's trivial to -build up a version that will compose any number of functions. We'll -use ``reduce()``, ``compose()`` and ``partial()`` (the last of which -is provided by both ``functional`` and ``functools``). - -:: - - from functional import compose, partial - - multi_compose = partial(reduce, compose) - - -We can also use ``map()``, ``compose()`` and ``partial()`` to craft a -version of ``"".join(...)`` that converts its arguments to string:: - - from functional import compose, partial - - join = compose("".join, partial(map, str)) - - -``flip(func)`` - -``flip()`` wraps the callable in ``func`` and -causes it to receive its non-keyword arguments in reverse order. - -:: - - >>> def triple(a, b, c): - ... return (a, b, c) - ... - >>> triple(5, 6, 7) - (5, 6, 7) - >>> - >>> flipped_triple = flip(triple) - >>> flipped_triple(5, 6, 7) - (7, 6, 5) - -``foldl(func, start, iterable)`` - -``foldl()`` takes a binary function, a starting value (usually some kind of 'zero'), and an iterable. -The function is applied to the starting value and the first element of the list, then the result of -that and the second element of the list, then the result of that and the third element of the list, -and so on. - -This means that a call such as:: - - foldl(f, 0, [1, 2, 3]) - -is equivalent to:: - - f(f(f(0, 1), 2), 3) - - -``foldl()`` is roughly equivalent to the following recursive function:: - - def foldl(func, start, seq): - if len(seq) == 0: - return start - - return foldl(func, func(start, seq[0]), seq[1:]) - -Speaking of equivalence, the above ``foldl`` call can be expressed in terms of the built-in ``reduce`` like -so:: - - reduce(f, [1, 2, 3], 0) - - -We can use ``foldl()``, ``operator.concat()`` and ``partial()`` to -write a cleaner, more aesthetically-pleasing version of Python's -``"".join(...)`` idiom:: - - from functional import foldl, partial - from operator import concat - - join = partial(foldl, concat, "") - - -Revision History and Acknowledgements ------------------------------------------------- - -The author would like to thank the following people for offering -suggestions, corrections and assistance with various drafts of this -article: Ian Bicking, Nick Coghlan, Nick Efford, Raymond Hettinger, -Jim Jewett, Mike Krell, Leandro Lameiro, Jussi Salmela, -Collin Winter, Blake Winton. - -Version 0.1: posted June 30 2006. - -Version 0.11: posted July 1 2006. Typo fixes. - -Version 0.2: posted July 10 2006. Merged genexp and listcomp -sections into one. Typo fixes. - -Version 0.21: Added more references suggested on the tutor mailing list. - -Version 0.30: Adds a section on the ``functional`` module written by -Collin Winter; adds short section on the operator module; a few other -edits. - - -References --------------------- - -General -''''''''''''''' - -**Structure and Interpretation of Computer Programs**, by -Harold Abelson and Gerald Jay Sussman with Julie Sussman. -Full text at http://mitpress.mit.edu/sicp/. -In this classic textbook of computer science, chapters 2 and 3 discuss the -use of sequences and streams to organize the data flow inside a -program. The book uses Scheme for its examples, but many of the -design approaches described in these chapters are applicable to -functional-style Python code. - -http://www.defmacro.org/ramblings/fp.html: A general -introduction to functional programming that uses Java examples -and has a lengthy historical introduction. - -http://en.wikipedia.org/wiki/Functional_programming: -General Wikipedia entry describing functional programming. - -http://en.wikipedia.org/wiki/Coroutine: -Entry for coroutines. - -http://en.wikipedia.org/wiki/Currying: -Entry for the concept of currying. - -Python-specific -''''''''''''''''''''''''''' - -http://gnosis.cx/TPiP/: -The first chapter of David Mertz's book :title-reference:`Text Processing in Python` -discusses functional programming for text processing, in the section titled -"Utilizing Higher-Order Functions in Text Processing". - -Mertz also wrote a 3-part series of articles on functional programming -for IBM's DeveloperWorks site; see -`part 1 `__, -`part 2 `__, and -`part 3 `__, - - -Python documentation -''''''''''''''''''''''''''' - -http://docs.python.org/lib/module-itertools.html: -Documentation for the ``itertools`` module. - -http://docs.python.org/lib/module-operator.html: -Documentation for the ``operator`` module. - -http://www.python.org/dev/peps/pep-0289/: -PEP 289: "Generator Expressions" - -http://www.python.org/dev/peps/pep-0342/ -PEP 342: "Coroutines via Enhanced Generators" describes the new generator -features in Python 2.5. - -.. comment - - Topics to place - ----------------------------- - - XXX os.walk() - - XXX Need a large example. - - But will an example add much? I'll post a first draft and see - what the comments say. - -.. comment - - Original outline: - Introduction - Idea of FP - Programs built out of functions - Functions are strictly input-output, no internal state - Opposed to OO programming, where objects have state - - Why FP? - Formal provability - Assignment is difficult to reason about - Not very relevant to Python - Modularity - Small functions that do one thing - Debuggability: - Easy to test due to lack of state - Easy to verify output from intermediate steps - Composability - You assemble a toolbox of functions that can be mixed - - Tackling a problem - Need a significant example - - Iterators - Generators - The itertools module - List comprehensions - Small functions and the lambda statement - Built-in functions - map - filter - reduce - -.. comment - - Handy little function for printing part of an iterator -- used - while writing this document. - - import itertools - def print_iter(it): - slice = itertools.islice(it, 10) - for elem in slice[:-1]: - sys.stdout.write(str(elem)) - sys.stdout.write(', ') - print elem[-1] - - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/garcia-wachs.kk b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/garcia-wachs.kk deleted file mode 100644 index 91a01fb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/garcia-wachs.kk +++ /dev/null @@ -1,133 +0,0 @@ -// Koka language test module - -// This module implements the GarsiaWachs algorithm. -// It is an adaptation of the algorithm in ML as described by JeanChristophe Filli�tre: -// in ''A functional implementation of the GarsiaWachs algorithm. (functional pearl). ML workshop 2008, pages 91--96''. -// See: http://www.lri.fr/~filliatr/publis/gwWml08.pdf -// -// The algorithm is interesting since it uses mutable references shared between a list and tree but the -// side effects are not observable from outside. Koka automatically infers that the final algorithm is pure. -// Note: due to a current limitation in the divergence analysis, koka cannot yet infer that mutually recursive -// definitions in "insert" and "extract" are terminating and the final algorithm still has a divergence effect. -// However, koka does infer that no other effect (i.e. an exception due to a partial match) can occur. -module garcsiaWachs - -import test = qualified std/flags - -# pre processor test - -public function main() { - wlist = Cons1(('a',3), [('b',2),('c',1),('d',4),('e',5)]) - tree = wlist.garsiaWachs() - tree.show.println() -} - -//---------------------------------------------------- -// Trees -//---------------------------------------------------- -public type tree { - con Leaf(value :a) - con Node(left :tree, right :tree) -} - -function show( t : tree ) : string { - match(t) { - Leaf(c) -> core/show(c) - Node(l,r) -> "Node(" + show(l) + "," + show(r) + ")" - } -} - - -//---------------------------------------------------- -// Non empty lists -//---------------------------------------------------- -public type list1 { - Cons1( head : a, tail : list ) -} - -function map( xs, f ) { - val Cons1(y,ys) = xs - return Cons1(f(y), core/map(ys,f)) -} - -function zip( xs :list1, ys :list1 ) : list1<(a,b)> { - Cons1( (xs.head, ys.head), zip(xs.tail, ys.tail)) -} - - -//---------------------------------------------------- -// Phase 1 -//---------------------------------------------------- - -function insert( after : list<(tree,int)>, t : (tree,int), before : list<(tree,int)> ) : div tree -{ - match(before) { - Nil -> extract( [], Cons1(t,after) ) - Cons(x,xs) -> { - if (x.snd < t.snd) then return insert( Cons(x,after), t, xs ) - match(xs) { - Nil -> extract( [], Cons1(x,Cons(t,after)) ) - Cons(y,ys) -> extract( ys, Cons1(y,Cons(x,Cons(t,after))) ) - } - } - } -} - -function extract( before : list<(tree,int)>, after : list1<(tree,int)> ) : div tree -{ - val Cons1((t1,w1) as x, xs ) = after - match(xs) { - Nil -> t1 - Cons((t2,w2) as y, ys) -> match(ys) { - Nil -> insert( [], (Node(t1,t2), w1+w2), before ) - Cons((_,w3),_zs) -> - if (w1 <= w3) - then insert(ys, (Node(t1,t2), w1+w2), before) - else extract(Cons(x,before), Cons1(y,ys)) - } - } -} - -function balance( xs : list1<(tree,int)> ) : div tree { - extract( [], xs ) -} - -//---------------------------------------------------- -// Phase 2 -//---------------------------------------------------- - -function mark( depth :int, t :tree<(a,ref)> ) : > () { - match(t) { - Leaf((_,d)) -> d := depth - Node(l,r) -> { mark(depth+1,l); mark(depth+1,r) } - } -} - -function build( depth :int, xs :list1<(a,ref)> ) : ,div> (tree,list<(a,ref)>) -{ - if (!(xs.head.snd) == depth) return (Leaf(xs.head.fst), xs.tail) - - l = build(depth+1, xs) - match(l.snd) { - Nil -> (l.fst, Nil) - Cons(y,ys) -> { - r = build(depth+1, Cons1(y,ys)) - (Node(l.fst,r.fst), r.snd) - } - } -} - -//---------------------------------------------------- -// Main -//---------------------------------------------------- - -public function garsiaWachs( xs : list1<(a,int)> ) : div tree -{ - refs = xs.map(fst).map( fun(x) { (x, ref(0)) } ) - wleafs = zip( refs.map(Leaf), xs.map(snd) ) - - tree = balance(wleafs) - mark(0,tree) - build(0,refs).fst -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/genclass.clj b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/genclass.clj deleted file mode 100644 index c63da8f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/genclass.clj +++ /dev/null @@ -1,510 +0,0 @@ -; Copyright (c) Rich Hickey. All rights reserved. -; The use and distribution terms for this software are covered by the -; Common Public License 1.0 (http://opensource.org/licenses/cpl.php) -; which can be found in the file CPL.TXT at the root of this distribution. -; By using this software in any fashion, you are agreeing to be bound by -; the terms of this license. -; You must not remove this notice, or any other, from this software. - -(in-ns 'clojure) - -(import '(java.lang.reflect Modifier Constructor) - '(clojure.asm ClassWriter ClassVisitor Opcodes Type) - '(clojure.asm.commons Method GeneratorAdapter) - '(clojure.lang IPersistentMap)) - -;(defn method-sig [#^java.lang.reflect.Method meth] -; [(. meth (getName)) (seq (. meth (getParameterTypes)))]) - -(defn- non-private-methods [#^Class c] - (loop [mm {} - considered #{} - c c] - (if c - (let [[mm considered] - (loop [mm mm - considered considered - meths (concat - (seq (. c (getDeclaredMethods))) - (seq (. c (getMethods))))] - (if meths - (let [#^Method meth (first meths) - mods (. meth (getModifiers)) - mk (method-sig meth)] - (if (or (considered mk) - (. Modifier (isPrivate mods)) - (. Modifier (isStatic mods)) - (. Modifier (isFinal mods))) - (recur mm (conj considered mk) (rest meths)) - (recur (assoc mm mk meth) (conj considered mk) (rest meths)))) - [mm considered]))] - (recur mm considered (. c (getSuperclass)))) - mm))) - -(defn- ctor-sigs [super] - (for [#^Constructor ctor (. super (getDeclaredConstructors)) - :when (not (. Modifier (isPrivate (. ctor (getModifiers)))))] - (apply vector (. ctor (getParameterTypes))))) - -(defn- escape-class-name [c] - (.. (.getSimpleName c) - (replace "[]" "<>"))) - -(defn- overload-name [mname pclasses] - (if (seq pclasses) - (apply str mname (interleave (repeat \-) - (map escape-class-name pclasses))) - (str mname "-void"))) - -;(distinct (map first(keys (mapcat non-private-methods [Object IPersistentMap])))) - -(defn gen-class - "Generates compiled bytecode for a class with the given - package-qualified cname (which, as all names in these parameters, can - be a string or symbol). The gen-class construct contains no - implementation, as the implementation will be dynamically sought by - the generated class in functions in a corresponding Clojure - namespace. Given a generated class org.mydomain.MyClass, methods - will be implemented that look for same-named functions in a Clojure - namespace called org.domain.MyClass. The init and main - functions (see below) will be found similarly. The static - initializer for the generated class will attempt to load the Clojure - support code for the class as a resource from the claspath, e.g. in - the example case, org/mydomain/MyClass.clj - - Returns a map containing :name and :bytecode. Most uses will be - satisfied by the higher-level gen-and-load-class and - gen-and-store-class functions, which generate and immediately load, - or generate and store to disk, respectively. - - Options should be a set of key/value pairs, all of which are optional: - - :extends aclass - - Specifies the superclass, the non-private methods of which will be - overridden by the class. If not provided, defaults to Object. - - :implements [interface ...] - - One or more interfaces, the methods of which will be implemented by the class. - - :init name - - If supplied, names a function that will be called with the arguments - to the constructor. Must return [[superclass-constructor-args] state] - If not supplied, the constructor args are passed directly to - the superclass constructor and the state will be nil - - :constructors {[param-types] [super-param-types], ...} - - By default, constructors are created for the generated class which - match the signature(s) of the constructors for the superclass. This - parameter may be used to explicitly specify constructors, each entry - providing a mapping from a constructor signature to a superclass - constructor signature. When you supply this, you must supply an :init - specifier. - - :methods [[name [param-types] return-type], ...] - - The generated class automatically defines all of the non-private - methods of its superclasses/interfaces. This parameter can be used - to specify the signatures of additional methods of the generated - class. Do not repeat superclass/interface signatures here. - - :main boolean - - If supplied and true, a static public main function will be - generated. It will pass each string of the String[] argument as a - separate argument to a function called 'main. - - :factory name - - If supplied, a (set of) public static factory function(s) will be - created with the given name, and the same signature(s) as the - constructor(s). - - :state name - - If supplied, a public final instance field with the given name will be - created. You must supply an :init function in order to provide a - value for the state. Note that, though final, the state can be a ref - or agent, supporting the creation of Java objects with transactional - or asynchronous mutation semantics. - - :exposes {protected-field-name {:get name :set name}, ...} - - Since the implementations of the methods of the generated class - occur in Clojure functions, they have no access to the inherited - protected fields of the superclass. This parameter can be used to - generate public getter/setter methods exposing the protected field(s) - for use in the implementation." - - [cname & options] - (let [name (str cname) - {:keys [extends implements constructors methods main factory state init exposes]} (apply hash-map options) - super (or extends Object) - interfaces implements - supers (cons super (seq interfaces)) - ctor-sig-map (or constructors (zipmap (ctor-sigs super) (ctor-sigs super))) - cv (new ClassWriter (. ClassWriter COMPUTE_MAXS)) - cname (. name (replace "." "/")) - ctype (. Type (getObjectType cname)) - iname (fn [c] (.. Type (getType c) (getInternalName))) - totype (fn [c] (. Type (getType c))) - to-types (fn [cs] (if (pos? (count cs)) - (into-array (map totype cs)) - (make-array Type 0))) - obj-type (totype Object) - arg-types (fn [n] (if (pos? n) - (into-array (replicate n obj-type)) - (make-array Type 0))) - super-type (totype super) - init-name (str init) - factory-name (str factory) - state-name (str state) - main-name "main" - var-name (fn [s] (str s "__var")) - rt-type (totype clojure.lang.RT) - var-type (totype clojure.lang.Var) - ifn-type (totype clojure.lang.IFn) - iseq-type (totype clojure.lang.ISeq) - ex-type (totype java.lang.UnsupportedOperationException) - all-sigs (distinct (concat (map #(let[[m p] (key %)] {m [p]}) (mapcat non-private-methods supers)) - (map (fn [[m p]] {(str m) [p]}) methods))) - sigs-by-name (apply merge-with concat {} all-sigs) - overloads (into {} (filter (fn [[m s]] (rest s)) sigs-by-name)) - var-fields (concat (and init [init-name]) - (and main [main-name]) - (distinct (concat (keys sigs-by-name) - (mapcat (fn [[m s]] (map #(overload-name m %) s)) overloads) - (mapcat (comp (partial map str) vals val) exposes)))) - emit-get-var (fn [gen v] - (let [false-label (. gen newLabel) - end-label (. gen newLabel)] - (. gen getStatic ctype (var-name v) var-type) - (. gen dup) - (. gen invokeVirtual var-type (. Method (getMethod "boolean isBound()"))) - (. gen ifZCmp (. GeneratorAdapter EQ) false-label) - (. gen invokeVirtual var-type (. Method (getMethod "Object get()"))) - (. gen goTo end-label) - (. gen mark false-label) - (. gen pop) - (. gen visitInsn (. Opcodes ACONST_NULL)) - (. gen mark end-label))) - emit-forwarding-method - (fn [mname pclasses rclass else-gen] - (let [ptypes (to-types pclasses) - rtype (totype rclass) - m (new Method mname rtype ptypes) - is-overload (overloads mname) - gen (new GeneratorAdapter (. Opcodes ACC_PUBLIC) m nil nil cv) - found-label (. gen (newLabel)) - else-label (. gen (newLabel)) - end-label (. gen (newLabel))] - (. gen (visitCode)) - (when is-overload - (emit-get-var gen (overload-name mname pclasses)) - (. gen (dup)) - (. gen (ifNonNull found-label)) - (. gen (pop))) - (emit-get-var gen mname) - (. gen (dup)) - (. gen (ifNull else-label)) - (when is-overload - (. gen (mark found-label))) - ;if found - (. gen (loadThis)) - ;box args - (dotimes i (count ptypes) - (. gen (loadArg i)) - (. clojure.lang.Compiler$HostExpr (emitBoxReturn nil gen (nth pclasses i)))) - ;call fn - (. gen (invokeInterface ifn-type (new Method "invoke" obj-type - (into-array (cons obj-type - (replicate (count ptypes) obj-type)))))) - ;unbox return - (. gen (unbox rtype)) - (when (= (. rtype (getSort)) (. Type VOID)) - (. gen (pop))) - (. gen (goTo end-label)) - - ;else call supplied alternative generator - (. gen (mark else-label)) - (. gen (pop)) - - (else-gen gen m) - - (. gen (mark end-label)) - (. gen (returnValue)) - (. gen (endMethod)))) - ] - ;start class definition - (. cv (visit (. Opcodes V1_5) (. Opcodes ACC_PUBLIC) - cname nil (iname super) - (when interfaces - (into-array (map iname interfaces))))) - - ;static fields for vars - (doseq v var-fields - (. cv (visitField (+ (. Opcodes ACC_PUBLIC) (. Opcodes ACC_FINAL) (. Opcodes ACC_STATIC)) - (var-name v) - (. var-type getDescriptor) - nil nil))) - - ;instance field for state - (when state - (. cv (visitField (+ (. Opcodes ACC_PUBLIC) (. Opcodes ACC_FINAL)) - state-name - (. obj-type getDescriptor) - nil nil))) - - ;static init to set up var fields and load clj - (let [gen (new GeneratorAdapter (+ (. Opcodes ACC_PUBLIC) (. Opcodes ACC_STATIC)) - (. Method getMethod "void ()") - nil nil cv)] - (. gen (visitCode)) - (doseq v var-fields - (. gen push name) - (. gen push v) - (. gen (invokeStatic rt-type (. Method (getMethod "clojure.lang.Var var(String,String)")))) - (. gen putStatic ctype (var-name v) var-type)) - - (. gen push ctype) - (. gen push (str (. name replace \. (. java.io.File separatorChar)) ".clj")) - (. gen (invokeStatic rt-type (. Method (getMethod "void loadResourceScript(Class,String)")))) - - (. gen (returnValue)) - (. gen (endMethod))) - - ;ctors - (doseq [pclasses super-pclasses] ctor-sig-map - (let [ptypes (to-types pclasses) - super-ptypes (to-types super-pclasses) - m (new Method "" (. Type VOID_TYPE) ptypes) - super-m (new Method "" (. Type VOID_TYPE) super-ptypes) - gen (new GeneratorAdapter (. Opcodes ACC_PUBLIC) m nil nil cv) - no-init-label (. gen newLabel) - end-label (. gen newLabel) - nth-method (. Method (getMethod "Object nth(Object,int)")) - local (. gen newLocal obj-type)] - (. gen (visitCode)) - - (if init - (do - (emit-get-var gen init-name) - (. gen dup) - (. gen ifNull no-init-label) - ;box init args - (dotimes i (count pclasses) - (. gen (loadArg i)) - (. clojure.lang.Compiler$HostExpr (emitBoxReturn nil gen (nth pclasses i)))) - ;call init fn - (. gen (invokeInterface ifn-type (new Method "invoke" obj-type - (arg-types (count ptypes))))) - ;expecting [[super-ctor-args] state] returned - (. gen dup) - (. gen push 0) - (. gen (invokeStatic rt-type nth-method)) - (. gen storeLocal local) - - (. gen (loadThis)) - (. gen dupX1) - (dotimes i (count super-pclasses) - (. gen loadLocal local) - (. gen push i) - (. gen (invokeStatic rt-type nth-method)) - (. clojure.lang.Compiler$HostExpr (emitUnboxArg nil gen (nth super-pclasses i)))) - (. gen (invokeConstructor super-type super-m)) - - (if state - (do - (. gen push 1) - (. gen (invokeStatic rt-type nth-method)) - (. gen (putField ctype state-name obj-type))) - (. gen pop)) - - (. gen goTo end-label) - ;no init found - (. gen mark no-init-label) - (. gen (throwException ex-type (str init-name " not defined"))) - (. gen mark end-label)) - (if (= pclasses super-pclasses) - (do - (. gen (loadThis)) - (. gen (loadArgs)) - (. gen (invokeConstructor super-type super-m))) - (throw (new Exception ":init not specified, but ctor and super ctor args differ")))) - - (. gen (returnValue)) - (. gen (endMethod)) - ;factory - (when factory - (let [fm (new Method factory-name ctype ptypes) - gen (new GeneratorAdapter (+ (. Opcodes ACC_PUBLIC) (. Opcodes ACC_STATIC)) - fm nil nil cv)] - (. gen (visitCode)) - (. gen newInstance ctype) - (. gen dup) - (. gen (loadArgs)) - (. gen (invokeConstructor ctype m)) - (. gen (returnValue)) - (. gen (endMethod)))))) - - ;add methods matching supers', if no fn -> call super - (let [mm (non-private-methods super)] - (doseq #^java.lang.reflect.Method meth (vals mm) - (emit-forwarding-method (.getName meth) (.getParameterTypes meth) (.getReturnType meth) - (fn [gen m] - (. gen (loadThis)) - ;push args - (. gen (loadArgs)) - ;call super - (. gen (visitMethodInsn (. Opcodes INVOKESPECIAL) - (. super-type (getInternalName)) - (. m (getName)) - (. m (getDescriptor))))))) - ;add methods matching interfaces', if no fn -> throw - (doseq #^Class iface interfaces - (doseq #^java.lang.reflect.Method meth (. iface (getMethods)) - (when-not (contains? mm (method-sig meth)) - (emit-forwarding-method (.getName meth) (.getParameterTypes meth) (.getReturnType meth) - (fn [gen m] - (. gen (throwException ex-type (. m (getName))))))))) - ;extra methods - (doseq [mname pclasses rclass :as msig] methods - (emit-forwarding-method (str mname) pclasses rclass - (fn [gen m] - (. gen (throwException ex-type (. m (getName)))))))) - - ;main - (when main - (let [m (. Method getMethod "void main (String[])") - gen (new GeneratorAdapter (+ (. Opcodes ACC_PUBLIC) (. Opcodes ACC_STATIC)) - m nil nil cv) - no-main-label (. gen newLabel) - end-label (. gen newLabel)] - (. gen (visitCode)) - - (emit-get-var gen main-name) - (. gen dup) - (. gen ifNull no-main-label) - (. gen loadArgs) - (. gen (invokeStatic rt-type (. Method (getMethod "clojure.lang.ISeq seq(Object)")))) - (. gen (invokeInterface ifn-type (new Method "applyTo" obj-type - (into-array [iseq-type])))) - (. gen pop) - (. gen goTo end-label) - ;no main found - (. gen mark no-main-label) - (. gen (throwException ex-type (str main-name " not defined"))) - (. gen mark end-label) - (. gen (returnValue)) - (. gen (endMethod)))) - ;field exposers - (doseq [f {getter :get setter :set}] exposes - (let [fld (.getField super (str f)) - ftype (totype (.getType fld))] - (when getter - (let [m (new Method (str getter) ftype (to-types [])) - gen (new GeneratorAdapter (. Opcodes ACC_PUBLIC) m nil nil cv)] - (. gen (visitCode)) - (. gen loadThis) - (. gen getField ctype (str f) ftype) - (. gen (returnValue)) - (. gen (endMethod)))) - (when setter - (let [m (new Method (str setter) (. Type VOID_TYPE) (into-array [ftype])) - gen (new GeneratorAdapter (. Opcodes ACC_PUBLIC) m nil nil cv)] - (. gen (visitCode)) - (. gen loadThis) - (. gen loadArgs) - (. gen putField ctype (str f) ftype) - (. gen (returnValue)) - (. gen (endMethod)))))) - ;finish class def - (. cv (visitEnd)) - {:name name :bytecode (. cv (toByteArray))})) - -(defn gen-and-load-class - "Generates and immediately loads the bytecode for the specified - class. Note that a class generated this way can be loaded only once - - the JVM supports only one class with a given name per - classloader. Subsequent to generation you can import it into any - desired namespaces just like any other class. See gen-class for a - description of the options." - - [name & options] - (let [{:keys [name bytecode]} - (apply gen-class (str name) options)] - (.. clojure.lang.RT ROOT_CLASSLOADER (defineClass (str name) bytecode)))) - -(defn gen-and-save-class - "Generates the bytecode for the named class and stores in a .class - file in a subpath of the supplied path, the directories for which - must already exist. See gen-class for a description of the options" - - [path name & options] - (let [{:keys [name bytecode]} (apply gen-class (str name) options) - file (java.io.File. path (str (. name replace \. (. java.io.File separatorChar)) ".class"))] - (.createNewFile file) - (with-open f (java.io.FileOutputStream. file) - (.write f bytecode)))) - -(comment -;usage -(gen-class - package-qualified-name - ;all below are optional - :extends aclass - :implements [interface ...] - :constructors {[param-types] [super-param-types], } - :methods [[name [param-types] return-type], ] - :main boolean - :factory name - :state name - :init name - :exposes {protected-field {:get name :set name}, }) - -;(gen-and-load-class -(clojure/gen-and-save-class - "/Users/rich/Downloads" - 'fred.lucy.Ethel - :extends clojure.lang.Box ;APersistentMap - :implements [clojure.lang.IPersistentMap] - :state 'state - ;:constructors {[Object] [Object]} - ;:init 'init - :main true - :factory 'create - :methods [['foo [Object] Object] - ['foo [] Object]] - :exposes {'val {:get 'getVal :set 'setVal}}) - -(in-ns 'fred.lucy.Ethel__2276) -(clojure/refer 'clojure :exclude '(assoc seq count cons)) -(defn init [n] [[] n]) -(defn foo - ([this] :foo) - ([this x] x)) -(defn main [x y] (println x y)) -(in-ns 'user) -(def ethel (new fred.lucy.Ethel__2276 42)) -(def ethel (fred.lucy.Ethel__2276.create 21)) -(fred.lucy.Ethel__2276.main (into-array ["lucy" "ricky"])) -(.state ethel) -(.foo ethel 7) -(.foo ethel) -(.getVal ethel) -(.setVal ethel 12) - -(gen-class org.clojure.MyComparator :implements [Comparator]) -(in-ns 'org.clojure.MyComparator) -(defn compare [this x y] ...) - -(load-file "/Users/rich/dev/clojure/src/genclass.clj") - -(clojure/gen-and-save-class "/Users/rich/dev/clojure/gen/" - 'org.clojure.ClojureServlet - :extends javax.servlet.http.HttpServlet) - -) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/genshi_example.xml+genshi b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/genshi_example.xml+genshi deleted file mode 100644 index 8576b04..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/genshi_example.xml+genshi +++ /dev/null @@ -1,193 +0,0 @@ - - - - - $title - - - - -

- - - (${v or 'No'} match${v != 1 and 'es' or ''}) - - -
-

$title ${num_matches(len(tickets))}

- -
-
- Filters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-   - - -
-
- -

- - - - -

- -

- - -

- -
- - - -
-
-
- - - - - -
- Note: See TracQuery - for help on using queries. -
- -
- - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/genshitext_example.genshitext b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/genshitext_example.genshitext deleted file mode 100644 index b82708d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/genshitext_example.genshitext +++ /dev/null @@ -1,33 +0,0 @@ - ## a comment - -\## not a comment - -#if foo - ${bar} -#endif - -The answer is: -#choose - #when 0 == 1 - 0 - #end - #when 1 == 1 - 1 - #end - #otherwise - 2 - #end -#end -- comment about choose - -#for item in items - * ${item} -#end - -#def greeting(name) - Hello, ${name}! -#end -${greeting('world')} - -#with y=7; z=x+10 - $x $y $z -#end diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/glsl.frag b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/glsl.frag deleted file mode 100644 index 132b035..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/glsl.frag +++ /dev/null @@ -1,7 +0,0 @@ -/* Fragment shader */ -void main() -{ - gl_FragColor[0] = gl_FragCoord[0] / 400.0; - gl_FragColor[1] = gl_FragCoord[1] / 400.0; - gl_FragColor[2] = 1.0; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/glsl.vert b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/glsl.vert deleted file mode 100644 index 23dc6a6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/glsl.vert +++ /dev/null @@ -1,13 +0,0 @@ -/* Vertex shader */ -uniform float waveTime; -uniform float waveWidth; -uniform float waveHeight; - -void main(void) -{ - vec4 v = vec4(gl_Vertex); - - v.z = sin(waveWidth * v.x + waveTime) * cos(waveWidth * v.y + waveTime) * waveHeight; - - gl_Position = gl_ModelViewProjectionMatrix * v; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/grammar-test.p6 b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/grammar-test.p6 deleted file mode 100644 index 28107f3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/grammar-test.p6 +++ /dev/null @@ -1,22 +0,0 @@ -token pod_formatting_code { - $=<[A..Z]> - '<' { $*POD_IN_FORMATTINGCODE := 1 } - $=[ '> ]+ - '>' { $*POD_IN_FORMATTINGCODE := 0 } -} - -token pod_string { - + -} - -token something:sym«<» { - -} - -token name { - -} - -token comment:sym<#> { - '#' {} \N* -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/hash_syntax.rb b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/hash_syntax.rb deleted file mode 100644 index 35b2772..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/hash_syntax.rb +++ /dev/null @@ -1,5 +0,0 @@ -{ :old_syntax => 'ok' } -{ 'stings as key' => 'should be ok' } -{ new_syntax: 'broken until now' } -{ withoutunderscore: 'should be ok' } -{ _underscoreinfront: 'might be ok, if I understand the pygments code correct' } diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/hello.at b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/hello.at deleted file mode 100644 index 23af2f2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/hello.at +++ /dev/null @@ -1,6 +0,0 @@ -def me := object: { - def name := "Kevin"; - def sayHello(peerName) { - system.println(peerName + " says hello!"); - }; -}; diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/hello.golo b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/hello.golo deleted file mode 100644 index 7e8ca21..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/hello.golo +++ /dev/null @@ -1,5 +0,0 @@ -module hello.World - -function main = |args| { - println("Hello world!") -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/hello.lsl b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/hello.lsl deleted file mode 100644 index 61697e7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/hello.lsl +++ /dev/null @@ -1,12 +0,0 @@ -default -{ - state_entry() - { - llSay(0, "Hello, Avatar!"); - } - - touch_start(integer total_number) - { - llSay(0, "Touched."); - } -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/hello.smali b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/hello.smali deleted file mode 100644 index e539f00..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/hello.smali +++ /dev/null @@ -1,40 +0,0 @@ -# To Recreate: -# -# echo -e 'class hello {\n public static void main(String[] args) {\n -# System.out.println("hi");\n }\n}\n' > hello.java -# javac -target 1.4 -source 1.4 hello.java -# dx --dex --output=hello.dex hello.class -# baksmali hello.dex -# cat out/hello.smali - -.class Lhello; -.super Ljava/lang/Object; -.source "hello.java" - - -# direct methods -.method constructor ()V - .registers 1 - - .prologue - .line 1 - invoke-direct {p0}, Ljava/lang/Object;->()V - - return-void -.end method - -.method public static main([Ljava/lang/String;)V - .registers 3 - .parameter - - .prologue - .line 3 - sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; - - const-string v1, "hi" - - invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V - - .line 4 - return-void -.end method diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/hello.sp b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/hello.sp deleted file mode 100644 index 7102d27..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/hello.sp +++ /dev/null @@ -1,9 +0,0 @@ -#include - -// Single line comment -/* Multi line - comment */ - -public OnPluginStart() { - PrintToServer("Hello."); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/html+php_faulty.php b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/html+php_faulty.php deleted file mode 100644 index b3d9bbc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/html+php_faulty.php +++ /dev/null @@ -1 +0,0 @@ - - * - * Hybris is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Hybris is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Hybris. If not, see . -*/ -import std.io.file; - -class File { - - protected file, fileName, mode; - - public method File( fileName, mode ){ - me.fileName = fileName; - me.mode = mode; - me.file = fopen ( me.fileName, me.mode); - } - - private method isBinary(){ - return me.mode.find("b") != false; - } - - public method File ( file ){ - me.file = file; - } - - private method __expire() { - me.close(); - } - - public method close(){ - fclose( me.file ); - } - - public method readLine(){ - return line = fgets( me.file ); - } - - public method getFileName(){ - return me.fileName; - } - - public method getSize(){ - return fsize( me.fileName ); - } - - public method getPosition(){ - return ftell( me.file ); - } - - public method readAll(){ - text = ""; - line = ""; - while ( ( line = fgets(me.file) ) != 0 ){ - text += line; - } - return text; - } - - public method read(){ - byte = ' '; - if ( fread( me.file, byte) > 0 ) { - return byte; - } - else { - return -1; - } - } - - public method read( bytes ) { - word = ""; - byte = ' '; - if ( fread( me.file, byte, bytes) > 0 ) { - word += byte; - } - else { - return -1; - } - return word; - } - - public method read ( seek, seekType ){ - if ( me.seek( seek, seekType) == 0 ) { - return -1; - } - - return me.read(); - } - - public method read ( bytes, seek, seekType ){ - if ( me.seek( seek, seekType) == 0 ) { - return -1; - } - - return me.read( bytes ); - } - - public method readType ( type ){ - if ( me.isBinary() == false ) { - return -1; - } - if ( fread (me.file, type ) > 0 ) { - return type; - } - else { - return -1; - } - } - - operator >> ( object ){ - return me.readType(object); - } - - public method readType ( type, bytes ){ - if ( me.isBinary() == false ) { - return -1; - } - if ( fread (me.file, type, bytes ) > 0){ - return type; - } - else { - return -1; - } - } - - public method readType ( type, seek, seekType ){ - if ( ( me.isBinary() == false ) | ( me.seek( seek, seekType) == 0 ) ) { - return -1; - } - - return me.readType( type ); - } - - public method readType( type, bytes, seek, seekType){ - if ( ( me.isBinary() == false ) | ( me.seek( seek, seekType) == 0 ) ) { - return -1; - } - - return me.readType( type, bytes ); - } - - public method write( data ){ - return fwrite( me.file, data ); - } - - operator << ( object ){ - return me.write(object); - } - - public method write ( data, bytes ){ - return fwrite( me.file, data, bytes); - } - - public method seek( pos, mode ){ - return fseek( me.file, pos, mode ); - } - - public method merge ( fileName ){ - text = file ( fileName ); - return me.write ( me.file, text ); - } -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/idl_sample.pro b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/idl_sample.pro deleted file mode 100644 index 814d510..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/idl_sample.pro +++ /dev/null @@ -1,73 +0,0 @@ -; docformat = 'rst' - -; Example IDL (Interactive Data Language) source code. - -;+ -; Get `nIndices` random indices for an array of size `nValues` (without -; repeating an index). -; -; :Examples: -; Try:: -; -; IDL> r = randomu(seed, 10) -; IDL> print, r, format='(4F)' -; 0.6297589 0.7815896 0.2508559 0.7546844 -; 0.1353382 0.1245834 0.8733745 0.0753110 -; 0.8054136 0.9513228 -; IDL> ind = mg_sample(10, 3, seed=seed) -; IDL> print, ind -; 2 4 7 -; IDL> print, r[ind] -; 0.250856 0.135338 0.0753110 -; -; :Returns: -; lonarr(`nIndices`) -; -; :Params: -; nValues : in, required, type=long -; size of array to choose indices from -; nIndices : in, required, type=long -; number of indices needed -; -; :Keywords: -; seed : in, out, optional, type=integer or lonarr(36) -; seed to use for random number generation, leave undefined to use a -; seed generated from the system clock; new seed will be output -;- -function mg_sample, nValues, nIndices, seed=seed - compile_opt strictarr - - ; get random nIndices by finding the indices of the smallest nIndices in a - ; array of random values - values = randomu(seed, nValues) - - ; our random values are uniformly distributed, so ideally the nIndices - ; smallest values are in the first bin of the below histogram - nBins = nValues / nIndices - h = histogram(values, nbins=nBins, reverse_indices=ri) - - ; the candidates for being in the first nIndices will live in bins 0..bin - nCandidates = 0L - for bin = 0L, nBins - 1L do begin - nCandidates += h[bin] - if (nCandidates ge nIndices) then break - endfor - - ; get the candidates and sort them - candidates = ri[ri[0] : ri[bin + 1L] - 1L] - sortedCandidates = sort(values[candidates]) - - ; return the first nIndices of them - return, (candidates[sortedCandidates])[0:nIndices-1L] -end - - -; main-level example program - -r = randomu(seed, 10) -print, r -ind = mg_sample(10, 3, seed=seed) -print, ind -print, r[ind] - -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/iex_example b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/iex_example deleted file mode 100644 index 22407e4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/iex_example +++ /dev/null @@ -1,23 +0,0 @@ -iex> :" multi -...> line ' \s \123 \x20 -...> atom" -:" multi\n line ' S \natom" - -iex(1)> <<"hello"::binary, c :: utf8, x::[4, unit(2)]>> = "hello™1" -"hello™1" - -iex(2)> c -8482 - -iex> 1 + :atom -** (ArithmeticError) bad argument in arithmetic expression - :erlang.+(1, :atom) - -iex(3)> 1 + -...(3)> 2 + -...(3)> 3 -6 - -iex> IO.puts "Hello world" -Hello world -:ok diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/inet_pton6.dg b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/inet_pton6.dg deleted file mode 100644 index 3813d5b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/inet_pton6.dg +++ /dev/null @@ -1,71 +0,0 @@ -import '/re' -import '/sys' - - -# IPv6address = hexpart [ ":" IPv4address ] -# IPv4address = 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT -# hexpart = [ hexseq ] [ "::" [ hexseq ] ] -# hexseq = hex4 *( ":" hex4) -# hex4 = 1*4HEXDIG -hexpart = r'({0}|)(?:::({0}|)|)'.format r'(?:[\da-f]{1,4})(?::[\da-f]{1,4})*' -addrv4 = r'(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})' -addrv6 = re.compile $ r'(?i)(?:{})(?::{})?$'.format hexpart addrv4 - - -# Parse a base-N number given a list of its digits. -# -# :param q: the number of digits in that numeral system -# -# :param digits: an iterable of integers in range [0..q] -# -# :return: a decimal integer -# -base_n = q digits -> foldl (x y -> x * q + y) 0 digits - - -# Parse a sequence of hexadecimal numbers -# -# :param q: a string of colon-separated base-16 integers -# -# :return: an iterable of Python ints -# -unhex = q -> q and map (p -> int p 16) (q.split ':') - - -# Parse an IPv6 address as specified in RFC 4291. -# -# :param address: a string, obviously. -# -# :return: an integer which, written in binary form, points to the same node. -# -inet_pton6 = address -> - not (match = addrv6.match address) => raise $ ValueError 'not a valid IPv6 address' - start, end, *ipv4 = match.groups! - - is_ipv4 = not $ None in ipv4 - shift = (7 - start.count ':' - 2 * is_ipv4) * 16 - - (end is None and shift) or shift < 0 => raise $ ValueError 'not a valid IPv6 address' - hexaddr = (base_n 0x10000 (unhex start) << shift) + base_n 0x10000 (unhex $ end or '') - if (is_ipv4 => (hexaddr << 32) + base_n 0x100 (map int ipv4)) (otherwise => hexaddr) - - -inet6_type = q -> if - q == 0 => 'unspecified' - q == 1 => 'loopback' - (q >> 32) == 0x000000000000ffff => 'IPv4-mapped' - (q >> 64) == 0xfe80000000000000 => 'link-local' - (q >> 120) != 0x00000000000000ff => 'general unicast' - (q >> 112) % (1 << 4) == 0x0000000000000000 => 'multicast w/ reserved scope value' - (q >> 112) % (1 << 4) == 0x000000000000000f => 'multicast w/ reserved scope value' - (q >> 112) % (1 << 4) == 0x0000000000000001 => 'interface-local multicast' - (q >> 112) % (1 << 4) == 0x0000000000000004 => 'admin-local multicast' - (q >> 112) % (1 << 4) == 0x0000000000000005 => 'site-local multicast' - (q >> 112) % (1 << 4) == 0x0000000000000008 => 'organization-local multicast' - (q >> 112) % (1 << 4) == 0x000000000000000e => 'global multicast' - (q >> 112) % (1 << 4) != 0x0000000000000002 => 'multicast w/ unknown scope value' - (q >> 24) % (1 << 112) == 0x00000000000001ff => 'solicited-node multicast' - otherwise => 'link-local multicast' - - -print $ (x -> inet6_type x, hex x) $ inet_pton6 $ sys.stdin.read!.strip! diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/intro.ik b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/intro.ik deleted file mode 100644 index 03fcee3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/intro.ik +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/ioke - -Ioke = LanguageExperiment with( - goal: :expressiveness, - data: as(code), - code: as(data), - features: [ - :dynamic, - :object_oriented, - :prototype_based, - :homoiconic, - :macros - ], - runtimes:(JVM, CLR), - inspirations: set(Io, Smalltalk, Ruby, Lisp) -) - -hello = method("Every example needs a hello world!", - name, - "hello, #{name}!" println) - -Ioke inspirations select( - features include?(:object_oriented) -) each(x, hello(x name)) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ints.php b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ints.php deleted file mode 100644 index 516ab2c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ints.php +++ /dev/null @@ -1,10 +0,0 @@ - - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/intsyn.fun b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/intsyn.fun deleted file mode 100644 index 777b0fd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/intsyn.fun +++ /dev/null @@ -1,675 +0,0 @@ -(* Internal Syntax *) -(* Author: Frank Pfenning, Carsten Schuermann *) -(* Modified: Roberto Virga *) - -functor IntSyn (structure Global : GLOBAL) :> INTSYN = -struct - - type cid = int (* Constant identifier *) - type name = string (* Variable name *) - type mid = int (* Structure identifier *) - type csid = int (* CS module identifier *) - - - (* Contexts *) - datatype 'a Ctx = (* Contexts *) - Null (* G ::= . *) - | Decl of 'a Ctx * 'a (* | G, D *) - - (* ctxPop (G) => G' - Invariant: G = G',D - *) - fun ctxPop (Decl (G, D)) = G - - exception Error of string (* raised if out of space *) - (* ctxLookup (G, k) = D, kth declaration in G from right to left - Invariant: 1 <= k <= |G|, where |G| is length of G - *) - - fun ctxLookup (Decl (G', D), 1) = D - | ctxLookup (Decl (G', _), k') = ctxLookup (G', k'-1) -(* | ctxLookup (Null, k') = (print ("Looking up k' = " ^ Int.toString k' ^ "\n"); raise Error "Out of Bounce\n")*) - (* ctxLookup (Null, k') should not occur by invariant *) - - (* ctxLength G = |G|, the number of declarations in G *) - fun ctxLength G = - let - fun ctxLength' (Null, n) = n - | ctxLength' (Decl(G, _), n)= ctxLength' (G, n+1) - in - ctxLength' (G, 0) - end - - type FgnExp = exn (* foreign expression representation *) - exception UnexpectedFgnExp of FgnExp - (* raised by a constraint solver - if passed an incorrect arg *) - - type FgnCnstr = exn (* foreign unification constraint - representation *) - exception UnexpectedFgnCnstr of FgnCnstr - (* raised by a constraint solver - if passed an incorrect arg *) - - datatype Depend = (* Dependency information *) - No (* P ::= No *) - | Maybe (* | Maybe *) - | Meta (* | Meta *) - - (* Expressions *) - - datatype Uni = (* Universes: *) - Kind (* L ::= Kind *) - | Type (* | Type *) - - datatype Exp = (* Expressions: *) - Uni of Uni (* U ::= L *) - | Pi of (Dec * Depend) * Exp (* | bPi (D, P). V *) - | Root of Head * Spine (* | C @ S *) - | Redex of Exp * Spine (* | U @ S *) - | Lam of Dec * Exp (* | lam D. U *) - | EVar of Exp option ref * Dec Ctx * Exp * (Cnstr ref) list ref - (* | X : G|-V, Cnstr *) - - | EClo of Exp * Sub (* | U[s] *) - | AVar of Exp option ref (* | A *) - | NVar of int (* | n (linear, fully applied) *) - (* grafting variable *) - - | FgnExp of csid * FgnExp - (* | (foreign expression) *) - - and Head = (* Heads: *) - BVar of int (* H ::= k *) - | Const of cid (* | c *) - | Proj of Block * int (* | #k(b) *) - | Skonst of cid (* | c# *) - | Def of cid (* | d *) - | NSDef of cid (* | d (non strict) *) - | FVar of name * Exp * Sub (* | F[s] *) - | FgnConst of csid * ConDec (* | (foreign constant) *) - - and Spine = (* Spines: *) - Nil (* S ::= Nil *) - | App of Exp * Spine (* | U ; S *) - | SClo of Spine * Sub (* | S[s] *) - - and Sub = (* Explicit substitutions: *) - Shift of int (* s ::= ^n *) - | Dot of Front * Sub (* | Ft.s *) - - and Front = (* Fronts: *) - Idx of int (* Ft ::= k *) - | Exp of Exp (* | U *) - | Axp of Exp (* | U (assignable) *) - | Block of Block (* | _x *) - | Undef (* | _ *) - - and Dec = (* Declarations: *) - Dec of name option * Exp (* D ::= x:V *) - | BDec of name option * (cid * Sub) (* | v:l[s] *) - | ADec of name option * int (* | v[^-d] *) - | NDec of name option - - and Block = (* Blocks: *) - Bidx of int (* b ::= v *) - | LVar of Block option ref * Sub * (cid * Sub) - (* | L(l[^k],t) *) - | Inst of Exp list (* | u1, ..., Un *) - - - (* Constraints *) - - and Cnstr = (* Constraint: *) - Solved (* Cnstr ::= solved *) - | Eqn of Dec Ctx * Exp * Exp (* | G|-(U1 == U2) *) - | FgnCnstr of csid * FgnCnstr (* | (foreign) *) - - and Status = (* Status of a constant: *) - Normal (* inert *) - | Constraint of csid * (Dec Ctx * Spine * int -> Exp option) - (* acts as constraint *) - | Foreign of csid * (Spine -> Exp) (* is converted to foreign *) - - and FgnUnify = (* Result of foreign unify *) - Succeed of FgnUnifyResidual list - (* succeed with a list of residual operations *) - | Fail - - and FgnUnifyResidual = (* Residual of foreign unify *) - Assign of Dec Ctx * Exp * Exp * Sub - (* perform the assignment G |- X = U [ss] *) - | Delay of Exp * Cnstr ref - (* delay cnstr, associating it with all the rigid EVars in U *) - - (* Global signature *) - - and ConDec = (* Constant declaration *) - ConDec of string * mid option * int * Status - (* a : K : kind or *) - * Exp * Uni (* c : A : type *) - | ConDef of string * mid option * int (* a = A : K : kind or *) - * Exp * Exp * Uni (* d = M : A : type *) - * Ancestor (* Ancestor info for d or a *) - | AbbrevDef of string * mid option * int - (* a = A : K : kind or *) - * Exp * Exp * Uni (* d = M : A : type *) - | BlockDec of string * mid option (* %block l : SOME G1 PI G2 *) - * Dec Ctx * Dec list - - | BlockDef of string * mid option * cid list - (* %block l = (l1 | ... | ln) *) - - | SkoDec of string * mid option * int (* sa: K : kind or *) - * Exp * Uni (* sc: A : type *) - - and Ancestor = (* Ancestor of d or a *) - Anc of cid option * int * cid option (* head(expand(d)), height, head(expand[height](d)) *) - (* NONE means expands to {x:A}B *) - - datatype StrDec = (* Structure declaration *) - StrDec of string * mid option - - (* Form of constant declaration *) - datatype ConDecForm = - FromCS (* from constraint domain *) - | Ordinary (* ordinary declaration *) - | Clause (* %clause declaration *) - - (* Type abbreviations *) - type dctx = Dec Ctx (* G = . | G,D *) - type eclo = Exp * Sub (* Us = U[s] *) - type bclo = Block * Sub (* Bs = B[s] *) - type cnstr = Cnstr ref - -(* exception Error of string (* raised if out of space *) *) - - - structure FgnExpStd = struct - - structure ToInternal = FgnOpnTable (type arg = unit - type result = Exp) - - structure Map = FgnOpnTable (type arg = Exp -> Exp - type result = Exp) - - structure App = FgnOpnTable (type arg = Exp -> unit - type result = unit) - - structure EqualTo = FgnOpnTable (type arg = Exp - type result = bool) - - structure UnifyWith = FgnOpnTable (type arg = Dec Ctx * Exp - type result = FgnUnify) - - - - fun fold csfe f b = let - val r = ref b - fun g U = r := f (U,!r) - in - App.apply csfe g ; !r - end - - end - - structure FgnCnstrStd = struct - - structure ToInternal = FgnOpnTable (type arg = unit - type result = (Dec Ctx * Exp) list) - - structure Awake = FgnOpnTable (type arg = unit - type result = bool) - - structure Simplify = FgnOpnTable (type arg = unit - type result = bool) - - end - - fun conDecName (ConDec (name, _, _, _, _, _)) = name - | conDecName (ConDef (name, _, _, _, _, _, _)) = name - | conDecName (AbbrevDef (name, _, _, _, _, _)) = name - | conDecName (SkoDec (name, _, _, _, _)) = name - | conDecName (BlockDec (name, _, _, _)) = name - | conDecName (BlockDef (name, _, _)) = name - - fun conDecParent (ConDec (_, parent, _, _, _, _)) = parent - | conDecParent (ConDef (_, parent, _, _, _, _, _)) = parent - | conDecParent (AbbrevDef (_, parent, _, _, _, _)) = parent - | conDecParent (SkoDec (_, parent, _, _, _)) = parent - | conDecParent (BlockDec (_, parent, _, _)) = parent - | conDecParent (BlockDef (_, parent, _)) = parent - - - (* conDecImp (CD) = k - - Invariant: - If CD is either a declaration, definition, abbreviation, or - a Skolem constant - then k stands for the number of implicit elements. - *) - fun conDecImp (ConDec (_, _, i, _, _, _)) = i - | conDecImp (ConDef (_, _, i, _, _, _, _)) = i - | conDecImp (AbbrevDef (_, _, i, _, _, _)) = i - | conDecImp (SkoDec (_, _, i, _, _)) = i - | conDecImp (BlockDec (_, _, _, _)) = 0 (* watch out -- carsten *) - - fun conDecStatus (ConDec (_, _, _, status, _, _)) = status - | conDecStatus _ = Normal - - (* conDecType (CD) = V - - Invariant: - If CD is either a declaration, definition, abbreviation, or - a Skolem constant - then V is the respective type - *) - fun conDecType (ConDec (_, _, _, _, V, _)) = V - | conDecType (ConDef (_, _, _, _, V, _, _)) = V - | conDecType (AbbrevDef (_, _, _, _, V, _)) = V - | conDecType (SkoDec (_, _, _, V, _)) = V - - - (* conDecBlock (CD) = (Gsome, Lpi) - - Invariant: - If CD is block definition - then Gsome is the context of some variables - and Lpi is the list of pi variables - *) - fun conDecBlock (BlockDec (_, _, Gsome, Lpi)) = (Gsome, Lpi) - - (* conDecUni (CD) = L - - Invariant: - If CD is either a declaration, definition, abbreviation, or - a Skolem constant - then L is the respective universe - *) - fun conDecUni (ConDec (_, _, _, _, _, L)) = L - | conDecUni (ConDef (_, _, _, _, _, L, _)) = L - | conDecUni (AbbrevDef (_, _, _, _, _, L)) = L - | conDecUni (SkoDec (_, _, _, _, L)) = L - - - fun strDecName (StrDec (name, _)) = name - - fun strDecParent (StrDec (_, parent)) = parent - - local - val maxCid = Global.maxCid - val dummyEntry = ConDec("", NONE, 0, Normal, Uni (Kind), Kind) - val sgnArray = Array.array (maxCid+1, dummyEntry) - : ConDec Array.array - val nextCid = ref(0) - - val maxMid = Global.maxMid - val sgnStructArray = Array.array (maxMid+1, StrDec("", NONE)) - : StrDec Array.array - val nextMid = ref (0) - - in - (* Invariants *) - (* Constant declarations are all well-typed *) - (* Constant declarations are stored in beta-normal form *) - (* All definitions are strict in all their arguments *) - (* If Const(cid) is valid, then sgnArray(cid) = ConDec _ *) - (* If Def(cid) is valid, then sgnArray(cid) = ConDef _ *) - - fun sgnClean (i) = if i >= !nextCid then () - else (Array.update (sgnArray, i, dummyEntry); - sgnClean (i+1)) - - fun sgnReset () = ((* Fri Dec 20 12:04:24 2002 -fp *) - (* this circumvents a space leak *) - sgnClean (0); - nextCid := 0; nextMid := 0) - fun sgnSize () = (!nextCid, !nextMid) - - fun sgnAdd (conDec) = - let - val cid = !nextCid - in - if cid > maxCid - then raise Error ("Global signature size " ^ Int.toString (maxCid+1) ^ " exceeded") - else (Array.update (sgnArray, cid, conDec) ; - nextCid := cid + 1; - cid) - end - - (* 0 <= cid < !nextCid *) - fun sgnLookup (cid) = Array.sub (sgnArray, cid) - - fun sgnApp (f) = - let - fun sgnApp' (cid) = - if cid = !nextCid then () else (f cid; sgnApp' (cid+1)) - in - sgnApp' (0) - end - - fun sgnStructAdd (strDec) = - let - val mid = !nextMid - in - if mid > maxMid - then raise Error ("Global signature size " ^ Int.toString (maxMid+1) ^ " exceeded") - else (Array.update (sgnStructArray, mid, strDec) ; - nextMid := mid + 1; - mid) - end - - (* 0 <= mid < !nextMid *) - fun sgnStructLookup (mid) = Array.sub (sgnStructArray, mid) - - (* A hack used in Flit - jcreed 6/05 *) - fun rename (cid, new) = - let - val newConDec = case sgnLookup cid of - ConDec (n,m,i,s,e,u) => ConDec(new,m,i,s,e,u) - | ConDef (n,m,i,e,e',u,a) => ConDef(new,m,i,e,e',u,a) - | AbbrevDef (n,m,i,e,e',u) => AbbrevDef (new,m,i,e,e',u) - | BlockDec (n,m,d,d') => BlockDec (new,m,d,d') - | SkoDec (n,m,i,e,u) => SkoDec (new,m,i,e,u) - in - Array.update (sgnArray, cid, newConDec) - end - - end - - fun constDef (d) = - (case sgnLookup (d) - of ConDef(_, _, _, U,_, _, _) => U - | AbbrevDef (_, _, _, U,_, _) => U) - - fun constType (c) = conDecType (sgnLookup c) - fun constImp (c) = conDecImp (sgnLookup c) - fun constUni (c) = conDecUni (sgnLookup c) - fun constBlock (c) = conDecBlock (sgnLookup c) - - fun constStatus (c) = - (case sgnLookup (c) - of ConDec (_, _, _, status, _, _) => status - | _ => Normal) - - - (* Explicit Substitutions *) - - (* id = ^0 - - Invariant: - G |- id : G id is patsub - *) - val id = Shift(0) - - (* shift = ^1 - - Invariant: - G, V |- ^ : G ^ is patsub - *) - val shift = Shift(1) - - (* invShift = ^-1 = _.^0 - Invariant: - G |- ^-1 : G, V ^-1 is patsub - *) - val invShift = Dot(Undef, id) - - - (* comp (s1, s2) = s' - - Invariant: - If G' |- s1 : G - and G'' |- s2 : G' - then s' = s1 o s2 - and G'' |- s1 o s2 : G - - If s1, s2 patsub - then s' patsub - *) - fun comp (Shift (0), s) = s - (* next line is an optimization *) - (* roughly 15% on standard suite for Twelf 1.1 *) - (* Sat Feb 14 10:15:16 1998 -fp *) - | comp (s, Shift (0)) = s - | comp (Shift (n), Dot (Ft, s)) = comp (Shift (n-1), s) - | comp (Shift (n), Shift (m)) = Shift (n+m) - | comp (Dot (Ft, s), s') = Dot (frontSub (Ft, s'), comp (s, s')) - - (* bvarSub (n, s) = Ft' - - Invariant: - If G |- s : G' G' |- n : V - then Ft' = Ftn if s = Ft1 .. Ftn .. ^k - or Ft' = ^(n+k) if s = Ft1 .. Ftm ^k and m Bidx k' - | Block B => B) - | blockSub (LVar (ref (SOME B), sk, _), s) = - blockSub (B, comp (sk, s)) - (* -fp Sun Dec 1 21:18:30 2002 *) - (* --cs Sun Dec 1 11:25:41 2002 *) - (* Since always . |- t : Gsome, discard s *) - (* where is this needed? *) - (* Thu Dec 6 20:30:26 2001 -fp !!! *) - | blockSub (LVar (r as ref NONE, sk, (l, t)), s) = - LVar(r, comp(sk, s), (l, t)) - (* was: - LVar (r, comp(sk, s), (l, comp (t, s))) - July 22, 2010 -fp -cs - *) - (* comp(^k, s) = ^k' for some k' by invariant *) - | blockSub (L as Inst ULs, s') = Inst (map (fn U => EClo (U, s')) ULs) - (* this should be right but somebody should verify *) - - (* frontSub (Ft, s) = Ft' - - Invariant: - If G |- s : G' G' |- Ft : V - then Ft' = Ft [s] - and G |- Ft' : V [s] - - NOTE: EClo (U, s) might be undefined, so if this is ever - computed eagerly, we must introduce an "Undefined" exception, - raise it in whnf and handle it here so Exp (EClo (U, s)) => Undef - *) - and frontSub (Idx (n), s) = bvarSub (n, s) - | frontSub (Exp (U), s) = Exp (EClo (U, s)) - | frontSub (Undef, s) = Undef - | frontSub (Block (B), s) = Block (blockSub (B, s)) - - (* decSub (x:V, s) = D' - - Invariant: - If G |- s : G' G' |- V : L - then D' = x:V[s] - and G |- V[s] : L - *) - (* First line is an optimization suggested by cs *) - (* D[id] = D *) - (* Sat Feb 14 18:37:44 1998 -fp *) - (* seems to have no statistically significant effect *) - (* undo for now Sat Feb 14 20:22:29 1998 -fp *) - (* - fun decSub (D, Shift(0)) = D - | decSub (Dec (x, V), s) = Dec (x, EClo (V, s)) - *) - fun decSub (Dec (x, V), s) = Dec (x, EClo (V, s)) - | decSub (NDec x, s) = NDec x - | decSub (BDec (n, (l, t)), s) = BDec (n, (l, comp (t, s))) - - (* dot1 (s) = s' - - Invariant: - If G |- s : G' - then s' = 1. (s o ^) - and for all V s.t. G' |- V : L - G, V[s] |- s' : G', V - - If s patsub then s' patsub - *) - (* first line is an optimization *) - (* roughly 15% on standard suite for Twelf 1.1 *) - (* Sat Feb 14 10:16:16 1998 -fp *) - fun dot1 (s as Shift (0)) = s - | dot1 s = Dot (Idx(1), comp(s, shift)) - - (* invDot1 (s) = s' - invDot1 (1. s' o ^) = s' - - Invariant: - s = 1 . s' o ^ - If G' |- s' : G - (so G',V[s] |- s : G,V) - *) - fun invDot1 (s) = comp (comp(shift, s), invShift) - - - (* Declaration Contexts *) - - (* ctxDec (G, k) = x:V - Invariant: - If |G| >= k, where |G| is size of G, - then G |- k : V and G |- V : L - *) - fun ctxDec (G, k) = - let (* ctxDec' (G'', k') = x:V - where G |- ^(k-k') : G'', 1 <= k' <= k - *) - fun ctxDec' (Decl (G', Dec (x, V')), 1) = Dec (x, EClo (V', Shift (k))) - | ctxDec' (Decl (G', BDec (n, (l, s))), 1) = BDec (n, (l, comp (s, Shift (k)))) - | ctxDec' (Decl (G', _), k') = ctxDec' (G', k'-1) - (* ctxDec' (Null, k') should not occur by invariant *) - in - ctxDec' (G, k) - end - - (* blockDec (G, v, i) = V - - Invariant: - If G (v) = l[s] - and Sigma (l) = SOME Gsome BLOCK Lblock - and G |- s : Gsome - then G |- pi (v, i) : V - *) - - fun blockDec (G, v as (Bidx k), i) = - let - val BDec (_, (l, s)) = ctxDec (G, k) - (* G |- s : Gsome *) - val (Gsome, Lblock) = conDecBlock (sgnLookup l) - fun blockDec' (t, D :: L, 1, j) = decSub (D, t) - | blockDec' (t, _ :: L, n, j) = - blockDec' (Dot (Exp (Root (Proj (v, j), Nil)), t), - L, n-1, j+1) - in - blockDec' (s, Lblock, i, 1) - end - - - (* EVar related functions *) - - (* newEVar (G, V) = newEVarCnstr (G, V, nil) *) - fun newEVar (G, V) = EVar(ref NONE, G, V, ref nil) - - (* newAVar G = new AVar (assignable variable) *) - (* AVars carry no type, ctx, or cnstr *) - fun newAVar () = AVar(ref NONE) - - (* newTypeVar (G) = X, X new - where G |- X : type - *) - fun newTypeVar (G) = EVar(ref NONE, G, Uni(Type), ref nil) - - (* newLVar (l, s) = (l[s]) *) - fun newLVar (sk, (cid, t)) = LVar (ref NONE, sk, (cid, t)) - - (* Definition related functions *) - (* headOpt (U) = SOME(H) or NONE, U should be strict, normal *) - fun headOpt (Root (H, _)) = SOME(H) - | headOpt (Lam (_, U)) = headOpt U - | headOpt _ = NONE - - fun ancestor' (NONE) = Anc(NONE, 0, NONE) - | ancestor' (SOME(Const(c))) = Anc(SOME(c), 1, SOME(c)) - | ancestor' (SOME(Def(d))) = - (case sgnLookup(d) - of ConDef(_, _, _, _, _, _, Anc(_, height, cOpt)) - => Anc(SOME(d), height+1, cOpt)) - | ancestor' (SOME _) = (* FgnConst possible, BVar impossible by strictness *) - Anc(NONE, 0, NONE) - (* ancestor(U) = ancestor info for d = U *) - fun ancestor (U) = ancestor' (headOpt U) - - (* defAncestor(d) = ancestor of d, d must be defined *) - fun defAncestor (d) = - (case sgnLookup(d) - of ConDef(_, _, _, _, _, _, anc) => anc) - - (* Type related functions *) - - (* targetHeadOpt (V) = SOME(H) or NONE - where H is the head of the atomic target type of V, - NONE if V is a kind or object or have variable type. - Does not expand type definitions. - *) - (* should there possibly be a FgnConst case? also targetFamOpt -kw *) - fun targetHeadOpt (Root (H, _)) = SOME(H) - | targetHeadOpt (Pi(_, V)) = targetHeadOpt V - | targetHeadOpt (Redex (V, S)) = targetHeadOpt V - | targetHeadOpt (Lam (_, V)) = targetHeadOpt V - | targetHeadOpt (EVar (ref (SOME(V)),_,_,_)) = targetHeadOpt V - | targetHeadOpt (EClo (V, s)) = targetHeadOpt V - | targetHeadOpt _ = NONE - (* Root(Bvar _, _), Root(FVar _, _), Root(FgnConst _, _), - EVar(ref NONE,..), Uni, FgnExp _ - *) - (* Root(Skonst _, _) can't occur *) - (* targetHead (A) = a - as in targetHeadOpt, except V must be a valid type - *) - fun targetHead (A) = valOf (targetHeadOpt A) - - (* targetFamOpt (V) = SOME(cid) or NONE - where cid is the type family of the atomic target type of V, - NONE if V is a kind or object or have variable type. - Does expand type definitions. - *) - fun targetFamOpt (Root (Const(cid), _)) = SOME(cid) - | targetFamOpt (Pi(_, V)) = targetFamOpt V - | targetFamOpt (Root (Def(cid), _)) = targetFamOpt (constDef cid) - | targetFamOpt (Redex (V, S)) = targetFamOpt V - | targetFamOpt (Lam (_, V)) = targetFamOpt V - | targetFamOpt (EVar (ref (SOME(V)),_,_,_)) = targetFamOpt V - | targetFamOpt (EClo (V, s)) = targetFamOpt V - | targetFamOpt _ = NONE - (* Root(Bvar _, _), Root(FVar _, _), Root(FgnConst _, _), - EVar(ref NONE,..), Uni, FgnExp _ - *) - (* Root(Skonst _, _) can't occur *) - (* targetFam (A) = a - as in targetFamOpt, except V must be a valid type - *) - fun targetFam (A) = valOf (targetFamOpt A) - -end; (* functor IntSyn *) - -structure IntSyn :> INTSYN = - IntSyn (structure Global = Global); diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/intsyn.sig b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/intsyn.sig deleted file mode 100644 index ea50536..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/intsyn.sig +++ /dev/null @@ -1,286 +0,0 @@ -(* Internal Syntax *) -(* Author: Frank Pfenning, Carsten Schuermann *) -(* Modified: Roberto Virga *) - -signature INTSYN = -sig - - type cid = int (* Constant identifier *) - type mid = int (* Structure identifier *) - type csid = int (* CS module identifier *) - - - type FgnExp = exn (* foreign expression representation *) - exception UnexpectedFgnExp of FgnExp - (* raised by a constraint solver - if passed an incorrect arg *) - type FgnCnstr = exn (* foreign constraint representation *) - exception UnexpectedFgnCnstr of FgnCnstr - (* raised by a constraint solver - if passed an incorrect arg *) - - (* Contexts *) - - datatype 'a Ctx = (* Contexts *) - Null (* G ::= . *) - | Decl of 'a Ctx * 'a (* | G, D *) - - val ctxPop : 'a Ctx -> 'a Ctx - val ctxLookup: 'a Ctx * int -> 'a - val ctxLength: 'a Ctx -> int - - datatype Depend = (* Dependency information *) - No (* P ::= No *) - | Maybe (* | Maybe *) - | Meta (* | Meta *) - - (* expressions *) - - datatype Uni = (* Universes: *) - Kind (* L ::= Kind *) - | Type (* | Type *) - - datatype Exp = (* Expressions: *) - Uni of Uni (* U ::= L *) - | Pi of (Dec * Depend) * Exp (* | Pi (D, P). V *) - | Root of Head * Spine (* | H @ S *) - | Redex of Exp * Spine (* | U @ S *) - | Lam of Dec * Exp (* | lam D. U *) - | EVar of Exp option ref * Dec Ctx * Exp * (Cnstr ref) list ref - (* | X : G|-V, Cnstr *) - | EClo of Exp * Sub (* | U[s] *) - | AVar of Exp option ref (* | A *) - - | FgnExp of csid * FgnExp (* | (foreign expression) *) - - | NVar of int (* | n (linear, - fully applied variable - used in indexing *) - - and Head = (* Head: *) - BVar of int (* H ::= k *) - | Const of cid (* | c *) - | Proj of Block * int (* | #k(b) *) - | Skonst of cid (* | c# *) - | Def of cid (* | d (strict) *) - | NSDef of cid (* | d (non strict) *) - | FVar of string * Exp * Sub (* | F[s] *) - | FgnConst of csid * ConDec (* | (foreign constant) *) - - and Spine = (* Spines: *) - Nil (* S ::= Nil *) - | App of Exp * Spine (* | U ; S *) - | SClo of Spine * Sub (* | S[s] *) - - and Sub = (* Explicit substitutions: *) - Shift of int (* s ::= ^n *) - | Dot of Front * Sub (* | Ft.s *) - - and Front = (* Fronts: *) - Idx of int (* Ft ::= k *) - | Exp of Exp (* | U *) - | Axp of Exp (* | U *) - | Block of Block (* | _x *) - | Undef (* | _ *) - - and Dec = (* Declarations: *) - Dec of string option * Exp (* D ::= x:V *) - | BDec of string option * (cid * Sub) (* | v:l[s] *) - | ADec of string option * int (* | v[^-d] *) - | NDec of string option - - and Block = (* Blocks: *) - Bidx of int (* b ::= v *) - | LVar of Block option ref * Sub * (cid * Sub) - (* | L(l[^k],t) *) - | Inst of Exp list (* | U1, ..., Un *) - (* It would be better to consider having projections count - like substitutions, then we could have Inst of Sub here, - which would simplify a lot of things. - - I suggest however to wait until the next big overhaul - of the system -- cs *) - - -(* | BClo of Block * Sub (* | b[s] *) *) - - (* constraints *) - - and Cnstr = (* Constraint: *) - Solved (* Cnstr ::= solved *) - | Eqn of Dec Ctx * Exp * Exp (* | G|-(U1 == U2) *) - | FgnCnstr of csid * FgnCnstr (* | (foreign) *) - - and Status = (* Status of a constant: *) - Normal (* inert *) - | Constraint of csid * (Dec Ctx * Spine * int -> Exp option) - (* acts as constraint *) - | Foreign of csid * (Spine -> Exp) (* is converted to foreign *) - - and FgnUnify = (* Result of foreign unify *) - Succeed of FgnUnifyResidual list - (* succeed with a list of residual operations *) - | Fail - - and FgnUnifyResidual = - Assign of Dec Ctx * Exp * Exp * Sub - (* perform the assignment G |- X = U [ss] *) - | Delay of Exp * Cnstr ref - (* delay cnstr, associating it with all the rigid EVars in U *) - - (* Global signature *) - - and ConDec = (* Constant declaration *) - ConDec of string * mid option * int * Status - (* a : K : kind or *) - * Exp * Uni (* c : A : type *) - | ConDef of string * mid option * int (* a = A : K : kind or *) - * Exp * Exp * Uni (* d = M : A : type *) - * Ancestor (* Ancestor info for d or a *) - | AbbrevDef of string * mid option * int - (* a = A : K : kind or *) - * Exp * Exp * Uni (* d = M : A : type *) - | BlockDec of string * mid option (* %block l : SOME G1 PI G2 *) - * Dec Ctx * Dec list - | BlockDef of string * mid option * cid list - (* %block l = (l1 | ... | ln) *) - | SkoDec of string * mid option * int (* sa: K : kind or *) - * Exp * Uni (* sc: A : type *) - - and Ancestor = (* Ancestor of d or a *) - Anc of cid option * int * cid option (* head(expand(d)), height, head(expand[height](d)) *) - (* NONE means expands to {x:A}B *) - - datatype StrDec = (* Structure declaration *) - StrDec of string * mid option - - (* Form of constant declaration *) - datatype ConDecForm = - FromCS (* from constraint domain *) - | Ordinary (* ordinary declaration *) - | Clause (* %clause declaration *) - - (* Type abbreviations *) - type dctx = Dec Ctx (* G = . | G,D *) - type eclo = Exp * Sub (* Us = U[s] *) - type bclo = Block * Sub (* Bs = B[s] *) - type cnstr = Cnstr ref - - exception Error of string (* raised if out of space *) - - (* standard operations on foreign expressions *) - structure FgnExpStd : sig - (* convert to internal syntax *) - structure ToInternal : FGN_OPN where type arg = unit - where type result = Exp - - (* apply function to subterms *) - structure Map : FGN_OPN where type arg = Exp -> Exp - where type result = Exp - - (* apply function to subterms, for effect *) - structure App : FGN_OPN where type arg = Exp -> unit - where type result = unit - - (* test for equality *) - structure EqualTo : FGN_OPN where type arg = Exp - where type result = bool - - (* unify with another term *) - structure UnifyWith : FGN_OPN where type arg = Dec Ctx * Exp - where type result = FgnUnify - - (* fold a function over the subterms *) - val fold : (csid * FgnExp) -> (Exp * 'a -> 'a) -> 'a -> 'a - end - - (* standard operations on foreign constraints *) - structure FgnCnstrStd : sig - (* convert to internal syntax *) - structure ToInternal : FGN_OPN where type arg = unit - where type result = (Dec Ctx * Exp) list - - (* awake *) - structure Awake : FGN_OPN where type arg = unit - where type result = bool - - (* simplify *) - structure Simplify : FGN_OPN where type arg = unit - where type result = bool - end - - val conDecName : ConDec -> string - val conDecParent : ConDec -> mid option - val conDecImp : ConDec -> int - val conDecStatus : ConDec -> Status - val conDecType : ConDec -> Exp - val conDecBlock : ConDec -> dctx * Dec list - val conDecUni : ConDec -> Uni - - val strDecName : StrDec -> string - val strDecParent : StrDec -> mid option - - val sgnReset : unit -> unit - val sgnSize : unit -> cid * mid - - val sgnAdd : ConDec -> cid - val sgnLookup: cid -> ConDec - val sgnApp : (cid -> unit) -> unit - - val sgnStructAdd : StrDec -> mid - val sgnStructLookup : mid -> StrDec - - val constType : cid -> Exp (* type of c or d *) - val constDef : cid -> Exp (* definition of d *) - val constImp : cid -> int - val constStatus : cid -> Status - val constUni : cid -> Uni - val constBlock : cid -> dctx * Dec list - - (* Declaration Contexts *) - - val ctxDec : dctx * int -> Dec (* get variable declaration *) - val blockDec : dctx * Block * int -> Dec - - (* Explicit substitutions *) - - val id : Sub (* id *) - val shift : Sub (* ^ *) - val invShift : Sub (* ^-1 *) - - val bvarSub : int * Sub -> Front (* k[s] *) - val frontSub : Front * Sub -> Front (* H[s] *) - val decSub : Dec * Sub -> Dec (* x:V[s] *) - val blockSub : Block * Sub -> Block (* B[s] *) - - val comp : Sub * Sub -> Sub (* s o s' *) - val dot1 : Sub -> Sub (* 1 . (s o ^) *) - val invDot1 : Sub -> Sub (* (^ o s) o ^-1) *) - - (* EVar related functions *) - - val newEVar : dctx * Exp -> Exp (* creates X:G|-V, [] *) - val newAVar : unit -> Exp (* creates A (bare) *) - val newTypeVar : dctx -> Exp (* creates X:G|-type, [] *) - val newLVar : Sub * (cid * Sub) -> Block - (* creates B:(l[^k],t) *) - - (* Definition related functions *) - val headOpt : Exp -> Head option - val ancestor : Exp -> Ancestor - val defAncestor : cid -> Ancestor - - (* Type related functions *) - - (* Not expanding type definitions *) - val targetHeadOpt : Exp -> Head option (* target type family or NONE *) - val targetHead : Exp -> Head (* target type family *) - - (* Expanding type definitions *) - val targetFamOpt : Exp -> cid option (* target type family or NONE *) - val targetFam : Exp -> cid (* target type family *) - - (* Used in Flit *) - val rename : cid * string -> unit - -end; (* signature INTSYN *) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/irb_heredoc b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/irb_heredoc deleted file mode 100644 index 3dc205e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/irb_heredoc +++ /dev/null @@ -1,8 +0,0 @@ -irb(main):001:0> puts < nil -irb(main):005:0> diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/irc.lsp b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/irc.lsp deleted file mode 100755 index 6f45976..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/irc.lsp +++ /dev/null @@ -1,214 +0,0 @@ -#!/usr/bin/env newlisp - -;; @module IRC -;; @description a basic irc library -;; @version early alpha! 0.1 2011-10-31 14:21:26 -;; @author cormullion -;; Usage: -;; (IRC:init "newlithper") ; a username/nick (not that one obviously :-) -;; (IRC:connect "irc.freenode.net" 6667) ; irc/server -;; (IRC:join-channel {#newlisp}) ; join a room -;; either (IRC:read-irc-loop) ; loop - monitor only, no input -;; or (IRC:session) ; a command-line session, end with /QUIT - -(context 'IRC) - (define Inickname) - (define Ichannels) - (define Iserver) - (define Iconnected) - (define Icallbacks '()) - (define Idle-time 400) ; seconds - (define Itime-stamp) ; time since last message was processed - -(define (register-callback callback-name callback-function) - (println {registering callback for } callback-name { : } (sym (term callback-function) (prefix callback-function))) - (push (list callback-name (sym (term callback-function) (prefix callback-function))) Icallbacks)) - -(define (do-callback callback-name data) - (when (set 'func (lookup callback-name Icallbacks)) ; find first callback - (if-not (catch (apply func (list data)) 'error) - (println {error in callback } callback-name {: } error)))) - -(define (do-callbacks callback-name data) - (dolist (rf (ref-all callback-name Icallbacks)) - (set 'callback-entry (Icallbacks (first rf))) - (when (set 'func (last callback-entry)) - (if-not (catch (apply func (list data)) 'error) - (println {error in callback } callback-name {: } error))))) - -(define (init str) - (set 'Inickname str) - (set 'Iconnected nil) - (set 'Ichannels '()) - (set 'Itime-stamp (time-of-day))) - -(define (connect server port) - (set 'Iserver (net-connect server port)) - (net-send Iserver (format "USER %s %s %s :%s\r\n" Inickname Inickname Inickname Inickname)) - (net-send Iserver (format "NICK %s \r\n" Inickname)) - (set 'Iconnected true) - (do-callbacks "connect" (list (list "server" server) (list "port" port)))) - -(define (identify password) - (net-send Iserver (format "PRIVMSG nickserv :identify %s\r\n" password))) - -(define (join-channel channel) - (when (net-send Iserver (format "JOIN %s \r\n" channel)) - (push channel Ichannels) - (do-callbacks "join-channel" (list (list "channel" channel) (list "nickname" Inickname))))) - -(define (part chan) - (if-not (empty? chan) - ; leave specified - (begin - (net-send Iserver (format "PART %s\r\n" chan)) - (replace channel Ichannels) - (do-callbacks "part" (list (list "channel" channel)))) - ; leave all - (begin - (dolist (channel Ichannels) - (net-send Iserver (format "PART %s\r\n" channel)) - (replace channel Ichannels) - (do-callbacks "part" (list (list "channel" channel))))))) - -(define (do-quit message) - (do-callbacks "quit" '()) ; chance to do stuff before quit... - (net-send Iserver (format "QUIT :%s\r\n" message)) - (sleep 1000) - (set 'Ichannels '()) - (close Iserver) - (set 'Iconnected nil)) - -(define (privmsg user message) - (net-send Iserver (format "PRIVMSG %s :%s\r\n" user message))) - -(define (notice user message) - (net-send Iserver (format "NOTICE %s :%s\r\n" user message))) - -(define (send-to-server message (channel nil)) - (cond - ((starts-with message {/}) ; default command character - (set 'the-message (replace "^/" (copy message) {} 0)) ; keep original - (net-send Iserver (format "%s \r\n" the-message)) ; send it - ; do a quit - (if (starts-with (lower-case the-message) "quit") - (do-quit { enough}))) - (true - (if (nil? channel) - ; say to all channels - (dolist (c Ichannels) - (net-send Iserver (format "PRIVMSG %s :%s\r\n" c message))) - ; say to specified channel - (if (find channel Ichannels) - (net-send Iserver (format "PRIVMSG %s :%s\r\n" channel message)))))) - (do-callbacks "send-to-server" (list (list "channel" channel) (list "message" message)))) - -(define (process-command sender command text) - (cond - ((= sender "PING") - (net-send Iserver (format "PONG %s\r\n" command))) - ((or (= command "NOTICE") (= command "PRIVMSG")) - (process-message sender command text)) - ((= command "JOIN") - (set 'username (first (clean empty? (parse sender {!|:} 0)))) - (set 'channel (last (clean empty? (parse sender {!|:} 0)))) - (println {username } username { joined } channel) - (do-callbacks "join" (list (list "channel" channel) (list "username" username)))) - (true - nil))) - -(define (process-message sender command text) - (let ((username {} target {} message {})) - (set 'username (first (clean empty? (parse sender {!|:} 0)))) - (set 'target (trim (first (clean empty? (parse text {!|:} 0))))) - (set 'message (slice text (+ (find {:} text) 1))) - (cond - ((starts-with message "\001") - (process-ctcp username target message)) - ((find target Ichannels) - (cond - ((= command {PRIVMSG}) - (do-callbacks "channel-message" (list (list "channel" target) (list "username" username) (list "message" message)))) - ((= command {NOTICE}) - (do-callbacks "channel-notice" (list (list "channel" target) (list "username" username) (list "message" message)))))) - ((= target Inickname) - (cond - ((= command {PRIVMSG}) - (do-callbacks "private-message" (list (list "username" username) (list "message" message)))) - ((= command {NOTICE}) - (do-callbacks "private-notice" (list (list "username" username) (list "message" message)))))) - (true - nil)))) - -(define (process-ctcp username target message) - (cond - ((starts-with message "\001VERSION\001") - (net-send Iserver (format "NOTICE %s :\001VERSION %s\001\r\n" username version))) - ((starts-with message "\001PING") - (set 'data (first (rest (clean empty? (parse message { } 0))))) - (set 'data (trim data "\001" "\001")) - (net-send Iserver (format "NOTICE %s :\001PING %s\001\r\n" username data))) - ((starts-with message "\001ACTION") - (set 'data (first (rest (clean empty? (parse message { } 0))))) - (set 'data (join data { })) - (set 'data (trim data "\001" "\001")) - (if (find target Ichannels) - (do-callbacks "channel-action" (list (list "username" username) (list "message" message)))) - (if (= target Inickname) - (do-callbacks "private-action" (list (list "username" username) (list "message" message))))) - ((starts-with message "\001TIME\001") - (net-send Iserver (format "NOTICE %s:\001TIME :%s\001\r\n" username (date)))))) - -(define (parse-buffer raw-buffer) - (let ((messages (clean empty? (parse raw-buffer "\r\n" 0))) - (sender {} command {} text {})) - ; check for elapsed time since last activity - (when (> (sub (time-of-day) Itime-stamp) (mul Idle-time 1000)) - (do-callbacks "idle-event") - (set 'Itime-stamp (time-of-day))) - (dolist (message messages) - (set 'message-parts (parse message { })) - (unless (empty? message-parts) - (set 'sender (first message-parts)) - (catch (set 'command (first (rest message-parts))) 'error) - (catch (set 'text (join (rest (rest message-parts)) { })) 'error)) - (process-command sender command text)))) - -(define (read-irc) - (let ((buffer {})) - (when (!= (net-peek Iserver) 0) - (net-receive Iserver buffer 8192 "\n") - (unless (empty? buffer) - (parse-buffer buffer))))) - -(define (read-irc-loop) ; monitoring - (let ((buffer {})) - (while Iconnected - (read-irc) - (sleep 1000)))) - -(define (print-raw-message data) ; example of using a callback - (set 'raw-data (lookup "message" data)) - (set 'channel (lookup "channel" data)) - (set 'message-text raw-data) - (println (date (date-value) 0 {%H:%M:%S }) username {> } message-text)) - -(define (print-outgoing-message data) - (set 'raw-data (lookup "message" data)) - (set 'channel (lookup "channel" data)) - (set 'message-text raw-data) - (println (date (date-value) 0 {%H:%M:%S }) Inickname {> } message-text)) - -(define (session); interactive terminal - ; must add callbacks to display messages - (register-callback "channel-message" 'print-raw-message) - (register-callback "send-to-server" 'print-outgoing-message) - (while Iconnected - (while (zero? (peek 0)) - (read-irc)) - (send-to-server (string (read-line 0)))) - (println {finished session } (date)) - (exit)) - -; end of IRC code - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/java.properties b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/java.properties deleted file mode 100644 index 72ad0f9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/java.properties +++ /dev/null @@ -1,16 +0,0 @@ -foo = bar -foo: bar -foo.oof: \ - bar=baz; \ - asdf - -// comment -# comment -; comment - -x:a\ -b -x: a \ - b - -x = \ diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/jbst_example1.jbst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/jbst_example1.jbst deleted file mode 100644 index 0e7d014..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/jbst_example1.jbst +++ /dev/null @@ -1,28 +0,0 @@ -<%@ Control Name="MyApp.MyJbstControl" Language="JavaScript" %> - - - -<%! - /* initialization code block, executed only once as control is loaded */ - /* alternate syntax to script block above */ - this.myInitTime = this.generateValue(); -%> - -<% - /* data binding code block, executed each time as control is data bound */ - this.myBindTime = this.generateValue(); -%> - -<%-- JBST Comment --%> -<%= this.myBindTime /* data binding expression */ %> -<%= this.myInitTime /* data binding expression */ %> - - -<%$ Resources: localizationKey %><%-- JBST globalization--%> \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/jbst_example2.jbst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/jbst_example2.jbst deleted file mode 100644 index 2b5e048..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/jbst_example2.jbst +++ /dev/null @@ -1,45 +0,0 @@ -<%@ Control Name="Foo.MyZebraList" Language="JavaScript" %> - - - -
-

<%= this.data.title %> as of <%= this.formatTime(this.data.timestamp) %>!

-

<%= this.data.description %>

-
    - - - - -
  • - <%= this.data.label %> (<%= this.index+1 %> of <%= this.count %>) -
  • -
    - -
-
\ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/jinjadesignerdoc.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/jinjadesignerdoc.rst deleted file mode 100644 index b4b6c44..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/jinjadesignerdoc.rst +++ /dev/null @@ -1,713 +0,0 @@ -====================== -Designer Documentation -====================== - -This part of the Jinja documentaton is meant for template designers. - -Basics -====== - -The Jinja template language is designed to strike a balance between content -and application logic. Nevertheless you can use a python like statement -language. You don't have to know how Python works to create Jinja templates, -but if you know it you can use some additional statements you may know from -Python. - -Here is a small example template: - -.. sourcecode:: html+jinja - - - - - My Webpage - - - - -

My Webpage

- {{ variable }} - - - -This covers the default settings. The application developer might have changed -the syntax from ``{% foo %}`` to ``<% foo %>`` or something similar. This -documentation just covers the default values. - -A variable looks like ``{{ foobar }}`` where foobar is the variable name. Inside -of statements (``{% some content here %}``) variables are just normal names -without the braces around it. In fact ``{{ foobar }}`` is just an alias for -the statement ``{% print foobar %}``. - -Variables are coming from the context provided by the application. Normally there -should be a documentation regarding the context contents but if you want to know -the content of the current context, you can add this to your template: - -.. sourcecode:: html+jinja - -
{{ debug()|e }}
- -A context isn't flat which means that each variable can has subvariables, as long -as it is representable as python data structure. You can access attributes of -a variable using the dot and bracket operators. The following examples show -this: - -.. sourcecode:: jinja - - {{ user.username }} - is the same as - {{ user['username'] }} - you can also use a variable to access an attribute: - {{ users[current_user].username }} - If you have numerical indices you have to use the [] syntax: - {{ users[0].username }} - -Filters -======= - -In the examples above you might have noticed the pipe symbols. Pipe symbols tell -the engine that it has to apply a filter on the variable. Here is a small example: - -.. sourcecode:: jinja - - {{ variable|replace('foo', 'bar')|escape }} - -If you want, you can also put whitespace between the filters. - -This will look for a variable `variable`, pass it to the filter `replace` -with the arguments ``'foo'`` and ``'bar'``, and pass the result to the filter -`escape` that automatically XML-escapes the value. The `e` filter is an alias for -`escape`. Here is the complete list of supported filters: - -[[list_of_filters]] - -.. admonition:: note - - Filters have a pretty low priority. If you want to add fitered values - you have to put them into parentheses. The same applies if you want to access - attributes: - - .. sourcecode:: jinja - - correct: - {{ (foo|filter) + (bar|filter) }} - wrong: - {{ foo|filter + bar|filter }} - - correct: - {{ (foo|filter).attribute }} - wrong: - {{ foo|filter.attribute }} - -Tests -===== - -You can use the `is` operator to perform tests on a value: - -.. sourcecode:: jinja - - {{ 42 is numeric }} -> true - {{ "foobar" is numeric }} -> false - {{ 'FOO' is upper }} -> true - -These tests are especially useful when used in `if` conditions. - -[[list_of_tests]] - -Global Functions -================ - -Test functions and filter functions live in their own namespace. Global -functions not. They behave like normal objects in the context. Beside the -functions added by the application or framewhere there are two functions -available per default: - -`range` - - Works like the python `range function`_ just that it doesn't support - ranges greater than ``1000000``. - -`debug` - - Function that outputs the contents of the context. - -Loops -===== - -To iterate over a sequence, you can use the `for` loop. It basically looks like a -normal Python `for` loop and works pretty much the same: - -.. sourcecode:: html+jinja - -

Members

-
    - {% for user in users %} -
  • {{ loop.index }} / {{ loop.length }} - {{ user.username|escape }}
  • - {% else %} -
  • no users found
  • - {% endfor %} -
- -*Important* Contrary to Python is the optional ``else`` block only -executed if there was no iteration because the sequence was empty. - -Inside of a `for` loop block you can access some special variables: - -+----------------------+----------------------------------------+ -| Variable | Description | -+======================+========================================+ -| `loop.index` | The current iteration of the loop. | -+----------------------+----------------------------------------+ -| `loop.index0` | The current iteration of the loop, | -| | starting counting by 0. | -+----------------------+----------------------------------------+ -| `loop.revindex` | The number of iterations from the end | -| | of the loop. | -+----------------------+----------------------------------------+ -| `loop.revindex0` | The number of iterations from the end | -| | of the loop, starting counting by 0. | -+----------------------+----------------------------------------+ -| `loop.first` | True if first iteration. | -+----------------------+----------------------------------------+ -| `loop.last` | True if last iteration. | -+----------------------+----------------------------------------+ -| `loop.even` | True if current iteration is even. | -+----------------------+----------------------------------------+ -| `loop.odd` | True if current iteration is odd. | -+----------------------+----------------------------------------+ -| `loop.length` | Total number of items in the sequence. | -+----------------------+----------------------------------------+ -| `loop.parent` | The context of the parent loop. | -+----------------------+----------------------------------------+ - -Loops also support recursion. Let's assume you have a sitemap where each item -might have a number of child items. A template for that could look like this: - -.. sourcecode:: html+jinja - -

Sitemap -
    - {% for item in sitemap recursive %} -
  • {{ item.title|e }} - {% if item.children %}
      {{ loop(item.children) }}
    {% endif %}
  • - {% endfor %} -
- -What happens here? Basically the first thing that is different to a normal -loop is the additional ``recursive`` modifier in the `for`-loop declaration. -It tells the template engine that we want recursion. If recursion is enabled -the special `loop` variable is callable. If you call it with a sequence it will -automatically render the loop at that position with the new sequence as argument. - -Cycling -======= - -Sometimes you might want to have different text snippets for each row in a list, -for example to have alternating row colors. You can easily do this by using the -``{% cycle %}`` tag: - -.. sourcecode:: html+jinja - -
    - {% for message in messages %} -
  • {{ message|e }}
  • - {% endfor %} -
- -Each time Jinja encounters a `cycle` tag it will cycle through the list -of given items and return the next one. If you pass it one item jinja assumes -that this item is a sequence from the context and uses this: - -.. sourcecode:: html+jinja - -
  • ...
  • - -Conditions -========== - -Jinja supports Python-like `if` / `elif` / `else` constructs: - -.. sourcecode:: jinja - - {% if user.active %} - user {{ user.name|e }} is active. - {% elif user.deleted %} - user {{ user.name|e }} was deleted some time ago. - {% else %} - i don't know what's wrong with {{ user.username|e }} - {% endif %} - -If the user is active the first block is rendered. If not and the user was -deleted the second one, in all other cases the third one. - -You can also use comparison operators: - -.. sourcecode:: html+jinja - - {% if amount < 0 %} - {{ amount }} - {% else %} - {{ amount }} - {% endif %} - -.. admonition:: Note - - Of course you can use `or` / `and` and parentheses to create more complex - conditions, but usually the logic is already handled in the application and - you don't have to create such complex constructs in the template code. However - in some situations it might be a good thing to have the abilities to create - them. - -Operators -========= - -Inside ``{{ variable }}`` blocks, `if` conditions and many other parts you can -can use expressions. In expressions you can use any of the following operators: - - ======= =================================================================== - ``+`` add the right operand to the left one. - ``{{ 1 + 2 }}`` would return ``3``. - ``-`` subtract the right operand from the left one. - ``{{ 1 - 1 }}`` would return ``0``. - ``/`` divide the left operand by the right one. - ``{{ 1 / 2 }}`` would return ``0.5``. - ``*`` multiply the left operand with the right one. - ``{{ 2 * 2 }}`` would return ``4``. - ``**`` raise the left operand to the power of the right - operand. ``{{ 2**3 }}`` would return ``8``. - ``in`` perform sequence membership test. ``{{ 1 in [1,2,3] }}`` would - return true. - ``is`` perform a test on the value. See the section about - tests for more information. - ``|`` apply a filter on the value. See the section about - filters for more information. - ``and`` return true if the left and the right operand is true. - ``or`` return true if the left or the right operand is true. - ``not`` negate a statement (see below) - ``()`` call a callable: ``{{ user.get_username() }}``. Inside of the - parentheses you can use variables: ``{{ user.get(username) }}``. - ======= =================================================================== - -Note that there is no support for any bit operations or something similar. - -* special note regarding `not`: The `is` and `in` operators support negation - using an infix notation too: ``foo is not bar`` and ``foo not in bar`` - instead of ``not foo is bar`` and ``not foo in bar``. All other expressions - require a prefix notation: ``not (foo and bar)``. - -Boolean Values -============== - -In If-Conditions Jinja performs a boolean check. All empty values (eg: empty -lists ``[]``, empty dicts ``{}`` etc) evaluate to `false`. Numbers that are -equal to `0`/`0.00` are considered `false` too. The boolean value of other -objects depends on the behavior the application developer gave it. Usually -items are `true`. - -Here some examples that should explain it: - -.. sourcecode:: jinja - - {% if [] %} - will always be false because it's an empty list - - {% if {} %} - false too. - - {% if ['foo'] %} - this is true. Because the list is not empty. - - {% if "foobar" %} - this is also true because the string is not empty. - -Slicing -======= - -Some objects support slicing operations. For example lists: - -.. sourcecode:: jinja - - {% for item in items[:5] %} - This will only iterate over the first 5 items of the list - - {% for item in items[5:10] %} - This will only iterate from item 5 to 10. - - {% for item in items[:10:2] %} - This will only yield items from start to ten and only returing - even items. - -For more informations about slicing have a look at the `slicing chapter`_ -in the "Dive into Python" e-book. - -Macros -====== - -If you want to use a partial template in more than one place, you might want to -create a macro from it: - -.. sourcecode:: html+jinja - - {% macro show_user user %} -

    {{ user.name|e }}

    -
    - {{ user.description }} -
    - {% endmacro %} - -Now you can use it from everywhere in the code by passing it an item: - -.. sourcecode:: jinja - - {% for user in users %} - {{ show_user(user) }} - {% endfor %} - -You can also specify more than one value: - -.. sourcecode:: html+jinja - - {% macro show_dialog title, text %} -
    -

    {{ title|e }}

    -
    {{ text|e }}
    -
    - {% endmacro %} - - {{ show_dialog('Warning', 'something went wrong i guess') }} - -Inheritance -=========== - -The most powerful part of Jinja is template inheritance. Template inheritance -allows you to build a base "skeleton" template that contains all the common -elements of your site and defines **blocks** that child templates can override. - -Sounds complicated but is very basic. It's easiest to understand it by starting -with an example. - -Base Template -------------- - -This template, which we'll call ``base.html``, defines a simple HTML skeleton -document that you might use for a simple two-column page. It's the job of -"child" templates to fill the empty blocks with content: - -.. sourcecode:: html+jinja - - - - - - {% block title %}{% endblock %} - My Webpage - {% block html_head %}{% endblock %} - - -
    - {% block content %}{% endblock %} -
    - - - - -In this example, the ``{% block %}`` tags define four blocks that child templates -can fill in. All the `block` tag does is to tell the template engine that a -child template may override those portions of the template. - -Child Template --------------- - -A child template might look like this: - -.. sourcecode:: html+jinja - - {% extends "base.html" %} - {% block title %}Index{% endblock %} - - {% block html_head %} - - {% endblock %} - - {% block content %} -

    Index

    -

    - Welcome on my awsome homepage. -

    - {% endblock %} - -The ``{% extends %}`` tag is the key here. It tells the template engine that -this template "extends" another template. When the template system evaluates -this template, first it locates the parent. - -The filename of the template depends on the template loader. For example the -``FileSystemLoader`` allows you to access other templates by giving the -filename. You can access templates in subdirectories with an slash: - -.. sourcecode:: jinja - - {% extends "layout/default.html" %} - -But this behavior can depend on the application using Jinja. - -Note that since the child template didn't define the ``footer`` block, the -value from the parent template is used instead. - -.. admonition:: Note - - You can't define multiple ``{% block %}`` tags with the same name in the - same template. This limitation exists because a block tag works in "both" - directions. That is, a block tag doesn't just provide a hole to fill - it - also defines the content that fills the hole in the *parent*. If there were - two similarly-named ``{% block %}`` tags in a template, that template's - parent wouldn't know which one of the blocks' content to use. - -Template Inclusion -================== - -You can load another template at a given position using ``{% include %}``. -Usually it's a better idea to use inheritance but if you for example want to -load macros, `include` works better than `extends`: - -.. sourcecode:: jinja - - {% include "myhelpers.html" %} - {{ my_helper("foo") }} - -If you define a macro called ``my_helper`` in ``myhelpers.html``, you can now -use it from the template as shown above. - -Filtering Blocks -================ - -Sometimes it could be a good idea to filter a complete block of text. For -example, if you want to escape some html code: - -.. sourcecode:: jinja - - {% filter escape %} - - goes here - - {% endfilter %} - -Of course you can chain filters too: - -.. sourcecode:: jinja - - {% filter lower|escape %} - SOME TEXT - {% endfilter %} - -returns ``"<b>some text</b>"``. - -Defining Variables -================== - -You can also define variables in the namespace using the ``{% set %}`` tag: - -.. sourcecode:: jinja - - {% set foo = 'foobar' %} - {{ foo }} - -This should ouput ``foobar``. - -Scopes -====== - -Jinja has multiple scopes. A scope is something like a new transparent foil on -a stack of foils. You can only write to the outermost foil but read all of them -since you can look through them. If you remove the top foil all data on that -foil disappears. Some tags in Jinja add a new layer to the stack. Currently -these are `block`, `for`, `macro` and `filter`. This means that variables and -other elements defined inside a macro, loop or some of the other tags listed -above will be only available in that block. Here an example: - -.. sourcecode:: jinja - - {% macro angryhello name %} - {% set angryname = name|upper %} - Hello {{ name }}. Hello {{ name }}! - HELLO {{ angryname }}!!!!!!111 - {% endmacro %} - -The variable ``angryname`` just exists inside the macro, not outside it. - -Defined macros appear on the context as variables. Because of this, they are -affected by the scoping too. A macro defined inside of a macro is just available -in those two macros (the macro itself and the macro it's defined in). For `set` -and `macro` two additional rules exist: If a macro is defined in an extended -template but outside of a visible block (thus outside of any block) will be -available in all blocks below. This allows you to use `include` statements to -load often used macros at once. - -Undefined Variables -=================== - -If you have already worked with python you probably know about the fact that -undefined variables raise an exception. This is different in Jinja. There is a -special value called `undefined` that represents values that do not exist. - -This special variable works complete different from any variables you maybe -know. If you print it using ``{{ variable }}`` it will not appear because it's -literally empty. If you try to iterate over it, it will work. But no items -are returned. Comparing this value to any other value results in `false`. -Even if you compare it to itself: - -.. sourcecode:: jinja - - {{ undefined == undefined }} - will return false. Not even undefined is undefined :) - Use `is defined` / `is not defined`: - - {{ undefined is not defined }} - will return true. - -There are also some additional rules regarding this special value. Any -mathematical operators (``+``, ``-``, ``*``, ``/``) return the operand -as result: - -.. sourcecode:: jinja - - {{ undefined + "foo" }} - returns "foo" - - {{ undefined - 42 }} - returns 42. Note: not -42! - -In any expression `undefined` evaluates to `false`. It has no length, all -attribute calls return undefined, calling too: - -.. sourcecode:: jinja - - {{ undefined.attribute().attribute_too[42] }} - still returns `undefined`. - -Escaping -======== - -Sometimes you might want to add Jinja syntax elements into the template -without executing them. In that case you have quite a few possibilities. - -For small parts this might be a good way: - -.. sourcecode:: jinja - - {{ "{{ foo }} is variable syntax and {% foo %} is block syntax" }} - -When you have multiple elements you can use the ``raw`` block: - -.. sourcecode:: jinja - - {% raw %} - Filtering blocks works like this in Jinja: - {% filter escape %} - - goes here - - {% endfilter %} - {% endraw %} - -Reserved Keywords -================= - -Jinja has some keywords you cannot use a variable names. This limitation -exists to make look coherent. Syntax highlighters won't mess things up and -you will don't have unexpected output. - -The following keywords exist and cannot be used as identifiers: - - `and`, `block`, `cycle`, `elif`, `else`, `endblock`, `endfilter`, - `endfor`, `endif`, `endmacro`, `endraw`, `endtrans`, `extends`, `filter`, - `for`, `if`, `in`, `include`, `is`, `macro`, `not`, `or`, `pluralize`, - `raw`, `recursive`, `set`, `trans` - -If you want to use such a name you have to prefix or suffix it or use -alternative names: - -.. sourcecode:: jinja - - {% for macro_ in macros %} - {{ macro_('foo') }} - {% endfor %} - -If future Jinja releases add new keywords those will be "light" keywords which -means that they won't raise an error for several releases but yield warnings -on the application side. But it's very unlikely that new keywords will be -added. - -Internationalization -==================== - -If the application is configured for i18n, you can define translatable blocks -for translators using the `trans` tag or the special underscore function: - -.. sourcecode:: jinja - - {% trans %} - this is a translatable block - {% endtrans %} - - {% trans "This is a translatable string" %} - - {{ _("This is a translatable string") }} - -The latter one is useful if you want translatable arguments for filters etc. - -If you want to have plural forms too, use the `pluralize` block: - -.. sourcecode:: jinja - - {% trans users=users %} - One user found. - {% pluralize %} - {{ users }} users found. - {% endtrans %} - - {% trans first=(users|first).username|escape, user=users|length %} - one user {{ first }} found. - {% pluralize users %} - {{ users }} users found, the first one is called {{ first }}. - {% endtrans %} - -If you have multiple arguments, the first one is assumed to be the indicator (the -number that is used to determine the correct singular or plural form. If you -don't have the indicator variable on position 1 you have to tell the `pluralize` -tag the correct variable name. - -Inside translatable blocks you cannot use blocks or expressions (however you can -still use the ``raw`` block which will work as expected). The variable -print syntax (``{{ variablename }}``) is the only way to insert the variables -defined in the ``trans`` header. Filters must be applied in the header. - -.. admonition:: note - - Please make sure that you always use pluralize blocks where required. - Many languages have more complex plural forms than the English language. - - Never try to workaround that issue by using something like this: - - .. sourcecode:: jinja - - {% if count != 1 %} - {{ count }} users found. - {% else %} - one user found. - {% endif %} - -.. _slicing chapter: http://diveintopython.org/native_data_types/lists.html#odbchelper.list.slice -.. _range function: http://docs.python.org/tut/node6.html#SECTION006300000000000000000 diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/json.lasso b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/json.lasso deleted file mode 100644 index 7292611..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/json.lasso +++ /dev/null @@ -1,301 +0,0 @@ - - // - // - // - -If: (Lasso_TagExists: 'Encode_JSON') == False; - - Define_Tag: 'JSON', -Namespace='Encode_', -Required='value', -Optional='options'; - - Local: 'escapes' = Map('\\' = '\\', '"' = '"', '\r' = 'r', '\n' = 'n', '\t' = 't', '\f' = 'f', '\b' = 'b'); - Local: 'output' = ''; - Local: 'newoptions' = (Array: -Internal); - If: !(Local_Defined: 'options') || (#options->(IsA: 'array') == False); - Local: 'options' = (Array); - /If; - If: (#options >> -UseNative) || (Params >> -UseNative); - #newoptions->(Insert: -UseNative); - /If; - If: (#options >> -NoNative) || (Params >> -NoNative); - #newoptions->(Insert: -NoNative); - /If; - If: (#options !>> -UseNative) && ((#value->(IsA: 'set')) || (#value->(IsA: 'list')) || (#value->(IsA: 'queue')) || (#value->(IsA: 'priorityqueue')) || (#value->(IsA: 'stack'))); - #output += (Encode_JSON: Array->(insertfrom: #value->iterator) &, -Options=#newoptions); - Else: (#options !>> -UseNative) && (#value->(IsA: 'pair')); - #output += (Encode_JSON: (Array: #value->First, #value->Second)); - Else: (#options !>> -Internal) && (#value->(Isa: 'array') == False) && (#value->(IsA: 'map') == False); - #output += '[' + (Encode_JSON: #value, -Options=#newoptions) + ']'; - Else: (#value->(IsA: 'literal')); - #output += #value; - Else: (#value->(IsA: 'string')); - #output += '"'; - Loop: (#value->Length); - Local('character' = #value->(Get: Loop_Count)); - #output->(Append: - (Match_RegExp('[\\x{0020}-\\x{21}\\x{23}-\\x{5b}\\x{5d}-\\x{10fff}]') == #character) ? #character | - '\\' + (#escapes->(Contains: #character) ? #escapes->(Find: #character) | 'u' + String(Encode_Hex(#character))->PadLeading(4, '0')&) - ); - /Loop; - #output += '"'; - Else: (#value->(IsA: 'integer')) || (#value->(IsA: 'decimal')) || (#value->(IsA: 'boolean')); - #output += (String: #value); - Else: (#value->(IsA: 'null')); - #output += 'null'; - Else: (#value->(IsA: 'date')); - If: #value->gmt; - #output += '"' + #value->(format: '%QT%TZ') + '"'; - Else; - #output += '"' + #value->(format: '%QT%T') + '"'; - /If; - Else: (#value->(IsA: 'array')); - #output += '['; - Iterate: #value, (Local: 'temp'); - #output += (Encode_JSON: #temp, -Options=#newoptions); - If: #value->Size != Loop_Count; - #output += ', '; - /If; - /Iterate; - #output += ']'; - Else: (#value->(IsA: 'object')); - #output += '{'; - Iterate: #value, (Local: 'temp'); - #output += #temp->First + ': ' + (Encode_JSON: #temp->Second, -Options=#newoptions); - If: (#value->Size != Loop_Count); - #output += ', '; - /If; - /Iterate; - #output += '}'; - Else: (#value->(IsA: 'map')); - #output += '{'; - Iterate: #value, (Local: 'temp'); - #output += (Encode_JSON: #temp->First, -Options=#newoptions) + ': ' + (Encode_JSON: #temp->Second, -Options=#newoptions); - If: (#value->Size != Loop_Count); - #output += ', '; - /If; - /Iterate; - #output += '}'; - Else: (#value->(IsA: 'client_ip')) || (#value->(IsA: 'client_address')); - #output += (Encode_JSON: (String: #value), -Options=#newoptions); - Else: (#options !>> -UseNative) && (#value->(IsA: 'set')) || (#value->(IsA: 'list')) || (#value->(IsA: 'queue')) || (#value->(IsA: 'priorityqueue')) || (#value->(IsA: 'stack')); - #output += (Encode_JSON: Array->(insertfrom: #value->iterator) &, -Options=#newoptions); - Else: (#options !>> -NoNative); - #output += (Encode_JSON: (Map: '__jsonclass__'=(Array:'deserialize',(Array:'' + #value->Serialize + '')))); - /If; - Return: @#output; - - /Define_Tag; - -/If; - -If: (Lasso_TagExists: 'Decode_JSON') == False; - - Define_Tag: 'JSON', -Namespace='Decode_', -Required='value'; - - (#value == '') ? Return: Null; - - Define_Tag: 'consume_string', -Required='ibytes'; - Local: 'unescapes' = (map: 34 = '"', 92 = '\\', 98 = '\b', 102 = '\f', 110 = '\n', 114 = '\r', 116 = '\t'); - Local: 'temp' = 0, 'obytes' = Bytes; - While: ((#temp := #ibytes->export8bits) != 34); // '"' - If: (#temp === 92); // '\' - #temp = #ibytes->export8bits; - If: (#temp === 117); // 'u' - #obytes->(ImportString: (Decode_Hex: (String: #ibytes->(GetRange: #ibytes->Position + 1, 4)))->(ExportString: 'UTF-16'), 'UTF-8'); - #ibytes->(SetPosition: #ibytes->Position + 4); - Else; - If: (#unescapes->(Contains: #temp)); - #obytes->(ImportString: #unescapes->(Find: #temp), 'UTF-8'); - Else; - #obytes->(Import8Bits: #temp); - /If; - /If; - Else; - #obytes->(Import8Bits: #temp); - /If; - /While; - Local('output' = #obytes->(ExportString: 'UTF-8')); - If: #output->(BeginsWith: '') && #output->(EndsWith: ''); - Local: 'temp' = #output - '' - ''; - Local: 'output' = null; - Protect; - #output->(Deserialize: #temp); - /Protect; - Else: (Valid_Date: #output, -Format='%QT%TZ'); - Local: 'output' = (Date: #output, -Format='%QT%TZ'); - Else: (Valid_Date: #output, -Format='%QT%T'); - Local: 'output' = (Date: #output, -Format='%QT%T'); - /If; - Return: @#output; - /Define_Tag; - - Define_Tag: 'consume_token', -Required='ibytes', -required='temp'; - Local: 'obytes' = bytes->(import8bits: #temp) &; - local: 'delimit' = (array: 9, 10, 13, 32, 44, 58, 93, 125); // \t\r\n ,:]} - While: (#delimit !>> (#temp := #ibytes->export8bits)); - #obytes->(import8bits: #temp); - /While; - Local: 'output' = (String: #obytes); - If: (#output == 'true') || (#output == 'false'); - Return: (Boolean: #output); - Else: (#output == 'null'); - Return: Null; - Else: (String_IsNumeric: #output); - Return: (#output >> '.') ? (Decimal: #output) | (Integer: #output); - /If; - Return: @#output; - /Define_Tag; - - Define_Tag: 'consume_array', -Required='ibytes'; - Local: 'output' = array; - local: 'delimit' = (array: 9, 10, 13, 32, 44); // \t\r\n , - local: 'temp' = 0; - While: ((#temp := #ibytes->export8bits) != 93); // ] - If: (#delimit >> #temp); - // Discard whitespace - Else: (#temp == 34); // " - #output->(insert: (consume_string: @#ibytes)); - Else: (#temp == 91); // [ - #output->(insert: (consume_array: @#ibytes)); - Else: (#temp == 123); // { - #output->(insert: (consume_object: @#ibytes)); - Else; - #output->(insert: (consume_token: @#ibytes, @#temp)); - (#temp == 93) ? Loop_Abort; - /If; - /While; - Return: @#output; - /Define_Tag; - - Define_Tag: 'consume_object', -Required='ibytes'; - Local: 'output' = map; - local: 'delimit' = (array: 9, 10, 13, 32, 44); // \t\r\n , - local: 'temp' = 0; - local: 'key' = null; - local: 'val' = null; - While: ((#temp := #ibytes->export8bits) != 125); // } - If: (#delimit >> #temp); - // Discard whitespace - Else: (#key !== null) && (#temp == 34); // " - #output->(insert: #key = (consume_string: @#ibytes)); - #key = null; - Else: (#key !== null) && (#temp == 91); // [ - #output->(insert: #key = (consume_array: @#ibytes)); - #key = null; - Else: (#key !== null) && (#temp == 123); // { - #output->(insert: #key = (consume_object: @#ibytes)); - #key = null; - Else: (#key !== null); - #output->(insert: #key = (consume_token: @#ibytes, @#temp)); - (#temp == 125) ? Loop_abort; - #key = null; - Else; - #key = (consume_string: @#ibytes); - while(#delimit >> (#temp := #ibytes->export8bits)); - /while; - #temp != 58 ? Loop_Abort; - /If; - /While; - If: (#output >> '__jsonclass__') && (#output->(Find: '__jsonclass__')->(isa: 'array')) && (#output->(Find: '__jsonclass__')->size >= 2) && (#output->(Find: '__jsonclass__')->First == 'deserialize'); - Return: #output->(find: '__jsonclass__')->Second->First; - Else: (#output >> 'native') && (#output >> 'comment') && (#output->(find: 'comment') == 'http://www.lassosoft.com/json'); - Return: #output->(find: 'native'); - /If; - Return: @#output; - /Define_Tag; - - Local: 'ibytes' = (bytes: #value); - Local: 'start' = 1; - #ibytes->removeLeading(BOM_UTF8); - Local: 'temp' = #ibytes->export8bits; - If: (#temp == 91); // [ - Local: 'output' = (consume_array: @#ibytes); - Return: @#output; - Else: (#temp == 123); // { - Local: 'output' = (consume_object: @#ibytes); - Return: @#output; - /If; - - /Define_Tag; - -/If; - -If: (Lasso_TagExists: 'Literal') == False; - - Define_Type: 'Literal', 'String'; - /Define_Type; - -/If; - -If: (Lasso_TagExists: 'Object') == False; - - Define_Type: 'Object', 'Map'; - /Define_Type; - -/If; - -If: (Lasso_TagExists: 'JSON_RPCCall') == False; - - Define_Tag: 'RPCCall', -Namespace='JSON_', - -Required='method', - -Optional='params', - -Optional='id', - -Optional='host'; - - !(Local_Defined: 'host') ? Local: 'host' = 'http://localhost/lassoapps.8/rpc/rpc.lasso'; - !(Local_Defined: 'id') ? Local: 'id' = Lasso_UniqueID; - Local: 'request' = (Map: 'method' = #method, 'params' = #params, 'id' = #id); - Local: 'request' = (Encode_JSON: #request); - Local: 'result' = (Include_URL: #host, -PostParams=#request); - Local: 'result' = (Decode_JSON: #result); - Return: @#result; - - /Define_Tag; - -/If; - -If: (Lasso_TagExists: 'JSON_Records') == False; - - Define_Tag: 'JSON_Records', - -Optional='KeyField', - -Optional='ReturnField', - -Optional='ExcludeField', - -Optional='Fields'; - - Local: '_fields' = (Local_Defined: 'fields') && #fields->(IsA: 'array') ? #fields | Field_Names; - Fail_If: #_fields->size == 0, -1, 'No fields found for [JSON_Records]'; - Local: '_keyfield' = (Local: 'keyfield'); - If: #_fields !>> #_keyfield; - Local: '_keyfield' = (KeyField_Name); - If: #_fields !>> #_keyfield; - Local: '_keyfield' = 'ID'; - If: #_fields !>> #_keyfield; - Local: '_keyfield' = #_fields->First; - /If; - /If; - /If; - Local: '_index' = #_fields->(FindPosition: #_keyfield)->First; - Local: '_return' = (Local_Defined: 'returnfield') ? (Params->(Find: -ReturnField)->(ForEach: {Params->First = Params->First->Second; Return: True}) &) | @#_fields; - Local: '_exclude' = (Local_Defined: 'excludefield') ? (Params->(Find: -ExcludeField)->(ForEach: {Params->First = Params->First->Second; Return: True}) &) | Array; - Local: '_records' = Array; - Iterate: Records_Array, (Local: '_record'); - Local: '_temp' = Map; - Iterate: #_fields, (Local: '_field'); - ((#_return >> #_field) && (#_exclude !>> #_field)) ? #_temp->Insert(#_field = #_record->(Get: Loop_Count)); - /Iterate; - #_records->Insert(#_temp); - /Iterate; - Local: '_output' = (Encode_JSON: (Object: 'error_msg'=Error_Msg, 'error_code'=Error_Code, 'found_count'=Found_Count, 'keyfield'=#_keyfield, 'rows'=#_records)); - Return: @#_output; - - /Define_Tag; - -/If; - -?> diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/json.lasso9 b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/json.lasso9 deleted file mode 100644 index 732ab2a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/json.lasso9 +++ /dev/null @@ -1,213 +0,0 @@ - -/** - trait_json_serialize - Objects with this trait will be assumed to convert to json data - when its ->asString method is called -*/ -define trait_json_serialize => trait { - require asString() -} - -define json_serialize(e::bytes)::string => ('"' + (string(#e)->Replace(`\`, `\\`) & Replace('\"', '\\"') & Replace('\r', '\\r') & Replace('\n', '\\n') & Replace('\t', '\\t') & Replace('\f', '\\f') & Replace('\b', '\\b') &) + '"') -define json_serialize(e::string)::string => ('"' + (string(#e)->Replace(`\`, `\\`) & Replace('\"', '\\"') & Replace('\r', '\\r') & Replace('\n', '\\n') & Replace('\t', '\\t') & Replace('\f', '\\f') & Replace('\b', '\\b') &) + '"') -define json_serialize(e::json_literal)::string => (#e->asstring) -define json_serialize(e::integer)::string => (#e->asstring) -define json_serialize(e::decimal)::string => (#e->asstring) -define json_serialize(e::boolean)::string => (#e->asstring) -define json_serialize(e::null)::string => ('null') -define json_serialize(e::date)::string => ('"' + #e->format(#e->gmt ? '%QT%TZ' | '%Q%T') + '"') -/* -define json_serialize(e::array)::string => { - local(output) = ''; - local(delimit) = ''; - #e->foreach => { #output += #delimit + json_serialize(#1); #delimit = ', '; } - return('[' + #output + ']'); -} -define json_serialize(e::staticarray)::string => { - local(output) = ''; - local(delimit) = ''; - #e->foreach => { #output += #delimit + json_serialize(#1); #delimit = ', '; } - return('[' + #output + ']'); -} -*/ -define json_serialize(e::trait_forEach)::string => { - local(output) = ''; - local(delimit) = ''; - #e->foreach => { #output += #delimit + json_serialize(#1); #delimit = ', '; } - return('[' + #output + ']'); -} -define json_serialize(e::map)::string => { - local(output = with pr in #e->eachPair - select json_serialize(#pr->first->asString) + ': ' + json_serialize(#pr->second)) - return '{' + #output->join(',') + '}' -} -define json_serialize(e::json_object)::string => { - local(output) = ''; - local(delimit) = ''; - #e->foreachpair => { #output += #delimit + #1->first + ': ' + json_serialize(#1->second); #delimit = ', '; } - return('{' + #output + '}'); -} -define json_serialize(e::trait_json_serialize) => #e->asString -define json_serialize(e::any)::string => json_serialize('' + #e->serialize + '') - -// Bil Corry fixes for decoding json -define json_consume_string(ibytes::bytes) => { - local(obytes) = bytes; - local(temp) = 0; - while((#temp := #ibytes->export8bits) != 34); - #obytes->import8bits(#temp); - (#temp == 92) ? #obytes->import8bits(#ibytes->export8bits); // Escape \ - /while; - local(output = string(#obytes)->unescape) - //Replace('\\"', '\"') & Replace('\\r', '\r') & Replace('\\n', '\n') & Replace('\\t', '\t') & Replace('\\f', '\f') & Replace('\\b', '\b') &; - if(#output->BeginsWith('') && #output->EndsWith('')); - Protect; - return serialization_reader(xml(#output - '' - ''))->read - /Protect; - else( (#output->size == 16 or #output->size == 15) and regexp(`\d{8}T\d{6}Z?`, '', #output)->matches) - return date(#output, -Format=#output->size == 16?`yyyyMMdd'T'HHmmssZ`|`yyyyMMdd'T'HHmmss`) - /if - return #output -} - -// Bil Corry fix + Ke fix -define json_consume_token(ibytes::bytes, temp::integer) => { - - local(obytes = bytes->import8bits(#temp) &, - delimit = array(9, 10, 13, 32, 44, 58, 93, 125)) // \t\r\n ,:]} - - while(#delimit !>> (#temp := #ibytes->export8bits)) - #obytes->import8bits(#temp) - /while - - #temp == 125? // } - #ibytes->marker -= 1 -//============================================================================ -// Is also end of token if end of array[] - #temp == 93? // ] - #ibytes->marker -= 1 -//............................................................................ - - local(output = string(#obytes)) - #output == 'true'? - return true - #output == 'false'? - return false - #output == 'null'? - return null - string_IsNumeric(#output)? - return (#output >> '.')? decimal(#output) | integer(#output) - - return #output -} - -// Bil Corry fix -define json_consume_array(ibytes::bytes)::array => { - Local(output) = array; - local(delimit) = array( 9, 10, 13, 32, 44); // \t\r\n , - local(temp) = 0; - While((#temp := #ibytes->export8bits) != 93); // ] - If(#delimit >> #temp); - // Discard whitespace - Else(#temp == 34); // " - #output->insert(json_consume_string(#ibytes)); - Else(#temp == 91); // [ - #output->insert(json_consume_array(#ibytes)); - Else(#temp == 123); // { - #output->insert(json_consume_object(#ibytes)); - Else; - #output->insert(json_consume_token(#ibytes, #temp)); - (#temp == 93) ? Loop_Abort; - /If; - /While; - Return(#output); -} - -// Bil Corry fix -define json_consume_object(ibytes::bytes)::map => { - Local('output' = map, - 'delimit' = array( 9, 10, 13, 32, 44), // \t\r\n , - 'temp' = 0, - 'key' = null, - 'val' = null); - While((#temp := #ibytes->export8bits) != 125); // } - If(#delimit >> #temp); - // Discard whitespace - Else((#key !== null) && (#temp == 34)); // " - #output->insert(#key = json_consume_string(#ibytes)); - #key = null; - Else((#key !== null) && (#temp == 91)); // [ - #output->insert(#key = json_consume_array(#ibytes)); - #key = null; - Else((#key !== null) && (#temp == 123)); // { - #output->insert(#key = json_consume_object(#ibytes)); - #key = null; - Else((#key !== null)); - #output->insert(#key = json_consume_token(#ibytes, #temp)); - #key = null; - Else; - #key = json_consume_string(#ibytes); - while(#delimit >> (#temp := #ibytes->export8bits)); - /while; - #temp != 58 ? Loop_Abort; - /If; - /While; - - If((#output >> '__jsonclass__') && (#output->Find('__jsonclass__')->isa('array')) && (#output->Find('__jsonclass__')->size >= 2) && (#output->Find('__jsonclass__')->First == 'deserialize')); - Return(#output->find('__jsonclass__')->Second->First); - Else((#output >> 'native') && (#output >> 'comment') && (#output->find('comment') == 'http://www.lassosoft.com/json')); - Return(#output->find('native')); - /If; - Return(#output); -} - -// Bil Corry fix + Ke fix -define json_deserialize(ibytes::bytes)::any => { - #ibytes->removeLeading(bom_utf8); - -//============================================================================ -// Reset marker on provided bytes - #ibytes->marker = 0 -//............................................................................ - - Local(temp) = #ibytes->export8bits; - If(#temp == 91); // [ - Return(json_consume_array(#ibytes)); - Else(#temp == 123); // { - Return(json_consume_object(#ibytes)); - else(#temp == 34) // " - return json_consume_string(#ibytes) - /If; -} - -define json_deserialize(s::string) => json_deserialize(bytes(#s)) - -/**! json_literal - This is a subclass of String used for JSON encoding. - - A json_literal works exactly like a string, but will be inserted directly - rather than being encoded into JSON. This allows JavaScript elements - like functions to be inserted into JSON objects. This is most useful - when the JSON object will be used within a JavaScript on the local page. - [Map: 'fn'=Literal('function(){ ...})] => {'fn': function(){ ...}} -**/ -define json_literal => type { - parent string -} - -/**! json_object - This is a subclass of Map used for JSON encoding. - - An object works exactly like a map, but when it is encoded into JSON all - of the keys will be inserted literally. This makes it easy to create a - JavaScript object without extraneous quote marks. - Object('name'='value') => {name: "value"} -**/ -define json_object => type { - parent map - public onCreate(...) => ..onCreate(:#rest or (:)) -} - -define json_rpccall(method::string, params=map, id='', host='') => { - #id == '' ? #host = Lasso_UniqueID; - #host == '' ? #host = 'http://localhost/lassoapps.8/rpc/rpc.lasso'; - Return(Decode_JSON(Include_URL(#host, -PostParams=Encode_JSON(Map('method' = #method, 'params' = #params, 'id' = #id))))); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/language.hy b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/language.hy deleted file mode 100644 index 9768c39..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/language.hy +++ /dev/null @@ -1,165 +0,0 @@ -;;;; This contains some of the core Hy functions used -;;;; to make functional programming slightly easier. -;;;; - - -(defn _numeric-check [x] - (if (not (numeric? x)) - (raise (TypeError (.format "{0!r} is not a number" x))))) - -(defn cycle [coll] - "Yield an infinite repetition of the items in coll" - (setv seen []) - (for [x coll] - (yield x) - (.append seen x)) - (while seen - (for [x seen] - (yield x)))) - -(defn dec [n] - "Decrement n by 1" - (_numeric-check n) - (- n 1)) - -(defn distinct [coll] - "Return a generator from the original collection with duplicates - removed" - (let [[seen []] [citer (iter coll)]] - (for [val citer] - (if (not_in val seen) - (do - (yield val) - (.append seen val)))))) - -(defn drop [count coll] - "Drop `count` elements from `coll` and yield back the rest" - (let [[citer (iter coll)]] - (try (for [i (range count)] - (next citer)) - (catch [StopIteration])) - citer)) - -(defn even? [n] - "Return true if n is an even number" - (_numeric-check n) - (= (% n 2) 0)) - -(defn filter [pred coll] - "Return all elements from `coll` that pass `pred`" - (let [[citer (iter coll)]] - (for [val citer] - (if (pred val) - (yield val))))) - -(defn inc [n] - "Increment n by 1" - (_numeric-check n) - (+ n 1)) - -(defn instance? [klass x] - (isinstance x klass)) - -(defn iterable? [x] - "Return true if x is iterable" - (try (do (iter x) true) - (catch [Exception] false))) - -(defn iterate [f x] - (setv val x) - (while true - (yield val) - (setv val (f val)))) - -(defn iterator? [x] - "Return true if x is an iterator" - (try (= x (iter x)) - (catch [TypeError] false))) - -(defn neg? [n] - "Return true if n is < 0" - (_numeric-check n) - (< n 0)) - -(defn none? [x] - "Return true if x is None" - (is x None)) - -(defn numeric? [x] - (import numbers) - (instance? numbers.Number x)) - -(defn nth [coll index] - "Return nth item in collection or sequence, counting from 0" - (if (not (neg? index)) - (if (iterable? coll) - (try (first (list (take 1 (drop index coll)))) - (catch [IndexError] None)) - (try (get coll index) - (catch [IndexError] None))) - None)) - -(defn odd? [n] - "Return true if n is an odd number" - (_numeric-check n) - (= (% n 2) 1)) - -(defn pos? [n] - "Return true if n is > 0" - (_numeric_check n) - (> n 0)) - -(defn remove [pred coll] - "Return coll with elements removed that pass `pred`" - (let [[citer (iter coll)]] - (for [val citer] - (if (not (pred val)) - (yield val))))) - -(defn repeat [x &optional n] - "Yield x forever or optionally n times" - (if (none? n) - (setv dispatch (fn [] (while true (yield x)))) - (setv dispatch (fn [] (for [_ (range n)] (yield x))))) - (dispatch)) - -(defn repeatedly [func] - "Yield result of running func repeatedly" - (while true - (yield (func)))) - -(defn take [count coll] - "Take `count` elements from `coll`, or the whole set if the total - number of entries in `coll` is less than `count`." - (let [[citer (iter coll)]] - (for [_ (range count)] - (yield (next citer))))) - -(defn take-nth [n coll] - "Return every nth member of coll - raises ValueError for (not (pos? n))" - (if (pos? n) - (let [[citer (iter coll)] [skip (dec n)]] - (for [val citer] - (yield val) - (for [_ (range skip)] - (next citer)))) - (raise (ValueError "n must be positive")))) - -(defn take-while [pred coll] - "Take all elements while `pred` is true" - (let [[citer (iter coll)]] - (for [val citer] - (if (pred val) - (yield val) - (break))))) - -(defn zero? [n] - "Return true if n is 0" - (_numeric_check n) - (= n 0)) - -(def *exports* ["cycle" "dec" "distinct" "drop" "even?" "filter" "inc" - "instance?" "iterable?" "iterate" "iterator?" "neg?" - "none?" "nth" "numeric?" "odd?" "pos?" "remove" "repeat" - "repeatedly" "take" "take_nth" "take_while" "zero?"]) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/lighttpd_config.conf b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/lighttpd_config.conf deleted file mode 100644 index 8475f37..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/lighttpd_config.conf +++ /dev/null @@ -1,13 +0,0 @@ -fastcgi.server = ( ".php" => (( - "bin-path" => "/path/to/php-cgi", - "socket" => "/tmp/php.socket", - "max-procs" => 2, - "bin-environment" => ( - "PHP_FCGI_CHILDREN" => "16", - "PHP_FCGI_MAX_REQUESTS" => "10000" - ), - "bin-copy-environment" => ( - "PATH", "SHELL", "USER" - ), - "broken-scriptfilename" => "enable" - ))) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/limbo.b b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/limbo.b deleted file mode 100644 index e55a0a6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/limbo.b +++ /dev/null @@ -1,456 +0,0 @@ -implement Ninewin; -include "sys.m"; - sys: Sys; -include "draw.m"; - draw: Draw; - Image, Display, Pointer: import draw; -include "arg.m"; -include "keyboard.m"; -include "tk.m"; -include "wmclient.m"; - wmclient: Wmclient; - Window: import wmclient; -include "sh.m"; - sh: Sh; - -# run a p9 graphics program (default rio) under inferno wm, -# making available to it: -# /dev/winname - naming the current inferno window (changing on resize) -# /dev/mouse - pointer file + resize events; write to change position -# /dev/cursor - change appearance of cursor. -# /dev/draw - inferno draw device -# /dev/cons - read keyboard events, write to 9win stdout. - -Ninewin: module { - init: fn(ctxt: ref Draw->Context, argv: list of string); -}; -winname: string; - -init(ctxt: ref Draw->Context, argv: list of string) -{ - size := Draw->Point(500, 500); - sys = load Sys Sys->PATH; - draw = load Draw Draw->PATH; - wmclient = load Wmclient Wmclient->PATH; - wmclient->init(); - sh = load Sh Sh->PATH; - - buts := Wmclient->Resize; - if(ctxt == nil){ - ctxt = wmclient->makedrawcontext(); - buts = Wmclient->Plain; - } - arg := load Arg Arg->PATH; - arg->init(argv); - arg->setusage("9win [-s] [-x width] [-y height]"); - exportonly := 0; - while(((opt := arg->opt())) != 0){ - case opt { - 's' => - exportonly = 1; - 'x' => - size.x = int arg->earg(); - 'y' => - size.y = int arg->earg(); - * => - arg->usage(); - } - } - if(size.x < 1 || size.y < 1) - arg->usage(); - argv = arg->argv(); - if(argv != nil && hd argv == "-s"){ - exportonly = 1; - argv = tl argv; - } - if(argv == nil && !exportonly) - argv = "rio" :: nil; - if(argv != nil && exportonly){ - sys->fprint(sys->fildes(2), "9win: no command allowed with -s flag\n"); - raise "fail:usage"; - } - title := "9win"; - if(!exportonly) - title += " " + hd argv; - w := wmclient->window(ctxt, title, buts); - w.reshape(((0, 0), size)); - w.onscreen(nil); - if(w.image == nil){ - sys->fprint(sys->fildes(2), "9win: cannot get image to draw on\n"); - raise "fail:no window"; - } - - sys->pctl(Sys->FORKNS|Sys->NEWPGRP, nil); - ld := "/n/9win"; - if(sys->bind("#s", ld, Sys->MREPL) == -1 && - sys->bind("#s", ld = "/n/local", Sys->MREPL) == -1){ - sys->fprint(sys->fildes(2), "9win: cannot bind files: %r\n"); - raise "fail:error"; - } - w.startinput("kbd" :: "ptr" :: nil); - spawn ptrproc(rq := chan of Sys->Rread, ptr := chan[10] of ref Pointer, reshape := chan[1] of int); - - - fwinname := sys->file2chan(ld, "winname"); - fconsctl := sys->file2chan(ld, "consctl"); - fcons := sys->file2chan(ld, "cons"); - fmouse := sys->file2chan(ld, "mouse"); - fcursor := sys->file2chan(ld, "cursor"); - if(!exportonly){ - spawn run(sync := chan of string, w.ctl, ld, argv); - if((e := <-sync) != nil){ - sys->fprint(sys->fildes(2), "9win: %s", e); - raise "fail:error"; - } - } - spawn serveproc(w, rq, fwinname, fconsctl, fcons, fmouse, fcursor); - if(!exportonly){ - # handle events synchronously so that we don't get a "killed" message - # from the shell. - handleevents(w, ptr, reshape); - }else{ - spawn handleevents(w, ptr, reshape); - sys->bind(ld, "/dev", Sys->MBEFORE); - export(sys->fildes(0), w.ctl); - } -} - -handleevents(w: ref Window, ptr: chan of ref Pointer, reshape: chan of int) -{ - for(;;)alt{ - c := <-w.ctxt.ctl or - c = <-w.ctl => - e := w.wmctl(c); - if(e != nil) - sys->fprint(sys->fildes(2), "9win: ctl error: %s\n", e); - if(e == nil && c != nil && c[0] == '!'){ - alt{ - reshape <-= 1 => - ; - * => - ; - } - winname = nil; - } - p := <-w.ctxt.ptr => - if(w.pointer(*p) == 0){ - # XXX would block here if client isn't reading mouse... but we do want to - # extert back-pressure, which conflicts. - alt{ - ptr <-= p => - ; - * => - ; # sys->fprint(sys->fildes(2), "9win: discarding mouse event\n"); - } - } - } -} - -serveproc(w: ref Window, mouserq: chan of Sys->Rread, fwinname, fconsctl, fcons, fmouse, fcursor: ref Sys->FileIO) -{ - winid := 0; - krc: list of Sys->Rread; - ks: string; - - for(;;)alt { - c := <-w.ctxt.kbd => - ks[len ks] = inf2p9key(c); - if(krc != nil){ - hd krc <-= (array of byte ks, nil); - ks = nil; - krc = tl krc; - } - (nil, d, nil, wc) := <-fcons.write => - if(wc != nil){ - sys->write(sys->fildes(1), d, len d); - wc <-= (len d, nil); - } - (nil, nil, nil, rc) := <-fcons.read => - if(rc != nil){ - if(ks != nil){ - rc <-= (array of byte ks, nil); - ks = nil; - }else - krc = rc :: krc; - } - (offset, nil, nil, rc) := <-fwinname.read => - if(rc != nil){ - if(winname == nil){ - winname = sys->sprint("noborder.9win.%d", winid++); - if(w.image.name(winname, 1) == -1){ - sys->fprint(sys->fildes(2), "9win: namewin %q failed: %r", winname); - rc <-= (nil, "namewin failure"); - break; - } - } - d := array of byte winname; - if(offset < len d) - d = d[offset:]; - else - d = nil; - rc <-= (d, nil); - } - (nil, nil, nil, wc) := <-fwinname.write => - if(wc != nil) - wc <-= (-1, "permission denied"); - (nil, nil, nil, rc) := <-fconsctl.read => - if(rc != nil) - rc <-= (nil, "permission denied"); - (nil, d, nil, wc) := <-fconsctl.write => - if(wc != nil){ - if(string d != "rawon") - wc <-= (-1, "cannot change console mode"); - else - wc <-= (len d, nil); - } - (nil, nil, nil, rc) := <-fmouse.read => - if(rc != nil) - mouserq <-= rc; - (nil, d, nil, wc) := <-fmouse.write => - if(wc != nil){ - e := cursorset(w, string d); - if(e == nil) - wc <-= (len d, nil); - else - wc <-= (-1, e); - } - (nil, nil, nil, rc) := <-fcursor.read => - if(rc != nil) - rc <-= (nil, "permission denied"); - (nil, d, nil, wc) := <-fcursor.write => - if(wc != nil){ - e := cursorswitch(w, d); - if(e == nil) - wc <-= (len d, nil); - else - wc <-= (-1, e); - } - } -} - -ptrproc(rq: chan of Sys->Rread, ptr: chan of ref Pointer, reshape: chan of int) -{ - rl: list of Sys->Rread; - c := ref Pointer(0, (0, 0), 0); - for(;;){ - ch: int; - alt{ - p := <-ptr => - ch = 'm'; - c = p; - <-reshape => - ch = 'r'; - rc := <-rq => - rl = rc :: rl; - continue; - } - if(rl == nil) - rl = <-rq :: rl; - hd rl <-= (sys->aprint("%c%11d %11d %11d %11d ", ch, c.xy.x, c.xy.y, c.buttons, c.msec), nil); - rl = tl rl; - } -} - -cursorset(w: ref Window, m: string): string -{ - if(m == nil || m[0] != 'm') - return "invalid mouse message"; - x := int m[1:]; - for(i := 1; i < len m; i++) - if(m[i] == ' '){ - while(m[i] == ' ') - i++; - break; - } - if(i == len m) - return "invalid mouse message"; - y := int m[i:]; - return w.wmctl(sys->sprint("ptr %d %d", x, y)); -} - -cursorswitch(w: ref Window, d: array of byte): string -{ - Hex: con "0123456789abcdef"; - if(len d != 2*4+64) - return w.wmctl("cursor"); - hot := Draw->Point(bglong(d, 0*4), bglong(d, 1*4)); - s := sys->sprint("cursor %d %d 16 32 ", hot.x, hot.y); - for(i := 2*4; i < len d; i++){ - c := int d[i]; - s[len s] = Hex[c >> 4]; - s[len s] = Hex[c & 16rf]; - } - return w.wmctl(s); -} - -run(sync, ctl: chan of string, ld: string, argv: list of string) -{ - Rcmeta: con "|<>&^*[]?();"; - sys->pctl(Sys->FORKNS, nil); - if(sys->bind("#₪", "/srv", Sys->MCREATE) == -1){ - sync <-= sys->sprint("cannot bind srv device: %r"); - exit; - } - srvname := "/srv/9win."+string sys->pctl(0, nil); # XXX do better. - fd := sys->create(srvname, Sys->ORDWR, 8r600); - if(fd == nil){ - sync <-= sys->sprint("cannot create %s: %r", srvname); - exit; - } - sync <-= nil; - spawn export(fd, ctl); - sh->run(nil, "os" :: - "rc" :: "-c" :: - "mount "+srvname+" /mnt/term;"+ - "rm "+srvname+";"+ - "bind -b /mnt/term"+ld+" /dev;"+ - "bind /mnt/term/dev/draw /dev/draw ||"+ - "bind -a /mnt/term/dev /dev;"+ - quotedc("cd"::"/mnt/term"+cwd()::nil, Rcmeta)+";"+ - quotedc(argv, Rcmeta)+";":: - nil - ); -} - -export(fd: ref Sys->FD, ctl: chan of string) -{ - sys->export(fd, "/", Sys->EXPWAIT); - ctl <-= "exit"; -} - -inf2p9key(c: int): int -{ - KF: import Keyboard; - - P9KF: con 16rF000; - Spec: con 16rF800; - Khome: con P9KF|16r0D; - Kup: con P9KF|16r0E; - Kpgup: con P9KF|16r0F; - Kprint: con P9KF|16r10; - Kleft: con P9KF|16r11; - Kright: con P9KF|16r12; - Kdown: con Spec|16r00; - Kview: con Spec|16r00; - Kpgdown: con P9KF|16r13; - Kins: con P9KF|16r14; - Kend: con P9KF|16r18; - Kalt: con P9KF|16r15; - Kshift: con P9KF|16r16; - Kctl: con P9KF|16r17; - - case c { - Keyboard->LShift => - return Kshift; - Keyboard->LCtrl => - return Kctl; - Keyboard->LAlt => - return Kalt; - Keyboard->Home => - return Khome; - Keyboard->End => - return Kend; - Keyboard->Up => - return Kup; - Keyboard->Down => - return Kdown; - Keyboard->Left => - return Kleft; - Keyboard->Right => - return Kright; - Keyboard->Pgup => - return Kpgup; - Keyboard->Pgdown => - return Kpgdown; - Keyboard->Ins => - return Kins; - - # function keys - KF|1 or - KF|2 or - KF|3 or - KF|4 or - KF|5 or - KF|6 or - KF|7 or - KF|8 or - KF|9 or - KF|10 or - KF|11 or - KF|12 => - return (c - KF) + P9KF; - } - return c; -} - -cwd(): string -{ - return sys->fd2path(sys->open(".", Sys->OREAD)); -} - -# from string.b, waiting for declaration to be uncommented. -quotedc(argv: list of string, cl: string): string -{ - s := ""; - while (argv != nil) { - arg := hd argv; - for (i := 0; i < len arg; i++) { - c := arg[i]; - if (c == ' ' || c == '\t' || c == '\n' || c == '\'' || in(c, cl)) - break; - } - if (i < len arg || arg == nil) { - s += "'" + arg[0:i]; - for (; i < len arg; i++) { - if (arg[i] == '\'') - s[len s] = '\''; - s[len s] = arg[i]; - } - s[len s] = '\''; - } else - s += arg; - if (tl argv != nil) - s[len s] = ' '; - argv = tl argv; - } - return s; -} - -in(c: int, s: string): int -{ - n := len s; - if(n == 0) - return 0; - ans := 0; - negate := 0; - if(s[0] == '^') { - negate = 1; - s = s[1:]; - n--; - } - for(i := 0; i < n; i++) { - if(s[i] == '-' && i > 0 && i < n-1) { - if(c >= s[i-1] && c <= s[i+1]) { - ans = 1; - break; - } - i++; - } - else - if(c == s[i]) { - ans = 1; - break; - } - } - if(negate) - ans = !ans; - - # just to showcase labels -skip: - return ans; -} - -bglong(d: array of byte, i: int): int -{ - return int d[i] | (int d[i+1]<<8) | (int d[i+2]<<16) | (int d[i+3]<<24); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/linecontinuation.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/linecontinuation.py deleted file mode 100644 index 2a41c31..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/linecontinuation.py +++ /dev/null @@ -1,47 +0,0 @@ -apple.filter(x, y) -apple.\ - filter(x, y) - -1 \ - . \ - __str__ - -from os import path -from \ - os \ - import \ - path - -import os.path as something - -import \ - os.path \ - as \ - something - -class \ - Spam: - pass - -class Spam: pass - -class Spam(object): - pass - -class \ - Spam \ - ( - object - ) \ - : - pass - - -def \ - spam \ - ( \ - ) \ - : \ - pass - - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/livescript-demo.ls b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/livescript-demo.ls deleted file mode 100644 index 03cbcc9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/livescript-demo.ls +++ /dev/null @@ -1,43 +0,0 @@ -a = -> [1 to 50] -const b = --> [2 til 5] -var c = ~~> 10_000_000km * 500ms - 16~ff / 32~lol -e = (a) -> (b) ~> (c) --> (d, e) ~~> <[list of words]> -dashes-identifiers = -> - a - a b -- c 1-1 1- -1 a- a a -a -underscores_i$d = -> - /regexp1/ - //regexp2//g - 'strings' and "strings" and \strings and \#$-"\'strings - -another-word-list = <[ more words ]> - -[2 til 10] - |> map (* 2) - |> filter (> 5) - |> fold (+) - -obj = - prop1: 1 - prop2: 2 - -class Class extends Anc-est-or - (args) -> - <- # Comment - <~ /* Comment */ - void undefined yes no on off - a.void b.undefined c.off d.if f.no g.not - avoid bundefined coff dif fno gnot - "inter #{2 + 2} #variable" - '''HELLO 'world' ''' - -copy = (from, to, callback) --> - error, data <- read file - return callback error if error? - error <~ write file, data - return callback error if error? - callback() - -take(n, [x, ...xs]:list) = - | n <= 0 => [] - | empty list => [] - | otherwise => [x] +++ take n - 1, xs diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/logos_example.xm b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/logos_example.xm deleted file mode 100644 index 39753e2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/logos_example.xm +++ /dev/null @@ -1,28 +0,0 @@ -%hook ABC -- (id)a:(B)b { - %log; - return %orig(nil); -} -%end - -%subclass DEF: NSObject -- (id)init { - [%c(RuntimeAccessibleClass) alloc]; - return nil; -} -%end - -%group OptionalHooks -%hook ABC -- (void)release { - [self retain]; - %orig; -} -%end -%end - -%ctor { - %init; - if(OptionalCondition) - %init(OptionalHooks); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ltmain.sh b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ltmain.sh deleted file mode 100644 index 5b5f845..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ltmain.sh +++ /dev/null @@ -1,2849 +0,0 @@ -# ltmain.sh - Provide generalized library-building support services. -# NOTE: Changing this file will not affect anything until you rerun configure. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 -# Free Software Foundation, Inc. -# Originally by Gordon Matzigkeit , 1996 -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -basename="s,^.*/,,g" - -# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh -# is ksh but when the shell is invoked as "sh" and the current value of -# the _XPG environment variable is not equal to 1 (one), the special -# positional parameter $0, within a function call, is the name of the -# function. -progpath="$0" - -# define SED for historic ltconfig's generated by Libtool 1.3 -test -z "$SED" && SED=sed - -# The name of this program: -progname=`echo "$progpath" | $SED $basename` -modename="$progname" - -# Global variables: -EXIT_SUCCESS=0 -EXIT_FAILURE=1 - -PROGRAM=ltmain.sh -PACKAGE=libtool -VERSION=1.5.22 -TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)" - -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes. -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi -# Same for EGREP, and just to be sure, do LTCC as well -if test "X$EGREP" = X ; then - EGREP=egrep -fi -if test "X$LTCC" = X ; then - LTCC=${CC-gcc} -fi - -# Check that we have a working $echo. -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then - # Yippee, $echo works! - : -else - # Restart under the correct shell, and then maybe $echo will work. - exec $SHELL "$progpath" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat <&2 - $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 - exit $EXIT_FAILURE -fi - -# Global variables. -mode=$default_mode -nonopt= -prev= -prevopt= -run= -show="$echo" -show_help= -execute_dlfiles= -duplicate_deps=no -preserve_args= -lo2o="s/\\.lo\$/.${objext}/" -o2lo="s/\\.${objext}\$/.lo/" - -if test -z "$max_cmd_len"; then - i=0 - testring="ABCD" - new_result= - - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while (test "X"`$SHELL $0 --fallback-echo "X$testring" 2>/dev/null` \ - = "XX$testring") >/dev/null 2>&1 && - new_result=`expr "X$testring" : ".*" 2>&1` && - max_cmd_len="$new_result" && - test "$i" != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - testring="$testring$testring" - done - testring= - # Add a significant safety factor because C++ compilers can tack on massive - # amounts of additional arguments before passing them to the linker. - # It appears as though 1/2 is a usable value. - max_cmd_len=`expr $max_cmd_len \/ 2` -fi - -##################################### -# Shell function definitions: -# This seems to be the best place for them - -# func_mktempdir [string] -# Make a temporary directory that won't clash with other running -# libtool processes, and avoids race conditions if possible. If -# given, STRING is the basename for that directory. -func_mktempdir () -{ - my_template="${TMPDIR-/tmp}/${1-$progname}" - - if test "$run" = ":"; then - # Return a directory name, but don't create it in dry-run mode - my_tmpdir="${my_template}-$$" - else - - # If mktemp works, use that first and foremost - my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` - - if test ! -d "$my_tmpdir"; then - # Failing that, at least try and use $RANDOM to avoid a race - my_tmpdir="${my_template}-${RANDOM-0}$$" - - save_mktempdir_umask=`umask` - umask 0077 - $mkdir "$my_tmpdir" - umask $save_mktempdir_umask - fi - - # If we're not in dry-run mode, bomb out on failure - test -d "$my_tmpdir" || { - $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 - exit $EXIT_FAILURE - } - fi - - $echo "X$my_tmpdir" | $Xsed -} - - -# func_win32_libid arg -# return the library type of file 'arg' -# -# Need a lot of goo to handle *both* DLLs and import libs -# Has to be a shell function in order to 'eat' the argument -# that is supplied when $file_magic_command is called. -func_win32_libid () -{ - win32_libid_type="unknown" - win32_fileres=`file -L $1 2>/dev/null` - case $win32_fileres in - *ar\ archive\ import\ library*) # definitely import - win32_libid_type="x86 archive import" - ;; - *ar\ archive*) # could be an import, or static - if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ - $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then - win32_nmres=`eval $NM -f posix -A $1 | \ - $SED -n -e '1,100{/ I /{s,.*,import,;p;q;};}'` - case $win32_nmres in - import*) win32_libid_type="x86 archive import";; - *) win32_libid_type="x86 archive static";; - esac - fi - ;; - *DLL*) - win32_libid_type="x86 DLL" - ;; - *executable*) # but shell scripts are "executable" too... - case $win32_fileres in - *MS\ Windows\ PE\ Intel*) - win32_libid_type="x86 DLL" - ;; - esac - ;; - esac - $echo $win32_libid_type -} - - -# func_infer_tag arg -# Infer tagged configuration to use if any are available and -# if one wasn't chosen via the "--tag" command line option. -# Only attempt this if the compiler in the base compile -# command doesn't match the default compiler. -# arg is usually of the form 'gcc ...' -func_infer_tag () -{ - if test -n "$available_tags" && test -z "$tagname"; then - CC_quoted= - for arg in $CC; do - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - CC_quoted="$CC_quoted $arg" - done - case $@ in - # Blanks in the command may have been stripped by the calling shell, - # but not from the CC environment variable when configure was run. - " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; - # Blanks at the start of $base_compile will cause this to fail - # if we don't check for them as well. - *) - for z in $available_tags; do - if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then - # Evaluate the configuration. - eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" - CC_quoted= - for arg in $CC; do - # Double-quote args containing other shell metacharacters. - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - CC_quoted="$CC_quoted $arg" - done - # user sometimes does CC=-gcc so we need to match that to 'gcc' - trimedcc=`echo ${CC} | $SED -e "s/${host}-//g"` - # and sometimes libtool has CC=-gcc but user does CC=gcc - extendcc=${host}-${CC} - # and sometimes libtool has CC=-gcc but user has CC=-gcc - # (Gentoo-specific hack because we always export $CHOST) - mungedcc=${CHOST-${host}}-${trimedcc} - case "$@ " in - "cc "* | " cc "* | "${host}-cc "* | " ${host}-cc "*|\ - "gcc "* | " gcc "* | "${host}-gcc "* | " ${host}-gcc "*) - tagname=CC - break ;; - "$trimedcc "* | " $trimedcc "* | "`$echo $trimedcc` "* | " `$echo $trimedcc` "*|\ - "$extendcc "* | " $extendcc "* | "`$echo $extendcc` "* | " `$echo $extendcc` "*|\ - "$mungedcc "* | " $mungedcc "* | "`$echo $mungedcc` "* | " `$echo $mungedcc` "*|\ - " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) - # The compiler in the base compile command matches - # the one in the tagged configuration. - # Assume this is the tagged configuration we want. - tagname=$z - break - ;; - esac - fi - done - # If $tagname still isn't set, then no tagged configuration - # was found and let the user know that the "--tag" command - # line option must be used. - if test -z "$tagname"; then - $echo "$modename: unable to infer tagged configuration" - $echo "$modename: specify a tag with \`--tag'" 1>&2 - exit $EXIT_FAILURE -# else -# $echo "$modename: using $tagname tagged configuration" - fi - ;; - esac - fi -} - - -# func_extract_an_archive dir oldlib -func_extract_an_archive () -{ - f_ex_an_ar_dir="$1"; shift - f_ex_an_ar_oldlib="$1" - - $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" - $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? - if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then - : - else - $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 - exit $EXIT_FAILURE - fi -} - -# func_extract_archives gentop oldlib ... -func_extract_archives () -{ - my_gentop="$1"; shift - my_oldlibs=${1+"$@"} - my_oldobjs="" - my_xlib="" - my_xabs="" - my_xdir="" - my_status="" - - $show "${rm}r $my_gentop" - $run ${rm}r "$my_gentop" - $show "$mkdir $my_gentop" - $run $mkdir "$my_gentop" - my_status=$? - if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then - exit $my_status - fi - - for my_xlib in $my_oldlibs; do - # Extract the objects. - case $my_xlib in - [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; - *) my_xabs=`pwd`"/$my_xlib" ;; - esac - my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` - my_xdir="$my_gentop/$my_xlib" - - $show "${rm}r $my_xdir" - $run ${rm}r "$my_xdir" - $show "$mkdir $my_xdir" - $run $mkdir "$my_xdir" - exit_status=$? - if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then - exit $exit_status - fi - case $host in - *-darwin*) - $show "Extracting $my_xabs" - # Do not bother doing anything if just a dry run - if test -z "$run"; then - darwin_orig_dir=`pwd` - cd $my_xdir || exit $? - darwin_archive=$my_xabs - darwin_curdir=`pwd` - darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` - darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` - if test -n "$darwin_arches"; then - darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` - darwin_arch= - $show "$darwin_base_archive has multiple architectures $darwin_arches" - for darwin_arch in $darwin_arches ; do - mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}" - lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" - cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" - func_extract_an_archive "`pwd`" "${darwin_base_archive}" - cd "$darwin_curdir" - $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" - done # $darwin_arches - ## Okay now we have a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` - darwin_file= - darwin_files= - for darwin_file in $darwin_filelist; do - darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` - lipo -create -output "$darwin_file" $darwin_files - done # $darwin_filelist - ${rm}r unfat-$$ - cd "$darwin_orig_dir" - else - cd "$darwin_orig_dir" - func_extract_an_archive "$my_xdir" "$my_xabs" - fi # $darwin_arches - fi # $run - ;; - *) - func_extract_an_archive "$my_xdir" "$my_xabs" - ;; - esac - my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` - done - func_extract_archives_result="$my_oldobjs" -} -# End of Shell function definitions -##################################### - -# Darwin sucks -eval std_shrext=\"$shrext_cmds\" - -disable_libs=no - -# Parse our command line options once, thoroughly. -while test "$#" -gt 0 -do - arg="$1" - shift - - case $arg in - -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; - *) optarg= ;; - esac - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - execute_dlfiles) - execute_dlfiles="$execute_dlfiles $arg" - ;; - tag) - tagname="$arg" - preserve_args="${preserve_args}=$arg" - - # Check whether tagname contains only valid characters - case $tagname in - *[!-_A-Za-z0-9,/]*) - $echo "$progname: invalid tag name: $tagname" 1>&2 - exit $EXIT_FAILURE - ;; - esac - - case $tagname in - CC) - # Don't test for the "default" C tag, as we know, it's there, but - # not specially marked. - ;; - *) - if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then - taglist="$taglist $tagname" - # Evaluate the configuration. - eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" - else - $echo "$progname: ignoring unknown tag $tagname" 1>&2 - fi - ;; - esac - ;; - *) - eval "$prev=\$arg" - ;; - esac - - prev= - prevopt= - continue - fi - - # Have we seen a non-optional argument yet? - case $arg in - --help) - show_help=yes - ;; - - --version) - $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" - $echo - $echo "Copyright (C) 2005 Free Software Foundation, Inc." - $echo "This is free software; see the source for copying conditions. There is NO" - $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - exit $? - ;; - - --config) - ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath - # Now print the configurations for the tags. - for tagname in $taglist; do - ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" - done - exit $? - ;; - - --debug) - $echo "$progname: enabling shell trace mode" - set -x - preserve_args="$preserve_args $arg" - ;; - - --dry-run | -n) - run=: - ;; - - --features) - $echo "host: $host" - if test "$build_libtool_libs" = yes; then - $echo "enable shared libraries" - else - $echo "disable shared libraries" - fi - if test "$build_old_libs" = yes; then - $echo "enable static libraries" - else - $echo "disable static libraries" - fi - exit $? - ;; - - --finish) mode="finish" ;; - - --mode) prevopt="--mode" prev=mode ;; - --mode=*) mode="$optarg" ;; - - --preserve-dup-deps) duplicate_deps="yes" ;; - - --quiet | --silent) - show=: - preserve_args="$preserve_args $arg" - ;; - - --tag) - prevopt="--tag" - prev=tag - preserve_args="$preserve_args --tag" - ;; - --tag=*) - set tag "$optarg" ${1+"$@"} - shift - prev=tag - preserve_args="$preserve_args --tag" - ;; - - -dlopen) - prevopt="-dlopen" - prev=execute_dlfiles - ;; - - -*) - $echo "$modename: unrecognized option \`$arg'" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - ;; - - *) - nonopt="$arg" - break - ;; - esac -done - -if test -n "$prevopt"; then - $echo "$modename: option \`$prevopt' requires an argument" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE -fi - -case $disable_libs in -no) - ;; -shared) - build_libtool_libs=no - build_old_libs=yes - ;; -static) - build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` - ;; -esac - -# If this variable is set in any of the actions, the command in it -# will be execed at the end. This prevents here-documents from being -# left over by shells. -exec_cmd= - -if test -z "$show_help"; then - - # Infer the operation mode. - if test -z "$mode"; then - $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 - $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 - case $nonopt in - *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) - mode=link - for arg - do - case $arg in - -c) - mode=compile - break - ;; - esac - done - ;; - *db | *dbx | *strace | *truss) - mode=execute - ;; - *install*|cp|mv) - mode=install - ;; - *rm) - mode=uninstall - ;; - *) - # If we have no mode, but dlfiles were specified, then do execute mode. - test -n "$execute_dlfiles" && mode=execute - - # Just use the default operation mode. - if test -z "$mode"; then - if test -n "$nonopt"; then - $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 - else - $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 - fi - fi - ;; - esac - fi - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$execute_dlfiles" && test "$mode" != execute; then - $echo "$modename: unrecognized option \`-dlopen'" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$modename --help --mode=$mode' for more information." - - # These modes are in order of execution frequency so that they run quickly. - case $mode in - # libtool compile mode - compile) - modename="$modename: compile" - # Get the compilation command and the source file. - base_compile= - srcfile="$nonopt" # always keep a non-empty value in "srcfile" - suppress_opt=yes - suppress_output= - arg_mode=normal - libobj= - later= - - for arg - do - case $arg_mode in - arg ) - # do not "continue". Instead, add this to base_compile - lastarg="$arg" - arg_mode=normal - ;; - - target ) - libobj="$arg" - arg_mode=normal - continue - ;; - - normal ) - # Accept any command-line options. - case $arg in - -o) - if test -n "$libobj" ; then - $echo "$modename: you cannot specify \`-o' more than once" 1>&2 - exit $EXIT_FAILURE - fi - arg_mode=target - continue - ;; - - -static | -prefer-pic | -prefer-non-pic) - later="$later $arg" - continue - ;; - - -no-suppress) - suppress_opt=no - continue - ;; - - -Xcompiler) - arg_mode=arg # the next one goes into the "base_compile" arg list - continue # The current "srcfile" will either be retained or - ;; # replaced later. I would guess that would be a bug. - - -Wc,*) - args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` - lastarg= - save_ifs="$IFS"; IFS=',' - for arg in $args; do - IFS="$save_ifs" - - # Double-quote args containing other shell metacharacters. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - lastarg="$lastarg $arg" - done - IFS="$save_ifs" - lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` - - # Add the arguments to base_compile. - base_compile="$base_compile $lastarg" - continue - ;; - - * ) - # Accept the current argument as the source file. - # The previous "srcfile" becomes the current argument. - # - lastarg="$srcfile" - srcfile="$arg" - ;; - esac # case $arg - ;; - esac # case $arg_mode - - # Aesthetically quote the previous argument. - lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` - - case $lastarg in - # Double-quote args containing other shell metacharacters. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, and some SunOS ksh mistreat backslash-escaping - # in scan sets (worked around with variable expansion), - # and furthermore cannot handle '|' '&' '(' ')' in scan sets - # at all, so we specify them separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - lastarg="\"$lastarg\"" - ;; - esac - - base_compile="$base_compile $lastarg" - done # for arg - - case $arg_mode in - arg) - $echo "$modename: you must specify an argument for -Xcompile" - exit $EXIT_FAILURE - ;; - target) - $echo "$modename: you must specify a target with \`-o'" 1>&2 - exit $EXIT_FAILURE - ;; - *) - # Get the name of the library object. - [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` - ;; - esac - - # Recognize several different file suffixes. - # If the user specifies -o file.o, it is replaced with file.lo - xform='[cCFSifmso]' - case $libobj in - *.ada) xform=ada ;; - *.adb) xform=adb ;; - *.ads) xform=ads ;; - *.asm) xform=asm ;; - *.c++) xform=c++ ;; - *.cc) xform=cc ;; - *.ii) xform=ii ;; - *.class) xform=class ;; - *.cpp) xform=cpp ;; - *.cxx) xform=cxx ;; - *.f90) xform=f90 ;; - *.for) xform=for ;; - *.java) xform=java ;; - esac - - libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` - - case $libobj in - *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; - *) - $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 - exit $EXIT_FAILURE - ;; - esac - - func_infer_tag $base_compile - - for arg in $later; do - case $arg in - -static) - build_old_libs=yes - continue - ;; - - -prefer-pic) - pic_mode=yes - continue - ;; - - -prefer-non-pic) - pic_mode=no - continue - ;; - esac - done - - qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` - case $qlibobj in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - qlibobj="\"$qlibobj\"" ;; - esac - test "X$libobj" != "X$qlibobj" \ - && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ - && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." - objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` - xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$obj"; then - xdir= - else - xdir=$xdir/ - fi - lobj=${xdir}$objdir/$objname - - if test -z "$base_compile"; then - $echo "$modename: you must specify a compilation command" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Delete any leftover library objects. - if test "$build_old_libs" = yes; then - removelist="$obj $lobj $libobj ${libobj}T" - else - removelist="$lobj $libobj ${libobj}T" - fi - - $run $rm $removelist - trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 - - # On Cygwin there's no "real" PIC flag so we must build both object types - case $host_os in - cygwin* | mingw* | pw32* | os2*) - pic_mode=default - ;; - esac - if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi - - # Calculate the filename of the output object if compiler does - # not support -o with -c - if test "$compiler_c_o" = no; then - output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} - lockfile="$output_obj.lock" - removelist="$removelist $output_obj $lockfile" - trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 - else - output_obj= - need_locks=no - lockfile= - fi - - # Lock this critical section if it is needed - # We use this script file to make the link, it avoids creating a new file - if test "$need_locks" = yes; then - until $run ln "$srcfile" "$lockfile" 2>/dev/null; do - $show "Waiting for $lockfile to be removed" - sleep 2 - done - elif test "$need_locks" = warn; then - if test -f "$lockfile"; then - $echo "\ -*** ERROR, $lockfile exists and contains: -`cat $lockfile 2>/dev/null` - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $run $rm $removelist - exit $EXIT_FAILURE - fi - $echo "$srcfile" > "$lockfile" - fi - - if test -n "$fix_srcfile_path"; then - eval srcfile=\"$fix_srcfile_path\" - fi - qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` - case $qsrcfile in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - qsrcfile="\"$qsrcfile\"" ;; - esac - - $run $rm "$libobj" "${libobj}T" - - # Create a libtool object file (analogous to a ".la" file), - # but don't create it if we're doing a dry run. - test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then - $echo "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $run $rm $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed, then go on to compile the next one - if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then - $show "$mv $output_obj $lobj" - if $run $mv $output_obj $lobj; then : - else - error=$? - $run $rm $removelist - exit $error - fi - fi - - # Append the name of the PIC object to the libtool object file. - test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then - $echo "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $run $rm $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed - if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then - $show "$mv $output_obj $obj" - if $run $mv $output_obj $obj; then : - else - error=$? - $run $rm $removelist - exit $error - fi - fi - - # Append the name of the non-PIC object the libtool object file. - # Only append if the libtool object file exists. - test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 - fi - if test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - else - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=built - fi - build_libtool_libs=no - build_old_libs=yes - break - ;; - esac - done - - # See if our shared archives depend on static archives. - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. - while test "$#" -gt 0; do - arg="$1" - shift - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test - ;; - *) qarg=$arg ;; - esac - libtool_args="$libtool_args $qarg" - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - output) - compile_command="$compile_command @OUTPUT@" - finalize_command="$finalize_command @OUTPUT@" - ;; - esac - - case $prev in - dlfiles|dlprefiles) - if test "$preload" = no; then - # Add the symbol object into the linking commands. - compile_command="$compile_command @SYMFILE@" - finalize_command="$finalize_command @SYMFILE@" - preload=yes - fi - case $arg in - *.la | *.lo) ;; # We handle these cases below. - force) - if test "$dlself" = no; then - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - self) - if test "$prev" = dlprefiles; then - dlself=yes - elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then - dlself=yes - else - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - *) - if test "$prev" = dlfiles; then - dlfiles="$dlfiles $arg" - else - dlprefiles="$dlprefiles $arg" - fi - prev= - continue - ;; - esac - ;; - expsyms) - export_symbols="$arg" - if test ! -f "$arg"; then - $echo "$modename: symbol file \`$arg' does not exist" - exit $EXIT_FAILURE - fi - prev= - continue - ;; - expsyms_regex) - export_symbols_regex="$arg" - prev= - continue - ;; - inst_prefix) - inst_prefix_dir="$arg" - prev= - continue - ;; - precious_regex) - precious_files_regex="$arg" - prev= - continue - ;; - release) - release="-$arg" - prev= - continue - ;; - objectlist) - if test -f "$arg"; then - save_arg=$arg - moreargs= - for fil in `cat $save_arg` - do -# moreargs="$moreargs $fil" - arg=$fil - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - pic_object= - non_pic_object= - - # Read the .lo file - # If there is no directory component, then add one. - case $arg in - */* | *\\*) . $arg ;; - *) . ./$arg ;; - esac - - if test -z "$pic_object" || \ - test -z "$non_pic_object" || - test "$pic_object" = none && \ - test "$non_pic_object" = none; then - $echo "$modename: cannot find name of object for \`$arg'" 1>&2 - exit $EXIT_FAILURE - fi - - # Extract subdirectory from the argument. - xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$arg"; then - xdir= - else - xdir="$xdir/" - fi - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles $pic_object" - prev= - fi - - # A PIC object. - libobjs="$libobjs $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - non_pic_objects="$non_pic_objects $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - non_pic_objects="$non_pic_objects $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if test -z "$run"; then - $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 - exit $EXIT_FAILURE - else - # Dry-run case. - - # Extract subdirectory from the argument. - xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$arg"; then - xdir= - else - xdir="$xdir/" - fi - - pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` - non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` - libobjs="$libobjs $pic_object" - non_pic_objects="$non_pic_objects $non_pic_object" - fi - fi - done - else - $echo "$modename: link input file \`$save_arg' does not exist" - exit $EXIT_FAILURE - fi - arg=$save_arg - prev= - continue - ;; - rpath | xrpath) - # We need an absolute path. - case $arg in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - $echo "$modename: only absolute run-paths are allowed" 1>&2 - exit $EXIT_FAILURE - ;; - esac - if test "$prev" = rpath; then - case "$rpath " in - *" $arg "*) ;; - *) rpath="$rpath $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) xrpath="$xrpath $arg" ;; - esac - fi - prev= - continue - ;; - xcompiler) - compiler_flags="$compiler_flags $qarg" - prev= - compile_command="$compile_command $qarg" - finalize_command="$finalize_command $qarg" - continue - ;; - xlinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $wl$qarg" - prev= - compile_command="$compile_command $wl$qarg" - finalize_command="$finalize_command $wl$qarg" - continue - ;; - xcclinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $qarg" - prev= - compile_command="$compile_command $qarg" - finalize_command="$finalize_command $qarg" - continue - ;; - shrext) - shrext_cmds="$arg" - prev= - continue - ;; - darwin_framework|darwin_framework_skip) - test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - prev= - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi # test -n "$prev" - - prevarg="$arg" - - case $arg in - -all-static) - if test -n "$link_static_flag"; then - compile_command="$compile_command $link_static_flag" - finalize_command="$finalize_command $link_static_flag" - fi - continue - ;; - - -allow-undefined) - # FIXME: remove this flag sometime in the future. - $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 - continue - ;; - - -avoid-version) - avoid_version=yes - continue - ;; - - -dlopen) - prev=dlfiles - continue - ;; - - -dlpreopen) - prev=dlprefiles - continue - ;; - - -export-dynamic) - export_dynamic=yes - continue - ;; - - -export-symbols | -export-symbols-regex) - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - $echo "$modename: more than one -exported-symbols argument is not allowed" - exit $EXIT_FAILURE - fi - if test "X$arg" = "X-export-symbols"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; - - -framework|-arch|-isysroot) - case " $CC " in - *" ${arg} ${1} "* | *" ${arg} ${1} "*) - prev=darwin_framework_skip ;; - *) compiler_flags="$compiler_flags $arg" - prev=darwin_framework ;; - esac - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - continue - ;; - - -inst-prefix-dir) - prev=inst_prefix - continue - ;; - - # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in - no/*-*-irix* | /*-*-irix*) - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - ;; - esac - continue - ;; - - -L*) - dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 - absdir="$dir" - notinst_path="$notinst_path $dir" - fi - dir="$absdir" - ;; - esac - case "$deplibs " in - *" -L$dir "*) ;; - *) - deplibs="$deplibs -L$dir" - lib_search_path="$lib_search_path $dir" - ;; - esac - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) - testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$dir:"*) ;; - *) dllsearchpath="$dllsearchpath:$dir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - *) dllsearchpath="$dllsearchpath:$testbindir";; - esac - ;; - esac - continue - ;; - - -l*) - if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*) - # These systems don't actually have a C or math library (as such) - continue - ;; - *-*-os2*) - # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C and math libraries are in the System framework - deplibs="$deplibs -framework System" - continue - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - test "X$arg" = "X-lc" && continue - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - test "X$arg" = "X-lc" && continue - ;; - esac - elif test "X$arg" = "X-lc_r"; then - case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; - esac - fi - deplibs="$deplibs $arg" - continue - ;; - - # Tru64 UNIX uses -model [arg] to determine the layout of C++ - # classes, name mangling, and exception handling. - -model) - compile_command="$compile_command $arg" - compiler_flags="$compiler_flags $arg" - finalize_command="$finalize_command $arg" - prev=xcompiler - continue - ;; - - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) - compiler_flags="$compiler_flags $arg" - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - continue - ;; - - -module) - module=yes - continue - ;; - - # -64, -mips[0-9] enable 64-bit mode on the SGI compiler - # -r[0-9][0-9]* specifies the processor on the SGI compiler - # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler - # +DA*, +DD* enable 64-bit mode on the HP compiler - # -q* pass through compiler args for the IBM compiler - # -m* pass through architecture-specific compiler args for GCC - # -m*, -t[45]*, -txscale* pass through architecture-specific - # compiler args for GCC - # -pg pass through profiling flag for GCC - # @file GCC response files - -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \ - -t[45]*|-txscale*|@*) - - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - compiler_flags="$compiler_flags $arg" - continue - ;; - - -shrext) - prev=shrext - continue - ;; - - -no-fast-install) - fast_install=no - continue - ;; - - -no-install) - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) - # The PATH hackery in wrapper scripts is required on Windows - # in order for the loader to find any dlls it needs. - $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 - $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 - fast_install=no - ;; - *) no_install=yes ;; - esac - continue - ;; - - -no-undefined) - allow_undefined=no - continue - ;; - - -objectlist) - prev=objectlist - continue - ;; - - -o) prev=output ;; - - -precious-files-regex) - prev=precious_regex - continue - ;; - - -release) - prev=release - continue - ;; - - -rpath) - prev=rpath - continue - ;; - - -R) - prev=xrpath - continue - ;; - - -R*) - dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - $echo "$modename: only absolute run-paths are allowed" 1>&2 - exit $EXIT_FAILURE - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - continue - ;; - - -static) - # The effects of -static are defined in a previous loop. - # We used to do the same as -all-static on platforms that - # didn't have a PIC flag, but the assumption that the effects - # would be equivalent was wrong. It would break on at least - # Digital Unix and AIX. - continue - ;; - - -thread-safe) - thread_safe=yes - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - -version-number) - prev=vinfo - vinfo_number=yes - continue - ;; - - -Wc,*) - args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - case $flag in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - flag="\"$flag\"" - ;; - esac - arg="$arg $wl$flag" - compiler_flags="$compiler_flags $flag" - done - IFS="$save_ifs" - arg=`$echo "X$arg" | $Xsed -e "s/^ //"` - ;; - - -Wl,*) - args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - case $flag in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - flag="\"$flag\"" - ;; - esac - arg="$arg $wl$flag" - compiler_flags="$compiler_flags $wl$flag" - linker_flags="$linker_flags $flag" - done - IFS="$save_ifs" - arg=`$echo "X$arg" | $Xsed -e "s/^ //"` - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Xlinker) - prev=xlinker - continue - ;; - - -XCClinker) - prev=xcclinker - continue - ;; - - # Some other compiler flag. - -* | +*) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - ;; - - *.$objext) - # A standard object. - objs="$objs $arg" - ;; - - *.lo) - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - pic_object= - non_pic_object= - - # Read the .lo file - # If there is no directory component, then add one. - case $arg in - */* | *\\*) . $arg ;; - *) . ./$arg ;; - esac - - if test -z "$pic_object" || \ - test -z "$non_pic_object" || - test "$pic_object" = none && \ - test "$non_pic_object" = none; then - $echo "$modename: cannot find name of object for \`$arg'" 1>&2 - exit $EXIT_FAILURE - fi - - # Extract subdirectory from the argument. - xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$arg"; then - xdir= - else - xdir="$xdir/" - fi - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles $pic_object" - prev= - fi - - # A PIC object. - libobjs="$libobjs $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - non_pic_objects="$non_pic_objects $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - non_pic_objects="$non_pic_objects $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if test -z "$run"; then - $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 - exit $EXIT_FAILURE - else - # Dry-run case. - - # Extract subdirectory from the argument. - xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$arg"; then - xdir= - else - xdir="$xdir/" - fi - - pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` - non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` - libobjs="$libobjs $pic_object" - non_pic_objects="$non_pic_objects $non_pic_object" - fi - fi - ;; - - *.$libext) - # An archive. - deplibs="$deplibs $arg" - old_deplibs="$old_deplibs $arg" - continue - ;; - - *.la) - # A libtool-controlled library. - - if test "$prev" = dlfiles; then - # This library was specified with -dlopen. - dlfiles="$dlfiles $arg" - prev= - elif test "$prev" = dlprefiles; then - # The library was specified with -dlpreopen. - dlprefiles="$dlprefiles $arg" - prev= - else - deplibs="$deplibs $arg" - fi - continue - ;; - - # Some other compiler argument. - *) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - ;; - esac # arg - - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - fi - done # argument parsing loop - - if test -n "$prev"; then - $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi - - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - fi - - oldlibs= - # calculate the name of the file, without its directory - outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` - libobjs_save="$libobjs" - - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` - else - shlib_search_path= - fi - eval sys_lib_search_path=\"$sys_lib_search_path_spec\" - eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" - - output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` - if test "X$output_objdir" = "X$output"; then - output_objdir="$objdir" - else - output_objdir="$output_objdir/$objdir" - fi - # Create the object directory. - if test ! -d "$output_objdir"; then - $show "$mkdir $output_objdir" - $run $mkdir $output_objdir - exit_status=$? - if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then - exit $exit_status - fi - fi - - # Determine the type of output - case $output in - "") - $echo "$modename: you must specify an output file" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - ;; - *.$libext) linkmode=oldlib ;; - *.lo | *.$objext) linkmode=obj ;; - *.la) linkmode=lib ;; - *) linkmode=prog ;; # Anything else should be a program. - esac - - case $host in - *cygwin* | *mingw* | *pw32*) - # don't eliminate duplications in $postdeps and $predeps - duplicate_compiler_generated_deps=yes - ;; - *) - duplicate_compiler_generated_deps=$duplicate_deps - ;; - esac - specialdeplibs= - - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do - if test "X$duplicate_deps" = "Xyes" ; then - case "$libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - libs="$libs $deplib" - done - - if test "$linkmode" = lib; then - libs="$predeps $libs $compiler_lib_search_path $postdeps" - - # Compute libraries that are listed more than once in $predeps - # $postdeps and mark them as special (i.e., whose duplicates are - # not to be eliminated). - pre_post_deps= - if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then - for pre_post_dep in $predeps $postdeps; do - case "$pre_post_deps " in - *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; - esac - pre_post_deps="$pre_post_deps $pre_post_dep" - done - fi - pre_post_deps= - fi - - deplibs= - newdependency_libs= - newlib_search_path= - need_relink=no # whether we're linking any uninstalled libtool libraries - notinst_deplibs= # not-installed libtool libraries - case $linkmode in - lib) - passes="conv link" - for file in $dlfiles $dlprefiles; do - case $file in - *.la) ;; - *) - $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 - exit $EXIT_FAILURE - ;; - esac - done - ;; - prog) - compile_deplibs= - finalize_deplibs= - alldeplibs=no - newdlfiles= - newdlprefiles= - passes="conv scan dlopen dlpreopen link" - ;; - *) passes="conv" - ;; - esac - for pass in $passes; do - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan"; then - libs="$deplibs" - deplibs= - fi - if test "$linkmode" = prog; then - case $pass in - dlopen) libs="$dlfiles" ;; - dlpreopen) libs="$dlprefiles" ;; - link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; - esac - fi - if test "$pass" = dlopen; then - # Collect dlpreopened libraries - save_deplibs="$deplibs" - deplibs= - fi - for deplib in $libs; do - lib= - found=no - case $deplib in - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - compiler_flags="$compiler_flags $deplib" - fi - continue - ;; - -l*) - if test "$linkmode" != lib && test "$linkmode" != prog; then - $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 - continue - fi - name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` - for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do - for search_ext in .la $std_shrext .so .a; do - # Search the libtool library - lib="$searchdir/lib${name}${search_ext}" - if test -f "$lib"; then - if test "$search_ext" = ".la"; then - found=yes - else - found=no - fi - break 2 - fi - done - done - if test "$found" != yes; then - # deplib doesn't seem to be a libtool library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - else # deplib is a libtool library - # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, - # We need to do some special things here, and not later. - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $deplib "*) - if (${SED} -e '2q' $lib | - grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - library_names= - old_library= - case $lib in - */* | *\\*) . $lib ;; - *) . ./$lib ;; - esac - for l in $old_library $library_names; do - ll="$l" - done - if test "X$ll" = "X$old_library" ; then # only static version available - found=no - ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` - test "X$ladir" = "X$lib" && ladir="." - lib=$ladir/$old_library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - fi - ;; - *) ;; - esac - fi - fi - ;; # -l - -L*) - case $linkmode in - lib) - deplibs="$deplib $deplibs" - test "$pass" = conv && continue - newdependency_libs="$deplib $newdependency_libs" - newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` - ;; - prog) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - if test "$pass" = scan; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` - ;; - *) - $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 - ;; - esac # linkmode - continue - ;; # -L - -R*) - if test "$pass" = link; then - dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - fi - deplibs="$deplib $deplibs" - continue - ;; - *.la) lib="$deplib" ;; - *.$libext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - case $linkmode in - lib) - valid_a_lib=no - case $deplibs_check_method in - match_pattern*) - set dummy $deplibs_check_method - match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` - if eval $echo \"$deplib\" 2>/dev/null \ - | $SED 10q \ - | $EGREP "$match_pattern_regex" > /dev/null; then - valid_a_lib=yes - fi - ;; - pass_all) - valid_a_lib=yes - ;; - esac - if test "$valid_a_lib" != yes; then - $echo - $echo "*** Warning: Trying to link with static lib archive $deplib." - $echo "*** I have the capability to make that library automatically link in when" - $echo "*** you link to this library. But I can only do this if you have a" - $echo "*** shared version of the library, which you do not appear to have" - $echo "*** because the file extensions .$libext of this argument makes me believe" - $echo "*** that it is just a static archive that I should not used here." - else - $echo - $echo "*** Warning: Linking the shared library $output against the" - $echo "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" - fi - continue - ;; - prog) - if test "$pass" != link; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - continue - ;; - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - elif test "$linkmode" = prog; then - if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - newdlprefiles="$newdlprefiles $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - newdlfiles="$newdlfiles $deplib" - fi - fi - continue - ;; - %DEPLIBS%) - alldeplibs=yes - continue - ;; - esac # case $deplib - if test "$found" = yes || test -f "$lib"; then : - else - $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 - exit $EXIT_FAILURE - fi - - # Check to see that this really is a libtool archive. - if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit $EXIT_FAILURE - fi - - ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` - test "X$ladir" = "X$lib" && ladir="." - - dlname= - dlopen= - dlpreopen= - libdir= - library_names= - old_library= - # If the library was installed with an old release of libtool, - # it will not redefine variables installed, or shouldnotlink - installed=yes - shouldnotlink=no - avoidtemprpath= - - - # Read the .la file - case $lib in - */* | *\\*) . $lib ;; - *) . ./$lib ;; - esac - - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || - { test "$linkmode" != prog && test "$linkmode" != lib; }; then - test -n "$dlopen" && dlfiles="$dlfiles $dlopen" - test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" - fi - - if test "$pass" = conv; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then - if test -z "$old_library"; then - $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 - exit $EXIT_FAILURE - fi - # It is a libtool convenience library, so add in its objects. - convenience="$convenience $ladir/$objdir/$old_library" - old_convenience="$old_convenience $ladir/$objdir/$old_library" - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if test "X$duplicate_deps" = "Xyes" ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done - elif test "$linkmode" != prog && test "$linkmode" != lib; then - $echo "$modename: \`$lib' is not a convenience library" 1>&2 - exit $EXIT_FAILURE - fi - continue - fi # $pass = conv - - - # Get the name of the library we link against. - linklib= - for l in $old_library $library_names; do - linklib="$l" - done - if test -z "$linklib"; then - $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 - exit $EXIT_FAILURE - fi - - # This library was specified with -dlopen. - if test "$pass" = dlopen; then - if test -z "$libdir"; then - $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 - exit $EXIT_FAILURE - fi - if test -z "$dlname" || - test "$dlopen_support" != yes || - test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking - # statically, we need to preload. We also need to preload any - # dependent libraries so libltdl's deplib preloader doesn't - # bomb out in the load deplibs phase. - dlprefiles="$dlprefiles $lib $dependency_libs" - else - newdlfiles="$newdlfiles $lib" - fi - continue - fi # $pass = dlopen - - # We need an absolute path. - case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; - *) - abs_ladir=`cd "$ladir" && pwd` - if test -z "$abs_ladir"; then - $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 - $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 - abs_ladir="$ladir" - fi - ;; - esac - laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` - - # Find the relevant object directory and library name. - if test "X$installed" = Xyes; then - if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - $echo "$modename: warning: library \`$lib' was moved." 1>&2 - dir="$ladir" - absdir="$abs_ladir" - libdir="$abs_ladir" - else - dir="$libdir" - absdir="$libdir" - fi - test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes - else - if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir="$ladir" - absdir="$abs_ladir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" - else - dir="$ladir/$objdir" - absdir="$abs_ladir/$objdir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" - fi - fi # $installed = yes - name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` - - # This library was specified with -dlpreopen. - if test "$pass" = dlpreopen; then - if test -z "$libdir"; then - $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 - exit $EXIT_FAILURE - fi - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - newdlprefiles="$newdlprefiles $dir/$old_library" - # Otherwise, use the dlname, so that lt_dlopen finds it. - elif test -n "$dlname"; then - newdlprefiles="$newdlprefiles $dir/$dlname" - else - newdlprefiles="$newdlprefiles $dir/$linklib" - fi - fi # $pass = dlpreopen - - if test -z "$libdir"; then - # Link the convenience library - if test "$linkmode" = lib; then - deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else - deplibs="$lib $deplibs" # used for prog,scan pass - fi - continue - fi - - - if test "$linkmode" = prog && test "$pass" != link; then - newlib_search_path="$newlib_search_path $ladir" - deplibs="$lib $deplibs" - - linkalldeplibs=no - if test "$link_all_deplibs" != no || test -z "$library_names" || - test "$build_libtool_libs" = no; then - linkalldeplibs=yes - fi - - tmp_libs= - for deplib in $dependency_libs; do - case $deplib in - -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test - esac - # Need to link against all dependency_libs? - if test "$linkalldeplibs" = yes; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - if test "X$duplicate_deps" = "Xyes" ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done # for deplib - continue - fi # $linkmode = prog... - - if test "$linkmode,$pass" = "prog,link"; then - if test -n "$library_names" && - { test "$prefer_static_libs" = no || test -z "$old_library"; }; then - # We need to hardcode the library path - if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then - # Make sure the rpath contains only unique directories. - case "$temp_rpath " in - *" $dir "*) ;; - *" $absdir "*) ;; - *) temp_rpath="$temp_rpath $absdir" ;; - esac - fi - - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi # $linkmode,$pass = prog,link... - - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - fi - - link_static=no # Whether the deplib will be linked statically - use_static_libs=$prefer_static_libs - if test "$use_static_libs" = built && test "$installed" = yes ; then - use_static_libs=no - fi - if test -n "$library_names" && - { test "$use_static_libs" = no || test -z "$old_library"; }; then - if test "$installed" = no; then - notinst_deplibs="$notinst_deplibs $lib" - need_relink=yes - fi - # This is a shared library - - # Warn about portability, can't link against -module's on - # some systems (darwin) - if test "$shouldnotlink" = yes && test "$pass" = link ; then - $echo - if test "$linkmode" = prog; then - $echo "*** Warning: Linking the executable $output against the loadable module" - else - $echo "*** Warning: Linking the shared library $output against the loadable module" - fi - $echo "*** $linklib is not portable!" - fi - if test "$linkmode" = lib && - test "$hardcode_into_libs" = yes; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname - set dummy $library_names - realname="$2" - shift; shift - libname=`eval \\$echo \"$libname_spec\"` - # use dlname if we got it. it's perfectly good, no? - if test -n "$dlname"; then - soname="$dlname" - elif test -n "$soname_spec"; then - # bleh windows - case $host in - *cygwin* | mingw*) - major=`expr $current - $age` - versuffix="-$major" - ;; - esac - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - - # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" - soname=`$echo $soroot | ${SED} -e 's/^.*\///'` - newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : - else - $show "extracting exported symbol list from \`$soname'" - save_ifs="$IFS"; IFS='~' - cmds=$extract_expsyms_cmds - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - fi - - # Create $newlib - if test -f "$output_objdir/$newlib"; then :; else - $show "generating import library for \`$soname'" - save_ifs="$IFS"; IFS='~' - cmds=$old_archive_from_expsyms_cmds - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - fi - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib - fi # test -n "$old_archive_from_expsyms_cmds" - - if test "$linkmode" = prog || test "$mode" != relink; then - add_shlibpath= - add_dir= - add= - lib_linked=yes - case $hardcode_action in - immediate | unsupported) - if test "$hardcode_direct" = no; then - add="$dir/$linklib" - case $host in - *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; - *-*-sysv4*uw2*) add_dir="-L$dir" ;; - *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir="-L$dir" ;; - *-*-darwin* ) - # if the lib is a module then we can not link against - # it, someone is ignoring the new warnings I added - if /usr/bin/file -L $add 2> /dev/null | - $EGREP ": [^:]* bundle" >/dev/null ; then - $echo "** Warning, lib $linklib is a module, not a shared library" - if test -z "$old_library" ; then - $echo - $echo "** And there doesn't seem to be a static archive available" - $echo "** The link will probably fail, sorry" - else - add="$dir/$old_library" - fi - fi - esac - elif test "$hardcode_minus_L" = no; then - case $host in - *-*-sunos*) add_shlibpath="$dir" ;; - esac - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = no; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - relink) - if test "$hardcode_direct" = yes; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$dir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - add_dir="$add_dir -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - *) lib_linked=no ;; - esac - - if test "$lib_linked" != yes; then - $echo "$modename: configuration error: unsupported hardcode properties" - exit $EXIT_FAILURE - fi - - if test -n "$add_shlibpath"; then - case :$compile_shlibpath: in - *":$add_shlibpath:"*) ;; - *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; - esac - fi - if test "$linkmode" = prog; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - if test "$hardcode_direct" != yes && \ - test "$hardcode_minus_L" != yes && \ - test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - fi - fi - fi - - if test "$linkmode" = prog || test "$mode" = relink; then - add_shlibpath= - add_dir= - add= - # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes; then - add="$libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$libdir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - add="-l$name" - elif test "$hardcode_automatic" = yes; then - if test -n "$inst_prefix_dir" && - test -f "$inst_prefix_dir$libdir/$linklib" ; then - add="$inst_prefix_dir$libdir/$linklib" - else - add="$libdir/$linklib" - fi - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - add_dir="$add_dir -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - fi - - if test "$linkmode" = prog; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - fi - fi - elif test "$linkmode" = prog; then - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. - if test "$hardcode_direct" != unsupported; then - test -n "$old_library" && linklib="$old_library" - compile_deplibs="$dir/$linklib $compile_deplibs" - finalize_deplibs="$dir/$linklib $finalize_deplibs" - else - compile_deplibs="-l$name -L$dir $compile_deplibs" - finalize_deplibs="-l$name -L$dir $finalize_deplibs" - fi - elif test "$build_libtool_libs" = yes; then - # Not a shared library - if test "$deplibs_check_method" != pass_all; then - # We're trying link a shared library against a static one - # but the system doesn't support it. - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/main.cmake b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/main.cmake deleted file mode 100644 index 71dc3ce..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/main.cmake +++ /dev/null @@ -1,44 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.6 FATAL_ERROR) - -SET( SOURCES back.c io.c main.c ) -MESSAGE( ${SOURCES} ) # three arguments, prints "back.cio.cmain.c" -MESSAGE( "${SOURCES}" ) # one argument, prints "back.c;io.c;main.c" -MESSAGE( "" ) # one argument, prints "" an empty line -MESSAGE( "${EMPTY_STRING}" ) # one argument, prints "" an empty line -MESSAGE( ${EMPTY_STRING} ) # zero arguments, causes CMake Error - # "MESSAGE called with incorrect number of arguments" -MESSAGE( \\\"\ \(\)\#\$\^ ) # this message contains literal characters - -MESSAGE( "This is practice." ) # prints "This is practice." -MESSAGE( "This;is;practice." ) # prints "This;is;practice." -MESSAGE( "Hi. ) MESSAGE( x )" ) # prints "Hi. ) MESSAGE( x )" - -MESSAGE( "Welc"ome ) # rule 1 -MESSAGE( Welc"ome" ) # rule 3 -MESSAGE( Welc"ome)" ) # rule 2 -MESSAGE( ""Thanks ) # rule 1 -MESSAGE( Thanks"" ) # rule 3 - -SET( x y A B C ) # stores "y;A;B;C" in x (without quote) -SET( ${x} ) # => SET( y;A;B;C ) => SET( y A B C) -MESSAGE( ${y} ) # prints "ABC" to stdout (without quotes) -SET( y x ) # stores "x" in y (without quotes) -SET( ${y} y = x ) # => SET( x y ) -MESSAGE( "\${x} = '${x}'" ) # prints "${x} = 'y;=;x'" to stdout (without quotes) -SET( y ${x} ) # => SET( y y = x ) => stores "y;=;x" in y (without quotes) -MESSAGE( ${y} ) # prints "y=x" to stdout (without quotes) - -SET( x a b c ) # stores "a;b;c" in x (without quotes) -SET( y "a b c" ) # stores "a b c" in y (without quotes) -MESSAGE( a b c ) # prints "abc" to stdout (without quotes) -MESSAGE( ${x} ) # prints "abc" to stdout (without quotes) -MESSAGE("${x}") # prints "a;b;c" to stdout (without quotes) -MESSAGE( ${y} ) # prints "a b c" to stdout (without quotes) -MESSAGE("${y}") # prints "a b c" to stdout (without quotes) - -# This is a comment. -COMMAND( arguments go here ) -ANOTHER_COMMAND() # this command has no arguments -YET_ANOTHER_COMMAND( these - arguments are spread # another comment - over several lines ) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/markdown.lsp b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/markdown.lsp deleted file mode 100755 index 8159082..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/markdown.lsp +++ /dev/null @@ -1,679 +0,0 @@ -#!/usr/bin/env newlisp - -;; @module markdown -;; @author cormullion -;; @description a port of John Gruber's Markdown to newLISP -;; @location http://unbalanced-parentheses.nfshost.com/ -;; @version of date 2011-10-02 22:36:02 -;; version history: at the end -;; a port of John Gruber's Markdown.pl (http://daringfireball.net/markdown) script to newLISP... -;; see his original Perl script for explanations of the fearsome regexen and -;; byzantine logic, etc... -;; TODO: -;; the following Markdown tests fail: -;; Inline HTML (Advanced) ... FAILED -;; Links, reference style ... FAILED -- nested brackets -;; Links, shortcut references ... FAILED -;; Markdown Documentation - Syntax ... FAILED -;; Ordered and unordered lists ... FAILED -- a nested ordered list error -;; parens in url : ![this is a stupid URL](http://example.com/(parens).jpg) see (Images.text) -;; Add: email address scrambling - -(context 'Hash) -(define HashTable:HashTable) - -(define (build-escape-table) - (set '*escape-chars* [text]\`*_{}[]()>#+-.![/text]) - (dolist (c (explode *escape-chars*)) - (HashTable c (hash c)))) - -(define (init-hash txt) - ; finds a hash identifier that doesn't occur anywhere in the text - (set 'counter 0) - (set 'hash-prefix "HASH") - (set 'hash-id (string hash-prefix counter)) - (do-while (find hash-id txt) - (set 'hash-id (string hash-prefix (inc counter)))) - (Hash:build-escape-table)) - -(define (hash s) - (HashTable s (string hash-id (inc counter)))) - -(context 'markdown) - -(define (markdown:markdown txt) - (initialize) - (Hash:init-hash txt) - (unescape-special-chars - (block-transforms - (strip-link-definitions - (protect - (cleanup txt)))))) - -(define (initialize) - (set '*escape-pairs* '( - ({\\\\} {\}) - ({\\`} {`}) - ({\\\*} {*}) - ({\\_} {_}) - ([text]\\\{[/text] [text]{[/text]) - ([text]\\\}[/text] [text]}[/text]) - ({\\\[} {[}) - ({\\\]} {]}) - ({\\\(} {(}) - ({\\\)} {)}) - ({\\>} {>}) - ({\\\#} {#}) - ({\\\+} {+}) - ({\\\-} {-}) - ({\\\.} {.}) - ({\\!} {!}))) - (set '*hashed-html-blocks* '()) - (set '*list-level* 0)) - -(define (block-transforms txt) - (form-paragraphs - (protect - (block-quotes - (code-blocks - (lists - (horizontal-rules - (headers txt)))))))) - -(define (span-transforms txt) - (line-breaks - (emphasis - (amps-and-angles - (auto-links - (anchors - (images - (escape-special-chars - (escape-special-chars (code-spans txt) 'inside-attributes))))))))) - -(define (tokenize-html xhtml) -; return list of tag/text portions of xhtml text - (letn ( - (tag-match [text]((?s:)| -(?s:<\?.*?\?>)| -(?:<[a-z/!$](?:[^<>]| -(?:<[a-z/!$](?:[^<>]| -(?:<[a-z/!$](?:[^<>]| -(?:<[a-z/!$](?:[^<>]| -(?:<[a-z/!$](?:[^<>]| -(?:<[a-z/!$](?:[^<>])*>))*>))*>))*>))*>))*>))[/text]) ; yeah, well... - (str xhtml) - (len (length str)) - (pos 0) - (tokens '())) - (while (set 'tag-start (find tag-match str 8)) - (if (< pos tag-start) - (push (list 'text (slice str pos (- tag-start pos))) tokens -1)) - (push (list 'tag $0) tokens -1) - (set 'str (slice str (+ tag-start (length $0)))) - (set 'pos 0)) - ; leftovers - (if (< pos len) - (push (list 'text (slice str pos (- len pos))) tokens -1)) - tokens)) - -(define (escape-special-chars txt (within-tag-attributes nil)) - (let ((temp (tokenize-html txt)) - (new-text {})) - (dolist (pair temp) - (if (= (first pair) 'tag) - ; 'tag - (begin - (set 'new-text (replace {\\} (last pair) (HashTable {\\}) 0)) - (replace [text](?<=.)(?=.)[/text] new-text (HashTable {`}) 0) - (replace {\*} new-text (HashTable {*}) 0) - (replace {_} new-text (HashTable {_} ) 0)) - ; 'text - (if within-tag-attributes - (set 'new-text (last pair)) - (set 'new-text (encode-backslash-escapes (last pair))))) - (setf (temp $idx) (list (first pair) new-text))) - ; return as text - (join (map last temp)))) - -(define (encode-backslash-escapes t) - (dolist (pair *escape-pairs*) - (replace (first pair) t (HashTable (last pair)) 14))) - -(define (encode-code s) - ; encode/escape certain characters inside Markdown code runs - (replace {&} s "&" 0) - (replace {<} s "<" 0) - (replace {>} s ">" 0) - (replace {\*} s (HashTable {\\}) 0) - (replace {_} s (HashTable {_}) 0) - (replace "{" s (HashTable "{") 0) - (replace {\[} s (HashTable {[}) 0) - (replace {\]} s (HashTable {]}) 0) - (replace {\\} s (HashTable "\\") 0)) - -(define (code-spans s) - (replace - {(?} (encode-code (trim $2)) {
    }) - 2)) - -(define (encode-alt s) - (replace {&} s "&" 0) - (replace {"} s """ 0)) - -(define (images txt) - (let ((alt-text {}) - (url {}) - (title {}) - (ref-regex {(!\[(.*?)\][ ]?(?:\n[ ]*)?\[(.*?)\])}) - (inline-regex {(!\[(.*?)\]\([ \t]*?[ \t]*((['"])(.*?)\5[ \t]*)?\))}) - (whole-match {}) - (result {}) - (id-ref {}) - (url {})) - ; reference links ![alt text][id] - (replace - ref-regex - txt - (begin - (set 'whole-match $1 'alt-text $2 'id-ref $3) - (if alt-text - (replace {"} alt-text {"} 0)) - (if (empty? id-ref) - (set 'id-ref (lower-case alt-text))) - (if (lookup id-ref *link-database*) - (set 'url (first (lookup id-ref *link-database*))) - (set 'url nil)) - (if url - (begin - (replace {\*} url (HashTable {*}) 0) - (replace {_} url (HashTable {_}) 0) - )) - (if (last (lookup id-ref *link-database*)) - ; title - (begin - (set 'title (last (lookup id-ref *link-database*))) - (replace {"} title {"} 0) - (replace {\*} title (HashTable {*}) 0) - (replace {_} title (HashTable {_}) 0)) - ; no title - (set 'title {}) - ) - (if url - (set 'result (string - {} 
-          alt-text {})) - (set 'result whole-match)) - ) - 0 - ) - ; inline image refs: ![alt text](url "optional title") - (replace - inline-regex - txt - (begin - (set 'whole-match $1) - (set 'alt-text $2) - (set 'url $3) - (set 'title $6) - (if alt-text - (replace {"} alt-text {"} 0) - (set 'alt-text {})) - (if title - (begin - (replace {"} title {"} 0) - (replace {\*} title (HashTable {*}) 0) - (replace {_} title (HashTable {_}) 0)) - (set 'title {})) - (replace {\*} url (HashTable {*}) 0) - (replace {_} url (HashTable {_}) 0) - (string - {} 
-           alt-text {}) - ) - 0 - ) - ; empty ones are possible - (set '$1 {}) - (replace {!\[(.*?)\]\([ \t]*\)} - txt - (string {} $1 {}) - 0))) - -(define (make-anchor link-text id-ref ) -; Link defs are in the form: ^[id]: url "optional title" -; stored in link db list as (id (url title)) -; params are text to be linked and the id of the link in the db -; eg bar 1 for [bar][1] - - (let ((title {}) - (id id-ref) - (url nil)) - (if link-text - (begin - (replace {"} link-text {"} 0) - (replace {\n} link-text { } 0) - (replace {[ ]?\n} link-text { } 0))) - (if (null? id ) (set 'id (lower-case link-text))) - (if (not (nil? (lookup id *link-database*))) - (begin - (set 'url (first (lookup id *link-database*))) - (replace {\*} url (HashTable {*}) 0) - (replace {_} url (HashTable {_}) 0) - (if (set 'title (last (lookup id *link-database*))) - (begin - (replace {"} title {"} 0) - (replace {\*} title (HashTable {*}) 0) - (replace {_} title (HashTable {_}) 0)) - (set 'title {}))) - (set 'url nil)) - (if url - (string {} link-text {}) - (string {[} link-text {][} id-ref {]})))) - -(define (anchors txt) - (letn ((nested-brackets {(?>[^\[\]]+)*}) - (ref-link-regex (string {(\[(} nested-brackets {)\][ ]?(?:\n[ ]*)?\[(.*?)\])})) - (inline-regex {(\[(.*?)\]\([ ]*?[ ]*((['"])(.*?)\5[ \t]*)?\))}) - (link-text {}) - (url {}) - (title {})) - ; reference-style links: [link text] [id] - (set '$1 {} '$2 {} '$3 {} '$4 {} '$5 {} '$6 {}) ; i still don't think I should have to do this... - - ; what about this regex instead? - (set 'ref-link-regex {(\[(.*?)\][ ]?\[(.*?)\])}) - - (replace ref-link-regex txt (make-anchor $2 $3) 8) ; $2 is link text, $3 is id - ; inline links: [link text](url "optional title") - (set '$1 {} '$2 {} '$3 {} '$4 {} '$5 {} '$6 {}) - (replace - inline-regex - txt - (begin - (set 'link-text $2) - (set 'url $3) - (set 'title $6) - (if link-text (replace {"} link-text {"} 0)) - (if title - (begin - (replace {"} title {"} 0) - (replace {\*} title (HashTable {*}) 0) - (replace {_} title (HashTable {_}) 0)) - (set 'title {})) - (replace {\*} url (HashTable {*}) 0) - (replace {_} url (HashTable {_}) 0) - (replace {^<(.*)>$} url $1 0) - (string - {} link-text {} - )) - 8 - ) ; replace - ) txt) - -(define (auto-links txt) - (replace - [text]<((https?|ftp):[^'">\s]+)>[/text] - txt - (string {} $1 {}) - 0 - ) - ; to-do: email ... -) - -(define (amps-and-angles txt) -; Smart processing for ampersands and angle brackets - (replace - [text]&(?!\#?[xX]?(?:[0-9a-fA-F]+|\w+);)[/text] - txt - {&} - 10 - ) - (replace - [text]<(?![a-z/?\$!])[/text] - txt - {<} - 10)) - -(define (emphasis txt) - ; italics/bold: strong first - (replace - [text] (\*\*|__) (?=\S) (.+?[*_]*) (?<=\S) \1 [/text] - txt - (string {} $2 {}) - 8 - ) - (replace - [text] (\*|_) (?=\S) (.+?) (?<=\S) \1 [/text] - txt - (string {} $2 {}) - 8 - )) - -(define (line-breaks txt) - ; handles line break markers - (replace " {2,}\n" txt "
    \n" 0)) - -(define (hex-str-to-unicode-char strng) - ; given a five character string, assume it's "U" + 4 hex chars and convert - ; return the character... - (char (int (string "0x" (1 strng)) 0 16))) - -(define (ustring s) - ; any four digit string preceded by U - (replace "U[0-9a-f]{4,}" s (hex-str-to-unicode-char $0) 0)) - -(define (cleanup txt) - ; cleanup the text by normalizing some possible variations - (replace "\r\n|\r" txt "\n" 0) ; standardize line ends - (push "\n\n" txt -1) ; end with two returns - (set 'txt (detab txt)) ; convert tabs to spaces - - ; convert inline Unicode: - (set 'txt (ustring txt)) - (replace "\n[ \t]+\n" txt "\n\n" 0) ; lines with only spaces and tabs - ) - -(define (protect txt) - ; protect or "hash html blocks" - (letn ((nested-block-regex [text](^<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\b(.*\n)*?[ \t]*(?=\n+|\Z))[/text]) - (liberal-tag-regex [text](^<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math)\b(.*\n)*?.*[ \t]*(?=\n+|\Z))[/text]) - (hr-regex [text](?:(?<=\n\n)|\A\n?)([ ]{0,3}<(hr)\b([^<>])*?/?>[ \t]*(?=\n{2,}|\Z))[/text]) - (html-comment-regex [text](?:(?<=\n\n)|\A\n?)([ ]{0,3}(?s:)[ \t]*(?=\n{2,}|\Z))[/text]) - (results '()) - (chunk-count (length (set 'chunks (parse txt "\n\n")))) - (chunk-size 500)) - - ; due to a limitation in PCRE, long sections have to be divided up otherwise we'll crash - ; so divide up long texts into chunks, then do the regex on each chunk - ; not an ideal solution, but it works ok :( - - (for (i 0 chunk-count chunk-size) - ; do a chunk - (set 'text-chunk (join (i (- (min chunk-count (- (+ i chunk-size) 1)) i) chunks) "\n\n")) - (dolist (rgx (list nested-block-regex liberal-tag-regex hr-regex html-comment-regex)) - (replace - rgx - text-chunk - (begin - (set 'key (Hash:hash $1)) - (push (list key $1 ) *hashed-html-blocks* -1) - (string "\n\n" key "\n\n")) - 2)) - ; save this partial result - (push text-chunk results -1) - ) ; for - ; return string result - (join results "\n\n"))) - -(define (unescape-special-chars t) - ; Swap back in all the special characters we've hidden. - (dolist (pair (HashTable)) - (replace (last pair) t (first pair) 10)) t) - -(define (strip-link-definitions txt) - ; strip link definitions from the text and store them - ; Link defs are in the form: ^[id]: url "optional title" - ; stored in link db list as (id (url title)) - (let ((link-db '()) - (url {}) - (id {}) - (title {})) - (replace - [text]^[ ]{0,3}\[(.+)\]:[ \t]*\n?[ \t]*?[ \t]*\n?[ \t]*(?:(?<=\s)["(](.+?)[")][ \t]*)?(?:\n+|\Z)[/text] - txt - (begin - (set 'id (lower-case $1) 'url (amps-and-angles $2) 'title $3) - (if title (replace {"} title {"} 0)) - (push (list id (list url title)) link-db) - (set '$3 {}) ; necessary? - (string {}) ; remove from text - ) - 10) - (set '*link-database* link-db) - txt)) - -(define (horizontal-rules txt) - (replace - [text]^[ ]{0,2}([ ]?\*[ ]?){3,}[ \t]*$[/text] - txt - "\n
    " - 14) - (replace - [text]^[ ]{0,2}([ ]? -[ ]?){3,}[ \t]*$[/text] - txt - "\n
    " - 14) - (replace - [text]^[ ]{0,2}([ ]? _[ ]?){3,}[ \t]*$[/text] - txt - "\n
    " - 14)) - -(define (headers txt) - ; setext headers - (let ((level 1)) - (replace - [text]^(.+)[ \t]*\n=+[ \t]*\n+[/text] - txt - (string "

    " (span-transforms $1) "

    \n\n") - 2) - - (replace - [text]^(.+)[ \t]*\n-+[ \t]*\n+[/text] - txt - (string "

    " (span-transforms $1) "

    \n\n") - 2) - ; atx headers - (replace - [text]^(\#{1,6})\s*(.+?)[ ]*\#*(\n+)[/text] - txt - (begin - (set 'level (length $1)) - (string "" (span-transforms $2) "\n\n") - ) - 2))) - -(define (lists txt) - (letn ((marker-ul {[*+-]}) - (marker-ol {\d+[.]}) - (marker-any (string {(?:} marker-ul {|} marker-ol {)})) - (whole-list-regex (string [text](([ ]{0,3}([/text] marker-any [text])[ \t]+)(?s:.+?)(\z|\n{2,}(?=\S)(?![ \t]*[/text] marker-any [text][ \t]+)))[/text])) - (my-list {}) - (list-type {}) - (my-result {})) - (replace - (if (> *list-level* 0) - (string {^} whole-list-regex) - (string {(?:(?<=\n\n)|\A\n?)} whole-list-regex)) - txt - (begin - (set 'my-list $1) - (if (find $3 marker-ul) - (set 'list-type "ul" 'marker-type marker-ul) - (set 'list-type "ol" 'marker-type marker-ol)) - (replace [text]\n{2,}[/text] my-list "\n\n\n" 0) - (set 'my-result (process-list-items my-list marker-any)) - (replace {\s+$} my-result {} 0) - (string {<} list-type {>} "\n" my-result "\n" {} "\n")) - 10 ; must be multiline - ))) - -(define (process-list-items list-text marker-any) - (let ((list-regex (string [text](\n)?(^[ \t]*)([/text] marker-any [text])[ \t]+((?s:.+?)(\n{1,2}))(?=\n*(\z|\2([/text] marker-any [text])[ \t]+))[/text])) - (item {}) - (leading-line {}) - (leading-space {}) - (result {})) - (inc *list-level*) - (replace [text]\n{2,}\z[/text] list-text "\n" 0) - (set '$1 {} '$2 {} '$3 {} '$4 {} '$5 {}) - (replace - list-regex - list-text - (begin - (set 'item $4) - (set 'leading-line $1) - (set 'leading-space $2) - (if (or (not (empty? leading-line)) (ends-with item "\n{2,}" 0)) - (set 'item (block-transforms (outdent item))) - ; recurse for sub lists - (begin - (set 'item (lists (outdent item))) - (set 'item (span-transforms (trim item "\n"))) - )) - (string {
  • } item {
  • } "\n")) - 10) - (dec *list-level*) - list-text)) - -(define (code-blocks txt) - (let ((code-block {}) - (token-list '())) - (replace - [text](?:\n\n|\A)((?:(?:[ ]{4}|\t).*\n+)+)((?=^[ ]{0,3}\S)|\Z)[/text] - txt - (begin - (set 'code-block $1) - ; format if Nestor module is loaded and it's not marked as plain - (if (and (not (starts-with code-block " ;plain\n")) (context? Nestor)) - ; format newlisp - (begin - ; remove flag if present - (replace "[ ]{4};newlisp\n" code-block {} 0) - (set 'code-block (protect (Nestor:nlx-to-html (Nestor:my-read (trim (detab (outdent code-block)) "\n"))))) - code-block) - ; don't format - (begin - ; trim leading and trailing newlines - (replace "[ ]{4};plain\n" code-block {} 0) - (set 'code-block (trim (detab (encode-code (outdent code-block))) "\n")) - (set '$1 {}) - (set 'code-block (string "\n\n
    " code-block "\n
    \n\n"))))) - 10))) - -(define (block-quotes txt) - (let ((block-quote {})) - (replace - [text]((^[ \t]*>[ \t]?.+\n(.+\n)*\n*)+)[/text] - txt - (begin - (set 'block-quote $1) - (replace {^[ ]*>[ ]?} block-quote {} 2) - (replace {^[ ]+$} block-quote {} 2) - (set 'block-quote (block-transforms block-quote)) ; recurse - ; remove leading spaces - (replace - {(\s*
    .+?
    )} - block-quote - (trim $1) - 2) - (string "
    \n" block-quote "\n
    \n\n")) - 2))) - -(define (outdent s) - (replace [text]^(\t|[ ]{1,4})[/text] s {} 2)) - -(define (detab s) - (replace [text](.*?)\t[/text] - s - (string $1 (dup { } (- 4 (% (length $1) 4)))) - 2)) - -(define (form-paragraphs txt) - (let ((grafs '()) - (original nil)) - (set 'txt (trim txt "\n")) ; strip blank lines before and after - (set 'grafs (parse txt "\n{2,}" 0)) ; split - (dolist (p grafs) - (if (set 'original (lookup p *hashed-html-blocks*)) - ; html blocks - (setf (grafs $idx) original) - ; wrap

    tags round everything else - (setf (grafs $idx) (string {

    } (replace {^[ ]*} (span-transforms p) {} (+ 4 8 16)) {

    })))) - (join grafs "\n\n"))) - -[text] -; three command line arguments: let's hope last one is a file -(when (= 3 (length (main-args))) - (println (markdown (read-file (main-args 2)))) - (exit)) - -; hack for command-line and module loading -(set 'level (sys-info 3)) - -; if level is 2, then we're probably invoking markdown.lsp directly -; if level is > 3, then we're probably loading it into another script... - -(when (= level 2) - ; running on command line, read STDIN and execute: - (while (read-line) - (push (current-line) *stdin* -1)) - (println (markdown (join *stdin* "\n"))) - (exit)) -[/text] - -;; version 2011-09-16 16:31:29 -;; Changed to different hash routine. Profiling shows that hashing takes 40% of the execution time. -;; Unfortunately this new version is only very slightly faster. -;; Command-line arguments hack in previous version doesn't work. -;; -;; version 2011-08-18 15:04:40 -;; various fixes, and added hack for running this from the command-line: -;; echo "hi there" | newlisp markdown.lsp -;; echo "hello world" | markdown.lsp -;; cat file.text | newlisp markdown.lsp -;; -;; version 2010-11-14 17:34:52 -;; some problems in ustring. Probably remove it one day, as it's non standard... -;; -;; version 2010-10-14 18:41:38 -;; added code to work round PCRE crash in (protect ... -;; -;; version date 2010-07-10 22:20:25 -;; modified call to 'read' since lutz has changed it -;; -;; version date 2009-11-16 22:10:10 -;; fixed bug in tokenize.html -;; -;; version date 2008-10-08 18:44:46 -;; changed nth-set to setf to be version-10 ready. -;; This means that now this script will NOT work with -;; earlier versions of newLISP!!!!!!!!!!! -;; requires Nestor if you want source code colouring... -;; -;; version date 2008-08-08 16:54:56 -;; changed (unless to (if (not ... :( -;; -;; version date 2008-07-20 14:!2:29 -;; added hex-str-to-unicode-char ustring -;; -;; version date 2008-03-07 15:36:09 -;; fixed load error -;; -;; version date 2007-11-17 16:20:57 -;; added syntax colouring module -;; -;; version date 2007-11-14 09:19:42 -;; removed reliance on dostring for compatibility with 9.1 - - -; eof \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/matlab_noreturn b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/matlab_noreturn deleted file mode 100644 index 7802782..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/matlab_noreturn +++ /dev/null @@ -1,3 +0,0 @@ - function myfunc(s) - a = 1; - end diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/matlab_sample b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/matlab_sample deleted file mode 100644 index 4f61afe..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/matlab_sample +++ /dev/null @@ -1,30 +0,0 @@ -function zz=sample(aa) -%%%%%%%%%%%%%%%%%% -% some comments -%%%%%%%%%%%%%%%%%% - -x = 'a string'; % some 'ticks' in a comment -y = 'a string with ''interal'' quotes'; - -for i=1:20 - disp(i); -end - -a = rand(30); -b = rand(30); - -c = a .* b ./ a \ ... comment at end of line and continuation - (b .* a + b - a); - -c = a' * b'; % note: these ticks are for transpose, not quotes. - -disp('a comment symbol, %, in a string'); - -!echo abc % this isn't a comment - it's passed to system command - -function y=myfunc(x) -y = exp(x); - - {% -a block comment - %} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/matlabsession_sample.txt b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/matlabsession_sample.txt deleted file mode 100644 index 1b33c9c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/matlabsession_sample.txt +++ /dev/null @@ -1,37 +0,0 @@ ->> ->> ->> a = 'okay' - -a = - -okay - ->> x = rand(3) % a matrix - -x = - - 0.8147 0.9134 0.2785 - 0.9058 0.6324 0.5469 - 0.1270 0.0975 0.9575 - ->> 1/0 - -ans = - - Inf - ->> foo -??? Undefined function or variable 'foo'. - ->> ->> ->> {cos(2*pi), 'testing'} - -ans = - - [1] 'testing' - ->> ->> ->> - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/metagrammar.treetop b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/metagrammar.treetop deleted file mode 100644 index acd6af6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/metagrammar.treetop +++ /dev/null @@ -1,455 +0,0 @@ -module Treetop - module Compiler - grammar Metagrammar - rule treetop_file - requires:(space? require_statement)* prefix:space? module_or_grammar suffix:space? { - def compile - requires.text_value + prefix.text_value + module_or_grammar.compile + suffix.text_value - end - } - end - - rule require_statement - prefix:space? "require" [ \t]+ [^\n\r]+ [\n\r] - end - - rule module_or_grammar - module_declaration / grammar - end - - rule module_declaration - prefix:('module' space name:([A-Z] alphanumeric_char* ('::' [A-Z] alphanumeric_char*)*) space) module_contents:(module_declaration / grammar) suffix:(space 'end') { - def compile - prefix.text_value + module_contents.compile + suffix.text_value - end - - def parser_name - prefix.name.text_value+'::'+module_contents.parser_name - end - } - end - - rule grammar - 'grammar' space grammar_name space ('do' space)? declaration_sequence space? 'end' - end - - rule grammar_name - ([A-Z] alphanumeric_char*) - end - - rule declaration_sequence - head:declaration tail:(space declaration)* { - def declarations - [head] + tail - end - - def tail - super.elements.map { |elt| elt.declaration } - end - } - / - '' { - def compile(builder) - end - } - end - - rule declaration - parsing_rule / include_declaration - end - - rule include_declaration - 'include' space [A-Z] (alphanumeric_char / '::')* { - def compile(builder) - builder << text_value - end - } - end - - rule parsing_rule - 'rule' space nonterminal space ('do' space)? parsing_expression space 'end' - end - - rule parsing_expression - choice / sequence / primary - end - - rule choice - head:alternative tail:(space? '/' space? alternative)+ { - def alternatives - [head] + tail - end - - def tail - super.elements.map {|elt| elt.alternative} - end - - def inline_modules - (alternatives.map {|alt| alt.inline_modules }).flatten - end - } - end - - rule sequence - head:labeled_sequence_primary tail:(space labeled_sequence_primary)+ node_class_declarations { - def sequence_elements - [head] + tail - end - - def tail - super.elements.map {|elt| elt.labeled_sequence_primary } - end - - def inline_modules - (sequence_elements.map {|elt| elt.inline_modules}).flatten + - [sequence_element_accessor_module] + - node_class_declarations.inline_modules - end - - def inline_module_name - node_class_declarations.inline_module_name - end - } - end - - rule alternative - sequence / primary - end - - rule primary - prefix atomic { - def compile(address, builder, parent_expression=nil) - prefix.compile(address, builder, self) - end - - def prefixed_expression - atomic - end - - def inline_modules - atomic.inline_modules - end - - def inline_module_name - nil - end - } - / - prefix space? predicate_block { - def compile(address, builder, parent_expression=nil) - prefix.compile(address, builder, self) - end - def prefixed_expression - predicate_block - end - def inline_modules - [] - end - } - / - atomic suffix node_class_declarations { - def compile(address, builder, parent_expression=nil) - suffix.compile(address, builder, self) - end - - def optional_expression - atomic - end - - def node_class_name - node_class_declarations.node_class_name - end - - def inline_modules - atomic.inline_modules + node_class_declarations.inline_modules - end - - def inline_module_name - node_class_declarations.inline_module_name - end - } - / - atomic node_class_declarations { - def compile(address, builder, parent_expression=nil) - atomic.compile(address, builder, self) - end - - def node_class_name - node_class_declarations.node_class_name - end - - def inline_modules - atomic.inline_modules + node_class_declarations.inline_modules - end - - def inline_module_name - node_class_declarations.inline_module_name - end - } - end - - rule labeled_sequence_primary - label sequence_primary { - def compile(lexical_address, builder) - sequence_primary.compile(lexical_address, builder) - end - - def inline_modules - sequence_primary.inline_modules - end - - def label_name - if label.name - label.name - elsif sequence_primary.instance_of?(Nonterminal) - sequence_primary.text_value - else - nil - end - end - } - end - - rule label - (alpha_char alphanumeric_char*) ':' { - def name - elements[0].text_value - end - } - / - '' { - def name - nil - end - } - end - - rule sequence_primary - prefix atomic { - def compile(lexical_address, builder) - prefix.compile(lexical_address, builder, self) - end - - def prefixed_expression - elements[1] - end - - def inline_modules - atomic.inline_modules - end - - def inline_module_name - nil - end - } - / - prefix space? predicate_block { - def compile(address, builder, parent_expression=nil) - prefix.compile(address, builder, self) - end - def prefixed_expression - predicate_block - end - def inline_modules - [] - end - } - / - atomic suffix { - def compile(lexical_address, builder) - suffix.compile(lexical_address, builder, self) - end - - def node_class_name - nil - end - - def inline_modules - atomic.inline_modules - end - - def inline_module_name - nil - end - } - / - atomic - end - - rule suffix - repetition_suffix / optional_suffix - end - - rule optional_suffix - '?' - end - - rule node_class_declarations - node_class_expression trailing_inline_module { - def node_class_name - node_class_expression.node_class_name - end - - def inline_modules - trailing_inline_module.inline_modules - end - - def inline_module - trailing_inline_module.inline_module - end - - def inline_module_name - inline_module.module_name if inline_module - end - } - end - - rule repetition_suffix - '+' / '*' / occurrence_range - end - - rule occurrence_range - space? min:([0-9])* '..' max:([0-9])* - end - - rule prefix - '&' / '!' / '~' - end - - rule atomic - terminal - / - nonterminal - / - parenthesized_expression - end - - rule parenthesized_expression - '(' space? parsing_expression space? ')' { - def inline_modules - parsing_expression.inline_modules - end - } - end - - rule nonterminal - !keyword_inside_grammar (alpha_char alphanumeric_char*) - end - - rule terminal - quoted_string / character_class / anything_symbol - end - - rule quoted_string - (single_quoted_string / double_quoted_string) { - def string - super.text_value - end - } - end - - rule double_quoted_string - '"' string:(!'"' ("\\\\" / '\"' / .))* '"' - end - - rule single_quoted_string - "'" string:(!"'" ("\\\\" / "\\'" / .))* "'" - end - - rule character_class - '[' characters:(!']' ('\\' . / bracket_expression / !'\\' .))+ ']' { - def characters - super.text_value - end - } - end - - rule bracket_expression - '[:' '^'? ( - 'alnum' / 'alpha' / 'blank' / 'cntrl' / 'digit' / 'graph' / 'lower' / - 'print' / 'punct' / 'space' / 'upper' / 'xdigit' / 'word' - ) ':]' - end - - rule anything_symbol - '.' - end - - rule node_class_expression - space '<' (!'>' .)+ '>' { - def node_class_name - elements[2].text_value - end - } - / - '' { - def node_class_name - nil - end - } - end - - rule trailing_inline_module - space inline_module { - def inline_modules - [inline_module] - end - - def inline_module_name - inline_module.module_name - end - } - / - '' { - def inline_modules - [] - end - - def inline_module - nil - end - - def inline_module_name - nil - end - } - end - - rule predicate_block - '' inline_module - end - - rule inline_module - '{' (inline_module / ![{}] .)* '}' - end - - rule keyword_inside_grammar - ('rule' / 'end') !non_space_char - end - - rule non_space_char - !space . - end - - rule alpha_char - [A-Za-z_] - end - - rule alphanumeric_char - alpha_char / [0-9] - end - - rule space - (white / comment_to_eol)+ - end - - rule comment_to_eol - '#' (!"\n" .)* - end - - rule white - [ \t\n\r] - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/minehunt.qml b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/minehunt.qml deleted file mode 100644 index 548e7e8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/minehunt.qml +++ /dev/null @@ -1,112 +0,0 @@ - /**************************************************************************** - ** - ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). - ** All rights reserved. - ** Contact: Nokia Corporation (qt-info@nokia.com) - ** - ** This file is part of the QtDeclarative module of the Qt Toolkit. - ** - ** $QT_BEGIN_LICENSE:LGPL$ - ** GNU Lesser General Public License Usage - ** This file may be used under the terms of the GNU Lesser General Public - ** License version 2.1 as published by the Free Software Foundation and - ** appearing in the file LICENSE.LGPL included in the packaging of this - ** file. Please review the following information to ensure the GNU Lesser - ** General Public License version 2.1 requirements will be met: - ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. - ** - ** In addition, as a special exception, Nokia gives you certain additional - ** rights. These rights are described in the Nokia Qt LGPL Exception - ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. - ** - ** GNU General Public License Usage - ** Alternatively, this file may be used under the terms of the GNU General - ** Public License version 3.0 as published by the Free Software Foundation - ** and appearing in the file LICENSE.GPL included in the packaging of this - ** file. Please review the following information to ensure the GNU General - ** Public License version 3.0 requirements will be met: - ** http://www.gnu.org/copyleft/gpl.html. - ** - ** Other Usage - ** Alternatively, this file may be used in accordance with the terms and - ** conditions contained in a signed written agreement between you and Nokia. - ** - ** - ** - ** - ** - ** $QT_END_LICENSE$ - ** - ****************************************************************************/ - - import QtQuick 1.0 - import "MinehuntCore" 1.0 - - Item { - id: field - property int clickx: 0 - property int clicky: 0 - - width: 450; height: 450 - - Image { source: "MinehuntCore/pics/background.png"; anchors.fill: parent; fillMode: Image.Tile } - - Grid { - anchors.horizontalCenter: parent.horizontalCenter - columns: 9; spacing: 1 - - Repeater { - id: repeater - model: tiles - delegate: Tile {} - } - } - - Row { - id: gamedata - x: 20; spacing: 20 - anchors.bottom: field.bottom; anchors.bottomMargin: 15 - - Image { - source: "MinehuntCore/pics/quit.png" - scale: quitMouse.pressed ? 0.8 : 1.0 - smooth: quitMouse.pressed - y: 10 - MouseArea { - id: quitMouse - anchors.fill: parent - anchors.margins: -20 - onClicked: Qt.quit() - } - } - Column { - spacing: 2 - Image { source: "MinehuntCore/pics/bomb-color.png" } - Text { anchors.horizontalCenter: parent.horizontalCenter; color: "white"; text: numMines } - } - - Column { - spacing: 2 - Image { source: "MinehuntCore/pics/flag-color.png" } - Text { anchors.horizontalCenter: parent.horizontalCenter; color: "white"; text: numFlags } - } - } - - Image { - anchors.bottom: field.bottom; anchors.bottomMargin: 15 - anchors.right: field.right; anchors.rightMargin: 20 - source: isPlaying ? 'MinehuntCore/pics/face-smile.png' : - hasWon ? 'MinehuntCore/pics/face-smile-big.png': 'MinehuntCore/pics/face-sad.png' - - MouseArea { anchors.fill: parent; onPressed: reset() } - } - Text { - anchors.centerIn: parent; width: parent.width - 20 - horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap - text: "Minehunt demo has to be compiled to run.\n\nPlease see README." - color: "white"; font.bold: true; font.pixelSize: 14 - visible: tiles == undefined - } - - } diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/minimal.ns2 b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/minimal.ns2 deleted file mode 100644 index e8a9269..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/minimal.ns2 +++ /dev/null @@ -1,4 +0,0 @@ -class A = ( | a = self m. | ) ( - m = (^a isNil ifTrue: [0] ifFalse: [1]) -) -class B = C ( | b0 = 0. b1 = b0 + 1. | ) () diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/moin_SyntaxReference.txt b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/moin_SyntaxReference.txt deleted file mode 100644 index a88fea4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/moin_SyntaxReference.txt +++ /dev/null @@ -1,340 +0,0 @@ -## Please edit system and help pages ONLY in the moinmaster wiki! For more -## information, please see MoinMaster:MoinPagesEditorGroup. -##master-page:Unknown-Page -##master-date:Unknown-Date -#acl MoinPagesEditorGroup:read,write,delete,revert All:read -#format wiki -#language en - -This page aims to introduce the most important elements of MoinMoin``'s syntax at a glance, showing first the markup verbatim and then how it is rendered by the wiki engine. Additionally, you'll find links to the relative help pages. Please note that some of the features depend on your configuration. - -= Table of Contents = -{{{ -'''Contents''' (up to the 2nd level) -[[TableOfContents(2)]] -}}} -'''Contents''' (up to the 2nd level) -[[TableOfContents(2)]] - -= Headings = -'''''see:''' HelpOnHeadlines'' -{{{ -= heading 1st level = -== heading 2nd level == -=== heading 3rd level === -==== heading 4th level ==== -===== heading 5th level ===== -}}} -= heading 1st level = -== heading 2nd level == -=== heading 3rd level === -==== heading 4th level ==== -===== heading 5th level ===== - -= Text Formatting = -'''''see:''' HelpOnFormatting'' -{{{ - * ''emphasized (italics)'' - * '''boldface''' - * '''''bold italics''''' - * `monospace` - * {{{source code}}} - * __underline__ - * ,,sub,,script - * ^super^script - * ~-smaller-~ - * ~+larger+~ - * --(strike through)-- -}}} - * ''emphasized (italics)'' - * '''boldface''' - * '''''bold italics''''' - * `monospace` - * {{{source code}}} - * __underline__ - * ,,sub,,script - * ^super^script - * ~-smaller-~ - * ~+larger+~ - * --(strike through)-- - -= Hyperlinks = -'''''see:''' HelpOnLinking'' -== Internal Links == -{{{ - * FrontPage - * ["FrontPage"] - * HelpOnEditing/SubPages - * /SubPage - * ../SiblingPage - * [:FrontPage:named link] - * [#anchorname] - * [#anchorname description] - * [wiki:Self:PageName#anchorname] - * [wiki:Self:PageName#anchorname description] - * attachment:filename.txt -}}} - * FrontPage - * ["FrontPage"] - * HelpOnEditing/SubPages - * /SubPage - * ../SiblingPage - * [:FrontPage:named link] - * [#anchorname] - * [#anchorname description] - * [wiki:Self:PageName#anchorname] - * [wiki:Self:PageName#anchorname description] - * attachment:filename.txt - -== External Links == -{{{ - * http://moinmoin.wikiwikiweb.de/ - * [http://moinmoin.wikiwikiweb.de/] - * [http://moinmoin.wikiwikiweb.de/ MoinMoin Wiki] - * [http://moinmoin.wikiwikiweb.de/wiki/moinmoin.png] - * http://moinmoin.wikiwikiweb.de/wiki/moinmoin.png - * [http://moinmoin.wikiwikiweb.de/wiki/moinmoin.png moinmoin.png] - * MeatBall:InterWiki - * wiki:MeatBall/InterWiki - * [wiki:MeatBall/InterWiki] - * [wiki:MeatBall/InterWiki InterWiki page on MeatBall] - * [file://///servername/share/full/path/to/file/filename%20with%20spaces.txt link to file filename with spaces.txt] - * user@example.com -}}} - * http://moinmoin.wikiwikiweb.de/ - * [http://moinmoin.wikiwikiweb.de/] - * [http://moinmoin.wikiwikiweb.de/ MoinMoin Wiki] - * [http://moinmoin.wikiwikiweb.de/wiki/moinmoin.png] - * http://moinmoin.wikiwikiweb.de/wiki/moinmoin.png - * [http://moinmoin.wikiwikiweb.de/wiki/moinmoin.png moinmoin.png] - * MeatBall:InterWiki - * wiki:MeatBall/InterWiki - * [wiki:MeatBall/InterWiki] - * [wiki:MeatBall/InterWiki InterWiki page on MeatBall] - * [file://///servername/share/full/path/to/file/filename%20with%20spaces.txt link to file filename with spaces.txt] - * user@example.com - -== Avoid or Limit Automatical Linking == -{{{ - * Wiki''''''Name - * Wiki``Name - * !WikiName - * WikiName''''''s - * WikiName``s - * `http://www.example.com` -}}} - * Wiki''''''Name - * Wiki``Name - * !WikiName - * WikiName''''''s - * WikiName``s - * `http://www.example.com` - -= Blockquotes and Indentions = -{{{ - indented text - text indented to the 2nd level -}}} - indented text - text indented to the 2nd level - -= Lists = -'''''see:''' HelpOnLists'' -== Unordered Lists == -{{{ - * item 1 - - * item 2 (preceding white space) - * item 2.1 - * item 2.1.1 - * item 3 - . item 3.1 (bulletless) - . item 4 (bulletless) - * item 4.1 - . item 4.1.1 (bulletless) -}}} - * item 1 - - * item 2 (preceding white space) - * item 2.1 - * item 2.1.1 - * item 3 - . item 3.1 (bulletless) - . item 4 (bulletless) - * item 4.1 - . item 4.1.1 (bulletless) - -== Ordered Lists == -=== with Numbers === -{{{ - 1. item 1 - 1. item 1.1 - 1. item 1.2 - 1. item 2 -}}} - 1. item 1 - 1. item 1.1 - 1. item 1.2 - 1. item 2 - -=== with Roman Numbers === -{{{ - I. item 1 - i. item 1.1 - i. item 1.2 - I. item 2 -}}} - I. item 1 - i. item 1.1 - i. item 1.2 - I. item 2 - -=== with Letters === -{{{ - A. item A - a. item A. a) - a. item A. b) - A. item B -}}} - A. item A - a. item A. a) - a. item A. b) - A. item B - -== Definition Lists == -{{{ - term:: definition - object:: description 1 - :: description 2 - Action Items:: - :: First Item - :: Second Item -}}} - term:: definition - object:: description 1 - :: description 2 - Action Items:: - :: First Item - :: Second Item - -= Horizontal Rules = -'''''see:''' HelpOnRules'' -{{{ ----- ------ ------- -------- --------- ---------- ----------- -}}} ----- ------ ------- -------- --------- ---------- ----------- - -= Tables = -'''''see:''' HelpOnTables'' -== Tables == -{{{ -||'''A'''||'''B'''||'''C'''|| -||1 ||2 ||3 || -}}} -||'''A'''||'''B'''||'''C'''|| -||1 ||2 ||3 || - -== Cell Width == -{{{ -||minimal width ||<99%>maximal width || -}}} -||minimal width ||<99%>maximal width || - -== Spanning Rows and Columns == -{{{ -||<|2> cell spanning 2 rows ||cell in the 2nd column || -||cell in the 2nd column of the 2nd row || -||<-2> cell spanning 2 columns || -||||use empty cells as a shorthand || -}}} -||<|2> cell spanning 2 rows ||cell in the 2nd column || -||cell in the 2nd column of the 2nd row || -||<-2> cell spanning 2 columns || -||||use empty cells as a shorthand || - -== Alignment of Cell Contents == -{{{ -||<^|3> top (combined) ||<:99%> center (combined) || bottom (combined) || -||<)> right || -||<(> left || -}}} -||<^|3> top (combined) ||<:99%> center (combined) || bottom (combined) || -||<)> right || -||<(> left || - -== Coulored Table Cells == -{{{ -||<#0000FF> blue ||<#00FF00> green ||<#FF0000> red || -||<#00FFFF> cyan ||<#FF00FF> magenta ||<#FFFF00> yellow || -}}} -||<#0000FF> blue ||<#00FF00> green ||<#FF0000> red || -||<#00FFFF> cyan ||<#FF00FF> magenta ||<#FFFF00> yellow || - -== HTML-like Options for Tables == -{{{ -||A || like <|2> || -|| like <#00FF00> || -|| like <-2>|| -}}} -||A || like <|2> || -|| like <#00FF00> || -|| like <-2>|| - -= Macros and Variables = -== Macros == -'''''see:''' HelpOnMacros'' - * `[[Anchor(anchorname)]]` inserts a link anchor `anchorname` - * `[[BR]]` inserts a hard line break - * `[[FootNote(Note)]]` inserts a footnote saying `Note` - * `[[Include(HelpOnMacros/Include)]]` inserts the contents of the page `HelpOnMacros/Include` inline - * `[[MailTo(user AT example DOT com)]]` obfuscates the email address `user@example.com` to users not logged in - -== Variables == -'''''see:''' HelpOnVariables'' - * `@``SIG``@` inserts your login name and timestamp of modification - * `@``TIME``@` inserts date and time of modification - -= Smileys and Icons = -'''''see:''' HelpOnSmileys'' -[[ShowSmileys]] - -= Source code = -'''''see:''' HelpOnParsers'' -== Verbatim Display == -{{{ -{ { { -def hello(): - print "Hello World!" -} } } -}}} -/!\ Remove spaces between "`{ { {`" and "`} } }`". -{{{ -def hello(): - print "Hello World!" -}}} - -== Syntax Highlighting == -{{{ -{ { {#!python -def hello(): - print "Hello World!" -} } } -}}} -/!\ Remove spaces between "`{ { {`" and "`} } }`". -{{{#!python -def hello(): - print "Hello World!" -}}} - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/multiline_regexes.rb b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/multiline_regexes.rb deleted file mode 100644 index 1b1e761..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/multiline_regexes.rb +++ /dev/null @@ -1,38 +0,0 @@ -/ -this is a -multiline -regex -/ - -this /is a -multiline regex too/ - -foo = /is also -one/ - -also /4 -is one/ - -this(/ -too -/) - -# this not -2 /4 -asfsadf/ - -# this is also not one -0x4d /25 -foo/ - -42 and /this -is also a multiline -regex/ - - -# And here some special string cases -foo = % blah # comment here to ensure whitespace -foo(% blah ) -foo << % blah # stupid but has to work -foo = % blah + % blub # wicked -foo = %q wicked # works too diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/nanomsg.intr b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/nanomsg.intr deleted file mode 100644 index d21f62c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/nanomsg.intr +++ /dev/null @@ -1,95 +0,0 @@ -module: nanomsg -synopsis: generated bindings for the nanomsg library -author: Bruce Mitchener, Jr. -copyright: See LICENSE file in this distribution. - -define simple-C-mapped-subtype () - export-map , export-function: identity; -end; - -define interface - #include { - "sp/sp.h", - "sp/fanin.h", - "sp/inproc.h", - "sp/pair.h", - "sp/reqrep.h", - "sp/survey.h", - "sp/fanout.h", - "sp/ipc.h", - "sp/pubsub.h", - "sp/tcp.h" - }, - - exclude: { - "SP_HAUSNUMERO", - "SP_PAIR_ID", - "SP_PUBSUB_ID", - "SP_REQREP_ID", - "SP_FANIN_ID", - "SP_FANOUT_ID", - "SP_SURVEY_ID" - }, - - equate: {"char *" => }, - - rename: { - "sp_recv" => %sp-recv, - "sp_send" => %sp-send, - "sp_setsockopt" => %sp-setsockopt - }; - - function "sp_version", - output-argument: 1, - output-argument: 2, - output-argument: 3; - - function "sp_send", - map-argument: { 2 => }; - - function "sp_recv", - map-argument: { 2 => }; - -end interface; - -// Function for adding the base address of the repeated slots of a -// to an offset and returning the result as a . This is -// necessary for passing contents across the FFI. - -define function buffer-offset - (the-buffer :: , data-offset :: ) - => (result-offset :: ) - u%+(data-offset, - primitive-wrap-machine-word - (primitive-repeated-slot-as-raw - (the-buffer, primitive-repeated-slot-offset(the-buffer)))) -end function; - -define inline function sp-send (socket :: , data :: , flags :: ) => (res :: ) - %sp-send(socket, buffer-offset(data, 0), data.size, flags) -end; - -define inline function sp-recv (socket :: , data :: , flags :: ) => (res :: ) - %sp-recv(socket, buffer-offset(data, 0), data.size, flags); -end; - -define inline method sp-setsockopt (socket :: , level :: , option :: , value :: ) - with-stack-structure (int :: ) - pointer-value(int) := value; - let setsockopt-result = - %sp-setsockopt(socket, level, option, int, size-of()); - if (setsockopt-result < 0) - // Check error! - end; - setsockopt-result - end; -end; - -define inline method sp-setsockopt (socket :: , level :: , option :: , data :: ) - let setsockopt-result = - %sp-setsockopt(socket, level, option, as(, data), data.size); - if (setsockopt-result < 0) - // Check error! - end; - setsockopt-result -end; diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/nasm_aoutso.asm b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/nasm_aoutso.asm deleted file mode 100644 index 9fd9727..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/nasm_aoutso.asm +++ /dev/null @@ -1,96 +0,0 @@ -; test source file for assembling to NetBSD/FreeBSD a.out shared library -; build with: -; nasm -f aoutb aoutso.asm -; ld -Bshareable -o aoutso.so aoutso.o -; test with: -; cc -o aoutso aouttest.c aoutso.so -; ./aoutso - -; This file should test the following: -; [1] Define and export a global text-section symbol -; [2] Define and export a global data-section symbol -; [3] Define and export a global BSS-section symbol -; [4] Define a non-global text-section symbol -; [5] Define a non-global data-section symbol -; [6] Define a non-global BSS-section symbol -; [7] Define a COMMON symbol -; [8] Define a NASM local label -; [9] Reference a NASM local label -; [10] Import an external symbol -; [11] Make a PC-relative call to an external symbol -; [12] Reference a text-section symbol in the text section -; [13] Reference a data-section symbol in the text section -; [14] Reference a BSS-section symbol in the text section -; [15] Reference a text-section symbol in the data section -; [16] Reference a data-section symbol in the data section -; [17] Reference a BSS-section symbol in the data section - - BITS 32 - EXTERN __GLOBAL_OFFSET_TABLE_ - GLOBAL _lrotate:function ; [1] - GLOBAL _greet:function ; [1] - GLOBAL _asmstr:data _asmstr.end-_asmstr ; [2] - GLOBAL _textptr:data 4 ; [2] - GLOBAL _selfptr:data 4 ; [2] - GLOBAL _integer:data 4 ; [3] - EXTERN _printf ; [10] - COMMON _commvar 4 ; [7] - - SECTION .text - -; prototype: long lrotate(long x, int num); -_lrotate: ; [1] - push ebp - mov ebp,esp - mov eax,[ebp+8] - mov ecx,[ebp+12] -.label rol eax,1 ; [4] [8] - loop .label ; [9] [12] - mov esp,ebp - pop ebp - ret - -; prototype: void greet(void); -_greet push ebx ; we'll use EBX for GOT, so save it - call .getgot -.getgot: pop ebx - add ebx,__GLOBAL_OFFSET_TABLE_ + $$ - .getgot wrt ..gotpc - mov eax,[ebx+_integer wrt ..got] ; [14] - mov eax,[eax] - inc eax - mov [ebx+localint wrt ..gotoff],eax ; [14] - mov eax,[ebx+_commvar wrt ..got] - push dword [eax] - mov eax,[ebx+localptr wrt ..gotoff] ; [13] - push dword [eax] - mov eax,[ebx+_integer wrt ..got] ; [1] [14] - push dword [eax] - lea eax,[ebx+_printfstr wrt ..gotoff] - push eax ; [13] - call _printf wrt ..plt ; [11] - add esp,16 - pop ebx - ret - - SECTION .data - -; a string -_asmstr db 'hello, world', 0 ; [2] -.end - -; a string for Printf -_printfstr db "integer==%d, localint==%d, commvar=%d" - db 10, 0 - -; some pointers -localptr dd localint ; [5] [17] -_textptr dd _greet wrt ..sym ; [15] -_selfptr dd _selfptr wrt ..sym ; [16] - - SECTION .bss - -; an integer -_integer resd 1 ; [3] - -; a local integer -localint resd 1 ; [6] diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/nasm_objexe.asm b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/nasm_objexe.asm deleted file mode 100644 index dcae5ee..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/nasm_objexe.asm +++ /dev/null @@ -1,30 +0,0 @@ -; Demonstration of how to write an entire .EXE format program as a .OBJ -; file to be linked. Tested with the VAL free linker. -; To build: -; nasm -fobj objexe.asm -; val objexe.obj,objexe.exe; -; To test: -; objexe -; (should print `hello, world') - - segment code - -..start: mov ax,data - mov ds,ax - mov ax,stack - mov ss,ax - mov sp,stacktop - - mov dx,hello - mov ah,9 - int 0x21 - - mov ax,0x4c00 - int 0x21 - - segment data -hello: db 'hello, world', 13, 10, '$' - - segment stack stack - resb 64 -stacktop: diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/nemerle_sample.n b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/nemerle_sample.n deleted file mode 100644 index 5236857..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/nemerle_sample.n +++ /dev/null @@ -1,87 +0,0 @@ -using System; - -namespace Demo.Ns -{ - /// sample class - public class ClassSample : Base - { - /* sample multiline comment */ -#region region sample - fieldSample : int; -#endregion - - public virtual someMethod(str : string) : list[double] - { - def x = "simple string"; - def x = $"simple $splice string $(spliceMethod() + 1)"; - def x = <# - recursive <# string #> sample - #>; - def x = $<# - recursive $splice <# string #> sample - ..$(lst; "; "; x => $"x * 2 = $(x * 2)") str - #>; - def x = @"somestring \"; - - def localFunc(arg) - { - arg + 1; - } - - match (localFunc(2)) - { - | 3 => "ok"; - | _ => "fail"; - } - - using (x = SomeObject()) - { - foreach (item in someCollection) - { - def i = try - { - int.Parse(item) - } - catch - { - | _ is FormatException => 0; - } - when (i > 0xff) - unless (i < 555L) - WriteLine(i); - - } - } - protected override overrideSample() : void - {} - - private privateSample() : void - {} - - public abstract abstractSample() : void - {} - } - - } - - module ModuleSample - { - } - - variant RgbColor { - | Red - | Yellow - | Green - | Different { - red : float; - green : float; - blue : float; - } - } - - macro sampleMacro(expr) - syntax ("write", expr) - { - <[ WriteLine($(expr : dyn)) ]> - } -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/nginx_nginx.conf b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/nginx_nginx.conf deleted file mode 100644 index 9dcdc8a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/nginx_nginx.conf +++ /dev/null @@ -1,118 +0,0 @@ - -#user nobody; -worker_processes 1; - -#error_log logs/error.log; -#error_log logs/error.log notice; -#error_log logs/error.log info; - -#pid logs/nginx.pid; - - -events { - worker_connections 1024; -} - - -http { - include mime.types; - default_type application/octet-stream; - - log_format main '$remote_addr - $remote_user [$time_local] $request ' - '"$status" $body_bytes_sent "$http_referer" ' - '"$http_user_agent" "$http_x_forwarded_for"'; - - #access_log logs/access.log main; - - sendfile on; - #tcp_nopush on; - - #keepalive_timeout 0; - keepalive_timeout 65; - - #gzip on; - - server { - listen 80; - server_name localhost; - - charset koi8-r; - - #access_log logs/host.access.log main; - - location / { - root html; - index index.html index.htm; - } - - #error_page 404 /404.html; - - # redirect server error pages to the static page /50x.html - # - error_page 500 502 503 504 /50x.html; - location = /50x.html { - root html; - } - - # proxy the PHP scripts to Apache listening on 127.0.0.1:80 - # - location ~ \.php$ { - proxy_pass http://127.0.0.1; - } - - # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 - # - location ~ \.php$ { - root html; - fastcgi_pass 127.0.0.1:9000; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; - include fastcgi_params; - } - - # deny access to .htaccess files, if Apache's document root - # concurs with nginx's one - # - location ~ /\.ht { - deny all; - } - } - - - # another virtual host using mix of IP-, name-, and port-based configuration - # - server { - listen 8000; - listen somename:8080; - server_name somename alias another.alias; - - location / { - root html; - index index.html index.htm; - } - } - - - # HTTPS server - # - server { - listen 443; - server_name localhost; - - ssl on; - ssl_certificate cert.pem; - ssl_certificate_key cert.key; - - ssl_session_timeout 5m; - - ssl_protocols SSLv2 SSLv3 TLSv1; - ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; - ssl_prefer_server_ciphers on; - - location / { - root html; - index index.html index.htm; - } - } - -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/numbers.c b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/numbers.c deleted file mode 100644 index 80662ea..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/numbers.c +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Some Number Test - */ - -int i = 24241424; -float f1 = 342423423.24234; -float f2 = 25235235.; -float f3 = .234234; -float f4 = 234243e+34343; -float f5 = 24234e-234; -int o = 0234; -int h = 0x2342; diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/objc_example.m b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/objc_example.m deleted file mode 100644 index f3f85f6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/objc_example.m +++ /dev/null @@ -1,179 +0,0 @@ -// Test various types of includes -#import -# import -#import "stdio.h" -#\ - import \ - "stdlib.h" -# /*line1*/ \ -import /* line 2 */ \ -"stdlib.h" // line 3 - -// Commented out code with preprocessor -#if 0 -#define MY_NUMBER 3 -#endif - - #\ - if 1 -#define TEST_NUMBER 3 -#endif - -// Empty preprocessor -# - -// Class forward declaration -@class MyClass; - -// Empty classes -@interface EmptyClass -@end -@interface EmptyClass2 -{ -} -@end -@interface EmptyClass3 : EmptyClass2 -{ -} -@end - -// Custom class inheriting from built-in -@interface MyClass : NSObject -{ -@public - NSString *myString; - __weak NSString *_weakString; -@protected - NSTextField *_textField; -@private - NSDate *privateDate; -} - -// Various property aatributes -@property(copy, readwrite, nonatomic) NSString *myString; -@property(weak) NSString *weakString; -@property(retain, strong, atomic) IBOutlet NSTextField *textField; - -// Class methods -+ (void)classMethod1:(NSString *)arg; -+ (void)classMethod2:(NSString *) arg; // Test space before arg - -@end - -typedef id B; - -#pragma mark MyMarker - -// MyClass.m -// Class extension to declare private property -@interface MyClass () -@property(retain) NSDate *privateDate; -- (void)hiddenMethod; -@end - -// Special category -@interface MyClass (Special) -@property(retain) NSDate *specialDate; -@end - -@implementation MyClass -@synthesize myString; -@synthesize privateDate; - -- (id)a:(B)b { - /** - * C-style comment - */ - - // Selector keywords/types - SEL someMethod = @selector(hiddenMethod); - - // Boolean types - Boolean b1 = FALSE; - BOOL b2 = NO; - bool b3 = true; - - /** - * Number literals - */ - // Int Literal - NSNumber *n1 = @( 1 ); - // Method call - NSNumber *n2 = @( [b length] ); - // Define variable - NSNumber *n3 = @( TEST_NUMBER ); - // Arthimetic expression - NSNumber *n4 = @(1 + 2); - // From variable - int myInt = 5; - NSNumber *n5 = @(myInt); - // Nest expression - NSNumber *n6 = @(1 + (2 + 6.0)); - // Bool literal - NSNumber *n7 = @NO; - // Bool expression - NSNumber *n8 = @(YES); - // Character - NSNumber *n9 = @'a'; - // int - NSNumber *n10 = @123; - // unsigned - NSNumber *n11 = @1234U; - // long - NSNumber *n12 = @1234567890L; - // float - NSNumber *n13 = @3.14F; - // double - NSNumber *n14 = @3.14F; - - // Array literals - NSArray *arr = @[ @"1", @"2" ]; - arr = @[ @[ @"1", @"2" ], [arr lastObject] ]; - [arr lastObject]; - [@[ @"1", @"2" ] lastObject]; - - // Dictionary literals - NSDictionary *d = @{ @"key": @"value" }; - [[d allKeys] lastObject]; - [[@{ @"key": @"value" } allKeys] lastObject]; - d = @{ @"key": @{ @"key": @"value" } }; - - [self hiddenMethod]; - [b length]; - [privateDate class]; - - NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys: - @"1", @"one", @"2", @"two", @"3", @"three", nil]; - - NSString *key; - for (key in dictionary) { - NSLog(@"Number: %@, Word: %@", key, [dictionary valueForKey:key]); - } - - // Blocks - int (^myBlock)(int arg1, int arg2); - NSString *(^myName)(NSString *) = ^(NSString *value) { - return value; - }; - - return nil; -} - -- (void)hiddenMethod { - // Synchronized block - @synchronized(self) { - [myString retain]; - [myString release]; - } -} - -+ (void)classMethod1:(NSString *)arg {} -+ (void)classMethod2:(NSString *) arg -{ - // Autorelease pool block - @autoreleasepool { - NSLog(@"Hello, World!"); - } -} - -@end diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/openedge_example b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/openedge_example deleted file mode 100644 index e8c17e3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/openedge_example +++ /dev/null @@ -1,34 +0,0 @@ -{include.i} -{nested.i {include.i}} - -&SCOPED-DEFINE MY_NAME "Abe" - -DEF VAR i AS INT NO-UNDO. -i = 0xABE + 1337 / (1 * 1.00) - -def var clowercasetest as char no-undo. -DEF VAR vardashtest AS DATETIME-TZ NO-UNDO. - -DEFINE TEMP-TABLE ttNames NO-UNDO - FIELD cName AS CHAR - INDEX IXPK_ttNames IS PRIMARY UNIQUE cName. - -/* One-line comment */ -/* Two-line - Comment */ -/* - Nested - /* - Multiline - /* - Comment - */ - */ -*/ - -CREATE ttNames. -ASSIGN ttNames.cName = {&MY_NAME}. - -FOR EACH ttNames: - MESSAGE "Hello, " + ttNames.cName + '!' VIEW-AS ALERT-BOX. -END. diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/pawn_example b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/pawn_example deleted file mode 100644 index ee2ecca..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/pawn_example +++ /dev/null @@ -1,25 +0,0 @@ -{include.i} -{nested.i {include.i}} - -&SCOPED-DEFINE MY_NAME "Abe" - -DEF VAR i AS INT NO-UNDO. -i = 0xABE + 1337 / (1 * 1.00) - -def var clowercasetest as char no-undo. -DEF VAR vardashtest AS DATETIME-TZ NO-UNDO. - -DEFINE TEMP-TABLE ttNames NO-UNDO - FIELD cName AS CHAR - INDEX IXPK_ttNames IS PRIMARY UNIQUE cName. - -/* One-line comment */ -/* Two-line - Comment */ - -CREATE ttNames. -ASSIGN ttNames.cName = {&MY_NAME}. - -FOR EACH ttNames: - MESSAGE "Hello, " + ttNames.cName + '!' VIEW-AS ALERT-BOX. -END. diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/perl_misc b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/perl_misc deleted file mode 100644 index e6dbfb2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/perl_misc +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/perl - -# from http://gist.github.com/485595 -use strict; -use warnings; -use Time::HiRes 'usleep'; - -for (1..5) { - open my $in, '<', '/proc/sys/kernel/random/entropy_avail' or die; - print <$in>; - close $in; - usleep 100_000; -} - -# other miscellaneous tests of numbers separated by _ -#usleep 100_000; -100_000_000; -my $nichts = 0.005_006; -print "$nichts\n"; -my $nichts2 = 0.005_006_007; -print 900_800_700.005_006_007, $/; - -# numbers from `man 1 perlnumber` -my $n; -$n = 1234; # decimal integer -$n = 0b1110011; # binary integer -$n = 01234; # octal integer -$n = 0x1234; # hexadecimal integer -$n = 12.34e-56; # exponential notation -$n = "-12.34e56"; # number specified as a string -$n = "1234"; # number specified as a string - -# other numbers -for ( - -9876, - +8765, - -9876.02, - -9876.02e+10, - +765_432e30, - 2002., - .2002, -) { - print $_, "\n"; -} - -# operators on numbers -for ( - $n + 300, - $n - 300, - $n / 300 + 10, - $n * 250 / 2.0, - $n == 100, - $n != 100, - $n > 100, - $n >= 100, - $n < 100, - $n <= 100, - $n % 2, - abs $n, -) { - print $_, "\n"; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/perl_perl5db b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/perl_perl5db deleted file mode 100644 index ab9d5e3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/perl_perl5db +++ /dev/null @@ -1,998 +0,0 @@ - -=head1 NAME - -perl5db.pl - the perl debugger - -=head1 SYNOPSIS - - perl -d your_Perl_script - -=head1 DESCRIPTION - -After this routine is over, we don't have user code executing in the debugger's -context, so we can use C freely. - -=cut - -############################################## Begin lexical danger zone - -# 'my' variables used here could leak into (that is, be visible in) -# the context that the code being evaluated is executing in. This means that -# the code could modify the debugger's variables. -# -# Fiddling with the debugger's context could be Bad. We insulate things as -# much as we can. - -sub eval { - - # 'my' would make it visible from user code - # but so does local! --tchrist - # Remember: this localizes @DB::res, not @main::res. - local @res; - { - - # Try to keep the user code from messing with us. Save these so that - # even if the eval'ed code changes them, we can put them back again. - # Needed because the user could refer directly to the debugger's - # package globals (and any 'my' variables in this containing scope) - # inside the eval(), and we want to try to stay safe. - local $otrace = $trace; - local $osingle = $single; - local $od = $^D; - - # Untaint the incoming eval() argument. - { ($evalarg) = $evalarg =~ /(.*)/s; } - - # $usercontext built in DB::DB near the comment - # "set up the context for DB::eval ..." - # Evaluate and save any results. - @res = eval "$usercontext $evalarg;\n"; # '\n' for nice recursive debug - - # Restore those old values. - $trace = $otrace; - $single = $osingle; - $^D = $od; - } - - # Save the current value of $@, and preserve it in the debugger's copy - # of the saved precious globals. - my $at = $@; - - # Since we're only saving $@, we only have to localize the array element - # that it will be stored in. - local $saved[0]; # Preserve the old value of $@ - eval { &DB::save }; - - # Now see whether we need to report an error back to the user. - if ($at) { - local $\ = ''; - print $OUT $at; - } - - # Display as required by the caller. $onetimeDump and $onetimedumpDepth - # are package globals. - elsif ($onetimeDump) { - if ( $onetimeDump eq 'dump' ) { - local $option{dumpDepth} = $onetimedumpDepth - if defined $onetimedumpDepth; - dumpit( $OUT, \@res ); - } - elsif ( $onetimeDump eq 'methods' ) { - methods( $res[0] ); - } - } ## end elsif ($onetimeDump) - @res; -} ## end sub eval - -############################################## End lexical danger zone - -# After this point it is safe to introduce lexicals. -# The code being debugged will be executing in its own context, and -# can't see the inside of the debugger. -# -# However, one should not overdo it: leave as much control from outside as -# possible. If you make something a lexical, it's not going to be addressable -# from outside the debugger even if you know its name. - -# This file is automatically included if you do perl -d. -# It's probably not useful to include this yourself. -# -# Before venturing further into these twisty passages, it is -# wise to read the perldebguts man page or risk the ire of dragons. -# -# (It should be noted that perldebguts will tell you a lot about -# the underlying mechanics of how the debugger interfaces into the -# Perl interpreter, but not a lot about the debugger itself. The new -# comments in this code try to address this problem.) - -# Note that no subroutine call is possible until &DB::sub is defined -# (for subroutines defined outside of the package DB). In fact the same is -# true if $deep is not defined. - -# Enhanced by ilya@math.ohio-state.edu (Ilya Zakharevich) - -# modified Perl debugger, to be run from Emacs in perldb-mode -# Ray Lischner (uunet!mntgfx!lisch) as of 5 Nov 1990 -# Johan Vromans -- upgrade to 4.0 pl 10 -# Ilya Zakharevich -- patches after 5.001 (and some before ;-) - -# (We have made efforts to clarify the comments in the change log -# in other places; some of them may seem somewhat obscure as they -# were originally written, and explaining them away from the code -# in question seems conterproductive.. -JM) - -=head1 DEBUGGER INITIALIZATION - -The debugger starts up in phases. - -=head2 BASIC SETUP - -First, it initializes the environment it wants to run in: turning off -warnings during its own compilation, defining variables which it will need -to avoid warnings later, setting itself up to not exit when the program -terminates, and defaulting to printing return values for the C command. - -=cut - -# Needed for the statement after exec(): -# -# This BEGIN block is simply used to switch off warnings during debugger -# compiliation. Probably it would be better practice to fix the warnings, -# but this is how it's done at the moment. - -BEGIN { - $ini_warn = $^W; - $^W = 0; -} # Switch compilation warnings off until another BEGIN. - -# test if assertions are supported and actived: -BEGIN { - $ini_assertion = eval "sub asserting_test : assertion {1}; 1"; - - # $ini_assertion = undef => assertions unsupported, - # " = 1 => assertions supported - # print "\$ini_assertion=$ini_assertion\n"; -} - -local ($^W) = 0; # Switch run-time warnings off during init. - -=head2 THREADS SUPPORT - -If we are running under a threaded Perl, we require threads and threads::shared -if the environment variable C is set, to enable proper -threaded debugger control. C<-dt> can also be used to set this. - -Each new thread will be announced and the debugger prompt will always inform -you of each new thread created. It will also indicate the thread id in which -we are currently running within the prompt like this: - - [tid] DB<$i> - -Where C<[tid]> is an integer thread id and C<$i> is the familiar debugger -command prompt. The prompt will show: C<[0]> when running under threads, but -not actually in a thread. C<[tid]> is consistent with C usage. - -While running under threads, when you set or delete a breakpoint (etc.), this -will apply to all threads, not just the currently running one. When you are -in a currently executing thread, you will stay there until it completes. With -the current implementation it is not currently possible to hop from one thread -to another. - -The C and C commands are currently fairly minimal - see C and C. - -Note that threading support was built into the debugger as of Perl version -C<5.8.6> and debugger version C<1.2.8>. - -=cut - -BEGIN { - # ensure we can share our non-threaded variables or no-op - if ($ENV{PERL5DB_THREADED}) { - require threads; - require threads::shared; - import threads::shared qw(share); - $DBGR; - share(\$DBGR); - lock($DBGR); - print "Threads support enabled\n"; - } else { - *lock = sub(*) {}; - *share = sub(*) {}; - } -} - -# This would probably be better done with "use vars", but that wasn't around -# when this code was originally written. (Neither was "use strict".) And on -# the principle of not fiddling with something that was working, this was -# left alone. -warn( # Do not ;-) - # These variables control the execution of 'dumpvar.pl'. - $dumpvar::hashDepth, - $dumpvar::arrayDepth, - $dumpvar::dumpDBFiles, - $dumpvar::dumpPackages, - $dumpvar::quoteHighBit, - $dumpvar::printUndef, - $dumpvar::globPrint, - $dumpvar::usageOnly, - - # used to save @ARGV and extract any debugger-related flags. - @ARGS, - - # used to control die() reporting in diesignal() - $Carp::CarpLevel, - - # used to prevent multiple entries to diesignal() - # (if for instance diesignal() itself dies) - $panic, - - # used to prevent the debugger from running nonstop - # after a restart - $second_time, - ) - if 0; - -foreach my $k (keys (%INC)) { - &share(\$main::{'_<'.$filename}); -}; - -# Command-line + PERLLIB: -# Save the contents of @INC before they are modified elsewhere. -@ini_INC = @INC; - -# This was an attempt to clear out the previous values of various -# trapped errors. Apparently it didn't help. XXX More info needed! -# $prevwarn = $prevdie = $prevbus = $prevsegv = ''; # Does not help?! - -# We set these variables to safe values. We don't want to blindly turn -# off warnings, because other packages may still want them. -$trace = $signal = $single = 0; # Uninitialized warning suppression - # (local $^W cannot help - other packages!). - -# Default to not exiting when program finishes; print the return -# value when the 'r' command is used to return from a subroutine. -$inhibit_exit = $option{PrintRet} = 1; - -=head1 OPTION PROCESSING - -The debugger's options are actually spread out over the debugger itself and -C; some of these are variables to be set, while others are -subs to be called with a value. To try to make this a little easier to -manage, the debugger uses a few data structures to define what options -are legal and how they are to be processed. - -First, the C<@options> array defines the I of all the options that -are to be accepted. - -=cut - -@options = qw( - CommandSet - hashDepth arrayDepth dumpDepth - DumpDBFiles DumpPackages DumpReused - compactDump veryCompact quote - HighBit undefPrint globPrint - PrintRet UsageOnly frame - AutoTrace TTY noTTY - ReadLine NonStop LineInfo - maxTraceLen recallCommand ShellBang - pager tkRunning ornaments - signalLevel warnLevel dieLevel - inhibit_exit ImmediateStop bareStringify - CreateTTY RemotePort windowSize - DollarCaretP OnlyAssertions WarnAssertions -); - -@RememberOnROptions = qw(DollarCaretP OnlyAssertions); - -=pod - -Second, C lists the variables that each option uses to save its -state. - -=cut - -%optionVars = ( - hashDepth => \$dumpvar::hashDepth, - arrayDepth => \$dumpvar::arrayDepth, - CommandSet => \$CommandSet, - DumpDBFiles => \$dumpvar::dumpDBFiles, - DumpPackages => \$dumpvar::dumpPackages, - DumpReused => \$dumpvar::dumpReused, - HighBit => \$dumpvar::quoteHighBit, - undefPrint => \$dumpvar::printUndef, - globPrint => \$dumpvar::globPrint, - UsageOnly => \$dumpvar::usageOnly, - CreateTTY => \$CreateTTY, - bareStringify => \$dumpvar::bareStringify, - frame => \$frame, - AutoTrace => \$trace, - inhibit_exit => \$inhibit_exit, - maxTraceLen => \$maxtrace, - ImmediateStop => \$ImmediateStop, - RemotePort => \$remoteport, - windowSize => \$window, - WarnAssertions => \$warnassertions, -); - -=pod - -Third, C<%optionAction> defines the subroutine to be called to process each -option. - -=cut - -%optionAction = ( - compactDump => \&dumpvar::compactDump, - veryCompact => \&dumpvar::veryCompact, - quote => \&dumpvar::quote, - TTY => \&TTY, - noTTY => \&noTTY, - ReadLine => \&ReadLine, - NonStop => \&NonStop, - LineInfo => \&LineInfo, - recallCommand => \&recallCommand, - ShellBang => \&shellBang, - pager => \&pager, - signalLevel => \&signalLevel, - warnLevel => \&warnLevel, - dieLevel => \&dieLevel, - tkRunning => \&tkRunning, - ornaments => \&ornaments, - RemotePort => \&RemotePort, - DollarCaretP => \&DollarCaretP, - OnlyAssertions=> \&OnlyAssertions, -); - -=pod - -Last, the C<%optionRequire> notes modules that must be Cd if an -option is used. - -=cut - -# Note that this list is not complete: several options not listed here -# actually require that dumpvar.pl be loaded for them to work, but are -# not in the table. A subsequent patch will correct this problem; for -# the moment, we're just recommenting, and we are NOT going to change -# function. -%optionRequire = ( - compactDump => 'dumpvar.pl', - veryCompact => 'dumpvar.pl', - quote => 'dumpvar.pl', -); - -=pod - -There are a number of initialization-related variables which can be set -by putting code to set them in a BEGIN block in the C environment -variable. These are: - -=over 4 - -=item C<$rl> - readline control XXX needs more explanation - -=item C<$warnLevel> - whether or not debugger takes over warning handling - -=item C<$dieLevel> - whether or not debugger takes over die handling - -=item C<$signalLevel> - whether or not debugger takes over signal handling - -=item C<$pre> - preprompt actions (array reference) - -=item C<$post> - postprompt actions (array reference) - -=item C<$pretype> - -=item C<$CreateTTY> - whether or not to create a new TTY for this debugger - -=item C<$CommandSet> - which command set to use (defaults to new, documented set) - -=back - -=cut - -# These guys may be defined in $ENV{PERL5DB} : -$rl = 1 unless defined $rl; -$warnLevel = 1 unless defined $warnLevel; -$dieLevel = 1 unless defined $dieLevel; -$signalLevel = 1 unless defined $signalLevel; -$pre = [] unless defined $pre; -$post = [] unless defined $post; -$pretype = [] unless defined $pretype; -$CreateTTY = 3 unless defined $CreateTTY; -$CommandSet = '580' unless defined $CommandSet; - -share($rl); -share($warnLevel); -share($dieLevel); -share($signalLevel); -share($pre); -share($post); -share($pretype); -share($rl); -share($CreateTTY); -share($CommandSet); - -=pod - -The default C, C, and C handlers are set up. - -=cut - -warnLevel($warnLevel); -dieLevel($dieLevel); -signalLevel($signalLevel); - -=pod - -The pager to be used is needed next. We try to get it from the -environment first. if it's not defined there, we try to find it in -the Perl C. If it's not there, we default to C. We -then call the C function to save the pager name. - -=cut - -# This routine makes sure $pager is set up so that '|' can use it. -pager( - - # If PAGER is defined in the environment, use it. - defined $ENV{PAGER} - ? $ENV{PAGER} - - # If not, see if Config.pm defines it. - : eval { require Config } - && defined $Config::Config{pager} - ? $Config::Config{pager} - - # If not, fall back to 'more'. - : 'more' - ) - unless defined $pager; - -=pod - -We set up the command to be used to access the man pages, the command -recall character (C unless otherwise defined) and the shell escape -character (C unless otherwise defined). Yes, these do conflict, and -neither works in the debugger at the moment. - -=cut - -setman(); - -# Set up defaults for command recall and shell escape (note: -# these currently don't work in linemode debugging). -&recallCommand("!") unless defined $prc; -&shellBang("!") unless defined $psh; - -=pod - -We then set up the gigantic string containing the debugger help. -We also set the limit on the number of arguments we'll display during a -trace. - -=cut - -sethelp(); - -# If we didn't get a default for the length of eval/stack trace args, -# set it here. -$maxtrace = 400 unless defined $maxtrace; - -=head2 SETTING UP THE DEBUGGER GREETING - -The debugger I helps to inform the user how many debuggers are -running, and whether the current debugger is the primary or a child. - -If we are the primary, we just hang onto our pid so we'll have it when -or if we start a child debugger. If we are a child, we'll set things up -so we'll have a unique greeting and so the parent will give us our own -TTY later. - -We save the current contents of the C environment variable -because we mess around with it. We'll also need to hang onto it because -we'll need it if we restart. - -Child debuggers make a label out of the current PID structure recorded in -PERLDB_PIDS plus the new PID. They also mark themselves as not having a TTY -yet so the parent will give them one later via C. - -=cut - -# Save the current contents of the environment; we're about to -# much with it. We'll need this if we have to restart. -$ini_pids = $ENV{PERLDB_PIDS}; - -if ( defined $ENV{PERLDB_PIDS} ) { - - # We're a child. Make us a label out of the current PID structure - # recorded in PERLDB_PIDS plus our (new) PID. Mark us as not having - # a term yet so the parent will give us one later via resetterm(). - $pids = "[$ENV{PERLDB_PIDS}]"; - $ENV{PERLDB_PIDS} .= "->$$"; - $term_pid = -1; -} ## end if (defined $ENV{PERLDB_PIDS... -else { - - # We're the parent PID. Initialize PERLDB_PID in case we end up with a - # child debugger, and mark us as the parent, so we'll know to set up - # more TTY's is we have to. - $ENV{PERLDB_PIDS} = "$$"; - $pids = "{pid=$$}"; - $term_pid = $$; -} - -$pidprompt = ''; - -# Sets up $emacs as a synonym for $slave_editor. -*emacs = $slave_editor if $slave_editor; # May be used in afterinit()... - -=head2 READING THE RC FILE - -The debugger will read a file of initialization options if supplied. If -running interactively, this is C<.perldb>; if not, it's C. - -=cut - -# As noted, this test really doesn't check accurately that the debugger -# is running at a terminal or not. - -if ( -e "/dev/tty" ) { # this is the wrong metric! - $rcfile = ".perldb"; -} -else { - $rcfile = "perldb.ini"; -} - -=pod - -The debugger does a safety test of the file to be read. It must be owned -either by the current user or root, and must only be writable by the owner. - -=cut - -# This wraps a safety test around "do" to read and evaluate the init file. -# -# This isn't really safe, because there's a race -# between checking and opening. The solution is to -# open and fstat the handle, but then you have to read and -# eval the contents. But then the silly thing gets -# your lexical scope, which is unfortunate at best. -sub safe_do { - my $file = shift; - - # Just exactly what part of the word "CORE::" don't you understand? - local $SIG{__WARN__}; - local $SIG{__DIE__}; - - unless ( is_safe_file($file) ) { - CORE::warn < command is invoked, it -tries to capture all of the state it can into environment variables, and -then sets C. When we start executing again, we check to see -if C is there; if so, we reload all the information that -the R command stuffed into the environment variables. - - PERLDB_RESTART - flag only, contains no restart data itself. - PERLDB_HIST - command history, if it's available - PERLDB_ON_LOAD - breakpoints set by the rc file - PERLDB_POSTPONE - subs that have been loaded/not executed, and have actions - PERLDB_VISITED - files that had breakpoints - PERLDB_FILE_... - breakpoints for a file - PERLDB_OPT - active options - PERLDB_INC - the original @INC - PERLDB_PRETYPE - preprompt debugger actions - PERLDB_PRE - preprompt Perl code - PERLDB_POST - post-prompt Perl code - PERLDB_TYPEAHEAD - typeahead captured by readline() - -We chug through all these variables and plug the values saved in them -back into the appropriate spots in the debugger. - -=cut - -if ( exists $ENV{PERLDB_RESTART} ) { - - # We're restarting, so we don't need the flag that says to restart anymore. - delete $ENV{PERLDB_RESTART}; - - # $restart = 1; - @hist = get_list('PERLDB_HIST'); - %break_on_load = get_list("PERLDB_ON_LOAD"); - %postponed = get_list("PERLDB_POSTPONE"); - - share(@hist); - share(@truehist); - share(%break_on_load); - share(%postponed); - - # restore breakpoints/actions - my @had_breakpoints = get_list("PERLDB_VISITED"); - for ( 0 .. $#had_breakpoints ) { - my %pf = get_list("PERLDB_FILE_$_"); - $postponed_file{ $had_breakpoints[$_] } = \%pf if %pf; - } - - # restore options - my %opt = get_list("PERLDB_OPT"); - my ( $opt, $val ); - while ( ( $opt, $val ) = each %opt ) { - $val =~ s/[\\\']/\\$1/g; - parse_options("$opt'$val'"); - } - - # restore original @INC - @INC = get_list("PERLDB_INC"); - @ini_INC = @INC; - - # return pre/postprompt actions and typeahead buffer - $pretype = [ get_list("PERLDB_PRETYPE") ]; - $pre = [ get_list("PERLDB_PRE") ]; - $post = [ get_list("PERLDB_POST") ]; - @typeahead = get_list( "PERLDB_TYPEAHEAD", @typeahead ); -} ## end if (exists $ENV{PERLDB_RESTART... - -=head2 SETTING UP THE TERMINAL - -Now, we'll decide how the debugger is going to interact with the user. -If there's no TTY, we set the debugger to run non-stop; there's not going -to be anyone there to enter commands. - -=cut - -if ($notty) { - $runnonstop = 1; - share($runnonstop); -} - -=pod - -If there is a TTY, we have to determine who it belongs to before we can -proceed. If this is a slave editor or graphical debugger (denoted by -the first command-line switch being '-emacs'), we shift this off and -set C<$rl> to 0 (XXX ostensibly to do straight reads). - -=cut - -else { - - # Is Perl being run from a slave editor or graphical debugger? - # If so, don't use readline, and set $slave_editor = 1. - $slave_editor = - ( ( defined $main::ARGV[0] ) and ( $main::ARGV[0] eq '-emacs' ) ); - $rl = 0, shift(@main::ARGV) if $slave_editor; - - #require Term::ReadLine; - -=pod - -We then determine what the console should be on various systems: - -=over 4 - -=item * Cygwin - We use C instead of a separate device. - -=cut - - if ( $^O eq 'cygwin' ) { - - # /dev/tty is binary. use stdin for textmode - undef $console; - } - -=item * Unix - use C. - -=cut - - elsif ( -e "/dev/tty" ) { - $console = "/dev/tty"; - } - -=item * Windows or MSDOS - use C. - -=cut - - elsif ( $^O eq 'dos' or -e "con" or $^O eq 'MSWin32' ) { - $console = "con"; - } - -=item * MacOS - use C if this is the MPW version; C if not. - -Note that Mac OS X returns C, not C. Also note that the debugger doesn't do anything special for C. Maybe it should. - -=cut - - elsif ( $^O eq 'MacOS' ) { - if ( $MacPerl::Version !~ /MPW/ ) { - $console = - "Dev:Console:Perl Debug"; # Separate window for application - } - else { - $console = "Dev:Console"; - } - } ## end elsif ($^O eq 'MacOS') - -=item * VMS - use C. - -=cut - - else { - - # everything else is ... - $console = "sys\$command"; - } - -=pod - -=back - -Several other systems don't use a specific console. We C -for those (Windows using a slave editor/graphical debugger, NetWare, OS/2 -with a slave editor, Epoc). - -=cut - - if ( ( $^O eq 'MSWin32' ) and ( $slave_editor or defined $ENV{EMACS} ) ) { - - # /dev/tty is binary. use stdin for textmode - $console = undef; - } - - if ( $^O eq 'NetWare' ) { - - # /dev/tty is binary. use stdin for textmode - $console = undef; - } - - # In OS/2, we need to use STDIN to get textmode too, even though - # it pretty much looks like Unix otherwise. - if ( defined $ENV{OS2_SHELL} and ( $slave_editor or $ENV{WINDOWID} ) ) - { # In OS/2 - $console = undef; - } - - # EPOC also falls into the 'got to use STDIN' camp. - if ( $^O eq 'epoc' ) { - $console = undef; - } - -=pod - -If there is a TTY hanging around from a parent, we use that as the console. - -=cut - - $console = $tty if defined $tty; - -=head2 SOCKET HANDLING - -The debugger is capable of opening a socket and carrying out a debugging -session over the socket. - -If C was defined in the options, the debugger assumes that it -should try to start a debugging session on that port. It builds the socket -and then tries to connect the input and output filehandles to it. - -=cut - - # Handle socket stuff. - - if ( defined $remoteport ) { - - # If RemotePort was defined in the options, connect input and output - # to the socket. - require IO::Socket; - $OUT = new IO::Socket::INET( - Timeout => '10', - PeerAddr => $remoteport, - Proto => 'tcp', - ); - if ( !$OUT ) { die "Unable to connect to remote host: $remoteport\n"; } - $IN = $OUT; - } ## end if (defined $remoteport) - -=pod - -If no C was defined, and we want to create a TTY on startup, -this is probably a situation where multiple debuggers are running (for example, -a backticked command that starts up another debugger). We create a new IN and -OUT filehandle, and do the necessary mojo to create a new TTY if we know how -and if we can. - -=cut - - # Non-socket. - else { - - # Two debuggers running (probably a system or a backtick that invokes - # the debugger itself under the running one). create a new IN and OUT - # filehandle, and do the necessary mojo to create a new tty if we - # know how, and we can. - create_IN_OUT(4) if $CreateTTY & 4; - if ($console) { - - # If we have a console, check to see if there are separate ins and - # outs to open. (They are assumed identiical if not.) - - my ( $i, $o ) = split /,/, $console; - $o = $i unless defined $o; - - # read/write on in, or just read, or read on STDIN. - open( IN, "+<$i" ) - || open( IN, "<$i" ) - || open( IN, "<&STDIN" ); - - # read/write/create/clobber out, or write/create/clobber out, - # or merge with STDERR, or merge with STDOUT. - open( OUT, "+>$o" ) - || open( OUT, ">$o" ) - || open( OUT, ">&STDERR" ) - || open( OUT, ">&STDOUT" ); # so we don't dongle stdout - - } ## end if ($console) - elsif ( not defined $console ) { - - # No console. Open STDIN. - open( IN, "<&STDIN" ); - - # merge with STDERR, or with STDOUT. - open( OUT, ">&STDERR" ) - || open( OUT, ">&STDOUT" ); # so we don't dongle stdout - $console = 'STDIN/OUT'; - } ## end elsif (not defined $console) - - # Keep copies of the filehandles so that when the pager runs, it - # can close standard input without clobbering ours. - $IN = \*IN, $OUT = \*OUT if $console or not defined $console; - } ## end elsif (from if(defined $remoteport)) - - # Unbuffer DB::OUT. We need to see responses right away. - my $previous = select($OUT); - $| = 1; # for DB::OUT - select($previous); - - # Line info goes to debugger output unless pointed elsewhere. - # Pointing elsewhere makes it possible for slave editors to - # keep track of file and position. We have both a filehandle - # and a I/O description to keep track of. - $LINEINFO = $OUT unless defined $LINEINFO; - $lineinfo = $console unless defined $lineinfo; - # share($LINEINFO); # <- unable to share globs - share($lineinfo); # - -=pod - -To finish initialization, we show the debugger greeting, -and then call the C subroutine if there is one. - -=cut - - # Show the debugger greeting. - $header =~ s/.Header: ([^,]+),v(\s+\S+\s+\S+).*$/$1$2/; - unless ($runnonstop) { - local $\ = ''; - local $, = ''; - if ( $term_pid eq '-1' ) { - print $OUT "\nDaughter DB session started...\n"; - } - else { - print $OUT "\nLoading DB routines from $header\n"; - print $OUT ( - "Editor support ", - $slave_editor ? "enabled" : "available", ".\n" - ); - print $OUT -"\nEnter h or `h h' for help, or `$doccmd perldebug' for more help.\n\n"; - } ## end else [ if ($term_pid eq '-1') - } ## end unless ($runnonstop) -} ## end else [ if ($notty) - -# XXX This looks like a bug to me. -# Why copy to @ARGS and then futz with @args? -@ARGS = @ARGV; -for (@args) { - # Make sure backslashes before single quotes are stripped out, and - # keep args unless they are numeric (XXX why?) - # s/\'/\\\'/g; # removed while not justified understandably - # s/(.*)/'$1'/ unless /^-?[\d.]+$/; # ditto -} - -# If there was an afterinit() sub defined, call it. It will get -# executed in our scope, so it can fiddle with debugger globals. -if ( defined &afterinit ) { # May be defined in $rcfile - &afterinit(); -} - -# Inform us about "Stack dump during die enabled ..." in dieLevel(). -$I_m_init = 1; - - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/perl_regex-delims b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/perl_regex-delims deleted file mode 100644 index 6da5298..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/perl_regex-delims +++ /dev/null @@ -1,120 +0,0 @@ -#! /usr/bin/env perl - -use strict; -use warnings; - -# common delimiters -print "a: "; -my $a = "foo"; -print $a, " - "; -$a =~ s/foo/bar/; -print $a, "\n"; - -print "b: "; -my $b = "foo"; -print $b, " - "; -$b =~ s!foo!bar!; -print $b, "\n"; - -print "c: "; -my $c = "foo"; -print $c, " - "; -$c =~ s@foo@bar@; -print $c, "\n"; - -print "d: "; -my $d = "foo"; -print $d, " - "; -$d =~ s\foo\bar\; -print $d, "\n"; - -print "\n"; - -# balanced delimiters -print "e: "; -my $e = "foo"; -print $e, " - "; -$e =~ s{foo}{bar}; -print $e, "\n"; - -print "f: "; -my $f = "foo"; -print $f, " - "; -$f =~ s(foo)(bar); -print $f, "\n"; - -print "g: "; -my $g = "foo"; -print $g, " - "; -$g =~ s; -print $g, "\n"; - -print "h: "; -my $h = "foo"; -print $h, " - "; -$h =~ s[foo][bar]; -print $h, "\n"; - -print "\n"; - -# balanced delimiters with whitespace -print "i: "; -my $i = "foo"; -print $i, " - "; -$i =~ s{foo} {bar}; -print $i, "\n"; - -print "j: "; -my $j = "foo"; -print $j, " - "; -$j =~ s ; -print $j, "\n"; - -print "k: "; -my $k = "foo"; -print $k, " - "; -$k =~ - s(foo) - - (bar); -print $k, "\n"; - -print "\n"; - -# mixed delimiters -print "l: "; -my $l = "foo"; -print $l, " - "; -$l =~ s{foo} ; -print $l, "\n"; - -print "m: "; -my $m = "foo"; -print $m, " - "; -$m =~ s(foo) !bar!; -print $m, "\n"; - -print "n: "; -my $n = "foo"; -print $n, " - "; -$n =~ s[foo] $bar$; -print $n, "\n"; - -print "\n"; - -# /x modifier -print "o: "; -my $o = "foo"; -print $o, " - "; -$o =~ s{ - foo - } {bar}x; -print $o, "\n"; - -print "p: "; -my $p = "foo"; -print $p, " - "; -$p =~ s% - foo - %bar%x; -print $p, "\n"; diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/perlfunc.1 b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/perlfunc.1 deleted file mode 100644 index 5f80f0d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/perlfunc.1 +++ /dev/null @@ -1,856 +0,0 @@ -.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 -.\" -.\" Standard preamble: -.\" ======================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. -.de Sp \" Vertical space (when we can't use .PP) -.if t .sp .5v -.if n .sp -.. -.de Vb \" Begin verbatim text -.ft CW -.nf -.ne \\$1 -.. -.de Ve \" End verbatim text -.ft R -.fi -.. -.\" Set up some character translations and predefined strings. \*(-- will -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to -.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' -.\" expand to `' in nroff, nothing in troff, for use with C<>. -.tr \(*W-|\(bv\*(Tr -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' -.ie n \{\ -. ds -- \(*W- -. ds PI pi -. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -. ds L" "" -. ds R" "" -. ds C` "" -. ds C' "" -'br\} -.el\{\ -. ds -- \|\(em\| -. ds PI \(*p -. ds L" `` -. ds R" '' -'br\} -.\" -.\" If the F register is turned on, we'll generate index entries on stderr for -.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index -.\" entries marked with X<> in POD. Of course, you'll have to process the -.\" output yourself in some meaningful fashion. -.if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -.. -. nr % 0 -. rr F -.\} -.\" -.\" For nroff, turn off justification. Always turn off hyphenation; it makes -.\" way too many mistakes in technical documents. -.hy 0 -.if n .na -.\" -.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). -.\" Fear. Run. Save yourself. No user-serviceable parts. -. \" fudge factors for nroff and troff -.if n \{\ -. ds #H 0 -. ds #V .8m -. ds #F .3m -. ds #[ \f1 -. ds #] \fP -.\} -.if t \{\ -. ds #H ((1u-(\\\\n(.fu%2u))*.13m) -. ds #V .6m -. ds #F 0 -. ds #[ \& -. ds #] \& -.\} -. \" simple accents for nroff and troff -.if n \{\ -. ds ' \& -. ds ` \& -. ds ^ \& -. ds , \& -. ds ~ ~ -. ds / -.\} -.if t \{\ -. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" -. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' -. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' -. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' -. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' -. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' -.\} -. \" troff and (daisy-wheel) nroff accents -.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' -.ds 8 \h'\*(#H'\(*b\h'-\*(#H' -.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] -.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' -.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' -.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] -.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] -.ds ae a\h'-(\w'a'u*4/10)'e -.ds Ae A\h'-(\w'A'u*4/10)'E -. \" corrections for vroff -.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' -.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' -. \" for low resolution devices (crt and lpr) -.if \n(.H>23 .if \n(.V>19 \ -\{\ -. ds : e -. ds 8 ss -. ds o a -. ds d- d\h'-1'\(ga -. ds D- D\h'-1'\(hy -. ds th \o'bp' -. ds Th \o'LP' -. ds ae ae -. ds Ae AE -.\} -.rm #[ #] #H #V #F C -.\" ======================================================================== -.\" -.IX Title "PERLFUNC 1" -.TH PERLFUNC 1 "2006-01-07" "perl v5.8.8" "Perl Programmers Reference Guide" -.SH "NAME" -.IX Xref "function" -perlfunc \- Perl builtin functions -.SH "DESCRIPTION" -.IX Header "DESCRIPTION" -The functions in this section can serve as terms in an expression. -They fall into two major categories: list operators and named unary -operators. These differ in their precedence relationship with a -following comma. (See the precedence table in perlop.) List -operators take more than one argument, while unary operators can never -take more than one argument. Thus, a comma terminates the argument of -a unary operator, but merely separates the arguments of a list -operator. A unary operator generally provides a scalar context to its -argument, while a list operator may provide either scalar or list -contexts for its arguments. If it does both, the scalar arguments will -be first, and the list argument will follow. (Note that there can ever -be only one such list argument.) For instance, \fIsplice()\fR has three scalar -arguments followed by a list, whereas \fIgethostbyname()\fR has four scalar -arguments. -.PP -In the syntax descriptions that follow, list operators that expect a -list (and provide list context for the elements of the list) are shown -with \s-1LIST\s0 as an argument. Such a list may consist of any combination -of scalar arguments or list values; the list values will be included -in the list as if each individual element were interpolated at that -point in the list, forming a longer single-dimensional list value. -Commas should separate elements of the \s-1LIST\s0. -.PP -Any function in the list below may be used either with or without -parentheses around its arguments. (The syntax descriptions omit the -parentheses.) If you use the parentheses, the simple (but occasionally -surprising) rule is this: It \fIlooks\fR like a function, therefore it \fIis\fR a -function, and precedence doesn't matter. Otherwise it's a list -operator or unary operator, and precedence does matter. And whitespace -between the function and left parenthesis doesn't count\*(--so you need to -be careful sometimes: -.PP -.Vb 5 -\& print 1+2+4; # Prints 7. -\& print(1+2) + 4; # Prints 3. -\& print (1+2)+4; # Also prints 3! -\& print +(1+2)+4; # Prints 7. -\& print ((1+2)+4); # Prints 7. -.Ve -.PP -If you run Perl with the \fB\-w\fR switch it can warn you about this. For -example, the third line above produces: -.PP -.Vb 2 -\& print (...) interpreted as function at - line 1. -\& Useless use of integer addition in void context at - line 1. -.Ve -.PP -A few functions take no arguments at all, and therefore work as neither -unary nor list operators. These include such functions as \f(CW\*(C`time\*(C'\fR -and \f(CW\*(C`endpwent\*(C'\fR. For example, \f(CW\*(C`time+86_400\*(C'\fR always means -\&\f(CW\*(C`time() + 86_400\*(C'\fR. -.PP -For functions that can be used in either a scalar or list context, -nonabortive failure is generally indicated in a scalar context by -returning the undefined value, and in a list context by returning the -null list. -.PP -Remember the following important rule: There is \fBno rule\fR that relates -the behavior of an expression in list context to its behavior in scalar -context, or vice versa. It might do two totally different things. -Each operator and function decides which sort of value it would be most -appropriate to return in scalar context. Some operators return the -length of the list that would have been returned in list context. Some -operators return the first value in the list. Some operators return the -last value in the list. Some operators return a count of successful -operations. In general, they do what you want, unless you want -consistency. -.IX Xref "context" -.PP -A named array in scalar context is quite different from what would at -first glance appear to be a list in scalar context. You can't get a list -like \f(CW\*(C`(1,2,3)\*(C'\fR into being in scalar context, because the compiler knows -the context at compile time. It would generate the scalar comma operator -there, not the list construction version of the comma. That means it -was never a list to start with. -.PP -In general, functions in Perl that serve as wrappers for system calls -of the same name (like \fIchown\fR\|(2), \fIfork\fR\|(2), \fIclosedir\fR\|(2), etc.) all return -true when they succeed and \f(CW\*(C`undef\*(C'\fR otherwise, as is usually mentioned -in the descriptions below. This is different from the C interfaces, -which return \f(CW\*(C`\-1\*(C'\fR on failure. Exceptions to this rule are \f(CW\*(C`wait\*(C'\fR, -\&\f(CW\*(C`waitpid\*(C'\fR, and \f(CW\*(C`syscall\*(C'\fR. System calls also set the special \f(CW$!\fR -variable on failure. Other functions do not, except accidentally. -.Sh "Perl Functions by Category" -.IX Xref "function" -.IX Subsection "Perl Functions by Category" -Here are Perl's functions (including things that look like -functions, like some keywords and named operators) -arranged by category. Some functions appear in more -than one place. -.IP "Functions for SCALARs or strings" 4 -.IX Xref "scalar string character" -.IX Item "Functions for SCALARs or strings" -\&\f(CW\*(C`chomp\*(C'\fR, \f(CW\*(C`chop\*(C'\fR, \f(CW\*(C`chr\*(C'\fR, \f(CW\*(C`crypt\*(C'\fR, \f(CW\*(C`hex\*(C'\fR, \f(CW\*(C`index\*(C'\fR, \f(CW\*(C`lc\*(C'\fR, \f(CW\*(C`lcfirst\*(C'\fR, -\&\f(CW\*(C`length\*(C'\fR, \f(CW\*(C`oct\*(C'\fR, \f(CW\*(C`ord\*(C'\fR, \f(CW\*(C`pack\*(C'\fR, \f(CW\*(C`q/STRING/\*(C'\fR, \f(CW\*(C`qq/STRING/\*(C'\fR, \f(CW\*(C`reverse\*(C'\fR, -\&\f(CW\*(C`rindex\*(C'\fR, \f(CW\*(C`sprintf\*(C'\fR, \f(CW\*(C`substr\*(C'\fR, \f(CW\*(C`tr///\*(C'\fR, \f(CW\*(C`uc\*(C'\fR, \f(CW\*(C`ucfirst\*(C'\fR, \f(CW\*(C`y///\*(C'\fR -.IP "Regular expressions and pattern matching" 4 -.IX Xref "regular expression regex regexp" -.IX Item "Regular expressions and pattern matching" -\&\f(CW\*(C`m//\*(C'\fR, \f(CW\*(C`pos\*(C'\fR, \f(CW\*(C`quotemeta\*(C'\fR, \f(CW\*(C`s///\*(C'\fR, \f(CW\*(C`split\*(C'\fR, \f(CW\*(C`study\*(C'\fR, \f(CW\*(C`qr//\*(C'\fR -.IP "Numeric functions" 4 -.IX Xref "numeric number trigonometric trigonometry" -.IX Item "Numeric functions" -\&\f(CW\*(C`abs\*(C'\fR, \f(CW\*(C`atan2\*(C'\fR, \f(CW\*(C`cos\*(C'\fR, \f(CW\*(C`exp\*(C'\fR, \f(CW\*(C`hex\*(C'\fR, \f(CW\*(C`int\*(C'\fR, \f(CW\*(C`log\*(C'\fR, \f(CW\*(C`oct\*(C'\fR, \f(CW\*(C`rand\*(C'\fR, -\&\f(CW\*(C`sin\*(C'\fR, \f(CW\*(C`sqrt\*(C'\fR, \f(CW\*(C`srand\*(C'\fR -.ie n .IP "Functions for real @ARRAYs" 4 -.el .IP "Functions for real \f(CW@ARRAYs\fR" 4 -.IX Xref "array" -.IX Item "Functions for real @ARRAYs" -\&\f(CW\*(C`pop\*(C'\fR, \f(CW\*(C`push\*(C'\fR, \f(CW\*(C`shift\*(C'\fR, \f(CW\*(C`splice\*(C'\fR, \f(CW\*(C`unshift\*(C'\fR -.IP "Functions for list data" 4 -.IX Xref "list" -.IX Item "Functions for list data" -\&\f(CW\*(C`grep\*(C'\fR, \f(CW\*(C`join\*(C'\fR, \f(CW\*(C`map\*(C'\fR, \f(CW\*(C`qw/STRING/\*(C'\fR, \f(CW\*(C`reverse\*(C'\fR, \f(CW\*(C`sort\*(C'\fR, \f(CW\*(C`unpack\*(C'\fR -.ie n .IP "Functions for real %HASHes" 4 -.el .IP "Functions for real \f(CW%HASHes\fR" 4 -.IX Xref "hash" -.IX Item "Functions for real %HASHes" -\&\f(CW\*(C`delete\*(C'\fR, \f(CW\*(C`each\*(C'\fR, \f(CW\*(C`exists\*(C'\fR, \f(CW\*(C`keys\*(C'\fR, \f(CW\*(C`values\*(C'\fR -.IP "Input and output functions" 4 -.IX Xref "I O input output dbm" -.IX Item "Input and output functions" -\&\f(CW\*(C`binmode\*(C'\fR, \f(CW\*(C`close\*(C'\fR, \f(CW\*(C`closedir\*(C'\fR, \f(CW\*(C`dbmclose\*(C'\fR, \f(CW\*(C`dbmopen\*(C'\fR, \f(CW\*(C`die\*(C'\fR, \f(CW\*(C`eof\*(C'\fR, -\&\f(CW\*(C`fileno\*(C'\fR, \f(CW\*(C`flock\*(C'\fR, \f(CW\*(C`format\*(C'\fR, \f(CW\*(C`getc\*(C'\fR, \f(CW\*(C`print\*(C'\fR, \f(CW\*(C`printf\*(C'\fR, \f(CW\*(C`read\*(C'\fR, -\&\f(CW\*(C`readdir\*(C'\fR, \f(CW\*(C`rewinddir\*(C'\fR, \f(CW\*(C`seek\*(C'\fR, \f(CW\*(C`seekdir\*(C'\fR, \f(CW\*(C`select\*(C'\fR, \f(CW\*(C`syscall\*(C'\fR, -\&\f(CW\*(C`sysread\*(C'\fR, \f(CW\*(C`sysseek\*(C'\fR, \f(CW\*(C`syswrite\*(C'\fR, \f(CW\*(C`tell\*(C'\fR, \f(CW\*(C`telldir\*(C'\fR, \f(CW\*(C`truncate\*(C'\fR, -\&\f(CW\*(C`warn\*(C'\fR, \f(CW\*(C`write\*(C'\fR -.IP "Functions for fixed length data or records" 4 -.IX Item "Functions for fixed length data or records" -\&\f(CW\*(C`pack\*(C'\fR, \f(CW\*(C`read\*(C'\fR, \f(CW\*(C`syscall\*(C'\fR, \f(CW\*(C`sysread\*(C'\fR, \f(CW\*(C`syswrite\*(C'\fR, \f(CW\*(C`unpack\*(C'\fR, \f(CW\*(C`vec\*(C'\fR -.IP "Functions for filehandles, files, or directories" 4 -.IX Xref "file filehandle directory pipe link symlink" -.IX Item "Functions for filehandles, files, or directories" -\&\f(CW\*(C`\-\f(CIX\f(CW\*(C'\fR, \f(CW\*(C`chdir\*(C'\fR, \f(CW\*(C`chmod\*(C'\fR, \f(CW\*(C`chown\*(C'\fR, \f(CW\*(C`chroot\*(C'\fR, \f(CW\*(C`fcntl\*(C'\fR, \f(CW\*(C`glob\*(C'\fR, -\&\f(CW\*(C`ioctl\*(C'\fR, \f(CW\*(C`link\*(C'\fR, \f(CW\*(C`lstat\*(C'\fR, \f(CW\*(C`mkdir\*(C'\fR, \f(CW\*(C`open\*(C'\fR, \f(CW\*(C`opendir\*(C'\fR, -\&\f(CW\*(C`readlink\*(C'\fR, \f(CW\*(C`rename\*(C'\fR, \f(CW\*(C`rmdir\*(C'\fR, \f(CW\*(C`stat\*(C'\fR, \f(CW\*(C`symlink\*(C'\fR, \f(CW\*(C`sysopen\*(C'\fR, -\&\f(CW\*(C`umask\*(C'\fR, \f(CW\*(C`unlink\*(C'\fR, \f(CW\*(C`utime\*(C'\fR -.IP "Keywords related to the control flow of your Perl program" 4 -.IX Xref "control flow" -.IX Item "Keywords related to the control flow of your Perl program" -\&\f(CW\*(C`caller\*(C'\fR, \f(CW\*(C`continue\*(C'\fR, \f(CW\*(C`die\*(C'\fR, \f(CW\*(C`do\*(C'\fR, \f(CW\*(C`dump\*(C'\fR, \f(CW\*(C`eval\*(C'\fR, \f(CW\*(C`exit\*(C'\fR, -\&\f(CW\*(C`goto\*(C'\fR, \f(CW\*(C`last\*(C'\fR, \f(CW\*(C`next\*(C'\fR, \f(CW\*(C`redo\*(C'\fR, \f(CW\*(C`return\*(C'\fR, \f(CW\*(C`sub\*(C'\fR, \f(CW\*(C`wantarray\*(C'\fR -.IP "Keywords related to scoping" 4 -.IX Item "Keywords related to scoping" -\&\f(CW\*(C`caller\*(C'\fR, \f(CW\*(C`import\*(C'\fR, \f(CW\*(C`local\*(C'\fR, \f(CW\*(C`my\*(C'\fR, \f(CW\*(C`our\*(C'\fR, \f(CW\*(C`package\*(C'\fR, \f(CW\*(C`use\*(C'\fR -.IP "Miscellaneous functions" 4 -.IX Item "Miscellaneous functions" -\&\f(CW\*(C`defined\*(C'\fR, \f(CW\*(C`dump\*(C'\fR, \f(CW\*(C`eval\*(C'\fR, \f(CW\*(C`formline\*(C'\fR, \f(CW\*(C`local\*(C'\fR, \f(CW\*(C`my\*(C'\fR, \f(CW\*(C`our\*(C'\fR, \f(CW\*(C`reset\*(C'\fR, -\&\f(CW\*(C`scalar\*(C'\fR, \f(CW\*(C`undef\*(C'\fR, \f(CW\*(C`wantarray\*(C'\fR -.IP "Functions for processes and process groups" 4 -.IX Xref "process pid process id" -.IX Item "Functions for processes and process groups" -\&\f(CW\*(C`alarm\*(C'\fR, \f(CW\*(C`exec\*(C'\fR, \f(CW\*(C`fork\*(C'\fR, \f(CW\*(C`getpgrp\*(C'\fR, \f(CW\*(C`getppid\*(C'\fR, \f(CW\*(C`getpriority\*(C'\fR, \f(CW\*(C`kill\*(C'\fR, -\&\f(CW\*(C`pipe\*(C'\fR, \f(CW\*(C`qx/STRING/\*(C'\fR, \f(CW\*(C`setpgrp\*(C'\fR, \f(CW\*(C`setpriority\*(C'\fR, \f(CW\*(C`sleep\*(C'\fR, \f(CW\*(C`system\*(C'\fR, -\&\f(CW\*(C`times\*(C'\fR, \f(CW\*(C`wait\*(C'\fR, \f(CW\*(C`waitpid\*(C'\fR -.IP "Keywords related to perl modules" 4 -.IX Xref "module" -.IX Item "Keywords related to perl modules" -\&\f(CW\*(C`do\*(C'\fR, \f(CW\*(C`import\*(C'\fR, \f(CW\*(C`no\*(C'\fR, \f(CW\*(C`package\*(C'\fR, \f(CW\*(C`require\*(C'\fR, \f(CW\*(C`use\*(C'\fR -.IP "Keywords related to classes and object-orientedness" 4 -.IX Xref "object class package" -.IX Item "Keywords related to classes and object-orientedness" -\&\f(CW\*(C`bless\*(C'\fR, \f(CW\*(C`dbmclose\*(C'\fR, \f(CW\*(C`dbmopen\*(C'\fR, \f(CW\*(C`package\*(C'\fR, \f(CW\*(C`ref\*(C'\fR, \f(CW\*(C`tie\*(C'\fR, \f(CW\*(C`tied\*(C'\fR, -\&\f(CW\*(C`untie\*(C'\fR, \f(CW\*(C`use\*(C'\fR -.IP "Low-level socket functions" 4 -.IX Xref "socket sock" -.IX Item "Low-level socket functions" -\&\f(CW\*(C`accept\*(C'\fR, \f(CW\*(C`bind\*(C'\fR, \f(CW\*(C`connect\*(C'\fR, \f(CW\*(C`getpeername\*(C'\fR, \f(CW\*(C`getsockname\*(C'\fR, -\&\f(CW\*(C`getsockopt\*(C'\fR, \f(CW\*(C`listen\*(C'\fR, \f(CW\*(C`recv\*(C'\fR, \f(CW\*(C`send\*(C'\fR, \f(CW\*(C`setsockopt\*(C'\fR, \f(CW\*(C`shutdown\*(C'\fR, -\&\f(CW\*(C`socket\*(C'\fR, \f(CW\*(C`socketpair\*(C'\fR -.IP "System V interprocess communication functions" 4 -.IX Xref "IPC System V semaphore shared memory memory message" -.IX Item "System V interprocess communication functions" -\&\f(CW\*(C`msgctl\*(C'\fR, \f(CW\*(C`msgget\*(C'\fR, \f(CW\*(C`msgrcv\*(C'\fR, \f(CW\*(C`msgsnd\*(C'\fR, \f(CW\*(C`semctl\*(C'\fR, \f(CW\*(C`semget\*(C'\fR, \f(CW\*(C`semop\*(C'\fR, -\&\f(CW\*(C`shmctl\*(C'\fR, \f(CW\*(C`shmget\*(C'\fR, \f(CW\*(C`shmread\*(C'\fR, \f(CW\*(C`shmwrite\*(C'\fR -.IP "Fetching user and group info" 4 -.IX Xref "user group password uid gid passwd etc passwd" -.IX Item "Fetching user and group info" -\&\f(CW\*(C`endgrent\*(C'\fR, \f(CW\*(C`endhostent\*(C'\fR, \f(CW\*(C`endnetent\*(C'\fR, \f(CW\*(C`endpwent\*(C'\fR, \f(CW\*(C`getgrent\*(C'\fR, -\&\f(CW\*(C`getgrgid\*(C'\fR, \f(CW\*(C`getgrnam\*(C'\fR, \f(CW\*(C`getlogin\*(C'\fR, \f(CW\*(C`getpwent\*(C'\fR, \f(CW\*(C`getpwnam\*(C'\fR, -\&\f(CW\*(C`getpwuid\*(C'\fR, \f(CW\*(C`setgrent\*(C'\fR, \f(CW\*(C`setpwent\*(C'\fR -.IP "Fetching network info" 4 -.IX Xref "network protocol host hostname IP address service" -.IX Item "Fetching network info" -\&\f(CW\*(C`endprotoent\*(C'\fR, \f(CW\*(C`endservent\*(C'\fR, \f(CW\*(C`gethostbyaddr\*(C'\fR, \f(CW\*(C`gethostbyname\*(C'\fR, -\&\f(CW\*(C`gethostent\*(C'\fR, \f(CW\*(C`getnetbyaddr\*(C'\fR, \f(CW\*(C`getnetbyname\*(C'\fR, \f(CW\*(C`getnetent\*(C'\fR, -\&\f(CW\*(C`getprotobyname\*(C'\fR, \f(CW\*(C`getprotobynumber\*(C'\fR, \f(CW\*(C`getprotoent\*(C'\fR, -\&\f(CW\*(C`getservbyname\*(C'\fR, \f(CW\*(C`getservbyport\*(C'\fR, \f(CW\*(C`getservent\*(C'\fR, \f(CW\*(C`sethostent\*(C'\fR, -\&\f(CW\*(C`setnetent\*(C'\fR, \f(CW\*(C`setprotoent\*(C'\fR, \f(CW\*(C`setservent\*(C'\fR -.IP "Time-related functions" 4 -.IX Xref "time date" -.IX Item "Time-related functions" -\&\f(CW\*(C`gmtime\*(C'\fR, \f(CW\*(C`localtime\*(C'\fR, \f(CW\*(C`time\*(C'\fR, \f(CW\*(C`times\*(C'\fR -.IP "Functions new in perl5" 4 -.IX Xref "perl5" -.IX Item "Functions new in perl5" -\&\f(CW\*(C`abs\*(C'\fR, \f(CW\*(C`bless\*(C'\fR, \f(CW\*(C`chomp\*(C'\fR, \f(CW\*(C`chr\*(C'\fR, \f(CW\*(C`exists\*(C'\fR, \f(CW\*(C`formline\*(C'\fR, \f(CW\*(C`glob\*(C'\fR, -\&\f(CW\*(C`import\*(C'\fR, \f(CW\*(C`lc\*(C'\fR, \f(CW\*(C`lcfirst\*(C'\fR, \f(CW\*(C`map\*(C'\fR, \f(CW\*(C`my\*(C'\fR, \f(CW\*(C`no\*(C'\fR, \f(CW\*(C`our\*(C'\fR, \f(CW\*(C`prototype\*(C'\fR, -\&\f(CW\*(C`qx\*(C'\fR, \f(CW\*(C`qw\*(C'\fR, \f(CW\*(C`readline\*(C'\fR, \f(CW\*(C`readpipe\*(C'\fR, \f(CW\*(C`ref\*(C'\fR, \f(CW\*(C`sub*\*(C'\fR, \f(CW\*(C`sysopen\*(C'\fR, \f(CW\*(C`tie\*(C'\fR, -\&\f(CW\*(C`tied\*(C'\fR, \f(CW\*(C`uc\*(C'\fR, \f(CW\*(C`ucfirst\*(C'\fR, \f(CW\*(C`untie\*(C'\fR, \f(CW\*(C`use\*(C'\fR -.Sp -* \- \f(CW\*(C`sub\*(C'\fR was a keyword in perl4, but in perl5 it is an -operator, which can be used in expressions. -.IP "Functions obsoleted in perl5" 4 -.IX Item "Functions obsoleted in perl5" -\&\f(CW\*(C`dbmclose\*(C'\fR, \f(CW\*(C`dbmopen\*(C'\fR -.Sh "Portability" -.IX Xref "portability Unix portable" -.IX Subsection "Portability" -Perl was born in Unix and can therefore access all common Unix -system calls. In non-Unix environments, the functionality of some -Unix system calls may not be available, or details of the available -functionality may differ slightly. The Perl functions affected -by this are: -.PP -\&\f(CW\*(C`\-X\*(C'\fR, \f(CW\*(C`binmode\*(C'\fR, \f(CW\*(C`chmod\*(C'\fR, \f(CW\*(C`chown\*(C'\fR, \f(CW\*(C`chroot\*(C'\fR, \f(CW\*(C`crypt\*(C'\fR, -\&\f(CW\*(C`dbmclose\*(C'\fR, \f(CW\*(C`dbmopen\*(C'\fR, \f(CW\*(C`dump\*(C'\fR, \f(CW\*(C`endgrent\*(C'\fR, \f(CW\*(C`endhostent\*(C'\fR, -\&\f(CW\*(C`endnetent\*(C'\fR, \f(CW\*(C`endprotoent\*(C'\fR, \f(CW\*(C`endpwent\*(C'\fR, \f(CW\*(C`endservent\*(C'\fR, \f(CW\*(C`exec\*(C'\fR, -\&\f(CW\*(C`fcntl\*(C'\fR, \f(CW\*(C`flock\*(C'\fR, \f(CW\*(C`fork\*(C'\fR, \f(CW\*(C`getgrent\*(C'\fR, \f(CW\*(C`getgrgid\*(C'\fR, \f(CW\*(C`gethostbyname\*(C'\fR, -\&\f(CW\*(C`gethostent\*(C'\fR, \f(CW\*(C`getlogin\*(C'\fR, \f(CW\*(C`getnetbyaddr\*(C'\fR, \f(CW\*(C`getnetbyname\*(C'\fR, \f(CW\*(C`getnetent\*(C'\fR, -\&\f(CW\*(C`getppid\*(C'\fR, \f(CW\*(C`getpgrp\*(C'\fR, \f(CW\*(C`getpriority\*(C'\fR, \f(CW\*(C`getprotobynumber\*(C'\fR, -\&\f(CW\*(C`getprotoent\*(C'\fR, \f(CW\*(C`getpwent\*(C'\fR, \f(CW\*(C`getpwnam\*(C'\fR, \f(CW\*(C`getpwuid\*(C'\fR, -\&\f(CW\*(C`getservbyport\*(C'\fR, \f(CW\*(C`getservent\*(C'\fR, \f(CW\*(C`getsockopt\*(C'\fR, \f(CW\*(C`glob\*(C'\fR, \f(CW\*(C`ioctl\*(C'\fR, -\&\f(CW\*(C`kill\*(C'\fR, \f(CW\*(C`link\*(C'\fR, \f(CW\*(C`lstat\*(C'\fR, \f(CW\*(C`msgctl\*(C'\fR, \f(CW\*(C`msgget\*(C'\fR, \f(CW\*(C`msgrcv\*(C'\fR, -\&\f(CW\*(C`msgsnd\*(C'\fR, \f(CW\*(C`open\*(C'\fR, \f(CW\*(C`pipe\*(C'\fR, \f(CW\*(C`readlink\*(C'\fR, \f(CW\*(C`rename\*(C'\fR, \f(CW\*(C`select\*(C'\fR, \f(CW\*(C`semctl\*(C'\fR, -\&\f(CW\*(C`semget\*(C'\fR, \f(CW\*(C`semop\*(C'\fR, \f(CW\*(C`setgrent\*(C'\fR, \f(CW\*(C`sethostent\*(C'\fR, \f(CW\*(C`setnetent\*(C'\fR, -\&\f(CW\*(C`setpgrp\*(C'\fR, \f(CW\*(C`setpriority\*(C'\fR, \f(CW\*(C`setprotoent\*(C'\fR, \f(CW\*(C`setpwent\*(C'\fR, -\&\f(CW\*(C`setservent\*(C'\fR, \f(CW\*(C`setsockopt\*(C'\fR, \f(CW\*(C`shmctl\*(C'\fR, \f(CW\*(C`shmget\*(C'\fR, \f(CW\*(C`shmread\*(C'\fR, -\&\f(CW\*(C`shmwrite\*(C'\fR, \f(CW\*(C`socket\*(C'\fR, \f(CW\*(C`socketpair\*(C'\fR, -\&\f(CW\*(C`stat\*(C'\fR, \f(CW\*(C`symlink\*(C'\fR, \f(CW\*(C`syscall\*(C'\fR, \f(CW\*(C`sysopen\*(C'\fR, \f(CW\*(C`system\*(C'\fR, -\&\f(CW\*(C`times\*(C'\fR, \f(CW\*(C`truncate\*(C'\fR, \f(CW\*(C`umask\*(C'\fR, \f(CW\*(C`unlink\*(C'\fR, -\&\f(CW\*(C`utime\*(C'\fR, \f(CW\*(C`wait\*(C'\fR, \f(CW\*(C`waitpid\*(C'\fR -.PP -For more information about the portability of these functions, see -perlport and other available platform-specific documentation. -.Sh "Alphabetical Listing of Perl Functions" -.IX Subsection "Alphabetical Listing of Perl Functions" -.IP "\-X \s-1FILEHANDLE\s0" 8 -.IX Xref "-r -w -x -o -R -W -X -O -e -z -s -f -d -l -p -S -b -c -t -u -g -k -T -B -M -A -C" -.IX Item "-X FILEHANDLE" -.PD 0 -.IP "\-X \s-1EXPR\s0" 8 -.IX Item "-X EXPR" -.IP "\-X" 8 -.IX Item "-X" -.PD -A file test, where X is one of the letters listed below. This unary -operator takes one argument, either a filename or a filehandle, and -tests the associated file to see if something is true about it. If the -argument is omitted, tests \f(CW$_\fR, except for \f(CW\*(C`\-t\*(C'\fR, which tests \s-1STDIN\s0. -Unless otherwise documented, it returns \f(CW1\fR for true and \f(CW''\fR for false, or -the undefined value if the file doesn't exist. Despite the funny -names, precedence is the same as any other named unary operator, and -the argument may be parenthesized like any other unary operator. The -operator may be any of: -.Sp -.Vb 4 -\& -r File is readable by effective uid/gid. -\& -w File is writable by effective uid/gid. -\& -x File is executable by effective uid/gid. -\& -o File is owned by effective uid. -.Ve -.Sp -.Vb 4 -\& -R File is readable by real uid/gid. -\& -W File is writable by real uid/gid. -\& -X File is executable by real uid/gid. -\& -O File is owned by real uid. -.Ve -.Sp -.Vb 3 -\& -e File exists. -\& -z File has zero size (is empty). -\& -s File has nonzero size (returns size in bytes). -.Ve -.Sp -.Vb 8 -\& -f File is a plain file. -\& -d File is a directory. -\& -l File is a symbolic link. -\& -p File is a named pipe (FIFO), or Filehandle is a pipe. -\& -S File is a socket. -\& -b File is a block special file. -\& -c File is a character special file. -\& -t Filehandle is opened to a tty. -.Ve -.Sp -.Vb 3 -\& -u File has setuid bit set. -\& -g File has setgid bit set. -\& -k File has sticky bit set. -.Ve -.Sp -.Vb 2 -\& -T File is an ASCII text file (heuristic guess). -\& -B File is a "binary" file (opposite of -T). -.Ve -.Sp -.Vb 3 -\& -M Script start time minus file modification time, in days. -\& -A Same for access time. -\& -C Same for inode change time (Unix, may differ for other platforms) -.Ve -.Sp -Example: -.Sp -.Vb 5 -\& while (<>) { -\& chomp; -\& next unless -f $_; # ignore specials -\& #... -\& } -.Ve -.Sp -The interpretation of the file permission operators \f(CW\*(C`\-r\*(C'\fR, \f(CW\*(C`\-R\*(C'\fR, -\&\f(CW\*(C`\-w\*(C'\fR, \f(CW\*(C`\-W\*(C'\fR, \f(CW\*(C`\-x\*(C'\fR, and \f(CW\*(C`\-X\*(C'\fR is by default based solely on the mode -of the file and the uids and gids of the user. There may be other -reasons you can't actually read, write, or execute the file. Such -reasons may be for example network filesystem access controls, ACLs -(access control lists), read-only filesystems, and unrecognized -executable formats. -.Sp -Also note that, for the superuser on the local filesystems, the \f(CW\*(C`\-r\*(C'\fR, -\&\f(CW\*(C`\-R\*(C'\fR, \f(CW\*(C`\-w\*(C'\fR, and \f(CW\*(C`\-W\*(C'\fR tests always return 1, and \f(CW\*(C`\-x\*(C'\fR and \f(CW\*(C`\-X\*(C'\fR return 1 -if any execute bit is set in the mode. Scripts run by the superuser -may thus need to do a \fIstat()\fR to determine the actual mode of the file, -or temporarily set their effective uid to something else. -.Sp -If you are using ACLs, there is a pragma called \f(CW\*(C`filetest\*(C'\fR that may -produce more accurate results than the bare \fIstat()\fR mode bits. -When under the \f(CW\*(C`use filetest 'access'\*(C'\fR the above-mentioned filetests -will test whether the permission can (not) be granted using the -\&\fIaccess()\fR family of system calls. Also note that the \f(CW\*(C`\-x\*(C'\fR and \f(CW\*(C`\-X\*(C'\fR may -under this pragma return true even if there are no execute permission -bits set (nor any extra execute permission ACLs). This strangeness is -due to the underlying system calls' definitions. Read the -documentation for the \f(CW\*(C`filetest\*(C'\fR pragma for more information. -.Sp -Note that \f(CW\*(C`\-s/a/b/\*(C'\fR does not do a negated substitution. Saying -\&\f(CW\*(C`\-exp($foo)\*(C'\fR still works as expected, however\*(--only single letters -following a minus are interpreted as file tests. -.Sp -The \f(CW\*(C`\-T\*(C'\fR and \f(CW\*(C`\-B\*(C'\fR switches work as follows. The first block or so of the -file is examined for odd characters such as strange control codes or -characters with the high bit set. If too many strange characters (>30%) -are found, it's a \f(CW\*(C`\-B\*(C'\fR file; otherwise it's a \f(CW\*(C`\-T\*(C'\fR file. Also, any file -containing null in the first block is considered a binary file. If \f(CW\*(C`\-T\*(C'\fR -or \f(CW\*(C`\-B\*(C'\fR is used on a filehandle, the current \s-1IO\s0 buffer is examined -rather than the first block. Both \f(CW\*(C`\-T\*(C'\fR and \f(CW\*(C`\-B\*(C'\fR return true on a null -file, or a file at \s-1EOF\s0 when testing a filehandle. Because you have to -read a file to do the \f(CW\*(C`\-T\*(C'\fR test, on most occasions you want to use a \f(CW\*(C`\-f\*(C'\fR -against the file first, as in \f(CW\*(C`next unless \-f $file && \-T $file\*(C'\fR. -.Sp -If any of the file tests (or either the \f(CW\*(C`stat\*(C'\fR or \f(CW\*(C`lstat\*(C'\fR operators) are given -the special filehandle consisting of a solitary underline, then the stat -structure of the previous file test (or stat operator) is used, saving -a system call. (This doesn't work with \f(CW\*(C`\-t\*(C'\fR, and you need to remember -that \fIlstat()\fR and \f(CW\*(C`\-l\*(C'\fR will leave values in the stat structure for the -symbolic link, not the real file.) (Also, if the stat buffer was filled by -an \f(CW\*(C`lstat\*(C'\fR call, \f(CW\*(C`\-T\*(C'\fR and \f(CW\*(C`\-B\*(C'\fR will reset it with the results of \f(CW\*(C`stat _\*(C'\fR). -Example: -.Sp -.Vb 1 -\& print "Can do.\en" if -r $a || -w _ || -x _; -.Ve -.Sp -.Vb 9 -\& stat($filename); -\& print "Readable\en" if -r _; -\& print "Writable\en" if -w _; -\& print "Executable\en" if -x _; -\& print "Setuid\en" if -u _; -\& print "Setgid\en" if -g _; -\& print "Sticky\en" if -k _; -\& print "Text\en" if -T _; -\& print "Binary\en" if -B _; -.Ve -.IP "abs \s-1VALUE\s0" 8 -.IX Xref "abs absolute" -.IX Item "abs VALUE" -.PD 0 -.IP "abs" 8 -.IX Item "abs" -.PD -Returns the absolute value of its argument. -If \s-1VALUE\s0 is omitted, uses \f(CW$_\fR. -.IP "accept \s-1NEWSOCKET\s0,GENERICSOCKET" 8 -.IX Xref "accept" -.IX Item "accept NEWSOCKET,GENERICSOCKET" -Accepts an incoming socket connect, just as the \fIaccept\fR\|(2) system call -does. Returns the packed address if it succeeded, false otherwise. -See the example in \*(L"Sockets: Client/Server Communication\*(R" in perlipc. -.Sp -On systems that support a close-on-exec flag on files, the flag will -be set for the newly opened file descriptor, as determined by the -value of $^F. See \*(L"$^F\*(R" in perlvar. -.IP "alarm \s-1SECONDS\s0" 8 -.IX Xref "alarm SIGALRM timer" -.IX Item "alarm SECONDS" -.PD 0 -.IP "alarm" 8 -.IX Item "alarm" -.PD -Arranges to have a \s-1SIGALRM\s0 delivered to this process after the -specified number of wallclock seconds has elapsed. If \s-1SECONDS\s0 is not -specified, the value stored in \f(CW$_\fR is used. (On some machines, -unfortunately, the elapsed time may be up to one second less or more -than you specified because of how seconds are counted, and process -scheduling may delay the delivery of the signal even further.) -.Sp -Only one timer may be counting at once. Each call disables the -previous timer, and an argument of \f(CW0\fR may be supplied to cancel the -previous timer without starting a new one. The returned value is the -amount of time remaining on the previous timer. -.Sp -For delays of finer granularity than one second, you may use Perl's -four-argument version of \fIselect()\fR leaving the first three arguments -undefined, or you might be able to use the \f(CW\*(C`syscall\*(C'\fR interface to -access \fIsetitimer\fR\|(2) if your system supports it. The Time::HiRes -module (from \s-1CPAN\s0, and starting from Perl 5.8 part of the standard -distribution) may also prove useful. -.Sp -It is usually a mistake to intermix \f(CW\*(C`alarm\*(C'\fR and \f(CW\*(C`sleep\*(C'\fR calls. -(\f(CW\*(C`sleep\*(C'\fR may be internally implemented in your system with \f(CW\*(C`alarm\*(C'\fR) -.Sp -If you want to use \f(CW\*(C`alarm\*(C'\fR to time out a system call you need to use an -\&\f(CW\*(C`eval\*(C'\fR/\f(CW\*(C`die\*(C'\fR pair. You can't rely on the alarm causing the system call to -fail with \f(CW$!\fR set to \f(CW\*(C`EINTR\*(C'\fR because Perl sets up signal handlers to -restart system calls on some systems. Using \f(CW\*(C`eval\*(C'\fR/\f(CW\*(C`die\*(C'\fR always works, -modulo the caveats given in \*(L"Signals\*(R" in perlipc. -.Sp -.Vb 13 -\& eval { -\& local $SIG{ALRM} = sub { die "alarm\en" }; # NB: \en required -\& alarm $timeout; -\& $nread = sysread SOCKET, $buffer, $size; -\& alarm 0; -\& }; -\& if ($@) { -\& die unless $@ eq "alarm\en"; # propagate unexpected errors -\& # timed out -\& } -\& else { -\& # didn't -\& } -.Ve -.Sp -For more information see perlipc. -.IP "atan2 Y,X" 8 -.IX Xref "atan2 arctangent tan tangent" -.IX Item "atan2 Y,X" -Returns the arctangent of Y/X in the range \-PI to \s-1PI\s0. -.Sp -For the tangent operation, you may use the \f(CW\*(C`Math::Trig::tan\*(C'\fR -function, or use the familiar relation: -.Sp -.Vb 1 -\& sub tan { sin($_[0]) / cos($_[0]) } -.Ve -.Sp -Note that atan2(0, 0) is not well\-defined. -.IP "bind \s-1SOCKET\s0,NAME" 8 -.IX Xref "bind" -.IX Item "bind SOCKET,NAME" -Binds a network address to a socket, just as the bind system call -does. Returns true if it succeeded, false otherwise. \s-1NAME\s0 should be a -packed address of the appropriate type for the socket. See the examples in -\&\*(L"Sockets: Client/Server Communication\*(R" in perlipc. -.IP "binmode \s-1FILEHANDLE\s0, \s-1LAYER\s0" 8 -.IX Xref "binmode binary text DOS Windows" -.IX Item "binmode FILEHANDLE, LAYER" -.PD 0 -.IP "binmode \s-1FILEHANDLE\s0" 8 -.IX Item "binmode FILEHANDLE" -.PD -Arranges for \s-1FILEHANDLE\s0 to be read or written in \*(L"binary\*(R" or \*(L"text\*(R" -mode on systems where the run-time libraries distinguish between -binary and text files. If \s-1FILEHANDLE\s0 is an expression, the value is -taken as the name of the filehandle. Returns true on success, -otherwise it returns \f(CW\*(C`undef\*(C'\fR and sets \f(CW$!\fR (errno). -.Sp -On some systems (in general, \s-1DOS\s0 and Windows-based systems) \fIbinmode()\fR -is necessary when you're not working with a text file. For the sake -of portability it is a good idea to always use it when appropriate, -and to never use it when it isn't appropriate. Also, people can -set their I/O to be by default \s-1UTF\-8\s0 encoded Unicode, not bytes. -.Sp -In other words: regardless of platform, use \fIbinmode()\fR on binary data, -like for example images. -.Sp -If \s-1LAYER\s0 is present it is a single string, but may contain multiple -directives. The directives alter the behaviour of the file handle. -When \s-1LAYER\s0 is present using binmode on text file makes sense. -.Sp -If \s-1LAYER\s0 is omitted or specified as \f(CW\*(C`:raw\*(C'\fR the filehandle is made -suitable for passing binary data. This includes turning off possible \s-1CRLF\s0 -translation and marking it as bytes (as opposed to Unicode characters). -Note that, despite what may be implied in \fI\*(L"Programming Perl\*(R"\fR (the -Camel) or elsewhere, \f(CW\*(C`:raw\*(C'\fR is \fInot\fR the simply inverse of \f(CW\*(C`:crlf\*(C'\fR -\&\*(-- other layers which would affect binary nature of the stream are -\&\fIalso\fR disabled. See PerlIO, perlrun and the discussion about the -\&\s-1PERLIO\s0 environment variable. -.Sp -The \f(CW\*(C`:bytes\*(C'\fR, \f(CW\*(C`:crlf\*(C'\fR, and \f(CW\*(C`:utf8\*(C'\fR, and any other directives of the -form \f(CW\*(C`:...\*(C'\fR, are called I/O \fIlayers\fR. The \f(CW\*(C`open\*(C'\fR pragma can be used to -establish default I/O layers. See open. -.Sp -\&\fIThe \s-1LAYER\s0 parameter of the \fIbinmode()\fI function is described as \*(L"\s-1DISCIPLINE\s0\*(R" -in \*(L"Programming Perl, 3rd Edition\*(R". However, since the publishing of this -book, by many known as \*(L"Camel \s-1III\s0\*(R", the consensus of the naming of this -functionality has moved from \*(L"discipline\*(R" to \*(L"layer\*(R". All documentation -of this version of Perl therefore refers to \*(L"layers\*(R" rather than to -\&\*(L"disciplines\*(R". Now back to the regularly scheduled documentation...\fR -.Sp -To mark \s-1FILEHANDLE\s0 as \s-1UTF\-8\s0, use \f(CW\*(C`:utf8\*(C'\fR. -.Sp -In general, \fIbinmode()\fR should be called after \fIopen()\fR but before any I/O -is done on the filehandle. Calling \fIbinmode()\fR will normally flush any -pending buffered output data (and perhaps pending input data) on the -handle. An exception to this is the \f(CW\*(C`:encoding\*(C'\fR layer that -changes the default character encoding of the handle, see open. -The \f(CW\*(C`:encoding\*(C'\fR layer sometimes needs to be called in -mid\-stream, and it doesn't flush the stream. The \f(CW\*(C`:encoding\*(C'\fR -also implicitly pushes on top of itself the \f(CW\*(C`:utf8\*(C'\fR layer because -internally Perl will operate on \s-1UTF\-8\s0 encoded Unicode characters. -.Sp -The operating system, device drivers, C libraries, and Perl run-time -system all work together to let the programmer treat a single -character (\f(CW\*(C`\en\*(C'\fR) as the line terminator, irrespective of the external -representation. On many operating systems, the native text file -representation matches the internal representation, but on some -platforms the external representation of \f(CW\*(C`\en\*(C'\fR is made up of more than -one character. -.Sp -Mac \s-1OS\s0, all variants of Unix, and Stream_LF files on \s-1VMS\s0 use a single -character to end each line in the external representation of text (even -though that single character is \s-1CARRIAGE\s0 \s-1RETURN\s0 on Mac \s-1OS\s0 and \s-1LINE\s0 \s-1FEED\s0 -on Unix and most \s-1VMS\s0 files). In other systems like \s-1OS/2\s0, \s-1DOS\s0 and the -various flavors of MS-Windows your program sees a \f(CW\*(C`\en\*(C'\fR as a simple \f(CW\*(C`\ecJ\*(C'\fR, -but what's stored in text files are the two characters \f(CW\*(C`\ecM\ecJ\*(C'\fR. That -means that, if you don't use \fIbinmode()\fR on these systems, \f(CW\*(C`\ecM\ecJ\*(C'\fR -sequences on disk will be converted to \f(CW\*(C`\en\*(C'\fR on input, and any \f(CW\*(C`\en\*(C'\fR in -your program will be converted back to \f(CW\*(C`\ecM\ecJ\*(C'\fR on output. This is what -you want for text files, but it can be disastrous for binary files. -.Sp -Another consequence of using \fIbinmode()\fR (on some systems) is that -special end-of-file markers will be seen as part of the data stream. -For systems from the Microsoft family this means that if your binary -data contains \f(CW\*(C`\ecZ\*(C'\fR, the I/O subsystem will regard it as the end of -the file, unless you use \fIbinmode()\fR. -.Sp -\&\fIbinmode()\fR is not only important for \fIreadline()\fR and \fIprint()\fR operations, -but also when using \fIread()\fR, \fIseek()\fR, \fIsysread()\fR, \fIsyswrite()\fR and \fItell()\fR -(see perlport for more details). See the \f(CW$/\fR and \f(CW\*(C`$\e\*(C'\fR variables -in perlvar for how to manually set your input and output -line-termination sequences. -.IP "bless \s-1REF\s0,CLASSNAME" 8 -.IX Xref "bless" -.IX Item "bless REF,CLASSNAME" -.PD 0 -.IP "bless \s-1REF\s0" 8 -.IX Item "bless REF" -.PD -This function tells the thingy referenced by \s-1REF\s0 that it is now an object -in the \s-1CLASSNAME\s0 package. If \s-1CLASSNAME\s0 is omitted, the current package -is used. Because a \f(CW\*(C`bless\*(C'\fR is often the last thing in a constructor, -it returns the reference for convenience. Always use the two-argument -version if a derived class might inherit the function doing the blessing. -See perltoot and perlobj for more about the blessing (and blessings) -of objects. -.Sp -Consider always blessing objects in CLASSNAMEs that are mixed case. -Namespaces with all lowercase names are considered reserved for -Perl pragmata. Builtin types have all uppercase names. To prevent -confusion, you may wish to avoid such package names as well. Make sure -that \s-1CLASSNAME\s0 is a true value. -.Sp -See \*(L"Perl Modules\*(R" in perlmod. -.IP "caller \s-1EXPR\s0" 8 -.IX Xref "caller call stack stack stack trace" -.IX Item "caller EXPR" -.PD 0 -.IP "caller" 8 -.IX Item "caller" -.PD -Returns the context of the current subroutine call. In scalar context, -returns the caller's package name if there is a caller, that is, if -we're in a subroutine or \f(CW\*(C`eval\*(C'\fR or \f(CW\*(C`require\*(C'\fR, and the undefined value -otherwise. In list context, returns -.Sp -.Vb 1 -\& ($package, $filename, $line) = caller; -.Ve -.Sp -With \s-1EXPR\s0, it returns some extra information that the debugger uses to -print a stack trace. The value of \s-1EXPR\s0 indicates how many call frames -to go back before the current one. -.Sp -.Vb 2 -\& ($package, $filename, $line, $subroutine, $hasargs, -\& $wantarray, $evaltext, $is_require, $hints, $bitmask) = caller($i); -.Ve -.Sp -Here \f(CW$subroutine\fR may be \f(CW\*(C`(eval)\*(C'\fR if the frame is not a subroutine -call, but an \f(CW\*(C`eval\*(C'\fR. In such a case additional elements \f(CW$evaltext\fR and -\&\f(CW$is_require\fR are set: \f(CW$is_require\fR is true if the frame is created by a -\&\f(CW\*(C`require\*(C'\fR or \f(CW\*(C`use\*(C'\fR statement, \f(CW$evaltext\fR contains the text of the -\&\f(CW\*(C`eval EXPR\*(C'\fR statement. In particular, for an \f(CW\*(C`eval BLOCK\*(C'\fR statement, -\&\f(CW$filename\fR is \f(CW\*(C`(eval)\*(C'\fR, but \f(CW$evaltext\fR is undefined. (Note also that -each \f(CW\*(C`use\*(C'\fR statement creates a \f(CW\*(C`require\*(C'\fR frame inside an \f(CW\*(C`eval EXPR\*(C'\fR -frame.) \f(CW$subroutine\fR may also be \f(CW\*(C`(unknown)\*(C'\fR if this particular -subroutine happens to have been deleted from the symbol table. -\&\f(CW$hasargs\fR is true if a new instance of \f(CW@_\fR was set up for the frame. -\&\f(CW$hints\fR and \f(CW$bitmask\fR contain pragmatic hints that the caller was -compiled with. The \f(CW$hints\fR and \f(CW$bitmask\fR values are subject to change -between versions of Perl, and are not meant for external use. -.Sp -Furthermore, when called from within the \s-1DB\s0 package, caller returns more -detailed information: it sets the list variable \f(CW@DB::args\fR to be the -arguments with which the subroutine was invoked. -.Sp -Be aware that the optimizer might have optimized call frames away before -\&\f(CW\*(C`caller\*(C'\fR had a chance to get the information. That means that \f(CWcaller(N)\fR -might not return information about the call frame you expect it do, for -\&\f(CW\*(C`N > 1\*(C'\fR. In particular, \f(CW@DB::args\fR might have information from the -previous time \f(CW\*(C`caller\*(C'\fR was called. -.IP "chdir \s-1EXPR\s0" 8 -.IX Xref "chdir cd" -.IX Item "chdir EXPR" -.PD 0 -.IP "chdir \s-1FILEHANDLE\s0" 8 -.IX Item "chdir FILEHANDLE" -.IP "chdir \s-1DIRHANDLE\s0" 8 -.IX Item "chdir DIRHANDLE" -.IP "chdir" 8 -.IX Item "chdir" -.PD -Changes the working directory to \s-1EXPR\s0, if possible. If \s-1EXPR\s0 is omitted, -changes to the directory specified by \f(CW$ENV{HOME}\fR, if set; if not, -changes to the directory specified by \f(CW$ENV{LOGDIR}\fR. (Under \s-1VMS\s0, the -variable \f(CW$ENV{SYS$LOGIN}\fR is also checked, and used if it is set.) If -neither is set, \f(CW\*(C`chdir\*(C'\fR does nothing. It returns true upon success, -false otherwise. See the example under \f(CW\*(C`die\*(C'\fR. -.Sp -On systems that support fchdir, you might pass a file handle or -directory handle as argument. On systems that don't support fchdir, -passing handles produces a fatal error at run time. -.IP "chmod \s-1LIST\s0" 8 -.IX Xref "chmod permission mode" -.IX Item "chmod LIST" -Changes the permissions of a list of files. The first element of the -list must be the numerical mode, which should probably be an octal -number, and which definitely should \fInot\fR be a string of octal digits: -\&\f(CW0644\fR is okay, \f(CW'0644'\fR is not. Returns the number of files -successfully changed. See also \*(L"oct\*(R", if all you have is a string. -.Sp -.Vb 6 -\& $cnt = chmod 0755, 'foo', 'bar'; -\& chmod 0755, @executables; -\& $mode = '0644'; chmod $mode, 'foo'; # !!! sets mode to -\& # --w----r-T -\& $mode = '0644'; chmod oct($mode), 'foo'; # this is better -\& $mode = 0644; chmod $mode, 'foo'; # this is best -.Ve -.Sp -On systems that support fchmod, you might pass file handles among the -files. On systems that don't support fchmod, passing file handles -produces a fatal error at run time. -.Sp -.Vb 3 -\& open(my $fh, "<", "foo"); -\& my $perm = (stat $fh)[2] & 07777; -\& chmod($perm | 0600, $fh); -.Ve -.Sp -You can also import the symbolic \f(CW\*(C`S_I*\*(C'\fR constants from the Fcntl -module: -.Sp -.Vb 1 -\& use Fcntl ':mode'; -.Ve -.Sp -.Vb 2 -\& chmod S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH, @executables; -\& # This is identical to the chmod 0755 of the above example. -.Ve -.IP "chomp \s-1VARIABLE\s0" 8 -.IX Xref "chomp INPUT_RECORD_SEPARATOR $ newline eol" -.IX Item "chomp VARIABLE" -.PD 0 -.IP "chomp( \s-1LIST\s0 )" 8 -.IX Item "chomp( LIST )" -.IP "chomp" 8 -.IX Item "chomp" -.PD -This safer version of \*(L"chop\*(R" removes any trailing string -that corresponds to the current value of \f(CW$/\fR (also known as -\&\f(CW$INPUT_RECORD_SEPARATOR\fR in the \f(CW\*(C`English\*(C'\fR module). It returns the total -number of characters removed from all its arguments. It's often used to -remove the newline from the end of an input record when you're worried -that the final record may be missing its newline. When in paragraph -mode (\f(CW\*(C`$/ = ""\*(C'\fR), it removes all trailing newlines from the string. -When in slurp mode (\f(CW\*(C`$/ = undef\*(C'\fR) or fixed-length record mode (\f(CW$/\fR is -a reference to an integer or the like, see perlvar) \fIchomp()\fR won't -remove anything. -If \s-1VARIABLE\s0 is omitted, it chomps \f(CW$_\fR. Example: -.Sp -.Vb 5 -\& while (<>) { -\& chomp; # avoid \en on last field -\& @array = split(/:/); -\& # ... -\& } -.Ve -.Sp -If \s-1VARIABLE\s0 is a hash, it chomps the hash's values, but not its keys. -.Sp - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/phpMyAdmin.spec b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/phpMyAdmin.spec deleted file mode 100644 index 120fbc9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/phpMyAdmin.spec +++ /dev/null @@ -1,163 +0,0 @@ -%define _myadminpath /var/www/myadmin -%define pkgrelease rc1 -%define microrelease 1 - -Name: phpMyAdmin -Version: 3.1.1 -Release: %{pkgrelease}.%{microrelease} -License: GPL -Group: Applications/Databases/Interfaces -Source0: http://prdownloads.sourceforge.net/phpmyadmin/%{name}-%{version}-%{pkgrelease}.tar.bz2 -Source1: phpMyAdmin-http.conf -URL: http://sourceforge.net/projects/phpmyadmin/ -Requires: mysql -Requires: php-mysql -Buildarch: noarch -#BuildRoot: %{_tmppath}/%{name}-root - -Summary: phpMyAdmin - web-based MySQL administration - -%description -phpMyAdmin can manage a whole MySQL-server (needs a super-user) but -also a single database. To accomplish the latter you'll need a -properly set up MySQL-user which can read/write only the desired -database. It's up to you to look up the appropiate part in the MySQL -manual. Currently phpMyAdmin can: - - create and drop databases - - create, copy, drop and alter tables - - delete, edit and add fields - - execute any SQL-statement, even batch-queries - - manage keys on fields - - load text files into tables - - create (*) and read dumps of tables - - export (*) and import data to CSV values - - administer multiple servers and single databases - - check referencial integrity - - create complex queries automatically connecting required tables - - create PDF graphics of your database layout - - communicate in more than 38 different languages - - -%prep -%setup -q -n %{name}-%{version}-%{pkgrelease} - - -%build - - -%install -[ "${RPM_BUILD_ROOT}" != "/" ] && [ -d "${RPM_BUILD_ROOT}" ] && \ - rm -rf "${RPM_BUILD_ROOT}" - -# Create directories. - -install -d "${RPM_BUILD_ROOT}%{_myadminpath}"/{css,js,lang,libraries,themes} -install -d "${RPM_BUILD_ROOT}%{_myadminpath}"/libraries/{auth,dbg,dbi,engines} -install -d "${RPM_BUILD_ROOT}%{_myadminpath}"/libraries/{export,tcpdf,import} -install -d "${RPM_BUILD_ROOT}%{_myadminpath}"/libraries/transformations -install -d "${RPM_BUILD_ROOT}%{_myadminpath}"/libraries/tcpdf/font -install -d "${RPM_BUILD_ROOT}%{_myadminpath}"/themes/{darkblue_orange,original} -install -d "${RPM_BUILD_ROOT}%{_myadminpath}"/themes/darkblue_orange/{css,img} -install -d "${RPM_BUILD_ROOT}%{_myadminpath}"/themes/original/{css,img} - -# Install files. - -install libraries/config.default.php \ - "${RPM_BUILD_ROOT}%{_myadminpath}"/config.inc.php -install *.{php,ico} "${RPM_BUILD_ROOT}%{_myadminpath}"/ -install ChangeLog LICENSE README "${RPM_BUILD_ROOT}%{_myadminpath}"/ -install Documentation.html docs.css "${RPM_BUILD_ROOT}%{_myadminpath}"/ -install css/* "${RPM_BUILD_ROOT}%{_myadminpath}/css"/ -install js/* "${RPM_BUILD_ROOT}%{_myadminpath}/js"/ -install lang/*.php "${RPM_BUILD_ROOT}%{_myadminpath}/lang"/ -install libraries/*.php "${RPM_BUILD_ROOT}%{_myadminpath}/libraries"/ -install libraries/auth/*.php "${RPM_BUILD_ROOT}%{_myadminpath}/libraries/auth"/ -install libraries/dbg/*.php "${RPM_BUILD_ROOT}%{_myadminpath}/libraries/dbg"/ -install libraries/dbi/*.php "${RPM_BUILD_ROOT}%{_myadminpath}/libraries/dbi"/ -install libraries/engines/*.php \ - "${RPM_BUILD_ROOT}%{_myadminpath}/libraries/engines"/ -install libraries/export/*.php \ - "${RPM_BUILD_ROOT}%{_myadminpath}/libraries/export"/ -install libraries/tcpdf/*.php "${RPM_BUILD_ROOT}%{_myadminpath}/libraries/tcpdf"/ -install libraries/tcpdf/font/*.{php,z} \ - "${RPM_BUILD_ROOT}%{_myadminpath}/libraries/tcpdf/font"/ -install libraries/import/*.php \ - "${RPM_BUILD_ROOT}%{_myadminpath}/libraries/import"/ -install libraries/transformations/*.php \ - "${RPM_BUILD_ROOT}%{_myadminpath}/libraries/transformations"/ -install themes/darkblue_orange/*.{php,png} \ - "${RPM_BUILD_ROOT}%{_myadminpath}/themes/darkblue_orange"/ -install themes/darkblue_orange/css/*.php \ - "${RPM_BUILD_ROOT}%{_myadminpath}/themes/darkblue_orange/css"/ -install themes/darkblue_orange/img/*.{png,ico} \ - "${RPM_BUILD_ROOT}%{_myadminpath}/themes/darkblue_orange/img"/ -install themes/original/*.{php,png} \ - "${RPM_BUILD_ROOT}%{_myadminpath}/themes/original"/ -install themes/original/css/*.php \ - "${RPM_BUILD_ROOT}%{_myadminpath}/themes/original/css"/ -install themes/original/img/*.{png,ico} \ - "${RPM_BUILD_ROOT}%{_myadminpath}/themes/original/img"/ - -# Create documentation directories. - -DOCROOT="${RPM_BUILD_ROOT}%{_docdir}/%{name}-%{version}" -install -d "${DOCROOT}" -install -d "${DOCROOT}"/{lang,scripts,transformations} - -# Install documentation files. - -install RELEASE-DATE-* "${DOCROOT}"/ -install CREDITS ChangeLog INSTALL LICENSE "${DOCROOT}"/ -install README TODO "${DOCROOT}"/ -install Documentation.* docs.css "${DOCROOT}"/ -install translators.html "${DOCROOT}"/ -install lang/*.sh "${DOCROOT}"/lang/ -install scripts/* "${DOCROOT}"/scripts/ -install libraries/tcpdf/README "${DOCROOT}"/README.tcpdf -install libraries/import/README "${DOCROOT}"/README.import -install libraries/transformations/README "${DOCROOT}"/transformations/ -install libraries/transformations/TEMPLATE* "${DOCROOT}"/transformations/ -install libraries/transformations/*.sh "${DOCROOT}"/transformations/ - -# Install configuration file for Apache. - -install -d "${RPM_BUILD_ROOT}%{_sysconfdir}/httpd/conf.d" -install "%{SOURCE1}" \ - "${RPM_BUILD_ROOT}%{_sysconfdir}/httpd/conf.d/phpMyAdmin.conf" - -# Generate non-configuration file list. - -(cd "${RPM_BUILD_ROOT}"; ls -d ."%{_myadminpath}"/*) | - sed -e '/\/config\.inc\.php$/d' -e 's/^.//' > files.list - - - -%clean -[ "${RPM_BUILD_ROOT}" != "/" ] && [ -d "${RPM_BUILD_ROOT}" ] && \ - rm -rf "${RPM_BUILD_ROOT}" - - -%files -f files.list -%defattr(644, root, root, 755) -%doc %{_docdir}/%{name}-%{version} -%dir %{_myadminpath} -%attr(640,root,apache) %config(noreplace) %verify(not size mtime md5) %{_myadminpath}/config.inc.php -%config(noreplace) %verify(not size mtime md5) %{_sysconfdir}/httpd/conf.d/* - - -%changelog -* Thu Feb 23 2006 Patrick Monnerat -- Version 2.8.0-rc1.1. - -* Thu Dec 22 2005 Patrick Monnerat -- Path "nullpw" to allow trying connection with null password after failure. -- Version 2.7.0-pl1.1. - -* Mon Aug 22 2005 Patrick Monnerat -- Version 2.6.3-pl1. - -* Wed Jul 21 2004 Patrick Monnerat -- Version 2.5.7-pl1. - -* Fri Nov 22 2002 Patrick Monnerat -- Version 2.3.0-rc1. diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/phpcomplete.vim b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/phpcomplete.vim deleted file mode 100644 index 17d74fd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/phpcomplete.vim +++ /dev/null @@ -1,567 +0,0 @@ -" Vim completion script -" Language: PHP -" Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl ) -" Last Change: 2006 May 9 -" -" TODO: -" - Class aware completion: -" a) caching? -" - Switching to HTML (XML?) completion (SQL) inside of phpStrings -" - allow also for XML completion <- better do html_flavor for HTML -" completion -" - outside of getting parent tag may cause problems. Heh, even in -" perfect conditions GetLastOpenTag doesn't cooperate... Inside of -" phpStrings this can be even a bonus but outside of it is not the -" best situation - -function! phpcomplete#CompletePHP(findstart, base) - if a:findstart - unlet! b:php_menu - " Check if we are inside of PHP markup - let pos = getpos('.') - let phpbegin = searchpairpos('', 'bWn', - \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\|comment"') - let phpend = searchpairpos('', 'Wn', - \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\|comment"') - - if phpbegin == [0,0] && phpend == [0,0] - " We are outside of any PHP markup. Complete HTML - let htmlbegin = htmlcomplete#CompleteTags(1, '') - let cursor_col = pos[2] - let base = getline('.')[htmlbegin : cursor_col] - let b:php_menu = htmlcomplete#CompleteTags(0, base) - return htmlbegin - else - " locate the start of the word - let line = getline('.') - let start = col('.') - 1 - let curline = line('.') - let compl_begin = col('.') - 2 - while start >= 0 && line[start - 1] =~ '[a-zA-Z_0-9\x7f-\xff$]' - let start -= 1 - endwhile - let b:compl_context = getline('.')[0:compl_begin] - return start - - " We can be also inside of phpString with HTML tags. Deal with - " it later (time, not lines). - endif - - endif - " If exists b:php_menu it means completion was already constructed we - " don't need to do anything more - if exists("b:php_menu") - return b:php_menu - endif - " Initialize base return lists - let res = [] - let res2 = [] - " a:base is very short - we need context - if exists("b:compl_context") - let context = b:compl_context - unlet! b:compl_context - endif - - if !exists('g:php_builtin_functions') - call phpcomplete#LoadData() - endif - - let scontext = substitute(context, '\$\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*$', '', '') - - if scontext =~ '\(=\s*new\|extends\)\s\+$' - " Complete class name - " Internal solution for finding classes in current file. - let file = getline(1, '$') - call filter(file, - \ 'v:val =~ "class\\s\\+[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*("') - let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) - let jfile = join(file, ' ') - let int_values = split(jfile, 'class\s\+') - let int_classes = {} - for i in int_values - let c_name = matchstr(i, '^[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*') - if c_name != '' - let int_classes[c_name] = '' - endif - endfor - - " Prepare list of classes from tags file - let ext_classes = {} - let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) - if fnames != '' - exe 'silent! vimgrep /^'.a:base.'.*\tc\(\t\|$\)/j '.fnames - let qflist = getqflist() - if len(qflist) > 0 - for field in qflist - " [:space:] thing: we don't have to be so strict when - " dealing with tags files - entries there were already - " checked by ctags. - let item = matchstr(field['text'], '^[^[:space:]]\+') - let ext_classes[item] = '' - endfor - endif - endif - - " Prepare list of built in classes from g:php_builtin_functions - if !exists("g:php_omni_bi_classes") - let g:php_omni_bi_classes = {} - for i in keys(g:php_builtin_object_functions) - let g:php_omni_bi_classes[substitute(i, '::.*$', '', '')] = '' - endfor - endif - - let classes = sort(keys(int_classes)) - let classes += sort(keys(ext_classes)) - let classes += sort(keys(g:php_omni_bi_classes)) - - for m in classes - if m =~ '^'.a:base - call add(res, m) - endif - endfor - - let final_menu = [] - for i in res - let final_menu += [{'word':i, 'kind':'c'}] - endfor - - return final_menu - - elseif scontext =~ '\(->\|::\)$' - " Complete user functions and variables - " Internal solution for current file. - " That seems as unnecessary repeating of functions but there are - " few not so subtle differences as not appending of $ and addition - " of 'kind' tag (not necessary in regular completion) - - if scontext =~ '->$' && scontext !~ '\$this->$' - - " Get name of the class - let classname = phpcomplete#GetClassName(scontext) - - " Get location of class definition, we have to iterate through all - " tags files separately because we need relative path from current - " file to the exact file (tags file can be in different dir) - if classname != '' - let classlocation = phpcomplete#GetClassLocation(classname) - else - let classlocation = '' - endif - - if classlocation == 'VIMPHP_BUILTINOBJECT' - - for object in keys(g:php_builtin_object_functions) - if object =~ '^'.classname - let res += [{'word':substitute(object, '.*::', '', ''), - \ 'info': g:php_builtin_object_functions[object]}] - endif - endfor - - return res - - endif - - if filereadable(classlocation) - let classfile = readfile(classlocation) - let classcontent = '' - let classcontent .= "\n".phpcomplete#GetClassContents(classfile, classname) - let sccontent = split(classcontent, "\n") - - " YES, YES, YES! - we have whole content including extends! - " Now we need to get two elements: public functions and public - " vars - " NO, NO, NO! - third separate filtering looking for content - " :(, but all of them have differences. To squeeze them into - " one implementation would require many additional arguments - " and ifs. No good solution - " Functions declared with public keyword or without any - " keyword are public - let functions = filter(deepcopy(sccontent), - \ 'v:val =~ "^\\s*\\(static\\s\\+\\|public\\s\\+\\)*function"') - let jfuncs = join(functions, ' ') - let sfuncs = split(jfuncs, 'function\s\+') - let c_functions = {} - for i in sfuncs - let f_name = matchstr(i, - \ '^&\?\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze') - let f_args = matchstr(i, - \ '^&\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*(\zs.\{-}\ze)\_s*{') - if f_name != '' - let c_functions[f_name.'('] = f_args - endif - endfor - " Variables declared with var or with public keyword are - " public - let variables = filter(deepcopy(sccontent), - \ 'v:val =~ "^\\s*\\(public\\|var\\)\\s\\+\\$"') - let jvars = join(variables, ' ') - let svars = split(jvars, '\$') - let c_variables = {} - for i in svars - let c_var = matchstr(i, - \ '^\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze') - if c_var != '' - let c_variables[c_var] = '' - endif - endfor - - let all_values = {} - call extend(all_values, c_functions) - call extend(all_values, c_variables) - - for m in sort(keys(all_values)) - if m =~ '^'.a:base && m !~ '::' - call add(res, m) - elseif m =~ '::'.a:base - call add(res2, m) - endif - endfor - - let start_list = res + res2 - - let final_list = [] - for i in start_list - if has_key(c_variables, i) - let class = ' ' - if all_values[i] != '' - let class = i.' class ' - endif - let final_list += - \ [{'word':i, - \ 'info':class.all_values[i], - \ 'kind':'v'}] - else - let final_list += - \ [{'word':substitute(i, '.*::', '', ''), - \ 'info':i.all_values[i].')', - \ 'kind':'f'}] - endif - endfor - - return final_list - - endif - - endif - - if a:base =~ '^\$' - let adddollar = '$' - else - let adddollar = '' - endif - let file = getline(1, '$') - let jfile = join(file, ' ') - let sfile = split(jfile, '\$') - let int_vars = {} - for i in sfile - if i =~ '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*=\s*new' - let val = matchstr(i, '^[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*').'->' - else - let val = matchstr(i, '^[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*') - endif - if val !~ '' - let int_vars[adddollar.val] = '' - endif - endfor - - " ctags has good support for PHP, use tags file for external - " variables - let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) - let ext_vars = {} - if fnames != '' - let sbase = substitute(a:base, '^\$', '', '') - exe 'silent! vimgrep /^'.sbase.'.*\tv\(\t\|$\)/j '.fnames - let qflist = getqflist() - if len(qflist) > 0 - for field in qflist - let item = matchstr(field['text'], '^[^[:space:]]\+') - " Add -> if it is possible object declaration - let classname = '' - if field['text'] =~ item.'\s*=\s*new\s\+' - let item = item.'->' - let classname = matchstr(field['text'], - \ '=\s*new\s\+\zs[a-zA-Z_0-9\x7f-\xff]\+\ze') - endif - let ext_vars[adddollar.item] = classname - endfor - endif - endif - - " Now we have all variables in int_vars dictionary - call extend(int_vars, ext_vars) - - " Internal solution for finding functions in current file. - let file = getline(1, '$') - call filter(file, - \ 'v:val =~ "function\\s\\+&\\?[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*("') - let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) - let jfile = join(file, ' ') - let int_values = split(jfile, 'function\s\+') - let int_functions = {} - for i in int_values - let f_name = matchstr(i, - \ '^&\?\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze') - let f_args = matchstr(i, - \ '^&\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*(\zs.\{-}\ze)\_s*{') - let int_functions[f_name.'('] = f_args.')' - endfor - - " Prepare list of functions from tags file - let ext_functions = {} - if fnames != '' - exe 'silent! vimgrep /^'.a:base.'.*\tf\(\t\|$\)/j '.fnames - let qflist = getqflist() - if len(qflist) > 0 - for field in qflist - " File name - let item = matchstr(field['text'], '^[^[:space:]]\+') - let fname = matchstr(field['text'], '\t\zs\f\+\ze') - let prototype = matchstr(field['text'], - \ 'function\s\+&\?[^[:space:]]\+\s*(\s*\zs.\{-}\ze\s*)\s*{\?') - let ext_functions[item.'('] = prototype.') - '.fname - endfor - endif - endif - - let all_values = {} - call extend(all_values, int_functions) - call extend(all_values, ext_functions) - call extend(all_values, int_vars) " external variables are already in - call extend(all_values, g:php_builtin_object_functions) - - for m in sort(keys(all_values)) - if m =~ '\(^\|::\)'.a:base - call add(res, m) - endif - endfor - - let start_list = res - - let final_list = [] - for i in start_list - if has_key(int_vars, i) - let class = ' ' - if all_values[i] != '' - let class = i.' class ' - endif - let final_list += [{'word':i, 'info':class.all_values[i], 'kind':'v'}] - else - let final_list += - \ [{'word':substitute(i, '.*::', '', ''), - \ 'info':i.all_values[i], - \ 'kind':'f'}] - endif - endfor - - return final_list - endif - - if a:base =~ '^\$' - " Complete variables - " Built-in variables {{{ - let g:php_builtin_vars = {'$GLOBALS':'', - \ '$_SERVER':'', - \ '$_GET':'', - \ '$_POST':'', - \ '$_COOKIE':'', - \ '$_FILES':'', - \ '$_ENV':'', - \ '$_REQUEST':'', - \ '$_SESSION':'', - \ '$HTTP_SERVER_VARS':'', - \ '$HTTP_ENV_VARS':'', - \ '$HTTP_COOKIE_VARS':'', - \ '$HTTP_GET_VARS':'', - \ '$HTTP_POST_VARS':'', - \ '$HTTP_POST_FILES':'', - \ '$HTTP_SESSION_VARS':'', - \ '$php_errormsg':'', - \ '$this':'' - \ } - " }}} - - " Internal solution for current file. - let file = getline(1, '$') - let jfile = join(file, ' ') - let int_vals = split(jfile, '\ze\$') - let int_vars = {} - for i in int_vals - if i =~ '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*=\s*new' - let val = matchstr(i, - \ '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*').'->' - else - let val = matchstr(i, - \ '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*') - endif - if val != '' - let int_vars[val] = '' - endif - endfor - - call extend(int_vars,g:php_builtin_vars) - - " ctags has support for PHP, use tags file for external variables - let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) - let ext_vars = {} - if fnames != '' - let sbase = substitute(a:base, '^\$', '', '') - exe 'silent! vimgrep /^'.sbase.'.*\tv\(\t\|$\)/j '.fnames - let qflist = getqflist() - if len(qflist) > 0 - for field in qflist - let item = '$'.matchstr(field['text'], '^[^[:space:]]\+') - let m_menu = '' - " Add -> if it is possible object declaration - if field['text'] =~ item.'\s*=\s*new\s\+' - let item = item.'->' - let m_menu = matchstr(field['text'], - \ '=\s*new\s\+\zs[a-zA-Z_0-9\x7f-\xff]\+\ze') - endif - let ext_vars[item] = m_menu - endfor - endif - endif - - call extend(int_vars, ext_vars) - let g:a0 = keys(int_vars) - - for m in sort(keys(int_vars)) - if m =~ '^\'.a:base - call add(res, m) - endif - endfor - - let int_list = res - - let int_dict = [] - for i in int_list - if int_vars[i] != '' - let class = ' ' - if int_vars[i] != '' - let class = i.' class ' - endif - let int_dict += [{'word':i, 'info':class.int_vars[i], 'kind':'v'}] - else - let int_dict += [{'word':i, 'kind':'v'}] - endif - endfor - - return int_dict - - else - " Complete everything else - - " + functions, DONE - " + keywords of language DONE - " + defines (constant definitions), DONE - " + extend keywords for predefined constants, DONE - " + classes (after new), DONE - " + limit choice after -> and :: to funcs and vars DONE - - " Internal solution for finding functions in current file. - let file = getline(1, '$') - call filter(file, - \ 'v:val =~ "function\\s\\+&\\?[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*("') - let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) - let jfile = join(file, ' ') - let int_values = split(jfile, 'function\s\+') - let int_functions = {} - for i in int_values - let f_name = matchstr(i, - \ '^&\?\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze') - let f_args = matchstr(i, - \ '^&\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*(\s*\zs.\{-}\ze\s*)\_s*{') - let int_functions[f_name.'('] = f_args.')' - endfor - - " Prepare list of functions from tags file - let ext_functions = {} - if fnames != '' - exe 'silent! vimgrep /^'.a:base.'.*\tf\(\t\|$\)/j '.fnames - let qflist = getqflist() - if len(qflist) > 0 - for field in qflist - " File name - let item = matchstr(field['text'], '^[^[:space:]]\+') - let fname = matchstr(field['text'], '\t\zs\f\+\ze') - let prototype = matchstr(field['text'], - \ 'function\s\+&\?[^[:space:]]\+\s*(\s*\zs.\{-}\ze\s*)\s*{\?') - let ext_functions[item.'('] = prototype.') - '.fname - endfor - endif - endif - - " All functions - call extend(int_functions, ext_functions) - call extend(int_functions, g:php_builtin_functions) - - " Internal solution for finding constants in current file - let file = getline(1, '$') - call filter(file, 'v:val =~ "define\\s*("') - let jfile = join(file, ' ') - let int_values = split(jfile, 'define\s*(\s*') - let int_constants = {} - for i in int_values - let c_name = matchstr(i, '\(["'']\)\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze\1') - " let c_value = matchstr(i, - " \ '\(["'']\)[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\1\s*,\s*\zs.\{-}\ze\s*)') - if c_name != '' - let int_constants[c_name] = '' " c_value - endif - endfor - - " Prepare list of constants from tags file - let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) - let ext_constants = {} - if fnames != '' - exe 'silent! vimgrep /^'.a:base.'.*\td\(\t\|$\)/j '.fnames - let qflist = getqflist() - if len(qflist) > 0 - for field in qflist - let item = matchstr(field['text'], '^[^[:space:]]\+') - let ext_constants[item] = '' - endfor - endif - endif - - " All constants - call extend(int_constants, ext_constants) - " Treat keywords as constants - - let all_values = {} - - " One big dictionary of functions - call extend(all_values, int_functions) - - " Add constants - call extend(all_values, int_constants) - " Add keywords - call extend(all_values, g:php_keywords) - - for m in sort(keys(all_values)) - if m =~ '^'.a:base - call add(res, m) - endif - endfor - - let int_list = res - - let final_list = [] - for i in int_list - if has_key(int_functions, i) - let final_list += - \ [{'word':i, - \ 'info':i.int_functions[i], - \ 'kind':'f'}] - elseif has_key(int_constants, i) - let final_list += [{'word':i, 'kind':'d'}] - else - let final_list += [{'word':i}] - endif - endfor - - return final_list - - endif - -endfunction -" vim:set foldmethod=marker: diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/pleac.in.rb b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/pleac.in.rb deleted file mode 100644 index d1dea9f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/pleac.in.rb +++ /dev/null @@ -1,1223 +0,0 @@ -# -*- ruby -*- - -# Local variables: -# indent-tabs-mode: nil -# ruby-indent-level: 4 -# End: - -# @@PLEAC@@_NAME -# @@SKIP@@ Ruby - -# @@PLEAC@@_WEB -# @@SKIP@@ http://www.ruby-lang.org - - -# @@PLEAC@@_1.0 -string = '\n' # two characters, \ and an n -string = 'Jon \'Maddog\' Orwant' # literal single quotes - -string = "\n" # a "newline" character -string = "Jon \"Maddog\" Orwant" # literal double quotes - -string = %q/Jon 'Maddog' Orwant/ # literal single quotes - -string = %q[Jon 'Maddog' Orwant] # literal single quotes -string = %q{Jon 'Maddog' Orwant} # literal single quotes -string = %q(Jon 'Maddog' Orwant) # literal single quotes -string = %q # literal single quotes - -a = <<"EOF" -This is a multiline here document -terminated by EOF on a line by itself -EOF - - -# @@PLEAC@@_1.1 -value = string[offset,count] -value = string[offset..-1] - -string[offset,count] = newstring -string[offset..-1] = newtail - -# in Ruby we can also specify intervals by their two offsets -value = string[offset..offs2] -string[offset..offs2] = newstring - -leading, s1, s2, trailing = data.unpack("A5 x3 A8 A8 A*") - -fivers = string.unpack("A5" * (string.length/5)) - -chars = string.unpack("A1" * string.length) - -string = "This is what you have" -# +012345678901234567890 Indexing forwards (left to right) -# 109876543210987654321- Indexing backwards (right to left) -# note that 0 means 10 or 20, etc. above - -first = string[0, 1] # "T" -start = string[5, 2] # "is" -rest = string[13..-1] # "you have" -last = string[-1, 1] # "e" -end_ = string[-4..-1] # "have" -piece = string[-8, 3] # "you" - -string[5, 2] = "wasn't" # change "is" to "wasn't" -string[-12..-1] = "ondrous" # "This wasn't wondrous" -string[0, 1] = "" # delete first character -string[-10..-1] = "" # delete last 10 characters - -if string[-10..-1] =~ /pattern/ - puts "Pattern matches in last 10 characters" -end - -string[0, 5].gsub!(/is/, 'at') - -a = "make a hat" -a[0, 1], a[-1, 1] = a[-1, 1], a[0, 1] - -a = "To be or not to be" -b = a.unpack("x6 A6") - -b, c = a.unpack("x6 A2 X5 A2") -puts "#{b}\n#{c}\n" - -def cut2fmt(*args) - template = '' - lastpos = 1 - for place in args - template += "A" + (place - lastpos).to_s + " " - lastpos = place - end - template += "A*" - return template -end - -fmt = cut2fmt(8, 14, 20, 26, 30) - - -# @@PLEAC@@_1.2 -# careful! "b is true" doesn't mean "b != 0" (0 is true in Ruby) -# thus no problem of "defined" later since only nil is false -# the following sets to `c' if `b' is nil or false -a = b || c - -# if you need Perl's behaviour (setting to `c' if `b' is 0) the most -# effective way is to use Numeric#nonzero? (thanks to Dave Thomas!) -a = b.nonzero? || c - -# you will still want to use defined? in order to test -# for scope existence of a given object -a = defined?(b) ? b : c - -dir = ARGV.shift || "/tmp" - - -# @@PLEAC@@_1.3 -v1, v2 = v2, v1 - -alpha, beta, production = %w(January March August) -alpha, beta, production = beta, production, alpha - - -# @@PLEAC@@_1.4 -num = char[0] -char = num.chr - -# Ruby also supports having a char from character constant -num = ?r - -char = sprintf("%c", num) -printf("Number %d is character %c\n", num, num) - -ascii = string.unpack("C*") -string = ascii.pack("C*") - -hal = "HAL" -ascii = hal.unpack("C*") -# We can't use Array#each since we can't mutate a Fixnum -ascii.collect! { |i| - i + 1 # add one to each ASCII value -} -ibm = ascii.pack("C*") -puts ibm - - -# @@PLEAC@@_1.5 -array = string.split('') - -array = string.unpack("C*") - -string.scan(/./) { |b| - # do something with b -} - -string = "an apple a day" -print "unique chars are: ", string.split('').uniq.sort, "\n" - -sum = 0 -for ascval in string.unpack("C*") # or use Array#each for a pure OO style :) - sum += ascval -end -puts "sum is #{sum & 0xffffffff}" # since Ruby will go Bignum if necessary - -# @@INCLUDE@@ include/ruby/slowcat.rb - - -# @@PLEAC@@_1.6 -revbytes = string.reverse - -revwords = string.split(" ").reverse.join(" ") - -revwords = string.split(/(\s+)/).reverse.join - -# using the fact that IO is Enumerable, you can directly "select" it -long_palindromes = File.open("/usr/share/dict/words"). - select { |w| w.chomp!; w.reverse == w && w.length > 5 } - - -# @@PLEAC@@_1.7 -while string.sub!("\t+") { ' ' * ($&.length * 8 - $`.length % 8) } -end - - -# @@PLEAC@@_1.8 -'You owe #{debt} to me'.gsub(/\#{(\w+)}/) { eval($1) } - -rows, cols = 24, 80 -text = %q(I am #{rows} high and #{cols} long) -text.gsub!(/\#{(\w+)}/) { eval("#{$1}") } -puts text - -'I am 17 years old'.gsub(/\d+/) { 2 * $&.to_i } - - -# @@PLEAC@@_1.9 -e = "bo peep".upcase -e.downcase! -e.capitalize! - -"thIS is a loNG liNE".gsub!(/\w+/) { $&.capitalize } - - -# @@PLEAC@@_1.10 -"I have #{n+1} guanacos." -print "I have ", n+1, " guanacos." - - -# @@PLEAC@@_1.11 -var = <<'EOF'.gsub(/^\s+/, '') - your text - goes here -EOF - - -# @@PLEAC@@_1.12 -string = "Folding and splicing is the work of an editor,\n"+ - "not a mere collection of silicon\n"+ - "and\n"+ - "mobile electrons!" - -def wrap(str, max_size) - all = [] - line = '' - for l in str.split - if (line+l).length >= max_size - all.push(line) - line = '' - end - line += line == '' ? l : ' ' + l - end - all.push(line).join("\n") -end - -print wrap(string, 20) -#=> Folding and -#=> splicing is the -#=> work of an editor, -#=> not a mere -#=> collection of -#=> silicon and mobile -#=> electrons! - - -# @@PLEAC@@_1.13 -string = %q(Mom said, "Don't do that.") -string.gsub(/['"]/) { '\\'+$& } -string.gsub(/['"]/, '\&\&') -string.gsub(/[^A-Z]/) { '\\'+$& } -"is a test!".gsub(/\W/) { '\\'+$& } # no function like quotemeta? - - -# @@PLEAC@@_1.14 -string.strip! - - -# @@PLEAC@@_1.15 -def parse_csv(text) - new = text.scan(/"([^\"\\]*(?:\\.[^\"\\]*)*)",?|([^,]+),?|,/) - new << nil if text[-1] == ?, - new.flatten.compact -end - -line = %q -fields = parse_csv(line) -fields.each_with_index { |v,i| - print "#{i} : #{v}\n"; -} - - -# @@PLEAC@@_1.16 -# Use the soundex.rb Library from Michael Neumann. -# http://www.s-direktnet.de/homepages/neumann/rb_prgs/Soundex.rb -require 'Soundex' - -code = Text::Soundex.soundex(string) -codes = Text::Soundex.soundex(array) - -# substitution function for getpwent(): -# returns an array of user entries, -# each entry contains the username and the full name -def login_names - result = [] - File.open("/etc/passwd") { |file| - file.each_line { |line| - next if line.match(/^#/) - cols = line.split(":") - result.push([cols[0], cols[4]]) - } - } - result -end - -puts "Lookup user: " -user = STDIN.gets -user.chomp! -exit unless user -name_code = Text::Soundex.soundex(user) - -splitter = Regexp.new('(\w+)[^,]*\b(\w+)') -for username, fullname in login_names do - firstname, lastname = splitter.match(fullname)[1,2] - if name_code == Text::Soundex.soundex(username) - || name_code == Text::Soundex.soundex(firstname) - || name_code == Text::Soundex.soundex(lastname) - then - puts "#{username}: #{firstname} #{lastname}" - end -end - - -# @@PLEAC@@_1.17 -# @@INCLUDE@@ include/ruby/fixstyle.rb - - -# @@PLEAC@@_1.18 -# @@INCLUDE@@ include/ruby/psgrep.rb - - -# @@PLEAC@@_2.1 -# Matz tells that you can use Integer() for strict checked conversion. -Integer("abc") -#=> `Integer': invalid value for Integer: "abc" (ArgumentError) -Integer("567") -#=> 567 - -# You may use Float() for floating point stuff -Integer("56.7") -#=> `Integer': invalid value for Integer: "56.7" (ArgumentError) -Float("56.7") -#=> 56.7 - -# You may also use a regexp for that -if string =~ /^[+-]?\d+$/ - p 'is an integer' -else - p 'is not' -end - -if string =~ /^-?(?:\d+(?:\.\d*)?|\.\d+)$/ - p 'is a decimal number' -else - p 'is not' -end - - -# @@PLEAC@@_2.2 -# equal(num1, num2, accuracy) : returns true if num1 and num2 are -# equal to accuracy number of decimal places -def equal(i, j, a) - sprintf("%.#{a}g", i) == sprintf("%.#{a}g", j) -end - -wage = 536 # $5.36/hour -week = 40 * wage # $214.40 -printf("One week's wage is: \$%.2f\n", week/100.0) - - -# @@PLEAC@@_2.3 -num.round # rounds to integer - -a = 0.255 -b = sprintf("%.2f", a) -print "Unrounded: #{a}\nRounded: #{b}\n" -printf "Unrounded: #{a}\nRounded: %.2f\n", a - -print "number\tint\tfloor\tceil\n" -a = [ 3.3 , 3.5 , 3.7, -3.3 ] -for n in a - printf("% .1f\t% .1f\t% .1f\t% .1f\n", # at least I don't fake my output :) - n, n.to_i, n.floor, n.ceil) -end - - -# @@PLEAC@@_2.4 -def dec2bin(n) - [n].pack("N").unpack("B32")[0].sub(/^0+(?=\d)/, '') -end - -def bin2dec(n) - [("0"*32+n.to_s)[-32..-1]].pack("B32").unpack("N")[0] -end - - -# @@PLEAC@@_2.5 -for i in x .. y - # i is set to every integer from x to y, inclusive -end - -x.step(y,7) { |i| - # i is set to every integer from x to y, stepsize = 7 -} - -print "Infancy is: " -(0..2).each { |i| - print i, " " -} -print "\n" - - -# @@PLEAC@@_2.6 -# We can add conversion methods to the Integer class, -# this makes a roman number just a representation for normal numbers. -class Integer - - @@romanlist = [["M", 1000], - ["CM", 900], - ["D", 500], - ["CD", 400], - ["C", 100], - ["XC", 90], - ["L", 50], - ["XL", 40], - ["X", 10], - ["IX", 9], - ["V", 5], - ["IV", 4], - ["I", 1]] - - def to_roman - remains = self - roman = "" - for sym, num in @@romanlist - while remains >= num - remains -= num - roman << sym - end - end - roman - end - - def Integer.from_roman(roman) - ustr = roman.upcase - sum = 0 - for entry in @@romanlist - sym, num = entry[0], entry[1] - while sym == ustr[0, sym.length] - sum += num - ustr.slice!(0, sym.length) - end - end - sum - end - -end - - -roman_fifteen = 15.to_roman -puts "Roman for fifteen is #{roman_fifteen}" -i = Integer.from_roman(roman_fifteen) -puts "Converted back, #{roman_fifteen} is #{i}" - -# check -for i in (1..3900) - r = i.to_roman - j = Integer.from_roman(r) - if i != j - puts "error: #{i} : #{r} - #{j}" - end -end - - -# @@PLEAC@@_2.7 -random = rand(y-x+1)+x - -chars = ["A".."Z","a".."z","0".."9"].collect { |r| r.to_a }.join + %q(!@$%^&*) -password = (1..8).collect { chars[rand(chars.size)] }.pack("C*") - - -# @@PLEAC@@_2.8 -srand # uses a combination of the time, the process id, and a sequence number -srand(val) # for repeatable behaviour - - -# @@PLEAC@@_2.9 -# from the randomr lib: -# http://raa.ruby-lang.org/project/randomr/ -----> http://raa.ruby-lang.org/project/randomr/ - -require 'random/mersenne_twister' -mers = Random::MersenneTwister.new 123456789 -puts mers.rand(0) # 0.550321932544541 -puts mers.rand(10) # 2 - -# using online sources of random data via the realrand package: -# http://raa.ruby-lang.org/project/realrand/ -# **Note** -# The following online services are used in this package: -# http://www.random.org - source: atmospheric noise -# http://www.fourmilab.ch/hotbits - source: radioactive decay timings -# http://random.hd.org - source: entropy from local and network noise -# Please visit the sites and respect the rules of each service. - -require 'random/online' - -generator1 = Random::RandomOrg.new -puts generator1.randbyte(5).join(",") -puts generator1.randnum(10, 1, 6).join(",") # Roll dice 10 times. - -generator2 = Random::FourmiLab.new -puts generator2.randbyte(5).join(",") -# randnum is not supported. - -generator3 = Random::EntropyPool.new -puts generator3.randbyte(5).join(",") -# randnum is not supported. - - -# @@PLEAC@@_2.10 -def gaussian_rand - begin - u1 = 2 * rand() - 1 - u2 = 2 * rand() - 1 - w = u1*u1 + u2*u2 - end while (w >= 1) - w = Math.sqrt((-2*Math.log(w))/w) - [ u2*w, u1*w ] -end - -mean = 25 -sdev = 2 -salary = gaussian_rand[0] * sdev + mean -printf("You have been hired at \$%.2f\n", salary) - - -# @@PLEAC@@_2.11 -def deg2rad(d) - (d/180.0)*Math::PI -end - -def rad2deg(r) - (r/Math::PI)*180 -end - - -# @@PLEAC@@_2.12 -sin_val = Math.sin(angle) -cos_val = Math.cos(angle) -tan_val = Math.tan(angle) - -# AFAIK Ruby's Math module doesn't provide acos/asin -# While we're at it, let's also define missing hyperbolic functions -module Math - def Math.asin(x) - atan2(x, sqrt(1 - x**2)) - end - def Math.acos(x) - atan2(sqrt(1 - x**2), x) - end - def Math.atan(x) - atan2(x, 1) - end - def Math.sinh(x) - (exp(x) - exp(-x)) / 2 - end - def Math.cosh(x) - (exp(x) + exp(-x)) / 2 - end - def Math.tanh(x) - sinh(x) / cosh(x) - end -end - -# The support for Complex numbers is not built-in -y = Math.acos(3.7) -#=> in `sqrt': square root for negative number (ArgumentError) - -# There is an implementation of Complex numbers in 'complex.rb' in current -# Ruby distro, but it doesn't support atan2 with complex args, so it doesn't -# solve this problem. - - -# @@PLEAC@@_2.13 -log_e = Math.log(val) -log_10 = Math.log10(val) - -def log_base(base, val) - Math.log(val)/Math.log(base) -end - -answer = log_base(10, 10_000) -puts "log10(10,000) = #{answer}" - - -# @@PLEAC@@_2.14 -require 'matrix.rb' - -a = Matrix[[3, 2, 3], [5, 9, 8]] -b = Matrix[[4, 7], [9, 3], [8, 1]] -c = a * b - -a.row_size -a.column_size - -c.det -a.transpose - - -# @@PLEAC@@_2.15 -require 'complex.rb' -require 'rational.rb' - -a = Complex(3, 5) # 3 + 5i -b = Complex(2, -2) # 2 - 2i -puts "c = #{a*b}" - -c = a * b -d = 3 + 4*Complex::I - -printf "sqrt(#{d}) = %s\n", Math.sqrt(d) - - -# @@PLEAC@@_2.16 -number = hexadecimal.hex -number = octal.oct - -print "Gimme a number in decimal, octal, or hex: " -num = gets.chomp -exit unless defined?(num) -num = num.oct if num =~ /^0/ # does both oct and hex -printf "%d %x %o\n", num, num, num - -print "Enter file permission in octal: " -permissions = gets.chomp -raise "Exiting ...\n" unless defined?(permissions) -puts "The decimal value is #{permissions.oct}" - - -# @@PLEAC@@_2.17 -def commify(n) - n.to_s =~ /([^\.]*)(\..*)?/ - int, dec = $1.reverse, $2 ? $2 : "" - while int.gsub!(/(,|\.|^)(\d{3})(\d)/, '\1\2,\3') - end - int.reverse + dec -end - - -# @@PLEAC@@_2.18 -printf "It took %d hour%s\n", time, time == 1 ? "" : "s" - -# dunno if an equivalent to Lingua::EN::Inflect exists... - - -# @@PLEAC@@_2.19 -#----------------------------- -#!/usr/bin/ruby -# bigfact - calculating prime factors -def factorize(orig) - factors = {} - factors.default = 0 # return 0 instead nil if key not found in hash - n = orig - i = 2 - sqi = 4 # square of i - while sqi <= n do - while n.modulo(i) == 0 do - n /= i - factors[i] += 1 - # puts "Found factor #{i}" - end - # we take advantage of the fact that (i +1)**2 = i**2 + 2*i +1 - sqi += 2 * i + 1 - i += 1 - end - - if (n != 1) && (n != orig) - factors[n] += 1 - end - factors -end - -def printfactorhash(orig, factorcount) - print format("%-10d ", orig) - if factorcount.length == 0 - print "PRIME" - else - # sorts after number, because the hash keys are numbers - factorcount.sort.each { |factor,exponent| - print factor - if exponent > 1 - print "**", exponent - end - print " " - } - end - puts -end - -for arg in ARGV - n = arg.to_i - mfactors = factorize(n) - printfactorhash(n, mfactors) -end -#----------------------------- - - -# @@PLEAC@@_3.0 -puts Time.now - -print "Today is day ", Time.now.yday, " of the current year.\n" -print "Today is day ", Time.now.day, " of the current month.\n" - - -# @@PLEAC@@_3.1 -day, month, year = Time.now.day, Time.now.month, Time.now.year -# or -day, month, year = Time.now.to_a[3..5] - -tl = Time.now.localtime -printf("The current date is %04d %02d %02d\n", tl.year, tl.month, tl.day) - -Time.now.localtime.strftime("%Y-%m-%d") - - -# @@PLEAC@@_3.2 -Time.local(year, month, day, hour, minute, second).tv_sec -Time.gm(year, month, day, hour, minute, second).tv_sec - - -# @@PLEAC@@_3.3 -sec, min, hour, day, month, year, wday, yday, isdst, zone = Time.at(epoch_secs).to_a - - -# @@PLEAC@@_3.4 -when_ = now + difference # now -> Time ; difference -> Numeric (delta in seconds) -then_ = now - difference - - -# @@PLEAC@@_3.5 -bree = 361535725 -nat = 96201950 - -difference = bree - nat -puts "There were #{difference} seconds between Nat and Bree" - -seconds = difference % 60 -difference = (difference - seconds) / 60 -minutes = difference % 60 -difference = (difference - minutes) / 60 -hours = difference % 24 -difference = (difference - hours) / 24 -days = difference % 7 -weeks = (difference - days) / 7 - -puts "(#{weeks} weeks, #{days} days, #{hours}:#{minutes}:#{seconds})" - - -# @@PLEAC@@_3.6 -monthday, weekday, yearday = date.mday, date.wday, date.yday - -# AFAIK the week number is not just a division since week boundaries are on sundays -weeknum = d.strftime("%U").to_i + 1 - -year = 1981 -month = "jun" # or `6' if you want to emulate a broken language -day = 16 -t = Time.mktime(year, month, day) -print "#{month}/#{day}/#{year} was a ", t.strftime("%A"), "\n" - - -# @@PLEAC@@_3.7 -yyyy, mm, dd = $1, $2, $3 if "1998-06-25" =~ /(\d+)-(\d+)-(\d+)/ - -epoch_seconds = Time.mktime(yyyy, mm, dd).tv_sec - -# dunno an equivalent to Date::Manip#ParseDate - - -# @@PLEAC@@_3.8 -string = Time.at(epoch_secs) -Time.at(1234567890).gmtime # gives: Fri Feb 13 23:31:30 UTC 2009 - -time = Time.mktime(1973, "jan", 18, 3, 45, 50) -print "In localtime it gives: ", time.localtime, "\n" - - -# @@PLEAC@@_3.9 -# Ruby provides micro-seconds in Time object -Time.now.usec - -# Ruby gives the seconds in floating format when substracting two Time objects -before = Time.now -line = gets -elapsed = Time.now - before -puts "You took #{elapsed} seconds." - -# On my Celeron-400 with Linux-2.2.19-14mdk, average for three execs are: -# This Ruby version: average 0.00321 sec -# Cookbook's Perl version: average 0.00981 sec -size = 500 -number_of_times = 100 -total_time = 0 -number_of_times.times { - # populate array - array = [] - size.times { array << rand } - # sort it - begin_ = Time.now - array.sort! - time = Time.now - begin_ - total_time += time -} -printf "On average, sorting %d random numbers takes %.5f seconds\n", - size, (total_time/Float(number_of_times)) - - -# @@PLEAC@@_3.10 -sleep(0.005) # Ruby is definitely not as broken as Perl :) -# (may be interrupted by sending the process a SIGALRM) - - -# @@PLEAC@@_3.11 -#!/usr/bin/ruby -w -# hopdelta - feed mail header, produce lines -# showing delay at each hop. -require 'time' -class MailHopDelta - - def initialize(mail) - @head = mail.gsub(/\n\s+/,' ') - @topline = %w-Sender Recipient Time Delta- - @start_from = mail.match(/^From.*\@([^\s>]*)/)[1] - @date = Time.parse(mail.match(/^Date:\s+(.*)/)[1]) - end - - def out(line) - "%-20.20s %-20.20s %-20.20s %s" % line - end - - def hop_date(day) - day.strftime("%I:%M:%S %Y/%m/%d") - end - - def puts_hops - puts out(@topline) - puts out(['Start', @start_from, hop_date(@date),'']) - @head.split(/\n/).reverse.grep(/^Received:/).each do |hop| - hop.gsub!(/\bon (.*?) (id.*)/,'; \1') - whence = hop.match(/;\s+(.*)$/)[1] - unless whence - warn "Bad received line: #{hop}" - next - end - from = $+ if hop =~ /from\s+(\S+)|\((.*?)\)/ - by = $1 if hop =~ /by\s+(\S+\.\S+)/ - next unless now = Time.parse(whence).localtime - delta = now - @date - puts out([from, by, hop_date(now), hop_time(delta)]) - @date = now - end - end - - def hop_time(secs) - sign = secs < 0 ? -1 : 1 - days, secs = secs.abs.divmod(60 * 60 * 24) - hours,secs = secs.abs.divmod(60 * 60) - mins, secs = secs.abs.divmod(60) - rtn = "%3ds" % [secs * sign] - rtn << "%3dm" % [mins * sign] if mins != 0 - rtn << "%3dh" % [hours * sign] if hours != 0 - rtn << "%3dd" % [days * sign] if days != 0 - rtn - end -end - -$/ = "" -mail = MailHopDelta.new(ARGF.gets).puts_hops - - -# @@PLEAC@@_4.0 -single_level = [ "this", "that", "the", "other" ] - -# Ruby directly supports nested arrays -double_level = [ "this", "that", [ "the", "other" ] ] -still_single_level = [ "this", "that", [ "the", "other" ] ].flatten - - -# @@PLEAC@@_4.1 -a = [ "quick", "brown", "fox" ] -a = %w(Why are you teasing me?) - -lines = <<"END_OF_HERE_DOC".gsub(/^\s*(.+)/, '\1') - The boy stood on the burning deck, - It was as hot as glass. -END_OF_HERE_DOC - -bigarray = IO.readlines("mydatafile").collect { |l| l.chomp } - -name = "Gandalf" -banner = %Q(Speak, #{name}, and welcome!) - -host_info = `host #{his_host}` - -%x(ps #{$$}) - -banner = 'Costs only $4.95'.split(' ') - -rax = %w! ( ) < > { } [ ] ! - - -# @@PLEAC@@_4.2 -def commify_series(arr) - return '' if not arr - case arr.size - when 0 then '' - when 1 then arr[0] - when 2 then arr.join(' and ') - else arr[0..-2].join(', ') + ', and ' + arr[-1] - end -end - -array = [ "red", "yellow", "green" ] - -print "I have ", array, " marbles\n" -# -> I have redyellowgreen marbles - -# But unlike Perl: -print "I have #{array} marbles\n" -# -> I have redyellowgreen marbles -# So, needs: -print "I have #{array.join(' ')} marbles\n" -# -> I have red yellow green marbles - -#!/usr/bin/ruby -# communify_series - show proper comma insertion in list output - -def commify_series(arr) - return '' if not arr - sepchar = arr.find { |p| p =~ /,/ } ? '; ' : ', ' - case arr.size - when 0 then '' - when 1 then arr[0] - when 2 then arr.join(' and ') - else arr[0..-2].join(sepchar) + sepchar + 'and ' + arr[-1] - end -end - -lists = [ - [ 'just one thing' ], - %w(Mutt Jeff), - %w(Peter Paul Mary), - [ 'To our parents', 'Mother Theresa', 'God' ], - [ 'pastrami', 'ham and cheese', 'peanut butter and jelly', 'tuna' ], - [ 'recycle tired, old phrases', 'ponder big, happy thoughts' ], - [ 'recycle tired, old phrases', - 'ponder big, happy thoughts', - 'sleep and dream peacefully' ], -] - -for list in lists do - puts "The list is: #{commify_series(list)}." -end - - -# @@PLEAC@@_4.3 -# (note: AFAIK Ruby doesn't allow gory change of Array length) -# grow the array by assigning nil to past the end of array -ary[new_size-1] = nil -# shrink the array by slicing it down -ary.slice!(new_size..-1) -# init the array with given size -Array.new(number_of_elems) -# assign to an element past the original end enlarges the array -ary[index_new_last_elem] = value - -def what_about_that_array(a) - print "The array now has ", a.size, " elements.\n" - # Index of last element is not really interesting in Ruby - print "Element #3 is `#{a[3]}'.\n" -end -people = %w(Crosby Stills Nash Young) -what_about_that_array(people) - - -# @@PLEAC@@_4.4 -# OO style -bad_users.each { |user| - complain(user) -} -# or, functional style -for user in bad_users - complain(user) -end - -for var in ENV.keys.sort - puts "#{var}=#{ENV[var]}" -end - -for user in all_users - disk_space = get_usage(user) - if (disk_space > MAX_QUOTA) - complain(user) - end -end - -for l in IO.popen("who").readlines - print l if l =~ /^gc/ -end - -# we can mimic the obfuscated Perl way -while fh.gets # $_ is set to the line just read - chomp # $_ has a trailing \n removed, if it had one - split.each { |w| # $_ is split on whitespace - # but $_ is not set to each chunk as in Perl - print w.reverse - } -end -# ...or use a cleaner way -for l in fh.readlines - l.chomp.split.each { |w| print w.reverse } -end - -# same drawback as in problem 1.4, we can't mutate a Numeric... -array.collect! { |v| v - 1 } - -a = [ .5, 3 ]; b = [ 0, 1 ] -for ary in [ a, b ] - ary.collect! { |v| v * 7 } -end -puts "#{a.join(' ')} #{b.join(' ')}" - -# we can mutate Strings, cool; we need a trick for the scalar -for ary in [ [ scalar ], array, hash.values ] - ary.each { |v| v.strip! } # String#strip rules :) -end - - -# @@PLEAC@@_4.5 -# not relevant in Ruby since we have always references -for item in array - # do somethingh with item -end - - -# @@PLEAC@@_4.6 -unique = list.uniq - -# generate a list of users logged in, removing duplicates -users = `who`.collect { |l| l =~ /(\w+)/; $1 }.sort.uniq -puts("users logged in: #{commify_series(users)}") # see 4.2 for commify_series - - -# @@PLEAC@@_4.7 -a - b -# [ 1, 1, 2, 2, 3, 3, 3, 4, 5 ] - [ 1, 2, 4 ] -> [3, 5] - - -# @@PLEAC@@_4.8 -union = a | b -intersection = a & b -difference = a - b - - -# @@PLEAC@@_4.9 -array1.concat(array2) -# if you will assign to another object, better use: -new_ary = array1 + array2 - -members = [ "Time", "Flies" ] -initiates = [ "An", "Arrow" ] -members += initiates - -members = [ "Time", "Flies" ] -initiates = [ "An", "Arrow" ] -members[2,0] = [ "Like", initiates ].flatten - -members[0] = "Fruit" -members[3,2] = "A", "Banana" - - -# @@PLEAC@@_4.10 -reversed = ary.reverse - -ary.reverse_each { |e| - # do something with e -} - -descending = ary.sort.reverse -descending = ary.sort { |a,b| b <=> a } - - -# @@PLEAC@@_4.11 -# remove n elements from front of ary (shift n) -front = ary.slice!(0, n) - -# remove n elements from the end of ary (pop n) -end_ = ary.slice!(-n .. -1) - -# let's extend the Array class, to make that useful -class Array - def shift2() - slice!(0 .. 1) # more symetric with pop2... - end - def pop2() - slice!(-2 .. -1) - end -end - -friends = %w(Peter Paul Mary Jim Tim) -this, that = friends.shift2 - -beverages = %w(Dew Jolt Cola Sprite Fresca) -pair = beverages.pop2 - - -# @@PLEAC@@_4.12 -# use Enumerable#detect (or the synonym Enumerable#find) -highest_eng = employees.detect { |emp| emp.category == 'engineer' } - - -# @@PLEAC@@_4.13 -# use Enumerable#select (or the synonym Enumerable#find_all) -bigs = nums.select { |i| i > 1_000_000 } -pigs = users.keys.select { |k| users[k] > 1e7 } - -matching = `who`.select { |u| u =~ /^gnat / } - -engineers = employees.select { |e| e.position == 'Engineer' } - -secondary_assistance = applicants.select { |a| - a.income >= 26_000 && a.income < 30_000 -} - - -# @@PLEAC@@_4.14 -# normally you would have an array of Numeric (Float or -# Fixnum or Bignum), so you would use: -sorted = unsorted.sort -# if you have strings representing Integers or Floats -# you may specify another sort method: -sorted = unsorted.sort { |a,b| a.to_f <=> b.to_f } - -# let's use the list of my own PID's -`ps ux`.split("\n")[1..-1]. - select { |i| i =~ /^#{ENV['USER']}/ }. - collect { |i| i.split[1] }. - sort { |a,b| a.to_i <=> b.to_i }.each { |i| puts i } -puts "Select a process ID to kill:" -pid = gets.chomp -raise "Exiting ... \n" unless pid && pid =~ /^\d+$/ -Process.kill('TERM', pid.to_i) -sleep 2 -Process.kill('KILL', pid.to_i) - -descending = unsorted.sort { |a,b| b.to_f <=> a.to_f } - - -# @@PLEAC@@_4.15 -ordered = unordered.sort { |a,b| compare(a,b) } - -precomputed = unordered.collect { |e| [compute, e] } -ordered_precomputed = precomputed.sort { |a,b| a[0] <=> b[0] } -ordered = ordered_precomputed.collect { |e| e[1] } - -ordered = unordered.collect { |e| [compute, e] }. - sort { |a,b| a[0] <=> b[0] }. - collect { |e| e[1] } - -for employee in employees.sort { |a,b| a.name <=> b.name } - print employee.name, " earns \$ ", employee.salary, "\n" -end - -# Beware! `0' is true in Ruby. -# For chaining comparisons, you may use Numeric#nonzero?, which -# returns num if num is not zero, nil otherwise -sorted = employees.sort { |a,b| (a.name <=> b.name).nonzero? || b.age <=> a.age } - -users = [] -# getpwent is not wrapped in Ruby... let's fallback -IO.readlines('/etc/passwd').each { |u| users << u.split(':') } -users.sort! { |a,b| a[0] <=> b[0] } -for user in users - puts user[0] -end - -sorted = names.sort { |a,b| a[1, 1] <=> b[1, 1] } -sorted = strings.sort { |a,b| a.length <=> b.length } - -# let's show only the compact version -ordered = strings.collect { |e| [e.length, e] }. - sort { |a,b| a[0] <=> b[0] }. - collect { |e| e[1] } - -ordered = strings.collect { |e| [/\d+/.match(e)[0].to_i, e] }. - sort { |a,b| a[0] <=> b[0] }. - collect { |e| e[1] } - -print `cat /etc/passwd`.collect { |e| [e, e.split(':').indexes(3,2,0)].flatten }. - sort { |a,b| (a[1] <=> b[1]).nonzero? || (a[2] <=> b[2]).nonzero? || a[3] <=> b[3] }. - collect { |e| e[0] } - - -# @@PLEAC@@_4.16 -circular.unshift(circular.pop) # the last shall be first -circular.push(circular.shift) # and vice versa - -def grab_and_rotate(l) - l.push(ret = l.shift) - ret -end - -processes = [1, 2, 3, 4, 5] -while (1) - process = grab_and_rotate(processes) - puts "Handling process #{process}" - sleep 1 -end - - -# @@PLEAC@@_4.17 -def fisher_yates_shuffle(a) - (a.size-1).downto(1) { |i| - j = rand(i+1) - a[i], a[j] = a[j], a[i] if i != j - } -end - -def naive_shuffle(a) - for i in 0...a.size - j = rand(a.size) - a[i], a[j] = a[j], a[i] - end -end - - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/postgresql_test.txt b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/postgresql_test.txt deleted file mode 100644 index 190d184..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/postgresql_test.txt +++ /dev/null @@ -1,47 +0,0 @@ -CREATE OR REPLACE FUNCTION something() RETURNS int4 AS -$x$ -BEGIN - RETURN 42; -END -$x$ -LANGUAGE 'plpgsql'; - -CREATE FUNCTION pymax (a integer, b integer) - RETURNS integer -AS $$ - if a > b: - return a - return b -$$ language plpythonu; - -CREATE FUNCTION nested_lexers (a integer, b integer) -$function$ -BEGIN - SELECT ($1 ~ $q$[\t\r\n\v\\]$q$); -END; -$function$ -LANGUAGE sql; - -CREATE OR REPLACE FUNCTION measurement_insert_trigger() -RETURNS TRIGGER AS $$ -BEGIN - <> - INSERT INTO measurement_y2008m01 VALUES (NEW.*); - RETURN NULL; -END; -$$ -LANGUAGE plpgsql; - --- As returned by pg_dump -CREATE FUNCTION test_function() RETURNS integer - LANGUAGE plpgsql STABLE STRICT - AS $$ -begin - return 42; -end -$$; - --- Unicode names and strings -SELECT U&'\0441\043B\043E\043D' -FROM U&"\0441\043B\043E\043D"; - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/pppoe.applescript b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/pppoe.applescript deleted file mode 100644 index 4cb380e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/pppoe.applescript +++ /dev/null @@ -1,10 +0,0 @@ -tell application "System Events" - tell network preferences - tell current location - set aPPPoEService to a reference to (first service whose kind is 10) - if exists aPPPoEService then - connect aPPPoEService - end if - end tell - end tell -end tell diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/psql_session.txt b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/psql_session.txt deleted file mode 100644 index 7096072..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/psql_session.txt +++ /dev/null @@ -1,122 +0,0 @@ -regression=# select foo; -ERROR: column "foo" does not exist -CONTEXT: PL/pgSQL function "test1" while casting return value to function's return type -LINE 1: select foo; - ^ -regression=# \q - -peter@localhost testdb=> \a \t \x -Output format is aligned. -Tuples only is off. -Expanded display is on. - -regression=# select '\x'; -WARNING: nonstandard use of escape in a string literal -LINE 1: select '\x'; - ^ -HINT: Use the escape string syntax for escapes, e.g., E'\r\n'. - ?column? ----------- - x -(1 row) - -regression=# select E'\x'; - -piro=> \set foo 30; -piro=> select * from test where foo <= :foo; - foo | bar ------+----- - 10 | - 20 | -(2 rows) - -testdb=> \set foo 'my_table' -testdb=> SELECT * FROM :"foo"; - -testdb=> \set content `cat my_file.txt` -testdb=> INSERT INTO my_table VALUES (:'content'); - -regression=# select ( -regression(# 1); - ?column? ----------- - 1 -(1 row) - -piro=> select ( -piro(> ' -piro'> ' || $$ -piro$> $$) -piro-> from " -piro"> foo"; -ERROR: relation " -foo" does not exist -LINE 5: from " - ^ - -testdb=> CREATE TABLE my_table ( -first integer not null default 0, -second text) ; -- end of command -CREATE TABLE - --- Table output -=# SELECT '0x10'::mpz AS "hex", '10'::mpz AS "dec", --# '010'::mpz AS oct, '0b10'::mpz AS bin; - hex | dec | oct | bin ------+-----+-----+----- - 16 | 10 | 8 | 2 -(1 row) - --- One field output -regression=# select schemaname from pg_tables limit 3; - schemaname ------------- - pg_catalog - pg_catalog - pg_catalog -(3 rows) - --- TODO: prompt in multiline comments still not handled correctly -test=> select 1 /* multiline -test*> and 2 /* and 3 */ -test*> end comment */, 2; - ?column? | ?column? -----------+---------- - 1 | 2 - -=# select 10.0, 1e-6, 1E+6; - ?column? | ?column? | ?column? -----------+----------+---------- - 10.0 | 0.000001 | 1000000 -(1 row) - -regression=# begin; -BEGIN -regression=# create table asdf (foo serial primary key); -NOTICE: CREATE TABLE will create implicit sequence "asdf_foo_seq" for serial column "asdf.foo" -NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "asdf_pkey" for table "asdf" -CREATE TABLE -regression=# insert into asdf values (10) returning foo; - foo ------ - 10 -(1 row) - -INSERT 0 1 -regression=# ROLLBACK ; -ROLLBACK - -=> EXPLAIN SELECT * FROM tenk1 --> WHERE unique1 < 100; -- Don't take -> in the plan as a prompt - - QUERY PLAN ------------------------------------------------------------------------------- - Bitmap Heap Scan on tenk1 (cost=2.37..232.35 rows=106 width=244) - Recheck Cond: (unique1 < 100) - -> Bitmap Index Scan on tenk1_unique1 (cost=0.00..2.37 rows=106 width=0) - Index Cond: (unique1 < 100) - - --- don't swallow the end of a malformed line -test=> select 1, -'this line must be emitted' diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/py3_test.txt b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/py3_test.txt deleted file mode 100644 index 21fea75..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/py3_test.txt +++ /dev/null @@ -1,2 +0,0 @@ -class Käse: - pass diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/py3tb_test.py3tb b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/py3tb_test.py3tb deleted file mode 100644 index 706a540..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/py3tb_test.py3tb +++ /dev/null @@ -1,4 +0,0 @@ - File "", line 1 - 1+ - ^ -SyntaxError: invalid syntax diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/pycon_test.pycon b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/pycon_test.pycon deleted file mode 100644 index ff70286..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/pycon_test.pycon +++ /dev/null @@ -1,14 +0,0 @@ ->>> : - File "", line 1 - : - ^ -SyntaxError: invalid syntax ->>> -KeyboardInterrupt ->>> - ->>> 1/0 -Traceback (most recent call last): -... -ZeroDivisionError - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/pytb_test2.pytb b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/pytb_test2.pytb deleted file mode 100644 index c4d2033..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/pytb_test2.pytb +++ /dev/null @@ -1,2 +0,0 @@ - File "temp.py", line 1 -SyntaxError: Non-ASCII character '\xc3' in file temp.py on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/pytb_test3.pytb b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/pytb_test3.pytb deleted file mode 100644 index 6947c1e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/pytb_test3.pytb +++ /dev/null @@ -1,4 +0,0 @@ ->>> 3/"3" -Traceback (most recent call last): - File "", line 1, in -TypeError: unsupported operand type(s) for /: 'int' and 'str' diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/python25-bsd.mak b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/python25-bsd.mak deleted file mode 100644 index 51c2596..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/python25-bsd.mak +++ /dev/null @@ -1,234 +0,0 @@ -# New ports collection makefile for: python25 -# Date created: 3 July 2003 -# Whom: Hye-Shik Chang -# -# $FreeBSD: ports/lang/python25/Makefile,v 1.145 2007/10/03 23:22:04 edwin Exp $ - -PORTNAME= python25 -PORTVERSION= 2.5.1 -CATEGORIES= lang python ipv6 -MASTER_SITES= ${PYTHON_MASTER_SITES} -MASTER_SITE_SUBDIR= ${PYTHON_MASTER_SITE_SUBDIR} -DISTFILES= ${PYTHON_DISTFILE} - -MAINTAINER= python@FreeBSD.org -COMMENT?= An interpreted object-oriented programming language - -DIST_SUBDIR= python -WRKSRC= ${PYTHON_WRKSRC}/portbld.static -PATCH_WRKSRC= ${PYTHON_WRKSRC} -GNU_CONFIGURE= yes -CONFIGURE_TARGET= --build=${MACHINE_ARCH}-portbld-freebsd${OSREL} -CONFIGURE_SCRIPT= ../configure # must be relative -CONFIGURE_ENV= OPT="${CFLAGS}" SVNVERSION="echo freebsd" -MAKE_ENV= VPATH="${PYTHON_WRKSRC}" -INSTALLS_SHLIB= yes -INSTALL_TARGET= altinstall -MAN1= ${PYTHON_VERSION}.1 - -USE_PYTHON= yes -PYTHON_VERSION= python2.5 -PYTHON_NO_DEPENDS= yes - -SHARED_WRKSRC= ${PYTHON_WRKSRC}/portbld.shared -PLIST= ${WRKDIR}/PLIST -PLIST_TEMPLATE?=${PKGDIR}/pkg-plist -PLIST_SUB= PYVER=${PYTHON_VERSION:S/python//} \ - PYVER_WITHPAT=${PORTVERSION:S/.c/c/} -DEMODIR= ${PREFIX}/share/examples/${PYTHON_VERSION} -TOOLSDIR= ${PREFIX}/share/${PYTHON_VERSION} - -BIN_SCRIPTS= idle pydoc python python-shared smtpd.py python-config \ - python-shared-config -BINLINKS_SUB= -e 's,smtpd,smtpd${PYTHON_VER},' \ - -e 's,(idle|pydoc|python-shared|python),\1${PYTHON_VER},' - -OPTIONS= THREADS "Enable thread support" on \ - HUGE_STACK_SIZE "Use a larger thread stack" off \ - UCS4 "Use UCS4 for unicode support" on \ - PYMALLOC "Use python's internal malloc" on \ - IPV6 "Enable IPv6 support" on \ - FPECTL "Enable floating point exception handling" off - -.include - -.if ${PYTHON_VERSION} == ${PYTHON_DEFAULT_VERSION} -MLINKS= ${PYTHON_VERSION}.1 python.1 -PLIST_SUB+= IF_DEFAULT="" -.else -PLIST_SUB+= IF_DEFAULT="@comment " -.endif - -# workaround for a bug in base curses.h. -CFLAGS+= -D__wchar_t=wchar_t - -.if !defined(WITHOUT_THREADS) -CONFIGURE_ARGS+= --with-threads -CFLAGS+= ${PTHREAD_CFLAGS} -.if defined(WITHOUT_HUGE_STACK_SIZE) -CFLAGS+= -DTHREAD_STACK_SIZE=0x20000 -.else -CFLAGS+= -DTHREAD_STACK_SIZE=0x100000 -.endif # defined(WITHOUT_HUGE_STACK_SIZE) -CONFIGURE_ENV+= LDFLAGS="${PTHREAD_LIBS} ${LDFLAGS}" -.else -CONFIGURE_ARGS+= --without-threads -.if defined(LDFLAGS) -CONFIGURE_ENV+= LDFLAGS="${LDFLAGS}" -.endif # defined(LDFLAGS) -.endif # !defined(WITHOUT_THREADS) - -.if !defined(WITHOUT_UCS4) && !defined(WITH_UCS2) -CONFIGURE_ARGS+= --enable-unicode=ucs4 -.endif - -.if defined(WITHOUT_PYMALLOC) -CONFIGURE_ARGS+= --without-pymalloc -.endif - -.if ${ARCH} == i386 -PLIST_SUB+= X86_ONLY="" -.else -PLIST_SUB+= X86_ONLY="@comment " -.endif -.if ${ARCH} == amd64 || ${ARCH} == ia64 || ${ARCH} == sparc64 || ${ARCH} == alpha -PLIST_SUB+= 32BIT_ONLY="@comment " -.else -PLIST_SUB+= 32BIT_ONLY="" -.endif -.if ${ARCH} == sparc64 -CFLAGS+= -DPYTHON_DEFAULT_RECURSION_LIMIT=900 -.endif - -.if !exists(/usr/bin/ypcat) # the world with NO_NIS -PLIST_SUB+= NO_NIS="@comment " -.else -PLIST_SUB+= NO_NIS="" -.endif - -.if !defined(WITHOUT_IPV6) -CONFIGURE_ARGS+= --enable-ipv6 -.else -CONFIGURE_ARGS+= --disable-ipv6 -.endif - -.if defined(WITH_FPECTL) -CONFIGURE_ARGS+= --with-fpectl -.endif - -.if ${OSVERSION} >= 700000 -PLATFORMS=plat-freebsd4 plat-freebsd5 plat-freebsd6 -.elif ${OSVERSION} >= 600000 -PLATFORMS=plat-freebsd4 plat-freebsd5 plat-freebsd7 -.else -PLATFORMS=plat-freebsd4 plat-freebsd6 plat-freebsd7 -.endif - -pre-patch: - ${MKDIR} ${WRKSRC} ${SHARED_WRKSRC}/Modules - ${SED} -e '1s,^.*$$,#!${PREFIX}/bin/${PYTHON_VERSION},' \ - ${PATCH_WRKSRC}/Tools/scripts/pydoc > ${WRKDIR}/pydoc2.5 - ${SED} -e '1s,^.*$$,#!${PREFIX}/bin/${PYTHON_VERSION},' \ - ${PATCH_WRKSRC}/Tools/scripts/idle > ${WRKDIR}/idle2.5 - ${SED} -e '1s,^.*$$,#!${PREFIX}/bin/${PYTHON_VERSION},' \ - ${PATCH_WRKSRC}/Lib/smtpd.py > ${WRKDIR}/smtpd2.5.py - ${REINPLACE_CMD} -e \ - 's,/usr/doc/python-docs-,${PREFIX}/share/doc/python,g' \ - ${PATCH_WRKSRC}/Lib/pydoc.py - ${REINPLACE_CMD} -e \ - 's|^\( *prefixes = .*\)\]$$|\1, "${X11BASE}"]|g' \ - ${PATCH_WRKSRC}/Lib/site.py - ${REINPLACE_CMD} -e \ - 's|^ \(..ASDLGEN.*\)$$| ${TRUE}|g' \ - ${PATCH_WRKSRC}/Makefile.pre.in - - ${REINPLACE_CMD} -e \ - 's|*\(..INSTALL_SCRIPT.*\)python-config$$|#port \1|' \ - ${PATCH_WRKSRC}/Makefile.pre.in - - ${SED} -e 's|^#!.*|#!${PREFIX}/bin/${PYTHON_VERSION}|' \ - ${PATCH_WRKSRC}/Misc/python-config.in > ${WRKDIR}/${PYTHON_VERSION}-config - ${SED} -e 's|^#!.*|#!${PREFIX}/bin/${PYTHON_VERSION:S/thon/thon-shared/}|' \ - ${PATCH_WRKSRC}/Misc/python-config.in > ${WRKDIR}/${PYTHON_VERSION:S/thon/thon-shared/}-config - -.if defined(WITH_FPECTL) && ${ARCH} == i386 - ${MKDIR} ${WRKSRC}/Modules - ${ECHO} "fpectl fpectlmodule.c" >> ${WRKSRC}/Modules/Setup.dist -.endif - -post-configure: - ${TAR} -C ${WRKSRC} -cf - . | ${TAR} -C ${SHARED_WRKSRC} -xf - - ${LN} -sf ${PYTHON_WRKSRC}/Lib ${WRKSRC}/Lib - ${SED} -e 's,^\(LDLIBRARY=\).*$$,\1libpython$$(VERSION).so,' \ - -e 's,^\(BLDLIBRARY=\).*$$,\1-L. -lpython$$(VERSION),' \ - -e 's,^\(CFLAGSFORSHARED=\).*$$,\1$$(CCSHARED),' \ - -e 's,^\(Makefile Modules/config.c:.*\)Makefile.pre,\1,' \ - -e 's,^\(.(BUILDPYTHON)\: .*\).(LIBRARY),\1,' \ - -e 's,^\(.(BUILDPYTHON):.*\).(LIBRARY),\1,' \ - ${WRKSRC}/Makefile > ${SHARED_WRKSRC}/Makefile - -pre-build: - cd ${SHARED_WRKSRC}; \ - ${SETENV} ${MAKE_ENV} ${MAKE} lib${PYTHON_VERSION}.so python; \ - ${LN} -f lib${PYTHON_VERSION}.so lib${PYTHON_VERSION}.so.1; \ - ${LN} -f python ${PYTHON_VERSION:S/thon/thon-shared/} - -pre-su-install: -.for platform in ${PLATFORMS} - ${MKDIR} ${PYTHONPREFIX_LIBDIR}/${platform} -.for file in IN.py regen - ${INSTALL_DATA} ${WRKSRC}/Lib/${platform}/${file} \ - ${PYTHONPREFIX_LIBDIR}/${platform}/ -.endfor -.endfor - -pre-install: - ${CAT} ${PLIST_TEMPLATE} | ${AWK} '{ print $$0; } \ - /LIBDIR.*\.py$$/ && !/\/bad/ { print $$0 "o"; print $$0 "c"; }' > ${PLIST} - - @# if openssl 0.9.8 is detected, _sha{256,512} module won't be installed - ([ -f ${WRKSRC}/.without_own_sha ] && \ - ${GREP} -v 'lib-dynload/_sha' ${PLIST} > ${PLIST}.tmp && \ - ${CAT} ${PLIST}.tmp > ${PLIST}) || ${TRUE} - -post-install: - @# install config providers - ${INSTALL_SCRIPT} ${WRKDIR}/${PYTHON_VERSION}-config ${PREFIX}/bin - ${INSTALL_SCRIPT} ${WRKDIR}/${PYTHON_VERSION:S/thon/thon-shared/}-config ${PREFIX}/bin - - @# shared version of executable and library - ${INSTALL_PROGRAM} ${SHARED_WRKSRC}/lib${PYTHON_VERSION}.so.1 \ - ${PREFIX}/lib - cd ${PREFIX}/lib; ${LN} -sf lib${PYTHON_VERSION}.so.1 \ - lib${PYTHON_VERSION}.so - ${LN} -sf ${PREFIX}/lib/lib${PYTHON_VERSION}.so ${PYTHONPREFIX_LIBDIR}/config - ${INSTALL_PROGRAM} \ - ${SHARED_WRKSRC}/${PYTHON_VERSION:S/thon/thon-shared/} \ - ${PREFIX}/bin - - @# additional files installing by ports - ${INSTALL_SCRIPT} ${WRKDIR}/pydoc2.5 ${WRKDIR}/idle2.5 \ - ${WRKDIR}/smtpd2.5.py ${PREFIX}/bin - @${MKDIR} ${MANPREFIX}/man/man1 - ${INSTALL_MAN} ${PYTHON_WRKSRC}/Misc/python.man \ - ${MANPREFIX}/man/man1/${PYTHON_VERSION}.1 - -.if ${PYTHON_VERSION} == ${PYTHON_DEFAULT_VERSION} - for f in ${BIN_SCRIPTS}; do \ - TARGET=`${ECHO_CMD} $$f | ${SED} -E ${BINLINKS_SUB}`; \ - cd ${PREFIX}/bin && ${LN} -f $$TARGET $$f; \ - done -.endif - -.if !defined(NOPORTDOCS) - @${MKDIR} ${TOOLSDIR} - @cd ${PYTHON_WRKSRC}; ${TAR} -cf - Tools | \ - (cd ${TOOLSDIR}; ${TAR} -xf -) - @${MKDIR} ${DEMODIR} - @cd ${PYTHON_WRKSRC}/Demo; ${TAR} -cf - * | \ - (cd ${DEMODIR}; ${TAR} -xf -) -.endif - - @${CAT} ${PKGMESSAGE} - -.include diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/qbasic_example b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/qbasic_example deleted file mode 100644 index 27041af..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/qbasic_example +++ /dev/null @@ -1,2 +0,0 @@ -10 print RIGHT$("hi there", 5) -20 goto 10 diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/qsort.prolog b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/qsort.prolog deleted file mode 100644 index d78de6f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/qsort.prolog +++ /dev/null @@ -1,13 +0,0 @@ -partition([], _, [], []). -partition([X|Xs], Pivot, Smalls, Bigs) :- - ( X @< Pivot -> - Smalls = [X|Rest], - partition(Xs, Pivot, Rest, Bigs) - ; Bigs = [X|Rest], - partition(Xs, Pivot, Smalls, Rest) - ). - -quicksort([]) --> []. -quicksort([X|Xs]) --> - { partition(Xs, X, Smaller, Bigger) }, - quicksort(Smaller), [X], quicksort(Bigger). diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/r-console-transcript.Rout b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/r-console-transcript.Rout deleted file mode 100644 index d0cf34b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/r-console-transcript.Rout +++ /dev/null @@ -1,38 +0,0 @@ - -R version 2.9.2 (2009-08-24) -Copyright (C) 2009 The R Foundation for Statistical Computing -ISBN 3-900051-07-0 - -R is free software and comes with ABSOLUTELY NO WARRANTY. -You are welcome to redistribute it under certain conditions. -Type 'license()' or 'licence()' for distribution details. - - Natural language support but running in an English locale - -R is a collaborative project with many contributors. -Type 'contributors()' for more information and -'citation()' on how to cite R or R packages in publications. - -Type 'demo()' for some demos, 'help()' for on-line help, or -'help.start()' for an HTML browser interface to help. -Type 'q()' to quit R. - -[R.app GUI 1.29 (5464) i386-apple-darwin8.11.1] - -> x <- function {} -Error: syntax error -> x <- function() {} -> x <- function() { -+ cat("hello") -+ cat("world") -+ } -> x -function() { -cat("hello") -cat("world") -} -> x() -helloworld -> 2 + 2 -[1] 4 -> \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/r6rs-comments.scm b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/r6rs-comments.scm deleted file mode 100644 index cd5c363..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/r6rs-comments.scm +++ /dev/null @@ -1,23 +0,0 @@ -#!r6rs - -#| - - The FACT procedure computes the factorial - - of a non-negative integer. - -|# - -(define fact - - (lambda (n) - - ;; base case - - (if (= n 0) - - #;(= n 1) - - 1 ; identity of * - - (* n (fact (- n 1)))))) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ragel-cpp_rlscan b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ragel-cpp_rlscan deleted file mode 100644 index 4b14632..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ragel-cpp_rlscan +++ /dev/null @@ -1,280 +0,0 @@ -/* - * Lexes Ragel input files. - * - * @LANG: c++ - * - * Test works with split code gen. - */ - -#include -#include -#include -#include - -using namespace std; - -void escapeXML( const char *data ) -{ - while ( *data != 0 ) { - switch ( *data ) { - case '<': cout << "<"; break; - case '>': cout << ">"; break; - case '&': cout << "&"; break; - default: cout << *data; break; - } - data += 1; - } -} - -void escapeXML( char c ) -{ - switch ( c ) { - case '<': cout << "<"; break; - case '>': cout << ">"; break; - case '&': cout << "&"; break; - default: cout << c; break; - } -} - -void escapeXML( const char *data, int len ) -{ - for ( const char *end = data + len; data != end; data++ ) { - switch ( *data ) { - case '<': cout << "<"; break; - case '>': cout << ">"; break; - case '&': cout << "&"; break; - default: cout << *data; break; - } - } -} - -inline void write( const char *data ) -{ - cout << data; -} - -inline void write( char c ) -{ - cout << c; -} - -inline void write( const char *data, int len ) -{ - cout.write( data, len ); -} - - -%%{ - machine RagelScan; - - word = [a-zA-Z_][a-zA-Z_0-9]*; - integer = [0-9]+; - hex = '0x' [0-9a-fA-F] [0-9a-fA-F]*; - - default = ^0; - EOF = 0; - - # Handles comments in outside code and inline blocks. - c_comment := - ( default* :>> '*/' ) - ${ escapeXML( fc ); } - @{ fret; }; - - action emit { - escapeXML( ts, te-ts ); - } - - # - # Inline action code - # - - ilscan := |* - - "'" ( [^'\\] | /\\./ )* "'" => emit; - '"' ( [^"\\] | /\\./ )* '"' => emit; - '/*' { - write( "/*" ); - fcall c_comment; - }; - '//' [^\n]* '\n' => emit; - - '{' { - write( '{' ); - inline_depth += 1; - }; - - '}' { - write( '}' ); - /* If dropping down to the last } then return - * to ragel code. */ - if ( --inline_depth == 0 ) { - write( "\n" ); - fgoto rlscan; - } - }; - - default => { escapeXML( *ts ); }; - *|; - - # - # Ragel Tokens - # - - rlscan := |* - '}%%' { - if ( !single_line ) { - write( "\n" ); - fgoto main; - } - }; - - '\n' { - if ( single_line ) { - write( "\n" ); - fgoto main; - } - }; - - # Word - word { - write( "" ); - write( ts, te-ts ); - write( "\n" ); - }; - - # Decimal integer. - integer { - write( "" ); - write( ts, te-ts ); - write( "\n" ); - }; - - # Hexidecimal integer. - hex { - write( "" ); - write( ts, te-ts ); - write( "\n" ); - }; - - # Consume comments. - '#' [^\n]* '\n'; - - # Single literal string. - "'" ( [^'\\] | /\\./ )* "'" { - write( "" ); - escapeXML( ts, te-ts ); - write( "\n" ); - }; - - # Double literal string. - '"' ( [^"\\] | /\\./ )* '"' { - write( "" ); - escapeXML( ts, te-ts ); - write( "\n" ); - }; - - # Or literal. - '[' ( [^\]\\] | /\\./ )* ']' { - write( "" ); - escapeXML( ts, te-ts ); - write( "\n" ); - }; - - # Regex Literal. - '/' ( [^/\\] | /\\./ ) * '/' { - write( "" ); - escapeXML( ts, te-ts ); - write( "\n" ); - }; - - # Open an inline block - '{' { - inline_depth = 1; - write( "{" ); - fgoto ilscan; - }; - - punct { - write( "" ); - escapeXML( fc ); - write( "\n" ); - }; - - default; - *|; - - # - # Outside code. - # - - main := |* - - "'" ( [^'\\] | /\\./ )* "'" => emit; - '"' ( [^"\\] | /\\./ )* '"' => emit; - - '/*' { - escapeXML( ts, te-ts ); - fcall c_comment; - }; - - '//' [^\n]* '\n' => emit; - - '%%{' { - write( "
    \n" ); - single_line = false; - fgoto rlscan; - }; - - '%%' { - write( "
    \n" ); - single_line = true; - fgoto rlscan; - }; - - default { - escapeXML( *ts ); - }; - - # EOF. - EOF; - *|; -}%% - -%% write data nofinal; - -void test( const char *data ) -{ - std::ios::sync_with_stdio(false); - - int cs, act; - const char *ts, *te; - int stack[1], top; - - bool single_line = false; - int inline_depth = 0; - - %% write init; - - /* Read in a block. */ - const char *p = data; - const char *pe = data + strlen( data ); - const char *eof = pe; - %% write exec; - - if ( cs == RagelScan_error ) { - /* Machine failed before finding a token. */ - cerr << "PARSE ERROR" << endl; - exit(1); - } -} - -#define BUFSIZE 2048 - -int main() -{ - std::ios::sync_with_stdio(false); - - test("hi %%{ /'}%%'/ { /*{*/ {} } + '\\'' }%%there\n"); - - return 0; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ragel-cpp_snippet b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ragel-cpp_snippet deleted file mode 100644 index 203ae28..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ragel-cpp_snippet +++ /dev/null @@ -1,2 +0,0 @@ - %% write init; - /* Read in a block. */ diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/regex.js b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/regex.js deleted file mode 100644 index 7790cb0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/regex.js +++ /dev/null @@ -1,22 +0,0 @@ -// regex - -blah(/abc/); -x = /abc/; -x = /abc/.match; - -// math - -blah(1/2); //comment -x = 1 / 2 / 3; -x = 1/1/.1; - -// broken - -x=/1/; -x=1/a/g; -x=a/a/g; - -// real-world - -var x = 1/(1+Math.sqrt(sum)); // convert to number between 1-0 -return Math.round((num / den) * 100)/100; diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/reversi.lsp b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/reversi.lsp deleted file mode 100644 index fa9a333..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/reversi.lsp +++ /dev/null @@ -1,427 +0,0 @@ -#!/usr/bin/env newlisp -;; @module reversi.lsp -;; @description a simple version of Reversi: you as white against newLISP as black -;; @version 0.1 alpha August 2007 -;; @author cormullion -;; -;; 2008-10-08 21:46:54 -;; updated for newLISP version 10. (changed nth-set to setf) -;; this now does not work with newLISP version 9! -;; -;; This is my first attempt at writing a simple application using newLISP-GS. -;; The game algorithms are basically by -;; Peter Norvig http://norvig.com/paip/othello.lisp -;; and all I've done is translate to newLISP and add the interface... -;; -;; To-Do: work out how to handle the end of the game properly... -;; To-Do: complete newlispdoc for the functions - -(constant 'empty 0) -(constant 'black 1) -(constant 'white 2) -(constant 'outer 3) ; squares outside the 8x8 board - -(set '*board* '()) ; the master board is a 100 element list -(set '*moves* '()) ; list of moves made - -; these are the 8 different directions from a square on the board - -(set 'all-directions '(-11 -10 -9 -1 1 9 10 11)) - -; return a list of all the playable squares (the 8 by 8 grid inside the 10by10 - -(define (all-squares) - (local (result) - (for (square 11 88) - (if (<= 1 (mod square 10) 8) - (push square result -1))) -result)) - -; make a board - -(define (make-board) - (set '*board* (dup outer 100)) - (dolist (s (all-squares)) - (setf (*board* s) empty))) - -; for testing and working at a terminal - -(define (print-board) - (print { }) - (for (c 1 8) - (print c)) - (set 'c 0) - (for (i 0 99) - (cond - ((= (*board* i) 0) (print {.})) - ((= (*board* i) 1) (print {b})) - ((= (*board* i) 2) (print {w}))) - (if (and (<= i 88) (= (mod (+ i 1) 10) 0)) ; newline - (print "\n" (inc c)))) - (println "\n")) - -; the initial starting pattern - -(define (initial-board) - (make-board) - (setf (*board* 44) white) - (setf (*board* 55) white) - (setf (*board* 45) black) - (setf (*board* 54) black)) - -(define (opponent player) - (if (= player black) white black)) - -(define (player-name player) - (if (= player white) "white" "black")) - -(define (valid-move? move) - (and - (integer? move) - (<= 11 move 88) - (<= 1 (mod move 10) 8))) - -(define (empty-square? square) - (and - (valid-move? square) - (= (*board* square) empty))) - -; test whether a move is legal. The square must be empty -; and it must flip at least one of the opponent's piece - -(define (legal-move? move player) - (and - (empty-square? move) - (exists (fn (dir) (would-flip? move player dir)) all-directions))) - -; would this move by player result in any flips in the given direction? -; if so, return the number of the 'opposite' (bracketing) piece's square - -(define (would-flip? move player dir) - (let - ((c (+ move dir))) - (and - (= (*board* c) (opponent player)) - (find-bracketing-piece (+ c dir) player dir)))) - -(define (find-bracketing-piece square player dir) - ; return the square of the bracketing piece, if any - (cond - ((= (*board* square) player) square) - ((= (*board* square) (opponent player)) - (find-bracketing-piece (+ square dir) player dir)) - (true nil))) - -(define (make-flips move player dir) - (let - ((bracketer (would-flip? move player dir)) - (c (+ move dir))) - (if bracketer - (do-until (= c bracketer) - (setf (*board* c) player) - (push c *flips* -1) - (inc c dir))))) - -; make the move on the master game board, not yet visually - -(define (make-move move player) - (setf (*board* move) player) - (push move *moves* -1) - (set '*flips* '()) ; we're going to keep a record of the flips made - (dolist (dir all-directions) - (make-flips move player dir))) - -(define (next-to-play previous-player) - (let ((opp (opponent previous-player))) - (cond - ((any-legal-move? opp) opp) - ((any-legal-move? previous-player) - (println (player-name opp) " has no moves") - previous-player) - (true nil)))) - -; are there any legal moves (returns first) for this player? -(define (any-legal-move? player) - (exists (fn (move) (legal-move? move player)) - (all-squares))) - -; a list of all legal moves might be useful -(define (legal-moves player) - (let ((result '())) - (dolist (move (all-squares)) - (if (legal-move? move player) - (push move result))) - (unique result))) - -; define any number of strategies that can be called on to calculate -; the next computer move. This is the only one I've done... - make -; any legal move at random! - -(define (random-strategy player) - (seed (date-value)) - (apply amb (legal-moves player))) - -; get the next move using a particular strategy - -(define (get-move strategy player) - (let ((move (apply strategy (list player)))) - (cond - ((and - (valid-move? move) - (legal-move? move player)) - (make-move move player)) - (true - (println "no valid or legal move for " (player-name player) ) - nil)) - move)) - -; that's about all the game algorithms for now -; now for the interface - -(if (= ostype "Win32") - (load (string (env "PROGRAMFILES") "/newlisp/guiserver.lsp")) - (load "/usr/share/newlisp/guiserver.lsp") -) - -(gs:init) -(map set '(screen-width screen-height) (gs:get-screen)) -(set 'board-width 540) -; center on screen -(gs:frame 'Reversi (- (/ screen-width 2) (/ board-width 2)) 60 board-width 660 "Reversi") -(gs:set-border-layout 'Reversi) - -(gs:canvas 'MyCanvas 'Reversi) - (gs:set-background 'MyCanvas '(.8 .9 .7 .8)) - (gs:mouse-released 'MyCanvas 'mouse-released-action true) - -(gs:panel 'Controls) - (gs:button 'Start 'start-game "Start") - -(gs:panel 'Lower) - (gs:label 'WhiteScore "") - (gs:label 'BlackScore "") - -(gs:add-to 'Controls 'Start ) -(gs:add-to 'Lower 'WhiteScore 'BlackScore) -(gs:add-to 'Reversi 'MyCanvas "center" 'Controls "north" 'Lower "south") - -(gs:set-anti-aliasing true) -(gs:set-visible 'Reversi true) - -; size of board square, and radius/width of counter -(set 'size 60 'width 30) - -; initialize the master board - -(define (initial-board) - (make-board) - (setf (*board* 44) white) - (setf (*board* 55) white) - (setf (*board* 45) black) - (setf (*board* 54) black) -) - -; draw a graphical repesentation of the board - -(define (draw-board) - (local (x y) - (dolist (i (all-squares)) - (map set '(x y) (square-to-xy i)) - (gs:draw-rect - (string x y) - (- (* y size) width ) ; !!!!!! - (- (* x size) width ) - (* width 2) - (* width 2) - gs:white)))) - -(define (draw-first-four-pieces) - (draw-piece 44 "white") - (draw-piece 55 "white") - (draw-piece 45 "black") - (draw-piece 54 "black")) - -; this next function can mark the legal moves available to a player - -(define (show-legal-moves player) - (local (legal-move-list x y) - (set 'legal-move-list (legal-moves player)) - (dolist (m (all-squares)) - (map set '(x y) (square-to-xy m)) - (gs:draw-rect - (string x y) - (- (* y size) width ) ; !!!!!! - (- (* x size) width ) - (* width 2) - (* width 2) - (if (find m legal-move-list) gs:blue gs:white) - ) - ) - ) -) - -; convert the number of a square on the master board to coordinates - -(define (square-to-xy square) - (list (/ square 10) (mod square 10))) - -; draw one of the pieces - -(define (draw-piece square colour) - (local (x y) - (map set '(x y) (square-to-xy square)) - (cond - ((= colour "white") - (gs:fill-circle - (string x y) - (* y size) ; !!!!!!! y first, cos y is x ;-) - (* x size) - width - gs:white)) - - ((= colour "black") - (gs:fill-circle - (string x y) - (* y size) - (* x size) - width - gs:black)) - - ((= colour "empty") - (gs:draw-rect - (string x y) - (- (* y size) width ) - (- (* x size) width ) - (* width 2) - (* width 2) - gs:white)) - ))) - -; animate the pieces flipping - -(define (flip-piece square player) -; flip by drawing thinner and fatter ellipses -; go from full disk in opposite colour to invisible -; then from invisible to full disk in true colour - (local (x y colour) - (map set '(x y) (square-to-xy square)) - ; delete original piece - (gs:delete-tag (string x y)) - (set 'colour (if (= player 2) gs:black gs:white )) - (for (i width 1 -3) - (gs:fill-ellipse - (string x y {flip} i) - (* y size) ; y first :-) !!! - (* x size) - i - width - colour) - (sleep 20) ; this might need adjusting... - (gs:delete-tag (string x y {flip} i)) - ) - (set 'colour (if (= player 2) gs:white gs:black)) - (for (i 1 width 3) - (gs:fill-ellipse - (string x y {flip} i) - (* y size) ; :-) !!! - (* x size) - i - width - colour) - (sleep 20) - (gs:delete-tag (string x y {flip} i)) - ) - ; draw the piece again - (gs:fill-circle - (string x y) - (* y size) - (* x size) - width - colour) - ) -) - -(define (do-move move player) - (cond - ; check if the move is good ... - ((and (!= player nil) - (valid-move? move) - (legal-move? move player)) - - ; ... play it - ; make move on board - (make-move move player) - ; and on screen - (draw-piece move (player-name player)) - (gs:update) - ; do flipping stuff - - ; wait for a while - (sleep 1000) - - ; then do flipping - (dolist (f *flips*) - (flip-piece f player)) - - (inc *move-number*) - (draw-piece move (player-name player)) - (gs:update) - - ; update scores - (gs:set-text 'WhiteScore - (string "White: " (first (count (list white) *board*)))) - (gs:set-text 'BlackScore - (string "Black: " (first (count (list black) *board*)))) - ) - ; or return nil - (true - nil))) - -; the game is driven by the mouse clicks of the user -; in reply, the computer plays a black piece -; premature clicking is possible and possibly a bad thing... - -(define (mouse-released-action x y button modifiers tags) - ; extract the tag of the clicked square - (set 'move (int (string (first tags)) 0 10)) - (if (do-move move player) - (begin - (set 'player (next-to-play player)) - ; there is a training mode - legal squares are highlighted - ; you can uncomment the next line... - ; (show-legal-moves player) - (gs:update) - - ; wait for black's reply - (gs:set-cursor 'Reversi "wait") - (gs:set-text 'Start "black's move - thinking...") - ; give the illusion of Deep Thought... - (sleep 2000) - ; black's reply - ; currently only the random strategy has been defined... - (set 'strategy random-strategy) - (set 'move (apply strategy (list player))) - (do-move move player) - (set 'player (next-to-play player)) - ; (show-legal-moves player) ; to see black's moves - (gs:set-text 'Start "your move") - (gs:set-cursor 'Reversi "default") - (gs:update)))) - -(define (start-game) - (gs:set-text 'Start "Click a square to place a piece!") - (gs:disable 'Start) - (set 'player white)) - -(define (start) - (gs:set-text 'Start "Start") - (gs:enable 'Start) - (set '*move-number* 1 - '*flips* '()) - (initial-board) - (draw-board) - (draw-first-four-pieces)) - -(start) - -(gs:listen) \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/robotframework_test.txt b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/robotframework_test.txt deleted file mode 100644 index 63ba63e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/robotframework_test.txt +++ /dev/null @@ -1,39 +0,0 @@ -*** Settings *** -Documentation Simple example demonstrating syntax highlighting. -Library ExampleLibrary -Test Setup Keyword argument argument with ${VARIABLE} - -*** Variables *** -${VARIABLE} Variable value -@{LIST} List variable here - -*** Test Cases *** -Keyword-driven example - Initialize System - Do Something - Result Should Be 42 - [Teardown] Cleanup System - -Data-driven example - [Template] Keyword - argument1 argument2 - argument ${VARIABLE} - @{LIST} - -Gherkin - Given system is initialized - When something is done - Then result should be "42" - -| Pipes | -| | [Documentation] | Also pipe separated format is supported. | -| | Log | As this example demonstrates. | - -*** Keywords *** -Result Should Be - [Arguments] ${expected} - ${actual} = Get Value - Should be Equal ${actual} ${expected} - -Then result should be "${expected}" - Result Should Be ${expected} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/rql-queries.rql b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/rql-queries.rql deleted file mode 100644 index 1d86df3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/rql-queries.rql +++ /dev/null @@ -1,34 +0,0 @@ -Any N, N2 where N is Note, N2 is Note, N a_faire_par P1, P1 nom 'john', N2 a_faire_par P2, P2 nom 'jane' ; -DISTINCT Any N, D, C, T, A ORDERBY D DESC LIMIT 40 where N is Note, N diem D, W is Workcase, W concerned_by N, N cost C, N text T, N author A, N diem <= today -Bookmark B WHERE B owned_by G, G eid 5; -Any X WHERE E eid 22762, NOT E is_in X, X modification_date D ORDERBY D DESC LIMIT 41; -Any A, R, SUB ORDERBY R WHERE A is "Workcase", S is Division, S concerned_by A, A subject SUB, S eid 85, A ref R; -Any D, T, L WHERE D is Document, A concerned_by D,A eid 14533, D title T, D location L; -Any N,A,B,C,D ORDERBY A DESC WHERE N is Note, W concerned_by N, W eid 14533, N diem A,N author B,N text C,N cost D; -Any X ORDERBY D DESC LIMIT 41 WHERE E eid 18134, NOT E concerned_by X, X modification_date D -DISTINCT Any N, D, C, T, A ORDERBY D ASC LIMIT 40 WHERE N is Note, N diem D, P is Person, N to_be_contacted_by G, N cost C, N text T, N author A, G login "john"; -INSERT Person X: X surname "Doe", X firstname "John"; -Workcase W where W ref "ABCD12"; -Workcase W where W ref LIKE "AB%"; -Any X WHERE X X eid 53 -Any X WHERE X Document X occurence_of F, F class C, C name 'Comics' X owned_by U, U login 'syt' X available true -Person P WHERE P work_for P, S name 'Acme', P interested_by T, T name 'training' -Note N WHERE N written_on D, D day> (today -10), N written_by P, P name 'joe' or P name 'jack' -Person P WHERE (P interested_by T, T name 'training') or (P city 'Paris') -Any N, P WHERE X is Person, X name N, X first_name P -String N, P WHERE X is Person, X name N, X first_name P -INSERT Person X: X name 'widget' -INSERT Person X, Person Y: X name 'foo', Y name 'nice', X friend Y -INSERT Person X: X name 'foo', X friend Y WHERE name 'nice' -SET X name 'bar', X first_name 'original' where X is Person X name 'foo' -SET X know Y WHERE X friend Y -DELETE Person X WHERE X name 'foo' -DELETE X friend Y WHERE X is Person, X name 'foo' -Any X WHERE X name LIKE '%lt' -Any X WHERE X name IN ( 'joe', 'jack', 'william', 'averell') -Any X, V WHERE X concerns P, P eid 42, X corrected_in V? -Any C, P WHERE C is Card, P? documented_by C -Point P where P abs X, P ord Y, P value X+Y -Document X where X class C, C name 'Cartoon', X owned_by U, U login 'joe', X available true -(Any X WHERE X is Document) UNION (Any X WHERE X is File) -Any A,B WHERE A creation_date B WITH A BEING (Any X WHERE X is Document) UNION (Any X WHERE X is File) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ruby_func_def.rb b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ruby_func_def.rb deleted file mode 100644 index a820c68..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/ruby_func_def.rb +++ /dev/null @@ -1,11 +0,0 @@ -class (get_foo("blub"))::Foo - def (foo("bar") + bar("baz")).something argh, aaahaa - 42 - end -end - -class get_the_fuck("out")::Of::My - def parser_definition - ruby! - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/rust_example.rs b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/rust_example.rs deleted file mode 100644 index 1c0a70c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/rust_example.rs +++ /dev/null @@ -1,233 +0,0 @@ -// Copyright 2012 The Rust Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution and at -// http://rust-lang.org/COPYRIGHT. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -// based on: -// http://shootout.alioth.debian.org/u32/benchmark.php?test=nbody&lang=java - -extern mod std; - -use core::os; - -// Using sqrt from the standard library is way slower than using libc -// directly even though std just calls libc, I guess it must be -// because the the indirection through another dynamic linker -// stub. Kind of shocking. Might be able to make it faster still with -// an llvm intrinsic. -#[nolink] -extern mod libc { - #[legacy_exports]; - fn sqrt(n: float) -> float; -} - -fn main() { - let args = os::args(); - let args = if os::getenv(~"RUST_BENCH").is_some() { - ~[~"", ~"4000000"] - } else if args.len() <= 1u { - ~[~"", ~"100000"] - } else { - args - }; - let n = int::from_str(args[1]).get(); - let mut bodies: ~[Body::props] = NBodySystem::make(); - io::println(fmt!("%f", NBodySystem::energy(bodies))); - let mut i = 0; - while i < n { - NBodySystem::advance(bodies, 0.01); - i += 1; - } - io::println(fmt!("%f", NBodySystem::energy(bodies))); -} - -mod NBodySystem { - use Body; - - pub fn make() -> ~[Body::props] { - let mut bodies: ~[Body::props] = - ~[Body::sun(), - Body::jupiter(), - Body::saturn(), - Body::uranus(), - Body::neptune()]; - - let mut px = 0.0; - let mut py = 0.0; - let mut pz = 0.0; - - let mut i = 0; - while i < 5 { - px += bodies[i].vx * bodies[i].mass; - py += bodies[i].vy * bodies[i].mass; - pz += bodies[i].vz * bodies[i].mass; - - i += 1; - } - - // side-effecting - Body::offset_momentum(&mut bodies[0], px, py, pz); - - return bodies; - } - - pub fn advance(bodies: &mut [Body::props], dt: float) { - let mut i = 0; - while i < 5 { - let mut j = i + 1; - while j < 5 { - advance_one(&mut bodies[i], - &mut bodies[j], dt); - j += 1; - } - - i += 1; - } - - i = 0; - while i < 5 { - move_(&mut bodies[i], dt); - i += 1; - } - } - - pub fn advance_one(bi: &mut Body::props, - bj: &mut Body::props, - dt: float) unsafe { - let dx = bi.x - bj.x; - let dy = bi.y - bj.y; - let dz = bi.z - bj.z; - - let dSquared = dx * dx + dy * dy + dz * dz; - - let distance = ::libc::sqrt(dSquared); - let mag = dt / (dSquared * distance); - - bi.vx -= dx * bj.mass * mag; - bi.vy -= dy * bj.mass * mag; - bi.vz -= dz * bj.mass * mag; - - bj.vx += dx * bi.mass * mag; - bj.vy += dy * bi.mass * mag; - bj.vz += dz * bi.mass * mag; - } - - pub fn move_(b: &mut Body::props, dt: float) { - b.x += dt * b.vx; - b.y += dt * b.vy; - b.z += dt * b.vz; - } - - pub fn energy(bodies: &[Body::props]) -> float unsafe { - let mut dx; - let mut dy; - let mut dz; - let mut distance; - let mut e = 0.0; - - let mut i = 0; - while i < 5 { - e += - 0.5 * bodies[i].mass * - (bodies[i].vx * bodies[i].vx + bodies[i].vy * bodies[i].vy - + bodies[i].vz * bodies[i].vz); - - let mut j = i + 1; - while j < 5 { - dx = bodies[i].x - bodies[j].x; - dy = bodies[i].y - bodies[j].y; - dz = bodies[i].z - bodies[j].z; - - distance = ::libc::sqrt(dx * dx + dy * dy + dz * dz); - e -= bodies[i].mass * bodies[j].mass / distance; - - j += 1; - } - - i += 1; - } - return e; - - } -} - -mod Body { - use Body; - - pub const PI: float = 3.141592653589793; - pub const SOLAR_MASS: float = 39.478417604357432; - // was 4 * PI * PI originally - pub const DAYS_PER_YEAR: float = 365.24; - - pub type props = - {mut x: float, - mut y: float, - mut z: float, - mut vx: float, - mut vy: float, - mut vz: float, - mass: float}; - - pub fn jupiter() -> Body::props { - return {mut x: 4.84143144246472090e+00, - mut y: -1.16032004402742839e+00, - mut z: -1.03622044471123109e-01, - mut vx: 1.66007664274403694e-03 * DAYS_PER_YEAR, - mut vy: 7.69901118419740425e-03 * DAYS_PER_YEAR, - mut vz: -6.90460016972063023e-05 * DAYS_PER_YEAR, - mass: 9.54791938424326609e-04 * SOLAR_MASS}; - } - - pub fn saturn() -> Body::props { - return {mut x: 8.34336671824457987e+00, - mut y: 4.12479856412430479e+00, - mut z: -4.03523417114321381e-01, - mut vx: -2.76742510726862411e-03 * DAYS_PER_YEAR, - mut vy: 4.99852801234917238e-03 * DAYS_PER_YEAR, - mut vz: 2.30417297573763929e-05 * DAYS_PER_YEAR, - mass: 2.85885980666130812e-04 * SOLAR_MASS}; - } - - pub fn uranus() -> Body::props { - return {mut x: 1.28943695621391310e+01, - mut y: -1.51111514016986312e+01, - mut z: -2.23307578892655734e-01, - mut vx: 2.96460137564761618e-03 * DAYS_PER_YEAR, - mut vy: 2.37847173959480950e-03 * DAYS_PER_YEAR, - mut vz: -2.96589568540237556e-05 * DAYS_PER_YEAR, - mass: 4.36624404335156298e-05 * SOLAR_MASS}; - } - - pub fn neptune() -> Body::props { - return {mut x: 1.53796971148509165e+01, - mut y: -2.59193146099879641e+01, - mut z: 1.79258772950371181e-01, - mut vx: 2.68067772490389322e-03 * DAYS_PER_YEAR, - mut vy: 1.62824170038242295e-03 * DAYS_PER_YEAR, - mut vz: -9.51592254519715870e-05 * DAYS_PER_YEAR, - mass: 5.15138902046611451e-05 * SOLAR_MASS}; - } - - pub fn sun() -> Body::props { - return {mut x: 0.0, - mut y: 0.0, - mut z: 0.0, - mut vx: 0.0, - mut vy: 0.0, - mut vz: 0.0, - mass: SOLAR_MASS}; - } - - pub fn offset_momentum(props: &mut Body::props, - px: float, py: float, pz: float) { - props.vx = -px / SOLAR_MASS; - props.vy = -py / SOLAR_MASS; - props.vz = -pz / SOLAR_MASS; - } - -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/scilab.sci b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/scilab.sci deleted file mode 100644 index 8dea7b9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/scilab.sci +++ /dev/null @@ -1,30 +0,0 @@ -// Scilab ( http://www.scilab.org/ ) -// Copyright (C) INRIA - Serge STEER -// - -function I=sub2ind(dims,varargin) -//sub2ind is used to determine the equivalent single index -//corresponding to a given set of subscript values. - -//I = sub2ind(dims,i1,i2,..) returns the linear index equivalent to the -//row, column, ... subscripts in the arrays i1,i2,.. for an matrix of -//size dims. - -//I = sub2ind(dims,Mi) returns the linear index -//equivalent to the n subscripts in the columns of the matrix Mi for a matrix -//of size dims. - - d=[1;cumprod(matrix(dims(1:$-1),-1,1))] - for i=1:size(varargin) - if varargin(i)==[] then I=[],return,end - end - - if size(varargin)==1 then //subindices are the columns of the argument - I=(varargin(1)-1)*d+1 - else //subindices are given as separated arguments - I=1 - for i=1:size(varargin) - I=I+(varargin(i)-1)*d(i) - end - end -endfunction diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/scope.cirru b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/scope.cirru deleted file mode 100644 index 728bcab..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/scope.cirru +++ /dev/null @@ -1,43 +0,0 @@ - --- https://github.com/Cirru/cirru-gopher/blob/master/code/scope.cr - -set a (int 2) - -print (self) - -set c (child) - -under c - under parent - print a - -print $ get c a - -set c x (int 3) -print $ get c x - -set just-print $ code - print a - -print just-print - -eval (self) just-print -eval just-print - -print (string "string with space") -print (string "escapes \n \"\\") - -brackets ((((())))) - -"eval" $ string "eval" - -print (add $ (int 1) (int 2)) - -print $ unwrap $ - map (a $ int 1) (b $ int 2) - -print a - int 1 - , b c - int 2 - , d \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/session.dylan-console b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/session.dylan-console deleted file mode 100644 index 6f289c8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/session.dylan-console +++ /dev/null @@ -1,9 +0,0 @@ -? 7 * 52; -=> 364 -? define variable *your-variable* = $foo; -? begin - let yours = "apple"; - let mine = yours; - mine == yours; - end; -=> #t diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/sibling.prolog b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/sibling.prolog deleted file mode 100644 index bc59150..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/sibling.prolog +++ /dev/null @@ -1,19 +0,0 @@ -/* Comments /* can nest */ -still a comment -*/ - -:- module(maplist, maplist/3) - -assert(world:done). % asserts - -sibling(X, Y) :- parent_child(Z, X), parent_child(Z, Y). - -parent_child(X, Y) :- father_child(X, Y). -parent_child(X, Y) :- mother_child(X, Y). - -mother_child(trude, sally). - -father_child(tom, sally). -father_child(tom, erica). -father_child(mike, tom). - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/simple.md b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/simple.md deleted file mode 100644 index 8f12771..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/simple.md +++ /dev/null @@ -1,747 +0,0 @@ -module simple; - -// Importing stuff. -{ - function loadMod(name, ns) - { - assert(name == "mod"); - - ns.x = "I'm x"; - - ns.foo = function foo() - { - writefln("foo"); - }; - - ns.bar = function bar(x) - { - return x[0]; - }; - - ns.baz = function baz() - { - writefln(x); - }; - - foreach(k, v; ns) - if(isFunction(v)) - v.environment(ns); - } - - setModuleLoader("mod", loadMod); - - import mod : foo, bar; - foo(); - writefln(bar([5])); - mod.baz(); - - writefln(); -} - -// Super calls. -{ - class Base - { - function fork() - { - writefln("Base fork."); - } - } - - class Derived : Base - { - function fork() - { - writefln("Derived fork!"); - super.fork(); - } - } - - local d = Derived(); - d.fork(); - - writefln(); -} - -// Coroutines and coroutine iteration. -{ - local countDown = coroutine function countDown(x) - { - yield(); - - while(x > 0) - { - yield(x); - x--; - } - }; - - foreach(v; countDown, 5) - writefln(v); - - writefln(); - - local forEach = coroutine function forEach(t) - { - yield(); - - foreach(k, v; t) - yield(k, v); - }; - - foreach(_, k, v; forEach, {hi = 1, bye = 2}) - writefln("key: ", k, ", value: ", v); - - writefln(); -} - -// Testing tailcalls. -{ - function recurse(x) - { - writefln("recurse: ", x); - - if(x == 0) - return toString(x); - else - return recurse(x - 1); - } - - writefln(recurse(5)); - writefln(); - - class A - { - function f(x) - { - writefln("A.f: ", x); - - if(x == 0) - return toString(x); - else - return this.f(x - 1); // call it as this.f to force a 'method' instruction to be generated - } - } - - local a = A(); - writefln(a.f(5)); - writefln(); -} - -{ - // A function which lets us define properties for a class. - // The varargs should be a bunch of tables, each with a 'name' field, and 'getter' and/or 'setter' fields. - function mixinProperties(classType, vararg) - { - classType.mProps = { }; - - classType.opIndex = function opIndex(key) - { - local prop = mProps[key]; - - if(prop is null) - throw format(classType, ".opIndex() - Property '%s' does not exist", key); - - local getter = prop.getter; - - if(getter is null) - throw format(classType, ".opIndex() - Property '%s' has no getter", key); - - return getter(with this); - }; - - classType.opIndexAssign = function opIndexAssign(key, value) - { - local prop = mProps[key]; - - if(prop is null) - throw format(classType, ".opIndexAssign() - Property '%s' does not exist", key); - - local setter = prop.setter; - - if(setter is null) - throw format(classType, ".opIndexAssign() - Property '%s' has no setter", key); - - setter(with this, value); - }; - - foreach(i, prop; [vararg]) - { - if(!isTable(prop)) - throw format("mixinProperties() - property ", i, " is not a table"); - - if(prop.name is null) - throw format("mixinProperties() - property ", i, " has no name"); - - if(prop.setter is null && prop.getter is null) - throw format("mixinProperties() - property '%s' has no getter or setter", prop.name); - - classType.mProps[prop.name] = prop; - } - } - - // Create a class to test out. - class PropTest - { - mX = 0; - mY = 0; - mName = ""; - - function constructor(name) - { - mName = name; - } - - function toString() - { - return format("name = '", mName, "' x = ", mX, " y = ", mY); - } - } - - // Mix in the properties. - mixinProperties - ( - PropTest, - - { - name = "x", - - function setter(value) - { - mX = value; - } - - function getter() - { - return mX; - } - }, - - { - name = "y", - - function setter(value) - { - mY = value; - } - - function getter() - { - return mY; - } - }, - - { - name = "name", - - function getter() - { - return mName; - } - } - ); - - // Create an instance and try it out. - local p = PropTest("hello"); - - writefln(p); - p.x = 46; - p.y = 123; - p.x = p.x + p.y; - writefln(p); - - // Try to access a nonexistent property. - try - p.name = "crap"; - catch(e) - { - writefln("caught: ", e); - writefln(getTraceback()); - } - - writefln(); -} - -// Some container classes. -{ - class PQ - { - mData; - mLength = 0; - - function constructor() - { - mData = array.new(15); - } - - function insert(data) - { - resizeArray(); - mData[mLength] = data; - - local index = mLength; - local parentIndex = (index - 1) / 2; - - while(index > 0 && mData[parentIndex] > mData[index]) - { - local temp = mData[parentIndex]; - mData[parentIndex] = mData[index]; - mData[index] = temp; - - index = parentIndex; - parentIndex = (index - 1) / 2; - } - - mLength += 1; - } - - function remove() - { - if(mLength == 0) - throw "PQ.remove() - No items to remove"; - - local data = mData[0]; - mLength -= 1; - mData[0] = mData[mLength]; - - local index = 0; - local left = 1; - local right = 2; - - while(index < mLength) - { - local smaller; - - if(left >= mLength) - { - if(right >= mLength) - break; - else - smaller = right; - } - else - { - if(right >= mLength) - smaller = left; - else - { - if(mData[left] < mData[right]) - smaller = left; - else - smaller = right; - } - } - - if(mData[index] > mData[smaller]) - { - local temp = mData[index]; - mData[index] = mData[smaller]; - mData[smaller] = temp; - - index = smaller; - left = (index * 2) + 1; - right = left + 1; - } - else - break; - } - - return data; - } - - function resizeArray() - { - if(mLength >= #mData) - mData.length((#mData + 1) * 2 - 1); - } - - function hasData() - { - return mLength != 0; - } - } - - class Stack - { - mHead = null; - - function push(data) - { - local t = { data = data, next = mHead }; - mHead = t; - } - - function pop() - { - if(mHead is null) - throw "Stack.pop() - No items to pop"; - - local item = mHead; - mHead = mHead.next; - - return item.data; - } - - function hasData() - { - return mHead !is null; - } - } - - class Queue - { - mHead = null; - mTail = null; - - function push(data) - { - local t = { data = data, next = null }; - - if(mTail is null) - { - mHead = t; - mTail = t; - } - else - { - mTail.next = t; - mTail = t; - } - } - - function pop() - { - if(mTail is null) - throw "Queue.pop() - No items to pop"; - - local item = mHead; - mHead = mHead.next; - - if(mHead is null) - mTail = null; - - return item.data; - } - - function hasData() - { - return mHead !is null; - } - } - - writefln("Priority queue (heap)"); - - local prioQ = PQ(); - - for(i : 0 .. 10) - prioQ.insert(math.rand(0, 20)); - - while(prioQ.hasData()) - writefln(prioQ.remove()); - - writefln(); - writefln("Stack"); - - local stack = Stack(); - - for(i : 0 .. 5) - stack.push(i + 1); - - while(stack.hasData()) - writefln(stack.pop()); - - writefln(); - writefln("Queue"); - - local queue = Queue(); - - for(i : 0 .. 5) - queue.push(i + 1); - - while(queue.hasData()) - writefln(queue.pop()); - - writefln(); -} - -// opApply tests. -{ - class Test - { - mData = [4, 5, 6]; - - function opApply(extra) - { - if(isString(extra) && extra == "reverse") - { - local function iterator_reverse(index) - { - index--; - - if(index < 0) - return; - - return index, mData[index]; - } - - return iterator_reverse, this, #mData; - } - else - { - local function iterator(index) - { - index++; - - if(index >= #mData) - return; - - return index, mData[index]; - } - - return iterator, this, -1; - } - } - } - - local test = Test(); - - foreach(k, v; test) - writefln("test[", k, "] = ", v); - - writefln(); - - foreach(k, v; test, "reverse") - writefln("test[", k, "] = ", v); - - writefln(); - - test = - { - fork = 5, - knife = 10, - spoon = "hi" - }; - - foreach(k, v; test) - writefln("test[", k, "] = ", v); - - test = [5, 10, "hi"]; - - writefln(); - - foreach(k, v; test) - writefln("test[", k, "] = ", v); - - writefln(); - - foreach(k, v; test, "reverse") - writefln("test[", k, "] = ", v); - - writefln(); - - foreach(k, v; "hello") - writefln("str[", k, "] = ", v); - - writefln(); - - foreach(k, v; "hello", "reverse") - writefln("str[", k, "] = ", v); - - writefln(); -} - -// Testing upvalues in for loops. -{ - local arr = array.new(10); - - for(i : 0 .. 10) - arr[i] = function() { return i; }; - - writefln("This should be the values 0 through 9:"); - - foreach(func; arr) - writefln(func()); - - writefln(); -} - -// Testing nested functions. -{ - function outer() - { - local x = 3; - - function inner() - { - x++; - writefln("inner x: ", x); - } - - writefln("outer x: ", x); - inner(); - writefln("outer x: ", x); - - return inner; - } - - local func = outer(); - func(); - - writefln(); -} - -// Testing Exceptions. -{ - function thrower(x) - { - if(x >= 3) - throw "Sorry, x is too big for me!"; - } - - function tryCatch(iterations) - { - try - { - for(i : 0 .. iterations) - { - writefln("tryCatch: ", i); - thrower(i); - } - } - catch(e) - { - writefln("tryCatch caught: ", e); - throw e; - } - finally - writefln("tryCatch finally"); - } - - try - { - tryCatch(2); - tryCatch(5); - } - catch(e) - writefln("caught: ", e); - - writefln(); -} - -// Testing arrays. -{ - local array = [7, 9, 2, 3, 6]; - - array.sort(); - - foreach(i, v; array) - writefln("arr[", i, "] = ", v); - - array ~= ["foo", "far"]; - - writefln(); - - foreach(i, v; array) - writefln("arr[", i, "] = ", v); - - writefln(); -} - -// Testing vararg functions. -{ - function vargs(vararg) - { - local args = [vararg]; - - writefln("num varargs: ", #args); - - foreach(i, v; args) - writefln("args[", i, "] = ", v); - } - - vargs(); - - writefln(); - - vargs(2, 3, 5, "foo", "bar"); - - writefln(); -} - -// Testing switches. -{ - foreach(v; ["hi", "bye", "foo"]) - { - switch(v) - { - case "hi": - writefln("switched to hi"); - break; - - case "bye": - writefln("switched to bye"); - break; - - default: - writefln("switched to something else"); - break; - } - } - - writefln(); - - foreach(v; [null, false, 1, 2.3, 'x', "hi"]) - { - switch(v) - { - case null: writefln("null"); break; - case false: writefln("false"); break; - case 1: writefln("1"); break; - case 2.3: writefln("2.3"); break; - case 'x': writefln("x"); break; - case "hi": writefln("hi"); break; - } - } - - writefln(); - - class A - { - mValue; - - this(value) - { - mValue = value; - } - - function opCmp(other) - { - assert(other as A); - return mValue <=> other.mValue; - } - } - - local a1 = A(1); - local a2 = A(2); - local a3 = A(3); - - for(s : 1 .. 4) - { - local ss = A(s); - - switch(ss) - { - case a1: - writefln(1); - break; - - case a2: - writefln(2); - break; - - case a3: - writefln(3); - break; - } - } -} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/smarty_example.html b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/smarty_example.html deleted file mode 100644 index cf4ffdc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/smarty_example.html +++ /dev/null @@ -1,209 +0,0 @@ -{php} - include "some/php/file.php"; - - foreach ($rows as $row) { - echo $row; - } -{/php} - -{* smarty comment *} - - {serendipity_hookPlugin hook="entries_header" addData="$entry_id"} - - {foreach from=$entries item="dategroup"} - - {foreachelse} - {if not $plugin_clean_page} - {$CONST.NO_ENTRIES_TO_PRINT} - {/if} - {/foreach} - -{if $footer_info} - {/if} - {serendipity_hookPlugin hook="entries_footer"} - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/source.lgt b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/source.lgt deleted file mode 100644 index ce5abce..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/source.lgt +++ /dev/null @@ -1,343 +0,0 @@ - -% this is a single-line comment - -/* -this is -a block -comment -*/ - - -:- encoding(some_encoding). -:- op(Precedence, Associativity, Operator). - - -:- object(prototype, - implements(protocol), - imports(category), - extends(parent)). - - :- info([ - version is 1.0, - author is 'Paulo Moura', - date is 2008/5/1, - comment is 'Sample prototype for testing syntax coloring.']). - :- threaded. - :- synchronized. - :- dynamic. - :- initialization(some_goal(X, Y)). - :- calls(some_other_protocol). - :- uses(another_object). - - :- alias(set, member/2, set_member/2). - :- alias(words, singular//0, peculiar//0). - - :- uses(list, [append/3, member/2]). - :- uses(queues, [new/1::new_queue/1]). - - :- public(aaa/2). - :- meta_predicate(aaa(::, *)). - :- discontiguous(aaa/2). - :- mode(aaa(+callable, ?integer), zero_or_one). - :- info(position/2, [ - comment is 'Predicate brief description.', - arguments is ['Arg1'-'Arg1 description', 'Arg2'-'Arg2 description']]). - - :- protected(bbb/2). - :- synchronized(bbb/2). - :- mode(bbb(+integer, -float), one). - :- info(bbb/2, [ - comment is 'Predicate brief description.', - argnames is ['Arg1', 'Arg2']]). - - :- private(ccc/2). - :- dynamic(ccc/2). - :- mode(ccc(@atom, ?atom), one_or_more). - :- info(ccc/2, [ - comment is 'Predicate brief description.', - argnames is ['Arg1', 'Arg2']]). - - enumerating_entities(Object, Protocol, Category) :- - current_category(Category), - current_object(Object), - current_protocol(Protocol). - - enumerating_properties :- - category_property(Category, Property), - object_property(Object, Property), - protocol_property(Protocol, Property). - - creating_entities(Object, Protocol, Category) :- - create_category(Category, Relations, Directives, Clauses), - create_object(Object, Relations, Directives, Clauses), - create_protocol(Protocol, Relations, Directives). - - abolishing_entities(Object, Protocol, Category) :- - abolish_category(Category), - abolish_object(Object), - abolish_protocol(Protocol). - - entity_relations :- - extends_object(Prototype, Parent, Scope), - extends_protocol(Protocol1, Protocol2, Scope), - extends_category(Category1, Category2, Scope), - implements_protocol(Object, Protocol, Scope), - imports_category(Object, Category, Scope), - instantiates_class(Instance, Class, Scope), - specializes_class(Class, Superclass, Scope), - complements_object(Category, Object). - - event_handling :- - abolish_events(Event, Object, Message, Sender, Monitor), - current_event(Event, Object, Message, Sender, Monitor), - define_events(Event, Object, Message, Sender, Monitor). - - multi_threading :- - threaded(Goals), - threaded_call(Goal), - threaded_once(Goal), - threaded_ignore(Goal), - threaded_exit(Goal), - threaded_peek(Goal), - threaded_wait(Goal), - threaded_notify(Notification). - - compiling_and_loading :- - logtalk_compile(File, Options), - logtalk_load(File, Options), - logtalk_library_path(Library, Path). - - flags :- - current_logtalk_flag(Flag, Value), - set_logtalk_flag(Flag, Value). - - execution_context_methods :- - parameter(N, Parameter), - self(Self), - sender(Sender), - this(This). - - reflection_methods :- - current_predicate(Predicate), - predicate_property(Predicate, Property). - - database_methods :- - abolish(Functor/Arity), - asserta(Clause), - assertz(Clause), - clause(Head, Body), - retract(Clause), - retractall(Head). - - meta_call_methods :- - call(Goal). - - all_solutions_methods :- - bagof(Term, Goal, List), - findall(Term, Goal, List), - forall(Generate, Test), - setof(Term, Goal, List). - - event_handler_methods :- - before(Object, Message, Sender), - after(Object, Message, Sender). - - dcg_rules_parsing_methods :- - phrase(NonTerminal, Input, Rest). - - term_expansion_methods :- - expand_term(Term, Expanded), - term_expansion(Term, Expanded), - goal_expansion(Goal, Expanded). - - message_sending :- - Object::Message, - ::Message, - ^^Message. - - calling_external_code :- - {goal1, goal2, goal3}. - - context_switching_calls :- - Object< - Then - ; Else - ). - - numbers :- - X is 13, - Y is 13.13, - Z is 13.13e-23, - C1 is 0'A, C2 is 0'', C3 is 0'", - B is 0b1011101, - O is 0o1234560, - H is 0x1234567890abcDEF. - - functions :- - A is atan(3.14) + sin(0.77) - cos(123.23), - B is sign(-12) * abs(35/78), - C is truncate(3.14) + round(-7.8) - ceiling(111.88), - D is exp(3.8) - log(123.98) / sqrt(33) * 23 ** 4, - E is rem(3, 2) + mod(5, 3) * 2 rem 2 // 5 mod 3, - F is float_fractional_part(3.14) + float_integer_part(3.14), - G is float(33) + floor(99.99). - - bitwise :- - A is 16 >> 2, - B is 16 << 2, - C is 10 /\ 12, - D is 10 \/ 12, - E is \ 10. - - term_unification :- - Term1 = Term2, - Term1 \= Term2, - unify_with_occurs_check(Term1, Term2). - - term_testing :- - atom(Atom), - atomic(Atomic), - integer(Integer), - float(Float), - compound(Term), - nonvar(Term), - var(Term), - number(Number). - - term_comparison :- - Term1 == Term2, - Term1 \== Term2, - Term1 @< Term2, - Term1 @=< Term2, - Term1 @>= Term2, - Term1 @> Term2. - - term_creation_and_decomposition :- - functor(Term, Functor, Arity), - arg(N, Term, Arg), - Term =.. [Functor| Args], - copy_term(Term, Copy). - - arithemtic_evaluation :- - X is Expression. - - arithemtic_comparison :- - Exp1 =:= Exp2, - Exp1 =\= Exp2, - Exp1 < Exp2, - Exp1 =< Exp2, - Exp1 > Exp2, - Exp1 >= Exp2. - - stream_selection_and_control :- - current_input(Stream), - current_output(Stream), - set_input(Stream), - set_output(Stream), - open(Source, Mode, Stream, Options), - close(Stream), - flush_output(Stream), - stream_property(Stream, Property), - at_end_of_stream(Stream), - set_stream_position(Stream, Position), - flush_output, - at_end_of_stream. - - character_input_output :- - get_char(Char), - get_code(Code), - peek_char(Char), - peek_code(Code), - put_char(Char), - put_code(Code), - nl(Stream), - nl. - - byte_input_output :- - get_byte(Byte), - peek_byte(Byte), - put_byte(Byte). - - term_input_output :- - read(Term), - read_term(Term), - write(Term), - write(Term), - write_canonical(Term), - write_term(Stream, Term, Options), - current_op(Precedence, Associativity, Operator), - op(Precedence, Associativity, Operator), - current_char_conversion(InChar, OutChar), - char_conversion(InChar, OutChar). - - logic_and_control :- - \+ Goal, - once(Goal), - repeat, - !. - - atomic_term_processing :- - atom_length(Atom, Length), - atom_chars(Atom, Chars), - atom_codes(Atom, Codes), - atom_concat(Atom1, Atom2, Atom), - sub_atom(Atom, Before, Length, After, SubAtom), - char_code(Char, Code), - number_chars(Number, Chars), - number_codes(Number, Codes). - - implementation_defined_hooks :- - current_prolog_flag(Flag, Value), - set_prolog_flag(Flag, Value), - halt(ExitCode), - halt. - - number(C) --> "+", number(C). - number(C) --> "-", number(X), {C is -X}. - number(X) --> [C], {0'0 =< C, C =< 0'9, X is C - 0'0}. - -:- end_object. - - - -:- object(class, - implements(protocol), - imports(category), - instantiates(metaclass), - specializes(superclass)). - - -:- end_object. - - - -:- object(parametric(_Par1, _Par2), - implements(protocol), - imports(category), - extends(parent(_Par))). - - -:- end_object. - - - -:- category(category, - implements(protocol), - extends(other_category)). - - -:- end_category. - - - -:- protocol(extended, - extends(minimal)). - - -:- end_protocol. diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/sources.list b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/sources.list deleted file mode 100644 index 3f36335..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/sources.list +++ /dev/null @@ -1,62 +0,0 @@ -## CD ROM -deb cdrom:[Xubuntu 6.06.1 _Dapper Drake_ - Release i386 (20060807)]/ dapper main restricted - -deb http://archive.ubuntu.com/ubuntu/ dapper main restricted -deb-src http://archive.ubuntu.com/ubuntu/ dapper main restricted - -deb http://foo.com/$(ARCH)/ main foo - -## Major bug fix updates produced after the final release of the -## distribution. -deb http://archive.ubuntu.com/ubuntu/ dapper-updates main restricted -deb-src http://archive.ubuntu.com/ubuntu/ dapper-updates main restricted - -## Uncomment the following two lines to add software from the 'universe' -## repository. -## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu -## team, and may not be under a free licence. Please satisfy yourself as to -## your rights to use the software. Also, please note that software in -## universe WILL NOT receive any review or updates from the Ubuntu security -## team. -deb http://archive.ubuntu.com/ubuntu/ dapper universe multiverse -deb-src http://archive.ubuntu.com/ubuntu/ dapper universe multiverse - -## Uncomment the following two lines to add software from the 'backports' -## repository. -## N.B. software from this repository may not have been tested as -## extensively as that contained in the main release, although it includes -## newer versions of some applications which may provide useful features. -## Also, please note that software in backports WILL NOT receive any review -## or updates from the Ubuntu security team. -deb http://archive.ubuntu.com/ubuntu/ dapper-backports main restricted universe multiverse -deb-src http://archive.ubuntu.com/ubuntu/ dapper-backports main restricted universe multiverse - -deb http://security.ubuntu.com/ubuntu dapper-security main restricted -deb-src http://security.ubuntu.com/ubuntu dapper-security main restricted -deb http://security.ubuntu.com/ubuntu dapper-security universe multiverse -deb-src http://security.ubuntu.com/ubuntu dapper-security universe multiverse - -## dapper-commercial by canonical -## currently has realplay (realplayer 10) and opera (opera 9) -deb http://archive.canonical.com/ubuntu dapper-commercial main - -## Bleeding edge wine repository for Dapper -## only uncomment it if you need it -## deb http://wine.budgetdedicated.com/apt dapper main -## deb-src http://wine.budgetdedicated.com/apt dapper main - -## skype -## only uncomment it if you need it -## deb http://download.skype.com/linux/repos/debian/ stable non-free - -deb http://de.archive.ubuntu.com/ubuntu/ edgy main restricted multiverse universe - -deb http://de.archive.ubuntu.com/ubuntu/ edgy-updates main restricted multiverse universe - -deb http://de.archive.ubuntu.com/ubuntu/ edgy-backports main restricted universe multiverse - -deb http://security.ubuntu.com/ubuntu edgy-security main restricted universe multiverse - -deb http://wine.budgetdedicated.com/apt edgy main - -deb http://archive.czessi.net/ubuntu edgy main restricted universe multiverse i18n-de diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/sparql.rq b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/sparql.rq deleted file mode 100644 index caedfd1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/sparql.rq +++ /dev/null @@ -1,23 +0,0 @@ -# This is a test SPARQL query - -PREFIX foaf: -PREFIX ex: -PREFIX xsd: -PREFIX dcterms: - -SELECT ?person (COUNT(?nick) AS ?nickCount) { - ?person foaf:nick ?nick ; - foaf:lastName "Smith" ; - foaf:age "21"^^xsd:int ; - ex:title 'Mr' ; # single-quoted string - ex:height 1.80 ; # float - ex:distanceToSun +1.4e8 ; # float with exponent - ex:ownsACat true ; - dcterms:description "Someone with a cat called \"cat\"."@en . - OPTIONAL { ?person foaf:isPrimaryTopicOf ?page } - OPTIONAL { ?person foaf:name ?name - { ?person foaf:depiction ?img } - UNION - { ?person foaf:firstName ?firstN } } - FILTER ( bound(?page) || bound(?img) || bound(?firstN) ) -} GROUP BY ?person ORDER BY ?img diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/sphere.pov b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/sphere.pov deleted file mode 100644 index 847ed45..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/sphere.pov +++ /dev/null @@ -1,18 +0,0 @@ -#include "colors.inc" - -background { color Cyan } - -camera { - location <0, 2, -3> - look_at <0, 1, 2> -} - -sphere { - <0, 1, 2>, 2 - texture { - pigment { color Yellow } - } -} - -light_source { <2, 4, -3> color White} - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/sqlite3.sqlite3-console b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/sqlite3.sqlite3-console deleted file mode 100644 index 3ec2713..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/sqlite3.sqlite3-console +++ /dev/null @@ -1,27 +0,0 @@ -SQLite version 3.4.2 -Enter ".help" for instructions -sqlite> .schema -CREATE TABLE paste (paste_id integer, code text, parsed_code text, pub_date -varchar(24), language varchar(64), parent_id integer, url varchar(128)); -CREATE TABLE vars (key varchar(24), value varchar(128)); -sqlite> a ' - ...> ' - ...> ; -SQL error: near "a": syntax error -sqlite> %; -SQL error: near "%": syntax error -sqlite> select count(language), language from paste group by language order - ...> by count(language) desc; -144|python -76|text -22|pycon -9|ruby -7|c -7|js -6|html+django -4|html -4|tex -2|html+php -1|cpp -1|scheme -sqlite> diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/squid.conf b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/squid.conf deleted file mode 100644 index 833d4fc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/squid.conf +++ /dev/null @@ -1,30 +0,0 @@ -# Some multiline comments - -acl manager proto cache_object -acl localhost src 127.0.0.1/32 ::1 -acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1 -acl SSL_ports port 443 -acl Safe_ports port 80 # http -acl Safe_ports port 21 # ftp -acl Safe_ports port 443 # https -acl Safe_ports port 70 # gopher -acl Safe_ports port 210 # wais -acl Safe_ports port 1025-65535 # unregistered ports -acl Safe_ports port 280 # http-mgmt -acl Safe_ports port 488 # gss-http -acl Safe_ports port 591 # filemaker -acl Safe_ports port 777 # multiling http -acl CONNECT method CONNECT -http_access allow manager localhost -http_access deny manager -http_access deny !Safe_ports -http_access deny CONNECT !SSL_ports -http_access allow localhost -http_access deny all -http_port 3128 -hierarchy_stoplist cgi-bin ? -coredump_dir /var/spool/squid3 -refresh_pattern ^ftp: 1440 20% 10080 -refresh_pattern ^gopher: 1440 0% 1440 -refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 -refresh_pattern . 0 20% 4320 diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/string.jl b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/string.jl deleted file mode 100644 index 67bf6c7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/string.jl +++ /dev/null @@ -1,1031 +0,0 @@ -## core string functions ## - -length(s::String) = error("you must implement length(",typeof(s),")") -next(s::String, i::Int) = error("you must implement next(",typeof(s),",Int)") -next(s::DirectIndexString, i::Int) = (s[i],i+1) -next(s::String, i::Integer) = next(s,int(i)) - -## generic supplied functions ## - -start(s::String) = 1 -done(s::String,i) = (i > length(s)) -isempty(s::String) = done(s,start(s)) -ref(s::String, i::Int) = next(s,i)[1] -ref(s::String, i::Integer) = s[int(i)] -ref(s::String, x::Real) = s[iround(x)] -ref{T<:Integer}(s::String, r::Range1{T}) = s[int(first(r)):int(last(r))] - -symbol(s::String) = symbol(cstring(s)) -string(s::String) = s - -print(s::String) = for c=s; print(c); end -print(x...) = for i=x; print(i); end -println(args...) = print(args..., '\n') - -show(s::String) = print_quoted(s) - -(*)(s::String...) = strcat(s...) -(^)(s::String, r::Integer) = repeat(s,r) - -size(s::String) = (length(s),) -size(s::String, d::Integer) = d==1 ? length(s) : - error("in size: dimension ",d," out of range") - -strlen(s::DirectIndexString) = length(s) -function strlen(s::String) - i = start(s) - if done(s,i) - return 0 - end - n = 1 - while true - c, j = next(s,i) - if done(s,j) - return n - end - n += 1 - i = j - end -end - -isvalid(s::DirectIndexString, i::Integer) = (start(s) <= i <= length(s)) -function isvalid(s::String, i::Integer) - try - next(s,i) - true - catch - false - end -end - -prevind(s::DirectIndexString, i::Integer) = i-1 -thisind(s::DirectIndexString, i::Integer) = i -nextind(s::DirectIndexString, i::Integer) = i+1 - -prevind(s::String, i::Integer) = thisind(s,thisind(s,i)-1) - -function thisind(s::String, i::Integer) - for j = i:-1:1 - if isvalid(s,j) - return j - end - end - return 0 # out of range -end - -function nextind(s::String, i::Integer) - for j = i+1:length(s) - if isvalid(s,j) - return j - end - end - length(s)+1 # out of range -end - -ind2chr(s::DirectIndexString, i::Integer) = i -chr2ind(s::DirectIndexString, i::Integer) = i - -function ind2chr(s::String, i::Integer) - s[i] # throws error if invalid - j = 1 - k = start(s) - while true - c, l = next(s,k) - if i <= k - return j - end - j += 1 - k = l - end -end - -function chr2ind(s::String, i::Integer) - if i < 1 - return i - end - j = 1 - k = start(s) - while true - c, l = next(s,k) - if i == j - return k - end - j += 1 - k = l - end -end - -function strchr(s::String, c::Char, i::Integer) - i = nextind(s,i) - while !done(s,i) - d, j = next(s,i) - if c == d - return i - end - i = j - end - return 0 -end -strchr(s::String, c::Char) = strchr(s, c, start(s)) -contains(s::String, c::Char) = (strchr(s,c)!=0) - -function chars(s::String) - cx = Array(Char,strlen(s)) - i = 0 - for c in s - cx[i += 1] = c - end - return cx -end - -function cmp(a::String, b::String) - i = start(a) - j = start(b) - while !done(a,i) && !done(b,i) - c, i = next(a,i) - d, j = next(b,j) - if c != d - return c < d ? -1 : +1 - end - end - done(a,i) && !done(b,j) ? -1 : - !done(a,i) && done(b,j) ? +1 : 0 -end - -isequal(a::String, b::String) = cmp(a,b) == 0 -isless(a::String, b::String) = cmp(a,b) < 0 - -# faster comparisons for byte strings - -cmp(a::ByteString, b::ByteString) = lexcmp(a.data, b.data) -isequal(a::ByteString, b::ByteString) = length(a)==length(b) && cmp(a,b)==0 - -## character column width function ## - -charwidth(c::Char) = max(0,int(ccall(:wcwidth, Int32, (Char,), c))) -strwidth(s::String) = (w=0; for c in s; w += charwidth(c); end; w) -strwidth(s::ByteString) = ccall(:u8_strwidth, Int, (Ptr{Uint8},), s.data) -# TODO: implement and use u8_strnwidth that takes a length argument - -## generic string uses only length and next ## - -type GenericString <: String - string::String -end - -length(s::GenericString) = length(s.string) -next(s::GenericString, i::Int) = next(s.string, i) - -## plain old character arrays ## - -type CharString <: String - chars::Array{Char,1} - - CharString(a::Array{Char,1}) = new(a) - CharString(c::Char...) = new([ c[i] | i=1:length(c) ]) -end -CharString(x...) = CharString(map(char,x)...) - -next(s::CharString, i::Int) = (s.chars[i], i+1) -length(s::CharString) = length(s.chars) -strlen(s::CharString) = length(s) - -string(c::Char) = CharString(c) -string(c::Char, x::Char...) = CharString(c, x...) - -## substrings reference original strings ## - -type SubString <: String - string::String - offset::Int - length::Int - - SubString(s::String, i::Int, j::Int) = new(s, i-1, j-i+1) - SubString(s::SubString, i::Int, j::Int) = - new(s.string, i-1+s.offset, j-i+1) -end -SubString(s::String, i::Integer, j::Integer) = SubString(s, int(i), int(j)) - -function next(s::SubString, i::Int) - if i < 1 || i > s.length - error("string index out of bounds") - end - c, i = next(s.string, i+s.offset) - c, i-s.offset -end - -length(s::SubString) = s.length -# TODO: strlen(s::SubString) = ?? -# default implementation will work but it's slow -# can this be delegated efficiently somehow? -# that may require additional string interfaces - -function ref(s::String, r::Range1{Int}) - if first(r) < 1 || length(s) < last(r) - error("in substring slice: index out of range") - end - SubString(s, first(r), last(r)) -end - -## efficient representation of repeated strings ## - -type RepString <: String - string::String - repeat::Integer -end - -length(s::RepString) = length(s.string)*s.repeat -strlen(s::RepString) = strlen(s.string)*s.repeat - -function next(s::RepString, i::Int) - if i < 1 || i > length(s) - error("string index out of bounds") - end - j = mod1(i,length(s.string)) - c, k = next(s.string, j) - c, k-j+i -end - -function repeat(s::String, r::Integer) - r < 0 ? error("can't repeat a string ",r," times") : - r == 0 ? "" : - r == 1 ? s : - RepString(s,r) -end - -## reversed strings without data movement ## - -type RevString <: String - string::String -end - -length(s::RevString) = length(s.string) -strlen(s::RevString) = strlen(s.string) - -start(s::RevString) = (n=length(s); n-thisind(s.string,n)+1) -function next(s::RevString, i::Int) - n = length(s); j = n-i+1 - (s.string[j], n-thisind(s.string,j-1)+1) -end - -reverse(s::String) = RevString(s) -reverse(s::RevString) = s.string - -## ropes for efficient concatenation, etc. ## - -# Idea: instead of this standard binary tree structure, -# how about we keep an array of substrings, with an -# offset array. We can do binary search on the offset -# array so we get O(log(n)) indexing time still, but we -# can compute the offsets lazily and avoid all the -# futzing around while the string is being constructed. - -type RopeString <: String - head::String - tail::String - depth::Int32 - length::Int - - RopeString(h::RopeString, t::RopeString) = - depth(h.tail) + depth(t) < depth(h.head) ? - RopeString(h.head, RopeString(h.tail, t)) : - new(h, t, max(h.depth,t.depth)+1, length(h)+length(t)) - - RopeString(h::RopeString, t::String) = - depth(h.tail) < depth(h.head) ? - RopeString(h.head, RopeString(h.tail, t)) : - new(h, t, h.depth+1, length(h)+length(t)) - - RopeString(h::String, t::RopeString) = - depth(t.head) < depth(t.tail) ? - RopeString(RopeString(h, t.head), t.tail) : - new(h, t, t.depth+1, length(h)+length(t)) - - RopeString(h::String, t::String) = - new(h, t, 1, length(h)+length(t)) -end - -depth(s::String) = 0 -depth(s::RopeString) = s.depth - -function next(s::RopeString, i::Int) - if i <= length(s.head) - return next(s.head, i) - else - c, j = next(s.tail, i-length(s.head)) - return c, j+length(s.head) - end -end - -length(s::RopeString) = s.length -strlen(s::RopeString) = strlen(s.head) + strlen(s.tail) - -strcat() = "" -strcat(s::String) = s -strcat(x...) = strcat(map(string,x)...) -strcat(s::String, t::String...) = - (t = strcat(t...); isempty(s) ? t : isempty(t) ? s : RopeString(s, t)) - -print(s::RopeString) = print(s.head, s.tail) - -## transformed strings ## - -type TransformedString <: String - transform::Function - string::String -end - -length(s::TransformedString) = length(s.string) -strlen(s::TransformedString) = strlen(s.string) - -function next(s::TransformedString, i::Int) - c, j = next(s.string,i) - c = s.transform(c, i) - return c, j -end - -## uppercase and lowercase transformations ## - -uppercase(c::Char) = ccall(:towupper, Char, (Char,), c) -lowercase(c::Char) = ccall(:towlower, Char, (Char,), c) - -uppercase(s::String) = TransformedString((c,i)->uppercase(c), s) -lowercase(s::String) = TransformedString((c,i)->lowercase(c), s) - -ucfirst(s::String) = TransformedString((c,i)->i==1 ? uppercase(c) : c, s) -lcfirst(s::String) = TransformedString((c,i)->i==1 ? lowercase(c) : c, s) - -const uc = uppercase -const lc = lowercase - -## string map ## - -function map(f::Function, s::String) - out = memio(length(s)) - for c in s - write(out, f(c)::Char) - end - takebuf_string(out) -end - -## conversion of general objects to strings ## - -string(x) = print_to_string(show, x) -cstring(x...) = print_to_string(print, x...) - -function cstring(p::Ptr{Uint8}) - p == C_NULL ? error("cannot convert NULL to string") : - ccall(:jl_cstr_to_string, Any, (Ptr{Uint8},), p)::ByteString -end - -## string promotion rules ## - -promote_rule(::Type{UTF8String} , ::Type{ASCIIString}) = UTF8String -promote_rule(::Type{UTF8String} , ::Type{CharString} ) = UTF8String -promote_rule(::Type{ASCIIString}, ::Type{CharString} ) = UTF8String - -## printing literal quoted string data ## - -# TODO: this is really the inverse of print_unbackslashed - -function print_quoted_literal(s::String) - print('"') - for c = s; c == '"' ? print("\\\"") : print(c); end - print('"') -end - -## string escaping & unescaping ## - -escape_nul(s::String, i::Int) = - !done(s,i) && '0' <= next(s,i)[1] <= '7' ? L"\x00" : L"\0" - -is_hex_digit(c::Char) = '0'<=c<='9' || 'a'<=c<='f' || 'A'<=c<='F' -need_full_hex(s::String, i::Int) = !done(s,i) && is_hex_digit(next(s,i)[1]) - -function print_escaped(s::String, esc::String) - i = start(s) - while !done(s,i) - c, j = next(s,i) - c == '\0' ? print(escape_nul(s,j)) : - c == '\e' ? print(L"\e") : - c == '\\' ? print("\\\\") : - contains(esc,c) ? print('\\', c) : - iswprint(c) ? print(c) : - 7 <= c <= 13 ? print('\\', "abtnvfr"[c-6]) : - c <= '\x7f' ? print(L"\x", hex(c, 2)) : - c <= '\uffff' ? print(L"\u", hex(c, need_full_hex(s,j) ? 4 : 2)) : - print(L"\U", hex(c, need_full_hex(s,j) ? 8 : 4)) - i = j - end -end - -escape_string(s::String) = print_to_string(length(s), print_escaped, s, "\"") -print_quoted(s::String) = (print('"'); print_escaped(s, "\"\$"); print('"')) -#" # work around syntax highlighting problem -quote_string(s::String) = print_to_string(length(s)+2, print_quoted, s) - -# bare minimum unescaping function unescapes only given characters - -function print_unescaped_chars(s::String, esc::String) - if !contains(esc,'\\') - esc = strcat("\\", esc) - end - i = start(s) - while !done(s,i) - c, i = next(s,i) - if c == '\\' && !done(s,i) && contains(esc,s[i]) - c, i = next(s,i) - end - print(c) - end -end - -unescape_chars(s::String, esc::String) = - print_to_string(length(s), print_unescaped_chars, s, esc) - -# general unescaping of traditional C and Unicode escape sequences - -function print_unescaped(s::String) - i = start(s) - while !done(s,i) - c, i = next(s,i) - if !done(s,i) && c == '\\' - c, i = next(s,i) - if c == 'x' || c == 'u' || c == 'U' - n = k = 0 - m = c == 'x' ? 2 : - c == 'u' ? 4 : 8 - while (k+=1) <= m && !done(s,i) - c, j = next(s,i) - n = '0' <= c <= '9' ? n<<4 + c-'0' : - 'a' <= c <= 'f' ? n<<4 + c-'a'+10 : - 'A' <= c <= 'F' ? n<<4 + c-'A'+10 : break - i = j - end - if k == 1 - error("\\x used with no following hex digits") - end - if m == 2 # \x escape sequence - write(uint8(n)) - else - print(char(n)) - end - elseif '0' <= c <= '7' - k = 1 - n = c-'0' - while (k+=1) <= 3 && !done(s,i) - c, j = next(s,i) - n = '0' <= c <= '7' ? n<<3 + c-'0' : break - i = j - end - if n > 255 - error("octal escape sequence out of range") - end - write(uint8(n)) - else - print(c == 'a' ? '\a' : - c == 'b' ? '\b' : - c == 't' ? '\t' : - c == 'n' ? '\n' : - c == 'v' ? '\v' : - c == 'f' ? '\f' : - c == 'r' ? '\r' : - c == 'e' ? '\e' : c) - end - else - print(c) - end - end -end - -unescape_string(s::String) = print_to_string(length(s), print_unescaped, s) - -## checking UTF-8 & ACSII validity ## - -byte_string_classify(s::ByteString) = - ccall(:u8_isvalid, Int32, (Ptr{Uint8}, Int), s.data, length(s)) - # 0: neither valid ASCII nor UTF-8 - # 1: valid ASCII - # 2: valid UTF-8 - -is_valid_ascii(s::ByteString) = byte_string_classify(s) == 1 -is_valid_utf8 (s::ByteString) = byte_string_classify(s) != 0 - -check_ascii(s::ByteString) = is_valid_ascii(s) ? s : error("invalid ASCII sequence") -check_utf8 (s::ByteString) = is_valid_utf8(s) ? s : error("invalid UTF-8 sequence") - -## string interpolation parsing ## - -function _jl_interp_parse(s::String, unescape::Function, printer::Function) - sx = {} - i = j = start(s) - while !done(s,j) - c, k = next(s,j) - if c == '$' - if !isempty(s[i:j-1]) - push(sx, unescape(s[i:j-1])) - end - ex, j = parseatom(s,k) - push(sx, ex) - i = j - elseif c == '\\' && !done(s,k) - if s[k] == '$' - if !isempty(s[i:j-1]) - push(sx, unescape(s[i:j-1])) - end - i = k - end - c, j = next(s,k) - else - j = k - end - end - if !isempty(s[i:]) - push(sx, unescape(s[i:j-1])) - end - length(sx) == 1 && isa(sx[1],ByteString) ? sx[1] : - expr(:call, :print_to_string, printer, sx...) -end - -_jl_interp_parse(s::String, u::Function) = _jl_interp_parse(s, u, print) -_jl_interp_parse(s::String) = _jl_interp_parse(s, x->check_utf8(unescape_string(x))) - -function _jl_interp_parse_bytes(s::String) - writer(x...) = for w=x; write(w); end - _jl_interp_parse(s, unescape_string, writer) -end - -## core string macros ## - -macro str(s); _jl_interp_parse(s); end -macro S_str(s); _jl_interp_parse(s); end -macro I_str(s); _jl_interp_parse(s, x->unescape_chars(x,"\"")); end -macro E_str(s); check_utf8(unescape_string(s)); end -macro B_str(s); _jl_interp_parse_bytes(s); end -macro b_str(s); ex = _jl_interp_parse_bytes(s); :(($ex).data); end - -## shell-like command parsing ## - -function _jl_shell_parse(s::String, interp::Bool) - - in_single_quotes = false - in_double_quotes = false - - args = {} - arg = {} - i = start(s) - j = i - - function update_arg(x) - if !isa(x,String) || !isempty(x) - push(arg, x) - end - end - function append_arg() - if isempty(arg); arg = {"",}; end - push(args, arg) - arg = {} - end - - while !done(s,j) - c, k = next(s,j) - if !in_single_quotes && !in_double_quotes && iswspace(c) - update_arg(s[i:j-1]) - append_arg() - j = k - while !done(s,j) - c, k = next(s,j) - if !iswspace(c) - i = j - break - end - j = k - end - elseif interp && !in_single_quotes && c == '$' - update_arg(s[i:j-1]); i = k; j = k - if done(s,k) - error("\$ right before end of command") - end - if iswspace(s[k]) - error("space not allowed right after \$") - end - ex, j = parseatom(s,j) - update_arg(ex); i = j - else - if !in_double_quotes && c == '\'' - in_single_quotes = !in_single_quotes - update_arg(s[i:j-1]); i = k - elseif !in_single_quotes && c == '"' - in_double_quotes = !in_double_quotes - update_arg(s[i:j-1]); i = k - elseif c == '\\' - if in_double_quotes - if done(s,k) - error("unterminated double quote") - end - if s[k] == '"' || s[k] == '$' - update_arg(s[i:j-1]); i = k - c, k = next(s,k) - end - elseif !in_single_quotes - if done(s,k) - error("dangling backslash") - end - update_arg(s[i:j-1]); i = k - c, k = next(s,k) - end - end - j = k - end - end - - if in_single_quotes; error("unterminated single quote"); end - if in_double_quotes; error("unterminated double quote"); end - - update_arg(s[i:]) - append_arg() - - if !interp - return args - end - - # construct an expression - exprs = {} - for arg in args - push(exprs, expr(:tuple, arg)) - end - expr(:tuple,exprs) -end -_jl_shell_parse(s::String) = _jl_shell_parse(s,true) - -function shell_split(s::String) - parsed = _jl_shell_parse(s,false) - args = String[] - for arg in parsed - push(args, strcat(arg...)) - end - args -end - -function print_shell_word(word::String) - if isempty(word) - print("''") - end - has_single = false - has_special = false - for c in word - if iswspace(c) || c=='\\' || c=='\'' || c=='"' || c=='$' - has_special = true - if c == '\'' - has_single = true - end - end - end - if !has_special - print(word) - elseif !has_single - print('\'', word, '\'') - else - print('"') - for c in word - if c == '"' || c == '$' - print('\\') - end - print(c) - end - print('"') - end -end - -function print_shell_escaped(cmd::String, args::String...) - print_shell_word(cmd) - for arg in args - print(' ') - print_shell_word(arg) - end -end - -shell_escape(cmd::String, args::String...) = - print_to_string(print_shell_escaped, cmd, args...) - -## interface to parser ## - -function parse(s::String, pos, greedy) - # returns (expr, end_pos). expr is () in case of parse error. - ex, pos = ccall(:jl_parse_string, Any, - (Ptr{Uint8}, Int32, Int32), - cstring(s), pos-1, greedy ? 1:0) - if isa(ex,Expr) && is(ex.head,:error) - throw(ParseError(ex.args[1])) - end - if ex == (); throw(ParseError("end of input")); end - ex, pos+1 # C is zero-based, Julia is 1-based -end - -parse(s::String) = parse(s, 1, true) -parse(s::String, pos) = parse(s, pos, true) -parseatom(s::String) = parse(s, 1, false) -parseatom(s::String, pos) = parse(s, pos, false) - -## miscellaneous string functions ## - -function lpad(s::String, n::Integer, p::String) - m = n - strlen(s) - if m <= 0; return s; end - l = strlen(p) - if l==1 - return p^m * s - end - q = div(m,l) - r = m - q*l - cstring(p^q*p[1:chr2ind(p,r)]*s) -end - -function rpad(s::String, n::Integer, p::String) - m = n - strlen(s) - if m <= 0; return s; end - l = strlen(p) - if l==1 - return s * p^m - end - q = div(m,l) - r = m - q*l - cstring(s*p^q*p[1:chr2ind(p,r)]) -end - -lpad(s, n::Integer, p) = lpad(string(s), n, string(p)) -rpad(s, n::Integer, p) = rpad(string(s), n, string(p)) - -lpad(s, n::Integer) = lpad(string(s), n, " ") -rpad(s, n::Integer) = rpad(string(s), n, " ") - -function split(s::String, delims, include_empty::Bool) - i = 1 - strs = String[] - len = length(s) - while true - tokstart = tokend = i - while !done(s,i) - (c,i) = next(s,i) - if contains(delims, c) - break - end - tokend = i - end - tok = s[tokstart:(tokend-1)] - if include_empty || !isempty(tok) - push(strs, tok) - end - if !((i <= len) || (i==len+1 && tokend!=i)) - break - end - end - strs -end - -split(s::String) = split(s, (' ','\t','\n','\v','\f','\r'), false) -split(s::String, x) = split(s, x, true) -split(s::String, x::Char, incl::Bool) = split(s, (x,), incl) - -function print_joined(strings, delim, last) - i = start(strings) - if done(strings,i) - return - end - str, i = next(strings,i) - print(str) - while !done(strings,i) - str, i = next(strings,i) - print(done(strings,i) ? last : delim) - print(str) - end -end - -function print_joined(strings, delim) - i = start(strings) - while !done(strings,i) - str, i = next(strings,i) - print(str) - if !done(strings,i) - print(delim) - end - end -end -print_joined(strings) = print_joined(strings, "") - -join(args...) = print_to_string(print_joined, args...) - -chop(s::String) = s[1:thisind(s,length(s))-1] -chomp(s::String) = (i=thisind(s,length(s)); s[i]=='\n' ? s[1:i-1] : s) -chomp(s::ByteString) = s.data[end]==0x0a ? s[1:end-1] : s - -function lstrip(s::String) - i = start(s) - while !done(s,i) - c, j = next(s,i) - if !iswspace(c) - return s[i:end] - end - i = j - end - "" -end - -function rstrip(s::String) - r = reverse(s) - i = start(r) - while !done(r,i) - c, j = next(r,i) - if !iswspace(c) - return s[1:end-i+1] - end - i = j - end - "" -end - -strip(s::String) = lstrip(rstrip(s)) - -## string to integer functions ## - -function parse_int{T<:Integer}(::Type{T}, s::String, base::Integer) - if !(2 <= base <= 36); error("invalid base: ",base); end - i = start(s) - if done(s,i) - error("premature end of integer (in ",show_to_string(s),")") - end - c,i = next(s,i) - sgn = one(T) - if T <: Signed && c == '-' - sgn = -sgn - if done(s,i) - error("premature end of integer (in ",show_to_string(s),")") - end - c,i = next(s,i) - end - base = convert(T,base) - n::T = 0 - while true - d = '0' <= c <= '9' ? c-'0' : - 'A' <= c <= 'Z' ? c-'A'+10 : - 'a' <= c <= 'z' ? c-'a'+10 : typemax(Int) - if d >= base - error(show_to_string(c)," is not a valid digit (in ",show_to_string(s),")") - end - # TODO: overflow detection? - n = n*base + d - if done(s,i) - break - end - c,i = next(s,i) - end - return flipsign(n,sgn) -end - -parse_int(s::String, base::Integer) = parse_int(Int,s,base) -parse_int(T::Type, s::String) = parse_int(T,s,10) -parse_int(s::String) = parse_int(Int,s,10) - -parse_bin(T::Type, s::String) = parse_int(T,s,2) -parse_oct(T::Type, s::String) = parse_int(T,s,8) -parse_hex(T::Type, s::String) = parse_int(T,s,16) - -parse_bin(s::String) = parse_int(Int,s,2) -parse_oct(s::String) = parse_int(Int,s,8) -parse_hex(s::String) = parse_int(Int,s,16) - -integer (s::String) = int(s) -unsigned(s::String) = uint(s) -int (s::String) = parse_int(Int,s) -uint (s::String) = parse_int(Uint,s) -int8 (s::String) = parse_int(Int8,s) -uint8 (s::String) = parse_int(Uint8,s) -int16 (s::String) = parse_int(Int16,s) -uint16 (s::String) = parse_int(Uint16,s) -int32 (s::String) = parse_int(Int32,s) -uint32 (s::String) = parse_int(Uint32,s) -int64 (s::String) = parse_int(Int64,s) -uint64 (s::String) = parse_int(Uint64,s) - -## integer to string functions ## - -const _jl_dig_syms = "0123456789abcdefghijklmnopqrstuvwxyz".data - -function int2str(n::Union(Int64,Uint64), b::Integer, l::Int) - if b < 2 || b > 36; error("int2str: invalid base ", b); end - neg = n < 0 - n = unsigned(abs(n)) - b = convert(typeof(n), b) - ndig = ndigits(n, b) - sz = max(convert(Int, ndig), l) + neg - data = Array(Uint8, sz) - i = sz - if ispow2(b) - digmask = b-1 - shift = trailing_zeros(b) - while i > neg - ch = n & digmask - data[i] = _jl_dig_syms[int(ch)+1] - n >>= shift - i -= 1 - end - else - while i > neg - ch = n % b - data[i] = _jl_dig_syms[int(ch)+1] - n = div(n,b) - i -= 1 - end - end - if neg - data[1] = '-' - end - ASCIIString(data) -end -int2str(n::Integer, b::Integer) = int2str(n, b, 0) -int2str(n::Integer, b::Integer, l::Int) = int2str(int64(n), b, l) - -string(x::Signed) = dec(int64(x)) -cstring(x::Signed) = dec(int64(x)) - -## string to float functions ## - -function float64_isvalid(s::String, out::Array{Float64,1}) - s = cstring(s) - return (ccall(:jl_strtod, Int32, (Ptr{Uint8},Ptr{Float64}), s, out)==0) -end - -function float32_isvalid(s::String, out::Array{Float32,1}) - s = cstring(s) - return (ccall(:jl_strtof, Int32, (Ptr{Uint8},Ptr{Float32}), s, out)==0) -end - -begin - local tmp::Array{Float64,1} = Array(Float64,1) - local tmpf::Array{Float32,1} = Array(Float32,1) - global float64, float32 - function float64(s::String) - if !float64_isvalid(s, tmp) - throw(ArgumentError("float64(String): invalid number format")) - end - return tmp[1] - end - - function float32(s::String) - if !float32_isvalid(s, tmpf) - throw(ArgumentError("float32(String): invalid number format")) - end - return tmpf[1] - end -end - -float(x::String) = float64(x) -parse_float(x::String) = float64(x) -parse_float(::Type{Float64}, x::String) = float64(x) -parse_float(::Type{Float32}, x::String) = float32(x) - -# copying a byte string (generally not needed due to "immutability") - -strcpy{T<:ByteString}(s::T) = T(copy(s.data)) - -# lexicographically compare byte arrays (used by Latin-1 and UTF-8) - -function lexcmp(a::Array{Uint8,1}, b::Array{Uint8,1}) - c = ccall(:memcmp, Int32, (Ptr{Uint8}, Ptr{Uint8}, Uint), - a, b, min(length(a),length(b))) - c < 0 ? -1 : c > 0 ? +1 : cmp(length(a),length(b)) -end - -# find the index of the first occurrence of a byte value in a byte array - -function memchr(a::Array{Uint8,1}, b::Integer) - p = pointer(a) - q = ccall(:memchr, Ptr{Uint8}, (Ptr{Uint8}, Int32, Uint), p, b, length(a)) - q == C_NULL ? 0 : q - p + 1 -end - -# concatenate byte arrays into a single array - -memcat() = Array(Uint8,0) -memcat(a::Array{Uint8,1}) = copy(a) - -function memcat(arrays::Array{Uint8,1}...) - n = 0 - for a in arrays - n += length(a) - end - arr = Array(Uint8, n) - ptr = pointer(arr) - offset = 0 - for a in arrays - ccall(:memcpy, Ptr{Uint8}, (Ptr{Uint8}, Ptr{Uint8}, Uint), - ptr+offset, a, length(a)) - offset += length(a) - end - return arr -end - -# concatenate the data fields of byte strings - -memcat(s::ByteString) = memcat(s.data) -memcat(sx::ByteString...) = memcat(map(s->s.data, sx)...) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/string_delimiters.d b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/string_delimiters.d deleted file mode 100644 index 288aacc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/string_delimiters.d +++ /dev/null @@ -1,21 +0,0 @@ -import std.stdio; - -void main() { - // Nesting delimited strings - auto a = q"{foo " {bar} baz}"; - auto b = q"[foo [bar] " baz]"; - auto c = q"(foo " (bar) baz)"; - auto d = q" " baz>"; - // Non-nesting delimited strings - auto e = q"/foo " bar/"; - auto f = q"-Another " string-"; - // "heredoc" strings - auto g = q"FOO - This is a string! -FOO"; - // Token strings (only the q{} should be highlighted as a string) - auto h = q{ - int i; - void foo() { writefln("Hello, world!"); } - }; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/stripheredoc.sh b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/stripheredoc.sh deleted file mode 100644 index 33e7ff3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/stripheredoc.sh +++ /dev/null @@ -1,3 +0,0 @@ -cat <<-EOF - Hello world $PATH - EOF diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/swig_java.swg b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/swig_java.swg deleted file mode 100644 index 6126a55..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/swig_java.swg +++ /dev/null @@ -1,1329 +0,0 @@ -/* ----------------------------------------------------------------------------- - * java.swg - * - * Java typemaps - * ----------------------------------------------------------------------------- */ - -%include - -/* The jni, jtype and jstype typemaps work together and so there should be one of each. - * The jni typemap contains the JNI type used in the JNI (C/C++) code. - * The jtype typemap contains the Java type used in the JNI intermediary class. - * The jstype typemap contains the Java type used in the Java proxy classes, type wrapper classes and module class. */ - -/* Fragments */ -%fragment("SWIG_PackData", "header") { -/* Pack binary data into a string */ -SWIGINTERN char * SWIG_PackData(char *c, void *ptr, size_t sz) { - static const char hex[17] = "0123456789abcdef"; - register const unsigned char *u = (unsigned char *) ptr; - register const unsigned char *eu = u + sz; - for (; u != eu; ++u) { - register unsigned char uu = *u; - *(c++) = hex[(uu & 0xf0) >> 4]; - *(c++) = hex[uu & 0xf]; - } - return c; -} -} - -%fragment("SWIG_UnPackData", "header") { -/* Unpack binary data from a string */ -SWIGINTERN const char * SWIG_UnpackData(const char *c, void *ptr, size_t sz) { - register unsigned char *u = (unsigned char *) ptr; - register const unsigned char *eu = u + sz; - for (; u != eu; ++u) { - register char d = *(c++); - register unsigned char uu; - if ((d >= '0') && (d <= '9')) - uu = ((d - '0') << 4); - else if ((d >= 'a') && (d <= 'f')) - uu = ((d - ('a'-10)) << 4); - else - return (char *) 0; - d = *(c++); - if ((d >= '0') && (d <= '9')) - uu |= (d - '0'); - else if ((d >= 'a') && (d <= 'f')) - uu |= (d - ('a'-10)); - else - return (char *) 0; - *u = uu; - } - return c; -} -} - -/* Primitive types */ -%typemap(jni) bool, const bool & "jboolean" -%typemap(jni) char, const char & "jchar" -%typemap(jni) signed char, const signed char & "jbyte" -%typemap(jni) unsigned char, const unsigned char & "jshort" -%typemap(jni) short, const short & "jshort" -%typemap(jni) unsigned short, const unsigned short & "jint" -%typemap(jni) int, const int & "jint" -%typemap(jni) unsigned int, const unsigned int & "jlong" -%typemap(jni) long, const long & "jint" -%typemap(jni) unsigned long, const unsigned long & "jlong" -%typemap(jni) long long, const long long & "jlong" -%typemap(jni) unsigned long long, const unsigned long long & "jobject" -%typemap(jni) float, const float & "jfloat" -%typemap(jni) double, const double & "jdouble" -%typemap(jni) void "void" - -%typemap(jtype) bool, const bool & "boolean" -%typemap(jtype) char, const char & "char" -%typemap(jtype) signed char, const signed char & "byte" -%typemap(jtype) unsigned char, const unsigned char & "short" -%typemap(jtype) short, const short & "short" -%typemap(jtype) unsigned short, const unsigned short & "int" -%typemap(jtype) int, const int & "int" -%typemap(jtype) unsigned int, const unsigned int & "long" -%typemap(jtype) long, const long & "int" -%typemap(jtype) unsigned long, const unsigned long & "long" -%typemap(jtype) long long, const long long & "long" -%typemap(jtype) unsigned long long, const unsigned long long & "java.math.BigInteger" -%typemap(jtype) float, const float & "float" -%typemap(jtype) double, const double & "double" -%typemap(jtype) void "void" - -%typemap(jstype) bool, const bool & "boolean" -%typemap(jstype) char, const char & "char" -%typemap(jstype) signed char, const signed char & "byte" -%typemap(jstype) unsigned char, const unsigned char & "short" -%typemap(jstype) short, const short & "short" -%typemap(jstype) unsigned short, const unsigned short & "int" -%typemap(jstype) int, const int & "int" -%typemap(jstype) unsigned int, const unsigned int & "long" -%typemap(jstype) long, const long & "int" -%typemap(jstype) unsigned long, const unsigned long & "long" -%typemap(jstype) long long, const long long & "long" -%typemap(jstype) unsigned long long, const unsigned long long & "java.math.BigInteger" -%typemap(jstype) float, const float & "float" -%typemap(jstype) double, const double & "double" -%typemap(jstype) void "void" - -%typemap(jni) char *, char *&, char[ANY], char[] "jstring" -%typemap(jtype) char *, char *&, char[ANY], char[] "String" -%typemap(jstype) char *, char *&, char[ANY], char[] "String" - -/* JNI types */ -%typemap(jni) jboolean "jboolean" -%typemap(jni) jchar "jchar" -%typemap(jni) jbyte "jbyte" -%typemap(jni) jshort "jshort" -%typemap(jni) jint "jint" -%typemap(jni) jlong "jlong" -%typemap(jni) jfloat "jfloat" -%typemap(jni) jdouble "jdouble" -%typemap(jni) jstring "jstring" -%typemap(jni) jobject "jobject" -%typemap(jni) jbooleanArray "jbooleanArray" -%typemap(jni) jcharArray "jcharArray" -%typemap(jni) jbyteArray "jbyteArray" -%typemap(jni) jshortArray "jshortArray" -%typemap(jni) jintArray "jintArray" -%typemap(jni) jlongArray "jlongArray" -%typemap(jni) jfloatArray "jfloatArray" -%typemap(jni) jdoubleArray "jdoubleArray" -%typemap(jni) jobjectArray "jobjectArray" - -%typemap(jtype) jboolean "boolean" -%typemap(jtype) jchar "char" -%typemap(jtype) jbyte "byte" -%typemap(jtype) jshort "short" -%typemap(jtype) jint "int" -%typemap(jtype) jlong "long" -%typemap(jtype) jfloat "float" -%typemap(jtype) jdouble "double" -%typemap(jtype) jstring "String" -%typemap(jtype) jobject "Object" -%typemap(jtype) jbooleanArray "boolean[]" -%typemap(jtype) jcharArray "char[]" -%typemap(jtype) jbyteArray "byte[]" -%typemap(jtype) jshortArray "short[]" -%typemap(jtype) jintArray "int[]" -%typemap(jtype) jlongArray "long[]" -%typemap(jtype) jfloatArray "float[]" -%typemap(jtype) jdoubleArray "double[]" -%typemap(jtype) jobjectArray "Object[]" - -%typemap(jstype) jboolean "boolean" -%typemap(jstype) jchar "char" -%typemap(jstype) jbyte "byte" -%typemap(jstype) jshort "short" -%typemap(jstype) jint "int" -%typemap(jstype) jlong "long" -%typemap(jstype) jfloat "float" -%typemap(jstype) jdouble "double" -%typemap(jstype) jstring "String" -%typemap(jstype) jobject "Object" -%typemap(jstype) jbooleanArray "boolean[]" -%typemap(jstype) jcharArray "char[]" -%typemap(jstype) jbyteArray "byte[]" -%typemap(jstype) jshortArray "short[]" -%typemap(jstype) jintArray "int[]" -%typemap(jstype) jlongArray "long[]" -%typemap(jstype) jfloatArray "float[]" -%typemap(jstype) jdoubleArray "double[]" -%typemap(jstype) jobjectArray "Object[]" - -/* Non primitive types */ -%typemap(jni) SWIGTYPE "jlong" -%typemap(jtype) SWIGTYPE "long" -%typemap(jstype) SWIGTYPE "$&javaclassname" - -%typemap(jni) SWIGTYPE [] "jlong" -%typemap(jtype) SWIGTYPE [] "long" -%typemap(jstype) SWIGTYPE [] "$javaclassname" - -%typemap(jni) SWIGTYPE * "jlong" -%typemap(jtype) SWIGTYPE * "long" -%typemap(jstype) SWIGTYPE * "$javaclassname" - -%typemap(jni) SWIGTYPE & "jlong" -%typemap(jtype) SWIGTYPE & "long" -%typemap(jstype) SWIGTYPE & "$javaclassname" - -/* pointer to a class member */ -%typemap(jni) SWIGTYPE (CLASS::*) "jstring" -%typemap(jtype) SWIGTYPE (CLASS::*) "String" -%typemap(jstype) SWIGTYPE (CLASS::*) "$javaclassname" - -/* The following are the in, out, freearg, argout typemaps. These are the JNI code generating typemaps for converting from Java to C and visa versa. */ - -/* primitive types */ -%typemap(in) bool -%{ $1 = $input ? true : false; %} - -%typemap(directorout) bool -%{ $result = $input ? true : false; %} - -%typemap(javadirectorin) bool "$jniinput" -%typemap(javadirectorout) bool "$javacall" - -%typemap(in) char, - signed char, - unsigned char, - short, - unsigned short, - int, - unsigned int, - long, - unsigned long, - long long, - float, - double -%{ $1 = ($1_ltype)$input; %} - -%typemap(directorout) char, - signed char, - unsigned char, - short, - unsigned short, - int, - unsigned int, - long, - unsigned long, - long long, - float, - double -%{ $result = ($1_ltype)$input; %} - -%typemap(directorin, descriptor="Z") bool "$input = (jboolean) $1;" -%typemap(directorin, descriptor="C") char "$input = (jint) $1;" -%typemap(directorin, descriptor="B") signed char "$input = (jbyte) $1;" -%typemap(directorin, descriptor="S") unsigned char "$input = (jshort) $1;" -%typemap(directorin, descriptor="S") short "$input = (jshort) $1;" -%typemap(directorin, descriptor="I") unsigned short "$input = (jint) $1;" -%typemap(directorin, descriptor="I") int "$input = (jint) $1;" -%typemap(directorin, descriptor="J") unsigned int "$input = (jlong) $1;" -%typemap(directorin, descriptor="I") long "$input = (jint) $1;" -%typemap(directorin, descriptor="J") unsigned long "$input = (jlong) $1;" -%typemap(directorin, descriptor="J") long long "$input = (jlong) $1;" -%typemap(directorin, descriptor="F") float "$input = (jfloat) $1;" -%typemap(directorin, descriptor="D") double "$input = (jdouble) $1;" - -%typemap(javadirectorin) char, - signed char, - unsigned char, - short, - unsigned short, - int, - unsigned int, - long, - unsigned long, - long long, - float, - double - "$jniinput" - -%typemap(javadirectorout) char, - signed char, - unsigned char, - short, - unsigned short, - int, - unsigned int, - long, - unsigned long, - long long, - float, - double - "$javacall" - -%typemap(out) bool %{ $result = (jboolean)$1; %} -%typemap(out) char %{ $result = (jchar)$1; %} -%typemap(out) signed char %{ $result = (jbyte)$1; %} -%typemap(out) unsigned char %{ $result = (jshort)$1; %} -%typemap(out) short %{ $result = (jshort)$1; %} -%typemap(out) unsigned short %{ $result = (jint)$1; %} -%typemap(out) int %{ $result = (jint)$1; %} -%typemap(out) unsigned int %{ $result = (jlong)$1; %} -%typemap(out) long %{ $result = (jint)$1; %} -%typemap(out) unsigned long %{ $result = (jlong)$1; %} -%typemap(out) long long %{ $result = (jlong)$1; %} -%typemap(out) float %{ $result = (jfloat)$1; %} -%typemap(out) double %{ $result = (jdouble)$1; %} - -/* unsigned long long */ -/* Convert from BigInteger using the toByteArray member function */ -%typemap(in) unsigned long long { - jclass clazz; - jmethodID mid; - jbyteArray ba; - jbyte* bae; - jsize sz; - int i; - - if (!$input) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "BigInteger null"); - return $null; - } - clazz = JCALL1(GetObjectClass, jenv, $input); - mid = JCALL3(GetMethodID, jenv, clazz, "toByteArray", "()[B"); - ba = (jbyteArray)JCALL2(CallObjectMethod, jenv, $input, mid); - bae = JCALL2(GetByteArrayElements, jenv, ba, 0); - sz = JCALL1(GetArrayLength, jenv, ba); - $1 = 0; - for(i=0; i", "([B)V"); - jobject bigint; - int i; - - bae[0] = 0; - for(i=1; i<9; i++ ) { - bae[i] = (jbyte)($1>>8*(8-i)); - } - - JCALL3(ReleaseByteArrayElements, jenv, ba, bae, 0); - bigint = JCALL3(NewObject, jenv, clazz, mid, ba); - $result = bigint; -} - -/* Convert to BigInteger (see out typemap) */ -%typemap(directorin, descriptor="Ljava/math/BigInteger;") unsigned long long, const unsigned long long & { - jbyteArray ba = JCALL1(NewByteArray, jenv, 9); - jbyte* bae = JCALL2(GetByteArrayElements, jenv, ba, 0); - jclass clazz = JCALL1(FindClass, jenv, "java/math/BigInteger"); - jmethodID mid = JCALL3(GetMethodID, jenv, clazz, "", "([B)V"); - jobject bigint; - int swig_i; - - bae[0] = 0; - for(swig_i=1; swig_i<9; swig_i++ ) { - bae[swig_i] = (jbyte)($1>>8*(8-swig_i)); - } - - JCALL3(ReleaseByteArrayElements, jenv, ba, bae, 0); - bigint = JCALL3(NewObject, jenv, clazz, mid, ba); - $input = bigint; -} - -%typemap(javadirectorin) unsigned long long "$jniinput" -%typemap(javadirectorout) unsigned long long "$javacall" - -/* char * - treat as String */ -%typemap(in, noblock=1) char * { - $1 = 0; - if ($input) { - $1 = ($1_ltype)JCALL2(GetStringUTFChars, jenv, $input, 0); - if (!$1) return $null; - } -} - -%typemap(directorout, noblock=1, warning=SWIGWARN_TYPEMAP_DIRECTOROUT_PTR_MSG) char * { - $1 = 0; - if ($input) { - $result = ($1_ltype)JCALL2(GetStringUTFChars, jenv, $input, 0); - if (!$result) return $null; - } -} - -%typemap(directorin, descriptor="Ljava/lang/String;", noblock=1) char * { - $input = 0; - if ($1) { - $input = JCALL1(NewStringUTF, jenv, (const char *)$1); - if (!$input) return $null; - } -} - -%typemap(freearg, noblock=1) char * { if ($1) JCALL2(ReleaseStringUTFChars, jenv, $input, (const char *)$1); } -%typemap(out, noblock=1) char * { if ($1) $result = JCALL1(NewStringUTF, jenv, (const char *)$1); } -%typemap(javadirectorin) char * "$jniinput" -%typemap(javadirectorout) char * "$javacall" - -/* char *& - treat as String */ -%typemap(in, noblock=1) char *& ($*1_ltype temp = 0) { - $1 = 0; - if ($input) { - temp = ($*1_ltype)JCALL2(GetStringUTFChars, jenv, $input, 0); - if (!temp) return $null; - } - $1 = &temp; -} -%typemap(freearg, noblock=1) char *& { if ($1 && *$1) JCALL2(ReleaseStringUTFChars, jenv, $input, (const char *)*$1); } -%typemap(out, noblock=1) char *& { if (*$1) $result = JCALL1(NewStringUTF, jenv, (const char *)*$1); } - -%typemap(out) void "" -%typemap(javadirectorin) void "$jniinput" -%typemap(javadirectorout) void "$javacall" -%typemap(directorin, descriptor="V") void "" - -/* primitive types by reference */ -%typemap(in) const bool & ($*1_ltype temp) -%{ temp = $input ? true : false; - $1 = &temp; %} - -%typemap(directorout,warning=SWIGWARN_TYPEMAP_THREAD_UNSAFE_MSG) const bool & -%{ static $*1_ltype temp; - temp = $input ? true : false; - $result = &temp; %} - -%typemap(javadirectorin) const bool & "$jniinput" -%typemap(javadirectorout) const bool & "$javacall" - -%typemap(in) const char & ($*1_ltype temp), - const signed char & ($*1_ltype temp), - const unsigned char & ($*1_ltype temp), - const short & ($*1_ltype temp), - const unsigned short & ($*1_ltype temp), - const int & ($*1_ltype temp), - const unsigned int & ($*1_ltype temp), - const long & ($*1_ltype temp), - const unsigned long & ($*1_ltype temp), - const long long & ($*1_ltype temp), - const float & ($*1_ltype temp), - const double & ($*1_ltype temp) -%{ temp = ($*1_ltype)$input; - $1 = &temp; %} - -%typemap(directorout,warning=SWIGWARN_TYPEMAP_THREAD_UNSAFE_MSG) const char &, - const signed char &, - const unsigned char &, - const short &, - const unsigned short &, - const int &, - const unsigned int &, - const long &, - const unsigned long &, - const long long &, - const float &, - const double & -%{ static $*1_ltype temp; - temp = ($*1_ltype)$input; - $result = &temp; %} - -%typemap(directorin, descriptor="Z") const bool & "$input = (jboolean)$1;" -%typemap(directorin, descriptor="C") const char & "$input = (jchar)$1;" -%typemap(directorin, descriptor="B") const signed char & "$input = (jbyte)$1;" -%typemap(directorin, descriptor="S") const unsigned char & "$input = (jshort)$1;" -%typemap(directorin, descriptor="S") const short & "$input = (jshort)$1;" -%typemap(directorin, descriptor="I") const unsigned short & "$input = (jint)$1;" -%typemap(directorin, descriptor="I") const int & "$input = (jint)$1;" -%typemap(directorin, descriptor="J") const unsigned int & "$input = (jlong)$1;" -%typemap(directorin, descriptor="I") const long & "$input = (jint)$1;" -%typemap(directorin, descriptor="J") const unsigned long & "$input = (jlong)$1;" -%typemap(directorin, descriptor="J") const long long & "$input = (jlong)$1;" -%typemap(directorin, descriptor="F") const float & "$input = (jfloat)$1;" -%typemap(directorin, descriptor="D") const double & "$input = (jdouble)$1;" - -%typemap(javadirectorin) const char & ($*1_ltype temp), - const signed char & ($*1_ltype temp), - const unsigned char & ($*1_ltype temp), - const short & ($*1_ltype temp), - const unsigned short & ($*1_ltype temp), - const int & ($*1_ltype temp), - const unsigned int & ($*1_ltype temp), - const long & ($*1_ltype temp), - const unsigned long & ($*1_ltype temp), - const long long & ($*1_ltype temp), - const float & ($*1_ltype temp), - const double & ($*1_ltype temp) - "$jniinput" - -%typemap(javadirectorout) const char & ($*1_ltype temp), - const signed char & ($*1_ltype temp), - const unsigned char & ($*1_ltype temp), - const short & ($*1_ltype temp), - const unsigned short & ($*1_ltype temp), - const int & ($*1_ltype temp), - const unsigned int & ($*1_ltype temp), - const long & ($*1_ltype temp), - const unsigned long & ($*1_ltype temp), - const long long & ($*1_ltype temp), - const float & ($*1_ltype temp), - const double & ($*1_ltype temp) - "$javacall" - - -%typemap(out) const bool & %{ $result = (jboolean)*$1; %} -%typemap(out) const char & %{ $result = (jchar)*$1; %} -%typemap(out) const signed char & %{ $result = (jbyte)*$1; %} -%typemap(out) const unsigned char & %{ $result = (jshort)*$1; %} -%typemap(out) const short & %{ $result = (jshort)*$1; %} -%typemap(out) const unsigned short & %{ $result = (jint)*$1; %} -%typemap(out) const int & %{ $result = (jint)*$1; %} -%typemap(out) const unsigned int & %{ $result = (jlong)*$1; %} -%typemap(out) const long & %{ $result = (jint)*$1; %} -%typemap(out) const unsigned long & %{ $result = (jlong)*$1; %} -%typemap(out) const long long & %{ $result = (jlong)*$1; %} -%typemap(out) const float & %{ $result = (jfloat)*$1; %} -%typemap(out) const double & %{ $result = (jdouble)*$1; %} - -/* const unsigned long long & */ -/* Similar to unsigned long long */ -%typemap(in) const unsigned long long & ($*1_ltype temp) { - jclass clazz; - jmethodID mid; - jbyteArray ba; - jbyte* bae; - jsize sz; - int i; - - if (!$input) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "BigInteger null"); - return $null; - } - clazz = JCALL1(GetObjectClass, jenv, $input); - mid = JCALL3(GetMethodID, jenv, clazz, "toByteArray", "()[B"); - ba = (jbyteArray)JCALL2(CallObjectMethod, jenv, $input, mid); - bae = JCALL2(GetByteArrayElements, jenv, ba, 0); - sz = JCALL1(GetArrayLength, jenv, ba); - $1 = &temp; - temp = 0; - for(i=0; i", "([B)V"); - jobject bigint; - int i; - - bae[0] = 0; - for(i=1; i<9; i++ ) { - bae[i] = (jbyte)(*$1>>8*(8-i)); - } - - JCALL3(ReleaseByteArrayElements, jenv, ba, bae, 0); - bigint = JCALL3(NewObject, jenv, clazz, mid, ba); - $result = bigint; -} - -%typemap(javadirectorin) const unsigned long long & "$jniinput" -%typemap(javadirectorout) const unsigned long long & "$javacall" - -/* Default handling. Object passed by value. Convert to a pointer */ -%typemap(in) SWIGTYPE ($&1_type argp) -%{ argp = *($&1_ltype*)&$input; - if (!argp) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null $1_type"); - return $null; - } - $1 = *argp; %} - -%typemap(directorout) SWIGTYPE ($&1_type argp) -%{ argp = *($&1_ltype*)&$input; - if (!argp) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Unexpected null return for type $1_type"); - return $null; - } - $result = *argp; %} - -%typemap(out) SWIGTYPE -#ifdef __cplusplus -%{ *($&1_ltype*)&$result = new $1_ltype((const $1_ltype &)$1); %} -#else -{ - $&1_ltype $1ptr = ($&1_ltype) malloc(sizeof($1_ltype)); - memmove($1ptr, &$1, sizeof($1_type)); - *($&1_ltype*)&$result = $1ptr; -} -#endif - -%typemap(directorin,descriptor="L$packagepath/$&javaclassname;") SWIGTYPE -%{ $input = 0; - *(($&1_ltype*)&$input) = &$1; %} -%typemap(javadirectorin) SWIGTYPE "new $&javaclassname($jniinput, false)" -%typemap(javadirectorout) SWIGTYPE "$&javaclassname.getCPtr($javacall)" - -/* Generic pointers and references */ -%typemap(in) SWIGTYPE * %{ $1 = *($&1_ltype)&$input; %} -%typemap(in, fragment="SWIG_UnPackData") SWIGTYPE (CLASS::*) { - const char *temp = 0; - if ($input) { - temp = JCALL2(GetStringUTFChars, jenv, $input, 0); - if (!temp) return $null; - } - SWIG_UnpackData(temp, (void *)&$1, sizeof($1)); -} -%typemap(in) SWIGTYPE & %{ $1 = *($&1_ltype)&$input; - if (!$1) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "$1_type reference is null"); - return $null; - } %} -%typemap(out) SWIGTYPE * -%{ *($&1_ltype)&$result = $1; %} -%typemap(out, fragment="SWIG_PackData", noblock=1) SWIGTYPE (CLASS::*) { - char buf[128]; - char *data = SWIG_PackData(buf, (void *)&$1, sizeof($1)); - *data = '\0'; - $result = JCALL1(NewStringUTF, jenv, buf); -} -%typemap(out) SWIGTYPE & -%{ *($&1_ltype)&$result = $1; %} - -%typemap(directorout, warning=SWIGWARN_TYPEMAP_DIRECTOROUT_PTR_MSG) SWIGTYPE * -%{ $result = *($&1_ltype)&$input; %} -%typemap(directorout, warning=SWIGWARN_TYPEMAP_DIRECTOROUT_PTR_MSG) SWIGTYPE (CLASS::*) -%{ $result = *($&1_ltype)&$input; %} - -%typemap(directorin,descriptor="L$packagepath/$javaclassname;") SWIGTYPE * -%{ *(($&1_ltype)&$input) = ($1_ltype) $1; %} -%typemap(directorin,descriptor="L$packagepath/$javaclassname;") SWIGTYPE (CLASS::*) -%{ *(($&1_ltype)&$input) = ($1_ltype) $1; %} - -%typemap(directorout, warning=SWIGWARN_TYPEMAP_DIRECTOROUT_PTR_MSG) SWIGTYPE & -%{ if (!$input) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Unexpected null return for type $1_type"); - return $null; - } - $result = *($&1_ltype)&$input; %} -%typemap(directorin,descriptor="L$packagepath/$javaclassname;") SWIGTYPE & -%{ *($&1_ltype)&$input = ($1_ltype) &$1; %} - -%typemap(javadirectorin) SWIGTYPE *, SWIGTYPE (CLASS::*) "($jniinput == 0) ? null : new $javaclassname($jniinput, false)" -%typemap(javadirectorin) SWIGTYPE & "new $javaclassname($jniinput, false)" -%typemap(javadirectorout) SWIGTYPE *, SWIGTYPE (CLASS::*), SWIGTYPE & "$javaclassname.getCPtr($javacall)" - -/* Default array handling */ -%typemap(in) SWIGTYPE [] %{ $1 = *($&1_ltype)&$input; %} -%typemap(out) SWIGTYPE [] %{ *($&1_ltype)&$result = $1; %} -%typemap(freearg) SWIGTYPE [ANY], SWIGTYPE [] "" - -/* char arrays - treat as String */ -%typemap(in, noblock=1) char[ANY], char[] { - $1 = 0; - if ($input) { - $1 = ($1_ltype)JCALL2(GetStringUTFChars, jenv, $input, 0); - if (!$1) return $null; - } -} - -%typemap(directorout, noblock=1) char[ANY], char[] { - $1 = 0; - if ($input) { - $result = ($1_ltype)JCALL2(GetStringUTFChars, jenv, $input, 0); - if (!$result) return $null; - } -} - -%typemap(directorin, descriptor="Ljava/lang/String;", noblock=1) char[ANY], char[] { - $input = 0; - if ($1) { - $input = JCALL1(NewStringUTF, jenv, (const char *)$1); - if (!$input) return $null; - } -} - -%typemap(argout) char[ANY], char[] "" -%typemap(freearg, noblock=1) char[ANY], char[] { if ($1) JCALL2(ReleaseStringUTFChars, jenv, $input, (const char *)$1); } -%typemap(out, noblock=1) char[ANY], char[] { if ($1) $result = JCALL1(NewStringUTF, jenv, (const char *)$1); } -%typemap(javadirectorin) char[ANY], char[] "$jniinput" -%typemap(javadirectorout) char[ANY], char[] "$javacall" - -/* JNI types */ -%typemap(in) jboolean, - jchar, - jbyte, - jshort, - jint, - jlong, - jfloat, - jdouble, - jstring, - jobject, - jbooleanArray, - jcharArray, - jbyteArray, - jshortArray, - jintArray, - jlongArray, - jfloatArray, - jdoubleArray, - jobjectArray -%{ $1 = $input; %} - -%typemap(directorout) jboolean, - jchar, - jbyte, - jshort, - jint, - jlong, - jfloat, - jdouble, - jstring, - jobject, - jbooleanArray, - jcharArray, - jbyteArray, - jshortArray, - jintArray, - jlongArray, - jfloatArray, - jdoubleArray, - jobjectArray -%{ $result = $input; %} - -%typemap(out) jboolean, - jchar, - jbyte, - jshort, - jint, - jlong, - jfloat, - jdouble, - jstring, - jobject, - jbooleanArray, - jcharArray, - jbyteArray, - jshortArray, - jintArray, - jlongArray, - jfloatArray, - jdoubleArray, - jobjectArray -%{ $result = $1; %} - -%typemap(directorin,descriptor="Z") jboolean "$input = $1;" -%typemap(directorin,descriptor="C") jchar "$input = $1;" -%typemap(directorin,descriptor="B") jbyte "$input = $1;" -%typemap(directorin,descriptor="S") jshort "$input = $1;" -%typemap(directorin,descriptor="I") jint "$input = $1;" -%typemap(directorin,descriptor="J") jlong "$input = $1;" -%typemap(directorin,descriptor="F") jfloat "$input = $1;" -%typemap(directorin,descriptor="D") jdouble "$input = $1;" -%typemap(directorin,descriptor="Ljava/lang/String;") jstring "$input = $1;" -%typemap(directorin,descriptor="Ljava/lang/Object;",nouse="1") jobject "$input = $1;" -%typemap(directorin,descriptor="[Z") jbooleanArray "$input = $1;" -%typemap(directorin,descriptor="[C") jcharArray "$input = $1;" -%typemap(directorin,descriptor="[B") jbyteArray "$input = $1;" -%typemap(directorin,descriptor="[S") jshortArray "$input = $1;" -%typemap(directorin,descriptor="[I") jintArray "$input = $1;" -%typemap(directorin,descriptor="[J") jlongArray "$input = $1;" -%typemap(directorin,descriptor="[F") jfloatArray "$input = $1;" -%typemap(directorin,descriptor="[D") jdoubleArray "$input = $1;" -%typemap(directorin,descriptor="[Ljava/lang/Object;",nouse="1") jobjectArray "$input = $1;" - -%typemap(javadirectorin) jboolean, - jchar, - jbyte, - jshort, - jint, - jlong, - jfloat, - jdouble, - jstring, - jobject, - jbooleanArray, - jcharArray, - jbyteArray, - jshortArray, - jintArray, - jlongArray, - jfloatArray, - jdoubleArray, - jobjectArray - "$jniinput" - -%typemap(javadirectorout) jboolean, - jchar, - jbyte, - jshort, - jint, - jlong, - jfloat, - jdouble, - jstring, - jobject, - jbooleanArray, - jcharArray, - jbyteArray, - jshortArray, - jintArray, - jlongArray, - jfloatArray, - jdoubleArray, - jobjectArray - "$javacall" - -/* Typecheck typemaps - The purpose of these is merely to issue a warning for overloaded C++ functions - * that cannot be overloaded in Java as more than one C++ type maps to a single Java type */ - -%typecheck(SWIG_TYPECHECK_BOOL) /* Java boolean */ - jboolean, - bool, - const bool & - "" - -%typecheck(SWIG_TYPECHECK_CHAR) /* Java char */ - jchar, - char, - const char & - "" - -%typecheck(SWIG_TYPECHECK_INT8) /* Java byte */ - jbyte, - signed char, - const signed char & - "" - -%typecheck(SWIG_TYPECHECK_INT16) /* Java short */ - jshort, - unsigned char, - short, - const unsigned char &, - const short & - "" - -%typecheck(SWIG_TYPECHECK_INT32) /* Java int */ - jint, - unsigned short, - int, - long, - const unsigned short &, - const int &, - const long & - "" - -%typecheck(SWIG_TYPECHECK_INT64) /* Java long */ - jlong, - unsigned int, - unsigned long, - long long, - const unsigned int &, - const unsigned long &, - const long long & - "" - -%typecheck(SWIG_TYPECHECK_INT128) /* Java BigInteger */ - unsigned long long, - const unsigned long long & - "" - -%typecheck(SWIG_TYPECHECK_FLOAT) /* Java float */ - jfloat, - float, - const float & - "" - -%typecheck(SWIG_TYPECHECK_DOUBLE) /* Java double */ - jdouble, - double, - const double & - "" - -%typecheck(SWIG_TYPECHECK_STRING) /* Java String */ - jstring, - char *, - char *&, - char[ANY], - char [] - "" - -%typecheck(SWIG_TYPECHECK_BOOL_ARRAY) /* Java boolean[] */ - jbooleanArray - "" - -%typecheck(SWIG_TYPECHECK_CHAR_ARRAY) /* Java char[] */ - jcharArray - "" - -%typecheck(SWIG_TYPECHECK_INT8_ARRAY) /* Java byte[] */ - jbyteArray - "" - -%typecheck(SWIG_TYPECHECK_INT16_ARRAY) /* Java short[] */ - jshortArray - "" - -%typecheck(SWIG_TYPECHECK_INT32_ARRAY) /* Java int[] */ - jintArray - "" - -%typecheck(SWIG_TYPECHECK_INT64_ARRAY) /* Java long[] */ - jlongArray - "" - -%typecheck(SWIG_TYPECHECK_FLOAT_ARRAY) /* Java float[] */ - jfloatArray - "" - -%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) /* Java double[] */ - jdoubleArray - "" - -%typecheck(SWIG_TYPECHECK_OBJECT_ARRAY) /* Java jobject[] */ - jobjectArray - "" - -%typecheck(SWIG_TYPECHECK_POINTER) /* Default */ - SWIGTYPE, - SWIGTYPE *, - SWIGTYPE &, - SWIGTYPE *const&, - SWIGTYPE [], - SWIGTYPE (CLASS::*) - "" - - -/* Exception handling */ - -%typemap(throws) int, - long, - short, - unsigned int, - unsigned long, - unsigned short -%{ char error_msg[256]; - sprintf(error_msg, "C++ $1_type exception thrown, value: %d", $1); - SWIG_JavaThrowException(jenv, SWIG_JavaRuntimeException, error_msg); - return $null; %} - -%typemap(throws) SWIGTYPE, SWIGTYPE &, SWIGTYPE *, SWIGTYPE [], SWIGTYPE [ANY] -%{ (void)$1; - SWIG_JavaThrowException(jenv, SWIG_JavaRuntimeException, "C++ $1_type exception thrown"); - return $null; %} - -%typemap(throws) char * -%{ SWIG_JavaThrowException(jenv, SWIG_JavaRuntimeException, $1); - return $null; %} - - -/* Typemaps for code generation in proxy classes and Java type wrapper classes */ - -/* The javain typemap is used for converting function parameter types from the type - * used in the proxy, module or type wrapper class to the type used in the JNI class. */ -%typemap(javain) bool, const bool &, - char, const char &, - signed char, const signed char &, - unsigned char, const unsigned char &, - short, const short &, - unsigned short, const unsigned short &, - int, const int &, - unsigned int, const unsigned int &, - long, const long &, - unsigned long, const unsigned long &, - long long, const long long &, - unsigned long long, const unsigned long long &, - float, const float &, - double, const double & - "$javainput" -%typemap(javain) char *, char *&, char[ANY], char[] "$javainput" -%typemap(javain) jboolean, - jchar, - jbyte, - jshort, - jint, - jlong, - jfloat, - jdouble, - jstring, - jobject, - jbooleanArray, - jcharArray, - jbyteArray, - jshortArray, - jintArray, - jlongArray, - jfloatArray, - jdoubleArray, - jobjectArray - "$javainput" -%typemap(javain) SWIGTYPE "$&javaclassname.getCPtr($javainput)" -%typemap(javain) SWIGTYPE *, SWIGTYPE &, SWIGTYPE [] "$javaclassname.getCPtr($javainput)" -%typemap(javain) SWIGTYPE (CLASS::*) "$javaclassname.getCMemberPtr($javainput)" - -/* The javaout typemap is used for converting function return types from the return type - * used in the JNI class to the type returned by the proxy, module or type wrapper class. */ -%typemap(javaout) bool, const bool &, - char, const char &, - signed char, const signed char &, - unsigned char, const unsigned char &, - short, const short &, - unsigned short, const unsigned short &, - int, const int &, - unsigned int, const unsigned int &, - long, const long &, - unsigned long, const unsigned long &, - long long, const long long &, - unsigned long long, const unsigned long long &, - float, const float &, - double, const double & { - return $jnicall; - } -%typemap(javaout) char *, char *&, char[ANY], char[] { - return $jnicall; - } -%typemap(javaout) jboolean, - jchar, - jbyte, - jshort, - jint, - jlong, - jfloat, - jdouble, - jstring, - jobject, - jbooleanArray, - jcharArray, - jbyteArray, - jshortArray, - jintArray, - jlongArray, - jfloatArray, - jdoubleArray, - jobjectArray { - return $jnicall; - } -%typemap(javaout) void { - $jnicall; - } -%typemap(javaout) SWIGTYPE { - return new $&javaclassname($jnicall, true); - } -%typemap(javaout) SWIGTYPE & { - return new $javaclassname($jnicall, $owner); - } -%typemap(javaout) SWIGTYPE *, SWIGTYPE [] { - long cPtr = $jnicall; - return (cPtr == 0) ? null : new $javaclassname(cPtr, $owner); - } -%typemap(javaout) SWIGTYPE (CLASS::*) { - String cMemberPtr = $jnicall; - return (cMemberPtr == null) ? null : new $javaclassname(cMemberPtr, $owner); - } - -/* Pointer reference typemaps */ -%typemap(jni) SWIGTYPE *const& "jlong" -%typemap(jtype) SWIGTYPE *const& "long" -%typemap(jstype) SWIGTYPE *const& "$*javaclassname" -%typemap(javain) SWIGTYPE *const& "$*javaclassname.getCPtr($javainput)" -%typemap(javaout) SWIGTYPE *const& { - long cPtr = $jnicall; - return (cPtr == 0) ? null : new $*javaclassname(cPtr, $owner); - } -%typemap(in) SWIGTYPE *const& ($*1_ltype temp = 0) -%{ temp = *($1_ltype)&$input; - $1 = ($1_ltype)&temp; %} -%typemap(out) SWIGTYPE *const& -%{ *($1_ltype)&$result = *$1; %} - -/* Typemaps used for the generation of proxy and type wrapper class code */ -%typemap(javabase) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) "" -%typemap(javaclassmodifiers) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) "public class" -%typemap(javacode) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) "" -%typemap(javaimports) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) "" -%typemap(javainterfaces) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) "" - -/* javabody typemaps */ - -%define SWIG_JAVABODY_METHODS(PTRCTOR_VISIBILITY, CPTR_VISIBILITY, TYPE...) SWIG_JAVABODY_PROXY(PTRCTOR_VISIBILITY, CPTR_VISIBILITY, TYPE) %enddef // legacy name - -%define SWIG_JAVABODY_PROXY(PTRCTOR_VISIBILITY, CPTR_VISIBILITY, TYPE...) -// Base proxy classes -%typemap(javabody) TYPE %{ - private long swigCPtr; - protected boolean swigCMemOwn; - - PTRCTOR_VISIBILITY $javaclassname(long cPtr, boolean cMemoryOwn) { - swigCMemOwn = cMemoryOwn; - swigCPtr = cPtr; - } - - CPTR_VISIBILITY static long getCPtr($javaclassname obj) { - return (obj == null) ? 0 : obj.swigCPtr; - } -%} - -// Derived proxy classes -%typemap(javabody_derived) TYPE %{ - private long swigCPtr; - - PTRCTOR_VISIBILITY $javaclassname(long cPtr, boolean cMemoryOwn) { - super($imclassname.$javaclazznameSWIGUpcast(cPtr), cMemoryOwn); - swigCPtr = cPtr; - } - - CPTR_VISIBILITY static long getCPtr($javaclassname obj) { - return (obj == null) ? 0 : obj.swigCPtr; - } -%} -%enddef - -%define SWIG_JAVABODY_TYPEWRAPPER(PTRCTOR_VISIBILITY, DEFAULTCTOR_VISIBILITY, CPTR_VISIBILITY, TYPE...) -// Typewrapper classes -%typemap(javabody) TYPE *, TYPE &, TYPE [] %{ - private long swigCPtr; - - PTRCTOR_VISIBILITY $javaclassname(long cPtr, boolean futureUse) { - swigCPtr = cPtr; - } - - DEFAULTCTOR_VISIBILITY $javaclassname() { - swigCPtr = 0; - } - - CPTR_VISIBILITY static long getCPtr($javaclassname obj) { - return (obj == null) ? 0 : obj.swigCPtr; - } -%} - -%typemap(javabody) TYPE (CLASS::*) %{ - private String swigCMemberPtr; - - PTRCTOR_VISIBILITY $javaclassname(String cMemberPtr, boolean futureUse) { - swigCMemberPtr = cMemberPtr; - } - - DEFAULTCTOR_VISIBILITY $javaclassname() { - swigCMemberPtr = null; - } - - CPTR_VISIBILITY static String getCMemberPtr($javaclassname obj) { - return obj.swigCMemberPtr; - } -%} -%enddef - -/* Set the default javabody typemaps to use protected visibility. - Use the macros to change to public if using multiple modules. */ -SWIG_JAVABODY_PROXY(protected, protected, SWIGTYPE) -SWIG_JAVABODY_TYPEWRAPPER(protected, protected, protected, SWIGTYPE) - -%typemap(javafinalize) SWIGTYPE %{ - protected void finalize() { - delete(); - } -%} - -/* - * Java constructor typemaps: - * - * The javaconstruct typemap is inserted when a proxy class's constructor is generated. - * This typemap allows control over what code is executed in the constructor as - * well as specifying who owns the underlying C/C++ object. Normally, Java has - * ownership and the underlying C/C++ object is deallocated when the Java object - * is finalized (swigCMemOwn is true.) If swigCMemOwn is false, C/C++ is - * ultimately responsible for deallocating the underlying object's memory. - * - * The SWIG_PROXY_CONSTRUCTOR macro defines the javaconstruct typemap for a proxy - * class for a particular TYPENAME. OWNERSHIP is passed as the value of - * swigCMemOwn to the pointer constructor method. WEAKREF determines which kind - * of Java object reference will be used by the C++ director class (WeakGlobalRef - * vs. GlobalRef.) - * - * The SWIG_DIRECTOR_OWNED macro sets the ownership of director-based proxy - * classes and the weak reference flag to false, meaning that the underlying C++ - * object will be reclaimed by C++. - */ - -%define SWIG_PROXY_CONSTRUCTOR(OWNERSHIP, WEAKREF, TYPENAME...) -%typemap(javaconstruct,directorconnect="\n $imclassname.$javaclazznamedirector_connect(this, swigCPtr, swigCMemOwn, WEAKREF);") TYPENAME { - this($imcall, OWNERSHIP);$directorconnect - } -%enddef - -%define SWIG_DIRECTOR_OWNED(TYPENAME...) -SWIG_PROXY_CONSTRUCTOR(true, false, TYPENAME) -%enddef - -// Set the default for SWIGTYPE: Java owns the C/C++ object. -SWIG_PROXY_CONSTRUCTOR(true, true, SWIGTYPE) - -%typemap(javadestruct, methodname="delete", methodmodifiers="public synchronized") SWIGTYPE { - if (swigCPtr != 0) { - if (swigCMemOwn) { - swigCMemOwn = false; - $jnicall; - } - swigCPtr = 0; - } - } - -%typemap(javadestruct_derived, methodname="delete", methodmodifiers="public synchronized") SWIGTYPE { - if (swigCPtr != 0) { - if (swigCMemOwn) { - swigCMemOwn = false; - $jnicall; - } - swigCPtr = 0; - } - super.delete(); - } - -%typemap(directordisconnect, methodname="swigDirectorDisconnect") SWIGTYPE %{ - protected void $methodname() { - swigCMemOwn = false; - $jnicall; - } -%} - -%typemap(directorowner_release, methodname="swigReleaseOwnership") SWIGTYPE %{ - public void $methodname() { - swigCMemOwn = false; - $jnicall; - } -%} - -%typemap(directorowner_take, methodname="swigTakeOwnership") SWIGTYPE %{ - public void $methodname() { - swigCMemOwn = true; - $jnicall; - } -%} - -/* Java specific directives */ -#define %javaconst(flag) %feature("java:const","flag") -#define %javaconstvalue(value) %feature("java:constvalue",value) -#define %javaenum(wrapapproach) %feature("java:enum","wrapapproach") -#define %javamethodmodifiers %feature("java:methodmodifiers") -#define %javaexception(exceptionclasses) %feature("except",throws=exceptionclasses) -#define %nojavaexception %feature("except","0",throws="") -#define %clearjavaexception %feature("except","",throws="") - -%pragma(java) jniclassclassmodifiers="public class" -%pragma(java) moduleclassmodifiers="public class" - -/* Some ANSI C typemaps */ - -%apply unsigned long { size_t }; -%apply const unsigned long & { const size_t & }; - -/* Array reference typemaps */ -%apply SWIGTYPE & { SWIGTYPE ((&)[ANY]) } - -/* const pointers */ -%apply SWIGTYPE * { SWIGTYPE *const } - -/* String & length */ -%typemap(jni) (char *STRING, size_t LENGTH) "jbyteArray" -%typemap(jtype) (char *STRING, size_t LENGTH) "byte[]" -%typemap(jstype) (char *STRING, size_t LENGTH) "byte[]" -%typemap(javain) (char *STRING, size_t LENGTH) "$javainput" -%typemap(freearg) (char *STRING, size_t LENGTH) "" -%typemap(in) (char *STRING, size_t LENGTH) { - if ($input) { - $1 = (char *) JCALL2(GetByteArrayElements, jenv, $input, 0); - $2 = (size_t) JCALL1(GetArrayLength, jenv, $input); - } else { - $1 = 0; - $2 = 0; - } -} -%typemap(argout) (char *STRING, size_t LENGTH) { - if ($input) JCALL3(ReleaseByteArrayElements, jenv, $input, (jbyte *)$1, 0); -} -%typemap(directorin, descriptor="[B") (char *STRING, size_t LENGTH) { - jbyteArray jb = (jenv)->NewByteArray($2); - (jenv)->SetByteArrayRegion(jb, 0, $2, (jbyte *)$1); - $input = jb; -} -%typemap(directorargout) (char *STRING, size_t LENGTH) -%{(jenv)->GetByteArrayRegion($input, 0, $2, (jbyte *)$1); %} -%apply (char *STRING, size_t LENGTH) { (char *STRING, int LENGTH) } - -/* java keywords */ -%include - -// Default enum handling -%include - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/swig_std_vector.i b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/swig_std_vector.i deleted file mode 100644 index baecf85..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/swig_std_vector.i +++ /dev/null @@ -1,225 +0,0 @@ -// -// std::vector -// - -%include - -// Vector - -%define %std_vector_methods(vector...) - %std_sequence_methods(vector) - - void reserve(size_type n); - size_type capacity() const; -%enddef - - -%define %std_vector_methods_val(vector...) - %std_sequence_methods_val(vector) - - void reserve(size_type n); - size_type capacity() const; -%enddef - - -// ------------------------------------------------------------------------ -// std::vector -// -// The aim of all that follows would be to integrate std::vector with -// as much as possible, namely, to allow the user to pass and -// be returned tuples or lists. -// const declarations are used to guess the intent of the function being -// exported; therefore, the following rationale is applied: -// -// -- f(std::vector), f(const std::vector&): -// the parameter being read-only, either a sequence or a -// previously wrapped std::vector can be passed. -// -- f(std::vector&), f(std::vector*): -// the parameter may be modified; therefore, only a wrapped std::vector -// can be passed. -// -- std::vector f(), const std::vector& f(): -// the vector is returned by copy; therefore, a sequence of T:s -// is returned which is most easily used in other functions -// -- std::vector& f(), std::vector* f(): -// the vector is returned by reference; therefore, a wrapped std::vector -// is returned -// -- const std::vector* f(), f(const std::vector*): -// for consistency, they expect and return a plain vector pointer. -// ------------------------------------------------------------------------ - -%{ -#include -%} - -// exported classes - - -namespace std { - - template > - class vector { - public: - typedef size_t size_type; - typedef ptrdiff_t difference_type; - typedef _Tp value_type; - typedef value_type* pointer; - typedef const value_type* const_pointer; - typedef _Tp& reference; - typedef const _Tp& const_reference; - typedef _Alloc allocator_type; - - %traits_swigtype(_Tp); - %traits_enum(_Tp); - - %fragment(SWIG_Traits_frag(std::vector<_Tp, _Alloc >), "header", - fragment=SWIG_Traits_frag(_Tp), - fragment="StdVectorTraits") { - namespace swig { - template <> struct traits > { - typedef pointer_category category; - static const char* type_name() { - return "std::vector<" #_Tp "," #_Alloc " >"; - } - }; - } - } - - %typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector<_Tp, _Alloc >); - -#ifdef %swig_vector_methods - // Add swig/language extra methods - %swig_vector_methods(std::vector<_Tp, _Alloc >); -#endif - - %std_vector_methods(vector); - }; - - // *** - // This specialization should disappear or get simplified when - // a 'const SWIGTYPE*&' can be defined - // *** - template - class vector<_Tp*, _Alloc > { - public: - typedef size_t size_type; - typedef ptrdiff_t difference_type; - typedef _Tp* value_type; - typedef value_type* pointer; - typedef const value_type* const_pointer; - typedef value_type reference; - typedef value_type const_reference; - typedef _Alloc allocator_type; - - %traits_swigtype(_Tp); - - %fragment(SWIG_Traits_frag(std::vector<_Tp*, _Alloc >), "header", - fragment=SWIG_Traits_frag(_Tp), - fragment="StdVectorTraits") { - namespace swig { - template <> struct traits > { - typedef value_category category; - static const char* type_name() { - return "std::vector<" #_Tp " *," #_Alloc " >"; - } - }; - } - } - - %typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector<_Tp*, _Alloc >); - -#ifdef %swig_vector_methods_val - // Add swig/language extra methods - %swig_vector_methods_val(std::vector<_Tp*, _Alloc >); -#endif - - %std_vector_methods_val(vector); - }; - - // *** - // const pointer specialization - // *** - template - class vector<_Tp const *, _Alloc > { - public: - typedef size_t size_type; - typedef ptrdiff_t difference_type; - typedef _Tp const * value_type; - typedef value_type* pointer; - typedef const value_type* const_pointer; - typedef value_type reference; - typedef value_type const_reference; - typedef _Alloc allocator_type; - - %traits_swigtype(_Tp); - - %fragment(SWIG_Traits_frag(std::vector<_Tp const*, _Alloc >), "header", - fragment=SWIG_Traits_frag(_Tp), - fragment="StdVectorTraits") { - namespace swig { - template <> struct traits > { - typedef value_category category; - static const char* type_name() { - return "std::vector<" #_Tp " const*," #_Alloc " >"; - } - }; - } - } - - %typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector<_Tp const*, _Alloc >); - -#ifdef %swig_vector_methods_val - // Add swig/language extra methods - %swig_vector_methods_val(std::vector<_Tp const*, _Alloc >); -#endif - - %std_vector_methods_val(vector); - }; - - // *** - // bool specialization - // *** - - template - class vector { - public: - typedef size_t size_type; - typedef ptrdiff_t difference_type; - typedef bool value_type; - typedef value_type* pointer; - typedef const value_type* const_pointer; - typedef value_type reference; - typedef value_type const_reference; - typedef _Alloc allocator_type; - - %traits_swigtype(bool); - - %fragment(SWIG_Traits_frag(std::vector), "header", - fragment=SWIG_Traits_frag(bool), - fragment="StdVectorTraits") { - namespace swig { - template <> struct traits > { - typedef value_category category; - static const char* type_name() { - return "std::vector"; - } - }; - } - } - - %typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector); - - -#ifdef %swig_vector_methods_val - // Add swig/language extra methods - %swig_vector_methods_val(std::vector); -#endif - - %std_vector_methods_val(vector); - -#if defined(SWIG_STD_MODERN_STL) && !defined(SWIG_STD_NOMODERN_STL) - void flip(); -#endif - - }; - -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.R b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.R deleted file mode 100644 index 1dd8f64..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.R +++ /dev/null @@ -1,185 +0,0 @@ -#!/usr/bin/env Rscript -### Example R script for syntax highlighting - -# This is also a comment - -## Valid names -abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV0123456789._a <- NULL -.foo_ <- NULL -._foo <- NULL - -## Invalid names -0abc <- NULL -.0abc <- NULL -abc+cde <- NULL - -## Reserved Words -NA -NA_integer_ -NA_real_ -NA_character_ -NA_complex_ -NULL -NaN -Inf -## Not reserved -NULLa <- NULL -NULL1 <- NULL -NULL. <- NULL -NA_foo_ <- NULL - -## Numbers -12345678901 -123456.78901 -123e3 -123E3 -6.02e23 -1.6e-35 -1.E12 -.1234 -## integers -123L -1.23L -## imaginary numbers -123i --123i -123e4i -123e-4i -## Hex numbers -0xabcdefABCDEF01234 -0xabcp123 -0xabcP123 -## Not hex -0xg - -## Special operators %xyz% -## %xyz% -1 %% 2 -diag(2) %*% diag(2) -1 %/% 2 -1 %in% 1:10 -diag(2) %o% diag(2) -diag(2) %x% diag(2) -`%foo bar%` <- function(x, y) x + y -1 %foo bar% 2 - -## Control Structures (3.2) and Function -## if, else -if (TRUE) print("foo") else print("bar") -## For, in -for(i in 1:5) { - print(i) -} -## While, break -i <- 1 -while (TRUE) { - i <- i + 1 - if (i > 3) break -} -## Repeat -repeat {1+1} -## Switch -x <- 3 -switch(x, 2+2, mean(1:10), rnorm(5)) -## Function, dot-dot-dot, return, sum -foo <- function(...) { - return(sum(...)) -} -# Not keywords -functiona <- 2 + 2 -function. <- 2 + 2 -function1 <- 2 + 2 - - -## Grouping Tokens 10.3.7 -## Parentheses -1 + (2 + 3) -## brackets -foo <- function(a) { - a + 1 -} - -## Indexing 10.3.8 -## [] -bar <- 1:10 -bar[3] -## [[]] -foo <- list(a=1, b=2, c=3) -foo[["a"]] -## $ -foo$a -foo$"a" - -## Operators -2 - 2 -2 + 2 -2 ~ 2 -! TRUE -?"help" -1:2 -2 * 2 -2 / 2 -2^2 -2 < 2 -2 > 2 -2 == 2 -2 >= 2 -2 <= 2 -2 != 2 -TRUE & FALSE -TRUE && FALSE -TRUE | FALSE -TRUE || FALSE -foo <- 2 + 2 -foo = 2 + 2 -2 + 2 -> foo -foo <<- 2 + 2 -2 + 2 ->> foo -base:::sum -base::sum - -## Strings -foo <- "hello, world!" -foo <- 'hello, world!' -foo <- "Hello, 'world!" -foo <- 'Hello, "world!' -foo <- 'Hello, \'world!\'' -foo <- "Hello, \"world!\"" -foo <- "Hello, -world!" -foo <- 'Hello, -world!' - -## Backtick strings -`foo123 +!"bar'baz` <- 2 + 2 - -## Builtin funcitons -file.create() -gamma() -grep() -paste() -rbind() -rownames() -R.Version() -R.version.string() -sample() -sapply() -save.image() -seq() -setwd() -sin() - -## Data structures -servo <- matrix(1:25, nrow = 5) -numeric() -vector(servo) -data.frame() -list1 <- list(time = 1:40) -# multidimensional array -array(c(c(c(2,300,4),c(8,9,0)),c(c(5,60,0),c(66,7,847))), dim=c(3,2,2)) - -## Namespace -library(ggplot2) -require(plyr) -attach(cars) -source("test.R") diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.adb b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.adb deleted file mode 100644 index b79f3a5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.adb +++ /dev/null @@ -1,211 +0,0 @@ --- Model IED Simulator --- COL Gene Ressler, 1 December 2007 -with Ada.Text_IO; - -with Ada.Characters.Latin_1; -use Ada.Characters.Latin_1; - -with Ada.Strings.Fixed; -use Ada.Strings.Fixed; - -with Ada.Strings; -with Ada.Strings.Bounded; - -with Binary_Search; - -with Ada.Containers.Generic_Array_Sort; - -package body Scanner is - - Constant_123 : constant Character := Character'Val (16#00#); - MAX_KEYWORD_LENGTH_C : constant Natural := 24; - - New_Constant : constant New_Type - := 2; - - KEYWORDS_C : constant Keyword_Array_T := - (To_BS("description"), - To_BS("with")); - - procedure Blah; - - procedure blah is - begin - - Declaration: - declare - Joe : Type_Type := Random; - begin - Do_Something; - end Declaration; - Loop_ID: - loop - Loop_Do; - exit when 1=2; - end loop Loop_ID; - if True or else False then - Do_This(); - elsif not False and then True then - Do_That; - else - Panic; - end if; - end blah; - - function "*" (Left, Right : in Integer) return Integer is - begin - <> - goto Goto_Label; - return Left + Right; - end "*"; - - function Function_Specification - (Param_1 : in Blah; - Param2, param3 : in access Blah_Type := 0) - return It_Type; - - package Rename_Check renames Ada.Text_IO; - - type New_Float is delta 0.001 digits 12; - - package Package_Inst is new Ada.Strings.Bounded.Generic_Bounded_Length - (Max => MAX_KEYWORD_LENGTH_C); - - type Array_Decl12 is array (Positive range <>) of SB.Bounded_String; - type Array_Decl3 is array (New_Type range Thing_1 .. Thing_2) of SB.Bounded_String; - - type Boring_Type is - (Start, - End_Error); - - subtype Sub_Type_check is Character range '0' .. '9'; - - Initialized_Array : constant Transistion_Array_T := - (Start => - (Letter_Lower | Letter_Upper => Saw_Alpha, - ' ' | HT | CR | LF => Start, - others => Begin_Error), - - End_Error => (others => Start) - - ); - - type Recorder is record - Advance : Boolean; - Return_Token : Token_T; - end record; - - for Recorder use 8; - - type Null_Record is null record; - - type Discriminated_Record (Size : Natural) is - record - A : String (1 .. Size); - end record; - - pragma Unchecked_Union (Union); - pragma Convention (C, Union); - - type Person is tagged - record - Name : String (1 .. 10); - Gender : Gender_Type; - end record; - - type Programmer is new Person with - record - Skilled_In : Language_List; - Favorite_Langauge : Python_Type; - end record; - - type Programmer is new Person - and Printable - with - record - Skilled_In : Language_List; - Blah : aliased Integer; - end record; - - --------------------- - -- Scan_Next_Token -- - --------------------- - - task Cyclic_Buffer_Task_Type is - entry Insert (An_Item : in Item); - entry Remove (An_Item : out Item); - end Cyclic_Buffer_Task_Type; - - task body Cyclic_Buffer_Task_Type is - Q_Size : constant := 100; - subtype Q_Range is Positive range 1 .. Q_Size; - Length : Natural range 0 .. Q_Size := 0; - Head, Tail : Q_Range := 1; - Data : array (Q_Range) of Item; - begin - loop - select - when Length < Q_Size => - accept Insert (An_Item : in Item) do - Data(Tail) := An_Item; - end Insert; - Tail := Tail mod Q_Size + 1; - Length := Length + 1; - or - when Length > 0 => - accept Remove (An_Item : out Item) do - An_Item := Data(Head); - end Remove; - Head := Head mod Q_Size + 1; - Length := Length - 1; - end select; - end loop; - end Cyclic_Buffer_Task_Type; - - - - procedure Scan_Next_Token - (S : in String; - Start_Index : out Positive; - End_Index : in out Natural; -- Tricky comment - Line_Number : in out Positive; - Token : out Token_T); - - procedure Scan_Next_Token - (S : in String; - Start_Index : out Positive; - End_Index : in out Natural; -- Another comment - Line_Number : in out Positive; - Token : out Token_T) - is - begin - Scanner_Loop: - loop - if New_State = End_Error then - exit Scanner_Loop; - end if; - - if State = Start and New_State /= Start then - Start_Index := Peek_Index; - end if; - end loop Scanner_Loop; - end Scan_Next_Token; - - procedure Advance is - begin - Peek_Index := Peek_Index + 1; - end Advance; - - - -- Eliminate the leading space that Ada puts in front of positive - -- integer images. - function Image(N : in Integer) return String is - S : String := Integer'Image(N); - begin - if S(1) = ' ' then - return S(2 .. S'Last); - end if; - return S; - end Image; - -end Scanner; diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.agda b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.agda deleted file mode 100644 index d930a77..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.agda +++ /dev/null @@ -1,102 +0,0 @@ --- An Agda example file - -module test where - -open import Coinduction -open import Data.Bool -open import {- pointless comment between import and module name -} Data.Char -open import Data.Nat -open import Data.Nat.Properties -open import Data.String -open import Data.List hiding ([_]) -open import Data.Vec hiding ([_]) -open import Relation.Nullary.Core -open import Relation.Binary.PropositionalEquality using (_≡_; refl; cong; trans; inspect; [_]) - -open SemiringSolver - -{- this is a {- nested -} comment -} - --- Factorial -_! : â„• → â„• -0 ! = 1 -(suc n) ! = (suc n) * n ! - --- The binomial coefficient -_choose_ : â„• → â„• → â„• -_ choose 0 = 1 -0 choose _ = 0 -(suc n) choose (suc m) = (n choose m) + (n choose (suc m)) -- Pascal's rule - -choose-too-many : ∀ n m → n ≤ m → n choose (suc m) ≡ 0 -choose-too-many .0 m z≤n = refl -choose-too-many (suc n) (suc m) (s≤s le) with n choose (suc m) | choose-too-many n m le | n choose (suc (suc m)) | choose-too-many n (suc m) (≤-step le) -... | .0 | refl | .0 | refl = refl - -_++'_ : ∀ {a n m} {A : Set a} → Vec A n → Vec A m → Vec A (m + n) -_++'_ {_} {n} {m} vâ‚ vâ‚‚ rewrite solve 2 (λ a b → b :+ a := a :+ b) refl n m = vâ‚ Data.Vec.++ vâ‚‚ - -++'-test : (1 ∷ 2 ∷ 3 ∷ []) ++' (4 ∷ 5 ∷ []) ≡ (1 ∷ 2 ∷ 3 ∷ 4 ∷ 5 ∷ []) -++'-test = refl - -data Coâ„• : Set where - co0 : Coâ„• - cosuc : ∞ Coâ„• → Coâ„• - -nanana : Coâ„• -nanana = let two = ♯ cosuc (♯ (cosuc (♯ co0))) in cosuc two - -abstract - data VacuumCleaner : Set where - Roomba : VacuumCleaner - -pointlessLemmaAboutBoolFunctions : (f : Bool → Bool) → f (f (f true)) ≡ f true -pointlessLemmaAboutBoolFunctions f with f true | inspect f true -... | true | [ eqâ‚ ] = trans (cong f eqâ‚) eqâ‚ -... | false | [ eqâ‚ ] with f false | inspect f false -... | true | _ = eqâ‚ -... | false | [ eqâ‚‚ ] = eqâ‚‚ - -mutual - isEven : â„• → Bool - isEven 0 = true - isEven (suc n) = not (isOdd n) - - isOdd : â„• → Bool - isOdd 0 = false - isOdd (suc n) = not (isEven n) - -foo : String -foo = "Hello World!" - -nl : Char -nl = '\n' - -private - intersperseString : Char → List String → String - intersperseString c [] = "" - intersperseString c (x ∷ xs) = Data.List.foldl (λ a b → a Data.String.++ Data.String.fromList (c ∷ []) Data.String.++ b) x xs - -baz : String -baz = intersperseString nl (Data.List.replicate 5 foo) - -postulate - Float : Set - -{-# BUILTIN FLOAT Float #-} - -pi : Float -pi = 3.141593 - --- Astronomical unit -au : Float -au = 1.496e11 -- m - -plusFloat : Float → Float → Float -plusFloat a b = {! !} - -record Subset (A : Set) (P : A → Set) : Set where - constructor _#_ - field - elem : A - .proof : P elem diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.apl b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.apl deleted file mode 100644 index 26ecf97..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.apl +++ /dev/null @@ -1,26 +0,0 @@ -∇ Râ†M COMBIN N;D;E;F;G;P - â Returns a matrix of every possible - â combination of M elements from the - â vector â³N. That is, returns a - â matrix with M!N rows and N columns. - â - Eâ†(â³Pâ†N-Râ†M-1)-⎕IO - Dâ†R+â³P - Râ†(P,1)â´D - Pâ†Pâ´1 - L1:→(⎕IO>1↑Dâ†D-1)â´0 - Pâ†+\P - Gâ†+\¯1↓0,Fâ†âŒ½P - Eâ†F/E-G - Râ†(F/D),R[E+â³â´E;] - Eâ†G - →L1 -∇ - -∇ Râ†M QUICKEXP N - â Matrix exponentiation - B ↠⌊ 1 + 2 ⟠N - V ↠(B â´ 2) ⊤ N - L ↠⊂ M - R ↠⊃ +.× / V / L ⊣ { L ↠(⊂ A +.× A ↠↑L) , L }¨ â³ B-1 -∇ diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.asy b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.asy deleted file mode 100644 index cfcc3d0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.asy +++ /dev/null @@ -1,131 +0,0 @@ -// example file for roundedpath() in roundedpath.asy -// written by stefan knorr - - -// import needed packages -import roundedpath; - -// function definition -picture CreateKOOS(real Scale, string legend) // draw labeled coordinate system as picture -{ - picture ReturnPic; - real S = 1.2*Scale; - draw(ReturnPic, ((-S,0)--(S,0)), bar = EndArrow); // x axis - draw(ReturnPic, ((0,-S)--(0,S)), bar = EndArrow); // y axis - label(ReturnPic, "$\varepsilon$", (S,0), SW); // x axis label - label(ReturnPic, "$\sigma$", (0,S), SW); // y axis label - label(ReturnPic, legend, (0.7S, -S), NW); // add label 'legend' - return ReturnPic; // return picture -} - - -// some global definitions -real S = 13mm; // universal scale factor for the whole file -real grad = 0.25; // gradient for lines -real radius = 0.04; // radius for the rounded path' -real lw = 2; // linewidth -pair A = (-1, -1); // start point for graphs -pair E = ( 1, 1); // end point for graphs -path graph; // local graph -pen ActPen; // actual pen for each drawing -picture T[]; // vector of all four diagrams -real inc = 2.8; // increment-offset for combining pictures - -//////////////////////////////////////// 1st diagram -T[1] = CreateKOOS(S, "$T_1$"); // initialise T[1] as empty diagram with label $T_1$ -graph = A; // # pointwise definition of current path 'graph' -graph = graph -- (A.x + grad*1.6, A.y + 1.6); // # -graph = graph -- (E.x - grad*0.4, E.y - 0.4); // # -graph = graph -- E; // # - -graph = roundedpath(graph, radius, S); // round edges of 'graph' using roundedpath() in roundedpath.asy -ActPen = rgb(0,0,0.6) + linewidth(lw); // define pen for drawing in 1st diagram -draw(T[1], graph, ActPen); // draw 'graph' with 'ActPen' into 'T[1]' (1st hysteresis branch) -draw(T[1], rotate(180,(0,0))*graph, ActPen); // draw rotated 'graph' (2nd hysteresis branch) - -graph = (0,0) -- (grad*0.6, 0.6) -- ( (grad*0.6, 0.6) + (0.1, 0) ); // define branch from origin to hysteresis -graph = roundedpath(graph, radius, S); // round this path -draw(T[1], graph, ActPen); // draw this path into 'T[1]' - - -//////////////////////////////////////// 2nd diagram -T[2] = CreateKOOS(S, "$T_2$"); // initialise T[2] as empty diagram with label $T_2$ -graph = A; // # pointwise definition of current path 'graph' -graph = graph -- (A.x + grad*1.3, A.y + 1.3); // # -graph = graph -- (E.x - grad*0.7 , E.y - 0.7); // # -graph = graph -- E; // # - -graph = roundedpath(graph, radius, S); // round edges of 'graph' using roundedpath() in roundedpath.asy -ActPen = rgb(0.2,0,0.4) + linewidth(lw); // define pen for drawing in 2nd diagram -draw(T[2], graph, ActPen); // draw 'graph' with 'ActPen' into 'T[2]' (1st hysteresis branch) -draw(T[2], rotate(180,(0,0))*graph, ActPen); // draw rotated 'graph' (2nd hysteresis branch) - -graph = (0,0) -- (grad*0.3, 0.3) -- ( (grad*0.3, 0.3) + (0.1, 0) ); // define branch from origin to hysteresis -graph = roundedpath(graph, radius, S); // round this path -draw(T[2], graph, ActPen); // draw this path into 'T[2]' - - -//////////////////////////////////////// 3rd diagram -T[3] = CreateKOOS(S, "$T_3$"); // initialise T[3] as empty diagram with label $T_3$ -graph = A; // # pointwise definition of current path 'graph' -graph = graph -- (A.x + grad*0.7, A.y + 0.7); // # -graph = graph -- ( - grad*0.3 , - 0.3); // # -graph = graph -- (0,0); // # -graph = graph -- (grad*0.6, 0.6); // # -graph = graph -- (E.x - grad*0.4, E.y - 0.4); // # -graph = graph -- E; // # - -graph = roundedpath(graph, radius, S); // round edges of 'graph' using roundedpath() in roundedpath.asy -ActPen = rgb(0.6,0,0.2) + linewidth(lw); // define pen for drawing in 3rd diagram -draw(T[3], graph, ActPen); // draw 'graph' with 'ActPen' into 'T[3]' (1st hysteresis branch) -draw(T[3], rotate(180,(0,0))*graph, ActPen); // draw rotated 'graph' (2nd hysteresis branch) - - -//////////////////////////////////////// 4th diagram -T[4] = CreateKOOS(S, "$T_4$"); // initialise T[4] as empty diagram with label $T_4$ -graph = A; // # pointwise definition of current path 'graph' -graph = graph -- (A.x + grad*0.4, A.y + 0.4); // # -graph = graph -- ( - grad*0.6 , - 0.6); // # -graph = graph -- (0,0); // # -graph = graph -- (grad*0.9, 0.9); // # -graph = graph -- (E.x - grad*0.1, E.y - 0.1); // # -graph = graph -- E; // # - -graph = roundedpath(graph, radius, S); // round edges of 'graph' using roundedpath() in roundedpath.asy -ActPen = rgb(0.6,0,0) + linewidth(lw); // define pen for drawing in 4th diagram -draw(T[4], graph, ActPen); // draw 'graph' with 'ActPen' into 'T[4]' (1st hysteresis branch) -draw(T[4], rotate(180,(0,0))*graph, ActPen); // draw rotated 'graph' (3nd hysteresis branch) - - -// add some labels and black dots to the first two pictures -pair SWW = (-0.8, -0.6); -label(T[1], "$\sigma_f$", (0, 0.6S), NE); // sigma_f -draw(T[1], (0, 0.6S), linewidth(3) + black); -label(T[2], "$\sigma_f$", (0, 0.3S), NE); // sigma_f -draw(T[2], (0, 0.3S), linewidth(3) + black); -label(T[1], "$\varepsilon_p$", (0.7S, 0), SWW); // epsilon_p -draw(T[1], (0.75S, 0), linewidth(3) + black); -label(T[2], "$\varepsilon_p$", (0.7S, 0), SWW); // epsilon_p -draw(T[2], (0.75S, 0), linewidth(3) + black); - - -// add all pictures T[1...4] to the current one -add(T[1],(0,0)); -add(T[2],(1*inc*S,0)); -add(T[3],(2*inc*S,0)); -add(T[4],(3*inc*S,0)); - - -// draw line of constant \sigma and all intersection points with the graphs in T[1...4] -ActPen = linewidth(1) + dashed + gray(0.5); // pen definition -draw((-S, 0.45*S)--((3*inc+1)*S, 0.45*S), ActPen); // draw backgoundline -label("$\sigma_s$", (-S, 0.45S), W); // label 'sigma_s' - -path mark = scale(2)*unitcircle; // define mark-symbol to be used for intersections -ActPen = linewidth(1) + gray(0.5); // define pen for intersection mark -draw(shift(( 1 - grad*0.55 + 0*inc)*S, 0.45*S)*mark, ActPen); // # draw all intersections -draw(shift((-1 + grad*1.45 + 0*inc)*S, 0.45*S)*mark, ActPen); // # -draw(shift(( 1 - grad*0.55 + 1*inc)*S, 0.45*S)*mark, ActPen); // # -draw(shift(( 1 - grad*0.55 + 2*inc)*S, 0.45*S)*mark, ActPen); // # -draw(shift(( grad*0.45 + 2*inc)*S, 0.45*S)*mark, ActPen); // # -draw(shift(( grad*0.45 + 3*inc)*S, 0.45*S)*mark, ActPen); // # diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.awk b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.awk deleted file mode 100644 index 9f0e3ec..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.awk +++ /dev/null @@ -1,121 +0,0 @@ -#!/bin/awk -f - -BEGIN { - # It is not possible to define output file names here because - # FILENAME is not define in the BEGIN section - n = ""; - printf "Generating data files ..."; - network_max_bandwidth_in_byte = 10000000; - network_max_packet_per_second = 1000000; - last3 = 0; - last4 = 0; - last5 = 0; - last6 = 0; -} -{ - if ($1 ~ /Average/) - { # Skip the Average values - n = ""; - next; - } - - if ($2 ~ /all/) - { # This is the cpu info - print $3 > FILENAME".cpu.user.dat"; -# print $4 > FILENAME".cpu.nice.dat"; - print $5 > FILENAME".cpu.system.dat"; -# print $6 > FILENAME".cpu.iowait.dat"; - print $7 > FILENAME".cpu.idle.dat"; - print 100-$7 > FILENAME".cpu.busy.dat"; - } - if ($2 ~ /eth0/) - { # This is the eth0 network info - if ($3 > network_max_packet_per_second) - print last3 > FILENAME".net.rxpck.dat"; # Total number of packets received per second. - else - { - last3 = $3; - print $3 > FILENAME".net.rxpck.dat"; # Total number of packets received per second. - } - if ($4 > network_max_packet_per_second) - print last4 > FILENAME".net.txpck.dat"; # Total number of packets transmitted per second. - else - { - last4 = $4; - print $4 > FILENAME".net.txpck.dat"; # Total number of packets transmitted per second. - } - if ($5 > network_max_bandwidth_in_byte) - print last5 > FILENAME".net.rxbyt.dat"; # Total number of bytes received per second. - else - { - last5 = $5; - print $5 > FILENAME".net.rxbyt.dat"; # Total number of bytes received per second. - } - if ($6 > network_max_bandwidth_in_byte) - print last6 > FILENAME".net.txbyt.dat"; # Total number of bytes transmitted per second. - else - { - last6 = $6; - print $6 > FILENAME".net.txbyt.dat"; # Total number of bytes transmitted per second. - } -# print $7 > FILENAME".net.rxcmp.dat"; # Number of compressed packets received per second (for cslip etc.). -# print $8 > FILENAME".net.txcmp.dat"; # Number of compressed packets transmitted per second. -# print $9 > FILENAME".net.rxmcst.dat"; # Number of multicast packets received per second. - } - - # Detect which is the next info to be parsed - if ($2 ~ /proc|cswch|tps|kbmemfree|totsck/) - { - n = $2; - } - - # Only get lines with numbers (real data !) - if ($2 ~ /[0-9]/) - { - if (n == "proc/s") - { # This is the proc/s info - print $2 > FILENAME".proc.dat"; -# n = ""; - } - if (n == "cswch/s") - { # This is the context switches per second info - print $2 > FILENAME".ctxsw.dat"; -# n = ""; - } - if (n == "tps") - { # This is the disk info - print $2 > FILENAME".disk.tps.dat"; # total transfers per second - print $3 > FILENAME".disk.rtps.dat"; # read requests per second - print $4 > FILENAME".disk.wtps.dat"; # write requests per second - print $5 > FILENAME".disk.brdps.dat"; # block reads per second - print $6 > FILENAME".disk.bwrps.dat"; # block writes per second -# n = ""; - } - if (n == "kbmemfree") - { # This is the mem info - print $2 > FILENAME".mem.kbmemfree.dat"; # Amount of free memory available in kilobytes. - print $3 > FILENAME".mem.kbmemused.dat"; # Amount of used memory in kilobytes. This does not take into account memory used by the kernel itself. - print $4 > FILENAME".mem.memused.dat"; # Percentage of used memory. -# It appears the kbmemshrd has been removed from the sysstat output - ntolia -# print $X > FILENAME".mem.kbmemshrd.dat"; # Amount of memory shared by the system in kilobytes. Always zero with 2.4 kernels. -# print $5 > FILENAME".mem.kbbuffers.dat"; # Amount of memory used as buffers by the kernel in kilobytes. - print $6 > FILENAME".mem.kbcached.dat"; # Amount of memory used to cache data by the kernel in kilobytes. -# print $7 > FILENAME".mem.kbswpfree.dat"; # Amount of free swap space in kilobytes. -# print $8 > FILENAME".mem.kbswpused.dat"; # Amount of used swap space in kilobytes. - print $9 > FILENAME".mem.swpused.dat"; # Percentage of used swap space. -# n = ""; - } - if (n == "totsck") - { # This is the socket info - print $2 > FILENAME".sock.totsck.dat"; # Total number of used sockets. - print $3 > FILENAME".sock.tcpsck.dat"; # Number of TCP sockets currently in use. -# print $4 > FILENAME".sock.udpsck.dat"; # Number of UDP sockets currently in use. -# print $5 > FILENAME".sock.rawsck.dat"; # Number of RAW sockets currently in use. -# print $6 > FILENAME".sock.ip-frag.dat"; # Number of IP fragments currently in use. -# n = ""; - } - } -} -END { - print " '" FILENAME "' done."; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.bb b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.bb deleted file mode 100644 index 026ef22..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.bb +++ /dev/null @@ -1,95 +0,0 @@ - -;foobar! - -;Include "blurg/blurg.bb" - -Const ca = $10000000 ; Hex -Const cb = %10101010 ; Binary -Global ga$ = "blargh" -Local a = 124, b$ = "abcdef" - -Function name_123#(zorp$, ll = False, blah#, waffles% = 100) - Return 235.7804 ; comment -End Function -Function TestString$() -End Function - -Function hub(blah$, abc = Pi) -End Function -Function Blar%() - Local aa %, ab # ,ac #, ad# ,ae$,af% ; Intentional mangling - Local ba#, bb.TBlarf , bc%,bd#,be. TFooBar,ff = True -End Function - -abc() - -Function abc() - Print "abc" ; I cannot find a way to parse these as function calls without messing something up - Print ; Anyhow, they're generally not used in this way - Goto Eww_Goto - .Eww_Goto -End Function - -Type TBlarf -End Type - -Type TFooBar -End Type - -Local myinst.MyClass = New MyClass -TestMethod(myinst) - -Type MyClass - - Field m_foo.MyClass - Field m_bar.MyClass - -; abc -; def -End Type - -Function TestMethod(self.MyClass) ; foobar - self\m_foo = self - self\m_bar = Object.MyClass(Handle self\m_foo) - Yell self\m_foo\m_bar\m_foo\m_bar -End Function - -Function Yell(self.MyClass) - Print("huzzah!") -End Function - -Function Wakka$(foo$) - Return foo + "bar" -End Function - - -Print("blah " + "blah " + "blah.") - -Local i : For i = 0 To 10 Step 1 - Print("Index: " + i) -Next -Local array$[5] -array[0] = "foo": array[1] = "bar":array[2] = "11":array[3] = "22":array[4] = "33" -For i = 0 To 4 - Local value$ = array[i] - Print("Value: " + value) -Next - -Local foobar = Not (1 Or (2 And (4 Shl 5 Shr 6)) Sar 7) Mod (8+2) -Local az = 1234567890 -az = az + 1 -az = az - 2 -az = az* 3 -az = az/ 4 -az = az And 5 -az = az Or 6 -az= ~ 7 -az = az Shl 8 -az= az Shr 9 -az = az Sar 10 -az = az Mod 11 -az = ((10-5+2/4*2)>(((8^2)) < 2)) And 12 Or 2 - - -;~IDEal Editor Parameters: -;~C#Blitz3D \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.bmx b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.bmx deleted file mode 100644 index 17b9ada..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.bmx +++ /dev/null @@ -1,145 +0,0 @@ - -Rem -foobar -EndRem - -Rem - foobar! -End Rem - -Rem -End Rem - -SuperStrict - -Framework brl.blitz -Import brl.standardio - -'Import "blah.bmx" -'Import "blah/blah.bmx" -'Include "blurg/blurg.bmx" - -Const ca:Long = $10000000 ' Hex -Const cb:Int = %10101010 ' Binary -Global ga:String = "blargh" -Local a:Int = 124, b$ = "abcdef" -?Not Debug -Print(_name123(ga, a, 100.2)) -? - -Function _name123 : Float (zorp:String, ll:Int = False, blah#, waffles% = 100) - Return 235.7804 ' Single-line comment -End Function -Function TestString:String() -End Function -Function TestByte:Byte() -End Function - -Function hub(blah:String, .. - abc:Int = Pi) -End Function -Function Blar%() - Local aa !, ab @ ,ac @@, ad# ,ae$,af% ' Intentional mangling - Local ba:Double, bb :Byte, bc: Short,bd:Float,be: String,ff:Int = True -End Function - -?Win32 -abc() -?Linux -abc() -? - -Function abc() - Print "abc" ' I cannot find a way to parse these as function calls without messing something up - Print ' Anyhow, they're generally not used in this way - Goto Eww_Goto - #Eww_Goto -End Function - -Type TBlarf Abstract -End Type - -Type TFooBar -End Type - -New MyClass.TestMethod() -New(MyClass).TestMethod() -Local myinst:MyClass = New MyClass -myinst.TestMethod() - -Type MyClass Extends TFooBar - - Field m_foo:MyClass - Field m_bar:MyClass - - Rem - abc - def - End Rem - Method New() - Rem - abcdef - endrem - End Method - - Method TestMethod() ' foobar - m_foo = Self - m_bar = MyClass(m_foo) - m_foo.m_bar.m_foo.m_bar.Yell() - End Method - - Method Yell() - Print("huzzah!") - End Method - - Function Wakka$(foo:String) - Return foo + "bar" - End Function - -End Type - -Extern "c" - Function vesper!(a:Int) = "vesper@4" - Function bubbles@@(a%) -End Extern - -Print("blah " + .. - "blah " + .. - "blah.") - -Try - Throw("blar!") -Catch exception:String - Print("Caught: " + exception) -End Try - -For Local i:Int = 0 To 10 Step 1 - Print("Index: " + i) -Next -Local array:String[] = ["foo", "bar", "11", "22", "33"] -For Local value:String = EachIn array - Print("Value: " + value) -Next - -Local foobar:Int = Not (1 Or (2 And (4 Shl 5 Shr 6)) Sar 7) Mod (8+2) -Local az:Int = 1234567890 -az : + 1 -az: - 2 -az :* 3 -az:/ 4 -az:& 5 -az:| 6 -az: ~ 7 -az : Shl 8 -az: Shr 9 -az :Sar 10 -az:Mod 11 -az = ((10-5+2/4*2)>(((8^2)) < 2)) & 12|2 - -Function flub(fah Ptr, eah:Int Ptr, blu@@ Ptr) -End Function -Function Foob:Int Ptr(blar:Byte Ptr, Saffon@Ptr, blaus#Ptr) -End Function -Function zauus@Ptr() -End Function - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.boo b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.boo deleted file mode 100644 index d6107aa..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.boo +++ /dev/null @@ -1,39 +0,0 @@ -import System -import Boo.Lang.Interpreter from Boo.Lang.Interpreter - -class ObjectInterpreter(AbstractInterpreter): - - _context as object - - [getter(Value)] - _value as object - - def constructor(context): - _context = context - self.RememberLastValue = true - - override def Lookup(name as string): - property = _context.GetType().GetProperty(name) - return property.PropertyType if property is not null - - override def GetValue(name as string): - return _context.GetType().GetProperty(name).GetValue( - _context, null) - - override def SetLastValue(value): - _value = value - - override def SetValue(name as string, value): - raise InvalidOperationException() - - override def Declare(name as string, type as Type): - raise InvalidOperationException() - -class Person: - [property(FirstName)] - _fname as string = "" - -p = Person(FirstName: "Homer") -i = ObjectInterpreter(p) -i.Eval('"Hello, ${FirstName.ToUpper()}!"') -print i.Value diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.bro b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.bro deleted file mode 100644 index 9a1b42d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.bro +++ /dev/null @@ -1,250 +0,0 @@ -@load notice -@load utils/thresholds - -module SSH; - -export { - redef enum Log::ID += { SSH }; - - redef enum Notice::Type += { - Login, - Password_Guessing, - Login_By_Password_Guesser, - Login_From_Interesting_Hostname, - Bytecount_Inconsistency, - }; - - type Info: record { - ts: time &log; - uid: string &log; - id: conn_id &log; - status: string &log &optional; - direction: string &log &optional; - remote_location: geo_location &log &optional; - client: string &log &optional; - server: string &log &optional; - resp_size: count &log &default=0; - - ## Indicate if the SSH session is done being watched. - done: bool &default=F; - }; - - const password_guesses_limit = 30 &redef; - - # The size in bytes at which the SSH connection is presumed to be - # successful. - const authentication_data_size = 5500 &redef; - - # The amount of time to remember presumed non-successful logins to build - # model of a password guesser. - const guessing_timeout = 30 mins &redef; - - # The set of countries for which you'd like to throw notices upon successful login - # requires Bro compiled with libGeoIP support - const watched_countries: set[string] = {"RO"} &redef; - - # Strange/bad host names to originate successful SSH logins - const interesting_hostnames = - /^d?ns[0-9]*\./ | - /^smtp[0-9]*\./ | - /^mail[0-9]*\./ | - /^pop[0-9]*\./ | - /^imap[0-9]*\./ | - /^www[0-9]*\./ | - /^ftp[0-9]*\./ &redef; - - # This is a table with orig subnet as the key, and subnet as the value. - const ignore_guessers: table[subnet] of subnet &redef; - - # If true, we tell the event engine to not look at further data - # packets after the initial SSH handshake. Helps with performance - # (especially with large file transfers) but precludes some - # kinds of analyses (e.g., tracking connection size). - const skip_processing_after_detection = F &redef; - - # Keeps count of how many rejections a host has had - global password_rejections: table[addr] of TrackCount - &write_expire=guessing_timeout - &synchronized; - - # Keeps track of hosts identified as guessing passwords - # TODO: guessing_timeout doesn't work correctly here. If a user redefs - # the variable, it won't take effect. - global password_guessers: set[addr] &read_expire=guessing_timeout+1hr &synchronized; - - global log_ssh: event(rec: Info); -} - -# Configure DPD and the packet filter -redef capture_filters += { ["ssh"] = "tcp port 22" }; -redef dpd_config += { [ANALYZER_SSH] = [$ports = set(22/tcp)] }; - -redef record connection += { - ssh: Info &optional; -}; - -event bro_init() -{ - Log::create_stream(SSH, [$columns=Info, $ev=log_ssh]); -} - -function set_session(c: connection) - { - if ( ! c?$ssh ) - { - local info: Info; - info$ts=network_time(); - info$uid=c$uid; - info$id=c$id; - c$ssh = info; - } - } - -function check_ssh_connection(c: connection, done: bool) - { - # If done watching this connection, just return. - if ( c$ssh$done ) - return; - - # If this is still a live connection and the byte count has not - # crossed the threshold, just return and let the resheduled check happen later. - if ( !done && c$resp$size < authentication_data_size ) - return; - - # Make sure the server has sent back more than 50 bytes to filter out - # hosts that are just port scanning. Nothing is ever logged if the server - # doesn't send back at least 50 bytes. - if ( c$resp$size < 50 ) - return; - - local status = "failure"; - local direction = Site::is_local_addr(c$id$orig_h) ? "to" : "from"; - local location: geo_location; - location = (direction == "to") ? lookup_location(c$id$resp_h) : lookup_location(c$id$orig_h); - - if ( done && c$resp$size < authentication_data_size ) - { - # presumed failure - if ( c$id$orig_h !in password_rejections ) - password_rejections[c$id$orig_h] = new_track_count(); - - # Track the number of rejections - if ( !(c$id$orig_h in ignore_guessers && - c$id$resp_h in ignore_guessers[c$id$orig_h]) ) - ++password_rejections[c$id$orig_h]$n; - - if ( default_check_threshold(password_rejections[c$id$orig_h]) ) - { - add password_guessers[c$id$orig_h]; - NOTICE([$note=Password_Guessing, - $conn=c, - $msg=fmt("SSH password guessing by %s", c$id$orig_h), - $sub=fmt("%d failed logins", password_rejections[c$id$orig_h]$n), - $n=password_rejections[c$id$orig_h]$n]); - } - } - # TODO: This is to work around a quasi-bug in Bro which occasionally - # causes the byte count to be oversized. - # Watch for Gregors work that adds an actual counter of bytes transferred. - else if ( c$resp$size < 20000000 ) - { - # presumed successful login - status = "success"; - c$ssh$done = T; - - if ( c$id$orig_h in password_rejections && - password_rejections[c$id$orig_h]$n > password_guesses_limit && - c$id$orig_h !in password_guessers ) - { - add password_guessers[c$id$orig_h]; - NOTICE([$note=Login_By_Password_Guesser, - $conn=c, - $n=password_rejections[c$id$orig_h]$n, - $msg=fmt("Successful SSH login by password guesser %s", c$id$orig_h), - $sub=fmt("%d failed logins", password_rejections[c$id$orig_h]$n)]); - } - - local message = fmt("SSH login %s %s \"%s\" \"%s\" %f %f %s (triggered with %d bytes)", - direction, location$country_code, location$region, location$city, - location$latitude, location$longitude, - id_string(c$id), c$resp$size); - NOTICE([$note=Login, - $conn=c, - $msg=message, - $sub=location$country_code]); - - # Check to see if this login came from an interesting hostname - when ( local hostname = lookup_addr(c$id$orig_h) ) - { - if ( interesting_hostnames in hostname ) - { - NOTICE([$note=Login_From_Interesting_Hostname, - $conn=c, - $msg=fmt("Strange login from %s", hostname), - $sub=hostname]); - } - } - - if ( location$country_code in watched_countries ) - { - - } - - } - else if ( c$resp$size >= 200000000 ) - { - NOTICE([$note=Bytecount_Inconsistency, - $conn=c, - $msg="During byte counting in SSH analysis, an overly large value was seen.", - $sub=fmt("%d",c$resp$size)]); - } - - c$ssh$remote_location = location; - c$ssh$status = status; - c$ssh$direction = direction; - c$ssh$resp_size = c$resp$size; - - Log::write(SSH, c$ssh); - - # Set the "done" flag to prevent the watching event from rescheduling - # after detection is done. - c$ssh$done; - - # Stop watching this connection, we don't care about it anymore. - if ( skip_processing_after_detection ) - { - skip_further_processing(c$id); - set_record_packets(c$id, F); - } - } - -event connection_state_remove(c: connection) &priority=-5 - { - if ( c?$ssh ) - check_ssh_connection(c, T); - } - -event ssh_watcher(c: connection) - { - local id = c$id; - # don't go any further if this connection is gone already! - if ( !connection_exists(id) ) - return; - - check_ssh_connection(c, F); - if ( ! c$ssh$done ) - schedule +15secs { ssh_watcher(c) }; - } - -event ssh_server_version(c: connection, version: string) &priority=5 - { - set_session(c); - c$ssh$server = version; - } - -event ssh_client_version(c: connection, version: string) &priority=5 - { - set_session(c); - c$ssh$client = version; - schedule +15secs { ssh_watcher(c) }; - } diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.cs b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.cs deleted file mode 100644 index faab7e4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.cs +++ /dev/null @@ -1,374 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// // -// MIT X11 license, Copyright (c) 2005-2006 by: // -// // -// Authors: // -// Michael Dominic K. // -// // -// Permission is hereby granted, free of charge, to any person obtaining a // -// copy of this software and associated documentation files (the "Software"), // -// to deal in the Software without restriction, including without limitation // -// the rights to use, copy, modify, merge, publish, distribute, sublicense, // -// and/or sell copies of the Software, and to permit persons to whom the // -// Software is furnished to do so, subject to the following conditions: // -// // -// The above copyright notice and this permission notice shall be included // -// in all copies or substantial portions of the Software. // -// // -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN // -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR // -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // -// USE OR OTHER DEALINGS IN THE SOFTWARE. // -// // -//////////////////////////////////////////////////////////////////////////////// - -namespace Diva.Core { - - using System; - using Widgets; - using System.Xml; - using Util; - using System.Collections.Generic; - using System.Collections; - using Basics; - - public class OpenerTask : Task, IBoilProvider { - - // Private structs //////////////////////////////////////////// - - struct ObjectInfo { - - public ObjectContainer Container; - public int[] Depends; - public string SystemType; - public int RefId; - - /* CONSTRUCTOR */ - public ObjectInfo (ObjectContainer container) - { - Container = container; - Depends = container.Depends.ToArray (); - SystemType = container.SystemType; - RefId = container.RefId; - } - - public override string ToString () - { - return String.Format ("Type: {0} Deps count: {1} Id: {2}", - SystemType, Depends.Length, RefId); - } - - public bool IsUnBoilable (IBoilProvider provider) - { - if (Depends.Length == 0) - return true; - - foreach (int id in Depends) - if (! (provider.Contains (id))) - return false; - - return true; - } - - } - - // Enums ////////////////////////////////////////////////////// - - enum OpenerTaskStep { Init, Header, ProjectInfoRead, ObjectListRead, - ObjectListParse, ObjectListUnBoil, FindRoots, - Finished }; - - // Fields ///////////////////////////////////////////////////// - - string fileName; // Filename we're reading - XmlDocument xmlDocument; // Our document - //XmlNode projectInfoNode; // node - IEnumerator objectsEnumerator; // Enumerator - List objectsList; // Objects list - ObjectListContainer objectListContainer; - OpenerTaskStep currentStep; // Our current step - - Dictionary idToObject; // Id -> object - Dictionary objectToId; // Object -> Id - - string projectName = String.Empty; - string projectDirectory = String.Empty; - TagList projectTagList; - StuffList projectStuffList; - TrackList projectTrackList; - ClipList projectClipList; - MediaItemList projectMediaItemList; - Commander projectCommander; - Gdv.Pipeline projectPipeline; - Gdv.ProjectFormat projectFormat; - - // Properties ///////////////////////////////////////////////// - - public string ProjectName { - get { return projectName; } - } - - public string ProjectDirectory { - get { return projectDirectory; } - } - - public TagList ProjectTagList { - get { return projectTagList; } - } - - public StuffList ProjectStuffList { - get { return projectStuffList; } - } - - public TrackList ProjectTrackList { - get { return projectTrackList; } - } - - public ClipList ProjectClipList { - get { return projectClipList; } - } - - public MediaItemList ProjectMediaItemList { - get { return projectMediaItemList; } - } - - public Commander ProjectCommander { - get { return projectCommander; } - } - - public Gdv.Pipeline ProjectPipeline { - get { return projectPipeline; } - } - - public Gdv.ProjectFormat ProjectFormat { - get { return projectFormat; } - } - - // Public methods ///////////////////////////////////////////// - - /* CONSTRUCTOR */ - public OpenerTask (string fileName) - { - this.fileName = fileName; - var verbatimString = @"c:\test\"; - - var verbatimStringWithNewline = @"test \\ \n \t \r -a -b -c"; - var verbatimStringWithEscapedQuotes = @"He said -""she says \"" is not an escaped character in verbatimstrings"" -"; - - int[] numbers = { 5,6,4,2,4,6,8,9,7,0 }; - var linqExample = from n in numbers - where n > 5 - select n; - - var anotherlinqExample = from n in numbers - orderby n descending - select n; - - int[] someMoreNumbers = { 8,2,17,34,8,9,9,5,3,4,2,1,5 }; - var moreLinq = from n in numbers - join mn in moreNumbers on n equals mn + 2 - select new {n, mn}; - } - - public override void Reset () - { - objectToId = new Dictionary (); - idToObject = new Dictionary (); - - xmlDocument = null; - //projectInfoNode = null; - - currentStep = OpenerTaskStep.Init; - - base.Reset (); - } - - public int GetIdForObject (object o) - { - return objectToId [o]; - } - - public object GetObjectForId (int id) - { - return idToObject [id]; - } - - public bool Contains (int id) - { - return idToObject.ContainsKey (id); - } - - // Private methods //////////////////////////////////////////// - - protected override TaskStatus ExecuteStep (int s) - { - bool cont = true; - - // Main - switch (currentStep) { - - case OpenerTaskStep.Init: - objectsList = new List (); - xmlDocument = new XmlDocument (); - xmlDocument.Load (fileName); - currentStep = OpenerTaskStep.Header; - break; - - case OpenerTaskStep.Header: - //ReadHeader (); - currentStep = OpenerTaskStep.ProjectInfoRead; - break; - - case OpenerTaskStep.ProjectInfoRead: - foreach (XmlNode node in xmlDocument.DocumentElement.ChildNodes) - if (node.Name == "projectinfo") - ResolveProjectInfoNode (node); - - // FIXME: Fail if not found/not resolved - currentStep = OpenerTaskStep.ObjectListRead; - break; - - case OpenerTaskStep.ObjectListRead: - foreach (XmlNode node in xmlDocument.DocumentElement.ChildNodes) - if (node.Name == "objectlist") - objectListContainer = (ObjectListContainer) - DataFactory.MakeDataElement (node as XmlElement); - - if (objectListContainer == null) - throw new Exception ("ObjectListContainer not found!"); - - currentStep = OpenerTaskStep.ObjectListParse; - break; - - case OpenerTaskStep.ObjectListParse: - bool flush = EnumerateSomeObjects (); - if (flush) - currentStep = OpenerTaskStep.ObjectListUnBoil; - break; - - case OpenerTaskStep.ObjectListUnBoil: - bool done = UnBoilSomeObjects (); - if (done) - currentStep = OpenerTaskStep.FindRoots; - break; - - - case OpenerTaskStep.FindRoots: - projectTrackList = (TrackList) FindRoot ("tracklist"); - projectTagList = (TagList) FindRoot ("taglist"); - projectStuffList = (StuffList) FindRoot ("stufflist"); - projectClipList = (ClipList) FindRoot ("cliplist"); - projectMediaItemList = (MediaItemList) FindRoot ("mediaitemlist"); - projectPipeline = (Gdv.Pipeline) FindRoot ("pipeline"); - projectCommander = (Commander) FindRoot ("commander"); - projectFormat = (Gdv.ProjectFormat) FindRoot ("projectformat"); - - currentStep = OpenerTaskStep.Finished; - break; - - case OpenerTaskStep.Finished: - cont = false; - break; - - default: - break; - } - - // Post - if (cont) - return TaskStatus.Running; - else - return TaskStatus.Done; - } - - /* - void ReadHeader () - { - // FIXME: Read all the attributes from the element - }*/ - - void ResolveProjectInfoNode (XmlNode node) - { - foreach (XmlNode childNode in node) { - - switch (childNode.Name) { - - case "name": - projectName = childNode.FirstChild.Value; - break; - - case "directory": - projectDirectory = childNode.FirstChild.Value; - break; - - // FIXME: Duration etc. - } - } - } - - bool EnumerateSomeObjects () - { - if (objectsEnumerator == null) - objectsEnumerator = objectListContainer.FindAllObjects ().GetEnumerator (); - - for (int i = 0; i < 10; i++) { - if (objectsEnumerator.MoveNext () == false) - return true; - - ObjectContainer container = (ObjectContainer) - objectsEnumerator.Current; - - ObjectInfo newInfo = new ObjectInfo (container); - objectsList.Add (newInfo); - } - - return false; - } - - ObjectInfo GetNextCandidate () - { - foreach (ObjectInfo objInfo in objectsList) - if (objInfo.IsUnBoilable (this)) - return objInfo; - - throw new Exception ("FIXME: No more unboilable objects found. Recursive?"); - } - - bool UnBoilSomeObjects () - { - for (int i = 0; i < 5; i++) { - // All unboiled - if (objectsList.Count == 0) - return true; - - ObjectInfo objInfo = GetNextCandidate (); - - object o = BoilFactory.UnBoil (objInfo.Container, this); - objectsList.Remove (objInfo); - - // Add - idToObject [objInfo.RefId] = o; - objectToId [o] = objInfo.RefId; - - } - - return false; - } - - object FindRoot (string rootString) - { - ObjectContainer container = objectListContainer.FindObjectContainer (rootString); - return idToObject [container.RefId]; - } - - } - -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.css b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.css deleted file mode 100644 index 3f9ffb2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.css +++ /dev/null @@ -1,54 +0,0 @@ -body { - font-size: 12pt; - background: #fff url(temp.png) top left no-repeat; -} - -* html body { - font-size: 14pt; -} - -#nav .new { - display: block; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - -ms-border-radius: 5px; - -o-border-radius: 5px; - border-radius: 5px; -} - -ul#nav li.new { - font-weight: bold; -} - -:link { - color: #f00; -} - -:link:hover { - color: #0f0; -} - -@media screen { - body { - background: #ccc; - } -} - -@namespace "http://www.w3.org/1999/xhtml"; - -@import url("mystyle.css"); - -@charset "ISO-8859-1"; - -@font-face { font-family: "Example Font"; src: url("http://www.example.com/fonts/example"); } - -@media screen { body { font-size: 16px } } @media print { body { font-size: 12pt } } - - -@page { body { margin: 1in 1.5in; } } - -@page linke-seite:left { body { margin:20mm; margin-right:25mm; } } - -@-moz-document url-prefix(http://pygments.org) { a {font-style: normal !important;} } - - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.cu b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.cu deleted file mode 100644 index 19f6680..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.cu +++ /dev/null @@ -1,36 +0,0 @@ -#include - -// __device__ function -__device__ void func() -{ - short* array0 = (short*)array; - float* array1 = (float*)&array0[127]; -} - -/* __global__ function */ -__global__ static void reduction(const float* __restrict__ input, float *output, clock_t *timer) -{ - // __shared__ float shared[2 * blockDim.x]; - extern __shared__ float shared[]; - - const int tid = threadIdx.x; - const int bid = blockIdx.x; - - if (threadIdx.x == 0) { - __threadfence(); - } - - // Perform reduction to find minimum. - for (int d = blockDim.x; d > 0; d /= 2) - { - __syncthreads(); - } -} - -int main(int argc, char **argv) -{ - dim3 dimBlock(8, 8, 1); - - timedReduction<<>>(dinput, doutput, dtimer); - cudaDeviceReset(); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.cyp b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.cyp deleted file mode 100644 index 37465a4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.cyp +++ /dev/null @@ -1,123 +0,0 @@ -//test comment -START a = node(*) -MATCH (a)-[:ACTED_IN]->(m)<-[:DIRECTED]-(d) -RETURN a.name, m.title, d.name; - -START a = node(*) -MATCH (a)-[:ACTED_IN]->(m)<-[:DIRECTED]-(d) -WITH d,m,count(a) as Actors -WHERE Actors > 4 -RETURN d.name as Director,m.title as Movie, Actors ORDER BY Actors; - -START a=node(*) -MATCH p=(a)-[:ACTED_IN]->(m)<-[:DIRECTED]-(d) -return p; - -START a = node(*) -MATCH p1=(a)-[:ACTED_IN]->(m), p2=d-[:DIRECTED]->(m) -WHERE m.title="The Matrix" -RETURN p1, p2; - -START a = node(*) -MATCH (a)-[:ACTED_IN]->(m)<-[:DIRECTED]-(d) -WHERE a=d -RETURN a.name; - -START a = node(*) -MATCH (a)-[:ACTED_IN]->(m)<-[:DIRECTED]-(d) -WHERE a=d -RETURN a.name; - -START a=node(*) -MATCH (a)-[:ACTED_IN]->(m)<-[:DIRECTED]-(d) -RETURN a.name, d.name, count(*) as Movies,collect(m.title) as Titles -ORDER BY (Movies) DESC -LIMIT 5; - -START keanu=node:node_auto_index(name="Keanu Reeves") -RETURN keanu; - -START keanu=node:node_auto_index(name="Keanu Reeves") -MATCH (keanu)-[:ACTED_IN]->(movie) -RETURN movie.title; - -START keanu=node:node_auto_index(name="Keanu Reeves") -MATCH (keanu)-[r:ACTED_IN]->(movie) -WHERE "Neo" in r.roles -RETURN DISTINCT movie.title; - -START keanu=node:node_auto_index(name="Keanu Reeves") -MATCH (keanu)-[:ACTED_IN]->()<-[:DIRECTED]-(director) -RETURN director.name; - -START keanu=node:node_auto_index(name="Keanu Reeves") -MATCH (keanu)-[:ACTED_IN]->(movie)<-[:ACTED_IN]-(n) -WHERE n.born < keanu.born -RETURN DISTINCT n.name, keanu.born ,n.born; - -START keanu=node:node_auto_index(name="Keanu Reeves"), - hugo=node:node_auto_index(name="Hugo Weaving") -MATCH (keanu)-[:ACTED_IN]->(movie) -WHERE NOT((hugo)-[:ACTED_IN]->(movie)) -RETURN DISTINCT movie.title; - -START a = node(*) -MATCH (a)-[:ACTED_IN]->(m) -WITH a,count(m) as Movies -RETURN a.name as Actor, Movies ORDER BY Movies; - -START keanu=node:node_auto_index(name="Keanu Reeves"),actor -MATCH past=(keanu)-[:ACTED_IN]->()<-[:ACTED_IN]-(), - actors=(actor)-[:ACTED_IN]->() -WHERE hasnt=actors NOT IN past -RETURN hasnt; - -START keanu=node:node_auto_index(name="Keanu Reeves") -MATCH (keanu)-[:ACTED_IN]->()<-[:ACTED_IN]-(c), - (c)-[:ACTED_IN]->()<-[:ACTED_IN]-(coc) -WHERE NOT((keanu)-[:ACTED_IN]->()<-[:ACTED_IN]-(coc)) -AND coc > keanu -RETURN coc.name, count(coc) -ORDER BY count(coc) DESC -LIMIT 3; - -START kevin=node:node_auto_index(name="Kevin Bacon"), - movie=node:node_auto_index(name="Mystic River") -MATCH (kevin)-[:ACTED_IN]->(movie) -RETURN DISTINCT movie.title; - -CREATE (n - { - title:"Mystic River", - released:1993, - tagline:"We bury our sins here, Dave. We wash them clean." - } - ) RETURN n; - - -START movie=node:node_auto_index(title="Mystic River") -SET movie.released = 2003 -RETURN movie; - -start emil=node:node_auto_index(name="Emil Eifrem") MATCH emil-[r]->(n) DELETE r, emil; - -START a=node(*) -MATCH (a)-[:ACTED_IN]->()<-[:ACTED_IN]-(b) -CREATE UNIQUE (a)-[:KNOWS]->(b); - -START keanu=node:node_auto_index(name="Keanu Reeves") -MATCH (keanu)-[:KNOWS*2]->(fof) -WHERE keanu <> fof -RETURN distinct fof.name; - -START charlize=node:node_auto_index(name="Charlize Theron"), - bacon=node:node_auto_index(name="Kevin Bacon") -MATCH p=shortestPath((charlize)-[:KNOWS*]->(bacon)) -RETURN extract(n in nodes(p) | n.name)[1]; - -START actors=node: - -MATCH (alice)-[:`REALLY LIKES`]->(bob) -MATCH (alice)-[:`REALLY ``LIKES```]->(bob) -myFancyIdentifier.`(weird property name)` -"string\t\n\b\f\\\''\"" diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.d b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.d deleted file mode 100644 index 02fe8f7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.d +++ /dev/null @@ -1,135 +0,0 @@ -// Created by Lionello Lunesu and placed in the public domain. -// This file has been modified from its original version. -// It has been formatted to fit your screen. -module phoneno; // optional -import std.stdio; // writefln -import std.ctype; // isdigit -import std.stream; // BufferedFile - -// Just for readability (imagine char[][][char[]]) -alias char[] string; -alias string[] stringarray; - -/// Strips non-digit characters from the string (COW) -string stripNonDigit( in string line ) -{ - string ret; - foreach(uint i, c; line) { - // Error: std.ctype.isdigit at C:\dmd\src\phobos\std\ctype.d(37) - // conflicts with std.stream.isdigit at C:\dmd\src\phobos\std\stream.d(2924) - if (!std.ctype.isdigit(c)) { - if (!ret) - ret = line[0..i]; - } - else if (ret) - ret ~= c; - } - return ret?ret:line; -} - -unittest { - assert( stripNonDigit("asdf") == "" ); - assert( stripNonDigit("\'13-=2 4kop") == "1324" ); -} - -/// Converts a word into a number, ignoring all non alpha characters -string wordToNum( in string word ) -{ -// translation table for the task at hand -const char[256] TRANSLATE = - " " // 0 - " 0123456789 " // 32 - " 57630499617851881234762239 " // 64 - " 57630499617851881234762239 " - " " - " " - " " - " "; - string ret; - foreach(c; cast(ubyte[])word) - if (TRANSLATE[c] != ' ') - ret ~= TRANSLATE[c]; - return ret; -} - -unittest { - // Test wordToNum using the table from the task description. - assert( "01112223334455666777888999" == - wordToNum("E | J N Q | R W X | D S Y | F T | A M | C I V | B K U | L O P | G H Z")); - assert( "01112223334455666777888999" == - wordToNum("e | j n q | r w x | d s y | f t | a m | c i v | b k u | l o p | g h z")); - assert( "0123456789" == - wordToNum("0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9")); -} - -void main( string[] args ) -{ - // This associative array maps a number to an array of words. - stringarray[string] num2words; - - foreach(string word; new BufferedFile("dictionary.txt" ) ) - num2words[ wordToNum(word) ] ~= word.dup; // must dup - - /// Finds all alternatives for the given number - /// (should have been stripped from non-digit characters) - stringarray _FindWords( string numbers, bool digitok ) - in { - assert(numbers.length > 0); - } - out(result) { - foreach (a; result) - assert( wordToNum(a) == numbers ); - } - body { - stringarray ret; - bool foundword = false; - for (uint t=1; t<=numbers.length; ++t) { - auto alternatives = numbers[0..t] in num2words; - if (!alternatives) - continue; - foundword = true; - if (numbers.length > t) { - // Combine all current alternatives with all alternatives - // of the rest (next piece can start with a digit) - foreach (a2; _FindWords( numbers[t..$], true ) ) - foreach(a1; *alternatives) - ret ~= a1 ~ " " ~ a2; - } - else - ret ~= *alternatives; // append these alternatives - } - // Try to keep 1 digit, only if we're allowed and no other - // alternatives were found - // Testing "ret.length" makes more sense than testing "foundword", - // but the other implementations seem to do just this. - if (digitok && !foundword) { //ret.length == 0 - if(numbers.length > 1) { - // Combine 1 digit with all altenatives from the rest - // (next piece can not start with a digit) - foreach (a; _FindWords( numbers[1..$], false ) ) - ret ~= numbers[0..1] ~ " " ~ a; - } - else - ret ~= numbers[0..1]; // just append this digit - } - return ret; - } - - /// (This function was inlined in the original program) - /// Finds all alternatives for the given phone number - /// Returns: array of strings - stringarray FindWords( string phone_number ) - { - if (!phone_number.length) - return null; - // Strip the non-digit characters from the phone number, and - // pass it to the recursive function (leading digit is allowed) - return _FindWords( stripNonDigit(phone_number), true ); - } - - // Read the phone numbers - foreach(string phone; new BufferedFile("input.txt" ) ) - foreach(alternative; FindWords( phone ) ) - writefln(phone, ": ", alternative ); -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.dart b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.dart deleted file mode 100644 index aa1fb0e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.dart +++ /dev/null @@ -1,23 +0,0 @@ -// Greeter example from -// -class Greeter implements Comparable { - String prefix = 'Hello,'; - Greeter() {} - Greeter.withPrefix(this.prefix); - greet(String name) => print('$prefix $name'); - - int compareTo(Greeter other) => prefix.compareTo(other.prefix); -} - -void main() { - Greeter greeter = new Greeter(); - Greeter greeter2 = new Greeter.withPrefix('Hi,'); - - num result = greeter2.compareTo(greeter); - if (result == 0) { - greeter2.greet('you are the same.'); - } else { - greeter2.greet('you are different.'); - } -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.dtd b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.dtd deleted file mode 100644 index 639b411..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.dtd +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -]]> - -]]> - -]> - - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.ebnf b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.ebnf deleted file mode 100644 index a96171b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.ebnf +++ /dev/null @@ -1,31 +0,0 @@ -letter = "A" | "B" | "C" | "D" | "E" | "F" | "G" - | "H" | "I" | "J" | "K" | "L" | "M" | "N" - | "O" | "P" | "Q" | "R" | "S" | "T" | "U" - | "V" | "W" | "X" | "Y" | "Z" ; -digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; -symbol = "[" | "]" | "{" | "}" | "(" | ")" | "<" | ">" - | "'" | '"' | "=" | "|" | "." | "," | ";" ; -character = letter | digit | symbol | " " ; - -identifier = letter , { letter | digit | " " } ; -terminal = "'" , character , { character } , "'" - | '"' , character , { character } , '"' ; - -special = "?" , any , "?" ; - -comment = (* this is a comment "" *) "(*" , any-symbol , "*)" ; -any-symbol = ? any visible character ? ; (* ? ... ? *) - -lhs = identifier ; -rhs = identifier - | terminal - | comment , rhs - | rhs , comment - | "[" , rhs , "]" - | "{" , rhs , "}" - | "(" , rhs , ")" - | rhs , "|" , rhs - | rhs , "," , rhs ; - -rule = lhs , "=" , rhs , ";" | comment ; -grammar = { rule } ; diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.ec b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.ec deleted file mode 100644 index 37868b5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.ec +++ /dev/null @@ -1,605 +0,0 @@ -namespace gui; - -import "Window" - -public struct AnchorValue -{ - AnchorValueType type; - - union - { - int distance; - float percent; - }; - property int - { - set { distance = value; type = offset; } - get { return distance; } - } - property double - { - set { percent = (float) value; type = relative; } - get { return (double) percent; } - } - - char * OnGetString(char * stringOutput, void * fieldData, bool * needClass) - { - if(type == offset) - { - sprintf(stringOutput, "%d", distance); - } - else if(type == relative) - { - int c; - int last = 0; - sprintf(stringOutput, "%f", percent); - c = strlen(stringOutput)-1; - for( ; c >= 0; c--) - { - if(stringOutput[c] != '0') - last = Max(last, c); - if(stringOutput[c] == '.') - { - if(last == c) - { - stringOutput[c+1] = '0'; - stringOutput[c+2] = 0; - } - else - stringOutput[last+1] = 0; - break; - } - } - } - if(needClass) *needClass = false; - return stringOutput; - } - - bool OnGetDataFromString(char * stringOutput) - { - char * end; - if(strchr(stringOutput, '.')) - { - float percent = (float)strtod(stringOutput, &end); - - if(end != stringOutput) - { - this.percent = percent; - type = relative; - return true; - } - } - else if(stringOutput[0]) - { - int distance = strtol(stringOutput, &end, 0); - if(end != stringOutput) - { - this.distance = distance; - type = offset; - return true; - } - } - else - { - distance = 0; - type = 0; - } - return false; - } -}; - -public struct MiddleAnchorValue -{ - AnchorValueType type; - - union - { - int distance; - float percent; - }; - property int - { - set { distance = value; type = none; } - get { return distance; } - } - property double - { - set { percent = (float) value; type = middleRelative; } - get { return (double) percent; } - } - - char * OnGetString(char * stringOutput, void * fieldData, bool * needClass) - { - if(type == middleRelative) - { - int c; - int last = 0; - sprintf(stringOutput, "%f", percent); - c = strlen(stringOutput)-1; - for( ; c >= 0; c--) - { - if(stringOutput[c] != '0') - last = Max(last, c); - if(stringOutput[c] == '.') - { - if(last == c) - { - stringOutput[c+1] = '0'; - stringOutput[c+2] = 0; - } - else - stringOutput[last+1] = 0; - break; - } - } - } - else if(type == none && distance) - { - sprintf(stringOutput, "%d", distance); - } - if(needClass) *needClass = false; - return stringOutput; - } - - bool OnGetDataFromString(char * stringOutput) - { - if(strchr(stringOutput, '.')) - { - percent = (float)strtod(stringOutput, null); - type = middleRelative; - } - else - { - distance = strtol(stringOutput, null, 0); - type = none; - } - return true; - } -}; - -public enum AnchorValueType { none, offset, relative, middleRelative, cascade, vTiled, hTiled }; - -public struct Anchor -{ - union { AnchorValue left; MiddleAnchorValue horz; }; - union { AnchorValue top; MiddleAnchorValue vert; }; - AnchorValue right, bottom; - - char * OnGetString(char * stringOutput, void * fieldData, bool * needClass) - { - char tempString[256]; - char * anchorValue; - bool subNeedClass; - - tempString[0] = '\0'; - anchorValue = left.OnGetString(tempString, null, &subNeedClass); - if(anchorValue[0]) { if(stringOutput[0]) strcat(stringOutput, ", "); strcat(stringOutput, "left = "); strcat(stringOutput, anchorValue); } - - //if(((!left.type && !right.type) && horz.distance) || horz.type == middleRelative) - if(!right.type && ((!left.type && horz.distance) || horz.type == middleRelative)) - { - tempString[0] = '\0'; - anchorValue = horz.OnGetString(tempString, null, &subNeedClass); - if(anchorValue[0]) { if(stringOutput[0]) strcat(stringOutput, ", "); strcat(stringOutput, "horz = "); strcat(stringOutput, anchorValue); } - } - - tempString[0] = '\0'; - anchorValue = top.OnGetString(tempString, null, &subNeedClass); - if(anchorValue[0]) { if(stringOutput[0]) strcat(stringOutput, ", "); strcat(stringOutput, "top = "); strcat(stringOutput, anchorValue); } - - tempString[0] = '\0'; - anchorValue = right.OnGetString(tempString, null, &subNeedClass); - if(anchorValue[0]) { if(stringOutput[0]) strcat(stringOutput, ", "); strcat(stringOutput, "right = "); strcat(stringOutput, anchorValue); } - - // if(((!top.type && !bottom.type) && vert.distance) || vert.type == middleRelative) - if(!bottom.type && ((!top.type && vert.distance) || vert.type == middleRelative)) - { - tempString[0] = '\0'; - anchorValue = vert.OnGetString(tempString, null, &subNeedClass); - if(anchorValue[0]) { if(stringOutput[0]) strcat(stringOutput, ", "); strcat(stringOutput, "vert = "); strcat(stringOutput, anchorValue); } - } - - tempString[0] = '\0'; - anchorValue = bottom.OnGetString(tempString, null, &subNeedClass); - if(anchorValue[0]) { if(stringOutput[0]) strcat(stringOutput, ", "); strcat(stringOutput, "bottom = "); strcat(stringOutput, anchorValue); } - - return stringOutput; - } - - bool OnGetDataFromString(char * string) - { - this = Anchor {}; - return class::OnGetDataFromString(string); - } - - bool OnSaveEdit(DropBox dropBox, void * object) - { - return dropBox.Save(); - } - - Window OnEdit(Window listBox, Window master, int x, int y, int w, int h, Window control) - { - char * string = ""; - AnchorDropBox comboBox - { - editText = true; - parent = listBox; - master = master; - position = Point { x, y }; - //clientSize = Size { h = h }; - //size.w = w; - size = { w, h }; - anchorValue = this; - control = control; - borderStyle = 0; - }; - - comboBox.Create(); - - { - char tempString[MAX_F_STRING] = ""; - bool needClass = false; - char * result = OnGetString(tempString, null, &needClass); - if(result) string = result; - } - comboBox.contents = string; - return comboBox; - } -}; - -private class AnchorButton : Button -{ - toggle = true, bevel = false; - - void OnRedraw(Surface surface) - { - int cw = clientSize.w; - int ch = clientSize.h; - - surface.SetForeground(black); - if(checked) - { - surface.SetBackground(Color { 85,85,85 }); - surface.Area(0,0, cw-1, ch-1); - } - else - surface.LineStipple(0xAAAA); - - surface.Rectangle(0,0,cw-1,ch-1); - - if(active) - { - surface.LineStipple(0xAAAA); - surface.Rectangle(2,2,cw-3,ch-3); - } - } - - bool AnchorEditor::NotifyClicked(Button button, int x, int y, Modifiers mods) - { - AnchorDropBox anchorDropBox = (AnchorDropBox)master; - Anchor anchor = anchorDropBox.anchorValue; - Window control = anchorDropBox.control; - DataBox dropMaster = (DataBox)anchorDropBox.master; - int id = button.id; - - switch(id) - { - case 0: anchor.left.type = button.checked ? offset : none; break; - case 1: anchor.top.type = button.checked ? offset : none; break; - case 2: anchor.right.type = button.checked ? offset : none; break; - case 3: anchor.bottom.type = button.checked ? offset : none; break; - } - - if(anchor.horz.type == middleRelative && (id == 0 || id == 2)) - { - anchorDropBox.relButtons[0].checked = false; - anchorDropBox.relButtons[2].checked = false; - } - if(anchor.vert.type == middleRelative && (id == 1 || id == 3)) - { - anchorDropBox.relButtons[1].checked = false; - anchorDropBox.relButtons[3].checked = false; - } - anchorDropBox.relButtons[id].checked = false; - - //anchor.horz.type = none; - //anchor.vert.type = none; - - { - int vpw, vph; - int x,y,w,h; - Window parent = control.parent; - - // Fix Anchor - x = control.position.x; - y = control.position.y; - w = control.size.w; - h = control.size.h; - - vpw = parent.clientSize.w; - vph = parent.clientSize.h; - if(control.nonClient) - { - vpw = parent.size.w; - vph = parent.size.h; - } - else if(((BorderBits)control.borderStyle).fixed) - { - if(!control.dontScrollHorz && parent.scrollArea.w) vpw = parent.scrollArea.w; - if(!control.dontScrollVert && parent.scrollArea.h) vph = parent.scrollArea.h; - } - - if(anchor.left.type == offset) anchor.left.distance = x; - else if(anchor.left.type == relative) anchor.left.percent = (float)x / vpw; - if(anchor.top.type == offset) anchor.top.distance = y; - else if(anchor.top.type == relative) anchor.top.percent = (float)y / vph; - if(anchor.right.type == offset) anchor.right.distance = vpw - (x + w); - //else if(anchor.right.type == relative) anchor.right.percent = (float) (x + w) / vpw; - else if(anchor.right.type == relative) anchor.right.percent = (float) (vpw - (x + w)) / vpw; - if(anchor.bottom.type == offset) anchor.bottom.distance = vph - (y + h); - //else if(anchor.bottom.type == relative) anchor.bottom.percent = (float) (y + h) / vph; - else if(anchor.bottom.type == relative) anchor.bottom.percent = (float) (vph - (y + h)) / vph; - - if(!anchor.left.type && !anchor.right.type) - { - anchor.horz.distance = (x + w / 2) - (vpw / 2); - //anchor.horz.type = anchor.horz.distance ? offset : 0; - } - else if(anchor.horz.type == middleRelative) anchor.horz.percent = (float) ((x + w / 2) - (vpw / 2)) / vpw; - if(!anchor.top.type && !anchor.bottom.type) - { - anchor.vert.distance = (y + h / 2) - (vph / 2); - //anchor.vert.type = anchor.vert.distance ? offset : 0; - } - else if(anchor.vert.type == middleRelative) anchor.vert.percent = (float)((y + h / 2) - (vph / 2)) / vph; - } - - { - char tempString[1024] = ""; - bool needClass = false; - char * string = anchor.OnGetString(tempString, null, &needClass); - anchorDropBox.contents = string; - } - - dropMaster.SetData(&anchor, false); - anchorDropBox.anchorValue = anchor; - return true; - } -} - -private class AnchorRelButton : Button -{ - toggle = true; - bevel = false; - text = "%"; - //bevelOver = true; - - void OnRedraw(Surface surface) - { - int cw = clientSize.w; - int ch = clientSize.h; - - if(checked) - { - surface.SetForeground(black); - } - else - { - surface.SetForeground(Color{170,170,170}); - } - surface.WriteText(5,2, "%", 1); - - if(active) - { - surface.LineStipple(0xAAAA); - surface.Rectangle(3,3,cw-4,ch-4); - } - } - - bool AnchorEditor::NotifyClicked(Button button, int x, int y, Modifiers mods) - { - AnchorDropBox anchorDropBox = (AnchorDropBox)master; - Anchor anchor = anchorDropBox.anchorValue; - Window control = anchorDropBox.control; - DataBox dropMaster = (DataBox)anchorDropBox.master; - int id = button.id; - - if((id == 0 || id == 2) && ((!anchor.left.type && !anchor.right.type) || anchor.left.type == middleRelative)) - { - if(button.checked) anchor.horz.type = middleRelative; else anchor.horz.type = none; - anchorDropBox.relButtons[(id + 2)%4].checked = button.checked; - } - else if((id == 1 || id == 3) && ((!anchor.top.type && !anchor.bottom.type) || anchor.top.type == middleRelative)) - { - if(button.checked) anchor.vert.type = middleRelative; else anchor.vert.type = none; - anchorDropBox.relButtons[(id + 2)%4].checked = button.checked; - } - else - { - switch(id) - { - case 0: anchor.left.type = button.checked ? relative : (anchor.left.type ? offset : none); break; - case 1: anchor.top.type = button.checked ? relative : (anchor.top.type ? offset : none); break; - case 2: anchor.right.type = button.checked ? relative : (anchor.right.type ? offset : none); break; - case 3: anchor.bottom.type = button.checked ? relative : (anchor.bottom.type ? offset : none); break; - } - anchorDropBox.buttons[id].checked = true; - if(anchor.horz.type == middleRelative) anchor.horz.type = none; - if(anchor.vert.type == middleRelative) anchor.vert.type = none; - } - - { - int vpw, vph; - int x,y,w,h; - Window parent = control.parent; - - // Fix Anchor - x = control.position.x; - y = control.position.y; - w = control.size.w; - h = control.size.h; - - vpw = parent.clientSize.w; - vph = parent.clientSize.h; - if(control.nonClient) - { - vpw = parent.size.w; - vph = parent.size.h; - } - else if(((BorderBits)control.borderStyle).fixed) - { - if(!control.dontScrollHorz && parent.scrollArea.w) vpw = parent.scrollArea.w; - if(!control.dontScrollVert && parent.scrollArea.h) vph = parent.scrollArea.h; - } - - if(anchor.left.type == offset) anchor.left.distance = x; - else if(anchor.left.type == relative) anchor.left.percent = (float)x / vpw; - if(anchor.top.type == offset) anchor.top.distance = y; - else if(anchor.top.type == relative) anchor.top.percent = (float)y / vph; - if(anchor.right.type == offset) anchor.right.distance = vpw - (x + w); - //else if(anchor.right.type == relative) anchor.right.percent = (float) (x + w) / vpw; - else if(anchor.right.type == relative) anchor.right.percent = (float) (vpw - (x + w)) / vpw; - if(anchor.bottom.type == offset) anchor.bottom.distance = vph - (y + h); - //else if(anchor.bottom.type == relative) anchor.bottom.percent = (float) (y + h) / vph; - else if(anchor.bottom.type == relative) anchor.bottom.percent = (float) (vph - (y + h)) / vph; - - if(!anchor.left.type && !anchor.right.type) - { - anchor.horz.distance = (x + w / 2) - (vpw / 2); - //anchor.horz.type = anchor.horz.distance ? offset : none; - } - else if(anchor.horz.type == middleRelative) anchor.horz.percent = (float) ((x + w / 2) - (vpw / 2)) / vpw; - if(!anchor.top.type && !anchor.bottom.type) - { - anchor.vert.distance = (y + h / 2) - (vph / 2); - //anchor.vert.type = anchor.vert.distance ? offset : none; - } - else if(anchor.vert.type == middleRelative) anchor.vert.percent = (float)((y + h / 2) - (vph / 2)) / vph; - } - - { - char tempString[1024] = ""; - bool needClass = false; - char * string = anchor.OnGetString(tempString, null, &needClass); - anchorDropBox.contents = string; - } - - dropMaster.SetData(&anchor, false); - anchorDropBox.anchorValue = anchor; - return true; - } -} - -private class AnchorEditor : Window -{ - interim = true; - borderStyle = deepContour; - size.h = 92; - - bool OnKeyDown(Key key, unichar ch) - { - if(key == escape) - return master.OnKeyDown(key, ch); - return true; - } -} - -private class AnchorDropBox : DropBox -{ - Anchor anchorValue; - Window control; - Button relButtons[4], buttons[4]; - - AnchorEditor anchorEditor - { - master = this; - autoCreate = false; - }; - - Window OnDropDown() - { - int c; - Button - { - anchorEditor, - anchor = Anchor { left = 28, top = 28, right = 28, bottom = 28 }, - inactive = true, disabled = true - }; - for(c = 0; c<4; c++) - { - Button button = buttons[c] = AnchorButton - { - anchorEditor, id = c, - size = Size { (c%2)?10:28, (c%2)?28:10 } - }; - Button relButton = relButtons[c] = AnchorRelButton - { - anchorEditor, id = c; - }; - - switch(c) - { - case 0: - if(anchorValue.left.type && anchorValue.left.type != middleRelative) button.checked = true; - if(anchorValue.left.type == relative || anchorValue.horz.type == middleRelative) relButton.checked = true; - - button.anchor = Anchor { left = 0 }; - relButton.anchor = Anchor { left = 5, vert = 16 }; - break; - case 1: - if(anchorValue.top.type && anchorValue.top.type != middleRelative) button.checked = true; - if(anchorValue.top.type == relative || anchorValue.vert.type == middleRelative) relButton.checked = true; - - button.anchor = Anchor { top = 0 }; - relButton.anchor = Anchor { top = 5, horz = 16 }; - break; - case 2: - if(anchorValue.right.type && anchorValue.right.type != middleRelative) button.checked = true; - if(anchorValue.right.type == relative || anchorValue.horz.type == middleRelative) relButton.checked = true; - - button.anchor = Anchor { right = 0 }; - relButton.anchor = Anchor { right = 5, vert = 16 }; - break; - case 3: - if(anchorValue.bottom.type && anchorValue.bottom.type != middleRelative) button.checked = true; - if(anchorValue.bottom.type == relative || anchorValue.vert.type == middleRelative) relButton.checked = true; - - button.anchor = Anchor { bottom = 0 }; - relButton.anchor = Anchor { bottom = 5, horz = 16 }; - break; - } - } - anchorEditor.Create(); - return anchorEditor; - } - - void OnCloseDropDown(Window anchorEditor) - { - // TOFIX: Patch for update bug - master.Update(null); - anchorEditor.Destroy(0); - } - - bool DataBox::NotifyTextEntry(AnchorDropBox dropBox, char * string, bool save) - { - Anchor anchor = dropBox.anchorValue; - Window control = dropBox.control; - - if(save) - { - if(anchor.OnGetDataFromString(string)) - { - SetData(&anchor, false); - dropBox.anchorValue = anchor; - } - } - else - { - char tempString[1024] = ""; - bool needClass = false; - char * string = anchor.OnGetString(tempString, null, &needClass); - dropBox.contents = string; - } - return true; - } -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.ecl b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.ecl deleted file mode 100644 index b686492..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.ecl +++ /dev/null @@ -1,58 +0,0 @@ -/*############################################################################## - - Copyright (C) 2011 HPCC Systems. - - All rights reserved. This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -############################################################################## */ - -#option ('slidingJoins', true); - -namesRecord := - RECORD -string20 surname; -string10 forename; -integer2 age; -integer2 dadAge; -integer2 mumAge; - END; - -namesRecord2 := - record -string10 extra; -namesRecord; - end; - -namesTable := dataset('x',namesRecord,FLAT); -namesTable2 := dataset('y',namesRecord2,FLAT); - -integer2 aveAgeL(namesRecord l) := (l.dadAge+l.mumAge)/2; -integer2 aveAgeR(namesRecord2 r) := (r.dadAge+r.mumAge)/2; - -// Standard join on a function of left and right -output(join(namesTable, namesTable2, aveAgeL(left) = aveAgeR(right))); - -//Several simple examples of sliding join syntax -output(join(namesTable, namesTable2, left.age >= right.age - 10 and left.age <= right.age +10)); -output(join(namesTable, namesTable2, left.age between right.age - 10 and right.age +10)); -output(join(namesTable, namesTable2, left.age between right.age + 10 and right.age +30)); -output(join(namesTable, namesTable2, left.age between (right.age + 20) - 10 and (right.age +20) + 10)); -output(join(namesTable, namesTable2, aveAgeL(left) between aveAgeR(right)+10 and aveAgeR(right)+40)); - -//Same, but on strings. Also includes age to ensure sort is done by non-sliding before sliding. -output(join(namesTable, namesTable2, left.surname between right.surname[1..10]+'AAAAAAAAAA' and right.surname[1..10]+'ZZZZZZZZZZ' and left.age=right.age)); -output(join(namesTable, namesTable2, left.surname between right.surname[1..10]+'AAAAAAAAAA' and right.surname[1..10]+'ZZZZZZZZZZ' and left.age=right.age,all)); - -//This should not generate a self join -output(join(namesTable, namesTable, left.age between right.age - 10 and right.age +10)); - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.eh b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.eh deleted file mode 100644 index 1ed173f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.eh +++ /dev/null @@ -1,315 +0,0 @@ -/* A Bison parser, made by GNU Bison 2.0. */ - -/* Skeleton parser for Yacc-like parsing with Bison, - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -/* As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. */ - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - IDENTIFIER = 258, - CONSTANT = 259, - STRING_LITERAL = 260, - SIZEOF = 261, - PTR_OP = 262, - INC_OP = 263, - DEC_OP = 264, - LEFT_OP = 265, - RIGHT_OP = 266, - LE_OP = 267, - GE_OP = 268, - EQ_OP = 269, - NE_OP = 270, - AND_OP = 271, - OR_OP = 272, - MUL_ASSIGN = 273, - DIV_ASSIGN = 274, - MOD_ASSIGN = 275, - ADD_ASSIGN = 276, - SUB_ASSIGN = 277, - LEFT_ASSIGN = 278, - RIGHT_ASSIGN = 279, - AND_ASSIGN = 280, - XOR_ASSIGN = 281, - OR_ASSIGN = 282, - TYPE_NAME = 283, - TYPEDEF = 284, - EXTERN = 285, - STATIC = 286, - AUTO = 287, - REGISTER = 288, - CHAR = 289, - SHORT = 290, - INT = 291, - UINT = 292, - INT64 = 293, - LONG = 294, - SIGNED = 295, - UNSIGNED = 296, - FLOAT = 297, - DOUBLE = 298, - CONST = 299, - VOLATILE = 300, - VOID = 301, - VALIST = 302, - STRUCT = 303, - UNION = 304, - ENUM = 305, - ELLIPSIS = 306, - CASE = 307, - DEFAULT = 308, - IF = 309, - SWITCH = 310, - WHILE = 311, - DO = 312, - FOR = 313, - GOTO = 314, - CONTINUE = 315, - BREAK = 316, - RETURN = 317, - IFX = 318, - ELSE = 319, - CLASS = 320, - THISCLASS = 321, - CLASS_NAME = 322, - PROPERTY = 323, - SETPROP = 324, - GETPROP = 325, - NEWOP = 326, - RENEW = 327, - DELETE = 328, - EXT_DECL = 329, - EXT_STORAGE = 330, - IMPORT = 331, - DEFINE = 332, - VIRTUAL = 333, - EXT_ATTRIB = 334, - PUBLIC = 335, - PRIVATE = 336, - TYPED_OBJECT = 337, - ANY_OBJECT = 338, - _INCREF = 339, - EXTENSION = 340, - ASM = 341, - TYPEOF = 342, - WATCH = 343, - STOPWATCHING = 344, - FIREWATCHERS = 345, - WATCHABLE = 346, - CLASS_DESIGNER = 347, - CLASS_NO_EXPANSION = 348, - CLASS_FIXED = 349, - ISPROPSET = 350, - CLASS_DEFAULT_PROPERTY = 351, - PROPERTY_CATEGORY = 352, - CLASS_DATA = 353, - CLASS_PROPERTY = 354, - SUBCLASS = 355, - NAMESPACE = 356, - NEW0OP = 357, - RENEW0 = 358, - VAARG = 359, - DBTABLE = 360, - DBFIELD = 361, - DBINDEX = 362, - DATABASE_OPEN = 363 - }; -#endif -#define IDENTIFIER 258 -#define CONSTANT 259 -#define STRING_LITERAL 260 -#define SIZEOF 261 -#define PTR_OP 262 -#define INC_OP 263 -#define DEC_OP 264 -#define LEFT_OP 265 -#define RIGHT_OP 266 -#define LE_OP 267 -#define GE_OP 268 -#define EQ_OP 269 -#define NE_OP 270 -#define AND_OP 271 -#define OR_OP 272 -#define MUL_ASSIGN 273 -#define DIV_ASSIGN 274 -#define MOD_ASSIGN 275 -#define ADD_ASSIGN 276 -#define SUB_ASSIGN 277 -#define LEFT_ASSIGN 278 -#define RIGHT_ASSIGN 279 -#define AND_ASSIGN 280 -#define XOR_ASSIGN 281 -#define OR_ASSIGN 282 -#define TYPE_NAME 283 -#define TYPEDEF 284 -#define EXTERN 285 -#define STATIC 286 -#define AUTO 287 -#define REGISTER 288 -#define CHAR 289 -#define SHORT 290 -#define INT 291 -#define UINT 292 -#define INT64 293 -#define LONG 294 -#define SIGNED 295 -#define UNSIGNED 296 -#define FLOAT 297 -#define DOUBLE 298 -#define CONST 299 -#define VOLATILE 300 -#define VOID 301 -#define VALIST 302 -#define STRUCT 303 -#define UNION 304 -#define ENUM 305 -#define ELLIPSIS 306 -#define CASE 307 -#define DEFAULT 308 -#define IF 309 -#define SWITCH 310 -#define WHILE 311 -#define DO 312 -#define FOR 313 -#define GOTO 314 -#define CONTINUE 315 -#define BREAK 316 -#define RETURN 317 -#define IFX 318 -#define ELSE 319 -#define CLASS 320 -#define THISCLASS 321 -#define CLASS_NAME 322 -#define PROPERTY 323 -#define SETPROP 324 -#define GETPROP 325 -#define NEWOP 326 -#define RENEW 327 -#define DELETE 328 -#define EXT_DECL 329 -#define EXT_STORAGE 330 -#define IMPORT 331 -#define DEFINE 332 -#define VIRTUAL 333 -#define EXT_ATTRIB 334 -#define PUBLIC 335 -#define PRIVATE 336 -#define TYPED_OBJECT 337 -#define ANY_OBJECT 338 -#define _INCREF 339 -#define EXTENSION 340 -#define ASM 341 -#define TYPEOF 342 -#define WATCH 343 -#define STOPWATCHING 344 -#define FIREWATCHERS 345 -#define WATCHABLE 346 -#define CLASS_DESIGNER 347 -#define CLASS_NO_EXPANSION 348 -#define CLASS_FIXED 349 -#define ISPROPSET 350 -#define CLASS_DEFAULT_PROPERTY 351 -#define PROPERTY_CATEGORY 352 -#define CLASS_DATA 353 -#define CLASS_PROPERTY 354 -#define SUBCLASS 355 -#define NAMESPACE 356 -#define NEW0OP 357 -#define RENEW0 358 -#define VAARG 359 -#define DBTABLE 360 -#define DBFIELD 361 -#define DBINDEX 362 -#define DATABASE_OPEN 363 - - - - -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 42 "grammar.y" -typedef union YYSTYPE { - SpecifierType specifierType; - int i; - AccessMode declMode; - Identifier id; - Expression exp; - Specifier specifier; - OldList * list; - Enumerator enumerator; - Declarator declarator; - Pointer pointer; - Initializer initializer; - InitDeclarator initDeclarator; - TypeName typeName; - Declaration declaration; - Statement stmt; - FunctionDefinition function; - External external; - Context context; - AsmField asmField; - - Instantiation instance; - MembersInit membersInit; - MemberInit memberInit; - ClassFunction classFunction; - ClassDefinition _class; - ClassDef classDef; - PropertyDef prop; - char * string; - Symbol symbol; - PropertyWatch propertyWatch; - TemplateParameter templateParameter; - TemplateArgument templateArgument; - TemplateDatatype templateDatatype; - - DBTableEntry dbtableEntry; - DBIndexItem dbindexItem; - DBTableDef dbtableDef; -} YYSTYPE; -/* Line 1318 of yacc.c. */ -#line 293 "grammar.eh" -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - -extern YYSTYPE yylval; - -#if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED) -typedef struct YYLTYPE -{ - int first_line; - int first_column; - int last_line; - int last_column; -} YYLTYPE; -# define yyltype YYLTYPE /* obsolescent; will be withdrawn */ -# define YYLTYPE_IS_DECLARED 1 -# define YYLTYPE_IS_TRIVIAL 1 -#endif - -extern YYLTYPE yylloc; - - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.erl b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.erl deleted file mode 100644 index 5b983e7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.erl +++ /dev/null @@ -1,169 +0,0 @@ --module(test). --export([listen/1, - handle_client/1, - maintain_clients/1, - start/1, - stop/0, - controller/1]). - --author("jerith"). - --define(TCP_OPTIONS,[list, {packet, 0}, {active, false}, {reuseaddr, true}]). - --record(player, {name=none, socket, mode}). - -%% To allow incoming connections, we need to listen on a TCP port. -%% This is also the entry point for our server as a whole, so it -%% starts the client_manager process and gives it a name so the rest -%% of the code can get to it easily. - -listen(Port) -> - {ok, LSocket} = gen_tcp:listen(Port, ?TCP_OPTIONS), - register(client_manager, spawn(?MODULE, maintain_clients, [[]])), - do_accept(LSocket). - -%% Accepting a connection gives us a connection socket with the -%% newly-connected client on the other end. Since we want to accept -%% more than one client, we spawn a new process for each and then wait -%% for another connection on our listening socket. - -do_accept(LSocket) -> - case gen_tcp:accept(LSocket) of - {ok, Socket} -> - spawn(?MODULE, handle_client, [Socket]), - client_manager ! {connect, Socket}; - {error, Reason} -> - io:format("Socket accept error: ~s~n", [Reason]) - end, - do_accept(LSocket). - -%% All the client-socket process needs to do is wait for data and -%% forward it to the client_manager process which decides what to do -%% with it. If the client disconnects, we let client_manager know and -%% then quietly go away. - -handle_client(Socket) -> - case gen_tcp:recv(Socket, 0) of - {ok, Data} -> - client_manager ! {data, Socket, Data}, - handle_client(Socket); - {error, closed} -> - client_manager ! {disconnect, Socket} - end. - -%% This is the main loop of the client_manager process. It maintains -%% the list of "players" and calls the handler for client input. - -maintain_clients(Players) -> - io:format("Players:~n", []), - lists:foreach(fun(P) -> io:format(">>> ~w~n", [P]) end, Players), - receive - {connect, Socket} -> - Player = #player{socket=Socket, mode=connect}, - send_prompt(Player), - io:format("client connected: ~w~n", [Player]), - NewPlayers = [Player | Players]; - {disconnect, Socket} -> - Player = find_player(Socket, Players), - io:format("client disconnected: ~w~n", [Player]), - NewPlayers = lists:delete(Player, Players); - {data, Socket, Data} -> - Player = find_player(Socket, Players), - NewPlayers = parse_data(Player, Players, Data), - NewPlayer = find_player(Socket, NewPlayers), - send_prompt(NewPlayer) - end, - maintain_clients(NewPlayers). - -%% find_player is a utility function to get a player record associated -%% with a particular socket out of the player list. - -find_player(Socket, Players) -> - {value, Player} = lists:keysearch(Socket, #player.socket, Players), - Player. - -%% delete_player returns the player list without the given player. It -%% deletes the player from the list based on the socket rather than -%% the whole record because the list might hold a different version. - -delete_player(Player, Players) -> - lists:keydelete(Player#player.socket, #player.socket, Players). - -%% Sends an appropriate prompt to the player. Currently the only -%% prompt we send is the initial "Name: " when the player connects. - -send_prompt(Player) -> - case Player#player.mode of - connect -> - gen_tcp:send(Player#player.socket, "Name: "); - active -> - ok - end. - -%% Sends the given data to all players in active mode. - -send_to_active(Prefix, Players, Data) -> - ActivePlayers = lists:filter(fun(P) -> P#player.mode == active end, - Players), - lists:foreach(fun(P) -> gen_tcp:send(P#player.socket, Prefix ++ Data) end, - ActivePlayers), - ok. - -%% We don't really do much parsing, but that will probably change as -%% more features are added. Currently this handles naming the player -%% when he first connects and treats everything else as a message to -%% send. - -parse_data(Player, Players, Data) -> - case Player#player.mode of - active -> - send_to_active(Player#player.name ++ ": ", - delete_player(Player, Players), Data), - Players; - connect -> - UPlayer = Player#player{name=bogostrip(Data), mode=active}, - [UPlayer | delete_player(Player, Players)] - end. - -%% Utility methods to clean up the name before we apply it. Called -%% bogostrip rather than strip because it returns the first continuous -%% block of non-matching characters rather stripping matching -%% characters off the front and back. - -bogostrip(String) -> - bogostrip(String, "\r\n\t "). - -bogostrip(String, Chars) -> - LStripped = string:substr(String, string:span(String, Chars)+1), - string:substr(LStripped, 1, string:cspan(LStripped, Chars)). - -%% Here we have some extra code to test other bits of pygments' Erlang -%% lexer. - -get_timestamp() -> - {{Year,Month,Day},{Hour,Min,Sec}} = erlang:universaltime(), - lists:flatten(io_lib:format( - "~4.10.0B-~2.10.0B-~2.10.0BT~2.10.0B:~2.10.0B:~2.10.0BZ", - [Year, Month, Day, Hour, Min, Sec])). - -a_binary() -> - << 100:16/integer, 16#7f >>. - -a_list_comprehension() -> - [X*2 || X <- [1,2,3]]. - -map(Fun, [H|T]) -> - [Fun(H) | map(Fun, T)]; - -map(Fun, []) -> - []. - -%% pmap, just because it's cool. - -pmap(F, L) -> - Parent = self(), - [receive {Pid, Result} -> - Result - end || Pid <- [spawn(fun() -> - Parent ! {self(), F(X)} - end) || X <- L]]. diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.evoque b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.evoque deleted file mode 100644 index 5a98d3b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.evoque +++ /dev/null @@ -1,33 +0,0 @@ -$overlay{name=site_base} - -$begin{table_row} - $for{ col in row } - ${col}\ - $else - empty row - $rof -$end{table_row} - - - $for{ i, row in enumerate(rows) } - #[ "odd" rows get a special style ]# - $evoque{#table_row} - $evoque{ - #table_row - } - $evoque{'#table_row'} - $evoque{ '#table_row', collection=None, quoting="str"} - $evoque{name="#table_row"} - $evoque{name=var_table_row} - $evoque{%#table_row%} - $evoque{% #table_row %} - - $rof -
    - -$evoque{disclaimer, collection="legals"} -$evoque{ disclaimer , collection="legals", abc=123} -$evoque{% disclaimer, collection="legals"%} - -$test{% site_base="site.html", - rows=[("a", "b", 3.0, {"one":1}, "", "i", "j")] %} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.fan b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.fan deleted file mode 100755 index 00e80b6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.fan +++ /dev/null @@ -1,818 +0,0 @@ -// -// Copyright (c) 2008, Brian Frank and Andy Frank -// Licensed under the Academic Free License version 3.0 -// -// History: -// 17 Nov 08 Brian Frank Creation -// - -using compiler - -** -** JavaBridge is the compiler plugin for bringing Java -** classes into the Fantom type system. -** -class JavaBridge : CBridge -{ - -////////////////////////////////////////////////////////////////////////// -// Constructor -////////////////////////////////////////////////////////////////////////// - - ** - ** Construct a JavaBridge for current environment - ** - new make(Compiler c, ClassPath cp := ClassPath.makeForCurrent) - : super(c) - { - this.cp = cp - } - -////////////////////////////////////////////////////////////////////////// -// Namespace -////////////////////////////////////////////////////////////////////////// - - ** - ** Map a FFI "podName" to a Java package. - ** - override CPod resolvePod(Str name, Loc? loc) - { - // the empty package is used to represent primitives - if (name == "") return primitives - - // look for package name in classpatch - classes := cp.classes[name] - if (classes == null) - throw CompilerErr("Java package '$name' not found", loc) - - // map package to JavaPod - return JavaPod(this, name, classes) - } - - ** - ** Map class meta-data and Java members to Fantom slots - ** for the specified JavaType. - ** - virtual Void loadType(JavaType type, Str:CSlot slots) - { - JavaReflect.loadType(type, slots) - } - -////////////////////////////////////////////////////////////////////////// -// Call Resolution -////////////////////////////////////////////////////////////////////////// - - ** - ** Resolve a construction call to a Java constructor. - ** - override Expr resolveConstruction(CallExpr call) - { - // if the last argument is an it-block, then we know - // right away that we will not be passing it thru to Java, - // so strip it off to be appended as call to Obj.with - itBlock := call.args.last as ClosureExpr - if (itBlock != null && itBlock.isItBlock) - call.args.removeAt(-1) - else - itBlock = null - - // if this is an interop array like IntArray/int[] use make - // factory otherwise look for Java constructor called - JavaType base := call.target.ctype - if (base.isInteropArray) - call.method = base.method("make") - else - call.method = base.method("") - - // call resolution to deal with overloading - call = resolveCall(call) - - // we need to create an implicit target for the Java runtime - // to perform the new opcode to ensure it is on the stack - // before the args (we don't do this for interop Array classes) - if (!base.isInteropArray) - { - loc := call.loc - call.target = CallExpr.makeWithMethod(loc, null, base.newMethod) { synthetic=true } - } - - // if we stripped an it-block argument, - // add it as trailing call to Obj.with - if (itBlock != null) return itBlock.toWith(call) - return call - } - - ** - ** Resolve a construction chain call where a Fantom constructor - ** calls the super-class constructor. Type check the arguments - ** and insert any conversions needed. - ** - override Expr resolveConstructorChain(CallExpr call) - { - // we don't allow chaining to a this ctor for Java FFI - if (call.target.id !== ExprId.superExpr) - throw err("Must use super constructor call in Java FFI", call.loc) - - // route to a superclass constructor - JavaType base := call.target.ctype.deref - call.method = base.method("") - - // call resolution to deal with overloading - return resolveCall(call) - } - - ** - ** Given a dot operator slot access on the given foreign - ** base type, determine the appopriate slot to use based on - ** whether parens were used - ** base.name => noParens = true - ** base.name() => noParens = false - ** - ** In Java a given name could be bound to both a field and - ** a method. In this case we only resolve the field if - ** no parens are used. We also handle the special case of - ** Java annotations here because their element methods are - ** also mapped as Fantom fields (instance based mixin field). - ** - override CSlot? resolveSlotAccess(CType base, Str name, Bool noParens) - { - // first try to resolve as a field - field := base.field(name) - if (field != null) - { - // if no () we used and this isn't an annotation field - if (noParens && (field.isStatic || !base.isMixin)) - return field - - // if we did find a field, then make sure we use that - // field's parent type to resolve a method (becuase the - // base type might be a sub-class of a Java type in which - // case it is unware of field/method overloads) - return field.parent.method(name) - } - - // lookup method - return base.method(name) - } - - ** - ** Resolve a method call: try to find the best match - ** and apply any coercions needed. - ** - override CallExpr resolveCall(CallExpr call) - { - // try to match against all the overloaded methods - matches := CallMatch[,] - CMethod? m := call.method - while (m != null) - { - match := matchCall(call, m) - if (match != null) matches.add(match) - m = m is JavaMethod ? ((JavaMethod)m).next : null - } - - // if we have exactly one match use then use that one - if (matches.size == 1) return matches[0].apply(call) - - // if we have multiple matches; resolve to - // most specific match according to JLS rules - // TODO: this does not correct resolve when using Fantom implicit casting - if (matches.size > 1) - { - best := resolveMostSpecific(matches) - if (best != null) return best.apply(call) - } - - // zero or multiple ambiguous matches is a compiler error - s := StrBuf() - s.add(matches.isEmpty ? "Invalid args " : "Ambiguous call ") - s.add(call.name).add("(") - s.add(call.args.join(", ") |Expr arg->Str| { return arg.toTypeStr }) - s.add(")") - throw err(s.toStr, call.loc) - } - - ** - ** Check if the call matches the specified overload method. - ** If so return method and coerced args otherwise return null. - ** - internal CallMatch? matchCall(CallExpr call, CMethod m) - { - // first check if have matching numbers of args and params - args := call.args - if (m.params.size < args.size) return null - - // check if each argument is ok or can be coerced - isErr := false - newArgs := args.dup - m.params.each |CParam p, Int i| - { - if (i >= args.size) - { - // param has a default value, then that is ok - if (!p.hasDefault) isErr = true - } - else - { - // ensure arg fits parameter type (or auto-cast) - newArgs[i] = coerce(args[i], p.paramType) |->| { isErr = true } - } - } - if (isErr) return null - return CallMatch { it.method = m; it.args = newArgs } - } - - ** - ** Given a list of overloaed methods find the most specific method - ** according to Java Language Specification 15.11.2.2. The "informal - ** intuition" rule is that a method is more specific than another - ** if the first could be could be passed onto the second one. - ** - internal static CallMatch? resolveMostSpecific(CallMatch[] matches) - { - CallMatch? best := matches[0] - for (i:=1; iBool| - { - bp := b.method.params[i] - return ap.paramType.fits(bp.paramType) - } - } - -////////////////////////////////////////////////////////////////////////// -// Overrides -////////////////////////////////////////////////////////////////////////// - - ** - ** Called during Inherit step when a Fantom slot overrides a FFI slot. - ** Log and throw compiler error if there is a problem. - ** - override Void checkOverride(TypeDef t, CSlot base, SlotDef def) - { - // we don't allow Fantom to override Java methods with multiple - // overloaded versions since the Fantom type system can't actually - // override all the overloaded versions - jslot := base as JavaSlot - if (jslot?.next != null) - throw err("Cannot override Java overloaded method: '$jslot.name'", def.loc) - - // route to method override checking - if (base is JavaMethod && def is MethodDef) - checkMethodOverride(t, base, def) - } - - ** - ** Called on method/method overrides in the checkOverride callback. - ** - private Void checkMethodOverride(TypeDef t, JavaMethod base, MethodDef def) - { - // bail early if we know things aren't going to work out - if (base.params.size != def.params.size) return - - // if the return type is primitive or Java array and the - // Fantom declaration matches how it is inferred into the Fan - // type system, then just change the return type - the compiler - // will impliclty do all the return coercions - if (isOverrideInferredType(base.returnType, def.returnType)) - { - def.ret = def.inheritedRet = base.returnType - } - - // if any of the parameters is a primitive or Java array - // and the Fantom declaration matches how it is inferred into - // the Fantom type type, then change the parameter type to - // the Java override type and make the Fantom type a local - // variable: - // Java: void foo(int a) { ... } - // Fantom: Void foo(Int a) { ... } - // Result: Void foo(int a_$J) { Int a := a_$J; ... } - // - base.params.eachr |CParam bp, Int i| - { - dp := def.paramDefs[i] - if (!isOverrideInferredType(bp.paramType, dp.paramType)) return - - // add local variable: Int bar := bar_$J - local := LocalDefStmt(def.loc) - local.ctype = dp.paramType - local.name = dp.name - local.init = UnknownVarExpr(def.loc, null, dp.name + "_\$J") - def.code.stmts.insert(0, local) - - // rename parameter Int bar -> int bar_$J - dp.name = dp.name + "_\$J" - dp.paramType = bp.paramType - } - } - - ** - ** When overriding a Java method check if the base type is - ** is a Java primitive or array and the override definition is - ** matches how the Java type is inferred in the Fantom type system. - ** If we have a match return true and we'll swizzle things in - ** checkMethodOverride. - ** - static private Bool isOverrideInferredType(CType base, CType def) - { - // check if base class slot is a JavaType - java := base.toNonNullable as JavaType - if (java != null) - { - // allow primitives is it matches the inferred type - if (java.isPrimitive) return java.inferredAs == def - - // allow arrays if mapped as Foo[] -> Foo?[]? - if (java.isArray) return java.inferredAs == def.toNonNullable && def.isNullable - } - return false - } - -////////////////////////////////////////////////////////////////////////// -// CheckErrors -////////////////////////////////////////////////////////////////////////// - - ** - ** Called during CheckErrors step for a type which extends - ** a FFI class or implements any FFI mixins. - ** - override Void checkType(TypeDef def) - { - // can't subclass a primitive array like ByteArray/byte[] - if (def.base.deref is JavaType && def.base.deref->isInteropArray) - { - err("Cannot subclass from Java interop array: $def.base", def.loc) - return - } - - // we don't allow deep inheritance of Java classes because - // the Fantom constructor and Java constructor model don't match - // up past one level of inheritance - // NOTE: that that when we remove this restriction we need to - // test how field initialization works because instance$init - // is almost certain to break with the current emit design - javaBase := def.base - while (javaBase != null && !javaBase.isForeign) javaBase = javaBase.base - if (javaBase != null && javaBase !== def.base) - { - err("Cannot subclass Java class more than one level: $javaBase", def.loc) - return - } - - // ensure that when we map Fantom constructors to Java - // constructors that we don't have duplicate signatures - ctors := def.ctorDefs - ctors.each |MethodDef a, Int i| - { - ctors.each |MethodDef b, Int j| - { - if (i > j && areParamsSame(a, b)) - err("Duplicate Java FFI constructor signatures: '$b.name' and '$a.name'", a.loc) - } - } - } - - ** - ** Do the two methods have the exact same parameter types. - ** - static Bool areParamsSame(CMethod a, CMethod b) - { - if (a.params.size != b.params.size) return false - for (i:=0; i| { fits=false } - return fits - } - - ** - ** Coerce expression to expected type. If not a type match - ** then run the onErr function. - ** - override Expr coerce(Expr expr, CType expected, |->| onErr) - { - // handle easy case - actual := expr.ctype - expected = expected.deref - if (actual == expected) return expr - - // handle null literal - if (expr.id === ExprId.nullLiteral && expected.isNullable) - return expr - - // handle Fantom to Java primitives - if (expected.pod == primitives) - return coerceToPrimitive(expr, expected, onErr) - - // handle Java primitives to Fan - if (actual.pod == primitives) - return coerceFromPrimitive(expr, expected, onErr) - - // handle Java array to Fantom list - if (actual.name[0] == '[') - return coerceFromArray(expr, expected, onErr) - - // handle Fantom list to Java array - if (expected.name[0] == '[') - return coerceToArray(expr, expected, onErr) - - // handle sys::Func -> Java interface - if (actual is FuncType && expected.isMixin && expected.toNonNullable is JavaType) - return coerceFuncToInterface(expr, expected.toNonNullable, onErr) - - // handle special classes and interfaces for built-in Fantom - // classes which actually map directly to Java built-in types - if (actual.isBool && boolTypes.contains(expected.toNonNullable.signature)) return box(expr) - if (actual.isInt && intTypes.contains(expected.toNonNullable.signature)) return box(expr) - if (actual.isFloat && floatTypes.contains(expected.toNonNullable.signature)) return box(expr) - if (actual.isDecimal && decimalTypes.contains(expected.toNonNullable.signature)) return expr - if (actual.isStr && strTypes.contains(expected.toNonNullable.signature)) return expr - - // use normal Fantom coercion behavior - return super.coerce(expr, expected, onErr) - } - - ** - ** Ensure value type is boxed. - ** - private Expr box(Expr expr) - { - if (expr.ctype.isVal) - return TypeCheckExpr.coerce(expr, expr.ctype.toNullable) - else - return expr - } - - ** - ** Coerce a fan expression to a Java primitive (other - ** than the ones we support natively) - ** - Expr coerceToPrimitive(Expr expr, JavaType expected, |->| onErr) - { - actual := expr.ctype - - // sys::Int (long) -> int, short, byte - if (actual.isInt && expected.isPrimitiveIntLike) - return TypeCheckExpr.coerce(expr, expected) - - // sys::Float (double) -> float - if (actual.isFloat && expected.isPrimitiveFloat) - return TypeCheckExpr.coerce(expr, expected) - - // no coercion - type error - onErr() - return expr - } - - ** - ** Coerce a Java primitive to a Fantom type. - ** - Expr coerceFromPrimitive(Expr expr, CType expected, |->| onErr) - { - actual := (JavaType)expr.ctype - - // int, short, byte -> sys::Int (long) - if (actual.isPrimitiveIntLike) - { - if (expected.isInt || expected.isObj) - return TypeCheckExpr.coerce(expr, expected) - } - - // float -> sys::Float (float) - if (actual.isPrimitiveFloat) - { - if (expected.isFloat || expected.isObj) - return TypeCheckExpr.coerce(expr, expected) - } - - // no coercion - type error - onErr() - return expr - } - - ** - ** Coerce a Java array to a Fantom list. - ** - Expr coerceFromArray(Expr expr, CType expected, |->| onErr) - { - actual := (JavaType)expr.ctype.toNonNullable - - // if expected is array type - if (expected is JavaType && ((JavaType)expected).isArray) - if (actual.arrayOf.fits(((JavaType)expected).arrayOf)) return expr - - // if expected is Obj - if (expected.isObj) return arrayToList(expr, actual.inferredArrayOf) - - // if expected is list type - if (expected.toNonNullable is ListType) - { - expectedOf := ((ListType)expected.toNonNullable).v - if (actual.inferredArrayOf.fits(expectedOf)) return arrayToList(expr, expectedOf) - } - - // no coercion available - onErr() - return expr - } - - ** - ** Generate List.make(of, expr) where expr is Object[] - ** - private Expr arrayToList(Expr expr, CType of) - { - loc := expr.loc - ofExpr := LiteralExpr(loc, ExprId.typeLiteral, ns.typeType, of) - call := CallExpr.makeWithMethod(loc, null, listMakeFromArray, [ofExpr, expr]) - call.synthetic = true - return call - } - - ** - ** Coerce a Fantom list to Java array. - ** - Expr coerceToArray(Expr expr, CType expected, |->| onErr) - { - loc := expr.loc - expectedOf := ((JavaType)expected.toNonNullable).inferredArrayOf - actual := expr.ctype - - // if actual is list type - if (actual.toNonNullable is ListType) - { - actualOf := ((ListType)actual.toNonNullable).v - if (actualOf.fits(expectedOf)) - { - // (Foo[])list.asArray(cls) - clsLiteral := CallExpr.makeWithMethod(loc, null, JavaType.classLiteral(this, expectedOf)) - asArray := CallExpr.makeWithMethod(loc, expr, listAsArray, [clsLiteral]) - return TypeCheckExpr.coerce(asArray, expected) - } - } - - // no coercion available - onErr() - return expr - } - - ** - ** Attempt to coerce a parameterized sys::Func expr to a Java - ** interface if the interface supports exactly one matching method. - ** - Expr coerceFuncToInterface(Expr expr, JavaType expected, |->| onErr) - { - // check if we have exactly one abstract method in the expected type - loc := expr.loc - abstracts := expected.methods.findAll |CMethod m->Bool| { return m.isAbstract } - if (abstracts.size != 1) { onErr(); return expr } - method := abstracts.first - - // check if we have a match - FuncType funcType := (FuncType)expr.ctype - if (!isFuncToInterfaceMatch(funcType, method)) { onErr(); return expr } - - // check if we've already generated a wrapper for this combo - key := "${funcType.signature}+${method.qname}" - ctor := funcWrappers[key] - if (ctor == null) - { - ctor = generateFuncToInterfaceWrapper(expr.loc, funcType, expected, method) - funcWrappers[key] = ctor - } - - // replace expr with FuncWrapperX(expr) - call := CallExpr.makeWithMethod(loc, null, ctor, [expr]) - call.synthetic = true - return call - } - - ** - ** Return if the specified function type can be used to implement - ** the specified interface method. - ** - Bool isFuncToInterfaceMatch(FuncType funcType, CMethod method) - { - // sanity check to map to callX method - can't handle more than 8 args - if (method.params.size > 8) return false - - // check if method is match for function; first check is that - // method must supply all the arguments required by the function - if (funcType.params.size > method.params.size) return false - - // check that func return type fits method return - retOk := method.returnType.isVoid || fits(funcType.ret, method.returnType) - if (!retOk) return false - - // check all the method parameters fit the function parameters - paramsOk := funcType.params.all |CType f, Int i->Bool| { return fits(f, method.params[i].paramType) } - if (!paramsOk) return false - - return true - } - - ** - ** Generate the wrapper which implements the specified expected interface - ** and overrides the specified method which calls the function. - ** - CMethod generateFuncToInterfaceWrapper(Loc loc, FuncType funcType, CType expected, CMethod method) - { - // Fantom: func typed as |Str| - // Java: interface Foo { void bar(String) } - // Result: FuncWrapperX(func) - // - // class FuncWrapperX : Foo - // { - // new make(Func f) { _func = f } - // override Void bar(Str a) { _func.call(a) } - // Func _func - // } - - // generate FuncWrapper class - name := "FuncWrapper" + funcWrappers.size - cls := TypeDef(ns, loc, compiler.types[0].unit, name, FConst.Internal + FConst.Synthetic) - cls.base = ns.objType - cls.mixins = [expected] - addTypeDef(cls) - - // generate FuncWrapper._func field - field := FieldDef(loc, cls) - ((SlotDef)field).name = "_func" - ((DefNode)field).flags = FConst.Private + FConst.Storage + FConst.Synthetic - field.fieldType = funcType - cls.addSlot(field) - - // generate FuncWrapper.make constructor - ctor := MethodDef(loc, cls, "make", FConst.Internal + FConst.Ctor + FConst.Synthetic) - ctor.ret = ns.voidType - ctor.paramDefs = [ParamDef(loc, funcType, "f")] - ctor.code = Block.make(loc) - ctor.code.stmts.add(BinaryExpr.makeAssign( - FieldExpr(loc, ThisExpr(loc), field), - UnknownVarExpr(loc, null, "f")).toStmt) - ctor.code.stmts.add(ReturnStmt.make(loc)) - cls.addSlot(ctor) - - // generate FuncWrapper override of abstract method - over := MethodDef(loc, cls, method.name, FConst.Public + FConst.Override + FConst.Synthetic) - over.ret = method.returnType - over.paramDefs = ParamDef[,] - over.code = Block.make(loc) - callArity := "call" - call := CallExpr.makeWithMethod(loc, FieldExpr(loc, ThisExpr(loc), field), funcType.method(callArity)) - method.params.each |CParam param, Int i| - { - paramName := "p$i" - over.params.add(ParamDef(loc, param.paramType, paramName)) - if (i < funcType.params.size) - call.args.add(UnknownVarExpr(loc, null, paramName)) - } - if (method.returnType.isVoid) - over.code.stmts.add(call.toStmt).add(ReturnStmt(loc)) - else - over.code.stmts.add(ReturnStmt(loc, call)) - cls.addSlot(over) - - // return the ctor which we use for coercion - return ctor - } - -////////////////////////////////////////////////////////////////////////// -// Reflection -////////////////////////////////////////////////////////////////////////// - - ** - ** Get a CMethod representation for 'List.make(Type, Object[])' - ** - once CMethod listMakeFromArray() - { - return JavaMethod( - this.ns.listType, - "make", - FConst.Public + FConst.Static, - this.ns.listType.toNullable, - [ - JavaParam("of", this.ns.typeType), - JavaParam("array", objectArrayType) - ]) - } - - ** - ** Get a CMethod representation for 'Object[] List.asArray()' - ** - once CMethod listAsArray() - { - return JavaMethod( - this.ns.listType, - "asArray", - FConst.Public, - objectArrayType, - [JavaParam("cls", classType)]) - } - - ** - ** Get a CType representation for 'java.lang.Class' - ** - once JavaType classType() - { - return ns.resolveType("[java]java.lang::Class") - } - - ** - ** Get a CType representation for 'java.lang.Object[]' - ** - once JavaType objectArrayType() - { - return ns.resolveType("[java]java.lang::[Object") - } - -////////////////////////////////////////////////////////////////////////// -// Fields -////////////////////////////////////////////////////////////////////////// - - const static Str[] boolTypes := Str[ - "[java]java.io::Serializable", - "[java]java.lang::Comparable", - ] - - const static Str[] intTypes := Str[ - "[java]java.lang::Number", - "[java]java.io::Serializable", - "[java]java.lang::Comparable", - ] - - const static Str[] floatTypes := Str[ - "[java]java.lang::Number", - "[java]java.io::Serializable", - "[java]java.lang::Comparable", - ] - - const static Str[] decimalTypes := Str[ - "[java]java.lang::Number", - "[java]java.io::Serializable", - "[java]java.lang::Comparable", - ] - - const static Str[] strTypes := Str[ - "[java]java.io::Serializable", - "[java]java.lang::CharSequence", - "[java]java.lang::Comparable", - ] - - JavaPrimitives primitives := JavaPrimitives(this) - ClassPath cp - - private Str:CMethod funcWrappers := Str:CMethod[:] // funcType+method:ctor - -} - -************************************************************************** -** CallMatch -************************************************************************** - -internal class CallMatch -{ - CallExpr apply(CallExpr call) - { - call.args = args - call.method = method - call.ctype = method.isCtor ? method.parent : method.returnType - return call - } - - override Str toStr() { return method.signature } - - CMethod? method // matched method - Expr[]? args // coerced arguments -} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.flx b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.flx deleted file mode 100644 index 4c8a667..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.flx +++ /dev/null @@ -1,57 +0,0 @@ -type tiny = "%i8"; -type int = "%i32"; -typedef bool = 2; -fun add : int*int -> int = "%add"; -fun sub : int*int -> int = "%sub"; -fun eq : int*int -> bool = "%eq"; -fun lnot : bool -> bool = "%lnot"; -proc exit : int = "exit"; - -// comment 1 -/* - /* - foo bar - */ -asdas -*/ - -noinline fun foo (x:int) = { - val y = 6; - return x + y; -} - -noinline proc fake_exit (x:int) { - exit x; - return; -} - -noinline fun bar (x:int) = { - var y = 10; - noinline proc baz () { - y = 20; - return; - } - baz (); - return x + y; -} - -noinline fun x (a:int, b:int, c:tiny) = { - val x1 = a; - val x2 = b; - val x3 = c; - noinline fun y (d:int, e:int, f:tiny) = { - val y1 = x1; - val y2 = x2; - val y3 = f; - noinline fun z (g:int, h:int, i:tiny) = { - val z1 = x1; - val z2 = x2; - val z3 = i; - return z1; - } - return z (y1,y2,y3); - } - return y (x1,x2,x3); -} - -fake_exit $ (foo 2) + (bar 3) + (x (1,2,3t)); diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.gdc b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.gdc deleted file mode 100644 index c7e36b8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.gdc +++ /dev/null @@ -1,13 +0,0 @@ -# Execute the date dimension MAQL script -ExecuteMaql(maqlFile="examples/quotes/quote_date.maql"); - -# load the stock quotes data file -# the data file config has been generated -LoadCsv(csvDataFile="examples/quotes/quotes.csv", - header="true", - configFile="examples/quotes/quotes.config.xml"); - -# transfer the stock quotes data -TransferLastSnapshot(); - -LoadGoogleAnalytics(configFile="examples/ga/ga.config.xml",username="example@gmail.com",password="******",profileId="ga:7468896",dimensions="ga:date|ga:browser|ga:browserVersion|ga:country|ga:isMobile",metrics="ga:bounces|ga:newVisits|ga:pageViews|ga:visits",startDate="2008-01-01",endDate="2010-06-15"); diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.groovy b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.groovy deleted file mode 100644 index 903863d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.groovy +++ /dev/null @@ -1,97 +0,0 @@ -// This source code comes from http://www.odelia-technologies.com/node/200 - -package com.odelia.groovy.simpleworkflow - - -class SimpleWorkflowEngine { - def workflowMap = [:] - def context = [:] - def beforeActivityName = 'beforeActivity' - def afterActivityName = 'afterActivity' - - SimpleWorkflowEngine(workflow, context = [:]) { - this.context = context - parseWorkflow(workflow) - } - - def parseWorkflow(workflow) { - workflowMap = new WorkflowParser().parse(workflow) - } - - def getActivityValue(activity) { - assert activity instanceof String - if (!workflowMap[activity]) - throw new RuntimeException("$activity activity doesn't exist") - workflowMap[activity] - } - - def execute(activity, pause) { - if (workflowMap[beforeActivityName]) { - getActivityValue(beforeActivityName)(context, activity) - } - - def activityValue = getActivityValue(activity) - - // Determine the next activity to execute - def nextActivity - switch (activityValue) { - case String: nextActivity = activityValue; break - case Closure: nextActivity = activityValue(context); break - case Class: nextActivity = activityValue.newInstance()(context) - } - - if (workflowMap[afterActivityName]) { - getActivityValue(afterActivityName)(context, activity, nextActivity) - } - - if (!pause && nextActivity) - call(nextActivity) - else - nextActivity - } - - def call(activity) { - execute(activity, false) - } - - def nextActivity(activity) { - execute(activity, true) - } - - static void main(String[] args) { - if (args.size() != 2) { - println 'Usage: com.odelia.groovy.simpleworkflow.SimpleWorkflowEngine ' - return - } - SimpleWorkflowEngine.newInstance(new File(args[0]))(args[1]) - } - -} - -private class WorkflowParser { - def map = [:] - - def methodMissing(String name, args) { - map[name] = args[0] - } - - def parse(Closure wf) { - wf.delegate = this - wf.resolveStrategy = Closure.DELEGATE_FIRST - wf() - map - } - - def workflow = { it -> - it.delegate = this - it.resolveStrategy = Closure.DELEGATE_FIRST - it() - } - - def parse(File workflowDef) { - def binding = new Binding([workflow: workflow]) - def shell = new GroovyShell(binding) - shell.evaluate(workflowDef) - map - } -} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.html b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.html deleted file mode 100644 index b22f0c6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.html +++ /dev/null @@ -1,339 +0,0 @@ - - - - - - -
    # -*- coding: utf-8 -*-
    -"""
    -    pocoo.pkg.core.acl
    -    ~~~~~~~~~~~~~~~~~~
    -
    -    Pocoo ACL System.
    -
    -"""
    -
    -from pocoo.db import meta
    -
    -from pocoo.pkg.core.forum import Site, Forum, Thread
    -from pocoo.pkg.core.user import User, Group
    -
    -from pocoo.pkg.core.db import users, groups, group_members, privileges, \
    -     forums, posts, acl_mapping, acl_subjects, acl_objects
    -
    -
    -class AclManager(object):
    -    """
    -    Manager object to manage ALCs.
    -    """
    -    STRONG_NO = -1
    -
    -    WEAK_NO = 0
    -    WEAK_YES = 1
    -    STRONG_YES = 2
    -
    -    def __init__(self, ctx, subject):
    -        self.ctx = ctx
    -
    -        self.subject = subject
    -        if isinstance(subject, User):
    -            self._type = 'user'
    -
    -        elif isinstance(subject, Group):
    -            self._type = 'group'
    -
    -        else:
    -            raise ValueError('neither user or group specified')
    -
    -    def allow(self, privilege, obj, force=False):
    -        """Allows the subject privilege on obj."""
    -
    -        return self._set(privilege, obj, 1 + bool(force))
    -
    -    def default(self, privilege, obj):
    -        """Sets the state for privilege on obj back to weak yes."""
    -
    -        return self._set(privilege, obj, 0)
    -
    -    def deny(self, privilege, obj, force=False):
    -        """Denies the subject privilege on obj."""
    -
    -        return self._set(privilege, obj, -1 - bool(force))
    -
    -    def can_access(self, privilege, obj):
    -        """Checks if the current subject with the required privilege
    -        somehow. Either directly or when the subject is a user and
    -        one of its groups can access it."""
    -
    -        #XXX: maybe this could be one big query instead of 4
    -        #XXX: this currently does not work correctly, therefore return True
    -        return True
    -
    -        if not isinstance(obj, (Forum, Thread, Site.__class__)):
    -            raise TypeError('obj must be a forum, thread or site')
    -        privilege = privilege.upper()
    -        s = self._get_subject_join().alias('s').c
    -
    -        def do_check(obj, tendency):
    -            db = self.ctx.engine
    -
    -            o = self._get_object_join(obj).alias('o').c
    -
    -            # self check
    -            r = db.execute(meta.select([acl_mapping.c.state],
    -                (acl_mapping.c.priv_id == privileges.c.priv_id) &
    -
    -                (acl_mapping.c.subject_id == s.subject_id) &
    -                (acl_mapping.c.object_id == o.object_id) &
    -
    -                (privileges.c.name == privilege)
    -            ))
    -            row = r.fetchone()
    -            if row is not None:
    -                if row['state'] in (self.STRONG_NO, self.STRONG_YES):
    -                    return row['state'] == self.STRONG_YES
    -
    -                tendency = row['state']
    -
    -            # if the controlled subject is a user check all groups
    -            if isinstance(self.subject, User):
    -                r = db.execute(meta.select([acl_mapping.c.state],
    -                    (acl_mapping.c.object_id == o.object_id) &
    -
    -                    (acl_mapping.c.subject_id == groups.c.subject_id) &
    -
    -                    (groups.c.group_id == group_members.c.group_id) &
    -
    -                    (group_members.c.user_id == self.subject.user_id)
    -                ))
    -                while True:
    -                    row = r.fetchone()
    -                    if row is None:
    -                        break
    -
    -                    state = row[0]
    -                    if state in (self.STRONG_YES, self.STRONG_NO):
    -                        return state == self.STRONG_YES
    -
    -                    if tendency is None:
    -                        tendency = state
    -                    elif tendency == self.WEAK_NO and state == self.WEAK_YES:
    -                        tendency = self.WEAK_YES
    -
    -            # check related objects
    -            if isinstance(obj, Thread):
    -                return do_check(obj.forum, tendency)
    -            elif isinstance(obj, Forum):
    -                return do_check(Site, tendency)
    -            else:
    -                return tendency
    -
    -        return do_check(obj, None) in (self.WEAK_YES, self.STRONG_YES)
    -
    -    def _set(self, privilege, obj, state):
    -        """Helper functions for settings privileges."""
    -
    -        privilege = privilege.upper()
    -        if self.subject.subject_id is None:
    -            self._bootstrap()
    -        if obj.object_id is None:
    -            self._bootstrap_object(obj)
    -        # special state "0" which means delete
    -
    -        if not state:
    -            p = meta.select([privileges.c.priv_id], privileges.c.name == privilege)
    -            self.ctx.engine.execute(acl_mapping.delete(
    -                (acl_mapping.c.priv_id == p.c.priv_id) &
    -
    -                (acl_mapping.c.subject_id == self.subject.subject_id) &
    -
    -                (acl_mapping.c.object_id == obj.object_id)
    -            ))
    -            return
    -        # touch privilege and check existing mapping
    -
    -        priv_id = self._fetch_privilege(privilege)
    -        r = self.ctx.engine.execute(meta.select([acl_mapping.c.state],
    -            (acl_mapping.c.priv_id == priv_id) &
    -
    -            (acl_mapping.c.subject_id == self.subject.subject_id) &
    -
    -            (acl_mapping.c.object_id == obj.object_id)
    -        ))
    -        row = r.fetchone()
    -        if row is not None:
    -            # this rule exists already
    -
    -            if row['state'] == state:
    -                return
    -            # goddamn, same rule - different state, delete old first
    -            self._set(privilege, obj, 0)
    -        # insert new rule
    -
    -        self.ctx.engine.execute(acl_mapping.insert(),
    -            priv_id = priv_id,
    -            subject_id = self.subject.subject_id,
    -            object_id = obj.object_id,
    -            state = state
    -
    -        )
    -
    -    def _bootstrap(self):
    -        """This method is automatically called when subject_id is
    -        None and an subject_id is required."""
    -        r = self.ctx.engine.execute(acl_subjects.insert(),
    -            subject_type = self._type
    -
    -        )
    -        self.subject.subject_id = r.last_inserted_ids()[0]
    -        self.subject.save()
    -
    -    def _bootstrap_object(self, obj):
    -        """Like _bootstrap but works for objects."""
    -
    -        objtype = self._get_object_type(obj)
    -        r = self.ctx.engine.execute(acl_objects.insert(),
    -            object_type = objtype
    -
    -        )
    -        obj.object_id = r.last_inserted_ids()[0]
    -        obj.save()
    -
    -    def _get_object_type(self, obj):
    -        if isinstance(obj, Forum):
    -            return 'forum'
    -
    -        elif isinstance(obj, Thread):
    -            return 'thread'
    -        elif obj is Site:
    -            return 'site'
    -
    -        raise TypeError('obj isn\'t a forum or thread')
    -
    -    def _get_object_join(self, obj):
    -        """Returns a subjoin for the object id."""
    -
    -        t = self._get_object_type(obj)
    -        if t == 'forum':
    -            return meta.select([forums.c.object_id],
    -                forums.c.forum_id == obj.forum_id
    -
    -            )
    -        elif t == 'thread':
    -            return meta.select([posts.c.object_id],
    -                posts.c.post_id == obj.post_id
    -
    -            )
    -        else:
    -            # XXX: it works ^^
    -            # i really want something like meta.select('0 as group_id')
    -            class Fake(object):
    -                def alias(self, n):
    -                    class _C(object):
    -                        class c(object):
    -                            object_id = 0
    -
    -                    return _C
    -            return Fake()
    -
    -    def _get_subject_join(self):
    -        """Returns a subjoin for the subject id."""
    -
    -        if self._type == 'user':
    -            return meta.select([users.c.subject_id],
    -                users.c.user_id == self.subject.user_id
    -
    -            )
    -        return meta.select([groups.c.subject_id],
    -            groups.c.group_id == self.subject.group_id
    -
    -        )
    -
    -    def _fetch_privilege(self, name):
    -        """Returns the priv_id for the given privilege. If it
    -        doesn\'t exist by now the system will create a new
    -        privilege."""
    -        r = self.ctx.engine.execute(meta.select([privileges.c.priv_id],
    -            privileges.c.name == name
    -
    -        ))
    -        row = r.fetchone()
    -        if row is not None:
    -            return row[0]
    -        r = self.ctx.engine.execute(privileges.insert(),
    -            name = name
    -
    -        )
    -        return r.last_inserted_ids()[0]
    -
    -    def __repr__(self):
    -        if self._type == 'user':
    -            id_ = self.subject.user_id
    -
    -        else:
    -            id_ = self.subject.group_id
    -        if self.subject.subject_id is None:
    -            return '<%s %s:%d inactive>' % (
    -                self.__class__.__name__,
    -                self._type,
    -                id_
    -
    -            )
    -        return '<%s %s:%d active as %d>' % (
    -            self.__class__.__name__,
    -            self._type,
    -            id_,
    -            self.subject.subject_id
    -
    -        )
    -
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.idr b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.idr
    deleted file mode 100644
    index f0e96d8..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.idr
    +++ /dev/null
    @@ -1,93 +0,0 @@
    -module Main
    -
    -data Ty = TyInt | TyBool | TyFun Ty Ty
    -
    -interpTy : Ty -> Type
    -interpTy TyInt       = Int
    -interpTy TyBool      = Bool
    -interpTy (TyFun s t) = interpTy s -> interpTy t
    -
    -using (G : Vect n Ty)
    -
    -  data Env : Vect n Ty -> Type where
    -      Nil  : Env Nil
    -      (::) : interpTy a -> Env G -> Env (a :: G)
    -
    -  data HasType : (i : Fin n) -> Vect n Ty -> Ty -> Type where
    -      stop : HasType fZ (t :: G) t
    -      pop  : HasType k G t -> HasType (fS k) (u :: G) t
    -
    -  lookup : HasType i G t -> Env G -> interpTy t
    -  lookup stop    (x :: xs) = x
    -  lookup (pop k) (x :: xs) = lookup k xs
    -
    -  data Expr : Vect n Ty -> Ty -> Type where
    -      Var : HasType i G t -> Expr G t
    -      Val : (x : Int) -> Expr G TyInt
    -      Lam : Expr (a :: G) t -> Expr G (TyFun a t)
    -      App : Expr G (TyFun a t) -> Expr G a -> Expr G t
    -      Op  : (interpTy a -> interpTy b -> interpTy c) -> Expr G a -> Expr G b ->
    -            Expr G c
    -      If  : Expr G TyBool -> Expr G a -> Expr G a -> Expr G a
    -      Bind : Expr G a -> (interpTy a -> Expr G b) -> Expr G b
    -
    -  dsl expr
    -      lambda      = Lam
    -      variable    = Var
    -      index_first = stop
    -      index_next  = pop
    -
    -  (<$>) : |(f : Expr G (TyFun a t)) -> Expr G a -> Expr G t
    -  (<$>) = \f, a => App f a
    -
    -  pure : Expr G a -> Expr G a
    -  pure = id
    -
    -  syntax IF [x] THEN [t] ELSE [e] = If x t e
    -
    -  (==) : Expr G TyInt -> Expr G TyInt -> Expr G TyBool
    -  (==) = Op (==)
    -
    -  (<) : Expr G TyInt -> Expr G TyInt -> Expr G TyBool
    -  (<) = Op (<)
    -
    -  instance Num (Expr G TyInt) where
    -    (+) x y = Op (+) x y
    -    (-) x y = Op (-) x y
    -    (*) x y = Op (*) x y
    -
    -    abs x = IF (x < 0) THEN (-x) ELSE x
    -
    -    fromInteger = Val . fromInteger
    -
    -  interp : Env G -> {static} Expr G t -> interpTy t
    -  interp env (Var i)     = lookup i env
    -  interp env (Val x)     = x
    -  interp env (Lam sc)    = \x => interp (x :: env) sc
    -  interp env (App f s)   = (interp env f) (interp env s)
    -  interp env (Op op x y) = op (interp env x) (interp env y)
    -  interp env (If x t e)  = if (interp env x) then (interp env t) else (interp env e)
    -  interp env (Bind v f)  = interp env (f (interp env v))
    -
    -  eId : Expr G (TyFun TyInt TyInt)
    -  eId = expr (\x => x)
    -
    -  eTEST : Expr G (TyFun TyInt (TyFun TyInt TyInt))
    -  eTEST = expr (\x, y => y)
    -
    -  eAdd : Expr G (TyFun TyInt (TyFun TyInt TyInt))
    -  eAdd = expr (\x, y => Op (+) x y)
    -
    -  eDouble : Expr G (TyFun TyInt TyInt)
    -  eDouble = expr (\x => App (App eAdd x) (Var stop))
    -
    -  eFac : Expr G (TyFun TyInt TyInt)
    -  eFac = expr (\x => IF x == 0 THEN 1 ELSE [| eFac (x - 1) |] * x)
    -
    -testFac : Int
    -testFac = interp [] eFac 4
    -
    -main : IO ()
    -main = print testFac
    -
    -
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.ini b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.ini
    deleted file mode 100644
    index a447803..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.ini
    +++ /dev/null
    @@ -1,10 +0,0 @@
    -[section]
    -
    -foo = bar
    -continued = foo
    -  baz
    -conttwo =
    -  foo
    -; comment
    -# comment
    -
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.java b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.java
    deleted file mode 100644
    index 64c0853..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.java
    +++ /dev/null
    @@ -1,653 +0,0 @@
    -/*
    - * Created on 13-Mar-2004
    - * Created by James Yeh
    - * Copyright (C) 2004, 2005, 2006 Aelitis, All Rights Reserved.
    - *
    - * This program is free software; you can redistribute it and/or
    - * modify it under the terms of the GNU General Public License
    - * as published by the Free Software Foundation; either version 2
    - * of the License, or (at your option) any later version.
    - * This program is distributed in the hope that it will be useful,
    - * but WITHOUT ANY WARRANTY; without even the implied warranty of
    - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    - * GNU General Public License for more details.
    - * You should have received a copy of the GNU General Public License
    - * along with this program; if not, write to the Free Software
    - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
    - * 
    - * AELITIS, SAS au capital de 46,603.30 euros
    - * 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France.
    - *
    - */
    -
    -package org.gudy.azureus2.platform.macosx;
    -
    -import org.gudy.azureus2.core3.logging.*;
    -import org.gudy.azureus2.core3.util.AEMonitor;
    -import org.gudy.azureus2.core3.util.Debug;
    -import org.gudy.azureus2.core3.util.SystemProperties;
    -import org.gudy.azureus2.platform.PlatformManager;
    -import org.gudy.azureus2.platform.PlatformManagerCapabilities;
    -import org.gudy.azureus2.platform.PlatformManagerListener;
    -import org.gudy.azureus2.platform.macosx.access.jnilib.OSXAccess;
    -
    -import org.gudy.azureus2.plugins.platform.PlatformManagerException;
    -
    -import java.io.BufferedReader;
    -import java.io.File;
    -import java.io.IOException;
    -import java.io.InputStreamReader;
    -import java.text.MessageFormat;
    -import java.util.HashSet;
    -
    -
    -/**
    - * Performs platform-specific operations with Mac OS X
    - *
    - * @author James Yeh
    - * @version 1.0 Initial Version
    - * @see PlatformManager
    - */
    -public class PlatformManagerImpl implements PlatformManager
    -{
    -    private static final LogIDs LOGID = LogIDs.CORE;
    -
    -    protected static PlatformManagerImpl singleton;
    -    protected static AEMonitor class_mon = new AEMonitor("PlatformManager");
    -
    -    private static final String USERDATA_PATH = new File(System.getProperty("user.home") + "/Library/Application Support/").getPath();
    -
    -    //T: PlatformManagerCapabilities
    -    private final HashSet capabilitySet = new HashSet();
    -
    -    /**
    -     * Gets the platform manager singleton, which was already initialized
    -     */
    -    public static PlatformManagerImpl getSingleton()
    -    {
    -        return singleton;
    -    }
    -
    -    /**
    -     * Tries to enable cocoa-java access and instantiates the singleton
    -     */
    -    static
    -    {
    -        initializeSingleton();
    -    }
    -
    -    /**
    -     * Instantiates the singleton
    -     */
    -    private static void initializeSingleton()
    -    {
    -        try
    -        {
    -            class_mon.enter();
    -            singleton = new PlatformManagerImpl();
    -        }
    -        catch (Throwable e)
    -        {
    -        	Logger.log(new LogEvent(LOGID, "Failed to initialize platform manager"
    -					+ " for Mac OS X", e));
    -        }
    -        finally
    -        {
    -            class_mon.exit();
    -        }
    -    }
    -
    -    /**
    -     * Creates a new PlatformManager and initializes its capabilities
    -     */
    -    public PlatformManagerImpl()
    -    {
    -        capabilitySet.add(PlatformManagerCapabilities.RecoverableFileDelete);
    -        capabilitySet.add(PlatformManagerCapabilities.ShowFileInBrowser);
    -        capabilitySet.add(PlatformManagerCapabilities.ShowPathInCommandLine);
    -        capabilitySet.add(PlatformManagerCapabilities.CreateCommandLineProcess);
    -        capabilitySet.add(PlatformManagerCapabilities.GetUserDataDirectory);
    -        capabilitySet.add(PlatformManagerCapabilities.UseNativeScripting);
    -        capabilitySet.add(PlatformManagerCapabilities.PlaySystemAlert);
    -        
    -        if (OSXAccess.isLoaded()) {
    -	        capabilitySet.add(PlatformManagerCapabilities.GetVersion);
    -        }
    -    }
    -
    -    /**
    -     * {@inheritDoc}
    -     */
    -    public int getPlatformType()
    -    {
    -        return PT_MACOSX;
    -    }
    -
    -    /**
    -     * {@inheritDoc}
    -     */
    -    public String getVersion() throws PlatformManagerException
    -    {
    -    	if (!OSXAccess.isLoaded()) {
    -        throw new PlatformManagerException("Unsupported capability called on platform manager");
    -    	}
    -    	
    -    	return OSXAccess.getVersion();
    -    }
    -
    -    /**
    -     * {@inheritDoc}
    -     * @see org.gudy.azureus2.core3.util.SystemProperties#getUserPath()
    -     */
    -    public String getUserDataDirectory() throws PlatformManagerException
    -    {
    -        return USERDATA_PATH;
    -    }
    -
    -	public File
    -	getLocation(
    -		long	location_id )
    -	
    -		throws PlatformManagerException
    -	{
    -		if ( location_id == LOC_USER_DATA ){
    -			
    -			return( new File( USERDATA_PATH ));
    -		}
    -		
    -		return( null );
    -	}
    -    /**
    -     * Not implemented; returns True
    -     */
    -    public boolean isApplicationRegistered() throws PlatformManagerException
    -    {
    -        return true;
    -    }
    -
    -    
    -	public String
    -	getApplicationCommandLine()
    -		throws PlatformManagerException
    -	{
    -		try{	    
    -			String	bundle_path = System.getProperty("user.dir") +SystemProperties.SEP+ SystemProperties.getApplicationName() + ".app";
    -
    -			File osx_app_bundle = new File( bundle_path ).getAbsoluteFile();
    -			
    -			if( !osx_app_bundle.exists() ) {
    -				String msg = "OSX app bundle not found: [" +osx_app_bundle.toString()+ "]";
    -				System.out.println( msg );
    -				if (Logger.isEnabled())
    -					Logger.log(new LogEvent(LOGID, msg));		
    -				throw new PlatformManagerException( msg );
    -			}
    -			
    -			return "open -a \"" +osx_app_bundle.toString()+ "\"";
    -			//return osx_app_bundle.toString() +"/Contents/MacOS/JavaApplicationStub";
    -			
    -		}
    -		catch( Throwable t ){	
    -			t.printStackTrace();
    -			return null;
    -		}
    -	}
    -	
    -	
    -	public boolean
    -	isAdditionalFileTypeRegistered(
    -		String		name,				// e.g. "BitTorrent"
    -		String		type )				// e.g. ".torrent"
    -	
    -		throws PlatformManagerException
    -	{
    -	    throw new PlatformManagerException("Unsupported capability called on platform manager");
    -	}
    -	
    -	public void
    -	unregisterAdditionalFileType(
    -		String		name,				// e.g. "BitTorrent"
    -		String		type )				// e.g. ".torrent"
    -		
    -		throws PlatformManagerException
    -	{
    -		throw new PlatformManagerException("Unsupported capability called on platform manager");
    -	}
    -	
    -	public void
    -	registerAdditionalFileType(
    -		String		name,				// e.g. "BitTorrent"
    -		String		description,		// e.g. "BitTorrent File"
    -		String		type,				// e.g. ".torrent"
    -		String		content_type )		// e.g. "application/x-bittorrent"
    -	
    -		throws PlatformManagerException
    -	{
    -	   throw new PlatformManagerException("Unsupported capability called on platform manager");
    -	}
    -	
    -    /**
    -     * Not implemented; does nothing
    -     */
    -    public void registerApplication() throws PlatformManagerException
    -    {
    -        // handled by LaunchServices and/0r user interaction
    -    }
    -
    -    /**
    -     * {@inheritDoc}
    -     */
    -    public void createProcess(String cmd, boolean inheritsHandles) throws PlatformManagerException
    -    {
    -        try
    -        {
    -            performRuntimeExec(cmd.split(" "));
    -        }
    -        catch (Throwable e)
    -        {
    -            throw new PlatformManagerException("Failed to create process", e);
    -        }
    -    }
    -
    -    /**
    -     * {@inheritDoc}
    -     */
    -    public void performRecoverableFileDelete(String path) throws PlatformManagerException
    -    {
    -        File file = new File(path);
    -        if(!file.exists())
    -        {
    -	        	if (Logger.isEnabled())
    -							Logger.log(new LogEvent(LOGID, LogEvent.LT_WARNING, "Cannot find "
    -									+ file.getName()));
    -            return;
    -        }
    -
    -        boolean useOSA = !NativeInvocationBridge.sharedInstance().isEnabled() || !NativeInvocationBridge.sharedInstance().performRecoverableFileDelete(file);
    -
    -        if(useOSA)
    -        {
    -            try
    -            {
    -                StringBuffer sb = new StringBuffer();
    -                sb.append("tell application \"");
    -                sb.append("Finder");
    -                sb.append("\" to move (posix file \"");
    -                sb.append(path);
    -                sb.append("\" as alias) to the trash");
    -
    -                performOSAScript(sb);
    -            }
    -            catch (Throwable e)
    -            {
    -                throw new PlatformManagerException("Failed to move file", e);
    -            }
    -        }
    -    }
    -
    -    /**
    -     * {@inheritDoc}
    -     */
    -    public boolean hasCapability(PlatformManagerCapabilities capability)
    -    {
    -        return capabilitySet.contains(capability);
    -    }
    -
    -    /**
    -     * {@inheritDoc}
    -     */
    -    public void dispose()
    -    {
    -        NativeInvocationBridge.sharedInstance().dispose();
    -    }
    -
    -    /**
    -     * {@inheritDoc}
    -     */
    -    public void setTCPTOSEnabled(boolean enabled) throws PlatformManagerException
    -    {
    -        throw new PlatformManagerException("Unsupported capability called on platform manager");
    -    }
    -
    -	public void
    -    copyFilePermissions(
    -		String	from_file_name,
    -		String	to_file_name )
    -	
    -		throws PlatformManagerException
    -	{
    -	    throw new PlatformManagerException("Unsupported capability called on platform manager");		
    -	}
    -	
    -    /**
    -     * {@inheritDoc}
    -     */
    -    public void showFile(String path) throws PlatformManagerException
    -    {
    -        File file = new File(path);
    -        if(!file.exists())
    -        {
    -        	if (Logger.isEnabled())
    -        		Logger.log(new LogEvent(LOGID, LogEvent.LT_WARNING, "Cannot find "
    -        				+ file.getName()));
    -            throw new PlatformManagerException("File not found");
    -        }
    -
    -        showInFinder(file);
    -    }
    -
    -    // Public utility methods not shared across the interface
    -
    -    /**
    -     * Plays the system alert (the jingle is specified by the user in System Preferences)
    -     */
    -    public void playSystemAlert()
    -    {
    -        try
    -        {
    -            performRuntimeExec(new String[]{"beep"});
    -        }
    -        catch (IOException e)
    -        {
    -        	if (Logger.isEnabled())
    -        		Logger.log(new LogEvent(LOGID, LogEvent.LT_WARNING,
    -						"Cannot play system alert"));
    -        	Logger.log(new LogEvent(LOGID, "", e));
    -        }
    -    }
    -
    -    /**
    -     * 

    Shows the given file or directory in Finder

    - * @param path Absolute path to the file or directory - */ - public void showInFinder(File path) - { - boolean useOSA = !NativeInvocationBridge.sharedInstance().isEnabled() || !NativeInvocationBridge.sharedInstance().showInFinder(path); - - if(useOSA) - { - StringBuffer sb = new StringBuffer(); - sb.append("tell application \""); - sb.append(getFileBrowserName()); - sb.append("\" to reveal (posix file \""); - sb.append(path); - sb.append("\" as alias)"); - - try - { - performOSAScript(sb); - } - catch (IOException e) - { - Logger.log(new LogAlert(LogAlert.UNREPEATABLE, LogAlert.AT_ERROR, e - .getMessage())); - } - } - } - - /** - *

    Shows the given file or directory in Terminal by executing cd /absolute/path/to

    - * @param path Absolute path to the file or directory - */ - public void showInTerminal(String path) - { - showInTerminal(new File(path)); - } - - /** - *

    Shows the given file or directory in Terminal by executing cd /absolute/path/to

    - * @param path Absolute path to the file or directory - */ - public void showInTerminal(File path) - { - if (path.isFile()) - { - path = path.getParentFile(); - } - - if (path != null && path.isDirectory()) - { - StringBuffer sb = new StringBuffer(); - sb.append("tell application \""); - sb.append("Terminal"); - sb.append("\" to do script \"cd "); - sb.append(path.getAbsolutePath().replaceAll(" ", "\\ ")); - sb.append("\""); - - try - { - performOSAScript(sb); - } - catch (IOException e) - { - Logger.log(new LogAlert(LogAlert.UNREPEATABLE, LogAlert.AT_ERROR, e - .getMessage())); - } - } - else - { - if (Logger.isEnabled()) - Logger.log(new LogEvent(LOGID, LogEvent.LT_WARNING, "Cannot find " - + path.getName())); - } - } - - // Internal utility methods - - /** - * Compiles a new AppleScript instance and runs it - * @param cmd AppleScript command to execute; do not surround command with extra quotation marks - * @return Output of the script - * @throws IOException If the script failed to execute - */ - protected static String performOSAScript(CharSequence cmd) throws IOException - { - return performOSAScript(new CharSequence[]{cmd}); - } - - /** - * Compiles a new AppleScript instance and runs it - * @param cmds AppleScript Sequence of commands to execute; do not surround command with extra quotation marks - * @return Output of the script - * @throws IOException If the script failed to execute - */ - protected static String performOSAScript(CharSequence[] cmds) throws IOException - { - long start = System.currentTimeMillis(); - Debug.outNoStack("Executing OSAScript: "); - for (int i = 0; i < cmds.length; i++) - { - Debug.outNoStack("\t" + cmds[i]); - } - - String[] cmdargs = new String[2 * cmds.length + 1]; - cmdargs[0] = "osascript"; - for (int i = 0; i < cmds.length; i++) - { - cmdargs[i * 2 + 1] = "-e"; - cmdargs[i * 2 + 2] = String.valueOf(cmds[i]); - } - - Process osaProcess = performRuntimeExec(cmdargs); - BufferedReader reader = new BufferedReader(new InputStreamReader(osaProcess.getInputStream())); - String line = reader.readLine(); - reader.close(); - Debug.outNoStack("OSAScript Output: " + line); - - reader = new BufferedReader(new InputStreamReader(osaProcess.getErrorStream())); - String errorMsg = reader.readLine(); - reader.close(); - - Debug.outNoStack("OSAScript Error (if any): " + errorMsg); - - Debug.outNoStack(MessageFormat.format("OSAScript execution ended ({0}ms)", new Object[]{String.valueOf(System.currentTimeMillis() - start)})); - - if (errorMsg != null) - { - throw new IOException(errorMsg); - } - - return line; - } - - /** - * Compiles a new AppleScript instance and runs it - * @param script AppleScript file (.scpt) to execute - * @return Output of the script - * @throws IOException If the script failed to execute - */ - protected static String performOSAScript(File script) throws IOException - { - long start = System.currentTimeMillis(); - Debug.outNoStack("Executing OSAScript from file: " + script.getPath()); - - Process osaProcess = performRuntimeExec(new String[]{"osascript", script.getPath()}); - BufferedReader reader = new BufferedReader(new InputStreamReader(osaProcess.getInputStream())); - String line = reader.readLine(); - reader.close(); - Debug.outNoStack("OSAScript Output: " + line); - - reader = new BufferedReader(new InputStreamReader(osaProcess.getErrorStream())); - String errorMsg = reader.readLine(); - reader.close(); - - Debug.outNoStack("OSAScript Error (if any): " + errorMsg); - - Debug.outNoStack(MessageFormat.format("OSAScript execution ended ({0}ms)", new Object[]{String.valueOf(System.currentTimeMillis() - start)})); - - if (errorMsg != null) - { - throw new IOException(errorMsg); - } - - return line; - } - - /** - * Compiles a new AppleScript instance to the specified location - * @param cmd Command to compile; do not surround command with extra quotation marks - * @param destination Destination location of the AppleScript file - * @return True if compiled successfully - */ - protected static boolean compileOSAScript(CharSequence cmd, File destination) - { - return compileOSAScript(new CharSequence[]{cmd}, destination); - } - - /** - * Compiles a new AppleScript instance to the specified location - * @param cmds Sequence of commands to compile; do not surround command with extra quotation marks - * @param destination Destination location of the AppleScript file - * @return True if compiled successfully - */ - protected static boolean compileOSAScript(CharSequence[] cmds, File destination) - { - long start = System.currentTimeMillis(); - Debug.outNoStack("Compiling OSAScript: " + destination.getPath()); - for (int i = 0; i < cmds.length; i++) - { - Debug.outNoStack("\t" + cmds[i]); - } - - String[] cmdargs = new String[2 * cmds.length + 3]; - cmdargs[0] = "osacompile"; - for (int i = 0; i < cmds.length; i++) - { - cmdargs[i * 2 + 1] = "-e"; - cmdargs[i * 2 + 2] = String.valueOf(cmds[i]); - } - - cmdargs[cmdargs.length - 2] = "-o"; - cmdargs[cmdargs.length - 1] = destination.getPath(); - - String errorMsg; - try - { - Process osaProcess = performRuntimeExec(cmdargs); - - BufferedReader reader = new BufferedReader(new InputStreamReader(osaProcess.getErrorStream())); - errorMsg = reader.readLine(); - reader.close(); - } - catch (IOException e) - { - Debug.outNoStack("OSACompile Execution Failed: " + e.getMessage()); - Debug.printStackTrace(e); - return false; - } - - Debug.outNoStack("OSACompile Error (if any): " + errorMsg); - - Debug.outNoStack(MessageFormat.format("OSACompile execution ended ({0}ms)", new Object[]{String.valueOf(System.currentTimeMillis() - start)})); - - return (errorMsg == null); - } - - /** - * @see Runtime#exec(String[]) - */ - protected static Process performRuntimeExec(String[] cmdargs) throws IOException - { - try - { - return Runtime.getRuntime().exec(cmdargs); - } - catch (IOException e) - { - Logger.log(new LogAlert(LogAlert.UNREPEATABLE, e.getMessage(), e)); - throw e; - } - } - - /** - *

    Gets the preferred file browser name

    - *

    Currently supported browsers are Path Finder and Finder. If Path Finder is currently running - * (not just installed), then "Path Finder is returned; else, "Finder" is returned.

    - * @return "Path Finder" if it is currently running; else "Finder" - */ - private static String getFileBrowserName() - { - try - { - // slowwwwwwww - if ("true".equalsIgnoreCase(performOSAScript("tell application \"System Events\" to exists process \"Path Finder\""))) - { - Debug.outNoStack("Path Finder is running"); - - return "Path Finder"; - } - else - { - return "Finder"; - } - } - catch (IOException e) - { - Debug.printStackTrace(e); - Logger.log(new LogEvent(LOGID, e.getMessage(), e)); - - return "Finder"; - } - } - - public boolean - testNativeAvailability( - String name ) - - throws PlatformManagerException - { - throw new PlatformManagerException("Unsupported capability called on platform manager"); - } - - public void - addListener( - PlatformManagerListener listener ) - { - } - - public void - removeListener( - PlatformManagerListener listener ) - { - } -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.jsp b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.jsp deleted file mode 100644 index 1c6664d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.jsp +++ /dev/null @@ -1,24 +0,0 @@ - -<%= var x = 1; -%> -<%! int i = 0; %> -<%! int a, b, c; %> -<%! Circle a = new Circle(2.0); %> - -<% - String name = null; - if (request.getParameter("name") == null) { -%> -<%@ include file="error.html" %> -<% - } else { - foo.setName(request.getParameter("name")); - if (foo.getName().equalsIgnoreCase("integra")) - name = "acura"; - if (name.equalsIgnoreCase( "acura" )) { -%> - - -

    -Calendar of -

    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.maql b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.maql deleted file mode 100644 index a44935f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.maql +++ /dev/null @@ -1,45 +0,0 @@ -# MAQL script -CREATE DATASET {dataset.quotes} VISUAL(TITLE "St\\tock Qu\totes Data"); - -# A comment -CREATE DATASET {dataset.quotes} VISUAL(TITLE "Stock Qu\"otes Data"); - -CREATE DATASET {dataset.quotes} VISUAL(TITLE "Stock Quotes Data"); - -ALTER DATASET {dataset.quotes} ADD {attribute.sector}; - -ALTER DATASET {dataset.quotes} DROP {attribute.symbol}; - -ALTER DATASET {dataset.quotes} VISUAL(TITLE "Internal Quotes Data"); - -CREATE ATTRIBUTE {attr.quotes.symbol} - VISUAL(TITLE "Symbol", FOLDER {folder.quotes.attr}) - AS {d_quotes_symbol.nm_symbol}; - -ALTER ATTRIBUTE {attr.quotes.symbol} - ADD LABELS {attr.quotes.company} VISUAL(TITLE "Company") - AS {d_quotes_symbol.nm_company}; - -CREATE FACT {fact.quotes.open_price} - VISUAL( TITLE "Open Price", FOLDER {folder.quotes.fact}) AS {f_quotes.f_open_price}; - -ALTER FACT {fact.quotes.open_price} ADD {f_quotes2.f_open_price}; - -CREATE FOLDER {folder.quotes.attr} - VISUAL ( TITLE "Stock Quotes Data", - DESCRIPTION "Stock quotes data obtained from John Doe etc." ) - TYPE ATTRIBUTE; - -ALTER DATATYPE {d_quotes_symbol.nm_symbol} VARCHAR(4), - {d_quotes_symbol.nm_symbol} VARCHAR(80), - {f_quotes.f_open_price} DECIMAL(10,2); - -INCLUDE TEMPLATE "URN:GOODDATA:DATE" MODIFY (IDENTIFIER "my-date", TITLE "quote") - -ALTER ATTRIBUTE {attr.quotes.symbol} ADD KEYS {d_quotes_symbol.nm_symbol} PRIMARY; - -ALTER ATTRIBUTE {attr.quotes.symbol} DROP KEYS {d_quotes_symbol.nm_symbol}; - -ALTER FACT {fact.quotes.open_price} ADD {f_quotes2.f_open_price}; - -# Another comment diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.mask b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.mask deleted file mode 100644 index 39134d7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.mask +++ /dev/null @@ -1,41 +0,0 @@ - -// comment -h4.class-1#id.class-2.other checked='true' disabled name = x param > 'Enter ..' -input placeholder=Password type=password > - :dualbind x-signal='dom:create' value=user.passord; -% each='flowers' > - div style=' - position: absolute; - display: inline-block; - background: url("image.png") center center no-repeat; - '; -#skippedDiv.other { - img src='~[url]'; - div style="text-align:center;" { - '~[: $obj.foo("username", name) + 2]' - "~[Localize: stringId]" - } - - p > """ - - Hello "world" - """ - - p > ' - Hello "world" - ' - - p > "Hello 'world'" - - :customComponent x-value='tt'; - /* footer > '(c) 2014' */ -} - -.skippedDiv > - span > - #skipped > - table > - td > - tr > ';)' - -br; \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.mod b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.mod deleted file mode 100644 index ba972e3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.mod +++ /dev/null @@ -1,374 +0,0 @@ -(* LIFO Storage Library - * - * @file LIFO.mod - * LIFO implementation - * - * Universal Dynamic Stack - * - * Author: Benjamin Kowarsch - * - * Copyright (C) 2009 Benjamin Kowarsch. All rights reserved. - * - * License: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met - * - * 1) NO FEES may be charged for the provision of the software. The software - * may NOT be published on websites that contain advertising, unless - * specific prior written permission has been obtained. - * - * 2) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 3) Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and other materials provided with the distribution. - * - * 4) Neither the author's name nor the names of any contributors may be used - * to endorse or promote products derived from this software without - * specific prior written permission. - * - * 5) Where this list of conditions or the following disclaimer, in part or - * as a whole is overruled or nullified by applicable law, no permission - * is granted to use the software. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - *) - - -IMPLEMENTATION (* OF *) MODULE LIFO; - -FROM SYSTEM IMPORT ADDRESS, ADR, TSIZE; -FROM Storage IMPORT ALLOCATE, DEALLOCATE; - - -(* --------------------------------------------------------------------------- -// Private type : ListEntry -// --------------------------------------------------------------------------- -*) -TYPE ListPtr = POINTER TO ListEntry; - -TYPE ListEntry = RECORD - value : DataPtr; - next : ListPtr -END; (* ListEntry *) - - -(* --------------------------------------------------------------------------- -// Opaque type : LIFO.Stack -// --------------------------------------------------------------------------- -// CAUTION: Modula-2 does not support the use of variable length array fields -// in records. VLAs can only be implemented using pointer arithmetic which -// means there is no type checking and no boundary checking on the array. -// It also means that array notation cannot be used on the array which makes -// the code difficult to read and maintain. As a result, Modula-2 is less -// safe and less readable than C when it comes to using VLAs. Great care must -// be taken to make sure that the code accessing VLA fields is safe. Boundary -// checks must be inserted manually. Size checks must be inserted manually to -// compensate for the absence of type checks. *) - -TYPE Stack = POINTER TO StackDescriptor; - -TYPE StackDescriptor = RECORD - overflow : ListPtr; - entryCount : StackSize; - arraySize : StackSize; - array : ADDRESS (* ARRAY OF DataPtr *) -END; (* StackDescriptor *) - - -(* --------------------------------------------------------------------------- -// function: LIFO.new( initial_size, status ) -// --------------------------------------------------------------------------- -// -// Creates and returns a new LIFO stack object with an initial capacity of -// . If zero is passed in for , then the stack -// will be created with an initial capacity of LIFO.defaultStackSize. The -// function fails if a value greater than LIFO.maximumStackSize is passed -// in for or if memory could not be allocated. -// -// The initial capacity of a stack is the number of entries that can be stored -// in the stack without enlargement. -// -// The status of the operation is passed back in . *) - -PROCEDURE new ( initialSize : StackSize; VAR status : Status ) : Stack; - -VAR - newStack : Stack; - -BEGIN - - (* zero size means default *) - IF initialSize = 0 THEN - initialSize := defaultStackSize; - END; (* IF *) - - (* bail out if initial size is too high *) - IF initialSize > maximumStackSize THEN - status := invalidSize; - RETURN NIL; - END; (* IF *) - - (* allocate new stack object *) - ALLOCATE(newStack, TSIZE(Stack) + TSIZE(DataPtr) * (initialSize - 1)); - - (* bail out if allocation failed *) - IF newStack = NIL THEN - status := allocationFailed; - RETURN NIL; - END; (* IF *) - - (* initialise meta data *) - newStack^.arraySize := initialSize; - newStack^.entryCount := 0; - newStack^.overflow := NIL; - - (* pass status and new stack to caller *) - status := success; - RETURN newStack - -END new; - - -(* --------------------------------------------------------------------------- -// function: LIFO.push( stack, value, status ) -// --------------------------------------------------------------------------- -// -// Adds a new entry to the top of stack . The new entry is -// added by reference, no data is copied. However, no entry is added if the -// the stack is full, that is when the number of entries stored in the stack -// has reached LIFO.maximumStackSize. The function fails if NIL is passed in -// for or , or if memory could not be allocated. -// -// New entries are allocated dynamically if the number of entries exceeds the -// initial capacity of the stack. -// -// The status of the operation is passed back in . *) - -PROCEDURE push ( VAR stack : Stack; value : DataPtr; VAR status : Status ); -VAR - newEntry : ListPtr; - valuePtr : POINTER TO DataPtr; - -BEGIN - - (* bail out if stack is NIL *) - IF stack = NIL THEN - status := invalidStack; - RETURN; - END; (* IF *) - - (* bail out if value is NIL *) - IF value = NIL THEN - status := invalidData; - RETURN; - END; (* IF *) - - (* bail out if stack is full *) - IF stack^.entryCount >= maximumStackSize THEN - status := stackFull; - RETURN; - END; (* IF *) - - (* check if index falls within array segment *) - IF stack^.entryCount < stack^.arraySize THEN - - (* store value in array segment *) - - (* stack^.array^[stack^.entryCount] := value; *) - valuePtr := ADR(stack^.array) + TSIZE(DataPtr) * stack^.entryCount; - valuePtr^ := value; - - ELSE (* index falls within overflow segment *) - - (* allocate new entry slot *) - NEW(newEntry); - - (* bail out if allocation failed *) - IF newEntry = NIL THEN - status := allocationFailed; - RETURN; - END; (* IF *) - - (* initialise new entry *) - newEntry^.value := value; - - (* link new entry into overflow list *) - newEntry^.next := stack^.overflow; - stack^.overflow := newEntry; - - END; (* IF *) - - (* update entry counter *) - INC(stack^.entryCount); - - (* pass status to caller *) - status := success; - RETURN - -END push; - - -(* --------------------------------------------------------------------------- -// function: LIFO.pop( stack, status ) -// --------------------------------------------------------------------------- -// -// Removes the top most value from stack and returns it. If the stack -// is empty, that is when the number of entries stored in the stack has -// reached zero, then NIL is returned. -// -// Entries which were allocated dynamically (above the initial capacity) are -// deallocated when their values are popped. -// -// The status of the operation is passed back in . *) - -PROCEDURE pop ( VAR stack : Stack; VAR status : Status ) : DataPtr; - -VAR - thisValue : DataPtr; - thisEntry : ListPtr; - valuePtr : POINTER TO DataPtr; - -BEGIN - - (* bail out if stack is NIL *) - IF stack = NIL THEN - status := invalidStack; - RETURN NIL; - END; (* IF *) - - (* bail out if stack is empty *) - IF stack^.entryCount = 0 THEN - status := stackEmpty; - RETURN NIL; - END; (* IF *) - - DEC(stack^.entryCount); - - (* check if index falls within array segment *) - IF stack^.entryCount < stack^.arraySize THEN - - (* obtain value at index entryCount in array segment *) - - (* thisValue := stack^.array^[stack^.entryCount]; *) - valuePtr := ADR(stack^.array) + TSIZE(DataPtr) * stack^.entryCount; - thisValue := valuePtr^; - - ELSE (* index falls within overflow segment *) - - (* obtain value of first entry in overflow list *) - thisValue := stack^.overflow^.value; - - (* isolate first entry in overflow list *) - thisEntry := stack^.overflow; - stack^.overflow := stack^.overflow^.next; - - (* remove the entry from overflow list *) - DISPOSE(thisEntry); - - END; (* IF *) - - (* return value and status to caller *) - status := success; - RETURN thisValue - -END pop; - - -(* --------------------------------------------------------------------------- -// function: LIFO.stackSize( stack ) -// --------------------------------------------------------------------------- -// -// Returns the current capacity of . The current capacity is the total -// number of allocated entries. Returns zero if NIL is passed in for . -*) -PROCEDURE stackSize( VAR stack : Stack ) : StackSize; - -BEGIN - - (* bail out if stack is NIL *) - IF stack = NIL THEN - RETURN 0; - END; (* IF *) - - IF stack^.entryCount < stack^.arraySize THEN - RETURN stack^.arraySize; - ELSE - RETURN stack^.entryCount; - END; (* IF *) - -END stackSize; - - -(* --------------------------------------------------------------------------- -// function: LIFO.stackEntries( stack ) -// --------------------------------------------------------------------------- -// -// Returns the number of entries stored in stack , returns zero if -// NIL is passed in for . *) - -PROCEDURE stackEntries( VAR stack : Stack ) : StackSize; - -BEGIN - - (* bail out if stack is NIL *) - IF stack = NIL THEN - RETURN 0; - END; (* IF *) - - RETURN stack^.entryCount - -END stackEntries; - - -(* --------------------------------------------------------------------------- -// function: LIFO.dispose( stack ) -// --------------------------------------------------------------------------- -// -// Disposes of LIFO stack object . Returns NIL. *) - -PROCEDURE dispose ( VAR stack : Stack ) : Stack; - -VAR - thisEntry : ListPtr; - -BEGIN - - (* bail out if stack is NIL *) - IF stack = NIL THEN - RETURN NIL; - END; (* IF *) - - (* deallocate any entries in stack's overflow list *) - WHILE stack^.overflow # NIL DO - - (* isolate first entry in overflow list *) - thisEntry := stack^.overflow; - stack^.overflow := stack^.overflow^.next; - - (* deallocate the entry *) - DISPOSE(thisEntry); - - END; (* WHILE *) - - (* deallocate stack object and pass NIL to caller *) - DEALLOCATE(stack, TSIZE(Stack) + TSIZE(DataPtr) * (stack^.arraySize - 1)); - RETURN NIL - -END dispose; - - -END LIFO. diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.moo b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.moo deleted file mode 100644 index dec71ba..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.moo +++ /dev/null @@ -1,51 +0,0 @@ -you_lose_msg = "Either that person does not exist, or has a different password."; -if (!(caller in {#0, this})) - return E_PERM; - "...caller isn't :do_login_command..."; -elseif (args && (args[1] == "test")) - return this:test(@listdelete(args, 1)); -elseif (!(length(args) in {1, 2})) - notify(player, tostr("Usage: ", verb, " ")); -elseif (!valid(candidate = this:_match_player(name = strsub(args[1], " ", "_")))) - if (name == "guest") - "must be no guests"; - this:notify_lines(this:registration_text("guest")); - else - notify(player, you_lose_msg); - endif - "...unknown player..."; -elseif (is_clear_property(candidate, "password") || ((typeof(candidate.password) == STR) && ((length(candidate.password) < 2) || (crypt({@args, ""}[2], candidate.password) != candidate.password)))) - notify(player, you_lose_msg); - "...bad password..."; - server_log(tostr("FAILED CONNECT: ", args[1], " (", candidate, ") on ", connection_name(player), ($string_utils:connection_hostname(connection_name(player)) in candidate.all_connect_places) ? "" | "******")); -elseif (((candidate.name == "guest") && this.sitematch_guests) && valid(foreigner = $country_db:get_guest())) - notify(player, tostr("Okay,... Logging you in as `", foreigner:name(), "'")); - this:record_connection(foreigner); - return foreigner; -elseif ((parent(candidate) == $guest) && (!valid(candidate = candidate:defer()))) - if (candidate == #-3) - notify(player, "Sorry, guest characters are not allowed from your site right now."); - elseif (candidate == #-2) - this:notify_lines(this:registration_text("blacklisted", "Sorry, guest characters are not allowed from your site.")); - elseif (candidate == #-4) - this:notify_lines(this:registration_text("guest")); - else - notify(player, "Sorry, all of our guest characters are in use right now."); - endif -else - if ((!(name in candidate.aliases)) && (name != tostr(candidate))) - notify(player, tostr("Okay,... ", name, " is in use. Logging you in as `", candidate:name(), "'")); - endif - if (this:is_newted(candidate)) - notify(player, ""); - notify(player, this:newt_message_for(candidate)); - notify(player, ""); - else - this:record_connection(candidate); - if (verb[1] == "s") - candidate.use_do_command = 0; - endif - return candidate; - endif -endif -return 0; \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.myt b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.myt deleted file mode 100644 index 1668f7a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.myt +++ /dev/null @@ -1,166 +0,0 @@ -<%doc>formatting.myt - Provides section formatting elements, syntax-highlighted code blocks, and other special filters. - -<%global> - import string, re - import highlight - - -<%method section> -<%doc>Main section formatting element. -<%args> - toc - path - description=None - onepage=False - -<%init> - item = toc.get_by_path(path) - if item is None: - raise "path: " + path - - - - -
    - -<%python> - content = m.content() - re2 = re.compile(r"'''PYESC(.+?)PYESC'''", re.S) - content = re2.sub(lambda m: m.group(1), content) - - -% if item.depth > 1: -

    <% description or item.description %>

    -% - -
    - <% content %> -
    - -% if onepage or item.depth > 1: -% if (item.next and item.next.depth >= item.depth): - back to section top -% -% else: - back to section top - <& nav.myt:pagenav, item=item, onepage=onepage &> -% -
    - - - - -<%method formatplain> - <%filter> - import re - f = re.sub(r'\n[\s\t]*\n[\s\t]*', '

    \n

    ', f) - f = "

    " + f + "

    " - return f - -<% m.content() | h%> - - - - - -<%method codeline trim="both"> -<% m.content() %> - - -<%method code autoflush=False> -<%args> - title = None - syntaxtype = 'python' - html_escape = False - use_sliders = False - - -<%init> - def fix_indent(f): - f =string.expandtabs(f, 4) - g = '' - lines = string.split(f, "\n") - whitespace = None - for line in lines: - if whitespace is None: - match = re.match(r"^([ ]*).+", line) - if match is not None: - whitespace = match.group(1) - - if whitespace is not None: - line = re.sub(r"^%s" % whitespace, "", line) - - if whitespace is not None or re.search(r"\w", line) is not None: - g += (line + "\n") - - - return g.rstrip() - - p = re.compile(r'
    (.*?)
    ', re.S) - def hlight(match): - return "
    " + highlight.highlight(fix_indent(match.group(1)), html_escape = html_escape, syntaxtype = syntaxtype) + "
    " - content = p.sub(hlight, "
    " + m.content() + "
    ") - -
    "> -% if title is not None: -
    <% title %>
    -% -<% content %>
    - - - - - -<%method popboxlink trim="both"> - <%args> - name=None - show='show' - hide='hide' - - <%init> - if name is None: - name = m.attributes.setdefault('popbox_name', 0) - name += 1 - m.attributes['popbox_name'] = name - name = "popbox_" + repr(name) - -javascript:togglePopbox('<% name %>', '<% show %>', '<% hide %>') - - -<%method popbox trim="both"> -<%args> - name = None - class_ = None - -<%init> - if name is None: - name = 'popbox_' + repr(m.attributes['popbox_name']) - - - - -<%method poplink trim="both"> - <%args> - link='sql' - - <%init> - href = m.scomp('SELF:popboxlink') - - '''PYESC<& nav.myt:link, href=href, text=link, class_="codepoplink" &>PYESC''' - - -<%method codepopper trim="both"> - <%init> - c = m.content() - c = re.sub(r'\n', '
    \n', c.strip()) - -
    <&|SELF:popbox, class_="codepop" &><% c %>
    -
    -
    -<%method poppedcode trim="both">
    -	<%init>
    -		c = m.content()
    -		c = re.sub(r'\n', '
    \n', c.strip()) - -
    <% c %>
    -
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.nim b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.nim
    deleted file mode 100644
    index 20610bb..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.nim
    +++ /dev/null
    @@ -1,93 +0,0 @@
    -import re
    -
    -for x in lines("myfile.txt"):
    -  if x =~ re"(\w+)=(.*)":
    -    echo "Key: ", matches[0],
    -         " Value: ", matches[1]
    -
    -Echo("What's your name? ")
    -var name: string = readLine(stdin)
    -if name == "":
    -  echo("Poor soul, you lost your name?")
    -elif name == "name":
    -  echo("Very funny, your name is name.")
    -else:
    -  Echo("Hi, ", name, "!")
    -
    -var name = readLine(stdin)
    -case name
    -of "":
    -  echo("Poor soul, you lost your name?")
    -of "name":
    -  echo("Very funny, your name is name.")
    -else:
    -  Echo("Hi, ", name, "!")
    -
    -from strutils import parseInt
    -
    -Echo("A number please: ")
    -var n = parseInt(readLine(stdin))
    -case n
    -of 0..2, 4..7: Echo("The number is in the set: {0, 1, 2, 4, 5, 6, 7}")
    -of 3, 8: Echo("The number is 3 or 8")
    -
    -Echo("Counting to 10: ")
    -var i = 1
    -while i <= 10:
    -  Echo($i)
    -  inc(i)
    -
    -proc yes(question: string): bool =
    -  Echo(question, " (y/n)")
    -  while true:
    -    case readLine(stdin)
    -    of "y", "Y", "yes", "Yes": return true
    -    of "n", "N", "no", "No": return false
    -    else: Echo("Please be clear: yes or no")
    -
    -proc even(n: int): bool
    -
    -proc odd(n: int): bool =
    -  if n == 1: return true
    -  else: return even(n-1)
    -
    -iterator countup(a, b: int): int =
    -  var res = a
    -  while res <= b:
    -    yield res
    -    inc(res)
    -
    -type
    -  TPerson = object of TObject
    -    name*: string  # the * means that `name` is accessible from other modules
    -    age: int       # no * means that the field is hidden from other modules
    -
    -  TStudent = object of TPerson # TStudent inherits from TPerson
    -    id: int                    # with an id field
    -
    -var
    -  student: TStudent
    -  person: TPerson
    -assert(student is TStudent)
    -
    -echo({'a', 'b', 'c'}.card)
    -stdout.writeln("Hallo")
    -var
    -  f: TFile
    -if open(f, "numbers.txt"):
    -  try:
    -    var a = readLine(f)
    -    var b = readLine(f)
    -    echo("sum: " & $(parseInt(a) + parseInt(b)))
    -  except EOverflow:
    -    echo("overflow!")
    -  except EInvalidValue:
    -    echo("could not convert string to integer")
    -  except EIO:
    -    echo("IO error!")
    -  except:
    -    echo("Unknown exception!")
    -    # reraise the unknown exception:
    -    raise
    -  finally:
    -    close(f)
    \ No newline at end of file
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.opa b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.opa
    deleted file mode 100644
    index ec287ac..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.opa
    +++ /dev/null
    @@ -1,10 +0,0 @@
    -function sample_page() {
    -  
    -

    HTML in Opa

    -
    -
    -
    -

    Learning by examples.

    -
    -
    -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.p6 b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.p6 deleted file mode 100644 index 3d12b56..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.p6 +++ /dev/null @@ -1,252 +0,0 @@ -#!/usr/bin/env perl6 - -use v6; - -my $string = 'I look like a # comment!'; - -if $string eq 'foo' { - say 'hello'; -} - -regex http-verb { - 'GET' - | 'POST' - | 'PUT' - | 'DELETE' - | 'TRACE' - | 'OPTIONS' - | 'HEAD' -} - -# a sample comment - -say 'Hello from Perl 6!' - - -#`{ -multi-line comment! -} - -say 'here'; - -#`( -multi-line comment! -) - -say 'here'; - -#`{{{ -I'm a special comment! -}}} - -say 'there'; - -#`{{ -I'm { even } specialer! -}} - -say 'there'; - -#`{{ -does {{nesting}} work? -}} - -#`«< -trying mixed delimiters -» - -my $string = qq; -my $string = qq«Hooray, arbitrary delimiter!»; -my $string = q ; -my $string = qq<>; - -my %hash := Hash.new; - -=begin pod - -Here's some POD! Wooo - -=end pod - -=for Testing - This is POD (see? role isn't highlighted) - -say('this is not!'); - -=table - Of role things - -say('not in your table'); -#= A single line declarator "block" (with a keyword like role) -#| Another single line declarator "block" (with a keyword like role) -#={ - A declarator block (with a keyword like role) - } -#|{ - Another declarator block (with a keyword like role) - } -#= { A single line declarator "block" with a brace (with a keyword like role) -#=« - More declarator blocks! (with a keyword like role) - » -#|« - More declarator blocks! (with a keyword like role) - » - -say 'Moar code!'; - -my $don't = 16; - -sub don't($x) { - !$x -} - -say don't 'foo'; - -my %hash = ( - :foo(1), -); - -say %hash; -say %hash<>; -say %hash«foo»; - -say %*hash; -say %*hash<>; -say %*hash«foo»; - -say $; -say $; - -for (@A Z @B) -> $a, $b { - say $a + $b; -} - -Q:PIR { - .loadlib "somelib" -} - -my $longstring = q/ - lots - of - text -/; - -my $heredoc = q:to/END_SQL/; -SELECT * FROM Users -WHERE first_name = 'Rob' -END_SQL -my $hello; - -# Fun with regexen - -if 'food' ~~ /foo/ { - say 'match!' -} - -my $re = /foo/; -my $re2 = m/ foo /; -my $re3 = m:i/ FOO /; - -call-a-sub(/ foo /); -call-a-sub(/ foo \/ bar /); - -my $re4 = rx/something | something-else/; -my $result = ms/regexy stuff/; -my $sub0 = s/regexy stuff/more stuff/; -my $sub = ss/regexy stuff/more stuff/; -my $trans = tr/regexy stuff/more stuff/; - -my @values = ; -call-sub(); -call-sub ; - -my $result = $a < $b; - -for -> $letter { - say $letter; -} - -sub test-sub { - say @_; - say $!; - say $/; - say $0; - say $1; - say @*ARGS; - say $*ARGFILES; - say &?BLOCK; - say ::?CLASS; - say $?CLASS; - say @=COMMENT; - say %?CONFIG; - say $*CWD; - say $=data; - say %?DEEPMAGIC; - say $?DISTRO; - say $*DISTRO; - say $*EGID; - say %*ENV; - say $*ERR; - say $*EUID; - say $*EXECUTABLE_NAME; - say $?FILE; - say $?GRAMMAR; - say $*GID; - say $*IN; - say @*INC; - say %?LANG; - say $*LANG; - say $?LINE; - say %*META-ARGS; - say $?MODULE; - say %*OPTS; - say %*OPT; - say $?KERNEL; - say $*KERNEL; - say $*OUT; - say $?PACKAGE; - say $?PERL; - say $*PERL; - say $*PID; - say %=pod; - say $*PROGRAM_NAME; - say %*PROTOCOLS; - say ::?ROLE; - say $?ROLE; - say &?ROUTINE; - say $?SCOPE; - say $*TZ; - say $*UID; - say $?USAGE; - say $?VM; - say $?XVM; -} - -say ; - -my $perl5_re = m:P5/ fo{2} /; -my $re5 = rx«something | something-else»; - -my $M := %*COMPILING<%?OPTIONS>; - -say $M; - -sub regex-name { ... } -my $pair = role-name => 'foo'; -$pair = rolesque => 'foo'; - -my sub something(Str:D $value) { ... } - -my $s = q«< -some -string -stuff -»; - -my $regex = m«< some chars »; -# after - -say $/; - -roleq; diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.pan b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.pan deleted file mode 100644 index 56c8bd6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.pan +++ /dev/null @@ -1,54 +0,0 @@ -object template pantest; - -# Very simple pan test file -"/long/decimal" = 123; -"/long/octal" = 0755; -"/long/hexadecimal" = 0xFF; - -"/double/simple" = 0.01; -"/double/pi" = 3.14159; -"/double/exponent" = 1e-8; -"/double/scientific" = 1.3E10; - -"/string/single" = 'Faster, but escapes like \t, \n and \x3d don''t work, but '' should work.'; -"/string/double" = "Slower, but escapes like \t, \n and \x3d do work"; - -variable TEST = 2; - -"/x2" = to_string(TEST); -"/x2" ?= 'Default value'; - -"/x3" = 1 + 2 + value("/long/decimal"); - -"/x4" = undef; - -"/x5" = null; - -variable e ?= error("Test error message"); - -# include gmond config for services-monitoring -include { 'site/ganglia/gmond/services-monitoring' }; - -"/software/packages"=pkg_repl("httpd","2.2.3-43.sl5.3",PKG_ARCH_DEFAULT); -"/software/packages"=pkg_repl("php"); - -# Example function -function show_things_view_for_stuff = { - thing = ARGV[0]; - foreach( i; mything; STUFF ) { - if ( thing == mything ) { - return( true ); - } else { - return SELF; - }; - }; - false; -}; - -variable HERE = < '\' then - RootFolder := RootFolder + '\'; - ZeroMemory(@wfd, sizeof(wfd)); - wfd.dwFileAttributes := FILE_ATTRIBUTE_NORMAL; - if Recurse then - begin - hFindFile := FindFirstFile(pointer(RootFolder + '*.*'), wfd); - if hFindFile <> 0 then - try - repeat - if wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = FILE_ATTRIBUTE_DIRECTORY then - begin - if (string(wfd.cFileName) <> '.') and (string(wfd.cFileName) <> '..') then - begin - CountFolders(Handle, RootFolder + wfd.cFileName, Recurse); - end; - end; - until FindNextFile(hFindFile, wfd) = False; - Inc(CntFolders); - finally - Windows.FindClose(hFindFile); - end; - end; -end; - -//////////////////////////////////////////////////////////////////////////////// -// -// FindAllFiles -// -procedure FindAllFiles(Handle: THandle; RootFolder: string; Mask: string; Recurse: Boolean = True); -var - hFindFile : THandle; - wfd : TWin32FindData; -begin - if RootFolder[length(RootFolder)] <> '\' then - RootFolder := RootFolder + '\'; - ZeroMemory(@wfd, sizeof(wfd)); - wfd.dwFileAttributes := FILE_ATTRIBUTE_NORMAL; - if Recurse then - begin - hFindFile := FindFirstFile(pointer(RootFolder + '*.*'), wfd); - if hFindFile <> 0 then - try - repeat - if wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = FILE_ATTRIBUTE_DIRECTORY then - begin - if (string(wfd.cFileName) <> '.') and (string(wfd.cFileName) <> '..') then - begin - FindAllFiles(Handle, RootFolder + wfd.cFileName, Mask, Recurse); - end; - end; - until FindNextFile(hFindFile, wfd) = False; - Inc(NumFolder); - SendMessage(Handle, FFM_ONDIRFOUND, NumFolder, lParam(string(RootFolder))); - finally - Windows.FindClose(hFindFile); - end; - end; - hFindFile := FindFirstFile(pointer(RootFolder + Mask), wfd); - if hFindFile <> INVALID_HANDLE_VALUE then - try - repeat - if (wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY <> FILE_ATTRIBUTE_DIRECTORY) then - begin - SendMessage(Handle, FFM_ONFILEFOUND, 0, lParam(string(RootFolder + wfd.cFileName))); - end; - until FindNextFile(hFindFile, wfd) = False; - finally - Windows.FindClose(hFindFile); - end; -end; - - -property test: boolean read ftest write ftest; -procedure test: boolean read ftest write ftest; - -// -// This sourcecode is part of omorphia -// - -Function IsValidHandle(Const Handle: THandle): Boolean; {$IFDEF OMORPHIA_FEATURES_USEASM} Assembler; -Asm - TEST EAX, EAX - JZ @@Finish - NOT EAX - TEST EAX, EAX - SETNZ AL - - {$IFDEF WINDOWS} - JZ @@Finish - - //Save the handle against modifications or loss - PUSH EAX - - //reserve some space for a later duplicate - PUSH EAX - - //Check if we are working on NT-Platform - CALL IsWindowsNTSystem - TEST EAX, EAX - JZ @@NoNTSystem - - PUSH DWORD PTR [ESP] - LEA EAX, DWORD PTR [ESP+$04] - PUSH EAX - CALL GetHandleInformation - TEST EAX, EAX - JNZ @@Finish2 - -@@NoNTSystem: - //Result := DuplicateHandle(GetCurrentProcess, Handle, GetCurrentProcess, - // @Duplicate, 0, False, DUPLICATE_SAME_ACCESS); - PUSH DUPLICATE_SAME_ACCESS - PUSH $00000000 - PUSH $00000000 - LEA EAX, DWORD PTR [ESP+$0C] - PUSH EAX - CALL GetCurrentProcess - PUSH EAX - PUSH DWORD PTR [ESP+$18] - PUSH EAX - CALL DuplicateHandle - - TEST EAX, EAX - JZ @@Finish2 - - // Result := CloseHandle(Duplicate); - PUSH DWORD PTR [ESP] - CALL CloseHandle - -@@Finish2: - POP EDX - POP EDX - - PUSH EAX - PUSH $00000000 - CALL SetLastError - POP EAX - {$ENDIF} - -@@Finish: -End; -{$ELSE} -Var - Duplicate: THandle; - Flags: DWORD; -Begin - If IsWinNT Then - Result := GetHandleInformation(Handle, Flags) - Else - Result := False; - If Not Result Then - Begin - // DuplicateHandle is used as an additional check for those object types not - // supported by GetHandleInformation (e.g. according to the documentation, - // GetHandleInformation doesn't support window stations and desktop although - // tests show that it does). GetHandleInformation is tried first because its - // much faster. Additionally GetHandleInformation is only supported on NT... - Result := DuplicateHandle(GetCurrentProcess, Handle, GetCurrentProcess, - @Duplicate, 0, False, DUPLICATE_SAME_ACCESS); - If Result Then - Result := CloseHandle(Duplicate); - End; -End; -{$ENDIF} - - - - -{*******************************************************} -{ } -{ Delphi Supplemental Components } -{ ZLIB Data Compression Interface Unit } -{ } -{ Copyright (c) 1997 Borland International } -{ } -{*******************************************************} - -{ Modified for zlib 1.1.3 by Davide Moretti Z_STREAM_END do - begin - P := OutBuf; - Inc(OutBytes, 256); - ReallocMem(OutBuf, OutBytes); - strm.next_out := PChar(Integer(OutBuf) + (Integer(strm.next_out) - Integer(P))); - strm.avail_out := 256; - end; - finally - CCheck(deflateEnd(strm)); - end; - ReallocMem(OutBuf, strm.total_out); - OutBytes := strm.total_out; - except - FreeMem(OutBuf); - raise - end; -end; - - -procedure DecompressBuf(const InBuf: Pointer; InBytes: Integer; - OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer); -var - strm: TZStreamRec; - P: Pointer; - BufInc: Integer; -begin - FillChar(strm, sizeof(strm), 0); - BufInc := (InBytes + 255) and not 255; - if OutEstimate = 0 then - OutBytes := BufInc - else - OutBytes := OutEstimate; - GetMem(OutBuf, OutBytes); - try - strm.next_in := InBuf; - strm.avail_in := InBytes; - strm.next_out := OutBuf; - strm.avail_out := OutBytes; - DCheck(inflateInit_(strm, zlib_version, sizeof(strm))); - try - while DCheck(inflate(strm, Z_FINISH)) <> Z_STREAM_END do - begin - P := OutBuf; - Inc(OutBytes, BufInc); - ReallocMem(OutBuf, OutBytes); - strm.next_out := PChar(Integer(OutBuf) + (Integer(strm.next_out) - Integer(P))); - strm.avail_out := BufInc; - end; - finally - DCheck(inflateEnd(strm)); - end; - ReallocMem(OutBuf, strm.total_out); - OutBytes := strm.total_out; - except - FreeMem(OutBuf); - raise - end; -end; - - -// TCustomZlibStream - -constructor TCustomZLibStream.Create(Strm: TStream); -begin - inherited Create; - FStrm := Strm; - FStrmPos := Strm.Position; -end; - -procedure TCustomZLibStream.Progress(Sender: TObject); -begin - if Assigned(FOnProgress) then FOnProgress(Sender); -end; - - -// TCompressionStream - -constructor TCompressionStream.Create(CompressionLevel: TCompressionLevel; - Dest: TStream); -const - Levels: array [TCompressionLevel] of ShortInt = - (Z_NO_COMPRESSION, Z_BEST_SPEED, Z_DEFAULT_COMPRESSION, Z_BEST_COMPRESSION); -begin - inherited Create(Dest); - FZRec.next_out := FBuffer; - FZRec.avail_out := sizeof(FBuffer); - CCheck(deflateInit_(FZRec, Levels[CompressionLevel], zlib_version, sizeof(FZRec))); -end; - -destructor TCompressionStream.Destroy; -begin - FZRec.next_in := nil; - FZRec.avail_in := 0; - try - if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos; - while (CCheck(deflate(FZRec, Z_FINISH)) <> Z_STREAM_END) - and (FZRec.avail_out = 0) do - begin - FStrm.WriteBuffer(FBuffer, sizeof(FBuffer)); - FZRec.next_out := FBuffer; - FZRec.avail_out := sizeof(FBuffer); - end; - if FZRec.avail_out < sizeof(FBuffer) then - FStrm.WriteBuffer(FBuffer, sizeof(FBuffer) - FZRec.avail_out); - finally - deflateEnd(FZRec); - end; - inherited Destroy; -end; - -function TCompressionStream.Read(var Buffer; Count: Longint): Longint; -begin - raise ECompressionError.Create('Invalid stream operation'); -end; - -function TCompressionStream.Write(const Buffer; Count: Longint): Longint; -begin - FZRec.next_in := @Buffer; - FZRec.avail_in := Count; - if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos; - while (FZRec.avail_in > 0) do - begin - CCheck(deflate(FZRec, 0)); - if FZRec.avail_out = 0 then - begin - FStrm.WriteBuffer(FBuffer, sizeof(FBuffer)); - FZRec.next_out := FBuffer; - FZRec.avail_out := sizeof(FBuffer); - FStrmPos := FStrm.Position; - Progress(Self); - end; - end; - Result := Count; -end; - -function TCompressionStream.Seek(Offset: Longint; Origin: Word): Longint; -begin - if (Offset = 0) and (Origin = soFromCurrent) then - Result := FZRec.total_in - else - raise ECompressionError.Create('Invalid stream operation'); -end; - -function TCompressionStream.GetCompressionRate: Single; -begin - if FZRec.total_in = 0 then - Result := 0 - else - Result := (1.0 - (FZRec.total_out / FZRec.total_in)) * 100.0; -end; - - -// TDecompressionStream - -constructor TDecompressionStream.Create(Source: TStream); -begin - inherited Create(Source); - FZRec.next_in := FBuffer; - FZRec.avail_in := 0; - DCheck(inflateInit_(FZRec, zlib_version, sizeof(FZRec))); -end; - -destructor TDecompressionStream.Destroy; -begin - inflateEnd(FZRec); - inherited Destroy; -end; - -function TDecompressionStream.Read(var Buffer; Count: Longint): Longint; -begin - FZRec.next_out := @Buffer; - FZRec.avail_out := Count; - if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos; - while (FZRec.avail_out > 0) do - begin - if FZRec.avail_in = 0 then - begin - FZRec.avail_in := FStrm.Read(FBuffer, sizeof(FBuffer)); - if FZRec.avail_in = 0 then - begin - Result := Count - FZRec.avail_out; - Exit; - end; - FZRec.next_in := FBuffer; - FStrmPos := FStrm.Position; - Progress(Self); - end; - DCheck(inflate(FZRec, 0)); - end; - Result := Count; -end; - -function TDecompressionStream.Write(const Buffer; Count: Longint): Longint; -begin - raise EDecompressionError.Create('Invalid stream operation'); -end; - -function TDecompressionStream.Seek(Offset: Longint; Origin: Word): Longint; -var - I: Integer; - Buf: array [0..4095] of Char; -begin - if (Offset = 0) and (Origin = soFromBeginning) then - begin - DCheck(inflateReset(FZRec)); - FZRec.next_in := FBuffer; - FZRec.avail_in := 0; - FStrm.Position := 0; - FStrmPos := 0; - end - else if ( (Offset >= 0) and (Origin = soFromCurrent)) or - ( ((Offset - FZRec.total_out) > 0) and (Origin = soFromBeginning)) then - begin - if Origin = soFromBeginning then Dec(Offset, FZRec.total_out); - if Offset > 0 then - begin - for I := 1 to Offset div sizeof(Buf) do - ReadBuffer(Buf, sizeof(Buf)); - ReadBuffer(Buf, Offset mod sizeof(Buf)); - end; - end - else - raise EDecompressionError.Create('Invalid stream operation'); - Result := FZRec.total_out; -end; - -end. diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.php b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.php deleted file mode 100644 index 218892f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.php +++ /dev/null @@ -1,507 +0,0 @@ - - * @copyright Copyright (c) 2006, Manni - * @version 1.0 - * @link http://www.pkware.com/business_and_developers/developer/popups/appnote.txt - * @link http://mannithedark.is-a-geek.net/ - * @since 1.0 - * @package fnord.bb - * @subpackage archive - */ -class Zip extends Archive { - /** - * Outputs the zip file - * - * This function creates the zip file with the dirs and files given. - * If the optional parameter $file is given, the zip file is will be - * saved at that location. Otherwise the function returns the zip file's content. - * - * @access public - * - * @link http://www.pkware.com/business_and_developers/developer/popups/appnote.txt - * @param string $filename The path where the zip file will be saved - * - * @return bool|string Returns either true if the fil is sucessfully created or the content of the zip file - */ - function out($filename = false) { - // Empty output - $file_data = array(); // Data of the file part - $cd_data = array(); // Data of the central directory - - // Sort dirs and files by path length - uksort($this->dirs, 'sort_by_length'); - uksort($this->files, 'sort_by_length'); - - // Handle dirs - foreach($this->dirs as $dir) { - $dir .= '/'; - // File part - - // Reset dir data - $dir_data = ''; - - // Local file header - $dir_data .= "\x50\x4b\x03\x04"; // Local file header signature - $dir_data .= pack("v", 10); // Version needed to extract - $dir_data .= pack("v", 0); // General purpose bit flag - $dir_data .= pack("v", 0); // Compression method - $dir_data .= pack("v", 0); // Last mod file time - $dir_data .= pack("v", 0); // Last mod file date - $dir_data .= pack("V", 0); // crc-32 - $dir_data .= pack("V", 0); // Compressed size - $dir_data .= pack("V", 0); // Uncompressed size - $dir_data .= pack("v", strlen($dir)); // File name length - $dir_data .= pack("v", 0); // Extra field length - - $dir_data .= $dir; // File name - $dir_data .= ''; // Extra field (is empty) - - // File data - $dir_data .= ''; // Dirs have no file data - - // Data descriptor - $dir_data .= pack("V", 0); // crc-32 - $dir_data .= pack("V", 0); // Compressed size - $dir_data .= pack("V", 0); // Uncompressed size - - // Save current offset - $offset = strlen(implode('', $file_data)); - - // Append dir data to the file part - $file_data[] = $dir_data; - - // Central directory - - // Reset dir data - $dir_data = ''; - - // File header - $dir_data .= "\x50\x4b\x01\x02"; // Local file header signature - $dir_data .= pack("v", 0); // Version made by - $dir_data .= pack("v", 10); // Version needed to extract - $dir_data .= pack("v", 0); // General purpose bit flag - $dir_data .= pack("v", 0); // Compression method - $dir_data .= pack("v", 0); // Last mod file time - $dir_data .= pack("v", 0); // Last mod file date - $dir_data .= pack("V", 0); // crc-32 - $dir_data .= pack("V", 0); // Compressed size - $dir_data .= pack("V", 0); // Uncompressed size - $dir_data .= pack("v", strlen($dir)); // File name length - $dir_data .= pack("v", 0); // Extra field length - $dir_data .= pack("v", 0); // File comment length - $dir_data .= pack("v", 0); // Disk number start - $dir_data .= pack("v", 0); // Internal file attributes - $dir_data .= pack("V", 16); // External file attributes - $dir_data .= pack("V", $offset); // Relative offset of local header - - $dir_data .= $dir; // File name - $dir_data .= ''; // Extra field (is empty) - $dir_data .= ''; // File comment (is empty) - - /* - // Data descriptor - $dir_data .= pack("V", 0); // crc-32 - $dir_data .= pack("V", 0); // Compressed size - $dir_data .= pack("V", 0); // Uncompressed size - */ - - // Append dir data to the central directory data - $cd_data[] = $dir_data; - } - - // Handle files - foreach($this->files as $name => $file) { - // Get values - $content = $file[0]; - - // File part - - // Reset file data - $fd = ''; - - // Detect possible compressions - // Use deflate - if(function_exists('gzdeflate')) { - $method = 8; - - // Compress file content - $compressed_data = gzdeflate($content); - - // Use bzip2 - } elseif(function_exists('bzcompress')) { - $method = 12; - - // Compress file content - $compressed_data = bzcompress($content); - - // No compression - } else { - $method = 0; - - // Do not compress the content :P - $compressed_data = $content; - } - - // Local file header - $fd .= "\x50\x4b\x03\x04"; // Local file header signature - $fd .= pack("v", 20); // Version needed to extract - $fd .= pack("v", 0); // General purpose bit flag - $fd .= pack("v", $method); // Compression method - $fd .= pack("v", 0); // Last mod file time - $fd .= pack("v", 0); // Last mod file date - $fd .= pack("V", crc32($content)); // crc-32 - $fd .= pack("V", strlen($compressed_data)); // Compressed size - $fd .= pack("V", strlen($content)); // Uncompressed size - $fd .= pack("v", strlen($name)); // File name length - $fd .= pack("v", 0); // Extra field length - - $fd .= $name; // File name - $fd .= ''; // Extra field (is empty) - - // File data - $fd .= $compressed_data; - - // Data descriptor - $fd .= pack("V", crc32($content)); // crc-32 - $fd .= pack("V", strlen($compressed_data)); // Compressed size - $fd .= pack("V", strlen($content)); // Uncompressed size - - // Save current offset - $offset = strlen(implode('', $file_data)); - - // Append file data to the file part - $file_data[] = $fd; - - // Central directory - - // Reset file data - $fd = ''; - - // File header - $fd .= "\x50\x4b\x01\x02"; // Local file header signature - $fd .= pack("v", 0); // Version made by - $fd .= pack("v", 20); // Version needed to extract - $fd .= pack("v", 0); // General purpose bit flag - $fd .= pack("v", $method); // Compression method - $fd .= pack("v", 0); // Last mod file time - $fd .= pack("v", 0); // Last mod file date - $fd .= pack("V", crc32($content)); // crc-32 - $fd .= pack("V", strlen($compressed_data)); // Compressed size - $fd .= pack("V", strlen($content)); // Uncompressed size - $fd .= pack("v", strlen($name)); // File name length - $fd .= pack("v", 0); // Extra field length - $fd .= pack("v", 0); // File comment length - $fd .= pack("v", 0); // Disk number start - $fd .= pack("v", 0); // Internal file attributes - $fd .= pack("V", 32); // External file attributes - $fd .= pack("V", $offset); // Relative offset of local header - - $fd .= $name; // File name - $fd .= ''; // Extra field (is empty) - $fd .= ''; // File comment (is empty) - - /* - // Data descriptor - $fd .= pack("V", crc32($content)); // crc-32 - $fd .= pack("V", strlen($compressed_data)); // Compressed size - $fd .= pack("V", strlen($content)); // Uncompressed size - */ - - // Append file data to the central directory data - $cd_data[] = $fd; - } - - // Digital signature - $digital_signature = ''; - $digital_signature .= "\x50\x4b\x05\x05"; // Header signature - $digital_signature .= pack("v", 0); // Size of data - $digital_signature .= ''; // Signature data (is empty) - - $tmp_file_data = implode('', $file_data); // File data - $tmp_cd_data = implode('', $cd_data). // Central directory - $digital_signature; // Digital signature - - // End of central directory - $eof_cd = ''; - $eof_cd .= "\x50\x4b\x05\x06"; // End of central dir signature - $eof_cd .= pack("v", 0); // Number of this disk - $eof_cd .= pack("v", 0); // Number of the disk with the start of the central directory - $eof_cd .= pack("v", count($cd_data)); // Total number of entries in the central directory on this disk - $eof_cd .= pack("v", count($cd_data)); // Total number of entries in the central directory - $eof_cd .= pack("V", strlen($tmp_cd_data)); // Size of the central directory - $eof_cd .= pack("V", strlen($tmp_file_data)); // Offset of start of central directory with respect to the starting disk number - $eof_cd .= pack("v", 0); // .ZIP file comment length - $eof_cd .= ''; // .ZIP file comment (is empty) - - // Content of the zip file - $data = $tmp_file_data. - // $extra_data_record. - $tmp_cd_data. - $eof_cd; - - // Return content? - if(!$filename) - return $data; - - // Write to file - return file_put_contents($filename, $data); - } - - /** - * Load a zip file - * - * This function loads the files and dirs from a zip file from the harddrive. - * - * @access public - * - * @param string $file The path to the zip file - * @param bool $reset Reset the files and dirs before adding the zip file's content? - * - * @return bool Returns true if the file was loaded sucessfully - */ - function load_file($file, $reset = true) { - // Check whether the file exists - if(!file_exists($file)) - return false; - - // Load the files content - $content = @file_get_contents($file); - - // Return false if the file cannot be opened - if(!$content) - return false; - - // Read the zip - return $this->load_string($content, $reset); - } - - /** - * Load a zip string - * - * This function loads the files and dirs from a string - * - * @access public - * - * @param string $string The string the zip is generated from - * @param bool $reset Reset the files and dirs before adding the zip file's content? - * - * @return bool Returns true if the string was loaded sucessfully - */ - function load_string($string, $reset = true) { - // Reset the zip? - if($reset) { - $this->dirs = array(); - $this->files = array(); - } - - // Get the starting position of the end of central directory record - $start = strpos($string, "\x50\x4b\x05\x06"); - - // Error - if($start === false) - die('Could not find the end of central directory record'); - - // Get the ecdr - $eof_cd = substr($string, $start+4, 18); - - // Unpack the ecdr infos - $eof_cd = unpack('vdisc1/'. - 'vdisc2/'. - 'ventries1/'. - 'ventries2/'. - 'Vsize/'. - 'Voffset/'. - 'vcomment_lenght', $eof_cd); - - // Do not allow multi disc zips - if($eof_cd['disc1'] != 0) - die('multi disk stuff is not yet implemented :/'); - - // Save the interesting values - $cd_entries = $eof_cd['entries1']; - $cd_size = $eof_cd['size']; - $cd_offset = $eof_cd['offset']; - - // Get the central directory record - $cdr = substr($string, $cd_offset, $cd_size); - - // Reset the position and the list of the entries - $pos = 0; - $entries = array(); - - // Handle cdr - while($pos < strlen($cdr)) { - // Check header signature - // Digital signature - if(substr($cdr, $pos, 4) == "\x50\x4b\x05\x05") { - // Get digital signature size - $tmp_info = unpack('vsize', substr($cdr, $pos + 4, 2)); - - // Read out the digital signature - $digital_sig = substr($header, $pos + 6, $tmp_info['size']); - - break; - } - - // Get file header - $header = substr($cdr, $pos, 46); - - // Unpack the header information - $header_info = @unpack('Vheader/'. - 'vversion_made_by/'. - 'vversion_needed/'. - 'vgeneral_purpose/'. - 'vcompression_method/'. - 'vlast_mod_time/'. - 'vlast_mod_date/'. - 'Vcrc32/'. - 'Vcompressed_size/'. - 'Vuncompressed_size/'. - 'vname_length/'. - 'vextra_length/'. - 'vcomment_length/'. - 'vdisk_number/'. - 'vinternal_attributes/'. - 'Vexternal_attributes/'. - 'Voffset', - $header); - - // Valid header? - if($header_info['header'] != 33639248) - return false; - - // New position - $pos += 46; - - // Read out the file name - $header_info['name'] = substr($cdr, $pos, $header_info['name_length']); - - // New position - $pos += $header_info['name_length']; - - // Read out the extra stuff - $header_info['extra'] = substr($cdr, $pos, $header_info['extra_length']); - - // New position - $pos += $header_info['extra_length']; - - // Read out the comment - $header_info['comment'] = substr($cdr, $pos, $header_info['comment_length']); - - // New position - $pos += $header_info['comment_length']; - - // Append this file/dir to the entry list - $entries[] = $header_info; - } - - // Check whether all entries where read sucessfully - if(count($entries) != $cd_entries) - return false; - - // Handle files/dirs - foreach($entries as $entry) { - // Is a dir? - if($entry['external_attributes'] & 16) { - $this->add_dir($entry['name']); - continue; - } - - // Get local file header - $header = substr($string, $entry['offset'], 30); - - // Unpack the header information - $header_info = @unpack('Vheader/'. - 'vversion_needed/'. - 'vgeneral_purpose/'. - 'vcompression_method/'. - 'vlast_mod_time/'. - 'vlast_mod_date/'. - 'Vcrc32/'. - 'Vcompressed_size/'. - 'Vuncompressed_size/'. - 'vname_length/'. - 'vextra_length', - $header); - - // Valid header? - if($header_info['header'] != 67324752) - return false; - - // Get content start position - $start = $entry['offset'] + 30 + $header_info['name_length'] + $header_info['extra_length']; - - // Get the compressed data - $data = substr($string, $start, $header_info['compressed_size']); - - // Detect compression type - switch($header_info['compression_method']) { - // No compression - case 0: - // Ne decompression needed - $content = $data; - break; - - // Gzip - case 8: - if(!function_exists('gzinflate')) - return false; - - // Uncompress data - $content = gzinflate($data); - break; - - // Bzip2 - case 12: - if(!function_exists('bzdecompress')) - return false; - - // Decompress data - $content = bzdecompress($data); - break; - - // Compression not supported -> error - default: - return false; - } - - // Try to add file - if(!$this->add_file($entry['name'], $content)) - return false; - } - - return true; - } -} - -function &byref() { - $x = array(); - return $x; -} -?> diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.pig b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.pig deleted file mode 100644 index f67b026..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.pig +++ /dev/null @@ -1,148 +0,0 @@ -/** - * This script is an example recommender (using made up data) showing how you might modify item-item links - * by defining similar relations between items in a dataset and customizing the change in weighting. - * This example creates metadata by using the genre field as the metadata_field. The items with - * the same genre have it's weight cut in half in order to boost the signals of movies that do not have the same genre. - * This technique requires a customization of the standard GetItemItemRecommendations macro - */ -import 'recommenders.pig'; - - - -%default INPUT_PATH_PURCHASES '../data/retail/purchases.json' -%default INPUT_PATH_WISHLIST '../data/retail/wishlists.json' -%default INPUT_PATH_INVENTORY '../data/retail/inventory.json' -%default OUTPUT_PATH '../data/retail/out/modify_item_item' - - -/******** Custom GetItemItemRecommnedations *********/ -define recsys__GetItemItemRecommendations_ModifyCustom(user_item_signals, metadata) returns item_item_recs { - - -- Convert user_item_signals to an item_item_graph - ii_links_raw, item_weights = recsys__BuildItemItemGraph( - $user_item_signals, - $LOGISTIC_PARAM, - $MIN_LINK_WEIGHT, - $MAX_LINKS_PER_USER - ); - -- NOTE this function is added in order to combine metadata with item-item links - -- See macro for more detailed explination - ii_links_metadata = recsys__AddMetadataToItemItemLinks( - ii_links_raw, - $metadata - ); - - /********* Custom Code starts here ********/ - - --The code here should adjust the weights based on an item-item link and the equality of metadata. - -- In this case, if the metadata is the same, the weight is reduced. Otherwise the weight is left alone. - ii_links_adjusted = foreach ii_links_metadata generate item_A, item_B, - -- the amount of weight adjusted is dependant on the domain of data and what is expected - -- It is always best to adjust the weight by multiplying it by a factor rather than addition with a constant - (metadata_B == metadata_A ? (weight * 0.5): weight) as weight; - - - /******** Custom Code stops here *********/ - - -- remove negative numbers just incase - ii_links_adjusted_filt = foreach ii_links_adjusted generate item_A, item_B, - (weight <= 0 ? 0: weight) as weight; - -- Adjust the weights of the graph to improve recommendations. - ii_links = recsys__AdjustItemItemGraphWeight( - ii_links_adjusted_filt, - item_weights, - $BAYESIAN_PRIOR - ); - - -- Use the item-item graph to create item-item recommendations. - $item_item_recs = recsys__BuildItemItemRecommendationsFromGraph( - ii_links, - $NUM_RECS_PER_ITEM, - $NUM_RECS_PER_ITEM - ); -}; - - -/******* Load Data **********/ - ---Get purchase signals -purchase_input = load '$INPUT_PATH_PURCHASES' using org.apache.pig.piggybank.storage.JsonLoader( - 'row_id: int, - movie_id: chararray, - movie_name: chararray, - user_id: chararray, - purchase_price: int'); - ---Get wishlist signals -wishlist_input = load '$INPUT_PATH_WISHLIST' using org.apache.pig.piggybank.storage.JsonLoader( - 'row_id: int, - movie_id: chararray, - movie_name: chararray, - user_id: chararray'); - - -/******* Convert Data to Signals **********/ - --- Start with choosing 1 as max weight for a signal. -purchase_signals = foreach purchase_input generate - user_id as user, - movie_name as item, - 1.0 as weight; - - --- Start with choosing 0.5 as weight for wishlist items because that is a weaker signal than --- purchasing an item. -wishlist_signals = foreach wishlist_input generate - user_id as user, - movie_name as item, - 0.5 as weight; - -user_signals = union purchase_signals, wishlist_signals; - - -/******** Changes for Modifying item-item links ******/ -inventory_input = load '$INPUT_PATH_INVENTORY' using org.apache.pig.piggybank.storage.JsonLoader( - 'movie_title: chararray, - genres: bag{tuple(content:chararray)}'); - - -metadata = foreach inventory_input generate - FLATTEN(genres) as metadata_field, - movie_title as item; --- requires the macro to be written seperately - --NOTE this macro is defined within this file for clarity -item_item_recs = recsys__GetItemItemRecommendations_ModifyCustom(user_signals, metadata); -/******* No more changes ********/ - - -user_item_recs = recsys__GetUserItemRecommendations(user_signals, item_item_recs); - ---Completely unrelated code stuck in the middle -data = LOAD 's3n://my-s3-bucket/path/to/responses' - USING org.apache.pig.piggybank.storage.JsonLoader(); -responses = FOREACH data GENERATE object#'response' AS response: map[]; -out = FOREACH responses - GENERATE response#'id' AS id: int, response#'thread' AS thread: chararray, - response#'comments' AS comments: {t: (comment: chararray)}; -STORE out INTO 's3n://path/to/output' USING PigStorage('|'); - - -/******* Store recommendations **********/ - --- If your output folder exists already, hadoop will refuse to write data to it. - -rmf $OUTPUT_PATH/item_item_recs; -rmf $OUTPUT_PATH/user_item_recs; - -store item_item_recs into '$OUTPUT_PATH/item_item_recs' using PigStorage(); -store user_item_recs into '$OUTPUT_PATH/user_item_recs' using PigStorage(); - --- STORE the item_item_recs into dynamo -STORE item_item_recs - INTO '$OUTPUT_PATH/unused-ii-table-data' -USING com.mortardata.pig.storage.DynamoDBStorage('$II_TABLE', '$AWS_ACCESS_KEY_ID', '$AWS_SECRET_ACCESS_KEY'); - --- STORE the user_item_recs into dynamo -STORE user_item_recs - INTO '$OUTPUT_PATH/unused-ui-table-data' -USING com.mortardata.pig.storage.DynamoDBStorage('$UI_TABLE', '$AWS_ACCESS_KEY_ID', '$AWS_SECRET_ACCESS_KEY'); diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.plot b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.plot deleted file mode 100644 index cef0f90..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.plot +++ /dev/null @@ -1,333 +0,0 @@ -# -# $Id: prob2.dem,v 1.9 2006/06/14 03:24:09 sfeam Exp $ -# -# Demo Statistical Approximations version 1.1 -# -# Copyright (c) 1991, Jos van der Woude, jvdwoude@hut.nl - -# History: -# -- --- 1991 Jos van der Woude: 1st version -# 06 Jun 2006 Dan Sebald: Added plot methods for better visual effect. - -print "" -print "" -print "" -print "" -print "" -print "" -print " Statistical Approximations, version 1.1" -print "" -print " Copyright (c) 1991, 1992, Jos van de Woude, jvdwoude@hut.nl" -print "" -print "" -print "" -print "" -print "" -print "" -print "" -print "" -print "" -print "" -print "" -print " NOTE: contains 10 plots and consequently takes some time to run" -print " Press Ctrl-C to exit right now" -print "" -pause -1 " Press Return to start demo ..." - -load "stat.inc" -rnd(x) = floor(x+0.5) -r_xmin = -1 -r_sigma = 4.0 - -# Binomial PDF using normal approximation -n = 25; p = 0.15 -mu = n * p -sigma = sqrt(n * p * (1.0 - p)) -xmin = floor(mu - r_sigma * sigma) -xmin = xmin < r_xmin ? r_xmin : xmin -xmax = ceil(mu + r_sigma * sigma) -ymax = 1.1 * binom(floor((n+1)*p), n, p) #mode of binomial PDF used -set key box -unset zeroaxis -set xrange [xmin - 1 : xmax + 1] -set yrange [0 : ymax] -set xlabel "k, x ->" -set ylabel "probability density ->" -set ytics 0, ymax / 10.0, ymax -set format x "%2.0f" -set format y "%3.2f" -set sample 200 -set title "binomial PDF using normal approximation" -set arrow from mu, 0 to mu, normal(mu, mu, sigma) nohead -set arrow from mu, normal(mu + sigma, mu, sigma) \ - to mu + sigma, normal(mu + sigma, mu, sigma) nohead -set label "mu" at mu + 0.5, ymax / 10 -set label "sigma" at mu + 0.5 + sigma, normal(mu + sigma, mu, sigma) -plot binom(rnd(x), n, p) with histeps, normal(x, mu, sigma) -pause -1 "Hit return to continue" -unset arrow -unset label - -# Binomial PDF using poisson approximation -n = 50; p = 0.1 -mu = n * p -sigma = sqrt(mu) -xmin = floor(mu - r_sigma * sigma) -xmin = xmin < r_xmin ? r_xmin : xmin -xmax = ceil(mu + r_sigma * sigma) -ymax = 1.1 * binom(floor((n+1)*p), n, p) #mode of binomial PDF used -set key box -unset zeroaxis -set xrange [xmin - 1 : xmax + 1] -set yrange [0 : ymax] -set xlabel "k ->" -set ylabel "probability density ->" -set ytics 0, ymax / 10.0, ymax -set format x "%2.0f" -set format y "%3.2f" -set sample (xmax - xmin + 3) -set title "binomial PDF using poisson approximation" -set arrow from mu, 0 to mu, normal(mu, mu, sigma) nohead -set arrow from mu, normal(mu + sigma, mu, sigma) \ - to mu + sigma, normal(mu + sigma, mu, sigma) nohead -set label "mu" at mu + 0.5, ymax / 10 -set label "sigma" at mu + 0.5 + sigma, normal(mu + sigma, mu, sigma) -plot binom(x, n, p) with histeps, poisson(x, mu) with histeps -pause -1 "Hit return to continue" -unset arrow -unset label - -# Geometric PDF using gamma approximation -p = 0.3 -mu = (1.0 - p) / p -sigma = sqrt(mu / p) -lambda = p -rho = 1.0 - p -xmin = floor(mu - r_sigma * sigma) -xmin = xmin < r_xmin ? r_xmin : xmin -xmax = ceil(mu + r_sigma * sigma) -ymax = 1.1 * p -set key box -unset zeroaxis -set xrange [xmin - 1 : xmax + 1] -set yrange [0 : ymax] -set xlabel "k, x ->" -set ylabel "probability density ->" -set ytics 0, ymax / 10.0, ymax -set format x "%2.0f" -set format y "%3.2f" -set sample 200 -set title "geometric PDF using gamma approximation" -set arrow from mu, 0 to mu, gmm(mu, rho, lambda) nohead -set arrow from mu, gmm(mu + sigma, rho, lambda) \ - to mu + sigma, gmm(mu + sigma, rho, lambda) nohead -set label "mu" at mu + 0.5, ymax / 10 -set label "sigma" at mu + 0.5 + sigma, gmm(mu + sigma, rho, lambda) -plot geometric(rnd(x),p) with histeps, gmm(x, rho, lambda) -pause -1 "Hit return to continue" -unset arrow -unset label - -# Geometric PDF using normal approximation -p = 0.3 -mu = (1.0 - p) / p -sigma = sqrt(mu / p) -xmin = floor(mu - r_sigma * sigma) -xmin = xmin < r_xmin ? r_xmin : xmin -xmax = ceil(mu + r_sigma * sigma) -ymax = 1.1 * p -set key box -unset zeroaxis -set xrange [xmin - 1 : xmax + 1] -set yrange [0 : ymax] -set xlabel "k, x ->" -set ylabel "probability density ->" -set ytics 0, ymax / 10.0, ymax -set format x "%2.0f" -set format y "%3.2f" -set sample 200 -set title "geometric PDF using normal approximation" -set arrow from mu, 0 to mu, normal(mu, mu, sigma) nohead -set arrow from mu, normal(mu + sigma, mu, sigma) \ - to mu + sigma, normal(mu + sigma, mu, sigma) nohead -set label "mu" at mu + 0.5, ymax / 10 -set label "sigma" at mu + 0.5 + sigma, normal(mu + sigma, mu, sigma) -plot geometric(rnd(x),p) with histeps, normal(x, mu, sigma) -pause -1 "Hit return to continue" -unset arrow -unset label - -# Hypergeometric PDF using binomial approximation -nn = 75; mm = 25; n = 10 -p = real(mm) / nn -mu = n * p -sigma = sqrt(real(nn - n) / (nn - 1.0) * n * p * (1.0 - p)) -xmin = floor(mu - r_sigma * sigma) -xmin = xmin < r_xmin ? r_xmin : xmin -xmax = ceil(mu + r_sigma * sigma) -ymax = 1.1 * hypgeo(floor(mu), nn, mm, n) #mode of binom PDF used -set key box -unset zeroaxis -set xrange [xmin - 1 : xmax + 1] -set yrange [0 : ymax] -set xlabel "k ->" -set ylabel "probability density ->" -set ytics 0, ymax / 10.0, ymax -set format x "%2.0f" -set format y "%3.2f" -set sample (xmax - xmin + 3) -set title "hypergeometric PDF using binomial approximation" -set arrow from mu, 0 to mu, binom(floor(mu), n, p) nohead -set arrow from mu, binom(floor(mu + sigma), n, p) \ - to mu + sigma, binom(floor(mu + sigma), n, p) nohead -set label "mu" at mu + 0.5, ymax / 10 -set label "sigma" at mu + 0.5 + sigma, binom(floor(mu + sigma), n, p) -plot hypgeo(x, nn, mm, n) with histeps, binom(x, n, p) with histeps -pause -1 "Hit return to continue" -unset arrow -unset label - -# Hypergeometric PDF using normal approximation -nn = 75; mm = 25; n = 10 -p = real(mm) / nn -mu = n * p -sigma = sqrt(real(nn - n) / (nn - 1.0) * n * p * (1.0 - p)) -xmin = floor(mu - r_sigma * sigma) -xmin = xmin < r_xmin ? r_xmin : xmin -xmax = ceil(mu + r_sigma * sigma) -ymax = 1.1 * hypgeo(floor(mu), nn, mm, n) #mode of binom PDF used -set key box -unset zeroaxis -set xrange [xmin - 1 : xmax + 1] -set yrange [0 : ymax] -set xlabel "k, x ->" -set ylabel "probability density ->" -set ytics 0, ymax / 10.0, ymax -set format x "%2.0f" -set format y "%3.2f" -set sample 200 -set title "hypergeometric PDF using normal approximation" -set arrow from mu, 0 to mu, normal(mu, mu, sigma) nohead -set arrow from mu, normal(mu + sigma, mu, sigma) \ - to mu + sigma, normal(mu + sigma, mu, sigma) nohead -set label "mu" at mu + 0.5, ymax / 10 -set label "sigma" at mu + 0.5 + sigma, normal(mu + sigma, mu, sigma) -plot hypgeo(rnd(x), nn, mm, n) with histeps, normal(x, mu, sigma) -pause -1 "Hit return to continue" -unset arrow -unset label - -# Negative binomial PDF using gamma approximation -r = 8; p = 0.6 -mu = r * (1.0 - p) / p -sigma = sqrt(mu / p) -lambda = p -rho = r * (1.0 - p) -xmin = floor(mu - r_sigma * sigma) -xmin = xmin < r_xmin ? r_xmin : xmin -xmax = ceil(mu + r_sigma * sigma) -ymax = 1.1 * gmm((rho - 1) / lambda, rho, lambda) #mode of gamma PDF used -set key box -unset zeroaxis -set xrange [xmin - 1 : xmax + 1] -set yrange [0 : ymax] -set xlabel "k, x ->" -set ylabel "probability density ->" -set ytics 0, ymax / 10.0, ymax -set format x "%2.0f" -set format y "%3.2f" -set sample 200 -set title "negative binomial PDF using gamma approximation" -set arrow from mu, 0 to mu, gmm(mu, rho, lambda) nohead -set arrow from mu, gmm(mu + sigma, rho, lambda) \ - to mu + sigma, gmm(mu + sigma, rho, lambda) nohead -set label "mu" at mu + 0.5, ymax / 10 -set label "sigma" at mu + 0.5 + sigma, gmm(mu + sigma, rho, lambda) -plot negbin(rnd(x), r, p) with histeps, gmm(x, rho, lambda) -pause -1 "Hit return to continue" -unset arrow -unset label - -# Negative binomial PDF using normal approximation -r = 8; p = 0.4 -mu = r * (1.0 - p) / p -sigma = sqrt(mu / p) -xmin = floor(mu - r_sigma * sigma) -xmin = xmin < r_xmin ? r_xmin : xmin -xmax = ceil(mu + r_sigma * sigma) -ymax = 1.1 * negbin(floor((r-1)*(1-p)/p), r, p) #mode of gamma PDF used -set key box -unset zeroaxis -set xrange [xmin - 1 : xmax + 1] -set yrange [0 : ymax] -set xlabel "k, x ->" -set ylabel "probability density ->" -set ytics 0, ymax / 10.0, ymax -set format x "%2.0f" -set format y "%3.2f" -set sample 200 -set title "negative binomial PDF using normal approximation" -set arrow from mu, 0 to mu, normal(mu, mu, sigma) nohead -set arrow from mu, normal(mu + sigma, mu, sigma) \ - to mu + sigma, normal(mu + sigma, mu, sigma) nohead -set label "mu" at mu + 0.5, ymax / 10 -set label "sigma" at mu + 0.5 + sigma, normal(mu + sigma, mu, sigma) -plot negbin(rnd(x), r, p) with histeps, normal(x, mu, sigma) -pause -1 "Hit return to continue" -unset arrow -unset label - -# Normal PDF using logistic approximation -mu = 1.0; sigma = 1.5 -a = mu -lambda = pi / (sqrt(3.0) * sigma) -xmin = mu - r_sigma * sigma -xmax = mu + r_sigma * sigma -ymax = 1.1 * logistic(mu, a, lambda) #mode of logistic PDF used -set key box -unset zeroaxis -set xrange [xmin: xmax] -set yrange [0 : ymax] -set xlabel "x ->" -set ylabel "probability density ->" -set ytics 0, ymax / 10.0, ymax -set format x "%.1f" -set format y "%.2f" -set sample 200 -set title "normal PDF using logistic approximation" -set arrow from mu,0 to mu, normal(mu, mu, sigma) nohead -set arrow from mu, normal(mu + sigma, mu, sigma) \ - to mu + sigma, normal(mu + sigma, mu, sigma) nohead -set label "mu" at mu + 0.5, ymax / 10 -set label "sigma" at mu + 0.5 + sigma, normal(mu + sigma, mu, sigma) -plot logistic(x, a, lambda), normal(x, mu, sigma) -pause -1 "Hit return to continue" -unset arrow -unset label - -# Poisson PDF using normal approximation -mu = 5.0 -sigma = sqrt(mu) -xmin = floor(mu - r_sigma * sigma) -xmin = xmin < r_xmin ? r_xmin : xmin -xmax = ceil(mu + r_sigma * sigma) -ymax = 1.1 * poisson(mu, mu) #mode of poisson PDF used -set key box -unset zeroaxis -set xrange [xmin - 1 : xmax + 1] -set yrange [0 : ymax] -set xlabel "k, x ->" -set ylabel "probability density ->" -set ytics 0, ymax / 10.0, ymax -set format x "%2.0f" -set format y "%3.2f" -set sample 200 -set title "poisson PDF using normal approximation" -set arrow from mu, 0 to mu, normal(mu, mu, sigma) nohead -set arrow from mu, normal(mu + sigma, mu, sigma) \ - to mu + sigma, normal(mu + sigma, mu, sigma) nohead -set label "mu" at mu + 0.5, ymax / 10 -set label "sigma" at mu + 0.5 + sigma, normal(mu + sigma, mu, sigma) -plot poisson(rnd(x), mu) with histeps, normal(x, mu, sigma) -pause -1 "Hit return to continue" -reset diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.ps1 b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.ps1 deleted file mode 100644 index 385fb6f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.ps1 +++ /dev/null @@ -1,108 +0,0 @@ -<# -.SYNOPSIS -Runs a T-SQL Query and optional outputs results to a delimited file. -.DESCRIPTION -Invoke-Sql script will run a T-SQL query or stored procedure and optionally outputs a delimited file. -.EXAMPLE -PowerShell.exe -File "C:\Scripts\Invoke-Sql.ps1" -ServerInstance "Z003\sqlprod2" -Database orders -Query "EXEC usp_accounts '12445678'" -This example connects to Z003\sqlprod2.Orders and executes a stored procedure which does not return a result set -.EXAMPLE -PowerShell.exe -File "C:\Scripts\Invoke-Sql.ps1" -ServerInstance "Z003\sqlprod2" -Database orders -Query "SELECT * FROM dbo.accounts" -FilePath "C:\Scripts\accounts.txt" -Delimiter "," -This example connects to Z003\sqlprod2.Orders and selects the records from the accounts tables, the data is outputed to a CSV file -.NOTES -Version History -v1.0 - Chad Miller - 12/14/2010 - Initial release -IMPORTANT!!! The EventLog source which is set to the application needs to be registered with -the Event log: -New-EventLog -LogName Application -Source $Application -#> -param( -#ServerInstance is Mandatory! -[Parameter(Position=0, Mandatory=$false)] [string]$ServerInstance, -#Database is Mandatory! -[Parameter(Position=1, Mandatory=$false)] [string]$Database, -#Query is Mandatory! -[Parameter(Position=2, Mandatory=$false)] [string]$Query, -[Parameter(Position=3, Mandatory=$false)] [string]$Application="Invoke-Sql.ps1", -[Parameter(Position=4, Mandatory=$false)] [string]$FilePath, -[Parameter(Position=7, Mandatory=$false)] [string]$Delimiter="|", -#If UserName isn't supplied a trusted connection will be used -[Parameter(Position=5, Mandatory=$false)] [string]$UserName, -[Parameter(Position=6, Mandatory=$false)] [string]$Password, -[Parameter(Position=8, Mandatory=$false)] [Int32]$QueryTimeout=600, -[Parameter(Position=9, Mandatory=$false)] [Int32]$ConnectionTimeout=15 -) - - -#This must be run as administrator on Windows 2008 and higher! -New-EventLog -LogName Application -Source $Application -EA SilentlyContinue -$Error.Clear() - -####################### -function Invoke-SqlCmd2 -{ - param( - [Parameter(Position=0, Mandatory=$true)] [string]$ServerInstance, - [Parameter(Position=1, Mandatory=$true)] [string]$Database, - [Parameter(Position=2, Mandatory=$true)] [string]$Query, - [Parameter(Position=3, Mandatory=$false)] [string]$UserName, - [Parameter(Position=4, Mandatory=$false)] [string]$Password, - [Parameter(Position=5, Mandatory=$false)] [Int32]$QueryTimeout, - [Parameter(Position=6, Mandatory=$false)] [Int32]$ConnectionTimeout - ) - - try { - if ($Username) - { $ConnectionString = "Server={0};Database={1};User ID={2};Password={3};Trusted_Connection=False;Connect Timeout={4}" -f $ServerInstance,$Database,$Username,$Password,$ConnectionTimeout } - else - { $ConnectionString = "Server={0};Database={1};Integrated Security=True;Connect Timeout={2}" -f $ServerInstance,$Database,$ConnectionTimeout } - $conn=new-object System.Data.SqlClient.SQLConnection - $conn.ConnectionString=$ConnectionString - $conn.Open() - $cmd=new-object system.Data.SqlClient.SqlCommand($Query,$conn) - $cmd.CommandTimeout=$QueryTimeout - $ds=New-Object system.Data.DataSet - $da=New-Object system.Data.SqlClient.SqlDataAdapter($cmd) - [void]$da.fill($ds) - Write-Output ($ds.Tables[0]) - } - finally { - $conn.Dispose() - } - -} #Invoke-SqlCmd2 - -####################### -# MAIN # -####################### -if ($PSBoundParameters.Count -eq 0) -{ - get-help $myInvocation.MyCommand.Path -full - break -} - -try { - $msg = $null - $msg += "Application/Job Name: $Application`n" - $msg += "Query: $Query`n" - $msg += "ServerInstance: $ServerInstance`n" - $msg += "Database: $Database`n" - $msg += "FilePath: $FilePath`n" - - Write-EventLog -LogName Application -Source "$Application" -EntryType Information -EventId 12345 -Message "Starting`n$msg" - $dt = Invoke-SqlCmd2 -ServerInstance $ServerInstance -Database $Database -Query $Query -UserName $UserName -Password $Password -QueryTimeOut $QueryTimeOut -ConnectionTimeout $ConnectionTimeout - if ($FilePath) - { - if ($dt) - { $dt | export-csv -Delimiter $Delimiter -Path $FilePath -NoTypeInformation } - else #Query Returned No Output! - {Write-EventLog -LogName Application -Source "$Application" -EntryType Warning -EventId 12345 -Message "NoOutput`n$msg" } - } - - Write-EventLog -LogName Application -Source "$Application" -EntryType Information -EventId 12345 -Message "Completed`n$msg" -} -catch { - $Exception = "{0}, {1}" -f $_.Exception.GetType().FullName,$( $_.Exception.Message -replace "'" ) - Write-EventLog -LogName Application -Source "$Application" -EntryType Error -EventId 12345 -Message "Error`n$msg`n$Exception" - throw -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.pwn b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.pwn deleted file mode 100644 index d646861..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.pwn +++ /dev/null @@ -1,253 +0,0 @@ -#include - -// Single line comment -/* Multi line - comment */ - -/// documentation -/** - - documentation multi line - -**/ - -public OnGameModeInit() { - printf("Hello, World!"); -} - -enum info { - Float:ex; - exa, - exam[5], -} -new arr[5][info]; - -stock Float:test_func() -{ - new a = 5, Float:b = 10.3; - if (a == b) { - - } else { - - } - - for (new i = 0; i < 10; i++) { - continue; - } - - do { - a--; - } while (a > 0); - - while (a < 5) { - a++; - break; - } - - switch (a) { - case 0: { - } - case 0..4: { - } - case 5, 6: { - } - } - - static x; - new xx = a > 5 ? 5 : 0; - new array[sizeof arr] = {0}; - tagof a; - state a; - goto label; - new byte[2 char]; - byte{0} = 'a'; - - return (float(a) + b); -} - - -// float.inc -/* Float arithmetic - * - * (c) Copyright 1999, Artran, Inc. - * Written by Greg Garner (gmg@artran.com) - * Modified in March 2001 to include user defined - * operators for the floating point functions. - * - * This file is provided as is (no warranties). - */ -#if defined _Float_included - #endinput -#endif -#define _Float_included -#pragma library Float - -/* Different methods of rounding */ -enum floatround_method { - floatround_round, - floatround_floor, - floatround_ceil, - floatround_tozero, - floatround_unbiased -} -enum anglemode { - radian, - degrees, - grades -} - -/**************************************************/ -/* Convert an integer into a floating point value */ -native Float:float(value); - -/**************************************************/ -/* Convert a string into a floating point value */ -native Float:floatstr(const string[]); - -/**************************************************/ -/* Multiple two floats together */ -native Float:floatmul(Float:oper1, Float:oper2); - -/**************************************************/ -/* Divide the dividend float by the divisor float */ -native Float:floatdiv(Float:dividend, Float:divisor); - -/**************************************************/ -/* Add two floats together */ -native Float:floatadd(Float:oper1, Float:oper2); - -/**************************************************/ -/* Subtract oper2 float from oper1 float */ -native Float:floatsub(Float:oper1, Float:oper2); - -/**************************************************/ -/* Return the fractional part of a float */ -native Float:floatfract(Float:value); - -/**************************************************/ -/* Round a float into a integer value */ -native floatround(Float:value, floatround_method:method=floatround_round); - -/**************************************************/ -/* Compare two integers. If the two elements are equal, return 0. - If the first argument is greater than the second argument, return 1, - If the first argument is less than the second argument, return -1. */ -native floatcmp(Float:oper1, Float:oper2); - -/**************************************************/ -/* Return the square root of the input value, same as floatpower(value, 0.5) */ -native Float:floatsqroot(Float:value); - -/**************************************************/ -/* Return the value raised to the power of the exponent */ -native Float:floatpower(Float:value, Float:exponent); - -/**************************************************/ -/* Return the logarithm */ -native Float:floatlog(Float:value, Float:base=10.0); - -/**************************************************/ -/* Return the sine, cosine or tangent. The input angle may be in radian, - degrees or grades. */ -native Float:floatsin(Float:value, anglemode:mode=radian); -native Float:floatcos(Float:value, anglemode:mode=radian); -native Float:floattan(Float:value, anglemode:mode=radian); - -/**************************************************/ -/* Return the absolute value */ -native Float:floatabs(Float:value); - - -/**************************************************/ -#pragma rational Float - -/* user defined operators */ -native Float:operator*(Float:oper1, Float:oper2) = floatmul; -native Float:operator/(Float:oper1, Float:oper2) = floatdiv; -native Float:operator+(Float:oper1, Float:oper2) = floatadd; -native Float:operator-(Float:oper1, Float:oper2) = floatsub; -native Float:operator=(oper) = float; - -stock Float:operator++(Float:oper) - return oper+1.0; - -stock Float:operator--(Float:oper) - return oper-1.0; - -stock Float:operator-(Float:oper) - return oper^Float:cellmin; /* IEEE values are sign/magnitude */ - -stock Float:operator*(Float:oper1, oper2) - return floatmul(oper1, float(oper2)); /* "*" is commutative */ - -stock Float:operator/(Float:oper1, oper2) - return floatdiv(oper1, float(oper2)); - -stock Float:operator/(oper1, Float:oper2) - return floatdiv(float(oper1), oper2); - -stock Float:operator+(Float:oper1, oper2) - return floatadd(oper1, float(oper2)); /* "+" is commutative */ - -stock Float:operator-(Float:oper1, oper2) - return floatsub(oper1, float(oper2)); - -stock Float:operator-(oper1, Float:oper2) - return floatsub(float(oper1), oper2); - -stock bool:operator==(Float:oper1, Float:oper2) - return floatcmp(oper1, oper2) == 0; - -stock bool:operator==(Float:oper1, oper2) - return floatcmp(oper1, float(oper2)) == 0; /* "==" is commutative */ - -stock bool:operator!=(Float:oper1, Float:oper2) - return floatcmp(oper1, oper2) != 0; - -stock bool:operator!=(Float:oper1, oper2) - return floatcmp(oper1, float(oper2)) != 0; /* "!=" is commutative */ - -stock bool:operator>(Float:oper1, Float:oper2) - return floatcmp(oper1, oper2) > 0; - -stock bool:operator>(Float:oper1, oper2) - return floatcmp(oper1, float(oper2)) > 0; - -stock bool:operator>(oper1, Float:oper2) - return floatcmp(float(oper1), oper2) > 0; - -stock bool:operator>=(Float:oper1, Float:oper2) - return floatcmp(oper1, oper2) >= 0; - -stock bool:operator>=(Float:oper1, oper2) - return floatcmp(oper1, float(oper2)) >= 0; - -stock bool:operator>=(oper1, Float:oper2) - return floatcmp(float(oper1), oper2) >= 0; - -stock bool:operator<(Float:oper1, Float:oper2) - return floatcmp(oper1, oper2) < 0; - -stock bool:operator<(Float:oper1, oper2) - return floatcmp(oper1, float(oper2)) < 0; - -stock bool:operator<(oper1, Float:oper2) - return floatcmp(float(oper1), oper2) < 0; - -stock bool:operator<=(Float:oper1, Float:oper2) - return floatcmp(oper1, oper2) <= 0; - -stock bool:operator<=(Float:oper1, oper2) - return floatcmp(oper1, float(oper2)) <= 0; - -stock bool:operator<=(oper1, Float:oper2) - return floatcmp(float(oper1), oper2) <= 0; - -stock bool:operator!(Float:oper) - return (_:oper & cellmax) == 0; - -/* forbidden operations */ -forward operator%(Float:oper1, Float:oper2); -forward operator%(Float:oper1, oper2); -forward operator%(oper1, Float:oper2); - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.pypylog b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.pypylog deleted file mode 100644 index f85030c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.pypylog +++ /dev/null @@ -1,1839 +0,0 @@ -[5ed621f277b8] {jit-backend-counts -[5ed621f309bc] jit-backend-counts} -[5ed622c957b0] {jit-log-opt-loop -# Loop 0 : loop with 145 ops -[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, f11, p12, p13, p14, p15, i16, f17, i18, i19, i20, i21, i22, i23, i24, i25, i26, f27, i28, f29, f30] -debug_merge_point(' #125 FOR_ITER', 0) -i32 = int_gt(i18, 0) -guard_true(i32, descr=) [p1, p0, p5, p2, p3, p4, p6, p7, p8, p9, p10, p12, p13, p14, p15, i16, f17, f11] -i33 = int_add(i19, i20) -i35 = int_sub(i18, 1) -debug_merge_point(' #128 STORE_FAST', 0) -debug_merge_point(' #131 LOAD_FAST', 0) -debug_merge_point(' #134 LOAD_FAST', 0) -debug_merge_point(' #137 LOAD_FAST', 0) -debug_merge_point(' #140 BINARY_MULTIPLY', 0) -setfield_gc(p5, i33, descr=) -setfield_gc(p5, i35, descr=) -i36 = int_mul_ovf(i21, i22) -guard_no_overflow(, descr=) [p1, p0, p12, p15, i36, p2, p3, p4, p5, p14, p6, p7, p8, p9, p10, p13, i19, None, f17, f11] -debug_merge_point(' #141 LOAD_FAST', 0) -debug_merge_point(' #144 BINARY_ADD', 0) -i38 = int_add_ovf(i36, i19) -guard_no_overflow(, descr=) [p1, p0, i38, p2, p3, p4, p5, p14, p6, p7, p8, p9, p10, p12, p13, p15, i36, i19, None, f17, f11] -debug_merge_point(' #145 BINARY_SUBSCR', 0) -i40 = int_lt(i38, 0) -guard_false(i40, descr=) [p1, p0, p14, i38, i23, p2, p3, p4, p5, p6, p7, p8, p9, p10, p12, p13, p15, None, i19, None, f17, f11] -i41 = int_lt(i38, i23) -guard_true(i41, descr=) [p1, p0, p14, i38, p2, p3, p4, p5, p6, p7, p8, p9, p10, p12, p13, p15, None, i19, None, f17, f11] -f42 = getarrayitem_raw(i24, i38, descr=) -debug_merge_point(' #146 STORE_FAST', 0) -debug_merge_point(' #149 LOAD_FAST', 0) -debug_merge_point(' #152 LOAD_FAST', 0) -debug_merge_point(' #155 LOAD_CONST', 0) -debug_merge_point(' #158 BINARY_SUBTRACT', 0) -debug_merge_point(' #159 LOAD_FAST', 0) -debug_merge_point(' #162 BINARY_MULTIPLY', 0) -debug_merge_point(' #163 LOAD_FAST', 0) -debug_merge_point(' #166 BINARY_ADD', 0) -i43 = int_add_ovf(i25, i19) -guard_no_overflow(, descr=) [p1, p0, i43, p2, p3, p4, p5, p14, p6, p7, p8, p9, p10, p12, p13, p15, f42, i25, None, i19, None, None, f11] -debug_merge_point(' #167 BINARY_SUBSCR', 0) -i45 = int_lt(i43, 0) -guard_false(i45, descr=) [p1, p0, p14, i43, i23, p2, p3, p4, p5, p6, p7, p8, p9, p10, p12, p13, p15, f42, None, None, i19, None, None, f11] -i46 = int_lt(i43, i23) -guard_true(i46, descr=) [p1, p0, p14, i43, p2, p3, p4, p5, p6, p7, p8, p9, p10, p12, p13, p15, f42, None, None, i19, None, None, f11] -f47 = getarrayitem_raw(i24, i43, descr=) -debug_merge_point(' #168 LOAD_FAST', 0) -debug_merge_point(' #171 LOAD_FAST', 0) -debug_merge_point(' #174 LOAD_CONST', 0) -debug_merge_point(' #177 BINARY_ADD', 0) -debug_merge_point(' #178 LOAD_FAST', 0) -debug_merge_point(' #181 BINARY_MULTIPLY', 0) -debug_merge_point(' #182 LOAD_FAST', 0) -debug_merge_point(' #185 BINARY_ADD', 0) -i48 = int_add_ovf(i26, i19) -guard_no_overflow(, descr=) [p1, p0, i48, p2, p3, p4, p5, p14, p6, p7, p8, p9, p10, p12, p13, p15, i26, f47, f42, None, None, i19, None, None, f11] -debug_merge_point(' #186 BINARY_SUBSCR', 0) -i50 = int_lt(i48, 0) -guard_false(i50, descr=) [p1, p0, p14, i48, i23, p2, p3, p4, p5, p6, p7, p8, p9, p10, p12, p13, p15, None, f47, f42, None, None, i19, None, None, f11] -i51 = int_lt(i48, i23) -guard_true(i51, descr=) [p1, p0, p14, i48, p2, p3, p4, p5, p6, p7, p8, p9, p10, p12, p13, p15, None, f47, f42, None, None, i19, None, None, f11] -f52 = getarrayitem_raw(i24, i48, descr=) -debug_merge_point(' #187 BINARY_ADD', 0) -f53 = float_add(f47, f52) -debug_merge_point(' #188 LOAD_FAST', 0) -debug_merge_point(' #191 BINARY_MULTIPLY', 0) -f54 = float_mul(f53, f27) -debug_merge_point(' #192 LOAD_FAST', 0) -debug_merge_point(' #195 LOAD_FAST', 0) -debug_merge_point(' #198 LOAD_FAST', 0) -debug_merge_point(' #201 BINARY_MULTIPLY', 0) -debug_merge_point(' #202 LOAD_FAST', 0) -debug_merge_point(' #205 BINARY_ADD', 0) -i55 = int_add_ovf(i28, i19) -guard_no_overflow(, descr=) [p1, p0, i55, p2, p3, p4, p5, p14, p6, p7, p8, p9, p10, p12, p13, p15, f54, i28, None, None, f42, None, None, i19, None, None, f11] -debug_merge_point(' #206 LOAD_CONST', 0) -debug_merge_point(' #209 BINARY_SUBTRACT', 0) -i57 = int_sub_ovf(i55, 1) -guard_no_overflow(, descr=) [p1, p0, i57, p2, p3, p4, p5, p14, p6, p7, p8, p9, p10, p12, p13, p15, i55, f54, None, None, None, f42, None, None, i19, None, None, f11] -debug_merge_point(' #210 BINARY_SUBSCR', 0) -i59 = int_lt(i57, 0) -guard_false(i59, descr=) [p1, p0, p14, i57, i23, p2, p3, p4, p5, p6, p7, p8, p9, p10, p12, p13, p15, None, f54, None, None, None, f42, None, None, i19, None, None, f11] -i60 = int_lt(i57, i23) -guard_true(i60, descr=) [p1, p0, p14, i57, p2, p3, p4, p5, p6, p7, p8, p9, p10, p12, p13, p15, None, f54, None, None, None, f42, None, None, i19, None, None, f11] -f61 = getarrayitem_raw(i24, i57, descr=) -debug_merge_point(' #211 LOAD_FAST', 0) -debug_merge_point(' #214 LOAD_FAST', 0) -debug_merge_point(' #217 LOAD_FAST', 0) -debug_merge_point(' #220 BINARY_MULTIPLY', 0) -debug_merge_point(' #221 LOAD_FAST', 0) -debug_merge_point(' #224 BINARY_ADD', 0) -debug_merge_point(' #225 LOAD_CONST', 0) -debug_merge_point(' #228 BINARY_ADD', 0) -i63 = int_add_ovf(i55, 1) -guard_no_overflow(, descr=) [p1, p0, i63, p2, p3, p4, p5, p14, p6, p7, p8, p9, p10, p12, p13, p15, f61, i55, f54, None, None, None, f42, None, None, i19, None, None, f11] -debug_merge_point(' #229 BINARY_SUBSCR', 0) -i64 = int_lt(i63, i23) -guard_true(i64, descr=) [p1, p0, p14, i63, p2, p3, p4, p5, p6, p7, p8, p9, p10, p12, p13, p15, f61, None, f54, None, None, None, f42, None, None, i19, None, None, f11] -f65 = getarrayitem_raw(i24, i63, descr=) -debug_merge_point(' #230 BINARY_ADD', 0) -f66 = float_add(f61, f65) -debug_merge_point(' #231 LOAD_FAST', 0) -debug_merge_point(' #234 BINARY_MULTIPLY', 0) -f67 = float_mul(f66, f29) -debug_merge_point(' #235 BINARY_ADD', 0) -f68 = float_add(f54, f67) -debug_merge_point(' #236 LOAD_FAST', 0) -debug_merge_point(' #239 BINARY_MULTIPLY', 0) -f69 = float_mul(f68, f30) -debug_merge_point(' #240 LOAD_FAST', 0) -debug_merge_point(' #243 LOAD_FAST', 0) -debug_merge_point(' #246 LOAD_FAST', 0) -debug_merge_point(' #249 BINARY_MULTIPLY', 0) -debug_merge_point(' #250 LOAD_FAST', 0) -debug_merge_point(' #253 BINARY_ADD', 0) -debug_merge_point(' #254 STORE_SUBSCR', 0) -i70 = int_lt(i55, i23) -guard_true(i70, descr=) [p1, p0, p14, i55, p2, p3, p4, p5, p6, p7, p8, p9, p10, p12, p13, p15, f69, None, None, None, None, None, None, f42, None, None, i19, None, None, f11] -setarrayitem_raw(i24, i55, f69, descr=) -debug_merge_point(' #255 LOAD_FAST', 0) -debug_merge_point(' #258 LOAD_GLOBAL', 0) -debug_merge_point(' #261 LOAD_FAST', 0) -debug_merge_point(' #264 LOAD_FAST', 0) -debug_merge_point(' #267 LOAD_FAST', 0) -debug_merge_point(' #270 BINARY_MULTIPLY', 0) -debug_merge_point(' #271 LOAD_FAST', 0) -debug_merge_point(' #274 BINARY_ADD', 0) -debug_merge_point(' #275 BINARY_SUBSCR', 0) -f71 = getarrayitem_raw(i24, i55, descr=) -debug_merge_point(' #276 LOAD_FAST', 0) -debug_merge_point(' #279 BINARY_SUBTRACT', 0) -f72 = float_sub(f71, f42) -debug_merge_point(' #280 CALL_FUNCTION', 0) -i73 = force_token() -debug_merge_point(' #0 LOAD_FAST', 1) -debug_merge_point(' #3 LOAD_FAST', 1) -debug_merge_point(' #6 BINARY_MULTIPLY', 1) -f74 = float_mul(f72, f72) -debug_merge_point(' #7 RETURN_VALUE', 1) -debug_merge_point(' #283 INPLACE_ADD', 0) -f75 = float_add(f11, f74) -debug_merge_point(' #284 STORE_FAST', 0) -debug_merge_point(' #287 JUMP_ABSOLUTE', 0) -i77 = getfield_raw(38968960, descr=) -i79 = int_sub(i77, 26) -setfield_raw(38968960, i79, descr=) -i81 = int_lt(i79, 0) -guard_false(i81, descr=) [p1, p0, p2, p3, p4, p5, p6, p7, p8, p9, p10, p12, p13, p14, p15, f75, None, None, None, None, None, None, None, f42, None, None, i19, None, None, None] -debug_merge_point(' #125 FOR_ITER', 0) -jump(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, f75, p12, p13, p14, p15, i19, f42, i35, i33, i20, i21, i22, i23, i24, i25, i26, f27, i36, f29, f30, descr=) -[5ed622d5187e] jit-log-opt-loop} -[5ed622e116d0] {jit-log-opt-loop -# Loop 1 : entry bridge with 188 ops -[p0, p1, p2, p3, i4, p5, i6, i7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26] -debug_merge_point(' #125 FOR_ITER', 0) -guard_value(i4, 2, descr=) [i4, p1, p0, p2, p3, p5, i6, i7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26] -guard_class(p9, 19861240, descr=) [p1, p0, p9, p2, p3, p5, i6, p8, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26] -i29 = getfield_gc(p9, descr=) -i31 = int_gt(i29, 0) -guard_true(i31, descr=) [p1, p0, p9, p2, p3, p5, i6, p8, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26] -i32 = getfield_gc(p9, descr=) -i33 = getfield_gc(p9, descr=) -i34 = int_add(i32, i33) -i36 = int_sub(i29, 1) -setfield_gc(p9, i34, descr=) -setfield_gc(p9, i36, descr=) -guard_value(i6, 0, descr=) [i6, p1, p0, p2, p3, p5, p8, p9, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, i32] -debug_merge_point(' #128 STORE_FAST', 0) -debug_merge_point(' #131 LOAD_FAST', 0) -guard_nonnull_class(p23, 19886912, descr=) [p1, p0, p23, p2, p3, p5, p8, p9, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p24, p26, i32] -debug_merge_point(' #134 LOAD_FAST', 0) -guard_nonnull_class(p24, ConstClass(W_IntObject), descr=) [p1, p0, p24, p2, p3, p5, p8, p9, p23, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p26, i32] -debug_merge_point(' #137 LOAD_FAST', 0) -guard_nonnull_class(p21, ConstClass(W_IntObject), descr=) [p1, p0, p21, p2, p3, p5, p8, p9, p23, p24, p12, p13, p14, p15, p16, p17, p18, p19, p20, p22, p26, i32] -debug_merge_point(' #140 BINARY_MULTIPLY', 0) -i41 = getfield_gc_pure(p24, descr=) -i42 = getfield_gc_pure(p21, descr=) -i43 = int_mul_ovf(i41, i42) -guard_no_overflow(, descr=) [p1, p0, p21, p24, i43, p2, p3, p5, p8, p9, p23, p13, p14, p15, p16, p17, p18, p19, p20, p22, p26, i32] -debug_merge_point(' #141 LOAD_FAST', 0) -debug_merge_point(' #144 BINARY_ADD', 0) -i44 = int_add_ovf(i43, i32) -guard_no_overflow(, descr=) [p1, p0, i44, p2, p3, p5, p8, p9, p23, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p24, p26, i43, i32] -debug_merge_point(' #145 BINARY_SUBSCR', 0) -i45 = getfield_gc(p23, descr=) -i47 = int_lt(i44, 0) -guard_false(i47, descr=) [p1, p0, p23, i44, i45, p2, p3, p5, p8, p9, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p24, p26, None, i32] -i49 = int_lt(i44, i45) -guard_true(i49, descr=) [p1, p0, p23, i44, p2, p3, p5, p8, p9, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p24, p26, None, i32] -i50 = getfield_gc(p23, descr=) -f51 = getarrayitem_raw(i50, i44, descr=) -debug_merge_point(' #146 STORE_FAST', 0) -debug_merge_point(' #149 LOAD_FAST', 0) -debug_merge_point(' #152 LOAD_FAST', 0) -debug_merge_point(' #155 LOAD_CONST', 0) -guard_value(p2, ConstPtr(ptr52), descr=) [p1, p0, p2, p3, p5, p8, p9, p23, p24, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, f51, None, i32] -debug_merge_point(' #158 BINARY_SUBTRACT', 0) -i54 = int_sub_ovf(i41, 1) -guard_no_overflow(, descr=) [p1, p0, p24, i54, p3, p5, p8, p9, p23, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, f51, None, i32] -debug_merge_point(' #159 LOAD_FAST', 0) -debug_merge_point(' #162 BINARY_MULTIPLY', 0) -i55 = int_mul_ovf(i54, i42) -guard_no_overflow(, descr=) [p1, p0, p21, i55, p3, p5, p8, p9, p23, p13, p14, p15, p16, p17, p18, p19, p20, p22, p24, i54, f51, None, i32] -debug_merge_point(' #163 LOAD_FAST', 0) -debug_merge_point(' #166 BINARY_ADD', 0) -i56 = int_add_ovf(i55, i32) -guard_no_overflow(, descr=) [p1, p0, i56, p3, p5, p8, p9, p23, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p24, i55, None, f51, None, i32] -debug_merge_point(' #167 BINARY_SUBSCR', 0) -i58 = int_lt(i56, 0) -guard_false(i58, descr=) [p1, p0, p23, i56, i45, p3, p5, p8, p9, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p24, None, None, f51, None, i32] -i59 = int_lt(i56, i45) -guard_true(i59, descr=) [p1, p0, p23, i56, p3, p5, p8, p9, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p24, None, None, f51, None, i32] -f60 = getarrayitem_raw(i50, i56, descr=) -debug_merge_point(' #168 LOAD_FAST', 0) -debug_merge_point(' #171 LOAD_FAST', 0) -debug_merge_point(' #174 LOAD_CONST', 0) -debug_merge_point(' #177 BINARY_ADD', 0) -i62 = int_add_ovf(i41, 1) -guard_no_overflow(, descr=) [p1, p0, p24, i62, p3, p5, p8, p9, p23, p14, p15, p16, p17, p18, p19, p20, p21, p22, f60, None, None, f51, None, i32] -debug_merge_point(' #178 LOAD_FAST', 0) -debug_merge_point(' #181 BINARY_MULTIPLY', 0) -i63 = int_mul_ovf(i62, i42) -guard_no_overflow(, descr=) [p1, p0, p21, i63, p3, p5, p8, p9, p23, p14, p15, p16, p17, p18, p19, p20, p22, p24, i62, f60, None, None, f51, None, i32] -debug_merge_point(' #182 LOAD_FAST', 0) -debug_merge_point(' #185 BINARY_ADD', 0) -i64 = int_add_ovf(i63, i32) -guard_no_overflow(, descr=) [p1, p0, i64, p3, p5, p8, p9, p23, p14, p15, p16, p17, p18, p19, p20, p21, p22, p24, i63, None, f60, None, None, f51, None, i32] -debug_merge_point(' #186 BINARY_SUBSCR', 0) -i66 = int_lt(i64, 0) -guard_false(i66, descr=) [p1, p0, p23, i64, i45, p3, p5, p8, p9, p14, p15, p16, p17, p18, p19, p20, p21, p22, p24, None, None, f60, None, None, f51, None, i32] -i67 = int_lt(i64, i45) -guard_true(i67, descr=) [p1, p0, p23, i64, p3, p5, p8, p9, p14, p15, p16, p17, p18, p19, p20, p21, p22, p24, None, None, f60, None, None, f51, None, i32] -f68 = getarrayitem_raw(i50, i64, descr=) -debug_merge_point(' #187 BINARY_ADD', 0) -f69 = float_add(f60, f68) -debug_merge_point(' #188 LOAD_FAST', 0) -guard_nonnull_class(p18, 19800744, descr=) [p1, p0, p18, p3, p5, p8, p9, p14, p15, p16, p17, p19, p20, p21, p22, p23, p24, f69, None, None, None, None, None, f51, None, i32] -debug_merge_point(' #191 BINARY_MULTIPLY', 0) -f71 = getfield_gc_pure(p18, descr=) -f72 = float_mul(f69, f71) -debug_merge_point(' #192 LOAD_FAST', 0) -debug_merge_point(' #195 LOAD_FAST', 0) -debug_merge_point(' #198 LOAD_FAST', 0) -debug_merge_point(' #201 BINARY_MULTIPLY', 0) -debug_merge_point(' #202 LOAD_FAST', 0) -debug_merge_point(' #205 BINARY_ADD', 0) -debug_merge_point(' #206 LOAD_CONST', 0) -debug_merge_point(' #209 BINARY_SUBTRACT', 0) -i74 = int_sub(i44, 1) -debug_merge_point(' #210 BINARY_SUBSCR', 0) -i76 = int_lt(i74, 0) -guard_false(i76, descr=) [p1, p0, p23, i74, i45, p3, p5, p8, p9, p14, p15, p16, p17, p18, p19, p20, p21, p22, p24, f72, None, None, None, None, None, None, f51, None, i32] -i77 = int_lt(i74, i45) -guard_true(i77, descr=) [p1, p0, p23, i74, p3, p5, p8, p9, p14, p15, p16, p17, p18, p19, p20, p21, p22, p24, f72, None, None, None, None, None, None, f51, None, i32] -f78 = getarrayitem_raw(i50, i74, descr=) -debug_merge_point(' #211 LOAD_FAST', 0) -debug_merge_point(' #214 LOAD_FAST', 0) -debug_merge_point(' #217 LOAD_FAST', 0) -debug_merge_point(' #220 BINARY_MULTIPLY', 0) -debug_merge_point(' #221 LOAD_FAST', 0) -debug_merge_point(' #224 BINARY_ADD', 0) -debug_merge_point(' #225 LOAD_CONST', 0) -debug_merge_point(' #228 BINARY_ADD', 0) -i80 = int_add(i44, 1) -debug_merge_point(' #229 BINARY_SUBSCR', 0) -i81 = int_lt(i80, i45) -guard_true(i81, descr=) [p1, p0, p23, i80, p3, p5, p8, p9, p15, p16, p17, p18, p19, p20, p21, p22, p24, f78, f72, None, None, None, None, None, None, f51, None, i32] -f82 = getarrayitem_raw(i50, i80, descr=) -debug_merge_point(' #230 BINARY_ADD', 0) -f83 = float_add(f78, f82) -debug_merge_point(' #231 LOAD_FAST', 0) -guard_nonnull_class(p17, 19800744, descr=) [p1, p0, p17, p3, p5, p8, p9, p15, p16, p18, p19, p20, p21, p22, p23, p24, f83, None, f72, None, None, None, None, None, None, f51, None, i32] -debug_merge_point(' #234 BINARY_MULTIPLY', 0) -f85 = getfield_gc_pure(p17, descr=) -f86 = float_mul(f83, f85) -debug_merge_point(' #235 BINARY_ADD', 0) -f87 = float_add(f72, f86) -debug_merge_point(' #236 LOAD_FAST', 0) -guard_nonnull_class(p19, 19800744, descr=) [p1, p0, p19, p3, p5, p8, p9, p15, p16, p17, p18, p20, p21, p22, p23, p24, f87, None, None, None, None, None, None, None, None, None, f51, None, i32] -debug_merge_point(' #239 BINARY_MULTIPLY', 0) -f89 = getfield_gc_pure(p19, descr=) -f90 = float_mul(f87, f89) -debug_merge_point(' #240 LOAD_FAST', 0) -debug_merge_point(' #243 LOAD_FAST', 0) -debug_merge_point(' #246 LOAD_FAST', 0) -debug_merge_point(' #249 BINARY_MULTIPLY', 0) -debug_merge_point(' #250 LOAD_FAST', 0) -debug_merge_point(' #253 BINARY_ADD', 0) -debug_merge_point(' #254 STORE_SUBSCR', 0) -setarrayitem_raw(i50, i44, f90, descr=) -debug_merge_point(' #255 LOAD_FAST', 0) -guard_nonnull_class(p20, 19800744, descr=) [p1, p0, p20, p3, p5, p8, p9, p15, p16, p17, p18, p19, p21, p22, p23, p24, None, None, None, None, None, None, None, None, None, None, f51, None, i32] -debug_merge_point(' #258 LOAD_GLOBAL', 0) -p92 = getfield_gc(p0, descr=) -guard_value(p92, ConstPtr(ptr93), descr=) [p1, p0, p92, p3, p5, p8, p9, p20, p15, p16, p17, p18, p19, p21, p22, p23, p24, None, None, None, None, None, None, None, None, None, None, f51, None, i32] -p94 = getfield_gc(p92, descr=) -guard_isnull(p94, descr=) [p1, p0, p94, p92, p3, p5, p8, p9, p20, p15, p16, p17, p18, p19, p21, p22, p23, p24, None, None, None, None, None, None, None, None, None, None, f51, None, i32] -p96 = getfield_gc(ConstPtr(ptr95), descr=) -guard_nonnull_class(p96, ConstClass(Function), descr=) [p1, p0, p96, p3, p5, p8, p9, p20, p15, p16, p17, p18, p19, p21, p22, p23, p24, None, None, None, None, None, None, None, None, None, None, f51, None, i32] -debug_merge_point(' #261 LOAD_FAST', 0) -debug_merge_point(' #264 LOAD_FAST', 0) -debug_merge_point(' #267 LOAD_FAST', 0) -debug_merge_point(' #270 BINARY_MULTIPLY', 0) -debug_merge_point(' #271 LOAD_FAST', 0) -debug_merge_point(' #274 BINARY_ADD', 0) -debug_merge_point(' #275 BINARY_SUBSCR', 0) -f98 = getarrayitem_raw(i50, i44, descr=) -debug_merge_point(' #276 LOAD_FAST', 0) -debug_merge_point(' #279 BINARY_SUBTRACT', 0) -f99 = float_sub(f98, f51) -debug_merge_point(' #280 CALL_FUNCTION', 0) -p100 = getfield_gc(p96, descr=) -guard_value(p100, ConstPtr(ptr101), descr=) [p1, p0, p100, p96, p3, p5, p8, p9, p20, p15, p16, p17, p18, p19, p21, p22, p23, p24, f99, None, None, None, None, None, None, None, None, None, None, f51, None, i32] -p102 = getfield_gc(p96, descr=) -p103 = getfield_gc(p96, descr=) -p105 = call(ConstClass(getexecutioncontext), descr=) -p106 = getfield_gc(p105, descr=) -i107 = force_token() -p108 = getfield_gc(p105, descr=) -guard_isnull(p108, descr=) [p1, p0, p105, p108, p3, p5, p8, p9, p20, p96, p15, p16, p17, p18, p19, p21, p22, p23, p24, p106, p102, i107, f99, None, None, None, None, None, None, None, None, None, None, f51, None, i32] -i109 = getfield_gc(p105, descr=) -i110 = int_is_zero(i109) -guard_true(i110, descr=) [p1, p0, p105, p3, p5, p8, p9, p20, p96, p15, p16, p17, p18, p19, p21, p22, p23, p24, p106, p102, i107, f99, None, None, None, None, None, None, None, None, None, None, f51, None, i32] -debug_merge_point(' #0 LOAD_FAST', 1) -debug_merge_point(' #3 LOAD_FAST', 1) -debug_merge_point(' #6 BINARY_MULTIPLY', 1) -f111 = float_mul(f99, f99) -debug_merge_point(' #7 RETURN_VALUE', 1) -i112 = int_is_true(i109) -guard_false(i112, descr=) [p1, p0, p105, p3, p5, p8, p9, p20, p96, p15, p16, p17, p18, p19, p21, p22, p23, p24, f111, p106, p102, i107, f99, None, None, None, None, None, None, None, None, None, None, f51, None, i32] -debug_merge_point(' #283 INPLACE_ADD', 0) -f113 = getfield_gc_pure(p20, descr=) -f114 = float_add(f113, f111) -debug_merge_point(' #284 STORE_FAST', 0) -debug_merge_point(' #287 JUMP_ABSOLUTE', 0) -i116 = getfield_raw(38968960, descr=) -i118 = int_sub(i116, 26) -setfield_raw(38968960, i118, descr=) -i120 = int_lt(i118, 0) -guard_false(i120, descr=) [p1, p0, p3, p5, p8, p9, p15, p16, p17, p18, p19, p21, p22, p23, p24, f114, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, f51, None, i32] -debug_merge_point(' #125 FOR_ITER', 0) -jump(p0, p1, p3, p5, p8, p9, p15, p16, p17, p18, p19, f114, p21, p22, p23, p24, i32, f51, i36, i34, i33, i41, i42, i45, i50, i55, i63, f71, i43, f85, f89, descr=) -[5ed622ea316e] jit-log-opt-loop} -[5ed62326a846] {jit-log-opt-bridge -# bridge out of Guard 21 with 13 ops -[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, f15, f16, i17] -i18 = force_token() -setfield_gc(p1, i18, descr=) -call_may_force(ConstClass(action_dispatcher), p0, p1, descr=) -guard_not_forced(, descr=) [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, i17, f16, f15] -guard_no_exception(, descr=) [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, i17, f16, f15] -debug_merge_point(' #125 FOR_ITER', 0) -p21 = new_with_vtable(19800744) -setfield_gc(p21, f15, descr=) -p23 = new_with_vtable(ConstClass(W_IntObject)) -setfield_gc(p23, i17, descr=) -p25 = new_with_vtable(19800744) -setfield_gc(p25, f16, descr=) -jump(p1, p0, ConstPtr(ptr26), p2, 2, p3, 0, 125, p4, p5, ConstPtr(ptr30), ConstPtr(ptr31), ConstPtr(ptr32), ConstPtr(ptr33), ConstPtr(ptr34), p6, p7, p8, p9, p10, p21, p11, p12, p13, p14, p23, p25, descr=) -[5ed62327d096] jit-log-opt-bridge} -[5ed623eb929c] {jit-log-opt-bridge -# bridge out of Guard 3 with 260 ops -[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, i15, f16, f17] -debug_merge_point(' #290 POP_BLOCK', 0) -p18 = getfield_gc(p3, descr=) -guard_class(p3, 19865144, descr=) [p0, p1, p3, p18, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, i15, f16, f17] -i20 = getfield_gc(p3, descr=) -guard_value(i20, 1, descr=) [p0, p1, i20, p18, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, i15, f16, f17] -debug_merge_point(' #291 JUMP_ABSOLUTE', 0) -i23 = getfield_raw(38968960, descr=) -i25 = int_sub(i23, 1) -setfield_raw(38968960, i25, descr=) -i27 = int_lt(i25, 0) -guard_false(i27, descr=) [p0, p1, p18, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, i15, f16, f17] -debug_merge_point(' #99 FOR_ITER', 0) -guard_class(p5, 19861240, descr=) [p0, p1, p5, p18, p4, p6, p7, p8, p9, p10, p11, p12, p13, p14, i15, f16, f17] -i29 = getfield_gc(p5, descr=) -i31 = int_gt(i29, 0) -guard_true(i31, descr=) [p0, p1, p5, p18, p4, p6, p7, p8, p9, p10, p11, p12, p13, p14, i15, f16, f17] -i32 = getfield_gc(p5, descr=) -i33 = getfield_gc(p5, descr=) -i34 = int_add(i32, i33) -i36 = int_sub(i29, 1) -debug_merge_point(' #102 STORE_FAST', 0) -debug_merge_point(' #105 SETUP_LOOP', 0) -debug_merge_point(' #108 LOAD_GLOBAL', 0) -p37 = getfield_gc(p1, descr=) -setfield_gc(p5, i34, descr=) -setfield_gc(p5, i36, descr=) -guard_value(p37, ConstPtr(ptr38), descr=) [p0, p1, p37, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, i32, p18, i15, f16, f17] -p39 = getfield_gc(p37, descr=) -guard_isnull(p39, descr=) [p0, p1, p39, p37, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, i32, p18, i15, f16, f17] -p41 = getfield_gc(ConstPtr(ptr40), descr=) -guard_isnull(p41, descr=) [p0, p1, p41, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, i32, p18, i15, f16, f17] -p43 = getfield_gc(ConstPtr(ptr42), descr=) -guard_value(p43, ConstPtr(ptr44), descr=) [p0, p1, p43, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, i32, p18, i15, f16, f17] -p45 = getfield_gc(p43, descr=) -guard_isnull(p45, descr=) [p0, p1, p45, p43, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, i32, p18, i15, f16, f17] -p47 = getfield_gc(ConstPtr(ptr46), descr=) -guard_value(p47, ConstPtr(ptr48), descr=) [p0, p1, p47, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, i32, p18, i15, f16, f17] -debug_merge_point(' #111 LOAD_CONST', 0) -debug_merge_point(' #114 LOAD_FAST', 0) -guard_nonnull_class(p12, ConstClass(W_IntObject), descr=) [p0, p1, p12, p4, p5, p47, p6, p7, p8, p9, p10, p11, p13, i32, p18, i15, f16, f17] -debug_merge_point(' #117 LOAD_CONST', 0) -debug_merge_point(' #120 BINARY_SUBTRACT', 0) -i50 = getfield_gc_pure(p12, descr=) -i52 = int_sub_ovf(i50, 1) -guard_no_overflow(, descr=) [p0, p1, p12, i52, p4, p5, p47, p6, p7, p8, p9, p10, p11, p13, i32, p18, i15, f16, f17] -debug_merge_point(' #121 CALL_FUNCTION', 0) -p54 = getfield_gc(ConstPtr(ptr53), descr=) -p55 = getfield_gc(ConstPtr(ptr53), descr=) -i56 = getfield_gc_pure(p55, descr=) -guard_false(i56, descr=) [p0, p1, p54, p55, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, i52, i32, p18, i15, f16, f17] -p57 = getfield_gc_pure(p55, descr=) -i58 = arraylen_gc(p57, descr=) -i60 = int_sub(4, i58) -i62 = int_ge(3, i60) -guard_true(i62, descr=) [p0, p1, p54, i60, p55, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, i52, i32, p18, i15, f16, f17] -i63 = int_sub(3, i60) -i64 = getfield_gc_pure(p55, descr=) -guard_false(i64, descr=) [p0, p1, p54, i63, i60, p55, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, i52, i32, p18, i15, f16, f17] -p65 = getfield_gc_pure(p55, descr=) -p66 = getarrayitem_gc(p65, i63, descr=) -guard_class(p66, ConstClass(W_IntObject), descr=) [p0, p1, p66, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, i52, i32, p18, i15, f16, f17] -i68 = getfield_gc_pure(p66, descr=) -i69 = int_is_zero(i68) -guard_false(i69, descr=) [p0, p1, i68, i52, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p66, None, i32, p18, i15, f16, f17] -i72 = int_lt(i68, 0) -guard_false(i72, descr=) [p0, p1, i68, i52, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p66, None, i32, p18, i15, f16, f17] -i74 = int_lt(1, i52) -guard_true(i74, descr=) [p0, p1, i68, i52, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p66, None, i32, p18, i15, f16, f17] -i75 = int_sub(i52, 1) -i77 = int_sub(i75, 1) -i78 = uint_floordiv(i77, i68) -i80 = int_add(i78, 1) -i82 = int_lt(i80, 0) -guard_false(i82, descr=) [p0, p1, i68, i80, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p66, i52, i32, p18, i15, f16, f17] -debug_merge_point(' #124 GET_ITER', 0) -debug_merge_point(' #125 FOR_ITER', 0) -i84 = int_gt(i80, 0) -guard_true(i84, descr=) [p0, p1, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, i80, i68, None, None, i32, p18, i15, f16, f17] -i85 = int_add(1, i68) -debug_merge_point(' #128 STORE_FAST', 0) -debug_merge_point(' #131 LOAD_FAST', 0) -guard_nonnull_class(p13, 19886912, descr=) [p0, p1, p13, p4, p5, p6, p7, p8, p9, p10, p11, p12, i78, i85, None, i68, None, None, i32, p18, None, f16, f17] -debug_merge_point(' #134 LOAD_FAST', 0) -debug_merge_point(' #137 LOAD_FAST', 0) -guard_nonnull_class(p11, ConstClass(W_IntObject), descr=) [p0, p1, p11, p4, p5, p13, p6, p7, p8, p9, p10, p12, i78, i85, None, i68, None, None, i32, p18, None, f16, f17] -debug_merge_point(' #140 BINARY_MULTIPLY', 0) -i88 = getfield_gc_pure(p11, descr=) -i89 = int_mul_ovf(i32, i88) -guard_no_overflow(, descr=) [p0, p1, p11, i89, p4, p5, p13, p6, p7, p8, p9, p10, p12, i78, i85, None, i68, None, None, i32, p18, None, f16, f17] -debug_merge_point(' #141 LOAD_FAST', 0) -debug_merge_point(' #144 BINARY_ADD', 0) -i90 = int_add_ovf(i89, 1) -guard_no_overflow(, descr=) [p0, p1, i90, p4, p5, p13, p6, p7, p8, p9, p10, p11, p12, i89, i78, i85, None, i68, None, None, i32, p18, None, f16, f17] -debug_merge_point(' #145 BINARY_SUBSCR', 0) -i91 = getfield_gc(p13, descr=) -i93 = int_lt(i90, 0) -guard_false(i93, descr=) [p0, p1, p13, i90, i91, p4, p5, p6, p7, p8, p9, p10, p11, p12, None, i78, i85, None, i68, None, None, i32, p18, None, f16, f17] -i94 = int_lt(i90, i91) -guard_true(i94, descr=) [p0, p1, p13, i90, p4, p5, p6, p7, p8, p9, p10, p11, p12, None, i78, i85, None, i68, None, None, i32, p18, None, f16, f17] -i95 = getfield_gc(p13, descr=) -f96 = getarrayitem_raw(i95, i90, descr=) -debug_merge_point(' #146 STORE_FAST', 0) -debug_merge_point(' #149 LOAD_FAST', 0) -debug_merge_point(' #152 LOAD_FAST', 0) -debug_merge_point(' #155 LOAD_CONST', 0) -debug_merge_point(' #158 BINARY_SUBTRACT', 0) -i98 = int_sub_ovf(i32, 1) -guard_no_overflow(, descr=) [p0, p1, i98, p4, p5, p13, p6, p7, p8, p9, p10, p11, p12, f96, None, i78, i85, None, i68, None, None, i32, p18, None, None, f17] -debug_merge_point(' #159 LOAD_FAST', 0) -debug_merge_point(' #162 BINARY_MULTIPLY', 0) -i99 = int_mul_ovf(i98, i88) -guard_no_overflow(, descr=) [p0, p1, p11, i99, p4, p5, p13, p6, p7, p8, p9, p10, p12, i98, f96, None, i78, i85, None, i68, None, None, i32, p18, None, None, f17] -debug_merge_point(' #163 LOAD_FAST', 0) -debug_merge_point(' #166 BINARY_ADD', 0) -i100 = int_add_ovf(i99, 1) -guard_no_overflow(, descr=) [p0, p1, i100, p4, p5, p13, p6, p7, p8, p9, p10, p11, p12, i99, None, f96, None, i78, i85, None, i68, None, None, i32, p18, None, None, f17] -debug_merge_point(' #167 BINARY_SUBSCR', 0) -i102 = int_lt(i100, 0) -guard_false(i102, descr=) [p0, p1, p13, i100, i91, p4, p5, p6, p7, p8, p9, p10, p11, p12, None, None, f96, None, i78, i85, None, i68, None, None, i32, p18, None, None, f17] -i103 = int_lt(i100, i91) -guard_true(i103, descr=) [p0, p1, p13, i100, p4, p5, p6, p7, p8, p9, p10, p11, p12, None, None, f96, None, i78, i85, None, i68, None, None, i32, p18, None, None, f17] -f104 = getarrayitem_raw(i95, i100, descr=) -debug_merge_point(' #168 LOAD_FAST', 0) -debug_merge_point(' #171 LOAD_FAST', 0) -debug_merge_point(' #174 LOAD_CONST', 0) -debug_merge_point(' #177 BINARY_ADD', 0) -i106 = int_add_ovf(i32, 1) -guard_no_overflow(, descr=) [p0, p1, i106, p4, p5, p13, p6, p7, p8, p9, p10, p11, p12, f104, None, None, f96, None, i78, i85, None, i68, None, None, i32, p18, None, None, f17] -debug_merge_point(' #178 LOAD_FAST', 0) -debug_merge_point(' #181 BINARY_MULTIPLY', 0) -i107 = int_mul_ovf(i106, i88) -guard_no_overflow(, descr=) [p0, p1, p11, i107, p4, p5, p13, p6, p7, p8, p9, p10, p12, i106, f104, None, None, f96, None, i78, i85, None, i68, None, None, i32, p18, None, None, f17] -debug_merge_point(' #182 LOAD_FAST', 0) -debug_merge_point(' #185 BINARY_ADD', 0) -i108 = int_add_ovf(i107, 1) -guard_no_overflow(, descr=) [p0, p1, i108, p4, p5, p13, p6, p7, p8, p9, p10, p11, p12, i107, None, f104, None, None, f96, None, i78, i85, None, i68, None, None, i32, p18, None, None, f17] -debug_merge_point(' #186 BINARY_SUBSCR', 0) -i110 = int_lt(i108, 0) -guard_false(i110, descr=) [p0, p1, p13, i108, i91, p4, p5, p6, p7, p8, p9, p10, p11, p12, None, None, f104, None, None, f96, None, i78, i85, None, i68, None, None, i32, p18, None, None, f17] -i111 = int_lt(i108, i91) -guard_true(i111, descr=) [p0, p1, p13, i108, p4, p5, p6, p7, p8, p9, p10, p11, p12, None, None, f104, None, None, f96, None, i78, i85, None, i68, None, None, i32, p18, None, None, f17] -f112 = getarrayitem_raw(i95, i108, descr=) -debug_merge_point(' #187 BINARY_ADD', 0) -f113 = float_add(f104, f112) -debug_merge_point(' #188 LOAD_FAST', 0) -guard_nonnull_class(p9, 19800744, descr=) [p0, p1, p9, p4, p5, p6, p7, p8, p10, p11, p12, p13, f113, None, None, None, None, None, f96, None, i78, i85, None, i68, None, None, i32, p18, None, None, f17] -debug_merge_point(' #191 BINARY_MULTIPLY', 0) -f115 = getfield_gc_pure(p9, descr=) -f116 = float_mul(f113, f115) -debug_merge_point(' #192 LOAD_FAST', 0) -debug_merge_point(' #195 LOAD_FAST', 0) -debug_merge_point(' #198 LOAD_FAST', 0) -debug_merge_point(' #201 BINARY_MULTIPLY', 0) -debug_merge_point(' #202 LOAD_FAST', 0) -debug_merge_point(' #205 BINARY_ADD', 0) -debug_merge_point(' #206 LOAD_CONST', 0) -debug_merge_point(' #209 BINARY_SUBTRACT', 0) -debug_merge_point(' #210 BINARY_SUBSCR', 0) -i118 = int_lt(i89, 0) -guard_false(i118, descr=) [p0, p1, p13, i89, i91, p4, p5, p6, p7, p8, p9, p10, p11, p12, f116, None, None, None, None, None, None, f96, None, i78, i85, None, i68, None, None, i32, p18, None, None, f17] -i119 = int_lt(i89, i91) -guard_true(i119, descr=) [p0, p1, p13, i89, p4, p5, p6, p7, p8, p9, p10, p11, p12, f116, None, None, None, None, None, None, f96, None, i78, i85, None, i68, None, None, i32, p18, None, None, f17] -f120 = getarrayitem_raw(i95, i89, descr=) -debug_merge_point(' #211 LOAD_FAST', 0) -debug_merge_point(' #214 LOAD_FAST', 0) -debug_merge_point(' #217 LOAD_FAST', 0) -debug_merge_point(' #220 BINARY_MULTIPLY', 0) -debug_merge_point(' #221 LOAD_FAST', 0) -debug_merge_point(' #224 BINARY_ADD', 0) -debug_merge_point(' #225 LOAD_CONST', 0) -debug_merge_point(' #228 BINARY_ADD', 0) -i122 = int_add(i90, 1) -debug_merge_point(' #229 BINARY_SUBSCR', 0) -i123 = int_lt(i122, i91) -guard_true(i123, descr=) [p0, p1, p13, i122, p4, p5, p6, p7, p8, p9, p10, p11, p12, f120, f116, None, None, None, None, None, None, f96, None, i78, i85, None, i68, None, None, i32, p18, None, None, f17] -f124 = getarrayitem_raw(i95, i122, descr=) -debug_merge_point(' #230 BINARY_ADD', 0) -f125 = float_add(f120, f124) -debug_merge_point(' #231 LOAD_FAST', 0) -guard_nonnull_class(p8, 19800744, descr=) [p0, p1, p8, p4, p5, p6, p7, p9, p10, p11, p12, p13, f125, None, f116, None, None, None, None, None, None, f96, None, i78, i85, None, i68, None, None, i32, p18, None, None, f17] -debug_merge_point(' #234 BINARY_MULTIPLY', 0) -f127 = getfield_gc_pure(p8, descr=) -f128 = float_mul(f125, f127) -debug_merge_point(' #235 BINARY_ADD', 0) -f129 = float_add(f116, f128) -debug_merge_point(' #236 LOAD_FAST', 0) -guard_nonnull_class(p10, 19800744, descr=) [p0, p1, p10, p4, p5, p6, p7, p8, p9, p11, p12, p13, f129, None, None, None, None, None, None, None, None, None, f96, None, i78, i85, None, i68, None, None, i32, p18, None, None, f17] -debug_merge_point(' #239 BINARY_MULTIPLY', 0) -f131 = getfield_gc_pure(p10, descr=) -f132 = float_mul(f129, f131) -debug_merge_point(' #240 LOAD_FAST', 0) -debug_merge_point(' #243 LOAD_FAST', 0) -debug_merge_point(' #246 LOAD_FAST', 0) -debug_merge_point(' #249 BINARY_MULTIPLY', 0) -debug_merge_point(' #250 LOAD_FAST', 0) -debug_merge_point(' #253 BINARY_ADD', 0) -debug_merge_point(' #254 STORE_SUBSCR', 0) -setarrayitem_raw(i95, i90, f132, descr=) -debug_merge_point(' #255 LOAD_FAST', 0) -debug_merge_point(' #258 LOAD_GLOBAL', 0) -p134 = getfield_gc(ConstPtr(ptr133), descr=) -guard_nonnull_class(p134, ConstClass(Function), descr=) [p0, p1, p134, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, None, None, None, None, None, None, None, None, None, None, f96, None, i78, i85, None, i68, None, None, i32, p18, None, None, f17] -debug_merge_point(' #261 LOAD_FAST', 0) -debug_merge_point(' #264 LOAD_FAST', 0) -debug_merge_point(' #267 LOAD_FAST', 0) -debug_merge_point(' #270 BINARY_MULTIPLY', 0) -debug_merge_point(' #271 LOAD_FAST', 0) -debug_merge_point(' #274 BINARY_ADD', 0) -debug_merge_point(' #275 BINARY_SUBSCR', 0) -f136 = getarrayitem_raw(i95, i90, descr=) -debug_merge_point(' #276 LOAD_FAST', 0) -debug_merge_point(' #279 BINARY_SUBTRACT', 0) -f137 = float_sub(f136, f96) -debug_merge_point(' #280 CALL_FUNCTION', 0) -p138 = getfield_gc(p134, descr=) -guard_value(p138, ConstPtr(ptr139), descr=) [p0, p1, p138, p134, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, f137, None, None, None, None, None, None, None, None, None, None, f96, None, i78, i85, None, i68, None, None, i32, p18, None, None, f17] -p140 = getfield_gc(p134, descr=) -p141 = getfield_gc(p134, descr=) -p143 = call(ConstClass(getexecutioncontext), descr=) -p144 = getfield_gc(p143, descr=) -i145 = force_token() -p146 = getfield_gc(p143, descr=) -guard_isnull(p146, descr=) [p0, p1, p143, p146, p4, p5, p134, p6, p7, p8, p9, p10, p11, p12, p13, p144, i145, p140, f137, None, None, None, None, None, None, None, None, None, None, f96, None, i78, i85, None, i68, None, None, i32, p18, None, None, f17] -i147 = getfield_gc(p143, descr=) -i148 = int_is_zero(i147) -guard_true(i148, descr=) [p0, p1, p143, p4, p5, p134, p6, p7, p8, p9, p10, p11, p12, p13, p144, i145, p140, f137, None, None, None, None, None, None, None, None, None, None, f96, None, i78, i85, None, i68, None, None, i32, p18, None, None, f17] -debug_merge_point(' #0 LOAD_FAST', 1) -debug_merge_point(' #3 LOAD_FAST', 1) -debug_merge_point(' #6 BINARY_MULTIPLY', 1) -f149 = float_mul(f137, f137) -debug_merge_point(' #7 RETURN_VALUE', 1) -i150 = int_is_true(i147) -guard_false(i150, descr=) [p0, p1, p143, p4, p5, p134, p6, p7, p8, p9, p10, p11, p12, p13, f149, p144, i145, p140, f137, None, None, None, None, None, None, None, None, None, None, f96, None, i78, i85, None, i68, None, None, i32, p18, None, None, f17] -debug_merge_point(' #283 INPLACE_ADD', 0) -f151 = float_add(f17, f149) -debug_merge_point(' #284 STORE_FAST', 0) -debug_merge_point(' #287 JUMP_ABSOLUTE', 0) -i153 = getfield_raw(38968960, descr=) -i155 = int_sub(i153, 35) -setfield_raw(38968960, i155, descr=) -i157 = int_lt(i155, 0) -guard_false(i157, descr=) [p0, p1, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, f151, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, f96, None, i78, i85, None, i68, None, None, i32, p18, None, None, None] -debug_merge_point(' #125 FOR_ITER', 0) -p159 = new_with_vtable(19865144) -setfield_gc(p159, 291, descr=) -setfield_gc(p159, 1, descr=) -setfield_gc(p159, p18, descr=) -p163 = new_with_vtable(19861240) -setfield_gc(p163, i85, descr=) -setfield_gc(p163, i78, descr=) -setfield_gc(p163, i68, descr=) -p165 = new_with_vtable(19800744) -setfield_gc(p165, f151, descr=) -p167 = new_with_vtable(ConstClass(W_IntObject)) -setfield_gc(p167, i32, descr=) -p169 = new_with_vtable(ConstClass(W_IntObject)) -setfield_gc(p169, 1, descr=) -p171 = new_with_vtable(19800744) -setfield_gc(p171, f96, descr=) -jump(p1, p0, ConstPtr(ptr172), p159, 2, p4, 0, 125, p5, p163, ConstPtr(ptr176), ConstPtr(ptr177), ConstPtr(ptr178), ConstPtr(ptr179), ConstPtr(ptr180), p6, p7, p8, p9, p10, p165, p11, p12, p13, p167, p169, p171, descr=) -[5ed623fc609b] jit-log-opt-bridge} -[5ed63ea5fa94] {jit-log-opt-bridge -# bridge out of Guard 110 with 23 ops -[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, f12, f13, i14, i15, i16, i17, p18] -i19 = force_token() -setfield_gc(p1, i19, descr=) -call_may_force(ConstClass(action_dispatcher), p0, p1, descr=) -guard_not_forced(, descr=) [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, i14, i17, i16, i15, f12, f13, p18] -guard_no_exception(, descr=) [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, i14, i17, i16, i15, f12, f13, p18] -debug_merge_point(' #125 FOR_ITER', 0) -p22 = new_with_vtable(19865144) -setfield_gc(p22, 291, descr=) -setfield_gc(p22, p18, descr=) -setfield_gc(p22, 1, descr=) -p26 = new_with_vtable(19861240) -setfield_gc(p26, i15, descr=) -setfield_gc(p26, i14, descr=) -setfield_gc(p26, i16, descr=) -p28 = new_with_vtable(19800744) -setfield_gc(p28, f12, descr=) -p30 = new_with_vtable(ConstClass(W_IntObject)) -setfield_gc(p30, i17, descr=) -p32 = new_with_vtable(ConstClass(W_IntObject)) -setfield_gc(p32, 1, descr=) -p35 = new_with_vtable(19800744) -setfield_gc(p35, f13, descr=) -jump(p1, p0, ConstPtr(ptr36), p22, 2, p2, 0, 125, p3, p26, ConstPtr(ptr40), ConstPtr(ptr41), ConstPtr(ptr42), ConstPtr(ptr43), ConstPtr(ptr44), p4, p5, p6, p7, p8, p28, p9, p10, p11, p30, p32, p35, descr=) -[5ed63ea8ea04] jit-log-opt-bridge} -[5ed640a0a34c] {jit-log-opt-bridge -# bridge out of Guard 58 with 13 ops -[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, f15, f16, i17] -i18 = force_token() -setfield_gc(p1, i18, descr=) -call_may_force(ConstClass(action_dispatcher), p0, p1, descr=) -guard_not_forced(, descr=) [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, f15, f16, i17] -guard_no_exception(, descr=) [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, f15, f16, i17] -debug_merge_point(' #125 FOR_ITER', 0) -p21 = new_with_vtable(19800744) -setfield_gc(p21, f15, descr=) -p23 = new_with_vtable(ConstClass(W_IntObject)) -setfield_gc(p23, i17, descr=) -p25 = new_with_vtable(19800744) -setfield_gc(p25, f16, descr=) -jump(p1, p0, ConstPtr(ptr26), p2, 2, p3, 0, 125, p4, p5, ConstPtr(ptr30), ConstPtr(ptr31), ConstPtr(ptr32), ConstPtr(ptr33), ConstPtr(ptr34), p6, p7, p8, p9, p10, p21, p11, p12, p13, p14, p23, p25, descr=) -[5ed640a1e8c2] jit-log-opt-bridge} -[5ed6431fc824] {jit-log-opt-bridge -# bridge out of Guard 24 with 264 ops -[p0, p1, p2, p3, p4, p5, i6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24] -guard_value(i6, 0, descr=) [i6, p0, p1, p3, p4, p5, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24] -debug_merge_point(' #290 POP_BLOCK', 0) -p26 = getfield_gc(p4, descr=) -guard_class(p4, 19865144, descr=) [p0, p1, p4, p3, p26, p5, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24] -i28 = getfield_gc(p4, descr=) -guard_value(i28, 1, descr=) [p0, p1, i28, p3, p26, p5, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24] -debug_merge_point(' #291 JUMP_ABSOLUTE', 0) -i31 = getfield_raw(38968960, descr=) -i33 = int_sub(i31, 1) -setfield_raw(38968960, i33, descr=) -i35 = int_lt(i33, 0) -guard_false(i35, descr=) [p0, p1, p3, p26, p5, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24] -guard_value(p3, ConstPtr(ptr36), descr=) [p0, p1, p3, p26, p5, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24] -debug_merge_point(' #99 FOR_ITER', 0) -guard_class(p7, 19861240, descr=) [p0, p1, p7, p26, p5, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24] -i38 = getfield_gc(p7, descr=) -i40 = int_gt(i38, 0) -guard_true(i40, descr=) [p0, p1, p7, p26, p5, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24] -i41 = getfield_gc(p7, descr=) -i42 = getfield_gc(p7, descr=) -i43 = int_add(i41, i42) -i45 = int_sub(i38, 1) -debug_merge_point(' #102 STORE_FAST', 0) -debug_merge_point(' #105 SETUP_LOOP', 0) -debug_merge_point(' #108 LOAD_GLOBAL', 0) -p46 = getfield_gc(p1, descr=) -setfield_gc(p7, i43, descr=) -setfield_gc(p7, i45, descr=) -guard_value(p46, ConstPtr(ptr47), descr=) [p0, p1, p46, p5, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p23, p24, p26, i41] -p48 = getfield_gc(p46, descr=) -guard_isnull(p48, descr=) [p0, p1, p48, p46, p5, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p23, p24, p26, i41] -p50 = getfield_gc(ConstPtr(ptr49), descr=) -guard_isnull(p50, descr=) [p0, p1, p50, p5, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p23, p24, p26, i41] -p52 = getfield_gc(ConstPtr(ptr51), descr=) -guard_value(p52, ConstPtr(ptr53), descr=) [p0, p1, p52, p5, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p23, p24, p26, i41] -p54 = getfield_gc(p52, descr=) -guard_isnull(p54, descr=) [p0, p1, p54, p52, p5, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p23, p24, p26, i41] -p56 = getfield_gc(ConstPtr(ptr55), descr=) -guard_value(p56, ConstPtr(ptr57), descr=) [p0, p1, p56, p5, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p23, p24, p26, i41] -debug_merge_point(' #111 LOAD_CONST', 0) -debug_merge_point(' #114 LOAD_FAST', 0) -guard_nonnull_class(p20, ConstClass(W_IntObject), descr=) [p0, p1, p20, p5, p7, p56, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p21, p23, p24, p26, i41] -debug_merge_point(' #117 LOAD_CONST', 0) -debug_merge_point(' #120 BINARY_SUBTRACT', 0) -i59 = getfield_gc_pure(p20, descr=) -i61 = int_sub_ovf(i59, 1) -guard_no_overflow(, descr=) [p0, p1, p20, i61, p5, p7, p56, p11, p12, p13, p14, p15, p16, p17, p18, p19, p21, p23, p24, p26, i41] -debug_merge_point(' #121 CALL_FUNCTION', 0) -p63 = getfield_gc(ConstPtr(ptr62), descr=) -p64 = getfield_gc(ConstPtr(ptr62), descr=) -i65 = getfield_gc_pure(p64, descr=) -guard_false(i65, descr=) [p0, p1, p63, p64, p5, p7, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p23, p24, i61, p26, i41] -p66 = getfield_gc_pure(p64, descr=) -i67 = arraylen_gc(p66, descr=) -i69 = int_sub(4, i67) -i71 = int_ge(3, i69) -guard_true(i71, descr=) [p0, p1, p63, i69, p64, p5, p7, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p23, p24, i61, p26, i41] -i72 = int_sub(3, i69) -i73 = getfield_gc_pure(p64, descr=) -guard_false(i73, descr=) [p0, p1, p63, i72, i69, p64, p5, p7, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p23, p24, i61, p26, i41] -p74 = getfield_gc_pure(p64, descr=) -p75 = getarrayitem_gc(p74, i72, descr=) -guard_class(p75, ConstClass(W_IntObject), descr=) [p0, p1, p75, p5, p7, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p23, p24, i61, p26, i41] -i77 = getfield_gc_pure(p75, descr=) -i78 = int_is_zero(i77) -guard_false(i78, descr=) [p0, p1, i77, i61, p5, p7, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p23, p24, p75, None, p26, i41] -i81 = int_lt(i77, 0) -guard_false(i81, descr=) [p0, p1, i77, i61, p5, p7, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p23, p24, p75, None, p26, i41] -i83 = int_lt(1, i61) -guard_true(i83, descr=) [p0, p1, i77, i61, p5, p7, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p23, p24, p75, None, p26, i41] -i84 = int_sub(i61, 1) -i86 = int_sub(i84, 1) -i87 = uint_floordiv(i86, i77) -i89 = int_add(i87, 1) -i91 = int_lt(i89, 0) -guard_false(i91, descr=) [p0, p1, i77, i89, p5, p7, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p23, p24, p75, i61, p26, i41] -debug_merge_point(' #124 GET_ITER', 0) -debug_merge_point(' #125 FOR_ITER', 0) -i93 = int_gt(i89, 0) -guard_true(i93, descr=) [p0, p1, p5, p7, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p23, p24, i89, i77, None, None, p26, i41] -i94 = int_add(1, i77) -debug_merge_point(' #128 STORE_FAST', 0) -debug_merge_point(' #131 LOAD_FAST', 0) -guard_nonnull_class(p21, 19886912, descr=) [p0, p1, p21, p5, p7, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p24, i87, i94, None, i77, None, None, p26, i41] -debug_merge_point(' #134 LOAD_FAST', 0) -debug_merge_point(' #137 LOAD_FAST', 0) -guard_nonnull_class(p19, ConstClass(W_IntObject), descr=) [p0, p1, p19, p5, p7, p21, p11, p12, p13, p14, p15, p16, p17, p18, p20, p24, i87, i94, None, i77, None, None, p26, i41] -debug_merge_point(' #140 BINARY_MULTIPLY', 0) -i97 = getfield_gc_pure(p19, descr=) -i98 = int_mul_ovf(i41, i97) -guard_no_overflow(, descr=) [p0, p1, p19, i98, p5, p7, p21, p11, p12, p13, p14, p15, p16, p17, p18, p20, p24, i87, i94, None, i77, None, None, p26, i41] -debug_merge_point(' #141 LOAD_FAST', 0) -debug_merge_point(' #144 BINARY_ADD', 0) -i99 = int_add_ovf(i98, 1) -guard_no_overflow(, descr=) [p0, p1, i99, p5, p7, p21, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p24, i98, i87, i94, None, i77, None, None, p26, i41] -debug_merge_point(' #145 BINARY_SUBSCR', 0) -i100 = getfield_gc(p21, descr=) -i102 = int_lt(i99, 0) -guard_false(i102, descr=) [p0, p1, p21, i99, i100, p5, p7, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p24, None, i87, i94, None, i77, None, None, p26, i41] -i103 = int_lt(i99, i100) -guard_true(i103, descr=) [p0, p1, p21, i99, p5, p7, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p24, None, i87, i94, None, i77, None, None, p26, i41] -i104 = getfield_gc(p21, descr=) -f105 = getarrayitem_raw(i104, i99, descr=) -debug_merge_point(' #146 STORE_FAST', 0) -debug_merge_point(' #149 LOAD_FAST', 0) -debug_merge_point(' #152 LOAD_FAST', 0) -debug_merge_point(' #155 LOAD_CONST', 0) -debug_merge_point(' #158 BINARY_SUBTRACT', 0) -i107 = int_sub_ovf(i41, 1) -guard_no_overflow(, descr=) [p0, p1, i107, p5, p7, p21, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, f105, None, i87, i94, None, i77, None, None, p26, i41] -debug_merge_point(' #159 LOAD_FAST', 0) -debug_merge_point(' #162 BINARY_MULTIPLY', 0) -i108 = int_mul_ovf(i107, i97) -guard_no_overflow(, descr=) [p0, p1, p19, i108, p5, p7, p21, p11, p12, p13, p14, p15, p16, p17, p18, p20, i107, f105, None, i87, i94, None, i77, None, None, p26, i41] -debug_merge_point(' #163 LOAD_FAST', 0) -debug_merge_point(' #166 BINARY_ADD', 0) -i109 = int_add_ovf(i108, 1) -guard_no_overflow(, descr=) [p0, p1, i109, p5, p7, p21, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, i108, None, f105, None, i87, i94, None, i77, None, None, p26, i41] -debug_merge_point(' #167 BINARY_SUBSCR', 0) -i111 = int_lt(i109, 0) -guard_false(i111, descr=) [p0, p1, p21, i109, i100, p5, p7, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, None, None, f105, None, i87, i94, None, i77, None, None, p26, i41] -i112 = int_lt(i109, i100) -guard_true(i112, descr=) [p0, p1, p21, i109, p5, p7, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, None, None, f105, None, i87, i94, None, i77, None, None, p26, i41] -f113 = getarrayitem_raw(i104, i109, descr=) -debug_merge_point(' #168 LOAD_FAST', 0) -debug_merge_point(' #171 LOAD_FAST', 0) -debug_merge_point(' #174 LOAD_CONST', 0) -debug_merge_point(' #177 BINARY_ADD', 0) -i115 = int_add_ovf(i41, 1) -guard_no_overflow(, descr=) [p0, p1, i115, p5, p7, p21, p12, p13, p14, p15, p16, p17, p18, p19, p20, f113, None, None, f105, None, i87, i94, None, i77, None, None, p26, i41] -debug_merge_point(' #178 LOAD_FAST', 0) -debug_merge_point(' #181 BINARY_MULTIPLY', 0) -i116 = int_mul_ovf(i115, i97) -guard_no_overflow(, descr=) [p0, p1, p19, i116, p5, p7, p21, p12, p13, p14, p15, p16, p17, p18, p20, i115, f113, None, None, f105, None, i87, i94, None, i77, None, None, p26, i41] -debug_merge_point(' #182 LOAD_FAST', 0) -debug_merge_point(' #185 BINARY_ADD', 0) -i117 = int_add_ovf(i116, 1) -guard_no_overflow(, descr=) [p0, p1, i117, p5, p7, p21, p12, p13, p14, p15, p16, p17, p18, p19, p20, i116, None, f113, None, None, f105, None, i87, i94, None, i77, None, None, p26, i41] -debug_merge_point(' #186 BINARY_SUBSCR', 0) -i119 = int_lt(i117, 0) -guard_false(i119, descr=) [p0, p1, p21, i117, i100, p5, p7, p12, p13, p14, p15, p16, p17, p18, p19, p20, None, None, f113, None, None, f105, None, i87, i94, None, i77, None, None, p26, i41] -i120 = int_lt(i117, i100) -guard_true(i120, descr=) [p0, p1, p21, i117, p5, p7, p12, p13, p14, p15, p16, p17, p18, p19, p20, None, None, f113, None, None, f105, None, i87, i94, None, i77, None, None, p26, i41] -f121 = getarrayitem_raw(i104, i117, descr=) -debug_merge_point(' #187 BINARY_ADD', 0) -f122 = float_add(f113, f121) -debug_merge_point(' #188 LOAD_FAST', 0) -guard_nonnull_class(p16, 19800744, descr=) [p0, p1, p16, p5, p7, p12, p13, p14, p15, p17, p18, p19, p20, p21, f122, None, None, None, None, None, f105, None, i87, i94, None, i77, None, None, p26, i41] -debug_merge_point(' #191 BINARY_MULTIPLY', 0) -f124 = getfield_gc_pure(p16, descr=) -f125 = float_mul(f122, f124) -debug_merge_point(' #192 LOAD_FAST', 0) -debug_merge_point(' #195 LOAD_FAST', 0) -debug_merge_point(' #198 LOAD_FAST', 0) -debug_merge_point(' #201 BINARY_MULTIPLY', 0) -debug_merge_point(' #202 LOAD_FAST', 0) -debug_merge_point(' #205 BINARY_ADD', 0) -debug_merge_point(' #206 LOAD_CONST', 0) -debug_merge_point(' #209 BINARY_SUBTRACT', 0) -debug_merge_point(' #210 BINARY_SUBSCR', 0) -i127 = int_lt(i98, 0) -guard_false(i127, descr=) [p0, p1, p21, i98, i100, p5, p7, p12, p13, p14, p15, p16, p17, p18, p19, p20, f125, None, None, None, None, None, None, f105, None, i87, i94, None, i77, None, None, p26, i41] -i128 = int_lt(i98, i100) -guard_true(i128, descr=) [p0, p1, p21, i98, p5, p7, p12, p13, p14, p15, p16, p17, p18, p19, p20, f125, None, None, None, None, None, None, f105, None, i87, i94, None, i77, None, None, p26, i41] -f129 = getarrayitem_raw(i104, i98, descr=) -debug_merge_point(' #211 LOAD_FAST', 0) -debug_merge_point(' #214 LOAD_FAST', 0) -debug_merge_point(' #217 LOAD_FAST', 0) -debug_merge_point(' #220 BINARY_MULTIPLY', 0) -debug_merge_point(' #221 LOAD_FAST', 0) -debug_merge_point(' #224 BINARY_ADD', 0) -debug_merge_point(' #225 LOAD_CONST', 0) -debug_merge_point(' #228 BINARY_ADD', 0) -i131 = int_add(i99, 1) -debug_merge_point(' #229 BINARY_SUBSCR', 0) -i132 = int_lt(i131, i100) -guard_true(i132, descr=) [p0, p1, p21, i131, p5, p7, p13, p14, p15, p16, p17, p18, p19, p20, f129, f125, None, None, None, None, None, None, f105, None, i87, i94, None, i77, None, None, p26, i41] -f133 = getarrayitem_raw(i104, i131, descr=) -debug_merge_point(' #230 BINARY_ADD', 0) -f134 = float_add(f129, f133) -debug_merge_point(' #231 LOAD_FAST', 0) -guard_nonnull_class(p15, 19800744, descr=) [p0, p1, p15, p5, p7, p13, p14, p16, p17, p18, p19, p20, p21, f134, None, f125, None, None, None, None, None, None, f105, None, i87, i94, None, i77, None, None, p26, i41] -debug_merge_point(' #234 BINARY_MULTIPLY', 0) -f136 = getfield_gc_pure(p15, descr=) -f137 = float_mul(f134, f136) -debug_merge_point(' #235 BINARY_ADD', 0) -f138 = float_add(f125, f137) -debug_merge_point(' #236 LOAD_FAST', 0) -guard_nonnull_class(p17, 19800744, descr=) [p0, p1, p17, p5, p7, p13, p14, p15, p16, p18, p19, p20, p21, f138, None, None, None, None, None, None, None, None, None, f105, None, i87, i94, None, i77, None, None, p26, i41] -debug_merge_point(' #239 BINARY_MULTIPLY', 0) -f140 = getfield_gc_pure(p17, descr=) -f141 = float_mul(f138, f140) -debug_merge_point(' #240 LOAD_FAST', 0) -debug_merge_point(' #243 LOAD_FAST', 0) -debug_merge_point(' #246 LOAD_FAST', 0) -debug_merge_point(' #249 BINARY_MULTIPLY', 0) -debug_merge_point(' #250 LOAD_FAST', 0) -debug_merge_point(' #253 BINARY_ADD', 0) -debug_merge_point(' #254 STORE_SUBSCR', 0) -setarrayitem_raw(i104, i99, f141, descr=) -debug_merge_point(' #255 LOAD_FAST', 0) -guard_nonnull_class(p18, 19800744, descr=) [p0, p1, p18, p5, p7, p13, p14, p15, p16, p17, p19, p20, p21, None, None, None, None, None, None, None, None, None, None, f105, None, i87, i94, None, i77, None, None, p26, i41] -debug_merge_point(' #258 LOAD_GLOBAL', 0) -p144 = getfield_gc(ConstPtr(ptr143), descr=) -guard_nonnull_class(p144, ConstClass(Function), descr=) [p0, p1, p144, p5, p7, p18, p13, p14, p15, p16, p17, p19, p20, p21, None, None, None, None, None, None, None, None, None, None, f105, None, i87, i94, None, i77, None, None, p26, i41] -debug_merge_point(' #261 LOAD_FAST', 0) -debug_merge_point(' #264 LOAD_FAST', 0) -debug_merge_point(' #267 LOAD_FAST', 0) -debug_merge_point(' #270 BINARY_MULTIPLY', 0) -debug_merge_point(' #271 LOAD_FAST', 0) -debug_merge_point(' #274 BINARY_ADD', 0) -debug_merge_point(' #275 BINARY_SUBSCR', 0) -f146 = getarrayitem_raw(i104, i99, descr=) -debug_merge_point(' #276 LOAD_FAST', 0) -debug_merge_point(' #279 BINARY_SUBTRACT', 0) -f147 = float_sub(f146, f105) -debug_merge_point(' #280 CALL_FUNCTION', 0) -p148 = getfield_gc(p144, descr=) -guard_value(p148, ConstPtr(ptr149), descr=) [p0, p1, p148, p144, p5, p7, p18, p13, p14, p15, p16, p17, p19, p20, p21, f147, None, None, None, None, None, None, None, None, None, None, f105, None, i87, i94, None, i77, None, None, p26, i41] -p150 = getfield_gc(p144, descr=) -p151 = getfield_gc(p144, descr=) -p153 = call(ConstClass(getexecutioncontext), descr=) -p154 = getfield_gc(p153, descr=) -i155 = force_token() -p156 = getfield_gc(p153, descr=) -guard_isnull(p156, descr=) [p0, p1, p153, p156, p5, p7, p18, p144, p13, p14, p15, p16, p17, p19, p20, p21, p150, p154, i155, f147, None, None, None, None, None, None, None, None, None, None, f105, None, i87, i94, None, i77, None, None, p26, i41] -i157 = getfield_gc(p153, descr=) -i158 = int_is_zero(i157) -guard_true(i158, descr=) [p0, p1, p153, p5, p7, p18, p144, p13, p14, p15, p16, p17, p19, p20, p21, p150, p154, i155, f147, None, None, None, None, None, None, None, None, None, None, f105, None, i87, i94, None, i77, None, None, p26, i41] -debug_merge_point(' #0 LOAD_FAST', 1) -debug_merge_point(' #3 LOAD_FAST', 1) -debug_merge_point(' #6 BINARY_MULTIPLY', 1) -f159 = float_mul(f147, f147) -debug_merge_point(' #7 RETURN_VALUE', 1) -i160 = int_is_true(i157) -guard_false(i160, descr=) [p0, p1, p153, p5, p7, p18, p144, p13, p14, p15, p16, p17, p19, p20, p21, f159, p150, p154, i155, f147, None, None, None, None, None, None, None, None, None, None, f105, None, i87, i94, None, i77, None, None, p26, i41] -debug_merge_point(' #283 INPLACE_ADD', 0) -f161 = getfield_gc_pure(p18, descr=) -f162 = float_add(f161, f159) -debug_merge_point(' #284 STORE_FAST', 0) -debug_merge_point(' #287 JUMP_ABSOLUTE', 0) -i164 = getfield_raw(38968960, descr=) -i166 = int_sub(i164, 34) -setfield_raw(38968960, i166, descr=) -i168 = int_lt(i166, 0) -guard_false(i168, descr=) [p0, p1, p5, p7, p13, p14, p15, p16, p17, p19, p20, p21, f162, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, f105, None, i87, i94, None, i77, None, None, p26, i41] -debug_merge_point(' #125 FOR_ITER', 0) -p170 = new_with_vtable(19865144) -setfield_gc(p170, 291, descr=) -setfield_gc(p170, 1, descr=) -setfield_gc(p170, p26, descr=) -p174 = new_with_vtable(19861240) -setfield_gc(p174, i94, descr=) -setfield_gc(p174, i87, descr=) -setfield_gc(p174, i77, descr=) -p176 = new_with_vtable(19800744) -setfield_gc(p176, f162, descr=) -p178 = new_with_vtable(ConstClass(W_IntObject)) -setfield_gc(p178, i41, descr=) -p180 = new_with_vtable(ConstClass(W_IntObject)) -setfield_gc(p180, 1, descr=) -p182 = new_with_vtable(19800744) -setfield_gc(p182, f105, descr=) -jump(p1, p0, ConstPtr(ptr183), p170, 2, p5, 0, 125, p7, p174, ConstPtr(ptr187), ConstPtr(ptr188), ConstPtr(ptr189), ConstPtr(ptr190), ConstPtr(ptr191), p13, p14, p15, p16, p17, p176, p19, p20, p21, p178, p180, p182, descr=) -[5ed6432f4a2c] jit-log-opt-bridge} -[5ed66199330c] {jit-log-opt-bridge -# bridge out of Guard 65 with 72 ops -[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, i14, f15, f16] -debug_merge_point(' #294 POP_BLOCK', 0) -p17 = getfield_gc(p3, descr=) -guard_class(p3, 19865144, descr=) [p0, p1, p3, p17, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, f16, i14, f15] -i19 = getfield_gc(p3, descr=) -guard_value(i19, 0, descr=) [p0, p1, i19, p17, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, f16, i14, f15] -debug_merge_point(' #295 LOAD_GLOBAL', 0) -p21 = getfield_gc(p1, descr=) -guard_value(p21, ConstPtr(ptr22), descr=) [p0, p1, p21, p17, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, f16, i14, f15] -p23 = getfield_gc(p21, descr=) -guard_isnull(p23, descr=) [p0, p1, p23, p21, p17, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, f16, i14, f15] -p25 = getfield_gc(ConstPtr(ptr24), descr=) -guard_nonnull_class(p25, 19905496, descr=) [p0, p1, p25, p17, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, f16, i14, f15] -debug_merge_point(' #298 LOOKUP_METHOD', 0) -p27 = getfield_gc(p25, descr=) -guard_value(p27, ConstPtr(ptr28), descr=) [p0, p1, p25, p27, p17, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, f16, i14, f15] -p29 = getfield_gc(p27, descr=) -guard_isnull(p29, descr=) [p0, p1, p25, p29, p27, p17, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, f16, i14, f15] -p31 = getfield_gc(ConstPtr(ptr30), descr=) -guard_value(p31, ConstPtr(ptr32), descr=) [p0, p1, p31, p25, p17, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, f16, i14, f15] -debug_merge_point(' #301 LOAD_FAST', 0) -debug_merge_point(' #304 CALL_METHOD', 0) -call(ConstClass(set_errno), 0, descr=) -f36 = call(ConstClass(sqrt), f16, descr=) -i38 = call(ConstClass(get_errno), descr=) -i39 = float_ne(f36, f36) -guard_false(i39, descr=) [p0, p1, i38, f36, f16, p17, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, None, i14, f15] -i42 = float_eq(f36, inf) -i44 = float_eq(f36, -inf) -i45 = int_or(i42, i44) -i46 = int_is_true(i45) -guard_false(i46, descr=) [p0, p1, i38, f36, f16, p17, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, None, i14, f15] -i47 = int_is_true(i38) -guard_false(i47, descr=) [p0, p1, i38, f36, p17, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, f16, i14, f15] -debug_merge_point(' #307 RETURN_VALUE', 0) -guard_isnull(p17, descr=) [p0, p1, p17, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, f36, f16, i14, f15] -p48 = getfield_gc(p1, descr=) -setarrayitem_gc(p48, 0, ConstPtr(ptr50), descr=) -setarrayitem_gc(p48, 1, ConstPtr(ptr52), descr=) -setarrayitem_gc(p48, 2, ConstPtr(ptr52), descr=) -setarrayitem_gc(p48, 3, ConstPtr(ptr55), descr=) -setarrayitem_gc(p48, 4, ConstPtr(ptr55), descr=) -setarrayitem_gc(p48, 5, ConstPtr(ptr55), descr=) -setarrayitem_gc(p48, 6, ConstPtr(ptr55), descr=) -setarrayitem_gc(p48, 7, p5, descr=) -p60 = getfield_gc(p1, descr=) -setarrayitem_gc(p60, 0, p6, descr=) -setarrayitem_gc(p60, 1, p7, descr=) -setarrayitem_gc(p60, 2, p8, descr=) -setarrayitem_gc(p60, 3, p9, descr=) -p66 = new_with_vtable(19800744) -setfield_gc(p66, f16, descr=) -setarrayitem_gc(p60, 4, p66, descr=) -setarrayitem_gc(p60, 5, p10, descr=) -setarrayitem_gc(p60, 6, p11, descr=) -setarrayitem_gc(p60, 7, p12, descr=) -setarrayitem_gc(p60, 8, p13, descr=) -p73 = new_with_vtable(ConstClass(W_IntObject)) -setfield_gc(p73, i14, descr=) -setarrayitem_gc(p60, 9, p73, descr=) -p76 = new_with_vtable(19800744) -setfield_gc(p76, f15, descr=) -setarrayitem_gc(p60, 10, p76, descr=) -setfield_gc(p1, 1, descr=) -setfield_gc(p1, ConstPtr(ptr79), descr=) -setfield_gc(p1, ConstPtr(ptr55), descr=) -setfield_gc(p1, 0, descr=) -setfield_gc(p1, p4, descr=) -setfield_gc(p1, 0, descr=) -setfield_gc(p1, 307, descr=) -p84 = new_with_vtable(19800744) -setfield_gc(p84, f36, descr=) -finish(p84, descr=) -[5ed6619e9448] jit-log-opt-bridge} -[5ed74f2eef6e] {jit-log-opt-loop -# Loop 2 : loop with 394 ops -[p0, p1, p2, p3, p4, p5, p6, p7, i8, f9, i10, i11, p12, p13] -debug_merge_point(' #21 LOAD_FAST', 0) -guard_nonnull_class(p7, 19800744, descr=) [p1, p0, p7, p2, p3, p4, p5, p6, i8] -debug_merge_point(' #24 LOAD_FAST', 0) -debug_merge_point(' #27 COMPARE_OP', 0) -f15 = getfield_gc_pure(p7, descr=) -i16 = float_gt(f15, f9) -guard_true(i16, descr=) [p1, p0, p6, p7, p2, p3, p4, p5, i8] -debug_merge_point(' #30 POP_JUMP_IF_FALSE', 0) -debug_merge_point(' #33 LOAD_FAST', 0) -debug_merge_point(' #36 POP_JUMP_IF_FALSE', 0) -debug_merge_point(' #39 LOAD_FAST', 0) -debug_merge_point(' #42 LOAD_FAST', 0) -debug_merge_point(' #45 COMPARE_OP', 0) -i17 = int_ge(i8, i10) -guard_false(i17, descr=) [p1, p0, p5, p2, p3, p4, p6, p7, i8] -debug_merge_point(' #48 POP_JUMP_IF_FALSE', 0) -debug_merge_point(' #55 LOAD_GLOBAL', 0) -p18 = getfield_gc(p0, descr=) -guard_value(p18, ConstPtr(ptr19), descr=) [p1, p0, p18, p2, p3, p4, p5, p6, p7, i8] -p20 = getfield_gc(p18, descr=) -guard_isnull(p20, descr=) [p1, p0, p20, p18, p2, p3, p4, p5, p6, p7, i8] -p22 = getfield_gc(ConstPtr(ptr21), descr=) -guard_nonnull_class(p22, ConstClass(Function), descr=) [p1, p0, p22, p2, p3, p4, p5, p6, p7, i8] -debug_merge_point(' #58 LOAD_FAST', 0) -debug_merge_point(' #61 CALL_FUNCTION', 0) -p24 = getfield_gc(p22, descr=) -guard_value(p24, ConstPtr(ptr25), descr=) [p1, p0, p24, p22, p2, p3, p4, p5, p6, p7, i8] -p26 = getfield_gc(p22, descr=) -p27 = getfield_gc(p22, descr=) -i28 = force_token() -i29 = int_is_zero(i11) -guard_true(i29, descr=) [p1, p0, p12, p2, p3, p22, p4, p5, p6, p7, p26, p13, i28, i8] -debug_merge_point(' #0 LOAD_FAST', 1) -debug_merge_point(' #3 LOAD_ATTR', 1) -p30 = getfield_gc(p4, descr=) -guard_value(p30, ConstPtr(ptr31), descr=) [p1, p0, p12, p4, p30, p2, p3, p22, p5, p6, p7, p26, p13, i28, i8] -p33 = getfield_gc(ConstPtr(ptr32), descr=) -guard_value(p33, ConstPtr(ptr34), descr=) [p1, p0, p12, p4, p33, p2, p3, p22, p5, p6, p7, p26, p13, i28, i8] -p35 = getfield_gc(p4, descr=) -guard_nonnull_class(p35, 19800744, descr=) [p1, p0, p12, p35, p4, p2, p3, p22, p5, p6, p7, p26, p13, i28, i8] -debug_merge_point(' #6 LOAD_FAST', 1) -debug_merge_point(' #9 LOAD_ATTR', 1) -debug_merge_point(' #12 BINARY_MULTIPLY', 1) -f37 = getfield_gc_pure(p35, descr=) -f38 = float_mul(f37, f37) -debug_merge_point(' #13 STORE_FAST', 1) -debug_merge_point(' #16 LOAD_FAST', 1) -debug_merge_point(' #19 LOAD_ATTR', 1) -p39 = getfield_gc(p4, descr=) -guard_nonnull_class(p39, 19800744, descr=) [p1, p0, p12, p39, p4, p2, p3, p22, p5, p6, p7, f38, p26, p13, i28, i8] -debug_merge_point(' #22 LOAD_FAST', 1) -debug_merge_point(' #25 LOAD_ATTR', 1) -debug_merge_point(' #28 BINARY_MULTIPLY', 1) -f41 = getfield_gc_pure(p39, descr=) -f42 = float_mul(f41, f41) -debug_merge_point(' #29 STORE_FAST', 1) -debug_merge_point(' #32 LOAD_CONST', 1) -debug_merge_point(' #35 LOAD_FAST', 1) -debug_merge_point(' #38 LOAD_FAST', 1) -debug_merge_point(' #41 BINARY_ADD', 1) -f43 = float_add(f38, f42) -debug_merge_point(' #42 BINARY_DIVIDE', 1) -i45 = float_eq(f43, 0.000000) -guard_false(i45, descr=) [p1, p0, p12, f43, p2, p3, p22, p4, p5, p6, p7, f42, f38, p26, p13, i28, i8] -f47 = float_truediv(0.500000, f43) -debug_merge_point(' #43 STORE_FAST', 1) -debug_merge_point(' #46 LOAD_CONST', 1) -debug_merge_point(' #49 STORE_FAST', 1) -debug_merge_point(' #52 LOAD_FAST', 1) -debug_merge_point(' #55 LOAD_ATTR', 1) -p48 = getfield_gc(p4, descr=) -guard_nonnull_class(p48, ConstClass(W_IntObject), descr=) [p1, p0, p12, p48, p4, p2, p3, p22, p5, p6, p7, f47, f42, f38, p26, p13, i28, i8] -debug_merge_point(' #58 STORE_FAST', 1) -debug_merge_point(' #61 LOAD_FAST', 1) -debug_merge_point(' #64 LOAD_ATTR', 1) -p50 = getfield_gc(p4, descr=) -guard_nonnull_class(p50, ConstClass(W_IntObject), descr=) [p1, p0, p12, p50, p4, p2, p3, p22, p5, p6, p7, p48, f47, f42, f38, p26, p13, i28, i8] -debug_merge_point(' #67 STORE_FAST', 1) -debug_merge_point(' #70 LOAD_FAST', 1) -debug_merge_point(' #73 LOAD_ATTR', 1) -p52 = getfield_gc(p4, descr=) -guard_nonnull_class(p52, 19886912, descr=) [p1, p0, p12, p52, p4, p2, p3, p22, p5, p6, p7, p50, p48, f47, f42, f38, p26, p13, i28, i8] -debug_merge_point(' #76 STORE_FAST', 1) -debug_merge_point(' #79 SETUP_LOOP', 1) -debug_merge_point(' #82 LOAD_GLOBAL', 1) -guard_value(p26, ConstPtr(ptr54), descr=) [p1, p0, p12, p26, p2, p3, p22, p4, p5, p6, p7, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -p56 = getfield_gc(p26, descr=) -guard_isnull(p56, descr=) [p1, p0, p12, p56, p26, p2, p3, p22, p4, p5, p6, p7, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -p58 = getfield_gc(ConstPtr(ptr57), descr=) -guard_isnull(p58, descr=) [p1, p0, p12, p58, p2, p3, p22, p4, p5, p6, p7, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -p60 = getfield_gc(ConstPtr(ptr59), descr=) -guard_value(p60, ConstPtr(ptr61), descr=) [p1, p0, p12, p60, p2, p3, p22, p4, p5, p6, p7, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -p62 = getfield_gc(p60, descr=) -guard_isnull(p62, descr=) [p1, p0, p12, p62, p60, p2, p3, p22, p4, p5, p6, p7, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -p64 = getfield_gc(ConstPtr(ptr63), descr=) -guard_value(p64, ConstPtr(ptr65), descr=) [p1, p0, p12, p64, p2, p3, p22, p4, p5, p6, p7, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -debug_merge_point(' #85 LOAD_CONST', 1) -debug_merge_point(' #88 LOAD_FAST', 1) -debug_merge_point(' #91 LOAD_CONST', 1) -debug_merge_point(' #94 BINARY_SUBTRACT', 1) -i66 = getfield_gc_pure(p48, descr=) -i68 = int_sub_ovf(i66, 1) -guard_no_overflow(, descr=) [p1, p0, p12, p48, i68, p2, p3, p22, p4, p5, p6, p7, p64, p52, p50, None, f47, f42, f38, None, p13, i28, i8] -debug_merge_point(' #95 CALL_FUNCTION', 1) -p70 = getfield_gc(ConstPtr(ptr69), descr=) -p71 = getfield_gc(ConstPtr(ptr69), descr=) -i72 = getfield_gc_pure(p71, descr=) -guard_false(i72, descr=) [p1, p0, p12, p70, p71, p2, p3, p22, p4, p5, p6, p7, i68, None, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -p73 = getfield_gc_pure(p71, descr=) -i74 = arraylen_gc(p73, descr=) -i76 = int_sub(4, i74) -i78 = int_ge(3, i76) -guard_true(i78, descr=) [p1, p0, p12, p70, i76, p71, p2, p3, p22, p4, p5, p6, p7, i68, None, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -i79 = int_sub(3, i76) -i80 = getfield_gc_pure(p71, descr=) -guard_false(i80, descr=) [p1, p0, p12, p70, i79, i76, p71, p2, p3, p22, p4, p5, p6, p7, i68, None, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -p81 = getfield_gc_pure(p71, descr=) -p82 = getarrayitem_gc(p81, i79, descr=) -guard_class(p82, ConstClass(W_IntObject), descr=) [p1, p0, p12, p82, p2, p3, p22, p4, p5, p6, p7, i68, None, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -i84 = getfield_gc_pure(p82, descr=) -i85 = int_is_zero(i84) -guard_false(i85, descr=) [p1, p0, p12, i84, i68, p2, p3, p22, p4, p5, p6, p7, p82, None, None, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -i87 = int_lt(i84, 0) -guard_false(i87, descr=) [p1, p0, p12, i84, i68, p2, p3, p22, p4, p5, p6, p7, p82, None, None, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -i89 = int_lt(1, i68) -guard_true(i89, descr=) [p1, p0, p12, i84, i68, p2, p3, p22, p4, p5, p6, p7, p82, None, None, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -i90 = int_sub(i68, 1) -i92 = int_sub(i90, 1) -i93 = uint_floordiv(i92, i84) -i95 = int_add(i93, 1) -i97 = int_lt(i95, 0) -guard_false(i97, descr=) [p1, p0, p12, i84, i95, p2, p3, p22, p4, p5, p6, p7, p82, i68, None, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -debug_merge_point(' #98 GET_ITER', 1) -debug_merge_point(' #99 FOR_ITER', 1) -i99 = int_gt(i95, 0) -guard_true(i99, descr=) [p1, p0, p12, p2, p3, p22, p4, p5, p6, p7, i84, i95, None, None, None, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -i100 = int_add(1, i84) -debug_merge_point(' #102 STORE_FAST', 1) -debug_merge_point(' #105 SETUP_LOOP', 1) -debug_merge_point(' #108 LOAD_GLOBAL', 1) -debug_merge_point(' #111 LOAD_CONST', 1) -debug_merge_point(' #114 LOAD_FAST', 1) -debug_merge_point(' #117 LOAD_CONST', 1) -debug_merge_point(' #120 BINARY_SUBTRACT', 1) -i101 = getfield_gc_pure(p50, descr=) -i103 = int_sub_ovf(i101, 1) -guard_no_overflow(, descr=) [p1, p0, p12, p50, i103, p2, p3, p22, p4, p5, p6, p7, i100, i93, i84, None, None, None, None, p52, None, p48, f47, f42, f38, None, p13, i28, i8] -debug_merge_point(' #121 CALL_FUNCTION', 1) -i104 = getfield_gc_pure(p71, descr=) -guard_false(i104, descr=) [p1, p0, p12, p70, p71, p2, p3, p22, p4, p5, p6, p7, i103, i100, i93, i84, None, None, None, None, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -p105 = getfield_gc_pure(p71, descr=) -i106 = arraylen_gc(p105, descr=) -i108 = int_sub(4, i106) -i110 = int_ge(3, i108) -guard_true(i110, descr=) [p1, p0, p12, p70, i108, p71, p2, p3, p22, p4, p5, p6, p7, i103, i100, i93, i84, None, None, None, None, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -i111 = int_sub(3, i108) -i112 = getfield_gc_pure(p71, descr=) -guard_false(i112, descr=) [p1, p0, p12, p70, i111, i108, p71, p2, p3, p22, p4, p5, p6, p7, i103, i100, i93, i84, None, None, None, None, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -p113 = getfield_gc_pure(p71, descr=) -p114 = getarrayitem_gc(p113, i111, descr=) -guard_class(p114, ConstClass(W_IntObject), descr=) [p1, p0, p12, p114, p2, p3, p22, p4, p5, p6, p7, i103, i100, i93, i84, None, None, None, None, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -i116 = getfield_gc_pure(p114, descr=) -i117 = int_is_zero(i116) -guard_false(i117, descr=) [p1, p0, p12, i116, i103, p2, p3, p22, p4, p5, p6, p7, p114, None, i100, i93, i84, None, None, None, None, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -i119 = int_lt(i116, 0) -guard_false(i119, descr=) [p1, p0, p12, i116, i103, p2, p3, p22, p4, p5, p6, p7, p114, None, i100, i93, i84, None, None, None, None, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -i121 = int_lt(1, i103) -guard_true(i121, descr=) [p1, p0, p12, i116, i103, p2, p3, p22, p4, p5, p6, p7, p114, None, i100, i93, i84, None, None, None, None, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -i122 = int_sub(i103, 1) -i124 = int_sub(i122, 1) -i125 = uint_floordiv(i124, i116) -i127 = int_add(i125, 1) -i129 = int_lt(i127, 0) -guard_false(i129, descr=) [p1, p0, p12, i116, i127, p2, p3, p22, p4, p5, p6, p7, p114, i103, i100, i93, i84, None, None, None, None, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -debug_merge_point(' #124 GET_ITER', 1) -debug_merge_point(' #125 FOR_ITER', 1) -i131 = int_gt(i127, 0) -guard_true(i131, descr=) [p1, p0, p12, p2, p3, p22, p4, p5, p6, p7, i116, i127, None, None, i100, i93, i84, None, None, None, None, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -i132 = int_add(1, i116) -debug_merge_point(' #128 STORE_FAST', 1) -debug_merge_point(' #131 LOAD_FAST', 1) -debug_merge_point(' #134 LOAD_FAST', 1) -debug_merge_point(' #137 LOAD_FAST', 1) -debug_merge_point(' #140 BINARY_MULTIPLY', 1) -debug_merge_point(' #141 LOAD_FAST', 1) -debug_merge_point(' #144 BINARY_ADD', 1) -i133 = int_add_ovf(i66, 1) -guard_no_overflow(, descr=) [p1, p0, p12, i133, p2, p3, p22, p4, p5, p6, p7, i132, i125, i66, i116, None, None, None, i100, i93, i84, None, None, None, None, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -debug_merge_point(' #145 BINARY_SUBSCR', 1) -i134 = getfield_gc(p52, descr=) -i135 = int_lt(i133, i134) -guard_true(i135, descr=) [p1, p0, p12, p52, i133, p2, p3, p22, p4, p5, p6, p7, i132, i125, None, i116, None, None, None, i100, i93, i84, None, None, None, None, None, p50, p48, f47, f42, f38, None, p13, i28, i8] -i136 = getfield_gc(p52, descr=) -f137 = getarrayitem_raw(i136, i133, descr=) -debug_merge_point(' #146 STORE_FAST', 1) -debug_merge_point(' #149 LOAD_FAST', 1) -debug_merge_point(' #152 LOAD_FAST', 1) -debug_merge_point(' #155 LOAD_CONST', 1) -debug_merge_point(' #158 BINARY_SUBTRACT', 1) -debug_merge_point(' #159 LOAD_FAST', 1) -debug_merge_point(' #162 BINARY_MULTIPLY', 1) -debug_merge_point(' #163 LOAD_FAST', 1) -debug_merge_point(' #166 BINARY_ADD', 1) -debug_merge_point(' #167 BINARY_SUBSCR', 1) -f138 = getarrayitem_raw(i136, 1, descr=) -debug_merge_point(' #168 LOAD_FAST', 1) -debug_merge_point(' #171 LOAD_FAST', 1) -debug_merge_point(' #174 LOAD_CONST', 1) -debug_merge_point(' #177 BINARY_ADD', 1) -debug_merge_point(' #178 LOAD_FAST', 1) -debug_merge_point(' #181 BINARY_MULTIPLY', 1) -i140 = int_mul_ovf(2, i66) -guard_no_overflow(, descr=) [p1, p0, p12, p48, i140, p2, p3, p22, p4, p5, p6, p7, f138, f137, i132, i125, None, i116, None, None, None, i100, i93, i84, None, None, None, None, p52, p50, None, f47, f42, f38, None, p13, i28, i8] -debug_merge_point(' #182 LOAD_FAST', 1) -debug_merge_point(' #185 BINARY_ADD', 1) -i141 = int_add_ovf(i140, 1) -guard_no_overflow(, descr=) [p1, p0, p12, i141, p2, p3, p22, p4, p5, p6, p7, i140, f138, f137, i132, i125, None, i116, None, None, None, i100, i93, i84, None, None, None, None, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -debug_merge_point(' #186 BINARY_SUBSCR', 1) -i143 = int_lt(i141, 0) -guard_false(i143, descr=) [p1, p0, p12, p52, i141, i134, p2, p3, p22, p4, p5, p6, p7, None, f138, f137, i132, i125, None, i116, None, None, None, i100, i93, i84, None, None, None, None, None, p50, p48, f47, f42, f38, None, p13, i28, i8] -i144 = int_lt(i141, i134) -guard_true(i144, descr=) [p1, p0, p12, p52, i141, p2, p3, p22, p4, p5, p6, p7, None, f138, f137, i132, i125, None, i116, None, None, None, i100, i93, i84, None, None, None, None, None, p50, p48, f47, f42, f38, None, p13, i28, i8] -f145 = getarrayitem_raw(i136, i141, descr=) -debug_merge_point(' #187 BINARY_ADD', 1) -f146 = float_add(f138, f145) -debug_merge_point(' #188 LOAD_FAST', 1) -debug_merge_point(' #191 BINARY_MULTIPLY', 1) -f147 = float_mul(f146, f42) -debug_merge_point(' #192 LOAD_FAST', 1) -debug_merge_point(' #195 LOAD_FAST', 1) -debug_merge_point(' #198 LOAD_FAST', 1) -debug_merge_point(' #201 BINARY_MULTIPLY', 1) -debug_merge_point(' #202 LOAD_FAST', 1) -debug_merge_point(' #205 BINARY_ADD', 1) -debug_merge_point(' #206 LOAD_CONST', 1) -debug_merge_point(' #209 BINARY_SUBTRACT', 1) -debug_merge_point(' #210 BINARY_SUBSCR', 1) -i148 = int_lt(i66, i134) -guard_true(i148, descr=) [p1, p0, p12, p52, i66, p2, p3, p22, p4, p5, p6, p7, f147, None, None, f137, i132, i125, None, i116, None, None, None, i100, i93, i84, None, None, None, None, None, p50, p48, f47, f42, f38, None, p13, i28, i8] -f149 = getarrayitem_raw(i136, i66, descr=) -debug_merge_point(' #211 LOAD_FAST', 1) -debug_merge_point(' #214 LOAD_FAST', 1) -debug_merge_point(' #217 LOAD_FAST', 1) -debug_merge_point(' #220 BINARY_MULTIPLY', 1) -debug_merge_point(' #221 LOAD_FAST', 1) -debug_merge_point(' #224 BINARY_ADD', 1) -debug_merge_point(' #225 LOAD_CONST', 1) -debug_merge_point(' #228 BINARY_ADD', 1) -i151 = int_add(i133, 1) -debug_merge_point(' #229 BINARY_SUBSCR', 1) -i152 = int_lt(i151, i134) -guard_true(i152, descr=) [p1, p0, p12, p52, i151, p2, p3, p22, p4, p5, p6, p7, f149, f147, None, None, f137, i132, i125, None, i116, None, None, None, i100, i93, i84, None, None, None, None, None, p50, p48, f47, f42, f38, None, p13, i28, i8] -f153 = getarrayitem_raw(i136, i151, descr=) -debug_merge_point(' #230 BINARY_ADD', 1) -f154 = float_add(f149, f153) -debug_merge_point(' #231 LOAD_FAST', 1) -debug_merge_point(' #234 BINARY_MULTIPLY', 1) -f155 = float_mul(f154, f38) -debug_merge_point(' #235 BINARY_ADD', 1) -f156 = float_add(f147, f155) -debug_merge_point(' #236 LOAD_FAST', 1) -debug_merge_point(' #239 BINARY_MULTIPLY', 1) -f157 = float_mul(f156, f47) -debug_merge_point(' #240 LOAD_FAST', 1) -debug_merge_point(' #243 LOAD_FAST', 1) -debug_merge_point(' #246 LOAD_FAST', 1) -debug_merge_point(' #249 BINARY_MULTIPLY', 1) -debug_merge_point(' #250 LOAD_FAST', 1) -debug_merge_point(' #253 BINARY_ADD', 1) -debug_merge_point(' #254 STORE_SUBSCR', 1) -setarrayitem_raw(i136, i133, f157, descr=) -debug_merge_point(' #255 LOAD_FAST', 1) -debug_merge_point(' #258 LOAD_GLOBAL', 1) -p159 = getfield_gc(ConstPtr(ptr158), descr=) -guard_nonnull_class(p159, ConstClass(Function), descr=) [p1, p0, p12, p159, p2, p3, p22, p4, p5, p6, p7, None, None, None, None, f137, i132, i125, None, i116, None, None, None, i100, i93, i84, None, None, None, None, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -debug_merge_point(' #261 LOAD_FAST', 1) -debug_merge_point(' #264 LOAD_FAST', 1) -debug_merge_point(' #267 LOAD_FAST', 1) -debug_merge_point(' #270 BINARY_MULTIPLY', 1) -debug_merge_point(' #271 LOAD_FAST', 1) -debug_merge_point(' #274 BINARY_ADD', 1) -debug_merge_point(' #275 BINARY_SUBSCR', 1) -f161 = getarrayitem_raw(i136, i133, descr=) -debug_merge_point(' #276 LOAD_FAST', 1) -debug_merge_point(' #279 BINARY_SUBTRACT', 1) -f162 = float_sub(f161, f137) -debug_merge_point(' #280 CALL_FUNCTION', 1) -p163 = getfield_gc(p159, descr=) -guard_value(p163, ConstPtr(ptr164), descr=) [p1, p0, p12, p163, p159, p2, p3, p22, p4, p5, p6, p7, f162, None, None, None, None, f137, i132, i125, None, i116, None, None, None, i100, i93, i84, None, None, None, None, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -p165 = getfield_gc(p159, descr=) -p166 = getfield_gc(p159, descr=) -i167 = force_token() -debug_merge_point(' #0 LOAD_FAST', 2) -debug_merge_point(' #3 LOAD_FAST', 2) -debug_merge_point(' #6 BINARY_MULTIPLY', 2) -f168 = float_mul(f162, f162) -debug_merge_point(' #7 RETURN_VALUE', 2) -debug_merge_point(' #283 INPLACE_ADD', 1) -f170 = float_add(0.000000, f168) -debug_merge_point(' #284 STORE_FAST', 1) -debug_merge_point(' #287 JUMP_ABSOLUTE', 1) -i172 = getfield_raw(38968960, descr=) -i174 = int_sub(i172, 100) -setfield_raw(38968960, i174, descr=) -i176 = int_lt(i174, 0) -guard_false(i176, descr=) [p1, p0, p12, p2, p3, p22, p4, p5, p6, p7, f170, None, None, None, None, None, f137, i132, i125, None, i116, None, None, None, i100, i93, i84, None, None, None, None, p52, p50, p48, f47, f42, f38, None, p13, i28, i8] -debug_merge_point(' #125 FOR_ITER', 1) -i177 = force_token() -p179 = new_with_vtable(19809200) -setfield_gc(p179, i28, descr=) -setfield_gc(p12, p179, descr=) -setfield_gc(p0, i177, descr=) -p181 = new_with_vtable(19863424) -setfield_gc(p181, p13, descr=) -setfield_gc(p181, ConstPtr(ptr54), descr=) -setfield_gc(p181, 34, descr=) -setfield_gc(p181, ConstPtr(ptr25), descr=) -p184 = new_array(8, descr=) -p186 = new_with_vtable(19861240) -setfield_gc(p186, i100, descr=) -setfield_gc(p186, i93, descr=) -setfield_gc(p186, i84, descr=) -setarrayitem_gc(p184, 0, p186, descr=) -p189 = new_with_vtable(19861240) -setfield_gc(p189, i132, descr=) -setfield_gc(p189, i125, descr=) -setfield_gc(p189, i116, descr=) -setarrayitem_gc(p184, 1, p189, descr=) -setfield_gc(p181, p184, descr=) -setfield_gc(p181, 125, descr=) -p193 = new_with_vtable(19865144) -setfield_gc(p193, 291, descr=) -setfield_gc(p193, 1, descr=) -p197 = new_with_vtable(19865144) -setfield_gc(p197, 295, descr=) -setfield_gc(p193, p197, descr=) -setfield_gc(p181, p193, descr=) -p200 = new_array(11, descr=) -setarrayitem_gc(p200, 0, p4, descr=) -p203 = new_with_vtable(19800744) -setfield_gc(p203, f38, descr=) -setarrayitem_gc(p200, 1, p203, descr=) -p206 = new_with_vtable(19800744) -setfield_gc(p206, f42, descr=) -setarrayitem_gc(p200, 2, p206, descr=) -p209 = new_with_vtable(19800744) -setfield_gc(p209, f47, descr=) -setarrayitem_gc(p200, 3, p209, descr=) -p212 = new_with_vtable(19800744) -setfield_gc(p212, f170, descr=) -setarrayitem_gc(p200, 4, p212, descr=) -setarrayitem_gc(p200, 5, p48, descr=) -setarrayitem_gc(p200, 6, p50, descr=) -setarrayitem_gc(p200, 7, p52, descr=) -p218 = new_with_vtable(ConstClass(W_IntObject)) -setfield_gc(p218, 1, descr=) -setarrayitem_gc(p200, 8, p218, descr=) -p221 = new_with_vtable(ConstClass(W_IntObject)) -setfield_gc(p221, 1, descr=) -setarrayitem_gc(p200, 9, p221, descr=) -p224 = new_with_vtable(19800744) -setfield_gc(p224, f137, descr=) -setarrayitem_gc(p200, 10, p224, descr=) -setfield_gc(p181, p200, descr=) -setfield_gc(p181, 2, descr=) -p235 = call_assembler(p181, p12, ConstPtr(ptr25), p193, 2, ConstPtr(ptr227), 0, 125, p186, p189, ConstPtr(ptr229), ConstPtr(ptr230), ConstPtr(ptr231), ConstPtr(ptr232), ConstPtr(ptr233), ConstPtr(ptr234), p4, p203, p206, p209, p212, p48, p50, p52, p218, p221, p224, descr=) -guard_not_forced(, descr=) [p1, p0, p12, p181, p235, p179, p2, p3, p22, p4, p5, p6, p7, i8] -guard_no_exception(, descr=) [p1, p0, p12, p181, p235, p179, p2, p3, p22, p4, p5, p6, p7, i8] -p236 = getfield_gc(p12, descr=) -guard_isnull(p236, descr=) [p1, p0, p12, p235, p181, p236, p179, p2, p3, p22, p4, p5, p6, p7, i8] -i237 = ptr_eq(p181, p0) -guard_false(i237, descr=) [p1, p0, p12, p235, p181, p179, p2, p3, p22, p4, p5, p6, p7, i8] -i238 = getfield_gc(p12, descr=) -setfield_gc(p181, ConstPtr(ptr239), descr=) -i240 = int_is_true(i238) -guard_false(i240, descr=) [p1, p0, p235, p181, p12, p179, p2, p3, p22, p4, p5, p6, p7, i8] -p241 = getfield_gc(p181, descr=) -debug_merge_point(' #64 STORE_FAST', 0) -debug_merge_point(' #67 LOAD_FAST', 0) -debug_merge_point(' #70 LOAD_CONST', 0) -debug_merge_point(' #73 INPLACE_ADD', 0) -i243 = int_add(i8, 1) -debug_merge_point(' #74 STORE_FAST', 0) -debug_merge_point(' #77 JUMP_ABSOLUTE', 0) -i245 = getfield_raw(38968960, descr=) -i247 = int_sub(i245, 100) -setfield_raw(38968960, i247, descr=) -setfield_gc(p12, p241, descr=) -setfield_gc(p179, p181, descr=) -setfield_gc(p179, -3, descr=) -i250 = int_lt(i247, 0) -guard_false(i250, descr=) [p1, p0, p2, p3, p4, p5, p6, p235, i243, None] -debug_merge_point(' #21 LOAD_FAST', 0) -jump(p0, p1, p2, p3, p4, p5, p6, p235, i243, f9, i10, i238, p12, p241, descr=) -[5ed74fc965fa] jit-log-opt-loop} -[5ed74fe43ee0] {jit-log-opt-loop -# Loop 3 : entry bridge with 413 ops -[p0, p1, p2, p3, i4, p5, i6, i7, p8, p9, p10, p11, p12, p13, p14] -debug_merge_point(' #21 LOAD_FAST', 0) -guard_value(i4, 0, descr=) [i4, p1, p0, p2, p3, p5, i6, i7, p8, p9, p10, p11, p12, p13, p14] -guard_nonnull_class(p13, 19800744, descr=) [p1, p0, p13, p2, p3, p5, i6, p8, p9, p10, p11, p12, p14] -guard_value(i6, 0, descr=) [i6, p1, p0, p2, p3, p5, p13, p9, p10, p11, p12, p14] -debug_merge_point(' #24 LOAD_FAST', 0) -guard_nonnull_class(p12, 19800744, descr=) [p1, p0, p12, p2, p3, p5, p13, p9, p10, p11, p14] -debug_merge_point(' #27 COMPARE_OP', 0) -f19 = getfield_gc_pure(p13, descr=) -f20 = getfield_gc_pure(p12, descr=) -i21 = float_gt(f19, f20) -guard_true(i21, descr=) [p1, p0, p12, p13, p2, p3, p5, p10, p11, p14] -debug_merge_point(' #30 POP_JUMP_IF_FALSE', 0) -debug_merge_point(' #33 LOAD_FAST', 0) -guard_nonnull_class(p11, ConstClass(W_IntObject), descr=) [p1, p0, p11, p2, p3, p5, p10, p12, p13, p14] -debug_merge_point(' #36 POP_JUMP_IF_FALSE', 0) -i23 = getfield_gc_pure(p11, descr=) -i24 = int_is_true(i23) -guard_true(i24, descr=) [p1, p0, p11, p2, p3, p5, p10, p12, p13, p14] -debug_merge_point(' #39 LOAD_FAST', 0) -guard_nonnull_class(p14, ConstClass(W_IntObject), descr=) [p1, p0, p14, p2, p3, p5, p10, p11, p12, p13] -debug_merge_point(' #42 LOAD_FAST', 0) -debug_merge_point(' #45 COMPARE_OP', 0) -i26 = getfield_gc_pure(p14, descr=) -i27 = int_ge(i26, i23) -guard_false(i27, descr=) [p1, p0, p11, p14, p2, p3, p5, p10, p12, p13] -debug_merge_point(' #48 POP_JUMP_IF_FALSE', 0) -debug_merge_point(' #55 LOAD_GLOBAL', 0) -guard_value(p2, ConstPtr(ptr28), descr=) [p1, p0, p2, p3, p5, p10, p11, p12, p13, p14] -p29 = getfield_gc(p0, descr=) -guard_value(p29, ConstPtr(ptr30), descr=) [p1, p0, p29, p3, p5, p10, p11, p12, p13, p14] -p31 = getfield_gc(p29, descr=) -guard_isnull(p31, descr=) [p1, p0, p31, p29, p3, p5, p10, p11, p12, p13, p14] -p33 = getfield_gc(ConstPtr(ptr32), descr=) -guard_nonnull_class(p33, ConstClass(Function), descr=) [p1, p0, p33, p3, p5, p10, p11, p12, p13, p14] -debug_merge_point(' #58 LOAD_FAST', 0) -guard_nonnull_class(p10, 19852624, descr=) [p1, p0, p10, p3, p5, p33, p11, p12, p13, p14] -debug_merge_point(' #61 CALL_FUNCTION', 0) -p36 = getfield_gc(p33, descr=) -guard_value(p36, ConstPtr(ptr37), descr=) [p1, p0, p36, p33, p3, p5, p10, p11, p12, p13, p14] -p38 = getfield_gc(p33, descr=) -p39 = getfield_gc(p33, descr=) -p41 = call(ConstClass(getexecutioncontext), descr=) -p42 = getfield_gc(p41, descr=) -i43 = force_token() -p44 = getfield_gc(p41, descr=) -guard_isnull(p44, descr=) [p1, p0, p41, p44, p3, p5, p33, p10, p11, p12, p13, p14, i43, p42, p38] -i45 = getfield_gc(p41, descr=) -i46 = int_is_zero(i45) -guard_true(i46, descr=) [p1, p0, p41, p3, p5, p33, p10, p11, p12, p13, p14, i43, p42, p38] -debug_merge_point(' #0 LOAD_FAST', 1) -debug_merge_point(' #3 LOAD_ATTR', 1) -p47 = getfield_gc(p10, descr=) -guard_value(p47, ConstPtr(ptr48), descr=) [p1, p0, p41, p10, p47, p3, p5, p33, p11, p12, p13, p14, i43, p42, p38] -p50 = getfield_gc(ConstPtr(ptr49), descr=) -guard_value(p50, ConstPtr(ptr51), descr=) [p1, p0, p41, p10, p50, p3, p5, p33, p11, p12, p13, p14, i43, p42, p38] -p52 = getfield_gc(p10, descr=) -guard_nonnull_class(p52, 19800744, descr=) [p1, p0, p41, p52, p10, p3, p5, p33, p11, p12, p13, p14, i43, p42, p38] -debug_merge_point(' #6 LOAD_FAST', 1) -debug_merge_point(' #9 LOAD_ATTR', 1) -debug_merge_point(' #12 BINARY_MULTIPLY', 1) -f54 = getfield_gc_pure(p52, descr=) -f55 = float_mul(f54, f54) -debug_merge_point(' #13 STORE_FAST', 1) -debug_merge_point(' #16 LOAD_FAST', 1) -debug_merge_point(' #19 LOAD_ATTR', 1) -p56 = getfield_gc(p10, descr=) -guard_nonnull_class(p56, 19800744, descr=) [p1, p0, p41, p56, p10, p3, p5, p33, p11, p12, p13, p14, f55, i43, p42, p38] -debug_merge_point(' #22 LOAD_FAST', 1) -debug_merge_point(' #25 LOAD_ATTR', 1) -debug_merge_point(' #28 BINARY_MULTIPLY', 1) -f58 = getfield_gc_pure(p56, descr=) -f59 = float_mul(f58, f58) -debug_merge_point(' #29 STORE_FAST', 1) -debug_merge_point(' #32 LOAD_CONST', 1) -debug_merge_point(' #35 LOAD_FAST', 1) -debug_merge_point(' #38 LOAD_FAST', 1) -debug_merge_point(' #41 BINARY_ADD', 1) -f60 = float_add(f55, f59) -debug_merge_point(' #42 BINARY_DIVIDE', 1) -i62 = float_eq(f60, 0.000000) -guard_false(i62, descr=) [p1, p0, p41, f60, p3, p5, p33, p10, p11, p12, p13, p14, f59, f55, i43, p42, p38] -f64 = float_truediv(0.500000, f60) -debug_merge_point(' #43 STORE_FAST', 1) -debug_merge_point(' #46 LOAD_CONST', 1) -debug_merge_point(' #49 STORE_FAST', 1) -debug_merge_point(' #52 LOAD_FAST', 1) -debug_merge_point(' #55 LOAD_ATTR', 1) -p65 = getfield_gc(p10, descr=) -guard_nonnull_class(p65, ConstClass(W_IntObject), descr=) [p1, p0, p41, p65, p10, p3, p5, p33, p11, p12, p13, p14, f64, f59, f55, i43, p42, p38] -debug_merge_point(' #58 STORE_FAST', 1) -debug_merge_point(' #61 LOAD_FAST', 1) -debug_merge_point(' #64 LOAD_ATTR', 1) -p67 = getfield_gc(p10, descr=) -guard_nonnull_class(p67, ConstClass(W_IntObject), descr=) [p1, p0, p41, p67, p10, p3, p5, p33, p11, p12, p13, p14, p65, f64, f59, f55, i43, p42, p38] -debug_merge_point(' #67 STORE_FAST', 1) -debug_merge_point(' #70 LOAD_FAST', 1) -debug_merge_point(' #73 LOAD_ATTR', 1) -p69 = getfield_gc(p10, descr=) -guard_nonnull_class(p69, 19886912, descr=) [p1, p0, p41, p69, p10, p3, p5, p33, p11, p12, p13, p14, p67, p65, f64, f59, f55, i43, p42, p38] -debug_merge_point(' #76 STORE_FAST', 1) -debug_merge_point(' #79 SETUP_LOOP', 1) -debug_merge_point(' #82 LOAD_GLOBAL', 1) -guard_value(p38, ConstPtr(ptr71), descr=) [p1, p0, p41, p38, p3, p5, p33, p10, p11, p12, p13, p14, p69, p67, p65, f64, f59, f55, i43, p42, None] -p73 = getfield_gc(p38, descr=) -guard_isnull(p73, descr=) [p1, p0, p41, p73, p38, p3, p5, p33, p10, p11, p12, p13, p14, p69, p67, p65, f64, f59, f55, i43, p42, None] -p75 = getfield_gc(ConstPtr(ptr74), descr=) -guard_isnull(p75, descr=) [p1, p0, p41, p75, p3, p5, p33, p10, p11, p12, p13, p14, p69, p67, p65, f64, f59, f55, i43, p42, None] -p77 = getfield_gc(ConstPtr(ptr76), descr=) -guard_value(p77, ConstPtr(ptr78), descr=) [p1, p0, p41, p77, p3, p5, p33, p10, p11, p12, p13, p14, p69, p67, p65, f64, f59, f55, i43, p42, None] -p79 = getfield_gc(p77, descr=) -guard_isnull(p79, descr=) [p1, p0, p41, p79, p77, p3, p5, p33, p10, p11, p12, p13, p14, p69, p67, p65, f64, f59, f55, i43, p42, None] -p81 = getfield_gc(ConstPtr(ptr80), descr=) -guard_value(p81, ConstPtr(ptr82), descr=) [p1, p0, p41, p81, p3, p5, p33, p10, p11, p12, p13, p14, p69, p67, p65, f64, f59, f55, i43, p42, None] -debug_merge_point(' #85 LOAD_CONST', 1) -debug_merge_point(' #88 LOAD_FAST', 1) -debug_merge_point(' #91 LOAD_CONST', 1) -debug_merge_point(' #94 BINARY_SUBTRACT', 1) -i83 = getfield_gc_pure(p65, descr=) -i85 = int_sub_ovf(i83, 1) -guard_no_overflow(, descr=) [p1, p0, p41, p65, i85, p3, p5, p33, p10, p11, p12, p13, p14, p81, p69, p67, None, f64, f59, f55, i43, p42, None] -debug_merge_point(' #95 CALL_FUNCTION', 1) -p87 = getfield_gc(ConstPtr(ptr86), descr=) -p88 = getfield_gc(ConstPtr(ptr86), descr=) -i89 = getfield_gc_pure(p88, descr=) -guard_false(i89, descr=) [p1, p0, p41, p87, p88, p3, p5, p33, p10, p11, p12, p13, p14, i85, None, p69, p67, p65, f64, f59, f55, i43, p42, None] -p90 = getfield_gc_pure(p88, descr=) -i91 = arraylen_gc(p90, descr=) -i93 = int_sub(4, i91) -i95 = int_ge(3, i93) -guard_true(i95, descr=) [p1, p0, p41, p87, i93, p88, p3, p5, p33, p10, p11, p12, p13, p14, i85, None, p69, p67, p65, f64, f59, f55, i43, p42, None] -i96 = int_sub(3, i93) -i97 = getfield_gc_pure(p88, descr=) -guard_false(i97, descr=) [p1, p0, p41, p87, i96, i93, p88, p3, p5, p33, p10, p11, p12, p13, p14, i85, None, p69, p67, p65, f64, f59, f55, i43, p42, None] -p98 = getfield_gc_pure(p88, descr=) -p99 = getarrayitem_gc(p98, i96, descr=) -guard_class(p99, ConstClass(W_IntObject), descr=) [p1, p0, p41, p99, p3, p5, p33, p10, p11, p12, p13, p14, i85, None, p69, p67, p65, f64, f59, f55, i43, p42, None] -i101 = getfield_gc_pure(p99, descr=) -i102 = int_is_zero(i101) -guard_false(i102, descr=) [p1, p0, p41, i101, i85, p3, p5, p33, p10, p11, p12, p13, p14, p99, None, None, p69, p67, p65, f64, f59, f55, i43, p42, None] -i104 = int_lt(i101, 0) -guard_false(i104, descr=) [p1, p0, p41, i101, i85, p3, p5, p33, p10, p11, p12, p13, p14, p99, None, None, p69, p67, p65, f64, f59, f55, i43, p42, None] -i106 = int_lt(1, i85) -guard_true(i106, descr=) [p1, p0, p41, i101, i85, p3, p5, p33, p10, p11, p12, p13, p14, p99, None, None, p69, p67, p65, f64, f59, f55, i43, p42, None] -i107 = int_sub(i85, 1) -i109 = int_sub(i107, 1) -i110 = uint_floordiv(i109, i101) -i112 = int_add(i110, 1) -i114 = int_lt(i112, 0) -guard_false(i114, descr=) [p1, p0, p41, i101, i112, p3, p5, p33, p10, p11, p12, p13, p14, p99, i85, None, p69, p67, p65, f64, f59, f55, i43, p42, None] -debug_merge_point(' #98 GET_ITER', 1) -debug_merge_point(' #99 FOR_ITER', 1) -i116 = int_gt(i112, 0) -guard_true(i116, descr=) [p1, p0, p41, p3, p5, p33, p10, p11, p12, p13, p14, i112, i101, None, None, None, p69, p67, p65, f64, f59, f55, i43, p42, None] -i117 = int_add(1, i101) -debug_merge_point(' #102 STORE_FAST', 1) -debug_merge_point(' #105 SETUP_LOOP', 1) -debug_merge_point(' #108 LOAD_GLOBAL', 1) -debug_merge_point(' #111 LOAD_CONST', 1) -debug_merge_point(' #114 LOAD_FAST', 1) -debug_merge_point(' #117 LOAD_CONST', 1) -debug_merge_point(' #120 BINARY_SUBTRACT', 1) -i118 = getfield_gc_pure(p67, descr=) -i120 = int_sub_ovf(i118, 1) -guard_no_overflow(, descr=) [p1, p0, p41, p67, i120, p3, p5, p33, p10, p11, p12, p13, p14, i110, i117, None, i101, None, None, None, p69, None, p65, f64, f59, f55, i43, p42, None] -debug_merge_point(' #121 CALL_FUNCTION', 1) -i121 = getfield_gc_pure(p88, descr=) -guard_false(i121, descr=) [p1, p0, p41, p87, p88, p3, p5, p33, p10, p11, p12, p13, p14, i120, i110, i117, None, i101, None, None, None, p69, p67, p65, f64, f59, f55, i43, p42, None] -p122 = getfield_gc_pure(p88, descr=) -i123 = arraylen_gc(p122, descr=) -i125 = int_sub(4, i123) -i127 = int_ge(3, i125) -guard_true(i127, descr=) [p1, p0, p41, p87, i125, p88, p3, p5, p33, p10, p11, p12, p13, p14, i120, i110, i117, None, i101, None, None, None, p69, p67, p65, f64, f59, f55, i43, p42, None] -i128 = int_sub(3, i125) -i129 = getfield_gc_pure(p88, descr=) -guard_false(i129, descr=) [p1, p0, p41, p87, i128, i125, p88, p3, p5, p33, p10, p11, p12, p13, p14, i120, i110, i117, None, i101, None, None, None, p69, p67, p65, f64, f59, f55, i43, p42, None] -p130 = getfield_gc_pure(p88, descr=) -p131 = getarrayitem_gc(p130, i128, descr=) -guard_class(p131, ConstClass(W_IntObject), descr=) [p1, p0, p41, p131, p3, p5, p33, p10, p11, p12, p13, p14, i120, i110, i117, None, i101, None, None, None, p69, p67, p65, f64, f59, f55, i43, p42, None] -i133 = getfield_gc_pure(p131, descr=) -i134 = int_is_zero(i133) -guard_false(i134, descr=) [p1, p0, p41, i133, i120, p3, p5, p33, p10, p11, p12, p13, p14, p131, None, i110, i117, None, i101, None, None, None, p69, p67, p65, f64, f59, f55, i43, p42, None] -i136 = int_lt(i133, 0) -guard_false(i136, descr=) [p1, p0, p41, i133, i120, p3, p5, p33, p10, p11, p12, p13, p14, p131, None, i110, i117, None, i101, None, None, None, p69, p67, p65, f64, f59, f55, i43, p42, None] -i138 = int_lt(1, i120) -guard_true(i138, descr=) [p1, p0, p41, i133, i120, p3, p5, p33, p10, p11, p12, p13, p14, p131, None, i110, i117, None, i101, None, None, None, p69, p67, p65, f64, f59, f55, i43, p42, None] -i139 = int_sub(i120, 1) -i141 = int_sub(i139, 1) -i142 = uint_floordiv(i141, i133) -i144 = int_add(i142, 1) -i146 = int_lt(i144, 0) -guard_false(i146, descr=) [p1, p0, p41, i133, i144, p3, p5, p33, p10, p11, p12, p13, p14, p131, i120, i110, i117, None, i101, None, None, None, p69, p67, p65, f64, f59, f55, i43, p42, None] -debug_merge_point(' #124 GET_ITER', 1) -debug_merge_point(' #125 FOR_ITER', 1) -i148 = int_gt(i144, 0) -guard_true(i148, descr=) [p1, p0, p41, p3, p5, p33, p10, p11, p12, p13, p14, i144, i133, None, None, i110, i117, None, i101, None, None, None, p69, p67, p65, f64, f59, f55, i43, p42, None] -i149 = int_add(1, i133) -debug_merge_point(' #128 STORE_FAST', 1) -debug_merge_point(' #131 LOAD_FAST', 1) -debug_merge_point(' #134 LOAD_FAST', 1) -debug_merge_point(' #137 LOAD_FAST', 1) -debug_merge_point(' #140 BINARY_MULTIPLY', 1) -debug_merge_point(' #141 LOAD_FAST', 1) -debug_merge_point(' #144 BINARY_ADD', 1) -i150 = int_add_ovf(i83, 1) -guard_no_overflow(, descr=) [p1, p0, p41, i150, p3, p5, p33, p10, p11, p12, p13, p14, i83, i149, i142, None, i133, None, None, i110, i117, None, i101, None, None, None, p69, p67, p65, f64, f59, f55, i43, p42, None] -debug_merge_point(' #145 BINARY_SUBSCR', 1) -i151 = getfield_gc(p69, descr=) -i152 = int_lt(i150, i151) -guard_true(i152, descr=) [p1, p0, p41, p69, i150, p3, p5, p33, p10, p11, p12, p13, p14, None, i149, i142, None, i133, None, None, i110, i117, None, i101, None, None, None, None, p67, p65, f64, f59, f55, i43, p42, None] -i153 = getfield_gc(p69, descr=) -f154 = getarrayitem_raw(i153, i150, descr=) -debug_merge_point(' #146 STORE_FAST', 1) -debug_merge_point(' #149 LOAD_FAST', 1) -debug_merge_point(' #152 LOAD_FAST', 1) -debug_merge_point(' #155 LOAD_CONST', 1) -debug_merge_point(' #158 BINARY_SUBTRACT', 1) -debug_merge_point(' #159 LOAD_FAST', 1) -debug_merge_point(' #162 BINARY_MULTIPLY', 1) -debug_merge_point(' #163 LOAD_FAST', 1) -debug_merge_point(' #166 BINARY_ADD', 1) -debug_merge_point(' #167 BINARY_SUBSCR', 1) -f155 = getarrayitem_raw(i153, 1, descr=) -debug_merge_point(' #168 LOAD_FAST', 1) -debug_merge_point(' #171 LOAD_FAST', 1) -debug_merge_point(' #174 LOAD_CONST', 1) -debug_merge_point(' #177 BINARY_ADD', 1) -debug_merge_point(' #178 LOAD_FAST', 1) -debug_merge_point(' #181 BINARY_MULTIPLY', 1) -i157 = int_mul_ovf(2, i83) -guard_no_overflow(, descr=) [p1, p0, p41, p65, i157, p3, p5, p33, p10, p11, p12, p13, p14, f154, f155, None, i149, i142, None, i133, None, None, i110, i117, None, i101, None, None, None, p69, p67, None, f64, f59, f55, i43, p42, None] -debug_merge_point(' #182 LOAD_FAST', 1) -debug_merge_point(' #185 BINARY_ADD', 1) -i158 = int_add_ovf(i157, 1) -guard_no_overflow(, descr=) [p1, p0, p41, i158, p3, p5, p33, p10, p11, p12, p13, p14, i157, f154, f155, None, i149, i142, None, i133, None, None, i110, i117, None, i101, None, None, None, p69, p67, p65, f64, f59, f55, i43, p42, None] -debug_merge_point(' #186 BINARY_SUBSCR', 1) -i160 = int_lt(i158, 0) -guard_false(i160, descr=) [p1, p0, p41, p69, i158, i151, p3, p5, p33, p10, p11, p12, p13, p14, None, f154, f155, None, i149, i142, None, i133, None, None, i110, i117, None, i101, None, None, None, None, p67, p65, f64, f59, f55, i43, p42, None] -i161 = int_lt(i158, i151) -guard_true(i161, descr=) [p1, p0, p41, p69, i158, p3, p5, p33, p10, p11, p12, p13, p14, None, f154, f155, None, i149, i142, None, i133, None, None, i110, i117, None, i101, None, None, None, None, p67, p65, f64, f59, f55, i43, p42, None] -f162 = getarrayitem_raw(i153, i158, descr=) -debug_merge_point(' #187 BINARY_ADD', 1) -f163 = float_add(f155, f162) -debug_merge_point(' #188 LOAD_FAST', 1) -debug_merge_point(' #191 BINARY_MULTIPLY', 1) -f164 = float_mul(f163, f59) -debug_merge_point(' #192 LOAD_FAST', 1) -debug_merge_point(' #195 LOAD_FAST', 1) -debug_merge_point(' #198 LOAD_FAST', 1) -debug_merge_point(' #201 BINARY_MULTIPLY', 1) -debug_merge_point(' #202 LOAD_FAST', 1) -debug_merge_point(' #205 BINARY_ADD', 1) -debug_merge_point(' #206 LOAD_CONST', 1) -debug_merge_point(' #209 BINARY_SUBTRACT', 1) -debug_merge_point(' #210 BINARY_SUBSCR', 1) -i165 = int_lt(i83, i151) -guard_true(i165, descr=) [p1, p0, p41, p69, i83, p3, p5, p33, p10, p11, p12, p13, p14, f164, None, f154, None, None, i149, i142, None, i133, None, None, i110, i117, None, i101, None, None, None, None, p67, p65, f64, f59, f55, i43, p42, None] -f166 = getarrayitem_raw(i153, i83, descr=) -debug_merge_point(' #211 LOAD_FAST', 1) -debug_merge_point(' #214 LOAD_FAST', 1) -debug_merge_point(' #217 LOAD_FAST', 1) -debug_merge_point(' #220 BINARY_MULTIPLY', 1) -debug_merge_point(' #221 LOAD_FAST', 1) -debug_merge_point(' #224 BINARY_ADD', 1) -debug_merge_point(' #225 LOAD_CONST', 1) -debug_merge_point(' #228 BINARY_ADD', 1) -i168 = int_add(i150, 1) -debug_merge_point(' #229 BINARY_SUBSCR', 1) -i169 = int_lt(i168, i151) -guard_true(i169, descr=) [p1, p0, p41, p69, i168, p3, p5, p33, p10, p11, p12, p13, p14, f166, f164, None, f154, None, None, i149, i142, None, i133, None, None, i110, i117, None, i101, None, None, None, None, p67, p65, f64, f59, f55, i43, p42, None] -f170 = getarrayitem_raw(i153, i168, descr=) -debug_merge_point(' #230 BINARY_ADD', 1) -f171 = float_add(f166, f170) -debug_merge_point(' #231 LOAD_FAST', 1) -debug_merge_point(' #234 BINARY_MULTIPLY', 1) -f172 = float_mul(f171, f55) -debug_merge_point(' #235 BINARY_ADD', 1) -f173 = float_add(f164, f172) -debug_merge_point(' #236 LOAD_FAST', 1) -debug_merge_point(' #239 BINARY_MULTIPLY', 1) -f174 = float_mul(f173, f64) -debug_merge_point(' #240 LOAD_FAST', 1) -debug_merge_point(' #243 LOAD_FAST', 1) -debug_merge_point(' #246 LOAD_FAST', 1) -debug_merge_point(' #249 BINARY_MULTIPLY', 1) -debug_merge_point(' #250 LOAD_FAST', 1) -debug_merge_point(' #253 BINARY_ADD', 1) -debug_merge_point(' #254 STORE_SUBSCR', 1) -setarrayitem_raw(i153, i150, f174, descr=) -debug_merge_point(' #255 LOAD_FAST', 1) -debug_merge_point(' #258 LOAD_GLOBAL', 1) -p176 = getfield_gc(ConstPtr(ptr175), descr=) -guard_nonnull_class(p176, ConstClass(Function), descr=) [p1, p0, p41, p176, p3, p5, p33, p10, p11, p12, p13, p14, None, None, None, f154, None, None, i149, i142, None, i133, None, None, i110, i117, None, i101, None, None, None, p69, p67, p65, f64, f59, f55, i43, p42, None] -debug_merge_point(' #261 LOAD_FAST', 1) -debug_merge_point(' #264 LOAD_FAST', 1) -debug_merge_point(' #267 LOAD_FAST', 1) -debug_merge_point(' #270 BINARY_MULTIPLY', 1) -debug_merge_point(' #271 LOAD_FAST', 1) -debug_merge_point(' #274 BINARY_ADD', 1) -debug_merge_point(' #275 BINARY_SUBSCR', 1) -f178 = getarrayitem_raw(i153, i150, descr=) -debug_merge_point(' #276 LOAD_FAST', 1) -debug_merge_point(' #279 BINARY_SUBTRACT', 1) -f179 = float_sub(f178, f154) -debug_merge_point(' #280 CALL_FUNCTION', 1) -p180 = getfield_gc(p176, descr=) -guard_value(p180, ConstPtr(ptr181), descr=) [p1, p0, p41, p180, p176, p3, p5, p33, p10, p11, p12, p13, p14, f179, None, None, None, f154, None, None, i149, i142, None, i133, None, None, i110, i117, None, i101, None, None, None, p69, p67, p65, f64, f59, f55, i43, p42, None] -p182 = getfield_gc(p176, descr=) -p183 = getfield_gc(p176, descr=) -i184 = force_token() -debug_merge_point(' #0 LOAD_FAST', 2) -debug_merge_point(' #3 LOAD_FAST', 2) -debug_merge_point(' #6 BINARY_MULTIPLY', 2) -f185 = float_mul(f179, f179) -debug_merge_point(' #7 RETURN_VALUE', 2) -i186 = int_is_true(i45) -guard_false(i186, descr=) [p1, p0, p41, p3, p5, p33, p10, p11, p12, p13, p14, p182, i184, p176, f185, f179, None, None, None, f154, None, None, i149, i142, None, i133, None, None, i110, i117, None, i101, None, None, None, p69, p67, p65, f64, f59, f55, i43, p42, None] -debug_merge_point(' #283 INPLACE_ADD', 1) -f188 = float_add(0.000000, f185) -debug_merge_point(' #284 STORE_FAST', 1) -debug_merge_point(' #287 JUMP_ABSOLUTE', 1) -i190 = getfield_raw(38968960, descr=) -i192 = int_sub(i190, 100) -setfield_raw(38968960, i192, descr=) -i194 = int_lt(i192, 0) -guard_false(i194, descr=) [p1, p0, p41, p3, p5, p33, p10, p11, p12, p13, p14, f188, None, None, None, None, None, None, None, None, f154, None, None, i149, i142, None, i133, None, None, i110, i117, None, i101, None, None, None, p69, p67, p65, f64, f59, f55, i43, p42, None] -debug_merge_point(' #125 FOR_ITER', 1) -i195 = force_token() -p197 = new_with_vtable(19809200) -setfield_gc(p197, i43, descr=) -setfield_gc(p41, p197, descr=) -setfield_gc(p0, i195, descr=) -p199 = new_with_vtable(19863424) -setfield_gc(p199, p42, descr=) -setfield_gc(p199, ConstPtr(ptr71), descr=) -setfield_gc(p199, 34, descr=) -setfield_gc(p199, ConstPtr(ptr37), descr=) -p202 = new_array(8, descr=) -p204 = new_with_vtable(19861240) -setfield_gc(p204, i117, descr=) -setfield_gc(p204, i110, descr=) -setfield_gc(p204, i101, descr=) -setarrayitem_gc(p202, 0, p204, descr=) -p207 = new_with_vtable(19861240) -setfield_gc(p207, i149, descr=) -setfield_gc(p207, i142, descr=) -setfield_gc(p207, i133, descr=) -setarrayitem_gc(p202, 1, p207, descr=) -setfield_gc(p199, p202, descr=) -setfield_gc(p199, 125, descr=) -p211 = new_with_vtable(19865144) -setfield_gc(p211, 291, descr=) -setfield_gc(p211, 1, descr=) -p215 = new_with_vtable(19865144) -setfield_gc(p215, 295, descr=) -setfield_gc(p211, p215, descr=) -setfield_gc(p199, p211, descr=) -p218 = new_array(11, descr=) -setarrayitem_gc(p218, 0, p10, descr=) -p221 = new_with_vtable(19800744) -setfield_gc(p221, f55, descr=) -setarrayitem_gc(p218, 1, p221, descr=) -p224 = new_with_vtable(19800744) -setfield_gc(p224, f59, descr=) -setarrayitem_gc(p218, 2, p224, descr=) -p227 = new_with_vtable(19800744) -setfield_gc(p227, f64, descr=) -setarrayitem_gc(p218, 3, p227, descr=) -p230 = new_with_vtable(19800744) -setfield_gc(p230, f188, descr=) -setarrayitem_gc(p218, 4, p230, descr=) -setarrayitem_gc(p218, 5, p65, descr=) -setarrayitem_gc(p218, 6, p67, descr=) -setarrayitem_gc(p218, 7, p69, descr=) -p236 = new_with_vtable(ConstClass(W_IntObject)) -setfield_gc(p236, 1, descr=) -setarrayitem_gc(p218, 8, p236, descr=) -p239 = new_with_vtable(ConstClass(W_IntObject)) -setfield_gc(p239, 1, descr=) -setarrayitem_gc(p218, 9, p239, descr=) -p242 = new_with_vtable(19800744) -setfield_gc(p242, f154, descr=) -setarrayitem_gc(p218, 10, p242, descr=) -setfield_gc(p199, p218, descr=) -setfield_gc(p199, 2, descr=) -p253 = call_assembler(p199, p41, ConstPtr(ptr37), p211, 2, ConstPtr(ptr245), 0, 125, p204, p207, ConstPtr(ptr247), ConstPtr(ptr248), ConstPtr(ptr249), ConstPtr(ptr250), ConstPtr(ptr251), ConstPtr(ptr252), p10, p221, p224, p227, p230, p65, p67, p69, p236, p239, p242, descr=) -guard_not_forced(, descr=) [p1, p0, p41, p199, p253, p197, p3, p5, p33, p10, p11, p12, p13, p14] -guard_no_exception(, descr=) [p1, p0, p41, p199, p253, p197, p3, p5, p33, p10, p11, p12, p13, p14] -p254 = getfield_gc(p41, descr=) -guard_isnull(p254, descr=) [p1, p0, p41, p253, p199, p254, p197, p3, p5, p33, p10, p11, p12, p13, p14] -i255 = ptr_eq(p199, p0) -guard_false(i255, descr=) [p1, p0, p41, p253, p199, p197, p3, p5, p33, p10, p11, p12, p13, p14] -i256 = getfield_gc(p41, descr=) -setfield_gc(p199, ConstPtr(ptr257), descr=) -i258 = int_is_true(i256) -guard_false(i258, descr=) [p1, p0, p253, p199, p41, p197, p3, p5, p33, p10, p11, p12, p13, p14] -p259 = getfield_gc(p199, descr=) -debug_merge_point(' #64 STORE_FAST', 0) -debug_merge_point(' #67 LOAD_FAST', 0) -debug_merge_point(' #70 LOAD_CONST', 0) -debug_merge_point(' #73 INPLACE_ADD', 0) -i261 = int_add(i26, 1) -debug_merge_point(' #74 STORE_FAST', 0) -debug_merge_point(' #77 JUMP_ABSOLUTE', 0) -i263 = getfield_raw(38968960, descr=) -i265 = int_sub(i263, 100) -setfield_raw(38968960, i265, descr=) -setfield_gc(p41, p259, descr=) -setfield_gc(p197, p199, descr=) -setfield_gc(p197, -3, descr=) -i268 = int_lt(i265, 0) -guard_false(i268, descr=) [p1, p0, p3, p5, p10, p11, p12, p253, i261] -debug_merge_point(' #21 LOAD_FAST', 0) -jump(p0, p1, p3, p5, p10, p11, p12, p253, i261, f20, i23, i256, p41, p259, descr=) -[5ed74ff695c8] jit-log-opt-loop} -[5ed8737e9776] {jit-backend-counts -0:493724565 -1:2281802 -2:1283242 -3:993105 -4:2933 -5:2163 -6:2492 -7:1799 -8:963 -9:36 -[5ed8737ee19c] jit-backend-counts} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.r3 b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.r3 deleted file mode 100644 index 707102d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.r3 +++ /dev/null @@ -1,114 +0,0 @@ -preface.... everything what is before header is not evaluated -so this should not be colorized: -1 + 2 - -REBOL [] ;<- this is minimal header, everything behind it must be colorized - -;## String tests ## -print "Hello ^"World" ;<- with escaped char -multiline-string: { - bla bla "bla" {bla} -} -char-a: #"a" -escaped-a: #"^(61)" -new-line: #"^/" - -;## Binaries ## -print decompress 64#{eJzLSM3JyQcABiwCFQUAAAA=} -;2#{0000 00000} ;<- this one is invalid! -2#{} -#{FF00} - -;##Date + time ## -1-Feb-2009 -1-Feb-2009/2:24:46+1:0 -1:0 1:1:1 -0:1.1 - -;## Tuple ## -red: 255.0.0 -red-with-alpha: 255.0.0.100 - -;## url!, file! and email! ## -aaa@bbb.cz -http:// -dns:// -tcp://127.0.0.1 -%/c/rebol/ -%"c:\Program Files\" -%/c/Program%20Files/ -to-rebol-file "c:\Program Files\" -suffix? %bla.swf - -;## Money ## -$1 --$1.2 -USA$100 - -;## Tag! ## - - - -;## Pair! ## -10x200 - -;## Issue! ## -type? #ff0000 ;== issue! - -;## some numbers ## -to integer! (1 + (x / 4.5) * 1E-4) - -;## some spec comments -1 + 1 -comment "aa" -2 + 2 -comment {aa} -3 + 3 -comment {a^{} -4 + 4 -comment {{}} -5 + 5 -comment { - foo: 6 -} -6 + 6 -comment [foo: 6] -7 + 7 -comment [foo: "[" ] -8 + 8 -comment [foo: {^{} ] -9 + 9 -comment [foo: {boo} ] -10 + 10 -comment 5-May-2014/11:17:34+2:00 -5-May-2014/11:17:34+2:00 11 + 11 - -;## other tests ## ----: 1 -x/(1 + n)/y -b/:1 - -;## and... -REBOL [ - purpose: { - reads css file and creates html from it - so one can see how the styles looks like - } -] -style: %default -out: rejoin [{ - - - Pygments style: } style {.css - - - -
    -}]
    -css: read/lines join style %.css
    -foreach line css [
    -    parse line [".syntax ." copy c to " " thru "/*" copy t to "*/" to end (
    -        append out rejoin ["" t "^/"])
    -    ]
    -]
    -write join style %.html join out "
    " -halt diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.rb b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.rb deleted file mode 100644 index 8ac102e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.rb +++ /dev/null @@ -1,177 +0,0 @@ -a.each{|el|anz[el]=anz[el]?anz[el]+1:1} -while x<10000 -#a bis f dienen dazu die Nachbarschaft festzulegen. Man stelle sich die #Zahl von 1 bis 64 im Binärcode vor 1 bedeutet an 0 aus - b=(p[x]%32)/16<1 ? 0 : 1 - - (x-102>=0? n[x-102].to_i : 0)*a+(x-101>=0?n[x-101].to_i : 0)*e+n[x-100].to_i+(x-99>=0? n[x-99].to_i : 0)*f+(x-98>=0? n[x-98].to_i : 0)*a+ - n[x+199].to_i*b+n[x+200].to_i*d+n[x+201].to_i*b - -#und die Ausgabe folgt -g=%w{} -x=0 - -#leere regex -test //, 123 - -while x<100 - puts"#{g[x]}" - x+=1 -end - -puts"" -sleep(10) - -1E1E1 -puts 30.send(:/, 5) # prints 6 - -# fun with class attributes -class Foo - def self.blub x - if not x.nil? - self.new - end - end - def another_way_to_get_class - self.class - end -end - -# ruby 1.9 "call operator" -a = Proc.new { 42 } -a.() - -"instance variables can be #@included, #@@class_variables\n and #$globals as well." -`instance variables can be #@included, #@@class_variables\n and #$globals as well.` -'instance variables can be #@included, #@@class_variables\n and #$globals as well.' -/instance variables can be #@included, #@@class_variables\n and #$globals as well./mousenix -:"instance variables can be #@included, #@@class_variables\n and #$globals as well." -:'instance variables can be #@included, #@@class_variables\n and #$globals as well.' -%'instance variables can be #@included, #@@class_variables\n and #$globals as well.' -%q'instance variables can be #@included, #@@class_variables\n and #$globals as well.' -%Q'instance variables can be #@included, #@@class_variables\n and #$globals as well.' -%w'instance variables can be #@included, #@@class_variables\n and #$globals as well.' -%W'instance variables can be #@included, #@@class_variables\n and #$globals as well.' -%s'instance variables can be #@included, #@@class_variables\n and #$globals as well.' -%r'instance variables can be #@included, #@@class_variables\n and #$globals as well.' -%x'instance variables can be #@included, #@@class_variables\n and #$globals as well.' - -#%W[ but #@0illegal_values look strange.] - -%s#ruby allows strange#{constructs} -%s#ruby allows strange#$constructs -%s#ruby allows strange#@@constructs - -################################################################## -# HEREDOCS -foo(<<-A, <<-B) -this is the text of a -A -and this is the text of b -B - -a = <<"EOF" -This is a multiline #$here document -terminated by EOF on a line by itself -EOF - -a = <<'EOF' -This is a multiline #$here document -terminated by EOF on a line by itself -EOF - -b=(p[x] %32)/16<1 ? 0 : 1 - -<<"" -#{test} -#@bla -#die suppe!!! -\xfffff - - -super <<-EOE % [ - foo -EOE - -< [1, 2, 3, 4, 5, 6] -p [1,2,3].`(:concat, [4,5,6]) # => [1, 2, 3, 4, 5, 6] -p "Hurra! ".`(:*, 3) # => "Hurra! Hurra! Hurra! " -p "Hurra! ".`('*', 3) # => "Hurra! Hurra! Hurra! " -# Leider geht nicht die Wunschform -# [1,2,3] `concat` [4,5,6] - -class Object - @@infixops = [] - alias :xeq :` - def addinfix(operator) - @@infixops << operator - end - def `(expression) - @@infixops.each{|op|break if expression.match(/^(.*?) (#{op}) (.*)$/)} - raise "unknown infix operator in expression: #{expression}" if $2 == nil - eval($1).method($2.to_sym).call(eval($3)) - end -end -addinfix("concat") -p `[1,2,3] concat [4,5,6]` # => [1, 2, 3, 4, 5, 6] - - -# HEREDOC FUN!!!!!!!1111 -foo(< - <% rows.each do |row| %> - -
    <%= item.title %> - <%= item.description %> - - <% end %> - - - -

    Pages

    - - - - - - - - - - -<% if @homepage -%> -<%= render_node @homepage -%> -<% else -%> - - - -<% end -%> - -
    PageStatusModify
    No Pages
    - -
    -

    -<% unless @homepage -%> - <%= link_to image_tag('new-homepage', :alt => 'New Homepage'), homepage_new_url %> -<% end -%> - <%= image_submit_tag 'clear-page-cache' %> -

    -
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.rsl b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.rsl deleted file mode 100644 index d6c9fc9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.rsl +++ /dev/null @@ -1,111 +0,0 @@ -scheme COMPILER = -class - type - Prog == mk_Prog(stmt : Stmt), - - Stmt == - mk_Asgn(ide : Identifier, expr : Expr) | - mk_If(cond : Expr, s1 : Stmt, s2 : Stmt) | - mk_Seq(head : Stmt, last : Stmt), - - Expr == - mk_Const(const : Int) | - mk_Plus(fst : Expr, snd : Expr) | - mk_Id(ide : Identifier), - Identifier = Text - -type /* storage for program variables */ - `Sigma = Identifier -m-> Int - -value - m : Prog -> `Sigma -> `Sigma - m(p)(`sigma) is m(stmt(p))(`sigma), - - m : Stmt -> `Sigma -> `Sigma - m(s)(`sigma) is - case s of - mk_Asgn(i, e) -> `sigma !! [i +> m(e)(`sigma)], - mk_Seq(s1, s2) -> m(s2)(m(s1)(`sigma)), - mk_If(c, s1, s2) -> - if m(c)(`sigma) ~= 0 then m(s1)(`sigma) else m(s2)(`sigma) end - end, - - m : Expr -> `Sigma -> Int - m(e)(`sigma) is - case e of - mk_Const(n) -> n, - mk_Plus(e1, e2) -> m(e1)(`sigma) + m(e2)(`sigma), - mk_Id(id) -> if id isin dom `sigma then `sigma(id) else 0 end - end - -type - MProg = Inst-list, - Inst == - mk_Push(ide1 : Identifier) | - mk_Pop(Unit) | - mk_Add(Unit) | - mk_Cnst(val : Int) | - mk_Store(ide2 : Identifier) | - mk_Jumpfalse(off1 : Int) | - mk_Jump(off2 : Int) - - -/* An interpreter for SMALL instructions */ - -type Stack = Int-list -value - I : MProg >< Int >< Stack -> (`Sigma ->`Sigma) - I(mp, pc, s)(`sigma) is - if pc <= 0 \/ pc > len mp then `sigma else - case mp(pc) of - mk_Push(x) -> if x isin dom `sigma - then I(mp, pc + 1, <.`sigma(x).> ^ s)(`sigma) - else I(mp, pc + 1, <.0.> ^ s)(`sigma) end, - mk_Pop(()) -> if len s = 0 then `sigma - else I(mp, pc + 1, tl s)(`sigma) end, - mk_Cnst(n) -> I(mp, pc + 1, <.n.> ^ s)(`sigma), - mk_Add(()) -> if len s < 2 then `sigma - else I(mp, pc + 1,<.s(1) + s(2).> ^ tl tl s)(`sigma) end, - mk_Store(x) -> if len s = 0 then `sigma - else I(mp, pc + 1, s)(`sigma !! [x +> s(1)]) end, - mk_Jumpfalse(n) -> if len s = 0 then `sigma - elsif hd s ~= 0 then I(mp, pc + 1, s)(`sigma) - else I(mp, pc + n, s)(`sigma) end, - mk_Jump(n) -> I(mp, pc + n, s)(`sigma) - end - end - -value - comp_Prog : Prog -> MProg - comp_Prog(p) is comp_Stmt(stmt(p)), - - comp_Stmt : Stmt -> MProg - comp_Stmt(s) is - case s of - mk_Asgn(id, e) -> comp_Expr(e) ^ <. mk_Store(id), mk_Pop() .>, - mk_Seq(s1, s2) -> comp_Stmt(s1) ^ comp_Stmt(s2), - mk_If(e, s1, s2) -> - let - ce = comp_Expr(e), - cs1 = comp_Stmt(s1), cs2 = comp_Stmt(s2) - in - ce ^ - <. mk_Jumpfalse(len cs1 + 3) .> ^ - <. mk_Pop() .> ^ - cs1 ^ - <. mk_Jump(len cs2 + 2) .> ^ - <. mk_Pop() .> ^ - cs2 - end - end, - - comp_Expr : Expr -> MProg - comp_Expr(e) is - case e of - mk_Const(n) -> <. mk_Cnst(n) .>, - mk_Plus(e1, e2) -> - comp_Expr(e1) ^ comp_Expr(e2) ^ <. mk_Add() .>, - mk_Id(id) -> <. mk_Push(id) .> - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.scaml b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.scaml deleted file mode 100644 index 8872a83..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.scaml +++ /dev/null @@ -1,8 +0,0 @@ --@ import val city:String = "Tampa" -- val name:String = "Hiram" -%html - %body - %p Hello #{name} from #{city} - %ul - - for ( i <- 1 to 10 ) - %li Item #{i} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.ssp b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.ssp deleted file mode 100644 index 96d26d5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.ssp +++ /dev/null @@ -1,12 +0,0 @@ -<%@ val someName: String = "someDefaultValue" %> -<% import com.acme.MySnippets._ %> - - -

    Hello ${someName}%

    - -
      -<%= for (person <- people) { %> -
    • ${person.name}
    • -<% } %> -
    - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.swift b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.swift deleted file mode 100644 index 8ef1976..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.swift +++ /dev/null @@ -1,65 +0,0 @@ -// -// test.swift -// from https://github.com/fullstackio/FlappySwift -// -// Created by Nate Murray on 6/2/14. -// Copyright (c) 2014 Fullstack.io. All rights reserved. -// - -import UIKit -import SpriteKit - -extension SKNode { - class func unarchiveFromFile(file : NSString) -> SKNode? { - - let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") - - var sceneData = NSData.dataWithContentsOfFile(path, options: .DataReadingMappedIfSafe, error: nil) - var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData) - - archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene") - let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as GameScene - archiver.finishDecoding() - return scene - } -} - -class GameViewController: UIViewController { - - override func viewDidLoad() { - super.viewDidLoad() - - if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene { - // Configure the view. - let skView = self.view as SKView - skView.showsFPS = true - skView.showsNodeCount = true - - /* Sprite Kit applies additional optimizations to improve rendering performance */ - skView.ignoresSiblingOrder = true - - /* Set the scale mode to scale to fit the window */ - scene.scaleMode = .AspectFill - - skView.presentScene(scene) - } - } - - override func shouldAutorotate() -> Bool { - return true - } - - override func supportedInterfaceOrientations() -> Int { - if UIDevice.currentDevice().userInterfaceIdiom == .Phone { - return Int(UIInterfaceOrientationMask.AllButUpsideDown.toRaw()) - } else { - return Int(UIInterfaceOrientationMask.All.toRaw()) - } - } - - override func didReceiveMemoryWarning() { - super.didReceiveMemoryWarning() - // Release any cached data, images, etc that aren't in use. - } - -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.tcsh b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.tcsh deleted file mode 100644 index e215ed0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.tcsh +++ /dev/null @@ -1,830 +0,0 @@ -# -# $Id: complete.tcsh,v 1.2 1998/05/11 10:40:54 luisgh Exp $ -# example file using the new completion code -# - -# Debian GNU/Linux -# file: /usr/share/doc/examples/tcsh/complete.tcsh -# -# This file may be read from user's .cshrc file by decompressing it into -# the home directory as ~/.complete and then adding the line -# "source ${HOME}/.complete" and maybe defining some of -# the shell variables described below. -# -# Debian enhancements by Vadim Vygonets : -# -# Added two Debian-specific completions: dpkg and dpkg-deb (who wrote -# them?). To turn it off, define no_debian_complete before loading -# this file. -# -# Added some new completions. To turn them off, define -# no_new_complete before loading this file. -# -# Changed completions of several commands. The ones are evaluated if -# the following shell variables are defined: -# -# traditional_cp_mv_complete -# for traditional completion of cp and mv commands -# traditional_zcat_complete -# for traditional completion of zcat command -# traditional_nm_complete -# for traditional completion of nm command -# traditilnal_tex_complete -# for traditional completion of tex command -# traditional_find_complete -# for traditional completion of find command -# traditional_configure_complete -# for traditional completion of ./configure command -# foolproof_rm_complete or traditional_rm_complete -# for traditional completion of rm command -# traditional_complete -# all of the above - -if ($?traditional_complete) then - set traditional_cp_mv_complete - set traditional_zcat_complete - set traditional_nm_complete - set traditilnal_tex_complete - set traditional_find_complete - set traditional_configure_complete - set foolproof_rm_complete -endif - -if ($?traditional_rm_complete) then - set foolproof_rm_complete -endif - -onintr - -if (! $?prompt) goto end - -if ($?tcsh) then - if ($tcsh != 1) then - set rev=$tcsh:r - set rel=$rev:e - set pat=$tcsh:e - set rev=$rev:r - endif - if ($rev > 5 && $rel > 1) then - set complete=1 - endif - unset rev rel pat -endif - -if ($?complete) then - set noglob - set hosts - foreach f ($HOME/.hosts /usr/local/etc/csh.hosts $HOME/.rhosts /etc/hosts.equiv) - if ( -r $f ) then - set hosts=($hosts `cut -d " " -f 1 $f | grep -v +`) - endif - end - if ( -r $HOME/.netrc ) then - set f=`awk '/machine/ { print $2 }' < $HOME/.netrc` >& /dev/null - set hosts=($hosts $f) - endif - unset f - if ( ! $?hosts ) then - set hosts=(hyperion.ee.cornell.edu phaeton.ee.cornell.edu \ - guillemin.ee.cornell.edu vangogh.cs.berkeley.edu \ - ftp.uu.net prep.ai.mit.edu export.lcs.mit.edu \ - labrea.stanford.edu sumex-aim.stanford.edu \ - tut.cis.ohio-state.edu) - endif - - complete ywho n/*/\$hosts/ # argument from list in $hosts - complete rsh p/1/\$hosts/ c/-/"(l n)"/ n/-l/u/ N/-l/c/ n/-/c/ p/2/c/ p/*/f/ - complete xrsh p/1/\$hosts/ c/-/"(l 8 e)"/ n/-l/u/ N/-l/c/ n/-/c/ p/2/c/ p/*/f/ - complete rlogin p/1/\$hosts/ c/-/"(l 8 e)"/ n/-l/u/ - complete telnet p/1/\$hosts/ p/2/x:''/ n/*/n/ - - complete cd p/1/d/ # Directories only - complete chdir p/1/d/ - complete pushd p/1/d/ - complete popd p/1/d/ - complete pu p/1/d/ - complete po p/1/d/ - complete complete p/1/X/ # Completions only - complete uncomplete n/*/X/ - complete exec p/1/c/ # Commands only - complete trace p/1/c/ - complete strace p/1/c/ - complete which n/*/c/ - complete where n/*/c/ - complete skill p/1/c/ - complete dde p/1/c/ - complete adb c/-I/d/ n/-/c/ N/-/"(core)"/ p/1/c/ p/2/"(core)"/ - complete sdb p/1/c/ - complete dbx c/-I/d/ n/-/c/ N/-/"(core)"/ p/1/c/ p/2/"(core)"/ - complete xdb p/1/c/ - complete gdb n/-d/d/ n/*/c/ - complete ups p/1/c/ - complete set 'c/*=/f/' 'p/1/s/=' 'n/=/f/' - complete unset n/*/s/ - complete alias p/1/a/ # only aliases are valid - complete unalias n/*/a/ - complete xdvi n/*/f:*.dvi/ # Only files that match *.dvi - complete dvips n/*/f:*.dvi/ -if ($?traditilnal_tex_complete) then - complete tex n/*/f:*.tex/ # Only files that match *.tex -else - complete tex n/*/f:*.{tex,texi}/ # Files that match *.tex and *.texi -endif - complete latex n/*/f:*.{tex,ltx}/ - complete su c/--/"(login fast preserve-environment command shell \ - help version)"/ c/-/"(f l m p c s -)"/ \ - n/{-c,--command}/c/ \ - n@{-s,--shell}@'`cat /etc/shells`'@ n/*/u/ - complete cc c/-[IL]/d/ \ - c@-l@'`\ls -1 /usr/lib/lib*.a | sed s%^.\*/lib%%\;s%\\.a\$%%`'@ \ - c/-/"(o l c g L I D U)"/ n/*/f:*.[coasi]/ - complete acc c/-[IL]/d/ \ - c@-l@'`\ls -1 /usr/lang/SC1.0/lib*.a | sed s%^.\*/lib%%\;s%\\.a\$%%`'@ \ - c/-/"(o l c g L I D U)"/ n/*/f:*.[coasi]/ - complete gcc c/-[IL]/d/ \ - c/-f/"(caller-saves cse-follow-jumps delayed-branch \ - elide-constructors expensive-optimizations \ - float-store force-addr force-mem inline \ - inline-functions keep-inline-functions \ - memoize-lookups no-default-inline \ - no-defer-pop no-function-cse omit-frame-pointer \ - rerun-cse-after-loop schedule-insns \ - schedule-insns2 strength-reduce \ - thread-jumps unroll-all-loops \ - unroll-loops syntax-only all-virtual \ - cond-mismatch dollars-in-identifiers \ - enum-int-equiv no-asm no-builtin \ - no-strict-prototype signed-bitfields \ - signed-char this-is-variable unsigned-bitfields \ - unsigned-char writable-strings call-saved-reg \ - call-used-reg fixed-reg no-common \ - no-gnu-binutils nonnull-objects \ - pcc-struct-return pic PIC shared-data \ - short-enums short-double volatile)"/ \ - c/-W/"(all aggregate-return cast-align cast-qual \ - comment conversion enum-clash error format \ - id-clash-len implicit missing-prototypes \ - no-parentheses pointer-arith return-type shadow \ - strict-prototypes switch uninitialized unused \ - write-strings)"/ \ - c/-m/"(68000 68020 68881 bitfield fpa nobitfield rtd \ - short c68000 c68020 soft-float g gnu unix fpu \ - no-epilogue)"/ \ - c/-d/"(D M N)"/ \ - c/-/"(f W vspec v vpath ansi traditional \ - traditional-cpp trigraphs pedantic x o l c g L \ - I D U O O2 C E H B b V M MD MM i dynamic \ - nodtdlib static nostdinc undef)"/ \ - c/-l/f:*.a/ \ - n/*/f:*.{c,C,cc,o,a,s,i}/ - complete g++ n/*/f:*.{C,cc,o,s,i}/ - complete CC n/*/f:*.{C,cc,o,s,i}/ -if ($?foolproof_rm_complete) then - complete rm c/--/"(directory force interactive verbose \ - recursive help version)"/ c/-/"(d f i v r R -)"/ \ - n/*/f:^*.{c,cc,C,h,in}/ # Protect precious files -else - complete rm c/--/"(directory force interactive verbose \ - recursive help version)"/ c/-/"(d f i v r R -)"/ -endif - complete vi n/*/f:^*.[oa]/ - complete bindkey N/-a/b/ N/-c/c/ n/-[ascr]/'x:'/ \ - n/-[svedlr]/n/ c/-[vedl]/n/ c/-/"(a s k c v e d l r)"/\ - n/-k/"(left right up down)"/ p/2-/b/ \ - p/1/'x:'/ - -if ($?traditional_find_complete) then - complete find n/-fstype/"(nfs 4.2)"/ n/-name/f/ \ - n/-type/"(c b d f p l s)"/ n/-user/u/ n/-group/g/ \ - n/-exec/c/ n/-ok/c/ n/-cpio/f/ n/-ncpio/f/ n/-newer/f/ \ - c/-/"(fstype name perm prune type user nouser \ - group nogroup size inum atime mtime ctime exec \ - ok print ls cpio ncpio newer xdev depth \ - daystart follow maxdepth mindepth noleaf version \ - anewer cnewer amin cmin mmin true false uid gid \ - ilname iname ipath iregex links lname empty path \ - regex used xtype fprint fprint0 fprintf \ - print0 printf not a and o or)"/ \ - n/*/d/ -else - complete find n/-fstype/"(ufs nfs tmp mfs minix ext2 msdos umsdos vfat proc iso9660 4.2 4.3 local)"/ \ - n/-name/f/ \ - n/-type/"(c b d f p l s)"/ n/-user/u/ n/-group/g/ \ - n/-exec/c/ n/-ok/c/ n/-cpio/f/ n/-ncpio/f/ n/-newer/f/ \ - c/-/"(fstype name perm prune type user nouser \ - group nogroup size inum atime mtime ctime exec \ - ok print ls cpio ncpio newer xdev depth \ - daystart follow maxdepth mindepth noleaf version \ - anewer cnewer amin cmin mmin true false uid gid \ - ilname iname ipath iregex links lname empty path \ - regex used xtype fprint fprint0 fprintf \ - print0 printf not a and o or)"/ \ - n/*/d/ -endif - complete -%* c/%/j/ # fill in the jobs builtin - complete {fg,bg,stop} c/%/j/ p/1/"(%)"// - - complete limit c/-/"(h)"/ n/*/l/ - complete unlimit c/-/"(h)"/ n/*/l/ - - complete -co* p/0/"(compress)"/ # make compress completion - # not ambiguous -if ($?traditional_zcat_complete) then - complete zcat n/*/f:*.Z/ -else - complete zcat c/--/"(force help license quiet version)"/ \ - c/-/"(f h L q V -)"/ n/*/f:*.{gz,Z,z,zip}/ -endif -if ($?traditional_nm_complete) then - complete nm n/*/f:^*.{h,C,c,cc}/ -else -complete nm 'c/--radix=/x:/' \ - 'c/--target=/x:/' \ - 'c/--format=/(bsd sysv posix)/n/' \ - 'c/--/(debugsyms extern-only demangle dynamic print-armap \ - print-file-name numeric-sort no-sort reverse-sort \ - size-sort undefined-only portability target= radix= \ - format= defined-only\ line-numbers no-demangle version \ - help)//' \ - 'n/*/f:^*.{h,c,cc,s,S}/' -endif - - complete finger c/*@/\$hosts/ n/*/u/@ - complete ping p/1/\$hosts/ - complete traceroute p/1/\$hosts/ - - complete {talk,ntalk,phone} p/1/'`users | tr " " "\012" | uniq`'/ \ - n/*/\`who\ \|\ grep\ \$:1\ \|\ awk\ \'\{\ print\ \$2\ \}\'\`/ - - complete ftp c/-/"(d i g n v)"/ n/-/\$hosts/ p/1/\$hosts/ n/*/n/ - - # this one is simple... - #complete rcp c/*:/f/ C@[./\$~]*@f@ n/*/\$hosts/: - # From Michael Schroeder - # This one will rsh to the file to fetch the list of files! - complete rcp 'c%*@*:%`set q=$:-0;set q="$q:s/@/ /";set q="$q:s/:/ /";set q=($q " ");rsh $q[2] -l $q[1] ls -dp $q[3]\*`%' 'c%*:%`set q=$:-0;set q="$q:s/:/ /";set q=($q " ");rsh $q[1] ls -dp $q[2]\*`%' 'c%*@%$hosts%:' 'C@[./$~]*@f@' 'n/*/$hosts/:' - - complete dd c/--/"(help version)"/ c/[io]f=/f/ \ - c/conv=*,/"(ascii ebcdic ibm block unblock \ - lcase ucase swab noerror sync)"/,\ - c/conv=/"(ascii ebcdic ibm block unblock \ - lcase ucase swab noerror sync)"/,\ - c/*=/x:''/ \ - n/*/"(if of conv ibs obs bs cbs files skip file seek count)"/= - - complete nslookup p/1/x:''/ p/2/\$hosts/ - - complete ar c/[dmpqrtx]/"(c l o u v a b i)"/ p/1/"(d m p q r t x)"// \ - p/2/f:*.a/ p/*/f:*.o/ - - complete {refile,sprev,snext,scan,pick,rmm,inc,folder,show} \ - c@+@F:$HOME/Mail/@ - - # these and interrupt handling from Jaap Vermeulen - complete {rexec,rxexec,rxterm,rmterm} \ - 'p/1/$hosts/' 'c/-/(l L E)/' 'n/-l/u/' 'n/-L/f/' \ - 'n/-E/e/' 'n/*/c/' - complete kill 'c/-/S/' 'c/%/j/' \ - 'n/*/`ps -u $LOGNAME | awk '"'"'{print $1}'"'"'`/' - - # these from Marc Horowitz - complete attach 'n/-mountpoint/d/' 'n/-m/d/' 'n/-type/(afs nfs rvd ufs)/' \ - 'n/-t/(afs nfs rvd ufs)/' 'n/-user/u/' 'n/-U/u/' \ - 'c/-/(verbose quiet force printpath lookup debug map \ - nomap remap zephyr nozephyr readonly write \ - mountpoint noexplicit explicit type mountoptions \ - nosetuid setuid override skipfsck lock user host)/' \ - 'n/-e/f/' 'n/*/()/' - complete hesinfo 'p/1/u/' \ - 'p/2/(passwd group uid grplist pcap pobox cluster \ - filsys sloc service)/' - - # these from E. Jay Berkenbilt -if ($?traditional_configure_complete) then - complete ./configure 'c/--*=/f/' 'c/--{cache-file,prefix,srcdir}/(=)//' \ - 'c/--/(cache-file verbose prefix srcdir)//' -else -complete ./configure \ - 'c@--{prefix,exec-prefix,bindir,sbindir,libexecdir,datadir,sysconfdir,sharedstatedir,localstatedir,infodir,mandir,srcdir,x-includes,x-libraries}=*@x:'@ \ - 'c/--cachefile=*/x:/' \ - 'c/--{enable,disable,with}-*/x://' \ - 'c/--*=/x:/' \ - 'c/--/(prefix= exec-prefix= bindir= sbindir= \ - libexecdir= datadir= sysconfdir= \ - sharedstatedir= localstatedir= infodir= \ - mandir= srcdir= x-includes= x-libraries= \ - enable- disable- with- )//' \ - 'c/--(help no-create quiet silent version \ - verbose)/' -endif - complete gs 'c/-sDEVICE=/(x11 cdjmono cdj550 epson eps9high epsonc \ - dfaxhigh dfaxlow laserjet ljet4 sparc pbm \ - pbmraw pgm pgmraw ppm ppmraw bit)/' \ - 'c/-sOutputFile=/f/' 'c/-s/(DEVICE OutputFile)/=' \ - 'c/-d/(NODISPLAY NOPLATFONTS NOPAUSE)/' 'n/*/f/' - complete perl 'n/-S/c/' - complete printenv 'n/*/e/' - complete sccs p/1/"(admin cdc check clean comb deledit delget \ - delta diffs edit enter fix get help info \ - print prs prt rmdel sccsdiff tell unedit \ - unget val what)"/ - complete setenv 'p/1/e/' 'c/*:/f/' - - # these and method of setting hosts from Kimmo Suominen - if ( -f $HOME/.mh_profile && -x "`which folders`" ) then - - if ( ! $?FOLDERS ) setenv FOLDERS "`folders -fast -recurse`" - if ( ! $?MHA ) setenv MHA "`ali | sed -e '/^ /d' -e 's/:.*//'`" - - set folders = ( $FOLDERS ) - set mha = ( $MHA ) - - complete ali \ - 'c/-/(alias nolist list nonormalize normalize nouser user help)/' \ - 'n,-alias,f,' - - complete anno \ - 'c/-/(component noinplace inplace nodate date text help)/' \ - 'c,+,$folders,' \ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete burst \ - 'c/-/(noinplace inplace noquiet quiet noverbose verbose help)/' \ - 'c,+,$folders,' \ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete comp \ - 'c/-/(draftfolder draftmessage nodraftfolder editor noedit file form nouse use whatnowproc nowhatnowproc help)/' \ - 'c,+,$folders,' \ - 'n,-whatnowproc,c,' \ - 'n,-file,f,'\ - 'n,-form,f,'\ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete dist \ - 'c/-/(noannotate annotate draftfolder draftmessage nodraftfolder editor noedit form noinplace inplace whatnowproc nowhatnowproc help)/' \ - 'c,+,$folders,' \ - 'n,-whatnowproc,c,' \ - 'n,-form,f,'\ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete folder \ - 'c/-/(all nofast fast noheader header nopack pack noverbose verbose norecurse recurse nototal total noprint print nolist list push pop help)/' \ - 'c,+,$folders,' \ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete folders \ - 'c/-/(all nofast fast noheader header nopack pack noverbose verbose norecurse recurse nototal total noprint print nolist list push pop help)/' \ - 'c,+,$folders,' \ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete forw \ - 'c/-/(noannotate annotate draftfolder draftmessage nodraftfolder editor noedit filter form noformat format noinplace inplace digest issue volume whatnowproc nowhatnowproc help)/' \ - 'c,+,$folders,' \ - 'n,-whatnowproc,c,' \ - 'n,-filter,f,'\ - 'n,-form,f,'\ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete inc \ - 'c/-/(audit file noaudit nochangecur changecur file form format nosilent silent notruncate truncate width help)/' \ - 'c,+,$folders,' \ - 'n,-audit,f,'\ - 'n,-form,f,' - - complete mark \ - 'c/-/(add delete list sequence nopublic public nozero zero help)/' \ - 'c,+,$folders,' \ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete mhmail \ - 'c/-/(body cc from subject help)/' \ - 'n,-cc,$mha,' \ - 'n,-from,$mha,' \ - 'n/*/$mha/' - - complete mhpath \ - 'c/-/(help)/' \ - 'c,+,$folders,' \ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete msgchk \ - 'c/-/(nodate date nonotify notify help)/' - - complete msh \ - 'c/-/(prompt noscan scan notopcur topcur help)/' - - complete next \ - 'c/-/(draft form moreproc nomoreproc length width showproc noshowproc header noheader help)/' \ - 'c,+,$folders,' \ - 'n,-moreproc,c,' \ - 'n,-showproc,c,' \ - 'n,-form,f,' - - complete packf \ - 'c/-/(file help)/' \ - 'c,+,$folders,' \ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete pick \ - 'c/-/(and or not lbrace rbrace cc date from search subject to othercomponent after before datefield sequence nopublic public nozero zero nolist list help)/' \ - 'c,+,$folders,' \ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete prev \ - 'c/-/(draft form moreproc nomoreproc length width showproc noshowproc header noheader help)/' \ - 'c,+,$folders,' \ - 'n,-moreproc,c,' \ - 'n,-showproc,c,' \ - 'n,-form,f,' - - complete prompter \ - 'c/-/(erase kill noprepend prepend norapid rapid nodoteof doteof help)/' - - complete refile \ - 'c/-/(draft nolink link nopreserve preserve src file help)/' \ - 'c,+,$folders,' \ - 'n,-file,f,'\ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete rmf \ - 'c/-/(nointeractive interactive help)/' \ - 'c,+,$folders,' - - complete rmm \ - 'c/-/(help)/' \ - 'c,+,$folders,' \ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete scan \ - 'c/-/(noclear clear form format noheader header width noreverse reverse file help)/' \ - 'c,+,$folders,' \ - 'n,-form,f,'\ - 'n,-file,f,'\ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete send \ - 'c/-/(alias draft draftfolder draftmessage nodraftfolder filter nofilter noformat format noforward forward nomsgid msgid nopush push noverbose verbose nowatch watch width help)/' \ - 'n,-alias,f,'\ - 'n,-filter,f,' - - complete show \ - 'c/-/(draft form moreproc nomoreproc length width showproc noshowproc header noheader help)/' \ - 'c,+,$folders,' \ - 'n,-moreproc,c,' \ - 'n,-showproc,c,' \ - 'n,-form,f,'\ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete sortm \ - 'c/-/(datefield textfield notextfield limit nolimit noverbose verbose help)/' \ - 'c,+,$folders,' \ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete vmh \ - 'c/-/(prompt vmhproc novmhproc help)/' \ - 'n,-vmhproc,c,' - - complete whatnow \ - 'c/-/(draftfolder draftmessage nodraftfolder editor noedit prompt help)/' - - complete whom \ - 'c/-/(alias nocheck check draft draftfolder draftmessage nodraftfolder help)/' \ - 'n,-alias,f,' - - complete plum \ - 'c/-/()/' \ - 'c,+,$folders,' \ - 'n,*,`(mark | sed "s/:.*//";echo next cur prev first last)|tr " " "\12" | sort -u`,' - - complete mail \ - 'c/-/()/' \ - 'n/*/$mha/' - - endif - - # these from Tom Warzeka - # you may need to set the following variables for your host - set _elispdir = /usr/lib/emacs/19.34/lisp # GNU Emacs lisp directory - set _maildir = /var/spool/mail # Post Office: /var/spool/mail or /usr/mail - set _ypdir = /var/yp # directory where NIS (YP) maps are kept - set _domain = "`dnsdomainname`" - - # this one works but is slow and doesn't descend into subdirectories - # complete cd C@[./\$~]*@d@ \ - # p@1@'`\ls -1F . $cdpath | grep /\$ | sort -u`'@ n@*@n@ - - if ( -r /etc/shells ) then - complete setenv p@1@e@ n@DISPLAY@\$hosts@: n@SHELL@'`cat /etc/shells`'@ - else - complete setenv p@1@e@ n@DISPLAY@\$hosts@: - endif - complete unsetenv n/*/e/ - - if (-r $HOME/.mailrc) then - complete mail c/-/"(e i f n s u v)"/ c/*@/\$hosts/ \ - c@+@F:$HOME/Mail@ C@[./\$~]@f@ n/-s/x:''/ \ - n@-u@T:$_maildir@ n/-f/f/ \ - n@*@'`sed -n s/alias//p $HOME/.mailrc | tr -s " " " " | cut -f 2`'@ - else - complete mail c/-/"(e i f n s u v)"/ c/*@/\$hosts/ \ - c@+@F:$HOME/Mail@ C@[./\$~]@f@ n/-s/x:''/ \ - n@-u@T:$_maildir@ n/-f/f/ n/*/u/ - endif - - complete man n@1@'`\ls -1 /usr/man/man1 | sed s%\\.1.\*\$%%`'@ \ - n@2@'`\ls -1 /usr/man/man2 | sed s%\\.2.\*\$%%`'@ \ - n@3@'`\ls -1 /usr/man/man3 | sed s%\\.3.\*\$%%`'@ \ - n@4@'`\ls -1 /usr/man/man4 | sed s%\\.4.\*\$%%`'@ \ - n@5@'`\ls -1 /usr/man/man5 | sed s%\\.5.\*\$%%`'@ \ - n@6@'`\ls -1 /usr/man/man6 | sed s%\\.6.\*\$%%`'@ \ - n@7@'`\ls -1 /usr/man/man7 | sed s%\\.7.\*\$%%`'@ \ - n@8@'`\ls -1 /usr/man/man8 | sed s%\\.8.\*\$%%`'@ \ - n@9@'`[ -r /usr/man/man9 ] && \ls -1 /usr/man/man9 | sed s%\\.9.\*\$%%`'@ \ - n@0@'`[ -r /usr/man/man0 ] && \ls -1 /usr/man/man0 | sed s%\\.0.\*\$%%`'@ \ - n@new@'`[ -r /usr/man/mann ] && \ls -1 /usr/man/mann | sed s%\\.n.\*\$%%`'@ \ - n@old@'`[ -r /usr/man/mano ] && \ls -1 /usr/man/mano | sed s%\\.o.\*\$%%`'@ \ -n@local@'`[ -r /usr/man/manl ] && \ls -1 /usr/man/manl | sed s%\\.l.\*\$%%`'@ \ -n@public@'`[ -r /usr/man/manp ]&& \ls -1 /usr/man/manp | sed s%\\.p.\*\$%%`'@ \ - c/-/"(- f k P s t)"/ n/-f/c/ n/-k/x:''/ n/-P/d/ \ - N@-P@'`\ls -1 $:-1/man? | sed s%\\..\*\$%%`'@ n/*/c/ - - complete ps c/-t/x:''/ c/-/"(a c C e g k l S t u v w x)"/ \ - n/-k/x:''/ N/-k/x:''/ n/*/x:''/ - complete compress c/-/"(c f v b)"/ n/-b/x:''/ n/*/f:^*.Z/ - complete uncompress c/-/"(c f v)"/ n/*/f:*.Z/ - - complete xhost c/[+-]/\$hosts/ n/*/\$hosts/ - - # these conform to the latest GNU versions available at press time ... - - complete emacs c/-/"(batch d f funcall i insert kill l load \ - no-init-file nw q t u user)"/ c/+/x:''/ \ - n/-d/x:''/ n/-f/x:''/ n/-i/f/ \ - n@-l@F:$_elispdir@ n/-t/x:''/ \ - n/-u/u/ n/*/f:^*[\#~]/ - - complete gzcat c/--/"(force help license quiet version)"/ \ - c/-/"(f h L q V -)"/ n/*/f:*.{gz,Z,z,zip}/ - complete gzip c/--/"(stdout to-stdout decompress uncompress \ - force help list license no-name quiet recurse \ - suffix test verbose version fast best)"/ \ - c/-/"(c d f h l L n q r S t v V 1 2 3 4 5 6 7 8 9 -)"/\ - n/{-S,--suffix}/x:''/ \ - n/{-d,--{de,un}compress}/f:*.{gz,Z,z,zip,taz,tgz}/ \ - N/{-d,--{de,un}compress}/f:*.{gz,Z,z,zip,taz,tgz}/ \ - n/*/f:^*.{gz,Z,z,zip,taz,tgz}/ - complete {gunzip,ungzip} c/--/"(stdout to-stdout force help list license \ - no-name quiet recurse suffix test verbose version)"/ \ - c/-/"(c f h l L n q r S t v V -)"/ \ - n/{-S,--suffix}/x:''/ \ - n/*/f:*.{gz,Z,z,zip,taz,tgz}/ - complete zgrep c/-*A/x:'<#_lines_after>'/ c/-*B/x:'<#_lines_before>'/\ - c/-/"(A b B c C e f h i l n s v V w x)"/ \ - p/1/x:''/ \ - n/-*e/x:''/ n/-*f/f/ n/*/f/ - complete zegrep c/-*A/x:'<#_lines_after>'/ c/-*B/x:'<#_lines_before>'/\ - c/-/"(A b B c C e f h i l n s v V w x)"/ \ - p/1/x:''/ \ - n/-*e/x:''/ n/-*f/f/ n/*/f/ - complete zfgrep c/-*A/x:'<#_lines_after>'/ c/-*B/x:'<#_lines_before>'/\ - c/-/"(A b B c C e f h i l n s v V w x)"/ \ - p/1/x:''/ \ - n/-*e/x:''/ n/-*f/f/ n/*/f/ - - complete znew c/-/"(f t v 9 P K)"/ n/*/f:*.Z/ - complete zmore n/*/f:*.{gz,Z,z,zip}/ - complete zfile n/*/f:*.{gz,Z,z,zip,taz,tgz}/ - complete ztouch n/*/f:*.{gz,Z,z,zip,taz,tgz}/ - complete zforce n/*/f:^*.{gz,tgz}/ - - complete grep c/-*A/x:'<#_lines_after>'/ c/-*B/x:'<#_lines_before>'/\ - c/-/"(A b B c C e f h i l n s v V w x)"/ \ - p/1/x:''/ \ - n/-*e/x:''/ n/-*f/f/ n/*/f/ - complete egrep c/-*A/x:'<#_lines_after>'/ c/-*B/x:'<#_lines_before>'/\ - c/-/"(A b B c C e f h i l n s v V w x)"/ \ - p/1/x:''/ \ - n/-*e/x:''/ n/-*f/f/ n/*/f/ - complete fgrep c/-*A/x:'<#_lines_after>'/ c/-*B/x:'<#_lines_before>'/\ - c/-/"(A b B c C e f h i l n s v V w x)"/ \ - p/1/x:''/ \ - n/-*e/x:''/ n/-*f/f/ n/*/f/ - - complete users c/--/"(help version)"/ p/1/x:''/ - complete who c/--/"(heading mesg idle count help message version \ - writable)"/ c/-/"(H T w i u m q s -)"/ \ - p/1/x:''/ n/am/"(i)"/ n/are/"(you)"/ - - complete chown c/--/"(changes silent quiet verbose recursive help \ - version)"/ c/-/"(c f v R -)"/ C@[./\$~]@f@ c/*[.:]/g/ \ - n/-/u/. p/1/u/. n/*/f/ - complete chgrp c/--/"(changes silent quiet verbose recursive help \ - version)"/ c/-/"(c f v R -)"/ n/-/g/ p/1/g/ n/*/f/ - - complete cat c/--/"(number-nonblank number squeeze-blank show-all \ - show-nonprinting show-ends show-tabs help version)"/ \ - c/-/"(b e n s t u v A E T -)"/ n/*/f/ -if ($?traditional_cp_mv_complete) then - complete mv c/--/"(backup force interactive update verbose suffix \ - version-control help version)"/ \ - c/-/"(b f i u v S V -)"/ \ - n/{-S,--suffix}/x:''/ \ - n/{-V,--version-control}/"(t numbered nil existing \ - never simple)"/ n/-/f/ N/-/d/ p/1/f/ p/2/d/ n/*/f/ - complete cp c/--/"(archive backup no-dereference force interactive \ - link preserve symbolic-link update verbose parents \ - one-file-system recursive suffix version-control help \ - version)"/ c/-/"(a b d f i l p r s u v x P R S V -)"/ \ - n/-*r/d/ n/{-S,--suffix}/x:''/ \ - n/{-V,--version-control}/"(t numbered nil existing \ - never simple)"/ n/-/f/ N/-/d/ p/1/f/ p/2/d/ n/*/f/ -else - complete mv c/--/"(backup force interactive update verbose suffix \ - version-control help version)"/ \ - c/-/"(b f i u v S V -)"/ \ - n/{-S,--suffix}/x:''/ \ - n/{-V,--version-control}/"(t numbered nil existing \ - never simple)"/ n/-/f/ N/-/d/ n/*/f/ - complete cp c/--/"(archive backup no-dereference force interactive \ - link preserve symbolic-link update verbose parents \ - one-file-system recursive suffix version-control help \ - version)"/ c/-/"(a b d f i l p r s u v x P R S V -)"/ \ - n/-*r/d/ n/{-S,--suffix}/x:''/ \ - n/{-V,--version-control}/"(t numbered nil existing \ - never simple)"/ n/-/f/ N/-/d/ n/*/f/ -endif - complete ln c/--/"(backup directory force interactive symbolic \ - verbose suffix version-control help version)"/ \ - c/-/"(b d F f i s v S V -)"/ \ - n/{-S,--suffix}/x:''/ \ - n/{-V,--version-control}/"(t numbered nil existing \ - never simple)"/ n/-/f/ N/-/x:''/ \ - p/1/f/ p/2/x:''/ - complete touch c/--/"(date file help time version)"/ \ - c/-/"(a c d f m r t -)"/ \ - n/{-d,--date}/x:''/ \ - c/--time/"(access atime mtime modify use)"/ \ - n/{-r,--file}/f/ n/-t/x:''/ n/*/f/ - complete mkdir c/--/"(parents help version mode)"/ c/-/"(p m -)"/ \ - n/{-m,--mode}/x:''/ n/*/d/ - complete rmdir c/--/"(parents help version)"/ c/-/"(p -)"/ n/*/d/ - - complete tar c/-[Acru]*/"(b B C f F g G h i l L M N o P \ - R S T v V w W X z Z)"/ \ - c/-[dtx]*/"( B C f F g G i k K m M O p P \ - R s S T v w x X z Z)"/ \ - p/1/"(A c d r t u x -A -c -d -r -t -u -x \ - --catenate --concatenate --create --diff --compare \ - --delete --append --list --update --extract --get)"/ \ - c/--/"(catenate concatenate create diff compare \ - delete append list update extract get atime-preserve \ - block-size read-full-blocks directory checkpoint file \ - force-local info-script new-volume-script incremental \ - listed-incremental dereference ignore-zeros \ - ignore-failed-read keep-old-files starting-file \ - one-file-system tape-length modification-time \ - multi-volume after-date newer old-archive portability \ - to-stdout same-permissions preserve-permissions \ - absolute-paths preserve record-number remove-files \ - same-order preserve-order same-owner sparse \ - files-from null totals verbose label version \ - interactive confirmation verify exclude exclude-from \ - compress uncompress gzip ungzip use-compress-program \ - block-compress)"/ \ - c/-/"(b B C f F g G h i k K l L m M N o O p P R s S \ - T v V w W X z Z 0 1 2 3 4 5 6 7 -)"/ \ - n/-c*f/x:''/ \ - n/{-[Adrtux]*f,--file}/f:*.tar/ \ - N/{-x*f,--file}/'`tar -tf $:-1`'/ \ - n/--use-compress-program/c/ \ - n/{-b,--block-size}/x:''/ \ - n/{-V,--label}/x:''/ \ - n/{-N,--{after-date,newer}}/x:''/ \ - n/{-L,--tape-length}/x:''/ \ - n/{-C,--directory}/d/ \ - N/{-C,--directory}/'`\ls $:-1`'/ \ - n/-[0-7]/"(l m h)"/ - - # BSD 4.3 filesystems - complete mount c/-/"(a h v t r)"/ n/-h/\$hosts/ n/-t/"(4.2 nfs)"/ \ - n@*@'`cut -d " " -f 2 /etc/fstab`'@ - complete umount c/-/"(a h v t)"/ n/-h/\$hosts/ n/-t/"(4.2 nfs)"/ \ - n/*/'`mount | cut -d " " -f 3`'/ - # BSD 4.2 filesystems - #complete mount c/-/"(a h v t r)"/ n/-h/\$hosts/ n/-t/"(ufs nfs)"/ \ - # n@*@'`cut -d ":" -f 2 /etc/fstab`'@ - #complete umount c/-/"(a h v t)"/ n/-h/\$hosts/ n/-t/"(ufs nfs)"/ \ - # n/*/'`mount | cut -d " " -f 3`'/ - - # these deal with NIS (formerly YP); if it's not running you don't need 'em - complete domainname p@1@D:$_ypdir@" " n@*@n@ - complete ypcat c@-@"(d k t x)"@ n@-x@n@ n@-d@D:$_ypdir@" " \ - N@-d@\`\\ls\ -1\ $_ypdir/\$:-1\ \|\ sed\ -n\ s%\\\\.pag\\\$%%p\`@ \ - n@*@\`\\ls\ -1\ $_ypdir/$_domain\ \|\ sed\ -n\ s%\\\\.pag\\\$%%p\`@ - complete ypmatch c@-@"(d k t x)"@ n@-x@n@ n@-d@D:$_ypdir@" " \ - N@-d@x:''@ n@-@x:''@ p@1@x:''@ \ - n@*@\`\\ls\ -1\ $_ypdir/$_domain\ \|\ sed\ -n\ s%\\\\.pag\\\$%%p\`@ - complete ypwhich c@-@"(d m t x V1 V2)"@ n@-x@n@ n@-d@D:$_ypdir@" " \ - n@-m@\`\\ls\ -1\ $_ypdir/$_domain\ \|\ sed\ -n\ s%\\\\.pag\\\$%%p\`@ \ - N@-m@n@ n@*@\$hosts@ - - # there's no need to clutter the user's shell with these - unset _elispdir _maildir _ypdir _domain - - complete make \ - 'n/-f/f/' \ - 'c/*=/f/' \ - 'n@*@`cat -s GNUmakefile Makefile makefile |& sed -n -e "/No such file/d" -e "/^[^ #].*:/s/:.*//p"`@' - - if ( -f /etc/printcap ) then - set printers=(`sed -n -e "/^[^ #].*:/s/:.*//p" /etc/printcap`) - - complete lpr 'c/-P/$printers/' - complete lpq 'c/-P/$printers/' - complete lprm 'c/-P/$printers/' - complete lpquota 'p/1/(-Qprlogger)/' 'c/-P/$printers/' - complete dvips 'c/-P/$printers/' 'n/-o/f:*.{ps,PS}/' 'n/*/f:*.dvi/' - endif - -# New -if (! $?no_new_complete) then - uncomplete vi - complete {vi,vim,gvim,nvi,elvis} n/*/f:^*.{o,a,so,sa,aux,dvi,log,fig,bbl,blg,bst,idx,ilg,ind,toc}/ - complete {ispell,spell,spellword} 'n@-d@`ls /usr/lib/ispell/*.aff | sed -e "s/\.aff//" `@' 'n/*/f:^*.{o,a,so,sa,aux,dvi,log,fig,bbl,blg,bst,idx,ilg,ind,toc}/' - complete mutt 'n/-[ai]/f/' 'n/-c/u/' c@=@F:$HOME/Mail/@ \ - 'n/-s/x:\/' 'n/[^-]/u/' - complete elm 'n/-[Ai]/f/' 'c@=@F:$HOME/Mail/@' 'n/-s/x:\/' - complete ncftp 'n@*@`sed -e '1,2d' $HOME/.ncftp/bookmarks | cut -f 1,2 -d "," | tr "," "\012" | sort | uniq ` '@ - complete bibtex 'n@*@`ls *.aux | sed -e "s/\.aux//"`'@ - complete dvi2tty n/*/f:*.dvi/ # Only files that match *.dvi - complete {xpdf,acroread} 'n/*/f:*.pdf/' - complete {gv,ghostview} 'n/*/f:*.{ps,eps,epsi}/' - complete enscript \ - 'c/--/(columns= pages= header= no-header truncate-lines \ - line-numbers setpagedevice= escapes font= \ - header-font= fancy-header no-job-header \ - highlight-bars indent= filter= borders page-prefeed \ - no-page-prefeed lineprinter lines-per-page= mail \ - media= copies= newline= output= missing-characters \ - printer= quiet silent landscape portrait \ - baselineskip= statusdict= title= tabsize= underlay= \ - verbose version encoding pass-through download-font= \ - filter-stdin= help highlight-bar-gray= list-media \ - list-options non-printable-format= page-label-format= \ - printer-options= ul-angle= ul-font= ul-gray= \ - ul-position= ul-style= \ - )/' -endif # ! $?no_new_complete - -# Debian specific -if (! $?no_debian_complete) then -complete dpkg 'c/--{admindir,instdir,root}=/d/' \ - 'c/--debug=/n/' \ - 'c/--{admindir,debug,instdir,root}/(=)//' \ - 'c/--/(admindir= debug= instdir= root= \ - assert-support-predepends assert-working-epoch \ - audit auto-deconfigure clear-avail \ - compare-versions configure contents control \ - extract force-bad-path field \ - force-configure-any force-conflicts \ - force-depends force-depends-version force-help \ - force-hold force-non-root \ - force-overwrite-diverted \ - force-remove-essential force-remove-reinstreq \ - forget-old-unavail fsys-tarfile get-selections \ - help ignore-depends info install largemem \ - license list listfiles merge-avail no-act \ - pending predep-package print-architecture \ - print-gnu-build-architecture \ - print-installation-architecture print-avail \ - purge record-avail recursive refuse-downgrade \ - remove search set-selections selected-only \ - skip-same-version smallmem status unpack \ - update-avail version vextract \ - )//' \ - 'n/*/f:*.deb'/ -complete dpkg-deb 'c/--{build}=/d/' \ - 'c/--/"( build contents info field control extract \ - vextract fsys-tarfile help version \ - license )"' \ - 'n/*/f:*.deb/' -endif # ! $?no_debian_complete - - unset noglob - unset complete - unset traditional_complete - unset traditional_cp_mv_complete - unset traditional_zcat_complete - unset traditional_nm_complete - unset traditilnal_tex_complete - unset traditional_find_complete - unset traditional_configure_complete - unset traditional_rm_complete - unset foolproof_rm_complete - unset no_new_complete - unset no_debian_complete -endif - -end: - onintr - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.vb b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.vb deleted file mode 100644 index e7252e9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.vb +++ /dev/null @@ -1,407 +0,0 @@ -' Copyright (c) 2008 Silken Web - Free BSD License -' All rights reserved. -' -' Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: -' * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer -' * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. -' * Neither the name of Silken Web nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. -' -' THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -' THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS -' BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -' GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -' LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -' DAMAGE. - -Imports System.Net.Mail -Imports SilkenWeb.Entities -Imports System.Text.RegularExpressions -Imports System.Reflection -Imports SilkenWeb.Validation -Imports System.Globalization -Imports SilkenWeb.Reflection - -Namespace SilkenWeb - - ''' - ''' Represents an Email and what you can do with it. - ''' - ''' - ''' Keith Jackson - ''' 11/04/2008 - ''' - ''' This class is intended to be inherrited for providing all manner of system generated emails, each represented by it's own class. - ''' - Public MustInherit Class EmailBase : Implements IValidatable, IDisposable - -#Region " Constants " - - Public Const LenientRegexPattern As String = "\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" - Public Const StrictRegexPattern As String = "^(([^<>()[\]\\.,;:\s@\""]+(\.[^<>()[\]\\.,;:\s@\""]+)*)|(\"".+\""))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$" - Public Const InvalidEmailAddressError As String = "The Email address provided was invalid" - Public Const InvalidEmailAddressErrorWithAddress As String = "The Email address, {0}, provided was invalid" - Public Const NullEmailAddressError As String = "The Email address was not provided" - -#End Region - -#Region " Fields " - - Private disposedValue As Boolean - - Private _message As MailMessage = New MailMessage() - Private _mailClient As SmtpClient - - Private _useStrictValidation As Boolean - -#End Region - -#Region " Construction " - - ''' - ''' Instantiates a new Email of the derived type. - ''' - ''' The email address of the sender of the message. - ''' The email addresses of the recipients of the message. - ''' The subject of the message. - ''' The body of the message. - Protected Sub New(ByVal sender As String, ByVal subject As String, ByVal body As String, ByVal ParamArray recipients As String()) - _message.From = New MailAddress(sender) - For i As Integer = 0 To recipients.Length - 1 - _message.To.Add(recipients(i)) - Next - _message.Subject = subject - _message.Body = body - End Sub - -#End Region - -#Region " Properties " - - ''' - ''' Gets the Attachments for the message. - ''' - Protected Overridable ReadOnly Property Attachments() As AttachmentCollection - Get - Return _message.Attachments - End Get - End Property - - ''' - ''' The email addresses of the BCC recipients of the message. - ''' - Public Property BccRecipients() As String() - Get - Return _message.Bcc.ToAddressStringArray() - End Get - Set(ByVal value As String()) - _message.Bcc.Clear() - _message.Bcc.Add(value.ToDelimitedString()) - End Set - End Property - - ''' - ''' The body of the message. - ''' - Protected Overridable Property Body() As String - Get - Return _message.Body - End Get - Set(ByVal value As String) - _message.Body = value - End Set - End Property - - ''' - ''' The email addresses of the CC recipients of the message. - ''' - Public Property CCRecipients() As String() - Get - Return _message.CC.ToAddressStringArray() - End Get - Set(ByVal value As String()) - _message.CC.Clear() - _message.CC.Add(value.ToDelimitedString()) - End Set - End Property - - ''' - ''' Gets or Sets a flag to indicate if the body of the message is HTML. - ''' - Public Property IsBodyHtml() As Boolean - Get - Return _message.IsBodyHtml - End Get - Set(ByVal value As Boolean) - _message.IsBodyHtml = value - End Set - End Property - - ''' - ''' Gets the Mail message wrapped by the EmailBase class. - ''' - Protected ReadOnly Property Message() As MailMessage - Get - Return _message - End Get - End Property - - ''' - ''' Gets or Sets the Priority of the message. - ''' - Public Property Priority() As MailPriority - Get - Return _message.Priority - End Get - Set(ByVal value As MailPriority) - _message.Priority = value - End Set - End Property - - ''' - ''' The email addresses of the recipients of the message. - ''' - Public Property Recipients() As String() - Get - Return _message.To.ToAddressStringArray() - End Get - Set(ByVal value As String()) - _message.To.Clear() - _message.To.Add(value.ToDelimitedString()) - End Set - End Property - - ''' - ''' The reply email address of the sender of the message. - ''' - Public Property ReplyTo() As String - Get - If _message.ReplyTo Is Nothing Then - Return String.Empty - Else - Return _message.ReplyTo.Address - End If - End Get - Set(ByVal value As String) - If _message.ReplyTo Is Nothing Then - _message.ReplyTo = New MailAddress(value) - Else - _message.ReplyTo = New MailAddress(value, _message.ReplyTo.DisplayName) - End If - End Set - End Property - - ''' - ''' The reply display name of the sender of the message. - ''' - Public Property ReplyToDisplayName() As String - Get - If _message.ReplyTo Is Nothing Then - Return String.Empty - Else - Return _message.ReplyTo.DisplayName - End If - End Get - Set(ByVal value As String) - If _message.ReplyTo Is Nothing Then - _message.ReplyTo = New MailAddress(_message.From.Address, value) - Else - _message.ReplyTo = New MailAddress(_message.ReplyTo.Address, value) - End If - End Set - End Property - - ''' - ''' The email address of the sender of the message. - ''' - Public Overridable Property Sender() As String - Get - Return _message.From.Address - End Get - Protected Set(ByVal value As String) - _message.From = New MailAddress(value, _message.From.DisplayName) - End Set - End Property - - ''' - ''' The display name of the sender of the message. - ''' - Public Overridable Property SenderDisplayName() As String - Get - Return _message.From.DisplayName - End Get - Protected Set(ByVal value As String) - _message.From = New MailAddress(_message.From.Address, value) - End Set - End Property - - ''' - ''' The subject of the message. - ''' - Public Overridable Property Subject() As String - Get - Return _message.Subject - End Get - Protected Set(ByVal value As String) - _message.Subject = value - End Set - End Property - -#End Region - -#Region " Methods " - -#Region " Send Methods " - - ''' - ''' Sends this email - ''' - ''' The SMTP server to use to send the email. - Public Sub Send(ByVal mailServer As String) - _mailClient = New SmtpClient(mailServer) - _mailClient.Send(_message) - End Sub - - ''' - ''' Sends this email asynchronously. - ''' - ''' The SMTP server to use to send the email. - ''' A user defined token passed to the recieving method on completion of the asynchronous task. - Public Sub SendAsync(ByVal mailServer As String, ByVal userToken As Object) - _mailClient = New SmtpClient(mailServer) - _mailClient.SendAsync(_message, userToken) - End Sub - - ''' - ''' Cancels an attempt to send this email asynchronously. - ''' - Public Sub SendAsyncCancel() - _mailClient.SendAsyncCancel() - End Sub - -#End Region - -#End Region - -#Region " IValidatable Implementation " - - ''' - ''' gets and Sets a flag to indicate whether to use strict validation. - ''' - Public Property UseStrictValidation() As Boolean - Get - Return _useStrictValidation - End Get - Set(ByVal value As Boolean) - _useStrictValidation = value - End Set - End Property - - ''' - ''' Validates this email. - ''' - ''' A ValidationResponse, containing a flag to indicate if validation was passed and a collection of Property Names and validation errors. - Public Function Validate() As ValidationResponse Implements IValidatable.Validate - - Dim retVal As New ValidationResponse() - Dim mailRegEx As String = If(_useStrictValidation, StrictRegexPattern, LenientRegexPattern) - - ValidateAddress("Sender", retVal, mailRegEx, True) - ValidateAddresses("Recipients", retVal, mailRegEx, True) - ValidateAddresses("CcRecipients", retVal, mailRegEx) - ValidateAddresses("BccRecipients", retVal, mailRegEx) - ValidateAddress("ReplyTo", retVal, mailRegEx) - - Return retVal - - End Function - - ''' - ''' Validates a single Email Address property. - ''' - ''' The name of the property to validate. - ''' The validation response object. - ''' The regular expression pattern to use for validation. - Private Overloads Sub ValidateAddress(ByVal propertyName As String, ByRef retVal As ValidationResponse, ByVal mailRegEx As String) - ValidateAddress(propertyName, retVal, mailRegEx, False) - End Sub - - ''' - ''' Validates a single Email Address property. - ''' - ''' The name of the property to validate. - ''' The validation response object. - ''' The regular expression pattern to use for validation. - ''' Indicates if the address is required; False if not specified. - Private Overloads Sub ValidateAddress(ByVal propertyName As String, ByRef retVal As ValidationResponse, ByVal mailRegEx As String, ByVal required As Boolean) - - Dim emailAddress As String = ReflectionHelper.Properties.GetProperty(Of String)(Me, propertyName) - - If emailAddress Is Nothing OrElse emailAddress.Length = 0 Then - If required Then retVal.Add(New KeyValuePair(Of String, String)(propertyName, NullEmailAddressError)) - Else - If (Not Regex.IsMatch(emailAddress, mailRegEx)) Then - retVal.Add(New KeyValuePair(Of String, String)(propertyName, InvalidEmailAddressError)) - End If - End If - - End Sub - - ''' - ''' Validates a string array of Email Address property. - ''' - ''' The name of the property to validate. - ''' The validation response object. - ''' The regular expression pattern to use for validation. - Private Overloads Sub ValidateAddresses(ByVal propertyName As String, ByRef retVal As ValidationResponse, ByVal mailRegEx As String) - ValidateAddresses(propertyName, retVal, mailRegEx, False) - End Sub - - ''' - ''' Validates a string array of Email Address property. - ''' - ''' The name of the property to validate. - ''' The validation response object. - ''' The regular expression pattern to use for validation. - ''' Indicates if the address is required; False if not specified. - Private Overloads Sub ValidateAddresses(ByVal propertyName As String, ByRef retVal As ValidationResponse, ByVal mailRegEx As String, ByVal required As Boolean) - - Dim emailAddresses() As String = ReflectionHelper.Properties.GetProperty(Of String())(Me, propertyName) - - If emailAddresses Is Nothing OrElse emailAddresses.Length = 0 Then - If required Then retVal.Add(New KeyValuePair(Of String, String)(propertyName, String.Format(CultureInfo.CurrentCulture, NullEmailAddressError))) - Else - For i As Integer = 0 To emailAddresses.Length - 1 - If (Not Regex.IsMatch(emailAddresses(i), mailRegEx)) Then - retVal.Add(New KeyValuePair(Of String, String)(propertyName, String.Format(CultureInfo.CurrentCulture, InvalidEmailAddressErrorWithAddress, emailAddresses(i)))) - End If - Next - End If - - End Sub - -#End Region - -#Region " IDisposable Implementation " - - Protected Overridable Sub Dispose(ByVal disposing As Boolean) - If Not Me.disposedValue Then - If disposing Then - _message.Dispose() - End If - _mailClient = Nothing - _message = Nothing - End If - Me.disposedValue = True - End Sub - - Public Sub Dispose() Implements IDisposable.Dispose - ' Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above. - Dispose(True) - GC.SuppressFinalize(Me) - End Sub - -#End Region - - End Class - -End Namespace diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.vhdl b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.vhdl deleted file mode 100644 index 426f237..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.vhdl +++ /dev/null @@ -1,161 +0,0 @@ -library ieee; -use ieee.std_logic_unsigned.all; -use ieee.std_logic_1164.all; -use ieee.numeric_std.all; - - -entity top_testbench is --test - generic ( -- test - n : integer := 8 -- test - ); -- test -end top_testbench; -- test - - -architecture top_testbench_arch of top_testbench is - - component top is - generic ( - n : integer - ) ; - port ( - clk : in std_logic; - rst : in std_logic; - d1 : in std_logic_vector (n-1 downto 0); - d2 : in std_logic_vector (n-1 downto 0); - operation : in std_logic; - result : out std_logic_vector (2*n-1 downto 0) - ); - end component; - - signal clk : std_logic; - signal rst : std_logic; - signal operation : std_logic; - signal d1 : std_logic_vector (n-1 downto 0); - signal d2 : std_logic_vector (n-1 downto 0); - signal result : std_logic_vector (2*n-1 downto 0); - - type test_type is ( a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); - attribute enum_encoding of my_state : type is "001 010 011 100 111"; -begin - - TESTUNIT : top generic map (n => n) - port map (clk => clk, - rst => rst, - d1 => d1, - d2 => d2, - operation => operation, - result => result); - - clock_process : process - begin - clk <= '0'; - wait for 5 ns; - clk <= '1'; - wait for 5 ns; - end process; - - data_process : process - begin - - -- test case #1 - operation <= '0'; - - rst <= '1'; - wait for 5 ns; - rst <= '0'; - wait for 5 ns; - - d1 <= std_logic_vector(to_unsigned(60, d1'length)); - d2 <= std_logic_vector(to_unsigned(12, d2'length)); - wait for 360 ns; - - assert (result = std_logic_vector(to_unsigned(720, result'length))) - report "Test case #1 failed" severity error; - - -- test case #2 - operation <= '0'; - - rst <= '1'; - wait for 5 ns; - rst <= '0'; - wait for 5 ns; - - d1 <= std_logic_vector(to_unsigned(55, d1'length)); - d2 <= std_logic_vector(to_unsigned(1, d2'length)); - wait for 360 ns; - - assert (result = std_logic_vector(to_unsigned(55, result'length))) - report "Test case #2 failed" severity error; - - -- etc - - end process; - -end top_testbench_arch; - - -configuration testbench_for_top of top_testbench is - for top_testbench_arch - for TESTUNIT : top - use entity work.top(top_arch); - end for; - end for; -end testbench_for_top; - - -function compare(A: std_logic, B: std_Logic) return std_logic is - constant pi : real := 3.14159; - constant half_pi : real := pi / 2.0; - constant cycle_time : time := 2 ns; - constant N, N5 : integer := 5; -begin - if (A = '0' and B = '1') then - return B; - else - return A; - end if ; -end compare; - - -procedure print(P : std_logic_vector(7 downto 0); - U : std_logic_vector(3 downto 0)) is - variable my_line : line; - alias swrite is write [line, string, side, width] ; -begin - swrite(my_line, "sqrt( "); - write(my_line, P); - swrite(my_line, " )= "); - write(my_line, U); - writeline(output, my_line); -end print; - - -entity add32csa is -- one stage of carry save adder for multiplier - port( - b : in std_logic; -- a multiplier bit - a : in std_logic_vector(31 downto 0); -- multiplicand - sum_in : in std_logic_vector(31 downto 0); -- sums from previous stage - cin : in std_logic_vector(31 downto 0); -- carrys from previous stage - sum_out : out std_logic_vector(31 downto 0); -- sums to next stage - cout : out std_logic_vector(31 downto 0)); -- carrys to next stage -end add32csa; - - -ARCHITECTURE circuits of add32csa IS - SIGNAL zero : STD_LOGIC_VECTOR(31 downto 0) := X"00000000"; - SIGNAL aa : std_logic_vector(31 downto 0) := X"00000000"; - - COMPONENT fadd -- duplicates entity port - PoRT(a : in std_logic; - b : in std_logic; - cin : in std_logic; - s : out std_logic; - cout : out std_logic); - end comPonent fadd; - -begin -- circuits of add32csa - aa <= a when b='1' else zero after 1 ns; - stage: for I in 0 to 31 generate - sta: fadd port map(aa(I), sum_in(I), cin(I) , sum_out(I), cout(I)); - end generate stage; -end architecture circuits; -- of add32csa diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.xqy b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.xqy deleted file mode 100644 index c626ea9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.xqy +++ /dev/null @@ -1,138 +0,0 @@ -(: made up functions, etc just to test xquery parsing (: even embedded comments -on multiple :) -lines -:) -xquery version "1.0"; - -module namespace xqueryexample "http://example.com/namespace"; -import module namespace importedns = "http://example.com/ns/imported" at "no/such/file.xqy"; - -declare namespace sess = "com.example.session"; - -declare variable $amazing := "awesome"; -declare variable $SESSIONS as element(sess:session)* := c:sessions(); - -declare option sess:clear "false"; - -define function whatsit($param as xs:string) as xs:string { - let $var1 := 1 - let $var2 := 2 - return (1 + 2 div ($var1 + $var2)) - - let $let := "test" - return (: some whitespace :) element element { - attribute attribute { 1 }, - element test { 'a' }, - attribute foo { "bar" }, - fn:doc()[ foo/@bar eq $let ], - //x/with/another/*/*:version/xpath/@attr } -}; - -let $bride := "Bride" -let $test := validate lax { html } -let $test := validate strict { html } -let $test := validate { html } -let $test := $var1/*:Article (: comment here :) [fn:not()] -let $test := $var1/@*:name/fn:string() - -let $noop := ordered { $test } -let $noop := unordered { $test } - -let $noop := - for $version at $i in $versions/version - let $row := if($i mod 2 eq 0) then "even" else "odd" - order by $version descending - return - -return - -{ - - - The Princess { fn:capitalize($bride) } - -
    - - { - (: placeholder for local sessions :) - element div { - attribute id { "sessions-local" }, - attribute class { "hidden" }, - element h1 { "Local Sessions" }, - element p { - 'These sessions use storage provided by your browser.', - 'You can also ', - element a { - attribute href { 'session-import-local.xqy' }, - 'import' }, - ' sessions from local XML files.' - } - } - } - { - for $i in $sessions - let $id := c:session-id($i) - let $uri := c:session-uri($i) - (: we only care about the lock that expires last :) - let $conflicting := c:conflicting-locks($uri, 1) - let $name as xs:string := ($i/sess:name, "(unnamed)")[1] - return element tr { - element td { $name }, - element td { string($i/sec:user) }, - element td { data($i/sess:created) }, - element td { data($i/sess:last-modified) }, - element td { - if (empty($conflicting)) then () else - text { - "by", $conflicting/lock:owner, - "until", adjust-dateTime-to-timezone( - x:epoch-seconds-to-dateTime( - $conflicting/lock:timestamp + $conflicting/lock:timeout - ) - ) - }, - (: only show resume button if there are no conflicting locks :) - element input { - attribute type { "button" }, - attribute title { - data($i/sess:query-buffers/sess:query[1]) }, - attribute onclick { - concat("list.resumeSession('", $id, "')") }, - attribute value { - "Resume", (' ', $id)[ $d:DEBUG ] } - }[ not($conflicting) ], - $x:NBSP, - (: clone button :) - element input { - attribute type { "button" }, - attribute title { "clone this session" }, - attribute onclick { - concat("list.cloneSession('", $id, "', this)") }, - attribute value { "Clone", (' ', $id)[ $d:DEBUG ] } - }, - $x:NBSP, - (: export button :) - element input { - attribute type { "button" }, - attribute title { "export this session" }, - attribute onclick { - concat("list.exportServerSession('", $id, "', this)") }, - attribute value { "Export", (' ', $id)[ $d:DEBUG ] } - }, - $x:NBSP, - (: only show delete button if there are no conflicting locks :) - element input { - attribute type { "button" }, - attribute title { "permanently delete this session" }, - attribute onclick { - concat("list.deleteSession('", $id, "', this)") }, - attribute value { "Delete", (' ', $id)[ $d:DEBUG ] } - }[ not($conflicting) ] - } - } - } -
    -
    -} -   - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.xsl b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.xsl deleted file mode 100644 index 590bb04..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.xsl +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.zep b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.zep deleted file mode 100644 index 4724d4c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test.zep +++ /dev/null @@ -1,33 +0,0 @@ -namespace Test; - -use Test\Foo; - -class Bar -{ - protected a; - private b; - public c {set, get}; - - public function __construct(string str, boolean bool) - { - let this->c = str; - this->setC(bool); - let this->b = []; - } - - public function sayHello(string name) - { - echo "Hello " . name; - } - - protected function loops() - { - for a in b { - echo a; - } - loop { - return "boo!"; - } - } - -} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test2.pypylog b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test2.pypylog deleted file mode 100644 index 543e21d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/test2.pypylog +++ /dev/null @@ -1,120 +0,0 @@ -[2f1dd6c3b8b7] {jit-log-opt-loop -# Loop 0 ( ds1dr4 dsdr3 ds1dr4) : loop with 115 ops -[p0, p1] -+33: label(p0, p1, descr=TargetToken(-1223434224)) -debug_merge_point(0, 0, ' ds1dr4 dsdr3 ds1dr4') -+33: guard_nonnull_class(p1, 138371488, descr=) [p1, p0] -+54: p3 = getfield_gc_pure(p1, descr=) -+57: guard_value(p3, ConstPtr(ptr4), descr=) [p1, p0, p3] -+69: p5 = getfield_gc_pure(p1, descr=) -+72: p7 = getarrayitem_gc(p5, 0, descr=) -+75: guard_class(p7, 138371552, descr=) [p0, p5, p7] -+88: p9 = getfield_gc(p7, descr=) -+91: guard_nonnull_class(p9, 138373024, descr=) [p0, p5, p7, p9] -+109: p12 = getarrayitem_gc(p5, 1, descr=) -+112: guard_class(p12, 138371552, descr=) [p0, p5, p12, p7] -+125: p14 = getfield_gc(p12, descr=) -+128: guard_nonnull_class(p14, 138373024, descr=) [p0, p5, p12, p14, p7] -debug_merge_point(0, 0, 'None') -debug_merge_point(0, 0, 'None') -+146: p16 = getfield_gc_pure(p9, descr=) -+149: guard_value(p16, ConstPtr(ptr17), descr=) [p16, p9, p0, p12, p7] -+161: p18 = getfield_gc_pure(p9, descr=) -+164: guard_class(p18, 138371648, descr=) [p18, p9, p0, p12, p7] -+177: p20 = getfield_gc_pure(p9, descr=) -+180: guard_class(p20, 138371648, descr=) [p20, p9, p18, p0, p12, p7] -+193: p22 = getfield_gc_pure(p9, descr=) -+196: guard_class(p22, 138371936, descr=) [p22, p9, p20, p18, p0, p12, p7] -debug_merge_point(0, 0, 'None') -+209: p24 = getfield_gc_pure(p22, descr=) -+215: guard_value(p24, ConstPtr(ptr25), descr=) [p24, p22, p9, None, None, p0, p12, p7] -+227: p27 = getfield_gc_pure(p22, descr=) -+230: guard_class(p27, 138371648, descr=) [p22, p27, p9, None, None, p0, p12, p7] -debug_merge_point(0, 0, '_') -debug_merge_point(0, 0, 'None') -+243: p30 = getfield_gc(ConstPtr(ptr29), descr=) -+249: i34 = call(ConstClass(ll_dict_lookup_trampoline__v64___simple_call__function_ll), p30, ConstPtr(ptr32), 360200661, descr=) -+281: guard_no_exception(, descr=) [p27, p20, p18, i34, p30, None, None, None, p0, p12, p7] -+294: i36 = int_and(i34, -2147483648) -+302: i37 = int_is_true(i36) -guard_false(i37, descr=) [p27, p20, p18, i34, p30, None, None, None, p0, p12, p7] -+311: p38 = getfield_gc(p30, descr=) -+314: p39 = getinteriorfield_gc(p38, i34, descr=>) -+318: i40 = instance_ptr_eq(p18, p39) -guard_true(i40, descr=) [p27, p20, None, None, None, p0, p12, p7] -debug_merge_point(0, 0, 'None') -+327: i41 = getfield_gc_pure(p20, descr=) -+330: i42 = getfield_gc_pure(p27, descr=) -+333: i43 = int_sub(i41, i42) -debug_merge_point(0, 0, 'None') -debug_merge_point(0, 0, 'None') -debug_merge_point(0, 0, 'None') -+335: i45 = int_eq(0, i43) -guard_false(i45, descr=) [p0, i43, None, None, None, None, p12, p7] -p47 = new_with_vtable(138371648) -+393: setfield_gc(p47, i43, descr=) -setfield_gc(p7, p47, descr=) -+414: p48 = getfield_gc(p12, descr=) -+420: guard_nonnull_class(p48, 138371648, descr=) [p0, p48, p12, p47, p7] -debug_merge_point(0, 0, ' 1 1 1 dsdr3 1') -debug_merge_point(0, 0, 'None') -debug_merge_point(0, 0, '_') -debug_merge_point(0, 0, 'None') -debug_merge_point(0, 0, 'None') -debug_merge_point(0, 0, ' dsdr3 dsdr3') -debug_merge_point(0, 0, ' ds1dr4 dsdr3 ds1dr4') -+438: label(p0, p48, p30, p38, descr=TargetToken(-1223434176)) -debug_merge_point(0, 0, ' ds1dr4 dsdr3 ds1dr4') -debug_merge_point(0, 0, 'None') -debug_merge_point(0, 0, 'None') -debug_merge_point(0, 0, 'None') -debug_merge_point(0, 0, '_') -debug_merge_point(0, 0, 'None') -+438: i50 = call(ConstClass(ll_dict_lookup_trampoline__v64___simple_call__function_ll), p30, ConstPtr(ptr32), 360200661, descr=) -+464: guard_no_exception(, descr=) [p48, i50, p30, p0] -+477: i51 = int_and(i50, -2147483648) -+485: i52 = int_is_true(i51) -guard_false(i52, descr=) [p48, i50, p30, p0] -+494: p53 = getinteriorfield_gc(p38, i50, descr=>) -+501: i55 = instance_ptr_eq(ConstPtr(ptr54), p53) -guard_true(i55, descr=) [p48, p0] -debug_merge_point(0, 0, 'None') -+513: i56 = getfield_gc_pure(p48, descr=) -+516: i58 = int_sub(i56, 1) -debug_merge_point(0, 0, 'None') -debug_merge_point(0, 0, 'None') -debug_merge_point(0, 0, 'None') -+519: i59 = int_eq(0, i58) -guard_false(i59, descr=) [i58, p48, p0] -debug_merge_point(0, 0, ' 1 1 1 dsdr3 1') -debug_merge_point(0, 0, 'None') -debug_merge_point(0, 0, '_') -debug_merge_point(0, 0, 'None') -debug_merge_point(0, 0, 'None') -debug_merge_point(0, 0, ' dsdr3 dsdr3') -debug_merge_point(0, 0, ' ds1dr4 dsdr3 ds1dr4') -p61 = new_with_vtable(138371700) -p63 = new_with_vtable(138373024) -p65 = new_with_vtable(138371936) -+606: setfield_gc(p63, ConstPtr(ptr66), descr=) -p68 = new_with_vtable(138373024) -+632: setfield_gc(p65, ConstPtr(ptr69), descr=) -p71 = new_with_vtable(138371936) -+658: setfield_gc(p68, ConstPtr(ptr17), descr=) -+665: setfield_gc(p71, ConstPtr(ptr72), descr=) -+672: setfield_gc(p68, p71, descr=) -+675: setfield_gc(p68, p48, descr=) -+678: setfield_gc(p68, ConstPtr(ptr54), descr=) -p73 = new_with_vtable(138371648) -+701: setfield_gc(p61, p0, descr=) -+716: setfield_gc(p61, 2, descr=) -+723: setfield_gc(p71, ConstPtr(ptr25), descr=) -+730: setfield_gc(p65, p68, descr=) -+733: setfield_gc(p63, p65, descr=) -+736: setfield_gc(p63, ConstPtr(ptr75), descr=) -+743: setfield_gc(p63, ConstPtr(ptr54), descr=) -+750: setfield_gc(p61, p63, descr=) -+753: setfield_gc(p73, i58, descr=) -+762: jump(p61, p73, p30, p38, descr=TargetToken(-1223434176)) -+775: --end of the loop-- -[2f1dd6da3b99] jit-log-opt-loop} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/truncated.pytb b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/truncated.pytb deleted file mode 100644 index ad5b6d4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/truncated.pytb +++ /dev/null @@ -1,15 +0,0 @@ - File "/usr/lib/python2.3/site-packages/trac/web/main.py", line 314, in dispatch_request - dispatcher.dispatch(req) - File "/usr/lib/python2.3/site-packages/trac/web/main.py", line 186, in dispatch - req.session = Session(self.env, req) - File "/usr/lib/python2.3/site-packages/trac/web/session.py", line 52, in __init__ - self.promote_session(sid) - File "/usr/lib/python2.3/site-packages/trac/web/session.py", line 125, in promote_session - "AND authenticated=0", (sid,)) - File "/usr/lib/python2.3/site-packages/trac/db/util.py", line 47, in execute - return self.cursor.execute(sql_escape_percent(sql), args) - File "/usr/lib/python2.3/site-packages/trac/db/sqlite_backend.py", line 44, in execute - args or []) - File "/usr/lib/python2.3/site-packages/trac/db/sqlite_backend.py", line 36, in _rollback_on_error - return function(self, *args, **kwargs) -OperationalError: database is locked diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/type.lisp b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/type.lisp deleted file mode 100644 index c02c29d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/type.lisp +++ /dev/null @@ -1,1218 +0,0 @@ -;;;; TYPEP und Verwandtes -;;;; Michael Stoll, 21. 10. 1988 -;;;; Bruno Haible, 10.6.1989 -;;;; Sam Steingold 2000-2005 - -;;; Datenstrukturen für TYPEP: -;;; - Ein Type-Specifier-Symbol hat auf seiner Propertyliste unter dem -;;; Indikator SYS::TYPE-SYMBOL eine Funktion von einem Argument, die -;;; testet, ob ein Objekt vom richtigen Typ ist. -;;; - Ein Symbol, das eine Type-Specifier-Liste beginnen kann, hat auf seiner -;;; Propertyliste unter dem Indikator SYS::TYPE-LIST eine Funktion von -;;; einem Argument für das zu testende Objekt und zusätzlichen Argumenten -;;; für die Listenelemente. -;;; - Ein Symbol, das als Typmacro definiert wurde, hat auf seiner Property- -;;; liste unter dem Indikator SYSTEM::DEFTYPE-EXPANDER den zugehörigen -;;; Expander: eine Funktion, die den zu expandierenden Type-Specifier (eine -;;; mindestens einelementige Liste) als Argument bekommt. - -(in-package "EXT") -(export '(type-expand)) -(in-package "SYSTEM") - -; vorläufig, solange bis clos.lisp geladen wird: -(eval-when (eval) - (predefun clos::built-in-class-p (object) (declare (ignore object)) nil)) -(unless (fboundp 'clos::class-name) - (defun clos::class-name (c) (declare (ignore c)) nil) -) - -(defun typespec-error (fun type) - (error-of-type 'error - (TEXT "~S: invalid type specification ~S") - fun type -) ) - -;; ============================================================================ - -;; return the CLOS class named by TYPESPEC or NIL -(defun clos-class (typespec) - (let ((cc (get typespec 'CLOS::CLOSCLASS))) - (when (and cc (clos::defined-class-p cc) (eq (clos:class-name cc) typespec)) - cc))) - -;;; TYPEP, CLTL S. 72, S. 42-51 -(defun typep (x y &optional env &aux f) ; x = Objekt, y = Typ - (declare (ignore env)) - (setq y (expand-deftype y)) - (cond - ((symbolp y) - (cond ((setq f (get y 'TYPE-SYMBOL)) (funcall f x)) - ((setq f (get y 'TYPE-LIST)) (funcall f x)) - ((setq f (get y 'DEFSTRUCT-DESCRIPTION)) (ds-typep x y f)) - ((setq f (clos-class y)) - ; It's not worth handling structure classes specially here. - (clos::typep-class x f)) - (t (typespec-error 'typep y)) - ) ) - ((and (consp y) (symbolp (first y))) - (cond - ((and (eq (first y) 'SATISFIES) (eql (length y) 2)) - (unless (symbolp (second y)) - (error-of-type 'error - (TEXT "~S: argument to SATISFIES must be a symbol: ~S") - 'typep (second y) - ) ) - (if (funcall (symbol-function (second y)) x) t nil) - ) - ((eq (first y) 'MEMBER) - (if (member x (rest y)) t nil) - ) - ((and (eq (first y) 'EQL) (eql (length y) 2)) - (eql x (second y)) - ) - ((and (eq (first y) 'NOT) (eql (length y) 2)) - (not (typep x (second y))) - ) - ((eq (first y) 'AND) - (dolist (type (rest y) t) - (unless (typep x type) (return nil)) - ) ) - ((eq (first y) 'OR) - (dolist (type (rest y) nil) - (when (typep x type) (return t)) - ) ) - ((setq f (get (first y) 'TYPE-LIST)) (apply f x (rest y))) - (t (typespec-error 'typep y)) - ) ) - ((clos::defined-class-p y) (clos::typep-class x y)) - ((clos::eql-specializer-p y) (eql x (clos::eql-specializer-singleton y))) - ((encodingp y) (charset-typep x y)) - (t (typespec-error 'typep y)) -) ) - -;; ---------------------------------------------------------------------------- - -;; UPGRADED-ARRAY-ELEMENT-TYPE is a lattice homomorphism, see -;; ANSI CL 15.1.2.1. -(defun upgraded-array-element-type (type &optional environment) - (declare (ignore environment)) - ;; see array.d - (case type - ((BIT) 'BIT) - ((CHARACTER) 'CHARACTER) - ((T) 'T) - ((NIL) 'NIL) - (t (if (subtypep type 'NIL) - 'NIL - (multiple-value-bind (low high) (sys::subtype-integer type) - ; Es gilt (or (null low) (subtypep type `(INTEGER ,low ,high))) - (if (and (integerp low) (not (minusp low)) (integerp high)) - (let ((l (integer-length high))) - ; Es gilt (subtypep type `(UNSIGNED-BYTE ,l)) - (cond ((<= l 1) 'BIT) - ((<= l 2) '(UNSIGNED-BYTE 2)) - ((<= l 4) '(UNSIGNED-BYTE 4)) - ((<= l 8) '(UNSIGNED-BYTE 8)) - ((<= l 16) '(UNSIGNED-BYTE 16)) - ((<= l 32) '(UNSIGNED-BYTE 32)) - (t 'T))) - (if (subtypep type 'CHARACTER) - 'CHARACTER - 'T))))))) - -;; ---------------------------------------------------------------------------- - -;; UPGRADED-COMPLEX-PART-TYPE is a lattice homomorphism, see -;; HyperSpec/Body/fun_complex.html and HyperSpec/Body/syscla_complex.html, -;; and an idempotent. Therefore -;; (subtypep (upgraded-complex-part-type T1) (upgraded-complex-part-type T2)) -;; is equivalent to -;; (subtypep T1 (upgraded-complex-part-type T2)) -;; (Proof: Let U T be an abbreviation for (upgraded-complex-part-type T). -;; If U T1 <= U T2, then T1 <= U T1 <= U T2. -;; If T1 <= U T2, then by homomorphism U T1 <= U U T2 = U T2.) -;; -;; For _any_ CL implementation, you could define -;; (defun upgraded-complex-part-type (type) 'REAL) -;; Likewise for _any_ CL implementation, you could define -;; (defun upgraded-complex-part-type (type) type) -;; or - again for _any_ CL implementation: -;; (defun upgraded-complex-part-type (type) -;; (cond ((subtypep type 'NIL) 'NIL) -;; ((subtypep type 'SHORT-FLOAT) 'SHORT-FLOAT) -;; ((subtypep type 'SINGLE-FLOAT) 'SINGLE-FLOAT) -;; ((subtypep type 'DOUBLE-FLOAT) 'DOUBLE-FLOAT) -;; ((subtypep type 'LONG-FLOAT) 'LONG-FLOAT) -;; ((subtypep type 'RATIONAL) 'RATIONAL) -;; ((subtypep type 'REAL) 'REAL) -;; (t (error ...)))) -;; The reason is that a complex number is immutable: no setters for the -;; realpart and imagpart exist. -;; -;; We choose the second implementation because it allows the most precise -;; type inference. -(defun upgraded-complex-part-type (type &optional environment) - (declare (ignore environment)) - (if (subtypep type 'REAL) - type - (error-of-type 'error - (TEXT "~S: type ~S is not a subtype of ~S") - 'upgraded-complex-part-type type 'real))) - -;; ---------------------------------------------------------------------------- - -;; Macros for defining the various built-in "atomic type specifier"s and -;; "compound type specifier"s. The following macros add information for both -;; the TYPEP function above and the c-TYPEP in the compiler. - -; Alist symbol -> funname, used by the compiler. -(defparameter c-typep-alist1 '()) -; Alist symbol -> lambdabody, used by the compiler. -(defparameter c-typep-alist2 '()) -; Alist symbol -> expander function, used by the compiler. -(defparameter c-typep-alist3 '()) - -; (def-atomic-type symbol function-name) -; defines an atomic type. The function-name designates a function taking one -; argument and returning a generalized boolean value. It can be either a -; symbol or a lambda expression. -(defmacro def-atomic-type (symbol funname) - (let ((lambdap (and (consp funname) (eq (car funname) 'LAMBDA)))) - `(PROGN - (SETF (GET ',symbol 'TYPE-SYMBOL) - ,(if lambdap - `(FUNCTION ,(concat-pnames "TYPE-SYMBOL-" symbol) ,funname) - `(FUNCTION ,funname) - ) - ) - ,(if lambdap - `(SETQ C-TYPEP-ALIST2 - (NCONC C-TYPEP-ALIST2 (LIST (CONS ',symbol ',(cdr funname)))) - ) - `(SETQ C-TYPEP-ALIST1 - (NCONC C-TYPEP-ALIST1 (LIST (CONS ',symbol ',funname))) - ) - ) - ',symbol - ) -) ) - -; (def-compound-type symbol lambda-list (x) check-form typep-form c-typep-form) -; defines a compound type. The lambda-list is of the form (&optional ...) -; where the arguments come from the CDR of the type specifier. -; For typep-form, x is an object. -; For c-typep-form, x is a multiply evaluatable form (actually a gensym). -; check-form is a form performing error checking, may call `error'. -; typep-form should return a generalized boolean value. -; c-typep-form should produce a form returning a generalized boolean value. -(defmacro def-compound-type (symbol lambdalist (var) check-form typep-form c-typep-form) - `(PROGN - (SETF (GET ',symbol 'TYPE-LIST) - (FUNCTION ,(concat-pnames "TYPE-LIST-" symbol) - (LAMBDA (,var ,@lambdalist) - ,@(if check-form - `((MACROLET ((ERROR (&REST ERROR-ARGS) - (LIST* 'ERROR-OF-TYPE ''ERROR ERROR-ARGS) - )) - ,check-form - )) - ) - ,typep-form - ) ) ) - (SETQ C-TYPEP-ALIST3 - (NCONC C-TYPEP-ALIST3 - (LIST (CONS ',symbol - #'(LAMBDA (,var ,@lambdalist &REST ILLEGAL-ARGS) - (DECLARE (IGNORE ILLEGAL-ARGS)) - ,@(if check-form - `((MACROLET ((ERROR (&REST ERROR-ARGS) - (LIST 'PROGN - (LIST* 'C-WARN ERROR-ARGS) - '(THROW 'C-TYPEP NIL) - )) ) - ,check-form - )) - ) - ,c-typep-form - ) - ) ) ) ) - ',symbol - ) -) - -; CLtL1 p. 43 -(def-atomic-type ARRAY arrayp) -(def-atomic-type ATOM atom) -(def-atomic-type BASE-CHAR - #+BASE-CHAR=CHARACTER - characterp - #-BASE-CHAR=CHARACTER - (lambda (x) (and (characterp x) (base-char-p x))) -) -(def-atomic-type BASE-STRING - (lambda (x) - (and (stringp x) - (eq (array-element-type x) - #+BASE-CHAR=CHARACTER 'CHARACTER #-BASE-CHAR=CHARACTER 'BASE-CHAR -) ) ) ) -(def-atomic-type BIGNUM - (lambda (x) (and (integerp x) (not (fixnump x)))) -) -(def-atomic-type BIT - (lambda (x) (or (eql x 0) (eql x 1))) -) -(def-atomic-type BIT-VECTOR bit-vector-p) -(def-atomic-type BOOLEAN - (lambda (x) (or (eq x 'nil) (eq x 't))) -) -(def-atomic-type CHARACTER characterp) -(def-atomic-type COMPILED-FUNCTION compiled-function-p) -(def-atomic-type COMPLEX complexp) -(def-atomic-type CONS consp) -(def-atomic-type DOUBLE-FLOAT double-float-p) -(def-atomic-type ENCODING encodingp) -(def-atomic-type EXTENDED-CHAR - #+BASE-CHAR=CHARACTER - (lambda (x) (declare (ignore x)) nil) - #-BASE-CHAR=CHARACTER - (lambda (x) (and (characterp x) (not (base-char-p x)))) -) -(def-atomic-type FIXNUM fixnump) -(def-atomic-type FLOAT floatp) -(def-atomic-type FUNCTION functionp) -(def-atomic-type HASH-TABLE hash-table-p) -(def-atomic-type INTEGER integerp) -(def-atomic-type KEYWORD keywordp) -(def-atomic-type LIST listp) -#+LOGICAL-PATHNAMES -(def-atomic-type LOGICAL-PATHNAME logical-pathname-p) -(def-atomic-type LONG-FLOAT long-float-p) -(def-atomic-type NIL - (lambda (x) (declare (ignore x)) nil) -) -(def-atomic-type NULL null) -(def-atomic-type NUMBER numberp) -(def-atomic-type PACKAGE packagep) -(def-atomic-type PATHNAME pathnamep) -(def-atomic-type RANDOM-STATE random-state-p) -(def-atomic-type RATIO - (lambda (x) (and (rationalp x) (not (integerp x)))) -) -(def-atomic-type RATIONAL rationalp) -(def-atomic-type READTABLE readtablep) -(def-atomic-type REAL realp) -(def-atomic-type SEQUENCE sequencep) -(def-atomic-type SHORT-FLOAT short-float-p) -(def-atomic-type SIMPLE-ARRAY simple-array-p) -(def-atomic-type SIMPLE-BASE-STRING - (lambda (x) - (and (simple-string-p x) - (eq (array-element-type x) - #+BASE-CHAR=CHARACTER 'CHARACTER #-BASE-CHAR=CHARACTER 'BASE-CHAR -) ) ) ) -(def-atomic-type SIMPLE-BIT-VECTOR simple-bit-vector-p) -(def-atomic-type SIMPLE-STRING simple-string-p) -(def-atomic-type SIMPLE-VECTOR simple-vector-p) -(def-atomic-type SINGLE-FLOAT single-float-p) -(defun %standard-char-p (x) (and (characterp x) (standard-char-p x))) ; ABI -(def-atomic-type STANDARD-CHAR %standard-char-p) -(def-atomic-type CLOS:STANDARD-OBJECT clos::std-instance-p) -(def-atomic-type STREAM streamp) -(def-atomic-type FILE-STREAM file-stream-p) -(def-atomic-type SYNONYM-STREAM synonym-stream-p) -(def-atomic-type BROADCAST-STREAM broadcast-stream-p) -(def-atomic-type CONCATENATED-STREAM concatenated-stream-p) -(def-atomic-type TWO-WAY-STREAM two-way-stream-p) -(def-atomic-type ECHO-STREAM echo-stream-p) -(def-atomic-type STRING-STREAM string-stream-p) -(def-atomic-type STRING stringp) -(def-atomic-type STRING-CHAR characterp) -(def-atomic-type CLOS:STRUCTURE-OBJECT clos::structure-object-p) -(def-atomic-type SYMBOL symbolp) -(def-atomic-type T (lambda (x) (declare (ignore x)) t)) -;; foreign1.lisp is loaded after this file, -;; so these symbols are not external yet -#+ffi -(def-atomic-type ffi::foreign-function - (lambda (x) (eq 'ffi::foreign-function (type-of x)))) -#+ffi -(def-atomic-type ffi::foreign-variable - (lambda (x) (eq 'ffi::foreign-variable (type-of x)))) -#+ffi -(def-atomic-type ffi::foreign-address - (lambda (x) (eq 'ffi::foreign-address (type-of x)))) -;; see lispbibl.d (#define FOREIGN) and predtype.d (TYPE-OF): -#+(or unix ffi affi win32) -(def-atomic-type foreign-pointer - (lambda (x) (eq 'foreign-pointer (type-of x)))) -(def-atomic-type VECTOR vectorp) -(def-atomic-type PLIST - (lambda (x) (multiple-value-bind (length tail) (list-length-dotted x) - (and (null tail) (evenp length))))) - -(defmacro ensure-dim (type dim) - ;; make sure DIM is a valid dimension - `(unless (or (eq ,dim '*) (typep ,dim `(INTEGER 0 (,ARRAY-DIMENSION-LIMIT)))) - (error (TEXT "~S: dimension ~S is invalid") ',type ,dim))) - -(defmacro ensure-rank (type rank) - ;; make sure RANK is a valid rank - `(unless (typep ,rank `(INTEGER 0 (,ARRAY-RANK-LIMIT))) - (error (TEXT "~S: rank ~S is invalid") ',type ,rank))) - -; CLtL1 p. 46-50 -(defun c-typep-array (tester el-type dims x) - `(AND (,tester ,x) - ,@(if (eq el-type '*) - '() - `((EQUAL (ARRAY-ELEMENT-TYPE ,x) ',(upgraded-array-element-type el-type))) - ) - ,@(if (eq dims '*) - '() - (if (numberp dims) - `((EQL ,dims (ARRAY-RANK ,x))) - `((EQL ,(length dims) (ARRAY-RANK ,x)) - ,@(let ((i 0)) - (mapcap #'(lambda (dim) - (prog1 - (if (eq dim '*) - '() - `((EQL ',dim (ARRAY-DIMENSION ,x ,i))) - ) - (incf i) - ) ) - dims - ) ) - ) - ) ) - ) -) -(defun c-typep-vector (tester size x) - `(AND (,tester ,x) - ,@(if (eq size '*) - '() - `((EQL ',size (ARRAY-DIMENSION ,x 0))) - ) - ) -) -(defun typep-number-test (x low high test type) - (and (funcall test x) - (cond ((eq low '*)) - ((funcall test low) (<= low x)) - ((and (consp low) (null (rest low)) (funcall test (first low))) - (< (first low) x) - ) - (t (error-of-type 'error - #1=(TEXT "~S: argument to ~S must be *, ~S or a list of ~S: ~S") - 'typep type type type low - ) ) ) - (cond ((eq high '*)) - ((funcall test high) (>= high x)) - ((and (consp high) (null (rest high)) (funcall test (first high))) - (> (first high) x) - ) - (t (error-of-type 'error - #1# 'typep type type type high -) ) ) ) ) -(defun c-typep-number (caller tester low high x) - `(AND (,tester ,x) - ,@(cond ((eq low '*) '()) - ((funcall tester low) `((<= ,low ,x))) - ((and (consp low) (null (rest low)) (funcall tester (first low))) - `((< ,(first low) ,x)) - ) - (t (c-warn #1=(TEXT "~S: argument to ~S must be *, ~S or a list of ~S: ~S") - 'typep caller caller caller low - ) - (throw 'c-TYPEP nil) - ) ) - ,@(cond ((eq high '*) '()) - ((funcall tester high) `((>= ,high ,x))) - ((and (consp high) (null (rest high)) (funcall tester (first high))) - `((> ,(first high) ,x)) - ) - (t (c-warn #1# 'typep caller caller caller high) - (throw 'c-TYPEP nil) - ) ) - ) -) -(def-compound-type ARRAY (&optional (el-type '*) (dims '*)) (x) - (unless (eq dims '*) - (if (numberp dims) - (ensure-rank ARRAY dims) - (dolist (dim dims) (ensure-dim ARRAY dim)))) - (and (arrayp x) - (or (eq el-type '*) - (equal (array-element-type x) (upgraded-array-element-type el-type)) - ) - (or (eq dims '*) - (if (numberp dims) - (eql dims (array-rank x)) - (and (eql (length dims) (array-rank x)) - (every #'(lambda (a b) (or (eq a '*) (eql a b))) - dims (array-dimensions x) - ) ) ) ) ) - (c-typep-array 'ARRAYP el-type dims x) -) -(def-compound-type SIMPLE-ARRAY (&optional (el-type '*) (dims '*)) (x) - (unless (eq dims '*) - (if (numberp dims) - (ensure-rank SIMPLE-ARRAY dims) - (dolist (dim dims) (ensure-dim SIMPLE-ARRAY dim)))) - (and (simple-array-p x) - (or (eq el-type '*) - (equal (array-element-type x) (upgraded-array-element-type el-type)) - ) - (or (eq dims '*) - (if (numberp dims) - (eql dims (array-rank x)) - (and (eql (length dims) (array-rank x)) - (every #'(lambda (a b) (or (eq a '*) (eql a b))) - dims (array-dimensions x) - ) ) ) ) ) - (c-typep-array 'SIMPLE-ARRAY-P el-type dims x) -) -(def-compound-type VECTOR (&optional (el-type '*) (size '*)) (x) - (ensure-dim VECTOR size) - (and (vectorp x) - (or (eq el-type '*) - (equal (array-element-type x) (upgraded-array-element-type el-type)) - ) - (or (eq size '*) (eql (array-dimension x 0) size)) - ) - `(AND (VECTORP ,x) - ,@(if (eq el-type '*) - '() - `((EQUAL (ARRAY-ELEMENT-TYPE ,x) ',(upgraded-array-element-type el-type))) - ) - ,@(if (eq size '*) - '() - `((EQL (ARRAY-DIMENSION ,x 0) ',size)) - ) - ) -) -(def-compound-type SIMPLE-VECTOR (&optional (size '*)) (x) - (ensure-dim SIMLPE-VECTOR size) - (and (simple-vector-p x) - (or (eq size '*) (eql size (array-dimension x 0))) - ) - (c-typep-vector 'SIMPLE-VECTOR-P size x) -) -(def-compound-type COMPLEX (&optional (rtype '*) (itype rtype)) (x) - nil - (and (complexp x) - (or (eq rtype '*) - (typep (realpart x) (upgraded-complex-part-type rtype))) - (or (eq itype '*) - (typep (imagpart x) (upgraded-complex-part-type itype)))) - `(AND (COMPLEXP ,x) - ,@(if (eq rtype '*) - '() - `((TYPEP (REALPART ,x) ',(upgraded-complex-part-type rtype)))) - ,@(if (eq itype '*) - '() - `((TYPEP (IMAGPART ,x) ',(upgraded-complex-part-type itype)))))) -(def-compound-type INTEGER (&optional (low '*) (high '*)) (x) - nil - (typep-number-test x low high #'integerp 'INTEGER) - (c-typep-number 'INTEGER 'INTEGERP low high x) -) -(def-compound-type MOD (n) (x) - (unless (integerp n) - (error (TEXT "~S: argument to MOD must be an integer: ~S") - 'typep n - ) ) - (and (integerp x) (<= 0 x) (< x n)) - `(AND (INTEGERP ,x) (NOT (MINUSP ,x)) (< ,x ,n)) -) -(def-compound-type SIGNED-BYTE (&optional (n '*)) (x) - (unless (or (eq n '*) (integerp n)) - (error (TEXT "~S: argument to SIGNED-BYTE must be an integer or * : ~S") - 'typep n - ) ) - (and (integerp x) (or (eq n '*) (< (integer-length x) n))) - `(AND (INTEGERP ,x) - ,@(if (eq n '*) '() `((< (INTEGER-LENGTH ,x) ,n))) - ) -) -(def-compound-type UNSIGNED-BYTE (&optional (n '*)) (x) - (unless (or (eq n '*) (integerp n)) - (error (TEXT "~S: argument to UNSIGNED-BYTE must be an integer or * : ~S") - 'typep n - ) ) - (and (integerp x) - (not (minusp x)) - (or (eq n '*) (<= (integer-length x) n)) - ) - `(AND (INTEGERP ,x) (NOT (MINUSP ,x)) - ,@(if (eq n '*) '() `((<= (INTEGER-LENGTH ,x) ,n))) - ) -) -(def-compound-type REAL (&optional (low '*) (high '*)) (x) - nil - (typep-number-test x low high #'realp 'REAL) - (c-typep-number 'REAL 'REALP low high x) -) -(def-compound-type RATIONAL (&optional (low '*) (high '*)) (x) - nil - (typep-number-test x low high #'rationalp 'RATIONAL) - (c-typep-number 'RATIONAL 'RATIONALP low high x) -) -(def-compound-type FLOAT (&optional (low '*) (high '*)) (x) - nil - (typep-number-test x low high #'floatp 'FLOAT) - (c-typep-number 'FLOAT 'FLOATP low high x) -) -(def-compound-type SHORT-FLOAT (&optional (low '*) (high '*)) (x) - nil - (typep-number-test x low high #'short-float-p 'SHORT-FLOAT) - (c-typep-number 'SHORT-FLOAT 'SHORT-FLOAT-P low high x) -) -(def-compound-type SINGLE-FLOAT (&optional (low '*) (high '*)) (x) - nil - (typep-number-test x low high #'single-float-p 'SINGLE-FLOAT) - (c-typep-number 'SINGLE-FLOAT 'SINGLE-FLOAT-P low high x) -) -(def-compound-type DOUBLE-FLOAT (&optional (low '*) (high '*)) (x) - nil - (typep-number-test x low high #'double-float-p 'DOUBLE-FLOAT) - (c-typep-number 'DOUBLE-FLOAT 'DOUBLE-FLOAT-P low high x) -) -(def-compound-type LONG-FLOAT (&optional (low '*) (high '*)) (x) - nil - (typep-number-test x low high #'long-float-p 'LONG-FLOAT) - (c-typep-number 'LONG-FLOAT 'LONG-FLOAT-P low high x) -) -(def-compound-type STRING (&optional (size '*)) (x) - (ensure-dim STRING size) - (and (stringp x) - (or (eq size '*) (eql size (array-dimension x 0))) - ) - (c-typep-vector 'STRINGP size x) -) -(def-compound-type SIMPLE-STRING (&optional (size '*)) (x) - (ensure-dim SIMPLE-STRING size) - (and (simple-string-p x) - (or (eq size '*) (eql size (array-dimension x 0))) - ) - (c-typep-vector 'SIMPLE-STRING-P size x) -) -(def-compound-type BASE-STRING (&optional (size '*)) (x) - (ensure-dim BASE-STRING size) - (and (stringp x) - (or (eq size '*) (eql size (array-dimension x 0))) - ) - (c-typep-vector 'STRINGP size x) -) -(def-compound-type SIMPLE-BASE-STRING (&optional (size '*)) (x) - (ensure-dim SIMPLE-BASE-STRING size) - (and (simple-string-p x) - (or (eq size '*) (eql size (array-dimension x 0))) - ) - (c-typep-vector 'SIMPLE-STRING-P size x) -) -(def-compound-type BIT-VECTOR (&optional (size '*)) (x) - (ensure-dim BIT-VECTOR size) - (and (bit-vector-p x) - (or (eq size '*) (eql size (array-dimension x 0))) - ) - (c-typep-vector 'BIT-VECTOR-P size x) -) -(def-compound-type SIMPLE-BIT-VECTOR (&optional (size '*)) (x) - (ensure-dim SIMPLE-BIT-VECTOR size) - (and (simple-bit-vector-p x) - (or (eq size '*) (eql size (array-dimension x 0))) - ) - (c-typep-vector 'SIMPLE-BIT-VECTOR-P size x) -) -(def-compound-type CONS (&optional (car-type '*) (cdr-type '*)) (x) - nil - (and (consp x) - (or (eq car-type '*) (typep (car x) car-type)) - (or (eq cdr-type '*) (typep (cdr x) cdr-type)) - ) - `(AND (CONSP ,x) - ,@(if (eq car-type '*) '() `((TYPEP (CAR ,x) ',car-type))) - ,@(if (eq cdr-type '*) '() `((TYPEP (CDR ,x) ',cdr-type))) - ) -) - -(fmakunbound 'def-compound-type) - -;; ---------------------------------------------------------------------------- - -; Typtest ohne Gefahr einer Fehlermeldung. Für SIGNAL und HANDLER-BIND. -(defun safe-typep (x y &optional env) - (let ((*error-handler* - #'(lambda (&rest error-args) - (declare (ignore error-args)) - (return-from safe-typep (values nil nil)) - )) ) - (values (typep x y env) t) -) ) - -; Umwandlung eines "type for declaration" in einen "type for discrimination". -(defun type-for-discrimination (y &optional (notp nil) &aux f) - (cond ((symbolp y) - (cond ((get y 'TYPE-SYMBOL) y) - ((get y 'TYPE-LIST) y) - ((setq f (get y 'DEFTYPE-EXPANDER)) - (let* ((z (funcall f (list y))) - (zx (type-for-discrimination z notp))) - (if (eql zx z) y zx) - )) - (t y) - ) ) - ((and (consp y) (symbolp (first y))) - (case (first y) - ((SATISFIES MEMBER EQL) y) - (NOT - (let* ((z (second y)) - (zx (type-for-discrimination z (not notp)))) - (if (eql zx z) y `(NOT ,zx)) - )) - ((AND OR COMPLEX VALUES) - (let* ((z (rest y)) - (zx (mapcar #'(lambda (x) (type-for-discrimination x notp)) z))) - (if (every #'eql z zx) y (cons (first y) zx)) - )) - (FUNCTION - ;; (FUNCTION arg-types res-type) is somewhere between - ;; NIL and FUNCTION, but undecidable. - (if notp 'NIL 'FUNCTION) - ) - (t (cond ((get (first y) 'TYPE-LIST) y) - ((setq f (get (first y) 'DEFTYPE-EXPANDER)) - (let* ((z (funcall f y)) - (zx (type-for-discrimination z notp))) - (if (eql zx z) y zx) - )) - (t y) - ) ) ) ) - (t y) -) ) - -; Testet eine Liste von Werten auf Erfüllen eines Type-Specifiers. Für THE. -(defun %the (values type) ; ABI - (macrolet ((near-typep (objform typform) - ;; near-typep ist wie typep, nur dass das Objekt auch ein - ;; Read-Label sein darf. Das tritt z.B. auf bei - ;; (read-from-string "#1=#S(FOO :X #1#)") - ;; im Konstruktor MAKE-FOO. Die Implementation ist aber - ;; nicht gezwungen, bei fehlerhaftem THE zwingend einen - ;; Fehler zu melden, darum ist ein lascherer Typcheck hier - ;; erlaubt. - (let ((g (gensym))) - `(let ((,g ,objform)) - (or (typep ,g ,typform) (eq (type-of ,g) 'READ-LABEL)))))) - (if (and (consp type) (eq (car type) 'VALUES)) - ;; The VALUES type specifier is ill-defined in ANSI CL. - ;; - ;; There are two possibilities to define a VALUES type specifier in a - ;; sane way: - ;; - (EXACT-VALUES type1 ... [&optional ...]) describes the exact shape - ;; of the values list, as received by MULTIPLE-VALUE-LIST. - ;; For example, (EXACT-VALUES SYMBOL) is matched by (values 'a) but not - ;; by (values 'a 'b) or (values). - ;; - (ASSIGNABLE-VALUES type1 ... [&optional ...]) describes the values - ;; as received by a set of variables through MULTIPLE-VALUE-BIND or - ;; MULTIPLE-VALUE-SETQ. For example, (ASSIGNABLE-VALUES SYMBOL) is - ;; defined by whether - ;; (MULTIPLE-VALUE-BIND (var1) values (DECLARE (TYPE SYMBOL var1)) ...) - ;; is valid or not; therefore (ASSIGNABLE-VALUES SYMBOL) is matched by - ;; (values 'a) and (values 'a 'b) and (values). - ;; Note that &OPTIONAL is actually redundant here: - ;; (ASSIGNABLE-VALUES type1 ... &optional otype1 ...) - ;; is equivalent to - ;; (ASSIGNABLE-VALUES type1 ... (OR NULL otype1) ...) - ;; HyperSpec/Body/typspe_values.html indicates that VALUES means - ;; EXACT-VALUES; however, HyperSpec/Body/speope_the.html indicates that - ;; VALUES means ASSIGNABLE-VALUES. - ;; - ;; SBCL interprets the VALUES type specifier to mean EXACT-VALUES when - ;; it contains &OPTIONAL or &REST, but ASSIGNABLE-VALUES when it has - ;; only a tuple of type specifiers. This is utter nonsense, in particular - ;; because it makes (VALUES type1 ... typek &OPTIONAL) - ;; different from (VALUES type1 ... typek). - ;; - ;; Here we use the ASSIGNABLE-VALUES interpretation. - ;; In SUBTYPEP we just punt and don't assume any interpretation. - (let ((vals values) (types (cdr type))) - ;; required: - (loop - (when (or (atom types) (atom vals)) (return-from %the t)) - (when (memq (car types) lambda-list-keywords) (return)) - (unless (near-typep (pop vals) (pop types)) - (return-from %the nil))) - ;; &optional: - (when (and (consp types) (eq (car types) '&optional)) - (setq types (cdr types)) - (loop - (when (or (atom types) (atom vals)) (return-from %the t)) - (when (memq (car types) lambda-list-keywords) (return)) - (unless (near-typep (pop vals) (pop types)) - (return-from %the nil)))) - ;; &rest &key: - (case (car types) - (&rest - (setq types (cdr types)) - (when (atom types) (typespec-error 'the type)) - (unless (near-typep (pop vals) (pop types)) - (return-from %the nil))) - (&key) - (t (typespec-error 'the type))) - (if (eq (car types) '&key) - (progn - (setq types (cdr types)) - (when (oddp (length vals)) (return-from %the nil)) - (let ((keywords nil)) - (loop - (when (or (atom types) (atom vals)) (return-from %the t)) - (when (memq (car types) lambda-list-keywords) (return)) - (let ((item (pop types))) - (unless (and (listp item) (eql (length item) 2) - (symbolp (first item))) - (typespec-error 'the type)) - (let ((kw (symbol-to-keyword (first item)))) - (unless (near-typep (getf vals kw) (second item)) - (return-from %the nil)) - (push kw keywords)))) - (if (and (consp types) (eq (car types) '&allow-other-keys)) - (setq types (cdr types)) - (unless (getf vals ':allow-other-keys) - (do ((L vals (cddr L))) - ((atom L)) - (unless (memq (car L) keywords) - (return-from %the nil))))))) - (when (consp types) (typespec-error 'the type))) - t) - (near-typep (if (consp values) (car values) nil) type)))) - -;;; =========================================================================== - -;; SUBTYPEP -(load "subtypep") - - -;; Returns the number of bytes that are needed to represent #\Null in a -;; given encoding. -(defun encoding-zeroes (encoding) - #+UNICODE - ;; this should use min_bytes_per_char for cache, not the hash table - (let ((name (ext:encoding-charset encoding)) - (table #.(make-hash-table :key-type '(or string symbol) :value-type 'fixnum - :test 'stablehash-equal :warn-if-needs-rehash-after-gc t - :initial-contents '(("UTF-7" . 1)))) - (tester #.(make-string 2 :initial-element (code-char 0)))) - (or (gethash name table) - (setf (gethash name table) - (- (length (ext:convert-string-to-bytes tester encoding)) - (length (ext:convert-string-to-bytes tester encoding - :end 1)))))) - #-UNICODE 1) - -;; Determines two values low,high such that -;; (subtypep type `(INTEGER ,low ,high)) -;; holds and low is as large as possible and high is as small as possible. -;; low = * means -infinity, high = * means infinity. -;; When (subtypep type 'INTEGER) is false, the values NIL,NIL are returned. -;; We need this function only for MAKE-ARRAY, UPGRADED-ARRAY-ELEMENT-TYPE and -;; OPEN and can therefore w.l.o.g. replace -;; type with `(OR ,type (MEMBER 0)) -#| ;; The original implementation calls canonicalize-type and then applies - ;; a particular SUBTYPE variant: - (defun subtype-integer (type) - (macrolet ((yes () '(return-from subtype-integer (values low high))) - (no () '(return-from subtype-integer nil)) - (unknown () '(return-from subtype-integer nil))) - (setq type (canonicalize-type type)) - (if (consp type) - (case (first type) - (MEMBER ; (MEMBER &rest objects) - ;; All elements must be of type INTEGER. - (let ((low 0) (high 0)) ; wlog! - (dolist (x (rest type) (yes)) - (unless (typep x 'INTEGER) (return (no))) - (setq low (min low x) high (max high x))))) - (OR ; (OR type*) - ;; Every type must be subtype of INTEGER. - (let ((low 0) (high 0)) ; wlog! - (dolist (type1 (rest type) (yes)) - (multiple-value-bind (low1 high1) (subtype-integer type1) - (unless low1 (return (no))) - (setq low (if (or (eq low '*) (eq low1 '*)) '* (min low low1)) - high (if (or (eq high '*) (eq high1 '*)) - '* (max high high1))))))) - (AND ; (AND type*) - ;; If one of the types is subtype of INTEGER, then yes, - ;; otherwise unknown. - (let ((low nil) (high nil)) - (dolist (type1 (rest type)) - (multiple-value-bind (low1 high1) (subtype-integer type1) - (when low1 - (if low - (setq low (if (eq low '*) low1 (if (eq low1 '*) low (max low low1))) - high (if (eq high '*) high1 (if (eq high1 '*) high (min high high1)))) - (setq low low1 high high1))))) - (if low - (progn - (when (and (numberp low) (numberp high) (not (<= low high))) - (setq low 0 high 0) ; type equivalent to NIL) - (yes)) - (unknown))))) - (setq type (list type))) - (if (eq (first type) 'INTEGER) - (let ((low (if (rest type) (second type) '*)) - (high (if (cddr type) (third type) '*))) - (when (consp low) - (setq low (first low)) - (when (numberp low) (incf low))) - (when (consp high) - (setq high (first high)) - (when (numberp high) (decf high))) - (when (and (numberp low) (numberp high) (not (<= low high))) ; type leer? - (setq low 0 high 0)) - (yes)) - (if (and (eq (first type) 'INTERVALS) (eq (second type) 'INTEGER)) - (let ((low (third type)) - (high (car (last type)))) - (when (consp low) - (setq low (first low)) - (when (numberp low) (incf low))) - (when (consp high) - (setq high (first high)) - (when (numberp high) (decf high))) - (yes)) - (unknown))))) -|# ;; This implementation inlines the (tail-recursive) canonicalize-type - ;; function. Its advantage is that it doesn't cons as much. - ;; (For example, (subtype-integer '(UNSIGNED-BYTE 8)) doesn't cons.) -(defun subtype-integer (type) - (macrolet ((yes () '(return-from subtype-integer (values low high))) - (no () '(return-from subtype-integer nil)) - (unknown () '(return-from subtype-integer nil))) - (setq type (expand-deftype type)) - (cond ((symbolp type) - (case type - (BIT (let ((low 0) (high 1)) (yes))) - (FIXNUM - (let ((low '#,most-negative-fixnum) - (high '#,most-positive-fixnum)) - (yes))) - ((INTEGER BIGNUM SIGNED-BYTE) - (let ((low '*) (high '*)) (yes))) - (UNSIGNED-BYTE - (let ((low 0) (high '*)) (yes))) - ((NIL) - (let ((low 0) (high 0)) (yes))) ; wlog! - (t (no)))) - ((and (consp type) (symbolp (first type))) - (unless (and (list-length type) (null (cdr (last type)))) - (typespec-error 'subtypep type)) - (case (first type) - (MEMBER ; (MEMBER &rest objects) - ;; All elements must be of type INTEGER. - (let ((low 0) (high 0)) ; wlog! - (dolist (x (rest type) (yes)) - (unless (typep x 'INTEGER) (return (no))) - (setq low (min low x) high (max high x))))) - (EQL ; (EQL object) - (let ((x (second type))) - (if (typep x 'INTEGER) - (let ((low (min 0 x)) (high (max 0 x))) (yes)) - (no)))) - (OR ; (OR type*) - ;; Every type must be subtype of INTEGER. - (let ((low 0) (high 0)) ; wlog! - (dolist (type1 (rest type) (yes)) - (multiple-value-bind (low1 high1) (subtype-integer type1) - (unless low1 (return (no))) - (setq low (if (or (eq low '*) (eq low1 '*)) - '* (min low low1)) - high (if (or (eq high '*) (eq high1 '*)) - '* (max high high1))))))) - (AND ; (AND type*) - ;; If one of the types is subtype of INTEGER, then yes, - ;; otherwise unknown. - (let ((low nil) (high nil)) - (dolist (type1 (rest type)) - (multiple-value-bind (low1 high1) (subtype-integer type1) - (when low1 - (if low - (setq low (if (eq low '*) low1 - (if (eq low1 '*) low - (max low low1))) - high (if (eq high '*) high1 - (if (eq high1 '*) high - (min high high1)))) - (setq low low1 - high high1))))) - (if low - (progn - (when (and (numberp low) (numberp high) - (not (<= low high))) - (setq low 0 high 0)) ; type equivalent to NIL - (yes)) - (unknown)))) - (INTEGER - (let ((low (if (rest type) (second type) '*)) - (high (if (cddr type) (third type) '*))) - (when (consp low) - (setq low (first low)) - (when (numberp low) (incf low))) - (when (consp high) - (setq high (first high)) - (when (numberp high) (decf high))) - (when (and (numberp low) (numberp high) (not (<= low high))) - (setq low 0 high 0)) ; type equivalent to NIL - (yes))) - (INTERVALS - (if (eq (second type) 'INTEGER) - (let ((low (third type)) - (high (car (last type)))) - (when (consp low) - (setq low (first low)) - (when (numberp low) (incf low))) - (when (consp high) - (setq high (first high)) - (when (numberp high) (decf high))) - (yes)) - (unknown))) - (MOD ; (MOD n) - (let ((n (second type))) - (unless (and (integerp n) (>= n 0)) - (typespec-error 'subtypep type)) - (if (eql n 0) - (no) - (let ((low 0) (high (1- n))) - (yes))))) - (SIGNED-BYTE ; (SIGNED-BYTE &optional s) - (let ((s (if (cdr type) (second type) '*))) - (if (eq s '*) - (let ((low '*) (high '*)) (yes)) - (progn - (unless (and (integerp s) (plusp s)) - (typespec-error 'subtypep type)) - (let ((n (ash 1 (1- s)))) ; (ash 1 *) == (expt 2 *) - (let ((low (- n)) (high (1- n))) - (yes))))))) - (UNSIGNED-BYTE ; (UNSIGNED-BYTE &optional s) - (let ((s (if (cdr type) (second type) '*))) - (if (eq s '*) - (let ((low 0) (high '*)) (yes)) - (progn - (unless (and (integerp s) (>= s 0)) - (typespec-error 'subtypep type)) - (let ((n (ash 1 s))) ; (ash 1 *) == (expt 2 *) - (let ((low 0) (high (1- n))) - (yes))))))) - (t (no)))) - ((clos::defined-class-p type) - (if (and (clos::built-in-class-p type) - (eq (get (clos:class-name type) 'CLOS::CLOSCLASS) type)) - (return-from subtype-integer - (subtype-integer (clos:class-name type))) - (no))) - ((clos::eql-specializer-p type) - (let ((x (clos::eql-specializer-singleton type))) - (if (typep x 'INTEGER) - (let ((low (min 0 x)) (high (max 0 x))) (yes)) - (no)))) - ((encodingp type) (no)) - (t (typespec-error 'subtypep type))))) - -#| TODO: Fix subtype-integer such that this works. -Henry Baker: - (defun type-null (x) - (values (and (eq 'bit (upgraded-array-element-type `(or bit ,x))) - (not (typep 0 x)) - (not (typep 1 x))) - t)) - (type-null '(and symbol number)) - (type-null '(and integer symbol)) - (type-null '(and integer character)) -|# - -;; Determines a sequence kind (an atom, as defined in defseq.lisp: one of -;; LIST - stands for LIST -;; VECTOR - stands for (VECTOR T) -;; STRING - stands for (VECTOR CHARACTER) -;; 1, 2, 4, 8, 16, 32 - stands for (VECTOR (UNSIGNED-BYTE n)) -;; 0 - stands for (VECTOR NIL)) -;; that indicates the sequence type meant by the given type. Other possible -;; return values are -;; SEQUENCE - denoting a type whose intersection with (OR LIST VECTOR) is not -;; subtype of LIST or VECTOR, or -;; NIL - indicating a type whose intersection with (OR LIST VECTOR) is empty. -;; When the type is (OR (VECTOR eltype1) ... (VECTOR eltypeN)), the chosen -;; element type is the smallest element type that contains all of eltype1 ... -;; eltypeN. -;; -;; User-defined sequence types are not supported here. -;; -;; This implementation inlines the (tail-recursive) canonicalize-type -;; function. Its advantage is that it doesn't cons as much. Also it employs -;; some heuristics and does not have the full power of SUBTYPEP. -(defun subtype-sequence (type) - (setq type (expand-deftype type)) - (cond ((symbolp type) - (case type - ((LIST CONS NULL) 'LIST) - ((NIL) 'NIL) - ((BIT-VECTOR SIMPLE-BIT-VECTOR) '1) - ((STRING SIMPLE-STRING BASE-STRING SIMPLE-BASE-STRING) 'STRING) - ((VECTOR SIMPLE-VECTOR ARRAY SIMPLE-ARRAY) 'VECTOR) - ((SEQUENCE) 'SEQUENCE) - (t 'NIL))) - ((and (consp type) (symbolp (first type))) - (unless (and (list-length type) (null (cdr (last type)))) - (typespec-error 'subtypep type)) - (case (first type) - (MEMBER ; (MEMBER &rest objects) - (let ((kind 'NIL)) - (dolist (x (rest type)) - (setq kind (sequence-type-union kind (type-of-sequence x)))) - kind)) - (EQL ; (EQL object) - (unless (eql (length type) 2) - (typespec-error 'subtypep type)) - (type-of-sequence (second type))) - (OR ; (OR type*) - (let ((kind 'NIL)) - (dolist (x (rest type)) - (setq kind (sequence-type-union kind (subtype-sequence x)))) - kind)) - (AND ; (AND type*) - (let ((kind 'SEQUENCE)) - (dolist (x (rest type)) - (setq kind (sequence-type-intersection kind (subtype-sequence x)))) - kind)) - ((SIMPLE-BIT-VECTOR BIT-VECTOR) ; (SIMPLE-BIT-VECTOR &optional size) - (when (cddr type) - (typespec-error 'subtypep type)) - '1) - ((SIMPLE-STRING STRING SIMPLE-BASE-STRING BASE-STRING) ; (SIMPLE-STRING &optional size) - (when (cddr type) - (typespec-error 'subtypep type)) - 'STRING) - (SIMPLE-VECTOR ; (SIMPLE-VECTOR &optional size) - (when (cddr type) - (typespec-error 'subtypep type)) - 'VECTOR) - ((VECTOR ARRAY SIMPLE-ARRAY) ; (VECTOR &optional el-type size), (ARRAY &optional el-type dimensions) - (when (cdddr type) - (typespec-error 'subtypep type)) - (let ((el-type (if (cdr type) (second type) '*))) - (if (eq el-type '*) - 'VECTOR - (let ((eltype (upgraded-array-element-type el-type))) - (cond ((eq eltype 'T) 'VECTOR) - ((eq eltype 'CHARACTER) 'STRING) - ((eq eltype 'BIT) '1) - ((and (consp eltype) (eq (first eltype) 'UNSIGNED-BYTE)) (second eltype)) - ((eq eltype 'NIL) '0) - (t (error (TEXT "~S is not up-to-date with ~S for element type ~S") - 'subtypep-sequence 'upgraded-array-element-type eltype))))))) - ((CONS) ; (CONS &optional cartype cdrtype) - (when (cdddr type) - (typespec-error 'subtypep type)) - 'LIST) - (t 'NIL))) - ((clos::defined-class-p type) - (if (and (clos::built-in-class-p type) - (eq (get (clos:class-name type) 'CLOS::CLOSCLASS) type)) - (subtype-sequence (clos:class-name type)) - 'NIL)) - ((clos::eql-specializer-p type) - (type-of-sequence (clos::eql-specializer-singleton type))) - (t 'NIL))) -(defun type-of-sequence (x) - (cond ((listp x) 'LIST) - ((vectorp x) - (let ((eltype (array-element-type x))) - (cond ((eq eltype 'T) 'VECTOR) - ((eq eltype 'CHARACTER) 'STRING) - ((eq eltype 'BIT) '1) - ((and (consp eltype) (eq (first eltype) 'UNSIGNED-BYTE)) (second eltype)) - ((eq eltype 'NIL) '0) - (t (error (TEXT "~S is not up-to-date with ~S for element type ~S") - 'type-of-sequence 'array-element-type eltype))))) - (t 'NIL))) -(defun sequence-type-union (t1 t2) - (cond ; Simple general rules. - ((eql t1 t2) t1) - ((eq t1 'NIL) t2) - ((eq t2 'NIL) t1) - ; Now the union of two different types. - ((or (eq t1 'SEQUENCE) (eq t2 'SEQUENCE)) 'SEQUENCE) - ((or (eq t1 'LIST) (eq t2 'LIST)) - ; union of LIST and a vector type - 'SEQUENCE) - ((or (eq t1 'VECTOR) (eq t2 'VECTOR)) 'VECTOR) - ((eql t1 0) t2) - ((eql t2 0) t1) - ((or (eq t1 'STRING) (eq t2 'STRING)) - ; union of STRING and an integer-vector type - 'VECTOR) - (t (max t1 t2)))) -(defun sequence-type-intersection (t1 t2) - (cond ; Simple general rules. - ((eql t1 t2) t1) - ((or (eq t1 'NIL) (eq t2 'NIL)) 'NIL) - ; Now the intersection of two different types. - ((eq t1 'SEQUENCE) t2) - ((eq t2 'SEQUENCE) t1) - ((or (eq t1 'LIST) (eq t2 'LIST)) - ; intersection of LIST and a vector type - 'NIL) - ((eq t1 'VECTOR) t2) - ((eq t2 'VECTOR) t1) - ((or (eql t1 0) (eql t2 0)) '0) - ((or (eq t1 'STRING) (eq t2 'STRING)) - ; intersection of STRING and an integer-vector type - '0) - (t (min t1 t2)))) - -;; ============================================================================ - -(defun type-expand (typespec &optional once-p) - (multiple-value-bind (expanded user-defined-p) - (expand-deftype typespec once-p) - (if user-defined-p (values expanded user-defined-p) - (cond ((symbolp typespec) - (cond ((or (get typespec 'TYPE-SYMBOL) (get typespec 'TYPE-LIST)) - (values typespec nil)) - ((or (get typespec 'DEFSTRUCT-DESCRIPTION) - (clos-class typespec)) - (values typespec nil)) - (t (typespec-error 'type-expand typespec)))) - ((and (consp typespec) (symbolp (first typespec))) - (case (first typespec) - ((SATISFIES MEMBER EQL NOT AND OR) (values typespec nil)) - (t (cond ((get (first typespec) 'TYPE-LIST) - (values typespec nil)) - (t (typespec-error 'type-expand typespec)))))) - ((clos::defined-class-p typespec) (values typespec nil)) - (t (typespec-error 'type-expand typespec)))))) - -;; ============================================================================ - -(unless (clos::funcallable-instance-p #'clos::class-name) - (fmakunbound 'clos::class-name)) - - -(keywordp :junk) - T - -(keywordp ::junk) - T - -(symbol-name ::junk) - "JUNK" - -(symbol-name :#junk) - "#JUNK" - -(symbol-name :#.junk) - "#.JUNK" diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/underscore.coffee b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/underscore.coffee deleted file mode 100644 index a34a1ce..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/underscore.coffee +++ /dev/null @@ -1,603 +0,0 @@ - - # Underscore.coffee - # (c) 2010 Jeremy Ashkenas, DocumentCloud Inc. - # Underscore is freely distributable under the terms of the MIT license. - # Portions of Underscore are inspired by or borrowed from Prototype.js, - # Oliver Steele's Functional, and John Resig's Micro-Templating. - # For all details and documentation: - # http://documentcloud.github.com/underscore/ - - - # ------------------------- Baseline setup --------------------------------- - - # Establish the root object, "window" in the browser, or "global" on the server. - root: this - - - # Save the previous value of the "_" variable. - previousUnderscore: root._ - - - # If Underscore is called as a function, it returns a wrapped object that - # can be used OO-style. This wrapper holds altered versions of all the - # underscore functions. Wrapped objects may be chained. - wrapper: (obj) -> - this._wrapped: obj - this - - - # Establish the object that gets thrown to break out of a loop iteration. - breaker: if typeof(StopIteration) is 'undefined' then '__break__' else StopIteration - - - # Create a safe reference to the Underscore object forreference below. - _: root._: (obj) -> new wrapper(obj) - - - # Export the Underscore object for CommonJS. - if typeof(exports) != 'undefined' then exports._: _ - - - # Create quick reference variables for speed access to core prototypes. - slice: Array::slice - unshift: Array::unshift - toString: Object::toString - hasOwnProperty: Object::hasOwnProperty - propertyIsEnumerable: Object::propertyIsEnumerable - - - # Current version. - _.VERSION: '0.5.7' - - - # ------------------------ Collection Functions: --------------------------- - - # The cornerstone, an each implementation. - # Handles objects implementing forEach, arrays, and raw objects. - _.each: (obj, iterator, context) -> - index: 0 - try - return obj.forEach(iterator, context) if obj.forEach - if _.isArray(obj) or _.isArguments(obj) - return iterator.call(context, obj[i], i, obj) for i in [0...obj.length] - iterator.call(context, val, key, obj) for key, val of obj - catch e - throw e if e isnt breaker - obj - - - # Return the results of applying the iterator to each element. Use JavaScript - # 1.6's version of map, if possible. - _.map: (obj, iterator, context) -> - return obj.map(iterator, context) if (obj and _.isFunction(obj.map)) - results: [] - _.each obj, (value, index, list) -> - results.push(iterator.call(context, value, index, list)) - results - - - # Reduce builds up a single result from a list of values. Also known as - # inject, or foldl. Uses JavaScript 1.8's version of reduce, if possible. - _.reduce: (obj, memo, iterator, context) -> - return obj.reduce(_.bind(iterator, context), memo) if (obj and _.isFunction(obj.reduce)) - _.each obj, (value, index, list) -> - memo: iterator.call(context, memo, value, index, list) - memo - - - # The right-associative version of reduce, also known as foldr. Uses - # JavaScript 1.8's version of reduceRight, if available. - _.reduceRight: (obj, memo, iterator, context) -> - return obj.reduceRight(_.bind(iterator, context), memo) if (obj and _.isFunction(obj.reduceRight)) - _.each _.clone(_.toArray(obj)).reverse(), (value, index) -> - memo: iterator.call(context, memo, value, index, obj) - memo - - - # Return the first value which passes a truth test. - _.detect: (obj, iterator, context) -> - result: null - _.each obj, (value, index, list) -> - if iterator.call(context, value, index, list) - result: value - _.breakLoop() - result - - - # Return all the elements that pass a truth test. Use JavaScript 1.6's - # filter(), if it exists. - _.select: (obj, iterator, context) -> - if obj and _.isFunction(obj.filter) then return obj.filter(iterator, context) - results: [] - _.each obj, (value, index, list) -> - results.push(value) if iterator.call(context, value, index, list) - results - - - # Return all the elements for which a truth test fails. - _.reject: (obj, iterator, context) -> - results: [] - _.each obj, (value, index, list) -> - results.push(value) if not iterator.call(context, value, index, list) - results - - - # Determine whether all of the elements match a truth test. Delegate to - # JavaScript 1.6's every(), if it is present. - _.all: (obj, iterator, context) -> - iterator ||= _.identity - return obj.every(iterator, context) if obj and _.isFunction(obj.every) - result: true - _.each obj, (value, index, list) -> - _.breakLoop() unless (result: result and iterator.call(context, value, index, list)) - result - - - # Determine if at least one element in the object matches a truth test. Use - # JavaScript 1.6's some(), if it exists. - _.any: (obj, iterator, context) -> - iterator ||= _.identity - return obj.some(iterator, context) if obj and _.isFunction(obj.some) - result: false - _.each obj, (value, index, list) -> - _.breakLoop() if (result: iterator.call(context, value, index, list)) - result - - - # Determine if a given value is included in the array or object, - # based on '==='. - _.include: (obj, target) -> - return _.indexOf(obj, target) isnt -1 if _.isArray(obj) - for key, val of obj - return true if val is target - false - - - # Invoke a method with arguments on every item in a collection. - _.invoke: (obj, method) -> - args: _.rest(arguments, 2) - (if method then val[method] else val).apply(val, args) for val in obj - - - # Convenience version of a common use case of map: fetching a property. - _.pluck: (obj, key) -> - _.map(obj, ((val) -> val[key])) - - - # Return the maximum item or (item-based computation). - _.max: (obj, iterator, context) -> - return Math.max.apply(Math, obj) if not iterator and _.isArray(obj) - result: {computed: -Infinity} - _.each obj, (value, index, list) -> - computed: if iterator then iterator.call(context, value, index, list) else value - computed >= result.computed and (result: {value: value, computed: computed}) - result.value - - - # Return the minimum element (or element-based computation). - _.min: (obj, iterator, context) -> - return Math.min.apply(Math, obj) if not iterator and _.isArray(obj) - result: {computed: Infinity} - _.each obj, (value, index, list) -> - computed: if iterator then iterator.call(context, value, index, list) else value - computed < result.computed and (result: {value: value, computed: computed}) - result.value - - - # Sort the object's values by a criteria produced by an iterator. - _.sortBy: (obj, iterator, context) -> - _.pluck(((_.map obj, (value, index, list) -> - {value: value, criteria: iterator.call(context, value, index, list)} - ).sort((left, right) -> - a: left.criteria; b: right.criteria - if a < b then -1 else if a > b then 1 else 0 - )), 'value') - - - # Use a comparator function to figure out at what index an object should - # be inserted so as to maintain order. Uses binary search. - _.sortedIndex: (array, obj, iterator) -> - iterator ||= _.identity - low: 0; high: array.length - while low < high - mid: (low + high) >> 1 - if iterator(array[mid]) < iterator(obj) then low: mid + 1 else high: mid - low - - - # Convert anything iterable into a real, live array. - _.toArray: (iterable) -> - return [] if (!iterable) - return iterable.toArray() if (iterable.toArray) - return iterable if (_.isArray(iterable)) - return slice.call(iterable) if (_.isArguments(iterable)) - _.values(iterable) - - - # Return the number of elements in an object. - _.size: (obj) -> _.toArray(obj).length - - - # -------------------------- Array Functions: ------------------------------ - - # Get the first element of an array. Passing "n" will return the first N - # values in the array. Aliased as "head". The "guard" check allows it to work - # with _.map. - _.first: (array, n, guard) -> - if n and not guard then slice.call(array, 0, n) else array[0] - - - # Returns everything but the first entry of the array. Aliased as "tail". - # Especially useful on the arguments object. Passing an "index" will return - # the rest of the values in the array from that index onward. The "guard" - # check allows it to work with _.map. - _.rest: (array, index, guard) -> - slice.call(array, if _.isUndefined(index) or guard then 1 else index) - - - # Get the last element of an array. - _.last: (array) -> array[array.length - 1] - - - # Trim out all falsy values from an array. - _.compact: (array) -> array[i] for i in [0...array.length] when array[i] - - - # Return a completely flattened version of an array. - _.flatten: (array) -> - _.reduce array, [], (memo, value) -> - return memo.concat(_.flatten(value)) if _.isArray(value) - memo.push(value) - memo - - - # Return a version of the array that does not contain the specified value(s). - _.without: (array) -> - values: _.rest(arguments) - val for val in _.toArray(array) when not _.include(values, val) - - - # Produce a duplicate-free version of the array. If the array has already - # been sorted, you have the option of using a faster algorithm. - _.uniq: (array, isSorted) -> - memo: [] - for el, i in _.toArray(array) - memo.push(el) if i is 0 || (if isSorted is true then _.last(memo) isnt el else not _.include(memo, el)) - memo - - - # Produce an array that contains every item shared between all the - # passed-in arrays. - _.intersect: (array) -> - rest: _.rest(arguments) - _.select _.uniq(array), (item) -> - _.all rest, (other) -> - _.indexOf(other, item) >= 0 - - - # Zip together multiple lists into a single array -- elements that share - # an index go together. - _.zip: -> - length: _.max(_.pluck(arguments, 'length')) - results: new Array(length) - for i in [0...length] - results[i]: _.pluck(arguments, String(i)) - results - - - # If the browser doesn't supply us with indexOf (I'm looking at you, MSIE), - # we need this function. Return the position of the first occurence of an - # item in an array, or -1 if the item is not included in the array. - _.indexOf: (array, item) -> - return array.indexOf(item) if array.indexOf - i: 0; l: array.length - while l - i - if array[i] is item then return i else i++ - -1 - - - # Provide JavaScript 1.6's lastIndexOf, delegating to the native function, - # if possible. - _.lastIndexOf: (array, item) -> - return array.lastIndexOf(item) if array.lastIndexOf - i: array.length - while i - if array[i] is item then return i else i-- - -1 - - - # Generate an integer Array containing an arithmetic progression. A port of - # the native Python range() function. See: - # http://docs.python.org/library/functions.html#range - _.range: (start, stop, step) -> - a: arguments - solo: a.length <= 1 - i: start: if solo then 0 else a[0]; - stop: if solo then a[0] else a[1]; - step: a[2] or 1 - len: Math.ceil((stop - start) / step) - return [] if len <= 0 - range: new Array(len) - idx: 0 - while true - return range if (if step > 0 then i - stop else stop - i) >= 0 - range[idx]: i - idx++ - i+= step - - - # ----------------------- Function Functions: ----------------------------- - - # Create a function bound to a given object (assigning 'this', and arguments, - # optionally). Binding with arguments is also known as 'curry'. - _.bind: (func, obj) -> - args: _.rest(arguments, 2) - -> func.apply(obj or root, args.concat(arguments)) - - - # Bind all of an object's methods to that object. Useful for ensuring that - # all callbacks defined on an object belong to it. - _.bindAll: (obj) -> - funcs: if arguments.length > 1 then _.rest(arguments) else _.functions(obj) - _.each(funcs, (f) -> obj[f]: _.bind(obj[f], obj)) - obj - - - # Delays a function for the given number of milliseconds, and then calls - # it with the arguments supplied. - _.delay: (func, wait) -> - args: _.rest(arguments, 2) - setTimeout((-> func.apply(func, args)), wait) - - - # Defers a function, scheduling it to run after the current call stack has - # cleared. - _.defer: (func) -> - _.delay.apply(_, [func, 1].concat(_.rest(arguments))) - - - # Returns the first function passed as an argument to the second, - # allowing you to adjust arguments, run code before and after, and - # conditionally execute the original function. - _.wrap: (func, wrapper) -> - -> wrapper.apply(wrapper, [func].concat(arguments)) - - - # Returns a function that is the composition of a list of functions, each - # consuming the return value of the function that follows. - _.compose: -> - funcs: arguments - -> - args: arguments - for i in [(funcs.length - 1)..0] - args: [funcs[i].apply(this, args)] - args[0] - - - # ------------------------- Object Functions: ---------------------------- - - # Retrieve the names of an object's properties. - _.keys: (obj) -> - return _.range(0, obj.length) if _.isArray(obj) - key for key, val of obj - - - # Retrieve the values of an object's properties. - _.values: (obj) -> - _.map(obj, _.identity) - - - # Return a sorted list of the function names available in Underscore. - _.functions: (obj) -> - _.select(_.keys(obj), (key) -> _.isFunction(obj[key])).sort() - - - # Extend a given object with all of the properties in a source object. - _.extend: (destination, source) -> - for key, val of source - destination[key]: val - destination - - - # Create a (shallow-cloned) duplicate of an object. - _.clone: (obj) -> - return obj.slice(0) if _.isArray(obj) - _.extend({}, obj) - - - # Invokes interceptor with the obj, and then returns obj. - # The primary purpose of this method is to "tap into" a method chain, in order to perform operations on intermediate results within the chain. - _.tap: (obj, interceptor) -> - interceptor(obj) - obj - - - # Perform a deep comparison to check if two objects are equal. - _.isEqual: (a, b) -> - # Check object identity. - return true if a is b - # Different types? - atype: typeof(a); btype: typeof(b) - return false if atype isnt btype - # Basic equality test (watch out for coercions). - return true if `a == b` - # One is falsy and the other truthy. - return false if (!a and b) or (a and !b) - # One of them implements an isEqual()? - return a.isEqual(b) if a.isEqual - # Check dates' integer values. - return a.getTime() is b.getTime() if _.isDate(a) and _.isDate(b) - # Both are NaN? - return true if _.isNaN(a) and _.isNaN(b) - # Compare regular expressions. - if _.isRegExp(a) and _.isRegExp(b) - return a.source is b.source and - a.global is b.global and - a.ignoreCase is b.ignoreCase and - a.multiline is b.multiline - # If a is not an object by this point, we can't handle it. - return false if atype isnt 'object' - # Check for different array lengths before comparing contents. - return false if a.length and (a.length isnt b.length) - # Nothing else worked, deep compare the contents. - aKeys: _.keys(a); bKeys: _.keys(b) - # Different object sizes? - return false if aKeys.length isnt bKeys.length - # Recursive comparison of contents. - # for (var key in a) if (!_.isEqual(a[key], b[key])) return false; - return true - - - # Is a given array or object empty? - _.isEmpty: (obj) -> _.keys(obj).length is 0 - - - # Is a given value a DOM element? - _.isElement: (obj) -> obj and obj.nodeType is 1 - - - # Is a given value an array? - _.isArray: (obj) -> !!(obj and obj.concat and obj.unshift) - - - # Is a given variable an arguments object? - _.isArguments: (obj) -> obj and _.isNumber(obj.length) and not obj.concat and - not obj.substr and not obj.apply and not propertyIsEnumerable.call(obj, 'length') - - - # Is the given value a function? - _.isFunction: (obj) -> !!(obj and obj.constructor and obj.call and obj.apply) - - - # Is the given value a string? - _.isString: (obj) -> !!(obj is '' or (obj and obj.charCodeAt and obj.substr)) - - - # Is a given value a number? - _.isNumber: (obj) -> (obj is +obj) or toString.call(obj) is '[object Number]' - - - # Is a given value a Date? - _.isDate: (obj) -> !!(obj and obj.getTimezoneOffset and obj.setUTCFullYear) - - - # Is the given value a regular expression? - _.isRegExp: (obj) -> !!(obj and obj.exec and (obj.ignoreCase or obj.ignoreCase is false)) - - - # Is the given value NaN -- this one is interesting. NaN != NaN, and - # isNaN(undefined) == true, so we make sure it's a number first. - _.isNaN: (obj) -> _.isNumber(obj) and window.isNaN(obj) - - - # Is a given value equal to null? - _.isNull: (obj) -> obj is null - - - # Is a given variable undefined? - _.isUndefined: (obj) -> typeof obj is 'undefined' - - - # -------------------------- Utility Functions: -------------------------- - - # Run Underscore.js in noConflict mode, returning the '_' variable to its - # previous owner. Returns a reference to the Underscore object. - _.noConflict: -> - root._: previousUnderscore - this - - - # Keep the identity function around for default iterators. - _.identity: (value) -> value - - - # Break out of the middle of an iteration. - _.breakLoop: -> throw breaker - - - # Generate a unique integer id (unique within the entire client session). - # Useful for temporary DOM ids. - idCounter: 0 - _.uniqueId: (prefix) -> - (prefix or '') + idCounter++ - - - # By default, Underscore uses ERB-style template delimiters, change the - # following template settings to use alternative delimiters. - _.templateSettings: { - start: '<%' - end: '%>' - interpolate: /<%=(.+?)%>/g - } - - - # JavaScript templating a-la ERB, pilfered from John Resig's - # "Secrets of the JavaScript Ninja", page 83. - # Single-quotea fix from Rick Strahl's version. - _.template: (str, data) -> - c: _.templateSettings - fn: new Function 'obj', - 'var p=[],print=function(){p.push.apply(p,arguments);};' + - 'with(obj){p.push(\'' + - str.replace(/[\r\t\n]/g, " ") - .replace(new RegExp("'(?=[^"+c.end[0]+"]*"+c.end+")","g"),"\t") - .split("'").join("\\'") - .split("\t").join("'") - .replace(c.interpolate, "',$1,'") - .split(c.start).join("');") - .split(c.end).join("p.push('") + - "');}return p.join('');" - if data then fn(data) else fn - - - # ------------------------------- Aliases ---------------------------------- - - _.forEach: _.each - _.foldl: _.inject: _.reduce - _.foldr: _.reduceRight - _.filter: _.select - _.every: _.all - _.some: _.any - _.head: _.first - _.tail: _.rest - _.methods: _.functions - - - # /*------------------------ Setup the OOP Wrapper: --------------------------*/ - - # Helper function to continue chaining intermediate results. - result: (obj, chain) -> - if chain then _(obj).chain() else obj - - - # Add all of the Underscore functions to the wrapper object. - _.each _.functions(_), (name) -> - method: _[name] - wrapper.prototype[name]: -> - unshift.call(arguments, this._wrapped) - result(method.apply(_, arguments), this._chain) - - - # Add all mutator Array functions to the wrapper. - _.each ['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], (name) -> - method: Array.prototype[name] - wrapper.prototype[name]: -> - method.apply(this._wrapped, arguments) - result(this._wrapped, this._chain) - - - # Add all accessor Array functions to the wrapper. - _.each ['concat', 'join', 'slice'], (name) -> - method: Array.prototype[name] - wrapper.prototype[name]: -> - result(method.apply(this._wrapped, arguments), this._chain) - - - # Start chaining a wrapped Underscore object. - wrapper::chain: -> - this._chain: true - this - - - # Extracts the result from a wrapped and chained object. - wrapper::value: -> this._wrapped diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/unicode.applescript b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/unicode.applescript deleted file mode 100644 index 8cc6c6f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/unicode.applescript +++ /dev/null @@ -1,5 +0,0 @@ -set jp to "日本語" - -set ru to "РуÑÑкий" - -jp & " and " & ru -- returns "日本語 and РуÑÑкий" diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/unicode.go b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/unicode.go deleted file mode 100644 index d4bef4d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/unicode.go +++ /dev/null @@ -1,10 +0,0 @@ -package main - -import "fmt" - -func main() { - 世界 := "Hello, world!" - ã•よã†ãªã‚‰ := "Goodbye, world!" - fmt.Println(世界) - fmt.Println(ã•よã†ãªã‚‰) -} diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/unicodedoc.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/unicodedoc.py deleted file mode 100644 index 9d3db0c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/unicodedoc.py +++ /dev/null @@ -1,11 +0,0 @@ -def foo(): - ur"""unicode-raw""" - -def bar(): - u"""unicode""" - -def baz(): - r'raw' - -def zap(): - """docstring""" diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/unix-io.lid b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/unix-io.lid deleted file mode 100644 index 617fcaa..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/unix-io.lid +++ /dev/null @@ -1,37 +0,0 @@ -Library: io -Synopsis: A portable IO library -Author: Gail Zacharias -Files: library - streams/defs - streams/stream - streams/sequence-stream - streams/native-buffer - streams/buffer - streams/typed-stream - streams/external-stream - streams/buffered-stream - streams/convenience - streams/wrapper-stream - streams/cleanup-streams - streams/native-speed - streams/async-writes - streams/file-stream - streams/multi-buffered-streams - pprint - print - print-double-integer-kludge - format - buffered-format - format-condition - unix-file-accessor - unix-standard-io - unix-interface - format-out -C-Source-Files: unix-portability.c -Major-Version: 2 -Minor-Version: 1 -Target-Type: dll -Copyright: Original Code is Copyright (c) 1995-2004 Functional Objects, Inc. - All rights reserved. -License: See License.txt in this distribution for details. -Warranty: Distributed WITHOUT WARRANTY OF ANY KIND diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/vbnet_test.bas b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/vbnet_test.bas deleted file mode 100644 index af5f257..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/vbnet_test.bas +++ /dev/null @@ -1,29 +0,0 @@ -Public Class Form1 - Inherits System.Windows.Forms.Form - - Private t As New System.Timers.Timer(2000) - - Private Sub Form1_Load(ByVal sender As Object, _ - ByVal e As System.EventArgs) Handles MyBase.Load - - AddHandler t.Elapsed, AddressOf TimerFired - End Sub - - Private Sub btnStart_Click(ByVal sender As System.Object, _ - ByVal e As System.EventArgs) Handles btnStart.Click - - t.Enabled = True - End Sub - - Private Sub btnStop_Click(ByVal sender As System.Object, _ - ByVal e As System.EventArgs) Handles btnStop.Click - - t.Enabled = False - End Sub - - Public Sub TimerFired(ByVal sender As Object, _ - ByVal e As System.Timers.ElapsedEventArgs) - - Label1.Text = "Signal Time = " & e.SignalTime.ToString - End Sub -End Class diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/vctreestatus_hg b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/vctreestatus_hg deleted file mode 100644 index 193ed80..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/vctreestatus_hg +++ /dev/null @@ -1,4 +0,0 @@ -M LICENSE -M setup.py -! setup.cfg -? vctreestatus_hg diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/vimrc b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/vimrc deleted file mode 100644 index d2f9cd1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/vimrc +++ /dev/null @@ -1,21 +0,0 @@ -" A comment - -:py print "py" -::pyt print 'pyt' - pyth print '''pyth''' - : pytho print "pytho" -python print """python""" - - : : python<, .5 } - - #declare Index2 = Index2 + 1; - #end - - #declare Index1 = Index1 + 1; -#end diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/wiki.factor b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/wiki.factor deleted file mode 100644 index d046e91..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/wiki.factor +++ /dev/null @@ -1,384 +0,0 @@ -! Copyright (C) 2008 Slava Pestov -! See http://factorcode.org/license.txt for BSD license. -USING: accessors kernel hashtables calendar random assocs -namespaces make splitting sequences sorting math.order present -io.files io.directories io.encodings.ascii -syndication farkup -html.components html.forms -http.server -http.server.dispatchers -furnace.actions -furnace.utilities -furnace.redirection -furnace.auth -furnace.auth.login -furnace.boilerplate -furnace.syndication -validators -db.types db.tuples lcs urls ; -IN: webapps.wiki - -: wiki-url ( rest path -- url ) - [ "$wiki/" % % "/" % present % ] "" make - swap >>path ; - -: view-url ( title -- url ) "view" wiki-url ; - -: edit-url ( title -- url ) "edit" wiki-url ; - -: revisions-url ( title -- url ) "revisions" wiki-url ; - -: revision-url ( id -- url ) "revision" wiki-url ; - -: user-edits-url ( author -- url ) "user-edits" wiki-url ; - -TUPLE: wiki < dispatcher ; - -SYMBOL: can-delete-wiki-articles? - -can-delete-wiki-articles? define-capability - -TUPLE: article title revision ; - -article "ARTICLES" { - { "title" "TITLE" { VARCHAR 256 } +not-null+ +user-assigned-id+ } - { "revision" "REVISION" INTEGER +not-null+ } ! revision id -} define-persistent - -:
    ( title -- article ) article new swap >>title ; - -TUPLE: revision id title author date content description ; - -revision "REVISIONS" { - { "id" "ID" INTEGER +db-assigned-id+ } - { "title" "TITLE" { VARCHAR 256 } +not-null+ } ! article id - { "author" "AUTHOR" { VARCHAR 256 } +not-null+ } ! uid - { "date" "DATE" TIMESTAMP +not-null+ } - { "content" "CONTENT" TEXT +not-null+ } - { "description" "DESCRIPTION" TEXT } -} define-persistent - -M: revision feed-entry-title - [ title>> ] [ drop " by " ] [ author>> ] tri 3append ; - -M: revision feed-entry-date date>> ; - -M: revision feed-entry-url id>> revision-url ; - -: reverse-chronological-order ( seq -- sorted ) - [ date>> ] inv-sort-with ; - -: ( id -- revision ) - revision new swap >>id ; - -: validate-title ( -- ) - { { "title" [ v-one-line ] } } validate-params ; - -: validate-author ( -- ) - { { "author" [ v-username ] } } validate-params ; - -: ( responder -- responder' ) - - { wiki "page-common" } >>template ; - -: ( -- action ) - - [ "Front Page" view-url ] >>display ; - -: latest-revision ( title -- revision/f ) -
    select-tuple - dup [ revision>> select-tuple ] when ; - -: ( -- action ) - - - "title" >>rest - - [ validate-title ] >>init - - [ - "title" value dup latest-revision [ - from-object - { wiki "view" } - ] [ - edit-url - ] ?if - ] >>display - - ; - -: ( -- action ) - - - "id" >>rest - - [ - validate-integer-id - "id" value - select-tuple from-object - ] >>init - - { wiki "view" } >>template - - ; - -: ( -- action ) - - [ - article new select-tuples random - [ title>> ] [ "Front Page" ] if* - view-url - ] >>display ; - -: amend-article ( revision article -- ) - swap id>> >>revision update-tuple ; - -: add-article ( revision -- ) - [ title>> ] [ id>> ] bi article boa insert-tuple ; - -: add-revision ( revision -- ) - [ insert-tuple ] - [ - dup title>>
    select-tuple - [ amend-article ] [ add-article ] if* - ] - bi ; - -: ( -- action ) - - - "title" >>rest - - [ - validate-title - - "title" value
    select-tuple - [ revision>> select-tuple ] - [ f "title" value >>title ] - if* - - [ title>> "title" set-value ] - [ content>> "content" set-value ] - bi - ] >>init - - { wiki "edit" } >>template - - ; - -: ( -- action ) - - [ - validate-title - - { - { "content" [ v-required ] } - { "description" [ [ v-one-line ] v-optional ] } - } validate-params - - f - "title" value >>title - now >>date - username >>author - "content" value >>content - "description" value >>description - [ add-revision ] [ title>> view-url ] bi - ] >>submit - - - "edit wiki articles" >>description ; - -: ( responder -- responder ) - - { wiki "revisions-common" } >>template ; - -: list-revisions ( -- seq ) - f "title" value >>title select-tuples - reverse-chronological-order ; - -: ( -- action ) - - - "title" >>rest - - [ - validate-title - list-revisions "revisions" set-value - ] >>init - - { wiki "revisions" } >>template - - - ; - -: ( -- action ) - - - "title" >>rest - - [ validate-title ] >>init - - [ "Revisions of " "title" value append ] >>title - - [ "title" value revisions-url ] >>url - - [ list-revisions ] >>entries ; - -: rollback-description ( description -- description' ) - [ "Rollback of '" "'" surround ] [ "Rollback" ] if* ; - -: ( -- action ) - - - [ validate-integer-id ] >>validate - - [ - "id" value select-tuple - f >>id - now >>date - username >>author - [ rollback-description ] change-description - [ add-revision ] - [ title>> revisions-url ] bi - ] >>submit - - - "rollback wiki articles" >>description ; - -: list-changes ( -- seq ) - f select-tuples - reverse-chronological-order ; - -: ( -- action ) - - [ list-changes "revisions" set-value ] >>init - { wiki "changes" } >>template - - ; - -: ( -- action ) - - [ URL" $wiki/changes" ] >>url - [ "All changes" ] >>title - [ list-changes ] >>entries ; - -: ( -- action ) - - - [ validate-title ] >>validate - - [ - "title" value
    delete-tuples - f "title" value >>title delete-tuples - URL" $wiki" - ] >>submit - - - "delete wiki articles" >>description - { can-delete-wiki-articles? } >>capabilities ; - -: ( -- action ) - - - [ - { - { "old-id" [ v-integer ] } - { "new-id" [ v-integer ] } - } validate-params - - "old-id" "new-id" - [ value select-tuple ] bi@ - [ - over title>> "title" set-value - [ "old" [ from-object ] nest-form ] - [ "new" [ from-object ] nest-form ] - bi* - ] - [ [ content>> string-lines ] bi@ diff "diff" set-value ] - 2bi - ] >>init - - { wiki "diff" } >>template - - ; - -: ( -- action ) - - - [ - f
    select-tuples - [ title>> ] sort-with - "articles" set-value - ] >>init - - { wiki "articles" } >>template ; - -: list-user-edits ( -- seq ) - f "author" value >>author select-tuples - reverse-chronological-order ; - -: ( -- action ) - - - "author" >>rest - - [ - validate-author - list-user-edits "revisions" set-value - ] >>init - - { wiki "user-edits" } >>template - - ; - -: ( -- action ) - - "author" >>rest - [ validate-author ] >>init - [ "Edits by " "author" value append ] >>title - [ "author" value user-edits-url ] >>url - [ list-user-edits ] >>entries ; - -: init-sidebars ( -- ) - "Contents" latest-revision [ "contents" [ from-object ] nest-form ] when* - "Footer" latest-revision [ "footer" [ from-object ] nest-form ] when* ; - -: init-relative-link-prefix ( -- ) - URL" $wiki/view/" adjust-url present relative-link-prefix set ; - -: ( -- dispatcher ) - wiki new-dispatcher - "" add-responder - "view" add-responder - "revision" add-responder - "random" add-responder - "revisions" add-responder - "revisions.atom" add-responder - "diff" add-responder - "edit" add-responder - "submit" add-responder - "rollback" add-responder - "user-edits" add-responder - "articles" add-responder - "changes" add-responder - "user-edits.atom" add-responder - "changes.atom" add-responder - "delete" add-responder - - [ init-sidebars init-relative-link-prefix ] >>init - { wiki "wiki-common" } >>template ; - -: init-wiki ( -- ) - "resource:extra/webapps/wiki/initial-content" [ - [ - dup ".txt" ?tail [ - swap ascii file-contents - f - swap >>content - swap >>title - "slava" >>author - now >>date - add-revision - ] [ 2drop ] if - ] each - ] with-directory-files ; \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/xml_example b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/xml_example deleted file mode 100644 index e657e56..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/xml_example +++ /dev/null @@ -1,1897 +0,0 @@ - - - - - - abort - abs - abstract - accept - access - aliased - all - and - array - at - begin - body - constant - declare - delay - delta - digits - do - else - elsif - end - entry - exception - exit - for - function - generic - goto - in - is - limited - mod - new - not - null - of - or - others - out - package - pragma - private - procedure - protected - raise - range - rem - record - renames - requeue - return - reverse - separate - subtype - tagged - task - terminate - then - type - until - use - when - while - with - xor - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BEGIN - END - if - else - while - do - for - in - continue - break - print - printf - getline - function - return - next - exit - - - ARGC - ARGV - CONVFMT - ENVIRON - FILENAME - FNR - FS - NF - NR - OFMT - OFS - ORS - RS - RSTART - RLENGTH - SUBSEP - - - gsub - index - length - match - split - sprintf - sub - substr - tolower - toupper - atan2 - cos - exp - int - log - rand - sin - sqrt - srand - close - fflush - system - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - break - case - else - esac - exit - export - for - function - in - return - select - then - until - while - . - done - do - elif - fi - if - - - - cp - date - echo - eval - dcop - dcopstart - dcopfind - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - break - case - continue - default - do - else - enum - extern - for - goto - if - inline - return - sizeof - struct - switch - typedef - union - while - - - auto - char - const - double - float - int - long - register - restrict - short - signed - static - unsigned - void - volatile - _Imaginary - _Complex - _Bool - - - FIXME - TODO - ### - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - aaa - access-list - address - alias - arp - async-bootp - banner - boot - bridge - buffers - busy-message - call-history-mib - cdp - chat-script - class-map - clock - cns - config-register - controller - crypto - default - default-value - dialer - dialer-list - dnsix-dmdp - dnsix-nat - downward-compatible-config - enable - end - exception - exit - file - frame-relay - help - hostname - interface - ip - isdn - isdn-mib - kerberos - key - line - logging - login-string - map-class - map-list - memory-size - menu - modemcap - multilink - netbios - no - ntp - partition - policy-map - priority-list - privilege - process-max-time - prompt - queue-list - resume-string - rlogin - rmon - route-map - router - rtr - scheduler - service - snmp-server - sntp - stackmaker - state-machine - subscriber-policy - tacacs-server - template - terminal-queue - tftp-server - time-range - username - virtual-profile - virtual-template - vpdn - vpdn-group - x25 - x29 - - - accounting - accounting-list - accounting-threshold - accounting-transits - address-pool - as-path - audit - auth-proxy - authentication - authorization - bgp-community - bootp - cef - classless - community-list - default-gateway - default-network - dhcp - dhcp-server - domain-list - domain-lookup - domain-name - dvmrp - exec-callback - extcommunity-list - finger - flow-aggregation - flow-cache - flow-export - forward-protocol - ftp - gratuitous-arps - host - host-routing - hp-host - http - icmp - inspect - local - mrm - mroute - msdp - multicast - multicast-routing - name-server - nat - new-model - ospf - password - password-encryption - pgm - pim - port-map - prefix-list - radius - rcmd - reflexive-list - route - routing - rsvp - rtcp - sap - sdr - security - source-route - subnet-zero - tacacs - tcp - tcp-small-servers - telnet - tftp - timestamps - udp-small-servers - vrf - wccp - - - accounting - accounting-list - accounting-threshold - accounting-transits - address-pool - as-path - audit - auth-proxy - authentication - authorization - bgp-community - bootp - cef - classless - community-list - default-gateway - default-network - dhcp - dhcp-server - domain-list - domain-lookup - domain-name - dvmrp - exec-callback - extcommunity-list - finger - flow-aggregation - flow-cache - flow-export - forward-protocol - ftp - gratuitous-arps - host - host-routing - hp-host - http - icmp - inspect - local - mrm - mroute - msdp - multicast - multicast-routing - name-server - nat - new-model - ospf - password - password-encryption - pgm - pim - port-map - prefix-list - radius - rcmd - reflexive-list - route - routing - rsvp - rtcp - sap - sdr - security - source-route - subnet-zero - tacacs - tcp - tcp-small-servers - telnet - tftp - timestamps - udp-small-servers - vrf - wccp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - if - else - for - in - while - do - continue - break - with - try - catch - switch - case - new - var - function - return - this - delete - true - false - void - throw - typeof - const - default - - - - - - Anchor - Applet - Area - Array - Boolean - Button - Checkbox - Date - Document - Event - FileUpload - Form - Frame - Function - Hidden - History - Image - Layer - Linke - Location - Math - Navigator - Number - Object - Option - Password - Radio - RegExp - Reset - Screen - Select - String - Submit - Text - Textarea - Window - - - - - - abs - acos - alert - anchor - apply - asin - atan - atan2 - back - blur - call - captureEvents - ceil - charAt - charCodeAt - clearInterval - clearTimeout - click - close - compile - concat - confirm - cos - disableExternalCapture - enableExternalCapture - eval - exec - exp - find - floor - focus - forward - fromCharCode - getDate - getDay - getFullYear - getHours - getMilliseconds - getMinutes - getMonth - getSeconds - getSelection - getTime - getTimezoneOffset - getUTCDate - getUTCDay - getUTCFullYear - getUTCHours - getUTCMilliseconds - getUTCMinutes - getUTCMonth - getUTCSeconds - go - handleEvent - home - indexOf - javaEnabled - join - lastIndexOf - link - load - log - match - max - min - moveAbove - moveBelow - moveBy - moveTo - moveToAbsolute - open - parse - plugins.refresh - pop - pow - preference - print - prompt - push - random - releaseEvents - reload - replace - reset - resizeBy - resizeTo - reverse - round - routeEvent - scrollBy - scrollTo - search - select - setDate - setFullYear - setHours - setInterval - setMilliseconds - setMinutes - setMonth - setSeconds - setTime - setTimeout - setUTCDate - setUTCFullYear - setUTCHours - setUTCMilliseconds - setUTCMinutes - setUTCMonth - setUTCSeconds - shift - sin - slice - sort - splice - split - sqrt - stop - String formatting - submit - substr - substring - taintEnabled - tan - test - toLocaleString - toLowerCase - toSource - toString - toUpperCase - toUTCString - unshift - unwatch - UTC - valueOf - watch - write - writeln - - - - - - break - case - catch - continue - default - do - else - for - function - if - in - return - switch - try - var - while - - - - - - Abs - ACos - ArrayAppend - ArrayAvg - ArrayClear - ArrayDeleteAt - ArrayInsertAt - ArrayIsEmpty - ArrayLen - ArrayMax - ArrayMin - ArrayNew - ArrayPrepend - ArrayResize - ArraySet - ArraySort - ArraySum - ArraySwap - ArrayToList - Asc - ASin - Atn - BitAnd - BitMaskClear - BitMaskRead - BitMaskSet - BitNot - BitOr - BitSHLN - BitSHRN - BitXor - Ceiling - Chr - CJustify - Compare - CompareNoCase - Cos - CreateDate - CreateDateTime - CreateObject - CreateODBCDate - CreateODBCDateTime - CreateODBCTime - CreateTime - CreateTimeSpan - CreateUUID - DateAdd - DateCompare - DateConvert - DateDiff - DateFormat - DatePart - Day - DayOfWeek - DayOfWeekAsString - DayOfYear - DaysInMonth - DaysInYear - DE - DecimalFormat - DecrementValue - Decrypt - DeleteClientVariable - DirectoryExists - DollarFormat - Duplicate - Encrypt - Evaluate - Exp - ExpandPath - FileExists - Find - FindNoCase - FindOneOf - FirstDayOfMonth - Fix - FormatBaseN - GetAuthUser - GetBaseTagData - GetBaseTagList - GetBaseTemplatePath - GetClientVariablesList - GetCurrentTemplatePath - GetDirectoryFromPath - GetException - GetFileFromPath - GetFunctionList - GetHttpRequestData - GetHttpTimeString - GetK2ServerDocCount - GetK2ServerDocCountLimit - GetLocale - GetMetaData - GetMetricData - GetPageContext - GetProfileSections - GetProfileString - GetServiceSettings - GetTempDirectory - GetTempFile - GetTemplatePath - GetTickCount - GetTimeZoneInfo - GetToken - Hash - Hour - HTMLCodeFormat - HTMLEditFormat - IIf - IncrementValue - InputBaseN - Insert - Int - IsArray - IsBinary - IsBoolean - IsCustomFunction - IsDate - IsDebugMode - IsDefined - IsK2ServerABroker - IsK2ServerDocCountExceeded - IsK2ServerOnline - IsLeapYear - IsNumeric - IsNumericDate - IsObject - IsQuery - IsSimpleValue - IsStruct - IsUserInRole - IsWDDX - IsXmlDoc - IsXmlElement - IsXmlRoot - JavaCast - JSStringFormat - LCase - Left - Len - ListAppend - ListChangeDelims - ListContains - ListContainsNoCase - ListDeleteAt - ListFind - ListFindNoCase - ListFirst - ListGetAt - ListInsertAt - ListLast - ListLen - ListPrepend - ListQualify - ListRest - ListSetAt - ListSort - ListToArray - ListValueCount - ListValueCountNoCase - LJustify - Log - Log10 - LSCurrencyFormat - LSDateFormat - LSEuroCurrencyFormat - LSIsCurrency - LSIsDate - LSIsNumeric - LSNumberFormat - LSParseCurrency - LSParseDateTime - LSParseEuroCurrency - LSParseNumber - LSTimeFormat - LTrim - Max - Mid - Min - Minute - Month - MonthAsString - Now - NumberFormat - ParagraphFormat - ParameterExists - ParseDateTime - Pi - PreserveSingleQuotes - Quarter - QueryAddColumn - QueryAddRow - QueryNew - QuerySetCell - QuotedValueList - Rand - Randomize - RandRange - REFind - REFindNoCase - RemoveChars - RepeatString - Replace - ReplaceList - ReplaceNoCase - REReplace - REReplaceNoCase - Reverse - Right - RJustify - Round - RTrim - Second - SetEncoding - SetLocale - SetProfileString - SetVariable - Sgn - Sin - SpanExcluding - SpanIncluding - Sqr - StripCR - StructAppend - StructClear - StructCopy - StructCount - StructDelete - StructFind - StructFindKey - StructFindValue - StructGet - StructInsert - StructIsEmpty - StructKeyArray - StructKeyExists - StructKeyList - StructNew - StructSort - StructUpdate - Tan - TimeFormat - ToBase64 - ToBinary - ToString - Trim - UCase - URLDecode - URLEncodedFormat - URLSessionFormat - Val - ValueList - Week - WriteOutput - XmlChildPos - XmlElemNew - XmlFormat - XmlNew - XmlParse - XmlSearch - XmlTransform - Year - YesNoFormat - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BEGIN - BY - CASE - CLOSE - CONST - DO - ELSE - ELSIF - END - FOR - IF - IMPORT - LOOP - MODULE - NEW - OF - OUT - PROCEDURE - REPEAT - THEN - TO - TYPE - UNTIL - VAR - WHILE - WITH - - - ASSERT - EXIT - HALT - RETURN - - - ANYPTR - ANYREC - ARRAY - BOOLEAN - SHORTCHAR - CHAR - BYTE - SHORTINT - INTEGER - LONGINT - POINTER - RECORD - SHORTREAL - REAL - SET - - - ABSTRACT - EMPTY - EXTENSIBLE - LIMITED - - - ABS - ASH - BITS - CAP - CHR - DEC - ENTIER - EXCL - INC - INCL - LEN - LONG - MAX - MIN - ODD - ORD - SHORT - SIZE - - - FALSE - INF - NIL - TRUE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/zmlrpc.f90 b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/zmlrpc.f90 deleted file mode 100644 index 441497b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/examplefiles/zmlrpc.f90 +++ /dev/null @@ -1,798 +0,0 @@ -!!$ -!!$ -!!$ MD2P4 -!!$ Multilevel Domain Decomposition Parallel Preconditioner Package for PSBLAS -!!$ for -!!$ Parallel Sparse BLAS v2.0 -!!$ (C) Copyright 2006 Salvatore Filippone University of Rome Tor Vergata -!!$ Alfredo Buttari University of Rome Tor Vergata -!!$ Daniela Di Serafino II University of Naples -!!$ Pasqua D'Ambra ICAR-CNR -!!$ -!!$ Redistribution and use in source and binary forms, with or without -!!$ modification, are permitted provided that the following conditions -!!$ are met: -!!$ 1. Redistributions of source code must retain the above copyright -!!$ notice, this list of conditions and the following disclaimer. -!!$ 2. Redistributions in binary form must reproduce the above copyright -!!$ notice, this list of conditions, and the following disclaimer in the -!!$ documentation and/or other materials provided with the distribution. -!!$ 3. The name of the MD2P4 group or the names of its contributors may -!!$ not be used to endorse or promote products derived from this -!!$ software without specific written permission. -!!$ -!!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -!!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -!!$ TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -!!$ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE MD2P4 GROUP OR ITS CONTRIBUTORS -!!$ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -!!$ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -!!$ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -!!$ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -!!$ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -!!$ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -!!$ POSSIBILITY OF SUCH DAMAGE. -!!$ -!!$ -subroutine psb_zmlprc_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info) - ! - ! Compute Y <- beta*Y + alpha*K^-1 X - ! where K is a multilevel preconditioner stored in baseprecv - ! - ! cfr.: Smith, Biorstad & Gropp - ! Domain Decomposition - ! Cambridge Univ. Press - ! - ! To each level I there corresponds a matrix A(I) and a preconditioner K(I) - ! - ! A notational difference: in the DD reference above the preconditioner for - ! a given level K(I) is written out as a sum over the subdomains - ! - ! SUM_k(R_k^T A_k R_k) - ! - ! whereas in this code the sum is implicit in the parallelization, - ! i.e. each process takes care of one subdomain, and for each level we have - ! as many subdomains as there are processes (except for the coarsest level where - ! we might have a replicated index space). Thus the sum apparently disappears - ! from our code, but only apparently, because it is implicit in the call - ! to psb_baseprc_aply. - ! - ! A bit of description of the baseprecv(:) data structure: - ! 1. Number of levels = NLEV = size(baseprecv(:)) - ! 2. baseprecv(ilev)%av(:) sparse matrices needed for the current level. - ! Includes: - ! 2.1.: baseprecv(ilev)%av(l_pr_) L factor of ILU preconditioners - ! 2.2.: baseprecv(ilev)%av(u_pr_) U factor of ILU preconditioners - ! 2.3.: baseprecv(ilev)%av(ap_nd_) Off-diagonal part of A for Jacobi sweeps - ! 2.4.: baseprecv(ilev)%av(ac_) Aggregated matrix of level ILEV - ! 2.5.: baseprecv(ilev)%av(sm_pr_t_) Smoother prolongator transpose; maps vectors - ! (ilev-1) ---> (ilev) - ! 2.6.: baseprecv(ilev)%av(sm_pr_) Smoother prolongator; maps vectors - ! (ilev) ---> (ilev-1) - ! Shouldn't we keep just one of them and handle transpose in the sparse BLAS? maybe - ! - ! 3. baseprecv(ilev)%desc_data comm descriptor for level ILEV - ! 4. baseprecv(ilev)%base_a Pointer (really a pointer!) to the base matrix - ! of the current level, i.e.: if ILEV=1 then A - ! else the aggregated matrix av(ac_); so we have - ! a unified treatment of residuals. Need this to - ! avoid passing explicitly matrix A to the - ! outer prec. routine - ! 5. baseprecv(ilev)%mlia The aggregation map from (ilev-1)-->(ilev) - ! if no smoother, it is used instead of sm_pr_ - ! 6. baseprecv(ilev)%nlaggr Number of aggregates on the various procs. - ! - - use psb_serial_mod - use psb_descriptor_type - use psb_prec_type - use psb_psblas_mod - use psb_penv_mod - use psb_const_mod - use psb_error_mod - use psb_penv_mod - implicit none - - type(psb_desc_type),intent(in) :: desc_data - type(psb_zbaseprc_type), intent(in) :: baseprecv(:) - complex(kind(1.d0)),intent(in) :: alpha,beta - complex(kind(1.d0)),intent(inout) :: x(:), y(:) - character :: trans - complex(kind(1.d0)),target :: work(:) - integer, intent(out) :: info - - - ! Local variables - integer :: n_row,n_col - complex(kind(1.d0)), allocatable :: tx(:),ty(:),t2l(:),w2l(:),& - & x2l(:),b2l(:),tz(:),tty(:) - character ::diagl, diagu - integer :: ictxt,np,me,i, isz, nrg,nr2l,err_act, iptype, int_err(5) - real(kind(1.d0)) :: omega - real(kind(1.d0)) :: t1, t2, t3, t4, t5, t6, t7, mpi_wtime - logical, parameter :: debug=.false., debugprt=.false. - integer :: ismth, nlev, ilev - external mpi_wtime - character(len=20) :: name, ch_err - - type psb_mlprec_wrk_type - complex(kind(1.d0)), pointer :: tx(:)=>null(),ty(:)=>null(),& - & x2l(:)=>null(),y2l(:)=>null(),& - & b2l(:)=>null(),tty(:)=>null() - end type psb_mlprec_wrk_type - type(psb_mlprec_wrk_type), pointer :: mlprec_wrk(:) - - interface psb_baseprc_aply - subroutine psb_zbaseprc_aply(alpha,prec,x,beta,y,desc_data,trans,work,info) - use psb_descriptor_type - use psb_prec_type - type(psb_desc_type),intent(in) :: desc_data - type(psb_zbaseprc_type), intent(in) :: prec - complex(kind(1.d0)),intent(inout) :: x(:), y(:) - complex(kind(1.d0)),intent(in) :: alpha,beta - character(len=1) :: trans - complex(kind(1.d0)),target :: work(:) - integer, intent(out) :: info - end subroutine psb_zbaseprc_aply - end interface - - name='psb_mlprc_aply' - info = 0 - call psb_erractionsave(err_act) - - - ictxt=desc_data%matrix_data(psb_ctxt_) - call psb_info(ictxt, me, np) - - nlev = size(baseprecv) - allocate(mlprec_wrk(nlev),stat=info) - if (info /= 0) then - call psb_errpush(4010,name,a_err='Allocate') - goto 9999 - end if - - - select case(baseprecv(2)%iprcparm(ml_type_)) - - case(no_ml_) - ! Should not really get here. - call psb_errpush(4010,name,a_err='no_ml_ in mlprc_aply?') - goto 9999 - - - case(add_ml_prec_) - - - ! - ! Additive is very simple. - ! 1. X(1) = Xext - ! 2. DO ILEV=2,NLEV - ! X(ILEV) = AV(PR_SM_T_)*X(ILEV-1) - ! 3. Y(ILEV) = (K(ILEV)**(-1))*X(ILEV) - ! 4. DO ILEV=NLEV-1,1,-1 - ! Y(ILEV) = AV(PR_SM_)*Y(ILEV+1) - ! 5. Yext = beta*Yext + Y(1) - ! - ! Note: level numbering reversed wrt ref. DD, i.e. - ! 1..NLEV <=> (j) <-> 0 - - - call psb_baseprc_aply(alpha,baseprecv(1),x,beta,y,& - & baseprecv(1)%base_desc,trans,work,info) - if(info /=0) goto 9999 - allocate(mlprec_wrk(1)%x2l(size(x)),mlprec_wrk(1)%y2l(size(y))) - mlprec_wrk(1)%x2l(:) = x(:) - - - do ilev = 2, nlev - n_row = baseprecv(ilev-1)%base_desc%matrix_data(psb_n_row_) - n_col = baseprecv(ilev-1)%desc_data%matrix_data(psb_n_col_) - nr2l = baseprecv(ilev)%desc_data%matrix_data(psb_n_col_) - nrg = baseprecv(ilev)%desc_data%matrix_data(psb_n_row_) - allocate(mlprec_wrk(ilev)%x2l(nr2l),mlprec_wrk(ilev)%y2l(nr2l),& - & mlprec_wrk(ilev)%tx(max(n_row,n_col)),& - & mlprec_wrk(ilev)%ty(max(n_row,n_col)), stat=info) - if (info /= 0) then - call psb_errpush(4010,name,a_err='Allocate') - goto 9999 - end if - - mlprec_wrk(ilev)%x2l(:) = zzero - mlprec_wrk(ilev)%y2l(:) = zzero - mlprec_wrk(ilev)%tx(1:n_row) = mlprec_wrk(ilev-1)%x2l(1:n_row) - mlprec_wrk(ilev)%tx(n_row+1:max(n_row,n_col)) = zzero - mlprec_wrk(ilev)%ty(:) = zzero - - ismth=baseprecv(ilev)%iprcparm(smth_kind_) - - if (ismth /= no_smth_) then - ! - ! Smoothed aggregation - ! - - - if (baseprecv(ilev)%iprcparm(glb_smth_) >0) then - call psb_halo(mlprec_wrk(ilev-1)%x2l,baseprecv(ilev-1)%base_desc,& - & info,work=work) - if(info /=0) goto 9999 - else - mlprec_wrk(ilev-1)%x2l(n_row+1:max(n_row,n_col)) = zzero - end if - - call psb_csmm(zone,baseprecv(ilev)%av(sm_pr_t_),mlprec_wrk(ilev-1)%x2l,& - & zzero,mlprec_wrk(ilev)%x2l,info) - if(info /=0) goto 9999 - - else - ! - ! Raw aggregation, may take shortcut - ! - do i=1,n_row - mlprec_wrk(ilev)%x2l(baseprecv(ilev)%mlia(i)) = & - & mlprec_wrk(ilev)%x2l(baseprecv(ilev)%mlia(i)) + & - & mlprec_wrk(ilev-1)%x2l(i) - end do - - end if - - if (baseprecv(ilev)%iprcparm(coarse_mat_)==mat_repl_) Then - call psb_sum(ictxt,mlprec_wrk(ilev)%x2l(1:nrg)) - else if (baseprecv(ilev)%iprcparm(coarse_mat_) /= mat_distr_) Then - write(0,*) 'Unknown value for baseprecv(2)%iprcparm(coarse_mat_) ',& - & baseprecv(ilev)%iprcparm(coarse_mat_) - endif - - call psb_baseprc_aply(zone,baseprecv(ilev),& - & mlprec_wrk(ilev)%x2l,zzero,mlprec_wrk(ilev)%y2l,& - & baseprecv(ilev)%desc_data, 'N',work,info) - - enddo - - do ilev =nlev,2,-1 - - ismth=baseprecv(ilev)%iprcparm(smth_kind_) - n_row = baseprecv(ilev-1)%base_desc%matrix_data(psb_n_row_) - n_col = baseprecv(ilev-1)%desc_data%matrix_data(psb_n_col_) - nr2l = baseprecv(ilev)%desc_data%matrix_data(psb_n_col_) - nrg = baseprecv(ilev)%desc_data%matrix_data(psb_n_row_) - - if (ismth /= no_smth_) then - - call psb_csmm(zone,baseprecv(ilev)%av(sm_pr_),mlprec_wrk(ilev)%y2l,& - & zone,mlprec_wrk(ilev-1)%y2l,info) - if(info /=0) goto 9999 - - else - - do i=1, n_row - mlprec_wrk(ilev-1)%y2l(i) = mlprec_wrk(ilev-1)%y2l(i) + & - & mlprec_wrk(ilev)%y2l(baseprecv(ilev)%mlia(i)) - enddo - - end if - end do - - call psb_geaxpby(alpha,mlprec_wrk(1)%y2l,zone,y,baseprecv(1)%base_desc,info) - if(info /=0) goto 9999 - - - case(mult_ml_prec_) - - ! - ! Multiplicative multilevel - ! Pre/post smoothing versions. - ! - - select case(baseprecv(2)%iprcparm(smth_pos_)) - - case(post_smooth_) - - - ! - ! Post smoothing. - ! 1. X(1) = Xext - ! 2. DO ILEV=2, NLEV :: X(ILEV) = AV(PR_SM_T_,ILEV)*X(ILEV-1) - ! 3. Y(NLEV) = (K(NLEV)**(-1))*X(NLEV) - ! 4. DO ILEV=NLEV-1,1,-1 - ! Y(ILEV) = AV(PR_SM_,ILEV+1)*Y(ILEV+1) - ! Y(ILEV) = Y(ILEV) + (K(ILEV)**(-1))*(X(ILEV)-A(ILEV)*Y(ILEV)) - ! - ! 5. Yext = beta*Yext + Y(1) - ! - ! Note: level numbering reversed wrt ref. DD, i.e. - ! 1..NLEV <=> (j) <-> 0 - ! - ! Also: post smoothing is not spelled out in detail in DD. - ! - ! - - - n_col = desc_data%matrix_data(psb_n_col_) - nr2l = baseprecv(1)%desc_data%matrix_data(psb_n_col_) - - allocate(mlprec_wrk(1)%x2l(nr2l),mlprec_wrk(1)%y2l(nr2l), & - & mlprec_wrk(1)%tx(nr2l), stat=info) - mlprec_wrk(1)%x2l(:) = zzero - mlprec_wrk(1)%y2l(:) = zzero - mlprec_wrk(1)%tx(:) = zzero - - call psb_geaxpby(zone,x,zzero,mlprec_wrk(1)%tx,& - & baseprecv(1)%base_desc,info) - call psb_geaxpby(zone,x,zzero,mlprec_wrk(1)%x2l,& - & baseprecv(1)%base_desc,info) - - do ilev=2, nlev - n_row = baseprecv(ilev-1)%base_desc%matrix_data(psb_n_row_) - n_col = baseprecv(ilev-1)%desc_data%matrix_data(psb_n_col_) - nr2l = baseprecv(ilev)%desc_data%matrix_data(psb_n_col_) - nrg = baseprecv(ilev)%desc_data%matrix_data(psb_n_row_) - ismth = baseprecv(ilev)%iprcparm(smth_kind_) - - allocate(mlprec_wrk(ilev)%tx(nr2l),mlprec_wrk(ilev)%y2l(nr2l),& - & mlprec_wrk(ilev)%x2l(nr2l), stat=info) - - if (info /= 0) then - call psb_errpush(4010,name,a_err='Allocate') - goto 9999 - end if - - mlprec_wrk(ilev)%x2l(:) = zzero - mlprec_wrk(ilev)%y2l(:) = zzero - mlprec_wrk(ilev)%tx(:) = zzero - if (ismth /= no_smth_) then - ! - ! Smoothed aggregation - ! - if (baseprecv(ilev)%iprcparm(glb_smth_) >0) then - call psb_halo(mlprec_wrk(ilev-1)%x2l,& - & baseprecv(ilev-1)%base_desc,info,work=work) - if(info /=0) goto 9999 - else - mlprec_wrk(ilev-1)%x2l(n_row+1:max(n_row,n_col)) = zzero - end if - - call psb_csmm(zone,baseprecv(ilev)%av(sm_pr_t_),mlprec_wrk(ilev-1)%x2l, & - & zzero,mlprec_wrk(ilev)%x2l,info) - if(info /=0) goto 9999 - - else - ! - ! Raw aggregation, may take shortcut - ! - do i=1,n_row - mlprec_wrk(ilev)%x2l(baseprecv(ilev)%mlia(i)) = & - & mlprec_wrk(ilev)%x2l(baseprecv(ilev)%mlia(i)) + & - & mlprec_wrk(ilev-1)%x2l(i) - end do - end if - - if (baseprecv(ilev)%iprcparm(coarse_mat_)==mat_repl_) Then - call psb_sum(ictxt,mlprec_wrk(ilev)%x2l(1:nrg)) - else if (baseprecv(ilev)%iprcparm(coarse_mat_) /= mat_distr_) Then - write(0,*) 'Unknown value for baseprecv(2)%iprcparm(coarse_mat_) ',& - & baseprecv(ilev)%iprcparm(coarse_mat_) - endif - call psb_geaxpby(zone,mlprec_wrk(ilev)%x2l,zzero,mlprec_wrk(ilev)%tx,& - & baseprecv(ilev)%base_desc,info) - if(info /=0) goto 9999 - - enddo - - - call psb_baseprc_aply(zone,baseprecv(nlev),mlprec_wrk(nlev)%x2l, & - & zzero, mlprec_wrk(nlev)%y2l,baseprecv(nlev)%desc_data,'N',work,info) - - if(info /=0) goto 9999 - - - do ilev=nlev-1, 1, -1 - ismth = baseprecv(ilev+1)%iprcparm(smth_kind_) - if (ismth /= no_smth_) then - if (ismth == smth_omg_) & - & call psb_halo(mlprec_wrk(ilev+1)%y2l,baseprecv(ilev+1)%desc_data,& - & info,work=work) - call psb_csmm(zone,baseprecv(ilev+1)%av(sm_pr_),mlprec_wrk(ilev+1)%y2l,& - & zzero,mlprec_wrk(ilev)%y2l,info) - if(info /=0) goto 9999 - - else - n_row = baseprecv(ilev)%base_desc%matrix_data(psb_n_row_) - mlprec_wrk(ilev)%y2l(:) = zzero - do i=1, n_row - mlprec_wrk(ilev)%y2l(i) = mlprec_wrk(ilev)%y2l(i) + & - & mlprec_wrk(ilev+1)%y2l(baseprecv(ilev+1)%mlia(i)) - enddo - - end if - - call psb_spmm(-zone,baseprecv(ilev)%base_a,mlprec_wrk(ilev)%y2l,& - & zone,mlprec_wrk(ilev)%tx,baseprecv(ilev)%base_desc,info,work=work) - - if(info /=0) goto 9999 - - call psb_baseprc_aply(zone,baseprecv(ilev),mlprec_wrk(ilev)%tx,& - & zone,mlprec_wrk(ilev)%y2l,baseprecv(ilev)%base_desc, trans, work,info) - - if(info /=0) goto 9999 - - enddo - - call psb_geaxpby(alpha,mlprec_wrk(1)%y2l,beta,y,baseprecv(1)%base_desc,info) - - if(info /=0) goto 9999 - - - case(pre_smooth_) - - - ! - ! Pre smoothing. - ! 1. X(1) = Xext - ! 2. Y(1) = (K(1)**(-1))*X(1) - ! 3. TX(1) = X(1) - A(1)*Y(1) - ! 4. DO ILEV=2, NLEV - ! X(ILEV) = AV(PR_SM_T_,ILEV)*TX(ILEV-1) - ! Y(ILEV) = (K(ILEV)**(-1))*X(ILEV) - ! TX(ILEV) = (X(ILEV)-A(ILEV)*Y(ILEV)) - ! 5. DO ILEV=NLEV-1,1,-1 - ! Y(ILEV) = Y(ILEV) + AV(PR_SM_,ILEV+1)*Y(ILEV+1) - ! 6. Yext = beta*Yext + Y(1) - ! - ! Note: level numbering reversed wrt ref. DD, i.e. - ! 1..NLEV <=> (j) <-> 0 - ! - ! - - n_col = desc_data%matrix_data(psb_n_col_) - nr2l = baseprecv(1)%desc_data%matrix_data(psb_n_col_) - - allocate(mlprec_wrk(1)%x2l(nr2l),mlprec_wrk(1)%y2l(nr2l), & - & mlprec_wrk(1)%tx(nr2l), stat=info) - if (info /= 0) then - call psb_errpush(4010,name,a_err='Allocate') - goto 9999 - end if - - mlprec_wrk(1)%y2l(:) = zzero - - - mlprec_wrk(1)%x2l(:) = x - - call psb_baseprc_aply(zone,baseprecv(1),mlprec_wrk(1)%x2l,& - & zzero,mlprec_wrk(1)%y2l,& - & baseprecv(1)%base_desc,& - & trans,work,info) - - if(info /=0) goto 9999 - - mlprec_wrk(1)%tx = mlprec_wrk(1)%x2l - - call psb_spmm(-zone,baseprecv(1)%base_a,mlprec_wrk(1)%y2l,& - & zone,mlprec_wrk(1)%tx,baseprecv(1)%base_desc,info,work=work) - if(info /=0) goto 9999 - - do ilev = 2, nlev - n_row = baseprecv(ilev-1)%base_desc%matrix_data(psb_n_row_) - n_col = baseprecv(ilev-1)%desc_data%matrix_data(psb_n_col_) - nr2l = baseprecv(ilev)%desc_data%matrix_data(psb_n_col_) - nrg = baseprecv(ilev)%desc_data%matrix_data(psb_n_row_) - ismth = baseprecv(ilev)%iprcparm(smth_kind_) - allocate(mlprec_wrk(ilev)%tx(nr2l),mlprec_wrk(ilev)%y2l(nr2l),& - & mlprec_wrk(ilev)%x2l(nr2l), stat=info) - - - if (info /= 0) then - call psb_errpush(4010,name,a_err='Allocate') - goto 9999 - end if - - mlprec_wrk(ilev)%x2l(:) = zzero - mlprec_wrk(ilev)%y2l(:) = zzero - mlprec_wrk(ilev)%tx(:) = zzero - - - if (ismth /= no_smth_) then - ! - !Smoothed Aggregation - ! - if (baseprecv(ilev)%iprcparm(glb_smth_) >0) then - - call psb_halo(mlprec_wrk(ilev-1)%tx,baseprecv(ilev-1)%base_desc,& - & info,work=work) - if(info /=0) goto 9999 - else - mlprec_wrk(ilev-1)%tx(n_row+1:max(n_row,n_col)) = zzero - end if - - call psb_csmm(zone,baseprecv(ilev)%av(sm_pr_t_),mlprec_wrk(ilev-1)%tx,zzero,& - & mlprec_wrk(ilev)%x2l,info) - if(info /=0) goto 9999 - - else - ! - ! Raw aggregation, may take shortcuts - ! - mlprec_wrk(ilev)%x2l = zzero - do i=1,n_row - mlprec_wrk(ilev)%x2l(baseprecv(ilev)%mlia(i)) = & - & mlprec_wrk(ilev)%x2l(baseprecv(ilev)%mlia(i)) + & - & mlprec_wrk(ilev-1)%tx(i) - end do - end if - - if (baseprecv(ilev)%iprcparm(coarse_mat_)==mat_repl_) then - call psb_sum(ictxt,mlprec_wrk(ilev)%x2l(1:nrg)) - else if (baseprecv(ilev)%iprcparm(coarse_mat_) /= mat_distr_) then - write(0,*) 'Unknown value for baseprecv(2)%iprcparm(coarse_mat_) ',& - & baseprecv(ilev)%iprcparm(coarse_mat_) - endif - - - call psb_baseprc_aply(zone,baseprecv(ilev),mlprec_wrk(ilev)%x2l,& - & zzero,mlprec_wrk(ilev)%y2l,baseprecv(ilev)%desc_data, 'N',work,info) - - if(info /=0) goto 9999 - - if(ilev < nlev) then - mlprec_wrk(ilev)%tx = mlprec_wrk(ilev)%x2l - call psb_spmm(-zone,baseprecv(ilev)%base_a,mlprec_wrk(ilev)%y2l,& - & zone,mlprec_wrk(ilev)%tx,baseprecv(ilev)%base_desc,info,work=work) - if(info /=0) goto 9999 - endif - - enddo - - do ilev = nlev-1, 1, -1 - - ismth=baseprecv(ilev+1)%iprcparm(smth_kind_) - - if (ismth /= no_smth_) then - - if (ismth == smth_omg_) & - & call psb_halo(mlprec_wrk(ilev+1)%y2l,& - & baseprecv(ilev+1)%desc_data,info,work=work) - call psb_csmm(zone,baseprecv(ilev+1)%av(sm_pr_),mlprec_wrk(ilev+1)%y2l,& - & zone,mlprec_wrk(ilev)%y2l,info) - - if(info /=0) goto 9999 - - else - - n_row = baseprecv(ilev+1)%base_desc%matrix_data(psb_n_row_) - do i=1, n_row - mlprec_wrk(ilev)%y2l(i) = mlprec_wrk(ilev)%y2l(i) + & - & mlprec_wrk(ilev+1)%y2l(baseprecv(ilev+1)%mlia(i)) - enddo - - end if - - enddo - - call psb_geaxpby(alpha,mlprec_wrk(1)%y2l,beta,y,& - & baseprecv(1)%base_desc,info) - - if(info /=0) goto 9999 - - - - case(smooth_both_) - - ! - ! Symmetrized smoothing. - ! 1. X(1) = Xext - ! 2. Y(1) = (K(1)**(-1))*X(1) - ! 3. TX(1) = X(1) - A(1)*Y(1) - ! 4. DO ILEV=2, NLEV - ! X(ILEV) = AV(PR_SM_T_,ILEV)*TX(ILEV-1) - ! Y(ILEV) = (K(ILEV)**(-1))*X(ILEV) - ! TX(ILEV) = (X(ILEV)-A(ILEV)*Y(ILEV)) - ! 5. DO ILEV=NLEV-1,1,-1 - ! Y(ILEV) = Y(ILEV) + AV(PR_SM_,ILEV+1)*Y(ILEV+1) - ! Y(ILEV) = Y(ILEV) + (K(ILEV)**(-1))*(X(ILEV)-A(ILEV)*Y(ILEV)) - ! 6. Yext = beta*Yext + Y(1) - ! - ! Note: level numbering reversed wrt ref. DD, i.e. - ! 1..NLEV <=> (j) <-> 0 - ! - ! - n_col = desc_data%matrix_data(psb_n_col_) - nr2l = baseprecv(1)%desc_data%matrix_data(psb_n_col_) - - allocate(mlprec_wrk(1)%x2l(nr2l),mlprec_wrk(1)%y2l(nr2l), & - & mlprec_wrk(1)%ty(nr2l), mlprec_wrk(1)%tx(nr2l), stat=info) - - mlprec_wrk(1)%x2l(:) = zzero - mlprec_wrk(1)%y2l(:) = zzero - mlprec_wrk(1)%tx(:) = zzero - mlprec_wrk(1)%ty(:) = zzero - - - if (info /= 0) then - call psb_errpush(4010,name,a_err='Allocate') - goto 9999 - end if - - call psb_geaxpby(zone,x,zzero,mlprec_wrk(1)%x2l,& - & baseprecv(1)%base_desc,info) - call psb_geaxpby(zone,x,zzero,mlprec_wrk(1)%tx,& - & baseprecv(1)%base_desc,info) - - call psb_baseprc_aply(zone,baseprecv(1),mlprec_wrk(1)%x2l,& - & zzero,mlprec_wrk(1)%y2l,& - & baseprecv(1)%base_desc,& - & trans,work,info) - - if(info /=0) goto 9999 - - mlprec_wrk(1)%ty = mlprec_wrk(1)%x2l - - call psb_spmm(-zone,baseprecv(1)%base_a,mlprec_wrk(1)%y2l,& - & zone,mlprec_wrk(1)%ty,baseprecv(1)%base_desc,info,work=work) - if(info /=0) goto 9999 - - do ilev = 2, nlev - n_row = baseprecv(ilev-1)%base_desc%matrix_data(psb_n_row_) - n_col = baseprecv(ilev-1)%desc_data%matrix_data(psb_n_col_) - nr2l = baseprecv(ilev)%desc_data%matrix_data(psb_n_col_) - nrg = baseprecv(ilev)%desc_data%matrix_data(psb_n_row_) - ismth=baseprecv(ilev)%iprcparm(smth_kind_) - allocate(mlprec_wrk(ilev)%ty(nr2l),mlprec_wrk(ilev)%y2l(nr2l),& - & mlprec_wrk(ilev)%x2l(nr2l), stat=info) - - mlprec_wrk(ilev)%x2l(:) = zzero - mlprec_wrk(ilev)%y2l(:) = zzero - mlprec_wrk(ilev)%tx(:) = zzero - mlprec_wrk(ilev)%ty(:) = zzero - - - if (info /= 0) then - call psb_errpush(4010,name,a_err='Allocate') - goto 9999 - end if - - - if (ismth /= no_smth_) then - ! - !Smoothed Aggregation - ! - if (baseprecv(ilev)%iprcparm(glb_smth_) >0) then - - call psb_halo(mlprec_wrk(ilev-1)%ty,baseprecv(ilev-1)%base_desc,& - & info,work=work) - if(info /=0) goto 9999 - else - mlprec_wrk(ilev-1)%ty(n_row+1:max(n_row,n_col)) = zzero - end if - - call psb_csmm(zone,baseprecv(ilev)%av(sm_pr_t_),mlprec_wrk(ilev-1)%ty,zzero,& - & mlprec_wrk(ilev)%x2l,info) - if(info /=0) goto 9999 - - else - ! - ! Raw aggregation, may take shortcuts - ! - mlprec_wrk(ilev)%x2l = zzero - do i=1,n_row - mlprec_wrk(ilev)%x2l(baseprecv(ilev)%mlia(i)) = & - & mlprec_wrk(ilev)%x2l(baseprecv(ilev)%mlia(i)) + & - & mlprec_wrk(ilev-1)%ty(i) - end do - end if - - if (baseprecv(ilev)%iprcparm(coarse_mat_)==mat_repl_) then - call psb_sum(ictxt,mlprec_wrk(ilev)%x2l(1:nrg)) - else if (baseprecv(ilev)%iprcparm(coarse_mat_) /= mat_distr_) then - write(0,*) 'Unknown value for baseprecv(2)%iprcparm(coarse_mat_) ',& - & baseprecv(ilev)%iprcparm(coarse_mat_) - endif - - call psb_geaxpby(zone,mlprec_wrk(ilev)%x2l,zzero,mlprec_wrk(ilev)%tx,& - & baseprecv(ilev)%base_desc,info) - if(info /=0) goto 9999 - - call psb_baseprc_aply(zone,baseprecv(ilev),mlprec_wrk(ilev)%x2l,& - & zzero,mlprec_wrk(ilev)%y2l,baseprecv(ilev)%desc_data, 'N',work,info) - - if(info /=0) goto 9999 - - if(ilev < nlev) then - mlprec_wrk(ilev)%ty = mlprec_wrk(ilev)%x2l - call psb_spmm(-zone,baseprecv(ilev)%base_a,mlprec_wrk(ilev)%y2l,& - & zone,mlprec_wrk(ilev)%ty,baseprecv(ilev)%base_desc,info,work=work) - if(info /=0) goto 9999 - endif - - enddo - - - do ilev=nlev-1, 1, -1 - - ismth=baseprecv(ilev+1)%iprcparm(smth_kind_) - if (ismth /= no_smth_) then - if (ismth == smth_omg_) & - & call psb_halo(mlprec_wrk(ilev+1)%y2l,baseprecv(ilev+1)%desc_data,& - & info,work=work) - call psb_csmm(zone,baseprecv(ilev+1)%av(sm_pr_),mlprec_wrk(ilev+1)%y2l,& - & zone,mlprec_wrk(ilev)%y2l,info) - if(info /=0) goto 9999 - - else - n_row = baseprecv(ilev)%base_desc%matrix_data(psb_n_row_) - do i=1, n_row - mlprec_wrk(ilev)%y2l(i) = mlprec_wrk(ilev)%y2l(i) + & - & mlprec_wrk(ilev+1)%y2l(baseprecv(ilev+1)%mlia(i)) - enddo - - end if - - call psb_spmm(-zone,baseprecv(ilev)%base_a,mlprec_wrk(ilev)%y2l,& - & zone,mlprec_wrk(ilev)%tx,baseprecv(ilev)%base_desc,info,work=work) - - if(info /=0) goto 9999 - - call psb_baseprc_aply(zone,baseprecv(ilev),mlprec_wrk(ilev)%tx,& - & zone,mlprec_wrk(ilev)%y2l,baseprecv(ilev)%base_desc, trans, work,info) - - if(info /=0) goto 9999 - - enddo - - call psb_geaxpby(alpha,mlprec_wrk(1)%y2l,beta,y,& - & baseprecv(1)%base_desc,info) - - if(info /=0) goto 9999 - - - case default - - call psb_errpush(4013,name,a_err='wrong smooth_pos',& - & i_Err=(/baseprecv(2)%iprcparm(smth_pos_),0,0,0,0/)) - goto 9999 - - end select - - case default - call psb_errpush(4013,name,a_err='wrong mltype',& - & i_Err=(/baseprecv(2)%iprcparm(ml_type_),0,0,0,0/)) - goto 9999 - - end select - - - call mlprec_wrk_free(mlprec_wrk) - deallocate(mlprec_wrk) - - call psb_erractionrestore(err_act) - return - -9999 continue - call psb_errpush(info,name) - call psb_erractionrestore(err_act) - if (err_act.eq.act_abort) then - call psb_error() - return - end if - return - -contains - subroutine mlprec_wrk_free(wrk) - type(psb_mlprec_wrk_type) :: wrk(:) - ! This will not be needed when we have allocatables, as - ! it is sufficient to deallocate the container, and - ! the compiler is supposed to recursively deallocate the - ! various components. - integer i - - do i=1, size(wrk) - if (associated(wrk(i)%tx)) deallocate(wrk(i)%tx) - if (associated(wrk(i)%ty)) deallocate(wrk(i)%ty) - if (associated(wrk(i)%x2l)) deallocate(wrk(i)%x2l) - if (associated(wrk(i)%y2l)) deallocate(wrk(i)%y2l) - if (associated(wrk(i)%b2l)) deallocate(wrk(i)%b2l) - if (associated(wrk(i)%tty)) deallocate(wrk(i)%tty) - end do - end subroutine mlprec_wrk_free - -end subroutine psb_zmlprc_aply - diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/run.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/run.py deleted file mode 100644 index e87837e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/run.py +++ /dev/null @@ -1,44 +0,0 @@ -# -*- coding: utf-8 -*- -""" - Pygments unit tests - ~~~~~~~~~~~~~~~~~~ - - Usage:: - - python run.py [testfile ...] - - - :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -from __future__ import print_function - -import sys, os - -# only find tests in this directory -if os.path.dirname(__file__): - os.chdir(os.path.dirname(__file__)) - - -try: - import nose -except ImportError: - print('nose is required to run the Pygments test suite') - sys.exit(1) - -try: - # make sure the current source is first on sys.path - sys.path.insert(0, '..') - import pygments -except SyntaxError as err: - print('Syntax error: %s' % err) - sys.exit(1) -except ImportError as err: - print('Cannot find Pygments to test: %s' % err) - sys.exit(1) -else: - print('Pygments %s test suite running (Python %s)...' % - (pygments.__version__, sys.version.split()[0])) - -nose.main() diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/string_asserts.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/string_asserts.py deleted file mode 100644 index 025a528..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/string_asserts.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -""" - Pygments string assert utility - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -class StringTests(object): - - def assertStartsWith(self, haystack, needle, msg=None): - if msg is None: - msg = "'{}' does not start with '{}'".format(haystack, needle) - if not haystack.startswith(needle): - raise(AssertionError(msg)) - - def assertEndsWith(self, haystack, needle, msg=None): - if msg is None: - msg = "'{}' does not end with '{}'".format(haystack, needle) - if not haystack.endswith(needle): - raise(AssertionError(msg)) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/support.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/support.py deleted file mode 100644 index 505c17d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/support.py +++ /dev/null @@ -1,15 +0,0 @@ -# coding: utf-8 -""" -Support for Pygments tests -""" - -import os - - -def location(mod_name): - """ - Return the file and directory that the code for *mod_name* is in. - """ - source = mod_name.endswith("pyc") and mod_name[:-1] or mod_name - source = os.path.abspath(source) - return source, os.path.dirname(source) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/support/tags b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/support/tags deleted file mode 100644 index 193779f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/support/tags +++ /dev/null @@ -1,36 +0,0 @@ -!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ -!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ -!_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/ -!_TAG_PROGRAM_NAME Exuberant Ctags // -!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/ -!_TAG_PROGRAM_VERSION 5.8 // -HtmlFormatter test_html_formatter.py 19;" i -HtmlFormatterTest test_html_formatter.py 34;" c -NullFormatter test_html_formatter.py 19;" i -PythonLexer test_html_formatter.py 18;" i -StringIO test_html_formatter.py 13;" i -dirname test_html_formatter.py 16;" i -escape_html test_html_formatter.py 20;" i -fp test_html_formatter.py 27;" v -inspect test_html_formatter.py 15;" i -isfile test_html_formatter.py 16;" i -join test_html_formatter.py 16;" i -os test_html_formatter.py 10;" i -re test_html_formatter.py 11;" i -subprocess test_html_formatter.py 125;" i -support test_html_formatter.py 23;" i -tempfile test_html_formatter.py 14;" i -test_all_options test_html_formatter.py 72;" m class:HtmlFormatterTest -test_correct_output test_html_formatter.py 35;" m class:HtmlFormatterTest -test_ctags test_html_formatter.py 165;" m class:HtmlFormatterTest -test_external_css test_html_formatter.py 48;" m class:HtmlFormatterTest -test_get_style_defs test_html_formatter.py 141;" m class:HtmlFormatterTest -test_lineanchors test_html_formatter.py 98;" m class:HtmlFormatterTest -test_lineanchors_with_startnum test_html_formatter.py 106;" m class:HtmlFormatterTest -test_linenos test_html_formatter.py 82;" m class:HtmlFormatterTest -test_linenos_with_startnum test_html_formatter.py 90;" m class:HtmlFormatterTest -test_unicode_options test_html_formatter.py 155;" m class:HtmlFormatterTest -test_valid_output test_html_formatter.py 114;" m class:HtmlFormatterTest -tokensource test_html_formatter.py 29;" v -uni_open test_html_formatter.py 21;" i -unittest test_html_formatter.py 12;" i diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_basic_api.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_basic_api.py deleted file mode 100644 index 893fa90..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_basic_api.py +++ /dev/null @@ -1,309 +0,0 @@ -# -*- coding: utf-8 -*- -""" - Pygments basic API tests - ~~~~~~~~~~~~~~~~~~~~~~~~ - - :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -from __future__ import print_function - -import random -import unittest - -from pygments import lexers, formatters, filters, format -from pygments.token import _TokenType, Text -from pygments.lexer import RegexLexer -from pygments.formatters.img import FontNotFound -from pygments.util import text_type, StringIO, xrange, ClassNotFound - -import support - -TESTFILE, TESTDIR = support.location(__file__) - -test_content = [chr(i) for i in xrange(33, 128)] * 5 -random.shuffle(test_content) -test_content = ''.join(test_content) + '\n' - - -def test_lexer_import_all(): - # instantiate every lexer, to see if the token type defs are correct - for x in lexers.LEXERS: - c = getattr(lexers, x)() - - -def test_lexer_classes(): - # test that every lexer class has the correct public API - def verify(cls): - assert type(cls.name) is str - for attr in 'aliases', 'filenames', 'alias_filenames', 'mimetypes': - assert hasattr(cls, attr) - assert type(getattr(cls, attr)) is list, \ - "%s: %s attribute wrong" % (cls, attr) - result = cls.analyse_text("abc") - assert isinstance(result, float) and 0.0 <= result <= 1.0 - result = cls.analyse_text(".abc") - assert isinstance(result, float) and 0.0 <= result <= 1.0 - - assert all(al.lower() == al for al in cls.aliases) - - inst = cls(opt1="val1", opt2="val2") - if issubclass(cls, RegexLexer): - if not hasattr(cls, '_tokens'): - # if there's no "_tokens", the lexer has to be one with - # multiple tokendef variants - assert cls.token_variants - for variant in cls.tokens: - assert 'root' in cls.tokens[variant] - else: - assert 'root' in cls._tokens, \ - '%s has no root state' % cls - - if cls.name in ['XQuery', 'Opa']: # XXX temporary - return - - try: - tokens = list(inst.get_tokens(test_content)) - except KeyboardInterrupt: - raise KeyboardInterrupt('interrupted %s.get_tokens(): test_content=%r' % (cls.__name__, test_content)) - txt = "" - for token in tokens: - assert isinstance(token, tuple) - assert isinstance(token[0], _TokenType) - if isinstance(token[1], str): - print(repr(token[1])) - assert isinstance(token[1], text_type) - txt += token[1] - assert txt == test_content, "%s lexer roundtrip failed: %r != %r" % \ - (cls.name, test_content, txt) - - for lexer in lexers._iter_lexerclasses(): - yield verify, lexer - - -def test_lexer_options(): - # test that the basic options work - def ensure(tokens, output): - concatenated = ''.join(token[1] for token in tokens) - assert concatenated == output, \ - '%s: %r != %r' % (lexer, concatenated, output) - def verify(cls): - inst = cls(stripnl=False) - ensure(inst.get_tokens('a\nb'), 'a\nb\n') - ensure(inst.get_tokens('\n\n\n'), '\n\n\n') - inst = cls(stripall=True) - ensure(inst.get_tokens(' \n b\n\n\n'), 'b\n') - # some lexers require full lines in input - if cls.__name__ not in ( - 'PythonConsoleLexer', 'RConsoleLexer', 'RubyConsoleLexer', - 'SqliteConsoleLexer', 'MatlabSessionLexer', 'ErlangShellLexer', - 'BashSessionLexer', 'LiterateHaskellLexer', 'LiterateAgdaLexer', - 'PostgresConsoleLexer', 'ElixirConsoleLexer', 'JuliaConsoleLexer', - 'RobotFrameworkLexer', 'DylanConsoleLexer', 'ShellSessionLexer', - 'LiterateIdrisLexer', 'LiterateCryptolLexer'): - inst = cls(ensurenl=False) - ensure(inst.get_tokens('a\nb'), 'a\nb') - inst = cls(ensurenl=False, stripall=True) - ensure(inst.get_tokens('a\nb\n\n'), 'a\nb') - - for lexer in lexers._iter_lexerclasses(): - if lexer.__name__ == 'RawTokenLexer': - # this one is special - continue - yield verify, lexer - - -def test_get_lexers(): - # test that the lexers functions work - def verify(func, args): - x = func(opt='val', *args) - assert isinstance(x, lexers.PythonLexer) - assert x.options["opt"] == "val" - - for func, args in [(lexers.get_lexer_by_name, ("python",)), - (lexers.get_lexer_for_filename, ("test.py",)), - (lexers.get_lexer_for_mimetype, ("text/x-python",)), - (lexers.guess_lexer, ("#!/usr/bin/python -O\nprint",)), - (lexers.guess_lexer_for_filename, ("a.py", "<%= @foo %>")) - ]: - yield verify, func, args - - for cls, (_, lname, aliases, _, mimetypes) in lexers.LEXERS.items(): - assert cls == lexers.find_lexer_class(lname).__name__ - - for alias in aliases: - assert cls == lexers.get_lexer_by_name(alias).__class__.__name__ - - for mimetype in mimetypes: - assert cls == lexers.get_lexer_for_mimetype(mimetype).__class__.__name__ - - try: - lexers.get_lexer_by_name(None) - except ClassNotFound: - pass - else: - raise Exception - - -def test_formatter_public_api(): - ts = list(lexers.PythonLexer().get_tokens("def f(): pass")) - out = StringIO() - # test that every formatter class has the correct public API - def verify(formatter, info): - assert len(info) == 4 - assert info[0], "missing formatter name" - assert info[1], "missing formatter aliases" - assert info[3], "missing formatter docstring" - - if formatter.name == 'Raw tokens': - # will not work with Unicode output file - return - - try: - inst = formatter(opt1="val1") - except (ImportError, FontNotFound): - return - try: - inst.get_style_defs() - except NotImplementedError: - # may be raised by formatters for which it doesn't make sense - pass - inst.format(ts, out) - - for formatter, info in formatters.FORMATTERS.items(): - yield verify, formatter, info - -def test_formatter_encodings(): - from pygments.formatters import HtmlFormatter - - # unicode output - fmt = HtmlFormatter() - tokens = [(Text, u"ä")] - out = format(tokens, fmt) - assert type(out) is text_type - assert u"ä" in out - - # encoding option - fmt = HtmlFormatter(encoding="latin1") - tokens = [(Text, u"ä")] - assert u"ä".encode("latin1") in format(tokens, fmt) - - # encoding and outencoding option - fmt = HtmlFormatter(encoding="latin1", outencoding="utf8") - tokens = [(Text, u"ä")] - assert u"ä".encode("utf8") in format(tokens, fmt) - - -def test_formatter_unicode_handling(): - # test that the formatter supports encoding and Unicode - tokens = list(lexers.PythonLexer(encoding='utf-8'). - get_tokens("def f(): 'ä'")) - - def verify(formatter): - try: - inst = formatter(encoding=None) - except (ImportError, FontNotFound): - # some dependency or font not installed - return - - if formatter.name != 'Raw tokens': - out = format(tokens, inst) - if formatter.unicodeoutput: - assert type(out) is text_type - - inst = formatter(encoding='utf-8') - out = format(tokens, inst) - assert type(out) is bytes, '%s: %r' % (formatter, out) - # Cannot test for encoding, since formatters may have to escape - # non-ASCII characters. - else: - inst = formatter() - out = format(tokens, inst) - assert type(out) is bytes, '%s: %r' % (formatter, out) - - for formatter, info in formatters.FORMATTERS.items(): - yield verify, formatter - - -def test_get_formatters(): - # test that the formatters functions work - x = formatters.get_formatter_by_name("html", opt="val") - assert isinstance(x, formatters.HtmlFormatter) - assert x.options["opt"] == "val" - - x = formatters.get_formatter_for_filename("a.html", opt="val") - assert isinstance(x, formatters.HtmlFormatter) - assert x.options["opt"] == "val" - - -def test_styles(): - # minimal style test - from pygments.formatters import HtmlFormatter - fmt = HtmlFormatter(style="pastie") - - -class FiltersTest(unittest.TestCase): - - def test_basic(self): - filter_args = { - 'whitespace': {'spaces': True, 'tabs': True, 'newlines': True}, - 'highlight': {'names': ['isinstance', 'lexers', 'x']}, - } - for x in filters.FILTERS: - lx = lexers.PythonLexer() - lx.add_filter(x, **filter_args.get(x, {})) - fp = open(TESTFILE, 'rb') - try: - text = fp.read().decode('utf-8') - finally: - fp.close() - tokens = list(lx.get_tokens(text)) - roundtext = ''.join([t[1] for t in tokens]) - if x not in ('whitespace', 'keywordcase'): - # these filters change the text - self.assertEqual(roundtext, text, - "lexer roundtrip with %s filter failed" % x) - - def test_raiseonerror(self): - lx = lexers.PythonLexer() - lx.add_filter('raiseonerror', excclass=RuntimeError) - self.assertRaises(RuntimeError, list, lx.get_tokens('$')) - - def test_whitespace(self): - lx = lexers.PythonLexer() - lx.add_filter('whitespace', spaces='%') - fp = open(TESTFILE, 'rb') - try: - text = fp.read().decode('utf-8') - finally: - fp.close() - lxtext = ''.join([t[1] for t in list(lx.get_tokens(text))]) - self.assertFalse(' ' in lxtext) - - def test_keywordcase(self): - lx = lexers.PythonLexer() - lx.add_filter('keywordcase', case='capitalize') - fp = open(TESTFILE, 'rb') - try: - text = fp.read().decode('utf-8') - finally: - fp.close() - lxtext = ''.join([t[1] for t in list(lx.get_tokens(text))]) - self.assertTrue('Def' in lxtext and 'Class' in lxtext) - - def test_codetag(self): - lx = lexers.PythonLexer() - lx.add_filter('codetagify') - text = u'# BUG: text' - tokens = list(lx.get_tokens(text)) - self.assertEqual('# ', tokens[0][1]) - self.assertEqual('BUG', tokens[1][1]) - - def test_codetag_boundary(self): - # ticket #368 - lx = lexers.PythonLexer() - lx.add_filter('codetagify') - text = u'# DEBUG: text' - tokens = list(lx.get_tokens(text)) - self.assertEqual('# DEBUG: text', tokens[0][1]) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_cfm.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_cfm.py deleted file mode 100644 index 2ff25bd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_cfm.py +++ /dev/null @@ -1,46 +0,0 @@ -# -*- coding: utf-8 -*- -""" - Basic ColdfusionHtmlLexer Test - ~~~~~~~~~~~~~~~~~ - - :copyright: Copyright 2014 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -import unittest -import os - -from pygments.token import Token -from pygments.lexers import ColdfusionHtmlLexer - - -class ColdfusionHtmlLexerTest(unittest.TestCase): - - def setUp(self): - self.lexer = ColdfusionHtmlLexer() - - def testBasicComment(self): - fragment = u'' - expected = [ - (Token.Text, u''), - (Token.Comment.Multiline, u''), - (Token.Text, u'\n'), - ] - self.assertEqual(expected, list(self.lexer.get_tokens(fragment))) - - def testNestedComment(self): - fragment = u' --->' - expected = [ - (Token.Text, u''), - (Token.Comment.Multiline, u''), - (Token.Comment.Multiline, u' '), - (Token.Comment.Multiline, u'--->'), - (Token.Text, u'\n'), - ] - self.assertEqual(expected, list(self.lexer.get_tokens(fragment))) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_clexer.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_clexer.py deleted file mode 100644 index 4aac6d3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_clexer.py +++ /dev/null @@ -1,236 +0,0 @@ -# -*- coding: utf-8 -*- -""" - Basic CLexer Test - ~~~~~~~~~~~~~~~~~ - - :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -import unittest -import os -import textwrap - -from pygments.token import Text, Number, Token -from pygments.lexers import CLexer - - -class CLexerTest(unittest.TestCase): - - def setUp(self): - self.lexer = CLexer() - - def testNumbers(self): - code = '42 23.42 23. .42 023 0xdeadbeef 23e+42 42e-23' - wanted = [] - for item in zip([Number.Integer, Number.Float, Number.Float, - Number.Float, Number.Oct, Number.Hex, - Number.Float, Number.Float], code.split()): - wanted.append(item) - wanted.append((Text, ' ')) - wanted = wanted[:-1] + [(Text, '\n')] - self.assertEqual(list(self.lexer.get_tokens(code)), wanted) - - def testSwitch(self): - fragment = u'''\ - int main() - { - switch (0) - { - case 0: - default: - ; - } - } - ''' - tokens = [ - (Token.Keyword.Type, u'int'), - (Token.Text, u' '), - (Token.Name.Function, u'main'), - (Token.Punctuation, u'('), - (Token.Punctuation, u')'), - (Token.Text, u'\n'), - (Token.Punctuation, u'{'), - (Token.Text, u'\n'), - (Token.Text, u' '), - (Token.Keyword, u'switch'), - (Token.Text, u' '), - (Token.Punctuation, u'('), - (Token.Literal.Number.Integer, u'0'), - (Token.Punctuation, u')'), - (Token.Text, u'\n'), - (Token.Text, u' '), - (Token.Punctuation, u'{'), - (Token.Text, u'\n'), - (Token.Text, u' '), - (Token.Keyword, u'case'), - (Token.Text, u' '), - (Token.Literal.Number.Integer, u'0'), - (Token.Operator, u':'), - (Token.Text, u'\n'), - (Token.Text, u' '), - (Token.Keyword, u'default'), - (Token.Operator, u':'), - (Token.Text, u'\n'), - (Token.Text, u' '), - (Token.Punctuation, u';'), - (Token.Text, u'\n'), - (Token.Text, u' '), - (Token.Punctuation, u'}'), - (Token.Text, u'\n'), - (Token.Punctuation, u'}'), - (Token.Text, u'\n'), - ] - self.assertEqual(tokens, list(self.lexer.get_tokens(textwrap.dedent(fragment)))) - - def testSwitchSpaceBeforeColon(self): - fragment = u'''\ - int main() - { - switch (0) - { - case 0 : - default : - ; - } - } - ''' - tokens = [ - (Token.Keyword.Type, u'int'), - (Token.Text, u' '), - (Token.Name.Function, u'main'), - (Token.Punctuation, u'('), - (Token.Punctuation, u')'), - (Token.Text, u'\n'), - (Token.Punctuation, u'{'), - (Token.Text, u'\n'), - (Token.Text, u' '), - (Token.Keyword, u'switch'), - (Token.Text, u' '), - (Token.Punctuation, u'('), - (Token.Literal.Number.Integer, u'0'), - (Token.Punctuation, u')'), - (Token.Text, u'\n'), - (Token.Text, u' '), - (Token.Punctuation, u'{'), - (Token.Text, u'\n'), - (Token.Text, u' '), - (Token.Keyword, u'case'), - (Token.Text, u' '), - (Token.Literal.Number.Integer, u'0'), - (Token.Text, u' '), - (Token.Operator, u':'), - (Token.Text, u'\n'), - (Token.Text, u' '), - (Token.Keyword, u'default'), - (Token.Text, u' '), - (Token.Operator, u':'), - (Token.Text, u'\n'), - (Token.Text, u' '), - (Token.Punctuation, u';'), - (Token.Text, u'\n'), - (Token.Text, u' '), - (Token.Punctuation, u'}'), - (Token.Text, u'\n'), - (Token.Punctuation, u'}'), - (Token.Text, u'\n'), - ] - self.assertEqual(tokens, list(self.lexer.get_tokens(textwrap.dedent(fragment)))) - - def testLabel(self): - fragment = u'''\ - int main() - { - foo: - goto foo; - } - ''' - tokens = [ - (Token.Keyword.Type, u'int'), - (Token.Text, u' '), - (Token.Name.Function, u'main'), - (Token.Punctuation, u'('), - (Token.Punctuation, u')'), - (Token.Text, u'\n'), - (Token.Punctuation, u'{'), - (Token.Text, u'\n'), - (Token.Name.Label, u'foo'), - (Token.Punctuation, u':'), - (Token.Text, u'\n'), - (Token.Text, u' '), - (Token.Keyword, u'goto'), - (Token.Text, u' '), - (Token.Name, u'foo'), - (Token.Punctuation, u';'), - (Token.Text, u'\n'), - (Token.Punctuation, u'}'), - (Token.Text, u'\n'), - ] - self.assertEqual(tokens, list(self.lexer.get_tokens(textwrap.dedent(fragment)))) - - def testLabelSpaceBeforeColon(self): - fragment = u'''\ - int main() - { - foo : - goto foo; - } - ''' - tokens = [ - (Token.Keyword.Type, u'int'), - (Token.Text, u' '), - (Token.Name.Function, u'main'), - (Token.Punctuation, u'('), - (Token.Punctuation, u')'), - (Token.Text, u'\n'), - (Token.Punctuation, u'{'), - (Token.Text, u'\n'), - (Token.Name.Label, u'foo'), - (Token.Text, u' '), - (Token.Punctuation, u':'), - (Token.Text, u'\n'), - (Token.Text, u' '), - (Token.Keyword, u'goto'), - (Token.Text, u' '), - (Token.Name, u'foo'), - (Token.Punctuation, u';'), - (Token.Text, u'\n'), - (Token.Punctuation, u'}'), - (Token.Text, u'\n'), - ] - self.assertEqual(tokens, list(self.lexer.get_tokens(textwrap.dedent(fragment)))) - - def testLabelFollowedByStatement(self): - fragment = u'''\ - int main() - { - foo:return 0; - goto foo; - } - ''' - tokens = [ - (Token.Keyword.Type, u'int'), - (Token.Text, u' '), - (Token.Name.Function, u'main'), - (Token.Punctuation, u'('), - (Token.Punctuation, u')'), - (Token.Text, u'\n'), - (Token.Punctuation, u'{'), - (Token.Text, u'\n'), - (Token.Name.Label, u'foo'), - (Token.Punctuation, u':'), - (Token.Keyword, u'return'), - (Token.Text, u' '), - (Token.Literal.Number.Integer, u'0'), - (Token.Punctuation, u';'), - (Token.Text, u'\n'), - (Token.Text, u' '), - (Token.Keyword, u'goto'), - (Token.Text, u' '), - (Token.Name, u'foo'), - (Token.Punctuation, u';'), - (Token.Text, u'\n'), - (Token.Punctuation, u'}'), - (Token.Text, u'\n'), - ] - self.assertEqual(tokens, list(self.lexer.get_tokens(textwrap.dedent(fragment)))) diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_cmdline.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_cmdline.py deleted file mode 100644 index ef14661..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_cmdline.py +++ /dev/null @@ -1,106 +0,0 @@ -# -*- coding: utf-8 -*- -""" - Command line test - ~~~~~~~~~~~~~~~~~ - - :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -# Test the command line interface - -import io -import sys -import unittest - -from pygments import highlight -from pygments.util import StringIO -from pygments.cmdline import main as cmdline_main - -import support - -TESTFILE, TESTDIR = support.location(__file__) - - -def run_cmdline(*args): - saved_stdout = sys.stdout - saved_stderr = sys.stderr - new_stdout = sys.stdout = StringIO() - new_stderr = sys.stderr = StringIO() - try: - ret = cmdline_main(["pygmentize"] + list(args)) - finally: - sys.stdout = saved_stdout - sys.stderr = saved_stderr - return (ret, new_stdout.getvalue(), new_stderr.getvalue()) - - -class CmdLineTest(unittest.TestCase): - - def test_L_opt(self): - c, o, e = run_cmdline("-L") - self.assertEqual(c, 0) - self.assertTrue("Lexers" in o and "Formatters" in o and - "Filters" in o and "Styles" in o) - c, o, e = run_cmdline("-L", "lexer") - self.assertEqual(c, 0) - self.assertTrue("Lexers" in o and "Formatters" not in o) - c, o, e = run_cmdline("-L", "lexers") - self.assertEqual(c, 0) - - def test_O_opt(self): - filename = TESTFILE - c, o, e = run_cmdline("-Ofull=1,linenos=true,foo=bar", - "-fhtml", filename) - self.assertEqual(c, 0) - self.assertTrue("foo, bar=baz=," in o) - - def test_F_opt(self): - filename = TESTFILE - c, o, e = run_cmdline("-Fhighlight:tokentype=Name.Blubb," - "names=TESTFILE filename", - "-fhtml", filename) - self.assertEqual(c, 0) - self.assertTrue('_filename ' - 'for overriding, thus no lexer found.' - % fn) - yield check_lexer, lx, absfn, outfn - -def check_lexer(lx, absfn, outfn): - fp = open(absfn, 'rb') - try: - text = fp.read() - finally: - fp.close() - text = text.replace(b'\r\n', b'\n') - text = text.strip(b'\n') + b'\n' - try: - text = text.decode('utf-8') - if text.startswith(u'\ufeff'): - text = text[len(u'\ufeff'):] - except UnicodeError: - text = text.decode('latin1') - ntext = [] - tokens = [] - for type, val in lx.get_tokens(text): - ntext.append(val) - assert type != Error, \ - 'lexer %s generated error token for %s: %r at position %d' % \ - (lx, absfn, val, len(u''.join(ntext))) - tokens.append((type, val)) - if u''.join(ntext) != text: - print('\n'.join(difflib.unified_diff(u''.join(ntext).splitlines(), - text.splitlines()))) - raise AssertionError('round trip failed for ' + absfn) - - # check output against previous run if enabled - if STORE_OUTPUT: - # no previous output -- store it - if not os.path.isfile(outfn): - fp = open(outfn, 'wb') - try: - pickle.dump(tokens, fp) - finally: - fp.close() - return - # otherwise load it and compare - fp = open(outfn, 'rb') - try: - stored_tokens = pickle.load(fp) - finally: - fp.close() - if stored_tokens != tokens: - f1 = pprint.pformat(stored_tokens) - f2 = pprint.pformat(tokens) - print('\n'.join(difflib.unified_diff(f1.splitlines(), - f2.splitlines()))) - assert False, absfn diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_html_formatter.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_html_formatter.py deleted file mode 100644 index 91225cd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_html_formatter.py +++ /dev/null @@ -1,180 +0,0 @@ -# -*- coding: utf-8 -*- -""" - Pygments HTML formatter tests - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -from __future__ import print_function - -import io -import os -import re -import unittest -import tempfile -from os.path import join, dirname, isfile - -from pygments.util import StringIO -from pygments.lexers import PythonLexer -from pygments.formatters import HtmlFormatter, NullFormatter -from pygments.formatters.html import escape_html - -import support - -TESTFILE, TESTDIR = support.location(__file__) - -fp = io.open(TESTFILE, encoding='utf-8') -try: - tokensource = list(PythonLexer().get_tokens(fp.read())) -finally: - fp.close() - - -class HtmlFormatterTest(unittest.TestCase): - def test_correct_output(self): - hfmt = HtmlFormatter(nowrap=True) - houtfile = StringIO() - hfmt.format(tokensource, houtfile) - - nfmt = NullFormatter() - noutfile = StringIO() - nfmt.format(tokensource, noutfile) - - stripped_html = re.sub('<.*?>', '', houtfile.getvalue()) - escaped_text = escape_html(noutfile.getvalue()) - self.assertEqual(stripped_html, escaped_text) - - def test_external_css(self): - # test correct behavior - # CSS should be in /tmp directory - fmt1 = HtmlFormatter(full=True, cssfile='fmt1.css', outencoding='utf-8') - # CSS should be in TESTDIR (TESTDIR is absolute) - fmt2 = HtmlFormatter(full=True, cssfile=join(TESTDIR, 'fmt2.css'), - outencoding='utf-8') - tfile = tempfile.NamedTemporaryFile(suffix='.html') - fmt1.format(tokensource, tfile) - try: - fmt2.format(tokensource, tfile) - self.assertTrue(isfile(join(TESTDIR, 'fmt2.css'))) - except IOError: - # test directory not writable - pass - tfile.close() - - self.assertTrue(isfile(join(dirname(tfile.name), 'fmt1.css'))) - os.unlink(join(dirname(tfile.name), 'fmt1.css')) - try: - os.unlink(join(TESTDIR, 'fmt2.css')) - except OSError: - pass - - def test_all_options(self): - for optdict in [dict(nowrap=True), - dict(linenos=True), - dict(linenos=True, full=True), - dict(linenos=True, full=True, noclasses=True)]: - - outfile = StringIO() - fmt = HtmlFormatter(**optdict) - fmt.format(tokensource, outfile) - - def test_linenos(self): - optdict = dict(linenos=True) - outfile = StringIO() - fmt = HtmlFormatter(**optdict) - fmt.format(tokensource, outfile) - html = outfile.getvalue() - self.assertTrue(re.search("
    \s+1\s+2\s+3", html))
    -
    -    def test_linenos_with_startnum(self):
    -        optdict = dict(linenos=True, linenostart=5)
    -        outfile = StringIO()
    -        fmt = HtmlFormatter(**optdict)
    -        fmt.format(tokensource, outfile)
    -        html = outfile.getvalue()
    -        self.assertTrue(re.search("
    \s+5\s+6\s+7", html))
    -
    -    def test_lineanchors(self):
    -        optdict = dict(lineanchors="foo")
    -        outfile = StringIO()
    -        fmt = HtmlFormatter(**optdict)
    -        fmt.format(tokensource, outfile)
    -        html = outfile.getvalue()
    -        self.assertTrue(re.search("
    ", html))
    -
    -    def test_lineanchors_with_startnum(self):
    -        optdict = dict(lineanchors="foo", linenostart=5)
    -        outfile = StringIO()
    -        fmt = HtmlFormatter(**optdict)
    -        fmt.format(tokensource, outfile)
    -        html = outfile.getvalue()
    -        self.assertTrue(re.search("
    ", html))
    -
    -    def test_valid_output(self):
    -        # test all available wrappers
    -        fmt = HtmlFormatter(full=True, linenos=True, noclasses=True,
    -                            outencoding='utf-8')
    -
    -        handle, pathname = tempfile.mkstemp('.html')
    -        tfile = os.fdopen(handle, 'w+b')
    -        fmt.format(tokensource, tfile)
    -        tfile.close()
    -        catname = os.path.join(TESTDIR, 'dtds', 'HTML4.soc')
    -        try:
    -            import subprocess
    -            po = subprocess.Popen(['nsgmls', '-s', '-c', catname, pathname],
    -                                  stdout=subprocess.PIPE)
    -            ret = po.wait()
    -            output = po.stdout.read()
    -            po.stdout.close()
    -        except OSError:
    -            # nsgmls not available
    -            pass
    -        else:
    -            if ret:
    -                print(output)
    -            self.assertFalse(ret, 'nsgmls run reported errors')
    -
    -        os.unlink(pathname)
    -
    -    def test_get_style_defs(self):
    -        fmt = HtmlFormatter()
    -        sd = fmt.get_style_defs()
    -        self.assertTrue(sd.startswith('.'))
    -
    -        fmt = HtmlFormatter(cssclass='foo')
    -        sd = fmt.get_style_defs()
    -        self.assertTrue(sd.startswith('.foo'))
    -        sd = fmt.get_style_defs('.bar')
    -        self.assertTrue(sd.startswith('.bar'))
    -        sd = fmt.get_style_defs(['.bar', '.baz'])
    -        fl = sd.splitlines()[0]
    -        self.assertTrue('.bar' in fl and '.baz' in fl)
    -
    -    def test_unicode_options(self):
    -        fmt = HtmlFormatter(title=u'Föö',
    -                            cssclass=u'bär',
    -                            cssstyles=u'div:before { content: \'bäz\' }',
    -                            encoding='utf-8')
    -        handle, pathname = tempfile.mkstemp('.html')
    -        tfile = os.fdopen(handle, 'w+b')
    -        fmt.format(tokensource, tfile)
    -        tfile.close()
    -
    -    def test_ctags(self):
    -        try:
    -            import ctags
    -        except ImportError:
    -            # we can't check without the ctags module, but at least check the exception
    -            self.assertRaises(RuntimeError, HtmlFormatter, tagsfile='support/tags')
    -        else:
    -            # this tagfile says that test_ctags() is on line 165, even if it isn't
    -            # anymore in the actual source
    -            fmt = HtmlFormatter(tagsfile='support/tags', lineanchors='L',
    -                                tagurlformat='%(fname)s%(fext)s')
    -            outfile = StringIO()
    -            fmt.format(tokensource, outfile)
    -            self.assertTrue('test_ctags'
    -                            in outfile.getvalue())
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_latex_formatter.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_latex_formatter.py
    deleted file mode 100644
    index 13ae87c..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_latex_formatter.py
    +++ /dev/null
    @@ -1,57 +0,0 @@
    -# -*- coding: utf-8 -*-
    -"""
    -    Pygments LaTeX formatter tests
    -    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    -
    -    :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS.
    -    :license: BSD, see LICENSE for details.
    -"""
    -
    -from __future__ import print_function
    -
    -import os
    -import unittest
    -import tempfile
    -
    -from pygments.formatters import LatexFormatter
    -from pygments.lexers import PythonLexer
    -
    -import support
    -
    -TESTFILE, TESTDIR = support.location(__file__)
    -
    -
    -class LatexFormatterTest(unittest.TestCase):
    -
    -    def test_valid_output(self):
    -        fp = open(TESTFILE)
    -        try:
    -            tokensource = list(PythonLexer().get_tokens(fp.read()))
    -        finally:
    -            fp.close()
    -        fmt = LatexFormatter(full=True, encoding='latin1')
    -
    -        handle, pathname = tempfile.mkstemp('.tex')
    -        # place all output files in /tmp too
    -        old_wd = os.getcwd()
    -        os.chdir(os.path.dirname(pathname))
    -        tfile = os.fdopen(handle, 'wb')
    -        fmt.format(tokensource, tfile)
    -        tfile.close()
    -        try:
    -            import subprocess
    -            po = subprocess.Popen(['latex', '-interaction=nonstopmode',
    -                                   pathname], stdout=subprocess.PIPE)
    -            ret = po.wait()
    -            output = po.stdout.read()
    -            po.stdout.close()
    -        except OSError:
    -            # latex not available
    -            pass
    -        else:
    -            if ret:
    -                print(output)
    -            self.assertFalse(ret, 'latex run reported errors')
    -
    -        os.unlink(pathname)
    -        os.chdir(old_wd)
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_lexers_other.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_lexers_other.py
    deleted file mode 100644
    index 91b0dc7..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_lexers_other.py
    +++ /dev/null
    @@ -1,68 +0,0 @@
    -# -*- coding: utf-8 -*-
    -"""
    -    Tests for other lexers
    -    ~~~~~~~~~~~~~~~~~~~~~~
    -
    -    :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS.
    -    :license: BSD, see LICENSE for details.
    -"""
    -
    -import glob
    -import os
    -import unittest
    -
    -from pygments.lexers import guess_lexer
    -from pygments.lexers.other import RexxLexer
    -
    -
    -def _exampleFilePath(filename):
    -    return os.path.join(os.path.dirname(__file__), 'examplefiles', filename)
    -
    -
    -class AnalyseTextTest(unittest.TestCase):
    -    def _testCanRecognizeAndGuessExampleFiles(self, lexer):
    -        assert lexer is not None
    -
    -        for pattern in lexer.filenames:
    -            exampleFilesPattern = _exampleFilePath(pattern)
    -            for exampleFilePath in glob.glob(exampleFilesPattern):
    -                exampleFile = open(exampleFilePath, 'rb')
    -                try:
    -                    text = exampleFile.read().decode('utf-8')
    -                    probability = lexer.analyse_text(text)
    -                    self.assertTrue(probability > 0,
    -                        '%s must recognize %r' % (
    -                        lexer.name, exampleFilePath))
    -                    guessedLexer = guess_lexer(text)
    -                    self.assertEqual(guessedLexer.name, lexer.name)
    -                finally:
    -                    exampleFile.close()
    -
    -    def testCanRecognizeAndGuessExampleFiles(self):
    -        self._testCanRecognizeAndGuessExampleFiles(RexxLexer)
    -
    -
    -class RexxLexerTest(unittest.TestCase):
    -    def testCanGuessFromText(self):
    -        self.assertAlmostEqual(0.01,
    -            RexxLexer.analyse_text('/* */'))
    -        self.assertAlmostEqual(1.0,
    -            RexxLexer.analyse_text('''/* Rexx */
    -                say "hello world"'''))
    -        val = RexxLexer.analyse_text('/* */\n'
    -                'hello:pRoceduRe\n'
    -                '  say "hello world"')
    -        self.assertTrue(val > 0.5, val)
    -        val = RexxLexer.analyse_text('''/* */
    -                if 1 > 0 then do
    -                    say "ok"
    -                end
    -                else do
    -                    say "huh?"
    -                end''')
    -        self.assertTrue(val > 0.2, val)
    -        val = RexxLexer.analyse_text('''/* */
    -                greeting = "hello world!"
    -                parse value greeting "hello" name "!"
    -                say name''')
    -        self.assertTrue(val > 0.2, val)
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_objectiveclexer.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_objectiveclexer.py
    deleted file mode 100644
    index 7339f6f..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_objectiveclexer.py
    +++ /dev/null
    @@ -1,81 +0,0 @@
    -# -*- coding: utf-8 -*-
    -"""
    -    Basic CLexer Test
    -    ~~~~~~~~~~~~~~~~~
    -
    -    :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS.
    -    :license: BSD, see LICENSE for details.
    -"""
    -
    -import unittest
    -import os
    -
    -from pygments.token import Token
    -from pygments.lexers import ObjectiveCLexer
    -
    -
    -class ObjectiveCLexerTest(unittest.TestCase):
    -
    -    def setUp(self):
    -        self.lexer = ObjectiveCLexer()
    -
    -    def testLiteralNumberInt(self):
    -        fragment = u'@(1);\n'
    -        expected = [
    -            (Token.Literal, u'@('),
    -            (Token.Literal.Number.Integer, u'1'),
    -            (Token.Literal, u')'),
    -            (Token.Punctuation, u';'),
    -            (Token.Text, u'\n'),
    -        ]
    -        self.assertEqual(expected, list(self.lexer.get_tokens(fragment)))
    -
    -    def testLiteralNumberExpression(self):
    -        fragment = u'@(1+2);\n'
    -        expected = [
    -            (Token.Literal, u'@('),
    -            (Token.Literal.Number.Integer, u'1'),
    -            (Token.Operator, u'+'),
    -            (Token.Literal.Number.Integer, u'2'),
    -            (Token.Literal, u')'),
    -            (Token.Punctuation, u';'),
    -            (Token.Text, u'\n'),
    -        ]
    -        self.assertEqual(expected, list(self.lexer.get_tokens(fragment)))
    -
    -    def testLiteralNumberNestedExpression(self):
    -        fragment = u'@(1+(2+3));\n'
    -        expected = [
    -            (Token.Literal, u'@('),
    -            (Token.Literal.Number.Integer, u'1'),
    -            (Token.Operator, u'+'),
    -            (Token.Punctuation, u'('),
    -            (Token.Literal.Number.Integer, u'2'),
    -            (Token.Operator, u'+'),
    -            (Token.Literal.Number.Integer, u'3'),
    -            (Token.Punctuation, u')'),
    -            (Token.Literal, u')'),
    -            (Token.Punctuation, u';'),
    -            (Token.Text, u'\n'),
    -        ]
    -        self.assertEqual(expected, list(self.lexer.get_tokens(fragment)))
    -
    -    def testLiteralNumberBool(self):
    -        fragment = u'@NO;\n'
    -        expected = [
    -            (Token.Literal.Number, u'@NO'),
    -            (Token.Punctuation, u';'),
    -            (Token.Text, u'\n'),
    -        ]
    -        self.assertEqual(expected, list(self.lexer.get_tokens(fragment)))
    -
    -    def testLieralNumberBoolExpression(self):
    -        fragment = u'@(YES);\n'
    -        expected = [
    -            (Token.Literal, u'@('),
    -            (Token.Name.Builtin, u'YES'),
    -            (Token.Literal, u')'),
    -            (Token.Punctuation, u';'),
    -            (Token.Text, u'\n'),
    -        ]
    -        self.assertEqual(expected, list(self.lexer.get_tokens(fragment)))
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_perllexer.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_perllexer.py
    deleted file mode 100644
    index bfa3aeb..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_perllexer.py
    +++ /dev/null
    @@ -1,137 +0,0 @@
    -# -*- coding: utf-8 -*-
    -"""
    -    Pygments regex lexer tests
    -    ~~~~~~~~~~~~~~~~~~~~~~~~~~
    -
    -    :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS.
    -    :license: BSD, see LICENSE for details.
    -"""
    -
    -import time
    -import unittest
    -
    -from pygments.token import String
    -from pygments.lexers.agile import PerlLexer
    -
    -
    -class RunawayRegexTest(unittest.TestCase):
    -    # A previous version of the Perl lexer would spend a great deal of
    -    # time backtracking when given particular strings.  These tests show that
    -    # the runaway backtracking doesn't happen any more (at least for the given
    -    # cases).
    -
    -    lexer = PerlLexer()
    -
    -    ### Test helpers.
    -
    -    def assert_single_token(self, s, token):
    -        """Show that a given string generates only one token."""
    -        tokens = list(self.lexer.get_tokens_unprocessed(s))
    -        self.assertEqual(len(tokens), 1, tokens)
    -        self.assertEqual(s, tokens[0][2])
    -        self.assertEqual(token, tokens[0][1])
    -
    -    def assert_tokens(self, strings, expected_tokens):
    -        """Show that a given string generates the expected tokens."""
    -        tokens = list(self.lexer.get_tokens_unprocessed(''.join(strings)))
    -        self.assertEqual(len(tokens), len(expected_tokens), tokens)
    -        for index, s in enumerate(strings):
    -            self.assertEqual(s, tokens[index][2])
    -            self.assertEqual(expected_tokens[index], tokens[index][1])
    -
    -    def assert_fast_tokenization(self, s):
    -        """Show that a given string is tokenized quickly."""
    -        start = time.time()
    -        tokens = list(self.lexer.get_tokens_unprocessed(s))
    -        end = time.time()
    -        # Isn't 10 seconds kind of a long time?  Yes, but we don't want false
    -        # positives when the tests are starved for CPU time.
    -        if end-start > 10:
    -            self.fail('tokenization took too long')
    -        return tokens
    -
    -    ### Strings.
    -
    -    def test_single_quote_strings(self):
    -        self.assert_single_token(r"'foo\tbar\\\'baz'", String)
    -        self.assert_fast_tokenization("'" + '\\'*999)
    -
    -    def test_double_quote_strings(self):
    -        self.assert_single_token(r'"foo\tbar\\\"baz"', String)
    -        self.assert_fast_tokenization('"' + '\\'*999)
    -
    -    def test_backtick_strings(self):
    -        self.assert_single_token(r'`foo\tbar\\\`baz`', String.Backtick)
    -        self.assert_fast_tokenization('`' + '\\'*999)
    -
    -    ### Regex matches with various delimiters.
    -
    -    def test_match(self):
    -        self.assert_single_token(r'/aa\tbb/', String.Regex)
    -        self.assert_fast_tokenization('/' + '\\'*999)
    -
    -    def test_match_with_slash(self):
    -        self.assert_tokens(['m', '/\n\\t\\\\/'], [String.Regex, String.Regex])
    -        self.assert_fast_tokenization('m/xxx\n' + '\\'*999)
    -
    -    def test_match_with_bang(self):
    -        self.assert_tokens(['m', r'!aa\t\!bb!'], [String.Regex, String.Regex])
    -        self.assert_fast_tokenization('m!' + '\\'*999)
    -
    -    def test_match_with_brace(self):
    -        self.assert_tokens(['m', r'{aa\t\}bb}'], [String.Regex, String.Regex])
    -        self.assert_fast_tokenization('m{' + '\\'*999)
    -
    -    def test_match_with_angle_brackets(self):
    -        self.assert_tokens(['m', r'bb>'], [String.Regex, String.Regex])
    -        self.assert_fast_tokenization('m<' + '\\'*999)
    -
    -    def test_match_with_parenthesis(self):
    -        self.assert_tokens(['m', r'(aa\t\)bb)'], [String.Regex, String.Regex])
    -        self.assert_fast_tokenization('m(' + '\\'*999)
    -
    -    def test_match_with_at_sign(self):
    -        self.assert_tokens(['m', r'@aa\t\@bb@'], [String.Regex, String.Regex])
    -        self.assert_fast_tokenization('m@' + '\\'*999)
    -
    -    def test_match_with_percent_sign(self):
    -        self.assert_tokens(['m', r'%aa\t\%bb%'], [String.Regex, String.Regex])
    -        self.assert_fast_tokenization('m%' + '\\'*999)
    -
    -    def test_match_with_dollar_sign(self):
    -        self.assert_tokens(['m', r'$aa\t\$bb$'], [String.Regex, String.Regex])
    -        self.assert_fast_tokenization('m$' + '\\'*999)
    -
    -    ### Regex substitutions with various delimeters.
    -
    -    def test_substitution_with_slash(self):
    -        self.assert_single_token('s/aaa/bbb/g', String.Regex)
    -        self.assert_fast_tokenization('s/foo/' + '\\'*999)
    -
    -    def test_substitution_with_at_sign(self):
    -        self.assert_single_token(r's@aaa@bbb@g', String.Regex)
    -        self.assert_fast_tokenization('s@foo@' + '\\'*999)
    -
    -    def test_substitution_with_percent_sign(self):
    -        self.assert_single_token(r's%aaa%bbb%g', String.Regex)
    -        self.assert_fast_tokenization('s%foo%' + '\\'*999)
    -
    -    def test_substitution_with_brace(self):
    -        self.assert_single_token(r's{aaa}', String.Regex)
    -        self.assert_fast_tokenization('s{' + '\\'*999)
    -
    -    def test_substitution_with_angle_bracket(self):
    -        self.assert_single_token(r's', String.Regex)
    -        self.assert_fast_tokenization('s<' + '\\'*999)
    -
    -    def test_substitution_with_angle_bracket(self):
    -        self.assert_single_token(r's', String.Regex)
    -        self.assert_fast_tokenization('s<' + '\\'*999)
    -
    -    def test_substitution_with_square_bracket(self):
    -        self.assert_single_token(r's[aaa]', String.Regex)
    -        self.assert_fast_tokenization('s[' + '\\'*999)
    -
    -    def test_substitution_with_parenthesis(self):
    -        self.assert_single_token(r's(aaa)', String.Regex)
    -        self.assert_fast_tokenization('s(' + '\\'*999)
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_qbasiclexer.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_qbasiclexer.py
    deleted file mode 100644
    index 1b81b64..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_qbasiclexer.py
    +++ /dev/null
    @@ -1,43 +0,0 @@
    -# -*- coding: utf-8 -*-
    -"""
    -    Tests for QBasic
    -    ~~~~~~~~~~~~~~~~
    -
    -    :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS.
    -    :license: BSD, see LICENSE for details.
    -"""
    -
    -import glob
    -import os
    -import unittest
    -
    -from pygments.token import Token
    -from pygments.lexers.qbasic import QBasicLexer
    -
    -class QBasicTest(unittest.TestCase):
    -    def setUp(self):
    -        self.lexer = QBasicLexer()
    -        self.maxDiff = None
    -
    -    def testKeywordsWithDollar(self):
    -        fragment = u'DIM x\nx = RIGHT$("abc", 1)\n'
    -        expected = [
    -            (Token.Keyword.Declaration, u'DIM'),
    -            (Token.Text.Whitespace, u' '),
    -            (Token.Name.Variable.Global, u'x'),
    -            (Token.Text, u'\n'),
    -            (Token.Name.Variable.Global, u'x'),
    -            (Token.Text.Whitespace, u' '),
    -            (Token.Operator, u'='),
    -            (Token.Text.Whitespace, u' '),
    -            (Token.Keyword.Reserved, u'RIGHT$'),
    -            (Token.Punctuation, u'('),
    -            (Token.Literal.String.Double, u'"abc"'),
    -            (Token.Punctuation, u','),
    -            (Token.Text.Whitespace, u' '),
    -            (Token.Literal.Number.Integer.Long, u'1'),
    -            (Token.Punctuation, u')'),
    -            (Token.Text, u'\n'),
    -        ]
    -        self.assertEqual(expected, list(self.lexer.get_tokens(fragment)))
    -
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_regexlexer.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_regexlexer.py
    deleted file mode 100644
    index 546dfca..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_regexlexer.py
    +++ /dev/null
    @@ -1,54 +0,0 @@
    -# -*- coding: utf-8 -*-
    -"""
    -    Pygments regex lexer tests
    -    ~~~~~~~~~~~~~~~~~~~~~~~~~~
    -
    -    :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS.
    -    :license: BSD, see LICENSE for details.
    -"""
    -
    -import unittest
    -
    -from pygments.token import Text
    -from pygments.lexer import RegexLexer
    -from pygments.lexer import bygroups
    -from pygments.lexer import default
    -
    -
    -class TestLexer(RegexLexer):
    -    """Test tuple state transitions including #pop."""
    -    tokens = {
    -        'root': [
    -            ('a', Text.Root, 'rag'),
    -            ('e', Text.Root),
    -            default(('beer', 'beer'))
    -        ],
    -        'beer': [
    -            ('d', Text.Beer, ('#pop', '#pop')),
    -        ],
    -        'rag': [
    -            ('b', Text.Rag, '#push'),
    -            ('c', Text.Rag, ('#pop', 'beer')),
    -        ],
    -    }
    -
    -
    -class TupleTransTest(unittest.TestCase):
    -    def test(self):
    -        lx = TestLexer()
    -        toks = list(lx.get_tokens_unprocessed('abcde'))
    -        self.assertEqual(toks,
    -           [(0, Text.Root, 'a'), (1, Text.Rag, 'b'), (2, Text.Rag, 'c'),
    -            (3, Text.Beer, 'd'), (4, Text.Root, 'e')])
    -
    -    def test_multiline(self):
    -        lx = TestLexer()
    -        toks = list(lx.get_tokens_unprocessed('a\ne'))
    -        self.assertEqual(toks,
    -           [(0, Text.Root, 'a'), (1, Text, u'\n'),
    -            (2, Text.Root, 'e')])
    -
    -    def test_default(self):
    -        lx = TestLexer()
    -        toks = list(lx.get_tokens_unprocessed('d'))
    -        self.assertEqual(toks, [(0, Text.Beer, 'd')])
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_rtf_formatter.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_rtf_formatter.py
    deleted file mode 100644
    index 30b136f..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_rtf_formatter.py
    +++ /dev/null
    @@ -1,109 +0,0 @@
    -# -*- coding: utf-8 -*-
    -"""
    -    Pygments RTF formatter tests
    -    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    -
    -    :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS.
    -    :license: BSD, see LICENSE for details.
    -"""
    -
    -import unittest
    -from string_asserts import StringTests
    -
    -from pygments.util import StringIO
    -from pygments.formatters import RtfFormatter
    -from pygments.lexers.special import TextLexer
    -
    -class RtfFormatterTest(StringTests, unittest.TestCase):
    -    foot = (r'\par' '\n' r'}')
    -
    -    def _escape(self, string):
    -        return(string.replace("\n", r"\n"))
    -
    -    def _build_message(self, *args, **kwargs):
    -        string = kwargs.get('string', None)
    -        t = self._escape(kwargs.get('t', ''))
    -        expected = self._escape(kwargs.get('expected', ''))
    -        result = self._escape(kwargs.get('result', ''))
    -
    -        if string is None:
    -            string = (u"The expected output of '{t}'\n"
    -                      u"\t\tShould be '{expected}'\n"
    -                      u"\t\tActually outputs '{result}'\n"
    -                      u"\t(WARNING: Partial Output of Result!)")
    -
    -        end = -(len(self._escape(self.foot)))
    -        start = end-len(expected)
    -
    -        return string.format(t=t,
    -                             result = result[start:end],
    -                             expected = expected)
    -
    -    def format_rtf(self, t):
    -        tokensource = list(TextLexer().get_tokens(t))
    -        fmt = RtfFormatter()
    -        buf = StringIO()
    -        fmt.format(tokensource, buf)
    -        result = buf.getvalue()
    -        buf.close()
    -        return result
    -
    -    def test_rtf_header(self):
    -        t = u''
    -        result = self.format_rtf(t)
    -        expected = r'{\rtf1\ansi\uc0'
    -        msg = (u"RTF documents are expected to start with '{expected}'\n"
    -               u"\t\tStarts intead with '{result}'\n"
    -               u"\t(WARNING: Partial Output of Result!)".format(
    -                   expected = expected,
    -                   result = result[:len(expected)]))
    -        self.assertStartsWith(result, expected, msg)
    -
    -    def test_rtf_footer(self):
    -        t = u''
    -        result = self.format_rtf(t)
    -        expected = self.foot
    -        msg = (u"RTF documents are expected to end with '{expected}'\n"
    -               u"\t\tEnds intead with '{result}'\n"
    -               u"\t(WARNING: Partial Output of Result!)".format(
    -                   expected = self._escape(expected),
    -                   result = self._escape(result[-len(expected):])))
    -        self.assertEndsWith(result, expected, msg)
    -
    -    def test_ascii_characters(self):
    -        t = u'a b c d ~'
    -        result = self.format_rtf(t)
    -        expected = (r'a b c d ~')
    -        if not result.endswith(self.foot):
    -            return(unittest.skip('RTF Footer incorrect'))
    -        msg = self._build_message(t=t, result=result, expected=expected)
    -        self.assertEndsWith(result, expected+self.foot, msg)
    -
    -    def test_escape_characters(self):
    -        t = u'\ {{'
    -        result = self.format_rtf(t)
    -        expected = (r'\\ \{\{')
    -        if not result.endswith(self.foot):
    -            return(unittest.skip('RTF Footer incorrect'))
    -        msg = self._build_message(t=t, result=result, expected=expected)
    -        self.assertEndsWith(result, expected+self.foot, msg)
    -
    -    def test_single_characters(self):
    -        t = u'â € ¤ каждой'
    -        result = self.format_rtf(t)
    -        expected = (r'{\u226} {\u8364} {\u164} '
    -                    r'{\u1082}{\u1072}{\u1078}{\u1076}{\u1086}{\u1081}')
    -        if not result.endswith(self.foot):
    -            return(unittest.skip('RTF Footer incorrect'))
    -        msg = self._build_message(t=t, result=result, expected=expected)
    -        self.assertEndsWith(result, expected+self.foot, msg)
    -
    -    def test_double_characters(self):
    -        t = u'က 힣 ↕ ↕︎ 鼖'
    -        result = self.format_rtf(t)
    -        expected = (r'{\u4096} {\u55203} {\u8597} '
    -                    r'{\u8597}{\u65038} {\u55422}{\u56859}')
    -        if not result.endswith(self.foot):
    -            return(unittest.skip('RTF Footer incorrect'))
    -        msg = self._build_message(t=t, result=result, expected=expected)
    -        self.assertEndsWith(result, expected+self.foot, msg)
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_string_asserts.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_string_asserts.py
    deleted file mode 100644
    index 0beed15..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_string_asserts.py
    +++ /dev/null
    @@ -1,39 +0,0 @@
    -# -*- coding: utf-8 -*-
    -"""
    -    Pygments string assert utility tests
    -    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    -
    -    :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS.
    -    :license: BSD, see LICENSE for details.
    -"""
    -
    -import unittest
    -from string_asserts import StringTests
    -
    -class TestStringTests(StringTests, unittest.TestCase):
    -
    -    def test_startswith_correct(self):
    -        self.assertStartsWith("AAA", "A")
    -
    -    # @unittest.expectedFailure not supported by nose
    -    def test_startswith_incorrect(self):
    -        with self.assertRaises(AssertionError):
    -            self.assertStartsWith("AAA", "B")
    -
    -    # @unittest.expectedFailure not supported by nose
    -    def test_startswith_short(self):
    -        with self.assertRaises(AssertionError):
    -            self.assertStartsWith("A", "AA")
    -
    -    def test_endswith_correct(self):
    -        self.assertEndsWith("AAA", "A")
    -
    -    # @unittest.expectedFailure not supported by nose
    -    def test_endswith_incorrect(self):
    -        with self.assertRaises(AssertionError):
    -            self.assertEndsWith("AAA", "B")
    -
    -    # @unittest.expectedFailure not supported by nose
    -    def test_endswith_short(self):
    -        with self.assertRaises(AssertionError):
    -            self.assertEndsWith("A", "AA")
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_token.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_token.py
    deleted file mode 100644
    index c5cc499..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_token.py
    +++ /dev/null
    @@ -1,46 +0,0 @@
    -# -*- coding: utf-8 -*-
    -"""
    -    Test suite for the token module
    -    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    -
    -    :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS.
    -    :license: BSD, see LICENSE for details.
    -"""
    -
    -import unittest
    -
    -from pygments import token
    -
    -
    -class TokenTest(unittest.TestCase):
    -
    -    def test_tokentype(self):
    -        e = self.assertEqual
    -
    -        t = token.String
    -
    -        e(t.split(), [token.Token, token.Literal, token.String])
    -
    -        e(t.__class__, token._TokenType)
    -
    -    def test_functions(self):
    -        self.assertTrue(token.is_token_subtype(token.String, token.String))
    -        self.assertTrue(token.is_token_subtype(token.String, token.Literal))
    -        self.assertFalse(token.is_token_subtype(token.Literal, token.String))
    -
    -        self.assertTrue(token.string_to_tokentype(token.String) is token.String)
    -        self.assertTrue(token.string_to_tokentype('') is token.Token)
    -        self.assertTrue(token.string_to_tokentype('String') is token.String)
    -
    -    def test_sanity_check(self):
    -        stp = token.STANDARD_TYPES.copy()
    -        stp[token.Token] = '---' # Token and Text do conflict, that is okay
    -        t = {}
    -        for k, v in stp.items():
    -            t.setdefault(v, []).append(k)
    -        if len(t) == len(stp):
    -            return # Okay
    -
    -        for k, v in t.items():
    -            if len(v) > 1:
    -                self.fail("%r has more than one key: %r" % (k, v))
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_using_api.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_using_api.py
    deleted file mode 100644
    index 9e53c20..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_using_api.py
    +++ /dev/null
    @@ -1,40 +0,0 @@
    -# -*- coding: utf-8 -*-
    -"""
    -    Pygments tests for using()
    -    ~~~~~~~~~~~~~~~~~~~~~~~~~~
    -
    -    :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS.
    -    :license: BSD, see LICENSE for details.
    -"""
    -
    -import unittest
    -
    -from pygments.lexer import using, bygroups, this, RegexLexer
    -from pygments.token import String, Text, Keyword
    -
    -class TestLexer(RegexLexer):
    -    tokens = {
    -        'root': [
    -            (r'#.*',
    -             using(this, state='invalid')),
    -            (r'(")(.+?)(")',
    -             bygroups(String, using(this, state='string'), String)),
    -            (r'[^"]+', Text),
    -        ],
    -        'string': [
    -            (r'.+', Keyword),
    -        ],
    -    }
    -
    -
    -class UsingStateTest(unittest.TestCase):
    -    def test_basic(self):
    -        expected = [(Text, 'a'), (String, '"'), (Keyword, 'bcd'),
    -                    (String, '"'), (Text, 'e\n')]
    -        t = list(TestLexer().get_tokens('a"bcd"e'))
    -        self.assertEqual(t, expected)
    -
    -    def test_error(self):
    -        def gen():
    -            return list(TestLexer().get_tokens('#a'))
    -        self.assertRaises(KeyError, gen)
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_util.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_util.py
    deleted file mode 100644
    index 59ecf14..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/pygments-main/tests/test_util.py
    +++ /dev/null
    @@ -1,135 +0,0 @@
    -# -*- coding: utf-8 -*-
    -"""
    -    Test suite for the util module
    -    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    -
    -    :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS.
    -    :license: BSD, see LICENSE for details.
    -"""
    -
    -import re
    -import unittest
    -
    -from pygments import util
    -
    -
    -class FakeLexer(object):
    -    def analyse(text):
    -        return float(text)
    -    analyse = util.make_analysator(analyse)
    -
    -
    -class UtilTest(unittest.TestCase):
    -
    -    def test_getoptions(self):
    -        raises = self.assertRaises
    -        equals = self.assertEqual
    -
    -        equals(util.get_bool_opt({}, 'a', True), True)
    -        equals(util.get_bool_opt({}, 'a', 1), True)
    -        equals(util.get_bool_opt({}, 'a', 'true'), True)
    -        equals(util.get_bool_opt({}, 'a', 'no'), False)
    -        raises(util.OptionError, util.get_bool_opt, {}, 'a', [])
    -        raises(util.OptionError, util.get_bool_opt, {}, 'a', 'foo')
    -
    -        equals(util.get_int_opt({}, 'a', 1), 1)
    -        raises(util.OptionError, util.get_int_opt, {}, 'a', [])
    -        raises(util.OptionError, util.get_int_opt, {}, 'a', 'bar')
    -
    -        equals(util.get_list_opt({}, 'a', [1]), [1])
    -        equals(util.get_list_opt({}, 'a', '1 2'), ['1', '2'])
    -        raises(util.OptionError, util.get_list_opt, {}, 'a', 1)
    -
    -
    -    def test_docstring_headline(self):
    -        def f1():
    -            """
    -            docstring headline
    -
    -            other text
    -            """
    -        def f2():
    -            """
    -            docstring
    -            headline
    -
    -            other text
    -            """
    -
    -        self.assertEqual(util.docstring_headline(f1), "docstring headline")
    -        self.assertEqual(util.docstring_headline(f2), "docstring headline")
    -
    -    def test_analysator_returns_float(self):
    -        # If an analysator wrapped by make_analysator returns a floating point
    -        # number, then that number will be returned by the wrapper.
    -        self.assertEqual(FakeLexer.analyse('0.5'), 0.5)
    -
    -    def test_analysator_returns_boolean(self):
    -        # If an analysator wrapped by make_analysator returns a boolean value,
    -        # then the wrapper will return 1.0 if the boolean was True or 0.0 if
    -        # it was False.
    -        self.assertEqual(FakeLexer.analyse(True), 1.0)
    -        self.assertEqual(FakeLexer.analyse(False), 0.0)
    -
    -    def test_analysator_raises_exception(self):
    -        # If an analysator wrapped by make_analysator raises an exception,
    -        # then the wrapper will return 0.0.
    -        class ErrorLexer(object):
    -            def analyse(text):
    -                raise RuntimeError('something bad happened')
    -            analyse = util.make_analysator(analyse)
    -        self.assertEqual(ErrorLexer.analyse(''), 0.0)
    -
    -    def test_analysator_value_error(self):
    -        # When converting the analysator's return value to a float a
    -        # ValueError may occur.  If that happens 0.0 is returned instead.
    -        self.assertEqual(FakeLexer.analyse('bad input'), 0.0)
    -
    -    def test_analysator_type_error(self):
    -        # When converting the analysator's return value to a float a
    -        # TypeError may occur.  If that happens 0.0 is returned instead.
    -        self.assertEqual(FakeLexer.analyse(None), 0.0)
    -
    -    def test_shebang_matches(self):
    -        self.assertTrue(util.shebang_matches('#!/usr/bin/env python', r'python(2\.\d)?'))
    -        self.assertTrue(util.shebang_matches('#!/usr/bin/python2.4', r'python(2\.\d)?'))
    -        self.assertTrue(util.shebang_matches('#!/usr/bin/startsomethingwith python',
    -                                             r'python(2\.\d)?'))
    -        self.assertTrue(util.shebang_matches('#!C:\\Python2.4\\Python.exe',
    -                                             r'python(2\.\d)?'))
    -
    -        self.assertFalse(util.shebang_matches('#!/usr/bin/python-ruby',
    -                                              r'python(2\.\d)?'))
    -        self.assertFalse(util.shebang_matches('#!/usr/bin/python/ruby',
    -                                              r'python(2\.\d)?'))
    -        self.assertFalse(util.shebang_matches('#!', r'python'))
    -
    -    def test_doctype_matches(self):
    -        self.assertTrue(util.doctype_matches(
    -            ' ', 'html.*'))
    -        self.assertFalse(util.doctype_matches(
    -            '  ', 'html.*'))
    -        self.assertTrue(util.html_doctype_matches(
    -            ''))
    -
    -    def test_xml(self):
    -        self.assertTrue(util.looks_like_xml(
    -            ''))
    -        self.assertTrue(util.looks_like_xml('abc'))
    -        self.assertFalse(util.looks_like_xml(''))
    -
    -    def test_unirange(self):
    -        first_non_bmp = u'\U00010000'
    -        r = re.compile(util.unirange(0x10000, 0x20000))
    -        m = r.match(first_non_bmp)
    -        self.assertTrue(m)
    -        self.assertEquals(m.end(), len(first_non_bmp))
    -        self.assertFalse(r.match(u'\uffff'))
    -        self.assertFalse(r.match(u'xxx'))
    -        # Tests that end is inclusive
    -        r = re.compile(util.unirange(0x10000, 0x10000) + '+')
    -        # Tests that the plus works for the entire unicode point, if narrow
    -        # build
    -        m = r.match(first_non_bmp * 2)
    -        self.assertTrue(m)
    -        self.assertEquals(m.end(), len(first_non_bmp) * 2)
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/.gitignore b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/.gitignore
    deleted file mode 100644
    index c1f7933..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/.gitignore
    +++ /dev/null
    @@ -1,10 +0,0 @@
    -*.egg-info
    -*.egg
    -*.pyc
    -*.so
    -/MANIFEST
    -/.coverage
    -/coverage.xml
    -/build
    -/dist
    -/docs
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/.travis.yml b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/.travis.yml
    deleted file mode 100644
    index d81b6d1..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/.travis.yml
    +++ /dev/null
    @@ -1,5 +0,0 @@
    -language: python
    -python:
    -  - "2.6"
    -  - "2.7"
    -script: python setup.py test
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/CHANGES.txt b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/CHANGES.txt
    deleted file mode 100644
    index 10cb5b9..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/CHANGES.txt
    +++ /dev/null
    @@ -1,291 +0,0 @@
    -Version 2.6.0 released 2012-06-26
    -
    -* Error messages changed to match proposal for Python 3.3.1
    -  http://bugs.python.org/issue5067
    -
    -Version 2.5.2 released 2012-05-10
    -
    -* Fix for regression introduced in 2.5.1
    -  https://github.com/simplejson/simplejson/issues/35
    -
    -Version 2.5.1 released 2012-05-10
    -
    -* Support for use_decimal=True in environments that use Python
    -  sub-interpreters such as uWSGI
    -  https://github.com/simplejson/simplejson/issues/34
    -
    -Version 2.5.0 released 2012-03-29
    -
    -* New item_sort_key option for encoder to allow fine grained control of sorted
    -  output
    -
    -Version 2.4.0 released 2012-03-06
    -
    -* New bigint_as_string option for encoder to trade JavaScript number precision
    -  issues for type issues.
    -  https://github.com/simplejson/simplejson/issues/31
    -
    -Version 2.3.3 released 2012-02-27
    -
    -* Allow unknown numerical types for indent parameter
    -  https://github.com/simplejson/simplejson/pull/29
    -
    -Version 2.3.2 released 2011-12-30
    -
    -* Fix crashing regression in speedups introduced in 2.3.1
    -
    -Version 2.3.1 released 2011-12-29
    -
    -* namedtuple_as_object now checks _asdict to ensure that it
    -  is callable.
    -  https://github.com/simplejson/simplejson/issues/26
    -
    -Version 2.3.0 released 2011-12-05
    -
    -* Any objects with _asdict() methods are now considered for
    -  namedtuple_as_object.
    -  https://github.com/simplejson/simplejson/pull/22
    -
    -Version 2.2.1 released 2011-09-06
    -
    -* Fix MANIFEST.in issue when building a sdist from a sdist.
    -  https://github.com/simplejson/simplejson/issues/16
    -
    -Version 2.2.0 released 2011-09-04
    -
    -* Remove setuptools requirement, reverted to pure distutils
    -* use_decimal default for encoding (dump, dumps, JSONEncoder) is now True
    -* tuple encoding as JSON objects can be turned off with new
    -  tuple_as_array=False option.
    -  https://github.com/simplejson/simplejson/pull/6
    -* namedtuple (or other tuple subclasses with _asdict methods) are now
    -  encoded as JSON objects rather than arrays by default. Can be disabled
    -  and treated as a tuple with the new namedtuple_as_object=False option.
    -  https://github.com/simplejson/simplejson/pull/6
    -* JSONDecodeError is now raised instead of ValueError when a document
    -  ends with an opening quote and the C speedups are in use.
    -  https://github.com/simplejson/simplejson/issues/15
    -* Updated documentation with information about JSONDecodeError
    -* Force unicode linebreak characters to be escaped (U+2028 and U+2029)
    -  http://timelessrepo.com/json-isnt-a-javascript-subset
    -* Moved documentation from a git submodule to
    -  http://simplejson.readthedocs.org/
    -
    -Version 2.1.6 released 2011-05-08
    -
    -* Prevent segfaults with deeply nested JSON documents
    -  https://github.com/simplejson/simplejson/issues/11
    -* Fix compatibility with Python 2.5
    -  https://github.com/simplejson/simplejson/issues/5
    -
    -Version 2.1.5 released 2011-04-17
    -
    -* Built sdist tarball with setuptools_git installed. Argh.
    -
    -Version 2.1.4 released 2011-04-17
    -
    -* Does not try to build the extension when using PyPy
    -* Trailing whitespace after commas no longer emitted when indent is used
    -* Migrated to github http://github.com/simplejson/simplejson
    -
    -Version 2.1.3 released 2011-01-17
    -
    -* Support the sort_keys option in C encoding speedups
    -  http://code.google.com/p/simplejson/issues/detail?id=86
    -* Allow use_decimal to work with dump()
    -  http://code.google.com/p/simplejson/issues/detail?id=87
    -
    -Version 2.1.2 released 2010-11-01
    -
    -* Correct wrong end when object_pairs_hook is used
    -  http://code.google.com/p/simplejson/issues/detail?id=85
    -* Correct output for indent=0
    -  http://bugs.python.org/issue10019
    -* Correctly raise TypeError when non-string keys are used with speedups
    -  http://code.google.com/p/simplejson/issues/detail?id=82
    -* Fix the endlineno, endcolno attributes of the JSONDecodeError exception.
    -  http://code.google.com/p/simplejson/issues/detail?id=81
    -
    -Version 2.1.1 released 2010-03-31
    -
    -* Change how setup.py imports ez_setup.py to try and workaround old versions
    -  of setuptools.
    -  http://code.google.com/p/simplejson/issues/detail?id=75
    -* Fix compilation on Windows platform (and other platforms with very
    -  picky compilers)
    -* Corrected simplejson.__version__ and other minor doc changes.
    -* Do not fail speedups tests if speedups could not be built.
    -  http://code.google.com/p/simplejson/issues/detail?id=73
    -
    -Version 2.1.0 released 2010-03-10
    -
    -* Decimal serialization officially supported for encoding with
    -  use_decimal=True. For encoding this encodes Decimal objects and
    -  for decoding it implies parse_float=Decimal
    -* Python 2.4 no longer supported (may still work, but no longer tested)
    -* Decoding performance and memory utilization enhancements
    -  http://bugs.python.org/issue7451
    -* JSONEncoderForHTML class for escaping &, <, >
    -  http://code.google.com/p/simplejson/issues/detail?id=66
    -* Memoization of object keys during encoding (when using speedups)
    -* Encoder changed to use PyIter_Next for list iteration to avoid
    -  potential threading issues
    -* Encoder changed to use iteritems rather than PyDict_Next in order to
    -  support dict subclasses that have a well defined ordering
    -  http://bugs.python.org/issue6105
    -* indent encoding parameter changed to be a string rather than an integer
    -  (integer use still supported for backwards compatibility)
    -  http://code.google.com/p/simplejson/issues/detail?id=56
    -* Test suite (python setup.py test) now automatically runs with and without
    -  speedups
    -  http://code.google.com/p/simplejson/issues/detail?id=55
    -* Fixed support for older versions of easy_install (e.g. stock Mac OS X config)
    -  http://code.google.com/p/simplejson/issues/detail?id=54
    -* Fixed str/unicode mismatches when using ensure_ascii=False
    -  http://code.google.com/p/simplejson/issues/detail?id=48
    -* Fixed error message when parsing an array with trailing comma with speedups
    -  http://code.google.com/p/simplejson/issues/detail?id=46
    -* Refactor decoder errors to raise JSONDecodeError instead of ValueError
    -  http://code.google.com/p/simplejson/issues/detail?id=45
    -* New ordered_pairs_hook feature in decoder which makes it possible to
    -  preserve key order. http://bugs.python.org/issue5381
    -* Fixed containerless unicode float decoding (same bug as 2.0.4, oops!)
    -  http://code.google.com/p/simplejson/issues/detail?id=43
    -* Share PosInf definition between encoder and decoder
    -* Minor reformatting to make it easier to backport simplejson changes
    -  to Python 2.7/3.1 json module
    -
    -Version 2.0.9 released 2009-02-18
    -
    -* Adds cyclic GC to the Encoder and Scanner speedups, which could've
    -  caused uncollectible cycles in some cases when using custom parser
    -  or encoder functions
    -
    -Version 2.0.8 released 2009-02-15
    -
    -* Documentation fixes
    -* Fixes encoding True and False as keys
    -* Fixes checking for True and False by identity for several parameters
    -
    -Version 2.0.7 released 2009-01-04
    -
    -* Documentation fixes
    -* C extension now always returns unicode strings when the input string is
    -  unicode, even for empty strings
    -
    -Version 2.0.6 released 2008-12-19
    -
    -* Windows build fixes
    -
    -Version 2.0.5 released 2008-11-23
    -
    -* Fixes a segfault in the C extension when using check_circular=False and
    -  encoding an invalid document
    -
    -Version 2.0.4 released 2008-10-24
    -
    -* Fixes a parsing error in the C extension when the JSON document is (only)
    -  a floating point number. It would consume one too few characters in that
    -  case, and claim the document invalid.
    -
    -Version 2.0.3 released 2008-10-11
    -
    -* Fixes reference leaks in the encoding speedups (sorry about that!)
    -* Fixes doctest suite for Python 2.6
    -* More optimizations for the decoder
    -
    -Version 2.0.2 released 2008-10-06
    -
    -* Fixes MSVC2003 build regression
    -* Fixes Python 2.4 compatibility in _speedups.c
    -
    -Version 2.0.1 released 2008-09-29
    -
    -* Fixes long encoding regression introduced in 2.0.0
    -* Fixes MinGW build regression introduced in 2.0.0
    -
    -Version 2.0.0 released 2008-09-27
    -
    -* optimized Python encoding path
    -* optimized Python decoding path
    -* optimized C encoding path
    -* optimized C decoding path
    -* switched to sphinx docs (nearly the same as the json module in python 2.6)
    -
    -Version 1.9.3 released 2008-09-23
    -
    -* Decoding is significantly faster (for our internal benchmarks)
    -* Pretty-printing tool changed from simplejson to simplejson.tool for better
    -  Python 2.6 comaptibility
    -* Misc. bug fixes
    -
    -Version 1.9 released 2008-05-03
    -
    -* Rewrote test suite with unittest and doctest (no more nosetest dependency)
    -* Better PEP 7 and PEP 8 source compliance
    -* Removed simplejson.jsonfilter demo module
    -* simplejson.jsonfilter is no longer included
    -
    -Version 1.8.1 released 2008-03-24
    -
    -* Optional C extension for accelerating the decoding of JSON strings
    -* Command line interface for pretty-printing JSON (via python -msimplejson)
    -* Decoding of integers and floats is now extensible (e.g. to use Decimal) via
    -  parse_int, parse_float options.
    -* Subversion and issue tracker moved to google code:
    -  http://code.google.com/p/simplejson/
    -* "/" is no longer escaped, so if you're embedding JSON directly in HTML
    -  you'll want to use .replace("/", "\\/") to prevent a close-tag attack.
    -
    -Version 1.7 released 2007-03-18
    -
    -* Improves encoding performance with an optional C extension to speed up
    -  str/unicode encoding (by 10-150x or so), which yields an overall speed
    -  boost of 2x+ (JSON is string-heavy).
    -* Support for encoding unicode code points outside the BMP to UTF-16
    -  surrogate code pairs (specified by the Strings section of RFC 4627).
    -
    -Version 1.6 released 2007-03-03
    -
    -* Improved str support for encoding. Previous versions of simplejson
    -  integrated strings directly into the output stream, this version ensures
    -  they're of a particular encoding (default is UTF-8) so that the output
    -  stream is valid.
    -
    -Version 1.5 released 2007-01-18
    -
    -* Better Python 2.5 compatibility
    -* Better Windows compatibility
    -* indent encoding parameter for pretty printing
    -* separators encoding parameter for generating optimally compact JSON
    -
    -Version 1.3 released 2006-04-01
    -
    -* The optional object_hook function is called upon decoding of any JSON
    -  object literal, and its return value is used instead of the dict that
    -  would normally be used. This can be used to efficiently implement
    -  features such as JSON-RPC class hinting, or other custom decodings of
    -  JSON. See the documentation for more information.
    -
    -Version 1.1 released 2005-12-31
    -
    -* Renamed from simple_json to simplejson to comply with PEP 8 module naming
    -  guidelines
    -* Full set of documentation
    -* More tests
    -* The encoder and decoder have been extended to understand NaN, Infinity, and
    -  -Infinity (but this can be turned off via allow_nan=False for strict JSON
    -  compliance)
    -* The decoder's scanner has been fixed so that it no longer accepts invalid
    -  JSON documents
    -* The decoder now reports line and column information as well as character
    -  numbers for easier debugging
    -* The encoder now has a circular reference checker, which can be optionally
    -  disabled with check_circular=False
    -* dump, dumps, load, loads now accept an optional cls kwarg to use an
    -  alternate JSONEncoder or JSONDecoder class for convenience.
    -* The read/write compatibility shim for json-py now have deprecation warnings
    -
    -Version 1.0 released 2005-12-25
    -
    - * Initial release
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/LICENSE.txt b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/LICENSE.txt
    deleted file mode 100644
    index ad95f29..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/LICENSE.txt
    +++ /dev/null
    @@ -1,19 +0,0 @@
    -Copyright (c) 2006 Bob Ippolito
    -
    -Permission is hereby granted, free of charge, to any person obtaining a copy of
    -this software and associated documentation files (the "Software"), to deal in
    -the Software without restriction, including without limitation the rights to
    -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
    -of the Software, and to permit persons to whom the Software is furnished to do
    -so, subject to the following conditions:
    -
    -The above copyright notice and this permission notice shall be included in all
    -copies or substantial portions of the Software.
    -
    -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    -SOFTWARE.
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/MANIFEST.in b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/MANIFEST.in
    deleted file mode 100644
    index 73d569f..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/MANIFEST.in
    +++ /dev/null
    @@ -1,5 +0,0 @@
    -include *.py
    -include *.txt
    -include *.rst
    -include scripts/*.py
    -include MANIFEST.in
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/README.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/README.rst
    deleted file mode 100644
    index 955221f..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/README.rst
    +++ /dev/null
    @@ -1,19 +0,0 @@
    -simplejson is a simple, fast, complete, correct and extensible
    -JSON  encoder and decoder for Python 2.5+.  It is
    -pure Python code with no dependencies, but includes an optional C
    -extension for a serious speed boost.
    -
    -The latest documentation for simplejson can be read online here:
    -http://simplejson.readthedocs.org/
    -
    -simplejson is the externally maintained development version of the
    -json library included with Python 2.6 and Python 3.0, but maintains
    -backwards compatibility with Python 2.5.
    -
    -The encoder may be subclassed to provide serialization in any kind of
    -situation, without any special support by the objects to be serialized
    -(somewhat like pickle).
    -
    -The decoder can handle incoming JSON strings of any specified encoding
    -(UTF-8 by default).
    -
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/conf.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/conf.py
    deleted file mode 100644
    index abb3e70..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/conf.py
    +++ /dev/null
    @@ -1,179 +0,0 @@
    -# -*- coding: utf-8 -*-
    -#
    -# simplejson documentation build configuration file, created by
    -# sphinx-quickstart on Fri Sep 26 18:58:30 2008.
    -#
    -# This file is execfile()d with the current directory set to its containing dir.
    -#
    -# The contents of this file are pickled, so don't put values in the namespace
    -# that aren't pickleable (module imports are okay, they're removed automatically).
    -#
    -# All configuration values have a default value; values that are commented out
    -# serve to show the default value.
    -
    -import sys, os
    -
    -# If your extensions are in another directory, add it here. If the directory
    -# is relative to the documentation root, use os.path.abspath to make it
    -# absolute, like shown here.
    -#sys.path.append(os.path.abspath('some/directory'))
    -
    -# General configuration
    -# ---------------------
    -
    -# Add any Sphinx extension module names here, as strings. They can be extensions
    -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
    -extensions = []
    -
    -# Add any paths that contain templates here, relative to this directory.
    -templates_path = ['_templates']
    -
    -# The suffix of source filenames.
    -source_suffix = '.rst'
    -
    -# The master toctree document.
    -master_doc = 'index'
    -
    -# General substitutions.
    -project = 'simplejson'
    -copyright = '2012, Bob Ippolito'
    -
    -# The default replacements for |version| and |release|, also used in various
    -# other places throughout the built documents.
    -#
    -# The short X.Y version.
    -version = '2.6'
    -# The full version, including alpha/beta/rc tags.
    -release = '2.6.0'
    -
    -# There are two options for replacing |today|: either, you set today to some
    -# non-false value, then it is used:
    -#today = ''
    -# Else, today_fmt is used as the format for a strftime call.
    -today_fmt = '%B %d, %Y'
    -
    -# List of documents that shouldn't be included in the build.
    -#unused_docs = []
    -
    -# List of directories, relative to source directories, that shouldn't be searched
    -# for source files.
    -#exclude_dirs = []
    -
    -# The reST default role (used for this markup: `text`) to use for all documents.
    -#default_role = None
    -
    -# If true, '()' will be appended to :func: etc. cross-reference text.
    -#add_function_parentheses = True
    -
    -# If true, the current module name will be prepended to all description
    -# unit titles (such as .. function::).
    -#add_module_names = True
    -
    -# If true, sectionauthor and moduleauthor directives will be shown in the
    -# output. They are ignored by default.
    -#show_authors = False
    -
    -# The name of the Pygments (syntax highlighting) style to use.
    -pygments_style = 'sphinx'
    -
    -
    -# Options for HTML output
    -# -----------------------
    -
    -# The style sheet to use for HTML and HTML Help pages. A file of that name
    -# must exist either in Sphinx' static/ path, or in one of the custom paths
    -# given in html_static_path.
    -html_style = 'default.css'
    -
    -# The name for this set of Sphinx documents.  If None, it defaults to
    -# " v documentation".
    -#html_title = None
    -
    -# A shorter title for the navigation bar.  Default is the same as html_title.
    -#html_short_title = None
    -
    -# The name of an image file (within the static path) to place at the top of
    -# the sidebar.
    -#html_logo = None
    -
    -# The name of an image file (within the static path) to use as favicon of the
    -# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
    -# pixels large.
    -#html_favicon = None
    -
    -# Add any paths that contain custom static files (such as style sheets) here,
    -# relative to this directory. They are copied after the builtin static files,
    -# so a file named "default.css" will overwrite the builtin "default.css".
    -html_static_path = ['_static']
    -
    -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
    -# using the given strftime format.
    -html_last_updated_fmt = '%b %d, %Y'
    -
    -# If true, SmartyPants will be used to convert quotes and dashes to
    -# typographically correct entities.
    -#html_use_smartypants = True
    -
    -# Custom sidebar templates, maps document names to template names.
    -#html_sidebars = {}
    -
    -# Additional templates that should be rendered to pages, maps page names to
    -# template names.
    -#html_additional_pages = {}
    -
    -# If false, no module index is generated.
    -html_use_modindex = False
    -
    -# If false, no index is generated.
    -#html_use_index = True
    -
    -# If true, the index is split into individual pages for each letter.
    -#html_split_index = False
    -
    -# If true, the reST sources are included in the HTML build as _sources/.
    -#html_copy_source = True
    -
    -# If true, an OpenSearch description file will be output, and all pages will
    -# contain a  tag referring to it.  The value of this option must be the
    -# base URL from which the finished HTML is served.
    -#html_use_opensearch = ''
    -
    -# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
    -html_file_suffix = '.html'
    -
    -# Output file base name for HTML help builder.
    -htmlhelp_basename = 'simplejsondoc'
    -
    -
    -# Options for LaTeX output
    -# ------------------------
    -
    -# The paper size ('letter' or 'a4').
    -#latex_paper_size = 'letter'
    -
    -# The font size ('10pt', '11pt' or '12pt').
    -#latex_font_size = '10pt'
    -
    -# Grouping the document tree into LaTeX files. List of tuples
    -# (source start file, target name, title, author, document class [howto/manual]).
    -latex_documents = [
    -  ('index', 'simplejson.tex', 'simplejson Documentation',
    -   'Bob Ippolito', 'manual'),
    -]
    -
    -# The name of an image file (relative to this directory) to place at the top of
    -# the title page.
    -#latex_logo = None
    -
    -# For "manual" documents, if this is true, then toplevel headings are parts,
    -# not chapters.
    -#latex_use_parts = False
    -
    -# Additional stuff for the LaTeX preamble.
    -#latex_preamble = ''
    -
    -# Documents to append as an appendix to all manuals.
    -#latex_appendices = []
    -
    -# If false, no module index is generated.
    -#latex_use_modindex = True
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/index.rst b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/index.rst
    deleted file mode 100644
    index cb9a0ab..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/index.rst
    +++ /dev/null
    @@ -1,628 +0,0 @@
    -:mod:`simplejson` --- JSON encoder and decoder
    -==============================================
    -
    -.. module:: simplejson
    -   :synopsis: Encode and decode the JSON format.
    -.. moduleauthor:: Bob Ippolito 
    -.. sectionauthor:: Bob Ippolito 
    -
    -JSON (JavaScript Object Notation)  is a subset of JavaScript
    -syntax (ECMA-262 3rd edition) used as a lightweight data interchange format.
    -
    -:mod:`simplejson` exposes an API familiar to users of the standard library
    -:mod:`marshal` and :mod:`pickle` modules. It is the externally maintained
    -version of the :mod:`json` library contained in Python 2.6, but maintains
    -compatibility with Python 2.5 and (currently) has
    -significant performance advantages, even without using the optional C
    -extension for speedups.
    -
    -Development of simplejson happens on Github:
    -http://github.com/simplejson/simplejson
    -
    -Encoding basic Python object hierarchies::
    -
    -    >>> import simplejson as json
    -    >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
    -    '["foo", {"bar": ["baz", null, 1.0, 2]}]'
    -    >>> print json.dumps("\"foo\bar")
    -    "\"foo\bar"
    -    >>> print json.dumps(u'\u1234')
    -    "\u1234"
    -    >>> print json.dumps('\\')
    -    "\\"
    -    >>> print json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)
    -    {"a": 0, "b": 0, "c": 0}
    -    >>> from StringIO import StringIO
    -    >>> io = StringIO()
    -    >>> json.dump(['streaming API'], io)
    -    >>> io.getvalue()
    -    '["streaming API"]'
    -
    -Compact encoding::
    -
    -    >>> import simplejson as json
    -    >>> json.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',', ':'))
    -    '[1,2,3,{"4":5,"6":7}]'
    -
    -Pretty printing::
    -
    -    >>> import simplejson as json
    -    >>> s = json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4 * ' ')
    -    >>> print '\n'.join([l.rstrip() for l in  s.splitlines()])
    -    {
    -        "4": 5,
    -        "6": 7
    -    }
    -
    -Decoding JSON::
    -
    -    >>> import simplejson as json
    -    >>> obj = [u'foo', {u'bar': [u'baz', None, 1.0, 2]}]
    -    >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') == obj
    -    True
    -    >>> json.loads('"\\"foo\\bar"') == u'"foo\x08ar'
    -    True
    -    >>> from StringIO import StringIO
    -    >>> io = StringIO('["streaming API"]')
    -    >>> json.load(io)[0] == 'streaming API'
    -    True
    -
    -Using Decimal instead of float::
    -
    -    >>> import simplejson as json
    -    >>> from decimal import Decimal
    -    >>> json.loads('1.1', use_decimal=True) == Decimal('1.1')
    -    True
    -    >>> json.dumps(Decimal('1.1'), use_decimal=True) == '1.1'
    -    True
    -
    -Specializing JSON object decoding::
    -
    -    >>> import simplejson as json
    -    >>> def as_complex(dct):
    -    ...     if '__complex__' in dct:
    -    ...         return complex(dct['real'], dct['imag'])
    -    ...     return dct
    -    ...
    -    >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}',
    -    ...     object_hook=as_complex)
    -    (1+2j)
    -    >>> import decimal
    -    >>> json.loads('1.1', parse_float=decimal.Decimal) == decimal.Decimal('1.1')
    -    True
    -
    -Specializing JSON object encoding::
    -
    -    >>> import simplejson as json
    -    >>> def encode_complex(obj):
    -    ...     if isinstance(obj, complex):
    -    ...         return [obj.real, obj.imag]
    -    ...     raise TypeError(repr(o) + " is not JSON serializable")
    -    ...
    -    >>> json.dumps(2 + 1j, default=encode_complex)
    -    '[2.0, 1.0]'
    -    >>> json.JSONEncoder(default=encode_complex).encode(2 + 1j)
    -    '[2.0, 1.0]'
    -    >>> ''.join(json.JSONEncoder(default=encode_complex).iterencode(2 + 1j))
    -    '[2.0, 1.0]'
    -
    -
    -.. highlight:: none
    -
    -Using :mod:`simplejson.tool` from the shell to validate and pretty-print::
    -
    -    $ echo '{"json":"obj"}' | python -m simplejson.tool
    -    {
    -        "json": "obj"
    -    }
    -    $ echo '{ 1.2:3.4}' | python -m simplejson.tool
    -    Expecting property name enclosed in double quotes: line 1 column 2 (char 2)
    -
    -.. highlight:: python
    -
    -.. note::
    -
    -   The JSON produced by this module's default settings is a subset of
    -   YAML, so it may be used as a serializer for that as well.
    -
    -
    -Basic Usage
    ------------
    -
    -.. function:: dump(obj, fp[, skipkeys[, ensure_ascii[, check_circular[, allow_nan[, cls[, indent[, separators[, encoding[, default[, use_decimal[, namedtuple_as_object[, tuple_as_array[, bigint_as_string[, sort_keys[, item_sort_key[, **kw]]]]]]]]]]]]]]]])
    -
    -   Serialize *obj* as a JSON formatted stream to *fp* (a ``.write()``-supporting
    -   file-like object).
    -
    -   If *skipkeys* is true (default: ``False``), then dict keys that are not
    -   of a basic type (:class:`str`, :class:`unicode`, :class:`int`, :class:`long`,
    -   :class:`float`, :class:`bool`, ``None``) will be skipped instead of raising a
    -   :exc:`TypeError`.
    -
    -   If *ensure_ascii* is false (default: ``True``), then some chunks written
    -   to *fp* may be :class:`unicode` instances, subject to normal Python
    -   :class:`str` to :class:`unicode` coercion rules.  Unless ``fp.write()``
    -   explicitly understands :class:`unicode` (as in :func:`codecs.getwriter`) this
    -   is likely to cause an error. It's best to leave the default settings, because
    -   they are safe and it is highly optimized.
    -
    -   If *check_circular* is false (default: ``True``), then the circular
    -   reference check for container types will be skipped and a circular reference
    -   will result in an :exc:`OverflowError` (or worse).
    -
    -   If *allow_nan* is false (default: ``True``), then it will be a
    -   :exc:`ValueError` to serialize out of range :class:`float` values (``nan``,
    -   ``inf``, ``-inf``) in strict compliance of the JSON specification.
    -   If *allow_nan* is true, their JavaScript equivalents will be used
    -   (``NaN``, ``Infinity``, ``-Infinity``).
    -
    -   If *indent* is a string, then JSON array elements and object members
    -   will be pretty-printed with a newline followed by that string repeated
    -   for each level of nesting. ``None`` (the default) selects the most compact
    -   representation without any newlines. For backwards compatibility with
    -   versions of simplejson earlier than 2.1.0, an integer is also accepted
    -   and is converted to a string with that many spaces.
    -
    -   .. versionchanged:: 2.1.0
    -      Changed *indent* from an integer number of spaces to a string.
    -
    -   If specified, *separators* should be an ``(item_separator, dict_separator)``
    -   tuple.  By default, ``(', ', ': ')`` are used.  To get the most compact JSON
    -   representation, you should specify ``(',', ':')`` to eliminate whitespace.
    -
    -   *encoding* is the character encoding for str instances, default is
    -   ``'utf-8'``.
    -
    -   *default(obj)* is a function that should return a serializable version of
    -   *obj* or raise :exc:`TypeError`.  The default simply raises :exc:`TypeError`.
    -
    -   To use a custom :class:`JSONEncoder` subclass (e.g. one that overrides the
    -   :meth:`default` method to serialize additional types), specify it with the
    -   *cls* kwarg.
    -
    -   If *use_decimal* is true (default: ``True``) then :class:`decimal.Decimal`
    -   will be natively serialized to JSON with full precision.
    -
    -   .. versionchanged:: 2.1.0
    -      *use_decimal* is new in 2.1.0.
    -
    -   .. versionchanged:: 2.2.0
    -      The default of *use_decimal* changed to ``True`` in 2.2.0.
    -
    -   If *namedtuple_as_object* is true (default: ``True``),
    -   objects with ``_asdict()`` methods will be encoded
    -   as JSON objects.
    -
    -   .. versionchanged:: 2.2.0
    -     *namedtuple_as_object* is new in 2.2.0.
    -
    -   .. versionchanged:: 2.3.0
    -     *namedtuple_as_object* no longer requires that these objects be
    -     subclasses of :class:`tuple`.
    -
    -   If *tuple_as_array* is true (default: ``True``),
    -   :class:`tuple` (and subclasses) will be encoded as JSON arrays.
    -
    -   .. versionchanged:: 2.2.0
    -     *tuple_as_array* is new in 2.2.0.
    -
    -   If *bigint_as_string* is true (default: ``False``), :class:`int`` ``2**53``
    -   and higher or lower than ``-2**53`` will be encoded as strings. This is to
    -   avoid the rounding that happens in Javascript otherwise. Note that this
    -   option loses type information, so use with extreme caution.
    -
    -   .. versionchanged:: 2.4.0
    -     *bigint_as_string* is new in 2.4.0.
    -
    -   If *sort_keys* is true (not the default), then the output of dictionaries
    -   will be sorted by key; this is useful for regression tests to ensure that
    -   JSON serializations can be compared on a day-to-day basis.
    -
    -   If *item_sort_key* is a callable (not the default), then the output of
    -   dictionaries will be sorted with it. The callable will be used like this:
    -   ``sorted(dct.items(), key=item_sort_key)``. This option takes precedence
    -   over *sort_keys*.
    -
    -   .. versionchanged:: 2.5.0
    -      *item_sort_key* is new in 2.5.0.
    -
    -    .. note::
    -
    -        JSON is not a framed protocol so unlike :mod:`pickle` or :mod:`marshal` it
    -        does not make sense to serialize more than one JSON document without some
    -        container protocol to delimit them.
    -
    -
    -.. function:: dumps(obj[, skipkeys[, ensure_ascii[, check_circular[, allow_nan[, cls[, indent[, separators[, encoding[, default[, use_decimal[, namedtuple_as_object[, tuple_as_array[, bigint_as_string[, sort_keys[, item_sort_key[, **kw]]]]]]]]]]]]]]]])
    -
    -   Serialize *obj* to a JSON formatted :class:`str`.
    -
    -   If *ensure_ascii* is false, then the return value will be a
    -   :class:`unicode` instance.  The other arguments have the same meaning as in
    -   :func:`dump`. Note that the default *ensure_ascii* setting has much
    -   better performance.
    -
    -
    -.. function:: load(fp[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, use_decimal[, **kw]]]]]]]]])
    -
    -   Deserialize *fp* (a ``.read()``-supporting file-like object containing a JSON
    -   document) to a Python object. :exc:`JSONDecodeError` will be
    -   raised if the given JSON document is not valid.
    -
    -   If the contents of *fp* are encoded with an ASCII based encoding other than
    -   UTF-8 (e.g. latin-1), then an appropriate *encoding* name must be specified.
    -   Encodings that are not ASCII based (such as UCS-2) are not allowed, and
    -   should be wrapped with ``codecs.getreader(fp)(encoding)``, or simply decoded
    -   to a :class:`unicode` object and passed to :func:`loads`. The default
    -   setting of ``'utf-8'`` is fastest and should be using whenever possible.
    -
    -   If *fp.read()* returns :class:`str` then decoded JSON strings that contain
    -   only ASCII characters may be parsed as :class:`str` for performance and
    -   memory reasons. If your code expects only :class:`unicode` the appropriate
    -   solution is to wrap fp with a reader as demonstrated above.
    -
    -   *object_hook* is an optional function that will be called with the result of
    -   any object literal decode (a :class:`dict`).  The return value of
    -   *object_hook* will be used instead of the :class:`dict`.  This feature can be used
    -   to implement custom decoders (e.g. JSON-RPC class hinting).
    -
    -   *object_pairs_hook* is an optional function that will be called with the
    -   result of any object literal decode with an ordered list of pairs.  The
    -   return value of *object_pairs_hook* will be used instead of the
    -   :class:`dict`.  This feature can be used to implement custom decoders that
    -   rely on the order that the key and value pairs are decoded (for example,
    -   :class:`collections.OrderedDict` will remember the order of insertion). If
    -   *object_hook* is also defined, the *object_pairs_hook* takes priority.
    -
    -   .. versionchanged:: 2.1.0
    -      Added support for *object_pairs_hook*.
    -
    -   *parse_float*, if specified, will be called with the string of every JSON
    -   float to be decoded.  By default, this is equivalent to ``float(num_str)``.
    -   This can be used to use another datatype or parser for JSON floats
    -   (e.g. :class:`decimal.Decimal`).
    -
    -   *parse_int*, if specified, will be called with the string of every JSON int
    -   to be decoded.  By default, this is equivalent to ``int(num_str)``.  This can
    -   be used to use another datatype or parser for JSON integers
    -   (e.g. :class:`float`).
    -
    -   *parse_constant*, if specified, will be called with one of the following
    -   strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``.  This can be used to
    -   raise an exception if invalid JSON numbers are encountered.
    -
    -   If *use_decimal* is true (default: ``False``) then *parse_float* is set to
    -   :class:`decimal.Decimal`. This is a convenience for parity with the
    -   :func:`dump` parameter.
    -
    -   .. versionchanged:: 2.1.0
    -      *use_decimal* is new in 2.1.0.
    -
    -   To use a custom :class:`JSONDecoder` subclass, specify it with the ``cls``
    -   kwarg.  Additional keyword arguments will be passed to the constructor of the
    -   class.
    -
    -    .. note::
    -
    -        :func:`load` will read the rest of the file-like object as a string and
    -        then call :func:`loads`. It does not stop at the end of the first valid
    -        JSON document it finds and it will raise an error if there is anything
    -        other than whitespace after the document. Except for files containing
    -        only one JSON document, it is recommended to use :func:`loads`.
    -
    -
    -.. function:: loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, use_decimal[, **kw]]]]]]]]])
    -
    -   Deserialize *s* (a :class:`str` or :class:`unicode` instance containing a JSON
    -   document) to a Python object. :exc:`JSONDecodeError` will be
    -   raised if the given JSON document is not valid.
    -
    -   If *s* is a :class:`str` instance and is encoded with an ASCII based encoding
    -   other than UTF-8 (e.g. latin-1), then an appropriate *encoding* name must be
    -   specified.  Encodings that are not ASCII based (such as UCS-2) are not
    -   allowed and should be decoded to :class:`unicode` first.
    -
    -   If *s* is a :class:`str` then decoded JSON strings that contain
    -   only ASCII characters may be parsed as :class:`str` for performance and
    -   memory reasons. If your code expects only :class:`unicode` the appropriate
    -   solution is decode *s* to :class:`unicode` prior to calling loads.
    -
    -   The other arguments have the same meaning as in :func:`load`.
    -
    -
    -Encoders and decoders
    ----------------------
    -
    -.. class:: JSONDecoder([encoding[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, strict]]]]]]])
    -
    -   Simple JSON decoder.
    -
    -   Performs the following translations in decoding by default:
    -
    -   +---------------+-------------------+
    -   | JSON          | Python            |
    -   +===============+===================+
    -   | object        | dict              |
    -   +---------------+-------------------+
    -   | array         | list              |
    -   +---------------+-------------------+
    -   | string        | unicode           |
    -   +---------------+-------------------+
    -   | number (int)  | int, long         |
    -   +---------------+-------------------+
    -   | number (real) | float             |
    -   +---------------+-------------------+
    -   | true          | True              |
    -   +---------------+-------------------+
    -   | false         | False             |
    -   +---------------+-------------------+
    -   | null          | None              |
    -   +---------------+-------------------+
    -
    -   It also understands ``NaN``, ``Infinity``, and ``-Infinity`` as their
    -   corresponding ``float`` values, which is outside the JSON spec.
    -
    -   *encoding* determines the encoding used to interpret any :class:`str` objects
    -   decoded by this instance (``'utf-8'`` by default).  It has no effect when decoding
    -   :class:`unicode` objects.
    -
    -   Note that currently only encodings that are a superset of ASCII work, strings
    -   of other encodings should be passed in as :class:`unicode`.
    -
    -   *object_hook* is an optional function that will be called with the result of
    -   every JSON object decoded and its return value will be used in place of the
    -   given :class:`dict`.  This can be used to provide custom deserializations
    -   (e.g. to support JSON-RPC class hinting).
    -
    -   *object_pairs_hook* is an optional function that will be called with the
    -   result of any object literal decode with an ordered list of pairs.  The
    -   return value of *object_pairs_hook* will be used instead of the
    -   :class:`dict`.  This feature can be used to implement custom decoders that
    -   rely on the order that the key and value pairs are decoded (for example,
    -   :class:`collections.OrderedDict` will remember the order of insertion). If
    -   *object_hook* is also defined, the *object_pairs_hook* takes priority.
    -
    -   .. versionchanged:: 2.1.0
    -      Added support for *object_pairs_hook*.
    -
    -   *parse_float*, if specified, will be called with the string of every JSON
    -   float to be decoded.  By default, this is equivalent to ``float(num_str)``.
    -   This can be used to use another datatype or parser for JSON floats
    -   (e.g. :class:`decimal.Decimal`).
    -
    -   *parse_int*, if specified, will be called with the string of every JSON int
    -   to be decoded.  By default, this is equivalent to ``int(num_str)``.  This can
    -   be used to use another datatype or parser for JSON integers
    -   (e.g. :class:`float`).
    -
    -   *parse_constant*, if specified, will be called with one of the following
    -   strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``.  This can be used to
    -   raise an exception if invalid JSON numbers are encountered.
    -
    -   *strict* controls the parser's behavior when it encounters an invalid
    -   control character in a string. The default setting of ``True`` means that
    -   unescaped control characters are parse errors, if ``False`` then control
    -   characters will be allowed in strings.
    -
    -   .. method:: decode(s)
    -
    -      Return the Python representation of *s* (a :class:`str` or
    -      :class:`unicode` instance containing a JSON document)
    -
    -      If *s* is a :class:`str` then decoded JSON strings that contain
    -      only ASCII characters may be parsed as :class:`str` for performance and
    -      memory reasons. If your code expects only :class:`unicode` the
    -      appropriate solution is decode *s* to :class:`unicode` prior to calling
    -      decode.
    -
    -      :exc:`JSONDecodeError` will be raised if the given JSON
    -      document is not valid.
    -
    -   .. method:: raw_decode(s)
    -
    -      Decode a JSON document from *s* (a :class:`str` or :class:`unicode`
    -      beginning with a JSON document) and return a 2-tuple of the Python
    -      representation and the index in *s* where the document ended.
    -
    -      This can be used to decode a JSON document from a string that may have
    -      extraneous data at the end.
    -
    -      :exc:`JSONDecodeError` will be raised if the given JSON
    -      document is not valid.
    -
    -.. class:: JSONEncoder([skipkeys[, ensure_ascii[, check_circular[, allow_nan[, sort_keys[, indent[, separators[, encoding[, default[, use_decimal[, namedtuple_as_object[, tuple_as_array[, bigint_as_string[, item_sort_key]]]]]]]]]]]]])
    -
    -   Extensible JSON encoder for Python data structures.
    -
    -   Supports the following objects and types by default:
    -
    -   +-------------------+---------------+
    -   | Python            | JSON          |
    -   +===================+===============+
    -   | dict, namedtuple  | object        |
    -   +-------------------+---------------+
    -   | list, tuple       | array         |
    -   +-------------------+---------------+
    -   | str, unicode      | string        |
    -   +-------------------+---------------+
    -   | int, long, float  | number        |
    -   +-------------------+---------------+
    -   | True              | true          |
    -   +-------------------+---------------+
    -   | False             | false         |
    -   +-------------------+---------------+
    -   | None              | null          |
    -   +-------------------+---------------+
    -
    -   .. versionchanged:: 2.2.0
    -      Changed *namedtuple* encoding from JSON array to object.
    -
    -   To extend this to recognize other objects, subclass and implement a
    -   :meth:`default` method with another method that returns a serializable object
    -   for ``o`` if possible, otherwise it should call the superclass implementation
    -   (to raise :exc:`TypeError`).
    -
    -   If *skipkeys* is false (the default), then it is a :exc:`TypeError` to
    -   attempt encoding of keys that are not str, int, long, float or None.  If
    -   *skipkeys* is true, such items are simply skipped.
    -
    -   If *ensure_ascii* is true (the default), the output is guaranteed to be
    -   :class:`str` objects with all incoming unicode characters escaped.  If
    -   *ensure_ascii* is false, the output will be a unicode object.
    -
    -   If *check_circular* is false (the default), then lists, dicts, and custom
    -   encoded objects will be checked for circular references during encoding to
    -   prevent an infinite recursion (which would cause an :exc:`OverflowError`).
    -   Otherwise, no such check takes place.
    -
    -   If *allow_nan* is true (the default), then ``NaN``, ``Infinity``, and
    -   ``-Infinity`` will be encoded as such.  This behavior is not JSON
    -   specification compliant, but is consistent with most JavaScript based
    -   encoders and decoders.  Otherwise, it will be a :exc:`ValueError` to encode
    -   such floats.
    -
    -   If *sort_keys* is true (not the default), then the output of dictionaries
    -   will be sorted by key; this is useful for regression tests to ensure that
    -   JSON serializations can be compared on a day-to-day basis.
    -
    -   If *item_sort_key* is a callable (not the default), then the output of
    -   dictionaries will be sorted with it. The callable will be used like this:
    -   ``sorted(dct.items(), key=item_sort_key)``. This option takes precedence
    -   over *sort_keys*.
    -
    -   .. versionchanged:: 2.5.0
    -      *item_sort_key* is new in 2.5.0.
    -
    -   If *indent* is a string, then JSON array elements and object members
    -   will be pretty-printed with a newline followed by that string repeated
    -   for each level of nesting. ``None`` (the default) selects the most compact
    -   representation without any newlines. For backwards compatibility with
    -   versions of simplejson earlier than 2.1.0, an integer is also accepted
    -   and is converted to a string with that many spaces.
    -
    -   .. versionchanged:: 2.1.0
    -      Changed *indent* from an integer number of spaces to a string.
    -
    -   If specified, *separators* should be an ``(item_separator, key_separator)``
    -   tuple.  By default, ``(', ', ': ')`` are used.  To get the most compact JSON
    -   representation, you should specify ``(',', ':')`` to eliminate whitespace.
    -
    -   If specified, *default* should be a function that gets called for objects
    -   that can't otherwise be serialized.  It should return a JSON encodable
    -   version of the object or raise a :exc:`TypeError`.
    -
    -   If *encoding* is not ``None``, then all input strings will be transformed
    -   into unicode using that encoding prior to JSON-encoding.  The default is
    -   ``'utf-8'``.
    -
    -   If *namedtuple_as_object* is true (default: ``True``),
    -   objects with ``_asdict()`` methods will be encoded
    -   as JSON objects.
    -
    -   .. versionchanged:: 2.2.0
    -     *namedtuple_as_object* is new in 2.2.0.
    -
    -   .. versionchanged:: 2.3.0
    -     *namedtuple_as_object* no longer requires that these objects be
    -     subclasses of :class:`tuple`.
    -
    -   If *tuple_as_array* is true (default: ``True``),
    -   :class:`tuple` (and subclasses) will be encoded as JSON arrays.
    -
    -   .. versionchanged:: 2.2.0
    -     *tuple_as_array* is new in 2.2.0.
    -
    -   If *bigint_as_string* is true (default: ``False``), :class:`int`` ``2**53``
    -   and higher or lower than ``-2**53`` will be encoded as strings. This is to
    -   avoid the rounding that happens in Javascript otherwise. Note that this
    -   option loses type information, so use with extreme caution.
    -
    -   .. versionchanged:: 2.4.0
    -     *bigint_as_string* is new in 2.4.0.
    -
    -
    -   .. method:: default(o)
    -
    -      Implement this method in a subclass such that it returns a serializable
    -      object for *o*, or calls the base implementation (to raise a
    -      :exc:`TypeError`).
    -
    -      For example, to support arbitrary iterators, you could implement default
    -      like this::
    -
    -         def default(self, o):
    -            try:
    -                iterable = iter(o)
    -            except TypeError:
    -                pass
    -            else:
    -                return list(iterable)
    -            return JSONEncoder.default(self, o)
    -
    -
    -   .. method:: encode(o)
    -
    -      Return a JSON string representation of a Python data structure, *o*.  For
    -      example::
    -
    -        >>> import simplejson as json
    -        >>> json.JSONEncoder().encode({"foo": ["bar", "baz"]})
    -        '{"foo": ["bar", "baz"]}'
    -
    -
    -   .. method:: iterencode(o)
    -
    -      Encode the given object, *o*, and yield each string representation as
    -      available.  For example::
    -
    -            for chunk in JSONEncoder().iterencode(bigobject):
    -                mysocket.write(chunk)
    -
    -      Note that :meth:`encode` has much better performance than
    -      :meth:`iterencode`.
    -
    -.. class:: JSONEncoderForHTML([skipkeys[, ensure_ascii[, check_circular[, allow_nan[, sort_keys[, indent[, separators[, encoding[, default[, use_decimal[, namedtuple_as_object[, tuple_as_array[, bigint_as_string[, item_sort_key]]]]]]]]]]]]])
    -
    -   Subclass of :class:`JSONEncoder` that escapes &, <, and > for embedding in HTML.
    -
    -   .. versionchanged:: 2.1.0
    -      New in 2.1.0
    -
    -Exceptions
    -----------
    -
    -.. exception:: JSONDecodeError(msg, doc, pos[, end])
    -
    -    Subclass of :exc:`ValueError` with the following additional attributes:
    -
    -    .. attribute:: msg
    -
    -        The unformatted error message
    -
    -    .. attribute:: doc
    -
    -        The JSON document being parsed
    -
    -    .. attribute:: pos
    -
    -        The start index of doc where parsing failed
    -
    -    .. attribute:: end
    -
    -        The end index of doc where parsing failed (may be ``None``)
    -
    -    .. attribute:: lineno
    -
    -        The line corresponding to pos
    -
    -    .. attribute:: colno
    -
    -        The column corresponding to pos
    -
    -    .. attribute:: endlineno
    -
    -        The line corresponding to end (may be ``None``)
    -
    -    .. attribute:: endcolno
    -
    -        The column corresponding to end (may be ``None``)
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/scripts/make_docs.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/scripts/make_docs.py
    deleted file mode 100755
    index 0d36f98..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/scripts/make_docs.py
    +++ /dev/null
    @@ -1,18 +0,0 @@
    -#!/usr/bin/env python
    -import os
    -import subprocess
    -import shutil
    -
    -SPHINX_BUILD = 'sphinx-build'
    -
    -DOCTREES_DIR = 'build/doctrees'
    -HTML_DIR = 'docs'
    -for dirname in DOCTREES_DIR, HTML_DIR:
    -    if not os.path.exists(dirname):
    -        os.makedirs(dirname)
    -
    -open(os.path.join(HTML_DIR, '.nojekyll'), 'w').close()
    -res = subprocess.call([
    -    SPHINX_BUILD, '-d', DOCTREES_DIR, '-b', 'html', '.', 'docs',
    -])
    -raise SystemExit(res)
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/setup.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/setup.py
    deleted file mode 100644
    index 2629044..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/setup.py
    +++ /dev/null
    @@ -1,104 +0,0 @@
    -#!/usr/bin/env python
    -
    -import sys
    -from distutils.core import setup, Extension, Command
    -from distutils.command.build_ext import build_ext
    -from distutils.errors import CCompilerError, DistutilsExecError, \
    -    DistutilsPlatformError
    -
    -IS_PYPY = hasattr(sys, 'pypy_translation_info')
    -VERSION = '2.6.0'
    -DESCRIPTION = "Simple, fast, extensible JSON encoder/decoder for Python"
    -LONG_DESCRIPTION = open('README.rst', 'r').read()
    -
    -CLASSIFIERS = filter(None, map(str.strip,
    -"""
    -Intended Audience :: Developers
    -License :: OSI Approved :: MIT License
    -Programming Language :: Python
    -Topic :: Software Development :: Libraries :: Python Modules
    -""".splitlines()))
    -
    -if sys.platform == 'win32' and sys.version_info > (2, 6):
    -   # 2.6's distutils.msvc9compiler can raise an IOError when failing to
    -   # find the compiler
    -   ext_errors = (CCompilerError, DistutilsExecError, DistutilsPlatformError,
    -                 IOError)
    -else:
    -   ext_errors = (CCompilerError, DistutilsExecError, DistutilsPlatformError)
    -
    -class BuildFailed(Exception):
    -    pass
    -
    -class ve_build_ext(build_ext):
    -    # This class allows C extension building to fail.
    -
    -    def run(self):
    -        try:
    -            build_ext.run(self)
    -        except DistutilsPlatformError, x:
    -            raise BuildFailed()
    -
    -    def build_extension(self, ext):
    -        try:
    -            build_ext.build_extension(self, ext)
    -        except ext_errors, x:
    -            raise BuildFailed()
    -
    -
    -class TestCommand(Command):
    -    user_options = []
    -
    -    def initialize_options(self):
    -        pass
    -
    -    def finalize_options(self):
    -        pass
    -
    -    def run(self):
    -        import sys, subprocess
    -        raise SystemExit(
    -            subprocess.call([sys.executable, 'simplejson/tests/__init__.py']))
    -
    -def run_setup(with_binary):
    -    cmdclass = dict(test=TestCommand)
    -    if with_binary:
    -        kw = dict(
    -            ext_modules = [
    -                Extension("simplejson._speedups", ["simplejson/_speedups.c"]),
    -            ],
    -            cmdclass=dict(cmdclass, build_ext=ve_build_ext),
    -        )
    -    else:
    -        kw = dict(cmdclass=cmdclass)
    -
    -    setup(
    -        name="simplejson",
    -        version=VERSION,
    -        description=DESCRIPTION,
    -        long_description=LONG_DESCRIPTION,
    -        classifiers=CLASSIFIERS,
    -        author="Bob Ippolito",
    -        author_email="bob@redivi.com",
    -        url="http://github.com/simplejson/simplejson",
    -        license="MIT License",
    -        packages=['simplejson', 'simplejson.tests'],
    -        platforms=['any'],
    -        **kw)
    -
    -try:
    -    run_setup(not IS_PYPY)
    -except BuildFailed:
    -    BUILD_EXT_WARNING = "WARNING: The C extension could not be compiled, speedups are not enabled."
    -    print '*' * 75
    -    print BUILD_EXT_WARNING
    -    print "Failure information, if any, is above."
    -    print "I'm retrying the build without the C extension now."
    -    print '*' * 75
    -
    -    run_setup(False)
    -
    -    print '*' * 75
    -    print BUILD_EXT_WARNING
    -    print "Plain-Python installation succeeded."
    -    print '*' * 75
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/__init__.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/__init__.py
    deleted file mode 100644
    index 04a8aa6..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/__init__.py
    +++ /dev/null
    @@ -1,510 +0,0 @@
    -r"""JSON (JavaScript Object Notation)  is a subset of
    -JavaScript syntax (ECMA-262 3rd edition) used as a lightweight data
    -interchange format.
    -
    -:mod:`simplejson` exposes an API familiar to users of the standard library
    -:mod:`marshal` and :mod:`pickle` modules. It is the externally maintained
    -version of the :mod:`json` library contained in Python 2.6, but maintains
    -compatibility with Python 2.4 and Python 2.5 and (currently) has
    -significant performance advantages, even without using the optional C
    -extension for speedups.
    -
    -Encoding basic Python object hierarchies::
    -
    -    >>> import simplejson as json
    -    >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
    -    '["foo", {"bar": ["baz", null, 1.0, 2]}]'
    -    >>> print json.dumps("\"foo\bar")
    -    "\"foo\bar"
    -    >>> print json.dumps(u'\u1234')
    -    "\u1234"
    -    >>> print json.dumps('\\')
    -    "\\"
    -    >>> print json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)
    -    {"a": 0, "b": 0, "c": 0}
    -    >>> from StringIO import StringIO
    -    >>> io = StringIO()
    -    >>> json.dump(['streaming API'], io)
    -    >>> io.getvalue()
    -    '["streaming API"]'
    -
    -Compact encoding::
    -
    -    >>> import simplejson as json
    -    >>> json.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',',':'))
    -    '[1,2,3,{"4":5,"6":7}]'
    -
    -Pretty printing::
    -
    -    >>> import simplejson as json
    -    >>> s = json.dumps({'4': 5, '6': 7}, sort_keys=True, indent='    ')
    -    >>> print '\n'.join([l.rstrip() for l in  s.splitlines()])
    -    {
    -        "4": 5,
    -        "6": 7
    -    }
    -
    -Decoding JSON::
    -
    -    >>> import simplejson as json
    -    >>> obj = [u'foo', {u'bar': [u'baz', None, 1.0, 2]}]
    -    >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') == obj
    -    True
    -    >>> json.loads('"\\"foo\\bar"') == u'"foo\x08ar'
    -    True
    -    >>> from StringIO import StringIO
    -    >>> io = StringIO('["streaming API"]')
    -    >>> json.load(io)[0] == 'streaming API'
    -    True
    -
    -Specializing JSON object decoding::
    -
    -    >>> import simplejson as json
    -    >>> def as_complex(dct):
    -    ...     if '__complex__' in dct:
    -    ...         return complex(dct['real'], dct['imag'])
    -    ...     return dct
    -    ...
    -    >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}',
    -    ...     object_hook=as_complex)
    -    (1+2j)
    -    >>> from decimal import Decimal
    -    >>> json.loads('1.1', parse_float=Decimal) == Decimal('1.1')
    -    True
    -
    -Specializing JSON object encoding::
    -
    -    >>> import simplejson as json
    -    >>> def encode_complex(obj):
    -    ...     if isinstance(obj, complex):
    -    ...         return [obj.real, obj.imag]
    -    ...     raise TypeError(repr(o) + " is not JSON serializable")
    -    ...
    -    >>> json.dumps(2 + 1j, default=encode_complex)
    -    '[2.0, 1.0]'
    -    >>> json.JSONEncoder(default=encode_complex).encode(2 + 1j)
    -    '[2.0, 1.0]'
    -    >>> ''.join(json.JSONEncoder(default=encode_complex).iterencode(2 + 1j))
    -    '[2.0, 1.0]'
    -
    -
    -Using simplejson.tool from the shell to validate and pretty-print::
    -
    -    $ echo '{"json":"obj"}' | python -m simplejson.tool
    -    {
    -        "json": "obj"
    -    }
    -    $ echo '{ 1.2:3.4}' | python -m simplejson.tool
    -    Expecting property name: line 1 column 2 (char 2)
    -"""
    -__version__ = '2.6.0'
    -__all__ = [
    -    'dump', 'dumps', 'load', 'loads',
    -    'JSONDecoder', 'JSONDecodeError', 'JSONEncoder',
    -    'OrderedDict', 'simple_first',
    -]
    -
    -__author__ = 'Bob Ippolito '
    -
    -from decimal import Decimal
    -
    -from decoder import JSONDecoder, JSONDecodeError
    -from encoder import JSONEncoder
    -def _import_OrderedDict():
    -    import collections
    -    try:
    -        return collections.OrderedDict
    -    except AttributeError:
    -        import ordered_dict
    -        return ordered_dict.OrderedDict
    -OrderedDict = _import_OrderedDict()
    -
    -def _import_c_make_encoder():
    -    try:
    -        from simplejson._speedups import make_encoder
    -        return make_encoder
    -    except ImportError:
    -        return None
    -
    -_default_encoder = JSONEncoder(
    -    skipkeys=False,
    -    ensure_ascii=True,
    -    check_circular=True,
    -    allow_nan=True,
    -    indent=None,
    -    separators=None,
    -    encoding='utf-8',
    -    default=None,
    -    use_decimal=True,
    -    namedtuple_as_object=True,
    -    tuple_as_array=True,
    -    bigint_as_string=False,
    -    item_sort_key=None,
    -)
    -
    -def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,
    -        allow_nan=True, cls=None, indent=None, separators=None,
    -        encoding='utf-8', default=None, use_decimal=True,
    -        namedtuple_as_object=True, tuple_as_array=True,
    -        bigint_as_string=False, sort_keys=False, item_sort_key=None,
    -        **kw):
    -    """Serialize ``obj`` as a JSON formatted stream to ``fp`` (a
    -    ``.write()``-supporting file-like object).
    -
    -    If ``skipkeys`` is true then ``dict`` keys that are not basic types
    -    (``str``, ``unicode``, ``int``, ``long``, ``float``, ``bool``, ``None``)
    -    will be skipped instead of raising a ``TypeError``.
    -
    -    If ``ensure_ascii`` is false, then the some chunks written to ``fp``
    -    may be ``unicode`` instances, subject to normal Python ``str`` to
    -    ``unicode`` coercion rules. Unless ``fp.write()`` explicitly
    -    understands ``unicode`` (as in ``codecs.getwriter()``) this is likely
    -    to cause an error.
    -
    -    If ``check_circular`` is false, then the circular reference check
    -    for container types will be skipped and a circular reference will
    -    result in an ``OverflowError`` (or worse).
    -
    -    If ``allow_nan`` is false, then it will be a ``ValueError`` to
    -    serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``)
    -    in strict compliance of the JSON specification, instead of using the
    -    JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``).
    -
    -    If *indent* is a string, then JSON array elements and object members
    -    will be pretty-printed with a newline followed by that string repeated
    -    for each level of nesting. ``None`` (the default) selects the most compact
    -    representation without any newlines. For backwards compatibility with
    -    versions of simplejson earlier than 2.1.0, an integer is also accepted
    -    and is converted to a string with that many spaces.
    -
    -    If ``separators`` is an ``(item_separator, dict_separator)`` tuple
    -    then it will be used instead of the default ``(', ', ': ')`` separators.
    -    ``(',', ':')`` is the most compact JSON representation.
    -
    -    ``encoding`` is the character encoding for str instances, default is UTF-8.
    -
    -    ``default(obj)`` is a function that should return a serializable version
    -    of obj or raise TypeError. The default simply raises TypeError.
    -
    -    If *use_decimal* is true (default: ``True``) then decimal.Decimal
    -    will be natively serialized to JSON with full precision.
    -
    -    If *namedtuple_as_object* is true (default: ``True``),
    -    :class:`tuple` subclasses with ``_asdict()`` methods will be encoded
    -    as JSON objects.
    -
    -    If *tuple_as_array* is true (default: ``True``),
    -    :class:`tuple` (and subclasses) will be encoded as JSON arrays.
    -
    -    If *bigint_as_string* is true (default: ``False``), ints 2**53 and higher
    -    or lower than -2**53 will be encoded as strings. This is to avoid the
    -    rounding that happens in Javascript otherwise. Note that this is still a
    -    lossy operation that will not round-trip correctly and should be used
    -    sparingly.
    -
    -    If specified, *item_sort_key* is a callable used to sort the items in
    -    each dictionary. This is useful if you want to sort items other than
    -    in alphabetical order by key. This option takes precedence over
    -    *sort_keys*.
    -
    -    If *sort_keys* is true (default: ``False``), the output of dictionaries
    -    will be sorted by item.
    -
    -    To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
    -    ``.default()`` method to serialize additional types), specify it with
    -    the ``cls`` kwarg.
    -
    -    """
    -    # cached encoder
    -    if (not skipkeys and ensure_ascii and
    -        check_circular and allow_nan and
    -        cls is None and indent is None and separators is None and
    -        encoding == 'utf-8' and default is None and use_decimal
    -        and namedtuple_as_object and tuple_as_array
    -        and not bigint_as_string and not item_sort_key and not kw):
    -        iterable = _default_encoder.iterencode(obj)
    -    else:
    -        if cls is None:
    -            cls = JSONEncoder
    -        iterable = cls(skipkeys=skipkeys, ensure_ascii=ensure_ascii,
    -            check_circular=check_circular, allow_nan=allow_nan, indent=indent,
    -            separators=separators, encoding=encoding,
    -            default=default, use_decimal=use_decimal,
    -            namedtuple_as_object=namedtuple_as_object,
    -            tuple_as_array=tuple_as_array,
    -            bigint_as_string=bigint_as_string,
    -            sort_keys=sort_keys,
    -            item_sort_key=item_sort_key,
    -            **kw).iterencode(obj)
    -    # could accelerate with writelines in some versions of Python, at
    -    # a debuggability cost
    -    for chunk in iterable:
    -        fp.write(chunk)
    -
    -
    -def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
    -        allow_nan=True, cls=None, indent=None, separators=None,
    -        encoding='utf-8', default=None, use_decimal=True,
    -        namedtuple_as_object=True, tuple_as_array=True,
    -        bigint_as_string=False, sort_keys=False, item_sort_key=None,
    -        **kw):
    -    """Serialize ``obj`` to a JSON formatted ``str``.
    -
    -    If ``skipkeys`` is false then ``dict`` keys that are not basic types
    -    (``str``, ``unicode``, ``int``, ``long``, ``float``, ``bool``, ``None``)
    -    will be skipped instead of raising a ``TypeError``.
    -
    -    If ``ensure_ascii`` is false, then the return value will be a
    -    ``unicode`` instance subject to normal Python ``str`` to ``unicode``
    -    coercion rules instead of being escaped to an ASCII ``str``.
    -
    -    If ``check_circular`` is false, then the circular reference check
    -    for container types will be skipped and a circular reference will
    -    result in an ``OverflowError`` (or worse).
    -
    -    If ``allow_nan`` is false, then it will be a ``ValueError`` to
    -    serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``) in
    -    strict compliance of the JSON specification, instead of using the
    -    JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``).
    -
    -    If ``indent`` is a string, then JSON array elements and object members
    -    will be pretty-printed with a newline followed by that string repeated
    -    for each level of nesting. ``None`` (the default) selects the most compact
    -    representation without any newlines. For backwards compatibility with
    -    versions of simplejson earlier than 2.1.0, an integer is also accepted
    -    and is converted to a string with that many spaces.
    -
    -    If ``separators`` is an ``(item_separator, dict_separator)`` tuple
    -    then it will be used instead of the default ``(', ', ': ')`` separators.
    -    ``(',', ':')`` is the most compact JSON representation.
    -
    -    ``encoding`` is the character encoding for str instances, default is UTF-8.
    -
    -    ``default(obj)`` is a function that should return a serializable version
    -    of obj or raise TypeError. The default simply raises TypeError.
    -
    -    If *use_decimal* is true (default: ``True``) then decimal.Decimal
    -    will be natively serialized to JSON with full precision.
    -
    -    If *namedtuple_as_object* is true (default: ``True``),
    -    :class:`tuple` subclasses with ``_asdict()`` methods will be encoded
    -    as JSON objects.
    -
    -    If *tuple_as_array* is true (default: ``True``),
    -    :class:`tuple` (and subclasses) will be encoded as JSON arrays.
    -
    -    If *bigint_as_string* is true (not the default), ints 2**53 and higher
    -    or lower than -2**53 will be encoded as strings. This is to avoid the
    -    rounding that happens in Javascript otherwise.
    -
    -    If specified, *item_sort_key* is a callable used to sort the items in
    -    each dictionary. This is useful if you want to sort items other than
    -    in alphabetical order by key. This option takes precendence over
    -    *sort_keys*.
    -
    -    If *sort_keys* is true (default: ``False``), the output of dictionaries
    -    will be sorted by item.
    -
    -    To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
    -    ``.default()`` method to serialize additional types), specify it with
    -    the ``cls`` kwarg.
    -
    -    """
    -    # cached encoder
    -    if (not skipkeys and ensure_ascii and
    -        check_circular and allow_nan and
    -        cls is None and indent is None and separators is None and
    -        encoding == 'utf-8' and default is None and use_decimal
    -        and namedtuple_as_object and tuple_as_array
    -        and not bigint_as_string and not sort_keys
    -        and not item_sort_key and not kw):
    -        return _default_encoder.encode(obj)
    -    if cls is None:
    -        cls = JSONEncoder
    -    return cls(
    -        skipkeys=skipkeys, ensure_ascii=ensure_ascii,
    -        check_circular=check_circular, allow_nan=allow_nan, indent=indent,
    -        separators=separators, encoding=encoding, default=default,
    -        use_decimal=use_decimal,
    -        namedtuple_as_object=namedtuple_as_object,
    -        tuple_as_array=tuple_as_array,
    -        bigint_as_string=bigint_as_string,
    -        sort_keys=sort_keys,
    -        item_sort_key=item_sort_key,
    -        **kw).encode(obj)
    -
    -
    -_default_decoder = JSONDecoder(encoding=None, object_hook=None,
    -                               object_pairs_hook=None)
    -
    -
    -def load(fp, encoding=None, cls=None, object_hook=None, parse_float=None,
    -        parse_int=None, parse_constant=None, object_pairs_hook=None,
    -        use_decimal=False, namedtuple_as_object=True, tuple_as_array=True,
    -        **kw):
    -    """Deserialize ``fp`` (a ``.read()``-supporting file-like object containing
    -    a JSON document) to a Python object.
    -
    -    *encoding* determines the encoding used to interpret any
    -    :class:`str` objects decoded by this instance (``'utf-8'`` by
    -    default).  It has no effect when decoding :class:`unicode` objects.
    -
    -    Note that currently only encodings that are a superset of ASCII work,
    -    strings of other encodings should be passed in as :class:`unicode`.
    -
    -    *object_hook*, if specified, will be called with the result of every
    -    JSON object decoded and its return value will be used in place of the
    -    given :class:`dict`.  This can be used to provide custom
    -    deserializations (e.g. to support JSON-RPC class hinting).
    -
    -    *object_pairs_hook* is an optional function that will be called with
    -    the result of any object literal decode with an ordered list of pairs.
    -    The return value of *object_pairs_hook* will be used instead of the
    -    :class:`dict`.  This feature can be used to implement custom decoders
    -    that rely on the order that the key and value pairs are decoded (for
    -    example, :func:`collections.OrderedDict` will remember the order of
    -    insertion). If *object_hook* is also defined, the *object_pairs_hook*
    -    takes priority.
    -
    -    *parse_float*, if specified, will be called with the string of every
    -    JSON float to be decoded.  By default, this is equivalent to
    -    ``float(num_str)``. This can be used to use another datatype or parser
    -    for JSON floats (e.g. :class:`decimal.Decimal`).
    -
    -    *parse_int*, if specified, will be called with the string of every
    -    JSON int to be decoded.  By default, this is equivalent to
    -    ``int(num_str)``.  This can be used to use another datatype or parser
    -    for JSON integers (e.g. :class:`float`).
    -
    -    *parse_constant*, if specified, will be called with one of the
    -    following strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``.  This
    -    can be used to raise an exception if invalid JSON numbers are
    -    encountered.
    -
    -    If *use_decimal* is true (default: ``False``) then it implies
    -    parse_float=decimal.Decimal for parity with ``dump``.
    -
    -    To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
    -    kwarg.
    -
    -    """
    -    return loads(fp.read(),
    -        encoding=encoding, cls=cls, object_hook=object_hook,
    -        parse_float=parse_float, parse_int=parse_int,
    -        parse_constant=parse_constant, object_pairs_hook=object_pairs_hook,
    -        use_decimal=use_decimal, **kw)
    -
    -
    -def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None,
    -        parse_int=None, parse_constant=None, object_pairs_hook=None,
    -        use_decimal=False, **kw):
    -    """Deserialize ``s`` (a ``str`` or ``unicode`` instance containing a JSON
    -    document) to a Python object.
    -
    -    *encoding* determines the encoding used to interpret any
    -    :class:`str` objects decoded by this instance (``'utf-8'`` by
    -    default).  It has no effect when decoding :class:`unicode` objects.
    -
    -    Note that currently only encodings that are a superset of ASCII work,
    -    strings of other encodings should be passed in as :class:`unicode`.
    -
    -    *object_hook*, if specified, will be called with the result of every
    -    JSON object decoded and its return value will be used in place of the
    -    given :class:`dict`.  This can be used to provide custom
    -    deserializations (e.g. to support JSON-RPC class hinting).
    -
    -    *object_pairs_hook* is an optional function that will be called with
    -    the result of any object literal decode with an ordered list of pairs.
    -    The return value of *object_pairs_hook* will be used instead of the
    -    :class:`dict`.  This feature can be used to implement custom decoders
    -    that rely on the order that the key and value pairs are decoded (for
    -    example, :func:`collections.OrderedDict` will remember the order of
    -    insertion). If *object_hook* is also defined, the *object_pairs_hook*
    -    takes priority.
    -
    -    *parse_float*, if specified, will be called with the string of every
    -    JSON float to be decoded.  By default, this is equivalent to
    -    ``float(num_str)``. This can be used to use another datatype or parser
    -    for JSON floats (e.g. :class:`decimal.Decimal`).
    -
    -    *parse_int*, if specified, will be called with the string of every
    -    JSON int to be decoded.  By default, this is equivalent to
    -    ``int(num_str)``.  This can be used to use another datatype or parser
    -    for JSON integers (e.g. :class:`float`).
    -
    -    *parse_constant*, if specified, will be called with one of the
    -    following strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``.  This
    -    can be used to raise an exception if invalid JSON numbers are
    -    encountered.
    -
    -    If *use_decimal* is true (default: ``False``) then it implies
    -    parse_float=decimal.Decimal for parity with ``dump``.
    -
    -    To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
    -    kwarg.
    -
    -    """
    -    if (cls is None and encoding is None and object_hook is None and
    -            parse_int is None and parse_float is None and
    -            parse_constant is None and object_pairs_hook is None
    -            and not use_decimal and not kw):
    -        return _default_decoder.decode(s)
    -    if cls is None:
    -        cls = JSONDecoder
    -    if object_hook is not None:
    -        kw['object_hook'] = object_hook
    -    if object_pairs_hook is not None:
    -        kw['object_pairs_hook'] = object_pairs_hook
    -    if parse_float is not None:
    -        kw['parse_float'] = parse_float
    -    if parse_int is not None:
    -        kw['parse_int'] = parse_int
    -    if parse_constant is not None:
    -        kw['parse_constant'] = parse_constant
    -    if use_decimal:
    -        if parse_float is not None:
    -            raise TypeError("use_decimal=True implies parse_float=Decimal")
    -        kw['parse_float'] = Decimal
    -    return cls(encoding=encoding, **kw).decode(s)
    -
    -
    -def _toggle_speedups(enabled):
    -    import simplejson.decoder as dec
    -    import simplejson.encoder as enc
    -    import simplejson.scanner as scan
    -    c_make_encoder = _import_c_make_encoder()
    -    if enabled:
    -        dec.scanstring = dec.c_scanstring or dec.py_scanstring
    -        enc.c_make_encoder = c_make_encoder
    -        enc.encode_basestring_ascii = (enc.c_encode_basestring_ascii or
    -            enc.py_encode_basestring_ascii)
    -        scan.make_scanner = scan.c_make_scanner or scan.py_make_scanner
    -    else:
    -        dec.scanstring = dec.py_scanstring
    -        enc.c_make_encoder = None
    -        enc.encode_basestring_ascii = enc.py_encode_basestring_ascii
    -        scan.make_scanner = scan.py_make_scanner
    -    dec.make_scanner = scan.make_scanner
    -    global _default_decoder
    -    _default_decoder = JSONDecoder(
    -        encoding=None,
    -        object_hook=None,
    -        object_pairs_hook=None,
    -    )
    -    global _default_encoder
    -    _default_encoder = JSONEncoder(
    -       skipkeys=False,
    -       ensure_ascii=True,
    -       check_circular=True,
    -       allow_nan=True,
    -       indent=None,
    -       separators=None,
    -       encoding='utf-8',
    -       default=None,
    -   )
    -
    -def simple_first(kv):
    -    """Helper function to pass to item_sort_key to sort simple
    -    elements to the top, then container elements.
    -    """
    -    return (isinstance(kv[1], (list, dict, tuple)), kv[0])
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/_speedups.c b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/_speedups.c
    deleted file mode 100644
    index be68b2d..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/_speedups.c
    +++ /dev/null
    @@ -1,2745 +0,0 @@
    -#include "Python.h"
    -#include "structmember.h"
    -#if PY_VERSION_HEX < 0x02070000 && !defined(PyOS_string_to_double)
    -#define PyOS_string_to_double json_PyOS_string_to_double
    -static double
    -json_PyOS_string_to_double(const char *s, char **endptr, PyObject *overflow_exception);
    -static double
    -json_PyOS_string_to_double(const char *s, char **endptr, PyObject *overflow_exception) {
    -    double x;
    -    assert(endptr == NULL);
    -    assert(overflow_exception == NULL);
    -    PyFPE_START_PROTECT("json_PyOS_string_to_double", return -1.0;)
    -    x = PyOS_ascii_atof(s);
    -    PyFPE_END_PROTECT(x)
    -    return x;
    -}
    -#endif
    -#if PY_VERSION_HEX < 0x02060000 && !defined(Py_TYPE)
    -#define Py_TYPE(ob)     (((PyObject*)(ob))->ob_type)
    -#endif
    -#if PY_VERSION_HEX < 0x02060000 && !defined(Py_SIZE)
    -#define Py_SIZE(ob)     (((PyVarObject*)(ob))->ob_size)
    -#endif
    -#if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN)
    -typedef int Py_ssize_t;
    -#define PY_SSIZE_T_MAX INT_MAX
    -#define PY_SSIZE_T_MIN INT_MIN
    -#define PyInt_FromSsize_t PyInt_FromLong
    -#define PyInt_AsSsize_t PyInt_AsLong
    -#endif
    -#ifndef Py_IS_FINITE
    -#define Py_IS_FINITE(X) (!Py_IS_INFINITY(X) && !Py_IS_NAN(X))
    -#endif
    -
    -#ifdef __GNUC__
    -#define UNUSED __attribute__((__unused__))
    -#else
    -#define UNUSED
    -#endif
    -
    -#define DEFAULT_ENCODING "utf-8"
    -
    -#define PyScanner_Check(op) PyObject_TypeCheck(op, &PyScannerType)
    -#define PyScanner_CheckExact(op) (Py_TYPE(op) == &PyScannerType)
    -#define PyEncoder_Check(op) PyObject_TypeCheck(op, &PyEncoderType)
    -#define PyEncoder_CheckExact(op) (Py_TYPE(op) == &PyEncoderType)
    -
    -static PyTypeObject PyScannerType;
    -static PyTypeObject PyEncoderType;
    -
    -typedef struct _PyScannerObject {
    -    PyObject_HEAD
    -    PyObject *encoding;
    -    PyObject *strict;
    -    PyObject *object_hook;
    -    PyObject *pairs_hook;
    -    PyObject *parse_float;
    -    PyObject *parse_int;
    -    PyObject *parse_constant;
    -    PyObject *memo;
    -} PyScannerObject;
    -
    -static PyMemberDef scanner_members[] = {
    -    {"encoding", T_OBJECT, offsetof(PyScannerObject, encoding), READONLY, "encoding"},
    -    {"strict", T_OBJECT, offsetof(PyScannerObject, strict), READONLY, "strict"},
    -    {"object_hook", T_OBJECT, offsetof(PyScannerObject, object_hook), READONLY, "object_hook"},
    -    {"object_pairs_hook", T_OBJECT, offsetof(PyScannerObject, pairs_hook), READONLY, "object_pairs_hook"},
    -    {"parse_float", T_OBJECT, offsetof(PyScannerObject, parse_float), READONLY, "parse_float"},
    -    {"parse_int", T_OBJECT, offsetof(PyScannerObject, parse_int), READONLY, "parse_int"},
    -    {"parse_constant", T_OBJECT, offsetof(PyScannerObject, parse_constant), READONLY, "parse_constant"},
    -    {NULL}
    -};
    -
    -typedef struct _PyEncoderObject {
    -    PyObject_HEAD
    -    PyObject *markers;
    -    PyObject *defaultfn;
    -    PyObject *encoder;
    -    PyObject *indent;
    -    PyObject *key_separator;
    -    PyObject *item_separator;
    -    PyObject *sort_keys;
    -    PyObject *skipkeys;
    -    PyObject *key_memo;
    -    PyObject *Decimal;
    -    int fast_encode;
    -    int allow_nan;
    -    int use_decimal;
    -    int namedtuple_as_object;
    -    int tuple_as_array;
    -    int bigint_as_string;
    -    PyObject *item_sort_key;
    -} PyEncoderObject;
    -
    -static PyMemberDef encoder_members[] = {
    -    {"markers", T_OBJECT, offsetof(PyEncoderObject, markers), READONLY, "markers"},
    -    {"default", T_OBJECT, offsetof(PyEncoderObject, defaultfn), READONLY, "default"},
    -    {"encoder", T_OBJECT, offsetof(PyEncoderObject, encoder), READONLY, "encoder"},
    -    {"indent", T_OBJECT, offsetof(PyEncoderObject, indent), READONLY, "indent"},
    -    {"key_separator", T_OBJECT, offsetof(PyEncoderObject, key_separator), READONLY, "key_separator"},
    -    {"item_separator", T_OBJECT, offsetof(PyEncoderObject, item_separator), READONLY, "item_separator"},
    -    {"sort_keys", T_OBJECT, offsetof(PyEncoderObject, sort_keys), READONLY, "sort_keys"},
    -    {"skipkeys", T_OBJECT, offsetof(PyEncoderObject, skipkeys), READONLY, "skipkeys"},
    -    {"key_memo", T_OBJECT, offsetof(PyEncoderObject, key_memo), READONLY, "key_memo"},
    -    {"item_sort_key", T_OBJECT, offsetof(PyEncoderObject, item_sort_key), READONLY, "item_sort_key"},
    -    {NULL}
    -};
    -
    -static PyObject *
    -maybe_quote_bigint(PyObject *encoded, PyObject *obj);
    -
    -static Py_ssize_t
    -ascii_escape_char(Py_UNICODE c, char *output, Py_ssize_t chars);
    -static PyObject *
    -ascii_escape_unicode(PyObject *pystr);
    -static PyObject *
    -ascii_escape_str(PyObject *pystr);
    -static PyObject *
    -py_encode_basestring_ascii(PyObject* self UNUSED, PyObject *pystr);
    -void init_speedups(void);
    -static PyObject *
    -scan_once_str(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssize_t *next_idx_ptr);
    -static PyObject *
    -scan_once_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssize_t *next_idx_ptr);
    -static PyObject *
    -_build_rval_index_tuple(PyObject *rval, Py_ssize_t idx);
    -static PyObject *
    -scanner_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
    -static int
    -scanner_init(PyObject *self, PyObject *args, PyObject *kwds);
    -static void
    -scanner_dealloc(PyObject *self);
    -static int
    -scanner_clear(PyObject *self);
    -static PyObject *
    -encoder_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
    -static int
    -encoder_init(PyObject *self, PyObject *args, PyObject *kwds);
    -static void
    -encoder_dealloc(PyObject *self);
    -static int
    -encoder_clear(PyObject *self);
    -static int
    -encoder_listencode_list(PyEncoderObject *s, PyObject *rval, PyObject *seq, Py_ssize_t indent_level);
    -static int
    -encoder_listencode_obj(PyEncoderObject *s, PyObject *rval, PyObject *obj, Py_ssize_t indent_level);
    -static int
    -encoder_listencode_dict(PyEncoderObject *s, PyObject *rval, PyObject *dct, Py_ssize_t indent_level);
    -static PyObject *
    -_encoded_const(PyObject *obj);
    -static void
    -raise_errmsg(char *msg, PyObject *s, Py_ssize_t end);
    -static PyObject *
    -encoder_encode_string(PyEncoderObject *s, PyObject *obj);
    -static int
    -_convertPyInt_AsSsize_t(PyObject *o, Py_ssize_t *size_ptr);
    -static PyObject *
    -_convertPyInt_FromSsize_t(Py_ssize_t *size_ptr);
    -static PyObject *
    -encoder_encode_float(PyEncoderObject *s, PyObject *obj);
    -static int
    -_is_namedtuple(PyObject *obj);
    -
    -#define S_CHAR(c) (c >= ' ' && c <= '~' && c != '\\' && c != '"')
    -#define IS_WHITESPACE(c) (((c) == ' ') || ((c) == '\t') || ((c) == '\n') || ((c) == '\r'))
    -
    -#define MIN_EXPANSION 6
    -#ifdef Py_UNICODE_WIDE
    -#define MAX_EXPANSION (2 * MIN_EXPANSION)
    -#else
    -#define MAX_EXPANSION MIN_EXPANSION
    -#endif
    -
    -static PyObject *
    -maybe_quote_bigint(PyObject *encoded, PyObject *obj)
    -{
    -    static PyObject *big_long = NULL;
    -    static PyObject *small_long = NULL;
    -    if (big_long == NULL) {
    -        big_long = PyLong_FromLongLong(1LL << 53);
    -        if (big_long == NULL) {
    -            Py_DECREF(encoded);
    -            return NULL;
    -        }
    -    }
    -    if (small_long == NULL) {
    -        small_long = PyLong_FromLongLong(-1LL << 53);
    -        if (small_long == NULL) {
    -            Py_DECREF(encoded);
    -            return NULL;
    -        }
    -    }
    -    if (PyObject_RichCompareBool(obj, big_long, Py_GE) ||
    -        PyObject_RichCompareBool(obj, small_long, Py_LE)) {
    -        PyObject* quoted = PyString_FromFormat("\"%s\"",
    -                                               PyString_AsString(encoded));
    -        Py_DECREF(encoded);
    -        encoded = quoted;
    -    }
    -    return encoded;
    -}
    -
    -static int
    -_is_namedtuple(PyObject *obj)
    -{
    -    int rval = 0;
    -    PyObject *_asdict = PyObject_GetAttrString(obj, "_asdict");
    -    if (_asdict == NULL) {
    -        PyErr_Clear();
    -        return 0;
    -    }
    -    rval = PyCallable_Check(_asdict);
    -    Py_DECREF(_asdict);
    -    return rval;
    -}
    -
    -static int
    -_convertPyInt_AsSsize_t(PyObject *o, Py_ssize_t *size_ptr)
    -{
    -    /* PyObject to Py_ssize_t converter */
    -    *size_ptr = PyInt_AsSsize_t(o);
    -    if (*size_ptr == -1 && PyErr_Occurred())
    -        return 0;
    -    return 1;
    -}
    -
    -static PyObject *
    -_convertPyInt_FromSsize_t(Py_ssize_t *size_ptr)
    -{
    -    /* Py_ssize_t to PyObject converter */
    -    return PyInt_FromSsize_t(*size_ptr);
    -}
    -
    -static Py_ssize_t
    -ascii_escape_char(Py_UNICODE c, char *output, Py_ssize_t chars)
    -{
    -    /* Escape unicode code point c to ASCII escape sequences
    -    in char *output. output must have at least 12 bytes unused to
    -    accommodate an escaped surrogate pair "\uXXXX\uXXXX" */
    -    output[chars++] = '\\';
    -    switch (c) {
    -        case '\\': output[chars++] = (char)c; break;
    -        case '"': output[chars++] = (char)c; break;
    -        case '\b': output[chars++] = 'b'; break;
    -        case '\f': output[chars++] = 'f'; break;
    -        case '\n': output[chars++] = 'n'; break;
    -        case '\r': output[chars++] = 'r'; break;
    -        case '\t': output[chars++] = 't'; break;
    -        default:
    -#ifdef Py_UNICODE_WIDE
    -            if (c >= 0x10000) {
    -                /* UTF-16 surrogate pair */
    -                Py_UNICODE v = c - 0x10000;
    -                c = 0xd800 | ((v >> 10) & 0x3ff);
    -                output[chars++] = 'u';
    -                output[chars++] = "0123456789abcdef"[(c >> 12) & 0xf];
    -                output[chars++] = "0123456789abcdef"[(c >>  8) & 0xf];
    -                output[chars++] = "0123456789abcdef"[(c >>  4) & 0xf];
    -                output[chars++] = "0123456789abcdef"[(c      ) & 0xf];
    -                c = 0xdc00 | (v & 0x3ff);
    -                output[chars++] = '\\';
    -            }
    -#endif
    -            output[chars++] = 'u';
    -            output[chars++] = "0123456789abcdef"[(c >> 12) & 0xf];
    -            output[chars++] = "0123456789abcdef"[(c >>  8) & 0xf];
    -            output[chars++] = "0123456789abcdef"[(c >>  4) & 0xf];
    -            output[chars++] = "0123456789abcdef"[(c      ) & 0xf];
    -    }
    -    return chars;
    -}
    -
    -static PyObject *
    -ascii_escape_unicode(PyObject *pystr)
    -{
    -    /* Take a PyUnicode pystr and return a new ASCII-only escaped PyString */
    -    Py_ssize_t i;
    -    Py_ssize_t input_chars;
    -    Py_ssize_t output_size;
    -    Py_ssize_t max_output_size;
    -    Py_ssize_t chars;
    -    PyObject *rval;
    -    char *output;
    -    Py_UNICODE *input_unicode;
    -
    -    input_chars = PyUnicode_GET_SIZE(pystr);
    -    input_unicode = PyUnicode_AS_UNICODE(pystr);
    -
    -    /* One char input can be up to 6 chars output, estimate 4 of these */
    -    output_size = 2 + (MIN_EXPANSION * 4) + input_chars;
    -    max_output_size = 2 + (input_chars * MAX_EXPANSION);
    -    rval = PyString_FromStringAndSize(NULL, output_size);
    -    if (rval == NULL) {
    -        return NULL;
    -    }
    -    output = PyString_AS_STRING(rval);
    -    chars = 0;
    -    output[chars++] = '"';
    -    for (i = 0; i < input_chars; i++) {
    -        Py_UNICODE c = input_unicode[i];
    -        if (S_CHAR(c)) {
    -            output[chars++] = (char)c;
    -        }
    -        else {
    -            chars = ascii_escape_char(c, output, chars);
    -        }
    -        if (output_size - chars < (1 + MAX_EXPANSION)) {
    -            /* There's more than four, so let's resize by a lot */
    -            Py_ssize_t new_output_size = output_size * 2;
    -            /* This is an upper bound */
    -            if (new_output_size > max_output_size) {
    -                new_output_size = max_output_size;
    -            }
    -            /* Make sure that the output size changed before resizing */
    -            if (new_output_size != output_size) {
    -                output_size = new_output_size;
    -                if (_PyString_Resize(&rval, output_size) == -1) {
    -                    return NULL;
    -                }
    -                output = PyString_AS_STRING(rval);
    -            }
    -        }
    -    }
    -    output[chars++] = '"';
    -    if (_PyString_Resize(&rval, chars) == -1) {
    -        return NULL;
    -    }
    -    return rval;
    -}
    -
    -static PyObject *
    -ascii_escape_str(PyObject *pystr)
    -{
    -    /* Take a PyString pystr and return a new ASCII-only escaped PyString */
    -    Py_ssize_t i;
    -    Py_ssize_t input_chars;
    -    Py_ssize_t output_size;
    -    Py_ssize_t chars;
    -    PyObject *rval;
    -    char *output;
    -    char *input_str;
    -
    -    input_chars = PyString_GET_SIZE(pystr);
    -    input_str = PyString_AS_STRING(pystr);
    -
    -    /* Fast path for a string that's already ASCII */
    -    for (i = 0; i < input_chars; i++) {
    -        Py_UNICODE c = (Py_UNICODE)(unsigned char)input_str[i];
    -        if (!S_CHAR(c)) {
    -            /* If we have to escape something, scan the string for unicode */
    -            Py_ssize_t j;
    -            for (j = i; j < input_chars; j++) {
    -                c = (Py_UNICODE)(unsigned char)input_str[j];
    -                if (c > 0x7f) {
    -                    /* We hit a non-ASCII character, bail to unicode mode */
    -                    PyObject *uni;
    -                    uni = PyUnicode_DecodeUTF8(input_str, input_chars, "strict");
    -                    if (uni == NULL) {
    -                        return NULL;
    -                    }
    -                    rval = ascii_escape_unicode(uni);
    -                    Py_DECREF(uni);
    -                    return rval;
    -                }
    -            }
    -            break;
    -        }
    -    }
    -
    -    if (i == input_chars) {
    -        /* Input is already ASCII */
    -        output_size = 2 + input_chars;
    -    }
    -    else {
    -        /* One char input can be up to 6 chars output, estimate 4 of these */
    -        output_size = 2 + (MIN_EXPANSION * 4) + input_chars;
    -    }
    -    rval = PyString_FromStringAndSize(NULL, output_size);
    -    if (rval == NULL) {
    -        return NULL;
    -    }
    -    output = PyString_AS_STRING(rval);
    -    output[0] = '"';
    -
    -    /* We know that everything up to i is ASCII already */
    -    chars = i + 1;
    -    memcpy(&output[1], input_str, i);
    -
    -    for (; i < input_chars; i++) {
    -        Py_UNICODE c = (Py_UNICODE)(unsigned char)input_str[i];
    -        if (S_CHAR(c)) {
    -            output[chars++] = (char)c;
    -        }
    -        else {
    -            chars = ascii_escape_char(c, output, chars);
    -        }
    -        /* An ASCII char can't possibly expand to a surrogate! */
    -        if (output_size - chars < (1 + MIN_EXPANSION)) {
    -            /* There's more than four, so let's resize by a lot */
    -            output_size *= 2;
    -            if (output_size > 2 + (input_chars * MIN_EXPANSION)) {
    -                output_size = 2 + (input_chars * MIN_EXPANSION);
    -            }
    -            if (_PyString_Resize(&rval, output_size) == -1) {
    -                return NULL;
    -            }
    -            output = PyString_AS_STRING(rval);
    -        }
    -    }
    -    output[chars++] = '"';
    -    if (_PyString_Resize(&rval, chars) == -1) {
    -        return NULL;
    -    }
    -    return rval;
    -}
    -
    -static void
    -raise_errmsg(char *msg, PyObject *s, Py_ssize_t end)
    -{
    -    /* Use the Python function simplejson.decoder.errmsg to raise a nice
    -    looking ValueError exception */
    -    static PyObject *JSONDecodeError = NULL;
    -    PyObject *exc;
    -    if (JSONDecodeError == NULL) {
    -        PyObject *decoder = PyImport_ImportModule("simplejson.decoder");
    -        if (decoder == NULL)
    -            return;
    -        JSONDecodeError = PyObject_GetAttrString(decoder, "JSONDecodeError");
    -        Py_DECREF(decoder);
    -        if (JSONDecodeError == NULL)
    -            return;
    -    }
    -    exc = PyObject_CallFunction(JSONDecodeError, "(zOO&)", msg, s, _convertPyInt_FromSsize_t, &end);
    -    if (exc) {
    -        PyErr_SetObject(JSONDecodeError, exc);
    -        Py_DECREF(exc);
    -    }
    -}
    -
    -static PyObject *
    -join_list_unicode(PyObject *lst)
    -{
    -    /* return u''.join(lst) */
    -    static PyObject *joinfn = NULL;
    -    if (joinfn == NULL) {
    -        PyObject *ustr = PyUnicode_FromUnicode(NULL, 0);
    -        if (ustr == NULL)
    -            return NULL;
    -
    -        joinfn = PyObject_GetAttrString(ustr, "join");
    -        Py_DECREF(ustr);
    -        if (joinfn == NULL)
    -            return NULL;
    -    }
    -    return PyObject_CallFunctionObjArgs(joinfn, lst, NULL);
    -}
    -
    -static PyObject *
    -join_list_string(PyObject *lst)
    -{
    -    /* return ''.join(lst) */
    -    static PyObject *joinfn = NULL;
    -    if (joinfn == NULL) {
    -        PyObject *ustr = PyString_FromStringAndSize(NULL, 0);
    -        if (ustr == NULL)
    -            return NULL;
    -
    -        joinfn = PyObject_GetAttrString(ustr, "join");
    -        Py_DECREF(ustr);
    -        if (joinfn == NULL)
    -            return NULL;
    -    }
    -    return PyObject_CallFunctionObjArgs(joinfn, lst, NULL);
    -}
    -
    -static PyObject *
    -_build_rval_index_tuple(PyObject *rval, Py_ssize_t idx) {
    -    /* return (rval, idx) tuple, stealing reference to rval */
    -    PyObject *tpl;
    -    PyObject *pyidx;
    -    /*
    -    steal a reference to rval, returns (rval, idx)
    -    */
    -    if (rval == NULL) {
    -        return NULL;
    -    }
    -    pyidx = PyInt_FromSsize_t(idx);
    -    if (pyidx == NULL) {
    -        Py_DECREF(rval);
    -        return NULL;
    -    }
    -    tpl = PyTuple_New(2);
    -    if (tpl == NULL) {
    -        Py_DECREF(pyidx);
    -        Py_DECREF(rval);
    -        return NULL;
    -    }
    -    PyTuple_SET_ITEM(tpl, 0, rval);
    -    PyTuple_SET_ITEM(tpl, 1, pyidx);
    -    return tpl;
    -}
    -
    -#define APPEND_OLD_CHUNK \
    -    if (chunk != NULL) { \
    -        if (chunks == NULL) { \
    -            chunks = PyList_New(0); \
    -            if (chunks == NULL) { \
    -                goto bail; \
    -            } \
    -        } \
    -        if (PyList_Append(chunks, chunk)) { \
    -            goto bail; \
    -        } \
    -        Py_CLEAR(chunk); \
    -    }
    -
    -static PyObject *
    -scanstring_str(PyObject *pystr, Py_ssize_t end, char *encoding, int strict, Py_ssize_t *next_end_ptr)
    -{
    -    /* Read the JSON string from PyString pystr.
    -    end is the index of the first character after the quote.
    -    encoding is the encoding of pystr (must be an ASCII superset)
    -    if strict is zero then literal control characters are allowed
    -    *next_end_ptr is a return-by-reference index of the character
    -        after the end quote
    -
    -    Return value is a new PyString (if ASCII-only) or PyUnicode
    -    */
    -    PyObject *rval;
    -    Py_ssize_t len = PyString_GET_SIZE(pystr);
    -    Py_ssize_t begin = end - 1;
    -    Py_ssize_t next = begin;
    -    int has_unicode = 0;
    -    char *buf = PyString_AS_STRING(pystr);
    -    PyObject *chunks = NULL;
    -    PyObject *chunk = NULL;
    -
    -    if (len == end) {
    -        raise_errmsg("Unterminated string starting at", pystr, begin);
    -    }
    -    else if (end < 0 || len < end) {
    -        PyErr_SetString(PyExc_ValueError, "end is out of bounds");
    -        goto bail;
    -    }
    -    while (1) {
    -        /* Find the end of the string or the next escape */
    -        Py_UNICODE c = 0;
    -        for (next = end; next < len; next++) {
    -            c = (unsigned char)buf[next];
    -            if (c == '"' || c == '\\') {
    -                break;
    -            }
    -            else if (strict && c <= 0x1f) {
    -                raise_errmsg("Invalid control character at", pystr, next);
    -                goto bail;
    -            }
    -            else if (c > 0x7f) {
    -                has_unicode = 1;
    -            }
    -        }
    -        if (!(c == '"' || c == '\\')) {
    -            raise_errmsg("Unterminated string starting at", pystr, begin);
    -            goto bail;
    -        }
    -        /* Pick up this chunk if it's not zero length */
    -        if (next != end) {
    -            PyObject *strchunk;
    -            APPEND_OLD_CHUNK
    -            strchunk = PyString_FromStringAndSize(&buf[end], next - end);
    -            if (strchunk == NULL) {
    -                goto bail;
    -            }
    -            if (has_unicode) {
    -                chunk = PyUnicode_FromEncodedObject(strchunk, encoding, NULL);
    -                Py_DECREF(strchunk);
    -                if (chunk == NULL) {
    -                    goto bail;
    -                }
    -            }
    -            else {
    -                chunk = strchunk;
    -            }
    -        }
    -        next++;
    -        if (c == '"') {
    -            end = next;
    -            break;
    -        }
    -        if (next == len) {
    -            raise_errmsg("Unterminated string starting at", pystr, begin);
    -            goto bail;
    -        }
    -        c = buf[next];
    -        if (c != 'u') {
    -            /* Non-unicode backslash escapes */
    -            end = next + 1;
    -            switch (c) {
    -                case '"': break;
    -                case '\\': break;
    -                case '/': break;
    -                case 'b': c = '\b'; break;
    -                case 'f': c = '\f'; break;
    -                case 'n': c = '\n'; break;
    -                case 'r': c = '\r'; break;
    -                case 't': c = '\t'; break;
    -                default: c = 0;
    -            }
    -            if (c == 0) {
    -                raise_errmsg("Invalid \\escape", pystr, end - 2);
    -                goto bail;
    -            }
    -        }
    -        else {
    -            c = 0;
    -            next++;
    -            end = next + 4;
    -            if (end >= len) {
    -                raise_errmsg("Invalid \\uXXXX escape", pystr, next - 1);
    -                goto bail;
    -            }
    -            /* Decode 4 hex digits */
    -            for (; next < end; next++) {
    -                Py_UNICODE digit = buf[next];
    -                c <<= 4;
    -                switch (digit) {
    -                    case '0': case '1': case '2': case '3': case '4':
    -                    case '5': case '6': case '7': case '8': case '9':
    -                        c |= (digit - '0'); break;
    -                    case 'a': case 'b': case 'c': case 'd': case 'e':
    -                    case 'f':
    -                        c |= (digit - 'a' + 10); break;
    -                    case 'A': case 'B': case 'C': case 'D': case 'E':
    -                    case 'F':
    -                        c |= (digit - 'A' + 10); break;
    -                    default:
    -                        raise_errmsg("Invalid \\uXXXX escape", pystr, end - 5);
    -                        goto bail;
    -                }
    -            }
    -#ifdef Py_UNICODE_WIDE
    -            /* Surrogate pair */
    -            if ((c & 0xfc00) == 0xd800) {
    -                Py_UNICODE c2 = 0;
    -                if (end + 6 >= len) {
    -                    raise_errmsg("Unpaired high surrogate", pystr, end - 5);
    -                    goto bail;
    -                }
    -                if (buf[next++] != '\\' || buf[next++] != 'u') {
    -                    raise_errmsg("Unpaired high surrogate", pystr, end - 5);
    -                    goto bail;
    -                }
    -                end += 6;
    -                /* Decode 4 hex digits */
    -                for (; next < end; next++) {
    -                    c2 <<= 4;
    -                    Py_UNICODE digit = buf[next];
    -                    switch (digit) {
    -                        case '0': case '1': case '2': case '3': case '4':
    -                        case '5': case '6': case '7': case '8': case '9':
    -                            c2 |= (digit - '0'); break;
    -                        case 'a': case 'b': case 'c': case 'd': case 'e':
    -                        case 'f':
    -                            c2 |= (digit - 'a' + 10); break;
    -                        case 'A': case 'B': case 'C': case 'D': case 'E':
    -                        case 'F':
    -                            c2 |= (digit - 'A' + 10); break;
    -                        default:
    -                            raise_errmsg("Invalid \\uXXXX escape", pystr, end - 5);
    -                            goto bail;
    -                    }
    -                }
    -                if ((c2 & 0xfc00) != 0xdc00) {
    -                    raise_errmsg("Unpaired high surrogate", pystr, end - 5);
    -                    goto bail;
    -                }
    -                c = 0x10000 + (((c - 0xd800) << 10) | (c2 - 0xdc00));
    -            }
    -            else if ((c & 0xfc00) == 0xdc00) {
    -                raise_errmsg("Unpaired low surrogate", pystr, end - 5);
    -                goto bail;
    -            }
    -#endif
    -        }
    -        if (c > 0x7f) {
    -            has_unicode = 1;
    -        }
    -        APPEND_OLD_CHUNK
    -        if (has_unicode) {
    -            chunk = PyUnicode_FromUnicode(&c, 1);
    -            if (chunk == NULL) {
    -                goto bail;
    -            }
    -        }
    -        else {
    -            char c_char = Py_CHARMASK(c);
    -            chunk = PyString_FromStringAndSize(&c_char, 1);
    -            if (chunk == NULL) {
    -                goto bail;
    -            }
    -        }
    -    }
    -
    -    if (chunks == NULL) {
    -        if (chunk != NULL)
    -            rval = chunk;
    -        else
    -            rval = PyString_FromStringAndSize("", 0);
    -    }
    -    else {
    -        APPEND_OLD_CHUNK
    -        rval = join_list_string(chunks);
    -        if (rval == NULL) {
    -            goto bail;
    -        }
    -        Py_CLEAR(chunks);
    -    }
    -
    -    *next_end_ptr = end;
    -    return rval;
    -bail:
    -    *next_end_ptr = -1;
    -    Py_XDECREF(chunk);
    -    Py_XDECREF(chunks);
    -    return NULL;
    -}
    -
    -
    -static PyObject *
    -scanstring_unicode(PyObject *pystr, Py_ssize_t end, int strict, Py_ssize_t *next_end_ptr)
    -{
    -    /* Read the JSON string from PyUnicode pystr.
    -    end is the index of the first character after the quote.
    -    if strict is zero then literal control characters are allowed
    -    *next_end_ptr is a return-by-reference index of the character
    -        after the end quote
    -
    -    Return value is a new PyUnicode
    -    */
    -    PyObject *rval;
    -    Py_ssize_t len = PyUnicode_GET_SIZE(pystr);
    -    Py_ssize_t begin = end - 1;
    -    Py_ssize_t next = begin;
    -    const Py_UNICODE *buf = PyUnicode_AS_UNICODE(pystr);
    -    PyObject *chunks = NULL;
    -    PyObject *chunk = NULL;
    -
    -    if (len == end) {
    -        raise_errmsg("Unterminated string starting at", pystr, begin);
    -    }
    -    else if (end < 0 || len < end) {
    -        PyErr_SetString(PyExc_ValueError, "end is out of bounds");
    -        goto bail;
    -    }
    -    while (1) {
    -        /* Find the end of the string or the next escape */
    -        Py_UNICODE c = 0;
    -        for (next = end; next < len; next++) {
    -            c = buf[next];
    -            if (c == '"' || c == '\\') {
    -                break;
    -            }
    -            else if (strict && c <= 0x1f) {
    -                raise_errmsg("Invalid control character at", pystr, next);
    -                goto bail;
    -            }
    -        }
    -        if (!(c == '"' || c == '\\')) {
    -            raise_errmsg("Unterminated string starting at", pystr, begin);
    -            goto bail;
    -        }
    -        /* Pick up this chunk if it's not zero length */
    -        if (next != end) {
    -            APPEND_OLD_CHUNK
    -            chunk = PyUnicode_FromUnicode(&buf[end], next - end);
    -            if (chunk == NULL) {
    -                goto bail;
    -            }
    -        }
    -        next++;
    -        if (c == '"') {
    -            end = next;
    -            break;
    -        }
    -        if (next == len) {
    -            raise_errmsg("Unterminated string starting at", pystr, begin);
    -            goto bail;
    -        }
    -        c = buf[next];
    -        if (c != 'u') {
    -            /* Non-unicode backslash escapes */
    -            end = next + 1;
    -            switch (c) {
    -                case '"': break;
    -                case '\\': break;
    -                case '/': break;
    -                case 'b': c = '\b'; break;
    -                case 'f': c = '\f'; break;
    -                case 'n': c = '\n'; break;
    -                case 'r': c = '\r'; break;
    -                case 't': c = '\t'; break;
    -                default: c = 0;
    -            }
    -            if (c == 0) {
    -                raise_errmsg("Invalid \\escape", pystr, end - 2);
    -                goto bail;
    -            }
    -        }
    -        else {
    -            c = 0;
    -            next++;
    -            end = next + 4;
    -            if (end >= len) {
    -                raise_errmsg("Invalid \\uXXXX escape", pystr, next - 1);
    -                goto bail;
    -            }
    -            /* Decode 4 hex digits */
    -            for (; next < end; next++) {
    -                Py_UNICODE digit = buf[next];
    -                c <<= 4;
    -                switch (digit) {
    -                    case '0': case '1': case '2': case '3': case '4':
    -                    case '5': case '6': case '7': case '8': case '9':
    -                        c |= (digit - '0'); break;
    -                    case 'a': case 'b': case 'c': case 'd': case 'e':
    -                    case 'f':
    -                        c |= (digit - 'a' + 10); break;
    -                    case 'A': case 'B': case 'C': case 'D': case 'E':
    -                    case 'F':
    -                        c |= (digit - 'A' + 10); break;
    -                    default:
    -                        raise_errmsg("Invalid \\uXXXX escape", pystr, end - 5);
    -                        goto bail;
    -                }
    -            }
    -#ifdef Py_UNICODE_WIDE
    -            /* Surrogate pair */
    -            if ((c & 0xfc00) == 0xd800) {
    -                Py_UNICODE c2 = 0;
    -                if (end + 6 >= len) {
    -                    raise_errmsg("Unpaired high surrogate", pystr, end - 5);
    -                    goto bail;
    -                }
    -                if (buf[next++] != '\\' || buf[next++] != 'u') {
    -                    raise_errmsg("Unpaired high surrogate", pystr, end - 5);
    -                    goto bail;
    -                }
    -                end += 6;
    -                /* Decode 4 hex digits */
    -                for (; next < end; next++) {
    -                    c2 <<= 4;
    -                    Py_UNICODE digit = buf[next];
    -                    switch (digit) {
    -                        case '0': case '1': case '2': case '3': case '4':
    -                        case '5': case '6': case '7': case '8': case '9':
    -                            c2 |= (digit - '0'); break;
    -                        case 'a': case 'b': case 'c': case 'd': case 'e':
    -                        case 'f':
    -                            c2 |= (digit - 'a' + 10); break;
    -                        case 'A': case 'B': case 'C': case 'D': case 'E':
    -                        case 'F':
    -                            c2 |= (digit - 'A' + 10); break;
    -                        default:
    -                            raise_errmsg("Invalid \\uXXXX escape", pystr, end - 5);
    -                            goto bail;
    -                    }
    -                }
    -                if ((c2 & 0xfc00) != 0xdc00) {
    -                    raise_errmsg("Unpaired high surrogate", pystr, end - 5);
    -                    goto bail;
    -                }
    -                c = 0x10000 + (((c - 0xd800) << 10) | (c2 - 0xdc00));
    -            }
    -            else if ((c & 0xfc00) == 0xdc00) {
    -                raise_errmsg("Unpaired low surrogate", pystr, end - 5);
    -                goto bail;
    -            }
    -#endif
    -        }
    -        APPEND_OLD_CHUNK
    -        chunk = PyUnicode_FromUnicode(&c, 1);
    -        if (chunk == NULL) {
    -            goto bail;
    -        }
    -    }
    -
    -    if (chunks == NULL) {
    -        if (chunk != NULL)
    -            rval = chunk;
    -        else
    -            rval = PyUnicode_FromUnicode(NULL, 0);
    -    }
    -    else {
    -        APPEND_OLD_CHUNK
    -        rval = join_list_unicode(chunks);
    -        if (rval == NULL) {
    -            goto bail;
    -        }
    -        Py_CLEAR(chunks);
    -    }
    -    *next_end_ptr = end;
    -    return rval;
    -bail:
    -    *next_end_ptr = -1;
    -    Py_XDECREF(chunk);
    -    Py_XDECREF(chunks);
    -    return NULL;
    -}
    -
    -PyDoc_STRVAR(pydoc_scanstring,
    -    "scanstring(basestring, end, encoding, strict=True) -> (str, end)\n"
    -    "\n"
    -    "Scan the string s for a JSON string. End is the index of the\n"
    -    "character in s after the quote that started the JSON string.\n"
    -    "Unescapes all valid JSON string escape sequences and raises ValueError\n"
    -    "on attempt to decode an invalid string. If strict is False then literal\n"
    -    "control characters are allowed in the string.\n"
    -    "\n"
    -    "Returns a tuple of the decoded string and the index of the character in s\n"
    -    "after the end quote."
    -);
    -
    -static PyObject *
    -py_scanstring(PyObject* self UNUSED, PyObject *args)
    -{
    -    PyObject *pystr;
    -    PyObject *rval;
    -    Py_ssize_t end;
    -    Py_ssize_t next_end = -1;
    -    char *encoding = NULL;
    -    int strict = 1;
    -    if (!PyArg_ParseTuple(args, "OO&|zi:scanstring", &pystr, _convertPyInt_AsSsize_t, &end, &encoding, &strict)) {
    -        return NULL;
    -    }
    -    if (encoding == NULL) {
    -        encoding = DEFAULT_ENCODING;
    -    }
    -    if (PyString_Check(pystr)) {
    -        rval = scanstring_str(pystr, end, encoding, strict, &next_end);
    -    }
    -    else if (PyUnicode_Check(pystr)) {
    -        rval = scanstring_unicode(pystr, end, strict, &next_end);
    -    }
    -    else {
    -        PyErr_Format(PyExc_TypeError,
    -                     "first argument must be a string, not %.80s",
    -                     Py_TYPE(pystr)->tp_name);
    -        return NULL;
    -    }
    -    return _build_rval_index_tuple(rval, next_end);
    -}
    -
    -PyDoc_STRVAR(pydoc_encode_basestring_ascii,
    -    "encode_basestring_ascii(basestring) -> str\n"
    -    "\n"
    -    "Return an ASCII-only JSON representation of a Python string"
    -);
    -
    -static PyObject *
    -py_encode_basestring_ascii(PyObject* self UNUSED, PyObject *pystr)
    -{
    -    /* Return an ASCII-only JSON representation of a Python string */
    -    /* METH_O */
    -    if (PyString_Check(pystr)) {
    -        return ascii_escape_str(pystr);
    -    }
    -    else if (PyUnicode_Check(pystr)) {
    -        return ascii_escape_unicode(pystr);
    -    }
    -    else {
    -        PyErr_Format(PyExc_TypeError,
    -                     "first argument must be a string, not %.80s",
    -                     Py_TYPE(pystr)->tp_name);
    -        return NULL;
    -    }
    -}
    -
    -static void
    -scanner_dealloc(PyObject *self)
    -{
    -    /* Deallocate scanner object */
    -    scanner_clear(self);
    -    Py_TYPE(self)->tp_free(self);
    -}
    -
    -static int
    -scanner_traverse(PyObject *self, visitproc visit, void *arg)
    -{
    -    PyScannerObject *s;
    -    assert(PyScanner_Check(self));
    -    s = (PyScannerObject *)self;
    -    Py_VISIT(s->encoding);
    -    Py_VISIT(s->strict);
    -    Py_VISIT(s->object_hook);
    -    Py_VISIT(s->pairs_hook);
    -    Py_VISIT(s->parse_float);
    -    Py_VISIT(s->parse_int);
    -    Py_VISIT(s->parse_constant);
    -    Py_VISIT(s->memo);
    -    return 0;
    -}
    -
    -static int
    -scanner_clear(PyObject *self)
    -{
    -    PyScannerObject *s;
    -    assert(PyScanner_Check(self));
    -    s = (PyScannerObject *)self;
    -    Py_CLEAR(s->encoding);
    -    Py_CLEAR(s->strict);
    -    Py_CLEAR(s->object_hook);
    -    Py_CLEAR(s->pairs_hook);
    -    Py_CLEAR(s->parse_float);
    -    Py_CLEAR(s->parse_int);
    -    Py_CLEAR(s->parse_constant);
    -    Py_CLEAR(s->memo);
    -    return 0;
    -}
    -
    -static PyObject *
    -_parse_object_str(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssize_t *next_idx_ptr) {
    -    /* Read a JSON object from PyString pystr.
    -    idx is the index of the first character after the opening curly brace.
    -    *next_idx_ptr is a return-by-reference index to the first character after
    -        the closing curly brace.
    -
    -    Returns a new PyObject (usually a dict, but object_hook or
    -    object_pairs_hook can change that)
    -    */
    -    char *str = PyString_AS_STRING(pystr);
    -    Py_ssize_t end_idx = PyString_GET_SIZE(pystr) - 1;
    -    PyObject *rval = NULL;
    -    PyObject *pairs = NULL;
    -    PyObject *item;
    -    PyObject *key = NULL;
    -    PyObject *val = NULL;
    -    char *encoding = PyString_AS_STRING(s->encoding);
    -    int strict = PyObject_IsTrue(s->strict);
    -    int has_pairs_hook = (s->pairs_hook != Py_None);
    -    Py_ssize_t next_idx;
    -    if (has_pairs_hook) {
    -        pairs = PyList_New(0);
    -        if (pairs == NULL)
    -            return NULL;
    -    }
    -    else {
    -        rval = PyDict_New();
    -        if (rval == NULL)
    -            return NULL;
    -    }
    -
    -    /* skip whitespace after { */
    -    while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
    -
    -    /* only loop if the object is non-empty */
    -    if (idx <= end_idx && str[idx] != '}') {
    -        while (idx <= end_idx) {
    -            PyObject *memokey;
    -
    -            /* read key */
    -            if (str[idx] != '"') {
    -                raise_errmsg(
    -                    "Expecting property name enclosed in double quotes",
    -                    pystr, idx);
    -                goto bail;
    -            }
    -            key = scanstring_str(pystr, idx + 1, encoding, strict, &next_idx);
    -            if (key == NULL)
    -                goto bail;
    -            memokey = PyDict_GetItem(s->memo, key);
    -            if (memokey != NULL) {
    -                Py_INCREF(memokey);
    -                Py_DECREF(key);
    -                key = memokey;
    -            }
    -            else {
    -                if (PyDict_SetItem(s->memo, key, key) < 0)
    -                    goto bail;
    -            }
    -            idx = next_idx;
    -
    -            /* skip whitespace between key and : delimiter, read :, skip whitespace */
    -            while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
    -            if (idx > end_idx || str[idx] != ':') {
    -                raise_errmsg("Expecting ':' delimiter", pystr, idx);
    -                goto bail;
    -            }
    -            idx++;
    -            while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
    -
    -            /* read any JSON data type */
    -            val = scan_once_str(s, pystr, idx, &next_idx);
    -            if (val == NULL)
    -                goto bail;
    -
    -            if (has_pairs_hook) {
    -                item = PyTuple_Pack(2, key, val);
    -                if (item == NULL)
    -                    goto bail;
    -                Py_CLEAR(key);
    -                Py_CLEAR(val);
    -                if (PyList_Append(pairs, item) == -1) {
    -                    Py_DECREF(item);
    -                    goto bail;
    -                }
    -                Py_DECREF(item);
    -            }
    -            else {
    -                if (PyDict_SetItem(rval, key, val) < 0)
    -                    goto bail;
    -                Py_CLEAR(key);
    -                Py_CLEAR(val);
    -            }
    -            idx = next_idx;
    -
    -            /* skip whitespace before } or , */
    -            while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
    -
    -            /* bail if the object is closed or we didn't get the , delimiter */
    -            if (idx > end_idx) break;
    -            if (str[idx] == '}') {
    -                break;
    -            }
    -            else if (str[idx] != ',') {
    -                raise_errmsg("Expecting ',' delimiter", pystr, idx);
    -                goto bail;
    -            }
    -            idx++;
    -
    -            /* skip whitespace after , delimiter */
    -            while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
    -        }
    -    }
    -    /* verify that idx < end_idx, str[idx] should be '}' */
    -    if (idx > end_idx || str[idx] != '}') {
    -        raise_errmsg("Expecting object", pystr, end_idx);
    -        goto bail;
    -    }
    -
    -    /* if pairs_hook is not None: rval = object_pairs_hook(pairs) */
    -    if (s->pairs_hook != Py_None) {
    -        val = PyObject_CallFunctionObjArgs(s->pairs_hook, pairs, NULL);
    -        if (val == NULL)
    -            goto bail;
    -        Py_DECREF(pairs);
    -        *next_idx_ptr = idx + 1;
    -        return val;
    -    }
    -
    -    /* if object_hook is not None: rval = object_hook(rval) */
    -    if (s->object_hook != Py_None) {
    -        val = PyObject_CallFunctionObjArgs(s->object_hook, rval, NULL);
    -        if (val == NULL)
    -            goto bail;
    -        Py_DECREF(rval);
    -        rval = val;
    -        val = NULL;
    -    }
    -    *next_idx_ptr = idx + 1;
    -    return rval;
    -bail:
    -    Py_XDECREF(rval);
    -    Py_XDECREF(key);
    -    Py_XDECREF(val);
    -    Py_XDECREF(pairs);
    -    return NULL;
    -}
    -
    -static PyObject *
    -_parse_object_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssize_t *next_idx_ptr) {
    -    /* Read a JSON object from PyUnicode pystr.
    -    idx is the index of the first character after the opening curly brace.
    -    *next_idx_ptr is a return-by-reference index to the first character after
    -        the closing curly brace.
    -
    -    Returns a new PyObject (usually a dict, but object_hook can change that)
    -    */
    -    Py_UNICODE *str = PyUnicode_AS_UNICODE(pystr);
    -    Py_ssize_t end_idx = PyUnicode_GET_SIZE(pystr) - 1;
    -    PyObject *rval = NULL;
    -    PyObject *pairs = NULL;
    -    PyObject *item;
    -    PyObject *key = NULL;
    -    PyObject *val = NULL;
    -    int strict = PyObject_IsTrue(s->strict);
    -    int has_pairs_hook = (s->pairs_hook != Py_None);
    -    Py_ssize_t next_idx;
    -
    -    if (has_pairs_hook) {
    -        pairs = PyList_New(0);
    -        if (pairs == NULL)
    -            return NULL;
    -    }
    -    else {
    -        rval = PyDict_New();
    -        if (rval == NULL)
    -            return NULL;
    -    }
    -
    -    /* skip whitespace after { */
    -    while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
    -
    -    /* only loop if the object is non-empty */
    -    if (idx <= end_idx && str[idx] != '}') {
    -        while (idx <= end_idx) {
    -            PyObject *memokey;
    -
    -            /* read key */
    -            if (str[idx] != '"') {
    -                raise_errmsg(
    -                    "Expecting property name enclosed in double quotes",
    -                    pystr, idx);
    -                goto bail;
    -            }
    -            key = scanstring_unicode(pystr, idx + 1, strict, &next_idx);
    -            if (key == NULL)
    -                goto bail;
    -            memokey = PyDict_GetItem(s->memo, key);
    -            if (memokey != NULL) {
    -                Py_INCREF(memokey);
    -                Py_DECREF(key);
    -                key = memokey;
    -            }
    -            else {
    -                if (PyDict_SetItem(s->memo, key, key) < 0)
    -                    goto bail;
    -            }
    -            idx = next_idx;
    -
    -            /* skip whitespace between key and : delimiter, read :, skip
    -               whitespace */
    -            while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
    -            if (idx > end_idx || str[idx] != ':') {
    -                raise_errmsg("Expecting ':' delimiter", pystr, idx);
    -                goto bail;
    -            }
    -            idx++;
    -            while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
    -
    -            /* read any JSON term */
    -            val = scan_once_unicode(s, pystr, idx, &next_idx);
    -            if (val == NULL)
    -                goto bail;
    -
    -            if (has_pairs_hook) {
    -                item = PyTuple_Pack(2, key, val);
    -                if (item == NULL)
    -                    goto bail;
    -                Py_CLEAR(key);
    -                Py_CLEAR(val);
    -                if (PyList_Append(pairs, item) == -1) {
    -                    Py_DECREF(item);
    -                    goto bail;
    -                }
    -                Py_DECREF(item);
    -            }
    -            else {
    -                if (PyDict_SetItem(rval, key, val) < 0)
    -                    goto bail;
    -                Py_CLEAR(key);
    -                Py_CLEAR(val);
    -            }
    -            idx = next_idx;
    -
    -            /* skip whitespace before } or , */
    -            while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
    -
    -            /* bail if the object is closed or we didn't get the ,
    -               delimiter */
    -            if (idx > end_idx) break;
    -            if (str[idx] == '}') {
    -                break;
    -            }
    -            else if (str[idx] != ',') {
    -                raise_errmsg("Expecting ',' delimiter", pystr, idx);
    -                goto bail;
    -            }
    -            idx++;
    -
    -            /* skip whitespace after , delimiter */
    -            while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
    -        }
    -    }
    -
    -    /* verify that idx < end_idx, str[idx] should be '}' */
    -    if (idx > end_idx || str[idx] != '}') {
    -        raise_errmsg("Expecting object", pystr, end_idx);
    -        goto bail;
    -    }
    -
    -    /* if pairs_hook is not None: rval = object_pairs_hook(pairs) */
    -    if (s->pairs_hook != Py_None) {
    -        val = PyObject_CallFunctionObjArgs(s->pairs_hook, pairs, NULL);
    -        if (val == NULL)
    -            goto bail;
    -        Py_DECREF(pairs);
    -        *next_idx_ptr = idx + 1;
    -        return val;
    -    }
    -
    -    /* if object_hook is not None: rval = object_hook(rval) */
    -    if (s->object_hook != Py_None) {
    -        val = PyObject_CallFunctionObjArgs(s->object_hook, rval, NULL);
    -        if (val == NULL)
    -            goto bail;
    -        Py_DECREF(rval);
    -        rval = val;
    -        val = NULL;
    -    }
    -    *next_idx_ptr = idx + 1;
    -    return rval;
    -bail:
    -    Py_XDECREF(rval);
    -    Py_XDECREF(key);
    -    Py_XDECREF(val);
    -    Py_XDECREF(pairs);
    -    return NULL;
    -}
    -
    -static PyObject *
    -_parse_array_str(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssize_t *next_idx_ptr) {
    -    /* Read a JSON array from PyString pystr.
    -    idx is the index of the first character after the opening brace.
    -    *next_idx_ptr is a return-by-reference index to the first character after
    -        the closing brace.
    -
    -    Returns a new PyList
    -    */
    -    char *str = PyString_AS_STRING(pystr);
    -    Py_ssize_t end_idx = PyString_GET_SIZE(pystr) - 1;
    -    PyObject *val = NULL;
    -    PyObject *rval = PyList_New(0);
    -    Py_ssize_t next_idx;
    -    if (rval == NULL)
    -        return NULL;
    -
    -    /* skip whitespace after [ */
    -    while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
    -
    -    /* only loop if the array is non-empty */
    -    if (idx <= end_idx && str[idx] != ']') {
    -        while (idx <= end_idx) {
    -
    -            /* read any JSON term and de-tuplefy the (rval, idx) */
    -            val = scan_once_str(s, pystr, idx, &next_idx);
    -            if (val == NULL) {
    -                if (PyErr_ExceptionMatches(PyExc_StopIteration)) {
    -                    PyErr_Clear();
    -                    raise_errmsg("Expecting object", pystr, idx);
    -                }
    -                goto bail;
    -            }
    -
    -            if (PyList_Append(rval, val) == -1)
    -                goto bail;
    -
    -            Py_CLEAR(val);
    -            idx = next_idx;
    -
    -            /* skip whitespace between term and , */
    -            while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
    -
    -            /* bail if the array is closed or we didn't get the , delimiter */
    -            if (idx > end_idx) break;
    -            if (str[idx] == ']') {
    -                break;
    -            }
    -            else if (str[idx] != ',') {
    -                raise_errmsg("Expecting ',' delimiter", pystr, idx);
    -                goto bail;
    -            }
    -            idx++;
    -
    -            /* skip whitespace after , */
    -            while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
    -        }
    -    }
    -
    -    /* verify that idx < end_idx, str[idx] should be ']' */
    -    if (idx > end_idx || str[idx] != ']') {
    -        raise_errmsg("Expecting object", pystr, end_idx);
    -        goto bail;
    -    }
    -    *next_idx_ptr = idx + 1;
    -    return rval;
    -bail:
    -    Py_XDECREF(val);
    -    Py_DECREF(rval);
    -    return NULL;
    -}
    -
    -static PyObject *
    -_parse_array_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssize_t *next_idx_ptr) {
    -    /* Read a JSON array from PyString pystr.
    -    idx is the index of the first character after the opening brace.
    -    *next_idx_ptr is a return-by-reference index to the first character after
    -        the closing brace.
    -
    -    Returns a new PyList
    -    */
    -    Py_UNICODE *str = PyUnicode_AS_UNICODE(pystr);
    -    Py_ssize_t end_idx = PyUnicode_GET_SIZE(pystr) - 1;
    -    PyObject *val = NULL;
    -    PyObject *rval = PyList_New(0);
    -    Py_ssize_t next_idx;
    -    if (rval == NULL)
    -        return NULL;
    -
    -    /* skip whitespace after [ */
    -    while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
    -
    -    /* only loop if the array is non-empty */
    -    if (idx <= end_idx && str[idx] != ']') {
    -        while (idx <= end_idx) {
    -
    -            /* read any JSON term  */
    -            val = scan_once_unicode(s, pystr, idx, &next_idx);
    -            if (val == NULL) {
    -                if (PyErr_ExceptionMatches(PyExc_StopIteration)) {
    -                    PyErr_Clear();
    -                    raise_errmsg("Expecting object", pystr, idx);
    -                }
    -                goto bail;
    -            }
    -
    -            if (PyList_Append(rval, val) == -1)
    -                goto bail;
    -
    -            Py_CLEAR(val);
    -            idx = next_idx;
    -
    -            /* skip whitespace between term and , */
    -            while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
    -
    -            /* bail if the array is closed or we didn't get the , delimiter */
    -            if (idx > end_idx) break;
    -            if (str[idx] == ']') {
    -                break;
    -            }
    -            else if (str[idx] != ',') {
    -                raise_errmsg("Expecting ',' delimiter", pystr, idx);
    -                goto bail;
    -            }
    -            idx++;
    -
    -            /* skip whitespace after , */
    -            while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
    -        }
    -    }
    -
    -    /* verify that idx < end_idx, str[idx] should be ']' */
    -    if (idx > end_idx || str[idx] != ']') {
    -        raise_errmsg("Expecting object", pystr, end_idx);
    -        goto bail;
    -    }
    -    *next_idx_ptr = idx + 1;
    -    return rval;
    -bail:
    -    Py_XDECREF(val);
    -    Py_DECREF(rval);
    -    return NULL;
    -}
    -
    -static PyObject *
    -_parse_constant(PyScannerObject *s, char *constant, Py_ssize_t idx, Py_ssize_t *next_idx_ptr) {
    -    /* Read a JSON constant from PyString pystr.
    -    constant is the constant string that was found
    -        ("NaN", "Infinity", "-Infinity").
    -    idx is the index of the first character of the constant
    -    *next_idx_ptr is a return-by-reference index to the first character after
    -        the constant.
    -
    -    Returns the result of parse_constant
    -    */
    -    PyObject *cstr;
    -    PyObject *rval;
    -    /* constant is "NaN", "Infinity", or "-Infinity" */
    -    cstr = PyString_InternFromString(constant);
    -    if (cstr == NULL)
    -        return NULL;
    -
    -    /* rval = parse_constant(constant) */
    -    rval = PyObject_CallFunctionObjArgs(s->parse_constant, cstr, NULL);
    -    idx += PyString_GET_SIZE(cstr);
    -    Py_DECREF(cstr);
    -    *next_idx_ptr = idx;
    -    return rval;
    -}
    -
    -static PyObject *
    -_match_number_str(PyScannerObject *s, PyObject *pystr, Py_ssize_t start, Py_ssize_t *next_idx_ptr) {
    -    /* Read a JSON number from PyString pystr.
    -    idx is the index of the first character of the number
    -    *next_idx_ptr is a return-by-reference index to the first character after
    -        the number.
    -
    -    Returns a new PyObject representation of that number:
    -        PyInt, PyLong, or PyFloat.
    -        May return other types if parse_int or parse_float are set
    -    */
    -    char *str = PyString_AS_STRING(pystr);
    -    Py_ssize_t end_idx = PyString_GET_SIZE(pystr) - 1;
    -    Py_ssize_t idx = start;
    -    int is_float = 0;
    -    PyObject *rval;
    -    PyObject *numstr;
    -
    -    /* read a sign if it's there, make sure it's not the end of the string */
    -    if (str[idx] == '-') {
    -        idx++;
    -        if (idx > end_idx) {
    -            PyErr_SetNone(PyExc_StopIteration);
    -            return NULL;
    -        }
    -    }
    -
    -    /* read as many integer digits as we find as long as it doesn't start with 0 */
    -    if (str[idx] >= '1' && str[idx] <= '9') {
    -        idx++;
    -        while (idx <= end_idx && str[idx] >= '0' && str[idx] <= '9') idx++;
    -    }
    -    /* if it starts with 0 we only expect one integer digit */
    -    else if (str[idx] == '0') {
    -        idx++;
    -    }
    -    /* no integer digits, error */
    -    else {
    -        PyErr_SetNone(PyExc_StopIteration);
    -        return NULL;
    -    }
    -
    -    /* if the next char is '.' followed by a digit then read all float digits */
    -    if (idx < end_idx && str[idx] == '.' && str[idx + 1] >= '0' && str[idx + 1] <= '9') {
    -        is_float = 1;
    -        idx += 2;
    -        while (idx <= end_idx && str[idx] >= '0' && str[idx] <= '9') idx++;
    -    }
    -
    -    /* if the next char is 'e' or 'E' then maybe read the exponent (or backtrack) */
    -    if (idx < end_idx && (str[idx] == 'e' || str[idx] == 'E')) {
    -
    -        /* save the index of the 'e' or 'E' just in case we need to backtrack */
    -        Py_ssize_t e_start = idx;
    -        idx++;
    -
    -        /* read an exponent sign if present */
    -        if (idx < end_idx && (str[idx] == '-' || str[idx] == '+')) idx++;
    -
    -        /* read all digits */
    -        while (idx <= end_idx && str[idx] >= '0' && str[idx] <= '9') idx++;
    -
    -        /* if we got a digit, then parse as float. if not, backtrack */
    -        if (str[idx - 1] >= '0' && str[idx - 1] <= '9') {
    -            is_float = 1;
    -        }
    -        else {
    -            idx = e_start;
    -        }
    -    }
    -
    -    /* copy the section we determined to be a number */
    -    numstr = PyString_FromStringAndSize(&str[start], idx - start);
    -    if (numstr == NULL)
    -        return NULL;
    -    if (is_float) {
    -        /* parse as a float using a fast path if available, otherwise call user defined method */
    -        if (s->parse_float != (PyObject *)&PyFloat_Type) {
    -            rval = PyObject_CallFunctionObjArgs(s->parse_float, numstr, NULL);
    -        }
    -        else {
    -            /* rval = PyFloat_FromDouble(PyOS_ascii_atof(PyString_AS_STRING(numstr))); */
    -            double d = PyOS_string_to_double(PyString_AS_STRING(numstr),
    -                                             NULL, NULL);
    -            if (d == -1.0 && PyErr_Occurred())
    -                return NULL;
    -            rval = PyFloat_FromDouble(d);
    -        }
    -    }
    -    else {
    -        /* parse as an int using a fast path if available, otherwise call user defined method */
    -        if (s->parse_int != (PyObject *)&PyInt_Type) {
    -            rval = PyObject_CallFunctionObjArgs(s->parse_int, numstr, NULL);
    -        }
    -        else {
    -            rval = PyInt_FromString(PyString_AS_STRING(numstr), NULL, 10);
    -        }
    -    }
    -    Py_DECREF(numstr);
    -    *next_idx_ptr = idx;
    -    return rval;
    -}
    -
    -static PyObject *
    -_match_number_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t start, Py_ssize_t *next_idx_ptr) {
    -    /* Read a JSON number from PyUnicode pystr.
    -    idx is the index of the first character of the number
    -    *next_idx_ptr is a return-by-reference index to the first character after
    -        the number.
    -
    -    Returns a new PyObject representation of that number:
    -        PyInt, PyLong, or PyFloat.
    -        May return other types if parse_int or parse_float are set
    -    */
    -    Py_UNICODE *str = PyUnicode_AS_UNICODE(pystr);
    -    Py_ssize_t end_idx = PyUnicode_GET_SIZE(pystr) - 1;
    -    Py_ssize_t idx = start;
    -    int is_float = 0;
    -    PyObject *rval;
    -    PyObject *numstr;
    -
    -    /* read a sign if it's there, make sure it's not the end of the string */
    -    if (str[idx] == '-') {
    -        idx++;
    -        if (idx > end_idx) {
    -            PyErr_SetNone(PyExc_StopIteration);
    -            return NULL;
    -        }
    -    }
    -
    -    /* read as many integer digits as we find as long as it doesn't start with 0 */
    -    if (str[idx] >= '1' && str[idx] <= '9') {
    -        idx++;
    -        while (idx <= end_idx && str[idx] >= '0' && str[idx] <= '9') idx++;
    -    }
    -    /* if it starts with 0 we only expect one integer digit */
    -    else if (str[idx] == '0') {
    -        idx++;
    -    }
    -    /* no integer digits, error */
    -    else {
    -        PyErr_SetNone(PyExc_StopIteration);
    -        return NULL;
    -    }
    -
    -    /* if the next char is '.' followed by a digit then read all float digits */
    -    if (idx < end_idx && str[idx] == '.' && str[idx + 1] >= '0' && str[idx + 1] <= '9') {
    -        is_float = 1;
    -        idx += 2;
    -        while (idx <= end_idx && str[idx] >= '0' && str[idx] <= '9') idx++;
    -    }
    -
    -    /* if the next char is 'e' or 'E' then maybe read the exponent (or backtrack) */
    -    if (idx < end_idx && (str[idx] == 'e' || str[idx] == 'E')) {
    -        Py_ssize_t e_start = idx;
    -        idx++;
    -
    -        /* read an exponent sign if present */
    -        if (idx < end_idx && (str[idx] == '-' || str[idx] == '+')) idx++;
    -
    -        /* read all digits */
    -        while (idx <= end_idx && str[idx] >= '0' && str[idx] <= '9') idx++;
    -
    -        /* if we got a digit, then parse as float. if not, backtrack */
    -        if (str[idx - 1] >= '0' && str[idx - 1] <= '9') {
    -            is_float = 1;
    -        }
    -        else {
    -            idx = e_start;
    -        }
    -    }
    -
    -    /* copy the section we determined to be a number */
    -    numstr = PyUnicode_FromUnicode(&str[start], idx - start);
    -    if (numstr == NULL)
    -        return NULL;
    -    if (is_float) {
    -        /* parse as a float using a fast path if available, otherwise call user defined method */
    -        if (s->parse_float != (PyObject *)&PyFloat_Type) {
    -            rval = PyObject_CallFunctionObjArgs(s->parse_float, numstr, NULL);
    -        }
    -        else {
    -            rval = PyFloat_FromString(numstr, NULL);
    -        }
    -    }
    -    else {
    -        /* no fast path for unicode -> int, just call */
    -        rval = PyObject_CallFunctionObjArgs(s->parse_int, numstr, NULL);
    -    }
    -    Py_DECREF(numstr);
    -    *next_idx_ptr = idx;
    -    return rval;
    -}
    -
    -static PyObject *
    -scan_once_str(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssize_t *next_idx_ptr)
    -{
    -    /* Read one JSON term (of any kind) from PyString pystr.
    -    idx is the index of the first character of the term
    -    *next_idx_ptr is a return-by-reference index to the first character after
    -        the number.
    -
    -    Returns a new PyObject representation of the term.
    -    */
    -    char *str = PyString_AS_STRING(pystr);
    -    Py_ssize_t length = PyString_GET_SIZE(pystr);
    -    PyObject *rval = NULL;
    -    int fallthrough = 0;
    -    if (idx >= length) {
    -        PyErr_SetNone(PyExc_StopIteration);
    -        return NULL;
    -    }
    -    if (Py_EnterRecursiveCall(" while decoding a JSON document"))
    -        return NULL;
    -    switch (str[idx]) {
    -        case '"':
    -            /* string */
    -            rval = scanstring_str(pystr, idx + 1,
    -                PyString_AS_STRING(s->encoding),
    -                PyObject_IsTrue(s->strict),
    -                next_idx_ptr);
    -            break;
    -        case '{':
    -            /* object */
    -            rval = _parse_object_str(s, pystr, idx + 1, next_idx_ptr);
    -            break;
    -        case '[':
    -            /* array */
    -            rval = _parse_array_str(s, pystr, idx + 1, next_idx_ptr);
    -            break;
    -        case 'n':
    -            /* null */
    -            if ((idx + 3 < length) && str[idx + 1] == 'u' && str[idx + 2] == 'l' && str[idx + 3] == 'l') {
    -                Py_INCREF(Py_None);
    -                *next_idx_ptr = idx + 4;
    -                rval = Py_None;
    -            }
    -            else
    -                fallthrough = 1;
    -            break;
    -        case 't':
    -            /* true */
    -            if ((idx + 3 < length) && str[idx + 1] == 'r' && str[idx + 2] == 'u' && str[idx + 3] == 'e') {
    -                Py_INCREF(Py_True);
    -                *next_idx_ptr = idx + 4;
    -                rval = Py_True;
    -            }
    -            else
    -                fallthrough = 1;
    -            break;
    -        case 'f':
    -            /* false */
    -            if ((idx + 4 < length) && str[idx + 1] == 'a' && str[idx + 2] == 'l' && str[idx + 3] == 's' && str[idx + 4] == 'e') {
    -                Py_INCREF(Py_False);
    -                *next_idx_ptr = idx + 5;
    -                rval = Py_False;
    -            }
    -            else
    -                fallthrough = 1;
    -            break;
    -        case 'N':
    -            /* NaN */
    -            if ((idx + 2 < length) && str[idx + 1] == 'a' && str[idx + 2] == 'N') {
    -                rval = _parse_constant(s, "NaN", idx, next_idx_ptr);
    -            }
    -            else
    -                fallthrough = 1;
    -            break;
    -        case 'I':
    -            /* Infinity */
    -            if ((idx + 7 < length) && str[idx + 1] == 'n' && str[idx + 2] == 'f' && str[idx + 3] == 'i' && str[idx + 4] == 'n' && str[idx + 5] == 'i' && str[idx + 6] == 't' && str[idx + 7] == 'y') {
    -                rval = _parse_constant(s, "Infinity", idx, next_idx_ptr);
    -            }
    -            else
    -                fallthrough = 1;
    -            break;
    -        case '-':
    -            /* -Infinity */
    -            if ((idx + 8 < length) && str[idx + 1] == 'I' && str[idx + 2] == 'n' && str[idx + 3] == 'f' && str[idx + 4] == 'i' && str[idx + 5] == 'n' && str[idx + 6] == 'i' && str[idx + 7] == 't' && str[idx + 8] == 'y') {
    -                rval = _parse_constant(s, "-Infinity", idx, next_idx_ptr);
    -            }
    -            else
    -                fallthrough = 1;
    -            break;
    -        default:
    -            fallthrough = 1;
    -    }
    -    /* Didn't find a string, object, array, or named constant. Look for a number. */
    -    if (fallthrough)
    -        rval = _match_number_str(s, pystr, idx, next_idx_ptr);
    -    Py_LeaveRecursiveCall();
    -    return rval;
    -}
    -
    -static PyObject *
    -scan_once_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssize_t *next_idx_ptr)
    -{
    -    /* Read one JSON term (of any kind) from PyUnicode pystr.
    -    idx is the index of the first character of the term
    -    *next_idx_ptr is a return-by-reference index to the first character after
    -        the number.
    -
    -    Returns a new PyObject representation of the term.
    -    */
    -    Py_UNICODE *str = PyUnicode_AS_UNICODE(pystr);
    -    Py_ssize_t length = PyUnicode_GET_SIZE(pystr);
    -    PyObject *rval = NULL;
    -    int fallthrough = 0;
    -    if (idx >= length) {
    -        PyErr_SetNone(PyExc_StopIteration);
    -        return NULL;
    -    }
    -    if (Py_EnterRecursiveCall(" while decoding a JSON document"))
    -        return NULL;
    -    switch (str[idx]) {
    -        case '"':
    -            /* string */
    -            rval = scanstring_unicode(pystr, idx + 1,
    -                PyObject_IsTrue(s->strict),
    -                next_idx_ptr);
    -            break;
    -        case '{':
    -            /* object */
    -            rval = _parse_object_unicode(s, pystr, idx + 1, next_idx_ptr);
    -            break;
    -        case '[':
    -            /* array */
    -            rval = _parse_array_unicode(s, pystr, idx + 1, next_idx_ptr);
    -            break;
    -        case 'n':
    -            /* null */
    -            if ((idx + 3 < length) && str[idx + 1] == 'u' && str[idx + 2] == 'l' && str[idx + 3] == 'l') {
    -                Py_INCREF(Py_None);
    -                *next_idx_ptr = idx + 4;
    -                rval = Py_None;
    -            }
    -            else
    -                fallthrough = 1;
    -            break;
    -        case 't':
    -            /* true */
    -            if ((idx + 3 < length) && str[idx + 1] == 'r' && str[idx + 2] == 'u' && str[idx + 3] == 'e') {
    -                Py_INCREF(Py_True);
    -                *next_idx_ptr = idx + 4;
    -                rval = Py_True;
    -            }
    -            else
    -                fallthrough = 1;
    -            break;
    -        case 'f':
    -            /* false */
    -            if ((idx + 4 < length) && str[idx + 1] == 'a' && str[idx + 2] == 'l' && str[idx + 3] == 's' && str[idx + 4] == 'e') {
    -                Py_INCREF(Py_False);
    -                *next_idx_ptr = idx + 5;
    -                rval = Py_False;
    -            }
    -            else
    -                fallthrough = 1;
    -            break;
    -        case 'N':
    -            /* NaN */
    -            if ((idx + 2 < length) && str[idx + 1] == 'a' && str[idx + 2] == 'N') {
    -                rval = _parse_constant(s, "NaN", idx, next_idx_ptr);
    -            }
    -            else
    -                fallthrough = 1;
    -            break;
    -        case 'I':
    -            /* Infinity */
    -            if ((idx + 7 < length) && str[idx + 1] == 'n' && str[idx + 2] == 'f' && str[idx + 3] == 'i' && str[idx + 4] == 'n' && str[idx + 5] == 'i' && str[idx + 6] == 't' && str[idx + 7] == 'y') {
    -                rval = _parse_constant(s, "Infinity", idx, next_idx_ptr);
    -            }
    -            else
    -                fallthrough = 1;
    -            break;
    -        case '-':
    -            /* -Infinity */
    -            if ((idx + 8 < length) && str[idx + 1] == 'I' && str[idx + 2] == 'n' && str[idx + 3] == 'f' && str[idx + 4] == 'i' && str[idx + 5] == 'n' && str[idx + 6] == 'i' && str[idx + 7] == 't' && str[idx + 8] == 'y') {
    -                rval = _parse_constant(s, "-Infinity", idx, next_idx_ptr);
    -            }
    -            else
    -                fallthrough = 1;
    -            break;
    -        default:
    -            fallthrough = 1;
    -    }
    -    /* Didn't find a string, object, array, or named constant. Look for a number. */
    -    if (fallthrough)
    -        rval = _match_number_unicode(s, pystr, idx, next_idx_ptr);
    -    Py_LeaveRecursiveCall();
    -    return rval;
    -}
    -
    -static PyObject *
    -scanner_call(PyObject *self, PyObject *args, PyObject *kwds)
    -{
    -    /* Python callable interface to scan_once_{str,unicode} */
    -    PyObject *pystr;
    -    PyObject *rval;
    -    Py_ssize_t idx;
    -    Py_ssize_t next_idx = -1;
    -    static char *kwlist[] = {"string", "idx", NULL};
    -    PyScannerObject *s;
    -    assert(PyScanner_Check(self));
    -    s = (PyScannerObject *)self;
    -    if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO&:scan_once", kwlist, &pystr, _convertPyInt_AsSsize_t, &idx))
    -        return NULL;
    -
    -    if (PyString_Check(pystr)) {
    -        rval = scan_once_str(s, pystr, idx, &next_idx);
    -    }
    -    else if (PyUnicode_Check(pystr)) {
    -        rval = scan_once_unicode(s, pystr, idx, &next_idx);
    -    }
    -    else {
    -        PyErr_Format(PyExc_TypeError,
    -                 "first argument must be a string, not %.80s",
    -                 Py_TYPE(pystr)->tp_name);
    -        return NULL;
    -    }
    -    PyDict_Clear(s->memo);
    -    return _build_rval_index_tuple(rval, next_idx);
    -}
    -
    -static PyObject *
    -scanner_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
    -{
    -    PyScannerObject *s;
    -    s = (PyScannerObject *)type->tp_alloc(type, 0);
    -    if (s != NULL) {
    -        s->encoding = NULL;
    -        s->strict = NULL;
    -        s->object_hook = NULL;
    -        s->pairs_hook = NULL;
    -        s->parse_float = NULL;
    -        s->parse_int = NULL;
    -        s->parse_constant = NULL;
    -    }
    -    return (PyObject *)s;
    -}
    -
    -static int
    -scanner_init(PyObject *self, PyObject *args, PyObject *kwds)
    -{
    -    /* Initialize Scanner object */
    -    PyObject *ctx;
    -    static char *kwlist[] = {"context", NULL};
    -    PyScannerObject *s;
    -
    -    assert(PyScanner_Check(self));
    -    s = (PyScannerObject *)self;
    -
    -    if (!PyArg_ParseTupleAndKeywords(args, kwds, "O:make_scanner", kwlist, &ctx))
    -        return -1;
    -
    -    if (s->memo == NULL) {
    -        s->memo = PyDict_New();
    -        if (s->memo == NULL)
    -            goto bail;
    -    }
    -
    -    /* PyString_AS_STRING is used on encoding */
    -    s->encoding = PyObject_GetAttrString(ctx, "encoding");
    -    if (s->encoding == NULL)
    -        goto bail;
    -    if (s->encoding == Py_None) {
    -        Py_DECREF(Py_None);
    -        s->encoding = PyString_InternFromString(DEFAULT_ENCODING);
    -    }
    -    else if (PyUnicode_Check(s->encoding)) {
    -        PyObject *tmp = PyUnicode_AsEncodedString(s->encoding, NULL, NULL);
    -        Py_DECREF(s->encoding);
    -        s->encoding = tmp;
    -    }
    -    if (s->encoding == NULL || !PyString_Check(s->encoding))
    -        goto bail;
    -
    -    /* All of these will fail "gracefully" so we don't need to verify them */
    -    s->strict = PyObject_GetAttrString(ctx, "strict");
    -    if (s->strict == NULL)
    -        goto bail;
    -    s->object_hook = PyObject_GetAttrString(ctx, "object_hook");
    -    if (s->object_hook == NULL)
    -        goto bail;
    -    s->pairs_hook = PyObject_GetAttrString(ctx, "object_pairs_hook");
    -    if (s->pairs_hook == NULL)
    -        goto bail;
    -    s->parse_float = PyObject_GetAttrString(ctx, "parse_float");
    -    if (s->parse_float == NULL)
    -        goto bail;
    -    s->parse_int = PyObject_GetAttrString(ctx, "parse_int");
    -    if (s->parse_int == NULL)
    -        goto bail;
    -    s->parse_constant = PyObject_GetAttrString(ctx, "parse_constant");
    -    if (s->parse_constant == NULL)
    -        goto bail;
    -
    -    return 0;
    -
    -bail:
    -    Py_CLEAR(s->encoding);
    -    Py_CLEAR(s->strict);
    -    Py_CLEAR(s->object_hook);
    -    Py_CLEAR(s->pairs_hook);
    -    Py_CLEAR(s->parse_float);
    -    Py_CLEAR(s->parse_int);
    -    Py_CLEAR(s->parse_constant);
    -    return -1;
    -}
    -
    -PyDoc_STRVAR(scanner_doc, "JSON scanner object");
    -
    -static
    -PyTypeObject PyScannerType = {
    -    PyObject_HEAD_INIT(NULL)
    -    0,                    /* tp_internal */
    -    "simplejson._speedups.Scanner",       /* tp_name */
    -    sizeof(PyScannerObject), /* tp_basicsize */
    -    0,                    /* tp_itemsize */
    -    scanner_dealloc, /* tp_dealloc */
    -    0,                    /* tp_print */
    -    0,                    /* tp_getattr */
    -    0,                    /* tp_setattr */
    -    0,                    /* tp_compare */
    -    0,                    /* tp_repr */
    -    0,                    /* tp_as_number */
    -    0,                    /* tp_as_sequence */
    -    0,                    /* tp_as_mapping */
    -    0,                    /* tp_hash */
    -    scanner_call,         /* tp_call */
    -    0,                    /* tp_str */
    -    0,/* PyObject_GenericGetAttr, */                    /* tp_getattro */
    -    0,/* PyObject_GenericSetAttr, */                    /* tp_setattro */
    -    0,                    /* tp_as_buffer */
    -    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,   /* tp_flags */
    -    scanner_doc,          /* tp_doc */
    -    scanner_traverse,                    /* tp_traverse */
    -    scanner_clear,                    /* tp_clear */
    -    0,                    /* tp_richcompare */
    -    0,                    /* tp_weaklistoffset */
    -    0,                    /* tp_iter */
    -    0,                    /* tp_iternext */
    -    0,                    /* tp_methods */
    -    scanner_members,                    /* tp_members */
    -    0,                    /* tp_getset */
    -    0,                    /* tp_base */
    -    0,                    /* tp_dict */
    -    0,                    /* tp_descr_get */
    -    0,                    /* tp_descr_set */
    -    0,                    /* tp_dictoffset */
    -    scanner_init,                    /* tp_init */
    -    0,/* PyType_GenericAlloc, */        /* tp_alloc */
    -    scanner_new,          /* tp_new */
    -    0,/* PyObject_GC_Del, */              /* tp_free */
    -};
    -
    -static PyObject *
    -encoder_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
    -{
    -    PyEncoderObject *s;
    -    s = (PyEncoderObject *)type->tp_alloc(type, 0);
    -    if (s != NULL) {
    -        s->markers = NULL;
    -        s->defaultfn = NULL;
    -        s->encoder = NULL;
    -        s->indent = NULL;
    -        s->key_separator = NULL;
    -        s->item_separator = NULL;
    -        s->sort_keys = NULL;
    -        s->skipkeys = NULL;
    -        s->key_memo = NULL;
    -        s->item_sort_key = NULL;
    -        s->Decimal = NULL;
    -    }
    -    return (PyObject *)s;
    -}
    -
    -static int
    -encoder_init(PyObject *self, PyObject *args, PyObject *kwds)
    -{
    -    /* initialize Encoder object */
    -    static char *kwlist[] = {"markers", "default", "encoder", "indent", "key_separator", "item_separator", "sort_keys", "skipkeys", "allow_nan", "key_memo", "use_decimal", "namedtuple_as_object", "tuple_as_array", "bigint_as_string", "item_sort_key", "Decimal", NULL};
    -
    -    PyEncoderObject *s;
    -    PyObject *markers, *defaultfn, *encoder, *indent, *key_separator;
    -    PyObject *item_separator, *sort_keys, *skipkeys, *allow_nan, *key_memo;
    -    PyObject *use_decimal, *namedtuple_as_object, *tuple_as_array;
    -    PyObject *bigint_as_string, *item_sort_key, *Decimal;
    -
    -    assert(PyEncoder_Check(self));
    -    s = (PyEncoderObject *)self;
    -
    -    if (!PyArg_ParseTupleAndKeywords(args, kwds, "OOOOOOOOOOOOOOOO:make_encoder", kwlist,
    -        &markers, &defaultfn, &encoder, &indent, &key_separator, &item_separator,
    -        &sort_keys, &skipkeys, &allow_nan, &key_memo, &use_decimal,
    -        &namedtuple_as_object, &tuple_as_array, &bigint_as_string,
    -        &item_sort_key, &Decimal))
    -        return -1;
    -
    -    s->markers = markers;
    -    s->defaultfn = defaultfn;
    -    s->encoder = encoder;
    -    s->indent = indent;
    -    s->key_separator = key_separator;
    -    s->item_separator = item_separator;
    -    s->sort_keys = sort_keys;
    -    s->skipkeys = skipkeys;
    -    s->key_memo = key_memo;
    -    s->fast_encode = (PyCFunction_Check(s->encoder) && PyCFunction_GetFunction(s->encoder) == (PyCFunction)py_encode_basestring_ascii);
    -    s->allow_nan = PyObject_IsTrue(allow_nan);
    -    s->use_decimal = PyObject_IsTrue(use_decimal);
    -    s->namedtuple_as_object = PyObject_IsTrue(namedtuple_as_object);
    -    s->tuple_as_array = PyObject_IsTrue(tuple_as_array);
    -    s->bigint_as_string = PyObject_IsTrue(bigint_as_string);
    -    s->item_sort_key = item_sort_key;
    -    s->Decimal = Decimal;
    -
    -    Py_INCREF(s->markers);
    -    Py_INCREF(s->defaultfn);
    -    Py_INCREF(s->encoder);
    -    Py_INCREF(s->indent);
    -    Py_INCREF(s->key_separator);
    -    Py_INCREF(s->item_separator);
    -    Py_INCREF(s->sort_keys);
    -    Py_INCREF(s->skipkeys);
    -    Py_INCREF(s->key_memo);
    -    Py_INCREF(s->item_sort_key);
    -    Py_INCREF(s->Decimal);
    -    return 0;
    -}
    -
    -static PyObject *
    -encoder_call(PyObject *self, PyObject *args, PyObject *kwds)
    -{
    -    /* Python callable interface to encode_listencode_obj */
    -    static char *kwlist[] = {"obj", "_current_indent_level", NULL};
    -    PyObject *obj;
    -    PyObject *rval;
    -    Py_ssize_t indent_level;
    -    PyEncoderObject *s;
    -    assert(PyEncoder_Check(self));
    -    s = (PyEncoderObject *)self;
    -    if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO&:_iterencode", kwlist,
    -        &obj, _convertPyInt_AsSsize_t, &indent_level))
    -        return NULL;
    -    rval = PyList_New(0);
    -    if (rval == NULL)
    -        return NULL;
    -    if (encoder_listencode_obj(s, rval, obj, indent_level)) {
    -        Py_DECREF(rval);
    -        return NULL;
    -    }
    -    return rval;
    -}
    -
    -static PyObject *
    -_encoded_const(PyObject *obj)
    -{
    -    /* Return the JSON string representation of None, True, False */
    -    if (obj == Py_None) {
    -        static PyObject *s_null = NULL;
    -        if (s_null == NULL) {
    -            s_null = PyString_InternFromString("null");
    -        }
    -        Py_INCREF(s_null);
    -        return s_null;
    -    }
    -    else if (obj == Py_True) {
    -        static PyObject *s_true = NULL;
    -        if (s_true == NULL) {
    -            s_true = PyString_InternFromString("true");
    -        }
    -        Py_INCREF(s_true);
    -        return s_true;
    -    }
    -    else if (obj == Py_False) {
    -        static PyObject *s_false = NULL;
    -        if (s_false == NULL) {
    -            s_false = PyString_InternFromString("false");
    -        }
    -        Py_INCREF(s_false);
    -        return s_false;
    -    }
    -    else {
    -        PyErr_SetString(PyExc_ValueError, "not a const");
    -        return NULL;
    -    }
    -}
    -
    -static PyObject *
    -encoder_encode_float(PyEncoderObject *s, PyObject *obj)
    -{
    -    /* Return the JSON representation of a PyFloat */
    -    double i = PyFloat_AS_DOUBLE(obj);
    -    if (!Py_IS_FINITE(i)) {
    -        if (!s->allow_nan) {
    -            PyErr_SetString(PyExc_ValueError, "Out of range float values are not JSON compliant");
    -            return NULL;
    -        }
    -        if (i > 0) {
    -            return PyString_FromString("Infinity");
    -        }
    -        else if (i < 0) {
    -            return PyString_FromString("-Infinity");
    -        }
    -        else {
    -            return PyString_FromString("NaN");
    -        }
    -    }
    -    /* Use a better float format here? */
    -    return PyObject_Repr(obj);
    -}
    -
    -static PyObject *
    -encoder_encode_string(PyEncoderObject *s, PyObject *obj)
    -{
    -    /* Return the JSON representation of a string */
    -    if (s->fast_encode)
    -        return py_encode_basestring_ascii(NULL, obj);
    -    else
    -        return PyObject_CallFunctionObjArgs(s->encoder, obj, NULL);
    -}
    -
    -static int
    -_steal_list_append(PyObject *lst, PyObject *stolen)
    -{
    -    /* Append stolen and then decrement its reference count */
    -    int rval = PyList_Append(lst, stolen);
    -    Py_DECREF(stolen);
    -    return rval;
    -}
    -
    -static int
    -encoder_listencode_obj(PyEncoderObject *s, PyObject *rval, PyObject *obj, Py_ssize_t indent_level)
    -{
    -    /* Encode Python object obj to a JSON term, rval is a PyList */
    -    int rv = -1;
    -    if (Py_EnterRecursiveCall(" while encoding a JSON document"))
    -        return rv;
    -    do {
    -        if (obj == Py_None || obj == Py_True || obj == Py_False) {
    -            PyObject *cstr = _encoded_const(obj);
    -            if (cstr != NULL)
    -                rv = _steal_list_append(rval, cstr);
    -        }
    -        else if (PyString_Check(obj) || PyUnicode_Check(obj))
    -        {
    -            PyObject *encoded = encoder_encode_string(s, obj);
    -            if (encoded != NULL)
    -                rv = _steal_list_append(rval, encoded);
    -        }
    -        else if (PyInt_Check(obj) || PyLong_Check(obj)) {
    -            PyObject *encoded = PyObject_Str(obj);
    -            if (encoded != NULL) {
    -                if (s->bigint_as_string) {
    -                    encoded = maybe_quote_bigint(encoded, obj);
    -                    if (encoded == NULL)
    -                        break;
    -                }
    -                rv = _steal_list_append(rval, encoded);
    -            }
    -        }
    -        else if (PyFloat_Check(obj)) {
    -            PyObject *encoded = encoder_encode_float(s, obj);
    -            if (encoded != NULL)
    -                rv = _steal_list_append(rval, encoded);
    -        }
    -        else if (s->namedtuple_as_object && _is_namedtuple(obj)) {
    -            PyObject *newobj = PyObject_CallMethod(obj, "_asdict", NULL);
    -            if (newobj != NULL) {
    -                rv = encoder_listencode_dict(s, rval, newobj, indent_level);
    -                Py_DECREF(newobj);
    -            }
    -        }
    -        else if (PyList_Check(obj) || (s->tuple_as_array && PyTuple_Check(obj))) {
    -            rv = encoder_listencode_list(s, rval, obj, indent_level);
    -        }
    -        else if (PyDict_Check(obj)) {
    -            rv = encoder_listencode_dict(s, rval, obj, indent_level);
    -        }
    -        else if (s->use_decimal && PyObject_TypeCheck(obj, s->Decimal)) {
    -            PyObject *encoded = PyObject_Str(obj);
    -            if (encoded != NULL)
    -                rv = _steal_list_append(rval, encoded);
    -        }
    -        else {
    -            PyObject *ident = NULL;
    -            PyObject *newobj;
    -            if (s->markers != Py_None) {
    -                int has_key;
    -                ident = PyLong_FromVoidPtr(obj);
    -                if (ident == NULL)
    -                    break;
    -                has_key = PyDict_Contains(s->markers, ident);
    -                if (has_key) {
    -                    if (has_key != -1)
    -                        PyErr_SetString(PyExc_ValueError, "Circular reference detected");
    -                    Py_DECREF(ident);
    -                    break;
    -                }
    -                if (PyDict_SetItem(s->markers, ident, obj)) {
    -                    Py_DECREF(ident);
    -                    break;
    -                }
    -            }
    -            newobj = PyObject_CallFunctionObjArgs(s->defaultfn, obj, NULL);
    -            if (newobj == NULL) {
    -                Py_XDECREF(ident);
    -                break;
    -            }
    -            rv = encoder_listencode_obj(s, rval, newobj, indent_level);
    -            Py_DECREF(newobj);
    -            if (rv) {
    -                Py_XDECREF(ident);
    -                rv = -1;
    -            }
    -            else if (ident != NULL) {
    -                if (PyDict_DelItem(s->markers, ident)) {
    -                    Py_XDECREF(ident);
    -                    rv = -1;
    -                }
    -                Py_XDECREF(ident);
    -            }
    -        }
    -    } while (0);
    -    Py_LeaveRecursiveCall();
    -    return rv;
    -}
    -
    -static int
    -encoder_listencode_dict(PyEncoderObject *s, PyObject *rval, PyObject *dct, Py_ssize_t indent_level)
    -{
    -    /* Encode Python dict dct a JSON term, rval is a PyList */
    -    static PyObject *open_dict = NULL;
    -    static PyObject *close_dict = NULL;
    -    static PyObject *empty_dict = NULL;
    -    static PyObject *iteritems = NULL;
    -    PyObject *kstr = NULL;
    -    PyObject *ident = NULL;
    -    PyObject *iter = NULL;
    -    PyObject *item = NULL;
    -    PyObject *items = NULL;
    -    PyObject *encoded = NULL;
    -    int skipkeys;
    -    Py_ssize_t idx;
    -
    -    if (open_dict == NULL || close_dict == NULL || empty_dict == NULL || iteritems == NULL) {
    -        open_dict = PyString_InternFromString("{");
    -        close_dict = PyString_InternFromString("}");
    -        empty_dict = PyString_InternFromString("{}");
    -        iteritems = PyString_InternFromString("iteritems");
    -        if (open_dict == NULL || close_dict == NULL || empty_dict == NULL || iteritems == NULL)
    -            return -1;
    -    }
    -    if (PyDict_Size(dct) == 0)
    -        return PyList_Append(rval, empty_dict);
    -
    -    if (s->markers != Py_None) {
    -        int has_key;
    -        ident = PyLong_FromVoidPtr(dct);
    -        if (ident == NULL)
    -            goto bail;
    -        has_key = PyDict_Contains(s->markers, ident);
    -        if (has_key) {
    -            if (has_key != -1)
    -                PyErr_SetString(PyExc_ValueError, "Circular reference detected");
    -            goto bail;
    -        }
    -        if (PyDict_SetItem(s->markers, ident, dct)) {
    -            goto bail;
    -        }
    -    }
    -
    -    if (PyList_Append(rval, open_dict))
    -        goto bail;
    -
    -    if (s->indent != Py_None) {
    -        /* TODO: DOES NOT RUN */
    -        indent_level += 1;
    -        /*
    -            newline_indent = '\n' + (_indent * _current_indent_level)
    -            separator = _item_separator + newline_indent
    -            buf += newline_indent
    -        */
    -    }
    -
    -    if (PyCallable_Check(s->item_sort_key)) {
    -        if (PyDict_CheckExact(dct))
    -            items = PyDict_Items(dct);
    -        else
    -            items = PyMapping_Items(dct);
    -        PyObject_CallMethod(items, "sort", "OO", Py_None, s->item_sort_key);
    -    }
    -    else if (PyObject_IsTrue(s->sort_keys)) {
    -        /* First sort the keys then replace them with (key, value) tuples. */
    -        Py_ssize_t i, nitems;
    -        if (PyDict_CheckExact(dct))
    -            items = PyDict_Keys(dct);
    -        else
    -            items = PyMapping_Keys(dct);
    -        if (items == NULL)
    -            goto bail;
    -        if (!PyList_Check(items)) {
    -            PyErr_SetString(PyExc_ValueError, "keys must return list");
    -            goto bail;
    -        }
    -        if (PyList_Sort(items) < 0)
    -            goto bail;
    -        nitems = PyList_GET_SIZE(items);
    -        for (i = 0; i < nitems; i++) {
    -            PyObject *key, *value;
    -            key = PyList_GET_ITEM(items, i);
    -            value = PyDict_GetItem(dct, key);
    -            item = PyTuple_Pack(2, key, value);
    -            if (item == NULL)
    -                goto bail;
    -            PyList_SET_ITEM(items, i, item);
    -            Py_DECREF(key);
    -        }
    -    }
    -    else {
    -        if (PyDict_CheckExact(dct))
    -            items = PyDict_Items(dct);
    -        else
    -            items = PyMapping_Items(dct);
    -    }
    -    if (items == NULL)
    -        goto bail;
    -    iter = PyObject_GetIter(items);
    -    Py_DECREF(items);
    -    if (iter == NULL)
    -        goto bail;
    -
    -    skipkeys = PyObject_IsTrue(s->skipkeys);
    -    idx = 0;
    -    while ((item = PyIter_Next(iter))) {
    -        PyObject *encoded, *key, *value;
    -        if (!PyTuple_Check(item) || Py_SIZE(item) != 2) {
    -            PyErr_SetString(PyExc_ValueError, "items must return 2-tuples");
    -            goto bail;
    -        }
    -        key = PyTuple_GET_ITEM(item, 0);
    -        if (key == NULL)
    -            goto bail;
    -        value = PyTuple_GET_ITEM(item, 1);
    -        if (value == NULL)
    -            goto bail;
    -
    -        encoded = PyDict_GetItem(s->key_memo, key);
    -        if (encoded != NULL) {
    -            Py_INCREF(encoded);
    -        }
    -        else if (PyString_Check(key) || PyUnicode_Check(key)) {
    -            Py_INCREF(key);
    -            kstr = key;
    -        }
    -        else if (PyFloat_Check(key)) {
    -            kstr = encoder_encode_float(s, key);
    -            if (kstr == NULL)
    -                goto bail;
    -        }
    -        else if (key == Py_True || key == Py_False || key == Py_None) {
    -            /* This must come before the PyInt_Check because
    -               True and False are also 1 and 0.*/
    -            kstr = _encoded_const(key);
    -            if (kstr == NULL)
    -                goto bail;
    -        }
    -        else if (PyInt_Check(key) || PyLong_Check(key)) {
    -            kstr = PyObject_Str(key);
    -            if (kstr == NULL)
    -                goto bail;
    -        }
    -        else if (skipkeys) {
    -            Py_DECREF(item);
    -            continue;
    -        }
    -        else {
    -            /* TODO: include repr of key */
    -            PyErr_SetString(PyExc_TypeError, "keys must be a string");
    -            goto bail;
    -        }
    -
    -        if (idx) {
    -            if (PyList_Append(rval, s->item_separator))
    -                goto bail;
    -        }
    -
    -        if (encoded == NULL) {
    -            encoded = encoder_encode_string(s, kstr);
    -            Py_CLEAR(kstr);
    -            if (encoded == NULL)
    -                goto bail;
    -            if (PyDict_SetItem(s->key_memo, key, encoded))
    -                goto bail;
    -        }
    -        if (PyList_Append(rval, encoded)) {
    -            goto bail;
    -        }
    -        Py_CLEAR(encoded);
    -        if (PyList_Append(rval, s->key_separator))
    -            goto bail;
    -        if (encoder_listencode_obj(s, rval, value, indent_level))
    -            goto bail;
    -        Py_CLEAR(item);
    -        idx += 1;
    -    }
    -    Py_CLEAR(iter);
    -    if (PyErr_Occurred())
    -        goto bail;
    -    if (ident != NULL) {
    -        if (PyDict_DelItem(s->markers, ident))
    -            goto bail;
    -        Py_CLEAR(ident);
    -    }
    -    if (s->indent != Py_None) {
    -        /* TODO: DOES NOT RUN */
    -        indent_level -= 1;
    -        /*
    -            yield '\n' + (_indent * _current_indent_level)
    -        */
    -    }
    -    if (PyList_Append(rval, close_dict))
    -        goto bail;
    -    return 0;
    -
    -bail:
    -    Py_XDECREF(encoded);
    -    Py_XDECREF(items);
    -    Py_XDECREF(iter);
    -    Py_XDECREF(kstr);
    -    Py_XDECREF(ident);
    -    return -1;
    -}
    -
    -
    -static int
    -encoder_listencode_list(PyEncoderObject *s, PyObject *rval, PyObject *seq, Py_ssize_t indent_level)
    -{
    -    /* Encode Python list seq to a JSON term, rval is a PyList */
    -    static PyObject *open_array = NULL;
    -    static PyObject *close_array = NULL;
    -    static PyObject *empty_array = NULL;
    -    PyObject *ident = NULL;
    -    PyObject *iter = NULL;
    -    PyObject *obj = NULL;
    -    int is_true;
    -    int i = 0;
    -
    -    if (open_array == NULL || close_array == NULL || empty_array == NULL) {
    -        open_array = PyString_InternFromString("[");
    -        close_array = PyString_InternFromString("]");
    -        empty_array = PyString_InternFromString("[]");
    -        if (open_array == NULL || close_array == NULL || empty_array == NULL)
    -            return -1;
    -    }
    -    ident = NULL;
    -    is_true = PyObject_IsTrue(seq);
    -    if (is_true == -1)
    -        return -1;
    -    else if (is_true == 0)
    -        return PyList_Append(rval, empty_array);
    -
    -    if (s->markers != Py_None) {
    -        int has_key;
    -        ident = PyLong_FromVoidPtr(seq);
    -        if (ident == NULL)
    -            goto bail;
    -        has_key = PyDict_Contains(s->markers, ident);
    -        if (has_key) {
    -            if (has_key != -1)
    -                PyErr_SetString(PyExc_ValueError, "Circular reference detected");
    -            goto bail;
    -        }
    -        if (PyDict_SetItem(s->markers, ident, seq)) {
    -            goto bail;
    -        }
    -    }
    -
    -    iter = PyObject_GetIter(seq);
    -    if (iter == NULL)
    -        goto bail;
    -
    -    if (PyList_Append(rval, open_array))
    -        goto bail;
    -    if (s->indent != Py_None) {
    -        /* TODO: DOES NOT RUN */
    -        indent_level += 1;
    -        /*
    -            newline_indent = '\n' + (_indent * _current_indent_level)
    -            separator = _item_separator + newline_indent
    -            buf += newline_indent
    -        */
    -    }
    -    while ((obj = PyIter_Next(iter))) {
    -        if (i) {
    -            if (PyList_Append(rval, s->item_separator))
    -                goto bail;
    -        }
    -        if (encoder_listencode_obj(s, rval, obj, indent_level))
    -            goto bail;
    -        i++;
    -        Py_CLEAR(obj);
    -    }
    -    Py_CLEAR(iter);
    -    if (PyErr_Occurred())
    -        goto bail;
    -    if (ident != NULL) {
    -        if (PyDict_DelItem(s->markers, ident))
    -            goto bail;
    -        Py_CLEAR(ident);
    -    }
    -    if (s->indent != Py_None) {
    -        /* TODO: DOES NOT RUN */
    -        indent_level -= 1;
    -        /*
    -            yield '\n' + (_indent * _current_indent_level)
    -        */
    -    }
    -    if (PyList_Append(rval, close_array))
    -        goto bail;
    -    return 0;
    -
    -bail:
    -    Py_XDECREF(obj);
    -    Py_XDECREF(iter);
    -    Py_XDECREF(ident);
    -    return -1;
    -}
    -
    -static void
    -encoder_dealloc(PyObject *self)
    -{
    -    /* Deallocate Encoder */
    -    encoder_clear(self);
    -    Py_TYPE(self)->tp_free(self);
    -}
    -
    -static int
    -encoder_traverse(PyObject *self, visitproc visit, void *arg)
    -{
    -    PyEncoderObject *s;
    -    assert(PyEncoder_Check(self));
    -    s = (PyEncoderObject *)self;
    -    Py_VISIT(s->markers);
    -    Py_VISIT(s->defaultfn);
    -    Py_VISIT(s->encoder);
    -    Py_VISIT(s->indent);
    -    Py_VISIT(s->key_separator);
    -    Py_VISIT(s->item_separator);
    -    Py_VISIT(s->sort_keys);
    -    Py_VISIT(s->skipkeys);
    -    Py_VISIT(s->key_memo);
    -    Py_VISIT(s->item_sort_key);
    -    return 0;
    -}
    -
    -static int
    -encoder_clear(PyObject *self)
    -{
    -    /* Deallocate Encoder */
    -    PyEncoderObject *s;
    -    assert(PyEncoder_Check(self));
    -    s = (PyEncoderObject *)self;
    -    Py_CLEAR(s->markers);
    -    Py_CLEAR(s->defaultfn);
    -    Py_CLEAR(s->encoder);
    -    Py_CLEAR(s->indent);
    -    Py_CLEAR(s->key_separator);
    -    Py_CLEAR(s->item_separator);
    -    Py_CLEAR(s->sort_keys);
    -    Py_CLEAR(s->skipkeys);
    -    Py_CLEAR(s->key_memo);
    -    Py_CLEAR(s->item_sort_key);
    -    Py_CLEAR(s->Decimal);
    -    return 0;
    -}
    -
    -PyDoc_STRVAR(encoder_doc, "_iterencode(obj, _current_indent_level) -> iterable");
    -
    -static
    -PyTypeObject PyEncoderType = {
    -    PyObject_HEAD_INIT(NULL)
    -    0,                    /* tp_internal */
    -    "simplejson._speedups.Encoder",       /* tp_name */
    -    sizeof(PyEncoderObject), /* tp_basicsize */
    -    0,                    /* tp_itemsize */
    -    encoder_dealloc, /* tp_dealloc */
    -    0,                    /* tp_print */
    -    0,                    /* tp_getattr */
    -    0,                    /* tp_setattr */
    -    0,                    /* tp_compare */
    -    0,                    /* tp_repr */
    -    0,                    /* tp_as_number */
    -    0,                    /* tp_as_sequence */
    -    0,                    /* tp_as_mapping */
    -    0,                    /* tp_hash */
    -    encoder_call,         /* tp_call */
    -    0,                    /* tp_str */
    -    0,                    /* tp_getattro */
    -    0,                    /* tp_setattro */
    -    0,                    /* tp_as_buffer */
    -    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,   /* tp_flags */
    -    encoder_doc,          /* tp_doc */
    -    encoder_traverse,     /* tp_traverse */
    -    encoder_clear,        /* tp_clear */
    -    0,                    /* tp_richcompare */
    -    0,                    /* tp_weaklistoffset */
    -    0,                    /* tp_iter */
    -    0,                    /* tp_iternext */
    -    0,                    /* tp_methods */
    -    encoder_members,      /* tp_members */
    -    0,                    /* tp_getset */
    -    0,                    /* tp_base */
    -    0,                    /* tp_dict */
    -    0,                    /* tp_descr_get */
    -    0,                    /* tp_descr_set */
    -    0,                    /* tp_dictoffset */
    -    encoder_init,         /* tp_init */
    -    0,                    /* tp_alloc */
    -    encoder_new,          /* tp_new */
    -    0,                    /* tp_free */
    -};
    -
    -static PyMethodDef speedups_methods[] = {
    -    {"encode_basestring_ascii",
    -        (PyCFunction)py_encode_basestring_ascii,
    -        METH_O,
    -        pydoc_encode_basestring_ascii},
    -    {"scanstring",
    -        (PyCFunction)py_scanstring,
    -        METH_VARARGS,
    -        pydoc_scanstring},
    -    {NULL, NULL, 0, NULL}
    -};
    -
    -PyDoc_STRVAR(module_doc,
    -"simplejson speedups\n");
    -
    -void
    -init_speedups(void)
    -{
    -    PyObject *m;
    -    PyScannerType.tp_new = PyType_GenericNew;
    -    if (PyType_Ready(&PyScannerType) < 0)
    -        return;
    -    PyEncoderType.tp_new = PyType_GenericNew;
    -    if (PyType_Ready(&PyEncoderType) < 0)
    -        return;
    -
    -
    -    m = Py_InitModule3("_speedups", speedups_methods, module_doc);
    -    Py_INCREF((PyObject*)&PyScannerType);
    -    PyModule_AddObject(m, "make_scanner", (PyObject*)&PyScannerType);
    -    Py_INCREF((PyObject*)&PyEncoderType);
    -    PyModule_AddObject(m, "make_encoder", (PyObject*)&PyEncoderType);
    -}
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/decoder.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/decoder.py
    deleted file mode 100644
    index 714a733..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/decoder.py
    +++ /dev/null
    @@ -1,425 +0,0 @@
    -"""Implementation of JSONDecoder
    -"""
    -import re
    -import sys
    -import struct
    -
    -from simplejson.scanner import make_scanner
    -def _import_c_scanstring():
    -    try:
    -        from simplejson._speedups import scanstring
    -        return scanstring
    -    except ImportError:
    -        return None
    -c_scanstring = _import_c_scanstring()
    -
    -__all__ = ['JSONDecoder']
    -
    -FLAGS = re.VERBOSE | re.MULTILINE | re.DOTALL
    -
    -def _floatconstants():
    -    _BYTES = '7FF80000000000007FF0000000000000'.decode('hex')
    -    # The struct module in Python 2.4 would get frexp() out of range here
    -    # when an endian is specified in the format string. Fixed in Python 2.5+
    -    if sys.byteorder != 'big':
    -        _BYTES = _BYTES[:8][::-1] + _BYTES[8:][::-1]
    -    nan, inf = struct.unpack('dd', _BYTES)
    -    return nan, inf, -inf
    -
    -NaN, PosInf, NegInf = _floatconstants()
    -
    -
    -class JSONDecodeError(ValueError):
    -    """Subclass of ValueError with the following additional properties:
    -
    -    msg: The unformatted error message
    -    doc: The JSON document being parsed
    -    pos: The start index of doc where parsing failed
    -    end: The end index of doc where parsing failed (may be None)
    -    lineno: The line corresponding to pos
    -    colno: The column corresponding to pos
    -    endlineno: The line corresponding to end (may be None)
    -    endcolno: The column corresponding to end (may be None)
    -
    -    """
    -    def __init__(self, msg, doc, pos, end=None):
    -        ValueError.__init__(self, errmsg(msg, doc, pos, end=end))
    -        self.msg = msg
    -        self.doc = doc
    -        self.pos = pos
    -        self.end = end
    -        self.lineno, self.colno = linecol(doc, pos)
    -        if end is not None:
    -            self.endlineno, self.endcolno = linecol(doc, end)
    -        else:
    -            self.endlineno, self.endcolno = None, None
    -
    -
    -def linecol(doc, pos):
    -    lineno = doc.count('\n', 0, pos) + 1
    -    if lineno == 1:
    -        colno = pos
    -    else:
    -        colno = pos - doc.rindex('\n', 0, pos)
    -    return lineno, colno
    -
    -
    -def errmsg(msg, doc, pos, end=None):
    -    # Note that this function is called from _speedups
    -    lineno, colno = linecol(doc, pos)
    -    if end is None:
    -        #fmt = '{0}: line {1} column {2} (char {3})'
    -        #return fmt.format(msg, lineno, colno, pos)
    -        fmt = '%s: line %d column %d (char %d)'
    -        return fmt % (msg, lineno, colno, pos)
    -    endlineno, endcolno = linecol(doc, end)
    -    #fmt = '{0}: line {1} column {2} - line {3} column {4} (char {5} - {6})'
    -    #return fmt.format(msg, lineno, colno, endlineno, endcolno, pos, end)
    -    fmt = '%s: line %d column %d - line %d column %d (char %d - %d)'
    -    return fmt % (msg, lineno, colno, endlineno, endcolno, pos, end)
    -
    -
    -_CONSTANTS = {
    -    '-Infinity': NegInf,
    -    'Infinity': PosInf,
    -    'NaN': NaN,
    -}
    -
    -STRINGCHUNK = re.compile(r'(.*?)(["\\\x00-\x1f])', FLAGS)
    -BACKSLASH = {
    -    '"': u'"', '\\': u'\\', '/': u'/',
    -    'b': u'\b', 'f': u'\f', 'n': u'\n', 'r': u'\r', 't': u'\t',
    -}
    -
    -DEFAULT_ENCODING = "utf-8"
    -
    -def py_scanstring(s, end, encoding=None, strict=True,
    -        _b=BACKSLASH, _m=STRINGCHUNK.match):
    -    """Scan the string s for a JSON string. End is the index of the
    -    character in s after the quote that started the JSON string.
    -    Unescapes all valid JSON string escape sequences and raises ValueError
    -    on attempt to decode an invalid string. If strict is False then literal
    -    control characters are allowed in the string.
    -
    -    Returns a tuple of the decoded string and the index of the character in s
    -    after the end quote."""
    -    if encoding is None:
    -        encoding = DEFAULT_ENCODING
    -    chunks = []
    -    _append = chunks.append
    -    begin = end - 1
    -    while 1:
    -        chunk = _m(s, end)
    -        if chunk is None:
    -            raise JSONDecodeError(
    -                "Unterminated string starting at", s, begin)
    -        end = chunk.end()
    -        content, terminator = chunk.groups()
    -        # Content is contains zero or more unescaped string characters
    -        if content:
    -            if not isinstance(content, unicode):
    -                content = unicode(content, encoding)
    -            _append(content)
    -        # Terminator is the end of string, a literal control character,
    -        # or a backslash denoting that an escape sequence follows
    -        if terminator == '"':
    -            break
    -        elif terminator != '\\':
    -            if strict:
    -                msg = "Invalid control character %r at" % (terminator,)
    -                #msg = "Invalid control character {0!r} at".format(terminator)
    -                raise JSONDecodeError(msg, s, end)
    -            else:
    -                _append(terminator)
    -                continue
    -        try:
    -            esc = s[end]
    -        except IndexError:
    -            raise JSONDecodeError(
    -                "Unterminated string starting at", s, begin)
    -        # If not a unicode escape sequence, must be in the lookup table
    -        if esc != 'u':
    -            try:
    -                char = _b[esc]
    -            except KeyError:
    -                msg = "Invalid \\escape: " + repr(esc)
    -                raise JSONDecodeError(msg, s, end)
    -            end += 1
    -        else:
    -            # Unicode escape sequence
    -            esc = s[end + 1:end + 5]
    -            next_end = end + 5
    -            if len(esc) != 4:
    -                msg = "Invalid \\uXXXX escape"
    -                raise JSONDecodeError(msg, s, end)
    -            uni = int(esc, 16)
    -            # Check for surrogate pair on UCS-4 systems
    -            if 0xd800 <= uni <= 0xdbff and sys.maxunicode > 65535:
    -                msg = "Invalid \\uXXXX\\uXXXX surrogate pair"
    -                if not s[end + 5:end + 7] == '\\u':
    -                    raise JSONDecodeError(msg, s, end)
    -                esc2 = s[end + 7:end + 11]
    -                if len(esc2) != 4:
    -                    raise JSONDecodeError(msg, s, end)
    -                uni2 = int(esc2, 16)
    -                uni = 0x10000 + (((uni - 0xd800) << 10) | (uni2 - 0xdc00))
    -                next_end += 6
    -            char = unichr(uni)
    -            end = next_end
    -        # Append the unescaped character
    -        _append(char)
    -    return u''.join(chunks), end
    -
    -
    -# Use speedup if available
    -scanstring = c_scanstring or py_scanstring
    -
    -WHITESPACE = re.compile(r'[ \t\n\r]*', FLAGS)
    -WHITESPACE_STR = ' \t\n\r'
    -
    -def JSONObject((s, end), encoding, strict, scan_once, object_hook,
    -        object_pairs_hook, memo=None,
    -        _w=WHITESPACE.match, _ws=WHITESPACE_STR):
    -    # Backwards compatibility
    -    if memo is None:
    -        memo = {}
    -    memo_get = memo.setdefault
    -    pairs = []
    -    # Use a slice to prevent IndexError from being raised, the following
    -    # check will raise a more specific ValueError if the string is empty
    -    nextchar = s[end:end + 1]
    -    # Normally we expect nextchar == '"'
    -    if nextchar != '"':
    -        if nextchar in _ws:
    -            end = _w(s, end).end()
    -            nextchar = s[end:end + 1]
    -        # Trivial empty object
    -        if nextchar == '}':
    -            if object_pairs_hook is not None:
    -                result = object_pairs_hook(pairs)
    -                return result, end + 1
    -            pairs = {}
    -            if object_hook is not None:
    -                pairs = object_hook(pairs)
    -            return pairs, end + 1
    -        elif nextchar != '"':
    -            raise JSONDecodeError(
    -                "Expecting property name enclosed in double quotes",
    -                s, end)
    -    end += 1
    -    while True:
    -        key, end = scanstring(s, end, encoding, strict)
    -        key = memo_get(key, key)
    -
    -        # To skip some function call overhead we optimize the fast paths where
    -        # the JSON key separator is ": " or just ":".
    -        if s[end:end + 1] != ':':
    -            end = _w(s, end).end()
    -            if s[end:end + 1] != ':':
    -                raise JSONDecodeError("Expecting ':' delimiter", s, end)
    -
    -        end += 1
    -
    -        try:
    -            if s[end] in _ws:
    -                end += 1
    -                if s[end] in _ws:
    -                    end = _w(s, end + 1).end()
    -        except IndexError:
    -            pass
    -
    -        try:
    -            value, end = scan_once(s, end)
    -        except StopIteration:
    -            raise JSONDecodeError("Expecting object", s, end)
    -        pairs.append((key, value))
    -
    -        try:
    -            nextchar = s[end]
    -            if nextchar in _ws:
    -                end = _w(s, end + 1).end()
    -                nextchar = s[end]
    -        except IndexError:
    -            nextchar = ''
    -        end += 1
    -
    -        if nextchar == '}':
    -            break
    -        elif nextchar != ',':
    -            raise JSONDecodeError("Expecting ',' delimiter", s, end - 1)
    -
    -        try:
    -            nextchar = s[end]
    -            if nextchar in _ws:
    -                end += 1
    -                nextchar = s[end]
    -                if nextchar in _ws:
    -                    end = _w(s, end + 1).end()
    -                    nextchar = s[end]
    -        except IndexError:
    -            nextchar = ''
    -
    -        end += 1
    -        if nextchar != '"':
    -            raise JSONDecodeError(
    -                "Expecting property name enclosed in double quotes",
    -                s, end - 1)
    -
    -    if object_pairs_hook is not None:
    -        result = object_pairs_hook(pairs)
    -        return result, end
    -    pairs = dict(pairs)
    -    if object_hook is not None:
    -        pairs = object_hook(pairs)
    -    return pairs, end
    -
    -def JSONArray((s, end), scan_once, _w=WHITESPACE.match, _ws=WHITESPACE_STR):
    -    values = []
    -    nextchar = s[end:end + 1]
    -    if nextchar in _ws:
    -        end = _w(s, end + 1).end()
    -        nextchar = s[end:end + 1]
    -    # Look-ahead for trivial empty array
    -    if nextchar == ']':
    -        return values, end + 1
    -    _append = values.append
    -    while True:
    -        try:
    -            value, end = scan_once(s, end)
    -        except StopIteration:
    -            raise JSONDecodeError("Expecting object", s, end)
    -        _append(value)
    -        nextchar = s[end:end + 1]
    -        if nextchar in _ws:
    -            end = _w(s, end + 1).end()
    -            nextchar = s[end:end + 1]
    -        end += 1
    -        if nextchar == ']':
    -            break
    -        elif nextchar != ',':
    -            raise JSONDecodeError("Expecting ',' delimiter", s, end)
    -
    -        try:
    -            if s[end] in _ws:
    -                end += 1
    -                if s[end] in _ws:
    -                    end = _w(s, end + 1).end()
    -        except IndexError:
    -            pass
    -
    -    return values, end
    -
    -class JSONDecoder(object):
    -    """Simple JSON  decoder
    -
    -    Performs the following translations in decoding by default:
    -
    -    +---------------+-------------------+
    -    | JSON          | Python            |
    -    +===============+===================+
    -    | object        | dict              |
    -    +---------------+-------------------+
    -    | array         | list              |
    -    +---------------+-------------------+
    -    | string        | unicode           |
    -    +---------------+-------------------+
    -    | number (int)  | int, long         |
    -    +---------------+-------------------+
    -    | number (real) | float             |
    -    +---------------+-------------------+
    -    | true          | True              |
    -    +---------------+-------------------+
    -    | false         | False             |
    -    +---------------+-------------------+
    -    | null          | None              |
    -    +---------------+-------------------+
    -
    -    It also understands ``NaN``, ``Infinity``, and ``-Infinity`` as
    -    their corresponding ``float`` values, which is outside the JSON spec.
    -
    -    """
    -
    -    def __init__(self, encoding=None, object_hook=None, parse_float=None,
    -            parse_int=None, parse_constant=None, strict=True,
    -            object_pairs_hook=None):
    -        """
    -        *encoding* determines the encoding used to interpret any
    -        :class:`str` objects decoded by this instance (``'utf-8'`` by
    -        default).  It has no effect when decoding :class:`unicode` objects.
    -
    -        Note that currently only encodings that are a superset of ASCII work,
    -        strings of other encodings should be passed in as :class:`unicode`.
    -
    -        *object_hook*, if specified, will be called with the result of every
    -        JSON object decoded and its return value will be used in place of the
    -        given :class:`dict`.  This can be used to provide custom
    -        deserializations (e.g. to support JSON-RPC class hinting).
    -
    -        *object_pairs_hook* is an optional function that will be called with
    -        the result of any object literal decode with an ordered list of pairs.
    -        The return value of *object_pairs_hook* will be used instead of the
    -        :class:`dict`.  This feature can be used to implement custom decoders
    -        that rely on the order that the key and value pairs are decoded (for
    -        example, :func:`collections.OrderedDict` will remember the order of
    -        insertion). If *object_hook* is also defined, the *object_pairs_hook*
    -        takes priority.
    -
    -        *parse_float*, if specified, will be called with the string of every
    -        JSON float to be decoded.  By default, this is equivalent to
    -        ``float(num_str)``. This can be used to use another datatype or parser
    -        for JSON floats (e.g. :class:`decimal.Decimal`).
    -
    -        *parse_int*, if specified, will be called with the string of every
    -        JSON int to be decoded.  By default, this is equivalent to
    -        ``int(num_str)``.  This can be used to use another datatype or parser
    -        for JSON integers (e.g. :class:`float`).
    -
    -        *parse_constant*, if specified, will be called with one of the
    -        following strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``.  This
    -        can be used to raise an exception if invalid JSON numbers are
    -        encountered.
    -
    -        *strict* controls the parser's behavior when it encounters an
    -        invalid control character in a string. The default setting of
    -        ``True`` means that unescaped control characters are parse errors, if
    -        ``False`` then control characters will be allowed in strings.
    -
    -        """
    -        self.encoding = encoding
    -        self.object_hook = object_hook
    -        self.object_pairs_hook = object_pairs_hook
    -        self.parse_float = parse_float or float
    -        self.parse_int = parse_int or int
    -        self.parse_constant = parse_constant or _CONSTANTS.__getitem__
    -        self.strict = strict
    -        self.parse_object = JSONObject
    -        self.parse_array = JSONArray
    -        self.parse_string = scanstring
    -        self.memo = {}
    -        self.scan_once = make_scanner(self)
    -
    -    def decode(self, s, _w=WHITESPACE.match):
    -        """Return the Python representation of ``s`` (a ``str`` or ``unicode``
    -        instance containing a JSON document)
    -
    -        """
    -        obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    -        end = _w(s, end).end()
    -        if end != len(s):
    -            raise JSONDecodeError("Extra data", s, end, len(s))
    -        return obj
    -
    -    def raw_decode(self, s, idx=0):
    -        """Decode a JSON document from ``s`` (a ``str`` or ``unicode``
    -        beginning with a JSON document) and return a 2-tuple of the Python
    -        representation and the index in ``s`` where the document ended.
    -
    -        This can be used to decode a JSON document from a string that may
    -        have extraneous data at the end.
    -
    -        """
    -        try:
    -            obj, end = self.scan_once(s, idx)
    -        except StopIteration:
    -            raise JSONDecodeError("No JSON object could be decoded", s, idx)
    -        return obj, end
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/encoder.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/encoder.py
    deleted file mode 100644
    index 6b4a6a4..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/encoder.py
    +++ /dev/null
    @@ -1,567 +0,0 @@
    -"""Implementation of JSONEncoder
    -"""
    -import re
    -from decimal import Decimal
    -
    -def _import_speedups():
    -    try:
    -        from simplejson import _speedups
    -        return _speedups.encode_basestring_ascii, _speedups.make_encoder
    -    except ImportError:
    -        return None, None
    -c_encode_basestring_ascii, c_make_encoder = _import_speedups()
    -
    -from simplejson.decoder import PosInf
    -
    -ESCAPE = re.compile(ur'[\x00-\x1f\\"\b\f\n\r\t\u2028\u2029]')
    -ESCAPE_ASCII = re.compile(r'([\\"]|[^\ -~])')
    -HAS_UTF8 = re.compile(r'[\x80-\xff]')
    -ESCAPE_DCT = {
    -    '\\': '\\\\',
    -    '"': '\\"',
    -    '\b': '\\b',
    -    '\f': '\\f',
    -    '\n': '\\n',
    -    '\r': '\\r',
    -    '\t': '\\t',
    -    u'\u2028': '\\u2028',
    -    u'\u2029': '\\u2029',
    -}
    -for i in range(0x20):
    -    #ESCAPE_DCT.setdefault(chr(i), '\\u{0:04x}'.format(i))
    -    ESCAPE_DCT.setdefault(chr(i), '\\u%04x' % (i,))
    -
    -FLOAT_REPR = repr
    -
    -def encode_basestring(s):
    -    """Return a JSON representation of a Python string
    -
    -    """
    -    if isinstance(s, str) and HAS_UTF8.search(s) is not None:
    -        s = s.decode('utf-8')
    -    def replace(match):
    -        return ESCAPE_DCT[match.group(0)]
    -    return u'"' + ESCAPE.sub(replace, s) + u'"'
    -
    -
    -def py_encode_basestring_ascii(s):
    -    """Return an ASCII-only JSON representation of a Python string
    -
    -    """
    -    if isinstance(s, str) and HAS_UTF8.search(s) is not None:
    -        s = s.decode('utf-8')
    -    def replace(match):
    -        s = match.group(0)
    -        try:
    -            return ESCAPE_DCT[s]
    -        except KeyError:
    -            n = ord(s)
    -            if n < 0x10000:
    -                #return '\\u{0:04x}'.format(n)
    -                return '\\u%04x' % (n,)
    -            else:
    -                # surrogate pair
    -                n -= 0x10000
    -                s1 = 0xd800 | ((n >> 10) & 0x3ff)
    -                s2 = 0xdc00 | (n & 0x3ff)
    -                #return '\\u{0:04x}\\u{1:04x}'.format(s1, s2)
    -                return '\\u%04x\\u%04x' % (s1, s2)
    -    return '"' + str(ESCAPE_ASCII.sub(replace, s)) + '"'
    -
    -
    -encode_basestring_ascii = (
    -    c_encode_basestring_ascii or py_encode_basestring_ascii)
    -
    -class JSONEncoder(object):
    -    """Extensible JSON  encoder for Python data structures.
    -
    -    Supports the following objects and types by default:
    -
    -    +-------------------+---------------+
    -    | Python            | JSON          |
    -    +===================+===============+
    -    | dict, namedtuple  | object        |
    -    +-------------------+---------------+
    -    | list, tuple       | array         |
    -    +-------------------+---------------+
    -    | str, unicode      | string        |
    -    +-------------------+---------------+
    -    | int, long, float  | number        |
    -    +-------------------+---------------+
    -    | True              | true          |
    -    +-------------------+---------------+
    -    | False             | false         |
    -    +-------------------+---------------+
    -    | None              | null          |
    -    +-------------------+---------------+
    -
    -    To extend this to recognize other objects, subclass and implement a
    -    ``.default()`` method with another method that returns a serializable
    -    object for ``o`` if possible, otherwise it should call the superclass
    -    implementation (to raise ``TypeError``).
    -
    -    """
    -    item_separator = ', '
    -    key_separator = ': '
    -    def __init__(self, skipkeys=False, ensure_ascii=True,
    -            check_circular=True, allow_nan=True, sort_keys=False,
    -            indent=None, separators=None, encoding='utf-8', default=None,
    -            use_decimal=True, namedtuple_as_object=True,
    -            tuple_as_array=True, bigint_as_string=False,
    -            item_sort_key=None):
    -        """Constructor for JSONEncoder, with sensible defaults.
    -
    -        If skipkeys is false, then it is a TypeError to attempt
    -        encoding of keys that are not str, int, long, float or None.  If
    -        skipkeys is True, such items are simply skipped.
    -
    -        If ensure_ascii is true, the output is guaranteed to be str
    -        objects with all incoming unicode characters escaped.  If
    -        ensure_ascii is false, the output will be unicode object.
    -
    -        If check_circular is true, then lists, dicts, and custom encoded
    -        objects will be checked for circular references during encoding to
    -        prevent an infinite recursion (which would cause an OverflowError).
    -        Otherwise, no such check takes place.
    -
    -        If allow_nan is true, then NaN, Infinity, and -Infinity will be
    -        encoded as such.  This behavior is not JSON specification compliant,
    -        but is consistent with most JavaScript based encoders and decoders.
    -        Otherwise, it will be a ValueError to encode such floats.
    -
    -        If sort_keys is true, then the output of dictionaries will be
    -        sorted by key; this is useful for regression tests to ensure
    -        that JSON serializations can be compared on a day-to-day basis.
    -
    -        If indent is a string, then JSON array elements and object members
    -        will be pretty-printed with a newline followed by that string repeated
    -        for each level of nesting. ``None`` (the default) selects the most compact
    -        representation without any newlines. For backwards compatibility with
    -        versions of simplejson earlier than 2.1.0, an integer is also accepted
    -        and is converted to a string with that many spaces.
    -
    -        If specified, separators should be a (item_separator, key_separator)
    -        tuple.  The default is (', ', ': ').  To get the most compact JSON
    -        representation you should specify (',', ':') to eliminate whitespace.
    -
    -        If specified, default is a function that gets called for objects
    -        that can't otherwise be serialized.  It should return a JSON encodable
    -        version of the object or raise a ``TypeError``.
    -
    -        If encoding is not None, then all input strings will be
    -        transformed into unicode using that encoding prior to JSON-encoding.
    -        The default is UTF-8.
    -
    -        If use_decimal is true (not the default), ``decimal.Decimal`` will
    -        be supported directly by the encoder. For the inverse, decode JSON
    -        with ``parse_float=decimal.Decimal``.
    -
    -        If namedtuple_as_object is true (the default), objects with
    -        ``_asdict()`` methods will be encoded as JSON objects.
    -
    -        If tuple_as_array is true (the default), tuple (and subclasses) will
    -        be encoded as JSON arrays.
    -
    -        If bigint_as_string is true (not the default), ints 2**53 and higher
    -        or lower than -2**53 will be encoded as strings. This is to avoid the
    -        rounding that happens in Javascript otherwise.
    -
    -        If specified, item_sort_key is a callable used to sort the items in
    -        each dictionary. This is useful if you want to sort items other than
    -        in alphabetical order by key.
    -        """
    -
    -        self.skipkeys = skipkeys
    -        self.ensure_ascii = ensure_ascii
    -        self.check_circular = check_circular
    -        self.allow_nan = allow_nan
    -        self.sort_keys = sort_keys
    -        self.use_decimal = use_decimal
    -        self.namedtuple_as_object = namedtuple_as_object
    -        self.tuple_as_array = tuple_as_array
    -        self.bigint_as_string = bigint_as_string
    -        self.item_sort_key = item_sort_key
    -        if indent is not None and not isinstance(indent, basestring):
    -            indent = indent * ' '
    -        self.indent = indent
    -        if separators is not None:
    -            self.item_separator, self.key_separator = separators
    -        elif indent is not None:
    -            self.item_separator = ','
    -        if default is not None:
    -            self.default = default
    -        self.encoding = encoding
    -
    -    def default(self, o):
    -        """Implement this method in a subclass such that it returns
    -        a serializable object for ``o``, or calls the base implementation
    -        (to raise a ``TypeError``).
    -
    -        For example, to support arbitrary iterators, you could
    -        implement default like this::
    -
    -            def default(self, o):
    -                try:
    -                    iterable = iter(o)
    -                except TypeError:
    -                    pass
    -                else:
    -                    return list(iterable)
    -                return JSONEncoder.default(self, o)
    -
    -        """
    -        raise TypeError(repr(o) + " is not JSON serializable")
    -
    -    def encode(self, o):
    -        """Return a JSON string representation of a Python data structure.
    -
    -        >>> from simplejson import JSONEncoder
    -        >>> JSONEncoder().encode({"foo": ["bar", "baz"]})
    -        '{"foo": ["bar", "baz"]}'
    -
    -        """
    -        # This is for extremely simple cases and benchmarks.
    -        if isinstance(o, basestring):
    -            if isinstance(o, str):
    -                _encoding = self.encoding
    -                if (_encoding is not None
    -                        and not (_encoding == 'utf-8')):
    -                    o = o.decode(_encoding)
    -            if self.ensure_ascii:
    -                return encode_basestring_ascii(o)
    -            else:
    -                return encode_basestring(o)
    -        # This doesn't pass the iterator directly to ''.join() because the
    -        # exceptions aren't as detailed.  The list call should be roughly
    -        # equivalent to the PySequence_Fast that ''.join() would do.
    -        chunks = self.iterencode(o, _one_shot=True)
    -        if not isinstance(chunks, (list, tuple)):
    -            chunks = list(chunks)
    -        if self.ensure_ascii:
    -            return ''.join(chunks)
    -        else:
    -            return u''.join(chunks)
    -
    -    def iterencode(self, o, _one_shot=False):
    -        """Encode the given object and yield each string
    -        representation as available.
    -
    -        For example::
    -
    -            for chunk in JSONEncoder().iterencode(bigobject):
    -                mysocket.write(chunk)
    -
    -        """
    -        if self.check_circular:
    -            markers = {}
    -        else:
    -            markers = None
    -        if self.ensure_ascii:
    -            _encoder = encode_basestring_ascii
    -        else:
    -            _encoder = encode_basestring
    -        if self.encoding != 'utf-8':
    -            def _encoder(o, _orig_encoder=_encoder, _encoding=self.encoding):
    -                if isinstance(o, str):
    -                    o = o.decode(_encoding)
    -                return _orig_encoder(o)
    -
    -        def floatstr(o, allow_nan=self.allow_nan,
    -                _repr=FLOAT_REPR, _inf=PosInf, _neginf=-PosInf):
    -            # Check for specials. Note that this type of test is processor
    -            # and/or platform-specific, so do tests which don't depend on
    -            # the internals.
    -
    -            if o != o:
    -                text = 'NaN'
    -            elif o == _inf:
    -                text = 'Infinity'
    -            elif o == _neginf:
    -                text = '-Infinity'
    -            else:
    -                return _repr(o)
    -
    -            if not allow_nan:
    -                raise ValueError(
    -                    "Out of range float values are not JSON compliant: " +
    -                    repr(o))
    -
    -            return text
    -
    -
    -        key_memo = {}
    -        if (_one_shot and c_make_encoder is not None
    -                and self.indent is None):
    -            _iterencode = c_make_encoder(
    -                markers, self.default, _encoder, self.indent,
    -                self.key_separator, self.item_separator, self.sort_keys,
    -                self.skipkeys, self.allow_nan, key_memo, self.use_decimal,
    -                self.namedtuple_as_object, self.tuple_as_array,
    -                self.bigint_as_string, self.item_sort_key,
    -                Decimal)
    -        else:
    -            _iterencode = _make_iterencode(
    -                markers, self.default, _encoder, self.indent, floatstr,
    -                self.key_separator, self.item_separator, self.sort_keys,
    -                self.skipkeys, _one_shot, self.use_decimal,
    -                self.namedtuple_as_object, self.tuple_as_array,
    -                self.bigint_as_string, self.item_sort_key,
    -                Decimal=Decimal)
    -        try:
    -            return _iterencode(o, 0)
    -        finally:
    -            key_memo.clear()
    -
    -
    -class JSONEncoderForHTML(JSONEncoder):
    -    """An encoder that produces JSON safe to embed in HTML.
    -
    -    To embed JSON content in, say, a script tag on a web page, the
    -    characters &, < and > should be escaped. They cannot be escaped
    -    with the usual entities (e.g. &) because they are not expanded
    -    within '
    -        self.assertEqual(
    -            r'"\u003c/script\u003e\u003cscript\u003e'
    -            r'alert(\"gotcha\")\u003c/script\u003e"',
    -            self.encoder.encode(bad_string))
    -        self.assertEqual(
    -            bad_string, self.decoder.decode(
    -                self.encoder.encode(bad_string)))
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_errors.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_errors.py
    deleted file mode 100644
    index 620ccf3..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_errors.py
    +++ /dev/null
    @@ -1,34 +0,0 @@
    -from unittest import TestCase
    -
    -import simplejson as json
    -
    -class TestErrors(TestCase):
    -    def test_string_keys_error(self):
    -        data = [{'a': 'A', 'b': (2, 4), 'c': 3.0, ('d',): 'D tuple'}]
    -        self.assertRaises(TypeError, json.dumps, data)
    -
    -    def test_decode_error(self):
    -        err = None
    -        try:
    -            json.loads('{}\na\nb')
    -        except json.JSONDecodeError, e:
    -            err = e
    -        else:
    -            self.fail('Expected JSONDecodeError')
    -        self.assertEquals(err.lineno, 2)
    -        self.assertEquals(err.colno, 1)
    -        self.assertEquals(err.endlineno, 3)
    -        self.assertEquals(err.endcolno, 2)
    -
    -    def test_scan_error(self):
    -        err = None
    -        for t in (str, unicode):
    -            try:
    -                json.loads(t('{"asdf": "'))
    -            except json.JSONDecodeError, e:
    -                err = e
    -            else:
    -                self.fail('Expected JSONDecodeError')
    -            self.assertEquals(err.lineno, 1)
    -            self.assertEquals(err.colno, 9)
    -        
    \ No newline at end of file
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_fail.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_fail.py
    deleted file mode 100644
    index 646c0f4..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_fail.py
    +++ /dev/null
    @@ -1,91 +0,0 @@
    -from unittest import TestCase
    -
    -import simplejson as json
    -
    -# Fri Dec 30 18:57:26 2005
    -JSONDOCS = [
    -    # http://json.org/JSON_checker/test/fail1.json
    -    '"A JSON payload should be an object or array, not a string."',
    -    # http://json.org/JSON_checker/test/fail2.json
    -    '["Unclosed array"',
    -    # http://json.org/JSON_checker/test/fail3.json
    -    '{unquoted_key: "keys must be quoted}',
    -    # http://json.org/JSON_checker/test/fail4.json
    -    '["extra comma",]',
    -    # http://json.org/JSON_checker/test/fail5.json
    -    '["double extra comma",,]',
    -    # http://json.org/JSON_checker/test/fail6.json
    -    '[   , "<-- missing value"]',
    -    # http://json.org/JSON_checker/test/fail7.json
    -    '["Comma after the close"],',
    -    # http://json.org/JSON_checker/test/fail8.json
    -    '["Extra close"]]',
    -    # http://json.org/JSON_checker/test/fail9.json
    -    '{"Extra comma": true,}',
    -    # http://json.org/JSON_checker/test/fail10.json
    -    '{"Extra value after close": true} "misplaced quoted value"',
    -    # http://json.org/JSON_checker/test/fail11.json
    -    '{"Illegal expression": 1 + 2}',
    -    # http://json.org/JSON_checker/test/fail12.json
    -    '{"Illegal invocation": alert()}',
    -    # http://json.org/JSON_checker/test/fail13.json
    -    '{"Numbers cannot have leading zeroes": 013}',
    -    # http://json.org/JSON_checker/test/fail14.json
    -    '{"Numbers cannot be hex": 0x14}',
    -    # http://json.org/JSON_checker/test/fail15.json
    -    '["Illegal backslash escape: \\x15"]',
    -    # http://json.org/JSON_checker/test/fail16.json
    -    '["Illegal backslash escape: \\\'"]',
    -    # http://json.org/JSON_checker/test/fail17.json
    -    '["Illegal backslash escape: \\017"]',
    -    # http://json.org/JSON_checker/test/fail18.json
    -    '[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]',
    -    # http://json.org/JSON_checker/test/fail19.json
    -    '{"Missing colon" null}',
    -    # http://json.org/JSON_checker/test/fail20.json
    -    '{"Double colon":: null}',
    -    # http://json.org/JSON_checker/test/fail21.json
    -    '{"Comma instead of colon", null}',
    -    # http://json.org/JSON_checker/test/fail22.json
    -    '["Colon instead of comma": false]',
    -    # http://json.org/JSON_checker/test/fail23.json
    -    '["Bad value", truth]',
    -    # http://json.org/JSON_checker/test/fail24.json
    -    "['single quote']",
    -    # http://code.google.com/p/simplejson/issues/detail?id=3
    -    u'["A\u001FZ control characters in string"]',
    -]
    -
    -SKIPS = {
    -    1: "why not have a string payload?",
    -    18: "spec doesn't specify any nesting limitations",
    -}
    -
    -class TestFail(TestCase):
    -    def test_failures(self):
    -        for idx, doc in enumerate(JSONDOCS):
    -            idx = idx + 1
    -            if idx in SKIPS:
    -                json.loads(doc)
    -                continue
    -            try:
    -                json.loads(doc)
    -            except json.JSONDecodeError:
    -                pass
    -            else:
    -                #self.fail("Expected failure for fail{0}.json: {1!r}".format(idx, doc))
    -                self.fail("Expected failure for fail%d.json: %r" % (idx, doc))
    -
    -    def test_array_decoder_issue46(self):
    -        # http://code.google.com/p/simplejson/issues/detail?id=46
    -        for doc in [u'[,]', '[,]']:
    -            try:
    -                json.loads(doc)
    -            except json.JSONDecodeError, e:
    -                self.assertEquals(e.pos, 1)
    -                self.assertEquals(e.lineno, 1)
    -                self.assertEquals(e.colno, 1)
    -            except Exception, e:
    -                self.fail("Unexpected exception raised %r %s" % (e, e))
    -            else:
    -                self.fail("Unexpected success parsing '[,]'")
    \ No newline at end of file
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_float.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_float.py
    deleted file mode 100644
    index 94502c6..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_float.py
    +++ /dev/null
    @@ -1,19 +0,0 @@
    -import math
    -from unittest import TestCase
    -
    -import simplejson as json
    -
    -class TestFloat(TestCase):
    -    def test_floats(self):
    -        for num in [1617161771.7650001, math.pi, math.pi**100,
    -                    math.pi**-100, 3.1]:
    -            self.assertEquals(float(json.dumps(num)), num)
    -            self.assertEquals(json.loads(json.dumps(num)), num)
    -            self.assertEquals(json.loads(unicode(json.dumps(num))), num)
    -
    -    def test_ints(self):
    -        for num in [1, 1L, 1<<32, 1<<64]:
    -            self.assertEquals(json.dumps(num), str(num))
    -            self.assertEquals(int(json.dumps(num)), num)
    -            self.assertEquals(json.loads(json.dumps(num)), num)
    -            self.assertEquals(json.loads(unicode(json.dumps(num))), num)
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_indent.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_indent.py
    deleted file mode 100644
    index 1e6bdb1..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_indent.py
    +++ /dev/null
    @@ -1,86 +0,0 @@
    -from unittest import TestCase
    -
    -import simplejson as json
    -import textwrap
    -from StringIO import StringIO
    -
    -class TestIndent(TestCase):
    -    def test_indent(self):
    -        h = [['blorpie'], ['whoops'], [], 'd-shtaeou', 'd-nthiouh',
    -             'i-vhbjkhnth',
    -             {'nifty': 87}, {'field': 'yes', 'morefield': False} ]
    -
    -        expect = textwrap.dedent("""\
    -        [
    -        \t[
    -        \t\t"blorpie"
    -        \t],
    -        \t[
    -        \t\t"whoops"
    -        \t],
    -        \t[],
    -        \t"d-shtaeou",
    -        \t"d-nthiouh",
    -        \t"i-vhbjkhnth",
    -        \t{
    -        \t\t"nifty": 87
    -        \t},
    -        \t{
    -        \t\t"field": "yes",
    -        \t\t"morefield": false
    -        \t}
    -        ]""")
    -
    -
    -        d1 = json.dumps(h)
    -        d2 = json.dumps(h, indent='\t', sort_keys=True, separators=(',', ': '))
    -        d3 = json.dumps(h, indent='  ', sort_keys=True, separators=(',', ': '))
    -        d4 = json.dumps(h, indent=2, sort_keys=True, separators=(',', ': '))
    -
    -        h1 = json.loads(d1)
    -        h2 = json.loads(d2)
    -        h3 = json.loads(d3)
    -        h4 = json.loads(d4)
    -
    -        self.assertEquals(h1, h)
    -        self.assertEquals(h2, h)
    -        self.assertEquals(h3, h)
    -        self.assertEquals(h4, h)
    -        self.assertEquals(d3, expect.replace('\t', '  '))
    -        self.assertEquals(d4, expect.replace('\t', '  '))
    -        # NOTE: Python 2.4 textwrap.dedent converts tabs to spaces,
    -        #       so the following is expected to fail. Python 2.4 is not a
    -        #       supported platform in simplejson 2.1.0+.
    -        self.assertEquals(d2, expect)
    -
    -    def test_indent0(self):
    -        h = {3: 1}
    -        def check(indent, expected):
    -            d1 = json.dumps(h, indent=indent)
    -            self.assertEquals(d1, expected)
    -
    -            sio = StringIO()
    -            json.dump(h, sio, indent=indent)
    -            self.assertEquals(sio.getvalue(), expected)
    -
    -        # indent=0 should emit newlines
    -        check(0, '{\n"3": 1\n}')
    -        # indent=None is more compact
    -        check(None, '{"3": 1}')
    -
    -    def test_separators(self):
    -        lst = [1,2,3,4]
    -        expect = '[\n1,\n2,\n3,\n4\n]'
    -        expect_spaces = '[\n1, \n2, \n3, \n4\n]'
    -        # Ensure that separators still works
    -        self.assertEquals(
    -            expect_spaces,
    -            json.dumps(lst, indent=0, separators=(', ', ': ')))
    -        # Force the new defaults
    -        self.assertEquals(
    -            expect,
    -            json.dumps(lst, indent=0, separators=(',', ': ')))
    -        # Added in 2.1.4
    -        self.assertEquals(
    -            expect,
    -            json.dumps(lst, indent=0))
    \ No newline at end of file
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_item_sort_key.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_item_sort_key.py
    deleted file mode 100644
    index 83bea1e..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_item_sort_key.py
    +++ /dev/null
    @@ -1,20 +0,0 @@
    -from unittest import TestCase
    -
    -import simplejson as json
    -from operator import itemgetter
    -
    -class TestItemSortKey(TestCase):
    -    def test_simple_first(self):
    -        a = {'a': 1, 'c': 5, 'jack': 'jill', 'pick': 'axe', 'array': [1, 5, 6, 9], 'tuple': (83, 12, 3), 'crate': 'dog', 'zeak': 'oh'}
    -        self.assertEquals(
    -            '{"a": 1, "c": 5, "crate": "dog", "jack": "jill", "pick": "axe", "zeak": "oh", "array": [1, 5, 6, 9], "tuple": [83, 12, 3]}',
    -            json.dumps(a, item_sort_key=json.simple_first))
    -
    -    def test_case(self):
    -        a = {'a': 1, 'c': 5, 'Jack': 'jill', 'pick': 'axe', 'Array': [1, 5, 6, 9], 'tuple': (83, 12, 3), 'crate': 'dog', 'zeak': 'oh'}
    -        self.assertEquals(
    -            '{"Array": [1, 5, 6, 9], "Jack": "jill", "a": 1, "c": 5, "crate": "dog", "pick": "axe", "tuple": [83, 12, 3], "zeak": "oh"}',
    -            json.dumps(a, item_sort_key=itemgetter(0)))
    -        self.assertEquals(
    -            '{"a": 1, "Array": [1, 5, 6, 9], "c": 5, "crate": "dog", "Jack": "jill", "pick": "axe", "tuple": [83, 12, 3], "zeak": "oh"}',
    -            json.dumps(a, item_sort_key=lambda kv: kv[0].lower()))
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_namedtuple.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_namedtuple.py
    deleted file mode 100644
    index 54a9a12..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_namedtuple.py
    +++ /dev/null
    @@ -1,121 +0,0 @@
    -import unittest
    -import simplejson as json
    -from StringIO import StringIO
    -
    -try:
    -    from collections import namedtuple
    -except ImportError:
    -    class Value(tuple):
    -        def __new__(cls, *args):
    -            return tuple.__new__(cls, args)
    -
    -        def _asdict(self):
    -            return {'value': self[0]}
    -    class Point(tuple):
    -        def __new__(cls, *args):
    -            return tuple.__new__(cls, args)
    -
    -        def _asdict(self):
    -            return {'x': self[0], 'y': self[1]}
    -else:
    -    Value = namedtuple('Value', ['value'])
    -    Point = namedtuple('Point', ['x', 'y'])
    -
    -class DuckValue(object):
    -    def __init__(self, *args):
    -        self.value = Value(*args)
    -
    -    def _asdict(self):
    -        return self.value._asdict()
    -
    -class DuckPoint(object):
    -    def __init__(self, *args):
    -        self.point = Point(*args)
    -
    -    def _asdict(self):
    -        return self.point._asdict()
    -
    -class DeadDuck(object):
    -    _asdict = None
    -
    -class DeadDict(dict):
    -    _asdict = None
    -
    -CONSTRUCTORS = [
    -    lambda v: v,
    -    lambda v: [v],
    -    lambda v: [{'key': v}],
    -]
    -
    -class TestNamedTuple(unittest.TestCase):
    -    def test_namedtuple_dumps(self):
    -        for v in [Value(1), Point(1, 2), DuckValue(1), DuckPoint(1, 2)]:
    -            d = v._asdict()
    -            self.assertEqual(d, json.loads(json.dumps(v)))
    -            self.assertEqual(
    -                d,
    -                json.loads(json.dumps(v, namedtuple_as_object=True)))
    -            self.assertEqual(d, json.loads(json.dumps(v, tuple_as_array=False)))
    -            self.assertEqual(
    -                d,
    -                json.loads(json.dumps(v, namedtuple_as_object=True,
    -                                      tuple_as_array=False)))
    -
    -    def test_namedtuple_dumps_false(self):
    -        for v in [Value(1), Point(1, 2)]:
    -            l = list(v)
    -            self.assertEqual(
    -                l,
    -                json.loads(json.dumps(v, namedtuple_as_object=False)))
    -            self.assertRaises(TypeError, json.dumps, v,
    -                tuple_as_array=False, namedtuple_as_object=False)
    -
    -    def test_namedtuple_dump(self):
    -        for v in [Value(1), Point(1, 2), DuckValue(1), DuckPoint(1, 2)]:
    -            d = v._asdict()
    -            sio = StringIO()
    -            json.dump(v, sio)
    -            self.assertEqual(d, json.loads(sio.getvalue()))
    -            sio = StringIO()
    -            json.dump(v, sio, namedtuple_as_object=True)
    -            self.assertEqual(
    -                d,
    -                json.loads(sio.getvalue()))
    -            sio = StringIO()
    -            json.dump(v, sio, tuple_as_array=False)
    -            self.assertEqual(d, json.loads(sio.getvalue()))
    -            sio = StringIO()
    -            json.dump(v, sio, namedtuple_as_object=True,
    -                      tuple_as_array=False)
    -            self.assertEqual(
    -                d,
    -                json.loads(sio.getvalue()))
    -
    -    def test_namedtuple_dump_false(self):
    -        for v in [Value(1), Point(1, 2)]:
    -            l = list(v)
    -            sio = StringIO()
    -            json.dump(v, sio, namedtuple_as_object=False)
    -            self.assertEqual(
    -                l,
    -                json.loads(sio.getvalue()))
    -            self.assertRaises(TypeError, json.dump, v, StringIO(),
    -                tuple_as_array=False, namedtuple_as_object=False)
    -
    -    def test_asdict_not_callable_dump(self):
    -        for f in CONSTRUCTORS:
    -            self.assertRaises(TypeError,
    -                json.dump, f(DeadDuck()), StringIO(), namedtuple_as_object=True)
    -            sio = StringIO()
    -            json.dump(f(DeadDict()), sio, namedtuple_as_object=True)
    -            self.assertEqual(
    -                json.dumps(f({})),
    -                sio.getvalue())
    -
    -    def test_asdict_not_callable_dumps(self):
    -        for f in CONSTRUCTORS:
    -            self.assertRaises(TypeError,
    -                json.dumps, f(DeadDuck()), namedtuple_as_object=True)
    -            self.assertEqual(
    -                json.dumps(f({})),
    -                json.dumps(f(DeadDict()), namedtuple_as_object=True))
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_pass1.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_pass1.py
    deleted file mode 100644
    index c3d6302..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_pass1.py
    +++ /dev/null
    @@ -1,76 +0,0 @@
    -from unittest import TestCase
    -
    -import simplejson as json
    -
    -# from http://json.org/JSON_checker/test/pass1.json
    -JSON = r'''
    -[
    -    "JSON Test Pattern pass1",
    -    {"object with 1 member":["array with 1 element"]},
    -    {},
    -    [],
    -    -42,
    -    true,
    -    false,
    -    null,
    -    {
    -        "integer": 1234567890,
    -        "real": -9876.543210,
    -        "e": 0.123456789e-12,
    -        "E": 1.234567890E+34,
    -        "":  23456789012E666,
    -        "zero": 0,
    -        "one": 1,
    -        "space": " ",
    -        "quote": "\"",
    -        "backslash": "\\",
    -        "controls": "\b\f\n\r\t",
    -        "slash": "/ & \/",
    -        "alpha": "abcdefghijklmnopqrstuvwyz",
    -        "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ",
    -        "digit": "0123456789",
    -        "special": "`1~!@#$%^&*()_+-={':[,]}|;.?",
    -        "hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",
    -        "true": true,
    -        "false": false,
    -        "null": null,
    -        "array":[  ],
    -        "object":{  },
    -        "address": "50 St. James Street",
    -        "url": "http://www.JSON.org/",
    -        "comment": "// /*  */": " ",
    -        " s p a c e d " :[1,2 , 3
    -
    -,
    -
    -4 , 5        ,          6           ,7        ],
    -        "compact": [1,2,3,4,5,6,7],
    -        "jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}",
    -        "quotes": "" \u0022 %22 0x22 034 "",
    -        "\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"
    -: "A key can be any string"
    -    },
    -    0.5 ,98.6
    -,
    -99.44
    -,
    -
    -1066
    -
    -
    -,"rosebud"]
    -'''
    -
    -class TestPass1(TestCase):
    -    def test_parse(self):
    -        # test in/out equivalence and parsing
    -        res = json.loads(JSON)
    -        out = json.dumps(res)
    -        self.assertEquals(res, json.loads(out))
    -        try:
    -            json.dumps(res, allow_nan=False)
    -        except ValueError:
    -            pass
    -        else:
    -            self.fail("23456789012E666 should be out of range")
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_pass2.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_pass2.py
    deleted file mode 100644
    index de4ee00..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_pass2.py
    +++ /dev/null
    @@ -1,14 +0,0 @@
    -from unittest import TestCase
    -import simplejson as json
    -
    -# from http://json.org/JSON_checker/test/pass2.json
    -JSON = r'''
    -[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]]
    -'''
    -
    -class TestPass2(TestCase):
    -    def test_parse(self):
    -        # test in/out equivalence and parsing
    -        res = json.loads(JSON)
    -        out = json.dumps(res)
    -        self.assertEquals(res, json.loads(out))
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_pass3.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_pass3.py
    deleted file mode 100644
    index f591aba..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_pass3.py
    +++ /dev/null
    @@ -1,20 +0,0 @@
    -from unittest import TestCase
    -
    -import simplejson as json
    -
    -# from http://json.org/JSON_checker/test/pass3.json
    -JSON = r'''
    -{
    -    "JSON Test Pattern pass3": {
    -        "The outermost value": "must be an object or array.",
    -        "In this test": "It is an object."
    -    }
    -}
    -'''
    -
    -class TestPass3(TestCase):
    -    def test_parse(self):
    -        # test in/out equivalence and parsing
    -        res = json.loads(JSON)
    -        out = json.dumps(res)
    -        self.assertEquals(res, json.loads(out))
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_recursion.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_recursion.py
    deleted file mode 100644
    index 83a1d88..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_recursion.py
    +++ /dev/null
    @@ -1,67 +0,0 @@
    -from unittest import TestCase
    -
    -import simplejson as json
    -
    -class JSONTestObject:
    -    pass
    -
    -
    -class RecursiveJSONEncoder(json.JSONEncoder):
    -    recurse = False
    -    def default(self, o):
    -        if o is JSONTestObject:
    -            if self.recurse:
    -                return [JSONTestObject]
    -            else:
    -                return 'JSONTestObject'
    -        return json.JSONEncoder.default(o)
    -
    -
    -class TestRecursion(TestCase):
    -    def test_listrecursion(self):
    -        x = []
    -        x.append(x)
    -        try:
    -            json.dumps(x)
    -        except ValueError:
    -            pass
    -        else:
    -            self.fail("didn't raise ValueError on list recursion")
    -        x = []
    -        y = [x]
    -        x.append(y)
    -        try:
    -            json.dumps(x)
    -        except ValueError:
    -            pass
    -        else:
    -            self.fail("didn't raise ValueError on alternating list recursion")
    -        y = []
    -        x = [y, y]
    -        # ensure that the marker is cleared
    -        json.dumps(x)
    -
    -    def test_dictrecursion(self):
    -        x = {}
    -        x["test"] = x
    -        try:
    -            json.dumps(x)
    -        except ValueError:
    -            pass
    -        else:
    -            self.fail("didn't raise ValueError on dict recursion")
    -        x = {}
    -        y = {"a": x, "b": x}
    -        # ensure that the marker is cleared
    -        json.dumps(y)
    -
    -    def test_defaultrecursion(self):
    -        enc = RecursiveJSONEncoder()
    -        self.assertEquals(enc.encode(JSONTestObject), '"JSONTestObject"')
    -        enc.recurse = True
    -        try:
    -            enc.encode(JSONTestObject)
    -        except ValueError:
    -            pass
    -        else:
    -            self.fail("didn't raise ValueError on default recursion")
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_scanstring.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_scanstring.py
    deleted file mode 100644
    index a7fcd46..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_scanstring.py
    +++ /dev/null
    @@ -1,117 +0,0 @@
    -import sys
    -from unittest import TestCase
    -
    -import simplejson as json
    -import simplejson.decoder
    -
    -class TestScanString(TestCase):
    -    def test_py_scanstring(self):
    -        self._test_scanstring(simplejson.decoder.py_scanstring)
    -
    -    def test_c_scanstring(self):
    -        if not simplejson.decoder.c_scanstring:
    -            return
    -        self._test_scanstring(simplejson.decoder.c_scanstring)
    -
    -    def _test_scanstring(self, scanstring):
    -        self.assertEquals(
    -            scanstring('"z\\ud834\\udd20x"', 1, None, True),
    -            (u'z\U0001d120x', 16))
    -
    -        if sys.maxunicode == 65535:
    -            self.assertEquals(
    -                scanstring(u'"z\U0001d120x"', 1, None, True),
    -                (u'z\U0001d120x', 6))
    -        else:
    -            self.assertEquals(
    -                scanstring(u'"z\U0001d120x"', 1, None, True),
    -                (u'z\U0001d120x', 5))
    -
    -        self.assertEquals(
    -            scanstring('"\\u007b"', 1, None, True),
    -            (u'{', 8))
    -
    -        self.assertEquals(
    -            scanstring('"A JSON payload should be an object or array, not a string."', 1, None, True),
    -            (u'A JSON payload should be an object or array, not a string.', 60))
    -
    -        self.assertEquals(
    -            scanstring('["Unclosed array"', 2, None, True),
    -            (u'Unclosed array', 17))
    -
    -        self.assertEquals(
    -            scanstring('["extra comma",]', 2, None, True),
    -            (u'extra comma', 14))
    -
    -        self.assertEquals(
    -            scanstring('["double extra comma",,]', 2, None, True),
    -            (u'double extra comma', 21))
    -
    -        self.assertEquals(
    -            scanstring('["Comma after the close"],', 2, None, True),
    -            (u'Comma after the close', 24))
    -
    -        self.assertEquals(
    -            scanstring('["Extra close"]]', 2, None, True),
    -            (u'Extra close', 14))
    -
    -        self.assertEquals(
    -            scanstring('{"Extra comma": true,}', 2, None, True),
    -            (u'Extra comma', 14))
    -
    -        self.assertEquals(
    -            scanstring('{"Extra value after close": true} "misplaced quoted value"', 2, None, True),
    -            (u'Extra value after close', 26))
    -
    -        self.assertEquals(
    -            scanstring('{"Illegal expression": 1 + 2}', 2, None, True),
    -            (u'Illegal expression', 21))
    -
    -        self.assertEquals(
    -            scanstring('{"Illegal invocation": alert()}', 2, None, True),
    -            (u'Illegal invocation', 21))
    -
    -        self.assertEquals(
    -            scanstring('{"Numbers cannot have leading zeroes": 013}', 2, None, True),
    -            (u'Numbers cannot have leading zeroes', 37))
    -
    -        self.assertEquals(
    -            scanstring('{"Numbers cannot be hex": 0x14}', 2, None, True),
    -            (u'Numbers cannot be hex', 24))
    -
    -        self.assertEquals(
    -            scanstring('[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]', 21, None, True),
    -            (u'Too deep', 30))
    -
    -        self.assertEquals(
    -            scanstring('{"Missing colon" null}', 2, None, True),
    -            (u'Missing colon', 16))
    -
    -        self.assertEquals(
    -            scanstring('{"Double colon":: null}', 2, None, True),
    -            (u'Double colon', 15))
    -
    -        self.assertEquals(
    -            scanstring('{"Comma instead of colon", null}', 2, None, True),
    -            (u'Comma instead of colon', 25))
    -
    -        self.assertEquals(
    -            scanstring('["Colon instead of comma": false]', 2, None, True),
    -            (u'Colon instead of comma', 25))
    -
    -        self.assertEquals(
    -            scanstring('["Bad value", truth]', 2, None, True),
    -            (u'Bad value', 12))
    -
    -    def test_issue3623(self):
    -        self.assertRaises(ValueError, json.decoder.scanstring, "xxx", 1,
    -                          "xxx")
    -        self.assertRaises(UnicodeDecodeError,
    -                          json.encoder.encode_basestring_ascii, "xx\xff")
    -
    -    def test_overflow(self):
    -        # Python 2.5 does not have maxsize
    -        maxsize = getattr(sys, 'maxsize', sys.maxint)
    -        self.assertRaises(OverflowError, json.decoder.scanstring, "xxx",
    -                          maxsize + 1)
    -
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_separators.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_separators.py
    deleted file mode 100644
    index cbda93c..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_separators.py
    +++ /dev/null
    @@ -1,42 +0,0 @@
    -import textwrap
    -from unittest import TestCase
    -
    -import simplejson as json
    -
    -
    -class TestSeparators(TestCase):
    -    def test_separators(self):
    -        h = [['blorpie'], ['whoops'], [], 'd-shtaeou', 'd-nthiouh', 'i-vhbjkhnth',
    -             {'nifty': 87}, {'field': 'yes', 'morefield': False} ]
    -
    -        expect = textwrap.dedent("""\
    -        [
    -          [
    -            "blorpie"
    -          ] ,
    -          [
    -            "whoops"
    -          ] ,
    -          [] ,
    -          "d-shtaeou" ,
    -          "d-nthiouh" ,
    -          "i-vhbjkhnth" ,
    -          {
    -            "nifty" : 87
    -          } ,
    -          {
    -            "field" : "yes" ,
    -            "morefield" : false
    -          }
    -        ]""")
    -
    -
    -        d1 = json.dumps(h)
    -        d2 = json.dumps(h, indent='  ', sort_keys=True, separators=(' ,', ' : '))
    -
    -        h1 = json.loads(d1)
    -        h2 = json.loads(d2)
    -
    -        self.assertEquals(h1, h)
    -        self.assertEquals(h2, h)
    -        self.assertEquals(d2, expect)
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_speedups.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_speedups.py
    deleted file mode 100644
    index 825ecf2..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_speedups.py
    +++ /dev/null
    @@ -1,20 +0,0 @@
    -from unittest import TestCase
    -
    -from simplejson import encoder, scanner
    -
    -def has_speedups():
    -    return encoder.c_make_encoder is not None
    -
    -class TestDecode(TestCase):
    -    def test_make_scanner(self):
    -        if not has_speedups():
    -            return
    -        self.assertRaises(AttributeError, scanner.c_make_scanner, 1)
    -
    -    def test_make_encoder(self):
    -        if not has_speedups():
    -            return
    -        self.assertRaises(TypeError, encoder.c_make_encoder,
    -            None,
    -            "\xCD\x7D\x3D\x4E\x12\x4C\xF9\x79\xD7\x52\xBA\x82\xF2\x27\x4A\x7D\xA0\xCA\x75",
    -            None)
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_tuple.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_tuple.py
    deleted file mode 100644
    index 92856a7..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_tuple.py
    +++ /dev/null
    @@ -1,49 +0,0 @@
    -import unittest
    -from StringIO import StringIO
    -
    -import simplejson as json
    -
    -class TestTuples(unittest.TestCase):
    -    def test_tuple_array_dumps(self):
    -        t = (1, 2, 3)
    -        expect = json.dumps(list(t))
    -        # Default is True
    -        self.assertEqual(expect, json.dumps(t))
    -        self.assertEqual(expect, json.dumps(t, tuple_as_array=True))
    -        self.assertRaises(TypeError, json.dumps, t, tuple_as_array=False)
    -        # Ensure that the "default" does not get called
    -        self.assertEqual(expect, json.dumps(t, default=repr))
    -        self.assertEqual(expect, json.dumps(t, tuple_as_array=True, default=repr))
    -        # Ensure that the "default" gets called
    -        self.assertEqual(
    -            json.dumps(repr(t)),
    -            json.dumps(t, tuple_as_array=False, default=repr))
    -
    -    def test_tuple_array_dump(self):
    -        t = (1, 2, 3)
    -        expect = json.dumps(list(t))
    -        # Default is True
    -        sio = StringIO()
    -        json.dump(t, sio)
    -        self.assertEqual(expect, sio.getvalue())
    -        sio = StringIO()
    -        json.dump(t, sio, tuple_as_array=True)
    -        self.assertEqual(expect, sio.getvalue())
    -        self.assertRaises(TypeError, json.dump, t, StringIO(), tuple_as_array=False)
    -        # Ensure that the "default" does not get called
    -        sio = StringIO()
    -        json.dump(t, sio, default=repr)
    -        self.assertEqual(expect, sio.getvalue())
    -        sio = StringIO()
    -        json.dump(t, sio, tuple_as_array=True, default=repr)
    -        self.assertEqual(expect, sio.getvalue())
    -        # Ensure that the "default" gets called
    -        sio = StringIO()
    -        json.dump(t, sio, tuple_as_array=False, default=repr)
    -        self.assertEqual(
    -            json.dumps(repr(t)),
    -            sio.getvalue())
    -
    -class TestNamedTuple(unittest.TestCase):
    -    def test_namedtuple_dump(self):
    -        pass
    \ No newline at end of file
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_unicode.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_unicode.py
    deleted file mode 100644
    index 83fe65b..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tests/test_unicode.py
    +++ /dev/null
    @@ -1,109 +0,0 @@
    -from unittest import TestCase
    -
    -import simplejson as json
    -
    -class TestUnicode(TestCase):
    -    def test_encoding1(self):
    -        encoder = json.JSONEncoder(encoding='utf-8')
    -        u = u'\N{GREEK SMALL LETTER ALPHA}\N{GREEK CAPITAL LETTER OMEGA}'
    -        s = u.encode('utf-8')
    -        ju = encoder.encode(u)
    -        js = encoder.encode(s)
    -        self.assertEquals(ju, js)
    -
    -    def test_encoding2(self):
    -        u = u'\N{GREEK SMALL LETTER ALPHA}\N{GREEK CAPITAL LETTER OMEGA}'
    -        s = u.encode('utf-8')
    -        ju = json.dumps(u, encoding='utf-8')
    -        js = json.dumps(s, encoding='utf-8')
    -        self.assertEquals(ju, js)
    -
    -    def test_encoding3(self):
    -        u = u'\N{GREEK SMALL LETTER ALPHA}\N{GREEK CAPITAL LETTER OMEGA}'
    -        j = json.dumps(u)
    -        self.assertEquals(j, '"\\u03b1\\u03a9"')
    -
    -    def test_encoding4(self):
    -        u = u'\N{GREEK SMALL LETTER ALPHA}\N{GREEK CAPITAL LETTER OMEGA}'
    -        j = json.dumps([u])
    -        self.assertEquals(j, '["\\u03b1\\u03a9"]')
    -
    -    def test_encoding5(self):
    -        u = u'\N{GREEK SMALL LETTER ALPHA}\N{GREEK CAPITAL LETTER OMEGA}'
    -        j = json.dumps(u, ensure_ascii=False)
    -        self.assertEquals(j, u'"' + u + u'"')
    -
    -    def test_encoding6(self):
    -        u = u'\N{GREEK SMALL LETTER ALPHA}\N{GREEK CAPITAL LETTER OMEGA}'
    -        j = json.dumps([u], ensure_ascii=False)
    -        self.assertEquals(j, u'["' + u + u'"]')
    -
    -    def test_big_unicode_encode(self):
    -        u = u'\U0001d120'
    -        self.assertEquals(json.dumps(u), '"\\ud834\\udd20"')
    -        self.assertEquals(json.dumps(u, ensure_ascii=False), u'"\U0001d120"')
    -
    -    def test_big_unicode_decode(self):
    -        u = u'z\U0001d120x'
    -        self.assertEquals(json.loads('"' + u + '"'), u)
    -        self.assertEquals(json.loads('"z\\ud834\\udd20x"'), u)
    -
    -    def test_unicode_decode(self):
    -        for i in range(0, 0xd7ff):
    -            u = unichr(i)
    -            #s = '"\\u{0:04x}"'.format(i)
    -            s = '"\\u%04x"' % (i,)
    -            self.assertEquals(json.loads(s), u)
    -
    -    def test_object_pairs_hook_with_unicode(self):
    -        s = u'{"xkd":1, "kcw":2, "art":3, "hxm":4, "qrt":5, "pad":6, "hoy":7}'
    -        p = [(u"xkd", 1), (u"kcw", 2), (u"art", 3), (u"hxm", 4),
    -             (u"qrt", 5), (u"pad", 6), (u"hoy", 7)]
    -        self.assertEqual(json.loads(s), eval(s))
    -        self.assertEqual(json.loads(s, object_pairs_hook=lambda x: x), p)
    -        od = json.loads(s, object_pairs_hook=json.OrderedDict)
    -        self.assertEqual(od, json.OrderedDict(p))
    -        self.assertEqual(type(od), json.OrderedDict)
    -        # the object_pairs_hook takes priority over the object_hook
    -        self.assertEqual(json.loads(s,
    -                                    object_pairs_hook=json.OrderedDict,
    -                                    object_hook=lambda x: None),
    -                         json.OrderedDict(p))
    -
    -
    -    def test_default_encoding(self):
    -        self.assertEquals(json.loads(u'{"a": "\xe9"}'.encode('utf-8')),
    -            {'a': u'\xe9'})
    -
    -    def test_unicode_preservation(self):
    -        self.assertEquals(type(json.loads(u'""')), unicode)
    -        self.assertEquals(type(json.loads(u'"a"')), unicode)
    -        self.assertEquals(type(json.loads(u'["a"]')[0]), unicode)
    -
    -    def test_ensure_ascii_false_returns_unicode(self):
    -        # http://code.google.com/p/simplejson/issues/detail?id=48
    -        self.assertEquals(type(json.dumps([], ensure_ascii=False)), unicode)
    -        self.assertEquals(type(json.dumps(0, ensure_ascii=False)), unicode)
    -        self.assertEquals(type(json.dumps({}, ensure_ascii=False)), unicode)
    -        self.assertEquals(type(json.dumps("", ensure_ascii=False)), unicode)
    -
    -    def test_ensure_ascii_false_bytestring_encoding(self):
    -        # http://code.google.com/p/simplejson/issues/detail?id=48
    -        doc1 = {u'quux': 'Arr\xc3\xaat sur images'}
    -        doc2 = {u'quux': u'Arr\xeat sur images'}
    -        doc_ascii = '{"quux": "Arr\\u00eat sur images"}'
    -        doc_unicode = u'{"quux": "Arr\xeat sur images"}'
    -        self.assertEquals(json.dumps(doc1), doc_ascii)
    -        self.assertEquals(json.dumps(doc2), doc_ascii)
    -        self.assertEquals(json.dumps(doc1, ensure_ascii=False), doc_unicode)
    -        self.assertEquals(json.dumps(doc2, ensure_ascii=False), doc_unicode)
    -
    -    def test_ensure_ascii_linebreak_encoding(self):
    -        # http://timelessrepo.com/json-isnt-a-javascript-subset
    -        s1 = u'\u2029\u2028'
    -        s2 = s1.encode('utf8')
    -        expect = '"\\u2029\\u2028"'
    -        self.assertEquals(json.dumps(s1), expect)
    -        self.assertEquals(json.dumps(s2), expect)
    -        self.assertEquals(json.dumps(s1, ensure_ascii=False), expect)
    -        self.assertEquals(json.dumps(s2, ensure_ascii=False), expect)
    diff --git a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tool.py b/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tool.py
    deleted file mode 100644
    index 73370db..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/pygments.rb-0.6.3/vendor/simplejson/simplejson/tool.py
    +++ /dev/null
    @@ -1,39 +0,0 @@
    -r"""Command-line tool to validate and pretty-print JSON
    -
    -Usage::
    -
    -    $ echo '{"json":"obj"}' | python -m simplejson.tool
    -    {
    -        "json": "obj"
    -    }
    -    $ echo '{ 1.2:3.4}' | python -m simplejson.tool
    -    Expecting property name: line 1 column 2 (char 2)
    -
    -"""
    -import sys
    -import simplejson as json
    -
    -def main():
    -    if len(sys.argv) == 1:
    -        infile = sys.stdin
    -        outfile = sys.stdout
    -    elif len(sys.argv) == 2:
    -        infile = open(sys.argv[1], 'rb')
    -        outfile = sys.stdout
    -    elif len(sys.argv) == 3:
    -        infile = open(sys.argv[1], 'rb')
    -        outfile = open(sys.argv[2], 'wb')
    -    else:
    -        raise SystemExit(sys.argv[0] + " [infile [outfile]]")
    -    try:
    -        obj = json.load(infile,
    -                        object_pairs_hook=json.OrderedDict,
    -                        use_decimal=True)
    -    except ValueError, e:
    -        raise SystemExit(e)
    -    json.dump(obj, outfile, sort_keys=True, indent='    ', use_decimal=True)
    -    outfile.write('\n')
    -
    -
    -if __name__ == '__main__':
    -    main()
    diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/.gitignore b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/.gitignore
    deleted file mode 100644
    index 25a0e9a..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/.gitignore
    +++ /dev/null
    @@ -1,13 +0,0 @@
    -*.gem
    -.DS_Store
    -.Trashes
    -.bundle
    -.com.apple.timemachine.supported
    -.fseventsd
    -.idea
    -.rbx
    -/ext/build
    -Desktop DB
    -Desktop DF
    -Gemfile.lock
    -pkg/*
    diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/Gemfile b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/Gemfile
    deleted file mode 100644
    index a430452..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/Gemfile
    +++ /dev/null
    @@ -1,6 +0,0 @@
    -source "https://rubygems.org"
    -
    -gemspec
    -
    -gem 'rake'
    -
    diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/Guardfile b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/Guardfile
    deleted file mode 100644
    index 63a666e..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/Guardfile
    +++ /dev/null
    @@ -1,8 +0,0 @@
    -# A sample Guardfile
    -# More info at http://github.com/guard/guard#readme
    -
    -guard :rspec do
    -  watch(%r(^spec/(.*)_spec.rb))
    -  watch(%r(^lib/(.*)\.rb))        { |m| "spec/#{m[1]}_spec.rb" }
    -  watch('spec/spec_helper.rb')    { 'spec' }
    -end
    diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/LICENSE.txt b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/LICENSE.txt
    deleted file mode 100644
    index b083ecd..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/LICENSE.txt
    +++ /dev/null
    @@ -1,22 +0,0 @@
    -Copyright (c) 2010-2014 Thibaud Guillaume-Gentil & Travis Tilley
    -
    -MIT License
    -
    -Permission is hereby granted, free of charge, to any person obtaining
    -a copy of this software and associated documentation files (the
    -"Software"), to deal in the Software without restriction, including
    -without limitation the rights to use, copy, modify, merge, publish,
    -distribute, sublicense, and/or sell copies of the Software, and to
    -permit persons to whom the Software is furnished to do so, subject to
    -the following conditions:
    -
    -The above copyright notice and this permission notice shall be
    -included in all copies or substantial portions of the Software.
    -
    -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/README.md b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/README.md
    deleted file mode 100644
    index c60eed2..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/README.md
    +++ /dev/null
    @@ -1,245 +0,0 @@
    -[![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/thibaudgg/rb-fsevent)
    -[![endorse](https://api.coderwall.com/ttilley/endorsecount.png)](https://coderwall.com/ttilley)
    -
    -# rb-fsevent
    -
    -Very simple & usable Mac OSX FSEvents API
    -
    -* RubyCocoa not required!
    -* Signals are working (really)
    -* Tested on MRI 1.8.7 & 1.9.3, RBX 2.0.0dev, JRuby
    -* Tested on 10.6 -> 10.8 (though 10.5 should work just as well)
    -
    -## Install
    -
    -    gem install rb-fsevent
    -
    -### re-compilation
    -
    -rb-fsevent comes with a pre-compiled fsevent\_watch binary supporting x86\_64 and i386 on 10.6 and above. The binary is codesigned with my (Travis Tilley) Developer ID as an extra precaution when distributing pre-compiled code and contains an embedded plist describing its build environment. This should be sufficient for most users, but if you need to use rb-fsevent on 10.5 and/or on PPC then recompilation is necessary. This can be done by entering the installed gem's ext directory and running:
    -
    -    MACOSX_DEPLOYMENT_TARGET="10.5" CC=/usr/bin/gcc-4.2 rake ppc replace_exe
    -
    -The following ENV vars are recognized:
    -
    -* CC
    -* CFLAGS
    -* ARCHFLAGS
    -* MACOSX\_DEPLOYMENT\_TARGET
    -* FWDEBUG (enables debug mode, printing an obscene number of informational
    -  messages to STDERR)
    -
    -### embedded plist
    -
    -You can retrieve the values in the embedded plist via the CLI:
    -
    -    fsevent_watch --show-plist
    -
    -The output is essentially formatted as `"#{key}:\n  #{value}\n"` to make it easier to read than plist style xml. The result looks like this:
    -
    -    DTSDKName:
    -      macosx10.5
    -    FSEWBuildTriple:
    -      i386-apple-darwin10.8.0
    -    FSEWCC:
    -      /usr/bin/gcc-4.2
    -    DTSDKPath:
    -      /Developer/SDKs/MacOSX10.5.sdk
    -    FSEWCCVersion:
    -      i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3)
    -    FSEWCFLAGS:
    -      -fconstant-cfstrings -fno-strict-aliasing -Wall -mmacosx-version-min=10.5 -O3
    -
    -If, for some perverse reason, you prefer to look at the xml... it can be retrieved via:
    -
    -    otool -s __TEXT __info_plist ./bin/fsevent_watch | grep ^0 | xxd -r -
    -
    -### codesign
    -
    -You can verify code signing information for a specific fsevent\_watch via:
    -
    -    codesign -d -vvv ./bin/fsevent_watch
    -
    -If you're using the pre-compiled binary, then the output should contain something to the effect of:
    -
    -    Authority=Developer ID Application: Travis Tilley
    -    Authority=Developer ID Certification Authority
    -    Authority=Apple Root CA
    -    Timestamp=Dec 31, 2012 12:49:13 PM
    -
    -## Usage
    -
    -### Singular path
    -
    -```ruby
    -require 'rb-fsevent'
    -
    -fsevent = FSEvent.new
    -fsevent.watch Dir.pwd do |directories|
    -  puts "Detected change inside: #{directories.inspect}"
    -end
    -fsevent.run
    -```
    -
    -### Multiple paths
    -
    -```ruby
    -require 'rb-fsevent'
    -
    -paths = ['/tmp/path/one', '/tmp/path/two', Dir.pwd]
    -
    -fsevent = FSEvent.new
    -fsevent.watch paths do |directories|
    -  puts "Detected change inside: #{directories.inspect}"
    -end
    -fsevent.run
    -```
    -
    -### Multiple paths and additional options as a Hash
    -
    -```ruby
    -require 'rb-fsevent'
    -
    -paths = ['/tmp/path/one', '/tmp/path/two', Dir.pwd]
    -options = {:latency => 1.5, :no_defer => true }
    -
    -fsevent = FSEvent.new
    -fsevent.watch paths, options do |directories|
    -  puts "Detected change inside: #{directories.inspect}"
    -end
    -fsevent.run
    -```
    -
    -### Multiple paths and additional options as an Array
    -
    -```ruby
    -require 'rb-fsevent'
    -
    -paths = ['/tmp/path/one', '/tmp/path/two', Dir.pwd]
    -options = ['--latency', 1.5, '--no-defer']
    -
    -fsevent = FSEvent.new
    -fsevent.watch paths, options do |directories|
    -  puts "Detected change inside: #{directories.inspect}"
    -end
    -fsevent.run
    -```
    -
    -## Options
    -
    -When defining options using a hash or hash-like object, it gets checked for validity and converted to the appropriate fsevent\_watch commandline arguments array when the FSEvent class is instantiated. This is obviously the safest and preferred method of passing in options.
    -
    -You may, however, choose to pass in an array of commandline arguments as your options value and it will be passed on, unmodified, to the fsevent\_watch binary when called.
    -
    -So far, the following options are supported:
    -
    -* :latency => 0.5 # in seconds
    -* :no\_defer => true
    -* :watch\_root => true
    -* :since\_when => 18446744073709551615 # an FSEventStreamEventId
    -* :file\_events => true
    -
    -### Latency
    -
    -The :latency parameter determines how long the service should wait after the first event before passing that information along to the client. If your latency is set to 4 seconds, and 300 changes occur in the first three, then the callback will be fired only once. If latency is set to 0.1 in the exact same scenario, you will see that callback fire somewhere closer to between 25 and 30 times.
    -
    -Setting a higher latency value allows for more effective temporal coalescing, resulting in fewer callbacks and greater overall efficiency... at the cost of apparent responsiveness. Setting this to a reasonably high value (and NOT setting :no\_defer) is particularly well suited for background, daemon, or batch processing applications.
    -
    -Implementation note: It appears that FSEvents will only coalesce events from a maximum of 32 distinct subpaths, making the above completely accurate only when events are to fewer than 32 subpaths. Creating 300 files in one directory, for example, or 30 files in 10 subdirectories, but not 300 files within 300 subdirectories. In the latter case, you may receive 31 callbacks in one go after the latency period. As this appears to be an implementation detail, the number could potentially differ across OS revisions. It is entirely possible that this number is somehow configurable, but I have not yet discovered an accepted method of doing so.
    -
    -### NoDefer
    -
    -The :no\_defer option changes the behavior of the latency parameter completely. Rather than waiting for $latency period of time before sending along events in an attempt to coalesce a potential deluge ahead of time, that first event is sent along to the client immediately and is followed by a $latency period of silence before sending along any additional events that occurred within that period.
    -
    -This behavior is particularly useful for interactive applications where that feeling of apparent responsiveness is most important, but you still don't want to get overwhelmed by a series of events that occur in rapid succession.
    -
    -### WatchRoot
    -
    -The :watch\_root option allows for catching the scenario where you start watching "~/src/demo\_project" and either it is later renamed to "~/src/awesome\_sauce\_3000" or the path changes in such a manner that the original directory is now at "~/clients/foo/iteration4/demo\_project".
    -
    -Unfortunately, while this behavior is somewhat supported in the fsevent\_watch binary built as part of this project, support for passing across detailed metadata is not (yet). As a result, you would not receive the appropriate RootChanged event and be able to react appropriately. Also, since the C code doesn't open watched directories and retain that file descriptor as part of path-specific callback metadata, we are unable to issue an F\_GETPATH fcntl() to determine the directory's new path.
    -
    -Please do not use this option until proper support is added (or, even better, add it and submit a pull request).
    -
    -### SinceWhen
    -
    -The FSEventStreamEventId passed in to :since\_when is used as a base for reacting to historic events. Unfortunately, not only is the metadata for transitioning from historic to live events not currently passed along, but it is incorrectly passed as a change event on the root path, and only per-host event streams are currently supported. When using per-host event streams, the event IDs are not guaranteed to be unique or contiguous when shared volumes (firewire/USB/net/etc) are used on multiple macs.
    -
    -Please do not use this option until proper support is added, unless it's acceptable for you to receive that one fake event that's handled incorrectly when events transition from historical to live. Even in that scenario, there's no metadata available for determining the FSEventStreamEventId of the last received event.
    -
    -WARNING: passing in 0 as the parameter to :since\_when will return events for every directory modified since "the beginning of time".
    -
    -### FileEvents ###
    -
    -Prepare yourself for an obscene number of callbacks. Realistically, an "Atomic Save" could easily fire maybe 6 events for the combination of creating the new file, changing metadata/permissions, writing content, swapping out the old file for the new may itself result in multiple events being fired, and so forth. By the time you get the event for the temporary file being created as part of the atomic save, it will already be gone and swapped with the original file. This and issues of a similar nature have prevented me from adding the option to the ruby code despite the fsevent\_watch binary supporting file level events for quite some time now. Mountain Lion seems to be better at coalescing needless events, but that might just be my imagination.
    -
    -## Debugging output
    -
    -If the gem is re-compiled with the environment variable FWDEBUG set, then fsevent\_watch will be built with its various DEBUG sections defined, and the output to STDERR is truly verbose (and hopefully helpful in debugging your application and not just fsevent\_watch itself). If enough people find this to be directly useful when developing code that makes use of rb-fsevent, then it wouldn't be hard to clean this up and make it a feature enabled by a commandline argument instead. Until somebody files an issue, however, I will assume otherwise.
    -
    -    append_path called for: /tmp/moo/cow/
    -      resolved path to: /private/tmp/moo/cow
    -
    -    config.sinceWhen    18446744073709551615
    -    config.latency      0.300000
    -    config.flags        00000000
    -    config.paths
    -      /private/tmp/moo/cow
    -
    -    FSEventStreamRef @ 0x100108540:
    -       allocator = 0x7fff705a4ee0
    -       callback = 0x10000151e
    -       context = {0, 0x0, 0x0, 0x0, 0x0}
    -       numPathsToWatch = 1
    -       pathsToWatch = 0x7fff705a4ee0
    -            pathsToWatch[0] = '/private/tmp/moo/cow'
    -       latestEventId = -1
    -       latency = 300000 (microseconds)
    -       flags = 0x00000000
    -       runLoop = 0x0
    -       runLoopMode = 0x0
    -
    -    FSEventStreamCallback fired!
    -      numEvents: 32
    -      event path: /private/tmp/moo/cow/1/a/
    -      event flags: 00000000
    -      event ID: 1023767
    -      event path: /private/tmp/moo/cow/1/b/
    -      event flags: 00000000
    -      event ID: 1023782
    -      event path: /private/tmp/moo/cow/1/c/
    -      event flags: 00000000
    -      event ID: 1023797
    -      event path: /private/tmp/moo/cow/1/d/
    -      event flags: 00000000
    -      event ID: 1023812
    -      [etc]
    -
    -
    -## Note about FFI
    -
    -rb-fsevent doesn't use [ruby-ffi](http://github.com/ffi/ffi) anymore because it sadly doesn't allow for catching Signals. You can still see the code in the [ffi branch](http://github.com/thibaudgg/rb-fsevent/tree/ffi).
    -
    -## Development
    -
    -* Source hosted at [GitHub](http://github.com/thibaudgg/rb-fsevent)
    -* Report issues/Questions/Feature requests on [GitHub Issues](http://github.com/thibaudgg/rb-fsevent/issues)
    -
    -Pull requests are quite welcome! Please ensure that your commits are in a topic branch for each individual changeset that can be reasonably isolated. It is also important to ensure that your changes are well tested... whether that means new tests, modified tests, or fixing a scenario where the existing tests currently fail. If you have rbenv and ruby-build, we have a helper task for running the testsuite in all of them:
    -
    -    rake spec:portability
    -
    -The list of tested targets is currently:
    -
    -    %w[1.8.7-p371 1.9.3-p362 2.0.0-dev rbx-2.0.0-dev jruby-1.7.1]
    -
    -## Donations
    -
    -rb-fsevent is truly free software. The license is quite liberal (you don't even have to contribute back your changes). If, however, you'd like to donate as a way of showing support for the project and its continued development:
    -
    -[![Donate Bitcoins](https://d2o7j92jk8qjiw.cloudfront.net/assets/buttons/donation_small-2d08f8cd93c98acf496e0411cc6a5262.png)](https://coinbase.com/checkouts/5233986321e2217499bd6ef91f679aa4?c=rb-fsevent)
    -    
    -## Authors
    -
    -* [Travis Tilley](http://github.com/ttilley)
    -* [Thibaud Guillaume-Gentil](http://github.com/thibaudgg)
    diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/Rakefile b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/Rakefile
    deleted file mode 100644
    index 837b545..0000000
    --- a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/Rakefile
    +++ /dev/null
    @@ -1,32 +0,0 @@
    -# -*- encoding: utf-8 -*-
    -require 'bundler'
    -Bundler::GemHelper.install_tasks
    -
    -require 'rspec/core/rake_task'
    -RSpec::Core::RakeTask.new(:spec)
    -task :default => :spec
    -
    -namespace(:spec) do
    -  desc "Run all specs on multiple ruby versions"
    -  task(:portability) do
    -    versions = %w[1.8.7-p371 1.9.3-p362 2.0.0-dev rbx-2.0.0-dev jruby-1.7.1]
    -    versions.each do |version|
    -      # system <<-BASH
    -      #   bash -c 'source ~/.rvm/scripts/rvm;
    -      #            rvm #{version};
    -      #            echo "--------- version #{version} ----------\n";
    -      #            bundle install;
    -      #            rake spec'
    -      # BASH
    -      system <<-BASH
    -        bash -c 'export PATH="$HOME/.rbenv/bin:$PATH";
    -                 [[ `which rbenv` ]] && eval "$(rbenv init -)";
    -                 [[ ! -a $HOME/.rbenv/versions/#{version} ]] && rbenv install #{version};
    -                 rbenv shell #{version};
    -                 rbenv which bundle 2> /dev/null || gem install bundler;
    -                 bundle install;
    -                 rake spec;'
    -      BASH
    -    end
    -  end
    -end
    diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/bin/fsevent_watch b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/bin/fsevent_watch
    deleted file mode 100755
    index 206102e7de1cb038cfae5aa640ff5af0cbcd8f18..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 131920
    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
    SSLF1~u(f3szh3@NX5jDs)ec+$
    
    diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/bin/fsevent_watch_10_5 b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/bin/fsevent_watch_10_5
    deleted file mode 100755
    index 98a74aef794692ba2adfc32c0ba094a0c10261c7..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 164576
    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%0DCD;?7fiGD#x=bIvo*LQD+FSom
    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

    kGwO7j@x^O_|;+J9~0$4u~p=3)u{ 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 diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/LICENSE b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/LICENSE deleted file mode 100644 index a35e195..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) 2011-2013 Travis Tilley - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/TSICTString.c b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/TSICTString.c deleted file mode 100644 index 08418b0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/TSICTString.c +++ /dev/null @@ -1,394 +0,0 @@ -// -// TSICTString.c -// TSITString -// -// Created by Travis Tilley on 9/27/11. -// - -#include "TSICTString.h" - - -const char* const TNetstringTypes = ",#^!~}]Z"; -const char* const OTNetstringTypes = ",#^!~{[Z"; -const UInt8 TNetstringSeparator = ':'; - -TSITStringFormat TSITStringDefaultFormat = kTSITStringFormatTNetstring; - -static const CFRange BeginningRange = {0,0}; - -static CFTypeID kCFDataTypeID = -1UL; -static CFTypeID kCFStringTypeID = -1UL; -static CFTypeID kCFNumberTypeID = -1UL; -static CFTypeID kCFBooleanTypeID = -1UL; -static CFTypeID kCFNullTypeID = -1UL; -static CFTypeID kCFArrayTypeID = -1UL; -static CFTypeID kCFDictionaryTypeID = -1UL; - - -__attribute__((constructor)) void Init_TSICTString(void) -{ - kCFDataTypeID = CFDataGetTypeID(); - kCFStringTypeID = CFStringGetTypeID(); - kCFNumberTypeID = CFNumberGetTypeID(); - kCFBooleanTypeID = CFBooleanGetTypeID(); - kCFNullTypeID = CFNullGetTypeID(); - kCFArrayTypeID = CFArrayGetTypeID(); - kCFDictionaryTypeID = CFDictionaryGetTypeID(); -} - - -void TSICTStringSetDefaultFormat(TSITStringFormat format) -{ - if (format == kTSITStringFormatDefault) { - TSITStringDefaultFormat = kTSITStringFormatTNetstring; - } else { - TSITStringDefaultFormat = format; - } -} - -TSITStringFormat TSICTStringGetDefaultFormat(void) -{ - return TSITStringDefaultFormat; -} - - -void TSICTStringDestroy(TStringIRep* rep) -{ - CFRelease(rep->data); - free(rep->length); - free(rep); -} - - -static inline TStringIRep* TSICTStringCreateWithDataOfTypeAndFormat(CFDataRef data, TSITStringTag type, TSITStringFormat format) -{ - if (format == kTSITStringFormatDefault) { - format = TSICTStringGetDefaultFormat(); - } - - TStringIRep* rep = calloc(1, sizeof(TStringIRep)); - rep->data = CFDataCreateCopy(kCFAllocatorDefault, data); - rep->type = type; - rep->format = format; - rep->length = calloc(10, sizeof(char)); - - CFIndex len = CFDataGetLength(rep->data); - if (snprintf(rep->length, 10, "%lu", len)) { - return rep; - } else { - TSICTStringDestroy(rep); - return NULL; - } -} - -static inline CFDataRef TSICTStringCreateDataFromIntermediateRepresentation(TStringIRep* rep) -{ - CFIndex len = CFDataGetLength(rep->data); - CFMutableDataRef buffer = CFDataCreateMutableCopy(kCFAllocatorDefault, (len + 12), rep->data); - UInt8* bufferBytes = CFDataGetMutableBytePtr(buffer); - - size_t prefixLength = strlen(rep->length) + 1; - CFDataReplaceBytes(buffer, BeginningRange, (const UInt8*)rep->length, (CFIndex)prefixLength); - - if (rep->format == kTSITStringFormatTNetstring) { - const UInt8 ftag = (UInt8)TNetstringTypes[rep->type]; - CFDataAppendBytes(buffer, &ftag, 1); - bufferBytes[(prefixLength - 1)] = TNetstringSeparator; - } else if (rep->format == kTSITStringFormatOTNetstring) { - const UInt8 ftag = (UInt8)OTNetstringTypes[rep->type]; - bufferBytes[(prefixLength - 1)] = ftag; - } - - CFDataRef dataRep = CFDataCreateCopy(kCFAllocatorDefault, buffer); - CFRelease(buffer); - - return dataRep; -} - -static inline CFStringRef TSICTStringCreateStringFromIntermediateRepresentation(TStringIRep* rep) -{ - CFDataRef data = TSICTStringCreateDataFromIntermediateRepresentation(rep); - CFStringRef string = CFStringCreateFromExternalRepresentation(kCFAllocatorDefault, data, kCFStringEncodingUTF8); - CFRelease(data); - return string; -} - -static inline CFDataRef TSICTStringCreateDataWithDataOfTypeAndFormat(CFDataRef data, TSITStringTag type, TSITStringFormat format) -{ - CFRetain(data); - - if (format == kTSITStringFormatDefault) { - format = TSICTStringGetDefaultFormat(); - } - - TStringIRep* rep = TSICTStringCreateWithDataOfTypeAndFormat(data, type, format); - if (rep == NULL) { - return NULL; - } - - CFDataRef result = TSICTStringCreateDataFromIntermediateRepresentation(rep); - - TSICTStringDestroy(rep); - CFRelease(data); - - return result; -} - -static inline void TSICTStringAppendObjectToMutableDataWithFormat(CFTypeRef object, CFMutableDataRef buffer, TSITStringFormat format) -{ - if (object == NULL) { - object = kCFNull; - } - - CFRetain(object); - - TStringIRep* objRep = TSICTStringCreateWithObjectAndFormat(object, format); - CFDataRef objData = TSICTStringCreateDataFromIntermediateRepresentation(objRep); - CFDataAppendBytes(buffer, (CFDataGetBytePtr(objData)), CFDataGetLength(objData)); - CFRelease(objData); - TSICTStringDestroy(objRep); - - CFRelease(object); -} - -static void ArrayBufferAppendCallback(const void* item, void* context) -{ - TStringCollectionCallbackContext* cx = (TStringCollectionCallbackContext*)context; - CFMutableDataRef buffer = cx->buffer; - TSITStringFormat format = cx->format; - - TSICTStringAppendObjectToMutableDataWithFormat(item, buffer, format); -} - -static void DictionaryBufferAppendCallback(const void* key, const void* value, void* context) -{ - TStringCollectionCallbackContext* cx = (TStringCollectionCallbackContext*)context; - CFMutableDataRef buffer = cx->buffer; - TSITStringFormat format = cx->format; - - TSICTStringAppendObjectToMutableDataWithFormat(key, buffer, format); - TSICTStringAppendObjectToMutableDataWithFormat(value, buffer, format); -} - - -CFDataRef TSICTStringCreateRenderedData(TStringIRep* rep) -{ - return TSICTStringCreateDataFromIntermediateRepresentation(rep); -} - -CFDataRef TSICTStringCreateRenderedDataFromObjectWithFormat(CFTypeRef object, TSITStringFormat format) -{ - if (object == NULL) { - object = kCFNull; - } - - CFRetain(object); - - TStringIRep* rep = TSICTStringCreateWithObjectAndFormat(object, format); - CFDataRef data = TSICTStringCreateDataFromIntermediateRepresentation(rep); - - TSICTStringDestroy(rep); - CFRelease(object); - - return data; -} - -CFStringRef TSICTStringCreateRenderedString(TStringIRep* rep) -{ - return TSICTStringCreateStringFromIntermediateRepresentation(rep); -} - -CFStringRef TSICTStringCreateRenderedStringFromObjectWithFormat(CFTypeRef object, TSITStringFormat format) -{ - if (object == NULL) { - object = kCFNull; - } - - CFRetain(object); - - TStringIRep* rep = TSICTStringCreateWithObjectAndFormat(object, format); - CFStringRef string = TSICTStringCreateStringFromIntermediateRepresentation(rep); - - TSICTStringDestroy(rep); - CFRelease(object); - - return string; -} - - -TStringIRep* TSICTStringCreateWithObjectAndFormat(CFTypeRef object, TSITStringFormat format) -{ - if (object == NULL) { - return TSICTStringCreateNullWithFormat(format); - } - CFRetain(object); - - CFTypeID cfType = CFGetTypeID(object); - TStringIRep* rep = NULL; - - if (cfType == kCFDataTypeID) { - rep = TSICTStringCreateWithDataOfTypeAndFormat(object, kTSITStringTagString, format); - } else if (cfType == kCFStringTypeID) { - rep = TSICTStringCreateWithStringAndFormat(object, format); - } else if (cfType == kCFNumberTypeID) { - rep = TSICTStringCreateWithNumberAndFormat(object, format); - } else if (cfType == kCFBooleanTypeID) { - if (CFBooleanGetValue(object)) { - rep = TSICTStringCreateTrueWithFormat(format); - } else { - rep = TSICTStringCreateFalseWithFormat(format); - } - } else if (cfType == kCFNullTypeID) { - rep = TSICTStringCreateNullWithFormat(format); - } else if (cfType == kCFArrayTypeID) { - rep = TSICTStringCreateWithArrayAndFormat(object, format); - } else if (cfType == kCFDictionaryTypeID) { - rep = TSICTStringCreateWithDictionaryAndFormat(object, format); - } else { - rep = TSICTStringCreateInvalidWithFormat(format); - } - - CFRelease(object); - return rep; -} - -TStringIRep* TSICTStringCreateWithStringAndFormat(CFStringRef string, TSITStringFormat format) -{ - CFRetain(string); - CFDataRef data = CFStringCreateExternalRepresentation(kCFAllocatorDefault, string, kCFStringEncodingUTF8, '?'); - TStringIRep* rep = TSICTStringCreateWithDataOfTypeAndFormat(data, kTSITStringTagString, format); - CFRelease(data); - CFRelease(string); - return rep; -} - -TStringIRep* TSICTStringCreateWithNumberAndFormat(CFNumberRef number, TSITStringFormat format) -{ - CFRetain(number); - TSITStringTag tag = kTSITStringTagNumber; - CFDataRef data; - CFNumberType numType = CFNumberGetType(number); - - switch(numType) { - case kCFNumberCharType: - { - int value; - if (CFNumberGetValue(number, kCFNumberIntType, &value)) { - if (value == 0 || value == 1) { - tag = kTSITStringTagBool; - } else { - tag = kTSITStringTagString; - } - } - break; - } - case kCFNumberFloat32Type: - case kCFNumberFloat64Type: - case kCFNumberFloatType: - case kCFNumberDoubleType: - { - tag = kTSITStringTagFloat; - break; - } - } - - if (tag == kTSITStringTagBool) { - bool value; - CFNumberGetValue(number, kCFNumberIntType, &value); - if (value) { - data = CFDataCreate(kCFAllocatorDefault, (UInt8*)"true", 4); - } else { - data = CFDataCreate(kCFAllocatorDefault, (UInt8*)"false", 5); - } - } else if (tag == kTSITStringTagFloat) { - char buf[32]; - char *p, *e; - double value; - - CFNumberGetValue(number, numType, &value); - sprintf(buf, "%#.15g", value); - - e = buf + strlen(buf); - p = e; - while (p[-1]=='0' && ('0' <= p[-2] && p[-2] <= '9')) { - p--; - } - memmove(p, e, strlen(e)+1); - - data = CFDataCreate(kCFAllocatorDefault, (UInt8*)buf, (CFIndex)strlen(buf)); - } else { - char buf[32]; - SInt64 value; - CFNumberGetValue(number, numType, &value); - sprintf(buf, "%lli", value); - data = CFDataCreate(kCFAllocatorDefault, (UInt8*)buf, (CFIndex)strlen(buf)); - } - - TStringIRep* rep = TSICTStringCreateWithDataOfTypeAndFormat(data, tag, format); - CFRelease(data); - CFRelease(number); - return rep; -} - -TStringIRep* TSICTStringCreateTrueWithFormat(TSITStringFormat format) -{ - CFDataRef data = CFDataCreate(kCFAllocatorDefault, (UInt8*)"true", 4); - TStringIRep* rep = TSICTStringCreateWithDataOfTypeAndFormat(data, kTSITStringTagBool, format); - CFRelease(data); - return rep; -} - -TStringIRep* TSICTStringCreateFalseWithFormat(TSITStringFormat format) -{ - CFDataRef data = CFDataCreate(kCFAllocatorDefault, (UInt8*)"false", 5); - TStringIRep* rep = TSICTStringCreateWithDataOfTypeAndFormat(data, kTSITStringTagBool, format); - CFRelease(data); - return rep; -} - -TStringIRep* TSICTStringCreateNullWithFormat(TSITStringFormat format) -{ - CFDataRef data = CFDataCreate(kCFAllocatorDefault, NULL, 0); - TStringIRep* rep = TSICTStringCreateWithDataOfTypeAndFormat(data, kTSITStringTagNull, format); - CFRelease(data); - return rep; -} - -TStringIRep* TSICTStringCreateInvalidWithFormat(TSITStringFormat format) -{ - CFDataRef data = CFDataCreate(kCFAllocatorDefault, NULL, 0); - TStringIRep* rep = TSICTStringCreateWithDataOfTypeAndFormat(data, kTSITStringTagInvalid, format); - CFRelease(data); - return rep; -} - -TStringIRep* TSICTStringCreateWithArrayAndFormat(CFArrayRef array, TSITStringFormat format) -{ - CFRetain(array); - - CFMutableDataRef buffer = CFDataCreateMutable(kCFAllocatorDefault, 0); - - CFRange all = CFRangeMake(0, CFArrayGetCount(array)); - TStringCollectionCallbackContext cx = {buffer, format}; - CFArrayApplyFunction(array, all, ArrayBufferAppendCallback, &cx); - - TStringIRep* rep = TSICTStringCreateWithDataOfTypeAndFormat(buffer, kTSITStringTagList, format); - CFRelease(buffer); - CFRelease(array); - return rep; -} - -TStringIRep* TSICTStringCreateWithDictionaryAndFormat(CFDictionaryRef dictionary, TSITStringFormat format) -{ - CFRetain(dictionary); - - CFMutableDataRef buffer = CFDataCreateMutable(kCFAllocatorDefault, 0); - - TStringCollectionCallbackContext cx = {buffer, format}; - CFDictionaryApplyFunction(dictionary, DictionaryBufferAppendCallback, &cx); - - TStringIRep* rep = TSICTStringCreateWithDataOfTypeAndFormat(buffer, kTSITStringTagDict, format); - CFRelease(buffer); - CFRelease(dictionary); - return rep; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/TSICTString.h b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/TSICTString.h deleted file mode 100644 index daf085c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/TSICTString.h +++ /dev/null @@ -1,74 +0,0 @@ -// -// TSICTString.h -// TSITString -// -// Created by Travis Tilley on 9/27/11. -// - -#ifndef TSICTString_H -#define TSICTString_H - -#include - - -typedef enum { - kTSITStringTagString = 0, - kTSITStringTagNumber = 1, - kTSITStringTagFloat = 2, - kTSITStringTagBool = 3, - kTSITStringTagNull = 4, - kTSITStringTagDict = 5, - kTSITStringTagList = 6, - kTSITStringTagInvalid = 7, -} TSITStringTag; - -extern const char* const TNetstringTypes; -extern const char* const OTNetstringTypes; -extern const UInt8 TNetstringSeparator; - -typedef enum { - kTSITStringFormatDefault = 0, - kTSITStringFormatOTNetstring = 1, - kTSITStringFormatTNetstring = 2, -} TSITStringFormat; - -extern TSITStringFormat TSITStringDefaultFormat; - -typedef struct TSITStringIntermediate { - CFDataRef data; - char* length; - TSITStringTag type; - TSITStringFormat format; -} TStringIRep; - -typedef struct { - CFMutableDataRef buffer; - TSITStringFormat format; -} TStringCollectionCallbackContext; - - -void Init_TSICTString(void); - -void TSICTStringSetDefaultFormat(TSITStringFormat format); -TSITStringFormat TSICTStringGetDefaultFormat(void); - -void TSICTStringDestroy(TStringIRep* rep); - -CFDataRef TSICTStringCreateRenderedData(TStringIRep* rep); -CFDataRef TSICTStringCreateRenderedDataFromObjectWithFormat(CFTypeRef object, TSITStringFormat format); - -CFStringRef TSICTStringCreateRenderedString(TStringIRep* rep); -CFStringRef TSICTStringCreateRenderedStringFromObjectWithFormat(CFTypeRef object, TSITStringFormat format); - -TStringIRep* TSICTStringCreateWithObjectAndFormat(CFTypeRef object, TSITStringFormat format); -TStringIRep* TSICTStringCreateWithStringAndFormat(CFStringRef string, TSITStringFormat format); -TStringIRep* TSICTStringCreateWithNumberAndFormat(CFNumberRef number, TSITStringFormat format); -TStringIRep* TSICTStringCreateTrueWithFormat(TSITStringFormat format); -TStringIRep* TSICTStringCreateFalseWithFormat(TSITStringFormat format); -TStringIRep* TSICTStringCreateNullWithFormat(TSITStringFormat format); -TStringIRep* TSICTStringCreateInvalidWithFormat(TSITStringFormat format); -TStringIRep* TSICTStringCreateWithArrayAndFormat(CFArrayRef array, TSITStringFormat format); -TStringIRep* TSICTStringCreateWithDictionaryAndFormat(CFDictionaryRef dictionary, TSITStringFormat format); - - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/cli.c b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/cli.c deleted file mode 100644 index 2b406a1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/cli.c +++ /dev/null @@ -1,202 +0,0 @@ -#include -#include "cli.h" - -const char* cli_info_purpose = "A flexible command-line interface for the FSEvents API"; -const char* cli_info_usage = "Usage: fsevent_watch [OPTIONS]... [PATHS]..."; -const char* cli_info_help[] = { - " -h, --help you're looking at it", - " -V, --version print version number and exit", - " -p, --show-plist display the embedded Info.plist values", - " -s, --since-when=EventID fire historical events since ID", - " -l, --latency=seconds latency period (default='0.5')", - " -n, --no-defer enable no-defer latency modifier", - " -r, --watch-root watch for when the root path has changed", - // " -i, --ignore-self ignore current process", - " -F, --file-events provide file level event data", - " -f, --format=name output format (classic, niw, \n" - " tnetstring, otnetstring)", - 0 -}; - -static void default_args (struct cli_info* args_info) -{ - args_info->since_when_arg = kFSEventStreamEventIdSinceNow; - args_info->latency_arg = 0.5; - args_info->no_defer_flag = false; - args_info->watch_root_flag = false; - args_info->ignore_self_flag = false; - args_info->file_events_flag = false; - args_info->mark_self_flag = false; - args_info->format_arg = kFSEventWatchOutputFormatClassic; -} - -static void cli_parser_release (struct cli_info* args_info) -{ - unsigned int i; - - for (i=0; i < args_info->inputs_num; ++i) { - free(args_info->inputs[i]); - } - - if (args_info->inputs_num) { - free(args_info->inputs); - } - - args_info->inputs_num = 0; -} - -void cli_parser_init (struct cli_info* args_info) -{ - default_args(args_info); - - args_info->inputs = 0; - args_info->inputs_num = 0; -} - -void cli_parser_free (struct cli_info* args_info) -{ - cli_parser_release(args_info); -} - -static void cli_print_info_dict (const void *key, - const void *value, - void *context) -{ - CFStringRef entry = CFStringCreateWithFormat(NULL, NULL, - CFSTR("%@:\n %@"), key, value); - if (entry) { - CFShow(entry); - CFRelease(entry); - } -} - -void cli_show_plist (void) -{ - CFBundleRef mainBundle = CFBundleGetMainBundle(); - CFRetain(mainBundle); - CFDictionaryRef mainBundleDict = CFBundleGetInfoDictionary(mainBundle); - if (mainBundleDict) { - CFRetain(mainBundleDict); - printf("Embedded Info.plist metadata:\n\n"); - CFDictionaryApplyFunction(mainBundleDict, cli_print_info_dict, NULL); - CFRelease(mainBundleDict); - } - CFRelease(mainBundle); - printf("\n"); -} - -void cli_print_version (void) -{ - printf("%s %s\n\n", CLI_NAME, CLI_VERSION); -#ifdef COMPILED_AT - printf("Compiled at: %s\n", COMPILED_AT); -#endif -#ifdef COMPILER - printf("Compiled with: %s\n", COMPILER); -#endif -#ifdef TARGET_CPU - printf("Compiled for: %s\n", TARGET_CPU); -#endif - printf("\n"); -} - -void cli_print_help (void) -{ - cli_print_version(); - - printf("\n%s\n", cli_info_purpose); - printf("\n%s\n", cli_info_usage); - printf("\n"); - - int i = 0; - while (cli_info_help[i]) { - printf("%s\n", cli_info_help[i++]); - } -} - -int cli_parser (int argc, const char** argv, struct cli_info* args_info) -{ - static struct option longopts[] = { - { "help", no_argument, NULL, 'h' }, - { "version", no_argument, NULL, 'V' }, - { "show-plist", no_argument, NULL, 'p' }, - { "since-when", required_argument, NULL, 's' }, - { "latency", required_argument, NULL, 'l' }, - { "no-defer", no_argument, NULL, 'n' }, - { "watch-root", no_argument, NULL, 'r' }, - { "ignore-self", no_argument, NULL, 'i' }, - { "file-events", no_argument, NULL, 'F' }, - { "mark-self", no_argument, NULL, 'm' }, - { "format", required_argument, NULL, 'f' }, - { 0, 0, 0, 0 } - }; - - const char* shortopts = "hVps:l:nriFf:"; - - int c = -1; - - while ((c = getopt_long(argc, (char * const*)argv, shortopts, longopts, NULL)) != -1) { - switch(c) { - case 's': // since-when - args_info->since_when_arg = strtoull(optarg, NULL, 0); - break; - case 'l': // latency - args_info->latency_arg = strtod(optarg, NULL); - break; - case 'n': // no-defer - args_info->no_defer_flag = true; - break; - case 'r': // watch-root - args_info->watch_root_flag = true; - break; - case 'i': // ignore-self - args_info->ignore_self_flag = true; - break; - case 'F': // file-events - args_info->file_events_flag = true; - break; - case 'm': // mark-self - args_info->mark_self_flag = true; - break; - case 'f': // format - if (strcmp(optarg, "classic") == 0) { - args_info->format_arg = kFSEventWatchOutputFormatClassic; - } else if (strcmp(optarg, "niw") == 0) { - args_info->format_arg = kFSEventWatchOutputFormatNIW; - } else if (strcmp(optarg, "tnetstring") == 0) { - args_info->format_arg = kFSEventWatchOutputFormatTNetstring; - } else if (strcmp(optarg, "otnetstring") == 0) { - args_info->format_arg = kFSEventWatchOutputFormatOTNetstring; - } else { - fprintf(stderr, "Unknown output format: %s\n", optarg); - exit(EXIT_FAILURE); - } - break; - case 'V': // version - cli_print_version(); - exit(EXIT_SUCCESS); - case 'p': // show-plist - cli_show_plist(); - exit(EXIT_SUCCESS); - case 'h': // help - case '?': // invalid option - case ':': // missing argument - cli_print_help(); - exit((c == 'h') ? EXIT_SUCCESS : EXIT_FAILURE); - } - } - - if (optind < argc) { - int i = 0; - args_info->inputs_num = (unsigned int)(argc - optind); - args_info->inputs = - (char**)(malloc ((args_info->inputs_num)*sizeof(char*))); - while (optind < argc) - if (argv[optind++] != argv[0]) { - args_info->inputs[i++] = strdup(argv[optind-1]); - } - } - - return EXIT_SUCCESS; -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/cli.h b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/cli.h deleted file mode 100644 index 2164995..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/cli.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef CLI_H -#define CLI_H - -#include "common.h" - -#ifndef CLI_NAME -#define CLI_NAME "fsevent_watch" -#endif /* CLI_NAME */ - -#ifndef PROJECT_VERSION -#error "PROJECT_VERSION not set" -#endif /* PROJECT_VERSION */ - -#ifndef CLI_VERSION -#define CLI_VERSION _xstr(PROJECT_VERSION) -#endif /* CLI_VERSION */ - - -struct cli_info { - UInt64 since_when_arg; - double latency_arg; - bool no_defer_flag; - bool watch_root_flag; - bool ignore_self_flag; - bool file_events_flag; - bool mark_self_flag; - enum FSEventWatchOutputFormat format_arg; - - char** inputs; - unsigned inputs_num; -}; - -extern const char* cli_info_purpose; -extern const char* cli_info_usage; -extern const char* cli_info_help[]; - -void cli_print_help(void); -void cli_print_version(void); - -int cli_parser (int argc, const char** argv, struct cli_info* args_info); -void cli_parser_init (struct cli_info* args_info); -void cli_parser_free (struct cli_info* args_info); - - -#endif /* CLI_H */ diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/common.h b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/common.h deleted file mode 100644 index b2d3e4e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/common.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef fsevent_watch_common_h -#define fsevent_watch_common_h - -#include -#ifdef __OBJC__ -#import -#endif - -#include -#include -#include "compat.h" -#include "defines.h" -#include "TSICTString.h" - -enum FSEventWatchOutputFormat { - kFSEventWatchOutputFormatClassic, - kFSEventWatchOutputFormatNIW, - kFSEventWatchOutputFormatTNetstring, - kFSEventWatchOutputFormatOTNetstring -}; - -#endif /* fsevent_watch_common_h */ diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/compat.c b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/compat.c deleted file mode 100644 index ab84dfd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/compat.c +++ /dev/null @@ -1,25 +0,0 @@ -#include "compat.h" - -#if MAC_OS_X_VERSION_MAX_ALLOWED < 1060 -FSEventStreamCreateFlags kFSEventStreamCreateFlagIgnoreSelf = 0x00000008; -#endif - -#if MAC_OS_X_VERSION_MAX_ALLOWED < 1070 -FSEventStreamCreateFlags kFSEventStreamCreateFlagFileEvents = 0x00000010; -FSEventStreamEventFlags kFSEventStreamEventFlagItemCreated = 0x00000100; -FSEventStreamEventFlags kFSEventStreamEventFlagItemRemoved = 0x00000200; -FSEventStreamEventFlags kFSEventStreamEventFlagItemInodeMetaMod = 0x00000400; -FSEventStreamEventFlags kFSEventStreamEventFlagItemRenamed = 0x00000800; -FSEventStreamEventFlags kFSEventStreamEventFlagItemModified = 0x00001000; -FSEventStreamEventFlags kFSEventStreamEventFlagItemFinderInfoMod = 0x00002000; -FSEventStreamEventFlags kFSEventStreamEventFlagItemChangeOwner = 0x00004000; -FSEventStreamEventFlags kFSEventStreamEventFlagItemXattrMod = 0x00008000; -FSEventStreamEventFlags kFSEventStreamEventFlagItemIsFile = 0x00010000; -FSEventStreamEventFlags kFSEventStreamEventFlagItemIsDir = 0x00020000; -FSEventStreamEventFlags kFSEventStreamEventFlagItemIsSymlink = 0x00040000; -#endif - -#if MAC_OS_X_VERSION_MAX_ALLOWED < 1090 -FSEventStreamCreateFlags kFSEventStreamCreateFlagMarkSelf = 0x00000020; -FSEventStreamEventFlags kFSEventStreamEventFlagOwnEvent = 0x00080000; -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/compat.h b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/compat.h deleted file mode 100644 index d44c0c8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/compat.h +++ /dev/null @@ -1,47 +0,0 @@ -/** - * @headerfile compat.h - * FSEventStream flag compatibility shim - * - * In order to compile a binary against an older SDK yet still support the - * features present in later OS releases, we need to define any missing enum - * constants not present in the older SDK. This allows us to safely defer - * feature detection to runtime (and avoid recompilation). - */ - - -#ifndef fsevent_watch_compat_h -#define fsevent_watch_compat_h - -#ifndef __CORESERVICES__ -#include -#endif // __CORESERVICES__ - -#if MAC_OS_X_VERSION_MAX_ALLOWED < 1060 -// ignoring events originating from the current process introduced in 10.6 -extern FSEventStreamCreateFlags kFSEventStreamCreateFlagIgnoreSelf; -#endif - -#if MAC_OS_X_VERSION_MAX_ALLOWED < 1070 -// file-level events introduced in 10.7 -extern FSEventStreamCreateFlags kFSEventStreamCreateFlagFileEvents; -extern FSEventStreamEventFlags kFSEventStreamEventFlagItemCreated, - kFSEventStreamEventFlagItemRemoved, - kFSEventStreamEventFlagItemInodeMetaMod, - kFSEventStreamEventFlagItemRenamed, - kFSEventStreamEventFlagItemModified, - kFSEventStreamEventFlagItemFinderInfoMod, - kFSEventStreamEventFlagItemChangeOwner, - kFSEventStreamEventFlagItemXattrMod, - kFSEventStreamEventFlagItemIsFile, - kFSEventStreamEventFlagItemIsDir, - kFSEventStreamEventFlagItemIsSymlink; -#endif - -#if MAC_OS_X_VERSION_MAX_ALLOWED < 1090 -// marking, rather than ignoring, events originating from the current process introduced in 10.9 -extern FSEventStreamCreateFlags kFSEventStreamCreateFlagMarkSelf; -extern FSEventStreamEventFlags kFSEventStreamEventFlagOwnEvent; -#endif - - -#endif // fsevent_watch_compat_h diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/defines.h b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/defines.h deleted file mode 100644 index 6f6e87b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/defines.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef fsevent_watch_defines_h -#define fsevent_watch_defines_h - -#define _str(s) #s -#define _xstr(s) _str(s) - -#define COMPILED_AT __DATE__ " " __TIME__ - -#if defined (__clang__) -#define COMPILER "clang " __clang_version__ -#elif defined (__GNUC__) -#define COMPILER "gcc " __VERSION__ -#else -#define COMPILER "unknown" -#endif - -#if defined(__ppc__) -#define TARGET_CPU "ppc" -#elif defined(__ppc64__) -#define TARGET_CPU "ppc64" -#elif defined(__i386__) -#define TARGET_CPU "i386" -#elif defined(__x86_64__) -#define TARGET_CPU "x86_64" -#else -#define TARGET_CPU "unknown" -#endif - -#define FLAG_CHECK(flags, flag) ((flags) & (flag)) - -#define FPRINTF_FLAG_CHECK(flags, flag, msg, fd) \ - do { \ - if (FLAG_CHECK(flags, flag)) { \ - fprintf(fd, "%s", msg "\n"); } } \ - while (0) - -#define FLAG_CHECK_STDERR(flags, flag, msg) \ - FPRINTF_FLAG_CHECK(flags, flag, msg, stderr) - -#endif /* fsevent_watch_defines_h */ diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/main.c b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/main.c deleted file mode 100644 index 15d469c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/fsevent_watch/main.c +++ /dev/null @@ -1,489 +0,0 @@ -#include "common.h" -#include "cli.h" - -// TODO: set on fire. cli.{h,c} handle both parsing and defaults, so there's -// no need to set those here. also, in order to scope metadata by path, -// each stream will need its own configuration... so this won't work as -// a global any more. In the end the goal is to make the output format -// able to declare not just that something happened and what flags were -// attached, but what path it was watching that caused those events (so -// that the path itself can be used for routing that information to the -// relevant callback). -// -// Structure for storing metadata parsed from the commandline -static struct { - FSEventStreamEventId sinceWhen; - CFTimeInterval latency; - FSEventStreamCreateFlags flags; - CFMutableArrayRef paths; - enum FSEventWatchOutputFormat format; -} config = { - (UInt64) kFSEventStreamEventIdSinceNow, - (double) 0.3, - (CFOptionFlags) kFSEventStreamCreateFlagNone, - NULL, - kFSEventWatchOutputFormatClassic -}; - -// Prototypes -static void append_path(const char* path); -static inline void parse_cli_settings(int argc, const char* argv[]); -static void callback(FSEventStreamRef streamRef, - void* clientCallBackInfo, - size_t numEvents, - void* eventPaths, - const FSEventStreamEventFlags eventFlags[], - const FSEventStreamEventId eventIds[]); - - -// Resolve a path and append it to the CLI settings structure -// The FSEvents API will, internally, resolve paths using a similar scheme. -// Performing this ahead of time makes things less confusing, IMHO. -static void append_path(const char* path) -{ -#ifdef DEBUG - fprintf(stderr, "\n"); - fprintf(stderr, "append_path called for: %s\n", path); -#endif - -#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 - -#ifdef DEBUG - fprintf(stderr, "compiled against 10.6+, using CFURLCreateFileReferenceURL\n"); -#endif - - CFURLRef url = CFURLCreateFromFileSystemRepresentation(NULL, (const UInt8*)path, (CFIndex)strlen(path), false); - CFURLRef placeholder = CFURLCopyAbsoluteURL(url); - CFRelease(url); - - CFMutableArrayRef imaginary = NULL; - - // if we don't have an existing url, spin until we get to a parent that - // does exist, saving any imaginary components for appending back later - while(!CFURLResourceIsReachable(placeholder, NULL)) { -#ifdef DEBUG - fprintf(stderr, "path does not exist\n"); -#endif - - CFStringRef child; - - if (imaginary == NULL) { - imaginary = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks); - } - - child = CFURLCopyLastPathComponent(placeholder); - CFArrayInsertValueAtIndex(imaginary, 0, child); - CFRelease(child); - - url = CFURLCreateCopyDeletingLastPathComponent(NULL, placeholder); - CFRelease(placeholder); - placeholder = url; - -#ifdef DEBUG - fprintf(stderr, "parent: "); - CFShow(placeholder); -#endif - } - -#ifdef DEBUG - fprintf(stderr, "path exists\n"); -#endif - - // realpath() doesn't always return the correct case for a path, so this - // is a funky workaround that converts a path into a (volId/inodeId) pair - // and asks what the path should be for that. since it looks at the actual - // inode instead of returning the same case passed in like realpath() - // appears to do for HFS+, it should always be correct. - url = CFURLCreateFileReferenceURL(NULL, placeholder, NULL); - CFRelease(placeholder); - placeholder = CFURLCreateFilePathURL(NULL, url, NULL); - CFRelease(url); - -#ifdef DEBUG - fprintf(stderr, "path resolved to: "); - CFShow(placeholder); -#endif - - // if we stripped off any imaginary path components, append them back on - if (imaginary != NULL) { - CFIndex count = CFArrayGetCount(imaginary); - for (CFIndex i = 0; i= 6)) { - config.flags |= kFSEventStreamCreateFlagIgnoreSelf; - } else { - fprintf(stderr, "MacOSX 10.6 or later is required for --ignore-self\n"); - exit(EXIT_FAILURE); - } - } - - if (args_info.file_events_flag) { - if ((osMajorVersion == 10) & (osMinorVersion >= 7)) { - config.flags |= kFSEventStreamCreateFlagFileEvents; - } else { - fprintf(stderr, "MacOSX 10.7 or later required for --file-events\n"); - exit(EXIT_FAILURE); - } - } - - if (args_info.mark_self_flag) { - if ((osMajorVersion == 10) & (osMinorVersion >= 9)) { - config.flags |= kFSEventStreamCreateFlagMarkSelf; - } else { - fprintf(stderr, "MacOSX 10.9 or later required for --mark-self\n"); - exit(EXIT_FAILURE); - } - } - - if (args_info.inputs_num == 0) { - append_path("."); - } else { - for (unsigned int i=0; i < args_info.inputs_num; ++i) { - append_path(args_info.inputs[i]); - } - } - - cli_parser_free(&args_info); - -#ifdef DEBUG - fprintf(stderr, "config.sinceWhen %llu\n", config.sinceWhen); - fprintf(stderr, "config.latency %f\n", config.latency); - -// STFU clang -#if defined(__LP64__) - fprintf(stderr, "config.flags %#.8x\n", config.flags); -#else - fprintf(stderr, "config.flags %#.8lx\n", config.flags); -#endif - - FLAG_CHECK_STDERR(config.flags, kFSEventStreamCreateFlagUseCFTypes, - " Using CF instead of C types"); - FLAG_CHECK_STDERR(config.flags, kFSEventStreamCreateFlagNoDefer, - " NoDefer latency modifier enabled"); - FLAG_CHECK_STDERR(config.flags, kFSEventStreamCreateFlagWatchRoot, - " WatchRoot notifications enabled"); - FLAG_CHECK_STDERR(config.flags, kFSEventStreamCreateFlagIgnoreSelf, - " IgnoreSelf enabled"); - FLAG_CHECK_STDERR(config.flags, kFSEventStreamCreateFlagFileEvents, - " FileEvents enabled"); - - fprintf(stderr, "config.paths\n"); - - long numpaths = CFArrayGetCount(config.paths); - - for (long i = 0; i < numpaths; i++) { - char path[PATH_MAX]; - CFStringGetCString(CFArrayGetValueAtIndex(config.paths, i), - path, - PATH_MAX, - kCFStringEncodingUTF8); - fprintf(stderr, " %s\n", path); - } - - fprintf(stderr, "\n"); -#endif -} - -// original output format for rb-fsevent -static void classic_output_format(size_t numEvents, - char** paths) -{ - for (size_t i = 0; i < numEvents; i++) { - fprintf(stdout, "%s:", paths[i]); - } - fprintf(stdout, "\n"); -} - -// output format used in the Yoshimasa Niwa branch of rb-fsevent -static void niw_output_format(size_t numEvents, - char** paths, - const FSEventStreamEventFlags eventFlags[], - const FSEventStreamEventId eventIds[]) -{ - for (size_t i = 0; i < numEvents; i++) { - fprintf(stdout, "%lu:%llu:%s\n", - (unsigned long)eventFlags[i], - (unsigned long long)eventIds[i], - paths[i]); - } - fprintf(stdout, "\n"); -} - -static void tstring_output_format(size_t numEvents, - char** paths, - const FSEventStreamEventFlags eventFlags[], - const FSEventStreamEventId eventIds[], - TSITStringFormat format) -{ - CFMutableArrayRef events = CFArrayCreateMutable(kCFAllocatorDefault, - 0, &kCFTypeArrayCallBacks); - - for (size_t i = 0; i < numEvents; i++) { - CFMutableDictionaryRef event = CFDictionaryCreateMutable(kCFAllocatorDefault, - 0, - &kCFTypeDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks); - - CFStringRef path = CFStringCreateWithBytes(kCFAllocatorDefault, - (const UInt8*)paths[i], - (CFIndex)strlen(paths[i]), - kCFStringEncodingUTF8, - false); - CFDictionarySetValue(event, CFSTR("path"), path); - - CFNumberRef flags = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &eventFlags[i]); - CFDictionarySetValue(event, CFSTR("flags"), flags); - - CFNumberRef ident = CFNumberCreate(kCFAllocatorDefault, kCFNumberLongLongType, &eventIds[i]); - CFDictionarySetValue(event, CFSTR("id"), ident); - - CFArrayAppendValue(events, event); - - CFRelease(event); - CFRelease(path); - CFRelease(flags); - CFRelease(ident); - } - - CFMutableDictionaryRef meta = CFDictionaryCreateMutable(kCFAllocatorDefault, - 0, - &kCFTypeDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks); - CFDictionarySetValue(meta, CFSTR("events"), events); - - CFNumberRef num = CFNumberCreate(kCFAllocatorDefault, kCFNumberCFIndexType, &numEvents); - CFDictionarySetValue(meta, CFSTR("numEvents"), num); - - CFDataRef data = TSICTStringCreateRenderedDataFromObjectWithFormat(meta, format); - fprintf(stdout, "%s", CFDataGetBytePtr(data)); - - CFRelease(events); - CFRelease(num); - CFRelease(meta); - CFRelease(data); -} - -static void callback(__attribute__((unused)) FSEventStreamRef streamRef, - __attribute__((unused)) void* clientCallBackInfo, - size_t numEvents, - void* eventPaths, - const FSEventStreamEventFlags eventFlags[], - const FSEventStreamEventId eventIds[]) -{ - char** paths = eventPaths; - - -#ifdef DEBUG - fprintf(stderr, "\n"); - fprintf(stderr, "FSEventStreamCallback fired!\n"); - fprintf(stderr, " numEvents: %lu\n", numEvents); - - for (size_t i = 0; i < numEvents; i++) { - fprintf(stderr, "\n"); - fprintf(stderr, " event ID: %llu\n", eventIds[i]); - -// STFU clang -#if defined(__LP64__) - fprintf(stderr, " event flags: %#.8x\n", eventFlags[i]); -#else - fprintf(stderr, " event flags: %#.8lx\n", eventFlags[i]); -#endif - - FLAG_CHECK_STDERR(eventFlags[i], kFSEventStreamEventFlagMustScanSubDirs, - " Recursive scanning of directory required"); - FLAG_CHECK_STDERR(eventFlags[i], kFSEventStreamEventFlagUserDropped, - " Buffering problem: events dropped user-side"); - FLAG_CHECK_STDERR(eventFlags[i], kFSEventStreamEventFlagKernelDropped, - " Buffering problem: events dropped kernel-side"); - FLAG_CHECK_STDERR(eventFlags[i], kFSEventStreamEventFlagEventIdsWrapped, - " Event IDs have wrapped"); - FLAG_CHECK_STDERR(eventFlags[i], kFSEventStreamEventFlagHistoryDone, - " All historical events have been processed"); - FLAG_CHECK_STDERR(eventFlags[i], kFSEventStreamEventFlagRootChanged, - " Root path has changed"); - FLAG_CHECK_STDERR(eventFlags[i], kFSEventStreamEventFlagMount, - " A new volume was mounted at this path"); - FLAG_CHECK_STDERR(eventFlags[i], kFSEventStreamEventFlagUnmount, - " A volume was unmounted from this path"); - FLAG_CHECK_STDERR(eventFlags[i], kFSEventStreamEventFlagItemCreated, - " Item created"); - FLAG_CHECK_STDERR(eventFlags[i], kFSEventStreamEventFlagItemRemoved, - " Item removed"); - FLAG_CHECK_STDERR(eventFlags[i], kFSEventStreamEventFlagItemInodeMetaMod, - " Item metadata modified"); - FLAG_CHECK_STDERR(eventFlags[i], kFSEventStreamEventFlagItemRenamed, - " Item renamed"); - FLAG_CHECK_STDERR(eventFlags[i], kFSEventStreamEventFlagItemModified, - " Item modified"); - FLAG_CHECK_STDERR(eventFlags[i], kFSEventStreamEventFlagItemFinderInfoMod, - " Item Finder Info modified"); - FLAG_CHECK_STDERR(eventFlags[i], kFSEventStreamEventFlagItemChangeOwner, - " Item changed ownership"); - FLAG_CHECK_STDERR(eventFlags[i], kFSEventStreamEventFlagItemXattrMod, - " Item extended attributes modified"); - FLAG_CHECK_STDERR(eventFlags[i], kFSEventStreamEventFlagItemIsFile, - " Item is a file"); - FLAG_CHECK_STDERR(eventFlags[i], kFSEventStreamEventFlagItemIsDir, - " Item is a directory"); - FLAG_CHECK_STDERR(eventFlags[i], kFSEventStreamEventFlagItemIsSymlink, - " Item is a symbolic link"); - - fprintf(stderr, " event path: %s\n", paths[i]); - fprintf(stderr, "\n"); - } - - fprintf(stderr, "\n"); -#endif - - if (config.format == kFSEventWatchOutputFormatClassic) { - classic_output_format(numEvents, paths); - } else if (config.format == kFSEventWatchOutputFormatNIW) { - niw_output_format(numEvents, paths, eventFlags, eventIds); - } else if (config.format == kFSEventWatchOutputFormatTNetstring) { - tstring_output_format(numEvents, paths, eventFlags, eventIds, - kTSITStringFormatTNetstring); - } else if (config.format == kFSEventWatchOutputFormatOTNetstring) { - tstring_output_format(numEvents, paths, eventFlags, eventIds, - kTSITStringFormatOTNetstring); - } - - fflush(stdout); -} - -int main(int argc, const char* argv[]) -{ - parse_cli_settings(argc, argv); - - FSEventStreamContext context = {0, NULL, NULL, NULL, NULL}; - FSEventStreamRef stream; - stream = FSEventStreamCreate(kCFAllocatorDefault, - (FSEventStreamCallback)&callback, - &context, - config.paths, - config.sinceWhen, - config.latency, - config.flags); - -#ifdef DEBUG - FSEventStreamShow(stream); - fprintf(stderr, "\n"); -#endif - - FSEventStreamScheduleWithRunLoop(stream, - CFRunLoopGetCurrent(), - kCFRunLoopDefaultMode); - FSEventStreamStart(stream); - CFRunLoopRun(); - FSEventStreamFlushSync(stream); - FSEventStreamStop(stream); - - return 0; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/rakefile.rb b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/rakefile.rb deleted file mode 100644 index 2247ab6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/ext/rakefile.rb +++ /dev/null @@ -1,225 +0,0 @@ -# -*- encoding: utf-8 -*- -require 'rubygems' unless defined?(Gem) -require 'pathname' -require 'date' -require 'time' -require 'rake/clean' - -raise "unable to find xcodebuild" unless system('which', 'xcodebuild') - - -FSEVENT_WATCH_EXE_VERSION = '0.1.3' - -$this_dir = Pathname.new(__FILE__).dirname.expand_path -$final_exe = $this_dir.parent.join('bin/fsevent_watch') - -$src_dir = $this_dir.join('fsevent_watch') -$obj_dir = $this_dir.join('build') - -SRC = Pathname.glob("#{$src_dir}/*.c") -OBJ = SRC.map {|s| $obj_dir.join("#{s.basename('.c')}.o")} - -$now = DateTime.now.xmlschema rescue Time.now.xmlschema - -$CC = ENV['CC'] || `which clang || which gcc`.strip -$CFLAGS = ENV['CFLAGS'] || '-fconstant-cfstrings -fno-strict-aliasing -Wall' -$ARCHFLAGS = ENV['ARCHFLAGS'] || '-arch x86_64 -arch i386' -$DEFINES = "-DNS_BUILD_32_LIKE_64 -DNS_BLOCK_ASSERTIONS -DOS_OBJECT_USE_OBJC=0 -DPROJECT_VERSION=#{FSEVENT_WATCH_EXE_VERSION}" - -$GCC_C_LANGUAGE_STANDARD = ENV['GCC_C_LANGUAGE_STANDARD'] || 'gnu99' - -# generic developer id name so it'll match correctly for anyone who has only -# one developer id in their keychain (not that I expect anyone else to bother) -$CODE_SIGN_IDENTITY = 'Developer ID Application' - -$arch = `uname -m`.strip -$os_release = `uname -r`.strip -$BUILD_TRIPLE = "#{$arch}-apple-darwin#{$os_release}" - -$CCVersion = `#{$CC} --version | head -n 1`.strip - - -CLEAN.include OBJ.map(&:to_s) -CLEAN.include $obj_dir.join('Info.plist').to_s -CLEAN.include $obj_dir.join('fsevent_watch').to_s -CLOBBER.include $final_exe.to_s - - -task :sw_vers do - $mac_product_version = `sw_vers -productVersion`.strip - $mac_build_version = `sw_vers -buildVersion`.strip - $MACOSX_DEPLOYMENT_TARGET = ENV['MACOSX_DEPLOYMENT_TARGET'] || $mac_product_version.sub(/\.\d*$/, '') - $CFLAGS = "#{$CFLAGS} -mmacosx-version-min=#{$MACOSX_DEPLOYMENT_TARGET}" -end - -task :get_sdk_info => :sw_vers do - $SDK_INFO = {} - version_info = `xcodebuild -version -sdk macosx#{$MACOSX_DEPLOYMENT_TARGET}` - raise "invalid SDK" unless !!$?.exitstatus - version_info.strip.each_line do |line| - next if line.strip.empty? - next unless line.include?(':') - match = line.match(/([^:]*): (.*)/) - next unless match - $SDK_INFO[match[1]] = match[2] - end -end - -task :debug => :sw_vers do - $DEFINES = "-DDEBUG #{$DEFINES}" - $CFLAGS = "#{$CFLAGS} -O0 -fno-omit-frame-pointer -g" -end - -task :release => :sw_vers do - $DEFINES = "-DNDEBUG #{$DEFINES}" - $CFLAGS = "#{$CFLAGS} -O3" -end - -desc 'configure build type depending on whether ENV var FWDEBUG is set' -task :set_build_type => :sw_vers do - if ENV['FWDEBUG'] - Rake::Task[:debug].invoke - else - Rake::Task[:release].invoke - end -end - -desc 'set build arch to ppc' -task :ppc do - $ARCHFLAGS = '-arch ppc' -end - -desc 'set build arch to x86_64' -task :x86_64 do - $ARCHFLAGS = '-arch x86_64' -end - -desc 'set build arch to i386' -task :x86 do - $ARCHFLAGS = '-arch i386' -end - -task :setup_env => [:set_build_type, :sw_vers, :get_sdk_info] - -directory $obj_dir.to_s -file $obj_dir.to_s => :setup_env - -SRC.zip(OBJ).each do |source, object| - file object.to_s => [source.to_s, $obj_dir.to_s] do - cmd = [ - $CC, - $ARCHFLAGS, - "-std=#{$GCC_C_LANGUAGE_STANDARD}", - $CFLAGS, - $DEFINES, - "-I#{$src_dir}", - '-isysroot', - $SDK_INFO['Path'], - '-c', source, - '-o', object - ] - sh(cmd.map {|s| s.to_s}.join(' ')) - end -end - -file $obj_dir.join('Info.plist').to_s => [$obj_dir.to_s, :setup_env] do - File.open($obj_dir.join('Info.plist').to_s, 'w+') do |file| - indentation = '' - indent = lambda {|num| indentation = ' ' * num } - add = lambda {|str| file << "#{indentation}#{str}\n" } - key = lambda {|str| add["#{str}"] } - string = lambda {|str| add["#{str}"] } - - - add[''] - add[''] - add[''] - - indent[2] - add[''] - indent[4] - - key['CFBundleExecutable'] - string['fsevent_watch'] - key['CFBundleIdentifier'] - string['com.teaspoonofinsanity.fsevent_watch'] - key['CFBundleName'] - string['fsevent_watch'] - key['CFBundleDisplayName'] - string['FSEvent Watch CLI'] - key['NSHumanReadableCopyright'] - string['Copyright (C) 2011-2013 Travis Tilley'] - - key['CFBundleVersion'] - string["#{FSEVENT_WATCH_EXE_VERSION}"] - key['LSMinimumSystemVersion'] - string["#{$MACOSX_DEPLOYMENT_TARGET}"] - key['DTSDKBuild'] - string["#{$SDK_INFO['ProductBuildVersion']}"] - key['DTSDKName'] - string["macosx#{$SDK_INFO['SDKVersion']}"] - key['DTSDKPath'] - string["#{$SDK_INFO['Path']}"] - key['BuildMachineOSBuild'] - string["#{$mac_build_version}"] - key['BuildMachineOSVersion'] - string["#{$mac_product_version}"] - key['FSEWCompiledAt'] - string["#{$now}"] - key['FSEWVersionInfoBuilder'] - string["#{`whoami`.strip}"] - key['FSEWBuildTriple'] - string["#{$BUILD_TRIPLE}"] - key['FSEWCC'] - string["#{$CC}"] - key['FSEWCCVersion'] - string["#{$CCVersion}"] - key['FSEWCFLAGS'] - string["#{$CFLAGS}"] - - indent[2] - add[''] - indent[0] - - add[''] - end -end - -desc 'generate an Info.plist used for code signing as well as embedding build settings into the resulting binary' -task :plist => $obj_dir.join('Info.plist').to_s - - -file $obj_dir.join('fsevent_watch').to_s => [$obj_dir.to_s, $obj_dir.join('Info.plist').to_s] + OBJ.map(&:to_s) do - cmd = [ - $CC, - $ARCHFLAGS, - "-std=#{$GCC_C_LANGUAGE_STANDARD}", - $CFLAGS, - $DEFINES, - "-I#{$src_dir}", - '-isysroot', - $SDK_INFO['Path'], - '-framework CoreFoundation -framework CoreServices', - '-sectcreate __TEXT __info_plist', - $obj_dir.join('Info.plist') - ] + OBJ + [ - '-o', $obj_dir.join('fsevent_watch') - ] - sh(cmd.map {|s| s.to_s}.join(' ')) -end - -desc 'compile and link build/fsevent_watch' -task :build => $obj_dir.join('fsevent_watch').to_s - -desc 'codesign build/fsevent_watch binary' -task :codesign => :build do - sh "codesign -s '#{$CODE_SIGN_IDENTITY}' #{$obj_dir.join('fsevent_watch')}" -end - -desc 'replace bundled fsevent_watch binary with build/fsevent_watch' -task :replace_exe => :build do - sh "mv #{$obj_dir.join('fsevent_watch')} #{$final_exe}" -end - -task :default => [:replace_exe, :clean] - diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/lib/rb-fsevent.rb b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/lib/rb-fsevent.rb deleted file mode 100644 index 1ff68a3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/lib/rb-fsevent.rb +++ /dev/null @@ -1,3 +0,0 @@ -# -*- encoding: utf-8 -*- -require 'rb-fsevent/fsevent' -require 'rb-fsevent/version' diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/lib/rb-fsevent/fsevent.rb b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/lib/rb-fsevent/fsevent.rb deleted file mode 100644 index 05b19da..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/lib/rb-fsevent/fsevent.rb +++ /dev/null @@ -1,114 +0,0 @@ -# -*- encoding: utf-8 -*- - -class FSEvent - class << self - class_eval <<-END - def root_path - "#{File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))}" - end - END - class_eval <<-END - def watcher_path - "#{File.join(FSEvent.root_path, 'bin', 'fsevent_watch')}" - end - END - end - - attr_reader :paths, :callback - - def initialize args = nil, &block - watch(args, &block) unless args.nil? - end - - def watch(watch_paths, options=nil, &block) - @paths = watch_paths.kind_of?(Array) ? watch_paths : [watch_paths] - @callback = block - - if options.kind_of?(Hash) - @options = parse_options(options) - elsif options.kind_of?(Array) - @options = options - else - @options = [] - end - end - - def run - @pipe = open_pipe - @running = true - - # please note the use of IO::select() here, as it is used specifically to - # preserve correct signal handling behavior in ruby 1.8. - while @running && IO::select([@pipe], nil, nil, nil) - if line = @pipe.readline - modified_dir_paths = line.split(':').select { |dir| dir != "\n" } - callback.call(modified_dir_paths) - end - end - rescue Interrupt, IOError, Errno::EBADF - ensure - stop - end - - def stop - unless @pipe.nil? - Process.kill('KILL', @pipe.pid) - @pipe.close - end - rescue IOError - ensure - @running = false - end - - if RUBY_VERSION < '1.9' - def open_pipe - IO.popen("'#{self.class.watcher_path}' #{options_string} #{shellescaped_paths}") - end - - private - - def options_string - @options.join(' ') - end - - def shellescaped_paths - @paths.map {|path| shellescape(path)}.join(' ') - end - - # for Ruby 1.8.6 support - def shellescape(str) - # An empty argument will be skipped, so return empty quotes. - return "''" if str.empty? - - str = str.dup - - # Process as a single byte sequence because not all shell - # implementations are multibyte aware. - str.gsub!(/([^A-Za-z0-9_\-.,:\/@\n])/n, "\\\\\\1") - - # A LF cannot be escaped with a backslash because a backslash + LF - # combo is regarded as line continuation and simply ignored. - str.gsub!(/\n/, "'\n'") - - return str - end - else - def open_pipe - IO.popen([self.class.watcher_path] + @options + @paths) - end - end - - private - - def parse_options(options={}) - opts = [] - opts.concat(['--since-when', options[:since_when]]) if options[:since_when] - opts.concat(['--latency', options[:latency]]) if options[:latency] - opts.push('--no-defer') if options[:no_defer] - opts.push('--watch-root') if options[:watch_root] - opts.push('--file-events') if options[:file_events] - # ruby 1.9's IO.popen(array-of-stuff) syntax requires all items to be strings - opts.map {|opt| "#{opt}"} - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/lib/rb-fsevent/version.rb b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/lib/rb-fsevent/version.rb deleted file mode 100644 index 88cd363..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/lib/rb-fsevent/version.rb +++ /dev/null @@ -1,5 +0,0 @@ -# -*- encoding: utf-8 -*- - -class FSEvent - VERSION = '0.9.4' -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/rb-fsevent.gemspec b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/rb-fsevent.gemspec deleted file mode 100644 index 0d2eefc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/rb-fsevent.gemspec +++ /dev/null @@ -1,24 +0,0 @@ -# coding: utf-8 -lib = File.expand_path('../lib', __FILE__) -$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) -require "rb-fsevent/version" - -Gem::Specification.new do |s| - s.name = 'rb-fsevent' - s.version = FSEvent::VERSION - s.authors = ['Thibaud Guillaume-Gentil', 'Travis Tilley'] - s.email = ['thibaud@thibaud.gg', 'ttilley@gmail.com'] - s.homepage = 'http://rubygems.org/gems/rb-fsevent' - s.summary = 'Very simple & usable FSEvents API' - s.description = 'FSEvents API with Signals catching (without RubyCocoa)' - s.license = 'MIT' - - s.files = `git ls-files`.split($/) - s.test_files = s.files.grep(%r{^spec/}) - s.require_path = 'lib' - - s.add_development_dependency 'bundler', '~> 1.0' - s.add_development_dependency 'rspec', '~> 2.11' - s.add_development_dependency 'guard-rspec', '~> 4.2' -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/spec/fixtures/custom 'path/.gitignore b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/spec/fixtures/custom 'path/.gitignore deleted file mode 100644 index e69de29..0000000 diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/spec/fixtures/folder1/file1.txt b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/spec/fixtures/folder1/file1.txt deleted file mode 100644 index e69de29..0000000 diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/spec/fixtures/folder1/folder2/file2.txt b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/spec/fixtures/folder1/folder2/file2.txt deleted file mode 100644 index e69de29..0000000 diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/spec/rb-fsevent/fsevent_spec.rb b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/spec/rb-fsevent/fsevent_spec.rb deleted file mode 100644 index 2ca29c8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/spec/rb-fsevent/fsevent_spec.rb +++ /dev/null @@ -1,88 +0,0 @@ -require 'spec_helper' - -describe FSEvent do - - before(:each) do - @results = [] - @fsevent = FSEvent.new - @fsevent.watch @fixture_path.to_s, {:latency => 0.5} do |paths| - @results += paths - end - end - - it "shouldn't pass anything to watch when instantiated without a path" do - fsevent = FSEvent.new - fsevent.paths.should be_nil - fsevent.callback.should be_nil - end - - it "should pass path and block to watch when instantiated with them" do - blk = proc { } - fsevent = FSEvent.new(@fixture_path, &blk) - fsevent.paths.should == [@fixture_path] - fsevent.callback.should == blk - end - - it "should have a watcher_path that resolves to an executable file" do - File.exists?(FSEvent.watcher_path).should be_true - File.executable?(FSEvent.watcher_path).should be_true - end - - it "should work with path with an apostrophe" do - custom_path = @fixture_path.join("custom 'path") - file = custom_path.join("newfile.rb").to_s - File.delete file if File.exists? file - @fsevent.watch custom_path.to_s do |paths| - @results += paths - end - @fsevent.paths.should == ["#{custom_path}"] - run - FileUtils.touch file - stop - File.delete file - @results.should == [custom_path.to_s + '/'] - end - - it "should catch new file" do - file = @fixture_path.join("newfile.rb") - File.delete file if File.exists? file - run - FileUtils.touch file - stop - File.delete file - @results.should == [@fixture_path.to_s + '/'] - end - - it "should catch file update" do - file = @fixture_path.join("folder1/file1.txt") - File.exists?(file).should be_true - run - FileUtils.touch file - stop - @results.should == [@fixture_path.join("folder1/").to_s] - end - - it "should catch files update" do - file1 = @fixture_path.join("folder1/file1.txt") - file2 = @fixture_path.join("folder1/folder2/file2.txt") - File.exists?(file1).should be_true - File.exists?(file2).should be_true - run - FileUtils.touch file1 - FileUtils.touch file2 - stop - @results.should == [@fixture_path.join("folder1/").to_s, @fixture_path.join("folder1/folder2/").to_s] - end - - def run - sleep 1 - Thread.new { @fsevent.run } - sleep 1 - end - - def stop - sleep 1 - @fsevent.stop - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/spec/spec_helper.rb b/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/spec/spec_helper.rb deleted file mode 100644 index 856bb15..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-fsevent-0.9.4/spec/spec_helper.rb +++ /dev/null @@ -1,23 +0,0 @@ -require 'rspec' -require 'rb-fsevent' - -RSpec.configure do |config| - config.color_enabled = true - config.filter_run :focus => true - config.run_all_when_everything_filtered = true - - config.before(:each) do - @fixture_path = Pathname.new(File.expand_path('../fixtures/', __FILE__)) - end - - config.before(:all) do - system "cd ext; rake" - puts "fsevent_watch compiled" - end - - config.after(:all) do - gem_root = Pathname.new(File.expand_path('../../', __FILE__)) - system "rm -rf #{gem_root.join('bin')}" - end - -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/.yardopts b/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/.yardopts deleted file mode 100644 index cd347c5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/.yardopts +++ /dev/null @@ -1,4 +0,0 @@ ---readme README.md ---markup markdown ---markup-provider maruku ---no-private diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/MIT-LICENSE b/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/MIT-LICENSE deleted file mode 100644 index 9644fdb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/MIT-LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2009 Nathan Weizenbaum - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/README.md b/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/README.md deleted file mode 100644 index 5bfe6d8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# rb-inotify - -This is a simple wrapper over the [inotify](http://en.wikipedia.org/wiki/Inotify) Linux kernel subsystem -for monitoring changes to files and directories. -It uses the [FFI](http://wiki.github.com/ffi/ffi) gem to avoid having to compile a C extension. - -[API documentation is available on rdoc.info](http://rdoc.info/projects/nex3/rb-inotify). - -## Basic Usage - -The API is similar to the inotify C API, but with a more Rubyish feel. -First, create a notifier: - - notifier = INotify::Notifier.new - -Then, tell it to watch the paths you're interested in -for the events you care about: - - notifier.watch("path/to/foo.txt", :modify) {puts "foo.txt was modified!"} - notifier.watch("path/to/bar", :moved_to, :create) do |event| - puts "#{event.name} is now in path/to/bar!" - end - -Inotify can watch directories or individual files. -It can pay attention to all sorts of events; -for a full list, see [the inotify man page](http://www.tin.org/bin/man.cgi?section=7&topic=inotify). - -Finally, you get at the events themselves: - - notifier.run - -This will loop infinitely, calling the appropriate callbacks when the files are changed. -If you don't want infinite looping, -you can also block until there are available events, -process them all at once, -and then continue on your merry way: - - notifier.process - -## Advanced Usage - -Sometimes it's necessary to have finer control over the underlying IO operations -than is provided by the simple callback API. -The trick to this is that the \{INotify::Notifier#to_io Notifier#to_io} method -returns a fully-functional IO object, -with a file descriptor and everything. -This means, for example, that it can be passed to `IO#select`: - - # Wait 10 seconds for an event then give up - if IO.select([notifier.to_io], [], [], 10) - notifier.process - end - -It can even be used with EventMachine: - - require 'eventmachine' - - EM.run do - EM.watch notifier.to_io do - notifier.process - end - end - -Unfortunately, this currently doesn't work under JRuby. -JRuby currently doesn't use native file descriptors for the IO object, -so we can't use the notifier's file descriptor as a stand-in. diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/Rakefile b/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/Rakefile deleted file mode 100644 index 74c279c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/Rakefile +++ /dev/null @@ -1,54 +0,0 @@ -require 'rubygems' -require 'rake' - -begin - require 'jeweler' - Jeweler::Tasks.new do |gem| - gem.name = "rb-inotify" - gem.summary = "A Ruby wrapper for Linux's inotify, using FFI" - gem.description = gem.summary - gem.email = "nex342@gmail.com" - gem.homepage = "http://github.com/nex3/rb-inotify" - gem.authors = ["Nathan Weizenbaum"] - gem.add_dependency "ffi", ">= 0.5.0" - gem.add_development_dependency "yard", ">= 0.4.0" - end - Jeweler::GemcutterTasks.new -rescue LoadError - puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler" -end - -task(:permissions) {sh %{chmod -R a+r .}} -Rake::Task[:build].prerequisites.unshift('permissions') - -module Jeweler::VersionHelper::PlaintextExtension - def write_with_inotify - write_without_inotify - filename = File.join(File.dirname(__FILE__), "lib/rb-inotify.rb") - text = File.read(filename) - File.open(filename, 'w') do |f| - f.write text.gsub(/^( VERSION = ).*/, '\1' + [major, minor, patch].inspect) - end - end - alias_method :write_without_inotify, :write - alias_method :write, :write_with_inotify -end - -class Jeweler::Commands::Version::Base - def commit_version_with_inotify - return unless self.repo - self.repo.add(File.join(File.dirname(__FILE__), "lib/rb-inotify.rb")) - commit_version_without_inotify - end - alias_method :commit_version_without_inotify, :commit_version - alias_method :commit_version, :commit_version_with_inotify -end - -begin - require 'yard' - YARD::Rake::YardocTask.new -rescue LoadError - task :yardoc do - abort "YARD is not available. In order to run yardoc, you must: sudo gem install yard" - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/VERSION b/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/VERSION deleted file mode 100644 index 0383441..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/VERSION +++ /dev/null @@ -1 +0,0 @@ -0.9.5 \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/lib/rb-inotify.rb b/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/lib/rb-inotify.rb deleted file mode 100644 index f143f63..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/lib/rb-inotify.rb +++ /dev/null @@ -1,17 +0,0 @@ -require 'rb-inotify/native' -require 'rb-inotify/native/flags' -require 'rb-inotify/notifier' -require 'rb-inotify/watcher' -require 'rb-inotify/event' - -# The root module of the library, which is laid out as so: -# -# * {Notifier} -- The main class, where the notifications are set up -# * {Watcher} -- A watcher for a single file or directory -# * {Event} -- An filesystem event notification -module INotify - # An array containing the version number of rb-inotify. - # The numbers in the array are the major, minor, and patch versions, - # respectively. - VERSION = [0, 9, 5] -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/lib/rb-inotify/event.rb b/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/lib/rb-inotify/event.rb deleted file mode 100644 index 5eca8d5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/lib/rb-inotify/event.rb +++ /dev/null @@ -1,146 +0,0 @@ -module INotify - # An event caused by a change on the filesystem. - # Each {Watcher} can fire many events, - # which are passed to that watcher's callback. - class Event - # A list of other events that are related to this one. - # Currently, this is only used for files that are moved within the same directory: - # the `:moved_from` and the `:moved_to` events will be related. - # - # @return [Array] - attr_reader :related - - # The name of the file that the event occurred on. - # This is only set for events that occur on files in directories; - # otherwise, it's `""`. - # Similarly, if the event is being fired for the directory itself - # the name will be `""` - # - # This pathname is relative to the enclosing directory. - # For the absolute pathname, use \{#absolute\_name}. - # Note that when the `:recursive` flag is passed to {Notifier#watch}, - # events in nested subdirectories will still have a `#name` field - # relative to their immediately enclosing directory. - # For example, an event on the file `"foo/bar/baz"` - # will have name `"baz"`. - # - # @return [String] - attr_reader :name - - # The {Notifier} that fired this event. - # - # @return [Notifier] - attr_reader :notifier - - # An integer specifying that this event is related to some other event, - # which will have the same cookie. - # - # Currently, this is only used for files that are moved within the same directory. - # Both the `:moved_from` and the `:moved_to` events will have the same cookie. - # - # @private - # @return [Fixnum] - attr_reader :cookie - - # The {Watcher#id id} of the {Watcher} that fired this event. - # - # @private - # @return [Fixnum] - attr_reader :watcher_id - - # Returns the {Watcher} that fired this event. - # - # @return [Watcher] - def watcher - @watcher ||= @notifier.watchers[@watcher_id] - end - - # The absolute path of the file that the event occurred on. - # - # This is actually only as absolute as the path passed to the {Watcher} - # that created this event. - # However, it is relative to the working directory, - # assuming that hasn't changed since the watcher started. - # - # @return [String] - def absolute_name - return watcher.path if name.empty? - return File.join(watcher.path, name) - end - - # Returns the flags that describe this event. - # This is generally similar to the input to {Notifier#watch}, - # except that it won't contain options flags nor `:all_events`, - # and it may contain one or more of the following flags: - # - # `:unmount` - # : The filesystem containing the watched file or directory was unmounted. - # - # `:ignored` - # : The \{#watcher watcher} was closed, or the watched file or directory was deleted. - # - # `:isdir` - # : The subject of this event is a directory. - # - # @return [Array] - def flags - @flags ||= Native::Flags.from_mask(@native[:mask]) - end - - # Constructs an {Event} object from a string of binary data, - # and destructively modifies the string to get rid of the initial segment - # used to construct the Event. - # - # @private - # @param data [String] The string to be modified - # @param notifier [Notifier] The {Notifier} that fired the event - # @return [Event, nil] The event, or `nil` if the string is empty - def self.consume(data, notifier) - return nil if data.empty? - ev = new(data, notifier) - data.replace data[ev.size..-1] - ev - end - - # Creates an event from a string of binary data. - # Differs from {Event.consume} in that it doesn't modify the string. - # - # @private - # @param data [String] The data string - # @param notifier [Notifier] The {Notifier} that fired the event - def initialize(data, notifier) - ptr = FFI::MemoryPointer.from_string(data) - @native = Native::Event.new(ptr) - @related = [] - @cookie = @native[:cookie] - @name = fix_encoding(data[@native.size, @native[:len]].gsub(/\0+$/, '')) - @notifier = notifier - @watcher_id = @native[:wd] - - raise Exception.new("inotify event queue has overflowed.") if @native[:mask] & Native::Flags::IN_Q_OVERFLOW != 0 - end - - # Calls the callback of the watcher that fired this event, - # passing in the event itself. - # - # @private - def callback! - watcher.callback!(self) - end - - # Returns the size of this event object in bytes, - # including the \{#name} string. - # - # @return [Fixnum] - def size - @native.size + @native[:len] - end - - private - - def fix_encoding(name) - name.force_encoding('filesystem') if name.respond_to?(:force_encoding) - name - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/lib/rb-inotify/native.rb b/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/lib/rb-inotify/native.rb deleted file mode 100644 index bbe5548..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/lib/rb-inotify/native.rb +++ /dev/null @@ -1,31 +0,0 @@ -require 'ffi' - -module INotify - # This module contains the low-level foreign-function interface code - # for dealing with the inotify C APIs. - # It's an implementation detail, and not meant for users to deal with. - # - # @private - module Native - extend FFI::Library - ffi_lib FFI::Library::LIBC - - # The C struct describing an inotify event. - # - # @private - class Event < FFI::Struct - layout( - :wd, :int, - :mask, :uint32, - :cookie, :uint32, - :len, :uint32) - end - - attach_function :inotify_init, [], :int - attach_function :inotify_add_watch, [:int, :string, :uint32], :int - attach_function :inotify_rm_watch, [:int, :uint32], :int - - attach_function :read, [:int, :pointer, :size_t], :ssize_t - attach_function :close, [:int], :int - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/lib/rb-inotify/native/flags.rb b/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/lib/rb-inotify/native/flags.rb deleted file mode 100644 index da87c88..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/lib/rb-inotify/native/flags.rb +++ /dev/null @@ -1,89 +0,0 @@ -module INotify - module Native - # A module containing all the inotify flags - # to be passed to {Notifier#watch}. - # - # @private - module Flags - # File was accessed. - IN_ACCESS = 0x00000001 - # Metadata changed. - IN_ATTRIB = 0x00000004 - # Writtable file was closed. - IN_CLOSE_WRITE = 0x00000008 - # File was modified. - IN_MODIFY = 0x00000002 - # Unwrittable file closed. - IN_CLOSE_NOWRITE = 0x00000010 - # File was opened. - IN_OPEN = 0x00000020 - # File was moved from X. - IN_MOVED_FROM = 0x00000040 - # File was moved to Y. - IN_MOVED_TO = 0x00000080 - # Subfile was created. - IN_CREATE = 0x00000100 - # Subfile was deleted. - IN_DELETE = 0x00000200 - # Self was deleted. - IN_DELETE_SELF = 0x00000400 - # Self was moved. - IN_MOVE_SELF = 0x00000800 - - ## Helper events. - - # Close. - IN_CLOSE = (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) - # Moves. - IN_MOVE = (IN_MOVED_FROM | IN_MOVED_TO) - # All events which a program can wait on. - IN_ALL_EVENTS = (IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE | - IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM | IN_MOVED_TO | IN_CREATE | - IN_DELETE | IN_DELETE_SELF | IN_MOVE_SELF) - - - ## Special flags. - - # Only watch the path if it is a directory. - IN_ONLYDIR = 0x01000000 - # Do not follow a sym link. - IN_DONT_FOLLOW = 0x02000000 - # Add to the mask of an already existing watch. - IN_MASK_ADD = 0x20000000 - # Only send event once. - IN_ONESHOT = 0x80000000 - - - ## Events sent by the kernel. - - # Backing fs was unmounted. - IN_UNMOUNT = 0x00002000 - # Event queued overflowed. - IN_Q_OVERFLOW = 0x00004000 - # File was ignored. - IN_IGNORED = 0x00008000 - # Event occurred against dir. - IN_ISDIR = 0x40000000 - - # Converts a list of flags to the bitmask that the C API expects. - # - # @param flags [Array] - # @return [Fixnum] - def self.to_mask(flags) - flags.map {|flag| const_get("IN_#{flag.to_s.upcase}")}. - inject(0) {|mask, flag| mask | flag} - end - - # Converts a bitmask from the C API into a list of flags. - # - # @param mask [Fixnum] - # @return [Array] - def self.from_mask(mask) - constants.map {|c| c.to_s}.select do |c| - next false unless c =~ /^IN_/ - const_get(c) & mask != 0 - end.map {|c| c.sub("IN_", "").downcase.to_sym} - [:all_events] - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/lib/rb-inotify/notifier.rb b/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/lib/rb-inotify/notifier.rb deleted file mode 100644 index c9cecd7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/lib/rb-inotify/notifier.rb +++ /dev/null @@ -1,318 +0,0 @@ -module INotify - # Notifier wraps a single instance of inotify. - # It's possible to have more than one instance, - # but usually unnecessary. - # - # @example - # # Create the notifier - # notifier = INotify::Notifier.new - # - # # Run this callback whenever the file path/to/foo.txt is read - # notifier.watch("path/to/foo.txt", :access) do - # puts "Foo.txt was accessed!" - # end - # - # # Watch for any file in the directory being deleted - # # or moved out of the directory. - # notifier.watch("path/to/directory", :delete, :moved_from) do |event| - # # The #name field of the event object contains the name of the affected file - # puts "#{event.name} is no longer in the directory!" - # end - # - # # Nothing happens until you run the notifier! - # notifier.run - class Notifier - # A list of directories that should never be recursively watched. - # - # * Files in `/dev/fd` sometimes register as directories, but are not enumerable. - RECURSIVE_BLACKLIST = %w[/dev/fd] - - # A hash from {Watcher} ids to the instances themselves. - # - # @private - # @return [{Fixnum => Watcher}] - attr_reader :watchers - - # The underlying file descriptor for this notifier. - # This is a valid OS file descriptor, and can be used as such - # (except under JRuby -- see \{#to\_io}). - # - # @return [Fixnum] - attr_reader :fd - - # @return [Boolean] Whether or not this Ruby implementation supports - # wrapping the native file descriptor in a Ruby IO wrapper. - def self.supports_ruby_io? - RUBY_PLATFORM !~ /java/ - end - - # Creates a new {Notifier}. - # - # @return [Notifier] - # @raise [SystemCallError] if inotify failed to initialize for some reason - def initialize - @fd = Native.inotify_init - @watchers = {} - return unless @fd < 0 - - raise SystemCallError.new( - "Failed to initialize inotify" + - case FFI.errno - when Errno::EMFILE::Errno; ": the user limit on the total number of inotify instances has been reached." - when Errno::ENFILE::Errno; ": the system limit on the total number of file descriptors has been reached." - when Errno::ENOMEM::Errno; ": insufficient kernel memory is available." - else; "" - end, - FFI.errno) - end - - # Returns a Ruby IO object wrapping the underlying file descriptor. - # Since this file descriptor is fully functional (except under JRuby), - # this IO object can be used in any way a Ruby-created IO object can. - # This includes passing it to functions like `#select`. - # - # Note that this always returns the same IO object. - # Creating lots of IO objects for the same file descriptor - # can cause some odd problems. - # - # **This is not supported under JRuby**. - # JRuby currently doesn't use native file descriptors for the IO object, - # so we can't use this file descriptor as a stand-in. - # - # @return [IO] An IO object wrapping the file descriptor - # @raise [NotImplementedError] if this is being called in JRuby - def to_io - unless self.class.supports_ruby_io? - raise NotImplementedError.new("INotify::Notifier#to_io is not supported under JRuby") - end - @io ||= IO.new(@fd) - end - - # Watches a file or directory for changes, - # calling the callback when there are. - # This is only activated once \{#process} or \{#run} is called. - # - # **Note that by default, this does not recursively watch subdirectories - # of the watched directory**. - # To do so, use the `:recursive` flag. - # - # ## Flags - # - # `:access` - # : A file is accessed (that is, read). - # - # `:attrib` - # : A file's metadata is changed (e.g. permissions, timestamps, etc). - # - # `:close_write` - # : A file that was opened for writing is closed. - # - # `:close_nowrite` - # : A file that was not opened for writing is closed. - # - # `:modify` - # : A file is modified. - # - # `:open` - # : A file is opened. - # - # ### Directory-Specific Flags - # - # These flags only apply when a directory is being watched. - # - # `:moved_from` - # : A file is moved out of the watched directory. - # - # `:moved_to` - # : A file is moved into the watched directory. - # - # `:create` - # : A file is created in the watched directory. - # - # `:delete` - # : A file is deleted in the watched directory. - # - # `:delete_self` - # : The watched file or directory itself is deleted. - # - # `:move_self` - # : The watched file or directory itself is moved. - # - # ### Helper Flags - # - # These flags are just combinations of the flags above. - # - # `:close` - # : Either `:close_write` or `:close_nowrite` is activated. - # - # `:move` - # : Either `:moved_from` or `:moved_to` is activated. - # - # `:all_events` - # : Any event above is activated. - # - # ### Options Flags - # - # These flags don't actually specify events. - # Instead, they specify options for the watcher. - # - # `:onlydir` - # : Only watch the path if it's a directory. - # - # `:dont_follow` - # : Don't follow symlinks. - # - # `:mask_add` - # : Add these flags to the pre-existing flags for this path. - # - # `:oneshot` - # : Only send the event once, then shut down the watcher. - # - # `:recursive` - # : Recursively watch any subdirectories that are created. - # Note that this is a feature of rb-inotify, - # rather than of inotify itself, which can only watch one level of a directory. - # This means that the {Event#name} field - # will contain only the basename of the modified file. - # When using `:recursive`, {Event#absolute_name} should always be used. - # - # @param path [String] The path to the file or directory - # @param flags [Array] Which events to watch for - # @yield [event] A block that will be called - # whenever one of the specified events occur - # @yieldparam event [Event] The Event object containing information - # about the event that occured - # @return [Watcher] A Watcher set up to watch this path for these events - # @raise [SystemCallError] if the file or directory can't be watched, - # e.g. if the file isn't found, read access is denied, - # or the flags don't contain any events - def watch(path, *flags, &callback) - return Watcher.new(self, path, *flags, &callback) unless flags.include?(:recursive) - - dir = Dir.new(path) - - dir.each do |base| - d = File.join(path, base) - binary_d = d.respond_to?(:force_encoding) ? d.dup.force_encoding('BINARY') : d - next if binary_d =~ /\/\.\.?$/ # Current or parent directory - watch(d, *flags, &callback) if !RECURSIVE_BLACKLIST.include?(d) && File.directory?(d) - end - - dir.close - - rec_flags = [:create, :moved_to] - return watch(path, *((flags - [:recursive]) | rec_flags)) do |event| - callback.call(event) if flags.include?(:all_events) || !(flags & event.flags).empty? - next if (rec_flags & event.flags).empty? || !event.flags.include?(:isdir) - begin - watch(event.absolute_name, *flags, &callback) - rescue Errno::ENOENT - # If the file has been deleted since the glob was run, we don't want to error out. - end - end - end - - # Starts the notifier watching for filesystem events. - # Blocks until \{#stop} is called. - # - # @see #process - def run - @stop = false - process until @stop - end - - # Stop watching for filesystem events. - # That is, if we're in a \{#run} loop, - # exit out as soon as we finish handling the events. - def stop - @stop = true - end - - # Blocks until there are one or more filesystem events - # that this notifier has watchers registered for. - # Once there are events, the appropriate callbacks are called - # and this function returns. - # - # @see #run - def process - read_events.each {|event| event.callback!} - end - - # Close the notifier. - # - # @raise [SystemCallError] if closing the underlying file descriptor fails. - def close - if Native.close(@fd) == 0 - @watchers.clear - return - end - - raise SystemCallError.new("Failed to properly close inotify socket" + - case FFI.errno - when Errno::EBADF::Errno; ": invalid or closed file descriptior" - when Errno::EIO::Errno; ": an I/O error occured" - end, - FFI.errno) - end - - # Blocks until there are one or more filesystem events - # that this notifier has watchers registered for. - # Once there are events, returns their {Event} objects. - # - # {#run} or {#process} are ususally preferable to calling this directly. - def read_events - size = 64 * Native::Event.size - tries = 1 - - begin - data = readpartial(size) - rescue SystemCallError => er - # EINVAL means that there's more data to be read - # than will fit in the buffer size - raise er unless er.errno == Errno::EINVAL::Errno || tries == 5 - size *= 2 - tries += 1 - retry - end - - events = [] - cookies = {} - while event = Event.consume(data, self) - events << event - next if event.cookie == 0 - cookies[event.cookie] ||= [] - cookies[event.cookie] << event - end - cookies.each {|c, evs| evs.each {|ev| ev.related.replace(evs - [ev]).freeze}} - events - end - - private - - # Same as IO#readpartial, or as close as we need. - def readpartial(size) - # Use Ruby's readpartial if possible, to avoid blocking other threads. - return to_io.readpartial(size) if self.class.supports_ruby_io? - - tries = 0 - begin - tries += 1 - buffer = FFI::MemoryPointer.new(:char, size) - size_read = Native.read(fd, buffer, size) - return buffer.read_string(size_read) if size_read >= 0 - end while FFI.errno == Errno::EINTR::Errno && tries <= 5 - - raise SystemCallError.new("Error reading inotify events" + - case FFI.errno - when Errno::EAGAIN::Errno; ": no data available for non-blocking I/O" - when Errno::EBADF::Errno; ": invalid or closed file descriptor" - when Errno::EFAULT::Errno; ": invalid buffer" - when Errno::EINVAL::Errno; ": invalid file descriptor" - when Errno::EIO::Errno; ": I/O error" - when Errno::EISDIR::Errno; ": file descriptor is a directory" - else; "" - end, - FFI.errno) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/lib/rb-inotify/watcher.rb b/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/lib/rb-inotify/watcher.rb deleted file mode 100644 index 1205e2d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/lib/rb-inotify/watcher.rb +++ /dev/null @@ -1,88 +0,0 @@ -module INotify - # Watchers monitor a single path for changes, - # specified by {INotify::Notifier#watch event flags}. - # A watcher is usually created via \{Notifier#watch}. - # - # One {Notifier} may have many {Watcher}s. - # The Notifier actually takes care of the checking for events, - # via \{Notifier#run #run} or \{Notifier#process #process}. - # The main purpose of having Watcher objects - # is to be able to disable them using \{#close}. - class Watcher - # The {Notifier} that this Watcher belongs to. - # - # @return [Notifier] - attr_reader :notifier - - # The path that this Watcher is watching. - # - # @return [String] - attr_reader :path - - # The {INotify::Notifier#watch flags} - # specifying the events that this Watcher is watching for, - # and potentially some options as well. - # - # @return [Array] - attr_reader :flags - - # The id for this Watcher. - # Used to retrieve this Watcher from {Notifier#watchers}. - # - # @private - # @return [Fixnum] - attr_reader :id - - # Calls this Watcher's callback with the given {Event}. - # - # @private - # @param event [Event] - def callback!(event) - @callback[event] - end - - # Disables this Watcher, so that it doesn't fire any more events. - # - # @raise [SystemCallError] if the watch fails to be disabled for some reason - def close - if Native.inotify_rm_watch(@notifier.fd, @id) == 0 - @notifier.watchers.delete(@id) - return - end - - raise SystemCallError.new("Failed to stop watching #{path.inspect}", - FFI.errno) - end - - # Creates a new {Watcher}. - # - # @private - # @see Notifier#watch - def initialize(notifier, path, *flags, &callback) - @notifier = notifier - @callback = callback || proc {} - @path = path - @flags = flags.freeze - @id = Native.inotify_add_watch(@notifier.fd, path.dup, - Native::Flags.to_mask(flags)) - - unless @id < 0 - @notifier.watchers[@id] = self - return - end - - raise SystemCallError.new( - "Failed to watch #{path.inspect}" + - case FFI.errno - when Errno::EACCES::Errno; ": read access to the given file is not permitted." - when Errno::EBADF::Errno; ": the given file descriptor is not valid." - when Errno::EFAULT::Errno; ": path points outside of the process's accessible address space." - when Errno::EINVAL::Errno; ": the given event mask contains no legal events; or fd is not an inotify file descriptor." - when Errno::ENOMEM::Errno; ": insufficient kernel memory was available." - when Errno::ENOSPC::Errno; ": The user limit on the total number of inotify watches was reached or the kernel failed to allocate a needed resource." - else; "" - end, - FFI.errno) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/rb-inotify.gemspec b/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/rb-inotify.gemspec deleted file mode 100644 index 62d2b30..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rb-inotify-0.9.5/rb-inotify.gemspec +++ /dev/null @@ -1,52 +0,0 @@ -# Generated by jeweler -# DO NOT EDIT THIS FILE DIRECTLY -# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec' -# -*- encoding: utf-8 -*- - -Gem::Specification.new do |s| - s.name = "rb-inotify" - s.version = "0.9.5" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.authors = ["Nathan Weizenbaum"] - s.date = "2014-06-06" - s.description = "A Ruby wrapper for Linux's inotify, using FFI" - s.email = "nex342@gmail.com" - s.extra_rdoc_files = [ - "README.md" - ] - s.files = [ - ".yardopts", - "MIT-LICENSE", - "README.md", - "Rakefile", - "VERSION", - "lib/rb-inotify.rb", - "lib/rb-inotify/event.rb", - "lib/rb-inotify/native.rb", - "lib/rb-inotify/native/flags.rb", - "lib/rb-inotify/notifier.rb", - "lib/rb-inotify/watcher.rb", - "rb-inotify.gemspec" - ] - s.homepage = "http://github.com/nex3/rb-inotify" - s.require_paths = ["lib"] - s.rubygems_version = "2.0.3" - s.summary = "A Ruby wrapper for Linux's inotify, using FFI" - - if s.respond_to? :specification_version then - s.specification_version = 4 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_runtime_dependency(%q, [">= 0.5.0"]) - s.add_development_dependency(%q, [">= 0.4.0"]) - else - s.add_dependency(%q, [">= 0.5.0"]) - s.add_dependency(%q, [">= 0.4.0"]) - end - else - s.add_dependency(%q, [">= 0.5.0"]) - s.add_dependency(%q, [">= 0.4.0"]) - end -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/COPYING b/vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/COPYING deleted file mode 100755 index f2de0fd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/COPYING +++ /dev/null @@ -1,14 +0,0 @@ -Copyright (c) 2009, Natacha Porté -Copyright (c) 2011, Vicent Marti - -Permission to use, copy, modify, and distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/Gemfile b/vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/Gemfile deleted file mode 100644 index 8241b3f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/Gemfile +++ /dev/null @@ -1,9 +0,0 @@ -source "https://rubygems.org/" - -gemspec - -group :benchmark do - gem "benchmark-ips", "~> 1.2.0" - gem "bluecloth", "~> 2.2.0" - gem "kramdown", "~> 1.0.2" -end diff --git a/vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/README.markdown b/vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/README.markdown deleted file mode 100644 index eed9fd5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/redcarpet-3.2.3/README.markdown +++ /dev/null @@ -1,350 +0,0 @@ -Redcarpet is written with sugar, spice and everything nice -============================================================ - -[![Build Status](https://travis-ci.org/vmg/redcarpet.svg?branch=master)](https://travis-ci.org/vmg/redcarpet) - -Redcarpet is a Ruby library for Markdown processing that smells like -butterflies and popcorn. - -This library is written by people ---------------------------------- - -Redcarpet was written by [Vicent Martí](https://github.com/vmg). It is maintained by -[Robin Dupret](https://github.com/robin850) and [Matt Rogers](https://github.com/mattr-). - -Redcarpet would not be possible without the [Sundown](https://www.github.com/vmg/sundown) -library and its authors (Natacha Porté, Vicent Martí, and its many awesome contributors). - -You can totally install it as a Gem ------------------------------------ - -Redcarpet is readily available as a Ruby gem. It will build some native -extensions, but the parser is standalone and requires no installed libraries. -Starting with Redcarpet 3.0, the minimum required Ruby version is 1.9.2 (or Rubinius in 1.9 mode). - - $ [sudo] gem install redcarpet - -If you need to use it with Ruby 1.8.7, you will need to stick with 2.3.0: - - $ [sudo] gem install redcarpet -v 2.3.0 - -The Redcarpet source is available at GitHub: - - $ git clone git://github.com/vmg/redcarpet.git - - -And it's like *really* simple to use ------------------------------------- - -The core of the Redcarpet library is the `Redcarpet::Markdown` class. Each -instance of the class is attached to a `Renderer` object; the Markdown class -performs parsing of a document and uses the attached renderer to generate -output. - -The `Redcarpet::Markdown` object is encouraged to be instantiated once with the -required settings, and reused between parses. - -~~~~~ ruby -# Initializes a Markdown parser -markdown = Redcarpet::Markdown.new(renderer, extensions = {}) -~~~~~ - -Here, the `renderer` variable refers to a renderer object, inheriting -from `Redcarpet::Render::Base`. If the given object has not been -instantiated, the library will do it with default arguments. - -Rendering with the `Markdown` object is done through `Markdown#render`. -Unlike in the RedCloth API, the text to render is passed as an argument -and not stored inside the `Markdown` instance, to encourage reusability. -Example: - -~~~~~ ruby -markdown.render("This is *bongos*, indeed.") -# => "

    This is bongos, indeed.

    " -~~~~~ - -You can also specify a hash containing the Markdown extensions which the -parser will identify. The following extensions are accepted: - -* `:no_intra_emphasis`: do not parse emphasis inside of words. -Strings such as `foo_bar_baz` will not generate `` tags. - -* `:tables`: parse tables, PHP-Markdown style. - -* `:fenced_code_blocks`: parse fenced code blocks, PHP-Markdown -style. Blocks delimited with 3 or more `~` or backticks will be considered -as code, without the need to be indented. An optional language name may -be added at the end of the opening fence for the code block. - -* `:autolink`: parse links even when they are not enclosed in `<>` -characters. Autolinks for the http, https and ftp protocols will be -automatically detected. Email addresses and http links without protocol, -but starting with `www` are also handled. - -* `:disable_indented_code_blocks`: do not parse usual markdown -code blocks. Markdown converts text with four spaces at -the front of each line to code blocks. This options -prevents it from doing so. Recommended to use -with `fenced_code_blocks: true`. - -* `:strikethrough`: parse strikethrough, PHP-Markdown style. -Two `~` characters mark the start of a strikethrough, -e.g. `this is ~~good~~ bad`. - -* `:lax_spacing`: HTML blocks do not require to be surrounded by an -empty line as in the Markdown standard. - -* `:space_after_headers`: A space is always required between the hash -at the beginning of a header and its name, e.g. `#this is my header` -would not be a valid header. - -* `:superscript`: parse superscripts after the `^` character; contiguous superscripts -are nested together, and complex values can be enclosed in parenthesis, e.g. -`this is the 2^(nd) time`. - -* `:underline`: parse underscored emphasis as underlines. -`This is _underlined_ but this is still *italic*`. - -* `:highlight`: parse highlights. -`This is ==highlighted==`. It looks like this: `highlighted` - -* `:quote`: parse quotes. -`This is a "quote"`. It looks like this: `quote` - -* `:footnotes`: parse footnotes, PHP-Markdown style. A footnote works very much -like a reference-style link: it consists of a marker next to the text (e.g. -`This is a sentence.[^1]`) and a footnote definition on its own line anywhere -within the document (e.g. `[^1]: This is a footnote.`). - -Example: - -~~~ruby -markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, autolink: true, tables: true) - ~~~~~ - -Darling, I packed you a couple renderers for lunch --------------------------------------------------- - -Redcarpet comes with two built-in renderers, `Redcarpet::Render::HTML` and -`Redcarpet::Render::XHTML`, which output HTML and XHTML, respectively. These -renderers are actually implemented in C and hence offer brilliant -performance — several degrees of magnitude faster than other Ruby Markdown -solutions. - -All the rendering flags that previously applied only to HTML output have -now been moved to the `Redcarpet::Render::HTML` class, and may be enabled when -instantiating the renderer: - -~~~~~ ruby -Redcarpet::Render::HTML.new(render_options = {}) -~~~~~ - -Initializes an HTML renderer. The following flags are available: - -* `:filter_html`: do not allow any user-inputted HTML in the output. - -* `:no_images`: do not generate any `` tags. - -* `:no_links`: do not generate any `` tags. - -* `:no_styles`: do not generate any ` - - diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/http b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/http deleted file mode 100644 index 28bc750..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/http +++ /dev/null @@ -1,14 +0,0 @@ -POST /demo/submit/ HTTP/1.1 -Host: rouge.jneen.net -Cache-Control: max-age=0 -Origin: http://rouge.jayferd.us -User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) - AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7 -Content-Type: application/json -Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 -Referer: http://pygments.org/ -Accept-Encoding: gzip,deflate,sdch -Accept-Language: en-US,en;q=0.8 -Accept-Charset: windows-949,utf-8;q=0.7,*;q=0.3 - -{"name":"test","lang":"text","boring":true} diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/ini b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/ini deleted file mode 100644 index f600c91..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/ini +++ /dev/null @@ -1,4 +0,0 @@ -; last modified 1 April 2001 by John Doe -[owner] -name=John Doe -organization=Acme Widgets Inc. diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/io b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/io deleted file mode 100644 index 05f0a20..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/io +++ /dev/null @@ -1,11 +0,0 @@ -bottle := method(i, - if(i==0, return "no more bottles of beer") - if(i==1, return "1 bottle of beer") - return i asString .. " bottles of beer" -) - -for(i, 99, 1, -1, - write(bottle(i), " on the wall, ", bottle(i), ",\n") - write("take one down, pass it around,\n") - write(bottle(i - 1), " on the wall.\n\n") -) diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/java b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/java deleted file mode 100644 index 0cca61e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/java +++ /dev/null @@ -1,5 +0,0 @@ -public class java { - public static void main(String[] args) { - System.out.println("Hello World"); - } -} diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/javascript b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/javascript deleted file mode 100644 index 134a70e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/javascript +++ /dev/null @@ -1 +0,0 @@ -$(document).ready(function() { alert('ready!'); }); diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/json b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/json deleted file mode 100644 index eead967..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/json +++ /dev/null @@ -1 +0,0 @@ -{ "one": 1, "two": 2, "null": null, "simple": true } diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/json-doc b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/json-doc deleted file mode 100644 index a2a57fe..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/json-doc +++ /dev/null @@ -1 +0,0 @@ -{ "one": 1, "two": 2, "null": null, "simple": true } // a simple json object diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/liquid b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/liquid deleted file mode 100644 index ec57021..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/liquid +++ /dev/null @@ -1,11 +0,0 @@ -
      - {% for product in products %} -
    • -

      {{ product.title }}

      - Only {{ product.price | format_as_money }} - -

      {{ product.description | prettyprint | truncate: 200 }}

      - -
    • - {% endfor %} -
    diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/literate_coffeescript b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/literate_coffeescript deleted file mode 100644 index 0e5f25f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/literate_coffeescript +++ /dev/null @@ -1,3 +0,0 @@ -Import the helpers we plan to use. - - {extend, last} = require './helpers' diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/literate_haskell b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/literate_haskell deleted file mode 100644 index 10e7535..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/literate_haskell +++ /dev/null @@ -1,7 +0,0 @@ -In Bird-style you have to leave a blank before the code. - -> fact :: Integer -> Integer -> fact 0 = 1 -> fact n = n * fact (n-1) - -And you have to leave a blank line after the code as well. diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/llvm b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/llvm deleted file mode 100644 index c4596a8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/llvm +++ /dev/null @@ -1,20 +0,0 @@ -; copied from http://llvm.org/docs/LangRef.html#module-structure -; Declare the string constant as a global constant. -@.str = private unnamed_addr constant [13 x i8] c"hello world\0A\00" - -; External declaration of the puts function -declare i32 @puts(i8* nocapture) nounwind - -; Definition of main function -define i32 @main() { ; i32()* - ; Convert [13 x i8]* to i8 *... - %cast210 = getelementptr [13 x i8]* @.str, i64 0, i64 0 - - ; Call puts function to write out the string to stdout. - call i32 @puts(i8* %cast210) - ret i32 0 -} - -; Named metadata -!1 = metadata !{i32 42} -!foo = !{!1, null} diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/lua b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/lua deleted file mode 100644 index 2abebae..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/lua +++ /dev/null @@ -1,12 +0,0 @@ --- defines a factorial function -function fact (n) - if n == 0 then - return 1 - else - return n * fact(n-1) - end -end - -print("enter a number:") -a = io.read("*number") -- read a number -print(fact(a)) diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/make b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/make deleted file mode 100644 index cdac715..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/make +++ /dev/null @@ -1,6 +0,0 @@ -.PHONY: all -all: $(OBJ) - -$(OBJ): $(SOURCE) - @echo "compiling..." - $(GCC) $(CFLAGS) $< > $@ diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/markdown b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/markdown deleted file mode 100644 index 5e36314..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/markdown +++ /dev/null @@ -1,4 +0,0 @@ -Markdown has cool [reference links][ref 1] -and [regular links too](http://example.com) - -[ref 1]: http://example.com diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/matlab b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/matlab deleted file mode 100644 index 3777fb5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/matlab +++ /dev/null @@ -1,6 +0,0 @@ -A = cat( 3, [1 2 3; 9 8 7; 4 6 5], [0 3 2; 8 8 4; 5 3 5], ... - [6 4 7; 6 8 5; 5 4 3]); -% The EIG function is applied to each of the horizontal 'slices' of A. -for i = 1:3 - eig(squeeze(A(i,:,:))) -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/moonscript b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/moonscript deleted file mode 100644 index 4c8511d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/moonscript +++ /dev/null @@ -1,16 +0,0 @@ -util = require "my.module" - -a_table = { - foo: 'bar' - interpolated: "foo-#{other.stuff 2 + 3}" - "string": 2 - do: 'keyword' -} - -class MyClass extends SomeClass - new: (@init, arg2 = 'default') => - @derived = @init + 2 - super! - - other: => - @foo + 2 diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/nginx b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/nginx deleted file mode 100644 index 0288770..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/nginx +++ /dev/null @@ -1,5 +0,0 @@ -server { - listen 80; - server_name example.com *.example.com; - rewrite ^ http://www.domain.com$request_uri? permanent; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/nim b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/nim deleted file mode 100644 index 74498cd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/nim +++ /dev/null @@ -1,27 +0,0 @@ -import math,strutils - -proc fixedWidth(input: string, minFieldSize: int):string {.inline.} = - # Note that field size is a minimum- will expand field if input - # string is larger - if input.startsWith("-"): - return(input & repeatchar(count=(abs(minFieldSize-len(input))),c=' ')) - else: - return(" " & input & repeatchar(count=(abs(minFieldSize-len(input))-1),c=' ')) - -template mathOnInterval(lowbound,highbound:float,counts: int,p:proc) = - block: - var step: float = (highbound - lowbound)/(max(counts,1)) - var current: float = lowbound - while current < highbound: - echo($fixedWidth($current,25) & ": " & $fixedWidth($p(current),25)) - current += step - -echo "Sine of theta from 0 to 2*PI by PI/12" -mathOnInterval(0.0,2.0*PI,12,sin) -echo("\n") -echo "Cosine of theta from 0 to 2*PI by PI/12" -mathOnInterval(0.0,2.0*PI,12,cos) - -# The first example above is much the same as: -# for i in 1..100: -# echo($sin( (float(i)/100.0) * 2.0*PI )) diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/objective_c b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/objective_c deleted file mode 100644 index 58ed7ce..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/objective_c +++ /dev/null @@ -1,14 +0,0 @@ -@interface Person : NSObject { - @public - NSString *name; - @private - int age; -} - -@property(copy) NSString *name; -@property(readonly) int age; - --(id)initWithAge:(int)age; -@end - -NSArray *arrayLiteral = @[@"abc", @1]; diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/ocaml b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/ocaml deleted file mode 100644 index e09cf09..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/ocaml +++ /dev/null @@ -1,12 +0,0 @@ -(* Binary tree with leaves car­rying an integer. *) -type tree = Leaf of int | Node of tree * tree - -let rec exists_leaf test tree = - match tree with - | Leaf v -> test v - | Node (left, right) -> - exists_leaf test left - || exists_leaf test right - -let has_even_leaf tree = - exists_leaf (fun n -> n mod 2 = 0) tree diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/perl b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/perl deleted file mode 100644 index a966445..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/perl +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env perl -use warnings; -print "a: "; -my $a = "foo"; -print $a; diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/php b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/php deleted file mode 100644 index 7ca7fe6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/php +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/plaintext b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/plaintext deleted file mode 100644 index 60180f7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/plaintext +++ /dev/null @@ -1 +0,0 @@ -plain text :) diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/powershell b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/powershell deleted file mode 100644 index a03a692..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/powershell +++ /dev/null @@ -1,49 +0,0 @@ -Function Get-IPv4Scopes -<# - .SYNOPSIS - Read IPv4Scopes from an array of servers - .PARAMETER Servers - Specifies an array of servers - .EXAMPLE - Get-IPv4Scopes - - Will prompt for all inputs -#> -{ - [CmdletBinding()] - Param( - # 1 - [parameter( - Mandatory=$true, - Position=0, - ValueFromPipelineByPropertyName=$true, - HelpMessage="Server List" - )] - [string[]]$Servers, - #2 - [parameter(Mandatory=$false,ValueFromPipeline=$false)] - [bool]$Unique=$false - ) #EndParam - - Begin {} - - Process { - $arrayJobs=@() - foreach ($server in $Servers) { - $arrayJobs+=Invoke-Command -ComputerName $server -scriptblock {Get-DhcpServerv4Scope} -AsJob - } - $complete=$false - while (-not $complete) { - $arrayJobsInProgress= $arrayJobs | Where-Object { $_.State -match 'running' } - if (-not $arrayJobsInProgress) { $complete=$true } - } - $Scopes=$arrayJobs|Receive-Job - $UniqueScopes=$Scopes|Sort-Object -Property ScopeId -Unique - } - - End { - if ($Unique) { return $UniqueScopes } - else { return $Scopes } - } - -} #end function diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/prolog b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/prolog deleted file mode 100644 index 8430e6b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/prolog +++ /dev/null @@ -1,9 +0,0 @@ -diff(plus(A,B), X, plus(DA, DB)) - <= diff(A, X, DA) and diff(B, X, DB). - -diff(times(A,B), X, plus(times(A, DB), times(DA, B))) - <= diff(A, X, DA) and diff(B, X, DB). - -equal(X, X). -diff(X, X, 1). -diff(Y, X, 0) <= not equal(Y, X). diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/properties b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/properties deleted file mode 100644 index b5b717d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/properties +++ /dev/null @@ -1,7 +0,0 @@ -# You are reading the ".properties" entry. -! The exclamation mark can also mark text as comments. -website = http\://en.wikipedia.org/ -language = English -country : Poland -continent=Europe -key.with.dots=This is the value that could be looked up with the key "key.with.dots". diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/puppet b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/puppet deleted file mode 100644 index 621d9c9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/puppet +++ /dev/null @@ -1,6 +0,0 @@ -service { 'ntp': - name => $service_name, - ensure => running, - enable => true, - subscribe => File['ntp.conf'], -} diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/python b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/python deleted file mode 100644 index 77a5cb3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/python +++ /dev/null @@ -1,6 +0,0 @@ -def fib(n): # write Fibonacci series up to n - """Print a Fibonacci series up to n.""" - a, b = 0, 1 - while a < n: - print a, - a, b = b, a+b diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/qml b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/qml deleted file mode 100644 index 9aacda6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/qml +++ /dev/null @@ -1,9 +0,0 @@ -import QtQuick 2.0 -Item { - width: 200 - height: 100 - MouseArea { - anchors.fill: parent - onClicked: Qt.quit() - } -} diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/r b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/r deleted file mode 100644 index b6804b0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/r +++ /dev/null @@ -1,8 +0,0 @@ -dbenford <- function(x){ - log10(1 + 1/x) -} - -pbenford <- function(q){ - cumprobs <- cumsum(dbenford(1:9)) - return(cumprobs[q]) -} diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/racket b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/racket deleted file mode 100644 index bd99818..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/racket +++ /dev/null @@ -1,24 +0,0 @@ -#lang racket - -;; draw a graph of cos and deriv^3(cos) -(require plot) -(define ((deriv f) x) - (/ (- (f x) (f (- x 0.001))) 0.001)) -(define (thrice f) (lambda (x) (f (f (f x))))) -(plot (list (function ((thrice deriv) sin) -5 5) - (function cos -5 5 #:color 'blue))) - -;; Print the Greek alphabet -(for ([i (in-range 25)]) - (displayln - (integer->char - (+ i (char->integer #\u3B1))))) - -;; An echo server -(define listener (tcp-listen 12345)) -(let echo-server () - (define-values (in out) (tcp-accept listener)) - (thread (λ () - (copy-port in out) - (close-output-port out))) - (echo-server)) diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/ruby b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/ruby deleted file mode 100644 index be609a1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/ruby +++ /dev/null @@ -1,9 +0,0 @@ -class Greeter - def initialize(name="World") - @name = name - end - - def say_hi - puts "Hi #{@name}!" - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/rust b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/rust deleted file mode 100644 index b73b162..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/rust +++ /dev/null @@ -1,12 +0,0 @@ -use core::*; - -fn main() { - for ["Alice", "Bob", "Carol"].each |&name| { - do task::spawn { - let v = rand::Rng().shuffle([1, 2, 3]); - for v.each |&num| { - io::print(fmt!("%s says: '%d'\n", name, num)) - } - } - } -} diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/sass b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/sass deleted file mode 100644 index 1e768de..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/sass +++ /dev/null @@ -1,3 +0,0 @@ -@for $i from 1 through 3 - .item-#{$i} - width: 2em * $i diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/scala b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/scala deleted file mode 100644 index 75f19ee..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/scala +++ /dev/null @@ -1,3 +0,0 @@ -class Greeter(name: String = "World") { - def sayHi() { println("Hi " + name + "!") } -} diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/scheme b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/scheme deleted file mode 100644 index c9c4dbd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/scheme +++ /dev/null @@ -1,4 +0,0 @@ -(define Y - (lambda (m) - ((lambda (f) (m (lambda (a) ((f f) a)))) - (lambda (f) (m (lambda (a) ((f f) a))))))) diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/scss b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/scss deleted file mode 100644 index 3f259a7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/scss +++ /dev/null @@ -1,5 +0,0 @@ -@for $i from 1 through 3 { - .item-#{$i} { - width: 2em * $i; - } -} diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/sed b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/sed deleted file mode 100644 index 4683cd3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/sed +++ /dev/null @@ -1,4 +0,0 @@ -/begin/,/end/ { - /begin/n # skip over the line that has "begin" on it - s/old/new/ -} diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/shell b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/shell deleted file mode 100644 index f01fe48..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/shell +++ /dev/null @@ -1,2 +0,0 @@ -# If not running interactively, don't do anything -[[ -z "$PS1" ]] && return diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/slim b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/slim deleted file mode 100644 index 215a4e2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/slim +++ /dev/null @@ -1,17 +0,0 @@ -doctype html -html - body - h1 Markup examples - #content - p - | Slim can have #{ruby_code} interpolated! - /[if IE] - javascript: - alert('Slim supports embedded javascript!') - - - unless items.empty? - table - - for item in items do - tr - td.name = item.name - td.price = item.price diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/smalltalk b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/smalltalk deleted file mode 100644 index af97161..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/smalltalk +++ /dev/null @@ -1,6 +0,0 @@ -quadMultiply: i1 and: i2 - "This method multiplies the given numbers by each other - and the result by 4." - | mul | - mul := i1 * i2. - ^mul * 4 diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/sml b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/sml deleted file mode 100644 index 02a57d3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/sml +++ /dev/null @@ -1,4 +0,0 @@ -datatype shape - = Circle of loc * real (* center and radius *) - | Square of loc * real (* upper-left corner and side length; axis-aligned *) - | Triangle of loc * loc * loc (* corners *) diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/sql b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/sql deleted file mode 100644 index 45a7a17..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/sql +++ /dev/null @@ -1 +0,0 @@ -SELECT * FROM `users` WHERE `user`.`id` = 1 diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/swift b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/swift deleted file mode 100644 index 0c54ed2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/swift +++ /dev/null @@ -1,5 +0,0 @@ -// Say hello to poeple -func sayHello(personName: String) -> String { - let greeting = "Hello, " + personName + "!" - return greeting -} diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/tcl b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/tcl deleted file mode 100644 index 9bbe87c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/tcl +++ /dev/null @@ -1 +0,0 @@ -proc cross_sum {s} {expr [join [split $s ""] +]} diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/tex b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/tex deleted file mode 100644 index 430510f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/tex +++ /dev/null @@ -1 +0,0 @@ -To write \LaTeX\ you would type \verb:\LaTeX:. diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/toml b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/toml deleted file mode 100644 index 40c11c1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/toml +++ /dev/null @@ -1,9 +0,0 @@ -# This is a TOML document. Boom. - -title = "TOML Example" - -[owner] -name = "Tom Preston-Werner" -organization = "GitHub" -bio = "GitHub Cofounder & CEO\nLikes tater tots and beer." -dob = 1979-05-27T07:32:00Z # First class dates? Why not? diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/tulip b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/tulip deleted file mode 100644 index 1bb7355..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/tulip +++ /dev/null @@ -1,14 +0,0 @@ -# ref.tlp -@module ref - -ref value = Instance (spawn [! loop value ]) - -loop value = receive [ - .set new-value => loop new-value - p, .get => (send p value; loop value) -] - -@module Instance pid [ - set val = .set val > send pid - get! = .get > send-wait pid -] diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/vb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/vb deleted file mode 100644 index f7e323d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/vb +++ /dev/null @@ -1,4 +0,0 @@ -Private Sub Form_Load() - ' Execute a simple message box that says "Hello, World!" - MsgBox "Hello, World!" -End Sub diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/viml b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/viml deleted file mode 100644 index 9393d9b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/viml +++ /dev/null @@ -1,5 +0,0 @@ -set encoding=utf-8 - -filetype off -call pathogen#runtime_append_all_bundles() -filetype plugin indent on diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/xml b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/xml deleted file mode 100644 index 149844b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/yaml b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/yaml deleted file mode 100644 index 2f622de..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/demos/yaml +++ /dev/null @@ -1,4 +0,0 @@ ---- -one: Mark McGwire -two: Sammy Sosa -three: Ken Griffey diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/formatter.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/formatter.rb deleted file mode 100644 index 646ae8d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/formatter.rb +++ /dev/null @@ -1,50 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - # A Formatter takes a token stream and formats it for human viewing. - class Formatter - # @private - REGISTRY = {} - - # Specify or get the unique tag for this formatter. This is used - # for specifying a formatter in `rougify`. - def self.tag(tag=nil) - return @tag unless tag - REGISTRY[tag] = self - - @tag = tag - end - - # Find a formatter class given a unique tag. - def self.find(tag) - REGISTRY[tag] - end - - # Format a token stream. Delegates to {#format}. - def self.format(tokens, opts={}, &b) - new(opts).format(tokens, &b) - end - - # Format a token stream. - def format(tokens, &b) - return stream(tokens, &b) if block_given? - - out = '' - stream(tokens) { |piece| out << piece } - - out - end - - # @deprecated Use {#format} instead. - def render(tokens) - warn 'Formatter#render is deprecated, use #format instead.' - format(tokens) - end - - # @abstract - # yield strings that, when concatenated, form the formatted output - def stream(tokens, &b) - raise 'abstract' - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/formatters/html.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/formatters/html.rb deleted file mode 100644 index cdc8a2d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/formatters/html.rb +++ /dev/null @@ -1,117 +0,0 @@ -# -*- coding: utf-8 -*- # - -# stdlib -require 'cgi' - -module Rouge - module Formatters - # Transforms a token stream into HTML output. - class HTML < Formatter - tag 'html' - - # @option opts [String] :css_class ('highlight') - # @option opts [true/false] :line_numbers (false) - # @option opts [Rouge::CSSTheme] :inline_theme (nil) - # @option opts [true/false] :wrap (true) - # - # Initialize with options. - # - # If `:inline_theme` is given, then instead of rendering the - # tokens as tags with CSS classes, the styles according to - # the given theme will be inlined in "style" attributes. This is - # useful for formats in which stylesheets are not available. - # - # Content will be wrapped in a tag (`div` if tableized, `pre` if - # not) with the given `:css_class` unless `:wrap` is set to `false`. - def initialize(opts={}) - @css_class = opts.fetch(:css_class, 'highlight') - @css_class = " class=#{@css_class.inspect}" if @css_class - - @line_numbers = opts.fetch(:line_numbers, false) - @start_line = opts.fetch(:start_line, 1) - @inline_theme = opts.fetch(:inline_theme, nil) - @inline_theme = Theme.find(@inline_theme).new if @inline_theme.is_a? String - - @wrap = opts.fetch(:wrap, true) - end - - # @yield the html output. - def stream(tokens, &b) - if @line_numbers - stream_tableized(tokens, &b) - else - stream_untableized(tokens, &b) - end - end - - private - def stream_untableized(tokens, &b) - yield "" if @wrap - tokens.each{ |tok, val| span(tok, val, &b) } - yield "
    \n" if @wrap - end - - def stream_tableized(tokens) - num_lines = 0 - last_val = '' - formatted = '' - - tokens.each do |tok, val| - last_val = val - num_lines += val.scan(/\n/).size - span(tok, val) { |str| formatted << str } - end - - # add an extra line for non-newline-terminated strings - if last_val[-1] != "\n" - num_lines += 1 - span(Token::Tokens::Text::Whitespace, "\n") { |str| formatted << str } - end - - # generate a string of newline-separated line numbers for the gutter> - numbers = %<
    #{(@start_line..num_lines+@start_line-1)
    -          .to_a.join("\n")}
    > - - yield "" if @wrap - yield '' - - # the "gl" class applies the style for Generic.Lineno - yield '' - - yield '' - - yield "
    ' - yield numbers - yield '' - yield '
    '
    -        yield formatted
    -        yield '
    ' - yield '
    \n" - yield "\n" if @wrap - end - - TABLE_FOR_ESCAPE_HTML = { - '&' => '&', - '<' => '<', - '>' => '>', - } - - def span(tok, val) - val = val.gsub(/[&<>]/, TABLE_FOR_ESCAPE_HTML) - shortname = tok.shortname or raise "unknown token: #{tok.inspect} for #{val.inspect}" - - if shortname.empty? - yield val - else - if @inline_theme - rules = @inline_theme.style_for(tok).rendered_rules - - yield "#{val}" - else - yield "#{val}" - end - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/formatters/html_inline.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/formatters/html_inline.rb deleted file mode 100644 index 293ac81..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/formatters/html_inline.rb +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Formatters - class HTMLInline < HTML - def initialize(theme) - @theme = theme - end - - def safe_span(tok, safe_val) - return safe_val if tok == Token::Tokens::Text - - rules = @inline_theme.style_for(tok).rendered_rules - - "#{safe_val}" - end - end - end -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/formatters/html_linewise.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/formatters/html_linewise.rb deleted file mode 100644 index c6cb545..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/formatters/html_linewise.rb +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Formatters - class HTMLLinewise < Formatter - def initialize(formatter, opts={}) - @formatter = formatter - @class_format = opts.fetch(:class, '%i') - end - - def stream(tokens, &b) - yield "" - tokens.each do |tok, val| - val.scan /\n|[^\n]+/ do |s| - if s == "\n" - yield "\n" - else - @formatter.span(tok, s) - end - end - end - yield "" - end - - def next_line_class - @lineno ||= -1 - sprintf(@class_format, @lineno += 1).inspect - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/formatters/null.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/formatters/null.rb deleted file mode 100644 index 04f1ba0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/formatters/null.rb +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Formatters - # A formatter which renders nothing. - class Null < Formatter - tag 'null' - - def initialize(*) - end - - def stream(tokens, &b) - tokens.each do |tok, val| - yield "#{tok} #{val.inspect}\n" - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/formatters/terminal256.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/formatters/terminal256.rb deleted file mode 100644 index 5a2e6e5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/formatters/terminal256.rb +++ /dev/null @@ -1,176 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Formatters - # A formatter for 256-color terminals - class Terminal256 < Formatter - tag 'terminal256' - - # @private - attr_reader :theme - - - # @option opts :theme - # (default is thankful_eyes) the theme to render with. - def initialize(opts={}) - @theme = opts[:theme] || 'thankful_eyes' - @theme = Theme.find(@theme) if @theme.is_a? String - end - - def stream(tokens, &b) - tokens.each do |tok, val| - escape = escape_sequence(tok) - yield escape.style_string - yield val.gsub("\n", "\n#{escape.style_string}") - yield escape.reset_string - end - end - - class EscapeSequence - attr_reader :style - def initialize(style) - @style = style - end - - def self.xterm_colors - @xterm_colors ||= [].tap do |out| - # colors 0..15: 16 basic colors - out << [0x00, 0x00, 0x00] # 0 - out << [0xcd, 0x00, 0x00] # 1 - out << [0x00, 0xcd, 0x00] # 2 - out << [0xcd, 0xcd, 0x00] # 3 - out << [0x00, 0x00, 0xee] # 4 - out << [0xcd, 0x00, 0xcd] # 5 - out << [0x00, 0xcd, 0xcd] # 6 - out << [0xe5, 0xe5, 0xe5] # 7 - out << [0x7f, 0x7f, 0x7f] # 8 - out << [0xff, 0x00, 0x00] # 9 - out << [0x00, 0xff, 0x00] # 10 - out << [0xff, 0xff, 0x00] # 11 - out << [0x5c, 0x5c, 0xff] # 12 - out << [0xff, 0x00, 0xff] # 13 - out << [0x00, 0xff, 0xff] # 14 - out << [0xff, 0xff, 0xff] # 15 - - # colors 16..232: the 6x6x6 color cube - valuerange = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff] - - 217.times do |i| - r = valuerange[(i / 36) % 6] - g = valuerange[(i / 6) % 6] - b = valuerange[i % 6] - out << [r, g, b] - end - - # colors 233..253: grayscale - 1.upto 22 do |i| - v = 8 + i * 10 - out << [v, v, v] - end - end - end - - def fg - return @fg if instance_variable_defined? :@fg - @fg = style.fg && self.class.color_index(style.fg) - end - - def bg - return @bg if instance_variable_defined? :@bg - @bg = style.bg && self.class.color_index(style.bg) - end - - def style_string - @style_string ||= begin - attrs = [] - - attrs << ['38', '5', fg.to_s] if fg - attrs << ['48', '5', bg.to_s] if bg - attrs << '01' if style[:bold] - attrs << '04' if style[:italic] # underline, but hey, whatevs - escape(attrs) - end - end - - def reset_string - @reset_string ||= begin - attrs = [] - attrs << '39' if fg # fg reset - attrs << '49' if bg # bg reset - attrs << '00' if style[:bold] || style[:italic] - - escape(attrs) - end - end - - private - def escape(attrs) - return '' if attrs.empty? - "\e[#{attrs.join(';')}m" - end - - def self.color_index(color) - @color_index_cache ||= {} - @color_index_cache[color] ||= closest_color(*get_rgb(color)) - end - - def self.get_rgb(color) - color = $1 if color =~ /#([0-9a-f]+)/i - hexes = case color.size - when 3 - color.chars.map { |c| "#{c}#{c}" } - when 6 - color.scan(/../) - else - raise "invalid color: #{color}" - end - - hexes.map { |h| h.to_i(16) } - end - - # max distance between two colors, #000000 to #ffffff - MAX_DISTANCE = 257 * 257 * 3 - - def self.closest_color(r, g, b) - @@colors_cache ||= {} - key = (r << 16) + (g << 8) + b - @@colors_cache.fetch(key) do - distance = MAX_DISTANCE - - match = 0 - - xterm_colors.each_with_index do |(cr, cg, cb), i| - d = (r - cr)**2 + (g - cg)**2 + (b - cb)**2 - next if d >= distance - - match = i - distance = d - end - - match - end - end - end - - # private - def escape_sequence(token) - @escape_sequences ||= {} - @escape_sequences[token.name] ||= - EscapeSequence.new(get_style(token)) - end - - def get_style(token) - return text_style if token.ancestors.include? Token::Tokens::Text - - theme.get_own_style(token) || text_style - end - - def text_style - style = theme.get_style(Token['Text']) - # don't highlight text backgrounds - style.delete :bg - style - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexer.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexer.rb deleted file mode 100644 index de56703..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexer.rb +++ /dev/null @@ -1,443 +0,0 @@ -# -*- coding: utf-8 -*- # - -# stdlib -require 'strscan' -require 'cgi' -require 'set' - -module Rouge - # @abstract - # A lexer transforms text into a stream of `[token, chunk]` pairs. - class Lexer - include Token::Tokens - - class << self - # Lexes `stream` with the given options. The lex is delegated to a - # new instance. - # - # @see #lex - def lex(stream, opts={}, &b) - new(opts).lex(stream, &b) - end - - def default_options(o={}) - @default_options ||= {} - @default_options.merge!(o) - @default_options - end - - # Given a string, return the correct lexer class. - def find(name) - registry[name.to_s] - end - - # Find a lexer, with fancy shiny features. - # - # * The string you pass can include CGI-style options - # - # Lexer.find_fancy('erb?parent=tex') - # - # * You can pass the special name 'guess' so we guess for you, - # and you can pass a second argument of the code to guess by - # - # Lexer.find_fancy('guess', "#!/bin/bash\necho Hello, world") - # - # This is used in the Redcarpet plugin as well as Rouge's own - # markdown lexer for highlighting internal code blocks. - # - def find_fancy(str, code=nil) - name, opts = str ? str.split('?', 2) : [nil, ''] - - # parse the options hash from a cgi-style string - opts = CGI.parse(opts || '').map do |k, vals| - [ k.to_sym, vals.empty? ? true : vals[0] ] - end - - opts = Hash[opts] - - lexer_class = case name - when 'guess', nil - self.guess(:source => code, :mimetype => opts[:mimetype]) - when String - self.find(name) - end - - lexer_class && lexer_class.new(opts) - end - - # Specify or get this lexer's title. Meant to be human-readable. - def title(t=nil) - if t.nil? - t = tag.capitalize - end - @title ||= t - end - - # Specify or get this lexer's description. - def desc(arg=:absent) - if arg == :absent - @desc - else - @desc = arg - end - end - - # Specify or get the path name containing a small demo for - # this lexer (can be overriden by {demo}). - def demo_file(arg=:absent) - return @demo_file = Pathname.new(arg) unless arg == :absent - - @demo_file = Pathname.new(__FILE__).dirname.join('demos', tag) - end - - # Specify or get a small demo string for this lexer - def demo(arg=:absent) - return @demo = arg unless arg == :absent - - @demo = File.read(demo_file, encoding: 'utf-8') - end - - # @return a list of all lexers. - def all - registry.values.uniq - end - - # Guess which lexer to use based on a hash of info. - # - # This accepts the same arguments as Lexer.guess, but will never throw - # an error. It will return a (possibly empty) list of potential lexers - # to use. - def guesses(info={}) - mimetype, filename, source = info.values_at(:mimetype, :filename, :source) - lexers = registry.values.uniq - total_size = lexers.size - - lexers = filter_by_mimetype(lexers, mimetype) if mimetype - return lexers if lexers.size == 1 - - lexers = filter_by_filename(lexers, filename) if filename - return lexers if lexers.size == 1 - - if source - # If we're filtering against *all* lexers, we only use confident return - # values from analyze_text. But if we've filtered down already, we can trust - # the analysis more. - source_threshold = lexers.size < total_size ? 0 : 0.5 - return [best_by_source(lexers, source, source_threshold)].compact - end - - [] - end - - class AmbiguousGuess < StandardError - attr_reader :alternatives - def initialize(alternatives); @alternatives = alternatives; end - - def message - "Ambiguous guess: can't decide between #{alternatives.map(&:tag).inspect}" - end - end - - # Guess which lexer to use based on a hash of info. - # - # @option info :mimetype - # A mimetype to guess by - # @option info :filename - # A filename to guess by - # @option info :source - # The source itself, which, if guessing by mimetype or filename - # fails, will be searched for shebangs, tags, and - # other hints. - # - # @see Lexer.analyze_text - # @see Lexer.guesses - def guess(info={}) - lexers = guesses(info) - - return Lexers::PlainText if lexers.empty? - return lexers[0] if lexers.size == 1 - - raise AmbiguousGuess.new(lexers) - end - - def guess_by_mimetype(mt) - guess :mimetype => mt - end - - def guess_by_filename(fname) - guess :filename => fname - end - - def guess_by_source(source) - guess :source => source - end - - private - def filter_by_mimetype(lexers, mt) - filtered = lexers.select { |lexer| lexer.mimetypes.include? mt } - filtered.any? ? filtered : lexers - end - - # returns a list of lexers that match the given filename with - # equal specificity (i.e. number of wildcards in the pattern). - # This helps disambiguate between, e.g. the Nginx lexer, which - # matches `nginx.conf`, and the Conf lexer, which matches `*.conf`. - # In this case, nginx will win because the pattern has no wildcards, - # while `*.conf` has one. - def filter_by_filename(lexers, fname) - fname = File.basename(fname) - - out = [] - best_seen = nil - lexers.each do |lexer| - score = lexer.filenames.map do |pattern| - if File.fnmatch?(pattern, fname, File::FNM_DOTMATCH) - # specificity is better the fewer wildcards there are - pattern.scan(/[*?\[]/).size - end - end.compact.min - - next unless score - - if best_seen.nil? || score < best_seen - best_seen = score - out = [lexer] - elsif score == best_seen - out << lexer - end - end - - out.any? ? out : lexers - end - - def best_by_source(lexers, source, threshold=0) - source = case source - when String - source - when ->(s){ s.respond_to? :read } - source.read - else - raise 'invalid source' - end - - assert_utf8!(source) - - source = TextAnalyzer.new(source) - - best_result = threshold - best_match = nil - lexers.each do |lexer| - result = lexer.analyze_text(source) || 0 - return lexer if result == 1 - - if result > best_result - best_match = lexer - best_result = result - end - end - - best_match - end - - protected - # @private - def register(name, lexer) - registry[name.to_s] = lexer - end - - public - # Used to specify or get the canonical name of this lexer class. - # - # @example - # class MyLexer < Lexer - # tag 'foo' - # end - # - # MyLexer.tag # => 'foo' - # - # Lexer.find('foo') # => MyLexer - def tag(t=nil) - return @tag if t.nil? - - @tag = t.to_s - Lexer.register(@tag, self) - end - - # Used to specify alternate names this lexer class may be found by. - # - # @example - # class Erb < Lexer - # tag 'erb' - # aliases 'eruby', 'rhtml' - # end - # - # Lexer.find('eruby') # => Erb - def aliases(*args) - args.map!(&:to_s) - args.each { |arg| Lexer.register(arg, self) } - (@aliases ||= []).concat(args) - end - - # Specify a list of filename globs associated with this lexer. - # - # @example - # class Ruby < Lexer - # filenames '*.rb', '*.ruby', 'Gemfile', 'Rakefile' - # end - def filenames(*fnames) - (@filenames ||= []).concat(fnames) - end - - # Specify a list of mimetypes associated with this lexer. - # - # @example - # class Html < Lexer - # mimetypes 'text/html', 'application/xhtml+xml' - # end - def mimetypes(*mts) - (@mimetypes ||= []).concat(mts) - end - - # @private - def assert_utf8!(str) - return if %w(US-ASCII UTF-8 ASCII-8BIT).include? str.encoding.name - raise EncodingError.new( - "Bad encoding: #{str.encoding.names.join(',')}. " + - "Please convert your string to UTF-8." - ) - end - - private - def registry - @registry ||= {} - end - end - - # -*- instance methods -*- # - - # Create a new lexer with the given options. Individual lexers may - # specify extra options. The only current globally accepted option - # is `:debug`. - # - # @option opts :debug - # Prints debug information to stdout. The particular info depends - # on the lexer in question. In regex lexers, this will log the - # state stack at the beginning of each step, along with each regex - # tried and each stream consumed. Try it, it's pretty useful. - def initialize(opts={}) - options(opts) - - @debug = option(:debug) - end - - # get and/or specify the options for this lexer. - def options(o={}) - (@options ||= {}).merge!(o) - - self.class.default_options.merge(@options) - end - - # get or specify one option for this lexer - def option(k, v=:absent) - if v == :absent - options[k] - else - options({ k => v }) - end - end - - # @deprecated - # Instead of `debug { "foo" }`, simply `puts "foo" if @debug`. - # - # Leave a debug message if the `:debug` option is set. The message - # is given as a block because some debug messages contain calculated - # information that is unnecessary for lexing in the real world. - # - # Calls to this method should be guarded with "if @debug" for best - # performance when debugging is turned off. - # - # @example - # debug { "hello, world!" } if @debug - def debug - warn "Lexer#debug is deprecated. Simply puts if @debug instead." - puts yield if @debug - end - - # @abstract - # - # Called after each lex is finished. The default implementation - # is a noop. - def reset! - end - - # Given a string, yield [token, chunk] pairs. If no block is given, - # an enumerator is returned. - # - # @option opts :continue - # Continue the lex from the previous state (i.e. don't call #reset!) - def lex(string, opts={}, &b) - return enum_for(:lex, string, opts) unless block_given? - - Lexer.assert_utf8!(string) - - reset! unless opts[:continue] - - # consolidate consecutive tokens of the same type - last_token = nil - last_val = nil - stream_tokens(string) do |tok, val| - next if val.empty? - - if tok == last_token - last_val << val - next - end - - b.call(last_token, last_val) if last_token - last_token = tok - last_val = val - end - - b.call(last_token, last_val) if last_token - end - - # delegated to {Lexer.tag} - def tag - self.class.tag - end - - # @abstract - # - # Yield `[token, chunk]` pairs, given a prepared input stream. This - # must be implemented. - # - # @param [StringScanner] stream - # the stream - def stream_tokens(stream, &b) - raise 'abstract' - end - - # @abstract - # - # Return a number between 0 and 1 indicating the likelihood that - # the text given should be lexed with this lexer. The default - # implementation returns 0. Values under 0.5 will only be used - # to disambiguate filename or mimetype matches. - # - # @param [TextAnalyzer] text - # the text to be analyzed, with a couple of handy methods on it, - # like {TextAnalyzer#shebang?} and {TextAnalyzer#doctype?} - def self.analyze_text(text) - 0 - end - end - - module Lexers - def self.load_const(const_name, relpath) - return if const_defined?(const_name) - - root = Pathname.new(__FILE__).dirname.join('lexers') - load root.join(relpath) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/apache.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/apache.rb deleted file mode 100644 index 5bb2057..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/apache.rb +++ /dev/null @@ -1,68 +0,0 @@ -require 'yaml' - -module Rouge - module Lexers - class Apache < RegexLexer - title "Apache" - desc 'configuration files for Apache web server' - tag 'apache' - mimetypes 'text/x-httpd-conf', 'text/x-apache-conf' - filenames '.htaccess', 'httpd.conf' - - class << self - attr_reader :keywords - end - # Load Apache keywords from separate YML file - @keywords = ::YAML.load(File.open(Pathname.new(__FILE__).dirname.join('apache/keywords.yml'))) - - def name_for_token(token) - if self.class.keywords[:sections].include? token - Name::Class - elsif self.class.keywords[:directives].include? token - Name::Label - elsif self.class.keywords[:values].include? token - Literal::String::Symbol - end - end - - state :whitespace do - rule /\#.*?\n/, Comment - rule /[\s\n]+/m, Text - end - - - state :root do - mixin :whitespace - - rule /(<\/?)(\w+)/ do |m| - groups Punctuation, name_for_token(m[2]) - push :section - end - - rule /\w+/ do |m| - token name_for_token(m[0]) - push :directive - end - end - - state :section do - mixin :whitespace - - # Match section arguments - rule /([^>]+)?(>\n)/ do |m| - groups Literal::String::Regex, Punctuation - pop! - end - end - - state :directive do - # Match value literals and other directive arguments - rule /(\w+)*(.*?(\n|$))/ do |m| - token name_for_token(m[1]), m[1] - token Text, m[2] - pop! - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/apache/keywords.yml b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/apache/keywords.yml deleted file mode 100644 index 4f624a8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/apache/keywords.yml +++ /dev/null @@ -1,453 +0,0 @@ -:sections: - - "DirectoryMatch" - - "Directory" - - "FilesMatch" - - "Files" - - "IfDefine" - - "IfModule" - - "LimitExcept" - - "Limit" - - "LocationMatch" - - "Location" - - "ProxyMatch" - - "Proxy" - - "VirtualHost" - -:directives: - - "AcceptMutex" - - "AcceptPathInfo" - - "AccessConfig" - - "AccessFileName" - - "Action" - - "AddAlt" - - "AddAltByEncoding" - - "AddAltByType" - - "AddCharset" - - "AddDefaultCharset" - - "AddDescription" - - "AddEncoding" - - "AddHandler" - - "AddIcon" - - "AddIconByEncoding" - - "AddIconByType" - - "AddInputFilter" - - "AddLanguage" - - "AddModule" - - "AddModuleInfo" - - "AddOutputFilter" - - "AddOutputFilterByType" - - "AddType" - - "AgentLog" - - "Alias" - - "AliasMatch" - - "Allow from" - - "Allow" - - "AllowCONNECT" - - "AllowEncodedSlashes" - - "AllowOverride" - - "Anonymous" - - "Anonymous_Authoritative" - - "Anonymous_LogEmail" - - "Anonymous_MustGiveEmail" - - "Anonymous_NoUserID" - - "Anonymous_VerifyEmail" - - "AssignUserID" - - "AuthAuthoritative" - - "AuthDBAuthoritative" - - "AuthDBGroupFile" - - "AuthDBMAuthoritative" - - "AuthDBMGroupFile" - - "AuthDBMType" - - "AuthDBMUserFile" - - "AuthDBUserFile" - - "AuthDigestAlgorithm" - - "AuthDigestDomain" - - "AuthDigestFile" - - "AuthDigestGroupFile" - - "AuthDigestNcCheck" - - "AuthDigestNonceFormat" - - "AuthDigestNonceLifetime" - - "AuthDigestQop" - - "AuthDigestShmemSize" - - "AuthGroupFile" - - "AuthLDAPAuthoritative" - - "AuthLDAPBindDN" - - "AuthLDAPBindPassword" - - "AuthLDAPCharsetConfig" - - "AuthLDAPCompareDNOnServer" - - "AuthLDAPDereferenceAliases" - - "AuthLDAPEnabled" - - "AuthLDAPFrontPageHack" - - "AuthLDAPGroupAttribute" - - "AuthLDAPGroupAttributeIsDN" - - "AuthLDAPRemoteUserIsDN" - - "AuthLDAPUrl" - - "AuthName" - - "AuthType" - - "AuthUserFile" - - "BS2000Account" - - "BindAddress" - - "BrowserMatch" - - "BrowserMatchNoCase" - - "CGIMapExtension" - - "CacheDefaultExpire" - - "CacheDirLength" - - "CacheDirLevels" - - "CacheDisable" - - "CacheEnable" - - "CacheExpiryCheck" - - "CacheFile" - - "CacheForceCompletion" - - "CacheGcClean" - - "CacheGcDaily" - - "CacheGcInterval" - - "CacheGcMemUsage" - - "CacheGcUnused" - - "CacheIgnoreCacheControl" - - "CacheIgnoreNoLastMod" - - "CacheLastModifiedFactor" - - "CacheMaxExpire" - - "CacheMaxFileSize" - - "CacheMinFileSize" - - "CacheNegotiatedDocs" - - "CacheRoot" - - "CacheSize" - - "CacheTimeMargin" - - "CharsetDefault" - - "CharsetOptions" - - "CharsetSourceEnc" - - "CheckSpelling" - - "ChildPerUserID" - - "ClearModuleList" - - "ContentDigest" - - "CookieDomain" - - "CookieExpires" - - "CookieLog" - - "CookieName" - - "CookieStyle" - - "CookieTracking" - - "CoreDumpDirectory" - - "CustomLog" - - "Dav" - - "DavDepthInfinity" - - "DavLockDB" - - "DavMinTimeout" - - "DefaultIcon" - - "DefaultLanguage" - - "DefaultMode" - - "DefaultType" - - "DeflateBufferSize" - - "DeflateCompressionLevel" - - "DeflateFilterNote" - - "DeflateMemLevel" - - "DeflateWindowSize" - - "Deny" - - "DirectoryIndex" - - "DirectorySlash" - - "DocTitle" - - "DocTrailer" - - "DocumentRoot" - - "EnableExceptionHook" - - "EnableMMAP" - - "EnableSendfile" - - "ErrorDocument" - - "ErrorLog" - - "Example" - - "ExpiresActive" - - "ExpiresByType" - - "ExpiresDefault" - - "ExtFilterDefine" - - "ExtFilterOptions" - - "ExtendedStatus" - - "FancyIndexing" - - "FileETag" - - "ForceLanguagePriority" - - "ForceType" - - "ForensicLog" - - "Group" - - "HTMLDir" - - "HTTPLogFile" - - "HeadPrefix" - - "HeadSuffix" - - "Header" - - "HeaderName" - - "HideSys" - - "HideURL" - - "HostNameLookups" - - "HostnameLookups" - - "ISAPIAppendLogToErrors" - - "ISAPIAppendLogToQuery" - - "ISAPICacheFile" - - "ISAPIFakeAsync" - - "ISAPILogNotSupported" - - "ISAPIReadAheadBuffer" - - "IdentityCheck" - - "ImapBase" - - "ImapDefault" - - "ImapMenu" - - "Include" - - "IndexIgnore" - - "IndexOptions" - - "IndexOrderDefault" - - "KeepAlive" - - "KeepAliveTimeout" - - "LDAPCacheEntries" - - "LDAPCacheTTL" - - "LDAPOpCacheEntries" - - "LDAPOpCacheTTL" - - "LDAPSharedCacheFile" - - "LDAPSharedCacheSize" - - "LDAPTrustedCA" - - "LDAPTrustedCAType" - - "LanguagePriority" - - "LastURLs" - - "LimitInternalRecursion" - - "LimitRequestBody" - - "LimitRequestFields" - - "LimitRequestFieldsize" - - "LimitRequestLine" - - "LimitXMLRequestBody" - - "Listen" - - "ListenBacklog" - - "LoadFile" - - "LoadModule" - - "LockFile" - - "LogFormat" - - "LogLevel" - - "MCacheMaxObjectCount" - - "MCacheMaxObjectSize" - - "MCacheMaxStreamingBuffer" - - "MCacheMinObjectSize" - - "MCacheRemovalAlgorithm" - - "MCacheSize" - - "MMapFile" - - "MaxClients" - - "MaxKeepAliveRequests" - - "MaxMemFree" - - "MaxRequestsPerChild" - - "MaxRequestsPerThread" - - "MaxSpareServers" - - "MaxSpareThreads" - - "MaxThreads" - - "MaxThreadsPerChild" - - "MetaDir" - - "MetaFiles" - - "MetaSuffix" - - "MimeMagicFile" - - "MinSpareServers" - - "MinSpareThreads" - - "ModMimeUsePathInfo" - - "MultiviewsMatch" - - "NWSSLTrustedCerts" - - "NWSSLUpgradeable" - - "NameVirtualHost" - - "NoCache" - - "NoProxy" - - "NumServers" - - "Options" - - "Order" - - "PassEnv" - - "PidFile" - - "Port" - - "PrivateDir" - - "ProtocolEcho" - - "ProxyBadHeader" - - "ProxyBlock" - - "ProxyDomain" - - "ProxyErrorOverride" - - "ProxyIOBufferSize" - - "ProxyMaxForwards" - - "ProxyPass" - - "ProxyPassReverse" - - "ProxyPreserveHost" - - "ProxyReceiveBufferSize" - - "ProxyRemote" - - "ProxyRemoteMatch" - - "ProxyRequests" - - "ProxyTimeout" - - "ProxyVia" - - "RLimitCPU" - - "RLimitMEM" - - "RLimitNPROC" - - "ReadmeName" - - "Redirect" - - "RedirectMatch" - - "RedirectPermanent" - - "RedirectTemp" - - "RefererIgnore" - - "RefererLog" - - "RemoveCharset" - - "RemoveEncoding" - - "RemoveHandler" - - "RemoveInputFilter" - - "RemoveLanguage" - - "RemoveOutputFilter" - - "RemoveType" - - "RequestHeader" - - "Require" - - "ResourceConfig" - - "RewriteBase" - - "RewriteCond" - - "RewriteEngine" - - "RewriteLock" - - "RewriteLog" - - "RewriteLogLevel" - - "RewriteMap" - - "RewriteOptions" - - "RewriteRule" - - "SSIEndTag" - - "SSIErrorMsg" - - "SSIStartTag" - - "SSITimeFormat" - - "SSIUndefinedEcho" - - "SSLCACertificateFile" - - "SSLCACertificatePath" - - "SSLCARevocationFile" - - "SSLCARevocationPath" - - "SSLCertificateChainFile" - - "SSLCertificateFile" - - "SSLCertificateKeyFile" - - "SSLCipherSuite" - - "SSLEngine" - - "SSLMutex" - - "SSLOptions" - - "SSLPassPhraseDialog" - - "SSLProtocol" - - "SSLProxyCACertificateFile" - - "SSLProxyCACertificatePath" - - "SSLProxyCARevocationFile" - - "SSLProxyCARevocationPath" - - "SSLProxyCipherSuite" - - "SSLProxyEngine" - - "SSLProxyMachineCertificateFile" - - "SSLProxyMachineCertificatePath" - - "SSLProxyProtocol" - - "SSLProxyVerify" - - "SSLProxyVerifyDepth" - - "SSLRandomSeed" - - "SSLRequire" - - "SSLRequireSSL" - - "SSLSessionCache" - - "SSLSessionCacheTimeout" - - "SSLVerifyClient" - - "SSLVerifyDepth" - - "Satisfy" - - "ScoreBoardFile" - - "Script" - - "ScriptAlias" - - "ScriptAliasMatch" - - "ScriptInterpreterSource" - - "ScriptLog" - - "ScriptLogBuffer" - - "ScriptLogLength" - - "ScriptSock" - - "SecureListen" - - "SendBufferSize" - - "ServerAdmin" - - "ServerAlias" - - "ServerLimit" - - "ServerName" - - "ServerPath" - - "ServerRoot" - - "ServerSignature" - - "ServerTokens" - - "ServerType" - - "SetEnv" - - "SetEnvIf" - - "SetEnvIfNoCase" - - "SetHandler" - - "SetInputFilter" - - "SetOutputFilter" - - "StartServers" - - "StartThreads" - - "SuexecUserGroup" - - "ThreadLimit" - - "ThreadStackSize" - - "ThreadsPerChild" - - "TimeOut" - - "TopSites" - - "TopURLs" - - "TransferLog" - - "TypesConfig" - - "UnsetEnv" - - "UseCanonicalName" - - "User" - - "UserDir" - - "VirtualDocumentRoot" - - "VirtualDocumentRootIP" - - "VirtualScriptAlias" - - "VirtualScriptAliasIP" - - "Win32DisableAcceptEx" - - "XBitHack" - - "deny" - - "order" - - "require" -:values: - - "All" - - "AuthConfig" - - "Basic" - - "CONNECT" - - "DELETE" - - "Digest" - - "ExecCGI" - - "FancyIndexing" - - "FileInfo" - - "FollowSymLinks" - - "Full" - - "GET" - - "IconsAreLinks" - - "Includes" - - "IncludesNOEXEC" - - "Indexes" - - "Limit" - - "Minimal" - - "MultiViews" - - "None" - - "OPTIONS" - - "OS" - - "Options" - - "Options" - - "POST" - - "PUT" - - "ScanHTMLTitles" - - "SuppressDescription" - - "SuppressLastModified" - - "SuppressSize" - - "SymLinksIfOwnerMatch" - - "URL" - - "add" - - "allow" - - "any" - - "append" - - "deny" - - "double" - - "downgrade-1.0" - - "email" - - "env" - - "error" - - "force-response-1.0" - - "formatted" - - "from" - - "full" - - "gone" - - "group" - - "inetd" - - "inherit" - - "map" - - "mutual-failure" - - "nocontent" - - "nokeepalive" - - "none" - - "off" - - "on" - - "permanent" - - "referer" - - "seeother" - - "semi-formatted" - - "set" - - "standalone" - - "temporary" - - "unformatted" - - "unset" - - "user" - - "valid-user" \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/apple_script.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/apple_script.rb deleted file mode 100644 index 785a215..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/apple_script.rb +++ /dev/null @@ -1,367 +0,0 @@ -# -*- coding: utf-8 -*- # -module Rouge - module Lexers - class AppleScript < RegexLexer - title "AppleScript" - desc "The AppleScript scripting language by Apple Inc. (http://developer.apple.com/applescript/)" - - tag 'applescript' - aliases 'applescript' - - filenames '*.applescript', '*.scpt' - - mimetypes 'application/x-applescript' - - def self.literals - @literals ||= ['AppleScript', 'current application', 'false', 'linefeed', - 'missing value', 'pi','quote', 'result', 'return', 'space', - 'tab', 'text item delimiters', 'true', 'version'] - end - - def self.classes - @classes ||= ['alias ', 'application ', 'boolean ', 'class ', 'constant ', - 'date ', 'file ', 'integer ', 'list ', 'number ', 'POSIX file ', - 'real ', 'record ', 'reference ', 'RGB color ', 'script ', - 'text ', 'unit types', '(?:Unicode )?text', 'string'] - end - - def self.builtins - @builtins ||= ['attachment', 'attribute run', 'character', 'day', 'month', - 'paragraph', 'word', 'year'] - end - - def self.handler_params - @handler_params ||= ['about', 'above', 'against', 'apart from', 'around', - 'aside from', 'at', 'below', 'beneath', 'beside', - 'between', 'for', 'given', 'instead of', 'on', 'onto', - 'out of', 'over', 'since'] - end - - def self.commands - @commands ||= ['ASCII (character|number)', 'activate', 'beep', 'choose URL', - 'choose application', 'choose color', 'choose file( name)?', - 'choose folder', 'choose from list', - 'choose remote application', 'clipboard info', - 'close( access)?', 'copy', 'count', 'current date', 'delay', - 'delete', 'display (alert|dialog)', 'do shell script', - 'duplicate', 'exists', 'get eof', 'get volume settings', - 'info for', 'launch', 'list (disks|folder)', 'load script', - 'log', 'make', 'mount volume', 'new', 'offset', - 'open( (for access|location))?', 'path to', 'print', 'quit', - 'random number', 'read', 'round', 'run( script)?', - 'say', 'scripting components', - 'set (eof|the clipboard to|volume)', 'store script', - 'summarize', 'system attribute', 'system info', - 'the clipboard', 'time to GMT', 'write', 'quoted form'] - end - - def self.references - @references ||= ['(in )?back of', '(in )?front of', '[0-9]+(st|nd|rd|th)', - 'first', 'second', 'third', 'fourth', 'fifth', 'sixth', - 'seventh', 'eighth', 'ninth', 'tenth', 'after', 'back', - 'before', 'behind', 'every', 'front', 'index', 'last', - 'middle', 'some', 'that', 'through', 'thru', 'where', 'whose'] - end - - def self.operators - @operators ||= ["and", "or", "is equal", "equals", "(is )?equal to", "is not", - "isn't", "isn't equal( to)?", "is not equal( to)?", - "doesn't equal", "does not equal", "(is )?greater than", - "comes after", "is not less than or equal( to)?", - "isn't less than or equal( to)?", "(is )?less than", - "comes before", "is not greater than or equal( to)?", - "isn't greater than or equal( to)?", - "(is )?greater than or equal( to)?", "is not less than", - "isn't less than", "does not come before", - "doesn't come before", "(is )?less than or equal( to)?", - "is not greater than", "isn't greater than", - "does not come after", "doesn't come after", "starts? with", - "begins? with", "ends? with", "contains?", "does not contain", - "doesn't contain", "is in", "is contained by", "is not in", - "is not contained by", "isn't contained by", "div", "mod", - "not", "(a )?(ref( to)?|reference to)", "is", "does"] - end - - def self.controls - @controls ||= ['considering', 'else', 'error', 'exit', 'from', 'if', - 'ignoring', 'in', 'repeat', 'tell', 'then', 'times', 'to', - 'try', 'until', 'using terms from', 'while', 'whith', - 'with timeout( of)?', 'with transaction', 'by', 'continue', - 'end', 'its?', 'me', 'my', 'return', 'of' , 'as'] - end - - def self.declarations - @declarations ||= ['global', 'local', 'prop(erty)?', 'set', 'get'] - end - - def self.reserved - @reserved ||= ['but', 'put', 'returning', 'the'] - end - - def self.studio_classes - @studio_classes ||= ['action cell', 'alert reply', 'application', 'box', - 'browser( cell)?', 'bundle', 'button( cell)?', 'cell', - 'clip view', 'color well', 'color-panel', - 'combo box( item)?', 'control', - 'data( (cell|column|item|row|source))?', 'default entry', - 'dialog reply', 'document', 'drag info', 'drawer', - 'event', 'font(-panel)?', 'formatter', - 'image( (cell|view))?', 'matrix', 'menu( item)?', 'item', - 'movie( view)?', 'open-panel', 'outline view', 'panel', - 'pasteboard', 'plugin', 'popup button', - 'progress indicator', 'responder', 'save-panel', - 'scroll view', 'secure text field( cell)?', 'slider', - 'sound', 'split view', 'stepper', 'tab view( item)?', - 'table( (column|header cell|header view|view))', - 'text( (field( cell)?|view))?', 'toolbar( item)?', - 'user-defaults', 'view', 'window'] - end - - def self.studio_events - @studio_events ||= ['accept outline drop', 'accept table drop', 'action', - 'activated', 'alert ended', 'awake from nib', 'became key', - 'became main', 'begin editing', 'bounds changed', - 'cell value', 'cell value changed', 'change cell value', - 'change item value', 'changed', 'child of item', - 'choose menu item', 'clicked', 'clicked toolbar item', - 'closed', 'column clicked', 'column moved', - 'column resized', 'conclude drop', 'data representation', - 'deminiaturized', 'dialog ended', 'document nib name', - 'double clicked', 'drag( (entered|exited|updated))?', - 'drop', 'end editing', 'exposed', 'idle', 'item expandable', - 'item value', 'item value changed', 'items changed', - 'keyboard down', 'keyboard up', 'launched', - 'load data representation', 'miniaturized', 'mouse down', - 'mouse dragged', 'mouse entered', 'mouse exited', - 'mouse moved', 'mouse up', 'moved', - 'number of browser rows', 'number of items', - 'number of rows', 'open untitled', 'opened', 'panel ended', - 'parameters updated', 'plugin loaded', 'prepare drop', - 'prepare outline drag', 'prepare outline drop', - 'prepare table drag', 'prepare table drop', - 'read from file', 'resigned active', 'resigned key', - 'resigned main', 'resized( sub views)?', - 'right mouse down', 'right mouse dragged', - 'right mouse up', 'rows changed', 'scroll wheel', - 'selected tab view item', 'selection changed', - 'selection changing', 'should begin editing', - 'should close', 'should collapse item', - 'should end editing', 'should expand item', - 'should open( untitled)?', - 'should quit( after last window closed)?', - 'should select column', 'should select item', - 'should select row', 'should select tab view item', - 'should selection change', 'should zoom', 'shown', - 'update menu item', 'update parameters', - 'update toolbar item', 'was hidden', 'was miniaturized', - 'will become active', 'will close', 'will dismiss', - 'will display browser cell', 'will display cell', - 'will display item cell', 'will display outline cell', - 'will finish launching', 'will hide', 'will miniaturize', - 'will move', 'will open', 'will pop up', 'will quit', - 'will resign active', 'will resize( sub views)?', - 'will select tab view item', 'will show', 'will zoom', - 'write to file', 'zoomed'] - end - - def self.studio_commands - @studio_commands ||= ['animate', 'append', 'call method', 'center', - 'close drawer', 'close panel', 'display', - 'display alert', 'display dialog', 'display panel', 'go', - 'hide', 'highlight', 'increment', 'item for', - 'load image', 'load movie', 'load nib', 'load panel', - 'load sound', 'localized string', 'lock focus', 'log', - 'open drawer', 'path for', 'pause', 'perform action', - 'play', 'register', 'resume', 'scroll', 'select( all)?', - 'show', 'size to fit', 'start', 'step back', - 'step forward', 'stop', 'synchronize', 'unlock focus', - 'update'] - end - - def self.studio_properties - @studio_properties ||= ['accepts arrow key', 'action method', 'active', - 'alignment', 'allowed identifiers', - 'allows branch selection', 'allows column reordering', - 'allows column resizing', 'allows column selection', - 'allows customization', 'allows editing text attributes', - 'allows empty selection', 'allows mixed state', - 'allows multiple selection', 'allows reordering', - 'allows undo', 'alpha( value)?', 'alternate image', - 'alternate increment value', 'alternate title', - 'animation delay', 'associated file name', - 'associated object', 'auto completes', 'auto display', - 'auto enables items', 'auto repeat', 'auto resizes( outline column)?', - 'auto save expanded items', 'auto save name', - 'auto save table columns', 'auto saves configuration', - 'auto scroll', 'auto sizes all columns to fit', - 'auto sizes cells', 'background color', 'bezel state', - 'bezel style', 'bezeled', 'border rect', 'border type', - 'bordered', 'bounds( rotation)?', 'box type', - 'button returned', 'button type', - 'can choose directories', 'can choose files', 'can draw', 'can hide', - 'cell( (background color|size|type))?', 'characters', - 'class', 'click count', 'clicked( data)? column', - 'clicked data item', 'clicked( data)? row', - 'closeable', 'collating', 'color( (mode|panel))', - 'command key down', 'configuration', - 'content(s| (size|view( margins)?))?', 'context', - 'continuous', 'control key down', 'control size', - 'control tint', 'control view', - 'controller visible', 'coordinate system', - 'copies( on scroll)?', 'corner view', 'current cell', - 'current column', 'current( field)? editor', - 'current( menu)? item', 'current row', - 'current tab view item', 'data source', - 'default identifiers', 'delta (x|y|z)', - 'destination window', 'directory', 'display mode', - 'displayed cell', 'document( (edited|rect|view))?', - 'double value', 'dragged column', 'dragged distance', - 'dragged items', 'draws( cell)? background', - 'draws grid', 'dynamically scrolls', 'echos bullets', - 'edge', 'editable', 'edited( data)? column', - 'edited data item', 'edited( data)? row', 'enabled', - 'enclosing scroll view', 'ending page', - 'error handling', 'event number', 'event type', - 'excluded from windows menu', 'executable path', - 'expanded', 'fax number', 'field editor', 'file kind', - 'file name', 'file type', 'first responder', - 'first visible column', 'flipped', 'floating', - 'font( panel)?', 'formatter', 'frameworks path', - 'frontmost', 'gave up', 'grid color', 'has data items', - 'has horizontal ruler', 'has horizontal scroller', - 'has parent data item', 'has resize indicator', - 'has shadow', 'has sub menu', 'has vertical ruler', - 'has vertical scroller', 'header cell', 'header view', - 'hidden', 'hides when deactivated', 'highlights by', - 'horizontal line scroll', 'horizontal page scroll', - 'horizontal ruler view', 'horizontally resizable', - 'icon image', 'id', 'identifier', - 'ignores multiple clicks', - 'image( (alignment|dims when disabled|frame style|scaling))?', - 'imports graphics', 'increment value', - 'indentation per level', 'indeterminate', 'index', - 'integer value', 'intercell spacing', 'item height', - 'key( (code|equivalent( modifier)?|window))?', - 'knob thickness', 'label', 'last( visible)? column', - 'leading offset', 'leaf', 'level', 'line scroll', - 'loaded', 'localized sort', 'location', 'loop mode', - 'main( (bunde|menu|window))?', 'marker follows cell', - 'matrix mode', 'maximum( content)? size', - 'maximum visible columns', - 'menu( form representation)?', 'miniaturizable', - 'miniaturized', 'minimized image', 'minimized title', - 'minimum column width', 'minimum( content)? size', - 'modal', 'modified', 'mouse down state', - 'movie( (controller|file|rect))?', 'muted', 'name', - 'needs display', 'next state', 'next text', - 'number of tick marks', 'only tick mark values', - 'opaque', 'open panel', 'option key down', - 'outline table column', 'page scroll', 'pages across', - 'pages down', 'palette label', 'pane splitter', - 'parent data item', 'parent window', 'pasteboard', - 'path( (names|separator))?', 'playing', - 'plays every frame', 'plays selection only', 'position', - 'preferred edge', 'preferred type', 'pressure', - 'previous text', 'prompt', 'properties', - 'prototype cell', 'pulls down', 'rate', - 'released when closed', 'repeated', - 'requested print time', 'required file type', - 'resizable', 'resized column', 'resource path', - 'returns records', 'reuses columns', 'rich text', - 'roll over', 'row height', 'rulers visible', - 'save panel', 'scripts path', 'scrollable', - 'selectable( identifiers)?', 'selected cell', - 'selected( data)? columns?', 'selected data items?', - 'selected( data)? rows?', 'selected item identifier', - 'selection by rect', 'send action on arrow key', - 'sends action when done editing', 'separates columns', - 'separator item', 'sequence number', 'services menu', - 'shared frameworks path', 'shared support path', - 'sheet', 'shift key down', 'shows alpha', - 'shows state by', 'size( mode)?', - 'smart insert delete enabled', 'sort case sensitivity', - 'sort column', 'sort order', 'sort type', - 'sorted( data rows)?', 'sound', 'source( mask)?', - 'spell checking enabled', 'starting page', 'state', - 'string value', 'sub menu', 'super menu', 'super view', - 'tab key traverses cells', 'tab state', 'tab type', - 'tab view', 'table view', 'tag', 'target( printer)?', - 'text color', 'text container insert', - 'text container origin', 'text returned', - 'tick mark position', 'time stamp', - 'title(d| (cell|font|height|position|rect))?', - 'tool tip', 'toolbar', 'trailing offset', 'transparent', - 'treat packages as directories', 'truncated labels', - 'types', 'unmodified characters', 'update views', - 'use sort indicator', 'user defaults', - 'uses data source', 'uses ruler', 'uses threaded animation', - 'uses title from previous column', 'value wraps', 'version', - 'vertical( (line scroll|page scroll|ruler view))?', 'vertically resizable', 'view', - 'visible( document rect)?', 'volume', 'width', 'window', - 'windows menu', 'wraps', 'zoomable', 'zoomed'] - end - - operators = %r(\b(#{self.operators.to_a.join('|')})\b) - classes = %r(\b(as )(#{self.classes.to_a.join('|')})\b) - literals = %r(\b(#{self.literals.to_a.join('|')})\b) - commands = %r(\b(#{self.commands.to_a.join('|')})\b) - controls = %r(\b(#{self.controls.to_a.join('|')})\b) - declarations = %r(\b(#{self.declarations.to_a.join('|')})\b) - reserved = %r(\b(#{self.reserved.to_a.join('|')})\b) - builtins = %r(\b(#{self.builtins.to_a.join('|')})s?\b) - handler_params = %r(\b(#{self.handler_params.to_a.join('|')})\b) - references = %r(\b(#{self.references.to_a.join('|')})\b) - studio_properties = %r(\b(#{self.studio_properties.to_a.join('|')})\b) - studio_classes = %r(\b(#{self.studio_classes.to_a.join('|')})s?\b) - studio_commands = %r(\b(#{self.studio_commands.to_a.join('|')})\b) - identifiers = %r(\b([a-zA-Z]\w*)\b) - - state :root do - rule /\s+/, Text::Whitespace - rule /¬\n/, Literal::String::Escape - rule /'s\s+/, Text - rule /(--|#).*?$/, Comment::Single - rule /\(\*/, Comment::Multiline - rule /[\(\){}!,.:]/, Punctuation - rule /(«)([^»]+)(»)/ do |match| - token Text, match[1] - token Name::Builtin, match[2] - token Text, match[3] - end - rule /\b((?:considering|ignoring)\s*)(application responses|case|diacriticals|hyphens|numeric strings|punctuation|white space)/ do |match| - token Keyword, match[1] - token Name::Builtin, match[2] - end - rule /(-|\*|\+|&|≠|>=?|<=?|=|≥|≤|\/|÷|\^)/, Operator - rule operators, Operator::Word - rule /^(\s*(?:on|end)\s+)'r'(%s)/ do |match| - token Keyword, match[1] - token Name::Function, match[2] - end - rule /^(\s*)(in|on|script|to)(\s+)/ do |match| - token Text, match[1] - token Keyword, match[2] - token Text, match[3] - end - rule classes do |match| - token Keyword, match[1] - token Name::Class, match[2] - end - rule commands, Name::Builtin - rule controls, Keyword - rule declarations, Keyword - rule reserved, Name::Builtin - rule builtins, Name::Builtin - rule handler_params, Name::Builtin - rule studio_properties, Name::Attribute - rule studio_classes, Name::Builtin - rule studio_commands, Name::Builtin - rule references, Name::Builtin - rule /"(\\\\|\\"|[^"])*"/, Literal::String::Double - rule identifiers, Name::Variable - rule /[-+]?(\d+\.\d*|\d*\.\d+)(E[-+][0-9]+)?/, Literal::Number::Float - rule /[-+]?\d+/, Literal::Number::Integer - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/c.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/c.rb deleted file mode 100644 index 4e125c1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/c.rb +++ /dev/null @@ -1,212 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - class C < RegexLexer - tag 'c' - filenames '*.c', '*.h', '*.idc' - mimetypes 'text/x-chdr', 'text/x-csrc' - - title "C" - desc "The C programming language" - - # optional comment or whitespace - ws = %r((?:\s|//.*?\n|/[*].*?[*]/)+) - id = /[a-zA-Z_][a-zA-Z0-9_]*/ - - def self.keywords - @keywords ||= Set.new %w( - auto break case const continue default do else enum extern - for goto if register restricted return sizeof static struct - switch typedef union volatile virtual while - ) - end - - def self.keywords_type - @keywords_type ||= Set.new %w( - int long float short double char unsigned signed void - - jmp_buf FILE DIR div_t ldiv_t mbstate_t sig_atomic_t fpos_t - clock_t time_t va_list size_t ssize_t off_t wchar_t ptrdiff_t - wctrans_t wint_t wctype_t - - _Bool _Complex int8_t int16_t int32_t int64_t - uint8_t uint16_t uint32_t uint64_t int_least8_t - int_least16_t int_least32_t int_least64_t - uint_least8_t uint_least16_t uint_least32_t - uint_least64_t int_fast8_t int_fast16_t int_fast32_t - int_fast64_t uint_fast8_t uint_fast16_t uint_fast32_t - uint_fast64_t intptr_t uintptr_t intmax_t - uintmax_t - ) - end - - def self.reserved - @reserved ||= Set.new %w( - __asm __int8 __based __except __int16 __stdcall __cdecl - __fastcall __int32 __declspec __finally __int61 __try __leave - inline _inline __inline naked _naked __naked restrict _restrict - __restrict thread _thread __thread typename _typename __typename - ) - end - - # high priority for filename matches - def self.analyze_text(*) - 0.3 - end - - def self.builtins - @builtins ||= [] - end - - start { push :bol } - - state :expr_bol do - mixin :inline_whitespace - - rule /#if\s0/, Comment, :if_0 - rule /#/, Comment::Preproc, :macro - - rule(//) { pop! } - end - - # :expr_bol is the same as :bol but without labels, since - # labels can only appear at the beginning of a statement. - state :bol do - rule /#{id}:(?!:)/, Name::Label - mixin :expr_bol - end - - state :inline_whitespace do - rule /[ \t\r]+/, Text - rule /\\\n/, Text # line continuation - rule %r(/(\\\n)?[*].*?[*](\\\n)?/)m, Comment::Multiline - end - - state :whitespace do - rule /\n+/m, Text, :bol - rule %r(//(\\.|.)*?\n), Comment::Single, :bol - mixin :inline_whitespace - end - - state :expr_whitespace do - rule /\n+/m, Text, :expr_bol - mixin :whitespace - end - - state :statements do - mixin :whitespace - rule /L?"/, Str, :string - rule %r(L?'(\\.|\\[0-7]{1,3}|\\x[a-f0-9]{1,2}|[^\\'\n])')i, Str::Char - rule %r((\d+[.]\d*|[.]?\d+)e[+-]?\d+[lu]*)i, Num::Float - rule %r(\d+e[+-]?\d+[lu]*)i, Num::Float - rule /0x[0-9a-f]+[lu]*/i, Num::Hex - rule /0[0-7]+[lu]*/i, Num::Oct - rule /\d+[lu]*/i, Num::Integer - rule %r(\*/), Error - rule %r([~!%^&*+=\|?:<>/-]), Operator - rule /[()\[\],.]/, Punctuation - rule /\bcase\b/, Keyword, :case - rule /(?:true|false|NULL)\b/, Name::Builtin - rule id do |m| - name = m[0] - - if self.class.keywords.include? name - token Keyword - elsif self.class.keywords_type.include? name - token Keyword::Type - elsif self.class.reserved.include? name - token Keyword::Reserved - elsif self.class.builtins.include? name - token Name::Builtin - else - token Name - end - end - end - - state :case do - rule /:/, Punctuation, :pop! - mixin :statements - end - - state :root do - mixin :expr_whitespace - - # functions - rule %r( - ([\w*\s]+?[\s*]) # return arguments - (#{id}) # function name - (\s*\([^;]*?\)) # signature - (#{ws})({) # open brace - )mx do |m| - # TODO: do this better. - recurse m[1] - token Name::Function, m[2] - recurse m[3] - recurse m[4] - token Punctuation, m[5] - push :function - end - - # function declarations - rule %r( - ([\w*\s]+?[\s*]) # return arguments - (#{id}) # function name - (\s*\([^;]*?\)) # signature - (#{ws})(;) # semicolon - )mx do |m| - # TODO: do this better. - recurse m[1] - token Name::Function, m[2] - recurse m[3] - recurse m[4] - token Punctuation, m[5] - push :statement - end - - rule(//) { push :statement } - end - - state :statement do - rule /;/, Punctuation, :pop! - mixin :expr_whitespace - mixin :statements - rule /[{}]/, Punctuation - end - - state :function do - mixin :whitespace - mixin :statements - rule /;/, Punctuation - rule /{/, Punctuation, :function - rule /}/, Punctuation, :pop! - end - - state :string do - rule /"/, Str, :pop! - rule /\\([\\abfnrtv"']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})/, Str::Escape - rule /[^\\"\n]+/, Str - rule /\\\n/, Str - rule /\\/, Str # stray backslash - end - - state :macro do - # NB: pop! goes back to :bol - rule /\n/, Comment::Preproc, :pop! - rule %r([^/\n\\]+), Comment::Preproc - rule /\\./m, Comment::Preproc - mixin :inline_whitespace - rule %r(/), Comment::Preproc - end - - state :if_0 do - # NB: no \b here, to cover #ifdef and #ifndef - rule /^\s*#if/, Comment, :if_0 - rule /^\s*#\s*el(?:se|if)/, Comment, :pop! - rule /^\s*#\s*endif\b.*?(? / < <= = == > >= accessor agent agent-errors - aget alength all-ns alter and append-child apply array-map - aset aset-boolean aset-byte aset-char aset-double aset-float - aset-int aset-long aset-short assert assoc await await-for bean - binding bit-and bit-not bit-or bit-shift-left bit-shift-right - bit-xor boolean branch? butlast byte cast char children - class clear-agent-errors comment commute comp comparator - complement concat conj cons constantly construct-proxy - contains? count create-ns create-struct cycle dec deref - difference disj dissoc distinct doall doc dorun doseq dosync - dotimes doto double down drop drop-while edit end? ensure eval - every? false? ffirst file-seq filter find find-doc find-ns - find-var first float flush fnseq frest gensym get-proxy-class - get hash-map hash-set identical? identity if-let import in-ns - inc index insert-child insert-left insert-right inspect-table - inspect-tree instance? int interleave intersection into - into-array iterate join key keys keyword keyword? last lazy-cat - lazy-cons left lefts line-seq list* list load load-file locking - long loop macroexpand macroexpand-1 make-array make-node map - map-invert map? mapcat max max-key memfn merge merge-with meta - min min-key name namespace neg? new newline next nil? node not - not-any? not-every? not= ns-imports ns-interns ns-map ns-name - ns-publics ns-refers ns-resolve ns-unmap nth nthrest or parse - partial path peek pop pos? pr pr-str print print-str println - println-str prn prn-str project proxy proxy-mappings quot - rand rand-int range re-find re-groups re-matcher re-matches - re-pattern re-seq read read-line reduce ref ref-set refer rem - remove remove-method remove-ns rename rename-keys repeat replace - replicate resolve rest resultset-seq reverse rfirst right - rights root rrest rseq second select select-keys send send-off - seq seq-zip seq? set short slurp some sort sort-by sorted-map - sorted-map-by sorted-set special-symbol? split-at split-with - str string? struct struct-map subs subvec symbol symbol? - sync take take-nth take-while test time to-array to-array-2d - tree-seq true? union up update-proxy val vals var-get var-set - var? vector vector-zip vector? when when-first when-let - when-not with-local-vars with-meta with-open with-out-str - xml-seq xml-zip zero? zipmap zipper' - ) - end - - identifier = %r([\w!$%*+,<=>?/.-]+) - keyword = %r([\w!\#$%*+,<=>?/.-]+) - - def name_token(name) - return Keyword if self.class.keywords.include?(name) - return Name::Builtin if self.class.builtins.include?(name) - nil - end - - state :root do - rule /;.*?\n/, Comment::Single - rule /\s+/m, Text::Whitespace - - rule /-?\d+\.\d+/, Num::Float - rule /-?\d+/, Num::Integer - rule /0x-?[0-9a-fA-F]+/, Num::Hex - - rule /"(\\.|[^"])*"/, Str - rule /'#{keyword}/, Str::Symbol - rule /::?#{keyword}/, Name::Constant - rule /\\(.|[a-z]+)/i, Str::Char - - - rule /~@|[`\'#^~&]/, Operator - - rule /(\()(\s*)(#{identifier})/m do |m| - token Punctuation, m[1] - token Text::Whitespace, m[2] - token(name_token(m[3]) || Name::Function, m[3]) - end - - rule identifier do |m| - token name_token(m[0]) || Name - end - - # vectors - rule /[\[\]]/, Punctuation - - # maps - rule /[{}]/, Punctuation - - # parentheses - rule /[()]/, Punctuation - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/coffeescript.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/coffeescript.rb deleted file mode 100644 index c594b80..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/coffeescript.rb +++ /dev/null @@ -1,174 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - class Coffeescript < RegexLexer - tag 'coffeescript' - aliases 'coffee', 'coffee-script' - filenames '*.coffee', 'Cakefile' - mimetypes 'text/coffeescript' - - title "CoffeeScript" - desc 'The Coffeescript programming language (coffeescript.org)' - - def self.analyze_text(text) - return 1 if text.shebang? 'coffee' - end - - def self.keywords - @keywords ||= Set.new %w( - for in of while break return continue switch when then if else - throw try catch finally new delete typeof instanceof super - extends this class by - ) - end - - def self.constants - @constants ||= Set.new %w( - true false yes no on off null NaN Infinity undefined - ) - end - - def self.builtins - @builtins ||= Set.new %w( - Array Boolean Date Error Function Math netscape Number Object - Packages RegExp String sun decodeURI decodeURIComponent - encodeURI encodeURIComponent eval isFinite isNaN parseFloat - parseInt document window - ) - end - - id = /[$a-zA-Z_][a-zA-Z0-9_]*/ - - state :comments_and_whitespace do - rule /\s+/m, Text - rule /###.*?###/m, Comment::Multiline - rule /#.*?\n/, Comment::Single - end - - state :multiline_regex do - # this order is important, so that #{ isn't interpreted - # as a comment - mixin :has_interpolation - mixin :comments_and_whitespace - - rule %r(///([gim]+\b|\B)), Str::Regex, :pop! - rule %r(/), Str::Regex - rule %r([^/#]+), Str::Regex - end - - state :slash_starts_regex do - mixin :comments_and_whitespace - rule %r(///) do - token Str::Regex - goto :multiline_regex - end - - rule %r( - /(\\.|[^\[/\\\n]|\[(\\.|[^\]\\\n])*\])+/ # a regex - ([gim]+\b|\B) - )x, Str::Regex, :pop! - - rule(//) { pop! } - end - - state :root do - rule(%r(^(?=\s|/| - rule /--(?![!#\$\%&*+.\/<=>?@\^\|_~]).*?$/, Comment::Single - end - - # nested commenting - state :comment do - rule /-}/, Comment::Multiline, :pop! - rule /{-/, Comment::Multiline, :comment - rule /[^-{}]+/, Comment::Multiline - rule /[-{}]/, Comment::Multiline - end - - state :comment_preproc do - rule /-}/, Comment::Preproc, :pop! - rule /{-/, Comment::Preproc, :comment - rule /[^-{}]+/, Comment::Preproc - rule /[-{}]/, Comment::Preproc - end - - state :root do - mixin :basic - - rule /\bimport\b/, Keyword::Reserved, :import - rule /\bmodule\b/, Keyword::Reserved, :module - rule /\berror\b/, Name::Exception - rule /\b(?:#{reserved.join('|')})\b/, Keyword::Reserved - # not sure why, but ^ doesn't work here - # rule /^[_a-z][\w']*/, Name::Function - rule /[_a-z][\w']*/, Name - rule /[A-Z][\w']*/, Keyword::Type - - # lambda operator - rule %r(\\(?![:!#\$\%&*+.\\/<=>?@^\|~-]+)), Name::Function - # special operators - rule %r((<-|::|->|=>|=)(?![:!#\$\%&*+.\\/<=>?@^\|~-]+)), Operator - # constructor/type operators - rule %r(:[:!#\$\%&*+.\\/<=>?@^\|~-]*), Operator - # other operators - rule %r([:!#\$\%&*+.\\/<=>?@^\|~-]+), Operator - - rule /\d+e[+-]?\d+/i, Num::Float - rule /\d+\.\d+(e[+-]?\d+)?/i, Num::Float - rule /0o[0-7]+/i, Num::Oct - rule /0x[\da-f]+/i, Num::Hex - rule /\d+/, Num::Integer - - rule /'/, Str::Char, :character - rule /"/, Str, :string - - rule /\[\s*\]/, Keyword::Type - rule /\(\s*\)/, Name::Builtin - rule /[\[\](),;`{}]/, Punctuation - end - - state :import do - rule /\s+/, Text - rule /"/, Str, :string - rule /\bqualified\b/, Keyword - # import X as Y - rule /([A-Z][\w.]*)(\s+)(as)(\s+)([A-Z][a-zA-Z0-9_.]*)/ do - groups( - Name::Namespace, # X - Text, Keyword, # as - Text, Name # Y - ) - pop! - end - - # import X hiding (functions) - rule /([A-Z][\w.]*)(\s+)(hiding)(\s+)(\()/ do - groups( - Name::Namespace, # X - Text, Keyword, # hiding - Text, Punctuation # ( - ) - goto :funclist - end - - # import X (functions) - rule /([A-Z][\w.]*)(\s+)(\()/ do - groups( - Name::Namespace, # X - Text, - Punctuation # ( - ) - goto :funclist - end - - rule /[\w.]+/, Name::Namespace, :pop! - end - - state :module do - rule /\s+/, Text - # module Foo (functions) - rule /([A-Z][\w.]*)(\s+)(\()/ do - groups Name::Namespace, Text, Punctuation - push :funclist - end - - rule /\bwhere\b/, Keyword::Reserved, :pop! - - rule /[A-Z][a-zA-Z0-9_.]*/, Name::Namespace, :pop! - end - - state :funclist do - mixin :basic - rule /[A-Z]\w*/, Keyword::Type - rule /(_[\w\']+|[a-z][\w\']*)/, Name::Function - rule /,/, Punctuation - rule /[:!#\$\%&*+.\\\/<=>?@^\|~-]+/, Operator - rule /\(/, Punctuation, :funclist - rule /\)/, Punctuation, :pop! - end - - state :character do - rule /\\/ do - token Str::Escape - push :character_end - push :escape - end - - rule /./ do - token Str::Char - goto :character_end - end - end - - state :character_end do - rule /'/, Str::Char, :pop! - rule /./, Error, :pop! - end - - state :string do - rule /"/, Str, :pop! - rule /\\/, Str::Escape, :escape - rule /[^\\"]+/, Str - end - - state :escape do - rule /[abfnrtv"'&\\]/, Str::Escape, :pop! - rule /\^[\]\[A-Z@\^_]/, Str::Escape, :pop! - rule /#{ascii.join('|')}/, Str::Escape, :pop! - rule /o[0-7]+/i, Str::Escape, :pop! - rule /x[\da-f]/i, Str::Escape, :pop! - rule /\d+/, Str::Escape, :pop! - rule /\s+\\/, Str::Escape, :pop! - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/html.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/html.rb deleted file mode 100644 index f80da2f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/html.rb +++ /dev/null @@ -1,94 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - class HTML < RegexLexer - title "HTML" - desc "HTML, the markup language of the web" - tag 'html' - filenames '*.htm', '*.html', '*.xhtml' - mimetypes 'text/html', 'application/xhtml+xml' - - def self.analyze_text(text) - return 1 if text.doctype?(/\bhtml\b/i) - return 1 if text =~ /<\s*html\b/ - end - - state :root do - rule /[^<&]+/m, Text - rule /&\S*?;/, Name::Entity - rule //im, Comment::Preproc - rule //m, Comment::Preproc - rule //, Comment, :pop! - rule /-/, Comment - end - - state :tag do - rule /\s+/m, Text - rule /[a-zA-Z0-9_:-]+\s*=/m, Name::Attribute, :attr - rule /[a-zA-Z0-9_:-]+/, Name::Attribute - rule %r(/?\s*>)m, Name::Tag, :pop! - end - - state :attr do - # TODO: are backslash escapes valid here? - rule /"/ do - token Str - goto :dq - end - - rule /'/ do - token Str - goto :sq - end - - rule /[^\s>]+/, Str, :pop! - end - - state :dq do - rule /"/, Str, :pop! - rule /[^"]+/, Str - end - - state :sq do - rule /'/, Str, :pop! - rule /[^']+/, Str - end - - state :script_content do - rule %r(<\s*/\s*script\s*>)m, Name::Tag, :pop! - rule %r(.*?(?=<\s*/\s*script\s*>))m do - delegate Javascript - end - end - - state :style_content do - rule %r(<\s*/\s*style\s*>)m, Name::Tag, :pop! - rule %r(.*(?=<\s*/\s*style\s*>))m do - delegate CSS - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/http.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/http.rb deleted file mode 100644 index 95be336..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/http.rb +++ /dev/null @@ -1,80 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - class HTTP < RegexLexer - tag 'http' - title "HTTP" - desc 'http requests and responses' - - def self.methods - @methods ||= %w(GET POST PUT DELETE HEAD OPTIONS TRACE PATCH) - end - - def content_lexer - return Lexers::PlainText unless @content_type - - @content_lexer ||= Lexer.guess_by_mimetype(@content_type) - rescue Lexer::AmbiguousGuess - @content_lexer = Lexers::PlainText - end - - start { @content_type = 'text/plain' } - - state :root do - # request - rule %r( - (#{HTTP.methods.join('|')})([ ]+) # method - ([^ ]+)([ ]+) # path - (HTTPS?)(/)(1[.][01])(\r?\n|$) # http version - )ox do - groups( - Name::Function, Text, - Name::Namespace, Text, - Keyword, Operator, Num, Text - ) - - push :headers - end - - # response - rule %r( - (HTTPS?)(/)(1[.][01])([ ]+) # http version - (\d{3})([ ]+) # status - ([^\r\n]+)(\r?\n|$) # status message - )x do - groups( - Keyword, Operator, Num, Text, - Num, Text, - Name::Exception, Text - ) - push :headers - end - end - - state :headers do - rule /([^\s:]+)( *)(:)( *)([^\r\n]+)(\r?\n|$)/ do |m| - key = m[1] - value = m[5] - if key.strip.downcase == 'content-type' - @content_type = value.split(';')[0].downcase - end - - groups Name::Attribute, Text, Punctuation, Text, Str, Text - end - - rule /([^\r\n]+)(\r?\n|$)/ do - groups Str, Text - end - - rule /\r?\n/, Text, :content - end - - state :content do - rule /.+/m do |m| - delegate(content_lexer) - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/ini.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/ini.rb deleted file mode 100644 index 0245218..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/ini.rb +++ /dev/null @@ -1,57 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - class INI < RegexLexer - title "INI" - desc 'the INI configuration format' - tag 'ini' - - # TODO add more here - filenames '*.ini', '*.INI', '*.gitconfig' - mimetypes 'text/x-ini' - - def self.analyze_text(text) - return 0.1 if text =~ /\A\[[\w.]+\]\s*\w+=\w+/ - end - - identifier = /[\w.]+/ - - state :basic do - rule /[;#].*?\n/, Comment - rule /\s+/, Text - rule /\\\n/, Str::Escape - end - - state :root do - mixin :basic - - rule /(#{identifier})(\s*)(=)/ do - groups Name::Property, Text, Punctuation - push :value - end - - rule /\[.*?\]/, Name::Namespace - end - - state :value do - rule /\n/, Text, :pop! - mixin :basic - rule /"/, Str, :dq - rule /'.*?'/, Str - mixin :esc_str - rule /[^\\\n]+/, Str - end - - state :dq do - rule /"/, Str, :pop! - mixin :esc_str - rule /[^\\"]+/m, Str - end - - state :esc_str do - rule /\\./m, Str::Escape - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/io.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/io.rb deleted file mode 100644 index b3154c3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/io.rb +++ /dev/null @@ -1,68 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - class IO < RegexLexer - tag 'io' - title "Io" - desc 'The IO programming language (http://iolanguage.com)' - mimetypes 'text/x-iosrc' - filenames '*.io' - - def self.analyze_text(text) - return 1 if text.shebang? 'io' - end - - def self.constants - @constants ||= Set.new %w(nil false true) - end - - def self.builtins - @builtins ||= Set.new %w( - args call clone do doFile doString else elseif for if list - method return super then - ) - end - - state :root do - rule /\s+/m, Text - rule %r(//.*?\n), Comment::Single - rule %r(#.*?\n), Comment::Single - rule %r(/(\\\n)?[*].*?[*](\\\n)?/)m, Comment::Multiline - rule %r(/[+]), Comment::Multiline, :nested_comment - - rule /"(\\\\|\\"|[^"])*"/, Str - - rule %r(:?:=), Keyword - rule /[()]/, Punctuation - - rule %r([-=;,*+>\|+=:;,.\/?-]/, Operator - rule /[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?/, Num::Float - rule /0x[0-9a-f]+/, Num::Hex - rule /[0-9]+L?/, Num::Integer - # rule /\n/, Text - end - - state :class do - rule /\s+/m, Text - rule id, Name::Class, :pop! - end - - state :import do - rule /\s+/m, Text - rule /[a-z0-9_.]+\*?/i, Name::Namespace, :pop! - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/javascript.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/javascript.rb deleted file mode 100644 index d78be15..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/javascript.rb +++ /dev/null @@ -1,297 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - class Javascript < RegexLexer - title "JavaScript" - desc "JavaScript, the browser scripting language" - - tag 'javascript' - aliases 'js' - filenames '*.js' - mimetypes 'application/javascript', 'application/x-javascript', - 'text/javascript', 'text/x-javascript' - - def self.analyze_text(text) - return 1 if text.shebang?('node') - return 1 if text.shebang?('jsc') - # TODO: rhino, spidermonkey, etc - end - - state :comments_and_whitespace do - rule /\s+/, Text - rule //, Punctuation - - rule /"[^"]*"/, Str::Double - - rule /\d+\.\d+/, Num::Float - rule /\d+/, Num - end - - state :atoms do - rule /[[:lower:]]([_[:word:][:digit:]])*/, Str::Symbol - rule /'[^']*'/, Str::Symbol - end - - state :operators do - rule /(<|>|=<|>=|==|=:=|=|\/|\/\/|\*|\+|-)(?=\s|[a-zA-Z0-9\[])/, - Operator - rule /is/, Operator - rule /(mod|div|not)/, Operator - rule /[#&*+-.\/:<=>?@^~]+/, Operator - end - - state :variables do - rule /[A-Z]+\w*/, Name::Variable - rule /_[[:word:]]*/, Name::Variable - end - - state :root do - mixin :basic - mixin :atoms - mixin :variables - mixin :operators - end - - state :nested_comment do - rule /\/\*/, Comment::Multiline, :push - rule /\s*\*[^*\/]+/, Comment::Multiline - rule /\*\//, Comment::Multiline, :pop! - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/properties.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/properties.rb deleted file mode 100644 index 48b82b6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/properties.rb +++ /dev/null @@ -1,55 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - class Properties < RegexLexer - title ".properties" - desc '.properties config files for Java' - tag 'properties' - - filenames '*.properties' - mimetypes 'text/x-java-properties' - - def self.analyze_text(text) - return 0.1 if text =~ /\A\[[\w.]+\]\s*\w+=\w+/ - end - - identifier = /[\w.]+/ - - state :basic do - rule /[!#].*?\n/, Comment - rule /\s+/, Text - rule /\\\n/, Str::Escape - end - - state :root do - mixin :basic - - rule /(#{identifier})(\s*)([=:])/ do - groups Name::Property, Text, Punctuation - push :value - end - end - - state :value do - rule /\n/, Text, :pop! - mixin :basic - rule /"/, Str, :dq - rule /'.*?'/, Str - mixin :esc_str - rule /[^\\\n]+/, Str - end - - state :dq do - rule /"/, Str, :pop! - mixin :esc_str - rule /[^\\"]+/m, Str - end - - state :esc_str do - rule /\\u[0-9]{4}/, Str::Escape - rule /\\./m, Str::Escape - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/puppet.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/puppet.rb deleted file mode 100644 index d7c59cc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/puppet.rb +++ /dev/null @@ -1,128 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - class Puppet < RegexLexer - title "Puppet" - desc 'The Puppet configuration management language (puppetlabs.org)' - tag 'puppet' - aliases 'pp' - filenames '*.pp' - - def self.analyze_text(text) - return 1 if text.shebang? 'puppet-apply' - return 1 if text.shebang? 'puppet' - end - - def self.keywords - @keywords ||= Set.new %w( - and case class default define else elsif if in import inherits - node unless - ) - end - - def self.constants - @constants ||= Set.new %w( - false true undef - ) - end - - def self.metaparameters - @metaparameters ||= Set.new %w( - before require notify subscribe - ) - end - - id = /[a-z]\w*/ - cap_id = /[A-Z]\w*/ - qualname = /(::)?(#{id}::)*\w+/ - - state :whitespace do - rule /\s+/m, Text - rule /#.*?\n/, Comment - end - - state :root do - mixin :whitespace - - rule /[$]#{qualname}/, Name::Variable - rule /(#{id})(?=\s*[=+]>)/m do |m| - if self.class.metaparameters.include? m[0] - token Keyword::Pseudo - else - token Name::Property - end - end - - rule /(#{qualname})(?=\s*[(])/m, Name::Function - rule cap_id, Name::Class - - rule /[+=|~-]>|<[|~-]/, Punctuation - rule /[:}();\[\]]/, Punctuation - - # HACK for case statements and selectors - rule /{/, Punctuation, :regex_allowed - rule /,/, Punctuation, :regex_allowed - - rule /(in|and|or)\b/, Operator::Word - rule /[=!<>]=/, Operator - rule /[=!]~/, Operator, :regex_allowed - rule %r([<>!+*/-]), Operator - - rule /(class|include)(\s*)(#{qualname})/ do - groups Keyword, Text, Name::Class - end - - rule /node\b/, Keyword, :regex_allowed - - rule /'(\\[\\']|[^'])*'/m, Str::Single - rule /"/, Str::Double, :dquotes - - rule /\d+([.]\d+)?(e[+-]\d+)?/, Num - - # a valid regex. TODO: regexes are only allowed - # in certain places in puppet. - rule qualname do |m| - if self.class.keywords.include? m[0] - token Keyword - elsif self.class.constants.include? m[0] - token Keyword::Constant - else - token Name - end - end - end - - state :regex_allowed do - mixin :whitespace - rule %r(/), Str::Regex, :regex - - rule(//) { pop! } - end - - state :regex do - rule %r(/), Str::Regex, :pop! - rule /\\./, Str::Escape - rule /[(){}]/, Str::Interpol - rule /\[/, Str::Interpol, :regex_class - rule /./, Str::Regex - end - - state :regex_class do - rule /\]/, Str::Interpol, :pop! - rule /(?>|[-~+\/*%=<>&^|.]/, Operator - - rule /(def)((?:\s|\\\s)+)/ do - groups Keyword, Text - push :funcname - end - - rule /(class)((?:\s|\\\s)+)/ do - groups Keyword, Text - push :classname - end - - rule /(from)((?:\s|\\\s)+)/ do - groups Keyword::Namespace, Text - push :fromimport - end - - rule /(import)((?:\s|\\\s)+)/ do - groups Keyword::Namespace, Text - push :import - end - - # TODO: not in python 3 - rule /`.*?`/, Str::Backtick - rule /(?:r|ur|ru)"""/i, Str, :tdqs - rule /(?:r|ur|ru)'''/i, Str, :tsqs - rule /(?:r|ur|ru)"/i, Str, :dqs - rule /(?:r|ur|ru)'/i, Str, :sqs - rule /u?"""/i, Str, :escape_tdqs - rule /u?'''/i, Str, :escape_tsqs - rule /u?"/i, Str, :escape_dqs - rule /u?'/i, Str, :escape_sqs - - rule /@#{dotted_identifier}/i, Name::Decorator - - # using negative lookbehind so we don't match property names - rule /(? go back - end - - state :fromimport do - # non-line-terminating whitespace - rule /(?:[ \t]|\\\n)+/, Text - - rule /import\b/, Keyword::Namespace, :pop! - rule dotted_identifier, Name::Namespace - end - - state :strings do - rule /%(\([a-z0-9_]+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?/i, Str::Interpol - end - - state :strings_double do - rule /[^\\"%\n]+/, Str - mixin :strings - end - - state :strings_single do - rule /[^\\'%\n]+/, Str - mixin :strings - end - - state :nl do - rule /\n/, Str - end - - state :escape do - rule %r(\\ - ( [\\abfnrtv"'] - | \n - | N{.*?} - | u[a-fA-F0-9]{4} - | U[a-fA-F0-9]{8} - | x[a-fA-F0-9]{2} - | [0-7]{1,3} - ) - )x, Str::Escape - end - - state :dqs do - rule /"/, Str, :pop! - rule /\\\\|\\"|\\\n/, Str::Escape - mixin :strings_double - end - - state :sqs do - rule /'/, Str, :pop! - rule /\\\\|\\'|\\\n/, Str::Escape - mixin :strings_single - end - - state :tdqs do - rule /"""/, Str, :pop! - rule /"/, Str - mixin :strings_double - mixin :nl - end - - state :tsqs do - rule /'''/, Str, :pop! - rule /'/, Str - mixin :strings_single - mixin :nl - end - - %w(tdqs tsqs dqs sqs).each do |qtype| - state :"escape_#{qtype}" do - mixin :escape - mixin :"#{qtype}" - end - end - - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/qml.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/qml.rb deleted file mode 100644 index fb5fd06..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/qml.rb +++ /dev/null @@ -1,72 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - load_const :Javascript, 'javascript.rb' - class Qml < Javascript - title "QML" - desc 'QML, a UI markup language' - tag 'qml' - aliases 'qml' - filenames '*.qml' - - mimetypes 'application/x-qml', 'text/x-qml' - - id_with_dots = /[$a-zA-Z_][a-zA-Z0-9_.]*/ - - prepend :root do - rule /(#{id_with_dots})(\s*)({)/ do - groups Keyword::Type, Text, Punctuation - push :type_block - end - rule /(#{id_with_dots})(\s+)(on)(\s+)(#{id_with_dots})(\s*)({)/ do - groups Keyword::Type, Text, Keyword, Text, Name::Label, Text, Punctuation - push :type_block - end - - rule /[{]/, Punctuation, :push - end - - state :type_block do - rule /(id)(\s*)(:)(\s*)(#{id_with_dots})/ do - groups Name::Label, Text, Punctuation, Text, Keyword::Declaration - end - - rule /(#{id_with_dots})(\s*)(:)/ do - groups Name::Label, Text, Punctuation - push :expr_start - end - - rule /(signal)(\s+)(#{id_with_dots})/ do - groups Keyword::Declaration, Text, Name::Label - push :signal - end - - rule /(property)(\s+)(#{id_with_dots})(\s+)(#{id_with_dots})(\s*)(:?)/ do - groups Keyword::Declaration, Text, Keyword::Type, Text, Name::Label, Text, Punctuation - push :expr_start - end - - rule /[}]/, Punctuation, :pop! - mixin :root - end - - state :signal do - mixin :comments_and_whitespace - rule /\(/ do - token Punctuation - goto :signal_args - end - rule //, Text, :pop! - end - - state :signal_args do - mixin :comments_and_whitespace - rule /(#{id_with_dots})(\s+)(#{id_with_dots})(\s*)(,?)/ do - groups Keyword::Type, Text, Name, Text, Punctuation - end - rule /\)/ , Punctuation, :pop! - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/r.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/r.rb deleted file mode 100644 index 574dbac..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/r.rb +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - class R < RegexLexer - title "R" - desc 'The R statistics language (r-project.org)' - tag 'r' - aliases 'r', 'R', 's', 'S' - filenames '*.R', '.Rhistory', '.Rprofile' - mimetypes 'text/x-r-source', 'text/x-r', 'text/x-R' - - mimetypes 'text/x-r', 'application/x-r' - - def self.keywords - @keywords ||= %w( - if else for while repeat in next break return switch function - ) - end - - def self.analyze_text(text) - return 1 if text.shebang? 'Rscript' - end - - state :root do - rule /#.*?\n/, Comment::Single - rule /\s+/m, Text - rule /[.]?[a-zA-Z_][\w.]*/ do |m| - if self.class.keywords.include? m[0] - token Keyword - else - token Name - end - end - - rule /`.*?`/, Str::Backtick - rule /'(\\.|.)*?'/m, Str::Single - rule /"(\\.|.)*?"/m, Str::Double - - rule /\b(NULL|Inf|TRUE|FALSE|NaN)\b/, Keyword::Constant - rule /\bNA(_(integer|real|complex|character)_)?\b/, - Keyword::Constant - rule /\b[TF]\b/, Keyword::Variable - - rule /0[xX][a-fA-F0-9]+([pP][0-9]+)?[Li]?/, Num::Hex - rule /[+-]?(\d+([.]\d+)?|[.]\d+)([eE][+-]?\d+)?[Li]?/, - Num - - rule /[\[\]{}();,]/, Punctuation - - rule %r([-<>?*+^/!=~$@:%&|]), Operator - rule /[.][.][.]/, Keyword - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/racket.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/racket.rb deleted file mode 100644 index 242d283..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/racket.rb +++ /dev/null @@ -1,542 +0,0 @@ -# -*- coding: utf-8 -*- # -module Rouge - module Lexers - class Racket < RegexLexer - title "Racket" - desc "Racket is a Lisp descended from Scheme (racket-lang.org)" - - tag 'racket' - filenames '*.rkt', '*.rktd', '*.rktl' - mimetypes 'text/x-racket', 'application/x-racket' - - def self.analyze_text(text) - text = text.strip - return 1 if text.start_with? '#lang racket' - return 0.6 if text =~ %r(\A#lang [a-z/-]+$)i - end - - def self.keywords - @keywords ||= Set.new %w( - ... and begin begin-for-syntax begin0 case case-lambda cond - datum->syntax-object define define-for-syntax define-logger - define-struct define-syntax define-syntax-rule - define-syntaxes define-values define-values-for-syntax delay - do expand-path fluid-let force hash-table-copy - hash-table-count hash-table-for-each hash-table-get - hash-table-iterate-first hash-table-iterate-key - hash-table-iterate-next hash-table-iterate-value - hash-table-map hash-table-put! hash-table-remove! - hash-table? if lambda let let* let*-values let-struct - let-syntax let-syntaxes let-values let/cc let/ec letrec - letrec-syntax letrec-syntaxes letrec-syntaxes+values - letrec-values list-immutable make-hash-table - make-immutable-hash-table make-namespace module module* - module-identifier=? module-label-identifier=? - module-template-identifier=? module-transformer-identifier=? - namespace-transformer-require or parameterize parameterize* - parameterize-break promise? prop:method-arity-error provide - provide-for-label provide-for-syntax quasiquote quasisyntax - quasisyntax/loc quote quote-syntax quote-syntax/prune - require require-for-label require-for-syntax - require-for-template set! set!-values syntax syntax-case - syntax-case* syntax-id-rules syntax-object->datum - syntax-rules syntax/loc tcp-abandon-port tcp-accept - tcp-accept-evt tcp-accept-ready? tcp-accept/enable-break - tcp-addresses tcp-close tcp-connect tcp-connect/enable-break - tcp-listen tcp-listener? tcp-port? time transcript-off - transcript-on udp-addresses udp-bind! udp-bound? udp-close - udp-connect! udp-connected? udp-multicast-interface - udp-multicast-join-group! udp-multicast-leave-group! - udp-multicast-loopback? udp-multicast-set-interface! - udp-multicast-set-loopback! udp-multicast-set-ttl! - udp-multicast-ttl udp-open-socket udp-receive! udp-receive!* - udp-receive!-evt udp-receive!/enable-break - udp-receive-ready-evt udp-send udp-send* udp-send-evt - udp-send-ready-evt udp-send-to udp-send-to* udp-send-to-evt - udp-send-to/enable-break udp-send/enable-break udp? unless - unquote unquote-splicing unsyntax unsyntax-splicing when - with-continuation-mark with-handlers with-handlers* - with-syntax λ) - end - - def self.builtins - @builtins ||= Set.new %w( - * + - / < <= = > >= - abort-current-continuation abs absolute-path? acos add1 - alarm-evt always-evt andmap angle append apply - arithmetic-shift arity-at-least arity-at-least-value - arity-at-least? asin assoc assq assv atan banner bitwise-and - bitwise-bit-field bitwise-bit-set? bitwise-ior bitwise-not - bitwise-xor boolean? bound-identifier=? box box-cas! - box-immutable box? break-enabled break-thread build-path - build-path/convention-type byte-pregexp byte-pregexp? - byte-ready? byte-regexp byte-regexp? byte? bytes - bytes->immutable-bytes bytes->list bytes->path - bytes->path-element bytes->string/latin-1 - bytes->string/locale bytes->string/utf-8 bytes-append - bytes-close-converter bytes-convert bytes-convert-end - bytes-converter? bytes-copy bytes-copy! - bytes-environment-variable-name? bytes-fill! bytes-length - bytes-open-converter bytes-ref bytes-set! bytes-utf-8-index - bytes-utf-8-length bytes-utf-8-ref bytes? - bytes? caaaar caaadr caaar caadar caaddr caadr caar cadaar - cadadr cadar caddar cadddr caddr cadr call-in-nested-thread - call-with-break-parameterization - call-with-composable-continuation - call-with-continuation-barrier call-with-continuation-prompt - call-with-current-continuation - call-with-default-reading-parameterization - call-with-escape-continuation call-with-exception-handler - call-with-immediate-continuation-mark call-with-input-file - call-with-output-file call-with-parameterization - call-with-semaphore call-with-semaphore/enable-break - call-with-values call/cc call/ec car cdaaar cdaadr cdaar - cdadar cdaddr cdadr cdar cddaar cddadr cddar cdddar cddddr - cdddr cddr cdr ceiling channel-get channel-put - channel-put-evt channel-put-evt? channel-try-get channel? - chaperone-box chaperone-continuation-mark-key chaperone-evt - chaperone-hash chaperone-of? chaperone-procedure - chaperone-prompt-tag chaperone-struct chaperone-struct-type - chaperone-vector chaperone? char->integer char-alphabetic? - char-blank? char-ci<=? char-ci=? - char-ci>? char-downcase char-foldcase char-general-category - char-graphic? char-iso-control? char-lower-case? - char-numeric? char-punctuation? char-ready? char-symbolic? - char-title-case? char-titlecase char-upcase char-upper-case? - char-utf-8-length char-whitespace? char<=? char=? char>? char? check-duplicate-identifier - checked-procedure-check-and-extract choice-evt cleanse-path - close-input-port close-output-port collect-garbage - collection-file-path collection-path compile - compile-allow-set!-undefined - compile-context-preservation-enabled - compile-enforce-module-constants compile-syntax - compiled-expression? compiled-module-expression? - complete-path? complex? cons continuation-mark-key? - continuation-mark-set->context continuation-mark-set->list - continuation-mark-set->list* continuation-mark-set-first - continuation-mark-set? continuation-marks - continuation-prompt-available? continuation-prompt-tag? - continuation? copy-file cos current-break-parameterization - current-code-inspector current-command-line-arguments - current-compile current-compiled-file-roots - current-continuation-marks current-custodian - current-directory current-directory-for-user current-drive - current-environment-variables current-error-port - current-eval current-evt-pseudo-random-generator - current-gc-milliseconds current-get-interaction-input-port - current-inexact-milliseconds current-input-port - current-inspector current-library-collection-paths - current-load current-load-extension - current-load-relative-directory current-load/use-compiled - current-locale current-memory-use current-milliseconds - current-module-declare-name current-module-declare-source - current-module-name-resolver current-module-path-for-load - current-namespace current-output-port - current-parameterization - current-preserved-thread-cell-values current-print - current-process-milliseconds current-prompt-read - current-pseudo-random-generator current-read-interaction - current-reader-guard current-readtable current-seconds - current-security-guard current-subprocess-custodian-mode - current-thread current-thread-group - current-thread-initial-stack-size - current-write-relative-directory custodian-box-value - custodian-box? custodian-limit-memory custodian-managed-list - custodian-memory-accounting-available? - custodian-require-memory custodian-shutdown-all custodian? - custom-print-quotable-accessor custom-print-quotable? - custom-write-accessor custom-write? date date* - date*-nanosecond date*-time-zone-name date*? date-day - date-dst? date-hour date-minute date-month date-second - date-time-zone-offset date-week-day date-year date-year-day - date? datum-intern-literal default-continuation-prompt-tag - delete-directory delete-file denominator directory-exists? - directory-list display displayln dump-memory-stats - dynamic-require dynamic-require-for-syntax dynamic-wind - environment-variables-copy environment-variables-names - environment-variables-ref environment-variables-set! - environment-variables? eof eof-object? ephemeron-value - ephemeron? eprintf eq-hash-code eq? equal-hash-code - equal-secondary-hash-code equal? equal?/recur eqv-hash-code - eqv? error error-display-handler error-escape-handler - error-print-context-length error-print-source-location - error-print-width error-value->string-handler eval - eval-jit-enabled eval-syntax even? evt? exact->inexact - exact-integer? exact-nonnegative-integer? - exact-positive-integer? exact? executable-yield-handler exit - exit-handler exn exn-continuation-marks exn-message - exn:break exn:break-continuation exn:break:hang-up - exn:break:hang-up? exn:break:terminate exn:break:terminate? - exn:break? exn:fail exn:fail:contract - exn:fail:contract:arity exn:fail:contract:arity? - exn:fail:contract:continuation - exn:fail:contract:continuation? - exn:fail:contract:divide-by-zero - exn:fail:contract:divide-by-zero? - exn:fail:contract:non-fixnum-result - exn:fail:contract:non-fixnum-result? - exn:fail:contract:variable exn:fail:contract:variable-id - exn:fail:contract:variable? exn:fail:contract? - exn:fail:filesystem exn:fail:filesystem:errno - exn:fail:filesystem:errno-errno exn:fail:filesystem:errno? - exn:fail:filesystem:exists exn:fail:filesystem:exists? - exn:fail:filesystem:missing-module - exn:fail:filesystem:missing-module-path - exn:fail:filesystem:missing-module? - exn:fail:filesystem:version exn:fail:filesystem:version? - exn:fail:filesystem? exn:fail:network exn:fail:network:errno - exn:fail:network:errno-errno exn:fail:network:errno? - exn:fail:network? exn:fail:out-of-memory - exn:fail:out-of-memory? exn:fail:read exn:fail:read-srclocs - exn:fail:read:eof exn:fail:read:eof? exn:fail:read:non-char - exn:fail:read:non-char? exn:fail:read? exn:fail:syntax - exn:fail:syntax-exprs exn:fail:syntax:missing-module - exn:fail:syntax:missing-module-path - exn:fail:syntax:missing-module? exn:fail:syntax:unbound - exn:fail:syntax:unbound? exn:fail:syntax? - exn:fail:unsupported exn:fail:unsupported? exn:fail:user - exn:fail:user? exn:fail? exn:missing-module-accessor - exn:missing-module? exn:srclocs-accessor exn:srclocs? exn? - exp expand expand-once expand-syntax expand-syntax-once - expand-syntax-to-top-form expand-to-top-form - expand-user-path explode-path expt file-exists? - file-or-directory-identity file-or-directory-modify-seconds - file-or-directory-permissions file-position file-position* - file-size file-stream-buffer-mode file-stream-port? - file-truncate filesystem-change-evt - filesystem-change-evt-cancel filesystem-change-evt? - filesystem-root-list find-executable-path - find-library-collection-paths find-system-path fixnum? - floating-point-bytes->real flonum? floor flush-output - for-each format fprintf free-identifier=? gcd - generate-temporaries gensym get-output-bytes - get-output-string getenv global-port-print-handler guard-evt - handle-evt handle-evt? hash hash-equal? hash-eqv? - hash-has-key? hash-placeholder? hash-ref! hasheq hasheqv - identifier-binding identifier-binding-symbol - identifier-label-binding identifier-prune-lexical-context - identifier-prune-to-source-module - identifier-remove-from-definition-context - identifier-template-binding identifier-transformer-binding - identifier? imag-part immutable? impersonate-box - impersonate-continuation-mark-key impersonate-hash - impersonate-procedure impersonate-prompt-tag - impersonate-struct impersonate-vector impersonator-ephemeron - impersonator-of? impersonator-prop:application-mark - impersonator-property-accessor-procedure? - impersonator-property? impersonator? inexact->exact - inexact-real? inexact? input-port? inspector? integer->char - integer->integer-bytes integer-bytes->integer integer-length - integer-sqrt integer-sqrt/remainder integer? - internal-definition-context-seal - internal-definition-context? keyword->string keywordbytes list->string - list->vector list-ref list-tail list? load load-extension - load-on-demand-enabled load-relative load-relative-extension - load/cd load/use-compiled local-expand - local-expand/capture-lifts local-transformer-expand - local-transformer-expand/capture-lifts - locale-string-encoding log log-max-level magnitude - make-arity-at-least make-bytes make-channel - make-continuation-mark-key make-continuation-prompt-tag - make-custodian make-custodian-box make-date make-date* - make-derived-parameter make-directory - make-environment-variables make-ephemeron make-exn - make-exn:break make-exn:break:hang-up - make-exn:break:terminate make-exn:fail - make-exn:fail:contract make-exn:fail:contract:arity - make-exn:fail:contract:continuation - make-exn:fail:contract:divide-by-zero - make-exn:fail:contract:non-fixnum-result - make-exn:fail:contract:variable make-exn:fail:filesystem - make-exn:fail:filesystem:errno - make-exn:fail:filesystem:exists - make-exn:fail:filesystem:missing-module - make-exn:fail:filesystem:version make-exn:fail:network - make-exn:fail:network:errno make-exn:fail:out-of-memory - make-exn:fail:read make-exn:fail:read:eof - make-exn:fail:read:non-char make-exn:fail:syntax - make-exn:fail:syntax:missing-module - make-exn:fail:syntax:unbound make-exn:fail:unsupported - make-exn:fail:user make-file-or-directory-link - make-hash-placeholder make-hasheq-placeholder make-hasheqv - make-hasheqv-placeholder make-immutable-hasheqv - make-impersonator-property make-input-port make-inspector - make-known-char-range-list make-output-port make-parameter - make-phantom-bytes make-pipe make-placeholder make-polar - make-prefab-struct make-pseudo-random-generator - make-reader-graph make-readtable make-rectangular - make-rename-transformer make-resolved-module-path - make-security-guard make-semaphore make-set!-transformer - make-shared-bytes make-sibling-inspector - make-special-comment make-srcloc make-string - make-struct-field-accessor make-struct-field-mutator - make-struct-type make-struct-type-property - make-syntax-delta-introducer make-syntax-introducer - make-thread-cell make-thread-group make-vector make-weak-box - make-weak-hasheqv make-will-executor map max mcar mcdr mcons - member memq memv min module->exports module->imports - module->language-info module->namespace - module-compiled-cross-phase-persistent? - module-compiled-exports module-compiled-imports - module-compiled-language-info module-compiled-name - module-compiled-submodules module-declared? - module-path-index-join module-path-index-resolve - module-path-index-split module-path-index-submodule - module-path-index? module-path? module-predefined? - module-provide-protected? modulo mpair? nack-guard-evt - namespace-attach-module namespace-attach-module-declaration - namespace-base-phase namespace-mapped-symbols - namespace-module-identifier namespace-module-registry - namespace-require namespace-require/constant - namespace-require/copy namespace-require/expansion-time - namespace-set-variable-value! namespace-symbol->identifier - namespace-syntax-introduce namespace-undefine-variable! - namespace-unprotect-module namespace-variable-value - namespace? negative? never-evt newline normal-case-path not - null null? number->string number? numerator object-name odd? - open-input-bytes open-input-file open-input-output-file - open-input-string open-output-bytes open-output-file - open-output-string ormap output-port? pair? - parameter-procedure=? parameter? parameterization? - path->bytes path->complete-path path->directory-path - path->string path-add-suffix path-convention-type - path-element->bytes path-element->string - path-for-some-system? path-list-string->path-list - path-replace-suffix path-string? path? peek-byte - peek-byte-or-special peek-bytes peek-bytes! - peek-bytes-avail! peek-bytes-avail!* - peek-bytes-avail!/enable-break peek-char - peek-char-or-special peek-string peek-string! phantom-bytes? - pipe-content-length placeholder-get placeholder-set! - placeholder? poll-guard-evt port-closed-evt port-closed? - port-commit-peeked port-count-lines! - port-count-lines-enabled port-counts-lines? - port-display-handler port-file-identity port-file-unlock - port-next-location port-print-handler port-progress-evt - port-provides-progress-evts? port-read-handler - port-try-file-lock? port-write-handler port-writes-atomic? - port-writes-special? port? positive? prefab-key->struct-type - prefab-key? prefab-struct-key pregexp pregexp? - primitive-closure? primitive-result-arity primitive? print - print-as-expression print-boolean-long-form print-box - print-graph print-hash-table print-mpair-curly-braces - print-pair-curly-braces print-reader-abbreviations - print-struct print-syntax-width print-unreadable - print-vector-length printf procedure->method procedure-arity - procedure-arity-includes? procedure-arity? - procedure-closure-contents-eq? procedure-extract-target - procedure-reduce-arity procedure-rename - procedure-struct-type? procedure? progress-evt? - prop:arity-string prop:checked-procedure - prop:custom-print-quotable prop:custom-write prop:equal+hash - prop:evt prop:exn:missing-module prop:exn:srclocs - prop:impersonator-of prop:input-port - prop:liberal-define-context prop:output-port prop:procedure - prop:rename-transformer prop:set!-transformer - pseudo-random-generator->vector - pseudo-random-generator-vector? pseudo-random-generator? - putenv quotient quotient/remainder raise - raise-argument-error raise-arguments-error raise-arity-error - raise-mismatch-error raise-range-error raise-result-error - raise-syntax-error raise-type-error raise-user-error random - random-seed rational? rationalize read read-accept-bar-quote - read-accept-box read-accept-compiled read-accept-dot - read-accept-graph read-accept-infix-dot read-accept-lang - read-accept-quasiquote read-accept-reader read-byte - read-byte-or-special read-bytes read-bytes! - read-bytes-avail! read-bytes-avail!* - read-bytes-avail!/enable-break read-bytes-line - read-case-sensitive read-char read-char-or-special - read-curly-brace-as-paren read-decimal-as-inexact - read-eval-print-loop read-language read-line - read-on-demand-source read-square-bracket-as-paren - read-string read-string! read-syntax read-syntax/recursive - read/recursive readtable-mapping readtable? - real->double-flonum real->floating-point-bytes - real->single-flonum real-part real? regexp regexp-match - regexp-match-peek regexp-match-peek-immediate - regexp-match-peek-positions - regexp-match-peek-positions-immediate - regexp-match-peek-positions-immediate/end - regexp-match-peek-positions/end regexp-match-positions - regexp-match-positions/end regexp-match/end regexp-match? - regexp-max-lookbehind regexp-replace regexp-replace* regexp? - relative-path? remainder rename-file-or-directory - rename-transformer-target rename-transformer? reroot-path - resolve-path resolved-module-path-name resolved-module-path? - reverse round seconds->date security-guard? - semaphore-peek-evt semaphore-peek-evt? semaphore-post - semaphore-try-wait? semaphore-wait - semaphore-wait/enable-break semaphore? - set!-transformer-procedure set!-transformer? set-box! - set-mcar! set-mcdr! set-phantom-bytes! - set-port-next-location! shared-bytes shell-execute - simplify-path sin single-flonum? sleep special-comment-value - special-comment? split-path sqrt srcloc srcloc->string - srcloc-column srcloc-line srcloc-position srcloc-source - srcloc-span srcloc? string string->bytes/latin-1 - string->bytes/locale string->bytes/utf-8 - string->immutable-string string->keyword string->list - string->number string->path string->path-element - string->symbol string->uninterned-symbol - string->unreadable-symbol string-append string-ci<=? - string-ci=? string-ci>? string-copy - string-copy! string-downcase - string-environment-variable-name? string-fill! - string-foldcase string-length string-locale-ci? string-locale-downcase - string-locale-upcase string-locale? string-normalize-nfc string-normalize-nfd - string-normalize-nfkc string-normalize-nfkd string-ref - string-set! string-titlecase string-upcase - string-utf-8-length string<=? string=? - string>? string? struct->vector struct-accessor-procedure? - struct-constructor-procedure? struct-info - struct-mutator-procedure? struct-predicate-procedure? - struct-type-info struct-type-make-constructor - struct-type-make-predicate - struct-type-property-accessor-procedure? - struct-type-property? struct-type? struct:arity-at-least - struct:date struct:date* struct:exn struct:exn:break - struct:exn:break:hang-up struct:exn:break:terminate - struct:exn:fail struct:exn:fail:contract - struct:exn:fail:contract:arity - struct:exn:fail:contract:continuation - struct:exn:fail:contract:divide-by-zero - struct:exn:fail:contract:non-fixnum-result - struct:exn:fail:contract:variable struct:exn:fail:filesystem - struct:exn:fail:filesystem:errno - struct:exn:fail:filesystem:exists - struct:exn:fail:filesystem:missing-module - struct:exn:fail:filesystem:version struct:exn:fail:network - struct:exn:fail:network:errno struct:exn:fail:out-of-memory - struct:exn:fail:read struct:exn:fail:read:eof - struct:exn:fail:read:non-char struct:exn:fail:syntax - struct:exn:fail:syntax:missing-module - struct:exn:fail:syntax:unbound struct:exn:fail:unsupported - struct:exn:fail:user struct:srcloc struct? sub1 subbytes - subprocess subprocess-group-enabled subprocess-kill - subprocess-pid subprocess-status subprocess-wait subprocess? - substring symbol->string symbol-interned? symbol-unreadable? - symbol? sync sync/enable-break sync/timeout - sync/timeout/enable-break syntax->list syntax-arm - syntax-column syntax-disarm syntax-e syntax-line - syntax-local-bind-syntaxes syntax-local-certifier - syntax-local-context syntax-local-expand-expression - syntax-local-get-shadower syntax-local-introduce - syntax-local-lift-context syntax-local-lift-expression - syntax-local-lift-module-end-declaration - syntax-local-lift-provide syntax-local-lift-require - syntax-local-lift-values-expression - syntax-local-make-definition-context - syntax-local-make-delta-introducer - syntax-local-module-defined-identifiers - syntax-local-module-exports - syntax-local-module-required-identifiers syntax-local-name - syntax-local-phase-level syntax-local-submodules - syntax-local-transforming-module-provides? - syntax-local-value syntax-local-value/immediate - syntax-original? syntax-position syntax-property - syntax-property-symbol-keys syntax-protect syntax-rearm - syntax-recertify syntax-shift-phase-level syntax-source - syntax-source-module syntax-span syntax-taint - syntax-tainted? syntax-track-origin - syntax-transforming-module-expression? syntax-transforming? - syntax? system-big-endian? system-idle-evt - system-language+country system-library-subpath - system-path-convention-type system-type tan terminal-port? - thread thread-cell-ref thread-cell-set! thread-cell-values? - thread-cell? thread-dead-evt thread-dead? thread-group? - thread-resume thread-resume-evt thread-rewind-receive - thread-running? thread-suspend thread-suspend-evt - thread-wait thread/suspend-to-kill thread? time-apply - truncate unbox uncaught-exception-handler - use-collection-link-paths use-compiled-file-paths - use-user-specific-search-paths values - variable-reference->empty-namespace - variable-reference->module-base-phase - variable-reference->module-declaration-inspector - variable-reference->module-path-index - variable-reference->module-source - variable-reference->namespace variable-reference->phase - variable-reference->resolved-module-path - variable-reference-constant? variable-reference? vector - vector->immutable-vector vector->list - vector->pseudo-random-generator - vector->pseudo-random-generator! vector->values vector-fill! - vector-immutable vector-length vector-ref vector-set! - vector-set-performance-stats! vector? version void void? - weak-box-value weak-box? will-execute will-executor? - will-register will-try-execute with-input-from-file - with-output-to-file wrap-evt write write-byte write-bytes - write-bytes-avail write-bytes-avail* write-bytes-avail-evt - write-bytes-avail/enable-break write-char write-special - write-special-avail* write-special-evt write-string zero? - ) - end - - # Since Racket allows identifiers to consist of nearly anything, - # it's simpler to describe what an ID is _not_. - id = /[^\s\(\)\[\]\{\}'`,.]+/i - - state :root do - # comments - rule /;.*$/, Comment::Single - rule /\s+/m, Text - - rule /[+-]inf[.][f0]/, Num::Float - rule /[+-]nan[.]0/, Num::Float - rule /[-]min[.]0/, Num::Float - rule /[+]max[.]0/, Num::Float - - rule /-?\d+\.\d+/, Num::Float - rule /-?\d+/, Num::Integer - - rule /#:#{id}+/, Name::Tag # keyword - - rule /#b[01]+/, Num::Bin - rule /#o[0-7]+/, Num::Oct - rule /#d[0-9]+/, Num::Integer - rule /#x[0-9a-f]+/i, Num::Hex - rule /#[ei][\d.]+/, Num::Other - - rule /"(\\\\|\\"|[^"])*"/, Str - rule /['`]#{id}/i, Str::Symbol - rule /#\\([()\/'"._!\$%& ?=+-]{1}|[a-z0-9]+)/i, - Str::Char - rule /#t|#f/, Name::Constant - rule /(?:'|#|`|,@|,|\.)/, Operator - - rule /(['#])(\s*)(\()/m do - groups Str::Symbol, Text, Punctuation - end - - # () [] {} are all permitted as like pairs - rule /\(|\[|\{/, Punctuation, :command - rule /\)|\]|\}/, Punctuation - - rule id, Name::Variable - end - - state :command do - rule id, Name::Function do |m| - if self.class.keywords.include? m[0] - token Keyword - elsif self.class.builtins.include? m[0] - token Name::Builtin - else - token Name::Function - end - - pop! - end - - rule(//) { pop! } - end - - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/ruby.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/ruby.rb deleted file mode 100644 index 405b6d9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/ruby.rb +++ /dev/null @@ -1,415 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - class Ruby < RegexLexer - title "Ruby" - desc "The Ruby programming language (ruby-lang.org)" - tag 'ruby' - aliases 'rb' - filenames '*.rb', '*.ruby', '*.rbw', '*.rake', '*.gemspec', '*.podspec', - 'Rakefile', 'Guardfile', 'Gemfile', 'Capfile', 'Podfile', - 'Vagrantfile', '*.ru', '*.prawn', 'Berksfile' - - mimetypes 'text/x-ruby', 'application/x-ruby' - - def self.analyze_text(text) - return 1 if text.shebang? 'ruby' - end - - state :symbols do - # symbols - rule %r( - : # initial : - @{0,2} # optional ivar, for :@foo and :@@foo - [a-z_]\w*[!?]? # the symbol - )xi, Str::Symbol - - # special symbols - rule %r(:(?:\*\*|[-+]@|[/\%&\|^`~]|\[\]=?|<<|>>|<=?>|<=?|===?)), - Str::Symbol - - rule /:'(\\\\|\\'|[^'])*'/, Str::Symbol - rule /:"/, Str::Symbol, :simple_sym - end - - state :sigil_strings do - # %-sigiled strings - # %(abc), %[abc], %, %.abc., %r.abc., etc - delimiter_map = { '{' => '}', '[' => ']', '(' => ')', '<' => '>' } - rule /%([rqswQWxiI])?([^\w\s])/ do |m| - open = Regexp.escape(m[2]) - close = Regexp.escape(delimiter_map[m[2]] || m[2]) - interp = /[rQWxI]/ === m[1] - toktype = Str::Other - - puts " open: #{open.inspect}" if @debug - puts " close: #{close.inspect}" if @debug - - # regexes - if m[1] == 'r' - toktype = Str::Regex - push :regex_flags - end - - token toktype - - push do - rule /\\[##{open}#{close}\\]/, Str::Escape - # nesting rules only with asymmetric delimiters - if open != close - rule /#{open}/ do - token toktype - push - end - end - rule /#{close}/, toktype, :pop! - - if interp - mixin :string_intp_escaped - rule /#/, toktype - else - rule /[\\#]/, toktype - end - - rule /[^##{open}#{close}\\]+/m, toktype - end - end - end - - state :strings do - mixin :symbols - rule /\b[a-z_]\w*?:\s+/, Str::Symbol, :expr_start - rule /'(\\\\|\\'|[^'])*'/, Str::Single - rule /"/, Str::Double, :simple_string - rule /(?_*\$?:"]), Name::Variable::Global - rule /\$-[0adFiIlpvw]/, Name::Variable::Global - rule /::/, Operator - - mixin :strings - - rule /(?:#{keywords.join('|')})\b/, Keyword, :expr_start - rule /(?:#{keywords_pseudo.join('|')})\b/, Keyword::Pseudo, :expr_start - - rule %r( - (module) - (\s+) - ([a-zA-Z_][a-zA-Z0-9_]*(::[a-zA-Z_][a-zA-Z0-9_]*)*) - )x do - groups Keyword, Text, Name::Namespace - end - - rule /(def\b)(\s*)/ do - groups Keyword, Text - push :funcname - end - - rule /(class\b)(\s*)/ do - groups Keyword, Text - push :classname - end - - rule /(?:#{builtins_q.join('|')})[?]/, Name::Builtin, :expr_start - rule /(?:#{builtins_b.join('|')})!/, Name::Builtin, :expr_start - rule /(?=0?n[x]:"" - rule %r( - [?](\\[MC]-)* # modifiers - (\\([\\abefnrstv\#"']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})|\S) - (?!\w) - )x, Str::Char - - mixin :has_heredocs - - rule /[A-Z][a-zA-Z0-9_]*/, Name::Constant, :method_call - rule /(\.|::)(\s*)([a-z_]\w*[!?]?|[*%&^`~+-\/\[<>=])/ do - groups Punctuation, Text, Name::Function - push :method_call - end - - rule /[a-zA-Z_]\w*[?!]/, Name, :expr_start - rule /[a-zA-Z_]\w*/, Name, :method_call - rule /\*\*|<>?|>=|<=|<=>|=~|={3}|!~|&&?|\|\||\.{1,3}/, - Operator, :expr_start - rule /[-+\/*%=<>&!^|~]=?/, Operator, :expr_start - rule %r<[\[({,?:\\;/]>, Punctuation, :expr_start - rule %r<[\])}]>, Punctuation - end - - state :has_heredocs do - rule /(?>? | <=>? | >= | ===? - ) - )x do |m| - puts "matches: #{[m[0], m[1], m[2], m[3]].inspect}" if @debug - groups Name::Class, Operator, Name::Function - pop! - end - - rule(//) { pop! } - end - - state :classname do - rule /\s+/, Text - rule /\(/ do - token Punctuation - push :defexpr - push :expr_start - end - - # class << expr - rule /< 0, ')' => 0, '}' => 0 } - } - - delim_map = { '[' => ']', '(' => ')', '{' => '}' } - - id = /[a-z_]\w*/i - hex = /[0-9a-f]/i - escapes = %r( - \\ ([nrt'\\] | x#{hex}{2} | u#{hex}{4} | U#{hex}{8}) - )x - size = /8|16|32|64/ - - state :start_line do - mixin :whitespace - rule /\s+/, Text - rule /#\[/ do - token Comment::Preproc; push :attribute - end - rule(//) { pop! } - end - - state :attribute do - mixin :whitespace - mixin :has_literals - rule /[(,)=]/, Comment::Preproc - rule /\]/, Comment::Preproc, :pop! - rule id, Comment::Preproc - end - - state :whitespace do - rule /\s+/, Text - rule %r(//[^\n]*), Comment - rule %r(/[*].*?[*]/)m, Comment::Multiline - end - - state :root do - rule /\n/, Text, :start_line - mixin :whitespace - rule /\b(?:#{Rust.keywords.join('|')})\b/, Keyword - mixin :has_literals - - rule %r([=-]>), Keyword - rule %r(<->), Keyword - rule /[()\[\]{}|,:;]/, Punctuation - rule /[*!@~&+%^<>=-]/, Operator - - rule /([.]\s*)?#{id}(?=\s*[(])/m, Name::Function - rule /[.]\s*#{id}/, Name::Property - rule /(#{id})(::)/m do - groups Name::Namespace, Punctuation - end - - # macros - rule /\bmacro_rules!/, Name::Decorator, :macro_rules - rule /#{id}!/, Name::Decorator, :macro - - rule /#{id}/ do |m| - name = m[0] - if self.class.builtins.include? name - token Name::Builtin - else - token Name - end - end - end - - state :macro do - mixin :has_literals - - rule /[\[{(]/ do |m| - @macro_delims[delim_map[m[0]]] += 1 - puts " macro_delims: #{@macro_delims.inspect}" if @debug - token Punctuation - end - - rule /[\]})]/ do |m| - @macro_delims[m[0]] -= 1 - puts " macro_delims: #{@macro_delims.inspect}" if @debug - pop! if macro_closed? - token Punctuation - end - - # same as the rule in root, but don't push another macro state - rule /#{id}!/, Name::Decorator - mixin :root - - # No syntax errors in macros - rule /./, Text - end - - state :macro_rules do - rule /[$]#{id}(:#{id})?/, Name::Variable - rule /[$]/, Name::Variable - - mixin :macro - end - - state :has_literals do - # constants - rule /\b(?:true|false|nil)\b/, Keyword::Constant - # characters - rule %r( - ' (?: #{escapes} | [^\\] ) ' - )x, Str::Char - - rule /"/, Str, :string - - # numbers - dot = /[.][0-9_]+/ - exp = /e[-+]?[0-9_]+/ - flt = /f32|f64/ - - rule %r( - [0-9]+ - (#{dot} #{exp}? #{flt}? - |#{dot}? #{exp} #{flt}? - |#{dot}? #{exp}? #{flt} - ) - )x, Num::Float - - rule %r( - ( 0b[10_]+ - | 0x[0-9a-fA-F-]+ - | [0-9]+ - ) (u#{size}?|i#{size})? - )x, Num::Integer - - end - - state :string do - rule /"/, Str, :pop! - rule escapes, Str::Escape - rule /%%/, Str::Interpol - rule %r( - % - ( [0-9]+ [$] )? # Parameter - [0#+-]* # Flag - ( [0-9]+ [$]? )? # Width - ( [.] [0-9]+ )? # Precision - [bcdfiostuxX?] # Type - )x, Str::Interpol - rule /[^%"\\]+/m, Str - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/sass.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/sass.rb deleted file mode 100644 index 01f136f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/sass.rb +++ /dev/null @@ -1,74 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - load_const :SassCommon, 'sass/common.rb' - - class Sass < SassCommon - include Indentation - - title "Sass" - desc 'The Sass stylesheet language language (sass-lang.com)' - - tag 'sass' - filenames '*.sass' - mimetypes 'text/x-sass' - - id = /[\w-]+/ - - state :root do - rule /[ \t]*\n/, Text - rule(/[ \t]*/) { |m| token Text; indentation(m[0]) } - end - - state :content do - # block comments - rule %r(//.*?\n) do - token Comment::Single - pop!; starts_block :single_comment - end - - rule %r(/[*].*?\n) do - token Comment::Multiline - pop!; starts_block :multi_comment - end - - rule /@import\b/, Keyword, :import - - mixin :content_common - - rule %r(=#{id}), Name::Function, :value - rule %r([+]#{id}), Name::Decorator, :value - - rule /:/, Name::Attribute, :old_style_attr - - rule(/(?=.+?:([^a-z]|$))/) { push :attribute } - - rule(//) { push :selector } - end - - state :single_comment do - rule /.*?\n/, Comment::Single, :pop! - end - - state :multi_comment do - rule /.*?\n/, Comment::Multiline, :pop! - end - - state :import do - rule /[ \t]+/, Text - rule /\S+/, Str - rule /\n/, Text, :pop! - end - - state :old_style_attr do - mixin :attr_common - rule(//) { pop!; push :value } - end - - state :end_section do - rule(/\n/) { token Text; reset_stack } - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/sass/common.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/sass/common.rb deleted file mode 100644 index 25bb546..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/sass/common.rb +++ /dev/null @@ -1,180 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - # shared states with SCSS - class SassCommon < RegexLexer - id = /[\w-]+/ - - state :content_common do - rule /@for\b/, Keyword, :for - rule /@(debug|warn|if|each|while|else|return|media)/, Keyword, :value - - rule /(@mixin)(\s+)(#{id})/ do - groups Keyword, Text, Name::Function - push :value - end - - rule /(@function)(\s+)(#{id})/ do - groups Keyword, Text, Name::Function - push :value - end - - rule /@extend\b/, Keyword, :selector - - rule /(@include)(\s+)(#{id})/ do - groups Keyword, Text, Name::Decorator - push :value - end - - rule /@#{id}/, Keyword, :selector - - # $variable: assignment - rule /([$]#{id})([ \t]*)(:)/ do - groups Name::Variable, Text, Punctuation - push :value - end - end - - state :value do - mixin :end_section - rule /[ \t]+/, Text - rule /[$]#{id}/, Name::Variable - rule /url[(]/, Str::Other, :string_url - rule /#{id}(?=\s*[(])/, Name::Function - rule /%#{id}/, Name::Decorator - - # named literals - rule /(true|false)\b/, Name::Builtin::Pseudo - rule /(and|or|not)\b/, Operator::Word - - # colors and numbers - rule /#[a-z0-9]{1,6}/i, Num::Hex - rule /-?\d+(%|[a-z]+)?/, Num - rule /-?\d*\.\d+(%|[a-z]+)?/, Num::Integer - - mixin :has_strings - mixin :has_interp - - rule /[~^*!&%<>\|+=@:,.\/?-]+/, Operator - rule /[\[\]()]+/, Punctuation - rule %r(/[*]), Comment::Multiline, :inline_comment - rule %r(//[^\n]*), Comment::Single - - # identifiers - rule(id) do |m| - if CSS.builtins.include? m[0] - token Name::Builtin - elsif CSS.constants.include? m[0] - token Name::Constant - else - token Name - end - end - end - - state :has_interp do - rule /[#][{]/, Str::Interpol, :interpolation - end - - state :has_strings do - rule /"/, Str::Double, :dq - rule /'/, Str::Single, :sq - end - - state :interpolation do - rule /}/, Str::Interpol, :pop! - mixin :value - end - - state :selector do - mixin :end_section - - mixin :has_strings - mixin :has_interp - rule /[ \t]+/, Text - rule /:/, Name::Decorator, :pseudo_class - rule /[.]/, Name::Class, :class - rule /#/, Name::Namespace, :id - rule /%/, Name::Variable, :placeholder - rule id, Name::Tag - rule /&/, Keyword - rule /[~^*!&\[\]()<>\|+=@:;,.\/?-]/, Operator - end - - state :dq do - rule /"/, Str::Double, :pop! - mixin :has_interp - rule /(\\.|#(?![{])|[^\n"#])+/, Str::Double - end - - state :sq do - rule /'/, Str::Single, :pop! - mixin :has_interp - rule /(\\.|#(?![{])|[^\n'#])+/, Str::Single - end - - state :string_url do - rule /[)]/, Str::Other, :pop! - rule /(\\.|#(?![{])|[^\n)#])+/, Str::Other - mixin :has_interp - end - - state :selector_piece do - mixin :has_interp - rule(//) { pop! } - end - - state :pseudo_class do - rule id, Name::Decorator - mixin :selector_piece - end - - state :class do - rule id, Name::Class - mixin :selector_piece - end - - state :id do - rule id, Name::Namespace - mixin :selector_piece - end - - state :placeholder do - rule id, Name::Variable - mixin :selector_piece - end - - state :for do - rule /(from|to|through)/, Operator::Word - mixin :value - end - - state :attr_common do - mixin :has_interp - rule id do |m| - if CSS.attributes.include? m[0] - token Name::Label - else - token Name::Attribute - end - end - end - - state :attribute do - mixin :attr_common - - rule /([ \t]*)(:)/ do - groups Text, Punctuation - push :value - end - end - - state :inline_comment do - rule /(\\#|#(?=[^\n{])|\*(?=[^\n\/])|[^\n#*])+/, Comment::Multiline - mixin :has_interp - rule %r([*]/), Comment::Multiline, :pop! - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/scala.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/scala.rb deleted file mode 100644 index f8ba463..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/scala.rb +++ /dev/null @@ -1,142 +0,0 @@ -# -*- coding: utf-8 # - -module Rouge - module Lexers - class Scala < RegexLexer - title "Scala" - desc "The Scala programming language (scala-lang.org)" - tag 'scala' - aliases 'scala' - filenames '*.scala', '*.sbt' - - mimetypes 'text/x-scala', 'application/x-scala' - - # As documented in the ENBF section of the scala specification - # http://www.scala-lang.org/docu/files/ScalaReference.pdf - whitespace = /\p{Space}/ - letter = /[\p{L}$_]/ - upper = /[\p{Lu}$_]/ - digits = /[0-9]/ - parens = /[(){}\[\]]/ - delims = %r([‘’".;,]) - - # negative lookahead to filter out other classes - op = %r( - (?!#{whitespace}|#{letter}|#{digits}|#{parens}|#{delims}) - [\u0020-\u007F\p{Sm}\p{So}] - )x - - idrest = %r(#{letter}(?:#{letter}|#{digits})*(?:(?<=_)#{op}+)?)x - - keywords = %w( - abstract case catch def do else extends final finally for forSome - if implicit lazy match new override private protected requires return - sealed super this throw try val var while with yield - ) - - state :root do - rule /(class|trait|object)(\s+)/ do - groups Keyword, Text - push :class - end - rule /'#{idrest}[^']/, Str::Symbol - rule /[^\S\n]+/, Text - - rule %r(//.*?\n), Comment::Single - rule %r(/\*), Comment::Multiline, :comment - - rule /@#{idrest}/, Name::Decorator - rule %r( - (#{keywords.join("|")})\b| - (<[%:-]|=>|>:|[#=@_\u21D2\u2190])(\b|(?=\s)|$) - )x, Keyword - rule /:(?!#{op})/, Keyword, :type - rule /#{upper}#{idrest}\b/, Name::Class - rule /(true|false|null)\b/, Keyword::Constant - rule /(import|package)(\s+)/ do - groups Keyword, Text - push :import - end - - rule /(type)(\s+)/ do - groups Keyword, Text - push :type - end - - rule /""".*?"""(?!")/m, Str - rule /"(\\\\|\\"|[^"])*"/, Str - rule /'\\.'|'[^\\]'|'\\u[0-9a-fA-F]{4}'/, Str::Char - - rule idrest, Name - rule /`[^`]+`/, Name - - rule /\[/, Operator, :typeparam - rule /[\(\)\{\};,.#]/, Operator - rule /#{op}+/, Operator - - rule /([0-9][0-9]*\.[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?[fFdD]?/, Num::Float - rule /([0-9][0-9]*[fFdD])/, Num::Float - rule /0x[0-9a-fA-F]+/, Num::Hex - rule /[0-9]+L?/, Num::Integer - rule /\n/, Text - end - - state :class do - rule /(#{idrest}|#{op}+|`[^`]+`)(\s*)(\[)/ do - groups Name::Class, Text, Operator - push :typeparam - end - - rule /\s+/, Text - rule /{/, Operator, :pop! - rule /\(/, Operator, :pop! - rule %r(//.*?\n), Comment::Single, :pop! - rule %r(#{idrest}|#{op}+|`[^`]+`), Name::Class, :pop! - end - - state :type do - rule /\s+/, Text - rule /<[%:]|>:|[#_\u21D2]|forSome|type/, Keyword - rule /([,\);}]|=>|=)(\s*)/ do - groups Operator, Text - pop! - end - rule /[\(\{]/, Operator, :type - - typechunk = /(?:#{idrest}|#{op}+\`[^`]+`)/ - rule /(#{typechunk}(?:\.#{typechunk})*)(\s*)(\[)/ do - groups Keyword::Type, Text, Operator - pop! - push :typeparam - end - - rule /(#{typechunk}(?:\.#{typechunk})*)(\s*)$/ do - groups Keyword::Type, Text - pop! - end - - rule %r(//.*?\n), Comment::Single, :pop! - rule /\.|#{idrest}|#{op}+|`[^`]+`/, Keyword::Type - end - - state :typeparam do - rule /[\s,]+/, Text - rule /<[%:]|=>|>:|[#_\u21D2]|forSome|type/, Keyword - rule /([\]\)\}])/, Operator, :pop! - rule /[\(\[\{]/, Operator, :typeparam - rule /\.|#{idrest}|#{op}+|`[^`]+`/, Keyword::Type - end - - state :comment do - rule %r([^/\*]+), Comment::Multiline - rule %r(/\*), Comment::Multiline, :comment - rule %r(\*/), Comment::Multiline, :pop! - rule %r([*/]), Comment::Multiline - end - - state :import do - rule %r((#{idrest}|\.)+), Name::Namespace, :pop! - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/scheme.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/scheme.rb deleted file mode 100644 index eef986e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/scheme.rb +++ /dev/null @@ -1,112 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - class Scheme < RegexLexer - title "Scheme" - desc "The Scheme variant of Lisp" - - tag 'scheme' - filenames '*.scm', '*.ss' - mimetypes 'text/x-scheme', 'application/x-scheme' - - def self.keywords - @keywords ||= Set.new %w( - lambda define if else cond and or case let let* letrec begin - do delay set! => quote quasiquote unquote unquote-splicing - define-syntax let-syntax letrec-syntax syntax-rules - ) - end - - def self.builtins - @builtins ||= Set.new %w( - * + - / < <= = > >= abs acos angle append apply asin - assoc assq assv atan boolean? caaaar caaadr caaar caadar - caaddr caadr caar cadaar cadadr cadar caddar cadddr caddr - cadr call-with-current-continuation call-with-input-file - call-with-output-file call-with-values call/cc car cdaaar cdaadr - cdaar cdadar cdaddr cdadr cdar cddaar cddadr cddar cdddar cddddr - cdddr cddr cdr ceiling char->integer char-alphabetic? char-ci<=? - char-ci=? char-ci>? char-downcase - char-lower-case? char-numeric? char-ready? char-upcase - char-upper-case? char-whitespace? char<=? char=? - char>? char? close-input-port close-output-port complex? cons - cos current-input-port current-output-port denominator - display dynamic-wind eof-object? eq? equal? eqv? eval - even? exact->inexact exact? exp expt floor for-each force gcd - imag-part inexact->exact inexact? input-port? integer->char - integer? interaction-environment lcm length list list->string - list->vector list-ref list-tail list? load log magnitude - make-polar make-rectangular make-string make-vector map - max member memq memv min modulo negative? newline not - null-environment null? number->string number? numerator odd? - open-input-file open-output-file output-port? pair? peek-char - port? positive? procedure? quotient rational? rationalize - read read-char real-part real? remainder reverse round - scheme-report-environment set-car! set-cdr! sin sqrt string - string->list string->number string->symbol string-append - string-ci<=? string-ci=? string-ci>? - string-copy string-fill! string-length string-ref - string-set! string<=? string=? - string>? string? substring symbol->string symbol? - tan transcript-off transcript-on truncate values vector - vector->list vector-fill! vector-length vector-ref - vector-set! vector? with-input-from-file with-output-to-file - write write-char zero? - ) - end - - id = /[a-z0-9!$\%&*+,\/:<=>?@^_~|-]+/i - - state :root do - # comments - rule /;.*$/, Comment::Single - rule /\s+/m, Text - rule /-?\d+\.\d+/, Num::Float - rule /-?\d+/, Num::Integer - - # Racket infinitites - rule /[+-]inf[.][f0]/, Num - - rule /#b[01]+/, Num::Bin - rule /#o[0-7]+/, Num::Oct - rule /#d[0-9]+/, Num::Integer - rule /#x[0-9a-f]+/i, Num::Hex - rule /#[ei][\d.]+/, Num::Other - - rule /"(\\\\|\\"|[^"])*"/, Str - rule /'#{id}/i, Str::Symbol - rule /#\\([()\/'"._!\$%& ?=+-]{1}|[a-z0-9]+)/i, - Str::Char - rule /#t|#f/, Name::Constant - rule /(?:'|#|`|,@|,|\.)/, Operator - - rule /(['#])(\s*)(\()/m do - groups Str::Symbol, Text, Punctuation - end - - rule /\(/, Punctuation, :command - rule /\)/, Punctuation - - rule id, Name::Variable - end - - state :command do - rule id, Name::Function do |m| - if self.class.keywords.include? m[0] - token Keyword - elsif self.class.builtins.include? m[0] - token Name::Builtin - else - token Name::Function - end - - pop! - end - - rule(//) { pop! } - end - - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/scss.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/scss.rb deleted file mode 100644 index 0bfd604..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/scss.rb +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - load_const :SassCommon, 'sass/common.rb' - - class Scss < SassCommon - title "SCSS" - desc "SCSS stylesheets (sass-lang.com)" - tag 'scss' - filenames '*.scss' - mimetypes 'text/x-scss' - - state :root do - rule /\s+/, Text - rule %r(//.*?\n), Comment::Single - rule %r(/[*].*?[*]/)m, Comment::Multiline - rule /@import\b/, Keyword, :value - - mixin :content_common - - rule(/(?=[^;{}][;}])/) { push :attribute } - rule(/(?=[^;{}:]+:[^a-z])/) { push :attribute } - - rule(//) { push :selector } - end - - state :end_section do - rule /\n/, Text - rule(/[;{}]/) { token Punctuation; reset_stack } - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/sed.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/sed.rb deleted file mode 100644 index ff5e256..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/sed.rb +++ /dev/null @@ -1,170 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - class Sed < RegexLexer - title "sed" - desc 'sed, the ultimate stream editor' - - tag 'sed' - filenames '*.sed' - mimetypes 'text/x-sed' - - def self.analyze_text(text) - return 1 if text.shebang? 'sed' - end - - class Regex < RegexLexer - state :root do - rule /\\./, Str::Escape - rule /\[/, Punctuation, :brackets - rule /[$^.*]/, Operator - rule /[()]/, Punctuation - rule /./, Str::Regex - end - - state :brackets do - rule /\^?/ do - token Punctuation - goto :brackets_int - end - end - - state :brackets_int do - # ranges - rule /.-./, Name::Variable - rule /\]/, Punctuation, :pop! - rule /./, Str::Regex - end - end - - class Replacement < RegexLexer - state :root do - rule /\\./m, Str::Escape - rule /&/, Operator - rule /[^\\&]+/m, Text - end - end - - def regex - @regex ||= Regex.new(options) - end - - def replacement - @replacement ||= Replacement.new(options) - end - - start { regex.reset!; replacement.reset! } - - state :whitespace do - rule /\s+/m, Text - rule(/#.*?\n/) { token Comment; reset_stack } - rule(/\n/) { token Text; reset_stack } - rule(/;/) { token Punctuation; reset_stack } - end - - state :root do - mixin :addr_range - end - - edot = /\\.|./m - - state :command do - mixin :whitespace - - # subst and transliteration - rule /(s)(.)(#{edot}*?)(\2)(#{edot}*?)(\2)/m do |m| - token Keyword, m[1] - token Punctuation, m[2] - delegate regex, m[3] - token Punctuation, m[4] - delegate replacement, m[5] - token Punctuation, m[6] - - - goto :flags - end - - rule /(y)(.)(#{edot}*?)(\2)(#{edot}*?)(\2)/m do |m| - token Keyword, m[1] - token Punctuation, m[2] - delegate replacement, m[3] - token Punctuation, m[4] - delegate replacement, m[5] - token Punctuation, m[6] - - pop! - end - - # commands that take a text segment as an argument - rule /([aic])(\s*)/ do - groups Keyword, Text; goto :text - end - - rule /[pd]/, Keyword - - # commands that take a number argument - rule /([qQl])(\s+)(\d+)/i do - groups Keyword, Text, Num - pop! - end - - # no-argument commands - rule /[={}dDgGhHlnpPqx]/, Keyword, :pop! - - # commands that take a filename argument - rule /([rRwW])(\s+)(\S+)/ do - groups Keyword, Text, Name - pop! - end - - # commands that take a label argument - rule /([:btT])(\s+)(\S+)/ do - groups Keyword, Text, Name::Label - pop! - end - end - - state :addr_range do - mixin :whitespace - - ### address ranges ### - addr_tok = Keyword::Namespace - rule /\d+/, addr_tok - rule /[$,~+!]/, addr_tok - - rule %r((/)(\\.|.)*?(/)) do |m| - token addr_tok, m[1]; delegate regex, m[2]; token addr_tok, m[3] - end - - # alternate regex rage delimiters - rule %r((\\)(.)(\\.|.)*?(\2)) do |m| - token addr_tok, m[1] + m[2] - delegate regex, m[3] - token addr_tok, m[4] - end - - rule(//) { push :command } - end - - state :text do - rule /[^\\\n]+/, Str - rule /\\\n/, Str::Escape - rule /\\/, Str - rule /\n/, Text, :pop! - end - - state :flags do - rule /[gp]+/, Keyword, :pop! - - # writing to a file with the subst command. - # who'da thunk...? - rule /([wW])(\s+)(\S+)/ do - token Keyword; token Text; token Name - end - - rule(//) { pop! } - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/shell.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/shell.rb deleted file mode 100644 index 8b7134e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/shell.rb +++ /dev/null @@ -1,152 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - class Shell < RegexLexer - title "shell" - desc "Various shell languages, including sh and bash" - - tag 'shell' - aliases 'bash', 'zsh', 'ksh', 'sh' - filenames '*.sh', '*.bash', '*.zsh', '*.ksh', - '.bashrc', '.zshrc', '.kshrc', '.profile', 'PKGBUILD' - - mimetypes 'application/x-sh', 'application/x-shellscript' - - def self.analyze_text(text) - text.shebang?(/(ba|z|k)?sh/) ? 1 : 0 - end - - KEYWORDS = %w( - if fi else while do done for then return function - select continue until esac elif in - ).join('|') - - BUILTINS = %w( - alias bg bind break builtin caller cd command compgen - complete declare dirs disown echo enable eval exec exit - export false fc fg getopts hash help history jobs kill let - local logout popd printf pushd pwd read readonly set shift - shopt source suspend test time times trap true type typeset - ulimit umask unalias unset wait - ).join('|') - - state :basic do - rule /#.*$/, Comment - - rule /\b(#{KEYWORDS})\s*\b/, Keyword - rule /\bcase\b/, Keyword, :case - - rule /\b(#{BUILTINS})\s*\b(?!\.)/, Name::Builtin - - rule /^\S*[\$%>#] +/, Generic::Prompt - - rule /(\b\w+)(=)/ do |m| - groups Name::Variable, Operator - end - - rule /[\[\]{}()=]/, Operator - rule /&&|\|\|/, Operator - # rule /\|\|/, Operator - - rule /<< ruby, - 'erb' => ERB.new(options), - 'javascript' => Javascript.new(options), - 'css' => CSS.new(options), - 'coffee' => Coffeescript.new(options), - 'markdown' => Markdown.new(options), - 'scss' => Scss.new(options), - 'sass' => Sass.new(options) - } - end - - start { ruby.reset!; html.reset! } - - state :root do - rule /\s*\n/, Text - rule(/\s*/) { |m| token Text; indentation(m[0]) } - end - - state :content do - mixin :css - - rule /\/#{dot}*/, Comment, :indented_block - - rule /(doctype)(\s+)(.*)/ do - groups Name::Namespace, Text::Whitespace, Text - pop! - end - - # filters, shamelessly ripped from HAML - rule /(\w*):\s*\n/ do |m| - token Name::Decorator - pop! - starts_block :filter_block - - filter_name = m[1].strip - - @filter_lexer = self.filters[filter_name] - @filter_lexer.reset! unless @filter_lexer.nil? - - puts " slim: filter #{filter_name.inspect} #{@filter_lexer.inspect}" if @debug - end - - # Text - rule %r([\|'](?=\s)) do - token Punctuation - pop! - starts_block :plain_block - goto :plain_block - end - - rule /-|==|=/, Punctuation, :ruby_line - - # Dynamic tags - rule /(\*)(#{ruby_chars}+\(.*?\))/ do |m| - token Punctuation, m[1] - delegate ruby, m[2] - push :tag - end - - rule /(\*)(#{ruby_chars}+)/ do |m| - token Punctuation, m[1] - delegate ruby, m[2] - push :tag - end - - #rule /<\w+(?=.*>)/, Keyword::Constant, :tag # Maybe do this, look ahead and stuff - rule %r(()) do |m| # Dirty html - delegate html, m[1] - pop! - end - - # Ordinary slim tags - rule /\w+/, Name::Tag, :tag - - end - - state :tag do - mixin :css - mixin :indented_block - mixin :interpolation - - # Whitespace control - rule /[<>]/, Punctuation - - # Trim whitespace - rule /\s+?/, Text::Whitespace - - # Splats, these two might be mergable? - rule /(\*)(#{ruby_chars}+)/ do |m| - token Punctuation, m[1] - delegate ruby, m[2] - end - - rule /(\*)(\{#{dot}+?\})/ do |m| - token Punctuation, m[1] - delegate ruby, m[2] - end - - # Attributes - rule /([\w\-]+)(\s*)(\=)/ do |m| - token Name::Attribute, m[1] - token Text::Whitespace, m[2] - token Punctuation, m[3] - push :html_attr - end - - # Ruby value - rule /(\=)(#{dot}+)/ do |m| - token Punctuation, m[1] - #token Keyword::Constant, m[2] - delegate ruby, m[2] - end - - # HTML Entities - rule(/&\S*?;/, Name::Entity) - - rule /#{dot}+?/, Text - - rule /\s*\n/, Text::Whitespace, :pop! - end - - state :css do - rule(/\.[\w-]*/) { token Name::Class; goto :tag } - rule(/#[a-zA-Z][\w:-]*/) { token Name::Function; goto :tag } - end - - state :html_attr do - # Strings, double/single quoted - rule(/\s*(['"])#{dot}*?\1/, Literal::String, :pop!) - - # Ruby stuff - rule(/(#{ruby_chars}+\(.*?\))/) { |m| delegate ruby, m[1]; pop! } - rule(/(#{ruby_chars}+)/) { |m| delegate ruby, m[1]; pop! } - - rule /\s+/, Text::Whitespace - end - - state :ruby_line do - # Need at top - mixin :indented_block - - rule(/,\s*\n/) { delegate ruby } - rule /[ ]\|[ \t]*\n/, Str::Escape - rule(/.*?(?=(,$| \|)?[ \t]*$)/) { delegate ruby } - end - - state :filter_block do - rule /([^#\n]|#[^{\n]|(\\\\)*\\#\{)+/ do - if @filter_lexer - delegate @filter_lexer - else - token Name::Decorator - end - end - - mixin :interpolation - mixin :indented_block - end - - state :plain_block do - mixin :interpolation - - rule %r(()) do |m| # Dirty html - delegate html, m[1] - end - - # HTML Entities - rule(/&\S*?;/, Name::Entity) - - #rule /([^#\n]|#[^{\n]|(\\\\)*\\#\{)+/ do - rule /#{dot}+?/, Text - - mixin :indented_block - end - - state :interpolation do - rule /#[{]/, Str::Interpol, :ruby_interp - end - - state :ruby_interp do - rule /[}]/, Str::Interpol, :pop! - mixin :ruby_interp_inner - end - - state :ruby_interp_inner do - rule(/[{]/) { delegate ruby; push :ruby_interp_inner } - rule(/[}]/) { delegate ruby; pop! } - rule(/[^{}]+/) { delegate ruby } - end - - state :indented_block do - rule(/(?=|&!?,@%]) - - state :root do - rule /(<)(\w+:)(.*?)(>)/ do - groups Punctuation, Keyword, Text, Punctuation - end - - # mixin :squeak_fileout - mixin :whitespaces - mixin :method_definition - rule /([|])([\w\s]*)([|])/ do - groups Punctuation, Name::Variable, Punctuation - end - mixin :objects - rule /\^|:=|_/, Operator - - rule /[)}\]]/, Punctuation, :after_object - rule /[({\[!]/, Punctuation - end - - state :method_definition do - rule /([a-z]\w*:)(\s*)(\w+)/i do - groups Name::Function, Text, Name::Variable - end - - rule /^(\s*)(\b[a-z]\w*\b)(\s*)$/i do - groups Text, Name::Function, Text - end - - rule %r(^(\s*)(#{ops}+)(\s*)(\w+)(\s*)$) do - groups Text, Name::Function, Text, Name::Variable, Text - end - end - - state :block_variables do - mixin :whitespaces - rule /(:)(\s*)(\w+)/ do - groups Operator, Text, Name::Variable - end - - rule /[|]/, Punctuation, :pop! - - rule(//) { pop! } - end - - state :literals do - rule /'(''|.)*?'/m, Str, :after_object - rule /[$]./, Str::Char, :after_object - rule /#[(]/, Str::Symbol, :parenth - rule /(\d+r)?-?\d+(\.\d+)?(e-?\d+)?/, - Num, :after_object - rule /#("[^"]*"|#{ops}+|[\w:]+)/, - Str::Symbol, :after_object - end - - state :parenth do - rule /[)]/ do - token Str::Symbol - goto :after_object - end - - mixin :inner_parenth - end - - state :inner_parenth do - rule /#[(]/, Str::Symbol, :inner_parenth - rule /[)]/, Str::Symbol, :pop! - mixin :whitespaces - mixin :literals - rule /(#{ops}|[\w:])+/, Str::Symbol - end - - state :whitespaces do - rule /! !$/, Keyword # squeak chunk delimiter - rule /\s+/m, Text - rule /".*?"/m, Comment - end - - state :objects do - rule /\[/, Punctuation, :block_variables - rule /(self|super|true|false|nil|thisContext)\b/, - Name::Builtin::Pseudo, :after_object - rule /[A-Z]\w*(?!:)\b/, Name::Class, :after_object - rule /[a-z]\w*(?!:)\b/, Name::Variable, :after_object - mixin :literals - end - - state :after_object do - mixin :whitespaces - rule /(ifTrue|ifFalse|whileTrue|whileFalse|timesRepeat):/, - Name::Builtin, :pop! - rule /new(?!:)\b/, Name::Builtin - rule /:=|_/, Operator, :pop! - rule /[a-z]+\w*:/i, Name::Function, :pop! - rule /[a-z]+\w*/i, Name::Function - rule /#{ops}+/, Name::Function, :pop! - rule /[.]/, Punctuation, :pop! - rule /;/, Punctuation - rule(//) { pop! } - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/sml.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/sml.rb deleted file mode 100644 index f99158a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/sml.rb +++ /dev/null @@ -1,347 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - class SML < RegexLexer - title "SML" - desc 'Standard ML' - tag 'sml' - aliases 'ml' - filenames '*.sml', '*.sig', '*.fun' - - mimetypes 'text/x-standardml', 'application/x-standardml' - - def self.keywords - @keywords ||= Set.new %w( - abstype and andalso as case datatype do else end exception - fn fun handle if in infix infixr let local nonfix of op open - orelse raise rec then type val with withtype while - eqtype functor include sharing sig signature struct structure - where - ) - end - - def self.symbolic_reserved - @symbolic_reserved ||= Set.new %w(: | = => -> # :>) - end - - id = /[\w']+/i - symbol = %r([!%&$#/:<=>?@\\~`^|*+-]+) - - def self.analyze_text(text) - return 0 - end - - state :whitespace do - rule /\s+/m, Text - rule /[(][*]/, Comment, :comment - end - - state :delimiters do - rule /[(\[{]/, Punctuation, :main - rule /[)\]}]/, Punctuation, :pop! - - rule /\b(let|if|local)\b(?!')/, Keyword::Reserved do - push; push - end - - rule /\b(struct|sig|while)\b(?!')/ do - token Keyword::Reserved - push - end - - rule /\b(do|else|end|in|then)\b(?!')/, Keyword::Reserved, :pop! - end - - def token_for_id_with_dot(id) - if self.class.keywords.include? id - Error - else - Name::Namespace - end - end - - def token_for_final_id(id) - if self.class.keywords.include? id or self.class.symbolic_reserved.include? id - Error - else - Name - end - end - - def token_for_id(id) - if self.class.keywords.include? id - Keyword::Reserved - elsif self.class.symbolic_reserved.include? id - Punctuation - else - Name - end - end - - state :core do - rule /[()\[\]{},;_]|[.][.][.]/, Punctuation - rule /#"/, Str::Char, :char - rule /"/, Str::Double, :string - rule /~?0x[0-9a-fA-F]+/, Num::Hex - rule /0wx[0-9a-fA-F]+/, Num::Hex - rule /0w\d+/, Num::Integer - rule /~?\d+([.]\d+)?[eE]~?\d+/, Num::Float - rule /~?\d+[.]\d+/, Num::Float - rule /~?\d+/, Num::Integer - - rule /#\s*[1-9][0-9]*/, Name::Label - rule /#\s*#{id}/, Name::Label - rule /#\s+#{symbol}/, Name::Label - - rule /\b(datatype|abstype)\b(?!')/, Keyword::Reserved, :dname - rule(/(?=\bexception\b(?!'))/) { push :ename } - rule /\b(functor|include|open|signature|structure)\b(?!')/, - Keyword::Reserved, :sname - rule /\b(type|eqtype)\b(?!')/, Keyword::Reserved, :tname - - rule /'#{id}/, Name::Decorator - rule /(#{id})([.])/ do |m| - groups(token_for_id_with_dot(m[1]), Punctuation) - push :dotted - end - - rule id do |m| - token token_for_id(m[0]) - end - - rule symbol do |m| - token token_for_id(m[0]) - end - end - - state :dotted do - rule /(#{id})([.])/ do |m| - groups(token_for_id_with_dot(m[1]), Punctuation) - end - - rule id do |m| - token token_for_id(m[0]) - pop! - end - - rule symbol do |m| - token token_for_id(m[0]) - pop! - end - end - - state :root do - rule /#!.*?\n/, Comment::Preproc - rule(//) { push :main } - end - - state :main do - mixin :whitespace - - rule /\b(val|and)\b(?!')/, Keyword::Reserved, :vname - rule /\b(fun)\b(?!')/ do - token Keyword::Reserved - goto :main_fun - push :fname - end - - mixin :delimiters - mixin :core - end - - state :main_fun do - mixin :whitespace - rule /\b(fun|and)\b(?!')/, Keyword::Reserved, :fname - rule /\bval\b(?!')/ do - token Keyword::Reserved - goto :main - push :vname - end - - rule /[|]/, Punctuation, :fname - rule /\b(case|handle)\b(?!')/ do - token Keyword::Reserved - goto :main - end - - mixin :delimiters - mixin :core - end - - state :has_escapes do - rule /\\[\\"abtnvfr]/, Str::Escape - rule /\\\^[\x40-\x5e]/, Str::Escape - rule /\\[0-9]{3}/, Str::Escape - rule /\\u\h{4}/, Str::Escape - rule /\\\s+\\/, Str::Interpol - end - - state :string do - rule /[^"\\]+/, Str::Double - rule /"/, Str::Double, :pop! - mixin :has_escapes - end - - state :char do - rule /[^"\\]+/, Str::Char - rule /"/, Str::Char, :pop! - mixin :has_escapes - end - - state :breakout do - rule /(?=\w+\b(#{SML.keywords.to_a.join('|')})\b(?!'))/ do - pop! - end - end - - state :sname do - mixin :whitespace - mixin :breakout - rule id, Name::Namespace - rule(//) { pop! } - end - - state :has_annotations do - rule /'[\w']*/, Name::Decorator - rule /[(]/, Punctuation, :tyvarseq - end - - state :fname do - mixin :whitespace - mixin :has_annotations - - rule id, Name::Function, :pop! - rule symbol, Name::Function, :pop! - end - - state :vname do - mixin :whitespace - mixin :has_annotations - - rule /(#{id})(\s*)(=(?!#{symbol}))/m do - groups Name::Variable, Text, Punctuation - pop! - end - - rule /(#{symbol})(\s*)(=(?!#{symbol}))/m do - groups Name::Variable, Text, Punctuation - end - - rule id, Name::Variable, :pop! - rule symbol, Name::Variable, :pop! - - rule(//) { pop! } - end - - state :tname do - mixin :whitespace - mixin :breakout - mixin :has_annotations - - rule /'[\w']*/, Name::Decorator - rule /[(]/, Punctuation, :tyvarseq - - rule %r(=(?!#{symbol})) do - token Punctuation - goto :typbind - end - - rule id, Keyword::Type - rule symbol, Keyword::Type - end - - state :typbind do - mixin :whitespace - - rule /\b(and)\b(?!')/ do - token Keyword::Reserved - goto :tname - end - - mixin :breakout - mixin :core - end - - state :dname do - mixin :whitespace - mixin :breakout - mixin :has_annotations - - rule /(=)(\s*)(datatype)\b/ do - groups Punctuation, Text, Keyword::Reserved - pop! - end - - rule %r(=(?!#{symbol})) do - token Punctuation - goto :datbind - push :datcon - end - - rule id, Keyword::Type - rule symbol, Keyword::Type - end - - state :datbind do - mixin :whitespace - rule /\b(and)\b(?!')/ do - token Keyword::Reserved; goto :dname - end - rule /\b(withtype)\b(?!')/ do - token Keyword::Reserved; goto :tname - end - rule /\bof\b(?!')/, Keyword::Reserved - rule /([|])(\s*)(#{id})/ do - groups(Punctuation, Text, Name::Class) - end - - rule /([|])(\s+)(#{symbol})/ do - groups(Punctuation, Text, Name::Class) - end - - mixin :breakout - mixin :core - end - - state :ename do - mixin :whitespace - rule /(exception|and)(\s+)(#{id})/ do - groups Keyword::Reserved, Text, Name::Class - end - - rule /(exception|and)(\s*)(#{symbol})/ do - groups Keyword::Reserved, Text, Name::Class - end - - rule /\b(of)\b(?!')/, Keyword::Reserved - mixin :breakout - mixin :core - end - - state :datcon do - mixin :whitespace - rule id, Name::Class, :pop! - rule symbol, Name::Class, :pop! - end - - state :tyvarseq do - mixin :whitespace - rule /'[\w']*/, Name::Decorator - rule id, Name - rule /,/, Punctuation - rule /[)]/, Punctuation, :pop! - rule symbol, Name - end - - state :comment do - rule /[^(*)]+/, Comment::Multiline - rule /[(][*]/ do - token Comment::Multiline; push - end - rule /[*][)]/, Comment::Multiline, :pop! - rule /[(*)]/, Comment::Multiline - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/sql.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/sql.rb deleted file mode 100644 index bf9f011..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/sql.rb +++ /dev/null @@ -1,140 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - class SQL < RegexLexer - title "SQL" - desc "Structured Query Language, for relational databases" - tag 'sql' - filenames '*.sql' - mimetypes 'text/x-sql' - - def self.keywords - @keywords ||= Set.new %w( - ABORT ABS ABSOLUTE ACCESS ADA ADD ADMIN AFTER AGGREGATE ALIAS - ALL ALLOCATE ALTER ANALYSE ANALYZE AND ANY ARE AS ASC ASENSITIVE - ASSERTION ASSIGNMENT ASYMMETRIC AT ATOMIC AUTHORIZATION - AVG BACKWARD BEFORE BEGIN BETWEEN BITVAR BIT_LENGTH BOTH - BREADTH BY C CACHE CALL CALLED CARDINALITY CASCADE CASCADED - CASE CAST CATALOG CATALOG_NAME CHAIN CHARACTERISTICS - CHARACTER_LENGTH CHARACTER_SET_CATALOG CHARACTER_SET_NAME - CHARACTER_SET_SCHEMA CHAR_LENGTH CHECK CHECKED CHECKPOINT - CLASS CLASS_ORIGIN CLOB CLOSE CLUSTER COALSECE COBOL COLLATE - COLLATION COLLATION_CATALOG COLLATION_NAME COLLATION_SCHEMA - COLUMN COLUMN_NAME COMMAND_FUNCTION COMMAND_FUNCTION_CODE - COMMENT COMMIT COMMITTED COMPLETION CONDITION_NUMBER - CONNECT CONNECTION CONNECTION_NAME CONSTRAINT CONSTRAINTS - CONSTRAINT_CATALOG CONSTRAINT_NAME CONSTRAINT_SCHEMA - CONSTRUCTOR CONTAINS CONTINUE CONVERSION CONVERT COPY - CORRESPONTING COUNT CREATE CREATEDB CREATEUSER CROSS CUBE - CURRENT CURRENT_DATE CURRENT_PATH CURRENT_ROLE CURRENT_TIME - CURRENT_TIMESTAMP CURRENT_USER CURSOR CURSOR_NAME CYCLE DATA - DATABASE DATETIME_INTERVAL_CODE DATETIME_INTERVAL_PRECISION - DAY DEALLOCATE DECLARE DEFAULT DEFAULTS DEFERRABLE DEFERRED - DEFINED DEFINER DELETE DELIMITER DELIMITERS DEREF DESC DESCRIBE - DESCRIPTOR DESTROY DESTRUCTOR DETERMINISTIC DIAGNOSTICS - DICTIONARY DISCONNECT DISPATCH DISTINCT DO DOMAIN DROP - DYNAMIC DYNAMIC_FUNCTION DYNAMIC_FUNCTION_CODE EACH ELSE - ENCODING ENCRYPTED END END-EXEC EQUALS ESCAPE EVERY EXCEPT - ESCEPTION EXCLUDING EXCLUSIVE EXEC EXECUTE EXISTING EXISTS - EXPLAIN EXTERNAL EXTRACT FALSE FETCH FINAL FIRST FOR FORCE - FOREIGN FORTRAN FORWARD FOUND FREE FREEZE FROM FULL FUNCTION - G GENERAL GENERATED GET GLOBAL GO GOTO GRANT GRANTED GROUP - GROUPING HANDLER HAVING HIERARCHY HOLD HOST IDENTITY IGNORE - ILIKE IMMEDIATE IMMUTABLE IMPLEMENTATION IMPLICIT IN INCLUDING - INCREMENT INDEX INDITCATOR INFIX INHERITS INITIALIZE INITIALLY - INNER INOUT INPUT INSENSITIVE INSERT INSTANTIABLE INSTEAD - INTERSECT INTO INVOKER IS ISNULL ISOLATION ITERATE JOIN KEY - KEY_MEMBER KEY_TYPE LANCOMPILER LANGUAGE LARGE LAST LATERAL - LEADING LEFT LENGTH LESS LEVEL LIKE LIMIT LISTEN LOAD LOCAL - LOCALTIME LOCALTIMESTAMP LOCATION LOCATOR LOCK LOWER MAP MATCH - MAX MAXVALUE MESSAGE_LENGTH MESSAGE_OCTET_LENGTH MESSAGE_TEXT - METHOD MIN MINUTE MINVALUE MOD MODE MODIFIES MODIFY MONTH - MORE MOVE MUMPS NAMES NATIONAL NATURAL NCHAR NCLOB NEW NEXT - NO NOCREATEDB NOCREATEUSER NONE NOT NOTHING NOTIFY NOTNULL - NULL NULLABLE NULLIF OBJECT OCTET_LENGTH OF OFF OFFSET OIDS - OLD ON ONLY OPEN OPERATION OPERATOR OPTION OPTIONS OR ORDER - ORDINALITY OUT OUTER OUTPUT OVERLAPS OVERLAY OVERRIDING - OWNER PAD PARAMETER PARAMETERS PARAMETER_MODE PARAMATER_NAME - PARAMATER_ORDINAL_POSITION PARAMETER_SPECIFIC_CATALOG - PARAMETER_SPECIFIC_NAME PARAMATER_SPECIFIC_SCHEMA PARTIAL PASCAL - PENDANT PLACING PLI POSITION POSTFIX PRECISION PREFIX PREORDER - PREPARE PRESERVE PRIMARY PRIOR PRIVILEGES PROCEDURAL PROCEDURE - PUBLIC READ READS RECHECK RECURSIVE REF REFERENCES REFERENCING - REINDEX RELATIVE RENAME REPEATABLE REPLACE RESET RESTART - RESTRICT RESULT RETURN RETURNED_LENGTH RETURNED_OCTET_LENGTH - RETURNED_SQLSTATE RETURNS REVOKE RIGHT ROLE ROLLBACK ROLLUP - ROUTINE ROUTINE_CATALOG ROUTINE_NAME ROUTINE_SCHEMA ROW ROWS - ROW_COUNT RULE SAVE_POINT SCALE SCHEMA SCHEMA_NAME SCOPE SCROLL - SEARCH SECOND SECURITY SELECT SELF SENSITIVE SERIALIZABLE - SERVER_NAME SESSION SESSION_USER SET SETOF SETS SHARE SHOW - SIMILAR SIMPLE SIZE SOME SOURCE SPACE SPECIFIC SPECIFICTYPE - SPECIFIC_NAME SQL SQLCODE SQLERROR SQLEXCEPTION SQLSTATE - SQLWARNINIG STABLE START STATE STATEMENT STATIC STATISTICS - STDIN STDOUT STORAGE STRICT STRUCTURE STYPE SUBCLASS_ORIGIN - SUBLIST SUBSTRING SUM SYMMETRIC SYSID SYSTEM SYSTEM_USER - TABLE TABLE_NAME TEMP TEMPLATE TEMPORARY TERMINATE THAN THEN - TIMESTAMP TIMEZONE_HOUR TIMEZONE_MINUTE TO TOAST TRAILING - TRANSATION TRANSACTIONS_COMMITTED TRANSACTIONS_ROLLED_BACK - TRANSATION_ACTIVE TRANSFORM TRANSFORMS TRANSLATE TRANSLATION - TREAT TRIGGER TRIGGER_CATALOG TRIGGER_NAME TRIGGER_SCHEMA TRIM - TRUE TRUNCATE TRUSTED TYPE UNCOMMITTED UNDER UNENCRYPTED UNION - UNIQUE UNKNOWN UNLISTEN UNNAMED UNNEST UNTIL UPDATE UPPER - USAGE USER USER_DEFINED_TYPE_CATALOG USER_DEFINED_TYPE_NAME - USER_DEFINED_TYPE_SCHEMA USING VACUUM VALID VALIDATOR VALUES - VARIABLE VERBOSE VERSION VIEW VOLATILE WHEN WHENEVER WHERE - WITH WITHOUT WORK WRITE YEAR ZONE - ) - end - - state :root do - rule /\s+/m, Text - rule /--.*?\n/, Comment::Single - rule %r(/\*), Comment::Multiline, :multiline_comments - rule /\d+/, Num::Integer - rule /'/, Str::Single, :single_string - rule /"/, Name::Variable, :double_string - rule /`/, Name::Variable, :backtick - - rule /\w[\w\d]*/ do |m| - if self.class.keywords.include? m[0].upcase - token Keyword - else - token Name - end - end - - rule %r([+*/<>=~!@#%^&|?^-]), Operator - rule /[;:()\[\],.]/, Punctuation - end - - state :multiline_comments do - rule %r(/[*]), Comment::Multiline, :multiline_comments - rule %r([*]/), Comment::Multiline, :pop! - rule %r([^/*]+), Comment::Multiline - rule %r([/*]), Comment::Multiline - end - - state :backtick do - rule /\\./, Str::Escape - rule /``/, Str::Escape - rule /`/, Name::Variable, :pop! - rule /[^\\`]+/, Name::Variable - end - - state :single_string do - rule /\\./, Str::Escape - rule /''/, Str::Escape - rule /'/, Str::Single, :pop! - rule /[^\\']+/, Str::Single - end - - state :double_string do - rule /\\./, Str::Escape - rule /""/, Str::Escape - rule /"/, Name::Variable, :pop! - rule /[^\\"]+/, Name::Variable - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/swift.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/swift.rb deleted file mode 100644 index 76cb2a6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/swift.rb +++ /dev/null @@ -1,159 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - class Swift < RegexLexer - tag 'swift' - filenames '*.swift' - - title "Swift" - desc 'Multi paradigm, compiled programming language developed by Apple for iOS and OS X development. (developer.apple.com/swift)' - - id_head = /_|(?!\p{Mc})\p{Alpha}|[^\u0000-\uFFFF]/ - id_rest = /[\p{Alnum}_]|[^\u0000-\uFFFF]/ - id = /#{id_head}#{id_rest}*/ - - keywords = Set.new %w( - break case continue default do else fallthrough if in for return switch where while - - as dynamicType is new super self Self Type __COLUMN__ __FILE__ __FUNCTION__ __LINE__ - - associativity didSet get infix inout left mutating none nonmutating operator override postfix precedence prefix right set unowned weak willSet - ) - - declarations = Set.new %w( - class deinit enum extension final func import init internal lazy let optional private protocol public required static struct subscript typealias var dynamic - ) - - attributes = Set.new %w( - autoclosure IBAction IBDesignable IBInspectable IBOutlet noreturn NSCopying NSManaged objc UIApplicationMain NSApplicationMain objc_block noescape - ) - - constants = Set.new %w( - true false nil - ) - - start { push :bol } - - # beginning of line - state :bol do - rule /#.*/, Comment::Preproc - - mixin :inline_whitespace - - rule(//) { pop! } - end - - state :inline_whitespace do - rule /\s+/m, Text - rule %r((?\/\*(?:(?>[^\/\*\*\/]+)|\g)*\*\/))m, Comment::Multiline - end - - state :whitespace do - rule /\n+/m, Text, :bol - rule %r(\/\/.*?$), Comment::Single, :bol - mixin :inline_whitespace - end - - state :root do - mixin :whitespace - rule /\$(([1-9]\d*)?\d)/, Name::Variable - - rule %r{[()\[\]{}:;,?]}, Punctuation - rule %r([-/=+*%<>!&|^.~]+), Operator - rule /@?"/, Str, :dq - rule /'(\\.|.)'/, Str::Char - rule /(\d+\*|\d*\.\d+)(e[+-]?[0-9]+)?/i, Num::Float - rule /\d+e[+-]?[0-9]+/i, Num::Float - rule /0_?[0-7]+(?:_[0-7]+)*/, Num::Oct - rule /0x[0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*/, Num::Hex - rule /0b[01]+(?:_[01]+)*/, Num::Bin - rule %r{[\d]+(?:_\d+)*}, Num::Integer - - rule /@availability[(][^)]+[)]/, Keyword::Declaration - - rule /(@objc[(])([^)]+)([)])/ do - groups Keyword::Declaration, Name::Class, Keyword::Declaration - end - - rule /@autoclosure\(escaping\)/, Keyword::Declaration - - rule /@(#{id})/ do |m| - if attributes.include? m[1] - token Keyword - else - token Error - end - end - - rule /(private|internal)(\([ ]*)(\w+)([ ]*\))/ do |m| - if m[3] == 'set' - token Keyword::Declaration - else - groups Keyword::Declaration, Keyword::Declaration, Error, Keyword::Declaration - end - end - - rule /(unowned\([ ]*)(\w+)([ ]*\))/ do |m| - if m[2] == 'safe' || m[2] == 'unsafe' - token Keyword::Declaration - else - groups Keyword::Declaration, Error, Keyword::Declaration - end - end - - rule /(let|var)\b(\s*)(#{id})/ do - groups Keyword, Text, Name::Variable - end - - rule /(?!\b(if|while|for|private|internal|unowned|switch|case)\b)\b#{id}(?=(\?|!)?\s*[(])/ do |m| - if m[0] =~ /^[[:upper:]]/ - token Keyword::Type - else - token Name::Function - end - end - - rule /as[?!]?/, Keyword - - rule /(#?(?!default)(?![[:upper:]])#{id})(\s*)(:)/ do - groups Name::Variable, Text, Punctuation - end - - rule id do |m| - if keywords.include? m[0] - token Keyword - elsif declarations.include? m[0] - token Keyword::Declaration - elsif constants.include? m[0] - token Keyword::Constant - elsif m[0] =~ /^[[:upper:]]/ - token Keyword::Type - else - token Name - end - end - end - - state :dq do - rule /\\[\\0tnr'"]/, Str::Escape - rule /\\[(]/, Str::Escape, :interp - rule /\\u\{\h{1,8}\}/, Str::Escape - rule /[^\\"]+/, Str - rule /"/, Str, :pop! - end - - state :interp do - rule /[(]/, Punctuation, :interp_inner - rule /[)]/, Str::Escape, :pop! - mixin :root - end - - state :interp_inner do - rule /[(]/, Punctuation, :push - rule /[)]/, Punctuation, :pop! - mixin :root - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/tcl.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/tcl.rb deleted file mode 100644 index 240ac6a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/tcl.rb +++ /dev/null @@ -1,192 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - class TCL < RegexLexer - title "Tcl" - desc "The Tool Command Language (tcl.tk)" - tag 'tcl' - filenames '*.tcl' - mimetypes 'text/x-tcl', 'text/x-script.tcl', 'application/x-tcl' - - def self.analyze_text(text) - return 1 if text.shebang? 'tclsh' - return 1 if text.shebang? 'wish' - return 1 if text.shebang? 'jimsh' - end - - KEYWORDS = %w( - after apply array break catch continue elseif else error - eval expr for foreach global if namespace proc rename return - set switch then trace unset update uplevel upvar variable - vwait while - ) - - BUILTINS = %w( - append bgerror binary cd chan clock close concat dde dict - encoding eof exec exit fblocked fconfigure fcopy file - fileevent flush format gets glob history http incr info interp - join lappend lassign lindex linsert list llength load loadTk - lrange lrepeat lreplace lreverse lsearch lset lsort mathfunc - mathop memory msgcat open package pid pkg::create pkg_mkIndex - platform platform::shell puts pwd re_syntax read refchan - regexp registry regsub scan seek socket source split string - subst tell time tm unknown unload - ) - - OPEN = %w| \( \[ \{ " | - CLOSE = %w| \) \] \} | - ALL = OPEN + CLOSE - END_LINE = CLOSE + %w(; \n) - END_WORD = END_LINE + %w(\s) - - CHARS = lambda { |list| Regexp.new %/[#{list.join}]/ } - NOT_CHARS = lambda { |list| Regexp.new %/[^#{list.join}]/ } - - state :word do - rule /\{\*\}/, Keyword - - mixin :brace_abort - mixin :interp - rule /\{/, Punctuation, :brace - rule /\(/, Punctuation, :paren - rule /"/, Str::Double, :string - rule /#{NOT_CHARS[END_WORD]}+?(?=#{CHARS[OPEN+['\\\\']]})/, Text - end - - def self.gen_command_state(name='') - state(:"command#{name}") do - mixin :word - - rule /##{NOT_CHARS[END_LINE]}+/, Comment::Single - - rule /(?=#{CHARS[END_WORD]})/ do - push :"params#{name}" - end - - rule /#{NOT_CHARS[END_WORD]}+/ do |m| - if KEYWORDS.include? m[0] - token Keyword - elsif BUILTINS.include? m[0] - token Name::Builtin - else - token Text - end - end - - mixin :whitespace - end - end - - def self.gen_delimiter_states(name, close, opts={}) - gen_command_state("_in_#{name}") - - state :"params_in_#{name}" do - rule close do - token Punctuation - pop! 2 - end - - # mismatched delimiters. Braced strings with mismatched - # closing delimiters should be okay, since this is standard - # practice, like {]]]]} - if opts[:strict] - rule CHARS[CLOSE - [close]], Error - else - rule CHARS[CLOSE - [close]], Text - end - - mixin :params - end - - state name do - rule close, Punctuation, :pop! - mixin :"command_in_#{name}" - end - end - - - # tcl is freaking impossible. If we're in braces and we encounter - # a close brace, we have to drop everything and close the brace. - # This is so silly things like {abc"def} and {abc]def} don't b0rk - # everything after them. - - # TODO: TCL seems to have this aborting behavior quite a lot. - # such things as [ abc" ] are a runtime error, but will still - # parse. Currently something like this will muck up the lex. - state :brace_abort do - rule /}/ do - if in_state? :brace - pop! until state? :brace - pop! - token Punctuation - else - token Error - end - end - end - - state :params do - rule /;/, Punctuation, :pop! - rule /\n/, Text, :pop! - rule /else|elseif|then/, Keyword - mixin :word - mixin :whitespace - rule /#{NOT_CHARS[END_WORD]}+/, Text - end - - gen_delimiter_states :brace, /\}/, :strict => false - gen_delimiter_states :paren, /\)/, :strict => true - gen_delimiter_states :bracket, /\]/, :strict => true - gen_command_state - - state :root do - mixin :command - end - - state :whitespace do - # not a multiline regex because we want to capture \n sometimes - rule /\s+/, Text - end - - state :interp do - rule /\[/, Punctuation, :bracket - rule /\$[a-z0-9.:-]+/, Name::Variable - rule /\$\{.*?\}/m, Name::Variable - rule /\$/, Text - - # escape sequences - rule /\\[0-7]{3}/, Str::Escape - rule /\\x[0-9a-f]{2}/i, Str::Escape - rule /\\u[0-9a-f]{4}/i, Str::Escape - rule /\\./m, Str::Escape - end - - state :string do - rule /"/, Str::Double, :pop! - mixin :interp - rule /[^\\\[\$"{}]+/m, Str::Double - - # strings have to keep count of their internal braces, to support - # for example { "{ }" }. - rule /{/ do - @brace_count ||= 0 - @brace_count += 1 - - token Str::Double - end - - rule /}/ do - if in_state? :brace and @brace_count.to_i == 0 - pop! until state? :brace - pop! - token Punctuation - else - @brace_count -= 1 - token Str::Double - end - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/tex.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/tex.rb deleted file mode 100644 index 903a941..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/tex.rb +++ /dev/null @@ -1,72 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - class TeX < RegexLexer - title "TeX" - desc "The TeX typesetting system" - tag 'tex' - aliases 'TeX', 'LaTeX', 'latex' - - filenames '*.tex', '*.aux', '*.toc' - mimetypes 'text/x-tex', 'text/x-latex' - - def self.analyze_text(text) - return 1 if text =~ /\A\s*\\documentclass/ - return 1 if text =~ /\A\s*\\input/ - return 1 if text =~ /\A\s*\\documentstyle/ - return 1 if text =~ /\A\s*\\relax/ - end - - command = /\\([a-z]+|\s+|.)/i - - state :general do - rule /%.*$/, Comment - rule /[{}&_^]/, Punctuation - end - - state :root do - rule /\\\[/, Punctuation, :displaymath - rule /\\\(/, Punctuation, :inlinemath - rule /\$\$/, Punctuation, :displaymath - rule /\$/, Punctuation, :inlinemath - rule /\\(begin|end)\{.*?\}/, Name::Tag - - rule /(\\verb)\b(\S)(.*?)(\2)/ do |m| - groups Name::Builtin, Keyword::Pseudo, Str::Other, Keyword::Pseudo - end - - rule command, Keyword, :command - mixin :general - rule /[^\\$%&_^{}]+/, Text - end - - state :math do - rule command, Name::Variable - mixin :general - rule /[0-9]+/, Num - rule /[-=!+*\/()\[\]]/, Operator - rule /[^=!+*\/()\[\]\\$%&_^{}0-9-]+/, Name::Builtin - end - - state :inlinemath do - rule /\\\)/, Punctuation, :pop! - rule /\$/, Punctuation, :pop! - mixin :math - end - - state :displaymath do - rule /\\\]/, Punctuation, :pop! - rule /\$\$/, Punctuation, :pop! - rule /\$/, Name::Builtin - mixin :math - end - - state :command do - rule /\[.*?\]/, Name::Attribute - rule /\*/, Keyword - rule(//) { pop! } - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/toml.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/toml.rb deleted file mode 100644 index 984ade2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/toml.rb +++ /dev/null @@ -1,71 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - class TOML < RegexLexer - title "TOML" - desc 'the TOML configuration format (https://github.com/mojombo/toml)' - tag 'toml' - - filenames '*.toml' - mimetypes 'text/x-toml' - - def self.analyze_text(text) - return 0.1 if text =~ /\A\[[\w.]+\]\s*\w+\s*=\s*("\w+")+/ - end - - identifier = /[\w.\S]+/ - - state :basic do - rule /\s+/, Text - rule /#.*?$/, Comment - rule /(true|false)/, Keyword::Constant - rule /(?|_%,]/, Punctuation - rule /[.][.][.]/, Punctuation - rule id, Name - end - - state :string_base do - rule /{/ do - token Str; push - end - - rule /}/, Str, :pop! - rule /[$]/, Str - rule /[^${}\\]+/, Str - end - - state :string do - mixin :string_base - rule /\\/, Str - end - - state :interp do - rule(/[(]/) { token Punctuation; push } - rule /[)]/, Punctuation, :pop! - mixin :root - end - - state :interp_root do - rule /[(]/, Str::Interpol, :interp - rule /[)]/, Str::Interpol, :pop! - mixin :root - end - - state :string_interp do - rule /\\./, Str::Escape - rule /[$][(]/, Str::Interpol, :interp_root - rule /[$]#{id}?/, Name::Variable - mixin :string_base - end - end - end -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/vb.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/vb.rb deleted file mode 100644 index 243ff79..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/vb.rb +++ /dev/null @@ -1,164 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - class VisualBasic < RegexLexer - title "Visual Basic" - desc "Visual Basic" - tag 'vb' - aliases 'visualbasic' - filenames '*.vbs' - mimetypes 'text/x-visualbasic', 'application/x-visualbasic' - - def self.keywords - @keywords ||= Set.new %w( - AddHandler Alias ByRef ByVal CBool CByte CChar CDate CDbl CDec - CInt CLng CObj CSByte CShort CSng CStr CType CUInt CULng CUShort - Call Case Catch Class Const Continue Declare Default Delegate - Dim DirectCast Do Each Else ElseIf End EndIf Enum Erase Error - Event Exit False Finally For Friend Function Get Global GoSub - GoTo Handles If Implements Imports Inherits Interface Let - Lib Loop Me Module MustInherit MustOverride MyBase MyClass - Namespace Narrowing New Next Not NotInheritable NotOverridable - Nothing Of On Operator Option Optional Overloads Overridable - Overrides ParamArray Partial Private Property Protected Public - RaiseEvent ReDim ReadOnly RemoveHandler Resume Return Select Set - Shadows Shared Single Static Step Stop Structure Sub SyncLock - Then Throw To True Try TryCast Using Wend When While Widening - With WithEvents WriteOnly - ) - end - - def self.keywords_type - @keywords_type ||= Set.new %w( - Boolean Byte Char Date Decimal Double Integer Long Object - SByte Short Single String Variant UInteger ULong UShort - ) - end - - def self.operator_words - @operator_words ||= Set.new %w( - AddressOf And AndAlso As GetType In Is IsNot Like Mod Or OrElse - TypeOf Xor - ) - end - - def self.builtins - @builtins ||= Set.new %w( - Console ConsoleColor - ) - end - - id = /[a-z_]\w*/i - upper_id = /[A-Z]\w*/ - - state :whitespace do - rule /\s+/, Text - rule /\n/, Text, :bol - rule /rem\b.*?$/i, Comment::Single - rule %r(%\{.*?%\})m, Comment::Multiline - rule /'.*$/, Comment::Single - end - - state :bol do - rule /\s+/, Text - rule /<.*?>/, Name::Attribute - rule(//) { :pop! } - end - - state :root do - mixin :whitespace - rule %r( - [#]If\b .*? \bThen - | [#]ElseIf\b .*? \bThen - | [#]End \s+ If - | [#]Const - | [#]ExternalSource .*? \n - | [#]End \s+ ExternalSource - | [#]Region .*? \n - | [#]End \s+ Region - | [#]ExternalChecksum - )x, Comment::Preproc - rule /[.]/, Punctuation, :dotted - rule /[(){}!#,:]/, Punctuation - rule /Option\s+(Strict|Explicit|Compare)\s+(On|Off|Binary|Text)/, - Keyword::Declaration - rule /End\b/, Keyword, :end - rule /(Dim|Const)\b/, Keyword, :dim - rule /(Function|Sub|Property)\b/, Keyword, :funcname - rule /(Class|Structure|Enum)\b/, Keyword, :classname - rule /(Module|Namespace|Imports)\b/, Keyword, :namespace - - rule upper_id do |m| - match = m[0] - if self.class.keywords.include? match - token Keyword - elsif self.class.keywords_type.include? match - token Keyword::Type - elsif self.class.operator_words.include? match - token Operator::Word - elsif self.class.builtins.include? match - token Name::Builtin - else - token Name - end - end - - rule( - %r(&=|[*]=|/=|\\=|\^=|\+=|-=|<<=|>>=|<<|>>|:=|<=|>=|<>|[-&*/\\^+=<>.]), - Operator - ) - - rule /"/, Str, :string - rule /#{id}[%&@!#\$]?/, Name - rule /#.*?#/, Literal::Date - - rule /(\d+\.\d*|\d*\.\d+)(f[+-]?\d+)?/i, Num::Float - rule /\d+([SILDFR]|US|UI|UL)?/, Num::Integer - rule /&H[0-9a-f]+([SILDFR]|US|UI|UL)?/, Num::Integer - rule /&O[0-7]+([SILDFR]|US|UI|UL)?/, Num::Integer - - rule /_\n/, Keyword - end - - state :dotted do - mixin :whitespace - rule id, Name, :pop! - end - - state :string do - rule /""/, Str::Escape - rule /"C?/, Str, :pop! - rule /[^"]+/, Str - end - - state :dim do - mixin :whitespace - rule id, Name::Variable, :pop! - rule(//) { pop! } - end - - state :funcname do - mixin :whitespace - rule id, Name::Function, :pop! - end - - state :classname do - mixin :whitespace - rule id, Name::Class, :pop! - end - - state :namespace do - mixin :whitespace - rule /#{id}([.]#{id})*/, Name::Namespace, :pop! - end - - state :end do - mixin :whitespace - rule /(Function|Sub|Property|Class|Structure|Enum|Module|Namespace)\b/, - Keyword, :pop! - rule(//) { pop! } - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/viml.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/viml.rb deleted file mode 100644 index 109e2cf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/viml.rb +++ /dev/null @@ -1,101 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - class VimL < RegexLexer - title "VimL" - desc "VimL, the scripting language for the Vim editor (vim.org)" - tag 'viml' - aliases 'vim', 'vimscript', 'ex' - filenames '*.vim', '*.vba', '.vimrc', '.exrc', '.gvimrc', - '_vimrc', '_exrc', '_gvimrc' # _ names for windows - - mimetypes 'text/x-vim' - - def self.keywords - load Pathname.new(__FILE__).dirname.join('viml/keywords.rb') - self.keywords - end - - state :root do - rule /^(\s*)(".*?)$/ do - groups Text, Comment - end - - rule /^\s*\\/, Str::Escape - - rule /[ \t]+/, Text - - # TODO: regexes can have other delimiters - rule %r(/(\\\\|\\/|[^\n/])*/), Str::Regex - rule %r("(\\\\|\\"|[^\n"])*"), Str::Double - rule %r('(\\\\|\\'|[^\n'])*'), Str::Single - - # if it's not a string, it's a comment. - rule /(?<=\s)"[^-:.%#=*].*?$/, Comment - - rule /-?\d+/, Num - rule /#[0-9a-f]{6}/i, Num::Hex - rule /^:/, Punctuation - rule /[():<>+=!\[\]{}\|,~.-]/, Punctuation - rule /\b(let|if|else|endif|elseif|fun|function|endfunction)\b/, - Keyword - - rule /\b(NONE|bold|italic|underline|dark|light)\b/, Name::Builtin - - rule /[absg]:\w+\b/, Name::Variable - rule /\b\w+\b/ do |m| - name = m[0] - keywords = self.class.keywords - - if mapping_contains?(keywords[:command], name) - token Keyword - elsif mapping_contains?(keywords[:option], name) - token Name::Builtin - elsif mapping_contains?(keywords[:auto], name) - token Name::Builtin - else - token Text - end - end - - # no errors in VimL! - rule /./m, Text - end - - def mapping_contains?(mapping, word) - shortest, longest = find_likely_mapping(mapping, word) - - shortest and word.start_with?(shortest) and - longest and longest.start_with?(word) - end - - # binary search through the mappings to find the one that's likely - # to actually work. - def find_likely_mapping(mapping, word) - min = 0 - max = mapping.size - - until max == min - mid = (max + min) / 2 - - cmp, _ = mapping[mid] - - case word <=> cmp - when 1 - # too low - min = mid + 1 - when -1 - # too high - max = mid - when 0 - # just right, abort! - return mapping[mid] - end - end - - mapping[max - 1] - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/viml/keywords.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/viml/keywords.rb deleted file mode 100644 index 6dbba0e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/viml/keywords.rb +++ /dev/null @@ -1,12 +0,0 @@ -# encoding: utf-8 -# DO NOT EDIT: automatically generated by `rake builtins:vim`. -# see tasks/vim.rake for more info. -module Rouge - module Lexers - class VimL - def self.keywords - @keywords ||= {:command=>[["a", "a"], ["ab", "ab"], ["abc", "abclear"], ["abo", "aboveleft"], ["al", "all"], ["ar", "ar"], ["ar", "args"], ["arga", "argadd"], ["argd", "argdelete"], ["argdo", "argdo"], ["arge", "argedit"], ["argg", "argglobal"], ["argl", "arglocal"], ["argu", "argument"], ["as", "ascii"], ["au", "au"], ["b", "buffer"], ["bN", "bNext"], ["ba", "ball"], ["bad", "badd"], ["bd", "bdelete"], ["bel", "belowright"], ["bf", "bfirst"], ["bl", "blast"], ["bm", "bmodified"], ["bn", "bnext"], ["bo", "botright"], ["bp", "bprevious"], ["br", "br"], ["br", "brewind"], ["brea", "break"], ["breaka", "breakadd"], ["breakd", "breakdel"], ["breakl", "breaklist"], ["bro", "browse"], ["bu", "bu"], ["buf", "buf"], ["bufdo", "bufdo"], ["buffers", "buffers"], ["bun", "bunload"], ["bw", "bwipeout"], ["c", "c"], ["c", "change"], ["cN", "cN"], ["cN", "cNext"], ["cNf", "cNf"], ["cNf", "cNfile"], ["cabc", "cabclear"], ["cad", "cad"], ["cad", "caddexpr"], ["caddb", "caddbuffer"], ["caddf", "caddfile"], ["cal", "call"], ["cat", "catch"], ["cb", "cbuffer"], ["cc", "cc"], ["ccl", "cclose"], ["cd", "cd"], ["ce", "center"], ["cex", "cexpr"], ["cf", "cfile"], ["cfir", "cfirst"], ["cg", "cgetfile"], ["cgetb", "cgetbuffer"], ["cgete", "cgetexpr"], ["changes", "changes"], ["chd", "chdir"], ["che", "checkpath"], ["checkt", "checktime"], ["cl", "cl"], ["cl", "clist"], ["cla", "clast"], ["clo", "close"], ["cmapc", "cmapclear"], ["cn", "cn"], ["cn", "cnext"], ["cnew", "cnewer"], ["cnf", "cnf"], ["cnf", "cnfile"], ["co", "copy"], ["col", "colder"], ["colo", "colorscheme"], ["com", "com"], ["comc", "comclear"], ["comp", "compiler"], ["con", "con"], ["con", "continue"], ["conf", "confirm"], ["cope", "copen"], ["cp", "cprevious"], ["cpf", "cpfile"], ["cq", "cquit"], ["cr", "crewind"], ["cs", "cs"], ["cscope", "cscope"], ["cstag", "cstag"], ["cuna", "cunabbrev"], ["cw", "cwindow"], ["d", "d"], ["d", "delete"], ["de", "de"], ["debug", "debug"], ["debugg", "debuggreedy"], ["del", "del"], ["delc", "delcommand"], ["delel", "delel"], ["delep", "delep"], ["deletel", "deletel"], ["deletep", "deletep"], ["deletl", "deletl"], ["deletp", "deletp"], ["delf", "delf"], ["delf", "delfunction"], ["dell", "dell"], ["delm", "delmarks"], ["delp", "delp"], ["dep", "dep"], ["di", "di"], ["di", "display"], ["diffg", "diffget"], ["diffo", "diffoff"], ["diffp", "diffpatch"], ["diffpu", "diffput"], ["diffs", "diffsplit"], ["difft", "diffthis"], ["diffu", "diffupdate"], ["dig", "dig"], ["dig", "digraphs"], ["dir", "dir"], ["dj", "djump"], ["dl", "dl"], ["dli", "dlist"], ["do", "do"], ["doau", "doau"], ["dp", "dp"], ["dr", "drop"], ["ds", "dsearch"], ["dsp", "dsplit"], ["e", "e"], ["e", "edit"], ["ea", "ea"], ["earlier", "earlier"], ["ec", "ec"], ["echoe", "echoerr"], ["echom", "echomsg"], ["echon", "echon"], ["el", "else"], ["elsei", "elseif"], ["em", "emenu"], ["en", "en"], ["en", "endif"], ["endf", "endf"], ["endf", "endfunction"], ["endfo", "endfor"], ["endfun", "endfun"], ["endt", "endtry"], ["endw", "endwhile"], ["ene", "enew"], ["ex", "ex"], ["exi", "exit"], ["exu", "exusage"], ["f", "f"], ["f", "file"], ["files", "files"], ["filet", "filet"], ["filetype", "filetype"], ["fin", "fin"], ["fin", "find"], ["fina", "finally"], ["fini", "finish"], ["fir", "first"], ["fix", "fixdel"], ["fo", "fold"], ["foldc", "foldclose"], ["foldd", "folddoopen"], ["folddoc", "folddoclosed"], ["foldo", "foldopen"], ["for", "for"], ["fu", "fu"], ["fu", "function"], ["fun", "fun"], ["g", "g"], ["go", "goto"], ["gr", "grep"], ["grepa", "grepadd"], ["gui", "gui"], ["gvim", "gvim"], ["h", "h"], ["h", "help"], ["ha", "hardcopy"], ["helpf", "helpfind"], ["helpg", "helpgrep"], ["helpt", "helptags"], ["hi", "hi"], ["hid", "hide"], ["his", "history"], ["i", "i"], ["ia", "ia"], ["iabc", "iabclear"], ["if", "if"], ["ij", "ijump"], ["il", "ilist"], ["imapc", "imapclear"], ["in", "in"], ["intro", "intro"], ["is", "isearch"], ["isp", "isplit"], ["iuna", "iunabbrev"], ["j", "join"], ["ju", "jumps"], ["k", "k"], ["kee", "keepmarks"], ["keepa", "keepa"], ["keepalt", "keepalt"], ["keepj", "keepjumps"], ["keepp", "keeppatterns"], ["l", "l"], ["l", "list"], ["lN", "lN"], ["lN", "lNext"], ["lNf", "lNf"], ["lNf", "lNfile"], ["la", "la"], ["la", "last"], ["lad", "lad"], ["lad", "laddexpr"], ["laddb", "laddbuffer"], ["laddf", "laddfile"], ["lan", "lan"], ["lan", "language"], ["lat", "lat"], ["later", "later"], ["lb", "lbuffer"], ["lc", "lcd"], ["lch", "lchdir"], ["lcl", "lclose"], ["lcs", "lcs"], ["lcscope", "lcscope"], ["le", "left"], ["lefta", "leftabove"], ["lex", "lexpr"], ["lf", "lfile"], ["lfir", "lfirst"], ["lg", "lgetfile"], ["lgetb", "lgetbuffer"], ["lgete", "lgetexpr"], ["lgr", "lgrep"], ["lgrepa", "lgrepadd"], ["lh", "lhelpgrep"], ["ll", "ll"], ["lla", "llast"], ["lli", "llist"], ["lmak", "lmake"], ["lmapc", "lmapclear"], ["lne", "lne"], ["lne", "lnext"], ["lnew", "lnewer"], ["lnf", "lnf"], ["lnf", "lnfile"], ["lo", "lo"], ["lo", "loadview"], ["loadk", "loadk"], ["loadkeymap", "loadkeymap"], ["loc", "lockmarks"], ["lockv", "lockvar"], ["lol", "lolder"], ["lop", "lopen"], ["lp", "lprevious"], ["lpf", "lpfile"], ["lr", "lrewind"], ["ls", "ls"], ["lt", "ltag"], ["lua", "lua"], ["luado", "luado"], ["luafile", "luafile"], ["lv", "lvimgrep"], ["lvimgrepa", "lvimgrepadd"], ["lw", "lwindow"], ["m", "move"], ["ma", "ma"], ["ma", "mark"], ["mak", "make"], ["marks", "marks"], ["mat", "match"], ["menut", "menut"], ["menut", "menutranslate"], ["mes", "mes"], ["messages", "messages"], ["mk", "mk"], ["mk", "mkexrc"], ["mks", "mksession"], ["mksp", "mkspell"], ["mkv", "mkv"], ["mkv", "mkvimrc"], ["mkvie", "mkview"], ["mo", "mo"], ["mod", "mode"], ["mz", "mz"], ["mz", "mzscheme"], ["mzf", "mzfile"], ["n", "n"], ["n", "next"], ["nb", "nbkey"], ["nbc", "nbclose"], ["nbs", "nbstart"], ["ne", "ne"], ["new", "new"], ["nmapc", "nmapclear"], ["noa", "noa"], ["noautocmd", "noautocmd"], ["noh", "nohlsearch"], ["nu", "number"], ["o", "o"], ["o", "open"], ["ol", "oldfiles"], ["omapc", "omapclear"], ["on", "only"], ["opt", "options"], ["ownsyntax", "ownsyntax"], ["p", "p"], ["p", "print"], ["pc", "pclose"], ["pe", "pe"], ["pe", "perl"], ["ped", "pedit"], ["perld", "perldo"], ["po", "pop"], ["popu", "popu"], ["popu", "popup"], ["pp", "ppop"], ["pr", "pr"], ["pre", "preserve"], ["prev", "previous"], ["pro", "pro"], ["prof", "profile"], ["profd", "profdel"], ["promptf", "promptfind"], ["promptr", "promptrepl"], ["ps", "psearch"], ["ptN", "ptN"], ["ptN", "ptNext"], ["pta", "ptag"], ["ptf", "ptfirst"], ["ptj", "ptjump"], ["ptl", "ptlast"], ["ptn", "ptn"], ["ptn", "ptnext"], ["ptp", "ptprevious"], ["ptr", "ptrewind"], ["pts", "ptselect"], ["pu", "put"], ["pw", "pwd"], ["py", "py"], ["py", "python"], ["py3", "py3"], ["py3", "py3"], ["py3do", "py3do"], ["pydo", "pydo"], ["pyf", "pyfile"], ["python3", "python3"], ["q", "q"], ["q", "quit"], ["qa", "qall"], ["quita", "quitall"], ["r", "r"], ["r", "read"], ["re", "re"], ["rec", "recover"], ["red", "red"], ["red", "redo"], ["redi", "redir"], ["redr", "redraw"], ["redraws", "redrawstatus"], ["reg", "registers"], ["res", "resize"], ["ret", "retab"], ["retu", "return"], ["rew", "rewind"], ["ri", "right"], ["rightb", "rightbelow"], ["ru", "ru"], ["ru", "runtime"], ["rub", "ruby"], ["rubyd", "rubydo"], ["rubyf", "rubyfile"], ["rundo", "rundo"], ["rv", "rviminfo"], ["sN", "sNext"], ["sa", "sargument"], ["sal", "sall"], ["san", "sandbox"], ["sav", "saveas"], ["sb", "sbuffer"], ["sbN", "sbNext"], ["sba", "sball"], ["sbf", "sbfirst"], ["sbl", "sblast"], ["sbm", "sbmodified"], ["sbn", "sbnext"], ["sbp", "sbprevious"], ["sbr", "sbrewind"], ["scrip", "scrip"], ["scrip", "scriptnames"], ["scripte", "scriptencoding"], ["scs", "scs"], ["scscope", "scscope"], ["se", "set"], ["setf", "setfiletype"], ["setg", "setglobal"], ["setl", "setlocal"], ["sf", "sfind"], ["sfir", "sfirst"], ["sh", "shell"], ["si", "si"], ["sig", "sig"], ["sign", "sign"], ["sil", "silent"], ["sim", "simalt"], ["sl", "sl"], ["sl", "sleep"], ["sla", "slast"], ["sm", "smagic"], ["sm", "smap"], ["sme", "sme"], ["smenu", "smenu"], ["sn", "snext"], ["sni", "sniff"], ["sno", "snomagic"], ["snoreme", "snoreme"], ["snoremenu", "snoremenu"], ["so", "so"], ["so", "source"], ["sor", "sort"], ["sp", "split"], ["spe", "spe"], ["spe", "spellgood"], ["spelld", "spelldump"], ["spelli", "spellinfo"], ["spellr", "spellrepall"], ["spellu", "spellundo"], ["spellw", "spellwrong"], ["spr", "sprevious"], ["sre", "srewind"], ["st", "st"], ["st", "stop"], ["sta", "stag"], ["star", "star"], ["star", "startinsert"], ["start", "start"], ["startg", "startgreplace"], ["startr", "startreplace"], ["stj", "stjump"], ["stopi", "stopinsert"], ["sts", "stselect"], ["sun", "sunhide"], ["sunme", "sunme"], ["sunmenu", "sunmenu"], ["sus", "suspend"], ["sv", "sview"], ["sw", "swapname"], ["sy", "sy"], ["syn", "syn"], ["sync", "sync"], ["syncbind", "syncbind"], ["syntime", "syntime"], ["t", "t"], ["tN", "tN"], ["tN", "tNext"], ["ta", "ta"], ["ta", "tag"], ["tab", "tab"], ["tabN", "tabN"], ["tabN", "tabNext"], ["tabc", "tabclose"], ["tabd", "tabdo"], ["tabe", "tabedit"], ["tabf", "tabfind"], ["tabfir", "tabfirst"], ["tabl", "tablast"], ["tabm", "tabmove"], ["tabn", "tabnext"], ["tabnew", "tabnew"], ["tabo", "tabonly"], ["tabp", "tabprevious"], ["tabr", "tabrewind"], ["tabs", "tabs"], ["tags", "tags"], ["tc", "tcl"], ["tcld", "tcldo"], ["tclf", "tclfile"], ["te", "tearoff"], ["tf", "tfirst"], ["th", "throw"], ["tj", "tjump"], ["tl", "tlast"], ["tm", "tm"], ["tm", "tmenu"], ["tn", "tn"], ["tn", "tnext"], ["to", "topleft"], ["tp", "tprevious"], ["tr", "tr"], ["tr", "trewind"], ["try", "try"], ["ts", "tselect"], ["tu", "tu"], ["tu", "tunmenu"], ["u", "u"], ["u", "undo"], ["un", "un"], ["una", "unabbreviate"], ["undoj", "undojoin"], ["undol", "undolist"], ["unh", "unhide"], ["unl", "unl"], ["unlo", "unlockvar"], ["uns", "unsilent"], ["up", "update"], ["v", "v"], ["ve", "ve"], ["ve", "version"], ["verb", "verbose"], ["vert", "vertical"], ["vi", "vi"], ["vi", "visual"], ["vie", "view"], ["vim", "vimgrep"], ["vimgrepa", "vimgrepadd"], ["viu", "viusage"], ["vmapc", "vmapclear"], ["vne", "vnew"], ["vs", "vsplit"], ["w", "w"], ["w", "write"], ["wN", "wNext"], ["wa", "wall"], ["wh", "while"], ["win", "win"], ["win", "winsize"], ["winc", "wincmd"], ["windo", "windo"], ["winp", "winpos"], ["wn", "wnext"], ["wp", "wprevious"], ["wq", "wq"], ["wqa", "wqall"], ["ws", "wsverb"], ["wundo", "wundo"], ["wv", "wviminfo"], ["x", "x"], ["x", "xit"], ["xa", "xall"], ["xmapc", "xmapclear"], ["xme", "xme"], ["xmenu", "xmenu"], ["xnoreme", "xnoreme"], ["xnoremenu", "xnoremenu"], ["xunme", "xunme"], ["xunmenu", "xunmenu"], ["xwininfo", "xwininfo"], ["y", "yank"]], :option=>[], :auto=>[["BufAdd", "BufAdd"], ["BufCreate", "BufCreate"], ["BufDelete", "BufDelete"], ["BufEnter", "BufEnter"], ["BufFilePost", "BufFilePost"], ["BufFilePre", "BufFilePre"], ["BufHidden", "BufHidden"], ["BufLeave", "BufLeave"], ["BufNew", "BufNew"], ["BufNewFile", "BufNewFile"], ["BufRead", "BufRead"], ["BufReadCmd", "BufReadCmd"], ["BufReadPost", "BufReadPost"], ["BufReadPre", "BufReadPre"], ["BufUnload", "BufUnload"], ["BufWinEnter", "BufWinEnter"], ["BufWinLeave", "BufWinLeave"], ["BufWipeout", "BufWipeout"], ["BufWrite", "BufWrite"], ["BufWriteCmd", "BufWriteCmd"], ["BufWritePost", "BufWritePost"], ["BufWritePre", "BufWritePre"], ["Cmd", "Cmd"], ["CmdwinEnter", "CmdwinEnter"], ["CmdwinLeave", "CmdwinLeave"], ["ColorScheme", "ColorScheme"], ["CompleteDone", "CompleteDone"], ["CursorHold", "CursorHold"], ["CursorHoldI", "CursorHoldI"], ["CursorMoved", "CursorMoved"], ["CursorMovedI", "CursorMovedI"], ["EncodingChanged", "EncodingChanged"], ["FileAppendCmd", "FileAppendCmd"], ["FileAppendPost", "FileAppendPost"], ["FileAppendPre", "FileAppendPre"], ["FileChangedRO", "FileChangedRO"], ["FileChangedShell", "FileChangedShell"], ["FileChangedShellPost", "FileChangedShellPost"], ["FileEncoding", "FileEncoding"], ["FileReadCmd", "FileReadCmd"], ["FileReadPost", "FileReadPost"], ["FileReadPre", "FileReadPre"], ["FileType", "FileType"], ["FileWriteCmd", "FileWriteCmd"], ["FileWritePost", "FileWritePost"], ["FileWritePre", "FileWritePre"], ["FilterReadPost", "FilterReadPost"], ["FilterReadPre", "FilterReadPre"], ["FilterWritePost", "FilterWritePost"], ["FilterWritePre", "FilterWritePre"], ["FocusGained", "FocusGained"], ["FocusLost", "FocusLost"], ["FuncUndefined", "FuncUndefined"], ["GUIEnter", "GUIEnter"], ["GUIFailed", "GUIFailed"], ["InsertChange", "InsertChange"], ["InsertCharPre", "InsertCharPre"], ["InsertEnter", "InsertEnter"], ["InsertLeave", "InsertLeave"], ["MenuPopup", "MenuPopup"], ["QuickFixCmdPost", "QuickFixCmdPost"], ["QuickFixCmdPre", "QuickFixCmdPre"], ["QuitPre", "QuitPre"], ["RemoteReply", "RemoteReply"], ["SessionLoadPost", "SessionLoadPost"], ["ShellCmdPost", "ShellCmdPost"], ["ShellFilterPost", "ShellFilterPost"], ["SourceCmd", "SourceCmd"], ["SourcePre", "SourcePre"], ["SpellFileMissing", "SpellFileMissing"], ["StdinReadPost", "StdinReadPost"], ["StdinReadPre", "StdinReadPre"], ["SwapExists", "SwapExists"], ["Syntax", "Syntax"], ["TabEnter", "TabEnter"], ["TabLeave", "TabLeave"], ["TermChanged", "TermChanged"], ["TermResponse", "TermResponse"], ["TextChanged", "TextChanged"], ["TextChangedI", "TextChangedI"], ["User", "User"], ["UserGettingBored", "UserGettingBored"], ["VimEnter", "VimEnter"], ["VimLeave", "VimLeave"], ["VimLeavePre", "VimLeavePre"], ["VimResized", "VimResized"], ["WinEnter", "WinEnter"], ["WinLeave", "WinLeave"], ["event", "event"]]} - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/xml.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/xml.rb deleted file mode 100644 index 8702379..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/xml.rb +++ /dev/null @@ -1,59 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - class XML < RegexLexer - title "XML" - desc %q(XML) - tag 'xml' - filenames *%w(*.xml *.xsl *.rss *.xslt *.xsd *.wsdl) - mimetypes *%w( - text/xml - application/xml - image/svg+xml - application/rss+xml - application/atom+xml - ) - - def self.analyze_text(text) - return 0.9 if text.doctype? - return 0.8 if text =~ /\A<\?xml\b/ - start = text[0..1000] - return 0.6 if start =~ %r(.*?)m - end - - state :root do - rule /[^<&]+/, Text - rule /&\S*?;/, Name::Entity - rule //, Comment::Preproc - rule //, Comment, :pop! - rule /-/, Comment - end - - state :tag do - rule /\s+/m, Text - rule /[\w.:-]+\s*=/m, Name::Attribute, :attr - rule %r(/?\s*>), Name::Tag, :pop! - end - - state :attr do - rule /\s+/m, Text - rule /".*?"|'.*?'|[^\s>]+/, Str, :pop! - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/yaml.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/yaml.rb deleted file mode 100644 index dc14cf9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/lexers/yaml.rb +++ /dev/null @@ -1,364 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Lexers - class YAML < RegexLexer - title "YAML" - desc "Yaml Ain't Markup Language (yaml.org)" - mimetypes 'text/x-yaml' - tag 'yaml' - aliases 'yml' - - def self.analyze_text(text) - # look for the %YAML directive - return 1 if text =~ /\A\s*%YAML/m - end - - filenames '*.yaml', '*.yml' - # NB: Tabs are forbidden in YAML, which is why you see things - # like /[ ]+/. - - # reset the indentation levels - def reset_indent - puts " yaml: reset_indent" if @debug - @indent_stack = [0] - @next_indent = 0 - @block_scalar_indent = nil - end - - def indent - raise 'empty indent stack!' if @indent_stack.empty? - @indent_stack.last - end - - def dedent?(level) - level < self.indent - end - - def indent?(level) - level > self.indent - end - - # Save a possible indentation level - def save_indent(match) - @next_indent = match.size - puts " yaml: indent: #{self.indent}/#@next_indent" if @debug - puts " yaml: popping indent stack - before: #@indent_stack" if @debug - if dedent?(@next_indent) - @indent_stack.pop while dedent?(@next_indent) - puts " yaml: popping indent stack - after: #@indent_stack" if @debug - puts " yaml: indent: #{self.indent}/#@next_indent" if @debug - - # dedenting to a state not previously indented to is an error - [match[0...self.indent], match[self.indent..-1]] - else - [match, ''] - end - end - - def continue_indent(match) - puts " yaml: continue_indent" if @debug - @next_indent += match.size - end - - def set_indent(match, opts={}) - if indent < @next_indent - @indent_stack << @next_indent - end - - @next_indent += match.size unless opts[:implicit] - end - - plain_scalar_start = /[^ \t\n\r\f\v?:,\[\]{}#&*!\|>'"%@`]/ - - start { reset_indent } - - state :basic do - rule /#.*$/, Comment::Single - end - - state :root do - mixin :basic - - rule /\n+/, Text - - # trailing or pre-comment whitespace - rule /[ ]+(?=#|$)/, Text - - rule /^%YAML\b/ do - token Name::Tag - reset_indent - push :yaml_directive - end - - rule /^%TAG\b/ do - token Name::Tag - reset_indent - push :tag_directive - end - - # doc-start and doc-end indicators - rule /^(?:---|\.\.\.)(?= |$)/ do - token Name::Namespace - reset_indent - push :block_line - end - - # indentation spaces - rule /[ ]*(?!\s|$)/ do |m| - text, err = save_indent(m[0]) - token Text, text - token Error, err - push :block_line; push :indentation - end - end - - state :indentation do - rule(/\s*?\n/) { token Text; pop! 2 } - # whitespace preceding block collection indicators - rule /[ ]+(?=[-:?](?:[ ]|$))/ do |m| - token Text - continue_indent(m[0]) - end - - # block collection indicators - rule(/[?:-](?=[ ]|$)/) { |m| token Punctuation::Indicator; set_indent m[0] } - - # the beginning of a block line - rule(/[ ]*/) { |m| token Text; continue_indent(m[0]); pop! } - end - - # indented line in the block context - state :block_line do - # line end - rule /[ ]*(?=#|$)/, Text, :pop! - rule /[ ]+/, Text - # tags, anchors, and aliases - mixin :descriptors - # block collections and scalars - mixin :block_nodes - # flow collections and quoed scalars - mixin :flow_nodes - - # a plain scalar - rule /(?=#{plain_scalar_start}|[?:-][^ \t\n\r\f\v])/ do - token Name::Variable - push :plain_scalar_in_block_context - end - end - - state :descriptors do - # a full-form tag - rule /!<[0-9A-Za-z;\/?:@&=+$,_.!~*'()\[\]%-]+>/, Keyword::Type - - # a tag in the form '!', '!suffix' or '!handle!suffix' - rule %r( - (?:![\w-]+)? # handle - !(?:[\w;/?:@&=+$,.!~*\'()\[\]%-]*) # suffix - )x, Keyword::Type - - # an anchor - rule /&[\w-]+/, Name::Label - - # an alias - rule /\*[\w-]+/, Name::Variable - end - - state :block_nodes do - # implicit key - rule /:(?=\s|$)/ do |m| - token Punctuation::Indicator - set_indent m[0], :implicit => true - end - - # literal and folded scalars - rule /[\|>]/ do - token Punctuation::Indicator - push :block_scalar_content - push :block_scalar_header - end - end - - state :flow_nodes do - rule /\[/, Punctuation::Indicator, :flow_sequence - rule /\{/, Punctuation::Indicator, :flow_mapping - rule /'/, Str::Single, :single_quoted_scalar - rule /"/, Str::Double, :double_quoted_scalar - end - - state :flow_collection do - rule /\s+/m, Text - mixin :basic - rule /[?:,]/, Punctuation::Indicator - mixin :descriptors - mixin :flow_nodes - - rule /(?=#{plain_scalar_start})/ do - push :plain_scalar_in_flow_context - end - end - - state :flow_sequence do - rule /\]/, Punctuation::Indicator, :pop! - mixin :flow_collection - end - - state :flow_mapping do - rule /\}/, Punctuation::Indicator, :pop! - mixin :flow_collection - end - - state :block_scalar_content do - rule /\n+/, Text - - # empty lines never dedent, but they might be part of the scalar. - rule /^[ ]+$/ do |m| - text = m[0] - indent_size = text.size - - indent_mark = @block_scalar_indent || indent_size - - token Text, text[0...indent_mark] - token Name::Constant, text[indent_mark..-1] - end - - # TODO: ^ doesn't actually seem to affect the match at all. - # Find a way to work around this limitation. - rule /^[ ]*/ do |m| - token Text - - indent_size = m[0].size - - dedent_level = @block_scalar_indent || self.indent - @block_scalar_indent ||= indent_size - - if indent_size < dedent_level - pop! 2 - end - end - - rule /[^\n\r\f\v]+/, Name::Constant - end - - state :block_scalar_header do - # optional indentation indicator and chomping flag, in either order - rule %r( - ( - ([1-9])[+-]? | [+-]?([1-9])? - )(?=[ ]|$) - )x do |m| - @block_scalar_indent = nil - goto :ignored_line - next if m[0].empty? - - increment = m[1] || m[2] - if increment - @block_scalar_indent = indent + increment.to_i - end - - token Punctuation::Indicator - end - end - - state :ignored_line do - mixin :basic - rule /[ ]+/, Text - rule /\n/, Text, :pop! - end - - state :quoted_scalar_whitespaces do - # leading and trailing whitespace is ignored - rule /^[ ]+/, Text - rule /[ ]+$/, Text - - rule /\n+/m, Text - - rule /[ ]+/, Name::Variable - end - - state :single_quoted_scalar do - mixin :quoted_scalar_whitespaces - rule /\\'/, Str::Escape - rule /'/, Str, :pop! - rule /[^\s']+/, Str - end - - state :double_quoted_scalar do - rule /"/, Str, :pop! - mixin :quoted_scalar_whitespaces - # escapes - rule /\\[0abt\tn\nvfre "\\N_LP]/, Str::Escape - rule /\\(?:x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/, - Str::Escape - rule /[^ \t\n\r\f\v"\\]+/, Str - end - - state :plain_scalar_in_block_context_new_line do - rule /^[ ]+\n/, Text - rule /\n+/m, Text - rule /^(?=---|\.\.\.)/ do - pop! 3 - end - - # dedent detection - rule /^[ ]*/ do |m| - token Text - pop! - - indent_size = m[0].size - - # dedent = end of scalar - if indent_size <= self.indent - pop! - save_indent(m[0]) - push :indentation - end - end - end - - state :plain_scalar_in_block_context do - # the : indicator ends a scalar - rule /[ ]*(?=:[ \n]|:$)/, Text, :pop! - rule /[ ]*:/, Str - rule /[ ]+(?=#)/, Text, :pop! - rule /[ ]+$/, Text - # check for new documents or dedents at the new line - rule /\n+/ do - token Text - push :plain_scalar_in_block_context_new_line - end - - rule /[ ]+/, Str - # regular non-whitespace characters - rule /[^\s:]+/, Str - end - - state :plain_scalar_in_flow_context do - rule /[ ]*(?=[,:?\[\]{}])/, Text, :pop! - rule /[ ]+(?=#)/, Text, :pop! - rule /^[ ]+/, Text - rule /[ ]+$/, Text - rule /\n+/, Text - rule /[ ]+/, Name::Variable - rule /[^\s,:?\[\]{}]+/, Name::Variable - end - - state :yaml_directive do - rule /([ ]+)(\d+\.\d+)/ do - groups Text, Num - goto :ignored_line - end - end - - state :tag_directive do - rule %r( - ([ ]+)(!|![\w-]*!) # prefix - ([ ]+)(!|!?[\w;/?:@&=+$,.!~*'()\[\]%-]+) # tag handle - )x do - groups Text, Keyword::Type, Text, Keyword::Type - goto :ignored_line - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/plugins/redcarpet.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/plugins/redcarpet.rb deleted file mode 100644 index f27511b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/plugins/redcarpet.rb +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- # - -# this file is not require'd from the root. To use this plugin, run: -# -# require 'rouge/plugins/redcarpet' - -module Rouge - module Plugins - module Redcarpet - def block_code(code, language) - lexer = Lexer.find_fancy(language, code) || Lexers::PlainText - - # XXX HACK: Redcarpet strips hard tabs out of code blocks, - # so we assume you're not using leading spaces that aren't tabs, - # and just replace them here. - if lexer.tag == 'make' - code.gsub! /^ /, "\t" - end - - formatter = rouge_formatter(lexer) - formatter.format(lexer.lex(code)) - end - - # override this method for custom formatting behavior - def rouge_formatter(lexer) - Formatters::HTML.new(:css_class => "highlight #{lexer.tag}") - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/regex_lexer.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/regex_lexer.rb deleted file mode 100644 index 3b9022e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/regex_lexer.rb +++ /dev/null @@ -1,439 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - # @abstract - # A stateful lexer that uses sets of regular expressions to - # tokenize a string. Most lexers are instances of RegexLexer. - class RegexLexer < Lexer - # A rule is a tuple of a regular expression to test, and a callback - # to perform if the test succeeds. - # - # @see StateDSL#rule - class Rule - attr_reader :callback - attr_reader :re - attr_reader :beginning_of_line - def initialize(re, callback) - @re = re - @callback = callback - @beginning_of_line = re.source[0] == ?^ - end - - def inspect - "#" - end - end - - # a State is a named set of rules that can be tested for or - # mixed in. - # - # @see RegexLexer.state - class State - attr_reader :name, :rules - def initialize(name, rules) - @name = name - @rules = rules - end - - def inspect - "#<#{self.class.name} #{@name.inspect}>" - end - end - - class StateDSL - attr_reader :rules - def initialize(name, &defn) - @name = name - @defn = defn - @rules = [] - end - - def to_state(lexer_class) - load! - rules = @rules.map do |rule| - rule.is_a?(String) ? lexer_class.get_state(rule) : rule - end - State.new(@name, rules) - end - - def prepended(&defn) - parent_defn = @defn - StateDSL.new(@name) do - instance_eval(&defn) - instance_eval(&parent_defn) - end - end - - def appended(&defn) - parent_defn = @defn - StateDSL.new(@name) do - instance_eval(&parent_defn) - instance_eval(&defn) - end - end - - protected - # Define a new rule for this state. - # - # @overload rule(re, token, next_state=nil) - # @overload rule(re, &callback) - # - # @param [Regexp] re - # a regular expression for this rule to test. - # @param [String] tok - # the token type to yield if `re` matches. - # @param [#to_s] next_state - # (optional) a state to push onto the stack if `re` matches. - # If `next_state` is `:pop!`, the state stack will be popped - # instead. - # @param [Proc] callback - # a block that will be evaluated in the context of the lexer - # if `re` matches. This block has access to a number of lexer - # methods, including {RegexLexer#push}, {RegexLexer#pop!}, - # {RegexLexer#token}, and {RegexLexer#delegate}. The first - # argument can be used to access the match groups. - def rule(re, tok=nil, next_state=nil, &callback) - if tok.nil? && callback.nil? - raise "please pass `rule` a token to yield or a callback" - end - - callback ||= case next_state - when :pop! - proc do |stream| - puts " yielding #{tok.qualname}, #{stream[0].inspect}" if @debug - @output_stream.call(tok, stream[0]) - puts " popping stack: #{1}" if @debug - @stack.pop or raise 'empty stack!' - end - when :push - proc do |stream| - puts " yielding #{tok.qualname}, #{stream[0].inspect}" if @debug - @output_stream.call(tok, stream[0]) - puts " pushing #{@stack.last.name}" if @debug - @stack.push(@stack.last) - end - when Symbol - proc do |stream| - puts " yielding #{tok.qualname}, #{stream[0].inspect}" if @debug - @output_stream.call(tok, stream[0]) - state = @states[next_state] || self.class.get_state(next_state) - puts " pushing #{state.name}" if @debug - @stack.push(state) - end - when nil - proc do |stream| - puts " yielding #{tok.qualname}, #{stream[0].inspect}" if @debug - @output_stream.call(tok, stream[0]) - end - else - raise "invalid next state: #{next_state.inspect}" - end - - rules << Rule.new(re, callback) - end - - # Mix in the rules from another state into this state. The rules - # from the mixed-in state will be tried in order before moving on - # to the rest of the rules in this state. - def mixin(state) - rules << state.to_s - end - - private - def load! - return if @loaded - @loaded = true - instance_eval(&@defn) - end - end - - # The states hash for this lexer. - # @see state - def self.states - @states ||= {} - end - - def self.state_definitions - @state_definitions ||= InheritableHash.new(superclass.state_definitions) - end - @state_definitions = {} - - def self.replace_state(name, new_defn) - states[name] = nil - state_definitions[name] = new_defn - end - - # The routines to run at the beginning of a fresh lex. - # @see start - def self.start_procs - @start_procs ||= InheritableList.new(superclass.start_procs) - end - @start_procs = [] - - # Specify an action to be run every fresh lex. - # - # @example - # start { puts "I'm lexing a new string!" } - def self.start(&b) - start_procs << b - end - - # Define a new state for this lexer with the given name. - # The block will be evaluated in the context of a {StateDSL}. - def self.state(name, &b) - name = name.to_s - state_definitions[name] = StateDSL.new(name, &b) - end - - def self.prepend(name, &b) - name = name.to_s - dsl = state_definitions[name] or raise "no such state #{name.inspect}" - replace_state(name, dsl.prepended(&b)) - end - - def self.append(state, &b) - name = name.to_s - dsl = state_definitions[name] or raise "no such state #{name.inspect}" - replace_state(name, dsl.appended(&b)) - end - - # @private - def self.get_state(name) - return name if name.is_a? State - - states[name.to_sym] ||= begin - defn = state_definitions[name.to_s] or raise "unknown state: #{name.inspect}" - defn.to_state(self) - end - end - - # @private - def get_state(state_name) - self.class.get_state(state_name) - end - - # The state stack. This is initially the single state `[:root]`. - # It is an error for this stack to be empty. - # @see #state - def stack - @stack ||= [get_state(:root)] - end - - # The current state - i.e. one on top of the state stack. - # - # NB: if the state stack is empty, this will throw an error rather - # than returning nil. - def state - stack.last or raise 'empty stack!' - end - - # reset this lexer to its initial state. This runs all of the - # start_procs. - def reset! - @stack = nil - @current_stream = nil - - self.class.start_procs.each do |pr| - instance_eval(&pr) - end - end - - # This implements the lexer protocol, by yielding [token, value] pairs. - # - # The process for lexing works as follows, until the stream is empty: - # - # 1. We look at the state on top of the stack (which by default is - # `[:root]`). - # 2. Each rule in that state is tried until one is successful. If one - # is found, that rule's callback is evaluated - which may yield - # tokens and manipulate the state stack. Otherwise, one character - # is consumed with an `'Error'` token, and we continue at (1.) - # - # @see #step #step (where (2.) is implemented) - def stream_tokens(str, &b) - stream = StringScanner.new(str) - - @current_stream = stream - @output_stream = b - @states = self.class.states - @null_steps = 0 - - until stream.eos? - if @debug - puts "lexer: #{self.class.tag}" - puts "stack: #{stack.map(&:name).inspect}" - puts "stream: #{stream.peek(20).inspect}" - end - - success = step(state, stream) - - if !success - puts " no match, yielding Error" if @debug - b.call(Token::Tokens::Error, stream.getch) - end - end - end - - # The number of successive scans permitted without consuming - # the input stream. If this is exceeded, the match fails. - MAX_NULL_SCANS = 5 - - # Runs one step of the lex. Rules in the current state are tried - # until one matches, at which point its callback is called. - # - # @return true if a rule was tried successfully - # @return false otherwise. - def step(state, stream) - state.rules.each do |rule| - if rule.is_a?(State) - puts " entering mixin #{rule.name}" if @debug - return true if step(rule, stream) - puts " exiting mixin #{rule.name}" if @debug - else - puts " trying #{rule.inspect}" if @debug - - # XXX HACK XXX - # StringScanner's implementation of ^ is b0rken. - # see http://bugs.ruby-lang.org/issues/7092 - # TODO: this doesn't cover cases like /(a|^b)/, but it's - # the most common, for now... - next if rule.beginning_of_line && !stream.beginning_of_line? - - if size = stream.skip(rule.re) - puts " got #{stream[0].inspect}" if @debug - - instance_exec(stream, &rule.callback) - - if size.zero? - @null_steps += 1 - if @null_steps > MAX_NULL_SCANS - puts " too many scans without consuming the string!" if @debug - return false - end - else - @null_steps = 0 - end - - return true - end - end - end - - false - end - - # Yield a token. - # - # @param tok - # the token type - # @param val - # (optional) the string value to yield. If absent, this defaults - # to the entire last match. - def token(tok, val=@current_stream[0]) - yield_token(tok, val) - end - - # @deprecated - # - # Yield a token with the next matched group. Subsequent calls - # to this method will yield subsequent groups. - def group(tok) - raise "RegexLexer#group is deprecated: use #groups instead" - end - - # Yield tokens corresponding to the matched groups of the current - # match. - def groups(*tokens) - tokens.each_with_index do |tok, i| - yield_token(tok, @current_stream[i+1]) - end - end - - # Delegate the lex to another lexer. The #lex method will be called - # with `:continue` set to true, so that #reset! will not be called. - # In this way, a single lexer can be repeatedly delegated to while - # maintaining its own internal state stack. - # - # @param [#lex] lexer - # The lexer or lexer class to delegate to - # @param [String] text - # The text to delegate. This defaults to the last matched string. - def delegate(lexer, text=nil) - puts " delegating to #{lexer.inspect}" if @debug - text ||= @current_stream[0] - - lexer.lex(text, :continue => true) do |tok, val| - puts " delegated token: #{tok.inspect}, #{val.inspect}" if @debug - yield_token(tok, val) - end - end - - def recurse(text=nil) - delegate(self.class, text) - end - - # Push a state onto the stack. If no state name is given and you've - # passed a block, a state will be dynamically created using the - # {StateDSL}. - def push(state_name=nil, &b) - push_state = if state_name - get_state(state_name) - elsif block_given? - StateDSL.new(b.inspect, &b).to_state(self.class) - else - # use the top of the stack by default - self.state - end - - puts " pushing #{push_state.name}" if @debug - stack.push(push_state) - end - - # Pop the state stack. If a number is passed in, it will be popped - # that number of times. - def pop!(times=1) - raise 'empty stack!' if stack.empty? - - puts " popping stack: #{times}" if @debug - - stack.pop(times) - - nil - end - - # replace the head of the stack with the given state - def goto(state_name) - raise 'empty stack!' if stack.empty? - - puts " going to state #{state_name} " if @debug - stack[-1] = get_state(state_name) - end - - # reset the stack back to `[:root]`. - def reset_stack - puts ' resetting stack' if @debug - stack.clear - stack.push get_state(:root) - end - - # Check if `state_name` is in the state stack. - def in_state?(state_name) - state_name = state_name.to_s - stack.any? do |state| - state.name == state_name.to_s - end - end - - # Check if `state_name` is the state on top of the state stack. - def state?(state_name) - state_name.to_s == state.name - end - - private - def yield_token(tok, val) - return if val.nil? || val.empty? - puts " yielding #{tok.qualname}, #{val.inspect}" if @debug - @output_stream.yield(tok, val) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/template_lexer.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/template_lexer.rb deleted file mode 100644 index 11f69fc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/template_lexer.rb +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - # @abstract - # A TemplateLexer is one that accepts a :parent option, to specify - # which language is being templated. The lexer class can specify its - # own default for the parent lexer, which is otherwise defaulted to - # HTML. - class TemplateLexer < RegexLexer - # the parent lexer - the one being templated. - def parent - return @parent if instance_variable_defined? :@parent - @parent = option(:parent) || 'html' - if @parent.is_a? ::String - lexer_class = Lexer.find(@parent) - @parent = lexer_class.new(self.options) - end - end - - start { parent.reset! } - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/text_analyzer.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/text_analyzer.rb deleted file mode 100644 index f4434d3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/text_analyzer.rb +++ /dev/null @@ -1,48 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - class TextAnalyzer < String - # Find a shebang. Returns nil if no shebang is present. - def shebang - return @shebang if instance_variable_defined? :@shebang - - self =~ /\A\s*#!(.*)$/ - @shebang = $1 - end - - # Check if the given shebang is present. - # - # This normalizes things so that `text.shebang?('bash')` will detect - # `#!/bash`, '#!/bin/bash', '#!/usr/bin/env bash', and '#!/bin/bash -x' - def shebang?(match) - match = /\b#{match}(\s|$)/ - match === shebang - end - - # Return the contents of the doctype tag if present, nil otherwise. - def doctype - return @doctype if instance_variable_defined? :@doctype - - self =~ %r(\A\s* - (?:<\?.*?\?>\s*)? # possible tag - - )xm - @doctype = $1 - end - - # Check if the doctype matches a given regexp or string - def doctype?(type=//) - type === doctype - end - - # Return true if the result of lexing with the given lexer contains no - # error tokens. - def lexes_cleanly?(lexer) - lexer.lex(self) do |(tok, _)| - return false if tok.name == 'Error' - end - - true - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/theme.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/theme.rb deleted file mode 100644 index 3015b0a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/theme.rb +++ /dev/null @@ -1,195 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - class Theme - include Token::Tokens - - class Style < Hash - def initialize(theme, hsh={}) - super() - @theme = theme - merge!(hsh) - end - - [:fg, :bg].each do |mode| - define_method mode do - return self[mode] unless @theme - @theme.palette(self[mode]) if self[mode] - end - end - - def render(selector, &b) - return enum_for(:render, selector).to_a.join("\n") unless b - - return if empty? - - yield "#{selector} {" - rendered_rules.each do |rule| - yield " #{rule};" - end - yield "}" - end - - def rendered_rules(&b) - return enum_for(:rendered_rules) unless b - yield "color: #{fg}" if fg - yield "background-color: #{bg}" if bg - yield "font-weight: bold" if self[:bold] - yield "font-style: italic" if self[:italic] - yield "text-decoration: underline" if self[:underline] - - (self[:rules] || []).each(&b) - end - end - - def styles - @styles ||= self.class.styles.dup - end - - @palette = {} - def self.palette(arg={}) - @palette ||= InheritableHash.new(superclass.palette) - - if arg.is_a? Hash - @palette.merge! arg - @palette - else - case arg - when /#[0-9a-f]+/i - arg - else - @palette[arg] or raise "not in palette: #{arg.inspect}" - end - end - end - - @styles = {} - def self.styles - @styles ||= InheritableHash.new(superclass.styles) - end - - def self.render(opts={}, &b) - new(opts).render(&b) - end - - class << self - def style(*tokens) - style = tokens.last.is_a?(Hash) ? tokens.pop : {} - - style = Style.new(self, style) - - tokens.each do |tok| - styles[tok] = style - end - end - - def get_own_style(token) - token.token_chain.each do |anc| - return styles[anc] if styles[anc] - end - - nil - end - - def get_style(token) - get_own_style(token) || base_style - end - - def base_style - styles[Token::Tokens::Text] - end - - def name(n=nil) - return @name if n.nil? - - @name = n.to_s - Theme.registry[@name] = self - end - - def find(n) - registry[n.to_s] - end - - def registry - @registry ||= {} - end - end - end - - module HasModes - def mode(arg=:absent) - return @mode if arg == :absent - - @modes ||= {} - @modes[arg] ||= get_mode(arg) - end - - def get_mode(mode) - return self if self.mode == mode - - new_name = "#{self.name}.#{mode}" - Class.new(self) { name(new_name); mode!(mode) } - end - - def mode!(arg) - @mode = arg - send("make_#{arg}!") - end - end - - class CSSTheme < Theme - def initialize(opts={}) - @scope = opts[:scope] || '.highlight' - end - - def render(&b) - return enum_for(:render).to_a.join("\n") unless b - - # shared styles for tableized line numbers - yield "#{@scope} table td { padding: 5px; }" - yield "#{@scope} table pre { margin: 0; }" - - styles.each do |tok, style| - style.render(css_selector(tok), &b) - end - end - - def render_base(selector, &b) - self.class.base_style.render(selector, &b) - end - - def style_for(tok) - self.class.get_style(tok) - end - - private - def css_selector(token) - inflate_token(token).map do |tok| - raise "unknown token: #{tok.inspect}" if tok.shortname.nil? - - single_css_selector(tok) - end.join(', ') - end - - def single_css_selector(token) - return @scope if token == Text - - "#{@scope} .#{token.shortname}" - end - - # yield all of the tokens that should be styled the same - # as the given token. Essentially this recursively all of - # the subtokens, except those which are more specifically - # styled. - def inflate_token(tok, &b) - return enum_for(:inflate_token, tok) unless block_given? - - yield tok - tok.sub_tokens.each do |(_, st)| - next if styles[st] - - inflate_token(st, &b) - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/base16.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/base16.rb deleted file mode 100644 index 9fea1c8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/base16.rb +++ /dev/null @@ -1,130 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Themes - # default base16 theme - # by Chris Kempson (http://chriskempson.com) - class Base16 < CSSTheme - name 'base16' - - palette base00: "#151515" - palette base01: "#202020" - palette base02: "#303030" - palette base03: "#505050" - palette base04: "#b0b0b0" - palette base05: "#d0d0d0" - palette base06: "#e0e0e0" - palette base07: "#f5f5f5" - palette base08: "#ac4142" - palette base09: "#d28445" - palette base0A: "#f4bf75" - palette base0B: "#90a959" - palette base0C: "#75b5aa" - palette base0D: "#6a9fb5" - palette base0E: "#aa759f" - palette base0F: "#8f5536" - - extend HasModes - - def self.light! - mode :dark # indicate that there is a dark variant - mode! :light - end - - def self.dark! - mode :light # indicate that there is a light variant - mode! :dark - end - - def self.make_dark! - style Text, :fg => :base05, :bg => :base00 - end - - def self.make_light! - style Text, :fg => :base02 - end - - light! - - style Error, :fg => :base00, :bg => :base08 - style Comment, :fg => :base03 - - style Comment::Preproc, - Name::Tag, :fg => :base0A - - style Operator, - Punctuation, :fg => :base05 - - style Generic::Inserted, :fg => :base0B - style Generic::Deleted, :fg => :base08 - style Generic::Heading, :fg => :base0D, :bg => :base00, :bold => true - - style Keyword, :fg => :base0E - style Keyword::Constant, - Keyword::Type, :fg => :base09 - - style Keyword::Declaration, :fg => :base09 - - style Literal::String, :fg => :base0B - style Literal::String::Regex, :fg => :base0C - - style Literal::String::Interpol, - Literal::String::Escape, :fg => :base0F - - style Name::Namespace, - Name::Class, - Name::Constant, :fg => :base0A - - style Name::Attribute, :fg => :base0D - - style Literal::Number, - Literal::String::Symbol, :fg => :base0B - - class Solarized < Base16 - name 'base16.solarized' - light! - # author "Ethan Schoonover (http://ethanschoonover.com/solarized)" - - palette base00: "#002b36" - palette base01: "#073642" - palette base02: "#586e75" - palette base03: "#657b83" - palette base04: "#839496" - palette base05: "#93a1a1" - palette base06: "#eee8d5" - palette base07: "#fdf6e3" - palette base08: "#dc322f" - palette base09: "#cb4b16" - palette base0A: "#b58900" - palette base0B: "#859900" - palette base0C: "#2aa198" - palette base0D: "#268bd2" - palette base0E: "#6c71c4" - palette base0F: "#d33682" - end - - class Monokai < Base16 - name 'base16.monokai' - dark! - - # author "Wimer Hazenberg (http://www.monokai.nl)" - palette base00: "#272822" - palette base01: "#383830" - palette base02: "#49483e" - palette base03: "#75715e" - palette base04: "#a59f85" - palette base05: "#f8f8f2" - palette base06: "#f5f4f1" - palette base07: "#f9f8f5" - palette base08: "#f92672" - palette base09: "#fd971f" - palette base0A: "#f4bf75" - palette base0B: "#a6e22e" - palette base0C: "#a1efe4" - palette base0D: "#66d9ef" - palette base0E: "#ae81ff" - palette base0F: "#cc6633" - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/colorful.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/colorful.rb deleted file mode 100644 index b108fe6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/colorful.rb +++ /dev/null @@ -1,67 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Themes - # stolen from pygments - class Colorful < CSSTheme - name 'colorful' - - style Text, :fg => "#bbbbbb", :bg => '#000' - - style Comment, :fg => "#888" - style Comment::Preproc, :fg => "#579" - style Comment::Special, :fg => "#cc0000", :bold => true - - style Keyword, :fg => "#080", :bold => true - style Keyword::Pseudo, :fg => "#038" - style Keyword::Type, :fg => "#339" - - style Operator, :fg => "#333" - style Operator::Word, :fg => "#000", :bold => true - - style Name::Builtin, :fg => "#007020" - style Name::Function, :fg => "#06B", :bold => true - style Name::Class, :fg => "#B06", :bold => true - style Name::Namespace, :fg => "#0e84b5", :bold => true - style Name::Exception, :fg => "#F00", :bold => true - style Name::Variable, :fg => "#963" - style Name::Variable::Instance, :fg => "#33B" - style Name::Variable::Class, :fg => "#369" - style Name::Variable::Global, :fg => "#d70", :bold => true - style Name::Constant, :fg => "#036", :bold => true - style Name::Label, :fg => "#970", :bold => true - style Name::Entity, :fg => "#800", :bold => true - style Name::Attribute, :fg => "#00C" - style Name::Tag, :fg => "#070" - style Name::Decorator, :fg => "#555", :bold => true - - style Literal::String, :bg => "#fff0f0" - style Literal::String::Char, :fg => "#04D" - style Literal::String::Doc, :fg => "#D42" - style Literal::String::Interpol, :bg => "#eee" - style Literal::String::Escape, :fg => "#666", :bold => true - style Literal::String::Regex, :fg => "#000", :bg => "#fff0ff" - style Literal::String::Symbol, :fg => "#A60" - style Literal::String::Other, :fg => "#D20" - - style Literal::Number, :fg => "#60E", :bold => true - style Literal::Number::Integer, :fg => "#00D", :bold => true - style Literal::Number::Float, :fg => "#60E", :bold => true - style Literal::Number::Hex, :fg => "#058", :bold => true - style Literal::Number::Oct, :fg => "#40E", :bold => true - - style Generic::Heading, :fg => "#000080", :bold => true - style Generic::Subheading, :fg => "#800080", :bold => true - style Generic::Deleted, :fg => "#A00000" - style Generic::Inserted, :fg => "#00A000" - style Generic::Error, :fg => "#FF0000" - style Generic::Emph, :italic => true - style Generic::Strong, :bold => true - style Generic::Prompt, :fg => "#c65d09", :bold => true - style Generic::Output, :fg => "#888" - style Generic::Traceback, :fg => "#04D" - - style Error, :fg => "#F00", :bg => "#FAA" - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/github.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/github.rb deleted file mode 100644 index bc875a8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/github.rb +++ /dev/null @@ -1,71 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Themes - class Github < CSSTheme - name 'github' - - style Comment::Multiline, :fg => '#999988', :italic => true - style Comment::Preproc, :fg => '#999999', :bold => true - style Comment::Single, :fg => '#999988', :italic => true - style Comment::Special, :fg => '#999999', :italic => true, :bold => true - style Comment, :fg => '#999988', :italic => true - style Error, :fg => '#a61717', :bg => '#e3d2d2' - style Generic::Deleted, :fg => '#000000', :bg => '#ffdddd' - style Generic::Emph, :fg => '#000000', :italic => true - style Generic::Error, :fg => '#aa0000' - style Generic::Heading, :fg => '#999999' - style Generic::Inserted, :fg => '#000000', :bg => '#ddffdd' - style Generic::Output, :fg => '#888888' - style Generic::Prompt, :fg => '#555555' - style Generic::Strong, :bold => true - style Generic::Subheading, :fg => '#aaaaaa' - style Generic::Traceback, :fg => '#aa0000' - style Keyword::Constant, :fg => '#000000', :bold => true - style Keyword::Declaration, :fg => '#000000', :bold => true - style Keyword::Namespace, :fg => '#000000', :bold => true - style Keyword::Pseudo, :fg => '#000000', :bold => true - style Keyword::Reserved, :fg => '#000000', :bold => true - style Keyword::Type, :fg => '#445588', :bold => true - style Keyword, :fg => '#000000', :bold => true - style Literal::Number::Float, :fg => '#009999' - style Literal::Number::Hex, :fg => '#009999' - style Literal::Number::Integer::Long, :fg => '#009999' - style Literal::Number::Integer, :fg => '#009999' - style Literal::Number::Oct, :fg => '#009999' - style Literal::Number, :fg => '#009999' - style Literal::String::Backtick, :fg => '#d14' - style Literal::String::Char, :fg => '#d14' - style Literal::String::Doc, :fg => '#d14' - style Literal::String::Double, :fg => '#d14' - style Literal::String::Escape, :fg => '#d14' - style Literal::String::Heredoc, :fg => '#d14' - style Literal::String::Interpol, :fg => '#d14' - style Literal::String::Other, :fg => '#d14' - style Literal::String::Regex, :fg => '#009926' - style Literal::String::Single, :fg => '#d14' - style Literal::String::Symbol, :fg => '#990073' - style Literal::String, :fg => '#d14' - style Name::Attribute, :fg => '#008080' - style Name::Builtin::Pseudo, :fg => '#999999' - style Name::Builtin, :fg => '#0086B3' - style Name::Class, :fg => '#445588', :bold => true - style Name::Constant, :fg => '#008080' - style Name::Decorator, :fg => '#3c5d5d', :bold => true - style Name::Entity, :fg => '#800080' - style Name::Exception, :fg => '#990000', :bold => true - style Name::Function, :fg => '#990000', :bold => true - style Name::Label, :fg => '#990000', :bold => true - style Name::Namespace, :fg => '#555555' - style Name::Tag, :fg => '#000080' - style Name::Variable::Class, :fg => '#008080' - style Name::Variable::Global, :fg => '#008080' - style Name::Variable::Instance, :fg => '#008080' - style Name::Variable, :fg => '#008080' - style Operator::Word, :fg => '#000000', :bold => true - style Operator, :fg => '#000000', :bold => true - style Text::Whitespace, :fg => '#bbbbbb' - style Text, :bg => '#f8f8f8' - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/molokai.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/molokai.rb deleted file mode 100644 index 6f14aa7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/molokai.rb +++ /dev/null @@ -1,82 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Themes - class Molokai < CSSTheme - name 'molokai' - - palette :black => '#1b1d1e' - palette :white => '#f8f8f2' - palette :blue => '#66d9ef' - palette :green => '#a6e22e' - palette :grey => '#403d3d' - palette :red => '#f92672' - palette :light_grey => '#465457' - palette :dark_blue => '#5e5d83' - palette :violet => '#af87ff' - palette :yellow => '#d7d787' - - style Comment, - Comment::Multiline, - Comment::Single, :fg => :dark_blue, :italic => true - style Comment::Preproc, :fg => :light_grey, :bold => true - style Comment::Special, :fg => :light_grey, :italic => true, :bold => true - style Error, :fg => :white, :bg => :grey - style Generic::Inserted, :fg => :green - style Generic::Deleted, :fg => :red - style Generic::Emph, :fg => :black, :italic => true - style Generic::Error, - Generic::Traceback, :fg => :red - style Generic::Heading, :fg => :grey - style Generic::Output, :fg => :grey - style Generic::Prompt, :fg => :blue - style Generic::Strong, :bold => true - style Generic::Subheading, :fg => :light_grey - style Keyword, - Keyword::Constant, - Keyword::Declaration, - Keyword::Pseudo, - Keyword::Reserved, - Keyword::Type, :fg => :blue, :bold => true - style Keyword::Namespace, - Operator::Word, - Operator, :fg => :red, :bold => true - style Literal::Number::Float, - Literal::Number::Hex, - Literal::Number::Integer::Long, - Literal::Number::Integer, - Literal::Number::Oct, - Literal::Number, - Literal::String::Escape, :fg => :violet - style Literal::String::Backtick, - Literal::String::Char, - Literal::String::Doc, - Literal::String::Double, - Literal::String::Heredoc, - Literal::String::Interpol, - Literal::String::Other, - Literal::String::Regex, - Literal::String::Single, - Literal::String::Symbol, - Literal::String, :fg => :yellow - style Name::Attribute, :fg => :green - style Name::Class, - Name::Decorator, - Name::Exception, - Name::Function, :fg => :green, :bold => true - style Name::Constant, :fg => :blue - style Name::Builtin::Pseudo, - Name::Builtin, - Name::Entity, - Name::Namespace, - Name::Variable::Class, - Name::Variable::Global, - Name::Variable::Instance, - Name::Variable, - Text::Whitespace, :fg => :white - style Name::Label, :fg => :white, :bold => true - style Name::Tag, :fg => :red - style Text, :fg => :white, :bg => :black - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/monokai.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/monokai.rb deleted file mode 100644 index 3273f7d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/monokai.rb +++ /dev/null @@ -1,92 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Themes - class Monokai < CSSTheme - name 'monokai' - - palette :black => '#000000' - palette :bright_green => '#a6e22e' - palette :bright_pink => '#f92672' - palette :carmine => '#960050' - palette :dark => '#49483e' - palette :dark_grey => '#888888' - palette :dark_red => '#aa0000' - palette :dimgrey => '#75715e' - palette :dimgreen => '#324932' - palette :dimred => '#493131' - palette :emperor => '#555555' - palette :grey => '#999999' - palette :light_grey => '#aaaaaa' - palette :light_violet => '#ae81ff' - palette :soft_cyan => '#66d9ef' - palette :soft_yellow => '#e6db74' - palette :very_dark => '#1e0010' - palette :whitish => '#f8f8f2' - palette :orange => '#f6aa11' - palette :white => '#ffffff' - - style Comment, - Comment::Multiline, - Comment::Single, :fg => :dimgrey, :italic => true - style Comment::Preproc, :fg => :dimgrey, :bold => true - style Comment::Special, :fg => :dimgrey, :italic => true, :bold => true - style Error, :fg => :carmine, :bg => :very_dark - style Generic::Inserted, :fg => :white, :bg => :dimgreen - style Generic::Deleted, :fg => :white, :bg => :dimred - style Generic::Emph, :fg => :black, :italic => true - style Generic::Error, - Generic::Traceback, :fg => :dark_red - style Generic::Heading, :fg => :grey - style Generic::Output, :fg => :dark_grey - style Generic::Prompt, :fg => :emperor - style Generic::Strong, :bold => true - style Generic::Subheading, :fg => :light_grey - style Keyword, - Keyword::Constant, - Keyword::Declaration, - Keyword::Pseudo, - Keyword::Reserved, - Keyword::Type, :fg => :soft_cyan, :bold => true - style Keyword::Namespace, - Operator::Word, - Operator, :fg => :bright_pink, :bold => true - style Literal::Number::Float, - Literal::Number::Hex, - Literal::Number::Integer::Long, - Literal::Number::Integer, - Literal::Number::Oct, - Literal::Number, - Literal::String::Escape, :fg => :light_violet - style Literal::String::Backtick, - Literal::String::Char, - Literal::String::Doc, - Literal::String::Double, - Literal::String::Heredoc, - Literal::String::Interpol, - Literal::String::Other, - Literal::String::Regex, - Literal::String::Single, - Literal::String::Symbol, - Literal::String, :fg => :soft_yellow - style Name::Attribute, :fg => :bright_green - style Name::Class, - Name::Decorator, - Name::Exception, - Name::Function, :fg => :bright_green, :bold => true - style Name::Constant, :fg => :soft_cyan - style Name::Builtin::Pseudo, - Name::Builtin, - Name::Entity, - Name::Namespace, - Name::Variable::Class, - Name::Variable::Global, - Name::Variable::Instance, - Name::Variable, - Text::Whitespace, :fg => :whitish - style Name::Label, :fg => :whitish, :bold => true - style Name::Tag, :fg => :bright_pink - style Text, :fg => :whitish, :bg => :dark - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/monokai_sublime.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/monokai_sublime.rb deleted file mode 100644 index 5c700e7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/monokai_sublime.rb +++ /dev/null @@ -1,90 +0,0 @@ -# -*- coding: utf-8 -*- # -module Rouge - module Themes - class MonokaiSublime < CSSTheme - name 'monokai.sublime' - - palette :black => '#000000' - palette :bright_green => '#a6e22e' - palette :bright_pink => '#f92672' - palette :carmine => '#960050' - palette :dark => '#49483e' - palette :dark_grey => '#888888' - palette :dark_red => '#aa0000' - palette :dimgrey => '#75715e' - palette :emperor => '#555555' - palette :grey => '#999999' - palette :light_grey => '#aaaaaa' - palette :light_violet => '#ae81ff' - palette :soft_cyan => '#66d9ef' - palette :soft_yellow => '#e6db74' - palette :very_dark => '#1e0010' - palette :whitish => '#f8f8f2' - palette :orange => '#f6aa11' - palette :white => '#ffffff' - - style Generic::Heading, :fg => :grey - style Literal::String::Regex, :fg => :orange - style Generic::Output, :fg => :dark_grey - style Generic::Prompt, :fg => :emperor - style Generic::Strong, :bold => false - style Generic::Subheading, :fg => :light_grey - style Name::Builtin, :fg => :orange - style Comment::Multiline, - Comment::Preproc, - Comment::Single, - Comment::Special, - Comment, :fg => :dimgrey - style Error, - Generic::Error, - Generic::Traceback, :fg => :carmine - style Generic::Deleted, - Generic::Inserted, - Generic::Emph, :fg => :dark - style Keyword::Constant, - Keyword::Declaration, - Keyword::Reserved, - Name::Constant, - Keyword::Type, :fg => :soft_cyan - style Literal::Number::Float, - Literal::Number::Hex, - Literal::Number::Integer::Long, - Literal::Number::Integer, - Literal::Number::Oct, - Literal::Number, - Literal::String::Char, - Literal::String::Escape, - Literal::String::Symbol, :fg => :light_violet - style Literal::String::Doc, - Literal::String::Double, - Literal::String::Backtick, - Literal::String::Heredoc, - Literal::String::Interpol, - Literal::String::Other, - Literal::String::Single, - Literal::String, :fg => :soft_yellow - style Name::Attribute, - Name::Class, - Name::Decorator, - Name::Exception, - Name::Function, :fg => :bright_green - style Name::Variable::Class, - Name::Namespace, - Name::Label, - Name::Entity, - Name::Builtin::Pseudo, - Name::Variable::Global, - Name::Variable::Instance, - Name::Variable, - Text::Whitespace, - Text, - Name, :fg => :white - style Operator::Word, - Name::Tag, - Keyword, - Keyword::Namespace, - Keyword::Pseudo, - Operator, :fg => :bright_pink - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/thankful_eyes.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/thankful_eyes.rb deleted file mode 100644 index d041b38..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/themes/thankful_eyes.rb +++ /dev/null @@ -1,71 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - module Themes - class ThankfulEyes < CSSTheme - name 'thankful_eyes' - - # pallette, from GTKSourceView's ThankfulEyes - palette :cool_as_ice => '#6c8b9f' - palette :slate_blue => '#4e5d62' - palette :eggshell_cloud => '#dee5e7' - palette :krasna => '#122b3b' - palette :aluminum1 => '#fefeec' - palette :scarletred2 => '#cc0000' - palette :butter3 => '#c4a000' - palette :go_get_it => '#b2fd6d' - palette :chilly => '#a8e1fe' - palette :unicorn => '#faf6e4' - palette :sandy => '#f6dd62' - palette :pink_merengue => '#f696db' - palette :dune => '#fff0a6' - palette :backlit => '#4df4ff' - palette :schrill => '#ffb000' - - style Text, :fg => :unicorn, :bg => :krasna - style Generic::Lineno, :fg => :eggshell_cloud, :bg => :slate_blue - - style Comment, :fg => :cool_as_ice, :italic => true - style Comment::Preproc, :fg => :go_get_it, :bold => true, :italic => true - style Error, - Generic::Error, :fg => :aluminum1, :bg => :scarletred2 - style Keyword, :fg => :sandy, :bold => true - style Operator, - Punctuation, :fg => :backlit - style Generic::Deleted, :fg => :scarletred2 - style Generic::Inserted, :fg => :go_get_it - style Generic::Emph, :italic => true - style Generic::Strong, :bold => true - style Generic::Traceback, :fg => :eggshell_cloud, :bg => :slate_blue - style Keyword::Constant, :fg => :pink_merengue, :bold => true - style Keyword::Namespace, - Keyword::Pseudo, - Keyword::Reserved, - Generic::Heading, - Generic::Subheading, :fg => :schrill, :bold => true - style Keyword::Type, - Name::Constant, - Name::Class, - Name::Decorator, - Name::Namespace, - Name::Builtin::Pseudo, - Name::Exception, :fg => :go_get_it, :bold => true - style Name::Label, - Name::Tag, :fg => :schrill, :bold => true - style Literal::Number, - Literal::Date, - Literal::String::Symbol, :fg => :pink_merengue, :bold => true - style Literal::String, :fg => :dune, :bold => true - style Literal::String::Escape, - Literal::String::Char, - Literal::String::Interpol, :fg => :backlit, :bold => true - style Name::Builtin, :bold => true - style Name::Entity, :fg => '#999999', :bold => true - style Text::Whitespace, :fg => '#BBBBBB' - style Name::Function, - Name::Property, - Name::Attribute, :fg => :chilly - style Name::Variable, :fg => :chilly, :bold => true - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/token.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/token.rb deleted file mode 100644 index ce044a7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/token.rb +++ /dev/null @@ -1,182 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - class Token - class << self - attr_reader :name - attr_reader :parent - attr_reader :shortname - - def cache - @cache ||= {} - end - - def sub_tokens - @sub_tokens ||= {} - end - - def [](qualname) - return qualname unless qualname.is_a? ::String - - Token.cache[qualname] - end - - def inspect - "" - end - - def matches?(other) - other.token_chain.include? self - end - - def token_chain - @token_chain ||= ancestors.take_while { |x| x != Token }.reverse - end - - def qualname - @qualname ||= token_chain.map(&:name).join('.') - end - - def register! - Token.cache[self.qualname] = self - parent.sub_tokens[self.name] = self - end - - def make_token(name, shortname, &b) - parent = self - Class.new(parent) do - @parent = parent - @name = name - @shortname = shortname - register! - class_eval(&b) if b - end - end - - def token(name, shortname, &b) - tok = make_token(name, shortname, &b) - const_set(name, tok) - end - - def each_token(&b) - Token.cache.each do |(_, t)| - b.call(t) - end - end - end - - module Tokens - def self.token(name, shortname, &b) - tok = Token.make_token(name, shortname, &b) - const_set(name, tok) - end - - # XXX IMPORTANT XXX - # For compatibility, this list must be kept in sync with - # pygments.token.STANDARD_TYPES - # please see https://github.com/jneen/rouge/wiki/List-of-tokens - token :Text, '' do - token :Whitespace, 'w' - end - - token :Error, 'err' - token :Other, 'x' - - token :Keyword, 'k' do - token :Constant, 'kc' - token :Declaration, 'kd' - token :Namespace, 'kn' - token :Pseudo, 'kp' - token :Reserved, 'kr' - token :Type, 'kt' - token :Variable, 'kv' - end - - token :Name, 'n' do - token :Attribute, 'na' - token :Builtin, 'nb' do - token :Pseudo, 'bp' - end - token :Class, 'nc' - token :Constant, 'no' - token :Decorator, 'nd' - token :Entity, 'ni' - token :Exception, 'ne' - token :Function, 'nf' - token :Property, 'py' - token :Label, 'nl' - token :Namespace, 'nn' - token :Other, 'nx' - token :Tag, 'nt' - token :Variable, 'nv' do - token :Class, 'vc' - token :Global, 'vg' - token :Instance, 'vi' - end - end - - token :Literal, 'l' do - token :Date, 'ld' - - token :String, 's' do - token :Backtick, 'sb' - token :Char, 'sc' - token :Doc, 'sd' - token :Double, 's2' - token :Escape, 'se' - token :Heredoc, 'sh' - token :Interpol, 'si' - token :Other, 'sx' - token :Regex, 'sr' - token :Single, 's1' - token :Symbol, 'ss' - end - - token :Number, 'm' do - token :Float, 'mf' - token :Hex, 'mh' - token :Integer, 'mi' do - token :Long, 'il' - end - token :Oct, 'mo' - token :Bin, 'mb' - token :Other, 'mx' - end - end - - token :Operator, 'o' do - token :Word, 'ow' - end - - token :Punctuation, 'p' do - token :Indicator, 'pi' - end - - token :Comment, 'c' do - token :Doc, 'cd' - token :Multiline, 'cm' - token :Preproc, 'cp' - token :Single, 'c1' - token :Special, 'cs' - end - - token :Generic, 'g' do - token :Deleted, 'gd' - token :Emph, 'ge' - token :Error, 'gr' - token :Heading, 'gh' - token :Inserted, 'gi' - token :Output, 'go' - token :Prompt, 'gp' - token :Strong, 'gs' - token :Subheading, 'gu' - token :Traceback, 'gt' - token :Lineno, 'gl' - end - - # convenience - Num = Literal::Number - Str = Literal::String - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/util.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/util.rb deleted file mode 100644 index 77168f6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/util.rb +++ /dev/null @@ -1,101 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - class InheritableHash < Hash - def initialize(parent=nil) - @parent = parent - end - - def [](k) - _sup = super - return _sup if own_keys.include?(k) - - _sup || parent[k] - end - - def parent - @parent ||= {} - end - - def include?(k) - super or parent.include?(k) - end - - def each(&b) - keys.each do |k| - b.call(k, self[k]) - end - end - - alias own_keys keys - def keys - keys = own_keys.concat(parent.keys) - keys.uniq! - keys - end - end - - class InheritableList - include Enumerable - - def initialize(parent=nil) - @parent = parent - end - - def parent - @parent ||= [] - end - - def each(&b) - return enum_for(:each) unless block_given? - - parent.each(&b) - own_entries.each(&b) - end - - def own_entries - @own_entries ||= [] - end - - def push(o) - own_entries << o - end - alias << push - end - - # shared methods for some indentation-sensitive lexers - module Indentation - def reset! - super - @block_state = @block_indentation = nil - end - - # push a state for the next indented block - def starts_block(block_state) - @block_state = block_state - @block_indentation = @last_indentation || '' - puts " starts_block #{block_state.inspect}" if @debug - puts " block_indentation: #{@block_indentation.inspect}" if @debug - end - - # handle a single indented line - def indentation(indent_str) - puts " indentation #{indent_str.inspect}" if @debug - puts " block_indentation: #{@block_indentation.inspect}" if @debug - @last_indentation = indent_str - - # if it's an indent and we know where to go next, - # push that state. otherwise, push content and - # clear the block state. - if (@block_state && - indent_str.start_with?(@block_indentation) && - indent_str != @block_indentation - ) - push @block_state - else - @block_state = @block_indentation = nil - push :content - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/version.rb b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/version.rb deleted file mode 100644 index 9205b82..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/lib/rouge/version.rb +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- # - -module Rouge - def self.version - "1.9.1" - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/rouge.gemspec b/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/rouge.gemspec deleted file mode 100644 index d4d394a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/rouge-1.9.1/rouge.gemspec +++ /dev/null @@ -1,18 +0,0 @@ -require './lib/rouge/version' - -Gem::Specification.new do |s| - s.name = "rouge" - s.version = Rouge.version - s.authors = ["Jeanine Adkisson"] - s.email = ["jneen@jneen.net"] - s.summary = "A pure-ruby colorizer based on pygments" - s.description = <<-desc.strip.gsub(/\s+/, ' ') - Rouge aims to a be a simple, easy-to-extend drop-in replacement - for pygments. - desc - s.homepage = "http://rouge.jneen.net/" - s.rubyforge_project = "rouge" - s.files = Dir['Gemfile', 'LICENSE', 'rouge.gemspec', 'lib/**/*.rb', 'lib/**/*.yml', 'bin/rougify', 'lib/rouge/demos/*'] - s.executables = %w(rougify) - s.license = 'MIT (see LICENSE file)' -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/.gitignore b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/.gitignore deleted file mode 100644 index b844b14..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/.gitignore +++ /dev/null @@ -1 +0,0 @@ -Gemfile.lock diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/.travis.yml b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/.travis.yml deleted file mode 100644 index 231fdba..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/.travis.yml +++ /dev/null @@ -1,48 +0,0 @@ -language: - ruby - -before_install: - gem install bundler - -script: - bundle exec rake spec - -rvm: - - ruby-head - - 2.0.0 - - 1.9.3 - - 1.9.2 - - 1.8.7 - - rbx-19mode - - rbx-18mode - - jruby-head - - jruby-19mode - - jruby-18mode - - ree - -env: - - YAMLER=syck - - YAMLER=psych - -matrix: - allow_failures: - - rvm: ruby-head - - rvm: rbx-19mode - - rvm: rbx-18mode - - rvm: jruby-head - - rvm: ree - - exclude: - - rvm: 1.8.7 - env: YAMLER=psych - - rvm: jruby-head - env: YAMLER=syck - - rvm: jruby-19mode - env: YAMLER=syck - - rvm: jruby-18mode - env: YAMLER=syck - -branches: - only: - - master - diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/CHANGES.md b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/CHANGES.md deleted file mode 100644 index 2587b47..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/CHANGES.md +++ /dev/null @@ -1,149 +0,0 @@ -1.0.2 ------ - -- added warning when using Psych + an older version of libyaml - -1.0.1 ------ - -- fixed handling for strings that look like (invalid) dates - -1.0.0 ------ - -- updated date parsing to use local timezone -- **now requiring "safe_yaml/load" provides `SafeYAML.load` without clobbering `YAML`** -- fixed handling of empty files -- fixed some (edge case) integer parsing bugs -- fixed some JRuby-specific issues - -0.9.7 ------ - -- made handling of document frontmatter more robust -- added more descriptive message to the warning for omitting the :safe option - -0.9.6 ------ - -- fixed handling of files with trailing content (after closing `---`) - -0.9.5 ------ - -- fixed permissions AGAIN - -0.9.4 ------ - -- corrected handling of symbols - -0.9.3 ------ - -- fixed permissions :( - -0.9.2 ------ - -- fixed error w/ parsing "!" when whitelisting tags -- fixed parsing of the number 0 (d'oh!) - -0.9.1 ------ - -- added Yecht support (JRuby) -- more bug fixes - -0.9.0 ------ - -- added `whitelist!` method for easily whitelisting tags -- added support for call-specific options -- removed deprecated methods - -0.8.6 ------ - -- fixed bug in float matcher - -0.8.5 ------ - -- performance improvements -- made less verbose by default -- bug fixes - -0.8.4 ------ - -- enhancements to parsing of integers, floats, and dates -- updated built-in whitelist -- more bug fixes - -0.8.3 ------ - -- fixed exception on parsing empty document -- fixed handling of octal & hexadecimal numbers - -0.8.2 ------ - -- bug fixes - -0.8.1 ------ - -- added `:raise_on_unknown_tag` option -- renamed `reset_defaults!` to `restore_defaults!` - -0.8 ---- - -- added tag whitelisting -- more API changes - -0.7 ---- - -- separated YAML engine support from Ruby version -- added support for binary scalars -- numerous bug fixes and enhancements - -0.6 ---- - -- several API changes -- added `SafeYAML::OPTIONS` for specifying default behavior - -0.5 ---- - -Added support for dates - -0.4 ---- - -- efficiency improvements -- made `YAML.load` use `YAML.safe_load` by default -- made symbol deserialization optional - -0.3 ---- - -Added Syck support - -0.2 ---- - -Added support for: - -- anchors & aliases -- booleans -- nils - -0.1 ---- - -Initial release \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/Gemfile b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/Gemfile deleted file mode 100644 index 24d7e3e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/Gemfile +++ /dev/null @@ -1,11 +0,0 @@ -source "https://rubygems.org" - -gemspec - -group :development do - gem "hashie" - gem "heredoc_unindent" - gem "rake" - gem "rspec" - gem "travis-lint" -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/LICENSE.txt b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/LICENSE.txt deleted file mode 100644 index 4b276dd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2013 Dan Tao - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/README.md b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/README.md deleted file mode 100644 index a7b7bdc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/README.md +++ /dev/null @@ -1,191 +0,0 @@ -SafeYAML -======== - -[![Build Status](https://travis-ci.org/dtao/safe_yaml.png)](http://travis-ci.org/dtao/safe_yaml) -[![Gem Version](https://badge.fury.io/rb/safe_yaml.png)](http://badge.fury.io/rb/safe_yaml) - -The **SafeYAML** gem provides an alternative implementation of `YAML.load` suitable for accepting user input in Ruby applications. Unlike Ruby's built-in implementation of `YAML.load`, SafeYAML's version will not expose apps to arbitrary code execution exploits (such as [the ones discovered](http://www.reddit.com/r/netsec/comments/167c11/serious_vulnerability_in_ruby_on_rails_allowing/) [in Rails in early 2013](http://www.h-online.com/open/news/item/Rails-developers-close-another-extremely-critical-flaw-1793511.html)). - -**If you encounter any issues with SafeYAML, check out the 'Common Issues' section below.** If you don't see anything that addresses the problem you're experiencing, by all means, [create an issue](https://github.com/dtao/safe_yaml/issues/new)! - -Installation ------------- - -Add this line to your application's Gemfile: - -```ruby -gem "safe_yaml" -``` - -Configuration -------------- - -If *all you do* is add SafeYAML to your project, then `YAML.load` will operate in "safe" mode, which means it won't deserialize arbitrary objects. However, it will issue a warning the first time you call it because you haven't explicitly specified whether you want safe or unsafe behavior by default. To specify this behavior (e.g., in a Rails initializer): - -```ruby -SafeYAML::OPTIONS[:default_mode] = :safe # or :unsafe -``` - -Another important option you might want to specify on startup is whether or not to allow *symbols* to be deserialized. The default setting is `false`, since symbols are not garbage collected in Ruby and so deserializing them from YAML may render your application vulnerable to a DOS (denial of service) attack. To allow symbol deserialization by default: - -```ruby -SafeYAML::OPTIONS[:deserialize_symbols] = true -``` - -For more information on these and other options, see the "Usage" section down below. - -What is this gem for, exactly? ------------------------------- - -Suppose your application were to use a popular open source library which contained code like this: - -```ruby -class ClassBuilder - def []=(key, value) - @class ||= Class.new - - @class.class_eval <<-EOS - def #{key} - #{value} - end - EOS - end - - def create - @class.new - end -end -``` - -Now, if you were to use `YAML.load` on user input anywhere in your application without the SafeYAML gem installed, an attacker who suspected you were using this library could send a request with a carefully-crafted YAML string to execute arbitrary code (yes, including `system("unix command")`) on your servers. - -This simple example demonstrates the vulnerability: - -```ruby -yaml = <<-EOYAML ---- !ruby/hash:ClassBuilder -"foo; end; puts %(I'm in yr system!); def bar": "baz" -EOYAML -``` - - > YAML.load(yaml) - I'm in yr system! - => #> - -With SafeYAML, the same attacker would be thwarted: - - > require "safe_yaml" - => true - > YAML.load(yaml, :safe => true) - => {"foo; end; puts %(I'm in yr system!); def bar"=>"baz"} - -Usage ------ - -When you require the safe_yaml gem in your project, `YAML.load` is patched to accept one additional (optional) `options` parameter. This changes the method signature as follows: - -- for Syck and Psych prior to Ruby 1.9.3: `YAML.load(yaml, options={})` -- for Psych in 1.9.3 and later: `YAML.load(yaml, filename=nil, options={})` - -The most important option is the `:safe` option (default: `true`), which controls whether or not to deserialize arbitrary objects when parsing a YAML document. The other options, along with explanations, are as follows. - -- `:deserialize_symbols` (default: `false`): Controls whether or not YAML will deserialize symbols. It is probably best to only enable this option where necessary, e.g. to make trusted libraries work. Symbols receive special treatment in Ruby and are not garbage collected, which means deserializing them indiscriminately may render your site vulnerable to a DOS attack. - -- `:whitelisted_tags`: Accepts an array of YAML tags that designate trusted types, e.g., ones that can be deserialized without worrying about any resulting security vulnerabilities. When any of the given tags are encountered in a YAML document, the associated data will be parsed by the underlying YAML engine (Syck or Psych) for the version of Ruby you are using. See the "Whitelisting Trusted Types" section below for more information. - -- `:custom_initializers`: Similar to the `:whitelisted_tags` option, but allows you to provide your own initializers for specified tags rather than using Syck or Psyck. Accepts a hash with string tags for keys and lambdas for values. - -- `:raise_on_unknown_tag` (default: `false`): Represents the highest possible level of paranoia. If the YAML engine encounters any tag other than ones that are automatically trusted by SafeYAML or that you've explicitly whitelisted, it will raise an exception. This may be a good choice if you expect to always be dealing with perfectly safe YAML and want your application to fail loudly upon encountering questionable data. - -All of the above options can be set at the global level via `SafeYAML::OPTIONS`. You can also set each one individually per call to `YAML.load`; an option explicitly passed to `load` will take precedence over an option specified globally. - -What if I don't *want* to patch `YAML`? ---------------------------------------- - -[Excellent question](https://github.com/dtao/safe_yaml/issues/47)! You can also get the methods `SafeYAML.load` and `SafeYAML.load_file` without touching the `YAML` module at all like this: - -```ruby -require "safe_yaml/load" # instead of require "safe_yaml" -``` - -This way, you can use `SafeYAML.load` to parse YAML that *you* don't trust, without affecting the rest of an application (if you're developing a library, for example). - -Supported Types ---------------- - -The way that SafeYAML works is by restricting the kinds of objects that can be deserialized via `YAML.load`. More specifically, only the following types of objects can be deserialized by default: - -- Hashes -- Arrays -- Strings -- Numbers -- Dates -- Times -- Booleans -- Nils - -Again, deserialization of symbols can be enabled globally by setting `SafeYAML::OPTIONS[:deserialize_symbols] = true`, or in a specific call to `YAML.load([some yaml], :deserialize_symbols => true)`. - -Whitelisting Trusted Types --------------------------- - -SafeYAML supports whitelisting certain YAML tags for trusted types. This is handy when your application uses YAML to serialize and deserialize certain types not listed above, which you know to be free of any deserialization-related vulnerabilities. - -The easiest way to whitelist types is by calling `SafeYAML.whitelist!`, which can accept a variable number of safe types, e.g.: - -```ruby -SafeYAML.whitelist!(Foo, Bar) -``` - -You can also whitelist YAML *tags* via the `:whitelisted_tags` option: - -```ruby -# Using Syck -SafeYAML::OPTIONS[:whitelisted_tags] = ["tag:ruby.yaml.org,2002:object:OpenStruct"] - -# Using Psych -SafeYAML::OPTIONS[:whitelisted_tags] = ["!ruby/object:OpenStruct"] -``` - -And in case you were wondering: no, this feature will *not* allow would-be attackers to embed untrusted types within trusted types: - -```ruby -yaml = <<-EOYAML ---- !ruby/object:OpenStruct -table: - :backdoor: !ruby/hash:ClassBuilder - "foo; end; puts %(I'm in yr system!); def bar": "baz" -EOYAML -``` - - > YAML.safe_load(yaml) - => #"baz"}> - -Known Issues ------------- - -If you add SafeYAML to your project and start seeing any errors about missing keys, or you notice mysterious strings that look like `":foo"` (i.e., start with a colon), it's likely you're seeing errors from symbols being saved in YAML format. If you are able to modify the offending code, you might want to consider changing your YAML content to use plain vanilla strings instead of symbols. If not, you may need to set the `:deserialize_symbols` option to `true`, either in calls to `YAML.load` or---as a last resort---globally, with `SafeYAML::OPTIONS[:deserialize_symbols]`. - -Also be aware that some Ruby libraries, particularly those requiring inter-process communication, leverage YAML's object deserialization functionality and therefore may break or otherwise be impacted by SafeYAML. The following list includes known instances of SafeYAML's interaction with other Ruby gems: - -- [**ActiveRecord**](https://github.com/rails/rails/tree/master/activerecord): uses YAML to control serialization of model objects using the `serialize` class method. If you find that accessing serialized properties on your ActiveRecord models is causing errors, chances are you may need to: - 1. set the `:deserialize_symbols` option to `true`, - 2. whitelist some of the types in your serialized data via `SafeYAML.whitelist!` or the `:whitelisted_tags` option, or - 3. both -- [**delayed_job**](https://github.com/collectiveidea/delayed_job): Uses YAML to serialize the objects on which delayed methods are invoked (with `delay`). The safest solution in this case is to use `SafeYAML.whitelist!` to whitelist the types you need to serialize. -- [**Guard**](https://github.com/guard/guard): Uses YAML as a serialization format for notifications. The data serialized uses symbolic keys, so setting `SafeYAML::OPTIONS[:deserialize_symbols] = true` is necessary to allow Guard to work. -- [**sidekiq**](https://github.com/mperham/sidekiq): Uses a YAML configiuration file with symbolic keys, so setting `SafeYAML::OPTIONS[:deserialize_symbols] = true` should allow it to work. - -The above list will grow over time, as more issues are discovered. - -Versioning ----------- - -SafeYAML will follow [semantic versioning](http://semver.org/) so any updates to the first major version will maintain backwards compatability. So expect primarily bug fixes and feature enhancements (if anything!) from here on out... unless it makes sense to break the interface at some point and introduce a version 2.0, which I honestly think is unlikely. - -Requirements ------------- - -SafeYAML requires Ruby 1.8.7 or newer and works with both [Syck](http://www.ruby-doc.org/stdlib-1.8.7/libdoc/yaml/rdoc/YAML.html) and [Psych](http://github.com/tenderlove/psych). - -If you are using a version of Ruby where Psych is the default YAML engine (e.g., 1.9.3) but you want to use Syck, be sure to set `YAML::ENGINE.yamler = "syck"` **before** requiring the safe_yaml gem. diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/Rakefile b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/Rakefile deleted file mode 100644 index 2d9dbc3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/Rakefile +++ /dev/null @@ -1,26 +0,0 @@ -require "rspec/core/rake_task" - -desc "Run specs" -task :spec => ['spec:app', 'spec:lib'] - -namespace :spec do - desc "Run only specs tagged 'solo'" - RSpec::Core::RakeTask.new(:solo) do |t| - t.verbose = false - t.rspec_opts = %w(--color --tag solo) - end - - desc "Run only specs tagged NOT tagged 'libraries' (for applications)" - RSpec::Core::RakeTask.new(:app) do |t| - t.verbose = false - ENV["MONKEYPATCH_YAML"] = "true" - t.rspec_opts = %w(--color --tag ~libraries) - end - - desc "Run only specs tagged 'libraries'" - RSpec::Core::RakeTask.new(:lib) do |t| - t.verbose = false - ENV["MONKEYPATCH_YAML"] = "false" - t.rspec_opts = %w(--color --tag libraries) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/bin/safe_yaml b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/bin/safe_yaml deleted file mode 100755 index 1751a72..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/bin/safe_yaml +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env ruby - -$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib') - -require 'optparse' -require 'safe_yaml/load' - -options = {} -option_parser = OptionParser.new do |opts| - opts.banner = "Usage: safe_yaml [options]" - - opts.on("-f", "--file=", "Parse the given YAML file, dump the result to STDOUT") do |file| - options[:file] = file - end - - opts.on("--libyaml-check", "Check for libyaml vulnerability CVE-2014-2525 on your system") do - options[:libyaml_check] = true - end -end - -option_parser.parse! - -def report_libyaml_ok - puts "\e[32mGood news! You definitely have either a patched or up-to-date libyaml version :)\e[39m" -end - -def check_for_overflow_bug - YAML.load("--- !#{'%20' * 100}") - report_libyaml_ok -end - -def perform_libyaml_check(force=false) - unless SafeYAML::LibyamlChecker.libyaml_version_ok? - warn <<-EOM.gsub(/^ +/, ' ') - - \e[33mSafeYAML Warning\e[39m - \e[33m----------------\e[39m - - \e[31mYou may have an outdated version of libyaml (#{SafeYAML::LibyamlChecker::LIBYAML_VERSION}) installed on your system.\e[39m - - Prior to 0.1.6, libyaml is vulnerable to a heap overflow exploit from malicious YAML payloads. - - For more info, see: - https://www.ruby-lang.org/en/news/2014/03/29/heap-overflow-in-yaml-uri-escape-parsing-cve-2014-2525/ - EOM - end - - puts <<-EOM.gsub(/^ +/, ' ') - - Hit Enter to check if your version of libyaml is vulnerable. This will run a test \e[31mwhich may crash\e[39m - \e[31mthe current process\e[39m. If it does, your system is vulnerable and you should do something about it. - - Type "nm" and hit Enter if you don't want to run the check. - - See the project wiki for more info: - - https://github.com/dtao/safe_yaml/wiki/The-libyaml-vulnerability - EOM - - if STDIN.readline.chomp("\n") != 'nm' - check_for_overflow_bug - end -end - -if options[:libyaml_check] - perform_libyaml_check(options[:force_libyaml_check]) - -elsif options[:file] - yaml = File.read(options[:file]) - result = SafeYAML.load(yaml) - puts result.inspect - -else - puts option_parser.help -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/bundle_install_all_ruby_versions.sh b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/bundle_install_all_ruby_versions.sh deleted file mode 100755 index 902d127..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/bundle_install_all_ruby_versions.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" - -declare -a versions=("1.8.7" "1.9.2" "1.9.3" "2.0.0" "2.1.0" "2.1.1" "2.1.2" "ruby-head" "jruby") - -for i in "${versions[@]}" -do - rvm use $i - bundle install -done diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml.rb deleted file mode 100644 index db1957d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml.rb +++ /dev/null @@ -1,94 +0,0 @@ -require "safe_yaml/load" - -module YAML - def self.load_with_options(yaml, *original_arguments) - filename, options = filename_and_options_from_arguments(original_arguments) - safe_mode = safe_mode_from_options("load", options) - arguments = [yaml] - - if safe_mode == :safe - arguments << filename if SafeYAML::YAML_ENGINE == "psych" - arguments << options_for_safe_load(options) - safe_load(*arguments) - else - arguments << filename if SafeYAML::MULTI_ARGUMENT_YAML_LOAD - unsafe_load(*arguments) - end - end - - def self.load_file_with_options(file, options={}) - safe_mode = safe_mode_from_options("load_file", options) - if safe_mode == :safe - safe_load_file(file, options_for_safe_load(options)) - else - unsafe_load_file(file) - end - end - - def self.safe_load(*args) - SafeYAML.load(*args) - end - - def self.safe_load_file(*args) - SafeYAML.load_file(*args) - end - - if SafeYAML::MULTI_ARGUMENT_YAML_LOAD - def self.unsafe_load_file(filename) - # https://github.com/tenderlove/psych/blob/v1.3.2/lib/psych.rb#L296-298 - File.open(filename, 'r:bom|utf-8') { |f| self.unsafe_load(f, filename) } - end - - else - def self.unsafe_load_file(filename) - # https://github.com/tenderlove/psych/blob/v1.2.2/lib/psych.rb#L231-233 - self.unsafe_load File.open(filename) - end - end - - class << self - alias_method :unsafe_load, :load - alias_method :load, :load_with_options - alias_method :load_file, :load_file_with_options - - private - def filename_and_options_from_arguments(arguments) - if arguments.count == 1 - if arguments.first.is_a?(String) - return arguments.first, {} - else - return nil, arguments.first || {} - end - - else - return arguments.first, arguments.last || {} - end - end - - def safe_mode_from_options(method, options={}) - if options[:safe].nil? - safe_mode = SafeYAML::OPTIONS[:default_mode] || :safe - - if SafeYAML::OPTIONS[:default_mode].nil? && !SafeYAML::OPTIONS[:suppress_warnings] - - Kernel.warn <<-EOWARNING.gsub(/^\s+/, '') - Called '#{method}' without the :safe option -- defaulting to #{safe_mode} mode. - You can avoid this warning in the future by setting the SafeYAML::OPTIONS[:default_mode] option (to :safe or :unsafe). - EOWARNING - - SafeYAML::OPTIONS[:suppress_warnings] = true - end - - return safe_mode - end - - options[:safe] ? :safe : :unsafe - end - - def options_for_safe_load(base_options) - options = base_options.dup - options.delete(:safe) - options - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/deep.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/deep.rb deleted file mode 100644 index 6a5e037..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/deep.rb +++ /dev/null @@ -1,34 +0,0 @@ -module SafeYAML - class Deep - def self.freeze(object) - object.each do |*entry| - value = entry.last - case value - when String, Regexp - value.freeze - when Enumerable - Deep.freeze(value) - end - end - - return object.freeze - end - - def self.copy(object) - duplicate = object.dup rescue object - - case object - when Array - (0...duplicate.count).each do |i| - duplicate[i] = Deep.copy(duplicate[i]) - end - when Hash - duplicate.keys.each do |key| - duplicate[key] = Deep.copy(duplicate[key]) - end - end - - duplicate - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/libyaml_checker.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/libyaml_checker.rb deleted file mode 100644 index 1ae2423..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/libyaml_checker.rb +++ /dev/null @@ -1,36 +0,0 @@ -require "set" - -module SafeYAML - class LibyamlChecker - LIBYAML_VERSION = Psych::LIBYAML_VERSION rescue nil - - # Do proper version comparison (e.g. so 0.1.10 is >= 0.1.6) - SAFE_LIBYAML_VERSION = Gem::Version.new("0.1.6") - - KNOWN_PATCHED_LIBYAML_VERSIONS = Set.new([ - # http://people.canonical.com/~ubuntu-security/cve/2014/CVE-2014-2525.html - "0.1.4-2ubuntu0.12.04.3", - "0.1.4-2ubuntu0.12.10.3", - "0.1.4-2ubuntu0.13.10.3", - "0.1.4-3ubuntu3", - - # https://security-tracker.debian.org/tracker/CVE-2014-2525 - "0.1.3-1+deb6u4", - "0.1.4-2+deb7u4", - "0.1.4-3.2" - ]).freeze - - def self.libyaml_version_ok? - return true if YAML_ENGINE != "psych" || defined?(JRUBY_VERSION) - return true if Gem::Version.new(LIBYAML_VERSION || "0") >= SAFE_LIBYAML_VERSION - return libyaml_patched? - end - - def self.libyaml_patched? - return false if (`which dpkg` rescue '').empty? - libyaml_version = `dpkg -s libyaml-0-2`.match(/^Version: (.*)$/) - return false if libyaml_version.nil? - KNOWN_PATCHED_LIBYAML_VERSIONS.include?(libyaml_version[1]) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/load.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/load.rb deleted file mode 100644 index 5ea0f60..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/load.rb +++ /dev/null @@ -1,181 +0,0 @@ -require "set" -require "yaml" - -# This needs to be defined up front in case any internal classes need to base -# their behavior off of this. -module SafeYAML - YAML_ENGINE = defined?(YAML::ENGINE) ? YAML::ENGINE.yamler : (defined?(Psych) && YAML == Psych ? "psych" : "syck") -end - -require "safe_yaml/libyaml_checker" -require "safe_yaml/deep" -require "safe_yaml/parse/hexadecimal" -require "safe_yaml/parse/sexagesimal" -require "safe_yaml/parse/date" -require "safe_yaml/transform/transformation_map" -require "safe_yaml/transform/to_boolean" -require "safe_yaml/transform/to_date" -require "safe_yaml/transform/to_float" -require "safe_yaml/transform/to_integer" -require "safe_yaml/transform/to_nil" -require "safe_yaml/transform/to_symbol" -require "safe_yaml/transform" -require "safe_yaml/resolver" -require "safe_yaml/syck_hack" if SafeYAML::YAML_ENGINE == "syck" && defined?(JRUBY_VERSION) - -module SafeYAML - MULTI_ARGUMENT_YAML_LOAD = YAML.method(:load).arity != 1 - - DEFAULT_OPTIONS = Deep.freeze({ - :default_mode => nil, - :suppress_warnings => false, - :deserialize_symbols => false, - :whitelisted_tags => [], - :custom_initializers => {}, - :raise_on_unknown_tag => false - }) - - OPTIONS = Deep.copy(DEFAULT_OPTIONS) - - PREDEFINED_TAGS = {} - - if YAML_ENGINE == "syck" - YAML.tagged_classes.each do |tag, klass| - PREDEFINED_TAGS[klass] = tag - end - - else - # Special tags appear to be hard-coded in Psych: - # https://github.com/tenderlove/psych/blob/v1.3.4/lib/psych/visitors/to_ruby.rb - # Fortunately, there aren't many that SafeYAML doesn't already support. - PREDEFINED_TAGS.merge!({ - Exception => "!ruby/exception", - Range => "!ruby/range", - Regexp => "!ruby/regexp", - }) - end - - Deep.freeze(PREDEFINED_TAGS) - - module_function - - def restore_defaults! - OPTIONS.clear.merge!(Deep.copy(DEFAULT_OPTIONS)) - end - - def tag_safety_check!(tag, options) - return if tag.nil? || tag == "!" - if options[:raise_on_unknown_tag] && !options[:whitelisted_tags].include?(tag) && !tag_is_explicitly_trusted?(tag) - raise "Unknown YAML tag '#{tag}'" - end - end - - def whitelist!(*classes) - classes.each do |klass| - whitelist_class!(klass) - end - end - - def whitelist_class!(klass) - raise "#{klass} not a Class" unless klass.is_a?(::Class) - - klass_name = klass.name - raise "#{klass} cannot be anonymous" if klass_name.nil? || klass_name.empty? - - # Whitelist any built-in YAML tags supplied by Syck or Psych. - predefined_tag = PREDEFINED_TAGS[klass] - if predefined_tag - OPTIONS[:whitelisted_tags] << predefined_tag - return - end - - # Exception is exceptional (har har). - tag_class = klass < Exception ? "exception" : "object" - - tag_prefix = case YAML_ENGINE - when "psych" then "!ruby/#{tag_class}" - when "syck" then "tag:ruby.yaml.org,2002:#{tag_class}" - else raise "unknown YAML_ENGINE #{YAML_ENGINE}" - end - OPTIONS[:whitelisted_tags] << "#{tag_prefix}:#{klass_name}" - end - - if YAML_ENGINE == "psych" - def tag_is_explicitly_trusted?(tag) - false - end - - else - TRUSTED_TAGS = Set.new([ - "tag:yaml.org,2002:binary", - "tag:yaml.org,2002:bool#no", - "tag:yaml.org,2002:bool#yes", - "tag:yaml.org,2002:float", - "tag:yaml.org,2002:float#fix", - "tag:yaml.org,2002:int", - "tag:yaml.org,2002:map", - "tag:yaml.org,2002:null", - "tag:yaml.org,2002:seq", - "tag:yaml.org,2002:str", - "tag:yaml.org,2002:timestamp", - "tag:yaml.org,2002:timestamp#ymd" - ]).freeze - - def tag_is_explicitly_trusted?(tag) - TRUSTED_TAGS.include?(tag) - end - end - - if SafeYAML::YAML_ENGINE == "psych" - require "safe_yaml/psych_handler" - require "safe_yaml/psych_resolver" - require "safe_yaml/safe_to_ruby_visitor" - - def self.load(yaml, filename=nil, options={}) - # If the user hasn't whitelisted any tags, we can go with this implementation which is - # significantly faster. - if (options && options[:whitelisted_tags] || SafeYAML::OPTIONS[:whitelisted_tags]).empty? - safe_handler = SafeYAML::PsychHandler.new(options) do |result| - return result - end - arguments_for_parse = [yaml] - arguments_for_parse << filename if SafeYAML::MULTI_ARGUMENT_YAML_LOAD - Psych::Parser.new(safe_handler).parse(*arguments_for_parse) - return safe_handler.result - - else - safe_resolver = SafeYAML::PsychResolver.new(options) - tree = SafeYAML::MULTI_ARGUMENT_YAML_LOAD ? - Psych.parse(yaml, filename) : - Psych.parse(yaml) - return safe_resolver.resolve_node(tree) - end - end - - def self.load_file(filename, options={}) - if SafeYAML::MULTI_ARGUMENT_YAML_LOAD - File.open(filename, 'r:bom|utf-8') { |f| self.load(f, filename, options) } - - else - # Ruby pukes on 1.9.2 if we try to open an empty file w/ 'r:bom|utf-8'; - # so we'll not specify those flags here. This mirrors the behavior for - # unsafe_load_file so it's probably preferable anyway. - self.load File.open(filename), nil, options - end - end - - else - require "safe_yaml/syck_resolver" - require "safe_yaml/syck_node_monkeypatch" - - def self.load(yaml, options={}) - resolver = SafeYAML::SyckResolver.new(SafeYAML::OPTIONS.merge(options || {})) - tree = YAML.parse(yaml) - return resolver.resolve_node(tree) - end - - def self.load_file(filename, options={}) - File.open(filename) { |f| self.load(f, options) } - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/parse/date.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/parse/date.rb deleted file mode 100644 index cd3c62a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/parse/date.rb +++ /dev/null @@ -1,35 +0,0 @@ -module SafeYAML - class Parse - class Date - # This one's easy enough :) - DATE_MATCHER = /\A(\d{4})-(\d{2})-(\d{2})\Z/.freeze - - # This unbelievable little gem is taken basically straight from the YAML spec, but made - # slightly more readable (to my poor eyes at least) to me: - # http://yaml.org/type/timestamp.html - TIME_MATCHER = /\A\d{4}-\d{1,2}-\d{1,2}(?:[Tt]|\s+)\d{1,2}:\d{2}:\d{2}(?:\.\d*)?\s*(?:Z|[-+]\d{1,2}(?::?\d{2})?)?\Z/.freeze - - SECONDS_PER_DAY = 60 * 60 * 24 - MICROSECONDS_PER_SECOND = 1000000 - - # So this is weird. In Ruby 1.8.7, the DateTime#sec_fraction method returned fractional - # seconds in units of DAYS for some reason. In 1.9.2, they changed the units -- much more - # reasonably -- to seconds. - SEC_FRACTION_MULTIPLIER = RUBY_VERSION == "1.8.7" ? (SECONDS_PER_DAY * MICROSECONDS_PER_SECOND) : MICROSECONDS_PER_SECOND - - # The DateTime class has a #to_time method in Ruby 1.9+; - # Before that we'll just need to convert DateTime to Time ourselves. - TO_TIME_AVAILABLE = DateTime.instance_methods.include?(:to_time) - - def self.value(value) - d = DateTime.parse(value) - - return d.to_time if TO_TIME_AVAILABLE - - usec = d.sec_fraction * SEC_FRACTION_MULTIPLIER - time = Time.utc(d.year, d.month, d.day, d.hour, d.min, d.sec, usec) - (d.offset * SECONDS_PER_DAY) - time.getlocal - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/parse/hexadecimal.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/parse/hexadecimal.rb deleted file mode 100644 index 8da3624..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/parse/hexadecimal.rb +++ /dev/null @@ -1,12 +0,0 @@ -module SafeYAML - class Parse - class Hexadecimal - MATCHER = /\A[-+]?0x[0-9a-fA-F_]+\Z/.freeze - - def self.value(value) - # This is safe to do since we already validated the value. - return Integer(value.gsub(/_/, "")) - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/parse/sexagesimal.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/parse/sexagesimal.rb deleted file mode 100644 index 3fff5bb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/parse/sexagesimal.rb +++ /dev/null @@ -1,26 +0,0 @@ -module SafeYAML - class Parse - class Sexagesimal - INTEGER_MATCHER = /\A[-+]?[0-9][0-9_]*(:[0-5]?[0-9])+\Z/.freeze - FLOAT_MATCHER = /\A[-+]?[0-9][0-9_]*(:[0-5]?[0-9])+\.[0-9_]*\Z/.freeze - - def self.value(value) - before_decimal, after_decimal = value.split(".") - - whole_part = 0 - multiplier = 1 - - before_decimal = before_decimal.split(":") - until before_decimal.empty? - whole_part += (Float(before_decimal.pop) * multiplier) - multiplier *= 60 - end - - result = whole_part - result += Float("." + after_decimal) unless after_decimal.nil? - result *= -1 if value[0] == "-" - result - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/psych_handler.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/psych_handler.rb deleted file mode 100644 index cf016a3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/psych_handler.rb +++ /dev/null @@ -1,99 +0,0 @@ -require "psych" -require "base64" - -module SafeYAML - class PsychHandler < Psych::Handler - def initialize(options, &block) - @options = SafeYAML::OPTIONS.merge(options || {}) - @block = block - @initializers = @options[:custom_initializers] || {} - @anchors = {} - @stack = [] - @current_key = nil - @result = nil - @begun = false - end - - def result - @begun ? @result : false - end - - def add_to_current_structure(value, anchor=nil, quoted=nil, tag=nil) - value = Transform.to_proper_type(value, quoted, tag, @options) - - @anchors[anchor] = value if anchor - - if !@begun - @begun = true - @result = value - @current_structure = @result - return - end - - if @current_structure.respond_to?(:<<) - @current_structure << value - - elsif @current_structure.respond_to?(:[]=) - if @current_key.nil? - @current_key = value - - else - if @current_key == "<<" - @current_structure.merge!(value) - else - @current_structure[@current_key] = value - end - - @current_key = nil - end - - else - raise "Don't know how to add to a #{@current_structure.class}!" - end - end - - def end_current_structure - @stack.pop - @current_structure = @stack.last - end - - def streaming? - true - end - - # event handlers - def alias(anchor) - add_to_current_structure(@anchors[anchor]) - end - - def scalar(value, anchor, tag, plain, quoted, style) - add_to_current_structure(value, anchor, quoted, tag) - end - - def end_document(implicit) - @block.call(@result) - end - - def start_mapping(anchor, tag, implicit, style) - map = @initializers.include?(tag) ? @initializers[tag].call : {} - self.add_to_current_structure(map, anchor) - @current_structure = map - @stack.push(map) - end - - def end_mapping - self.end_current_structure() - end - - def start_sequence(anchor, tag, implicit, style) - seq = @initializers.include?(tag) ? @initializers[tag].call : [] - self.add_to_current_structure(seq, anchor) - @current_structure = seq - @stack.push(seq) - end - - def end_sequence - self.end_current_structure() - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/psych_resolver.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/psych_resolver.rb deleted file mode 100644 index 851989b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/psych_resolver.rb +++ /dev/null @@ -1,52 +0,0 @@ -module SafeYAML - class PsychResolver < Resolver - NODE_TYPES = { - Psych::Nodes::Document => :root, - Psych::Nodes::Mapping => :map, - Psych::Nodes::Sequence => :seq, - Psych::Nodes::Scalar => :scalar, - Psych::Nodes::Alias => :alias - }.freeze - - def initialize(options={}) - super - @aliased_nodes = {} - end - - def resolve_root(root) - resolve_seq(root).first - end - - def resolve_alias(node) - resolve_node(@aliased_nodes[node.anchor]) - end - - def native_resolve(node) - @visitor ||= SafeYAML::SafeToRubyVisitor.new(self) - @visitor.accept(node) - end - - def get_node_type(node) - NODE_TYPES[node.class] - end - - def get_node_tag(node) - node.tag - end - - def get_node_value(node) - @aliased_nodes[node.anchor] = node if node.respond_to?(:anchor) && node.anchor - - case get_node_type(node) - when :root, :map, :seq - node.children - when :scalar - node.value - end - end - - def value_is_quoted?(node) - node.quoted - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/resolver.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/resolver.rb deleted file mode 100644 index e4de157..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/resolver.rb +++ /dev/null @@ -1,94 +0,0 @@ -module SafeYAML - class Resolver - def initialize(options) - @options = SafeYAML::OPTIONS.merge(options || {}) - @whitelist = @options[:whitelisted_tags] || [] - @initializers = @options[:custom_initializers] || {} - @raise_on_unknown_tag = @options[:raise_on_unknown_tag] - end - - def resolve_node(node) - return node if !node - return self.native_resolve(node) if tag_is_whitelisted?(self.get_node_tag(node)) - - case self.get_node_type(node) - when :root - resolve_root(node) - when :map - resolve_map(node) - when :seq - resolve_seq(node) - when :scalar - resolve_scalar(node) - when :alias - resolve_alias(node) - else - raise "Don't know how to resolve this node: #{node.inspect}" - end - end - - def resolve_map(node) - tag = get_and_check_node_tag(node) - hash = @initializers.include?(tag) ? @initializers[tag].call : {} - map = normalize_map(self.get_node_value(node)) - - # Take the "<<" key nodes first, as these are meant to approximate a form of inheritance. - inheritors = map.select { |key_node, value_node| resolve_node(key_node) == "<<" } - inheritors.each do |key_node, value_node| - merge_into_hash(hash, resolve_node(value_node)) - end - - # All that's left should be normal (non-"<<") nodes. - (map - inheritors).each do |key_node, value_node| - hash[resolve_node(key_node)] = resolve_node(value_node) - end - - return hash - end - - def resolve_seq(node) - seq = self.get_node_value(node) - - tag = get_and_check_node_tag(node) - arr = @initializers.include?(tag) ? @initializers[tag].call : [] - - seq.inject(arr) { |array, n| array << resolve_node(n) } - end - - def resolve_scalar(node) - Transform.to_proper_type(self.get_node_value(node), self.value_is_quoted?(node), get_and_check_node_tag(node), @options) - end - - def get_and_check_node_tag(node) - tag = self.get_node_tag(node) - SafeYAML.tag_safety_check!(tag, @options) - tag - end - - def tag_is_whitelisted?(tag) - @whitelist.include?(tag) - end - - def options - @options - end - - private - def normalize_map(map) - # Syck creates Hashes from maps. - if map.is_a?(Hash) - map.inject([]) { |arr, key_and_value| arr << key_and_value } - - # Psych is really weird; it flattens out a Hash completely into: [key, value, key, value, ...] - else - map.each_slice(2).to_a - end - end - - def merge_into_hash(hash, array) - array.each do |key, value| - hash[key] = value - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/safe_to_ruby_visitor.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/safe_to_ruby_visitor.rb deleted file mode 100644 index b980445..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/safe_to_ruby_visitor.rb +++ /dev/null @@ -1,29 +0,0 @@ -module SafeYAML - class SafeToRubyVisitor < Psych::Visitors::ToRuby - INITIALIZE_ARITY = superclass.instance_method(:initialize).arity - - def initialize(resolver) - case INITIALIZE_ARITY - when 2 - # https://github.com/tenderlove/psych/blob/v2.0.0/lib/psych/visitors/to_ruby.rb#L14-L28 - loader = Psych::ClassLoader.new - scanner = Psych::ScalarScanner.new(loader) - super(scanner, loader) - - else - super() - end - - @resolver = resolver - end - - def accept(node) - if node.tag - SafeYAML.tag_safety_check!(node.tag, @resolver.options) - return super - end - - @resolver.resolve_node(node) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/syck_hack.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/syck_hack.rb deleted file mode 100644 index 08a5e47..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/syck_hack.rb +++ /dev/null @@ -1,36 +0,0 @@ -# Hack to JRuby 1.8's YAML Parser Yecht -# -# This file is always loaded AFTER either syck or psych are already -# loaded. It then looks at what constants are available and creates -# a consistent view on all rubys. -# -# Taken from rubygems and modified. -# See https://github.com/rubygems/rubygems/blob/master/lib/rubygems/syck_hack.rb - -module YAML - # In newer 1.9.2, there is a Syck toplevel constant instead of it - # being underneith YAML. If so, reference it back under YAML as - # well. - if defined? ::Syck - # for tests that change YAML::ENGINE - # 1.8 does not support the second argument to const_defined? - remove_const :Syck rescue nil - - Syck = ::Syck - - # JRuby's "Syck" is called "Yecht" - elsif defined? YAML::Yecht - Syck = YAML::Yecht - end -end - -# Sometime in the 1.9 dev cycle, the Syck constant was moved from under YAML -# to be a toplevel constant. So gemspecs created under these versions of Syck -# will have references to Syck::DefaultKey. -# -# So we need to be sure that we reference Syck at the toplevel too so that -# we can always load these kind of gemspecs. -# -if !defined?(Syck) - Syck = YAML::Syck -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/syck_node_monkeypatch.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/syck_node_monkeypatch.rb deleted file mode 100644 index c026376..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/syck_node_monkeypatch.rb +++ /dev/null @@ -1,43 +0,0 @@ -# This is, admittedly, pretty insane. Fundamentally the challenge here is this: if we want to allow -# whitelisting of tags (while still leveraging Syck's internal functionality), then we have to -# change how Syck::Node#transform works. But since we (SafeYAML) do not control instantiation of -# Syck::Node objects, we cannot, for example, subclass Syck::Node and override #tranform the "easy" -# way. So the only choice is to monkeypatch, like this. And the only way to make this work -# recursively with potentially call-specific options (that my feeble brain can think of) is to set -# pseudo-global options on the first call and unset them once the recursive stack has fully unwound. - -monkeypatch = <<-EORUBY - class Node - @@safe_transform_depth = 0 - @@safe_transform_whitelist = nil - - def safe_transform(options={}) - begin - @@safe_transform_depth += 1 - @@safe_transform_whitelist ||= options[:whitelisted_tags] - - if self.type_id - SafeYAML.tag_safety_check!(self.type_id, options) - return unsafe_transform if @@safe_transform_whitelist.include?(self.type_id) - end - - SafeYAML::SyckResolver.new.resolve_node(self) - - ensure - @@safe_transform_depth -= 1 - if @@safe_transform_depth == 0 - @@safe_transform_whitelist = nil - end - end - end - - alias_method :unsafe_transform, :transform - alias_method :transform, :safe_transform - end -EORUBY - -if defined?(YAML::Syck::Node) - YAML::Syck.module_eval monkeypatch -else - Syck.module_eval monkeypatch -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/syck_resolver.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/syck_resolver.rb deleted file mode 100644 index 10d55ab..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/syck_resolver.rb +++ /dev/null @@ -1,38 +0,0 @@ -module SafeYAML - class SyckResolver < Resolver - QUOTE_STYLES = [ - :quote1, - :quote2 - ].freeze - - NODE_TYPES = { - Hash => :map, - Array => :seq, - String => :scalar - }.freeze - - def initialize(options={}) - super - end - - def native_resolve(node) - node.transform(self.options) - end - - def get_node_type(node) - NODE_TYPES[node.value.class] - end - - def get_node_tag(node) - node.type_id - end - - def get_node_value(node) - node.value - end - - def value_is_quoted?(node) - QUOTE_STYLES.include?(node.instance_variable_get(:@style)) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform.rb deleted file mode 100644 index d61d1a9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform.rb +++ /dev/null @@ -1,41 +0,0 @@ -require 'base64' - -module SafeYAML - class Transform - TRANSFORMERS = [ - Transform::ToSymbol.new, - Transform::ToInteger.new, - Transform::ToFloat.new, - Transform::ToNil.new, - Transform::ToBoolean.new, - Transform::ToDate.new - ] - - def self.to_guessed_type(value, quoted=false, options=nil) - return value if quoted - - if value.is_a?(String) - TRANSFORMERS.each do |transformer| - success, transformed_value = transformer.method(:transform?).arity == 1 ? - transformer.transform?(value) : - transformer.transform?(value, options) - - return transformed_value if success - end - end - - value - end - - def self.to_proper_type(value, quoted=false, tag=nil, options=nil) - case tag - when "tag:yaml.org,2002:binary", "x-private:binary", "!binary" - decoded = Base64.decode64(value) - decoded = decoded.force_encoding(value.encoding) if decoded.respond_to?(:force_encoding) - decoded - else - self.to_guessed_type(value, quoted, options) - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/to_boolean.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/to_boolean.rb deleted file mode 100644 index 99dc85e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/to_boolean.rb +++ /dev/null @@ -1,21 +0,0 @@ -module SafeYAML - class Transform - class ToBoolean - include TransformationMap - - set_predefined_values({ - "yes" => true, - "on" => true, - "true" => true, - "no" => false, - "off" => false, - "false" => false - }) - - def transform?(value) - return false if value.length > 5 - return PREDEFINED_VALUES.include?(value), PREDEFINED_VALUES[value] - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/to_date.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/to_date.rb deleted file mode 100644 index 4bfe552..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/to_date.rb +++ /dev/null @@ -1,13 +0,0 @@ -module SafeYAML - class Transform - class ToDate - def transform?(value) - return true, Date.parse(value) if Parse::Date::DATE_MATCHER.match(value) - return true, Parse::Date.value(value) if Parse::Date::TIME_MATCHER.match(value) - false - rescue ArgumentError - return true, value - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/to_float.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/to_float.rb deleted file mode 100644 index 4ee3f5f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/to_float.rb +++ /dev/null @@ -1,33 +0,0 @@ -module SafeYAML - class Transform - class ToFloat - Infinity = 1.0 / 0.0 - NaN = 0.0 / 0.0 - - PREDEFINED_VALUES = { - ".inf" => Infinity, - ".Inf" => Infinity, - ".INF" => Infinity, - "-.inf" => -Infinity, - "-.Inf" => -Infinity, - "-.INF" => -Infinity, - ".nan" => NaN, - ".NaN" => NaN, - ".NAN" => NaN, - }.freeze - - MATCHER = /\A[-+]?(?:\d[\d_]*)?\.[\d_]+(?:[eE][-+][\d]+)?\Z/.freeze - - def transform?(value) - return true, Float(value) if MATCHER.match(value) - try_edge_cases?(value) - end - - def try_edge_cases?(value) - return true, PREDEFINED_VALUES[value] if PREDEFINED_VALUES.include?(value) - return true, Parse::Sexagesimal.value(value) if Parse::Sexagesimal::FLOAT_MATCHER.match(value) - return false - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/to_integer.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/to_integer.rb deleted file mode 100644 index 9a5f563..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/to_integer.rb +++ /dev/null @@ -1,26 +0,0 @@ -module SafeYAML - class Transform - class ToInteger - MATCHERS = Deep.freeze([ - /\A[-+]?(0|([1-9][0-9_,]*))\Z/, # decimal - /\A0[0-7]+\Z/, # octal - /\A0x[0-9a-f]+\Z/i, # hexadecimal - /\A0b[01_]+\Z/ # binary - ]) - - def transform?(value) - MATCHERS.each_with_index do |matcher, idx| - value = value.gsub(/[_,]/, "") if idx == 0 - return true, Integer(value) if matcher.match(value) - end - try_edge_cases?(value) - end - - def try_edge_cases?(value) - return true, Parse::Hexadecimal.value(value) if Parse::Hexadecimal::MATCHER.match(value) - return true, Parse::Sexagesimal.value(value) if Parse::Sexagesimal::INTEGER_MATCHER.match(value) - return false - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/to_nil.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/to_nil.rb deleted file mode 100644 index 1f61756..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/to_nil.rb +++ /dev/null @@ -1,18 +0,0 @@ -module SafeYAML - class Transform - class ToNil - include TransformationMap - - set_predefined_values({ - "" => nil, - "~" => nil, - "null" => nil - }) - - def transform?(value) - return false if value.length > 4 - return PREDEFINED_VALUES.include?(value), PREDEFINED_VALUES[value] - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/to_symbol.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/to_symbol.rb deleted file mode 100644 index 36a72bb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/to_symbol.rb +++ /dev/null @@ -1,17 +0,0 @@ -module SafeYAML - class Transform - class ToSymbol - def transform?(value, options=SafeYAML::OPTIONS) - if options[:deserialize_symbols] && value =~ /\A:./ - if value =~ /\A:(["'])(.*)\1\Z/ - return true, $2.sub(/^:/, "").to_sym - else - return true, value.sub(/^:/, "").to_sym - end - end - - return false - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/transformation_map.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/transformation_map.rb deleted file mode 100644 index d4e45ec..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/transform/transformation_map.rb +++ /dev/null @@ -1,47 +0,0 @@ -module SafeYAML - class Transform - module TransformationMap - def self.included(base) - base.extend(ClassMethods) - end - - class CaseAgnosticMap < Hash - def initialize(*args) - super - end - - def include?(key) - super(key.downcase) - end - - def [](key) - super(key.downcase) - end - - # OK, I actually don't think it's all that important that this map be - # frozen. - def freeze - self - end - end - - module ClassMethods - def set_predefined_values(predefined_values) - if SafeYAML::YAML_ENGINE == "syck" - expanded_map = predefined_values.inject({}) do |hash, (key, value)| - hash[key] = value - hash[key.capitalize] = value - hash[key.upcase] = value - hash - end - else - expanded_map = CaseAgnosticMap.new - expanded_map.merge!(predefined_values) - end - - self.const_set(:PREDEFINED_VALUES, expanded_map.freeze) - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/version.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/version.rb deleted file mode 100644 index 5edb086..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/lib/safe_yaml/version.rb +++ /dev/null @@ -1,3 +0,0 @@ -module SafeYAML - VERSION = "1.0.4" -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/run_specs_all_ruby_versions.sh b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/run_specs_all_ruby_versions.sh deleted file mode 100755 index 54a1f4b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/run_specs_all_ruby_versions.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash - -[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" - -rvm use 1.8.7 -bundle exec rake spec - -rvm use 1.9.2 -YAMLER=syck bundle exec rake spec - -YAMLER=psych bundle exec rake spec - -rvm use 1.9.3 -YAMLER=syck bundle exec rake spec - -YAMLER=psych bundle exec rake spec - -rvm use 2.0.0 -bundle exec rake spec - -rvm use 2.1.0 -bundle exec rake spec - -rvm use 2.1.1 -bundle exec rake spec - -rvm use 2.1.2 -bundle exec rake spec - -rvm use ruby-head -bundle exec rake spec - -rvm use jruby -JRUBY_OPTS=--1.8 bundle exec rake spec - -JRUBY_OPTS=--1.9 bundle exec rake spec - -JRUBY_OPTS=--2.0 bundle exec rake spec diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/safe_yaml.gemspec b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/safe_yaml.gemspec deleted file mode 100644 index 4f4432a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/safe_yaml.gemspec +++ /dev/null @@ -1,19 +0,0 @@ -# -*- encoding: utf-8 -*- -require File.join(File.dirname(__FILE__), "lib", "safe_yaml", "version") - -Gem::Specification.new do |gem| - gem.name = "safe_yaml" - gem.version = SafeYAML::VERSION - gem.authors = "Dan Tao" - gem.email = "daniel.tao@gmail.com" - gem.description = %q{Parse YAML safely} - gem.summary = %q{SameYAML provides an alternative implementation of YAML.load suitable for accepting user input in Ruby applications.} - gem.homepage = "https://github.com/dtao/safe_yaml" - gem.license = "MIT" - gem.files = `git ls-files`.split($\) - gem.test_files = gem.files.grep(%r{^spec/}) - gem.require_paths = ["lib"] - gem.executables = ["safe_yaml"] - - gem.required_ruby_version = ">= 1.8.7" -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/exploit.1.9.2.yaml b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/exploit.1.9.2.yaml deleted file mode 100644 index bdd70cc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/exploit.1.9.2.yaml +++ /dev/null @@ -1,2 +0,0 @@ ---- !ruby/object:ExploitableBackDoor -foo: bar diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/exploit.1.9.3.yaml b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/exploit.1.9.3.yaml deleted file mode 100644 index c24e04b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/exploit.1.9.3.yaml +++ /dev/null @@ -1,2 +0,0 @@ ---- !ruby/hash:ExploitableBackDoor -foo: bar diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/issue48.txt b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/issue48.txt deleted file mode 100644 index 97d1f68..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/issue48.txt +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Blah -key: value ---- - -I'm going to inject a bunch of YAML-looking stuff below and it should all just get ignored. - -foo: bar - -- foo -- bar - -:foo -42 -~ - ---- -text: | - Look, I'm another YAML document! ---- diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/issue49.yml b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/issue49.yml deleted file mode 100644 index e69de29..0000000 diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/libyaml_checker_spec.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/libyaml_checker_spec.rb deleted file mode 100644 index b5b290b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/libyaml_checker_spec.rb +++ /dev/null @@ -1,69 +0,0 @@ -require "spec_helper" - -describe SafeYAML::LibyamlChecker do - describe "check_libyaml_version" do - REAL_YAML_ENGINE = SafeYAML::YAML_ENGINE - REAL_LIBYAML_VERSION = SafeYAML::LibyamlChecker::LIBYAML_VERSION - - let(:libyaml_patched) { false } - - before :each do - allow(SafeYAML::LibyamlChecker).to receive(:libyaml_patched?).and_return(libyaml_patched) - end - - after :each do - silence_warnings do - SafeYAML::YAML_ENGINE = REAL_YAML_ENGINE - SafeYAML::LibyamlChecker::LIBYAML_VERSION = REAL_LIBYAML_VERSION - end - end - - def test_libyaml_version_ok(expected_result, yaml_engine, libyaml_version=nil) - silence_warnings do - SafeYAML.const_set("YAML_ENGINE", yaml_engine) - SafeYAML::LibyamlChecker.const_set("LIBYAML_VERSION", libyaml_version) - expect(SafeYAML::LibyamlChecker.libyaml_version_ok?).to eq(expected_result) - end - end - - unless defined?(JRUBY_VERSION) - it "issues no warnings when 'Syck' is the YAML engine" do - test_libyaml_version_ok(true, "syck") - end - - it "issues a warning if Psych::LIBYAML_VERSION is not defined" do - test_libyaml_version_ok(false, "psych") - end - - it "issues a warning if Psych::LIBYAML_VERSION is < 0.1.6" do - test_libyaml_version_ok(false, "psych", "0.1.5") - end - - it "issues no warning if Psych::LIBYAML_VERSION is == 0.1.6" do - test_libyaml_version_ok(true, "psych", "0.1.6") - end - - it "issues no warning if Psych::LIBYAML_VERSION is > 0.1.6" do - test_libyaml_version_ok(true, "psych", "1.0.0") - end - - it "does a proper version comparison (not just a string comparison)" do - test_libyaml_version_ok(true, "psych", "0.1.10") - end - - context "when the system has a known patched libyaml version" do - let(:libyaml_patched) { true } - - it "issues no warning, even when Psych::LIBYAML_VERSION < 0.1.6" do - test_libyaml_version_ok(true, "psych", "0.1.4") - end - end - end - - if defined?(JRUBY_VERSION) - it "issues no warning, as JRuby doesn't use libyaml" do - test_libyaml_version_ok(true, "psych", "0.1.4") - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/psych_resolver_spec.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/psych_resolver_spec.rb deleted file mode 100644 index a9e76b5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/psych_resolver_spec.rb +++ /dev/null @@ -1,10 +0,0 @@ -require "spec_helper" - -if SafeYAML::YAML_ENGINE == "psych" - require "safe_yaml/psych_resolver" - - describe SafeYAML::PsychResolver do - include ResolverSpecs - let(:resolver) { SafeYAML::PsychResolver.new } - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/resolver_specs.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/resolver_specs.rb deleted file mode 100644 index 1b981e5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/resolver_specs.rb +++ /dev/null @@ -1,278 +0,0 @@ -module ResolverSpecs - def self.included(base) - base.module_eval do - let(:resolver) { nil } - let(:result) { @result } - - before :each do - # See the comment in the first before :each block in safe_yaml_spec.rb. - require "safe_yaml" - end - - def parse(yaml) - tree = YAML.parse(yaml.unindent) - @result = resolver.resolve_node(tree) - end - - # Isn't this how I should've been doing it all along? - def parse_and_test(yaml) - safe_result = parse(yaml) - - exception_thrown = nil - - unsafe_result = begin - YAML.unsafe_load(yaml) - rescue Exception => e - exception_thrown = e - end - - if exception_thrown - # If the underlying YAML parser (e.g. Psych) threw an exception, I'm - # honestly not sure what the right thing to do is. For now I'll just - # print a warning. Should SafeYAML fail when Psych fails? - Kernel.warn "\n" - Kernel.warn "Discrepancy between SafeYAML and #{SafeYAML::YAML_ENGINE} on input:\n" - Kernel.warn "#{yaml.unindent}\n" - Kernel.warn "SafeYAML result:" - Kernel.warn "#{safe_result.inspect}\n" - Kernel.warn "#{SafeYAML::YAML_ENGINE} result:" - Kernel.warn "#{exception_thrown.inspect}\n" - - else - expect(safe_result).to eq(unsafe_result) - end - end - - context "by default" do - it "translates maps to hashes" do - parse <<-YAML - potayto: potahto - tomayto: tomahto - YAML - - expect(result).to eq({ - "potayto" => "potahto", - "tomayto" => "tomahto" - }) - end - - it "translates sequences to arrays" do - parse <<-YAML - - foo - - bar - - baz - YAML - - expect(result).to eq(["foo", "bar", "baz"]) - end - - it "translates most values to strings" do - parse "string: value" - expect(result).to eq({ "string" => "value" }) - end - - it "does not deserialize symbols" do - parse ":symbol: value" - expect(result).to eq({ ":symbol" => "value" }) - end - - it "translates valid integral numbers to integers" do - parse "integer: 1" - expect(result).to eq({ "integer" => 1 }) - end - - it "translates valid decimal numbers to floats" do - parse "float: 3.14" - expect(result).to eq({ "float" => 3.14 }) - end - - it "translates valid dates" do - parse "date: 2013-01-24" - expect(result).to eq({ "date" => Date.parse("2013-01-24") }) - end - - it "translates valid true/false values to booleans" do - parse <<-YAML - - yes - - true - - no - - false - YAML - - expect(result).to eq([true, true, false, false]) - end - - it "translates valid nulls to nil" do - parse <<-YAML - - - - ~ - - null - YAML - - expect(result).to eq([nil] * 3) - end - - it "matches the behavior of the underlying YAML engine w/ respect to capitalization of boolean values" do - parse_and_test <<-YAML - - true - - True - - TRUE - - tRue - - TRue - - False - - FALSE - - fAlse - - FALse - YAML - - # using Syck: [true, true, true, "tRue", "TRue", false, false, "fAlse", "FALse"] - # using Psych: all booleans - end - - it "matches the behavior of the underlying YAML engine w/ respect to capitalization of nil values" do - parse_and_test <<-YAML - - Null - - NULL - - nUll - - NUll - YAML - - # using Syck: [nil, nil, "nUll", "NUll"] - # using Psych: all nils - end - - it "translates quoted empty strings to strings (not nil)" do - parse "foo: ''" - expect(result).to eq({ "foo" => "" }) - end - - it "correctly reverse-translates strings encoded via #to_yaml" do - parse "5.10".to_yaml - expect(result).to eq("5.10") - end - - it "does not specially parse any double-quoted strings" do - parse <<-YAML - - "1" - - "3.14" - - "true" - - "false" - - "2013-02-03" - - "2013-02-03 16:27:00 -0600" - YAML - - expect(result).to eq(["1", "3.14", "true", "false", "2013-02-03", "2013-02-03 16:27:00 -0600"]) - end - - it "does not specially parse any single-quoted strings" do - parse <<-YAML - - '1' - - '3.14' - - 'true' - - 'false' - - '2013-02-03' - - '2013-02-03 16:27:00 -0600' - YAML - - expect(result).to eq(["1", "3.14", "true", "false", "2013-02-03", "2013-02-03 16:27:00 -0600"]) - end - - it "deals just fine with nested maps" do - parse <<-YAML - foo: - bar: - marco: polo - YAML - - expect(result).to eq({ "foo" => { "bar" => { "marco" => "polo" } } }) - end - - it "deals just fine with nested sequences" do - parse <<-YAML - - foo - - - - bar1 - - bar2 - - - - baz1 - - baz2 - YAML - - expect(result).to eq(["foo", ["bar1", "bar2", ["baz1", "baz2"]]]) - end - - it "applies the same transformations to keys as to values" do - parse <<-YAML - foo: string - :bar: symbol - 1: integer - 3.14: float - 2013-01-24: date - YAML - - expect(result).to eq({ - "foo" => "string", - ":bar" => "symbol", - 1 => "integer", - 3.14 => "float", - Date.parse("2013-01-24") => "date", - }) - end - - it "applies the same transformations to elements in sequences as to all values" do - parse <<-YAML - - foo - - :bar - - 1 - - 3.14 - - 2013-01-24 - YAML - - expect(result).to eq(["foo", ":bar", 1, 3.14, Date.parse("2013-01-24")]) - end - end - - context "for Ruby version #{RUBY_VERSION}" do - it "translates valid time values" do - parse "time: 2013-01-29 05:58:00 -0800" - expect(result).to eq({ "time" => Time.utc(2013, 1, 29, 13, 58, 0) }) - end - - it "applies the same transformation to elements in sequences" do - parse "- 2013-01-29 05:58:00 -0800" - expect(result).to eq([Time.utc(2013, 1, 29, 13, 58, 0)]) - end - - it "applies the same transformation to keys" do - parse "2013-01-29 05:58:00 -0800: time" - expect(result).to eq({ Time.utc(2013, 1, 29, 13, 58, 0) => "time" }) - end - end - - context "with symbol deserialization enabled" do - before :each do - SafeYAML::OPTIONS[:deserialize_symbols] = true - end - - after :each do - SafeYAML.restore_defaults! - end - - it "translates values starting with ':' to symbols" do - parse "symbol: :value" - expect(result).to eq({ "symbol" => :value }) - end - - it "applies the same transformation to keys" do - parse ":bar: symbol" - expect(result).to eq({ :bar => "symbol" }) - end - - it "applies the same transformation to elements in sequences" do - parse "- :bar" - expect(result).to eq([:bar]) - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/safe_yaml_spec.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/safe_yaml_spec.rb deleted file mode 100644 index aa701a4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/safe_yaml_spec.rb +++ /dev/null @@ -1,731 +0,0 @@ -require "spec_helper" - -describe YAML do - def safe_load_round_trip(object, options={}) - yaml = object.to_yaml - if SafeYAML::YAML_ENGINE == "psych" - YAML.safe_load(yaml, nil, options) - else - YAML.safe_load(yaml, options) - end - end - - before :each do - # Need to require this here (as opposed to somewhere up higher in the file) - # to ensure that safe_yaml isn't loaded and therefore YAML isn't monkey- - # patched, for tests that require only safe_yaml/load. - require "safe_yaml" - require "exploitable_back_door" - - SafeYAML.restore_defaults! - end - - after :each do - SafeYAML.restore_defaults! - end - - describe "unsafe_load" do - if SafeYAML::YAML_ENGINE == "psych" && RUBY_VERSION >= "1.9.3" - it "allows exploits through objects defined in YAML w/ !ruby/hash via custom :[]= methods" do - backdoor = YAML.unsafe_load("--- !ruby/hash:ExploitableBackDoor\nfoo: bar\n") - expect(backdoor).to be_exploited_through_setter - end - - it "allows exploits through objects defined in YAML w/ !ruby/object via the :init_with method" do - backdoor = YAML.unsafe_load("--- !ruby/object:ExploitableBackDoor\nfoo: bar\n") - expect(backdoor).to be_exploited_through_init_with - end - end - - it "allows exploits through objects w/ sensitive instance variables defined in YAML w/ !ruby/object" do - backdoor = YAML.unsafe_load("--- !ruby/object:ExploitableBackDoor\nfoo: bar\n") - expect(backdoor).to be_exploited_through_ivars - end - - context "with special whitelisted tags defined" do - before :each do - SafeYAML::whitelist!(OpenStruct) - end - - it "effectively ignores the whitelist (since everything is whitelisted)" do - result = YAML.unsafe_load <<-YAML.unindent - --- !ruby/object:OpenStruct - table: - :backdoor: !ruby/object:ExploitableBackDoor - foo: bar - YAML - - expect(result).to be_a(OpenStruct) - expect(result.backdoor).to be_exploited_through_ivars - end - end - end - - describe "safe_load" do - it "does NOT allow exploits through objects defined in YAML w/ !ruby/hash" do - object = YAML.safe_load("--- !ruby/hash:ExploitableBackDoor\nfoo: bar\n") - expect(object).not_to be_a(ExploitableBackDoor) - end - - it "does NOT allow exploits through objects defined in YAML w/ !ruby/object" do - object = YAML.safe_load("--- !ruby/object:ExploitableBackDoor\nfoo: bar\n") - expect(object).not_to be_a(ExploitableBackDoor) - end - - context "for YAML engine #{SafeYAML::YAML_ENGINE}" do - if SafeYAML::YAML_ENGINE == "psych" - let(:options) { nil } - let(:arguments) { ["foo: bar", nil, options] } - - context "when no tags are whitelisted" do - it "constructs a SafeYAML::PsychHandler to resolve nodes as they're parsed, for optimal performance" do - expect(Psych::Parser).to receive(:new).with an_instance_of(SafeYAML::PsychHandler) - # This won't work now; we just want to ensure Psych::Parser#parse was in fact called. - YAML.safe_load(*arguments) rescue nil - end - end - - context "when whitelisted tags are specified" do - let(:options) { - { :whitelisted_tags => ["foo"] } - } - - it "instead uses Psych to construct a full tree before examining the nodes" do - expect(Psych).to receive(:parse) - # This won't work now; we just want to ensure Psych::Parser#parse was in fact called. - YAML.safe_load(*arguments) rescue nil - end - end - end - - if SafeYAML::YAML_ENGINE == "syck" - it "uses Syck internally to parse YAML" do - expect(YAML).to receive(:parse).with("foo: bar") - # This won't work now; we just want to ensure YAML::parse was in fact called. - YAML.safe_load("foo: bar") rescue nil - end - end - end - - it "loads a plain ol' YAML document just fine" do - result = YAML.safe_load <<-YAML.unindent - foo: - number: 1 - boolean: true - nil: ~ - string: Hello, there! - symbol: :blah - sequence: - - hi - - bye - YAML - - expect(result).to eq({ - "foo" => { - "number" => 1, - "boolean" => true, - "nil" => nil, - "string" => "Hello, there!", - "symbol" => ":blah", - "sequence" => ["hi", "bye"] - } - }) - end - - it "works for YAML documents with anchors and aliases" do - result = YAML.safe_load <<-YAML - - &id001 {} - - *id001 - - *id001 - YAML - - expect(result).to eq([{}, {}, {}]) - end - - it "works for YAML documents with binary tagged keys" do - result = YAML.safe_load <<-YAML - ? !!binary > - Zm9v - : "bar" - ? !!binary > - YmFy - : "baz" - YAML - - expect(result).to eq({"foo" => "bar", "bar" => "baz"}) - end - - it "works for YAML documents with binary tagged values" do - result = YAML.safe_load <<-YAML - "foo": !!binary > - YmFy - "bar": !!binary > - YmF6 - YAML - - expect(result).to eq({"foo" => "bar", "bar" => "baz"}) - end - - it "works for YAML documents with binary tagged array values" do - result = YAML.safe_load <<-YAML - - !binary |- - Zm9v - - !binary |- - YmFy - YAML - - expect(result).to eq(["foo", "bar"]) - end - - it "works for YAML documents with sections" do - result = YAML.safe_load <<-YAML - mysql: &mysql - adapter: mysql - pool: 30 - login: &login - username: user - password: password123 - development: &development - <<: *mysql - <<: *login - host: localhost - YAML - - expect(result).to eq({ - "mysql" => { - "adapter" => "mysql", - "pool" => 30 - }, - "login" => { - "username" => "user", - "password" => "password123" - }, - "development" => { - "adapter" => "mysql", - "pool" => 30, - "username" => "user", - "password" => "password123", - "host" => "localhost" - } - }) - end - - it "correctly prefers explicitly defined values over default values from included sections" do - # Repeating this test 100 times to increase the likelihood of running into an issue caused by - # non-deterministic hash key enumeration. - 100.times do - result = YAML.safe_load <<-YAML - defaults: &defaults - foo: foo - bar: bar - baz: baz - custom: - <<: *defaults - bar: custom_bar - baz: custom_baz - YAML - - expect(result["custom"]).to eq({ - "foo" => "foo", - "bar" => "custom_bar", - "baz" => "custom_baz" - }) - end - end - - it "works with multi-level inheritance" do - result = YAML.safe_load <<-YAML - defaults: &defaults - foo: foo - bar: bar - baz: baz - custom: &custom - <<: *defaults - bar: custom_bar - baz: custom_baz - grandcustom: &grandcustom - <<: *custom - YAML - - expect(result).to eq({ - "defaults" => { "foo" => "foo", "bar" => "bar", "baz" => "baz" }, - "custom" => { "foo" => "foo", "bar" => "custom_bar", "baz" => "custom_baz" }, - "grandcustom" => { "foo" => "foo", "bar" => "custom_bar", "baz" => "custom_baz" } - }) - end - - it "returns false when parsing an empty document" do - expect([ - YAML.safe_load(""), - YAML.safe_load(" "), - YAML.safe_load("\n") - ]).to eq([false, false, false]) - end - - it "returns nil when parsing a single value representing nil" do - expect([ - YAML.safe_load("~"), - YAML.safe_load("null") - ]).to eq([nil, nil]) - end - - context "with custom initializers defined" do - before :each do - if SafeYAML::YAML_ENGINE == "psych" - SafeYAML::OPTIONS[:custom_initializers] = { - "!set" => lambda { Set.new }, - "!hashiemash" => lambda { Hashie::Mash.new } - } - else - SafeYAML::OPTIONS[:custom_initializers] = { - "tag:yaml.org,2002:set" => lambda { Set.new }, - "tag:yaml.org,2002:hashiemash" => lambda { Hashie::Mash.new } - } - end - end - - it "will use a custom initializer to instantiate an array-like class upon deserialization" do - result = YAML.safe_load <<-YAML.unindent - --- !set - - 1 - - 2 - - 3 - YAML - - expect(result).to be_a(Set) - expect(result.to_a).to match_array([1, 2, 3]) - end - - it "will use a custom initializer to instantiate a hash-like class upon deserialization" do - result = YAML.safe_load <<-YAML.unindent - --- !hashiemash - foo: bar - YAML - - expect(result).to be_a(Hashie::Mash) - expect(result.to_hash).to eq({ "foo" => "bar" }) - end - end - - context "with special whitelisted tags defined" do - before :each do - SafeYAML::whitelist!(OpenStruct) - - # Necessary for deserializing OpenStructs properly. - SafeYAML::OPTIONS[:deserialize_symbols] = true - end - - it "will allow objects to be deserialized for whitelisted tags" do - result = YAML.safe_load("--- !ruby/object:OpenStruct\ntable:\n foo: bar\n") - expect(result).to be_a(OpenStruct) - expect(result.instance_variable_get(:@table)).to eq({ "foo" => "bar" }) - end - - it "will not deserialize objects without whitelisted tags" do - result = YAML.safe_load("--- !ruby/hash:ExploitableBackDoor\nfoo: bar\n") - expect(result).not_to be_a(ExploitableBackDoor) - expect(result).to eq({ "foo" => "bar" }) - end - - it "will not allow non-whitelisted objects to be embedded within objects with whitelisted tags" do - result = YAML.safe_load <<-YAML.unindent - --- !ruby/object:OpenStruct - table: - :backdoor: !ruby/object:ExploitableBackDoor - foo: bar - YAML - - expect(result).to be_a(OpenStruct) - expect(result.backdoor).not_to be_a(ExploitableBackDoor) - expect(result.backdoor).to eq({ "foo" => "bar" }) - end - - context "with the :raise_on_unknown_tag option enabled" do - before :each do - SafeYAML::OPTIONS[:raise_on_unknown_tag] = true - end - - after :each do - SafeYAML.restore_defaults! - end - - it "raises an exception if a non-nil, non-whitelisted tag is encountered" do - expect { - YAML.safe_load <<-YAML.unindent - --- !ruby/object:Unknown - foo: bar - YAML - }.to raise_error - end - - it "checks all tags, even those within objects with trusted tags" do - expect { - YAML.safe_load <<-YAML.unindent - --- !ruby/object:OpenStruct - table: - :backdoor: !ruby/object:Unknown - foo: bar - YAML - }.to raise_error - end - - it "does not raise an exception as long as all tags are whitelisted" do - result = YAML.safe_load <<-YAML.unindent - --- !ruby/object:OpenStruct - table: - :backdoor: - string: foo - integer: 1 - float: 3.14 - symbol: :bar - date: 2013-02-20 - array: [] - hash: {} - YAML - - expect(result).to be_a(OpenStruct) - expect(result.backdoor).to eq({ - "string" => "foo", - "integer" => 1, - "float" => 3.14, - "symbol" => :bar, - "date" => Date.parse("2013-02-20"), - "array" => [], - "hash" => {} - }) - end - - it "does not raise an exception on the non-specific '!' tag" do - result = nil - expect { result = YAML.safe_load "--- ! 'foo'" }.to_not raise_error - expect(result).to eq("foo") - end - - context "with whitelisted custom class" do - class SomeClass - attr_accessor :foo - end - let(:instance) { SomeClass.new } - - before do - SafeYAML::whitelist!(SomeClass) - instance.foo = 'with trailing whitespace: ' - end - - it "does not raise an exception on the non-specific '!' tag" do - result = nil - expect { result = YAML.safe_load(instance.to_yaml) }.to_not raise_error - expect(result.foo).to eq('with trailing whitespace: ') - end - end - end - end - - context "when options are passed direclty to #load which differ from the defaults" do - let(:default_options) { {} } - - before :each do - SafeYAML::OPTIONS.merge!(default_options) - end - - context "(for example, when symbol deserialization is enabled by default)" do - let(:default_options) { { :deserialize_symbols => true } } - - it "goes with the default option when it is not overridden" do - silence_warnings do - expect(YAML.load(":foo: bar")).to eq({ :foo => "bar" }) - end - end - - it "allows the default option to be overridden on a per-call basis" do - silence_warnings do - expect(YAML.load(":foo: bar", :deserialize_symbols => false)).to eq({ ":foo" => "bar" }) - expect(YAML.load(":foo: bar", :deserialize_symbols => true)).to eq({ :foo => "bar" }) - end - end - end - - context "(or, for example, when certain tags are whitelisted)" do - let(:default_options) { - { - :deserialize_symbols => true, - :whitelisted_tags => SafeYAML::YAML_ENGINE == "psych" ? - ["!ruby/object:OpenStruct"] : - ["tag:ruby.yaml.org,2002:object:OpenStruct"] - } - } - - it "goes with the default option when it is not overridden" do - result = safe_load_round_trip(OpenStruct.new(:foo => "bar")) - expect(result).to be_a(OpenStruct) - expect(result.foo).to eq("bar") - end - - it "allows the default option to be overridden on a per-call basis" do - result = safe_load_round_trip(OpenStruct.new(:foo => "bar"), :whitelisted_tags => []) - expect(result).to eq({ "table" => { :foo => "bar" } }) - - result = safe_load_round_trip(OpenStruct.new(:foo => "bar"), :deserialize_symbols => false, :whitelisted_tags => []) - expect(result).to eq({ "table" => { ":foo" => "bar" } }) - end - end - end - end - - describe "unsafe_load_file" do - if SafeYAML::YAML_ENGINE == "psych" && RUBY_VERSION >= "1.9.3" - it "allows exploits through objects defined in YAML w/ !ruby/hash via custom :[]= methods" do - backdoor = YAML.unsafe_load_file "spec/exploit.1.9.3.yaml" - expect(backdoor).to be_exploited_through_setter - end - end - - if SafeYAML::YAML_ENGINE == "psych" && RUBY_VERSION >= "1.9.2" - it "allows exploits through objects defined in YAML w/ !ruby/object via the :init_with method" do - backdoor = YAML.unsafe_load_file "spec/exploit.1.9.2.yaml" - expect(backdoor).to be_exploited_through_init_with - end - end - - it "allows exploits through objects w/ sensitive instance variables defined in YAML w/ !ruby/object" do - backdoor = YAML.unsafe_load_file "spec/exploit.1.9.2.yaml" - expect(backdoor).to be_exploited_through_ivars - end - end - - describe "safe_load_file" do - it "does NOT allow exploits through objects defined in YAML w/ !ruby/hash" do - object = YAML.safe_load_file "spec/exploit.1.9.3.yaml" - expect(object).not_to be_a(ExploitableBackDoor) - end - - it "does NOT allow exploits through objects defined in YAML w/ !ruby/object" do - object = YAML.safe_load_file "spec/exploit.1.9.2.yaml" - expect(object).not_to be_a(ExploitableBackDoor) - end - - it "returns false when parsing an empty file" do - expect(YAML.safe_load_file("spec/issue49.yml")).to eq(false) - end - end - - describe "load" do - let(:options) { {} } - - let (:arguments) { - if SafeYAML::MULTI_ARGUMENT_YAML_LOAD - ["foo: bar", nil, options] - else - ["foo: bar", options] - end - } - - context "as long as a :default_mode has been specified" do - it "doesn't issue a warning for safe mode, since an explicit mode has been set" do - SafeYAML::OPTIONS[:default_mode] = :safe - expect(Kernel).not_to receive(:warn) - YAML.load(*arguments) - end - - it "doesn't issue a warning for unsafe mode, since an explicit mode has been set" do - SafeYAML::OPTIONS[:default_mode] = :unsafe - expect(Kernel).not_to receive(:warn) - YAML.load(*arguments) - end - end - - context "when the :safe options is specified" do - let(:safe_mode) { true } - let(:options) { { :safe => safe_mode } } - - it "doesn't issue a warning" do - expect(Kernel).not_to receive(:warn) - YAML.load(*arguments) - end - - it "calls #safe_load if the :safe option is set to true" do - expect(YAML).to receive(:safe_load) - YAML.load(*arguments) - end - - context "when the :safe option is set to false" do - let(:safe_mode) { false } - - it "calls #unsafe_load if the :safe option is set to false" do - expect(YAML).to receive(:unsafe_load) - YAML.load(*arguments) - end - end - end - - it "issues a warning when the :safe option is omitted" do - silence_warnings do - expect(Kernel).to receive(:warn) - YAML.load(*arguments) - end - end - - it "only issues a warning once (to avoid spamming an app's output)" do - silence_warnings do - expect(Kernel).to receive(:warn).once - 2.times { YAML.load(*arguments) } - end - end - - it "defaults to safe mode if the :safe option is omitted" do - silence_warnings do - expect(YAML).to receive(:safe_load) - YAML.load(*arguments) - end - end - - context "with the default mode set to :unsafe" do - before :each do - SafeYAML::OPTIONS[:default_mode] = :unsafe - end - - it "defaults to unsafe mode if the :safe option is omitted" do - silence_warnings do - expect(YAML).to receive(:unsafe_load) - YAML.load(*arguments) - end - end - - it "calls #safe_load if the :safe option is set to true" do - expect(YAML).to receive(:safe_load) - YAML.load(*(arguments + [{ :safe => true }])) - end - end - end - - describe "load_file" do - let(:filename) { "spec/exploit.1.9.2.yaml" } # doesn't really matter - - it "issues a warning if the :safe option is omitted" do - silence_warnings do - expect(Kernel).to receive(:warn) - YAML.load_file(filename) - end - end - - it "doesn't issue a warning as long as the :safe option is specified" do - expect(Kernel).not_to receive(:warn) - YAML.load_file(filename, :safe => true) - end - - it "defaults to safe mode if the :safe option is omitted" do - silence_warnings do - expect(YAML).to receive(:safe_load_file) - YAML.load_file(filename) - end - end - - it "calls #safe_load_file if the :safe option is set to true" do - expect(YAML).to receive(:safe_load_file) - YAML.load_file(filename, :safe => true) - end - - it "calls #unsafe_load_file if the :safe option is set to false" do - expect(YAML).to receive(:unsafe_load_file) - YAML.load_file(filename, :safe => false) - end - - context "with arbitrary object deserialization enabled by default" do - before :each do - SafeYAML::OPTIONS[:default_mode] = :unsafe - end - - it "defaults to unsafe mode if the :safe option is omitted" do - silence_warnings do - expect(YAML).to receive(:unsafe_load_file) - YAML.load_file(filename) - end - end - - it "calls #safe_load if the :safe option is set to true" do - expect(YAML).to receive(:safe_load_file) - YAML.load_file(filename, :safe => true) - end - end - - it "handles files starting with --- (see issue #48)" do - expect(YAML.load_file("spec/issue48.txt", :safe => true)).to eq({ - "title" => "Blah", - "key" => "value" - }) - end - - it "handles content starting with --- (see issue #48)" do - yaml = File.read("spec/issue48.txt") - expect(YAML.load(yaml, :safe => true)).to eq({ - "title" => "Blah", - "key" => "value" - }) - end - end - - describe "whitelist!" do - context "not a class" do - it "should raise" do - expect { SafeYAML::whitelist! :foo }.to raise_error(/not a Class/) - expect(SafeYAML::OPTIONS[:whitelisted_tags]).to be_empty - end - end - - context "anonymous class" do - it "should raise" do - expect { SafeYAML::whitelist! Class.new }.to raise_error(/cannot be anonymous/) - expect(SafeYAML::OPTIONS[:whitelisted_tags]).to be_empty - end - end - - context "with a Class as its argument" do - it "should configure correctly" do - expect { SafeYAML::whitelist! OpenStruct }.to_not raise_error - expect(SafeYAML::OPTIONS[:whitelisted_tags].grep(/OpenStruct\Z/)).not_to be_empty - end - - it "successfully deserializes the specified class" do - SafeYAML.whitelist!(OpenStruct) - - # necessary for properly assigning OpenStruct attributes - SafeYAML::OPTIONS[:deserialize_symbols] = true - - result = safe_load_round_trip(OpenStruct.new(:foo => "bar")) - expect(result).to be_a(OpenStruct) - expect(result.foo).to eq("bar") - end - - it "works for ranges" do - SafeYAML.whitelist!(Range) - expect(safe_load_round_trip(1..10)).to eq(1..10) - end - - it "works for regular expressions" do - SafeYAML.whitelist!(Regexp) - expect(safe_load_round_trip(/foo/)).to eq(/foo/) - end - - it "works for multiple classes" do - SafeYAML.whitelist!(Range, Regexp) - expect(safe_load_round_trip([(1..10), /bar/])).to eq([(1..10), /bar/]) - end - - it "works for arbitrary Exception subclasses" do - class CustomException < Exception - attr_reader :custom_message - - def initialize(custom_message) - @custom_message = custom_message - end - end - - SafeYAML.whitelist!(CustomException) - - ex = safe_load_round_trip(CustomException.new("blah")) - expect(ex).to be_a(CustomException) - expect(ex.custom_message).to eq("blah") - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/spec_helper.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/spec_helper.rb deleted file mode 100644 index 967b2d3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/spec_helper.rb +++ /dev/null @@ -1,42 +0,0 @@ -HERE = File.dirname(__FILE__) unless defined?(HERE) -ROOT = File.join(HERE, "..") unless defined?(ROOT) - -$LOAD_PATH << File.join(ROOT, "lib") -$LOAD_PATH << File.join(HERE, "support") - -require "yaml" -if ENV["YAMLER"] && defined?(YAML::ENGINE) - YAML::ENGINE.yamler = ENV["YAMLER"] -end - -ruby_version = defined?(JRUBY_VERSION) ? "JRuby #{JRUBY_VERSION} in #{RUBY_VERSION} mode" : "Ruby #{RUBY_VERSION}" -yaml_engine = defined?(YAML::ENGINE) ? YAML::ENGINE.yamler : "syck" -libyaml_version = yaml_engine == "psych" && Psych.const_defined?("LIBYAML_VERSION", false) ? Psych::LIBYAML_VERSION : "N/A" - -env_info = [ - ruby_version, - "YAML: #{yaml_engine} (#{YAML::VERSION}) (libyaml: #{libyaml_version})", - "Monkeypatch: #{ENV['MONKEYPATCH_YAML']}" -] - -puts env_info.join(", ") - -# Caching references to these methods before loading safe_yaml in order to test -# that they aren't touched unless you actually require safe_yaml (see yaml_spec.rb). -ORIGINAL_YAML_LOAD = YAML.method(:load) -ORIGINAL_YAML_LOAD_FILE = YAML.method(:load_file) - -require "safe_yaml/load" -require "ostruct" -require "hashie" -require "heredoc_unindent" - -# Stolen from Rails: -# https://github.com/rails/rails/blob/3-2-stable/activesupport/lib/active_support/core_ext/kernel/reporting.rb#L10-25 -def silence_warnings - $VERBOSE = nil; yield -ensure - $VERBOSE = true -end - -require File.join(HERE, "resolver_specs") diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/support/exploitable_back_door.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/support/exploitable_back_door.rb deleted file mode 100644 index 48754b4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/support/exploitable_back_door.rb +++ /dev/null @@ -1,29 +0,0 @@ -class ExploitableBackDoor - def exploited? - @exploited_through_setter || @exploited_through_init_with || @exploited_through_ivars - end - - def exploited_through_setter? - @exploited_through_setter - end - - def exploited_through_init_with? - @exploited_through_init_with - end - - def exploited_through_ivars? - self.instance_variables.any? - end - - def init_with(command) - # Note: this is how bad this COULD be. - # system("#{command}") - @exploited_through_init_with = true - end - - def []=(command, arguments) - # Note: this is how bad this COULD be. - # system("#{command} #{arguments}") - @exploited_through_setter = true - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/syck_resolver_spec.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/syck_resolver_spec.rb deleted file mode 100644 index bec729b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/syck_resolver_spec.rb +++ /dev/null @@ -1,10 +0,0 @@ -require "spec_helper" - -if SafeYAML::YAML_ENGINE == "syck" - require "safe_yaml/syck_resolver" - - describe SafeYAML::SyckResolver do - include ResolverSpecs - let(:resolver) { SafeYAML::SyckResolver.new } - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/transform/base64_spec.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/transform/base64_spec.rb deleted file mode 100644 index f4d83d0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/transform/base64_spec.rb +++ /dev/null @@ -1,11 +0,0 @@ -require "spec_helper" - -describe SafeYAML::Transform do - it "should return the same encoding when decoding Base64" do - value = "c3VyZS4=" - decoded = SafeYAML::Transform.to_proper_type(value, false, "!binary") - - expect(decoded).to eq("sure.") - expect(decoded.encoding).to eq(value.encoding) if decoded.respond_to?(:encoding) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/transform/to_date_spec.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/transform/to_date_spec.rb deleted file mode 100644 index 31bdb41..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/transform/to_date_spec.rb +++ /dev/null @@ -1,60 +0,0 @@ -require "spec_helper" - -describe SafeYAML::Transform::ToDate do - it "returns true when the value matches a valid Date" do - expect(subject.transform?("2013-01-01")).to eq([true, Date.parse("2013-01-01")]) - end - - it "returns false when the value does not match a valid Date" do - expect(subject.transform?("foobar")).to be_falsey - end - - it "returns false when the value does not end with a Date" do - expect(subject.transform?("2013-01-01\nNOT A DATE")).to be_falsey - end - - it "returns false when the value does not begin with a Date" do - expect(subject.transform?("NOT A DATE\n2013-01-01")).to be_falsey - end - - it "correctly parses the remaining formats of the YAML spec" do - equivalent_values = [ - "2001-12-15T02:59:43.1Z", # canonical - "2001-12-14t21:59:43.10-05:00", # iso8601 - "2001-12-14 21:59:43.10 -5", # space separated - "2001-12-15 2:59:43.10" # no time zone (Z) - ] - - equivalent_values.each do |value| - success, result = subject.transform?(value) - expect(success).to be_truthy - expect(result).to eq(Time.utc(2001, 12, 15, 2, 59, 43, 100000)) - end - end - - it "converts times to the local timezone" do - success, result = subject.transform?("2012-12-01 10:33:45 +11:00") - expect(success).to be_truthy - expect(result).to eq(Time.utc(2012, 11, 30, 23, 33, 45)) - expect(result.gmt_offset).to eq(Time.local(2012, 11, 30).gmt_offset) - end - - it "returns strings for invalid dates" do - expect(subject.transform?("0000-00-00")).to eq([true, "0000-00-00"]) - expect(subject.transform?("2013-13-01")).to eq([true, "2013-13-01"]) - expect(subject.transform?("2014-01-32")).to eq([true, "2014-01-32"]) - end - - it "returns strings for invalid date/times" do - expect(subject.transform?("0000-00-00 00:00:00 -0000")).to eq([true, "0000-00-00 00:00:00 -0000"]) - expect(subject.transform?("2013-13-01 21:59:43 -05:00")).to eq([true, "2013-13-01 21:59:43 -05:00"]) - expect(subject.transform?("2013-01-32 21:59:43 -05:00")).to eq([true, "2013-01-32 21:59:43 -05:00"]) - expect(subject.transform?("2013-01-30 25:59:43 -05:00")).to eq([true, "2013-01-30 25:59:43 -05:00"]) - expect(subject.transform?("2013-01-30 21:69:43 -05:00")).to eq([true, "2013-01-30 21:69:43 -05:00"]) - - # Interesting. It seems that in some older Ruby versions, the below actually parses successfully - # w/ DateTime.parse; but it fails w/ YAML.load. Whom to follow??? - - # subject.transform?("2013-01-30 21:59:63 -05:00").should == [true, "2013-01-30 21:59:63 -05:00"] - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/transform/to_float_spec.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/transform/to_float_spec.rb deleted file mode 100644 index d4d813f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/transform/to_float_spec.rb +++ /dev/null @@ -1,42 +0,0 @@ -require "spec_helper" - -describe SafeYAML::Transform::ToFloat do - it "returns true when the value matches a valid Float" do - expect(subject.transform?("20.00")).to eq([true, 20.0]) - end - - it "returns false when the value does not match a valid Float" do - expect(subject.transform?("foobar")).to be_falsey - end - - it "returns false when the value spans multiple lines" do - expect(subject.transform?("20.00\nNOT A FLOAT")).to be_falsey - end - - it "correctly parses all formats in the YAML spec" do - # canonical - expect(subject.transform?("6.8523015e+5")).to eq([true, 685230.15]) - - # exponentioal - expect(subject.transform?("685.230_15e+03")).to eq([true, 685230.15]) - - # fixed - expect(subject.transform?("685_230.15")).to eq([true, 685230.15]) - - # sexagesimal - expect(subject.transform?("190:20:30.15")).to eq([true, 685230.15]) - - # infinity - expect(subject.transform?("-.inf")).to eq([true, (-1.0 / 0.0)]) - - # not a number - # NOTE: can't use == here since NaN != NaN - success, result = subject.transform?(".NaN") - expect(success).to be_truthy; expect(result).to be_nan - end - - # issue 29 - it "returns false for the string '.'" do - expect(subject.transform?(".")).to be_falsey - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/transform/to_integer_spec.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/transform/to_integer_spec.rb deleted file mode 100644 index 6c6723b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/transform/to_integer_spec.rb +++ /dev/null @@ -1,64 +0,0 @@ -require "spec_helper" - -describe SafeYAML::Transform::ToInteger do - it "returns true when the value matches a valid Integer" do - expect(subject.transform?("10")).to eq([true, 10]) - end - - it "returns false when the value does not match a valid Integer" do - expect(subject.transform?("foobar")).to be_falsey - end - - it "returns false when the value spans multiple lines" do - expect(subject.transform?("10\nNOT AN INTEGER")).to be_falsey - end - - it "allows commas in the number" do - expect(subject.transform?("1,000")).to eq([true, 1000]) - end - - it "correctly parses numbers in octal format" do - expect(subject.transform?("010")).to eq([true, 8]) - end - - it "correctly parses numbers in hexadecimal format" do - expect(subject.transform?("0x1FF")).to eq([true, 511]) - end - - it "defaults to a string for a number that resembles octal format but is not" do - expect(subject.transform?("09")).to be_falsey - end - - it "correctly parses 0 in decimal" do - expect(subject.transform?("0")).to eq([true, 0]) - end - - it "defaults to a string for a number that resembles hexadecimal format but is not" do - expect(subject.transform?("0x1G")).to be_falsey - end - - it "correctly parses all formats in the YAML spec" do - # canonical - expect(subject.transform?("685230")).to eq([true, 685230]) - - # decimal - expect(subject.transform?("+685_230")).to eq([true, 685230]) - - # octal - expect(subject.transform?("02472256")).to eq([true, 685230]) - - # hexadecimal: - expect(subject.transform?("0x_0A_74_AE")).to eq([true, 685230]) - - # binary - expect(subject.transform?("0b1010_0111_0100_1010_1110")).to eq([true, 685230]) - - # sexagesimal - expect(subject.transform?("190:20:30")).to eq([true, 685230]) - end - - # see https://github.com/dtao/safe_yaml/pull/51 - it "strips out underscores before parsing decimal values" do - expect(subject.transform?("_850_")).to eq([true, 850]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/transform/to_symbol_spec.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/transform/to_symbol_spec.rb deleted file mode 100644 index 59cd242..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/transform/to_symbol_spec.rb +++ /dev/null @@ -1,51 +0,0 @@ -require "spec_helper" - -describe SafeYAML::Transform::ToSymbol do - def with_symbol_deserialization_value(value) - symbol_deserialization_flag = SafeYAML::OPTIONS[:deserialize_symbols] - SafeYAML::OPTIONS[:deserialize_symbols] = value - - yield - - ensure - SafeYAML::OPTIONS[:deserialize_symbols] = symbol_deserialization_flag - end - - def with_symbol_deserialization(&block) - with_symbol_deserialization_value(true, &block) - end - - def without_symbol_deserialization(&block) - with_symbol_deserialization_value(false, &block) - end - - it "returns true when the value matches a valid Symbol" do - with_symbol_deserialization { expect(subject.transform?(":foo")[0]).to be_truthy } - end - - it "returns true when the value matches a valid String+Symbol" do - with_symbol_deserialization { expect(subject.transform?(':"foo"')[0]).to be_truthy } - end - - it "returns true when the value matches a valid String+Symbol with 's" do - with_symbol_deserialization { expect(subject.transform?(":'foo'")[0]).to be_truthy } - end - - it "returns true when the value has special characters and is wrapped in a String" do - with_symbol_deserialization { expect(subject.transform?(':"foo.bar"')[0]).to be_truthy } - end - - it "returns false when symbol deserialization is disabled" do - without_symbol_deserialization { expect(subject.transform?(":foo")).to be_falsey } - end - - it "returns false when the value does not match a valid Symbol" do - with_symbol_deserialization { expect(subject.transform?("foo")).to be_falsey } - end - - it "returns false when the symbol does not begin the line" do - with_symbol_deserialization do - expect(subject.transform?("NOT A SYMBOL\n:foo")).to be_falsey - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/yaml_spec.rb b/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/yaml_spec.rb deleted file mode 100644 index 2c2bd18..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/safe_yaml-1.0.4/spec/yaml_spec.rb +++ /dev/null @@ -1,15 +0,0 @@ -# See https://github.com/dtao/safe_yaml/issues/47 - -require "spec_helper" - -describe YAML do - context "when you've only required safe_yaml/load", :libraries => true do - it "YAML.load doesn't get monkey patched" do - expect(YAML.method(:load)).to eq(ORIGINAL_YAML_LOAD) - end - - it "YAML.load_file doesn't get monkey patched" do - expect(YAML.method(:load_file)).to eq(ORIGINAL_YAML_LOAD_FILE) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/.yardopts b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/.yardopts deleted file mode 100644 index 1d14215..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/.yardopts +++ /dev/null @@ -1,11 +0,0 @@ ---readme README.md ---markup markdown ---markup-provider maruku ---default-return "" ---title "Sass Documentation" ---query 'object.type != :classvariable' ---query 'object.type != :constant || @api && @api.text == "public"' ---hide-void-return ---protected ---no-private ---no-highlight diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/CONTRIBUTING.md b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/CONTRIBUTING.md deleted file mode 100644 index fbd21ba..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/CONTRIBUTING.md +++ /dev/null @@ -1,3 +0,0 @@ -Contributions are welcomed. Please see the following sites for guidelines: - -[http://sass-lang.com/community#Contribute](http://sass-lang.com/community#Contribute) diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/MIT-LICENSE b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/MIT-LICENSE deleted file mode 100644 index 9854495..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/MIT-LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2006-2014 Hampton Catlin, Natalie Weizenbaum, and Chris Eppstein - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/README.md b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/README.md deleted file mode 100644 index c4fee13..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/README.md +++ /dev/null @@ -1,221 +0,0 @@ -# Sass [![Gem Version](https://badge.fury.io/rb/sass.png)](http://badge.fury.io/rb/sass) [![Inline docs](http://inch-ci.org/github/sass/sass.svg)](http://inch-ci.org/github/sass/sass) - -**Sass makes CSS fun again**. Sass is an extension of CSS3, -adding nested rules, variables, mixins, selector inheritance, and more. -It's translated to well-formatted, standard CSS -using the command line tool or a web-framework plugin. - -Sass has two syntaxes. The new main syntax (as of Sass 3) -is known as "SCSS" (for "Sassy CSS"), -and is a superset of CSS3's syntax. -This means that every valid CSS3 stylesheet is valid SCSS as well. -SCSS files use the extension `.scss`. - -The second, older syntax is known as the indented syntax (or just "Sass"). -Inspired by Haml's terseness, it's intended for people -who prefer conciseness over similarity to CSS. -Instead of brackets and semicolons, -it uses the indentation of lines to specify blocks. -Although no longer the primary syntax, -the indented syntax will continue to be supported. -Files in the indented syntax use the extension `.sass`. - -## Using - -Sass can be used from the command line -or as part of a web framework. -The first step is to install the gem: - - gem install sass - -After you convert some CSS to Sass, you can run - - sass style.scss - -to compile it back to CSS. -For more information on these commands, check out - - sass --help - -To install Sass in Rails 2, -just add `config.gem "sass"` to `config/environment.rb`. -In Rails 3, add `gem "sass"` to your Gemfile instead. -`.sass` or `.scss` files should be placed in `public/stylesheets/sass`, -where they'll be automatically compiled -to corresponding CSS files in `public/stylesheets` when needed -(the Sass template directory is customizable... -see [the Sass reference](http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#template_location-option) for details). - -Sass can also be used with any Rack-enabled web framework. -To do so, just add - -```ruby -require 'sass/plugin/rack' -use Sass::Plugin::Rack -``` - -to `config.ru`. -Then any Sass files in `public/stylesheets/sass` -will be compiled into CSS files in `public/stylesheets` on every request. - -To use Sass programmatically, -check out the [YARD documentation](http://sass-lang.com/documentation/file.SASS_REFERENCE.html#using_sass). - -## Formatting - -Sass is an extension of CSS -that adds power and elegance to the basic language. -It allows you to use [variables][vars], [nested rules][nested], -[mixins][mixins], [inline imports][imports], -and more, all with a fully CSS-compatible syntax. -Sass helps keep large stylesheets well-organized, -and get small stylesheets up and running quickly, -particularly with the help of -[the Compass style library](http://compass-style.org). - -[vars]: http://sass-lang.com/documentation/file.SASS_REFERENCE.html#variables_ -[nested]: http://sass-lang.com/documentation/file.SASS_REFERENCE.html#nested_rules -[mixins]: http://sass-lang.com/documentation/file.SASS_REFERENCE.html#mixins -[imports]: http://sass-lang.com/documentation/file.SASS_REFERENCE.html#import - -Sass has two syntaxes. -The one presented here, known as "SCSS" (for "Sassy CSS"), -is fully CSS-compatible. -The other (older) syntax, known as the indented syntax or just "Sass", -is whitespace-sensitive and indentation-based. -For more information, see the [reference documentation][syntax]. - -[syntax]: http://sass-lang.com/documentation/file.SASS_REFERENCE.html#syntax - -To run the following examples and see the CSS they produce, -put them in a file called `test.scss` and run `sass test.scss`. - -### Nesting - -Sass avoids repetition by nesting selectors within one another. -The same thing works for properties. - -```scss -table.hl { - margin: 2em 0; - td.ln { text-align: right; } -} - -li { - font: { - family: serif; - weight: bold; - size: 1.2em; - } -} -``` - -### Variables - -Use the same color all over the place? -Need to do some math with height and width and text size? -Sass supports variables, math operations, and many useful functions. - -```scss -$blue: #3bbfce; -$margin: 16px; - -.content_navigation { - border-color: $blue; - color: darken($blue, 10%); -} - -.border { - padding: $margin / 2; - margin: $margin / 2; - border-color: $blue; -} -``` - -### Mixins - -Even more powerful than variables, -mixins allow you to re-use whole chunks of CSS, -properties or selectors. -You can even give them arguments. - -```scss -@mixin table-scaffolding { - th { - text-align: center; - font-weight: bold; - } - td, th { padding: 2px; } -} - -@mixin left($dist) { - float: left; - margin-left: $dist; -} - -#data { - @include left(10px); - @include table-scaffolding; -} -``` - -A comprehensive list of features is available -in the [Sass reference](http://sass-lang.com/documentation/file.SASS_REFERENCE.html). - -## Executables - -The Sass gem includes several executables that are useful -for dealing with Sass from the command line. - -### `sass` - -The `sass` executable transforms a source Sass file into CSS. -See `sass --help` for further information and options. - -### `sass-convert` - -The `sass-convert` executable converts between CSS, Sass, and SCSS. -When converting from CSS to Sass or SCSS, -nesting is applied where appropriate. -See `sass-convert --help` for further information and options. - -### Running locally - -To run the Sass executables from a source checkout instead of from rubygems: - -``` -$ cd -$ bundle -$ bundle exec sass ... -$ bundle exec scss ... -$ bundle exec sass-convert ... -``` - -## Authors - -Sass was envisioned by [Hampton Catlin](http://www.hamptoncatlin.com) -(@hcatlin). However, Hampton doesn't even know his way around the code anymore -and now occasionally consults on the language issues. Hampton lives in San -Francisco, California and works as VP of Technology -at [Moovweb](http://www.moovweb.com/). - -[Natalie Weizenbaum](http://nex-3.com) is the primary developer and architect of -Sass. Her hard work has kept the project alive by endlessly answering forum -posts, fixing bugs, refactoring, finding speed improvements, writing -documentation, implementing new features, and getting Hampton coffee (a fitting -task for a girl genius). Natalie lives in Seattle, Washington and works on -[Dart](http://dartlang.org) application libraries at Google. - -[Chris Eppstein](http://acts-as-architect.blogspot.com) is a core contributor to -Sass and the creator of Compass, the first Sass-based framework. Chris focuses -on making Sass more powerful, easy to use, and on ways to speed its adoption -through the web development community. Chris lives in San Jose, California with -his wife and daughter. He is an Engineer for -[LinkedIn.com](http://linkedin.com), where one of his responsibilities is to -maintain Sass & Compass. - -If you use this software, you must pay Hampton a compliment. And buy Natalie -some candy. Maybe pet a kitten. Yeah. Pet that kitty. - -Beyond that, the implementation is licensed under the MIT License. -Okay, fine, I guess that means compliments aren't __required__. diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/REVISION b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/REVISION deleted file mode 100644 index 54798d6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/REVISION +++ /dev/null @@ -1 +0,0 @@ -(release) diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/Rakefile b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/Rakefile deleted file mode 100644 index 07d076f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/Rakefile +++ /dev/null @@ -1,370 +0,0 @@ -require 'rubygems/package' - -# ----- Utility Functions ----- - -def scope(path) - File.join(File.dirname(__FILE__), path) -end - -# ----- Default: Testing ------ - -task :default => :test - -require 'rake/testtask' - -Rake::TestTask.new do |t| - t.libs << 'test' - test_files = FileList[scope('test/**/*_test.rb')] - test_files.exclude(scope('test/rails/*')) - test_files.exclude(scope('test/plugins/*')) - t.test_files = test_files - t.verbose = true -end - -# ----- Code Style Enforcement ----- - -if RUBY_VERSION !~ /^(1\.8)/ && (ENV.has_key?("RUBOCOP") && ENV["RUBOCOP"] == "true" || !(ENV.has_key?("RUBOCOP") || ENV.has_key?("TEST"))) - require 'rubocop/rake_task' - Rubocop::RakeTask.new do |t| - t.patterns = FileList["lib/**/*"] - end -else - task :rubocop do - puts "Skipping rubocop style check." - if !ENV.has_key?("RUBOCOP") - puts "Passing this check is required in order for your patch to be accepted." - puts "Use ruby 1.9 or greater and then run the style check with: rake rubocop" - end - end -end - -task :test => :rubocop - -# ----- Packaging ----- - -# Don't use Rake::GemPackageTast because we want prerequisites to run -# before we load the gemspec. -desc "Build all the packages." -task :package => [:revision_file, :date_file, :submodules, :permissions] do - version = get_version - File.open(scope('VERSION'), 'w') {|f| f.puts(version)} - load scope('sass.gemspec') - Gem::Package.build(SASS_GEMSPEC) - sh %{git checkout VERSION} - - pkg = "#{SASS_GEMSPEC.name}-#{SASS_GEMSPEC.version}" - mkdir_p "pkg" - verbose(true) {mv "#{pkg}.gem", "pkg/#{pkg}.gem"} - - sh %{rm -f pkg/#{pkg}.tar.gz} - verbose(false) {SASS_GEMSPEC.files.each {|f| sh %{tar rf pkg/#{pkg}.tar #{f}}}} - sh %{gzip pkg/#{pkg}.tar} -end - -task :permissions do - sh %{chmod -R a+rx bin} - sh %{chmod -R a+r .} - require 'shellwords' - Dir.glob('test/**/*_test.rb') do |file| - next if file =~ %r{^test/haml/spec/} - sh %{chmod a+rx #{file}} - end -end - -task :revision_file do - require scope('lib/sass') - - release = Rake.application.top_level_tasks.include?('release') || File.exist?(scope('EDGE_GEM_VERSION')) - if Sass.version[:rev] && !release - File.open(scope('REVISION'), 'w') { |f| f.puts Sass.version[:rev] } - elsif release - File.open(scope('REVISION'), 'w') { |f| f.puts "(release)" } - else - File.open(scope('REVISION'), 'w') { |f| f.puts "(unknown)" } - end -end - -task :date_file do - File.open(scope('VERSION_DATE'), 'w') do |f| - f.puts Time.now.utc.strftime('%d %B %Y %T %Z') - end -end - -# We also need to get rid of this file after packaging. -at_exit do - File.delete(scope('REVISION')) rescue nil - File.delete(scope('VERSION_DATE')) rescue nil -end - -desc "Install Sass as a gem. Use SUDO=1 to install with sudo." -task :install => [:package] do - gem = RUBY_PLATFORM =~ /java/ ? 'jgem' : 'gem' - sh %{#{'sudo ' if ENV["SUDO"]}#{gem} install --no-ri pkg/sass-#{get_version}} -end - -desc "Release a new Sass package to RubyGems.org." -task :release => [:check_release, :package] do - name = File.read(scope("VERSION_NAME")).strip - version = File.read(scope("VERSION")).strip - sh %{gem push pkg/sass-#{version}.gem} -end - -# Ensures that the VERSION file has been updated for a new release. -task :check_release do - version = File.read(scope("VERSION")).strip - raise "There have been changes since current version (#{version})" if changed_since?(version) - raise "VERSION_NAME must not be 'Bleeding Edge'" if File.read(scope("VERSION_NAME")) == "Bleeding Edge" -end - -# Reads a password from the command line. -# -# @param name [String] The prompt to use to read the password -def read_password(prompt) - require 'readline' - system "stty -echo" - Readline.readline("#{prompt}: ").strip -ensure - system "stty echo" - puts -end - -# Returns whether or not the repository, or specific files, -# has/have changed since a given revision. -# -# @param rev [String] The revision to check against -# @param files [Array] The files to check. -# If this is empty, checks the entire repository -def changed_since?(rev, *files) - IO.popen("git diff --exit-code #{rev} #{files.join(' ')}") {} - return !$?.success? -end - -task :submodules do - if File.exist?(File.dirname(__FILE__) + "/.git") - sh %{git submodule sync} - sh %{git submodule update --init} - elsif !File.exist?(File.dirname(__FILE__) + "/vendor/listen/lib") - warn < :yard - task :redoc => :yard -rescue LoadError - desc "Generate Documentation" - task :doc => :rdoc - task :yard => :rdoc -end - -task :pages do - ensure_git_cleanup do - puts "#{'=' * 50} Running rake pages" - sh %{git checkout sass-pages} - sh %{git reset --hard origin/sass-pages} - - Dir.chdir("/var/www/sass-pages") do - sh %{git fetch origin} - - sh %{git checkout stable} - sh %{git reset --hard origin/stable} - - sh %{git checkout sass-pages} - sh %{git reset --hard origin/sass-pages} - sh %{rake build --trace} - sh %{mkdir -p tmp} - sh %{touch tmp/restart.txt} - end - end -end - -# ----- Coverage ----- - -begin - require 'rcov/rcovtask' - - Rcov::RcovTask.new do |t| - t.test_files = FileList[scope('test/**/*_test.rb')] - t.rcov_opts << '-x' << '"^\/"' - if ENV['NON_NATIVE'] - t.rcov_opts << "--no-rcovrt" - end - t.verbose = true - end -rescue LoadError; end - -# ----- Profiling ----- - -begin - require 'ruby-prof' - - desc < e - IO.popen("sendmail nex342@gmail.com", "w") do |sm| - sm << "From: nex3@nex-3.com\n" << - "To: nex342@gmail.com\n" << - "Subject: Exception when running rake #{Rake.application.top_level_tasks.join(', ')}\n" << - e.message << "\n\n" << - e.backtrace.join("\n") - end -ensure - raise e if e -end - -def ensure_git_cleanup - email_on_error {yield} -ensure - sh %{git reset --hard HEAD} - sh %{git clean -xdf} - sh %{git checkout master} -end - -task :handle_update do - email_on_error do - unless ENV["REF"] =~ %r{^refs/heads/(master|stable|sass-pages)$} - puts "#{'=' * 20} Ignoring rake handle_update REF=#{ENV["REF"].inspect}" - next - end - branch = $1 - - puts - puts - puts '=' * 150 - puts "Running rake handle_update REF=#{ENV["REF"].inspect}" - - sh %{git fetch origin} - sh %{git checkout stable} - sh %{git reset --hard origin/stable} - sh %{git checkout master} - sh %{git reset --hard origin/master} - - case branch - when "master" - sh %{rake release_edge --trace} - when "stable", "sass-pages" - sh %{rake pages --trace} - end - - puts 'Done running handle_update' - puts '=' * 150 - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/VERSION b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/VERSION deleted file mode 100644 index 618659f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/VERSION +++ /dev/null @@ -1 +0,0 @@ -3.4.13 diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/VERSION_DATE b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/VERSION_DATE deleted file mode 100644 index d82683d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/VERSION_DATE +++ /dev/null @@ -1 +0,0 @@ -27 February 2015 02:28:58 UTC diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/VERSION_NAME b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/VERSION_NAME deleted file mode 100644 index 6dc9b26..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/VERSION_NAME +++ /dev/null @@ -1 +0,0 @@ -Selective Steve diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/bin/sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/bin/sass deleted file mode 100755 index 62d6d0c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/bin/sass +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env ruby -# The command line Sass parser. - -THIS_FILE = File.symlink?(__FILE__) ? File.readlink(__FILE__) : __FILE__ -begin - require File.dirname(THIS_FILE) + '/../lib/sass' -rescue LoadError - require 'sass' -end -require 'sass/exec' - -opts = Sass::Exec::SassScss.new(ARGV, :sass) -opts.parse! diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/bin/sass-convert b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/bin/sass-convert deleted file mode 100755 index b276253..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/bin/sass-convert +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env ruby - -THIS_FILE = File.symlink?(__FILE__) ? File.readlink(__FILE__) : __FILE__ -begin - require File.dirname(THIS_FILE) + '/../lib/sass' -rescue LoadError - require 'sass' -end -require 'sass/exec' - -opts = Sass::Exec::SassConvert.new(ARGV) -opts.parse! diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/bin/scss b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/bin/scss deleted file mode 100755 index ce3c4ad..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/bin/scss +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env ruby -# The command line Sass parser. - -THIS_FILE = File.symlink?(__FILE__) ? File.readlink(__FILE__) : __FILE__ -begin - require File.dirname(THIS_FILE) + '/../lib/sass' -rescue LoadError - require 'sass' -end -require 'sass/exec' - -opts = Sass::Exec::SassScss.new(ARGV, :scss) -opts.parse! diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/extra/update_watch.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/extra/update_watch.rb deleted file mode 100644 index 73489a1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/extra/update_watch.rb +++ /dev/null @@ -1,13 +0,0 @@ -require 'rubygems' -require 'sinatra' -require 'json' -set :port, 3124 -set :environment, :production -enable :lock -Dir.chdir(File.dirname(__FILE__) + "/..") - -post "/" do - puts "Recieved payload!" - puts "Rev: #{`git name-rev HEAD`.strip}" - system %{rake handle_update --trace REF=#{JSON.parse(params["payload"])["ref"].inspect}} -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/init.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/init.rb deleted file mode 100644 index 5a3bceb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/init.rb +++ /dev/null @@ -1,18 +0,0 @@ -begin - require File.join(File.dirname(__FILE__), 'lib', 'sass') # From here -rescue LoadError - begin - require 'sass' # From gem - rescue LoadError => e - # gems:install may be run to install Haml with the skeleton plugin - # but not the gem itself installed. - # Don't die if this is the case. - raise e unless defined?(Rake) && - (Rake.application.top_level_tasks.include?('gems') || - Rake.application.top_level_tasks.include?('gems:install')) - end -end - -# Load Sass. -# Sass may be undefined if we're running gems:install. -require 'sass/plugin' if defined?(Sass) diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass.rb deleted file mode 100644 index c4def2d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass.rb +++ /dev/null @@ -1,102 +0,0 @@ -dir = File.dirname(__FILE__) -$LOAD_PATH.unshift dir unless $LOAD_PATH.include?(dir) - -require 'sass/version' - -# The module that contains everything Sass-related: -# -# * {Sass::Engine} is the class used to render Sass/SCSS within Ruby code. -# * {Sass::Plugin} is interfaces with web frameworks (Rails and Merb in particular). -# * {Sass::SyntaxError} is raised when Sass encounters an error. -# * {Sass::CSS} handles conversion of CSS to Sass. -# -# Also see the {file:SASS_REFERENCE.md full Sass reference}. -module Sass - class << self - # @private - attr_accessor :tests_running - end - - # The global load paths for Sass files. This is meant for plugins and - # libraries to register the paths to their Sass stylesheets to that they may - # be `@imported`. This load path is used by every instance of {Sass::Engine}. - # They are lower-precedence than any load paths passed in via the - # {file:SASS_REFERENCE.md#load_paths-option `:load_paths` option}. - # - # If the `SASS_PATH` environment variable is set, - # the initial value of `load_paths` will be initialized based on that. - # The variable should be a colon-separated list of path names - # (semicolon-separated on Windows). - # - # Note that files on the global load path are never compiled to CSS - # themselves, even if they aren't partials. They exist only to be imported. - # - # @example - # Sass.load_paths << File.dirname(__FILE__ + '/sass') - # @return [Array] - def self.load_paths - @load_paths ||= if ENV['SASS_PATH'] - ENV['SASS_PATH'].split(Sass::Util.windows? ? ';' : ':') - else - [] - end - end - - # Compile a Sass or SCSS string to CSS. - # Defaults to SCSS. - # - # @param contents [String] The contents of the Sass file. - # @param options [{Symbol => Object}] An options hash; - # see {file:SASS_REFERENCE.md#sass_options the Sass options documentation} - # @raise [Sass::SyntaxError] if there's an error in the document - # @raise [Encoding::UndefinedConversionError] if the source encoding - # cannot be converted to UTF-8 - # @raise [ArgumentError] if the document uses an unknown encoding with `@charset` - def self.compile(contents, options = {}) - options[:syntax] ||= :scss - Engine.new(contents, options).to_css - end - - # Compile a file on disk to CSS. - # - # @raise [Sass::SyntaxError] if there's an error in the document - # @raise [Encoding::UndefinedConversionError] if the source encoding - # cannot be converted to UTF-8 - # @raise [ArgumentError] if the document uses an unknown encoding with `@charset` - # - # @overload compile_file(filename, options = {}) - # Return the compiled CSS rather than writing it to a file. - # - # @param filename [String] The path to the Sass, SCSS, or CSS file on disk. - # @param options [{Symbol => Object}] An options hash; - # see {file:SASS_REFERENCE.md#sass_options the Sass options documentation} - # @return [String] The compiled CSS. - # - # @overload compile_file(filename, css_filename, options = {}) - # Write the compiled CSS to a file. - # - # @param filename [String] The path to the Sass, SCSS, or CSS file on disk. - # @param options [{Symbol => Object}] An options hash; - # see {file:SASS_REFERENCE.md#sass_options the Sass options documentation} - # @param css_filename [String] The location to which to write the compiled CSS. - def self.compile_file(filename, *args) - options = args.last.is_a?(Hash) ? args.pop : {} - css_filename = args.shift - result = Sass::Engine.for_file(filename, options).render - if css_filename - options[:css_filename] ||= css_filename - open(css_filename, "w") {|css_file| css_file.write(result)} - nil - else - result - end - end -end - -require 'sass/logger' -require 'sass/util' - -require 'sass/engine' -require 'sass/plugin' if defined?(Merb::Plugins) -require 'sass/railtie' -require 'sass/features' diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/cache_stores.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/cache_stores.rb deleted file mode 100644 index 62259b3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/cache_stores.rb +++ /dev/null @@ -1,15 +0,0 @@ -require 'stringio' - -module Sass - # Sass cache stores are in charge of storing cached information, - # especially parse trees for Sass documents. - # - # User-created importers must inherit from {CacheStores::Base}. - module CacheStores - end -end - -require 'sass/cache_stores/base' -require 'sass/cache_stores/filesystem' -require 'sass/cache_stores/memory' -require 'sass/cache_stores/chain' diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/cache_stores/base.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/cache_stores/base.rb deleted file mode 100644 index e239666..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/cache_stores/base.rb +++ /dev/null @@ -1,88 +0,0 @@ -module Sass - module CacheStores - # An abstract base class for backends for the Sass cache. - # Any key-value store can act as such a backend; - # it just needs to implement the - # \{#_store} and \{#_retrieve} methods. - # - # To use a cache store with Sass, - # use the {file:SASS_REFERENCE.md#cache_store-option `:cache_store` option}. - # - # @abstract - class Base - # Store cached contents for later retrieval - # Must be implemented by all CacheStore subclasses - # - # Note: cache contents contain binary data. - # - # @param key [String] The key to store the contents under - # @param version [String] The current sass version. - # Cached contents must not be retrieved across different versions of sass. - # @param sha [String] The sha of the sass source. - # Cached contents must not be retrieved if the sha has changed. - # @param contents [String] The contents to store. - def _store(key, version, sha, contents) - raise "#{self.class} must implement #_store." - end - - # Retrieved cached contents. - # Must be implemented by all subclasses. - # - # Note: if the key exists but the sha or version have changed, - # then the key may be deleted by the cache store, if it wants to do so. - # - # @param key [String] The key to retrieve - # @param version [String] The current sass version. - # Cached contents must not be retrieved across different versions of sass. - # @param sha [String] The sha of the sass source. - # Cached contents must not be retrieved if the sha has changed. - # @return [String] The contents that were previously stored. - # @return [NilClass] when the cache key is not found or the version or sha have changed. - def _retrieve(key, version, sha) - raise "#{self.class} must implement #_retrieve." - end - - # Store a {Sass::Tree::RootNode}. - # - # @param key [String] The key to store it under. - # @param sha [String] The checksum for the contents that are being stored. - # @param root [Object] The root node to cache. - def store(key, sha, root) - _store(key, Sass::VERSION, sha, Marshal.dump(root)) - rescue TypeError, LoadError => e - Sass::Util.sass_warn "Warning. Error encountered while saving cache #{path_to(key)}: #{e}" - nil - end - - # Retrieve a {Sass::Tree::RootNode}. - # - # @param key [String] The key the root element was stored under. - # @param sha [String] The checksum of the root element's content. - # @return [Object] The cached object. - def retrieve(key, sha) - contents = _retrieve(key, Sass::VERSION, sha) - Marshal.load(contents) if contents - rescue EOFError, TypeError, ArgumentError, LoadError => e - Sass::Util.sass_warn "Warning. Error encountered while reading cache #{path_to(key)}: #{e}" - nil - end - - # Return the key for the sass file. - # - # The `(sass_dirname, sass_basename)` pair - # should uniquely identify the Sass document, - # but otherwise there are no restrictions on their content. - # - # @param sass_dirname [String] - # The fully-expanded location of the Sass file. - # This corresponds to the directory name on a filesystem. - # @param sass_basename [String] The name of the Sass file that is being referenced. - # This corresponds to the basename on a filesystem. - def key(sass_dirname, sass_basename) - dir = Digest::SHA1.hexdigest(sass_dirname) - filename = "#{sass_basename}c" - "#{dir}/#{filename}" - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/cache_stores/chain.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/cache_stores/chain.rb deleted file mode 100644 index 914c111..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/cache_stores/chain.rb +++ /dev/null @@ -1,34 +0,0 @@ -module Sass - module CacheStores - # A meta-cache that chains multiple caches together. - # Specifically: - # - # * All `#store`s are passed to all caches. - # * `#retrieve`s are passed to each cache until one has a hit. - # * When one cache has a hit, the value is `#store`d in all earlier caches. - class Chain < Base - # Create a new cache chaining the given caches. - # - # @param caches [Array] The caches to chain. - def initialize(*caches) - @caches = caches - end - - # @see Base#store - def store(key, sha, obj) - @caches.each {|c| c.store(key, sha, obj)} - end - - # @see Base#retrieve - def retrieve(key, sha) - @caches.each_with_index do |c, i| - obj = c.retrieve(key, sha) - next unless obj - @caches[0...i].each {|prev| prev.store(key, sha, obj)} - return obj - end - nil - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/cache_stores/filesystem.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/cache_stores/filesystem.rb deleted file mode 100644 index eea7c53..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/cache_stores/filesystem.rb +++ /dev/null @@ -1,60 +0,0 @@ -require 'fileutils' - -module Sass - module CacheStores - # A backend for the Sass cache using the filesystem. - class Filesystem < Base - # The directory where the cached files will be stored. - # - # @return [String] - attr_accessor :cache_location - - # @param cache_location [String] see \{#cache\_location} - def initialize(cache_location) - @cache_location = cache_location - end - - # @see Base#\_retrieve - def _retrieve(key, version, sha) - return unless File.readable?(path_to(key)) - File.open(path_to(key), "rb") do |f| - if f.readline("\n").strip == version && f.readline("\n").strip == sha - return f.read - end - end - begin - File.unlink path_to(key) - rescue Errno::ENOENT - # Already deleted. Race condition? - end - nil - rescue EOFError, TypeError, ArgumentError => e - Sass::Util.sass_warn "Warning. Error encountered while reading cache #{path_to(key)}: #{e}" - end - - # @see Base#\_store - def _store(key, version, sha, contents) - compiled_filename = path_to(key) - FileUtils.mkdir_p(File.dirname(compiled_filename)) - Sass::Util.atomic_create_and_write_file(compiled_filename, 0600) do |f| - f.puts(version) - f.puts(sha) - f.write(contents) - end - rescue Errno::EACCES - # pass - end - - private - - # Returns the path to a file for the given key. - # - # @param key [String] - # @return [String] The path to the cache file. - def path_to(key) - key = key.gsub(/[<>:\\|?*%]/) {|c| "%%%03d" % Sass::Util.ord(c)} - File.join(cache_location, key) - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/cache_stores/memory.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/cache_stores/memory.rb deleted file mode 100644 index ac7eb3d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/cache_stores/memory.rb +++ /dev/null @@ -1,47 +0,0 @@ -module Sass - module CacheStores - # A backend for the Sass cache using in-process memory. - class Memory < Base - # Since the {Memory} store is stored in the Sass tree's options hash, - # when the options get serialized as part of serializing the tree, - # you get crazy exponential growth in the size of the cached objects - # unless you don't dump the cache. - # - # @private - def _dump(depth) - "" - end - - # If we deserialize this class, just make a new empty one. - # - # @private - def self._load(repr) - Memory.new - end - - # Create a new, empty cache store. - def initialize - @contents = {} - end - - # @see Base#retrieve - def retrieve(key, sha) - if @contents.has_key?(key) - return unless @contents[key][:sha] == sha - obj = @contents[key][:obj] - obj.respond_to?(:deep_copy) ? obj.deep_copy : obj.dup - end - end - - # @see Base#store - def store(key, sha, obj) - @contents[key] = {:sha => sha, :obj => obj} - end - - # Destructively clear the cache. - def reset! - @contents = {} - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/cache_stores/null.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/cache_stores/null.rb deleted file mode 100644 index f14f4c7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/cache_stores/null.rb +++ /dev/null @@ -1,25 +0,0 @@ -module Sass - module CacheStores - # Doesn't store anything, but records what things it should have stored. - # This doesn't currently have any use except for testing and debugging. - # - # @private - class Null < Base - def initialize - @keys = {} - end - - def _retrieve(key, version, sha) - nil - end - - def _store(key, version, sha, contents) - @keys[key] = true - end - - def was_set?(key) - @keys[key] - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/callbacks.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/callbacks.rb deleted file mode 100644 index 8d9cd77..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/callbacks.rb +++ /dev/null @@ -1,67 +0,0 @@ -module Sass - # A lightweight infrastructure for defining and running callbacks. - # Callbacks are defined using \{#define\_callback\} at the class level, - # and called using `run_#{name}` at the instance level. - # - # Clients can add callbacks by calling the generated `on_#{name}` method, - # and passing in a block that's run when the callback is activated. - # - # @example Define a callback - # class Munger - # extend Sass::Callbacks - # define_callback :string_munged - # - # def munge(str) - # res = str.gsub(/[a-z]/, '\1\1') - # run_string_munged str, res - # res - # end - # end - # - # @example Use a callback - # m = Munger.new - # m.on_string_munged {|str, res| puts "#{str} was munged into #{res}!"} - # m.munge "bar" #=> bar was munged into bbaarr! - module Callbacks - # Automatically includes {InstanceMethods} - # when something extends this module. - # - # @param base [Module] - def self.extended(base) - base.send(:include, InstanceMethods) - end - - protected - - module InstanceMethods - # Removes all callbacks registered against this object. - def clear_callbacks! - @_sass_callbacks = {} - end - end - - # Define a callback with the given name. - # This will define an `on_#{name}` method - # that registers a block, - # and a `run_#{name}` method that runs that block - # (optionall with some arguments). - # - # @param name [Symbol] The name of the callback - # @return [void] - def define_callback(name) - class_eval < "p\n color: blue" - # Sass::CSS.new("p { color: blue }").render(:scss) #=> "p {\n color: blue; }" - class CSS - # @param template [String] The CSS stylesheet. - # This stylesheet can be encoded using any encoding - # that can be converted to Unicode. - # If the stylesheet contains an `@charset` declaration, - # that overrides the Ruby encoding - # (see {file:SASS_REFERENCE.md#encodings the encoding documentation}) - # @option options :old [Boolean] (false) - # Whether or not to output old property syntax - # (`:color blue` as opposed to `color: blue`). - # This is only meaningful when generating Sass code, - # rather than SCSS. - # @option options :indent [String] (" ") - # The string to use for indenting each line. Defaults to two spaces. - def initialize(template, options = {}) - if template.is_a? IO - template = template.read - end - - @options = options.dup - # Backwards compatibility - @options[:old] = true if @options[:alternate] == false - @template = template - end - - # Converts the CSS template into Sass or SCSS code. - # - # @param fmt [Symbol] `:sass` or `:scss`, designating the format to return. - # @return [String] The resulting Sass or SCSS code - # @raise [Sass::SyntaxError] if there's an error parsing the CSS template - def render(fmt = :sass) - check_encoding! - build_tree.send("to_#{fmt}", @options).strip + "\n" - rescue Sass::SyntaxError => err - err.modify_backtrace(:filename => @options[:filename] || '(css)') - raise err - end - - # Returns the original encoding of the document, - # or `nil` under Ruby 1.8. - # - # @return [Encoding, nil] - # @raise [Encoding::UndefinedConversionError] if the source encoding - # cannot be converted to UTF-8 - # @raise [ArgumentError] if the document uses an unknown encoding with `@charset` - def source_encoding - check_encoding! - @original_encoding - end - - private - - def check_encoding! - return if @checked_encoding - @checked_encoding = true - @template, @original_encoding = Sass::Util.check_sass_encoding(@template) - end - - # Parses the CSS template and applies various transformations - # - # @return [Tree::Node] The root node of the parsed tree - def build_tree - root = Sass::SCSS::CssParser.new(@template, @options[:filename], nil).parse - parse_selectors root - expand_commas root - nest_seqs root - parent_ref_rules root - flatten_rules root - bubble_subject root - fold_commas root - dump_selectors root - root - end - - # Parse all the selectors in the document and assign them to - # {Sass::Tree::RuleNode#parsed_rules}. - # - # @param root [Tree::Node] The parent node - def parse_selectors(root) - root.children.each do |child| - next parse_selectors(child) if child.is_a?(Tree::DirectiveNode) - next unless child.is_a?(Tree::RuleNode) - parser = Sass::SCSS::CssParser.new(child.rule.first, child.filename, nil, child.line) - child.parsed_rules = parser.parse_selector - end - end - - # Transform - # - # foo, bar, baz - # color: blue - # - # into - # - # foo - # color: blue - # bar - # color: blue - # baz - # color: blue - # - # @param root [Tree::Node] The parent node - def expand_commas(root) - root.children.map! do |child| - # child.parsed_rules.members.size > 1 iff the rule contains a comma - unless child.is_a?(Tree::RuleNode) && child.parsed_rules.members.size > 1 - expand_commas(child) if child.is_a?(Tree::DirectiveNode) - next child - end - child.parsed_rules.members.map do |seq| - node = Tree::RuleNode.new([]) - node.parsed_rules = make_cseq(seq) - node.children = child.children - node - end - end - root.children.flatten! - end - - # Make rules use nesting so that - # - # foo - # color: green - # foo bar - # color: red - # foo baz - # color: blue - # - # becomes - # - # foo - # color: green - # bar - # color: red - # baz - # color: blue - # - # @param root [Tree::Node] The parent node - def nest_seqs(root) - current_rule = nil - root.children.map! do |child| - unless child.is_a?(Tree::RuleNode) - nest_seqs(child) if child.is_a?(Tree::DirectiveNode) - next child - end - - seq = first_seq(child) - seq.members.reject! {|sseq| sseq == "\n"} - first, rest = seq.members.first, seq.members[1..-1] - - if current_rule.nil? || first_sseq(current_rule) != first - current_rule = Tree::RuleNode.new([]) - current_rule.parsed_rules = make_seq(first) - end - - if rest.empty? - current_rule.children += child.children - else - child.parsed_rules = make_seq(*rest) - current_rule << child - end - - current_rule - end - root.children.compact! - root.children.uniq! - - root.children.each {|v| nest_seqs(v)} - end - - # Make rules use parent refs so that - # - # foo - # color: green - # foo.bar - # color: blue - # - # becomes - # - # foo - # color: green - # &.bar - # color: blue - # - # @param root [Tree::Node] The parent node - def parent_ref_rules(root) - current_rule = nil - root.children.map! do |child| - unless child.is_a?(Tree::RuleNode) - parent_ref_rules(child) if child.is_a?(Tree::DirectiveNode) - next child - end - - sseq = first_sseq(child) - next child unless sseq.is_a?(Sass::Selector::SimpleSequence) - - firsts, rest = [sseq.members.first], sseq.members[1..-1] - firsts.push rest.shift if firsts.first.is_a?(Sass::Selector::Parent) - - last_simple_subject = rest.empty? && sseq.subject? - if current_rule.nil? || first_sseq(current_rule).members != firsts || - !!first_sseq(current_rule).subject? != !!last_simple_subject - current_rule = Tree::RuleNode.new([]) - current_rule.parsed_rules = make_sseq(last_simple_subject, *firsts) - end - - if rest.empty? - current_rule.children += child.children - else - rest.unshift Sass::Selector::Parent.new - child.parsed_rules = make_sseq(sseq.subject?, *rest) - current_rule << child - end - - current_rule - end - root.children.compact! - root.children.uniq! - - root.children.each {|v| parent_ref_rules(v)} - end - - # Flatten rules so that - # - # foo - # bar - # color: red - # - # becomes - # - # foo bar - # color: red - # - # and - # - # foo - # &.bar - # color: blue - # - # becomes - # - # foo.bar - # color: blue - # - # @param root [Tree::Node] The parent node - def flatten_rules(root) - root.children.each do |child| - case child - when Tree::RuleNode - flatten_rule(child) - when Tree::DirectiveNode - flatten_rules(child) - end - end - end - - # Flattens a single rule. - # - # @param rule [Tree::RuleNode] The candidate for flattening - # @see #flatten_rules - def flatten_rule(rule) - while rule.children.size == 1 && rule.children.first.is_a?(Tree::RuleNode) - child = rule.children.first - - if first_simple_sel(child).is_a?(Sass::Selector::Parent) - rule.parsed_rules = child.parsed_rules.resolve_parent_refs(rule.parsed_rules) - else - rule.parsed_rules = make_seq(*(first_seq(rule).members + first_seq(child).members)) - end - - rule.children = child.children - end - - flatten_rules(rule) - end - - def bubble_subject(root) - root.children.each do |child| - bubble_subject(child) if child.is_a?(Tree::RuleNode) || child.is_a?(Tree::DirectiveNode) - next unless child.is_a?(Tree::RuleNode) && !child.children.empty? - next unless child.children.all? do |c| - next unless c.is_a?(Tree::RuleNode) - first_simple_sel(c).is_a?(Sass::Selector::Parent) && first_sseq(c).subject? - end - first_sseq(child).subject = true - child.children.each {|c| first_sseq(c).subject = false} - end - end - - # Transform - # - # foo - # bar - # color: blue - # baz - # color: blue - # - # into - # - # foo - # bar, baz - # color: blue - # - # @param root [Tree::Node] The parent node - def fold_commas(root) - prev_rule = nil - root.children.map! do |child| - unless child.is_a?(Tree::RuleNode) - fold_commas(child) if child.is_a?(Tree::DirectiveNode) - next child - end - - if prev_rule && prev_rule.children.map {|c| c.to_sass} == child.children.map {|c| c.to_sass} - prev_rule.parsed_rules.members << first_seq(child) - next nil - end - - fold_commas(child) - prev_rule = child - child - end - root.children.compact! - end - - # Dump all the parsed {Sass::Tree::RuleNode} selectors to strings. - # - # @param root [Tree::Node] The parent node - def dump_selectors(root) - root.children.each do |child| - next dump_selectors(child) if child.is_a?(Tree::DirectiveNode) - next unless child.is_a?(Tree::RuleNode) - child.rule = [child.parsed_rules.to_s] - dump_selectors(child) - end - end - - # Create a {Sass::Selector::CommaSequence}. - # - # @param seqs [Array] - # @return [Sass::Selector::CommaSequence] - def make_cseq(*seqs) - Sass::Selector::CommaSequence.new(seqs) - end - - # Create a {Sass::Selector::CommaSequence} containing only a single - # {Sass::Selector::Sequence}. - # - # @param sseqs [Array] - # @return [Sass::Selector::CommaSequence] - def make_seq(*sseqs) - make_cseq(Sass::Selector::Sequence.new(sseqs)) - end - - # Create a {Sass::Selector::CommaSequence} containing only a single - # {Sass::Selector::Sequence} which in turn contains only a single - # {Sass::Selector::SimpleSequence}. - # - # @param subject [Boolean] Whether this is a subject selector - # @param sseqs [Array] - # @return [Sass::Selector::CommaSequence] - def make_sseq(subject, *sseqs) - make_seq(Sass::Selector::SimpleSequence.new(sseqs, subject)) - end - - # Return the first {Sass::Selector::Sequence} in a {Sass::Tree::RuleNode}. - # - # @param rule [Sass::Tree::RuleNode] - # @return [Sass::Selector::Sequence] - def first_seq(rule) - rule.parsed_rules.members.first - end - - # Return the first {Sass::Selector::SimpleSequence} in a - # {Sass::Tree::RuleNode}. - # - # @param rule [Sass::Tree::RuleNode] - # @return [Sass::Selector::SimpleSequence, String] - def first_sseq(rule) - first_seq(rule).members.first - end - - # Return the first {Sass::Selector::Simple} in a {Sass::Tree::RuleNode}, - # unless the rule begins with a combinator. - # - # @param rule [Sass::Tree::RuleNode] - # @return [Sass::Selector::Simple?] - def first_simple_sel(rule) - sseq = first_sseq(rule) - return unless sseq.is_a?(Sass::Selector::SimpleSequence) - sseq.members.first - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/engine.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/engine.rb deleted file mode 100644 index 3650e43..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/engine.rb +++ /dev/null @@ -1,1182 +0,0 @@ -require 'set' -require 'digest/sha1' -require 'sass/cache_stores' -require 'sass/source/position' -require 'sass/source/range' -require 'sass/source/map' -require 'sass/tree/node' -require 'sass/tree/root_node' -require 'sass/tree/rule_node' -require 'sass/tree/comment_node' -require 'sass/tree/prop_node' -require 'sass/tree/directive_node' -require 'sass/tree/media_node' -require 'sass/tree/supports_node' -require 'sass/tree/css_import_node' -require 'sass/tree/variable_node' -require 'sass/tree/mixin_def_node' -require 'sass/tree/mixin_node' -require 'sass/tree/trace_node' -require 'sass/tree/content_node' -require 'sass/tree/function_node' -require 'sass/tree/return_node' -require 'sass/tree/extend_node' -require 'sass/tree/if_node' -require 'sass/tree/while_node' -require 'sass/tree/for_node' -require 'sass/tree/each_node' -require 'sass/tree/debug_node' -require 'sass/tree/warn_node' -require 'sass/tree/import_node' -require 'sass/tree/charset_node' -require 'sass/tree/at_root_node' -require 'sass/tree/keyframe_rule_node' -require 'sass/tree/error_node' -require 'sass/tree/visitors/base' -require 'sass/tree/visitors/perform' -require 'sass/tree/visitors/cssize' -require 'sass/tree/visitors/extend' -require 'sass/tree/visitors/convert' -require 'sass/tree/visitors/to_css' -require 'sass/tree/visitors/deep_copy' -require 'sass/tree/visitors/set_options' -require 'sass/tree/visitors/check_nesting' -require 'sass/selector' -require 'sass/environment' -require 'sass/script' -require 'sass/scss' -require 'sass/stack' -require 'sass/error' -require 'sass/importers' -require 'sass/shared' -require 'sass/media' -require 'sass/supports' - -module Sass - # A Sass mixin or function. - # - # `name`: `String` - # : The name of the mixin/function. - # - # `args`: `Array<(Script::Tree::Node, Script::Tree::Node)>` - # : The arguments for the mixin/function. - # Each element is a tuple containing the variable node of the argument - # and the parse tree for the default value of the argument. - # - # `splat`: `Script::Tree::Node?` - # : The variable node of the splat argument for this callable, or null. - # - # `environment`: {Sass::Environment} - # : The environment in which the mixin/function was defined. - # This is captured so that the mixin/function can have access - # to local variables defined in its scope. - # - # `tree`: `Array` - # : The parse tree for the mixin/function. - # - # `has_content`: `Boolean` - # : Whether the callable accepts a content block. - # - # `type`: `String` - # : The user-friendly name of the type of the callable. - Callable = Struct.new(:name, :args, :splat, :environment, :tree, :has_content, :type) - - # This class handles the parsing and compilation of the Sass template. - # Example usage: - # - # template = File.load('stylesheets/sassy.sass') - # sass_engine = Sass::Engine.new(template) - # output = sass_engine.render - # puts output - class Engine - # A line of Sass code. - # - # `text`: `String` - # : The text in the line, without any whitespace at the beginning or end. - # - # `tabs`: `Fixnum` - # : The level of indentation of the line. - # - # `index`: `Fixnum` - # : The line number in the original document. - # - # `offset`: `Fixnum` - # : The number of bytes in on the line that the text begins. - # This ends up being the number of bytes of leading whitespace. - # - # `filename`: `String` - # : The name of the file in which this line appeared. - # - # `children`: `Array` - # : The lines nested below this one. - # - # `comment_tab_str`: `String?` - # : The prefix indentation for this comment, if it is a comment. - class Line < Struct.new(:text, :tabs, :index, :offset, :filename, :children, :comment_tab_str) - def comment? - text[0] == COMMENT_CHAR && (text[1] == SASS_COMMENT_CHAR || text[1] == CSS_COMMENT_CHAR) - end - end - - # The character that begins a CSS property. - PROPERTY_CHAR = ?: - - # The character that designates the beginning of a comment, - # either Sass or CSS. - COMMENT_CHAR = ?/ - - # The character that follows the general COMMENT_CHAR and designates a Sass comment, - # which is not output as a CSS comment. - SASS_COMMENT_CHAR = ?/ - - # The character that indicates that a comment allows interpolation - # and should be preserved even in `:compressed` mode. - SASS_LOUD_COMMENT_CHAR = ?! - - # The character that follows the general COMMENT_CHAR and designates a CSS comment, - # which is embedded in the CSS document. - CSS_COMMENT_CHAR = ?* - - # The character used to denote a compiler directive. - DIRECTIVE_CHAR = ?@ - - # Designates a non-parsed rule. - ESCAPE_CHAR = ?\\ - - # Designates block as mixin definition rather than CSS rules to output - MIXIN_DEFINITION_CHAR = ?= - - # Includes named mixin declared using MIXIN_DEFINITION_CHAR - MIXIN_INCLUDE_CHAR = ?+ - - # The regex that matches and extracts data from - # properties of the form `:name prop`. - PROPERTY_OLD = /^:([^\s=:"]+)\s*(?:\s+|$)(.*)/ - - # The default options for Sass::Engine. - # @api public - DEFAULT_OPTIONS = { - :style => :nested, - :load_paths => ['.'], - :cache => true, - :cache_location => './.sass-cache', - :syntax => :sass, - :filesystem_importer => Sass::Importers::Filesystem - }.freeze - - # Converts a Sass options hash into a standard form, filling in - # default values and resolving aliases. - # - # @param options [{Symbol => Object}] The options hash; - # see {file:SASS_REFERENCE.md#sass_options the Sass options documentation} - # @return [{Symbol => Object}] The normalized options hash. - # @private - def self.normalize_options(options) - options = DEFAULT_OPTIONS.merge(options.reject {|k, v| v.nil?}) - - # If the `:filename` option is passed in without an importer, - # assume it's using the default filesystem importer. - options[:importer] ||= options[:filesystem_importer].new(".") if options[:filename] - - # Tracks the original filename of the top-level Sass file - options[:original_filename] ||= options[:filename] - - options[:cache_store] ||= Sass::CacheStores::Chain.new( - Sass::CacheStores::Memory.new, Sass::CacheStores::Filesystem.new(options[:cache_location])) - # Support both, because the docs said one and the other actually worked - # for quite a long time. - options[:line_comments] ||= options[:line_numbers] - - options[:load_paths] = (options[:load_paths] + Sass.load_paths).map do |p| - next p unless p.is_a?(String) || (defined?(Pathname) && p.is_a?(Pathname)) - options[:filesystem_importer].new(p.to_s) - end - - # Backwards compatibility - options[:property_syntax] ||= options[:attribute_syntax] - case options[:property_syntax] - when :alternate; options[:property_syntax] = :new - when :normal; options[:property_syntax] = :old - end - options[:sourcemap] = :auto if options[:sourcemap] == true - options[:sourcemap] = :none if options[:sourcemap] == false - - options - end - - # Returns the {Sass::Engine} for the given file. - # This is preferable to Sass::Engine.new when reading from a file - # because it properly sets up the Engine's metadata, - # enables parse-tree caching, - # and infers the syntax from the filename. - # - # @param filename [String] The path to the Sass or SCSS file - # @param options [{Symbol => Object}] The options hash; - # See {file:SASS_REFERENCE.md#sass_options the Sass options documentation}. - # @return [Sass::Engine] The Engine for the given Sass or SCSS file. - # @raise [Sass::SyntaxError] if there's an error in the document. - def self.for_file(filename, options) - had_syntax = options[:syntax] - - if had_syntax - # Use what was explicitly specificed - elsif filename =~ /\.scss$/ - options.merge!(:syntax => :scss) - elsif filename =~ /\.sass$/ - options.merge!(:syntax => :sass) - end - - Sass::Engine.new(File.read(filename), options.merge(:filename => filename)) - end - - # The options for the Sass engine. - # See {file:SASS_REFERENCE.md#sass_options the Sass options documentation}. - # - # @return [{Symbol => Object}] - attr_reader :options - - # Creates a new Engine. Note that Engine should only be used directly - # when compiling in-memory Sass code. - # If you're compiling a single Sass file from the filesystem, - # use \{Sass::Engine.for\_file}. - # If you're compiling multiple files from the filesystem, - # use {Sass::Plugin}. - # - # @param template [String] The Sass template. - # This template can be encoded using any encoding - # that can be converted to Unicode. - # If the template contains an `@charset` declaration, - # that overrides the Ruby encoding - # (see {file:SASS_REFERENCE.md#encodings the encoding documentation}) - # @param options [{Symbol => Object}] An options hash. - # See {file:SASS_REFERENCE.md#sass_options the Sass options documentation}. - # @see {Sass::Engine.for_file} - # @see {Sass::Plugin} - def initialize(template, options = {}) - @options = self.class.normalize_options(options) - @template = template - end - - # Render the template to CSS. - # - # @return [String] The CSS - # @raise [Sass::SyntaxError] if there's an error in the document - # @raise [Encoding::UndefinedConversionError] if the source encoding - # cannot be converted to UTF-8 - # @raise [ArgumentError] if the document uses an unknown encoding with `@charset` - def render - return _to_tree.render unless @options[:quiet] - Sass::Util.silence_sass_warnings {_to_tree.render} - end - - # Render the template to CSS and return the source map. - # - # @param sourcemap_uri [String] The sourcemap URI to use in the - # `@sourceMappingURL` comment. If this is relative, it should be relative - # to the location of the CSS file. - # @return [(String, Sass::Source::Map)] The rendered CSS and the associated - # source map - # @raise [Sass::SyntaxError] if there's an error in the document, or if the - # public URL for this document couldn't be determined. - # @raise [Encoding::UndefinedConversionError] if the source encoding - # cannot be converted to UTF-8 - # @raise [ArgumentError] if the document uses an unknown encoding with `@charset` - def render_with_sourcemap(sourcemap_uri) - return _render_with_sourcemap(sourcemap_uri) unless @options[:quiet] - Sass::Util.silence_sass_warnings {_render_with_sourcemap(sourcemap_uri)} - end - - alias_method :to_css, :render - - # Parses the document into its parse tree. Memoized. - # - # @return [Sass::Tree::Node] The root of the parse tree. - # @raise [Sass::SyntaxError] if there's an error in the document - def to_tree - @tree ||= if @options[:quiet] - Sass::Util.silence_sass_warnings {_to_tree} - else - _to_tree - end - end - - # Returns the original encoding of the document, - # or `nil` under Ruby 1.8. - # - # @return [Encoding, nil] - # @raise [Encoding::UndefinedConversionError] if the source encoding - # cannot be converted to UTF-8 - # @raise [ArgumentError] if the document uses an unknown encoding with `@charset` - def source_encoding - check_encoding! - @source_encoding - end - - # Gets a set of all the documents - # that are (transitive) dependencies of this document, - # not including the document itself. - # - # @return [[Sass::Engine]] The dependency documents. - def dependencies - _dependencies(Set.new, engines = Set.new) - Sass::Util.array_minus(engines, [self]) - end - - # Helper for \{#dependencies}. - # - # @private - def _dependencies(seen, engines) - key = [@options[:filename], @options[:importer]] - return if seen.include?(key) - seen << key - engines << self - to_tree.grep(Tree::ImportNode) do |n| - next if n.css_import? - n.imported_file._dependencies(seen, engines) - end - end - - private - - def _render_with_sourcemap(sourcemap_uri) - filename = @options[:filename] - importer = @options[:importer] - sourcemap_dir = @options[:sourcemap_filename] && - File.dirname(File.expand_path(@options[:sourcemap_filename])) - if filename.nil? - raise Sass::SyntaxError.new(< e - e.modify_backtrace(:filename => @options[:filename], :line => @line) - e.sass_template = @template - raise e - end - - def sassc_key - @options[:cache_store].key(*@options[:importer].key(@options[:filename], @options)) - end - - def check_encoding! - return if @checked_encoding - @checked_encoding = true - @template, @source_encoding = Sass::Util.check_sass_encoding(@template) - end - - def tabulate(string) - tab_str = nil - comment_tab_str = nil - first = true - lines = [] - string.scan(/^[^\n]*?$/).each_with_index do |line, index| - index += (@options[:line] || 1) - if line.strip.empty? - lines.last.text << "\n" if lines.last && lines.last.comment? - next - end - - line_tab_str = line[/^\s*/] - unless line_tab_str.empty? - if tab_str.nil? - comment_tab_str ||= line_tab_str - next if try_comment(line, lines.last, "", comment_tab_str, index) - comment_tab_str = nil - end - - tab_str ||= line_tab_str - - raise SyntaxError.new("Indenting at the beginning of the document is illegal.", - :line => index) if first - - raise SyntaxError.new("Indentation can't use both tabs and spaces.", - :line => index) if tab_str.include?(?\s) && tab_str.include?(?\t) - end - first &&= !tab_str.nil? - if tab_str.nil? - lines << Line.new(line.strip, 0, index, 0, @options[:filename], []) - next - end - - comment_tab_str ||= line_tab_str - if try_comment(line, lines.last, tab_str * lines.last.tabs, comment_tab_str, index) - next - else - comment_tab_str = nil - end - - line_tabs = line_tab_str.scan(tab_str).size - if tab_str * line_tabs != line_tab_str - message = < index) - end - - lines << Line.new(line.strip, line_tabs, index, line_tab_str.size, @options[:filename], []) - end - lines - end - - # @comment - # rubocop:disable ParameterLists - def try_comment(line, last, tab_str, comment_tab_str, index) - # rubocop:enable ParameterLists - return unless last && last.comment? - # Nested comment stuff must be at least one whitespace char deeper - # than the normal indentation - return unless line =~ /^#{tab_str}\s/ - unless line =~ /^(?:#{comment_tab_str})(.*)$/ - raise SyntaxError.new(< index) -Inconsistent indentation: -previous line was indented by #{Sass::Shared.human_indentation comment_tab_str}, -but this line was indented by #{Sass::Shared.human_indentation line[/^\s*/]}. -MSG - end - - last.comment_tab_str ||= comment_tab_str - last.text << "\n" << line - true - end - - def tree(arr, i = 0) - return [], i if arr[i].nil? - - base = arr[i].tabs - nodes = [] - while (line = arr[i]) && line.tabs >= base - if line.tabs > base - raise SyntaxError.new( - "The line was indented #{line.tabs - base} levels deeper than the previous line.", - :line => line.index) if line.tabs > base + 1 - - nodes.last.children, i = tree(arr, i) - else - nodes << line - i += 1 - end - end - return nodes, i - end - - def build_tree(parent, line, root = false) - @line = line.index - @offset = line.offset - node_or_nodes = parse_line(parent, line, root) - - Array(node_or_nodes).each do |node| - # Node is a symbol if it's non-outputting, like a variable assignment - next unless node.is_a? Tree::Node - - node.line = line.index - node.filename = line.filename - - append_children(node, line.children, false) - end - - node_or_nodes - end - - def append_children(parent, children, root) - continued_rule = nil - continued_comment = nil - children.each do |line| - child = build_tree(parent, line, root) - - if child.is_a?(Tree::RuleNode) - if child.continued? && child.children.empty? - if continued_rule - continued_rule.add_rules child - else - continued_rule = child - end - next - elsif continued_rule - continued_rule.add_rules child - continued_rule.children = child.children - continued_rule, child = nil, continued_rule - end - elsif continued_rule - continued_rule = nil - end - - if child.is_a?(Tree::CommentNode) && child.type == :silent - if continued_comment && - child.line == continued_comment.line + - continued_comment.lines + 1 - continued_comment.value.last.sub!(/ \*\/\Z/, '') - child.value.first.gsub!(/\A\/\*/, ' *') - continued_comment.value += ["\n"] + child.value - next - end - - continued_comment = child - end - - check_for_no_children(child) - validate_and_append_child(parent, child, line, root) - end - - parent - end - - def validate_and_append_child(parent, child, line, root) - case child - when Array - child.each {|c| validate_and_append_child(parent, c, line, root)} - when Tree::Node - parent << child - end - end - - def check_for_no_children(node) - return unless node.is_a?(Tree::RuleNode) && node.children.empty? - Sass::Util.sass_warn(< @line) if name.nil? || value.nil? - - value_start_offset = name_end_offset = name_start_offset + name.length - unless value.empty? - # +1 and -1 both compensate for the leading ':', which is part of line.text - value_start_offset = name_start_offset + line.text.index(value, name.length + 1) - 1 - end - - property = parse_property(name, parse_interp(name), value, :old, line, value_start_offset) - property.name_source_range = Sass::Source::Range.new( - Sass::Source::Position.new(@line, to_parser_offset(name_start_offset)), - Sass::Source::Position.new(@line, to_parser_offset(name_end_offset)), - @options[:filename], @options[:importer]) - property - end - when ?$ - parse_variable(line) - when COMMENT_CHAR - parse_comment(line) - when DIRECTIVE_CHAR - parse_directive(parent, line, root) - when ESCAPE_CHAR - Tree::RuleNode.new(parse_interp(line.text[1..-1]), full_line_range(line)) - when MIXIN_DEFINITION_CHAR - parse_mixin_definition(line) - when MIXIN_INCLUDE_CHAR - if line.text[1].nil? || line.text[1] == ?\s - Tree::RuleNode.new(parse_interp(line.text), full_line_range(line)) - else - parse_mixin_include(line, root) - end - else - parse_property_or_rule(line) - end - end - - def parse_property_or_rule(line) - scanner = Sass::Util::MultibyteStringScanner.new(line.text) - hack_char = scanner.scan(/[:\*\.]|\#(?!\{)/) - offset = line.offset - offset += hack_char.length if hack_char - parser = Sass::SCSS::Parser.new(scanner, - @options[:filename], @options[:importer], - @line, to_parser_offset(offset)) - - unless (res = parser.parse_interp_ident) - parsed = parse_interp(line.text, line.offset) - return Tree::RuleNode.new(parsed, full_line_range(line)) - end - - ident_range = Sass::Source::Range.new( - Sass::Source::Position.new(@line, to_parser_offset(line.offset)), - Sass::Source::Position.new(@line, parser.offset), - @options[:filename], @options[:importer]) - offset = parser.offset - 1 - res.unshift(hack_char) if hack_char - - # Handle comments after a property name but before the colon. - if (comment = scanner.scan(Sass::SCSS::RX::COMMENT)) - res << comment - offset += comment.length - end - - name = line.text[0...scanner.pos] - if (scanned = scanner.scan(/\s*:(?:\s+|$)/)) # test for a property - offset += scanned.length - property = parse_property(name, res, scanner.rest, :new, line, offset) - property.name_source_range = ident_range - property - else - res.pop if comment - - if (trailing = (scanner.scan(/\s*#{Sass::SCSS::RX::COMMENT}/) || - scanner.scan(/\s*#{Sass::SCSS::RX::SINGLE_LINE_COMMENT}/))) - trailing.strip! - end - interp_parsed = parse_interp(scanner.rest) - selector_range = Sass::Source::Range.new( - ident_range.start_pos, - Sass::Source::Position.new(@line, to_parser_offset(line.offset) + line.text.length), - @options[:filename], @options[:importer]) - rule = Tree::RuleNode.new(res + interp_parsed, selector_range) - rule << Tree::CommentNode.new([trailing], :silent) if trailing - rule - end - end - - # @comment - # rubocop:disable ParameterLists - def parse_property(name, parsed_name, value, prop, line, start_offset) - # rubocop:enable ParameterLists - if value.strip.empty? - expr = Sass::Script::Tree::Literal.new(Sass::Script::Value::String.new("")) - end_offset = start_offset - else - expr = parse_script(value, :offset => to_parser_offset(start_offset)) - end_offset = expr.source_range.end_pos.offset - 1 - end - node = Tree::PropNode.new(parse_interp(name), expr, prop) - node.value_source_range = Sass::Source::Range.new( - Sass::Source::Position.new(line.index, to_parser_offset(start_offset)), - Sass::Source::Position.new(line.index, to_parser_offset(end_offset)), - @options[:filename], @options[:importer]) - if value.strip.empty? && line.children.empty? - raise SyntaxError.new( - "Invalid property: \"#{node.declaration}\" (no value)." + - node.pseudo_class_selector_message) - end - - node - end - - def parse_variable(line) - name, value, flags = line.text.scan(Script::MATCH)[0] - raise SyntaxError.new("Illegal nesting: Nothing may be nested beneath variable declarations.", - :line => @line + 1) unless line.children.empty? - raise SyntaxError.new("Invalid variable: \"#{line.text}\".", - :line => @line) unless name && value - flags = flags ? flags.split(/\s+/) : [] - if (invalid_flag = flags.find {|f| f != '!default' && f != '!global'}) - raise SyntaxError.new("Invalid flag \"#{invalid_flag}\".", :line => @line) - end - - # This workaround is needed for the case when the variable value is part of the identifier, - # otherwise we end up with the offset equal to the value index inside the name: - # $red_color: red; - var_lhs_length = 1 + name.length # 1 stands for '$' - index = line.text.index(value, line.offset + var_lhs_length) || 0 - expr = parse_script(value, :offset => to_parser_offset(line.offset + index)) - - Tree::VariableNode.new(name, expr, flags.include?('!default'), flags.include?('!global')) - end - - def parse_comment(line) - if line.text[1] == CSS_COMMENT_CHAR || line.text[1] == SASS_COMMENT_CHAR - silent = line.text[1] == SASS_COMMENT_CHAR - loud = !silent && line.text[2] == SASS_LOUD_COMMENT_CHAR - if silent - value = [line.text] - else - value = self.class.parse_interp( - line.text, line.index, to_parser_offset(line.offset), :filename => @filename) - end - value = Sass::Util.with_extracted_values(value) do |str| - str = str.gsub(/^#{line.comment_tab_str}/m, '')[2..-1] # get rid of // or /* - format_comment_text(str, silent) - end - type = if silent - :silent - elsif loud - :loud - else - :normal - end - Tree::CommentNode.new(value, type) - else - Tree::RuleNode.new(parse_interp(line.text), full_line_range(line)) - end - end - - DIRECTIVES = Set[:mixin, :include, :function, :return, :debug, :warn, :for, - :each, :while, :if, :else, :extend, :import, :media, :charset, :content, - :at_root, :error] - - # @comment - # rubocop:disable MethodLength - def parse_directive(parent, line, root) - directive, whitespace, value = line.text[1..-1].split(/(\s+)/, 2) - raise SyntaxError.new("Invalid directive: '@'.") unless directive - offset = directive.size + whitespace.size + 1 if whitespace - - directive_name = directive.gsub('-', '_').to_sym - if DIRECTIVES.include?(directive_name) - return send("parse_#{directive_name}_directive", parent, line, root, value, offset) - end - - unprefixed_directive = directive.gsub(/^-[a-z0-9]+-/i, '') - if unprefixed_directive == 'supports' - parser = Sass::SCSS::Parser.new(value, @options[:filename], @line) - return Tree::SupportsNode.new(directive, parser.parse_supports_condition) - end - - Tree::DirectiveNode.new( - value.nil? ? ["@#{directive}"] : ["@#{directive} "] + parse_interp(value, offset)) - end - - def parse_while_directive(parent, line, root, value, offset) - raise SyntaxError.new("Invalid while directive '@while': expected expression.") unless value - Tree::WhileNode.new(parse_script(value, :offset => offset)) - end - - def parse_if_directive(parent, line, root, value, offset) - raise SyntaxError.new("Invalid if directive '@if': expected expression.") unless value - Tree::IfNode.new(parse_script(value, :offset => offset)) - end - - def parse_debug_directive(parent, line, root, value, offset) - raise SyntaxError.new("Invalid debug directive '@debug': expected expression.") unless value - raise SyntaxError.new("Illegal nesting: Nothing may be nested beneath debug directives.", - :line => @line + 1) unless line.children.empty? - offset = line.offset + line.text.index(value).to_i - Tree::DebugNode.new(parse_script(value, :offset => offset)) - end - - def parse_error_directive(parent, line, root, value, offset) - raise SyntaxError.new("Invalid error directive '@error': expected expression.") unless value - raise SyntaxError.new("Illegal nesting: Nothing may be nested beneath error directives.", - :line => @line + 1) unless line.children.empty? - offset = line.offset + line.text.index(value).to_i - Tree::ErrorNode.new(parse_script(value, :offset => offset)) - end - - def parse_extend_directive(parent, line, root, value, offset) - raise SyntaxError.new("Invalid extend directive '@extend': expected expression.") unless value - raise SyntaxError.new("Illegal nesting: Nothing may be nested beneath extend directives.", - :line => @line + 1) unless line.children.empty? - optional = !!value.gsub!(/\s+#{Sass::SCSS::RX::OPTIONAL}$/, '') - offset = line.offset + line.text.index(value).to_i - interp_parsed = parse_interp(value, offset) - selector_range = Sass::Source::Range.new( - Sass::Source::Position.new(@line, to_parser_offset(offset)), - Sass::Source::Position.new(@line, to_parser_offset(line.offset) + line.text.length), - @options[:filename], @options[:importer] - ) - Tree::ExtendNode.new(interp_parsed, optional, selector_range) - end - # @comment - # rubocop:enable MethodLength - - def parse_warn_directive(parent, line, root, value, offset) - raise SyntaxError.new("Invalid warn directive '@warn': expected expression.") unless value - raise SyntaxError.new("Illegal nesting: Nothing may be nested beneath warn directives.", - :line => @line + 1) unless line.children.empty? - offset = line.offset + line.text.index(value).to_i - Tree::WarnNode.new(parse_script(value, :offset => offset)) - end - - def parse_return_directive(parent, line, root, value, offset) - raise SyntaxError.new("Invalid @return: expected expression.") unless value - raise SyntaxError.new("Illegal nesting: Nothing may be nested beneath return directives.", - :line => @line + 1) unless line.children.empty? - offset = line.offset + line.text.index(value).to_i - Tree::ReturnNode.new(parse_script(value, :offset => offset)) - end - - def parse_charset_directive(parent, line, root, value, offset) - name = value && value[/\A(["'])(.*)\1\Z/, 2] # " - raise SyntaxError.new("Invalid charset directive '@charset': expected string.") unless name - raise SyntaxError.new("Illegal nesting: Nothing may be nested beneath charset directives.", - :line => @line + 1) unless line.children.empty? - Tree::CharsetNode.new(name) - end - - def parse_media_directive(parent, line, root, value, offset) - parser = Sass::SCSS::Parser.new(value, - @options[:filename], @options[:importer], - @line, to_parser_offset(@offset)) - offset = line.offset + line.text.index('media').to_i - 1 - parsed_media_query_list = parser.parse_media_query_list.to_a - node = Tree::MediaNode.new(parsed_media_query_list) - node.source_range = Sass::Source::Range.new( - Sass::Source::Position.new(@line, to_parser_offset(offset)), - Sass::Source::Position.new(@line, to_parser_offset(line.offset) + line.text.length), - @options[:filename], @options[:importer]) - node - end - - def parse_at_root_directive(parent, line, root, value, offset) - return Sass::Tree::AtRootNode.new unless value - - if value.start_with?('(') - parser = Sass::SCSS::Parser.new(value, - @options[:filename], @options[:importer], - @line, to_parser_offset(@offset)) - offset = line.offset + line.text.index('at-root').to_i - 1 - return Tree::AtRootNode.new(parser.parse_at_root_query) - end - - at_root_node = Tree::AtRootNode.new - parsed = parse_interp(value, offset) - rule_node = Tree::RuleNode.new(parsed, full_line_range(line)) - - # The caller expects to automatically add children to the returned node - # and we want it to add children to the rule node instead, so we - # manually handle the wiring here and return nil so the caller doesn't - # duplicate our efforts. - append_children(rule_node, line.children, false) - at_root_node << rule_node - parent << at_root_node - nil - end - - def parse_for_directive(parent, line, root, value, offset) - var, from_expr, to_name, to_expr = - value.scan(/^([^\s]+)\s+from\s+(.+)\s+(to|through)\s+(.+)$/).first - - if var.nil? # scan failed, try to figure out why for error message - if value !~ /^[^\s]+/ - expected = "variable name" - elsif value !~ /^[^\s]+\s+from\s+.+/ - expected = "'from '" - else - expected = "'to ' or 'through '" - end - raise SyntaxError.new("Invalid for directive '@for #{value}': expected #{expected}.") - end - raise SyntaxError.new("Invalid variable \"#{var}\".") unless var =~ Script::VALIDATE - - var = var[1..-1] - parsed_from = parse_script(from_expr, :offset => line.offset + line.text.index(from_expr)) - parsed_to = parse_script(to_expr, :offset => line.offset + line.text.index(to_expr)) - Tree::ForNode.new(var, parsed_from, parsed_to, to_name == 'to') - end - - def parse_each_directive(parent, line, root, value, offset) - vars, list_expr = value.scan(/^([^\s]+(?:\s*,\s*[^\s]+)*)\s+in\s+(.+)$/).first - - if vars.nil? # scan failed, try to figure out why for error message - if value !~ /^[^\s]+/ - expected = "variable name" - elsif value !~ /^[^\s]+(?:\s*,\s*[^\s]+)*[^\s]+\s+from\s+.+/ - expected = "'in '" - end - raise SyntaxError.new("Invalid each directive '@each #{value}': expected #{expected}.") - end - - vars = vars.split(',').map do |var| - var.strip! - raise SyntaxError.new("Invalid variable \"#{var}\".") unless var =~ Script::VALIDATE - var[1..-1] - end - - parsed_list = parse_script(list_expr, :offset => line.offset + line.text.index(list_expr)) - Tree::EachNode.new(vars, parsed_list) - end - - def parse_else_directive(parent, line, root, value, offset) - previous = parent.children.last - raise SyntaxError.new("@else must come after @if.") unless previous.is_a?(Tree::IfNode) - - if value - if value !~ /^if\s+(.+)/ - raise SyntaxError.new("Invalid else directive '@else #{value}': expected 'if '.") - end - expr = parse_script($1, :offset => line.offset + line.text.index($1)) - end - - node = Tree::IfNode.new(expr) - append_children(node, line.children, false) - previous.add_else node - nil - end - - def parse_import_directive(parent, line, root, value, offset) - raise SyntaxError.new("Illegal nesting: Nothing may be nested beneath import directives.", - :line => @line + 1) unless line.children.empty? - - scanner = Sass::Util::MultibyteStringScanner.new(value) - values = [] - - loop do - unless (node = parse_import_arg(scanner, offset + scanner.pos)) - raise SyntaxError.new( - "Invalid @import: expected file to import, was #{scanner.rest.inspect}", - :line => @line) - end - values << node - break unless scanner.scan(/,\s*/) - end - - if scanner.scan(/;/) - raise SyntaxError.new("Invalid @import: expected end of line, was \";\".", - :line => @line) - end - - values - end - - # @comment - # rubocop:disable MethodLength - def parse_import_arg(scanner, offset) - return if scanner.eos? - - if scanner.match?(/url\(/i) - script_parser = Sass::Script::Parser.new(scanner, @line, to_parser_offset(offset), @options) - str = script_parser.parse_string - - if scanner.eos? - end_pos = str.source_range.end_pos - node = Tree::CssImportNode.new(str) - else - media_parser = Sass::SCSS::Parser.new(scanner, - @options[:filename], @options[:importer], - @line, str.source_range.end_pos.offset) - media = media_parser.parse_media_query_list - end_pos = Sass::Source::Position.new(@line, media_parser.offset + 1) - node = Tree::CssImportNode.new(str, media.to_a) - end - - node.source_range = Sass::Source::Range.new( - str.source_range.start_pos, end_pos, - @options[:filename], @options[:importer]) - return node - end - - unless (quoted_val = scanner.scan(Sass::SCSS::RX::STRING)) - scanned = scanner.scan(/[^,;]+/) - node = Tree::ImportNode.new(scanned) - start_parser_offset = to_parser_offset(offset) - node.source_range = Sass::Source::Range.new( - Sass::Source::Position.new(@line, start_parser_offset), - Sass::Source::Position.new(@line, start_parser_offset + scanned.length), - @options[:filename], @options[:importer]) - return node - end - - start_offset = offset - offset += scanner.matched.length - val = Sass::Script::Value::String.value(scanner[1] || scanner[2]) - scanned = scanner.scan(/\s*/) - if !scanner.match?(/[,;]|$/) - offset += scanned.length if scanned - media_parser = Sass::SCSS::Parser.new(scanner, - @options[:filename], @options[:importer], @line, offset) - media = media_parser.parse_media_query_list - node = Tree::CssImportNode.new(quoted_val, media.to_a) - node.source_range = Sass::Source::Range.new( - Sass::Source::Position.new(@line, to_parser_offset(start_offset)), - Sass::Source::Position.new(@line, media_parser.offset), - @options[:filename], @options[:importer]) - elsif val =~ %r{^(https?:)?//} - node = Tree::CssImportNode.new(quoted_val) - node.source_range = Sass::Source::Range.new( - Sass::Source::Position.new(@line, to_parser_offset(start_offset)), - Sass::Source::Position.new(@line, to_parser_offset(offset)), - @options[:filename], @options[:importer]) - else - node = Tree::ImportNode.new(val) - node.source_range = Sass::Source::Range.new( - Sass::Source::Position.new(@line, to_parser_offset(start_offset)), - Sass::Source::Position.new(@line, to_parser_offset(offset)), - @options[:filename], @options[:importer]) - end - node - end - # @comment - # rubocop:enable MethodLength - - def parse_mixin_directive(parent, line, root, value, offset) - parse_mixin_definition(line) - end - - MIXIN_DEF_RE = /^(?:=|@mixin)\s*(#{Sass::SCSS::RX::IDENT})(.*)$/ - def parse_mixin_definition(line) - name, arg_string = line.text.scan(MIXIN_DEF_RE).first - raise SyntaxError.new("Invalid mixin \"#{line.text[1..-1]}\".") if name.nil? - - offset = line.offset + line.text.size - arg_string.size - args, splat = Script::Parser.new(arg_string.strip, @line, to_parser_offset(offset), @options). - parse_mixin_definition_arglist - Tree::MixinDefNode.new(name, args, splat) - end - - CONTENT_RE = /^@content\s*(.+)?$/ - def parse_content_directive(parent, line, root, value, offset) - trailing = line.text.scan(CONTENT_RE).first.first - unless trailing.nil? - raise SyntaxError.new( - "Invalid content directive. Trailing characters found: \"#{trailing}\".") - end - raise SyntaxError.new("Illegal nesting: Nothing may be nested beneath @content directives.", - :line => line.index + 1) unless line.children.empty? - Tree::ContentNode.new - end - - def parse_include_directive(parent, line, root, value, offset) - parse_mixin_include(line, root) - end - - MIXIN_INCLUDE_RE = /^(?:\+|@include)\s*(#{Sass::SCSS::RX::IDENT})(.*)$/ - def parse_mixin_include(line, root) - name, arg_string = line.text.scan(MIXIN_INCLUDE_RE).first - raise SyntaxError.new("Invalid mixin include \"#{line.text}\".") if name.nil? - - offset = line.offset + line.text.size - arg_string.size - args, keywords, splat, kwarg_splat = - Script::Parser.new(arg_string.strip, @line, to_parser_offset(offset), @options). - parse_mixin_include_arglist - Tree::MixinNode.new(name, args, keywords, splat, kwarg_splat) - end - - FUNCTION_RE = /^@function\s*(#{Sass::SCSS::RX::IDENT})(.*)$/ - def parse_function_directive(parent, line, root, value, offset) - name, arg_string = line.text.scan(FUNCTION_RE).first - raise SyntaxError.new("Invalid function definition \"#{line.text}\".") if name.nil? - - offset = line.offset + line.text.size - arg_string.size - args, splat = Script::Parser.new(arg_string.strip, @line, to_parser_offset(offset), @options). - parse_function_definition_arglist - Tree::FunctionNode.new(name, args, splat) - end - - def parse_script(script, options = {}) - line = options[:line] || @line - offset = options[:offset] || @offset + 1 - Script.parse(script, line, offset, @options) - end - - def format_comment_text(text, silent) - content = text.split("\n") - - if content.first && content.first.strip.empty? - removed_first = true - content.shift - end - - return "/* */" if content.empty? - content.last.gsub!(/ ?\*\/ *$/, '') - first = content.shift unless removed_first - content.map! {|l| l.gsub!(/^\*( ?)/, '\1') || (l.empty? ? "" : " ") + l} - content.unshift first unless removed_first - if silent - "/*" + content.join("\n *") + " */" - else - # The #gsub fixes the case of a trailing */ - "/*" + content.join("\n *").gsub(/ \*\Z/, '') + " */" - end - end - - def parse_interp(text, offset = 0) - self.class.parse_interp(text, @line, offset, :filename => @filename) - end - - # Parser tracks 1-based line and offset, so our offset should be converted. - def to_parser_offset(offset) - offset + 1 - end - - def full_line_range(line) - Sass::Source::Range.new( - Sass::Source::Position.new(@line, to_parser_offset(line.offset)), - Sass::Source::Position.new(@line, to_parser_offset(line.offset) + line.text.length), - @options[:filename], @options[:importer]) - end - - # It's important that this have strings (at least) - # at the beginning, the end, and between each Script::Tree::Node. - # - # @private - def self.parse_interp(text, line, offset, options) - res = [] - rest = Sass::Shared.handle_interpolation text do |scan| - escapes = scan[2].size - res << scan.matched[0...-2 - escapes] - if escapes.odd? - res << "\\" * (escapes - 1) << '#{' - else - res << "\\" * [0, escapes - 1].max - # Add 1 to emulate to_parser_offset. - res << Script::Parser.new( - scan, line, offset + scan.pos - scan.matched_size + 1, options). - parse_interpolated - end - end - res << rest - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/environment.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/environment.rb deleted file mode 100644 index f4c1231..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/environment.rb +++ /dev/null @@ -1,208 +0,0 @@ -require 'set' - -module Sass - # The abstract base class for lexical environments for SassScript. - class BaseEnvironment - class << self - # Note: when updating this, - # update sass/yard/inherited_hash.rb as well. - def inherited_hash_accessor(name) - inherited_hash_reader(name) - inherited_hash_writer(name) - end - - def inherited_hash_reader(name) - class_eval <<-RUBY, __FILE__, __LINE__ + 1 - def #{name}(name) - _#{name}(name.tr('_', '-')) - end - - def _#{name}(name) - (@#{name}s && @#{name}s[name]) || @parent && @parent._#{name}(name) - end - protected :_#{name} - - def is_#{name}_global?(name) - return !@parent if @#{name}s && @#{name}s.has_key?(name) - @parent && @parent.is_#{name}_global?(name) - end - RUBY - end - - def inherited_hash_writer(name) - class_eval <<-RUBY, __FILE__, __LINE__ + 1 - def set_#{name}(name, value) - name = name.tr('_', '-') - @#{name}s[name] = value unless try_set_#{name}(name, value) - end - - def try_set_#{name}(name, value) - @#{name}s ||= {} - if @#{name}s.include?(name) - @#{name}s[name] = value - true - elsif @parent && !@parent.global? - @parent.try_set_#{name}(name, value) - else - false - end - end - protected :try_set_#{name} - - def set_local_#{name}(name, value) - @#{name}s ||= {} - @#{name}s[name.tr('_', '-')] = value - end - - def set_global_#{name}(name, value) - global_env.set_#{name}(name, value) - end - RUBY - end - end - - # The options passed to the Sass Engine. - attr_reader :options - - attr_writer :caller - attr_writer :content - attr_writer :selector - - # variable - # Script::Value - inherited_hash_reader :var - - # mixin - # Sass::Callable - inherited_hash_reader :mixin - - # function - # Sass::Callable - inherited_hash_reader :function - - # @param options [{Symbol => Object}] The options hash. See - # {file:SASS_REFERENCE.md#sass_options the Sass options documentation}. - # @param parent [Environment] See \{#parent} - def initialize(parent = nil, options = nil) - @parent = parent - @options = options || (parent && parent.options) || {} - @stack = Sass::Stack.new if @parent.nil? - end - - # Returns whether this is the global environment. - # - # @return [Boolean] - def global? - @parent.nil? - end - - # The environment of the caller of this environment's mixin or function. - # @return {Environment?} - def caller - @caller || (@parent && @parent.caller) - end - - # The content passed to this environment. This is naturally only set - # for mixin body environments with content passed in. - # - # @return {[Array, Environment]?} The content nodes and - # the lexical environment of the content block. - def content - @content || (@parent && @parent.content) - end - - # The selector for the current CSS rule, or nil if there is no - # current CSS rule. - # - # @return [Selector::CommaSequence?] The current selector, with any - # nesting fully resolved. - def selector - @selector || (@caller && @caller.selector) || (@parent && @parent.selector) - end - - # The top-level Environment object. - # - # @return [Environment] - def global_env - @global_env ||= global? ? self : @parent.global_env - end - - # The import/mixin stack. - # - # @return [Sass::Stack] - def stack - @stack || global_env.stack - end - end - - # The lexical environment for SassScript. - # This keeps track of variable, mixin, and function definitions. - # - # A new environment is created for each level of Sass nesting. - # This allows variables to be lexically scoped. - # The new environment refers to the environment in the upper scope, - # so it has access to variables defined in enclosing scopes, - # but new variables are defined locally. - # - # Environment also keeps track of the {Engine} options - # so that they can be made available to {Sass::Script::Functions}. - class Environment < BaseEnvironment - # The enclosing environment, - # or nil if this is the global environment. - # - # @return [Environment] - attr_reader :parent - - # variable - # Script::Value - inherited_hash_writer :var - - # mixin - # Sass::Callable - inherited_hash_writer :mixin - - # function - # Sass::Callable - inherited_hash_writer :function - end - - # A read-only wrapper for a lexical environment for SassScript. - class ReadOnlyEnvironment < BaseEnvironment - # The read-only environment of the caller of this environment's mixin or function. - # - # @see BaseEnvironment#caller - # @return {ReadOnlyEnvironment} - def caller - return @caller if @caller - env = super - @caller ||= env.is_a?(ReadOnlyEnvironment) ? env : ReadOnlyEnvironment.new(env, env.options) - end - - # The read-only content passed to this environment. - # - # @see BaseEnvironment#content - # @return {ReadOnlyEnvironment} - def content - return @content if @content - env = super - @content ||= env.is_a?(ReadOnlyEnvironment) ? env : ReadOnlyEnvironment.new(env, env.options) - end - end - - # An environment that can write to in-scope global variables, but doesn't - # create new variables in the global scope. Useful for top-level control - # directives. - class SemiGlobalEnvironment < Environment - def try_set_var(name, value) - @vars ||= {} - if @vars.include?(name) - @vars[name] = value - true - elsif @parent - @parent.try_set_var(name, value) - else - false - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/error.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/error.rb deleted file mode 100644 index 79b2f90..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/error.rb +++ /dev/null @@ -1,198 +0,0 @@ -module Sass - # An exception class that keeps track of - # the line of the Sass template it was raised on - # and the Sass file that was being parsed (if applicable). - # - # All Sass errors are raised as {Sass::SyntaxError}s. - # - # When dealing with SyntaxErrors, - # it's important to provide filename and line number information. - # This will be used in various error reports to users, including backtraces; - # see \{#sass\_backtrace} for details. - # - # Some of this information is usually provided as part of the constructor. - # New backtrace entries can be added with \{#add\_backtrace}, - # which is called when an exception is raised between files (e.g. with `@import`). - # - # Often, a chunk of code will all have similar backtrace information - - # the same filename or even line. - # It may also be useful to have a default line number set. - # In those situations, the default values can be used - # by omitting the information on the original exception, - # and then calling \{#modify\_backtrace} in a wrapper `rescue`. - # When doing this, be sure that all exceptions ultimately end up - # with the information filled in. - class SyntaxError < StandardError - # The backtrace of the error within Sass files. - # This is an array of hashes containing information for a single entry. - # The hashes have the following keys: - # - # `:filename` - # : The name of the file in which the exception was raised, - # or `nil` if no filename is available. - # - # `:mixin` - # : The name of the mixin in which the exception was raised, - # or `nil` if it wasn't raised in a mixin. - # - # `:line` - # : The line of the file on which the error occurred. Never nil. - # - # This information is also included in standard backtrace format - # in the output of \{#backtrace}. - # - # @return [Aray<{Symbol => Object>}] - attr_accessor :sass_backtrace - - # The text of the template where this error was raised. - # - # @return [String] - attr_accessor :sass_template - - # @param msg [String] The error message - # @param attrs [{Symbol => Object}] The information in the backtrace entry. - # See \{#sass\_backtrace} - def initialize(msg, attrs = {}) - @message = msg - @sass_backtrace = [] - add_backtrace(attrs) - end - - # The name of the file in which the exception was raised. - # This could be `nil` if no filename is available. - # - # @return [String, nil] - def sass_filename - sass_backtrace.first[:filename] - end - - # The name of the mixin in which the error occurred. - # This could be `nil` if the error occurred outside a mixin. - # - # @return [Fixnum] - def sass_mixin - sass_backtrace.first[:mixin] - end - - # The line of the Sass template on which the error occurred. - # - # @return [Fixnum] - def sass_line - sass_backtrace.first[:line] - end - - # Adds an entry to the exception's Sass backtrace. - # - # @param attrs [{Symbol => Object}] The information in the backtrace entry. - # See \{#sass\_backtrace} - def add_backtrace(attrs) - sass_backtrace << attrs.reject {|k, v| v.nil?} - end - - # Modify the top Sass backtrace entries - # (that is, the most deeply nested ones) - # to have the given attributes. - # - # Specifically, this goes through the backtrace entries - # from most deeply nested to least, - # setting the given attributes for each entry. - # If an entry already has one of the given attributes set, - # the pre-existing attribute takes precedence - # and is not used for less deeply-nested entries - # (even if they don't have that attribute set). - # - # @param attrs [{Symbol => Object}] The information to add to the backtrace entry. - # See \{#sass\_backtrace} - def modify_backtrace(attrs) - attrs = attrs.reject {|k, v| v.nil?} - # Move backwards through the backtrace - (0...sass_backtrace.size).to_a.reverse.each do |i| - entry = sass_backtrace[i] - sass_backtrace[i] = attrs.merge(entry) - attrs.reject! {|k, v| entry.include?(k)} - break if attrs.empty? - end - end - - # @return [String] The error message - def to_s - @message - end - - # Returns the standard exception backtrace, - # including the Sass backtrace. - # - # @return [Array] - def backtrace - return nil if super.nil? - return super if sass_backtrace.all? {|h| h.empty?} - sass_backtrace.map do |h| - "#{h[:filename] || "(sass)"}:#{h[:line]}" + - (h[:mixin] ? ":in `#{h[:mixin]}'" : "") - end + super - end - - # Returns a string representation of the Sass backtrace. - # - # @param default_filename [String] The filename to use for unknown files - # @see #sass_backtrace - # @return [String] - def sass_backtrace_str(default_filename = "an unknown file") - lines = message.split("\n") - msg = lines[0] + lines[1..-1]. - map {|l| "\n" + (" " * "Error: ".size) + l}.join - "Error: #{msg}" + - Sass::Util.enum_with_index(sass_backtrace).map do |entry, i| - "\n #{i == 0 ? "on" : "from"} line #{entry[:line]}" + - " of #{entry[:filename] || default_filename}" + - (entry[:mixin] ? ", in `#{entry[:mixin]}'" : "") - end.join - end - - class << self - # Returns an error report for an exception in CSS format. - # - # @param e [Exception] - # @param line_offset [Fixnum] The number of the first line of the Sass template. - # @return [String] The error report - # @raise [Exception] `e`, if the - # {file:SASS_REFERENCE.md#full_exception-option `:full_exception`} option - # is set to false. - def exception_to_css(e, line_offset = 1) - header = header_string(e, line_offset) - - <] The command-line arguments - def initialize(args) - @args = args - @options = {} - end - - # Parses the command-line arguments and runs the executable. - # Calls `Kernel#exit` at the end, so it never returns. - # - # @see #parse - def parse! - # rubocop:disable RescueException - begin - parse - rescue Exception => e - # Exit code 65 indicates invalid data per - # http://www.freebsd.org/cgi/man.cgi?query=sysexits. Setting it via - # at_exit is a bit of a hack, but it allows us to rethrow when --trace - # is active and get both the built-in exception formatting and the - # correct exit code. - at_exit {exit 65} if e.is_a?(Sass::SyntaxError) - - raise e if @options[:trace] || e.is_a?(SystemExit) - - if e.is_a?(Sass::SyntaxError) - $stderr.puts e.sass_backtrace_str("standard input") - else - $stderr.print "#{e.class}: " unless e.class == RuntimeError - $stderr.puts e.message.to_s - end - $stderr.puts " Use --trace for backtrace." - - exit 1 - end - exit 0 - # rubocop:enable RescueException - end - - # Parses the command-line arguments and runs the executable. - # This does not handle exceptions or exit the program. - # - # @see #parse! - def parse - @opts = OptionParser.new(&method(:set_opts)) - @opts.parse!(@args) - - process_result - - @options - end - - # @return [String] A description of the executable - def to_s - @opts.to_s - end - - protected - - # Finds the line of the source template - # on which an exception was raised. - # - # @param exception [Exception] The exception - # @return [String] The line number - def get_line(exception) - # SyntaxErrors have weird line reporting - # when there's trailing whitespace - if exception.is_a?(::SyntaxError) - return (exception.message.scan(/:(\d+)/).first || ["??"]).first - end - (exception.backtrace[0].scan(/:(\d+)/).first || ["??"]).first - end - - # Tells optparse how to parse the arguments - # available for all executables. - # - # This is meant to be overridden by subclasses - # so they can add their own options. - # - # @param opts [OptionParser] - def set_opts(opts) - Sass::Util.abstract(this) - end - - # Set an option for specifying `Encoding.default_external`. - # - # @param opts [OptionParser] - def encoding_option(opts) - encoding_desc = if Sass::Util.ruby1_8? - 'Does not work in Ruby 1.8.' - else - 'Specify the default encoding for input files.' - end - opts.on('-E', '--default-encoding ENCODING', encoding_desc) do |encoding| - if Sass::Util.ruby1_8? - $stderr.puts "Specifying the encoding is not supported in ruby 1.8." - exit 1 - else - Encoding.default_external = encoding - end - end - end - - # Processes the options set by the command-line arguments. In particular, - # sets `@options[:input]` and `@options[:output]` to appropriate IO streams. - # - # This is meant to be overridden by subclasses - # so they can run their respective programs. - def process_result - input, output = @options[:input], @options[:output] - args = @args.dup - input ||= - begin - filename = args.shift - @options[:filename] = filename - open_file(filename) || $stdin - end - @options[:output_filename] = args.shift - output ||= @options[:output_filename] || $stdout - @options[:input], @options[:output] = input, output - end - - COLORS = {:red => 31, :green => 32, :yellow => 33} - - # Prints a status message about performing the given action, - # colored using the given color (via terminal escapes) if possible. - # - # @param name [#to_s] A short name for the action being performed. - # Shouldn't be longer than 11 characters. - # @param color [Symbol] The name of the color to use for this action. - # Can be `:red`, `:green`, or `:yellow`. - def puts_action(name, color, arg) - return if @options[:for_engine][:quiet] - printf color(color, "%11s %s\n"), name, arg - STDOUT.flush - end - - # Same as `Kernel.puts`, but doesn't print anything if the `--quiet` option is set. - # - # @param args [Array] Passed on to `Kernel.puts` - def puts(*args) - return if @options[:for_engine][:quiet] - Kernel.puts(*args) - end - - # Wraps the given string in terminal escapes - # causing it to have the given color. - # If terminal esapes aren't supported on this platform, - # just returns the string instead. - # - # @param color [Symbol] The name of the color to use. - # Can be `:red`, `:green`, or `:yellow`. - # @param str [String] The string to wrap in the given color. - # @return [String] The wrapped string. - def color(color, str) - raise "[BUG] Unrecognized color #{color}" unless COLORS[color] - - # Almost any real Unix terminal will support color, - # so we just filter for Windows terms (which don't set TERM) - # and not-real terminals, which aren't ttys. - return str if ENV["TERM"].nil? || ENV["TERM"].empty? || !STDOUT.tty? - "\e[#{COLORS[color]}m#{str}\e[0m" - end - - def write_output(text, destination) - if destination.is_a?(String) - open_file(destination, 'w') {|file| file.write(text)} - else - destination.write(text) - end - end - - private - - def open_file(filename, flag = 'r') - return if filename.nil? - flag = 'wb' if @options[:unix_newlines] && flag == 'w' - file = File.open(filename, flag) - return file unless block_given? - yield file - file.close - end - - def handle_load_error(err) - dep = err.message[/^no such file to load -- (.*)/, 1] - raise err if @options[:trace] || dep.nil? || dep.empty? - $stderr.puts <] The command-line arguments - def initialize(args) - super - require 'sass' - @options[:for_tree] = {} - @options[:for_engine] = {:cache => false, :read_cache => true} - end - - # Tells optparse how to parse the arguments. - # - # @param opts [OptionParser] - def set_opts(opts) - opts.banner = < e - raise e if @options[:trace] - file = " of #{e.sass_filename}" if e.sass_filename - raise "Error on line #{e.sass_line}#{file}: #{e.message}\n Use --trace for backtrace" - rescue LoadError => err - handle_load_error(err) - end - - def path_for(file) - return file.path if file.is_a?(File) - return file if file.is_a?(String) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/exec/sass_scss.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/exec/sass_scss.rb deleted file mode 100644 index 7ef39a3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/exec/sass_scss.rb +++ /dev/null @@ -1,455 +0,0 @@ -module Sass::Exec - # The `sass` and `scss` executables. - class SassScss < Base - attr_reader :default_syntax - - # @param args [Array] The command-line arguments - def initialize(args, default_syntax) - super(args) - @options[:sourcemap] = :auto - @options[:for_engine] = { - :load_paths => default_sass_path - } - @default_syntax = default_syntax - end - - protected - - # Tells optparse how to parse the arguments. - # - # @param opts [OptionParser] - def set_opts(opts) - opts.banner = <>> Sass is watching for changes. Press Ctrl-C to stop." - - Sass::Plugin.on_template_modified do |template| - puts ">>> Change detected to: #{template}" - STDOUT.flush - end - Sass::Plugin.on_template_created do |template| - puts ">>> New template detected: #{template}" - STDOUT.flush - end - Sass::Plugin.on_template_deleted do |template| - puts ">>> Deleted template detected: #{template}" - STDOUT.flush - end - - Sass::Plugin.watch(files) - end - # @comment - # rubocop:enable MethodLength - - def run - input = @options[:input] - output = @options[:output] - - @options[:for_engine][:syntax] ||= :scss if input.is_a?(File) && input.path =~ /\.scss$/ - @options[:for_engine][:syntax] ||= @default_syntax - engine = - if input.is_a?(File) && !@options[:check_syntax] - Sass::Engine.for_file(input.path, @options[:for_engine]) - else - # We don't need to do any special handling of @options[:check_syntax] here, - # because the Sass syntax checking happens alongside evaluation - # and evaluation doesn't actually evaluate any code anyway. - Sass::Engine.new(input.read, @options[:for_engine]) - end - - input.close if input.is_a?(File) - - if @options[:sourcemap] != :none && @options[:sourcemap_filename] - relative_sourcemap_path = Sass::Util.relative_path_from( - @options[:sourcemap_filename], Sass::Util.pathname(@options[:output_filename]).dirname) - rendered, mapping = engine.render_with_sourcemap(relative_sourcemap_path.to_s) - write_output(rendered, output) - write_output(mapping.to_json( - :type => @options[:sourcemap], - :css_path => @options[:output_filename], - :sourcemap_path => @options[:sourcemap_filename]) + "\n", - @options[:sourcemap_filename]) - else - write_output(engine.render, output) - end - rescue Sass::SyntaxError => e - write_output(Sass::SyntaxError.exception_to_css(e), output) if output.is_a?(String) - raise e - ensure - output.close if output.is_a? File - end - - def colon_path?(path) - !split_colon_path(path)[1].nil? - end - - def split_colon_path(path) - one, two = path.split(':', 2) - if one && two && Sass::Util.windows? && - one =~ /\A[A-Za-z]\Z/ && two =~ /\A[\/\\]/ - # If we're on Windows and we were passed a drive letter path, - # don't split on that colon. - one2, two = two.split(':', 2) - one = one + ':' + one2 - end - return one, two - end - - # Whether path is likely to be meant as the destination - # in a source:dest pair. - def probably_dest_dir?(path) - return false unless path - return false if colon_path?(path) - Sass::Util.glob(File.join(path, "*.s[ca]ss")).empty? - end - - def default_sass_path - return unless ENV['SASS_PATH'] - # The select here prevents errors when the environment's - # load paths specified do not exist. - ENV['SASS_PATH'].split(File::PATH_SEPARATOR).select {|d| File.directory?(d)} - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/features.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/features.rb deleted file mode 100644 index f93031e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/features.rb +++ /dev/null @@ -1,47 +0,0 @@ -require 'set' -module Sass - # Provides `Sass.has_feature?` which allows for simple feature detection - # by providing a feature name. - module Features - # This is the set of features that can be detected. - # - # When this is updated, the documentation of `feature-exists()` should be - # updated as well. - KNOWN_FEATURES = Set[*%w{ - global-variable-shadowing - extend-selector-pseudoclass - units-level-3 - at-error - }] - - # Check if a feature exists by name. This is used to implement - # the Sass function `feature-exists($feature)` - # - # @param feature_name [String] The case sensitive name of the feature to - # check if it exists in this version of Sass. - # @return [Boolean] whether the feature of that name exists. - def has_feature?(feature_name) - KNOWN_FEATURES.include?(feature_name) - end - - # Add a feature to Sass. Plugins can use this to easily expose their - # availability to end users. Plugins must prefix their feature - # names with a dash to distinguish them from official features. - # - # @example - # Sass.add_feature("-import-globbing") - # Sass.add_feature("-math-cos") - # - # - # @param feature_name [String] The case sensitive name of the feature to - # to add to Sass. Must begin with a dash. - def add_feature(feature_name) - unless feature_name[0] == ?- - raise ArgumentError.new("Plugin feature names must begin with a dash") - end - KNOWN_FEATURES << feature_name - end - end - - extend Features -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/importers.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/importers.rb deleted file mode 100644 index 1561a2d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/importers.rb +++ /dev/null @@ -1,22 +0,0 @@ -module Sass - # Sass importers are in charge of taking paths passed to `@import` - # and finding the appropriate Sass code for those paths. - # By default, this code is always loaded from the filesystem, - # but importers could be added to load from a database or over HTTP. - # - # Each importer is in charge of a single load path - # (or whatever the corresponding notion is for the backend). - # Importers can be placed in the {file:SASS_REFERENCE.md#load_paths-option `:load_paths` array} - # alongside normal filesystem paths. - # - # When resolving an `@import`, Sass will go through the load paths - # looking for an importer that successfully imports the path. - # Once one is found, the imported file is used. - # - # User-created importers must inherit from {Importers::Base}. - module Importers - end -end - -require 'sass/importers/base' -require 'sass/importers/filesystem' diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/importers/base.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/importers/base.rb deleted file mode 100644 index 62fb814..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/importers/base.rb +++ /dev/null @@ -1,182 +0,0 @@ -module Sass - module Importers - # The abstract base class for Sass importers. - # All importers should inherit from this. - # - # At the most basic level, an importer is given a string - # and must return a {Sass::Engine} containing some Sass code. - # This string can be interpreted however the importer wants; - # however, subclasses are encouraged to use the URI format - # for pathnames. - # - # Importers that have some notion of "relative imports" - # should take a single load path in their constructor, - # and interpret paths as relative to that. - # They should also implement the \{#find\_relative} method. - # - # Importers should be serializable via `Marshal.dump`. - # - # @abstract - class Base - # Find a Sass file relative to another file. - # Importers without a notion of "relative paths" - # should just return nil here. - # - # If the importer does have a notion of "relative paths", - # it should ignore its load path during this method. - # - # See \{#find} for important information on how this method should behave. - # - # The `:filename` option passed to the returned {Sass::Engine} - # should be of a format that could be passed to \{#find}. - # - # @param uri [String] The URI to import. This is not necessarily relative, - # but this method should only return true if it is. - # @param base [String] The base filename. If `uri` is relative, - # it should be interpreted as relative to `base`. - # `base` is guaranteed to be in a format importable by this importer. - # @param options [{Symbol => Object}] Options for the Sass file - # containing the `@import` that's currently being resolved. - # @return [Sass::Engine, nil] An Engine containing the imported file, - # or nil if it couldn't be found or was in the wrong format. - def find_relative(uri, base, options) - Sass::Util.abstract(self) - end - - # Find a Sass file, if it exists. - # - # This is the primary entry point of the Importer. - # It corresponds directly to an `@import` statement in Sass. - # It should do three basic things: - # - # * Determine if the URI is in this importer's format. - # If not, return nil. - # * Determine if the file indicated by the URI actually exists and is readable. - # If not, return nil. - # * Read the file and place the contents in a {Sass::Engine}. - # Return that engine. - # - # If this importer's format allows for file extensions, - # it should treat them the same way as the default {Filesystem} importer. - # If the URI explicitly has a `.sass` or `.scss` filename, - # the importer should look for that exact file - # and import it as the syntax indicated. - # If it doesn't exist, the importer should return nil. - # - # If the URI doesn't have either of these extensions, - # the importer should look for files with the extensions. - # If no such files exist, it should return nil. - # - # The {Sass::Engine} to be returned should be passed `options`, - # with a few modifications. `:syntax` should be set appropriately, - # `:filename` should be set to `uri`, - # and `:importer` should be set to this importer. - # - # @param uri [String] The URI to import. - # @param options [{Symbol => Object}] Options for the Sass file - # containing the `@import` that's currently being resolved. - # This is safe for subclasses to modify destructively. - # Callers should only pass in a value they don't mind being destructively modified. - # @return [Sass::Engine, nil] An Engine containing the imported file, - # or nil if it couldn't be found or was in the wrong format. - def find(uri, options) - Sass::Util.abstract(self) - end - - # Returns the time the given Sass file was last modified. - # - # If the given file has been deleted or the time can't be accessed - # for some other reason, this should return nil. - # - # @param uri [String] The URI of the file to check. - # Comes from a `:filename` option set on an engine returned by this importer. - # @param options [{Symbol => Objet}] Options for the Sass file - # containing the `@import` currently being checked. - # @return [Time, nil] - def mtime(uri, options) - Sass::Util.abstract(self) - end - - # Get the cache key pair for the given Sass URI. - # The URI need not be checked for validity. - # - # The only strict requirement is that the returned pair of strings - # uniquely identify the file at the given URI. - # However, the first component generally corresponds roughly to the directory, - # and the second to the basename, of the URI. - # - # Note that keys must be unique *across importers*. - # Thus it's probably a good idea to include the importer name - # at the beginning of the first component. - # - # @param uri [String] A URI known to be valid for this importer. - # @param options [{Symbol => Object}] Options for the Sass file - # containing the `@import` currently being checked. - # @return [(String, String)] The key pair which uniquely identifies - # the file at the given URI. - def key(uri, options) - Sass::Util.abstract(self) - end - - # Get the publicly-visible URL for an imported file. This URL is used by - # source maps to link to the source stylesheet. This may return `nil` to - # indicate that no public URL is available; however, this will cause - # sourcemap generation to fail if any CSS is generated from files imported - # from this importer. - # - # If an absolute "file:" URI can be produced for an imported file, that - # should be preferred to returning `nil`. However, a URL relative to - # `sourcemap_directory` should be preferred over an absolute "file:" URI. - # - # @param uri [String] A URI known to be valid for this importer. - # @param sourcemap_directory [String, NilClass] The absolute path to a - # directory on disk where the sourcemap will be saved. If uri refers to - # a file on disk that's accessible relative to sourcemap_directory, this - # may return a relative URL. This may be `nil` if the sourcemap's - # eventual location is unknown. - # @return [String?] The publicly-visible URL for this file, or `nil` - # indicating that no publicly-visible URL exists. This should be - # appropriately URL-escaped. - def public_url(uri, sourcemap_directory) - return if @public_url_warning_issued - @public_url_warning_issued = true - Sass::Util.sass_warn <] List of absolute paths of directories to watch - def directories_to_watch - [] - end - - # If this importer is based on files on the local filesystem This method - # should return true if the file, when changed, should trigger a - # recompile. - # - # It is acceptable for non-sass files to be watched and trigger a recompile. - # - # @param filename [String] The absolute filename for a file that has changed. - # @return [Boolean] When the file changed should cause a recompile. - def watched_file?(filename) - false - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/importers/filesystem.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/importers/filesystem.rb deleted file mode 100644 index aeff696..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/importers/filesystem.rb +++ /dev/null @@ -1,217 +0,0 @@ -require 'set' - -module Sass - module Importers - # The default importer, used for any strings found in the load path. - # Simply loads Sass files from the filesystem using the default logic. - class Filesystem < Base - attr_accessor :root - - # Creates a new filesystem importer that imports files relative to a given path. - # - # @param root [String] The root path. - # This importer will import files relative to this path. - def initialize(root) - @root = File.expand_path(root) - @real_root = Sass::Util.realpath(@root).to_s - @same_name_warnings = Set.new - end - - # @see Base#find_relative - def find_relative(name, base, options) - _find(File.dirname(base), name, options) - end - - # @see Base#find - def find(name, options) - _find(@root, name, options) - end - - # @see Base#mtime - def mtime(name, options) - file, _ = Sass::Util.destructure(find_real_file(@root, name, options)) - File.mtime(file) if file - rescue Errno::ENOENT - nil - end - - # @see Base#key - def key(name, options) - [self.class.name + ":" + File.dirname(File.expand_path(name)), - File.basename(name)] - end - - # @see Base#to_s - def to_s - @root - end - - def hash - @root.hash - end - - def eql?(other) - !other.nil? && other.respond_to?(:root) && root.eql?(other.root) - end - - # @see Base#directories_to_watch - def directories_to_watch - [root] - end - - # @see Base#watched_file? - def watched_file?(filename) - # Check against the root with symlinks resolved, since Listen - # returns fully-resolved paths. - filename =~ /\.s[ac]ss$/ && filename.start_with?(@real_root + File::SEPARATOR) - end - - def public_url(name, sourcemap_directory) - file_pathname = Sass::Util.cleanpath(Sass::Util.absolute_path(name, @root)) - return Sass::Util.file_uri_from_path(file_pathname) if sourcemap_directory.nil? - - sourcemap_pathname = Sass::Util.cleanpath(sourcemap_directory) - begin - Sass::Util.file_uri_from_path( - Sass::Util.relative_path_from(file_pathname, sourcemap_pathname)) - rescue ArgumentError # when a relative path cannot be constructed - Sass::Util.file_uri_from_path(file_pathname) - end - end - - protected - - # If a full uri is passed, this removes the root from it - # otherwise returns the name unchanged - def remove_root(name) - if name.index(@root + "/") == 0 - name[(@root.length + 1)..-1] - else - name - end - end - - # A hash from file extensions to the syntaxes for those extensions. - # The syntaxes must be `:sass` or `:scss`. - # - # This can be overridden by subclasses that want normal filesystem importing - # with unusual extensions. - # - # @return [{String => Symbol}] - def extensions - {'sass' => :sass, 'scss' => :scss} - end - - # Given an `@import`ed path, returns an array of possible - # on-disk filenames and their corresponding syntaxes for that path. - # - # @param name [String] The filename. - # @return [Array(String, Symbol)] An array of pairs. - # The first element of each pair is a filename to look for; - # the second element is the syntax that file would be in (`:sass` or `:scss`). - def possible_files(name) - name = escape_glob_characters(name) - dirname, basename, extname = split(name) - sorted_exts = extensions.sort - syntax = extensions[extname] - - if syntax - ret = [["#{dirname}/{_,}#{basename}.#{extensions.invert[syntax]}", syntax]] - else - ret = sorted_exts.map {|ext, syn| ["#{dirname}/{_,}#{basename}.#{ext}", syn]} - end - - # JRuby chokes when trying to import files from JARs when the path starts with './'. - ret.map {|f, s| [f.sub(/^\.\//, ''), s]} - end - - def escape_glob_characters(name) - name.gsub(/[\*\[\]\{\}\?]/) do |char| - "\\#{char}" - end - end - - REDUNDANT_DIRECTORY = /#{Regexp.escape(File::SEPARATOR)}\.#{Regexp.escape(File::SEPARATOR)}/ - # Given a base directory and an `@import`ed name, - # finds an existant file that matches the name. - # - # @param dir [String] The directory relative to which to search. - # @param name [String] The filename to search for. - # @return [(String, Symbol)] A filename-syntax pair. - def find_real_file(dir, name, options) - # On windows 'dir' or 'name' can be in native File::ALT_SEPARATOR form. - dir = dir.gsub(File::ALT_SEPARATOR, File::SEPARATOR) unless File::ALT_SEPARATOR.nil? - name = name.gsub(File::ALT_SEPARATOR, File::SEPARATOR) unless File::ALT_SEPARATOR.nil? - - found = possible_files(remove_root(name)).map do |f, s| - path = (dir == "." || Sass::Util.pathname(f).absolute?) ? f : - "#{escape_glob_characters(dir)}/#{f}" - Dir[path].map do |full_path| - full_path.gsub!(REDUNDANT_DIRECTORY, File::SEPARATOR) - [Sass::Util.cleanpath(full_path).to_s, s] - end - end - found = Sass::Util.flatten(found, 1) - return if found.empty? - - if found.size > 1 && !@same_name_warnings.include?(found.first.first) - found.each {|(f, _)| @same_name_warnings << f} - relative_to = Sass::Util.pathname(dir) - if options[:_from_import_node] - # If _line exists, we're here due to an actual import in an - # import_node and we want to print a warning for a user writing an - # ambiguous import. - candidates = found.map do |(f, _)| - " " + Sass::Util.pathname(f).relative_path_from(relative_to).to_s - end.join("\n") - raise Sass::SyntaxError.new(<= log_levels[min_level] - end - - def log_level(name, options = {}) - if options[:prepend] - level = log_levels.values.min - level = level.nil? ? 0 : level - 1 - else - level = log_levels.values.max - level = level.nil? ? 0 : level + 1 - end - log_levels.update(name => level) - define_logger(name) - end - - def define_logger(name, options = {}) - class_eval <<-RUBY, __FILE__, __LINE__ + 1 - def #{name}(message) - #{options.fetch(:to, :log)}(#{name.inspect}, message) - end - RUBY - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/media.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/media.rb deleted file mode 100644 index dc4542d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/media.rb +++ /dev/null @@ -1,210 +0,0 @@ -# A namespace for the `@media` query parse tree. -module Sass::Media - # A comma-separated list of queries. - # - # media_query [ ',' S* media_query ]* - class QueryList - # The queries contained in this list. - # - # @return [Array] - attr_accessor :queries - - # @param queries [Array] See \{#queries} - def initialize(queries) - @queries = queries - end - - # Merges this query list with another. The returned query list - # queries for the intersection between the two inputs. - # - # Both query lists should be resolved. - # - # @param other [QueryList] - # @return [QueryList?] The merged list, or nil if there is no intersection. - def merge(other) - new_queries = queries.map {|q1| other.queries.map {|q2| q1.merge(q2)}}.flatten.compact - return if new_queries.empty? - QueryList.new(new_queries) - end - - # Returns the CSS for the media query list. - # - # @return [String] - def to_css - queries.map {|q| q.to_css}.join(', ') - end - - # Returns the Sass/SCSS code for the media query list. - # - # @param options [{Symbol => Object}] An options hash (see {Sass::CSS#initialize}). - # @return [String] - def to_src(options) - queries.map {|q| q.to_src(options)}.join(', ') - end - - # Returns a representation of the query as an array of strings and - # potentially {Sass::Script::Tree::Node}s (if there's interpolation in it). - # When the interpolation is resolved and the strings are joined together, - # this will be the string representation of this query. - # - # @return [Array] - def to_a - Sass::Util.intersperse(queries.map {|q| q.to_a}, ', ').flatten - end - - # Returns a deep copy of this query list and all its children. - # - # @return [QueryList] - def deep_copy - QueryList.new(queries.map {|q| q.deep_copy}) - end - end - - # A single media query. - # - # [ [ONLY | NOT]? S* media_type S* | expression ] [ AND S* expression ]* - class Query - # The modifier for the query. - # - # When parsed as Sass code, this contains strings and SassScript nodes. When - # parsed as CSS, it contains a single string (accessible via - # \{#resolved_modifier}). - # - # @return [Array] - attr_accessor :modifier - - # The type of the query (e.g. `"screen"` or `"print"`). - # - # When parsed as Sass code, this contains strings and SassScript nodes. When - # parsed as CSS, it contains a single string (accessible via - # \{#resolved_type}). - # - # @return [Array] - attr_accessor :type - - # The trailing expressions in the query. - # - # When parsed as Sass code, each expression contains strings and SassScript - # nodes. When parsed as CSS, each one contains a single string. - # - # @return [Array>] - attr_accessor :expressions - - # @param modifier [Array] See \{#modifier} - # @param type [Array] See \{#type} - # @param expressions [Array>] See \{#expressions} - def initialize(modifier, type, expressions) - @modifier = modifier - @type = type - @expressions = expressions - end - - # See \{#modifier}. - # @return [String] - def resolved_modifier - # modifier should contain only a single string - modifier.first || '' - end - - # See \{#type}. - # @return [String] - def resolved_type - # type should contain only a single string - type.first || '' - end - - # Merges this query with another. The returned query queries for - # the intersection between the two inputs. - # - # Both queries should be resolved. - # - # @param other [Query] - # @return [Query?] The merged query, or nil if there is no intersection. - def merge(other) - m1, t1 = resolved_modifier.downcase, resolved_type.downcase - m2, t2 = other.resolved_modifier.downcase, other.resolved_type.downcase - t1 = t2 if t1.empty? - t2 = t1 if t2.empty? - if (m1 == 'not') ^ (m2 == 'not') - return if t1 == t2 - type = m1 == 'not' ? t2 : t1 - mod = m1 == 'not' ? m2 : m1 - elsif m1 == 'not' && m2 == 'not' - # CSS has no way of representing "neither screen nor print" - return unless t1 == t2 - type = t1 - mod = 'not' - elsif t1 != t2 - return - else # t1 == t2, neither m1 nor m2 are "not" - type = t1 - mod = m1.empty? ? m2 : m1 - end - Query.new([mod], [type], other.expressions + expressions) - end - - # Returns the CSS for the media query. - # - # @return [String] - def to_css - css = '' - css << resolved_modifier - css << ' ' unless resolved_modifier.empty? - css << resolved_type - css << ' and ' unless resolved_type.empty? || expressions.empty? - css << expressions.map do |e| - # It's possible for there to be script nodes in Expressions even when - # we're converting to CSS in the case where we parsed the document as - # CSS originally (as in css_test.rb). - e.map {|c| c.is_a?(Sass::Script::Tree::Node) ? c.to_sass : c.to_s}.join - end.join(' and ') - css - end - - # Returns the Sass/SCSS code for the media query. - # - # @param options [{Symbol => Object}] An options hash (see {Sass::CSS#initialize}). - # @return [String] - def to_src(options) - src = '' - src << Sass::Media._interp_to_src(modifier, options) - src << ' ' unless modifier.empty? - src << Sass::Media._interp_to_src(type, options) - src << ' and ' unless type.empty? || expressions.empty? - src << expressions.map do |e| - Sass::Media._interp_to_src(e, options) - end.join(' and ') - src - end - - # @see \{MediaQuery#to\_a} - def to_a - res = [] - res += modifier - res << ' ' unless modifier.empty? - res += type - res << ' and ' unless type.empty? || expressions.empty? - res += Sass::Util.intersperse(expressions, ' and ').flatten - res - end - - # Returns a deep copy of this query and all its children. - # - # @return [Query] - def deep_copy - Query.new( - modifier.map {|c| c.is_a?(Sass::Script::Tree::Node) ? c.deep_copy : c}, - type.map {|c| c.is_a?(Sass::Script::Tree::Node) ? c.deep_copy : c}, - expressions.map {|e| e.map {|c| c.is_a?(Sass::Script::Tree::Node) ? c.deep_copy : c}}) - end - end - - # Converts an interpolation array to source. - # - # @param interp [Array] The interpolation array to convert. - # @param options [{Symbol => Object}] An options hash (see {Sass::CSS#initialize}). - # @return [String] - def self._interp_to_src(interp, options) - interp.map {|r| r.is_a?(String) ? r : r.to_sass(options)}.join - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin.rb deleted file mode 100644 index 08bd9b1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin.rb +++ /dev/null @@ -1,133 +0,0 @@ -require 'fileutils' - -require 'sass' -require 'sass/plugin/compiler' - -module Sass - # This module provides a single interface to the compilation of Sass/SCSS files - # for an application. It provides global options and checks whether CSS files - # need to be updated. - # - # This module is used as the primary interface with Sass - # when it's used as a plugin for various frameworks. - # All Rack-enabled frameworks are supported out of the box. - # The plugin is - # {file:SASS_REFERENCE.md#rails_merb_plugin automatically activated for Rails and Merb}. - # Other frameworks must enable it explicitly; see {Sass::Plugin::Rack}. - # - # This module has a large set of callbacks available - # to allow users to run code (such as logging) when certain things happen. - # All callback methods are of the form `on_#{name}`, - # and they all take a block that's called when the given action occurs. - # - # Note that this class proxies almost all methods to its {Sass::Plugin::Compiler} instance. - # See \{#compiler}. - # - # @example Using a callback - # Sass::Plugin.on_updating_stylesheet do |template, css| - # puts "Compiling #{template} to #{css}" - # end - # Sass::Plugin.update_stylesheets - # #=> Compiling app/sass/screen.scss to public/stylesheets/screen.css - # #=> Compiling app/sass/print.scss to public/stylesheets/print.css - # #=> Compiling app/sass/ie.scss to public/stylesheets/ie.css - # @see Sass::Plugin::Compiler - module Plugin - extend self - - @checked_for_updates = false - - # Whether or not Sass has **ever** checked if the stylesheets need to be updated - # (in this Ruby instance). - # - # @return [Boolean] - attr_accessor :checked_for_updates - - # Same as \{#update\_stylesheets}, but respects \{#checked\_for\_updates} - # and the {file:SASS_REFERENCE.md#always_update-option `:always_update`} - # and {file:SASS_REFERENCE.md#always_check-option `:always_check`} options. - # - # @see #update_stylesheets - def check_for_updates - return unless !Sass::Plugin.checked_for_updates || - Sass::Plugin.options[:always_update] || Sass::Plugin.options[:always_check] - update_stylesheets - end - - # Returns the singleton compiler instance. - # This compiler has been pre-configured according - # to the plugin configuration. - # - # @return [Sass::Plugin::Compiler] - def compiler - @compiler ||= Compiler.new - end - - # Updates out-of-date stylesheets. - # - # Checks each Sass/SCSS file in - # {file:SASS_REFERENCE.md#template_location-option `:template_location`} - # to see if it's been modified more recently than the corresponding CSS file - # in {file:SASS_REFERENCE.md#css_location-option `:css_location`}. - # If it has, it updates the CSS file. - # - # @param individual_files [Array<(String, String)>] - # A list of files to check for updates - # **in addition to those specified by the - # {file:SASS_REFERENCE.md#template_location-option `:template_location` option}.** - # The first string in each pair is the location of the Sass/SCSS file, - # the second is the location of the CSS file that it should be compiled to. - def update_stylesheets(individual_files = []) - return if options[:never_update] - compiler.update_stylesheets(individual_files) - end - - # Updates all stylesheets, even those that aren't out-of-date. - # Ignores the cache. - # - # @param individual_files [Array<(String, String)>] - # A list of files to check for updates - # **in addition to those specified by the - # {file:SASS_REFERENCE.md#template_location-option `:template_location` option}.** - # The first string in each pair is the location of the Sass/SCSS file, - # the second is the location of the CSS file that it should be compiled to. - # @see #update_stylesheets - def force_update_stylesheets(individual_files = []) - Compiler.new(options.dup.merge( - :never_update => false, - :always_update => true, - :cache => false)).update_stylesheets(individual_files) - end - - # All other method invocations are proxied to the \{#compiler}. - # - # @see #compiler - # @see Sass::Plugin::Compiler - def method_missing(method, *args, &block) - if compiler.respond_to?(method) - compiler.send(method, *args, &block) - else - super - end - end - - # For parity with method_missing - def respond_to?(method) - super || compiler.respond_to?(method) - end - - # There's a small speedup by not using method missing for frequently delegated methods. - def options - compiler.options - end - end -end - -if defined?(ActionController) - # On Rails 3+ the rails plugin is loaded at the right time in railtie.rb - require 'sass/plugin/rails' unless Sass::Util.ap_geq_3? -elsif defined?(Merb::Plugins) - require 'sass/plugin/merb' -else - require 'sass/plugin/generic' -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/compiler.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/compiler.rb deleted file mode 100644 index d4c339b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/compiler.rb +++ /dev/null @@ -1,571 +0,0 @@ -require 'fileutils' - -require 'sass' -# XXX CE: is this still necessary now that we have the compiler class? -require 'sass/callbacks' -require 'sass/plugin/configuration' -require 'sass/plugin/staleness_checker' - -module Sass::Plugin - # The Compiler class handles compilation of multiple files and/or directories, - # including checking which CSS files are out-of-date and need to be updated - # and calling Sass to perform the compilation on those files. - # - # {Sass::Plugin} uses this class to update stylesheets for a single application. - # Unlike {Sass::Plugin}, though, the Compiler class has no global state, - # and so multiple instances may be created and used independently. - # - # If you need to compile a Sass string into CSS, - # please see the {Sass::Engine} class. - # - # Unlike {Sass::Plugin}, this class doesn't keep track of - # whether or how many times a stylesheet should be updated. - # Therefore, the following `Sass::Plugin` options are ignored by the Compiler: - # - # * `:never_update` - # * `:always_check` - class Compiler - include Configuration - extend Sass::Callbacks - - # Creates a new compiler. - # - # @param opts [{Symbol => Object}] - # See {file:SASS_REFERENCE.md#sass_options the Sass options documentation}. - def initialize(opts = {}) - @watched_files = Set.new - options.merge!(opts) - end - - # Register a callback to be run before stylesheets are mass-updated. - # This is run whenever \{#update\_stylesheets} is called, - # unless the \{file:SASS_REFERENCE.md#never_update-option `:never_update` option} - # is enabled. - # - # @yield [files] - # @yieldparam files [<(String, String, String)>] - # Individual files to be updated. Files in directories specified are included in this list. - # The first element of each pair is the source file, - # the second is the target CSS file, - # the third is the target sourcemap file. - define_callback :updating_stylesheets - - # Register a callback to be run after stylesheets are mass-updated. - # This is run whenever \{#update\_stylesheets} is called, - # unless the \{file:SASS_REFERENCE.md#never_update-option `:never_update` option} - # is enabled. - # - # @yield [updated_files] - # @yieldparam updated_files [<(String, String)>] - # Individual files that were updated. - # The first element of each pair is the source file, the second is the target CSS file. - define_callback :updated_stylesheets - - # Register a callback to be run after a single stylesheet is updated. - # The callback is only run if the stylesheet is really updated; - # if the CSS file is fresh, this won't be run. - # - # Even if the \{file:SASS_REFERENCE.md#full_exception-option `:full_exception` option} - # is enabled, this callback won't be run - # when an exception CSS file is being written. - # To run an action for those files, use \{#on\_compilation\_error}. - # - # @yield [template, css, sourcemap] - # @yieldparam template [String] - # The location of the Sass/SCSS file being updated. - # @yieldparam css [String] - # The location of the CSS file being generated. - # @yieldparam sourcemap [String] - # The location of the sourcemap being generated, if any. - define_callback :updated_stylesheet - - # Register a callback to be run when compilation starts. - # - # In combination with on_updated_stylesheet, this could be used - # to collect compilation statistics like timing or to take a - # diff of the changes to the output file. - # - # @yield [template, css, sourcemap] - # @yieldparam template [String] - # The location of the Sass/SCSS file being updated. - # @yieldparam css [String] - # The location of the CSS file being generated. - # @yieldparam sourcemap [String] - # The location of the sourcemap being generated, if any. - define_callback :compilation_starting - - # Register a callback to be run when Sass decides not to update a stylesheet. - # In particular, the callback is run when Sass finds that - # the template file and none of its dependencies - # have been modified since the last compilation. - # - # Note that this is **not** run when the - # \{file:SASS_REFERENCE.md#never-update_option `:never_update` option} is set, - # nor when Sass decides not to compile a partial. - # - # @yield [template, css] - # @yieldparam template [String] - # The location of the Sass/SCSS file not being updated. - # @yieldparam css [String] - # The location of the CSS file not being generated. - define_callback :not_updating_stylesheet - - # Register a callback to be run when there's an error - # compiling a Sass file. - # This could include not only errors in the Sass document, - # but also errors accessing the file at all. - # - # @yield [error, template, css] - # @yieldparam error [Exception] The exception that was raised. - # @yieldparam template [String] - # The location of the Sass/SCSS file being updated. - # @yieldparam css [String] - # The location of the CSS file being generated. - define_callback :compilation_error - - # Register a callback to be run when Sass creates a directory - # into which to put CSS files. - # - # Note that even if multiple levels of directories need to be created, - # the callback may only be run once. - # For example, if "foo/" exists and "foo/bar/baz/" needs to be created, - # this may only be run for "foo/bar/baz/". - # This is not a guarantee, however; - # it may also be run for "foo/bar/". - # - # @yield [dirname] - # @yieldparam dirname [String] - # The location of the directory that was created. - define_callback :creating_directory - - # Register a callback to be run when Sass detects - # that a template has been modified. - # This is only run when using \{#watch}. - # - # @yield [template] - # @yieldparam template [String] - # The location of the template that was modified. - define_callback :template_modified - - # Register a callback to be run when Sass detects - # that a new template has been created. - # This is only run when using \{#watch}. - # - # @yield [template] - # @yieldparam template [String] - # The location of the template that was created. - define_callback :template_created - - # Register a callback to be run when Sass detects - # that a template has been deleted. - # This is only run when using \{#watch}. - # - # @yield [template] - # @yieldparam template [String] - # The location of the template that was deleted. - define_callback :template_deleted - - # Register a callback to be run when Sass deletes a CSS file. - # This happens when the corresponding Sass/SCSS file has been deleted - # and when the compiler cleans the output files. - # - # @yield [filename] - # @yieldparam filename [String] - # The location of the CSS file that was deleted. - define_callback :deleting_css - - # Register a callback to be run when Sass deletes a sourcemap file. - # This happens when the corresponding Sass/SCSS file has been deleted - # and when the compiler cleans the output files. - # - # @yield [filename] - # @yieldparam filename [String] - # The location of the sourcemap file that was deleted. - define_callback :deleting_sourcemap - - # Updates out-of-date stylesheets. - # - # Checks each Sass/SCSS file in - # {file:SASS_REFERENCE.md#template_location-option `:template_location`} - # to see if it's been modified more recently than the corresponding CSS file - # in {file:SASS_REFERENCE.md#css_location-option `:css_location`}. - # If it has, it updates the CSS file. - # - # @param individual_files [Array<(String, String[, String])>] - # A list of files to check for updates - # **in addition to those specified by the - # {file:SASS_REFERENCE.md#template_location-option `:template_location` option}.** - # The first string in each pair is the location of the Sass/SCSS file, - # the second is the location of the CSS file that it should be compiled to. - # The third string, if provided, is the location of the Sourcemap file. - def update_stylesheets(individual_files = []) - Sass::Plugin.checked_for_updates = true - staleness_checker = StalenessChecker.new(engine_options) - - files = file_list(individual_files) - run_updating_stylesheets(files) - - updated_stylesheets = [] - files.each do |file, css, sourcemap| - # TODO: Does staleness_checker need to check the sourcemap file as well? - if options[:always_update] || staleness_checker.stylesheet_needs_update?(css, file) - # XXX For consistency, this should return the sourcemap too, but it would - # XXX be an API change. - updated_stylesheets << [file, css] - update_stylesheet(file, css, sourcemap) - else - run_not_updating_stylesheet(file, css, sourcemap) - end - end - run_updated_stylesheets(updated_stylesheets) - end - - # Construct a list of files that might need to be compiled - # from the provided individual_files and the template_locations. - # - # Note: this method does not cache the results as they can change - # across invocations when sass files are added or removed. - # - # @param individual_files [Array<(String, String[, String])>] - # A list of files to check for updates - # **in addition to those specified by the - # {file:SASS_REFERENCE.md#template_location-option `:template_location` option}.** - # The first string in each pair is the location of the Sass/SCSS file, - # the second is the location of the CSS file that it should be compiled to. - # The third string, if provided, is the location of the Sourcemap file. - # @return [Array<(String, String, String)>] - # A list of [sass_file, css_file, sourcemap_file] tuples similar - # to what was passed in, but expanded to include the current state - # of the directories being updated. - def file_list(individual_files = []) - files = individual_files.map do |tuple| - if engine_options[:sourcemap] == :none - tuple[0..1] - elsif tuple.size < 3 - [tuple[0], tuple[1], Sass::Util.sourcemap_name(tuple[1])] - else - tuple.dup - end - end - - template_location_array.each do |template_location, css_location| - Sass::Util.glob(File.join(template_location, "**", "[^_]*.s[ca]ss")).sort.each do |file| - # Get the relative path to the file - name = Sass::Util.relative_path_from(file, template_location).to_s - css = css_filename(name, css_location) - sourcemap = Sass::Util.sourcemap_name(css) unless engine_options[:sourcemap] == :none - files << [file, css, sourcemap] - end - end - files - end - - # Watches the template directory (or directories) - # and updates the CSS files whenever the related Sass/SCSS files change. - # `watch` never returns. - # - # Whenever a change is detected to a Sass/SCSS file in - # {file:SASS_REFERENCE.md#template_location-option `:template_location`}, - # the corresponding CSS file in {file:SASS_REFERENCE.md#css_location-option `:css_location`} - # will be recompiled. - # The CSS files of any Sass/SCSS files that import the changed file will also be recompiled. - # - # Before the watching starts in earnest, `watch` calls \{#update\_stylesheets}. - # - # Note that `watch` uses the [Listen](http://github.com/guard/listen) library - # to monitor the filesystem for changes. - # Listen isn't loaded until `watch` is run. - # The version of Listen distributed with Sass is loaded by default, - # but if another version has already been loaded that will be used instead. - # - # @param individual_files [Array<(String, String[, String])>] - # A list of files to check for updates - # **in addition to those specified by the - # {file:SASS_REFERENCE.md#template_location-option `:template_location` option}.** - # The first string in each pair is the location of the Sass/SCSS file, - # the second is the location of the CSS file that it should be compiled to. - # The third string, if provided, is the location of the Sourcemap file. - # @param options [Hash] The options that control how watching works. - # @option options [Boolean] :skip_initial_update - # Don't do an initial update when starting the watcher when true - def watch(individual_files = [], options = {}) - options, individual_files = individual_files, [] if individual_files.is_a?(Hash) - update_stylesheets(individual_files) unless options[:skip_initial_update] - - directories = watched_paths - individual_files.each do |(source, _, _)| - source = File.expand_path(source) - @watched_files << Sass::Util.realpath(source).to_s - directories << File.dirname(source) - end - directories = remove_redundant_directories(directories) - - # A Listen version prior to 2.0 will write a test file to a directory to - # see if a watcher supports watching that directory. That breaks horribly - # on read-only directories, so we filter those out. - unless Sass::Util.listen_geq_2? - directories = directories.select {|d| File.directory?(d) && File.writable?(d)} - end - - # TODO: Keep better track of what depends on what - # so we don't have to run a global update every time anything changes. - # XXX The :additional_watch_paths option exists for Compass to use until - # a deprecated feature is removed. It may be removed without warning. - listener_args = directories + - Array(options[:additional_watch_paths]) + - [{:relative_paths => false}] - - # The native windows listener is much slower than the polling option, according to - # https://github.com/nex3/sass/commit/a3031856b22bc834a5417dedecb038b7be9b9e3e - poll = @options[:poll] || Sass::Util.windows? - if poll && Sass::Util.listen_geq_2? - # In Listen 2.0.0 and on, :force_polling is an option. In earlier - # versions, it's a method on the listener (called below). - listener_args.last[:force_polling] = true - end - - listener = create_listener(*listener_args) do |modified, added, removed| - on_file_changed(individual_files, modified, added, removed) - yield(modified, added, removed) if block_given? - end - - if poll && !Sass::Util.listen_geq_2? - # In Listen 2.0.0 and on, :force_polling is an option (set above). In - # earlier versions, it's a method on the listener. - listener.force_polling(true) - end - - listen_to(listener) - end - - # Non-destructively modifies \{#options} so that default values are properly set, - # and returns the result. - # - # @param additional_options [{Symbol => Object}] An options hash with which to merge \{#options} - # @return [{Symbol => Object}] The modified options hash - def engine_options(additional_options = {}) - opts = options.merge(additional_options) - opts[:load_paths] = load_paths(opts) - options[:sourcemap] = :auto if options[:sourcemap] == true - options[:sourcemap] = :none if options[:sourcemap] == false - opts - end - - # Compass expects this to exist - def stylesheet_needs_update?(css_file, template_file) - StalenessChecker.stylesheet_needs_update?(css_file, template_file) - end - - # Remove all output files that would be created by calling update_stylesheets, if they exist. - # - # This method runs the deleting_css and deleting_sourcemap callbacks for - # the files that are deleted. - # - # @param individual_files [Array<(String, String[, String])>] - # A list of files to check for updates - # **in addition to those specified by the - # {file:SASS_REFERENCE.md#template_location-option `:template_location` option}.** - # The first string in each pair is the location of the Sass/SCSS file, - # the second is the location of the CSS file that it should be compiled to. - # The third string, if provided, is the location of the Sourcemap file. - def clean(individual_files = []) - file_list(individual_files).each do |(_, css_file, sourcemap_file)| - if File.exist?(css_file) - run_deleting_css css_file - File.delete(css_file) - end - if sourcemap_file && File.exist?(sourcemap_file) - run_deleting_sourcemap sourcemap_file - File.delete(sourcemap_file) - end - end - nil - end - - private - - def create_listener(*args, &block) - Sass::Util.load_listen! - if Sass::Util.listen_geq_2? - # Work around guard/listen#243. - options = args.pop if args.last.is_a?(Hash) - args.map do |dir| - Listen.to(dir, options, &block) - end - else - Listen::Listener.new(*args, &block) - end - end - - def listen_to(listener) - if Sass::Util.listen_geq_2? - listener.map {|l| l.start} - sleep - else - listener.start! - end - rescue Interrupt - # Squelch Interrupt for clean exit from Listen::Listener - end - - def remove_redundant_directories(directories) - dedupped = [] - directories.each do |new_directory| - # no need to add a directory that is already watched. - next if dedupped.any? do |existing_directory| - child_of_directory?(existing_directory, new_directory) - end - # get rid of any sub directories of this new directory - dedupped.reject! do |existing_directory| - child_of_directory?(new_directory, existing_directory) - end - dedupped << new_directory - end - dedupped - end - - def on_file_changed(individual_files, modified, added, removed) - recompile_required = false - - modified.uniq.each do |f| - next unless watched_file?(f) - recompile_required = true - run_template_modified(relative_to_pwd(f)) - end - - added.uniq.each do |f| - next unless watched_file?(f) - recompile_required = true - run_template_created(relative_to_pwd(f)) - end - - removed.uniq.each do |f| - next unless watched_file?(f) - run_template_deleted(relative_to_pwd(f)) - if (files = individual_files.find {|(source, _, _)| File.expand_path(source) == f}) - recompile_required = true - # This was a file we were watching explicitly and compiling to a particular location. - # Delete the corresponding file. - try_delete_css files[1] - else - next unless watched_file?(f) - recompile_required = true - # Look for the sass directory that contained the sass file - # And try to remove the css file that corresponds to it - template_location_array.each do |(sass_dir, css_dir)| - sass_dir = File.expand_path(sass_dir) - if child_of_directory?(sass_dir, f) - remainder = f[(sass_dir.size + 1)..-1] - try_delete_css(css_filename(remainder, css_dir)) - break - end - end - end - end - - if recompile_required - # In case a file we're watching is removed and then recreated we - # prune out the non-existant files here. - watched_files_remaining = individual_files.select {|(source, _, _)| File.exist?(source)} - update_stylesheets(watched_files_remaining) - end - end - - def update_stylesheet(filename, css, sourcemap) - dir = File.dirname(css) - unless File.exist?(dir) - run_creating_directory dir - FileUtils.mkdir_p dir - end - - begin - File.read(filename) unless File.readable?(filename) # triggers an error for handling - engine_opts = engine_options(:css_filename => css, - :filename => filename, - :sourcemap_filename => sourcemap) - mapping = nil - run_compilation_starting(filename, css, sourcemap) - engine = Sass::Engine.for_file(filename, engine_opts) - if sourcemap - rendered, mapping = engine.render_with_sourcemap(File.basename(sourcemap)) - else - rendered = engine.render - end - rescue StandardError => e - compilation_error_occured = true - run_compilation_error e, filename, css, sourcemap - raise e unless options[:full_exception] - rendered = Sass::SyntaxError.exception_to_css(e, options[:line] || 1) - end - - write_file(css, rendered) - if mapping - write_file(sourcemap, mapping.to_json( - :css_path => css, :sourcemap_path => sourcemap, :type => options[:sourcemap])) - end - run_updated_stylesheet(filename, css, sourcemap) unless compilation_error_occured - end - - def write_file(fileName, content) - flag = 'w' - flag = 'wb' if Sass::Util.windows? && options[:unix_newlines] - File.open(fileName, flag) do |file| - file.set_encoding(content.encoding) unless Sass::Util.ruby1_8? - file.print(content) - end - end - - def try_delete_css(css) - if File.exist?(css) - run_deleting_css css - File.delete css - end - map = Sass::Util.sourcemap_name(css) - if File.exist?(map) - run_deleting_sourcemap map - File.delete map - end - end - - def watched_file?(file) - @watched_files.include?(file) || normalized_load_paths.any? {|lp| lp.watched_file?(file)} - end - - def watched_paths - @watched_paths ||= normalized_load_paths.map {|lp| lp.directories_to_watch}.compact.flatten - end - - def normalized_load_paths - @normalized_load_paths ||= - Sass::Engine.normalize_options(:load_paths => load_paths)[:load_paths] - end - - def load_paths(opts = options) - (opts[:load_paths] || []) + template_locations - end - - def template_locations - template_location_array.to_a.map {|l| l.first} - end - - def css_locations - template_location_array.to_a.map {|l| l.last} - end - - def css_filename(name, path) - "#{path}#{File::SEPARATOR unless path.end_with?(File::SEPARATOR)}#{name}". - gsub(/\.s[ac]ss$/, '.css') - end - - def relative_to_pwd(f) - Sass::Util.relative_path_from(f, Dir.pwd).to_s - rescue ArgumentError # when a relative path cannot be computed - f - end - - def child_of_directory?(parent, child) - parent_dir = parent.end_with?(File::SEPARATOR) ? parent : (parent + File::SEPARATOR) - child.start_with?(parent_dir) || parent == child - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/configuration.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/configuration.rb deleted file mode 100644 index b78c3ad..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/configuration.rb +++ /dev/null @@ -1,118 +0,0 @@ -module Sass - module Plugin - # We keep configuration in its own self-contained file - # so that we can load it independently in Rails 3, - # where the full plugin stuff is lazy-loaded. - module Configuration - # Returns the default options for a {Sass::Plugin::Compiler}. - # - # @return [{Symbol => Object}] - def default_options - @default_options ||= { - :css_location => './public/stylesheets', - :always_update => false, - :always_check => true, - :full_exception => true, - :cache_location => ".sass-cache" - }.freeze - end - - # Resets the options and - # {Sass::Callbacks::InstanceMethods#clear_callbacks! clears all callbacks}. - def reset! - @options = nil - clear_callbacks! - end - - # An options hash. - # See {file:SASS_REFERENCE.md#sass_options the Sass options documentation}. - # - # @return [{Symbol => Object}] - def options - @options ||= default_options.dup - end - - # Adds a new template-location/css-location mapping. - # This means that Sass/SCSS files in `template_location` - # will be compiled to CSS files in `css_location`. - # - # This is preferred over manually manipulating the - # {file:SASS_REFERENCE.md#template_location-option `:template_location` option} - # since the option can be in multiple formats. - # - # Note that this method will change `options[:template_location]` - # to be in the Array format. - # This means that even if `options[:template_location]` - # had previously been a Hash or a String, - # it will now be an Array. - # - # @param template_location [String] The location where Sass/SCSS files will be. - # @param css_location [String] The location where compiled CSS files will go. - def add_template_location(template_location, css_location = options[:css_location]) - normalize_template_location! - template_location_array << [template_location, css_location] - end - - # Removes a template-location/css-location mapping. - # This means that Sass/SCSS files in `template_location` - # will no longer be compiled to CSS files in `css_location`. - # - # This is preferred over manually manipulating the - # {file:SASS_REFERENCE.md#template_location-option `:template_location` option} - # since the option can be in multiple formats. - # - # Note that this method will change `options[:template_location]` - # to be in the Array format. - # This means that even if `options[:template_location]` - # had previously been a Hash or a String, - # it will now be an Array. - # - # @param template_location [String] - # The location where Sass/SCSS files were, - # which is now going to be ignored. - # @param css_location [String] - # The location where compiled CSS files went, but will no longer go. - # @return [Boolean] - # Non-`nil` if the given mapping already existed and was removed, - # or `nil` if nothing was changed. - def remove_template_location(template_location, css_location = options[:css_location]) - normalize_template_location! - template_location_array.delete([template_location, css_location]) - end - - # Returns the template locations configured for Sass - # as an array of `[template_location, css_location]` pairs. - # See the {file:SASS_REFERENCE.md#template_location-option `:template_location` option} - # for details. - # - # @return [Array<(String, String)>] - # An array of `[template_location, css_location]` pairs. - def template_location_array - old_template_location = options[:template_location] - normalize_template_location! - options[:template_location] - ensure - options[:template_location] = old_template_location - end - - private - - def normalize_template_location! - return if options[:template_location].is_a?(Array) - options[:template_location] = - case options[:template_location] - when nil - if options[:css_location] - [[File.join(options[:css_location], 'sass'), options[:css_location]]] - else - [] - end - when String - [[options[:template_location], options[:css_location]]] - else - options[:template_location].to_a - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/generic.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/generic.rb deleted file mode 100644 index 3e82d2d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/generic.rb +++ /dev/null @@ -1,15 +0,0 @@ -# The reason some options are declared here rather than in sass/plugin/configuration.rb -# is that otherwise they'd clobber the Rails-specific options. -# Since Rails' options are lazy-loaded in Rails 3, -# they're reverse-merged with the default options -# so that user configuration is preserved. -# This means that defaults that differ from Rails' -# must be declared here. - -unless defined?(Sass::GENERIC_LOADED) - Sass::GENERIC_LOADED = true - - Sass::Plugin.options.merge!(:css_location => './public/stylesheets', - :always_update => false, - :always_check => true) -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/merb.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/merb.rb deleted file mode 100644 index 074fd4e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/merb.rb +++ /dev/null @@ -1,48 +0,0 @@ -unless defined?(Sass::MERB_LOADED) - Sass::MERB_LOADED = true - - module Sass::Plugin::Configuration - # Different default options in a m envirionment. - def default_options - @default_options ||= begin - version = Merb::VERSION.split('.').map {|n| n.to_i} - if version[0] <= 0 && version[1] < 5 - root = MERB_ROOT - env = MERB_ENV - else - root = Merb.root.to_s - env = Merb.environment - end - - { - :always_update => false, - :template_location => root + '/public/stylesheets/sass', - :css_location => root + '/public/stylesheets', - :cache_location => root + '/tmp/sass-cache', - :always_check => env != "production", - :quiet => env != "production", - :full_exception => env != "production" - }.freeze - end - end - end - - config = Merb::Plugins.config[:sass] || Merb::Plugins.config["sass"] || {} - - if defined? config.symbolize_keys! - config.symbolize_keys! - end - - Sass::Plugin.options.merge!(config) - - require 'sass/plugin/rack' - class Sass::Plugin::MerbBootLoader < Merb::BootLoader - after Merb::BootLoader::RackUpApplication - - def self.run - # Apparently there's no better way than this to add Sass - # to Merb's Rack stack. - Merb::Config[:app] = Sass::Plugin::Rack.new(Merb::Config[:app]) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/rack.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/rack.rb deleted file mode 100644 index 1a93265..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/rack.rb +++ /dev/null @@ -1,60 +0,0 @@ -module Sass - module Plugin - # Rack middleware for compiling Sass code. - # - # ## Activate - # - # require 'sass/plugin/rack' - # use Sass::Plugin::Rack - # - # ## Customize - # - # Sass::Plugin.options.merge( - # :cache_location => './tmp/sass-cache', - # :never_update => environment != :production, - # :full_exception => environment != :production) - # - # {file:SASS_REFERENCE.md#options See the Reference for more options}. - # - # ## Use - # - # Put your Sass files in `public/stylesheets/sass`. - # Your CSS will be generated in `public/stylesheets`, - # and regenerated every request if necessary. - # The locations and frequency {file:SASS_REFERENCE.md#options can be customized}. - # That's all there is to it! - class Rack - # The delay, in seconds, between update checks. - # Useful when many resources are requested for a single page. - # `nil` means no delay at all. - # - # @return [Float] - attr_accessor :dwell - - # Initialize the middleware. - # - # @param app [#call] The Rack application - # @param dwell [Float] See \{#dwell} - def initialize(app, dwell = 1.0) - @app = app - @dwell = dwell - @check_after = Time.now.to_f - end - - # Process a request, checking the Sass stylesheets for changes - # and updating them if necessary. - # - # @param env The Rack request environment - # @return [(#to_i, {String => String}, Object)] The Rack response - def call(env) - if @dwell.nil? || Time.now.to_f > @check_after - Sass::Plugin.check_for_updates - @check_after = Time.now.to_f + @dwell if @dwell - end - @app.call(env) - end - end - end -end - -require 'sass/plugin' diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/rails.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/rails.rb deleted file mode 100644 index 2ced021..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/rails.rb +++ /dev/null @@ -1,47 +0,0 @@ -unless defined?(Sass::RAILS_LOADED) - Sass::RAILS_LOADED = true - - module Sass::Plugin::Configuration - # Different default options in a rails envirionment. - def default_options - return @default_options if @default_options - opts = { - :quiet => Sass::Util.rails_env != "production", - :full_exception => Sass::Util.rails_env != "production", - :cache_location => Sass::Util.rails_root + '/tmp/sass-cache' - } - - opts.merge!( - :always_update => false, - :template_location => Sass::Util.rails_root + '/public/stylesheets/sass', - :css_location => Sass::Util.rails_root + '/public/stylesheets', - :always_check => Sass::Util.rails_env == "development") - - @default_options = opts.freeze - end - end - - Sass::Plugin.options.reverse_merge!(Sass::Plugin.default_options) - - # Rails 3.1 loads and handles Sass all on its own - if defined?(ActionController::Metal) - # 3.1 > Rails >= 3.0 - require 'sass/plugin/rack' - Rails.configuration.middleware.use(Sass::Plugin::Rack) - elsif defined?(ActionController::Dispatcher) && - defined?(ActionController::Dispatcher.middleware) - # Rails >= 2.3 - require 'sass/plugin/rack' - ActionController::Dispatcher.middleware.use(Sass::Plugin::Rack) - else - module ActionController - class Base - alias_method :sass_old_process, :process - def process(*args) - Sass::Plugin.check_for_updates - sass_old_process(*args) - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/staleness_checker.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/staleness_checker.rb deleted file mode 100644 index 23a9bf2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/plugin/staleness_checker.rb +++ /dev/null @@ -1,199 +0,0 @@ -require 'thread' - -module Sass - module Plugin - # The class handles `.s[ca]ss` file staleness checks via their mtime timestamps. - # - # To speed things up two level of caches are employed: - # - # * A class-level dependency cache which stores @import paths for each file. - # This is a long-lived cache that is reused by every StalenessChecker instance. - # * Three short-lived instance-level caches, one for file mtimes, - # one for whether a file is stale during this particular run. - # and one for the parse tree for a file. - # These are only used by a single StalenessChecker instance. - # - # Usage: - # - # * For a one-off staleness check of a single `.s[ca]ss` file, - # the class-level {stylesheet_needs_update?} method - # should be used. - # * For a series of staleness checks (e.g. checking all files for staleness) - # a StalenessChecker instance should be created, - # and the instance-level \{#stylesheet\_needs\_update?} method should be used. - # the caches should make the whole process significantly faster. - # *WARNING*: It is important not to retain the instance for too long, - # as its instance-level caches are never explicitly expired. - class StalenessChecker - @dependencies_cache = {} - @dependency_cache_mutex = Mutex.new - - class << self - # TODO: attach this to a compiler instance. - # @private - attr_accessor :dependencies_cache - attr_reader :dependency_cache_mutex - end - - # Creates a new StalenessChecker - # for checking the staleness of several stylesheets at once. - # - # @param options [{Symbol => Object}] - # See {file:SASS_REFERENCE.md#sass_options the Sass options documentation}. - def initialize(options) - # URIs that are being actively checked for staleness. Protects against - # import loops. - @actively_checking = Set.new - - # Entries in the following instance-level caches are never explicitly expired. - # Instead they are supposed to automatically go out of scope when a series of staleness - # checks (this instance of StalenessChecker was created for) is finished. - @mtimes, @dependencies_stale, @parse_trees = {}, {}, {} - @options = Sass::Engine.normalize_options(options) - end - - # Returns whether or not a given CSS file is out of date - # and needs to be regenerated. - # - # @param css_file [String] The location of the CSS file to check. - # @param template_file [String] The location of the Sass or SCSS template - # that is compiled to `css_file`. - # @return [Boolean] Whether the stylesheet needs to be updated. - def stylesheet_needs_update?(css_file, template_file, importer = nil) - template_file = File.expand_path(template_file) - begin - css_mtime = File.mtime(css_file) - rescue Errno::ENOENT - return true - end - stylesheet_modified_since?(template_file, css_mtime, importer) - end - - # Returns whether a Sass or SCSS stylesheet has been modified since a given time. - # - # @param template_file [String] The location of the Sass or SCSS template. - # @param mtime [Fixnum] The modification time to check against. - # @param importer [Sass::Importers::Base] The importer used to locate the stylesheet. - # Defaults to the filesystem importer. - # @return [Boolean] Whether the stylesheet has been modified. - def stylesheet_modified_since?(template_file, mtime, importer = nil) - importer ||= @options[:filesystem_importer].new(".") - dependency_updated?(mtime).call(template_file, importer) - end - - # Returns whether or not a given CSS file is out of date - # and needs to be regenerated. - # - # The distinction between this method and the instance-level \{#stylesheet\_needs\_update?} - # is that the instance method preserves mtime and stale-dependency caches, - # so it's better to use when checking multiple stylesheets at once. - # - # @param css_file [String] The location of the CSS file to check. - # @param template_file [String] The location of the Sass or SCSS template - # that is compiled to `css_file`. - # @return [Boolean] Whether the stylesheet needs to be updated. - def self.stylesheet_needs_update?(css_file, template_file, importer = nil) - new(Plugin.engine_options).stylesheet_needs_update?(css_file, template_file, importer) - end - - # Returns whether a Sass or SCSS stylesheet has been modified since a given time. - # - # The distinction between this method and the instance-level \{#stylesheet\_modified\_since?} - # is that the instance method preserves mtime and stale-dependency caches, - # so it's better to use when checking multiple stylesheets at once. - # - # @param template_file [String] The location of the Sass or SCSS template. - # @param mtime [Fixnum] The modification time to check against. - # @param importer [Sass::Importers::Base] The importer used to locate the stylesheet. - # Defaults to the filesystem importer. - # @return [Boolean] Whether the stylesheet has been modified. - def self.stylesheet_modified_since?(template_file, mtime, importer = nil) - new(Plugin.engine_options).stylesheet_modified_since?(template_file, mtime, importer) - end - - private - - def dependencies_stale?(uri, importer, css_mtime) - timestamps = @dependencies_stale[[uri, importer]] ||= {} - timestamps.each_pair do |checked_css_mtime, is_stale| - if checked_css_mtime <= css_mtime && !is_stale - return false - elsif checked_css_mtime > css_mtime && is_stale - return true - end - end - timestamps[css_mtime] = dependencies(uri, importer).any?(&dependency_updated?(css_mtime)) - rescue Sass::SyntaxError - # If there's an error finding dependencies, default to recompiling. - true - end - - def mtime(uri, importer) - @mtimes[[uri, importer]] ||= - begin - mtime = importer.mtime(uri, @options) - if mtime.nil? - with_dependency_cache {|cache| cache.delete([uri, importer])} - nil - else - mtime - end - end - end - - def dependencies(uri, importer) - stored_mtime, dependencies = - with_dependency_cache {|cache| Sass::Util.destructure(cache[[uri, importer]])} - - if !stored_mtime || stored_mtime < mtime(uri, importer) - dependencies = compute_dependencies(uri, importer) - with_dependency_cache do |cache| - cache[[uri, importer]] = [mtime(uri, importer), dependencies] - end - end - - dependencies - end - - def dependency_updated?(css_mtime) - proc do |uri, importer| - next true if @actively_checking.include?(uri) - begin - @actively_checking << uri - sass_mtime = mtime(uri, importer) - !sass_mtime || - sass_mtime > css_mtime || - dependencies_stale?(uri, importer, css_mtime) - ensure - @actively_checking.delete uri - end - end - end - - def compute_dependencies(uri, importer) - tree(uri, importer).grep(Tree::ImportNode) do |n| - next if n.css_import? - file = n.imported_file - key = [file.options[:filename], file.options[:importer]] - @parse_trees[key] = file.to_tree - key - end.compact - end - - def tree(uri, importer) - @parse_trees[[uri, importer]] ||= importer.find(uri, @options).to_tree - end - - # Get access to the global dependency cache in a threadsafe manner. - # Inside the block, no other thread can access the dependency cache. - # - # @yieldparam cache [Hash] The hash that is the global dependency cache - # @return The value returned by the block to which this method yields - def with_dependency_cache - StalenessChecker.dependency_cache_mutex.synchronize do - yield StalenessChecker.dependencies_cache - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/railtie.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/railtie.rb deleted file mode 100644 index cf900b5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/railtie.rb +++ /dev/null @@ -1,10 +0,0 @@ -# Rails 3.0.0.beta.2+, < 3.1 -if defined?(ActiveSupport) && Sass::Util.has?(:public_method, ActiveSupport, :on_load) && - !Sass::Util.ap_geq?('3.1.0.beta') - require 'sass/plugin/configuration' - ActiveSupport.on_load(:before_configuration) do - require 'sass' - require 'sass/plugin' - require 'sass/plugin/rails' - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/repl.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/repl.rb deleted file mode 100644 index e9b9e6c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/repl.rb +++ /dev/null @@ -1,57 +0,0 @@ -require 'readline' - -module Sass - # Runs a SassScript read-eval-print loop. - # It presents a prompt on the terminal, - # reads in SassScript expressions, - # evaluates them, - # and prints the result. - class Repl - # @param options [{Symbol => Object}] An options hash. - def initialize(options = {}) - @options = options - end - - # Starts the read-eval-print loop. - def run - environment = Environment.new - @line = 0 - loop do - @line += 1 - unless (text = Readline.readline('>> ')) - puts - return - end - - Readline::HISTORY << text - parse_input(environment, text) - end - end - - private - - def parse_input(environment, text) - case text - when Script::MATCH - name = $1 - guarded = !!$3 - val = Script::Parser.parse($2, @line, text.size - ($3 || '').size - $2.size) - - unless guarded && environment.var(name) - environment.set_var(name, val.perform(environment)) - end - - p environment.var(name) - else - p Script::Parser.parse(text, @line, 0).perform(environment) - end - rescue Sass::SyntaxError => e - puts "SyntaxError: #{e.message}" - if @options[:trace] - e.backtrace.each do |line| - puts "\tfrom #{line}" - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/root.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/root.rb deleted file mode 100644 index 31e19c5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/root.rb +++ /dev/null @@ -1,7 +0,0 @@ -module Sass - # The root directory of the Sass source tree. - # This may be overridden by the package manager - # if the lib directory is separated from the main source tree. - # @api public - ROOT_DIR = File.expand_path(File.join(__FILE__, "../../..")) -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script.rb deleted file mode 100644 index 5ca639d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script.rb +++ /dev/null @@ -1,66 +0,0 @@ -require 'sass/scss/rx' - -module Sass - # SassScript is code that's embedded in Sass documents - # to allow for property values to be computed from variables. - # - # This module contains code that handles the parsing and evaluation of SassScript. - module Script - # The regular expression used to parse variables. - MATCH = /^\$(#{Sass::SCSS::RX::IDENT})\s*:\s*(.+?) - (!#{Sass::SCSS::RX::IDENT}(?:\s+!#{Sass::SCSS::RX::IDENT})*)?$/x - - # The regular expression used to validate variables without matching. - VALIDATE = /^\$#{Sass::SCSS::RX::IDENT}$/ - - # Parses a string of SassScript - # - # @param value [String] The SassScript - # @param line [Fixnum] The number of the line on which the SassScript appeared. - # Used for error reporting - # @param offset [Fixnum] The number of characters in on `line` that the SassScript started. - # Used for error reporting - # @param options [{Symbol => Object}] An options hash; - # see {file:SASS_REFERENCE.md#sass_options the Sass options documentation} - # @return [Script::Tree::Node] The root node of the parse tree - def self.parse(value, line, offset, options = {}) - Parser.parse(value, line, offset, options) - rescue Sass::SyntaxError => e - e.message << ": #{value.inspect}." if e.message == "SassScript error" - e.modify_backtrace(:line => line, :filename => options[:filename]) - raise e - end - - require 'sass/script/functions' - require 'sass/script/parser' - require 'sass/script/tree' - require 'sass/script/value' - - # @private - CONST_RENAMES = { - :Literal => Sass::Script::Value::Base, - :ArgList => Sass::Script::Value::ArgList, - :Bool => Sass::Script::Value::Bool, - :Color => Sass::Script::Value::Color, - :List => Sass::Script::Value::List, - :Null => Sass::Script::Value::Null, - :Number => Sass::Script::Value::Number, - :String => Sass::Script::Value::String, - :Node => Sass::Script::Tree::Node, - :Funcall => Sass::Script::Tree::Funcall, - :Interpolation => Sass::Script::Tree::Interpolation, - :Operation => Sass::Script::Tree::Operation, - :StringInterpolation => Sass::Script::Tree::StringInterpolation, - :UnaryOperation => Sass::Script::Tree::UnaryOperation, - :Variable => Sass::Script::Tree::Variable, - } - - # @private - def self.const_missing(name) - klass = CONST_RENAMES[name] - super unless klass - CONST_RENAMES.each {|n, k| const_set(n, k)} - klass - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/css_lexer.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/css_lexer.rb deleted file mode 100644 index 6362a9d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/css_lexer.rb +++ /dev/null @@ -1,33 +0,0 @@ -module Sass - module Script - # This is a subclass of {Lexer} for use in parsing plain CSS properties. - # - # @see Sass::SCSS::CssParser - class CssLexer < Lexer - private - - def token - important || super - end - - def string(re, *args) - if re == :uri - uri = scan(URI) - return unless uri - return [:string, Script::Value::String.new(uri)] - end - - return unless scan(STRING) - string_value = Sass::Script::Value::String.value(@scanner[1] || @scanner[2]) - value = Script::Value::String.new(string_value, :string) - [:string, value] - end - - def important - s = scan(IMPORTANT) - return unless s - [:raw, s] - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/css_parser.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/css_parser.rb deleted file mode 100644 index 4399493..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/css_parser.rb +++ /dev/null @@ -1,34 +0,0 @@ -require 'sass/script' -require 'sass/script/css_lexer' - -module Sass - module Script - # This is a subclass of {Parser} for use in parsing plain CSS properties. - # - # @see Sass::SCSS::CssParser - class CssParser < Parser - private - - # @private - def lexer_class; CssLexer; end - - # We need a production that only does /, - # since * and % aren't allowed in plain CSS - production :div, :unary_plus, :div - - def string - tok = try_tok(:string) - return number unless tok - unless @lexer.peek && @lexer.peek.type == :begin_interpolation - return literal_node(tok.value, tok.source_range) - end - end - - # Short-circuit all the SassScript-only productions - alias_method :interpolation, :space - alias_method :or_expr, :div - alias_method :unary_div, :ident - alias_method :paren, :string - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/functions.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/functions.rb deleted file mode 100644 index d7f910b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/functions.rb +++ /dev/null @@ -1,2652 +0,0 @@ -require 'sass/script/value/helpers' - -module Sass::Script - # @comment - # YARD can't handle some multiline tags, and we need really long tags for function declarations. - # rubocop:disable LineLength - # Methods in this module are accessible from the SassScript context. - # For example, you can write - # - # $color: hsl(120deg, 100%, 50%) - # - # and it will call {Functions#hsl}. - # - # The following functions are provided: - # - # *Note: These functions are described in more detail below.* - # - # ## RGB Functions - # - # \{#rgb rgb($red, $green, $blue)} - # : Creates a {Sass::Script::Value::Color Color} from red, green, and blue - # values. - # - # \{#rgba rgba($red, $green, $blue, $alpha)} - # : Creates a {Sass::Script::Value::Color Color} from red, green, blue, and - # alpha values. - # - # \{#red red($color)} - # : Gets the red component of a color. - # - # \{#green green($color)} - # : Gets the green component of a color. - # - # \{#blue blue($color)} - # : Gets the blue component of a color. - # - # \{#mix mix($color1, $color2, \[$weight\])} - # : Mixes two colors together. - # - # ## HSL Functions - # - # \{#hsl hsl($hue, $saturation, $lightness)} - # : Creates a {Sass::Script::Value::Color Color} from hue, saturation, and - # lightness values. - # - # \{#hsla hsla($hue, $saturation, $lightness, $alpha)} - # : Creates a {Sass::Script::Value::Color Color} from hue, saturation, - # lightness, and alpha values. - # - # \{#hue hue($color)} - # : Gets the hue component of a color. - # - # \{#saturation saturation($color)} - # : Gets the saturation component of a color. - # - # \{#lightness lightness($color)} - # : Gets the lightness component of a color. - # - # \{#adjust_hue adjust-hue($color, $degrees)} - # : Changes the hue of a color. - # - # \{#lighten lighten($color, $amount)} - # : Makes a color lighter. - # - # \{#darken darken($color, $amount)} - # : Makes a color darker. - # - # \{#saturate saturate($color, $amount)} - # : Makes a color more saturated. - # - # \{#desaturate desaturate($color, $amount)} - # : Makes a color less saturated. - # - # \{#grayscale grayscale($color)} - # : Converts a color to grayscale. - # - # \{#complement complement($color)} - # : Returns the complement of a color. - # - # \{#invert invert($color)} - # : Returns the inverse of a color. - # - # ## Opacity Functions - # - # \{#alpha alpha($color)} / \{#opacity opacity($color)} - # : Gets the alpha component (opacity) of a color. - # - # \{#rgba rgba($color, $alpha)} - # : Changes the alpha component for a color. - # - # \{#opacify opacify($color, $amount)} / \{#fade_in fade-in($color, $amount)} - # : Makes a color more opaque. - # - # \{#transparentize transparentize($color, $amount)} / \{#fade_out fade-out($color, $amount)} - # : Makes a color more transparent. - # - # ## Other Color Functions - # - # \{#adjust_color adjust-color($color, \[$red\], \[$green\], \[$blue\], \[$hue\], \[$saturation\], \[$lightness\], \[$alpha\])} - # : Increases or decreases one or more components of a color. - # - # \{#scale_color scale-color($color, \[$red\], \[$green\], \[$blue\], \[$saturation\], \[$lightness\], \[$alpha\])} - # : Fluidly scales one or more properties of a color. - # - # \{#change_color change-color($color, \[$red\], \[$green\], \[$blue\], \[$hue\], \[$saturation\], \[$lightness\], \[$alpha\])} - # : Changes one or more properties of a color. - # - # \{#ie_hex_str ie-hex-str($color)} - # : Converts a color into the format understood by IE filters. - # - # ## String Functions - # - # \{#unquote unquote($string)} - # : Removes quotes from a string. - # - # \{#quote quote($string)} - # : Adds quotes to a string. - # - # \{#str_length str-length($string)} - # : Returns the number of characters in a string. - # - # \{#str_insert str-insert($string, $insert, $index)} - # : Inserts `$insert` into `$string` at `$index`. - # - # \{#str_index str-index($string, $substring)} - # : Returns the index of the first occurance of `$substring` in `$string`. - # - # \{#str_slice str-slice($string, $start-at, [$end-at])} - # : Extracts a substring from `$string`. - # - # \{#to_upper_case to-upper-case($string)} - # : Converts a string to upper case. - # - # \{#to_lower_case to-lower-case($string)} - # : Converts a string to lower case. - # - # ## Number Functions - # - # \{#percentage percentage($number)} - # : Converts a unitless number to a percentage. - # - # \{#round round($number)} - # : Rounds a number to the nearest whole number. - # - # \{#ceil ceil($number)} - # : Rounds a number up to the next whole number. - # - # \{#floor floor($number)} - # : Rounds a number down to the previous whole number. - # - # \{#abs abs($number)} - # : Returns the absolute value of a number. - # - # \{#min min($numbers...)\} - # : Finds the minimum of several numbers. - # - # \{#max max($numbers...)\} - # : Finds the maximum of several numbers. - # - # \{#random random([$limit])\} - # : Returns a random number. - # - # ## List Functions {#list-functions} - # - # All list functions work for maps as well, treating them as lists of pairs. - # - # \{#length length($list)} - # : Returns the length of a list. - # - # \{#nth nth($list, $n)} - # : Returns a specific item in a list. - # - # \{#set-nth set-nth($list, $n, $value)} - # : Replaces the nth item in a list. - # - # \{#join join($list1, $list2, \[$separator\])} - # : Joins together two lists into one. - # - # \{#append append($list1, $val, \[$separator\])} - # : Appends a single value onto the end of a list. - # - # \{#zip zip($lists...)} - # : Combines several lists into a single multidimensional list. - # - # \{#index index($list, $value)} - # : Returns the position of a value within a list. - # - # \{#list_separator list-separator(#list)} - # : Returns the separator of a list. - # - # ## Map Functions {#map-functions} - # - # \{#map_get map-get($map, $key)} - # : Returns the value in a map associated with a given key. - # - # \{#map_merge map-merge($map1, $map2)} - # : Merges two maps together into a new map. - # - # \{#map_remove map-remove($map, $keys...)} - # : Returns a new map with keys removed. - # - # \{#map_keys map-keys($map)} - # : Returns a list of all keys in a map. - # - # \{#map_values map-values($map)} - # : Returns a list of all values in a map. - # - # \{#map_has_key map-has-key($map, $key)} - # : Returns whether a map has a value associated with a given key. - # - # \{#keywords keywords($args)} - # : Returns the keywords passed to a function that takes variable arguments. - # - # ## Selector Functions - # - # Selector functions are very liberal in the formats they support - # for selector arguments. They can take a plain string, a list of - # lists as returned by `&` or anything in between: - # - # * A plain sring, such as `".foo .bar, .baz .bang"`. - # * A space-separated list of strings such as `(".foo" ".bar")`. - # * A comma-separated list of strings such as `(".foo .bar", ".baz .bang")`. - # * A comma-separated list of space-separated lists of strings such - # as `((".foo" ".bar"), (".baz" ".bang"))`. - # - # In general, selector functions allow placeholder selectors - # (`%foo`) but disallow parent-reference selectors (`&`). - # - # \{#selector_nest selector-nest($selectors...)} - # : Nests selector beneath one another like they would be nested in the - # stylesheet. - # - # \{#selector_append selector-append($selectors...)} - # : Appends selectors to one another without spaces in between. - # - # \{#selector_extend selector-extend($selector, $extendee, $extender)} - # : Extends `$extendee` with `$extender` within `$selector`. - # - # \{#selector_replace selector-replace($selector, $original, $replacement)} - # : Replaces `$original` with `$replacement` within `$selector`. - # - # \{#selector_unify selector-unify($selector1, $selector2)} - # : Unifies two selectors to produce a selector that matches - # elements matched by both. - # - # \{#is_superselector is-superselector($super, $sub)} - # : Returns whether `$super` matches all the elements `$sub` does, and - # possibly more. - # - # \{#simple_selectors simple-selectors($selector)} - # : Returns the simple selectors that comprise a compound selector. - # - # \{#selector_parse selector-parse($selector)} - # : Parses a selector into the format returned by `&`. - # - # ## Introspection Functions - # - # \{#feature_exists feature-exists($feature)} - # : Returns whether a feature exists in the current Sass runtime. - # - # \{#variable_exists variable-exists($name)} - # : Returns whether a variable with the given name exists in the current scope. - # - # \{#global_variable_exists global-variable-exists($name)} - # : Returns whether a variable with the given name exists in the global scope. - # - # \{#function_exists function-exists($name)} - # : Returns whether a function with the given name exists. - # - # \{#mixin_exists mixin-exists($name)} - # : Returns whether a mixin with the given name exists. - # - # \{#inspect inspect($value)} - # : Returns the string representation of a value as it would be represented in Sass. - # - # \{#type_of type-of($value)} - # : Returns the type of a value. - # - # \{#unit unit($number)} - # : Returns the unit(s) associated with a number. - # - # \{#unitless unitless($number)} - # : Returns whether a number has units. - # - # \{#comparable comparable($number1, $number2)} - # : Returns whether two numbers can be added, subtracted, or compared. - # - # \{#call call($name, $args...)} - # : Dynamically calls a Sass function. - # - # ## Miscellaneous Functions - # - # \{#if if($condition, $if-true, $if-false)} - # : Returns one of two values, depending on whether or not `$condition` is - # true. - # - # \{#unique_id unique-id()} - # : Returns a unique CSS identifier. - # - # ## Adding Custom Functions - # - # New Sass functions can be added by adding Ruby methods to this module. - # For example: - # - # module Sass::Script::Functions - # def reverse(string) - # assert_type string, :String - # Sass::Script::Value::String.new(string.value.reverse) - # end - # declare :reverse, [:string] - # end - # - # Calling {declare} tells Sass the argument names for your function. - # If omitted, the function will still work, but will not be able to accept keyword arguments. - # {declare} can also allow your function to take arbitrary keyword arguments. - # - # There are a few things to keep in mind when modifying this module. - # First of all, the arguments passed are {Value} objects. - # Value objects are also expected to be returned. - # This means that Ruby values must be unwrapped and wrapped. - # - # Most Value objects support the {Value::Base#value value} accessor for getting - # their Ruby values. Color objects, though, must be accessed using - # {Sass::Script::Value::Color#rgb rgb}, {Sass::Script::Value::Color#red red}, - # {Sass::Script::Value::Color#blue green}, or {Sass::Script::Value::Color#blue - # blue}. - # - # Second, making Ruby functions accessible from Sass introduces the temptation - # to do things like database access within stylesheets. - # This is generally a bad idea; - # since Sass files are by default only compiled once, - # dynamic code is not a great fit. - # - # If you really, really need to compile Sass on each request, - # first make sure you have adequate caching set up. - # Then you can use {Sass::Engine} to render the code, - # using the {file:SASS_REFERENCE.md#custom-option `options` parameter} - # to pass in data that {EvaluationContext#options can be accessed} - # from your Sass functions. - # - # Within one of the functions in this module, - # methods of {EvaluationContext} can be used. - # - # ### Caveats - # - # When creating new {Value} objects within functions, be aware that it's not - # safe to call {Value::Base#to_s #to_s} (or other methods that use the string - # representation) on those objects without first setting {Tree::Node#options= - # the #options attribute}. - # - # @comment - # rubocop:enable LineLength - module Functions - @signatures = {} - - # A class representing a Sass function signature. - # - # @attr args [Array] The names of the arguments to the function. - # @attr delayed_args [Array] The names of the arguments whose evaluation should be - # delayed. - # @attr var_args [Boolean] Whether the function takes a variable number of arguments. - # @attr var_kwargs [Boolean] Whether the function takes an arbitrary set of keyword arguments. - Signature = Struct.new(:args, :delayed_args, :var_args, :var_kwargs, :deprecated) - - # Declare a Sass signature for a Ruby-defined function. - # This includes the names of the arguments, - # whether the function takes a variable number of arguments, - # and whether the function takes an arbitrary set of keyword arguments. - # - # It's not necessary to declare a signature for a function. - # However, without a signature it won't support keyword arguments. - # - # A single function can have multiple signatures declared - # as long as each one takes a different number of arguments. - # It's also possible to declare multiple signatures - # that all take the same number of arguments, - # but none of them but the first will be used - # unless the user uses keyword arguments. - # - # @example - # declare :rgba, [:hex, :alpha] - # declare :rgba, [:red, :green, :blue, :alpha] - # declare :accepts_anything, [], :var_args => true, :var_kwargs => true - # declare :some_func, [:foo, :bar, :baz], :var_kwargs => true - # - # @param method_name [Symbol] The name of the method - # whose signature is being declared. - # @param args [Array] The names of the arguments for the function signature. - # @option options :var_args [Boolean] (false) - # Whether the function accepts a variable number of (unnamed) arguments - # in addition to the named arguments. - # @option options :var_kwargs [Boolean] (false) - # Whether the function accepts other keyword arguments - # in addition to those in `:args`. - # If this is true, the Ruby function will be passed a hash from strings - # to {Value}s as the last argument. - # In addition, if this is true and `:var_args` is not, - # Sass will ensure that the last argument passed is a hash. - def self.declare(method_name, args, options = {}) - delayed_args = [] - args = args.map do |a| - a = a.to_s - if a[0] == ?& - a = a[1..-1] - delayed_args << a - end - a - end - # We don't expose this functionality except to certain builtin methods. - if delayed_args.any? && method_name != :if - raise ArgumentError.new("Delayed arguments are not allowed for method #{method_name}") - end - @signatures[method_name] ||= [] - @signatures[method_name] << Signature.new( - args, - delayed_args, - options[:var_args], - options[:var_kwargs], - options[:deprecated] && options[:deprecated].map {|a| a.to_s}) - end - - # Determine the correct signature for the number of arguments - # passed in for a given function. - # If no signatures match, the first signature is returned for error messaging. - # - # @param method_name [Symbol] The name of the Ruby function to be called. - # @param arg_arity [Fixnum] The number of unnamed arguments the function was passed. - # @param kwarg_arity [Fixnum] The number of keyword arguments the function was passed. - # - # @return [{Symbol => Object}, nil] - # The signature options for the matching signature, - # or nil if no signatures are declared for this function. See {declare}. - def self.signature(method_name, arg_arity, kwarg_arity) - return unless @signatures[method_name] - @signatures[method_name].each do |signature| - sig_arity = signature.args.size - return signature if sig_arity == arg_arity + kwarg_arity - next unless sig_arity < arg_arity + kwarg_arity - - # We have enough args. - # Now we need to figure out which args are varargs - # and if the signature allows them. - t_arg_arity, t_kwarg_arity = arg_arity, kwarg_arity - if sig_arity > t_arg_arity - # we transfer some kwargs arity to args arity - # if it does not have enough args -- assuming the names will work out. - t_kwarg_arity -= (sig_arity - t_arg_arity) - t_arg_arity = sig_arity - end - - if (t_arg_arity == sig_arity || t_arg_arity > sig_arity && signature.var_args) && - (t_kwarg_arity == 0 || t_kwarg_arity > 0 && signature.var_kwargs) - return signature - end - end - @signatures[method_name].first - end - - # Sets the random seed used by Sass's internal random number generator. - # - # This can be used to ensure consistent random number sequences which - # allows for consistent results when testing, etc. - # - # @param seed [Integer] - # @return [Integer] The same seed. - def self.random_seed=(seed) - @random_number_generator = Sass::Util::CrossPlatformRandom.new(seed) - end - - # Get Sass's internal random number generator. - # - # @return [Random] - def self.random_number_generator - @random_number_generator ||= Sass::Util::CrossPlatformRandom.new - end - - # The context in which methods in {Script::Functions} are evaluated. - # That means that all instance methods of {EvaluationContext} - # are available to use in functions. - class EvaluationContext - include Functions - include Value::Helpers - - # The human-readable names for [Sass::Script::Value::Base]. The default is - # just the downcased name of the type. - TYPE_NAMES = {:ArgList => 'variable argument list'} - - # The environment for this function. This environment's - # {Environment#parent} is the global environment, and its - # {Environment#caller} is a read-only view of the local environment of the - # caller of this function. - # - # @return [Environment] - attr_reader :environment - - # The options hash for the {Sass::Engine} that is processing the function call - # - # @return [{Symbol => Object}] - attr_reader :options - - # @param environment [Environment] See \{#environment} - def initialize(environment) - @environment = environment - @options = environment.options - end - - # Asserts that the type of a given SassScript value - # is the expected type (designated by a symbol). - # - # Valid types are `:Bool`, `:Color`, `:Number`, and `:String`. - # Note that `:String` will match both double-quoted strings - # and unquoted identifiers. - # - # @example - # assert_type value, :String - # assert_type value, :Number - # @param value [Sass::Script::Value::Base] A SassScript value - # @param type [Symbol] The name of the type the value is expected to be - # @param name [String, Symbol, nil] The name of the argument. - # @raise [ArgumentError] if value is not of the correct type. - def assert_type(value, type, name = nil) - klass = Sass::Script::Value.const_get(type) - return if value.is_a?(klass) - return if value.is_a?(Sass::Script::Value::List) && type == :Map && value.value.empty? - err = "#{value.inspect} is not a #{TYPE_NAMES[type] || type.to_s.downcase}" - err = "$#{name.to_s.gsub('_', '-')}: " + err if name - raise ArgumentError.new(err) - end - - # Asserts that the unit of the number is as expected. - # - # @example - # assert_unit number, "px" - # assert_unit number, nil - # @param number [Sass::Script::Value::Number] The number to be validated. - # @param unit [::String] - # The unit that the number must have. - # If nil, the number must be unitless. - # @param name [::String] The name of the parameter being validated. - # @raise [ArgumentError] if number is not of the correct unit or is not a number. - def assert_unit(number, unit, name = nil) - assert_type number, :Number, name - return if number.is_unit?(unit) - expectation = unit ? "have a unit of #{unit}" : "be unitless" - if name - raise ArgumentError.new("Expected $#{name} to #{expectation} but got #{number}") - else - raise ArgumentError.new("Expected #{number} to #{expectation}") - end - end - - # Asserts that the value is an integer. - # - # @example - # assert_integer 2px - # assert_integer 2.5px - # => SyntaxError: "Expected 2.5px to be an integer" - # assert_integer 2.5px, "width" - # => SyntaxError: "Expected width to be an integer but got 2.5px" - # @param number [Sass::Script::Value::Base] The value to be validated. - # @param name [::String] The name of the parameter being validated. - # @raise [ArgumentError] if number is not an integer or is not a number. - def assert_integer(number, name = nil) - assert_type number, :Number, name - return if number.int? - if name - raise ArgumentError.new("Expected $#{name} to be an integer but got #{number}") - else - raise ArgumentError.new("Expected #{number} to be an integer") - end - end - - # Performs a node that has been delayed for execution. - # - # @private - # @param node [Sass::Script::Tree::Node, - # Sass::Script::Value::Base] When this is a tree node, it's - # performed in the caller's environment. When it's a value - # (which can happen when the value had to be performed already - # -- like for a splat), it's returned as-is. - # @param env [Sass::Environment] The environment within which to perform the node. - # Defaults to the (read-only) environment of the caller. - def perform(node, env = environment.caller) - if node.is_a?(Sass::Script::Value::Base) - node - else - node.perform(env) - end - end - end - - class << self - # Returns whether user function with a given name exists. - # - # @param function_name [String] - # @return [Boolean] - alias_method :callable?, :public_method_defined? - - private - - def include(*args) - r = super - # We have to re-include ourselves into EvaluationContext to work around - # an icky Ruby restriction. - EvaluationContext.send :include, self - r - end - end - - # Creates a {Sass::Script::Value::Color Color} object from red, green, and - # blue values. - # - # @see #rgba - # @overload rgb($red, $green, $blue) - # @param $red [Sass::Script::Value::Number] The amount of red in the color. - # Must be between 0 and 255 inclusive, or between `0%` and `100%` - # inclusive - # @param $green [Sass::Script::Value::Number] The amount of green in the - # color. Must be between 0 and 255 inclusive, or between `0%` and `100%` - # inclusive - # @param $blue [Sass::Script::Value::Number] The amount of blue in the - # color. Must be between 0 and 255 inclusive, or between `0%` and `100%` - # inclusive - # @return [Sass::Script::Value::Color] - # @raise [ArgumentError] if any parameter is the wrong type or out of bounds - def rgb(red, green, blue) - assert_type red, :Number, :red - assert_type green, :Number, :green - assert_type blue, :Number, :blue - - color_attrs = [[red, :red], [green, :green], [blue, :blue]].map do |(c, name)| - if c.is_unit?("%") - c.value * 255 / 100.0 - elsif c.unitless? - c.value - else - raise ArgumentError.new("Expected #{c} to be unitless or have a unit of % but got #{c}") - end - end - - # Don't store the string representation for function-created colors, both - # because it's not very useful and because some functions aren't supported - # on older browsers. - Sass::Script::Value::Color.new(color_attrs) - end - declare :rgb, [:red, :green, :blue] - - # Creates a {Sass::Script::Value::Color Color} from red, green, blue, and - # alpha values. - # @see #rgb - # - # @overload rgba($red, $green, $blue, $alpha) - # @param $red [Sass::Script::Value::Number] The amount of red in the - # color. Must be between 0 and 255 inclusive or 0% and 100% inclusive - # @param $green [Sass::Script::Value::Number] The amount of green in the - # color. Must be between 0 and 255 inclusive or 0% and 100% inclusive - # @param $blue [Sass::Script::Value::Number] The amount of blue in the - # color. Must be between 0 and 255 inclusive or 0% and 100% inclusive - # @param $alpha [Sass::Script::Value::Number] The opacity of the color. - # Must be between 0 and 1 inclusive - # @return [Sass::Script::Value::Color] - # @raise [ArgumentError] if any parameter is the wrong type or out of - # bounds - # - # @overload rgba($color, $alpha) - # Sets the opacity of an existing color. - # - # @example - # rgba(#102030, 0.5) => rgba(16, 32, 48, 0.5) - # rgba(blue, 0.2) => rgba(0, 0, 255, 0.2) - # - # @param $color [Sass::Script::Value::Color] The color whose opacity will - # be changed. - # @param $alpha [Sass::Script::Value::Number] The new opacity of the - # color. Must be between 0 and 1 inclusive - # @return [Sass::Script::Value::Color] - # @raise [ArgumentError] if `$alpha` is out of bounds or either parameter - # is the wrong type - def rgba(*args) - case args.size - when 2 - color, alpha = args - - assert_type color, :Color, :color - assert_type alpha, :Number, :alpha - check_alpha_unit alpha, 'rgba' - - color.with(:alpha => alpha.value) - when 4 - red, green, blue, alpha = args - rgba(rgb(red, green, blue), alpha) - else - raise ArgumentError.new("wrong number of arguments (#{args.size} for 4)") - end - end - declare :rgba, [:red, :green, :blue, :alpha] - declare :rgba, [:color, :alpha] - - # Creates a {Sass::Script::Value::Color Color} from hue, saturation, and - # lightness values. Uses the algorithm from the [CSS3 spec][]. - # - # [CSS3 spec]: http://www.w3.org/TR/css3-color/#hsl-color - # - # @see #hsla - # @overload hsl($hue, $saturation, $lightness) - # @param $hue [Sass::Script::Value::Number] The hue of the color. Should be - # between 0 and 360 degrees, inclusive - # @param $saturation [Sass::Script::Value::Number] The saturation of the - # color. Must be between `0%` and `100%`, inclusive - # @param $lightness [Sass::Script::Value::Number] The lightness of the - # color. Must be between `0%` and `100%`, inclusive - # @return [Sass::Script::Value::Color] - # @raise [ArgumentError] if `$saturation` or `$lightness` are out of bounds - # or any parameter is the wrong type - def hsl(hue, saturation, lightness) - hsla(hue, saturation, lightness, number(1)) - end - declare :hsl, [:hue, :saturation, :lightness] - - # Creates a {Sass::Script::Value::Color Color} from hue, - # saturation, lightness, and alpha values. Uses the algorithm from - # the [CSS3 spec][]. - # - # [CSS3 spec]: http://www.w3.org/TR/css3-color/#hsl-color - # - # @see #hsl - # @overload hsla($hue, $saturation, $lightness, $alpha) - # @param $hue [Sass::Script::Value::Number] The hue of the color. Should be - # between 0 and 360 degrees, inclusive - # @param $saturation [Sass::Script::Value::Number] The saturation of the - # color. Must be between `0%` and `100%`, inclusive - # @param $lightness [Sass::Script::Value::Number] The lightness of the - # color. Must be between `0%` and `100%`, inclusive - # @param $alpha [Sass::Script::Value::Number] The opacity of the color. Must - # be between 0 and 1, inclusive - # @return [Sass::Script::Value::Color] - # @raise [ArgumentError] if `$saturation`, `$lightness`, or `$alpha` are out - # of bounds or any parameter is the wrong type - def hsla(hue, saturation, lightness, alpha) - assert_type hue, :Number, :hue - assert_type saturation, :Number, :saturation - assert_type lightness, :Number, :lightness - assert_type alpha, :Number, :alpha - check_alpha_unit alpha, 'hsla' - - h = hue.value - s = saturation.value - l = lightness.value - - # Don't store the string representation for function-created colors, both - # because it's not very useful and because some functions aren't supported - # on older browsers. - Sass::Script::Value::Color.new( - :hue => h, :saturation => s, :lightness => l, :alpha => alpha.value) - end - declare :hsla, [:hue, :saturation, :lightness, :alpha] - - # Gets the red component of a color. Calculated from HSL where necessary via - # [this algorithm][hsl-to-rgb]. - # - # [hsl-to-rgb]: http://www.w3.org/TR/css3-color/#hsl-color - # - # @overload red($color) - # @param $color [Sass::Script::Value::Color] - # @return [Sass::Script::Value::Number] The red component, between 0 and 255 - # inclusive - # @raise [ArgumentError] if `$color` isn't a color - def red(color) - assert_type color, :Color, :color - number(color.red) - end - declare :red, [:color] - - # Gets the green component of a color. Calculated from HSL where necessary - # via [this algorithm][hsl-to-rgb]. - # - # [hsl-to-rgb]: http://www.w3.org/TR/css3-color/#hsl-color - # - # @overload green($color) - # @param $color [Sass::Script::Value::Color] - # @return [Sass::Script::Value::Number] The green component, between 0 and - # 255 inclusive - # @raise [ArgumentError] if `$color` isn't a color - def green(color) - assert_type color, :Color, :color - number(color.green) - end - declare :green, [:color] - - # Gets the blue component of a color. Calculated from HSL where necessary - # via [this algorithm][hsl-to-rgb]. - # - # [hsl-to-rgb]: http://www.w3.org/TR/css3-color/#hsl-color - # - # @overload blue($color) - # @param $color [Sass::Script::Value::Color] - # @return [Sass::Script::Value::Number] The blue component, between 0 and - # 255 inclusive - # @raise [ArgumentError] if `$color` isn't a color - def blue(color) - assert_type color, :Color, :color - number(color.blue) - end - declare :blue, [:color] - - # Returns the hue component of a color. See [the CSS3 HSL - # specification][hsl]. Calculated from RGB where necessary via [this - # algorithm][rgb-to-hsl]. - # - # [hsl]: http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV - # [rgb-to-hsl]: http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV - # - # @overload hue($color) - # @param $color [Sass::Script::Value::Color] - # @return [Sass::Script::Value::Number] The hue component, between 0deg and - # 360deg - # @raise [ArgumentError] if `$color` isn't a color - def hue(color) - assert_type color, :Color, :color - number(color.hue, "deg") - end - declare :hue, [:color] - - # Returns the saturation component of a color. See [the CSS3 HSL - # specification][hsl]. Calculated from RGB where necessary via [this - # algorithm][rgb-to-hsl]. - # - # [hsl]: http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV - # [rgb-to-hsl]: http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV - # - # @overload saturation($color) - # @param $color [Sass::Script::Value::Color] - # @return [Sass::Script::Value::Number] The saturation component, between 0% - # and 100% - # @raise [ArgumentError] if `$color` isn't a color - def saturation(color) - assert_type color, :Color, :color - number(color.saturation, "%") - end - declare :saturation, [:color] - - # Returns the lightness component of a color. See [the CSS3 HSL - # specification][hsl]. Calculated from RGB where necessary via [this - # algorithm][rgb-to-hsl]. - # - # [hsl]: http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV - # [rgb-to-hsl]: http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV - # - # @overload lightness($color) - # @param $color [Sass::Script::Value::Color] - # @return [Sass::Script::Value::Number] The lightness component, between 0% - # and 100% - # @raise [ArgumentError] if `$color` isn't a color - def lightness(color) - assert_type color, :Color, :color - number(color.lightness, "%") - end - declare :lightness, [:color] - - # Returns the alpha component (opacity) of a color. This is 1 unless - # otherwise specified. - # - # This function also supports the proprietary Microsoft `alpha(opacity=20)` - # syntax as a special case. - # - # @overload alpha($color) - # @param $color [Sass::Script::Value::Color] - # @return [Sass::Script::Value::Number] The alpha component, between 0 and 1 - # @raise [ArgumentError] if `$color` isn't a color - def alpha(*args) - if args.all? do |a| - a.is_a?(Sass::Script::Value::String) && a.type == :identifier && - a.value =~ /^[a-zA-Z]+\s*=/ - end - # Support the proprietary MS alpha() function - return identifier("alpha(#{args.map {|a| a.to_s}.join(", ")})") - end - - raise ArgumentError.new("wrong number of arguments (#{args.size} for 1)") if args.size != 1 - - assert_type args.first, :Color, :color - number(args.first.alpha) - end - declare :alpha, [:color] - - # Returns the alpha component (opacity) of a color. This is 1 unless - # otherwise specified. - # - # @overload opacity($color) - # @param $color [Sass::Script::Value::Color] - # @return [Sass::Script::Value::Number] The alpha component, between 0 and 1 - # @raise [ArgumentError] if `$color` isn't a color - def opacity(color) - if color.is_a?(Sass::Script::Value::Number) - return identifier("opacity(#{color})") - end - assert_type color, :Color, :color - number(color.alpha) - end - declare :opacity, [:color] - - # Makes a color more opaque. Takes a color and a number between 0 and 1, and - # returns a color with the opacity increased by that amount. - # - # @see #transparentize - # @example - # opacify(rgba(0, 0, 0, 0.5), 0.1) => rgba(0, 0, 0, 0.6) - # opacify(rgba(0, 0, 17, 0.8), 0.2) => #001 - # @overload opacify($color, $amount) - # @param $color [Sass::Script::Value::Color] - # @param $amount [Sass::Script::Value::Number] The amount to increase the - # opacity by, between 0 and 1 - # @return [Sass::Script::Value::Color] - # @raise [ArgumentError] if `$amount` is out of bounds, or either parameter - # is the wrong type - def opacify(color, amount) - _adjust(color, amount, :alpha, 0..1, :+) - end - declare :opacify, [:color, :amount] - - alias_method :fade_in, :opacify - declare :fade_in, [:color, :amount] - - # Makes a color more transparent. Takes a color and a number between 0 and - # 1, and returns a color with the opacity decreased by that amount. - # - # @see #opacify - # @example - # transparentize(rgba(0, 0, 0, 0.5), 0.1) => rgba(0, 0, 0, 0.4) - # transparentize(rgba(0, 0, 0, 0.8), 0.2) => rgba(0, 0, 0, 0.6) - # @overload transparentize($color, $amount) - # @param $color [Sass::Script::Value::Color] - # @param $amount [Sass::Script::Value::Number] The amount to decrease the - # opacity by, between 0 and 1 - # @return [Sass::Script::Value::Color] - # @raise [ArgumentError] if `$amount` is out of bounds, or either parameter - # is the wrong type - def transparentize(color, amount) - _adjust(color, amount, :alpha, 0..1, :-) - end - declare :transparentize, [:color, :amount] - - alias_method :fade_out, :transparentize - declare :fade_out, [:color, :amount] - - # Makes a color lighter. Takes a color and a number between `0%` and `100%`, - # and returns a color with the lightness increased by that amount. - # - # @see #darken - # @example - # lighten(hsl(0, 0%, 0%), 30%) => hsl(0, 0, 30) - # lighten(#800, 20%) => #e00 - # @overload lighten($color, $amount) - # @param $color [Sass::Script::Value::Color] - # @param $amount [Sass::Script::Value::Number] The amount to increase the - # lightness by, between `0%` and `100%` - # @return [Sass::Script::Value::Color] - # @raise [ArgumentError] if `$amount` is out of bounds, or either parameter - # is the wrong type - def lighten(color, amount) - _adjust(color, amount, :lightness, 0..100, :+, "%") - end - declare :lighten, [:color, :amount] - - # Makes a color darker. Takes a color and a number between 0% and 100%, and - # returns a color with the lightness decreased by that amount. - # - # @see #lighten - # @example - # darken(hsl(25, 100%, 80%), 30%) => hsl(25, 100%, 50%) - # darken(#800, 20%) => #200 - # @overload darken($color, $amount) - # @param $color [Sass::Script::Value::Color] - # @param $amount [Sass::Script::Value::Number] The amount to decrease the - # lightness by, between `0%` and `100%` - # @return [Sass::Script::Value::Color] - # @raise [ArgumentError] if `$amount` is out of bounds, or either parameter - # is the wrong type - def darken(color, amount) - _adjust(color, amount, :lightness, 0..100, :-, "%") - end - declare :darken, [:color, :amount] - - # Makes a color more saturated. Takes a color and a number between 0% and - # 100%, and returns a color with the saturation increased by that amount. - # - # @see #desaturate - # @example - # saturate(hsl(120, 30%, 90%), 20%) => hsl(120, 50%, 90%) - # saturate(#855, 20%) => #9e3f3f - # @overload saturate($color, $amount) - # @param $color [Sass::Script::Value::Color] - # @param $amount [Sass::Script::Value::Number] The amount to increase the - # saturation by, between `0%` and `100%` - # @return [Sass::Script::Value::Color] - # @raise [ArgumentError] if `$amount` is out of bounds, or either parameter - # is the wrong type - def saturate(color, amount = nil) - # Support the filter effects definition of saturate. - # https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html - return identifier("saturate(#{color})") if amount.nil? - _adjust(color, amount, :saturation, 0..100, :+, "%") - end - declare :saturate, [:color, :amount] - declare :saturate, [:amount] - - # Makes a color less saturated. Takes a color and a number between 0% and - # 100%, and returns a color with the saturation decreased by that value. - # - # @see #saturate - # @example - # desaturate(hsl(120, 30%, 90%), 20%) => hsl(120, 10%, 90%) - # desaturate(#855, 20%) => #726b6b - # @overload desaturate($color, $amount) - # @param $color [Sass::Script::Value::Color] - # @param $amount [Sass::Script::Value::Number] The amount to decrease the - # saturation by, between `0%` and `100%` - # @return [Sass::Script::Value::Color] - # @raise [ArgumentError] if `$amount` is out of bounds, or either parameter - # is the wrong type - def desaturate(color, amount) - _adjust(color, amount, :saturation, 0..100, :-, "%") - end - declare :desaturate, [:color, :amount] - - # Changes the hue of a color. Takes a color and a number of degrees (usually - # between `-360deg` and `360deg`), and returns a color with the hue rotated - # along the color wheel by that amount. - # - # @example - # adjust-hue(hsl(120, 30%, 90%), 60deg) => hsl(180, 30%, 90%) - # adjust-hue(hsl(120, 30%, 90%), -60deg) => hsl(60, 30%, 90%) - # adjust-hue(#811, 45deg) => #886a11 - # @overload adjust_hue($color, $degrees) - # @param $color [Sass::Script::Value::Color] - # @param $degrees [Sass::Script::Value::Number] The number of degrees to - # rotate the hue - # @return [Sass::Script::Value::Color] - # @raise [ArgumentError] if either parameter is the wrong type - def adjust_hue(color, degrees) - assert_type color, :Color, :color - assert_type degrees, :Number, :degrees - color.with(:hue => color.hue + degrees.value) - end - declare :adjust_hue, [:color, :degrees] - - # Converts a color into the format understood by IE filters. - # - # @example - # ie-hex-str(#abc) => #FFAABBCC - # ie-hex-str(#3322BB) => #FF3322BB - # ie-hex-str(rgba(0, 255, 0, 0.5)) => #8000FF00 - # @overload ie_hex_str($color) - # @param $color [Sass::Script::Value::Color] - # @return [Sass::Script::Value::String] The IE-formatted string - # representation of the color - # @raise [ArgumentError] if `$color` isn't a color - def ie_hex_str(color) - assert_type color, :Color, :color - alpha = (color.alpha * 255).round.to_s(16).rjust(2, '0') - identifier("##{alpha}#{color.send(:hex_str)[1..-1]}".upcase) - end - declare :ie_hex_str, [:color] - - # Increases or decreases one or more properties of a color. This can change - # the red, green, blue, hue, saturation, value, and alpha properties. The - # properties are specified as keyword arguments, and are added to or - # subtracted from the color's current value for that property. - # - # All properties are optional. You can't specify both RGB properties - # (`$red`, `$green`, `$blue`) and HSL properties (`$hue`, `$saturation`, - # `$value`) at the same time. - # - # @example - # adjust-color(#102030, $blue: 5) => #102035 - # adjust-color(#102030, $red: -5, $blue: 5) => #0b2035 - # adjust-color(hsl(25, 100%, 80%), $lightness: -30%, $alpha: -0.4) => hsla(25, 100%, 50%, 0.6) - # @comment - # rubocop:disable LineLength - # @overload adjust_color($color, [$red], [$green], [$blue], [$hue], [$saturation], [$lightness], [$alpha]) - # @comment - # rubocop:disable LineLength - # @param $color [Sass::Script::Value::Color] - # @param $red [Sass::Script::Value::Number] The adjustment to make on the - # red component, between -255 and 255 inclusive - # @param $green [Sass::Script::Value::Number] The adjustment to make on the - # green component, between -255 and 255 inclusive - # @param $blue [Sass::Script::Value::Number] The adjustment to make on the - # blue component, between -255 and 255 inclusive - # @param $hue [Sass::Script::Value::Number] The adjustment to make on the - # hue component, in degrees - # @param $saturation [Sass::Script::Value::Number] The adjustment to make on - # the saturation component, between `-100%` and `100%` inclusive - # @param $lightness [Sass::Script::Value::Number] The adjustment to make on - # the lightness component, between `-100%` and `100%` inclusive - # @param $alpha [Sass::Script::Value::Number] The adjustment to make on the - # alpha component, between -1 and 1 inclusive - # @return [Sass::Script::Value::Color] - # @raise [ArgumentError] if any parameter is the wrong type or out-of - # bounds, or if RGB properties and HSL properties are adjusted at the - # same time - def adjust_color(color, kwargs) - assert_type color, :Color, :color - with = Sass::Util.map_hash( - "red" => [-255..255, ""], - "green" => [-255..255, ""], - "blue" => [-255..255, ""], - "hue" => nil, - "saturation" => [-100..100, "%"], - "lightness" => [-100..100, "%"], - "alpha" => [-1..1, ""] - ) do |name, (range, units)| - - val = kwargs.delete(name) - next unless val - assert_type val, :Number, name - Sass::Util.check_range("$#{name}: Amount", range, val, units) if range - adjusted = color.send(name) + val.value - adjusted = [0, Sass::Util.restrict(adjusted, range)].max if range - [name.to_sym, adjusted] - end - - unless kwargs.empty? - name, val = kwargs.to_a.first - raise ArgumentError.new("Unknown argument $#{name} (#{val})") - end - - color.with(with) - end - declare :adjust_color, [:color], :var_kwargs => true - - # Fluidly scales one or more properties of a color. Unlike - # \{#adjust_color adjust-color}, which changes a color's properties by fixed - # amounts, \{#scale_color scale-color} fluidly changes them based on how - # high or low they already are. That means that lightening an already-light - # color with \{#scale_color scale-color} won't change the lightness much, - # but lightening a dark color by the same amount will change it more - # dramatically. This has the benefit of making `scale-color($color, ...)` - # have a similar effect regardless of what `$color` is. - # - # For example, the lightness of a color can be anywhere between `0%` and - # `100%`. If `scale-color($color, $lightness: 40%)` is called, the resulting - # color's lightness will be 40% of the way between its original lightness - # and 100. If `scale-color($color, $lightness: -40%)` is called instead, the - # lightness will be 40% of the way between the original and 0. - # - # This can change the red, green, blue, saturation, value, and alpha - # properties. The properties are specified as keyword arguments. All - # arguments should be percentages between `0%` and `100%`. - # - # All properties are optional. You can't specify both RGB properties - # (`$red`, `$green`, `$blue`) and HSL properties (`$saturation`, `$value`) - # at the same time. - # - # @example - # scale-color(hsl(120, 70%, 80%), $lightness: 50%) => hsl(120, 70%, 90%) - # scale-color(rgb(200, 150%, 170%), $green: -40%, $blue: 70%) => rgb(200, 90, 229) - # scale-color(hsl(200, 70%, 80%), $saturation: -90%, $alpha: -30%) => hsla(200, 7%, 80%, 0.7) - # @comment - # rubocop:disable LineLength - # @overload scale_color($color, [$red], [$green], [$blue], [$saturation], [$lightness], [$alpha]) - # @comment - # rubocop:disable LineLength - # @param $color [Sass::Script::Value::Color] - # @param $red [Sass::Script::Value::Number] - # @param $green [Sass::Script::Value::Number] - # @param $blue [Sass::Script::Value::Number] - # @param $saturation [Sass::Script::Value::Number] - # @param $lightness [Sass::Script::Value::Number] - # @param $alpha [Sass::Script::Value::Number] - # @return [Sass::Script::Value::Color] - # @raise [ArgumentError] if any parameter is the wrong type or out-of - # bounds, or if RGB properties and HSL properties are adjusted at the - # same time - def scale_color(color, kwargs) - assert_type color, :Color, :color - with = Sass::Util.map_hash( - "red" => 255, - "green" => 255, - "blue" => 255, - "saturation" => 100, - "lightness" => 100, - "alpha" => 1 - ) do |name, max| - - val = kwargs.delete(name) - next unless val - assert_type val, :Number, name - assert_unit val, '%', name - Sass::Util.check_range("$#{name}: Amount", -100..100, val, '%') - - current = color.send(name) - scale = val.value / 100.0 - diff = scale > 0 ? max - current : current - [name.to_sym, current + diff * scale] - end - - unless kwargs.empty? - name, val = kwargs.to_a.first - raise ArgumentError.new("Unknown argument $#{name} (#{val})") - end - - color.with(with) - end - declare :scale_color, [:color], :var_kwargs => true - - # Changes one or more properties of a color. This can change the red, green, - # blue, hue, saturation, value, and alpha properties. The properties are - # specified as keyword arguments, and replace the color's current value for - # that property. - # - # All properties are optional. You can't specify both RGB properties - # (`$red`, `$green`, `$blue`) and HSL properties (`$hue`, `$saturation`, - # `$value`) at the same time. - # - # @example - # change-color(#102030, $blue: 5) => #102005 - # change-color(#102030, $red: 120, $blue: 5) => #782005 - # change-color(hsl(25, 100%, 80%), $lightness: 40%, $alpha: 0.8) => hsla(25, 100%, 40%, 0.8) - # @comment - # rubocop:disable LineLength - # @overload change_color($color, [$red], [$green], [$blue], [$hue], [$saturation], [$lightness], [$alpha]) - # @comment - # rubocop:disable LineLength - # @param $color [Sass::Script::Value::Color] - # @param $red [Sass::Script::Value::Number] The new red component for the - # color, within 0 and 255 inclusive - # @param $green [Sass::Script::Value::Number] The new green component for - # the color, within 0 and 255 inclusive - # @param $blue [Sass::Script::Value::Number] The new blue component for the - # color, within 0 and 255 inclusive - # @param $hue [Sass::Script::Value::Number] The new hue component for the - # color, in degrees - # @param $saturation [Sass::Script::Value::Number] The new saturation - # component for the color, between `0%` and `100%` inclusive - # @param $lightness [Sass::Script::Value::Number] The new lightness - # component for the color, within `0%` and `100%` inclusive - # @param $alpha [Sass::Script::Value::Number] The new alpha component for - # the color, within 0 and 1 inclusive - # @return [Sass::Script::Value::Color] - # @raise [ArgumentError] if any parameter is the wrong type or out-of - # bounds, or if RGB properties and HSL properties are adjusted at the - # same time - def change_color(color, kwargs) - assert_type color, :Color, :color - with = Sass::Util.map_hash( - 'red' => ['Red value', 0..255], - 'green' => ['Green value', 0..255], - 'blue' => ['Blue value', 0..255], - 'hue' => [], - 'saturation' => ['Saturation', 0..100, '%'], - 'lightness' => ['Lightness', 0..100, '%'], - 'alpha' => ['Alpha channel', 0..1] - ) do |name, (desc, range, unit)| - val = kwargs.delete(name) - next unless val - assert_type val, :Number, name - - if range - val = Sass::Util.check_range(desc, range, val, unit) - else - val = val.value - end - - [name.to_sym, val] - end - - unless kwargs.empty? - name, val = kwargs.to_a.first - raise ArgumentError.new("Unknown argument $#{name} (#{val})") - end - - color.with(with) - end - declare :change_color, [:color], :var_kwargs => true - - # Mixes two colors together. Specifically, takes the average of each of the - # RGB components, optionally weighted by the given percentage. The opacity - # of the colors is also considered when weighting the components. - # - # The weight specifies the amount of the first color that should be included - # in the returned color. The default, `50%`, means that half the first color - # and half the second color should be used. `25%` means that a quarter of - # the first color and three quarters of the second color should be used. - # - # @example - # mix(#f00, #00f) => #7f007f - # mix(#f00, #00f, 25%) => #3f00bf - # mix(rgba(255, 0, 0, 0.5), #00f) => rgba(63, 0, 191, 0.75) - # @overload mix($color1, $color2, $weight: 50%) - # @param $color1 [Sass::Script::Value::Color] - # @param $color2 [Sass::Script::Value::Color] - # @param $weight [Sass::Script::Value::Number] The relative weight of each - # color. Closer to `0%` gives more weight to `$color1`, closer to `100%` - # gives more weight to `$color2` - # @return [Sass::Script::Value::Color] - # @raise [ArgumentError] if `$weight` is out of bounds or any parameter is - # the wrong type - def mix(color1, color2, weight = number(50)) - assert_type color1, :Color, :color1 - assert_type color2, :Color, :color2 - assert_type weight, :Number, :weight - - Sass::Util.check_range("Weight", 0..100, weight, '%') - - # This algorithm factors in both the user-provided weight (w) and the - # difference between the alpha values of the two colors (a) to decide how - # to perform the weighted average of the two RGB values. - # - # It works by first normalizing both parameters to be within [-1, 1], - # where 1 indicates "only use color1", -1 indicates "only use color2", and - # all values in between indicated a proportionately weighted average. - # - # Once we have the normalized variables w and a, we apply the formula - # (w + a)/(1 + w*a) to get the combined weight (in [-1, 1]) of color1. - # This formula has two especially nice properties: - # - # * When either w or a are -1 or 1, the combined weight is also that number - # (cases where w * a == -1 are undefined, and handled as a special case). - # - # * When a is 0, the combined weight is w, and vice versa. - # - # Finally, the weight of color1 is renormalized to be within [0, 1] - # and the weight of color2 is given by 1 minus the weight of color1. - p = (weight.value / 100.0).to_f - w = p * 2 - 1 - a = color1.alpha - color2.alpha - - w1 = ((w * a == -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0 - w2 = 1 - w1 - - rgba = color1.rgb.zip(color2.rgb).map {|v1, v2| v1 * w1 + v2 * w2} - rgba << color1.alpha * p + color2.alpha * (1 - p) - rgb_color(*rgba) - end - declare :mix, [:color1, :color2] - declare :mix, [:color1, :color2, :weight] - - # Converts a color to grayscale. This is identical to `desaturate(color, - # 100%)`. - # - # @see #desaturate - # @overload grayscale($color) - # @param $color [Sass::Script::Value::Color] - # @return [Sass::Script::Value::Color] - # @raise [ArgumentError] if `$color` isn't a color - def grayscale(color) - if color.is_a?(Sass::Script::Value::Number) - return identifier("grayscale(#{color})") - end - desaturate color, number(100) - end - declare :grayscale, [:color] - - # Returns the complement of a color. This is identical to `adjust-hue(color, - # 180deg)`. - # - # @see #adjust_hue #adjust-hue - # @overload complement($color) - # @param $color [Sass::Script::Value::Color] - # @return [Sass::Script::Value::Color] - # @raise [ArgumentError] if `$color` isn't a color - def complement(color) - adjust_hue color, number(180) - end - declare :complement, [:color] - - # Returns the inverse (negative) of a color. The red, green, and blue values - # are inverted, while the opacity is left alone. - # - # @overload invert($color) - # @param $color [Sass::Script::Value::Color] - # @return [Sass::Script::Value::Color] - # @raise [ArgumentError] if `$color` isn't a color - def invert(color) - if color.is_a?(Sass::Script::Value::Number) - return identifier("invert(#{color})") - end - - assert_type color, :Color, :color - color.with( - :red => (255 - color.red), - :green => (255 - color.green), - :blue => (255 - color.blue)) - end - declare :invert, [:color] - - # Removes quotes from a string. If the string is already unquoted, this will - # return it unmodified. - # - # @see #quote - # @example - # unquote("foo") => foo - # unquote(foo) => foo - # @overload unquote($string) - # @param $string [Sass::Script::Value::String] - # @return [Sass::Script::Value::String] - # @raise [ArgumentError] if `$string` isn't a string - def unquote(string) - unless string.is_a?(Sass::Script::Value::String) - Sass::Util.sass_warn(< "foo" - # quote(foo) => "foo" - # @overload quote($string) - # @param $string [Sass::Script::Value::String] - # @return [Sass::Script::Value::String] - # @raise [ArgumentError] if `$string` isn't a string - def quote(string) - assert_type string, :String, :string - if string.type != :string - quoted_string(string.value) - else - string - end - end - declare :quote, [:string] - - # Returns the number of characters in a string. - # - # @example - # str-length("foo") => 3 - # @overload str_length($string) - # @param $string [Sass::Script::Value::String] - # @return [Sass::Script::Value::Number] - # @raise [ArgumentError] if `$string` isn't a string - def str_length(string) - assert_type string, :String, :string - number(string.value.size) - end - declare :str_length, [:string] - - # Inserts `$insert` into `$string` at `$index`. - # - # Note that unlike some languages, the first character in a Sass string is - # number 1, the second number 2, and so forth. - # - # @example - # str-insert("abcd", "X", 1) => "Xabcd" - # str-insert("abcd", "X", 4) => "abcXd" - # str-insert("abcd", "X", 5) => "abcdX" - # - # @overload str_insert($string, $insert, $index) - # @param $string [Sass::Script::Value::String] - # @param $insert [Sass::Script::Value::String] - # @param $index [Sass::Script::Value::Number] The position at which - # `$insert` will be inserted. Negative indices count from the end of - # `$string`. An index that's outside the bounds of the string will insert - # `$insert` at the front or back of the string - # @return [Sass::Script::Value::String] The result string. This will be - # quoted if and only if `$string` was quoted - # @raise [ArgumentError] if any parameter is the wrong type - def str_insert(original, insert, index) - assert_type original, :String, :string - assert_type insert, :String, :insert - assert_integer index, :index - assert_unit index, nil, :index - insertion_point = if index.to_i > 0 - [index.to_i - 1, original.value.size].min - else - [index.to_i, -original.value.size - 1].max - end - result = original.value.dup.insert(insertion_point, insert.value) - Sass::Script::Value::String.new(result, original.type) - end - declare :str_insert, [:string, :insert, :index] - - # Returns the index of the first occurrence of `$substring` in `$string`. If - # there is no such occurrence, returns `null`. - # - # Note that unlike some languages, the first character in a Sass string is - # number 1, the second number 2, and so forth. - # - # @example - # str-index(abcd, a) => 1 - # str-index(abcd, ab) => 1 - # str-index(abcd, X) => null - # str-index(abcd, c) => 3 - # - # @overload str_index($string, $substring) - # @param $string [Sass::Script::Value::String] - # @param $substring [Sass::Script::Value::String] - # @return [Sass::Script::Value::Number, Sass::Script::Value::Null] - # @raise [ArgumentError] if any parameter is the wrong type - def str_index(string, substring) - assert_type string, :String, :string - assert_type substring, :String, :substring - index = string.value.index(substring.value) - index ? number(index + 1) : null - end - declare :str_index, [:string, :substring] - - # Extracts a substring from `$string`. The substring will begin at index - # `$start-at` and ends at index `$end-at`. - # - # Note that unlike some languages, the first character in a Sass string is - # number 1, the second number 2, and so forth. - # - # @example - # str-slice("abcd", 2, 3) => "bc" - # str-slice("abcd", 2) => "bcd" - # str-slice("abcd", -3, -2) => "bc" - # str-slice("abcd", 2, -2) => "bc" - # - # @overload str_slice($string, $start-at, $end-at: -1) - # @param $start-at [Sass::Script::Value::Number] The index of the first - # character of the substring. If this is negative, it counts from the end - # of `$string` - # @param $end-before [Sass::Script::Value::Number] The index of the last - # character of the substring. If this is negative, it counts from the end - # of `$string`. Defaults to -1 - # @return [Sass::Script::Value::String] The substring. This will be quoted - # if and only if `$string` was quoted - # @raise [ArgumentError] if any parameter is the wrong type - def str_slice(string, start_at, end_at = nil) - assert_type string, :String, :string - assert_unit start_at, nil, "start-at" - - end_at = number(-1) if end_at.nil? - assert_unit end_at, nil, "end-at" - - return Sass::Script::Value::String.new("", string.type) if end_at.value == 0 - s = start_at.value > 0 ? start_at.value - 1 : start_at.value - e = end_at.value > 0 ? end_at.value - 1 : end_at.value - s = string.value.length + s if s < 0 - s = 0 if s < 0 - e = string.value.length + e if e < 0 - e = 0 if s < 0 - extracted = string.value.slice(s..e) - Sass::Script::Value::String.new(extracted || "", string.type) - end - declare :str_slice, [:string, :start_at] - declare :str_slice, [:string, :start_at, :end_at] - - # Converts a string to upper case. - # - # @example - # to-upper-case(abcd) => ABCD - # - # @overload to_upper_case($string) - # @param $string [Sass::Script::Value::String] - # @return [Sass::Script::Value::String] - # @raise [ArgumentError] if `$string` isn't a string - def to_upper_case(string) - assert_type string, :String, :string - Sass::Script::Value::String.new(string.value.upcase, string.type) - end - declare :to_upper_case, [:string] - - # Convert a string to lower case, - # - # @example - # to-lower-case(ABCD) => abcd - # - # @overload to_lower_case($string) - # @param $string [Sass::Script::Value::String] - # @return [Sass::Script::Value::String] - # @raise [ArgumentError] if `$string` isn't a string - def to_lower_case(string) - assert_type string, :String, :string - Sass::Script::Value::String.new(string.value.downcase, string.type) - end - declare :to_lower_case, [:string] - - # Returns the type of a value. - # - # @example - # type-of(100px) => number - # type-of(asdf) => string - # type-of("asdf") => string - # type-of(true) => bool - # type-of(#fff) => color - # type-of(blue) => color - # @overload type_of($value) - # @param $value [Sass::Script::Value::Base] The value to inspect - # @return [Sass::Script::Value::String] The unquoted string name of the - # value's type - def type_of(value) - identifier(value.class.name.gsub(/Sass::Script::Value::/, '').downcase) - end - declare :type_of, [:value] - - # Returns whether a feature exists in the current Sass runtime. - # - # The following features are supported: - # - # * `global-variable-shadowing` indicates that a local variable will shadow - # a global variable unless `!global` is used. - # - # * `extend-selector-pseudoclass` indicates that `@extend` will reach into - # selector pseudoclasses like `:not`. - # - # * `units-level-3` indicates full support for unit arithmetic using units - # defined in the [Values and Units Level 3][] spec. - # - # [Values and Units Level 3]: http://www.w3.org/TR/css3-values/ - # - # * `at-error` indicates that the Sass `@error` directive is supported. - # - # @example - # feature-exists(some-feature-that-exists) => true - # feature-exists(what-is-this-i-dont-know) => false - # - # @overload feature_exists($feature) - # @param $feature [Sass::Script::Value::String] The name of the feature - # @return [Sass::Script::Value::Bool] Whether the feature is supported in this version of Sass - # @raise [ArgumentError] if `$feature` isn't a string - def feature_exists(feature) - assert_type feature, :String, :feature - bool(Sass.has_feature?(feature.value)) - end - declare :feature_exists, [:feature] - - # Returns the unit(s) associated with a number. Complex units are sorted in - # alphabetical order by numerator and denominator. - # - # @example - # unit(100) => "" - # unit(100px) => "px" - # unit(3em) => "em" - # unit(10px * 5em) => "em*px" - # unit(10px * 5em / 30cm / 1rem) => "em*px/cm*rem" - # @overload unit($number) - # @param $number [Sass::Script::Value::Number] - # @return [Sass::Script::Value::String] The unit(s) of the number, as a - # quoted string - # @raise [ArgumentError] if `$number` isn't a number - def unit(number) - assert_type number, :Number, :number - quoted_string(number.unit_str) - end - declare :unit, [:number] - - # Returns whether a number has units. - # - # @example - # unitless(100) => true - # unitless(100px) => false - # @overload unitless($number) - # @param $number [Sass::Script::Value::Number] - # @return [Sass::Script::Value::Bool] - # @raise [ArgumentError] if `$number` isn't a number - def unitless(number) - assert_type number, :Number, :number - bool(number.unitless?) - end - declare :unitless, [:number] - - # Returns whether two numbers can added, subtracted, or compared. - # - # @example - # comparable(2px, 1px) => true - # comparable(100px, 3em) => false - # comparable(10cm, 3mm) => true - # @overload comparable($number1, $number2) - # @param $number1 [Sass::Script::Value::Number] - # @param $number2 [Sass::Script::Value::Number] - # @return [Sass::Script::Value::Bool] - # @raise [ArgumentError] if either parameter is the wrong type - def comparable(number1, number2) - assert_type number1, :Number, :number1 - assert_type number2, :Number, :number2 - bool(number1.comparable_to?(number2)) - end - declare :comparable, [:number1, :number2] - - # Converts a unitless number to a percentage. - # - # @example - # percentage(0.2) => 20% - # percentage(100px / 50px) => 200% - # @overload percentage($number) - # @param $number [Sass::Script::Value::Number] - # @return [Sass::Script::Value::Number] - # @raise [ArgumentError] if `$number` isn't a unitless number - def percentage(number) - unless number.is_a?(Sass::Script::Value::Number) && number.unitless? - raise ArgumentError.new("$number: #{number.inspect} is not a unitless number") - end - number(number.value * 100, '%') - end - declare :percentage, [:number] - - # Rounds a number to the nearest whole number. - # - # @example - # round(10.4px) => 10px - # round(10.6px) => 11px - # @overload round($number) - # @param $number [Sass::Script::Value::Number] - # @return [Sass::Script::Value::Number] - # @raise [ArgumentError] if `$number` isn't a number - def round(number) - numeric_transformation(number) {|n| n.round} - end - declare :round, [:number] - - # Rounds a number up to the next whole number. - # - # @example - # ceil(10.4px) => 11px - # ceil(10.6px) => 11px - # @overload ceil($number) - # @param $number [Sass::Script::Value::Number] - # @return [Sass::Script::Value::Number] - # @raise [ArgumentError] if `$number` isn't a number - def ceil(number) - numeric_transformation(number) {|n| n.ceil} - end - declare :ceil, [:number] - - # Rounds a number down to the previous whole number. - # - # @example - # floor(10.4px) => 10px - # floor(10.6px) => 10px - # @overload floor($number) - # @param $number [Sass::Script::Value::Number] - # @return [Sass::Script::Value::Number] - # @raise [ArgumentError] if `$number` isn't a number - def floor(number) - numeric_transformation(number) {|n| n.floor} - end - declare :floor, [:number] - - # Returns the absolute value of a number. - # - # @example - # abs(10px) => 10px - # abs(-10px) => 10px - # @overload abs($number) - # @param $number [Sass::Script::Value::Number] - # @return [Sass::Script::Value::Number] - # @raise [ArgumentError] if `$number` isn't a number - def abs(number) - numeric_transformation(number) {|n| n.abs} - end - declare :abs, [:number] - - # Finds the minimum of several numbers. This function takes any number of - # arguments. - # - # @example - # min(1px, 4px) => 1px - # min(5em, 3em, 4em) => 3em - # @overload min($numbers...) - # @param $numbers [[Sass::Script::Value::Number]] - # @return [Sass::Script::Value::Number] - # @raise [ArgumentError] if any argument isn't a number, or if not all of - # the arguments have comparable units - def min(*numbers) - numbers.each {|n| assert_type n, :Number} - numbers.inject {|min, num| min.lt(num).to_bool ? min : num} - end - declare :min, [], :var_args => :true - - # Finds the maximum of several numbers. This function takes any number of - # arguments. - # - # @example - # max(1px, 4px) => 4px - # max(5em, 3em, 4em) => 5em - # @overload max($numbers...) - # @param $numbers [[Sass::Script::Value::Number]] - # @return [Sass::Script::Value::Number] - # @raise [ArgumentError] if any argument isn't a number, or if not all of - # the arguments have comparable units - def max(*values) - values.each {|v| assert_type v, :Number} - values.inject {|max, val| max.gt(val).to_bool ? max : val} - end - declare :max, [], :var_args => :true - - # Return the length of a list. - # - # This can return the number of pairs in a map as well. - # - # @example - # length(10px) => 1 - # length(10px 20px 30px) => 3 - # length((width: 10px, height: 20px)) => 2 - # @overload length($list) - # @param $list [Sass::Script::Value::Base] - # @return [Sass::Script::Value::Number] - def length(list) - number(list.to_a.size) - end - declare :length, [:list] - - # Return a new list, based on the list provided, but with the nth - # element changed to the value given. - # - # Note that unlike some languages, the first item in a Sass list is number - # 1, the second number 2, and so forth. - # - # Negative index values address elements in reverse order, starting with the last element - # in the list. - # - # @example - # set-nth($list: 10px 20px 30px, $n: 2, $value: -20px) => 10px -20px 30px - # @overload set-nth($list, $n, $value) - # @param $list [Sass::Script::Value::Base] The list that will be copied, having the element - # at index `$n` changed. - # @param $n [Sass::Script::Value::Number] The index of the item to set. - # Negative indices count from the end of the list. - # @param $value [Sass::Script::Value::Base] The new value at index `$n`. - # @return [Sass::Script::Value::List] - # @raise [ArgumentError] if `$n` isn't an integer between 1 and the length - # of `$list` - def set_nth(list, n, value) - assert_type n, :Number, :n - Sass::Script::Value::List.assert_valid_index(list, n) - index = n.to_i > 0 ? n.to_i - 1 : n.to_i - new_list = list.to_a.dup - new_list[index] = value - Sass::Script::Value::List.new(new_list, list.separator) - end - declare :set_nth, [:list, :n, :value] - - # Gets the nth item in a list. - # - # Note that unlike some languages, the first item in a Sass list is number - # 1, the second number 2, and so forth. - # - # This can return the nth pair in a map as well. - # - # Negative index values address elements in reverse order, starting with the last element in - # the list. - # - # @example - # nth(10px 20px 30px, 1) => 10px - # nth((Helvetica, Arial, sans-serif), 3) => sans-serif - # nth((width: 10px, length: 20px), 2) => length, 20px - # @overload nth($list, $n) - # @param $list [Sass::Script::Value::Base] - # @param $n [Sass::Script::Value::Number] The index of the item to get. - # Negative indices count from the end of the list. - # @return [Sass::Script::Value::Base] - # @raise [ArgumentError] if `$n` isn't an integer between 1 and the length - # of `$list` - def nth(list, n) - assert_type n, :Number, :n - Sass::Script::Value::List.assert_valid_index(list, n) - - index = n.to_i > 0 ? n.to_i - 1 : n.to_i - list.to_a[index] - end - declare :nth, [:list, :n] - - # Joins together two lists into one. - # - # Unless `$separator` is passed, if one list is comma-separated and one is - # space-separated, the first parameter's separator is used for the resulting - # list. If both lists have fewer than two items, spaces are used for the - # resulting list. - # - # @example - # join(10px 20px, 30px 40px) => 10px 20px 30px 40px - # join((blue, red), (#abc, #def)) => blue, red, #abc, #def - # join(10px, 20px) => 10px 20px - # join(10px, 20px, comma) => 10px, 20px - # join((blue, red), (#abc, #def), space) => blue red #abc #def - # @overload join($list1, $list2, $separator: auto) - # @param $list1 [Sass::Script::Value::Base] - # @param $list2 [Sass::Script::Value::Base] - # @param $separator [Sass::Script::Value::String] The list separator to use. - # If this is `comma` or `space`, that separator will be used. If this is - # `auto` (the default), the separator is determined as explained above. - # @return [Sass::Script::Value::List] - def join(list1, list2, separator = identifier("auto")) - assert_type separator, :String, :separator - unless %w[auto space comma].include?(separator.value) - raise ArgumentError.new("Separator name must be space, comma, or auto") - end - sep = if separator.value == 'auto' - list1.separator || list2.separator || :space - else - separator.value.to_sym - end - list(list1.to_a + list2.to_a, sep) - end - declare :join, [:list1, :list2] - declare :join, [:list1, :list2, :separator] - - # Appends a single value onto the end of a list. - # - # Unless the `$separator` argument is passed, if the list had only one item, - # the resulting list will be space-separated. - # - # @example - # append(10px 20px, 30px) => 10px 20px 30px - # append((blue, red), green) => blue, red, green - # append(10px 20px, 30px 40px) => 10px 20px (30px 40px) - # append(10px, 20px, comma) => 10px, 20px - # append((blue, red), green, space) => blue red green - # @overload append($list, $val, $separator: auto) - # @param $list [Sass::Script::Value::Base] - # @param $val [Sass::Script::Value::Base] - # @param $separator [Sass::Script::Value::String] The list separator to use. - # If this is `comma` or `space`, that separator will be used. If this is - # `auto` (the default), the separator is determined as explained above. - # @return [Sass::Script::Value::List] - def append(list, val, separator = identifier("auto")) - assert_type separator, :String, :separator - unless %w[auto space comma].include?(separator.value) - raise ArgumentError.new("Separator name must be space, comma, or auto") - end - sep = if separator.value == 'auto' - list.separator || :space - else - separator.value.to_sym - end - list(list.to_a + [val], sep) - end - declare :append, [:list, :val] - declare :append, [:list, :val, :separator] - - # Combines several lists into a single multidimensional list. The nth value - # of the resulting list is a space separated list of the source lists' nth - # values. - # - # The length of the resulting list is the length of the - # shortest list. - # - # @example - # zip(1px 1px 3px, solid dashed solid, red green blue) - # => 1px solid red, 1px dashed green, 3px solid blue - # @overload zip($lists...) - # @param $lists [[Sass::Script::Value::Base]] - # @return [Sass::Script::Value::List] - def zip(*lists) - length = nil - values = [] - lists.each do |list| - array = list.to_a - values << array.dup - length = length.nil? ? array.length : [length, array.length].min - end - values.each do |value| - value.slice!(length) - end - new_list_value = values.first.zip(*values[1..-1]) - list(new_list_value.map {|list| list(list, :space)}, :comma) - end - declare :zip, [], :var_args => true - - # Returns the position of a value within a list. If the value isn't found, - # returns `null` instead. - # - # Note that unlike some languages, the first item in a Sass list is number - # 1, the second number 2, and so forth. - # - # This can return the position of a pair in a map as well. - # - # @example - # index(1px solid red, solid) => 2 - # index(1px solid red, dashed) => null - # index((width: 10px, height: 20px), (height 20px)) => 2 - # @overload index($list, $value) - # @param $list [Sass::Script::Value::Base] - # @param $value [Sass::Script::Value::Base] - # @return [Sass::Script::Value::Number, Sass::Script::Value::Null] The - # 1-based index of `$value` in `$list`, or `null` - def index(list, value) - index = list.to_a.index {|e| e.eq(value).to_bool} - index ? number(index + 1) : null - end - declare :index, [:list, :value] - - # Returns the separator of a list. If the list doesn't have a separator due - # to having fewer than two elements, returns `space`. - # - # @example - # list-separator(1px 2px 3px) => space - # list-separator(1px, 2px, 3px) => comma - # list-separator('foo') => space - # @overload list_separator($list) - # @param $list [Sass::Script::Value::Base] - # @return [Sass::Script::Value::String] `comma` or `space` - def list_separator(list) - identifier((list.separator || :space).to_s) - end - declare :separator, [:list] - - # Returns the value in a map associated with the given key. If the map - # doesn't have such a key, returns `null`. - # - # @example - # map-get(("foo": 1, "bar": 2), "foo") => 1 - # map-get(("foo": 1, "bar": 2), "bar") => 2 - # map-get(("foo": 1, "bar": 2), "baz") => null - # @overload map_get($map, $key) - # @param $map [Sass::Script::Value::Map] - # @param $key [Sass::Script::Value::Base] - # @return [Sass::Script::Value::Base] The value indexed by `$key`, or `null` - # if the map doesn't contain the given key - # @raise [ArgumentError] if `$map` is not a map - def map_get(map, key) - assert_type map, :Map, :map - map.to_h[key] || null - end - declare :map_get, [:map, :key] - - # Merges two maps together into a new map. Keys in `$map2` will take - # precedence over keys in `$map1`. - # - # This is the best way to add new values to a map. - # - # All keys in the returned map that also appear in `$map1` will have the - # same order as in `$map1`. New keys from `$map2` will be placed at the end - # of the map. - # - # @example - # map-merge(("foo": 1), ("bar": 2)) => ("foo": 1, "bar": 2) - # map-merge(("foo": 1, "bar": 2), ("bar": 3)) => ("foo": 1, "bar": 3) - # @overload map_merge($map1, $map2) - # @param $map1 [Sass::Script::Value::Map] - # @param $map2 [Sass::Script::Value::Map] - # @return [Sass::Script::Value::Map] - # @raise [ArgumentError] if either parameter is not a map - def map_merge(map1, map2) - assert_type map1, :Map, :map1 - assert_type map2, :Map, :map2 - map(map1.to_h.merge(map2.to_h)) - end - declare :map_merge, [:map1, :map2] - - # Returns a new map with keys removed. - # - # @example - # map-remove(("foo": 1, "bar": 2), "bar") => ("foo": 1) - # map-remove(("foo": 1, "bar": 2, "baz": 3), "bar", "baz") => ("foo": 1) - # map-remove(("foo": 1, "bar": 2), "baz") => ("foo": 1, "bar": 2) - # @overload map_remove($map, $keys...) - # @param $map [Sass::Script::Value::Map] - # @param $keys [[Sass::Script::Value::Base]] - # @return [Sass::Script::Value::Map] - # @raise [ArgumentError] if `$map` is not a map - def map_remove(map, *keys) - assert_type map, :Map, :map - hash = map.to_h.dup - hash.delete_if {|key, _| keys.include?(key)} - map(hash) - end - declare :map_remove, [:map, :key], :var_args => true - - # Returns a list of all keys in a map. - # - # @example - # map-keys(("foo": 1, "bar": 2)) => "foo", "bar" - # @overload map_keys($map) - # @param $map [Map] - # @return [List] the list of keys, comma-separated - # @raise [ArgumentError] if `$map` is not a map - def map_keys(map) - assert_type map, :Map, :map - list(map.to_h.keys, :comma) - end - declare :map_keys, [:map] - - # Returns a list of all values in a map. This list may include duplicate - # values, if multiple keys have the same value. - # - # @example - # map-values(("foo": 1, "bar": 2)) => 1, 2 - # map-values(("foo": 1, "bar": 2, "baz": 1)) => 1, 2, 1 - # @overload map_values($map) - # @param $map [Map] - # @return [List] the list of values, comma-separated - # @raise [ArgumentError] if `$map` is not a map - def map_values(map) - assert_type map, :Map, :map - list(map.to_h.values, :comma) - end - declare :map_values, [:map] - - # Returns whether a map has a value associated with a given key. - # - # @example - # map-has-key(("foo": 1, "bar": 2), "foo") => true - # map-has-key(("foo": 1, "bar": 2), "baz") => false - # @overload map_has_key($map, $key) - # @param $map [Sass::Script::Value::Map] - # @param $key [Sass::Script::Value::Base] - # @return [Sass::Script::Value::Bool] - # @raise [ArgumentError] if `$map` is not a map - def map_has_key(map, key) - assert_type map, :Map, :map - bool(map.to_h.has_key?(key)) - end - declare :map_has_key, [:map, :key] - - # Returns the map of named arguments passed to a function or mixin that - # takes a variable argument list. The argument names are strings, and they - # do not contain the leading `$`. - # - # @example - # @mixin foo($args...) { - # @debug keywords($args); //=> (arg1: val, arg2: val) - # } - # - # @include foo($arg1: val, $arg2: val); - # @overload keywords($args) - # @param $args [Sass::Script::Value::ArgList] - # @return [Sass::Script::Value::Map] - # @raise [ArgumentError] if `$args` isn't a variable argument list - def keywords(args) - assert_type args, :ArgList, :args - map(Sass::Util.map_keys(args.keywords.as_stored) {|k| Sass::Script::Value::String.new(k)}) - end - declare :keywords, [:args] - - # Returns one of two values, depending on whether or not `$condition` is - # true. Just like in `@if`, all values other than `false` and `null` are - # considered to be true. - # - # @example - # if(true, 1px, 2px) => 1px - # if(false, 1px, 2px) => 2px - # @overload if($condition, $if-true, $if-false) - # @param $condition [Sass::Script::Value::Base] Whether the `$if-true` or - # `$if-false` will be returned - # @param $if-true [Sass::Script::Tree::Node] - # @param $if-false [Sass::Script::Tree::Node] - # @return [Sass::Script::Value::Base] `$if-true` or `$if-false` - def if(condition, if_true, if_false) - if condition.to_bool - perform(if_true) - else - perform(if_false) - end - end - declare :if, [:condition, :"&if_true", :"&if_false"] - - # Returns a unique CSS identifier. The identifier is returned as an unquoted - # string. The identifier returned is only guaranteed to be unique within the - # scope of a single Sass run. - # - # @overload unique_id() - # @return [Sass::Script::Value::String] - def unique_id - generator = Sass::Script::Functions.random_number_generator - Thread.current[:sass_last_unique_id] ||= generator.rand(36**8) - # avoid the temptation of trying to guess the next unique value. - value = (Thread.current[:sass_last_unique_id] += (generator.rand(10) + 1)) - # the u makes this a legal identifier if it would otherwise start with a number. - identifier("u" + value.to_s(36).rjust(8, '0')) - end - declare :unique_id, [] - - # Dynamically calls a function. This can call user-defined - # functions, built-in functions, or plain CSS functions. It will - # pass along all arguments, including keyword arguments, to the - # called function. - # - # @example - # call(rgb, 10, 100, 255) => #0a64ff - # call(scale-color, #0a64ff, $lightness: -10%) => #0058ef - # - # $fn: nth; - # call($fn, (a b c), 2) => b - # - # @overload call($name, $args...) - # @param $name [String] The name of the function to call. - def call(name, *args) - assert_type name, :String, :name - kwargs = args.last.is_a?(Hash) ? args.pop : {} - funcall = Sass::Script::Tree::Funcall.new( - name.value, - args.map {|a| Sass::Script::Tree::Literal.new(a)}, - Sass::Util.map_vals(kwargs) {|v| Sass::Script::Tree::Literal.new(v)}, - nil, - nil) - funcall.options = options - perform(funcall) - end - declare :call, [:name], :var_args => true, :var_kwargs => true - - # This function only exists as a workaround for IE7's [`content: - # counter` bug](http://jes.st/2013/ie7s-css-breaking-content-counter-bug/). - # It works identically to any other plain-CSS function, except it - # avoids adding spaces between the argument commas. - # - # @example - # counter(item, ".") => counter(item,".") - # @overload counter($args...) - # @return [Sass::Script::Value::String] - def counter(*args) - identifier("counter(#{args.map {|a| a.to_s(options)}.join(',')})") - end - declare :counter, [], :var_args => true - - # This function only exists as a workaround for IE7's [`content: - # counter` bug](http://jes.st/2013/ie7s-css-breaking-content-counter-bug/). - # It works identically to any other plain-CSS function, except it - # avoids adding spaces between the argument commas. - # - # @example - # counters(item, ".") => counters(item,".") - # @overload counters($args...) - # @return [Sass::Script::Value::String] - def counters(*args) - identifier("counters(#{args.map {|a| a.to_s(options)}.join(',')})") - end - declare :counters, [], :var_args => true - - # Check whether a variable with the given name exists in the current - # scope or in the global scope. - # - # @example - # $a-false-value: false; - # variable-exists(a-false-value) => true - # - # variable-exists(nonexistent) => false - # - # @overload variable_exists($name) - # @param $name [Sass::Script::Value::String] The name of the variable to - # check. The name should not include the `$`. - # @return [Sass::Script::Value::Bool] Whether the variable is defined in - # the current scope. - def variable_exists(name) - assert_type name, :String, :name - bool(environment.caller.var(name.value)) - end - declare :variable_exists, [:name] - - # Check whether a variable with the given name exists in the global - # scope (at the top level of the file). - # - # @example - # $a-false-value: false; - # global-variable-exists(a-false-value) => true - # - # .foo { - # $some-var: false; - # @if global-variable-exists(some-var) { /* false, doesn't run */ } - # } - # - # @overload global_variable_exists($name) - # @param $name [Sass::Script::Value::String] The name of the variable to - # check. The name should not include the `$`. - # @return [Sass::Script::Value::Bool] Whether the variable is defined in - # the global scope. - def global_variable_exists(name) - assert_type name, :String, :name - bool(environment.global_env.var(name.value)) - end - declare :global_variable_exists, [:name] - - # Check whether a function with the given name exists. - # - # @example - # function-exists(lighten) => true - # - # @function myfunc { @return "something"; } - # function-exists(myfunc) => true - # - # @overload function_exists($name) - # @param name [Sass::Script::Value::String] The name of the function to - # check. - # @return [Sass::Script::Value::Bool] Whether the function is defined. - def function_exists(name) - assert_type name, :String, :name - exists = Sass::Script::Functions.callable?(name.value.tr("-", "_")) - exists ||= environment.function(name.value) - bool(exists) - end - declare :function_exists, [:name] - - # Check whether a mixin with the given name exists. - # - # @example - # mixin-exists(nonexistent) => false - # - # @mixin red-text { color: red; } - # mixin-exists(red-text) => true - # - # @overload mixin_exists($name) - # @param name [Sass::Script::Value::String] The name of the mixin to - # check. - # @return [Sass::Script::Value::Bool] Whether the mixin is defined. - def mixin_exists(name) - assert_type name, :String, :name - bool(environment.mixin(name.value)) - end - declare :mixin_exists, [:name] - - # Return a string containing the value as its Sass representation. - # - # @overload inspect($value) - # @param $value [Sass::Script::Value::Base] The value to inspect. - # @return [Sass::Script::Value::String] A representation of the value as - # it would be written in Sass. - def inspect(value) - unquoted_string(value.to_sass) - end - declare :inspect, [:value] - - # @overload random() - # Return a decimal between 0 and 1, inclusive of 0 but not 1. - # @return [Sass::Script::Value::Number] A decimal value. - # @overload random($limit) - # Return an integer between 1 and `$limit`, inclusive of both 1 and `$limit`. - # @param $limit [Sass::Script::Value::Number] The maximum of the random integer to be - # returned, a positive integer. - # @return [Sass::Script::Value::Number] An integer. - # @raise [ArgumentError] if the `$limit` is not 1 or greater - def random(limit = nil) - generator = Sass::Script::Functions.random_number_generator - if limit - assert_integer limit, "limit" - if limit.to_i < 1 - raise ArgumentError.new("$limit #{limit} must be greater than or equal to 1") - end - number(1 + generator.rand(limit.to_i)) - else - number(generator.rand) - end - end - declare :random, [] - declare :random, [:limit] - - # Parses a user-provided selector into a list of lists of strings - # as returned by `&`. - # - # @example - # selector-parse(".foo .bar, .baz .bang") => ('.foo' '.bar', '.baz' '.bang') - # - # @overload selector_parse($selector) - # @param $selector [Sass::Script::Value::String, Sass::Script::Value::List] - # The selector to parse. This can be either a string, a list of - # strings, or a list of lists of strings as returned by `&`. - # @return [Sass::Script::Value::List] - # A list of lists of strings representing `$selector`. This is - # in the same format as a selector returned by `&`. - def selector_parse(selector) - parse_selector(selector, :selector).to_sass_script - end - declare :selector_parse, [:selector] - - # Return a new selector with all selectors in `$selectors` nested beneath - # one another as though they had been nested in the stylesheet as - # `$selector1 { $selector2 { ... } }`. - # - # Unlike most selector functions, `selector-nest` allows the - # parent selector `&` to be used in any selector but the first. - # - # @example - # selector-nest(".foo", ".bar", ".baz") => .foo .bar .baz - # selector-nest(".a .foo", ".b .bar") => .a .foo .b .bar - # selector-nest(".foo", "&.bar") => .foo.bar - # - # @overload selector_nest($selectors...) - # @param $selectors [[Sass::Script::Value::String, Sass::Script::Value::List]] - # The selectors to nest. At least one selector must be passed. Each of - # these can be either a string, a list of strings, or a list of lists of - # strings as returned by `&`. - # @return [Sass::Script::Value::List] - # A list of lists of strings representing the result of nesting - # `$selectors`. This is in the same format as a selector returned by - # `&`. - def selector_nest(*selectors) - if selectors.empty? - raise ArgumentError.new("$selectors: At least one selector must be passed") - end - - parsed = [parse_selector(selectors.first, :selectors)] - parsed += selectors[1..-1].map {|sel| parse_selector(sel, :selectors, !!:parse_parent_ref)} - parsed.inject {|result, child| child.resolve_parent_refs(result)}.to_sass_script - end - declare :selector_nest, [], :var_args => true - - # Return a new selector with all selectors in `$selectors` appended one - # another as though they had been nested in the stylesheet as `$selector1 { - # &$selector2 { ... } }`. - # - # @example - # selector-append(".foo", ".bar", ".baz") => .foo.bar.baz - # selector-append(".a .foo", ".b .bar") => "a .foo.b .bar" - # selector-append(".foo", "-suffix") => ".foo-suffix" - # - # @overload selector_append($selectors...) - # @param $selectors [[Sass::Script::Value::String, Sass::Script::Value::List]] - # The selectors to append. At least one selector must be passed. Each of - # these can be either a string, a list of strings, or a list of lists of - # strings as returned by `&`. - # @return [Sass::Script::Value::List] - # A list of lists of strings representing the result of appending - # `$selectors`. This is in the same format as a selector returned by - # `&`. - # @raise [ArgumentError] if a selector could not be appended. - def selector_append(*selectors) - if selectors.empty? - raise ArgumentError.new("$selectors: At least one selector must be passed") - end - - selectors.map {|sel| parse_selector(sel, :selectors)}.inject do |parent, child| - child.members.each do |seq| - sseq = seq.members.first - unless sseq.is_a?(Sass::Selector::SimpleSequence) - raise ArgumentError.new("Can't append \"#{seq}\" to \"#{parent}\"") - end - - base = sseq.base - case base - when Sass::Selector::Universal - raise ArgumentError.new("Can't append \"#{seq}\" to \"#{parent}\"") - when Sass::Selector::Element - unless base.namespace.nil? - raise ArgumentError.new("Can't append \"#{seq}\" to \"#{parent}\"") - end - sseq.members[0] = Sass::Selector::Parent.new(base.name) - else - sseq.members.unshift Sass::Selector::Parent.new - end - end - child.resolve_parent_refs(parent) - end.to_sass_script - end - declare :selector_append, [], :var_args => true - - # Returns a new version of `$selector` with `$extendee` extended - # with `$extender`. This works just like the result of - # - # $selector { ... } - # $extender { @extend $extendee } - # - # @example - # selector-extend(".a .b", ".b", ".foo .bar") => .a .b, .a .foo .bar, .foo .a .bar - # - # @overload selector_extend($selector, $extendee, $extender) - # @param $selector [Sass::Script::Value::String, Sass::Script::Value::List] - # The selector within which `$extendee` is extended with - # `$extender`. This can be either a string, a list of strings, - # or a list of lists of strings as returned by `&`. - # @param $extendee [Sass::Script::Value::String, Sass::Script::Value::List] - # The selector being extended. This can be either a string, a - # list of strings, or a list of lists of strings as returned - # by `&`. - # @param $extender [Sass::Script::Value::String, Sass::Script::Value::List] - # The selector being injected into `$selector`. This can be - # either a string, a list of strings, or a list of lists of - # strings as returned by `&`. - # @return [Sass::Script::Value::List] - # A list of lists of strings representing the result of the - # extension. This is in the same format as a selector returned - # by `&`. - # @raise [ArgumentError] if the extension fails - def selector_extend(selector, extendee, extender) - selector = parse_selector(selector, :selector) - extendee = parse_selector(extendee, :extendee) - extender = parse_selector(extender, :extender) - - extends = Sass::Util::SubsetMap.new - begin - extender.populate_extends(extends, extendee) - selector.do_extend(extends).to_sass_script - rescue Sass::SyntaxError => e - raise ArgumentError.new(e.to_s) - end - end - declare :selector_extend, [:selector, :extendee, :extender] - - # Replaces all instances of `$original` with `$replacement` in `$selector` - # - # This works by using `@extend` and throwing away the original - # selector. This means that it can be used to do very advanced - # replacements; see the examples below. - # - # @example - # selector-replace(".foo .bar", ".bar", ".baz") => ".foo .baz" - # selector-replace(".foo.bar.baz", ".foo.baz", ".qux") => ".bar.qux" - # - # @overload selector_replace($selector, $original, $replacement) - # @param $selector [Sass::Script::Value::String, Sass::Script::Value::List] - # The selector within which `$original` is replaced with - # `$replacement`. This can be either a string, a list of - # strings, or a list of lists of strings as returned by `&`. - # @param $original [Sass::Script::Value::String, Sass::Script::Value::List] - # The selector being replaced. This can be either a string, a - # list of strings, or a list of lists of strings as returned - # by `&`. - # @param $replacement [Sass::Script::Value::String, Sass::Script::Value::List] - # The selector that `$original` is being replaced with. This - # can be either a string, a list of strings, or a list of - # lists of strings as returned by `&`. - # @return [Sass::Script::Value::List] - # A list of lists of strings representing the result of the - # extension. This is in the same format as a selector returned - # by `&`. - # @raise [ArgumentError] if the replacement fails - def selector_replace(selector, original, replacement) - selector = parse_selector(selector, :selector) - original = parse_selector(original, :original) - replacement = parse_selector(replacement, :replacement) - - extends = Sass::Util::SubsetMap.new - begin - replacement.populate_extends(extends, original) - selector.do_extend(extends, [], !!:replace).to_sass_script - rescue Sass::SyntaxError => e - raise ArgumentError.new(e.to_s) - end - end - declare :selector_replace, [:selector, :original, :replacement] - - # Unifies two selectors into a single selector that matches only - # elements matched by both input selectors. Returns `null` if - # there is no such selector. - # - # Like the selector unification done for `@extend`, this doesn't - # guarantee that the output selector will match *all* elements - # matched by both input selectors. For example, if `.a .b` is - # unified with `.x .y`, `.a .x .b.y, .x .a .b.y` will be returned, - # but `.a.x .b.y` will not. This avoids exponential output size - # while matching all elements that are likely to exist in - # practice. - # - # @example - # selector-unify(".a", ".b") => .a.b - # selector-unify(".a .b", ".x .y") => .a .x .b.y, .x .a .b.y - # selector-unify(".a.b", ".b.c") => .a.b.c - # selector-unify("#a", "#b") => null - # - # @overload selector_unify($selector1, $selector2) - # @param $selector1 [Sass::Script::Value::String, Sass::Script::Value::List] - # The first selector to be unified. This can be either a - # string, a list of strings, or a list of lists of strings as - # returned by `&`. - # @param $selector2 [Sass::Script::Value::String, Sass::Script::Value::List] - # The second selector to be unified. This can be either a - # string, a list of strings, or a list of lists of strings as - # returned by `&`. - # @return [Sass::Script::Value::List, Sass::Script::Value::Null] - # A list of lists of strings representing the result of the - # unification, or null if no unification exists. This is in - # the same format as a selector returned by `&`. - def selector_unify(selector1, selector2) - selector1 = parse_selector(selector1, :selector1) - selector2 = parse_selector(selector2, :selector2) - return null unless (unified = selector1.unify(selector2)) - unified.to_sass_script - end - declare :selector_unify, [:selector1, :selector2] - - # Returns the [simple - # selectors](http://dev.w3.org/csswg/selectors4/#simple) that - # comprise the compound selector `$selector`. - # - # Note that `$selector` **must be** a [compound - # selector](http://dev.w3.org/csswg/selectors4/#compound). That - # means it cannot contain commas or spaces. It also means that - # unlike other selector functions, this takes only strings, not - # lists. - # - # @example - # simple-selectors(".foo.bar") => ".foo", ".bar" - # simple-selectors(".foo.bar.baz") => ".foo", ".bar", ".baz" - # - # @overload simple_selectors($selector) - # @param $selector [Sass::Script::Value::String] - # The compound selector whose simple selectors will be extracted. - # @return [Sass::Script::Value::List] - # A list of simple selectors in the compound selector. - def simple_selectors(selector) - selector = parse_compound_selector(selector, :selector) - list(selector.members.map {|simple| unquoted_string(simple.to_s)}, :comma) - end - declare :simple_selectors, [:selector] - - # Returns whether `$super` is a superselector of `$sub`. This means that - # `$super` matches all the elements that `$sub` matches, as well as possibly - # additional elements. In general, simpler selectors tend to be - # superselectors of more complex oned. - # - # @example - # is-superselector(".foo", ".foo.bar") => true - # is-superselector(".foo.bar", ".foo") => false - # is-superselector(".bar", ".foo .bar") => true - # is-superselector(".foo .bar", ".bar") => false - # - # @overload is_superselector($super, $sub) - # @param $super [Sass::Script::Value::String, Sass::Script::Value::List] - # The potential superselector. This can be either a string, a list of - # strings, or a list of lists of strings as returned by `&`. - # @param $sub [Sass::Script::Value::String, Sass::Script::Value::List] - # The potential subselector. This can be either a string, a list of - # strings, or a list of lists of strings as returned by `&`. - # @return [Sass::Script::Value::Bool] - # Whether `$selector1` is a superselector of `$selector2`. - def is_superselector(sup, sub) - sup = parse_selector(sup, :super) - sub = parse_selector(sub, :sub) - bool(sup.superselector?(sub)) - end - declare :is_superselector, [:super, :sub] - - private - - # This method implements the pattern of transforming a numeric value into - # another numeric value with the same units. - # It yields a number to a block to perform the operation and return a number - def numeric_transformation(value) - assert_type value, :Number, :value - Sass::Script::Value::Number.new( - yield(value.value), value.numerator_units, value.denominator_units) - end - - # @comment - # rubocop:disable ParameterLists - def _adjust(color, amount, attr, range, op, units = "") - # rubocop:enable ParameterLists - assert_type color, :Color, :color - assert_type amount, :Number, :amount - Sass::Util.check_range('Amount', range, amount, units) - - color.with(attr => color.send(attr).send(op, amount.value)) - end - - def check_alpha_unit(alpha, function) - return if alpha.unitless? - - if alpha.is_unit?("%") - Sass::Util.sass_warn(< :plus, - '-' => :minus, - '*' => :times, - '/' => :div, - '%' => :mod, - '=' => :single_eq, - ':' => :colon, - '(' => :lparen, - ')' => :rparen, - ',' => :comma, - 'and' => :and, - 'or' => :or, - 'not' => :not, - '==' => :eq, - '!=' => :neq, - '>=' => :gte, - '<=' => :lte, - '>' => :gt, - '<' => :lt, - '#{' => :begin_interpolation, - '}' => :end_interpolation, - ';' => :semicolon, - '{' => :lcurly, - '...' => :splat, - } - - OPERATORS_REVERSE = Sass::Util.map_hash(OPERATORS) {|k, v| [v, k]} - - TOKEN_NAMES = Sass::Util.map_hash(OPERATORS_REVERSE) {|k, v| [k, v.inspect]}.merge( - :const => "variable (e.g. $foo)", - :ident => "identifier (e.g. middle)") - - # A list of operator strings ordered with longer names first - # so that `>` and `<` don't clobber `>=` and `<=`. - OP_NAMES = OPERATORS.keys.sort_by {|o| -o.size} - - # A sub-list of {OP_NAMES} that only includes operators - # with identifier names. - IDENT_OP_NAMES = OP_NAMES.select {|k, v| k =~ /^\w+/} - - PARSEABLE_NUMBER = /(?:(\d*\.\d+)|(\d+))(?:[eE]([+-]?\d+))?(#{UNIT})?/ - - # A hash of regular expressions that are used for tokenizing. - REGULAR_EXPRESSIONS = { - :whitespace => /\s+/, - :comment => COMMENT, - :single_line_comment => SINGLE_LINE_COMMENT, - :variable => /(\$)(#{IDENT})/, - :ident => /(#{IDENT})(\()?/, - :number => PARSEABLE_NUMBER, - :unary_minus_number => /-#{PARSEABLE_NUMBER}/, - :color => HEXCOLOR, - :id => /##{IDENT}/, - :selector => /&/, - :ident_op => /(#{Regexp.union(*IDENT_OP_NAMES.map do |s| - Regexp.new(Regexp.escape(s) + "(?!#{NMCHAR}|\Z)") - end)})/, - :op => /(#{Regexp.union(*OP_NAMES)})/, - } - - class << self - private - - def string_re(open, close) - /#{open}((?:\\.|\#(?!\{)|[^#{close}\\#])*)(#{close}|#\{)/m - end - end - - # A hash of regular expressions that are used for tokenizing strings. - # - # The key is a `[Symbol, Boolean]` pair. - # The symbol represents which style of quotation to use, - # while the boolean represents whether or not the string - # is following an interpolated segment. - STRING_REGULAR_EXPRESSIONS = { - :double => { - false => string_re('"', '"'), - true => string_re('', '"') - }, - :single => { - false => string_re("'", "'"), - true => string_re('', "'") - }, - :uri => { - false => /url\(#{W}(#{URLCHAR}*?)(#{W}\)|#\{)/, - true => /(#{URLCHAR}*?)(#{W}\)|#\{)/ - }, - # Defined in https://developer.mozilla.org/en/CSS/@-moz-document as a - # non-standard version of http://www.w3.org/TR/css3-conditional/ - :url_prefix => { - false => /url-prefix\(#{W}(#{URLCHAR}*?)(#{W}\)|#\{)/, - true => /(#{URLCHAR}*?)(#{W}\)|#\{)/ - }, - :domain => { - false => /domain\(#{W}(#{URLCHAR}*?)(#{W}\)|#\{)/, - true => /(#{URLCHAR}*?)(#{W}\)|#\{)/ - } - } - - # @param str [String, StringScanner] The source text to lex - # @param line [Fixnum] The 1-based line on which the SassScript appears. - # Used for error reporting and sourcemap building - # @param offset [Fixnum] The 1-based character (not byte) offset in the line in the source. - # Used for error reporting and sourcemap building - # @param options [{Symbol => Object}] An options hash; - # see {file:SASS_REFERENCE.md#sass_options the Sass options documentation} - def initialize(str, line, offset, options) - @scanner = str.is_a?(StringScanner) ? str : Sass::Util::MultibyteStringScanner.new(str) - @line = line - @offset = offset - @options = options - @interpolation_stack = [] - @prev = nil - end - - # Moves the lexer forward one token. - # - # @return [Token] The token that was moved past - def next - @tok ||= read_token - @tok, tok = nil, @tok - @prev = tok - tok - end - - # Returns whether or not there's whitespace before the next token. - # - # @return [Boolean] - def whitespace?(tok = @tok) - if tok - @scanner.string[0...tok.pos] =~ /\s\Z/ - else - @scanner.string[@scanner.pos, 1] =~ /^\s/ || - @scanner.string[@scanner.pos - 1, 1] =~ /\s\Z/ - end - end - - # Returns the next token without moving the lexer forward. - # - # @return [Token] The next token - def peek - @tok ||= read_token - end - - # Rewinds the underlying StringScanner - # to before the token returned by \{#peek}. - def unpeek! - if @tok - @scanner.pos = @tok.pos - @line = @tok.source_range.start_pos.line - @offset = @tok.source_range.start_pos.offset - end - end - - # @return [Boolean] Whether or not there's more source text to lex. - def done? - return if @next_tok - whitespace unless after_interpolation? && !@interpolation_stack.empty? - @scanner.eos? && @tok.nil? - end - - # @return [Boolean] Whether or not the last token lexed was `:end_interpolation`. - def after_interpolation? - @prev && @prev.type == :end_interpolation - end - - # Raise an error to the effect that `name` was expected in the input stream - # and wasn't found. - # - # This calls \{#unpeek!} to rewind the scanner to immediately after - # the last returned token. - # - # @param name [String] The name of the entity that was expected but not found - # @raise [Sass::SyntaxError] - def expected!(name) - unpeek! - Sass::SCSS::Parser.expected(@scanner, name, @line) - end - - # Records all non-comment text the lexer consumes within the block - # and returns it as a string. - # - # @yield A block in which text is recorded - # @return [String] - def str - old_pos = @tok ? @tok.pos : @scanner.pos - yield - new_pos = @tok ? @tok.pos : @scanner.pos - @scanner.string[old_pos...new_pos] - end - - private - - def read_token - if (tok = @next_tok) - @next_tok = nil - return tok - end - - return if done? - start_pos = source_position - value = token - return unless value - type, val = value - Token.new(type, val, range(start_pos), @scanner.pos - @scanner.matched_size) - end - - def whitespace - nil while scan(REGULAR_EXPRESSIONS[:whitespace]) || - scan(REGULAR_EXPRESSIONS[:comment]) || - scan(REGULAR_EXPRESSIONS[:single_line_comment]) - end - - def token - if after_interpolation? && (interp = @interpolation_stack.pop) - interp_type, interp_value = interp - if interp_type == :special_fun - return special_fun_body(interp_value) - else - raise "[BUG]: Unknown interp_type #{interp_type}" unless interp_type == :string - return string(interp_value, true) - end - end - - variable || string(:double, false) || string(:single, false) || number || id || color || - selector || string(:uri, false) || raw(UNICODERANGE) || special_fun || special_val || - ident_op || ident || op - end - - def variable - _variable(REGULAR_EXPRESSIONS[:variable]) - end - - def _variable(rx) - return unless scan(rx) - - [:const, @scanner[2]] - end - - def ident - return unless scan(REGULAR_EXPRESSIONS[:ident]) - [@scanner[2] ? :funcall : :ident, @scanner[1]] - end - - def string(re, open) - line, offset = @line, @offset - return unless scan(STRING_REGULAR_EXPRESSIONS[re][open]) - if @scanner[0] =~ /([^\\]|^)\n/ - filename = @options[:filename] - Sass::Util.sass_warn < Object}] An options hash; - # see {file:SASS_REFERENCE.md#sass_options the Sass options documentation} - def initialize(str, line, offset, options = {}) - @options = options - @lexer = lexer_class.new(str, line, offset, options) - end - - # Parses a SassScript expression within an interpolated segment (`#{}`). - # This means that it stops when it comes across an unmatched `}`, - # which signals the end of an interpolated segment, - # it returns rather than throwing an error. - # - # @param warn_for_color [Boolean] Whether raw color values passed to - # interoplation should cause a warning. - # @return [Script::Tree::Node] The root node of the parse tree - # @raise [Sass::SyntaxError] if the expression isn't valid SassScript - def parse_interpolated(warn_for_color = false) - # Start two characters back to compensate for #{ - start_pos = Sass::Source::Position.new(line, offset - 2) - expr = assert_expr :expr - assert_tok :end_interpolation - expr = Sass::Script::Tree::Interpolation.new( - nil, expr, nil, !:wb, !:wa, !:originally_text, warn_for_color) - expr.options = @options - node(expr, start_pos) - rescue Sass::SyntaxError => e - e.modify_backtrace :line => @lexer.line, :filename => @options[:filename] - raise e - end - - # Parses a SassScript expression. - # - # @return [Script::Tree::Node] The root node of the parse tree - # @raise [Sass::SyntaxError] if the expression isn't valid SassScript - def parse - expr = assert_expr :expr - assert_done - expr.options = @options - expr - rescue Sass::SyntaxError => e - e.modify_backtrace :line => @lexer.line, :filename => @options[:filename] - raise e - end - - # Parses a SassScript expression, - # ending it when it encounters one of the given identifier tokens. - # - # @param tokens [#include?(String)] A set of strings that delimit the expression. - # @return [Script::Tree::Node] The root node of the parse tree - # @raise [Sass::SyntaxError] if the expression isn't valid SassScript - def parse_until(tokens) - @stop_at = tokens - expr = assert_expr :expr - assert_done - expr.options = @options - expr - rescue Sass::SyntaxError => e - e.modify_backtrace :line => @lexer.line, :filename => @options[:filename] - raise e - end - - # Parses the argument list for a mixin include. - # - # @return [(Array, - # {String => Script::Tree::Node}, - # Script::Tree::Node, - # Script::Tree::Node)] - # The root nodes of the positional arguments, keyword arguments, and - # splat argument(s). Keyword arguments are in a hash from names to values. - # @raise [Sass::SyntaxError] if the argument list isn't valid SassScript - def parse_mixin_include_arglist - args, keywords = [], {} - if try_tok(:lparen) - args, keywords, splat, kwarg_splat = mixin_arglist - assert_tok(:rparen) - end - assert_done - - args.each {|a| a.options = @options} - keywords.each {|k, v| v.options = @options} - splat.options = @options if splat - kwarg_splat.options = @options if kwarg_splat - return args, keywords, splat, kwarg_splat - rescue Sass::SyntaxError => e - e.modify_backtrace :line => @lexer.line, :filename => @options[:filename] - raise e - end - - # Parses the argument list for a mixin definition. - # - # @return [(Array, Script::Tree::Node)] - # The root nodes of the arguments, and the splat argument. - # @raise [Sass::SyntaxError] if the argument list isn't valid SassScript - def parse_mixin_definition_arglist - args, splat = defn_arglist!(false) - assert_done - - args.each do |k, v| - k.options = @options - v.options = @options if v - end - splat.options = @options if splat - return args, splat - rescue Sass::SyntaxError => e - e.modify_backtrace :line => @lexer.line, :filename => @options[:filename] - raise e - end - - # Parses the argument list for a function definition. - # - # @return [(Array, Script::Tree::Node)] - # The root nodes of the arguments, and the splat argument. - # @raise [Sass::SyntaxError] if the argument list isn't valid SassScript - def parse_function_definition_arglist - args, splat = defn_arglist!(true) - assert_done - - args.each do |k, v| - k.options = @options - v.options = @options if v - end - splat.options = @options if splat - return args, splat - rescue Sass::SyntaxError => e - e.modify_backtrace :line => @lexer.line, :filename => @options[:filename] - raise e - end - - # Parse a single string value, possibly containing interpolation. - # Doesn't assert that the scanner is finished after parsing. - # - # @return [Script::Tree::Node] The root node of the parse tree. - # @raise [Sass::SyntaxError] if the string isn't valid SassScript - def parse_string - unless (peek = @lexer.peek) && - (peek.type == :string || - (peek.type == :funcall && peek.value.downcase == 'url')) - lexer.expected!("string") - end - - expr = assert_expr :funcall - expr.options = @options - @lexer.unpeek! - expr - rescue Sass::SyntaxError => e - e.modify_backtrace :line => @lexer.line, :filename => @options[:filename] - raise e - end - - # Parses a SassScript expression. - # - # @overload parse(str, line, offset, filename = nil) - # @return [Script::Tree::Node] The root node of the parse tree - # @see Parser#initialize - # @see Parser#parse - def self.parse(*args) - new(*args).parse - end - - PRECEDENCE = [ - :comma, :single_eq, :space, :or, :and, - [:eq, :neq], - [:gt, :gte, :lt, :lte], - [:plus, :minus], - [:times, :div, :mod], - ] - - ASSOCIATIVE = [:plus, :times] - - class << self - # Returns an integer representing the precedence - # of the given operator. - # A lower integer indicates a looser binding. - # - # @private - def precedence_of(op) - PRECEDENCE.each_with_index do |e, i| - return i if Array(e).include?(op) - end - raise "[BUG] Unknown operator #{op.inspect}" - end - - # Returns whether or not the given operation is associative. - # - # @private - def associative?(op) - ASSOCIATIVE.include?(op) - end - - private - - # Defines a simple left-associative production. - # name is the name of the production, - # sub is the name of the production beneath it, - # and ops is a list of operators for this precedence level - def production(name, sub, *ops) - class_eval < "string", - :default => "expression (e.g. 1px, bold)", - :mixin_arglist => "mixin argument", - :fn_arglist => "function argument", - :splat => "...", - :special_fun => '")"', - } - - def assert_expr(name, expected = nil) - e = send(name) - return e if e - @lexer.expected!(expected || EXPR_NAMES[name] || EXPR_NAMES[:default]) - end - - def assert_tok(name) - # Avoids an array allocation caused by argument globbing in assert_toks. - t = try_tok(name) - return t if t - @lexer.expected!(Lexer::TOKEN_NAMES[name] || name.to_s) - end - - def assert_toks(*names) - t = try_toks(*names) - return t if t - @lexer.expected!(names.map {|tok| Lexer::TOKEN_NAMES[tok] || tok}.join(" or ")) - end - - def try_tok(name) - # Avoids an array allocation caused by argument globbing in the try_toks method. - peeked = @lexer.peek - peeked && name == peeked.type && @lexer.next - end - - def try_toks(*names) - peeked = @lexer.peek - peeked && names.include?(peeked.type) && @lexer.next - end - - def assert_done - return if @lexer.done? - @lexer.expected!(EXPR_NAMES[:default]) - end - - # @overload node(value, source_range) - # @param value [Sass::Script::Value::Base] - # @param source_range [Sass::Source::Range] - # @overload node(value, start_pos, end_pos = source_position) - # @param value [Sass::Script::Value::Base] - # @param start_pos [Sass::Source::Position] - # @param end_pos [Sass::Source::Position] - def literal_node(value, source_range_or_start_pos, end_pos = source_position) - node(Sass::Script::Tree::Literal.new(value), source_range_or_start_pos, end_pos) - end - - # @overload node(node, source_range) - # @param node [Sass::Script::Tree::Node] - # @param source_range [Sass::Source::Range] - # @overload node(node, start_pos, end_pos = source_position) - # @param node [Sass::Script::Tree::Node] - # @param start_pos [Sass::Source::Position] - # @param end_pos [Sass::Source::Position] - def node(node, source_range_or_start_pos, end_pos = source_position) - source_range = - if source_range_or_start_pos.is_a?(Sass::Source::Range) - source_range_or_start_pos - else - range(source_range_or_start_pos, end_pos) - end - - node.line = source_range.start_pos.line - node.source_range = source_range - node.filename = @options[:filename] - node - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree.rb deleted file mode 100644 index 8bd4686..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree.rb +++ /dev/null @@ -1,16 +0,0 @@ -# The module containing nodes in the SassScript parse tree. These nodes are -# all subclasses of {Sass::Script::Tree::Node}. -module Sass::Script::Tree -end - -require 'sass/script/tree/node' -require 'sass/script/tree/variable' -require 'sass/script/tree/funcall' -require 'sass/script/tree/operation' -require 'sass/script/tree/unary_operation' -require 'sass/script/tree/interpolation' -require 'sass/script/tree/string_interpolation' -require 'sass/script/tree/literal' -require 'sass/script/tree/list_literal' -require 'sass/script/tree/map_literal' -require 'sass/script/tree/selector' diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/funcall.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/funcall.rb deleted file mode 100644 index 8a590dc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/funcall.rb +++ /dev/null @@ -1,306 +0,0 @@ -require 'sass/script/functions' -require 'sass/util/normalized_map' - -module Sass::Script::Tree - # A SassScript parse node representing a function call. - # - # A function call either calls one of the functions in - # {Sass::Script::Functions}, or if no function with the given name exists it - # returns a string representation of the function call. - class Funcall < Node - # The name of the function. - # - # @return [String] - attr_reader :name - - # The arguments to the function. - # - # @return [Array] - attr_reader :args - - # The keyword arguments to the function. - # - # @return [Sass::Util::NormalizedMap] - attr_reader :keywords - - # The first splat argument for this function, if one exists. - # - # This could be a list of positional arguments, a map of keyword - # arguments, or an arglist containing both. - # - # @return [Node?] - attr_accessor :splat - - # The second splat argument for this function, if one exists. - # - # If this exists, it's always a map of keyword arguments, and - # \{#splat} is always either a list or an arglist. - # - # @return [Node?] - attr_accessor :kwarg_splat - - # @param name [String] See \{#name} - # @param args [Array] See \{#args} - # @param keywords [Sass::Util::NormalizedMap] See \{#keywords} - # @param splat [Node] See \{#splat} - # @param kwarg_splat [Node] See \{#kwarg_splat} - def initialize(name, args, keywords, splat, kwarg_splat) - @name = name - @args = args - @keywords = keywords - @splat = splat - @kwarg_splat = kwarg_splat - super() - end - - # @return [String] A string representation of the function call - def inspect - args = @args.map {|a| a.inspect}.join(', ') - keywords = Sass::Util.hash_to_a(@keywords.as_stored). - map {|k, v| "$#{k}: #{v.inspect}"}.join(', ') - # rubocop:disable RedundantSelf - if self.splat - splat = args.empty? && keywords.empty? ? "" : ", " - splat = "#{splat}#{self.splat.inspect}..." - splat = "#{splat}, #{kwarg_splat.inspect}..." if kwarg_splat - end - # rubocop:enable RedundantSelf - "#{name}(#{args}#{', ' unless args.empty? || keywords.empty?}#{keywords}#{splat})" - end - - # @see Node#to_sass - def to_sass(opts = {}) - arg_to_sass = lambda do |arg| - sass = arg.to_sass(opts) - sass = "(#{sass})" if arg.is_a?(Sass::Script::Tree::ListLiteral) && arg.separator == :comma - sass - end - - args = @args.map(&arg_to_sass) - keywords = Sass::Util.hash_to_a(@keywords.as_stored). - map {|k, v| "$#{dasherize(k, opts)}: #{arg_to_sass[v]}"} - - # rubocop:disable RedundantSelf - if self.splat - splat = "#{arg_to_sass[self.splat]}..." - kwarg_splat = "#{arg_to_sass[self.kwarg_splat]}..." if self.kwarg_splat - end - # rubocop:enable RedundantSelf - - arglist = [args, splat, keywords, kwarg_splat].flatten.compact.join(', ') - "#{dasherize(name, opts)}(#{arglist})" - end - - # Returns the arguments to the function. - # - # @return [Array] - # @see Node#children - def children - res = @args + @keywords.values - res << @splat if @splat - res << @kwarg_splat if @kwarg_splat - res - end - - # @see Node#deep_copy - def deep_copy - node = dup - node.instance_variable_set('@args', args.map {|a| a.deep_copy}) - copied_keywords = Sass::Util::NormalizedMap.new - @keywords.as_stored.each {|k, v| copied_keywords[k] = v.deep_copy} - node.instance_variable_set('@keywords', copied_keywords) - node - end - - protected - - # Evaluates the function call. - # - # @param environment [Sass::Environment] The environment in which to evaluate the SassScript - # @return [Sass::Script::Value] The SassScript object that is the value of the function call - # @raise [Sass::SyntaxError] if the function call raises an ArgumentError - def _perform(environment) - args = Sass::Util.enum_with_index(@args). - map {|a, i| perform_arg(a, environment, signature && signature.args[i])} - keywords = Sass::Util.map_hash(@keywords) do |k, v| - [k, perform_arg(v, environment, k.tr('-', '_'))] - end - splat = Sass::Tree::Visitors::Perform.perform_splat( - @splat, keywords, @kwarg_splat, environment) - if (fn = environment.function(@name)) - return without_original(perform_sass_fn(fn, args, splat, environment)) - end - - args = construct_ruby_args(ruby_name, args, splat, environment) - - if Sass::Script::Functions.callable?(ruby_name) - local_environment = Sass::Environment.new(environment.global_env, environment.options) - local_environment.caller = Sass::ReadOnlyEnvironment.new(environment, environment.options) - result = opts(Sass::Script::Functions::EvaluationContext.new( - local_environment).send(ruby_name, *args)) - without_original(result) - else - opts(to_literal(args)) - end - rescue ArgumentError => e - reformat_argument_error(e) - end - - # Compass historically overrode this before it changed name to {Funcall#to_value}. - # We should get rid of it in the future. - def to_literal(args) - to_value(args) - end - - # This method is factored out from `_perform` so that compass can override - # it with a cross-browser implementation for functions that require vendor prefixes - # in the generated css. - def to_value(args) - Sass::Script::Value::String.new("#{name}(#{args.join(', ')})") - end - - private - - def ruby_name - @ruby_name ||= @name.tr('-', '_') - end - - def perform_arg(argument, environment, name) - return argument if signature && signature.delayed_args.include?(name) - argument.perform(environment) - end - - def signature - @signature ||= Sass::Script::Functions.signature(name.to_sym, @args.size, @keywords.size) - end - - def without_original(value) - return value unless value.is_a?(Sass::Script::Value::Number) - value = value.dup - value.original = nil - value - end - - def construct_ruby_args(name, args, splat, environment) - args += splat.to_a if splat - - # All keywords are contained in splat.keywords for consistency, - # even if there were no splats passed in. - old_keywords_accessed = splat.keywords_accessed - keywords = splat.keywords - splat.keywords_accessed = old_keywords_accessed - - unless (signature = Sass::Script::Functions.signature(name.to_sym, args.size, keywords.size)) - return args if keywords.empty? - raise Sass::SyntaxError.new("Function #{name} doesn't support keyword arguments") - end - - # If the user passes more non-keyword args than the function expects, - # but it does expect keyword args, Ruby's arg handling won't raise an error. - # Since we don't want to make functions think about this, - # we'll handle it for them here. - if signature.var_kwargs && !signature.var_args && args.size > signature.args.size - raise Sass::SyntaxError.new( - "#{args[signature.args.size].inspect} is not a keyword argument for `#{name}'") - elsif keywords.empty? - return args - end - - argnames = signature.args[args.size..-1] || [] - deprecated_argnames = (signature.deprecated && signature.deprecated[args.size..-1]) || [] - args = args + argnames.zip(deprecated_argnames).map do |(argname, deprecated_argname)| - if keywords.has_key?(argname) - keywords.delete(argname) - elsif deprecated_argname && keywords.has_key?(deprecated_argname) - deprecated_argname = keywords.denormalize(deprecated_argname) - Sass::Util.sass_warn("DEPRECATION WARNING: The `$#{deprecated_argname}' argument for " + - "`#{@name}()' has been renamed to `$#{argname}'.") - keywords.delete(deprecated_argname) - else - raise Sass::SyntaxError.new("Function #{name} requires an argument named $#{argname}") - end - end - - if keywords.size > 0 - if signature.var_kwargs - # Don't pass a NormalizedMap to a Ruby function. - args << keywords.to_hash - else - argname = keywords.keys.sort.first - if signature.args.include?(argname) - raise Sass::SyntaxError.new( - "Function #{name} was passed argument $#{argname} both by position and by name") - else - raise Sass::SyntaxError.new( - "Function #{name} doesn't have an argument named $#{argname}") - end - end - end - - args - end - - def perform_sass_fn(function, args, splat, environment) - Sass::Tree::Visitors::Perform.perform_arguments(function, args, splat, environment) do |env| - env.caller = Sass::Environment.new(environment) - - val = catch :_sass_return do - function.tree.each {|c| Sass::Tree::Visitors::Perform.visit(c, env)} - raise Sass::SyntaxError.new("Function #{@name} finished without @return") - end - val - end - end - - def reformat_argument_error(e) - message = e.message - - # If this is a legitimate Ruby-raised argument error, re-raise it. - # Otherwise, it's an error in the user's stylesheet, so wrap it. - if Sass::Util.rbx? - # Rubinius has a different error report string than vanilla Ruby. It - # also doesn't put the actual method for which the argument error was - # thrown in the backtrace, nor does it include `send`, so we look for - # `_perform`. - if e.message =~ /^method '([^']+)': given (\d+), expected (\d+)/ - error_name, given, expected = $1, $2, $3 - raise e if error_name != ruby_name || e.backtrace[0] !~ /:in `_perform'$/ - message = "wrong number of arguments (#{given} for #{expected})" - end - elsif Sass::Util.jruby? - if Sass::Util.jruby1_6? - should_maybe_raise = e.message =~ /^wrong number of arguments \((\d+) for (\d+)\)/ && - # The one case where JRuby does include the Ruby name of the function - # is manually-thrown ArgumentErrors, which are indistinguishable from - # legitimate ArgumentErrors. We treat both of these as - # Sass::SyntaxErrors even though it can hide Ruby errors. - e.backtrace[0] !~ /:in `(block in )?#{ruby_name}'$/ - else - should_maybe_raise = - e.message =~ /^wrong number of arguments calling `[^`]+` \((\d+) for (\d+)\)/ - given, expected = $1, $2 - end - - if should_maybe_raise - # JRuby 1.7 includes __send__ before send and _perform. - trace = e.backtrace.dup - raise e if !Sass::Util.jruby1_6? && trace.shift !~ /:in `__send__'$/ - - # JRuby (as of 1.7.2) doesn't put the actual method - # for which the argument error was thrown in the backtrace, so we - # detect whether our send threw an argument error. - if !(trace[0] =~ /:in `send'$/ && trace[1] =~ /:in `_perform'$/) - raise e - elsif !Sass::Util.jruby1_6? - # JRuby 1.7 doesn't use standard formatting for its ArgumentErrors. - message = "wrong number of arguments (#{given} for #{expected})" - end - end - elsif e.message =~ /^wrong number of arguments \(\d+ for \d+\)/ && - e.backtrace[0] !~ /:in `(block in )?#{ruby_name}'$/ - raise e - end - raise Sass::SyntaxError.new("#{message} for `#{name}'") - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/interpolation.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/interpolation.rb deleted file mode 100644 index e619df4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/interpolation.rb +++ /dev/null @@ -1,118 +0,0 @@ -module Sass::Script::Tree - # A SassScript object representing `#{}` interpolation outside a string. - # - # @see StringInterpolation - class Interpolation < Node - # @return [Node] The SassScript before the interpolation - attr_reader :before - - # @return [Node] The SassScript within the interpolation - attr_reader :mid - - # @return [Node] The SassScript after the interpolation - attr_reader :after - - # @return [Boolean] Whether there was whitespace between `before` and `#{` - attr_reader :whitespace_before - - # @return [Boolean] Whether there was whitespace between `}` and `after` - attr_reader :whitespace_after - - # @return [Boolean] Whether the original format of the interpolation was - # plain text, not an interpolation. This is used when converting back to - # SassScript. - attr_reader :originally_text - - # @return [Boolean] Whether a color value passed to the interpolation should - # generate a warning. - attr_reader :warn_for_color - - # Interpolation in a property is of the form `before #{mid} after`. - # - # @param before [Node] See {Interpolation#before} - # @param mid [Node] See {Interpolation#mid} - # @param after [Node] See {Interpolation#after} - # @param wb [Boolean] See {Interpolation#whitespace_before} - # @param wa [Boolean] See {Interpolation#whitespace_after} - # @param originally_text [Boolean] See {Interpolation#originally_text} - # @param warn_for_color [Boolean] See {Interpolation#warn_for_color} - # @comment - # rubocop:disable ParameterLists - def initialize(before, mid, after, wb, wa, originally_text = false, warn_for_color = false) - # rubocop:enable ParameterLists - @before = before - @mid = mid - @after = after - @whitespace_before = wb - @whitespace_after = wa - @originally_text = originally_text - @warn_for_color = warn_for_color - end - - # @return [String] A human-readable s-expression representation of the interpolation - def inspect - "(interpolation #{@before.inspect} #{@mid.inspect} #{@after.inspect})" - end - - # @see Node#to_sass - def to_sass(opts = {}) - res = "" - res << @before.to_sass(opts) if @before - res << ' ' if @before && @whitespace_before - res << '#{' unless @originally_text - res << @mid.to_sass(opts) - res << '}' unless @originally_text - res << ' ' if @after && @whitespace_after - res << @after.to_sass(opts) if @after - res - end - - # Returns the three components of the interpolation, `before`, `mid`, and `after`. - # - # @return [Array] - # @see #initialize - # @see Node#children - def children - [@before, @mid, @after].compact - end - - # @see Node#deep_copy - def deep_copy - node = dup - node.instance_variable_set('@before', @before.deep_copy) if @before - node.instance_variable_set('@mid', @mid.deep_copy) - node.instance_variable_set('@after', @after.deep_copy) if @after - node - end - - protected - - # Evaluates the interpolation. - # - # @param environment [Sass::Environment] The environment in which to evaluate the SassScript - # @return [Sass::Script::Value::String] - # The SassScript string that is the value of the interpolation - def _perform(environment) - res = "" - res << @before.perform(environment).to_s if @before - res << " " if @before && @whitespace_before - - val = @mid.perform(environment) - if @warn_for_color && val.is_a?(Sass::Script::Value::Color) && val.name - alternative = Operation.new(Sass::Script::Value::String.new("", :string), @mid, :plus) - Sass::Util.sass_warn < :none) - res << " " if @after && @whitespace_after - res << @after.perform(environment).to_s if @after - opts(Sass::Script::Value::String.new(res)) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/list_literal.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/list_literal.rb deleted file mode 100644 index eaf3ed7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/list_literal.rb +++ /dev/null @@ -1,78 +0,0 @@ -module Sass::Script::Tree - # A parse tree node representing a list literal. When resolved, this returns a - # {Sass::Tree::Value::List}. - class ListLiteral < Node - # The parse nodes for members of this list. - # - # @return [Array] - attr_reader :elements - - # The operator separating the values of the list. Either `:comma` or - # `:space`. - # - # @return [Symbol] - attr_reader :separator - - # Creates a new list literal. - # - # @param elements [Array] See \{#elements} - # @param separator [Symbol] See \{#separator} - def initialize(elements, separator) - @elements = elements - @separator = separator - end - - # @see Node#children - def children; elements; end - - # @see Value#to_sass - def to_sass(opts = {}) - return "()" if elements.empty? - precedence = Sass::Script::Parser.precedence_of(separator) - members = elements.map do |v| - if v.is_a?(ListLiteral) && Sass::Script::Parser.precedence_of(v.separator) <= precedence || - separator == :space && v.is_a?(UnaryOperation) && - (v.operator == :minus || v.operator == :plus) || - separator == :space && v.is_a?(Operation) - "(#{v.to_sass(opts)})" - else - v.to_sass(opts) - end - end - - return "(#{members.first},)" if separator == :comma && members.length == 1 - - members.join(sep_str(nil)) - end - - # @see Node#deep_copy - def deep_copy - node = dup - node.instance_variable_set('@elements', elements.map {|e| e.deep_copy}) - node - end - - def inspect - "(#{elements.map {|e| e.inspect}.join(separator == :space ? ' ' : ', ')})" - end - - protected - - def _perform(environment) - list = Sass::Script::Value::List.new( - elements.map {|e| e.perform(environment)}, - separator) - list.source_range = source_range - list.options = options - list - end - - private - - def sep_str(opts = options) - return ' ' if separator == :space - return ',' if opts && opts[:style] == :compressed - ', ' - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/literal.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/literal.rb deleted file mode 100644 index 4dd3ca0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/literal.rb +++ /dev/null @@ -1,45 +0,0 @@ -module Sass::Script::Tree - # The parse tree node for a literal scalar value. This wraps an instance of - # {Sass::Script::Value::Base}. - # - # List literals should use {ListLiteral} instead. - class Literal < Node - # The wrapped value. - # - # @return [Sass::Script::Value::Base] - attr_reader :value - - # Creates a new literal value. - # - # @param value [Sass::Script::Value::Base] - # @see #value - def initialize(value) - @value = value - end - - # @see Node#children - def children; []; end - - # @see Node#to_sass - def to_sass(opts = {}); value.to_sass(opts); end - - # @see Node#deep_copy - def deep_copy; dup; end - - # @see Node#options= - def options=(options) - value.options = options - end - - def inspect - value.inspect - end - - protected - - def _perform(environment) - value.source_range = source_range - value - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/map_literal.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/map_literal.rb deleted file mode 100644 index a2f8856..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/map_literal.rb +++ /dev/null @@ -1,64 +0,0 @@ -module Sass::Script::Tree - # A class representing a map literal. When resolved, this returns a - # {Sass::Script::Node::Map}. - class MapLiteral < Node - # The key/value pairs that make up this map node. This isn't a Hash so that - # we can detect key collisions once all the keys have been performed. - # - # @return [Array<(Node, Node)>] - attr_reader :pairs - - # Creates a new map literal. - # - # @param pairs [Array<(Node, Node)>] See \{#pairs} - def initialize(pairs) - @pairs = pairs - end - - # @see Node#children - def children - @pairs.flatten - end - - # @see Node#to_sass - def to_sass(opts = {}) - return "()" if pairs.empty? - - to_sass = lambda do |value| - if value.is_a?(ListLiteral) && value.separator == :comma - "(#{value.to_sass(opts)})" - else - value.to_sass(opts) - end - end - - "(" + pairs.map {|(k, v)| "#{to_sass[k]}: #{to_sass[v]}"}.join(', ') + ")" - end - alias_method :inspect, :to_sass - - # @see Node#deep_copy - def deep_copy - node = dup - node.instance_variable_set('@pairs', - pairs.map {|(k, v)| [k.deep_copy, v.deep_copy]}) - node - end - - protected - - # @see Node#_perform - def _perform(environment) - keys = Set.new - map = Sass::Script::Value::Map.new(Sass::Util.to_hash(pairs.map do |(k, v)| - k, v = k.perform(environment), v.perform(environment) - if keys.include?(k) - raise Sass::SyntaxError.new("Duplicate key #{k.inspect} in map #{to_sass}.") - end - keys << k - [k, v] - end)) - map.options = options - map - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/node.rb deleted file mode 100644 index 953e121..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/node.rb +++ /dev/null @@ -1,109 +0,0 @@ -module Sass::Script::Tree - # The abstract superclass for SassScript parse tree nodes. - # - # Use \{#perform} to evaluate a parse tree. - class Node - # The options hash for this node. - # - # @return [{Symbol => Object}] - attr_reader :options - - # The line of the document on which this node appeared. - # - # @return [Fixnum] - attr_accessor :line - - # The source range in the document on which this node appeared. - # - # @return [Sass::Source::Range] - attr_accessor :source_range - - # The file name of the document on which this node appeared. - # - # @return [String] - attr_accessor :filename - - # Sets the options hash for this node, - # as well as for all child nodes. - # See {file:SASS_REFERENCE.md#sass_options the Sass options documentation}. - # - # @param options [{Symbol => Object}] The options - def options=(options) - @options = options - children.each do |c| - if c.is_a? Hash - c.values.each {|v| v.options = options} - else - c.options = options - end - end - end - - # Evaluates the node. - # - # \{#perform} shouldn't be overridden directly; - # instead, override \{#\_perform}. - # - # @param environment [Sass::Environment] The environment in which to evaluate the SassScript - # @return [Sass::Script::Value] The SassScript object that is the value of the SassScript - def perform(environment) - _perform(environment) - rescue Sass::SyntaxError => e - e.modify_backtrace(:line => line) - raise e - end - - # Returns all child nodes of this node. - # - # @return [Array] - def children - Sass::Util.abstract(self) - end - - # Returns the text of this SassScript expression. - # - # @return [String] - def to_sass(opts = {}) - Sass::Util.abstract(self) - end - - # Returns a deep clone of this node. - # The child nodes are cloned, but options are not. - # - # @return [Node] - def deep_copy - Sass::Util.abstract(self) - end - - protected - - # Converts underscores to dashes if the :dasherize option is set. - def dasherize(s, opts) - if opts[:dasherize] - s.gsub(/_/, '-') - else - s - end - end - - # Evaluates this node. - # Note that all {Sass::Script::Value} objects created within this method - # should have their \{#options} attribute set, probably via \{#opts}. - # - # @param environment [Sass::Environment] The environment in which to evaluate the SassScript - # @return [Sass::Script::Value] The SassScript object that is the value of the SassScript - # @see #perform - def _perform(environment) - Sass::Util.abstract(self) - end - - # Sets the \{#options} field on the given value and returns it. - # - # @param value [Sass::Script::Value] - # @return [Sass::Script::Value] - def opts(value) - value.options = options - value - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/operation.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/operation.rb deleted file mode 100644 index 859bb45..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/operation.rb +++ /dev/null @@ -1,115 +0,0 @@ -module Sass::Script::Tree - # A SassScript parse node representing a binary operation, - # such as `$a + $b` or `"foo" + 1`. - class Operation < Node - attr_reader :operand1 - attr_reader :operand2 - attr_reader :operator - - # @param operand1 [Sass::Script::Tree::Node] The parse-tree node - # for the right-hand side of the operator - # @param operand2 [Sass::Script::Tree::Node] The parse-tree node - # for the left-hand side of the operator - # @param operator [Symbol] The operator to perform. - # This should be one of the binary operator names in {Sass::Script::Lexer::OPERATORS} - def initialize(operand1, operand2, operator) - @operand1 = operand1 - @operand2 = operand2 - @operator = operator - super() - end - - # @return [String] A human-readable s-expression representation of the operation - def inspect - "(#{@operator.inspect} #{@operand1.inspect} #{@operand2.inspect})" - end - - # @see Node#to_sass - def to_sass(opts = {}) - o1 = operand_to_sass @operand1, :left, opts - o2 = operand_to_sass @operand2, :right, opts - sep = - case @operator - when :comma; ", " - when :space; " " - else; " #{Sass::Script::Lexer::OPERATORS_REVERSE[@operator]} " - end - "#{o1}#{sep}#{o2}" - end - - # Returns the operands for this operation. - # - # @return [Array] - # @see Node#children - def children - [@operand1, @operand2] - end - - # @see Node#deep_copy - def deep_copy - node = dup - node.instance_variable_set('@operand1', @operand1.deep_copy) - node.instance_variable_set('@operand2', @operand2.deep_copy) - node - end - - protected - - # Evaluates the operation. - # - # @param environment [Sass::Environment] The environment in which to evaluate the SassScript - # @return [Sass::Script::Value] The SassScript object that is the value of the operation - # @raise [Sass::SyntaxError] if the operation is undefined for the operands - def _perform(environment) - value1 = @operand1.perform(environment) - - # Special-case :and and :or to support short-circuiting. - if @operator == :and - return value1.to_bool ? @operand2.perform(environment) : value1 - elsif @operator == :or - return value1.to_bool ? value1 : @operand2.perform(environment) - end - - value2 = @operand2.perform(environment) - - if (value1.is_a?(Sass::Script::Value::Null) || value2.is_a?(Sass::Script::Value::Null)) && - @operator != :eq && @operator != :neq - raise Sass::SyntaxError.new( - "Invalid null operation: \"#{value1.inspect} #{@operator} #{value2.inspect}\".") - end - - begin - result = opts(value1.send(@operator, value2)) - rescue NoMethodError => e - raise e unless e.name.to_s == @operator.to_s - raise Sass::SyntaxError.new("Undefined operation: \"#{value1} #{@operator} #{value2}\".") - end - - if @operator == :eq && value1.is_a?(Sass::Script::Value::Number) && - value2.is_a?(Sass::Script::Value::Number) && result == Sass::Script::Value::Bool::TRUE && - value1.unitless? != value2.unitless? - Sass::Util.sass_warn <] - # @see #initialize - # @see Node#children - def children - [@before, @mid, @after].compact - end - - # @see Node#deep_copy - def deep_copy - node = dup - node.instance_variable_set('@before', @before.deep_copy) if @before - node.instance_variable_set('@mid', @mid.deep_copy) - node.instance_variable_set('@after', @after.deep_copy) if @after - node - end - - protected - - # Evaluates the interpolation. - # - # @param environment [Sass::Environment] The environment in which to evaluate the SassScript - # @return [Sass::Script::Value::String] - # The SassScript string that is the value of the interpolation - def _perform(environment) - res = "" - before = @before.perform(environment) - res << before.value - mid = @mid.perform(environment) - res << (mid.is_a?(Sass::Script::Value::String) ? mid.value : mid.to_s(:quote => :none)) - res << @after.perform(environment).value - opts(Sass::Script::Value::String.new(res, before.type)) - end - - private - - def parse_str(str) - case str - when /^unquote\((["'])(.*)\1\)$/ - return true, $1, $2 - when '""' - return false, nil, "" - when /^(["'])(.*)\1$/ - return false, $1, $2 - else - return false, nil, str - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/unary_operation.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/unary_operation.rb deleted file mode 100644 index b32da08..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/unary_operation.rb +++ /dev/null @@ -1,69 +0,0 @@ -module Sass::Script::Tree - # A SassScript parse node representing a unary operation, - # such as `-$b` or `not true`. - # - # Currently only `-`, `/`, and `not` are unary operators. - class UnaryOperation < Node - # @return [Symbol] The operation to perform - attr_reader :operator - - # @return [Script::Node] The parse-tree node for the object of the operator - attr_reader :operand - - # @param operand [Script::Node] See \{#operand} - # @param operator [Symbol] See \{#operator} - def initialize(operand, operator) - @operand = operand - @operator = operator - super() - end - - # @return [String] A human-readable s-expression representation of the operation - def inspect - "(#{@operator.inspect} #{@operand.inspect})" - end - - # @see Node#to_sass - def to_sass(opts = {}) - operand = @operand.to_sass(opts) - if @operand.is_a?(Operation) || - (@operator == :minus && - (operand =~ Sass::SCSS::RX::IDENT) == 0) - operand = "(#{@operand.to_sass(opts)})" - end - op = Sass::Script::Lexer::OPERATORS_REVERSE[@operator] - op + (op =~ /[a-z]/ ? " " : "") + operand - end - - # Returns the operand of the operation. - # - # @return [Array] - # @see Node#children - def children - [@operand] - end - - # @see Node#deep_copy - def deep_copy - node = dup - node.instance_variable_set('@operand', @operand.deep_copy) - node - end - - protected - - # Evaluates the operation. - # - # @param environment [Sass::Environment] The environment in which to evaluate the SassScript - # @return [Sass::Script::Value] The SassScript object that is the value of the operation - # @raise [Sass::SyntaxError] if the operation is undefined for the operand - def _perform(environment) - operator = "unary_#{@operator}" - value = @operand.perform(environment) - value.send(operator) - rescue NoMethodError => e - raise e unless e.name.to_s == operator.to_s - raise Sass::SyntaxError.new("Undefined unary operation: \"#{@operator} #{value}\".") - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/variable.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/variable.rb deleted file mode 100644 index 3480db5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/tree/variable.rb +++ /dev/null @@ -1,57 +0,0 @@ -module Sass::Script::Tree - # A SassScript parse node representing a variable. - class Variable < Node - # The name of the variable. - # - # @return [String] - attr_reader :name - - # The underscored name of the variable. - # - # @return [String] - attr_reader :underscored_name - - # @param name [String] See \{#name} - def initialize(name) - @name = name - @underscored_name = name.gsub(/-/, "_") - super() - end - - # @return [String] A string representation of the variable - def inspect(opts = {}) - "$#{dasherize(name, opts)}" - end - alias_method :to_sass, :inspect - - # Returns an empty array. - # - # @return [Array] empty - # @see Node#children - def children - [] - end - - # @see Node#deep_copy - def deep_copy - dup - end - - protected - - # Evaluates the variable. - # - # @param environment [Sass::Environment] The environment in which to evaluate the SassScript - # @return [Sass::Script::Value] The SassScript object that is the value of the variable - # @raise [Sass::SyntaxError] if the variable is undefined - def _perform(environment) - val = environment.var(name) - raise Sass::SyntaxError.new("Undefined variable: \"$#{name}\".") unless val - if val.is_a?(Sass::Script::Value::Number) && val.original - val = val.dup - val.original = nil - end - val - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value.rb deleted file mode 100644 index 0842b58..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value.rb +++ /dev/null @@ -1,11 +0,0 @@ -module Sass::Script::Value; end - -require 'sass/script/value/base' -require 'sass/script/value/string' -require 'sass/script/value/number' -require 'sass/script/value/color' -require 'sass/script/value/bool' -require 'sass/script/value/null' -require 'sass/script/value/list' -require 'sass/script/value/arg_list' -require 'sass/script/value/map' diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/arg_list.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/arg_list.rb deleted file mode 100644 index 2b09882..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/arg_list.rb +++ /dev/null @@ -1,36 +0,0 @@ -module Sass::Script::Value - # A SassScript object representing a variable argument list. This works just - # like a normal list, but can also contain keyword arguments. - # - # The keyword arguments attached to this list are unused except when this is - # passed as a glob argument to a function or mixin. - class ArgList < List - # Whether \{#keywords} has been accessed. If so, we assume that all keywords - # were valid for the function that created this ArgList. - # - # @return [Boolean] - attr_accessor :keywords_accessed - - # Creates a new argument list. - # - # @param value [Array] See \{List#value}. - # @param keywords [Hash, NormalizedMap] See \{#keywords} - # @param separator [String] See \{List#separator}. - def initialize(value, keywords, separator) - super(value, separator) - if keywords.is_a?(Sass::Util::NormalizedMap) - @keywords = keywords - else - @keywords = Sass::Util::NormalizedMap.new(keywords) - end - end - - # The keyword arguments attached to this list. - # - # @return [NormalizedMap] - def keywords - @keywords_accessed = true - @keywords - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/base.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/base.rb deleted file mode 100644 index 4cdcbed..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/base.rb +++ /dev/null @@ -1,240 +0,0 @@ -module Sass::Script::Value - # The abstract superclass for SassScript objects. - # - # Many of these methods, especially the ones that correspond to SassScript operations, - # are designed to be overridden by subclasses which may change the semantics somewhat. - # The operations listed here are just the defaults. - class Base - # Returns the Ruby value of the value. - # The type of this value varies based on the subclass. - # - # @return [Object] - attr_reader :value - - # The source range in the document on which this node appeared. - # - # @return [Sass::Source::Range] - attr_accessor :source_range - - # Creates a new value. - # - # @param value [Object] The object for \{#value} - def initialize(value = nil) - value.freeze unless value.nil? || value == true || value == false - @value = value - end - - # Sets the options hash for this node, - # as well as for all child nodes. - # See {file:SASS_REFERENCE.md#sass_options the Sass options documentation}. - # - # @param options [{Symbol => Object}] The options - attr_writer :options - - # Returns the options hash for this node. - # - # @return [{Symbol => Object}] - # @raise [Sass::SyntaxError] if the options hash hasn't been set. - # This should only happen when the value was created - # outside of the parser and \{#to\_s} was called on it - def options - return @options if @options - raise Sass::SyntaxError.new(< :none) + other.to_s(:quote => :none), type) - end - - # The SassScript `-` operation. - # - # @param other [Value] The right-hand side of the operator - # @return [Script::Value::String] A string containing both values - # separated by `"-"` - def minus(other) - Sass::Script::Value::String.new("#{to_s}-#{other.to_s}") - end - - # The SassScript `/` operation. - # - # @param other [Value] The right-hand side of the operator - # @return [Script::Value::String] A string containing both values - # separated by `"/"` - def div(other) - Sass::Script::Value::String.new("#{to_s}/#{other.to_s}") - end - - # The SassScript unary `+` operation (e.g. `+$a`). - # - # @param other [Value] The right-hand side of the operator - # @return [Script::Value::String] A string containing the value - # preceded by `"+"` - def unary_plus - Sass::Script::Value::String.new("+#{to_s}") - end - - # The SassScript unary `-` operation (e.g. `-$a`). - # - # @param other [Value] The right-hand side of the operator - # @return [Script::Value::String] A string containing the value - # preceded by `"-"` - def unary_minus - Sass::Script::Value::String.new("-#{to_s}") - end - - # The SassScript unary `/` operation (e.g. `/$a`). - # - # @param other [Value] The right-hand side of the operator - # @return [Script::Value::String] A string containing the value - # preceded by `"/"` - def unary_div - Sass::Script::Value::String.new("/#{to_s}") - end - - # Returns the hash code of this value. Two objects' hash codes should be - # equal if the objects are equal. - # - # @return [Fixnum] The hash code. - def hash - value.hash - end - - def eql?(other) - self == other - end - - # @return [String] A readable representation of the value - def inspect - value.inspect - end - - # @return [Boolean] `true` (the Ruby boolean value) - def to_bool - true - end - - # Compares this object with another. - # - # @param other [Object] The object to compare with - # @return [Boolean] Whether or not this value is equivalent to `other` - def ==(other) - eq(other).to_bool - end - - # @return [Fixnum] The integer value of this value - # @raise [Sass::SyntaxError] if this value isn't an integer - def to_i - raise Sass::SyntaxError.new("#{inspect} is not an integer.") - end - - # @raise [Sass::SyntaxError] if this value isn't an integer - def assert_int!; to_i; end - - # Returns the separator for this value. For non-list-like values or the - # empty list, this will be `nil`. For lists or maps, it will be `:space` or - # `:comma`. - # - # @return [Symbol] - def separator; nil; end - - # Returns the value of this value as a list. - # Single values are considered the same as single-element lists. - # - # @return [Array] This value as a list - def to_a - [self] - end - - # Returns the value of this value as a hash. Most values don't have hash - # representations, but [Map]s and empty [List]s do. - # - # @return [Hash] This value as a hash - # @raise [Sass::SyntaxError] if this value doesn't have a hash representation - def to_h - raise Sass::SyntaxError.new("#{inspect} is not a map.") - end - - # Returns the string representation of this value - # as it would be output to the CSS document. - # - # @options opts :quote [String] - # The preferred quote style for quoted strings. If `:none`, strings are - # always emitted unquoted. - # @return [String] - def to_s(opts = {}) - Sass::Util.abstract(self) - end - alias_method :to_sass, :to_s - - # Returns whether or not this object is null. - # - # @return [Boolean] `false` - def null? - false - end - - protected - - # Evaluates the value. - # - # @param environment [Sass::Environment] The environment in which to evaluate the SassScript - # @return [Value] This value - def _perform(environment) - self - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/bool.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/bool.rb deleted file mode 100644 index fd1789b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/bool.rb +++ /dev/null @@ -1,35 +0,0 @@ -module Sass::Script::Value - # A SassScript object representing a boolean (true or false) value. - class Bool < Base - # The true value in SassScript. - # - # This is assigned before new is overridden below so that we use the default implementation. - TRUE = new(true) - - # The false value in SassScript. - # - # This is assigned before new is overridden below so that we use the default implementation. - FALSE = new(false) - - # We override object creation so that users of the core API - # will not need to know that booleans are specific constants. - # - # @param value A ruby value that will be tested for truthiness. - # @return [Bool] TRUE if value is truthy, FALSE if value is falsey - def self.new(value) - value ? TRUE : FALSE - end - - # The Ruby value of the boolean. - # - # @return [Boolean] - attr_reader :value - alias_method :to_bool, :value - - # @return [String] "true" or "false" - def to_s(opts = {}) - @value.to_s - end - alias_method :to_sass, :to_s - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/color.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/color.rb deleted file mode 100644 index 9bedcd4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/color.rb +++ /dev/null @@ -1,680 +0,0 @@ -module Sass::Script::Value - # A SassScript object representing a CSS color. - # - # A color may be represented internally as RGBA, HSLA, or both. - # It's originally represented as whatever its input is; - # if it's created with RGB values, it's represented as RGBA, - # and if it's created with HSL values, it's represented as HSLA. - # Once a property is accessed that requires the other representation -- - # for example, \{#red} for an HSL color -- - # that component is calculated and cached. - # - # The alpha channel of a color is independent of its RGB or HSL representation. - # It's always stored, as 1 if nothing else is specified. - # If only the alpha channel is modified using \{#with}, - # the cached RGB and HSL values are retained. - class Color < Base - # @private - # - # Convert a ruby integer to a rgba components - # @param color [Fixnum] - # @return [Array] Array of 4 numbers representing r,g,b and alpha - def self.int_to_rgba(color) - rgba = (0..3).map {|n| color >> (n << 3) & 0xff}.reverse - rgba[-1] = rgba[-1] / 255.0 - rgba - end - - ALTERNATE_COLOR_NAMES = Sass::Util.map_vals({ - 'aqua' => 0x00FFFFFF, - 'darkgrey' => 0xA9A9A9FF, - 'darkslategrey' => 0x2F4F4FFF, - 'dimgrey' => 0x696969FF, - 'fuchsia' => 0xFF00FFFF, - 'grey' => 0x808080FF, - 'lightgrey' => 0xD3D3D3FF, - 'lightslategrey' => 0x778899FF, - 'slategrey' => 0x708090FF, - }, &method(:int_to_rgba)) - - # A hash from color names to `[red, green, blue]` value arrays. - COLOR_NAMES = Sass::Util.map_vals({ - 'aliceblue' => 0xF0F8FFFF, - 'antiquewhite' => 0xFAEBD7FF, - 'aquamarine' => 0x7FFFD4FF, - 'azure' => 0xF0FFFFFF, - 'beige' => 0xF5F5DCFF, - 'bisque' => 0xFFE4C4FF, - 'black' => 0x000000FF, - 'blanchedalmond' => 0xFFEBCDFF, - 'blue' => 0x0000FFFF, - 'blueviolet' => 0x8A2BE2FF, - 'brown' => 0xA52A2AFF, - 'burlywood' => 0xDEB887FF, - 'cadetblue' => 0x5F9EA0FF, - 'chartreuse' => 0x7FFF00FF, - 'chocolate' => 0xD2691EFF, - 'coral' => 0xFF7F50FF, - 'cornflowerblue' => 0x6495EDFF, - 'cornsilk' => 0xFFF8DCFF, - 'crimson' => 0xDC143CFF, - 'cyan' => 0x00FFFFFF, - 'darkblue' => 0x00008BFF, - 'darkcyan' => 0x008B8BFF, - 'darkgoldenrod' => 0xB8860BFF, - 'darkgray' => 0xA9A9A9FF, - 'darkgreen' => 0x006400FF, - 'darkkhaki' => 0xBDB76BFF, - 'darkmagenta' => 0x8B008BFF, - 'darkolivegreen' => 0x556B2FFF, - 'darkorange' => 0xFF8C00FF, - 'darkorchid' => 0x9932CCFF, - 'darkred' => 0x8B0000FF, - 'darksalmon' => 0xE9967AFF, - 'darkseagreen' => 0x8FBC8FFF, - 'darkslateblue' => 0x483D8BFF, - 'darkslategray' => 0x2F4F4FFF, - 'darkturquoise' => 0x00CED1FF, - 'darkviolet' => 0x9400D3FF, - 'deeppink' => 0xFF1493FF, - 'deepskyblue' => 0x00BFFFFF, - 'dimgray' => 0x696969FF, - 'dodgerblue' => 0x1E90FFFF, - 'firebrick' => 0xB22222FF, - 'floralwhite' => 0xFFFAF0FF, - 'forestgreen' => 0x228B22FF, - 'gainsboro' => 0xDCDCDCFF, - 'ghostwhite' => 0xF8F8FFFF, - 'gold' => 0xFFD700FF, - 'goldenrod' => 0xDAA520FF, - 'gray' => 0x808080FF, - 'green' => 0x008000FF, - 'greenyellow' => 0xADFF2FFF, - 'honeydew' => 0xF0FFF0FF, - 'hotpink' => 0xFF69B4FF, - 'indianred' => 0xCD5C5CFF, - 'indigo' => 0x4B0082FF, - 'ivory' => 0xFFFFF0FF, - 'khaki' => 0xF0E68CFF, - 'lavender' => 0xE6E6FAFF, - 'lavenderblush' => 0xFFF0F5FF, - 'lawngreen' => 0x7CFC00FF, - 'lemonchiffon' => 0xFFFACDFF, - 'lightblue' => 0xADD8E6FF, - 'lightcoral' => 0xF08080FF, - 'lightcyan' => 0xE0FFFFFF, - 'lightgoldenrodyellow' => 0xFAFAD2FF, - 'lightgreen' => 0x90EE90FF, - 'lightgray' => 0xD3D3D3FF, - 'lightpink' => 0xFFB6C1FF, - 'lightsalmon' => 0xFFA07AFF, - 'lightseagreen' => 0x20B2AAFF, - 'lightskyblue' => 0x87CEFAFF, - 'lightslategray' => 0x778899FF, - 'lightsteelblue' => 0xB0C4DEFF, - 'lightyellow' => 0xFFFFE0FF, - 'lime' => 0x00FF00FF, - 'limegreen' => 0x32CD32FF, - 'linen' => 0xFAF0E6FF, - 'magenta' => 0xFF00FFFF, - 'maroon' => 0x800000FF, - 'mediumaquamarine' => 0x66CDAAFF, - 'mediumblue' => 0x0000CDFF, - 'mediumorchid' => 0xBA55D3FF, - 'mediumpurple' => 0x9370DBFF, - 'mediumseagreen' => 0x3CB371FF, - 'mediumslateblue' => 0x7B68EEFF, - 'mediumspringgreen' => 0x00FA9AFF, - 'mediumturquoise' => 0x48D1CCFF, - 'mediumvioletred' => 0xC71585FF, - 'midnightblue' => 0x191970FF, - 'mintcream' => 0xF5FFFAFF, - 'mistyrose' => 0xFFE4E1FF, - 'moccasin' => 0xFFE4B5FF, - 'navajowhite' => 0xFFDEADFF, - 'navy' => 0x000080FF, - 'oldlace' => 0xFDF5E6FF, - 'olive' => 0x808000FF, - 'olivedrab' => 0x6B8E23FF, - 'orange' => 0xFFA500FF, - 'orangered' => 0xFF4500FF, - 'orchid' => 0xDA70D6FF, - 'palegoldenrod' => 0xEEE8AAFF, - 'palegreen' => 0x98FB98FF, - 'paleturquoise' => 0xAFEEEEFF, - 'palevioletred' => 0xDB7093FF, - 'papayawhip' => 0xFFEFD5FF, - 'peachpuff' => 0xFFDAB9FF, - 'peru' => 0xCD853FFF, - 'pink' => 0xFFC0CBFF, - 'plum' => 0xDDA0DDFF, - 'powderblue' => 0xB0E0E6FF, - 'purple' => 0x800080FF, - 'red' => 0xFF0000FF, - 'rebeccapurple' => 0x663399FF, - 'rosybrown' => 0xBC8F8FFF, - 'royalblue' => 0x4169E1FF, - 'saddlebrown' => 0x8B4513FF, - 'salmon' => 0xFA8072FF, - 'sandybrown' => 0xF4A460FF, - 'seagreen' => 0x2E8B57FF, - 'seashell' => 0xFFF5EEFF, - 'sienna' => 0xA0522DFF, - 'silver' => 0xC0C0C0FF, - 'skyblue' => 0x87CEEBFF, - 'slateblue' => 0x6A5ACDFF, - 'slategray' => 0x708090FF, - 'snow' => 0xFFFAFAFF, - 'springgreen' => 0x00FF7FFF, - 'steelblue' => 0x4682B4FF, - 'tan' => 0xD2B48CFF, - 'teal' => 0x008080FF, - 'thistle' => 0xD8BFD8FF, - 'tomato' => 0xFF6347FF, - 'transparent' => 0x00000000, - 'turquoise' => 0x40E0D0FF, - 'violet' => 0xEE82EEFF, - 'wheat' => 0xF5DEB3FF, - 'white' => 0xFFFFFFFF, - 'whitesmoke' => 0xF5F5F5FF, - 'yellow' => 0xFFFF00FF, - 'yellowgreen' => 0x9ACD32FF - }, &method(:int_to_rgba)) - - # A hash from `[red, green, blue, alpha]` value arrays to color names. - COLOR_NAMES_REVERSE = COLOR_NAMES.invert.freeze - - # We add the alternate color names after inverting because - # different ruby implementations and versions vary on the ordering of the result of invert. - COLOR_NAMES.update(ALTERNATE_COLOR_NAMES).freeze - - # The user's original representation of the color. - # - # @return [String] - attr_reader :representation - - # Constructs an RGB or HSL color object, - # optionally with an alpha channel. - # - # RGB values are clipped within 0 and 255. - # Saturation and lightness values are clipped within 0 and 100. - # The alpha value is clipped within 0 and 1. - # - # @raise [Sass::SyntaxError] if any color value isn't in the specified range - # - # @overload initialize(attrs) - # The attributes are specified as a hash. This hash must contain either - # `:hue`, `:saturation`, and `:lightness` keys, or `:red`, `:green`, and - # `:blue` keys. It cannot contain both HSL and RGB keys. It may also - # optionally contain an `:alpha` key, and a `:representation` key - # indicating the original representation of the color that the user wrote - # in their stylesheet. - # - # @param attrs [{Symbol => Numeric}] A hash of color attributes to values - # @raise [ArgumentError] if not enough attributes are specified, - # or both RGB and HSL attributes are specified - # - # @overload initialize(rgba, [representation]) - # The attributes are specified as an array. - # This overload only supports RGB or RGBA colors. - # - # @param rgba [Array] A three- or four-element array - # of the red, green, blue, and optionally alpha values (respectively) - # of the color - # @param representation [String] The original representation of the color - # that the user wrote in their stylesheet. - # @raise [ArgumentError] if not enough attributes are specified - def initialize(attrs, representation = nil, allow_both_rgb_and_hsl = false) - super(nil) - - if attrs.is_a?(Array) - unless (3..4).include?(attrs.size) - raise ArgumentError.new("Color.new(array) expects a three- or four-element array") - end - - red, green, blue = attrs[0...3].map {|c| c.to_i} - @attrs = {:red => red, :green => green, :blue => blue} - @attrs[:alpha] = attrs[3] ? attrs[3].to_f : 1 - @representation = representation - else - attrs = attrs.reject {|k, v| v.nil?} - hsl = [:hue, :saturation, :lightness] & attrs.keys - rgb = [:red, :green, :blue] & attrs.keys - if !allow_both_rgb_and_hsl && !hsl.empty? && !rgb.empty? - raise ArgumentError.new("Color.new(hash) may not have both HSL and RGB keys specified") - elsif hsl.empty? && rgb.empty? - raise ArgumentError.new("Color.new(hash) must have either HSL or RGB keys specified") - elsif !hsl.empty? && hsl.size != 3 - raise ArgumentError.new("Color.new(hash) must have all three HSL values specified") - elsif !rgb.empty? && rgb.size != 3 - raise ArgumentError.new("Color.new(hash) must have all three RGB values specified") - end - - @attrs = attrs - @attrs[:hue] %= 360 if @attrs[:hue] - @attrs[:alpha] ||= 1 - @representation = @attrs.delete(:representation) - end - - [:red, :green, :blue].each do |k| - next if @attrs[k].nil? - @attrs[k] = Sass::Util.restrict(@attrs[k].to_i, 0..255) - end - - [:saturation, :lightness].each do |k| - next if @attrs[k].nil? - @attrs[k] = Sass::Util.restrict(@attrs[k], 0..100) - end - - @attrs[:alpha] = Sass::Util.restrict(@attrs[:alpha], 0..1) - end - - # Create a new color from a valid CSS hex string. - # - # The leading hash is optional. - # - # @return [Color] - def self.from_hex(hex_string, alpha = nil) - unless hex_string =~ /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i || - hex_string =~ /^#?([0-9a-f])([0-9a-f])([0-9a-f])$/i - raise ArgumentError.new("#{hex_string.inspect} is not a valid hex color.") - end - red = $1.ljust(2, $1).to_i(16) - green = $2.ljust(2, $2).to_i(16) - blue = $3.ljust(2, $3).to_i(16) - - hex_string = '##{hex_string}' unless hex_string[0] == ?# - attrs = {:red => red, :green => green, :blue => blue, :representation => hex_string} - attrs[:alpha] = alpha if alpha - new(attrs) - end - - # The red component of the color. - # - # @return [Fixnum] - def red - hsl_to_rgb! - @attrs[:red] - end - - # The green component of the color. - # - # @return [Fixnum] - def green - hsl_to_rgb! - @attrs[:green] - end - - # The blue component of the color. - # - # @return [Fixnum] - def blue - hsl_to_rgb! - @attrs[:blue] - end - - # The hue component of the color. - # - # @return [Numeric] - def hue - rgb_to_hsl! - @attrs[:hue] - end - - # The saturation component of the color. - # - # @return [Numeric] - def saturation - rgb_to_hsl! - @attrs[:saturation] - end - - # The lightness component of the color. - # - # @return [Numeric] - def lightness - rgb_to_hsl! - @attrs[:lightness] - end - - # The alpha channel (opacity) of the color. - # This is 1 unless otherwise defined. - # - # @return [Fixnum] - def alpha - @attrs[:alpha].to_f - end - - # Returns whether this color object is translucent; - # that is, whether the alpha channel is non-1. - # - # @return [Boolean] - def alpha? - alpha < 1 - end - - # Returns the red, green, and blue components of the color. - # - # @return [Array] A frozen three-element array of the red, green, and blue - # values (respectively) of the color - def rgb - [red, green, blue].freeze - end - - # Returns the red, green, blue, and alpha components of the color. - # - # @return [Array] A frozen four-element array of the red, green, - # blue, and alpha values (respectively) of the color - def rgba - [red, green, blue, alpha].freeze - end - - # Returns the hue, saturation, and lightness components of the color. - # - # @return [Array] A frozen three-element array of the - # hue, saturation, and lightness values (respectively) of the color - def hsl - [hue, saturation, lightness].freeze - end - - # Returns the hue, saturation, lightness, and alpha components of the color. - # - # @return [Array] A frozen four-element array of the hue, - # saturation, lightness, and alpha values (respectively) of the color - def hsla - [hue, saturation, lightness].freeze - end - - # The SassScript `==` operation. - # **Note that this returns a {Sass::Script::Value::Bool} object, - # not a Ruby boolean**. - # - # @param other [Value] The right-hand side of the operator - # @return [Bool] True if this value is the same as the other, - # false otherwise - def eq(other) - Sass::Script::Value::Bool.new( - other.is_a?(Color) && rgb == other.rgb && alpha == other.alpha) - end - - def hash - [rgb, alpha].hash - end - - # Returns a copy of this color with one or more channels changed. - # RGB or HSL colors may be changed, but not both at once. - # - # For example: - # - # Color.new([10, 20, 30]).with(:blue => 40) - # #=> rgb(10, 40, 30) - # Color.new([126, 126, 126]).with(:red => 0, :green => 255) - # #=> rgb(0, 255, 126) - # Color.new([255, 0, 127]).with(:saturation => 60) - # #=> rgb(204, 51, 127) - # Color.new([1, 2, 3]).with(:alpha => 0.4) - # #=> rgba(1, 2, 3, 0.4) - # - # @param attrs [{Symbol => Numeric}] - # A map of channel names (`:red`, `:green`, `:blue`, - # `:hue`, `:saturation`, `:lightness`, or `:alpha`) to values - # @return [Color] The new Color object - # @raise [ArgumentError] if both RGB and HSL keys are specified - def with(attrs) - attrs = attrs.reject {|k, v| v.nil?} - hsl = !([:hue, :saturation, :lightness] & attrs.keys).empty? - rgb = !([:red, :green, :blue] & attrs.keys).empty? - if hsl && rgb - raise ArgumentError.new("Cannot specify HSL and RGB values for a color at the same time") - end - - if hsl - [:hue, :saturation, :lightness].each {|k| attrs[k] ||= send(k)} - elsif rgb - [:red, :green, :blue].each {|k| attrs[k] ||= send(k)} - else - # If we're just changing the alpha channel, - # keep all the HSL/RGB stuff we've calculated - attrs = @attrs.merge(attrs) - end - attrs[:alpha] ||= alpha - - Color.new(attrs, nil, :allow_both_rgb_and_hsl) - end - - # The SassScript `+` operation. - # Its functionality depends on the type of its argument: - # - # {Number} - # : Adds the number to each of the RGB color channels. - # - # {Color} - # : Adds each of the RGB color channels together. - # - # {Value} - # : See {Value::Base#plus}. - # - # @param other [Value] The right-hand side of the operator - # @return [Color] The resulting color - # @raise [Sass::SyntaxError] if `other` is a number with units - def plus(other) - if other.is_a?(Sass::Script::Value::Number) || other.is_a?(Sass::Script::Value::Color) - piecewise(other, :+) - else - super - end - end - - # The SassScript `-` operation. - # Its functionality depends on the type of its argument: - # - # {Number} - # : Subtracts the number from each of the RGB color channels. - # - # {Color} - # : Subtracts each of the other color's RGB color channels from this color's. - # - # {Value} - # : See {Value::Base#minus}. - # - # @param other [Value] The right-hand side of the operator - # @return [Color] The resulting color - # @raise [Sass::SyntaxError] if `other` is a number with units - def minus(other) - if other.is_a?(Sass::Script::Value::Number) || other.is_a?(Sass::Script::Value::Color) - piecewise(other, :-) - else - super - end - end - - # The SassScript `*` operation. - # Its functionality depends on the type of its argument: - # - # {Number} - # : Multiplies the number by each of the RGB color channels. - # - # {Color} - # : Multiplies each of the RGB color channels together. - # - # @param other [Number, Color] The right-hand side of the operator - # @return [Color] The resulting color - # @raise [Sass::SyntaxError] if `other` is a number with units - def times(other) - if other.is_a?(Sass::Script::Value::Number) || other.is_a?(Sass::Script::Value::Color) - piecewise(other, :*) - else - raise NoMethodError.new(nil, :times) - end - end - - # The SassScript `/` operation. - # Its functionality depends on the type of its argument: - # - # {Number} - # : Divides each of the RGB color channels by the number. - # - # {Color} - # : Divides each of this color's RGB color channels by the other color's. - # - # {Value} - # : See {Value::Base#div}. - # - # @param other [Value] The right-hand side of the operator - # @return [Color] The resulting color - # @raise [Sass::SyntaxError] if `other` is a number with units - def div(other) - if other.is_a?(Sass::Script::Value::Number) || - other.is_a?(Sass::Script::Value::Color) - piecewise(other, :/) - else - super - end - end - - # The SassScript `%` operation. - # Its functionality depends on the type of its argument: - # - # {Number} - # : Takes each of the RGB color channels module the number. - # - # {Color} - # : Takes each of this color's RGB color channels modulo the other color's. - # - # @param other [Number, Color] The right-hand side of the operator - # @return [Color] The resulting color - # @raise [Sass::SyntaxError] if `other` is a number with units - def mod(other) - if other.is_a?(Sass::Script::Value::Number) || - other.is_a?(Sass::Script::Value::Color) - piecewise(other, :%) - else - raise NoMethodError.new(nil, :mod) - end - end - - # Returns a string representation of the color. - # This is usually the color's hex value, - # but if the color has a name that's used instead. - # - # @return [String] The string representation - def to_s(opts = {}) - return smallest if options[:style] == :compressed - return representation if representation - return name if name - alpha? ? rgba_str : hex_str - end - alias_method :to_sass, :to_s - - # Returns a string representation of the color. - # - # @return [String] The hex value - def inspect - alpha? ? rgba_str : hex_str - end - - # Returns the color's name, if it has one. - # - # @return [String, nil] - def name - COLOR_NAMES_REVERSE[rgba] - end - - private - - def smallest - small_explicit_str = alpha? ? rgba_str : hex_str.gsub(/^#(.)\1(.)\2(.)\3$/, '#\1\2\3') - [representation, COLOR_NAMES_REVERSE[rgba], small_explicit_str]. - compact.min_by {|str| str.size} - end - - def rgba_str - split = options[:style] == :compressed ? ',' : ', ' - "rgba(#{rgb.join(split)}#{split}#{Number.round(alpha)})" - end - - def hex_str - red, green, blue = rgb.map {|num| num.to_s(16).rjust(2, '0')} - "##{red}#{green}#{blue}" - end - - def piecewise(other, operation) - other_num = other.is_a? Number - if other_num && !other.unitless? - raise Sass::SyntaxError.new( - "Cannot add a number with units (#{other}) to a color (#{self}).") - end - - result = [] - (0...3).each do |i| - res = rgb[i].send(operation, other_num ? other.value : other.rgb[i]) - result[i] = [[res, 255].min, 0].max - end - - if !other_num && other.alpha != alpha - raise Sass::SyntaxError.new("Alpha channels must be equal: #{self} #{operation} #{other}") - end - - with(:red => result[0], :green => result[1], :blue => result[2]) - end - - def hsl_to_rgb! - return if @attrs[:red] && @attrs[:blue] && @attrs[:green] - - h = @attrs[:hue] / 360.0 - s = @attrs[:saturation] / 100.0 - l = @attrs[:lightness] / 100.0 - - # Algorithm from the CSS3 spec: http://www.w3.org/TR/css3-color/#hsl-color. - m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s - m1 = l * 2 - m2 - @attrs[:red], @attrs[:green], @attrs[:blue] = [ - hue_to_rgb(m1, m2, h + 1.0 / 3), - hue_to_rgb(m1, m2, h), - hue_to_rgb(m1, m2, h - 1.0 / 3) - ].map {|c| (c * 0xff).round} - end - - def hue_to_rgb(m1, m2, h) - h += 1 if h < 0 - h -= 1 if h > 1 - return m1 + (m2 - m1) * h * 6 if h * 6 < 1 - return m2 if h * 2 < 1 - return m1 + (m2 - m1) * (2.0 / 3 - h) * 6 if h * 3 < 2 - m1 - end - - def rgb_to_hsl! - return if @attrs[:hue] && @attrs[:saturation] && @attrs[:lightness] - r, g, b = [:red, :green, :blue].map {|k| @attrs[k] / 255.0} - - # Algorithm from http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV - max = [r, g, b].max - min = [r, g, b].min - d = max - min - - h = - case max - when min; 0 - when r; 60 * (g - b) / d - when g; 60 * (b - r) / d + 120 - when b; 60 * (r - g) / d + 240 - end - - l = (max + min) / 2.0 - - s = - if max == min - 0 - elsif l < 0.5 - d / (2 * l) - else - d / (2 - 2 * l) - end - - @attrs[:hue] = h % 360 - @attrs[:saturation] = s * 100 - @attrs[:lightness] = l * 100 - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/helpers.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/helpers.rb deleted file mode 100644 index d1a6376..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/helpers.rb +++ /dev/null @@ -1,262 +0,0 @@ -module Sass::Script::Value - # Provides helper functions for creating sass values from within ruby methods. - # @since `3.3.0` - module Helpers - # Construct a Sass Boolean. - # - # @param value [Object] A ruby object that will be tested for truthiness. - # @return [Sass::Script::Value::Bool] whether the ruby value is truthy. - def bool(value) - Bool.new(value) - end - - # Construct a Sass Color from a hex color string. - # - # @param value [::String] A string representing a hex color. - # The leading hash ("#") is optional. - # @param alpha [::Number] The alpha channel. A number between 0 and 1. - # @return [Sass::Script::Value::Color] the color object - def hex_color(value, alpha = nil) - Color.from_hex(value, alpha) - end - - # Construct a Sass Color from hsl values. - # - # @param hue [::Number] The hue of the color in degrees. - # A non-negative number, usually less than 360. - # @param saturation [::Number] The saturation of the color. - # Must be between 0 and 100 inclusive. - # @param lightness [::Number] The lightness of the color. - # Must be between 0 and 100 inclusive. - # @param alpha [::Number] The alpha channel. A number between 0 and 1. - # - # @return [Sass::Script::Value::Color] the color object - def hsl_color(hue, saturation, lightness, alpha = nil) - attrs = {:hue => hue, :saturation => saturation, :lightness => lightness} - attrs[:alpha] = alpha if alpha - Color.new(attrs) - end - - # Construct a Sass Color from rgb values. - # - # @param red [::Number] The red component. Must be between 0 and 255 inclusive. - # @param green [::Number] The green component. Must be between 0 and 255 inclusive. - # @param blue [::Number] The blue component. Must be between 0 and 255 inclusive. - # @param alpha [::Number] The alpha channel. A number between 0 and 1. - # - # @return [Sass::Script::Value::Color] the color object - def rgb_color(red, green, blue, alpha = nil) - attrs = {:red => red, :green => green, :blue => blue} - attrs[:alpha] = alpha if alpha - Color.new(attrs) - end - - # Construct a Sass Number from a ruby number. - # - # @param number [::Number] A numeric value. - # @param unit_string [::String] A unit string of the form - # `numeral_unit1 * numeral_unit2 ... / denominator_unit1 * denominator_unit2 ...` - # this is the same format that is returned by - # {Sass::Script::Value::Number#unit_str the `unit_str` method} - # - # @see Sass::Script::Value::Number#unit_str - # - # @return [Sass::Script::Value::Number] The sass number representing the given ruby number. - def number(number, unit_string = nil) - Number.new(number, *parse_unit_string(unit_string)) - end - - # @overload list(*elements, separator) - # Create a space-separated list from the arguments given. - # @param elements [Array] Each argument will be a list element. - # @param separator [Symbol] Either :space or :comma. - # @return [Sass::Script::Value::List] The space separated list. - # - # @overload list(array, separator) - # Create a space-separated list from the array given. - # @param array [Array] A ruby array of Sass values - # to make into a list. - # @return [Sass::Script::Value::List] The space separated list. - def list(*elements) - unless elements.last.is_a?(Symbol) - raise ArgumentError.new("A list type of :space or :comma must be specified.") - end - separator = elements.pop - if elements.size == 1 && elements.first.is_a?(Array) - elements = elements.first - end - Sass::Script::Value::List.new(elements, separator) - end - - # Construct a Sass map. - # - # @param hash [Hash] A Ruby map to convert to a Sass map. - # @return [Sass::Script::Value::Map] The map. - def map(hash) - Map.new(hash) - end - - # Create a sass null value. - # - # @return [Sass::Script::Value::Null] - def null - Sass::Script::Value::Null.new - end - - # Create a quoted string. - # - # @param str [::String] A ruby string. - # @return [Sass::Script::Value::String] A quoted string. - def quoted_string(str) - Sass::Script::String.new(str, :string) - end - - # Create an unquoted string. - # - # @param str [::String] A ruby string. - # @return [Sass::Script::Value::String] An unquoted string. - def unquoted_string(str) - Sass::Script::String.new(str, :identifier) - end - alias_method :identifier, :unquoted_string - - # Parses a user-provided selector. - # - # @param value [Sass::Script::Value::String, Sass::Script::Value::List] - # The selector to parse. This can be either a string, a list of - # strings, or a list of lists of strings as returned by `&`. - # @param name [Symbol, nil] - # If provided, the name of the selector argument. This is used - # for error reporting. - # @param allow_parent_ref [Boolean] - # Whether the parsed selector should allow parent references. - # @return [Sass::Selector::CommaSequence] The parsed selector. - # @throw [ArgumentError] if the parse failed for any reason. - def parse_selector(value, name = nil, allow_parent_ref = false) - str = normalize_selector(value, name) - begin - Sass::SCSS::StaticParser.new(str, nil, nil, 1, 1, allow_parent_ref).parse_selector - rescue Sass::SyntaxError => e - err = "#{value.inspect} is not a valid selector: #{e}" - err = "$#{name.to_s.gsub('_', '-')}: #{err}" if name - raise ArgumentError.new(err) - end - end - - # Parses a user-provided complex selector. - # - # A complex selector can contain combinators but cannot contain commas. - # - # @param value [Sass::Script::Value::String, Sass::Script::Value::List] - # The selector to parse. This can be either a string or a list of - # strings. - # @param name [Symbol, nil] - # If provided, the name of the selector argument. This is used - # for error reporting. - # @param allow_parent_ref [Boolean] - # Whether the parsed selector should allow parent references. - # @return [Sass::Selector::Sequence] The parsed selector. - # @throw [ArgumentError] if the parse failed for any reason. - def parse_complex_selector(value, name = nil, allow_parent_ref = false) - selector = parse_selector(value, name, allow_parent_ref) - return seq if selector.members.length == 1 - - err = "#{value.inspect} is not a complex selector" - err = "$#{name.to_s.gsub('_', '-')}: #{err}" if name - raise ArgumentError.new(err) - end - - # Parses a user-provided compound selector. - # - # A compound selector cannot contain combinators or commas. - # - # @param value [Sass::Script::Value::String] The selector to parse. - # @param name [Symbol, nil] - # If provided, the name of the selector argument. This is used - # for error reporting. - # @param allow_parent_ref [Boolean] - # Whether the parsed selector should allow parent references. - # @return [Sass::Selector::SimpleSequence] The parsed selector. - # @throw [ArgumentError] if the parse failed for any reason. - def parse_compound_selector(value, name = nil, allow_parent_ref = false) - assert_type value, :String, name - selector = parse_selector(value, name, allow_parent_ref) - seq = selector.members.first - sseq = seq.members.first - if selector.members.length == 1 && seq.members.length == 1 && - sseq.is_a?(Sass::Selector::SimpleSequence) - return sseq - end - - err = "#{value.inspect} is not a compound selector" - err = "$#{name.to_s.gsub('_', '-')}: #{err}" if name - raise ArgumentError.new(err) - end - - private - - # Converts a user-provided selector into string form or throws an - # ArgumentError if it's in an invalid format. - def normalize_selector(value, name) - if (str = selector_to_str(value)) - return str - end - - err = "#{value.inspect} is not a valid selector: it must be a string,\n" + - "a list of strings, or a list of lists of strings" - err = "$#{name.to_s.gsub('_', '-')}: #{err}" if name - raise ArgumentError.new(err) - end - - # Converts a user-provided selector into string form or returns - # `nil` if it's in an invalid format. - def selector_to_str(value) - return value.value if value.is_a?(Sass::Script::String) - return unless value.is_a?(Sass::Script::List) - - if value.separator == :comma - return value.to_a.map do |complex| - next complex.value if complex.is_a?(Sass::Script::String) - return unless complex.is_a?(Sass::Script::List) && complex.separator == :space - return unless (str = selector_to_str(complex)) - str - end.join(', ') - end - - value.to_a.map do |compound| - return unless compound.is_a?(Sass::Script::String) - compound.value - end.join(' ') - end - - # @private - VALID_UNIT = /#{Sass::SCSS::RX::NMSTART}#{Sass::SCSS::RX::NMCHAR}|%*/ - - # @example - # parse_unit_string("em*px/in*%") # => [["em", "px], ["in", "%"]] - # - # @param unit_string [String] A string adhering to the output of a number with complex - # units. E.g. "em*px/in*%" - # @return [Array>] A list of numerator units and a list of denominator units. - def parse_unit_string(unit_string) - denominator_units = numerator_units = Sass::Script::Value::Number::NO_UNITS - return numerator_units, denominator_units unless unit_string && unit_string.length > 0 - num_over_denominator = unit_string.split(/ *\/ */) - unless (1..2).include?(num_over_denominator.size) - raise ArgumentError.new("Malformed unit string: #{unit_string}") - end - numerator_units = num_over_denominator[0].split(/ *\* */) - denominator_units = (num_over_denominator[1] || "").split(/ *\* */) - [[numerator_units, "numerator"], [denominator_units, "denominator"]].each do |units, name| - if unit_string =~ /\// && units.size == 0 - raise ArgumentError.new("Malformed unit string: #{unit_string}") - end - if units.any? {|unit| unit !~ VALID_UNIT} - raise ArgumentError.new("Malformed #{name} in unit string: #{unit_string}") - end - end - [numerator_units, denominator_units] - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/list.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/list.rb deleted file mode 100644 index 648b830..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/list.rb +++ /dev/null @@ -1,113 +0,0 @@ -module Sass::Script::Value - # A SassScript object representing a CSS list. - # This includes both comma-separated lists and space-separated lists. - class List < Base - # The Ruby array containing the contents of the list. - # - # @return [Array] - attr_reader :value - alias_method :to_a, :value - - # The operator separating the values of the list. - # Either `:comma` or `:space`. - # - # @return [Symbol] - attr_reader :separator - - # Creates a new list. - # - # @param value [Array] See \{#value} - # @param separator [Symbol] See \{#separator} - def initialize(value, separator) - super(value) - @separator = separator - end - - # @see Value#options= - def options=(options) - super - value.each {|v| v.options = options} - end - - # @see Value#eq - def eq(other) - Sass::Script::Value::Bool.new( - other.is_a?(List) && value == other.value && - separator == other.separator) - end - - def hash - @hash ||= [value, separator].hash - end - - # @see Value#to_s - def to_s(opts = {}) - raise Sass::SyntaxError.new("() isn't a valid CSS value.") if value.empty? - value. - reject {|e| e.is_a?(Null) || e.is_a?(List) && e.value.empty?}. - map {|e| e.to_s(opts)}.join(sep_str) - end - - # @see Value#to_sass - def to_sass(opts = {}) - return "()" if value.empty? - members = value.map do |v| - if element_needs_parens?(v) - "(#{v.to_sass(opts)})" - else - v.to_sass(opts) - end - end - return "(#{members.first},)" if members.length == 1 && separator == :comma - members.join(sep_str(nil)) - end - - # @see Value#to_h - def to_h - return Sass::Util.ordered_hash if value.empty? - super - end - - # @see Value#inspect - def inspect - "(#{value.map {|e| e.inspect}.join(sep_str(nil))})" - end - - # Asserts an index is within the list. - # - # @private - # - # @param list [Sass::Script::Value::List] The list for which the index should be checked. - # @param n [Sass::Script::Value::Number] The index being checked. - def self.assert_valid_index(list, n) - if !n.int? || n.to_i == 0 - raise ArgumentError.new("List index #{n} must be a non-zero integer") - elsif list.to_a.size == 0 - raise ArgumentError.new("List index is #{n} but list has no items") - elsif n.to_i.abs > (size = list.to_a.size) - raise ArgumentError.new( - "List index is #{n} but list is only #{size} item#{'s' if size != 1} long") - end - end - - private - - def element_needs_parens?(element) - if element.is_a?(List) - return false if element.value.empty? - precedence = Sass::Script::Parser.precedence_of(separator) - return Sass::Script::Parser.precedence_of(element.separator) <= precedence - end - - return false unless separator == :space - return false unless element.is_a?(Sass::Script::Tree::UnaryOperation) - element.operator == :minus || element.operator == :plus - end - - def sep_str(opts = options) - return ' ' if separator == :space - return ',' if opts && opts[:style] == :compressed - ', ' - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/map.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/map.rb deleted file mode 100644 index 66852a3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/map.rb +++ /dev/null @@ -1,70 +0,0 @@ -module Sass::Script::Value - # A SassScript object representing a map from keys to values. Both keys and - # values can be any SassScript object. - class Map < Base - # The Ruby hash containing the contents of this map. - # - # @return [Hash] - attr_reader :value - alias_method :to_h, :value - - # Creates a new map. - # - # @param hash [Hash] - def initialize(hash) - super(Sass::Util.ordered_hash(hash)) - end - - # @see Value#options= - def options=(options) - super - value.each do |k, v| - k.options = options - v.options = options - end - end - - # @see Value#separator - def separator - :comma unless value.empty? - end - - # @see Value#to_a - def to_a - value.map do |k, v| - list = List.new([k, v], :space) - list.options = options - list - end - end - - # @see Value#eq - def eq(other) - Bool.new(other.is_a?(Map) && value == other.value) - end - - def hash - @hash ||= value.hash - end - - # @see Value#to_s - def to_s(opts = {}) - raise Sass::SyntaxError.new("#{inspect} isn't a valid CSS value.") - end - - def to_sass(opts = {}) - return "()" if value.empty? - - to_sass = lambda do |value| - if value.is_a?(List) && value.separator == :comma - "(#{value.to_sass(opts)})" - else - value.to_sass(opts) - end - end - - "(#{value.map {|(k, v)| "#{to_sass[k]}: #{to_sass[v]}"}.join(', ')})" - end - alias_method :inspect, :to_sass - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/null.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/null.rb deleted file mode 100644 index f6d573b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/null.rb +++ /dev/null @@ -1,44 +0,0 @@ -module Sass::Script::Value - # A SassScript object representing a null value. - class Null < Base - # The null value in SassScript. - # - # This is assigned before new is overridden below so that we use the default implementation. - NULL = new(nil) - - # We override object creation so that users of the core API - # will not need to know that null is a specific constant. - # - # @private - # @return [Null] the {NULL} constant. - def self.new - NULL - end - - # @return [Boolean] `false` (the Ruby boolean value) - def to_bool - false - end - - # @return [Boolean] `true` - def null? - true - end - - # @return [String] '' (An empty string) - def to_s(opts = {}) - '' - end - - def to_sass(opts = {}) - 'null' - end - - # Returns a string representing a null value. - # - # @return [String] - def inspect - 'null' - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/number.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/number.rb deleted file mode 100644 index 031a6e7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/number.rb +++ /dev/null @@ -1,530 +0,0 @@ -module Sass::Script::Value - # A SassScript object representing a number. - # SassScript numbers can have decimal values, - # and can also have units. - # For example, `12`, `1px`, and `10.45em` - # are all valid values. - # - # Numbers can also have more complex units, such as `1px*em/in`. - # These cannot be inputted directly in Sass code at the moment. - class Number < Base - # The Ruby value of the number. - # - # @return [Numeric] - attr_reader :value - - # A list of units in the numerator of the number. - # For example, `1px*em/in*cm` would return `["px", "em"]` - # @return [Array] - attr_reader :numerator_units - - # A list of units in the denominator of the number. - # For example, `1px*em/in*cm` would return `["in", "cm"]` - # @return [Array] - attr_reader :denominator_units - - # The original representation of this number. - # For example, although the result of `1px/2px` is `0.5`, - # the value of `#original` is `"1px/2px"`. - # - # This is only non-nil when the original value should be used as the CSS value, - # as in `font: 1px/2px`. - # - # @return [Boolean, nil] - attr_accessor :original - - def self.precision - @precision ||= 5 - end - - # Sets the number of digits of precision - # For example, if this is `3`, - # `3.1415926` will be printed as `3.142`. - def self.precision=(digits) - @precision = digits.round - @precision_factor = 10.0**@precision - end - - # the precision factor used in numeric output - # it is derived from the `precision` method. - def self.precision_factor - @precision_factor ||= 10.0**precision - end - - # Used so we don't allocate two new arrays for each new number. - NO_UNITS = [] - - # @param value [Numeric] The value of the number - # @param numerator_units [::String, Array<::String>] See \{#numerator\_units} - # @param denominator_units [::String, Array<::String>] See \{#denominator\_units} - def initialize(value, numerator_units = NO_UNITS, denominator_units = NO_UNITS) - numerator_units = [numerator_units] if numerator_units.is_a?(::String) - denominator_units = [denominator_units] if denominator_units.is_a?(::String) - super(value) - @numerator_units = numerator_units - @denominator_units = denominator_units - normalize! - end - - # The SassScript `+` operation. - # Its functionality depends on the type of its argument: - # - # {Number} - # : Adds the two numbers together, converting units if possible. - # - # {Color} - # : Adds this number to each of the RGB color channels. - # - # {Value} - # : See {Value::Base#plus}. - # - # @param other [Value] The right-hand side of the operator - # @return [Value] The result of the operation - # @raise [Sass::UnitConversionError] if `other` is a number with incompatible units - def plus(other) - if other.is_a? Number - operate(other, :+) - elsif other.is_a?(Color) - other.plus(self) - else - super - end - end - - # The SassScript binary `-` operation (e.g. `$a - $b`). - # Its functionality depends on the type of its argument: - # - # {Number} - # : Subtracts this number from the other, converting units if possible. - # - # {Value} - # : See {Value::Base#minus}. - # - # @param other [Value] The right-hand side of the operator - # @return [Value] The result of the operation - # @raise [Sass::UnitConversionError] if `other` is a number with incompatible units - def minus(other) - if other.is_a? Number - operate(other, :-) - else - super - end - end - - # The SassScript unary `+` operation (e.g. `+$a`). - # - # @return [Number] The value of this number - def unary_plus - self - end - - # The SassScript unary `-` operation (e.g. `-$a`). - # - # @return [Number] The negative value of this number - def unary_minus - Number.new(-value, @numerator_units, @denominator_units) - end - - # The SassScript `*` operation. - # Its functionality depends on the type of its argument: - # - # {Number} - # : Multiplies the two numbers together, converting units appropriately. - # - # {Color} - # : Multiplies each of the RGB color channels by this number. - # - # @param other [Number, Color] The right-hand side of the operator - # @return [Number, Color] The result of the operation - # @raise [NoMethodError] if `other` is an invalid type - def times(other) - if other.is_a? Number - operate(other, :*) - elsif other.is_a? Color - other.times(self) - else - raise NoMethodError.new(nil, :times) - end - end - - # The SassScript `/` operation. - # Its functionality depends on the type of its argument: - # - # {Number} - # : Divides this number by the other, converting units appropriately. - # - # {Value} - # : See {Value::Base#div}. - # - # @param other [Value] The right-hand side of the operator - # @return [Value] The result of the operation - def div(other) - if other.is_a? Number - res = operate(other, :/) - if original && other.original - res.original = "#{original}/#{other.original}" - end - res - else - super - end - end - - # The SassScript `%` operation. - # - # @param other [Number] The right-hand side of the operator - # @return [Number] This number modulo the other - # @raise [NoMethodError] if `other` is an invalid type - # @raise [Sass::UnitConversionError] if `other` has incompatible units - def mod(other) - if other.is_a?(Number) - operate(other, :%) - else - raise NoMethodError.new(nil, :mod) - end - end - - # The SassScript `==` operation. - # - # @param other [Value] The right-hand side of the operator - # @return [Boolean] Whether this number is equal to the other object - def eq(other) - return Bool::FALSE unless other.is_a?(Sass::Script::Value::Number) - this = self - begin - if unitless? - this = this.coerce(other.numerator_units, other.denominator_units) - else - other = other.coerce(@numerator_units, @denominator_units) - end - rescue Sass::UnitConversionError - return Bool::FALSE - end - Bool.new(this.value == other.value) - end - - def hash - [value, numerator_units, denominator_units].hash - end - - # Hash-equality works differently than `==` equality for numbers. - # Hash-equality must be transitive, so it just compares the exact value, - # numerator units, and denominator units. - def eql?(other) - value == other.value && numerator_units == other.numerator_units && - denominator_units == other.denominator_units - end - - # The SassScript `>` operation. - # - # @param other [Number] The right-hand side of the operator - # @return [Boolean] Whether this number is greater than the other - # @raise [NoMethodError] if `other` is an invalid type - def gt(other) - raise NoMethodError.new(nil, :gt) unless other.is_a?(Number) - operate(other, :>) - end - - # The SassScript `>=` operation. - # - # @param other [Number] The right-hand side of the operator - # @return [Boolean] Whether this number is greater than or equal to the other - # @raise [NoMethodError] if `other` is an invalid type - def gte(other) - raise NoMethodError.new(nil, :gte) unless other.is_a?(Number) - operate(other, :>=) - end - - # The SassScript `<` operation. - # - # @param other [Number] The right-hand side of the operator - # @return [Boolean] Whether this number is less than the other - # @raise [NoMethodError] if `other` is an invalid type - def lt(other) - raise NoMethodError.new(nil, :lt) unless other.is_a?(Number) - operate(other, :<) - end - - # The SassScript `<=` operation. - # - # @param other [Number] The right-hand side of the operator - # @return [Boolean] Whether this number is less than or equal to the other - # @raise [NoMethodError] if `other` is an invalid type - def lte(other) - raise NoMethodError.new(nil, :lte) unless other.is_a?(Number) - operate(other, :<=) - end - - # @return [String] The CSS representation of this number - # @raise [Sass::SyntaxError] if this number has units that can't be used in CSS - # (e.g. `px*in`) - def to_s(opts = {}) - return original if original - raise Sass::SyntaxError.new("#{inspect} isn't a valid CSS value.") unless legal_units? - inspect - end - - # Returns a readable representation of this number. - # - # This representation is valid CSS (and valid SassScript) - # as long as there is only one unit. - # - # @return [String] The representation - def inspect(opts = {}) - return original if original - - value = self.class.round(self.value) - str = value.to_s - - # Ruby will occasionally print in scientific notation if the number is - # small enough. That's technically valid CSS, but it's not well-supported - # and confusing. - str = ("%0.#{self.class.precision}f" % value).gsub(/0*$/, '') if str.include?('e') - - unitless? ? str : "#{str}#{unit_str}" - end - alias_method :to_sass, :inspect - - # @return [Fixnum] The integer value of the number - # @raise [Sass::SyntaxError] if the number isn't an integer - def to_i - super unless int? - value.to_i - end - - # @return [Boolean] Whether or not this number is an integer. - def int? - value % 1 == 0.0 - end - - # @return [Boolean] Whether or not this number has no units. - def unitless? - @numerator_units.empty? && @denominator_units.empty? - end - - # Checks whether the number has the numerator unit specified. - # - # @example - # number = Sass::Script::Value::Number.new(10, "px") - # number.is_unit?("px") => true - # number.is_unit?(nil) => false - # - # @param unit [::String, nil] The unit the number should have or nil if the number - # should be unitless. - # @see Number#unitless? The unitless? method may be more readable. - def is_unit?(unit) - if unit - denominator_units.size == 0 && numerator_units.size == 1 && numerator_units.first == unit - else - unitless? - end - end - - # @return [Boolean] Whether or not this number has units that can be represented in CSS - # (that is, zero or one \{#numerator\_units}). - def legal_units? - (@numerator_units.empty? || @numerator_units.size == 1) && @denominator_units.empty? - end - - # Returns this number converted to other units. - # The conversion takes into account the relationship between e.g. mm and cm, - # as well as between e.g. in and cm. - # - # If this number has no units, it will simply return itself - # with the given units. - # - # An incompatible coercion, e.g. between px and cm, will raise an error. - # - # @param num_units [Array] The numerator units to coerce this number into. - # See {\#numerator\_units} - # @param den_units [Array] The denominator units to coerce this number into. - # See {\#denominator\_units} - # @return [Number] The number with the new units - # @raise [Sass::UnitConversionError] if the given units are incompatible with the number's - # current units - def coerce(num_units, den_units) - Number.new(if unitless? - value - else - value * coercion_factor(@numerator_units, num_units) / - coercion_factor(@denominator_units, den_units) - end, num_units, den_units) - end - - # @param other [Number] A number to decide if it can be compared with this number. - # @return [Boolean] Whether or not this number can be compared with the other. - def comparable_to?(other) - operate(other, :+) - true - rescue Sass::UnitConversionError - false - end - - # Returns a human readable representation of the units in this number. - # For complex units this takes the form of: - # numerator_unit1 * numerator_unit2 / denominator_unit1 * denominator_unit2 - # @return [String] a string that represents the units in this number - def unit_str - rv = @numerator_units.sort.join("*") - if @denominator_units.any? - rv << "/" - rv << @denominator_units.sort.join("*") - end - rv - end - - private - - # @private - def self.round(num) - if num.is_a?(Float) && (num.infinite? || num.nan?) - num - elsif num % 1 == 0.0 - num.to_i - else - ((num * precision_factor).round / precision_factor).to_f - end - end - - OPERATIONS = [:+, :-, :<=, :<, :>, :>=, :%] - - def operate(other, operation) - this = self - if OPERATIONS.include?(operation) - if unitless? - this = this.coerce(other.numerator_units, other.denominator_units) - else - other = other.coerce(@numerator_units, @denominator_units) - end - end - # avoid integer division - value = :/ == operation ? this.value.to_f : this.value - result = value.send(operation, other.value) - - if result.is_a?(Numeric) - Number.new(result, *compute_units(this, other, operation)) - else # Boolean op - Bool.new(result) - end - end - - def coercion_factor(from_units, to_units) - # get a list of unmatched units - from_units, to_units = sans_common_units(from_units, to_units) - - if from_units.size != to_units.size || !convertable?(from_units | to_units) - raise Sass::UnitConversionError.new( - "Incompatible units: '#{from_units.join('*')}' and '#{to_units.join('*')}'.") - end - - from_units.zip(to_units).inject(1) {|m, p| m * conversion_factor(p[0], p[1])} - end - - def compute_units(this, other, operation) - case operation - when :* - [this.numerator_units + other.numerator_units, - this.denominator_units + other.denominator_units] - when :/ - [this.numerator_units + other.denominator_units, - this.denominator_units + other.numerator_units] - else - [this.numerator_units, this.denominator_units] - end - end - - def normalize! - return if unitless? - @numerator_units, @denominator_units = - sans_common_units(@numerator_units, @denominator_units) - - @denominator_units.each_with_index do |d, i| - if convertable?(d) && (u = @numerator_units.find(&method(:convertable?))) - @value /= conversion_factor(d, u) - @denominator_units.delete_at(i) - @numerator_units.delete_at(@numerator_units.index(u)) - end - end - end - - # This is the source data for all the unit logic. It's pre-processed to make - # it efficient to figure out whether a set of units is mutually compatible - # and what the conversion ratio is between two units. - # - # These come from http://www.w3.org/TR/2012/WD-css3-values-20120308/. - relative_sizes = [ - { - 'in' => Rational(1), - 'cm' => Rational(1, 2.54), - 'pc' => Rational(1, 6), - 'mm' => Rational(1, 25.4), - 'pt' => Rational(1, 72), - 'px' => Rational(1, 96) - }, - { - 'deg' => Rational(1, 360), - 'grad' => Rational(1, 400), - 'rad' => Rational(1, 2 * Math::PI), - 'turn' => Rational(1) - }, - { - 's' => Rational(1), - 'ms' => Rational(1, 1000) - }, - { - 'Hz' => Rational(1), - 'kHz' => Rational(1000) - }, - { - 'dpi' => Rational(1), - 'dpcm' => Rational(1, 2.54), - 'dppx' => Rational(1, 96) - } - ] - - # A hash from each known unit to the set of units that it's mutually - # convertible with. - MUTUALLY_CONVERTIBLE = {} - relative_sizes.map do |values| - set = values.keys.to_set - values.keys.each {|name| MUTUALLY_CONVERTIBLE[name] = set} - end - - # A two-dimensional hash from two units to the conversion ratio between - # them. Multiply `X` by `CONVERSION_TABLE[X][Y]` to convert it to `Y`. - CONVERSION_TABLE = {} - relative_sizes.each do |values| - values.each do |(name1, value1)| - CONVERSION_TABLE[name1] ||= {} - values.each do |(name2, value2)| - value = value1 / value2 - CONVERSION_TABLE[name1][name2] = value.denominator == 1 ? value.to_i : value.to_f - end - end - end - - def conversion_factor(from_unit, to_unit) - CONVERSION_TABLE[from_unit][to_unit] - end - - def convertable?(units) - units = Array(units).to_set - return true if units.empty? - return false unless (mutually_convertible = MUTUALLY_CONVERTIBLE[units.first]) - units.subset?(mutually_convertible) - end - - def sans_common_units(units1, units2) - units2 = units2.dup - # Can't just use -, because we want px*px to coerce properly to px*mm - units1 = units1.map do |u| - j = units2.index(u) - next u unless j - units2.delete_at(j) - nil - end - units1.compact! - return units1, units2 - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/string.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/string.rb deleted file mode 100644 index 1d47980..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/script/value/string.rb +++ /dev/null @@ -1,97 +0,0 @@ -# -*- coding: utf-8 -*- -module Sass::Script::Value - # A SassScript object representing a CSS string *or* a CSS identifier. - class String < Base - # The Ruby value of the string. - # - # @return [String] - attr_reader :value - - # Whether this is a CSS string or a CSS identifier. - # The difference is that strings are written with double-quotes, - # while identifiers aren't. - # - # @return [Symbol] `:string` or `:identifier` - attr_reader :type - - def self.value(contents) - contents.gsub("\\\n", "").gsub(/\\(?:([0-9a-fA-F]{1,6})\s?|(.))/) do - next $2 if $2 - # Handle unicode escapes as per CSS Syntax Level 3 section 4.3.8. - code_point = $1.to_i(16) - if code_point == 0 || code_point > 0x10FFFF || - (code_point >= 0xD800 && code_point <= 0xDFFF) - '�' - else - [code_point].pack("U") - end - end - end - - def self.quote(contents, quote = nil) - # Short-circuit if there are no characters that need quoting. - unless contents =~ /[\n\\"']/ - quote ||= '"' - return "#{quote}#{contents}#{quote}" - end - - if quote.nil? - if contents.include?('"') - if contents.include?("'") - quote = '"' - else - quote = "'" - end - else - quote = '"' - end - end - - # Replace single backslashes with multiples. - contents = contents.gsub("\\", "\\\\\\\\") - - if quote == '"' - contents = contents.gsub('"', "\\\"") - else - contents = contents.gsub("'", "\\'") - end - - contents = contents.gsub(/\n(?![a-fA-F0-9\s])/, "\\a").gsub("\n", "\\a ") - "#{quote}#{contents}#{quote}" - end - - # Creates a new string. - # - # @param value [String] See \{#value} - # @param type [Symbol] See \{#type} - def initialize(value, type = :identifier) - super(value) - @type = type - end - - # @see Value#plus - def plus(other) - other_value = if other.is_a?(Sass::Script::Value::String) - other.value - else - other.to_s(:quote => :none) - end - Sass::Script::Value::String.new(value + other_value, type) - end - - # @see Value#to_s - def to_s(opts = {}) - return @value.gsub(/\n\s*/, ' ') if opts[:quote] == :none || @type == :identifier - Sass::Script::Value::String.quote(value, opts[:quote]) - end - - # @see Value#to_sass - def to_sass(opts = {}) - to_s - end - - def inspect - String.quote(value) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss.rb deleted file mode 100644 index 215fe95..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'sass/scss/rx' -require 'sass/scss/script_lexer' -require 'sass/scss/script_parser' -require 'sass/scss/parser' -require 'sass/scss/static_parser' -require 'sass/scss/css_parser' - -module Sass - # SCSS is the CSS syntax for Sass. - # It parses into the same syntax tree as Sass, - # and generates the same sort of output CSS. - # - # This module contains code for the parsing of SCSS. - # The evaluation is handled by the broader {Sass} module. - module SCSS; end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss/css_parser.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss/css_parser.rb deleted file mode 100644 index 76917c9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss/css_parser.rb +++ /dev/null @@ -1,57 +0,0 @@ -require 'sass/script/css_parser' - -module Sass - module SCSS - # This is a subclass of {Parser} which only parses plain CSS. - # It doesn't support any Sass extensions, such as interpolation, - # parent references, nested selectors, and so forth. - # It does support all the same CSS hacks as the SCSS parser, though. - class CssParser < StaticParser - private - - def placeholder_selector; nil; end - def parent_selector; nil; end - def interpolation(warn_for_color = false); nil; end - def use_css_import?; true; end - - def block_contents(node, context) - if node.is_a?(Sass::Tree::DirectiveNode) && node.normalized_name == '@keyframes' - context = :keyframes - end - super(node, context) - end - - def block_child(context) - case context - when :ruleset - declaration - when :stylesheet - directive || ruleset - when :directive - directive || declaration_or_ruleset - when :keyframes - keyframes_ruleset - end - end - - def nested_properties!(node) - expected('expression (e.g. 1px, bold)') - end - - def ruleset - start_pos = source_position - return unless (selector = selector_comma_sequence) - block(node(Sass::Tree::RuleNode.new(selector, range(start_pos)), start_pos), :ruleset) - end - - def keyframes_ruleset - start_pos = source_position - return unless (selector = keyframes_selector) - block(node(Sass::Tree::KeyframeRuleNode.new(selector.strip), start_pos), :ruleset) - end - - @sass_script_parser = Class.new(Sass::Script::CssParser) - @sass_script_parser.send(:include, ScriptParser) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss/parser.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss/parser.rb deleted file mode 100644 index 65378ea..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss/parser.rb +++ /dev/null @@ -1,1211 +0,0 @@ -# -*- coding: utf-8 -*- -require 'set' - -module Sass - module SCSS - # The parser for SCSS. - # It parses a string of code into a tree of {Sass::Tree::Node}s. - class Parser - # Expose for the SASS parser. - attr_accessor :offset - - # @param str [String, StringScanner] The source document to parse. - # Note that `Parser` *won't* raise a nice error message if this isn't properly parsed; - # for that, you should use the higher-level {Sass::Engine} or {Sass::CSS}. - # @param filename [String] The name of the file being parsed. Used for - # warnings and source maps. - # @param importer [Sass::Importers::Base] The importer used to import the - # file being parsed. Used for source maps. - # @param line [Fixnum] The 1-based line on which the source string appeared, - # if it's part of another document. - # @param offset [Fixnum] The 1-based character (not byte) offset in the line on - # which the source string starts. Used for error reporting and sourcemap - # building. - # @comment - # rubocop:disable ParameterLists - def initialize(str, filename, importer, line = 1, offset = 1) - # rubocop:enable ParameterLists - @template = str - @filename = filename - @importer = importer - @line = line - @offset = offset - @strs = [] - end - - # Parses an SCSS document. - # - # @return [Sass::Tree::RootNode] The root node of the document tree - # @raise [Sass::SyntaxError] if there's a syntax error in the document - def parse - init_scanner! - root = stylesheet - expected("selector or at-rule") unless root && @scanner.eos? - root - end - - # Parses an identifier with interpolation. - # Note that this won't assert that the identifier takes up the entire input string; - # it's meant to be used with `StringScanner`s as part of other parsers. - # - # @return [Array, nil] - # The interpolated identifier, or nil if none could be parsed - def parse_interp_ident - init_scanner! - interp_ident - end - - # Parses a media query list. - # - # @return [Sass::Media::QueryList] The parsed query list - # @raise [Sass::SyntaxError] if there's a syntax error in the query list, - # or if it doesn't take up the entire input string. - def parse_media_query_list - init_scanner! - ql = media_query_list - expected("media query list") unless ql && @scanner.eos? - ql - end - - # Parses an at-root query. - # - # @return [Array] The interpolated query. - # @raise [Sass::SyntaxError] if there's a syntax error in the query, - # or if it doesn't take up the entire input string. - def parse_at_root_query - init_scanner! - query = at_root_query - expected("@at-root query list") unless query && @scanner.eos? - query - end - - # Parses a supports query condition. - # - # @return [Sass::Supports::Condition] The parsed condition - # @raise [Sass::SyntaxError] if there's a syntax error in the condition, - # or if it doesn't take up the entire input string. - def parse_supports_condition - init_scanner! - condition = supports_condition - expected("supports condition") unless condition && @scanner.eos? - condition - end - - private - - include Sass::SCSS::RX - - def source_position - Sass::Source::Position.new(@line, @offset) - end - - def range(start_pos, end_pos = source_position) - Sass::Source::Range.new(start_pos, end_pos, @filename, @importer) - end - - def init_scanner! - @scanner = - if @template.is_a?(StringScanner) - @template - else - Sass::Util::MultibyteStringScanner.new(@template.gsub("\r", "")) - end - end - - def stylesheet - node = node(Sass::Tree::RootNode.new(@scanner.string), source_position) - block_contents(node, :stylesheet) {s(node)} - end - - def s(node) - while tok(S) || tok(CDC) || tok(CDO) || (c = tok(SINGLE_LINE_COMMENT)) || (c = tok(COMMENT)) - next unless c - process_comment c, node - c = nil - end - true - end - - def ss - nil while tok(S) || tok(SINGLE_LINE_COMMENT) || tok(COMMENT) - true - end - - def ss_comments(node) - while tok(S) || (c = tok(SINGLE_LINE_COMMENT)) || (c = tok(COMMENT)) - next unless c - process_comment c, node - c = nil - end - - true - end - - def whitespace - return unless tok(S) || tok(SINGLE_LINE_COMMENT) || tok(COMMENT) - ss - end - - def process_comment(text, node) - silent = text =~ %r{\A//} - loud = !silent && text =~ %r{\A/[/*]!} - line = @line - text.count("\n") - - if silent - value = [text.sub(%r{\A\s*//}, '/*').gsub(%r{^\s*//}, ' *') + ' */'] - else - value = Sass::Engine.parse_interp( - text, line, @scanner.pos - text.size, :filename => @filename) - string_before_comment = @scanner.string[0...@scanner.pos - text.length] - newline_before_comment = string_before_comment.rindex("\n") - last_line_before_comment = - if newline_before_comment - string_before_comment[newline_before_comment + 1..-1] - else - string_before_comment - end - value.unshift(last_line_before_comment.gsub(/[^\s]/, ' ')) - end - - type = if silent - :silent - elsif loud - :loud - else - :normal - end - comment = Sass::Tree::CommentNode.new(value, type) - comment.line = line - node << comment - end - - DIRECTIVES = Set[:mixin, :include, :function, :return, :debug, :warn, :for, - :each, :while, :if, :else, :extend, :import, :media, :charset, :content, - :_moz_document, :at_root, :error] - - PREFIXED_DIRECTIVES = Set[:supports] - - def directive - start_pos = source_position - return unless tok(/@/) - name = tok!(IDENT) - ss - - if (dir = special_directive(name, start_pos)) - return dir - elsif (dir = prefixed_directive(name, start_pos)) - return dir - end - - val = almost_any_value - val = val ? ["@#{name} "] + Sass::Util.strip_string_array(val) : ["@#{name}"] - directive_body(val, start_pos) - end - - def directive_body(value, start_pos) - node = Sass::Tree::DirectiveNode.new(value) - - if tok(/\{/) - node.has_children = true - block_contents(node, :directive) - tok!(/\}/) - end - - node(node, start_pos) - end - - def special_directive(name, start_pos) - sym = name.gsub('-', '_').to_sym - DIRECTIVES.include?(sym) && send("#{sym}_directive", start_pos) - end - - def prefixed_directive(name, start_pos) - sym = deprefix(name).gsub('-', '_').to_sym - PREFIXED_DIRECTIVES.include?(sym) && send("#{sym}_directive", name, start_pos) - end - - def mixin_directive(start_pos) - name = tok! IDENT - args, splat = sass_script(:parse_mixin_definition_arglist) - ss - block(node(Sass::Tree::MixinDefNode.new(name, args, splat), start_pos), :directive) - end - - def include_directive(start_pos) - name = tok! IDENT - args, keywords, splat, kwarg_splat = sass_script(:parse_mixin_include_arglist) - ss - include_node = node( - Sass::Tree::MixinNode.new(name, args, keywords, splat, kwarg_splat), start_pos) - if tok?(/\{/) - include_node.has_children = true - block(include_node, :directive) - else - include_node - end - end - - def content_directive(start_pos) - ss - node(Sass::Tree::ContentNode.new, start_pos) - end - - def function_directive(start_pos) - name = tok! IDENT - args, splat = sass_script(:parse_function_definition_arglist) - ss - block(node(Sass::Tree::FunctionNode.new(name, args, splat), start_pos), :function) - end - - def return_directive(start_pos) - node(Sass::Tree::ReturnNode.new(sass_script(:parse)), start_pos) - end - - def debug_directive(start_pos) - node(Sass::Tree::DebugNode.new(sass_script(:parse)), start_pos) - end - - def warn_directive(start_pos) - node(Sass::Tree::WarnNode.new(sass_script(:parse)), start_pos) - end - - def for_directive(start_pos) - tok!(/\$/) - var = tok! IDENT - ss - - tok!(/from/) - from = sass_script(:parse_until, Set["to", "through"]) - ss - - @expected = '"to" or "through"' - exclusive = (tok(/to/) || tok!(/through/)) == 'to' - to = sass_script(:parse) - ss - - block(node(Sass::Tree::ForNode.new(var, from, to, exclusive), start_pos), :directive) - end - - def each_directive(start_pos) - tok!(/\$/) - vars = [tok!(IDENT)] - ss - while tok(/,/) - ss - tok!(/\$/) - vars << tok!(IDENT) - ss - end - - tok!(/in/) - list = sass_script(:parse) - ss - - block(node(Sass::Tree::EachNode.new(vars, list), start_pos), :directive) - end - - def while_directive(start_pos) - expr = sass_script(:parse) - ss - block(node(Sass::Tree::WhileNode.new(expr), start_pos), :directive) - end - - def if_directive(start_pos) - expr = sass_script(:parse) - ss - node = block(node(Sass::Tree::IfNode.new(expr), start_pos), :directive) - pos = @scanner.pos - line = @line - ss - - else_block(node) || - begin - # Backtrack in case there are any comments we want to parse - @scanner.pos = pos - @line = line - node - end - end - - def else_block(node) - start_pos = source_position - return unless tok(/@else/) - ss - else_node = block( - node(Sass::Tree::IfNode.new((sass_script(:parse) if tok(/if/))), start_pos), - :directive) - node.add_else(else_node) - pos = @scanner.pos - line = @line - ss - - else_block(node) || - begin - # Backtrack in case there are any comments we want to parse - @scanner.pos = pos - @line = line - node - end - end - - def else_directive(start_pos) - err("Invalid CSS: @else must come after @if") - end - - def extend_directive(start_pos) - selector_start_pos = source_position - @expected = "selector" - selector = Sass::Util.strip_string_array(expr!(:almost_any_value)) - optional = tok(OPTIONAL) - ss - node(Sass::Tree::ExtendNode.new(selector, !!optional, range(selector_start_pos)), start_pos) - end - - def import_directive(start_pos) - values = [] - - loop do - values << expr!(:import_arg) - break if use_css_import? - break unless tok(/,/) - ss - end - - values - end - - def import_arg - start_pos = source_position - return unless (str = string) || (uri = tok?(/url\(/i)) - if uri - str = sass_script(:parse_string) - ss - media = media_query_list - ss - return node(Tree::CssImportNode.new(str, media.to_a), start_pos) - end - ss - - media = media_query_list - if str =~ %r{^(https?:)?//} || media || use_css_import? - return node(Sass::Tree::CssImportNode.new( - Sass::Script::Value::String.quote(str), media.to_a), start_pos) - end - - node(Sass::Tree::ImportNode.new(str.strip), start_pos) - end - - def use_css_import?; false; end - - def media_directive(start_pos) - block(node(Sass::Tree::MediaNode.new(expr!(:media_query_list).to_a), start_pos), :directive) - end - - # http://www.w3.org/TR/css3-mediaqueries/#syntax - def media_query_list - query = media_query - return unless query - queries = [query] - - ss - while tok(/,/) - ss; queries << expr!(:media_query) - end - ss - - Sass::Media::QueryList.new(queries) - end - - def media_query - if (ident1 = interp_ident) - ss - ident2 = interp_ident - ss - if ident2 && ident2.length == 1 && ident2[0].is_a?(String) && ident2[0].downcase == 'and' - query = Sass::Media::Query.new([], ident1, []) - else - if ident2 - query = Sass::Media::Query.new(ident1, ident2, []) - else - query = Sass::Media::Query.new([], ident1, []) - end - return query unless tok(/and/i) - ss - end - end - - if query - expr = expr!(:media_expr) - else - expr = media_expr - return unless expr - end - query ||= Sass::Media::Query.new([], [], []) - query.expressions << expr - - ss - while tok(/and/i) - ss; query.expressions << expr!(:media_expr) - end - - query - end - - def query_expr - interp = interpolation - return interp if interp - return unless tok(/\(/) - res = ['('] - ss - res << sass_script(:parse) - - if tok(/:/) - res << ': ' - ss - res << sass_script(:parse) - end - res << tok!(/\)/) - ss - res - end - - # Aliases allow us to use different descriptions if the same - # expression fails in different contexts. - alias_method :media_expr, :query_expr - alias_method :at_root_query, :query_expr - - def charset_directive(start_pos) - name = expr!(:string) - ss - node(Sass::Tree::CharsetNode.new(name), start_pos) - end - - # The document directive is specified in - # http://www.w3.org/TR/css3-conditional/, but Gecko allows the - # `url-prefix` and `domain` functions to omit quotation marks, contrary to - # the standard. - # - # We could parse all document directives according to Mozilla's syntax, - # but if someone's using e.g. @-webkit-document we don't want them to - # think WebKit works sans quotes. - def _moz_document_directive(start_pos) - res = ["@-moz-document "] - loop do - res << str {ss} << expr!(:moz_document_function) - if (c = tok(/,/)) - res << c - else - break - end - end - directive_body(res.flatten, start_pos) - end - - def moz_document_function - val = interp_uri || _interp_string(:url_prefix) || - _interp_string(:domain) || function(!:allow_var) || interpolation - return unless val - ss - val - end - - def at_root_directive(start_pos) - if tok?(/\(/) && (expr = at_root_query) - return block(node(Sass::Tree::AtRootNode.new(expr), start_pos), :directive) - end - - at_root_node = node(Sass::Tree::AtRootNode.new, start_pos) - rule_node = ruleset - return block(at_root_node, :stylesheet) unless rule_node - at_root_node << rule_node - at_root_node - end - - def at_root_directive_list - return unless (first = tok(IDENT)) - arr = [first] - ss - while (e = tok(IDENT)) - arr << e - ss - end - arr - end - - def error_directive(start_pos) - node(Sass::Tree::ErrorNode.new(sass_script(:parse)), start_pos) - end - - # http://www.w3.org/TR/css3-conditional/ - def supports_directive(name, start_pos) - condition = expr!(:supports_condition) - node = Sass::Tree::SupportsNode.new(name, condition) - - tok!(/\{/) - node.has_children = true - block_contents(node, :directive) - tok!(/\}/) - - node(node, start_pos) - end - - def supports_condition - supports_negation || supports_operator || supports_interpolation - end - - def supports_negation - return unless tok(/not/i) - ss - Sass::Supports::Negation.new(expr!(:supports_condition_in_parens)) - end - - def supports_operator - cond = supports_condition_in_parens - return unless cond - while (op = tok(/and|or/i)) - ss - cond = Sass::Supports::Operator.new( - cond, expr!(:supports_condition_in_parens), op) - end - cond - end - - def supports_condition_in_parens - interp = supports_interpolation - return interp if interp - return unless tok(/\(/); ss - if (cond = supports_condition) - tok!(/\)/); ss - cond - else - name = sass_script(:parse) - tok!(/:/); ss - value = sass_script(:parse) - tok!(/\)/); ss - Sass::Supports::Declaration.new(name, value) - end - end - - def supports_declaration_condition - return unless tok(/\(/); ss - supports_declaration_body - end - - def supports_interpolation - interp = interpolation - return unless interp - ss - Sass::Supports::Interpolation.new(interp) - end - - def variable - return unless tok(/\$/) - start_pos = source_position - name = tok!(IDENT) - ss; tok!(/:/); ss - - expr = sass_script(:parse) - while tok(/!/) - flag_name = tok!(IDENT) - if flag_name == 'default' - guarded ||= true - elsif flag_name == 'global' - global ||= true - else - raise Sass::SyntaxError.new("Invalid flag \"!#{flag_name}\".", :line => @line) - end - ss - end - - result = Sass::Tree::VariableNode.new(name, expr, guarded, global) - node(result, start_pos) - end - - def operator - # Many of these operators (all except / and ,) - # are disallowed by the CSS spec, - # but they're included here for compatibility - # with some proprietary MS properties - str {ss if tok(/[\/,:.=]/)} - end - - def ruleset - start_pos = source_position - return unless (rules = almost_any_value) - block(node( - Sass::Tree::RuleNode.new(rules, range(start_pos)), start_pos), :ruleset) - end - - def block(node, context) - node.has_children = true - tok!(/\{/) - block_contents(node, context) - tok!(/\}/) - node - end - - # A block may contain declarations and/or rulesets - def block_contents(node, context) - block_given? ? yield : ss_comments(node) - node << (child = block_child(context)) - while tok(/;/) || has_children?(child) - block_given? ? yield : ss_comments(node) - node << (child = block_child(context)) - end - node - end - - def block_child(context) - return variable || directive if context == :function - return variable || directive || ruleset if context == :stylesheet - variable || directive || declaration_or_ruleset - end - - def has_children?(child_or_array) - return false unless child_or_array - return child_or_array.last.has_children if child_or_array.is_a?(Array) - child_or_array.has_children - end - - # When parsing the contents of a ruleset, it can be difficult to tell - # declarations apart from nested rulesets. Since we don't thoroughly parse - # selectors until after resolving interpolation, we can share a bunch of - # the parsing of the two, but we need to disambiguate them first. We use - # the following criteria: - # - # * If the entity doesn't start with an identifier followed by a colon, - # it's a selector. There are some additional mostly-unimportant cases - # here to support various declaration hacks. - # - # * If the colon is followed by another colon, it's a selector. - # - # * Otherwise, if the colon is followed by anything other than - # interpolation or a character that's valid as the beginning of an - # identifier, it's a declaration. - # - # * If the colon is followed by interpolation or a valid identifier, try - # parsing it as a declaration value. If this fails, backtrack and parse - # it as a selector. - # - # * If the declaration value value valid but is followed by "{", backtrack - # and parse it as a selector anyway. This ensures that ".foo:bar {" is - # always parsed as a selector and never as a property with nested - # properties beneath it. - def declaration_or_ruleset - start_pos = source_position - declaration = try_declaration - - if declaration.nil? - return unless (selector = almost_any_value) - elsif declaration.is_a?(Array) - selector = declaration - else - # Declaration should be a PropNode. - return declaration - end - - if (additional_selector = almost_any_value) - selector << additional_selector - end - - block(node( - Sass::Tree::RuleNode.new(merge(selector), range(start_pos)), start_pos), :ruleset) - end - - # Tries to parse a declaration, and returns the value parsed so far if it - # fails. - # - # This has three possible return types. It can return `nil`, indicating - # that parsing failed completely and the scanner hasn't moved forward at - # all. It can return an Array, indicating that parsing failed after - # consuming some text (possibly containing interpolation), which is - # returned. Or it can return a PropNode, indicating that parsing - # succeeded. - def try_declaration - # This allows the "*prop: val", ":prop: val", "#prop: val", and ".prop: - # val" hacks. - name_start_pos = source_position - if (s = tok(/[:\*\.]|\#(?!\{)/)) - name = [s, str {ss}] - return name unless (ident = interp_ident) - name << ident - else - return unless (name = interp_ident) - name = Array(name) - end - - if (comment = tok(COMMENT)) - name << comment - end - name_end_pos = source_position - - mid = [str {ss}] - return name + mid unless tok(/:/) - mid << ':' - return name + mid + [':'] if tok(/:/) - mid << str {ss} - post_colon_whitespace = !mid.last.empty? - could_be_selector = !post_colon_whitespace && (tok?(IDENT_START) || tok?(INTERP_START)) - - value_start_pos = source_position - value = nil - error = catch_error do - value = value! - if tok?(/\{/) - # Properties that are ambiguous with selectors can't have additional - # properties nested beneath them. - tok!(/;/) if could_be_selector - elsif !tok?(/[;{}]/) - # We want an exception if there's no valid end-of-property character - # exists, but we don't want to consume it if it does. - tok!(/[;{}]/) - end - end - - if error - rethrow error unless could_be_selector - - # If the value would be followed by a semicolon, it's definitely - # supposed to be a property, not a selector. - additional_selector = almost_any_value - rethrow error if tok?(/;/) - - return name + mid + (additional_selector || []) - end - - value_end_pos = source_position - ss - require_block = tok?(/\{/) - - node = node(Sass::Tree::PropNode.new(name.flatten.compact, value, :new), - name_start_pos, value_end_pos) - node.name_source_range = range(name_start_pos, name_end_pos) - node.value_source_range = range(value_start_pos, value_end_pos) - - return node unless require_block - nested_properties! node - end - - # This production is similar to the CSS [``][any-value] - # production, but as the name implies, not quite the same. It's meant to - # consume values that could be a selector, an expression, or a combination - # of both. It respects strings and comments and supports interpolation. It - # will consume up to "{", "}", ";", or "!". - # - # [any-value]: http://dev.w3.org/csswg/css-variables/#typedef-any-value - # - # Values consumed by this production will usually be parsed more - # thoroughly once interpolation has been resolved. - def almost_any_value - return unless (tok = almost_any_value_token) - sel = [tok] - while (tok = almost_any_value_token) - sel << tok - end - merge(sel) - end - - def almost_any_value_token - tok(%r{ - ( - \\. - | - (?!url\() - [^"'/\#!;\{\}] # " - | - /(?![/*]) - | - \#(?!\{) - | - !(?![a-z]) # TODO: never consume "!" when issue 1126 is fixed. - )+ - }xi) || tok(COMMENT) || tok(SINGLE_LINE_COMMENT) || interp_string || interp_uri || - interpolation(:warn_for_color) - end - - def declaration - # This allows the "*prop: val", ":prop: val", "#prop: val", and ".prop: - # val" hacks. - name_start_pos = source_position - if (s = tok(/[:\*\.]|\#(?!\{)/)) - name = [s, str {ss}, *expr!(:interp_ident)] - else - return unless (name = interp_ident) - name = Array(name) - end - - if (comment = tok(COMMENT)) - name << comment - end - name_end_pos = source_position - ss - - tok!(/:/) - ss - value_start_pos = source_position - value = value! - value_end_pos = source_position - ss - require_block = tok?(/\{/) - - node = node(Sass::Tree::PropNode.new(name.flatten.compact, value, :new), - name_start_pos, value_end_pos) - node.name_source_range = range(name_start_pos, name_end_pos) - node.value_source_range = range(value_start_pos, value_end_pos) - - return node unless require_block - nested_properties! node - end - - def value! - if tok?(/\{/) - str = Sass::Script::Tree::Literal.new(Sass::Script::Value::String.new("")) - str.line = source_position.line - str.source_range = range(source_position) - return str - end - - start_pos = source_position - # This is a bit of a dirty trick: - # if the value is completely static, - # we don't parse it at all, and instead return a plain old string - # containing the value. - # This results in a dramatic speed increase. - if (val = tok(STATIC_VALUE, true)) - str = Sass::Script::Tree::Literal.new(Sass::Script::Value::String.new(val.strip)) - str.line = start_pos.line - str.source_range = range(start_pos) - return str - end - sass_script(:parse) - end - - def nested_properties!(node) - @expected = 'expression (e.g. 1px, bold) or "{"' - block(node, :property) - end - - def expr(allow_var = true) - t = term(allow_var) - return unless t - res = [t, str {ss}] - - while (o = operator) && (t = term(allow_var)) - res << o << t << str {ss} - end - - res.flatten - end - - def term(allow_var) - e = tok(NUMBER) || - interp_uri || - function(allow_var) || - interp_string || - tok(UNICODERANGE) || - interp_ident || - tok(HEXCOLOR) || - (allow_var && var_expr) - return e if e - - op = tok(/[+-]/) - return unless op - @expected = "number or function" - [op, - tok(NUMBER) || function(allow_var) || (allow_var && var_expr) || expr!(:interpolation)] - end - - def function(allow_var) - name = tok(FUNCTION) - return unless name - if name == "expression(" || name == "calc(" - str, _ = Sass::Shared.balance(@scanner, ?(, ?), 1) - [name, str] - else - [name, str {ss}, expr(allow_var), tok!(/\)/)] - end - end - - def var_expr - return unless tok(/\$/) - line = @line - var = Sass::Script::Tree::Variable.new(tok!(IDENT)) - var.line = line - var - end - - def interpolation(warn_for_color = false) - return unless tok(INTERP_START) - sass_script(:parse_interpolated, warn_for_color) - end - - def string - return unless tok(STRING) - Sass::Script::Value::String.value(@scanner[1] || @scanner[2]) - end - - def interp_string - _interp_string(:double) || _interp_string(:single) - end - - def interp_uri - _interp_string(:uri) - end - - def _interp_string(type) - start = tok(Sass::Script::Lexer::STRING_REGULAR_EXPRESSIONS[type][false]) - return unless start - res = [start] - - mid_re = Sass::Script::Lexer::STRING_REGULAR_EXPRESSIONS[type][true] - # @scanner[2].empty? means we've started an interpolated section - while @scanner[2] == '#{' - @scanner.pos -= 2 # Don't consume the #{ - res.last.slice!(-2..-1) - res << expr!(:interpolation) << tok(mid_re) - end - res - end - - def interp_ident(start = IDENT) - val = tok(start) || interpolation(:warn_for_color) || tok(IDENT_HYPHEN_INTERP, true) - return unless val - res = [val] - while (val = tok(NAME) || interpolation(:warn_for_color)) - res << val - end - res - end - - def interp_ident_or_var - id = interp_ident - return id if id - var = var_expr - return [var] if var - end - - def str - @strs.push "" - yield - @strs.last - ensure - @strs.pop - end - - def str? - pos = @scanner.pos - line = @line - offset = @offset - @strs.push "" - throw_error {yield} && @strs.last - rescue Sass::SyntaxError - @scanner.pos = pos - @line = line - @offset = offset - nil - ensure - @strs.pop - end - - def node(node, start_pos, end_pos = source_position) - node.line = start_pos.line - node.source_range = range(start_pos, end_pos) - node - end - - @sass_script_parser = Class.new(Sass::Script::Parser) - @sass_script_parser.send(:include, ScriptParser) - - class << self - # @private - attr_accessor :sass_script_parser - end - - def sass_script(*args) - parser = self.class.sass_script_parser.new(@scanner, @line, @offset, - :filename => @filename, :importer => @importer) - result = parser.send(*args) - unless @strs.empty? - # Convert to CSS manually so that comments are ignored. - src = result.to_sass - @strs.each {|s| s << src} - end - @line = parser.line - @offset = parser.offset - result - rescue Sass::SyntaxError => e - throw(:_sass_parser_error, true) if @throw_error - raise e - end - - def merge(arr) - arr && Sass::Util.merge_adjacent_strings([arr].flatten) - end - - EXPR_NAMES = { - :media_query => "media query (e.g. print, screen, print and screen)", - :media_query_list => "media query (e.g. print, screen, print and screen)", - :media_expr => "media expression (e.g. (min-device-width: 800px))", - :at_root_query => "@at-root query (e.g. (without: media))", - :at_root_directive_list => '* or identifier', - :pseudo_args => "expression (e.g. fr, 2n+1)", - :interp_ident => "identifier", - :qualified_name => "identifier", - :expr => "expression (e.g. 1px, bold)", - :selector_comma_sequence => "selector", - :string => "string", - :import_arg => "file to import (string or url())", - :moz_document_function => "matching function (e.g. url-prefix(), domain())", - :supports_condition => "@supports condition (e.g. (display: flexbox))", - :supports_condition_in_parens => "@supports condition (e.g. (display: flexbox))", - :a_n_plus_b => "An+B expression", - :keyframes_selector_component => "from, to, or a percentage", - :keyframes_selector => "keyframes selector (e.g. 10%)" - } - - TOK_NAMES = Sass::Util.to_hash(Sass::SCSS::RX.constants.map do |c| - [Sass::SCSS::RX.const_get(c), c.downcase] - end).merge( - IDENT => "identifier", - /[;{}]/ => '";"', - /\b(without|with)\b/ => '"with" or "without"' - ) - - def tok?(rx) - @scanner.match?(rx) - end - - def expr!(name) - e = send(name) - return e if e - expected(EXPR_NAMES[name] || name.to_s) - end - - def tok!(rx) - t = tok(rx) - return t if t - name = TOK_NAMES[rx] - - unless name - # Display basic regexps as plain old strings - source = rx.source.gsub(/\\\//, '/') - string = rx.source.gsub(/\\(.)/, '\1') - name = source == Regexp.escape(string) ? string.inspect : rx.inspect - end - - expected(name) - end - - def expected(name) - throw(:_sass_parser_error, true) if @throw_error - self.class.expected(@scanner, @expected || name, @line) - end - - def err(msg) - throw(:_sass_parser_error, true) if @throw_error - raise Sass::SyntaxError.new(msg, :line => @line) - end - - def throw_error - old_throw_error, @throw_error = @throw_error, false - yield - ensure - @throw_error = old_throw_error - end - - def catch_error(&block) - old_throw_error, @throw_error = @throw_error, true - pos = @scanner.pos - line = @line - offset = @offset - expected = @expected - if catch(:_sass_parser_error) {yield; false} - @scanner.pos = pos - @line = line - @offset = offset - @expected = expected - {:pos => pos, :line => line, :expected => @expected, :block => block} - end - ensure - @throw_error = old_throw_error - end - - def rethrow(err) - if @throw_error - throw :_sass_parser_error, err - else - @scanner = Sass::Util::MultibyteStringScanner.new(@scanner.string) - @scanner.pos = err[:pos] - @line = err[:line] - @expected = err[:expected] - err[:block].call - end - end - - # @private - def self.expected(scanner, expected, line) - pos = scanner.pos - - after = scanner.string[0...pos] - # Get rid of whitespace between pos and the last token, - # but only if there's a newline in there - after.gsub!(/\s*\n\s*$/, '') - # Also get rid of stuff before the last newline - after.gsub!(/.*\n/, '') - after = "..." + after[-15..-1] if after.size > 18 - - was = scanner.rest.dup - # Get rid of whitespace between pos and the next token, - # but only if there's a newline in there - was.gsub!(/^\s*\n\s*/, '') - # Also get rid of stuff after the next newline - was.gsub!(/\n.*/, '') - was = was[0...15] + "..." if was.size > 18 - - raise Sass::SyntaxError.new( - "Invalid CSS after \"#{after}\": expected #{expected}, was \"#{was}\"", - :line => line) - end - - # Avoid allocating lots of new strings for `#tok`. - # This is important because `#tok` is called all the time. - NEWLINE = "\n" - - def tok(rx, last_group_lookahead = false) - res = @scanner.scan(rx) - if res - # This fixes https://github.com/nex3/sass/issues/104, which affects - # Ruby 1.8.7 and REE. This fix is to replace the ?= zero-width - # positive lookahead operator in the Regexp (which matches without - # consuming the matched group), with a match that does consume the - # group, but then rewinds the scanner and removes the group from the - # end of the matched string. This fix makes the assumption that the - # matched group will always occur at the end of the match. - if last_group_lookahead && @scanner[-1] - @scanner.pos -= @scanner[-1].length - res.slice!(-@scanner[-1].length..-1) - end - - newline_count = res.count(NEWLINE) - if newline_count > 0 - @line += newline_count - @offset = res[res.rindex(NEWLINE)..-1].size - else - @offset += res.size - end - - @expected = nil - if !@strs.empty? && rx != COMMENT && rx != SINGLE_LINE_COMMENT - @strs.each {|s| s << res} - end - res - end - end - - # Remove a vendor prefix from `str`. - def deprefix(str) - str.gsub(/^-[a-zA-Z0-9]+-/, '') - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss/rx.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss/rx.rb deleted file mode 100644 index 2226157..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss/rx.rb +++ /dev/null @@ -1,141 +0,0 @@ -# -*- coding: utf-8 -*- -module Sass - module SCSS - # A module containing regular expressions used - # for lexing tokens in an SCSS document. - # Most of these are taken from [the CSS3 spec](http://www.w3.org/TR/css3-syntax/#lexical), - # although some have been modified for various reasons. - module RX - # Takes a string and returns a CSS identifier - # that will have the value of the given string. - # - # @param str [String] The string to escape - # @return [String] The escaped string - def self.escape_ident(str) - return "" if str.empty? - return "\\#{str}" if str == '-' || str == '_' - out = "" - value = str.dup - out << value.slice!(0...1) if value =~ /^[-_]/ - if value[0...1] =~ NMSTART - out << value.slice!(0...1) - else - out << escape_char(value.slice!(0...1)) - end - out << value.gsub(/[^a-zA-Z0-9_-]/) {|c| escape_char c} - out - end - - # Escapes a single character for a CSS identifier. - # - # @param c [String] The character to escape. Should have length 1 - # @return [String] The escaped character - # @private - def self.escape_char(c) - return "\\%06x" % Sass::Util.ord(c) unless c =~ /[ -\/:-~]/ - "\\#{c}" - end - - # Creates a Regexp from a plain text string, - # escaping all significant characters. - # - # @param str [String] The text of the regexp - # @param flags [Fixnum] Flags for the created regular expression - # @return [Regexp] - # @private - def self.quote(str, flags = 0) - Regexp.new(Regexp.quote(str), flags) - end - - H = /[0-9a-fA-F]/ - NL = /\n|\r\n|\r|\f/ - UNICODE = /\\#{H}{1,6}[ \t\r\n\f]?/ - s = if Sass::Util.ruby1_8? - '\200-\377' - elsif Sass::Util.macruby? - '\u0080-\uD7FF\uE000-\uFFFD\U00010000-\U0010FFFF' - else - '\u{80}-\u{D7FF}\u{E000}-\u{FFFD}\u{10000}-\u{10FFFF}' - end - NONASCII = /[#{s}]/ - ESCAPE = /#{UNICODE}|\\[ -~#{s}]/ - NMSTART = /[_a-zA-Z]|#{NONASCII}|#{ESCAPE}/ - NMCHAR = /[a-zA-Z0-9_-]|#{NONASCII}|#{ESCAPE}/ - STRING1 = /\"((?:[^\n\r\f\\"]|\\#{NL}|#{ESCAPE})*)\"/ - STRING2 = /\'((?:[^\n\r\f\\']|\\#{NL}|#{ESCAPE})*)\'/ - - IDENT = /-*#{NMSTART}#{NMCHAR}*/ - NAME = /#{NMCHAR}+/ - NUM = // - STRING = /#{STRING1}|#{STRING2}/ - URLCHAR = /[#%&*-~]|#{NONASCII}|#{ESCAPE}/ - URL = /(#{URLCHAR}*)/ - W = /[ \t\r\n\f]*/ - VARIABLE = /(\$)(#{Sass::SCSS::RX::IDENT})/ - - # This is more liberal than the spec's definition, - # but that definition didn't work well with the greediness rules - RANGE = /(?:#{H}|\?){1,6}/ - - ## - - S = /[ \t\r\n\f]+/ - - COMMENT = %r{/\*([^*]|\*+[^/*])*\**\*/} - SINGLE_LINE_COMMENT = %r{//.*(\n[ \t]*//.*)*} - - CDO = quote("") - INCLUDES = quote("~=") - DASHMATCH = quote("|=") - PREFIXMATCH = quote("^=") - SUFFIXMATCH = quote("$=") - SUBSTRINGMATCH = quote("*=") - - HASH = /##{NAME}/ - - IMPORTANT = /!#{W}important/i - - UNITLESS_NUMBER = /(?:[0-9]+|[0-9]*\.[0-9]+)(?:[eE][+-]?\d+)?/ - NUMBER = /#{UNITLESS_NUMBER}(?:#{IDENT}|%)?/ - PERCENTAGE = /#{UNITLESS_NUMBER}%/ - - URI = /url\(#{W}(?:#{STRING}|#{URL})#{W}\)/i - FUNCTION = /#{IDENT}\(/ - - UNICODERANGE = /u\+(?:#{H}{1,6}-#{H}{1,6}|#{RANGE})/i - - # Defined in http://www.w3.org/TR/css3-selectors/#lex - PLUS = /#{W}\+/ - GREATER = /#{W}>/ - TILDE = /#{W}~/ - NOT = quote(":not(", Regexp::IGNORECASE) - - # Defined in https://developer.mozilla.org/en/CSS/@-moz-document as a - # non-standard version of http://www.w3.org/TR/css3-conditional/ - URL_PREFIX = /url-prefix\(#{W}(?:#{STRING}|#{URL})#{W}\)/i - DOMAIN = /domain\(#{W}(?:#{STRING}|#{URL})#{W}\)/i - - # Custom - HEXCOLOR = /\#[0-9a-fA-F]+/ - INTERP_START = /#\{/ - ANY = /:(-[-\w]+-)?any\(/i - OPTIONAL = /!#{W}optional/i - IDENT_START = /-|#{NMSTART}/ - - # A unit is like an IDENT, but disallows a hyphen followed by a digit. - # This allows "1px-2px" to be interpreted as subtraction rather than "1" - # with the unit "px-2px". It also allows "%". - UNIT = /-?#{NMSTART}(?:[a-zA-Z0-9_]|#{NONASCII}|#{ESCAPE}|-(?!\d))*|%/ - - IDENT_HYPHEN_INTERP = /-(#\{)/ - STRING1_NOINTERP = /\"((?:[^\n\r\f\\"#]|#(?!\{)|#{ESCAPE})*)\"/ - STRING2_NOINTERP = /\'((?:[^\n\r\f\\'#]|#(?!\{)|#{ESCAPE})*)\'/ - STRING_NOINTERP = /#{STRING1_NOINTERP}|#{STRING2_NOINTERP}/ - - STATIC_COMPONENT = /#{IDENT}|#{STRING_NOINTERP}|#{HEXCOLOR}|[+-]?#{NUMBER}|\!important/i - STATIC_VALUE = /#{STATIC_COMPONENT}(\s*[\s,\/]\s*#{STATIC_COMPONENT})*([;}])/i - STATIC_SELECTOR = /(#{NMCHAR}|[ \t]|[,>+*]|[:#.]#{NMSTART}){1,50}([{])/i - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss/script_lexer.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss/script_lexer.rb deleted file mode 100644 index 777485f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss/script_lexer.rb +++ /dev/null @@ -1,15 +0,0 @@ -module Sass - module SCSS - # A mixin for subclasses of {Sass::Script::Lexer} - # that makes them usable by {SCSS::Parser} to parse SassScript. - # In particular, the lexer doesn't support `!` for a variable prefix. - module ScriptLexer - private - - def variable - return [:raw, "!important"] if scan(Sass::SCSS::RX::IMPORTANT) - _variable(Sass::SCSS::RX::VARIABLE) - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss/script_parser.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss/script_parser.rb deleted file mode 100644 index e5f64b2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss/script_parser.rb +++ /dev/null @@ -1,25 +0,0 @@ -module Sass - module SCSS - # A mixin for subclasses of {Sass::Script::Parser} - # that makes them usable by {SCSS::Parser} to parse SassScript. - # In particular, the parser won't raise an error - # when there's more content in the lexer once lexing is done. - # In addition, the parser doesn't support `!` for a variable prefix. - module ScriptParser - private - - # @private - def lexer_class - klass = Class.new(super) - klass.send(:include, ScriptLexer) - klass - end - - # Instead of raising an error when the parser is done, - # rewind the StringScanner so that it hasn't consumed the final token. - def assert_done - @lexer.unpeek! - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss/static_parser.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss/static_parser.rb deleted file mode 100644 index 013fcab..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/scss/static_parser.rb +++ /dev/null @@ -1,368 +0,0 @@ -require 'sass/script/css_parser' - -module Sass - module SCSS - # A parser for a static SCSS tree. - # Parses with SCSS extensions, like nested rules and parent selectors, - # but without dynamic SassScript. - # This is useful for e.g. \{#parse\_selector parsing selectors} - # after resolving the interpolation. - class StaticParser < Parser - # Parses the text as a selector. - # - # @param filename [String, nil] The file in which the selector appears, - # or nil if there is no such file. - # Used for error reporting. - # @return [Selector::CommaSequence] The parsed selector - # @raise [Sass::SyntaxError] if there's a syntax error in the selector - def parse_selector - init_scanner! - seq = expr!(:selector_comma_sequence) - expected("selector") unless @scanner.eos? - seq.line = @line - seq.filename = @filename - seq - end - - # Parses a static at-root query. - # - # @return [(Symbol, Array)] The type of the query - # (`:with` or `:without`) and the values that are being filtered. - # @raise [Sass::SyntaxError] if there's a syntax error in the query, - # or if it doesn't take up the entire input string. - def parse_static_at_root_query - init_scanner! - tok!(/\(/); ss - type = tok!(/\b(without|with)\b/).to_sym; ss - tok!(/:/); ss - directives = expr!(:at_root_directive_list); ss - tok!(/\)/) - expected("@at-root query list") unless @scanner.eos? - return type, directives - end - - def parse_keyframes_selector - init_scanner! - sel = expr!(:keyframes_selector) - expected("keyframes selector") unless @scanner.eos? - sel - end - - # @see Parser#initialize - # @param allow_parent_ref [Boolean] Whether to allow the - # parent-reference selector, `&`, when parsing the document. - # @comment - # rubocop:disable ParameterLists - def initialize(str, filename, importer, line = 1, offset = 1, allow_parent_ref = true) - # rubocop:enable ParameterLists - super(str, filename, importer, line, offset) - @allow_parent_ref = allow_parent_ref - end - - private - - def moz_document_function - val = tok(URI) || tok(URL_PREFIX) || tok(DOMAIN) || function(!:allow_var) - return unless val - ss - [val] - end - - def variable; nil; end - def script_value; nil; end - def interpolation(warn_for_color = false); nil; end - def var_expr; nil; end - def interp_string; (s = tok(STRING)) && [s]; end - def interp_uri; (s = tok(URI)) && [s]; end - def interp_ident(ident = IDENT); (s = tok(ident)) && [s]; end - def use_css_import?; true; end - - def special_directive(name, start_pos) - return unless %w[media import charset -moz-document].include?(name) - super - end - - def selector_comma_sequence - sel = selector - return unless sel - selectors = [sel] - ws = '' - while tok(/,/) - ws << str {ss} - if (sel = selector) - selectors << sel - if ws.include?("\n") - selectors[-1] = Selector::Sequence.new(["\n"] + selectors.last.members) - end - ws = '' - end - end - Selector::CommaSequence.new(selectors) - end - - def selector_string - sel = selector - return unless sel - sel.to_s - end - - def selector - start_pos = source_position - # The combinator here allows the "> E" hack - val = combinator || simple_selector_sequence - return unless val - nl = str {ss}.include?("\n") - res = [] - res << val - res << "\n" if nl - - while (val = combinator || simple_selector_sequence) - res << val - res << "\n" if str {ss}.include?("\n") - end - seq = Selector::Sequence.new(res.compact) - - if seq.members.any? {|sseq| sseq.is_a?(Selector::SimpleSequence) && sseq.subject?} - location = " of #{@filename}" if @filename - Sass::Util.sass_warn < e - e.message << "\n\n\"#{sel}\" may only be used at the beginning of a compound selector." - raise e - end - end - - Selector::SimpleSequence.new(res, tok(/!/), range(start_pos)) - end - - def parent_selector - return unless @allow_parent_ref && tok(/&/) - Selector::Parent.new(tok(NAME)) - end - - def class_selector - return unless tok(/\./) - @expected = "class name" - Selector::Class.new(tok!(IDENT)) - end - - def id_selector - return unless tok(/#(?!\{)/) - @expected = "id name" - Selector::Id.new(tok!(NAME)) - end - - def placeholder_selector - return unless tok(/%/) - @expected = "placeholder name" - Selector::Placeholder.new(tok!(IDENT)) - end - - def element_name - ns, name = Sass::Util.destructure(qualified_name(:allow_star_name)) - return unless ns || name - - if name == '*' - Selector::Universal.new(ns) - else - Selector::Element.new(name, ns) - end - end - - def qualified_name(allow_star_name = false) - name = tok(IDENT) || tok(/\*/) || (tok?(/\|/) && "") - return unless name - return nil, name unless tok(/\|/) - - return name, tok!(IDENT) unless allow_star_name - @expected = "identifier or *" - return name, tok(IDENT) || tok!(/\*/) - end - - def attrib - return unless tok(/\[/) - ss - ns, name = attrib_name! - ss - - op = tok(/=/) || - tok(INCLUDES) || - tok(DASHMATCH) || - tok(PREFIXMATCH) || - tok(SUFFIXMATCH) || - tok(SUBSTRINGMATCH) - if op - @expected = "identifier or string" - ss - val = tok(IDENT) || tok!(STRING) - ss - end - flags = tok(IDENT) || tok(STRING) - tok!(/\]/) - - Selector::Attribute.new(name, ns, op, val, flags) - end - - def attrib_name! - if (name_or_ns = tok(IDENT)) - # E, E|E - if tok(/\|(?!=)/) - ns = name_or_ns - name = tok(IDENT) - else - name = name_or_ns - end - else - # *|E or |E - ns = tok(/\*/) || "" - tok!(/\|/) - name = tok!(IDENT) - end - return ns, name - end - - SELECTOR_PSEUDO_CLASSES = %w[not matches current any has host host-context].to_set - - PREFIXED_SELECTOR_PSEUDO_CLASSES = %w[nth-child nth-last-child].to_set - - def pseudo - s = tok(/::?/) - return unless s - @expected = "pseudoclass or pseudoelement" - name = tok!(IDENT) - if tok(/\(/) - ss - deprefixed = deprefix(name) - if s == ':' && SELECTOR_PSEUDO_CLASSES.include?(deprefixed) - sel = selector_comma_sequence - elsif s == ':' && PREFIXED_SELECTOR_PSEUDO_CLASSES.include?(deprefixed) - arg, sel = prefixed_selector_pseudo - else - arg = expr!(:pseudo_args) - end - - tok!(/\)/) - end - Selector::Pseudo.new(s == ':' ? :class : :element, name, arg, sel) - end - - def pseudo_args - arg = expr!(:pseudo_expr) - while tok(/,/) - arg << ',' << str {ss} - arg.concat expr!(:pseudo_expr) - end - arg - end - - def pseudo_expr - res = pseudo_expr_token - return unless res - res << str {ss} - while (e = pseudo_expr_token) - res << e << str {ss} - end - res - end - - def pseudo_expr_token - tok(PLUS) || tok(/[-*]/) || tok(NUMBER) || tok(STRING) || tok(IDENT) - end - - def prefixed_selector_pseudo - prefix = str do - expr = str {expr!(:a_n_plus_b)} - ss - return expr, nil unless tok(/of/) - ss - end - return prefix, expr!(:selector_comma_sequence) - end - - def a_n_plus_b - if (parity = tok(/even|odd/i)) - return parity - end - - if tok(/[+-]?[0-9]+/) - ss - return true unless tok(/n/) - else - return unless tok(/[+-]?n/i) - end - ss - - return true unless tok(/[+-]/) - ss - @expected = "number" - tok!(/[0-9]+/) - true - end - - def keyframes_selector - ss - str do - return unless keyframes_selector_component - ss - while tok(/,/) - ss - expr!(:keyframes_selector_component) - ss - end - end - end - - def keyframes_selector_component - tok(IDENT) || tok(PERCENTAGE) - end - - @sass_script_parser = Class.new(Sass::Script::CssParser) - @sass_script_parser.send(:include, ScriptParser) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector.rb deleted file mode 100644 index 752491b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector.rb +++ /dev/null @@ -1,326 +0,0 @@ -require 'sass/selector/simple' -require 'sass/selector/abstract_sequence' -require 'sass/selector/comma_sequence' -require 'sass/selector/pseudo' -require 'sass/selector/sequence' -require 'sass/selector/simple_sequence' - -module Sass - # A namespace for nodes in the parse tree for selectors. - # - # {CommaSequence} is the toplevel selector, - # representing a comma-separated sequence of {Sequence}s, - # such as `foo bar, baz bang`. - # {Sequence} is the next level, - # representing {SimpleSequence}s separated by combinators (e.g. descendant or child), - # such as `foo bar` or `foo > bar baz`. - # {SimpleSequence} is a sequence of selectors that all apply to a single element, - # such as `foo.bar[attr=val]`. - # Finally, {Simple} is the superclass of the simplest selectors, - # such as `.foo` or `#bar`. - module Selector - # The base used for calculating selector specificity. The spec says this - # should be "sufficiently high"; it's extremely unlikely that any single - # selector sequence will contain 1,000 simple selectors. - SPECIFICITY_BASE = 1_000 - - # A parent-referencing selector (`&` in Sass). - # The function of this is to be replaced by the parent selector - # in the nested hierarchy. - class Parent < Simple - # The identifier following the `&`. `nil` indicates no suffix. - # - # @return [String, nil] - attr_reader :suffix - - # @param name [String, nil] See \{#suffix} - def initialize(suffix = nil) - @suffix = suffix - end - - # @see Selector#to_s - def to_s - "&" + (@suffix || '') - end - - # Always raises an exception. - # - # @raise [Sass::SyntaxError] Parent selectors should be resolved before unification - # @see Selector#unify - def unify(sels) - raise Sass::SyntaxError.new("[BUG] Cannot unify parent selectors.") - end - end - - # A class selector (e.g. `.foo`). - class Class < Simple - # The class name. - # - # @return [String] - attr_reader :name - - # @param name [String] The class name - def initialize(name) - @name = name - end - - # @see Selector#to_s - def to_s - "." + @name - end - - # @see AbstractSequence#specificity - def specificity - SPECIFICITY_BASE - end - end - - # An id selector (e.g. `#foo`). - class Id < Simple - # The id name. - # - # @return [String] - attr_reader :name - - # @param name [String] The id name - def initialize(name) - @name = name - end - - # @see Selector#to_s - def to_s - "#" + @name - end - - # Returns `nil` if `sels` contains an {Id} selector - # with a different name than this one. - # - # @see Selector#unify - def unify(sels) - return if sels.any? {|sel2| sel2.is_a?(Id) && name != sel2.name} - super - end - - # @see AbstractSequence#specificity - def specificity - SPECIFICITY_BASE**2 - end - end - - # A placeholder selector (e.g. `%foo`). - # This exists to be replaced via `@extend`. - # Rulesets using this selector will not be printed, but can be extended. - # Otherwise, this acts just like a class selector. - class Placeholder < Simple - # The placeholder name. - # - # @return [String] - attr_reader :name - - # @param name [String] The placeholder name - def initialize(name) - @name = name - end - - # @see Selector#to_s - def to_s - "%" + @name - end - - # @see AbstractSequence#specificity - def specificity - SPECIFICITY_BASE - end - end - - # A universal selector (`*` in CSS). - class Universal < Simple - # The selector namespace. `nil` means the default namespace, `""` means no - # namespace, `"*"` means any namespace. - # - # @return [String, nil] - attr_reader :namespace - - # @param namespace [String, nil] See \{#namespace} - def initialize(namespace) - @namespace = namespace - end - - # @see Selector#to_s - def to_s - @namespace ? "#{@namespace}|*" : "*" - end - - # Unification of a universal selector is somewhat complicated, - # especially when a namespace is specified. - # If there is no namespace specified - # or any namespace is specified (namespace `"*"`), - # then `sel` is returned without change - # (unless it's empty, in which case `"*"` is required). - # - # If a namespace is specified - # but `sel` does not specify a namespace, - # then the given namespace is applied to `sel`, - # either by adding this {Universal} selector - # or applying this namespace to an existing {Element} selector. - # - # If both this selector *and* `sel` specify namespaces, - # those namespaces are unified via {Simple#unify_namespaces} - # and the unified namespace is used, if possible. - # - # @todo There are lots of cases that this documentation specifies; - # make sure we thoroughly test **all of them**. - # @todo Keep track of whether a default namespace has been declared - # and handle namespace-unspecified selectors accordingly. - # @todo If any branch of a CommaSequence ends up being just `"*"`, - # then all other branches should be eliminated - # - # @see Selector#unify - def unify(sels) - name = - case sels.first - when Universal; :universal - when Element; sels.first.name - else - return [self] + sels unless namespace.nil? || namespace == '*' - return sels unless sels.empty? - return [self] - end - - ns, accept = unify_namespaces(namespace, sels.first.namespace) - return unless accept - [name == :universal ? Universal.new(ns) : Element.new(name, ns)] + sels[1..-1] - end - - # @see AbstractSequence#specificity - def specificity - 0 - end - end - - # An element selector (e.g. `h1`). - class Element < Simple - # The element name. - # - # @return [String] - attr_reader :name - - # The selector namespace. `nil` means the default namespace, `""` means no - # namespace, `"*"` means any namespace. - # - # @return [String, nil] - attr_reader :namespace - - # @param name [String] The element name - # @param namespace [String, nil] See \{#namespace} - def initialize(name, namespace) - @name = name - @namespace = namespace - end - - # @see Selector#to_s - def to_s - @namespace ? "#{@namespace}|#{@name}" : @name - end - - # Unification of an element selector is somewhat complicated, - # especially when a namespace is specified. - # First, if `sel` contains another {Element} with a different \{#name}, - # then the selectors can't be unified and `nil` is returned. - # - # Otherwise, if `sel` doesn't specify a namespace, - # or it specifies any namespace (via `"*"`), - # then it's returned with this element selector - # (e.g. `.foo` becomes `a.foo` or `svg|a.foo`). - # Similarly, if this selector doesn't specify a namespace, - # the namespace from `sel` is used. - # - # If both this selector *and* `sel` specify namespaces, - # those namespaces are unified via {Simple#unify_namespaces} - # and the unified namespace is used, if possible. - # - # @todo There are lots of cases that this documentation specifies; - # make sure we thoroughly test **all of them**. - # @todo Keep track of whether a default namespace has been declared - # and handle namespace-unspecified selectors accordingly. - # - # @see Selector#unify - def unify(sels) - case sels.first - when Universal; - when Element; return unless name == sels.first.name - else return [self] + sels - end - - ns, accept = unify_namespaces(namespace, sels.first.namespace) - return unless accept - [Element.new(name, ns)] + sels[1..-1] - end - - # @see AbstractSequence#specificity - def specificity - 1 - end - end - - # An attribute selector (e.g. `[href^="http://"]`). - class Attribute < Simple - # The attribute name. - # - # @return [Array] - attr_reader :name - - # The attribute namespace. `nil` means the default namespace, `""` means - # no namespace, `"*"` means any namespace. - # - # @return [String, nil] - attr_reader :namespace - - # The matching operator, e.g. `"="` or `"^="`. - # - # @return [String] - attr_reader :operator - - # The right-hand side of the operator. - # - # @return [String] - attr_reader :value - - # Flags for the attribute selector (e.g. `i`). - # - # @return [String] - attr_reader :flags - - # @param name [String] The attribute name - # @param namespace [String, nil] See \{#namespace} - # @param operator [String] The matching operator, e.g. `"="` or `"^="` - # @param value [String] See \{#value} - # @param flags [String] See \{#flags} - # @comment - # rubocop:disable ParameterLists - def initialize(name, namespace, operator, value, flags) - # rubocop:enable ParameterLists - @name = name - @namespace = namespace - @operator = operator - @value = value - @flags = flags - end - - # @see Selector#to_s - def to_s - res = "[" - res << @namespace << "|" if @namespace - res << @name - res << @operator << @value if @value - res << " " << @flags if @flags - res << "]" - end - - # @see AbstractSequence#specificity - def specificity - SPECIFICITY_BASE - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector/abstract_sequence.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector/abstract_sequence.rb deleted file mode 100644 index 2761715..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector/abstract_sequence.rb +++ /dev/null @@ -1,109 +0,0 @@ -module Sass - module Selector - # The abstract parent class of the various selector sequence classes. - # - # All subclasses should implement a `members` method that returns an array - # of object that respond to `#line=` and `#filename=`, as well as a `to_s` - # method that returns the string representation of the selector. - class AbstractSequence - # The line of the Sass template on which this selector was declared. - # - # @return [Fixnum] - attr_reader :line - - # The name of the file in which this selector was declared. - # - # @return [String, nil] - attr_reader :filename - - # Sets the line of the Sass template on which this selector was declared. - # This also sets the line for all child selectors. - # - # @param line [Fixnum] - # @return [Fixnum] - def line=(line) - members.each {|m| m.line = line} - @line = line - end - - # Sets the name of the file in which this selector was declared, - # or `nil` if it was not declared in a file (e.g. on stdin). - # This also sets the filename for all child selectors. - # - # @param filename [String, nil] - # @return [String, nil] - def filename=(filename) - members.each {|m| m.filename = filename} - @filename = filename - end - - # Returns a hash code for this sequence. - # - # Subclasses should define `#_hash` rather than overriding this method, - # which automatically handles memoizing the result. - # - # @return [Fixnum] - def hash - @_hash ||= _hash - end - - # Checks equality between this and another object. - # - # Subclasses should define `#_eql?` rather than overriding this method, - # which handles checking class equality and hash equality. - # - # @param other [Object] The object to test equality against - # @return [Boolean] Whether or not this is equal to `other` - def eql?(other) - other.class == self.class && other.hash == hash && _eql?(other) - end - alias_method :==, :eql? - - # Whether or not this selector sequence contains a placeholder selector. - # Checks recursively. - def has_placeholder? - @has_placeholder ||= members.any? do |m| - next m.has_placeholder? if m.is_a?(AbstractSequence) - next m.selector && m.selector.has_placeholder? if m.is_a?(Pseudo) - m.is_a?(Placeholder) - end - end - - # Returns the selector string. - # - # @return [String] - def to_s - Sass::Util.abstract(self) - end - - # Returns the specificity of the selector. - # - # The base is given by {Sass::Selector::SPECIFICITY_BASE}. This can be a - # number or a range representing possible specificities. - # - # @return [Fixnum, Range] - def specificity - _specificity(members) - end - - protected - - def _specificity(arr) - min = 0 - max = 0 - arr.each do |m| - next if m.is_a?(String) - spec = m.specificity - if spec.is_a?(Range) - min += spec.begin - max += spec.end - else - min += spec - max += spec - end - end - min == max ? min : (min..max) - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector/comma_sequence.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector/comma_sequence.rb deleted file mode 100644 index 506af86..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector/comma_sequence.rb +++ /dev/null @@ -1,177 +0,0 @@ -module Sass - module Selector - # A comma-separated sequence of selectors. - class CommaSequence < AbstractSequence - # The comma-separated selector sequences - # represented by this class. - # - # @return [Array] - attr_reader :members - - # @param seqs [Array] See \{#members} - def initialize(seqs) - @members = seqs - end - - # Resolves the {Parent} selectors within this selector - # by replacing them with the given parent selector, - # handling commas appropriately. - # - # @param super_cseq [CommaSequence] The parent selector - # @param implicit_parent [Boolean] Whether the the parent - # selector should automatically be prepended to the resolved - # selector if it contains no parent refs. - # @return [CommaSequence] This selector, with parent references resolved - # @raise [Sass::SyntaxError] If a parent selector is invalid - def resolve_parent_refs(super_cseq, implicit_parent = true) - if super_cseq.nil? - if contains_parent_ref? - raise Sass::SyntaxError.new( - "Base-level rules cannot contain the parent-selector-referencing character '&'.") - end - return self - end - - CommaSequence.new(Sass::Util.flatten_vertically(@members.map do |seq| - seq.resolve_parent_refs(super_cseq, implicit_parent).members - end)) - end - - # Returns whether there's a {Parent} selector anywhere in this sequence. - # - # @return [Boolean] - def contains_parent_ref? - @members.any? {|sel| sel.contains_parent_ref?} - end - - # Non-destrucively extends this selector with the extensions specified in a hash - # (which should come from {Sass::Tree::Visitors::Cssize}). - # - # @todo Link this to the reference documentation on `@extend` - # when such a thing exists. - # - # @param extends [Sass::Util::SubsetMap{Selector::Simple => - # Sass::Tree::Visitors::Cssize::Extend}] - # The extensions to perform on this selector - # @param parent_directives [Array] - # The directives containing this selector. - # @param replace [Boolean] - # Whether to replace the original selector entirely or include - # it in the result. - # @param seen [Set>] - # The set of simple sequences that are currently being replaced. - # @param original [Boolean] - # Whether this is the original selector being extended, as opposed to - # the result of a previous extension that's being re-extended. - # @return [CommaSequence] A copy of this selector, - # with extensions made according to `extends` - def do_extend(extends, parent_directives = [], replace = false, seen = Set.new, - original = true) - CommaSequence.new(members.map do |seq| - seq.do_extend(extends, parent_directives, replace, seen, original) - end.flatten) - end - - # Returns whether or not this selector matches all elements - # that the given selector matches (as well as possibly more). - # - # @example - # (.foo).superselector?(.foo.bar) #=> true - # (.foo).superselector?(.bar) #=> false - # @param cseq [CommaSequence] - # @return [Boolean] - def superselector?(cseq) - cseq.members.all? {|seq1| members.any? {|seq2| seq2.superselector?(seq1)}} - end - - # Populates a subset map that can then be used to extend - # selectors. This registers an extension with this selector as - # the extender and `extendee` as the extendee. - # - # @param extends [Sass::Util::SubsetMap{Selector::Simple => - # Sass::Tree::Visitors::Cssize::Extend}] - # The subset map representing the extensions to perform. - # @param extendee [CommaSequence] The selector being extended. - # @param extend_node [Sass::Tree::ExtendNode] - # The node that caused this extension. - # @param parent_directives [Array] - # The parent directives containing `extend_node`. - # @raise [Sass::SyntaxError] if this extension is invalid. - def populate_extends(extends, extendee, extend_node = nil, parent_directives = []) - extendee.members.each do |seq| - if seq.members.size > 1 - raise Sass::SyntaxError.new("Can't extend #{seq}: can't extend nested selectors") - end - - sseq = seq.members.first - if !sseq.is_a?(Sass::Selector::SimpleSequence) - raise Sass::SyntaxError.new("Can't extend #{seq}: invalid selector") - elsif sseq.members.any? {|ss| ss.is_a?(Sass::Selector::Parent)} - raise Sass::SyntaxError.new("Can't extend #{seq}: can't extend parent selectors") - end - - sel = sseq.members - members.each do |member| - unless member.members.last.is_a?(Sass::Selector::SimpleSequence) - raise Sass::SyntaxError.new("#{member} can't extend: invalid selector") - end - - extends[sel] = Sass::Tree::Visitors::Cssize::Extend.new( - member, sel, extend_node, parent_directives, :not_found) - end - end - end - - # Unifies this with another comma selector to produce a selector - # that matches (a subset of) the intersection of the two inputs. - # - # @param other [CommaSequence] - # @return [CommaSequence, nil] The unified selector, or nil if unification failed. - # @raise [Sass::SyntaxError] If this selector cannot be unified. - # This will only ever occur when a dynamic selector, - # such as {Parent} or {Interpolation}, is used in unification. - # Since these selectors should be resolved - # by the time extension and unification happen, - # this exception will only ever be raised as a result of programmer error - def unify(other) - results = members.map {|seq1| other.members.map {|seq2| seq1.unify(seq2)}}.flatten.compact - results.empty? ? nil : CommaSequence.new(results.map {|cseq| cseq.members}.flatten) - end - - # Returns a SassScript representation of this selector. - # - # @return [Sass::Script::Value::List] - def to_sass_script - Sass::Script::Value::List.new(members.map do |seq| - Sass::Script::Value::List.new(seq.members.map do |component| - next if component == "\n" - Sass::Script::Value::String.new(component.to_s) - end.compact, :space) - end, :comma) - end - - # Returns a string representation of the sequence. - # This is basically the selector string. - # - # @return [String] - def inspect - members.map {|m| m.inspect}.join(", ") - end - - # @see AbstractSequence#to_s - def to_s - @members.join(", ").gsub(", \n", ",\n") - end - - private - - def _hash - members.hash - end - - def _eql?(other) - other.class == self.class && other.members.eql?(members) - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector/pseudo.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector/pseudo.rb deleted file mode 100644 index 047fa4b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector/pseudo.rb +++ /dev/null @@ -1,266 +0,0 @@ -module Sass - module Selector - # A pseudoclass (e.g. `:visited`) or pseudoelement (e.g. `::first-line`) - # selector. It can have arguments (e.g. `:nth-child(2n+1)`) which can - # contain selectors (e.g. `:nth-child(2n+1 of .foo)`). - class Pseudo < Simple - # Some pseudo-class-syntax selectors are actually considered - # pseudo-elements and must be treated differently. This is a list of such - # selectors. - # - # @return [Set] - ACTUALLY_ELEMENTS = %w[after before first-line first-letter].to_set - - # Like \{#type}, but returns the type of selector this looks like, rather - # than the type it is semantically. This only differs from type for - # selectors in \{ACTUALLY\_ELEMENTS}. - # - # @return [Symbol] - attr_reader :syntactic_type - - # The name of the selector. - # - # @return [String] - attr_reader :name - - # The argument to the selector, - # or `nil` if no argument was given. - # - # @return [String, nil] - attr_reader :arg - - # The selector argument, or `nil` if no selector exists. - # - # If this and \{#arg\} are both set, \{#arg\} is considered a non-selector - # prefix. - # - # @return [CommaSequence] - attr_reader :selector - - # @param syntactic_type [Symbol] See \{#syntactic_type} - # @param name [String] See \{#name} - # @param arg [nil, String] See \{#arg} - # @param selector [nil, CommaSequence] See \{#selector} - def initialize(syntactic_type, name, arg, selector) - @syntactic_type = syntactic_type - @name = name - @arg = arg - @selector = selector - end - - # Returns a copy of this with \{#selector} set to \{#new\_selector}. - # - # @param new_selector [CommaSequence] - # @return [Array] - def with_selector(new_selector) - result = Pseudo.new(syntactic_type, name, arg, - CommaSequence.new(new_selector.members.map do |seq| - next seq unless seq.members.length == 1 - sseq = seq.members.first - next seq unless sseq.is_a?(SimpleSequence) && sseq.members.length == 1 - sel = sseq.members.first - next seq unless sel.is_a?(Pseudo) && sel.selector - - case normalized_name - when 'not' - # In theory, if there's a nested :not its contents should be - # unified with the return value. For example, if :not(.foo) - # extends .bar, :not(.bar) should become .foo:not(.bar). However, - # this is a narrow edge case and supporting it properly would make - # this code and the code calling it a lot more complicated, so - # it's not supported for now. - next [] unless sel.normalized_name == 'matches' - sel.selector.members - when 'matches', 'any', 'current', 'nth-child', 'nth-last-child' - # As above, we could theoretically support :not within :matches, but - # doing so would require this method and its callers to handle much - # more complex cases that likely aren't worth the pain. - next [] unless sel.name == name && sel.arg == arg - sel.selector.members - when 'has', 'host', 'host-context' - # We can't expand nested selectors here, because each layer adds an - # additional layer of semantics. For example, `:has(:has(img))` - # doesn't match `
    ` but `:has(img)` does. - sel - else - [] - end - end.flatten)) - - # Older browsers support :not but only with a single complex selector. - # In order to support those browsers, we break up the contents of a :not - # unless it originally contained a selector list. - return [result] unless normalized_name == 'not' - return [result] if selector.members.length > 1 - result.selector.members.map do |seq| - Pseudo.new(syntactic_type, name, arg, CommaSequence.new([seq])) - end - end - - # The type of the selector. `:class` if this is a pseudoclass selector, - # `:element` if it's a pseudoelement. - # - # @return [Symbol] - def type - ACTUALLY_ELEMENTS.include?(normalized_name) ? :element : syntactic_type - end - - # Like \{#name\}, but without any vendor prefix. - # - # @return [String] - def normalized_name - @normalized_name ||= name.gsub(/^-[a-zA-Z0-9]+-/, '') - end - - # @see Selector#to_s - def to_s - res = (syntactic_type == :class ? ":" : "::") + @name - if @arg || @selector - res << "(" - res << @arg.strip if @arg - res << " " if @arg && @selector - res << @selector.to_s if @selector - res << ")" - end - res - end - - # Returns `nil` if this is a pseudoelement selector - # and `sels` contains a pseudoelement selector different than this one. - # - # @see SimpleSequence#unify - def unify(sels) - return if type == :element && sels.any? do |sel| - sel.is_a?(Pseudo) && sel.type == :element && - (sel.name != name || sel.arg != arg || sel.selector != selector) - end - super - end - - # Returns whether or not this selector matches all elements - # that the given selector matches (as well as possibly more). - # - # @example - # (.foo).superselector?(.foo.bar) #=> true - # (.foo).superselector?(.bar) #=> false - # @param their_sseq [SimpleSequence] - # @param parents [Array] The parent selectors of `their_sseq`, if any. - # @return [Boolean] - def superselector?(their_sseq, parents = []) - case normalized_name - when 'matches', 'any' - # :matches can be a superselector of another selector in one of two - # ways. Either its constituent selectors can be a superset of those of - # another :matches in the other selector, or any of its constituent - # selectors can individually be a superselector of the other selector. - (their_sseq.selector_pseudo_classes[normalized_name] || []).any? do |their_sel| - next false unless their_sel.is_a?(Pseudo) - next false unless their_sel.name == name - selector.superselector?(their_sel.selector) - end || selector.members.any? do |our_seq| - their_seq = Sequence.new(parents + [their_sseq]) - our_seq.superselector?(their_seq) - end - when 'has', 'host', 'host-context' - # Like :matches, :has (et al) can be a superselector of another - # selector if its constituent selectors are a superset of those of - # another :has in the other selector. However, the :matches other case - # doesn't work, because :has refers to nested elements. - (their_sseq.selector_pseudo_classes[normalized_name] || []).any? do |their_sel| - next false unless their_sel.is_a?(Pseudo) - next false unless their_sel.name == name - selector.superselector?(their_sel.selector) - end - when 'not' - selector.members.all? do |our_seq| - their_sseq.members.any? do |their_sel| - if their_sel.is_a?(Element) || their_sel.is_a?(Id) - # `:not(a)` is a superselector of `h1` and `:not(#foo)` is a - # superselector of `#bar`. - our_sseq = our_seq.members.last - next false unless our_sseq.is_a?(SimpleSequence) - our_sseq.members.any? do |our_sel| - our_sel.class == their_sel.class && our_sel != their_sel - end - else - next false unless their_sel.is_a?(Pseudo) - next false unless their_sel.name == name - # :not(X) is a superselector of :not(Y) exactly when Y is a - # superselector of X. - their_sel.selector.superselector?(CommaSequence.new([our_seq])) - end - end - end - when 'current' - (their_sseq.selector_pseudo_classes['current'] || []).any? do |their_current| - next false if their_current.name != name - # Explicitly don't check for nested superselector relationships - # here. :current(.foo) isn't always a superselector of - # :current(.foo.bar), since it matches the *innermost* ancestor of - # the current element that matches the selector. For example: - # - #
    - #

    - # current element - #

    - #
    - # - # Here :current(.foo) would match the p element and *not* the div - # element, whereas :current(.foo.bar) would match the div and not - # the p. - selector == their_current.selector - end - when 'nth-child', 'nth-last-child' - their_sseq.members.any? do |their_sel| - # This misses a few edge cases. For example, `:nth-child(n of X)` - # is a superselector of `X`, and `:nth-child(2n of X)` is a - # superselector of `:nth-child(4n of X)`. These seem rare enough - # not to be worth worrying about, though. - next false unless their_sel.is_a?(Pseudo) - next false unless their_sel.name == name - next false unless their_sel.arg == arg - selector.superselector?(their_sel.selector) - end - else - throw "[BUG] Unknown selector pseudo class #{name}" - end - end - - # @see AbstractSequence#specificity - def specificity - return 1 if type == :element - return SPECIFICITY_BASE unless selector - @specificity ||= - if normalized_name == 'not' - min = 0 - max = 0 - selector.members.each do |seq| - spec = seq.specificity - if spec.is_a?(Range) - min = Sass::Util.max(spec.begin, min) - max = Sass::Util.max(spec.end, max) - else - min = Sass::Util.max(spec, min) - max = Sass::Util.max(spec, max) - end - end - min == max ? max : (min..max) - else - min = 0 - max = 0 - selector.members.each do |seq| - spec = seq.specificity - if spec.is_a?(Range) - min = Sass::Util.min(spec.begin, min) - max = Sass::Util.max(spec.end, max) - else - min = Sass::Util.min(spec, min) - max = Sass::Util.max(spec, max) - end - end - min == max ? max : (min..max) - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector/sequence.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector/sequence.rb deleted file mode 100644 index 313d642..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector/sequence.rb +++ /dev/null @@ -1,636 +0,0 @@ -module Sass - module Selector - # An operator-separated sequence of - # {SimpleSequence simple selector sequences}. - class Sequence < AbstractSequence - # Sets the line of the Sass template on which this selector was declared. - # This also sets the line for all child selectors. - # - # @param line [Fixnum] - # @return [Fixnum] - def line=(line) - members.each {|m| m.line = line if m.is_a?(SimpleSequence)} - line - end - - # Sets the name of the file in which this selector was declared, - # or `nil` if it was not declared in a file (e.g. on stdin). - # This also sets the filename for all child selectors. - # - # @param filename [String, nil] - # @return [String, nil] - def filename=(filename) - members.each {|m| m.filename = filename if m.is_a?(SimpleSequence)} - filename - end - - # The array of {SimpleSequence simple selector sequences}, operators, and - # newlines. The operators are strings such as `"+"` and `">"` representing - # the corresponding CSS operators, or interpolated SassScript. Newlines - # are also newline strings; these aren't semantically relevant, but they - # do affect formatting. - # - # @return [Array>] - attr_reader :members - - # @param seqs_and_ops [Array>] - # See \{#members} - def initialize(seqs_and_ops) - @members = seqs_and_ops - end - - # Resolves the {Parent} selectors within this selector - # by replacing them with the given parent selector, - # handling commas appropriately. - # - # @param super_cseq [CommaSequence] The parent selector - # @param implicit_parent [Boolean] Whether the the parent - # selector should automatically be prepended to the resolved - # selector if it contains no parent refs. - # @return [CommaSequence] This selector, with parent references resolved - # @raise [Sass::SyntaxError] If a parent selector is invalid - def resolve_parent_refs(super_cseq, implicit_parent) - members = @members.dup - nl = (members.first == "\n" && members.shift) - contains_parent_ref = contains_parent_ref? - return CommaSequence.new([self]) if !implicit_parent && !contains_parent_ref - - unless contains_parent_ref - old_members, members = members, [] - members << nl if nl - members << SimpleSequence.new([Parent.new], false) - members += old_members - end - - CommaSequence.new(Sass::Util.paths(members.map do |sseq_or_op| - next [sseq_or_op] unless sseq_or_op.is_a?(SimpleSequence) - sseq_or_op.resolve_parent_refs(super_cseq).members - end).map do |path| - Sequence.new(path.map do |seq_or_op| - next seq_or_op unless seq_or_op.is_a?(Sequence) - seq_or_op.members - end.flatten) - end) - end - - # Returns whether there's a {Parent} selector anywhere in this sequence. - # - # @return [Boolean] - def contains_parent_ref? - members.any? do |sseq_or_op| - next false unless sseq_or_op.is_a?(SimpleSequence) - next true if sseq_or_op.members.first.is_a?(Parent) - sseq_or_op.members.any? do |sel| - sel.is_a?(Pseudo) && sel.selector && sel.selector.contains_parent_ref? - end - end - end - - # Non-destructively extends this selector with the extensions specified in a hash - # (which should come from {Sass::Tree::Visitors::Cssize}). - # - # @param extends [Sass::Util::SubsetMap{Selector::Simple => - # Sass::Tree::Visitors::Cssize::Extend}] - # The extensions to perform on this selector - # @param parent_directives [Array] - # The directives containing this selector. - # @param replace [Boolean] - # Whether to replace the original selector entirely or include - # it in the result. - # @param seen [Set>] - # The set of simple sequences that are currently being replaced. - # @param original [Boolean] - # Whether this is the original selector being extended, as opposed to - # the result of a previous extension that's being re-extended. - # @return [Array] A list of selectors generated - # by extending this selector with `extends`. - # These correspond to a {CommaSequence}'s {CommaSequence#members members array}. - # @see CommaSequence#do_extend - def do_extend(extends, parent_directives, replace, seen, original) - extended_not_expanded = members.map do |sseq_or_op| - next [[sseq_or_op]] unless sseq_or_op.is_a?(SimpleSequence) - extended = sseq_or_op.do_extend(extends, parent_directives, replace, seen) - - # The First Law of Extend says that the generated selector should have - # specificity greater than or equal to that of the original selector. - # In order to ensure that, we record the original selector's - # (`extended.first`) original specificity. - extended.first.add_sources!([self]) if original && !has_placeholder? - - extended.map {|seq| seq.members} - end - weaves = Sass::Util.paths(extended_not_expanded).map {|path| weave(path)} - trim(weaves).map {|p| Sequence.new(p)} - end - - # Unifies this with another selector sequence to produce a selector - # that matches (a subset of) the intersection of the two inputs. - # - # @param other [Sequence] - # @return [CommaSequence, nil] The unified selector, or nil if unification failed. - # @raise [Sass::SyntaxError] If this selector cannot be unified. - # This will only ever occur when a dynamic selector, - # such as {Parent} or {Interpolation}, is used in unification. - # Since these selectors should be resolved - # by the time extension and unification happen, - # this exception will only ever be raised as a result of programmer error - def unify(other) - base = members.last - other_base = other.members.last - return unless base.is_a?(SimpleSequence) && other_base.is_a?(SimpleSequence) - return unless (unified = other_base.unify(base)) - - woven = weave([members[0...-1], other.members[0...-1] + [unified]]) - CommaSequence.new(woven.map {|w| Sequence.new(w)}) - end - - # Returns whether or not this selector matches all elements - # that the given selector matches (as well as possibly more). - # - # @example - # (.foo).superselector?(.foo.bar) #=> true - # (.foo).superselector?(.bar) #=> false - # @param cseq [Sequence] - # @return [Boolean] - def superselector?(seq) - _superselector?(members, seq.members) - end - - # @see AbstractSequence#to_s - def to_s - @members.join(" ").gsub(/ ?\n ?/, "\n") - end - - # Returns a string representation of the sequence. - # This is basically the selector string. - # - # @return [String] - def inspect - members.map {|m| m.inspect}.join(" ") - end - - # Add to the {SimpleSequence#sources} sets of the child simple sequences. - # This destructively modifies this sequence's members array, but not the - # child simple sequences. - # - # @param sources [Set] - def add_sources!(sources) - members.map! {|m| m.is_a?(SimpleSequence) ? m.with_more_sources(sources) : m} - end - - # Converts the subject operator "!", if it exists, into a ":has()" - # selector. - # - # @retur [Sequence] - def subjectless - pre_subject = [] - has = [] - subject = nil - members.each do |sseq_or_op| - if subject - has << sseq_or_op - elsif sseq_or_op.is_a?(String) || !sseq_or_op.subject? - pre_subject << sseq_or_op - else - subject = sseq_or_op.dup - subject.members = sseq_or_op.members.dup - subject.subject = false - has = [] - end - end - - return self unless subject - - unless has.empty? - subject.members << Pseudo.new(:class, 'has', nil, CommaSequence.new([Sequence.new(has)])) - end - Sequence.new(pre_subject + [subject]) - end - - private - - # Conceptually, this expands "parenthesized selectors". That is, if we - # have `.A .B {@extend .C}` and `.D .C {...}`, this conceptually expands - # into `.D .C, .D (.A .B)`, and this function translates `.D (.A .B)` into - # `.D .A .B, .A .D .B`. For thoroughness, `.A.D .B` would also be - # required, but including merged selectors results in exponential output - # for very little gain. - # - # @param path [Array>] - # A list of parenthesized selector groups. - # @return [Array>] A list of fully-expanded selectors. - def weave(path) - # This function works by moving through the selector path left-to-right, - # building all possible prefixes simultaneously. - prefixes = [[]] - - path.each do |current| - next if current.empty? - current = current.dup - last_current = [current.pop] - prefixes = Sass::Util.flatten(prefixes.map do |prefix| - sub = subweave(prefix, current) - next [] unless sub - sub.map {|seqs| seqs + last_current} - end, 1) - end - prefixes - end - - # This interweaves two lists of selectors, - # returning all possible orderings of them (including using unification) - # that maintain the relative ordering of the input arrays. - # - # For example, given `.foo .bar` and `.baz .bang`, - # this would return `.foo .bar .baz .bang`, `.foo .bar.baz .bang`, - # `.foo .baz .bar .bang`, `.foo .baz .bar.bang`, `.foo .baz .bang .bar`, - # and so on until `.baz .bang .foo .bar`. - # - # Semantically, for selectors A and B, this returns all selectors `AB_i` - # such that the union over all i of elements matched by `AB_i X` is - # identical to the intersection of all elements matched by `A X` and all - # elements matched by `B X`. Some `AB_i` are elided to reduce the size of - # the output. - # - # @param seq1 [Array] - # @param seq2 [Array] - # @return [Array>] - def subweave(seq1, seq2) - return [seq2] if seq1.empty? - return [seq1] if seq2.empty? - - seq1, seq2 = seq1.dup, seq2.dup - return unless (init = merge_initial_ops(seq1, seq2)) - return unless (fin = merge_final_ops(seq1, seq2)) - - # Make sure there's only one root selector in the output. - root1 = has_root?(seq1.first) && seq1.shift - root2 = has_root?(seq2.first) && seq2.shift - if root1 && root2 - return unless (root = root1.unify(root2)) - seq1.unshift root - seq2.unshift root - elsif root1 - seq2.unshift root1 - elsif root2 - seq1.unshift root2 - end - - seq1 = group_selectors(seq1) - seq2 = group_selectors(seq2) - lcs = Sass::Util.lcs(seq2, seq1) do |s1, s2| - next s1 if s1 == s2 - next unless s1.first.is_a?(SimpleSequence) && s2.first.is_a?(SimpleSequence) - next s2 if parent_superselector?(s1, s2) - next s1 if parent_superselector?(s2, s1) - end - - diff = [[init]] - - until lcs.empty? - diff << chunks(seq1, seq2) {|s| parent_superselector?(s.first, lcs.first)} << [lcs.shift] - seq1.shift - seq2.shift - end - diff << chunks(seq1, seq2) {|s| s.empty?} - diff += fin.map {|sel| sel.is_a?(Array) ? sel : [sel]} - diff.reject! {|c| c.empty?} - - Sass::Util.paths(diff).map {|p| p.flatten}.reject {|p| path_has_two_subjects?(p)} - end - - # Extracts initial selector combinators (`"+"`, `">"`, `"~"`, and `"\n"`) - # from two sequences and merges them together into a single array of - # selector combinators. - # - # @param seq1 [Array] - # @param seq2 [Array] - # @return [Array, nil] If there are no operators in the merged - # sequence, this will be the empty array. If the operators cannot be - # merged, this will be nil. - def merge_initial_ops(seq1, seq2) - ops1, ops2 = [], [] - ops1 << seq1.shift while seq1.first.is_a?(String) - ops2 << seq2.shift while seq2.first.is_a?(String) - - newline = false - newline ||= !!ops1.shift if ops1.first == "\n" - newline ||= !!ops2.shift if ops2.first == "\n" - - # If neither sequence is a subsequence of the other, they cannot be - # merged successfully - lcs = Sass::Util.lcs(ops1, ops2) - return unless lcs == ops1 || lcs == ops2 - (newline ? ["\n"] : []) + (ops1.size > ops2.size ? ops1 : ops2) - end - - # Extracts final selector combinators (`"+"`, `">"`, `"~"`) and the - # selectors to which they apply from two sequences and merges them - # together into a single array. - # - # @param seq1 [Array] - # @param seq2 [Array] - # @return [Array>] - # If there are no trailing combinators to be merged, this will be the - # empty array. If the trailing combinators cannot be merged, this will - # be nil. Otherwise, this will contained the merged selector. Array - # elements are [Sass::Util#paths]-style options; conceptually, an "or" - # of multiple selectors. - # @comment - # rubocop:disable MethodLength - def merge_final_ops(seq1, seq2, res = []) - ops1, ops2 = [], [] - ops1 << seq1.pop while seq1.last.is_a?(String) - ops2 << seq2.pop while seq2.last.is_a?(String) - - # Not worth the headache of trying to preserve newlines here. The most - # important use of newlines is at the beginning of the selector to wrap - # across lines anyway. - ops1.reject! {|o| o == "\n"} - ops2.reject! {|o| o == "\n"} - - return res if ops1.empty? && ops2.empty? - if ops1.size > 1 || ops2.size > 1 - # If there are multiple operators, something hacky's going on. If one - # is a supersequence of the other, use that, otherwise give up. - lcs = Sass::Util.lcs(ops1, ops2) - return unless lcs == ops1 || lcs == ops2 - res.unshift(*(ops1.size > ops2.size ? ops1 : ops2).reverse) - return res - end - - # This code looks complicated, but it's actually just a bunch of special - # cases for interactions between different combinators. - op1, op2 = ops1.first, ops2.first - if op1 && op2 - sel1 = seq1.pop - sel2 = seq2.pop - if op1 == '~' && op2 == '~' - if sel1.superselector?(sel2) - res.unshift sel2, '~' - elsif sel2.superselector?(sel1) - res.unshift sel1, '~' - else - merged = sel1.unify(sel2) - res.unshift [ - [sel1, '~', sel2, '~'], - [sel2, '~', sel1, '~'], - ([merged, '~'] if merged) - ].compact - end - elsif (op1 == '~' && op2 == '+') || (op1 == '+' && op2 == '~') - if op1 == '~' - tilde_sel, plus_sel = sel1, sel2 - else - tilde_sel, plus_sel = sel2, sel1 - end - - if tilde_sel.superselector?(plus_sel) - res.unshift plus_sel, '+' - else - merged = plus_sel.unify(tilde_sel) - res.unshift [ - [tilde_sel, '~', plus_sel, '+'], - ([merged, '+'] if merged) - ].compact - end - elsif op1 == '>' && %w[~ +].include?(op2) - res.unshift sel2, op2 - seq1.push sel1, op1 - elsif op2 == '>' && %w[~ +].include?(op1) - res.unshift sel1, op1 - seq2.push sel2, op2 - elsif op1 == op2 - merged = sel1.unify(sel2) - return unless merged - res.unshift merged, op1 - else - # Unknown selector combinators can't be unified - return - end - return merge_final_ops(seq1, seq2, res) - elsif op1 - seq2.pop if op1 == '>' && seq2.last && seq2.last.superselector?(seq1.last) - res.unshift seq1.pop, op1 - return merge_final_ops(seq1, seq2, res) - else # op2 - seq1.pop if op2 == '>' && seq1.last && seq1.last.superselector?(seq2.last) - res.unshift seq2.pop, op2 - return merge_final_ops(seq1, seq2, res) - end - end - # @comment - # rubocop:enable MethodLength - - # Takes initial subsequences of `seq1` and `seq2` and returns all - # orderings of those subsequences. The initial subsequences are determined - # by a block. - # - # Destructively removes the initial subsequences of `seq1` and `seq2`. - # - # For example, given `(A B C | D E)` and `(1 2 | 3 4 5)` (with `|` - # denoting the boundary of the initial subsequence), this would return - # `[(A B C 1 2), (1 2 A B C)]`. The sequences would then be `(D E)` and - # `(3 4 5)`. - # - # @param seq1 [Array] - # @param seq2 [Array] - # @yield [a] Used to determine when to cut off the initial subsequences. - # Called repeatedly for each sequence until it returns true. - # @yieldparam a [Array] A final subsequence of one input sequence after - # cutting off some initial subsequence. - # @yieldreturn [Boolean] Whether or not to cut off the initial subsequence - # here. - # @return [Array] All possible orderings of the initial subsequences. - def chunks(seq1, seq2) - chunk1 = [] - chunk1 << seq1.shift until yield seq1 - chunk2 = [] - chunk2 << seq2.shift until yield seq2 - return [] if chunk1.empty? && chunk2.empty? - return [chunk2] if chunk1.empty? - return [chunk1] if chunk2.empty? - [chunk1 + chunk2, chunk2 + chunk1] - end - - # Groups a sequence into subsequences. The subsequences are determined by - # strings; adjacent non-string elements will be put into separate groups, - # but any element adjacent to a string will be grouped with that string. - # - # For example, `(A B "C" D E "F" G "H" "I" J)` will become `[(A) (B "C" D) - # (E "F" G "H" "I" J)]`. - # - # @param seq [Array] - # @return [Array] - def group_selectors(seq) - newseq = [] - tail = seq.dup - until tail.empty? - head = [] - begin - head << tail.shift - end while !tail.empty? && head.last.is_a?(String) || tail.first.is_a?(String) - newseq << head - end - newseq - end - - # Given two selector sequences, returns whether `seq1` is a - # superselector of `seq2`; that is, whether `seq1` matches every - # element `seq2` matches. - # - # @param seq1 [Array] - # @param seq2 [Array] - # @return [Boolean] - def _superselector?(seq1, seq2) - seq1 = seq1.reject {|e| e == "\n"} - seq2 = seq2.reject {|e| e == "\n"} - # Selectors with leading or trailing operators are neither - # superselectors nor subselectors. - return if seq1.last.is_a?(String) || seq2.last.is_a?(String) || - seq1.first.is_a?(String) || seq2.first.is_a?(String) - # More complex selectors are never superselectors of less complex ones - return if seq1.size > seq2.size - return seq1.first.superselector?(seq2.last, seq2[0...-1]) if seq1.size == 1 - - _, si = Sass::Util.enum_with_index(seq2).find do |e, i| - return if i == seq2.size - 1 - next if e.is_a?(String) - seq1.first.superselector?(e, seq2[0...i]) - end - return unless si - - if seq1[1].is_a?(String) - return unless seq2[si + 1].is_a?(String) - - # .foo ~ .bar is a superselector of .foo + .bar - return unless seq1[1] == "~" ? seq2[si + 1] != ">" : seq1[1] == seq2[si + 1] - - # .foo > .baz is not a superselector of .foo > .bar > .baz or .foo > - # .bar .baz, despite the fact that .baz is a superselector of .bar > - # .baz and .bar .baz. Same goes for + and ~. - return if seq1.length == 3 && seq2.length > 3 - - return _superselector?(seq1[2..-1], seq2[si + 2..-1]) - elsif seq2[si + 1].is_a?(String) - return unless seq2[si + 1] == ">" - return _superselector?(seq1[1..-1], seq2[si + 2..-1]) - else - return _superselector?(seq1[1..-1], seq2[si + 1..-1]) - end - end - - # Like \{#_superselector?}, but compares the selectors in the - # context of parent selectors, as though they shared an implicit - # base simple selector. For example, `B` is not normally a - # superselector of `B A`, since it doesn't match `A` elements. - # However, it is a parent superselector, since `B X` is a - # superselector of `B A X`. - # - # @param seq1 [Array] - # @param seq2 [Array] - # @return [Boolean] - def parent_superselector?(seq1, seq2) - base = Sass::Selector::SimpleSequence.new([Sass::Selector::Placeholder.new('')], - false) - _superselector?(seq1 + [base], seq2 + [base]) - end - - # Removes redundant selectors from between multiple lists of - # selectors. This takes a list of lists of selector sequences; - # each individual list is assumed to have no redundancy within - # itself. A selector is only removed if it's redundant with a - # selector in another list. - # - # "Redundant" here means that one selector is a superselector of - # the other. The more specific selector is removed. - # - # @param seqses [Array>>] - # @return [Array>] - def trim(seqses) - # Avoid truly horrific quadratic behavior. TODO: I think there - # may be a way to get perfect trimming without going quadratic. - return Sass::Util.flatten(seqses, 1) if seqses.size > 100 - - # Keep the results in a separate array so we can be sure we aren't - # comparing against an already-trimmed selector. This ensures that two - # identical selectors don't mutually trim one another. - result = seqses.dup - - # This is n^2 on the sequences, but only comparing between - # separate sequences should limit the quadratic behavior. - seqses.each_with_index do |seqs1, i| - result[i] = seqs1.reject do |seq1| - # The maximum specificity of the sources that caused [seq1] to be - # generated. In order for [seq1] to be removed, there must be - # another selector that's a superselector of it *and* that has - # specificity greater or equal to this. - max_spec = _sources(seq1).map do |seq| - spec = seq.specificity - spec.is_a?(Range) ? spec.max : spec - end.max || 0 - - result.any? do |seqs2| - next if seqs1.equal?(seqs2) - # Second Law of Extend: the specificity of a generated selector - # should never be less than the specificity of the extending - # selector. - # - # See https://github.com/nex3/sass/issues/324. - seqs2.any? do |seq2| - spec2 = _specificity(seq2) - spec2 = spec2.begin if spec2.is_a?(Range) - spec2 >= max_spec && _superselector?(seq2, seq1) - end - end - end - end - Sass::Util.flatten(result, 1) - end - - def _hash - members.reject {|m| m == "\n"}.hash - end - - def _eql?(other) - other.members.reject {|m| m == "\n"}.eql?(members.reject {|m| m == "\n"}) - end - - private - - def path_has_two_subjects?(path) - subject = false - path.each do |sseq_or_op| - next unless sseq_or_op.is_a?(SimpleSequence) - next unless sseq_or_op.subject? - return true if subject - subject = true - end - false - end - - def _sources(seq) - s = Set.new - seq.map {|sseq_or_op| s.merge sseq_or_op.sources if sseq_or_op.is_a?(SimpleSequence)} - s - end - - def extended_not_expanded_to_s(extended_not_expanded) - extended_not_expanded.map do |choices| - choices = choices.map do |sel| - next sel.first.to_s if sel.size == 1 - "#{sel.join ' '}" - end - next choices.first if choices.size == 1 && !choices.include?(' ') - "(#{choices.join ', '})" - end.join ' ' - end - - def has_root?(sseq) - sseq.is_a?(SimpleSequence) && - sseq.members.any? {|sel| sel.is_a?(Pseudo) && sel.normalized_name == "root"} - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector/simple.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector/simple.rb deleted file mode 100644 index 5452a40..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector/simple.rb +++ /dev/null @@ -1,114 +0,0 @@ -module Sass - module Selector - # The abstract superclass for simple selectors - # (that is, those that don't compose multiple selectors). - class Simple - # The line of the Sass template on which this selector was declared. - # - # @return [Fixnum] - attr_accessor :line - - # The name of the file in which this selector was declared, - # or `nil` if it was not declared in a file (e.g. on stdin). - # - # @return [String, nil] - attr_accessor :filename - - # @see #to_s - # - # @return [String] - def inspect - to_s - end - - # Returns the selector string. - # - # @return [String] - def to_s - Sass::Util.abstract(self) - end - - # Returns a hash code for this selector object. - # - # By default, this is based on the value of \{#to\_a}, - # so if that contains information irrelevant to the identity of the selector, - # this should be overridden. - # - # @return [Fixnum] - def hash - @_hash ||= equality_key.hash - end - - # Checks equality between this and another object. - # - # By default, this is based on the value of \{#to\_a}, - # so if that contains information irrelevant to the identity of the selector, - # this should be overridden. - # - # @param other [Object] The object to test equality against - # @return [Boolean] Whether or not this is equal to `other` - def eql?(other) - other.class == self.class && other.hash == hash && other.equality_key == equality_key - end - alias_method :==, :eql? - - # Unifies this selector with a {SimpleSequence}'s {SimpleSequence#members members array}, - # returning another `SimpleSequence` members array - # that matches both this selector and the input selector. - # - # By default, this just appends this selector to the end of the array - # (or returns the original array if this selector already exists in it). - # - # @param sels [Array] A {SimpleSequence}'s {SimpleSequence#members members array} - # @return [Array, nil] A {SimpleSequence} {SimpleSequence#members members array} - # matching both `sels` and this selector, - # or `nil` if this is impossible (e.g. unifying `#foo` and `#bar`) - # @raise [Sass::SyntaxError] If this selector cannot be unified. - # This will only ever occur when a dynamic selector, - # such as {Parent} or {Interpolation}, is used in unification. - # Since these selectors should be resolved - # by the time extension and unification happen, - # this exception will only ever be raised as a result of programmer error - def unify(sels) - return sels if sels.any? {|sel2| eql?(sel2)} - sels_with_ix = Sass::Util.enum_with_index(sels) - if !is_a?(Pseudo) || (sels.last.is_a?(Pseudo) && sels.last.type == :element) - _, i = sels_with_ix.find {|sel, _| sel.is_a?(Pseudo)} - end - return sels + [self] unless i - sels[0...i] + [self] + sels[i..-1] - end - - protected - - # Returns the key used for testing whether selectors are equal. - # - # This is a cached version of \{#to\_s}. - # - # @return [String] - def equality_key - @equality_key ||= to_s - end - - # Unifies two namespaces, - # returning a namespace that works for both of them if possible. - # - # @param ns1 [String, nil] The first namespace. - # `nil` means none specified, e.g. `foo`. - # The empty string means no namespace specified, e.g. `|foo`. - # `"*"` means any namespace is allowed, e.g. `*|foo`. - # @param ns2 [String, nil] The second namespace. See `ns1`. - # @return [Array(String or nil, Boolean)] - # The first value is the unified namespace, or `nil` for no namespace. - # The second value is whether or not a namespace that works for both inputs - # could be found at all. - # If the second value is `false`, the first should be ignored. - def unify_namespaces(ns1, ns2) - return nil, false unless ns1 == ns2 || ns1.nil? || ns1 == '*' || ns2.nil? || ns2 == '*' - return ns2, true if ns1 == '*' - return ns1, true if ns2 == '*' - [ns1 || ns2, true] - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector/simple_sequence.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector/simple_sequence.rb deleted file mode 100644 index 303e6cf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/selector/simple_sequence.rb +++ /dev/null @@ -1,344 +0,0 @@ -module Sass - module Selector - # A unseparated sequence of selectors - # that all apply to a single element. - # For example, `.foo#bar[attr=baz]` is a simple sequence - # of the selectors `.foo`, `#bar`, and `[attr=baz]`. - class SimpleSequence < AbstractSequence - # The array of individual selectors. - # - # @return [Array] - attr_accessor :members - - # The extending selectors that caused this selector sequence to be - # generated. For example: - # - # a.foo { ... } - # b.bar {@extend a} - # c.baz {@extend b} - # - # The generated selector `b.foo.bar` has `{b.bar}` as its `sources` set, - # and the generated selector `c.foo.bar.baz` has `{b.bar, c.baz}` as its - # `sources` set. - # - # This is populated during the {Sequence#do_extend} process. - # - # @return {Set} - attr_accessor :sources - - # This sequence source range. - # - # @return [Sass::Source::Range] - attr_accessor :source_range - - # @see \{#subject?} - attr_writer :subject - - # Returns the element or universal selector in this sequence, - # if it exists. - # - # @return [Element, Universal, nil] - def base - @base ||= (members.first if members.first.is_a?(Element) || members.first.is_a?(Universal)) - end - - def pseudo_elements - @pseudo_elements ||= members.select {|sel| sel.is_a?(Pseudo) && sel.type == :element} - end - - def selector_pseudo_classes - @selector_pseudo_classes ||= members. - select {|sel| sel.is_a?(Pseudo) && sel.type == :class && sel.selector}. - group_by {|sel| sel.normalized_name} - end - - # Returns the non-base, non-pseudo-element selectors in this sequence. - # - # @return [Set] - def rest - @rest ||= Set.new(members - [base] - pseudo_elements) - end - - # Whether or not this compound selector is the subject of the parent - # selector; that is, whether it is prepended with `$` and represents the - # actual element that will be selected. - # - # @return [Boolean] - def subject? - @subject - end - - # @param selectors [Array] See \{#members} - # @param subject [Boolean] See \{#subject?} - # @param source_range [Sass::Source::Range] - def initialize(selectors, subject, source_range = nil) - @members = selectors - @subject = subject - @sources = Set.new - @source_range = source_range - end - - # Resolves the {Parent} selectors within this selector - # by replacing them with the given parent selector, - # handling commas appropriately. - # - # @param super_cseq [CommaSequence] The parent selector - # @return [CommaSequence] This selector, with parent references resolved - # @raise [Sass::SyntaxError] If a parent selector is invalid - def resolve_parent_refs(super_cseq) - resolved_members = @members.map do |sel| - next sel unless sel.is_a?(Pseudo) && sel.selector - sel.with_selector(sel.selector.resolve_parent_refs(super_cseq, !:implicit_parent)) - end.flatten - - # Parent selector only appears as the first selector in the sequence - unless (parent = resolved_members.first).is_a?(Parent) - return CommaSequence.new([Sequence.new([SimpleSequence.new(resolved_members, subject?)])]) - end - - return super_cseq if @members.size == 1 && parent.suffix.nil? - - CommaSequence.new(super_cseq.members.map do |super_seq| - members = super_seq.members.dup - newline = members.pop if members.last == "\n" - unless members.last.is_a?(SimpleSequence) - raise Sass::SyntaxError.new("Invalid parent selector for \"#{self}\": \"" + - super_seq.to_s + '"') - end - - parent_sub = members.last.members - unless parent.suffix.nil? - parent_sub = parent_sub.dup - parent_sub[-1] = parent_sub.last.dup - case parent_sub.last - when Sass::Selector::Class, Sass::Selector::Id, Sass::Selector::Placeholder - parent_sub[-1] = parent_sub.last.class.new(parent_sub.last.name + parent.suffix) - when Sass::Selector::Element - parent_sub[-1] = parent_sub.last.class.new( - parent_sub.last.name + parent.suffix, - parent_sub.last.namespace) - when Sass::Selector::Pseudo - if parent_sub.last.arg || parent_sub.last.selector - raise Sass::SyntaxError.new("Invalid parent selector for \"#{self}\": \"" + - super_seq.to_s + '"') - end - parent_sub[-1] = Sass::Selector::Pseudo.new( - parent_sub.last.type, - parent_sub.last.name + parent.suffix, - nil, nil) - else - raise Sass::SyntaxError.new("Invalid parent selector for \"#{self}\": \"" + - super_seq.to_s + '"') - end - end - - Sequence.new(members[0...-1] + - [SimpleSequence.new(parent_sub + resolved_members[1..-1], subject?)] + - [newline].compact) - end) - end - - # Non-destructively extends this selector with the extensions specified in a hash - # (which should come from {Sass::Tree::Visitors::Cssize}). - # - # @param extends [{Selector::Simple => - # Sass::Tree::Visitors::Cssize::Extend}] - # The extensions to perform on this selector - # @param parent_directives [Array] - # The directives containing this selector. - # @param seen [Set>] - # The set of simple sequences that are currently being replaced. - # @param original [Boolean] - # Whether this is the original selector being extended, as opposed to - # the result of a previous extension that's being re-extended. - # @return [Array] A list of selectors generated - # by extending this selector with `extends`. - # @see CommaSequence#do_extend - def do_extend(extends, parent_directives, replace, seen) - seen_with_pseudo_selectors = seen.dup - - modified_original = false - members = Sass::Util.enum_with_index(self.members).map do |sel, i| - next sel unless sel.is_a?(Pseudo) && sel.selector - next sel if seen.include?([sel]) - extended = sel.selector.do_extend(extends, parent_directives, replace, seen, !:original) - next sel if extended == sel.selector - extended.members.reject! {|seq| seq.has_placeholder?} - - # For `:not()`, we usually want to get rid of any complex - # selectors becuase that will cause the selector to fail to - # parse on all browsers at time of writing. We can keep them - # if either the original selector had a complex selector, or - # the result of extending has only complex selectors, - # because either way we aren't breaking anything that isn't - # already broken. - if sel.normalized_name == 'not' && - (sel.selector.members.none? {|seq| seq.members.length > 1} && - extended.members.any? {|seq| seq.members.length == 1}) - extended.members.reject! {|seq| seq.members.length > 1} - end - - modified_original = true - result = sel.with_selector(extended) - result.each {|new_sel| seen_with_pseudo_selectors << [new_sel]} - result - end.flatten - - groups = Sass::Util.group_by_to_a(extends[members.to_set]) {|ex| ex.extender} - groups.map! do |seq, group| - sels = group.map {|e| e.target}.flatten - # If A {@extend B} and C {...}, - # seq is A, sels is B, and self is C - - self_without_sel = Sass::Util.array_minus(members, sels) - group.each {|e| e.result = :failed_to_unify unless e.result == :succeeded} - unified = seq.members.last.unify(SimpleSequence.new(self_without_sel, subject?)) - next unless unified - group.each {|e| e.result = :succeeded} - group.each {|e| check_directives_match!(e, parent_directives)} - new_seq = Sequence.new(seq.members[0...-1] + [unified]) - new_seq.add_sources!(sources + [seq]) - [sels, new_seq] - end - groups.compact! - groups.map! do |sels, seq| - next [] if seen.include?(sels) - seq.do_extend( - extends, parent_directives, !:replace, seen_with_pseudo_selectors + [sels], !:original) - end - groups.flatten! - - if modified_original || !replace || groups.empty? - # First Law of Extend: the result of extending a selector should - # (almost) always contain the base selector. - # - # See https://github.com/nex3/sass/issues/324. - original = Sequence.new([SimpleSequence.new(members, @subject, source_range)]) - original.add_sources! sources - groups.unshift original - end - groups.uniq! - groups - end - - # Unifies this selector with another {SimpleSequence}, returning - # another `SimpleSequence` that is a subselector of both input - # selectors. - # - # @param other [SimpleSequence] - # @return [SimpleSequence, nil] A {SimpleSequence} matching both `sels` and this selector, - # or `nil` if this is impossible (e.g. unifying `#foo` and `#bar`) - # @raise [Sass::SyntaxError] If this selector cannot be unified. - # This will only ever occur when a dynamic selector, - # such as {Parent} or {Interpolation}, is used in unification. - # Since these selectors should be resolved - # by the time extension and unification happen, - # this exception will only ever be raised as a result of programmer error - def unify(other) - sseq = members.inject(other.members) do |member, sel| - return unless member - sel.unify(member) - end - return unless sseq - SimpleSequence.new(sseq, other.subject? || subject?) - end - - # Returns whether or not this selector matches all elements - # that the given selector matches (as well as possibly more). - # - # @example - # (.foo).superselector?(.foo.bar) #=> true - # (.foo).superselector?(.bar) #=> false - # @param their_sseq [SimpleSequence] - # @param parents [Array] The parent selectors of `their_sseq`, if any. - # @return [Boolean] - def superselector?(their_sseq, parents = []) - return false unless base.nil? || base.eql?(their_sseq.base) - return false unless pseudo_elements.eql?(their_sseq.pseudo_elements) - our_spcs = selector_pseudo_classes - their_spcs = their_sseq.selector_pseudo_classes - - # Some psuedo-selectors can be subselectors of non-pseudo selectors. - # Pull those out here so we can efficiently check against them below. - their_subselector_pseudos = %w[matches any nth-child nth-last-child]. - map {|name| their_spcs[name] || []}.flatten - - # If `self`'s non-pseudo simple selectors aren't a subset of `their_sseq`'s, - # it's definitely not a superselector. This also considers being matched - # by `:matches` or `:any`. - return false unless rest.all? do |our_sel| - next true if our_sel.is_a?(Pseudo) && our_sel.selector - next true if their_sseq.rest.include?(our_sel) - their_subselector_pseudos.any? do |their_pseudo| - their_pseudo.selector.members.all? do |their_seq| - next false unless their_seq.members.length == 1 - their_sseq = their_seq.members.first - next false unless their_sseq.is_a?(SimpleSequence) - their_sseq.rest.include?(our_sel) - end - end - end - - our_spcs.all? do |name, pseudos| - pseudos.all? {|pseudo| pseudo.superselector?(their_sseq, parents)} - end - end - - # @see Simple#to_s - def to_s - res = @members.join - res << '!' if subject? - res - end - - # Returns a string representation of the sequence. - # This is basically the selector string. - # - # @return [String] - def inspect - res = members.map {|m| m.inspect}.join - res << '!' if subject? - res - end - - # Return a copy of this simple sequence with `sources` merged into the - # {SimpleSequence#sources} set. - # - # @param sources [Set] - # @return [SimpleSequence] - def with_more_sources(sources) - sseq = dup - sseq.members = members.dup - sseq.sources = self.sources | sources - sseq - end - - private - - def check_directives_match!(extend, parent_directives) - dirs1 = extend.directives.map {|d| d.resolved_value} - dirs2 = parent_directives.map {|d| d.resolved_value} - return if Sass::Util.subsequence?(dirs1, dirs2) - line = extend.node.line - filename = extend.node.filename - - # TODO(nweiz): this should use the Sass stack trace of the extend node, - # not the selector. - raise Sass::SyntaxError.new(< #{output.inspect}" - end - end - - # The mapping data ordered by the location in the target. - # - # @return [Array] - attr_reader :data - - def initialize - @data = [] - end - - # Adds a new mapping from one source range to another. Multiple invocations - # of this method should have each `output` range come after all previous ranges. - # - # @param input [Sass::Source::Range] - # The source range in the input document. - # @param output [Sass::Source::Range] - # The source range in the output document. - def add(input, output) - @data.push(Mapping.new(input, output)) - end - - # Shifts all output source ranges forward one or more lines. - # - # @param delta [Fixnum] The number of lines to shift the ranges forward. - def shift_output_lines(delta) - return if delta == 0 - @data.each do |m| - m.output.start_pos.line += delta - m.output.end_pos.line += delta - end - end - - # Shifts any output source ranges that lie on the first line forward one or - # more characters on that line. - # - # @param delta [Fixnum] The number of characters to shift the ranges - # forward. - def shift_output_offsets(delta) - return if delta == 0 - @data.each do |m| - break if m.output.start_pos.line > 1 - m.output.start_pos.offset += delta - m.output.end_pos.offset += delta if m.output.end_pos.line > 1 - end - end - - # Returns the standard JSON representation of the source map. - # - # If the `:css_uri` option isn't specified, the `:css_path` and - # `:sourcemap_path` options must both be specified. Any options may also be - # specified alongside the `:css_uri` option. If `:css_uri` isn't specified, - # it will be inferred from `:css_path` and `:sourcemap_path` using the - # assumption that the local file system has the same layout as the server. - # - # Regardless of which options are passed to this method, source stylesheets - # that are imported using a non-default importer will only be linked to in - # the source map if their importers implement - # \{Sass::Importers::Base#public\_url\}. - # - # @option options :css_uri [String] - # The publicly-visible URI of the CSS output file. - # @option options :css_path [String] - # The local path of the CSS output file. - # @option options :sourcemap_path [String] - # The (eventual) local path of the sourcemap file. - # @option options :type [Symbol] - # `:auto` (default), `:file`, or `:inline`. - # @return [String] The JSON string. - # @raise [ArgumentError] If neither `:css_uri` nor `:css_path` and - # `:sourcemap_path` are specified. - # @comment - # rubocop:disable MethodLength - def to_json(options) - css_uri, css_path, sourcemap_path = - options[:css_uri], options[:css_path], options[:sourcemap_path] - unless css_uri || (css_path && sourcemap_path) - raise ArgumentError.new("Sass::Source::Map#to_json requires either " \ - "the :css_uri option or both the :css_path and :soucemap_path options.") - end - css_path &&= Sass::Util.pathname(Sass::Util.absolute_path(css_path)) - sourcemap_path &&= Sass::Util.pathname(Sass::Util.absolute_path(sourcemap_path)) - css_uri ||= Sass::Util.file_uri_from_path( - Sass::Util.relative_path_from(css_path, sourcemap_path.dirname)) - - result = "{\n" - write_json_field(result, "version", 3, true) - - source_uri_to_id = {} - id_to_source_uri = {} - id_to_contents = {} if options[:type] == :inline - next_source_id = 0 - line_data = [] - segment_data_for_line = [] - - # These track data necessary for the delta coding. - previous_target_line = nil - previous_target_offset = 1 - previous_source_line = 1 - previous_source_offset = 1 - previous_source_id = 0 - - @data.each do |m| - file, importer = m.input.file, m.input.importer - - if options[:type] == :inline - source_uri = file - else - sourcemap_dir = sourcemap_path && sourcemap_path.dirname.to_s - sourcemap_dir = nil if options[:type] == :file - source_uri = importer && importer.public_url(file, sourcemap_dir) - next unless source_uri - end - - current_source_id = source_uri_to_id[source_uri] - unless current_source_id - current_source_id = next_source_id - next_source_id += 1 - - source_uri_to_id[source_uri] = current_source_id - id_to_source_uri[current_source_id] = source_uri - - if options[:type] == :inline - id_to_contents[current_source_id] = - importer.find(file, {}).instance_variable_get('@template') - end - end - - [ - [m.input.start_pos, m.output.start_pos], - [m.input.end_pos, m.output.end_pos] - ].each do |source_pos, target_pos| - if previous_target_line != target_pos.line - line_data.push(segment_data_for_line.join(",")) unless segment_data_for_line.empty? - (target_pos.line - 1 - (previous_target_line || 0)).times {line_data.push("")} - previous_target_line = target_pos.line - previous_target_offset = 1 - segment_data_for_line = [] - end - - # `segment` is a data chunk for a single position mapping. - segment = "" - - # Field 1: zero-based starting offset. - segment << Sass::Util.encode_vlq(target_pos.offset - previous_target_offset) - previous_target_offset = target_pos.offset - - # Field 2: zero-based index into the "sources" list. - segment << Sass::Util.encode_vlq(current_source_id - previous_source_id) - previous_source_id = current_source_id - - # Field 3: zero-based starting line in the original source. - segment << Sass::Util.encode_vlq(source_pos.line - previous_source_line) - previous_source_line = source_pos.line - - # Field 4: zero-based starting offset in the original source. - segment << Sass::Util.encode_vlq(source_pos.offset - previous_source_offset) - previous_source_offset = source_pos.offset - - segment_data_for_line.push(segment) - - previous_target_line = target_pos.line - end - end - line_data.push(segment_data_for_line.join(",")) - write_json_field(result, "mappings", line_data.join(";")) - - source_names = [] - (0...next_source_id).each {|id| source_names.push(id_to_source_uri[id].to_s)} - write_json_field(result, "sources", source_names) - - if options[:type] == :inline - write_json_field(result, "sourcesContent", - (0...next_source_id).map {|id| id_to_contents[id]}) - end - - write_json_field(result, "names", []) - write_json_field(result, "file", css_uri) - - result << "\n}" - result - end - # @comment - # rubocop:enable MethodLength - - private - - def write_json_field(out, name, value, is_first = false) - out << (is_first ? "" : ",\n") << - "\"" << - Sass::Util.json_escape_string(name) << - "\": " << - Sass::Util.json_value_of(value) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/source/position.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/source/position.rb deleted file mode 100644 index df39bd3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/source/position.rb +++ /dev/null @@ -1,39 +0,0 @@ -module Sass::Source - class Position - # The one-based line of the document associated with the position. - # - # @return [Fixnum] - attr_accessor :line - - # The one-based offset in the line of the document associated with the - # position. - # - # @return [Fixnum] - attr_accessor :offset - - # @param line [Fixnum] The source line - # @param offset [Fixnum] The source offset - def initialize(line, offset) - @line = line - @offset = offset - end - - # @return [String] A string representation of the source position. - def inspect - "#{line.inspect}:#{offset.inspect}" - end - - # @param str [String] The string to move through. - # @return [Position] The source position after proceeding forward through - # `str`. - def after(str) - newlines = str.count("\n") - Position.new(line + newlines, - if newlines == 0 - offset + str.length - else - str.length - str.rindex("\n") - 1 - end) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/source/range.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/source/range.rb deleted file mode 100644 index de687f9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/source/range.rb +++ /dev/null @@ -1,41 +0,0 @@ -module Sass::Source - class Range - # The starting position of the range in the document (inclusive). - # - # @return [Sass::Source::Position] - attr_accessor :start_pos - - # The ending position of the range in the document (exclusive). - # - # @return [Sass::Source::Position] - attr_accessor :end_pos - - # The file in which this source range appears. This can be nil if the file - # is unknown or not yet generated. - # - # @return [String] - attr_accessor :file - - # The importer that imported the file in which this source range appears. - # This is nil for target ranges. - # - # @return [Sass::Importers::Base] - attr_accessor :importer - - # @param start_pos [Sass::Source::Position] See \{#start_pos} - # @param end_pos [Sass::Source::Position] See \{#end_pos} - # @param file [String] See \{#file} - # @param importer [Sass::Importers::Base] See \{#importer} - def initialize(start_pos, end_pos, file, importer = nil) - @start_pos = start_pos - @end_pos = end_pos - @file = file - @importer = importer - end - - # @return [String] A string representation of the source range. - def inspect - "(#{start_pos.inspect} to #{end_pos.inspect}#{" in #{@file}" if @file})" - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/stack.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/stack.rb deleted file mode 100644 index 3036d42..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/stack.rb +++ /dev/null @@ -1,120 +0,0 @@ -module Sass - # A class representing the stack when compiling a Sass file. - class Stack - # TODO: use this to generate stack information for Sass::SyntaxErrors. - - # A single stack frame. - class Frame - # The filename of the file in which this stack frame was created. - # - # @return [String] - attr_reader :filename - - # The line number on which this stack frame was created. - # - # @return [String] - attr_reader :line - - # The type of this stack frame. This can be `:import`, `:mixin`, or - # `:base`. - # - # `:base` indicates that this is the bottom-most frame, meaning that it - # represents a single line of code rather than a nested context. The stack - # will only ever have one base frame, and it will always be the most - # deeply-nested frame. - # - # @return [Symbol?] - attr_reader :type - - # The name of the stack frame. For mixin frames, this is the mixin name; - # otherwise, it's `nil`. - # - # @return [String?] - attr_reader :name - - def initialize(filename, line, type, name = nil) - @filename = filename - @line = line - @type = type - @name = name - end - - # Whether this frame represents an import. - # - # @return [Boolean] - def is_import? - type == :import - end - - # Whether this frame represents a mixin. - # - # @return [Boolean] - def is_mixin? - type == :mixin - end - - # Whether this is the base frame. - # - # @return [Boolean] - def is_base? - type == :base - end - end - - # The stack frames. The last frame is the most deeply-nested. - # - # @return [Array] - attr_reader :frames - - def initialize - @frames = [] - end - - # Pushes a base frame onto the stack. - # - # @param filename [String] See \{Frame#filename}. - # @param line [String] See \{Frame#line}. - # @yield [] A block in which the new frame is on the stack. - def with_base(filename, line) - with_frame(filename, line, :base) {yield} - end - - # Pushes an import frame onto the stack. - # - # @param filename [String] See \{Frame#filename}. - # @param line [String] See \{Frame#line}. - # @yield [] A block in which the new frame is on the stack. - def with_import(filename, line) - with_frame(filename, line, :import) {yield} - end - - # Pushes a mixin frame onto the stack. - # - # @param filename [String] See \{Frame#filename}. - # @param line [String] See \{Frame#line}. - # @param name [String] See \{Frame#name}. - # @yield [] A block in which the new frame is on the stack. - def with_mixin(filename, line, name) - with_frame(filename, line, :mixin, name) {yield} - end - - def to_s - Sass::Util.enum_with_index(Sass::Util.enum_cons(frames.reverse + [nil], 2)). - map do |(frame, caller), i| - "#{i == 0 ? "on" : "from"} line #{frame.line}" + - " of #{frame.filename || "an unknown file"}" + - (caller && caller.name ? ", in `#{caller.name}'" : "") - end.join("\n") - end - - private - - def with_frame(filename, line, type, name = nil) - @frames.pop if @frames.last && @frames.last.type == :base - @frames.push(Frame.new(filename, line, type, name)) - yield - ensure - @frames.pop unless type == :base && @frames.last && @frames.last.type != :base - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/supports.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/supports.rb deleted file mode 100644 index ee67254..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/supports.rb +++ /dev/null @@ -1,227 +0,0 @@ -# A namespace for the `@supports` condition parse tree. -module Sass::Supports - # The abstract superclass of all Supports conditions. - class Condition - # Runs the SassScript in the supports condition. - # - # @param environment [Sass::Environment] The environment in which to run the script. - def perform(environment); Sass::Util.abstract(self); end - - # Returns the CSS for this condition. - # - # @return [String] - def to_css; Sass::Util.abstract(self); end - - # Returns the Sass/CSS code for this condition. - # - # @param options [{Symbol => Object}] An options hash (see {Sass::CSS#initialize}). - # @return [String] - def to_src(options); Sass::Util.abstract(self); end - - # Returns a deep copy of this condition and all its children. - # - # @return [Condition] - def deep_copy; Sass::Util.abstract(self); end - - # Sets the options hash for the script nodes in the supports condition. - # - # @param options [{Symbol => Object}] The options has to set. - def options=(options); Sass::Util.abstract(self); end - end - - # An operator condition (e.g. `CONDITION1 and CONDITION2`). - class Operator < Condition - # The left-hand condition. - # - # @return [Sass::Supports::Condition] - attr_accessor :left - - # The right-hand condition. - # - # @return [Sass::Supports::Condition] - attr_accessor :right - - # The operator ("and" or "or"). - # - # @return [String] - attr_accessor :op - - def initialize(left, right, op) - @left = left - @right = right - @op = op - end - - def perform(env) - @left.perform(env) - @right.perform(env) - end - - def to_css - "#{left_parens @left.to_css} #{op} #{right_parens @right.to_css}" - end - - def to_src(options) - "#{left_parens @left.to_src(options)} #{op} #{right_parens @right.to_src(options)}" - end - - def deep_copy - copy = dup - copy.left = @left.deep_copy - copy.right = @right.deep_copy - copy - end - - def options=(options) - @left.options = options - @right.options = options - end - - private - - def left_parens(str) - return "(#{str})" if @left.is_a?(Negation) - str - end - - def right_parens(str) - return "(#{str})" if @right.is_a?(Negation) || @right.is_a?(Operator) - str - end - end - - # A negation condition (`not CONDITION`). - class Negation < Condition - # The condition being negated. - # - # @return [Sass::Supports::Condition] - attr_accessor :condition - - def initialize(condition) - @condition = condition - end - - def perform(env) - @condition.perform(env) - end - - def to_css - "not #{parens @condition.to_css}" - end - - def to_src(options) - "not #{parens @condition.to_src(options)}" - end - - def deep_copy - copy = dup - copy.condition = condition.deep_copy - copy - end - - def options=(options) - condition.options = options - end - - private - - def parens(str) - return "(#{str})" if @condition.is_a?(Negation) || @condition.is_a?(Operator) - str - end - end - - # A declaration condition (e.g. `(feature: value)`). - class Declaration < Condition - # @return [Sass::Script::Tree::Node] The feature name. - attr_accessor :name - - # @!attribute resolved_name - # The name of the feature after any SassScript has been resolved. - # Only set once \{Tree::Visitors::Perform} has been run. - # - # @return [String] - attr_accessor :resolved_name - - # The feature value. - # - # @return [Sass::Script::Tree::Node] - attr_accessor :value - - # The value of the feature after any SassScript has been resolved. - # Only set once \{Tree::Visitors::Perform} has been run. - # - # @return [String] - attr_accessor :resolved_value - - def initialize(name, value) - @name = name - @value = value - end - - def perform(env) - @resolved_name = name.perform(env) - @resolved_value = value.perform(env) - end - - def to_css - "(#{@resolved_name}: #{@resolved_value})" - end - - def to_src(options) - "(#{@name.to_sass(options)}: #{@value.to_sass(options)})" - end - - def deep_copy - copy = dup - copy.name = @name.deep_copy - copy.value = @value.deep_copy - copy - end - - def options=(options) - @name.options = options - @value.options = options - end - end - - # An interpolation condition (e.g. `#{$var}`). - class Interpolation < Condition - # The SassScript expression in the interpolation. - # - # @return [Sass::Script::Tree::Node] - attr_accessor :value - - # The value of the expression after it's been resolved. - # Only set once \{Tree::Visitors::Perform} has been run. - # - # @return [String] - attr_accessor :resolved_value - - def initialize(value) - @value = value - end - - def perform(env) - @resolved_value = value.perform(env).to_s(:quote => :none) - end - - def to_css - @resolved_value - end - - def to_src(options) - @value.to_sass(options) - end - - def deep_copy - copy = dup - copy.value = @value.deep_copy - copy - end - - def options=(options) - @value.options = options - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/at_root_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/at_root_node.rb deleted file mode 100644 index e44d7aa..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/at_root_node.rb +++ /dev/null @@ -1,83 +0,0 @@ -module Sass - module Tree - # A dynamic node representing an `@at-root` directive. - # - # An `@at-root` directive with a selector is converted to an \{AtRootNode} - # containing a \{RuleNode} at parse time. - # - # @see Sass::Tree - class AtRootNode < Node - # The query for this node (e.g. `(without: media)`), - # interspersed with {Sass::Script::Tree::Node}s representing - # `#{}`-interpolation. Any adjacent strings will be merged - # together. - # - # This will be nil if the directive didn't have a query. In this - # case, {#resolved\_type} will automatically be set to - # `:without` and {#resolved\_rule} will automatically be set to `["rule"]`. - # - # @return [Array] - attr_accessor :query - - # The resolved type of this directive. `:with` or `:without`. - # - # @return [Symbol] - attr_accessor :resolved_type - - # The resolved value of this directive -- a list of directives - # to either include or exclude. - # - # @return [Array] - attr_accessor :resolved_value - - # The number of additional tabs that the contents of this node - # should be indented. - # - # @return [Number] - attr_accessor :tabs - - # Whether the last child of this node should be considered the - # end of a group. - # - # @return [Boolean] - attr_accessor :group_end - - def initialize(query = nil) - super() - @query = Sass::Util.strip_string_array(Sass::Util.merge_adjacent_strings(query)) if query - @tabs = 0 - end - - # Returns whether or not the given directive is excluded by this - # node. `directive` may be "rule", which indicates whether - # normal CSS rules should be excluded. - # - # @param directive [String] - # @return [Boolean] - def exclude?(directive) - if resolved_type == :with - return false if resolved_value.include?('all') - !resolved_value.include?(directive) - else # resolved_type == :without - return true if resolved_value.include?('all') - resolved_value.include?(directive) - end - end - - # Returns whether the given node is excluded by this node. - # - # @param node [Sass::Tree::Node] - # @return [Boolean] - def exclude_node?(node) - return exclude?(node.name.gsub(/^@/, '')) if node.is_a?(Sass::Tree::DirectiveNode) - return exclude?('keyframes') if node.is_a?(Sass::Tree::KeyframeRuleNode) - exclude?('rule') && node.is_a?(Sass::Tree::RuleNode) - end - - # @see Node#bubbles? - def bubbles? - true - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/charset_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/charset_node.rb deleted file mode 100644 index 5e0eeba..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/charset_node.rb +++ /dev/null @@ -1,22 +0,0 @@ -module Sass::Tree - # A static node representing an unprocessed Sass `@charset` directive. - # - # @see Sass::Tree - class CharsetNode < Node - # The name of the charset. - # - # @return [String] - attr_accessor :name - - # @param name [String] see \{#name} - def initialize(name) - @name = name - super() - end - - # @see Node#invisible? - def invisible? - !Sass::Util.ruby1_8? - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/comment_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/comment_node.rb deleted file mode 100644 index 8b7cdf0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/comment_node.rb +++ /dev/null @@ -1,82 +0,0 @@ -require 'sass/tree/node' - -module Sass::Tree - # A static node representing a Sass comment (silent or loud). - # - # @see Sass::Tree - class CommentNode < Node - # The text of the comment, not including `/*` and `*/`. - # Interspersed with {Sass::Script::Tree::Node}s representing `#{}`-interpolation - # if this is a loud comment. - # - # @return [Array] - attr_accessor :value - - # The text of the comment - # after any interpolated SassScript has been resolved. - # Only set once \{Tree::Visitors::Perform} has been run. - # - # @return [String] - attr_accessor :resolved_value - - # The type of the comment. `:silent` means it's never output to CSS, - # `:normal` means it's output in every compile mode except `:compressed`, - # and `:loud` means it's output even in `:compressed`. - # - # @return [Symbol] - attr_accessor :type - - # @param value [Array] See \{#value} - # @param type [Symbol] See \{#type} - def initialize(value, type) - @value = Sass::Util.with_extracted_values(value) {|str| normalize_indentation str} - @type = type - super() - end - - # Compares the contents of two comments. - # - # @param other [Object] The object to compare with - # @return [Boolean] Whether or not this node and the other object - # are the same - def ==(other) - self.class == other.class && value == other.value && type == other.type - end - - # Returns `true` if this is a silent comment - # or the current style doesn't render comments. - # - # Comments starting with ! are never invisible (and the ! is removed from the output.) - # - # @return [Boolean] - def invisible? - case @type - when :loud; false - when :silent; true - else; style == :compressed - end - end - - # Returns the number of lines in the comment. - # - # @return [Fixnum] - def lines - @value.inject(0) do |s, e| - next s + e.count("\n") if e.is_a?(String) - next s - end - end - - private - - def normalize_indentation(str) - ind = str.split("\n").inject(str[/^[ \t]*/].split("")) do |pre, line| - line[/^[ \t]*/].split("").zip(pre).inject([]) do |arr, (a, b)| - break arr if a != b - arr << a - end - end.join - str.gsub(/^#{ind}/, '') - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/content_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/content_node.rb deleted file mode 100644 index 3f6528f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/content_node.rb +++ /dev/null @@ -1,9 +0,0 @@ -module Sass - module Tree - # A node representing the placement within a mixin of the include statement's content. - # - # @see Sass::Tree - class ContentNode < Node - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/css_import_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/css_import_node.rb deleted file mode 100644 index 125ca13..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/css_import_node.rb +++ /dev/null @@ -1,60 +0,0 @@ -module Sass::Tree - # A node representing an `@import` rule that's importing plain CSS. - # - # @see Sass::Tree - class CssImportNode < DirectiveNode - # The URI being imported, either as a plain string or an interpolated - # script string. - # - # @return [String, Sass::Script::Tree::Node] - attr_accessor :uri - - # The text of the URI being imported after any interpolated SassScript has - # been resolved. Only set once {Tree::Visitors::Perform} has been run. - # - # @return [String] - attr_accessor :resolved_uri - - # The media query for this rule, interspersed with - # {Sass::Script::Tree::Node}s representing `#{}`-interpolation. Any adjacent - # strings will be merged together. - # - # @return [Array] - attr_accessor :query - - # The media query for this rule, without any unresolved interpolation. - # It's only set once {Tree::Visitors::Perform} has been run. - # - # @return [Sass::Media::QueryList] - attr_accessor :resolved_query - - # @param uri [String, Sass::Script::Tree::Node] See \{#uri} - # @param query [Array] See \{#query} - def initialize(uri, query = []) - @uri = uri - @query = query - super('') - end - - # @param uri [String] See \{#resolved_uri} - # @return [CssImportNode] - def self.resolved(uri) - node = new(uri) - node.resolved_uri = uri - node - end - - # @see DirectiveNode#value - def value; raise NotImplementedError; end - - # @see DirectiveNode#resolved_value - def resolved_value - @resolved_value ||= - begin - str = "@import #{resolved_uri}" - str << " #{resolved_query.to_css}" if resolved_query - str - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/debug_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/debug_node.rb deleted file mode 100644 index 5cc2842..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/debug_node.rb +++ /dev/null @@ -1,18 +0,0 @@ -module Sass - module Tree - # A dynamic node representing a Sass `@debug` statement. - # - # @see Sass::Tree - class DebugNode < Node - # The expression to print. - # @return [Script::Tree::Node] - attr_accessor :expr - - # @param expr [Script::Tree::Node] The expression to print - def initialize(expr) - @expr = expr - super() - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/directive_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/directive_node.rb deleted file mode 100644 index 315bb70..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/directive_node.rb +++ /dev/null @@ -1,59 +0,0 @@ -module Sass::Tree - # A static node representing an unprocessed Sass `@`-directive. - # Directives known to Sass, like `@for` and `@debug`, - # are handled by their own nodes; - # only CSS directives like `@media` and `@font-face` become {DirectiveNode}s. - # - # `@import` and `@charset` are special cases; - # they become {ImportNode}s and {CharsetNode}s, respectively. - # - # @see Sass::Tree - class DirectiveNode < Node - # The text of the directive, `@` and all, with interpolation included. - # - # @return [Array] - attr_accessor :value - - # The text of the directive after any interpolated SassScript has been resolved. - # Only set once \{Tree::Visitors::Perform} has been run. - # - # @return [String] - attr_accessor :resolved_value - - # @see RuleNode#tabs - attr_accessor :tabs - - # @see RuleNode#group_end - attr_accessor :group_end - - # @param value [Array] See \{#value} - def initialize(value) - @value = value - @tabs = 0 - super() - end - - # @param value [String] See \{#resolved_value} - # @return [DirectiveNode] - def self.resolved(value) - node = new([value]) - node.resolved_value = value - node - end - - # @return [String] The name of the directive, including `@`. - def name - @name ||= value.first.gsub(/ .*$/, '') - end - - # Strips out any vendor prefixes and downcases the directive name. - # @return [String] The normalized name of the directive. - def normalized_name - @normalized_name ||= name.gsub(/^(@)(?:-[a-zA-Z0-9]+-)?/, '\1').downcase - end - - def bubbles? - has_children - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/each_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/each_node.rb deleted file mode 100644 index 586cfa7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/each_node.rb +++ /dev/null @@ -1,24 +0,0 @@ -require 'sass/tree/node' - -module Sass::Tree - # A dynamic node representing a Sass `@each` loop. - # - # @see Sass::Tree - class EachNode < Node - # The names of the loop variables. - # @return [Array] - attr_reader :vars - - # The parse tree for the list. - # @return [Script::Tree::Node] - attr_accessor :list - - # @param vars [Array] The names of the loop variables - # @param list [Script::Tree::Node] The parse tree for the list - def initialize(vars, list) - @vars = vars - @list = list - super() - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/error_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/error_node.rb deleted file mode 100644 index 203fd62..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/error_node.rb +++ /dev/null @@ -1,18 +0,0 @@ -module Sass - module Tree - # A dynamic node representing a Sass `@error` statement. - # - # @see Sass::Tree - class ErrorNode < Node - # The expression to print. - # @return [Script::Tree::Node] - attr_accessor :expr - - # @param expr [Script::Tree::Node] The expression to print - def initialize(expr) - @expr = expr - super() - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/extend_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/extend_node.rb deleted file mode 100644 index 817c20c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/extend_node.rb +++ /dev/null @@ -1,43 +0,0 @@ -require 'sass/tree/node' - -module Sass::Tree - # A static node representing an `@extend` directive. - # - # @see Sass::Tree - class ExtendNode < Node - # The parsed selector after interpolation has been resolved. - # Only set once {Tree::Visitors::Perform} has been run. - # - # @return [Selector::CommaSequence] - attr_accessor :resolved_selector - - # The CSS selector to extend, interspersed with {Sass::Script::Tree::Node}s - # representing `#{}`-interpolation. - # - # @return [Array] - attr_accessor :selector - - # The extended selector source range. - # - # @return [Sass::Source::Range] - attr_accessor :selector_source_range - - # Whether the `@extend` is allowed to match no selectors or not. - # - # @return [Boolean] - def optional?; @optional; end - - # @param selector [Array] - # The CSS selector to extend, - # interspersed with {Sass::Script::Tree::Node}s - # representing `#{}`-interpolation. - # @param optional [Boolean] See \{ExtendNode#optional?} - # @param selector_source_range [Sass::Source::Range] The extended selector source range. - def initialize(selector, optional, selector_source_range) - @selector = selector - @optional = optional - @selector_source_range = selector_source_range - super() - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/for_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/for_node.rb deleted file mode 100644 index da3f655..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/for_node.rb +++ /dev/null @@ -1,36 +0,0 @@ -require 'sass/tree/node' - -module Sass::Tree - # A dynamic node representing a Sass `@for` loop. - # - # @see Sass::Tree - class ForNode < Node - # The name of the loop variable. - # @return [String] - attr_reader :var - - # The parse tree for the initial expression. - # @return [Script::Tree::Node] - attr_accessor :from - - # The parse tree for the final expression. - # @return [Script::Tree::Node] - attr_accessor :to - - # Whether to include `to` in the loop or stop just before. - # @return [Boolean] - attr_reader :exclusive - - # @param var [String] See \{#var} - # @param from [Script::Tree::Node] See \{#from} - # @param to [Script::Tree::Node] See \{#to} - # @param exclusive [Boolean] See \{#exclusive} - def initialize(var, from, to, exclusive) - @var = var - @from = from - @to = to - @exclusive = exclusive - super() - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/function_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/function_node.rb deleted file mode 100644 index 0661616..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/function_node.rb +++ /dev/null @@ -1,45 +0,0 @@ -module Sass - module Tree - # A dynamic node representing a function definition. - # - # @see Sass::Tree - class FunctionNode < Node - # The name of the function. - # @return [String] - attr_reader :name - - # The arguments to the function. Each element is a tuple - # containing the variable for argument and the parse tree for - # the default value of the argument - # - # @return [Array] - attr_accessor :args - - # The splat argument for this function, if one exists. - # - # @return [Script::Tree::Node?] - attr_accessor :splat - - # Strips out any vendor prefixes. - # @return [String] The normalized name of the directive. - def normalized_name - @normalized_name ||= name.gsub(/^(?:-[a-zA-Z0-9]+-)?/, '\1') - end - - # @param name [String] The function name - # @param args [Array<(Script::Tree::Node, Script::Tree::Node)>] - # The arguments for the function. - # @param splat [Script::Tree::Node] See \{#splat} - def initialize(name, args, splat) - @name = name - @args = args - @splat = splat - super() - - if %w[and or not].include?(name) - raise Sass::SyntaxError.new("Invalid function name \"#{name}\".") - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/if_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/if_node.rb deleted file mode 100644 index ebfec7c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/if_node.rb +++ /dev/null @@ -1,52 +0,0 @@ -require 'sass/tree/node' - -module Sass::Tree - # A dynamic node representing a Sass `@if` statement. - # - # {IfNode}s are a little odd, in that they also represent `@else` and `@else if`s. - # This is done as a linked list: - # each {IfNode} has a link (\{#else}) to the next {IfNode}. - # - # @see Sass::Tree - class IfNode < Node - # The conditional expression. - # If this is nil, this is an `@else` node, not an `@else if`. - # - # @return [Script::Expr] - attr_accessor :expr - - # The next {IfNode} in the if-else list, or `nil`. - # - # @return [IfNode] - attr_accessor :else - - # @param expr [Script::Expr] See \{#expr} - def initialize(expr) - @expr = expr - @last_else = self - super() - end - - # Append an `@else` node to the end of the list. - # - # @param node [IfNode] The `@else` node to append - def add_else(node) - @last_else.else = node - @last_else = node - end - - def _dump(f) - Marshal.dump([expr, self.else, children]) - end - - def self._load(data) - expr, else_, children = Marshal.load(data) - node = IfNode.new(expr) - node.else = else_ - node.children = children - node.instance_variable_set('@last_else', - node.else ? node.else.instance_variable_get('@last_else') : node) - node - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/import_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/import_node.rb deleted file mode 100644 index 01dc0a9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/import_node.rb +++ /dev/null @@ -1,74 +0,0 @@ -module Sass - module Tree - # A static node that wraps the {Sass::Tree} for an `@import`ed file. - # It doesn't have a functional purpose other than to add the `@import`ed file - # to the backtrace if an error occurs. - class ImportNode < RootNode - # The name of the imported file as it appears in the Sass document. - # - # @return [String] - attr_reader :imported_filename - - # Sets the imported file. - attr_writer :imported_file - - # @param imported_filename [String] The name of the imported file - def initialize(imported_filename) - @imported_filename = imported_filename - super(nil) - end - - def invisible?; to_s.empty?; end - - # Returns the imported file. - # - # @return [Sass::Engine] - # @raise [Sass::SyntaxError] If no file could be found to import. - def imported_file - @imported_file ||= import - end - - # Returns whether or not this import should emit a CSS @import declaration - # - # @return [Boolean] Whether or not this is a simple CSS @import declaration. - def css_import? - if @imported_filename =~ /\.css$/ - @imported_filename - elsif imported_file.is_a?(String) && imported_file =~ /\.css$/ - imported_file - end - end - - private - - def import - paths = @options[:load_paths] - - if @options[:importer] - f = @options[:importer].find_relative( - @imported_filename, @options[:filename], options_for_importer) - return f if f - end - - paths.each do |p| - f = p.find(@imported_filename, options_for_importer) - return f if f - end - - message = "File to import not found or unreadable: #{@imported_filename}.\n" - if paths.size == 1 - message << "Load path: #{paths.first}" - else - message << "Load paths:\n " << paths.join("\n ") - end - raise SyntaxError.new(message) - rescue SyntaxError => e - raise SyntaxError.new(e.message, :line => line, :filename => @filename) - end - - def options_for_importer - @options.merge(:_from_import_node => true) - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/keyframe_rule_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/keyframe_rule_node.rb deleted file mode 100644 index 9f75f94..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/keyframe_rule_node.rb +++ /dev/null @@ -1,15 +0,0 @@ -module Sass::Tree - class KeyframeRuleNode < Node - # The text of the directive after any interpolated SassScript has been resolved. - # Since this is only a static node, this is the only value property. - # - # @return [String] - attr_accessor :resolved_value - - # @param resolved_value [String] See \{#resolved_value} - def initialize(resolved_value) - @resolved_value = resolved_value - super() - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/media_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/media_node.rb deleted file mode 100644 index 3178de0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/media_node.rb +++ /dev/null @@ -1,48 +0,0 @@ -module Sass::Tree - # A static node representing a `@media` rule. - # `@media` rules behave differently from other directives - # in that when they're nested within rules, - # they bubble up to top-level. - # - # @see Sass::Tree - class MediaNode < DirectiveNode - # TODO: parse and cache the query immediately if it has no dynamic elements - - # The media query for this rule, interspersed with {Sass::Script::Tree::Node}s - # representing `#{}`-interpolation. Any adjacent strings will be merged - # together. - # - # @return [Array] - attr_accessor :query - - # The media query for this rule, without any unresolved interpolation. It's - # only set once {Tree::Visitors::Perform} has been run. - # - # @return [Sass::Media::QueryList] - attr_accessor :resolved_query - - # @param query [Array] See \{#query} - def initialize(query) - @query = query - super('') - end - - # @see DirectiveNode#value - def value; raise NotImplementedError; end - - # @see DirectiveNode#name - def name; '@media'; end - - # @see DirectiveNode#resolved_value - def resolved_value - @resolved_value ||= "@media #{resolved_query.to_css}" - end - - # True when the directive has no visible children. - # - # @return [Boolean] - def invisible? - children.all? {|c| c.invisible?} - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/mixin_def_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/mixin_def_node.rb deleted file mode 100644 index 9ed8bfb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/mixin_def_node.rb +++ /dev/null @@ -1,38 +0,0 @@ -module Sass - module Tree - # A dynamic node representing a mixin definition. - # - # @see Sass::Tree - class MixinDefNode < Node - # The mixin name. - # @return [String] - attr_reader :name - - # The arguments for the mixin. - # Each element is a tuple containing the variable for argument - # and the parse tree for the default value of the argument. - # - # @return [Array<(Script::Tree::Node, Script::Tree::Node)>] - attr_accessor :args - - # The splat argument for this mixin, if one exists. - # - # @return [Script::Tree::Node?] - attr_accessor :splat - - # Whether the mixin uses `@content`. Set during the nesting check phase. - # @return [Boolean] - attr_accessor :has_content - - # @param name [String] The mixin name - # @param args [Array<(Script::Tree::Node, Script::Tree::Node)>] See \{#args} - # @param splat [Script::Tree::Node] See \{#splat} - def initialize(name, args, splat) - @name = name - @args = args - @splat = splat - super() - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/mixin_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/mixin_node.rb deleted file mode 100644 index 48592c1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/mixin_node.rb +++ /dev/null @@ -1,52 +0,0 @@ -require 'sass/tree/node' - -module Sass::Tree - # A static node representing a mixin include. - # When in a static tree, the sole purpose is to wrap exceptions - # to add the mixin to the backtrace. - # - # @see Sass::Tree - class MixinNode < Node - # The name of the mixin. - # @return [String] - attr_reader :name - - # The arguments to the mixin. - # @return [Array] - attr_accessor :args - - # A hash from keyword argument names to values. - # @return [Sass::Util::NormalizedMap] - attr_accessor :keywords - - # The first splat argument for this mixin, if one exists. - # - # This could be a list of positional arguments, a map of keyword - # arguments, or an arglist containing both. - # - # @return [Node?] - attr_accessor :splat - - # The second splat argument for this mixin, if one exists. - # - # If this exists, it's always a map of keyword arguments, and - # \{#splat} is always either a list or an arglist. - # - # @return [Node?] - attr_accessor :kwarg_splat - - # @param name [String] The name of the mixin - # @param args [Array] See \{#args} - # @param splat [Script::Tree::Node] See \{#splat} - # @param kwarg_splat [Script::Tree::Node] See \{#kwarg_splat} - # @param keywords [Sass::Util::NormalizedMap] See \{#keywords} - def initialize(name, args, keywords, splat, kwarg_splat) - @name = name - @args = args - @keywords = keywords - @splat = splat - @kwarg_splat = kwarg_splat - super() - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/node.rb deleted file mode 100644 index 3ebb5e8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/node.rb +++ /dev/null @@ -1,238 +0,0 @@ -module Sass - # A namespace for nodes in the Sass parse tree. - # - # The Sass parse tree has three states: dynamic, static Sass, and static CSS. - # - # When it's first parsed, a Sass document is in the dynamic state. - # It has nodes for mixin definitions and `@for` loops and so forth, - # in addition to nodes for CSS rules and properties. - # Nodes that only appear in this state are called **dynamic nodes**. - # - # {Tree::Visitors::Perform} creates a static Sass tree, which is - # different. It still has nodes for CSS rules and properties but it - # doesn't have any dynamic-generation-related nodes. The nodes in - # this state are in a similar structure to the Sass document: rules - # and properties are nested beneath one another, although the - # {Tree::RuleNode} selectors are already in their final state. Nodes - # that can be in this state or in the dynamic state are called - # **static nodes**; nodes that can only be in this state are called - # **solely static nodes**. - # - # {Tree::Visitors::Cssize} is then used to create a static CSS tree. - # This is like a static Sass tree, - # but the structure exactly mirrors that of the generated CSS. - # Rules and properties can't be nested beneath one another in this state. - # - # Finally, {Tree::Visitors::ToCss} can be called on a static CSS tree - # to get the actual CSS code as a string. - module Tree - # The abstract superclass of all parse-tree nodes. - class Node - include Enumerable - - def self.inherited(base) - node_name = base.name.gsub(/.*::(.*?)Node$/, '\\1').downcase - base.instance_eval <<-METHODS - # @return [Symbol] The name that is used for this node when visiting. - def node_name - :#{node_name} - end - - # @return [Symbol] The method that is used on the visitor to visit nodes of this type. - def visit_method - :visit_#{node_name} - end - - # @return [Symbol] The method name that determines if the parent is invalid. - def invalid_child_method_name - :"invalid_#{node_name}_child?" - end - - # @return [Symbol] The method name that determines if the node is an invalid parent. - def invalid_parent_method_name - :"invalid_#{node_name}_parent?" - end - METHODS - end - - # The child nodes of this node. - # - # @return [Array] - attr_reader :children - - # Whether or not this node has child nodes. - # This may be true even when \{#children} is empty, - # in which case this node has an empty block (e.g. `{}`). - # - # @return [Boolean] - attr_accessor :has_children - - # The line of the document on which this node appeared. - # - # @return [Fixnum] - attr_accessor :line - - # The source range in the document on which this node appeared. - # - # @return [Sass::Source::Range] - attr_accessor :source_range - - # The name of the document on which this node appeared. - # - # @return [String] - attr_writer :filename - - # The options hash for the node. - # See {file:SASS_REFERENCE.md#sass_options the Sass options documentation}. - # - # @return [{Symbol => Object}] - attr_reader :options - - def initialize - @children = [] - end - - # Sets the options hash for the node and all its children. - # - # @param options [{Symbol => Object}] The options - # @see #options - def options=(options) - Sass::Tree::Visitors::SetOptions.visit(self, options) - end - - # @private - def children=(children) - self.has_children ||= !children.empty? - @children = children - end - - # The name of the document on which this node appeared. - # - # @return [String] - def filename - @filename || (@options && @options[:filename]) - end - - # Appends a child to the node. - # - # @param child [Tree::Node, Array] The child node or nodes - # @raise [Sass::SyntaxError] if `child` is invalid - def <<(child) - return if child.nil? - if child.is_a?(Array) - child.each {|c| self << c} - else - self.has_children = true - @children << child - end - end - - # Compares this node and another object (only other {Tree::Node}s will be equal). - # This does a structural comparison; - # if the contents of the nodes and all the child nodes are equivalent, - # then the nodes are as well. - # - # Only static nodes need to override this. - # - # @param other [Object] The object to compare with - # @return [Boolean] Whether or not this node and the other object - # are the same - # @see Sass::Tree - def ==(other) - self.class == other.class && other.children == children - end - - # True if \{#to\_s} will return `nil`; - # that is, if the node shouldn't be rendered. - # Should only be called in a static tree. - # - # @return [Boolean] - def invisible?; false; end - - # The output style. See {file:SASS_REFERENCE.md#sass_options the Sass options documentation}. - # - # @return [Symbol] - def style - @options[:style] - end - - # Computes the CSS corresponding to this static CSS tree. - # - # @return [String] The resulting CSS - # @see Sass::Tree - def css - Sass::Tree::Visitors::ToCss.new.visit(self) - end - - # Computes the CSS corresponding to this static CSS tree, along with - # the respective source map. - # - # @return [(String, Sass::Source::Map)] The resulting CSS and the source map - # @see Sass::Tree - def css_with_sourcemap - visitor = Sass::Tree::Visitors::ToCss.new(:build_source_mapping) - result = visitor.visit(self) - return result, visitor.source_mapping - end - - # Returns a representation of the node for debugging purposes. - # - # @return [String] - def inspect - return self.class.to_s unless has_children - "(#{self.class} #{children.map {|c| c.inspect}.join(' ')})" - end - - # Iterates through each node in the tree rooted at this node - # in a pre-order walk. - # - # @yield node - # @yieldparam node [Node] a node in the tree - def each - yield self - children.each {|c| c.each {|n| yield n}} - end - - # Converts a node to Sass code that will generate it. - # - # @param options [{Symbol => Object}] An options hash (see {Sass::CSS#initialize}) - # @return [String] The Sass code corresponding to the node - def to_sass(options = {}) - Sass::Tree::Visitors::Convert.visit(self, options, :sass) - end - - # Converts a node to SCSS code that will generate it. - # - # @param options [{Symbol => Object}] An options hash (see {Sass::CSS#initialize}) - # @return [String] The Sass code corresponding to the node - def to_scss(options = {}) - Sass::Tree::Visitors::Convert.visit(self, options, :scss) - end - - # Return a deep clone of this node. - # The child nodes are cloned, but options are not. - # - # @return [Node] - def deep_copy - Sass::Tree::Visitors::DeepCopy.visit(self) - end - - # Whether or not this node bubbles up through RuleNodes. - # - # @return [Boolean] - def bubbles? - false - end - - protected - - # @see Sass::Shared.balance - # @raise [Sass::SyntaxError] if the brackets aren't balanced - def balance(*args) - res = Sass::Shared.balance(*args) - return res if res - raise Sass::SyntaxError.new("Unbalanced brackets.", :line => line) - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/prop_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/prop_node.rb deleted file mode 100644 index f157e41..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/prop_node.rb +++ /dev/null @@ -1,171 +0,0 @@ -module Sass::Tree - # A static node representing a CSS property. - # - # @see Sass::Tree - class PropNode < Node - # The name of the property, - # interspersed with {Sass::Script::Tree::Node}s - # representing `#{}`-interpolation. - # Any adjacent strings will be merged together. - # - # @return [Array] - attr_accessor :name - - # The name of the property - # after any interpolated SassScript has been resolved. - # Only set once \{Tree::Visitors::Perform} has been run. - # - # @return [String] - attr_accessor :resolved_name - - # The value of the property. - # - # @return [Sass::Script::Tree::Node] - attr_accessor :value - - # The value of the property - # after any interpolated SassScript has been resolved. - # Only set once \{Tree::Visitors::Perform} has been run. - # - # @return [String] - attr_accessor :resolved_value - - # How deep this property is indented - # relative to a normal property. - # This is only greater than 0 in the case that: - # - # * This node is in a CSS tree - # * The style is :nested - # * This is a child property of another property - # * The parent property has a value, and thus will be rendered - # - # @return [Fixnum] - attr_accessor :tabs - - # The source range in which the property name appears. - # - # @return [Sass::Source::Range] - attr_accessor :name_source_range - - # The source range in which the property value appears. - # - # @return [Sass::Source::Range] - attr_accessor :value_source_range - - # @param name [Array] See \{#name} - # @param value [Sass::Script::Tree::Node] See \{#value} - # @param prop_syntax [Symbol] `:new` if this property uses `a: b`-style syntax, - # `:old` if it uses `:a b`-style syntax - def initialize(name, value, prop_syntax) - @name = Sass::Util.strip_string_array( - Sass::Util.merge_adjacent_strings(name)) - @value = value - @tabs = 0 - @prop_syntax = prop_syntax - super() - end - - # Compares the names and values of two properties. - # - # @param other [Object] The object to compare with - # @return [Boolean] Whether or not this node and the other object - # are the same - def ==(other) - self.class == other.class && name == other.name && value == other.value && super - end - - # Returns a appropriate message indicating how to escape pseudo-class selectors. - # This only applies for old-style properties with no value, - # so returns the empty string if this is new-style. - # - # @return [String] The message - def pseudo_class_selector_message - if @prop_syntax == :new || - !value.is_a?(Sass::Script::Tree::Literal) || - !value.value.is_a?(Sass::Script::Value::String) || - !value.value.value.empty? - return "" - end - - "\nIf #{declaration.dump} should be a selector, use \"\\#{declaration}\" instead." - end - - # Computes the Sass or SCSS code for the variable declaration. - # This is like \{#to\_scss} or \{#to\_sass}, - # except it doesn't print any child properties or a trailing semicolon. - # - # @param opts [{Symbol => Object}] The options hash for the tree. - # @param fmt [Symbol] `:scss` or `:sass`. - def declaration(opts = {:old => @prop_syntax == :old}, fmt = :sass) - name = self.name.map {|n| n.is_a?(String) ? n : n.to_sass(opts)}.join - if name[0] == ?: - raise Sass::SyntaxError.new("The \"#{name}: #{self.class.val_to_sass(value, opts)}\"" + - " hack is not allowed in the Sass indented syntax") - end - - old = opts[:old] && fmt == :sass - initial = old ? ':' : '' - mid = old ? '' : ':' - "#{initial}#{name}#{mid} #{self.class.val_to_sass(value, opts)}".rstrip - end - - # A property node is invisible if its value is empty. - # - # @return [Boolean] - def invisible? - resolved_value.empty? - end - - private - - def check! - if @options[:property_syntax] && @options[:property_syntax] != @prop_syntax - raise Sass::SyntaxError.new( - "Illegal property syntax: can't use #{@prop_syntax} syntax when " + - ":property_syntax => #{@options[:property_syntax].inspect} is set.") - end - end - - class << self - # @private - def val_to_sass(value, opts) - val_to_sass_comma(value, opts).to_sass(opts) - end - - private - - def val_to_sass_comma(node, opts) - return node unless node.is_a?(Sass::Script::Tree::Operation) - return val_to_sass_concat(node, opts) unless node.operator == :comma - - Sass::Script::Tree::Operation.new( - val_to_sass_concat(node.operand1, opts), - val_to_sass_comma(node.operand2, opts), - node.operator) - end - - def val_to_sass_concat(node, opts) - return node unless node.is_a?(Sass::Script::Tree::Operation) - return val_to_sass_div(node, opts) unless node.operator == :space - - Sass::Script::Tree::Operation.new( - val_to_sass_div(node.operand1, opts), - val_to_sass_concat(node.operand2, opts), - node.operator) - end - - def val_to_sass_div(node, opts) - unless node.is_a?(Sass::Script::Tree::Operation) && node.operator == :div && - node.operand1.is_a?(Sass::Script::Tree::Literal) && - node.operand1.value.is_a?(Sass::Script::Value::Number) && - node.operand2.is_a?(Sass::Script::Tree::Literal) && - node.operand2.value.is_a?(Sass::Script::Value::Number) && - (!node.operand1.value.original || !node.operand2.value.original) - return node - end - - Sass::Script::Value::String.new("(#{node.to_sass(opts)})") - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/return_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/return_node.rb deleted file mode 100644 index 3056406..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/return_node.rb +++ /dev/null @@ -1,19 +0,0 @@ -module Sass - module Tree - # A dynamic node representing returning from a function. - # - # @see Sass::Tree - class ReturnNode < Node - # The expression to return. - # - # @return [Script::Tree::Node] - attr_accessor :expr - - # @param expr [Script::Tree::Node] The expression to return - def initialize(expr) - @expr = expr - super() - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/root_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/root_node.rb deleted file mode 100644 index 1f02cbd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/root_node.rb +++ /dev/null @@ -1,44 +0,0 @@ -module Sass - module Tree - # A static node that is the root node of the Sass document. - class RootNode < Node - # The Sass template from which this node was created - # - # @param template [String] - attr_reader :template - - # @param template [String] The Sass template from which this node was created - def initialize(template) - super() - @template = template - end - - # Runs the dynamic Sass code and computes the CSS for the tree. - # - # @return [String] The compiled CSS. - def render - css_tree.css - end - - # Runs the dynamic Sass code and computes the CSS for the tree, along with - # the sourcemap. - # - # @return [(String, Sass::Source::Map)] The compiled CSS, as well as - # the source map. @see #render - def render_with_sourcemap - css_tree.css_with_sourcemap - end - - private - - def css_tree - Visitors::CheckNesting.visit(self) - result = Visitors::Perform.visit(self) - Visitors::CheckNesting.visit(result) # Check again to validate mixins - result, extends = Visitors::Cssize.visit(result) - Visitors::Extend.visit(result, extends) - result - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/rule_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/rule_node.rb deleted file mode 100644 index 48f8394..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/rule_node.rb +++ /dev/null @@ -1,146 +0,0 @@ -require 'pathname' - -module Sass::Tree - # A static node representing a CSS rule. - # - # @see Sass::Tree - class RuleNode < Node - # The character used to include the parent selector - PARENT = '&' - - # The CSS selector for this rule, - # interspersed with {Sass::Script::Tree::Node}s - # representing `#{}`-interpolation. - # Any adjacent strings will be merged together. - # - # @return [Array] - attr_accessor :rule - - # The CSS selector for this rule, without any unresolved - # interpolation but with parent references still intact. It's only - # guaranteed to be set once {Tree::Visitors::Perform} has been - # run, but it may be set before then for optimization reasons. - # - # @return [Selector::CommaSequence] - attr_accessor :parsed_rules - - # The CSS selector for this rule, without any unresolved - # interpolation or parent references. It's only set once - # {Tree::Visitors::Perform} has been run. - # - # @return [Selector::CommaSequence] - attr_accessor :resolved_rules - - # How deep this rule is indented - # relative to a base-level rule. - # This is only greater than 0 in the case that: - # - # * This node is in a CSS tree - # * The style is :nested - # * This is a child rule of another rule - # * The parent rule has properties, and thus will be rendered - # - # @return [Fixnum] - attr_accessor :tabs - - # The entire selector source range for this rule. - # @return [Sass::Source::Range] - attr_accessor :selector_source_range - - # Whether or not this rule is the last rule in a nested group. - # This is only set in a CSS tree. - # - # @return [Boolean] - attr_accessor :group_end - - # The stack trace. - # This is only readable in a CSS tree as it is written during the perform step - # and only when the :trace_selectors option is set. - # - # @return [String] - attr_accessor :stack_trace - - # @param rule [Array, Sass::Selector::CommaSequence] - # The CSS rule, either unparsed or parsed. - # @param selector_source_range [Sass::Source::Range] - def initialize(rule, selector_source_range = nil) - if rule.is_a?(Sass::Selector::CommaSequence) - @rule = [rule.to_s] - @parsed_rules = rule - else - merged = Sass::Util.merge_adjacent_strings(rule) - @rule = Sass::Util.strip_string_array(merged) - try_to_parse_non_interpolated_rules - end - @selector_source_range = selector_source_range - @tabs = 0 - super() - end - - # If we've precached the parsed selector, set the line on it, too. - def line=(line) - @parsed_rules.line = line if @parsed_rules - super - end - - # If we've precached the parsed selector, set the filename on it, too. - def filename=(filename) - @parsed_rules.filename = filename if @parsed_rules - super - end - - # Compares the contents of two rules. - # - # @param other [Object] The object to compare with - # @return [Boolean] Whether or not this node and the other object - # are the same - def ==(other) - self.class == other.class && rule == other.rule && super - end - - # Adds another {RuleNode}'s rules to this one's. - # - # @param node [RuleNode] The other node - def add_rules(node) - @rule = Sass::Util.strip_string_array( - Sass::Util.merge_adjacent_strings(@rule + ["\n"] + node.rule)) - try_to_parse_non_interpolated_rules - end - - # @return [Boolean] Whether or not this rule is continued on the next line - def continued? - last = @rule.last - last.is_a?(String) && last[-1] == ?, - end - - # A hash that will be associated with this rule in the CSS document - # if the {file:SASS_REFERENCE.md#debug_info-option `:debug_info` option} is enabled. - # This data is used by e.g. [the FireSass Firebug - # extension](https://addons.mozilla.org/en-US/firefox/addon/103988). - # - # @return [{#to_s => #to_s}] - def debug_info - {:filename => filename && ("file://" + Sass::Util.escape_uri(File.expand_path(filename))), - :line => line} - end - - # A rule node is invisible if it has only placeholder selectors. - def invisible? - resolved_rules.members.all? {|seq| seq.has_placeholder?} - end - - private - - def try_to_parse_non_interpolated_rules - @parsed_rules = nil - return unless @rule.all? {|t| t.kind_of?(String)} - - # We don't use real filename/line info because we don't have it yet. - # When we get it, we'll set it on the parsed rules if possible. - parser = Sass::SCSS::StaticParser.new(@rule.join.strip, nil, nil, 1) - # rubocop:disable RescueModifier - @parsed_rules = parser.parse_selector rescue nil - # rubocop:enable RescueModifier - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/supports_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/supports_node.rb deleted file mode 100644 index 1a2f04b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/supports_node.rb +++ /dev/null @@ -1,38 +0,0 @@ -module Sass::Tree - # A static node representing a `@supports` rule. - # - # @see Sass::Tree - class SupportsNode < DirectiveNode - # The name, which may include a browser prefix. - # - # @return [String] - attr_accessor :name - - # The supports condition. - # - # @return [Sass::Supports::Condition] - attr_accessor :condition - - # @param condition [Sass::Supports::Condition] See \{#condition} - def initialize(name, condition) - @name = name - @condition = condition - super('') - end - - # @see DirectiveNode#value - def value; raise NotImplementedError; end - - # @see DirectiveNode#resolved_value - def resolved_value - @resolved_value ||= "@#{name} #{condition.to_css}" - end - - # True when the directive has no visible children. - # - # @return [Boolean] - def invisible? - children.all? {|c| c.invisible?} - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/trace_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/trace_node.rb deleted file mode 100644 index 2c71e88..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/trace_node.rb +++ /dev/null @@ -1,33 +0,0 @@ -require 'sass/tree/node' - -module Sass::Tree - # A solely static node left over after a mixin include or @content has been performed. - # Its sole purpose is to wrap exceptions to add to the backtrace. - # - # @see Sass::Tree - class TraceNode < Node - # The name of the trace entry to add. - # - # @return [String] - attr_reader :name - - # @param name [String] The name of the trace entry to add. - def initialize(name) - @name = name - self.has_children = true - super() - end - - # Initializes this node from an existing node. - # @param name [String] The name of the trace entry to add. - # @param node [Node] The node to copy information from. - # @return [TraceNode] - def self.from_node(name, node) - trace = new(name) - trace.line = node.line - trace.filename = node.filename - trace.options = node.options - trace - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/variable_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/variable_node.rb deleted file mode 100644 index 2c0ed55..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/variable_node.rb +++ /dev/null @@ -1,36 +0,0 @@ -module Sass - module Tree - # A dynamic node representing a variable definition. - # - # @see Sass::Tree - class VariableNode < Node - # The name of the variable. - # @return [String] - attr_reader :name - - # The parse tree for the variable value. - # @return [Script::Tree::Node] - attr_accessor :expr - - # Whether this is a guarded variable assignment (`!default`). - # @return [Boolean] - attr_reader :guarded - - # Whether this is a global variable assignment (`!global`). - # @return [Boolean] - attr_reader :global - - # @param name [String] The name of the variable - # @param expr [Script::Tree::Node] See \{#expr} - # @param guarded [Boolean] See \{#guarded} - # @param global [Boolean] See \{#global} - def initialize(name, expr, guarded, global) - @name = name - @expr = expr - @guarded = guarded - @global = global - super() - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/base.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/base.rb deleted file mode 100644 index 2c8e134..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/base.rb +++ /dev/null @@ -1,72 +0,0 @@ -# Visitors are used to traverse the Sass parse tree. -# Visitors should extend {Visitors::Base}, -# which provides a small amount of scaffolding for traversal. -module Sass::Tree::Visitors - # The abstract base class for Sass visitors. - # Visitors should extend this class, - # then implement `visit_*` methods for each node they care about - # (e.g. `visit_rule` for {RuleNode} or `visit_for` for {ForNode}). - # These methods take the node in question as argument. - # They may `yield` to visit the child nodes of the current node. - # - # *Note*: due to the unusual nature of {Sass::Tree::IfNode}, - # special care must be taken to ensure that it is properly handled. - # In particular, there is no built-in scaffolding - # for dealing with the return value of `@else` nodes. - # - # @abstract - class Base - # Runs the visitor on a tree. - # - # @param root [Tree::Node] The root node of the Sass tree. - # @return [Object] The return value of \{#visit} for the root node. - def self.visit(root) - new.send(:visit, root) - end - - protected - - # Runs the visitor on the given node. - # This can be overridden by subclasses that need to do something for each node. - # - # @param node [Tree::Node] The node to visit. - # @return [Object] The return value of the `visit_*` method for this node. - def visit(node) - if respond_to?(node.class.visit_method, true) - send(node.class.visit_method, node) {visit_children(node)} - else - visit_children(node) - end - end - - # Visit the child nodes for a given node. - # This can be overridden by subclasses that need to do something - # with the child nodes' return values. - # - # This method is run when `visit_*` methods `yield`, - # and its return value is returned from the `yield`. - # - # @param parent [Tree::Node] The parent node of the children to visit. - # @return [Array] The return values of the `visit_*` methods for the children. - def visit_children(parent) - parent.children.map {|c| visit(c)} - end - - # Returns the name of a node as used in the `visit_*` method. - # - # @param [Tree::Node] node The node. - # @return [String] The name. - def self.node_name(node) - Sass::Util.deprecated(self, "Call node.class.node_name instead.") - node.class.node_name - end - - # `yield`s, then runs the visitor on the `@else` clause if the node has one. - # This exists to ensure that the contents of the `@else` clause get visited. - def visit_if(node) - yield - visit(node.else) if node.else - node - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/check_nesting.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/check_nesting.rb deleted file mode 100644 index cbead20..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/check_nesting.rb +++ /dev/null @@ -1,177 +0,0 @@ -# A visitor for checking that all nodes are properly nested. -class Sass::Tree::Visitors::CheckNesting < Sass::Tree::Visitors::Base - protected - - def initialize - @parents = [] - end - - def visit(node) - if (error = @parent && ( - try_send(@parent.class.invalid_child_method_name, @parent, node) || - try_send(node.class.invalid_parent_method_name, @parent, node))) - raise Sass::SyntaxError.new(error) - end - super - rescue Sass::SyntaxError => e - e.modify_backtrace(:filename => node.filename, :line => node.line) - raise e - end - - CONTROL_NODES = [Sass::Tree::EachNode, Sass::Tree::ForNode, Sass::Tree::IfNode, - Sass::Tree::WhileNode, Sass::Tree::TraceNode] - SCRIPT_NODES = [Sass::Tree::ImportNode] + CONTROL_NODES - def visit_children(parent) - old_parent = @parent - - # When checking a static tree, resolve at-roots to be sure they won't send - # nodes where they don't belong. - if parent.is_a?(Sass::Tree::AtRootNode) && parent.resolved_value - old_parents = @parents - @parents = @parents.reject {|p| parent.exclude_node?(p)} - @parent = Sass::Util.enum_with_index(@parents.reverse). - find {|p, i| !transparent_parent?(p, @parents[-i - 2])}.first - - begin - return super - ensure - @parents = old_parents - @parent = old_parent - end - end - - unless transparent_parent?(parent, old_parent) - @parent = parent - end - - @parents.push parent - begin - super - ensure - @parent = old_parent - @parents.pop - end - end - - def visit_root(node) - yield - rescue Sass::SyntaxError => e - e.sass_template ||= node.template - raise e - end - - def visit_import(node) - yield - rescue Sass::SyntaxError => e - e.modify_backtrace(:filename => node.children.first.filename) - e.add_backtrace(:filename => node.filename, :line => node.line) - raise e - end - - def visit_mixindef(node) - @current_mixin_def, old_mixin_def = node, @current_mixin_def - yield - ensure - @current_mixin_def = old_mixin_def - end - - def invalid_content_parent?(parent, child) - if @current_mixin_def - @current_mixin_def.has_content = true - nil - else - "@content may only be used within a mixin." - end - end - - def invalid_charset_parent?(parent, child) - "@charset may only be used at the root of a document." unless parent.is_a?(Sass::Tree::RootNode) - end - - VALID_EXTEND_PARENTS = [Sass::Tree::RuleNode, Sass::Tree::MixinDefNode, Sass::Tree::MixinNode] - def invalid_extend_parent?(parent, child) - unless is_any_of?(parent, VALID_EXTEND_PARENTS) - return "Extend directives may only be used within rules." - end - end - - INVALID_IMPORT_PARENTS = CONTROL_NODES + - [Sass::Tree::MixinDefNode, Sass::Tree::MixinNode] - def invalid_import_parent?(parent, child) - unless (@parents.map {|p| p.class} & INVALID_IMPORT_PARENTS).empty? - return "Import directives may not be used within control directives or mixins." - end - return if parent.is_a?(Sass::Tree::RootNode) - return "CSS import directives may only be used at the root of a document." if child.css_import? - rescue Sass::SyntaxError => e - e.modify_backtrace(:filename => child.imported_file.options[:filename]) - e.add_backtrace(:filename => child.filename, :line => child.line) - raise e - end - - def invalid_mixindef_parent?(parent, child) - unless (@parents.map {|p| p.class} & INVALID_IMPORT_PARENTS).empty? - return "Mixins may not be defined within control directives or other mixins." - end - end - - def invalid_function_parent?(parent, child) - unless (@parents.map {|p| p.class} & INVALID_IMPORT_PARENTS).empty? - return "Functions may not be defined within control directives or other mixins." - end - end - - VALID_FUNCTION_CHILDREN = [ - Sass::Tree::CommentNode, Sass::Tree::DebugNode, Sass::Tree::ReturnNode, - Sass::Tree::VariableNode, Sass::Tree::WarnNode, Sass::Tree::ErrorNode - ] + CONTROL_NODES - def invalid_function_child?(parent, child) - unless is_any_of?(child, VALID_FUNCTION_CHILDREN) - "Functions can only contain variable declarations and control directives." - end - end - - VALID_PROP_CHILDREN = CONTROL_NODES + [Sass::Tree::CommentNode, - Sass::Tree::PropNode, - Sass::Tree::MixinNode] - def invalid_prop_child?(parent, child) - unless is_any_of?(child, VALID_PROP_CHILDREN) - "Illegal nesting: Only properties may be nested beneath properties." - end - end - - VALID_PROP_PARENTS = [Sass::Tree::RuleNode, Sass::Tree::KeyframeRuleNode, Sass::Tree::PropNode, - Sass::Tree::MixinDefNode, Sass::Tree::DirectiveNode, Sass::Tree::MixinNode] - def invalid_prop_parent?(parent, child) - unless is_any_of?(parent, VALID_PROP_PARENTS) - "Properties are only allowed within rules, directives, mixin includes, or other properties." + - child.pseudo_class_selector_message - end - end - - def invalid_return_parent?(parent, child) - "@return may only be used within a function." unless parent.is_a?(Sass::Tree::FunctionNode) - end - - private - - # Whether `parent` should be assigned to `@parent`. - def transparent_parent?(parent, grandparent) - is_any_of?(parent, SCRIPT_NODES) || - (parent.bubbles? && - !grandparent.is_a?(Sass::Tree::RootNode) && - !grandparent.is_a?(Sass::Tree::AtRootNode)) - end - - def is_any_of?(val, classes) - classes.each do |c| - return true if val.is_a?(c) - end - false - end - - def try_send(method, *args) - return unless respond_to?(method, true) - send(method, *args) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/convert.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/convert.rb deleted file mode 100644 index 3f845af..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/convert.rb +++ /dev/null @@ -1,338 +0,0 @@ -# A visitor for converting a Sass tree into a source string. -class Sass::Tree::Visitors::Convert < Sass::Tree::Visitors::Base - # Runs the visitor on a tree. - # - # @param root [Tree::Node] The root node of the Sass tree. - # @param options [{Symbol => Object}] An options hash (see {Sass::CSS#initialize}). - # @param format [Symbol] `:sass` or `:scss`. - # @return [String] The Sass or SCSS source for the tree. - def self.visit(root, options, format) - new(options, format).send(:visit, root) - end - - protected - - def initialize(options, format) - @options = options - @format = format - @tabs = 0 - # 2 spaces by default - @tab_chars = @options[:indent] || " " - end - - def visit_children(parent) - @tabs += 1 - return @format == :sass ? "\n" : " {}\n" if parent.children.empty? - if @format == :sass - "\n" + super.join.rstrip + "\n" - else - " {\n" + super.join.rstrip + "\n#{ @tab_chars * (@tabs - 1)}}\n" - end - ensure - @tabs -= 1 - end - - # Ensures proper spacing between top-level nodes. - def visit_root(node) - Sass::Util.enum_cons(node.children + [nil], 2).map do |child, nxt| - visit(child) + - if nxt && - (child.is_a?(Sass::Tree::CommentNode) && - child.line + child.lines + 1 == nxt.line) || - (child.is_a?(Sass::Tree::ImportNode) && nxt.is_a?(Sass::Tree::ImportNode) && - child.line + 1 == nxt.line) || - (child.is_a?(Sass::Tree::VariableNode) && nxt.is_a?(Sass::Tree::VariableNode) && - child.line + 1 == nxt.line) - "" - else - "\n" - end - end.join.rstrip + "\n" - end - - def visit_charset(node) - "#{tab_str}@charset \"#{node.name}\"#{semi}\n" - end - - def visit_comment(node) - value = interp_to_src(node.value) - if @format == :sass - content = value.gsub(/\*\/$/, '').rstrip - if content =~ /\A[ \t]/ - # Re-indent SCSS comments like this: - # /* foo - # bar - # baz */ - content.gsub!(/^/, ' ') - content.sub!(/\A([ \t]*)\/\*/, '/*\1') - end - - if content.include?("\n") - content.gsub!(/\n \*/, "\n ") - spaces = content.scan(/\n( *)/).map {|s| s.first.size}.min - sep = node.type == :silent ? "\n//" : "\n *" - if spaces >= 2 - content.gsub!(/\n /, sep) - else - content.gsub!(/\n#{' ' * spaces}/, sep) - end - end - - content.gsub!(/\A\/\*/, '//') if node.type == :silent - content.gsub!(/^/, tab_str) - content = content.rstrip + "\n" - else - spaces = (@tab_chars * [@tabs - value[/^ */].size, 0].max) - content = if node.type == :silent - value.gsub(/^[\/ ]\*/, '//').gsub(/ *\*\/$/, '') - else - value - end.gsub(/^/, spaces) + "\n" - end - content - end - - def visit_debug(node) - "#{tab_str}@debug #{node.expr.to_sass(@options)}#{semi}\n" - end - - def visit_error(node) - "#{tab_str}@error #{node.expr.to_sass(@options)}#{semi}\n" - end - - def visit_directive(node) - res = "#{tab_str}#{interp_to_src(node.value)}" - res.gsub!(/^@import \#\{(.*)\}([^}]*)$/, '@import \1\2') - return res + "#{semi}\n" unless node.has_children - res + yield + "\n" - end - - def visit_each(node) - vars = node.vars.map {|var| "$#{dasherize(var)}"}.join(", ") - "#{tab_str}@each #{vars} in #{node.list.to_sass(@options)}#{yield}" - end - - def visit_extend(node) - "#{tab_str}@extend #{selector_to_src(node.selector).lstrip}" + - "#{" !optional" if node.optional?}#{semi}\n" - end - - def visit_for(node) - "#{tab_str}@for $#{dasherize(node.var)} from #{node.from.to_sass(@options)} " + - "#{node.exclusive ? "to" : "through"} #{node.to.to_sass(@options)}#{yield}" - end - - def visit_function(node) - args = node.args.map do |v, d| - d ? "#{v.to_sass(@options)}: #{d.to_sass(@options)}" : v.to_sass(@options) - end.join(", ") - if node.splat - args << ", " unless node.args.empty? - args << node.splat.to_sass(@options) << "..." - end - - "#{tab_str}@function #{dasherize(node.name)}(#{args})#{yield}" - end - - def visit_if(node) - name = - if !@is_else - "if" - elsif node.expr - "else if" - else - "else" - end - @is_else = false - str = "#{tab_str}@#{name}" - str << " #{node.expr.to_sass(@options)}" if node.expr - str << yield - @is_else = true - str << visit(node.else) if node.else - str - ensure - @is_else = false - end - - def visit_import(node) - quote = @format == :scss ? '"' : '' - "#{tab_str}@import #{quote}#{node.imported_filename}#{quote}#{semi}\n" - end - - def visit_media(node) - "#{tab_str}@media #{query_interp_to_src(node.query)}#{yield}" - end - - def visit_supports(node) - "#{tab_str}@#{node.name} #{node.condition.to_src(@options)}#{yield}" - end - - def visit_cssimport(node) - if node.uri.is_a?(Sass::Script::Tree::Node) - str = "#{tab_str}@import #{node.uri.to_sass(@options)}" - else - str = "#{tab_str}@import #{node.uri}" - end - str << " #{interp_to_src(node.query)}" unless node.query.empty? - "#{str}#{semi}\n" - end - - def visit_mixindef(node) - args = - if node.args.empty? && node.splat.nil? - "" - else - str = '(' - str << node.args.map do |v, d| - if d - "#{v.to_sass(@options)}: #{d.to_sass(@options)}" - else - v.to_sass(@options) - end - end.join(", ") - - if node.splat - str << ", " unless node.args.empty? - str << node.splat.to_sass(@options) << '...' - end - - str << ')' - end - - "#{tab_str}#{@format == :sass ? '=' : '@mixin '}#{dasherize(node.name)}#{args}#{yield}" - end - - def visit_mixin(node) - arg_to_sass = lambda do |arg| - sass = arg.to_sass(@options) - sass = "(#{sass})" if arg.is_a?(Sass::Script::Tree::ListLiteral) && arg.separator == :comma - sass - end - - unless node.args.empty? && node.keywords.empty? && node.splat.nil? - args = node.args.map(&arg_to_sass) - keywords = Sass::Util.hash_to_a(node.keywords.as_stored). - map {|k, v| "$#{dasherize(k)}: #{arg_to_sass[v]}"} - - if node.splat - splat = "#{arg_to_sass[node.splat]}..." - kwarg_splat = "#{arg_to_sass[node.kwarg_splat]}..." if node.kwarg_splat - end - - arglist = "(#{[args, splat, keywords, kwarg_splat].flatten.compact.join(', ')})" - end - "#{tab_str}#{@format == :sass ? '+' : '@include '}" + - "#{dasherize(node.name)}#{arglist}#{node.has_children ? yield : semi}\n" - end - - def visit_content(node) - "#{tab_str}@content#{semi}\n" - end - - def visit_prop(node) - res = tab_str + node.declaration(@options, @format) - return res + semi + "\n" if node.children.empty? - res + yield.rstrip + semi + "\n" - end - - def visit_return(node) - "#{tab_str}@return #{node.expr.to_sass(@options)}#{semi}\n" - end - - def visit_rule(node) - rule = node.parsed_rules ? [node.parsed_rules.to_s] : node.rule - if @format == :sass - name = selector_to_sass(rule) - name = "\\" + name if name[0] == ?: - name.gsub(/^/, tab_str) + yield - elsif @format == :scss - name = selector_to_scss(rule) - res = name + yield - if node.children.last.is_a?(Sass::Tree::CommentNode) && node.children.last.type == :silent - res.slice!(-3..-1) - res << "\n" << tab_str << "}\n" - end - res - end - end - - def visit_variable(node) - "#{tab_str}$#{dasherize(node.name)}: #{node.expr.to_sass(@options)}" + - "#{' !global' if node.global}#{' !default' if node.guarded}#{semi}\n" - end - - def visit_warn(node) - "#{tab_str}@warn #{node.expr.to_sass(@options)}#{semi}\n" - end - - def visit_while(node) - "#{tab_str}@while #{node.expr.to_sass(@options)}#{yield}" - end - - def visit_atroot(node) - if node.query - "#{tab_str}@at-root #{query_interp_to_src(node.query)}#{yield}" - elsif node.children.length == 1 && node.children.first.is_a?(Sass::Tree::RuleNode) - rule = node.children.first - "#{tab_str}@at-root #{selector_to_src(rule.rule).lstrip}#{visit_children(rule)}" - else - "#{tab_str}@at-root#{yield}" - end - end - - def visit_keyframerule(node) - "#{tab_str}#{node.resolved_value}#{yield}\n" - end - - private - - def interp_to_src(interp) - interp.map {|r| r.is_a?(String) ? r : r.to_sass(@options)}.join - end - - # Like interp_to_src, but removes the unnecessary `#{}` around the keys and - # values in query expressions. - def query_interp_to_src(interp) - interp = interp.map do |e| - next e unless e.is_a?(Sass::Script::Tree::Literal) - next e unless e.value.is_a?(Sass::Script::Value::String) - e.value.value - end - - interp_to_src(interp) - end - - def selector_to_src(sel) - @format == :sass ? selector_to_sass(sel) : selector_to_scss(sel) - end - - def selector_to_sass(sel) - sel.map do |r| - if r.is_a?(String) - r.gsub(/(,)?([ \t]*)\n\s*/) {$1 ? "#{$1}#{$2}\n" : " "} - else - r.to_sass(@options) - end - end.join - end - - def selector_to_scss(sel) - interp_to_src(sel).gsub(/^[ \t]*/, tab_str).gsub(/[ \t]*$/, '') - end - - def semi - @format == :sass ? "" : ";" - end - - def tab_str - @tab_chars * @tabs - end - - def dasherize(s) - if @options[:dasherize] - s.gsub('_', '-') - else - s - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/cssize.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/cssize.rb deleted file mode 100644 index ff18dde..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/cssize.rb +++ /dev/null @@ -1,373 +0,0 @@ -# A visitor for converting a static Sass tree into a static CSS tree. -class Sass::Tree::Visitors::Cssize < Sass::Tree::Visitors::Base - # @param root [Tree::Node] The root node of the tree to visit. - # @return [(Tree::Node, Sass::Util::SubsetMap)] The resulting tree of static nodes - # *and* the extensions defined for this tree - def self.visit(root); super; end - - protected - - # Returns the immediate parent of the current node. - # @return [Tree::Node] - def parent - @parents.last - end - - def initialize - @parents = [] - @extends = Sass::Util::SubsetMap.new - end - - # If an exception is raised, this adds proper metadata to the backtrace. - def visit(node) - super(node) - rescue Sass::SyntaxError => e - e.modify_backtrace(:filename => node.filename, :line => node.line) - raise e - end - - # Keeps track of the current parent node. - def visit_children(parent) - with_parent parent do - parent.children = visit_children_without_parent(parent) - parent - end - end - - # Like {#visit\_children}, but doesn't set {#parent}. - # - # @param node [Sass::Tree::Node] - # @return [Array] the flattened results of - # visiting all the children of `node` - def visit_children_without_parent(node) - node.children.map {|c| visit(c)}.flatten - end - - # Runs a block of code with the current parent node - # replaced with the given node. - # - # @param parent [Tree::Node] The new parent for the duration of the block. - # @yield A block in which the parent is set to `parent`. - # @return [Object] The return value of the block. - def with_parent(parent) - @parents.push parent - yield - ensure - @parents.pop - end - - # In Ruby 1.8, ensures that there's only one `@charset` directive - # and that it's at the top of the document. - # - # @return [(Tree::Node, Sass::Util::SubsetMap)] The resulting tree of static nodes - # *and* the extensions defined for this tree - def visit_root(node) - yield - - if parent.nil? - # In Ruby 1.9 we can make all @charset nodes invisible - # and infer the final @charset from the encoding of the final string. - if Sass::Util.ruby1_8? - charset = node.children.find {|c| c.is_a?(Sass::Tree::CharsetNode)} - node.children.reject! {|c| c.is_a?(Sass::Tree::CharsetNode)} - node.children.unshift charset if charset - end - - imports_to_move = [] - import_limit = nil - i = -1 - node.children.reject! do |n| - i += 1 - if import_limit - next false unless n.is_a?(Sass::Tree::CssImportNode) - imports_to_move << n - next true - end - - if !n.is_a?(Sass::Tree::CommentNode) && - !n.is_a?(Sass::Tree::CharsetNode) && - !n.is_a?(Sass::Tree::CssImportNode) - import_limit = i - end - - false - end - - if import_limit - node.children = node.children[0...import_limit] + imports_to_move + - node.children[import_limit..-1] - end - end - - return node, @extends - rescue Sass::SyntaxError => e - e.sass_template ||= node.template - raise e - end - - # A simple struct wrapping up information about a single `@extend` instance. A - # single {ExtendNode} can have multiple Extends if either the parent node or - # the extended selector is a comma sequence. - # - # @attr extender [Sass::Selector::Sequence] - # The selector of the CSS rule containing the `@extend`. - # @attr target [Array] The selector being `@extend`ed. - # @attr node [Sass::Tree::ExtendNode] The node that produced this extend. - # @attr directives [Array] - # The directives containing the `@extend`. - # @attr result [Symbol] - # The result of this extend. One of `:not_found` (the target doesn't exist - # in the document), `:failed_to_unify` (the target exists but cannot be - # unified with the extender), or `:succeeded`. - Extend = Struct.new(:extender, :target, :node, :directives, :result) - - # Registers an extension in the `@extends` subset map. - def visit_extend(node) - parent.resolved_rules.populate_extends(@extends, node.resolved_selector, node, - @parents.select {|p| p.is_a?(Sass::Tree::DirectiveNode)}) - [] - end - - # Modifies exception backtraces to include the imported file. - def visit_import(node) - visit_children_without_parent(node) - rescue Sass::SyntaxError => e - e.modify_backtrace(:filename => node.children.first.filename) - e.add_backtrace(:filename => node.filename, :line => node.line) - raise e - end - - # Asserts that all the traced children are valid in their new location. - def visit_trace(node) - visit_children_without_parent(node) - rescue Sass::SyntaxError => e - e.modify_backtrace(:mixin => node.name, :filename => node.filename, :line => node.line) - e.add_backtrace(:filename => node.filename, :line => node.line) - raise e - end - - # Converts nested properties into flat properties - # and updates the indentation of the prop node based on the nesting level. - def visit_prop(node) - if parent.is_a?(Sass::Tree::PropNode) - node.resolved_name = "#{parent.resolved_name}-#{node.resolved_name}" - node.tabs = parent.tabs + (parent.resolved_value.empty? ? 0 : 1) if node.style == :nested - end - - yield - - result = node.children.dup - if !node.resolved_value.empty? || node.children.empty? - node.send(:check!) - result.unshift(node) - end - - result - end - - def visit_atroot(node) - # If there aren't any more directives or rules that this @at-root needs to - # exclude, we can get rid of it and just evaluate the children. - if @parents.none? {|n| node.exclude_node?(n)} - results = visit_children_without_parent(node) - results.each {|c| c.tabs += node.tabs if bubblable?(c)} - if !results.empty? && bubblable?(results.last) - results.last.group_end = node.group_end - end - return results - end - - # If this @at-root excludes the immediate parent, return it as-is so that it - # can be bubbled up by the parent node. - return Bubble.new(node) if node.exclude_node?(parent) - - # Otherwise, duplicate the current parent and move it into the @at-root - # node. As above, returning an @at-root node signals to the parent directive - # that it should be bubbled upwards. - bubble(node) - end - - # The following directives are visible and have children. This means they need - # to be able to handle bubbling up nodes such as @at-root and @media. - - # Updates the indentation of the rule node based on the nesting - # level. The selectors were resolved in {Perform}. - def visit_rule(node) - yield - - rules = node.children.select {|c| bubblable?(c)} - props = node.children.reject {|c| bubblable?(c) || c.invisible?} - - unless props.empty? - node.children = props - rules.each {|r| r.tabs += 1} if node.style == :nested - rules.unshift(node) - end - - rules = debubble(rules) - unless parent.is_a?(Sass::Tree::RuleNode) || rules.empty? || !bubblable?(rules.last) - rules.last.group_end = true - end - rules - end - - def visit_keyframerule(node) - return node unless node.has_children - - yield - - debubble(node.children, node) - end - - # Bubbles a directive up through RuleNodes. - def visit_directive(node) - return node unless node.has_children - if parent.is_a?(Sass::Tree::RuleNode) - # @keyframes shouldn't include the rule nodes, so we manually create a - # bubble that doesn't have the parent's contents for them. - return node.normalized_name == '@keyframes' ? Bubble.new(node) : bubble(node) - end - - yield - - # Since we don't know if the mere presence of an unknown directive may be - # important, we should keep an empty version around even if all the contents - # are removed via @at-root. However, if the contents are just bubbled out, - # we don't need to do so. - directive_exists = node.children.any? do |child| - next true unless child.is_a?(Bubble) - next false unless child.node.is_a?(Sass::Tree::DirectiveNode) - child.node.resolved_value == node.resolved_value - end - - # We know empty @keyframes directives do nothing. - if directive_exists || node.name == '@keyframes' - [] - else - empty_node = node.dup - empty_node.children = [] - [empty_node] - end + debubble(node.children, node) - end - - # Bubbles the `@media` directive up through RuleNodes - # and merges it with other `@media` directives. - def visit_media(node) - return bubble(node) if parent.is_a?(Sass::Tree::RuleNode) - return Bubble.new(node) if parent.is_a?(Sass::Tree::MediaNode) - - yield - - debubble(node.children, node) do |child| - next child unless child.is_a?(Sass::Tree::MediaNode) - # Copies of `node` can be bubbled, and we don't want to merge it with its - # own query. - next child if child.resolved_query == node.resolved_query - next child if child.resolved_query = child.resolved_query.merge(node.resolved_query) - end - end - - # Bubbles the `@supports` directive up through RuleNodes. - def visit_supports(node) - return node unless node.has_children - return bubble(node) if parent.is_a?(Sass::Tree::RuleNode) - - yield - - debubble(node.children, node) - end - - private - - # "Bubbles" `node` one level by copying the parent and wrapping `node`'s - # children with it. - # - # @param node [Sass::Tree::Node]. - # @return [Bubble] - def bubble(node) - new_rule = parent.dup - new_rule.children = node.children - node.children = [new_rule] - Bubble.new(node) - end - - # Pops all bubbles in `children` and intersperses the results with the other - # values. - # - # If `parent` is passed, it's copied and used as the parent node for the - # nested portions of `children`. - # - # @param children [List] - # @param parent [Sass::Tree::Node] - # @yield [node] An optional block for processing bubbled nodes. Each bubbled - # node will be passed to this block. - # @yieldparam node [Sass::Tree::Node] A bubbled node. - # @yieldreturn [Sass::Tree::Node?] A node to use in place of the bubbled node. - # This can be the node itself, or `nil` to indicate that the node should be - # omitted. - # @return [List] - def debubble(children, parent = nil) - # Keep track of the previous parent so that we don't divide `parent` - # unnecessarily if the `@at-root` doesn't produce any new nodes (e.g. - # `@at-root {@extend %foo}`). - previous_parent = nil - - Sass::Util.slice_by(children) {|c| c.is_a?(Bubble)}.map do |(is_bubble, slice)| - unless is_bubble - next slice unless parent - if previous_parent - previous_parent.children.push(*slice) - next [] - else - previous_parent = new_parent = parent.dup - new_parent.children = slice - next new_parent - end - end - - slice.map do |bubble| - next unless (node = block_given? ? yield(bubble.node) : bubble.node) - node.tabs += bubble.tabs - node.group_end = bubble.group_end - results = [visit(node)].flatten - previous_parent = nil unless results.empty? - results - end.compact - end.flatten - end - - # Returns whether or not a node can be bubbled up through the syntax tree. - # - # @param node [Sass::Tree::Node] - # @return [Boolean] - def bubblable?(node) - node.is_a?(Sass::Tree::RuleNode) || node.bubbles? - end - - # A wrapper class for a node that indicates to the parent that it should - # treat the wrapped node as a sibling rather than a child. - # - # Nodes should be wrapped before they're passed to \{Cssize.visit}. They will - # be automatically visited upon calling \{#pop}. - # - # This duck types as a [Sass::Tree::Node] for the purposes of - # tree-manipulation operations. - class Bubble - attr_accessor :node - attr_accessor :tabs - attr_accessor :group_end - - def initialize(node) - @node = node - @tabs = 0 - end - - def bubbles? - true - end - - def inspect - "(Bubble #{node.inspect})" - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/deep_copy.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/deep_copy.rb deleted file mode 100644 index 2a7036d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/deep_copy.rb +++ /dev/null @@ -1,107 +0,0 @@ -# A visitor for copying the full structure of a Sass tree. -class Sass::Tree::Visitors::DeepCopy < Sass::Tree::Visitors::Base - protected - - def visit(node) - super(node.dup) - end - - def visit_children(parent) - parent.children = parent.children.map {|c| visit(c)} - parent - end - - def visit_debug(node) - node.expr = node.expr.deep_copy - yield - end - - def visit_error(node) - node.expr = node.expr.deep_copy - yield - end - - def visit_each(node) - node.list = node.list.deep_copy - yield - end - - def visit_extend(node) - node.selector = node.selector.map {|c| c.is_a?(Sass::Script::Tree::Node) ? c.deep_copy : c} - yield - end - - def visit_for(node) - node.from = node.from.deep_copy - node.to = node.to.deep_copy - yield - end - - def visit_function(node) - node.args = node.args.map {|k, v| [k.deep_copy, v && v.deep_copy]} - yield - end - - def visit_if(node) - node.expr = node.expr.deep_copy if node.expr - node.else = visit(node.else) if node.else - yield - end - - def visit_mixindef(node) - node.args = node.args.map {|k, v| [k.deep_copy, v && v.deep_copy]} - yield - end - - def visit_mixin(node) - node.args = node.args.map {|a| a.deep_copy} - node.keywords = Hash[node.keywords.map {|k, v| [k, v.deep_copy]}] - yield - end - - def visit_prop(node) - node.name = node.name.map {|c| c.is_a?(Sass::Script::Tree::Node) ? c.deep_copy : c} - node.value = node.value.deep_copy - yield - end - - def visit_return(node) - node.expr = node.expr.deep_copy - yield - end - - def visit_rule(node) - node.rule = node.rule.map {|c| c.is_a?(Sass::Script::Tree::Node) ? c.deep_copy : c} - yield - end - - def visit_variable(node) - node.expr = node.expr.deep_copy - yield - end - - def visit_warn(node) - node.expr = node.expr.deep_copy - yield - end - - def visit_while(node) - node.expr = node.expr.deep_copy - yield - end - - def visit_directive(node) - node.value = node.value.map {|c| c.is_a?(Sass::Script::Tree::Node) ? c.deep_copy : c} - yield - end - - def visit_media(node) - node.query = node.query.map {|c| c.is_a?(Sass::Script::Tree::Node) ? c.deep_copy : c} - yield - end - - def visit_supports(node) - node.condition = node.condition.deep_copy - yield - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/extend.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/extend.rb deleted file mode 100644 index 4fcad49..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/extend.rb +++ /dev/null @@ -1,68 +0,0 @@ -# A visitor for performing selector inheritance on a static CSS tree. -# -# Destructively modifies the tree. -class Sass::Tree::Visitors::Extend < Sass::Tree::Visitors::Base - # Performs the given extensions on the static CSS tree based in `root`, then - # validates that all extends matched some selector. - # - # @param root [Tree::Node] The root node of the tree to visit. - # @param extends [Sass::Util::SubsetMap{Selector::Simple => - # Sass::Tree::Visitors::Cssize::Extend}] - # The extensions to perform on this tree. - # @return [Object] The return value of \{#visit} for the root node. - def self.visit(root, extends) - return if extends.empty? - new(extends).send(:visit, root) - check_extends_fired! extends - end - - protected - - def initialize(extends) - @parent_directives = [] - @extends = extends - end - - # If an exception is raised, this adds proper metadata to the backtrace. - def visit(node) - super(node) - rescue Sass::SyntaxError => e - e.modify_backtrace(:filename => node.filename, :line => node.line) - raise e - end - - # Keeps track of the current parent directives. - def visit_children(parent) - @parent_directives.push parent if parent.is_a?(Sass::Tree::DirectiveNode) - super - ensure - @parent_directives.pop if parent.is_a?(Sass::Tree::DirectiveNode) - end - - # Applies the extend to a single rule's selector. - def visit_rule(node) - node.resolved_rules = node.resolved_rules.do_extend(@extends, @parent_directives) - end - - private - - def self.check_extends_fired!(extends) - extends.each_value do |ex| - next if ex.result == :succeeded || ex.node.optional? - message = "\"#{ex.extender}\" failed to @extend \"#{ex.target.join}\"." - reason = - if ex.result == :not_found - "The selector \"#{ex.target.join}\" was not found." - else - "No selectors matching \"#{ex.target.join}\" could be unified with \"#{ex.extender}\"." - end - - # TODO(nweiz): this should use the Sass stack trace of the extend node. - raise Sass::SyntaxError.new(< ex.node.filename, :line => ex.node.line) -#{message} -#{reason} -Use "@extend #{ex.target.join} !optional" if the extend should be able to fail. -MESSAGE - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb deleted file mode 100644 index 62b7d25..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb +++ /dev/null @@ -1,557 +0,0 @@ -# A visitor for converting a dynamic Sass tree into a static Sass tree. -class Sass::Tree::Visitors::Perform < Sass::Tree::Visitors::Base - class << self - # @param root [Tree::Node] The root node of the tree to visit. - # @param environment [Sass::Environment] The lexical environment. - # @return [Tree::Node] The resulting tree of static nodes. - def visit(root, environment = nil) - new(environment).send(:visit, root) - end - - # @api private - # @comment - # rubocop:disable MethodLength - def perform_arguments(callable, args, splat, environment) - desc = "#{callable.type.capitalize} #{callable.name}" - downcase_desc = "#{callable.type} #{callable.name}" - - # All keywords are contained in splat.keywords for consistency, - # even if there were no splats passed in. - old_keywords_accessed = splat.keywords_accessed - keywords = splat.keywords - splat.keywords_accessed = old_keywords_accessed - - begin - unless keywords.empty? - unknown_args = Sass::Util.array_minus(keywords.keys, - callable.args.map {|var| var.first.underscored_name}) - if callable.splat && unknown_args.include?(callable.splat.underscored_name) - raise Sass::SyntaxError.new("Argument $#{callable.splat.name} of #{downcase_desc} " + - "cannot be used as a named argument.") - elsif unknown_args.any? - description = unknown_args.length > 1 ? 'the following arguments:' : 'an argument named' - raise Sass::SyntaxError.new("#{desc} doesn't have #{description} " + - "#{unknown_args.map {|name| "$#{name}"}.join ', '}.") - end - end - rescue Sass::SyntaxError => keyword_exception - end - - # If there's no splat, raise the keyword exception immediately. The actual - # raising happens in the ensure clause at the end of this function. - return if keyword_exception && !callable.splat - - splat_sep = :comma - if splat - args += splat.to_a - splat_sep = splat.separator - end - - if args.size > callable.args.size && !callable.splat - extra_args_because_of_splat = splat && args.size - splat.to_a.size <= callable.args.size - - takes = callable.args.size - passed = args.size - message = "#{desc} takes #{takes} argument#{'s' unless takes == 1} " + - "but #{passed} #{passed == 1 ? 'was' : 'were'} passed." - raise Sass::SyntaxError.new(message) unless extra_args_because_of_splat - # TODO: when the deprecation period is over, make this an error. - Sass::Util.sass_warn("WARNING: #{message}\n" + - environment.stack.to_s.gsub(/^/m, " " * 8) + "\n" + - "This will be an error in future versions of Sass.") - end - - env = Sass::Environment.new(callable.environment) - callable.args.zip(args[0...callable.args.length]) do |(var, default), value| - if value && keywords.has_key?(var.name) - raise Sass::SyntaxError.new("#{desc} was passed argument $#{var.name} " + - "both by position and by name.") - end - - value ||= keywords.delete(var.name) - value ||= default && default.perform(env) - raise Sass::SyntaxError.new("#{desc} is missing argument #{var.inspect}.") unless value - env.set_local_var(var.name, value) - end - - if callable.splat - rest = args[callable.args.length..-1] || [] - arg_list = Sass::Script::Value::ArgList.new(rest, keywords, splat_sep) - arg_list.options = env.options - env.set_local_var(callable.splat.name, arg_list) - end - - yield env - rescue StandardError => e - ensure - # If there's a keyword exception, we don't want to throw it immediately, - # because the invalid keywords may be part of a glob argument that should be - # passed on to another function. So we only raise it if we reach the end of - # this function *and* the keywords attached to the argument list glob object - # haven't been accessed. - # - # The keyword exception takes precedence over any Sass errors, but not over - # non-Sass exceptions. - if keyword_exception && - !(arg_list && arg_list.keywords_accessed) && - (e.nil? || e.is_a?(Sass::SyntaxError)) - raise keyword_exception - elsif e - raise e - end - end - - # @api private - # @return [Sass::Script::Value::ArgList] - def perform_splat(splat, performed_keywords, kwarg_splat, environment) - args, kwargs, separator = [], nil, :comma - - if splat - splat = splat.perform(environment) - separator = splat.separator || separator - if splat.is_a?(Sass::Script::Value::ArgList) - args = splat.to_a - kwargs = splat.keywords - elsif splat.is_a?(Sass::Script::Value::Map) - kwargs = arg_hash(splat) - else - args = splat.to_a - end - end - kwargs ||= Sass::Util::NormalizedMap.new - kwargs.update(performed_keywords) - - if kwarg_splat - kwarg_splat = kwarg_splat.perform(environment) - unless kwarg_splat.is_a?(Sass::Script::Value::Map) - raise Sass::SyntaxError.new("Variable keyword arguments must be a map " + - "(was #{kwarg_splat.inspect}).") - end - kwargs.update(arg_hash(kwarg_splat)) - end - - Sass::Script::Value::ArgList.new(args, kwargs, separator) - end - - private - - def arg_hash(map) - Sass::Util.map_keys(map.to_h) do |key| - next key.value if key.is_a?(Sass::Script::Value::String) - raise Sass::SyntaxError.new("Variable keyword argument map must have string keys.\n" + - "#{key.inspect} is not a string in #{map.inspect}.") - end - end - end - # @comment - # rubocop:enable MethodLength - - protected - - def initialize(env) - @environment = env - end - - # If an exception is raised, this adds proper metadata to the backtrace. - def visit(node) - return super(node.dup) unless @environment - @environment.stack.with_base(node.filename, node.line) {super(node.dup)} - rescue Sass::SyntaxError => e - e.modify_backtrace(:filename => node.filename, :line => node.line) - raise e - end - - # Keeps track of the current environment. - def visit_children(parent) - with_environment Sass::Environment.new(@environment, parent.options) do - parent.children = super.flatten - parent - end - end - - # Runs a block of code with the current environment replaced with the given one. - # - # @param env [Sass::Environment] The new environment for the duration of the block. - # @yield A block in which the environment is set to `env`. - # @return [Object] The return value of the block. - def with_environment(env) - old_env, @environment = @environment, env - yield - ensure - @environment = old_env - end - - # Sets the options on the environment if this is the top-level root. - def visit_root(node) - yield - rescue Sass::SyntaxError => e - e.sass_template ||= node.template - raise e - end - - # Removes this node from the tree if it's a silent comment. - def visit_comment(node) - return [] if node.invisible? - node.resolved_value = run_interp_no_strip(node.value) - node.resolved_value.gsub!(/\\([\\#])/, '\1') - node - end - - # Prints the expression to STDERR. - def visit_debug(node) - res = node.expr.perform(@environment) - if res.is_a?(Sass::Script::Value::String) - res = res.value - else - res = res.to_sass - end - if node.filename - Sass::Util.sass_warn "#{node.filename}:#{node.line} DEBUG: #{res}" - else - Sass::Util.sass_warn "Line #{node.line} DEBUG: #{res}" - end - [] - end - - # Throws the expression as an error. - def visit_error(node) - res = node.expr.perform(@environment) - if res.is_a?(Sass::Script::Value::String) - res = res.value - else - res = res.to_sass - end - raise Sass::SyntaxError.new(res) - end - - # Runs the child nodes once for each value in the list. - def visit_each(node) - list = node.list.perform(@environment) - - with_environment Sass::SemiGlobalEnvironment.new(@environment) do - list.to_a.map do |value| - if node.vars.length == 1 - @environment.set_local_var(node.vars.first, value) - else - node.vars.zip(value.to_a) do |(var, sub_value)| - @environment.set_local_var(var, sub_value || Sass::Script::Value::Null.new) - end - end - node.children.map {|c| visit(c)} - end.flatten - end - end - - # Runs SassScript interpolation in the selector, - # and then parses the result into a {Sass::Selector::CommaSequence}. - def visit_extend(node) - parser = Sass::SCSS::StaticParser.new(run_interp(node.selector), - node.filename, node.options[:importer], node.line) - node.resolved_selector = parser.parse_selector - node - end - - # Runs the child nodes once for each time through the loop, varying the variable each time. - def visit_for(node) - from = node.from.perform(@environment) - to = node.to.perform(@environment) - from.assert_int! - to.assert_int! - - to = to.coerce(from.numerator_units, from.denominator_units) - direction = from.to_i > to.to_i ? -1 : 1 - range = Range.new(direction * from.to_i, direction * to.to_i, node.exclusive) - - with_environment Sass::SemiGlobalEnvironment.new(@environment) do - range.map do |i| - @environment.set_local_var(node.var, - Sass::Script::Value::Number.new(direction * i, - from.numerator_units, from.denominator_units)) - node.children.map {|c| visit(c)} - end.flatten - end - end - - # Loads the function into the environment. - def visit_function(node) - env = Sass::Environment.new(@environment, node.options) - - if node.normalized_name == 'calc' || node.normalized_name == 'element' || - node.name == 'expression' || node.name == 'url' - Sass::Util.sass_warn < e - e.modify_backtrace(:filename => node.imported_file.options[:filename]) - e.add_backtrace(:filename => node.filename, :line => node.line) - raise e - end - end - - # Loads a mixin into the environment. - def visit_mixindef(node) - env = Sass::Environment.new(@environment, node.options) - @environment.set_local_mixin(node.name, - Sass::Callable.new(node.name, node.args, node.splat, env, - node.children, node.has_content, "mixin")) - [] - end - - # Runs a mixin. - def visit_mixin(node) - @environment.stack.with_mixin(node.filename, node.line, node.name) do - mixin = @environment.mixin(node.name) - raise Sass::SyntaxError.new("Undefined mixin '#{node.name}'.") unless mixin - - if node.children.any? && !mixin.has_content - raise Sass::SyntaxError.new(%Q{Mixin "#{node.name}" does not accept a content block.}) - end - - args = node.args.map {|a| a.perform(@environment)} - keywords = Sass::Util.map_vals(node.keywords) {|v| v.perform(@environment)} - splat = self.class.perform_splat(node.splat, keywords, node.kwarg_splat, @environment) - - self.class.perform_arguments(mixin, args, splat, @environment) do |env| - env.caller = Sass::Environment.new(@environment) - env.content = [node.children, @environment] if node.has_children - - trace_node = Sass::Tree::TraceNode.from_node(node.name, node) - with_environment(env) {trace_node.children = mixin.tree.map {|c| visit(c)}.flatten} - trace_node - end - end - rescue Sass::SyntaxError => e - e.modify_backtrace(:mixin => node.name, :line => node.line) - e.add_backtrace(:line => node.line) - raise e - end - - def visit_content(node) - content, content_env = @environment.content - return [] unless content - @environment.stack.with_mixin(node.filename, node.line, '@content') do - trace_node = Sass::Tree::TraceNode.from_node('@content', node) - content_env = Sass::Environment.new(content_env) - content_env.caller = Sass::Environment.new(@environment) - with_environment(content_env) do - trace_node.children = content.map {|c| visit(c.dup)}.flatten - end - trace_node - end - rescue Sass::SyntaxError => e - e.modify_backtrace(:mixin => '@content', :line => node.line) - e.add_backtrace(:line => node.line) - raise e - end - - # Runs any SassScript that may be embedded in a property. - def visit_prop(node) - node.resolved_name = run_interp(node.name) - val = node.value.perform(@environment) - node.resolved_value = val.to_s - node.value_source_range = val.source_range if val.source_range - yield - end - - # Returns the value of the expression. - def visit_return(node) - throw :_sass_return, node.expr.perform(@environment) - end - - # Runs SassScript interpolation in the selector, - # and then parses the result into a {Sass::Selector::CommaSequence}. - def visit_rule(node) - old_at_root_without_rule = @at_root_without_rule - parser = Sass::SCSS::StaticParser.new(run_interp(node.rule), - node.filename, node.options[:importer], node.line) - if @in_keyframes - keyframe_rule_node = Sass::Tree::KeyframeRuleNode.new(parser.parse_keyframes_selector) - keyframe_rule_node.options = node.options - keyframe_rule_node.line = node.line - keyframe_rule_node.filename = node.filename - keyframe_rule_node.source_range = node.source_range - keyframe_rule_node.has_children = node.has_children - with_environment Sass::Environment.new(@environment, node.options) do - keyframe_rule_node.children = node.children.map {|c| visit(c)}.flatten - end - keyframe_rule_node - else - @at_root_without_rule = false - node.parsed_rules ||= parser.parse_selector - node.resolved_rules = node.parsed_rules.resolve_parent_refs( - @environment.selector, !old_at_root_without_rule) - node.stack_trace = @environment.stack.to_s if node.options[:trace_selectors] - with_environment Sass::Environment.new(@environment, node.options) do - @environment.selector = node.resolved_rules - node.children = node.children.map {|c| visit(c)}.flatten - end - node - end - ensure - @at_root_without_rule = old_at_root_without_rule - end - - # Sets a variable that indicates that the first level of rule nodes - # shouldn't include the parent selector by default. - def visit_atroot(node) - if node.query - parser = Sass::SCSS::StaticParser.new(run_interp(node.query), - node.filename, node.options[:importer], node.line) - node.resolved_type, node.resolved_value = parser.parse_static_at_root_query - else - node.resolved_type, node.resolved_value = :without, ['rule'] - end - - old_at_root_without_rule = @at_root_without_rule - old_in_keyframes = @in_keyframes - @at_root_without_rule = true if node.exclude?('rule') - @in_keyframes = false if node.exclude?('keyframes') - yield - ensure - @in_keyframes = old_in_keyframes - @at_root_without_rule = old_at_root_without_rule - end - - # Loads the new variable value into the environment. - def visit_variable(node) - env = @environment - env = env.global_env if node.global - if node.guarded - var = env.var(node.name) - return [] if var && !var.null? - end - - val = node.expr.perform(@environment) - if node.expr.source_range - val.source_range = node.expr.source_range - else - val.source_range = node.source_range - end - env.set_var(node.name, val) - [] - end - - # Prints the expression to STDERR with a stylesheet trace. - def visit_warn(node) - res = node.expr.perform(@environment) - res = res.value if res.is_a?(Sass::Script::Value::String) - msg = "WARNING: #{res}\n " - msg << @environment.stack.to_s.gsub("\n", "\n ") << "\n" - Sass::Util.sass_warn msg - [] - end - - # Runs the child nodes until the continuation expression becomes false. - def visit_while(node) - children = [] - with_environment Sass::SemiGlobalEnvironment.new(@environment) do - children += node.children.map {|c| visit(c)} while node.expr.perform(@environment).to_bool - end - children.flatten - end - - def visit_directive(node) - node.resolved_value = run_interp(node.value) - old_in_keyframes, @in_keyframes = @in_keyframes, node.normalized_name == "@keyframes" - with_environment Sass::Environment.new(@environment) do - node.children = node.children.map {|c| visit(c)}.flatten - node - end - ensure - @in_keyframes = old_in_keyframes - end - - def visit_media(node) - parser = Sass::SCSS::StaticParser.new(run_interp(node.query), - node.filename, node.options[:importer], node.line) - node.resolved_query ||= parser.parse_media_query_list - yield - end - - def visit_supports(node) - node.condition = node.condition.deep_copy - node.condition.perform(@environment) - yield - end - - def visit_cssimport(node) - node.resolved_uri = run_interp([node.uri]) - if node.query && !node.query.empty? - parser = Sass::SCSS::StaticParser.new(run_interp(node.query), - node.filename, node.options[:importer], node.line) - node.resolved_query ||= parser.parse_media_query_list - end - yield - end - - private - - def run_interp_no_strip(text) - text.map do |r| - next r if r.is_a?(String) - r.perform(@environment).to_s(:quote => :none) - end.join - end - - def run_interp(text) - run_interp_no_strip(text).strip - end - - def handle_import_loop!(node) - msg = "An @import loop has been found:" - files = @environment.stack.frames.select {|f| f.is_import?}.map {|f| f.filename}.compact - if node.filename == node.imported_file.options[:filename] - raise Sass::SyntaxError.new("#{msg} #{node.filename} imports itself") - end - - files << node.filename << node.imported_file.options[:filename] - msg << "\n" << Sass::Util.enum_cons(files, 2).map do |m1, m2| - " #{m1} imports #{m2}" - end.join("\n") - raise Sass::SyntaxError.new(msg) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/set_options.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/set_options.rb deleted file mode 100644 index 48cd946..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/set_options.rb +++ /dev/null @@ -1,139 +0,0 @@ -# A visitor for setting options on the Sass tree -class Sass::Tree::Visitors::SetOptions < Sass::Tree::Visitors::Base - # @param root [Tree::Node] The root node of the tree to visit. - # @param options [{Symbol => Object}] The options has to set. - def self.visit(root, options); new(options).send(:visit, root); end - - protected - - def initialize(options) - @options = options - end - - def visit(node) - node.instance_variable_set('@options', @options) - super - end - - def visit_comment(node) - node.value.each {|c| c.options = @options if c.is_a?(Sass::Script::Tree::Node)} - yield - end - - def visit_debug(node) - node.expr.options = @options - yield - end - - def visit_error(node) - node.expr.options = @options - yield - end - - def visit_each(node) - node.list.options = @options - yield - end - - def visit_extend(node) - node.selector.each {|c| c.options = @options if c.is_a?(Sass::Script::Tree::Node)} - yield - end - - def visit_for(node) - node.from.options = @options - node.to.options = @options - yield - end - - def visit_function(node) - node.args.each do |k, v| - k.options = @options - v.options = @options if v - end - node.splat.options = @options if node.splat - yield - end - - def visit_if(node) - node.expr.options = @options if node.expr - visit(node.else) if node.else - yield - end - - def visit_import(node) - # We have no good way of propagating the new options through an Engine - # instance, so we just null it out. This also lets us avoid caching an - # imported Engine along with the importing source tree. - node.imported_file = nil - yield - end - - def visit_mixindef(node) - node.args.each do |k, v| - k.options = @options - v.options = @options if v - end - node.splat.options = @options if node.splat - yield - end - - def visit_mixin(node) - node.args.each {|a| a.options = @options} - node.keywords.each {|k, v| v.options = @options} - node.splat.options = @options if node.splat - node.kwarg_splat.options = @options if node.kwarg_splat - yield - end - - def visit_prop(node) - node.name.each {|c| c.options = @options if c.is_a?(Sass::Script::Tree::Node)} - node.value.options = @options - yield - end - - def visit_return(node) - node.expr.options = @options - yield - end - - def visit_rule(node) - node.rule.each {|c| c.options = @options if c.is_a?(Sass::Script::Tree::Node)} - yield - end - - def visit_variable(node) - node.expr.options = @options - yield - end - - def visit_warn(node) - node.expr.options = @options - yield - end - - def visit_while(node) - node.expr.options = @options - yield - end - - def visit_directive(node) - node.value.each {|c| c.options = @options if c.is_a?(Sass::Script::Tree::Node)} - yield - end - - def visit_media(node) - node.query.each {|c| c.options = @options if c.is_a?(Sass::Script::Tree::Node)} - yield - end - - def visit_cssimport(node) - node.query.each {|c| c.options = @options if c.is_a?(Sass::Script::Tree::Node)} if node.query - yield - end - - def visit_supports(node) - node.condition.options = @options - yield - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/to_css.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/to_css.rb deleted file mode 100644 index 0d5c03a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/visitors/to_css.rb +++ /dev/null @@ -1,381 +0,0 @@ -# A visitor for converting a Sass tree into CSS. -class Sass::Tree::Visitors::ToCss < Sass::Tree::Visitors::Base - # The source mapping for the generated CSS file. This is only set if - # `build_source_mapping` is passed to the constructor and \{Sass::Engine#render} has been - # run. - attr_reader :source_mapping - - # @param build_source_mapping [Boolean] Whether to build a - # \{Sass::Source::Map} while creating the CSS output. The mapping will - # be available from \{#source\_mapping} after the visitor has completed. - def initialize(build_source_mapping = false) - @tabs = 0 - @line = 1 - @offset = 1 - @result = "" - @source_mapping = Sass::Source::Map.new if build_source_mapping - end - - # Runs the visitor on `node`. - # - # @param node [Sass::Tree::Node] The root node of the tree to convert to CSS> - # @return [String] The CSS output. - def visit(node) - super - rescue Sass::SyntaxError => e - e.modify_backtrace(:filename => node.filename, :line => node.line) - raise e - end - - protected - - def with_tabs(tabs) - old_tabs, @tabs = @tabs, tabs - yield - ensure - @tabs = old_tabs - end - - # Associate all output produced in a block with a given node. Used for source - # mapping. - def for_node(node, attr_prefix = nil) - return yield unless @source_mapping - start_pos = Sass::Source::Position.new(@line, @offset) - yield - - range_attr = attr_prefix ? :"#{attr_prefix}_source_range" : :source_range - return if node.invisible? || !node.send(range_attr) - source_range = node.send(range_attr) - target_end_pos = Sass::Source::Position.new(@line, @offset) - target_range = Sass::Source::Range.new(start_pos, target_end_pos, nil) - @source_mapping.add(source_range, target_range) - end - - # Move the output cursor back `chars` characters. - def erase!(chars) - return if chars == 0 - str = @result.slice!(-chars..-1) - newlines = str.count("\n") - if newlines > 0 - @line -= newlines - @offset = @result[@result.rindex("\n") || 0..-1].size - else - @offset -= chars - end - end - - # Avoid allocating lots of new strings for `#output`. This is important - # because `#output` is called all the time. - NEWLINE = "\n" - - # Add `s` to the output string and update the line and offset information - # accordingly. - def output(s) - if @lstrip - s = s.gsub(/\A\s+/, "") - @lstrip = false - end - - newlines = s.count(NEWLINE) - if newlines > 0 - @line += newlines - @offset = s[s.rindex(NEWLINE)..-1].size - else - @offset += s.size - end - - @result << s - end - - # Strip all trailing whitespace from the output string. - def rstrip! - erase! @result.length - 1 - (@result.rindex(/[^\s]/) || -1) - end - - # lstrip the first output in the given block. - def lstrip - old_lstrip = @lstrip - @lstrip = true - yield - ensure - @lstrip = @lstrip && old_lstrip - end - - # Prepend `prefix` to the output string. - def prepend!(prefix) - @result.insert 0, prefix - return unless @source_mapping - - line_delta = prefix.count("\n") - offset_delta = prefix.gsub(/.*\n/, '').size - @source_mapping.shift_output_offsets(offset_delta) - @source_mapping.shift_output_lines(line_delta) - end - - def visit_root(node) - node.children.each do |child| - next if child.invisible? - visit(child) - unless node.style == :compressed - output "\n" - if child.is_a?(Sass::Tree::DirectiveNode) && child.has_children && !child.bubbles? - output "\n" - end - end - end - rstrip! - return "" if @result.empty? - - output "\n" - - unless Sass::Util.ruby1_8? || @result.ascii_only? - if node.style == :compressed - # A byte order mark is sufficient to tell browsers that this - # file is UTF-8 encoded, and will override any other detection - # methods as per http://encoding.spec.whatwg.org/#decode-and-encode. - prepend! "\uFEFF" - else - prepend! "@charset \"UTF-8\";\n" - end - end - - @result - rescue Sass::SyntaxError => e - e.sass_template ||= node.template - raise e - end - - def visit_charset(node) - for_node(node) {output("@charset \"#{node.name}\";")} - end - - def visit_comment(node) - return if node.invisible? - spaces = (' ' * [@tabs - node.resolved_value[/^ */].size, 0].max) - - content = node.resolved_value.gsub(/^/, spaces) - if node.type == :silent - content.gsub!(%r{^(\s*)//(.*)$}) {|md| "#{$1}/*#{$2} */"} - end - if (node.style == :compact || node.style == :compressed) && node.type != :loud - content.gsub!(/\n +(\* *(?!\/))?/, ' ') - end - for_node(node) {output(content)} - end - - # @comment - # rubocop:disable MethodLength - def visit_directive(node) - was_in_directive = @in_directive - tab_str = ' ' * @tabs - if !node.has_children || node.children.empty? - output(tab_str) - for_node(node) {output(node.resolved_value)} - output(!node.has_children ? ";" : " {}") - return - end - - @in_directive = @in_directive || !node.is_a?(Sass::Tree::MediaNode) - output(tab_str) if node.style != :compressed - for_node(node) {output(node.resolved_value)} - output(node.style == :compressed ? "{" : " {") - output(node.style == :compact ? ' ' : "\n") if node.style != :compressed - - was_prop = false - first = true - node.children.each do |child| - next if child.invisible? - if node.style == :compact - if child.is_a?(Sass::Tree::PropNode) - with_tabs(first || was_prop ? 0 : @tabs + 1) do - visit(child) - output(' ') - end - else - if was_prop - erase! 1 - output "\n" - end - - if first - lstrip {with_tabs(@tabs + 1) {visit(child)}} - else - with_tabs(@tabs + 1) {visit(child)} - end - - rstrip! - output "\n" - end - was_prop = child.is_a?(Sass::Tree::PropNode) - first = false - elsif node.style == :compressed - output(was_prop ? ";" : "") - with_tabs(0) {visit(child)} - was_prop = child.is_a?(Sass::Tree::PropNode) - else - with_tabs(@tabs + 1) {visit(child)} - output "\n" - end - end - rstrip! - if node.style == :expanded - output("\n#{tab_str}") - elsif node.style != :compressed - output(" ") - end - output("}") - ensure - @in_directive = was_in_directive - end - # @comment - # rubocop:enable MethodLength - - def visit_media(node) - with_tabs(@tabs + node.tabs) {visit_directive(node)} - output("\n") if node.style != :compressed && node.group_end - end - - def visit_supports(node) - visit_media(node) - end - - def visit_cssimport(node) - visit_directive(node) - end - - def visit_prop(node) - return if node.resolved_value.empty? - tab_str = ' ' * (@tabs + node.tabs) - output(tab_str) - for_node(node, :name) {output(node.resolved_name)} - if node.style == :compressed - output(":") - for_node(node, :value) {output(node.resolved_value)} - else - output(": ") - for_node(node, :value) {output(node.resolved_value)} - output(";") - end - end - - # @comment - # rubocop:disable MethodLength - def visit_rule(node) - with_tabs(@tabs + node.tabs) do - rule_separator = node.style == :compressed ? ',' : ', ' - line_separator = - case node.style - when :nested, :expanded; "\n" - when :compressed; "" - else; " " - end - rule_indent = ' ' * @tabs - per_rule_indent, total_indent = if [:nested, :expanded].include?(node.style) - [rule_indent, ''] - else - ['', rule_indent] - end - - joined_rules = node.resolved_rules.members.map do |seq| - next if seq.has_placeholder? - rule_part = seq.to_s - if node.style == :compressed - rule_part.gsub!(/([^,])\s*\n\s*/m, '\1 ') - rule_part.gsub!(/\s*([,+>])\s*/m, '\1') - rule_part.strip! - end - rule_part - end.compact.join(rule_separator) - - joined_rules.lstrip! - joined_rules.gsub!(/\s*\n\s*/, "#{line_separator}#{per_rule_indent}") - - old_spaces = ' ' * @tabs - if node.style != :compressed - if node.options[:debug_info] && !@in_directive - visit(debug_info_rule(node.debug_info, node.options)) - output "\n" - elsif node.options[:trace_selectors] - output("#{old_spaces}/* ") - output(node.stack_trace.gsub("\n", "\n #{old_spaces}")) - output(" */\n") - elsif node.options[:line_comments] - output("#{old_spaces}/* line #{node.line}") - - if node.filename - relative_filename = - if node.options[:css_filename] - begin - Sass::Util.relative_path_from( - node.filename, File.dirname(node.options[:css_filename])).to_s - rescue ArgumentError - nil - end - end - relative_filename ||= node.filename - output(", #{relative_filename}") - end - - output(" */\n") - end - end - - end_props, trailer, tabs = '', '', 0 - if node.style == :compact - separator, end_props, bracket = ' ', ' ', ' { ' - trailer = "\n" if node.group_end - elsif node.style == :compressed - separator, bracket = ';', '{' - else - tabs = @tabs + 1 - separator, bracket = "\n", " {\n" - trailer = "\n" if node.group_end - end_props = (node.style == :expanded ? "\n" + old_spaces : ' ') - end - output(total_indent + per_rule_indent) - for_node(node, :selector) {output(joined_rules)} - output(bracket) - - with_tabs(tabs) do - node.children.each_with_index do |child, i| - output(separator) if i > 0 - visit(child) - end - end - - output(end_props) - output("}" + trailer) - end - end - # @comment - # rubocop:enable MethodLength - - def visit_keyframerule(node) - visit_directive(node) - end - - private - - def debug_info_rule(debug_info, options) - node = Sass::Tree::DirectiveNode.resolved("@media -sass-debug-info") - Sass::Util.hash_to_a(debug_info.map {|k, v| [k.to_s, v.to_s]}).each do |k, v| - rule = Sass::Tree::RuleNode.new([""]) - rule.resolved_rules = Sass::Selector::CommaSequence.new( - [Sass::Selector::Sequence.new( - [Sass::Selector::SimpleSequence.new( - [Sass::Selector::Element.new(k.to_s.gsub(/[^\w-]/, "\\\\\\0"), nil)], - false) - ]) - ]) - prop = Sass::Tree::PropNode.new([""], Sass::Script::Value::String.new(''), :new) - prop.resolved_name = "font-family" - prop.resolved_value = Sass::SCSS::RX.escape_ident(v.to_s) - rule << prop - node << rule - end - node.options = options.merge(:debug_info => false, - :line_comments => false, - :style => :compressed) - node - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/warn_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/warn_node.rb deleted file mode 100644 index 4af4789..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/warn_node.rb +++ /dev/null @@ -1,18 +0,0 @@ -module Sass - module Tree - # A dynamic node representing a Sass `@warn` statement. - # - # @see Sass::Tree - class WarnNode < Node - # The expression to print. - # @return [Script::Tree::Node] - attr_accessor :expr - - # @param expr [Script::Tree::Node] The expression to print - def initialize(expr) - @expr = expr - super() - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/while_node.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/while_node.rb deleted file mode 100644 index 93529f0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/tree/while_node.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'sass/tree/node' - -module Sass::Tree - # A dynamic node representing a Sass `@while` loop. - # - # @see Sass::Tree - class WhileNode < Node - # The parse tree for the continuation expression. - # @return [Script::Tree::Node] - attr_accessor :expr - - # @param expr [Script::Tree::Node] See \{#expr} - def initialize(expr) - @expr = expr - super() - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util.rb deleted file mode 100644 index 4fcc45f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util.rb +++ /dev/null @@ -1,1376 +0,0 @@ -# -*- coding: utf-8 -*- -require 'erb' -require 'set' -require 'enumerator' -require 'stringio' -require 'rbconfig' -require 'uri' -require 'thread' -require 'pathname' - -require 'sass/root' -require 'sass/util/subset_map' - -module Sass - # A module containing various useful functions. - module Util - extend self - - # An array of ints representing the Ruby version number. - # @api public - RUBY_VERSION_COMPONENTS = RUBY_VERSION.split(".").map {|s| s.to_i} - - # The Ruby engine we're running under. Defaults to `"ruby"` - # if the top-level constant is undefined. - # @api public - RUBY_ENGINE = defined?(::RUBY_ENGINE) ? ::RUBY_ENGINE : "ruby" - - # Returns the path of a file relative to the Sass root directory. - # - # @param file [String] The filename relative to the Sass root - # @return [String] The filename relative to the the working directory - def scope(file) - File.join(Sass::ROOT_DIR, file) - end - - # Converts an array of `[key, value]` pairs to a hash. - # - # @example - # to_hash([[:foo, "bar"], [:baz, "bang"]]) - # #=> {:foo => "bar", :baz => "bang"} - # @param arr [Array<(Object, Object)>] An array of pairs - # @return [Hash] A hash - def to_hash(arr) - ordered_hash(*arr.compact) - end - - # Maps the keys in a hash according to a block. - # - # @example - # map_keys({:foo => "bar", :baz => "bang"}) {|k| k.to_s} - # #=> {"foo" => "bar", "baz" => "bang"} - # @param hash [Hash] The hash to map - # @yield [key] A block in which the keys are transformed - # @yieldparam key [Object] The key that should be mapped - # @yieldreturn [Object] The new value for the key - # @return [Hash] The mapped hash - # @see #map_vals - # @see #map_hash - def map_keys(hash) - map_hash(hash) {|k, v| [yield(k), v]} - end - - # Maps the values in a hash according to a block. - # - # @example - # map_values({:foo => "bar", :baz => "bang"}) {|v| v.to_sym} - # #=> {:foo => :bar, :baz => :bang} - # @param hash [Hash] The hash to map - # @yield [value] A block in which the values are transformed - # @yieldparam value [Object] The value that should be mapped - # @yieldreturn [Object] The new value for the value - # @return [Hash] The mapped hash - # @see #map_keys - # @see #map_hash - def map_vals(hash) - # We don't delegate to map_hash for performance here - # because map_hash does more than is necessary. - rv = hash.class.new - hash = hash.as_stored if hash.is_a?(NormalizedMap) - hash.each do |k, v| - rv[k] = yield(v) - end - rv - end - - # Maps the key-value pairs of a hash according to a block. - # - # @example - # map_hash({:foo => "bar", :baz => "bang"}) {|k, v| [k.to_s, v.to_sym]} - # #=> {"foo" => :bar, "baz" => :bang} - # @param hash [Hash] The hash to map - # @yield [key, value] A block in which the key-value pairs are transformed - # @yieldparam [key] The hash key - # @yieldparam [value] The hash value - # @yieldreturn [(Object, Object)] The new value for the `[key, value]` pair - # @return [Hash] The mapped hash - # @see #map_keys - # @see #map_vals - def map_hash(hash) - # Copy and modify is more performant than mapping to an array and using - # to_hash on the result. - rv = hash.class.new - hash.each do |k, v| - new_key, new_value = yield(k, v) - new_key = hash.denormalize(new_key) if hash.is_a?(NormalizedMap) && new_key == k - rv[new_key] = new_value - end - rv - end - - # Computes the powerset of the given array. - # This is the set of all subsets of the array. - # - # @example - # powerset([1, 2, 3]) #=> - # Set[Set[], Set[1], Set[2], Set[3], Set[1, 2], Set[2, 3], Set[1, 3], Set[1, 2, 3]] - # @param arr [Enumerable] - # @return [Set] The subsets of `arr` - def powerset(arr) - arr.inject([Set.new].to_set) do |powerset, el| - new_powerset = Set.new - powerset.each do |subset| - new_powerset << subset - new_powerset << subset + [el] - end - new_powerset - end - end - - # Restricts a number to falling within a given range. - # Returns the number if it falls within the range, - # or the closest value in the range if it doesn't. - # - # @param value [Numeric] - # @param range [Range] - # @return [Numeric] - def restrict(value, range) - [[value, range.first].max, range.last].min - end - - # Concatenates all strings that are adjacent in an array, - # while leaving other elements as they are. - # - # @example - # merge_adjacent_strings([1, "foo", "bar", 2, "baz"]) - # #=> [1, "foobar", 2, "baz"] - # @param arr [Array] - # @return [Array] The enumerable with strings merged - def merge_adjacent_strings(arr) - # Optimize for the common case of one element - return arr if arr.size < 2 - arr.inject([]) do |a, e| - if e.is_a?(String) - if a.last.is_a?(String) - a.last << e - else - a << e.dup - end - else - a << e - end - a - end - end - - # Non-destructively replaces all occurrences of a subsequence in an array - # with another subsequence. - # - # @example - # replace_subseq([1, 2, 3, 4, 5], [2, 3], [:a, :b]) - # #=> [1, :a, :b, 4, 5] - # - # @param arr [Array] The array whose subsequences will be replaced. - # @param subseq [Array] The subsequence to find and replace. - # @param replacement [Array] The sequence that `subseq` will be replaced with. - # @return [Array] `arr` with `subseq` replaced with `replacement`. - def replace_subseq(arr, subseq, replacement) - new = [] - matched = [] - i = 0 - arr.each do |elem| - if elem != subseq[i] - new.push(*matched) - matched = [] - i = 0 - new << elem - next - end - - if i == subseq.length - 1 - matched = [] - i = 0 - new.push(*replacement) - else - matched << elem - i += 1 - end - end - new.push(*matched) - new - end - - # Intersperses a value in an enumerable, as would be done with `Array#join` - # but without concatenating the array together afterwards. - # - # @param enum [Enumerable] - # @param val - # @return [Array] - def intersperse(enum, val) - enum.inject([]) {|a, e| a << e << val}[0...-1] - end - - def slice_by(enum) - results = [] - enum.each do |value| - key = yield(value) - if !results.empty? && results.last.first == key - results.last.last << value - else - results << [key, [value]] - end - end - results - end - - # Substitutes a sub-array of one array with another sub-array. - # - # @param ary [Array] The array in which to make the substitution - # @param from [Array] The sequence of elements to replace with `to` - # @param to [Array] The sequence of elements to replace `from` with - def substitute(ary, from, to) - res = ary.dup - i = 0 - while i < res.size - if res[i...i + from.size] == from - res[i...i + from.size] = to - end - i += 1 - end - res - end - - # Destructively strips whitespace from the beginning and end - # of the first and last elements, respectively, - # in the array (if those elements are strings). - # - # @param arr [Array] - # @return [Array] `arr` - def strip_string_array(arr) - arr.first.lstrip! if arr.first.is_a?(String) - arr.last.rstrip! if arr.last.is_a?(String) - arr - end - - # Return an array of all possible paths through the given arrays. - # - # @param arrs [Array] - # @return [Array] - # - # @example - # paths([[1, 2], [3, 4], [5]]) #=> - # # [[1, 3, 5], - # # [2, 3, 5], - # # [1, 4, 5], - # # [2, 4, 5]] - def paths(arrs) - arrs.inject([[]]) do |paths, arr| - flatten(arr.map {|e| paths.map {|path| path + [e]}}, 1) - end - end - - # Computes a single longest common subsequence for `x` and `y`. - # If there are more than one longest common subsequences, - # the one returned is that which starts first in `x`. - # - # @param x [Array] - # @param y [Array] - # @yield [a, b] An optional block to use in place of a check for equality - # between elements of `x` and `y`. - # @yieldreturn [Object, nil] If the two values register as equal, - # this will return the value to use in the LCS array. - # @return [Array] The LCS - def lcs(x, y, &block) - x = [nil, *x] - y = [nil, *y] - block ||= proc {|a, b| a == b && a} - lcs_backtrace(lcs_table(x, y, &block), x, y, x.size - 1, y.size - 1, &block) - end - - # Converts a Hash to an Array. This is usually identical to `Hash#to_a`, - # with the following exceptions: - # - # * In Ruby 1.8, `Hash#to_a` is not deterministically ordered, but this is. - # * In Ruby 1.9 when running tests, this is ordered in the same way it would - # be under Ruby 1.8 (sorted key order rather than insertion order). - # - # @param hash [Hash] - # @return [Array] - def hash_to_a(hash) - return hash.to_a unless ruby1_8? || defined?(Test::Unit) - hash.sort_by {|k, v| k} - end - - # Performs the equivalent of `enum.group_by.to_a`, but with a guaranteed - # order. Unlike {Util#hash_to_a}, the resulting order isn't sorted key order; - # instead, it's the same order as `#group_by` has under Ruby 1.9 (key - # appearance order). - # - # @param enum [Enumerable] - # @return [Array<[Object, Array]>] An array of pairs. - def group_by_to_a(enum) - return enum.group_by {|e| yield(e)}.to_a unless ruby1_8? - order = {} - arr = [] - groups = enum.group_by do |e| - res = yield(e) - unless order.include?(res) - order[res] = order.size - end - res - end - groups.each do |key, vals| - arr[order[key]] = [key, vals] - end - arr - end - - # Returns a sub-array of `minuend` containing only elements that are also in - # `subtrahend`. Ensures that the return value has the same order as - # `minuend`, even on Rubinius where that's not guaranteed by `Array#-`. - # - # @param minuend [Array] - # @param subtrahend [Array] - # @return [Array] - def array_minus(minuend, subtrahend) - return minuend - subtrahend unless rbx? - set = Set.new(minuend) - subtrahend - minuend.select {|e| set.include?(e)} - end - - # Returns the maximum of `val1` and `val2`. We use this over \{Array.max} to - # avoid unnecessary garbage collection. - def max(val1, val2) - val1 > val2 ? val1 : val2 - end - - # Returns the minimum of `val1` and `val2`. We use this over \{Array.min} to - # avoid unnecessary garbage collection. - def min(val1, val2) - val1 <= val2 ? val1 : val2 - end - - # Returns a string description of the character that caused an - # `Encoding::UndefinedConversionError`. - # - # @param e [Encoding::UndefinedConversionError] - # @return [String] - def undefined_conversion_error_char(e) - # Rubinius (as of 2.0.0.rc1) pre-quotes the error character. - return e.error_char if rbx? - # JRuby (as of 1.7.2) doesn't have an error_char field on - # Encoding::UndefinedConversionError. - return e.error_char.dump unless jruby? - e.message[/^"[^"]+"/] # " - end - - # Asserts that `value` falls within `range` (inclusive), leaving - # room for slight floating-point errors. - # - # @param name [String] The name of the value. Used in the error message. - # @param range [Range] The allowed range of values. - # @param value [Numeric, Sass::Script::Value::Number] The value to check. - # @param unit [String] The unit of the value. Used in error reporting. - # @return [Numeric] `value` adjusted to fall within range, if it - # was outside by a floating-point margin. - def check_range(name, range, value, unit = '') - grace = (-0.00001..0.00001) - str = value.to_s - value = value.value if value.is_a?(Sass::Script::Value::Number) - return value if range.include?(value) - return range.first if grace.include?(value - range.first) - return range.last if grace.include?(value - range.last) - raise ArgumentError.new( - "#{name} #{str} must be between #{range.first}#{unit} and #{range.last}#{unit}") - end - - # Returns whether or not `seq1` is a subsequence of `seq2`. That is, whether - # or not `seq2` contains every element in `seq1` in the same order (and - # possibly more elements besides). - # - # @param seq1 [Array] - # @param seq2 [Array] - # @return [Boolean] - def subsequence?(seq1, seq2) - i = j = 0 - loop do - return true if i == seq1.size - return false if j == seq2.size - i += 1 if seq1[i] == seq2[j] - j += 1 - end - end - - # Returns information about the caller of the previous method. - # - # @param entry [String] An entry in the `#caller` list, or a similarly formatted string - # @return [[String, Fixnum, (String, nil)]] - # An array containing the filename, line, and method name of the caller. - # The method name may be nil - def caller_info(entry = nil) - # JRuby evaluates `caller` incorrectly when it's in an actual default argument. - entry ||= caller[1] - info = entry.scan(/^((?:[A-Za-z]:)?.*?):(-?.*?)(?::.*`(.+)')?$/).first - info[1] = info[1].to_i - # This is added by Rubinius to designate a block, but we don't care about it. - info[2].sub!(/ \{\}\Z/, '') if info[2] - info - end - - # Returns whether one version string represents a more recent version than another. - # - # @param v1 [String] A version string. - # @param v2 [String] Another version string. - # @return [Boolean] - def version_gt(v1, v2) - # Construct an array to make sure the shorter version is padded with nil - Array.new([v1.length, v2.length].max).zip(v1.split("."), v2.split(".")) do |_, p1, p2| - p1 ||= "0" - p2 ||= "0" - release1 = p1 =~ /^[0-9]+$/ - release2 = p2 =~ /^[0-9]+$/ - if release1 && release2 - # Integer comparison if both are full releases - p1, p2 = p1.to_i, p2.to_i - next if p1 == p2 - return p1 > p2 - elsif !release1 && !release2 - # String comparison if both are prereleases - next if p1 == p2 - return p1 > p2 - else - # If only one is a release, that one is newer - return release1 - end - end - end - - # Returns whether one version string represents the same or a more - # recent version than another. - # - # @param v1 [String] A version string. - # @param v2 [String] Another version string. - # @return [Boolean] - def version_geq(v1, v2) - version_gt(v1, v2) || !version_gt(v2, v1) - end - - # Throws a NotImplementedError for an abstract method. - # - # @param obj [Object] `self` - # @raise [NotImplementedError] - def abstract(obj) - raise NotImplementedError.new("#{obj.class} must implement ##{caller_info[2]}") - end - - # Prints a deprecation warning for the caller method. - # - # @param obj [Object] `self` - # @param message [String] A message describing what to do instead. - def deprecated(obj, message = nil) - obj_class = obj.is_a?(Class) ? "#{obj}." : "#{obj.class}#" - full_message = "DEPRECATION WARNING: #{obj_class}#{caller_info[2]} " + - "will be removed in a future version of Sass.#{("\n" + message) if message}" - Sass::Util.sass_warn full_message - end - - # Silence all output to STDERR within a block. - # - # @yield A block in which no output will be printed to STDERR - def silence_warnings - the_real_stderr, $stderr = $stderr, StringIO.new - yield - ensure - $stderr = the_real_stderr - end - - # Silences all Sass warnings within a block. - # - # @yield A block in which no Sass warnings will be printed - def silence_sass_warnings - old_level, Sass.logger.log_level = Sass.logger.log_level, :error - yield - ensure - Sass.logger.log_level = old_level - end - - # The same as `Kernel#warn`, but is silenced by \{#silence\_sass\_warnings}. - # - # @param msg [String] - def sass_warn(msg) - msg = msg + "\n" unless ruby1? - Sass.logger.warn(msg) - end - - ## Cross Rails Version Compatibility - - # Returns the root of the Rails application, - # if this is running in a Rails context. - # Returns `nil` if no such root is defined. - # - # @return [String, nil] - def rails_root - if defined?(::Rails.root) - return ::Rails.root.to_s if ::Rails.root - raise "ERROR: Rails.root is nil!" - end - return RAILS_ROOT.to_s if defined?(RAILS_ROOT) - nil - end - - # Returns the environment of the Rails application, - # if this is running in a Rails context. - # Returns `nil` if no such environment is defined. - # - # @return [String, nil] - def rails_env - return ::Rails.env.to_s if defined?(::Rails.env) - return RAILS_ENV.to_s if defined?(RAILS_ENV) - nil - end - - # Returns whether this environment is using ActionPack - # version 3.0.0 or greater. - # - # @return [Boolean] - def ap_geq_3? - ap_geq?("3.0.0.beta1") - end - - # Returns whether this environment is using ActionPack - # of a version greater than or equal to that specified. - # - # @param version [String] The string version number to check against. - # Should be greater than or equal to Rails 3, - # because otherwise ActionPack::VERSION isn't autoloaded - # @return [Boolean] - def ap_geq?(version) - # The ActionPack module is always loaded automatically in Rails >= 3 - return false unless defined?(ActionPack) && defined?(ActionPack::VERSION) && - defined?(ActionPack::VERSION::STRING) - - version_geq(ActionPack::VERSION::STRING, version) - end - - # Returns whether this environment is using Listen - # version 2.0.0 or greater. - # - # @return [Boolean] - def listen_geq_2? - return @listen_geq_2 unless @listen_geq_2.nil? - @listen_geq_2 = - begin - require 'listen/version' - version_geq(::Listen::VERSION, '2.0.0') - rescue LoadError - false - end - end - - # Returns an ActionView::Template* class. - # In pre-3.0 versions of Rails, most of these classes - # were of the form `ActionView::TemplateFoo`, - # while afterwards they were of the form `ActionView;:Template::Foo`. - # - # @param name [#to_s] The name of the class to get. - # For example, `:Error` will return `ActionView::TemplateError` - # or `ActionView::Template::Error`. - def av_template_class(name) - return ActionView.const_get("Template#{name}") if ActionView.const_defined?("Template#{name}") - ActionView::Template.const_get(name.to_s) - end - - ## Cross-OS Compatibility - # - # These methods are cached because some of them are called quite frequently - # and even basic checks like String#== are too costly to be called repeatedly. - - # Whether or not this is running on Windows. - # - # @return [Boolean] - def windows? - return @windows if defined?(@windows) - @windows = (RbConfig::CONFIG['host_os'] =~ /mswin|windows|mingw/i) - end - - # Whether or not this is running on IronRuby. - # - # @return [Boolean] - def ironruby? - return @ironruby if defined?(@ironruby) - @ironruby = RUBY_ENGINE == "ironruby" - end - - # Whether or not this is running on Rubinius. - # - # @return [Boolean] - def rbx? - return @rbx if defined?(@rbx) - @rbx = RUBY_ENGINE == "rbx" - end - - # Whether or not this is running on JRuby. - # - # @return [Boolean] - def jruby? - return @jruby if defined?(@jruby) - @jruby = RUBY_PLATFORM =~ /java/ - end - - # Returns an array of ints representing the JRuby version number. - # - # @return [Array] - def jruby_version - @jruby_version ||= ::JRUBY_VERSION.split(".").map {|s| s.to_i} - end - - # Like `Dir.glob`, but works with backslash-separated paths on Windows. - # - # @param path [String] - def glob(path) - path = path.gsub('\\', '/') if windows? - if block_given? - Dir.glob(path) {|f| yield(f)} - else - Dir.glob(path) - end - end - - # Like `Pathname.new`, but normalizes Windows paths to always use backslash - # separators. - # - # `Pathname#relative_path_from` can break if the two pathnames aren't - # consistent in their slash style. - # - # @param path [String] - # @return [Pathname] - def pathname(path) - path = path.tr("/", "\\") if windows? - Pathname.new(path) - end - - # Like `Pathname#cleanpath`, but normalizes Windows paths to always use - # backslash separators. Normally, `Pathname#cleanpath` actually does the - # reverse -- it will convert backslashes to forward slashes, which can break - # `Pathname#relative_path_from`. - # - # @param path [String, Pathname] - # @return [Pathname] - def cleanpath(path) - path = Pathname.new(path) unless path.is_a?(Pathname) - pathname(path.cleanpath.to_s) - end - - # Returns `path` with all symlinks resolved. - # - # @param path [String, Pathname] - # @return [Pathname] - def realpath(path) - path = Pathname.new(path) unless path.is_a?(Pathname) - - # Explicitly DON'T run #pathname here. We don't want to convert - # to Windows directory separators because we're comparing these - # against the paths returned by Listen, which use forward - # slashes everywhere. - begin - path.realpath - rescue SystemCallError - # If [path] doesn't actually exist, don't bail, just - # return the original. - path - end - end - - # Returns `path` relative to `from`. - # - # This is like `Pathname#relative_path_from` except it accepts both strings - # and pathnames, it handles Windows path separators correctly, and it throws - # an error rather than crashing if the paths use different encodings - # (https://github.com/ruby/ruby/pull/713). - # - # @param path [String, Pathname] - # @param from [String, Pathname] - # @return [Pathname?] - def relative_path_from(path, from) - pathname(path.to_s).relative_path_from(pathname(from.to_s)) - rescue NoMethodError => e - raise e unless e.name == :zero? - - # Work around https://github.com/ruby/ruby/pull/713. - path = path.to_s - from = from.to_s - raise ArgumentError("Incompatible path encodings: #{path.inspect} is #{path.encoding}, " + - "#{from.inspect} is #{from.encoding}") - end - - # Converts `path` to a "file:" URI. This handles Windows paths correctly. - # - # @param path [String, Pathname] - # @return [String] - def file_uri_from_path(path) - path = path.to_s if path.is_a?(Pathname) - path = path.tr('\\', '/') if windows? - path = Sass::Util.escape_uri(path) - return path.start_with?('/') ? "file://" + path : path unless windows? - return "file:///" + path.tr("\\", "/") if path =~ /^[a-zA-Z]:[\/\\]/ - return "file:" + path.tr("\\", "/") if path =~ /\\\\[^\\]+\\[^\\\/]+/ - path.tr("\\", "/") - end - - # Retries a filesystem operation if it fails on Windows. Windows - # has weird and flaky locking rules that can cause operations to fail. - # - # @yield [] The filesystem operation. - def retry_on_windows - return yield unless windows? - - begin - yield - rescue SystemCallError - sleep 0.1 - yield - end - end - - # Prepare a value for a destructuring assignment (e.g. `a, b = - # val`). This works around a performance bug when using - # ActiveSupport, and only needs to be called when `val` is likely - # to be `nil` reasonably often. - # - # See [this bug report](http://redmine.ruby-lang.org/issues/4917). - # - # @param val [Object] - # @return [Object] - def destructure(val) - val || [] - end - - ## Cross-Ruby-Version Compatibility - - # Whether or not this is running under a Ruby version under 2.0. - # - # @return [Boolean] - def ruby1? - return @ruby1 if defined?(@ruby1) - @ruby1 = RUBY_VERSION_COMPONENTS[0] <= 1 - end - - # Whether or not this is running under Ruby 1.8 or lower. - # - # Note that IronRuby counts as Ruby 1.8, - # because it doesn't support the Ruby 1.9 encoding API. - # - # @return [Boolean] - def ruby1_8? - # IronRuby says its version is 1.9, but doesn't support any of the encoding APIs. - # We have to fall back to 1.8 behavior. - return @ruby1_8 if defined?(@ruby1_8) - @ruby1_8 = ironruby? || - (RUBY_VERSION_COMPONENTS[0] == 1 && RUBY_VERSION_COMPONENTS[1] < 9) - end - - # Whether or not this is running under Ruby 1.8.6 or lower. - # Note that lower versions are not officially supported. - # - # @return [Boolean] - def ruby1_8_6? - return @ruby1_8_6 if defined?(@ruby1_8_6) - @ruby1_8_6 = ruby1_8? && RUBY_VERSION_COMPONENTS[2] < 7 - end - - # Whether or not this is running under Ruby 1.9.2 exactly. - # - # @return [Boolean] - def ruby1_9_2? - return @ruby1_9_2 if defined?(@ruby1_9_2) - @ruby1_9_2 = RUBY_VERSION_COMPONENTS == [1, 9, 2] - end - - # Wehter or not this is running under JRuby 1.6 or lower. - def jruby1_6? - return @jruby1_6 if defined?(@jruby1_6) - @jruby1_6 = jruby? && jruby_version[0] == 1 && jruby_version[1] < 7 - end - - # Whether or not this is running under MacRuby. - # - # @return [Boolean] - def macruby? - return @macruby if defined?(@macruby) - @macruby = RUBY_ENGINE == 'macruby' - end - - require 'sass/util/ordered_hash' if ruby1_8? - - # Converts a hash or a list of pairs into an order-preserving hash. - # - # On Ruby 1.8.7, this uses the orderedhash gem to simulate an - # order-preserving hash. On Ruby 1.9 and up, it just uses the native Hash - # class, since that preserves the order itself. - # - # @overload ordered_hash(hash) - # @param hash [Hash] a normal hash to convert to an ordered hash - # @return [Hash] - # @overload ordered_hash(*pairs) - # @example - # ordered_hash([:foo, "bar"], [:baz, "bang"]) - # #=> {:foo => "bar", :baz => "bang"} - # ordered_hash #=> {} - # @param pairs [Array<(Object, Object)>] the list of key/value pairs for - # the hash. - # @return [Hash] - def ordered_hash(*pairs_or_hash) - if pairs_or_hash.length == 1 && pairs_or_hash.first.is_a?(Hash) - hash = pairs_or_hash.first - return hash unless ruby1_8? - return OrderedHash.new.merge hash - end - - return Hash[pairs_or_hash] unless ruby1_8? - (pairs_or_hash.is_a?(NormalizedMap) ? NormalizedMap : OrderedHash)[*flatten(pairs_or_hash, 1)] - end - - unless ruby1_8? - CHARSET_REGEXP = /\A@charset "([^"]+)"/ - UTF_8_BOM = "\xEF\xBB\xBF".force_encoding('BINARY') - UTF_16BE_BOM = "\xFE\xFF".force_encoding('BINARY') - UTF_16LE_BOM = "\xFF\xFE".force_encoding('BINARY') - end - - # Like {\#check\_encoding}, but also checks for a `@charset` declaration - # at the beginning of the file and uses that encoding if it exists. - # - # Sass follows CSS's decoding rules. - # - # @param str [String] The string of which to check the encoding - # @return [(String, Encoding)] The original string encoded as UTF-8, - # and the source encoding of the string (or `nil` under Ruby 1.8) - # @raise [Encoding::UndefinedConversionError] if the source encoding - # cannot be converted to UTF-8 - # @raise [ArgumentError] if the document uses an unknown encoding with `@charset` - # @raise [Sass::SyntaxError] If the document declares an encoding that - # doesn't match its contents, or it doesn't declare an encoding and its - # contents are invalid in the native encoding. - def check_sass_encoding(str) - # On Ruby 1.8 we can't do anything complicated with encodings. - # Instead, we just strip out a UTF-8 BOM if it exists and - # sanitize according to Section 3.3 of CSS Syntax Level 3. We - # don't sanitize null characters since they might be components - # of other characters. - if ruby1_8? - return str.gsub(/\A\xEF\xBB\xBF/, '').gsub(/\r\n?|\f/, "\n"), nil - end - - # Determine the fallback encoding following section 3.2 of CSS Syntax Level 3 and Encodings: - # http://www.w3.org/TR/2013/WD-css-syntax-3-20130919/#determine-the-fallback-encoding - # http://encoding.spec.whatwg.org/#decode - binary = str.dup.force_encoding("BINARY") - if binary.start_with?(UTF_8_BOM) - binary.slice! 0, UTF_8_BOM.length - str = binary.force_encoding('UTF-8') - elsif binary.start_with?(UTF_16BE_BOM) - binary.slice! 0, UTF_16BE_BOM.length - str = binary.force_encoding('UTF-16BE') - elsif binary.start_with?(UTF_16LE_BOM) - binary.slice! 0, UTF_16LE_BOM.length - str = binary.force_encoding('UTF-16LE') - elsif binary =~ CHARSET_REGEXP - charset = $1.force_encoding('US-ASCII') - # Ruby 1.9.2 doesn't recognize a UTF-16 encoding without an endian marker. - if ruby1_9_2? && charset.downcase == 'utf-16' - encoding = Encoding.find('UTF-8') - else - encoding = Encoding.find(charset) - if encoding.name == 'UTF-16' || encoding.name == 'UTF-16BE' - encoding = Encoding.find('UTF-8') - end - end - str = binary.force_encoding(encoding) - elsif str.encoding.name == "ASCII-8BIT" - # Normally we want to fall back on believing the Ruby string - # encoding, but if that's just binary we want to make sure - # it's valid UTF-8. - str = str.force_encoding('utf-8') - end - - find_encoding_error(str) unless str.valid_encoding? - - begin - # If the string is valid, preprocess it according to section 3.3 of CSS Syntax Level 3. - return str.encode("UTF-8").gsub(/\r\n?|\f/, "\n").tr("\u0000", "�"), str.encoding - rescue EncodingError - find_encoding_error(str) - end - end - - # Checks to see if a class has a given method. - # For example: - # - # Sass::Util.has?(:public_instance_method, String, :gsub) #=> true - # - # Method collections like `Class#instance_methods` - # return strings in Ruby 1.8 and symbols in Ruby 1.9 and on, - # so this handles checking for them in a compatible way. - # - # @param attr [#to_s] The (singular) name of the method-collection method - # (e.g. `:instance_methods`, `:private_methods`) - # @param klass [Module] The class to check the methods of which to check - # @param method [String, Symbol] The name of the method do check for - # @return [Boolean] Whether or not the given collection has the given method - def has?(attr, klass, method) - klass.send("#{attr}s").include?(ruby1_8? ? method.to_s : method.to_sym) - end - - # A version of `Enumerable#enum_with_index` that works in Ruby 1.8 and 1.9. - # - # @param enum [Enumerable] The enumerable to get the enumerator for - # @return [Enumerator] The with-index enumerator - def enum_with_index(enum) - ruby1_8? ? enum.enum_with_index : enum.each_with_index - end - - # A version of `Enumerable#enum_cons` that works in Ruby 1.8 and 1.9. - # - # @param enum [Enumerable] The enumerable to get the enumerator for - # @param n [Fixnum] The size of each cons - # @return [Enumerator] The consed enumerator - def enum_cons(enum, n) - ruby1_8? ? enum.enum_cons(n) : enum.each_cons(n) - end - - # A version of `Enumerable#enum_slice` that works in Ruby 1.8 and 1.9. - # - # @param enum [Enumerable] The enumerable to get the enumerator for - # @param n [Fixnum] The size of each slice - # @return [Enumerator] The consed enumerator - def enum_slice(enum, n) - ruby1_8? ? enum.enum_slice(n) : enum.each_slice(n) - end - - # Destructively removes all elements from an array that match a block, and - # returns the removed elements. - # - # @param array [Array] The array from which to remove elements. - # @yield [el] Called for each element. - # @yieldparam el [*] The element to test. - # @yieldreturn [Boolean] Whether or not to extract the element. - # @return [Array] The extracted elements. - def extract!(array) - out = [] - array.reject! do |e| - next false unless yield e - out << e - true - end - out - end - - # Returns the ASCII code of the given character. - # - # @param c [String] All characters but the first are ignored. - # @return [Fixnum] The ASCII code of `c`. - def ord(c) - ruby1_8? ? c[0] : c.ord - end - - # Flattens the first `n` nested arrays in a cross-version manner. - # - # @param arr [Array] The array to flatten - # @param n [Fixnum] The number of levels to flatten - # @return [Array] The flattened array - def flatten(arr, n) - return arr.flatten(n) unless ruby1_8_6? - return arr if n == 0 - arr.inject([]) {|res, e| e.is_a?(Array) ? res.concat(flatten(e, n - 1)) : res << e} - end - - # Flattens the first level of nested arrays in `arrs`. Unlike - # `Array#flatten`, this orders the result by taking the first - # values from each array in order, then the second, and so on. - # - # @param arrs [Array] The array to flatten. - # @return [Array] The flattened array. - def flatten_vertically(arrs) - result = [] - arrs = arrs.map {|sub| sub.is_a?(Array) ? sub.dup : Array(sub)} - until arrs.empty? - arrs.reject! do |arr| - result << arr.shift - arr.empty? - end - end - result - end - - # Returns the hash code for a set in a cross-version manner. - # Aggravatingly, this is order-dependent in Ruby 1.8.6. - # - # @param set [Set] - # @return [Fixnum] The order-independent hashcode of `set` - def set_hash(set) - return set.hash unless ruby1_8_6? - set.map {|e| e.hash}.uniq.sort.hash - end - - # Tests the hash-equality of two sets in a cross-version manner. - # Aggravatingly, this is order-dependent in Ruby 1.8.6. - # - # @param set1 [Set] - # @param set2 [Set] - # @return [Boolean] Whether or not the sets are hashcode equal - def set_eql?(set1, set2) - return set1.eql?(set2) unless ruby1_8_6? - set1.to_a.uniq.sort_by {|e| e.hash}.eql?(set2.to_a.uniq.sort_by {|e| e.hash}) - end - - # Like `Object#inspect`, but preserves non-ASCII characters rather than - # escaping them under Ruby 1.9.2. This is necessary so that the - # precompiled Haml template can be `#encode`d into `@options[:encoding]` - # before being evaluated. - # - # @param obj {Object} - # @return {String} - def inspect_obj(obj) - return obj.inspect unless version_geq(RUBY_VERSION, "1.9.2") - return ':' + inspect_obj(obj.to_s) if obj.is_a?(Symbol) - return obj.inspect unless obj.is_a?(String) - '"' + obj.gsub(/[\x00-\x7F]+/) {|s| s.inspect[1...-1]} + '"' - end - - # Extracts the non-string vlaues from an array containing both strings and non-strings. - # These values are replaced with escape sequences. - # This can be undone using \{#inject\_values}. - # - # This is useful e.g. when we want to do string manipulation - # on an interpolated string. - # - # The precise format of the resulting string is not guaranteed. - # However, it is guaranteed that newlines and whitespace won't be affected. - # - # @param arr [Array] The array from which values are extracted. - # @return [(String, Array)] The resulting string, and an array of extracted values. - def extract_values(arr) - values = [] - mapped = arr.map do |e| - next e.gsub('{', '{{') if e.is_a?(String) - values << e - next "{#{values.count - 1}}" - end - return mapped.join, values - end - - # Undoes \{#extract\_values} by transforming a string with escape sequences - # into an array of strings and non-string values. - # - # @param str [String] The string with escape sequences. - # @param values [Array] The array of values to inject. - # @return [Array] The array of strings and values. - def inject_values(str, values) - return [str.gsub('{{', '{')] if values.empty? - # Add an extra { so that we process the tail end of the string - result = (str + '{{').scan(/(.*?)(?:(\{\{)|\{(\d+)\})/m).map do |(pre, esc, n)| - [pre, esc ? '{' : '', n ? values[n.to_i] : ''] - end.flatten(1) - result[-2] = '' # Get rid of the extra { - merge_adjacent_strings(result).reject {|s| s == ''} - end - - # Allows modifications to be performed on the string form - # of an array containing both strings and non-strings. - # - # @param arr [Array] The array from which values are extracted. - # @yield [str] A block in which string manipulation can be done to the array. - # @yieldparam str [String] The string form of `arr`. - # @yieldreturn [String] The modified string. - # @return [Array] The modified, interpolated array. - def with_extracted_values(arr) - str, vals = extract_values(arr) - str = yield str - inject_values(str, vals) - end - - # Builds a sourcemap file name given the generated CSS file name. - # - # @param css [String] The generated CSS file name. - # @return [String] The source map file name. - def sourcemap_name(css) - css + ".map" - end - - # Escapes certain characters so that the result can be used - # as the JSON string value. Returns the original string if - # no escaping is necessary. - # - # @param s [String] The string to be escaped - # @return [String] The escaped string - def json_escape_string(s) - return s if s !~ /["\\\b\f\n\r\t]/ - - result = "" - s.split("").each do |c| - case c - when '"', "\\" - result << "\\" << c - when "\n" then result << "\\n" - when "\t" then result << "\\t" - when "\r" then result << "\\r" - when "\f" then result << "\\f" - when "\b" then result << "\\b" - else - result << c - end - end - result - end - - # Converts the argument into a valid JSON value. - # - # @param v [Fixnum, String, Array, Boolean, nil] - # @return [String] - def json_value_of(v) - case v - when Fixnum - v.to_s - when String - "\"" + json_escape_string(v) + "\"" - when Array - "[" + v.map {|x| json_value_of(x)}.join(",") + "]" - when NilClass - "null" - when TrueClass - "true" - when FalseClass - "false" - else - raise ArgumentError.new("Unknown type: #{v.class.name}") - end - end - - VLQ_BASE_SHIFT = 5 - VLQ_BASE = 1 << VLQ_BASE_SHIFT - VLQ_BASE_MASK = VLQ_BASE - 1 - VLQ_CONTINUATION_BIT = VLQ_BASE - - BASE64_DIGITS = ('A'..'Z').to_a + ('a'..'z').to_a + ('0'..'9').to_a + ['+', '/'] - BASE64_DIGIT_MAP = begin - map = {} - Sass::Util.enum_with_index(BASE64_DIGITS).map do |digit, i| - map[digit] = i - end - map - end - - # Encodes `value` as VLQ (http://en.wikipedia.org/wiki/VLQ). - # - # @param value [Fixnum] - # @return [String] The encoded value - def encode_vlq(value) - if value < 0 - value = ((-value) << 1) | 1 - else - value <<= 1 - end - - result = '' - begin - digit = value & VLQ_BASE_MASK - value >>= VLQ_BASE_SHIFT - if value > 0 - digit |= VLQ_CONTINUATION_BIT - end - result << BASE64_DIGITS[digit] - end while value > 0 - result - end - - # This is a hack around the fact that you can't instantiate a URI parser on - # 1.8, so we have to have this hacky stuff to work around it. When 1.8 - # support is dropped, we can remove this method. - # - # @private - URI_ESCAPE = URI.const_defined?("DEFAULT_PARSER") ? URI::DEFAULT_PARSER : URI - - # URI-escape `string`. - # - # @param string [String] - # @return [String] - def escape_uri(string) - URI_ESCAPE.escape string - end - - # A cross-platform implementation of `File.absolute_path`. - # - # @param path [String] - # @param dir_string [String] The directory to consider [path] relative to. - # @return [String] The absolute version of `path`. - def absolute_path(path, dir_string = nil) - # Ruby 1.8 doesn't support File.absolute_path. - return File.absolute_path(path, dir_string) unless ruby1_8? - - # File.expand_path expands "~", which we don't want. - return File.expand_path(path, dir_string) unless path[0] == ?~ - File.expand_path(File.join(".", path), dir_string) - end - - ## Static Method Stuff - - # The context in which the ERB for \{#def\_static\_method} will be run. - class StaticConditionalContext - # @param set [#include?] The set of variables that are defined for this context. - def initialize(set) - @set = set - end - - # Checks whether or not a variable is defined for this context. - # - # @param name [Symbol] The name of the variable - # @return [Boolean] - def method_missing(name, *args) - super unless args.empty? && !block_given? - @set.include?(name) - end - end - - # @private - ATOMIC_WRITE_MUTEX = Mutex.new - - # This creates a temp file and yields it for writing. When the - # write is complete, the file is moved into the desired location. - # The atomicity of this operation is provided by the filesystem's - # rename operation. - # - # @param filename [String] The file to write to. - # @param perms [Integer] The permissions used for creating this file. - # Will be masked by the process umask. Defaults to readable/writeable - # by all users however the umask usually changes this to only be writable - # by the process's user. - # @yieldparam tmpfile [Tempfile] The temp file that can be written to. - # @return The value returned by the block. - def atomic_create_and_write_file(filename, perms = 0666) - require 'tempfile' - tmpfile = Tempfile.new(File.basename(filename), File.dirname(filename)) - tmpfile.binmode if tmpfile.respond_to?(:binmode) - result = yield tmpfile - tmpfile.close - ATOMIC_WRITE_MUTEX.synchronize do - begin - File.chmod(perms & ~File.umask, tmpfile.path) - rescue Errno::EPERM - # If we don't have permissions to chmod the file, don't let that crash - # the compilation. See issue 1215. - end - File.rename tmpfile.path, filename - end - result - ensure - # close and remove the tempfile if it still exists, - # presumably due to an error during write - tmpfile.close if tmpfile - tmpfile.unlink if tmpfile - end - - def load_listen! - if defined?(gem) - begin - gem 'listen', '>= 1.1.0', '< 3.0.0' - require 'listen' - rescue Gem::LoadError - dir = scope("vendor/listen/lib") - $LOAD_PATH.unshift dir - begin - require 'listen' - rescue LoadError => e - if version_geq(RUBY_VERSION, "1.9.3") - version_constraint = "~> 2.7" - else - version_constraint = "~> 1.1" - end - e.message << "\n" << - "Run \"gem install listen --version '#{version_constraint}'\" to get it." - raise e - end - end - else - begin - require 'listen' - rescue LoadError => e - dir = scope("vendor/listen/lib") - if $LOAD_PATH.include?(dir) - raise e unless File.exist?(scope(".git")) - e.message << "\n" << - 'Run "git submodule update --init" to get the bundled version.' - else - $LOAD_PATH.unshift dir - retry - end - end - end - end - - private - - def find_encoding_error(str) - encoding = str.encoding - cr = Regexp.quote("\r".encode(encoding).force_encoding('BINARY')) - lf = Regexp.quote("\n".encode(encoding).force_encoding('BINARY')) - ff = Regexp.quote("\f".encode(encoding).force_encoding('BINARY')) - line_break = /#{cr}#{lf}?|#{ff}|#{lf}/ - - str.force_encoding("binary").split(line_break).each_with_index do |line, i| - begin - line.encode(encoding) - rescue Encoding::UndefinedConversionError => e - raise Sass::SyntaxError.new( - "Invalid #{encoding.name} character #{undefined_conversion_error_char(e)}", - :line => i + 1) - end - end - - # We shouldn't get here, but it's possible some weird encoding stuff causes it. - return str, str.encoding - end - - # rubocop:disable LineLength - - # Calculates the memoization table for the Least Common Subsequence algorithm. - # Algorithm from [Wikipedia](http://en.wikipedia.org/wiki/Longest_common_subsequence_problem#Computing_the_length_of_the_LCS) - def lcs_table(x, y) - # This method does not take a block as an explicit parameter for performance reasons. - # rubocop:enable LineLength - c = Array.new(x.size) {[]} - x.size.times {|i| c[i][0] = 0} - y.size.times {|j| c[0][j] = 0} - (1...x.size).each do |i| - (1...y.size).each do |j| - c[i][j] = - if yield x[i], y[j] - c[i - 1][j - 1] + 1 - else - [c[i][j - 1], c[i - 1][j]].max - end - end - end - c - end - # rubocop:disable ParameterLists, LineLength - - # Computes a single longest common subsequence for arrays x and y. - # Algorithm from [Wikipedia](http://en.wikipedia.org/wiki/Longest_common_subsequence_problem#Reading_out_an_LCS) - def lcs_backtrace(c, x, y, i, j, &block) - # rubocop:enable ParameterList, LineLengths - return [] if i == 0 || j == 0 - if (v = yield(x[i], y[j])) - return lcs_backtrace(c, x, y, i - 1, j - 1, &block) << v - end - - return lcs_backtrace(c, x, y, i, j - 1, &block) if c[i][j - 1] > c[i - 1][j] - lcs_backtrace(c, x, y, i - 1, j, &block) - end - - singleton_methods.each {|method| module_function method} - end -end - -require 'sass/util/multibyte_string_scanner' -require 'sass/util/normalized_map' -require 'sass/util/cross_platform_random' diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util/cross_platform_random.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util/cross_platform_random.rb deleted file mode 100644 index 54ff739..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util/cross_platform_random.rb +++ /dev/null @@ -1,19 +0,0 @@ -module Sass - module Util - # Ruby 1.8 doesn't support an actual Random class with a settable seed. - class CrossPlatformRandom - def initialize(seed = nil) - if Sass::Util.ruby1_8? - srand(seed) if seed - else - @random = seed ? ::Random.new(seed) : ::Random.new - end - end - - def rand(*args) - return @random.rand(*args) if @random - Kernel.rand(*args) - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util/multibyte_string_scanner.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util/multibyte_string_scanner.rb deleted file mode 100644 index 6675aa5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util/multibyte_string_scanner.rb +++ /dev/null @@ -1,157 +0,0 @@ -require 'strscan' - -if Sass::Util.ruby1_8? - # rubocop:disable ConstantName - Sass::Util::MultibyteStringScanner = StringScanner - # rubocop:enable ConstantName -else - if Sass::Util.rbx? - # Rubinius's StringScanner class implements some of its methods in terms of - # others, which causes us to double-count bytes in some cases if we do - # straightforward inheritance. To work around this, we use a delegate class. - require 'delegate' - class Sass::Util::MultibyteStringScanner < DelegateClass(StringScanner) - def initialize(str) - super(StringScanner.new(str)) - @mb_pos = 0 - @mb_matched_size = nil - @mb_last_pos = nil - end - - def is_a?(klass) - __getobj__.is_a?(klass) || super - end - end - else - class Sass::Util::MultibyteStringScanner < StringScanner - def initialize(str) - super - @mb_pos = 0 - @mb_matched_size = nil - @mb_last_pos = nil - end - end - end - - # A wrapper of the native StringScanner class that works correctly with - # multibyte character encodings. The native class deals only in bytes, not - # characters, for methods like [#pos] and [#matched_size]. This class deals - # only in characters, instead. - class Sass::Util::MultibyteStringScanner - def self.new(str) - return StringScanner.new(str) if str.ascii_only? - super - end - - alias_method :byte_pos, :pos - alias_method :byte_matched_size, :matched_size - - def check(pattern); _match super; end - def check_until(pattern); _matched super; end - def getch; _forward _match super; end - def match?(pattern); _size check(pattern); end - def matched_size; @mb_matched_size; end - def peek(len); string[@mb_pos, len]; end - alias_method :peep, :peek - def pos; @mb_pos; end - alias_method :pointer, :pos - def rest_size; rest.size; end - def scan(pattern); _forward _match super; end - def scan_until(pattern); _forward _matched super; end - def skip(pattern); _size scan(pattern); end - def skip_until(pattern); _matched _size scan_until(pattern); end - - def get_byte - raise "MultibyteStringScanner doesn't support #get_byte." - end - - def getbyte - raise "MultibyteStringScanner doesn't support #getbyte." - end - - def pos=(n) - @mb_last_pos = nil - - # We set position kind of a lot during parsing, so we want it to be as - # efficient as possible. This is complicated by the fact that UTF-8 is a - # variable-length encoding, so it's difficult to find the byte length that - # corresponds to a given character length. - # - # Our heuristic here is to try to count the fewest possible characters. So - # if the new position is close to the current one, just count the - # characters between the two; if the new position is closer to the - # beginning of the string, just count the characters from there. - if @mb_pos - n < @mb_pos / 2 - # New position is close to old position - byte_delta = @mb_pos > n ? -string[n...@mb_pos].bytesize : string[@mb_pos...n].bytesize - super(byte_pos + byte_delta) - else - # New position is close to BOS - super(string[0...n].bytesize) - end - @mb_pos = n - end - - def reset - @mb_pos = 0 - @mb_matched_size = nil - @mb_last_pos = nil - super - end - - def scan_full(pattern, advance_pointer_p, return_string_p) - res = _match super(pattern, advance_pointer_p, true) - _forward res if advance_pointer_p - return res if return_string_p - end - - def search_full(pattern, advance_pointer_p, return_string_p) - res = super(pattern, advance_pointer_p, true) - _forward res if advance_pointer_p - _matched((res if return_string_p)) - end - - def string=(str) - @mb_pos = 0 - @mb_matched_size = nil - @mb_last_pos = nil - super - end - - def terminate - @mb_pos = string.size - @mb_matched_size = nil - @mb_last_pos = nil - super - end - alias_method :clear, :terminate - - def unscan - super - @mb_pos = @mb_last_pos - @mb_last_pos = @mb_matched_size = nil - end - - private - - def _size(str) - str && str.size - end - - def _match(str) - @mb_matched_size = str && str.size - str - end - - def _matched(res) - _match matched - res - end - - def _forward(str) - @mb_last_pos = @mb_pos - @mb_pos += str.size if str - str - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util/normalized_map.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util/normalized_map.rb deleted file mode 100644 index b7d7e83..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util/normalized_map.rb +++ /dev/null @@ -1,130 +0,0 @@ -require 'delegate' -require 'sass/util' - -module Sass - module Util - # A hash that normalizes its string keys while still allowing you to get back - # to the original keys that were stored. If several different values normalize - # to the same value, whichever is stored last wins. - require 'sass/util/ordered_hash' if ruby1_8? - class NormalizedMap - # Create a normalized map - def initialize(map = nil) - @key_strings = {} - @map = Util.ruby1_8? ? OrderedHash.new : {} - - map.each {|key, value| self[key] = value} if map - end - - # Specifies how to transform the key. - # - # This can be overridden to create other normalization behaviors. - def normalize(key) - key.tr("-", "_") - end - - # Returns the version of `key` as it was stored before - # normalization. If `key` isn't in the map, returns it as it was - # passed in. - # - # @return [String] - def denormalize(key) - @key_strings[normalize(key)] || key - end - - # @private - def []=(k, v) - normalized = normalize(k) - @map[normalized] = v - @key_strings[normalized] = k - v - end - - # @private - def [](k) - @map[normalize(k)] - end - - # @private - def has_key?(k) - @map.has_key?(normalize(k)) - end - - # @private - def delete(k) - normalized = normalize(k) - @key_strings.delete(normalized) - @map.delete(normalized) - end - - # @return [Hash] Hash with the keys as they were stored (before normalization). - def as_stored - Sass::Util.map_keys(@map) {|k| @key_strings[k]} - end - - def empty? - @map.empty? - end - - def values - @map.values - end - - def keys - @map.keys - end - - def each - @map.each {|k, v| yield(k, v)} - end - - def size - @map.size - end - - def to_hash - @map.dup - end - - def to_a - @map.to_a - end - - def map - @map.map {|k, v| yield(k, v)} - end - - def dup - d = super - d.send(:instance_variable_set, "@map", @map.dup) - d - end - - def sort_by - @map.sort_by {|k, v| yield k, v} - end - - def update(map) - map = map.as_stored if map.is_a?(NormalizedMap) - map.each {|k, v| self[k] = v} - end - - def method_missing(method, *args, &block) - if Sass.tests_running - raise ArgumentError.new("The method #{method} must be implemented explicitly") - end - @map.send(method, *args, &block) - end - - if Sass::Util.ruby1_8? - def respond_to?(method, include_private = false) - super || @map.respond_to?(method, include_private) - end - end - - def respond_to_missing?(method, include_private = false) - @map.respond_to?(method, include_private) - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util/ordered_hash.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util/ordered_hash.rb deleted file mode 100644 index e11a6ec..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util/ordered_hash.rb +++ /dev/null @@ -1,192 +0,0 @@ -# Copyright (c) 2005-2013 David Heinemeier Hansson -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -# This class was copied from an old version of ActiveSupport. -class OrderedHash < ::Hash - # In MRI the Hash class is core and written in C. In particular, methods are - # programmed with explicit C function calls and polymorphism is not honored. - # - # For example, []= is crucial in this implementation to maintain the @keys - # array but hash.c invokes rb_hash_aset() originally. This prevents method - # reuse through inheritance and forces us to reimplement stuff. - # - # For instance, we cannot use the inherited #merge! because albeit the algorithm - # itself would work, our []= is not being called at all by the C code. - - def initialize(*args) - super - @keys = [] - end - - def self.[](*args) - ordered_hash = new - - if args.length == 1 && args.first.is_a?(Array) - args.first.each do |key_value_pair| - next unless key_value_pair.is_a?(Array) - ordered_hash[key_value_pair[0]] = key_value_pair[1] - end - - return ordered_hash - end - - unless args.size.even? - raise ArgumentError.new("odd number of arguments for Hash") - end - - args.each_with_index do |val, ind| - next if ind.odd? - ordered_hash[val] = args[ind + 1] - end - - ordered_hash - end - - def initialize_copy(other) - super - # make a deep copy of keys - @keys = other.keys - end - - def []=(key, value) - @keys << key unless has_key?(key) - super - end - - def delete(key) - if has_key? key - index = @keys.index(key) - @keys.delete_at index - end - super - end - - def delete_if - super - sync_keys! - self - end - - def reject! - super - sync_keys! - self - end - - def reject - dup.reject! {|h, k| yield h, k} - end - - def keys - @keys.dup - end - - def values - @keys.map {|key| self[key]} - end - - def to_hash - self - end - - def to_a - @keys.map {|key| [key, self[key]]} - end - - def each_key - return to_enum(:each_key) unless block_given? - @keys.each {|key| yield key} - self - end - - def each_value - return to_enum(:each_value) unless block_given? - @keys.each {|key| yield self[key]} - self - end - - def each - return to_enum(:each) unless block_given? - @keys.each {|key| yield [key, self[key]]} - self - end - - def each_pair - return to_enum(:each_pair) unless block_given? - @keys.each {|key| yield key, self[key]} - self - end - - alias_method :select, :find_all - - def clear - super - @keys.clear - self - end - - def shift - k = @keys.first - v = delete(k) - [k, v] - end - - def merge!(other_hash) - if block_given? - other_hash.each {|k, v| self[k] = key?(k) ? yield(k, self[k], v) : v} - else - other_hash.each {|k, v| self[k] = v} - end - self - end - - alias_method :update, :merge! - - def merge(other_hash) - if block_given? - dup.merge!(other_hash) {|k, v1, v2| yield k, v1, v2} - else - dup.merge!(other_hash) - end - end - - # When replacing with another hash, the initial order of our keys must come from the other hash -- - # ordered or not. - def replace(other) - super - @keys = other.keys - self - end - - def invert - OrderedHash[to_a.map! {|key_value_pair| key_value_pair.reverse}] - end - - def inspect - "#" - end - - private - - def sync_keys! - @keys.delete_if {|k| !has_key?(k)} - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util/subset_map.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util/subset_map.rb deleted file mode 100644 index a976acf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util/subset_map.rb +++ /dev/null @@ -1,110 +0,0 @@ -require 'set' - -module Sass - module Util - # A map from sets to values. - # A value is \{#\[]= set} by providing a set (the "set-set") and a value, - # which is then recorded as corresponding to that set. - # Values are \{#\[] accessed} by providing a set (the "get-set") - # and returning all values that correspond to set-sets - # that are subsets of the get-set. - # - # SubsetMap preserves the order of values as they're inserted. - # - # @example - # ssm = SubsetMap.new - # ssm[Set[1, 2]] = "Foo" - # ssm[Set[2, 3]] = "Bar" - # ssm[Set[1, 2, 3]] = "Baz" - # - # ssm[Set[1, 2, 3]] #=> ["Foo", "Bar", "Baz"] - class SubsetMap - # Creates a new, empty SubsetMap. - def initialize - @hash = {} - @vals = [] - end - - # Whether or not this SubsetMap has any key-value pairs. - # - # @return [Boolean] - def empty? - @hash.empty? - end - - # Associates a value with a set. - # When `set` or any of its supersets is accessed, - # `value` will be among the values returned. - # - # Note that if the same `set` is passed to this method multiple times, - # all given `value`s will be associated with that `set`. - # - # This runs in `O(n)` time, where `n` is the size of `set`. - # - # @param set [#to_set] The set to use as the map key. May not be empty. - # @param value [Object] The value to associate with `set`. - # @raise [ArgumentError] If `set` is empty. - def []=(set, value) - raise ArgumentError.new("SubsetMap keys may not be empty.") if set.empty? - - index = @vals.size - @vals << value - set.each do |k| - @hash[k] ||= [] - @hash[k] << [set, set.to_set, index] - end - end - - # Returns all values associated with subsets of `set`. - # - # In the worst case, this runs in `O(m*max(n, log m))` time, - # where `n` is the size of `set` - # and `m` is the number of associations in the map. - # However, unless many keys in the map overlap with `set`, - # `m` will typically be much smaller. - # - # @param set [Set] The set to use as the map key. - # @return [Array<(Object, #to_set)>] An array of pairs, - # where the first value is the value associated with a subset of `set`, - # and the second value is that subset of `set` - # (or whatever `#to_set` object was used to set the value) - # This array is in insertion order. - # @see #[] - def get(set) - res = set.map do |k| - subsets = @hash[k] - next unless subsets - subsets.map do |subenum, subset, index| - next unless subset.subset?(set) - [index, subenum] - end - end - res = Sass::Util.flatten(res, 1) - res.compact! - res.uniq! - res.sort! - res.map! {|i, s| [@vals[i], s]} - res - end - - # Same as \{#get}, but doesn't return the subsets of the argument - # for which values were found. - # - # @param set [Set] The set to use as the map key. - # @return [Array] The array of all values - # associated with subsets of `set`, in insertion order. - # @see #get - def [](set) - get(set).map {|v, _| v} - end - - # Iterates over each value in the subset map. Ignores keys completely. If - # multiple keys have the same value, this will return them multiple times. - # - # @yield [Object] Each value in the map. - def each_value - @vals.each {|v| yield v} - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util/test.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util/test.rb deleted file mode 100644 index 905e81f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/util/test.rb +++ /dev/null @@ -1,9 +0,0 @@ -module Sass - module Util - module Test - def skip(msg = nil, bt = caller) - super if defined?(super) - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/version.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/version.rb deleted file mode 100644 index 89c8a06..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/lib/sass/version.rb +++ /dev/null @@ -1,124 +0,0 @@ -require 'date' -require 'sass/util' - -module Sass - # Handles Sass version-reporting. - # Sass not only reports the standard three version numbers, - # but its Git revision hash as well, - # if it was installed from Git. - module Version - # Returns a hash representing the version of Sass. - # The `:major`, `:minor`, and `:teeny` keys have their respective numbers as Fixnums. - # The `:name` key has the name of the version. - # The `:string` key contains a human-readable string representation of the version. - # The `:number` key is the major, minor, and teeny keys separated by periods. - # The `:date` key, which is not guaranteed to be defined, is the `DateTime` - # at which this release was cut. - # If Sass is checked out from Git, the `:rev` key will have the revision hash. - # For example: - # - # { - # :string => "2.1.0.9616393", - # :rev => "9616393b8924ef36639c7e82aa88a51a24d16949", - # :number => "2.1.0", - # :date => DateTime.parse("Apr 30 13:52:01 2009 -0700"), - # :major => 2, :minor => 1, :teeny => 0 - # } - # - # If a prerelease version of Sass is being used, - # the `:string` and `:number` fields will reflect the full version - # (e.g. `"2.2.beta.1"`), and the `:teeny` field will be `-1`. - # A `:prerelease` key will contain the name of the prerelease (e.g. `"beta"`), - # and a `:prerelease_number` key will contain the rerelease number. - # For example: - # - # { - # :string => "3.0.beta.1", - # :number => "3.0.beta.1", - # :date => DateTime.parse("Mar 31 00:38:04 2010 -0700"), - # :major => 3, :minor => 0, :teeny => -1, - # :prerelease => "beta", - # :prerelease_number => 1 - # } - # - # @return [{Symbol => String/Fixnum}] The version hash - # @comment - # rubocop:disable ClassVars - def version - return @@version if defined?(@@version) - - numbers = File.read(Sass::Util.scope('VERSION')).strip.split('.'). - map {|n| n =~ /^[0-9]+$/ ? n.to_i : n} - name = File.read(Sass::Util.scope('VERSION_NAME')).strip - @@version = { - :major => numbers[0], - :minor => numbers[1], - :teeny => numbers[2], - :name => name - } - - if (date = version_date) - @@version[:date] = date - end - - if numbers[3].is_a?(String) - @@version[:teeny] = -1 - @@version[:prerelease] = numbers[3] - @@version[:prerelease_number] = numbers[4] - end - - @@version[:number] = numbers.join('.') - @@version[:string] = @@version[:number].dup - - if (rev = revision_number) - @@version[:rev] = rev - unless rev[0] == ?( - @@version[:string] << "." << rev[0...7] - end - end - - @@version[:string] << " (#{name})" - @@version - end - # rubocop:enable ClassVars - - private - - def revision_number - if File.exist?(Sass::Util.scope('REVISION')) - rev = File.read(Sass::Util.scope('REVISION')).strip - return rev unless rev =~ /^([a-f0-9]+|\(.*\))$/ || rev == '(unknown)' - end - - return unless File.exist?(Sass::Util.scope('.git/HEAD')) - rev = File.read(Sass::Util.scope('.git/HEAD')).strip - return rev unless rev =~ /^ref: (.*)$/ - - ref_name = $1 - ref_file = Sass::Util.scope(".git/#{ref_name}") - info_file = Sass::Util.scope(".git/info/refs") - return File.read(ref_file).strip if File.exist?(ref_file) - return unless File.exist?(info_file) - File.open(info_file) do |f| - f.each do |l| - sha, ref = l.strip.split("\t", 2) - next unless ref == ref_name - return sha - end - end - nil - end - - def version_date - return unless File.exist?(Sass::Util.scope('VERSION_DATE')) - DateTime.parse(File.read(Sass::Util.scope('VERSION_DATE')).strip) - end - end - - extend Sass::Version - - # A string representing the version of Sass. - # A more fine-grained representation is available from Sass.version. - # @api public - VERSION = version[:string] unless defined?(Sass::VERSION) -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/rails/init.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/rails/init.rb deleted file mode 100644 index 13d5baa..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/rails/init.rb +++ /dev/null @@ -1 +0,0 @@ -Kernel.load File.join(File.dirname(__FILE__), '..', 'init.rb') diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/cache_test.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/cache_test.rb deleted file mode 100755 index b03be89..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/cache_test.rb +++ /dev/null @@ -1,131 +0,0 @@ -#!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../test_helper' -require File.dirname(__FILE__) + '/test_helper' -require 'sass/engine' - -class CacheTest < MiniTest::Test - @@cache_dir = "tmp/file_cache" - - def setup - FileUtils.mkdir_p @@cache_dir - end - - def teardown - FileUtils.rm_rf @@cache_dir - clean_up_sassc - end - - def test_file_cache_writes_a_file - file_store = Sass::CacheStores::Filesystem.new(@@cache_dir) - file_store.store("asdf/foo.scssc", "fakesha1", root_node) - assert File.exist?("#{@@cache_dir}/asdf/foo.scssc") - end - - def test_file_cache_reads_a_file - file_store = Sass::CacheStores::Filesystem.new(@@cache_dir) - assert !File.exist?("#{@@cache_dir}/asdf/foo.scssc") - file_store.store("asdf/foo.scssc", "fakesha1", root_node) - assert File.exist?("#{@@cache_dir}/asdf/foo.scssc") - assert_kind_of Sass::Tree::RootNode, file_store.retrieve("asdf/foo.scssc", "fakesha1") - end - - def test_file_cache_miss_returns_nil - file_store = Sass::CacheStores::Filesystem.new(@@cache_dir) - assert !File.exist?("#{@@cache_dir}/asdf/foo.scssc") - assert_nil file_store.retrieve("asdf/foo.scssc", "fakesha1") - end - - def test_sha_change_invalidates_cache_and_cleans_up - file_store = Sass::CacheStores::Filesystem.new(@@cache_dir) - assert !File.exist?("#{@@cache_dir}/asdf/foo.scssc") - file_store.store("asdf/foo.scssc", "fakesha1", root_node) - assert File.exist?("#{@@cache_dir}/asdf/foo.scssc") - assert_nil file_store.retrieve("asdf/foo.scssc", "differentsha1") - assert !File.exist?("#{@@cache_dir}/asdf/foo.scssc") - end - - def test_version_change_invalidates_cache_and_cleans_up - file_store = Sass::CacheStores::Filesystem.new(@@cache_dir) - assert !File.exist?("#{@@cache_dir}/asdf/foo.scssc") - file_store.store("asdf/foo.scssc", "fakesha1", root_node) - assert File.exist?("#{@@cache_dir}/asdf/foo.scssc") - real_version = Sass::VERSION - begin - Sass::VERSION.replace("a different version") - assert_nil file_store.retrieve("asdf/foo.scssc", "fakesha1") - assert !File.exist?("#{@@cache_dir}/asdf/foo.scssc") - ensure - Sass::VERSION.replace(real_version) - end - end - - def test_arbitrary_objects_can_go_into_cache - cache = Sass::CacheStores::Memory.new - an_object = {:foo => :bar} - cache.store("an_object", "", an_object) - assert_equal an_object, cache.retrieve("an_object", "") - end - - def test_cache_node_with_unmarshalable_option - engine_with_unmarshalable_options("foo {a: b + c}").to_tree - end - - # Regression tests - - def test_cache_mixin_def_splat_sass_node_with_unmarshalable_option - engine_with_unmarshalable_options(< :sass).to_tree -=color($args...) - color: red -SASS - end - - def test_cache_mixin_def_splat_scss_node_with_unmarshalable_option - engine_with_unmarshalable_options(< :scss).to_tree -@mixin color($args...) { - color: red; -} -SCSS - end - - def test_cache_function_splat_sass_node_with_unmarshalable_option - engine_with_unmarshalable_options(< :sass).to_tree -@function color($args...) - @return red -SASS - end - - def test_cache_function_splat_scss_node_with_unmarshalable_option - engine_with_unmarshalable_options(< :scss).to_tree -@function color($args...) { - @return red; -} -SCSS - end - - def test_cache_include_splat_sass_node_with_unmarshalable_option - engine_with_unmarshalable_options(< :sass).to_tree -@include color($args..., $kwargs...) -SASS - end - - def test_cache_include_splat_scss_node_with_unmarshalable_option - engine_with_unmarshalable_options(< :scss).to_tree -@include color($args..., $kwargs...); -SCSS - end - - private - def root_node - Sass::Engine.new(<<-SCSS, :syntax => :scss).to_tree - @mixin color($c) { color: $c} - div { @include color(red); } - SCSS - end - - def engine_with_unmarshalable_options(src, options={}) - Sass::Engine.new(src, { - :syntax => :scss, :object => Class.new.new, :filename => 'file.scss', - :importer => Sass::Importers::Filesystem.new(absolutize('templates')) - }.merge(options)) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/callbacks_test.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/callbacks_test.rb deleted file mode 100755 index 0e72112..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/callbacks_test.rb +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../test_helper' -require 'sass/callbacks' - -class CallerBack - extend Sass::Callbacks - define_callback :foo - define_callback :bar - - def do_foo - run_foo - end - - def do_bar - run_bar 12 - end -end - -module ClassLevelCallerBack - extend Sass::Callbacks - define_callback :foo - extend self - - def do_foo - run_foo - end -end - -class SassCallbacksTest < MiniTest::Test - def test_simple_callback - cb = CallerBack.new - there = false - cb.on_foo {there = true} - cb.do_foo - assert there, "Expected callback to be called." - end - - def test_multiple_callbacks - cb = CallerBack.new - str = "" - cb.on_foo {str += "first"} - cb.on_foo {str += " second"} - cb.do_foo - assert_equal "first second", str - end - - def test_callback_with_arg - cb = CallerBack.new - val = nil - cb.on_bar {|a| val = a} - cb.do_bar - assert_equal 12, val - end - - def test_class_level_callback - there = false - ClassLevelCallerBack.on_foo {there = true} - ClassLevelCallerBack.do_foo - assert there, "Expected callback to be called." - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/compiler_test.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/compiler_test.rb deleted file mode 100755 index d986f26..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/compiler_test.rb +++ /dev/null @@ -1,236 +0,0 @@ -#!/usr/bin/env ruby -require 'minitest/autorun' -require File.dirname(__FILE__) + '/../test_helper' -require 'sass/plugin' -require 'sass/plugin/compiler' - -class CompilerTest < MiniTest::Test - class FakeListener - attr_accessor :options - attr_accessor :directories - attr_reader :start_called - attr_reader :thread - - def initialize(*args, &on_filesystem_event) - self.options = args.last.is_a?(Hash) ? args.pop : {} - self.directories = args - @on_filesystem_event = on_filesystem_event - @start_called = false - reset_events! - end - - def fire_events!(*args) - @on_filesystem_event.call(@modified, @added, @removed) - reset_events! - end - - def changed(filename) - @modified << File.expand_path(filename) - end - - def added(filename) - @added << File.expand_path(filename) - end - - def removed(filename) - @removed << File.expand_path(filename) - end - - def on_start!(&run_during_start) - @run_during_start = run_during_start - end - - # used for Listen < 2.0 - def start! - @run_during_start.call(self) if @run_during_start - end - - # used for Listen >= 2.0 - def start - parent = Thread.current - @thread = Thread.new do - @run_during_start.call(self) if @run_during_start - parent.raise Interrupt - end - end - - def stop - end - - def reset_events! - @modified = [] - @added = [] - @removed = [] - end - end - - module MockWatcher - attr_accessor :run_during_start - attr_accessor :update_stylesheets_times - attr_accessor :update_stylesheets_called_with - attr_accessor :deleted_css_files - - def fake_listener - @fake_listener - end - - def update_stylesheets(individual_files) - @update_stylesheets_times ||= 0 - @update_stylesheets_times += 1 - (@update_stylesheets_called_with ||= []) << individual_files - end - - def try_delete_css(css_filename) - (@deleted_css_files ||= []) << css_filename - end - - private - def create_listener(*args, &on_filesystem_event) - if Sass::Util.listen_geq_2? - options = args.pop if args.last.is_a?(Hash) - args.map do |dir| - @fake_listener = FakeListener.new(*args, &on_filesystem_event) - @fake_listener.on_start!(&run_during_start) - @fake_listener - end - else - @fake_listener = FakeListener.new(*args, &on_filesystem_event) - @fake_listener.on_start!(&run_during_start) - @fake_listener - end - end - end - - def test_initialize - watcher - end - - def test_watch_starts_the_listener - start_called = false - c = watcher do |listener| - start_called = true - end - c.watch - assert start_called, "start! was not called" - end - - def test_sass_callbacks_fire_from_listener_events - c = watcher do |listener| - listener.changed "changed.scss" - listener.added "added.scss" - listener.removed "removed.scss" - listener.fire_events! - end - - modified_fired = false - c.on_template_modified do |sass_file| - modified_fired = true - assert_equal "changed.scss", sass_file - end - - added_fired = false - c.on_template_created do |sass_file| - added_fired = true - assert_equal "added.scss", sass_file - end - - removed_fired = false - c.on_template_deleted do |sass_file| - removed_fired = true - assert_equal "removed.scss", sass_file - end - - c.watch - - assert_equal 2, c.update_stylesheets_times - assert modified_fired - assert added_fired - assert removed_fired - end - - def test_removing_a_sass_file_removes_corresponding_css_file - c = watcher do |listener| - listener.removed "remove_me.scss" - listener.fire_events! - end - - c.watch - - assert_equal "./remove_me.css", c.deleted_css_files.first - end - - def test_an_importer_can_watch_an_image - image_importer = Sass::Importers::Filesystem.new(".") - class << image_importer - def watched_file?(filename) - filename =~ /\.png$/ - end - end - c = watcher(:load_paths => [image_importer]) do |listener| - listener.changed "image.png" - listener.fire_events! - end - - modified_fired = false - c.on_template_modified do |f| - modified_fired = true - assert_equal "image.png", f - end - - c.watch - - assert_equal 2, c.update_stylesheets_times - assert modified_fired - end - - def test_watching_specific_files_and_one_is_deleted - directories = nil - c = watcher do |listener| - directories = listener.directories - listener.removed File.expand_path("./foo.scss") - listener.fire_events! - end - c.watch([[File.expand_path("./foo.scss"), File.expand_path("./foo.css"), nil]]) - assert directories.include?(File.expand_path(".")), directories.inspect - assert_equal File.expand_path("./foo.css"), c.deleted_css_files.first, "the corresponding css file was not deleted" - assert_equal [], c.update_stylesheets_called_with[1], "the sass file should not have been compiled" - end - - def test_watched_directories_are_dedupped - directories = nil - c = watcher(:load_paths => [".", "./foo", "."]) do |listener| - directories = listener.directories - end - c.watch - assert_equal [File.expand_path(".")], directories - end - - def test_a_changed_css_in_a_watched_directory_does_not_force_a_compile - c = watcher do |listener| - listener.changed "foo.css" - listener.fire_events! - end - - c.on_template_modified do |f| - assert false, "Should not have been called" - end - - c.watch - - assert_equal 1, c.update_stylesheets_times - end - - private - - def default_options - {:template_location => [[".","."]]} - end - - def watcher(options = {}, &run_during_start) - options = default_options.merge(options) - watcher = Sass::Plugin::Compiler.new(options) - watcher.extend(MockWatcher) - watcher.run_during_start = run_during_start - watcher - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/conversion_test.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/conversion_test.rb deleted file mode 100755 index f457185..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/conversion_test.rb +++ /dev/null @@ -1,2067 +0,0 @@ -#!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../test_helper' - -class ConversionTest < MiniTest::Test - def test_basic - assert_renders < true -foo bar - :baz bang - :bip bop -SASS -foo bar { - baz: bang; - bip: bop; -} -SCSS - end - - def test_empty_selector - assert_renders "foo bar", "foo bar {}" - end - - def test_empty_directive - assert_renders "@media screen", "@media screen {}" - end - - def test_empty_control_directive - assert_renders "@if false", "@if false {}" - end - - def test_nesting - assert_renders < true -foo bar - :baz 12 $bang "bip" -SASS -foo bar { - baz: 12 $bang "bip"; -} -SCSS - end - - def test_multiline_properties - assert_scss_to_sass < true -foo - :_name val - :*name val - :#name val - :.name val - :name val -SASS -foo { - _name: val; - *name: val; - #name: val; - .name: val; - name: val; -} -SCSS - end - - def test_selector_hacks - assert_selector_renders = lambda do |s| - assert_renders < E'] - assert_selector_renders['+ E'] - assert_selector_renders['~ E'] - assert_selector_renders['> > E'] - - assert_selector_renders['E*'] - assert_selector_renders['E*.foo'] - assert_selector_renders['E*:hover'] - end - - def test_disallowed_colon_hack - assert_raise_message(Sass::SyntaxError, 'The ":name: val" hack is not allowed in the Sass indented syntax') do - to_sass("foo {:name: val;}", :syntax => :scss) - end - end - - def test_nested_properties - assert_renders < true) -@mixin under-scored-mixin($under-scored-arg: $under-scored-default) { - bar: $under-scored-arg; -} - -div { - foo: under-scored-fn($under-scored-var + "before\#{$another-under-scored-var}after"); - @include under-scored-mixin($passed-arg); - selector-\#{$under-scored-interp}: bold; -} - -@if $under-scored { - @for $for-var from $from-var to $to-var { - @while $while-var == true { - $while-var: false; - } - } -} -SCSS -=under_scored_mixin($under_scored_arg: $under_scored_default) - bar: $under_scored_arg -div - foo: under_scored_fn($under_scored_var + "before\#{$another_under_scored_var}after") - +under_scored_mixin($passed_arg) - selector-\#{$under_scored_interp}: bold -@if $under_scored - @for $for_var from $from_var to $to_var - @while $while_var == true - $while_var : false -SASS - end - - def test_loud_comment_conversion - assert_renders(< " " -foo bar - baz bang - baz: bang - bip: bop - blat: boo -SASS -foo bar { - baz bang { - baz: bang; - bip: bop; - } - blat: boo; -} -SCSS - - assert_renders < "\t" -foo bar - baz bang - baz: bang - bip: bop - blat: boo -SASS -foo bar { - baz bang { - baz: bang; - bip: bop; - } - blat: boo; -} -SCSS - - assert_sass_to_scss < " " -foo bar { - baz bang { - baz: bang; - bip: bop; - } - blat: boo; -} -SCSS -foo bar - baz bang - baz: bang - bip: bop - blat: boo -SASS - - assert_sass_to_scss < "\t" -foo bar { - baz bang { - baz: bang; - bip: bop; - } - blat: boo; -} -SCSS -foo bar - baz bang - baz: bang - bip: bop - blat: boo -SASS - - assert_scss_to_sass < " " -foo bar - baz bang - baz: bang - bip: bop - blat: boo -SASS -foo bar { - baz bang { - baz: bang; - bip: bop; - } - blat: boo; -} -SCSS - - assert_scss_to_sass < "\t" -foo bar - baz bang - baz: bang - bip: bop - blat: boo -SASS -foo bar { - baz bang { - baz: bang; - bip: bop; - } - blat: boo; -} -SCSS - end - - def test_extend_with_optional - assert_renders < ' ') -foo - // bar - /* baz - a: b -SASS -foo { - // bar - /* baz */ - a: b; -} -SCSS - end - - def test_keyword_arguments - assert_renders(< true) -$foo: foo($dash-ed: 2px) -SASS -$foo: foo($dash-ed: 2px); -SCSS - assert_scss_to_sass(< true) -$foo: foo($dash-ed: 2px) -SASS -$foo: foo($dash_ed: 2px); -SCSS - assert_sass_to_scss(< true) -$foo: foo($dash-ed: 2px); -SCSS -$foo: foo($dash_ed: 2px) -SASS - assert_renders(< ' ') -foo - ok: -$foo - comma: 10px, -$foo - needs-parens: 10px (-$foo) -SASS -foo { - ok: -$foo; - comma: 10px, -$foo; - needs-parens: 10px (-$foo); -} -SCSS - end - - def test_variable_with_global - assert_renders(< :scss)).rstrip, - "Expected SCSS to transform to Sass") - end - - def assert_scss_to_scss(scss, in_scss = nil, options = nil) - if in_scss.is_a?(Hash) - options = in_scss - in_scss = nil - end - - in_scss ||= scss - options ||= {} - - assert_equal(scss.rstrip, to_scss(in_scss, options.merge(:syntax => :scss)).rstrip, - "Expected SCSS to transform to #{scss == in_scss ? 'itself' : 'SCSS'}") - end - - def assert_sass_to_scss(scss, sass, options = {}) - assert_equal(scss.rstrip, to_scss(sass, options).rstrip, - "Expected Sass to transform to SCSS") - end - - def assert_renders(sass, scss, options = {}) - assert_sass_to_sass(sass, options) - assert_scss_to_sass(sass, scss, options) - assert_scss_to_scss(scss, options) - assert_sass_to_scss(scss, sass, options) - end - - def to_sass(scss, options = {}) - Sass::Util.silence_sass_warnings do - Sass::Engine.new(scss, options).to_tree.to_sass(options) - end - end - - def to_scss(sass, options = {}) - Sass::Util.silence_sass_warnings do - Sass::Engine.new(sass, options).to_tree.to_scss(options) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/css2sass_test.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/css2sass_test.rb deleted file mode 100755 index 3685d9b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/css2sass_test.rb +++ /dev/null @@ -1,509 +0,0 @@ -#!/usr/bin/env ruby -require 'minitest/autorun' -require File.dirname(__FILE__) + '/../test_helper' -require 'sass/css' - -class CSS2SassTest < MiniTest::Test - def test_basic - css = < true)) -h1 - :color red -SASS - end - - def test_nesting - assert_equal(< b -SASS -a {color: red} -a > b {} -CSS - end - - def test_nesting_within_media - assert_equal(< - .bar - a: b - .baz - c: d -SASS -.foo>.bar {a: b} -.foo>.baz {c: d} -CSS - - assert_equal(< .baz - c: d -SASS -.bar > .baz {c: d} -CSS - end - - # Error reporting - - def test_error_reporting - css2sass("foo") - assert(false, "Expected exception") - rescue Sass::SyntaxError => err - assert_equal(1, err.sass_line) - assert_equal('Invalid CSS after "foo": expected "{", was ""', err.message) - end - - def test_error_reporting_in_line - css2sass("foo\nbar }\nbaz") - assert(false, "Expected exception") - rescue Sass::SyntaxError => err - assert_equal(2, err.sass_line) - assert_equal('Invalid CSS after "bar ": expected "{", was "}"', err.message) - end - - def test_error_truncate_after - css2sass("#{"a" * 16}foo") - assert(false, "Expected exception") - rescue Sass::SyntaxError => err - assert_equal(1, err.sass_line) - assert_equal('Invalid CSS after "...aaaaaaaaaaaafoo": expected "{", was ""', err.message) - end - - def test_error_truncate_was - css2sass("foo }foo#{"a" * 15}") - assert(false, "Expected exception") - rescue Sass::SyntaxError => err - assert_equal(1, err.sass_line) - assert_equal('Invalid CSS after "foo ": expected "{", was "}fooaaaaaaaaaaa..."', err.message) - end - - def test_error_doesnt_truncate_after_when_elipsis_would_add_length - css2sass("#{"a" * 15}foo") - assert(false, "Expected exception") - rescue Sass::SyntaxError => err - assert_equal(1, err.sass_line) - assert_equal('Invalid CSS after "aaaaaaaaaaaaaaafoo": expected "{", was ""', err.message) - end - - def test_error_doesnt_truncate_was_when_elipsis_would_add_length - css2sass("foo }foo#{"a" * 14}") - assert(false, "Expected exception") - rescue Sass::SyntaxError => err - assert_equal(1, err.sass_line) - assert_equal('Invalid CSS after "foo ": expected "{", was "}fooaaaaaaaaaaaaaa"', err.message) - end - - def test_error_gets_rid_of_trailing_newline_for_after - css2sass("foo \n ") - assert(false, "Expected exception") - rescue Sass::SyntaxError => err - assert_equal(2, err.sass_line) - assert_equal('Invalid CSS after "foo": expected "{", was ""', err.message) - end - - def test_error_gets_rid_of_trailing_newline_for_was - css2sass("foo \n }foo") - assert(false, "Expected exception") - rescue Sass::SyntaxError => err - assert_equal(2, err.sass_line) - assert_equal('Invalid CSS after "foo": expected "{", was "}foo"', err.message) - end - - # Encodings - - unless Sass::Util.ruby1_8? - def test_encoding_error - css2sass("foo\nbar\nb\xFEaz".force_encoding("utf-8")) - assert(false, "Expected exception") - rescue Sass::SyntaxError => e - assert_equal(3, e.sass_line) - assert_equal('Invalid UTF-8 character "\xFE"', e.message) - end - - def test_ascii_incompatible_encoding_error - template = "foo\nbar\nb_z".encode("utf-16le") - template[9] = "\xFE".force_encoding("utf-16le") - css2sass(template) - assert(false, "Expected exception") - rescue Sass::SyntaxError => e - assert_equal(3, e.sass_line) - assert_equal('Invalid UTF-16LE character "\xFE"', e.message) - end - end - - private - - def css2sass(string, opts={}) - Sass::CSS.new(string, opts).render - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/data/hsl-rgb.txt b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/data/hsl-rgb.txt deleted file mode 100644 index 2e9e470..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/data/hsl-rgb.txt +++ /dev/null @@ -1,319 +0,0 @@ -hsl(0, 100%, 50%) -hsl(60, 100%, 50%) -hsl(120, 100%, 50%) -hsl(180, 100%, 50%) -hsl(240, 100%, 50%) -hsl(300, 100%, 50%) -==== -rgb(255, 0, 0) -rgb(255, 255, 0) -rgb(0, 255, 0) -rgb(0, 255, 255) -rgb(0, 0, 255) -rgb(255, 0, 255) - -hsl(-360, 100%, 50%) -hsl(-300, 100%, 50%) -hsl(-240, 100%, 50%) -hsl(-180, 100%, 50%) -hsl(-120, 100%, 50%) -hsl(-60, 100%, 50%) -==== -rgb(255, 0, 0) -rgb(255, 255, 0) -rgb(0, 255, 0) -rgb(0, 255, 255) -rgb(0, 0, 255) -rgb(255, 0, 255) - -hsl(360, 100%, 50%) -hsl(420, 100%, 50%) -hsl(480, 100%, 50%) -hsl(540, 100%, 50%) -hsl(600, 100%, 50%) -hsl(660, 100%, 50%) -==== -rgb(255, 0, 0) -rgb(255, 255, 0) -rgb(0, 255, 0) -rgb(0, 255, 255) -rgb(0, 0, 255) -rgb(255, 0, 255) - -hsl(6120, 100%, 50%) -hsl(-9660, 100%, 50%) -hsl(99840, 100%, 50%) -hsl(-900, 100%, 50%) -hsl(-104880, 100%, 50%) -hsl(2820, 100%, 50%) -==== -rgb(255, 0, 0) -rgb(255, 255, 0) -rgb(0, 255, 0) -rgb(0, 255, 255) -rgb(0, 0, 255) -rgb(255, 0, 255) - -hsl(0, 100%, 50%) -hsl(12, 100%, 50%) -hsl(24, 100%, 50%) -hsl(36, 100%, 50%) -hsl(48, 100%, 50%) -hsl(60, 100%, 50%) -hsl(72, 100%, 50%) -hsl(84, 100%, 50%) -hsl(96, 100%, 50%) -hsl(108, 100%, 50%) -hsl(120, 100%, 50%) -==== -rgb(255, 0, 0) -rgb(255, 51, 0) -rgb(255, 102, 0) -rgb(255, 153, 0) -rgb(255, 204, 0) -rgb(255, 255, 0) -rgb(204, 255, 0) -rgb(153, 255, 0) -rgb(102, 255, 0) -rgb(51, 255, 0) -rgb(0, 255, 0) - -hsl(120, 100%, 50%) -hsl(132, 100%, 50%) -hsl(144, 100%, 50%) -hsl(156, 100%, 50%) -hsl(168, 100%, 50%) -hsl(180, 100%, 50%) -hsl(192, 100%, 50%) -hsl(204, 100%, 50%) -hsl(216, 100%, 50%) -hsl(228, 100%, 50%) -hsl(240, 100%, 50%) -==== -rgb(0, 255, 0) -rgb(0, 255, 51) -rgb(0, 255, 102) -rgb(0, 255, 153) -rgb(0, 255, 204) -rgb(0, 255, 255) -rgb(0, 204, 255) -rgb(0, 153, 255) -rgb(0, 102, 255) -rgb(0, 51, 255) -rgb(0, 0, 255) - -hsl(240, 100%, 50%) -hsl(252, 100%, 50%) -hsl(264, 100%, 50%) -hsl(276, 100%, 50%) -hsl(288, 100%, 50%) -hsl(300, 100%, 50%) -hsl(312, 100%, 50%) -hsl(324, 100%, 50%) -hsl(336, 100%, 50%) -hsl(348, 100%, 50%) -hsl(360, 100%, 50%) -==== -rgb(0, 0, 255) -rgb(51, 0, 255) -rgb(102, 0, 255) -rgb(153, 0, 255) -rgb(204, 0, 255) -rgb(255, 0, 255) -rgb(255, 0, 204) -rgb(255, 0, 153) -rgb(255, 0, 102) -rgb(255, 0, 51) -rgb(255, 0, 0) - -hsl(0, 20%, 50%) -hsl(0, 60%, 50%) -hsl(0, 100%, 50%) -==== -rgb(153, 102, 102) -rgb(204, 51, 51) -rgb(255, 0, 0) - -hsl(60, 20%, 50%) -hsl(60, 60%, 50%) -hsl(60, 100%, 50%) -==== -rgb(153, 153, 102) -rgb(204, 204, 51) -rgb(255, 255, 0) - -hsl(120, 20%, 50%) -hsl(120, 60%, 50%) -hsl(120, 100%, 50%) -==== -rgb(102, 153, 102) -rgb(51, 204, 51) -rgb(0, 255, 0) - -hsl(180, 20%, 50%) -hsl(180, 60%, 50%) -hsl(180, 100%, 50%) -==== -rgb(102, 153, 153) -rgb(51, 204, 204) -rgb(0, 255, 255) - -hsl(240, 20%, 50%) -hsl(240, 60%, 50%) -hsl(240, 100%, 50%) -==== -rgb(102, 102, 153) -rgb(51, 51, 204) -rgb(0, 0, 255) - -hsl(300, 20%, 50%) -hsl(300, 60%, 50%) -hsl(300, 100%, 50%) -==== -rgb(153, 102, 153) -rgb(204, 51, 204) -rgb(255, 0, 255) - -hsl(0, 100%, 0%) -hsl(0, 100%, 10%) -hsl(0, 100%, 20%) -hsl(0, 100%, 30%) -hsl(0, 100%, 40%) -hsl(0, 100%, 50%) -hsl(0, 100%, 60%) -hsl(0, 100%, 70%) -hsl(0, 100%, 80%) -hsl(0, 100%, 90%) -hsl(0, 100%, 100%) -==== -rgb(0, 0, 0) -rgb(51, 0, 0) -rgb(102, 0, 0) -rgb(153, 0, 0) -rgb(204, 0, 0) -rgb(255, 0, 0) -rgb(255, 51, 51) -rgb(255, 102, 102) -rgb(255, 153, 153) -rgb(255, 204, 204) -rgb(255, 255, 255) - -hsl(60, 100%, 0%) -hsl(60, 100%, 10%) -hsl(60, 100%, 20%) -hsl(60, 100%, 30%) -hsl(60, 100%, 40%) -hsl(60, 100%, 50%) -hsl(60, 100%, 60%) -hsl(60, 100%, 70%) -hsl(60, 100%, 80%) -hsl(60, 100%, 90%) -hsl(60, 100%, 100%) -==== -rgb(0, 0, 0) -rgb(51, 51, 0) -rgb(102, 102, 0) -rgb(153, 153, 0) -rgb(204, 204, 0) -rgb(255, 255, 0) -rgb(255, 255, 51) -rgb(255, 255, 102) -rgb(255, 255, 153) -rgb(255, 255, 204) -rgb(255, 255, 255) - -hsl(120, 100%, 0%) -hsl(120, 100%, 10%) -hsl(120, 100%, 20%) -hsl(120, 100%, 30%) -hsl(120, 100%, 40%) -hsl(120, 100%, 50%) -hsl(120, 100%, 60%) -hsl(120, 100%, 70%) -hsl(120, 100%, 80%) -hsl(120, 100%, 90%) -hsl(120, 100%, 100%) -==== -rgb(0, 0, 0) -rgb(0, 51, 0) -rgb(0, 102, 0) -rgb(0, 153, 0) -rgb(0, 204, 0) -rgb(0, 255, 0) -rgb(51, 255, 51) -rgb(102, 255, 102) -rgb(153, 255, 153) -rgb(204, 255, 204) -rgb(255, 255, 255) - -hsl(180, 100%, 0%) -hsl(180, 100%, 10%) -hsl(180, 100%, 20%) -hsl(180, 100%, 30%) -hsl(180, 100%, 40%) -hsl(180, 100%, 50%) -hsl(180, 100%, 60%) -hsl(180, 100%, 70%) -hsl(180, 100%, 80%) -hsl(180, 100%, 90%) -hsl(180, 100%, 100%) -==== -rgb(0, 0, 0) -rgb(0, 51, 51) -rgb(0, 102, 102) -rgb(0, 153, 153) -rgb(0, 204, 204) -rgb(0, 255, 255) -rgb(51, 255, 255) -rgb(102, 255, 255) -rgb(153, 255, 255) -rgb(204, 255, 255) -rgb(255, 255, 255) - -hsl(240, 100%, 0%) -hsl(240, 100%, 10%) -hsl(240, 100%, 20%) -hsl(240, 100%, 30%) -hsl(240, 100%, 40%) -hsl(240, 100%, 50%) -hsl(240, 100%, 60%) -hsl(240, 100%, 70%) -hsl(240, 100%, 80%) -hsl(240, 100%, 90%) -hsl(240, 100%, 100%) -==== -rgb(0, 0, 0) -rgb(0, 0, 51) -rgb(0, 0, 102) -rgb(0, 0, 153) -rgb(0, 0, 204) -rgb(0, 0, 255) -rgb(51, 51, 255) -rgb(102, 102, 255) -rgb(153, 153, 255) -rgb(204, 204, 255) -rgb(255, 255, 255) - -hsl(300, 100%, 0%) -hsl(300, 100%, 10%) -hsl(300, 100%, 20%) -hsl(300, 100%, 30%) -hsl(300, 100%, 40%) -hsl(300, 100%, 50%) -hsl(300, 100%, 60%) -hsl(300, 100%, 70%) -hsl(300, 100%, 80%) -hsl(300, 100%, 90%) -hsl(300, 100%, 100%) -==== -rgb(0, 0, 0) -rgb(51, 0, 51) -rgb(102, 0, 102) -rgb(153, 0, 153) -rgb(204, 0, 204) -rgb(255, 0, 255) -rgb(255, 51, 255) -rgb(255, 102, 255) -rgb(255, 153, 255) -rgb(255, 204, 255) -rgb(255, 255, 255) diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/encoding_test.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/encoding_test.rb deleted file mode 100755 index f2f1b93..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/encoding_test.rb +++ /dev/null @@ -1,219 +0,0 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- -require File.dirname(__FILE__) + '/../test_helper' -require File.dirname(__FILE__) + '/test_helper' -require 'sass/util/test' - -class EncodingTest < MiniTest::Test - include Sass::Util::Test - - def test_encoding_error - return skip "Can't be run on Ruby 1.8." if Sass::Util.ruby1_8? - - render("foo\nbar\nb\xFEaz".force_encoding("utf-8")) - assert(false, "Expected exception") - rescue Sass::SyntaxError => e - assert_equal(3, e.sass_line) - assert_equal('Invalid UTF-8 character "\xFE"', e.message) - end - - def test_ascii_incompatible_encoding_error - return skip "Can't be run on Ruby 1.8." if Sass::Util.ruby1_8? - - template = "foo\nbar\nb_z".encode("utf-16le") - template[9] = "\xFE".force_encoding("utf-16le") - render(template) - assert(false, "Expected exception") - rescue Sass::SyntaxError => e - assert_equal(3, e.sass_line) - assert_equal('Invalid UTF-16LE character "\xFE"', e.message) - end - - def test_prefers_charset_to_ruby_encoding - return skip "Can't be run on Ruby 1.8." if Sass::Util.ruby1_8? - - assert_renders_encoded(< :compressed)) -fóó - a: b -SASS - end - - def test_newline_normalization - assert_equal("/* foo\nbar\nbaz\nbang\nqux */\n", - render("/* foo\nbar\r\nbaz\fbang\rqux */", :syntax => :scss)) - end - - def test_null_normalization - return skip "Can't be run on Ruby 1.8." if Sass::Util.ruby1_8? - - assert_equal(< :scss)) -#{"@charset \"UTF-8\";\n" unless Sass::Util.ruby1_8? -}/* foo�bar�baz */ -CSS - end - - # Regression - - def test_multibyte_prop_name - return skip "Can't be run on Ruby 1.8." if Sass::Util.ruby1_8? - - assert_equal(< :scss)) -#bar { - background: a 0%; } -CSS -#bar { - //  - background: \#{a} 0%; -} -SCSS - end - - private - - def assert_renders_encoded(css, sass) - result = render(sass) - assert_equal css.encoding, result.encoding - assert_equal css, result - end - - def render(sass, options = {}) - munge_filename options - Sass::Engine.new(sass, options).render - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/engine_test.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/engine_test.rb deleted file mode 100755 index 896f6e4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/engine_test.rb +++ /dev/null @@ -1,3315 +0,0 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- -require File.dirname(__FILE__) + '/../test_helper' -require File.dirname(__FILE__) + '/test_helper' -require 'sass/engine' -require 'stringio' -require 'mock_importer' -require 'pathname' - -module Sass::Script::Functions::UserFunctions - def option(name) - Sass::Script::Value::String.new(@options[name.value.to_sym].to_s) - end - - def set_a_variable(name, value) - environment.set_var(name.value, value) - return Sass::Script::Value::Null.new - end - - def set_a_global_variable(name, value) - environment.set_global_var(name.value, value) - return Sass::Script::Value::Null.new - end - - def get_a_variable(name) - environment.var(name.value) || Sass::Script::Value::String.new("undefined") - end -end - -module Sass::Script::Functions - include Sass::Script::Functions::UserFunctions -end - -class SassEngineTest < MiniTest::Test - FAKE_FILE_NAME = __FILE__.gsub(/rb$/,"sass") - # A map of erroneous Sass documents to the error messages they should produce. - # The error messages may be arrays; - # if so, the second element should be the line number that should be reported for the error. - # If this isn't provided, the tests will assume the line number should be the last line of the document. - EXCEPTION_MAP = { - "$a: 1 + " => 'Invalid CSS after "1 +": expected expression (e.g. 1px, bold), was ""', - "$a: 1 + 2 +" => 'Invalid CSS after "1 + 2 +": expected expression (e.g. 1px, bold), was ""', - "$a: 1 + 2 + %" => 'Invalid CSS after "1 + 2 + ": expected expression (e.g. 1px, bold), was "%"', - "$a: foo(\"bar\"" => 'Invalid CSS after "foo("bar"": expected ")", was ""', - "$a: 1 }" => 'Invalid CSS after "1 ": expected expression (e.g. 1px, bold), was "}"', - "$a: 1 }foo\"" => 'Invalid CSS after "1 ": expected expression (e.g. 1px, bold), was "}foo""', - ":" => 'Invalid property: ":".', - ": a" => 'Invalid property: ": a".', - "a\n :b" => < 'Invalid property: "b:" (no value).', - "a\n :b: c" => 'Invalid property: ":b: c".', - "a\n :b:c d" => 'Invalid property: ":b:c d".', - "a\n :b c;" => 'Invalid CSS after "c": expected expression (e.g. 1px, bold), was ";"', - "a\n b: c;" => 'Invalid CSS after "c": expected expression (e.g. 1px, bold), was ";"', - ".foo ^bar\n a: b" => ['Invalid CSS after ".foo ": expected selector, was "^bar"', 1], - "a\n @extend .foo ^bar" => 'Invalid CSS after ".foo ": expected selector, was "^bar"', - "a\n @extend .foo .bar" => "Can't extend .foo .bar: can't extend nested selectors", - "a\n @extend >" => "Can't extend >: invalid selector", - "a\n @extend &.foo" => "Can't extend &.foo: can't extend parent selectors", - "a: b" => 'Properties are only allowed within rules, directives, mixin includes, or other properties.', - ":a b" => 'Properties are only allowed within rules, directives, mixin includes, or other properties.', - "$" => 'Invalid variable: "$".', - "$a" => 'Invalid variable: "$a".', - "$ a" => 'Invalid variable: "$ a".', - "$a b" => 'Invalid variable: "$a b".', - "$a: 1b + 2c" => "Incompatible units: 'c' and 'b'.", - "$a: 1b < 2c" => "Incompatible units: 'c' and 'b'.", - "$a: 1b > 2c" => "Incompatible units: 'c' and 'b'.", - "$a: 1b <= 2c" => "Incompatible units: 'c' and 'b'.", - "$a: 1b >= 2c" => "Incompatible units: 'c' and 'b'.", - "a\n b: 1b * 2c" => "2b*c isn't a valid CSS value.", - "a\n b: 1b % 2c" => "Incompatible units: 'c' and 'b'.", - "$a: 2px + #ccc" => "Cannot add a number with units (2px) to a color (#ccc).", - "$a: #ccc + 2px" => "Cannot add a number with units (2px) to a color (#ccc).", - "& a\n :b c" => ["Base-level rules cannot contain the parent-selector-referencing character '&'.", 1], - "a\n :b\n c" => "Illegal nesting: Only properties may be nested beneath properties.", - "$a: b\n :c d\n" => "Illegal nesting: Nothing may be nested beneath variable declarations.", - "$a: b\n :c d\n" => "Illegal nesting: Nothing may be nested beneath variable declarations.", - "@import templates/basic\n foo" => "Illegal nesting: Nothing may be nested beneath import directives.", - "foo\n @import foo.css" => "CSS import directives may only be used at the root of a document.", - "@if true\n @import foo" => "Import directives may not be used within control directives or mixins.", - "@if true\n .foo\n @import foo" => "Import directives may not be used within control directives or mixins.", - "@mixin foo\n @import foo" => "Import directives may not be used within control directives or mixins.", - "@mixin foo\n .foo\n @import foo" => "Import directives may not be used within control directives or mixins.", - "@import foo;" => "Invalid @import: expected end of line, was \";\".", - '$foo: "bar" "baz" !' => %Q{Invalid CSS after ""bar" "baz" ": expected expression (e.g. 1px, bold), was "!"}, - '$foo: "bar" "baz" $' => %Q{Invalid CSS after ""bar" "baz" ": expected expression (e.g. 1px, bold), was "$"}, #' - "=foo\n :color red\n.bar\n +bang" => "Undefined mixin 'bang'.", - "=foo\n :color red\n.bar\n +bang_bop" => "Undefined mixin 'bang_bop'.", - "=foo\n :color red\n.bar\n +bang-bop" => "Undefined mixin 'bang-bop'.", - ".foo\n =foo\n :color red\n.bar\n +foo" => "Undefined mixin 'foo'.", - " a\n b: c" => ["Indenting at the beginning of the document is illegal.", 1], - " \n \n\t\n a\n b: c" => ["Indenting at the beginning of the document is illegal.", 4], - "a\n b: c\n b: c" => ["Inconsistent indentation: 1 space was used for indentation, but the rest of the document was indented using 2 spaces.", 3], - "a\n b: c\na\n b: c" => ["Inconsistent indentation: 1 space was used for indentation, but the rest of the document was indented using 2 spaces.", 4], - "a\n\t\tb: c\n\tb: c" => ["Inconsistent indentation: 1 tab was used for indentation, but the rest of the document was indented using 2 tabs.", 3], - "a\n b: c\n b: c" => ["Inconsistent indentation: 3 spaces were used for indentation, but the rest of the document was indented using 2 spaces.", 3], - "a\n b: c\n a\n d: e" => ["Inconsistent indentation: 3 spaces were used for indentation, but the rest of the document was indented using 2 spaces.", 4], - "a\n b: c\na\n d: e" => ["The line was indented 2 levels deeper than the previous line.", 4], - "a\n b: c\n a\n d: e" => ["The line was indented 3 levels deeper than the previous line.", 4], - "a\n \tb: c" => ["Indentation can't use both tabs and spaces.", 2], - "=a(" => 'Invalid CSS after "(": expected variable (e.g. $foo), was ""', - "=a(b)" => 'Invalid CSS after "(": expected variable (e.g. $foo), was "b)"', - "=a(,)" => 'Invalid CSS after "(": expected variable (e.g. $foo), was ",)"', - "=a($)" => 'Invalid CSS after "(": expected variable (e.g. $foo), was "$)"', - "=a($foo bar)" => 'Invalid CSS after "($foo ": expected ")", was "bar)"', - "=foo\n bar: baz\n+foo" => ["Properties are only allowed within rules, directives, mixin includes, or other properties.", 2], - "a-\#{$b\n c: d" => ['Invalid CSS after "a-#{$b": expected "}", was ""', 1], - "=a($b: 1, $c)" => "Required argument $c must come before any optional arguments.", - "=a($b: 1)\n a: $b\ndiv\n +a(1,2)" => "Mixin a takes 1 argument but 2 were passed.", - "=a($b: 1)\n a: $b\ndiv\n +a(1,$c: 3)" => "Mixin a doesn't have an argument named $c.", - "=a($b)\n a: $b\ndiv\n +a" => "Mixin a is missing argument $b.", - "@function foo()\n 1 + 2" => "Functions can only contain variable declarations and control directives.", - "@function foo()\n foo: bar" => "Functions can only contain variable declarations and control directives.", - "@function foo()\n foo: bar\n @return 3" => ["Functions can only contain variable declarations and control directives.", 2], - "@function foo\n @return 1" => ['Invalid CSS after "": expected "(", was ""', 1], - "@function foo(\n @return 1" => ['Invalid CSS after "(": expected variable (e.g. $foo), was ""', 1], - "@function foo(b)\n @return 1" => ['Invalid CSS after "(": expected variable (e.g. $foo), was "b)"', 1], - "@function foo(,)\n @return 1" => ['Invalid CSS after "(": expected variable (e.g. $foo), was ",)"', 1], - "@function foo($)\n @return 1" => ['Invalid CSS after "(": expected variable (e.g. $foo), was "$)"', 1], - "@function foo()\n @return" => 'Invalid @return: expected expression.', - "@function foo()\n @return 1\n $var: val" => 'Illegal nesting: Nothing may be nested beneath return directives.', - "@function foo($a)\n @return 1\na\n b: foo()" => 'Function foo is missing argument $a.', - "@function foo()\n @return 1\na\n b: foo(2)" => 'Function foo takes 0 arguments but 1 was passed.', - "@function foo()\n @return 1\na\n b: foo($a: 1)" => "Function foo doesn't have an argument named $a.", - "@function foo()\n @return 1\na\n b: foo($a: 1, $b: 2)" => "Function foo doesn't have the following arguments: $a, $b.", - "@return 1" => '@return may only be used within a function.', - "@if true\n @return 1" => '@return may only be used within a function.', - "@mixin foo\n @return 1\n@include foo" => ['@return may only be used within a function.', 2], - "@else\n a\n b: c" => ["@else must come after @if.", 1], - "@if false\n@else foo" => "Invalid else directive '@else foo': expected 'if '.", - "@if false\n@else if " => "Invalid else directive '@else if': expected 'if '.", - "a\n $b: 12\nc\n d: $b" => 'Undefined variable: "$b".', - "=foo\n $b: 12\nc\n +foo\n d: $b" => 'Undefined variable: "$b".', - "c\n d: $b-foo" => 'Undefined variable: "$b-foo".', - "c\n d: $b_foo" => 'Undefined variable: "$b_foo".', - '@for $a from "foo" to 1' => '"foo" is not an integer.', - '@for $a from 1 to "2"' => '"2" is not an integer.', - '@for $a from 1 to "foo"' => '"foo" is not an integer.', - '@for $a from 1 to 1.232323' => '1.23232 is not an integer.', - '@for $a from 1px to 3em' => "Incompatible units: 'em' and 'px'.", - '@if' => "Invalid if directive '@if': expected expression.", - '@while' => "Invalid while directive '@while': expected expression.", - '@debug' => "Invalid debug directive '@debug': expected expression.", - %Q{@debug "a message"\n "nested message"} => "Illegal nesting: Nothing may be nested beneath debug directives.", - '@error' => "Invalid error directive '@error': expected expression.", - %Q{@error "a message"\n "nested message"} => "Illegal nesting: Nothing may be nested beneath error directives.", - '@warn' => "Invalid warn directive '@warn': expected expression.", - %Q{@warn "a message"\n "nested message"} => "Illegal nesting: Nothing may be nested beneath warn directives.", - "/* foo\n bar\n baz" => "Inconsistent indentation: previous line was indented by 4 spaces, but this line was indented by 2 spaces.", - '+foo(1 + 1: 2)' => 'Invalid CSS after "(1 + 1": expected comma, was ": 2)"', - '+foo($var: )' => 'Invalid CSS after "($var: ": expected mixin argument, was ")"', - '+foo($var: a, $var: b)' => 'Keyword argument "$var" passed more than once', - '+foo($var-var: a, $var_var: b)' => 'Keyword argument "$var_var" passed more than once', - '+foo($var_var: a, $var-var: b)' => 'Keyword argument "$var-var" passed more than once', - "a\n b: foo(1 + 1: 2)" => 'Invalid CSS after "foo(1 + 1": expected comma, was ": 2)"', - "a\n b: foo($var: )" => 'Invalid CSS after "foo($var: ": expected function argument, was ")"', - "a\n b: foo($var: a, $var: b)" => 'Keyword argument "$var" passed more than once', - "a\n b: foo($var-var: a, $var_var: b)" => 'Keyword argument "$var_var" passed more than once', - "a\n b: foo($var_var: a, $var-var: b)" => 'Keyword argument "$var-var" passed more than once', - "@if foo\n @extend .bar" => ["Extend directives may only be used within rules.", 2], - "$var: true\n@while $var\n @extend .bar\n $var: false" => ["Extend directives may only be used within rules.", 3], - "@for $i from 0 to 1\n @extend .bar" => ["Extend directives may only be used within rules.", 2], - "@mixin foo\n @extend .bar\n@include foo" => ["Extend directives may only be used within rules.", 2], - "foo %\n a: b" => ['Invalid CSS after "foo %": expected placeholder name, was ""', 1], - "=foo\n @content error" => "Invalid content directive. Trailing characters found: \"error\".", - "=foo\n @content\n b: c" => "Illegal nesting: Nothing may be nested beneath @content directives.", - "@content" => '@content may only be used within a mixin.', - "=simple\n .simple\n color: red\n+simple\n color: blue" => ['Mixin "simple" does not accept a content block.', 4], - "@import \"foo\" // bar" => "Invalid CSS after \"\"foo\" \": expected media query list, was \"// bar\"", - "@at-root\n a: b" => "Properties are only allowed within rules, directives, mixin includes, or other properties.", - - # Regression tests - "a\n b:\n c\n d" => ["Illegal nesting: Only properties may be nested beneath properties.", 3], - "& foo\n bar: baz\n blat: bang" => ["Base-level rules cannot contain the parent-selector-referencing character '&'.", 1], - "a\n b: c\n& foo\n bar: baz\n blat: bang" => ["Base-level rules cannot contain the parent-selector-referencing character '&'.", 3], - "@" => "Invalid directive: '@'.", - } - - def teardown - clean_up_sassc - end - - def test_basic_render - renders_correctly "basic", { :style => :compact } - end - - def test_empty_render - assert_equal "", render("") - end - - def test_multiple_calls_to_render - sass = Sass::Engine.new("a\n b: c") - assert_equal sass.render, sass.render - end - - def test_alternate_styles - renders_correctly "expanded", { :style => :expanded } - renders_correctly "compact", { :style => :compact } - renders_correctly "nested", { :style => :nested } - renders_correctly "compressed", { :style => :compressed } - end - - def test_compile - assert_equal "div { hello: world; }\n", Sass.compile("$who: world\ndiv\n hello: $who", :syntax => :sass, :style => :compact) - assert_equal "div { hello: world; }\n", Sass.compile("$who: world; div { hello: $who }", :style => :compact) - end - - def test_compile_file - FileUtils.mkdir_p(absolutize("tmp")) - open(absolutize("tmp/test_compile_file.sass"), "w") {|f| f.write("$who: world\ndiv\n hello: $who")} - open(absolutize("tmp/test_compile_file.scss"), "w") {|f| f.write("$who: world; div { hello: $who }")} - assert_equal "div { hello: world; }\n", Sass.compile_file(absolutize("tmp/test_compile_file.sass"), :style => :compact) - assert_equal "div { hello: world; }\n", Sass.compile_file(absolutize("tmp/test_compile_file.scss"), :style => :compact) - ensure - FileUtils.rm_rf(absolutize("tmp")) - end - - def test_compile_file_to_css_file - FileUtils.mkdir_p(absolutize("tmp")) - open(absolutize("tmp/test_compile_file.sass"), "w") {|f| f.write("$who: world\ndiv\n hello: $who")} - open(absolutize("tmp/test_compile_file.scss"), "w") {|f| f.write("$who: world; div { hello: $who }")} - Sass.compile_file(absolutize("tmp/test_compile_file.sass"), absolutize("tmp/test_compile_file_sass.css"), :style => :compact) - Sass.compile_file(absolutize("tmp/test_compile_file.scss"), absolutize("tmp/test_compile_file_scss.css"), :style => :compact) - assert_equal "div { hello: world; }\n", File.read(absolutize("tmp/test_compile_file_sass.css")) - assert_equal "div { hello: world; }\n", File.read(absolutize("tmp/test_compile_file_scss.css")) - ensure - FileUtils.rm_rf(absolutize("tmp")) - end - - def test_flexible_tabulation - assert_equal("p {\n a: b; }\n p q {\n c: d; }\n", - render("p\n a: b\n q\n c: d\n")) - assert_equal("p {\n a: b; }\n p q {\n c: d; }\n", - render("p\n\ta: b\n\tq\n\t\tc: d\n")) - end - - def test_import_same_name_different_ext - assert_raise_message Sass::SyntaxError, < [File.dirname(__FILE__) + '/templates/']} - munge_filename options - Sass::Engine.new("@import 'same_name_different_ext'", options).render - end - end - - def test_import_same_name_different_partiality - assert_raise_message Sass::SyntaxError, < [File.dirname(__FILE__) + '/templates/']} - munge_filename options - Sass::Engine.new("@import 'same_name_different_partiality'", options).render - end - end - - EXCEPTION_MAP.each do |key, value| - define_method("test_exception (#{key.inspect})") do - line = 10 - begin - silence_warnings {Sass::Engine.new(key, :filename => FAKE_FILE_NAME, :line => line).render} - rescue Sass::SyntaxError => err - value = [value] unless value.is_a?(Array) - - assert_equal(value.first.rstrip, err.message, "Line: #{key}") - assert_equal(FAKE_FILE_NAME, err.sass_filename) - assert_equal((value[1] || key.split("\n").length) + line - 1, err.sass_line, "Line: #{key}") - assert_match(/#{Regexp.escape(FAKE_FILE_NAME)}:[0-9]+/, err.backtrace[0], "Line: #{key}") - else - assert(false, "Exception not raised for\n#{key}") - end - end - end - - def test_exception_line - to_render = < err - assert_equal(5, err.sass_line) - else - assert(false, "Exception not raised for '#{to_render}'!") - end - end - - def test_exception_location - to_render = < FAKE_FILE_NAME, :line => (__LINE__-7)).render - rescue Sass::SyntaxError => err - assert_equal(FAKE_FILE_NAME, err.sass_filename) - assert_equal((__LINE__-6), err.sass_line) - else - assert(false, "Exception not raised for '#{to_render}'!") - end - end - - def test_imported_exception - [1, 2, 3, 4].each do |i| - begin - Sass::Engine.new("@import bork#{i}", :load_paths => [File.dirname(__FILE__) + '/templates/']).render - rescue Sass::SyntaxError => err - assert_equal(2, err.sass_line) - assert_match(/(\/|^)bork#{i}\.sass$/, err.sass_filename) - - assert_hash_has(err.sass_backtrace.first, - :filename => err.sass_filename, :line => err.sass_line) - - assert_nil(err.sass_backtrace[1][:filename]) - assert_equal(1, err.sass_backtrace[1][:line]) - - assert_match(/(\/|^)bork#{i}\.sass:2$/, err.backtrace.first) - assert_equal("(sass):1", err.backtrace[1]) - else - assert(false, "Exception not raised for imported template: bork#{i}") - end - end - end - - def test_double_imported_exception - [1, 2, 3, 4].each do |i| - begin - Sass::Engine.new("@import nested_bork#{i}", :load_paths => [File.dirname(__FILE__) + '/templates/']).render - rescue Sass::SyntaxError => err - assert_equal(2, err.sass_line) - assert_match(/(\/|^)bork#{i}\.sass$/, err.sass_filename) - - assert_hash_has(err.sass_backtrace.first, - :filename => err.sass_filename, :line => err.sass_line) - - assert_match(/(\/|^)nested_bork#{i}\.sass$/, err.sass_backtrace[1][:filename]) - assert_equal(2, err.sass_backtrace[1][:line]) - - assert_nil(err.sass_backtrace[2][:filename]) - assert_equal(1, err.sass_backtrace[2][:line]) - - assert_match(/(\/|^)bork#{i}\.sass:2$/, err.backtrace.first) - assert_match(/(\/|^)nested_bork#{i}\.sass:2$/, err.backtrace[1]) - assert_equal("(sass):1", err.backtrace[2]) - else - assert(false, "Exception not raised for imported template: bork#{i}") - end - end - end - - def test_selector_tracing - actual_css = render(<<-SCSS, :syntax => :scss, :trace_selectors => true) - @mixin mixed { - .mixed { color: red; } - } - .context { - @include mixed; - } - SCSS - assert_equal(< err - assert_equal(2, err.sass_line) - assert_equal(filename_for_test, err.sass_filename) - assert_equal("error-mixin", err.sass_mixin) - - assert_hash_has(err.sass_backtrace.first, :line => err.sass_line, - :filename => err.sass_filename, :mixin => err.sass_mixin) - assert_hash_has(err.sass_backtrace[1], :line => 5, - :filename => filename_for_test, :mixin => "outer-mixin") - assert_hash_has(err.sass_backtrace[2], :line => 8, - :filename => filename_for_test, :mixin => nil) - - assert_equal("#{filename_for_test}:2:in `error-mixin'", err.backtrace.first) - assert_equal("#{filename_for_test}:5:in `outer-mixin'", err.backtrace[1]) - assert_equal("#{filename_for_test}:8", err.backtrace[2]) - end - - def test_mixin_callsite_exception - render(< err - assert_hash_has(err.sass_backtrace.first, :line => 5, - :filename => filename_for_test, :mixin => "one-arg-mixin") - assert_hash_has(err.sass_backtrace[1], :line => 5, - :filename => filename_for_test, :mixin => "outer-mixin") - assert_hash_has(err.sass_backtrace[2], :line => 8, - :filename => filename_for_test, :mixin => nil) - end - - def test_mixin_exception_cssize - render(< err - assert_hash_has(err.sass_backtrace.first, :line => 2, - :filename => filename_for_test, :mixin => "parent-ref-mixin") - assert_hash_has(err.sass_backtrace[1], :line => 6, - :filename => filename_for_test, :mixin => "outer-mixin") - assert_hash_has(err.sass_backtrace[2], :line => 8, - :filename => filename_for_test, :mixin => nil) - end - - def test_mixin_and_import_exception - Sass::Engine.new("@import nested_mixin_bork", :load_paths => [File.dirname(__FILE__) + '/templates/']).render - assert(false, "Exception not raised") - rescue Sass::SyntaxError => err - assert_match(/(\/|^)nested_mixin_bork\.sass$/, err.sass_backtrace.first[:filename]) - assert_hash_has(err.sass_backtrace.first, :mixin => "error-mixin", :line => 4) - - assert_match(/(\/|^)mixin_bork\.sass$/, err.sass_backtrace[1][:filename]) - assert_hash_has(err.sass_backtrace[1], :mixin => "outer-mixin", :line => 2) - - assert_match(/(\/|^)mixin_bork\.sass$/, err.sass_backtrace[2][:filename]) - assert_hash_has(err.sass_backtrace[2], :mixin => nil, :line => 5) - - assert_match(/(\/|^)nested_mixin_bork\.sass$/, err.sass_backtrace[3][:filename]) - assert_hash_has(err.sass_backtrace[3], :mixin => nil, :line => 6) - - assert_hash_has(err.sass_backtrace[4], :filename => nil, :mixin => nil, :line => 1) - end - - def test_recursive_mixin - assert_equal < filename_for_test, - :load_paths => [importer], :importer => importer) - - assert_raise_message(Sass::SyntaxError, < filename_for_test, - :load_paths => [importer], :importer => importer) - - assert_raise_message(Sass::SyntaxError, < true, :line => 362} - render(("a\n b: c\n" * 10) + "d\n e:\n" + ("f\n g: h\n" * 10), opts) - rescue Sass::SyntaxError => e - assert_equal(< true) -=error-mixin($a) - color: $a * 1em * 1px - -=outer-mixin($a) - +error-mixin($a) - -.error - +outer-mixin(12) -SASS - rescue Sass::SyntaxError => e - assert_equal(< true) -.filler - stuff: "stuff!" - -a: b - -.more.filler - a: b -SASS - rescue Sass::SyntaxError => e - assert_equal(< :compact, :load_paths => [File.dirname(__FILE__) + "/templates"] } - assert File.exist?(sassc_file) - end - - def test_sass_pathname_import - sassc_file = sassc_path("importee") - assert !File.exist?(sassc_file) - renders_correctly("import", - :style => :compact, - :load_paths => [Pathname.new(File.dirname(__FILE__) + "/templates")]) - assert File.exist?(sassc_file) - end - - def test_import_from_global_load_paths - importer = MockImporter.new - importer.add_import("imported", "div{color:red}") - Sass.load_paths << importer - - assert_equal "div {\n color: red; }\n", Sass::Engine.new('@import "imported"', :importer => importer).render - ensure - Sass.load_paths.clear - end - - def test_nonexistent_import - assert_raise_message(Sass::SyntaxError, < :compact, :cache => false, - :load_paths => [File.dirname(__FILE__) + "/templates"], - }) - assert !File.exist?(sassc_path("importee")) - end - - def test_import_in_rule - assert_equal(< [File.dirname(__FILE__) + '/templates/'])) -.foo #foo { - background-color: #baf; } - -.bar { - a: b; } - .bar #foo { - background-color: #baf; } -CSS -.foo - @import partial - -.bar - a: b - @import partial -SASS - end - - def test_units - renders_correctly "units" - end - - def test_default_function - assert_equal(< :compact)) - - assert_equal("#foo #bar,#baz #boom{foo:bar}\n", - render("#foo #bar,\n#baz #boom\n :foo bar", :style => :compressed)) - - assert_equal("#foo #bar,\n#baz #boom {\n foo: bar; }\n", - render("#foo #bar,,\n,#baz #boom,\n :foo bar")) - - assert_equal("#bip #bop {\n foo: bar; }\n", - render("#bip #bop,, ,\n :foo bar")) - end - - def test_complex_multiline_selector - renders_correctly "multiline" - end - - def test_colon_only - begin - render("a\n b: c", :property_syntax => :old) - rescue Sass::SyntaxError => e - assert_equal("Illegal property syntax: can't use new syntax when :property_syntax => :old is set.", - e.message) - assert_equal(2, e.sass_line) - else - assert(false, "SyntaxError not raised for :property_syntax => :old") - end - - begin - render("a\n :b c", :property_syntax => :new) - assert_equal(2, e.sass_line) - rescue Sass::SyntaxError => e - assert_equal("Illegal property syntax: can't use old syntax when :property_syntax => :new is set.", - e.message) - else - assert(false, "SyntaxError not raised for :property_syntax => :new") - end - end - - def test_pseudo_elements - assert_equal(< :compact)) - assert_equal("@a {\n b: c;\n}\n", render("@a\n :b c", :style => :expanded)) - assert_equal("@a{b:c}\n", render("@a\n :b c", :style => :compressed)) - - assert_equal("@a {\n b: c;\n d: e; }\n", - render("@a\n :b c\n :d e")) - assert_equal("@a { b: c; d: e; }\n", - render("@a\n :b c\n :d e", :style => :compact)) - assert_equal("@a {\n b: c;\n d: e;\n}\n", - render("@a\n :b c\n :d e", :style => :expanded)) - assert_equal("@a{b:c;d:e}\n", - render("@a\n :b c\n :d e", :style => :compressed)) - - assert_equal("@a {\n #b {\n c: d; } }\n", - render("@a\n #b\n :c d")) - assert_equal("@a { #b { c: d; } }\n", - render("@a\n #b\n :c d", :style => :compact)) - assert_equal("@a {\n #b {\n c: d;\n }\n}\n", - render("@a\n #b\n :c d", :style => :expanded)) - assert_equal("@a{#b{c:d}}\n", - render("@a\n #b\n :c d", :style => :compressed)) - - assert_equal("@a {\n #b {\n a: b; }\n #b #c {\n d: e; } }\n", - render("@a\n #b\n :a b\n #c\n :d e")) - assert_equal("@a { #b { a: b; }\n #b #c { d: e; } }\n", - render("@a\n #b\n :a b\n #c\n :d e", :style => :compact)) - assert_equal("@a {\n #b {\n a: b;\n }\n #b #c {\n d: e;\n }\n}\n", - render("@a\n #b\n :a b\n #c\n :d e", :style => :expanded)) - assert_equal("@a{#b{a:b}#b #c{d:e}}\n", - render("@a\n #b\n :a b\n #c\n :d e", :style => :compressed)) - - assert_equal("@a {\n #foo,\n #bar {\n b: c; } }\n", - render("@a\n #foo, \n #bar\n :b c")) - assert_equal("@a { #foo, #bar { b: c; } }\n", - render("@a\n #foo, \n #bar\n :b c", :style => :compact)) - assert_equal("@a {\n #foo,\n #bar {\n b: c;\n }\n}\n", - render("@a\n #foo, \n #bar\n :b c", :style => :expanded)) - assert_equal("@a{#foo,#bar{b:c}}\n", - render("@a\n #foo, \n #bar\n :b c", :style => :compressed)) - - to_render = < :compact)) - - assert_equal("@a{b:c;#d{e:f}g:h}\n", render(to_render, :style => :compressed)) - end - - def test_property_hacks - assert_equal(< true, :style => :compact)) -/* line 2, test_line_annotations_inline.sass */ -foo bar { foo: bar; } -/* line 5, test_line_annotations_inline.sass */ -foo baz { blip: blop; } - -/* line 9, test_line_annotations_inline.sass */ -floodle { flop: blop; } - -/* line 18, test_line_annotations_inline.sass */ -bup { mix: on; } -/* line 15, test_line_annotations_inline.sass */ -bup mixin { moop: mup; } - -/* line 22, test_line_annotations_inline.sass */ -bip hop, skip hop { a: b; } -CSS -foo - bar - foo: bar - - baz - blip: blop - - -floodle - - flop: blop - -=mxn - mix: on - mixin - moop: mup - -bup - +mxn - -bip, skip - hop - a: b -SASS - end - - def test_line_annotations_with_filename - renders_correctly "line_numbers", :line_comments => true, :load_paths => [File.dirname(__FILE__) + "/templates"] - end - - def test_debug_info - esc_file_name = Sass::SCSS::RX.escape_ident(Sass::Util.scope("test_debug_info_inline.sass")) - - assert_equal(< true, :style => :compact)) -@media -sass-debug-info{filename{font-family:file\\:\\/\\/#{esc_file_name}}line{font-family:\\000032}} -foo bar { foo: bar; } -@media -sass-debug-info{filename{font-family:file\\:\\/\\/#{esc_file_name}}line{font-family:\\000035}} -foo baz { blip: blop; } - -@media -sass-debug-info{filename{font-family:file\\:\\/\\/#{esc_file_name}}line{font-family:\\000039}} -floodle { flop: blop; } - -@media -sass-debug-info{filename{font-family:file\\:\\/\\/#{esc_file_name}}line{font-family:\\0000318}} -bup { mix: on; } -@media -sass-debug-info{filename{font-family:file\\:\\/\\/#{esc_file_name}}line{font-family:\\0000315}} -bup mixin { moop: mup; } - -@media -sass-debug-info{filename{font-family:file\\:\\/\\/#{esc_file_name}}line{font-family:\\0000322}} -bip hop, skip hop { a: b; } -CSS -foo - bar - foo: bar - - baz - blip: blop - - -floodle - - flop: blop - -=mxn - mix: on - mixin - moop: mup - -bup - +mxn - -bip, skip - hop - a: b -SASS - end - - def test_debug_info_without_filename - assert_equal(< true).render) -@media -sass-debug-info{filename{}line{font-family:\\000031}} -foo { - a: b; } -CSS -foo - a: b -SASS - end - - def test_debug_info_with_compressed - assert_equal(< true, :style => :compressed)) -foo{a:b} -CSS -foo - a: b -SASS - end - - def test_debug_info_with_line_annotations - esc_file_name = Sass::SCSS::RX.escape_ident(Sass::Util.scope("test_debug_info_with_line_annotations_inline.sass")) - - assert_equal(< true, :line_comments => true)) -@media -sass-debug-info{filename{font-family:file\\:\\/\\/#{esc_file_name}}line{font-family:\\000031}} -foo { - a: b; } -CSS -foo - a: b -SASS - end - - def test_debug_info_in_keyframes - assert_equal(< true)) -@-webkit-keyframes warm { - from { - color: black; } - to { - color: red; } } -CSS -@-webkit-keyframes warm - from - color: black - to - color: red -SASS - end - - def test_empty_first_line - assert_equal("#a {\n b: c; }\n", render("#a\n\n b: c")) - end - - def test_escaped_rule - assert_equal(":focus {\n a: b; }\n", render("\\:focus\n a: b")) - assert_equal("a {\n b: c; }\n a :focus {\n d: e; }\n", render("\\a\n b: c\n \\:focus\n d: e")) - end - - def test_cr_newline - assert_equal("foo {\n a: b;\n c: d;\n e: f; }\n", render("foo\r a: b\r\n c: d\n\r e: f")) - end - - def test_property_with_content_and_nested_props - assert_equal(< :expanded } - end - - def test_directive_style_mixins - assert_equal < e - assert_equal("Function plus is missing argument $var1.", e.message) - end - - def test_function_with_extra_argument - render(< e - assert_equal("Function plus doesn't have an argument named $var3.", e.message) - end - - def test_function_with_positional_and_keyword_argument - render(< e - assert_equal("Function plus was passed argument $var2 both by position and by name.", e.message) - end - - def test_function_with_keyword_before_positional_argument - render(< e - assert_equal("Positional arguments must come before keyword arguments.", e.message) - end - - def test_function_with_if - assert_equal(< e - assert_equal('Undefined variable: "$variable".', e.message) - end - - def test_user_defined_function_can_change_global_variable - assert_equal(< :compressed) -foo{color:blue;/*! foo - * bar - */} -CSS -foo - color: blue - /*! foo - * bar - */ -SASS - end - - def test_loud_comment_is_evaluated - assert_equal < :new)) -:focus { - outline: 0; } -CSS -:focus - outline: 0 -SASS - end - - def test_pseudo_class_with_new_properties - assert_equal(< :new)) -p :focus { - outline: 0; } -CSS -p - :focus - outline: 0 -SASS - end - - def test_nil_option - assert_equal(< nil)) -foo { - a: b; } -CSS -foo - a: b -SASS - end - - def test_interpolation_in_raw_functions - assert_equal(< true) -CSS -@warn "this is a warning" -SASS - end - end - - def test_warn_with_imports - prefix = Sass::Util.cleanpath(File.dirname(__FILE__)).to_s - expected_warning = < :compact, :load_paths => ["#{prefix}/templates"] - end - end - - def test_media_bubbling - assert_equal < :compact) -.foo { a: b; } -@media bar { .foo { c: d; } } -.foo .baz { e: f; } -@media bip { .foo .baz { g: h; } } - -.other { i: j; } -CSS -.foo - a: b - @media bar - c: d - .baz - e: f - @media bip - g: h - -.other - i: j -SASS - - assert_equal < :expanded) -.foo { - a: b; -} -@media bar { - .foo { - c: d; - } -} -.foo .baz { - e: f; -} -@media bip { - .foo .baz { - g: h; - } -} - -.other { - i: j; -} -CSS -.foo - a: b - @media bar - c: d - .baz - e: f - @media bip - g: h - -.other - i: j -SASS - end - - def test_double_media_bubbling - assert_equal < true) -/* line 5, test_line_numbers_with_dos_line_endings_inline.sass */ -.foo { - a: b; } -CSS -\r -\r -\r -\r -.foo - a: b -SASS - end - - def test_variable_in_media_in_mixin - assert_equal < :compressed)) -.box{border-style:solid} -RESULT -.box - :border - /*:color black - :style solid -SOURCE - end - - def test_compressed_comment_beneath_directive - assert_equal(< :compressed)) -@foo{a:b} -RESULT -@foo - a: b - /*b: c -SOURCE - end - - def test_comment_with_crazy_indentation - assert_equal(< :compressed) -a>b,c+d,:-moz-any(e,f,g){h:i} -CSS -a > b, c + d, :-moz-any(e, f, g) - h: i -SASS - end - - def test_comment_like_selector - assert_raise_message(Sass::SyntaxError, 'Invalid CSS after "/": expected identifier, was " foo"') {render(< original_filename, :load_paths => [importer], :syntax => :scss, :importer => importer) - engine.render - - assert_equal original_filename, engine.options[:original_filename] - assert_equal original_filename, importer.engine("imported").options[:original_filename] - end - - def test_changing_precision - old_precision = Sass::Script::Value::Number.precision - begin - Sass::Script::Value::Number.precision = 8 - assert_equal < e - assert_equal([ - {:mixin => '@content', :line => 6, :filename => 'test_content_backtrace_for_perform_inline.sass'}, - {:mixin => 'foo', :line => 2, :filename => 'test_content_backtrace_for_perform_inline.sass'}, - {:line => 5, :filename => 'test_content_backtrace_for_perform_inline.sass'}, - ], e.sass_backtrace) - end - - def test_content_backtrace_for_cssize - render(< e - assert_equal([ - {:mixin => '@content', :line => 6, :filename => 'test_content_backtrace_for_cssize_inline.sass'}, - {:mixin => 'foo', :line => 2, :filename => 'test_content_backtrace_for_cssize_inline.sass'}, - {:line => 5, :filename => 'test_content_backtrace_for_cssize_inline.sass'}, - ], e.sass_backtrace) - end - - def test_mixin_with_args_and_varargs_passed_no_var_args - assert_equal < :scss) -.foo { - a: 1; - b: 2; - c: 3; } -CSS -@mixin three-or-more-args($a, $b, $c, $rest...) { - a: $a; - b: $b; - c: $c; -} - -.foo { - @include three-or-more-args($a: 1, $b: 2, $c: 3); -} -SASS - - end - - def test_debug_inspects_sass_objects - assert_warning(< :scss)} -test_debug_inspects_sass_objects_inline.scss:1 DEBUG: (a: 1, b: 2) -END - end - - def test_error_throws_sass_objects - assert_raise_message(Sass::SyntaxError, "(a: 1, b: 2)") {render("@error (a: 1, b: 2)")} - assert_raise_message(Sass::SyntaxError, "(a: 1, b: 2)") do - render("$map: (a: 1, b: 2); @error $map", :syntax => :scss) - end - end - - def test_default_arg_before_splat - assert_equal < :scss) -.foo-positional { - a: 1; - b: 2; - positional-arguments: 3, 4; - keyword-arguments: (); } - -.foo-keywords { - a: true; - positional-arguments: (); - keyword-arguments: (c: c, d: d); } -CSS -@mixin foo($a: true, $b: null, $arguments...) { - a: $a; - b: $b; - positional-arguments: inspect($arguments); - keyword-arguments: inspect(keywords($arguments)); -} -.foo-positional { - @include foo(1, 2, 3, 4); -} -.foo-keywords { - @include foo($c: c, $d: d); -} -SASS - end - - def test_keyframes - assert_equal < sassc_path, - :importer => Sass::Importers::Filesystem.new(".")) - key = engine.send(:sassc_key) - File.join(engine.options[:cache_location], key) - end -end - diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/exec_test.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/exec_test.rb deleted file mode 100755 index c606b6a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/exec_test.rb +++ /dev/null @@ -1,86 +0,0 @@ -#!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../test_helper' -require 'sass/util/test' -require 'tmpdir' - -class ExecTest < MiniTest::Test - include Sass::Util::Test - - def setup - @dir = Dir.mktmpdir - end - - def teardown - FileUtils.rm_rf(@dir) - clean_up_sassc - end - - def test_scss_t_expanded - src = get_path("src.scss") - dest = get_path("dest.css") - write(src, ".ruleset { margin: 0 }") - assert(exec(*%w[scss --sourcemap=none -t expanded --unix-newlines].push(src, dest))) - assert_equal(".ruleset {\n margin: 0;\n}\n", read(dest)) - end - - def test_sass_convert_T_sass - src = get_path("src.scss") - dest = get_path("dest.css") - write(src, ".ruleset { margin: 0 }") - assert(exec(*%w[sass-convert -T sass --unix-newlines].push(src, dest))) - assert_equal(".ruleset\n margin: 0\n", read(dest)) - end - - def test_sass_convert_T_sass_in_place - src = get_path("src.scss") - write(src, ".ruleset { margin: 0 }") - assert(exec(*%w[sass-convert -T sass --in-place --unix-newlines].push(src))) - assert_equal(".ruleset\n margin: 0\n", read(src)) - end - - def test_scss_t_expanded_no_unix_newlines - return skip "Can be run on Windows only" unless Sass::Util.windows? - src = get_path("src.scss") - dest = get_path("dest.css") - write(src, ".ruleset { margin: 0 }") - assert(exec(*%w[scss -t expanded].push(src, dest))) - assert_equal(".ruleset {\r\n margin: 0;\r\n}\r\n", read(dest)) - end - - def test_sass_convert_T_sass_no_unix_newlines - return skip "Can be run on Windows only" unless Sass::Util.windows? - src = get_path("src.scss") - dest = get_path("dest.sass") - write(src, ".ruleset { margin: 0 }") - assert(exec(*%w[sass-convert -T sass].push(src, dest))) - assert_equal(".ruleset\r\n margin: 0\r\n", read(dest)) - end - - def test_sass_convert_T_sass_in_place_no_unix_newlines - return skip "Can be run on Windows only" unless Sass::Util.windows? - src = get_path("src.scss") - write(src, ".ruleset { margin: 0 }") - assert(exec(*%w[sass-convert -T sass --in-place].push(src))) - assert_equal(".ruleset\r\n margin: 0\r\n", read(src)) - end - - private - - def get_path(name) - File.join(@dir, name) - end - - def read(file) - open(file, 'rb') {|f| f.read} - end - - def write(file, content) - open(file, 'wb') {|f| f.write(content)} - end - - def exec(script, *args) - script = File.dirname(__FILE__) + '/../../bin/' + script - ruby = File.join(RbConfig::CONFIG['bindir'], RbConfig::CONFIG['ruby_install_name'] + RbConfig::CONFIG['EXEEXT']) - system(ruby, script, *args) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/extend_test.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/extend_test.rb deleted file mode 100755 index 669e710..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/extend_test.rb +++ /dev/null @@ -1,1707 +0,0 @@ -#!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../test_helper' - -class ExtendTest < MiniTest::Test - def test_basic - assert_equal < :sass) -.foo, .bar { - a: b; } -CSS -.foo - a: b -.bar - @extend .foo -SASS - - assert_equal < :sass) -.foo, .bar { - a: b; } -CSS -.foo - a: b -.bar - @extend \#{".foo"} -SASS - end - - def test_multiple_targets - assert_equal < .bar .x', '.baz:root .bang .y {@extend .x}', - '.foo:root > .bar .x, .baz.foo:root > .bar .bang .y') - end - - def test_comma_extendee - assert_equal < bar {@extend .foo}', '.baz .foo, .baz foo > bar' - end - - def test_nested_extender_finds_common_selectors_around_child_selector - assert_extends 'a > b c .c1', 'a c .c2 {@extend .c1}', 'a > b c .c1, a > b c .c2' - assert_extends 'a > b c .c1', 'b c .c2 {@extend .c1}', 'a > b c .c1, a > b c .c2' - end - - def test_nested_extender_doesnt_find_common_selectors_around_adjacent_sibling_selector - assert_extends 'a + b c .c1', 'a c .c2 {@extend .c1}', 'a + b c .c1, a + b a c .c2, a a + b c .c2' - assert_extends 'a + b c .c1', 'a b .c2 {@extend .c1}', 'a + b c .c1, a a + b c .c2' - assert_extends 'a + b c .c1', 'b c .c2 {@extend .c1}', 'a + b c .c1, a + b c .c2' - end - - def test_nested_extender_doesnt_find_common_selectors_around_sibling_selector - assert_extends 'a ~ b c .c1', 'a c .c2 {@extend .c1}', 'a ~ b c .c1, a ~ b a c .c2, a a ~ b c .c2' - assert_extends 'a ~ b c .c1', 'a b .c2 {@extend .c1}', 'a ~ b c .c1, a a ~ b c .c2' - assert_extends 'a ~ b c .c1', 'b c .c2 {@extend .c1}', 'a ~ b c .c1, a ~ b c .c2' - end - - def test_nested_extender_doesnt_find_common_selectors_around_reference_selector - assert_extends 'a /for/ b c .c1', 'a c .c2 {@extend .c1}', 'a /for/ b c .c1, a /for/ b a c .c2, a a /for/ b c .c2' - assert_extends 'a /for/ b c .c1', 'a b .c2 {@extend .c1}', 'a /for/ b c .c1, a a /for/ b c .c2' - assert_extends 'a /for/ b c .c1', 'b c .c2 {@extend .c1}', 'a /for/ b c .c1, a /for/ b c .c2' - end - - def test_nested_extender_with_early_child_selectors_doesnt_subseq_them - assert_extends('.bip > .bap .foo', '.grip > .bap .bar {@extend .foo}', - '.bip > .bap .foo, .bip > .bap .grip > .bap .bar, .grip > .bap .bip > .bap .bar') - assert_extends('.bap > .bip .foo', '.bap > .grip .bar {@extend .foo}', - '.bap > .bip .foo, .bap > .bip .bap > .grip .bar, .bap > .grip .bap > .bip .bar') - end - - def test_nested_extender_with_child_selector_unifies - assert_extends '.baz.foo', 'foo > bar {@extend .foo}', '.baz.foo, foo > bar.baz' - - assert_equal < .foo, .baz > .bar { - a: b; } -CSS -.baz > { - .foo {a: b} - .bar {@extend .foo} -} -SCSS - - assert_equal < .baz { - a: b; } -CSS -.foo { - .bar {a: b} - > .baz {@extend .bar} -} -SCSS - end - - def test_nested_extender_with_early_child_selector - assert_equal < .baz { - a: b; } -CSS -.foo { - .bar {a: b} - .bip > .baz {@extend .bar} -} -SCSS - - assert_equal < .baz { - a: b; } -CSS -.foo { - .bip .bar {a: b} - > .baz {@extend .bar} -} -SCSS - - assert_extends '.foo > .bar', '.bip + .baz {@extend .bar}', '.foo > .bar, .foo > .bip + .baz' - assert_extends '.foo + .bar', '.bip > .baz {@extend .bar}', '.foo + .bar, .bip > .foo + .baz' - assert_extends '.foo > .bar', '.bip > .baz {@extend .bar}', '.foo > .bar, .bip.foo > .baz' - end - - def test_nested_extender_with_trailing_child_selector - assert_raises(Sass::SyntaxError, "bar > can't extend: invalid selector") do - render("bar > {@extend .baz}") - end - end - - def test_nested_extender_with_sibling_selector - assert_extends '.baz .foo', 'foo + bar {@extend .foo}', '.baz .foo, .baz foo + bar' - end - - def test_nested_extender_with_hacky_selector - assert_extends('.baz .foo', 'foo + > > + bar {@extend .foo}', - '.baz .foo, .baz foo + > > + bar, foo .baz + > > + bar') - assert_extends '.baz .foo', '> > bar {@extend .foo}', '.baz .foo, > > .baz bar' - end - - def test_nested_extender_merges_with_same_selector - assert_equal < .bar .baz', '.foo > .bar .bang {@extend .baz}', - '.foo > .bar .baz, .foo > .bar .bang') - end - - # Combinator Unification - - def test_combinator_unification_for_hacky_combinators - assert_extends '.a > + x', '.b y {@extend x}', '.a > + x, .a .b > + y, .b .a > + y' - assert_extends '.a x', '.b > + y {@extend x}', '.a x, .a .b > + y, .b .a > + y' - assert_extends '.a > + x', '.b > + y {@extend x}', '.a > + x, .a .b > + y, .b .a > + y' - assert_extends '.a ~ > + x', '.b > + y {@extend x}', '.a ~ > + x, .a .b ~ > + y, .b .a ~ > + y' - assert_extends '.a + > x', '.b > + y {@extend x}', '.a + > x' - assert_extends '.a + > x', '.b > + y {@extend x}', '.a + > x' - assert_extends '.a ~ > + .b > x', '.c > + .d > y {@extend x}', '.a ~ > + .b > x, .a .c ~ > + .d.b > y, .c .a ~ > + .d.b > y' - end - - def test_combinator_unification_double_tilde - assert_extends '.a.b ~ x', '.a ~ y {@extend x}', '.a.b ~ x, .a.b ~ y' - assert_extends '.a ~ x', '.a.b ~ y {@extend x}', '.a ~ x, .a.b ~ y' - assert_extends '.a ~ x', '.b ~ y {@extend x}', '.a ~ x, .a ~ .b ~ y, .b ~ .a ~ y, .b.a ~ y' - assert_extends 'a.a ~ x', 'b.b ~ y {@extend x}', 'a.a ~ x, a.a ~ b.b ~ y, b.b ~ a.a ~ y' - end - - def test_combinator_unification_tilde_plus - assert_extends '.a.b + x', '.a ~ y {@extend x}', '.a.b + x, .a.b + y' - assert_extends '.a + x', '.a.b ~ y {@extend x}', '.a + x, .a.b ~ .a + y, .a.b + y' - assert_extends '.a + x', '.b ~ y {@extend x}', '.a + x, .b ~ .a + y, .b.a + y' - assert_extends 'a.a + x', 'b.b ~ y {@extend x}', 'a.a + x, b.b ~ a.a + y' - assert_extends '.a.b ~ x', '.a + y {@extend x}', '.a.b ~ x, .a.b ~ .a + y, .a.b + y' - assert_extends '.a ~ x', '.a.b + y {@extend x}', '.a ~ x, .a.b + y' - assert_extends '.a ~ x', '.b + y {@extend x}', '.a ~ x, .a ~ .b + y, .a.b + y' - assert_extends 'a.a ~ x', 'b.b + y {@extend x}', 'a.a ~ x, a.a ~ b.b + y' - end - - def test_combinator_unification_angle_sibling - assert_extends '.a > x', '.b ~ y {@extend x}', '.a > x, .a > .b ~ y' - assert_extends '.a > x', '.b + y {@extend x}', '.a > x, .a > .b + y' - assert_extends '.a ~ x', '.b > y {@extend x}', '.a ~ x, .b > .a ~ y' - assert_extends '.a + x', '.b > y {@extend x}', '.a + x, .b > .a + y' - end - - def test_combinator_unification_double_angle - assert_extends '.a.b > x', '.b > y {@extend x}', '.a.b > x, .b.a > y' - assert_extends '.a > x', '.a.b > y {@extend x}', '.a > x, .a.b > y' - assert_extends '.a > x', '.b > y {@extend x}', '.a > x, .b.a > y' - assert_extends 'a.a > x', 'b.b > y {@extend x}', 'a.a > x' - end - - def test_combinator_unification_double_plus - assert_extends '.a.b + x', '.b + y {@extend x}', '.a.b + x, .b.a + y' - assert_extends '.a + x', '.a.b + y {@extend x}', '.a + x, .a.b + y' - assert_extends '.a + x', '.b + y {@extend x}', '.a + x, .b.a + y' - assert_extends 'a.a + x', 'b.b + y {@extend x}', 'a.a + x' - end - - def test_combinator_unification_angle_space - assert_extends '.a.b > x', '.a y {@extend x}', '.a.b > x, .a.b > y' - assert_extends '.a > x', '.a.b y {@extend x}', '.a > x, .a.b .a > y' - assert_extends '.a > x', '.b y {@extend x}', '.a > x, .b .a > y' - assert_extends '.a.b x', '.a > y {@extend x}', '.a.b x, .a.b .a > y' - assert_extends '.a x', '.a.b > y {@extend x}', '.a x, .a.b > y' - assert_extends '.a x', '.b > y {@extend x}', '.a x, .a .b > y' - end - - def test_combinator_unification_plus_space - assert_extends '.a.b + x', '.a y {@extend x}', '.a.b + x, .a .a.b + y' - assert_extends '.a + x', '.a.b y {@extend x}', '.a + x, .a.b .a + y' - assert_extends '.a + x', '.b y {@extend x}', '.a + x, .b .a + y' - assert_extends '.a.b x', '.a + y {@extend x}', '.a.b x, .a.b .a + y' - assert_extends '.a x', '.a.b + y {@extend x}', '.a x, .a .a.b + y' - assert_extends '.a x', '.b + y {@extend x}', '.a x, .a .b + y' - end - - def test_combinator_unification_nested - assert_extends '.a > .b + x', '.c > .d + y {@extend x}', '.a > .b + x, .c.a > .d.b + y' - assert_extends '.a > .b + x', '.c > y {@extend x}', '.a > .b + x, .c.a > .b + y' - end - - def test_combinator_unification_with_newlines - assert_equal < -.b -+ x, .c.a > .d.b + y { - a: b; } -CSS -.a > -.b -+ x {a: b} -.c -> .d + -y {@extend x} -SCSS - end - - # Loops - - def test_extend_self_loop - assert_equal < .foo', 'foo bar {@extend .foo}', '> .foo, > foo bar' - end - - def test_nested_selector_with_child_selector_hack_extender - assert_extends '.foo .bar', '> foo bar {@extend .bar}', '.foo .bar, > .foo foo bar, > foo .foo bar' - end - - def test_nested_selector_with_child_selector_hack_extender_and_extendee - assert_extends '> .foo', '> foo bar {@extend .foo}', '> .foo, > foo bar' - end - - def test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee - assert_extends '~ .foo', '> foo bar {@extend .foo}', '~ .foo' - end - - def test_nested_selector_with_child_selector_hack_extender_and_extendee_and_newline - assert_equal < .foo, > flip, -> foo bar { - a: b; } -CSS -> .foo {a: b} -flip, -> foo bar {@extend .foo} -SCSS - end - - def test_extended_parent_and_child_redundancy_elimination - assert_equal < :scss}.merge(options) - munge_filename options - Sass::Engine.new(sass, options).render - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/fixtures/test_staleness_check_across_importers.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/fixtures/test_staleness_check_across_importers.css deleted file mode 100644 index 77b6225..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/fixtures/test_staleness_check_across_importers.css +++ /dev/null @@ -1 +0,0 @@ -.pear { color: green; } diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/fixtures/test_staleness_check_across_importers.scss b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/fixtures/test_staleness_check_across_importers.scss deleted file mode 100644 index 1468ac9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/fixtures/test_staleness_check_across_importers.scss +++ /dev/null @@ -1 +0,0 @@ -@import "apple"; diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/functions_test.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/functions_test.rb deleted file mode 100755 index a03ad89..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/functions_test.rb +++ /dev/null @@ -1,1971 +0,0 @@ -#!/usr/bin/env ruby -require 'minitest/autorun' -require File.dirname(__FILE__) + '/../test_helper' -require File.dirname(__FILE__) + '/test_helper' -require 'sass/script' -require 'mock_importer' - -module Sass::Script::Functions - def no_kw_args - Sass::Script::Value::String.new("no-kw-args") - end - - def only_var_args(*args) - Sass::Script::Value::String.new("only-var-args("+args.map{|a| a.plus(Sass::Script::Value::Number.new(1)).to_s }.join(", ")+")") - end - declare :only_var_args, [], :var_args => true - - def only_kw_args(kwargs) - Sass::Script::Value::String.new("only-kw-args(" + kwargs.keys.map {|a| a.to_s}.sort.join(", ") + ")") - end - declare :only_kw_args, [], :var_kwargs => true - - def deprecated_arg_fn(arg1, arg2, arg3 = nil) - Sass::Script::Value::List.new([arg1, arg2, arg3 || Sass::Script::Value::Null.new], :space) - end - declare :deprecated_arg_fn, [:arg1, :arg2, :arg3], :deprecated => [:arg_1, :arg_2, :arg3] - declare :deprecated_arg_fn, [:arg1, :arg2], :deprecated => [:arg_1, :arg_2] -end - -module Sass::Script::Functions::UserFunctions - def call_options_on_new_value - str = Sass::Script::Value::String.new("foo") - str.options[:foo] - str - end - - def user_defined - Sass::Script::Value::String.new("I'm a user-defined string!") - end - - def _preceding_underscore - Sass::Script::Value::String.new("I'm another user-defined string!") - end - - def fetch_the_variable - environment.var('variable') - end -end - -module Sass::Script::Functions - include Sass::Script::Functions::UserFunctions -end - -class SassFunctionTest < MiniTest::Test - # Tests taken from: - # http://www.w3.org/Style/CSS/Test/CSS3/Color/20070927/html4/t040204-hsl-h-rotating-b.htm - # http://www.w3.org/Style/CSS/Test/CSS3/Color/20070927/html4/t040204-hsl-values-b.htm - File.read(File.dirname(__FILE__) + "/data/hsl-rgb.txt").split("\n\n").each do |chunk| - hsls, rgbs = chunk.strip.split("====") - hsls.strip.split("\n").zip(rgbs.strip.split("\n")) do |hsl, rgb| - hsl_method = "test_hsl: #{hsl} = #{rgb}" - unless method_defined?(hsl_method) - define_method(hsl_method) do - assert_equal(evaluate(rgb), evaluate(hsl)) - end - end - - rgb_to_hsl_method = "test_rgb_to_hsl: #{rgb} = #{hsl}" - unless method_defined?(rgb_to_hsl_method) - define_method(rgb_to_hsl_method) do - rgb_color = perform(rgb) - hsl_color = perform(hsl) - - white = hsl_color.lightness == 100 - black = hsl_color.lightness == 0 - grayscale = white || black || hsl_color.saturation == 0 - - assert_in_delta(hsl_color.hue, rgb_color.hue, 0.0001, - "Hues should be equal") unless grayscale - assert_in_delta(hsl_color.saturation, rgb_color.saturation, 0.0001, - "Saturations should be equal") unless white || black - assert_in_delta(hsl_color.lightness, rgb_color.lightness, 0.0001, - "Lightnesses should be equal") - end - end - end - end - - def test_hsl_kwargs - assert_equal "#33cccc", evaluate("hsl($hue: 180, $saturation: 60%, $lightness: 50%)") - end - - def test_hsl_clamps_bounds - assert_equal("#1f1f1f", evaluate("hsl(10, -114, 12)")) - assert_equal("white", evaluate("hsl(10, 10, 256%)")) - end - - def test_hsl_checks_types - assert_error_message("$hue: \"foo\" is not a number for `hsl'", "hsl(\"foo\", 10, 12)"); - assert_error_message("$saturation: \"foo\" is not a number for `hsl'", "hsl(10, \"foo\", 12)"); - assert_error_message("$lightness: \"foo\" is not a number for `hsl'", "hsl(10, 10, \"foo\")"); - end - - def test_hsla - assert_equal "rgba(51, 204, 204, 0.4)", evaluate("hsla(180, 60%, 50%, 0.4)") - assert_equal "#33cccc", evaluate("hsla(180, 60%, 50%, 1)") - assert_equal "rgba(51, 204, 204, 0)", evaluate("hsla(180, 60%, 50%, 0)") - assert_equal "rgba(51, 204, 204, 0.4)", evaluate("hsla($hue: 180, $saturation: 60%, $lightness: 50%, $alpha: 0.4)") - end - - def test_hsla_clamps_bounds - assert_equal("#1f1f1f", evaluate("hsla(10, -114, 12, 1)")) - assert_equal("rgba(255, 255, 255, 0)", evaluate("hsla(10, 10, 256%, 0)")) - assert_equal("rgba(28, 24, 23, 0)", evaluate("hsla(10, 10, 10, -0.1)")) - assert_equal("#1c1817", evaluate("hsla(10, 10, 10, 1.1)")) - end - - def test_hsla_checks_types - assert_error_message("$hue: \"foo\" is not a number for `hsla'", "hsla(\"foo\", 10, 12, 0.3)"); - assert_error_message("$saturation: \"foo\" is not a number for `hsla'", "hsla(10, \"foo\", 12, 0)"); - assert_error_message("$lightness: \"foo\" is not a number for `hsla'", "hsla(10, 10, \"foo\", 1)"); - assert_error_message("$alpha: \"foo\" is not a number for `hsla'", "hsla(10, 10, 10, \"foo\")"); - end - - def test_hsla_percent_warning - assert_warning(< Sass::Script::Value::String.new('The variable')) - assert_equal("The variable", evaluate("fetch_the_variable()", environment)) - end - - def test_options_on_new_values_fails - assert_error_message(< e - assert_equal("Function rgba doesn't have an argument named $extra", e.message) - end - - def test_keyword_args_must_have_signature - evaluate("no-kw-args($fake: value)") - flunk("Expected exception") - rescue Sass::SyntaxError => e - assert_equal("Function no_kw_args doesn't support keyword arguments", e.message) - end - - def test_keyword_args_with_missing_argument - evaluate("rgb($red: 255, $green: 255)") - flunk("Expected exception") - rescue Sass::SyntaxError => e - assert_equal("Function rgb requires an argument named $blue", e.message) - end - - def test_keyword_args_with_extra_argument - evaluate("rgb($red: 255, $green: 255, $blue: 255, $purple: 255)") - flunk("Expected exception") - rescue Sass::SyntaxError => e - assert_equal("Function rgb doesn't have an argument named $purple", e.message) - end - - def test_keyword_args_with_positional_and_keyword_argument - evaluate("rgb(255, 255, 255, $red: 255)") - flunk("Expected exception") - rescue Sass::SyntaxError => e - assert_equal("Function rgb was passed argument $red both by position and by name", e.message) - end - - def test_keyword_args_with_keyword_before_positional_argument - evaluate("rgb($red: 255, 255, 255)") - flunk("Expected exception") - rescue Sass::SyntaxError => e - assert_equal("Positional arguments must come before keyword arguments.", e.message) - end - - def test_only_var_args - assert_equal "only-var-args(2px, 3px, 4px)", evaluate("only-var-args(1px, 2px, 3px)") - end - - def test_only_kw_args - assert_equal "only-kw-args(a, b, c)", evaluate("only-kw-args($a: 1, $b: 2, $c: 3)") - end - - def test_unique_id - last_id, current_id = nil, evaluate("unique-id()") - - 50.times do - last_id, current_id = current_id, evaluate("unique-id()") - assert_match(/u[a-z0-9]{8}/, current_id) - refute_equal last_id, current_id - end - end - - def test_map_get - assert_equal "1", evaluate("map-get((foo: 1, bar: 2), foo)") - assert_equal "2", evaluate("map-get((foo: 1, bar: 2), bar)") - assert_equal "null", perform("map-get((foo: 1, bar: 2), baz)").to_sass - assert_equal "null", perform("map-get((), foo)").to_sass - end - - def test_map_get_checks_type - assert_error_message("$map: 12 is not a map for `map-get'", "map-get(12, bar)") - end - - def test_map_merge - assert_equal("(foo: 1, bar: 2, baz: 3)", - perform("map-merge((foo: 1, bar: 2), (baz: 3))").to_sass) - assert_equal("(foo: 1, bar: 2)", - perform("map-merge((), (foo: 1, bar: 2))").to_sass) - assert_equal("(foo: 1, bar: 2)", - perform("map-merge((foo: 1, bar: 2), ())").to_sass) - end - - def test_map_merge_checks_type - assert_error_message("$map1: 12 is not a map for `map-merge'", "map-merge(12, (foo: 1))") - assert_error_message("$map2: 12 is not a map for `map-merge'", "map-merge((foo: 1), 12)") - end - - def test_map_remove - assert_equal("(foo: 1, baz: 3)", - perform("map-remove((foo: 1, bar: 2, baz: 3), bar)").to_sass) - assert_equal("(foo: 1, baz: 3)", - perform("map-remove($map: (foo: 1, bar: 2, baz: 3), $key: bar)").to_sass) - assert_equal("()", - perform("map-remove((foo: 1, bar: 2, baz: 3), foo, bar, baz)").to_sass) - assert_equal("()", perform("map-remove((), foo)").to_sass) - assert_equal("()", perform("map-remove((), foo, bar)").to_sass) - end - - def test_map_remove_checks_type - assert_error_message("$map: 12 is not a map for `map-remove'", "map-remove(12, foo)") - end - - def test_map_keys - assert_equal("foo, bar", - perform("map-keys((foo: 1, bar: 2))").to_sass) - assert_equal("()", perform("map-keys(())").to_sass) - end - - def test_map_keys_checks_type - assert_error_message("$map: 12 is not a map for `map-keys'", "map-keys(12)") - end - - def test_map_values - assert_equal("1, 2", perform("map-values((foo: 1, bar: 2))").to_sass) - assert_equal("1, 2, 2", - perform("map-values((foo: 1, bar: 2, baz: 2))").to_sass) - assert_equal("()", perform("map-values(())").to_sass) - end - - def test_map_values_checks_type - assert_error_message("$map: 12 is not a map for `map-values'", "map-values(12)") - end - - def test_map_has_key - assert_equal "true", evaluate("map-has-key((foo: 1, bar: 1), foo)") - assert_equal "false", evaluate("map-has-key((foo: 1, bar: 1), baz)") - assert_equal "false", evaluate("map-has-key((), foo)") - end - - def test_map_has_key_checks_type - assert_error_message("$map: 12 is not a map for `map-has-key'", "map-has-key(12, foo)") - end - - def test_keywords - # The actual functionality is tested in tests where real arglists are passed. - assert_error_message("$args: 12 is not a variable argument list for `keywords'", "keywords(12)") - assert_error_message( - "$args: (1 2 3) is not a variable argument list for `keywords'", "keywords(1 2 3)") - end - - def test_partial_list_of_pairs_doesnt_work_as_a_map - assert_raises(Sass::SyntaxError) {evaluate("map-get((foo bar, baz bang, bip), 1)")} - assert_raises(Sass::SyntaxError) {evaluate("map-get((foo bar, baz bang, bip bap bop), 1)")} - assert_raises(Sass::SyntaxError) {evaluate("map-get((foo bar), 1)")} - end - - def test_assert_unit - ctx = Sass::Script::Functions::EvaluationContext.new(Sass::Environment.new(nil, {})) - ctx.assert_unit Sass::Script::Value::Number.new(10, ["px"], []), "px" - ctx.assert_unit Sass::Script::Value::Number.new(10, [], []), nil - - begin - ctx.assert_unit Sass::Script::Value::Number.new(10, [], []), "px" - fail - rescue ArgumentError => e - assert_equal "Expected 10 to have a unit of px", e.message - end - - begin - ctx.assert_unit Sass::Script::Value::Number.new(10, ["px"], []), nil - fail - rescue ArgumentError => e - assert_equal "Expected 10px to be unitless", e.message - end - - begin - ctx.assert_unit Sass::Script::Value::Number.new(10, [], []), "px", "arg" - fail - rescue ArgumentError => e - assert_equal "Expected $arg to have a unit of px but got 10", e.message - end - - begin - ctx.assert_unit Sass::Script::Value::Number.new(10, ["px"], []), nil, "arg" - fail - rescue ArgumentError => e - assert_equal "Expected $arg to be unitless but got 10px", e.message - end - end - - def test_call_with_positional_arguments - assert_equal evaluate("lighten(blue, 5%)"), evaluate("call(lighten, blue, 5%)") - end - - def test_call_with_keyword_arguments - assert_equal( - evaluate("lighten($color: blue, $amount: 5%)"), - evaluate("call(lighten, $color: blue, $amount: 5%)")) - end - - def test_call_with_keyword_and_positional_arguments - assert_equal( - evaluate("lighten(blue, $amount: 5%)"), - evaluate("call(lighten, blue, $amount: 5%)")) - end - - def test_call_with_dynamic_name - assert_equal( - evaluate("lighten($color: blue, $amount: 5%)"), - evaluate("call($fn, $color: blue, $amount: 5%)", - env("fn" => Sass::Script::String.new("lighten")))) - end - - def test_call_uses_local_scope - assert_equal <= 0, "Random number was below 0" - assert result.value <= 1, "Random number was above 1" - end - - def test_random_with_limit_one - # Passing 1 as the limit should always return 1, since limit calls return - # integers from 1 to the argument, so when the argument is 1, its a predicatble - # outcome - assert "1", evaluate("random(1)") - end - - def test_random_with_limit_too_low - assert_error_message("$limit 0 must be greater than or equal to 1 for `random'", "random(0)") - end - - def test_random_with_non_integer_limit - assert_error_message("Expected $limit to be an integer but got 1.5 for `random'", "random(1.5)") - end - - # Regression test for #1638. - def test_random_with_float_integer_limit - result = perform("random(1.0)") - assert_kind_of Sass::Script::Number, result - assert result.value >= 0, "Random number was below 0" - assert result.value <= 1, "Random number was above 1" - end - - # This could *possibly* fail, but exceedingly unlikely - def test_random_is_semi_unique - if Sass::Script::Functions.instance_variable_defined?("@random_number_generator") - Sass::Script::Functions.send(:remove_instance_variable, "@random_number_generator") - end - refute_equal evaluate("random()"), evaluate("random()") - end - - def test_deprecated_arg_names - assert_warning < .bar\" to \".foo\" for `selector-append'", - "selector-append('.foo', '> .bar')") - assert_error_message("Can't append \"*.bar\" to \".foo\" for `selector-append'", - "selector-append('.foo', '*.bar')") - assert_error_message("Can't append \"ns|suffix\" to \".foo\" for `selector-append'", - "selector-append('.foo', 'ns|suffix')") - end - - def test_selector_extend - assert_equal(".foo .x, .foo .a .bar, .a .foo .bar", - evaluate("selector-extend('.foo .x', '.x', '.a .bar')")) - assert_equal(".foo .x, .foo .bang, .x.bar, .bar.bang", - evaluate("selector-extend('.foo .x, .x.bar', '.x', '.bang')")) - assert_equal(".y .x, .foo .x, .y .foo, .foo .foo", - evaluate("selector-extend('.y .x', '.x, .y', '.foo')")) - assert_equal(".foo .x, .foo .bar, .foo .bang", - evaluate("selector-extend('.foo .x', '.x', '.bar, .bang')")) - assert_equal(".foo.x, .foo", - evaluate("selector-extend('.foo.x', '.x', '.foo')")) - end - - def test_selector_extend_checks_types - assert_error_message("$selector: 12 is not a valid selector: it must be a string,\n" + - "a list of strings, or a list of lists of strings for `selector-extend'", - "selector-extend(12, '.foo', '.bar')") - assert_error_message("$extendee: 12 is not a valid selector: it must be a string,\n" + - "a list of strings, or a list of lists of strings for `selector-extend'", - "selector-extend('.foo', 12, '.bar')") - assert_error_message("$extender: 12 is not a valid selector: it must be a string,\n" + - "a list of strings, or a list of lists of strings for `selector-extend'", - "selector-extend('.foo', '.bar', 12)") - end - - def test_selector_extend_errors - assert_error_message("Can't extend .bar .baz: can't extend nested selectors for " + - "`selector-extend'", "selector-extend('.foo', '.bar .baz', '.bang')") - assert_error_message("Can't extend >: invalid selector for `selector-extend'", - "selector-extend('.foo', '>', '.bang')") - assert_error_message(".bang > can't extend: invalid selector for `selector-extend'", - "selector-extend('.foo', '.bar', '.bang >')") - end - - def test_selector_replace - assert_equal(".bar", evaluate("selector-replace('.foo', '.foo', '.bar')")) - assert_equal(".foo.baz", evaluate("selector-replace('.foo.bar', '.bar', '.baz')")) - assert_equal(".a .foo.baz", evaluate("selector-replace('.foo.bar', '.bar', '.a .baz')")) - assert_equal(".foo.bar", evaluate("selector-replace('.foo.bar', '.baz.bar', '.qux')")) - assert_equal(".bar.qux", evaluate("selector-replace('.foo.bar.baz', '.foo.baz', '.qux')")) - - assert_equal(":not(.bar)", evaluate("selector-replace(':not(.foo)', '.foo', '.bar')")) - assert_equal(".bar", evaluate("selector-replace(':not(.foo)', ':not(.foo)', '.bar')")) - end - - def test_selector_replace_checks_types - assert_error_message("$selector: 12 is not a valid selector: it must be a string,\n" + - "a list of strings, or a list of lists of strings for `selector-replace'", - "selector-replace(12, '.foo', '.bar')") - assert_error_message("$original: 12 is not a valid selector: it must be a string,\n" + - "a list of strings, or a list of lists of strings for `selector-replace'", - "selector-replace('.foo', 12, '.bar')") - assert_error_message("$replacement: 12 is not a valid selector: it must be a string,\n" + - "a list of strings, or a list of lists of strings for `selector-replace'", - "selector-replace('.foo', '.bar', 12)") - end - - def test_selector_replace_errors - assert_error_message("Can't extend .bar .baz: can't extend nested selectors for " + - "`selector-replace'", "selector-replace('.foo', '.bar .baz', '.bang')") - assert_error_message("Can't extend >: invalid selector for `selector-replace'", - "selector-replace('.foo', '>', '.bang')") - assert_error_message(".bang > can't extend: invalid selector for `selector-replace'", - "selector-replace('.foo', '.bar', '.bang >')") - end - - def test_selector_unify - assert_equal(".foo", evaluate("selector-unify('.foo', '.foo')")) - assert_equal(".foo.bar", evaluate("selector-unify('.foo', '.bar')")) - assert_equal(".foo.bar.baz", evaluate("selector-unify('.foo.bar', '.bar.baz')")) - assert_equal(".a .b .foo.bar, .b .a .foo.bar", evaluate("selector-unify('.a .foo', '.b .bar')")) - assert_equal(".a .foo.bar", evaluate("selector-unify('.a .foo', '.a .bar')")) - assert_equal("", evaluate("selector-unify('p', 'a')")) - assert_equal("", evaluate("selector-unify('.foo >', '.bar')")) - assert_equal("", evaluate("selector-unify('.foo', '.bar >')")) - assert_equal(".foo.baz, .foo.bang, .bar.baz, .bar.bang", - evaluate("selector-unify('.foo, .bar', '.baz, .bang')")) - end - - def test_selector_unify_checks_types - assert_error_message("$selector1: 12 is not a valid selector: it must be a string,\n" + - "a list of strings, or a list of lists of strings for `selector-unify'", - "selector-unify(12, '.foo')") - assert_error_message("$selector2: 12 is not a valid selector: it must be a string,\n" + - "a list of strings, or a list of lists of strings for `selector-unify'", - "selector-unify('.foo', 12)") - end - - def test_simple_selectors - assert_equal('(.foo,)', evaluate("inspect(simple-selectors('.foo'))")) - assert_equal('.foo, .bar', evaluate("inspect(simple-selectors('.foo.bar'))")) - assert_equal('.foo, .bar, :pseudo("flip, flap")', - evaluate("inspect(simple-selectors('.foo.bar:pseudo(\"flip, flap\")'))")) - end - - def test_simple_selectors_checks_types - assert_error_message("$selector: 12 is not a string for `simple-selectors'", - "simple-selectors(12)") - end - - def test_simple_selectors_errors - assert_error_message("$selector: \".foo .bar\" is not a compound selector for `simple-selectors'", - "simple-selectors('.foo .bar')") - assert_error_message("$selector: \".foo,.bar\" is not a compound selector for `simple-selectors'", - "simple-selectors('.foo,.bar')") - assert_error_message("$selector: \".#\" is not a valid selector: Invalid CSS after \".\": " + - "expected class name, was \"#\" for `simple-selectors'", "simple-selectors('.#')") - end - - def test_is_superselector - assert_equal("true", evaluate("is-superselector('.foo', '.foo.bar')")) - assert_equal("false", evaluate("is-superselector('.foo.bar', '.foo')")) - assert_equal("true", evaluate("is-superselector('.foo', '.foo')")) - assert_equal("true", evaluate("is-superselector('.bar', '.foo .bar')")) - assert_equal("false", evaluate("is-superselector('.foo .bar', '.bar')")) - assert_equal("true", evaluate("is-superselector('.foo .bar', '.foo > .bar')")) - assert_equal("false", evaluate("is-superselector('.foo > .bar', '.foo .bar')")) - end - - def test_is_superselector_checks_types - assert_error_message("$super: 12 is not a valid selector: it must be a string,\n" + - "a list of strings, or a list of lists of strings for `is-superselector'", - "is-superselector(12, '.foo')") - assert_error_message("$sub: 12 is not a valid selector: it must be a string,\n" + - "a list of strings, or a list of lists of strings for `is-superselector'", - "is-superselector('.foo', 12)") - end - - ## Regression Tests - - def test_inspect_nested_empty_lists - assert_equal "() ()", evaluate("inspect(() ())") - end - - def test_saturation_bounds - assert_equal "#fbfdff", evaluate("hsl(hue(#fbfdff), saturation(#fbfdff), lightness(#fbfdff))") - end - - private - def env(hash = {}, parent = nil) - env = Sass::Environment.new(parent) - hash.each {|k, v| env.set_var(k, v)} - env - end - - def evaluate(value, environment = env) - result = perform(value, environment) - assert_kind_of Sass::Script::Value::Base, result - return result.to_s - end - - def perform(value, environment = env) - Sass::Script::Parser.parse(value, 0, 0).perform(environment) - end - - def render(sass, options = {}) - options[:syntax] ||= :scss - munge_filename options - options[:importer] ||= MockImporter.new - Sass::Engine.new(sass, options).render - end - - def assert_error_message(message, value) - evaluate(value) - flunk("Error message expected but not raised: #{message}") - rescue Sass::SyntaxError => e - assert_equal(message, e.message) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/importer_test.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/importer_test.rb deleted file mode 100755 index 9d5890c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/importer_test.rb +++ /dev/null @@ -1,421 +0,0 @@ -#!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../test_helper' -require File.dirname(__FILE__) + '/test_helper' -require 'mock_importer' -require 'sass/plugin' - -class ImporterTest < MiniTest::Test - - class FruitImporter < Sass::Importers::Base - def find(name, context = nil) - fruit = parse(name) - return unless fruit - color = case fruit - when "apple" - "red" - when "orange" - "orange" - else - "blue" - end - contents = %Q{ - $#{fruit}-color: #{color} !default; - @mixin #{fruit} { - color: $#{fruit}-color; - } - } - Sass::Engine.new(contents, :filename => name, :syntax => :scss, :importer => self) - end - - def key(name, context) - [self.class.name, name] - end - - def public_url(name, sourcemap_directory = nil) - "http://#{parse(name)}.example.com/style.scss" - end - - private - - def parse(name) - name[%r{fruits/(\w+)(\.s[ac]ss)?}, 1] - end - end - - class NoPublicUrlImporter < FruitImporter - def public_url(name, sourcemap_directory = nil) - nil - end - - private - - def parse(name) - name[%r{ephemeral/(\w+)(\.s[ac]ss)?}, 1] - end - end - - # This class proves that you can override the extension scheme for importers - class ReversedExtImporter < Sass::Importers::Filesystem - def extensions - {"sscs" => :scss, "ssas" => :sass} - end - end - - # This importer maps one import to another import - # based on the mappings passed to importer's constructor. - class IndirectImporter < Sass::Importers::Base - def initialize(mappings, mtimes) - @mappings = mappings - @mtimes = mtimes - end - def find_relative(uri, base, options) - nil - end - def find(name, options) - if @mappings.has_key?(name) - Sass::Engine.new( - %Q[@import "#{@mappings[name]}";], - options.merge( - :filename => name, - :syntax => :scss, - :importer => self - ) - ) - end - end - def mtime(uri, options) - @mtimes.fetch(uri, @mtimes.has_key?(uri) ? Time.now : nil) - end - def key(uri, options) - [self.class.name, uri] - end - def to_s - "IndirectImporter(#{@mappings.keys.join(", ")})" - end - end - - # This importer maps the import to single class - # based on the mappings passed to importer's constructor. - class ClassImporter < Sass::Importers::Base - def initialize(mappings, mtimes) - @mappings = mappings - @mtimes = mtimes - end - def find_relative(uri, base, options) - nil - end - def find(name, options) - if @mappings.has_key?(name) - Sass::Engine.new( - %Q[.#{name}{#{@mappings[name]}}], - options.merge( - :filename => name, - :syntax => :scss, - :importer => self - ) - ) - end - end - def mtime(uri, options) - @mtimes.fetch(uri, @mtimes.has_key?(uri) ? Time.now : nil) - end - def key(uri, options) - [self.class.name, uri] - end - def to_s - "ClassImporter(#{@mappings.keys.join(", ")})" - end - end - - def test_can_resolve_generated_imports - scss_file = %Q{ - $pear-color: green; - @import "fruits/apple"; @import "fruits/orange"; @import "fruits/pear"; - .apple { @include apple; } - .orange { @include orange; } - .pear { @include pear; } - } - css_file = < :compact, :load_paths => [FruitImporter.new], :syntax => :scss} - assert_equal css_file, Sass::Engine.new(scss_file, options).render - end - - def test_extension_overrides - FileUtils.mkdir_p(absolutize("tmp")) - open(absolutize("tmp/foo.ssas"), "w") {|f| f.write(".foo\n reversed: true\n")} - open(absolutize("tmp/bar.sscs"), "w") {|f| f.write(".bar {reversed: true}\n")} - scss_file = %Q{ - @import "foo", "bar"; - @import "foo.ssas", "bar.sscs"; - } - css_file = < :compact, :load_paths => [ReversedExtImporter.new(absolutize("tmp"))], :syntax => :scss} - assert_equal css_file, Sass::Engine.new(scss_file, options).render - ensure - FileUtils.rm_rf(absolutize("tmp")) - end - - def test_staleness_check_across_importers - file_system_importer = Sass::Importers::Filesystem.new(fixture_dir) - # Make sure the first import is older - indirect_importer = IndirectImporter.new({"apple" => "pear"}, {"apple" => Time.now - 1}) - # Make css file is newer so the dependencies are the only way for the css file to be out of date. - FileUtils.touch(fixture_file("test_staleness_check_across_importers.css")) - # Make sure the first import is older - class_importer = ClassImporter.new({"pear" => %Q{color: green;}}, {"pear" => Time.now + 1}) - - options = { - :style => :compact, - :filename => fixture_file("test_staleness_check_across_importers.scss"), - :importer => file_system_importer, - :load_paths => [file_system_importer, indirect_importer, class_importer], - :syntax => :scss - } - - assert_equal File.read(fixture_file("test_staleness_check_across_importers.css")), - Sass::Engine.new(File.read(fixture_file("test_staleness_check_across_importers.scss")), options).render - - checker = Sass::Plugin::StalenessChecker.new(options) - - assert checker.stylesheet_needs_update?( - fixture_file("test_staleness_check_across_importers.css"), - fixture_file("test_staleness_check_across_importers.scss"), - file_system_importer - ) - end - - def test_source_map_with_only_css_uri_supports_public_url_imports - fruit_importer = FruitImporter.new - - options = { - :filename => 'fruits/orange', - :importer => fruit_importer, - :syntax => :scss - } - - engine = Sass::Engine.new(< 'css_uri') -{ -"version": 3, -"mappings": "AAAA,QAAS;EACP,KAAK,EAAE,IAAI", -"sources": ["http://orange.example.com/style.scss"], -"names": [], -"file": "css_uri" -} -JSON - end - - def test_source_map_with_only_css_uri_can_have_no_public_url - ephemeral_importer = NoPublicUrlImporter.new - mock_importer = MockImporter.new - def mock_importer.public_url(name, sourcemap_directory = nil) - "source_uri" - end - - options = { - :filename => filename_for_test, - :sourcemap_filename => sourcemap_filename_for_test, - :importer => mock_importer, - :syntax => :scss, - :load_paths => [ephemeral_importer], - :cache => false - } - - engine = Sass::Engine.new(< 'css_uri') - assert_equal < filename_for_test(:scss), - :sourcemap_filename => sourcemap_filename_for_test, - :importer => file_system_importer, - :syntax => :scss - } - - engine = Sass::Engine.new(< 'css_uri') -{ -"version": 3, -"mappings": "AAAA,IAAK;EAAC,CAAC,EAAE,CAAC", -"sources": ["#{uri}"], -"names": [], -"file": "css_uri" -} -JSON - end - - def test_source_map_with_css_uri_and_css_path_falls_back_to_file_uris - file_system_importer = Sass::Importers::Filesystem.new('.') - options = { - :filename => filename_for_test(:scss), - :sourcemap_filename => sourcemap_filename_for_test, - :importer => file_system_importer, - :syntax => :scss - } - - engine = Sass::Engine.new(< 'css_uri', :css_path => 'css_path') -{ -"version": 3, -"mappings": "AAAA,IAAK;EAAC,CAAC,EAAE,CAAC", -"sources": ["#{uri}"], -"names": [], -"file": "css_uri" -} -JSON - end - - def test_source_map_with_css_uri_and_sourcemap_path_supports_filesystem_importer - file_system_importer = Sass::Importers::Filesystem.new('.') - css_uri = 'css_uri' - sourcemap_path = 'map/style.map' - options = { - :filename => 'sass/style.scss', - :sourcemap_filename => sourcemap_path, - :importer => file_system_importer, - :syntax => :scss - } - - engine = Sass::Engine.new(< css_uri, :sourcemap_path => sourcemap_path) -{ -"version": 3, -"mappings": "AAAA,IAAK;EAAC,CAAC,EAAE,CAAC", -"sources": ["../sass/style.scss"], -"names": [], -"file": "css_uri" -} -JSON - end - - def test_source_map_with_css_path_and_sourcemap_path_supports_file_system_importer - file_system_importer = Sass::Importers::Filesystem.new('.') - sass_path = 'sass/style.scss' - css_path = 'static/style.css' - sourcemap_path = 'map/style.map' - options = { - :filename => sass_path, - :sourcemap_filename => sourcemap_path, - :importer => file_system_importer, - :syntax => :scss - } - - engine = Sass::Engine.new(< css_path, :sourcemap_path => sourcemap_path) -{ -"version": 3, -"mappings": "AAAA,IAAK;EAAC,CAAC,EAAE,CAAC", -"sources": ["../sass/style.scss"], -"names": [], -"file": "../static/style.css" -} -JSON - end - - def test_render_with_sourcemap_requires_filename - file_system_importer = Sass::Importers::Filesystem.new('.') - engine = Sass::Engine.new(".foo {a: b}", :syntax => :scss, :importer => file_system_importer) - assert_raise_message(Sass::SyntaxError, < "color: green;"}, {"pear" => Time.now}) - assert_raise_message(Sass::SyntaxError, < [ [], [:trace, :debug, :info, :warn, :error]], - :debug => [ [:trace], [:debug, :info, :warn, :error]], - :info => [ [:trace, :debug], [:info, :warn, :error]], - :warn => [ [:trace, :debug, :info], [:warn, :error]], - :error => [ [:trace, :debug, :info, :warn], [:error]] - } - logged_levels.each do |level, (should_not_be_logged, should_be_logged)| - logger = Sass::Logger::Base.new(level) - should_not_be_logged.each do |should_level| - assert !logger.logging_level?(should_level) - end - should_be_logged.each do |should_level| - assert logger.logging_level?(should_level) - end - end - end - - def test_logging_can_be_disabled - logger = InterceptedLogger.new - logger.error("message #1") - assert_equal 1, logger.messages.size - logger.reset! - logger.disabled = true - logger.error("message #2") - assert_equal 0, logger.messages.size - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/mock_importer.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/mock_importer.rb deleted file mode 100644 index 312476d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/mock_importer.rb +++ /dev/null @@ -1,49 +0,0 @@ -class MockImporter < Sass::Importers::Base - def initialize(name = "mock") - @name = name - @imports = Hash.new({}) - end - - def find_relative(uri, base, options) - nil - end - - def find(uri, options) - contents = @imports[uri][:contents] - return unless contents - options[:syntax] = @imports[uri][:syntax] - options[:filename] = uri - options[:importer] = self - @imports[uri][:engine] = Sass::Engine.new(contents, options) - end - - def mtime(uri, options) - @imports[uri][:mtime] - end - - def key(uri, options) - ["mock", uri] - end - - def to_s - @name - end - - # Methods for testing - - def add_import(uri, contents, syntax = :scss, mtime = Time.now - 10) - @imports[uri] = { - :contents => contents, - :mtime => mtime, - :syntax => syntax - } - end - - def touch(uri) - @imports[uri][:mtime] = Time.now - end - - def engine(uri) - @imports[uri][:engine] - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/more_results/more1.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/more_results/more1.css deleted file mode 100644 index b0d1182..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/more_results/more1.css +++ /dev/null @@ -1,9 +0,0 @@ -body { font: Arial; background: blue; } - -#page { width: 700px; height: 100; } -#page #header { height: 300px; } -#page #header h1 { font-size: 50px; color: blue; } - -#content.user.show #container.top #column.left { width: 100px; } -#content.user.show #container.top #column.right { width: 600px; } -#content.user.show #container.bottom { background: brown; } diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/more_results/more1_with_line_comments.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/more_results/more1_with_line_comments.css deleted file mode 100644 index f31dbca..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/more_results/more1_with_line_comments.css +++ /dev/null @@ -1,26 +0,0 @@ -/* line 3, ../more_templates/more1.sass */ -body { - font: Arial; - background: blue; } - -/* line 7, ../more_templates/more1.sass */ -#page { - width: 700px; - height: 100; } - /* line 10, ../more_templates/more1.sass */ - #page #header { - height: 300px; } - /* line 12, ../more_templates/more1.sass */ - #page #header h1 { - font-size: 50px; - color: blue; } - -/* line 18, ../more_templates/more1.sass */ -#content.user.show #container.top #column.left { - width: 100px; } -/* line 20, ../more_templates/more1.sass */ -#content.user.show #container.top #column.right { - width: 600px; } -/* line 22, ../more_templates/more1.sass */ -#content.user.show #container.bottom { - background: brown; } diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/more_results/more_import.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/more_results/more_import.css deleted file mode 100644 index b5dae09..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/more_results/more_import.css +++ /dev/null @@ -1,29 +0,0 @@ -@import url(basic.css); -@import url(../results/complex.css); -imported { otherconst: hello; myconst: goodbye; pre-mixin: here; } - -body { font: Arial; background: blue; } - -#page { width: 700px; height: 100; } -#page #header { height: 300px; } -#page #header h1 { font-size: 50px; color: blue; } - -#content.user.show #container.top #column.left { width: 100px; } -#content.user.show #container.top #column.right { width: 600px; } -#content.user.show #container.bottom { background: brown; } - -midrule { inthe: middle; } - -body { font: Arial; background: blue; } - -#page { width: 700px; height: 100; } -#page #header { height: 300px; } -#page #header h1 { font-size: 50px; color: blue; } - -#content.user.show #container.top #column.left { width: 100px; } -#content.user.show #container.top #column.right { width: 600px; } -#content.user.show #container.bottom { background: brown; } - -#foo { background-color: #baf; } - -nonimported { myconst: hello; otherconst: goodbye; post-mixin: here; } diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/more_templates/_more_partial.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/more_templates/_more_partial.sass deleted file mode 100644 index bef627d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/more_templates/_more_partial.sass +++ /dev/null @@ -1,2 +0,0 @@ -#foo - :background-color #baf diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/more_templates/more1.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/more_templates/more1.sass deleted file mode 100644 index 71117bf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/more_templates/more1.sass +++ /dev/null @@ -1,23 +0,0 @@ - - -body - :font Arial - :background blue - -#page - :width 700px - :height 100 - #header - :height 300px - h1 - :font-size 50px - :color blue - -#content.user.show - #container.top - #column.left - :width 100px - #column.right - :width 600px - #container.bottom - :background brown \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/more_templates/more_import.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/more_templates/more_import.sass deleted file mode 100644 index 8bb8430..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/more_templates/more_import.sass +++ /dev/null @@ -1,11 +0,0 @@ -$preconst: hello - -=premixin - pre-mixin: here - -@import importee, basic, basic.css, ../results/complex.css, more_partial - -nonimported - :myconst $preconst - :otherconst $postconst - +postmixin diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/plugin_test.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/plugin_test.rb deleted file mode 100755 index 187a2cf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/plugin_test.rb +++ /dev/null @@ -1,556 +0,0 @@ -#!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../test_helper' -require File.dirname(__FILE__) + '/test_helper' -require 'sass/plugin' -require 'fileutils' - -module Sass::Script::Functions - def filename - filename = options[:filename].gsub(%r{.*((/[^/]+){4})}, '\1') - Sass::Script::Value::String.new(filename) - end - - def whatever - custom = options[:custom] - whatever = custom && custom[:whatever] - Sass::Script::Value::String.new(whatever || "incorrect") - end -end - -class SassPluginTest < MiniTest::Test - @@templates = %w{ - complex script parent_ref import scss_import alt - subdir/subdir subdir/nested_subdir/nested_subdir - options import_content filename_fn - } - @@templates += %w[import_charset import_charset_ibm866] unless Sass::Util.ruby1_8? - @@templates << 'import_charset_1_8' if Sass::Util.ruby1_8? - - @@cache_store = Sass::CacheStores::Memory.new - - def setup - Sass::Util.retry_on_windows {FileUtils.mkdir_p tempfile_loc} - Sass::Util.retry_on_windows {FileUtils.mkdir_p tempfile_loc(nil,"more_")} - set_plugin_opts - check_for_updates! - reset_mtimes - end - - def teardown - clean_up_sassc - Sass::Plugin.reset! - Sass::Util.retry_on_windows {FileUtils.rm_r tempfile_loc} - Sass::Util.retry_on_windows {FileUtils.rm_r tempfile_loc(nil,"more_")} - end - - @@templates.each do |name| - define_method("test_template_renders_correctly (#{name})") do - assert_renders_correctly(name) - end - end - - def test_no_update - File.delete(tempfile_loc('basic')) - assert_needs_update 'basic' - check_for_updates! - assert_stylesheet_updated 'basic' - end - - def test_update_needed_when_modified - touch 'basic' - assert_needs_update 'basic' - check_for_updates! - assert_stylesheet_updated 'basic' - end - - def test_update_needed_when_dependency_modified - touch 'basic' - assert_needs_update 'import' - check_for_updates! - assert_stylesheet_updated 'basic' - assert_stylesheet_updated 'import' - end - - def test_update_needed_when_scss_dependency_modified - touch 'scss_importee' - assert_needs_update 'import' - check_for_updates! - assert_stylesheet_updated 'scss_importee' - assert_stylesheet_updated 'import' - end - - def test_scss_update_needed_when_dependency_modified - touch 'basic' - assert_needs_update 'scss_import' - check_for_updates! - assert_stylesheet_updated 'basic' - assert_stylesheet_updated 'scss_import' - end - - def test_update_needed_when_nested_import_dependency_modified - touch 'basic' - assert_needs_update 'nested_import' - check_for_updates! - assert_stylesheet_updated 'basic' - assert_stylesheet_updated 'scss_import' - end - - def test_no_updates_when_always_check_and_always_update_both_false - Sass::Plugin.options[:always_update] = false - Sass::Plugin.options[:always_check] = false - - touch 'basic' - assert_needs_update 'basic' - check_for_updates! - - # Check it's still stale - assert_needs_update 'basic' - end - - def test_full_exception_handling - File.delete(tempfile_loc('bork1')) - check_for_updates! - File.open(tempfile_loc('bork1')) do |file| - assert_equal(< { - template_loc => tempfile_loc, - template_loc(nil,'more_') => tempfile_loc(nil,'more_') - } - check_for_updates! - ['more1', 'more_import'].each { |name| assert_renders_correctly(name, :prefix => 'more_') } - end - - def test_two_template_directories_with_line_annotations - set_plugin_opts :line_comments => true, - :style => :nested, - :template_location => { - template_loc => tempfile_loc, - template_loc(nil,'more_') => tempfile_loc(nil,'more_') - } - check_for_updates! - assert_renders_correctly('more1_with_line_comments', 'more1', :prefix => 'more_') - end - - def test_doesnt_render_partials - assert !File.exist?(tempfile_loc('_partial')) - end - - def test_template_location_array - assert_equal [[template_loc, tempfile_loc]], Sass::Plugin.template_location_array - end - - def test_add_template_location - Sass::Plugin.add_template_location(template_loc(nil, "more_"), tempfile_loc(nil, "more_")) - assert_equal( - [[template_loc, tempfile_loc], [template_loc(nil, "more_"), tempfile_loc(nil, "more_")]], - Sass::Plugin.template_location_array) - - touch 'more1', 'more_' - touch 'basic' - assert_needs_update "more1", "more_" - assert_needs_update "basic" - check_for_updates! - assert_doesnt_need_update "more1", "more_" - assert_doesnt_need_update "basic" - end - - def test_remove_template_location - Sass::Plugin.add_template_location(template_loc(nil, "more_"), tempfile_loc(nil, "more_")) - Sass::Plugin.remove_template_location(template_loc, tempfile_loc) - assert_equal( - [[template_loc(nil, "more_"), tempfile_loc(nil, "more_")]], - Sass::Plugin.template_location_array) - - touch 'more1', 'more_' - touch 'basic' - assert_needs_update "more1", "more_" - assert_needs_update "basic" - check_for_updates! - assert_doesnt_need_update "more1", "more_" - assert_needs_update "basic" - end - - def test_import_same_name - assert_warning < [template_loc(nil, "more_")] - - touch 'basic', 'more_' - assert_needs_update "import" - check_for_updates! - assert_renders_correctly("import") - ensure - FileUtils.mv(template_loc("basic", "more_"), template_loc("basic")) - end - - def test_cached_relative_import - old_always_update = Sass::Plugin.options[:always_update] - Sass::Plugin.options[:always_update] = true - check_for_updates! - assert_renders_correctly('subdir/subdir') - ensure - Sass::Plugin.options[:always_update] = old_always_update - end - - def test_cached_if - set_plugin_opts :cache_store => Sass::CacheStores::Filesystem.new(tempfile_loc + '/cache') - check_for_updates! - assert_renders_correctly 'if' - check_for_updates! - assert_renders_correctly 'if' - ensure - set_plugin_opts - end - - def test_cached_import_option - set_plugin_opts :custom => {:whatever => "correct"} - check_for_updates! - assert_renders_correctly "cached_import_option" - - @@cache_store.reset! - set_plugin_opts :custom => nil, :always_update => false - check_for_updates! - assert_renders_correctly "cached_import_option" - - set_plugin_opts :custom => {:whatever => "correct"}, :always_update => true - check_for_updates! - assert_renders_correctly "cached_import_option" - ensure - set_plugin_opts :custom => nil - end - - private - - def assert_renders_correctly(*arguments) - options = arguments.last.is_a?(Hash) ? arguments.pop : {} - prefix = options[:prefix] - result_name = arguments.shift - tempfile_name = arguments.shift || result_name - - expected_str = File.read(result_loc(result_name, prefix)) - actual_str = File.read(tempfile_loc(tempfile_name, prefix)) - unless Sass::Util.ruby1_8? - expected_str = expected_str.force_encoding('IBM866') if result_name == 'import_charset_ibm866' - actual_str = actual_str.force_encoding('IBM866') if tempfile_name == 'import_charset_ibm866' - end - expected_lines = expected_str.split("\n") - actual_lines = actual_str.split("\n") - - if actual_lines.first == "/*" && expected_lines.first != "/*" - assert(false, actual_lines[0..Sass::Util.enum_with_index(actual_lines).find {|l, i| l == "*/"}.last].join("\n")) - end - - expected_lines.zip(actual_lines).each_with_index do |pair, line| - message = "template: #{result_name}\nline: #{line + 1}" - assert_equal(pair.first, pair.last, message) - end - if expected_lines.size < actual_lines.size - assert(false, "#{actual_lines.size - expected_lines.size} Trailing lines found in #{tempfile_name}.css: #{actual_lines[expected_lines.size..-1].join('\n')}") - end - end - - def assert_stylesheet_updated(name) - assert_doesnt_need_update name - - # Make sure it isn't an exception - expected_lines = File.read(result_loc(name)).split("\n") - actual_lines = File.read(tempfile_loc(name)).split("\n") - if actual_lines.first == "/*" && expected_lines.first != "/*" - assert(false, actual_lines[0..actual_lines.enum_with_index.find {|l, i| l == "*/"}.last].join("\n")) - end - end - - def assert_callback(name, *expected_args) - run = false - received_args = nil - Sass::Plugin.send("on_#{name}") do |*args| - received_args = args - run ||= expected_args.zip(received_args).all? do |ea, ra| - ea.respond_to?(:call) ? ea.call(ra) : ea == ra - end - end - - if block_given? - Sass::Util.silence_sass_warnings {yield} - else - check_for_updates! - end - - assert run, "Expected #{name} callback to be run with arguments:\n #{expected_args.inspect}\nHowever, it got:\n #{received_args.inspect}" - end - - def assert_no_callback(name, *unexpected_args) - Sass::Plugin.send("on_#{name}") do |*a| - next unless unexpected_args.empty? || a == unexpected_args - - msg = "Expected #{name} callback not to be run" - if !unexpected_args.empty? - msg << " with arguments #{unexpected_args.inspect}" - elsif !a.empty? - msg << ",\n was run with arguments #{a.inspect}" - end - - flunk msg - end - - if block_given? - yield - else - check_for_updates! - end - end - - def assert_callbacks(*args) - return check_for_updates! if args.empty? - assert_callback(*args.pop) {assert_callbacks(*args)} - end - - def assert_no_callbacks(*args) - return check_for_updates! if args.empty? - assert_no_callback(*args.pop) {assert_no_callbacks(*args)} - end - - def check_for_updates! - Sass::Util.silence_sass_warnings do - Sass::Plugin.check_for_updates - end - end - - def assert_needs_update(*args) - assert(Sass::Plugin::StalenessChecker.stylesheet_needs_update?(tempfile_loc(*args), template_loc(*args)), - "Expected #{template_loc(*args)} to need an update.") - end - - def assert_doesnt_need_update(*args) - assert(!Sass::Plugin::StalenessChecker.stylesheet_needs_update?(tempfile_loc(*args), template_loc(*args)), - "Expected #{template_loc(*args)} not to need an update.") - end - - def touch(*args) - FileUtils.touch(template_loc(*args)) - end - - def reset_mtimes - Sass::Plugin::StalenessChecker.dependencies_cache = {} - atime = Time.now - mtime = Time.now - 5 - Dir["{#{template_loc},#{tempfile_loc}}/**/*.{css,sass,scss}"].each do |f| - Sass::Util.retry_on_windows {File.utime(atime, mtime, f)} - end - end - - def template_loc(name = nil, prefix = nil) - if name - scss = absolutize "#{prefix}templates/#{name}.scss" - File.exist?(scss) ? scss : absolutize("#{prefix}templates/#{name}.sass") - else - absolutize "#{prefix}templates" - end - end - - def tempfile_loc(name = nil, prefix = nil) - if name - absolutize "#{prefix}tmp/#{name}.css" - else - absolutize "#{prefix}tmp" - end - end - - def result_loc(name = nil, prefix = nil) - if name - absolutize "#{prefix}results/#{name}.css" - else - absolutize "#{prefix}results" - end - end - - def set_plugin_opts(overrides = {}) - Sass::Plugin.options.merge!( - :template_location => template_loc, - :css_location => tempfile_loc, - :style => :compact, - :always_update => true, - :never_update => false, - :full_exception => true, - :cache_store => @@cache_store, - :sourcemap => :none - ) - Sass::Plugin.options.merge!(overrides) - end -end - -class Sass::Engine - alias_method :old_render, :render - - def render - raise "bork bork bork!" if @template[0] == "{bork now!}" - old_render - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/alt.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/alt.css deleted file mode 100644 index 8484343..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/alt.css +++ /dev/null @@ -1,4 +0,0 @@ -h1 { float: left; width: 274px; height: 75px; margin: 0; background-repeat: no-repeat; background-image: none; } -h1 a:hover, h1 a:visited { color: green; } -h1 b:hover { color: red; background-color: green; } -h1 const { nosp: 3; sp: 3; } diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/basic.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/basic.css deleted file mode 100644 index b0d1182..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/basic.css +++ /dev/null @@ -1,9 +0,0 @@ -body { font: Arial; background: blue; } - -#page { width: 700px; height: 100; } -#page #header { height: 300px; } -#page #header h1 { font-size: 50px; color: blue; } - -#content.user.show #container.top #column.left { width: 100px; } -#content.user.show #container.top #column.right { width: 600px; } -#content.user.show #container.bottom { background: brown; } diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/cached_import_option.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/cached_import_option.css deleted file mode 100644 index 331c0e7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/cached_import_option.css +++ /dev/null @@ -1,3 +0,0 @@ -partial { value: correct; } - -main { value: correct; } diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/compact.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/compact.css deleted file mode 100644 index 6a4dcb4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/compact.css +++ /dev/null @@ -1,5 +0,0 @@ -#main { width: 15em; color: #0000ff; } -#main p { border-style: dotted; /* Nested comment More nested stuff */ border-width: 2px; } -#main .cool { width: 100px; } - -#left { font-size: 2em; font-weight: bold; float: left; } diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/complex.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/complex.css deleted file mode 100644 index d632f1c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/complex.css +++ /dev/null @@ -1,86 +0,0 @@ -body { margin: 0; font: 0.85em "Lucida Grande", "Trebuchet MS", Verdana, sans-serif; color: #fff; background: url(/images/global_bg.gif); } - -#page { width: 900px; margin: 0 auto; background: #440008; border-top-width: 5px; border-top-style: solid; border-top-color: #ff8500; } - -#header { height: 75px; padding: 0; } -#header h1 { float: left; width: 274px; height: 75px; margin: 0; background-image: url(/images/global_logo.gif); /* Crazy nested comment */ background-repeat: no-repeat; text-indent: -9999px; } -#header .status { float: right; padding-top: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-bottom: 0; } -#header .status p { float: left; margin-top: 0; margin-right: 0.5em; margin-bottom: 0; margin-left: 0; } -#header .status ul { float: left; margin: 0; padding: 0; } -#header .status li { list-style-type: none; display: inline; margin: 0 5px; } -#header .status a:link, #header .status a:visited { color: #ff8500; text-decoration: none; } -#header .status a:hover { text-decoration: underline; } -#header .search { float: right; clear: right; margin: 12px 0 0 0; } -#header .search form { margin: 0; } -#header .search input { margin: 0 3px 0 0; padding: 2px; border: none; } - -#menu { clear: both; text-align: right; height: 20px; border-bottom: 5px solid #006b95; background: #00a4e4; } -#menu .contests ul { margin: 0 5px 0 0; padding: 0; } -#menu .contests ul li { list-style-type: none; margin: 0 5px; padding: 5px 5px 0 5px; display: inline; font-size: 1.1em; color: #fff; background: #00a4e4; } -#menu .contests a:link, #menu .contests a:visited { color: #fff; text-decoration: none; font-weight: bold; } -#menu .contests a:hover { text-decoration: underline; } - -#content { clear: both; } -#content .container { clear: both; } -#content .container .column { float: left; } -#content .container .column .right { float: right; } -#content a:link, #content a:visited { color: #93d700; text-decoration: none; } -#content a:hover { text-decoration: underline; } - -#content p, #content div { width: 40em; } -#content p li, #content p dt, #content p dd, #content div li, #content div dt, #content div dd { color: #ddffdd; background-color: #4792bb; } -#content .container.video .column.left { width: 200px; } -#content .container.video .column.left .box { margin-top: 10px; } -#content .container.video .column.left .box p { margin: 0 1em auto 1em; } -#content .container.video .column.left .box.participants img { float: left; margin: 0 1em auto 1em; border: 1px solid #6e000d; border-style: solid; } -#content .container.video .column.left .box.participants h2 { margin: 0 0 10px 0; padding: 0.5em; /* The background image is a gif! */ background: #6e000d url(/images/hdr_participant.gif) 2px 2px no-repeat; /* Okay check this out Multiline comments Wow dude I mean seriously, WOW */ text-indent: -9999px; border-top-width: 5px; border-top-style: solid; border-top-color: #a20013; border-right-width: 1px; border-right-style: dotted; } -#content .container.video .column.middle { width: 500px; } -#content .container.video .column.right { width: 200px; } -#content .container.video .column.right .box { margin-top: 0; } -#content .container.video .column.right .box p { margin: 0 1em auto 1em; } -#content .container.video .column p { margin-top: 0; } - -#content.contests .container.information .column.right .box { margin: 1em 0; } -#content.contests .container.information .column.right .box.videos .thumbnail img { width: 200px; height: 150px; margin-bottom: 5px; } -#content.contests .container.information .column.right .box.videos a:link, #content.contests .container.information .column.right .box.videos a:visited { color: #93d700; text-decoration: none; } -#content.contests .container.information .column.right .box.videos a:hover { text-decoration: underline; } -#content.contests .container.information .column.right .box.votes a { display: block; width: 200px; height: 60px; margin: 15px 0; background: url(/images/btn_votenow.gif) no-repeat; text-indent: -9999px; outline: none; border: none; } -#content.contests .container.information .column.right .box.votes h2 { margin: 52px 0 10px 0; padding: 0.5em; background: #6e000d url(/images/hdr_videostats.gif) 2px 2px no-repeat; text-indent: -9999px; border-top: 5px solid #a20013; } - -#content.contests .container.video .box.videos h2 { margin: 0; padding: 0.5em; background: #6e000d url(/images/hdr_newestclips.gif) 2px 2px no-repeat; text-indent: -9999px; border-top: 5px solid #a20013; } -#content.contests .container.video .box.videos table { width: 100; } -#content.contests .container.video .box.videos table td { padding: 1em; width: 25; vertical-align: top; } -#content.contests .container.video .box.videos table td p { margin: 0 0 5px 0; } -#content.contests .container.video .box.videos table td a:link, #content.contests .container.video .box.videos table td a:visited { color: #93d700; text-decoration: none; } -#content.contests .container.video .box.videos table td a:hover { text-decoration: underline; } -#content.contests .container.video .box.videos .thumbnail { float: left; } -#content.contests .container.video .box.videos .thumbnail img { width: 80px; height: 60px; margin: 0 10px 0 0; border: 1px solid #6e000d; } - -#content .container.comments .column { margin-top: 15px; } -#content .container.comments .column.left { width: 600px; } -#content .container.comments .column.left .box ol { margin: 0; padding: 0; } -#content .container.comments .column.left .box li { list-style-type: none; padding: 10px; margin: 0 0 1em 0; background: #6e000d; border-top: 5px solid #a20013; } -#content .container.comments .column.left .box li div { margin-bottom: 1em; } -#content .container.comments .column.left .box li ul { text-align: right; } -#content .container.comments .column.left .box li ul li { display: inline; border: none; padding: 0; } -#content .container.comments .column.right { width: 290px; padding-left: 10px; } -#content .container.comments .column.right h2 { margin: 0; padding: 0.5em; background: #6e000d url(/images/hdr_addcomment.gif) 2px 2px no-repeat; text-indent: -9999px; border-top: 5px solid #a20013; } -#content .container.comments .column.right .box textarea { width: 290px; height: 100px; border: none; } - -#footer { margin-top: 10px; padding: 1.2em 1.5em; background: #ff8500; } -#footer ul { margin: 0; padding: 0; list-style-type: none; } -#footer ul li { display: inline; margin: 0 0.5em; color: #440008; } -#footer ul.links { float: left; } -#footer ul.links a:link, #footer ul.links a:visited { color: #440008; text-decoration: none; } -#footer ul.links a:hover { text-decoration: underline; } -#footer ul.copyright { float: right; } - -.clear { clear: both; } - -.centered { text-align: center; } - -img { border: none; } - -button.short { width: 60px; height: 22px; padding: 0 0 2px 0; color: #fff; border: none; background: url(/images/btn_short.gif) no-repeat; } - -table { border-collapse: collapse; } diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/compressed.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/compressed.css deleted file mode 100644 index 7c62786..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/compressed.css +++ /dev/null @@ -1 +0,0 @@ -#main{width:15em;color:blue}#main p{border-style:dotted;border-width:2px}#main .cool{width:100px}#left{font-size:2em;font-weight:bold;float:left} diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/expanded.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/expanded.css deleted file mode 100644 index 05f91fa..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/expanded.css +++ /dev/null @@ -1,19 +0,0 @@ -#main { - width: 15em; - color: #0000ff; -} -#main p { - border-style: dotted; - /* Nested comment - * More nested stuff */ - border-width: 2px; -} -#main .cool { - width: 100px; -} - -#left { - font-size: 2em; - font-weight: bold; - float: left; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/filename_fn.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/filename_fn.css deleted file mode 100644 index e55d9a7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/filename_fn.css +++ /dev/null @@ -1,3 +0,0 @@ -filename { imported: /test/sass/templates/_filename_fn_import.scss; } - -filename { local: /test/sass/templates/filename_fn.scss; local-mixin: /test/sass/templates/filename_fn.scss; local-function: /test/sass/templates/filename_fn.scss; imported-mixin: /test/sass/templates/_filename_fn_import.scss; imported-function: /test/sass/templates/_filename_fn_import.scss; } diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/if.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/if.css deleted file mode 100644 index 31e8813..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/if.css +++ /dev/null @@ -1,3 +0,0 @@ -a { branch: if; } - -b { branch: else; } diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/import.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/import.css deleted file mode 100644 index e728382..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/import.css +++ /dev/null @@ -1,31 +0,0 @@ -@import url(basic.css); -@import url(../results/complex.css); -imported { otherconst: hello; myconst: goodbye; pre-mixin: here; } - -body { font: Arial; background: blue; } - -#page { width: 700px; height: 100; } -#page #header { height: 300px; } -#page #header h1 { font-size: 50px; color: blue; } - -#content.user.show #container.top #column.left { width: 100px; } -#content.user.show #container.top #column.right { width: 600px; } -#content.user.show #container.bottom { background: brown; } - -midrule { inthe: middle; } - -scss { imported: yes; } - -body { font: Arial; background: blue; } - -#page { width: 700px; height: 100; } -#page #header { height: 300px; } -#page #header h1 { font-size: 50px; color: blue; } - -#content.user.show #container.top #column.left { width: 100px; } -#content.user.show #container.top #column.right { width: 600px; } -#content.user.show #container.bottom { background: brown; } - -#foo { background-color: #baf; } - -nonimported { myconst: hello; otherconst: goodbye; post-mixin: here; } diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/import_charset.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/import_charset.css deleted file mode 100644 index d7184a3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/import_charset.css +++ /dev/null @@ -1,5 +0,0 @@ -@charset "UTF-8"; -@import url(foo.css); -.foo { a: b; } - -.bar { a: щ; } diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/import_charset_1_8.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/import_charset_1_8.css deleted file mode 100644 index 59cb744..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/import_charset_1_8.css +++ /dev/null @@ -1,5 +0,0 @@ -@charset "IBM866"; -@import url(foo.css); -.foo { a: b; } - -.bar { a: é; } diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/import_charset_ibm866.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/import_charset_ibm866.css deleted file mode 100644 index d7184a3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/import_charset_ibm866.css +++ /dev/null @@ -1,5 +0,0 @@ -@charset "UTF-8"; -@import url(foo.css); -.foo { a: b; } - -.bar { a: щ; } diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/import_content.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/import_content.css deleted file mode 100644 index c67e3f9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/import_content.css +++ /dev/null @@ -1 +0,0 @@ -a { b: c; } \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/line_numbers.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/line_numbers.css deleted file mode 100644 index 3c657f9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/line_numbers.css +++ /dev/null @@ -1,49 +0,0 @@ -/* line 1, ../templates/line_numbers.sass */ -foo { - bar: baz; } - -/* line 6, ../templates/importee.sass */ -imported { - otherconst: 12; - myconst: goodbye; } - /* line 5, ../templates/line_numbers.sass */ - imported squggle { - blat: bang; } - -/* line 3, ../templates/basic.sass */ -body { - font: Arial; - background: blue; } - -/* line 7, ../templates/basic.sass */ -#page { - width: 700px; - height: 100; } - /* line 10, ../templates/basic.sass */ - #page #header { - height: 300px; } - /* line 12, ../templates/basic.sass */ - #page #header h1 { - font-size: 50px; - color: blue; } - -/* line 18, ../templates/basic.sass */ -#content.user.show #container.top #column.left { - width: 100px; } -/* line 20, ../templates/basic.sass */ -#content.user.show #container.top #column.right { - width: 600px; } -/* line 22, ../templates/basic.sass */ -#content.user.show #container.bottom { - background: brown; } - -/* line 13, ../templates/importee.sass */ -midrule { - inthe: middle; } - -/* line 12, ../templates/line_numbers.sass */ -umph { - foo: bar; } - /* line 18, ../templates/importee.sass */ - umph baz { - blat: bang; } diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/mixins.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/mixins.css deleted file mode 100644 index 5d87f98..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/mixins.css +++ /dev/null @@ -1,95 +0,0 @@ -#main { - width: 15em; - color: #0000ff; -} -#main p { - border-top-width: 2px; - border-top-color: #fc0; - border-left-width: 1px; - border-left-color: #000; - -moz-border-radius: 10px; - border-style: dotted; - border-width: 2px; -} -#main .cool { - width: 100px; -} - -#left { - border-top-width: 2px; - border-top-color: #fc0; - border-left-width: 1px; - border-left-color: #000; - -moz-border-radius: 10px; - font-size: 2em; - font-weight: bold; - float: left; -} - -#right { - border-top-width: 2px; - border-top-color: #fc0; - border-left-width: 1px; - border-left-color: #000; - -moz-border-radius: 10px; - color: #f00; - font-size: 20px; - float: right; -} - -.bordered { - border-top-width: 2px; - border-top-color: #fc0; - border-left-width: 1px; - border-left-color: #000; - -moz-border-radius: 10px; -} - -.complex { - color: #f00; - font-size: 20px; - text-decoration: none; -} -.complex:after { - content: "."; - display: block; - height: 0; - clear: both; - visibility: hidden; -} -* html .complex { - height: 1px; - color: #f00; - font-size: 20px; -} - -.more-complex { - color: #f00; - font-size: 20px; - text-decoration: none; - display: inline; - -webkit-nonsense-top-right: 1px; - -webkit-nonsense-bottom-left: 1px; -} -.more-complex:after { - content: "."; - display: block; - height: 0; - clear: both; - visibility: hidden; -} -* html .more-complex { - height: 1px; - color: #f00; - font-size: 20px; -} -.more-complex a:hover { - text-decoration: underline; - color: #f00; - font-size: 20px; - border-top-width: 2px; - border-top-color: #fc0; - border-left-width: 1px; - border-left-color: #000; - -moz-border-radius: 10px; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/multiline.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/multiline.css deleted file mode 100644 index 8fa9535..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/multiline.css +++ /dev/null @@ -1,24 +0,0 @@ -#main, -#header { - height: 50px; } - #main div, - #header div { - width: 100px; } - #main div a span, - #main div em span, - #header div a span, - #header div em span { - color: pink; } - -#one div.nested, -#one span.nested, -#one p.nested, -#two div.nested, -#two span.nested, -#two p.nested, -#three div.nested, -#three span.nested, -#three p.nested { - font-weight: bold; - border-color: red; - display: block; } diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/nested.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/nested.css deleted file mode 100644 index 061e6c1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/nested.css +++ /dev/null @@ -1,22 +0,0 @@ -#main { - width: 15em; - color: #0000ff; } - #main p { - border-style: dotted; - /* Nested comment - * More nested stuff */ - border-width: 2px; } - #main .cool { - width: 100px; } - -#left { - font-size: 2em; - font-weight: bold; - float: left; } - -#right .header { - border-style: solid; } -#right .body { - border-style: dotted; } -#right .footer { - border-style: dashed; } diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/options.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/options.css deleted file mode 100644 index 628f4c3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/options.css +++ /dev/null @@ -1 +0,0 @@ -foo { style: compact; } \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/parent_ref.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/parent_ref.css deleted file mode 100644 index f384cfe..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/parent_ref.css +++ /dev/null @@ -1,13 +0,0 @@ -a { color: #000; } -a:hover { color: #f00; } - -p, div { width: 100em; } -p foo, div foo { width: 10em; } -p:hover, p bar, div:hover, div bar { height: 20em; } - -#cool { border-style: solid; border-width: 2em; } -.ie7 #cool, .ie6 #cool { content: string("Totally not cool."); } -.firefox #cool { content: string("Quite cool."); } - -.wow, .snazzy { font-family: fantasy; } -.wow:hover, .wow:visited, .snazzy:hover, .snazzy:visited { font-weight: bold; } diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/script.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/script.css deleted file mode 100644 index 8f39d29..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/script.css +++ /dev/null @@ -1,16 +0,0 @@ -#main { content: Hello\!; qstr: 'Quo"ted"!'; hstr: Hyph-en\!; width: 30em; background-color: #000; color: #ffa; short-color: #123; named-color: olive; con: "foo" bar 9 hi there "boom"; con2: "noquo" quo; } -#main #sidebar { background-color: #00ff98; num-normal: 10; num-dec: 10.2; num-dec0: 99; num-neg: -10; esc: 10\+12; many: 6; order: 7; complex: #4c9db1hi16; } - -#plus { num-num: 7; num-num-un: 25em; num-num-un2: 23em; num-num-neg: 9.87; num-str: 100px; num-col: #b7b7b7; num-perc: 31%; str-str: "hi there"; str-str2: "hi there"; str-col: "14em solid #123"; str-num: "times: 13"; col-num: #ff7b9d; col-col: #5173ff; } - -#minus { num-num: 900; col-num: #f9f9f4; col-col: #000035; unary-num: -1; unary-const: 10; unary-paren: -11; unary-two: 12; unary-many: 12; unary-crazy: -15; } - -#times { num-num: 7; num-col: #7496b8; col-num: #092345; col-col: #243648; } - -#div { num-num: 3.33333; num-num2: 3.33333; col-num: #092345; col-col: #0b0d0f; comp: 1px; } - -#mod { num-num: 2; col-col: #0f0e05; col-num: #020001; } - -#const { escaped-quote: \$foo \!bar; default: Hello\! !important; } - -#regression { a: 4; } diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/scss_import.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/scss_import.css deleted file mode 100644 index e728382..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/scss_import.css +++ /dev/null @@ -1,31 +0,0 @@ -@import url(basic.css); -@import url(../results/complex.css); -imported { otherconst: hello; myconst: goodbye; pre-mixin: here; } - -body { font: Arial; background: blue; } - -#page { width: 700px; height: 100; } -#page #header { height: 300px; } -#page #header h1 { font-size: 50px; color: blue; } - -#content.user.show #container.top #column.left { width: 100px; } -#content.user.show #container.top #column.right { width: 600px; } -#content.user.show #container.bottom { background: brown; } - -midrule { inthe: middle; } - -scss { imported: yes; } - -body { font: Arial; background: blue; } - -#page { width: 700px; height: 100; } -#page #header { height: 300px; } -#page #header h1 { font-size: 50px; color: blue; } - -#content.user.show #container.top #column.left { width: 100px; } -#content.user.show #container.top #column.right { width: 600px; } -#content.user.show #container.bottom { background: brown; } - -#foo { background-color: #baf; } - -nonimported { myconst: hello; otherconst: goodbye; post-mixin: here; } diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/scss_importee.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/scss_importee.css deleted file mode 100644 index c9fcf41..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/scss_importee.css +++ /dev/null @@ -1,2 +0,0 @@ -scss { - imported: yes; } diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/subdir/nested_subdir/nested_subdir.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/subdir/nested_subdir/nested_subdir.css deleted file mode 100644 index 7aadcfe..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/subdir/nested_subdir/nested_subdir.css +++ /dev/null @@ -1 +0,0 @@ -#pi { width: 314px; } \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/subdir/subdir.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/subdir/subdir.css deleted file mode 100644 index e404728..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/subdir/subdir.css +++ /dev/null @@ -1,3 +0,0 @@ -#nested { relative: true; } - -#subdir { font-size: 20px; font-weight: bold; } \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/units.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/units.css deleted file mode 100644 index affb36c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/units.css +++ /dev/null @@ -1,11 +0,0 @@ -b { - foo: 5px; - bar: 24px; - baz: 66.66667%; - many-units: 32em; - mm: 15mm; - pc: 2pc; - pt: -72pt; - inches: 2in; - more-inches: 3.5in; - mixed: 2.04167in; } diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/warn.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/warn.css deleted file mode 100644 index e69de29..0000000 diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/warn_imported.css b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/results/warn_imported.css deleted file mode 100644 index e69de29..0000000 diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/script_conversion_test.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/script_conversion_test.rb deleted file mode 100755 index a790848..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/script_conversion_test.rb +++ /dev/null @@ -1,353 +0,0 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- -require File.dirname(__FILE__) + '/../test_helper' -require 'sass/engine' - -class SassScriptConversionTest < MiniTest::Test - def test_bool - assert_renders "true" - assert_renders "false" - end - - def test_color - assert_renders "#abcdef" - assert_renders "blue" - assert_renders "rgba(0, 1, 2, 0.2)" - assert_renders "#abc" - assert_renders "#0000ff" - end - - def test_number - assert_renders "10" - assert_renders "10.35" - assert_renders "12px" - assert_renders "12.45px" - - assert_equal "12.34568", render("12.345678901") - end - - def test_string - assert_renders '"foo"' - assert_renders '"bar baz"' - assert_equal '"baz bang"', render("'baz bang'") - end - - def test_string_quotes - assert_equal "'quote\"quote'", render('"quote\\"quote"') - assert_equal '"quote\'quote"', render("'quote\\'quote'") - assert_renders '"quote\'quote\\"quote"' - assert_equal '"quote\'quote\\"quote"', render("'quote\\'quote\"quote'") - end - - def test_string_escapes - assert_renders '"foo\\\\bar"' - end - - def test_funcall - assert_renders "foo(true, blue)" - assert_renders "hsla(20deg, 30%, 50%, 0.3)" - assert_renders "blam()" - - assert_renders "-\xC3\xBFoo(12px)" - assert_renders "-foo(12px)" - end - - def test_funcall_with_keyword_args - assert_renders "foo(arg1, arg2, $karg1: val, $karg2: val2)" - assert_renders "foo($karg1: val, $karg2: val2)" - end - - def test_funcall_with_hyphen_conversion_keyword_arg - assert_renders "foo($a-b_c: val)" - end - - def test_url - assert_renders "url(foo.gif)" - assert_renders "url($var)" - assert_renders "url(\#{$var}/flip.gif)" - end - - def test_variable - assert_renders "$foo-bar" - assert_renders "$flaznicate" - end - - def test_null - assert_renders "null" - end - - def test_space_list - assert_renders "foo bar baz" - assert_renders "foo (bar baz) bip" - assert_renders "foo (bar, baz) bip" - end - - def test_comma_list - assert_renders "foo, bar, baz" - assert_renders "foo, (bar, baz), bip" - assert_renders "foo, bar baz, bip" - end - - def test_space_list_adds_parens_for_clarity - assert_renders "(1 + 1) (2 / 4) (3 * 5)" - end - - def test_comma_list_doesnt_add_parens - assert_renders "1 + 1, 2 / 4, 3 * 5" - end - - def test_empty_list - assert_renders "()" - end - - def test_list_in_args - assert_renders "foo((a, b, c))" - assert_renders "foo($arg: (a, b, c))" - assert_renders "foo(a, b, (a, b, c)...)" - end - - def test_singleton_list - assert_renders "(1,)" - assert_renders "(1 2 3,)" - assert_renders "((1, 2, 3),)" - end - - def test_map - assert_renders "(foo: bar)" - assert_renders "(foo: bar, baz: bip)" - assert_renders "(foo: bar, baz: (bip: bap))" - end - - def test_map_in_list - assert_renders "(foo: bar) baz" - assert_renders "(foo: bar), (baz: bip)" - end - - def test_list_in_map - assert_renders "(foo: bar baz)" - assert_renders "(foo: (bar, baz), bip: bop)" - end - - def test_selector - assert_renders "&" - end - - def self.test_precedence(outer, inner) - op_outer = Sass::Script::Lexer::OPERATORS_REVERSE[outer] - op_inner = Sass::Script::Lexer::OPERATORS_REVERSE[inner] - class_eval < :compressed) - assert_equal "rgba(1,2,3,0.5)", resolve("rgba(1, 2, 3, 0.5)", :style => :compressed) - assert_equal "#123", resolve("#112233", :style => :compressed) - assert_equal "#000", resolve("black", :style => :compressed) - assert_equal "red", resolve("#f00", :style => :compressed) - assert_equal "blue", resolve("blue", :style => :compressed) - assert_equal "navy", resolve("#000080", :style => :compressed) - assert_equal "navy #fff", resolve("#000080 white", :style => :compressed) - assert_equal "This color is #fff", resolve('"This color is #{ white }"', :style => :compressed) - assert_equal "transparent", resolve("rgba(0, 0, 0, 0)", :style => :compressed) - end - - def test_compressed_comma - # assert_equal "foo,bar,baz", resolve("foo, bar, baz", :style => :compressed) - # assert_equal "foo,#baf,baz", resolve("foo, #baf, baz", :style => :compressed) - assert_equal "foo,#baf,red", resolve("foo, #baf, #f00", :style => :compressed) - end - - def test_implicit_strings - assert_equal Sass::Script::Value::String.new("foo"), eval("foo") - assert_equal Sass::Script::Value::String.new("foo/bar"), eval("foo/bar") - end - - def test_basic_interpolation - assert_equal "foo3bar", resolve("foo\#{1 + 2}bar") - assert_equal "foo3 bar", resolve("foo\#{1 + 2} bar") - assert_equal "foo 3bar", resolve("foo \#{1 + 2}bar") - assert_equal "foo 3 bar", resolve("foo \#{1 + 2} bar") - assert_equal "foo 35 bar", resolve("foo \#{1 + 2}\#{2 + 3} bar") - assert_equal "foo 3 5 bar", resolve("foo \#{1 + 2} \#{2 + 3} bar") - assert_equal "3bar", resolve("\#{1 + 2}bar") - assert_equal "foo3", resolve("foo\#{1 + 2}") - assert_equal "3", resolve("\#{1 + 2}") - end - - def test_interpolation_in_function - assert_equal 'flabnabbit(1foo)', resolve('flabnabbit(#{1 + "foo"})') - assert_equal 'flabnabbit(foo 1foobaz)', resolve('flabnabbit(foo #{1 + "foo"}baz)') - assert_equal('flabnabbit(foo 1foo2bar baz)', - resolve('flabnabbit(foo #{1 + "foo"}#{2 + "bar"} baz)')) - end - - def test_interpolation_near_operators - assert_equal '3 , 7', resolve('#{1 + 2} , #{3 + 4}') - assert_equal '3, 7', resolve('#{1 + 2}, #{3 + 4}') - assert_equal '3 ,7', resolve('#{1 + 2} ,#{3 + 4}') - assert_equal '3,7', resolve('#{1 + 2},#{3 + 4}') - assert_equal '3, 7, 11', resolve('#{1 + 2}, #{3 + 4}, #{5 + 6}') - assert_equal '3, 7, 11', resolve('3, #{3 + 4}, 11') - assert_equal '3, 7, 11', resolve('3, 7, #{5 + 6}') - - assert_equal '3 / 7', resolve('3 / #{3 + 4}') - assert_equal '3 /7', resolve('3 /#{3 + 4}') - assert_equal '3/ 7', resolve('3/ #{3 + 4}') - assert_equal '3/7', resolve('3/#{3 + 4}') - - assert_equal '3 * 7', resolve('#{1 + 2} * 7') - assert_equal '3* 7', resolve('#{1 + 2}* 7') - assert_equal '3 *7', resolve('#{1 + 2} *7') - assert_equal '3*7', resolve('#{1 + 2}*7') - - assert_equal '-3', resolve('-#{1 + 2}') - assert_equal '- 3', resolve('- #{1 + 2}') - - assert_equal '5 + 3 * 7', resolve('5 + #{1 + 2} * #{3 + 4}') - assert_equal '5 +3 * 7', resolve('5 +#{1 + 2} * #{3 + 4}') - assert_equal '5+3 * 7', resolve('5+#{1 + 2} * #{3 + 4}') - assert_equal '3 * 7 + 5', resolve('#{1 + 2} * #{3 + 4} + 5') - assert_equal '3 * 7+ 5', resolve('#{1 + 2} * #{3 + 4}+ 5') - assert_equal '3 * 7+5', resolve('#{1 + 2} * #{3 + 4}+5') - - assert_equal '5/3 + 7', resolve('5 / (#{1 + 2} + #{3 + 4})') - assert_equal '5/3 + 7', resolve('5 /(#{1 + 2} + #{3 + 4})') - assert_equal '5/3 + 7', resolve('5 /( #{1 + 2} + #{3 + 4} )') - assert_equal '3 + 7/5', resolve('(#{1 + 2} + #{3 + 4}) / 5') - assert_equal '3 + 7/5', resolve('(#{1 + 2} + #{3 + 4})/ 5') - assert_equal '3 + 7/5', resolve('( #{1 + 2} + #{3 + 4} )/ 5') - - assert_equal '3 + 5', resolve('#{1 + 2} + 2 + 3') - assert_equal '3 +5', resolve('#{1 + 2} +2 + 3') - end - - def test_string_interpolation - assert_equal "foo bar, baz bang", resolve('"foo #{"bar"}, #{"baz"} bang"') - assert_equal "foo bar baz bang", resolve('"foo #{"#{"ba" + "r"} baz"} bang"') - assert_equal 'foo #{bar baz} bang', resolve('"foo \#{#{"ba" + "r"} baz} bang"') - assert_equal 'foo #{baz bang', resolve('"foo #{"\#{" + "baz"} bang"') - assert_equal "foo2bar", resolve('\'foo#{1 + 1}bar\'') - assert_equal "foo2bar", resolve('"foo#{1 + 1}bar"') - assert_equal "foo1bar5baz4bang", resolve('\'foo#{1 + "bar#{2 + 3}baz" + 4}bang\'') - end - - def test_interpolation_in_interpolation - assert_equal 'foo', resolve('#{#{foo}}') - assert_equal 'foo', resolve('"#{#{foo}}"') - assert_equal 'foo', resolve('#{"#{foo}"}') - assert_equal 'foo', resolve('"#{"#{foo}"}"') - end - - def test_interpolation_with_newline - assert_equal "\nbang", resolve('"#{"\a "}bang"') - assert_equal "\n\nbang", resolve('"#{"\a "}\a bang"') - end - - def test_rule_interpolation - assert_equal(< 2) - assert_equal "public_instance_methods()", resolve("public_instance_methods()") - end - - def test_adding_functions_directly_to_functions_module - assert !Functions.callable?('nonexistant') - Functions.class_eval { def nonexistant; end } - assert Functions.callable?('nonexistant') - Functions.send :remove_method, :nonexistant - end - - def test_default_functions - assert_equal "url(12)", resolve("url(12)") - assert_equal 'blam("foo")', resolve('blam("foo")') - end - - def test_function_results_have_options - assert_equal "Options defined!", resolve("assert_options(abs(1))") - assert_equal "Options defined!", resolve("assert_options(round(1.2))") - end - - def test_funcall_requires_no_whitespace_before_lparen - assert_equal "no-repeat 15px", resolve("no-repeat (7px + 8px)") - assert_equal "no-repeat(15px)", resolve("no-repeat(7px + 8px)") - end - - def test_dynamic_url - assert_equal "url(foo-bar)", resolve("url($foo)", {}, env('foo' => Sass::Script::Value::String.new("foo-bar"))) - assert_equal "url(foo-bar baz)", resolve("url($foo $bar)", {}, env('foo' => Sass::Script::Value::String.new("foo-bar"), 'bar' => Sass::Script::Value::String.new("baz"))) - assert_equal "url(foo baz)", resolve("url(foo $bar)", {}, env('bar' => Sass::Script::Value::String.new("baz"))) - assert_equal "url(foo bar)", resolve("url(foo bar)") - end - - def test_url_with_interpolation - assert_equal "url(http://sass-lang.com/images/foo-bar)", resolve("url(http://sass-lang.com/images/\#{foo-bar})") - assert_equal 'url("http://sass-lang.com/images/foo-bar")', resolve("url('http://sass-lang.com/images/\#{foo-bar}')") - assert_equal 'url("http://sass-lang.com/images/foo-bar")', resolve('url("http://sass-lang.com/images/#{foo-bar}")') - assert_unquoted "url(http://sass-lang.com/images/\#{foo-bar})" - end - - def test_hyphenated_variables - assert_equal("a-b", resolve("$a-b", {}, env("a-b" => Sass::Script::Value::String.new("a-b")))) - end - - def test_ruby_equality - assert_equal eval('"foo"'), eval('"foo"') - assert_equal eval('1'), eval('1.0') - assert_equal eval('1 2 3.0'), eval('1 2 3') - assert_equal eval('1, 2, 3.0'), eval('1, 2, 3') - assert_equal eval('(1 2), (3, 4), (5 6)'), eval('(1 2), (3, 4), (5 6)') - refute_equal eval('1, 2, 3'), eval('1 2 3') - refute_equal eval('1'), eval('"1"') - end - - def test_booleans - assert_equal "true", resolve("true") - assert_equal "false", resolve("false") - end - - def test_null - assert_equal "", resolve("null") - end - - def test_boolean_ops - assert_equal "true", resolve("true and true") - assert_equal "true", resolve("false or true") - assert_equal "true", resolve("true or false") - assert_equal "true", resolve("true or true") - assert_equal "false", resolve("false or false") - assert_equal "false", resolve("false and true") - assert_equal "false", resolve("true and false") - assert_equal "false", resolve("false and false") - - assert_equal "true", resolve("not false") - assert_equal "false", resolve("not true") - assert_equal "true", resolve("not not true") - - assert_equal "1", resolve("false or 1") - assert_equal "false", resolve("false and 1") - assert_equal "2", resolve("2 or 3") - assert_equal "3", resolve("2 and 3") - - assert_equal "true", resolve("null or true") - assert_equal "true", resolve("true or null") - assert_equal "", resolve("null or null") - assert_equal "", resolve("null and true") - assert_equal "", resolve("true and null") - assert_equal "", resolve("null and null") - - assert_equal "true", resolve("not null") - - assert_equal "1", resolve("null or 1") - assert_equal "", resolve("null and 1") - end - - def test_arithmetic_ops - assert_equal "2", resolve("1 + 1") - assert_equal "0", resolve("1 - 1") - assert_equal "8", resolve("2 * 4") - assert_equal "0.5", resolve("(2 / 4)") - assert_equal "2", resolve("(4 / 2)") - - assert_equal "-1", resolve("-1") - end - - def test_string_ops - assert_equal '"foo" "bar"', resolve('"foo" "bar"') - assert_equal "true 1", resolve('true 1') - assert_equal '"foo", "bar"', resolve("'foo' , 'bar'") - assert_equal "true, 1", resolve('true , 1') - assert_equal "foobar", resolve('"foo" + "bar"') - assert_equal "\nfoo\nxyz", resolve('"\a foo" + "\axyz"') - assert_equal "true1", resolve('true + 1') - assert_equal '"foo"-"bar"', resolve("'foo' - 'bar'") - assert_equal "true-1", resolve('true - 1') - assert_equal '"foo"/"bar"', resolve('"foo" / "bar"') - assert_equal "true/1", resolve('true / 1') - - assert_equal '-"bar"', resolve("- 'bar'") - assert_equal "-true", resolve('- true') - assert_equal '/"bar"', resolve('/ "bar"') - assert_equal "/true", resolve('/ true') - end - - def test_relational_ops - assert_equal "false", resolve("1 > 2") - assert_equal "false", resolve("2 > 2") - assert_equal "true", resolve("3 > 2") - assert_equal "false", resolve("1 >= 2") - assert_equal "true", resolve("2 >= 2") - assert_equal "true", resolve("3 >= 2") - assert_equal "true", resolve("1 < 2") - assert_equal "false", resolve("2 < 2") - assert_equal "false", resolve("3 < 2") - assert_equal "true", resolve("1 <= 2") - assert_equal "true", resolve("2 <= 2") - assert_equal "false", resolve("3 <= 2") - end - - def test_null_ops - assert_raise_message(Sass::SyntaxError, - 'Invalid null operation: "null plus 1".') {eval("null + 1")} - assert_raise_message(Sass::SyntaxError, - 'Invalid null operation: "null minus 1".') {eval("null - 1")} - assert_raise_message(Sass::SyntaxError, - 'Invalid null operation: "null times 1".') {eval("null * 1")} - assert_raise_message(Sass::SyntaxError, - 'Invalid null operation: "null div 1".') {eval("null / 1")} - assert_raise_message(Sass::SyntaxError, - 'Invalid null operation: "null mod 1".') {eval("null % 1")} - assert_raise_message(Sass::SyntaxError, - 'Invalid null operation: "1 plus null".') {eval("1 + null")} - assert_raise_message(Sass::SyntaxError, - 'Invalid null operation: "1 minus null".') {eval("1 - null")} - assert_raise_message(Sass::SyntaxError, - 'Invalid null operation: "1 times null".') {eval("1 * null")} - assert_raise_message(Sass::SyntaxError, - 'Invalid null operation: "1 div null".') {eval("1 / null")} - assert_raise_message(Sass::SyntaxError, - 'Invalid null operation: "1 mod null".') {eval("1 % null")} - assert_raise_message(Sass::SyntaxError, - 'Invalid null operation: "1 gt null".') {eval("1 > null")} - assert_raise_message(Sass::SyntaxError, - 'Invalid null operation: "null lt 1".') {eval("null < 1")} - assert_raise_message(Sass::SyntaxError, - 'Invalid null operation: "null plus null".') {eval("null + null")} - assert_raise_message(Sass::SyntaxError, - 'Invalid null operation: ""foo" plus null".') {eval("foo + null")} - end - - def test_equals - assert_equal("true", resolve('"foo" == $foo', {}, - env("foo" => Sass::Script::Value::String.new("foo")))) - assert_equal "true", resolve("1 == 1.0") - assert_equal "true", resolve("false != true") - assert_equal "false", resolve("1em == 1px") - assert_equal "false", resolve("12 != 12") - assert_equal "true", resolve("(foo bar baz) == (foo bar baz)") - assert_equal "true", resolve("(foo, bar, baz) == (foo, bar, baz)") - assert_equal "true", resolve('((1 2), (3, 4), (5 6)) == ((1 2), (3, 4), (5 6))') - assert_equal "true", resolve('((1 2), (3 4)) == (1 2, 3 4)') - assert_equal "false", resolve('((1 2) 3) == (1 2 3)') - assert_equal "false", resolve('(1 (2 3)) == (1 2 3)') - assert_equal "false", resolve('((1, 2) (3, 4)) == (1, 2 3, 4)') - assert_equal "false", resolve('(1 2 3) == (1, 2, 3)') - - assert_equal "true", resolve('null == null') - assert_equal "false", resolve('"null" == null') - assert_equal "false", resolve('0 == null') - assert_equal "false", resolve('() == null') - - assert_equal "false", resolve('null != null') - assert_equal "true", resolve('"null" != null') - assert_equal "true", resolve('0 != null') - assert_equal "true", resolve('() != null') - end - - def test_mod - assert_equal "5", resolve("29 % 12") - assert_equal "5px", resolve("29px % 12") - assert_equal "5px", resolve("29px % 12px") - end - - def test_operation_precedence - assert_equal "false true", resolve("true and false false or true") - assert_equal "true", resolve("false and true or true and true") - assert_equal "true", resolve("1 == 2 or 3 == 3") - assert_equal "true", resolve("1 < 2 == 3 >= 3") - assert_equal "true", resolve("1 + 3 > 4 - 2") - assert_equal "11", resolve("1 + 2 * 3 + 4") - end - - def test_functions - assert_equal "#80ff80", resolve("hsl(120, 100%, 75%)") - assert_equal "#81ff81", resolve("hsl(120, 100%, 75%) + #010001") - end - - def test_operator_unit_conversion - assert_equal "1.1cm", resolve("1cm + 1mm") - assert_equal "2in", resolve("1in + 96px") - assert_equal "true", resolve("2mm < 1cm") - assert_equal "true", resolve("10mm == 1cm") - assert_equal "true", resolve("1.1cm == 11mm") - - assert_warning(< eval("1px"))) - assert_equal "0.5", resolve("1px/$var", {}, env("var" => eval("2px"))) - assert_equal "0.5", resolve("$var", {}, env("var" => eval("1px/2px"))) - end - - def test_non_ident_colors_with_wrong_number_of_digits - assert_raise_message(Sass::SyntaxError, - 'Invalid CSS after "": expected expression (e.g. 1px, bold), was "#1"') {eval("#1")} - assert_raise_message(Sass::SyntaxError, - 'Invalid CSS after "": expected expression (e.g. 1px, bold), was "#12"') {eval("#12")} - assert_raise_message(Sass::SyntaxError, - 'Invalid CSS after "": expected expression (e.g. 1px, bold), was "#1234"') {eval("#1234")} - assert_raise_message(Sass::SyntaxError, - 'Invalid CSS after "": expected expression (e.g. 1px, bold), was "#12345"') {eval("#12345")} - assert_raise_message(Sass::SyntaxError, 'Invalid CSS after "": expected expression (e.g. ' \ - '1px, bold), was "#1234567"') {eval("#1234567")} - end - - def test_case_insensitive_color_names - assert_equal "BLUE", resolve("BLUE") - assert_equal "rEd", resolve("rEd") - assert_equal "#7f4000", resolve("mix(GrEeN, ReD)") - end - - def test_empty_list - assert_equal "1 2 3", resolve("1 2 () 3") - assert_equal "1 2 3", resolve("1 2 3 ()") - assert_equal "1 2 3", resolve("() 1 2 3") - assert_raise_message(Sass::SyntaxError, "() isn't a valid CSS value.") {resolve("()")} - assert_raise_message(Sass::SyntaxError, "() isn't a valid CSS value.") {resolve("nth(append((), ()), 1)")} - end - - def test_list_with_nulls - assert_equal "1, 2, 3", resolve("1, 2, null, 3") - assert_equal "1 2 3", resolve("1 2 null 3") - assert_equal "1, 2, 3", resolve("1, 2, 3, null") - assert_equal "1 2 3", resolve("1 2 3 null") - assert_equal "1, 2, 3", resolve("null, 1, 2, 3") - assert_equal "1 2 3", resolve("null 1 2 3") - end - - def test_map_can_have_trailing_comma - assert_equal("(foo: 1, bar: 2)", eval("(foo: 1, bar: 2,)").to_sass) - end - - def test_list_can_have_trailing_comma - assert_equal("1, 2, 3", resolve("1, 2, 3,")) - end - - def test_trailing_comma_defines_singleton_list - assert_equal("1 2 3", resolve("nth((1 2 3,), 1)")) - end - - def test_map_cannot_have_duplicate_keys - assert_raise_message(Sass::SyntaxError, 'Duplicate key "foo" in map (foo: bar, foo: baz).') do - eval("(foo: bar, foo: baz)") - end - assert_raise_message(Sass::SyntaxError, 'Duplicate key "foo" in map (foo: bar, fo + o: baz).') do - eval("(foo: bar, fo + o: baz)") - end - assert_raise_message(Sass::SyntaxError, 'Duplicate key "foo" in map (foo: bar, "foo": baz).') do - eval("(foo: bar, 'foo': baz)") - end - assert_raise_message(Sass::SyntaxError, 'Duplicate key 2px in map (2px: bar, 1px + 1px: baz).') do - eval("(2px: bar, 1px + 1px: baz)") - end - assert_raise_message(Sass::SyntaxError, 'Duplicate key #0000ff in map (blue: bar, #00f: baz).') do - eval("(blue: bar, #00f: baz)") - end - end - - def test_non_duplicate_map_keys - # These shouldn't throw errors - eval("(foo: foo, bar: bar)") - eval("(2px: foo, 2: bar)") - eval("(2px: foo, 2em: bar)") - eval("('2px': foo, 2px: bar)") - end - - def test_map_syntax_errors - assert_raise_message(Sass::SyntaxError, 'Invalid CSS after "(foo:": expected expression (e.g. 1px, bold), was ")"') do - eval("(foo:)") - end - assert_raise_message(Sass::SyntaxError, 'Invalid CSS after "(": expected ")", was ":bar)"') do - eval("(:bar)") - end - assert_raise_message(Sass::SyntaxError, 'Invalid CSS after "(foo, bar": expected ")", was ": baz)"') do - eval("(foo, bar: baz)") - end - assert_raise_message(Sass::SyntaxError, 'Invalid CSS after "(foo: bar, baz": expected ":", was ")"') do - eval("(foo: bar, baz)") - end - end - - def test_deep_argument_error_not_unwrapped - # JRuby (as of 1.6.7.2) offers no way of distinguishing between - # argument errors caused by programming errors in a function and - # argument errors explicitly thrown within that function. - return if RUBY_PLATFORM =~ /java/ - - # Don't validate the message; it's different on Rubinius. - assert_raises(ArgumentError) {resolve("arg-error()")} - end - - def test_shallow_argument_error_unwrapped - assert_raise_message(Sass::SyntaxError, "wrong number of arguments (1 for 0) for `arg-error'") {resolve("arg-error(1)")} - end - - def test_boolean_ops_short_circuit - assert_equal "false", resolve("$ie and $ie <= 7", {}, env('ie' => Sass::Script::Value::Bool.new(false))) - assert_equal "true", resolve("$ie or $undef", {}, env('ie' => Sass::Script::Value::Bool.new(true))) - end - - def test_selector - env = Sass::Environment.new - assert_equal "true", resolve("& == null", {}, env) - - env.selector = selector('.foo.bar .baz.bang, .bip.bop') - assert_equal ".foo.bar .baz.bang, .bip.bop", resolve("&", {}, env) - assert_equal ".foo.bar .baz.bang", resolve("nth(&, 1)", {}, env) - assert_equal ".bip.bop", resolve("nth(&, 2)", {}, env) - assert_equal ".foo.bar", resolve("nth(nth(&, 1), 1)", {}, env) - assert_equal ".baz.bang", resolve("nth(nth(&, 1), 2)", {}, env) - assert_equal ".bip.bop", resolve("nth(nth(&, 2), 1)", {}, env) - assert_equal "string", resolve("type-of(nth(nth(&, 1), 1))", {}, env) - - env.selector = selector('.foo > .bar') - assert_equal ".foo > .bar", resolve("&", {}, env) - assert_equal ".foo > .bar", resolve("nth(&, 1)", {}, env) - assert_equal ".foo", resolve("nth(nth(&, 1), 1)", {}, env) - assert_equal ">", resolve("nth(nth(&, 1), 2)", {}, env) - assert_equal ".bar", resolve("nth(nth(&, 1), 3)", {}, env) - end - - def test_selector_with_newlines - env = Sass::Environment.new - env.selector = selector(".foo.bar\n.baz.bang,\n\n.bip.bop") - assert_equal ".foo.bar .baz.bang, .bip.bop", resolve("&", {}, env) - assert_equal ".foo.bar .baz.bang", resolve("nth(&, 1)", {}, env) - assert_equal ".bip.bop", resolve("nth(&, 2)", {}, env) - assert_equal ".foo.bar", resolve("nth(nth(&, 1), 1)", {}, env) - assert_equal ".baz.bang", resolve("nth(nth(&, 1), 2)", {}, env) - assert_equal ".bip.bop", resolve("nth(nth(&, 2), 1)", {}, env) - assert_equal "string", resolve("type-of(nth(nth(&, 1), 1))", {}, env) - end - - def test_setting_global_variable_globally - assert_no_warning {assert_equal(< :scss))} -.foo { - a: 1; } - -.bar { - b: 2; } -CSS -$var: 1; - -.foo { - a: $var; -} - -$var: 2; - -.bar { - b: $var; -} -SCSS - end - - def test_setting_global_variable_locally - assert_no_warning {assert_equal(< :scss))} -.bar { - a: x; - b: y; - c: z; } -CSS -$var1: 1; -$var3: 3; - -.foo { - $var1: x !global; - $var2: y !global; - @each $var3 in _ { - $var3: z !global; - } -} - -.bar { - a: $var1; - b: $var2; - c: $var3; -} -SCSS - end - - def test_setting_global_variable_locally_with_default - assert_equal(< :scss)) -.bar { - a: 1; - b: y; - c: z; } -CSS -$var1: 1; - -.foo { - $var1: x !global !default; - $var2: y !global !default; - @each $var3 in _ { - $var3: z !global !default; - } -} - -.bar { - a: $var1; - b: $var2; - c: $var3; -} -SCSS - end - - def test_setting_local_variable - assert_equal(< :scss)) -.a { - value: inside; } - -.b { - value: outside; } -CSS -$var: outside; - -.a { - $var: inside; - value: $var; -} - -.b { - value: $var; -} -SCSS - end - - def test_setting_local_variable_from_inner_scope - assert_equal(< :scss)) -.a .b { - value: inside; } -.a .c { - value: inside; } -CSS -.a { - $var: outside; - - .b { - $var: inside; - value: $var; - } - - .c { - value: $var; - } -} -SCSS - end - - def test_if_can_assign_to_global_variables - assert_equal < :scss) -.a { - b: 2; } -CSS -$var: 1; -@if true {$var: 2} -.a {b: $var} -SCSS - end - - def test_else_can_assign_to_global_variables - assert_equal < :scss) -.a { - b: 2; } -CSS -$var: 1; -@if false {} -@else {$var: 2} -.a {b: $var} -SCSS - end - - def test_for_can_assign_to_global_variables - assert_equal < :scss) -.a { - b: 2; } -CSS -$var: 1; -@for $i from 1 to 2 {$var: 2} -.a {b: $var} -SCSS - end - - def test_each_can_assign_to_global_variables - assert_equal < :scss) -.a { - b: 2; } -CSS -$var: 1; -@each $a in 1 {$var: 2} -.a {b: $var} -SCSS - end - - def test_while_can_assign_to_global_variables - assert_equal < :scss) -.a { - b: 2; } -CSS -$var: 1; -@while $var != 2 {$var: 2} -.a {b: $var} -SCSS - end - - def test_if_doesnt_leak_local_variables - assert_raise_message(Sass::SyntaxError, 'Undefined variable: "$var".') do - render(< :scss) -@if true {$var: 1} -.a {b: $var} -SCSS - end - end - - def test_else_doesnt_leak_local_variables - assert_raise_message(Sass::SyntaxError, 'Undefined variable: "$var".') do - render(< :scss) -@if false {} -@else {$var: 1} -.a {b: $var} -SCSS - end - end - - def test_for_doesnt_leak_local_variables - assert_raise_message(Sass::SyntaxError, 'Undefined variable: "$var".') do - render(< :scss) -@for $i from 1 to 2 {$var: 1} -.a {b: $var} -SCSS - end - end - - def test_each_doesnt_leak_local_variables - assert_raise_message(Sass::SyntaxError, 'Undefined variable: "$var".') do - render(< :scss) -@each $a in 1 {$var: 1} -.a {b: $var} -SCSS - end - end - - def test_while_doesnt_leak_local_variables - assert_raise_message(Sass::SyntaxError, 'Undefined variable: "$var".') do - render(< :scss) -$iter: true; -@while $iter { - $var: 1; - $iter: false; -} -.a {b: $var} -SCSS - end - end - - def test_color_format_is_preserved_by_default - assert_equal "blue", resolve("blue") - assert_equal "bLuE", resolve("bLuE") - assert_equal "#00f", resolve("#00f") - assert_equal "blue #00F", resolve("blue #00F") - assert_equal "blue", resolve("nth(blue #00F, 1)") - assert_equal "#00F", resolve("nth(blue #00F, 2)") - end - - def test_color_format_isnt_always_preserved_in_compressed_style - assert_equal "red", resolve("red", :style => :compressed) - assert_equal "red", resolve("#f00", :style => :compressed) - assert_equal "red red", resolve("red #f00", :style => :compressed) - assert_equal "red", resolve("nth(red #f00, 2)", :style => :compressed) - end - - def test_color_format_is_sometimes_preserved_in_compressed_style - assert_equal "ReD", resolve("ReD", :style => :compressed) - assert_equal "blue", resolve("blue", :style => :compressed) - assert_equal "#00f", resolve("#00f", :style => :compressed) - end - - def test_color_format_isnt_preserved_when_modified - assert_equal "magenta", resolve("#f00 + #00f") - end - - def test_ids - assert_equal "#foo", resolve("#foo") - assert_equal "#abcd", resolve("#abcd") - assert_equal "#abc-def", resolve("#abc-def") - assert_equal "#abc_def", resolve("#abc_def") - assert_equal "#uvw-xyz", resolve("#uvw-xyz") - assert_equal "#uvw_xyz", resolve("#uvw_xyz") - assert_equal "#uvwxyz", resolve("#uvw + xyz") - end - - def test_scientific_notation - assert_equal "2000", resolve("2e3") - assert_equal "2000", resolve("2E3") - assert_equal "2000", resolve("2e+3") - assert_equal "2000em", resolve("2e3em") - assert_equal "25000000000", resolve("2.5e10") - assert_equal "0.1234", resolve("1234e-4") - assert_equal "12.34", resolve("1.234e1") - end - - def test_identifier_units - assert_equal "5-foo", resolve("2-foo + 3-foo") - assert_equal "5-foo-", resolve("2-foo- + 3-foo-") - assert_equal "5-\\u2603", resolve("2-\\u2603 + 3-\\u2603") - end - - def test_backslash_newline_in_string - assert_equal 'foobar', resolve("\"foo\\\nbar\"") - assert_equal 'foobar', resolve("'foo\\\nbar'") - end - - def test_unclosed_special_fun - assert_raise_message(Sass::SyntaxError, 'Invalid CSS after "calc(foo()": expected ")", was ""') do - resolve("calc(foo()") - end - assert_raise_message(Sass::SyntaxError, 'Invalid CSS after "calc(#{\')\'}": expected ")", was ""') do - resolve("calc(\#{')'}") - end - assert_raise_message(Sass::SyntaxError, 'Invalid CSS after "calc(#{foo": expected "}", was ""') do - resolve("calc(\#{foo") - end - end - - def test_special_fun_with_interpolation - assert_equal "calc())", resolve("calc(\#{')'})") - assert_equal "calc(# {foo})", resolve("calc(# {foo})") - end - - # Regression Tests - - def test_interpolation_after_string - assert_equal '"foobar" 2', resolve('"foobar" #{2}') - assert_equal "calc(1 + 2) 3", resolve('calc(1 + 2) #{3}') - end - - def test_repeatedly_modified_color - assert_equal(< -baz {bar: baz} -SCSS - end - - if Sass::Util.ruby1_8? - def test_unicode - assert_parses < s1, > s2)') - assert_selector_parses('E.warning') - assert_selector_parses('E#myid') - assert_selector_parses('E[foo]') - assert_selector_parses('E[foo="bar"]') - assert_selector_parses('E[foo="bar" i]') - assert_selector_parses('E[foo~="bar"]') - assert_selector_parses('E[foo^="bar"]') - assert_selector_parses('E[foo$="bar"]') - assert_selector_parses('E[foo*="bar"]') - assert_selector_parses('E[foo|="en"]') - assert_selector_parses('E:dir(ltr)') - assert_selector_parses('E:lang(fr)') - assert_selector_parses('E:lang(zh, *-hant)') - assert_selector_parses('E:any-link') - assert_selector_parses('E:link') - assert_selector_parses('E:visited') - assert_selector_parses('E:local-link') - assert_selector_parses('E:local-link(0)') - assert_selector_parses('E:target') - assert_selector_parses('E:scope') - assert_selector_parses('E:current') - assert_selector_parses('E:current(s)') - assert_selector_parses('E:past') - assert_selector_parses('E:future') - assert_selector_parses('E:active') - assert_selector_parses('E:hover') - assert_selector_parses('E:focus') - assert_selector_parses('E:enabled') - assert_selector_parses('E:disabled') - assert_selector_parses('E:checked') - assert_selector_parses('E:indeterminate') - assert_selector_parses('E:default') - assert_selector_parses('E:in-range') - assert_selector_parses('E:out-of-range') - assert_selector_parses('E:required') - assert_selector_parses('E:optional') - assert_selector_parses('E:read-only') - assert_selector_parses('E:read-write') - assert_selector_parses('E:root') - assert_selector_parses('E:empty') - assert_selector_parses('E:first-child') - assert_selector_parses('E:nth-child(n)') - assert_selector_parses('E:last-child') - assert_selector_parses('E:nth-last-child(n)') - assert_selector_parses('E:only-child') - assert_selector_parses('E:first-of-type') - assert_selector_parses('E:nth-of-type(n)') - assert_selector_parses('E:last-of-type') - assert_selector_parses('E:nth-last-of-type(n)') - assert_selector_parses('E:only-of-type') - assert_selector_parses('E:nth-child(n of selector)') - assert_selector_parses('E:nth-last-child(n of selector)') - assert_selector_parses('E:nth-child(n)') - assert_selector_parses('E:nth-last-child(n)') - assert_selector_parses('E F') - assert_selector_parses('E > F') - assert_selector_parses('E + F') - assert_selector_parses('E ~ F') - assert_selector_parses('E /foo/ F') - silence_warnings {assert_selector_parses('E! > F')} - - assert_selector_parses('E /ns|foo/ F') - - # From http://dev.w3.org/csswg/css-scoping-1/ - assert_selector_parses('E:host(s)') - assert_selector_parses('E:host-context(s)') - end - - # Taken from http://dev.w3.org/csswg/selectors4/#overview, but without element - # names. - def test_more_summarized_selectors - assert_selector_parses(':not(s)') - assert_selector_parses(':not(s1, s2)') - assert_selector_parses(':matches(s1, s2)') - assert_selector_parses(':has(s1, s2)') - assert_selector_parses(':has(> s1, > s2)') - assert_selector_parses('.warning') - assert_selector_parses('#myid') - assert_selector_parses('[foo]') - assert_selector_parses('[foo="bar"]') - assert_selector_parses('[foo="bar" i]') - assert_selector_parses('[foo~="bar"]') - assert_selector_parses('[foo^="bar"]') - assert_selector_parses('[foo$="bar"]') - assert_selector_parses('[foo*="bar"]') - assert_selector_parses('[foo|="en"]') - assert_selector_parses(':dir(ltr)') - assert_selector_parses(':lang(fr)') - assert_selector_parses(':lang(zh, *-hant)') - assert_selector_parses(':any-link') - assert_selector_parses(':link') - assert_selector_parses(':visited') - assert_selector_parses(':local-link') - assert_selector_parses(':local-link(0)') - assert_selector_parses(':target') - assert_selector_parses(':scope') - assert_selector_parses(':current') - assert_selector_parses(':current(s)') - assert_selector_parses(':past') - assert_selector_parses(':future') - assert_selector_parses(':active') - assert_selector_parses(':hover') - assert_selector_parses(':focus') - assert_selector_parses(':enabled') - assert_selector_parses(':disabled') - assert_selector_parses(':checked') - assert_selector_parses(':indeterminate') - assert_selector_parses(':default') - assert_selector_parses(':in-range') - assert_selector_parses(':out-of-range') - assert_selector_parses(':required') - assert_selector_parses(':optional') - assert_selector_parses(':read-only') - assert_selector_parses(':read-write') - assert_selector_parses(':root') - assert_selector_parses(':empty') - assert_selector_parses(':first-child') - assert_selector_parses(':nth-child(n)') - assert_selector_parses(':last-child') - assert_selector_parses(':nth-last-child(n)') - assert_selector_parses(':only-child') - assert_selector_parses(':first-of-type') - assert_selector_parses(':nth-of-type(n)') - assert_selector_parses(':last-of-type') - assert_selector_parses(':nth-last-of-type(n)') - assert_selector_parses(':only-of-type') - assert_selector_parses(':nth-child(n of selector)') - assert_selector_parses(':nth-last-child(n of selector)') - assert_selector_parses(':nth-child(n)') - assert_selector_parses(':nth-last-child(n)') - - # From http://dev.w3.org/csswg/css-scoping-1/ - assert_selector_parses(':host(s)') - assert_selector_parses(':host-context(s)') - end - - def test_attribute_selectors_with_identifiers - assert_selector_parses('[foo~=bar]') - assert_selector_parses('[foo^=bar]') - assert_selector_parses('[foo$=bar]') - assert_selector_parses('[foo*=bar]') - assert_selector_parses('[foo|=en]') - end - - def test_nth_selectors - assert_selector_parses(':nth-child(-n)') - assert_selector_parses(':nth-child(+n)') - - assert_selector_parses(':nth-child(even)') - assert_selector_parses(':nth-child(odd)') - - assert_selector_parses(':nth-child(50)') - assert_selector_parses(':nth-child(-50)') - assert_selector_parses(':nth-child(+50)') - - assert_selector_parses(':nth-child(2n+3)') - assert_selector_parses(':nth-child(2n-3)') - assert_selector_parses(':nth-child(+2n-3)') - assert_selector_parses(':nth-child(-2n+3)') - assert_selector_parses(':nth-child(-2n+ 3)') - - assert_equal(<)') - assert_selector_can_contain_selectors(':current()') - assert_selector_can_contain_selectors(':nth-child(n of )') - assert_selector_can_contain_selectors(':nth-last-child(n of )') - assert_selector_can_contain_selectors(':-moz-any()') - assert_selector_can_contain_selectors(':has()') - assert_selector_can_contain_selectors(':has(+ )') - assert_selector_can_contain_selectors(':host()') - assert_selector_can_contain_selectors(':host-context()') - end - - def assert_selector_can_contain_selectors(sel) - try = lambda {|subsel| assert_selector_parses(sel.gsub('', subsel))} - - try['foo|bar'] - try['*|bar'] - - try['foo|*'] - try['*|*'] - - try['#blah'] - try['.blah'] - - try['[foo]'] - try['[foo^="bar"]'] - try['[baz|foo~="bar"]'] - - try[':hover'] - try[':nth-child(2n + 3)'] - - try['h1, h2, h3'] - try['#foo, bar, [baz]'] - - # Not technically allowed for most selectors, but what the heck - try[':not(#foo)'] - try['a#foo.bar'] - try['#foo .bar > baz'] - end - - def test_namespaced_selectors - assert_selector_parses('foo|E') - assert_selector_parses('*|E') - assert_selector_parses('foo|*') - assert_selector_parses('*|*') - end - - def test_namespaced_attribute_selectors - assert_selector_parses('[foo|bar=baz]') - assert_selector_parses('[*|bar=baz]') - assert_selector_parses('[foo|bar|=baz]') - end - - def test_comma_selectors - assert_selector_parses('E, F') - assert_selector_parses('E F, G H') - assert_selector_parses('E > F, G > H') - end - - def test_selectors_with_newlines - assert_selector_parses("E,\nF") - assert_selector_parses("E\nF") - assert_selector_parses("E, F\nG, H") - end - - def test_expression_fallback_selectors - assert_directive_parses('0%') - assert_directive_parses('60%') - assert_directive_parses('100%') - assert_directive_parses('12px') - assert_directive_parses('"foo"') - end - - def test_functional_pseudo_selectors - assert_selector_parses(':foo("bar")') - assert_selector_parses(':foo(bar)') - assert_selector_parses(':foo(12px)') - assert_selector_parses(':foo(+)') - assert_selector_parses(':foo(-)') - assert_selector_parses(':foo(+"bar")') - assert_selector_parses(':foo(-++--baz-"bar"12px)') - end - - def test_selector_hacks - assert_selector_parses('> E') - assert_selector_parses('+ E') - assert_selector_parses('~ E') - assert_selector_parses('> > E') - assert_equal < > E { - a: b; } -CSS ->> E { - a: b; } -SCSS - - assert_selector_parses('E*') - assert_selector_parses('E*.foo') - assert_selector_parses('E*:hover') - end - - def test_spaceless_combo_selectors - assert_equal "E > F {\n a: b; }\n", render("E>F { a: b;} ") - assert_equal "E ~ F {\n a: b; }\n", render("E~F { a: b;} ") - assert_equal "E + F {\n a: b; }\n", render("E+F { a: b;} ") - end - - def test_escapes_in_selectors - assert_selector_parses('.\!foo') - assert_selector_parses('.\66 foo') - assert_selector_parses('.\21 foo') - end - - def test_subject_selector_deprecation - assert_warning(< .baz {a: b}")} -DEPRECATION WARNING on line 1, column 1: -The subject selector operator "!" is deprecated and will be removed in a future release. -This operator has been replaced by ":has()" in the CSS spec. -For example: .foo .bar:has(> .baz) -WARNING - - assert_warning(< import "foo";') - assert_not_parses("identifier", '@12 "foo";') - end - - def test_invalid_classes - assert_not_parses("class name", 'p. foo {a: b}') - assert_not_parses("class name", 'p.1foo {a: b}') - end - - def test_invalid_ids - assert_not_parses("id name", 'p# foo {a: b}') - end - - def test_no_properties_at_toplevel - assert_not_parses('pseudoclass or pseudoelement', 'a: b;') - end - - def test_no_scss_directives - assert_parses('@import "foo.sass";') - assert_parses <$var = 12;") - assert_not_parses('"}"', "foo { !var = 12; }") - end - - def test_no_parent_selectors - assert_not_parses('"{"', "foo &.bar {a: b}") - end - - def test_no_selector_interpolation - assert_not_parses('"{"', 'foo #{"bar"}.baz {a: b}') - end - - def test_no_prop_name_interpolation - assert_not_parses('":"', 'foo {a#{"bar"}baz: b}') - end - - def test_no_prop_val_interpolation - assert_not_parses('"}"', 'foo {a: b #{"bar"} c}') - end - - def test_no_string_interpolation - assert_parses <* c}') - end - - def test_no_nested_rules - assert_not_parses('":"', 'foo {bar {a: b}}') - assert_not_parses('"}"', 'foo {[bar=baz] {a: b}}') - end - - def test_no_nested_properties - assert_not_parses('expression (e.g. 1px, bold)', 'foo {bar: {a: b}}') - assert_not_parses('expression (e.g. 1px, bold)', 'foo {bar: bang {a: b}}') - end - - def test_no_nested_directives - assert_not_parses('"}"', 'foo {@bar {a: b}}') - end - - def test_error_with_windows_newlines - render < e - assert_equal 'Invalid CSS after "foo {bar": expected ":", was "}"', e.message - assert_equal 1, e.sass_line - end - - def test_newline_in_property_value - assert_equal(<{a: b}") - end - - def test_closing_line_comment_end_with_compact_output - assert_equal(< :compact)) -/* foo */ -bar { baz: bang; } -CSS -/* - * foo - */ -bar {baz: bang} -SCSS - end - - def test_single_line_comment_within_multiline_comment - assert_equal(< e - assert_equal 'Invalid CSS after "@media ": expected media query (e.g. print, screen, print and screen), was "{"', e.message - assert_equal 1, e.sass_line - end - - private - - def assert_selector_parses(selector) - assert_parses < :nested)) -@fblthp { - .foo .bar { - a: b; } } -CSS -.foo { - @fblthp { - .bar {a: b} - } -} -SCSS - end - - def test_keyframe_bubbling - assert_equal(< :nested)) -@keyframes spin { - 0% { - transform: rotate(0deg); } } -@-webkit-keyframes spin { - 0% { - transform: rotate(0deg); } } -CSS -.foo { - @keyframes spin { - 0% {transform: rotate(0deg)} - } - @-webkit-keyframes spin { - 0% {transform: rotate(0deg)} - } -} -SCSS - end - - ## Namespace Properties - - def test_namespace_properties - assert_equal < e - assert_equal 'Invalid CSS after "bar:baz calc": expected selector, was "(1 + 2)"', e.message - assert_equal 2, e.sass_line - end - - def test_namespace_properties_without_space_allowed_for_non_identifier - assert_equal < e - assert_equal "Extend directives may only be used within rules.", e.message - assert_equal 3, e.sass_line - end - - def test_at_root_doesnt_always_break_blocks - assert_equal < e - assert_equal 'Invalid CSS after "": expected selector, was "0%"', e.message - assert_equal 1, e.sass_line - end - - def test_selector_rule_in_keyframes - render < e - assert_equal 'Invalid CSS after "": expected keyframes selector (e.g. 10%), was ".foo"', e.message - assert_equal 2, e.sass_line - end - - def test_nested_mixin_def_is_scoped - render < e - assert_equal "Undefined mixin 'bar'.", e.message - assert_equal 3, e.sass_line - end - - def test_rules_beneath_properties - render < e - assert_equal 'Illegal nesting: Only properties may be nested beneath properties.', e.message - assert_equal 3, e.sass_line - end - - def test_uses_property_exception_with_star_hack - render < e - assert_equal 'Invalid CSS after " *bar:baz ": expected ";", was "[fail]; }"', e.message - assert_equal 2, e.sass_line - end - - def test_uses_property_exception_with_colon_hack - render < e - assert_equal 'Invalid CSS after " :bar:baz ": expected ";", was "[fail]; }"', e.message - assert_equal 2, e.sass_line - end - - def test_uses_rule_exception_with_dot_hack - render <; } -SCSS - assert(false, "Expected syntax error") - rescue Sass::SyntaxError => e - assert_equal 'Invalid CSS after " .bar:baz ": expected expression (e.g. 1px, bold), was "; }"', e.message - assert_equal 2, e.sass_line - end - - def test_uses_property_exception_with_space_after_name - render < e - assert_equal 'Invalid CSS after " bar: baz ": expected ";", was "[fail]; }"', e.message - assert_equal 2, e.sass_line - end - - def test_uses_property_exception_with_non_identifier_after_name - render < e - assert_equal 'Invalid CSS after " bar:1px ": expected ";", was "[fail]; }"', e.message - assert_equal 2, e.sass_line - end - - def test_uses_property_exception_when_followed_by_open_bracket - render < e - assert_equal 'Invalid CSS after " bar:{baz: ": expected expression (e.g. 1px, bold), was ".fail} }"', e.message - assert_equal 2, e.sass_line - end - - def test_script_error - render < e - assert_equal 'Invalid CSS after " bar: "baz" * ": expected expression (e.g. 1px, bold), was "* }"', e.message - assert_equal 2, e.sass_line - end - - def test_multiline_script_syntax_error - render < e - assert_equal 'Invalid CSS after " "baz" * ": expected expression (e.g. 1px, bold), was "* }"', e.message - assert_equal 3, e.sass_line - end - - def test_multiline_script_runtime_error - render < e - assert_equal "Undefined variable: \"$bang\".", e.message - assert_equal 4, e.sass_line - end - - def test_post_multiline_script_runtime_error - render < e - assert_equal "Undefined variable: \"$bop\".", e.message - assert_equal 5, e.sass_line - end - - def test_multiline_property_runtime_error - render < e - assert_equal "Undefined variable: \"$bang\".", e.message - assert_equal 4, e.sass_line - end - - def test_post_resolution_selector_error - render "\n\nfoo \#{\") bar\"} {a: b}" - assert(false, "Expected syntax error") - rescue Sass::SyntaxError => e - assert_equal 'Invalid CSS after "foo ": expected selector, was ") bar"', e.message - assert_equal 3, e.sass_line - end - - def test_parent_in_mid_selector_error - assert_raise_message(Sass::SyntaxError, < :compressed) -z a,z b{display:block} -CSS -a -, b { - z & { - display: block; - } -} -SCSS - end - - def test_if_error_line - assert_raise_line(2) {render(< :compressed) -foo{color:#000} -CSS -foo {color: darken(black, 10%)} -SCSS - end - - # ref: https://github.com/nex3/sass/issues/104 - def test_no_buffer_overflow - template = render < where an error is expected" unless scss.include?("") - - after, was = scss.split("") - line = after.count("\n") + 1 - - after.gsub!(/\s*\n\s*$/, '') - after.gsub!(/.*\n/, '') - after = "..." + after[-15..-1] if after.size > 18 - - was.gsub!(/^\s*\n\s*/, '') - was.gsub!(/\n.*/, '') - was = was[0...15] + "..." if was.size > 18 - - to_render = scss.sub("", "") - render(to_render) - assert(false, "Expected syntax error for:\n#{to_render}\n") - rescue Sass::SyntaxError => err - assert_equal("Invalid CSS after \"#{after}\": expected #{expected}, was \"#{was}\"", - err.message) - assert_equal line, err.sass_line - end - - def render(scss, options = {}) - options[:syntax] ||= :scss - munge_filename options - Sass::Engine.new(scss, options).render - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/source_map_test.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/source_map_test.rb deleted file mode 100755 index 00424bf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/source_map_test.rb +++ /dev/null @@ -1,977 +0,0 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- -require File.dirname(__FILE__) + '/../test_helper' -require File.dirname(__FILE__) + '/test_helper' - -class SourcemapTest < MiniTest::Test - def test_to_json_requires_args - _, sourcemap = render_with_sourcemap('') - assert_raises(ArgumentError) {sourcemap.to_json({})} - assert_raises(ArgumentError) {sourcemap.to_json({:css_path => 'foo'})} - assert_raises(ArgumentError) {sourcemap.to_json({:sourcemap_path => 'foo'})} - end - - def test_simple_mapping_scss - assert_parses_with_sourcemap < :sass -a - foo: bar - /* SOME COMMENT */ - :font-size 12px -SASS -a { - foo: bar; - /* SOME COMMENT */ - font-size: 12px; } - -/*# sourceMappingURL=test.css.map */ -CSS -{ -"version": 3, -"mappings": "AAAA,CAAC;EACC,GAAG,EAAE,GAAG;;EAEP,SAAS,EAAC,IAAI", -"sources": ["test_simple_mapping_sass_inline.sass"], -"names": [], -"file": "test.css" -} -JSON - end - - def test_simple_mapping_with_file_uris - uri = Sass::Util.file_uri_from_path(Sass::Util.absolute_path(filename_for_test(:scss))) - assert_parses_with_sourcemap < :file -a { - foo: bar; -/* SOME COMMENT */ - font-size: 12px; -} -SCSS -a { - foo: bar; - /* SOME COMMENT */ - font-size: 12px; } - -/*# sourceMappingURL=test.css.map */ -CSS -{ -"version": 3, -"mappings": "AAAA,CAAE;EACA,GAAG,EAAE,GAAG;;EAER,SAAS,EAAE,IAAI", -"sources": ["#{uri}"], -"names": [], -"file": "test.css" -} -JSON - end - - def test_mapping_with_directory_scss - options = {:filename => "scss/style.scss", :output => "css/style.css"} - assert_parses_with_sourcemap < "sass/style.sass", :output => "css/style.css", :syntax => :sass} - assert_parses_with_sourcemap < :sass -a - fóó: bár -SASS -@charset "UTF-8"; -a { - fóó: bár; } - -/*# sourceMappingURL=test.css.map */ -CSS -{ -"version": 3, -"mappings": ";AAAA,CAAC;EACC,GAAG,EAAE,GAAG", -"sources": ["test_simple_charset_mapping_sass_inline.sass"], -"names": [], -"file": "test.css" -} -JSON - end - - def test_different_charset_than_encoding_scss - assert_parses_with_sourcemap(< :sass) -@charset "IBM866" -f\x86\x86 - \x86: b -SASS -@charset "UTF-8"; -fЖЖ { - Ж: b; } - -/*# sourceMappingURL=test.css.map */ -CSS -{ -"version": 3, -"mappings": ";AACA,GAAG;EACD,CAAC,EAAE,CAAC", -"sources": ["test_different_charset_than_encoding_sass_inline.sass"], -"names": [], -"file": "test.css" -} -JSON - end - end - - def test_import_sourcemap_scss - assert_parses_with_mapping <<'SCSS', <<'CSS' -@import {{1}}url(foo){{/1}},{{2}}url(moo) {{/2}}, {{3}}url(bar) {{/3}}; -@import {{4}}url(baz) screen print{{/4}}; -SCSS -{{1}}@import url(foo){{/1}}; -{{2}}@import url(moo){{/2}}; -{{3}}@import url(bar){{/3}}; -{{4}}@import url(baz) screen print{{/4}}; - -/*# sourceMappingURL=test.css.map */ -CSS - end - - def test_import_sourcemap_sass - assert_parses_with_mapping <<'SASS', <<'CSS', :syntax => :sass -@import {{1}}foo.css{{/1}},{{2}}moo.css{{/2}}, {{3}}bar.css{{/3}} -@import {{4}}url(baz.css){{/4}} -@import {{5}}url(qux.css) screen print{{/5}} -SASS -{{1}}@import url(foo.css){{/1}}; -{{2}}@import url(moo.css){{/2}}; -{{3}}@import url(bar.css){{/3}}; -{{4}}@import url(baz.css){{/4}}; -{{5}}@import url(qux.css) screen print{{/5}}; - -/*# sourceMappingURL=test.css.map */ -CSS - end - - def test_media_sourcemap_scss - assert_parses_with_mapping <<'SCSS', <<'CSS' -{{1}}@media screen, tv {{/1}}{ - {{2}}body {{/2}}{ - {{3}}max-width{{/3}}: {{4}}1070px{{/4}}; - } -} -SCSS -{{1}}@media screen, tv{{/1}} { - {{2}}body{{/2}} { - {{3}}max-width{{/3}}: {{4}}1070px{{/4}}; } } - -/*# sourceMappingURL=test.css.map */ -CSS - end - - def test_media_sourcemap_sass - assert_parses_with_mapping <<'SASS', <<'CSS', :syntax => :sass -{{1}}@media screen, tv{{/1}} - {{2}}body{{/2}} - {{3}}max-width{{/3}}: {{4}}1070px{{/4}} -SASS -{{1}}@media screen, tv{{/1}} { - {{2}}body{{/2}} { - {{3}}max-width{{/3}}: {{4}}1070px{{/4}}; } } - -/*# sourceMappingURL=test.css.map */ -CSS - end - - def test_interpolation_and_vars_sourcemap_scss - assert_parses_with_mapping <<'SCSS', <<'CSS' -$te: "te"; -$teal: {{5}}teal{{/5}}; -{{1}}p {{/1}}{ - {{2}}con#{$te}nt{{/2}}: {{3}}"I a#{$te} #{5 + 10} pies!"{{/3}}; - {{4}}color{{/4}}: $teal; -} - -$name: foo; -$attr: border; -{{6}}p.#{$name} {{/6}}{ - {{7}}#{$attr}-color{{/7}}: {{8}}blue{{/8}}; - $font-size: 12px; - $line-height: 30px; - {{9}}font{{/9}}: {{10}}#{$font-size}/#{$line-height}{{/10}}; -} -SCSS -{{1}}p{{/1}} { - {{2}}content{{/2}}: {{3}}"I ate 15 pies!"{{/3}}; - {{4}}color{{/4}}: {{5}}teal{{/5}}; } - -{{6}}p.foo{{/6}} { - {{7}}border-color{{/7}}: {{8}}blue{{/8}}; - {{9}}font{{/9}}: {{10}}12px/30px{{/10}}; } - -/*# sourceMappingURL=test.css.map */ -CSS - end - - def test_interpolation_and_vars_sourcemap_sass - assert_parses_with_mapping <<'SASS', <<'CSS', :syntax => :sass -$te: "te" -$teal: {{5}}teal{{/5}} -{{1}}p{{/1}} - {{2}}con#{$te}nt{{/2}}: {{3}}"I a#{$te} #{5 + 10} pies!"{{/3}} - {{4}}color{{/4}}: $teal - -$name: foo -$attr: border -{{6}}p.#{$name}{{/6}} - {{7}}#{$attr}-color{{/7}}: {{8}}blue{{/8}} - $font-size: 12px - $line-height: 30px - {{9}}font{{/9}}: {{10}}#{$font-size}/#{$line-height}{{/10}} -SASS -{{1}}p{{/1}} { - {{2}}content{{/2}}: {{3}}"I ate 15 pies!"{{/3}}; - {{4}}color{{/4}}: {{5}}teal{{/5}}; } - -{{6}}p.foo{{/6}} { - {{7}}border-color{{/7}}: {{8}}blue{{/8}}; - {{9}}font{{/9}}: {{10}}12px/30px{{/10}}; } - -/*# sourceMappingURL=test.css.map */ -CSS - end - - def test_selectors_properties_sourcemap_scss - assert_parses_with_mapping <<'SCSS', <<'CSS' -$width: 2px; -$translucent-red: rgba(255, 0, 0, 0.5); -{{1}}a {{/1}}{ - {{8}}.special {{/8}}{ - {{9}}color{{/9}}: {{10}}red{{/10}}; - {{11}}&:hover {{/11}}{ - {{12}}foo{{/12}}: {{13}}bar{{/13}}; - {{14}}cursor{{/14}}: {{15}}e + -resize{{/15}}; - {{16}}color{{/16}}: {{17}}opacify($translucent-red, 0.3){{/17}}; - } - {{18}}&:after {{/18}}{ - {{19}}content{{/19}}: {{20}}"I ate #{5 + 10} pies #{$width} thick!"{{/20}}; - } - } - {{21}}&:active {{/21}}{ - {{22}}color{{/22}}: {{23}}#010203 + #040506{{/23}}; - {{24}}border{{/24}}: {{25}}$width solid black{{/25}}; - } -/* SOME COMMENT */ - {{2}}font{{/2}}: {{3}}2px/3px {{/3}}{ - {{4}}family{{/4}}: {{5}}fantasy{{/5}}; - {{6}}size{{/6}}: {{7}}1em + (2em * 3){{/7}}; - } -} -SCSS -{{1}}a{{/1}} { - /* SOME COMMENT */ - {{2}}font{{/2}}: {{3}}2px/3px{{/3}}; - {{4}}font-family{{/4}}: {{5}}fantasy{{/5}}; - {{6}}font-size{{/6}}: {{7}}7em{{/7}}; } - {{8}}a .special{{/8}} { - {{9}}color{{/9}}: {{10}}red{{/10}}; } - {{11}}a .special:hover{{/11}} { - {{12}}foo{{/12}}: {{13}}bar{{/13}}; - {{14}}cursor{{/14}}: {{15}}e-resize{{/15}}; - {{16}}color{{/16}}: {{17}}rgba(255, 0, 0, 0.8){{/17}}; } - {{18}}a .special:after{{/18}} { - {{19}}content{{/19}}: {{20}}"I ate 15 pies 2px thick!"{{/20}}; } - {{21}}a:active{{/21}} { - {{22}}color{{/22}}: {{23}}#050709{{/23}}; - {{24}}border{{/24}}: {{25}}2px solid black{{/25}}; } - -/*# sourceMappingURL=test.css.map */ -CSS - end - - def test_selectors_properties_sourcemap_sass - assert_parses_with_mapping <<'SASS', <<'CSS', :syntax => :sass -$width: 2px -$translucent-red: rgba(255, 0, 0, 0.5) -{{1}}a{{/1}} - {{8}}.special{{/8}} - {{9}}color{{/9}}: {{10}}red{{/10}} - {{11}}&:hover{{/11}} - {{12}}foo{{/12}}: {{13}}bar{{/13}} - {{14}}cursor{{/14}}: {{15}}e + -resize{{/15}} - {{16}}color{{/16}}: {{17}}opacify($translucent-red, 0.3){{/17}} - {{18}}&:after{{/18}} - {{19}}content{{/19}}: {{20}}"I ate #{5 + 10} pies #{$width} thick!"{{/20}} - {{21}}&:active{{/21}} - {{22}}color{{/22}}: {{23}}#010203 + #040506{{/23}} - {{24}}border{{/24}}: {{25}}$width solid black{{/25}} - - /* SOME COMMENT */ - {{2}}font{{/2}}: {{3}}2px/3px{{/3}} - {{4}}family{{/4}}: {{5}}fantasy{{/5}} - {{6}}size{{/6}}: {{7}}1em + (2em * 3){{/7}} -SASS -{{1}}a{{/1}} { - /* SOME COMMENT */ - {{2}}font{{/2}}: {{3}}2px/3px{{/3}}; - {{4}}font-family{{/4}}: {{5}}fantasy{{/5}}; - {{6}}font-size{{/6}}: {{7}}7em{{/7}}; } - {{8}}a .special{{/8}} { - {{9}}color{{/9}}: {{10}}red{{/10}}; } - {{11}}a .special:hover{{/11}} { - {{12}}foo{{/12}}: {{13}}bar{{/13}}; - {{14}}cursor{{/14}}: {{15}}e-resize{{/15}}; - {{16}}color{{/16}}: {{17}}rgba(255, 0, 0, 0.8){{/17}}; } - {{18}}a .special:after{{/18}} { - {{19}}content{{/19}}: {{20}}"I ate 15 pies 2px thick!"{{/20}}; } - {{21}}a:active{{/21}} { - {{22}}color{{/22}}: {{23}}#050709{{/23}}; - {{24}}border{{/24}}: {{25}}2px solid black{{/25}}; } - -/*# sourceMappingURL=test.css.map */ -CSS - end - - def test_extend_sourcemap_scss - assert_parses_with_mapping <<'SCSS', <<'CSS' -{{1}}.error {{/1}}{ - {{2}}border{{/2}}: {{3}}1px #ff00aa{{/3}}; - {{4}}background-color{{/4}}: {{5}}#fdd{{/5}}; -} -{{6}}.seriousError {{/6}}{ - @extend .error; - {{7}}border-width{{/7}}: {{8}}3px{{/8}}; -} -SCSS -{{1}}.error, .seriousError{{/1}} { - {{2}}border{{/2}}: {{3}}1px #ff00aa{{/3}}; - {{4}}background-color{{/4}}: {{5}}#fdd{{/5}}; } - -{{6}}.seriousError{{/6}} { - {{7}}border-width{{/7}}: {{8}}3px{{/8}}; } - -/*# sourceMappingURL=test.css.map */ -CSS - end - - def test_extend_sourcemap_sass - assert_parses_with_mapping <<'SASS', <<'CSS', :syntax => :sass -{{1}}.error{{/1}} - {{2}}border{{/2}}: {{3}}1px #f00{{/3}} - {{4}}background-color{{/4}}: {{5}}#fdd{{/5}} - -{{6}}.seriousError{{/6}} - @extend .error - {{7}}border-width{{/7}}: {{8}}3px{{/8}} -SASS -{{1}}.error, .seriousError{{/1}} { - {{2}}border{{/2}}: {{3}}1px #f00{{/3}}; - {{4}}background-color{{/4}}: {{5}}#fdd{{/5}}; } - -{{6}}.seriousError{{/6}} { - {{7}}border-width{{/7}}: {{8}}3px{{/8}}; } - -/*# sourceMappingURL=test.css.map */ -CSS - end - - def test_for_sourcemap_scss - assert_parses_with_mapping <<'SCSS', <<'CSS' -@for $i from 1 through 3 { - {{1}}{{4}}{{7}}.item-#{$i} {{/1}}{{/4}}{{/7}}{ {{2}}{{5}}{{8}}width{{/2}}{{/5}}{{/8}}: {{3}}{{6}}{{9}}2em * $i{{/3}}{{/6}}{{/9}}; } -} -SCSS -{{1}}.item-1{{/1}} { - {{2}}width{{/2}}: {{3}}2em{{/3}}; } - -{{4}}.item-2{{/4}} { - {{5}}width{{/5}}: {{6}}4em{{/6}}; } - -{{7}}.item-3{{/7}} { - {{8}}width{{/8}}: {{9}}6em{{/9}}; } - -/*# sourceMappingURL=test.css.map */ -CSS - end - - def test_for_sourcemap_sass - assert_parses_with_mapping <<'SASS', <<'CSS', :syntax => :sass -@for $i from 1 through 3 - {{1}}{{4}}{{7}}.item-#{$i}{{/1}}{{/4}}{{/7}} - {{2}}{{5}}{{8}}width{{/2}}{{/5}}{{/8}}: {{3}}{{6}}{{9}}2em * $i{{/3}}{{/6}}{{/9}} -SASS -{{1}}.item-1{{/1}} { - {{2}}width{{/2}}: {{3}}2em{{/3}}; } - -{{4}}.item-2{{/4}} { - {{5}}width{{/5}}: {{6}}4em{{/6}}; } - -{{7}}.item-3{{/7}} { - {{8}}width{{/8}}: {{9}}6em{{/9}}; } - -/*# sourceMappingURL=test.css.map */ -CSS - end - - def test_while_sourcemap_scss - assert_parses_with_mapping <<'SCSS', <<'CSS' -$i: 6; -@while $i > 0 { - {{1}}{{4}}{{7}}.item-#{$i} {{/1}}{{/4}}{{/7}}{ {{2}}{{5}}{{8}}width{{/2}}{{/5}}{{/8}}: {{3}}{{6}}{{9}}2em * $i{{/3}}{{/6}}{{/9}}; } - $i: $i - 2 !global; -} -SCSS -{{1}}.item-6{{/1}} { - {{2}}width{{/2}}: {{3}}12em{{/3}}; } - -{{4}}.item-4{{/4}} { - {{5}}width{{/5}}: {{6}}8em{{/6}}; } - -{{7}}.item-2{{/7}} { - {{8}}width{{/8}}: {{9}}4em{{/9}}; } - -/*# sourceMappingURL=test.css.map */ -CSS - end - - def test_while_sourcemap_sass - assert_parses_with_mapping <<'SASS', <<'CSS', :syntax => :sass -$i: 6 -@while $i > 0 - {{1}}{{4}}{{7}}.item-#{$i}{{/1}}{{/4}}{{/7}} - {{2}}{{5}}{{8}}width{{/2}}{{/5}}{{/8}}: {{3}}{{6}}{{9}}2em * $i{{/3}}{{/6}}{{/9}} - $i: $i - 2 !global -SASS -{{1}}.item-6{{/1}} { - {{2}}width{{/2}}: {{3}}12em{{/3}}; } - -{{4}}.item-4{{/4}} { - {{5}}width{{/5}}: {{6}}8em{{/6}}; } - -{{7}}.item-2{{/7}} { - {{8}}width{{/8}}: {{9}}4em{{/9}}; } - -/*# sourceMappingURL=test.css.map */ -CSS - end - - def test_each_sourcemap_scss - assert_parses_with_mapping <<'SCSS', <<'CSS' -@each $animal in puma, sea-slug, egret, salamander { - {{1}}{{4}}{{7}}{{10}}.#{$animal}-icon {{/1}}{{/4}}{{/7}}{{/10}}{ - {{2}}{{5}}{{8}}{{11}}background-image{{/2}}{{/5}}{{/8}}{{/11}}: {{3}}{{6}}{{9}}{{12}}url('/images/#{$animal}.png'){{/3}}{{/6}}{{/9}}{{/12}}; - } -} -SCSS -{{1}}.puma-icon{{/1}} { - {{2}}background-image{{/2}}: {{3}}url("/images/puma.png"){{/3}}; } - -{{4}}.sea-slug-icon{{/4}} { - {{5}}background-image{{/5}}: {{6}}url("/images/sea-slug.png"){{/6}}; } - -{{7}}.egret-icon{{/7}} { - {{8}}background-image{{/8}}: {{9}}url("/images/egret.png"){{/9}}; } - -{{10}}.salamander-icon{{/10}} { - {{11}}background-image{{/11}}: {{12}}url("/images/salamander.png"){{/12}}; } - -/*# sourceMappingURL=test.css.map */ -CSS - end - - def test_each_sourcemap_sass - assert_parses_with_mapping <<'SASS', <<'CSS', :syntax => :sass -@each $animal in puma, sea-slug, egret, salamander - {{1}}{{4}}{{7}}{{10}}.#{$animal}-icon{{/1}}{{/4}}{{/7}}{{/10}} - {{2}}{{5}}{{8}}{{11}}background-image{{/2}}{{/5}}{{/8}}{{/11}}: {{3}}{{6}}{{9}}{{12}}url('/images/#{$animal}.png'){{/3}}{{/6}}{{/9}}{{/12}} -SASS -{{1}}.puma-icon{{/1}} { - {{2}}background-image{{/2}}: {{3}}url("/images/puma.png"){{/3}}; } - -{{4}}.sea-slug-icon{{/4}} { - {{5}}background-image{{/5}}: {{6}}url("/images/sea-slug.png"){{/6}}; } - -{{7}}.egret-icon{{/7}} { - {{8}}background-image{{/8}}: {{9}}url("/images/egret.png"){{/9}}; } - -{{10}}.salamander-icon{{/10}} { - {{11}}background-image{{/11}}: {{12}}url("/images/salamander.png"){{/12}}; } - -/*# sourceMappingURL=test.css.map */ -CSS - end - - def test_mixin_sourcemap_scss - assert_parses_with_mapping <<'SCSS', <<'CSS' -@mixin large-text { - font: { - {{2}}size{{/2}}: {{3}}20px{{/3}}; - {{4}}weight{{/4}}: {{5}}bold{{/5}}; - } - {{6}}color{{/6}}: {{7}}#ff0000{{/7}}; -} - -{{1}}.page-title {{/1}}{ - @include large-text; - {{8}}padding{{/8}}: {{9}}4px{{/9}}; -} - -@mixin dashed-border($color, $width: {{14}}1in{{/14}}) { - border: { - {{11}}{{18}}color{{/11}}{{/18}}: $color; - {{13}}{{20}}width{{/13}}{{/20}}: $width; - {{15}}{{22}}style{{/15}}{{/22}}: {{16}}{{23}}dashed{{/16}}{{/23}}; - } -} - -{{10}}p {{/10}}{ @include dashed-border({{12}}blue{{/12}}); } -{{17}}h1 {{/17}}{ @include dashed-border({{19}}blue{{/19}}, {{21}}2in{{/21}}); } - -@mixin box-shadow($shadows...) { - {{25}}-moz-box-shadow{{/25}}: {{26}}$shadows{{/26}}; - {{27}}-webkit-box-shadow{{/27}}: {{28}}$shadows{{/28}}; - {{29}}box-shadow{{/29}}: {{30}}$shadows{{/30}}; -} - -{{24}}.shadows {{/24}}{ - @include box-shadow(0px 4px 5px #666, 2px 6px 10px #999); -} -SCSS -{{1}}.page-title{{/1}} { - {{2}}font-size{{/2}}: {{3}}20px{{/3}}; - {{4}}font-weight{{/4}}: {{5}}bold{{/5}}; - {{6}}color{{/6}}: {{7}}#ff0000{{/7}}; - {{8}}padding{{/8}}: {{9}}4px{{/9}}; } - -{{10}}p{{/10}} { - {{11}}border-color{{/11}}: {{12}}blue{{/12}}; - {{13}}border-width{{/13}}: {{14}}1in{{/14}}; - {{15}}border-style{{/15}}: {{16}}dashed{{/16}}; } - -{{17}}h1{{/17}} { - {{18}}border-color{{/18}}: {{19}}blue{{/19}}; - {{20}}border-width{{/20}}: {{21}}2in{{/21}}; - {{22}}border-style{{/22}}: {{23}}dashed{{/23}}; } - -{{24}}.shadows{{/24}} { - {{25}}-moz-box-shadow{{/25}}: {{26}}0px 4px 5px #666, 2px 6px 10px #999{{/26}}; - {{27}}-webkit-box-shadow{{/27}}: {{28}}0px 4px 5px #666, 2px 6px 10px #999{{/28}}; - {{29}}box-shadow{{/29}}: {{30}}0px 4px 5px #666, 2px 6px 10px #999{{/30}}; } - -/*# sourceMappingURL=test.css.map */ -CSS - end - -def test_mixin_sourcemap_sass - assert_parses_with_mapping <<'SASS', <<'CSS', :syntax => :sass -=large-text - :font - {{2}}size{{/2}}: {{3}}20px{{/3}} - {{4}}weight{{/4}}: {{5}}bold{{/5}} - {{6}}color{{/6}}: {{7}}#ff0000{{/7}} - -{{1}}.page-title{{/1}} - +large-text - {{8}}padding{{/8}}: {{9}}4px{{/9}} - -=dashed-border($color, $width: {{14}}1in{{/14}}) - border: - {{11}}{{18}}color{{/11}}{{/18}}: $color - {{13}}{{20}}width{{/13}}{{/20}}: $width - {{15}}{{22}}style{{/15}}{{/22}}: {{16}}{{23}}dashed{{/16}}{{/23}} - -{{10}}p{{/10}} - +dashed-border({{12}}blue{{/12}}) - -{{17}}h1{{/17}} - +dashed-border({{19}}blue{{/19}}, {{21}}2in{{/21}}) - -=box-shadow($shadows...) - {{25}}-moz-box-shadow{{/25}}: {{26}}$shadows{{/26}} - {{27}}-webkit-box-shadow{{/27}}: {{28}}$shadows{{/28}} - {{29}}box-shadow{{/29}}: {{30}}$shadows{{/30}} - -{{24}}.shadows{{/24}} - +box-shadow(0px 4px 5px #666, 2px 6px 10px #999) -SASS -{{1}}.page-title{{/1}} { - {{2}}font-size{{/2}}: {{3}}20px{{/3}}; - {{4}}font-weight{{/4}}: {{5}}bold{{/5}}; - {{6}}color{{/6}}: {{7}}#ff0000{{/7}}; - {{8}}padding{{/8}}: {{9}}4px{{/9}}; } - -{{10}}p{{/10}} { - {{11}}border-color{{/11}}: {{12}}blue{{/12}}; - {{13}}border-width{{/13}}: {{14}}1in{{/14}}; - {{15}}border-style{{/15}}: {{16}}dashed{{/16}}; } - -{{17}}h1{{/17}} { - {{18}}border-color{{/18}}: {{19}}blue{{/19}}; - {{20}}border-width{{/20}}: {{21}}2in{{/21}}; - {{22}}border-style{{/22}}: {{23}}dashed{{/23}}; } - -{{24}}.shadows{{/24}} { - {{25}}-moz-box-shadow{{/25}}: {{26}}0px 4px 5px #666, 2px 6px 10px #999{{/26}}; - {{27}}-webkit-box-shadow{{/27}}: {{28}}0px 4px 5px #666, 2px 6px 10px #999{{/28}}; - {{29}}box-shadow{{/29}}: {{30}}0px 4px 5px #666, 2px 6px 10px #999{{/30}}; } - -/*# sourceMappingURL=test.css.map */ -CSS -end - - def test_function_sourcemap_scss - assert_parses_with_mapping <<'SCSS', <<'CSS' -$grid-width: 20px; -$gutter-width: 5px; - -@function grid-width($n) { - @return $n * $grid-width + ($n - 1) * $gutter-width; -} -{{1}}sidebar {{/1}}{ {{2}}width{{/2}}: {{3}}grid-width(5){{/3}}; } -SCSS -{{1}}sidebar{{/1}} { - {{2}}width{{/2}}: {{3}}120px{{/3}}; } - -/*# sourceMappingURL=test.css.map */ -CSS - end - - def test_function_sourcemap_sass - assert_parses_with_mapping <<'SASS', <<'CSS', :syntax => :sass -$grid-width: 20px -$gutter-width: 5px - -@function grid-width($n) - @return $n * $grid-width + ($n - 1) * $gutter-width - -{{1}}sidebar{{/1}} - {{2}}width{{/2}}: {{3}}grid-width(5){{/3}} -SASS -{{1}}sidebar{{/1}} { - {{2}}width{{/2}}: {{3}}120px{{/3}}; } - -/*# sourceMappingURL=test.css.map */ -CSS - end - - # Regression tests - - def test_properties_sass - assert_parses_with_mapping < :sass -{{1}}.foo{{/1}} - :{{2}}name{{/2}} {{3}}value{{/3}} - {{4}}name{{/4}}: {{5}}value{{/5}} - :{{6}}name{{/6}} {{7}}value{{/7}} - {{8}}name{{/8}}: {{9}}value{{/9}} -SASS -{{1}}.foo{{/1}} { - {{2}}name{{/2}}: {{3}}value{{/3}}; - {{4}}name{{/4}}: {{5}}value{{/5}}; - {{6}}name{{/6}}: {{7}}value{{/7}}; - {{8}}name{{/8}}: {{9}}value{{/9}}; } - -/*# sourceMappingURL=test.css.map */ -CSS - end - - def test_multiline_script_scss - assert_parses_with_mapping < :scss -$var: {{3}}foo + - bar{{/3}}; {{1}}x {{/1}}{ {{2}}y{{/2}}: $var } -SCSS -{{1}}x{{/1}} { - {{2}}y{{/2}}: {{3}}foobar{{/3}}; } - -/*# sourceMappingURL=test.css.map */ -CSS - end - - def test_multiline_interpolation_source_range - engine = Sass::Engine.new(<<-SCSS, :cache => false, :syntax => :scss) -p { - filter: progid:DXImageTransform( - '\#{123}'); -} -SCSS - - interpolated = engine.to_tree.children. - first.children. - first.value.children[1] - assert_equal "123", interpolated.to_sass - range = interpolated.source_range - assert_equal 3, range.start_pos.line - assert_equal 14, range.start_pos.offset - assert_equal 3, range.end_pos.line - assert_equal 17, range.end_pos.offset - end - - def test_sources_array_is_uri_escaped - map = Sass::Source::Map.new - importer = Sass::Importers::Filesystem.new('.') - map.add( - Sass::Source::Range.new( - Sass::Source::Position.new(0, 0), - Sass::Source::Position.new(0, 10), - 'source file.scss', - importer), - Sass::Source::Range.new( - Sass::Source::Position.new(0, 0), - Sass::Source::Position.new(0, 10), - nil, nil)) - - json = map.to_json(:css_path => 'output file.css', :sourcemap_path => 'output file.css.map') - assert_equal json, < css_path, :sourcemap_path => sourcemap_path, :type => options[:sourcemap]) - - assert_equal css.rstrip, rendered.rstrip - assert_equal sourcemap_json.rstrip, rendered_json - end - - def render_with_sourcemap(source, options={}) - options[:syntax] ||= :scss - munge_filename options - engine = Sass::Engine.new(source, options) - engine.options[:cache] = false - sourcemap_path = Sass::Util.sourcemap_name(options[:output] || "test.css") - engine.render_with_sourcemap File.basename(sourcemap_path) - end - - def dump_sourcemap_as_expectation(source, css, sourcemap) - mappings_to_annotations(source, sourcemap.data.map {|d| d.input}) + "\n\n" + - "=" * 20 + " maps to:\n\n" + - mappings_to_annotations(css, sourcemap.data.map {|d| d.output}) - end - - def mappings_to_annotations(source, ranges) - additional_offsets = Hash.new(0) - lines = source.split("\n") - - add_annotation = lambda do |pos, str| - line_num = pos.line - 1 - line = lines[line_num] - offset = pos.offset + additional_offsets[line_num] - 1 - line << " " * (offset - line.length) if offset > line.length - line.insert(offset, str) - additional_offsets[line_num] += str.length - end - - ranges.each_with_index do |range, i| - add_annotation[range.start_pos, "{{#{i + 1}}}"] - add_annotation[range.end_pos, "{{/#{i + 1}}}"] - end - - return lines.join("\n") - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/superselector_test.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/superselector_test.rb deleted file mode 100755 index 3ac22de..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/superselector_test.rb +++ /dev/null @@ -1,210 +0,0 @@ -#!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../test_helper' - -class SuperselectorTest < MiniTest::Test - def test_superselector_reflexivity - assert_superselector 'h1', 'h1' - assert_superselector '.foo', '.foo' - assert_superselector '#foo > .bar, baz', '#foo > .bar, baz' - end - - def test_smaller_compound_superselector - assert_strict_superselector '.foo', '.foo.bar' - assert_strict_superselector '.bar', '.foo.bar' - assert_strict_superselector 'a', 'a#b' - assert_strict_superselector '#b', 'a#b' - end - - def test_smaller_complex_superselector - assert_strict_superselector '.bar', '.foo .bar' - assert_strict_superselector '.bar', '.foo > .bar' - assert_strict_superselector '.bar', '.foo + .bar' - assert_strict_superselector '.bar', '.foo ~ .bar' - end - - def test_selector_list_subset_superselector - assert_strict_superselector '.foo, .bar', '.foo' - assert_strict_superselector '.foo, .bar, .baz', '.foo, .baz' - assert_strict_superselector '.foo, .baz, .qux', '.foo.bar, .baz.bang' - end - - def test_leading_combinator_superselector - refute_superselector '+ .foo', '.foo' - refute_superselector '+ .foo', '.bar + .foo' - end - - def test_trailing_combinator_superselector - refute_superselector '.foo +', '.foo' - refute_superselector '.foo +', '.foo + .bar' - end - - def test_matching_combinator_superselector - assert_strict_superselector '.foo + .bar', '.foo + .bar.baz' - assert_strict_superselector '.foo + .bar', '.foo.baz + .bar' - assert_strict_superselector '.foo > .bar', '.foo > .bar.baz' - assert_strict_superselector '.foo > .bar', '.foo.baz > .bar' - assert_strict_superselector '.foo ~ .bar', '.foo ~ .bar.baz' - assert_strict_superselector '.foo ~ .bar', '.foo.baz ~ .bar' - end - - def test_following_sibling_is_superselector_of_next_sibling - assert_strict_superselector '.foo ~ .bar', '.foo + .bar.baz' - assert_strict_superselector '.foo ~ .bar', '.foo.baz + .bar' - end - - def test_descendant_is_superselector_of_child - assert_strict_superselector '.foo .bar', '.foo > .bar.baz' - assert_strict_superselector '.foo .bar', '.foo.baz > .bar' - assert_strict_superselector '.foo .baz', '.foo > .bar > .baz' - end - - def test_child_isnt_superselector_of_longer_child - refute_superselector '.foo > .baz', '.foo > .bar > .baz' - refute_superselector '.foo > .baz', '.foo > .bar .baz' - end - - def test_following_sibling_isnt_superselector_of_longer_following_sibling - refute_superselector '.foo + .baz', '.foo + .bar + .baz' - refute_superselector '.foo + .baz', '.foo + .bar .baz' - end - - def test_sibling_isnt_superselector_of_longer_sibling - # This actually is a superselector, but it's a very narrow edge case and - # detecting it is very difficult and may be exponential in the worst case. - refute_superselector '.foo ~ .baz', '.foo ~ .bar ~ .baz' - - refute_superselector '.foo ~ .baz', '.foo ~ .bar .baz' - end - - def test_matches_is_superselector_of_constituent_selectors - %w[matches -moz-any].each do |name| - assert_strict_superselector ":#{name}(.foo, .bar)", '.foo.baz' - assert_strict_superselector ":#{name}(.foo, .bar)", '.bar.baz' - assert_strict_superselector ":#{name}(.foo .bar, .baz)", '.x .foo .bar' - end - end - - def test_matches_is_superselector_of_subset_matches - assert_strict_superselector ':matches(.foo, .bar, .baz)', '#x:matches(.foo.bip, .baz.bang)' - assert_strict_superselector ':-moz-any(.foo, .bar, .baz)', '#x:-moz-any(.foo.bip, .baz.bang)' - end - - def test_matches_is_not_superselector_of_any - refute_superselector ':matches(.foo, .bar)', ':-moz-any(.foo, .bar)' - refute_superselector ':-moz-any(.foo, .bar)', ':matches(.foo, .bar)' - end - - def test_matches_can_be_subselector - %w[matches -moz-any].each do |name| - assert_superselector '.foo', ":#{name}(.foo.bar)" - assert_superselector '.foo.bar', ":#{name}(.foo.bar.baz)" - assert_superselector '.foo', ":#{name}(.foo.bar, .foo.baz)" - end - end - - def test_any_is_not_superselector_of_different_prefix - refute_superselector ':-moz-any(.foo, .bar)', ':-s-any(.foo, .bar)' - end - - def test_not_is_superselector_of_less_complex_not - assert_strict_superselector ':not(.foo.bar)', ':not(.foo)' - assert_strict_superselector ':not(.foo .bar)', ':not(.bar)' - end - - def test_not_is_superselector_of_superset - assert_strict_superselector ':not(.foo.bip, .baz.bang)', ':not(.foo, .bar, .baz)' - assert_strict_superselector ':not(.foo.bip, .baz.bang)', ':not(.foo):not(.bar):not(.baz)' - end - - def test_not_is_superselector_of_unique_selectors - assert_strict_superselector ':not(h1.foo)', 'a' - assert_strict_superselector ':not(.baz #foo)', '#bar' - end - - def test_not_is_not_superselector_of_non_unique_selectors - refute_superselector ':not(.foo)', '.bar' - refute_superselector ':not(:hover)', ':visited' - end - - def test_current_is_superselector_with_identical_innards - assert_superselector ':current(.foo)', ':current(.foo)' - end - - def test_current_is_superselector_with_subselector_innards - refute_superselector ':current(.foo)', ':current(.foo.bar)' - refute_superselector ':current(.foo.bar)', ':current(.foo)' - end - - def test_nth_match_is_superselector_of_subset_nth_match - assert_strict_superselector( - ':nth-child(2n of .foo, .bar, .baz)', '#x:nth-child(2n of .foo.bip, .baz.bang)') - assert_strict_superselector( - ':nth-last-child(2n of .foo, .bar, .baz)', '#x:nth-last-child(2n of .foo.bip, .baz.bang)') - end - - def test_nth_match_is_not_superselector_of_nth_match_with_different_arg - refute_superselector( - ':nth-child(2n of .foo, .bar, .baz)', '#x:nth-child(2n + 1 of .foo.bip, .baz.bang)') - refute_superselector( - ':nth-last-child(2n of .foo, .bar, .baz)', '#x:nth-last-child(2n + 1 of .foo.bip, .baz.bang)') - end - - def test_nth_match_is_not_superselector_of_nth_last_match - refute_superselector ':nth-child(2n of .foo, .bar)', ':nth-last-child(2n of .foo, .bar)' - refute_superselector ':nth-last-child(2n of .foo, .bar)', ':nth-child(2n of .foo, .bar)' - end - - def test_nth_match_can_be_subselector - %w[nth-child nth-last-child].each do |name| - assert_superselector '.foo', ":#{name}(2n of .foo.bar)" - assert_superselector '.foo.bar', ":#{name}(2n of .foo.bar.baz)" - assert_superselector '.foo', ":#{name}(2n of .foo.bar, .foo.baz)" - end - end - - def has_is_superselector_of_subset_host - assert_strict_superselector ':has(.foo, .bar, .baz)', ':has(.foo.bip, .baz.bang)' - end - - def has_isnt_superselector_of_contained_selector - assert_strict_superselector ':has(.foo, .bar, .baz)', '.foo' - end - - def host_is_superselector_of_subset_host - assert_strict_superselector ':host(.foo, .bar, .baz)', ':host(.foo.bip, .baz.bang)' - end - - def host_isnt_superselector_of_contained_selector - assert_strict_superselector ':host(.foo, .bar, .baz)', '.foo' - end - - def host_context_is_superselector_of_subset_host - assert_strict_superselector( - ':host-context(.foo, .bar, .baz)', ':host-context(.foo.bip, .baz.bang)') - end - - def host_context_isnt_superselector_of_contained_selector - assert_strict_superselector ':host-context(.foo, .bar, .baz)', '.foo' - end - - private - - def assert_superselector(superselector, subselector) - assert(parse_selector(superselector).superselector?(parse_selector(subselector)), - "Expected #{superselector} to be a superselector of #{subselector}.") - end - - def refute_superselector(superselector, subselector) - assert(!parse_selector(superselector).superselector?(parse_selector(subselector)), - "Expected #{superselector} not to be a superselector of #{subselector}.") - end - - def assert_strict_superselector(superselector, subselector) - assert_superselector(superselector, subselector) - refute_superselector(subselector, superselector) - end - - def parse_selector(selector) - Sass::SCSS::CssParser.new(selector, filename_for_test, nil).parse_selector - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_cached_import_option_partial.scss b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_cached_import_option_partial.scss deleted file mode 100644 index e4f9d3c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_cached_import_option_partial.scss +++ /dev/null @@ -1 +0,0 @@ -partial {value: whatever()} diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_double_import_loop2.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_double_import_loop2.sass deleted file mode 100644 index efa4eb5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_double_import_loop2.sass +++ /dev/null @@ -1 +0,0 @@ -@import "double_import_loop1" \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_filename_fn_import.scss b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_filename_fn_import.scss deleted file mode 100644 index 4a1eec4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_filename_fn_import.scss +++ /dev/null @@ -1,11 +0,0 @@ -@mixin imported-mixin { - imported-mixin: filename(); -} - -@function imported-function() { - @return filename(); -} - -filename { - imported: filename(); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_imported_charset_ibm866.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_imported_charset_ibm866.sass deleted file mode 100644 index b679317..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_imported_charset_ibm866.sass +++ /dev/null @@ -1,4 +0,0 @@ -@charset "IBM866" - -.bar - a: é diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_imported_charset_utf8.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_imported_charset_utf8.sass deleted file mode 100644 index cecdc5b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_imported_charset_utf8.sass +++ /dev/null @@ -1,4 +0,0 @@ -@charset "UTF-8" - -.bar - a: щ diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_imported_content.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_imported_content.sass deleted file mode 100644 index 65c4e33..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_imported_content.sass +++ /dev/null @@ -1,3 +0,0 @@ -@mixin foo - a - @content diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_partial.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_partial.sass deleted file mode 100644 index bef627d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_partial.sass +++ /dev/null @@ -1,2 +0,0 @@ -#foo - :background-color #baf diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_same_name_different_partiality.scss b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_same_name_different_partiality.scss deleted file mode 100644 index a04e83a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/_same_name_different_partiality.scss +++ /dev/null @@ -1 +0,0 @@ -.foo {partial: yes} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/alt.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/alt.sass deleted file mode 100644 index cbcb648..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/alt.sass +++ /dev/null @@ -1,16 +0,0 @@ -h1 - :float left - :width 274px - height: 75px - margin: 0 - background: - repeat: no-repeat - :image none - a:hover, a:visited - color: green - b:hover - color: red - :background-color green - const - nosp: 1 + 2 - sp : 1 + 2 diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/basic.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/basic.sass deleted file mode 100644 index 5d4bf61..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/basic.sass +++ /dev/null @@ -1,23 +0,0 @@ - - -body - :font Arial - :background blue - -#page - :width 700px - :height 100 - #header - :height 300px - h1 - :font-size 50px - :color blue - -#content.user.show - #container.top - #column.left - :width 100px - #column.right - :width 600px - #container.bottom - :background brown \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/bork1.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/bork1.sass deleted file mode 100644 index 70ba9db..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/bork1.sass +++ /dev/null @@ -1,2 +0,0 @@ -bork - :bork $bork diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/bork2.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/bork2.sass deleted file mode 100644 index 462afb5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/bork2.sass +++ /dev/null @@ -1,2 +0,0 @@ -bork - :bork: bork; diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/bork3.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/bork3.sass deleted file mode 100644 index 9d0fb70..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/bork3.sass +++ /dev/null @@ -1,2 +0,0 @@ -bork - bork: diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/bork4.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/bork4.sass deleted file mode 100644 index 75610d9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/bork4.sass +++ /dev/null @@ -1,2 +0,0 @@ - -bork: blah diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/bork5.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/bork5.sass deleted file mode 100644 index df156d7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/bork5.sass +++ /dev/null @@ -1,3 +0,0 @@ -bork - /* foo */ - :bork $bork diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/cached_import_option.scss b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/cached_import_option.scss deleted file mode 100644 index 3ade543..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/cached_import_option.scss +++ /dev/null @@ -1,3 +0,0 @@ -@import "cached_import_option_partial"; - -main {value: whatever()} diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/compact.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/compact.sass deleted file mode 100644 index e37f86e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/compact.sass +++ /dev/null @@ -1,17 +0,0 @@ -#main - :width 15em - :color #0000ff - p - :border - :style dotted - /* Nested comment - More nested stuff - :width 2px - .cool - :width 100px - -#left - :font - :size 2em - :weight bold - :float left diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/complex.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/complex.sass deleted file mode 100644 index e3c3301..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/complex.sass +++ /dev/null @@ -1,305 +0,0 @@ -body - :margin 0 - :font 0.85em "Lucida Grande", "Trebuchet MS", Verdana, sans-serif - :color #fff - :background url(/images/global_bg.gif) - -#page - :width 900px - :margin 0 auto - :background #440008 - :border-top - :width 5px - :style solid - :color #ff8500 - -#header - :height 75px - :padding 0 - h1 - :float left - :width 274px - :height 75px - :margin 0 - :background - :image url(/images/global_logo.gif) - /* Crazy nested comment - :repeat no-repeat - :text-indent -9999px - .status - :float right - :padding - :top .5em - :left .5em - :right .5em - :bottom 0 - p - :float left - :margin - :top 0 - :right 0.5em - :bottom 0 - :left 0 - ul - :float left - :margin 0 - :padding 0 - li - :list-style-type none - :display inline - :margin 0 5px - a:link, a:visited - :color #ff8500 - :text-decoration none - a:hover - :text-decoration underline - .search - :float right - :clear right - :margin 12px 0 0 0 - form - :margin 0 - input - :margin 0 3px 0 0 - :padding 2px - :border none - -#menu - :clear both - :text-align right - :height 20px - :border-bottom 5px solid #006b95 - :background #00a4e4 - .contests - ul - :margin 0 5px 0 0 - :padding 0 - li - :list-style-type none - :margin 0 5px - :padding 5px 5px 0 5px - :display inline - :font-size 1.1em - // This comment is properly indented - :color #fff - :background #00a4e4 - a:link, a:visited - :color #fff - :text-decoration none - :font-weight bold - a:hover - :text-decoration underline - -//General content information -#content - :clear both - .container - :clear both - .column - :float left - .right - :float right - a:link, a:visited - :color #93d700 - :text-decoration none - a:hover - :text-decoration underline - -// A hard tab: - - -#content - p, div - :width 40em - li, dt, dd - :color #ddffdd - :background-color #4792bb - .container.video - .column.left - :width 200px - .box - :margin-top 10px - p - :margin 0 1em auto 1em - .box.participants - img - :float left - :margin 0 1em auto 1em - :border 1px solid #6e000d - :style solid - h2 - :margin 0 0 10px 0 - :padding 0.5em - /* The background image is a gif! - :background #6e000d url(/images/hdr_participant.gif) 2px 2px no-repeat - /* Okay check this out - Multiline comments - Wow dude - I mean seriously, WOW - :text-indent -9999px - // And also... - Multiline comments that don't output! - Snazzy, no? - :border - :top - :width 5px - :style solid - :color #a20013 - :right - :width 1px - :style dotted - .column.middle - :width 500px - .column.right - :width 200px - .box - :margin-top 0 - p - :margin 0 1em auto 1em - .column - p - :margin-top 0 - -#content.contests - .container.information - .column.right - .box - :margin 1em 0 - .box.videos - .thumbnail img - :width 200px - :height 150px - :margin-bottom 5px - a:link, a:visited - :color #93d700 - :text-decoration none - a:hover - :text-decoration underline - .box.votes - a - :display block - :width 200px - :height 60px - :margin 15px 0 - :background url(/images/btn_votenow.gif) no-repeat - :text-indent -9999px - :outline none - :border none - h2 - :margin 52px 0 10px 0 - :padding 0.5em - :background #6e000d url(/images/hdr_videostats.gif) 2px 2px no-repeat - :text-indent -9999px - :border-top 5px solid #a20013 - -#content.contests - .container.video - .box.videos - h2 - :margin 0 - :padding 0.5em - :background #6e000d url(/images/hdr_newestclips.gif) 2px 2px no-repeat - :text-indent -9999px - :border-top 5px solid #a20013 - table - :width 100 - td - :padding 1em - :width 25 - :vertical-align top - p - :margin 0 0 5px 0 - a:link, a:visited - :color #93d700 - :text-decoration none - a:hover - :text-decoration underline - .thumbnail - :float left - img - :width 80px - :height 60px - :margin 0 10px 0 0 - :border 1px solid #6e000d - -#content - .container.comments - .column - :margin-top 15px - .column.left - :width 600px - .box - ol - :margin 0 - :padding 0 - li - :list-style-type none - :padding 10px - :margin 0 0 1em 0 - :background #6e000d - :border-top 5px solid #a20013 - div - :margin-bottom 1em - ul - :text-align right - li - :display inline - :border none - :padding 0 - .column.right - :width 290px - :padding-left 10px - h2 - :margin 0 - :padding 0.5em - :background #6e000d url(/images/hdr_addcomment.gif) 2px 2px no-repeat - :text-indent -9999px - :border-top 5px solid #a20013 - .box - textarea - :width 290px - :height 100px - :border none - -#footer - :margin-top 10px - :padding 1.2em 1.5em - :background #ff8500 - ul - :margin 0 - :padding 0 - :list-style-type none - li - :display inline - :margin 0 0.5em - :color #440008 - ul.links - :float left - a:link, a:visited - :color #440008 - :text-decoration none - a:hover - :text-decoration underline - ul.copyright - :float right - - -.clear - :clear both - -.centered - :text-align center - -img - :border none - -button.short - :width 60px - :height 22px - :padding 0 0 2px 0 - :color #fff - :border none - :background url(/images/btn_short.gif) no-repeat - -table - :border-collapse collapse diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/compressed.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/compressed.sass deleted file mode 100644 index 675fea4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/compressed.sass +++ /dev/null @@ -1,15 +0,0 @@ -#main - :width 15em - :color #0000ff - p - :border - :style dotted - :width 2px - .cool - :width 100px - -#left - :font - :size 2em - :weight bold - :float left diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/double_import_loop1.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/double_import_loop1.sass deleted file mode 100644 index 5477384..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/double_import_loop1.sass +++ /dev/null @@ -1 +0,0 @@ -@import "double_import_loop2" \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/expanded.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/expanded.sass deleted file mode 100644 index e37f86e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/expanded.sass +++ /dev/null @@ -1,17 +0,0 @@ -#main - :width 15em - :color #0000ff - p - :border - :style dotted - /* Nested comment - More nested stuff - :width 2px - .cool - :width 100px - -#left - :font - :size 2em - :weight bold - :float left diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/filename_fn.scss b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/filename_fn.scss deleted file mode 100644 index e43d508..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/filename_fn.scss +++ /dev/null @@ -1,18 +0,0 @@ -@import "filename_fn_import"; - -@mixin local-mixin { - local-mixin: filename(); -} - -@function local-function() { - @return filename(); -} - -filename { - local: filename(); - @include local-mixin; - local-function: local-function(); - - @include imported-mixin; - imported-function: imported-function(); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/if.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/if.sass deleted file mode 100644 index 787bff0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/if.sass +++ /dev/null @@ -1,11 +0,0 @@ -a - @if true - branch: if - @else - branch: else - -b - @if false - branch: if - @else - branch: else diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/import.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/import.sass deleted file mode 100644 index 512e4a2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/import.sass +++ /dev/null @@ -1,12 +0,0 @@ -$preconst: hello - -=premixin - pre-mixin: here - -@import importee.sass, scss_importee, "basic.sass", basic.css, ../results/complex.css -@import partial.sass - -nonimported - :myconst $preconst - :otherconst $postconst - +postmixin diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/import_charset.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/import_charset.sass deleted file mode 100644 index b85447c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/import_charset.sass +++ /dev/null @@ -1,9 +0,0 @@ -.foo - a: b - -@import "foo.css" - -// Even though the imported file is in IBM866, -// since the root file is in UTF-8/ASCII -// the output will end up being UTF-8. -@import "imported_charset_ibm866" diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/import_charset_1_8.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/import_charset_1_8.sass deleted file mode 100644 index 8a89b82..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/import_charset_1_8.sass +++ /dev/null @@ -1,6 +0,0 @@ -.foo - a: b - -@import "foo.css" - -@import "imported_charset_ibm866" diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/import_charset_ibm866.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/import_charset_ibm866.sass deleted file mode 100644 index 164e702..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/import_charset_ibm866.sass +++ /dev/null @@ -1,11 +0,0 @@ -@charset "IBM866" - -.foo - a: b - -@import "foo.css" - -// Even though the imported file is in UTF-8, -// since the root file is in IBM866 -// the output will end up being IBM866. -@import "imported_charset_utf8" diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/import_content.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/import_content.sass deleted file mode 100644 index 2ef8ad9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/import_content.sass +++ /dev/null @@ -1,4 +0,0 @@ -@import imported_content - -@include foo - b: c diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/importee.less b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/importee.less deleted file mode 100644 index ac03a0e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/importee.less +++ /dev/null @@ -1,2 +0,0 @@ -.foo {a: b} -.bar () {c: d} diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/importee.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/importee.sass deleted file mode 100644 index ddc8da8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/importee.sass +++ /dev/null @@ -1,19 +0,0 @@ -$postconst: goodbye - -=postmixin - post-mixin: here - -imported - :otherconst $preconst - :myconst $postconst - +premixin - -@import basic - -midrule - :inthe middle - -=crazymixin - foo: bar - baz - blat: bang diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/line_numbers.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/line_numbers.sass deleted file mode 100644 index 2afc103..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/line_numbers.sass +++ /dev/null @@ -1,13 +0,0 @@ -foo - bar: baz - -=premixin - squggle - blat: bang - -$preconst: 12 - -@import importee - -umph - +crazymixin \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/mixin_bork.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/mixin_bork.sass deleted file mode 100644 index 844acb9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/mixin_bork.sass +++ /dev/null @@ -1,5 +0,0 @@ -=outer-mixin - +error-mixin - -foo - +outer-mixin diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/mixins.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/mixins.sass deleted file mode 100644 index 633a626..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/mixins.sass +++ /dev/null @@ -1,76 +0,0 @@ -$yellow: #fc0 - -=bordered - :border - :top - :width 2px - :color $yellow - :left - :width 1px - :color #000 - -moz-border-radius: 10px - -=header-font - :color #f00 - :font - :size 20px - -=compound - +header-font - +bordered - -=complex - +header-font - text: - decoration: none - &:after - content: "." - display: block - height: 0 - clear: both - visibility: hidden - * html & - height: 1px - +header-font -=deep - a:hover - :text-decoration underline - +compound - - -#main - :width 15em - :color #0000ff - p - +bordered - :border - :style dotted - :width 2px - .cool - :width 100px - -#left - +bordered - :font - :size 2em - :weight bold - :float left - -#right - +bordered - +header-font - :float right - -.bordered - +bordered - -.complex - +complex - -.more-complex - +complex - +deep - display: inline - -webkit-nonsense: - top-right: 1px - bottom-left: 1px diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/multiline.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/multiline.sass deleted file mode 100644 index 83140e9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/multiline.sass +++ /dev/null @@ -1,20 +0,0 @@ -#main, -#header - height: 50px - div - width: 100px - a, - em - span - color: pink - -#one, -#two, -#three - div.nested, - span.nested, - p.nested - :font - :weight bold - :border-color red - :display block \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested.sass deleted file mode 100644 index a9ee4e0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested.sass +++ /dev/null @@ -1,25 +0,0 @@ -#main - :width 15em - :color #0000ff - p - :border - :style dotted - /* Nested comment - More nested stuff - :width 2px - .cool - :width 100px - -#left - :font - :size 2em - :weight bold - :float left - -#right - .header - :border-style solid - .body - :border-style dotted - .footer - :border-style dashed diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested_bork1.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested_bork1.sass deleted file mode 100644 index 638496e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested_bork1.sass +++ /dev/null @@ -1,2 +0,0 @@ - -@import bork1 diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested_bork2.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested_bork2.sass deleted file mode 100644 index 28b0bc8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested_bork2.sass +++ /dev/null @@ -1,2 +0,0 @@ - -@import bork2 diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested_bork3.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested_bork3.sass deleted file mode 100644 index eeccd66..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested_bork3.sass +++ /dev/null @@ -1,2 +0,0 @@ - -@import bork3 diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested_bork4.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested_bork4.sass deleted file mode 100644 index 173c947..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested_bork4.sass +++ /dev/null @@ -1,2 +0,0 @@ - -@import bork4 diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested_import.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested_import.sass deleted file mode 100644 index 24b48e5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested_import.sass +++ /dev/null @@ -1,2 +0,0 @@ -.foo - @import basic diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested_mixin_bork.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested_mixin_bork.sass deleted file mode 100644 index f79fdc7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/nested_mixin_bork.sass +++ /dev/null @@ -1,6 +0,0 @@ - - -=error-mixin - width: 1px * 1em - -@import mixin_bork diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/options.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/options.sass deleted file mode 100644 index 7e9d3c4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/options.sass +++ /dev/null @@ -1,2 +0,0 @@ -foo - style: option("style") \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/parent_ref.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/parent_ref.sass deleted file mode 100644 index 70cafb8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/parent_ref.sass +++ /dev/null @@ -1,25 +0,0 @@ -a - :color #000 - &:hover - :color #f00 - -p, div - :width 100em - & foo - :width 10em - &:hover, bar - :height 20em - -#cool - :border - :style solid - :width 2em - .ie7 &, .ie6 & - :content string("Totally not cool.") - .firefox & - :content string("Quite cool.") - -.wow, .snazzy - :font-family fantasy - &:hover, &:visited - :font-weight bold diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/same_name_different_ext.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/same_name_different_ext.sass deleted file mode 100644 index c00a8b5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/same_name_different_ext.sass +++ /dev/null @@ -1,2 +0,0 @@ -.foo - ext: sass diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/same_name_different_ext.scss b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/same_name_different_ext.scss deleted file mode 100644 index 38090ce..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/same_name_different_ext.scss +++ /dev/null @@ -1 +0,0 @@ -.foo {ext: scss} diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/same_name_different_partiality.scss b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/same_name_different_partiality.scss deleted file mode 100644 index 8ba7d06..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/same_name_different_partiality.scss +++ /dev/null @@ -1 +0,0 @@ -.foo {partial: no} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/script.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/script.sass deleted file mode 100644 index 3b3c85f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/script.sass +++ /dev/null @@ -1,101 +0,0 @@ -$width: 10em + 20 -$color: #00ff98 -$main_text: #ffa -$num: 10 -$dec: 10.2 -$dec_0: 99.0 -$neg: -10 -$esc: 10\+12 -$str: Hello\! -$qstr: "Quo\"ted\"!" -$hstr: Hyph-en\! -$space: #{5 + 4} hi there -$percent: 11% -$complex: 1px/1em - -#main - :content $str - :qstr $qstr - :hstr $hstr - :width $width - :background-color #000 - :color $main_text - :short-color #123 - :named-color olive - :con "foo" bar ($space "boom") - :con2 "noquo" quo - #sidebar - :background-color $color - :num - :normal $num - :dec $dec - :dec0 $dec_0 - :neg $neg - :esc $esc - :many 1 + 2 + 3 - :order 1 + 2 * 3 - :complex ((1 + 2) + 15)+#3a8b9f + (hi+(1 +1+ 2)* 4) - -#plus - :num - :num 5+2 - :num-un 10em + 15em - :num-un2 10 + 13em - :num-neg 10 + -.13 - :str 100 * 1px - :col 13 + #aaa - :perc $percent + 20% - :str - :str "hi" + "\ there" - :str2 "hi" + " there" - :col "14em solid " + #123 - :num "times: " + 13 - :col - :num #f02 + 123.5 - :col #12A + #405162 - -#minus - :num - :num 912 - 12 - :col - :num #fffffa - 5.2 - :col #abcdef - #fedcba - :unary - :num -1 - :const -$neg - :paren -(5 + 6) - :two --12 - :many --------12 - :crazy -----(5 + ---$neg) - -#times - :num - :num 2 * 3.5 - :col 2 * #3a4b5c - :col - :num #12468a * 0.5 - :col #121212 * #020304 - -#div - :num - :num (10 / 3.0) - :num2 (10 / 3) - :col - :num #12468a / 2 - :col #abcdef / #0f0f0f - :comp $complex * 1em - -#mod - :num - :num 17 % 3 - :col - :col #5f6e7d % #10200a - :num #aaabac % 3 - -#const - :escaped - :quote \$foo \!bar - :default $str !important - -#regression - :a (3 + 2) - 1 diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/scss_import.scss b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/scss_import.scss deleted file mode 100644 index b9c5c79..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/scss_import.scss +++ /dev/null @@ -1,12 +0,0 @@ -$preconst: hello; - -@mixin premixin {pre-mixin: here} - -@import "importee.sass", "scss_importee", "basic.sass", "basic.css", "../results/complex.css"; -@import "part\ -ial.sass"; - -nonimported { - myconst: $preconst; - otherconst: $postconst; - @include postmixin; } diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/scss_importee.scss b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/scss_importee.scss deleted file mode 100644 index df49e68..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/scss_importee.scss +++ /dev/null @@ -1 +0,0 @@ -scss {imported: yes} diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/single_import_loop.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/single_import_loop.sass deleted file mode 100644 index db50397..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/single_import_loop.sass +++ /dev/null @@ -1 +0,0 @@ -@import "single_import_loop" \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/subdir/import_up1.scss b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/subdir/import_up1.scss deleted file mode 100644 index 90559f5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/subdir/import_up1.scss +++ /dev/null @@ -1 +0,0 @@ -@import "../subdir/import_up2.scss"; \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/subdir/import_up2.scss b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/subdir/import_up2.scss deleted file mode 100644 index 22f5a59..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/subdir/import_up2.scss +++ /dev/null @@ -1 +0,0 @@ -@import "../subdir/import_up3.scss"; \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/subdir/nested_subdir/_nested_partial.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/subdir/nested_subdir/_nested_partial.sass deleted file mode 100644 index 04008f6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +++ /dev/null @@ -1,2 +0,0 @@ -#nested - :relative true diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/subdir/nested_subdir/nested_subdir.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/subdir/nested_subdir/nested_subdir.sass deleted file mode 100644 index aae9eeb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +++ /dev/null @@ -1,3 +0,0 @@ -#pi - :width 314px - \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/subdir/subdir.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/subdir/subdir.sass deleted file mode 100644 index 8fff002..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/subdir/subdir.sass +++ /dev/null @@ -1,6 +0,0 @@ -@import nested_subdir/nested_partial.sass - -#subdir - :font - :size 20px - :weight bold diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/units.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/units.sass deleted file mode 100644 index 47b7744..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/units.sass +++ /dev/null @@ -1,11 +0,0 @@ -b - :foo 0.5 * 10px - :bar 10zzz * 12px / 5zzz - :baz percentage(12.0px / 18px) - :many-units 10.0zzz / 3yyy * 12px / 5zzz * 3yyy / 3px * 4em - :mm 5mm + 1cm - :pc 1pc + 12pt - :pt 72pt - 2in - :inches 1in + 2.54cm - :more-inches 1in + ((72pt * 2in) + (36pt * 1in)) / 2.54cm - :mixed (1 + (1em * 6px / 3in)) * 4in / 2em diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/warn.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/warn.sass deleted file mode 100644 index 514c44a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/warn.sass +++ /dev/null @@ -1,3 +0,0 @@ -@warn "In the main file" -@import warn_imported.sass -+emits-a-warning diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/warn_imported.sass b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/warn_imported.sass deleted file mode 100644 index 493bd8a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/templates/warn_imported.sass +++ /dev/null @@ -1,4 +0,0 @@ -@warn "Imported" - -=emits-a-warning - @warn "In an imported mixin" diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/test_helper.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/test_helper.rb deleted file mode 100644 index eaa433f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/test_helper.rb +++ /dev/null @@ -1,8 +0,0 @@ -test_dir = File.dirname(__FILE__) -$:.unshift test_dir unless $:.include?(test_dir) - -class MiniTest::Test - def absolutize(file) - File.expand_path("#{File.dirname(__FILE__)}/#{file}") - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/util/multibyte_string_scanner_test.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/util/multibyte_string_scanner_test.rb deleted file mode 100755 index f8dbab7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/util/multibyte_string_scanner_test.rb +++ /dev/null @@ -1,147 +0,0 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- -require File.dirname(__FILE__) + '/../../test_helper' - -unless Sass::Util.ruby1_8? - class MultibyteStringScannerTest < MiniTest::Test - def setup - @scanner = Sass::Util::MultibyteStringScanner.new("cölorfül") - end - - def test_initial - assert_scanner_state 0, 0, nil, nil - end - - def test_check - assert_equal 'cö', @scanner.check(/../) - assert_scanner_state 0, 0, 2, 3 - assert_equal 0, @scanner.pos - assert_equal 0, @scanner.pos - assert_equal 2, @scanner.matched_size - assert_equal 3, @scanner.byte_matched_size - end - - def test_check_until - assert_equal 'cölorfü', @scanner.check_until(/f./) - assert_scanner_state 0, 0, 2, 3 - end - - def test_getch - assert_equal 'c', @scanner.getch - assert_equal 'ö', @scanner.getch - assert_scanner_state 2, 3, 1, 2 - end - - def test_match? - assert_equal 2, @scanner.match?(/../) - assert_scanner_state 0, 0, 2, 3 - end - - def test_peek - assert_equal 'cö', @scanner.peek(2) - assert_scanner_state 0, 0, nil, nil - end - - def test_rest_size - assert_equal 'cö', @scanner.scan(/../) - assert_equal 6, @scanner.rest_size - end - - def test_scan - assert_equal 'cö', @scanner.scan(/../) - assert_scanner_state 2, 3, 2, 3 - end - - def test_scan_until - assert_equal 'cölorfü', @scanner.scan_until(/f./) - assert_scanner_state 7, 9, 2, 3 - end - - def test_skip - assert_equal 2, @scanner.skip(/../) - assert_scanner_state 2, 3, 2, 3 - end - - def test_skip_until - assert_equal 7, @scanner.skip_until(/f./) - assert_scanner_state 7, 9, 2, 3 - end - - def test_set_pos - @scanner.pos = 7 - assert_scanner_state 7, 9, nil, nil - @scanner.pos = 6 - assert_scanner_state 6, 7, nil, nil - @scanner.pos = 1 - assert_scanner_state 1, 1, nil, nil - end - - def test_reset - @scanner.scan(/../) - @scanner.reset - assert_scanner_state 0, 0, nil, nil - end - - def test_scan_full - assert_equal 'cö', @scanner.scan_full(/../, true, true) - assert_scanner_state 2, 3, 2, 3 - - @scanner.reset - assert_equal 'cö', @scanner.scan_full(/../, false, true) - assert_scanner_state 0, 0, 2, 3 - - @scanner.reset - assert_nil @scanner.scan_full(/../, true, false) - assert_scanner_state 2, 3, 2, 3 - - @scanner.reset - assert_nil @scanner.scan_full(/../, false, false) - assert_scanner_state 0, 0, 2, 3 - end - - def test_search_full - assert_equal 'cölorfü', @scanner.search_full(/f./, true, true) - assert_scanner_state 7, 9, 2, 3 - - @scanner.reset - assert_equal 'cölorfü', @scanner.search_full(/f./, false, true) - assert_scanner_state 0, 0, 2, 3 - - @scanner.reset - assert_nil @scanner.search_full(/f./, true, false) - assert_scanner_state 7, 9, 2, 3 - - @scanner.reset - assert_nil @scanner.search_full(/f./, false, false) - assert_scanner_state 0, 0, 2, 3 - end - - def test_set_string - @scanner.scan(/../) - @scanner.string = 'föóbâr' - assert_scanner_state 0, 0, nil, nil - end - - def test_terminate - @scanner.scan(/../) - @scanner.terminate - assert_scanner_state 8, 10, nil, nil - end - - def test_unscan - @scanner.scan(/../) - @scanner.scan_until(/f./) - @scanner.unscan - assert_scanner_state 2, 3, nil, nil - end - - private - - def assert_scanner_state(pos, byte_pos, matched_size, byte_matched_size) - assert_equal pos, @scanner.pos, 'pos' - assert_equal byte_pos, @scanner.byte_pos, 'byte_pos' - assert_equal matched_size, @scanner.matched_size, 'matched_size' - assert_equal byte_matched_size, @scanner.byte_matched_size, 'byte_matched_size' - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/util/normalized_map_test.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/util/normalized_map_test.rb deleted file mode 100755 index 99a1719..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/util/normalized_map_test.rb +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../../test_helper' -require 'sass/util/normalized_map' - -class NormalizedMapTest < MiniTest::Test - extend PublicApiLinter - - lint_api Hash, Sass::Util::NormalizedMap - - def lint_instance - Sass::Util::NormalizedMap.new - end - - def test_normalized_map_errors_unless_explicitly_implemented - assert Sass.tests_running - assert_raise_message(ArgumentError, "The method invert must be implemented explicitly") do - Sass::Util::NormalizedMap.new.invert - end - end - - def test_normalized_map_does_not_error_when_released - Sass.tests_running = false - assert_equal({}, Sass::Util::NormalizedMap.new.invert) - ensure - Sass.tests_running = true - end - - def test_basic_lifecycle - m = Sass::Util::NormalizedMap.new - m["a-b"] = 1 - assert_equal ["a_b"], m.keys - assert_equal 1, m["a_b"] - assert_equal 1, m["a-b"] - assert m.has_key?("a_b") - assert m.has_key?("a-b") - assert_equal({"a-b" => 1}, m.as_stored) - assert_equal 1, m.delete("a-b") - assert !m.has_key?("a-b") - m["a_b"] = 2 - assert_equal({"a_b" => 2}, m.as_stored) - end - - def test_dup - m = Sass::Util::NormalizedMap.new - m["a-b"] = 1 - m2 = m.dup - m.delete("a-b") - assert !m.has_key?("a-b") - assert m2.has_key?("a-b") - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/util/subset_map_test.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/util/subset_map_test.rb deleted file mode 100755 index 9d42543..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/util/subset_map_test.rb +++ /dev/null @@ -1,91 +0,0 @@ -#!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../../test_helper' - -class SubsetMapTest < MiniTest::Test - def setup - @ssm = Sass::Util::SubsetMap.new - @ssm[Set[1, 2]] = "Foo" - @ssm[Set["fizz", "fazz"]] = "Bar" - - @ssm[Set[:foo, :bar]] = "Baz" - @ssm[Set[:foo, :bar, :baz]] = "Bang" - - @ssm[Set[:bip, :bop, :blip]] = "Qux" - @ssm[Set[:bip, :bop]] = "Thram" - end - - def test_equal_keys - assert_equal [["Foo", Set[1, 2]]], @ssm.get(Set[1, 2]) - assert_equal [["Bar", Set["fizz", "fazz"]]], @ssm.get(Set["fizz", "fazz"]) - end - - def test_subset_keys - assert_equal [["Foo", Set[1, 2]]], @ssm.get(Set[1, 2, "fuzz"]) - assert_equal [["Bar", Set["fizz", "fazz"]]], @ssm.get(Set["fizz", "fazz", 3]) - end - - def test_superset_keys - assert_equal [], @ssm.get(Set[1]) - assert_equal [], @ssm.get(Set[2]) - assert_equal [], @ssm.get(Set["fizz"]) - assert_equal [], @ssm.get(Set["fazz"]) - end - - def test_disjoint_keys - assert_equal [], @ssm.get(Set[3, 4]) - assert_equal [], @ssm.get(Set["fuzz", "frizz"]) - assert_equal [], @ssm.get(Set["gran", 15]) - end - - def test_semi_disjoint_keys - assert_equal [], @ssm.get(Set[2, 3]) - assert_equal [], @ssm.get(Set["fizz", "fuzz"]) - assert_equal [], @ssm.get(Set[1, "fazz"]) - end - - def test_empty_key_set - assert_raises(ArgumentError) {@ssm[Set[]] = "Fail"} - end - - def test_empty_key_get - assert_equal [], @ssm.get(Set[]) - end - - def test_multiple_subsets - assert_equal [["Foo", Set[1, 2]], ["Bar", Set["fizz", "fazz"]]], @ssm.get(Set[1, 2, "fizz", "fazz"]) - assert_equal [["Foo", Set[1, 2]], ["Bar", Set["fizz", "fazz"]]], @ssm.get(Set[1, 2, 3, "fizz", "fazz", "fuzz"]) - - assert_equal [["Baz", Set[:foo, :bar]]], @ssm.get(Set[:foo, :bar]) - assert_equal [["Baz", Set[:foo, :bar]], ["Bang", Set[:foo, :bar, :baz]]], @ssm.get(Set[:foo, :bar, :baz]) - end - - def test_bracket_bracket - assert_equal ["Foo"], @ssm[Set[1, 2, "fuzz"]] - assert_equal ["Baz", "Bang"], @ssm[Set[:foo, :bar, :baz]] - end - - def test_order_preserved - @ssm[Set[10, 11, 12]] = 1 - @ssm[Set[10, 11]] = 2 - @ssm[Set[11]] = 3 - @ssm[Set[11, 12]] = 4 - @ssm[Set[9, 10, 11, 12, 13]] = 5 - @ssm[Set[10, 13]] = 6 - - assert_equal( - [[1, Set[10, 11, 12]], [2, Set[10, 11]], [3, Set[11]], [4, Set[11, 12]], - [5, Set[9, 10, 11, 12, 13]], [6, Set[10, 13]]], - @ssm.get(Set[9, 10, 11, 12, 13])) - end - - def test_multiple_equal_values - @ssm[Set[11, 12]] = 1 - @ssm[Set[12, 13]] = 2 - @ssm[Set[13, 14]] = 1 - @ssm[Set[14, 15]] = 1 - - assert_equal( - [[1, Set[11, 12]], [2, Set[12, 13]], [1, Set[13, 14]], [1, Set[14, 15]]], - @ssm.get(Set[11, 12, 13, 14, 15])) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/util_test.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/util_test.rb deleted file mode 100755 index bcb7fda..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/test/sass/util_test.rb +++ /dev/null @@ -1,471 +0,0 @@ -#!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../test_helper' -require 'pathname' -require 'tmpdir' - -class UtilTest < MiniTest::Test - include Sass::Util - - def test_scope - assert(File.exist?(scope("Rakefile"))) - end - - def test_to_hash - assert_equal({ - :foo => 1, - :bar => 2, - :baz => 3 - }, to_hash([[:foo, 1], [:bar, 2], [:baz, 3]])) - end - - def test_map_keys - assert_equal({ - "foo" => 1, - "bar" => 2, - "baz" => 3 - }, map_keys({:foo => 1, :bar => 2, :baz => 3}) {|k| k.to_s}) - end - - def test_map_vals - assert_equal({ - :foo => "1", - :bar => "2", - :baz => "3" - }, map_vals({:foo => 1, :bar => 2, :baz => 3}) {|k| k.to_s}) - end - - def test_map_hash - assert_equal({ - "foo" => "1", - "bar" => "2", - "baz" => "3" - }, map_hash({:foo => 1, :bar => 2, :baz => 3}) {|k, v| [k.to_s, v.to_s]}) - end - - def test_map_hash_with_normalized_map - map = NormalizedMap.new("foo-bar" => 1, "baz_bang" => 2) - result = map_hash(map) {|k, v| [k, v.to_s]} - assert_equal("1", result["foo-bar"]) - assert_equal("1", result["foo_bar"]) - assert_equal("2", result["baz-bang"]) - assert_equal("2", result["baz_bang"]) - end - - def test_powerset - return unless Set[Set[]] == Set[Set[]] # There's a bug in Ruby 1.8.6 that breaks nested set equality - assert_equal([[].to_set].to_set, - powerset([])) - assert_equal([[].to_set, [1].to_set].to_set, - powerset([1])) - assert_equal([[].to_set, [1].to_set, [2].to_set, [1, 2].to_set].to_set, - powerset([1, 2])) - assert_equal([[].to_set, [1].to_set, [2].to_set, [3].to_set, - [1, 2].to_set, [2, 3].to_set, [1, 3].to_set, [1, 2, 3].to_set].to_set, - powerset([1, 2, 3])) - end - - def test_restrict - assert_equal(0.5, restrict(0.5, 0..1)) - assert_equal(1, restrict(2, 0..1)) - assert_equal(1.3, restrict(2, 0..1.3)) - assert_equal(0, restrict(-1, 0..1)) - end - - def test_merge_adjacent_strings - assert_equal(["foo bar baz", :bang, "biz bop", 12], - merge_adjacent_strings(["foo ", "bar ", "baz", :bang, "biz", " bop", 12])) - str = "foo" - assert_equal(["foo foo foo", :bang, "foo foo", 12], - merge_adjacent_strings([str, " ", str, " ", str, :bang, str, " ", str, 12])) - end - - def test_replace_subseq - assert_equal([1, 2, :a, :b, 5], - replace_subseq([1, 2, 3, 4, 5], [3, 4], [:a, :b])) - assert_equal([1, 2, 3, 4, 5], - replace_subseq([1, 2, 3, 4, 5], [3, 4, 6], [:a, :b])) - assert_equal([1, 2, 3, 4, 5], - replace_subseq([1, 2, 3, 4, 5], [4, 5, 6], [:a, :b])) - end - - def test_intersperse - assert_equal(["foo", " ", "bar", " ", "baz"], - intersperse(%w[foo bar baz], " ")) - assert_equal([], intersperse([], " ")) - end - - def test_substitute - assert_equal(["foo", "bar", "baz", 3, 4], - substitute([1, 2, 3, 4], [1, 2], ["foo", "bar", "baz"])) - assert_equal([1, "foo", "bar", "baz", 4], - substitute([1, 2, 3, 4], [2, 3], ["foo", "bar", "baz"])) - assert_equal([1, 2, "foo", "bar", "baz"], - substitute([1, 2, 3, 4], [3, 4], ["foo", "bar", "baz"])) - - assert_equal([1, "foo", "bar", "baz", 2, 3, 4], - substitute([1, 2, 2, 2, 3, 4], [2, 2], ["foo", "bar", "baz"])) - end - - def test_strip_string_array - assert_equal(["foo ", " bar ", " baz"], - strip_string_array([" foo ", " bar ", " baz "])) - assert_equal([:foo, " bar ", " baz"], - strip_string_array([:foo, " bar ", " baz "])) - assert_equal(["foo ", " bar ", :baz], - strip_string_array([" foo ", " bar ", :baz])) - end - - def test_paths - assert_equal([[1, 3, 5], [2, 3, 5], [1, 4, 5], [2, 4, 5]], - paths([[1, 2], [3, 4], [5]])) - assert_equal([[]], paths([])) - assert_equal([[1, 2, 3]], paths([[1], [2], [3]])) - end - - def test_lcs - assert_equal([1, 2, 3], lcs([1, 2, 3], [1, 2, 3])) - assert_equal([], lcs([], [1, 2, 3])) - assert_equal([], lcs([1, 2, 3], [])) - assert_equal([1, 2, 3], lcs([5, 1, 4, 2, 3, 17], [0, 0, 1, 2, 6, 3])) - - assert_equal([1], lcs([1, 2, 3, 4], [4, 3, 2, 1])) - assert_equal([1, 2], lcs([1, 2, 3, 4], [3, 4, 1, 2])) - end - - def test_lcs_with_block - assert_equal(["1", "2", "3"], - lcs([1, 4, 2, 5, 3], [1, 2, 3]) {|a, b| a == b && a.to_s}) - assert_equal([-4, 2, 8], - lcs([-5, 3, 2, 8], [-4, 1, 8]) {|a, b| (a - b).abs <= 1 && [a, b].max}) - end - - def test_group_by_to_a - assert_equal([[1, [1, 3, 5, 7]], [0, [2, 4, 6, 8]]], - group_by_to_a(1..8) {|i| i % 2}) - assert_equal([[1, [1, 4, 7, 10]], [2, [2, 5, 8, 11]], [0, [3, 6, 9, 12]]], - group_by_to_a(1..12) {|i| i % 3}) - end - - def test_subsequence - assert(subsequence?([1, 2, 3], [1, 2, 3])) - assert(subsequence?([1, 2, 3], [1, :a, 2, :b, 3])) - assert(subsequence?([1, 2, 3], [:a, 1, :b, :c, 2, :d, 3, :e, :f])) - - assert(!subsequence?([1, 2, 3], [1, 2])) - assert(!subsequence?([1, 2, 3], [1, 3, 2])) - assert(!subsequence?([1, 2, 3], [3, 2, 1])) - end - - def test_silence_warnings - old_stderr, $stderr = $stderr, StringIO.new - warn "Out" - assert_equal("Out\n", $stderr.string) - silence_warnings {warn "In"} - assert_equal("Out\n", $stderr.string) - ensure - $stderr = old_stderr - end - - def test_sass_warn - assert_warning("Foo!") {sass_warn "Foo!"} - end - - def test_silence_sass_warnings - old_stderr, $stderr = $stderr, StringIO.new - silence_sass_warnings {warn "Out"} - assert_equal("Out\n", $stderr.string) - silence_sass_warnings {sass_warn "In"} - assert_equal("Out\n", $stderr.string) - ensure - $stderr = old_stderr - end - - def test_has - assert(has?(:instance_method, String, :chomp!)) - assert(has?(:private_instance_method, Sass::Engine, :parse_interp)) - end - - def test_enum_with_index - assert_equal(%w[foo0 bar1 baz2], - enum_with_index(%w[foo bar baz]).map {|s, i| "#{s}#{i}"}) - end - - def test_enum_cons - assert_equal(%w[foobar barbaz], - enum_cons(%w[foo bar baz], 2).map {|s1, s2| "#{s1}#{s2}"}) - end - - def test_extract - arr = [1, 2, 3, 4, 5] - assert_equal([1, 3, 5], extract!(arr) {|e| e % 2 == 1}) - assert_equal([2, 4], arr) - end - - def test_ord - assert_equal(102, ord("f")) - assert_equal(98, ord("bar")) - end - - def test_flatten - assert_equal([1, 2, 3], flatten([1, 2, 3], 0)) - assert_equal([1, 2, 3], flatten([1, 2, 3], 1)) - assert_equal([1, 2, 3], flatten([1, 2, 3], 2)) - - assert_equal([[1, 2], 3], flatten([[1, 2], 3], 0)) - assert_equal([1, 2, 3], flatten([[1, 2], 3], 1)) - assert_equal([1, 2, 3], flatten([[1, 2], 3], 2)) - - assert_equal([[[1], 2], [3], 4], flatten([[[1], 2], [3], 4], 0)) - assert_equal([[1], 2, 3, 4], flatten([[[1], 2], [3], 4], 1)) - assert_equal([1, 2, 3, 4], flatten([[[1], 2], [3], 4], 2)) - end - - def test_flatten_vertically - assert_equal([1, 2, 3], flatten_vertically([1, 2, 3])) - assert_equal([1, 3, 5, 2, 4, 6], flatten_vertically([[1, 2], [3, 4], [5, 6]])) - assert_equal([1, 2, 4, 3, 5, 6], flatten_vertically([1, [2, 3], [4, 5, 6]])) - assert_equal([1, 4, 6, 2, 5, 3], flatten_vertically([[1, 2, 3], [4, 5], 6])) - end - - def test_set_hash - assert(set_hash(Set[1, 2, 3]) == set_hash(Set[3, 2, 1])) - assert(set_hash(Set[1, 2, 3]) == set_hash(Set[1, 2, 3])) - - s1 = Set[] - s1 << 1 - s1 << 2 - s1 << 3 - s2 = Set[] - s2 << 3 - s2 << 2 - s2 << 1 - assert(set_hash(s1) == set_hash(s2)) - end - - def test_set_eql - assert(set_eql?(Set[1, 2, 3], Set[3, 2, 1])) - assert(set_eql?(Set[1, 2, 3], Set[1, 2, 3])) - - s1 = Set[] - s1 << 1 - s1 << 2 - s1 << 3 - s2 = Set[] - s2 << 3 - s2 << 2 - s2 << 1 - assert(set_eql?(s1, s2)) - end - - def test_extract_and_inject_values - test = lambda {|arr| assert_equal(arr, with_extracted_values(arr) {|str| str})} - - test[['foo bar']] - test[['foo {12} bar']] - test[['foo {{12} bar']] - test[['foo {{1', 12, '2} bar']] - test[['foo 1', 2, '{3', 4, 5, 6, '{7}', 8]] - test[['foo 1', [2, 3, 4], ' bar']] - test[['foo ', 1, "\n bar\n", [2, 3, 4], "\n baz"]] - end - - def nested_caller_info_fn - caller_info - end - - def double_nested_caller_info_fn - nested_caller_info_fn - end - - def test_caller_info - assert_equal(["/tmp/foo.rb", 12, "fizzle"], caller_info("/tmp/foo.rb:12: in `fizzle'")) - assert_equal(["/tmp/foo.rb", 12, nil], caller_info("/tmp/foo.rb:12")) - assert_equal(["C:/tmp/foo.rb", 12, nil], caller_info("C:/tmp/foo.rb:12")) - assert_equal(["(sass)", 12, "blah"], caller_info("(sass):12: in `blah'")) - assert_equal(["", 12, "boop"], caller_info(":12: in `boop'")) - assert_equal(["/tmp/foo.rb", -12, "fizzle"], caller_info("/tmp/foo.rb:-12: in `fizzle'")) - assert_equal(["/tmp/foo.rb", 12, "fizzle"], caller_info("/tmp/foo.rb:12: in `fizzle {}'")) - assert_equal(["C:/tmp/foo.rb", 12, "fizzle"], caller_info("C:/tmp/foo.rb:12: in `fizzle {}'")) - - info = nested_caller_info_fn - assert_equal(__FILE__, info[0]) - assert_equal("test_caller_info", info[2]) - - info = proc {nested_caller_info_fn}.call - assert_equal(__FILE__, info[0]) - assert_match(/^(block in )?test_caller_info$/, info[2]) - - info = double_nested_caller_info_fn - assert_equal(__FILE__, info[0]) - assert_equal("double_nested_caller_info_fn", info[2]) - - info = proc {double_nested_caller_info_fn}.call - assert_equal(__FILE__, info[0]) - assert_equal("double_nested_caller_info_fn", info[2]) - end - - def test_version_gt - assert_version_gt("2.0.0", "1.0.0") - assert_version_gt("1.1.0", "1.0.0") - assert_version_gt("1.0.1", "1.0.0") - assert_version_gt("1.0.0", "1.0.0.rc") - assert_version_gt("1.0.0.1", "1.0.0.rc") - assert_version_gt("1.0.0.rc", "0.9.9") - assert_version_gt("1.0.0.beta", "1.0.0.alpha") - - assert_version_eq("1.0.0", "1.0.0") - assert_version_eq("1.0.0", "1.0.0.0") - end - - def assert_version_gt(v1, v2) - #assert(version_gt(v1, v2), "Expected #{v1} > #{v2}") - assert(!version_gt(v2, v1), "Expected #{v2} < #{v1}") - end - - def assert_version_eq(v1, v2) - assert(!version_gt(v1, v2), "Expected #{v1} = #{v2}") - assert(!version_gt(v2, v1), "Expected #{v2} = #{v1}") - end - - class FooBar - def foo - Sass::Util.abstract(self) - end - def old_method - Sass::Util.deprecated(self) - end - def old_method_with_custom_message - Sass::Util.deprecated(self, "Call FooBar#new_method instead.") - end - def self.another_old_method - Sass::Util.deprecated(self) - end - end - - def test_abstract - assert_raise_message(NotImplementedError, - "UtilTest::FooBar must implement #foo") {FooBar.new.foo} - end - - def test_deprecated - assert_warning("DEPRECATION WARNING: UtilTest::FooBar#old_method will be removed in a future version of Sass.") { FooBar.new.old_method } - assert_warning(< e - assert_instance_of(klass, e) - assert_equal(message, e.message) - else - flunk "Expected exception #{klass}, none raised" - end - - def assert_raise_line(line) - yield - rescue Sass::SyntaxError => e - assert_equal(line, e.sass_line) - else - flunk "Expected exception on line #{line}, none raised" - end -end - -module PublicApiLinter - def lint_api(api_class, duck_type_class) - define_method :test_lint_instance do - assert lint_instance.is_a?(duck_type_class) - end - api_class.instance_methods.each do |meth| - define_method :"test_has_#{meth}" do - assert lint_instance.respond_to?(meth), - "#{duck_type_class.name} does not implement #{meth}" - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/CHANGELOG.md b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/CHANGELOG.md deleted file mode 100644 index 877461f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/CHANGELOG.md +++ /dev/null @@ -1 +0,0 @@ -# Moved to [Github releases](https://github.com/guard/listen/releases) page. diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/CONTRIBUTING.md b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/CONTRIBUTING.md deleted file mode 100644 index 8db7f5b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/CONTRIBUTING.md +++ /dev/null @@ -1,38 +0,0 @@ -Contribute to Listen -=================== - -File an issue -------------- - -You can report bugs and feature requests to [GitHub Issues](https://github.com/guard/listen/issues). - -**Please don't ask question in the issue tracker**, instead ask them in our -[Google group](http://groups.google.com/group/guard-dev) or on `#guard` (irc.freenode.net). - -Try to figure out where the issue belongs to: Is it an issue with Listen itself or with Guard? - -When you file a bug, please try to follow these simple rules if applicable: - -* Make sure you run Listen with `bundle exec` first. -* Add your `Guardfile` (if used) and `Gemfile` to the issue. -* Make sure that the issue is reproducible with your description. - -**It's most likely that your bug gets resolved faster if you provide as much information as possible!** - -Development ------------ - -* Documentation hosted at [RubyDoc](http://rubydoc.info/github/guard/listen/master/frames). -* Source hosted at [GitHub](https://github.com/guard/listen). - -Pull requests are very welcome! Please try to follow these simple rules if applicable: - -* Please create a topic branch for every separate change you make. -* Make sure your patches are well tested. All specs run with `rake spec` must pass. -* Update the [Yard](http://yardoc.org/) documentation. -* Update the [README](https://github.com/guard/listen/blob/master/README.md). -* Update the [CHANGELOG](https://github.com/guard/listen/blob/master/CHANGELOG.md) for noteworthy changes. -* Please **do not change** the version number. - -For questions please join us in our [Google group](http://groups.google.com/group/guard-dev) or on -`#guard` (irc.freenode.net). diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/Gemfile b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/Gemfile deleted file mode 100644 index 9609578..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/Gemfile +++ /dev/null @@ -1,20 +0,0 @@ -source 'https://rubygems.org' - -gemspec - -gem 'rake' - -require 'rbconfig' -gem 'wdm', '>= 0.1.0' if RbConfig::CONFIG['target_os'] =~ /mswin|mingw/i - -group :development do - gem 'guard-rspec' - gem 'yard' - gem 'redcarpet' - gem 'pimpmychangelog' -end - -group :test do - gem 'rspec' - gem 'coveralls', :require => false -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/Guardfile b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/Guardfile deleted file mode 100644 index f5a4cd7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/Guardfile +++ /dev/null @@ -1,8 +0,0 @@ -guard :rspec, :all_on_start => false, :all_after_pass => false do - watch(%r{^spec/.+_spec\.rb$}) - watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" } - watch('spec/support/adapter_helper.rb') { "spec/listen/adapters" } - watch('spec/support/listener_helper.rb') { "spec/listen/listener_spec.rb" } - watch('spec/support/fixtures_helper.rb') { "spec" } - watch('spec/spec_helper.rb') { "spec" } -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/LICENSE b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/LICENSE deleted file mode 100644 index 9c5c40f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2013 Thibaud Guillaume-Gentil - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/README.md b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/README.md deleted file mode 100644 index ff0ec33..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/README.md +++ /dev/null @@ -1,349 +0,0 @@ -# Listen [![Gem Version](https://badge.fury.io/rb/listen.png)](http://badge.fury.io/rb/listen) [![Build Status](https://secure.travis-ci.org/guard/listen.png?branch=master)](http://travis-ci.org/guard/listen) [![Dependency Status](https://gemnasium.com/guard/listen.png)](https://gemnasium.com/guard/listen) [![Code Climate](https://codeclimate.com/github/guard/listen.png)](https://codeclimate.com/github/guard/listen) [![Coverage Status](https://coveralls.io/repos/guard/listen/badge.png?branch=master)](https://coveralls.io/r/guard/listen) - -The Listen gem listens to file modifications and notifies you about the changes. - -## Features - -* Works everywhere! -* Supports watching multiple directories from a single listener. -* OS-specific adapters for Mac OS X 10.6+, Linux, *BSD and Windows. -* Automatic fallback to polling if OS-specific adapter doesn't work. -* Detects file modification, addition and removal. -* File content checksum comparison for modifications made under the same second. -* Allows supplying regexp-patterns to ignore and filter paths for better results. -* Tested on all Ruby environments via [Travis CI](https://travis-ci.org/guard/listen). - -## Pending features - -Still not implemented, pull requests are welcome. - -* Symlinks support. [#25](https://github.com/guard/listen/issues/25) -* Signal handling. [#105](https://github.com/guard/listen/issues/105) -* Non-recursive directory scanning. [#111](https://github.com/guard/listen/issues/111) - -## Install - -### Using Bundler - -The simplest way to install Listen is to use Bundler. - -Add Listen to your Gemfile: - -```ruby -group :development do - gem 'listen' -end -``` - -and install it by running Bundler: - -```bash -$ bundle -``` - -### Install the gem with RubyGems - -```bash -$ gem install listen -``` - -### On Windows - -If your are on Windows and using Ruby MRI >= 1.9.2 you can try to use the [`wdm`](https://github.com/Maher4Ever/wdm) instead of polling. -Please add the following to your Gemfile: - -```ruby -require 'rbconfig' -gem 'wdm', '>= 0.1.0' if RbConfig::CONFIG['target_os'] =~ /mswin|mingw/i -``` - -## Usage - -There are **two ways** to use Listen: - -1. Block API: Call `Listen.to`/`Listen.to!` with either a single directory or multiple directories, then define the `change` callback in a block. -2. "Object" API: Create a `listener` object and use it in a chainable way. - -### Block API - -``` ruby -# Listen to a single directory. -Listen.to('dir/path/to/listen', :filter => /\.rb$/, :ignore => %r{ignored/path/}) do |modified, added, removed| - # ... -end - -# Listen to multiple directories. -Listen.to('dir/to/awesome_app', 'dir/to/other_app', :filter => /\.rb$/, :latency => 0.1) do |modified, added, removed| - # ... -end -``` - -### "Object" API - -``` ruby -listener = Listen.to('dir/path/to/listen') -listener = listener.ignore(%r{^ignored/path/}) -listener = listener.filter(/\.rb$/) -listener = listener.latency(0.5) -listener = listener.force_polling(true) -listener = listener.polling_fallback_message(false) -listener = listener.force_adapter(Listen::Adapters::Linux) -listener = listener.change(&callback) -listener.start -``` - -**Note**: All the "Object" API methods except `start`/`start!` return the listener -and are thus chainable: - -``` ruby -Listen.to('dir/path/to/listen') - .ignore(%r{^ignored/path/}) - .filter(/\.rb$/) - .latency(0.5) - .force_polling(true) - .polling_fallback_message('custom message') - .change(&callback) - .start -``` - -### Pause/Unpause - -Listener can also easily be paused/unpaused: - -``` ruby -listener = Listen.to('dir/path/to/listen') -listener.start # non-blocking mode -listener.pause # stop listening to changes -listener.paused? # => true -listener.unpause # start listening to changes again -listener.stop # stop completely the listener -``` - -## Changes callback - -Changes to the listened-to directories gets reported back to the user in a callback. -The registered callback gets invoked, when there are changes, with **three** parameters: -`modified_paths`, `added_paths` and `removed_paths` in that particular order. - -You can register a callback in two ways. The first way is by passing a block when calling -the `Listen.to`/`Listen.to!` method or when initializing a listener object: - -```ruby -Listen.to('path/to/app') do |modified, added, removed| - # This block will be called when there are changes. -end - -# or ... - -listener = Listen::Listener.new('path/to/app') do |modified, added, removed| - # This block will be called when there are changes. -end - -``` - -The second way to register a callback is by calling the `#change` method on a -listener passing it a block: - -```ruby -# Create a callback -callback = Proc.new do |modified, added, removed| - # This proc will be called when there are changes. -end - -listener = Listen.to('dir') -listener.change(&callback) # convert the callback to a block and register it - -listener.start -``` - -### Paths in callbacks - -Listeners invoke callbacks passing them absolute paths by default: - -```ruby -# Assume someone changes the 'style.css' file in '/home/user/app/css' after creating -# the listener. -Listen.to('/home/user/app/css') do |modified, added, removed| - modified.inspect # => ['/home/user/app/css/style.css'] -end -``` - -#### Relative paths in callbacks - -When creating a listener for a **single** path (more specifically a `Listen::Listener` instance), -you can pass `:relative_paths => true` as an option to get relative paths in -your callback: - -```ruby -# Assume someone changes the 'style.css' file in '/home/user/app/css' after creating -# the listener. -Listen.to('/home/user/app/css', :relative_paths => true) do |modified, added, removed| - modified.inspect # => ['style.css'] -end -``` - -Passing the `:relative_paths => true` option won't work when listening to multiple -directories: - -```ruby -# Assume someone changes the 'style.css' file in '/home/user/app/css' after creating -# the listener. -Listen.to('/home/user/app/css', '/home/user/app/js', :relative_paths => true) do |modified, added, removed| - modified.inspect # => ['/home/user/app/css/style.css'] -end -``` - -## Options - -All the following options can be set through the `Listen.to`/`Listen.to!` params -or via ["Object" API](#object-api) methods: - -```ruby -:ignore => %r{app/CMake/}, /\.pid$/ # Ignore a list of paths (root directory or sub-dir) - # default: See DEFAULT_IGNORED_DIRECTORIES and DEFAULT_IGNORED_EXTENSIONS in Listen::DirectoryRecord - -:filter => /\.rb$/, /\.coffee$/ # Filter files to listen to via a regexps list. - # default: none - -:latency => 0.5 # Set the delay (**in seconds**) between checking for changes - # default: 0.25 sec (1.0 sec for polling) - -:force_adapter => Listen::Adapters::Linux # Force the use of a particular adapter class - # default: none - -:force_polling => true # Force the use of the polling adapter - # default: none - -:polling_fallback_message => 'custom message' # Set a custom polling fallback message (or disable it with false) - # default: "Listen will be polling for changes. Learn more at https://github.com/guard/listen#polling-fallback." - -:relative_paths => true # Enable the use of relative paths in the callback. - # default: false -``` - -### Note on the patterns for ignoring and filtering paths - -Just like the unix convention of beginning absolute paths with the -directory-separator (forward slash `/` in unix) and with no prefix for relative paths, -Listen doesn't prefix relative paths (to the watched directory) with a directory-separator. - -Therefore make sure _NOT_ to prefix your regexp-patterns for filtering or ignoring paths -with a directory-separator, otherwise they won't work as expected. - -As an example: to ignore the `build` directory in a C-project, use `%r{build/}` -and not `%r{/build/}`. - -Use `#filter!` and `#ignore!` methods to overwrites default patterns. - -## Blocking listening to changes - -Calling `Listen.to` with a block doesn't block the current thread. If you want -to block the current thread instead until the listener is stopped (which needs -to be done from another thread), you can use `Listen.to!`. - -Similarly, if you're using the "Object" API, you can use `#start!` instead of `#start` to block the -current thread until the listener is stopped. - -Here is an example of using a listener in the blocking mode: - -```ruby -Listen.to!('dir/path/to/listen') # block execution - -# Code here will not run until the listener is stopped - -``` - -Here is an example of using a listener started with the "Object" API in blocking mode: - -```ruby -listener = Listen.to('dir/path/to/listen') -listener.start! # block execution - -# Code here will not run until the listener is stopped - -``` - -**Note**: Using the `Listen.to!` helper-method with or without a callback-block -will always start the listener right away and block execution of the current thread. - -## Listen adapters - -The Listen gem has a set of adapters to notify it when there are changes. -There are 4 OS-specific adapters to support Mac, Linux, *BSD and Windows. -These adapters are fast as they use some system-calls to implement the notifying function. - -There is also a polling adapter which is a cross-platform adapter and it will -work on any system. This adapter is unfortunately slower than the rest of the adapters. - -The Listen gem will choose the best and working adapter for your machine automatically. If you -want to force the use of the polling adapter, either use the `:force_polling` option -while initializing the listener or call the `#force_polling` method on your listener -before starting it. - -It is also possible to force the use of a particular adapter, by using the `:force_adapter` -option. This option skips the usual adapter choosing mechanism and uses the given -adapter class instead. The adapter choosing mechanism requires write permission -to your watched directories and will needlessly load code, which isn't always desirable. - -## Polling fallback - -When a OS-specific adapter doesn't work the Listen gem automatically falls back to the polling adapter. -Here are some things you could try to avoid the polling fallback: - -* [Update your Dropbox client](http://www.dropbox.com/downloading) (if used). -* Increase latency. (Please [open an issue](https://github.com/guard/listen/issues/new) -if you think that default is too low.) -* Move or rename the listened folder. -* Update/reboot your OS. - -If your application keeps using the polling-adapter and you can't figure out why, feel free to [open an issue](https://github.com/guard/listen/issues/new) (and be sure to [give all the details](https://github.com/guard/listen/blob/master/CONTRIBUTING.md)). - -## Development [![Dependency Status](https://gemnasium.com/guard/listen.png?branch=master)](https://gemnasium.com/guard/listen) - -* Documentation hosted at [RubyDoc](http://rubydoc.info/github/guard/listen/master/frames). -* Source hosted at [GitHub](https://github.com/guard/listen). - -Pull requests are very welcome! Please try to follow these simple rules if applicable: - -* Please create a topic branch for every separate change you make. -* Make sure your patches are well tested. All specs must pass on [Travis CI](https://travis-ci.org/guard/listen). -* Update the [Yard](http://yardoc.org/) documentation. -* Update the [README](https://github.com/guard/listen/blob/master/README.md). -* Update the [CHANGELOG](https://github.com/guard/listen/blob/master/CHANGELOG.md) for noteworthy changes (don't forget to run `bundle exec pimpmychangelog` and watch the magic happen)! -* Please **do not change** the version number. - -For questions please join us in our [Google group](http://groups.google.com/group/guard-dev) or on -`#guard` (irc.freenode.net). - -## Acknowledgments - -* [Michael Kessler (netzpirat)][] for having written the [initial specs](https://github.com/guard/listen/commit/1e457b13b1bb8a25d2240428ce5ed488bafbed1f). -* [Travis Tilley (ttilley)][] for this awesome work on [fssm][] & [rb-fsevent][]. -* [Nathan Weizenbaum (nex3)][] for [rb-inotify][], a thorough inotify wrapper. -* [Mathieu Arnold (mat813)][] for [rb-kqueue][], a simple kqueue wrapper. -* [stereobooster][] for [rb-fchange][], windows support wouldn't exist without him. -* [Yehuda Katz (wycats)][] for [vigilo][], that has been a great source of inspiration. - -## Authors - -* [Thibaud Guillaume-Gentil][] ([@thibaudgg](http://twitter.com/thibaudgg)) -* [Maher Sallam][] ([@mahersalam](http://twitter.com/mahersalam)) - -## Contributors - -[https://github.com/guard/listen/contributors](https://github.com/guard/listen/contributors) - -[Thibaud Guillaume-Gentil]: https://github.com/thibaudgg -[Maher Sallam]: https://github.com/Maher4Ever -[Michael Kessler (netzpirat)]: https://github.com/netzpirat -[Travis Tilley (ttilley)]: https://github.com/ttilley -[fssm]: https://github.com/ttilley/fssm -[rb-fsevent]: https://github.com/thibaudgg/rb-fsevent -[Mathieu Arnold (mat813)]: https://github.com/mat813 -[Nathan Weizenbaum (nex3)]: https://github.com/nex3 -[rb-inotify]: https://github.com/nex3/rb-inotify -[stereobooster]: https://github.com/stereobooster -[rb-fchange]: https://github.com/stereobooster/rb-fchange -[rb-kqueue]: https://github.com/mat813/rb-kqueue -[Yehuda Katz (wycats)]: https://github.com/wycats -[vigilo]: https://github.com/wycats/vigilo diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/Rakefile b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/Rakefile deleted file mode 100644 index 87da91c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/Rakefile +++ /dev/null @@ -1,5 +0,0 @@ -require 'bundler/gem_tasks' -require 'rspec/core/rake_task' - -RSpec::Core::RakeTask.new(:spec) -task :default => :spec diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/Vagrantfile b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/Vagrantfile deleted file mode 100644 index ad1aa97..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/Vagrantfile +++ /dev/null @@ -1,96 +0,0 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : - -Vagrant::Config.run do |config| - # All Vagrant configuration is done here. The most common configuration - # options are documented and commented below. For a complete reference, - # please see the online documentation at vagrantup.com. - - # Every Vagrant virtual environment requires a box to build off of. - config.vm.box = "lucid32" - - # The url from where the 'config.vm.box' box will be fetched if it - # doesn't already exist on the user's system. - # config.vm.box_url = "http://domain.com/path/to/above.box" - - # Boot with a GUI so you can see the screen. (Default is headless) - # config.vm.boot_mode = :gui - - # Assign this VM to a host-only network IP, allowing you to access it - # via the IP. Host-only networks can talk to the host machine as well as - # any other machines on the same network, but cannot be accessed (through this - # network interface) by any external networks. - # config.vm.network :hostonly, "33.33.33.10" - - # Assign this VM to a bridged network, allowing you to connect directly to a - # network using the host's network device. This makes the VM appear as another - # physical device on your network. - # config.vm.network :bridged - - # Forward a port from the guest to the host, which allows for outside - # computers to access the VM, whereas host only networking does not. - # config.vm.forward_port 80, 8080 - - # Share an additional folder to the guest VM. The first argument is - # an identifier, the second is the path on the guest to mount the - # folder, and the third is the path on the host to the actual folder. - # config.vm.share_folder "v-data", "/vagrant_data", "../data" - - # Enable provisioning with Puppet stand alone. Puppet manifests - # are contained in a directory path relative to this Vagrantfile. - # You will need to create the manifests directory and a manifest in - # the file lucid32.pp in the manifests_path directory. - # - # An example Puppet manifest to provision the message of the day: - # - # # group { "puppet": - # # ensure => "present", - # # } - # # - # # File { owner => 0, group => 0, mode => 0644 } - # # - # # file { '/etc/motd': - # # content => "Welcome to your Vagrant-built virtual machine! - # # Managed by Puppet.\n" - # # } - # - # config.vm.provision :puppet do |puppet| - # puppet.manifests_path = "manifests" - # puppet.manifest_file = "lucid32.pp" - # end - - # Enable provisioning with chef solo, specifying a cookbooks path (relative - # to this Vagrantfile), and adding some recipes and/or roles. - # - # config.vm.provision :chef_solo do |chef| - # chef.cookbooks_path = "cookbooks" - # chef.add_recipe "mysql" - # chef.add_role "web" - # - # # You may also specify custom JSON attributes: - # chef.json = { :mysql_password => "foo" } - # end - - # Enable provisioning with chef server, specifying the chef server URL, - # and the path to the validation key (relative to this Vagrantfile). - # - # The Opscode Platform uses HTTPS. Substitute your organization for - # ORGNAME in the URL and validation key. - # - # If you have your own Chef Server, use the appropriate URL, which may be - # HTTP instead of HTTPS depending on your configuration. Also change the - # validation key to validation.pem. - # - # config.vm.provision :chef_client do |chef| - # chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME" - # chef.validation_key_path = "ORGNAME-validator.pem" - # end - # - # If you're using the Opscode platform, your validator client is - # ORGNAME-validator, replacing ORGNAME with your organization name. - # - # IF you have your own Chef Server, the default validation client name is - # chef-validator, unless you changed the configuration. - # - # chef.validation_client_name = "ORGNAME-validator" -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen.rb deleted file mode 100644 index 9b3fdf2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen.rb +++ /dev/null @@ -1,54 +0,0 @@ -require 'listen/turnstile' -require 'listen/listener' -require 'listen/directory_record' -require 'listen/adapter' - -module Listen - - module Adapters - Adapter::ADAPTERS.each do |adapter| - require "listen/adapters/#{adapter.downcase}" - end - end - - # Listens to file system modifications on a either single directory or multiple directories. - # When calling this method, the current thread is not blocked. - # - # @param (see Listen::Listener#new) - # - # @yield [modified, added, removed] the changed files - # @yieldparam [Array] modified the list of modified files - # @yieldparam [Array] added the list of added files - # @yieldparam [Array] removed the list of removed files - # - # @return [Listen::Listener] the file listener if no block given - # - def self.to(*args, &block) - listener = _init_listener(*args, &block) - - block ? listener.start : listener - end - - # Listens to file system modifications on a either single directory or multiple directories. - # When calling this method, the current thread is blocked. - # - # @param (see Listen::Listener#new) - # - # @yield [modified, added, removed] the changed files - # @yieldparam [Array] modified the list of modified files - # @yieldparam [Array] added the list of added files - # @yieldparam [Array] removed the list of removed files - # - # @since 1.0.0 - # - def self.to!(*args, &block) - _init_listener(*args, &block).start! - end - - # @private - # - def self._init_listener(*args, &block) - Listener.new(*args, &block) - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/adapter.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/adapter.rb deleted file mode 100644 index 4a0abec..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/adapter.rb +++ /dev/null @@ -1,327 +0,0 @@ -require 'rbconfig' -require 'thread' -require 'set' -require 'fileutils' - -module Listen - class Adapter - attr_accessor :directories, :callback, :stopped, :paused, - :mutex, :changed_directories, :turnstile, :latency, - :worker, :worker_thread, :poller_thread - - # The list of existing optimized adapters. - OPTIMIZED_ADAPTERS = %w[Darwin Linux BSD Windows] - - # The list of existing fallback adapters. - FALLBACK_ADAPTERS = %w[Polling] - - # The list of all existing adapters. - ADAPTERS = OPTIMIZED_ADAPTERS + FALLBACK_ADAPTERS - - # The default delay between checking for changes. - DEFAULT_LATENCY = 0.25 - - # The default warning message when falling back to polling adapter. - POLLING_FALLBACK_MESSAGE = <<-EOS.gsub(/^\s*/, '') - Listen will be polling for changes. Learn more at https://github.com/guard/listen#polling-fallback. - EOS - - # Selects the appropriate adapter implementation for the - # current OS and initializes it. - # - # @param [String, Array] directories the directories to watch - # @param [Hash] options the adapter options - # @option options [Boolean] force_polling to force polling or not - # @option options [String, Boolean] polling_fallback_message to change polling fallback message or remove it - # @option options [Float] latency the delay between checking for changes in seconds - # - # @yield [changed_directories, options] callback the callback called when a change happens - # @yieldparam [Array] changed_directories the changed directories - # @yieldparam [Hash] options callback options (like recursive: true) - # - # @return [Listen::Adapter] the chosen adapter - # - def self.select_and_initialize(directories, options = {}, &callback) - forced_adapter_class = options.delete(:force_adapter) - force_polling = options.delete(:force_polling) - - if forced_adapter_class - forced_adapter_class.load_dependent_adapter - return forced_adapter_class.new(directories, options, &callback) - end - - return Adapters::Polling.new(directories, options, &callback) if force_polling - - OPTIMIZED_ADAPTERS.each do |adapter| - namespaced_adapter = Adapters.const_get(adapter) - if namespaced_adapter.send(:usable_and_works?, directories, options) - return namespaced_adapter.new(directories, options, &callback) - end - end - - self.warn_polling_fallback(options) - Adapters::Polling.new(directories, options, &callback) - end - - # Initializes the adapter. - # - # @param [String, Array] directories the directories to watch - # @param [Hash] options the adapter options - # @option options [Float] latency the delay between checking for changes in seconds - # - # @yield [changed_directories, options] callback Callback called when a change happens - # @yieldparam [Array] changed_directories the changed directories - # @yieldparam [Hash] options callback options (like recursive: true) - # - # @return [Listen::Adapter] the adapter - # - def initialize(directories, options = {}, &callback) - @directories = Array(directories) - @callback = callback - @stopped = true - @paused = false - @mutex = Mutex.new - @changed_directories = Set.new - @turnstile = Turnstile.new - @latency = options.fetch(:latency, default_latency) - @worker = initialize_worker - end - - # Starts the adapter and don't block the current thread. - # - # @param [Boolean] blocking whether or not to block the current thread after starting - # - def start - mutex.synchronize do - return unless stopped - @stopped = false - end - - start_worker - start_poller - end - - # Starts the adapter and block the current thread. - # - # @since 1.0.0 - # - def start! - start - blocking_thread.join - end - - # Stops the adapter. - # - def stop - mutex.synchronize do - return if stopped - @stopped = true - turnstile.signal # ensure no thread is blocked - end - - worker.stop if worker - Thread.kill(worker_thread) if worker_thread - if poller_thread - poller_thread.kill - poller_thread.join - end - end - - # Pauses the adapter. - # - def pause - @paused = true - end - - # Unpauses the adapter. - # - def unpause - @paused = false - end - - # Returns whether the adapter is started or not. - # - # @return [Boolean] whether the adapter is started or not - # - def started? - !stopped - end - - # Returns whether the adapter is paused or not. - # - # @return [Boolean] whether the adapter is paused or not - # - def paused? - paused - end - - # Blocks the main thread until the poll thread - # runs the callback. - # - def wait_for_callback - turnstile.wait unless paused - end - - # Blocks the main thread until N changes are - # detected. - # - def wait_for_changes(threshold = 0) - changes = 0 - - loop do - mutex.synchronize { changes = changed_directories.size } - - return if paused || stopped - return if changes >= threshold - - sleep(latency) - end - end - - # Checks if the adapter is usable and works on the current OS. - # - # @param [String, Array] directories the directories to watch - # @param [Hash] options the adapter options - # @option options [Float] latency the delay between checking for changes in seconds - # - # @return [Boolean] whether the adapter is usable and work or not - # - def self.usable_and_works?(directories, options = {}) - usable? && Array(directories).all? { |d| works?(d, options) } - end - - # Checks if the adapter is usable on target OS. - # - # @return [Boolean] whether usable or not - # - def self.usable? - load_dependent_adapter if RbConfig::CONFIG['target_os'] =~ target_os_regex - end - - # Load the adapter gem - # - # @return [Boolean] whether loaded or not - # - def self.load_dependent_adapter - return true if @loaded - require adapter_gem - return @loaded = true - rescue LoadError - false - end - - # Runs a tests to determine if the adapter can actually pick up - # changes in a given directory and returns the result. - # - # @note This test takes some time depending on the adapter latency. - # - # @param [String, Pathname] directory the directory to watch - # @param [Hash] options the adapter options - # @option options [Float] latency the delay between checking for changes in seconds - # - # @return [Boolean] whether the adapter works or not - # - def self.works?(directory, options = {}) - work = false - test_file = "#{directory}/.listen_test" - callback = lambda { |*| work = true } - adapter = self.new(directory, options, &callback) - adapter.start - - FileUtils.touch(test_file) - - t = Thread.new { sleep(adapter.latency * 5); adapter.stop } - - adapter.wait_for_callback - work - ensure - Thread.kill(t) if t - FileUtils.rm(test_file, :force => true) - adapter.stop if adapter && adapter.started? - end - - # Runs the callback and passes it the changes if there are any. - # - def report_changes - changed_dirs = nil - - mutex.synchronize do - return if @changed_directories.empty? - changed_dirs = @changed_directories.to_a - @changed_directories.clear - end - - callback.call(changed_dirs, {}) - turnstile.signal - end - - private - - # The default delay between checking for changes. - # - # @note This method can be overriden on a per-adapter basis. - # - def default_latency - DEFAULT_LATENCY - end - - # The thread on which the main thread should wait - # when the adapter has been started in blocking mode. - # - # @note This method can be overriden on a per-adapter basis. - # - def blocking_thread - worker_thread - end - - # Initialize the adpater' specific worker. - # - # @note Each adapter must override this method - # to initialize its own @worker. - # - def initialize_worker - nil - end - - # Should start the worker in a new thread. - # - # @note Each adapter must override this method - # to start its worker on a new @worker_thread thread. - # - def start_worker - raise NotImplementedError, "#{self.class} cannot respond to: #{__method__}" - end - - # This method starts a new thread which poll for changes detected by - # the adapter and report them back to the user. - # - def start_poller - @poller_thread = Thread.new { poll_changed_directories } - end - - # Warn of polling fallback unless the :polling_fallback_message - # has been set to false. - # - # @param [String] warning an existing warning message - # @param [Hash] options the adapter options - # @option options [Boolean] polling_fallback_message to change polling fallback message or remove it - # - def self.warn_polling_fallback(options) - return if options[:polling_fallback_message] == false - - warning = options[:polling_fallback_message] || POLLING_FALLBACK_MESSAGE - Kernel.warn "[Listen warning]:\n#{warning.gsub(/^(.*)/, ' \1')}" - end - - # Polls changed directories and reports them back when there are changes. - # - # @note This method can be overriden on a per-adapter basis. - # - def poll_changed_directories - until stopped - sleep(latency) - report_changes - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/adapters/bsd.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/adapters/bsd.rb deleted file mode 100644 index 743c8ea..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/adapters/bsd.rb +++ /dev/null @@ -1,75 +0,0 @@ -module Listen - module Adapters - - # Listener implementation for BSD's `kqueue`. - # - class BSD < Adapter - # Watched kqueue events - # - # @see http://www.freebsd.org/cgi/man.cgi?query=kqueue - # @see https://github.com/nex3/rb-kqueue/blob/master/lib/rb-kqueue/queue.rb - # - EVENTS = [:delete, :write, :extend, :attrib, :link, :rename, :revoke] - - def self.target_os_regex; /freebsd/i; end - def self.adapter_gem; 'rb-kqueue'; end - - private - - # Initializes a kqueue Queue and adds a watcher for each files in - # the directories passed to the adapter. - # - # @return [INotify::Notifier] initialized kqueue - # - # @see Listen::Adapter#initialize_worker - # - def initialize_worker - require 'find' - - callback = lambda do |event| - path = event.watcher.path - mutex.synchronize do - # kqueue watches everything, but Listen only needs the - # directory where stuffs happens. - @changed_directories << (File.directory?(path) ? path : File.dirname(path)) - - # If it is a directory, and it has a write flag, it means a - # file has been added so find out which and deal with it. - # No need to check for removed files, kqueue will forget them - # when the vfs does. - if File.directory?(path) && event.flags.include?(:write) - queue = event.watcher.queue - Find.find(path) do |file| - unless queue.watchers.detect { |k,v| v.path == file.to_s } - queue.watch_file(file, *EVENTS, &callback) - end - end - end - end - end - - KQueue::Queue.new.tap do |queue| - directories.each do |directory| - Find.find(directory) do |path| - queue.watch_file(path, *EVENTS, &callback) - end - end - end - end - - # Starts the worker in a new thread. - # - # @see Listen::Adapter#start_worker - # - def start_worker - @worker_thread = Thread.new do - until stopped - worker.poll - sleep(latency) - end - end - end - end - - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/adapters/darwin.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/adapters/darwin.rb deleted file mode 100644 index ad0a955..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/adapters/darwin.rb +++ /dev/null @@ -1,48 +0,0 @@ -module Listen - module Adapters - - # Adapter implementation for Mac OS X `FSEvents`. - # - class Darwin < Adapter - LAST_SEPARATOR_REGEX = /\/$/ - - - def self.target_os_regex; /darwin(1.+)?$/i; end - def self.adapter_gem; 'rb-fsevent'; end - - private - - # Initializes a FSEvent worker and adds a watcher for - # each directory passed to the adapter. - # - # @return [FSEvent] initialized worker - # - # @see Listen::Adapter#initialize_worker - # - def initialize_worker - FSEvent.new.tap do |worker| - worker.watch(directories.dup, :latency => latency) do |changes| - next if paused - - mutex.synchronize do - changes.each { |path| @changed_directories << path.sub(LAST_SEPARATOR_REGEX, '') } - end - end - end - end - - # Starts the worker in a new thread and sleep 0.1 second. - # - # @see Listen::Adapter#start_worker - # - def start_worker - @worker_thread = Thread.new { worker.run } - # The FSEvent worker needs some time to start up. Turnstiles can't - # be used to wait for it as it runs in a loop. - # TODO: Find a better way to block until the worker starts. - sleep 0.1 - end - end - - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/adapters/linux.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/adapters/linux.rb deleted file mode 100644 index b926465..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/adapters/linux.rb +++ /dev/null @@ -1,81 +0,0 @@ -module Listen - module Adapters - - # Listener implementation for Linux `inotify`. - # - class Linux < Adapter - # Watched inotify events - # - # @see http://www.tin.org/bin/man.cgi?section=7&topic=inotify - # @see https://github.com/nex3/rb-inotify/blob/master/lib/rb-inotify/notifier.rb#L99-L177 - # - EVENTS = [:recursive, :attrib, :create, :delete, :move, :close_write] - - # The message to show when the limit of inotify watchers is not enough - # - INOTIFY_LIMIT_MESSAGE = <<-EOS.gsub(/^\s*/, '') - Listen error: unable to monitor directories for changes. - - Please head to https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers - for information on how to solve this issue. - EOS - - def self.target_os_regex; /linux/i; end - def self.adapter_gem; 'rb-inotify'; end - - # Initializes the Adapter. - # - # @see Listen::Adapter#initialize - # - def initialize(directories, options = {}, &callback) - super - rescue Errno::ENOSPC - abort(INOTIFY_LIMIT_MESSAGE) - end - - private - - # Initializes a INotify worker and adds a watcher for - # each directory passed to the adapter. - # - # @return [INotify::Notifier] initialized worker - # - # @see Listen::Adapter#initialize_worker - # - def initialize_worker - callback = lambda do |event| - if paused || ( - # Event on root directory - event.name == "" - ) || ( - # INotify reports changes to files inside directories as events - # on the directories themselves too. - # - # @see http://linux.die.net/man/7/inotify - event.flags.include?(:isdir) and (event.flags & [:close, :modify]).any? - ) - # Skip all of these! - next - end - - mutex.synchronize do - @changed_directories << File.dirname(event.absolute_name) - end - end - - INotify::Notifier.new.tap do |worker| - directories.each { |dir| worker.watch(dir, *EVENTS, &callback) } - end - end - - # Starts the worker in a new thread. - # - # @see Listen::Adapter#start_worker - # - def start_worker - @worker_thread = Thread.new { worker.run } - end - end - - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/adapters/polling.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/adapters/polling.rb deleted file mode 100644 index 77b6525..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/adapters/polling.rb +++ /dev/null @@ -1,58 +0,0 @@ -module Listen - module Adapters - - DEFAULT_POLLING_LATENCY = 1.0 - - # Polling Adapter that works cross-platform and - # has no dependencies. This is the adapter that - # uses the most CPU processing power and has higher - # file IO than the other implementations. - # - class Polling < Adapter - private - - # The default delay between checking for changes. - # - # @see Listen::Adapter#default_latency - # - def default_latency - 1.0 - end - - # The thread on which the main thread should wait - # when the adapter has been started in blocking mode. - # - # @see Listen::Adapter#blocking_thread - # - def blocking_thread - poller_thread - end - - # @see Listen::Adapter#start_worker - # - # @see Listen::Adapter#start_worker - # - def start_worker - # The polling adapter has no worker! Sad panda! :'( - end - - # Poll listener directory for file system changes. - # - # @see Listen::Adapter#poll_changed_directories - # - def poll_changed_directories - until stopped - next if paused - - start = Time.now.to_f - callback.call(directories.dup, :recursive => true) - turnstile.signal - nap_time = latency - (Time.now.to_f - start) - sleep(nap_time) if nap_time > 0 - end - rescue Interrupt - end - end - - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/adapters/windows.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/adapters/windows.rb deleted file mode 100644 index 3c470bf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/adapters/windows.rb +++ /dev/null @@ -1,91 +0,0 @@ -require 'set' -require 'rubygems' - -module Listen - module Adapters - - # Adapter implementation for Windows `wdm`. - # - class Windows < Adapter - - BUNDLER_DECLARE_GEM = <<-EOS.gsub(/^ {6}/, '') - Please add the following to your Gemfile to avoid polling for changes: - require 'rbconfig' - gem 'wdm', '>= 0.1.0' if RbConfig::CONFIG['target_os'] =~ /mswin|mingw/i - EOS - - def self.target_os_regex; /mswin|mingw/i; end - def self.adapter_gem; 'wdm'; end - - # Checks if the adapter is usable on target OS. - # - # @return [Boolean] whether usable or not - # - def self.usable? - super if mri? && at_least_ruby_1_9? - end - - # Load the adapter gem - # - # @return [Boolean] whether required or not - # - def self.load_dependent_adapter - super - rescue Gem::LoadError - Kernel.warn BUNDLER_DECLARE_GEM - end - - private - - # Checks if Ruby engine is MRI. - # - # @return [Boolean] - # - def self.mri? - defined?(RUBY_ENGINE) && RUBY_ENGINE == 'ruby' - end - - # Checks if Ruby engine is MRI. - # - # @return [Boolean] - # - def self.at_least_ruby_1_9? - Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('1.9.2') - end - - # Initializes a WDM monitor and adds a watcher for - # each directory passed to the adapter. - # - # @return [WDM::Monitor] initialized worker - # - # @see Listen::Adapter#initialize_worker - # - def initialize_worker - callback = Proc.new do |change| - next if paused - - mutex.synchronize do - @changed_directories << File.dirname(change.path) - end - end - - WDM::Monitor.new.tap do |worker| - directories.each { |dir| worker.watch_recursively(dir, &callback) } - end - end - - # Start the worker in a new thread and sleep 0.1 second. - # - # @see Listen::Adapter#start_worker - # - def start_worker - @worker_thread = Thread.new { worker.run! } - # Wait for the worker to start. This is needed to avoid a deadlock - # when stopping immediately after starting. - sleep 0.1 - end - - end - - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/directory_record.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/directory_record.rb deleted file mode 100644 index 3729d51..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/directory_record.rb +++ /dev/null @@ -1,406 +0,0 @@ -require 'set' -require 'find' -require 'digest/sha1' - -module Listen - - # The directory record stores information about - # a directory and keeps track of changes to - # the structure of its childs. - # - class DirectoryRecord - attr_reader :directory, :paths, :sha1_checksums - - # The default list of directories that get ignored by the listener. - DEFAULT_IGNORED_DIRECTORIES = %w[.rbx .bundle .git .svn bundle log tmp vendor] - - # The default list of files that get ignored by the listener. - DEFAULT_IGNORED_EXTENSIONS = %w[.DS_Store] - - # Defines the used precision based on the type of mtime returned by the - # system (whether its in milliseconds or just seconds) - # - begin - HIGH_PRECISION_SUPPORTED = File.mtime(__FILE__).to_f.to_s[-2..-1] != '.0' - rescue - HIGH_PRECISION_SUPPORTED = false - end - - # Data structure used to save meta data about a path - # - MetaData = Struct.new(:type, :mtime) - - # Class methods - # - class << self - - # Creates the ignoring patterns from the default ignored - # directories and extensions. It memoizes the generated patterns - # to avoid unnecessary computation. - # - def generate_default_ignoring_patterns - @@default_ignoring_patterns ||= Array.new.tap do |default_patterns| - # Add directories - ignored_directories = DEFAULT_IGNORED_DIRECTORIES.map { |d| Regexp.escape(d) } - default_patterns << %r{^(?:#{ignored_directories.join('|')})/} - - # Add extensions - ignored_extensions = DEFAULT_IGNORED_EXTENSIONS.map { |e| Regexp.escape(e) } - default_patterns << %r{(?:#{ignored_extensions.join('|')})$} - end - end - end - - # Initializes a directory record. - # - # @option [String] directory the directory to keep track of - # - def initialize(directory) - raise ArgumentError, "The path '#{directory}' is not a directory!" unless File.directory?(directory) - - @directory, @sha1_checksums = File.expand_path(directory), Hash.new - @ignoring_patterns, @filtering_patterns = Set.new, Set.new - - @ignoring_patterns.merge(DirectoryRecord.generate_default_ignoring_patterns) - end - - # Returns the ignoring patterns in the record to know - # which paths should be ignored. - # - # @return [Array] the ignoring patterns - # - def ignoring_patterns - @ignoring_patterns.to_a - end - - # Returns the filtering patterns in the record to know - # which paths should be stored. - # - # @return [Array] the filtering patterns - # - def filtering_patterns - @filtering_patterns.to_a - end - - # Adds ignoring patterns to the record. - # - # @example Ignore some paths - # ignore %r{^ignored/path/}, /man/ - # - # @param [Regexp] regexps a list of patterns for ignoring paths - # - def ignore(*regexps) - @ignoring_patterns.merge(regexps).reject! { |r| r.nil? } - end - - # Replaces ignoring patterns in the record. - # - # @example Ignore only these paths - # ignore! %r{^ignored/path/}, /man/ - # - # @param [Regexp] regexps a list of patterns for ignoring paths - # - def ignore!(*regexps) - @ignoring_patterns.replace(regexps).reject! { |r| r.nil? } - end - - # Adds filtering patterns to the record. - # - # @example Filter some files - # filter /\.txt$/, /.*\.zip/ - # - # @param [Regexp] regexps a list of patterns for filtering files - # - def filter(*regexps) - @filtering_patterns.merge(regexps).reject! { |r| r.nil? } - end - - # Replaces filtering patterns in the record. - # - # @example Filter only these files - # filter! /\.txt$/, /.*\.zip/ - # - # @param [Regexp] regexps a list of patterns for filtering files - # - def filter!(*regexps) - @filtering_patterns.replace(regexps).reject! { |r| r.nil? } - end - - # Returns whether a path should be ignored or not. - # - # @param [String] path the path to test - # - # @return [Boolean] - # - def ignored?(path) - path = relative_to_base(path) - @ignoring_patterns.any? { |pattern| pattern =~ path } - end - - # Returns whether a path should be filtered or not. - # - # @param [String] path the path to test - # - # @return [Boolean] - # - def filtered?(path) - # When no filtering patterns are set, ALL files are stored. - return true if @filtering_patterns.empty? - - path = relative_to_base(path) - @filtering_patterns.any? { |pattern| pattern =~ path } - end - - # Finds the paths that should be stored and adds them - # to the paths' hash. - # - def build - @paths = Hash.new { |h, k| h[k] = Hash.new } - important_paths { |path| insert_path(path) } - end - - # Detects changes in the passed directories, updates - # the record with the new changes and returns the changes. - # - # @param [Array] directories the list of directories to scan for changes - # @param [Hash] options - # @option options [Boolean] recursive scan all sub-directories recursively - # @option options [Boolean] relative_paths whether or not to use relative paths for changes - # - # @return [Hash] the changes - # - def fetch_changes(directories, options = {}) - @changes = { :modified => [], :added => [], :removed => [] } - directories = directories.sort_by { |el| el.length }.reverse # diff sub-dir first - - directories.each do |directory| - next unless directory[@directory] # Path is or inside directory - - detect_modifications_and_removals(directory, options) - detect_additions(directory, options) - end - - @changes - end - - # Converts an absolute path to a path that's relative to the base directory. - # - # @param [String] path the path to convert - # - # @return [String] the relative path - # - def relative_to_base(path) - path = path.dup - regexp = "\\A#{Regexp.quote directory}(#{File::SEPARATOR}|\\z)" - if path.respond_to?(:force_encoding) - path.force_encoding("BINARY") - regexp.force_encoding("BINARY") - end - if path.sub!(Regexp.new(regexp), '') - path - end - end - - private - - # Detects modifications and removals recursively in a directory. - # - # @note Modifications detection begins by checking the modification time (mtime) - # of files and then by checking content changes (using SHA1-checksum) - # when the mtime of files is not changed. - # - # @param [String] directory the path to analyze - # @param [Hash] options - # @option options [Boolean] recursive scan all sub-directories recursively - # @option options [Boolean] relative_paths whether or not to use relative paths for changes - # - def detect_modifications_and_removals(directory, options = {}) - paths[directory].each do |basename, meta_data| - path = File.join(directory, basename) - case meta_data.type - when 'Dir' - detect_modification_or_removal_for_dir(path, options) - when 'File' - detect_modification_or_removal_for_file(path, meta_data, options) - end - end - end - - def detect_modification_or_removal_for_dir(path, options) - - # Directory still exists - if File.directory?(path) - detect_modifications_and_removals(path, options) if options[:recursive] - - # Directory has been removed - else - detect_modifications_and_removals(path, options) - @paths[File.dirname(path)].delete(File.basename(path)) - @paths.delete("#{File.dirname(path)}/#{File.basename(path)}") - end - end - - def detect_modification_or_removal_for_file(path, meta_data, options) - # File still exists - if File.exist?(path) - detect_modification(path, meta_data, options) - - # File has been removed - else - removal_detected(path, meta_data, options) - end - end - - def detect_modification(path, meta_data, options) - new_mtime = mtime_of(path) - - # First check if we are in the same second (to update checksums) - # before checking the time difference - if (meta_data.mtime.to_i == new_mtime.to_i && content_modified?(path)) || meta_data.mtime < new_mtime - modification_detected(path, meta_data, new_mtime, options) - end - end - - def modification_detected(path, meta_data, new_mtime, options) - # Update the sha1 checksum of the file - update_sha1_checksum(path) - - # Update the meta data of the file - meta_data.mtime = new_mtime - @paths[File.dirname(path)][File.basename(path)] = meta_data - - @changes[:modified] << (options[:relative_paths] ? relative_to_base(path) : path) - end - - def removal_detected(path, meta_data, options) - @paths[File.dirname(path)].delete(File.basename(path)) - @sha1_checksums.delete(path) - @changes[:removed] << (options[:relative_paths] ? relative_to_base(path) : path) - end - - # Detects additions in a directory. - # - # @param [String] directory the path to analyze - # @param [Hash] options - # @option options [Boolean] recursive scan all sub-directories recursively - # @option options [Boolean] relative_paths whether or not to use relative paths for changes - # - def detect_additions(directory, options = {}) - # Don't process removed directories - return unless File.exist?(directory) - - Find.find(directory) do |path| - next if path == @directory - - if File.directory?(path) - # Add a trailing slash to directories when checking if a directory is - # ignored to optimize finding them as Find.find doesn't. - if ignored?(path + File::SEPARATOR) || (directory != path && (!options[:recursive] && existing_path?(path))) - Find.prune # Don't look any further into this directory. - else - insert_path(path) - end - elsif !ignored?(path) && filtered?(path) && !existing_path?(path) - if File.file?(path) - @changes[:added] << (options[:relative_paths] ? relative_to_base(path) : path) - insert_path(path) - end - end - end - end - - # Returns whether or not a file's content has been modified by - # comparing the SHA1-checksum to a stored one. - # Ensure that the SHA1-checksum is inserted to the sha1_checksums - # array for later comparaison if false. - # - # @param [String] path the file path - # - def content_modified?(path) - return false unless File.ftype(path) == 'file' - @sha1_checksum = sha1_checksum(path) - if sha1_checksums[path] == @sha1_checksum || !sha1_checksums.key?(path) - update_sha1_checksum(path) - false - else - true - end - end - - # Inserts a SHA1-checksum path in @SHA1-checksums hash. - # - # @param [String] path the SHA1-checksum path to insert in @sha1_checksums. - # - def update_sha1_checksum(path) - if @sha1_checksum ||= sha1_checksum(path) - @sha1_checksums[path] = @sha1_checksum - @sha1_checksum = nil - end - end - - # Returns the SHA1-checksum for the file path. - # - # @param [String] path the file path - # - def sha1_checksum(path) - Digest::SHA1.file(path).to_s - rescue - nil - end - - # Traverses the base directory looking for paths that should - # be stored; thus paths that are filtered or not ignored. - # - # @yield [path] an important path - # - def important_paths - Find.find(directory) do |path| - next if path == directory - - if File.directory?(path) - # Add a trailing slash to directories when checking if a directory is - # ignored to optimize finding them as Find.find doesn't. - if ignored?(path + File::SEPARATOR) - Find.prune # Don't look any further into this directory. - else - yield(path) - end - elsif !ignored?(path) && filtered?(path) - yield(path) - end - end - end - - # Inserts a path with its type (Dir or File) in paths hash. - # - # @param [String] path the path to insert in @paths. - # - def insert_path(path) - meta_data = MetaData.new - meta_data.type = File.directory?(path) ? 'Dir' : 'File' - meta_data.mtime = mtime_of(path) unless meta_data.type == 'Dir' # mtimes of dirs are not used yet - @paths[File.dirname(path)][File.basename(path)] = meta_data - rescue Errno::ENOENT - end - - # Returns whether or not a path exists in the paths hash. - # - # @param [String] path the path to check - # - # @return [Boolean] - # - def existing_path?(path) - paths[File.dirname(path)][File.basename(path)] != nil - end - - # Returns the modification time of a file based on the precision defined by the system - # - # @param [String] file the file for which the mtime must be returned - # - # @return [Fixnum, Float] the mtime of the file - # - def mtime_of(file) - File.lstat(file).mtime.send(HIGH_PRECISION_SUPPORTED ? :to_f : :to_i) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/listener.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/listener.rb deleted file mode 100644 index b8bd506..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/listener.rb +++ /dev/null @@ -1,323 +0,0 @@ -require 'pathname' - -module Listen - class Listener - attr_reader :directories, :directories_records, :block, :adapter, :adapter_options, :use_relative_paths - - BLOCKING_PARAMETER_DEPRECATION_MESSAGE = <<-EOS.gsub(/^\s*/, '') - The blocking parameter of Listen::Listener#start is deprecated.\n - Please use Listen::Adapter#start for a non-blocking listener and Listen::Listener#start! for a blocking one. - EOS - - RELATIVE_PATHS_WITH_MULTIPLE_DIRECTORIES_WARNING_MESSAGE = "The relative_paths option doesn't work when listening to multiple diretories." - - # Initializes the directories listener. - # - # @param [String] directory the directories to listen to - # @param [Hash] options the listen options - # @option options [Regexp] ignore a pattern for ignoring paths - # @option options [Regexp] filter a pattern for filtering paths - # @option options [Float] latency the delay between checking for changes in seconds - # @option options [Boolean] relative_paths whether or not to use relative-paths in the callback - # @option options [Boolean] force_polling whether to force the polling adapter or not - # @option options [String, Boolean] polling_fallback_message to change polling fallback message or remove it - # @option options [Class] force_adapter force the use of this adapter class, skipping usual adapter selection - # - # @yield [modified, added, removed] the changed files - # @yieldparam [Array] modified the list of modified files - # @yieldparam [Array] added the list of added files - # @yieldparam [Array] removed the list of removed files - # - def initialize(*args, &block) - options = args.last.is_a?(Hash) ? args.pop : {} - directories = args.flatten - initialize_directories_and_directories_records(directories) - initialize_relative_paths_usage(options) - @block = block - - ignore(*options.delete(:ignore)) - filter(*options.delete(:filter)) - - @adapter_options = options - end - - # Starts the listener by initializing the adapter and building - # the directory record concurrently, then it starts the adapter to watch - # for changes. The current thread is not blocked after starting. - # - # @see Listen::Listener#start! - # - def start(deprecated_blocking = nil) - Kernel.warn "[Listen warning]:\n#{BLOCKING_PARAMETER_DEPRECATION_MESSAGE}" unless deprecated_blocking.nil? - setup - adapter.start - end - - # Starts the listener by initializing the adapter and building - # the directory record concurrently, then it starts the adapter to watch - # for changes. The current thread is blocked after starting. - # - # @see Listen::Listener#start - # - # @since 1.0.0 - # - def start! - setup - adapter.start! - end - - # Stops the listener. - # - def stop - adapter && adapter.stop - end - - # Pauses the listener. - # - # @return [Listen::Listener] the listener - # - def pause - adapter.pause - self - end - - # Unpauses the listener. - # - # @return [Listen::Listener] the listener - # - def unpause - build_directories_records - adapter.unpause - self - end - - # Returns whether the listener is paused or not. - # - # @return [Boolean] adapter paused status - # - def paused? - !!adapter && adapter.paused? - end - - # Adds ignoring patterns to the listener. - # - # @param (see Listen::DirectoryRecord#ignore) - # - # @return [Listen::Listener] the listener - # - # @see Listen::DirectoryRecord#ignore - # - def ignore(*regexps) - directories_records.each { |r| r.ignore(*regexps) } - self - end - - # Replaces ignoring patterns in the listener. - # - # @param (see Listen::DirectoryRecord#ignore!) - # - # @return [Listen::Listener] the listener - # - # @see Listen::DirectoryRecord#ignore! - # - def ignore!(*regexps) - directories_records.each { |r| r.ignore!(*regexps) } - self - end - - # Adds filtering patterns to the listener. - # - # @param (see Listen::DirectoryRecord#filter) - # - # @return [Listen::Listener] the listener - # - # @see Listen::DirectoryRecord#filter - # - def filter(*regexps) - directories_records.each { |r| r.filter(*regexps) } - self - end - - # Replaces filtering patterns in the listener. - # - # @param (see Listen::DirectoryRecord#filter!) - # - # @return [Listen::Listener] the listener - # - # @see Listen::DirectoryRecord#filter! - # - def filter!(*regexps) - directories_records.each { |r| r.filter!(*regexps) } - self - end - - # Sets the latency for the adapter. This is a helper method - # to simplify changing the latency directly from the listener. - # - # @example Wait 0.5 seconds each time before checking changes - # latency 0.5 - # - # @param [Float] seconds the amount of delay, in seconds - # - # @return [Listen::Listener] the listener - # - def latency(seconds) - @adapter_options[:latency] = seconds - self - end - - # Sets whether the use of the polling adapter - # should be forced or not. - # - # @example Forcing the use of the polling adapter - # force_polling true - # - # @param [Boolean] value whether to force the polling adapter or not - # - # @return [Listen::Listener] the listener - # - def force_polling(value) - @adapter_options[:force_polling] = value - self - end - - # Sets whether to force the use of a particular adapter, rather than - # going through usual adapter selection process on start. - # - # @example Force use of Linux polling - # force_adapter Listen::Adapters::Linux - # - # @param [Class] adapter class to use for file system event notification. - # - # @return [Listen::Listener] the listener - # - def force_adapter(adapter_class) - @adapter_options[:force_adapter] = adapter_class - self - end - - # Sets whether the paths in the callback should be - # relative or absolute. - # - # @example Enabling relative paths in the callback - # relative_paths true - # - # @param [Boolean] value whether to enable relative paths in the callback or not - # - # @return [Listen::Listener] the listener - # - def relative_paths(value) - @use_relative_paths = value - self - end - - # Defines a custom polling fallback message or disable it. - # - # @example Disabling the polling fallback message - # polling_fallback_message false - # - # @param [String, Boolean] value to change polling fallback message or remove it - # - # @return [Listen::Listener] the listener - # - def polling_fallback_message(value) - @adapter_options[:polling_fallback_message] = value - self - end - - # Sets the callback that gets called on changes. - # - # @example Assign a callback to be called on changes - # callback = lambda { |modified, added, removed| ... } - # change &callback - # - # @param [Proc] block the callback proc - # - # @return [Listen::Listener] the listener - # - def change(&block) # modified, added, removed - @block = block - self - end - - # Runs the callback passing it the changes if there are any. - # - # @param (see Listen::DirectoryRecord#fetch_changes) - # - # @see Listen::DirectoryRecord#fetch_changes - # - def on_change(directories, options = {}) - changes = fetch_records_changes(directories, options) - unless changes.values.all? { |paths| paths.empty? } - block.call(changes[:modified], changes[:added], changes[:removed]) - end - rescue => ex - Kernel.warn "[Listen warning]: Change block raise an execption: #{$!}" - Kernel.warn "Backtrace:\n\t#{ex.backtrace.join("\n\t")}" - end - - private - - # Initializes the directories to watch as well as the directories records. - # - # @see Listen::DirectoryRecord - # - def initialize_directories_and_directories_records(directories) - @directories = directories.map { |d| Pathname.new(d).realpath.to_s } - @directories_records = directories.map { |d| DirectoryRecord.new(d) } - end - - # Initializes whether or not using relative paths. - # - def initialize_relative_paths_usage(options) - if directories.size > 1 && options[:relative_paths] - Kernel.warn "[Listen warning]: #{RELATIVE_PATHS_WITH_MULTIPLE_DIRECTORIES_WARNING_MESSAGE}" - end - @use_relative_paths = directories.one? && options.delete(:relative_paths) { false } - end - - # Build the directory record concurrently and initialize the adapter. - # - def setup - t = Thread.new { build_directories_records } - @adapter = initialize_adapter - t.join - end - - # Initializes an adapter passing it the callback and adapters' options. - # - def initialize_adapter - callback = lambda { |changed_directories, options| self.on_change(changed_directories, options) } - Adapter.select_and_initialize(directories, adapter_options, &callback) - end - - # Build the watched directories' records. - # - def build_directories_records - directories_records.each { |r| r.build } - end - - # Returns the sum of all the changes to the directories records - # - # @param (see Listen::DirectoryRecord#fetch_changes) - # - # @return [Hash] the changes - # - def fetch_records_changes(directories_to_search, options) - directories_records.inject({}) do |h, r| - # directory records skips paths outside their range, so passing the - # whole `directories` array is not a problem. - record_changes = r.fetch_changes(directories_to_search, options.merge(:relative_paths => use_relative_paths)) - - if h.empty? - h.merge!(record_changes) - else - h.each { |k, v| h[k] += record_changes[k] } - end - - h - end - end - - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/turnstile.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/turnstile.rb deleted file mode 100644 index a0dc696..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/turnstile.rb +++ /dev/null @@ -1,32 +0,0 @@ -module Listen - - # Allows two threads to wait on eachother. - # - # @note Only two threads can be used with this Turnstile - # because of the current implementation. - class Turnstile - attr_accessor :queue - - # Initialize the turnstile. - # - def initialize - # Until Ruby offers semahpores, only queues can be used - # to implement a turnstile. - @queue = Queue.new - end - - # Blocks the current thread until a signal is received. - # - def wait - queue.pop if queue.num_waiting == 0 - end - - # Unblocks the waiting thread if any. - # - def signal - queue.push(:dummy) if queue.num_waiting == 1 - end - - end - -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/version.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/version.rb deleted file mode 100644 index fec74bf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/lib/listen/version.rb +++ /dev/null @@ -1,3 +0,0 @@ -module Listen - VERSION = '1.3.1' -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/listen.gemspec b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/listen.gemspec deleted file mode 100644 index 2e0f17e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/listen.gemspec +++ /dev/null @@ -1,28 +0,0 @@ -# -*- encoding: utf-8 -*- -$:.push File.expand_path('../lib', __FILE__) -require 'listen/version' - -Gem::Specification.new do |s| - s.name = 'listen' - s.version = Listen::VERSION - s.platform = Gem::Platform::RUBY - s.authors = ['Thibaud Guillaume-Gentil', 'Maher Sallam'] - s.email = ['thibaud@thibaud.me', 'maher@sallam.me'] - s.homepage = 'https://github.com/guard/listen' - s.license = 'MIT' - s.summary = 'Listen to file modifications' - s.description = 'The Listen gem listens to file modifications and notifies you about the changes. Works everywhere!' - - s.required_rubygems_version = '>= 1.3.6' - s.rubyforge_project = 'listen' - - s.add_dependency 'rb-fsevent', '>= 0.9.3' - s.add_dependency 'rb-inotify', '>= 0.9' - s.add_dependency 'rb-kqueue', '>= 0.2' - - s.add_development_dependency 'bundler' - s.add_development_dependency 'rspec' - - s.files = Dir.glob('{lib}/**/*') + %w[CHANGELOG.md LICENSE README.md] - s.require_path = 'lib' -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/adapter_spec.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/adapter_spec.rb deleted file mode 100644 index 241c2a6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/adapter_spec.rb +++ /dev/null @@ -1,149 +0,0 @@ -require 'spec_helper' - -describe Listen::Adapter do - subject { described_class.new('dir') } - - describe '#initialize' do - it 'sets the latency to the default one' do - subject.latency.should eq described_class::DEFAULT_LATENCY - end - - it 'accepts a single directory to watch' do - described_class.new('dir').directories = %w{dir} - end - - it 'accepts multiple directories to watch' do - described_class.new(%w{dir1 dir2}).directories.should eq %w{dir1 dir2} - end - end - - describe ".select_and_initialize" do - before do - Listen::Adapter::OPTIMIZED_ADAPTERS.each do |adapter| - Listen::Adapters.const_get(adapter).stub(:usable_and_works?) { false } - end - end - - context "with force_adapter option" do - it "returns an instance of the given adapter class" do - expected_adapter = Object.new - adapter_class = double('adapter_class') - options = {:force_adapter => adapter_class} - - adapter_class.should_receive(:load_dependent_adapter) - adapter_class.should_receive(:new).with('dir', options) { expected_adapter } - - adapter = described_class.select_and_initialize('dir', options) - adapter.should be(expected_adapter) - end - end - - context "with no specific adapter usable" do - it "returns Listen::Adapters::Polling instance" do - Kernel.stub(:warn) - Listen::Adapters::Polling.should_receive(:new).with('dir', {}) - described_class.select_and_initialize('dir') - end - - it 'warns with the default polling fallback message' do - Kernel.should_receive(:warn).with(/#{Listen::Adapter::POLLING_FALLBACK_MESSAGE}/) - described_class.select_and_initialize('dir') - end - - context "with custom polling_fallback_message option" do - it "warns with the custom polling fallback message" do - Kernel.should_receive(:warn).with(/custom/) - described_class.select_and_initialize('dir', :polling_fallback_message => 'custom') - end - end - - context "with polling_fallback_message to false" do - it "doesn't warn with a polling fallback message" do - Kernel.should_not_receive(:warn) - described_class.select_and_initialize('dir', :polling_fallback_message => false) - end - end - end - - Listen::Adapter::OPTIMIZED_ADAPTERS.each do |adapter| - adapter_class = Listen::Adapters.const_get(adapter) - - context "on #{adapter}" do - before { adapter_class.stub(:usable_and_works?) { true } } - - it "uses Listen::Adapters::#{adapter}" do - adapter_class.should_receive(:new).with('dir', {}) - described_class.select_and_initialize('dir') - end - - context 'when the use of the polling adapter is forced' do - it 'uses Listen::Adapters::Polling' do - Listen::Adapters::Polling.should_receive(:new).with('dir', {}) - described_class.select_and_initialize('dir', :force_polling => true) - end - end - end - end - end - - describe '.load_dependend_adapter' do - after(:each) { described_class.instance_variable_set('@loaded', nil) } - - it 'returns true (success) even if the adapter_gem has already been required' do - described_class.stub(:adapter_gem => 'already_loaded_gem') - described_class.stub(:require => false) - - described_class.load_dependent_adapter.should be_true - end - - it 'returns false (failure) if the adapter_gem cannot be required' do - described_class.stub(:adapter_gem => 'unloadable_gem') - described_class.stub(:require) do - raise LoadError.new('no such file to load -- unloadable_gem') - end - - described_class.load_dependent_adapter.should be_false - end - end - - Listen::Adapter::OPTIMIZED_ADAPTERS.each do |adapter| - adapter_class = Listen::Adapters.const_get(adapter) - if adapter_class.usable? - describe '.usable_and_works?' do - it 'checks if the adapter is usable' do - adapter_class.stub(:works?) - adapter_class.should_receive(:usable?) - adapter_class.usable_and_works?('dir') - end - - context 'with one directory' do - it 'tests if that directory actually work' do - fixtures do |path| - adapter_class.should_receive(:works?).with(path, anything).and_return(true) - adapter_class.usable_and_works?(path) - end - end - end - - context 'with multiple directories' do - it 'tests if each directory passed does actually work' do - fixtures(3) do |path1, path2, path3| - adapter_class.should_receive(:works?).exactly(3).times.with do |path, options| - [path1, path2, path3].include? path - end.and_return(true) - adapter_class.usable_and_works?([path1, path2, path3]) - end - end - end - end - - describe '.works?' do - it 'does work' do - fixtures do |path| - adapter_class.works?(path).should be_true - end - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/adapters/bsd_spec.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/adapters/bsd_spec.rb deleted file mode 100644 index ec02917..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/adapters/bsd_spec.rb +++ /dev/null @@ -1,36 +0,0 @@ -require 'spec_helper' - -describe Listen::Adapters::BSD do - if bsd? - if Listen::Adapters::BSD.usable? - it "is usable on BSD" do - described_class.should be_usable - end - - it_should_behave_like 'a filesystem adapter' - it_should_behave_like 'an adapter that call properly listener#on_change' - else - it "isn't usable on BSD with #{RbConfig::CONFIG['RUBY_INSTALL_NAME']}" do - described_class.should_not be_usable - end - end - end - - if linux? - it "isn't usable on Linux" do - described_class.should_not be_usable - end - end - - if mac? - it "isn't usable on Mac OS X" do - described_class.should_not be_usable - end - end - - if windows? - it "isn't usable on Windows" do - described_class.should_not be_usable - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/adapters/darwin_spec.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/adapters/darwin_spec.rb deleted file mode 100644 index dabee67..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/adapters/darwin_spec.rb +++ /dev/null @@ -1,37 +0,0 @@ -require 'spec_helper' - -describe Listen::Adapters::Darwin do - if mac? - if Listen::Adapters::Darwin.usable? - it "is usable on Mac OS X >= 10.6" do - described_class.should be_usable - end - - it_should_behave_like 'a filesystem adapter' - it_should_behave_like 'an adapter that call properly listener#on_change' - else - it "isn't usable on Mac OS X with #{RbConfig::CONFIG['RUBY_INSTALL_NAME']}" do - described_class.should_not be_usable - end - end - - end - - if windows? - it "isn't usable on Windows" do - described_class.should_not be_usable - end - end - - if linux? - it "isn't usable on Linux" do - described_class.should_not be_usable - end - end - - if bsd? - it "isn't usable on BSD" do - described_class.should_not be_usable - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/adapters/linux_spec.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/adapters/linux_spec.rb deleted file mode 100644 index ff119aa..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/adapters/linux_spec.rb +++ /dev/null @@ -1,47 +0,0 @@ -require 'spec_helper' - -describe Listen::Adapters::Linux do - if linux? - if Listen::Adapters::Linux.usable? - it "is usable on Linux" do - described_class.should be_usable - end - - it_should_behave_like 'a filesystem adapter' - it_should_behave_like 'an adapter that call properly listener#on_change' - - describe '#initialize' do - context 'when the inotify limit for watched files is not enough' do - before { INotify::Notifier.any_instance.should_receive(:watch).and_raise(Errno::ENOSPC) } - - it 'fails gracefully' do - described_class.any_instance.should_receive(:abort).with(described_class::INOTIFY_LIMIT_MESSAGE) - described_class.new(File.dirname(__FILE__)) - end - end - end - else - it "isn't usable on Linux with #{RbConfig::CONFIG['RUBY_INSTALL_NAME']}" do - described_class.should_not be_usable - end - end - end - - if bsd? - it "isn't usable on BSD" do - described_class.should_not be_usable - end - end - - if mac? - it "isn't usable on Mac OS X" do - described_class.should_not be_usable - end - end - - if windows? - it "isn't usable on Windows" do - described_class.should_not be_usable - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/adapters/polling_spec.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/adapters/polling_spec.rb deleted file mode 100644 index 33b98b3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/adapters/polling_spec.rb +++ /dev/null @@ -1,68 +0,0 @@ -require 'spec_helper' - -describe Listen::Adapters::Polling do - subject { described_class.new('dir') } - - it_should_behave_like 'a filesystem adapter' - - describe '#initialize' do - it 'sets the latency to the default polling one' do - subject.latency.should eq Listen::Adapters::DEFAULT_POLLING_LATENCY - end - end - - describe '#poll' do - let(:listener) { double(Listen::Listener) } - let(:callback) { lambda { |changed_directories, options| @called = true; listener.on_change(changed_directories, options) } } - - after { subject.stop } - - context 'with one directory to watch' do - subject { Listen::Adapters::Polling.new('dir', {}, &callback) } - - it 'calls listener.on_change' do - listener.should_receive(:on_change).at_least(1).times.with(['dir'], :recursive => true) - subject.start - subject.wait_for_callback - end - - it 'calls listener.on_change continuously' do - subject.latency = 0.001 - listener.should_receive(:on_change).at_least(10).times.with(['dir'], :recursive => true) - subject.start - 10.times { subject.wait_for_callback } - end - - it "doesn't call listener.on_change if paused" do - subject.paused = true - subject.start - subject.wait_for_callback - @called.should be_nil - end - end - - context 'with multiple directories to watch' do - subject { Listen::Adapters::Polling.new(%w{dir1 dir2}, {}, &callback) } - - it 'calls listener.on_change' do - listener.should_receive(:on_change).at_least(1).times.with(%w{dir1 dir2}, :recursive => true) - subject.start - subject.wait_for_callback - end - - it 'calls listener.on_change continuously' do - subject.latency = 0.001 - listener.should_receive(:on_change).at_least(10).times.with(%w{dir1 dir2}, :recursive => true) - subject.start - 10.times { subject.wait_for_callback } - end - - it "doesn't call listener.on_change if paused" do - subject.paused = true - subject.start - subject.wait_for_callback - @called.should be_nil - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/adapters/windows_spec.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/adapters/windows_spec.rb deleted file mode 100644 index b9cd969..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/adapters/windows_spec.rb +++ /dev/null @@ -1,30 +0,0 @@ -require 'spec_helper' - -describe Listen::Adapters::Windows do - if windows? && Listen::Adapters::Windows.usable? - it "is usable on Windows" do - described_class.should be_usable - end - - it_should_behave_like 'a filesystem adapter' - it_should_behave_like 'an adapter that call properly listener#on_change' - end - - if mac? - it "isn't usable on Mac OS X" do - described_class.should_not be_usable - end - end - - if bsd? - it "isn't usable on BSD" do - described_class.should_not be_usable - end - end - - if linux? - it "isn't usable on Linux" do - described_class.should_not be_usable - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/directory_record_spec.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/directory_record_spec.rb deleted file mode 100644 index e3b7964..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/directory_record_spec.rb +++ /dev/null @@ -1,1250 +0,0 @@ -# encoding: UTF-8 -require 'spec_helper' - -describe Listen::DirectoryRecord do - let(:base_directory) { File.dirname(__FILE__) } - - subject { described_class.new(base_directory) } - - describe '.generate_default_ignoring_patterns' do - it 'creates regexp patterns from the default ignored directories and extensions' do - described_class.generate_default_ignoring_patterns.should include( - %r{^(?:\.rbx|\.bundle|\.git|\.svn|bundle|log|tmp|vendor)/}, - %r{(?:\.DS_Store)$} - ) - end - - it 'memoizes the generated results' do - described_class.generate_default_ignoring_patterns.should equal described_class.generate_default_ignoring_patterns - end - end - - describe '#initialize' do - it 'sets the base directory' do - subject.directory.should eq base_directory - end - - it 'sets the base directory expanded' do - cd File.dirname(base_directory) - subject = described_class.new(File.basename(base_directory)) - subject.directory.should eq base_directory - end - - it 'sets the default ignoring patterns' do - subject.ignoring_patterns.should =~ described_class.generate_default_ignoring_patterns - end - - it 'sets the default filtering patterns' do - subject.filtering_patterns.should eq [] - end - - it 'raises an error when the passed path does not exist' do - expect { described_class.new('no way I exist') }.to raise_error(ArgumentError) - end - - it 'raises an error when the passed path is not a directory' do - expect { described_class.new(__FILE__) }.to raise_error(ArgumentError) - end - end - - describe '#ignore' do - it 'adds the passed paths to the list of ignored paths in the record' do - subject.ignore(%r{^\.old/}, %r{\.pid$}, nil) - subject.ignoring_patterns.should include(%r{^\.old/}, %r{\.pid$}) - subject.ignoring_patterns.should_not include(nil) - end - end - - describe '#ignore!' do - it 'replace the ignored paths in the record' do - subject.ignore!(%r{^\.old/}, %r{\.pid$}, nil) - subject.ignoring_patterns.should eq [%r{^\.old/}, %r{\.pid$}] - end - end - - describe '#filter' do - it 'adds the passed regexps to the list of filters that determine the stored paths' do - subject.filter(%r{\.(?:jpe?g|gif|png)}, %r{\.(?:mp3|ogg|a3c)}, nil) - subject.filtering_patterns.should include(%r{\.(?:jpe?g|gif|png)}, %r{\.(?:mp3|ogg|a3c)}) - subject.filtering_patterns.should_not include(nil) - end - end - - describe '#filter!' do - it 'replaces the passed regexps in the list of filters that determine the stored paths' do - subject.filter!(%r{\.(?:jpe?g|gif|png)}, %r{\.(?:mp3|ogg|a3c)}) - subject.filtering_patterns.should have(2).regexps - subject.filtering_patterns.should =~ [%r{\.(?:mp3|ogg|a3c)}, %r{\.(?:jpe?g|gif|png)}] - end - end - - describe '#ignored?' do - before { subject.stub(:relative_to_base) { |path| path } } - - it 'tests paths relative to the base directory' do - subject.should_receive(:relative_to_base).with('file.txt') - subject.ignored?('file.txt') - end - - it 'returns true when the passed path is a default ignored path' do - subject.ignored?('tmp/some_process.pid').should be_true - subject.ignored?('dir/.DS_Store').should be_true - subject.ignored?('.git/config').should be_true - end - - it 'returns false when the passed path is not a default ignored path' do - subject.ignored?('nested/tmp/some_process.pid').should be_false - subject.ignored?('nested/.git').should be_false - subject.ignored?('dir/.DS_Store/file').should be_false - subject.ignored?('file.git').should be_false - end - - it 'returns true when the passed path is ignored' do - subject.ignore(%r{\.pid$}) - subject.ignored?('dir/some_process.pid').should be_true - end - - it 'returns false when the passed path is not ignored' do - subject.ignore(%r{\.pid$}) - subject.ignored?('dir/some_file.txt').should be_false - end - end - - describe '#filtered?' do - before { subject.stub(:relative_to_base) { |path| path } } - - context 'when no filtering patterns are set' do - it 'returns true for any path' do - subject.filtered?('file.txt').should be_true - end - end - - context 'when filtering patterns are set' do - before { subject.filter(%r{\.(?:jpe?g|gif|png)}) } - - it 'tests paths relative to the base directory' do - subject.should_receive(:relative_to_base).with('file.txt') - subject.filtered?('file.txt') - end - - it 'returns true when the passed path is filtered' do - subject.filter(%r{\.(?:jpe?g|gif|png)}) - subject.filtered?('dir/picture.jpeg').should be_true - end - - it 'returns false when the passed path is not filtered' do - subject.filter(%r{\.(?:jpe?g|gif|png)}) - subject.filtered?('dir/song.mp3').should be_false - end - end - end - - describe '#build' do - it 'stores all files' do - fixtures do |path| - touch 'file.rb' - mkdir 'a_directory' - touch 'a_directory/file.txt' - - record = described_class.new(path) - record.build - - record.paths[path]['file.rb'].type.should eq 'File' - record.paths[path]['a_directory'].type.should eq 'Dir' - record.paths["#{path}/a_directory"]['file.txt'].type.should eq 'File' - end - end - - context 'with ignored path set' do - it 'does not store ignored directory or its childs' do - fixtures do |path| - mkdir 'ignored_directory' - mkdir 'ignored_directory/child_directory' - touch 'ignored_directory/file.txt' - - record = described_class.new(path) - record.ignore %r{^ignored_directory/} - record.build - - record.paths[path]['/a_ignored_directory'].should be_nil - record.paths["#{path}/a_ignored_directory"]['child_directory'].should be_nil - record.paths["#{path}/a_ignored_directory"]['file.txt'].should be_nil - end - end - - it 'does not store ignored files' do - fixtures do |path| - touch 'ignored_file.rb' - - record = described_class.new(path) - record.ignore %r{^ignored_file.rb$} - record.build - - record.paths[path]['ignored_file.rb'].should be_nil - end - end - end - - context 'with filters set' do - it 'only stores filterd files' do - fixtures do |path| - touch 'file.rb' - touch 'file.zip' - mkdir 'a_directory' - touch 'a_directory/file.txt' - touch 'a_directory/file.rb' - - record = described_class.new(path) - record.filter(/\.txt$/, /.*\.zip/) - record.build - - record.paths[path]['file.rb'].should be_nil - record.paths[path]['file.zip'].type.should eq 'File' - record.paths[path]['a_directory'].type.should eq 'Dir' - record.paths["#{path}/a_directory"]['file.txt'].type.should eq 'File' - record.paths["#{path}/a_directory"]['file.rb'].should be_nil - end - end - end - end - - describe '#relative_to_base' do - it 'removes the path of the base-directory from the passed path' do - path = 'dir/to/app/file.rb' - subject.relative_to_base(File.join(base_directory, path)).should eq path - end - - it 'returns nil when the passed path is not inside the base-directory' do - subject.relative_to_base('/tmp/some_random_path').should be_nil - end - - it 'works with non UTF-8 paths' do - path = "tmp/\xE4\xE4" - subject.relative_to_base(File.join(base_directory, path)) - end - - context 'when there are utf-8 chars in base directory' do - before do - fixtures do |path| - mkdir '目录' - @dir = described_class.new(path + '/目录') - @dir.build - end - end - - it 'works' do - path = File.join @dir.directory, 'tmp/file.rb' - @dir.relative_to_base path - end - end - - context 'when containing regexp characters in the base directory' do - before do - fixtures do |path| - mkdir 'a_directory$' - @dir = described_class.new(path + '/a_directory$') - @dir.build - end - end - - it 'removes the path of the base-directory from the passed path' do - path = 'dir/to/app/file.rb' - @dir.relative_to_base(File.join(@dir.directory, path)).should eq path - end - - it 'returns nil when the passed path is not inside the base-directory' do - @dir.relative_to_base('/tmp/some_random_path').should be_nil - end - end - end - - describe '#fetch_changes' do - context 'with single file changes' do - context 'when a file is created' do - it 'detects the added file' do - fixtures do |path| - modified, added, removed = changes(path) do - touch 'new_file.rb' - end - - added.should =~ %w(new_file.rb) - modified.should be_empty - removed.should be_empty - end - end - - it 'stores the added file in the record' do - fixtures do |path| - changes(path) do - @record.paths.should be_empty - - touch 'new_file.rb' - end - - @record.paths[path]['new_file.rb'].should_not be_nil - end - end - - context 'given a new created directory' do - it 'detects the added file' do - fixtures do |path| - modified, added, removed = changes(path) do - mkdir 'a_directory' - touch 'a_directory/new_file.rb' - end - - added.should =~ %w(a_directory/new_file.rb) - modified.should be_empty - removed.should be_empty - end - end - - it 'stores the added directory and file in the record' do - fixtures do |path| - changes(path) do - @record.paths.should be_empty - - mkdir 'a_directory' - touch 'a_directory/new_file.rb' - end - - @record.paths[path]['a_directory'].should_not be_nil - @record.paths["#{path}/a_directory"]['new_file.rb'].should_not be_nil - end - end - end - - context 'given an existing directory' do - context 'with recursive option set to true' do - it 'detects the added file' do - fixtures do |path| - mkdir 'a_directory' - - modified, added, removed = changes(path, :recursive => true) do - touch 'a_directory/new_file.rb' - end - - added.should =~ %w(a_directory/new_file.rb) - modified.should be_empty - removed.should be_empty - end - end - - context 'with an ignored directory' do - it "doesn't detect the added file" do - fixtures do |path| - mkdir 'ignored_directory' - - modified, added, removed = changes(path, :ignore => %r{^ignored_directory/}, :recursive => true) do - touch 'ignored_directory/new_file.rb' - end - - added.should be_empty - modified.should be_empty - removed.should be_empty - end - end - - it "doesn't detect the added file when it's asked to fetch the changes of the ignored directory"do - fixtures do |path| - mkdir 'ignored_directory' - - modified, added, removed = changes(path, :paths => ["#{path}/ignored_directory"], :ignore => %r{^ignored_directory/}, :recursive => true) do - touch 'ignored_directory/new_file.rb' - end - - added.should be_empty - modified.should be_empty - removed.should be_empty - end - end - end - end - - context 'with recursive option set to false' do - it "doesn't detect deeply-nested added files" do - fixtures do |path| - mkdir 'a_directory' - - modified, added, removed = changes(path, :recursive => false) do - touch 'a_directory/new_file.rb' - end - - added.should be_empty - modified.should be_empty - removed.should be_empty - end - end - end - end - - context 'given a directory with subdirectories' do - it 'detects the added file' do - fixtures do |path| - mkdir_p 'a_directory/subdirectory' - - modified, added, removed = changes(path, :recursive => true) do - touch 'a_directory/subdirectory/new_file.rb' - end - - added.should =~ %w(a_directory/subdirectory/new_file.rb) - modified.should be_empty - removed.should be_empty - end - end - - context 'with an ignored directory' do - it "doesn't detect added files in neither the directory nor the subdirectory" do - fixtures do |path| - mkdir_p 'ignored_directory/subdirectory' - - modified, added, removed = changes(path, :ignore => %r{^ignored_directory/}, :recursive => true) do - touch 'ignored_directory/new_file.rb' - touch 'ignored_directory/subdirectory/new_file.rb' - end - - added.should be_empty - modified.should be_empty - removed.should be_empty - end - end - end - end - end - - context 'when a file is modified' do - it 'detects the modified file' do - fixtures do |path| - touch 'existing_file.txt' - - modified, added, removed = changes(path) do - small_time_difference - touch 'existing_file.txt' - end - - added.should be_empty - modified.should =~ %w(existing_file.txt) - removed.should be_empty - end - end - - context 'during the same second at which we are checking for changes' do - before { ensure_same_second } - - # The following test can only be run on systems that report - # modification times in milliseconds. - it 'always detects the modified file the first time', :if => described_class::HIGH_PRECISION_SUPPORTED do - fixtures do |path| - touch 'existing_file.txt' - - modified, added, removed = changes(path) do - small_time_difference - touch 'existing_file.txt' - end - - added.should be_empty - modified.should =~ %w(existing_file.txt) - removed.should be_empty - end - end - - context 'when a file is created and then checked for modifications at the same second - #27' do - # This issue was the result of checking a file for content changes when - # the mtime and the checking time are the same. In this case there - # is no checksum saved, so the file was reported as being changed. - it 'does not report any changes' do - fixtures do |path| - touch 'a_file.rb' - - modified, added, removed = changes(path) - - added.should be_empty - modified.should be_empty - removed.should be_empty - end - end - end - - it 'detects the modified file the second time if the content have changed' do - fixtures do |path| - touch 'existing_file.txt' - - # Set sha1 path checksum - changes(path) do - touch 'existing_file.txt' - end - - changes(path) do - small_time_difference - touch 'existing_file.txt' - end - - modified, added, removed = changes(path, :use_last_record => true) do - open('existing_file.txt', 'w') { |f| f.write('foo') } - end - - added.should be_empty - modified.should =~ %w(existing_file.txt) - removed.should be_empty - end - end - - it "doesn't checksum the contents of local sockets (#85)", :unless => windows? do - require 'socket' - fixtures do |path| - Digest::SHA1.should_not_receive(:file) - socket_path = File.join(path, "unix_domain_socket") - server = UNIXServer.new(socket_path) - modified, added, removed = changes(path) do - t = Thread.new do - client = UNIXSocket.new(socket_path) - client.write("foo") - end - t.join - end - added.should be_empty - modified.should be_empty - removed.should be_empty - end - end - - it "doesn't detects the modified file the second time if just touched - #62", :unless => described_class::HIGH_PRECISION_SUPPORTED do - fixtures do |path| - touch 'existing_file.txt' - - # Set sha1 path checksum - changes(path) do - touch 'existing_file.txt' - end - - changes(path, :use_last_record => true) do - small_time_difference - open('existing_file.txt', 'w') { |f| f.write('foo') } - end - - modified, added, removed = changes(path, :use_last_record => true) do - touch 'existing_file.txt' - end - - added.should be_empty - modified.should be_empty - removed.should be_empty - end - end - - it "adds the path in the paths checksums if just touched - #62" do - fixtures do |path| - touch 'existing_file.txt' - - changes(path) do - small_time_difference - touch 'existing_file.txt' - end - - @record.sha1_checksums["#{path}/existing_file.txt"].should_not be_nil - end - end - - it "deletes the path from the paths checksums" do - fixtures do |path| - touch 'unnecessary.txt' - - changes(path) do - @record.sha1_checksums["#{path}/unnecessary.txt"] = 'foo' - - rm 'unnecessary.txt' - end - - @record.sha1_checksums["#{path}/unnecessary.txt"].should be_nil - end - end - end - - context 'given a hidden file' do - it 'detects the modified file' do - fixtures do |path| - touch '.hidden' - - modified, added, removed = changes(path) do - small_time_difference - touch '.hidden' - end - - added.should be_empty - modified.should =~ %w(.hidden) - removed.should be_empty - end - end - end - - context 'given a file mode change' do - it 'does not detect the mode change' do - fixtures do |path| - touch 'run.rb' - - modified, added, removed = changes(path) do - small_time_difference - chmod 0777, 'run.rb' - end - - added.should be_empty - modified.should be_empty - removed.should be_empty - end - end - end - - context 'given an existing directory' do - context 'with recursive option set to true' do - it 'detects the modified file' do - fixtures do |path| - mkdir 'a_directory' - touch 'a_directory/existing_file.txt' - - modified, added, removed = changes(path, :recursive => true) do - small_time_difference - touch 'a_directory/existing_file.txt' - end - - added.should be_empty - modified.should =~ %w(a_directory/existing_file.txt) - removed.should be_empty - end - end - end - - context 'with recursive option set to false' do - it "doesn't detects the modified file" do - fixtures do |path| - mkdir 'a_directory' - touch 'a_directory/existing_file.txt' - - modified, added, removed = changes(path, :recursive => false) do - small_time_difference - touch 'a_directory/existing_file.txt' - end - - added.should be_empty - modified.should be_empty - removed.should be_empty - end - end - end - end - - context 'given a directory with subdirectories' do - it 'detects the modified file' do - fixtures do |path| - mkdir_p 'a_directory/subdirectory' - touch 'a_directory/subdirectory/existing_file.txt' - - modified, added, removed = changes(path, :recursive => true) do - small_time_difference - touch 'a_directory/subdirectory/existing_file.txt' - end - - added.should be_empty - modified.should =~ %w(a_directory/subdirectory/existing_file.txt) - removed.should be_empty - end - end - - context 'with an ignored subdirectory' do - it "doesn't detect the modified files in neither the directory nor the subdirectory" do - fixtures do |path| - mkdir_p 'ignored_directory/subdirectory' - touch 'ignored_directory/existing_file.txt' - touch 'ignored_directory/subdirectory/existing_file.txt' - - modified, added, removed = changes(path, :ignore => %r{^ignored_directory/}, :recursive => true) do - touch 'ignored_directory/existing_file.txt' - touch 'ignored_directory/subdirectory/existing_file.txt' - end - - added.should be_empty - modified.should be_empty - removed.should be_empty - end - end - end - end - end - - context 'when a file is moved' do - it 'detects the file movement' do - fixtures do |path| - touch 'move_me.txt' - - modified, added, removed = changes(path) do - mv 'move_me.txt', 'new_name.txt' - end - - added.should =~ %w(new_name.txt) - modified.should be_empty - removed.should =~ %w(move_me.txt) - end - end - - context 'given an existing directory' do - context 'with recursive option set to true' do - it 'detects the file movement into the directory' do - fixtures do |path| - mkdir 'a_directory' - touch 'move_me.txt' - - modified, added, removed = changes(path, :recursive => true) do - mv 'move_me.txt', 'a_directory/move_me.txt' - end - - added.should =~ %w(a_directory/move_me.txt) - modified.should be_empty - removed.should =~ %w(move_me.txt) - end - end - - it 'detects a file movement out of the directory' do - fixtures do |path| - mkdir 'a_directory' - touch 'a_directory/move_me.txt' - - modified, added, removed = changes(path, :recursive => true) do - mv 'a_directory/move_me.txt', 'i_am_here.txt' - end - - added.should =~ %w(i_am_here.txt) - modified.should be_empty - removed.should =~ %w(a_directory/move_me.txt) - end - end - - it 'detects a file movement between two directories' do - fixtures do |path| - mkdir 'from_directory' - touch 'from_directory/move_me.txt' - mkdir 'to_directory' - - modified, added, removed = changes(path, :recursive => true) do - mv 'from_directory/move_me.txt', 'to_directory/move_me.txt' - end - - added.should =~ %w(to_directory/move_me.txt) - modified.should be_empty - removed.should =~ %w(from_directory/move_me.txt) - end - end - end - - context 'with recursive option set to false' do - it "doesn't detect the file movement into the directory" do - fixtures do |path| - mkdir 'a_directory' - touch 'move_me.txt' - - modified, added, removed = changes(path, :recursive => false) do - mv 'move_me.txt', 'a_directory/move_me.txt' - end - - added.should be_empty - modified.should be_empty - removed.should =~ %w(move_me.txt) - end - end - - it "doesn't detect a file movement out of the directory" do - fixtures do |path| - mkdir 'a_directory' - touch 'a_directory/move_me.txt' - - modified, added, removed = changes(path, :recursive => false) do - mv 'a_directory/move_me.txt', 'i_am_here.txt' - end - - added.should =~ %w(i_am_here.txt) - modified.should be_empty - removed.should be_empty - end - end - - it "doesn't detect a file movement between two directories" do - fixtures do |path| - mkdir 'from_directory' - touch 'from_directory/move_me.txt' - mkdir 'to_directory' - - modified, added, removed = changes(path, :recursive => false) do - mv 'from_directory/move_me.txt', 'to_directory/move_me.txt' - end - - added.should be_empty - modified.should be_empty - removed.should be_empty - end - end - - context 'given a directory with subdirectories' do - it 'detects a file movement between two subdirectories' do - fixtures do |path| - mkdir_p 'a_directory/subdirectory' - mkdir_p 'b_directory/subdirectory' - touch 'a_directory/subdirectory/move_me.txt' - - modified, added, removed = changes(path, :recursive => true) do - mv 'a_directory/subdirectory/move_me.txt', 'b_directory/subdirectory' - end - - added.should =~ %w(b_directory/subdirectory/move_me.txt) - modified.should be_empty - removed.should =~ %w(a_directory/subdirectory/move_me.txt) - end - end - - context 'with an ignored subdirectory' do - it "doesn't detect the file movement between subdirectories" do - fixtures do |path| - mkdir_p 'a_ignored_directory/subdirectory' - mkdir_p 'b_ignored_directory/subdirectory' - touch 'a_ignored_directory/subdirectory/move_me.txt' - - modified, added, removed = changes(path, :ignore => %r{^(?:a|b)_ignored_directory/}, :recursive => true) do - mv 'a_ignored_directory/subdirectory/move_me.txt', 'b_ignored_directory/subdirectory' - end - - added.should be_empty - modified.should be_empty - removed.should be_empty - end - end - end - end - - context 'with all paths passed as params' do - it 'detects the file movement into the directory' do - fixtures do |path| - mkdir 'a_directory' - touch 'move_me.txt' - - modified, added, removed = changes(path, :recursive => false, :paths => [path, "#{path}/a_directory"]) do - mv 'move_me.txt', 'a_directory/move_me.txt' - end - - added.should =~ %w(a_directory/move_me.txt) - modified.should be_empty - removed.should =~ %w(move_me.txt) - end - end - - it 'detects a file moved outside of a directory' do - fixtures do |path| - mkdir 'a_directory' - touch 'a_directory/move_me.txt' - - modified, added, removed = changes(path, :recursive => false, :paths => [path, "#{path}/a_directory"]) do - mv 'a_directory/move_me.txt', 'i_am_here.txt' - end - - added.should =~ %w(i_am_here.txt) - modified.should be_empty - removed.should =~ %w(a_directory/move_me.txt) - end - end - - it 'detects a file movement between two directories' do - fixtures do |path| - mkdir 'from_directory' - touch 'from_directory/move_me.txt' - mkdir 'to_directory' - - modified, added, removed = changes(path, :recursive => false, :paths => [path, "#{path}/from_directory", "#{path}/to_directory"]) do - mv 'from_directory/move_me.txt', 'to_directory/move_me.txt' - end - - added.should =~ %w(to_directory/move_me.txt) - modified.should be_empty - removed.should =~ %w(from_directory/move_me.txt) - end - end - end - end - end - end - - context 'when a file is deleted' do - it 'detects the file removal' do - fixtures do |path| - touch 'unnecessary.txt' - - modified, added, removed = changes(path) do - rm 'unnecessary.txt' - end - - added.should be_empty - modified.should be_empty - removed.should =~ %w(unnecessary.txt) - end - end - - it "deletes the file from the record" do - fixtures do |path| - touch 'unnecessary.txt' - - changes(path) do - @record.paths[path]['unnecessary.txt'].should_not be_nil - - rm 'unnecessary.txt' - end - - @record.paths[path]['unnecessary.txt'].should be_nil - end - end - - it "deletes the path from the paths checksums" do - fixtures do |path| - touch 'unnecessary.txt' - - changes(path) do - @record.sha1_checksums["#{path}/unnecessary.txt"] = 'foo' - - rm 'unnecessary.txt' - end - - @record.sha1_checksums["#{path}/unnecessary.txt"].should be_nil - end - end - - context 'given an existing directory' do - context 'with recursive option set to true' do - it 'detects the file removal' do - fixtures do |path| - mkdir 'a_directory' - touch 'a_directory/do_not_use.rb' - - modified, added, removed = changes(path, :recursive => true) do - rm 'a_directory/do_not_use.rb' - end - - added.should be_empty - modified.should be_empty - removed.should =~ %w(a_directory/do_not_use.rb) - end - end - end - - context 'with recursive option set to false' do - it "doesn't detect the file removal" do - fixtures do |path| - mkdir 'a_directory' - touch 'a_directory/do_not_use.rb' - - modified, added, removed = changes(path, :recursive => false) do - rm 'a_directory/do_not_use.rb' - end - - added.should be_empty - modified.should be_empty - removed.should be_empty - end - end - end - end - - context 'given a directory with subdirectories' do - it 'detects the file removal in subdirectories' do - fixtures do |path| - mkdir_p 'a_directory/subdirectory' - touch 'a_directory/subdirectory/do_not_use.rb' - - modified, added, removed = changes(path, :recursive => true) do - rm 'a_directory/subdirectory/do_not_use.rb' - end - - added.should be_empty - modified.should be_empty - removed.should =~ %w(a_directory/subdirectory/do_not_use.rb) - end - end - - context 'with an ignored subdirectory' do - it "doesn't detect files removals in neither the directory nor its subdirectories" do - fixtures do |path| - mkdir_p 'ignored_directory/subdirectory' - touch 'ignored_directory/do_not_use.rb' - touch 'ignored_directory/subdirectory/do_not_use.rb' - - modified, added, removed = changes(path, :ignore => %r{^ignored_directory/}, :recursive => true) do - rm 'ignored_directory/do_not_use.rb' - rm 'ignored_directory/subdirectory/do_not_use.rb' - end - - added.should be_empty - modified.should be_empty - removed.should be_empty - end - end - end - end - end - end - - context 'multiple file operations' do - it 'detects the added files' do - fixtures do |path| - modified, added, removed = changes(path) do - touch 'a_file.rb' - touch 'b_file.rb' - mkdir 'a_directory' - touch 'a_directory/a_file.rb' - touch 'a_directory/b_file.rb' - end - - added.should =~ %w(a_file.rb b_file.rb a_directory/a_file.rb a_directory/b_file.rb) - modified.should be_empty - removed.should be_empty - end - end - - it 'detects the modified files' do - fixtures do |path| - touch 'a_file.rb' - touch 'b_file.rb' - mkdir 'a_directory' - touch 'a_directory/a_file.rb' - touch 'a_directory/b_file.rb' - - modified, added, removed = changes(path) do - small_time_difference - touch 'b_file.rb' - touch 'a_directory/a_file.rb' - end - - added.should be_empty - modified.should =~ %w(b_file.rb a_directory/a_file.rb) - removed.should be_empty - end - end - - it 'detects the removed files' do - fixtures do |path| - touch 'a_file.rb' - touch 'b_file.rb' - mkdir 'a_directory' - touch 'a_directory/a_file.rb' - touch 'a_directory/b_file.rb' - - modified, added, removed = changes(path) do - rm 'b_file.rb' - rm 'a_directory/a_file.rb' - end - - added.should be_empty - modified.should be_empty - removed.should =~ %w(b_file.rb a_directory/a_file.rb) - end - end - end - - context 'single directory operations' do - it 'detects a moved directory' do - fixtures do |path| - mkdir 'a_directory' - mkdir 'a_directory/nested' - touch 'a_directory/a_file.rb' - touch 'a_directory/b_file.rb' - touch 'a_directory/nested/c_file.rb' - - modified, added, removed = changes(path) do - mv 'a_directory', 'renamed' - end - - added.should =~ %w(renamed/a_file.rb renamed/b_file.rb renamed/nested/c_file.rb) - modified.should be_empty - removed.should =~ %w(a_directory/a_file.rb a_directory/b_file.rb a_directory/nested/c_file.rb) - end - end - - it 'detects a removed directory' do - fixtures do |path| - mkdir 'a_directory' - touch 'a_directory/a_file.rb' - touch 'a_directory/b_file.rb' - - modified, added, removed = changes(path) do - rm_rf 'a_directory' - end - - added.should be_empty - modified.should be_empty - removed.should =~ %w(a_directory/a_file.rb a_directory/b_file.rb) - end - end - - it "deletes the directory from the record" do - fixtures do |path| - mkdir 'a_directory' - touch 'a_directory/file.rb' - - changes(path) do - @record.paths.should have(2).paths - @record.paths[path]['a_directory'].should_not be_nil - @record.paths["#{path}/a_directory"]['file.rb'].should_not be_nil - - rm_rf 'a_directory' - end - - @record.paths.should have(1).paths - @record.paths[path]['a_directory'].should be_nil - @record.paths["#{path}/a_directory"]['file.rb'].should be_nil - end - end - - context 'with nested paths' do - it 'detects removals without crashing - #18' do - fixtures do |path| - mkdir_p 'a_directory/subdirectory' - touch 'a_directory/subdirectory/do_not_use.rb' - - modified, added, removed = changes(path) do - rm_r 'a_directory' - end - - added.should be_empty - modified.should be_empty - removed.should =~ %w(a_directory/subdirectory/do_not_use.rb) - end - end - end - end - - context 'with a path outside the directory for which a record is made' do - it "skips that path and doesn't check for changes" do - fixtures do |path| - modified, added, removed = changes(path, :paths => ['some/where/outside']) do - @record.should_not_receive(:detect_additions) - @record.should_not_receive(:detect_modifications_and_removals) - - touch 'new_file.rb' - end - - added.should be_empty - modified.should be_empty - removed.should be_empty - end - end - end - - context 'with the relative_paths option set to false' do - it 'returns full paths in the changes hash' do - fixtures do |path| - touch 'a_file.rb' - touch 'b_file.rb' - - modified, added, removed = changes(path, :relative_paths => false) do - small_time_difference - rm 'a_file.rb' - touch 'b_file.rb' - touch 'c_file.rb' - mkdir 'a_directory' - touch 'a_directory/a_file.rb' - end - - added.should =~ ["#{path}/c_file.rb", "#{path}/a_directory/a_file.rb"] - modified.should =~ ["#{path}/b_file.rb"] - removed.should =~ ["#{path}/a_file.rb"] - end - end - end - - context 'within a directory containing unreadble paths - #32' do - it 'detects changes more than a second apart' do - fixtures do |path| - touch 'unreadable_file.txt' - chmod 000, 'unreadable_file.txt' - - modified, added, removed = changes(path) do - small_time_difference - touch 'unreadable_file.txt' - end - - added.should be_empty - modified.should =~ %w(unreadable_file.txt) - removed.should be_empty - end - end - - context 'with multiple changes within the same second' do - before { ensure_same_second } - - it 'does not detect changes even if content changes', :unless => described_class::HIGH_PRECISION_SUPPORTED do - fixtures do |path| - touch 'unreadable_file.txt' - - modified, added, removed = changes(path) do - open('unreadable_file.txt', 'w') { |f| f.write('foo') } - chmod 000, 'unreadable_file.txt' - end - - added.should be_empty - modified.should be_empty - removed.should be_empty - end - end - end - end - - context 'within a directory containing a removed file - #39' do - it 'does not raise an exception when hashing a removed file' do - - # simulate a race condition where the file is removed after the - # change event is tracked, but before the hash is calculated - Digest::SHA1.should_receive(:file).twice.and_raise(Errno::ENOENT) - - fixtures do |path| - lambda { - touch 'removed_file.txt' - changes(path) { touch 'removed_file.txt' } - }.should_not raise_error - end - end - end - - context 'within a directory containing a unix domain socket file', :unless => windows? do - it 'does not raise an exception when hashing a unix domain socket file' do - fixtures do |path| - require 'socket' - UNIXServer.new('unix_domain_socket.sock') - lambda { changes(path){} }.should_not raise_error - end - end - end - - context 'with symlinks', :unless => windows? do - it 'looks at symlinks not their targets' do - fixtures do |path| - touch 'target' - symlink 'target', 'symlink' - - record = described_class.new(path) - record.build - - sleep 1 - touch 'target' - - record.fetch_changes([path], :relative_paths => true)[:modified].should == ['target'] - end - end - - it 'handles broken symlinks' do - fixtures do |path| - symlink 'target', 'symlink' - - record = described_class.new(path) - record.build - - sleep 1 - rm 'symlink' - symlink 'new-target', 'symlink' - record.fetch_changes([path], :relative_paths => true) - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/listener_spec.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/listener_spec.rb deleted file mode 100644 index 58991a8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/listener_spec.rb +++ /dev/null @@ -1,258 +0,0 @@ -require 'spec_helper' - -describe Listen::Listener do - let(:adapter) { double(Listen::Adapter, :start => true).as_null_object } - let(:watched_directories) { [File.dirname(__FILE__), File.expand_path('../..', __FILE__)] } - - before do - Listen::Adapter.stub(:select_and_initialize) { adapter } - # Don't build a record of the files inside the base directory. - Listen::DirectoryRecord.any_instance.stub(:build) - Kernel.stub(:warn) - end - subject { described_class.new(watched_directories) } - - it_should_behave_like 'a listener to changes on a file-system' - - describe '#initialize' do - context 'listening to a single directory' do - let(:watched_directory) { File.dirname(__FILE__) } - let(:watched_directories) { nil } - subject { described_class.new(watched_directory) } - - it 'sets the directories' do - subject.directories.should eq [watched_directory] - end - - context 'with no options' do - it 'sets the option for using relative paths in the callback to false' do - subject.instance_variable_get(:@use_relative_paths).should eq false - end - end - - context 'with :relative_paths => false' do - it 'sets the option for using relative paths in the callback to false' do - listener = described_class.new(watched_directory, :relative_paths => false) - listener.instance_variable_get(:@use_relative_paths).should eq false - end - end - - context 'with :relative_paths => true' do - it 'sets the option for using relative paths in the callback to true' do - listener = described_class.new(watched_directory, :relative_paths => true) - listener.instance_variable_get(:@use_relative_paths).should eq true - end - end - end - - context 'listening to multiple directories' do - subject { described_class.new(watched_directories) } - - it 'sets the directories' do - subject.directories.should eq watched_directories - end - - context 'with no options' do - it 'sets the option for using relative paths in the callback to false' do - subject.instance_variable_get(:@use_relative_paths).should eq false - end - end - - context 'with :relative_paths => false' do - it 'sets the option for using relative paths in the callback to false' do - listener = described_class.new(watched_directories, :relative_paths => false) - listener.instance_variable_get(:@use_relative_paths).should eq false - end - end - - context 'with :relative_paths => true' do - it 'warns' do - Kernel.should_receive(:warn).with("[Listen warning]: #{Listen::Listener::RELATIVE_PATHS_WITH_MULTIPLE_DIRECTORIES_WARNING_MESSAGE}") - listener = described_class.new(watched_directories, :relative_paths => true) - end - - it 'sets the option for using relative paths in the callback to false' do - listener = described_class.new(watched_directories, :relative_paths => true) - listener.instance_variable_get(:@use_relative_paths).should eq false - end - end - end - - context 'with a directory' do - let(:watched_directory) { File.dirname(__FILE__) } - it 'converts the passed path into an absolute path - #21' do - described_class.new(File.join(watched_directory, '..')).directories.should eq [File.expand_path('..', watched_directory)] - end - end - - context 'with custom options' do - let(:watched_directory) { File.dirname(__FILE__) } - let(:adapter_class) { double('adapter class') } - - let(:options) do - { - :ignore => /\.ssh/, :filter => [/.*\.rb/, /.*\.md/], - :latency => 0.5, :force_polling => true, :relative_paths => true, - :force_adapter => adapter_class - } - end - subject { described_class.new(watched_directory, options) } - - it 'passes the custom ignored paths to the directory record' do - subject.directories_records.each do |directory_record| - directory_record.ignoring_patterns.should include /\.ssh/ - end - end - - it 'passes the custom filters to the directory record' do - subject.directories_records.each do |directory_record| - directory_record.filtering_patterns.should =~ [/.*\.rb/,/.*\.md/] - end - end - - it 'sets adapter_options' do - subject.instance_variable_get(:@adapter_options).should eq(:latency => 0.5, :force_polling => true, :force_adapter => adapter_class) - end - end - end - - describe '#start' do - it 'selects and initializes an adapter' do - Listen::Adapter.should_receive(:select_and_initialize).with(watched_directories, {}) { adapter } - subject.start - end - - it 'builds the directory record' do - subject.directories_records.each do |directory_record| - directory_record.should_receive(:build) - end - subject.start - end - end - - context 'with a started listener' do - before do - subject.stub(:initialize_adapter) { adapter } - subject.start - end - - describe '#unpause' do - it 'rebuilds the directory record' do - subject.directories_records.each do |directory_record| - directory_record.should_receive(:build) - end - subject.unpause - end - end - end - - describe '#ignore'do - it 'delegates the work to the directory record' do - subject.directories_records.each do |directory_record| - directory_record.should_receive(:ignore).with 'some_directory' - end - subject.ignore 'some_directory' - end - end - - describe '#ignore!'do - it 'delegates the work to the directory record' do - subject.directories_records.each do |directory_record| - directory_record.should_receive(:ignore!).with 'some_directory' - end - subject.ignore! 'some_directory' - end - end - - describe '#filter' do - it 'delegates the work to the directory record' do - subject.directories_records.each do |directory_record| - directory_record.should_receive(:filter).with /\.txt$/ - end - subject.filter /\.txt$/ - end - end - - describe '#filter!' do - it 'delegates the work to the directory record' do - subject.directories_records.each do |directory_record| - directory_record.should_receive(:filter!).with /\.txt$/ - end - subject.filter! /\.txt$/ - end - end - - describe '#on_change' do - let(:directories) { %w{dir1 dir2 dir3} } - let(:changes) { {:modified => [], :added => [], :removed => []} } - let(:callback) { Proc.new { @called = true } } - - before do - @called = false - subject.stub(:fetch_records_changes => changes) - end - - it 'fetches the changes of all directories records' do - subject.unstub(:fetch_records_changes) - - subject.directories_records.each do |record| - record.should_receive(:fetch_changes).with(directories, an_instance_of(Hash)).and_return(changes) - end - subject.on_change(directories) - end - - context "with a callback raising an exception" do - let(:callback) { Proc.new { raise 'foo' } } - - before do - subject.change(&callback) - subject.stub(:fetch_records_changes => { :modified => ['foo'], :added => [], :removed => [] } ) - end - - it "stops the adapter and warns" do - Kernel.should_receive(:warn).with("[Listen warning]: Change block raise an execption: foo") - Kernel.should_receive(:warn).with(/^Backtrace:.*/) - subject.on_change(directories) - end - - end - - context 'with no changes to report' do - if RUBY_VERSION[/^1.8/] - it 'does not run the callback' do - subject.change(&callback) - subject.on_change(directories) - @called.should be_false - end - else - it 'does not run the callback' do - callback.should_not_receive(:call) - subject.change(&callback) - subject.on_change(directories) - end - end - end - - context 'with changes to report' do - let(:changes) do - { - :modified => %w{path1}, :added => [], :removed => %w{path2} - } - end - - if RUBY_VERSION[/^1.8/] - it 'runs the callback passing it the changes' do - subject.change(&callback) - subject.on_change(directories) - @called.should be_true - end - else - it 'runs the callback passing it the changes' do - callback.should_receive(:call).with(changes[:modified], changes[:added], changes[:removed]) - subject.change(&callback) - subject.on_change(directories) - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/turnstile_spec.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/turnstile_spec.rb deleted file mode 100644 index 178a3b4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen/turnstile_spec.rb +++ /dev/null @@ -1,56 +0,0 @@ -require 'spec_helper' - -def run_in_two_threads(proc1, proc2) - t1 = Thread.new &proc1 - sleep test_latency # t1 must run before t2 - t2 = Thread.new { proc2.call; Thread.kill t1 } - t2.join(test_latency * 2) -ensure - Thread.kill t1 if t1 - Thread.kill t2 if t2 -end - -describe Listen::Turnstile do - before { @called = false } - - describe '#wait' do - context 'without a signal' do - it 'blocks one thread indefinitely' do - run_in_two_threads lambda { - subject.wait - @called = true - }, lambda { - sleep test_latency - } - @called.should be_false - end - end - - context 'with a signal' do - it 'blocks one thread until it recieves a signal from another thread' do - run_in_two_threads lambda { - subject.wait - @called = true - }, lambda { - subject.signal - sleep test_latency - } - @called.should be_true - end - end - end - - describe '#signal' do - context 'without a wait-call before' do - it 'does nothing' do - run_in_two_threads lambda { - subject.signal - @called = true - }, lambda { - sleep test_latency - } - @called.should be_true - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen_spec.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen_spec.rb deleted file mode 100644 index a5be1f5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/listen_spec.rb +++ /dev/null @@ -1,67 +0,0 @@ -require 'spec_helper' - -describe Listen do - describe '#to' do - let(:listener) { double(Listen::Listener) } - let(:listener_class) { Listen::Listener } - before { listener_class.stub(:new => listener) } - - context 'with one path to listen to' do - context 'without options' do - it 'creates an instance of Listener' do - listener_class.should_receive(:new).with('/path') - described_class.to('/path') - end - end - - context 'with options' do - it 'creates an instance of Listener with the passed params' do - listener_class.should_receive(:new).with('/path', :filter => '**/*') - described_class.to('/path', :filter => '**/*') - end - end - - context 'without a block' do - it 'returns the listener' do - described_class.to('/path', :filter => '**/*').should eq listener - end - end - - context 'with a block' do - it 'starts the listener after creating it' do - listener.should_receive(:start) - described_class.to('/path', :filter => '**/*') { |modified, added, removed| } - end - end - end - - context 'with multiple paths to listen to' do - context 'without options' do - it 'creates an instance of Listener' do - listener_class.should_receive(:new).with('path1', 'path2') - described_class.to('path1', 'path2') - end - end - - context 'with options' do - it 'creates an instance of Listener with the passed params' do - listener_class.should_receive(:new).with('path1', 'path2', :filter => '**/*') - described_class.to('path1', 'path2', :filter => '**/*') - end - end - - context 'without a block' do - it 'returns a Listener instance created with the passed params' do - described_class.to('path1', 'path2', :filter => '**/*').should eq listener - end - end - - context 'with a block' do - it 'starts a Listener instance after creating it with the passed params' do - listener.should_receive(:start) - described_class.to('path1', 'path2', :filter => '**/*') { |modified, added, removed| } - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/spec_helper.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/spec_helper.rb deleted file mode 100644 index 78590ba..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/spec_helper.rb +++ /dev/null @@ -1,25 +0,0 @@ -require 'rubygems' -require 'coveralls' -Coveralls.wear! - -require 'listen' - -Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f } - -# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration -RSpec.configure do |config| - config.color_enabled = true - config.order = :random - config.filter_run :focus => true - config.treat_symbols_as_metadata_keys_with_true_values = true - config.run_all_when_everything_filtered = true - config.filter_run_excluding :broken => true - config.fail_fast = true -end - -def test_latency - 0.1 -end - -# Crash loud in tests! -Thread.abort_on_exception = true diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/support/adapter_helper.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/support/adapter_helper.rb deleted file mode 100644 index 5efed33..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/support/adapter_helper.rb +++ /dev/null @@ -1,666 +0,0 @@ -# Adapter watch -# -# @param [Listen::Listener] listener the adapter listener -# @param [String] path the path to watch -# -def watch(listener, expected_changes, *paths) - sleep 0.05 # allow file/creation to be done (!) - - callback = lambda do |changed_directories, options| - @called = true - listener.on_change(changed_directories) - end - @adapter = Listen::Adapter.select_and_initialize(paths, { :latency => test_latency }, &callback) - @adapter.stub(:start_poller) { nil } - - forced_stop = false - prevent_deadlock = lambda do - sleep(10) - puts 'Forcing stop' - @adapter.stop - forced_stop = true - end - - @adapter.start - - yield - - t = Thread.new(&prevent_deadlock) - @adapter.wait_for_changes(expected_changes) - - unless forced_stop - Thread.kill(t) - @adapter.report_changes - end -ensure - unless forced_stop - Thread.kill(t) if t - @adapter.stop - end -end - -shared_examples_for 'a filesystem adapter' do - subject { described_class.new(File.dirname(__FILE__), &Proc.new {}) } - - describe '#start' do - before { Kernel.stub(:warn) } - after { subject.stop } - - it 'do not block the current thread after starting the workers' do - @called = false - t = Thread.new { subject.start; @called = true } - sleep(test_latency * 3) - Thread.kill(t) if t - @called.should be_true - end - - context 'with the blocking hash option set to false' do - subject { described_class.new(File.dirname(__FILE__), { :blocking => false }, &Proc.new {}) } - - it 'does not block the current thread after starting the workers' do - @called = false - t = Thread.new { subject.start; @called = true } - sleep(test_latency * 3) - Thread.kill(t) if t - @called.should be_true - end - end - end - - describe '#start!' do - before { Kernel.stub(:warn) } - after { subject.stop } - - it 'blocks the current thread after starting the workers' do - @called = false - t = Thread.new { subject.start!; @called = true } - sleep(test_latency * 3) - Thread.kill(t) if t - @called.should be_false - end - - context 'with the blocking hash option set to false' do - subject { described_class.new(File.dirname(__FILE__), { :blocking => true }, &Proc.new {}) } - - it 'blocks the current thread after starting the workers' do - @called = false - t = Thread.new { subject.start!; @called = true } - sleep(test_latency * 3) - Thread.kill(t) if t - @called.should be_false - end - end - end - - describe '#started?' do - context 'with a new adapter' do - it 'returns false' do - subject.should_not be_started - end - end - - context 'with a stopped adapter' do - before { subject.start; subject.stop } - - it 'returns false' do - subject.should_not be_started - end - end - - context 'with a started adapter' do - before { subject.start } - after { subject.stop } - - it 'returns true' do - subject.should be_started - end - end - end -end - -shared_examples_for 'an adapter that call properly listener#on_change' do |*args| - options = (args.first && args.first.is_a?(Hash)) ? args.first : {} - let(:listener) { double(Listen::Listener) } - before { described_class.stub(:works?) { true } } - - context 'single file operations' do - context 'when a file is created' do - it 'detects the added file' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include(path) - end - - watch(listener, 1, path) do - touch 'new_file.rb' - end - end - end - - context 'given a symlink', :unless => windows? do - it 'detects the added file' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include(path) - end - - touch 'new_file.rb' - - watch(listener, 1, path) do - ln_s 'new_file.rb', 'new_file_symlink.rb' - end - end - end - end - - context 'given a new created directory' do - it 'detects the added file' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include(path, "#{path}/a_directory") - end - - watch(listener, 2, path) do - mkdir 'a_directory' - # Needed for INotify, because of :recursive rb-inotify custom flag? - sleep 0.05 - touch 'a_directory/new_file.rb' - end - end - end - end - - context 'given an existing directory' do - it 'detects the added file' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include("#{path}/a_directory") - end - - mkdir 'a_directory' - - watch(listener, 1, path) do - touch 'a_directory/new_file.rb' - end - end - end - end - - context 'given a directory with subdirectories' do - it 'detects the added file' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include("#{path}/a_directory/subdirectory") - end - - mkdir_p 'a_directory/subdirectory' - - watch(listener, 1, path) do - touch 'a_directory/subdirectory/new_file.rb' - end - end - end - end - end - - context 'when a file is modified' do - it 'detects the modified file' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include(path) - end - - touch 'existing_file.txt' - - watch(listener, 1, path) do - touch 'existing_file.txt' - end - end - end - - context 'given a symlink', :unless => windows? do - it 'detects the modified file' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include(path) - end - - touch 'existing_file.rb' - ln_s 'existing_file.rb', 'existing_file_symlink.rb' - - watch(listener, 1, path) do - touch 'existing_file.rb' - end - end - end - end - - context 'given a hidden file' do - it 'detects the modified file' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include(path) - end - - touch '.hidden' - - watch(listener, 1, path) do - touch '.hidden' - end - end - end - end - - context 'given a file mode change', :unless => windows? do - it 'does not detect the mode change' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include(path) - end - - touch 'run.rb' - - watch(listener, 1, path) do - chmod 0777, 'run.rb' - end - end - end - end - - context 'given an existing directory' do - it 'detects the modified file' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include("#{path}/a_directory") - end - - mkdir 'a_directory' - touch 'a_directory/existing_file.txt' - - watch(listener, 1, path) do - touch 'a_directory/existing_file.txt' - end - end - end - end - - context 'given a directory with subdirectories' do - it 'detects the modified file' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include("#{path}/a_directory/subdirectory") - end - - mkdir_p 'a_directory/subdirectory' - touch 'a_directory/subdirectory/existing_file.txt' - - watch(listener, 1, path) do - touch 'a_directory/subdirectory/new_file.rb' - end - end - end - end - end - - context 'when a file is moved' do - it 'detects the file move' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include(path) - end - - touch 'move_me.txt' - - watch(listener, 1, path) do - mv 'move_me.txt', 'new_name.txt' - end - end - end - - context 'given a symlink', :unless => windows? do - it 'detects the file move' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include(path) - end - - touch 'move_me.rb' - ln_s 'move_me.rb', 'move_me_symlink.rb' - - watch(listener, 1, path) do - mv 'move_me_symlink.rb', 'new_symlink.rb' - end - end - end - end - - context 'given an existing directory' do - it 'detects the file move into the directory' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include(path, "#{path}/a_directory") - end - - mkdir 'a_directory' - touch 'move_me.txt' - - watch(listener, 2, path) do - mv 'move_me.txt', 'a_directory/move_me.txt' - end - end - end - - it 'detects a file move out of the directory' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include(path, "#{path}/a_directory") - end - - mkdir 'a_directory' - touch 'a_directory/move_me.txt' - - watch(listener, 2, path) do - mv 'a_directory/move_me.txt', 'i_am_here.txt' - end - end - end - - it 'detects a file move between two directories' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include("#{path}/from_directory", "#{path}/to_directory") - end - - mkdir 'from_directory' - touch 'from_directory/move_me.txt' - mkdir 'to_directory' - - watch(listener, 2, path) do - mv 'from_directory/move_me.txt', 'to_directory/move_me.txt' - end - end - end - end - - context 'given a directory with subdirectories' do - it 'detects files movements between subdirectories' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include("#{path}/a_directory/subdirectory", "#{path}/b_directory/subdirectory") - end - - mkdir_p 'a_directory/subdirectory' - mkdir_p 'b_directory/subdirectory' - touch 'a_directory/subdirectory/move_me.txt' - - watch(listener, 2, path) do - mv 'a_directory/subdirectory/move_me.txt', 'b_directory/subdirectory' - end - end - end - end - end - - context 'when a file is deleted' do - it 'detects the file removal' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include(path) - end - - touch 'unnecessary.txt' - - watch(listener, 1, path) do - rm 'unnecessary.txt' - end - end - end - - context 'given a symlink', :unless => windows? do - it 'detects the file removal' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include(path) - end - - touch 'unnecessary.rb' - ln_s 'unnecessary.rb', 'unnecessary_symlink.rb' - - watch(listener, 1, path) do - rm 'unnecessary_symlink.rb' - end - end - end - end - - context 'given an existing directory' do - it 'detects the file removal' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include("#{path}/a_directory") - end - - mkdir 'a_directory' - touch 'a_directory/do_not_use.rb' - - watch(listener, 1, path) do - rm 'a_directory/do_not_use.rb' - end - end - end - end - - context 'given a directory with subdirectories' do - it 'detects the file removal' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include("#{path}/a_directory/subdirectory") - end - - mkdir_p 'a_directory/subdirectory' - touch 'a_directory/subdirectory/do_not_use.rb' - - watch(listener, 1, path) do - rm 'a_directory/subdirectory/do_not_use.rb' - end - end - end - end - end - end - - context 'multiple file operations' do - it 'detects the added files' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include(path, "#{path}/a_directory") - end - - watch(listener, 2, path) do - touch 'a_file.rb' - touch 'b_file.rb' - mkdir 'a_directory' - # Needed for INotify, because of :recursive rb-inotify custom flag? - # Also needed for the osx adapter - sleep 0.05 - touch 'a_directory/a_file.rb' - touch 'a_directory/b_file.rb' - end - end - end - - it 'detects the modified files' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include(path, "#{path}/a_directory") - end - - touch 'a_file.rb' - touch 'b_file.rb' - mkdir 'a_directory' - touch 'a_directory/a_file.rb' - touch 'a_directory/b_file.rb' - - watch(listener, 2, path) do - touch 'b_file.rb' - touch 'a_directory/a_file.rb' - end - end - end - - it 'detects the removed files' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include(path, "#{path}/a_directory") - end - - touch 'a_file.rb' - touch 'b_file.rb' - mkdir 'a_directory' - touch 'a_directory/a_file.rb' - touch 'a_directory/b_file.rb' - - watch(listener, 2, path) do - rm 'b_file.rb' - rm 'a_directory/a_file.rb' - end - end - end - end - - context 'single directory operations' do - it 'detects a moved directory' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include(path) - end - - mkdir 'a_directory' - touch 'a_directory/a_file.rb' - touch 'a_directory/b_file.rb' - - watch(listener, 1, path) do - mv 'a_directory', 'renamed' - end - end - end - - it 'detects a removed directory' do - fixtures do |path| - listener.should_receive(:on_change).once.with do |array| - array.should include(path, "#{path}/a_directory") - end - - mkdir 'a_directory' - touch 'a_directory/a_file.rb' - touch 'a_directory/b_file.rb' - - watch(listener, 2, path) do - rm_rf 'a_directory' - end - end - end - end - - context "paused adapter" do - context 'when a file is created' do - it "doesn't detects the added file" do - fixtures do |path| - watch(listener, 1, path) do # The expected changes param is set to one! - @adapter.paused = true - touch 'new_file.rb' - end - @called.should be_nil - end - end - end - end - - context "when multiple directories are listened to" do - context 'when files are added to one of multiple directories' do - it 'detects added files' do - fixtures(2) do |path1, path2| - listener.should_receive(:on_change).once.with do |array| - array.should include(path2) - end - - watch(listener, 1, path1, path2) do - touch "#{path2}/new_file.rb" - end - end - end - end - - context 'when files are added to multiple directories' do - it 'detects added files' do - fixtures(2) do |path1, path2| - listener.should_receive(:on_change).once.with do |array| - array.should include(path1, path2) - end - - watch(listener, 2, path1, path2) do - touch "#{path1}/new_file.rb" - touch "#{path2}/new_file.rb" - end - end - end - end - - context 'given a new and an existing directory on multiple directories' do - it 'detects the added file' do - fixtures(2) do |path1, path2| - listener.should_receive(:on_change).once.with do |array| - array.should include(path2, "#{path1}/a_directory", "#{path2}/b_directory") - end - - mkdir "#{path1}/a_directory" - - watch(listener, 3, path1, path2) do - mkdir "#{path2}/b_directory" - # Needed for INotify - sleep 0.05 - touch "#{path1}/a_directory/new_file.rb" - touch "#{path2}/b_directory/new_file.rb" - end - end - end - end - - context 'when a file is moved between the multiple watched directories' do - it 'detects the movements of the file' do - fixtures(3) do |path1, path2, path3| - listener.should_receive(:on_change).once.with do |array| - array.should include("#{path1}/from_directory", path2, "#{path3}/to_directory") - end - - mkdir "#{path1}/from_directory" - touch "#{path1}/from_directory/move_me.txt" - mkdir "#{path3}/to_directory" - - watch(listener, 3, path1, path2, path3) do - mv "#{path1}/from_directory/move_me.txt", "#{path2}/move_me.txt" - mv "#{path2}/move_me.txt", "#{path3}/to_directory/move_me.txt" - end - end - end - end - - context 'when files are deleted from the multiple watched directories' do - it 'detects the files removal' do - fixtures(2) do |path1, path2| - listener.should_receive(:on_change).once.with do |array| - array.should include(path1, path2) - end - - touch "#{path1}/unnecessary.txt" - touch "#{path2}/unnecessary.txt" - - watch(listener, 2, path1, path2) do - rm "#{path1}/unnecessary.txt" - rm "#{path2}/unnecessary.txt" - end - end - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/support/directory_record_helper.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/support/directory_record_helper.rb deleted file mode 100644 index 71bdf60..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/support/directory_record_helper.rb +++ /dev/null @@ -1,57 +0,0 @@ -# Prepares a record for the test and fetches changes -# afterwards. -# -# @param [String] root_path the path to watch -# @param [Hash] options -# @option options [Array] :paths optional paths fetch changes for -# @option options [Boolean] :use_last_record allow the use of an already -# created record, handy for ordered tests. -# -# @return [Array, Array, Array] the changes -# -def changes(root_path, options = {}) - unless @record || options[:use_last_record] - @record = Listen::DirectoryRecord.new(root_path) - @record.filter(options.delete(:filter)) if options[:filter] - @record.ignore(options.delete(:ignore)) if options[:ignore] - - # Build the record after adding the filtering and ignoring patterns - @record.build - end - - yield if block_given? - - paths = options.delete(:paths) || [root_path] - options[:recursive] = true if options[:recursive].nil? - - changes = @record.fetch_changes(paths, { :relative_paths => true }.merge(options)) - - [changes[:modified], changes[:added], changes[:removed]] -end - -# Generates a small time difference before performing a time sensitive -# task (like comparing mtimes of files). -# -# @note Modification time for files only includes the milliseconds on Linux with MRI > 1.9.2 -# and platform that support it (OS X 10.8 not included), -# that's why we generate a difference that's greater than 1 second. -# -def small_time_difference - t = Time.now - diff = t.to_f - t.to_i - - sleep(1.05 - diff) -end - -# Ensures that the test runs at almost the same second at which -# changes are being checked. -# -def ensure_same_second - t = Time.now - diff = t.to_f - t.to_i - - # We are not at the end of a second - if diff >= (1 - Listen::Adapter::DEFAULT_LATENCY) - sleep(1.05 - diff) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/support/fixtures_helper.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/support/fixtures_helper.rb deleted file mode 100644 index a885ac6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/support/fixtures_helper.rb +++ /dev/null @@ -1,29 +0,0 @@ -require 'tmpdir' - -include FileUtils - -# Prepares temporary fixture-directories and -# cleans them afterwards. -# -# @param [Fixnum] number_of_directories the number of fixture-directories to make -# -# @yield [path1, path2, ...] the empty fixture-directories -# @yieldparam [String] path the path to a fixture directory -# -def fixtures(number_of_directories = 1) - current_pwd = pwd - paths = 1.upto(number_of_directories).map do - File.expand_path(File.join(pwd, "spec/.fixtures/#{Time.now.to_f.to_s.sub('.', '') + rand(9999).to_s}")) - end - - # Create the dirs - paths.each { |p| mkdir_p(p) } - - cd(paths.first) if number_of_directories == 1 - - yield(*paths) - -ensure - cd current_pwd - paths.map { |p| rm_rf(p) if File.exists?(p) } -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/support/listeners_helper.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/support/listeners_helper.rb deleted file mode 100644 index 62992ac..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/support/listeners_helper.rb +++ /dev/null @@ -1,179 +0,0 @@ -shared_examples_for 'a listener to changes on a file-system' do - describe '#start' do - before do - subject.stub(:initialize_adapter) { adapter } - end - - it 'starts the adapter' do - adapter.should_receive(:start) - subject.start - end - - context 'with the blocking deprecated param set to true' do - it 'displays a deprecation notice' do - Kernel.should_receive(:warn).with(/#{Listen::Listener::BLOCKING_PARAMETER_DEPRECATION_MESSAGE}/) - subject.start(true) - end - end - - context 'with the blocking deprecated param set to false' do - it 'displays a deprecation notice' do - Kernel.should_receive(:warn).with(/#{Listen::Listener::BLOCKING_PARAMETER_DEPRECATION_MESSAGE}/) - subject.start(false) - end - end - end - - describe '#start!' do - before do - subject.stub(:initialize_adapter) { adapter } - end - - it 'starts the adapter' do - adapter.should_receive(:start!) - subject.start! - end - - it 'passes the blocking param to the adapter' do - adapter.should_receive(:start!) - subject.start! - end - end - - context 'with a started listener' do - before do - subject.start - end - - describe '#stop' do - it "stops adapter" do - adapter.should_receive(:stop) - subject.stop - end - end - - describe '#pause' do - it 'sets adapter.paused to true' do - adapter.should_receive(:pause) - subject.pause - end - - it 'returns the same listener to allow chaining' do - subject.pause.should equal subject - end - end - - describe '#unpause' do - it 'sets adapter.paused to false' do - adapter.should_receive(:unpause) - subject.unpause - end - - it 'returns the same listener to allow chaining' do - subject.unpause.should equal subject - end - end - - describe '#paused?' do - it 'returns false when there is no adapter' do - subject.instance_variable_set(:@adapter, nil) - subject.should_not be_paused - end - - it 'returns true when adapter is paused' do - adapter.should_receive(:paused?) { true } - subject.should be_paused - end - - it 'returns false when adapter is not paused' do - adapter.should_receive(:paused?) { false } - subject.should_not be_paused - end - end - end - - describe '#change' do - it 'sets the callback block' do - callback = lambda { |modified, added, removed| } - subject.change(&callback) - subject.instance_variable_get(:@block).should eq callback - end - - it 'returns the same listener to allow chaining' do - subject.change(&Proc.new{}).should equal subject - end - end - - describe '#ignore' do - it 'returns the same listener to allow chaining' do - subject.ignore('some_directory').should equal subject - end - end - - describe '#ignore!' do - it 'returns the same listener to allow chaining' do - subject.ignore!('some_directory').should equal subject - end - end - - describe '#filter' do - it 'returns the same listener to allow chaining' do - subject.filter(/\.txt$/).should equal subject - end - end - - describe '#filter!' do - it 'returns the same listener to allow chaining' do - subject.filter!(/\.txt$/).should equal subject - end - end - - describe '#latency' do - it 'sets the latency to @adapter_options' do - subject.latency(0.7) - subject.instance_variable_get(:@adapter_options).should eq(:latency => 0.7) - end - - it 'returns the same listener to allow chaining' do - subject.latency(0.7).should equal subject - end - end - - describe '#force_polling' do - it 'sets force_polling to @adapter_options' do - subject.force_polling(false) - subject.instance_variable_get(:@adapter_options).should eq(:force_polling => false) - end - - it 'returns the same listener to allow chaining' do - subject.force_polling(true).should equal subject - end - end - - describe '#relative_paths' do - it 'sets the relative paths option for paths in the callback' do - subject.relative_paths(true) - subject.instance_variable_get(:@use_relative_paths).should be_true - end - - it 'returns the same listener to allow chaining' do - subject.relative_paths(true).should equal subject - end - end - - describe '#polling_fallback_message' do - it 'sets custom polling fallback message to @adapter_options' do - subject.polling_fallback_message('custom message') - subject.instance_variable_get(:@adapter_options).should eq(:polling_fallback_message => 'custom message') - end - - it 'sets polling fallback message to false in @adapter_options' do - subject.polling_fallback_message(false) - subject.instance_variable_get(:@adapter_options).should eq(:polling_fallback_message => false) - end - - it 'returns the same listener to allow chaining' do - subject.polling_fallback_message('custom message').should equal subject - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/support/platform_helper.rb b/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/support/platform_helper.rb deleted file mode 100644 index 480b21f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/sass-3.4.13/vendor/listen/spec/support/platform_helper.rb +++ /dev/null @@ -1,15 +0,0 @@ -def mac? - RbConfig::CONFIG['target_os'] =~ /darwin/i -end - -def linux? - RbConfig::CONFIG['target_os'] =~ /linux/i -end - -def bsd? - RbConfig::CONFIG['target_os'] =~ /freebsd/i -end - -def windows? - RbConfig::CONFIG['target_os'] =~ /mswin|mingw/i -end diff --git a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/.coveralls.yml b/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/.coveralls.yml deleted file mode 100644 index e1da6a3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/.coveralls.yml +++ /dev/null @@ -1 +0,0 @@ -service-name: travis-pro diff --git a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/.gitignore b/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/.gitignore deleted file mode 100644 index d87d4be..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -*.gem -*.rbc -.bundle -.config -.yardoc -Gemfile.lock -InstalledFiles -_yardoc -coverage -doc/ -lib/bundler/man -pkg -rdoc -spec/reports -test/tmp -test/version_tmp -tmp diff --git a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/.rspec b/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/.rspec deleted file mode 100644 index 57badd3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/.rspec +++ /dev/null @@ -1,5 +0,0 @@ ---color ---format documentation ---backtrace ---order random ---warnings diff --git a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/.travis.yml b/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/.travis.yml deleted file mode 100644 index 4626e21..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/.travis.yml +++ /dev/null @@ -1,17 +0,0 @@ -rvm: - - 1.9.3 - - 2.0.0 - - 2.1.2 - - ruby-head - - jruby - - jruby-head - - rbx-2 - -matrix: - allow_failures: - - rvm: ruby-head - - rvm: jruby-head - - rvm: rbx-2 - -notifications: - irc: "irc.freenode.org#celluloid" diff --git a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/AUTHORS.md b/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/AUTHORS.md deleted file mode 100644 index 08eb922..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/AUTHORS.md +++ /dev/null @@ -1,15 +0,0 @@ -# The Celluloid timers gem is beamed directly to you from the minds of... - -- Tony Arcieri -- Jeremy Hinegardner -- Sean Gregory -- Chuck Remes -- Utenmiki -- Ron Evans -- Larry Lv -- Bruno Enten -- Jesse Cooke -- Nicholas Evans -- Dimitrij Denissenko -- Ryan LeCompte -- Samuel G. D. Williams \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/CHANGES.md b/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/CHANGES.md deleted file mode 100644 index 97611b0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/CHANGES.md +++ /dev/null @@ -1,45 +0,0 @@ -4.0.1 (2014-09-10) ------------------- -* Memory leak fixes -* mathn fix for those crazy enough to use it - -4.0.0 (2014-07-27) ------------------- -* Replace Timers::Timeout with Timers::Wait -* Timers::Group#wait_interval now returns nil when no timers, a postive or - negative interval which if positive is the amount of time required to wait - and if negative, how far in the past the latest timer should have fired -* Performance improvements - -3.0.1 (2014-06-27) ------------------- -* Require 'set' automatically - -3.0.0 (2014-06-14) ------------------- -* Refactor `Timers` class into `Timers::Group` -* Add `Timers::Timeout` class for implementing timeouts -* Fix timer fudging -* Update to RSpec 3 - -2.0.0 (2013-12-30) ------------------- -* Switch to Hitimes for high precision monotonic counters -* Removed Timers#time. Replaced with Timers#current_offset which provides a - monotonic time counter. - -1.1.0 ------ -* Timers#after_milliseconds and #after_ms for waiting in milliseconds - -1.0.2 ------ -* Handle overdue timers correctly - -1.0.1 ------ -* Explicitly require Forwardable from stdlib - -1.0.0 ------ -* Initial release diff --git a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/Gemfile b/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/Gemfile deleted file mode 100644 index f47ca08..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/Gemfile +++ /dev/null @@ -1,10 +0,0 @@ -source 'https://rubygems.org' - -gem 'coveralls', :require => false - -# Specify your gem's dependencies in timers.gemspec -gemspec - -unless RUBY_PLATFORM =~ /java/ - gem "ruby-prof", :group => :development -end diff --git a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/LICENSE b/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/LICENSE deleted file mode 100644 index 1189def..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -Copyright (c) 2012-14 The Celluloid Timers Developers: given in the file -AUTHORS.md at https://github.com/celluloid/timers/blob/master/AUTHORS.md - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/README.md b/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/README.md deleted file mode 100644 index 221d9c4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/README.md +++ /dev/null @@ -1,96 +0,0 @@ -Timers -====== -[![Gem Version](https://badge.fury.io/rb/timers.png)](http://rubygems.org/gems/timers) -[![Build Status](https://secure.travis-ci.org/celluloid/timers.png?branch=master)](http://travis-ci.org/celluloid/timers) -[![Code Climate](https://codeclimate.com/github/celluloid/timers.png)](https://codeclimate.com/github/celluloid/timers) -[![Coverage Status](https://coveralls.io/repos/celluloid/timers/badge.png?branch=master)](https://coveralls.io/r/celluloid/timers) - -Ruby timer collections. Schedule several procs to fire after configurable delays -or at periodic intervals. - -This gem is especially useful when you are faced with an API that accepts a -single timeout but you want to run multiple timers on top of it. An example of -such a library is [nio4r](https://github.com/celluloid/nio4r), a cross-platform -Ruby library for using system calls like epoll and kqueue. - -Usage ------ - -Create a new timer group with `Timers::Group.new`: - -```ruby -require 'timers' - -timers = Timers::Group.new -``` - -Schedule a proc to run after 5 seconds with `Timers::Group#after`: - -```ruby -five_second_timer = timers.after(5) { puts "Take five" } -``` - -The `five_second_timer` variable is now bound to a Timers::Timer object. To -cancel a timer, use `Timers::Timer#cancel` - -Once you've scheduled a timer, you can wait until the next timer fires with `Timers::Group#wait`: - -```ruby -# Waits 5 seconds -timers.wait - -# The script will now print "Take five" -``` - -You can schedule a block to run periodically with `Timers::Group#every`: - -```ruby -every_five_seconds = timers.every(5) { puts "Another 5 seconds" } - -loop { timers.wait } -``` - -If you'd like another method to do the waiting for you, e.g. `Kernel.select`, -you can use `Timers::Group#wait_interval` to obtain the amount of time to wait. When -a timeout is encountered, you can fire all pending timers with `Timers::Group#fire`: - -```ruby -loop do - interval = timers.wait_interval - ready_readers, ready_writers = select readers, writers, nil, interval - - if ready_readers || ready_writers - # Handle IO - ... - else - # Timeout! - timers.fire - end -end -``` - -You can also pause and continue individual timers, or all timers: - -```ruby -paused_timer = timers.every(5) { puts "I was paused" } - -paused_timer.pause -10.times { timers.wait } # will not fire paused timer - -paused_timer.resume -10.times { timers.wait } # will fire timer - -timers.pause -10.times { timers.wait } # will not fire any timers - -timers.resume -10.times { timers.wait } # will fire all timers -``` - -License -------- - -Copyright (c) 2014 Celluloid timers project developers (given in the file -AUTHORS.md). - -Distributed under the MIT License. See LICENSE file for further details. diff --git a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/Rakefile b/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/Rakefile deleted file mode 100644 index b4e258c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/Rakefile +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env rake -require "bundler/gem_tasks" -require 'rspec/core/rake_task' - -RSpec::Core::RakeTask.new - -task :default => :spec diff --git a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/lib/timers.rb b/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/lib/timers.rb deleted file mode 100644 index 8f80d4b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/lib/timers.rb +++ /dev/null @@ -1,5 +0,0 @@ - -require 'timers/version' - -require 'timers/group' -require 'timers/wait' diff --git a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/lib/timers/events.rb b/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/lib/timers/events.rb deleted file mode 100644 index 8097bc6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/lib/timers/events.rb +++ /dev/null @@ -1,115 +0,0 @@ - -require 'forwardable' -require 'hitimes' - -require 'timers/timer' - -module Timers - # Maintains an ordered list of events, which can be cancelled. - class Events - # Represents a cancellable handle for a specific timer event. - class Handle - def initialize(time, callback) - @time = time - @callback = callback - end - - # The absolute time that the handle should be fired at. - attr :time - - # Cancel this timer, O(1). - def cancel! - # The simplest way to keep track of cancelled status is to nullify the - # callback. This should also be optimal for garbage collection. - @callback = nil - end - - # Has this timer been cancelled? Cancelled timer's don't fire. - def cancelled? - @callback.nil? - end - - def > other - @time > other.to_f - end - - def to_f - @time - end - - # Fire the callback if not cancelled with the given time parameter. - def fire(time) - if @callback - @callback.call(time) - end - end - end - - def initialize - # A sequence of handles, maintained in sorted order, future to present. - # @sequence.last is the next event to be fired. - @sequence = [] - end - - # Add an event at the given time. - def schedule(time, callback) - handle = Handle.new(time.to_f, callback) - - index = bisect_left(@sequence, handle) - - # Maintain sorted order, O(logN) insertion time. - @sequence.insert(index, handle) - - return handle - end - - # Returns the first non-cancelled handle. - def first - while handle = @sequence.last - if handle.cancelled? - @sequence.pop - else - return handle - end - end - end - - # Returns the number of pending (possibly cancelled) events. - def size - @sequence.size - end - - # Fire all handles for which Handle#time is less than the given time. - def fire(time) - pop(time).reverse_each do |handle| - handle.fire(time) - end - end - - private - - # Efficiently take k handles for which Handle#time is less than the given - # time. - def pop(time) - index = bisect_left(@sequence, time) - - return @sequence.pop(@sequence.size - index) - end - - # Return the left-most index where to insert item e, in a list a, assuming - # a is sorted in descending order. - def bisect_left(a, e, l = 0, u = a.length) - while l < u - m = l + (u-l).div(2) - - if a[m] > e - l = m+1 - else - u = m - end - end - - return l - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/lib/timers/group.rb b/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/lib/timers/group.rb deleted file mode 100644 index d649bbd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/lib/timers/group.rb +++ /dev/null @@ -1,118 +0,0 @@ - -require 'set' -require 'forwardable' -require 'hitimes' - -require 'timers/timer' -require 'timers/events' - -module Timers - class Group - include Enumerable - - extend Forwardable - def_delegators :@timers, :each, :empty? - - def initialize - @events = Events.new - - @timers = Set.new - @paused_timers = Set.new - - @interval = Hitimes::Interval.new - @interval.start - end - - # Scheduled events: - attr :events - - # Active timers: - attr :timers - - # Paused timers: - attr :paused_timers - - # Call the given block after the given interval. The first argument will be - # the time at which the group was asked to fire timers for. - def after(interval, &block) - Timer.new(self, interval, false, &block) - end - - # Call the given block periodically at the given interval. The first - # argument will be the time at which the group was asked to fire timers for. - def every(interval, recur = true, &block) - Timer.new(self, interval, recur, &block) - end - - # Wait for the next timer and fire it. Can take a block, which should behave - # like sleep(n), except that n may be nil (sleep forever) or a negative - # number (fire immediately after return). - def wait(&block) - if block_given? - yield wait_interval - - while interval = wait_interval and interval > 0 - yield interval - end - else - while interval = wait_interval and interval > 0 - # We cannot assume that sleep will wait for the specified time, it might be +/- a bit. - sleep interval - end - end - - fire - end - - # Interval to wait until when the next timer will fire. - # - nil: no timers - # - -ve: timers expired already - # - 0: timers ready to fire - # - +ve: timers waiting to fire - def wait_interval(offset = self.current_offset) - if handle = @events.first - return handle.time - Float(offset) - end - end - - # Fire all timers that are ready. - def fire(offset = self.current_offset) - @events.fire(offset) - end - - # Pause all timers. - def pause - @timers.dup.each do |timer| - timer.pause - end - end - - # Resume all timers. - def resume - @paused_timers.dup.each do |timer| - timer.resume - end - end - - alias_method :continue, :resume - - # Delay all timers. - def delay(seconds) - @timers.each do |timer| - timer.delay(seconds) - end - end - - # Cancel all timers. - def cancel - @timers.dup.each do |timer| - timer.cancel - end - end - - # The group's current time. - def current_offset - @interval.to_f - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/lib/timers/timer.rb b/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/lib/timers/timer.rb deleted file mode 100644 index 8dc1ea6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/lib/timers/timer.rb +++ /dev/null @@ -1,128 +0,0 @@ - -module Timers - # An individual timer set to fire a given proc at a given time. A timer is - # always connected to a Timer::Group but it would ONLY be in @group.timers - # if it also has a @handle specified. Otherwise it is either PAUSED or has - # been FIRED and is not recurring. You can manually enter this state by - # calling #cancel and resume normal operation by calling #reset. - class Timer - include Comparable - attr_reader :interval, :offset, :recurring - - def initialize(group, interval, recurring = false, offset = nil, &block) - @group = group - - @interval = interval - @recurring = recurring - @block = block - @offset = offset - - @handle = nil - - # If a start offset was supplied, use that, otherwise use the current timers offset. - reset(@offset || @group.current_offset) - end - - def paused? - @group.paused_timers.include? self - end - - def pause - return if paused? - - @group.timers.delete self - @group.paused_timers.add self - - @handle.cancel! if @handle - @handle = nil - end - - def resume - return unless paused? - - @group.paused_timers.delete self - - # This will add us back to the group: - reset - end - - alias_method :continue, :resume - - # Extend this timer - def delay(seconds) - @handle.cancel! if @handle - - @offset += seconds - - @handle = @group.events.schedule(@offset, self) - end - - # Cancel this timer. Do not call while paused. - def cancel - return unless @handle - - @handle.cancel! if @handle - @handle = nil - - # This timer is no longer valid: - @group.timers.delete self if @group - end - - # Reset this timer. Do not call while paused. - def reset(offset = @group.current_offset) - # This logic allows us to minimise the interaction with @group.timers. - # A timer with a handle is always registered with the group. - if @handle - @handle.cancel! - else - @group.timers << self - end - - @offset = Float(offset) + @interval - - @handle = @group.events.schedule(@offset, self) - end - - # Fire the block. - def fire(offset = @group.current_offset) - if recurring == :strict - # ... make the next interval strictly the last offset + the interval: - reset(@offset) - elsif recurring - reset(offset) - else - @offset = offset - end - - @block.call(offset) - - cancel unless recurring - end - - alias_method :call, :fire - - # Number of seconds until next fire / since last fire - def fires_in - @offset - @group.current_offset if @offset - end - - # Inspect a timer - def inspect - str = "#= 0 - str << "fires in #{fires_in} seconds" - else - str << "fired #{fires_in.abs} seconds ago" - end - - str << ", recurs every #{interval}" if recurring - else - str << "dead" - end - - str << ">" - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/lib/timers/version.rb b/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/lib/timers/version.rb deleted file mode 100644 index db430ad..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/lib/timers/version.rb +++ /dev/null @@ -1,3 +0,0 @@ -module Timers - VERSION = "4.0.1" -end diff --git a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/lib/timers/wait.rb b/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/lib/timers/wait.rb deleted file mode 100644 index ce2b8c9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/lib/timers/wait.rb +++ /dev/null @@ -1,48 +0,0 @@ - -require 'hitimes' - -module Timers - # An exclusive, monotonic timeout class. - class Wait - def self.for(duration, &block) - if duration - timeout = self.new(duration) - - timeout.while_time_remaining(&block) - else - while true - yield(nil) - end - end - end - - def initialize(duration) - @duration = duration - @remaining = true - end - - attr :duration - attr :remaining - - # Yields while time remains for work to be done: - def while_time_remaining(&block) - @interval = Hitimes::Interval.new - @interval.start - - while time_remaining? - yield @remaining - end - ensure - @interval.stop - @interval = nil - end - - private - - def time_remaining? - @remaining = (@duration - @interval.duration) - - return @remaining > 0 - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/cancel_spec.rb b/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/cancel_spec.rb deleted file mode 100644 index 12f4e7a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/cancel_spec.rb +++ /dev/null @@ -1,46 +0,0 @@ - -require 'spec_helper' - -RSpec.describe Timers::Group do - it "should be able to cancel twice" do - fired = false - - timer = subject.after(0.1) { fired = true } - - 2.times do - timer.cancel - subject.wait - end - - expect(fired).to be false - end - - it "should be possble to reset after cancel" do - fired = false - - timer = subject.after(0.1) { fired = true } - timer.cancel - - subject.wait - - timer.reset - - subject.wait - - expect(fired).to be true - end - - it "should cancel and remove one shot timers after they fire" do - x = 0 - - Timers::Wait.for(2) do |remaining| - timer = subject.every(0.2) { x += 1 } - subject.after(0.1) { timer.cancel } - - subject.wait - end - - expect(subject.timers).to be_empty - expect(x).to be == 0 - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/events_spec.rb b/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/events_spec.rb deleted file mode 100644 index 685f6ea..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/events_spec.rb +++ /dev/null @@ -1,57 +0,0 @@ - -require 'spec_helper' - -RSpec.describe Timers::Events do - it "should register an event" do - fired = false - - callback = proc do |time| - fired = true - end - - subject.schedule(0.1, callback) - - expect(subject.size).to be == 1 - - subject.fire(0.15) - - expect(subject.size).to be == 0 - - expect(fired).to be true - end - - it "should register events in order" do - fired = [] - - times = [0.95, 0.1, 0.3, 0.5, 0.4, 0.2, 0.01, 0.9] - - times.each do |requested_time| - callback = proc do |time| - fired << requested_time - end - - subject.schedule(requested_time, callback) - end - - subject.fire(0.5) - expect(fired).to be == times.sort.first(6) - - subject.fire(1.0) - expect(fired).to be == times.sort - end - - it "should fire events with the time they were fired at" do - fired_at = :not_fired - - callback = proc do |time| - # The time we actually were fired at: - fired_at = time - end - - subject.schedule(0.5, callback) - - subject.fire(1.0) - - expect(fired_at).to be == 1.0 - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/every_spec.rb b/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/every_spec.rb deleted file mode 100644 index 309559e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/every_spec.rb +++ /dev/null @@ -1,19 +0,0 @@ - -require 'spec_helper' - -RSpec.describe Timers::Group do - it "should fire several times" do - result = [] - - subject.every(0.7) { result << :a } - subject.every(2.3) { result << :b } - subject.every(1.3) { result << :c } - subject.every(2.4) { result << :d } - - Timers::Wait.for(2.5) do |remaining| - subject.wait if subject.wait_interval < remaining - end - - expect(result).to be == [:a, :c, :a, :a, :b, :d] - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/group_spec.rb b/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/group_spec.rb deleted file mode 100644 index c090670..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/group_spec.rb +++ /dev/null @@ -1,254 +0,0 @@ - -require 'spec_helper' - -RSpec.describe Timers::Group do - describe "#wait" do - it "calls the wait block with nil" do - called = false - - subject.wait do |interval| - expect(interval).to be == nil - called = true - end - - expect(called).to be true - end - - it "calls the wait block with an interval" do - called = false - fired = false - - subject.after(0.1) { fired = true } - - subject.wait do |interval| - expect(interval).to be_within(TIMER_QUANTUM).of(0.1) - called = true - sleep 0.2 - end - - expect(called).to be true - expect(fired).to be true - end - end - - it "sleeps until the next timer" do - interval = TIMER_QUANTUM * 2 - started_at = Time.now - - fired = false - subject.after(interval) { fired = true } - subject.wait - - expect(fired).to be true - expect(Time.now - started_at).to be_within(TIMER_QUANTUM).of interval - end - - it "fires instantly when next timer is in the past" do - fired = false - subject.after(TIMER_QUANTUM) { fired = true } - sleep(TIMER_QUANTUM * 2) - subject.wait - - expect(fired).to be true - end - - it "calculates the interval until the next timer should fire" do - interval = 0.1 - - subject.after(interval) - expect(subject.wait_interval).to be_within(TIMER_QUANTUM).of interval - - sleep(interval) - expect(subject.wait_interval).to be <= 0 - end - - it "fires timers in the correct order" do - result = [] - - subject.after(TIMER_QUANTUM * 2) { result << :two } - subject.after(TIMER_QUANTUM * 3) { result << :three } - subject.after(TIMER_QUANTUM * 1) { result << :one } - - sleep TIMER_QUANTUM * 4 - subject.fire - - expect(result).to eq [:one, :two, :three] - end - - it "raises TypeError if given an invalid time" do - expect do - subject.after(nil) { nil } - end.to raise_exception(TypeError) - end - - describe "recurring timers" do - it "continues to fire the timers at each interval" do - result = [] - - subject.every(TIMER_QUANTUM * 2) { result << :foo } - - sleep TIMER_QUANTUM * 3 - subject.fire - expect(result).to eq [:foo] - - sleep TIMER_QUANTUM * 5 - subject.fire - expect(result).to eq [:foo, :foo] - end - end - - it "calculates the proper interval to wait until firing" do - interval_ms = 25 - - subject.after(interval_ms / 1000.0) - - expect(subject.wait_interval).to be_within(TIMER_QUANTUM).of(interval_ms / 1000.0) - end - - describe "pause and continue timers" do - before(:each) do - @interval = TIMER_QUANTUM * 2 - - @fired = false - @timer = subject.after(@interval) { @fired = true } - @fired2 = false - @timer2 = subject.after(@interval) { @fired2 = true } - end - - it "does not fire when paused" do - @timer.pause - subject.wait - expect(@fired).to be false - end - - it "fires when continued after pause" do - @timer.pause - subject.wait - @timer.resume - - sleep @timer.interval - subject.wait - - expect(@fired).to be true - end - - it "can pause all timers at once" do - subject.pause - subject.wait - expect(@fired).to be false - expect(@fired2).to be false - end - - it "can continue all timers at once" do - subject.pause - subject.wait - subject.resume - - # We need to wait until we are sure both timers will fire, otherwise highly accurate clocks (e.g. JVM) may only fire the first timer, but not the second, because they are actually schedueled at different times. - sleep TIMER_QUANTUM * 2 - subject.wait - - expect(@fired).to be true - expect(@fired2).to be true - end - - it "can fire the timer directly" do - fired = false - timer = subject.after( TIMER_QUANTUM * 1 ) { fired = true } - timer.pause - subject.wait - expect(fired).not_to be true - timer.resume - expect(fired).not_to be true - timer.fire - expect(fired).to be true - end - - end - - describe "delay timer" do - it "adds appropriate amount of time to timer" do - timer = subject.after(10) - timer.delay(5) - expect(timer.offset - subject.current_offset).to be_within(TIMER_QUANTUM).of(15) - end - end - - describe "delay timer collection" do - it "delay on set adds appropriate amount of time to all timers" do - timer = subject.after(10) - timer2 = subject.after(20) - subject.delay(5) - expect(timer.offset - subject.current_offset).to be_within(TIMER_QUANTUM).of(15) - expect(timer2.offset - subject.current_offset).to be_within(TIMER_QUANTUM).of(25) - end - end - - describe "on delaying a timer" do - it "fires timers in the correct order" do - result = [] - - subject.after(TIMER_QUANTUM * 2) { result << :two } - subject.after(TIMER_QUANTUM * 3) { result << :three } - first = subject.after(TIMER_QUANTUM * 1) { result << :one } - first.delay(TIMER_QUANTUM * 3) - - sleep TIMER_QUANTUM * 5 - subject.fire - - expect(result).to eq [:two, :three, :one] - end - end - - describe "Timer inspection" do - it "before firing" do - fired = false - timer = subject.after(TIMER_QUANTUM * 5) { fired = true } - timer.pause - expect(fired).not_to be true - expect(timer.inspect).to match(/\A#\Z/) - end - - it "after firing" do - fired = false - timer = subject.after(TIMER_QUANTUM) { fired = true } - - subject.wait - - expect(fired).to be true - expect(timer.inspect).to match(/\A#\Z/) - end - - it "recurring firing" do - result = [] - timer = subject.every(TIMER_QUANTUM) { result << :foo } - - subject.wait - expect(result).not_to be_empty - expect(timer.inspect).to match(/\A#\Z/) - end - end - - describe "fires_in" do - let(:interval) { TIMER_QUANTUM * 2 } - - it "calculates the interval until the next fire if it's recurring" do - timer = subject.every(interval) { true } - expect(timer.fires_in).to be_within(TIMER_QUANTUM).of(interval) - end - - context "when timer is not recurring" do - let!(:timer) { subject.after(interval) { true } } - - it "calculates the interval until the next fire if it hasn't already fired" do - expect(timer.fires_in).to be_within(TIMER_QUANTUM).of(interval) - end - - it "calculates the interval since last fire if already fired" do - subject.wait - sleep(interval) - expect(timer.fires_in).to be_within(TIMER_QUANTUM).of(0 - interval) - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/performance_spec.rb b/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/performance_spec.rb deleted file mode 100644 index a540c38..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/performance_spec.rb +++ /dev/null @@ -1,83 +0,0 @@ - -require 'spec_helper' -require 'ruby-prof' unless RUBY_PLATFORM =~ /java/ - -# Event based timers: - -# Serviced 31812 events in 2.39075272 seconds, 13306.320832794887 e/s. -# Thread ID: 7336700 -# Fiber ID: 30106340 -# Total: 2.384043 -# Sort by: self_time - -# %self total self wait child calls name -# 13.48 0.510 0.321 0.000 0.189 369133 Timers::Events::Handle#<=> -# 8.12 0.194 0.194 0.000 0.000 427278 Timers::Events::Handle#to_f -# 4.55 0.109 0.109 0.000 0.000 427278 Float#<=> -# 4.40 1.857 0.105 0.000 1.752 466376 *Timers::Events#bsearch -# 4.30 0.103 0.103 0.000 0.000 402945 Float#to_f -# 2.65 0.063 0.063 0.000 0.000 33812 Array#insert -# 2.64 1.850 0.063 0.000 1.787 33812 Timers::Events#schedule -# 2.40 1.930 0.057 0.000 1.873 33812 Timers::Timer#reset -# 1.89 1.894 0.045 0.000 1.849 31812 Timers::Timer#fire -# 1.69 1.966 0.040 0.000 1.926 31812 Timers::Events::Handle#fire -# 1.35 0.040 0.032 0.000 0.008 33812 Timers::Events::Handle#initialize -# 1.29 0.044 0.031 0.000 0.013 44451 Timers::Group#current_offset - -# SortedSet based timers: - -# Serviced 32516 events in 66.753277275 seconds, 487.1072288781219 e/s. -# Thread ID: 15995640 -# Fiber ID: 38731780 -# Total: 66.716394 -# Sort by: self_time - -# %self total self wait child calls name -# 54.73 49.718 36.513 0.000 13.205 57084873 Timers::Timer#<=> -# 23.74 65.559 15.841 0.000 49.718 32534 Array#sort! -# 19.79 13.205 13.205 0.000 0.000 57084873 Float#<=> - -# Max out events performance (on my computer): -# Serviced 1142649 events in 11.194903921 seconds, 102068.70405115146 e/s. - -RSpec.describe Timers::Group do - if defined? RubyProf - before(:each) do - # Running RubyProf makes the code slightly slower. - RubyProf.start - puts "*** Running with RubyProf reduces performance ***" - end - - after(:each) do |arg| - if RubyProf.running? - # file = arg.metadata[:description].gsub(/\s+/, '-') - - result = RubyProf.stop - - printer = RubyProf::FlatPrinter.new(result) - printer.print($stderr, min_percent: 1.0) - end - end - end - - it "run efficiently" do - result = [] - range = (1..500) - duration = 2.0 - - total = 0 - range.each do |index| - offset = index.to_f / range.max - total += (duration / offset).floor - - subject.every(index.to_f / range.max, :strict) { result << index } - end - - subject.wait while result.size < total - - rate = result.size.to_f / subject.current_offset - puts "Serviced #{result.size} events in #{subject.current_offset} seconds, #{rate} e/s." - - expect(subject.current_offset).to be_within(TIMER_QUANTUM).of(duration) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/spec_helper.rb b/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/spec_helper.rb deleted file mode 100644 index 09a9449..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/spec_helper.rb +++ /dev/null @@ -1,19 +0,0 @@ -require 'coveralls' -Coveralls.wear! - -require 'bundler/setup' -require 'timers' - -# Level of accuracy enforced by tests (50ms) -TIMER_QUANTUM = 0.05 - -RSpec.configure do |config| - # Setting this config option `false` removes rspec-core's monkey patching of the - # top level methods like `describe`, `shared_examples_for` and `shared_context` - # on `main` and `Module`. The methods are always available through the `RSpec` - # module like `RSpec.describe` regardless of this setting. - # For backwards compatibility this defaults to `true`. - # - # https://relishapp.com/rspec/rspec-core/v/3-0/docs/configuration/global-namespace-dsl - config.expose_dsl_globally = false -end diff --git a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/strict_spec.rb b/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/strict_spec.rb deleted file mode 100644 index cc2b15d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/strict_spec.rb +++ /dev/null @@ -1,37 +0,0 @@ - -require 'spec_helper' - -RSpec.describe Timers::Group do - it "should not diverge too much" do - fired = :not_fired_yet - count = 0 - quantum = 0.01 - - start_offset = subject.current_offset - Timers::Timer.new(subject, quantum, :strict, start_offset) do |offset| - fired = offset - count += 1 - end - - iterations = 1000 - subject.wait while count < iterations - - # In my testing on the JVM, without the :strict recurring, I noticed 60ms of error here. - expect(fired - start_offset).to be_within(quantum).of(iterations * quantum) - end - - it "should only fire once" do - fired = :not_fired_yet - count = 0 - - start_offset = subject.current_offset - Timers::Timer.new(subject, 0, :strict, start_offset) do |offset| - fired = offset - count += 1 - end - - subject.wait - - expect(count).to be == 1 - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/timeout_spec.rb b/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/timeout_spec.rb deleted file mode 100644 index 6664b51..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/spec/timeout_spec.rb +++ /dev/null @@ -1,29 +0,0 @@ - -require 'spec_helper' -require 'timers/wait' - -RSpec.describe Timers::Wait do - it "repeats until timeout expired" do - timeout = Timers::Wait.new(5) - count = 0 - - timeout.while_time_remaining do |remaining| - expect(remaining).to be_within(TIMER_QUANTUM).of (timeout.duration - count) - - count += 1 - sleep 1 - end - - expect(count).to eq(5) - end - - it "yields results as soon as possible" do - timeout = Timers::Wait.new(5) - - result = timeout.while_time_remaining do |remaining| - break :done - end - - expect(result).to eq(:done) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/timers.gemspec b/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/timers.gemspec deleted file mode 100644 index 9806a69..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/timers-4.0.1/timers.gemspec +++ /dev/null @@ -1,23 +0,0 @@ -# -*- encoding: utf-8 -*- -require File.expand_path('../lib/timers/version', __FILE__) - -Gem::Specification.new do |gem| - gem.authors = ["Tony Arcieri"] - gem.email = ["tony.arcieri@gmail.com"] - gem.description = "Pure Ruby one-shot and periodic timers" - gem.summary = "Schedule procs to run after a certain time, or at periodic intervals, using any API that accepts a timeout" - gem.homepage = "https://github.com/celluloid/timers" - - gem.files = `git ls-files`.split($\) - gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) } - gem.test_files = gem.files.grep(%r{^(test|spec|features)/}) - gem.name = "timers" - gem.require_paths = ["lib"] - gem.version = Timers::VERSION - gem.licenses = ['MIT'] - - gem.add_runtime_dependency 'hitimes' - - gem.add_development_dependency 'rake' - gem.add_development_dependency 'rspec', '~> 3.0.0' -end diff --git a/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/CHANGELOG.md b/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/CHANGELOG.md deleted file mode 100644 index f0bad6c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/CHANGELOG.md +++ /dev/null @@ -1,11 +0,0 @@ -## 0.1.2 / 2014-10-16 - -- Add support for `CR` and `CRLF` newlines (#13) -- Add support for generating TOML from Ruby `Hash`es (#36) -- Add a script interface for @BurntSushi's `toml-test` utility (#38) - -## 0.1.1 / 2014-02-17 - -- Add license to gemspec (#26) -- Loosen `multi_json` dependency version specified (#27) -- `Generator` should print empty hash tables but not keys without values (#28) diff --git a/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/LICENSE b/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/LICENSE deleted file mode 100644 index ea1f770..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License - -Copyright (c) Tom Preston-Werner - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/README.md b/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/README.md deleted file mode 100644 index 74c8528..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/README.md +++ /dev/null @@ -1,65 +0,0 @@ -# TOML - -A sane configuration format from @mojombo. More information here: https://github.com/mojombo/toml - -This is far superior to YAML and JSON because it doesn't suck. Really it doesn't. - -**There is a bug in Rails 2.3's vendored version of BlankSlate (a dependency of Parslet which is used for parsing TOML) that breaks Parslet; please see this [Gist](https://gist.github.com/dirk/5264004) for a workaround.** - -## Usage - -Add to your Gemfile: - -```ruby -gem "toml", "~> 0.0.3" -``` - -It's simple, really. - -```ruby -content = <<-TOML - -# Hello, this is an example. -[things] -other = "things" -what = 900000 - -TOML - -parser = TOML::Parser.new(content).parsed -# => { "things" => { "other" => "things", "what" => 900000 } } -``` - -You can also use the same API as `YAML` if you'd like: - -```ruby -TOML.load("thing = 9") -# => {"thing" => 9} - -TOML.load_file("my_file.toml") -# => {"whatever" => "keys"} -``` - -There's also a beta feature for generating a TOML file from a Ruby hash. Please note this will likely not give beautiful output right now. - -```ruby -hash = { - "integer" => 1, - "float" => 3.14159, - "true" => true, - "false" => false, - "string" => "hi", - "array" => [[1], [2], [3]], - "key" => { - "group" => { - "value" => "lol" - } - } -} -doc = TOML::Generator.new(hash).body -# doc will be a string containing a proper TOML document. -``` - -## Contributors - -Written by Jeremy McAnally (@jm) and Dirk Gadsden (@dirk) based on TOML from Tom Preston-Werner (@mojombo). diff --git a/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml.rb b/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml.rb deleted file mode 100644 index df25f03..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml.rb +++ /dev/null @@ -1,25 +0,0 @@ -$:.unshift(File.dirname(__FILE__)) - -require 'time' -require 'parslet' - -require 'toml/version' -require 'toml/key' -require 'toml/table' -require 'toml/parslet' -require 'toml/transformer' -require 'toml/parser' -require 'toml/generator' -# Don't do monkey-patching by default. Only pulled in by TOML::Generator -# if needed (see generator.rb line 27). -# require 'toml/monkey_patch - -module TOML - def self.load(content) - Parser.new(content).parsed - end - - def self.load_file(path) - Parser.new(File.read(path)).parsed - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/generator.rb b/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/generator.rb deleted file mode 100644 index 8e66f7a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/generator.rb +++ /dev/null @@ -1,29 +0,0 @@ - -module TOML - class Generator - attr_reader :body, :doc - - def initialize(doc) - # Ensure all the to_toml methods are injected into the base Ruby classes - # used by TOML. - self.class.inject! - - @doc = doc - @body = doc.to_toml - - return @body - end - - # Whether or not the injections have already been done. - @@injected = false - # Inject to_toml methods into the Ruby classes used by TOML (booleans, - # String, Numeric, Array). You can add to_toml methods to your own classes - # to allow them to be easily serialized by the generator (and it will shout - # if something doesn't have a to_toml method). - def self.inject! - return if @@injected - require 'toml/monkey_patch' - @@injected = true - end - end#Generator -end#TOML diff --git a/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/key.rb b/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/key.rb deleted file mode 100644 index 2ff2cff..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/key.rb +++ /dev/null @@ -1,10 +0,0 @@ -module TOML - class Key - attr_reader :key, :value - - def initialize(key, value) - @key = key - @value = value - end - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/monkey_patch.rb b/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/monkey_patch.rb deleted file mode 100644 index 13cc6a5..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/monkey_patch.rb +++ /dev/null @@ -1,87 +0,0 @@ -# Adds to_toml methods to base Ruby classes used by the generator. -class Object - def toml_table? - self.kind_of?(Hash) - end - def toml_table_array? - self.kind_of?(Array) && self.first.toml_table? - end -end -class Hash - def to_toml(path = "") - return "" if self.empty? - - tables = {} - values = {} - self.keys.sort.each do |key| - val = self[key] - if val.kind_of?(NilClass) - next - elsif val.toml_table? || val.toml_table_array? - tables[key] = val - else - values[key] = val - end - end - - toml = "" - values.each do |key, val| - toml << "#{key} = #{val.to_toml(key)}\n" - end - - tables.each do |key, val| - key = "#{path}.#{key}" unless path.empty? - toml_val = val.to_toml(key) - unless toml_val.empty? - if val.toml_table? - non_table_vals = val.values.reject do |v| - v.toml_table? || v.toml_table_array? - end - - # Only add the table key if there are non table values. - if non_table_vals.length > 0 - toml << "\n[#{key}]\n" - end - end - toml << toml_val - end - end - - toml - end -end -class Array - def to_toml(path = "") - unless self.map(&:class).uniq.length == 1 - raise "All array values must be the same type" - end - - if self.first.toml_table? - toml = "" - self.each do |val| - toml << "\n[[#{path}]]\n" - toml << val.to_toml(path) - end - return toml - else - "[" + self.map {|v| v.to_toml(path) }.join(",") + "]" - end - end -end -class TrueClass - def to_toml(path = ""); "true"; end -end -class FalseClass - def to_toml(path = ""); "false"; end -end -class String - def to_toml(path = ""); self.inspect; end -end -class Numeric - def to_toml(path = ""); self.to_s; end -end -class DateTime - def to_toml(path = "") - self.to_time.utc.strftime("%Y-%m-%dT%H:%M:%SZ") - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/parser.rb b/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/parser.rb deleted file mode 100644 index bbadf26..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/parser.rb +++ /dev/null @@ -1,99 +0,0 @@ -module TOML - class Parser - attr_reader :parsed - - def initialize(markup) - # Make sure we have a newline on the end - - markup += "\n" unless markup.end_with?("\n") || markup.length == 0 - begin - tree = Parslet.new.parse(markup) - rescue Parslet::ParseFailed => failure - puts failure.cause.ascii_tree - end - - - parts = Transformer.new.apply(tree) || [] - @parsed = {} - @current = @parsed - @current_path = '' - - parts.each do |part| - if part.is_a? Key - # If @current is an array then we're in a key-group - if @current.is_a? Array - # Make sure there's a table to work with. - @current << {} if @current.last.nil? - # Set the key on the table. - @current.last[part.key] = part.value - next - end - # Make sure the key isn't already set - if !@current.is_a?(Hash) || @current.has_key?(part.key) - err = "Cannot override key '#{part.key}'" - unless @current_path.empty? - err += " at path '#{@current_path}'" - end - raise err - end - # Set the key-value into the current hash - @current[part.key] = part.value - elsif part.is_a?(TableArray) - resolve_table_array(part) - elsif part.is_a?(Table) - resolve_table(part) - else - raise "Unrecognized part: #{part.inspect}" - end - end - end - - def resolve_table_array(t) - @current = @parsed - path = t.name.dup - @current_path = path.join('.') - while n = path.shift - # If it's a table-array then get the last item. - @current = @current.last if @current.is_a? Array - - # If it's the last item: - if path.length == 0 - # If the current table has an item: - if @current.has_key?(n) - # And that item is already a table-array: - if @current[n].is_a? Array - # Then add an item to that table-array. - @current[n] << {} - else - raise "Cannot override table array '#{t.name.join '.'}'" - end - else - # Create a new table array if nothing exists here. - @current[n] = [] - end - elsif @current.has_key? n - # Don't do anything if we're just moving into tables. - else - @current[n] = {} - end - @current = @current[n] - end - end - - def resolve_table(t) - @current = @parsed - - path = t.name.dup - @current_path = path.join('.') - while k = path.shift - # If it's a table-array then get the last item. - @current = @current.last if @current.is_a? Array - # Create a new table if one doesn't exist. - @current[k] = {} if !@current.has_key? k - # Move into the table. - @current = @current[k] - end - end#/resolve_key_group - - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/parslet.rb b/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/parslet.rb deleted file mode 100644 index 029c4af..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/parslet.rb +++ /dev/null @@ -1,100 +0,0 @@ -module TOML - class Parslet < ::Parslet::Parser - rule(:document) { - all_space >> - (table | table_array | key_value | comment_line).repeat >> - all_space - } - root :document - - rule(:value) { - array | - string | - datetime.as(:datetime) | - float.as(:float) | - integer.as(:integer) | - boolean - } - - # Finding comments in multiline arrays requires accepting a bunch of - # possible newlines and stuff before the comment - rule(:array_comments) { (all_space >> comment_line).repeat } - - rule(:array) { - str("[") >> all_space >> array_comments >> - ( array_comments >> # Match any comments on first line - all_space >> value >> array_comments >> - ( - # Separator followed by any comments - all_space >> str(",") >> array_comments >> - # Value followed by any comments - all_space >> value >> array_comments - ).repeat >> - (all_space >> str(",")).maybe >> # possible trailing comma - all_space >> array_comments # Grab any remaining comments just in case - ).maybe.as(:array) >> str("]") - } - - rule(:key_value) { - space >> key.as(:key) >> - space >> str("=") >> - space >> value.as(:value) >> - space >> comment.maybe >> newline >> all_space - } - rule(:table) { - space >> str("[") >> - table_name.as(:table) >> - str("]") >> - space >> comment.maybe >> newline >> all_space - } - rule(:table_array) { - space >> str("[[") >> - table_name.as(:table_array) >> - str("]]") >> - space >> comment.maybe >> str("\n") >> all_space - } - - rule(:key) { match["^. \t\\]"].repeat(1) } - rule(:table_name) { key.as(:key) >> (str(".") >> key.as(:key)).repeat } - - rule(:comment_line) { comment >> newline >> all_space } - rule(:comment) { str("#") >> match["^\n"].repeat } - - rule(:space) { match[" \t"].repeat } - rule(:all_space) { match[" \t\r\n"].repeat } - rule(:newline) { str("\r").maybe >> str("\n") | str("\r") >> str("\n").maybe } - - rule(:string) { - str('"') >> ( - match["^\"\\\\"] | - (str("\\") >> match["0tnr\"\\\\"]) - ).repeat.as(:string) >> str('"') - } - - rule(:sign) { str("-") } - rule(:sign?) { sign.maybe } - - rule(:integer) { - str("0") | (sign? >> match["1-9"] >> match["0-9"].repeat) - } - rule(:float) { - sign? >> match["0-9"].repeat(1) >> str(".") >> match["0-9"].repeat(1) - } - - rule(:boolean) { str("true").as(:true) | str("false").as(:false) } - - rule(:date) { - match["0-9"].repeat(4,4) >> str("-") >> - match["0-9"].repeat(2,2) >> str("-") >> - match["0-9"].repeat(2,2) - } - - rule(:time) { - match["0-9"].repeat(2,2) >> str(":") >> - match["0-9"].repeat(2,2) >> str(":") >> - match["0-9"].repeat(2,2) - } - - rule(:datetime) { date >> str("T") >> time >> str("Z") } - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/table.rb b/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/table.rb deleted file mode 100644 index b4c3c51..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/table.rb +++ /dev/null @@ -1,10 +0,0 @@ -module TOML - class Table - # :name is array of strings - attr_reader :name - def initialize(name) - @name = name - end - end - class TableArray < Table; end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/transformer.rb b/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/transformer.rb deleted file mode 100644 index 19e7b8c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/transformer.rb +++ /dev/null @@ -1,114 +0,0 @@ -module TOML - - class Transformer < ::Parslet::Transform - # Utility to properly handle escape sequences in parsed string. - def self.parse_string(val) - e = val.length - s = 0 - o = [] - while s < e - if val[s].chr == "\\" - s += 1 - case val[s].chr - when "t" - o << "\t" - when "n" - o << "\n" - when "\\" - o << "\\" - when '"' - o << '"' - when "r" - o << "\r" - when "0" - o << "\0" - else - raise "Unexpected escape character: '\\#{val[s]}'" - end - else - o << val[s].chr - end - s += 1 - end - o.join - end - - # Clean up arrays - # rule(:array => subtree(:ar)) { ar.is_a?(Array) ? ar : [ar] } - - # Empty file - rule('') { - nil - } - - # Clean up simple value hashes - rule(:integer => simple(:i)) { i.to_i } - rule(:float => simple(:f)) { f.to_f } - rule(:string => simple(:s)) { - Transformer.parse_string(s.to_s) - } - rule(:string => sequence(:s)) { - raise "Unexpected string-sequence: #{s.inspect}" unless s.empty? - "" - } - rule(:datetime => simple(:d)) { DateTime.iso8601(d) } - rule(:true => simple(:b)) { true } - rule(:false => simple(:b)) { false } - - rule(:key => simple(:k), :value => simple(:v)) { Key.new(k.to_s, v) } - - # New array cleanup - # TODO: Make this more readable/understandable. - def self.visit_array(h) - if h.is_a? Hash - # If it's an {:array => ...} hash - a = h[:array] - if a.is_a? Array - # If the value is already an array - a = a.map {|v| visit_array(v) } - classes = a.map {|v| - # Grab the class, with a little exception for true and false since - # they're different classes (TrueClass and FalseClass). - (v == true || v == false) ? true : v.class - } - if classes.uniq.length != 1 - raise "Conflicting types in array: " + \ - classes.map(&:to_s).join(", ") - end - return a - else - # Turn the value into an array - return [visit_array(a)].compact - end - else - # Plain old non-hash value - return h - end - end - rule(:key => simple(:k), :value => subtree(:v)) { - Key.new(k.to_s, Transformer.visit_array(v)) - } - - # Make key hashes (inside key_groups) just be strings - rule(:key => simple(:k)) { k } - - # Then objectify the key_groups - rule(:table => simple(:kg)) { - Table.new([kg.to_s]) - } - - # Captures array-like key-groups - rule(:table => subtree(:kg)) { - Table.new(kg.map &:to_s) - } - - # Single name table-arrays - rule(:table_array => simple(:name)) { - TableArray.new([name.to_s]) - } - # Multi-part (a.b.c) table-arrays - rule(:table_array => subtree(:names)) { - TableArray.new(names.map &:to_s) - } - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/version.rb b/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/version.rb deleted file mode 100644 index 4b02746..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/toml-0.1.2/lib/toml/version.rb +++ /dev/null @@ -1,3 +0,0 @@ -module TOML - VERSION = '0.1.2' -end diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/.gitignore b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/.gitignore deleted file mode 100644 index 8f70952..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -Makefile -benchmark/subjects/contacts.* -*.rbc -*.o -*.dylib -*.bundle -TODO.txt -tmp/* -pkg/* -vendor/gems -Gemfile.lock -.rbx -bin/ diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/.rspec b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/.rspec deleted file mode 100644 index 83e2753..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/.rspec +++ /dev/null @@ -1,2 +0,0 @@ ---format documentation ---colour diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/.travis.yml b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/.travis.yml deleted file mode 100644 index c562d69..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/.travis.yml +++ /dev/null @@ -1,18 +0,0 @@ -language: ruby -rvm: - - 1.8.7 - - 1.9.2 - - 1.9.3 - - 2.0.0 - - 2.1.0 - - 2.1.1 - - ree - - ruby-head - - rbx-18mode - - rbx-19mode -before_install: gem install bundler --no-document -matrix: - allow_failures: - - rvm: rbx - - rvm: rbx-18mode - - rvm: rbx-19mode diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/CHANGELOG.md b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/CHANGELOG.md deleted file mode 100644 index d3dfdbd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/CHANGELOG.md +++ /dev/null @@ -1,332 +0,0 @@ -# Changelog - -## 1.1.0 (November 9th, 2011) -* fix compilation due to a "bug" in gcc-llvm on 10.7.2 -* fix gemspec so ruby 1.8.6 or later is required -* - -## 1.0.0 (September 13th, 2011) -* add deprecation notice for Yajl's Bzip2 support -* add deprecation notice for Yajl's Deflate support -* add deprecation notice for Yajl's Gzip support -* add deprecation notice for Yajl's JSON gem compatibility API -* add deprecation notice for Yajl::HttpStream -* change the path the extension is copied into to be 'lib/yajl' -* remove 'ext' from the loadpath - -## 0.8.3 (August 16th, 2011) -* fix bug where Yajl::HttpStream wouldn't pass through a user-specified socket -* fix incorrect Ruby initialization hook method name -* Bump bundled YAJL version to 1.0.12 -* fix to correctly symbolize multibyte characters on 1.9 -* add `:headers` option to Yajl::HttpStream for user-specified arbitrary headers - -## 0.8.2 (March 22nd, 2011) -* define RSTRING_NOT_MODIFIED for rbx to prevent string caching, making things A LOT faster (100x) - -## 0.8.1 (February 11th, 2011) -* fixed a retart bug where Yajl::VERSION wasn't defined when explicitly requiring yajl/http_stream - -## 0.8.0 (February 2nd, 2011) -* added a new html_safe option to Yajl::Encoder to escape '/' characters for use in the DOM -* moved away from Jeweler to a Bundler/manual gemfile management setup - -## 0.7.9 (January 11th, 2011) -* moved to rspec2 -* fixed some compilation warnings on 1.9.3 -* brought over latest from Yajl upstream -* finally removed the deprecated Yajl::Stream methods -* moved to rake-compiler -* moved to Bundler for development -* fix memory corruption bug when using :pretty => true and a custom indent string -* fixed memory leak when exceptions were being raised during a parse - -## 0.7.8 (September 27th, 2010) -* fix a bug in chunked http response regex (thanks to http://github.com/kevn for catching this) -* Make sure json compability doesn't break ActiveSupport#to_json -* fix improper usage of rb_define_method - -## 0.7.7 (July 12th, 2010) -* full string encoding support for 1.9, respecting Encoding.default_internal -* refactor the #to_json function bodies into a C macro -* some misc code cleanup in the benchmark scripts - -## 0.7.6 (May 1st, 2010) -* use memcmp instead of strcmp for invalid Fixnum check -* add a spec to verify unicode chars can be used as keys -* twitter examples updated -* only use -Wextra if ENV['DEBUG'] is set as gcc 3 doesn't know about it -* fix chunked http encoding parse logic to further comply with the spec (thanks to Sebastian Cohnen ) -* removed as_json checks and usage in encoder to prevent infinite loops -** In Rails a lot of objects return self from the as_json method - which is wrong IMO - and needs to be fixed before this feature will work properly - -## 0.7.5 (March 23rd, 2010) -* check for existence of and use as_json method on custom objects -* bugfix with read buffer when parsing from an IO (thanks to Pavel Valodzka ) -* merged in latest yajl -* enable -Wextra during compilation -* brought back ability to pass a buffer to bzip/gzip/deflate #read helper methods - -## 0.7.4 (March 3rd, 2010) -* bugfix for the JSON gem compatibility API's Object#to_json method improperly encoding strings - -## 0.7.3 (February 23rd, 2010) -* remove trap from HttpStream code, it's really not needed - -## 0.7.2 (February 23rd, 2010) -* fixed broken to_json compatibility -* removed strlen in a few places in favor of RSTRING_LEN since ruby already knows the length of the string -* patched Yajl to more efficiently reset it's lexer (no more malloc/free) -* removed dependency on IO#eof? when parsing from an IO for full Rack-spec compatibility -* removed some various cruft code in C - -## 0.7.1 (February 17th, 2010) -* revert a patch made to bundled Yajl enabling optional quoting of strings that broke binary API compatibility - -## 0.7.0 (February 5th, 2010) -* ensure utf8 encoding is set on relevant strings during parse/encode in 1.9 - -## 0.6.9 (January 26th, 2010) -* HttpStream patches merged in from Luke Redpath -* Changed how Yajl::Parser was calling IO#read to better conform to the Rack spec and thus can be used to directly parse a rack.input stream - -## 0.6.8 (January 1st, 2010) -* A couple of small performance patches -* Allow passing a string to Yajl::HttpStream methods instead of only a URI - -## 0.6.7 (December 4th, 2009) -* Bump internal version constant to the proper value (doh!) -* Bring over latest from Yajl upstream - -## 0.6.6 (December 1st, 2009) -* Brought over some optimizations from Macruby's use of some yajl-ruby codez -* Yajl::HttpStream now supports being killed for long-running requests, thanks to Filipe Giusti - -## 0.6.5 (November 13th, 2009) -* optimize symbol creation while symbolize_keys is turned on -* fix for 32bit integer conversion into ruby - -## 0.6.4 (November 4th, 2009) -* All specs pass on Rubinius :) -* Added Yajl.load and Yajl.dump for compatibility with other various data format API's in ruby -* Fixed a bug in Yajl::Encoder which allowed direct, unescaped encoding of NaN, Infinity and -Infinity. - It will now properly throw a Yajl::EncodeError exception if either of these values are found unescaped. -* Update bundled Yajl library to 1.0.7 -* Conditionally define RSTRING_* and RARRAY_* for older versions of ruby (1.8.5 is still the default on CentOS) -* Bugfix for JSON gem exception classes to more accurately match those of the actual JSON gem -* A few small speed optimizations -* Updated specs to not run bzip2 related examples if unable to load the bzip2 library -* Finally added UTF-8 checking specs -* Removed needless calls to ID2SYM all over the place -* Updated benchmark scripts to bring the GC into the picture a little more - -## 0.6.3 (August 25th, 2009) -* Fixed a bug in the JSON gem compatibility API where strings weren't being properly escaped - -## 0.6.2 (August 25th, 2009) -* Fixed a bug surfaced by an existing library providing a to_json method, and Yajl would double-quote the values provided - -## 0.6.1 (August 20th, 2009) -* Fixed a bug in Yajl::HttpStream where responses contained multiple JSON strings but weren't Transfer-Encoding: chunked (thanks @dacort!) - -## 0.6.0 (August 19th, 2009) -* Added POST, PUT and DELETE support to Yajl::HttpStream -** POST support initially contributed by jdg (http://github.com/jdg) - Although oortle (http://github.com/oortle) coded it up in a fork with it as well. - -## 0.5.12 (July 31st, 2009) -* Add another option that can be passed to Yajl::Encoder's constructor (:terminator) to allow the caller some control over - when a full JSON string has been generated by the encoder. More information on it's use in the README - -## 0.5.11 (July 14th, 2009) -* fixing a bug Aman found with to_json on non-primitive Ruby objects and double-quoting in the JSON compat API - -## 0.5.10 (July 13th, 2009) -* Bugfix for the JSON gem compatibility API's default Object#to_json helper - -## 0.5.9 (July 9th, 2009) -* Bugfix for Yajl::Encoder where encoding a hash like {:a => :b} would get stuck in an infinite loop - -## 0.5.8 (July 6th, 2009) -* Bugfix in Yajl::HttpStream for proper handling of the Content-type header (Rob Sharp) -* Yajl::Encoder now has an on_progress callback setter, which can be used to harness the encoder's streaming ability. -** The passed Proc/lambda will be called, and passed every chunk (currently 8kb) of the encoded JSON string as it's being encoded. -* API CHANGE WARNING: Yajl::Encoder.encode's block will now be used as (and work the same as) the on_progress callback -** This means the block will be passed chunks of the JSON string at a time, giving the caller the ability to start processing the encoded data while it's still being encoded. -* fixed grammatical error in README (Neil Berkman) -* Added some encoder examples - -## 0.5.7 (June 23rd, 2009) -* You can now pass parser options (like :symbolize_keys for example) to Yajl::HttpStream.get -* Refactored spec tests a bit, DRYing up the Yajl::HttpStream specs quite a bit. -* Added a spec rake task, and spec.opts file -* Updated and renamed rcov rake task, and added rcov.opts file - -## 0.5.6 (June 19th, 2009) -* Added JSON.default_options hash to the JSON gem compatibility API -* Split out the JSON gem compatibility API's parsing and encoding methods into individually includable files -** the use case here is if you *only* want parsing, or *only* want encoding -** also, if you don't include encoding it won't include the #to_json overrides which tend to cause problems in some environments. -* Removed some large benchmark test files to reduce the size of the packaged gem by 1.5MB! - -## 0.5.5 (June 17th, 2009) -* Introduction of the JSON gem compatibility API -** NOTE: this isn't a 1:1 compatibility API, the goal was to be compatible with as many of the projects using the JSON gem as possible - not the JSON gem API itself -** the compatibility API must be explicitly enabled by requiring 'yajl/json_gem' in your project -** JSON.parse, JSON.generate, and the #to_json instance method extension to ruby's primitive classes are all included -* Fix Yajl::Encoder to ensure map keys are strings -* Encoding multiple JSON objects to a single stream doesn't separate by a newline character anymore -* Yajl::Encoder now checks for the existence of, and will call #to_json on any non-primitive object - -## 0.5.4 (June 16th, 2009) -* Yajl::Parser's :symbolize_keys option now defaults to false -* remove use of sprintf for a little speed improvement while parsing - -## 0.5.3 (June 7th, 2009) -* The IO parameter for Yajl::Encode#encode is now optional, and accepts a block -** it will return the resulting JSON string if no IO is passed to stream to -** if a block is passed, it will call and pass it the resulting JSON string -* Yajl::Parser#parse can now parse from a String as well as an IO -* Added and updated lot of in-code documentation. -** all the C code exposed to Ruby should now have comments -* Added :symbolize_keys option to the Yajl::Parser class, which defaults to true. -** Having this option enabled has shown around an 18% speedup in parsing time according to my benchmarks - -## 0.5.2 (May 30th, 2009) -* Added class helper methods Yajl::Encoder.encode(obj, io) and Yajl::Parser.parse(io) - * added tests for the above -* Updated Twitter streaming example to have a less verbose output -* Patch Yajl so encoding can continue as a stream - * IE: multiple objects encoded onto the same IO - * added a test for the above -* Set the internal read buffer size back down to 8kb by default -* Added an internal write buffer size (set to 8kb by default) which is used to throttle writes to the output stream - * This is to fix a major performance bug/issue with the IO#write C method in ruby 1.9.x (I've opened a bug with them about it) -* Fixed a typo in a one-off parsing spec test -* Updated benchmarks to work properly in 1.9 (required removal ActiveSupport benchmarking for now) -* Updated spec tests to respect ridiculous differences in hash key ordering between 1.8 and 1.9 - - -## 0.5.1 (May 25th, 2009) -* added some more tests for the new API -* inlined a couple of hot functions used in parsing for a little speedup -* updates to readme, reflecting changes in API -* version bump to push another gem build - -## 0.5.0 (May 25th, 2009) -* Refactored internal API so the caller can specify initialization options for the Parser and Encoder respectively. Two new classes were introduced as a result - Yajl::Parser and Yajl::Encoder. The newly refactored codebase is cleaner, thread-safe and removed all of the hack-code that was trickled around to make things work in the previous implementation. She's much more seaworthy now cap'n! - * Yajl::Parser.new accepts two options, :allow_comments and :check_utf8 which both default to true - * Yajl::Encoder.new accepts two options, :pretty and :indent which default to false and " " respectively -* cleaned up a lot of state code, that to my knowledge prevented yajl-ruby from being used in a thread-safe environment. -* added deprecated messaging to Yajl::Stream.parse and Yajl::Stream.encode - these will likely go away before 0.6.0 -* fixed a bug in the chunked http response parser regarding partially received chunks -* added a Twitter Search API example showing off the HttpStream API - -## 0.4.9 (May 20th, 2009) -* fixed some parser state bugs surfaced by edge cases -* added support for Chunked HTTP response bodies in Yajl::HttpStream - * added support for passing a block to Yajl::HttpStream.get that will be used as a callback whenever a JSON object is parsed off the stream (even if there is more than one!) -* added an examples folder, and put an example using the Twitter Streaming API in there to start -* added some more spec tests, this time around Chunked parsing and continuously parsing multiple JSON strings - -## 0.4.8 (May 18th, 2009) -* fixed a totally bone-head compilation problem, I created for myself ;) - -## 0.4.7 (May 18th, 2009) -* Bundling Yajl sources to remove the need to install them (and CMake) separately (Thank you Lloyd!!!) This means you can now simply install the gem and be off and running -* Added some spec tests for Yajl::HttpStream -* Added some spec tests for Yajl::Stream.encode -* added some more thank you's, where credit's due - in the readme -* updated the unicode.json file to reflect a "real-life" JSON response -* reorganized spec tests into their functional areas -* added an rcov rake task to generate code coverage output - -## 0.4.6 (May 17th, 2009) -* Applied a patch from benburkert (http://github.com/benburkert) to fix HTTP Basic Auth in Yajl::HttpStream.get - -## 0.4.5 (May 17th, 2009) -* added Yajl::Stream.encode(hash, io) - * generates a JSON string stream, and writes to IO - * compressed StreamWriter helpers added as well -* fixed a pretty lame segfault in (x86_64 only?) ubuntu/linux -* changed the compiled extension to have a more specific name (yajl_ext) for easier loading -* removed forced-load of .bundle file, for the rest of the planet aside from OSX users -* added some more benchmarks to compare to other forms of serialization in Ruby -* various readme updates - -## 0.4.4 (May 12th, 2009) -* NOTE: Breaking API change: - * renamed Yajl::GzipStreamReader to Yajl::Gzip::StreamReader -* added Yajl::Bzip2::StreamReader - * depends on the bzip2-ruby gem if you want to use it, if not Yajl::Bzip2 won't be loaded -* added Yajl::Deflate::StreamReader - * actually uses Zlib::Inflate for stream decompression -* added parse(io) class methods to Yajl::Gzip::StreamReader and Yajl::Bzip2::StreamReader as a helper for parsing compressed streams. -* updated Yajl::HttpStream to request responses compressed as deflate and bzip2 in addition to gzip -* fixed a bug regarding parsing Integers as Floats (so 123456 would have be parsed and returned as 123456.0) -* fixed a bug which caused a segfault in ruby's GC during string replacement in Yajl::Gzip and Yajl::Bzip2's StreamReader#read methods -* added support for user-specified User-Agent strings in Yajl::HttpStream - -## 0.4.3 (May 2nd, 2009) -* adding text/plain as an allowed mime-type for Yajl::HttpStream for webservers that respond with it instead of application/json (ahem...Yelp...) -* renamed specs folder to spec for no reason at all - -## 0.4.2 (April 30th, 2009) -* Yajl::HttpStream is now sending "proper" http request headers -* Yajl::HttpStream will request HTTP-Basic auth if credentials are provided in the passed URI -* cleanup requires - -## 0.4.1 (April 30th, 2009) -* fixed a typo in the stream.rb benchmark file -* fixed a bug in Yajl::Stream.parse that was causing "strange" Ruby malloc errors on large files, with large strings -* added Yajl::GzipStreamReader as a wrapper around Zlib::GzipReader to allow for standard IO#read behavior - * this allows Yajl::Stream to read off of a Gzip stream directly - -## 0.4.0 (April 29th, 2009) -* NOTE: Breaking API change: - * refactored Stream parsing methods out of Yajl::Native into Yajl::Stream - * removed Yajl::Native namespace/module -* Addition of Yajl::HttpStream module - * This module is for streaming JSON HTTP responses directly into Yajl (as they're being received) for increased awesomeness - * it currently supports basic get requests with Yajl::HttpStream.get(uri) - * it also supports (and prefers) output compressed (gzip) responses -* Addition Yajl::Chunked module - * This module is for feeding Yajl JSON pieces at a time, instead of an entire IO object - * This works very well in environments like an EventMachine app where data is received in chunks by design -* decreased read buffer for Yajl::Stream from 8kb to 4kb - -## 0.3.4 (April 24th, 2009) -* turned Unicode checks back on in the Yajl parser now that it's fixed (thanks Lloyd!) - * this also bumps the yajl version dependency requirement to 1.0.4 -* better guessing of Integer/Float from number found instead of just trying to create a BigNum no matter what -* changed extconf.rb to fail Makefile creation if yajl isn't found -* added a test to check for parsing Infinity due to a Float overflow - -## 0.3.3 (April 24th, 2009) -* 1.9 compatibility - -## 0.3.2 (April 24th, 2009) -* version bump: forgot to include yajl.c in the gem - -## 0.3.1 (April 23rd, 2009) -* fixed borked gemspec - -## 0.3.0 (April 23rd, 2009) -* slight refactor of ActiveSupport tests to better reflect how they actually exist in ActiveSupport -* typo correction in the changelog which had the years in 2008 -* added some initial spec tests - * ported some from ActiveSupport to ensure proper compatibility - * included 57 JSON fixtures to test against, all of which pass -* changed parser config to not check for invalid unicode characters as Ruby is going to do this anyway (?). This resolves the remaining test failures around unicode. -* changed how the parser was dealing with numbers to prevent overflows -* added an exception class Yajl::ParseError which is now used in place of simply printing to STDERR upon a parsing error -* renamed a couple of JSON test files in the benchmark folder to better represent their contents -* misc README updates - -## 0.2.1 (April 23rd, 2009) -* fixed parsing bug - also fixed failing ActiveSupport test failures (except for the unicode one, which is an issue in Yajl itself) - -## 0.2.0 (April 22nd, 2009) -* updated gemspec and README - -## 0.1.0 (April 21st, 2009) -* initial release - gemified diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/Gemfile b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/Gemfile deleted file mode 100644 index fa75df1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/Gemfile +++ /dev/null @@ -1,3 +0,0 @@ -source 'https://rubygems.org' - -gemspec diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/MIT-LICENSE b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/MIT-LICENSE deleted file mode 100644 index 3510948..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/MIT-LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2008-2011 Brian Lopez - http://github.com/brianmario - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/README.md b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/README.md deleted file mode 100644 index 89e0757..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/README.md +++ /dev/null @@ -1,367 +0,0 @@ -# YAJL C Bindings for Ruby - -This gem is a C binding to the excellent YAJL JSON parsing and generation library. - -You can read more info at the project's website http://lloyd.github.com/yajl or check out its code at http://github.com/lloyd/yajl. - -## Features - -* JSON parsing and encoding directly to and from an IO stream (file, socket, etc) or String. Compressed stream parsing and encoding supported for Bzip2, Gzip and Deflate. -* Parse and encode *multiple* JSON objects to and from streams or strings continuously. -* JSON gem compatibility API - allows yajl-ruby to be used as a drop-in replacement for the JSON gem -* Basic HTTP client (only GET requests supported for now) which parses JSON directly off the response body *as it's being received* -* ~3.5x faster than JSON.generate -* ~1.9x faster than JSON.parse -* ~4.5x faster than YAML.load -* ~377.5x faster than YAML.dump -* ~1.5x faster than Marshal.load -* ~2x faster than Marshal.dump - -## How to install - -Go ahead and install it as usual: - -``` -gem install yajl-ruby -``` - -Or use your Gemfile: - -``` ruby -gem 'yajl-ruby', require: 'yajl' -``` - -## Example of use - -NOTE: I'm building up a collection of small examples in the examples (http://github.com/brianmario/yajl-ruby/tree/master/examples) folder. - -First, you're probably gonna want to require it: - -``` ruby -require 'yajl' -``` - -### Parsing - -Then maybe parse some JSON from: - -a File IO - -``` ruby -json = File.new('test.json', 'r') -parser = Yajl::Parser.new -hash = parser.parse(json) -``` - -or maybe a StringIO - -``` ruby -json = StringIO.new("...some JSON...") -parser = Yajl::Parser.new -hash = parser.parse(json) -``` - -or maybe STDIN - -``` -cat someJsonFile.json | ruby -ryajl -e "puts Yajl::Parser.parse(STDIN).inspect" -``` - -Or lets say you didn't have access to the IO object that contained JSON data, but instead -only had access to chunks of it at a time. No problem! - -(Assume we're in an EventMachine::Connection instance) - -``` ruby -def post_init - @parser = Yajl::Parser.new(:symbolize_keys => true) -end - -def object_parsed(obj) - puts "Sometimes one pays most for the things one gets for nothing. - Albert Einstein" - puts obj.inspect -end - -def connection_completed - # once a full JSON object has been parsed from the stream - # object_parsed will be called, and passed the constructed object - @parser.on_parse_complete = method(:object_parsed) -end - -def receive_data(data) - # continue passing chunks - @parser << data -end -``` - -Or if you don't need to stream it, it'll just return the built object from the parse when it's done. -NOTE: if there are going to be multiple JSON strings in the input, you *must* specify a block or callback as this -is how yajl-ruby will hand you (the caller) each object as it's parsed off the input. - -``` ruby -obj = Yajl::Parser.parse(str_or_io) -``` - -Or how about a JSON API HTTP request? -This actually makes a request using a raw TCPSocket, then parses the JSON body right off the socket. While it's being received over the wire! - -``` ruby -require 'uri' -require 'yajl/http_stream' - -url = URI.parse("http://search.twitter.com/search.json?q=engineyard") -results = Yajl::HttpStream.get(url) -``` - -Or do the same request, with Gzip and Deflate output compression support (also supports Bzip2, if loaded): -(this does the same raw socket Request, but transparently parses the compressed response body) - -``` ruby -require 'uri' -require 'yajl/gzip' -require 'yajl/deflate' -require 'yajl/http_stream' - -url = URI.parse("http://search.twitter.com/search.json?q=engineyard") -results = Yajl::HttpStream.get(url) -``` - -Since yajl-ruby parses JSON as a stream, supporting API's like Twitter's Streaming API are a piece-of-cake. -You can simply supply a block to `Yajl::HttpStream.get`, which is used as the callback for when a JSON object has been -unserialized off the stream. For the case of this Twitter Streaming API call, the callback gets fired a few times a second (depending on your connection speed). -The code below is all that's needed to make the request and stream unserialized Ruby hashes off the response, continuously. -You'll note that I've enabled the :symbolize_keys parser option as well. Doing so is much more efficient for parsing JSON streams with -lots of repetitive keys - for things like result sets or multiple API requests - than the same parse with string keys. -This is because Ruby will reuse (and never GC) its symbol table. Be that as it may, if you want to parse JSON strings with random key names -it's much better to leave string keys enabled (the default), so they can get GC'd later. - -``` ruby -require 'uri' -require 'yajl/http_stream' - -uri = URI.parse("http://#{username}:#{password}@stream.twitter.com/spritzer.json") -Yajl::HttpStream.get(uri, :symbolize_keys => true) do |hash| - puts hash.inspect -end -``` - -Or how about parsing directly from a compressed file? - -``` ruby -require 'yajl/bzip2' - -file = File.new('some.json.bz2', 'r') -result = Yajl::Bzip2::StreamReader.parse(file) -``` - -### Encoding - -Since yajl-ruby does everything using streams, you simply need to pass the object to encode, and the IO to write the stream to (this happens in chunks). - -This allows you to encode JSON as a stream, writing directly to a socket - -``` ruby -socket = TCPSocket.new('192.168.1.101', 9000) -hash = {:foo => 12425125, :bar => "some string", ... } -Yajl::Encoder.encode(hash, socket) -``` - -Or what if you wanted to compress the stream over the wire? - -``` ruby -require 'yajl/gzip' -socket = TCPSocket.new('192.168.1.101', 9000) -hash = {:foo => 12425125, :bar => "some string", ... } -Yajl::Gzip::StreamWriter.encode(hash, socket) -``` - -Or what about encoding multiple objects to JSON over the same stream? -This example will encode and send 50 JSON objects over the same stream, continuously. - -``` ruby -socket = TCPSocket.new('192.168.1.101', 9000) -encoder = Yajl::Encoder.new -50.times do - hash = {:current_time => Time.now.to_f, :foo => 12425125} - encoder.encode(hash, socket) -end -``` - -Using `EventMachine` and you want to encode and send in chunks? -(Assume we're in an `EventMachine::Connection` instance) - -``` ruby -def post_init - # Passing a :terminator character will let us determine when the encoder - # is done encoding the current object - @encoder = Yajl::Encoder.new - motd_contents = File.read("/path/to/motd.txt") - status = File.read("/path/to/huge/status_file.txt") - @motd = {:motd => motd_contents, :system_status => status} -end - -def connection_completed - # The encoder will do its best to hand you data in chunks that - # are around 8kb (but you may see some that are larger) - # - # It should be noted that you could have also assigned the _on_progress_ callback - # much like you can assign the _on_parse_complete_ callback with the parser class. - # Passing a block (like below) essentially tells the encoder to use that block - # as the callback normally assigned to _on_progress_. - # - # Send our MOTD and status - @encoder.encode(@motd) do |chunk| - if chunk.nil? # got our terminator, encoding is done - close_connection_after_writing - else - send_data(chunk) - end - end -end -``` - -But to make things simple, you might just want to let yajl-ruby do all the hard work for you and just hand back -a string when it's finished. In that case, just don't provide and IO or block (or assign the on_progress callback). - -``` ruby -str = Yajl::Encoder.encode(obj) -``` - -You can also use `Yajl::Bzip2::StreamWriter` and `Yajl::Deflate::StreamWriter`. So you can pick whichever fits your CPU/bandwidth sweet-spot. - -### HTML Safety - -If you plan on embedding the output from the encoder in the DOM, you'll want to make sure you use the html_safe option on the encoder. This will escape all '/' characters to ensure no closing tags can be injected, preventing XSS. - -Meaning the following should be perfectly safe: - -``` html -", :html_safe => true) %>; - -``` - -## JSON gem Compatibility API - -The JSON gem compatibility API isn't enabled by default. You have to explicitly require it like so: - -``` ruby -require 'yajl/json_gem' -``` - -That's right, you can just replace `"require 'json'"` with the line above and you're done! - -This will require yajl-ruby itself, as well as enable its JSON gem compatibility API. - -This includes the following API: - -JSON.parse, JSON.generate, JSON.pretty_generate, JSON.load, JSON.dump -and all of the #to_json instance method overrides for Ruby's primitive objects - - -Once the compatibility API is enabled, your existing or new project should work as if the JSON gem itself were being used. Only you'll be using Yajl ;) - -There are a lot more possibilities that I'd love to see other gems/plugins for someday. - -Some ideas: - -* parsing logs in JSON format -* a Rails plugin - DONE! (http://github.com/technoweenie/yajl-rails) -* official support in Rails 3 - DONE (http://github.com/rails/rails/commit/a96bf4ab5e73fccdafb78b99e8a122cc2172b505) - * and is the default (if installed) - http://github.com/rails/rails/commit/63bb955a99eb46e257655c93dd64e86ebbf05651 -* Rack middleware (ideally the JSON body could be handed to the parser while it's still being received, this is apparently possible with Unicorn) -* JSON API clients (http://github.com/brianmario/freckle-api) - -## Benchmarks - -After I finished implementation - this library performs close to the same as the current JSON.parse (C gem) does on small/medium files. - -But on larger files, and higher amounts of iteration, this library was around 2x faster than JSON.parse. - -The main benefit of this library is in its memory usage. -Since it's able to parse the stream in chunks, its memory requirements are very, very low. - -Here's what parsing a 2.43MB JSON file off the filesystem 20 times looks like: - -### Memory Usage - -#### Average - -* Yajl::Parser#parse: 32MB -* JSON.parse: 54MB -* ActiveSupport::JSON.decode: 63MB - -#### Peak - -* Yajl::Parser#parse: 32MB -* JSON.parse: 57MB -* ActiveSupport::JSON.decode: 67MB - -### Parse Time - -* Yajl::Parser#parse: 4.54s -* JSON.parse: 5.47s -* ActiveSupport::JSON.decode: 64.42s - -### Encode Time - -* Yajl::Encoder#encode: 3.59s -* JSON#to_json: 6.2s -* ActiveSupport::JSON.encode: 45.58s - -### Compared to YAML - -NOTE: I converted the 2.4MB JSON file to YAML for this test. - -#### Parse Time (from their respective formats) - -* Yajl::Parser#parse: 4.33s -* JSON.parse: 5.37s -* YAML.load: 19.47s - -#### Encode Time (to their respective formats) - -* Yajl::Encoder#encode: 3.47s -* JSON#to_json: 6.6s -* YAML.dump(obj, io): 1309.93s - -### Compared to Marshal.load/Marshal.dump - -NOTE: I converted the 2.4MB JSON file to a Hash and a dump file from Marshal.dump for this test. - -#### Parse Time (from their respective formats) - -* Yajl::Parser#parse: 4.54s -* JSON.parse: 7.40s -* Marshal.load: 7s - -#### Encode Time (to their respective formats) - -* Yajl::Encoder#encode: 2.39s -* JSON#to_json: 8.37s -* Marshal.dump: 4.66s - -## Third Party Sources Bundled - -This project includes code from the BSD licensed yajl project, copyright 2007-2009 Lloyd Hilaiel - -## Special Thanks & Contributors - -For those of you using yajl-ruby out in the wild, please hit me up on Twitter (brianmario) or send me a message here on the Githubs describing the site and how you're using it. I'd love to get a list going! - -I've had a lot of inspiration, and a lot of help. Thanks to everyone who's been a part of this and those to come! - -* Lloyd Hilaiel - http://github.com/lloyd - for writing Yajl!! -* Josh Ferguson - http://github.com/besquared - for peer-pressuring me into getting back into C; it worked ;) Also tons of support over IM -* Jonathan Novak - http://github.com/cypriss - pointer-hacking help -* Tom Smith - http://github.com/rtomsmith - pointer-hacking help -* Rick Olson - http://github.com/technoweenie - for making an ActiveSupport patch with support for this library and teasing me that it might go into Rails 3. You sure lit a fire under my ass and I got a ton of work done because of it! :) -* The entire Github Crew - http://github.com/ - my inspiration, time spent writing this, finding Yajl, So many-MANY other things wouldn't have been possible without this awesome service. I owe you guys some whiskey at Kilowatt. -* Ben Burkert - http://github.com/benburkert -* Aman Gupta - http://github.com/tmm1 - tons of suggestions and inspiration for the most recent features, and hopefully more to come ;) -* Filipe Giusti -* Jonathan George -* Luke Redpath -* Neil Berkman -* Pavel Valodzka -* Rob Sharp diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/Rakefile b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/Rakefile deleted file mode 100644 index 66f4d3b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/Rakefile +++ /dev/null @@ -1,2 +0,0 @@ -# Load custom tasks -Dir['tasks/*.rake'].sort.each { |f| load f } diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/encode.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/encode.rb deleted file mode 100644 index 50bfe99..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/encode.rb +++ /dev/null @@ -1,72 +0,0 @@ -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/..') -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib') - -require 'rubygems' -require 'benchmark' -require 'yajl' -require 'stringio' -begin - require 'json' -rescue LoadError -end -begin - require 'psych' -rescue LoadError -end -begin - require 'active_support' -rescue LoadError -end - -filename = ARGV[0] || 'benchmark/subjects/ohai.json' -hash = File.open(filename, 'rb') { |f| Yajl::Parser.new.parse(f.read) } - -times = ARGV[1] ? ARGV[1].to_i : 1000 -puts "Starting benchmark encoding #{filename} #{times} times\n\n" -Benchmark.bmbm { |x| - io_encoder = Yajl::Encoder.new - string_encoder = Yajl::Encoder.new - - x.report("Yajl::Encoder#encode (to an IO)") { - times.times { - io_encoder.encode(hash, StringIO.new) - } - } - x.report("Yajl::Encoder#encode (to a String)") { - times.times { - output = string_encoder.encode(hash) - } - } - if defined?(JSON) - x.report("JSON.generate") { - times.times { - JSON.generate(hash) - } - } - end - if defined?(Psych) - x.report("Psych.to_json") { - times.times { - Psych.to_json(hash) - } - } - if defined?(Psych::JSON::Stream) - x.report("Psych::JSON::Stream") { - times.times { - io = StringIO.new - stream = Psych::JSON::Stream.new io - stream.start - stream.push hash - stream.finish - } - } - end - end - if defined?(ActiveSupport::JSON) - x.report("ActiveSupport::JSON.encode") { - times.times { - ActiveSupport::JSON.encode(hash) - } - } - end -} diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/encode_json_and_marshal.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/encode_json_and_marshal.rb deleted file mode 100644 index 73a7d0c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/encode_json_and_marshal.rb +++ /dev/null @@ -1,42 +0,0 @@ -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/..') -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib') - -require 'rubygems' -require 'benchmark' -require 'yajl' -require 'stringio' -begin - require 'json' -rescue LoadError -end - -times = ARGV[0] ? ARGV[0].to_i : 1000 -filename = 'benchmark/subjects/ohai.json' -json = File.new(filename, 'r') -hash = Yajl::Parser.new.parse(json) -json.close - -puts "Starting benchmark encoding #{filename} #{times} times\n\n" -Benchmark.bmbm { |x| - encoder = Yajl::Encoder.new - x.report { - puts "Yajl::Encoder#encode" - times.times { - encoder.encode(hash, StringIO.new) - } - } - if defined?(JSON) - x.report { - puts "JSON's #to_json" - times.times { - JSON.generate(hash) - } - } - end - x.report { - puts "Marshal.dump" - times.times { - Marshal.dump(hash) - } - } -} diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/encode_json_and_yaml.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/encode_json_and_yaml.rb deleted file mode 100644 index 4ceb022..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/encode_json_and_yaml.rb +++ /dev/null @@ -1,53 +0,0 @@ -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/..') -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib') - -require 'rubygems' -require 'benchmark' -require 'yajl' -begin - require 'json' -rescue LoadError -end -require 'yaml' - -# JSON Section -filename = 'benchmark/subjects/ohai.json' -json = File.new(filename, 'r') -hash = Yajl::Parser.new.parse(json) -json.close - -times = ARGV[0] ? ARGV[0].to_i : 1000 -puts "Starting benchmark encoding #{filename} into JSON #{times} times\n\n" -Benchmark.bmbm { |x| - encoder = Yajl::Encoder.new - x.report { - puts "Yajl::Encoder#encode" - times.times { - encoder.encode(hash, StringIO.new) - } - } - if defined?(JSON) - x.report { - puts "JSON's #to_json" - times.times { - JSON.generate(hash) - } - } - end -} - -# YAML Section -filename = 'benchmark/subjects/ohai.yml' -yml = File.new(filename, 'r') -data = YAML.load_stream(yml) -yml.close - -puts "Starting benchmark encoding #{filename} into YAML #{times} times\n\n" -Benchmark.bmbm { |x| - x.report { - puts "YAML.dump" - times.times { - YAML.dump(data, StringIO.new) - } - } -} diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/http.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/http.rb deleted file mode 100644 index 551c987..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/http.rb +++ /dev/null @@ -1,32 +0,0 @@ -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/..') -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib') - -require 'rubygems' -require 'benchmark' -require 'yajl/http_stream' -require 'yajl/gzip' -require 'yajl/deflate' -require 'yajl/bzip2' unless defined?(Bzip2) -require 'json' -require 'uri' -require 'net/http' - -uri = URI.parse('http://search.twitter.com/search.json?q=github') -# uri = URI.parse('http://localhost/yajl-ruby.git/benchmark/subjects/contacts.json') - -times = ARGV[0] ? ARGV[0].to_i : 1 -puts "Starting benchmark parsing #{uri.to_s} #{times} times\n\n" -Benchmark.bmbm { |x| - x.report { - puts "Yajl::HttpStream.get" - times.times { - Yajl::HttpStream.get(uri) - } - } - x.report { - puts "JSON.parser" - times.times { - JSON.parse(Net::HTTP.get_response(uri).body, :max_nesting => false) - } - } -} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/parse.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/parse.rb deleted file mode 100644 index 3c744c8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/parse.rb +++ /dev/null @@ -1,94 +0,0 @@ -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/..') -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib') - -require 'rubygems' -require 'benchmark' -require 'yaml' -require 'yajl' -begin - require 'json' -rescue LoadError -end -begin - require 'psych' -rescue LoadError -end -begin - require 'active_support' -rescue LoadError -end - -filename = ARGV[0] || 'benchmark/subjects/item.json' -json = File.new(filename, 'r') - -times = ARGV[1] ? ARGV[1].to_i : 10_000 -puts "Starting benchmark parsing #{File.size(filename)} bytes of JSON data #{times} times\n\n" -Benchmark.bmbm { |x| - io_parser = Yajl::Parser.new - io_parser.on_parse_complete = lambda {|obj|} if times > 1 - x.report { - puts "Yajl::Parser#parse (from an IO)" - times.times { - json.rewind - io_parser.parse(json) - } - } - string_parser = Yajl::Parser.new - string_parser.on_parse_complete = lambda {|obj|} if times > 1 - x.report { - puts "Yajl::Parser#parse (from a String)" - times.times { - json.rewind - string_parser.parse(json.read) - } - } - if defined?(JSON) - x.report { - puts "JSON.parse" - times.times { - json.rewind - JSON.parse(json.read, :max_nesting => false) - } - } - end - if defined?(ActiveSupport::JSON) - x.report { - puts "ActiveSupport::JSON.decode" - times.times { - json.rewind - ActiveSupport::JSON.decode(json.read) - } - } - end - x.report { - puts "YAML.load (from an IO)" - times.times { - json.rewind - YAML.load(json) - } - } - x.report { - puts "YAML.load (from a String)" - times.times { - json.rewind - YAML.load(json.read) - } - } - if defined?(Psych) - x.report { - puts "Psych.load (from an IO)" - times.times { - json.rewind - Psych.load(json) - } - } - x.report { - puts "Psych.load (from a String)" - times.times { - json.rewind - Psych.load(json.read) - } - } - end -} -json.close \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/parse_json_and_marshal.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/parse_json_and_marshal.rb deleted file mode 100644 index 06fe70b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/parse_json_and_marshal.rb +++ /dev/null @@ -1,50 +0,0 @@ -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/..') -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib') - -require 'rubygems' -require 'benchmark' -require 'yajl' -begin - require 'json' -rescue LoadError -end - -# JSON section -filename = 'benchmark/subjects/ohai.json' -marshal_filename = 'benchmark/subjects/ohai.marshal_dump' -json = File.new(filename, 'r') -marshal_file = File.new(marshal_filename, 'r') - -hash = {} - -times = ARGV[0] ? ARGV[0].to_i : 1000 -puts "Starting benchmark parsing #{File.size(filename)} bytes of JSON data #{times} times\n\n" -Benchmark.bmbm { |x| - x.report { - puts "Yajl::Parser#parse" - yajl = Yajl::Parser.new - yajl.on_parse_complete = lambda {|obj|} if times > 1 - times.times { - json.rewind - hash = yajl.parse(json) - } - } - if defined?(JSON) - x.report { - puts "JSON.parse" - times.times { - json.rewind - JSON.parse(json.read, :max_nesting => false) - } - } - end - x.report { - puts "Marshal.load" - times.times { - marshal_file.rewind - Marshal.load(marshal_file) - } - } -} -json.close -marshal_file.close \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/parse_json_and_yaml.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/parse_json_and_yaml.rb deleted file mode 100644 index 0cc509a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/parse_json_and_yaml.rb +++ /dev/null @@ -1,55 +0,0 @@ -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/..') -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib') - -require 'rubygems' -require 'benchmark' -require 'yajl' -begin - require 'json' -rescue LoadError -end -require 'yaml' - -# JSON section -filename = 'benchmark/subjects/ohai.json' -json = File.new(filename, 'r') - -times = ARGV[0] ? ARGV[0].to_i : 1000 -puts "Starting benchmark parsing #{File.size(filename)} bytes of JSON data #{times} times\n\n" -Benchmark.bmbm { |x| - parser = Yajl::Parser.new - parser.on_parse_complete = lambda {|obj|} if times > 1 - x.report { - puts "Yajl::Parser#parse" - times.times { - json.rewind - parser.parse(json) - } - } - if defined?(JSON) - x.report { - puts "JSON.parse" - times.times { - json.rewind - JSON.parse(json.read, :max_nesting => false) - } - } - end -} -json.close - -# YAML section -filename = 'benchmark/subjects/ohai.yml' -yaml = File.new(filename, 'r') - -puts "Starting benchmark parsing #{File.size(filename)} bytes of YAML data #{times} times\n\n" -Benchmark.bmbm { |x| - x.report { - puts "YAML.load_stream" - times.times { - yaml.rewind - YAML.load(yaml) - } - } -} -yaml.close \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/parse_stream.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/parse_stream.rb deleted file mode 100644 index 94c5ac3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/parse_stream.rb +++ /dev/null @@ -1,54 +0,0 @@ -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/..') -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib') - -require 'rubygems' -require 'benchmark' -require 'yajl' -begin - require 'json' -rescue LoadError -end -begin - require 'active_support' -rescue LoadError -end - -filename = 'benchmark/subjects/twitter_stream.json' -json = File.new(filename, 'r') - -times = ARGV[0] ? ARGV[0].to_i : 100 -puts "Starting benchmark parsing JSON stream (#{File.size(filename)} bytes of JSON data with 430 JSON separate strings) #{times} times\n\n" -Benchmark.bmbm { |x| - parser = Yajl::Parser.new - parser.on_parse_complete = lambda {|obj|} - x.report { - puts "Yajl::Parser#parse" - times.times { - json.rewind - parser.parse(json) - } - } - if defined?(JSON) - x.report { - puts "JSON.parse" - times.times { - json.rewind - while chunk = json.gets - JSON.parse(chunk, :max_nesting => false) - end - } - } - end - if defined?(ActiveSupport::JSON) - x.report { - puts "ActiveSupport::JSON.decode" - times.times { - json.rewind - while chunk = json.gets - ActiveSupport::JSON.decode(chunk) - end - } - } - end -} -json.close \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/subjects/item.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/subjects/item.json deleted file mode 100644 index dbf7647..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/subjects/item.json +++ /dev/null @@ -1 +0,0 @@ -{"item": {"name": "generated", "cached_tag_list": "", "updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "price": 1.99, "delta": false, "cost": 0.597, "account_id": 16, "unit": null, "import_tag": null, "taxable": true, "id": 1, "created_by_id": null, "description": null, "company_id": 0, "sku": "06317-0306", "created_at": "2009-03-24T05:25:09Z", "active": true}} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/subjects/ohai.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/subjects/ohai.json deleted file mode 100644 index 584bdbd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/subjects/ohai.json +++ /dev/null @@ -1,1216 +0,0 @@ -{ - "command": { - "ps": "ps -ef" - }, - "kernel": { - "modules": { - "org.virtualbox.kext.VBoxDrv": { - "size": 118784, - "version": "2.2.0", - "index": "114", - "refcount": "3" - }, - "com.cisco.nke.ipsec": { - "size": 454656, - "version": "2.0.1", - "index": "111", - "refcount": "0" - }, - "com.apple.driver.AppleAPIC": { - "size": 12288, - "version": "1.4", - "index": "26", - "refcount": "0" - }, - "com.apple.driver.AirPort.Atheros": { - "size": 593920, - "version": "318.8.3", - "index": "88", - "refcount": "0" - }, - "com.apple.driver.AppleIntelCPUPowerManagement": { - "size": 102400, - "version": "59.0.1", - "index": "22", - "refcount": "0" - }, - "com.apple.iokit.IOStorageFamily": { - "size": 98304, - "version": "1.5.5", - "index": "44", - "refcount": "9" - }, - "com.apple.iokit.IOATAPIProtocolTransport": { - "size": 16384, - "version": "1.5.2", - "index": "52", - "refcount": "0" - }, - "com.apple.iokit.IOPCIFamily": { - "size": 65536, - "version": "2.5", - "index": "17", - "refcount": "18" - }, - "com.apple.driver.AppleHPET": { - "size": 12288, - "version": "1.3", - "index": "33", - "refcount": "0" - }, - "com.apple.driver.AppleUSBHub": { - "size": 49152, - "version": "3.2.7", - "index": "47", - "refcount": "0" - }, - "com.apple.iokit.IOFireWireFamily": { - "size": 258048, - "version": "3.4.6", - "index": "49", - "refcount": "2" - }, - "com.apple.driver.AppleUSBComposite": { - "size": 16384, - "version": "3.2.0", - "index": "60", - "refcount": "1" - }, - "com.apple.driver.AppleIntelPIIXATA": { - "size": 36864, - "version": "2.0.0", - "index": "41", - "refcount": "0" - }, - "com.apple.driver.AppleSmartBatteryManager": { - "size": 28672, - "version": "158.6.0", - "index": "32", - "refcount": "0" - }, - "com.apple.filesystems.udf": { - "size": 233472, - "version": "2.0.2", - "index": "119", - "refcount": "0" - }, - "com.apple.iokit.IOSMBusFamily": { - "size": 12288, - "version": "1.1", - "index": "27", - "refcount": "2" - }, - "com.apple.iokit.IOACPIFamily": { - "size": 16384, - "version": "1.2.0", - "index": "18", - "refcount": "10" - }, - "foo.tap": { - "size": 24576, - "version": "1.0", - "index": "113", - "refcount": "0" - }, - "com.vmware.kext.vmx86": { - "size": 864256, - "version": "2.0.4", - "index": "104", - "refcount": "0" - }, - "com.apple.iokit.CHUDUtils": { - "size": 28672, - "version": "200", - "index": "98", - "refcount": "0" - }, - "org.virtualbox.kext.VBoxNetAdp": { - "size": 8192, - "version": "2.2.0", - "index": "117", - "refcount": "0" - }, - "com.apple.filesystems.autofs": { - "size": 45056, - "version": "2.0.1", - "index": "109", - "refcount": "0" - }, - "com.vmware.kext.vmnet": { - "size": 36864, - "version": "2.0.4", - "index": "108", - "refcount": "0" - }, - "com.apple.driver.AppleACPIButtons": { - "size": 16384, - "version": "1.2.4", - "index": "30", - "refcount": "0" - }, - "com.apple.driver.AppleFWOHCI": { - "size": 139264, - "version": "3.7.2", - "index": "50", - "refcount": "0" - }, - "com.apple.iokit.IOSCSIArchitectureModelFamily": { - "size": 102400, - "version": "2.0.5", - "index": "51", - "refcount": "4" - }, - "com.apple.iokit.IOSCSIBlockCommandsDevice": { - "size": 90112, - "version": "2.0.5", - "index": "57", - "refcount": "1" - }, - "com.apple.driver.AppleACPIPCI": { - "size": 12288, - "version": "1.2.4", - "index": "31", - "refcount": "0" - }, - "com.apple.security.seatbelt": { - "size": 98304, - "version": "107.10", - "index": "25", - "refcount": "0" - }, - "com.apple.driver.AppleUpstreamUserClient": { - "size": 16384, - "version": "2.7.2", - "index": "100", - "refcount": "0" - }, - "com.apple.kext.OSvKernDSPLib": { - "size": 12288, - "version": "1.1", - "index": "79", - "refcount": "1" - }, - "com.apple.iokit.IOBDStorageFamily": { - "size": 20480, - "version": "1.5", - "index": "58", - "refcount": "1" - }, - "com.apple.iokit.IOGraphicsFamily": { - "size": 118784, - "version": "1.7.1", - "index": "70", - "refcount": "5" - }, - "com.apple.iokit.IONetworkingFamily": { - "size": 90112, - "version": "1.6.1", - "index": "82", - "refcount": "4" - }, - "com.apple.iokit.IOATAFamily": { - "size": 53248, - "version": "2.0.0", - "index": "40", - "refcount": "2" - }, - "com.apple.iokit.IOUSBHIDDriver": { - "size": 20480, - "version": "3.2.2", - "index": "63", - "refcount": "2" - }, - "org.virtualbox.kext.VBoxUSB": { - "size": 28672, - "version": "2.2.0", - "index": "115", - "refcount": "0" - }, - "com.vmware.kext.vmioplug": { - "size": 24576, - "version": "2.0.4", - "index": "107", - "refcount": "0" - }, - "com.apple.security.TMSafetyNet": { - "size": 12288, - "version": "3", - "index": "23", - "refcount": "0" - }, - "com.apple.iokit.IONDRVSupport": { - "size": 57344, - "version": "1.7.1", - "index": "71", - "refcount": "3" - }, - "com.apple.BootCache": { - "size": 20480, - "version": "30.3", - "index": "20", - "refcount": "0" - }, - "com.apple.iokit.IOUSBUserClient": { - "size": 8192, - "version": "3.2.4", - "index": "46", - "refcount": "1" - }, - "com.apple.iokit.IOSCSIMultimediaCommandsDevice": { - "size": 90112, - "version": "2.0.5", - "index": "59", - "refcount": "0" - }, - "com.apple.driver.AppleIRController": { - "size": 20480, - "version": "110", - "index": "78", - "refcount": "0" - }, - "com.apple.driver.AudioIPCDriver": { - "size": 16384, - "version": "1.0.5", - "index": "81", - "refcount": "0" - }, - "org.virtualbox.kext.VBoxNetFlt": { - "size": 16384, - "version": "2.2.0", - "index": "116", - "refcount": "0" - }, - "com.apple.driver.AppleLPC": { - "size": 12288, - "version": "1.2.11", - "index": "73", - "refcount": "0" - }, - "com.apple.iokit.CHUDKernLib": { - "size": 20480, - "version": "196", - "index": "93", - "refcount": "2" - }, - "com.apple.iokit.CHUDProf": { - "size": 49152, - "version": "207", - "index": "97", - "refcount": "0" - }, - "com.apple.NVDAResman": { - "size": 2478080, - "version": "5.3.6", - "index": "90", - "refcount": "2" - }, - "com.apple.driver.AppleACPIEC": { - "size": 20480, - "version": "1.2.4", - "index": "28", - "refcount": "0" - }, - "foo.tun": { - "size": 24576, - "version": "1.0", - "index": "118", - "refcount": "0" - }, - "com.apple.iokit.IOSerialFamily": { - "size": 36864, - "version": "9.3", - "index": "102", - "refcount": "1" - }, - "com.apple.GeForce": { - "size": 622592, - "version": "5.3.6", - "index": "96", - "refcount": "0" - }, - "com.apple.iokit.IOCDStorageFamily": { - "size": 32768, - "version": "1.5", - "index": "55", - "refcount": "3" - }, - "com.apple.driver.AppleUSBEHCI": { - "size": 73728, - "version": "3.2.5", - "index": "39", - "refcount": "0" - }, - "com.apple.nvidia.nv50hal": { - "size": 2445312, - "version": "5.3.6", - "index": "91", - "refcount": "0" - }, - "com.apple.driver.AppleSMBIOS": { - "size": 16384, - "version": "1.1.1", - "index": "29", - "refcount": "0" - }, - "com.apple.driver.AppleBacklight": { - "size": 16384, - "version": "1.4.4", - "index": "72", - "refcount": "0" - }, - "com.apple.driver.AppleACPIPlatform": { - "size": 253952, - "version": "1.2.4", - "index": "19", - "refcount": "3" - }, - "com.apple.iokit.SCSITaskUserClient": { - "size": 24576, - "version": "2.0.5", - "index": "54", - "refcount": "0" - }, - "com.apple.iokit.IOHIDFamily": { - "size": 233472, - "version": "1.5.3", - "index": "21", - "refcount": "7" - }, - "com.apple.driver.DiskImages": { - "size": 65536, - "version": "195.2.2", - "index": "101", - "refcount": "0" - }, - "com.apple.iokit.IODVDStorageFamily": { - "size": 24576, - "version": "1.5", - "index": "56", - "refcount": "2" - }, - "com.apple.driver.XsanFilter": { - "size": 20480, - "version": "2.7.91", - "index": "53", - "refcount": "0" - }, - "com.apple.driver.AppleEFIRuntime": { - "size": 12288, - "version": "1.2.0", - "index": "35", - "refcount": "1" - }, - "com.apple.driver.AppleRTC": { - "size": 20480, - "version": "1.2.3", - "index": "34", - "refcount": "0" - }, - "com.apple.iokit.IOFireWireIP": { - "size": 36864, - "version": "1.7.6", - "index": "83", - "refcount": "0" - }, - "com.vmware.kext.vmci": { - "size": 45056, - "version": "2.0.4", - "index": "106", - "refcount": "0" - }, - "com.apple.iokit.IO80211Family": { - "size": 126976, - "version": "215.1", - "index": "87", - "refcount": "1" - }, - "com.apple.nke.applicationfirewall": { - "size": 32768, - "version": "1.0.77", - "index": "24", - "refcount": "0" - }, - "com.apple.iokit.IOAHCIBlockStorage": { - "size": 69632, - "version": "1.2.0", - "index": "48", - "refcount": "0" - }, - "com.apple.driver.AppleUSBUHCI": { - "size": 57344, - "version": "3.2.5", - "index": "38", - "refcount": "0" - }, - "com.apple.iokit.IOAHCIFamily": { - "size": 24576, - "version": "1.5.0", - "index": "42", - "refcount": "2" - }, - "com.apple.driver.AppleAHCIPort": { - "size": 53248, - "version": "1.5.2", - "index": "43", - "refcount": "0" - }, - "com.apple.driver.AppleEFINVRAM": { - "size": 24576, - "version": "1.2.0", - "index": "36", - "refcount": "0" - }, - "com.apple.iokit.IOUSBFamily": { - "size": 167936, - "version": "3.2.7", - "index": "37", - "refcount": "13" - }, - "com.apple.driver.AppleUSBMergeNub": { - "size": 12288, - "version": "3.2.4", - "index": "61", - "refcount": "0" - } - }, - "machine": "i386", - "name": "Darwin", - "os": "Darwin", - "version": "Darwin Kernel Version 9.6.0: Mon Nov 24 17:37:00 PST 2008; root:xnu-1228.9.59~1\/RELEASE_I386", - "release": "9.6.0" - }, - "platform_version": "10.5.6", - "platform": "mac_os_x", - "ipaddress": "192.168.88.1", - "keys": { - "ssh": { - "host_dsa_public": "private", - "host_rsa_public": "private" - } - }, - "network": { - "settings": { - "net.inet6.ip6.forwarding": "0", - "net.inet.ip.dummynet.debug": "0", - "net.inet.ip.rtexpire": "10", - "net.inet6.ipsec6.esp_trans_deflev": "1", - "net.inet.tcp.tcbhashsize": "4096", - "net.key.esp_auth": "0", - "net.inet6.ip6.hlim": "64", - "net.inet.ip.fw.dyn_fin_lifetime": "1", - "net.inet.ip.fw.dyn_udp_lifetime": "10", - "net.inet.icmp.bmcastecho": "1", - "net.athforceBias": "2 2", - "net.athbgscan": "1 1", - "net.inet.tcp.reass.maxsegments": "2048", - "net.inet6.ip6.auto_flowlabel": "1", - "net.inet6.ip6.rtmaxcache": "128", - "net.inet.tcp.sendspace": "131072", - "net.inet.tcp.keepinit": "75000", - "net.inet.ip.dummynet.max_chain_len": "16", - "net.inet.tcp.rfc1644": "0", - "net.inet.ip.fw.curr_dyn_buckets": "256", - "net.inet.ip.dummynet.ready_heap": "0", - "net.inet.ip.portrange.first": "49152", - "net.inet.tcp.background_io_trigger": "5", - "net.link.ether.inet.host_down_time": "20", - "net.inet6.ipsec6.def_policy": "1", - "net.inet6.ipsec6.ecn": "0", - "net.inet.ip.fastforwarding": "0", - "net.athaddbaignore": "0 0", - "net.inet6.ip6.v6only": "0", - "net.inet.tcp.sack": "1", - "net.inet6.ip6.rtexpire": "3600", - "net.link.ether.inet.proxyall": "0", - "net.inet6.ip6.keepfaith": "0", - "net.key.spi_trycnt": "1000", - "net.link.ether.inet.prune_intvl": "300", - "net.inet.tcp.ecn_initiate_out": "0", - "net.inet.ip.fw.dyn_rst_lifetime": "1", - "net.local.stream.sendspace": "8192", - "net.inet.tcp.socket_unlocked_on_output": "1", - "net.inet.ip.fw.verbose_limit": "0", - "net.local.dgram.recvspace": "4096", - "net.inet.ipsec.debug": "0", - "net.link.ether.inet.log_arp_warnings": "0", - "net.inet.tcp.ecn_negotiate_in": "0", - "net.inet.tcp.rfc3465": "1", - "net.inet.tcp.icmp_may_rst": "1", - "net.link.ether.inet.sendllconflict": "0", - "net.inet.ipsec.ah_offsetmask": "0", - "net.key.blockacq_count": "10", - "net.inet.tcp.delayed_ack": "3", - "net.inet.ip.fw.verbose": "2", - "net.inet.ip.fw.dyn_count": "0", - "net.inet.tcp.slowlink_wsize": "8192", - "net.inet6.ip6.fw.enable": "1", - "net.inet.ip.portrange.hilast": "65535", - "net.inet.icmp.maskrepl": "0", - "net.link.ether.inet.apple_hwcksum_rx": "1", - "net.inet.tcp.drop_synfin": "1", - "net.key.spi_maxval": "268435455", - "net.inet.ipsec.ecn": "0", - "net.inet.ip.fw.dyn_keepalive": "1", - "net.key.int_random": "60", - "net.key.debug": "0", - "net.inet.ip.dummynet.curr_time": "0", - "net.inet.udp.blackhole": "0", - "net.athaggrqmin": "1 1", - "net.athppmenable": "1 1", - "net.inet.ip.fw.dyn_syn_lifetime": "20", - "net.inet.tcp.keepidle": "7200000", - "net.inet6.ip6.tempvltime": "604800", - "net.inet.tcp.recvspace": "358400", - "net.inet.tcp.keepintvl": "75000", - "net.inet.udp.maxdgram": "9216", - "net.inet.ip.maxchainsent": "0", - "net.inet.ipsec.esp_net_deflev": "1", - "net.inet6.icmp6.nd6_useloopback": "1", - "net.inet.tcp.slowstart_flightsize": "1", - "net.inet.ip.fw.debug": "0", - "net.inet.ip.linklocal.in.allowbadttl": "1", - "net.key.spi_minval": "256", - "net.inet.ip.forwarding": "0", - "net.inet.tcp.v6mssdflt": "1024", - "net.key.larval_lifetime": "30", - "net.inet6.ip6.fw.verbose_limit": "0", - "net.inet.ip.dummynet.red_lookup_depth": "256", - "net.inet.tcp.pcbcount": "36", - "net.inet.ip.fw.dyn_ack_lifetime": "300", - "net.inet.ip.portrange.lowlast": "600", - "net.athCCAThreshold": "28 28", - "net.link.ether.inet.useloopback": "1", - "net.athqdepth": "0 0", - "net.inet.ip.ttl": "64", - "net.inet.ip.rtmaxcache": "128", - "net.inet.ipsec.bypass": "0", - "net.inet6.icmp6.nd6_debug": "0", - "net.inet.ip.use_route_genid": "1", - "net.inet6.icmp6.rediraccept": "1", - "net.inet.ip.fw.static_count": "1", - "net.inet6.ip6.fw.debug": "0", - "net.inet.udp.pcbcount": "104", - "net.inet.ipsec.esp_randpad": "-1", - "net.inet6.icmp6.nd6_maxnudhint": "0", - "net.inet.tcp.always_keepalive": "0", - "net.inet.udp.checksum": "1", - "net.link.ether.inet.keep_announcements": "1", - "net.athfixedDropThresh": "150 150", - "net.inet6.ip6.kame_version": "20010528\/apple-darwin", - "net.inet.ip.fw.dyn_max": "4096", - "net.inet.udp.log_in_vain": "0", - "net.inet6.icmp6.nd6_mmaxtries": "3", - "net.inet.ip.rtminexpire": "10", - "net.inet.ip.fw.dyn_buckets": "256", - "net.inet6.ip6.accept_rtadv": "0", - "net.inet6.ip6.rr_prune": "5", - "net.key.ah_keymin": "128", - "net.inet.ip.redirect": "1", - "net.inet.tcp.sack_globalmaxholes": "65536", - "net.inet.ip.keepfaith": "0", - "net.inet.ip.dummynet.expire": "1", - "net.inet.ip.gifttl": "30", - "net.inet.ip.portrange.last": "65535", - "net.inet.ipsec.ah_net_deflev": "1", - "net.inet6.icmp6.nd6_delay": "5", - "net.inet.tcp.packetchain": "50", - "net.inet6.ip6.hdrnestlimit": "50", - "net.inet.tcp.newreno": "0", - "net.inet6.ip6.dad_count": "1", - "net.inet6.ip6.auto_linklocal": "1", - "net.inet6.ip6.temppltime": "86400", - "net.inet.tcp.strict_rfc1948": "0", - "net.athdupie": "1 1", - "net.inet.ip.dummynet.red_max_pkt_size": "1500", - "net.inet.ip.maxfrags": "2048", - "net.inet.tcp.log_in_vain": "0", - "net.inet.tcp.rfc1323": "1", - "net.inet.ip.subnets_are_local": "0", - "net.inet.ip.dummynet.search_steps": "0", - "net.inet.icmp.icmplim": "250", - "net.link.ether.inet.apple_hwcksum_tx": "1", - "net.inet6.icmp6.redirtimeout": "600", - "net.inet.ipsec.ah_cleartos": "1", - "net.inet6.ip6.log_interval": "5", - "net.link.ether.inet.max_age": "1200", - "net.inet.ip.fw.enable": "1", - "net.inet6.ip6.redirect": "1", - "net.athaggrfmax": "28 28", - "net.inet.ip.maxfragsperpacket": "128", - "net.inet6.ip6.use_deprecated": "1", - "net.link.generic.system.dlil_input_sanity_check": "0", - "net.inet.tcp.sack_globalholes": "0", - "net.inet.tcp.reass.cursegments": "0", - "net.inet6.icmp6.nodeinfo": "3", - "net.local.inflight": "0", - "net.inet.ip.dummynet.hash_size": "64", - "net.inet.ip.dummynet.red_avg_pkt_size": "512", - "net.inet.ipsec.dfbit": "0", - "net.inet.tcp.reass.overflows": "0", - "net.inet.tcp.rexmt_thresh": "2", - "net.inet6.ip6.maxfrags": "8192", - "net.inet6.ip6.rtminexpire": "10", - "net.inet6.ipsec6.esp_net_deflev": "1", - "net.inet.tcp.blackhole": "0", - "net.key.esp_keymin": "256", - "net.inet.ip.check_interface": "0", - "net.inet.tcp.minmssoverload": "0", - "net.link.ether.inet.maxtries": "5", - "net.inet.tcp.do_tcpdrain": "0", - "net.inet.ipsec.esp_port": "4500", - "net.inet6.ipsec6.ah_net_deflev": "1", - "net.inet.ip.dummynet.extract_heap": "0", - "net.inet.tcp.path_mtu_discovery": "1", - "net.inet.ip.intr_queue_maxlen": "50", - "net.inet.ipsec.def_policy": "1", - "net.inet.ip.fw.autoinc_step": "100", - "net.inet.ip.accept_sourceroute": "0", - "net.inet.raw.maxdgram": "8192", - "net.inet.ip.maxfragpackets": "1024", - "net.inet.ip.fw.one_pass": "0", - "net.appletalk.routermix": "2000", - "net.inet.tcp.tcp_lq_overflow": "1", - "net.link.generic.system.ifcount": "9", - "net.link.ether.inet.send_conflicting_probes": "1", - "net.inet.tcp.background_io_enabled": "1", - "net.inet6.ipsec6.debug": "0", - "net.inet.tcp.win_scale_factor": "3", - "net.key.natt_keepalive_interval": "20", - "net.inet.tcp.msl": "15000", - "net.inet.ip.portrange.hifirst": "49152", - "net.inet.ipsec.ah_trans_deflev": "1", - "net.inet.tcp.rtt_min": "1", - "net.inet6.ip6.defmcasthlim": "1", - "net.inet6.icmp6.nd6_prune": "1", - "net.inet6.ip6.fw.verbose": "0", - "net.inet.ip.portrange.lowfirst": "1023", - "net.inet.tcp.maxseg_unacked": "8", - "net.local.dgram.maxdgram": "2048", - "net.key.blockacq_lifetime": "20", - "net.inet.tcp.sack_maxholes": "128", - "net.inet6.ip6.maxfragpackets": "1024", - "net.inet6.ip6.use_tempaddr": "0", - "net.athpowermode": "0 0", - "net.inet.udp.recvspace": "73728", - "net.inet.tcp.isn_reseed_interval": "0", - "net.inet.tcp.local_slowstart_flightsize": "8", - "net.inet.ip.dummynet.searches": "0", - "net.inet.ip.intr_queue_drops": "0", - "net.link.generic.system.multi_threaded_input": "1", - "net.inet.raw.recvspace": "8192", - "net.inet.ipsec.esp_trans_deflev": "1", - "net.key.prefered_oldsa": "0", - "net.local.stream.recvspace": "8192", - "net.inet.tcp.sockthreshold": "64", - "net.inet6.icmp6.nd6_umaxtries": "3", - "net.pstimeout": "20 20", - "net.inet.ip.sourceroute": "0", - "net.inet.ip.fw.dyn_short_lifetime": "5", - "net.inet.tcp.minmss": "216", - "net.inet6.ip6.gifhlim": "0", - "net.athvendorie": "1 1", - "net.inet.ip.check_route_selfref": "1", - "net.inet6.icmp6.errppslimit": "100", - "net.inet.tcp.mssdflt": "512", - "net.inet.icmp.log_redirect": "0", - "net.inet6.ipsec6.ah_trans_deflev": "1", - "net.inet6.ipsec6.esp_randpad": "-1", - "net.inet.icmp.drop_redirect": "0", - "net.inet.icmp.timestamp": "0", - "net.inet.ip.random_id": "1" - }, - "interfaces": { - "vmnet1": { - "flags": [ - "UP", - "BROADCAST", - "SMART", - "RUNNING", - "SIMPLEX", - "MULTICAST" - ], - "addresses": [ - { - "broadcast": "192.168.88.255", - "netmask": "255.255.255.0", - "family": "inet", - "address": "192.168.88.1" - }, - { - "family": "lladdr", - "address": "private" - } - ], - "number": "1", - "mtu": "1500", - "type": "vmnet", - "encapsulation": "Ethernet" - }, - "stf0": { - "flags": [ - - ], - "number": "0", - "mtu": "1280", - "type": "stf", - "encapsulation": "6to4" - }, - "vboxnet0": { - "flags": [ - "BROADCAST", - "RUNNING", - "SIMPLEX", - "MULTICAST" - ], - "addresses": [ - { - "family": "lladdr", - "address": "private" - } - ], - "number": "0", - "mtu": "1500", - "type": "vboxnet", - "encapsulation": "Ethernet" - }, - "lo0": { - "flags": [ - "UP", - "LOOPBACK", - "RUNNING", - "MULTICAST" - ], - "addresses": [ - { - "scope": "Link", - "prefixlen": "64", - "family": "inet6", - "address": "fe80::1" - }, - { - "netmask": "255.0.0.0", - "family": "inet", - "address": "127.0.0.1" - }, - { - "scope": "Node", - "prefixlen": "128", - "family": "inet6", - "address": "::1" - }, - { - "scope": "Node", - "prefixlen": "128", - "family": "inet6", - "address": "private" - } - ], - "number": "0", - "mtu": "16384", - "type": "lo", - "encapsulation": "Loopback" - }, - "vboxn": { - "counters": { - "tx": { - "bytes": "0", - "packets": "0", - "collisions": "0", - "compressed": 0, - "carrier": 0, - "drop": 0, - "errors": "0", - "overrun": 0 - }, - "rx": { - "bytes": "0", - "packets": "0", - "compressed": 0, - "drop": 0, - "errors": "0", - "overrun": 0, - "frame": 0, - "multicast": 0 - } - } - }, - "gif0": { - "flags": [ - "POINTOPOINT", - "MULTICAST" - ], - "number": "0", - "mtu": "1280", - "type": "gif", - "encapsulation": "IPIP" - }, - "vmnet": { - "counters": { - "tx": { - "bytes": "0", - "packets": "0", - "collisions": "0", - "compressed": 0, - "carrier": 0, - "drop": 0, - "errors": "0", - "overrun": 0 - }, - "rx": { - "bytes": "0", - "packets": "0", - "compressed": 0, - "drop": 0, - "errors": "0", - "overrun": 0, - "frame": 0, - "multicast": 0 - } - } - }, - "vmnet8": { - "flags": [ - "UP", - "BROADCAST", - "SMART", - "RUNNING", - "SIMPLEX", - "MULTICAST" - ], - "addresses": [ - { - "broadcast": "192.168.237.255", - "netmask": "255.255.255.0", - "family": "inet", - "address": "192.168.237.1" - }, - { - "family": "lladdr", - "address": "private" - } - ], - "number": "8", - "mtu": "1500", - "type": "vmnet", - "encapsulation": "Ethernet" - }, - "en0": { - "status": "inactive", - "flags": [ - "UP", - "BROADCAST", - "SMART", - "RUNNING", - "SIMPLEX", - "MULTICAST" - ], - "addresses": [ - { - "family": "lladdr", - "address": "private" - } - ], - "number": "0", - "mtu": "1500", - "media": { - "supported": [ - { - "autoselect": { - "options": [ - - ] - } - }, - { - "10baseT\/UTP": { - "options": [ - "half-duplex" - ] - } - }, - { - "10baseT\/UTP": { - "options": [ - "full-duplex" - ] - } - }, - { - "10baseT\/UTP": { - "options": [ - "full-duplex", - "hw-loopback" - ] - } - }, - { - "10baseT\/UTP": { - "options": [ - "full-duplex", - "flow-control" - ] - } - }, - { - "100baseTX": { - "options": [ - "half-duplex" - ] - } - }, - { - "100baseTX": { - "options": [ - "full-duplex" - ] - } - }, - { - "100baseTX": { - "options": [ - "full-duplex", - "hw-loopback" - ] - } - }, - { - "100baseTX": { - "options": [ - "full-duplex", - "flow-control" - ] - } - }, - { - "1000baseT": { - "options": [ - "full-duplex" - ] - } - }, - { - "1000baseT": { - "options": [ - "full-duplex", - "hw-loopback" - ] - } - }, - { - "1000baseT": { - "options": [ - "full-duplex", - "flow-control" - ] - } - }, - { - "none": { - "options": [ - - ] - } - } - ], - "selected": [ - { - "autoselect": { - "options": [ - - ] - } - } - ] - }, - "type": "en", - "counters": { - "tx": { - "bytes": "342", - "packets": "0", - "collisions": "0", - "compressed": 0, - "carrier": 0, - "drop": 0, - "errors": "0", - "overrun": 0 - }, - "rx": { - "bytes": "0", - "packets": "0", - "compressed": 0, - "drop": 0, - "errors": "0", - "overrun": 0, - "frame": 0, - "multicast": 0 - } - }, - "encapsulation": "Ethernet" - }, - "en1": { - "status": "active", - "flags": [ - "UP", - "BROADCAST", - "SMART", - "RUNNING", - "SIMPLEX", - "MULTICAST" - ], - "addresses": [ - { - "scope": "Link", - "prefixlen": "64", - "family": "inet6", - "address": "private" - }, - { - "broadcast": "192.168.1.255", - "netmask": "255.255.255.0", - "family": "inet", - "address": "192.168.1.4" - }, - { - "family": "lladdr", - "address": "private" - } - ], - "number": "1", - "mtu": "1500", - "media": { - "supported": [ - { - "autoselect": { - "options": [ - - ] - } - } - ], - "selected": [ - { - "autoselect": { - "options": [ - - ] - } - } - ] - }, - "type": "en", - "counters": { - "tx": { - "bytes": "449206298", - "packets": "7041789", - "collisions": "0", - "compressed": 0, - "carrier": 0, - "drop": 0, - "errors": "95", - "overrun": 0 - }, - "rx": { - "bytes": "13673879120", - "packets": "19966002", - "compressed": 0, - "drop": 0, - "errors": "1655893", - "overrun": 0, - "frame": 0, - "multicast": 0 - } - }, - "arp": { - "192.168.1.7": "private" - }, - "encapsulation": "Ethernet" - }, - "fw0": { - "status": "inactive", - "flags": [ - "UP", - "BROADCAST", - "SMART", - "RUNNING", - "SIMPLEX", - "MULTICAST" - ], - "addresses": [ - { - "family": "lladdr", - "address": "private" - } - ], - "number": "0", - "mtu": "4078", - "media": { - "supported": [ - { - "autoselect": { - "options": [ - "full-duplex" - ] - } - } - ], - "selected": [ - { - "autoselect": { - "options": [ - "full-duplex" - ] - } - } - ] - }, - "type": "fw", - "counters": { - "tx": { - "bytes": "346", - "packets": "0", - "collisions": "0", - "compressed": 0, - "carrier": 0, - "drop": 0, - "errors": "0", - "overrun": 0 - }, - "rx": { - "bytes": "0", - "packets": "0", - "compressed": 0, - "drop": 0, - "errors": "0", - "overrun": 0, - "frame": 0, - "multicast": 0 - } - }, - "encapsulation": "1394" - } - } - }, - "fqdn": "local.local", - "ohai_time": 1240624355.08575, - "domain": "local", - "os": "darwin", - "platform_build": "9G55", - "os_version": "9.6.0", - "hostname": "local", - "macaddress": "private", - "languages": { - "ruby": { - "target_os": "darwin9.0", - "platform": "universal-darwin9.0", - "host_vendor": "apple", - "target_vendor": "apple", - "target_cpu": "i686", - "host_os": "darwin9.0", - "host_cpu": "i686", - "version": "1.8.6", - "host": "i686-apple-darwin9.0", - "target": "i686-apple-darwin9.0", - "release_date": "2008-03-03" - } - } -} diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/subjects/ohai.marshal_dump b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/subjects/ohai.marshal_dump deleted file mode 100644 index 134fcd64b90d3448e817cbe9aa53b856454e6052..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18425 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\/a>"} -{"text":"#mw2 ive seen 1 of these gun, i just cant remember the name, the one on THE OFFICIAL TRAILER BABY, the guns small and peache","created_at":"Mon May 25 01:58:35 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":null,"screen_name":"chrisxchaos","following":null,"utc_offset":null,"created_at":"Sun Mar 15 03:12:36 +0000 2009","friends_count":23,"profile_text_color":"000000","notifications":null,"statuses_count":678,"favourites_count":0,"protected":false,"profile_link_color":"0000ff","location":null,"name":"john","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":null,"profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/224812952\/jason_normal.jpg","id":24478079,"time_zone":null,"followers_count":32},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908226601,"source":"web"} -{"text":"is sunburnt and it's fine by me! :)","created_at":"Mon May 25 01:58:36 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"8B542B","description":"Amateur Photographer","screen_name":"KareinKits","following":null,"utc_offset":-28800,"created_at":"Fri Jan 02 18:50:56 +0000 2009","friends_count":127,"profile_text_color":"333333","notifications":null,"statuses_count":34,"favourites_count":1,"protected":false,"profile_link_color":"9D582E","location":"Vancouver, BC","name":"KareinKits","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/3965121\/_-2.jpg","profile_sidebar_fill_color":"EADEAA","url":"http:\/\/www.karriegomes.wordpress.com","profile_sidebar_border_color":"D9B17E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/69358556\/kcrop_normal.jpeg","id":18559065,"time_zone":"Pacific Time (US & Canada)","followers_count":80},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908226704,"source":"web"} -{"truncated":false,"text":"wondering what the hell is so great about twitter!...nicole what the hell did u get me into????","created_at":"Mon May 25 01:58:36 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":2,"favourites_count":0,"description":"","screen_name":"JaniquePatrice","following":null,"utc_offset":-18000,"created_at":"Mon May 25 01:47:11 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"","name":"Jay Gillman","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":"Quito","followers_count":1,"profile_background_color":"9ae4e8","friends_count":1,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/228929997\/Sunset_normal.jpg","id":42325390,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908226703,"source":"web"} -{"truncated":false,"text":"Started working on a \"Walden\" based gardening experiment http:\/\/bit.ly\/Ic8Kt","created_at":"Mon May 25 01:58:36 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":7,"favourites_count":0,"description":"Vinyl fanatic, linux geek, netbook user, ubuntu user, etc","screen_name":"jfenn2199","following":null,"utc_offset":-21600,"created_at":"Sun May 03 22:53:45 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"Memphis, TN","name":"Joseph Fennell","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":"Central Time (US & Canada)","followers_count":3,"profile_background_color":"9ae4e8","friends_count":4,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/195166772\/1013587246_l_normal.jpg","id":37524635,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908226700,"source":"web"} -{"text":"Day of Rest is so much easier when the next day is a holiday. Oh, and misquito season has begun. Why haven't I built a bat house?","created_at":"Mon May 25 01:58:37 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"080f26","description":"Family, Technology, VW Bus, Nifty Tunes, Gardening, Python, Collaboration, Wordplay, Board Games, Grace. These are some of my favorite things.","screen_name":"ponderings","following":null,"utc_offset":-21600,"created_at":"Sat Apr 14 20:49:15 +0000 2007","friends_count":484,"profile_text_color":"0c1005","notifications":null,"statuses_count":1174,"favourites_count":10,"protected":false,"profile_link_color":"c3b4a2","location":"Wisconsin","name":"Dean Goodmanson","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/3315727\/photo.jpg","profile_sidebar_fill_color":"6e3921","url":"http:\/\/goodmansond.googlepages.com","profile_sidebar_border_color":"ddc80e","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/213473370\/deanlukeavatar2_normal.jpg","id":4634041,"time_zone":"Central Time (US & Canada)","followers_count":285},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908226803,"source":"web"} -{"truncated":false,"text":"is hurt..","created_at":"Mon May 25 01:58:37 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":35,"favourites_count":0,"description":null,"screen_name":"lostinevermore","following":null,"utc_offset":null,"created_at":"Mon Feb 02 05:57:00 +0000 2009","profile_link_color":"1F98C7","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/5068911\/bear76.jpg","profile_sidebar_fill_color":"DAECF4","protected":false,"location":null,"name":"evemore","profile_sidebar_border_color":"C6E2EE","profile_background_tile":false,"url":null,"time_zone":null,"followers_count":13,"profile_background_color":"000000","friends_count":14,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/227974504\/Picture0002__4__normal.jpg","id":19895357,"profile_text_color":"663B12"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908226800,"source":"mobile web<\/a>"} -{"text":"@PiaVeleno I'm sorry. I'll make my retweets better.","created_at":"Mon May 25 01:58:37 +0000 2009","truncated":false,"in_reply_to_user_id":16228556,"user":{"profile_background_color":"EBEBEB","description":"Trevor was born. He hasn't died yet. He likes scotch.","screen_name":"usumcasane","following":null,"utc_offset":-21600,"created_at":"Tue Mar 20 14:04:41 +0000 2007","friends_count":209,"profile_text_color":"333333","notifications":null,"statuses_count":5201,"favourites_count":14,"protected":false,"profile_link_color":"990000","location":"Austin, TX","name":"Trevor Weede","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/6704635\/Domo_fields_1280x1024.jpg","profile_sidebar_fill_color":"F3F3F3","url":null,"profile_sidebar_border_color":"DFDFDF","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/109961316\/ROWR_normal.png","id":1629961,"time_zone":"Central Time (US & Canada)","followers_count":201},"favorited":false,"in_reply_to_screen_name":"PiaVeleno","in_reply_to_status_id":1908178102,"id":1908226801,"source":"TwitterFon<\/a>"} -{"truncated":false,"text":"@adamzea Nice point out on the forward camera! I saw that also and said...No way!!!","created_at":"Mon May 25 01:58:37 +0000 2009","in_reply_to_user_id":18782934,"favorited":false,"user":{"notifications":null,"statuses_count":760,"favourites_count":2,"description":"Accessories For Your Mobile Lifestyle! Windows Phone Accessories","screen_name":"accessory_MOB","following":null,"utc_offset":-18000,"created_at":"Wed Dec 17 02:17:11 +0000 2008","profile_link_color":"092c86","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/12637857\/accessoryMOB_twitter_copy1.jpg","profile_sidebar_fill_color":"ccd5ff","protected":false,"location":"Columbus, Ohio","name":"LAMARCOMMACCESSORIES","profile_sidebar_border_color":"b3bfd6","profile_background_tile":false,"url":"http:\/\/www.lamarcommaccessories.com","time_zone":"Eastern Time (US & Canada)","followers_count":108,"profile_background_color":"4479cf","friends_count":157,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/209388210\/twit_normal.gif","id":18179689,"profile_text_color":"333333"},"in_reply_to_screen_name":"adamzea","in_reply_to_status_id":1907914134,"id":1908226802,"source":"web"} -{"truncated":false,"text":"@chefgui awww.... and just why would you want to hide from me?","created_at":"Mon May 25 01:58:38 +0000 2009","in_reply_to_user_id":26212122,"favorited":false,"user":{"notifications":null,"statuses_count":626,"favourites_count":3,"description":"sometimes less is more","screen_name":"a_tall_blonde","following":null,"utc_offset":-21600,"created_at":"Thu Mar 05 02:47:10 +0000 2009","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/9684806\/pic18.jpg","profile_sidebar_fill_color":"252429","protected":false,"location":"Midwest girl","name":"Becky ","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"url":null,"time_zone":"Central Time (US & Canada)","followers_count":360,"profile_background_color":"1A1B1F","friends_count":310,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/218053250\/Becky007_normal.jpg","id":22868620,"profile_text_color":"666666"},"in_reply_to_screen_name":"chefgui","in_reply_to_status_id":1908173952,"id":1908226900,"source":"TweetDeck<\/a>"} -{"text":"@MBartloff Well, there are other things to compete for. You know I like a challenge","created_at":"Mon May 25 01:58:38 +0000 2009","truncated":false,"in_reply_to_user_id":20624278,"user":{"profile_background_color":"EDECE9","description":"Explore the desire. Experience the passion. Live for love. http:\/\/erotiquepress.com","screen_name":"ErotiquePress","following":null,"utc_offset":-18000,"created_at":"Tue Nov 04 19:06:11 +0000 2008","friends_count":2039,"profile_text_color":"634047","notifications":null,"statuses_count":1443,"favourites_count":5,"protected":false,"profile_link_color":"088253","location":"Maryland","name":"ErotiquePress","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme3\/bg.gif","profile_sidebar_fill_color":"E3E2DE","url":"http:\/\/erotiquepress.blogspot.com","profile_sidebar_border_color":"D3D2CF","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/63584918\/ErotiqueLogo-sm-highjpg_normal.jpg","id":17164598,"time_zone":"Eastern Time (US & Canada)","followers_count":2038},"favorited":false,"in_reply_to_screen_name":"MBartloff","in_reply_to_status_id":1908216368,"id":1908226904,"source":"web"} -{"truncated":false,"text":"Time for the last #INFO406 lecture for this semester (next Monday is a holiday). I can relax for a bit!","created_at":"Mon May 25 01:58:38 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":1555,"favourites_count":54,"description":"University lecturer. Database guru. Fnord. http:\/\/tinyurl.com\/455fu5","screen_name":"nstanger","following":null,"utc_offset":43200,"created_at":"Tue Apr 08 04:55:48 +0000 2008","profile_link_color":"990000","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/4305883\/concurrent.png","profile_sidebar_fill_color":"F3F3F3","protected":false,"location":"Dunedin, New Zealand","name":"Nigel Stanger","profile_sidebar_border_color":"DFDFDF","profile_background_tile":false,"url":"http:\/\/www.stanger.org.nz\/","time_zone":"Auckland","followers_count":108,"profile_background_color":"EBEBEB","friends_count":131,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/222183862\/1229766236-1229766236_normal.png","id":14329707,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908226902,"source":"EventBox<\/a>"} -{"truncated":false,"text":"@JLAC1013 so go to bed, or like you always tell me, a doctor","created_at":"Mon May 25 01:58:38 +0000 2009","in_reply_to_user_id":30492800,"favorited":false,"user":{"notifications":null,"statuses_count":208,"favourites_count":1,"description":"","screen_name":"cumulowx","following":null,"utc_offset":-18000,"created_at":"Wed Apr 22 16:29:50 +0000 2009","profile_link_color":"FF3300","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme6\/bg.gif","profile_sidebar_fill_color":"A0C5C7","protected":false,"location":"","name":"Ben Barrett","profile_sidebar_border_color":"86A4A6","profile_background_tile":false,"url":null,"time_zone":"Eastern Time (US & Canada)","followers_count":9,"profile_background_color":"709397","friends_count":25,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/154892616\/untitled_normal.JPG","id":34318551,"profile_text_color":"333333"},"in_reply_to_screen_name":"JLAC1013","in_reply_to_status_id":1908123355,"id":1908226901,"source":"web"} -{"truncated":false,"text":"satisfy my urge to eat thereby help me lose weight just by drinkin a soda whats the catch? none Quench your appetite TM company slogan try","created_at":"Mon May 25 01:58:38 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":98,"favourites_count":10,"description":"NuVitae Dist. Nationwide sales reps needed. New Unique Fiber Drink taking the US by Storm Medically Significant get yours today","screen_name":"nutaste","following":null,"utc_offset":-18000,"created_at":"Sun May 17 01:55:16 +0000 2009","profile_link_color":"B40B43","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/13460643\/nuvitae_glass.jpg","profile_sidebar_fill_color":"d3e550","protected":false,"location":"Jacksonville, FL","name":"Princess Washington","profile_sidebar_border_color":"CC3366","profile_background_tile":true,"url":"http:\/\/www.mynuvitae.com\/22553","time_zone":"Eastern Time (US & Canada)","followers_count":560,"profile_background_color":"FF6699","friends_count":872,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/217883264\/case_NuVitae_normal.jpg","id":40586177,"profile_text_color":"362720"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908227001,"source":"web"} -{"text":"getting ever so closer to the completion of our new project, \"Blood, Toil, Tears and Sweat: The Saga of World War II\"","created_at":"Mon May 25 01:58:38 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":null,"screen_name":"trampstudios","following":null,"utc_offset":null,"created_at":"Tue May 12 23:51:25 +0000 2009","friends_count":8,"profile_text_color":"000000","notifications":null,"statuses_count":14,"favourites_count":0,"protected":false,"profile_link_color":"0000ff","location":null,"name":"Keenan Powell","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":null,"profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/209303761\/studio_logo_small_normal.jpg","id":39632184,"time_zone":null,"followers_count":2},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908227004,"source":"web"} -{"truncated":false,"text":"Happy Memorial Day : Pedophile killed over 70 children, shocking neww: http:\/\/bit.ly\/QFMpx","created_at":"Mon May 25 01:58:38 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":241,"favourites_count":0,"description":null,"screen_name":"norbieecalmoos","following":null,"utc_offset":null,"created_at":"Sat May 23 15:16:31 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":null,"name":"Norbie Calmos","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":null,"followers_count":28,"profile_background_color":"9ae4e8","friends_count":0,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":42041820,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908227002,"source":"web"} -{"truncated":false,"text":"@B_Wright trying to the same...making moves and tht song will b sent to u by friday! Mastered to ur quality!","created_at":"Mon May 25 01:58:39 +0000 2009","in_reply_to_user_id":18517604,"favorited":false,"user":{"notifications":null,"statuses_count":168,"favourites_count":0,"description":null,"screen_name":"Jay_D1","following":null,"utc_offset":null,"created_at":"Sun Mar 15 07:02:56 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":null,"name":"jelani Whitehorne","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":null,"followers_count":81,"profile_background_color":"9AE4E8","friends_count":209,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/96608511\/jay_d_normal.jpg","id":24498353,"profile_text_color":"000000"},"in_reply_to_screen_name":"B_Wright","in_reply_to_status_id":1902799436,"id":1908227100,"source":"hiptop<\/a>"} -{"truncated":false,"text":"@alexandriamarch Andersen Windows aint got nothing on this team.","in_reply_to_user_id":41620695,"favorited":false,"created_at":"Mon May 25 01:58:39 +0000 2009","in_reply_to_screen_name":"alexandriamarch","in_reply_to_status_id":null,"id":1908227102,"user":{"friends_count":3,"location":null,"utc_offset":null,"profile_text_color":"333333","notifications":null,"statuses_count":2,"favourites_count":0,"following":null,"profile_link_color":"990000","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme7\/bg.gif","description":null,"name":"Chanda Alseth","profile_sidebar_fill_color":"F3F3F3","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/224110031\/chdaa_normal.jpg","created_at":"Fri Feb 06 00:29:51 +0000 2009","profile_sidebar_border_color":"DFDFDF","screen_name":"chandaalseth","profile_background_tile":false,"time_zone":null,"followers_count":4,"id":20205474,"profile_background_color":"EBEBEB","url":null},"source":"web"} -{"truncated":false,"text":"Anyone seen this? Guitar Afficionado magazine launching soon. http:\/\/www.guitaraficionado.com\/ Colbert Platinum for guitarists!","created_at":"Mon May 25 01:58:39 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":1483,"favourites_count":1,"description":"Guitarist and journalist, editor of the I Heart Guitar Blog","screen_name":"iheartguitar","following":null,"utc_offset":36000,"created_at":"Wed Dec 10 05:19:46 +0000 2008","profile_link_color":"d60000","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme7\/bg.gif","profile_sidebar_fill_color":"F3F3F3","protected":false,"location":"Melbourne","name":"Peter Hodgson","profile_sidebar_border_color":"DFDFDF","profile_background_tile":false,"url":"http:\/\/www.iheartguitarblog.com","time_zone":"Melbourne","followers_count":470,"profile_background_color":"ffffff","friends_count":290,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/68949676\/ihg_normal.png","id":18013014,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908227101,"source":"web"} -{"text":"@TrueProgressive no flying beer heh - every1 ws ridiculously nice. but wow after last night their pain was palpable\/was SO much fun","created_at":"Mon May 25 01:58:40 +0000 2009","truncated":false,"in_reply_to_user_id":15176349,"user":{"profile_background_color":"642D8B","description":"loves: new york city, audio production, the mets, the sea, hip hop, my new flowering plants, sleep and stuff that I shouldn't type here i don't even know you. ","screen_name":"katiestereo","following":null,"utc_offset":-18000,"created_at":"Sun Dec 09 17:05:42 +0000 2007","friends_count":125,"profile_text_color":"3D1957","notifications":null,"statuses_count":814,"favourites_count":3,"protected":false,"profile_link_color":"FF0000","location":"New York, NY","name":"Katie ","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/9196304\/000_0150.JPG","profile_sidebar_fill_color":"7AC3EE","url":null,"profile_sidebar_border_color":"65B0DA","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/226031948\/Video_Snapshot-2_normal.jpeg","id":10996862,"time_zone":"Eastern Time (US & Canada)","followers_count":80},"favorited":false,"in_reply_to_screen_name":"TrueProgressive","in_reply_to_status_id":1908066972,"id":1908227201,"source":"web"} -{"truncated":false,"text":"good night everyone!!","in_reply_to_user_id":null,"favorited":false,"created_at":"Mon May 25 01:58:40 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908227203,"user":{"friends_count":37,"location":"Beach (i wish)","utc_offset":-18000,"profile_text_color":"333333","notifications":null,"statuses_count":102,"favourites_count":0,"following":null,"profile_link_color":"0084B4","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/10436546\/Picnik_collage2","description":"The dancing fool! ","name":"Geneva Gerwitz","profile_sidebar_fill_color":"DDFFCC","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/215352599\/Profile_Pic_normal.jpg","created_at":"Tue Apr 21 23:41:21 +0000 2009","profile_sidebar_border_color":"BDDCAD","screen_name":"BeachBabe4Ever","profile_background_tile":true,"time_zone":"Quito","followers_count":17,"id":34093532,"profile_background_color":"9AE4E8","url":null},"source":"web"} -{"truncated":false,"text":"@JennytG13 GOOD! tell me about it later. loll","created_at":"Mon May 25 01:58:40 +0000 2009","in_reply_to_user_id":25602866,"favorited":false,"user":{"notifications":null,"statuses_count":1133,"favourites_count":0,"description":"not black(JK). i go to school. i play the viola. i have a good time. LOL..","screen_name":"stephenjeean","following":null,"utc_offset":-18000,"created_at":"Fri Sep 19 20:26:21 +0000 2008","profile_link_color":"B175BC","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme8\/bg.gif","profile_sidebar_fill_color":"EADEAA","protected":false,"location":"NY","name":"\u265aStephen.","profile_sidebar_border_color":"B175BC","profile_background_tile":false,"url":"http:\/\/us.cyworld.com\/stephenjeean","time_zone":"Eastern Time (US & Canada)","followers_count":44,"profile_background_color":"EBEDDB","friends_count":28,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/120874023\/IMG_2772_normal.JPG","id":16369706,"profile_text_color":"333333"},"in_reply_to_screen_name":"JennytG13","in_reply_to_status_id":1908186177,"id":1908227204,"source":"Tweetie<\/a>"} -{"truncated":false,"text":"@PaulaAbdul thats a good movie!","in_reply_to_user_id":27750488,"favorited":false,"created_at":"Mon May 25 01:58:39 +0000 2009","in_reply_to_screen_name":"PaulaAbdul","in_reply_to_status_id":1908134242,"id":1908227103,"user":{"friends_count":59,"location":"Wy.\/Texas","utc_offset":-21600,"profile_text_color":"3E4415","notifications":null,"statuses_count":191,"favourites_count":0,"following":null,"profile_link_color":"D02B55","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme5\/bg.gif","description":"21 years old. Single. Born and raised in South Texas. Daily blogger. Visit my Myspace page to view my photos,music,blog lists and more @ the web address above.","name":"Krystal aka CHiCHi","profile_sidebar_fill_color":"99CC33","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/214231506\/0506092225-1_1__normal.jpg","created_at":"Wed May 06 05:08:20 +0000 2009","profile_sidebar_border_color":"829D5E","screen_name":"krystaltrev","profile_background_tile":false,"time_zone":"Central Time (US & Canada)","followers_count":30,"id":38119148,"profile_background_color":"352726","url":"http:\/\/www.myspace.com\/krystaltrev"},"source":"web"} -{"truncated":false,"text":"so much good feminism convo tonight. i love these women, they slip me strawberry daquiris.","created_at":"Mon May 25 01:58:40 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":2272,"favourites_count":48,"description":"Narcissistic lesbian. I'm an acquired taste.","screen_name":"raaaaaaek","following":null,"utc_offset":-18000,"created_at":"Tue Mar 17 04:24:59 +0000 2009","profile_link_color":"3ce7d7","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/11481168\/ravenclaww.gif","profile_sidebar_fill_color":"000000","protected":false,"location":"Scranton, Pennsylvania","name":"raek","profile_sidebar_border_color":"ffffff","profile_background_tile":true,"url":"http:\/\/www.facebook.com\/home.php#\/profile.php?id=1264913620&ref=name","time_zone":"Eastern Time (US & Canada)","followers_count":253,"profile_background_color":"000000","friends_count":360,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/226712810\/catch_normal.jpg","id":24838969,"profile_text_color":"a69b9b"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908227200,"source":"mobile web<\/a>"} -{"text":"@RastaGirl86 lol i didnt say anything bad. just boring stuff like \"you sleep?\" or \"what you doing?\"","created_at":"Mon May 25 01:58:40 +0000 2009","truncated":false,"in_reply_to_user_id":27771804,"user":{"profile_background_color":"080502","description":"","screen_name":"FADED_NFiasco","following":null,"utc_offset":-18000,"created_at":"Sun Mar 22 05:15:30 +0000 2009","friends_count":46,"profile_text_color":"000000","notifications":null,"statuses_count":160,"favourites_count":0,"protected":false,"profile_link_color":"a97c60","location":"","name":"Joe NF Jones","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/14313661\/n157700008_30299137_956.jpg","profile_sidebar_fill_color":"56220b","url":null,"profile_sidebar_border_color":"171107","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/220074248\/n157700008_30304501_682_normal.jpg","id":25785033,"time_zone":"Quito","followers_count":72},"favorited":false,"in_reply_to_screen_name":"RastaGirl86","in_reply_to_status_id":1907887196,"id":1908227301,"source":"web"} -{"truncated":false,"text":"@DrRoyster CHUUURRRCH!","in_reply_to_user_id":30710980,"favorited":false,"created_at":"Mon May 25 01:58:40 +0000 2009","in_reply_to_screen_name":"DrRoyster","in_reply_to_status_id":1908208059,"id":1908227300,"user":{"friends_count":349,"location":"\u00dcT: 34.19938,-119.152147","utc_offset":-28800,"profile_text_color":"eb3c2d","notifications":null,"statuses_count":900,"favourites_count":2,"following":null,"profile_link_color":"0084B4","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/5120205\/JSCREEZLOGO1-1.jpg","description":"myspace.com\/jscratch","name":"DJ J SCRATCH","profile_sidebar_fill_color":"DDFFCC","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/85083218\/DjJS1-2-1_normal.jpg","created_at":"Fri Nov 14 21:07:44 +0000 2008","profile_sidebar_border_color":"BDDCAD","screen_name":"JSCRATCH","profile_background_tile":true,"time_zone":"Pacific Time (US & Canada)","followers_count":570,"id":17395847,"profile_background_color":"31e3ed","url":null},"source":"web"} -{"text":"@stanleyhart how do you like it? windows mobile?","created_at":"Mon May 25 01:58:40 +0000 2009","truncated":false,"in_reply_to_user_id":27380302,"user":{"profile_background_color":"9AE4E8","description":"","screen_name":"dannyordinary","following":null,"utc_offset":-21600,"created_at":"Tue Dec 09 01:05:50 +0000 2008","friends_count":56,"profile_text_color":"333333","notifications":null,"statuses_count":526,"favourites_count":0,"protected":false,"profile_link_color":"0084B4","location":"Boston, MA","name":"dannyordinary","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/7369323\/gal.jpg","profile_sidebar_fill_color":"f2f2f2","url":null,"profile_sidebar_border_color":"f2f2f2","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/82530110\/galactus_normal.jpg","id":17979414,"time_zone":"Central Time (US & Canada)","followers_count":64},"favorited":false,"in_reply_to_screen_name":"stanleyhart","in_reply_to_status_id":null,"id":1908227303,"source":"web"} -{"truncated":false,"text":"\u306f\u3089\u304f\u308d\u3068\u96ea\u306e\u8ecd\u670d\u7d75\u3092\u63cf\u3044\u305f\u3093\u3060\u3051\u3069\u3042\u307e\u308a\u306b\u3082\u9762\u767d\u304f\u306a\u304f\u3066\u30a4\u30e9\u30c3\u3068\u3057\u305f\u3002 \u5922\u3092\u898b\u3066\u66f4\u306b\u30a4\u30e9\u30c3\u3068\u3057\u305f\u3002","created_at":"Mon May 25 01:58:41 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":1443,"favourites_count":0,"description":"\u308b\u3093\u308b\u3093","screen_name":"misina","following":null,"utc_offset":32400,"created_at":"Wed Sep 03 16:29:36 +0000 2008","profile_link_color":"088253","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme3\/bg.gif","profile_sidebar_fill_color":"E3E2DE","protected":false,"location":"\u3053\u3053\u3067\u306f\u306a\u3044\u3069\u3063\u304b","name":"\u4e09\u79d1","profile_sidebar_border_color":"D3D2CF","profile_background_tile":false,"url":null,"time_zone":"Tokyo","followers_count":36,"profile_background_color":"EDECE9","friends_count":30,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/211893520\/0000_normal.jpg","id":16115373,"profile_text_color":"634047"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908227400,"source":"movatwitter<\/a>"} -{"truncated":false,"text":"A Cabe\u00e7a de Steve Jobs por R$ 18,20 ... http:\/\/uiop.me\/2w","created_at":"Mon May 25 01:58:41 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":2007,"favourites_count":0,"description":"","screen_name":"claudiofreire","following":null,"utc_offset":-10800,"created_at":"Tue Oct 02 20:16:03 +0000 2007","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"","name":"claudiofreire","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":"http:\/\/www.argohost.net","time_zone":"Brasilia","followers_count":215,"profile_background_color":"FFFFFF","friends_count":151,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/32137742\/DSC00131_normal.JPG","id":9212882,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908227402,"source":"TwitterFox<\/a>"} -{"truncated":false,"text":"North Hills Hospital, mom is there for blocked salavery gland turned to a absese http:\/\/twitgoo.com\/9547","created_at":"Mon May 25 01:58:41 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":2331,"favourites_count":2,"description":"funny shy joker ","screen_name":"txspike","following":null,"utc_offset":-21600,"created_at":"Thu Mar 29 02:25:50 +0000 2007","profile_link_color":"ff0006","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/9332008\/1239903750419.jpg","profile_sidebar_fill_color":"34dce5","protected":false,"location":"6612 Summit Ridge Dr","name":"Mike","profile_sidebar_border_color":"101313","profile_background_tile":false,"url":"http:\/\/www.myspace.com\/warpedtwister","time_zone":"Central Time (US & Canada)","followers_count":103,"profile_background_color":"364344","friends_count":83,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/149334732\/1240253302012_normal.jpg","id":2769821,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908227403,"source":"twitgoo<\/a>"} -{"text":"Favourite movies... Gainsbourg wins actress prize at Cannes fest | pbpulse.com: CANNES, Franc.. http:\/\/tinyurl.com\/pton7o","created_at":"Mon May 25 01:58:41 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9AE4E8","description":"Passionate Traveller, Movie and Sports Fan, Skier, Sailor, Love newest LED HDTVs and Computer technology","screen_name":"ledtvreviewer","following":null,"utc_offset":-25200,"created_at":"Sat May 16 16:14:57 +0000 2009","friends_count":12,"profile_text_color":"333333","notifications":null,"statuses_count":70,"favourites_count":0,"protected":false,"profile_link_color":"0084B4","location":"","name":"Jack Tarsky","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/13651380\/med.jpg","profile_sidebar_fill_color":"DDFFCC","url":"http:\/\/buyledhdtv.com\/","profile_sidebar_border_color":"BDDCAD","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/219819070\/my_pog_normal.jpg","id":40490230,"time_zone":"Mountain Time (US & Canada)","followers_count":21},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908227404,"source":"twitterfeed<\/a>"} -{"text":"is listening to \"\u30cd\u30aa\u30b5\u30e0\u30e9\u30a4\" by Type-Moon from \"Fate\/tiger colosseum ORIGINAL SOUND TRACK[Disc 1]\"","created_at":"Mon May 25 01:58:41 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":"iTunes ust\u4e2d ","screen_name":"popn_ja_itunes","following":null,"utc_offset":32400,"created_at":"Fri May 22 13:21:11 +0000 2009","friends_count":2,"profile_text_color":"000000","notifications":null,"statuses_count":756,"favourites_count":0,"protected":false,"profile_link_color":"0000ff","location":"","name":"popn_ja_itunes","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":"http:\/\/www.ustream.tv\/channel\/popn_ja ","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":41809992,"time_zone":"Tokyo","followers_count":33},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908227401,"source":"web"} -{"truncated":false,"text":"I wanna move to Alaska.","created_at":"Mon May 25 01:58:42 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":3,"favourites_count":0,"description":"","screen_name":"hapeface2","following":null,"utc_offset":-28800,"created_at":"Sat Feb 21 15:27:12 +0000 2009","profile_link_color":"FF0000","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme10\/bg.gif","profile_sidebar_fill_color":"7AC3EE","protected":false,"location":"southern california","name":"ANNIE BLANKS","profile_sidebar_border_color":"65B0DA","profile_background_tile":true,"url":null,"time_zone":"Pacific Time (US & Canada)","followers_count":6,"profile_background_color":"642D8B","friends_count":19,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/81054313\/mee_normal.JPG","id":21492171,"profile_text_color":"3D1957"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908227501,"source":"web"} -{"truncated":false,"text":"so since i didnt answer one phone call im ignoring you? sorry i couldn't talk at the moment.","created_at":"Mon May 25 01:58:42 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":196,"favourites_count":1,"description":"Just talk to me:) I'll make you smile. GUARANTEED. I like following bands. keep in touch. I'll spread the word. ADD ME ON MYSPACE.","screen_name":"RaquelDenise31","following":null,"utc_offset":-25200,"created_at":"Wed Mar 18 14:49:40 +0000 2009","profile_link_color":"D02B55","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme5\/bg.gif","profile_sidebar_fill_color":"99CC33","protected":false,"location":"Albuquerque, NM","name":"Raquel Ware","profile_sidebar_border_color":"829D5E","profile_background_tile":false,"url":"http:\/\/www.myspace.com\/l8ertinkerbell","time_zone":"Mountain Time (US & Canada)","followers_count":44,"profile_background_color":"352726","friends_count":14,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/127497129\/hair_34_normal.jpg","id":25084127,"profile_text_color":"3E4415"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908227502,"source":"txt<\/a>"} -{"text":"yo Mo williams face lol","created_at":"Mon May 25 01:58:42 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"1A1B1F","description":" \u266a \u266b DOPE - MUSiC FiENN !! PAUSE .. \u266a \u266a ","screen_name":"swaqqonpoint","following":null,"utc_offset":-25200,"created_at":"Fri Jan 16 02:31:31 +0000 2009","friends_count":16,"profile_text_color":"666666","notifications":null,"statuses_count":26,"favourites_count":3,"protected":false,"profile_link_color":"2FC2EF","location":"BOSTON,MA","name":"DION AUGUSTIN","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/14307894\/smile_dion.jpg","profile_sidebar_fill_color":"252429","url":"http:\/\/www.facebook.com\/dionaugustin","profile_sidebar_border_color":"181A1E","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/226975742\/sidekick_iphone_normal.jpg","id":19051071,"time_zone":"Mountain Time (US & Canada)","followers_count":21},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908227504,"source":"mobile web<\/a>"} -{"truncated":false,"text":"My xbox is offically dead, dammit","created_at":"Mon May 25 01:58:42 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":6,"favourites_count":0,"description":null,"screen_name":"Nyatic","following":null,"utc_offset":null,"created_at":"Sun May 24 04:33:35 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":null,"name":"Matt Freeman","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":null,"followers_count":4,"profile_background_color":"9ae4e8","friends_count":5,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/228885407\/Croaker_normal.jpg","id":42163935,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908227500,"source":"web"} -{"truncated":false,"text":"My cousin was at the Playboy Mansion last night... and oddly enough, I'm kind of jealous! =D","created_at":"Mon May 25 01:58:42 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":347,"favourites_count":4,"description":"","screen_name":"ginaz1207","following":null,"utc_offset":-21600,"created_at":"Tue Mar 24 18:47:28 +0000 2009","profile_link_color":"990000","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme7\/bg.gif","profile_sidebar_fill_color":"F3F3F3","protected":false,"location":"Texas","name":"Gina Z.","profile_sidebar_border_color":"DFDFDF","profile_background_tile":false,"url":null,"time_zone":"Central Time (US & Canada)","followers_count":54,"profile_background_color":"EBEBEB","friends_count":130,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/228751817\/n194600559_31522061_511259_normal.jpg","id":26295015,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908227503,"source":"web"} -{"truncated":false,"text":"@knealemann I agree on principle but disagree with examples. Do you remember Nazis who died in the name of Hitler?","created_at":"Mon May 25 01:58:43 +0000 2009","in_reply_to_user_id":11774642,"favorited":false,"user":{"notifications":null,"statuses_count":24801,"favourites_count":255,"description":"This is my sandbox. This is where I share myself and things I find online with you. Click the web link to read more about me. Tweet me @ariwriter to converse.","screen_name":"ariherzog","following":null,"utc_offset":-18000,"created_at":"Mon Jun 09 21:02:04 +0000 2008","profile_link_color":"0084B4","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/3452290\/books.jpg","profile_sidebar_fill_color":"dad9ed","protected":false,"location":"Newburyport, MA","name":"Ari Herzog","profile_sidebar_border_color":"BDDCAD","profile_background_tile":true,"url":"http:\/\/tr.im\/MeetAri","time_zone":"Eastern Time (US & Canada)","followers_count":6325,"profile_background_color":"806523","friends_count":186,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/101085639\/Me-Fenway_normal.jpg","id":15065617,"profile_text_color":"027000"},"in_reply_to_screen_name":"knealemann","in_reply_to_status_id":1908160986,"id":1908227601,"source":"TweetDeck<\/a>"} -{"truncated":false,"text":"i basically just ate three shallots, a zucchini, a yellow squash, and a whole box of mushrooms. sometimes get these veggie cravings.","created_at":"Mon May 25 01:58:43 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":768,"favourites_count":0,"description":"stop snap smile","screen_name":"johnsra","following":null,"utc_offset":-18000,"created_at":"Thu Oct 02 02:11:54 +0000 2008","profile_link_color":"9D582E","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/8354823\/2773204885_c3995c839f_b.jpg","profile_sidebar_fill_color":"EADEAA","protected":false,"location":"njny","name":"johnsra","profile_sidebar_border_color":"D9B17E","profile_background_tile":true,"url":"http:\/\/racreations.net","time_zone":"Eastern Time (US & Canada)","followers_count":55,"profile_background_color":"8B542B","friends_count":93,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/72454266\/buddyicon_normal.jpg","id":16553959,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908227603,"source":"TwitterFox<\/a>"} -{"truncated":false,"text":"@doritos4dinner seriously! & don't these ppl realize that I get really excited about new followers? it kills when they're spammers, lol!","in_reply_to_user_id":40183239,"favorited":false,"created_at":"Mon May 25 01:58:43 +0000 2009","in_reply_to_screen_name":"doritos4dinner","in_reply_to_status_id":1908216702,"id":1908227602,"user":{"friends_count":474,"location":"","utc_offset":-18000,"profile_text_color":"000000","notifications":null,"statuses_count":801,"favourites_count":1,"following":null,"profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","description":"Mom, wife, blogger, product reviewer extraordinaire! Want to be featured on my site? DM or email! =)","name":"Amy (the Happy Mom!)","profile_sidebar_fill_color":"e0ff92","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/221410013\/HapyMomAvatar_75_normal.jpg","created_at":"Sun May 17 01:10:33 +0000 2009","profile_sidebar_border_color":"87bc44","screen_name":"HappyMomAmy","profile_background_tile":false,"time_zone":"Eastern Time (US & Canada)","followers_count":477,"id":40579763,"profile_background_color":"9ae4e8","url":"http:\/\/www.makesmomhappy.com"},"source":"web"} -{"in_reply_to_user_id":null,"text":"has the 09-10 hockey season started yet?","favorited":false,"created_at":"Mon May 25 01:58:43 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908227604,"user":{"profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","utc_offset":-21600,"profile_sidebar_fill_color":"252429","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/54231283\/phi_normal.png","following":null,"created_at":"Thu Apr 24 14:36:43 +0000 2008","profile_sidebar_border_color":"181A1E","description":"Live & Studio audio engineer\/mixer with appropriate fails in video! ha.","screen_name":"erawson","name":"Eron Rawson","profile_background_tile":false,"protected":false,"time_zone":"Central Time (US & Canada)","followers_count":115,"profile_background_color":"1A1B1F","friends_count":131,"location":"Wichita, KS","profile_text_color":"666666","id":14512332,"notifications":null,"statuses_count":746,"favourites_count":2,"url":"http:\/\/erawson.tumblr.com"},"truncated":false,"source":"foxytunes<\/a>"} -{"truncated":false,"text":"MLIA","created_at":"Mon May 25 01:58:43 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":300,"favourites_count":0,"description":"Public Relations, MU News Bureau, Mizzou","screen_name":"JeffreyBee","following":null,"utc_offset":-25200,"created_at":"Wed Feb 11 20:22:11 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"Columbia, MO","name":"Jeffrey Beeson","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":"Mountain Time (US & Canada)","followers_count":73,"profile_background_color":"9ae4e8","friends_count":76,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/77404817\/beeson_normal.jpg","id":20623510,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908227702,"source":"web"} -{"truncated":false,"text":"I just hung up on someone clowning lebron. yes, my love is that strong. he's the f*cking best, f*ckyoumean!","created_at":"Mon May 25 01:58:43 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":248,"favourites_count":0,"description":"big mouth and bigger heart.. just kurty baby! never have I been average, how's that working for you??","screen_name":"abrasivevanity","following":null,"utc_offset":-21600,"created_at":"Thu Mar 26 19:47:08 +0000 2009","profile_link_color":"B40B43","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme11\/bg.gif","profile_sidebar_fill_color":"E5507E","protected":false,"location":"where you GO big or go home.","name":"Kurstin K.","profile_sidebar_border_color":"CC3366","profile_background_tile":true,"url":null,"time_zone":"Central Time (US & Canada)","followers_count":45,"profile_background_color":"FF6699","friends_count":85,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/188937445\/kurty_normal.jpg","id":26831293,"profile_text_color":"362720"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908227701,"source":"mobile web<\/a>"} -{"truncated":false,"text":"RT @necolebitchie: @lilduval http:\/\/twitpic.com\/5nmrb - u just killed my soul...again.. http:\/\/myloc.me\/1BPw","created_at":"Mon May 25 01:58:43 +0000 2009","in_reply_to_user_id":9051482,"favorited":false,"user":{"notifications":null,"statuses_count":687,"favourites_count":4,"description":"thesbm.com....coming soon...","screen_name":"choclatecandi30","following":null,"utc_offset":-18000,"created_at":"Mon Feb 09 01:23:03 +0000 2009","profile_link_color":"990000","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme7\/bg.gif","profile_sidebar_fill_color":"F3F3F3","protected":false,"location":"\u00dcT: 33.965476,-84.360634","name":"Candice Epes","profile_sidebar_border_color":"DFDFDF","profile_background_tile":false,"url":"http:\/\/www.facebook.com\/candice epes","time_zone":"Eastern Time (US & Canada)","followers_count":374,"profile_background_color":"EBEBEB","friends_count":1135,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/215551685\/DSCF0119_normal.JPG","id":20406462,"profile_text_color":"333333"},"in_reply_to_screen_name":"necolebitchie","in_reply_to_status_id":1908095432,"id":1908227703,"source":"UberTwitter<\/a>"} -{"truncated":false,"text":"http:\/\/bit.ly\/12u7S8","in_reply_to_user_id":null,"favorited":false,"created_at":"Mon May 25 01:58:44 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908227800,"user":{"friends_count":104,"location":"Earth","utc_offset":-28800,"profile_text_color":"666666","notifications":null,"statuses_count":190,"favourites_count":13,"following":null,"profile_link_color":"1c82e9","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/14361560\/Background_4.jpg","description":"As a designer, writer, artist I think a lot about things that most people don't.","name":"Thayne Madrid","profile_sidebar_fill_color":"afadb8","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/184886097\/Thayne_normal.jpg","created_at":"Sun Apr 26 19:58:56 +0000 2009","profile_sidebar_border_color":"181A1E","screen_name":"ThayneMadrid","profile_background_tile":true,"time_zone":"Pacific Time (US & Canada)","followers_count":83,"id":35548782,"profile_background_color":"ffffff","url":"http:\/\/www.coroflot.com\/thayne"},"source":"web"} -{"truncated":false,"text":"\u5927\u4eba\u3068\u3057\u3066\u3044\u304f\u306a\u3044\u3068\u304a\u3082\u3044\u307e\u3059(\u68d2\u8aad\u307f","created_at":"Mon May 25 01:58:44 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":104,"favourites_count":0,"description":"\u30b5\u30d6\u30ab\u30eb\u306b\u6ca1\u982d\u3002\u30e9\u30b8\u30aa\u8b66\u5bdf\u306b\u5c31\u8077\u3057\u305f\u3044\u3002\u6f2b\u753b\u5bb6\u3092\u76ee\u6307\u3059\u304cG\u30da\u30f3\u306b\u6ce3\u304d\u307e\u3057\u305f\u3002","screen_name":"masammy","following":null,"utc_offset":32400,"created_at":"Thu Apr 23 08:09:03 +0000 2009","profile_link_color":"088253","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme3\/bg.gif","profile_sidebar_fill_color":"E3E2DE","protected":false,"location":"iPhone: 35.918716,139.793106","name":"\u753a\u7530\u753a\u5b50","profile_sidebar_border_color":"D3D2CF","profile_background_tile":false,"url":null,"time_zone":"Tokyo","followers_count":26,"profile_background_color":"EDECE9","friends_count":44,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/180776051\/317270179_ef829640b9_normal.jpg","id":34565422,"profile_text_color":"634047"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908227801,"source":"TwitterFon<\/a>"} -{"truncated":false,"text":"Rela\u00e7\u00f5es exteriores \u00e9 dif\u00edcil, mas os indianos v\u00e3o ter que ouvir!","created_at":"Mon May 25 01:58:44 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":346,"favourites_count":1,"description":"Simplismente, Eu!","screen_name":"PauloLCampos","following":null,"utc_offset":-10800,"created_at":"Fri May 08 17:52:26 +0000 2009","profile_link_color":"084419","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/13447525\/P1010040.JPG","profile_sidebar_fill_color":"75b76c","protected":false,"location":"Brasil","name":"Paulo Leo Campos","profile_sidebar_border_color":"829D5E","profile_background_tile":false,"url":null,"time_zone":"Brasilia","followers_count":288,"profile_background_color":"000000","friends_count":366,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/223169120\/C_pia_de_PC1102728_normal.jpg","id":38709968,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908227802,"source":"web"} -{"truncated":false,"text":"@rinstrummer \u30d3\u30c3\u30af\u30ea\u3059\u308b\u4f4d\u5510\u7a81\u3060\u3051\u3069\u6a2a\u9808\u8cc0\u306b\u4f4f\u307f\u305f\u304f\u306a\u3044\uff1f","created_at":"Mon May 25 01:58:47 +0000 2009","in_reply_to_user_id":20115428,"favorited":false,"user":{"notifications":null,"statuses_count":781,"favourites_count":13,"description":"\u59bb\u4e00\u4eba\u30c1\u30d3\u4e00\u4eba\u3092\u81ea\u5b85\u306b\u5f85\u305f\u305b\u3066\u304a\u308a\u307e\u3059\u306e\u3067\u65e9\u3081\u306b\u5e30\u5b85\u3055\u305b\u3066\u9802\u304d\u307e\u3059","screen_name":"domingo007","following":null,"utc_offset":32400,"created_at":"Mon Feb 18 01:07:24 +0000 2008","profile_link_color":"990000","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/4762747\/unite.gif","profile_sidebar_fill_color":"F3F3F3","protected":false,"location":"iPhone: 35.646667,139.708939","name":"domingo007","profile_sidebar_border_color":"DFDFDF","profile_background_tile":true,"url":"http:\/\/domingoandtheexperience.tumblr.com\/","time_zone":"Tokyo","followers_count":129,"profile_background_color":"EBEBEB","friends_count":86,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/49692632\/rights_scale_logo_normal.gif","id":13603432,"profile_text_color":"333333"},"in_reply_to_screen_name":"rinstrummer","in_reply_to_status_id":1878668349,"id":1908227900,"source":"Tweetie<\/a>"} -{"truncated":false,"text":"Why is it so hot?","created_at":"Mon May 25 01:58:45 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":803,"favourites_count":0,"description":"I'm Katie. I love Harry Potter, Nike kicks, Johnny Cupcakes, &Music. Be My Friend. :)","screen_name":"keiteex3","following":null,"utc_offset":-36000,"created_at":"Wed Jul 16 06:31:24 +0000 2008","profile_link_color":"797272","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/5070397\/Picture7.png","profile_sidebar_fill_color":"3DFF00","protected":false,"location":"Beautiful Hawai'i nei.","name":"Katie K.","profile_sidebar_border_color":"3DFF00","profile_background_tile":true,"url":null,"time_zone":"Hawaii","followers_count":33,"profile_background_color":"FFFFFF","friends_count":129,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/227941040\/Picture_3_normal.png","id":15451281,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908227902,"source":"txt<\/a>"} -{"truncated":false,"text":"Usher - My Boo (w\/ Alicia Keys) - 08:56 PM visit www.RadioTAGr.com\/KATZ to TAG this song","created_at":"Mon May 25 01:58:45 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":566,"favourites_count":0,"description":null,"screen_name":"katzfm","following":null,"utc_offset":null,"created_at":"Sat May 23 00:24:43 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":null,"name":"katzfm","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":null,"followers_count":37,"profile_background_color":"9ae4e8","friends_count":0,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":41935656,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908227901,"source":"web"} -{"truncated":false,"text":"@SPAMponesALL I love them... but I have an idea for a new member of saynow.. and that person should go live on saynow. :)","created_at":"Mon May 25 01:58:45 +0000 2009","in_reply_to_user_id":39763120,"favorited":false,"user":{"notifications":null,"statuses_count":491,"favourites_count":0,"description":"","screen_name":"Jameage","following":null,"utc_offset":-18000,"created_at":"Sat Mar 14 02:33:11 +0000 2009","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","protected":false,"location":"","name":"Jamie Vaughn","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"url":null,"time_zone":"Eastern Time (US & Canada)","followers_count":15,"profile_background_color":"1A1B1F","friends_count":43,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/210466268\/seniorpics_normal.jpg","id":24311825,"profile_text_color":"666666"},"in_reply_to_screen_name":"SPAMponesALL","in_reply_to_status_id":1908202650,"id":1908227903,"source":"web"} -{"text":"@gbelotti pois \u00e9, eu joguei a demo, comprei, fechei, e t\u00f4 quase acabando com os outros modos do jogo <o> V\u00cdCIO, MANO.","created_at":"Mon May 25 01:58:45 +0000 2009","truncated":false,"in_reply_to_user_id":14595322,"user":{"profile_background_color":"0b0a0a","description":"A troubled geek with a big heart and pretty nails.","screen_name":"uberlis","following":null,"utc_offset":-10800,"created_at":"Sun Jul 01 20:21:01 +0000 2007","friends_count":105,"profile_text_color":"2e2e2e","notifications":null,"statuses_count":1144,"favourites_count":2,"protected":false,"profile_link_color":"74394f","location":"","name":"Lissa Capeleto","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/10151910\/background.jpg","profile_sidebar_fill_color":"f0e0ee","url":null,"profile_sidebar_border_color":"242424","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/182937773\/sh_normal.jpg","id":7191052,"time_zone":"Brasilia","followers_count":136},"favorited":false,"in_reply_to_screen_name":"gbelotti","in_reply_to_status_id":1908205256,"id":1908228000,"source":"TwitterFox<\/a>"} -{"text":"Amar? IMPOSS\u00cdVEL definir - e qualquer defini\u00e7\u00e3o \u00e9 limita\u00e7\u00e3o. Dicion\u00e1rios s\u00e3o cadeias de significados. #profundo","created_at":"Mon May 25 01:58:45 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"EDECE9","description":"No milh\u00e3o de caminhos e vias, tento manter minha dire\u00e7\u00e3o: amar e sorrir. ","screen_name":"lutofoli","following":null,"utc_offset":-10800,"created_at":"Thu Aug 14 19:51:52 +0000 2008","friends_count":17,"profile_text_color":"634047","notifications":null,"statuses_count":30,"favourites_count":0,"protected":false,"profile_link_color":"088253","location":"S\u00e3o Paulo","name":"Lucas.! T\u00f3foli Lopes","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme3\/bg.gif","profile_sidebar_fill_color":"E3E2DE","url":null,"profile_sidebar_border_color":"D3D2CF","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/118705464\/DSC09321_normal.JPG","id":15854937,"time_zone":"Brasilia","followers_count":54},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908228002,"source":"web"} -{"text":"\u3055\u3059\u304c\u30de\u30b9\u30b4\u30df\u4eba\u6a29\u306a\u3093\u3066\u30af\u30bd\u98df\u3089\u3048 \u3010\u3061\u30fc\u305f\u3093\u3011","created_at":"Mon May 25 01:58:45 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9a9de8","description":"\u308a\u3093\u3054\u306e\u3072\u3068\u3001\u51f6\u5f92\u306e8bit\u30b9\u30ad\u30fc\u3000\u30d5\u30a1\u30df\u30b3\u30f3\u304c\u30e1\u30a4\u30f3\u3067\u3044\u308d\u3044\u308d\u9b54\u6539\u9020\u3057\u3066\u307e\u3059\u3002","screen_name":"applesorce","following":null,"utc_offset":32400,"created_at":"Thu Nov 22 16:02:16 +0000 2007","friends_count":587,"profile_text_color":"fb0e34","notifications":null,"statuses_count":83989,"favourites_count":362,"protected":false,"profile_link_color":"9578ed","location":"kyoto,Japan","name":"\u3042\u3063\u3077\u308b\u305d\u30fc\u3059","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/1541102\/wall_ygg_logo_l.jpg","profile_sidebar_fill_color":"f7ae6e","url":null,"profile_sidebar_border_color":"bff47b","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/205528099\/painter_sd_kotonoha_normal.jpg","id":10470072,"time_zone":"Tokyo","followers_count":846},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908228003,"source":"\u3061\u30fc\u305f\u3093<\/a>"} -{"text":"@ryanp84: okie dokie. just wanted to extend the invite","created_at":"Mon May 25 01:58:46 +0000 2009","truncated":false,"in_reply_to_user_id":7871822,"user":{"profile_background_color":"642D8B","description":"It's me, what can I say?","screen_name":"sakibebe","following":null,"utc_offset":-18000,"created_at":"Fri May 15 00:16:37 +0000 2009","friends_count":12,"profile_text_color":"3D1957","notifications":null,"statuses_count":93,"favourites_count":0,"protected":false,"profile_link_color":"FF0000","location":"Ohio","name":"Beth Petri","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme10\/bg.gif","profile_sidebar_fill_color":"7AC3EE","url":"http:\/\/myspace.com\/verucasaltseviltwin","profile_sidebar_border_color":"65B0DA","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/214989662\/faire_haire_normal.JPG","id":40127162,"time_zone":"Eastern Time (US & Canada)","followers_count":14},"favorited":false,"in_reply_to_screen_name":"ryanp84","in_reply_to_status_id":null,"id":1908228101,"source":"txt<\/a>"} -{"in_reply_to_user_id":38740666,"text":"@dovevine12 oh yess you do!","favorited":false,"created_at":"Mon May 25 01:58:46 +0000 2009","in_reply_to_screen_name":"dovevine12","in_reply_to_status_id":1908222282,"id":1908228100,"user":{"profile_link_color":"160fc7","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/13578851\/l_00395dba6fd64003ba71044cb36c15a6.jpg","utc_offset":-18000,"profile_sidebar_fill_color":"d1d440","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/224674440\/Photo_7_normal.jpg","following":null,"created_at":"Wed Apr 08 21:37:19 +0000 2009","profile_sidebar_border_color":"4cdbe1","description":"Living my LIFE- SHINING STAR!","screen_name":"shiningCHER","name":"shiningCHER","profile_background_tile":true,"protected":false,"time_zone":"Eastern Time (US & Canada)","followers_count":153,"profile_background_color":"9a21ab","friends_count":89,"location":"New York","profile_text_color":"5a111f","id":29828167,"notifications":null,"statuses_count":2402,"favourites_count":3,"url":"http:\/\/www.royalaccess.blogspot.com"},"truncated":false,"source":"web"} -{"text":"Number one rule: dont answer your phone to your mom when your having sex! haha","created_at":"Mon May 25 01:58:46 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"C6E2EE","description":"I am slowly but surely taking over ","screen_name":"babyruth_t4l","following":null,"utc_offset":-28800,"created_at":"Sat May 23 20:36:40 +0000 2009","friends_count":8,"profile_text_color":"663B12","notifications":null,"statuses_count":4,"favourites_count":1,"protected":false,"profile_link_color":"1F98C7","location":"San Diego","name":"Ruth Moore","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/14348660\/eye.jpg","profile_sidebar_fill_color":"DAECF4","url":"http:\/\/www.myspace.com\/babyruth_t4l","profile_sidebar_border_color":"C6E2EE","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/227356558\/untitled-23_normal.JPG","id":42093015,"time_zone":"Pacific Time (US & Canada)","followers_count":12},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908228104,"source":"web"} -{"text":"Agora s\u00f3 faltam os outros textos. Mas o mais dif\u00edcil e maior j\u00e1 saiu.","created_at":"Mon May 25 01:58:46 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":"Eu como Doritos e fa\u00e7o coisas em geral.","screen_name":"bzirpoli","following":null,"utc_offset":-10800,"created_at":"Mon Mar 03 23:00:25 +0000 2008","friends_count":44,"profile_text_color":"000000","notifications":null,"statuses_count":2849,"favourites_count":0,"protected":false,"profile_link_color":"0000ff","location":"Olinda, PE.","name":"Bernardo Zirpoli","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":null,"profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/51515385\/Eu-e-meu-dedo_Orkut__normal.jpg","id":14075043,"time_zone":"Brasilia","followers_count":67},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908228103,"source":"web"} -{"text":"LMAO! RT @pir8gold: maybe we can get biden to reveal the secret location of obamas birth certificate?? #tcot #gop","created_at":"Mon May 25 01:58:47 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"0099B9","description":"Just another disgruntled right-wing extremist -- or so DHS says.","screen_name":"MidloJo","following":null,"utc_offset":-18000,"created_at":"Wed Apr 22 00:57:06 +0000 2009","friends_count":191,"profile_text_color":"3C3940","notifications":null,"statuses_count":289,"favourites_count":0,"protected":false,"profile_link_color":"0099B9","location":"Midlothian, VA","name":"Jo","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme4\/bg.gif","profile_sidebar_fill_color":"95E8EC","url":"http:\/\/midlojo.blogspot.com","profile_sidebar_border_color":"5ED4DC","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/206351816\/JoBaby_normal.JPG","id":34118232,"time_zone":"Eastern Time (US & Canada)","followers_count":207},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908228201,"source":"web"} -{"truncated":false,"text":"FIRE has broken out at Sydney's Centrepoint Tower, sending a huge cloud of smoke.. http:\/\/tinyurl.com\/rbhcyw (via @carloscomputers)","created_at":"Mon May 25 01:58:47 +0000 2009","in_reply_to_user_id":14322144,"favorited":false,"user":{"notifications":null,"statuses_count":80,"favourites_count":5,"description":"Blogger, commentator, journalist, on anything in FNQ","screen_name":"CairnsBlog","following":null,"utc_offset":36000,"created_at":"Mon Mar 16 03:45:55 +0000 2009","profile_link_color":"0084B4","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/13719108\/Cairns-Blog-logo.jpg","profile_sidebar_fill_color":"DDFFCC","protected":false,"location":"Cairns, Queensland, Australia","name":"Mike Moore","profile_sidebar_border_color":"BDDCAD","profile_background_tile":true,"url":"http:\/\/www.CairnsBlog.net","time_zone":"Brisbane","followers_count":71,"profile_background_color":"9AE4E8","friends_count":134,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/220354726\/Cairns-Blog-logo-sm-tw_normal.jpg","id":24645028,"profile_text_color":"333333"},"in_reply_to_screen_name":"carloscomputers","in_reply_to_status_id":1907124574,"id":1908228200,"source":"Twitterrific<\/a>"} -{"truncated":false,"text":"OMG!!! look at YOUNG JOC'S twitter page!! it is sooosooo hilarius! It dont even sound like thats him. He must got hacked, cuz he trippin!!!","created_at":"Mon May 25 01:58:47 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":8,"favourites_count":0,"description":"i hate being a follower buttt.....im sure following alot of folk. Fooollow meeeeeee!","screen_name":"cheapskatechic","following":null,"utc_offset":-18000,"created_at":"Fri Apr 17 22:37:15 +0000 2009","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","protected":false,"location":"Durry Lane","name":"Lonely Stoner","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"url":"http:\/\/myspace.com\/queenbaqarah","time_zone":"Eastern Time (US & Canada)","followers_count":31,"profile_background_color":"1A1B1F","friends_count":237,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/143513335\/IMG_03873_normal.jpg","id":32632549,"profile_text_color":"666666"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908228204,"source":"web"} -{"truncated":false,"text":"Todos j\u00e1 devem conhecer, mas... Receita de um Ax\u00e9 de Sucesso: http:\/\/bit.ly\/5LPW3","created_at":"Mon May 25 01:58:47 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":95,"favourites_count":0,"description":"Uma pessoa apaixonada por filosofia e por tecnologia","screen_name":"dandidier","following":null,"utc_offset":-10800,"created_at":"Wed Apr 15 01:03:40 +0000 2009","profile_link_color":"56abe6","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/9167464\/sunflowe.jpg","profile_sidebar_fill_color":"E3E2DE","protected":false,"location":"Rio de Janeiro","name":"Daniela Didier ","profile_sidebar_border_color":"D3D2CF","profile_background_tile":false,"url":"http:\/\/didier.zip.net\/","time_zone":"Brasilia","followers_count":324,"profile_background_color":"e7c96f","friends_count":472,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/146951013\/fotoeu_normal.jpg","id":31289296,"profile_text_color":"634047"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908228202,"source":"web"} -{"text":"yaaaay found Horatio","created_at":"Mon May 25 01:58:47 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"FFEBF6","description":"Eclectically eccentric squirrel who just happens to know how to type","screen_name":"squirrelyTONKS","following":null,"utc_offset":-25200,"created_at":"Thu May 01 02:21:59 +0000 2008","friends_count":98,"profile_text_color":"F523A1","notifications":null,"statuses_count":2779,"favourites_count":14,"protected":false,"profile_link_color":"AB0769","location":"Lothelien","name":"squirrelyTONKS","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/4964201\/pinkbubbles.png","profile_sidebar_fill_color":"FAA0D7","url":"http:\/\/www.youtube.com\/user\/squirrelytonks","profile_sidebar_border_color":"FAA0D7","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/135443092\/stampsquirrel_normal.jpg","id":14609242,"time_zone":"Mountain Time (US & Canada)","followers_count":143},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908228303,"source":"twhirl<\/a>"} -{"text":"@kelvinringold your not following me.","created_at":"Mon May 25 01:58:47 +0000 2009","truncated":false,"in_reply_to_user_id":13253502,"user":{"profile_background_color":"9cff66","description":"Carwash Magazine ad Sales, Marketing, Creativeness, Junior League member, being artsy, walking, USMS Swim, people connecting","screen_name":"ckinney","following":null,"utc_offset":-28800,"created_at":"Thu Oct 16 05:25:36 +0000 2008","friends_count":356,"profile_text_color":"1d1702","notifications":null,"statuses_count":4492,"favourites_count":250,"protected":false,"profile_link_color":"0b14b4","location":"West Coast","name":"Cheryl Kinney","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/12516021\/tile_bubblesandblue.gif","profile_sidebar_fill_color":"2abfd5","url":"http:\/\/www.washtrends.com","profile_sidebar_border_color":"f46696","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/150781336\/P1000114_normal.JPG","id":16803018,"time_zone":"Pacific Time (US & Canada)","followers_count":330},"favorited":false,"in_reply_to_screen_name":"kelvinringold","in_reply_to_status_id":1908112068,"id":1908228302,"source":"web"} -{"text":"Hey can you do me a favour, take a pic of yourself & send me it, I'm playin cards & I'm missin the joker!!","created_at":"Mon May 25 01:58:47 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"000000","description":"Integrity is telling myself the truth. And honesty is telling the truth to other people.","screen_name":"baztittenhurst","following":null,"utc_offset":36000,"created_at":"Sat May 16 23:27:12 +0000 2009","friends_count":725,"profile_text_color":"333333","notifications":null,"statuses_count":413,"favourites_count":1,"protected":false,"profile_link_color":"3d8e33","location":"Sydney","name":"Barry Tittenhurst","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/13391827\/Twitter_bg.jpg","profile_sidebar_fill_color":"bdd7a3","url":"http:\/\/www.barrytittenhurst.com\/","profile_sidebar_border_color":"749c49","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/217153192\/barry_photo_1_normal.jpg","id":40564555,"time_zone":"Sydney","followers_count":806},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908228304,"source":"web"} -{"in_reply_to_user_id":null,"text":"Best offers and deals at Haven Holidays - Late Deals Tourers 4 Night June Breaks http:\/\/ow.ly\/903v","favorited":false,"created_at":"Mon May 25 01:58:47 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908228301,"user":{"profile_link_color":"0099B9","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme4\/bg.gif","utc_offset":null,"profile_sidebar_fill_color":"95E8EC","profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","following":null,"created_at":"Sun May 10 03:32:57 +0000 2009","profile_sidebar_border_color":"5ED4DC","description":"","screen_name":"savercode","name":"SaverCode UK","profile_background_tile":false,"protected":false,"time_zone":null,"followers_count":39,"profile_background_color":"0099B9","friends_count":2,"location":"","profile_text_color":"3C3940","id":38987901,"notifications":null,"statuses_count":535,"favourites_count":0,"url":"http:\/\/www.savercode.co.uk"},"truncated":false,"source":"HootSuite<\/a>"} -{"truncated":false,"text":"#3drunkwords My Gurl Home :-&","created_at":"Mon May 25 01:58:48 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":76,"favourites_count":0,"description":"5'6 nice size dicc... i come after the money like Wednesday come after Tuesday lol luv 2 joke aroud & fucc otha niggaz hoez","screen_name":"Dmnq_powell","following":null,"utc_offset":-28800,"created_at":"Sun May 17 01:00:40 +0000 2009","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","protected":false,"location":"Portland Oregon","name":"Dominique Powell","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"url":"http:\/\/myspace.com\/d_boi87","time_zone":"Pacific Time (US & Canada)","followers_count":7,"profile_background_color":"1A1B1F","friends_count":11,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/216221179\/Picture_214__2__normal.jpg","id":40578309,"profile_text_color":"666666"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908228402,"source":"web"} -{"in_reply_to_user_id":null,"text":"Se vc curte M\u00fasica, visite a Music Online e conhe\u00e7a: kaszas em http:\/\/bit.ly\/183iEe","favorited":false,"created_at":"Mon May 25 01:58:48 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908228400,"user":{"profile_link_color":"0099B9","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme4\/bg.gif","utc_offset":-10800,"profile_sidebar_fill_color":"95E8EC","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/56373798\/twitter-foto_normal.gif","following":null,"created_at":"Tue Jul 08 22:39:41 +0000 2008","profile_sidebar_border_color":"5ED4DC","description":"Desde 1998 O Ba\u00fa musical da web brasileira. Encontre m\u00fasica, divulgue o seu trabalho!!!","screen_name":"musiconlinebr","name":"Music Online Records","profile_background_tile":false,"protected":false,"time_zone":"Brasilia","followers_count":220,"profile_background_color":"0099B9","friends_count":222,"location":"Curitiba, Brasil","profile_text_color":"3C3940","id":15359189,"notifications":null,"statuses_count":384,"favourites_count":2,"url":"http:\/\/www.musiconline.com.br"},"truncated":false,"source":"web"} -{"text":"@infinitecycle I just figured id tell u incase u aint already know! ya dope @ what u do kid and its always apleasure to work wit u","created_at":"Mon May 25 01:58:48 +0000 2009","truncated":false,"in_reply_to_user_id":16280884,"user":{"profile_background_color":"1A1B1F","description":"everything your favorite rapper used to be on steriods! way more than 160 characters can explain","screen_name":"Didagod","following":null,"utc_offset":-18000,"created_at":"Sun Dec 21 03:23:58 +0000 2008","friends_count":168,"profile_text_color":"666666","notifications":null,"statuses_count":2335,"favourites_count":0,"protected":false,"profile_link_color":"2FC2EF","location":"BROOKLYN","name":"Didagod","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","url":"http:\/\/www.myspace.com\/didagod","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/68523557\/IMG00149_normal.JPG","id":18278158,"time_zone":"Eastern Time (US & Canada)","followers_count":170},"favorited":false,"in_reply_to_screen_name":"InfiniteCycle","in_reply_to_status_id":null,"id":1908228403,"source":"mobile web<\/a>"} -{"truncated":false,"text":"@deLaCupcake woooooo! Just in time to see tha 2nd half!","created_at":"Mon May 25 01:58:49 +0000 2009","in_reply_to_user_id":17967150,"favorited":false,"user":{"notifications":null,"statuses_count":1214,"favourites_count":0,"description":"One of the nicest guys u cud ever meet!","screen_name":"TrackstarGIBSON","following":null,"utc_offset":-18000,"created_at":"Sun Apr 12 01:32:22 +0000 2009","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","protected":false,"location":"Columbus, OH","name":"Michael Gibson","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"url":null,"time_zone":"Eastern Time (US & Canada)","followers_count":142,"profile_background_color":"1A1B1F","friends_count":132,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/198679699\/n7A52i02_normal","id":30571809,"profile_text_color":"666666"},"in_reply_to_screen_name":"deLaCupcake","in_reply_to_status_id":1908207484,"id":1908228503,"source":"twidroid<\/a>"} -{"text":"Playing the Veronicas \"latest\" offerings! Love 'em both even though IDK which is which! xD","created_at":"Mon May 25 01:58:49 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"dedede","description":"Who am I? That's one secret I'll never tell. You know you love me, XOXO Gossip Guy. ;D","screen_name":"ThePradaDevil","following":null,"utc_offset":0,"created_at":"Mon Aug 11 00:36:18 +0000 2008","friends_count":124,"profile_text_color":"6B6B6B","notifications":null,"statuses_count":4226,"favourites_count":18,"protected":false,"profile_link_color":"3d3d3d","location":"New York City - Ha! I wish!","name":"Robert Bond-Morrison","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/3464215\/bg_judyzebra.jpg","profile_sidebar_fill_color":"ffffff","url":"http:\/\/www.petakillsanimals.com","profile_sidebar_border_color":"d1d1d1","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/99805165\/ouch_normal.png","id":15803080,"time_zone":"London","followers_count":176},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908228501,"source":"DestroyTwitter<\/a>"} -{"text":"Is ready for golf tomorrow","created_at":"Mon May 25 01:58:49 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":"I like to play golf and poker.","screen_name":"boomerbrawley","following":null,"utc_offset":-21600,"created_at":"Sun May 17 21:17:38 +0000 2009","friends_count":153,"profile_text_color":"000000","notifications":null,"statuses_count":30,"favourites_count":6,"protected":false,"profile_link_color":"0000ff","location":"Everywhere","name":"Michael Brawley","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":null,"profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":40739067,"time_zone":"Central Time (US & Canada)","followers_count":40},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908228500,"source":"TwitterFon<\/a>"} -{"truncated":false,"text":"@ExoticJO lmao princess james..classic lmfao","created_at":"Mon May 25 01:58:49 +0000 2009","in_reply_to_user_id":27825282,"favorited":false,"user":{"notifications":null,"statuses_count":658,"favourites_count":1,"description":"First artist of SupaNatural Music Group","screen_name":"YoungDedication","following":null,"utc_offset":-18000,"created_at":"Tue Mar 10 21:54:53 +0000 2009","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/12555461\/myspace2.jpg","profile_sidebar_fill_color":"252429","protected":false,"location":"Orlando","name":"Levi J. W.","profile_sidebar_border_color":"181A1E","profile_background_tile":true,"url":"http:\/\/myspace.com\/blackmanup2","time_zone":"Eastern Time (US & Canada)","followers_count":94,"profile_background_color":"1A1B1F","friends_count":134,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/208533926\/myspace1_normal.jpg","id":23665701,"profile_text_color":"666666"},"in_reply_to_screen_name":"ExoticJO","in_reply_to_status_id":1908208940,"id":1908228502,"source":"web"} -{"truncated":false,"text":"@jbo002 yeah that's a pretty good one","created_at":"Mon May 25 01:58:49 +0000 2009","in_reply_to_user_id":35946682,"favorited":false,"user":{"notifications":null,"statuses_count":266,"favourites_count":8,"description":"","screen_name":"wavemike","following":null,"utc_offset":-21600,"created_at":"Mon Feb 02 17:34:32 +0000 2009","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","protected":false,"location":"Texas","name":"Mike Fassetta","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"url":null,"time_zone":"Central Time (US & Canada)","followers_count":24,"profile_background_color":"1A1B1F","friends_count":29,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/185074825\/DSC00402_normal.JPG","id":19918168,"profile_text_color":"666666"},"in_reply_to_screen_name":"jbo002","in_reply_to_status_id":1904455908,"id":1908228504,"source":"Twitterrific<\/a>"} -{"text":"@osangmeister i know. haha. haha. forgot to share it here.","created_at":"Mon May 25 01:58:50 +0000 2009","truncated":false,"in_reply_to_user_id":17240352,"user":{"profile_background_color":"ffffff","description":"i think i am a busy bee.","screen_name":"PENACOCOLADA","following":null,"utc_offset":-32400,"created_at":"Tue May 12 12:41:40 +0000 2009","friends_count":22,"profile_text_color":"000000","notifications":null,"statuses_count":68,"favourites_count":1,"protected":false,"profile_link_color":"6e6868","location":"anywhere under the hott sun","name":"Pen Pe\u00f1a","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/12650168\/images-1.jpeg","profile_sidebar_fill_color":"fff605","url":null,"profile_sidebar_border_color":"a8151d","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/208454329\/IMG-3006_normal.JPG","id":39489925,"time_zone":"Alaska","followers_count":19},"favorited":false,"in_reply_to_screen_name":"osangmeister","in_reply_to_status_id":1902218153,"id":1908228601,"source":"web"} -{"truncated":false,"text":"@michellevidal it's a twitternation :)","created_at":"Mon May 25 01:58:50 +0000 2009","in_reply_to_user_id":27375992,"favorited":false,"user":{"notifications":null,"statuses_count":81,"favourites_count":1,"description":"","screen_name":"jayloveee","following":null,"utc_offset":-28800,"created_at":"Tue Apr 28 04:01:28 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"","name":"Jackielou Domantay","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":"http:\/\/www.myspace.com\/jackie_lou","time_zone":"Pacific Time (US & Canada)","followers_count":20,"profile_background_color":"9ae4e8","friends_count":21,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/187765968\/l_e61165814f4e6eaa214d8e6f8366ef5e_normal.jpg","id":35982454,"profile_text_color":"000000"},"in_reply_to_screen_name":"michellevidal","in_reply_to_status_id":null,"id":1908228602,"source":"TwitterFon<\/a>"} -{"truncated":false,"text":"On The Block http:\/\/tr.im\/mijX","in_reply_to_user_id":null,"favorited":false,"created_at":"Mon May 25 01:58:50 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908228604,"user":{"friends_count":573,"location":"Middle Earth","utc_offset":-32400,"profile_text_color":"3C3940","notifications":null,"statuses_count":4644,"favourites_count":2,"following":null,"profile_link_color":"0099B9","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/4671397\/200826112428-10825.jpg","description":"Delicious RPG Links from Kira the Sorceress","name":"Del-RPG","profile_sidebar_fill_color":"95E8EC","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/71988323\/amg3_fr1_normal.gif","created_at":"Mon Jan 19 21:43:27 +0000 2009","profile_sidebar_border_color":"5ED4DC","screen_name":"del_rpg","profile_background_tile":false,"time_zone":"Alaska","followers_count":568,"id":19203775,"profile_background_color":"0099B9","url":"http:\/\/delicious.com\/tag\/rpg"},"source":"twitterfeed<\/a>"} -{"truncated":false,"text":"Wanna do something important...","created_at":"Mon May 25 01:58:50 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":6,"favourites_count":0,"description":"Someone trying to figure out this life.","screen_name":"ZaiaMaioli","following":null,"utc_offset":-10800,"created_at":"Thu Apr 02 22:33:23 +0000 2009","profile_link_color":"ff0091","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme10\/bg.gif","profile_sidebar_fill_color":"e5b8ff","protected":false,"location":"Brazil","name":"Ros\u00e1lia Maioli","profile_sidebar_border_color":"7b3e89","profile_background_tile":true,"url":null,"time_zone":"Brasilia","followers_count":5,"profile_background_color":"642D8B","friends_count":10,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/119286562\/DSC00265_normal.JPG","id":28436839,"profile_text_color":"3D1957"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908228603,"source":"web"} -{"truncated":false,"text":"@scrubbybubbles Cool! Ill check it Out!","created_at":"Mon May 25 01:58:50 +0000 2009","in_reply_to_user_id":14307387,"favorited":false,"user":{"notifications":null,"statuses_count":828,"favourites_count":0,"description":"a 27 year old male, that loves computers, WWE and loves God!","screen_name":"MavManager2000","following":null,"utc_offset":-21600,"created_at":"Fri Mar 02 02:34:50 +0000 2007","profile_link_color":"9D582E","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme8\/bg.gif","profile_sidebar_fill_color":"EADEAA","protected":false,"location":"Pearsall, Texas","name":"John Herrera","profile_sidebar_border_color":"D9B17E","profile_background_tile":false,"url":"http:\/\/www.myspace.com\/mavmanager2000","time_zone":"Central Time (US & Canada)","followers_count":85,"profile_background_color":"8B542B","friends_count":87,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/77233858\/me_with_shades_normal.jpg","id":805055,"profile_text_color":"333333"},"in_reply_to_screen_name":"scrubbybubbles","in_reply_to_status_id":1908141930,"id":1908228600,"source":"twhirl<\/a>"} -{"truncated":false,"text":"so many great things to read! love thedailygreen.com","created_at":"Mon May 25 01:58:50 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":29,"favourites_count":0,"description":"Keeping you updated on what's going on in Park City, Utah!","screen_name":"destinationpc","following":null,"utc_offset":-25200,"created_at":"Tue Apr 07 02:17:10 +0000 2009","profile_link_color":"75399d","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/8070866\/twitter_background_fall.jpg","profile_sidebar_fill_color":"A0C5C7","protected":false,"location":"Park City, Utah","name":"Destination ParkCity","profile_sidebar_border_color":"86A4A6","profile_background_tile":false,"url":"http:\/\/destinationparkcity.blogspot.com","time_zone":"Mountain Time (US & Canada)","followers_count":119,"profile_background_color":"709397","friends_count":190,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/211130537\/twitter_winter_normal.jpg","id":29355469,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908228704,"source":"web"} -{"text":"\uc544\uce68\uc5d0 \ube14\ub85c\uadf8\uac00 \ud2b8\ub798\ud53d \ucf69\uc54c\ud0c4\uc744 \ub9de\uace0 \uc788\uc5b4\uc11c \uc720\uc785\uacbd\ub85c \ubd24\ub354\ub2c8 '\ub370\ubbf8 \ubb34\uc5b4'\uac00 \uc88c\ub77c\ub77d. \uc6d0\uc778\uc740 http:\/\/bit.ly\/pzdAK","created_at":"Mon May 25 01:58:50 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"ffffff","description":"Common sense is the collection of prejudices by age 18. - Albert Einstein","screen_name":"odlinuf","following":null,"utc_offset":32400,"created_at":"Tue Dec 09 12:43:17 +0000 2008","friends_count":153,"profile_text_color":"222222","notifications":null,"statuses_count":1726,"favourites_count":7,"protected":false,"profile_link_color":"3978ec","location":"Seoul","name":"odlinuf","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/14286867\/twitter-profile.png","profile_sidebar_fill_color":"ffffff","url":"http:\/\/oddlyenough.kr","profile_sidebar_border_color":"f6f6f6","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/190172155\/profile_normal.jpg","id":17990220,"time_zone":"Seoul","followers_count":170},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908228702,"source":"web"} -{"text":"RT @fourzerotwo: http:\/\/zz.gd\/235764 - The first Modern Warfare 2 Trailer IS LIVE!! Watch it in all it's HD glory and uncut form! #MW2","created_at":"Mon May 25 01:58:50 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"1A1B1F","description":"Writer for 411mania games.","screen_name":"adamantlee","following":null,"utc_offset":-21600,"created_at":"Mon Jan 19 05:07:54 +0000 2009","friends_count":234,"profile_text_color":"666666","notifications":null,"statuses_count":381,"favourites_count":0,"protected":false,"profile_link_color":"2FC2EF","location":"Illinois","name":"Adam Larck","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","url":"http:\/\/411mania.com","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/71848888\/avatarpic-l_normal.jpg","id":19173065,"time_zone":"Central Time (US & Canada)","followers_count":144},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908228700,"source":"twhirl<\/a>"} -{"truncated":false,"text":"watching the magic game at a bar in coral springs..no one cares here..no cheers for either side..i want to smack the guy next to me.","created_at":"Mon May 25 01:58:50 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":143,"favourites_count":0,"description":"I write songs, record them, and then bring them to a town near you. Other than that, I just enjoy being alive because that's very underrated these days.","screen_name":"johnwfrank","following":null,"utc_offset":-18000,"created_at":"Wed Mar 11 04:48:15 +0000 2009","profile_link_color":"060ea7","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/8225439\/Fall_Tour_2008_027__Small___2_.jpg","profile_sidebar_fill_color":"d9ffcc","protected":false,"location":"Orlando, Fl","name":"John Frank","profile_sidebar_border_color":"09090b","profile_background_tile":true,"url":"http:\/\/Facebook: http:\/\/www.facebook.com\/home.php#\/pages\/John-Frank\/17987783964","time_zone":"Quito","followers_count":78,"profile_background_color":"24314c","friends_count":221,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/92555176\/Fall_Tour_2008_027__Small__normal.jpg","id":23724253,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908228703,"source":"mobile web<\/a>"} -{"truncated":false,"text":"@lorimcgill you ARE a little hippie child. :)","created_at":"Mon May 25 01:58:51 +0000 2009","in_reply_to_user_id":26863992,"favorited":false,"user":{"notifications":null,"statuses_count":738,"favourites_count":1,"description":"19. Actress. Model. Writer. Dreamer.","screen_name":"cortniegarrett","following":null,"utc_offset":-21600,"created_at":"Sat Oct 04 06:02:19 +0000 2008","profile_link_color":"009984","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/11884237\/crown.jpg","profile_sidebar_fill_color":"dfece5","protected":false,"location":"Broken Arrow, Oklahoma","name":"Cortnie Garrett","profile_sidebar_border_color":"DFDFDF","profile_background_tile":true,"url":null,"time_zone":"Central Time (US & Canada)","followers_count":48,"profile_background_color":"fefbfb","friends_count":45,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/228846541\/window_crop_normal.png","id":16589017,"profile_text_color":"0a0000"},"in_reply_to_screen_name":"lorimcgill","in_reply_to_status_id":1908184083,"id":1908228804,"source":"twidroid<\/a>"} -{"in_reply_to_user_id":null,"text":"amare yeah via NBA on http:\/\/www.tnt.tv\/sports\/nba\/playoffs09","favorited":false,"created_at":"Mon May 25 01:58:51 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908228802,"user":{"profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","utc_offset":null,"profile_sidebar_fill_color":"e0ff92","profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","following":null,"created_at":"Mon May 18 01:49:46 +0000 2009","profile_sidebar_border_color":"87bc44","description":null,"screen_name":"Vogiatzis24","name":"Steven Vogiatzis","profile_background_tile":false,"protected":false,"time_zone":null,"followers_count":5,"profile_background_color":"9ae4e8","friends_count":20,"location":null,"profile_text_color":"000000","id":40786046,"notifications":null,"statuses_count":25,"favourites_count":0,"url":null},"truncated":false,"source":"NBA Eastern Conference Finals<\/a>"} -{"text":"Saturday night we saw Blythe Spirit with Angela Lansbury - very funny - good play. I adore live theatre.","created_at":"Mon May 25 01:58:51 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9AE4E8","description":"Medical Intuitive, health expert and best selling author of The Body \u201cKnows,\u201d books published by Hay House. Vast clinical background in environmental medicine.","screen_name":"thebodyknows","following":null,"utc_offset":-28800,"created_at":"Tue Apr 21 23:03:14 +0000 2009","friends_count":1441,"profile_text_color":"333333","notifications":null,"statuses_count":128,"favourites_count":0,"protected":false,"profile_link_color":"0084B4","location":"Bellingham, WA","name":"Caroline Sutherland","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/11655979\/background001.jpg","profile_sidebar_fill_color":"f0ccff","url":"http:\/\/www.carolinesutherland.com","profile_sidebar_border_color":"470b1d","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/198562262\/caroline_normal.jpg","id":34080819,"time_zone":"Pacific Time (US & Canada)","followers_count":1242},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908228801,"source":"web"} -{"text":"Hmmm new Mitsubishi HD flat-screen and the Kia commercial is the best looking thing I've seen on it yet... Coincidence? \ue405","created_at":"Mon May 25 01:58:51 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"352726","description":"","screen_name":"Kris_hansen","following":null,"utc_offset":-21600,"created_at":"Mon Aug 04 18:35:05 +0000 2008","friends_count":17,"profile_text_color":"3E4415","notifications":null,"statuses_count":1421,"favourites_count":0,"protected":false,"profile_link_color":"D02B55","location":"Dallas, TX","name":"BlckBenz","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme5\/bg.gif","profile_sidebar_fill_color":"99CC33","url":null,"profile_sidebar_border_color":"829D5E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/68846113\/download_normal.JPG","id":15725830,"time_zone":"Central Time (US & Canada)","followers_count":43},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908228800,"source":"Twinkle<\/a>"} -{"text":"were not in the championships. : (","created_at":"Mon May 25 01:58:52 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"642D8B","description":"I'm a girl in 5th grade. I love to play soccer, knit, and make people laugh. I'm pretty much the biggest Selena Gomez fan ever!","screen_name":"skiilightnin28","following":null,"utc_offset":-21600,"created_at":"Tue May 12 19:35:28 +0000 2009","friends_count":5,"profile_text_color":"3D1957","notifications":null,"statuses_count":26,"favourites_count":0,"protected":false,"profile_link_color":"FF0000","location":"Illinois","name":"Mikaela K.","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme10\/bg.gif","profile_sidebar_fill_color":"7AC3EE","url":null,"profile_sidebar_border_color":"65B0DA","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/216672996\/Rainbow_Eye_normal.jpg","id":39575677,"time_zone":"Central Time (US & Canada)","followers_count":6},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908228901,"source":"web"} -{"text":"Ever Wish You Knew How To Use Google Adwords, But Always Thought It Was Too Hard? http:\/\/aristeo.freeppcleads.com","created_at":"Mon May 25 01:58:52 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9AE4E8","description":"Emprendedor de Negocios Multinivel, negocios desde casa.","screen_name":"flujodeingresos","following":null,"utc_offset":-25200,"created_at":"Thu Jan 01 20:50:57 +0000 2009","friends_count":220,"profile_text_color":"333333","notifications":null,"statuses_count":335,"favourites_count":0,"protected":false,"profile_link_color":"0084B4","location":"San Antonio, Texas, USA","name":"flujodeingresos","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/3753434\/kyanilogotwiter.jpg","profile_sidebar_fill_color":"DDFFCC","url":"http:\/\/flujodeingresos.com","profile_sidebar_border_color":"BDDCAD","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/69255753\/migari1a_normal.jpg","id":18535776,"time_zone":"Mountain Time (US & Canada)","followers_count":209},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908228900,"source":"web"} -{"truncated":false,"text":"@yungstreetz watchin lebron whoop a%$! Hell you","created_at":"Mon May 25 01:58:52 +0000 2009","in_reply_to_user_id":23806556,"favorited":false,"user":{"notifications":null,"statuses_count":46,"favourites_count":0,"description":"Twitter?? guess i'll see what its about..","screen_name":"Shaystar_TM","following":null,"utc_offset":-21600,"created_at":"Fri Apr 24 00:06:04 +0000 2009","profile_link_color":"FF0000","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme10\/bg.gif","profile_sidebar_fill_color":"7AC3EE","protected":false,"location":"Dallas Tx!","name":"ShayStar","profile_sidebar_border_color":"65B0DA","profile_background_tile":true,"url":"http:\/\/myspace.com\/shaystar_da_boss","time_zone":"Central Time (US & Canada)","followers_count":76,"profile_background_color":"642D8B","friends_count":142,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/226611048\/77_normal.jpg","id":34779455,"profile_text_color":"3D1957"},"in_reply_to_screen_name":"YungStreetz","in_reply_to_status_id":null,"id":1908228903,"source":"mobile web<\/a>"} -{"text":"@francesca I don\u00b4t know!! hahaha!te gusta==????=(!","created_at":"Mon May 25 01:58:52 +0000 2009","truncated":false,"in_reply_to_user_id":686933,"user":{"profile_background_color":"0099B9","description":"","screen_name":"FBGCH","following":null,"utc_offset":-21600,"created_at":"Sun Apr 12 02:53:08 +0000 2009","friends_count":66,"profile_text_color":"3C3940","notifications":null,"statuses_count":78,"favourites_count":0,"protected":false,"profile_link_color":"0099B9","location":"Piura-Peru","name":"Fiorella","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/13054239\/nick-jonas-blackberry-floating.jpg","profile_sidebar_fill_color":"95E8EC","url":null,"profile_sidebar_border_color":"5ED4DC","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/212594646\/2391794496_76f73ee8bd_normal.jpg","id":30586152,"time_zone":"Central Time (US & Canada)","followers_count":22},"favorited":false,"in_reply_to_screen_name":"francesca","in_reply_to_status_id":null,"id":1908228902,"source":"web"} -{"in_reply_to_user_id":698193,"text":"@mike3k Optionally if you want to stash your stuff for offline store and anywhere access: www.github.com","favorited":false,"created_at":"Mon May 25 01:58:52 +0000 2009","in_reply_to_screen_name":"mike3k","in_reply_to_status_id":1908112424,"id":1908229003,"user":{"profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","utc_offset":-21600,"profile_sidebar_fill_color":"252429","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/191579020\/DavidIcon_normal.jpg","following":null,"created_at":"Sun Jan 11 10:28:18 +0000 2009","profile_sidebar_border_color":"181A1E","description":"Author of geoDefense","screen_name":"nsxdavid","name":"nsxdavid","profile_background_tile":false,"protected":false,"time_zone":"Central Time (US & Canada)","followers_count":275,"profile_background_color":"1A1B1F","friends_count":13,"location":"St. Louis, MO","profile_text_color":"666666","id":18863194,"notifications":null,"statuses_count":89,"favourites_count":0,"url":"http:\/\/www.criticalthoughtgames.com"},"truncated":false,"source":"TweetDeck<\/a>"} -{"truncated":false,"text":"@zhartle o I just promised izzie she had a date. Tease!","created_at":"Mon May 25 01:58:52 +0000 2009","in_reply_to_user_id":15775133,"favorited":false,"user":{"notifications":null,"statuses_count":391,"favourites_count":0,"description":"","screen_name":"exoticpersonage","following":null,"utc_offset":-18000,"created_at":"Fri Feb 20 15:49:34 +0000 2009","profile_link_color":"b900aa","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme4\/bg.gif","profile_sidebar_fill_color":"95ec99","protected":false,"location":"Pittsburgh, PA","name":"Rich Bailey","profile_sidebar_border_color":"dcb25e","profile_background_tile":false,"url":null,"time_zone":"Quito","followers_count":70,"profile_background_color":"c8e8ef","friends_count":77,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/80765173\/n503441756_1416274_729_normal.jpg","id":21406840,"profile_text_color":"380a75"},"in_reply_to_screen_name":"zhartle","in_reply_to_status_id":null,"id":1908229004,"source":"txt<\/a>"} -{"truncated":false,"text":"@OperationX i will send u a link, and u can find out better about this Gman. http:\/\/bit.ly\/88xSt","created_at":"Mon May 25 01:58:52 +0000 2009","in_reply_to_user_id":41781498,"favorited":false,"user":{"notifications":null,"statuses_count":2,"favourites_count":0,"description":"","screen_name":"RaiseAndShine","following":null,"utc_offset":-18000,"created_at":"Sat May 23 01:08:50 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"","name":"G-Man","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":"Quito","followers_count":2,"profile_background_color":"9ae4e8","friends_count":1,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/226291181\/Gman_by_KarmeliaDark_normal.jpg","id":41942789,"profile_text_color":"000000"},"in_reply_to_screen_name":"OperationX","in_reply_to_status_id":1899002632,"id":1908229002,"source":"web"} -{"truncated":false,"text":"@baiboo no they came to your house for dinner","created_at":"Mon May 25 01:58:52 +0000 2009","in_reply_to_user_id":19284093,"favorited":false,"user":{"notifications":null,"statuses_count":129,"favourites_count":0,"description":"","screen_name":"jessilaura","following":null,"utc_offset":-18000,"created_at":"Fri May 15 16:08:18 +0000 2009","profile_link_color":"a41923","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/13679999\/gk297_floral_pattern.jpg","profile_sidebar_fill_color":"cec6eb","protected":false,"location":"Greenville, South Carolina","name":"Jessica Wehunt","profile_sidebar_border_color":"ffffff","profile_background_tile":true,"url":null,"time_zone":"Quito","followers_count":10,"profile_background_color":"1A1B1F","friends_count":15,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/213284062\/ja_normal.jpg","id":40271101,"profile_text_color":"000000"},"in_reply_to_screen_name":"baiboo","in_reply_to_status_id":null,"id":1908229000,"source":"txt<\/a>"} -{"truncated":false,"text":"@avalichauco yeuhhhhh lets! i need a job to pay for everything i want man. i usually hate expensive things <\/3","created_at":"Mon May 25 01:58:53 +0000 2009","in_reply_to_user_id":17765515,"favorited":false,"user":{"notifications":null,"statuses_count":88,"favourites_count":0,"description":"","screen_name":"ivyspeaks","following":null,"utc_offset":-18000,"created_at":"Wed Apr 15 02:50:01 +0000 2009","profile_link_color":"ff0018","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/13320256\/43.gif","profile_sidebar_fill_color":"ffffff","protected":false,"location":"347, NEW YORK CITY","name":"Ivy Hu","profile_sidebar_border_color":"F2E195","profile_background_tile":true,"url":"http:\/\/www.myspace.com\/ew_itsu","time_zone":"Eastern Time (US & Canada)","followers_count":35,"profile_background_color":"BADFCD","friends_count":53,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/202803379\/ivy2_normal.jpg","id":31316838,"profile_text_color":"000000"},"in_reply_to_screen_name":"avalichauco","in_reply_to_status_id":1907846115,"id":1908229104,"source":"web"} -{"truncated":false,"text":"just comeback from aerobic not just wake up like @bayuadiat .. gyahahaha","created_at":"Mon May 25 01:58:53 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":9,"favourites_count":0,"description":"","screen_name":"halleyzone","following":null,"utc_offset":-28800,"created_at":"Fri May 22 10:58:54 +0000 2009","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","protected":false,"location":"Paris van Java, Indonesia","name":"Parapaty Halley","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"url":"http:\/\/lovelifelust.wordpress.com","time_zone":"Pacific Time (US & Canada)","followers_count":17,"profile_background_color":"1A1B1F","friends_count":23,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/224634807\/ei_normal.JPG","id":41791171,"profile_text_color":"666666"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908229101,"source":"web"} -{"truncated":false,"text":"@realdiva83 you saw he retweeted some people last night lol","created_at":"Mon May 25 01:58:53 +0000 2009","in_reply_to_user_id":40188527,"favorited":false,"user":{"notifications":null,"statuses_count":10986,"favourites_count":14,"description":"Graphic artist\/\/Photographer\/\/BSB, punk and rock lover\/\/ loving friends\/\/avoiding crazies.","screen_name":"__Kizzle","following":null,"utc_offset":-18000,"created_at":"Sun Feb 22 21:00:02 +0000 2009","profile_link_color":"786878","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/12094186\/twitterpage.jpg","profile_sidebar_fill_color":"000000","protected":false,"location":"Where Ever I may roam.","name":"Kristen ","profile_sidebar_border_color":"eda2f1","profile_background_tile":false,"url":"http:\/\/kayetastic.blogspot.com\/","time_zone":"Eastern Time (US & Canada)","followers_count":160,"profile_background_color":"3b307e","friends_count":184,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/224181070\/twitter_normal.jpg","id":21597730,"profile_text_color":"dc7adc"},"in_reply_to_screen_name":"realdiva83","in_reply_to_status_id":1908205052,"id":1908229100,"source":"twhirl<\/a>"} -{"truncated":false,"text":"#MMA Bloody Elbow - Dana White Laid Ground Work for Lyoto Machida vs Quinton Rampage Jackson .. http:\/\/bit.ly\/nIaYc","created_at":"Mon May 25 01:58:53 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":8707,"favourites_count":0,"description":"Stay informed about everything related to Mixed Martial Arts. News about: UFC, Pride, K-1, WEC, Affliction,... Please ReTweet! I always follow you back! ","screen_name":"MMAgeek","following":null,"utc_offset":3600,"created_at":"Thu Jan 15 00:31:52 +0000 2009","profile_link_color":"0a11eb","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/4864307\/dark.gif","profile_sidebar_fill_color":"e6e5db","protected":false,"location":"Belgium","name":"Mixed Martial Arts","profile_sidebar_border_color":"444431","profile_background_tile":true,"url":"http:\/\/snuzi.com","time_zone":"Brussels","followers_count":1727,"profile_background_color":"444431","friends_count":1639,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/71192020\/MMA_normal.jpg","id":19003598,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908229102,"source":"twitterfeed<\/a>"} -{"text":"Hi Gina!","created_at":"Mon May 25 01:58:54 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"c80e56","description":null,"screen_name":"Lotus0523","following":null,"utc_offset":null,"created_at":"Sun May 24 17:05:58 +0000 2009","friends_count":5,"profile_text_color":"C80E56","notifications":null,"statuses_count":8,"favourites_count":1,"protected":false,"profile_link_color":"2d2427","location":null,"name":"Jaclyn","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme5\/bg.gif","profile_sidebar_fill_color":"99CC33","url":null,"profile_sidebar_border_color":"829D5E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/228361056\/jac_normal.jpg","id":42243020,"time_zone":null,"followers_count":4},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908229200,"source":"txt<\/a>"} -{"truncated":false,"text":"@eatyoursocksX3 lol thank you.","created_at":"Mon May 25 01:58:54 +0000 2009","in_reply_to_user_id":26681597,"favorited":false,"user":{"notifications":null,"statuses_count":225,"favourites_count":14,"description":null,"screen_name":"melfacee","following":null,"utc_offset":null,"created_at":"Wed Apr 15 02:56:28 +0000 2009","profile_link_color":"00cdff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"f5299f","protected":false,"location":null,"name":"Melissa Aguilera","profile_sidebar_border_color":"fe732a","profile_background_tile":true,"url":null,"time_zone":null,"followers_count":24,"profile_background_color":"92f04c","friends_count":28,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/138516382\/40909005_normal.jpg","id":31318605,"profile_text_color":"8024c2"},"in_reply_to_screen_name":"eatyoursocksX3","in_reply_to_status_id":null,"id":1908229203,"source":"txt<\/a>"} -{"truncated":false,"text":"Positive Thoughts Lead to Positive Change: Positive Thinking http:\/\/bit.ly\/IAuGX","in_reply_to_user_id":null,"favorited":false,"created_at":"Mon May 25 01:58:54 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908229301,"user":{"friends_count":346,"location":"Chicago, Illinois","utc_offset":-21600,"profile_text_color":"000000","notifications":null,"statuses_count":327,"favourites_count":1,"following":null,"profile_link_color":"0045ff","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/12117171\/selfmadeeasy.png","description":"SelfMadeEasy.com is a self help company. Get daily motivational quotes and self improvement tips","name":"Self Help Books","profile_sidebar_fill_color":"e8f2f8","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/80344970\/for_print_-_Copy_normal.jpg","created_at":"Tue Feb 17 07:39:32 +0000 2009","profile_sidebar_border_color":"65B0DA","screen_name":"self_help_books","profile_background_tile":false,"time_zone":"Central Time (US & Canada)","followers_count":484,"id":21071822,"profile_background_color":"ffffff","url":"http:\/\/SelfMadeEasy.com"},"source":"twitterfeed<\/a>"} -{"text":"Obama Tackles Abortion at Notre Dame.. http:\/\/bit.ly\/JvEeN","created_at":"Mon May 25 01:58:54 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"642D8B","description":"Trying to be one piece of the puzzle to make America a better place for all","screen_name":"itsstillamerica","following":null,"utc_offset":-28800,"created_at":"Sun Apr 12 14:43:06 +0000 2009","friends_count":1065,"profile_text_color":"3D1957","notifications":null,"statuses_count":952,"favourites_count":0,"protected":false,"profile_link_color":"FF0000","location":"Salisbury,n.c.","name":"itsstillamerica.com","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme10\/bg.gif","profile_sidebar_fill_color":"7AC3EE","url":"http:\/\/www.itsstillamerica.com","profile_sidebar_border_color":"65B0DA","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/142427101\/joomlaweb_normal.jpg","id":30658935,"time_zone":"Pacific Time (US & Canada)","followers_count":377},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908229302,"source":"web"} -{"truncated":false,"text":"http:\/\/twitpic.com\/5wa6u","created_at":"Mon May 25 01:58:54 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":12,"favourites_count":3,"description":null,"screen_name":"seagullzh","following":null,"utc_offset":null,"created_at":"Sun Feb 22 02:35:45 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":null,"name":"Vivian Zhang","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":null,"followers_count":6,"profile_background_color":"9ae4e8","friends_count":4,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":21538522,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908229304,"source":"Twitterrific<\/a>"} -{"text":"Last night in miami its gonna be sooooo crazy I don't think I can drink \nagain","created_at":"Mon May 25 01:58:54 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9AE4E8","description":"1\/2 of mixgrind.com Manger of Dj me$$iah & 1\/2 of Da Common Cauze.","screen_name":"mixgrindhnic","following":null,"utc_offset":-18000,"created_at":"Sat Mar 14 00:53:34 +0000 2009","friends_count":236,"profile_text_color":"333333","notifications":null,"statuses_count":2224,"favourites_count":1,"protected":false,"profile_link_color":"0084B4","location":"GHOST ToWn NYC","name":"jay","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/5672154\/21515d.jpg","profile_sidebar_fill_color":"DDFFCC","url":"http:\/\/www.mixgrind.com","profile_sidebar_border_color":"BDDCAD","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/97551387\/l_4a80dd1deeb94ac2afc114493ff07afa_normal.jpg","id":24295794,"time_zone":"Eastern Time (US & Canada)","followers_count":383},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908229303,"source":"TwitterMail<\/a>"} -{"truncated":false,"text":"@nikkiraffail yes ma'am. Redoing dia de madre w. My mom :D","created_at":"Mon May 25 01:58:54 +0000 2009","in_reply_to_user_id":24971710,"favorited":false,"user":{"notifications":null,"statuses_count":655,"favourites_count":0,"description":"I love twittering my friends, *shout out to @oldmanwinters & @nikkiraffail* I enjoy the beach, reading, photography, concerts, music, swimming, & cheese","screen_name":"courtney_mejer","following":null,"utc_offset":-28800,"created_at":"Wed Sep 10 19:13:31 +0000 2008","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","protected":false,"location":"the [[702]]","name":"CourtneyRey!","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"url":"http:\/\/myspace.com\/catholicgirl19","time_zone":"Pacific Time (US & Canada)","followers_count":28,"profile_background_color":"1A1B1F","friends_count":71,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/59789126\/100_3923_normal.JPG","id":16225808,"profile_text_color":"666666"},"in_reply_to_screen_name":"nikkiraffail","in_reply_to_status_id":null,"id":1908229300,"source":"txt<\/a>"} -{"truncated":false,"text":"@gbatista T\u00e1 sempre foi uma bosta pronto","created_at":"Mon May 25 01:58:55 +0000 2009","in_reply_to_user_id":10185972,"favorited":false,"user":{"notifications":null,"statuses_count":248,"favourites_count":0,"description":null,"screen_name":"srtee","following":null,"utc_offset":null,"created_at":"Fri Jan 23 17:19:35 +0000 2009","profile_link_color":"FF0000","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/13332985\/grannies.gif","profile_sidebar_fill_color":"FFF7CC","protected":false,"location":null,"name":"tiago s borges","profile_sidebar_border_color":"F2E195","profile_background_tile":false,"url":null,"time_zone":null,"followers_count":20,"profile_background_color":"BADFCD","friends_count":21,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/72750513\/imagem_normal.JPG","id":19403302,"profile_text_color":"0C3E53"},"in_reply_to_screen_name":"gbatista","in_reply_to_status_id":1908183882,"id":1908229404,"source":"TwitterFox<\/a>"} -{"truncated":false,"text":"@StumpyLove728 Lol xD","created_at":"Mon May 25 01:58:55 +0000 2009","in_reply_to_user_id":18094244,"favorited":false,"user":{"notifications":null,"statuses_count":3654,"favourites_count":156,"description":"The one and only official Sharina Tan Twitter [Az eef i'm femoOz xD] Resident Squee-ing Fall Out Boy Fan poodle & part time excessive Tweeeter. Nuff sed.","screen_name":"lemongeneration","following":null,"utc_offset":28800,"created_at":"Wed Apr 01 03:01:01 +0000 2009","profile_link_color":"5e08a1","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/9497222\/354254kwnsx2qfxl.gif","profile_sidebar_fill_color":"080808","protected":false,"location":"Joe's Fro. Philippines.","name":"Sharina Tan :{)","profile_sidebar_border_color":"050505","profile_background_tile":true,"url":"http:\/\/lemongeneration28.buzznet.com","time_zone":"Singapore","followers_count":352,"profile_background_color":"ffffff","friends_count":271,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/224259456\/image200905200001_2_normal.jpg","id":28036021,"profile_text_color":"e70e08"},"in_reply_to_screen_name":"StumpyLove728","in_reply_to_status_id":1908211039,"id":1908229403,"source":"web"} -{"truncated":false,"text":"@taraleilani these await you... http:\/\/twitpic.com\/5wa7a","created_at":"Mon May 25 01:58:55 +0000 2009","in_reply_to_user_id":19547155,"favorited":false,"user":{"notifications":null,"statuses_count":81,"favourites_count":1,"description":"Make someone happy....","screen_name":"metoliusmark","following":null,"utc_offset":-28800,"created_at":"Thu Oct 30 03:56:53 +0000 2008","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/3273634\/alievan35.jpg","profile_sidebar_fill_color":"252429","protected":false,"location":"Oregon","name":"Mark D.","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"url":null,"time_zone":"Pacific Time (US & Canada)","followers_count":7,"profile_background_color":"1A1B1F","friends_count":5,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/63161179\/avatar_normal.jpg","id":17059616,"profile_text_color":"c06868"},"in_reply_to_screen_name":"taraleilani","in_reply_to_status_id":1905582411,"id":1908229401,"source":"Twitterrific<\/a>"} -{"truncated":false,"text":"God is all seeing and all knowing, why do I keep thinking I have secrets?","created_at":"Mon May 25 01:58:56 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":9,"favourites_count":0,"description":"christian right conservative,naturalized citizen. Still single after all these years!","screen_name":"cre8tvgary","following":null,"utc_offset":-18000,"created_at":"Wed Dec 03 03:28:58 +0000 2008","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"Louisville, KY","name":"cre8tvgary","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":"Eastern Time (US & Canada)","followers_count":7,"profile_background_color":"9ae4e8","friends_count":4,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":17827509,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908229504,"source":"web"} -{"text":"eating @ sushi boat with maxie (;","created_at":"Mon May 25 01:58:58 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"C6E2EE","description":"hi, i'm betsy [:","screen_name":"TrinaRinaa","following":null,"utc_offset":-28800,"created_at":"Tue Apr 14 19:43:12 +0000 2009","friends_count":29,"profile_text_color":"663B12","notifications":null,"statuses_count":94,"favourites_count":0,"protected":false,"profile_link_color":"1F98C7","location":"$d.","name":"Betsy Savat","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme2\/bg.gif","profile_sidebar_fill_color":"DAECF4","url":"http:\/\/www.myspace.com\/cuddlelikeabear","profile_sidebar_border_color":"C6E2EE","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/200929796\/P3300671_normal.JPG","id":31206015,"time_zone":"Pacific Time (US & Canada)","followers_count":22},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908229503,"source":"txt<\/a>"} -{"text":"@oliveshoot mom.must.win! =)","created_at":"Mon May 25 01:58:56 +0000 2009","truncated":false,"in_reply_to_user_id":23009406,"user":{"profile_background_color":"9ae4e8","description":"Mom, wife, blogger, product reviewer extraordinaire! Want to be featured on my site? DM or email! =)","screen_name":"HappyMomAmy","following":null,"utc_offset":-18000,"created_at":"Sun May 17 01:10:33 +0000 2009","friends_count":474,"profile_text_color":"000000","notifications":null,"statuses_count":802,"favourites_count":1,"protected":false,"profile_link_color":"0000ff","location":"","name":"Amy (the Happy Mom!)","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":"http:\/\/www.makesmomhappy.com","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/221410013\/HapyMomAvatar_75_normal.jpg","id":40579763,"time_zone":"Eastern Time (US & Canada)","followers_count":477},"favorited":false,"in_reply_to_screen_name":"oliveshoot","in_reply_to_status_id":1908214956,"id":1908229502,"source":"web"} -{"truncated":false,"text":"awesome song... no words to describe! \u266b http:\/\/blip.fm\/~6yyv2","created_at":"Mon May 25 01:58:56 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":81,"favourites_count":217,"description":"I'm Christian girl, and I'm proud of it... I love music [RocK!], movies... immagining, eat, n' sleep!","screen_name":"RanDom_GaBy","following":null,"utc_offset":-10800,"created_at":"Sat May 02 13:37:43 +0000 2009","profile_link_color":"3b8b09","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/12765475\/29502.png","profile_sidebar_fill_color":"7AC3EE","protected":false,"location":"Above the Ra!nbow.","name":"Jeanisse Anes","profile_sidebar_border_color":"65B0DA","profile_background_tile":true,"url":null,"time_zone":"Georgetown","followers_count":19,"profile_background_color":"642D8B","friends_count":51,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/210754061\/DSCI5427_normal.JPG","id":37197069,"profile_text_color":"dc1889"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908229501,"source":"Blip.fm<\/a>"} -{"truncated":false,"text":"sabbota\u3000\u89e3\u5256\u5b66","created_at":"Mon May 25 01:58:57 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":164,"favourites_count":0,"description":"\u7406\u5b66\u90e8\u751f\u7269\u5b66\u79d1","screen_name":"fakirs","following":null,"utc_offset":32400,"created_at":"Sat Feb 07 07:16:41 +0000 2009","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","protected":false,"location":"\u6771\u4eac\u304b\u795e\u5948\u5ddd","name":"\u304b\u306e\u3000\u308a\u3085\u3046\u3058","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"url":null,"time_zone":"Tokyo","followers_count":6,"profile_background_color":"1A1B1F","friends_count":3,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/76211716\/darca1_normal.jpg","id":20298106,"profile_text_color":"666666"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908229600,"source":"web"} -{"truncated":false,"text":"At wasuwats burning cds...","created_at":"Mon May 25 01:58:57 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":997,"favourites_count":0,"description":"22, Male, Hispanic, Gay, Taken, Usually Bored Forever! lol","screen_name":"Kanuckles86","following":null,"utc_offset":-21600,"created_at":"Wed Jan 14 22:49:45 +0000 2009","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/4110177\/n5SPiexH_1280x800.jpg","profile_sidebar_fill_color":"322e84","protected":false,"location":"Fort Worth, TX","name":"Mark Joseph Cruz Jr.","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"url":"http:\/\/www.myspace.com\/cancergay","time_zone":"Central Time (US & Canada)","followers_count":23,"profile_background_color":"1A1B1F","friends_count":18,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/180512936\/image_normal.jpg","id":19000116,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908229604,"source":"twidroid<\/a>"} -{"text":"wonders why nobody has posted and\/or tagged any facebook photos of him from the reunion.","created_at":"Mon May 25 01:58:57 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"1A1B1F","description":"","screen_name":"matthimrod","following":null,"utc_offset":-18000,"created_at":"Mon Nov 24 00:38:33 +0000 2008","friends_count":41,"profile_text_color":"666666","notifications":null,"statuses_count":437,"favourites_count":0,"protected":false,"profile_link_color":"2FC2EF","location":"Pittsburgh, PA, USA","name":"Matt Himrod","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","url":"http:\/\/www.matthimrod.com\/","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/133269369\/IMG00074-20090403-2107_normal.jpg","id":17581642,"time_zone":"Eastern Time (US & Canada)","followers_count":47},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908229601,"source":"web"} -{"text":"Yea! I would love to be a football player","created_at":"Mon May 25 01:58:57 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":null,"screen_name":"quickwritter","following":null,"utc_offset":null,"created_at":"Mon May 25 01:53:45 +0000 2009","friends_count":1,"profile_text_color":"000000","notifications":null,"statuses_count":6,"favourites_count":0,"protected":false,"profile_link_color":"0000ff","location":null,"name":"Anthony Petri","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":null,"profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":42326445,"time_zone":null,"followers_count":0},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908229602,"source":"web"} -{"truncated":false,"text":"@DieralisSon Ow, tbm querooo >>> Amo Doritoss <<<","created_at":"Mon May 25 01:58:57 +0000 2009","in_reply_to_user_id":23852689,"favorited":false,"user":{"notifications":null,"statuses_count":155,"favourites_count":2,"description":"","screen_name":"IvanaDanielle","following":null,"utc_offset":-10800,"created_at":"Mon Apr 20 03:05:31 +0000 2009","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","protected":false,"location":"Aracaju-SE ","name":"Ivana Danielle","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"url":null,"time_zone":"Brasilia","followers_count":15,"profile_background_color":"1A1B1F","friends_count":34,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/205254942\/Meus_olhos_normal.jpg","id":33399137,"profile_text_color":"918383"},"in_reply_to_screen_name":"DieralisSon","in_reply_to_status_id":1908214479,"id":1908229603,"source":"web"} -{"text":"\u307d\u3058\u304b\u308b\u3055\u3093\u304c10\u5186\u3089\u3057\u3044\u30fb\u30fb\u30fb","created_at":"Mon May 25 01:58:57 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"0099B9","description":"why not? girls could be geek!","screen_name":"C_ko","following":null,"utc_offset":32400,"created_at":"Fri Apr 06 22:45:12 +0000 2007","friends_count":176,"profile_text_color":"3C3940","notifications":null,"statuses_count":1318,"favourites_count":8,"protected":false,"profile_link_color":"0099B9","location":"Tokyo","name":"C_ko","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme4\/bg.gif","profile_sidebar_fill_color":"95E8EC","url":"http:\/\/blog.livedoor.jp\/tizbit\/","profile_sidebar_border_color":"5ED4DC","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/19328332\/LA20070403_2_078_normal.jpg","id":3661821,"time_zone":"Tokyo","followers_count":153},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908229700,"source":"TwitterFox<\/a>"} -{"text":"Gotta make a trip to the Chevy dealership in the A.M. when I get off work.","created_at":"Mon May 25 01:58:57 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":"Student, Economics Fanatic, Sports fanatic, good dresser, and all around great man. ","screen_name":"rodney1985","following":null,"utc_offset":-18000,"created_at":"Thu Jun 05 20:07:09 +0000 2008","friends_count":28,"profile_text_color":"000000","notifications":null,"statuses_count":816,"favourites_count":0,"protected":false,"profile_link_color":"0000ff","location":"\u00dcT: 28.447397,-81.430235","name":"Rodney Allen","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/2653179\/hennessy.jpg","profile_sidebar_fill_color":"e0ff92","url":null,"profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/210451644\/IMG00142_normal.jpg","id":15022722,"time_zone":"Eastern Time (US & Canada)","followers_count":74},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908229703,"source":"UberTwitter<\/a>"} -{"truncated":false,"text":"I love #glamourkills (:","created_at":"Mon May 25 01:58:57 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":1433,"favourites_count":191,"description":"love music, concerts & roadtrips.","screen_name":"hillarylovesatl","following":null,"utc_offset":-21600,"created_at":"Wed Dec 31 03:09:05 +0000 2008","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","protected":false,"location":"iPhone: 29.652445,-95.092422","name":"hillary galan","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"url":"http:\/\/hillarygalan.tumblr.com","time_zone":"Central Time (US & Canada)","followers_count":84,"profile_background_color":"1A1B1F","friends_count":125,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/215488590\/3_normal.JPG","id":18497133,"profile_text_color":"666666"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908229701,"source":"TwitterFon<\/a>"} -{"text":"\"As pessoas entram em nossa vida por acaso, mas n\u00e3o \u00e9 por acaso que elas permanecem.\" Lilian Tonet ... Super clich\u00ea mas ta valendo ... ;)","created_at":"Mon May 25 01:58:57 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"d86a47","description":"Publicit\u00e1ria e Web Designer","screen_name":"vivilatini","following":null,"utc_offset":-10800,"created_at":"Fri Jan 16 12:57:33 +0000 2009","friends_count":62,"profile_text_color":"464d58","notifications":null,"statuses_count":633,"favourites_count":1,"protected":false,"profile_link_color":"e44b1b","location":"Belo Horizonte | MG - BR","name":"Viviane Latini","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/10423572\/274_background.jpg","profile_sidebar_fill_color":"fcfcfc","url":"http:\/\/blip.fm\/vivilatini","profile_sidebar_border_color":"ffffff","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/183887866\/foto_msn_normal.jpg","id":19064972,"time_zone":"Greenland","followers_count":87},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908229704,"source":"TwitterFox<\/a>"} -{"truncated":false,"text":"Observers Look At Impact Of Easley Investigation http:\/\/cli.gs\/mLGMyq #LinkTweet","created_at":"Mon May 25 01:58:57 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":31566,"favourites_count":0,"description":"News of the Scientific world!","screen_name":"news_science","following":null,"utc_offset":19800,"created_at":"Wed Apr 01 13:41:36 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"India","name":"Science News\u2122\u2714","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":"http:\/\/feedtwitt.info\/science","time_zone":"Kolkata","followers_count":3186,"profile_background_color":"9ae4e8","friends_count":3382,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/125759776\/alaneproblems_normal.jpg","id":28107042,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908229702,"source":"WP to Twitter<\/a>"} -{"truncated":false,"text":"@JaredMorrison let's watch a movie...possibly harry potter???","created_at":"Mon May 25 01:58:58 +0000 2009","in_reply_to_user_id":17614143,"favorited":false,"user":{"notifications":null,"statuses_count":14,"favourites_count":1,"description":null,"screen_name":"pianoplayer7","following":null,"utc_offset":null,"created_at":"Thu Apr 30 22:03:08 +0000 2009","profile_link_color":"99fab1","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme10\/bg.gif","profile_sidebar_fill_color":"7AC3EE","protected":false,"location":null,"name":"Taylor Keys","profile_sidebar_border_color":"65B0DA","profile_background_tile":true,"url":null,"time_zone":null,"followers_count":3,"profile_background_color":"642D8B","friends_count":5,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/206266467\/IMG_0021_normal.JPG","id":36786696,"profile_text_color":"3D1957"},"in_reply_to_screen_name":"JaredMorrison","in_reply_to_status_id":1904306023,"id":1908229801,"source":"Twitterrific<\/a>"} -{"truncated":false,"text":"Asian Chick in the arena just set a Guiness World Record!! She was on a unicycle throwin ceramic bowls on her head. Wow!!!!!!!","created_at":"Mon May 25 01:58:58 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":341,"favourites_count":1,"description":"","screen_name":"ImChrisB","following":null,"utc_offset":-18000,"created_at":"Mon Apr 06 14:12:48 +0000 2009","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/13199418\/1223289740.jpg","profile_sidebar_fill_color":"252429","protected":false,"location":"","name":"Chris Batten","profile_sidebar_border_color":"181A1E","profile_background_tile":true,"url":null,"time_zone":"Eastern Time (US & Canada)","followers_count":70,"profile_background_color":"1A1B1F","friends_count":71,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/187667051\/DSC05297_normal.JPG","id":29206776,"profile_text_color":"666666"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908229804,"source":"TwitterFon<\/a>"} -{"text":"Bbq chicken + spam musubi + raspberry ice tea= <3","created_at":"Mon May 25 01:58:58 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"1A1B1F","description":"","screen_name":"1widesi","following":null,"utc_offset":-32400,"created_at":"Mon Apr 27 18:30:19 +0000 2009","friends_count":41,"profile_text_color":"666666","notifications":null,"statuses_count":158,"favourites_count":0,"protected":false,"profile_link_color":"2FC2EF","location":"","name":"Justin Fong","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/11393781\/si.jpg","profile_sidebar_fill_color":"000000","url":"http:\/\/myspace.com\/fong","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/206630316\/extra_311_normal.jpg","id":35817733,"time_zone":"Alaska","followers_count":44},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908229802,"source":"TwitterBerry<\/a>"} -{"text":"@StephenRL Good luck!!!","created_at":"Mon May 25 01:58:59 +0000 2009","truncated":false,"in_reply_to_user_id":13529572,"user":{"profile_background_color":"1A1B1F","description":"I\u2019ve seen enough horror movies to know that any weirdo wearing a mask is never friendly.","screen_name":"BroadoftheDead","following":null,"utc_offset":-18000,"created_at":"Sun Nov 09 08:05:51 +0000 2008","friends_count":216,"profile_text_color":"666666","notifications":null,"statuses_count":1288,"favourites_count":6,"protected":false,"profile_link_color":"2FC2EF","location":"N'YAWK (New York)","name":"Tessa","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","url":"http:\/\/my.spill.com\/profile\/tessa","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/180498719\/BOTD_normal.PNG","id":17266426,"time_zone":"Eastern Time (US & Canada)","followers_count":270},"favorited":false,"in_reply_to_screen_name":"StephenRL","in_reply_to_status_id":1908127867,"id":1908229904,"source":"twhirl<\/a>"} -{"text":"@langille a tour of Milford is funny on it's own as a quote :)","created_at":"Mon May 25 01:58:59 +0000 2009","truncated":false,"in_reply_to_user_id":14388386,"user":{"profile_background_color":"1A1B1F","description":"Web video creator of http:\/\/www.baddad.tv and http:\/\/www.surfdonkey.ca, Podcamp Halifax organizer, kid wrangler and creative maven","screen_name":"SpiderVideo","following":null,"utc_offset":-18000,"created_at":"Mon Mar 26 17:14:21 +0000 2007","friends_count":1021,"profile_text_color":"666666","notifications":null,"statuses_count":4710,"favourites_count":1,"protected":false,"profile_link_color":"2FC2EF","location":"Halifax, Nova Scotia, Canada","name":"Craig Moore","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","url":"http:\/\/www.spidervideo.tv","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/225798033\/newtwit_normal.jpg","id":2324641,"time_zone":"Eastern Time (US & Canada)","followers_count":918},"favorited":false,"in_reply_to_screen_name":"langille","in_reply_to_status_id":1908119476,"id":1908229902,"source":"TweetDeck<\/a>"} -{"truncated":false,"text":"BLOGGER\u88ab\u67d0\u654f\u611f\u7684\u56fd\u5bb6\u4ee5\u67d0\u4e9b\u6076\u5fc3\u624b\u6bb5\u5c4f\u853d\uff0c\u8fd9\u4e2a\u56fd\u5bb6\u7684\u627f\u53d7\u529b\u592a\u5dee\u4e86\uff0c\u8fd9\u4e2a\u56fd\u5bb6\u4e0d\u53ef\u544a\u4eba\u7684\u79d8\u5bc6\u592a\u591a\u4e86","created_at":"Mon May 25 01:58:59 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":13,"favourites_count":0,"description":"\u50bb\u5b50","screen_name":"luciagao","following":null,"utc_offset":28800,"created_at":"Fri Apr 17 10:06:43 +0000 2009","profile_link_color":"0084B4","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"DDFFCC","protected":false,"location":"beijing","name":"lucia","profile_sidebar_border_color":"BDDCAD","profile_background_tile":false,"url":"http:\/\/luciagao.blogspot.com\/","time_zone":"Beijing","followers_count":6,"profile_background_color":"9AE4E8","friends_count":5,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/142218511\/36b7a708857273336b60fbb7_normal.jpg","id":32359613,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908229903,"source":"web"} -{"truncated":false,"text":"Golf | Scorching Lee goes low in desert: Scorching Lee goes low in desert | | Golfweek Magazine | Golf News.\n\n\nG.. http:\/\/bit.ly\/ACsJK","created_at":"Mon May 25 01:58:59 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":1031,"favourites_count":0,"description":"Profissional golfer, intrested in all the new golf developments. Play the best golf of your life in just two weeks. ","screen_name":"Davidfred","following":null,"utc_offset":19800,"created_at":"Wed May 06 06:20:29 +0000 2009","profile_link_color":"0084B4","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/11802700\/el.JPG","profile_sidebar_fill_color":"DDFFCC","protected":false,"location":"California","name":"David Fred","profile_sidebar_border_color":"BDDCAD","profile_background_tile":true,"url":"http:\/\/bit.ly\/golfer","time_zone":"Kolkata","followers_count":420,"profile_background_color":"9AE4E8","friends_count":1108,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/199905046\/fred_modified1_normal.png","id":38127709,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908229900,"source":"twitterfeed<\/a>"} -{"truncated":false,"text":"@Jabari sheesh. its like I stuck my hand into a whirlwind...","created_at":"Mon May 25 01:59:00 +0000 2009","in_reply_to_user_id":15918317,"favorited":false,"user":{"notifications":null,"statuses_count":6474,"favourites_count":114,"description":"(ex) Rapper \u2022 Blog Bully \u2022 Media Mastermind","screen_name":"DDotOmen","following":null,"utc_offset":-21600,"created_at":"Wed Oct 01 08:13:56 +0000 2008","profile_link_color":"000000","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/3692715\/domenlogoresized.jpg","profile_sidebar_fill_color":"ffffff","protected":false,"location":"DMV","name":"DDotOmen","profile_sidebar_border_color":"000000","profile_background_tile":true,"url":"http:\/\/DDotOmen.com","time_zone":"Central Time (US & Canada)","followers_count":563,"profile_background_color":"000000","friends_count":309,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/208345045\/adam-west-photo_200x137_normal.jpg","id":16541652,"profile_text_color":"000000"},"in_reply_to_screen_name":"Jabari","in_reply_to_status_id":1908204808,"id":1908230000,"source":"web"} -{"truncated":false,"text":"I really need to take a vacation a really fun one u knw, its some much shit to b hear yha the world needs a vacation","created_at":"Mon May 25 01:59:01 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":15,"favourites_count":0,"description":null,"screen_name":"ToxicCrusader","following":null,"utc_offset":null,"created_at":"Mon Apr 20 03:35:26 +0000 2009","profile_link_color":"088253","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme3\/bg.gif","profile_sidebar_fill_color":"E3E2DE","protected":false,"location":null,"name":"Richard Islas","profile_sidebar_border_color":"D3D2CF","profile_background_tile":false,"url":null,"time_zone":null,"followers_count":4,"profile_background_color":"EDECE9","friends_count":3,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/149981704\/Sunset_normal.jpg","id":33408167,"profile_text_color":"634047"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908230003,"source":"web"} -{"truncated":false,"text":"church sign: forbidden fruits create many jams.","created_at":"Mon May 25 01:59:00 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":877,"favourites_count":36,"description":"Girl in the thralls of a quarter life crisis provides updates for the masses.","screen_name":"forthenonce","following":null,"utc_offset":-28800,"created_at":"Wed Jul 02 22:22:07 +0000 2008","profile_link_color":"0084B4","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/4562367\/awesome.jpg","profile_sidebar_fill_color":"DDFFCC","protected":false,"location":"So Cal","name":"C.C. Valentine","profile_sidebar_border_color":"BDDCAD","profile_background_tile":true,"url":null,"time_zone":"Pacific Time (US & Canada)","followers_count":36,"profile_background_color":"9AE4E8","friends_count":54,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/73851301\/little_normal.jpg","id":15302426,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908230004,"source":"txt<\/a>"} -{"truncated":false,"text":"@vpmedical time to go vickie","created_at":"Mon May 25 01:59:00 +0000 2009","in_reply_to_user_id":14307686,"favorited":false,"user":{"notifications":null,"statuses_count":40,"favourites_count":0,"description":"","screen_name":"dougpruitt","following":null,"utc_offset":-25200,"created_at":"Thu Dec 11 03:50:14 +0000 2008","profile_link_color":"FF0000","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"FFF7CC","protected":false,"location":"Arkansas","name":"dougpruitt","profile_sidebar_border_color":"F2E195","profile_background_tile":true,"url":"http:\/\/dougpruitt.blogspot.com\/","time_zone":"Mountain Time (US & Canada)","followers_count":30,"profile_background_color":"BADFCD","friends_count":5,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/67063166\/notchurch1024_normal.jpg","id":18039975,"profile_text_color":"0C3E53"},"in_reply_to_screen_name":"vpmedical","in_reply_to_status_id":1907099555,"id":1908230001,"source":"TwitterFon<\/a>"} -{"truncated":false,"text":"@spacetrucker And I bet you are right too...lol...Visit me.. http:\/\/bit.ly\/CKHQf","in_reply_to_user_id":22088201,"favorited":false,"created_at":"Mon May 25 01:59:00 +0000 2009","in_reply_to_screen_name":"spacetrucker","in_reply_to_status_id":1907250993,"id":1908230103,"user":{"friends_count":1942,"location":"Singapore","utc_offset":28800,"profile_text_color":"362720","notifications":null,"statuses_count":276,"favourites_count":0,"following":null,"profile_link_color":"B40B43","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme11\/bg.gif","description":"Asian Beauty on Cam FREE..I just love camming...naughty or nice...it's always FUN.","name":"Feel Young","profile_sidebar_fill_color":"e698b0","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/217403496\/sweet_normal.jpg","created_at":"Thu May 14 03:32:00 +0000 2009","profile_sidebar_border_color":"CC3366","screen_name":"feelnlook","profile_background_tile":true,"time_zone":"Singapore","followers_count":1679,"id":39917884,"profile_background_color":"f9c8d8","url":"http:\/\/www.rocksolidbiz.net"},"source":"web"} -{"text":"feels good man","created_at":"Mon May 25 01:59:00 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"ffffff","description":"","screen_name":"supleena","following":null,"utc_offset":-18000,"created_at":"Thu Jul 10 19:23:52 +0000 2008","friends_count":36,"profile_text_color":"634047","notifications":null,"statuses_count":185,"favourites_count":0,"protected":false,"profile_link_color":"136076","location":"","name":"Aleena ","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/4474272\/1222203186888.jpg","profile_sidebar_fill_color":"f3e7b4","url":null,"profile_sidebar_border_color":"D3D2CF","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/205801452\/screen-capture-55_normal.png","id":15381900,"time_zone":"Quito","followers_count":30},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908230104,"source":"TwitterBerry<\/a>"} -{"truncated":false,"text":"Photo: my favorite picture of when I was little! http:\/\/tumblr.com\/x6y1v06bn","created_at":"Mon May 25 01:59:00 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":124,"favourites_count":6,"description":"I'm Kayla and I'm a goofball","screen_name":"kaylamariex","following":null,"utc_offset":-18000,"created_at":"Wed Oct 29 20:44:06 +0000 2008","profile_link_color":"FF3300","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme6\/bg.gif","profile_sidebar_fill_color":"A0C5C7","protected":false,"location":"rhode island","name":"KaylaWard!","profile_sidebar_border_color":"86A4A6","profile_background_tile":false,"url":"http:\/\/kaylamariexo.tumblr.com\/","time_zone":"Eastern Time (US & Canada)","followers_count":6,"profile_background_color":"709397","friends_count":7,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/116748288\/cookie_041_normal.JPG","id":17051455,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908230101,"source":"Tumblr<\/a>"} -{"truncated":false,"text":"u da fukin best lil mama","created_at":"Mon May 25 01:59:00 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":8,"favourites_count":0,"description":"I just wanna be Successfull!!","screen_name":"BelloBeazy","following":null,"utc_offset":-18000,"created_at":"Sun Apr 05 21:25:57 +0000 2009","profile_link_color":"0084B4","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/7578665\/m_f81a141edb6e41ecabe193bef1ebec96.jpg","profile_sidebar_fill_color":"DDFFCC","protected":false,"location":"DaDe County 305 ...MIAMI","name":"BELLO","profile_sidebar_border_color":"BDDCAD","profile_background_tile":true,"url":null,"time_zone":"Quito","followers_count":5,"profile_background_color":"9AE4E8","friends_count":3,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/123200021\/IMG_0178_normal.JPG","id":29068718,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908230100,"source":"qTweeter<\/a>"} -{"text":"Now Playing on NHL Home Ice - XM 204, Another page in the - NHL Yearbook","created_at":"Mon May 25 01:59:00 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"1A1B1F","description":"NHL Home Ice","screen_name":"xmhomeice","following":null,"utc_offset":-21600,"created_at":"Thu Jan 22 23:21:07 +0000 2009","friends_count":0,"profile_text_color":"666666","notifications":null,"statuses_count":10645,"favourites_count":0,"protected":false,"profile_link_color":"2FC2EF","location":"Canada","name":"NHL Home Ice","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","url":"http:\/\/www.nhlhomeice.com","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":19368770,"time_zone":"Central Time (US & Canada)","followers_count":296},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908230102,"source":"web"} -{"truncated":false,"text":"@MrsConnecticut 3 WORDS I DONT NEVER WANT TO HEAR :YOUR UNDER ARREST","created_at":"Mon May 25 01:59:01 +0000 2009","in_reply_to_user_id":28432204,"favorited":false,"user":{"notifications":null,"statuses_count":1869,"favourites_count":131,"description":"da hardest new unsigned rapper out currently residing n north cock it back(n.c) g-vegas(greenville) da next of da best when it cums 2 dat rap shit ya dig","screen_name":"SWIFTDATSME","following":null,"utc_offset":-21600,"created_at":"Sat Jan 24 20:30:24 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"GREENVILLE NC","name":"KELVIN WILLIAMS","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":"http:\/\/www.myspace.com\/swiftdatsme","time_zone":"Central Time (US & Canada)","followers_count":365,"profile_background_color":"9ae4e8","friends_count":983,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/72960839\/SWIFT_1_normal.jpg","id":19461887,"profile_text_color":"000000"},"in_reply_to_screen_name":"MrsConnecticut","in_reply_to_status_id":1908193206,"id":1908230203,"source":"web"} -{"truncated":false,"text":"and i cant wait til i get my multiple t-shirts made.","created_at":"Mon May 25 01:59:01 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":1459,"favourites_count":40,"description":"Once a Glambert, Always a Glambert :) --sick of the tears, and all the sorrow. forget yesterday, focus on tomorrow","screen_name":"scenexxqueen","following":null,"utc_offset":-21600,"created_at":"Thu Jan 15 22:07:12 +0000 2009","profile_link_color":"D02B55","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/6951040\/adamtop11shoot2-1.jpg","profile_sidebar_fill_color":"99CC33","protected":false,"location":"Lambert Land","name":"Feme Davi","profile_sidebar_border_color":"829D5E","profile_background_tile":true,"url":null,"time_zone":"Central Time (US & Canada)","followers_count":143,"profile_background_color":"352726","friends_count":323,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/205152912\/snapp_normal.jpg","id":19041560,"profile_text_color":"3E4415"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908230202,"source":"web"} -{"truncated":false,"text":"Hi, everyone! Hope your weekend is exploding with bliss and beauty!","created_at":"Mon May 25 01:59:01 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":2940,"favourites_count":91,"description":"Passing thru the world...pausing 4 temporal interests. Lover of beauty and seeker of wisdom..Keeper of the Sacred Grove..Portal Nomad..Yin\/Yang-ist..Teacher ","screen_name":"sojourner9","following":null,"utc_offset":-18000,"created_at":"Thu Feb 19 04:05:52 +0000 2009","profile_link_color":"9D582E","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/5838267\/creation.jpg","profile_sidebar_fill_color":"EADEAA","protected":false,"location":"Plato's Cave","name":"Rick Gripshover","profile_sidebar_border_color":"D9B17E","profile_background_tile":false,"url":null,"time_zone":"Eastern Time (US & Canada)","followers_count":1252,"profile_background_color":"8B542B","friends_count":1341,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/98372053\/Photo_16_normal.jpg","id":21274364,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908230200,"source":"web"} -{"text":"\u266a\u266b\u266a demencia temporal, verbal ballesta \u00a7 el chaval este os proyecta \u266a\u266b\u266a","created_at":"Mon May 25 01:59:01 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"B7B7B7","description":"Diaboli Virtvs In Lvmbis Est","screen_name":"reiterstahl","following":null,"utc_offset":-21600,"created_at":"Thu Mar 27 16:22:55 +0000 2008","friends_count":162,"profile_text_color":"000000","notifications":null,"statuses_count":8439,"favourites_count":10,"protected":false,"profile_link_color":"0000FF","location":"Costa Rica","name":"Rolando QR","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/8150207\/hlavna-train-wallpapers_12366_1440x900.jpg","profile_sidebar_fill_color":"E0FF91","url":"http:\/\/29a.site88.net","profile_sidebar_border_color":"87BC44","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/64691798\/jinx_normal.png","id":14236509,"time_zone":"Central America","followers_count":271},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908230201,"source":"DestroyTwitter<\/a>"} -{"truncated":false,"text":"@arturofunaki yes! You got the reference!","created_at":"Mon May 25 01:59:01 +0000 2009","in_reply_to_user_id":18698850,"favorited":false,"user":{"notifications":null,"statuses_count":128,"favourites_count":0,"description":null,"screen_name":"Mikiekool","following":null,"utc_offset":null,"created_at":"Mon Mar 16 16:17:55 +0000 2009","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/5817213\/skulltophatnew2.gif","profile_sidebar_fill_color":"252429","protected":false,"location":null,"name":"Mikie Acevedo","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"url":null,"time_zone":null,"followers_count":16,"profile_background_color":"1A1B1F","friends_count":35,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/97918106\/DSCN1092_normal.JPG","id":24717635,"profile_text_color":"666666"},"in_reply_to_screen_name":"ArturoFuNaki","in_reply_to_status_id":null,"id":1908230204,"source":"txt<\/a>"} -{"truncated":false,"text":"Just learned everytime by britney spears on the piano... Now im watchin remember the titians","created_at":"Mon May 25 01:59:02 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":206,"favourites_count":0,"description":"im ashley and im fucking amazing. tattoos, physcobilly, high hair& high heels...bitch.","screen_name":"animosity_13","following":null,"utc_offset":-25200,"created_at":"Fri Apr 17 02:57:30 +0000 2009","profile_link_color":"FF0000","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme12\/bg.gif","profile_sidebar_fill_color":"FFF7CC","protected":false,"location":"billings montana","name":"ashley neutgens","profile_sidebar_border_color":"F2E195","profile_background_tile":false,"url":"http:\/\/www.myspace.com\/loserfaceiloveyou","time_zone":"Mountain Time (US & Canada)","followers_count":36,"profile_background_color":"BADFCD","friends_count":46,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/141798745\/IMG_4649_normal.jpg","id":32272643,"profile_text_color":"0C3E53"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908230302,"source":"txt<\/a>"} -{"text":"got my zoo pics developed! flickr update.","created_at":"Mon May 25 01:59:02 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":"","screen_name":"emelex","following":null,"utc_offset":-18000,"created_at":"Tue Apr 08 22:10:13 +0000 2008","friends_count":93,"profile_text_color":"000000","notifications":null,"statuses_count":1604,"favourites_count":11,"protected":false,"profile_link_color":"0000ff","location":"","name":"emelex","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":"http:\/\/wecantallbewinners.net","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/66975555\/n25518079_35275043_6515_normal.jpg","id":14336679,"time_zone":"Quito","followers_count":122},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908230300,"source":"txt<\/a>"} -{"text":"YAY for @silverbell, @rachelbaker and @amyjfisher! BBQ was fun Thanks to you all","created_at":"Mon May 25 01:59:02 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"0099B9","description":"Experienced Media Buyer\/Planner avail for freelance or full time work (avatar courtesy of @zesmerelda)","screen_name":"Piratealice","following":null,"utc_offset":-21600,"created_at":"Mon Jun 09 01:19:46 +0000 2008","friends_count":518,"profile_text_color":"3C3940","notifications":null,"statuses_count":3599,"favourites_count":1,"protected":false,"profile_link_color":"0099B9","location":"Chicago","name":"Pattie Lee","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme4\/bg.gif","profile_sidebar_fill_color":"95E8EC","url":"http:\/\/tinyurl.com\/dgxdsm","profile_sidebar_border_color":"5ED4DC","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/125853542\/2962383879_9cea922b17_t_2__normal.jpg","id":15052203,"time_zone":"Central Time (US & Canada)","followers_count":484},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908230401,"source":"TweetDeck<\/a>"} -{"truncated":false,"text":"listening to \"Depeche Mode (original video) - Behind the wheel\" \u266b http:\/\/blip.fm\/~6yyvc","created_at":"Mon May 25 01:59:02 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":594,"favourites_count":1,"description":"A Happy Mom","screen_name":"Tazziemoto","following":null,"utc_offset":-28800,"created_at":"Fri May 01 20:00:32 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"Bay Area, CA","name":"Tanya Cagnolatti","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":"Pacific Time (US & Canada)","followers_count":17,"profile_background_color":"9ae4e8","friends_count":18,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/217424695\/tanya2_normal.JPG","id":37026230,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908230301,"source":"Blip.fm<\/a>"} -{"text":"PLATE BREAKERS UNITE!!","created_at":"Mon May 25 01:59:02 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9AE4E8","description":"Actor\/Singer\/Songwriter from the D who Loves the Lord and you too God Bless!! want to know more about me tweet me!!","screen_name":"TeamDeLo","following":null,"utc_offset":-18000,"created_at":"Sat Mar 07 17:46:24 +0000 2009","friends_count":86,"profile_text_color":"333333","notifications":null,"statuses_count":1742,"favourites_count":4,"protected":false,"profile_link_color":"0084B4","location":"Detroit","name":"Cotton","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/9850224\/381182530_wB4mq-M.jpg","profile_sidebar_fill_color":"DDFFCC","url":"http:\/\/www.myspace.com\/trainedvocalist","profile_sidebar_border_color":"BDDCAD","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/200650687\/381181990_GiEq3-M_normal.jpg","id":23215130,"time_zone":"Quito","followers_count":214},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908230404,"source":"mobile web<\/a>"} -{"truncated":false,"text":"Six firefighters save woman's handbag http:\/\/tinyurl.com\/p47k66","created_at":"Mon May 25 01:59:02 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":13634,"favourites_count":0,"description":"","screen_name":"newscomau","following":null,"utc_offset":36000,"created_at":"Tue Oct 23 00:07:09 +0000 2007","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"Sydney, Australia","name":"News.com.au","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":"http:\/\/www.news.com.au","time_zone":"Sydney","followers_count":253,"profile_background_color":"9ae4e8","friends_count":1,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":9609742,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908230400,"source":"twitterfeed<\/a>"} -{"truncated":false,"text":"Laundry is a snooze fest.","created_at":"Mon May 25 01:59:03 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":48,"favourites_count":0,"description":"","screen_name":"Sarahnade2k9","following":null,"utc_offset":-18000,"created_at":"Fri Apr 24 22:42:18 +0000 2009","profile_link_color":"088253","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme3\/bg.gif","profile_sidebar_fill_color":"E3E2DE","protected":false,"location":"iPhone: 40.463364,-79.945450","name":"Sarah N","profile_sidebar_border_color":"D3D2CF","profile_background_tile":false,"url":null,"time_zone":"Eastern Time (US & Canada)","followers_count":4,"profile_background_color":"EDECE9","friends_count":22,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/181865861\/me_normal.jpg","id":35065457,"profile_text_color":"634047"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908230501,"source":"TwitterFon<\/a>"} -{"text":"@lawknee your pathetically out of shape WTF.","created_at":"Mon May 25 01:59:03 +0000 2009","truncated":false,"in_reply_to_user_id":23255897,"user":{"profile_background_color":"000000","description":"POR QUEEEEEEE?????","screen_name":"Geneopath","following":null,"utc_offset":-28800,"created_at":"Tue Apr 07 23:32:51 +0000 2009","friends_count":38,"profile_text_color":"0af8ff","notifications":null,"statuses_count":206,"favourites_count":0,"protected":false,"profile_link_color":"30ff24","location":"Sacramento, EARTH","name":"Joseph Reindl","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/10593606\/1240801542347.jpg","profile_sidebar_fill_color":"7800e6","url":null,"profile_sidebar_border_color":"181A1E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/195640773\/m_c1356b2c18ba44068537e3e422153735_normal.jpg","id":29578071,"time_zone":"Pacific Time (US & Canada)","followers_count":39},"favorited":false,"in_reply_to_screen_name":"lawknee","in_reply_to_status_id":null,"id":1908230503,"source":"txt<\/a>"} -{"truncated":false,"text":"\u201d\u6b66\u591a\u9670\u53e4\u708e\u5ea7\u201d\u3063\u3066\u523a\u7e4d\u3044\u308c\u305f\u7279\u653b\u670d\u7740\u308c\u3070\u3001\u611f\u67d3\u3057\u306a\u3044","created_at":"Mon May 25 01:59:03 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":8220,"favourites_count":5409,"description":"\u2523\u00a8\u30de\u30cb\u30a2\u3067\u3059","screen_name":"keyboardmania","following":null,"utc_offset":32400,"created_at":"Sun Dec 16 11:35:40 +0000 2007","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"iPhone: 38.256786,140.902451","name":"\u304d\u3044\u307c\u3046\uff01","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":"http:\/\/d.hatena.ne.jp\/keyboardmania\/","time_zone":"Tokyo","followers_count":289,"profile_background_color":"9ae4e8","friends_count":335,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/228820435\/20584063-1_normal.jpg","id":11219642,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908230504,"source":"twicli<\/a>"} -{"text":"@TheMonkeyBoy Touchy feely? :)","created_at":"Mon May 25 01:59:04 +0000 2009","truncated":false,"in_reply_to_user_id":15045209,"user":{"profile_background_color":"352726","description":"","screen_name":"andrewzur","following":null,"utc_offset":36000,"created_at":"Fri Feb 27 06:33:50 +0000 2009","friends_count":31,"profile_text_color":"3E4415","notifications":null,"statuses_count":933,"favourites_count":0,"protected":false,"profile_link_color":"D02B55","location":"iPhone: -37.871201,144.976257","name":"Andrew Zur","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme5\/bg.gif","profile_sidebar_fill_color":"99CC33","url":null,"profile_sidebar_border_color":"829D5E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/206186169\/n723220345_6464695_6548421_normal.jpg","id":22115483,"time_zone":"Melbourne","followers_count":60},"favorited":false,"in_reply_to_screen_name":"TheMonkeyBoy","in_reply_to_status_id":1908219502,"id":1908230602,"source":"web"} -{"text":"On O.M.O. Writes: : http:\/\/tinyurl.com\/q32xs9","created_at":"Mon May 25 01:59:04 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"BADFCD","description":"All that's fashion, fun & ecclectic!","screen_name":"omowrites","following":null,"utc_offset":-25200,"created_at":"Wed Nov 12 18:55:31 +0000 2008","friends_count":55,"profile_text_color":"0C3E53","notifications":null,"statuses_count":926,"favourites_count":2,"protected":false,"profile_link_color":"ff00A0","location":"\u00dcT: 40.896091,-73.843944","name":"omowrites","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/6013512\/omobanner.jpg","profile_sidebar_fill_color":"f5efd1","url":"http:\/\/http:omowrites.blogspot.com","profile_sidebar_border_color":"F2E195","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/64685823\/n804221_41642590_1995_normal.jpg","id":17345752,"time_zone":"Mountain Time (US & Canada)","followers_count":211},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908230601,"source":"twitterfeed<\/a>"} -{"truncated":false,"text":"@Ragnar0 u would","created_at":"Mon May 25 01:59:04 +0000 2009","in_reply_to_user_id":18181864,"favorited":false,"user":{"notifications":null,"statuses_count":43,"favourites_count":0,"description":"Mechanical Design Engineer, Sportsman, Gamer, Drinker.. and more","screen_name":"MrS1eep","following":null,"utc_offset":36000,"created_at":"Mon May 18 22:09:05 +0000 2009","profile_link_color":"1F98C7","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme2\/bg.gif","profile_sidebar_fill_color":"DAECF4","protected":false,"location":"Melbourne, Australia","name":"Rob Davidson","profile_sidebar_border_color":"C6E2EE","profile_background_tile":false,"url":null,"time_zone":"Melbourne","followers_count":10,"profile_background_color":"C6E2EE","friends_count":13,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/217995370\/rob2_normal.JPG","id":40981887,"profile_text_color":"663B12"},"in_reply_to_screen_name":"Ragnar0","in_reply_to_status_id":1908219312,"id":1908230603,"source":"TweetDeck<\/a>"} -{"truncated":false,"text":"....Wonders if I steal his wallet will he stiil go to the strip club tonite....","created_at":"Mon May 25 01:59:06 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":393,"favourites_count":0,"description":"I know i look rather sweet and got a pretty face, but i cud fu*k a becon score up in 30days- Jazzy!","screen_name":"Mous_world","following":null,"utc_offset":-36000,"created_at":"Sun Apr 12 01:57:30 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"Miami, Sun Shinney Florida","name":"Erica Delancy","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":"Hawaii","followers_count":49,"profile_background_color":"9ae4e8","friends_count":87,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/140330813\/n1448492839_30174517_3703_normal.jpg","id":30576469,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908230604,"source":"TwitterBerry<\/a>"} -{"text":"@zeeliuser putz! q chato! mas a tattoo ficou boa?","created_at":"Mon May 25 01:59:05 +0000 2009","truncated":false,"in_reply_to_user_id":16035292,"user":{"profile_background_color":"fd9bd4","description":"Eu o que fui, eu o que sou e eu o que serei.","screen_name":"guinhazinha","following":null,"utc_offset":-10800,"created_at":"Mon Apr 20 01:37:30 +0000 2009","friends_count":84,"profile_text_color":"15b1ef","notifications":null,"statuses_count":213,"favourites_count":0,"protected":false,"profile_link_color":"9c00ff","location":"Brasil !","name":"Helga Machado","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/10829613\/ppelparede__26_.jpg","profile_sidebar_fill_color":"c1e5fb","url":null,"profile_sidebar_border_color":"f8dc0d","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/191837281\/eitadomingueira___24__normal.jpg","id":33371108,"time_zone":"Brasilia","followers_count":67},"favorited":false,"in_reply_to_screen_name":"zeeliuser","in_reply_to_status_id":1908202531,"id":1908230702,"source":"TweetDeck<\/a>"} -{"in_reply_to_user_id":14821941,"text":"@DonStugots enjoy the cigar. I gotta go find some tequila :-)","favorited":false,"created_at":"Mon May 25 01:59:05 +0000 2009","in_reply_to_screen_name":"DonStugots","in_reply_to_status_id":1908215072,"id":1908230701,"user":{"profile_link_color":"f41510","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/10931479\/1_tal_07.jpg","utc_offset":-21600,"profile_sidebar_fill_color":"ffffff","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/137159239\/jonkolbeavatar_normal.jpg","following":null,"created_at":"Wed Dec 03 10:42:53 +0000 2008","profile_sidebar_border_color":"ffffff","description":"One of the unemployed masses, incurable optimist and lover of ALL things real estate","screen_name":"jonkolbe","name":"Jonathan Kolbe","profile_background_tile":false,"protected":false,"time_zone":"Central Time (US & Canada)","followers_count":1413,"profile_background_color":"ffffff","friends_count":1140,"location":"Boca Raton, Florida","profile_text_color":"1a106a","id":17833883,"notifications":null,"statuses_count":2412,"favourites_count":7,"url":"http:\/\/www.jonkolbe.com"},"truncated":false,"source":"TweetDeck<\/a>"} -{"truncated":false,"text":"@adustyframe Congrats!!","created_at":"Mon May 25 01:59:05 +0000 2009","in_reply_to_user_id":15608330,"favorited":false,"user":{"notifications":null,"statuses_count":130,"favourites_count":0,"description":"","screen_name":"Jeraly","following":null,"utc_offset":-28800,"created_at":"Tue May 15 13:14:44 +0000 2007","profile_link_color":"990000","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme7\/bg.gif","profile_sidebar_fill_color":"F3F3F3","protected":false,"location":"Palm Springs, CA","name":"Jeraly Designs","profile_sidebar_border_color":"DFDFDF","profile_background_tile":false,"url":"http:\/\/jeraly.etsy.com\/","time_zone":"Pacific Time (US & Canada)","followers_count":151,"profile_background_color":"EBEBEB","friends_count":165,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/185059935\/J5_normal.jpg","id":6062282,"profile_text_color":"333333"},"in_reply_to_screen_name":"adustyframe","in_reply_to_status_id":1908057715,"id":1908230700,"source":"web"} -{"text":"@BusaBusss Bigg fan busta, Wurd up From Artist to Artist. Myspace.com\/Boyninog Check me out !! I got some Fire.","created_at":"Mon May 25 01:59:05 +0000 2009","truncated":false,"in_reply_to_user_id":24278900,"user":{"profile_background_color":"1A1B1F","description":"Im an Artist\/Engineer Need work?","screen_name":"Nin0G","following":null,"utc_offset":-25200,"created_at":"Tue Mar 31 17:52:41 +0000 2009","friends_count":138,"profile_text_color":"666666","notifications":null,"statuses_count":17,"favourites_count":0,"protected":false,"profile_link_color":"2FC2EF","location":"NJ ","name":"Nino G","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/8211649\/ninopagexclusivefy5.png","profile_sidebar_fill_color":"252429","url":null,"profile_sidebar_border_color":"181A1E","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/210290573\/US-1_normal.gif","id":27922660,"time_zone":"Mountain Time (US & Canada)","followers_count":31},"favorited":false,"in_reply_to_screen_name":"BusaBusss","in_reply_to_status_id":1908038851,"id":1908230704,"source":"web"} -{"truncated":false,"text":"\u4f60\u4eec\u8fd9\u79cd\u641e\u6cd5\uff0c\u4e5f\u53eb\u641e\u7ecf\u8425\u7ba1\u7406\u7684\uff1f\u5145\u5176\u91cf\u7b97\u4e2a\u5927\u961f\u4e66\u8bb0\u3002","in_reply_to_user_id":null,"favorited":false,"created_at":"Mon May 25 01:59:05 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908230802,"user":{"friends_count":12,"location":"china","utc_offset":28800,"profile_text_color":"3C3940","notifications":null,"statuses_count":488,"favourites_count":0,"following":null,"profile_link_color":"0099B9","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/7635551\/Knight_Stress.jpg","description":"a man...","name":"ssun.xh","profile_sidebar_fill_color":"95E8EC","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/124089765\/xingxing_normal.jpg","created_at":"Sun Apr 05 10:10:19 +0000 2009","profile_sidebar_border_color":"5ED4DC","screen_name":"cdds","profile_background_tile":false,"time_zone":"Beijing","followers_count":14,"id":28967983,"profile_background_color":"0099B9","url":null},"source":"web"} -{"in_reply_to_user_id":null,"text":"......and finally: the exhausting ride home.","favorited":false,"created_at":"Mon May 25 01:59:05 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908230801,"user":{"profile_link_color":"1F98C7","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme2\/bg.gif","utc_offset":-28800,"profile_sidebar_fill_color":"DAECF4","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/107771890\/images_normal.jpg","following":null,"created_at":"Mon Mar 23 21:45:07 +0000 2009","profile_sidebar_border_color":"C6E2EE","description":"","screen_name":"GutterShow","name":"Mr. GutterShow","profile_background_tile":false,"protected":false,"time_zone":"Pacific Time (US & Canada)","followers_count":5,"profile_background_color":"C6E2EE","friends_count":21,"location":"","profile_text_color":"663B12","id":26097818,"notifications":null,"statuses_count":53,"favourites_count":0,"url":null},"truncated":false,"source":"mobile web<\/a>"} -{"text":"Swine flu spreads to WA http:\/\/tinyurl.com\/qh6sup","created_at":"Mon May 25 01:59:06 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":"","screen_name":"newscomau","following":null,"utc_offset":36000,"created_at":"Tue Oct 23 00:07:09 +0000 2007","friends_count":1,"profile_text_color":"000000","notifications":null,"statuses_count":13635,"favourites_count":0,"protected":false,"profile_link_color":"0000ff","location":"Sydney, Australia","name":"News.com.au","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":"http:\/\/www.news.com.au","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":9609742,"time_zone":"Sydney","followers_count":253},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908230902,"source":"twitterfeed<\/a>"} -{"text":"So, the introduction of my essay is like, a full page because of my printing.","created_at":"Mon May 25 01:59:06 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"0522f5","description":"I'm a 16 year old girl, who just likes to chill out and live life her own way.","screen_name":"mwick_","following":null,"utc_offset":-14400,"created_at":"Sun Mar 15 16:47:41 +0000 2009","friends_count":107,"profile_text_color":"000000","notifications":null,"statuses_count":1384,"favourites_count":8,"protected":false,"profile_link_color":"0522f5","location":"Prince Edward Island","name":"Mallory Wickstrom ","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/6107653\/z105817390.jpg","profile_sidebar_fill_color":"5cb3ff","url":"http:\/\/www.livejournal.com\/malicesbbgurls","profile_sidebar_border_color":"ff891a","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/223702897\/HPIM22876_normal.jpg","id":24548104,"time_zone":"Atlantic Time (Canada)","followers_count":83},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908230901,"source":"web"} -{"truncated":false,"text":"I wish I could stay with my dad longer :*(","created_at":"Mon May 25 01:59:06 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":434,"favourites_count":1,"description":"","screen_name":"kaleyroo","following":null,"utc_offset":-21600,"created_at":"Sun Dec 21 02:28:46 +0000 2008","profile_link_color":"111111","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/8682163\/lines1.gif","profile_sidebar_fill_color":"fd6393","protected":false,"location":"Florida","name":"Kaley DaSilva","profile_sidebar_border_color":"777777","profile_background_tile":true,"url":"http:\/\/www.myspce.com\/445779999","time_zone":"Central Time (US & Canada)","followers_count":167,"profile_background_color":"000000","friends_count":26,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/181690956\/Image1_normal.png","id":18277382,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908230900,"source":"Tweetie<\/a>"} -{"truncated":false,"text":"downloading #MW2 trailer... probably too soon to announce it's inevitable game of the century status though","created_at":"Mon May 25 01:59:06 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":495,"favourites_count":0,"description":null,"screen_name":"dgood","following":null,"utc_offset":-14400,"created_at":"Fri Apr 25 13:51:30 +0000 2008","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":null,"name":"dgood","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":"Santiago","followers_count":22,"profile_background_color":"9ae4e8","friends_count":24,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/114918788\/dev-logo2_normal.png","id":14526473,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908230904,"source":"Gwibber<\/a>"} -{"truncated":false,"text":"Do atheists understand abstract language? http:\/\/tinyurl.com\/q8c34f","created_at":"Mon May 25 01:59:07 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":28871,"favourites_count":0,"description":"I'm the http:\/\/wrongplanet.net twitterbot. Wrong Planet is the site for Autism and Asperger's.","screen_name":"wrongplanet","following":null,"utc_offset":-18000,"created_at":"Mon Mar 10 17:48:31 +0000 2008","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"","name":"wrongplanet","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":"http:\/\/wrongplanet.net","time_zone":"Eastern Time (US & Canada)","followers_count":364,"profile_background_color":"9ae4e8","friends_count":1,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/51694349\/wptip2_normal.gif","id":14115858,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231001,"source":"twitterfeed<\/a>"} -{"truncated":false,"text":"RT @MaryBeth66: RT @pir8gold: maybe we can get biden to reveal the secret location of obamas birth certificate?? #tcot","created_at":"Mon May 25 01:59:07 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":666,"favourites_count":11,"description":"Married to my Best Friend, Father of 2, Conservative, police officer, former Marine, political junkie and lover of all things that make me scream Hell Yeah!","screen_name":"S_Dierwechter","following":null,"utc_offset":-18000,"created_at":"Mon Mar 23 02:53:51 +0000 2009","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/6918533\/1.jpg","profile_sidebar_fill_color":"252429","protected":false,"location":"Lancaster, Pennsylvania","name":"Scott DIerwechter","profile_sidebar_border_color":"181A1E","profile_background_tile":true,"url":"http:\/\/chaoticnation.blogspot.com","time_zone":"Eastern Time (US & Canada)","followers_count":446,"profile_background_color":"1A1B1F","friends_count":553,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/107064380\/s1045267907_30310010_7007_normal.jpeg","id":25939442,"profile_text_color":"666666"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231002,"source":"TweetDeck<\/a>"} -{"text":"The Latest news from DIY Cloud Lamp: \nI love this dreamy DIY cloud lamp made from simple cut.. http:\/\/tinyurl.com\/rxyjvm","created_at":"Mon May 25 01:59:07 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"1f1d1a","description":"For updates on crafting, knitting and on our handmade buttons. Also ETSY and TeamEsst.","screen_name":"TinyArk","following":null,"utc_offset":0,"created_at":"Sat Jan 17 19:36:46 +0000 2009","friends_count":331,"profile_text_color":"161313","notifications":null,"statuses_count":1436,"favourites_count":4,"protected":false,"profile_link_color":"2e2828","location":"Dublin, Dublin City (53.338086","name":"Tinyark","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/4045532\/WOLF125.jpg","profile_sidebar_fill_color":"db4e33","url":"http:\/\/www.TinyArk.Etsy.Com","profile_sidebar_border_color":"820908","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/106273401\/handmadeirish_2_normal.jpg","id":19120894,"time_zone":"Dublin","followers_count":286},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231003,"source":"twitterfeed<\/a>"} -{"text":"@sallads i stopped following the ones saying you were spam LMAO.... -shrugs-","created_at":"Mon May 25 01:59:07 +0000 2009","truncated":false,"in_reply_to_user_id":23342567,"user":{"profile_background_color":"000000","description":"I'm completely random, just so you know... & whatever you wanna know, ASK ME!! (duh)","screen_name":"fyrestorme","following":null,"utc_offset":-18000,"created_at":"Fri Feb 27 22:21:23 +0000 2009","friends_count":329,"profile_text_color":"767b7f","notifications":null,"statuses_count":892,"favourites_count":0,"protected":false,"profile_link_color":"18baec","location":"Kent, Ohio","name":"Sarah Plumley","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/11254120\/fyre.gif","profile_sidebar_fill_color":"000000","url":"http:\/\/www.myspace.com\/sarah_fyre","profile_sidebar_border_color":"181A1E","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/219464505\/Picture_245_normal.jpg","id":22199123,"time_zone":"Eastern Time (US & Canada)","followers_count":140},"favorited":false,"in_reply_to_screen_name":"sallads","in_reply_to_status_id":1908172068,"id":1908231004,"source":"web"} -{"text":"Time to play some president!","created_at":"Mon May 25 01:59:07 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"352726","description":"","screen_name":"palmer_379","following":null,"utc_offset":-18000,"created_at":"Thu Oct 09 00:16:18 +0000 2008","friends_count":22,"profile_text_color":"3E4415","notifications":null,"statuses_count":71,"favourites_count":0,"protected":false,"profile_link_color":"D02B55","location":"","name":"palmer_379","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme5\/bg.gif","profile_sidebar_fill_color":"99CC33","url":"http:\/\/palmer379.blogspot.com","profile_sidebar_border_color":"829D5E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/138708150\/me_edited_normal.JPG","id":16658925,"time_zone":"Quito","followers_count":10},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231101,"source":"web"} -{"truncated":false,"text":"SLAM DUNK\nhttp:\/\/bit.ly\/vkSpJ","created_at":"Mon May 25 01:59:07 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":1425,"favourites_count":2,"description":"A SuperDuppaLion","screen_name":"catherinelaure","following":null,"utc_offset":-18000,"created_at":"Thu Apr 09 23:35:50 +0000 2009","profile_link_color":"9D582E","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme8\/bg.gif","profile_sidebar_fill_color":"EADEAA","protected":false,"location":"","name":"Catherine-Laure ","profile_sidebar_border_color":"D9B17E","profile_background_tile":false,"url":null,"time_zone":"Quito","followers_count":233,"profile_background_color":"8B542B","friends_count":855,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/220027108\/moi_normal.jpg","id":30097902,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231102,"source":"web"} -{"truncated":false,"text":"My friend went to Short sale class in MD and the atty said it is TOTALLY illegal for agents to negotiate with banks. indictments r coming","created_at":"Mon May 25 01:59:07 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":2970,"favourites_count":13,"description":"Savvy, Fun Wife, cancer survivor,wannabe geek, lover of life, Pollyanna, and REALTOR, Gaithersburg Maryland","screen_name":"Audreyforshey","following":null,"utc_offset":-18000,"created_at":"Fri Feb 15 13:59:19 +0000 2008","profile_link_color":"412f42","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/3702192\/red_wallpaper_2.jpg","profile_sidebar_fill_color":"e53873","protected":false,"location":"\u00dcT: 39.157257,-77.213567","name":"AudreyForshey","profile_sidebar_border_color":"471029","profile_background_tile":true,"url":"http:\/\/www.MovinMaryland.com","time_zone":"Eastern Time (US & Canada)","followers_count":1301,"profile_background_color":"642D8B","friends_count":1152,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/189655290\/Audrey4_normal.jpg","id":13515322,"profile_text_color":"3a1b50"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231100,"source":"TweetDeck<\/a>"} -{"text":"Doesn't man have enough necessary ills without increasing them by invention?... http:\/\/bit.ly\/HYfoB","created_at":"Mon May 25 01:59:07 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"83cb72","description":"Follow me and answer to my questions to get points!","screen_name":"YouAnswer","following":null,"utc_offset":-18000,"created_at":"Wed Apr 29 08:29:20 +0000 2009","friends_count":728,"profile_text_color":"333333","notifications":null,"statuses_count":24551,"favourites_count":0,"protected":false,"profile_link_color":"0084B4","location":"USA","name":"I ask, You Answer!","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/11453627\/puntoint.png","profile_sidebar_fill_color":"DDFFCC","url":"http:\/\/www.linkati.com\/q\/","profile_sidebar_border_color":"BDDCAD","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/190135384\/io_normal.png","id":36317416,"time_zone":"Eastern Time (US & Canada)","followers_count":1111},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231103,"source":"web"} -{"truncated":false,"text":"@estemshorn Thanks!","created_at":"Mon May 25 01:59:08 +0000 2009","in_reply_to_user_id":17400827,"favorited":false,"user":{"notifications":null,"statuses_count":703,"favourites_count":0,"description":"I kick ass.","screen_name":"Ganon391","following":null,"utc_offset":-21600,"created_at":"Sat Aug 02 05:19:05 +0000 2008","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/4751847\/1234553569073.png","profile_sidebar_fill_color":"252429","protected":false,"location":"","name":"Ganon391","profile_sidebar_border_color":"181A1E","profile_background_tile":true,"url":null,"time_zone":"Central Time (US & Canada)","followers_count":55,"profile_background_color":"1A1B1F","friends_count":102,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/203636402\/btbam_colors_normal.jpg","id":15698527,"profile_text_color":"666666"},"in_reply_to_screen_name":"estemshorn","in_reply_to_status_id":1908215298,"id":1908231200,"source":"TweetDeck<\/a>"} -{"truncated":false,"text":"@jordanknight Is it Ghandi? is Ghandi still alive??","created_at":"Mon May 25 01:59:08 +0000 2009","in_reply_to_user_id":31001575,"favorited":false,"user":{"notifications":null,"statuses_count":274,"favourites_count":1,"description":"","screen_name":"TNLJV","following":null,"utc_offset":-18000,"created_at":"Fri Feb 20 23:53:52 +0000 2009","profile_link_color":"b40b0d","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/13272473\/new-kid-john.jpg","profile_sidebar_fill_color":"E5507E","protected":false,"location":"Queens, NYC","name":"Theresa Aquilino","profile_sidebar_border_color":"CC3366","profile_background_tile":true,"url":null,"time_zone":"Eastern Time (US & Canada)","followers_count":20,"profile_background_color":"FF6699","friends_count":59,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/128593467\/TnL_normal.jpg","id":21447943,"profile_text_color":"362720"},"in_reply_to_screen_name":"jordanknight","in_reply_to_status_id":1908171479,"id":1908231201,"source":"web"} -{"text":"@Chrissy_L i love that movie! i've been trying to find the beetlejuice cartoons on DVD and i've had NO LUCK :(","created_at":"Mon May 25 01:59:08 +0000 2009","truncated":false,"in_reply_to_user_id":22001146,"user":{"profile_background_color":"1A1B1F","description":"I am me... take it or leave it","screen_name":"iampancakes","following":null,"utc_offset":-28800,"created_at":"Fri Apr 17 20:32:44 +0000 2009","friends_count":66,"profile_text_color":"666666","notifications":null,"statuses_count":1457,"favourites_count":2,"protected":false,"profile_link_color":"2FC2EF","location":"Long Beach, CA","name":"Roxy","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","url":"http:\/\/iampancakes.livejournal.com\/","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/191573712\/twit_normal.jpg","id":32567230,"time_zone":"Pacific Time (US & Canada)","followers_count":53},"favorited":false,"in_reply_to_screen_name":"Chrissy_L","in_reply_to_status_id":1908197430,"id":1908231203,"source":"TwitterFox<\/a>"} -{"text":"Here it comes.","created_at":"Mon May 25 01:59:08 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"352726","description":"The man who passed the anarchist a cigarette.","screen_name":"Jaconius","following":null,"utc_offset":-32400,"created_at":"Sat Sep 20 01:08:49 +0000 2008","friends_count":69,"profile_text_color":"3E4415","notifications":null,"statuses_count":290,"favourites_count":6,"protected":false,"profile_link_color":"D02B55","location":"North Coast","name":"Jake Rochon","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme5\/bg.gif","profile_sidebar_fill_color":"99CC33","url":"http:\/\/gasolinerainbows.wordpress.com","profile_sidebar_border_color":"829D5E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/69964912\/rocknrollah_normal.jpg","id":16372864,"time_zone":"Alaska","followers_count":21},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231202,"source":"web"} -{"text":"RT @LinkedInExpert: LinkedIn tip: Reply to every invitation w\/ a thank you note incl. cool info you give away 4 free & contact info.","created_at":"Mon May 25 01:59:08 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"ffffff","description":"Website development & strategy, Online marketing, social media and return on investment, online revenue. Former radio guy. Oh! Red wine too! ","screen_name":"KurtScholle","following":null,"utc_offset":-21600,"created_at":"Fri Apr 25 13:46:12 +0000 2008","friends_count":1565,"profile_text_color":"000000","notifications":null,"statuses_count":2107,"favourites_count":102,"protected":false,"profile_link_color":"0000ff","location":"Chicago","name":"KurtScholle","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/3417203\/mcicheaderv.jpg","profile_sidebar_fill_color":"fdfe2f","url":"http:\/\/www.Website-ROI-Guy.com","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/198599328\/sobconkurt130_normal.jpg","id":14526422,"time_zone":"Central Time (US & Canada)","followers_count":1674},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231204,"source":"TweetDeck<\/a>"} -{"text":"Shinedown - Second Chance - 09:57 PM visit www.RadioTAGr.com\/WKSE to TAG this song","created_at":"Mon May 25 01:59:09 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":null,"screen_name":"kiss985","following":null,"utc_offset":null,"created_at":"Thu May 21 19:06:15 +0000 2009","friends_count":0,"profile_text_color":"000000","notifications":null,"statuses_count":883,"favourites_count":0,"protected":false,"profile_link_color":"0000ff","location":null,"name":"kiss985","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":null,"profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":41652532,"time_zone":null,"followers_count":33},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231304,"source":"web"} -{"truncated":false,"text":"@Grand_Poobah - I've been corrected on the final score... it was Dishes 104 to Tramps 44. got some photographic evidence on that one! lol","created_at":"Mon May 25 01:59:09 +0000 2009","in_reply_to_user_id":23039714,"favorited":false,"user":{"notifications":null,"statuses_count":25,"favourites_count":1,"description":"Tri City Roller Girls is a Women's Flat-Track Roller Derby league who skate out of Kitchener\/Waterloo\/Cambridge, Ontario, Canada.","screen_name":"TriCityRG","following":null,"utc_offset":-18000,"created_at":"Tue Apr 14 16:57:05 +0000 2009","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","protected":false,"location":"Kitchener, Ontario, Canada","name":"TriCityRollerGirls","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"url":"http:\/\/www.myspace.com\/tricityrollergirls","time_zone":"Quito","followers_count":66,"profile_background_color":"1A1B1F","friends_count":96,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/205651120\/ssso2_normal.jpg","id":31166456,"profile_text_color":"666666"},"in_reply_to_screen_name":"Grand_Poobah","in_reply_to_status_id":1906370245,"id":1908231303,"source":"web"} -{"text":"Win the first NVIDIA ION motherboard!","created_at":"Mon May 25 01:59:09 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":null,"screen_name":"Evade_Tricks","following":null,"utc_offset":null,"created_at":"Mon May 25 01:51:51 +0000 2009","friends_count":1,"profile_text_color":"000000","notifications":null,"statuses_count":2,"favourites_count":0,"protected":false,"profile_link_color":"0000ff","location":null,"name":"Andrew naera","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":null,"profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":42326136,"time_zone":null,"followers_count":0},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231302,"source":"web"} -{"truncated":false,"text":"@cherokeesita","created_at":"Mon May 25 01:59:09 +0000 2009","in_reply_to_user_id":15246964,"favorited":false,"user":{"notifications":null,"statuses_count":1368,"favourites_count":68,"description":"birds, birdwatching and everything in between","screen_name":"burdr","following":null,"utc_offset":-28800,"created_at":"Sat Jan 10 04:14:02 +0000 2009","profile_link_color":"0084B4","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/4564505\/burdr_twitter_forest.jpg","profile_sidebar_fill_color":"fdf7ce","protected":false,"location":"North America","name":"burdr","profile_sidebar_border_color":"BDDCAD","profile_background_tile":false,"url":null,"time_zone":"Pacific Time (US & Canada)","followers_count":2750,"profile_background_color":"9AE4E8","friends_count":2940,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/121478393\/wood_duck_normal.jpg","id":18826472,"profile_text_color":"333333"},"in_reply_to_screen_name":"cherokeesita","in_reply_to_status_id":1908098034,"id":1908231301,"source":"Seesmic Desktop<\/a>"} -{"truncated":false,"text":"@AlexxxxEnglish C-C-C-C-C-COMBO BREAKER!","created_at":"Mon May 25 01:59:09 +0000 2009","in_reply_to_user_id":25626418,"favorited":false,"user":{"notifications":null,"statuses_count":328,"favourites_count":0,"description":"That Nigga","screen_name":"mrwigglesisk1ng","following":null,"utc_offset":-28800,"created_at":"Tue Jan 06 23:39:49 +0000 2009","profile_link_color":"f11334","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/7202122\/Picture_021.jpg","profile_sidebar_fill_color":"000000","protected":false,"location":"North Las Vegas","name":"Wiggles","profile_sidebar_border_color":"000000","profile_background_tile":true,"url":"http:\/\/Joebuddentv.com","time_zone":"Pacific Time (US & Canada)","followers_count":51,"profile_background_color":"000000","friends_count":59,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/192269466\/avatar-body_normal.png","id":18701564,"profile_text_color":"ec2727"},"in_reply_to_screen_name":"AlexxxxEnglish","in_reply_to_status_id":1908203693,"id":1908231300,"source":"web"} -{"truncated":false,"text":"@sminhu3z txt frm 3559 said contact chase n 800 # was automated but asked for the card #, exp , and pin.. identity theft scam","created_at":"Mon May 25 01:59:09 +0000 2009","in_reply_to_user_id":39657405,"favorited":false,"user":{"notifications":null,"statuses_count":62,"favourites_count":0,"description":"MAD explosive spontaneity... inky artsy...fuccin amazing...no...really...it's tatu mu ya'll...tweet tweet bitches","screen_name":"lilblumunchkin","following":null,"utc_offset":-25200,"created_at":"Mon Feb 16 18:25:50 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"Houston","name":"Munit Tadesse","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":"http:\/\/www.myspace.com\/da_tru_mu","time_zone":"Mountain Time (US & Canada)","followers_count":34,"profile_background_color":"9ae4e8","friends_count":54,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/78904390\/IMG00385_normal.JPG","id":21010512,"profile_text_color":"000000"},"in_reply_to_screen_name":"sminhu3z","in_reply_to_status_id":null,"id":1908231403,"source":"mobile web<\/a>"} -{"text":"Wow hes voice is amazinq!!! Hehe lol idk!!! ILY!!! x3 \nboredom can resolve too many thinqs....","created_at":"Mon May 25 01:59:09 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"1A1B1F","description":"Into Rock, Sports, Friends, Art, Poetry and the best for last Church","screen_name":"NancyAzc","following":null,"utc_offset":-18000,"created_at":"Sun May 17 15:41:51 +0000 2009","friends_count":21,"profile_text_color":"666666","notifications":null,"statuses_count":63,"favourites_count":0,"protected":false,"profile_link_color":"2FC2EF","location":"Lost In My Own World","name":"Nancy Azcona ","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","url":"http:\/\/www.myspace.com\/mannythefinest","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/227625558\/l_01a3e484bea44341a7b36b784d16e9ac_normal.jpg","id":40678928,"time_zone":"Quito","followers_count":22},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231401,"source":"web"} -{"truncated":false,"text":"back from Half Moon Lake. -exhausted.","created_at":"Mon May 25 01:59:09 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":192,"favourites_count":0,"description":"21 years old. Single. Born and raised in South Texas. Daily blogger. Visit my Myspace page to view my photos,music,blog lists and more @ the web address above.","screen_name":"krystaltrev","following":null,"utc_offset":-21600,"created_at":"Wed May 06 05:08:20 +0000 2009","profile_link_color":"D02B55","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme5\/bg.gif","profile_sidebar_fill_color":"99CC33","protected":false,"location":"Wy.\/Texas","name":"Krystal aka CHiCHi","profile_sidebar_border_color":"829D5E","profile_background_tile":false,"url":"http:\/\/www.myspace.com\/krystaltrev","time_zone":"Central Time (US & Canada)","followers_count":30,"profile_background_color":"352726","friends_count":59,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/214231506\/0506092225-1_1__normal.jpg","id":38119148,"profile_text_color":"3E4415"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231404,"source":"web"} -{"text":"I make fun of Baby Boomer-geared commercials now... - but with my luck, I\u2019m going to require all those damn... http:\/\/tumblr.com\/xbi1v06cr","created_at":"Mon May 25 01:59:09 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"EBEBEB","description":"Don't listen to anything I say. Associate editor for MyPre.com SlashGear.com and PhoneMag.com. Recently Graduated Cum Laude from ASU.","screen_name":"StevenGrady","following":null,"utc_offset":-25200,"created_at":"Tue Oct 28 05:04:52 +0000 2008","friends_count":166,"profile_text_color":"333333","notifications":null,"statuses_count":1006,"favourites_count":1,"protected":false,"profile_link_color":"990000","location":"Tempe, AZ","name":"Steven Grady","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme7\/bg.gif","profile_sidebar_fill_color":"F3F3F3","url":"http:\/\/www.mypre.com","profile_sidebar_border_color":"DFDFDF","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/220257120\/DSCF0034_normal.JPG","id":17015960,"time_zone":"Arizona","followers_count":118},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231402,"source":"Tumblr<\/a>"} -{"truncated":false,"text":"http:\/\/twitpic.com\/5wa8b - NeoAmour Collection: Boudicca's Coins Necklace with sterling silver and copper, handmade by me","in_reply_to_user_id":null,"favorited":false,"created_at":"Mon May 25 01:59:09 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231400,"user":{"friends_count":2001,"location":"Ontario, Canada","utc_offset":-21600,"profile_text_color":"362720","notifications":null,"statuses_count":172,"favourites_count":0,"following":null,"profile_link_color":"B40B43","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/12163881\/bg.gif","description":"Artist, jewellery maker, photographer, child of nature, bookworm and animal lover. New Vegan and LOVING it!","name":"Meghann LittleStudio","profile_sidebar_fill_color":"E5507E","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/198511923\/twittermeg_normal.jpg","created_at":"Sat Jan 03 00:03:41 +0000 2009","profile_sidebar_border_color":"CC3366","screen_name":"meglittlestudio","profile_background_tile":true,"time_zone":"Central Time (US & Canada)","followers_count":1181,"id":18568005,"profile_background_color":"FF6699","url":"http:\/\/www.etsy.com\/shop.php?user_id=6101001"},"source":"TwitPic<\/a>"} -{"text":"just got home from an amazing day with Family but exhausted.","created_at":"Mon May 25 01:59:10 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"1A1B1F","description":"Discipling leaders of today to change the world tomorrow of all ages","screen_name":"Jennvin","following":null,"utc_offset":-18000,"created_at":"Mon Oct 06 16:00:35 +0000 2008","friends_count":76,"profile_text_color":"666666","notifications":null,"statuses_count":1204,"favourites_count":0,"protected":false,"profile_link_color":"2FC2EF","location":"Gettysburg, PA","name":"JennV","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","url":"http:\/\/jenn-vintigni.blogspot.com\/","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/119266705\/Flawless_normal.jpg","id":16615450,"time_zone":"Quito","followers_count":71},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231500,"source":"web"} -{"truncated":false,"text":"http:\/\/www.hotel626.com\/ < fui ver de novo! \u00c9 real demaais! =x","created_at":"Mon May 25 01:59:10 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":51,"favourites_count":0,"description":null,"screen_name":"joaop789","following":null,"utc_offset":null,"created_at":"Sun May 03 06:58:31 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":null,"name":"joao789","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":null,"followers_count":11,"profile_background_color":"9ae4e8","friends_count":28,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":37381523,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231501,"source":"web"} -{"text":"@tokushima \u30ca\u30f3","created_at":"Mon May 25 01:59:10 +0000 2009","truncated":false,"in_reply_to_user_id":3594851,"user":{"profile_background_color":"9ae4e8","description":"\u4eca\u306b\u3082\u843d\u3061\u3066\u304d\u305d\u3046\u306a\u7a7a\u306e\u4e0b\u3067","screen_name":"venten","following":null,"utc_offset":32400,"created_at":"Thu Jul 26 10:43:33 +0000 2007","friends_count":44,"profile_text_color":"000000","notifications":null,"statuses_count":941,"favourites_count":0,"protected":false,"profile_link_color":"0000ff","location":"","name":"venten","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":null,"profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/25800412\/___1_normal.jpg","id":7733732,"time_zone":"Tokyo","followers_count":54},"favorited":false,"in_reply_to_screen_name":"tokushima","in_reply_to_status_id":1908219699,"id":1908231502,"source":"web"} -{"truncated":false,"text":"@netta50 LMAO an assistant in a speedo...that sounds dangerous; for the assistant. hot irons, chemicals all that bare skin? hmmm","created_at":"Mon May 25 01:59:11 +0000 2009","in_reply_to_user_id":14369064,"favorited":false,"user":{"notifications":null,"statuses_count":1013,"favourites_count":45,"description":"I'm actually very shy. :)","screen_name":"SocialDivo","following":null,"utc_offset":-18000,"created_at":"Mon Mar 03 21:54:50 +0000 2008","profile_link_color":"fa0003","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/14451447\/SocialDivo.jpg","profile_sidebar_fill_color":"591812","protected":false,"location":"Alpharetta, GA","name":"divO","profile_sidebar_border_color":"000000","profile_background_tile":false,"url":"http:\/\/socialdivo.blogspot.com\/","time_zone":"Eastern Time (US & Canada)","followers_count":1712,"profile_background_color":"9f2004","friends_count":1646,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/226846651\/1968_normal.jpg","id":14074743,"profile_text_color":"f4811f"},"in_reply_to_screen_name":"netta50","in_reply_to_status_id":1902991260,"id":1908231604,"source":"web"} -{"truncated":false,"text":"chillin in my car with my bffs don and kim","created_at":"Mon May 25 01:59:11 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":4,"favourites_count":0,"description":null,"screen_name":"RiiCHBOii","following":null,"utc_offset":null,"created_at":"Sat May 23 23:24:57 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":null,"name":"Richard Hutchinson ","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":null,"followers_count":2,"profile_background_color":"9ae4e8","friends_count":9,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":42118940,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231603,"source":"mobile web<\/a>"} -{"truncated":false,"text":"apparently @astro_mike emails his updates to houston, then nasa emp post to his twitter. so, technically not twittering from space","created_at":"Mon May 25 01:59:11 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":50,"favourites_count":1,"description":"residential\/small business computer repairs -- Go Cowboys, Go Yankees","screen_name":"sherrih999","following":null,"utc_offset":-18000,"created_at":"Tue Mar 10 19:57:44 +0000 2009","profile_link_color":"0099B9","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme4\/bg.gif","profile_sidebar_fill_color":"95E8EC","protected":false,"location":"","name":"Sherri","profile_sidebar_border_color":"5ED4DC","profile_background_tile":false,"url":null,"time_zone":"Quito","followers_count":19,"profile_background_color":"0099B9","friends_count":26,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/138233619\/bev_and_sherri__fixed__normal.jpg","id":23642930,"profile_text_color":"3C3940"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231600,"source":"TweetDeck<\/a>"} -{"truncated":false,"text":"@girlsaresexy u go sexy!!!","created_at":"Mon May 25 01:59:11 +0000 2009","in_reply_to_user_id":28955841,"favorited":false,"user":{"notifications":null,"statuses_count":521,"favourites_count":0,"description":"african barbie \/ mirror addict \/ wannabe diva\/ undercover geek \/ girlgroup boss \/ dancing queen \/ vocal acrobat \/ bedroom gymnast \/ amaaaaazing person haha","screen_name":"KissezToniYo","following":null,"utc_offset":0,"created_at":"Thu Mar 05 22:18:17 +0000 2009","profile_link_color":"580b99","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/14347981\/anime1.jpg","profile_sidebar_fill_color":"fd3ae3","protected":false,"location":"london","name":"kisela berice","profile_sidebar_border_color":"000000","profile_background_tile":true,"url":"http:\/\/www.myspace.com\/belleantonio","time_zone":"London","followers_count":54,"profile_background_color":"9AE4E8","friends_count":35,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/227349613\/4393_1098249068581_1597281823_221244_7288490_n_normal.jpg","id":22988771,"profile_text_color":"000000"},"in_reply_to_screen_name":"girlsaresexy","in_reply_to_status_id":1906925160,"id":1908231601,"source":"web"} -{"in_reply_to_user_id":null,"text":"Omg i just won $500!!","favorited":false,"created_at":"Mon May 25 01:59:11 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231602,"user":{"profile_link_color":"990000","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme7\/bg.gif","utc_offset":-28800,"profile_sidebar_fill_color":"F3F3F3","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/124502596\/123656813753985_normal.jpg","following":null,"created_at":"Mon Apr 06 15:23:14 +0000 2009","profile_sidebar_border_color":"DFDFDF","description":"","screen_name":"JusCallMeV","name":"Vanessa Ruiz","profile_background_tile":false,"protected":false,"time_zone":"Pacific Time (US & Canada)","followers_count":2,"profile_background_color":"EBEBEB","friends_count":6,"location":"California","profile_text_color":"333333","id":29221249,"notifications":null,"statuses_count":104,"favourites_count":0,"url":null},"truncated":false,"source":"txt<\/a>"} -{"text":"http:\/\/twitpic.com\/5wa8f - Massage time ensues","created_at":"Mon May 25 01:59:12 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"352726","description":"i don't know what this \"twitter\" thing is, but a bird just flew into my front window so i think i can handle it.","screen_name":"shesteiny","following":null,"utc_offset":-21600,"created_at":"Fri Aug 01 18:16:39 +0000 2008","friends_count":88,"profile_text_color":"3E4415","notifications":null,"statuses_count":1316,"favourites_count":0,"protected":false,"profile_link_color":"D02B55","location":"Chicago, IL","name":"rachel steinmeier","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme5\/bg.gif","profile_sidebar_fill_color":"99CC33","url":null,"profile_sidebar_border_color":"829D5E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/64853748\/Picture_609_normal.jpg","id":15692358,"time_zone":"Central Time (US & Canada)","followers_count":107},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231701,"source":"TwitPic<\/a>"} -{"truncated":false,"text":"How about mr grown ass man wit 2 poofs on each side of his head...","created_at":"Mon May 25 01:59:12 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":487,"favourites_count":2,"description":"LoViNg Me!","screen_name":"MissPhenomenal","following":null,"utc_offset":-18000,"created_at":"Fri Mar 27 03:45:48 +0000 2009","profile_link_color":"FF0000","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme10\/bg.gif","profile_sidebar_fill_color":"7AC3EE","protected":false,"location":"Some-nice-place, New York","name":"Phylicia B.","profile_sidebar_border_color":"65B0DA","profile_background_tile":true,"url":null,"time_zone":"Eastern Time (US & Canada)","followers_count":39,"profile_background_color":"642D8B","friends_count":36,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/212468846\/pheandarie_normal.jpg","id":26942551,"profile_text_color":"3D1957"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231700,"source":"txt<\/a>"} -{"truncated":false,"text":"Heading to the Walmarket to rent Paul Blart: Mall Cop!","created_at":"Mon May 25 01:59:12 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":31,"favourites_count":0,"description":"","screen_name":"redavis47","following":null,"utc_offset":-21600,"created_at":"Fri May 08 20:53:11 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"Memphis, TN","name":"Eddie Davis","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":"Central Time (US & Canada)","followers_count":17,"profile_background_color":"9ae4e8","friends_count":19,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/203849318\/Video_Snapshot-1_normal.jpeg","id":38741973,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231704,"source":"TwitterBerry<\/a>"} -{"text":"@dandahia A melhor forma de ver #24Horas \u00e9 fazendo \"maratona\": pegar um fds e ver TUDO direto.","created_at":"Mon May 25 01:59:12 +0000 2009","truncated":false,"in_reply_to_user_id":16703051,"user":{"profile_background_color":"9AE4E8","description":"","screen_name":"whinstonr","following":null,"utc_offset":-10800,"created_at":"Thu Nov 27 14:02:44 +0000 2008","friends_count":100,"profile_text_color":"333333","notifications":null,"statuses_count":2031,"favourites_count":35,"protected":false,"profile_link_color":"0084B4","location":"Mat\u00e3o, S\u00e3o Paulo","name":"whinston rodrigues","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"DDFFCC","url":"http:\/\/www.pontogeek.com.br","profile_sidebar_border_color":"BDDCAD","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/65642552\/foto_msn_gde_normal.jpg","id":17678476,"time_zone":"Brasilia","followers_count":202},"favorited":false,"in_reply_to_screen_name":"dandahia","in_reply_to_status_id":1908204017,"id":1908231703,"source":"Tweetie<\/a>"} -{"truncated":false,"text":"@JuliaRymut Thanks Julia! This forum is great for helping others. #rpro","created_at":"Mon May 25 01:59:12 +0000 2009","in_reply_to_user_id":20571141,"favorited":false,"user":{"notifications":null,"statuses_count":361,"favourites_count":13,"description":"Layed Off fromFord, Now I Enjoy My Business, Having Fun \/ Helping Others. http:\/\/www.annetobel.com ","screen_name":"annethemavmktr","following":null,"utc_offset":-18000,"created_at":"Sun Nov 16 20:56:18 +0000 2008","profile_link_color":"FF0000","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme10\/bg.gif","profile_sidebar_fill_color":"f7daf4","protected":false,"location":"Michigan ","name":"Anne Tobel","profile_sidebar_border_color":"65B0DA","profile_background_tile":true,"url":"http:\/\/www.tinyurl.com\/dk99jy","time_zone":"Eastern Time (US & Canada)","followers_count":682,"profile_background_color":"642D8B","friends_count":685,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/150251040\/TobelAndrea3--July2001_normal.jpg","id":17427717,"profile_text_color":"3D1957"},"in_reply_to_screen_name":"JuliaRymut","in_reply_to_status_id":1908225486,"id":1908231803,"source":"TweetChat<\/a>"} -{"truncated":false,"text":"its funny how you can be hyper on the internet but feel like shit irl.. whatever tho.. #humpthestump #humpthestump #humpthestump","created_at":"Mon May 25 01:59:12 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":26,"favourites_count":17,"description":null,"screen_name":"xClan_Destine","following":null,"utc_offset":null,"created_at":"Tue Apr 14 15:12:45 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":null,"name":"Gee Stegall","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":null,"followers_count":3,"profile_background_color":"9ae4e8","friends_count":12,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/198707923\/james_normal.bmp","id":31143059,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231804,"source":"web"} -{"truncated":false,"text":"Des'Ree - You Gotta Be - 07:56 PM visit www.RadioTAGr.com\/KPEK to TAG this song","created_at":"Mon May 25 01:59:12 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":619,"favourites_count":0,"description":null,"screen_name":"1003thepeak","following":null,"utc_offset":null,"created_at":"Thu May 21 22:17:53 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":null,"name":"1003thepeak","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":null,"followers_count":43,"profile_background_color":"9ae4e8","friends_count":0,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":41690643,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231801,"source":"web"} -{"truncated":false,"text":"need to patch up on signing,could not read that convo!","created_at":"Mon May 25 01:59:12 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":665,"favourites_count":0,"description":"Living a crazy dream (in theory). I love Cheese and Audrey Hepburn films!","screen_name":"RyKas","following":null,"utc_offset":0,"created_at":"Wed Feb 11 20:10:15 +0000 2009","profile_link_color":"0099B9","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme4\/bg.gif","profile_sidebar_fill_color":"95E8EC","protected":false,"location":"London","name":"Emily Lynham","profile_sidebar_border_color":"5ED4DC","profile_background_tile":false,"url":null,"time_zone":"London","followers_count":30,"profile_background_color":"0099B9","friends_count":35,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/217114606\/em_normal.jpg","id":20622239,"profile_text_color":"3C3940"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231802,"source":"mobile web<\/a>"} -{"truncated":false,"text":"@HiMYSYeD Yay! Glad to hear it. Thanks for the update. Have to stop by next time I'm out that way.","created_at":"Mon May 25 01:59:13 +0000 2009","in_reply_to_user_id":17450799,"favorited":false,"user":{"notifications":null,"statuses_count":9717,"favourites_count":133,"description":"Ex-yurt dwelling, mostly vegetarian, fundamentalist agnostic, US expatriate, carfree unschooling parent who works for the man by day and against him by night.","screen_name":"toddtyrtle","following":null,"utc_offset":-18000,"created_at":"Wed Dec 12 13:26:40 +0000 2007","profile_link_color":"D02B55","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme5\/bg.gif","profile_sidebar_fill_color":"99CC33","protected":false,"location":"Toronto, ON","name":"toddtyrtle","profile_sidebar_border_color":"829D5E","profile_background_tile":false,"url":"http:\/\/tyrtle.wordpress.com","time_zone":"Eastern Time (US & Canada)","followers_count":384,"profile_background_color":"352726","friends_count":168,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/74364230\/avatar_normal.jpg","id":11087042,"profile_text_color":"3E4415"},"in_reply_to_screen_name":"HiMYSYeD","in_reply_to_status_id":1907659331,"id":1908231901,"source":"web"} -{"truncated":false,"text":"@InstantBinary Super, thanks. Does @InstantBinary specialize in iPhone development?","created_at":"Mon May 25 01:59:13 +0000 2009","in_reply_to_user_id":31709567,"favorited":false,"user":{"notifications":null,"statuses_count":348,"favourites_count":15,"description":"Joint Contact product founder, active blogger, instructor, software engineer","screen_name":"jointcontact","following":null,"utc_offset":-28800,"created_at":"Sat May 24 15:04:15 +0000 2008","profile_link_color":"B9670F","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/2796684\/clouds.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"Seattle, WA","name":"Wayne Bishop","profile_sidebar_border_color":"87bc44","profile_background_tile":true,"url":"http:\/\/www.jointcontact.com","time_zone":"Pacific Time (US & Canada)","followers_count":121,"profile_background_color":"9ae4e8","friends_count":69,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/66499045\/waynebishop_twitter_normal.jpg","id":14891638,"profile_text_color":"000000"},"in_reply_to_screen_name":"InstantBinary","in_reply_to_status_id":1902461860,"id":1908231902,"source":"Tweetie<\/a>"} -{"text":"@fourzerotwo RT http:\/\/zz.gd\/235764 - The first Modern Warfare 2 Trailer IS LIVE!! Watch it in all its HD glory and uncut form! #MW2 YES SIR","created_at":"Mon May 25 01:59:13 +0000 2009","truncated":false,"in_reply_to_user_id":3359851,"user":{"profile_background_color":"1A1B1F","description":"Im Zac, I have friends. I Like Xbox and Hockey a lot. Goodbye. ","screen_name":"ZS_v2","following":null,"utc_offset":-18000,"created_at":"Thu Oct 02 03:09:26 +0000 2008","friends_count":155,"profile_text_color":"666666","notifications":null,"statuses_count":2406,"favourites_count":20,"protected":false,"profile_link_color":"2FC2EF","location":"North Kingstown, RI","name":"Zac Sheehan","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/8124990\/avatar-body.png","profile_sidebar_fill_color":"252429","url":null,"profile_sidebar_border_color":"181A1E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/106865055\/Aviators_mirror_suns._normal.jpg","id":16554601,"time_zone":"Eastern Time (US & Canada)","followers_count":148},"favorited":false,"in_reply_to_screen_name":"fourzerotwo","in_reply_to_status_id":1908214539,"id":1908231900,"source":"web"} -{"truncated":false,"text":"\u4eac\u6975\u590f\u5f66\u306e\u300c\u53ad\u306a\u5c0f\u8aac\u300d\u304c\u672c\u5f53\u306b\u53ad\u306a\u5c0f\u8aac\u3067\u7b11\u3063\u305f\u3002\u307e\u3060\u8aad\u3093\u3067\u306a\u3044\u3051\u3069\u3001\u624b\u306b\u3068\u3063\u305f\u3060\u3051\u3067\u300c\u3046\u308f\u3001\u53ad\u306a\u672c\uff01\u300d\u3063\u3066\u306a\u308b\u3002\u3055\u3059\u304c\u4eac\u6975\u8179\u9ed2\u3044\uff08\u826f\u3044\u610f\u5473\u3067\uff09","created_at":"Mon May 25 01:59:13 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":1196,"favourites_count":23,"description":"\u8da3\u5473\u7d75\u63cf\u304d\u3067\u3059\u3002","screen_name":"phi_01","following":null,"utc_offset":-36000,"created_at":"Fri Jul 04 00:29:37 +0000 2008","profile_link_color":"0099B9","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/8604289\/chobi.jpg","profile_sidebar_fill_color":"dedede","protected":false,"location":"\u65e5\u672c","name":"mato","profile_sidebar_border_color":"5ba6dc","profile_background_tile":true,"url":"http:\/\/chirol85.blog39.fc2.com\/","time_zone":"Hawaii","followers_count":85,"profile_background_color":"ffffff","friends_count":73,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/212147877\/pixiv16_normal.jpg","id":15313899,"profile_text_color":"3C3940"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231903,"source":"web"} -{"truncated":false,"text":"I'm watching Mystery on PBS.","in_reply_to_user_id":null,"favorited":false,"created_at":"Mon May 25 01:59:13 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908231904,"user":{"friends_count":12,"location":"American Southwest","utc_offset":-25200,"profile_text_color":"333333","notifications":null,"statuses_count":12,"favourites_count":0,"following":null,"profile_link_color":"990000","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme7\/bg.gif","description":"Fear Film Fan","name":"Stephen Houser","profile_sidebar_fill_color":"F3F3F3","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/228933614\/Photo_4_normal.jpg","created_at":"Mon Apr 13 03:42:24 +0000 2009","profile_sidebar_border_color":"DFDFDF","screen_name":"SVH_Man","profile_background_tile":false,"time_zone":"Mountain Time (US & Canada)","followers_count":4,"id":30799794,"profile_background_color":"EBEBEB","url":null},"source":"web"} -{"text":"Ahhhhhhhhhhhh!","created_at":"Mon May 25 01:59:14 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":"","screen_name":"JaredPicot","following":null,"utc_offset":-18000,"created_at":"Tue Mar 03 14:38:24 +0000 2009","friends_count":12,"profile_text_color":"000000","notifications":null,"statuses_count":92,"favourites_count":1,"protected":false,"profile_link_color":"0000ff","location":"iPhone: 35.571156,-77.328499","name":"Jared ","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":null,"profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":22629298,"time_zone":"Quito","followers_count":14},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232000,"source":"TwitterFon<\/a>"} -{"truncated":false,"text":"Do You Want Fries With That Logo? | How-To | Smashing Magazine: Worse comes to worse, take the work home and do .. http:\/\/bit.ly\/eGFZ9","created_at":"Mon May 25 01:59:14 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":1272,"favourites_count":1,"description":"Writer, PR Consultant, Internet Entrepreneur, Life Coach, living with ME\/CFS - and I make a great cuppa!","screen_name":"catcassels","following":null,"utc_offset":0,"created_at":"Thu Feb 12 22:03:09 +0000 2009","profile_link_color":"FF0000","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/11449308\/8982_background.jpg","profile_sidebar_fill_color":"7AC3EE","protected":false,"location":"Edinburgh, Scotland","name":"Cat Cassels","profile_sidebar_border_color":"65B0DA","profile_background_tile":false,"url":null,"time_zone":"Edinburgh","followers_count":3335,"profile_background_color":"642D8B","friends_count":3669,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/207843781\/mecfs-05_8jsx_normal.png","id":20724218,"profile_text_color":"3D1957"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232001,"source":"twitterfeed<\/a>"} -{"text":"#nycrealestate FHA in Manhattan: Created about 1 hour ago http:\/\/tinyurl.com\/pm83se","created_at":"Mon May 25 01:59:14 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"1A1B1F","description":"Here to provide you with live real estate updates in NYC","screen_name":"nyc_realestate","following":null,"utc_offset":-18000,"created_at":"Wed Mar 04 04:36:21 +0000 2009","friends_count":1335,"profile_text_color":"666666","notifications":null,"statuses_count":2535,"favourites_count":1,"protected":false,"profile_link_color":"2FC2EF","location":"New York City","name":"NYC Real Estate","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","url":null,"profile_sidebar_border_color":"181A1E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/89359112\/NYCbuilding_normal.jpg","id":22734109,"time_zone":"Eastern Time (US & Canada)","followers_count":1361},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232002,"source":"twitterfeed<\/a>"} -{"text":"sin and mainly our secret sin no one know,but Him.Reading the Word and skipping all through it to your favorite verse.The bible teaches all","created_at":"Mon May 25 01:59:14 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"642D8B","description":"I live for the salvation of ALL.","screen_name":"Realword","following":null,"utc_offset":-21600,"created_at":"Tue Apr 07 04:13:49 +0000 2009","friends_count":386,"profile_text_color":"3D1957","notifications":null,"statuses_count":18,"favourites_count":5,"protected":false,"profile_link_color":"FF0000","location":"realword13@yahoo.com","name":"David For Word","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/9053606\/Sunset.jpg","profile_sidebar_fill_color":"7AC3EE","url":"http:\/\/tangle.com\/Realword","profile_sidebar_border_color":"65B0DA","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/139232291\/Sunset_normal.jpg","id":29380226,"time_zone":"Central Time (US & Canada)","followers_count":291},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232104,"source":"web"} -{"text":"Welcome to the Siegel Band twitter! It'll be pretty boring now, but this fall, this baby will be humming with updates of your favorite band!","created_at":"Mon May 25 01:59:14 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"001047","description":"The Award-Winning Siegel High School Band, from Murfreesboro, Tennessee.","screen_name":"SiegelBand","following":null,"utc_offset":-21600,"created_at":"Mon May 25 01:48:42 +0000 2009","friends_count":0,"profile_text_color":"000000","notifications":null,"statuses_count":1,"favourites_count":0,"protected":false,"profile_link_color":"207acf","location":"Murfreesboro, Tennessee","name":"Siegel Band","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/14515102\/HeaderPNG.png","profile_sidebar_fill_color":"20cfa4","url":"http:\/\/www.siegelband.org\/","profile_sidebar_border_color":"159be5","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/228926023\/20081018Hoover-43_normal.JPG","id":42325628,"time_zone":"Central Time (US & Canada)","followers_count":0},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232103,"source":"web"} -{"text":"New Years Resolutions are not my thing... i prefer Summer Resolutions.\r \r Mine is to READ more! =) \r \r What are... http:\/\/tinyurl.com\/phr7f9","created_at":"Mon May 25 01:59:14 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"EBEBEB","description":"My name is gary...I'm over high school...i love hearts with a passion...and my fav thing in the world is dancing? =)","screen_name":"ForSeriousGary","following":null,"utc_offset":-28800,"created_at":"Fri Sep 26 23:00:21 +0000 2008","friends_count":300,"profile_text_color":"333333","notifications":null,"statuses_count":3751,"favourites_count":49,"protected":false,"profile_link_color":"e31679","location":"San Diego, CA","name":"Gary Schudel","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/10373967\/Pic.jpg","profile_sidebar_fill_color":"F3F3F3","url":"http:\/\/www.dailybooth.com\/ForSeriousGary","profile_sidebar_border_color":"DFDFDF","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/185802124\/Pic3_normal.png","id":16476638,"time_zone":"Pacific Time (US & Canada)","followers_count":244},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232100,"source":"web"} -{"truncated":false,"text":"Gosh darnit! This box doesn't have a chart!!","in_reply_to_user_id":null,"favorited":false,"created_at":"Mon May 25 01:59:15 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232202,"user":{"friends_count":15,"location":"New York","utc_offset":-18000,"profile_text_color":"333333","notifications":null,"statuses_count":429,"favourites_count":0,"following":null,"profile_link_color":"990000","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme7\/bg.gif","description":"","name":"Mean Makeen","profile_sidebar_fill_color":"F3F3F3","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/110784040\/IMG00052_normal.jpg","created_at":"Tue Mar 24 17:59:29 +0000 2009","profile_sidebar_border_color":"DFDFDF","screen_name":"MeanMakeen","profile_background_tile":false,"time_zone":"Eastern Time (US & Canada)","followers_count":20,"id":26285437,"profile_background_color":"EBEBEB","url":"http:\/\/www.myspace.com\/keewee_pashun"},"source":"UberTwitter<\/a>"} -{"truncated":false,"text":"bestnya chilling!","created_at":"Mon May 25 01:59:15 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":7,"favourites_count":0,"description":"","screen_name":"grafreak","following":null,"utc_offset":28800,"created_at":"Wed May 20 08:55:35 +0000 2009","profile_link_color":"db00c4","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/13704170\/bc.jpg","profile_sidebar_fill_color":"ffffff","protected":false,"location":"malaysia","name":"shukry","profile_sidebar_border_color":"ffffff","profile_background_tile":false,"url":null,"time_zone":"Kuala Lumpur","followers_count":1,"profile_background_color":"ffffff","friends_count":1,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/220350665\/DSC01393_normal.JPG","id":41323973,"profile_text_color":"00aff0"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232201,"source":"TwitterFox<\/a>"} -{"text":"@RosevilleRockLn Nap time is the best! So peaceful :)","created_at":"Mon May 25 01:59:15 +0000 2009","truncated":false,"in_reply_to_user_id":14234689,"user":{"profile_background_color":"352726","description":"Virtual Assistant, background in homebuilding \/ design center, Tupperware Consultant","screen_name":"DevonZimny","following":null,"utc_offset":-32400,"created_at":"Mon Mar 02 03:02:12 +0000 2009","friends_count":452,"profile_text_color":"3E4415","notifications":null,"statuses_count":328,"favourites_count":0,"protected":false,"profile_link_color":"D02B55","location":"Sacramento, Ca","name":"Devon Noon Zimny","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/13150059\/twitter_background_2.jpg","profile_sidebar_fill_color":"99CC33","url":"http:\/\/www.vintage-va.com","profile_sidebar_border_color":"829D5E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/85526077\/mom_and_grace_normal.jpg","id":22442925,"time_zone":"Alaska","followers_count":394},"favorited":false,"in_reply_to_screen_name":"RosevilleRockLn","in_reply_to_status_id":1907233617,"id":1908232200,"source":"TweetDeck<\/a>"} -{"text":"This weekend was so much fun but I am very tired so I'm off to my crate for a nap...hope all my dog friends had fun as well...nighty night.","created_at":"Mon May 25 01:59:15 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9AE4E8","description":"Eat. Sleep. Play. Chase squirrels. Exude cuteness. Lick. Sleep.","screen_name":"BluetheDawg","following":null,"utc_offset":-18000,"created_at":"Thu Mar 19 14:14:40 +0000 2009","friends_count":96,"profile_text_color":"3f1d18","notifications":null,"statuses_count":128,"favourites_count":0,"protected":false,"profile_link_color":"ec0e90","location":"Toronto, Canada","name":"Blue Mitchell","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/6165475\/blue-face.jpg","profile_sidebar_fill_color":"95d9e4","url":"http:\/\/twitter.com\/BluetheDawg","profile_sidebar_border_color":"ecf1e9","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/103153025\/blue-face_normal.jpg","id":25301629,"time_zone":"Quito","followers_count":108},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232203,"source":"web"} -{"truncated":false,"text":"@LaurenConrad It's not the pen that's making you look lame.... ha ha ha...","created_at":"Mon May 25 01:59:15 +0000 2009","in_reply_to_user_id":34097876,"favorited":false,"user":{"notifications":null,"statuses_count":131,"favourites_count":0,"description":"","screen_name":"patide","following":null,"utc_offset":-28800,"created_at":"Fri May 01 05:16:03 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"St. Catharines, Ontario","name":"David Pattison","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":"Pacific Time (US & Canada)","followers_count":14,"profile_background_color":"9ae4e8","friends_count":6,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/193067828\/Image0010_normal.JPG","id":36889869,"profile_text_color":"000000"},"in_reply_to_screen_name":"LaurenConrad","in_reply_to_status_id":1907521122,"id":1908232204,"source":"web"} -{"text":"@TheLifeofPower NIST, CIA, community of engineers, Robert Baer, and thousands of government employees just to name a few.","created_at":"Mon May 25 01:59:16 +0000 2009","truncated":false,"in_reply_to_user_id":25168462,"user":{"profile_background_color":"642D8B","description":"Christian Jedi...political blogger...enjoys converting people from the dark side...entrepeneur, recruiter, Trekkie, football fan, #icon","screen_name":"JediMaster_OPS","following":null,"utc_offset":-21600,"created_at":"Sat Feb 21 17:31:01 +0000 2009","friends_count":6433,"profile_text_color":"3D1957","notifications":null,"statuses_count":3249,"favourites_count":37,"protected":false,"profile_link_color":"FF0000","location":"Baton Rouge, LA","name":"Joshua Ecuyer","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/6629383\/twitBGcyClk2.jpg","profile_sidebar_fill_color":"7AC3EE","url":"http:\/\/jedimasterofpolitics.blogspot.com\/","profile_sidebar_border_color":"65B0DA","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/81107790\/Star-Wars-Icons-star-wars-3663970-100-100_normal.jpg","id":21501255,"time_zone":"Central Time (US & Canada)","followers_count":6068},"favorited":false,"in_reply_to_screen_name":"TheLifeofPower","in_reply_to_status_id":1908211741,"id":1908232302,"source":"web"} -{"text":"@terryxxy twitterfox\u6ca1\u89c1\u6709\u81ea\u52a8\u66f4\u65b0\u52301.8\uff0c\u8981\u53e6\u5916\u4e0b\u8f7d\u5b89\u88c5\uff1f","created_at":"Mon May 25 01:59:16 +0000 2009","truncated":false,"in_reply_to_user_id":9120922,"user":{"profile_background_color":"709397","description":"qxinxing\u7684PHO.TO","screen_name":"qxinxing","following":null,"utc_offset":28800,"created_at":"Wed Jan 28 15:49:45 +0000 2009","friends_count":44,"profile_text_color":"333333","notifications":null,"statuses_count":369,"favourites_count":3,"protected":false,"profile_link_color":"FF3300","location":"nanning","name":"qxinxing","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme6\/bg.gif","profile_sidebar_fill_color":"A0C5C7","url":"http:\/\/qxinxing.blogspot.com","profile_sidebar_border_color":"86A4A6","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/73761239\/60-medium_normal.jpg","id":19657907,"time_zone":"Beijing","followers_count":32},"favorited":false,"in_reply_to_screen_name":"terryxxy","in_reply_to_status_id":1908052837,"id":1908232304,"source":"TwitterFox<\/a>"} -{"truncated":false,"text":"My wife can't sleep without a little white noise, that explains the Robbie Williams CDs..","created_at":"Mon May 25 01:59:16 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":1311,"favourites_count":0,"description":"Shoe Monkey","screen_name":"OhDaddy","following":null,"utc_offset":-21600,"created_at":"Tue Mar 10 14:28:12 +0000 2009","profile_link_color":"FF3300","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/6597606\/danceparty.jpg","profile_sidebar_fill_color":"A0C5C7","protected":false,"location":" Appleton, WI Earth","name":"L.H.Thompson","profile_sidebar_border_color":"86A4A6","profile_background_tile":false,"url":"http:\/\/www.geocities.com\/mrlukeplease\/","time_zone":"Central Time (US & Canada)","followers_count":52,"profile_background_color":"709397","friends_count":39,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/215344883\/Grease_007_normal.jpg","id":23597630,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232300,"source":"TweetDeck<\/a>"} -{"truncated":false,"text":"I laughed and vodka came out my nose. It was painful and I squeaked.","created_at":"Mon May 25 01:59:16 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":470,"favourites_count":0,"description":"I like music, tattoos and highlighters. The end.","screen_name":"ladymelisande","following":null,"utc_offset":-18000,"created_at":"Sun Jul 06 23:50:53 +0000 2008","profile_link_color":"0099B9","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme4\/bg.gif","profile_sidebar_fill_color":"95E8EC","protected":false,"location":"Brooklyn, NY","name":"Katrina Bleckley","profile_sidebar_border_color":"5ED4DC","profile_background_tile":false,"url":"http:\/\/nixonsangel.livejournal.com","time_zone":"Eastern Time (US & Canada)","followers_count":114,"profile_background_color":"0099B9","friends_count":117,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/88108656\/n67401335_30859662_56_normal.jpg","id":15336900,"profile_text_color":"3C3940"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232301,"source":"TwitterFon<\/a>"} -{"text":"@verybadcat13 so, whats wrong, cat? the doctor is in...lol ;)","created_at":"Mon May 25 01:59:16 +0000 2009","truncated":false,"in_reply_to_user_id":15308776,"user":{"profile_background_color":"1f0df2","description":"Husband, Father, Son, Brother...just trying to make it through this wonderful thing we call life, Follow me and we will take the journey together.","screen_name":"JELuttrull","following":null,"utc_offset":-18000,"created_at":"Thu Apr 16 20:37:45 +0000 2009","friends_count":448,"profile_text_color":"322461","notifications":null,"statuses_count":1267,"favourites_count":9,"protected":false,"profile_link_color":"0e0105","location":"Asheville, NC","name":"Jason Luttrull","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/10573439\/Tigers_Logo_2.jpg","profile_sidebar_fill_color":"f5790f","url":"http:\/\/jeluttrull.wordpress.com","profile_sidebar_border_color":"050505","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/204799976\/Picture0020-1_normal.jpg","id":32143310,"time_zone":"Eastern Time (US & Canada)","followers_count":204},"favorited":false,"in_reply_to_screen_name":"verybadcat13","in_reply_to_status_id":1908203546,"id":1908232400,"source":"TweetDeck<\/a>"} -{"text":"@soverpeck bro I can't stop laughing at this! I did keep reading to see what you where talking about but this is stating in my favorites!","created_at":"Mon May 25 01:59:16 +0000 2009","truncated":false,"in_reply_to_user_id":15251890,"user":{"profile_background_color":"f2d907","description":"","screen_name":"r0gue","following":null,"utc_offset":-21600,"created_at":"Wed Sep 24 15:53:49 +0000 2008","friends_count":69,"profile_text_color":"666666","notifications":null,"statuses_count":669,"favourites_count":1,"protected":false,"profile_link_color":"a42828","location":"iPhone: 28.534876,-81.261299","name":"Danny Haas","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/5425324\/robottwitter.jpg","profile_sidebar_fill_color":"00c2ba","url":null,"profile_sidebar_border_color":"000000","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/129606988\/r0gue_r0bot_normal.jpg","id":16436102,"time_zone":"Central Time (US & Canada)","followers_count":70},"favorited":false,"in_reply_to_screen_name":"soverpeck","in_reply_to_status_id":1908067283,"id":1908232401,"source":"TwitterFon<\/a>"} -{"truncated":false,"text":"RT mos def have said this b4 @KadeejiaDenise #3drunkwords \"fuck that nigga...\" (On some Dream stuff) followed by \"wassup wit you\" *lolz*","created_at":"Mon May 25 01:59:16 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":2671,"favourites_count":6,"description":"\u2606college girl, dancer, lifeaholic, future PR phenom...i'm blessed & lovin' life \u2606","screen_name":"lilmizsunshyne","following":null,"utc_offset":-18000,"created_at":"Wed Feb 11 04:55:23 +0000 2009","profile_link_color":"170d26","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/7262523\/n1143060539_31097820_8569.jpg","profile_sidebar_fill_color":"f2da6e","protected":false,"location":"\u00dcT: 38.983101,-76.965605","name":"Chasity Cooper","profile_sidebar_border_color":"241424","profile_background_tile":true,"url":"http:\/\/lilmizsunshyne11.blogspot.com\/","time_zone":"Eastern Time (US & Canada)","followers_count":292,"profile_background_color":"642D8B","friends_count":399,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/227162884\/mee_normal.JPG","id":20572111,"profile_text_color":"504d3f"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232404,"source":"web"} -{"truncated":false,"text":"JOEKING's birthday. I'm ready fo some cake!","created_at":"Mon May 25 01:59:16 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":30,"favourites_count":0,"description":"I'm Holly. I love The Fray. the end.","screen_name":"hollysimone","following":null,"utc_offset":-21600,"created_at":"Thu Apr 02 01:41:18 +0000 2009","profile_link_color":"FF0000","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme12\/bg.gif","profile_sidebar_fill_color":"FFF7CC","protected":false,"location":"Pottsboro, Texas","name":"Holly Cantu","profile_sidebar_border_color":"F2E195","profile_background_tile":false,"url":"http:\/\/frayloveintexas.blogspot.com","time_zone":"Central Time (US & Canada)","followers_count":5,"profile_background_color":"BADFCD","friends_count":18,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/155719348\/100_6812_normal.png","id":28251463,"profile_text_color":"0C3E53"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232402,"source":"web"} -{"truncated":false,"text":"I CANT SEE!","in_reply_to_user_id":null,"favorited":false,"created_at":"Mon May 25 01:59:16 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232403,"user":{"friends_count":25,"location":null,"utc_offset":null,"profile_text_color":"000000","notifications":null,"statuses_count":247,"favourites_count":0,"following":null,"profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","description":null,"name":"heroin money","profile_sidebar_fill_color":"e0ff92","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/228921775\/IMG00098_normal.JPG","created_at":"Mon Mar 30 04:49:39 +0000 2009","profile_sidebar_border_color":"87bc44","screen_name":"heron226","profile_background_tile":false,"time_zone":null,"followers_count":18,"id":27586762,"profile_background_color":"9ae4e8","url":null},"source":"web"} -{"truncated":false,"text":"@pagingDrCullen hahahaha. Yay?!! Where are ur feinss?","created_at":"Mon May 25 01:59:17 +0000 2009","in_reply_to_user_id":21051141,"favorited":false,"user":{"notifications":null,"statuses_count":6485,"favourites_count":8,"description":"I 3 theatre & film","screen_name":"Greek4Honeybee","following":null,"utc_offset":-21600,"created_at":"Sat Mar 14 12:06:13 +0000 2009","profile_link_color":"B40B43","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme11\/bg.gif","profile_sidebar_fill_color":"E5507E","protected":false,"location":"on a boat","name":"Smelly Melly","profile_sidebar_border_color":"CC3366","profile_background_tile":true,"url":null,"time_zone":"Central Time (US & Canada)","followers_count":113,"profile_background_color":"FF6699","friends_count":87,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/216781321\/PICT0290_normal.jpg","id":24359940,"profile_text_color":"362720"},"in_reply_to_screen_name":"pagingDrCullen","in_reply_to_status_id":1908224085,"id":1908232501,"source":"TwitterFon<\/a>"} -{"truncated":false,"text":"@minakox \u305d\u3063\u3061\u3092\u3084\u308b\u4f59\u88d5\u304c\u7121\u3044\u306e\u3067\uff20\uff12\uff5e\uff13\u65e5OK\u304b\u3068\u3002","created_at":"Mon May 25 01:59:17 +0000 2009","in_reply_to_user_id":14055303,"favorited":false,"user":{"notifications":null,"statuses_count":1797,"favourites_count":0,"description":"","screen_name":"TA223","following":null,"utc_offset":32400,"created_at":"Fri Jun 13 06:16:24 +0000 2008","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"","name":"TA223","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":"Tokyo","followers_count":11,"profile_background_color":"9ae4e8","friends_count":9,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/56490143\/images_normal.jpeg","id":15104832,"profile_text_color":"000000"},"in_reply_to_screen_name":"minakox","in_reply_to_status_id":null,"id":1908232503,"source":"Twit<\/a>"} -{"text":"Why Do They Race? http:\/\/tinyurl.com\/ryx8lb","created_at":"Mon May 25 01:59:17 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"1A1B1F","description":"I'm a stand-up comedian and radio personality in Nashville Tn. I really, really like boobs.","screen_name":"JackSassRadio","following":null,"utc_offset":-21600,"created_at":"Mon Apr 20 11:05:58 +0000 2009","friends_count":2117,"profile_text_color":"666666","notifications":null,"statuses_count":5249,"favourites_count":0,"protected":false,"profile_link_color":"2FC2EF","location":"Nashville, TN","name":"Jack Sass","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/11866255\/sound_mixer_1.jpg","profile_sidebar_fill_color":"252429","url":"http:\/\/www.jacksassradio.com","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/178746344\/jack_sass_normal.jpg","id":33481613,"time_zone":"Central Time (US & Canada)","followers_count":1931},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232502,"source":"twitterfeed<\/a>"} -{"truncated":false,"text":"LIVE UK TV EXPATS Free Realms brings new "super ego" commercial online - Massively: S.. http:\/\/bit.ly\/12Fuaq","created_at":"Mon May 25 01:59:17 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":4355,"favourites_count":0,"description":"Passionate about UK Television and the right for anyone to view their own TV choice anywhere in the world. We provide that opportunity professionally.","screen_name":"UKTV2C","following":null,"utc_offset":0,"created_at":"Thu May 07 18:56:50 +0000 2009","profile_link_color":"0009b4","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/12410577\/twitter_background.jpg","profile_sidebar_fill_color":"cce8ff","protected":false,"location":"NORTH EAST ENGLAND","name":"MIKE GAMBLE","profile_sidebar_border_color":"c59e11","profile_background_tile":false,"url":"http:\/\/www.UKTV2C.com","time_zone":"London","followers_count":1297,"profile_background_color":"0f4043","friends_count":1505,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/205604605\/MIKE_GAMBLE_normal.jpg","id":38491767,"profile_text_color":"ac4520"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232500,"source":"twitterfeed<\/a>"} -{"text":"#h1n1 Parents asked to place children in swine-flu quarantine - The Age: Parents asked to place children in.. http:\/\/tinyurl.com\/okp5z8","created_at":"Mon May 25 01:59:18 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9AE4E8","description":"All the latest flu information for Canada","screen_name":"flumap","following":null,"utc_offset":-18000,"created_at":"Mon Apr 27 18:37:40 +0000 2009","friends_count":59,"profile_text_color":"333333","notifications":null,"statuses_count":512,"favourites_count":0,"protected":false,"profile_link_color":"0084B4","location":"Toronto, Canada","name":"flumap.ca","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/10431910\/947314_41758108.jpg","profile_sidebar_fill_color":"DDFFCC","url":"http:\/\/www.flumap.ca","profile_sidebar_border_color":"BDDCAD","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/186631585\/947314_41758108asdasd_normal.jpg","id":35819731,"time_zone":"Quito","followers_count":74},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232600,"source":"twitterfeed<\/a>"} -{"truncated":false,"text":"Heres d final results4 adults judging is not easy really enjoyed my time here mexico hip hop has grown so much http:\/\/twitpic.com\/5wa38","in_reply_to_user_id":null,"favorited":false,"created_at":"Mon May 25 01:59:18 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232603,"user":{"friends_count":30,"location":null,"utc_offset":null,"profile_text_color":"3D1957","notifications":null,"statuses_count":40,"favourites_count":3,"following":null,"profile_link_color":"FF0000","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme10\/bg.gif","description":null,"name":"Monica Guitian ","profile_sidebar_fill_color":"7AC3EE","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/134716012\/sc0014f0dd_normal.jpg","created_at":"Sun Apr 12 16:38:11 +0000 2009","profile_sidebar_border_color":"65B0DA","screen_name":"monicaguiti","profile_background_tile":true,"time_zone":null,"followers_count":19,"id":30676419,"profile_background_color":"642D8B","url":null},"source":"Twitterrific<\/a>"} -{"text":"Had a really good 40th bday today. Lots of calls from friends & family. Little surprises left by Gary bfore he went 2 work. I feel very lovd","created_at":"Mon May 25 01:59:18 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"82cb62","description":"Married to my BFF. Love nature, hiking, cooking, antiques, museums, pottery, minerals. Have 2 pet cats 'n 1 outdoor pet spider who doesn't know she's a pet.","screen_name":"grannymelissa","following":null,"utc_offset":-28800,"created_at":"Wed Aug 27 02:16:43 +0000 2008","friends_count":14,"profile_text_color":"333333","notifications":null,"statuses_count":341,"favourites_count":4,"protected":false,"profile_link_color":"a65a2b","location":"Redlands, California","name":"grannymelissa","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme8\/bg.gif","profile_sidebar_fill_color":"e8da9b","url":null,"profile_sidebar_border_color":"D9B17E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/74607364\/Missy_oakglen12-08_normal.jpg","id":16006461,"time_zone":"Pacific Time (US & Canada)","followers_count":9},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232602,"source":"web"} -{"text":"going to bed","created_at":"Mon May 25 01:59:18 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":null,"screen_name":"shyone0204","following":null,"utc_offset":null,"created_at":"Tue May 12 18:35:02 +0000 2009","friends_count":2,"profile_text_color":"000000","notifications":null,"statuses_count":8,"favourites_count":0,"protected":false,"profile_link_color":"0000ff","location":null,"name":"amanda campbell","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":null,"profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":39562534,"time_zone":null,"followers_count":1},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232604,"source":"web"} -{"truncated":false,"text":"I watch this every day because its my ordinary miracle http:\/\/bit.ly\/16t8Yp","created_at":"Mon May 25 01:59:18 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":2324,"favourites_count":12,"description":"I do not make sales pitches, I make life pitches. I found an easy way to the LOA (Law of Attraction) and I'm sharing it with the world. Abundance is within.","screen_name":"KellyFlack","following":null,"utc_offset":36000,"created_at":"Wed Feb 18 12:25:06 +0000 2009","profile_link_color":"1346ae","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme10\/bg.gif","profile_sidebar_fill_color":"cd7aee","protected":false,"location":"Queensland Australia","name":"Kelly Flack","profile_sidebar_border_color":"65B0DA","profile_background_tile":true,"url":"http:\/\/www.PowerfulTools4Life.com","time_zone":"Brisbane","followers_count":2528,"profile_background_color":"642D8B","friends_count":2388,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/81562292\/2008_P_O_Cruise0002_normal.jpg","id":21190782,"profile_text_color":"8b228c"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232601,"source":"web"} -{"text":"Is waiting for Him so we can go to the movies. :D","created_at":"Mon May 25 01:59:18 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"642D8B","description":"I'm a smart ass. :]","screen_name":"xGoldielocks","following":null,"utc_offset":-28800,"created_at":"Fri May 22 21:33:26 +0000 2009","friends_count":6,"profile_text_color":"3D1957","notifications":null,"statuses_count":6,"favourites_count":0,"protected":false,"profile_link_color":"FF0000","location":"California","name":"Dana Nichole","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme10\/bg.gif","profile_sidebar_fill_color":"7AC3EE","url":"http:\/\/www.myspace.com\/xgoldielocks","profile_sidebar_border_color":"65B0DA","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/226692198\/l_0884a4fda1484c1e82ef9eba21011af9_normal.jpg","id":41906186,"time_zone":"Pacific Time (US & Canada)","followers_count":3},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232701,"source":"web"} -{"text":"#humpthestump","created_at":"Mon May 25 01:59:18 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":null,"screen_name":"spamzlot","following":null,"utc_offset":null,"created_at":"Mon May 25 01:54:06 +0000 2009","friends_count":0,"profile_text_color":"000000","notifications":null,"statuses_count":105,"favourites_count":0,"protected":false,"profile_link_color":"0000ff","location":null,"name":"hjufykitudkut","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":null,"profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":42326509,"time_zone":null,"followers_count":0},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232704,"source":"web"} -{"truncated":false,"text":"@macobyn Would love to chat about this as I work on our patient portal and also develop our (multiple) practice web sites ... #hcsm","in_reply_to_user_id":null,"favorited":false,"created_at":"Mon May 25 01:59:18 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232702,"user":{"friends_count":723,"location":"Newport News, VA","utc_offset":-18000,"profile_text_color":"000000","notifications":null,"statuses_count":2181,"favourites_count":1,"following":null,"profile_link_color":"1c56ba","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/3551131\/twitter_background_v3.jpg","description":"Director of Internet Services, Riverside Health System (@riverside) \/ Social Media Enthusiast, Tech Fan, Single Parent, Swim Dad","name":"Steven Barley","profile_sidebar_fill_color":"989590","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/206108906\/steve_new_normal.jpg","created_at":"Wed Sep 03 17:16:46 +0000 2008","profile_sidebar_border_color":"000000","screen_name":"StevenBarley","profile_background_tile":false,"time_zone":"Eastern Time (US & Canada)","followers_count":845,"id":16116044,"profile_background_color":"ffffff","url":"http:\/\/www.linkedin.com\/in\/stevenbarley"},"source":"TweetChat<\/a>"} -{"truncated":false,"text":"RT: Im a chocolate bunny. I like to eat other bunnies.. BUNNIES!! :D http:\/\/tinyurl.com\/pu6npn","created_at":"Mon May 25 01:59:18 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":31553,"favourites_count":0,"description":"The Oompa Loompas Have You. Follow the Chocolate Bunny.","screen_name":"chocolatetweets","following":null,"utc_offset":-18000,"created_at":"Tue Nov 25 13:26:48 +0000 2008","profile_link_color":"0084B4","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/3442206\/chocolate1.gif","profile_sidebar_fill_color":"DDFFCC","protected":false,"location":"Willy Wonka's Chocolate Factor","name":"chocolatetweets","profile_sidebar_border_color":"BDDCAD","profile_background_tile":true,"url":null,"time_zone":"Eastern Time (US & Canada)","followers_count":1679,"profile_background_color":"9AE4E8","friends_count":1667,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/65420675\/chocolateREX_468x481_normal.jpg","id":17619075,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232703,"source":"twitterfeed<\/a>"} -{"truncated":false,"text":"2 favorite things: George and my mac http:\/\/twitpic.com\/5wa8y","created_at":"Mon May 25 01:59:19 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":231,"favourites_count":1,"description":"Uh, hi. Uh, my name is Tate, and uh..I like to party. ","screen_name":"tateywatey","following":null,"utc_offset":-25200,"created_at":"Thu Feb 26 04:49:30 +0000 2009","profile_link_color":"FF0000","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/14387652\/Photo_19.jpg","profile_sidebar_fill_color":"FFF7CC","protected":false,"location":"Arizona","name":"Tate Johnson","profile_sidebar_border_color":"F2E195","profile_background_tile":true,"url":null,"time_zone":"Arizona","followers_count":49,"profile_background_color":"BADFCD","friends_count":85,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/227706880\/2f896f595a8408181f93e3fb843451e2_normal.jpg","id":21972096,"profile_text_color":"0C3E53"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232803,"source":"Tweetie<\/a>"} -{"truncated":false,"text":"Theme song on the ride to school. Never did them, BTW. \u266b http:\/\/blip.fm\/~6yyw4","in_reply_to_user_id":null,"favorited":false,"created_at":"Mon May 25 01:59:19 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232804,"user":{"friends_count":122,"location":"New York, New York","utc_offset":-18000,"profile_text_color":"000000","notifications":null,"statuses_count":287,"favourites_count":3,"following":null,"profile_link_color":"0000ff","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/7320923\/background4.jpg","description":"purveyor of quality content","name":"Robby Wells","profile_sidebar_fill_color":"e0ff92","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/28241472\/robby.wells_normal.jpg","created_at":"Wed Mar 14 15:44:24 +0000 2007","profile_sidebar_border_color":"87bc44","screen_name":"robbywells","profile_background_tile":false,"time_zone":"Eastern Time (US & Canada)","followers_count":147,"id":1163711,"profile_background_color":"9ae4e8","url":"http:\/\/robbywells.wordpress.com\/"},"source":"Blip.fm<\/a>"} -{"truncated":false,"text":"@chrissycakes84 of course lol","created_at":"Mon May 25 01:59:19 +0000 2009","in_reply_to_user_id":17744297,"favorited":false,"user":{"notifications":null,"statuses_count":15857,"favourites_count":7,"description":"Im way better than that nigga you signed! The hottest nigga in Florida. 407 what it iss! AIM: wesfifdotnet","screen_name":"WesFif","following":null,"utc_offset":-18000,"created_at":"Thu Nov 13 05:09:00 +0000 2008","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/4268003\/wftwitbg.jpg","profile_sidebar_fill_color":"252429","protected":false,"location":"Orlando","name":"Wes Fif","profile_sidebar_border_color":"181A1E","profile_background_tile":true,"url":"http:\/\/www.myspace.com\/wesfif","time_zone":"Eastern Time (US & Canada)","followers_count":2731,"profile_background_color":"1A1B1F","friends_count":716,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/222124747\/twitta_normal.jpg","id":17358182,"profile_text_color":"666666"},"in_reply_to_screen_name":"chrissycakes84","in_reply_to_status_id":1908226462,"id":1908232802,"source":"web"} -{"truncated":false,"text":"@ldclower interesting. I don't identify well with Springsteen OR Dylan. I'm 35, and yet somehow, I love Paul Simon, James Taylor & Marc Cohn","created_at":"Mon May 25 01:59:20 +0000 2009","in_reply_to_user_id":22026679,"favorited":false,"user":{"notifications":null,"statuses_count":1221,"favourites_count":15,"description":"Red wine lover in the Brew City, enjoys new\/social media, sports, and a good biz book. Milwaukee-baby!","screen_name":"philgerb","following":null,"utc_offset":-21600,"created_at":"Wed Oct 25 04:12:35 +0000 2006","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/11580992\/twitter-template-7.jpg","profile_sidebar_fill_color":"EED800","protected":false,"location":"Milwaukee","name":"Phil Gerbyshak","profile_sidebar_border_color":"8DEE15","profile_background_tile":false,"url":"http:\/\/philgerbyshak.com","time_zone":"Central Time (US & Canada)","followers_count":1444,"profile_background_color":"f5f5f5","friends_count":1313,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/70555473\/new_phil_gerbyshak_normal.jpg","id":10441,"profile_text_color":"000000"},"in_reply_to_screen_name":"ldclower","in_reply_to_status_id":1908125748,"id":1908232900,"source":"web"} -{"truncated":false,"text":"MY SISTER GRADUATE TODAY AND SHE DID IT BIG 09","created_at":"Mon May 25 01:59:20 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":6,"favourites_count":0,"description":null,"screen_name":"mzpeaches30","following":null,"utc_offset":null,"created_at":"Mon Apr 13 19:37:03 +0000 2009","profile_link_color":"b90066","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme4\/bg.gif","profile_sidebar_fill_color":"c495ec","protected":false,"location":null,"name":"Sheena","profile_sidebar_border_color":"dc5e8e","profile_background_tile":false,"url":null,"time_zone":null,"followers_count":7,"profile_background_color":"b700b9","friends_count":25,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/136263838\/Temika20Williams20wedding20044_edited_normal.jpg","id":30938949,"profile_text_color":"404039"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232901,"source":"web"} -{"truncated":false,"text":"Spending two days alone with my best friend and REALLY enjoying it.","in_reply_to_user_id":null,"favorited":false,"created_at":"Mon May 25 01:59:20 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232902,"user":{"friends_count":43,"location":"Peoria, IL","utc_offset":-21600,"profile_text_color":"000000","notifications":null,"statuses_count":672,"favourites_count":0,"following":null,"profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","description":"I don't eat, drive or wear my money","name":"Don","profile_sidebar_fill_color":"e0ff92","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/224136467\/Photo_2_normal.jpg","created_at":"Tue Apr 24 18:11:20 +0000 2007","profile_sidebar_border_color":"87bc44","screen_name":"bowendk","profile_background_tile":false,"time_zone":"Central Time (US & Canada)","followers_count":112,"id":5472982,"profile_background_color":"9ae4e8","url":"http:\/\/wizidm.wordpress.com"},"source":"web"} -{"truncated":false,"text":"\u6211\u521a\u521a\u5199\u4e86\u4e00\u7bc7\u535a\u5ba2\uff1a\u3010\u4e2d\u56fd\u56fd\u9645\u5c55\u89c8\u4e2d\u5fc3\u30112009\u5317\u4eac(\u6700\u5927)14\u5c4a\u8282\u80fd\u95e8\u7a97\u5c55\u4f1a \u65f6\u95f4\uff1a2009\u5e7406\u670818\u65e5-2009\u5e7406\u670820\u65e5 \u5730\u70b9\uff1a\u4e2d\u56fd\u56fd\u9645\u5c55\u89c8\u4e2d\u5fc3 http:\/\/r.im\/1qa1","created_at":"Mon May 25 01:59:20 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":3626,"favourites_count":0,"description":null,"screen_name":"iease_terry","following":null,"utc_offset":-32400,"created_at":"Fri Jun 20 04:54:18 +0000 2008","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":null,"name":"iease_terry","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":"Alaska","followers_count":29,"profile_background_color":"9ae4e8","friends_count":0,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":15176710,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908232903,"source":"digu<\/a>"} -{"text":"@ericamerrin then she is wrong and should feel wrong. i would see it with you, but you're in one of those places that isn't chicago.","created_at":"Mon May 25 01:59:20 +0000 2009","truncated":false,"in_reply_to_user_id":22338914,"user":{"profile_background_color":"FF6699","description":"i want to be a toaster oven when i grow up.","screen_name":"wireandroses","following":null,"utc_offset":-21600,"created_at":"Sat Jan 06 19:29:43 +0000 2007","friends_count":119,"profile_text_color":"362720","notifications":null,"statuses_count":1278,"favourites_count":1,"protected":false,"profile_link_color":"B40B43","location":"","name":"abby","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme11\/bg.gif","profile_sidebar_fill_color":"E5507E","url":null,"profile_sidebar_border_color":"CC3366","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/81761452\/me_normal.jpg","id":608413,"time_zone":"Central Time (US & Canada)","followers_count":101},"favorited":false,"in_reply_to_screen_name":"ericamerrin","in_reply_to_status_id":1908207172,"id":1908232904,"source":"TwitterFox<\/a>"} -{"text":"Aunque ahora me tengo que ba\u00f1ar, no vaya a ser cierto eso de que me puedo enfermar :P ah\u00ed vengo. Soy bien feliz! <3","created_at":"Mon May 25 01:59:20 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"ac2a2d","description":"","screen_name":"acmoises","following":null,"utc_offset":-21600,"created_at":"Tue Sep 09 01:26:44 +0000 2008","friends_count":383,"profile_text_color":"000000","notifications":null,"statuses_count":8445,"favourites_count":60,"protected":false,"profile_link_color":"b01721","location":"Queretaro, M\u00e9xico.","name":"Mois\u00e9s Aguirre C.","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/3639128\/bart.png","profile_sidebar_fill_color":"e8e869","url":"http:\/\/acmoises.wordpress.com","profile_sidebar_border_color":"eb4037","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/200003447\/luvqt_normal.jpg","id":16195630,"time_zone":"Mexico City","followers_count":416},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908233003,"source":"TwitterBerry<\/a>"} -{"text":"@jackie7x jackie! i'm surprised at you. that language is really offensive.","created_at":"Mon May 25 01:59:20 +0000 2009","truncated":false,"in_reply_to_user_id":32271394,"user":{"profile_background_color":"553f4d","description":"","screen_name":"Julietlysm","following":null,"utc_offset":-18000,"created_at":"Sat May 02 21:02:33 +0000 2009","friends_count":6,"profile_text_color":"333333","notifications":null,"statuses_count":27,"favourites_count":0,"protected":false,"profile_link_color":"000000","location":"Maryland","name":"Cynthia Renee","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/11310116\/images.jpg","profile_sidebar_fill_color":"d0c3d0","url":null,"profile_sidebar_border_color":"b1a0b1","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/194256075\/two_019_normal.jpg","id":37282089,"time_zone":"Quito","followers_count":5},"favorited":false,"in_reply_to_screen_name":"jackie7x","in_reply_to_status_id":1906285122,"id":1908233002,"source":"web"} -{"truncated":false,"text":"@qoola loll you're welcome ;)","in_reply_to_user_id":16266670,"favorited":false,"created_at":"Mon May 25 01:59:20 +0000 2009","in_reply_to_screen_name":"qoola","in_reply_to_status_id":1908183566,"id":1908233004,"user":{"friends_count":73,"location":"West Vancouver, BC, Canada","utc_offset":-28800,"profile_text_color":"333333","notifications":null,"statuses_count":117,"favourites_count":0,"following":null,"profile_link_color":"0084B4","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","description":"Music, Drums, Rugby. Twitt Me :D","name":"Tim Choi","profile_sidebar_fill_color":"DDFFCC","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/56892700\/drum_kit_normal.jpg","created_at":"Sat Jul 19 06:55:37 +0000 2008","profile_sidebar_border_color":"BDDCAD","screen_name":"tim167246","profile_background_tile":true,"time_zone":"Pacific Time (US & Canada)","followers_count":72,"id":15490694,"profile_background_color":"9AE4E8","url":"http:\/\/twitter.com\/tim167246"},"source":"Tweetie<\/a>"} -{"truncated":false,"text":"Recommended @OracleCert to @MrTweet 'Because they are a Certification Vendor and should always be your 1st source f...' http:\/\/cli.gs\/6UWW7a","in_reply_to_user_id":null,"favorited":false,"created_at":"Mon May 25 01:59:20 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908233001,"user":{"friends_count":104,"location":"Corpus Christi, TX","utc_offset":-21600,"profile_text_color":"b9a904","notifications":null,"statuses_count":176,"favourites_count":1,"following":null,"profile_link_color":"336699","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/7955332\/Chicken-Songs-1.jpg","description":"Looking for only the best Certification resources so that we can pass them on to our members.","name":"Robert Williams","profile_sidebar_fill_color":"1A1B1F","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/127950333\/CG-LOGO-ICON_normal.png","created_at":"Tue Apr 07 18:36:36 +0000 2009","profile_sidebar_border_color":"181A1E","screen_name":"CertGuard","profile_background_tile":true,"time_zone":"Central Time (US & Canada)","followers_count":70,"id":29510327,"profile_background_color":"1A1B1F","url":"http:\/\/www.certguard.com\/"},"source":"MrTweet<\/a>"} -{"truncated":false,"text":"i have far too many tablets to take at the moment","created_at":"Mon May 25 01:59:21 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":4884,"favourites_count":67,"description":"Beep is my favourite word, but I have no idea why or how it started. I write beep literally everywhere.","screen_name":"djmattyg007","following":null,"utc_offset":36000,"created_at":"Sat Jun 07 02:22:20 +0000 2008","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"Melbourne, Australia","name":"Matty G aka 007bond","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":"http:\/\/djmattyg007.x10hosting.com","time_zone":"Melbourne","followers_count":154,"profile_background_color":"9ae4e8","friends_count":98,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/55147004\/7Wk_jWzRrbdcxWkBoZ7TcwF05JMRLBEF2kfn3aPvJXNQSxLux_UF0b4nRCUZWU7J_normal.jpg","id":15034829,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908233100,"source":"DestroyTwitter<\/a>"} -{"in_reply_to_user_id":null,"text":"Well I danced on stage with soulja boy...guess my life is finally complete","favorited":false,"created_at":"Mon May 25 01:59:21 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908233103,"user":{"profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","utc_offset":null,"profile_sidebar_fill_color":"e0ff92","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/106766560\/london_normal.jpg","following":null,"created_at":"Mon Mar 23 00:22:35 +0000 2009","profile_sidebar_border_color":"87bc44","description":null,"screen_name":"cand_i","name":"Candice Clarida","profile_background_tile":false,"protected":false,"time_zone":null,"followers_count":10,"profile_background_color":"9ae4e8","friends_count":27,"location":null,"profile_text_color":"000000","id":25914748,"notifications":null,"statuses_count":34,"favourites_count":1,"url":null},"truncated":false,"source":"txt<\/a>"} -{"truncated":false,"text":"@stephaniepratt just stay another night. i would.","created_at":"Mon May 25 01:59:21 +0000 2009","in_reply_to_user_id":23511303,"favorited":false,"user":{"notifications":null,"statuses_count":736,"favourites_count":0,"description":"college student. wants to change the world. loves everything music.","screen_name":"justrhi","following":null,"utc_offset":-25200,"created_at":"Mon Dec 01 17:13:24 +0000 2008","profile_link_color":"2b37d0","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/4865499\/2448704882_63f377da8e.jpg","profile_sidebar_fill_color":"ffcf0a","protected":false,"location":"boulder, co","name":"Rhiannon Riccillo","profile_sidebar_border_color":"1d1655","profile_background_tile":false,"url":"http:\/\/www.myspace.com\/rhirhi","time_zone":"Mountain Time (US & Canada)","followers_count":54,"profile_background_color":"860b09","friends_count":112,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/150978424\/twitterme_normal.jpg","id":17783401,"profile_text_color":"080807"},"in_reply_to_screen_name":"stephaniepratt","in_reply_to_status_id":1908200399,"id":1908233101,"source":"web"} -{"truncated":false,"text":"bored as hell home trynna see wats goin down for tomorrow","created_at":"Mon May 25 01:59:21 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":1,"favourites_count":0,"description":null,"screen_name":"przliilmimi","following":null,"utc_offset":null,"created_at":"Mon May 25 01:57:06 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":null,"name":"Mia ","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":null,"followers_count":0,"profile_background_color":"9ae4e8","friends_count":0,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":42326998,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908233104,"source":"web"} -{"text":"drinking black tea and briefing fun flash emails","created_at":"Mon May 25 01:59:22 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"575a5b","description":"GIRLS JUST WANNA HAVE RUM","screen_name":"grace_x","following":null,"utc_offset":36000,"created_at":"Mon Feb 23 22:48:37 +0000 2009","friends_count":106,"profile_text_color":"d7568a","notifications":null,"statuses_count":133,"favourites_count":0,"protected":false,"profile_link_color":"ff42b0","location":"BONDI BEACH, SYDNEY, WOO","name":"Grace Gordon","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/5549999\/chanandkarl.jpg","profile_sidebar_fill_color":"2e2e2e","url":null,"profile_sidebar_border_color":"ea3eb4","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/81965317\/n545571639_1908019_1457_normal.jpg","id":21703649,"time_zone":"Sydney","followers_count":97},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908233200,"source":"mobile web<\/a>"} -{"text":"@Haley89 i'm sorry about the dumpage hun :( are you alright?","created_at":"Mon May 25 01:59:22 +0000 2009","truncated":false,"in_reply_to_user_id":25162941,"user":{"profile_background_color":"C6E2EE","description":"I tell jokes and make films.","screen_name":"chrissweettweet","following":null,"utc_offset":-21600,"created_at":"Sat Mar 14 22:20:11 +0000 2009","friends_count":16,"profile_text_color":"663B12","notifications":null,"statuses_count":38,"favourites_count":0,"protected":false,"profile_link_color":"1F98C7","location":"Chicago, IL","name":"Christopher Svehla","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme2\/bg.gif","profile_sidebar_fill_color":"DAECF4","url":null,"profile_sidebar_border_color":"C6E2EE","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/96319811\/n1150110136_30036741_8491_normal.jpg","id":24440398,"time_zone":"Central Time (US & Canada)","followers_count":11},"favorited":false,"in_reply_to_screen_name":"Haley89","in_reply_to_status_id":1908126480,"id":1908233201,"source":"web"} -{"text":"OMG JF & I are LMAO in YVR.","created_at":"Mon May 25 01:59:22 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":"To know me is to love me. Now buy me a fucking drink.","screen_name":"Robbie1969","following":null,"utc_offset":-18000,"created_at":"Fri Mar 13 14:47:42 +0000 2009","friends_count":20,"profile_text_color":"000000","notifications":null,"statuses_count":216,"favourites_count":0,"protected":false,"profile_link_color":"0000ff","location":"Joliette","name":"Robert Mercier","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":"http:\/\/www.tpimousevoyages.com\/1\/robadv","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/95212271\/sept06_412_normal.jpg","id":24182170,"time_zone":"Eastern Time (US & Canada)","followers_count":31},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908233204,"source":"Tweetie<\/a>"} -{"truncated":false,"text":"-had a good Memorial Day wknd so far & is super excited to start my NEW JOB w Sprint on Tuesday!","created_at":"Mon May 25 01:59:22 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":72,"favourites_count":0,"description":"I'm an Air Force brat.","screen_name":"m_blaha","following":null,"utc_offset":-21600,"created_at":"Thu Feb 05 18:45:38 +0000 2009","profile_link_color":"B40B43","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme11\/bg.gif","profile_sidebar_fill_color":"E5507E","protected":false,"location":"816, MO","name":"Michelle Blaha \u30c4","profile_sidebar_border_color":"CC3366","profile_background_tile":true,"url":null,"time_zone":"Central Time (US & Canada)","followers_count":14,"profile_background_color":"FF6699","friends_count":56,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/201031299\/MichelleandJoeBW_normal.jpg","id":20173476,"profile_text_color":"362720"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908233203,"source":"TinyTwitter<\/a>"} -{"text":"@tateru \u732e\u8eab\u7684\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u3059\u304b\u3089\uff57\uff57\uff57\u3063\uff57\uff57","created_at":"Mon May 25 01:59:23 +0000 2009","truncated":false,"in_reply_to_user_id":3890601,"user":{"profile_background_color":"000000","description":"I love willcom too\u3002","screen_name":"0123","following":null,"utc_offset":32400,"created_at":"Mon May 07 08:56:06 +0000 2007","friends_count":65,"profile_text_color":"000000","notifications":null,"statuses_count":11776,"favourites_count":2,"protected":false,"profile_link_color":"0000ff","location":"Japan","name":"Legend","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"607135","url":null,"profile_sidebar_border_color":"465337","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/122511065\/Image1_normal.jpg","id":5827462,"time_zone":"Tokyo","followers_count":94},"favorited":false,"in_reply_to_screen_name":"tateru","in_reply_to_status_id":1908218919,"id":1908233304,"source":"Tween<\/a>"} -{"text":"Twitter & Me","created_at":"Mon May 25 01:59:23 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"352726","description":"Black and Mild with an affinity for horror, music, and pee in my pants laughter. ","screen_name":"slimgoodd","following":null,"utc_offset":-18000,"created_at":"Fri Mar 13 23:24:51 +0000 2009","friends_count":77,"profile_text_color":"3E4415","notifications":null,"statuses_count":90,"favourites_count":31,"protected":false,"profile_link_color":"D02B55","location":"Jersey Shore","name":"DaShawn","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme5\/bg.gif","profile_sidebar_fill_color":"99CC33","url":null,"profile_sidebar_border_color":"829D5E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/221625173\/all_love_edited_normal.jpg","id":24280282,"time_zone":"Eastern Time (US & Canada)","followers_count":43},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908233302,"source":"web"} -{"text":"#3News NZ: Drake dismisses Rihanna romance rumours: Rapper Drake is playing down rumours he's dating R.. http:\/\/tr.im\/mikf","created_at":"Mon May 25 01:59:23 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":"Unofficial 3 News NZ Headlines - every 30 mins. @dodos57 wanted some NZ TV3 News on twitter. ","screen_name":"3NewsNZ","following":null,"utc_offset":43200,"created_at":"Fri Apr 04 11:25:18 +0000 2008","friends_count":485,"profile_text_color":"000000","notifications":null,"statuses_count":30518,"favourites_count":22,"protected":false,"profile_link_color":"0000ff","location":"The Ether, L:New Zealand:","name":"3News Headlines, NZ","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":"http:\/\/3news.co.nz?from=Twitter.com\/3NewsNZ","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/82109046\/3Newslogo_normal.jpg","id":14301731,"time_zone":"Wellington","followers_count":937},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908233300,"source":"twitterfeed<\/a>"} -{"truncated":false,"text":"THINK: is okay for ur bf 2 call your dad while you're on vaca if you're not answering his texts? Weird...","created_at":"Mon May 25 01:59:23 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":43,"favourites_count":0,"description":"","screen_name":"mandymarin","following":null,"utc_offset":-25200,"created_at":"Tue Mar 24 23:53:42 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"","name":"Mandy","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":"Arizona","followers_count":32,"profile_background_color":"9ae4e8","friends_count":88,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/209028467\/Mandy_055_normal.jpg","id":26363310,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908233400,"source":"txt<\/a>"} -{"text":"just chilling","created_at":"Mon May 25 01:59:23 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":null,"screen_name":"free2beme3","following":null,"utc_offset":null,"created_at":"Mon May 25 01:56:41 +0000 2009","friends_count":2,"profile_text_color":"000000","notifications":null,"statuses_count":1,"favourites_count":0,"protected":false,"profile_link_color":"0000ff","location":null,"name":"Tyler Wilridge","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":null,"profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":42326911,"time_zone":null,"followers_count":0},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908233401,"source":"web"} -{"truncated":false,"text":"@nighthawk182 as if the heart murmur and seeing the cardio wasn't enough, then ear infection, thrush from antibiotics, now strep poor guy","created_at":"Mon May 25 01:59:23 +0000 2009","in_reply_to_user_id":25377980,"favorited":false,"user":{"notifications":null,"statuses_count":27,"favourites_count":1,"description":null,"screen_name":"ladyhawk182","following":null,"utc_offset":null,"created_at":"Mon Apr 13 01:49:26 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":null,"name":"Laraine Epley","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":null,"followers_count":9,"profile_background_color":"9ae4e8","friends_count":40,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":30776862,"profile_text_color":"000000"},"in_reply_to_screen_name":"nighthawk182","in_reply_to_status_id":1907160325,"id":1908233404,"source":"Tweetie<\/a>"} -{"truncated":false,"text":"just started playing UFC 2009 Undisputed. http:\/\/raptr.com\/dmac","created_at":"Mon May 25 01:59:23 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":129,"favourites_count":0,"description":"","screen_name":"Dmac271","following":null,"utc_offset":-18000,"created_at":"Wed Mar 25 02:38:30 +0000 2009","profile_link_color":"333333","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/6842822\/twitter1.png","profile_sidebar_fill_color":"c61515","protected":false,"location":"","name":"Derek Kaylor","profile_sidebar_border_color":"333333","profile_background_tile":false,"url":null,"time_zone":"Eastern Time (US & Canada)","followers_count":40,"profile_background_color":"333333","friends_count":61,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/109167236\/n1167450214_2014_normal.jpg","id":26407105,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908233403,"source":"Raptr<\/a>"} -{"truncated":false,"text":"enjoyed the rain all weekend","in_reply_to_user_id":null,"favorited":false,"created_at":"Mon May 25 01:59:23 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908233402,"user":{"friends_count":172,"location":null,"utc_offset":null,"profile_text_color":"000000","notifications":null,"statuses_count":39,"favourites_count":0,"following":null,"profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","description":null,"name":"Marty Chavez","profile_sidebar_fill_color":"e0ff92","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/95410467\/visionary_normal.JPG","created_at":"Fri Mar 13 21:05:53 +0000 2009","profile_sidebar_border_color":"87bc44","screen_name":"MartyChavez","profile_background_tile":false,"time_zone":null,"followers_count":255,"id":24254006,"profile_background_color":"9ae4e8","url":null},"source":"web"} -{"text":"CORALINE! EDEN LAKE! BLACK DYNAMITE! Nick Hornby's AN EDUCATION! And that's just for starters... Bring on @MIFF09Official!!!","created_at":"Mon May 25 01:59:24 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"22242a","description":"I watch, make, watch, blog about, and watch films.","screen_name":"cinemaviscera","following":null,"utc_offset":36000,"created_at":"Sun Mar 22 22:06:08 +0000 2009","friends_count":79,"profile_text_color":"d30909","notifications":null,"statuses_count":206,"favourites_count":0,"protected":false,"profile_link_color":"2f3bef","location":"Melbourne, Australia","name":"Paul Anthony Nelson","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"010005","url":"http:\/\/pulpfrictionaustralia.blogspot.com","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/124035544\/DirectPic_normal.jpg","id":25890717,"time_zone":"Melbourne","followers_count":72},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908233503,"source":"web"} -{"truncated":false,"text":"consegui foto da dancinha e foto do cora\u00e7\u00e3o, FG *--*","created_at":"Mon May 25 01:59:24 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":306,"favourites_count":0,"description":"","screen_name":"camilaxxx","following":null,"utc_offset":-14400,"created_at":"Tue Apr 21 02:30:03 +0000 2009","profile_link_color":"9e9e9e","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/14025780\/loveisdr4.jpg","profile_sidebar_fill_color":"fefbfc","protected":false,"location":"Brasil","name":"camila virna","profile_sidebar_border_color":"f3aad8","profile_background_tile":true,"url":null,"time_zone":"Santiago","followers_count":32,"profile_background_color":"f3aad8","friends_count":67,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/149640942\/Imagem_015_normal.jpg","id":33776191,"profile_text_color":"ea75af"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908233504,"source":"web"} -{"text":"One more half, let's go Magic","created_at":"Mon May 25 01:59:24 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"1A1B1F","description":"I Live Life To The Fullest","screen_name":"cvv1984","following":null,"utc_offset":-21600,"created_at":"Wed Sep 10 22:16:07 +0000 2008","friends_count":188,"profile_text_color":"666666","notifications":null,"statuses_count":837,"favourites_count":3,"protected":false,"profile_link_color":"2FC2EF","location":"Mars","name":"IAMHIPHOP","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","url":"http:\/\/thecaramellounge.blogspot.com","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/228839138\/Photo_1_normal.jpg","id":16229264,"time_zone":"Central Time (US & Canada)","followers_count":70},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908233501,"source":"Twittelator<\/a>"} -{"truncated":false,"text":"@heystephy hope it's a good one :D","in_reply_to_user_id":21638437,"favorited":false,"created_at":"Mon May 25 01:59:24 +0000 2009","in_reply_to_screen_name":"heystephy","in_reply_to_status_id":1908103775,"id":1908233500,"user":{"friends_count":35,"location":"Cali, Colombia ","utc_offset":-21600,"profile_text_color":"634047","notifications":null,"statuses_count":519,"favourites_count":6,"following":null,"profile_link_color":"088253","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme3\/bg.gif","description":"crazy curly hair all over the place = ME!","name":"Natalia G\u00f3mez T.","profile_sidebar_fill_color":"E3E2DE","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/207572520\/natatwitter1_normal.jpg","created_at":"Sat Apr 04 02:13:38 +0000 2009","profile_sidebar_border_color":"D3D2CF","screen_name":"natagomez","profile_background_tile":false,"time_zone":"Central Time (US & Canada)","followers_count":14,"id":28716522,"profile_background_color":"EDECE9","url":null},"source":"web"} -{"truncated":false,"text":"shares http:\/\/tinyurl.com\/pz8qtq http:\/\/plurk.com\/p\/vyvds","created_at":"Mon May 25 01:59:25 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":27,"favourites_count":0,"description":"","screen_name":"virginiagallino","following":null,"utc_offset":-14400,"created_at":"Sat Mar 28 17:17:42 +0000 2009","profile_link_color":"664100","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"92b262","protected":false,"location":"Buenos Aires","name":"Virginia Gallino","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"url":"http:\/\/www.virginiagallino.com.ar","time_zone":"Santiago","followers_count":7,"profile_background_color":"333642","friends_count":11,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/113011763\/facebook25_normal.jpg","id":27267022,"profile_text_color":"262626"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908233604,"source":"web"} -{"text":"@lameymacdonald thought Gilbert video was great!Really did watch 3x.Could watch again.Love her description of creativity http:\/\/bit.ly\/N3jIf","created_at":"Mon May 25 01:59:25 +0000 2009","truncated":false,"in_reply_to_user_id":17454801,"user":{"profile_background_color":"9AE4E8","description":"creative, imagination, art, illustration, marketing professional by day, curious sort, cat hugger, nature lover, gardner, walker, bird watcher, giggler.","screen_name":"CHERYLtheArtist","following":null,"utc_offset":-18000,"created_at":"Wed Mar 04 14:57:10 +0000 2009","friends_count":493,"profile_text_color":"333333","notifications":null,"statuses_count":664,"favourites_count":31,"protected":false,"profile_link_color":"0084B4","location":"Pennsylvania","name":"Cheryl Kugler","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/5583368\/spiral_1___2_.jpg","profile_sidebar_fill_color":"e9c216","url":"http:\/\/www.cherylkugler.blogspot.com","profile_sidebar_border_color":"1189e8","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/90557757\/SadieAndKittyTea_square_crop_resized_75_normal.jpg","id":22782668,"time_zone":"Eastern Time (US & Canada)","followers_count":529},"favorited":false,"in_reply_to_screen_name":"lameymacdonald","in_reply_to_status_id":null,"id":1908233701,"source":"web"} -{"text":"@AnaRampelotti continuaremos aqui pq \u00e9 bem massinha. =)","created_at":"Mon May 25 01:59:25 +0000 2009","truncated":false,"in_reply_to_user_id":41811980,"user":{"profile_background_color":"352726","description":"nasci, cresci e ainda n\u00e3o morri.","screen_name":"mahmih","following":null,"utc_offset":-14400,"created_at":"Sun May 24 15:11:40 +0000 2009","friends_count":16,"profile_text_color":"3E4415","notifications":null,"statuses_count":7,"favourites_count":0,"protected":false,"profile_link_color":"D02B55","location":"Sou Para\u00edba e n\u00e3o nego.","name":"Maira Mirella","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme5\/bg.gif","profile_sidebar_fill_color":"99CC33","url":null,"profile_sidebar_border_color":"829D5E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/228520049\/hehe_normal.JPG","id":42225180,"time_zone":"Santiago","followers_count":8},"favorited":false,"in_reply_to_screen_name":"AnaRampelotti","in_reply_to_status_id":1908221930,"id":1908233703,"source":"web"} -{"text":"@ShadyBob PBR!","created_at":"Mon May 25 01:59:25 +0000 2009","truncated":false,"in_reply_to_user_id":14513757,"user":{"profile_background_color":"FF6699","description":"Notorious Hollywood Party Girl, Photographer, Blogger and Message Board Hooker. Visiting Milwaukee WI June 1st-3rd Chicago ILL June 3rd-5th","screen_name":"jennydemilo","following":null,"utc_offset":-28800,"created_at":"Thu Nov 06 20:07:36 +0000 2008","friends_count":112,"profile_text_color":"362720","notifications":null,"statuses_count":3125,"favourites_count":8,"protected":false,"profile_link_color":"B40B43","location":"Downtown Los Angeles","name":"Jenny DeMilo","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/4552192\/bubbles.jpg","profile_sidebar_fill_color":"e550a6","url":"http:\/\/www.goodtimejenny.com","profile_sidebar_border_color":"CC3366","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/112586440\/Boston10_sm_normal.jpg","id":17218167,"time_zone":"Pacific Time (US & Canada)","followers_count":569},"favorited":false,"in_reply_to_screen_name":"ShadyBob","in_reply_to_status_id":1908176167,"id":1908233704,"source":"TweetDeck<\/a>"} -{"text":"Im oficaly a world class bitch now. Both ears are infected (big pain!), Im super tired(2 hours sleep) & I would kill 4 food. Even nasty ...","created_at":"Mon May 25 01:59:25 +0000 2009","truncated":true,"in_reply_to_user_id":null,"user":{"profile_background_color":"1A1B1F","description":"Most days I make no sense but then again, do you?","screen_name":"Jodiesirovy","following":null,"utc_offset":-21600,"created_at":"Wed May 28 00:32:40 +0000 2008","friends_count":36,"profile_text_color":"666666","notifications":null,"statuses_count":2659,"favourites_count":1,"protected":false,"profile_link_color":"2FC2EF","location":"Iowa, I know, your jealous.","name":"Jodiesirovy","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","url":"http:\/\/www.myspace.com\/Jodie_sirovy","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/134573984\/l_3ba04c2ee8ae125b1e84e61ca490fb0d_normal.jpg","id":14927903,"time_zone":"Central Time (US & Canada)","followers_count":75},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908233702,"source":"txt<\/a>"} -{"truncated":false,"text":"@Dollista lol! \"hey, shyt happens\" u knew her over twitter or beyond it?","created_at":"Mon May 25 01:59:26 +0000 2009","in_reply_to_user_id":11704052,"favorited":false,"user":{"notifications":null,"statuses_count":1242,"favourites_count":0,"description":"Fck You!","screen_name":"MelPopular","following":null,"utc_offset":-18000,"created_at":"Mon Mar 16 02:11:31 +0000 2009","profile_link_color":"FF0000","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme10\/bg.gif","profile_sidebar_fill_color":"7AC3EE","protected":false,"location":"Brooklyn, N.Y","name":"Melody Popular","profile_sidebar_border_color":"65B0DA","profile_background_tile":true,"url":"http:\/\/myspace.com\/fckmel","time_zone":"Eastern Time (US & Canada)","followers_count":123,"profile_background_color":"642D8B","friends_count":79,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/216813996\/IMG00028_normal.JPG","id":24631838,"profile_text_color":"3D1957"},"in_reply_to_screen_name":"Dollista","in_reply_to_status_id":null,"id":1908233802,"source":"mobile web<\/a>"} -{"truncated":false,"text":"LOCAL: Connecticut Welcomes WWII Vets Home Again: Hundreds of family and friends welcomed home the team of.. http:\/\/tinyurl.com\/pb6csz","created_at":"Mon May 25 01:59:27 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":4416,"favourites_count":0,"description":"News. Around Town. Weather. Sports. Locals Only.","screen_name":"NBCConnecticut","following":null,"utc_offset":-21600,"created_at":"Mon Jan 19 20:59:33 +0000 2009","profile_link_color":"0099B9","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme4\/bg.gif","profile_sidebar_fill_color":"95E8EC","protected":false,"location":"","name":"NBC Connecticut","profile_sidebar_border_color":"5ED4DC","profile_background_tile":false,"url":"http:\/\/www.nbcconnecticut.com","time_zone":"Central Time (US & Canada)","followers_count":1138,"profile_background_color":"0099B9","friends_count":9,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/71960928\/nbclogo_normal.jpg","id":19201818,"profile_text_color":"3C3940"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908233900,"source":"twitterfeed<\/a>"} -{"text":"@vderderian ummm i don't know what this will do...","created_at":"Mon May 25 01:59:27 +0000 2009","truncated":false,"in_reply_to_user_id":42322058,"user":{"profile_background_color":"FF6699","description":"","screen_name":"t_weenie","following":null,"utc_offset":-18000,"created_at":"Fri May 15 19:31:33 +0000 2009","friends_count":10,"profile_text_color":"362720","notifications":null,"statuses_count":4,"favourites_count":0,"protected":false,"profile_link_color":"B40B43","location":"","name":"Taleen Sandrouni","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme11\/bg.gif","profile_sidebar_fill_color":"E5507E","url":null,"profile_sidebar_border_color":"CC3366","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/213550234\/2657_525345711104_28304462_31689425_7995933_n_normal.jpg","id":40313458,"time_zone":"Eastern Time (US & Canada)","followers_count":1},"favorited":false,"in_reply_to_screen_name":"vderderian","in_reply_to_status_id":1908200360,"id":1908233903,"source":"web"} -{"text":"RT @luxofgodsgirls: http:\/\/twitpic.com\/5w7vv - my hair covers my boobs. ta da!","created_at":"Mon May 25 01:59:27 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9AE4E8","description":"Vintage Pinup girl and photographer with her own iPhone App!","screen_name":"PocketPinUp","following":null,"utc_offset":-28800,"created_at":"Tue Apr 21 23:56:58 +0000 2009","friends_count":859,"profile_text_color":"333333","notifications":null,"statuses_count":400,"favourites_count":5,"protected":false,"profile_link_color":"0084B4","location":"Main Street, USA","name":"Pocket Pin-Ups","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/9488387\/TwitterBackGround.jpg","profile_sidebar_fill_color":"DDFFCC","url":"http:\/\/www.pocketpin-ups.com","profile_sidebar_border_color":"BDDCAD","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/193090860\/ProfileIconPhoto_normal.jpg","id":34098896,"time_zone":"Pacific Time (US & Canada)","followers_count":860},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908233904,"source":"TwitterFon<\/a>"} -{"text":"Playing on www.station112.com Rock: Led Zeppelin - Misty Mountain Hop","created_at":"Mon May 25 01:59:27 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":null,"screen_name":"Station112_Rock","following":null,"utc_offset":null,"created_at":"Sun Apr 26 05:46:49 +0000 2009","friends_count":2,"profile_text_color":"000000","notifications":null,"statuses_count":8362,"favourites_count":0,"protected":false,"profile_link_color":"0000ff","location":null,"name":"Station112-Rock","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":null,"profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":35414192,"time_zone":null,"followers_count":141},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908233902,"source":"TwitterMail<\/a>"} -{"truncated":false,"text":"Just had a really bad meal at longhorn-cheapest thing on menu-was gonna charge it...but they did not make me pay...","created_at":"Mon May 25 01:59:27 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":1228,"favourites_count":0,"description":"seminary student in new orleans","screen_name":"jcardinell","following":null,"utc_offset":-25200,"created_at":"Tue Dec 16 18:17:44 +0000 2008","profile_link_color":"D02B55","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"99CC33","protected":false,"location":"new orleans\/biloxi ms","name":"jcardinell","profile_sidebar_border_color":"829D5E","profile_background_tile":true,"url":"http:\/\/unlimitedpartnerships.org","time_zone":"Mountain Time (US & Canada)","followers_count":101,"profile_background_color":"352726","friends_count":67,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/148784417\/chicago_2002_normal.jpg","id":18168259,"profile_text_color":"3E4415"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908233901,"source":"txt<\/a>"} -{"truncated":false,"text":"@pickerbrad: Your Twitter profile is worth 104 US$ http:\/\/tweetvalue.com","created_at":"Mon May 25 01:59:27 +0000 2009","in_reply_to_user_id":22960631,"favorited":false,"user":{"notifications":null,"statuses_count":2652,"favourites_count":0,"description":"How much is your Twitter profile worth?","screen_name":"tweetvalue","following":null,"utc_offset":-36000,"created_at":"Thu Dec 18 07:37:57 +0000 2008","profile_link_color":"0084B4","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/8655323\/tweetvalue_small.png","profile_sidebar_fill_color":"DDFFCC","protected":false,"location":"Sweden","name":"TweetValue.com","profile_sidebar_border_color":"BDDCAD","profile_background_tile":false,"url":"http:\/\/tweetvalue.com","time_zone":"Hawaii","followers_count":1165,"profile_background_color":"ffffff","friends_count":2002,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/67824507\/tweetvalue_small_normal.png","id":18211198,"profile_text_color":"333333"},"in_reply_to_screen_name":"pickerbrad","in_reply_to_status_id":null,"id":1908234004,"source":"web"} -{"truncated":false,"text":"@lalumena Took some decongestants. They helped.","created_at":"Mon May 25 01:59:27 +0000 2009","in_reply_to_user_id":16901621,"favorited":false,"user":{"notifications":null,"statuses_count":920,"favourites_count":4,"description":"I'm the bomb like tick tick.","screen_name":"oxymoronassoc","following":null,"utc_offset":-28800,"created_at":"Fri Jan 09 22:07:08 +0000 2009","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","protected":false,"location":"California","name":"Britta","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"url":null,"time_zone":"Pacific Time (US & Canada)","followers_count":73,"profile_background_color":"1A1B1F","friends_count":52,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/156336550\/twitter_normal.jpg","id":18817499,"profile_text_color":"666666"},"in_reply_to_screen_name":"lalumena","in_reply_to_status_id":1908215208,"id":1908234000,"source":"TwitterFox<\/a>"} -{"truncated":false,"text":"me gustaria comprar la version PRO de tantos servicios... ya soy increible, pero no PRO todavia... #serincreible","created_at":"Mon May 25 01:59:27 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":7299,"favourites_count":143,"description":"Estudiante de Dis. Multimedia\/Interactivo, fan de CSS, AE, internet, fotografia y la tech en gral. Corredor de bici cuando hay tpo.","screen_name":"rulexdesign","following":null,"utc_offset":-10800,"created_at":"Wed Aug 06 13:42:35 +0000 2008","profile_link_color":"fb2801","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"0f0f0f","protected":false,"location":"Cba, Argentina","name":"eugenio","profile_sidebar_border_color":"FB2801","profile_background_tile":false,"url":"http:\/\/www.rule-xdesign.com.ar\/blog","time_zone":"Buenos Aires","followers_count":251,"profile_background_color":"000000","friends_count":192,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/220176942\/avatar-bici_normal.png","id":15749852,"profile_text_color":"666666"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908234002,"source":"TweetDeck<\/a>"} -{"text":"T\u00f4 indo dormir e ler Budapeste - espero q n\u00e3o nessa ordem...","created_at":"Mon May 25 01:59:28 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"1A1B1F","description":"","screen_name":"caiobrant","following":null,"utc_offset":-10800,"created_at":"Thu Jun 19 19:25:55 +0000 2008","friends_count":206,"profile_text_color":"666666","notifications":null,"statuses_count":546,"favourites_count":28,"protected":false,"profile_link_color":"4f8696","location":"Bras\u00edlia - DF","name":"Caio Brant","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/9843136\/510011_75478994pq.jpg","profile_sidebar_fill_color":"252429","url":"http:\/\/www.meadiciona.com\/caiobrant","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/220506843\/caio02_normal.jpg","id":15172439,"time_zone":"Brasilia","followers_count":185},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908234100,"source":"TweetDeck<\/a>"} -{"truncated":false,"text":"@Chinks1023 U doing anything when u get off ?","created_at":"Mon May 25 01:59:28 +0000 2009","in_reply_to_user_id":21711020,"favorited":false,"user":{"notifications":null,"statuses_count":2206,"favourites_count":20,"description":" The Real Tony Jonhnson!!!! N.C. Represent. AKA Tony Dynamite ","screen_name":"KingTee1","following":null,"utc_offset":-28800,"created_at":"Sat Apr 25 02:18:39 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"North Carolina","name":"Tony Johnson","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":"http:\/\/Tszion23@yahoo.com ","time_zone":"Pacific Time (US & Canada)","followers_count":163,"profile_background_color":"9ae4e8","friends_count":286,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/186488804\/download_normal.jpg","id":35116862,"profile_text_color":"000000"},"in_reply_to_screen_name":"Chinks1023","in_reply_to_status_id":1908207436,"id":1908234103,"source":"TwitterFon<\/a>"} -{"truncated":false,"text":"@no634 how does that amount of broken bones make a court case?","created_at":"Mon May 25 01:59:28 +0000 2009","in_reply_to_user_id":18326035,"favorited":false,"user":{"notifications":null,"statuses_count":5682,"favourites_count":3,"description":"I just graduated from the U of MN, and am killing some time before I go to South Korea to teach English","screen_name":"gnimsh","following":null,"utc_offset":-21600,"created_at":"Tue Apr 29 19:51:27 +0000 2008","profile_link_color":"1F98C7","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme2\/bg.gif","profile_sidebar_fill_color":"DAECF4","protected":false,"location":"Minneapolis","name":"Justin","profile_sidebar_border_color":"C6E2EE","profile_background_tile":false,"url":"http:\/\/www.linkedin.com\/in\/justinloutsch","time_zone":"Central Time (US & Canada)","followers_count":261,"profile_background_color":"C6E2EE","friends_count":292,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/81769475\/MefromPhone_normal.jpg","id":14589706,"profile_text_color":"663B12"},"in_reply_to_screen_name":"no634","in_reply_to_status_id":1908208067,"id":1908234101,"source":"TweetDeck<\/a>"} -{"truncated":false,"text":"@HerrRigney have you ever read elephants of posnan or elephantmen? i recommend both.","created_at":"Mon May 25 01:59:28 +0000 2009","in_reply_to_user_id":36266039,"favorited":false,"user":{"notifications":null,"statuses_count":4479,"favourites_count":123,"description":"this is my replacement for short term memory. GET OUT OF MY HEAD, CHARLES!!!","screen_name":"emfail","following":null,"utc_offset":-21600,"created_at":"Sun Oct 19 22:42:39 +0000 2008","profile_link_color":"fe6d20","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/13606888\/twitterbackground.JPG","profile_sidebar_fill_color":"ffffff","protected":false,"location":"Highland Park, IL","name":"emily eff art doux","profile_sidebar_border_color":"181A1E","profile_background_tile":true,"url":"http:\/\/www.amazon.com\/gp\/registry\/wishlist\/2YM9O9S3XAC96","time_zone":"Central Time (US & Canada)","followers_count":71,"profile_background_color":"1A1B1F","friends_count":91,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/219396757\/newtwitterpic_normal.JPG","id":16857319,"profile_text_color":"000000"},"in_reply_to_screen_name":"HerrRigney","in_reply_to_status_id":1907366954,"id":1908234104,"source":"TwitterGadget<\/a>"} -{"text":"\"A lot of fellows nowadays have a B.A., M.D., or Ph.D. Unfortunately, they don't have a J.O.B.\" Fats Domino","created_at":"Mon May 25 01:59:25 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"aeaa6b","description":"I provide Social Media Virtual Assistance to companies\/individuals _ DM to discuss your needs","screen_name":"bobgarrett","following":null,"utc_offset":-18000,"created_at":"Sat Mar 15 21:09:39 +0000 2008","friends_count":37294,"profile_text_color":"b34d4d","notifications":null,"statuses_count":8345,"favourites_count":30,"protected":false,"profile_link_color":"2FC2EF","location":"Philadelphia","name":"Bob Garrett","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/3658309\/p3.jpg","profile_sidebar_fill_color":"252429","url":"http:\/\/www.linkedin.com\/in\/bobgarrett","profile_sidebar_border_color":"181A1E","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/68639497\/P1010019_normal.JPG","id":14154581,"time_zone":"Eastern Time (US & Canada)","followers_count":35553},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908233700,"source":"web"} -{"truncated":false,"text":"http:\/\/twitpic.com\/5wa9h -","created_at":"Mon May 25 01:59:29 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":16,"favourites_count":1,"description":"","screen_name":"aj_torres","following":null,"utc_offset":-14400,"created_at":"Sun May 03 21:06:23 +0000 2009","profile_link_color":"0084B4","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/14085667\/edge-crude-lewd-tattooed-rated-R-superstar-logo-wallpaper-preview.jpg","profile_sidebar_fill_color":"DDFFCC","protected":false,"location":"San Juan,PR","name":"Angel Torres","profile_sidebar_border_color":"BDDCAD","profile_background_tile":true,"url":null,"time_zone":"Caracas","followers_count":7,"profile_background_color":"810404","friends_count":10,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/220873150\/n604665536_5515681_661_normal.jpg","id":37502039,"profile_text_color":"092667"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908234203,"source":"TwitPic<\/a>"} -{"truncated":false,"text":"@mattbritton florida has a great smell. the air also smells good after it rains....","created_at":"Mon May 25 01:59:29 +0000 2009","in_reply_to_user_id":14180584,"favorited":false,"user":{"notifications":null,"statuses_count":400,"favourites_count":1,"description":"strange girl who enjoys the strange things in life.","screen_name":"Erica9918","following":null,"utc_offset":-18000,"created_at":"Wed Feb 11 18:43:53 +0000 2009","profile_link_color":"0084B4","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"DDFFCC","protected":false,"location":"NYC","name":"Erica Berger","profile_sidebar_border_color":"BDDCAD","profile_background_tile":false,"url":null,"time_zone":"Eastern Time (US & Canada)","followers_count":36,"profile_background_color":"9AE4E8","friends_count":32,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/142128354\/Yaakov_normal.jpg","id":20610237,"profile_text_color":"333333"},"in_reply_to_screen_name":"mattbritton","in_reply_to_status_id":1908176744,"id":1908234202,"source":"web"} -{"text":"@itsinca how is everything?","created_at":"Mon May 25 01:59:29 +0000 2009","truncated":false,"in_reply_to_user_id":17079789,"user":{"profile_background_color":"9ae4e8","description":"","screen_name":"vinchinza","following":null,"utc_offset":-18000,"created_at":"Tue Feb 10 03:04:22 +0000 2009","friends_count":50,"profile_text_color":"000000","notifications":null,"statuses_count":326,"favourites_count":0,"protected":false,"profile_link_color":"0000ff","location":"\u00dcT: 39.273859,-76.653083","name":"Vinnie Samuel","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":null,"profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/113873778\/n1174572503_30107388_1380_normal.jpg","id":20488344,"time_zone":"Quito","followers_count":84},"favorited":false,"in_reply_to_screen_name":"itsinca","in_reply_to_status_id":1908180591,"id":1908234201,"source":"UberTwitter<\/a>"} -{"truncated":false,"text":"Pusssy","created_at":"Mon May 25 01:59:29 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":146,"favourites_count":0,"description":"i'm sam. whaddup ullys","screen_name":"samanthaabear","following":null,"utc_offset":-28800,"created_at":"Thu Apr 16 23:27:42 +0000 2009","profile_link_color":"FF0000","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme12\/bg.gif","profile_sidebar_fill_color":"ffffff","protected":false,"location":"CHRESNO","name":"Samantha Bear","profile_sidebar_border_color":"b5d4cc","profile_background_tile":false,"url":"http:\/\/myspace.com\/iluhchoo","time_zone":"Pacific Time (US & Canada)","followers_count":27,"profile_background_color":"BADFCD","friends_count":19,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/141478861\/IMG_4771_77_normal.jpg","id":32201569,"profile_text_color":"171717"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908234200,"source":"txt<\/a>"} -{"text":"@anal_probery Can you scan those drawings for me? It is a matter of saving the world, or at least my user icon.","created_at":"Mon May 25 01:59:29 +0000 2009","truncated":false,"in_reply_to_user_id":19422891,"user":{"profile_background_color":"C6E2EE","description":"Why hello there.","screen_name":"YouSexyThing","following":null,"utc_offset":-28800,"created_at":"Wed Apr 01 17:47:16 +0000 2009","friends_count":14,"profile_text_color":"393838","notifications":null,"statuses_count":674,"favourites_count":0,"protected":false,"profile_link_color":"1F98C7","location":"Kazakh SSR","name":"Jake Edwards","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/7350477\/Totoro_by_Rikku_x.jpg","profile_sidebar_fill_color":"d4d4d4","url":null,"profile_sidebar_border_color":"C6E2EE","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/118118466\/Totoro_normal.png","id":28153131,"time_zone":"Pacific Time (US & Canada)","followers_count":6},"favorited":false,"in_reply_to_screen_name":"anal_probery","in_reply_to_status_id":null,"id":1908234301,"source":"web"} -{"truncated":false,"text":"At The Red Rock on E Broad in Blacklick watching the game.","in_reply_to_user_id":null,"favorited":false,"created_at":"Mon May 25 01:59:29 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908234304,"user":{"friends_count":1136,"location":"Pataskala, Ohio","utc_offset":-18000,"profile_text_color":"3D1957","notifications":null,"statuses_count":840,"favourites_count":28,"following":null,"profile_link_color":"FF0000","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/9843782\/twitterpageDenver.jpg","description":"Real Estate Investor (Always In Training). Enrolled in Than Merrill's Wholesaling University. Commercial Loan Broker Singer\/songwriter Goofball","name":"Denver Harris","profile_sidebar_fill_color":"7AC3EE","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/204432754\/profile_normal.jpg","created_at":"Sun Mar 01 07:00:55 +0000 2009","profile_sidebar_border_color":"65B0DA","screen_name":"Denversings","profile_background_tile":true,"time_zone":"Eastern Time (US & Canada)","followers_count":1015,"id":22340023,"profile_background_color":"642D8B","url":"http:\/\/entrepreneurmanure.com"},"source":"Twitterrific<\/a>"} -{"truncated":false,"text":"@jewelrytothesea how did you get twittah on your phone? T__T","created_at":"Mon May 25 01:59:29 +0000 2009","in_reply_to_user_id":21375395,"favorited":false,"user":{"notifications":null,"statuses_count":619,"favourites_count":3,"description":"","screen_name":"tylsforthescars","following":null,"utc_offset":-25200,"created_at":"Fri Jan 16 01:36:06 +0000 2009","profile_link_color":"0084B4","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"DDFFCC","protected":false,"location":"","name":"Kaitlyn Skinner","profile_sidebar_border_color":"BDDCAD","profile_background_tile":false,"url":null,"time_zone":"Mountain Time (US & Canada)","followers_count":34,"profile_background_color":"9AE4E8","friends_count":36,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/193942354\/Photo_16_normal.jpg","id":19049313,"profile_text_color":"333333"},"in_reply_to_screen_name":"jewelrytothesea","in_reply_to_status_id":1908201184,"id":1908234303,"source":"web"} -{"text":"Me gusta. Snapter. Escanea documentos con tu c\u00e1mara de fotos. http:\/\/snapter.atiz.com\/ (v\u00eda @hectorarturo)","created_at":"Mon May 25 01:59:29 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"ffffff","description":"Fathr, Lovr, Codr, Cancr, Philosophr, Designr, Bloggr, Flickr, Tumblr, Twittr, Googlr, Naileatr, Monstr, Writr, Teachr, Learnr, Deskhelpr, Dreamr, Left-handr","screen_name":"Quenerapu","following":null,"utc_offset":3600,"created_at":"Mon Mar 26 07:54:24 +0000 2007","friends_count":215,"profile_text_color":"4f4f4f","notifications":null,"statuses_count":2507,"favourites_count":11,"protected":false,"profile_link_color":"75001e","location":"Santiago de Compostela","name":"I\u00f1aki Quenerap\u00fa","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/8143719\/mini_USBlood.gif","profile_sidebar_fill_color":"ffffff","url":"http:\/\/quenerapu.com","profile_sidebar_border_color":"d1d1d1","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/203289450\/barca_normal.jpg","id":2270421,"time_zone":"Madrid","followers_count":197},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908234300,"source":"web"} -{"truncated":false,"text":"Monday again.. Holidays next week..","created_at":"Mon May 25 01:59:30 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":23,"favourites_count":0,"description":"","screen_name":"SteveMartn","following":null,"utc_offset":36000,"created_at":"Thu Mar 26 05:08:17 +0000 2009","profile_link_color":"1F98C7","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme2\/bg.gif","profile_sidebar_fill_color":"DAECF4","protected":false,"location":"Melbourne","name":"Steve Martin","profile_sidebar_border_color":"C6E2EE","profile_background_tile":false,"url":null,"time_zone":"Melbourne","followers_count":4,"profile_background_color":"C6E2EE","friends_count":5,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/111370801\/21022009t_normal.jpg","id":26693519,"profile_text_color":"663B12"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908234402,"source":"Twitterrific<\/a>"} -{"truncated":false,"text":"just flew back from Australia","created_at":"Mon May 25 01:59:30 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":80,"favourites_count":0,"description":"Artist management always looking for a new star myspace.com\/helliconmanagement","screen_name":"rickbottari","following":null,"utc_offset":-28800,"created_at":"Sat Apr 04 23:18:53 +0000 2009","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","protected":false,"location":"LA","name":"rickbottari","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"url":null,"time_zone":"Pacific Time (US & Canada)","followers_count":366,"profile_background_color":"1A1B1F","friends_count":1250,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/121986574\/Captured_2004-07-25_00004_2_normal.jpg","id":28892459,"profile_text_color":"666666"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908234404,"source":"web"} -{"text":"need new perfumes na...","created_at":"Mon May 25 01:59:30 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"642D8B","description":"","screen_name":"neszreyes","following":null,"utc_offset":-32400,"created_at":"Mon May 11 03:05:13 +0000 2009","friends_count":10,"profile_text_color":"3D1957","notifications":null,"statuses_count":9,"favourites_count":0,"protected":false,"profile_link_color":"FF0000","location":"","name":"Nesz Reyes","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme10\/bg.gif","profile_sidebar_fill_color":"7AC3EE","url":"http:\/\/neszreyes.blogspot.com","profile_sidebar_border_color":"65B0DA","profile_background_tile":true,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":39177922,"time_zone":"Alaska","followers_count":8},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908234403,"source":"web"} -{"text":"So going to work late. Take that, coworker who's always late relieving me! :p Yes, I'm like, 12.","created_at":"Mon May 25 01:59:30 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"1A1B1F","description":"Behold the world's worst accident! I am 99% failure. And a music junkie. ","screen_name":"casket4mytears","following":null,"utc_offset":-18000,"created_at":"Fri Oct 31 02:41:59 +0000 2008","friends_count":31,"profile_text_color":"666666","notifications":null,"statuses_count":515,"favourites_count":21,"protected":false,"profile_link_color":"2FC2EF","location":"Toronto","name":"Amber Waves","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","url":"http:\/\/casket4mytears.vox.com","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/63244861\/n728260563_855262_7454_normal.jpg","id":17079497,"time_zone":"Eastern Time (US & Canada)","followers_count":25},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908234400,"source":"web"} -{"text":"@siriman \u4e88\u5b9a\u3042\u3048\u3070\u3044\u304d\u305f\u3044\uff01","created_at":"Mon May 25 01:59:30 +0000 2009","truncated":false,"in_reply_to_user_id":15001270,"user":{"profile_background_color":"9AE4E8","description":"\u718a\u672c\u304b\u3089\u51fa\u3066\u304d\u305f\u7530\u820e\u8005\u304c\u30d6\u30ed\u30b0\u306b\u66f8\u304f\u307b\u3069\u3067\u3082\u306a\u3044\u3053\u3068\u3092\u3064\u3076\u3084\u3044\u3066\u3044\u304d\u307e\u3059\u3002\u6a5f\u68b0\u985e\u3092\u3044\u3058\u308b\u306e\u304c\u5927\u597d\u304d\u306a\u30d7\u30ed\u30b0\u30e9\u30de\u3067\u3059\u3002\u8da3\u5473\uff1a\u97f3\u697d\u9451\u8cde\u3001\u30ab\u30e9\u30aa\u30b1\u3001\u30b2\u30fc\u30bb\u30f3\u3001\u30e9\u30fc\u30e1\u30f3\u5c4b\u5de1\u308a\u3002\u30a2\u30a4\u30b3\u30f3\u306f\u30c0\u30c1\u306b\u4f5c\u3063\u3066\u3082\u3089\u3063\u305fIntel\u98a8\u306a\u3084\u3064\u3002","screen_name":"sakadai","following":null,"utc_offset":32400,"created_at":"Sun May 18 12:35:48 +0000 2008","friends_count":73,"profile_text_color":"333333","notifications":null,"statuses_count":11143,"favourites_count":44,"protected":false,"profile_link_color":"244cf0","location":"\u5343\u8449\u770c\u8239\u6a4b\u5e02\u21d4\u718a\u672c","name":"\u3055\u304b\u3060\u3044","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/11807663\/1024-768.jpg","profile_sidebar_fill_color":"ccfffb","url":"http:\/\/iddy.jp\/profile\/sakadai\/","profile_sidebar_border_color":"BDDCAD","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/54350501\/GRP_0000_normal.GIF","id":14820246,"time_zone":"Tokyo","followers_count":72},"favorited":false,"in_reply_to_screen_name":"siriman","in_reply_to_status_id":1908163696,"id":1908234401,"source":"P3:PeraPeraPrv<\/a>"} -{"text":"@jennifersterger Seriously. I haven't seen players on the floor that much since the Spurs were winning championships.","created_at":"Mon May 25 01:59:31 +0000 2009","truncated":false,"in_reply_to_user_id":24469619,"user":{"profile_background_color":"9ae4e8","description":"EA SPORTS Community Manager ","screen_name":"raczilla","following":null,"utc_offset":-18000,"created_at":"Mon Apr 23 19:02:30 +0000 2007","friends_count":2804,"profile_text_color":"000000","notifications":null,"statuses_count":6269,"favourites_count":2,"protected":false,"profile_link_color":"0000ff","location":"Orlando","name":"Will Kinsler","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/4063317\/twittertemplate3.jpg","profile_sidebar_fill_color":"e0ff92","url":"http:\/\/insideblog.easports.com","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/63514872\/ea-sports-logo_normal.jpg","id":5442012,"time_zone":"Lima","followers_count":3982},"favorited":false,"in_reply_to_screen_name":"jennifersterger","in_reply_to_status_id":1908223503,"id":1908234503,"source":"web"} -{"text":"Del Monte Social Media Strategy Creates A New Pet Food: NEW YORK AdAge.com -- It&#039s one thing to debate t.. http:\/\/tinyurl.com\/po7pb8","created_at":"Mon May 25 01:59:31 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"1A1B1F","description":"Advertising News - nobosh.com","screen_name":"4AdNews","following":null,"utc_offset":-28800,"created_at":"Sun Feb 15 19:02:30 +0000 2009","friends_count":4,"profile_text_color":"666666","notifications":null,"statuses_count":465,"favourites_count":0,"protected":false,"profile_link_color":"2FC2EF","location":"nobosh.com","name":"Brett Hellman","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","url":"http:\/\/nobosh.com\/advertising-news\/","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/78554356\/iphoneicon_v2_BIG_normal.jpg","id":20928733,"time_zone":"Pacific Time (US & Canada)","followers_count":64},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908234500,"source":"twitterfeed<\/a>"} -{"text":"Chinese investment group to buy stake in NBA's Cleveland Cavaliers - http:\/\/twurl.nl\/l3fw5v","created_at":"Mon May 25 01:59:31 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":"CEO of BroadWebAsia and Dir. Giant Interactive. Previously GenCounsel IBM China & Star TV, CFO TOM Online, In Beijing\/HK for 24 years","screen_name":"peterschloss","following":null,"utc_offset":28800,"created_at":"Fri Feb 29 15:17:49 +0000 2008","friends_count":171,"profile_text_color":"000000","notifications":null,"statuses_count":2181,"favourites_count":5,"protected":false,"profile_link_color":"0000ff","location":"Beijing","name":"Peter Schloss","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/2813833\/IMG_0098.JPG","profile_sidebar_fill_color":"e0ff92","url":"http:\/\/www.major.tv\/china","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/194129022\/Peter_Color_3_normal.JPG","id":14060630,"time_zone":"Beijing","followers_count":512},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908234502,"source":"TweetDeck<\/a>"} -{"truncated":false,"text":"@PINKSUGARATL u got it baby","created_at":"Mon May 25 01:59:31 +0000 2009","in_reply_to_user_id":19094296,"favorited":false,"user":{"notifications":null,"statuses_count":3170,"favourites_count":83,"description":" Adult Entertainment Entrepreneur","screen_name":"TeddyHeffner","following":null,"utc_offset":-18000,"created_at":"Sun Apr 12 09:03:26 +0000 2009","profile_link_color":"0084B4","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/8280978\/cash.bmp","profile_sidebar_fill_color":"DDFFCC","protected":false,"location":"Atlanta,GA","name":"Teddy Heffner","profile_sidebar_border_color":"BDDCAD","profile_background_tile":false,"url":"http:\/\/www.youtube.com\/user\/teddyheffner","time_zone":"Eastern Time (US & Canada)","followers_count":1008,"profile_background_color":"9AE4E8","friends_count":2001,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/194786624\/4_normal.jpg","id":30626432,"profile_text_color":"333333"},"in_reply_to_screen_name":"PINKSUGARATL","in_reply_to_status_id":1908158235,"id":1908234504,"source":"web"} -{"text":"@Coach_Dunn..barkley has the worst lol","created_at":"Mon May 25 01:59:31 +0000 2009","truncated":false,"in_reply_to_user_id":37016255,"user":{"profile_background_color":"9ae4e8","description":null,"screen_name":"ris2701","following":null,"utc_offset":null,"created_at":"Fri May 08 00:50:08 +0000 2009","friends_count":24,"profile_text_color":"000000","notifications":null,"statuses_count":60,"favourites_count":0,"protected":false,"profile_link_color":"0000ff","location":null,"name":"Karissa Stafford","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":null,"profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/215301102\/ris_normal.jpg","id":38565215,"time_zone":null,"followers_count":5},"favorited":false,"in_reply_to_screen_name":"Coach_Dunn","in_reply_to_status_id":null,"id":1908234601,"source":"mobile web<\/a>"} -{"text":"@ampalm LOL I know he's not perfect but I really like West; he's a sincere and thoughtful philosopher #Stand","created_at":"Mon May 25 01:59:32 +0000 2009","truncated":false,"in_reply_to_user_id":10727332,"user":{"profile_background_color":"8B542B","description":"Blogging Postmodern Blackness","screen_name":"claudia_m","following":null,"utc_offset":-18000,"created_at":"Thu Oct 02 23:17:36 +0000 2008","friends_count":335,"profile_text_color":"333333","notifications":null,"statuses_count":732,"favourites_count":74,"protected":false,"profile_link_color":"9D582E","location":"Sula, pg. 6","name":"Bottom Of Heaven","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme8\/bg.gif","profile_sidebar_fill_color":"EADEAA","url":"http:\/\/thebottomofheaven.com","profile_sidebar_border_color":"D9B17E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/103056142\/knelson_normal.jpg","id":16568648,"time_zone":"Eastern Time (US & Canada)","followers_count":279},"favorited":false,"in_reply_to_screen_name":"ampalm","in_reply_to_status_id":1908216850,"id":1908234702,"source":"web"} -{"truncated":false,"text":"safeways asiago sindried tomato burgers are awsome....","in_reply_to_user_id":null,"favorited":false,"created_at":"Mon May 25 01:59:32 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908234700,"user":{"friends_count":17,"location":"Winnipeg","utc_offset":-21600,"profile_text_color":"000000","notifications":null,"statuses_count":73,"favourites_count":0,"following":null,"profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","description":"","name":"Cian Whalley","profile_sidebar_fill_color":"e0ff92","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/58943017\/n710936256_527342_2706_normal.jpg","created_at":"Wed Jul 30 21:46:59 +0000 2008","profile_sidebar_border_color":"87bc44","screen_name":"cwhalley","profile_background_tile":false,"time_zone":"Central America","followers_count":17,"id":15666716,"profile_background_color":"9ae4e8","url":"http:\/\/www.cian.ca"},"source":"Ping.fm<\/a>"} -{"truncated":false,"text":"Nothing last day of vacation so I'm getting ready to go home.","created_at":"Mon May 25 01:59:34 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":1,"favourites_count":0,"description":null,"screen_name":"khnvb8","following":null,"utc_offset":null,"created_at":"Mon May 25 01:55:45 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":null,"name":"Kylie Hulse-Nelson","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":null,"followers_count":0,"profile_background_color":"9ae4e8","friends_count":0,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":42326769,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908234703,"source":"web"} -{"truncated":false,"text":"about to get dressed...i think im going on a umm dare i say it...DATE?!...OMG...","created_at":"Mon May 25 01:59:32 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":1320,"favourites_count":7,"description":"brown skin..pretty smile..big heart..make YOU go wild...TRUE story =)...","screen_name":"PrettyGirrl","following":null,"utc_offset":-25200,"created_at":"Fri Feb 27 22:23:15 +0000 2009","profile_link_color":"B40B43","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/14046690\/cassette.JPG","profile_sidebar_fill_color":"100e0f","protected":false,"location":"the skin im in...","name":"angelle gillum","profile_sidebar_border_color":"441323","profile_background_tile":true,"url":null,"time_zone":"Mountain Time (US & Canada)","followers_count":96,"profile_background_color":"110d0f","friends_count":128,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/224158985\/prettygirl_normal.jpg","id":22199340,"profile_text_color":"766760"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908234701,"source":"web"} -{"text":"And off to bed I go... G'night!","created_at":"Mon May 25 01:59:32 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"EDECE9","description":"","screen_name":"shadysidefarm","following":null,"utc_offset":-18000,"created_at":"Sat Jan 31 19:52:46 +0000 2009","friends_count":103,"profile_text_color":"634047","notifications":null,"statuses_count":543,"favourites_count":3,"protected":false,"profile_link_color":"088253","location":"shadysidefarm.etsy.com","name":"Lona","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme3\/bg.gif","profile_sidebar_fill_color":"E3E2DE","url":"http:\/\/shadysidefarm.blogspot.com","profile_sidebar_border_color":"D3D2CF","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/74434041\/Tamarin_normal.jpg","id":19828552,"time_zone":"Eastern Time (US & Canada)","followers_count":144},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908234704,"source":"web"} -{"truncated":false,"text":"@ItairaShanice oh shit lmfaooo ahaha !","created_at":"Mon May 25 01:59:33 +0000 2009","in_reply_to_user_id":23159528,"favorited":false,"user":{"notifications":null,"statuses_count":3553,"favourites_count":30,"description":"Kaylah Marie or KayKay =p..very silly and alwayss making people laugh =) love to sing and dancee and gets bored very easily lol ..oh yeah I FLIPPIN LOVE MUSIC !","screen_name":"kAYlAHMARiE_","following":null,"utc_offset":-18000,"created_at":"Sat Mar 07 22:40:50 +0000 2009","profile_link_color":"0084B4","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/10474742\/GorgeousDawn.jpg","profile_sidebar_fill_color":"DDFFCC","protected":false,"location":"MSZ.BAH-ROOK-LYN OWW !","name":"Kaylah Marie","profile_sidebar_border_color":"BDDCAD","profile_background_tile":true,"url":"http:\/\/www.myspace.com\/h2zel3yedqtpi3","time_zone":"Quito","followers_count":331,"profile_background_color":"9AE4E8","friends_count":131,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/210919700\/for_twitter_try_2_normal.png","id":23243904,"profile_text_color":"333333"},"in_reply_to_screen_name":"ItairaShanice","in_reply_to_status_id":1908228532,"id":1908234800,"source":"TweetDeck<\/a>"} -{"text":"I haven't heard from Tanner in over 10 hours, and his phone is dead\/off. I'm getting REALLY worried.","created_at":"Mon May 25 01:59:33 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"642D8B","description":"I'm an aspiring Lifestyle Lolita, a Steampunk, an enigma, and an eccentric. Take your pick. =3","screen_name":"AvinaStar","following":null,"utc_offset":-18000,"created_at":"Sun Feb 22 02:21:53 +0000 2009","friends_count":32,"profile_text_color":"3D1957","notifications":null,"statuses_count":212,"favourites_count":2,"protected":false,"profile_link_color":"d676b6","location":"","name":"Avina Kurashina","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/13637184\/4dcddb56fea1256204f4ee0d8a95071f729_copy.jpg","profile_sidebar_fill_color":"ede5f6","url":"http:\/\/www.avinastar.livejournal.com","profile_sidebar_border_color":"553483","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/180161111\/Rose-Icon_normal.png","id":21537631,"time_zone":"Eastern Time (US & Canada)","followers_count":32},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908234801,"source":"TwitterFox<\/a>"} -{"truncated":false,"text":"Hi...I'm cold and want to feel Tony's arms around me. :(","created_at":"Mon May 25 01:59:33 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":237,"favourites_count":8,"description":"Peace.Love.Dance.<3","screen_name":"LattexRosexx3","following":null,"utc_offset":-18000,"created_at":"Wed Apr 15 01:49:33 +0000 2009","profile_link_color":"0084B4","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/12186788\/just_dance.jpg","profile_sidebar_fill_color":"DDFFCC","protected":false,"location":"","name":"Charlotte Wright","profile_sidebar_border_color":"BDDCAD","profile_background_tile":true,"url":"http:\/\/lattexrosexx3.shutterfly,com password:iluvdance","time_zone":"Eastern Time (US & Canada)","followers_count":21,"profile_background_color":"9AE4E8","friends_count":95,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/204572646\/love_normal.jpg","id":31300899,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908234804,"source":"Twitterrific<\/a>"} -{"truncated":false,"text":"Cant wait to have that California life!Mami hasnt been the sunshine state this week when i most need it to want the beach and starbucks life","created_at":"Mon May 25 01:59:34 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":5,"favourites_count":0,"description":"","screen_name":"fashionfreak923","following":null,"utc_offset":-36000,"created_at":"Wed May 06 00:26:52 +0000 2009","profile_link_color":"FF0000","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme10\/bg.gif","profile_sidebar_fill_color":"7AC3EE","protected":false,"location":"london uk","name":"maxine ","profile_sidebar_border_color":"65B0DA","profile_background_tile":true,"url":null,"time_zone":"Hawaii","followers_count":8,"profile_background_color":"642D8B","friends_count":12,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":38064716,"profile_text_color":"3D1957"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908234902,"source":"web"} -{"text":"need to sell short on your home? i'm working on some now, and we have a in house negotiator. www.i.listingbook.com contact there. #oc","created_at":"Mon May 25 01:59:34 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"352726","description":"ALL LA\/OC PEOPLE ALL THE TIME. i'm a Remax R.E. agent and shop at Hollywoodestore.com great gift store. thanks for following! I follow back oc\/la here","screen_name":"Steveintheoc","following":null,"utc_offset":-32400,"created_at":"Mon Feb 23 18:19:14 +0000 2009","friends_count":818,"profile_text_color":"3E4415","notifications":null,"statuses_count":1724,"favourites_count":1,"protected":false,"profile_link_color":"D02B55","location":"Fullerton, California","name":"Steve, that's me!","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/5010708\/Petals.jpg","profile_sidebar_fill_color":"99CC33","url":"http:\/\/www.steveoftheoc.tumblr.com","profile_sidebar_border_color":"829D5E","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/102161338\/Photo_15_normal.jpg","id":21676255,"time_zone":"Alaska","followers_count":919},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908234901,"source":"mobile web<\/a>"} -{"truncated":false,"text":"home from Austin!","created_at":"Mon May 25 01:59:34 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":31,"favourites_count":0,"description":"","screen_name":"anabanana1025","following":null,"utc_offset":-18000,"created_at":"Thu May 07 21:14:02 +0000 2009","profile_link_color":"990000","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme7\/bg.gif","profile_sidebar_fill_color":"F3F3F3","protected":false,"location":"Kemah, Texass","name":"Ana Paula Pous","profile_sidebar_border_color":"DFDFDF","profile_background_tile":false,"url":null,"time_zone":"Eastern Time (US & Canada)","followers_count":6,"profile_background_color":"EBEBEB","friends_count":27,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/202699723\/03-31-09_1528_1__normal.jpg","id":38518658,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908234903,"source":"web"} -{"text":"PLEASE DEAR GOD, LET THE GIRL SITTING IN FRONT OF ME FLY AWAY AND JUST FALL SICK OR SOMETHING?! Just disappear!!!! :@","created_at":"Mon May 25 01:59:34 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"1A1B1F","description":"good stuff, I dig.","screen_name":"aini","following":null,"utc_offset":28800,"created_at":"Sun Sep 16 15:22:06 +0000 2007","friends_count":39,"profile_text_color":"666666","notifications":null,"statuses_count":278,"favourites_count":0,"protected":false,"profile_link_color":"7cef2f","location":"Singapore.","name":"aini","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/12365659\/H_M_HQ.jpg","profile_sidebar_fill_color":"252429","url":"http:\/\/decodeme-aini.livejournal.com","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/130249131\/PAGE1edited_normal.png","id":8914292,"time_zone":"Singapore","followers_count":44},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235003,"source":"web"} -{"truncated":false,"text":"What a busy weekend.. I need to go to work for a break!","created_at":"Mon May 25 01:59:34 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":9,"favourites_count":0,"description":"","screen_name":"mrtr62","following":null,"utc_offset":-18000,"created_at":"Mon Apr 20 16:29:03 +0000 2009","profile_link_color":"B40B43","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme11\/bg.gif","profile_sidebar_fill_color":"E5507E","protected":false,"location":"","name":"Michelle Falkiner","profile_sidebar_border_color":"CC3366","profile_background_tile":true,"url":null,"time_zone":"Eastern Time (US & Canada)","followers_count":4,"profile_background_color":"FF6699","friends_count":10,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":33570488,"profile_text_color":"362720"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235001,"source":"web"} -{"truncated":false,"text":"O-M-I-Lord.... RelientK is and always will be one of my all time favorite groups. They made my WHOLE month! \n-B","created_at":"Mon May 25 01:59:34 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":112,"favourites_count":0,"description":"pretty neat-o","screen_name":"PopElectricBj","following":null,"utc_offset":-28800,"created_at":"Tue Apr 21 08:52:00 +0000 2009","profile_link_color":"D02B55","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme5\/bg.gif","profile_sidebar_fill_color":"99CC33","protected":false,"location":"West Covina, Cali","name":"Belicia Jarquin","profile_sidebar_border_color":"829D5E","profile_background_tile":false,"url":"http:\/\/www.myspace.com\/popelectricbeejay","time_zone":"Pacific Time (US & Canada)","followers_count":16,"profile_background_color":"352726","friends_count":54,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/185922972\/l_185f291788ca4ecf9cda1c3504ba639a_normal.jpg","id":33854632,"profile_text_color":"3E4415"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235002,"source":"txt<\/a>"} -{"truncated":false,"text":"Books! Books! Always buying books. Charles & I are going to have a beautiful library in our new house on Hiawassee.","created_at":"Mon May 25 01:59:34 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":169,"favourites_count":0,"description":"Cut yourself some slack against a deck so stacked, I mean, come on now, you're just one man.","screen_name":"KendraAlayne","following":null,"utc_offset":-18000,"created_at":"Mon Oct 13 16:09:36 +0000 2008","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","protected":false,"location":"Athens, GA","name":"Kendra Alayne","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"url":"http:\/\/of-sorts.blogspot.com","time_zone":"Eastern Time (US & Canada)","followers_count":20,"profile_background_color":"1A1B1F","friends_count":37,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/68926183\/resized_normal.jpg","id":16722742,"profile_text_color":"666666"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235004,"source":"web"} -{"truncated":false,"text":"Good game so far!!! Now Lebron and co. are gonna do their thing!!","created_at":"Mon May 25 01:59:35 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":68,"favourites_count":0,"description":"Student Ministries Pastor of Fairlawn Baptist Church","screen_name":"Joelowen","following":null,"utc_offset":-18000,"created_at":"Thu Apr 16 00:28:53 +0000 2009","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","protected":false,"location":"Parkersburg, WV","name":"Joel Owen","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"url":null,"time_zone":"Quito","followers_count":6,"profile_background_color":"1A1B1F","friends_count":8,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":31574442,"profile_text_color":"666666"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235101,"source":"TwitterBerry<\/a>"} -{"truncated":false,"text":"@jshockley Oh nice. The last movie I saw was confessions of a shop-a-holic. it was fun!","created_at":"Mon May 25 01:59:35 +0000 2009","in_reply_to_user_id":15407990,"favorited":false,"user":{"notifications":null,"statuses_count":1033,"favourites_count":1,"description":"I'm a licenced ham, I love to sing, read and play the piano. I'm studying to be a highschool choir teacher","screen_name":"marrie1","following":null,"utc_offset":-28800,"created_at":"Tue Apr 14 03:51:02 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"Nevada","name":"Sarah Alawami","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":"http:\/\/music.marrie.org","time_zone":"Pacific Time (US & Canada)","followers_count":89,"profile_background_color":"9ae4e8","friends_count":62,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":31050510,"profile_text_color":"000000"},"in_reply_to_screen_name":"jshockley","in_reply_to_status_id":1908218925,"id":1908235102,"source":"web"} -{"truncated":false,"text":"Chicago Beatmakers: Boss Acoustic Simulator Pedal (Chicago) $225 http:\/\/tinyurl.com\/pknyr4","created_at":"Mon May 25 01:59:35 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":3484,"favourites_count":0,"description":"","screen_name":"chibeatmakers","following":null,"utc_offset":-18000,"created_at":"Tue Mar 24 20:36:46 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"","name":"baseshot","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":"http:\/\/www.liquidub.com","time_zone":"Quito","followers_count":133,"profile_background_color":"9ae4e8","friends_count":34,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/108822914\/kaosscillator_normal.jpg","id":26317546,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235104,"source":"twitterfeed<\/a>"} -{"text":"@mspiker and it really cooled off nicely","created_at":"Mon May 25 01:59:35 +0000 2009","truncated":false,"in_reply_to_user_id":16859085,"user":{"profile_background_color":"496c79","description":"I'm on a porch, come visit! Inkling Media, WXPN in Central PA (Lancaster Harrisburg York), music and Philly sports","screen_name":"kmueller62","following":null,"utc_offset":-18000,"created_at":"Fri Apr 04 00:14:36 +0000 2008","friends_count":926,"profile_text_color":"333333","notifications":null,"statuses_count":20575,"favourites_count":2,"protected":false,"profile_link_color":"FF3300","location":"Lancaster, PA","name":"Ken Mueller","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"A0C5C7","url":"http:\/\/brickthroughwindow.blogspot.com\/","profile_sidebar_border_color":"86A4A6","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/70002680\/10fih-f693f651d8ae194aec7a9957f7dcad53.49649db4_normal.jpg","id":14298131,"time_zone":"Eastern Time (US & Canada)","followers_count":885},"favorited":false,"in_reply_to_screen_name":"mspiker","in_reply_to_status_id":1908231446,"id":1908235100,"source":"twhirl<\/a>"} -{"truncated":false,"text":"Admiring the DreamSpark [http:\/\/www.dreamspark.com] initiative of Microsoft!!!","created_at":"Mon May 25 01:59:35 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":9,"favourites_count":0,"description":"a software engineer by passion!!!","screen_name":"zeeshanqadir","following":null,"utc_offset":0,"created_at":"Tue Feb 24 20:52:15 +0000 2009","profile_link_color":"088253","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme3\/bg.gif","profile_sidebar_fill_color":"E3E2DE","protected":false,"location":"London, United Kingdom","name":"Zeeshan Qadir","profile_sidebar_border_color":"D3D2CF","profile_background_tile":false,"url":"http:\/\/zeeshanqadir.blogspot.com","time_zone":"London","followers_count":6,"profile_background_color":"EDECE9","friends_count":19,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/82390424\/zq_20071025_normal.jpg","id":21796093,"profile_text_color":"634047"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235103,"source":"web"} -{"truncated":false,"text":"@GoldyMom doing great! Just got back from our road trip. So fun:) Did you survive your birthday?","in_reply_to_user_id":21163437,"favorited":false,"created_at":"Mon May 25 01:59:36 +0000 2009","in_reply_to_screen_name":"GoldyMom","in_reply_to_status_id":1908154837,"id":1908235201,"user":{"friends_count":115,"location":"Vermont, USA","utc_offset":-18000,"profile_text_color":"4708b5","notifications":null,"statuses_count":438,"favourites_count":0,"following":null,"profile_link_color":"aa0e08","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/5702513\/Image_7075sm.jpg","description":"Full time Interior Designer [Laid off] Now full time stay at home mom. The adventure begins. I love a challenge.","name":"Christine Burdick","profile_sidebar_fill_color":"9e81e9","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/221575026\/May_fun_014_normal.JPG","created_at":"Sat Feb 21 00:44:30 +0000 2009","profile_sidebar_border_color":"1412ab","screen_name":"chrisric2","profile_background_tile":true,"time_zone":"Eastern Time (US & Canada)","followers_count":113,"id":21451234,"profile_background_color":"EFC64E","url":null},"source":"web"} -{"truncated":false,"text":"Que frio do caralho, pqp","created_at":"Mon May 25 01:59:36 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":38,"favourites_count":0,"description":"Segue eu e ja era!","screen_name":"gabinho_","following":null,"utc_offset":-14400,"created_at":"Fri May 22 02:54:50 +0000 2009","profile_link_color":"D02B55","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/14267795\/BXK306954_vortxex800.jpg","profile_sidebar_fill_color":"3be8e2","protected":false,"location":"Campola, SP","name":"Gabriel Habib","profile_sidebar_border_color":"000000","profile_background_tile":false,"url":null,"time_zone":"Santiago","followers_count":24,"profile_background_color":"ffffff","friends_count":56,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/226551318\/twitter_normal.JPG","id":41737334,"profile_text_color":"131111"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235204,"source":"web"} -{"truncated":false,"text":"@Gitano_Azul ....Merida Yucat\u00e1n, M\u00e9xico =p","created_at":"Mon May 25 01:59:36 +0000 2009","in_reply_to_user_id":31235417,"favorited":false,"user":{"notifications":null,"statuses_count":2648,"favourites_count":56,"description":"","screen_name":"KaRo_","following":null,"utc_offset":-21600,"created_at":"Fri Feb 27 18:26:33 +0000 2009","profile_link_color":"dc0933","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/12233883\/prrrr.jpg","profile_sidebar_fill_color":"0d0c0d","protected":false,"location":"M\u00e9rida","name":"Karolina Pati\u00f1o","profile_sidebar_border_color":"75014d","profile_background_tile":true,"url":"http:\/\/bubbletweet.com\/channel\/karo_","time_zone":"Mexico City","followers_count":245,"profile_background_color":"f12773","friends_count":202,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/189438122\/KAROOOOO_normal.jpg","id":22170620,"profile_text_color":"53094c"},"in_reply_to_screen_name":"Gitano_Azul","in_reply_to_status_id":1908186928,"id":1908235200,"source":"twhirl<\/a>"} -{"truncated":false,"text":"Your Mom is via NBA on http:\/\/www.tnt.tv\/sports\/nba\/playoffs09","created_at":"Mon May 25 01:59:36 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":44,"favourites_count":0,"description":null,"screen_name":"Skitzophrenic","following":null,"utc_offset":null,"created_at":"Thu Apr 16 06:01:38 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":null,"name":"Sako Dzherdzhyan","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":null,"followers_count":4,"profile_background_color":"9ae4e8","friends_count":4,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/140399456\/frusciante1_normal.jpg","id":31666510,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235203,"source":"NBA Eastern Conference Finals<\/a>"} -{"truncated":false,"text":"why? because i want to make money on blogging. I will need help doing affilliate marketing, seo, and etc. What I need is: ideas on blogging.","created_at":"Mon May 25 01:59:36 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":56,"favourites_count":0,"description":"WAH Marketer","screen_name":"ltgl","following":null,"utc_offset":-28800,"created_at":"Sun Jul 06 21:00:56 +0000 2008","profile_link_color":"9D582E","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme8\/bg.gif","profile_sidebar_fill_color":"EADEAA","protected":false,"location":"CA","name":"Shannon Edwards","profile_sidebar_border_color":"D9B17E","profile_background_tile":false,"url":"http:\/\/livingthegoodlife.alivebuilder.com\/","time_zone":"Pacific Time (US & Canada)","followers_count":160,"profile_background_color":"8B542B","friends_count":164,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/56284041\/DSC00520_normal.JPG","id":15335630,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235300,"source":"web"} -{"truncated":false,"text":"Web fonts now http:\/\/tinyurl.com\/ooexdp (via @TheWebBlend)","created_at":"Mon May 25 01:59:37 +0000 2009","in_reply_to_user_id":38427778,"favorited":false,"user":{"notifications":null,"statuses_count":5153,"favourites_count":108,"description":"Web developer\/designer and standards advocate","screen_name":"devongovett","following":null,"utc_offset":-18000,"created_at":"Fri Aug 01 11:21:38 +0000 2008","profile_link_color":"FF3300","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme6\/bg.gif","profile_sidebar_fill_color":"A0C5C7","protected":false,"location":"","name":"devongovett","profile_sidebar_border_color":"86A4A6","profile_background_tile":false,"url":"http:\/\/devongovett.wordpress.com","time_zone":"Quito","followers_count":696,"profile_background_color":"709397","friends_count":395,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/92153139\/item_6_normal.jpg","id":15687937,"profile_text_color":"333333"},"in_reply_to_screen_name":"TheWebBlend","in_reply_to_status_id":1907744432,"id":1908235302,"source":"Twitterrific<\/a>"} -{"truncated":false,"text":"Sitting in a car, figuring out what to do =\\","created_at":"Mon May 25 01:59:37 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":7,"favourites_count":0,"description":"","screen_name":"charlesespanol","following":null,"utc_offset":-21600,"created_at":"Tue Mar 25 20:18:12 +0000 2008","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"Texas","name":"charlesespanol","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":"Central Time (US & Canada)","followers_count":0,"profile_background_color":"9ae4e8","friends_count":0,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":14218837,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235301,"source":"Twitterrific<\/a>"} -{"text":"received a death threat this mornin... HAH! ok i guess the goons gotta come with me tonight!!","created_at":"Mon May 25 01:59:37 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"ffffff","description":"We are the Greater Good","screen_name":"marionwrite","following":null,"utc_offset":-28800,"created_at":"Sat Feb 07 08:56:55 +0000 2009","friends_count":52,"profile_text_color":"000000","notifications":null,"statuses_count":1042,"favourites_count":0,"protected":false,"profile_link_color":"c1c57d","location":"Las Vegas","name":"Marion Write","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/7674133\/EPILOGUE.png","profile_sidebar_fill_color":"4b431b","url":"http:\/\/www.marionwrite.com","profile_sidebar_border_color":"ffffff","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/203516934\/twitpic_normal.jpg","id":20300176,"time_zone":"Pacific Time (US & Canada)","followers_count":77},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235303,"source":"web"} -{"truncated":false,"text":"Humane Society's Children's Book Awards to A HOME FOR DAKOTA (Jan Zita Grover) and DOLPHIN SONG (Lauren St. John): http:\/\/bit.ly\/qkpV7","in_reply_to_user_id":null,"favorited":false,"created_at":"Mon May 25 01:59:37 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235404,"user":{"friends_count":817,"location":"Boston","utc_offset":-18000,"profile_text_color":"0e0c0c","notifications":null,"statuses_count":2059,"favourites_count":1,"following":null,"profile_link_color":"1608d4","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/14334921\/Twitter_Sidebar_Mitali_Perkins.jpg","description":"I write novels for young readers and tweet news about the children's and YA book world.","name":"Mitali Perkins","profile_sidebar_fill_color":"a7f05c","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/141418665\/Mitali2008_normal.jpg","created_at":"Tue Jan 29 20:03:13 +0000 2008","profile_sidebar_border_color":"0c0674","screen_name":"mitaliperkins","profile_background_tile":false,"time_zone":"Eastern Time (US & Canada)","followers_count":1129,"id":12844002,"profile_background_color":"c0d7fc","url":"http:\/\/www.mitaliblog.com"},"source":"bit.ly<\/a>"} -{"truncated":false,"text":"@JewelStaite @NathanFillion Passing on the yummy \"V\" goodness... Morena is going to be a great villian http:\/\/scifiwatch.comoj.com\/?p=2449","in_reply_to_user_id":34175976,"favorited":false,"created_at":"Mon May 25 01:59:37 +0000 2009","in_reply_to_screen_name":"JewelStaite","in_reply_to_status_id":1907801414,"id":1908235402,"user":{"friends_count":79,"location":"Wish I was in Atlantis.","utc_offset":-28800,"profile_text_color":"000000","notifications":null,"statuses_count":531,"favourites_count":1,"following":null,"profile_link_color":"0000ff","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/2772134\/infiniteballs2.jpg","description":"Yes it is I.. Reporter Chick! Have you seen my cape? Yes I'm a Geek, I love gadgets and electronics! They are all mine! SciFi is a way of life!","name":"Smileleigh :)","profile_sidebar_fill_color":"9977dd","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/56774328\/dandilion_normal.jpg","created_at":"Wed Jul 16 19:00:27 +0000 2008","profile_sidebar_border_color":"87bc44","screen_name":"Smileleigh","profile_background_tile":true,"time_zone":"Pacific Time (US & Canada)","followers_count":66,"id":15458168,"profile_background_color":"9ae4e8","url":null},"source":"web"} -{"text":"Link: \u30d1\u30d6\u30b3\u30e1\u3082\u52b9\u679c\u306a\u304f\u8b70\u8ad6\u7d42\u4e86\u3001\u533b\u85ac\u54c1\u30cd\u30c3\u30c8\u8ca9\u58f2\u898f\u5236\u3078 - \u697d\u5929\u306f\u8a34\u8a1f\u691c\u8a0e\u3082 | \u30cd\u30c3\u30c8 | \u30de\u30a4\u30b3\u30df\u30b8\u30e3\u30fc\u30ca\u30eb - \u539a\u52b4\u7701\u306f\u6d88\u8cbb\u8005\u306e\u5229\u4fbf\u3092\u512a\u5148\u3059\u3079\u304d\u3002\u89e3\u7981\u3067\u306f\u306a\u304f\u898f\u5236\u306a\u306e\u3060\u304b\u3089\u3002 http:\/\/tumblr.com\/xrb1v06hg","created_at":"Mon May 25 01:59:37 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"94e4e8","description":"\u6027\u7656\u3092\u96a0\u3059\u3053\u3068\u306f\u4eba\u3068\u3057\u3066\u5927\u5207\u306a\u3053\u3068\u3002\u30fb\u30fb\u30fb\u305d\u3046\u601d\u3063\u3066\u305f\u6642\u671f\u304c\u3042\u308a\u307e\u3057\u305f\u3002","screen_name":"tksn","following":null,"utc_offset":32400,"created_at":"Sun Mar 23 16:32:35 +0000 2008","friends_count":1660,"profile_text_color":"333333","notifications":null,"statuses_count":3552,"favourites_count":512,"protected":false,"profile_link_color":"0084B4","location":"\u304a\u3082\u306b\u3064\u3044\u3063\u305f\u30fc\u3002","name":"\u3089\u3080","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/8486100\/twitter_tksn2.jpg","profile_sidebar_fill_color":"DDFFCC","url":"http:\/\/www.f0ck.com\/","profile_sidebar_border_color":"BDDCAD","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/137139427\/twitter_tksn_icon_normal.gif","id":14202641,"time_zone":"Tokyo","followers_count":1447},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235400,"source":"Tumblr<\/a>"} -{"text":"Someone was looking for info on @johncmayer's \"brother\" on my JM blog.(Thanks for the visit!!) He has 2 @carlmayer & @ben_mayer both tweet!!","created_at":"Mon May 25 01:59:37 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"FF6699","description":"I love to tweet about John Mayer, Jensen Ackles, Jared Padalecki, Music, Celebrities, Hot Men and Celebrities...Am Often Found Chasing Butterflies!","screen_name":"sweetlilmzmia","following":null,"utc_offset":-21600,"created_at":"Fri Mar 13 14:56:10 +0000 2009","friends_count":1041,"profile_text_color":"362720","notifications":null,"statuses_count":5466,"favourites_count":40,"protected":false,"profile_link_color":"B40B43","location":"Somewhere over the rainbow ~","name":"Mia","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/12704571\/e3ebbb.jpg","profile_sidebar_fill_color":"E5507E","url":"http:\/\/www.xanga.com\/sweetlilmzmia","profile_sidebar_border_color":"CC3366","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/185268020\/Picture_021_normal.jpg","id":24183626,"time_zone":"Central Time (US & Canada)","followers_count":1322},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235403,"source":"web"} -{"truncated":false,"text":"Jeroen Van Aken-Atomic Wobble (Original - Kid Blue Remix)-(WEB)-(AUX005)-2009-KOUALA (Music\/MP3): ARTIST: Jeroen Van Aken ALBUM: Atomic W..","in_reply_to_user_id":null,"favorited":false,"created_at":"Mon May 25 01:59:37 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235401,"user":{"friends_count":0,"location":null,"utc_offset":null,"profile_text_color":"000000","notifications":null,"statuses_count":7358,"favourites_count":0,"following":null,"profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","description":null,"name":"asserouge","profile_sidebar_fill_color":"e0ff92","protected":false,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","created_at":"Sat Feb 21 09:21:45 +0000 2009","profile_sidebar_border_color":"87bc44","screen_name":"asserouge","profile_background_tile":false,"time_zone":null,"followers_count":277,"id":21473594,"profile_background_color":"9ae4e8","url":null},"source":"twitterfeed<\/a>"} -{"text":"texas : Drunked Britney Spears vomit behind Car Video: http:\/\/bit.ly\/QFMpx","created_at":"Mon May 25 01:59:38 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":null,"screen_name":"meerysee1984x","following":null,"utc_offset":null,"created_at":"Sat May 23 16:06:42 +0000 2009","friends_count":0,"profile_text_color":"000000","notifications":null,"statuses_count":235,"favourites_count":0,"protected":false,"profile_link_color":"0000ff","location":null,"name":"meryse","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":null,"profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":42049900,"time_zone":null,"followers_count":33},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235503,"source":"web"} -{"truncated":false,"text":"no trampo e com muito sono...","created_at":"Mon May 25 01:59:38 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":200,"favourites_count":0,"description":"Aprecia com modera\u00e7\u00e3o","screen_name":"Pexe_Oticos","following":null,"utc_offset":-10800,"created_at":"Wed Dec 31 17:10:07 +0000 2008","profile_link_color":"1e31f6","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/11444611\/nn_bg.gif","profile_sidebar_fill_color":"b0ff1a","protected":false,"location":"Rio de Janeiro","name":"Rodrigo Gammaro","profile_sidebar_border_color":"0800fa","profile_background_tile":false,"url":null,"time_zone":"Brasilia","followers_count":49,"profile_background_color":"1A1B1F","friends_count":59,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/222840384\/avvvvvvvvvvvvv_normal.jpg","id":18510598,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235501,"source":"web"} -{"truncated":false,"text":"@lwcavallucci Yeah I've been lurking... and like blah.","created_at":"Mon May 25 01:59:38 +0000 2009","in_reply_to_user_id":14171622,"favorited":false,"user":{"notifications":null,"statuses_count":4479,"favourites_count":159,"description":"Graphic Designer, Photographer. Member of PPA Professional Photographers Association & NAPP National Association of Photoshop Professionals","screen_name":"alisonwaring","following":null,"utc_offset":-18000,"created_at":"Fri Jun 20 21:07:45 +0000 2008","profile_link_color":"99cccc","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/3180762\/twitterbkgd.jpg","profile_sidebar_fill_color":"cc3366","protected":false,"location":"Ravenna Park, Florida","name":"Alison Waring","profile_sidebar_border_color":"99cccc","profile_background_tile":false,"url":"http:\/\/www.alisonwaring.com","time_zone":"Eastern Time (US & Canada)","followers_count":375,"profile_background_color":"9ae4e8","friends_count":190,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/141802023\/aidencheese_normal.jpg","id":15184394,"profile_text_color":"000000"},"in_reply_to_screen_name":"lwcavallucci","in_reply_to_status_id":1908216550,"id":1908235504,"source":"web"} -{"truncated":false,"text":"Sporks!!!","created_at":"Mon May 25 01:59:39 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":281,"favourites_count":0,"description":"","screen_name":"annamarek","following":null,"utc_offset":-18000,"created_at":"Fri Apr 03 03:57:29 +0000 2009","profile_link_color":"D02B55","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme5\/bg.gif","profile_sidebar_fill_color":"99CC33","protected":false,"location":"Grand Rapids, MI","name":"Anna Marek","profile_sidebar_border_color":"829D5E","profile_background_tile":false,"url":null,"time_zone":"Eastern Time (US & Canada)","followers_count":9,"profile_background_color":"352726","friends_count":12,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/137998481\/1_normal.jpg","id":28497457,"profile_text_color":"3E4415"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235602,"source":"txt<\/a>"} -{"truncated":false,"text":"@mattceni my work blog 1) keep costumers abreast 2) a lifelong learning tool 3) introduce company to potentially new \"customers\" #blogchat","created_at":"Mon May 25 01:59:39 +0000 2009","in_reply_to_user_id":6065122,"favorited":false,"user":{"notifications":null,"statuses_count":22463,"favourites_count":98,"description":"sistah, social networker & seeker of truth, authenticity & simplicity","screen_name":"ShannonRenee","following":null,"utc_offset":-18000,"created_at":"Sat Feb 09 13:01:01 +0000 2008","profile_link_color":"67bd0f","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/3301698\/wave-foam.jpg","profile_sidebar_fill_color":"ffffff","protected":false,"location":"Washington, DC","name":"ShannonRenee","profile_sidebar_border_color":"10100e","profile_background_tile":true,"url":"http:\/\/shannonsezso.com\/","time_zone":"Eastern Time (US & Canada)","followers_count":1725,"profile_background_color":"3695ce","friends_count":1626,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/211731149\/curly_avatar_normal.jpg","id":13280692,"profile_text_color":"4e2b88"},"in_reply_to_screen_name":"mattceni","in_reply_to_status_id":null,"id":1908235601,"source":"TweetDeck<\/a>"} -{"text":"Just notified my subscribers that the FREE summer issue of TPW Magazine is now available at: http:\/\/www.theperspiringwriter.com","created_at":"Mon May 25 01:59:39 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"8B542B","description":"The official Twiitter site for publisher, author, writer, golfer E. P. Ned Burke","screen_name":"nedburke","following":null,"utc_offset":-18000,"created_at":"Mon Jul 07 02:24:49 +0000 2008","friends_count":501,"profile_text_color":"333333","notifications":null,"statuses_count":68,"favourites_count":3,"protected":false,"profile_link_color":"9D582E","location":"Florida USA","name":"E. P. Ned Burke","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/5056973\/penandpad.jpg","profile_sidebar_fill_color":"EADEAA","url":"http:\/\/www.epburkepublishing.com","profile_sidebar_border_color":"D9B17E","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/197702839\/Editor_Ned_Burke_in_1973_normal.jpg","id":15337904,"time_zone":"Eastern Time (US & Canada)","followers_count":276},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235600,"source":"web"} -{"truncated":false,"text":"@Sassygirl4444 haha well keep it up! i'm off to bed now but i'll be watching the stars for a little while longer too ;-). Good night ;-)","created_at":"Mon May 25 01:59:39 +0000 2009","in_reply_to_user_id":21117348,"favorited":false,"user":{"notifications":null,"statuses_count":550,"favourites_count":0,"description":"live in UK, love movies, music and sunshine, but don't get enough of it here lol!","screen_name":"dvern","following":null,"utc_offset":0,"created_at":"Tue Mar 31 15:48:05 +0000 2009","profile_link_color":"0084B4","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/10148114\/Dock.jpg","profile_sidebar_fill_color":"DDFFCC","protected":false,"location":"Oxford\/London","name":"Dan Vernan","profile_sidebar_border_color":"BDDCAD","profile_background_tile":true,"url":null,"time_zone":"London","followers_count":63,"profile_background_color":"9AE4E8","friends_count":48,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/212240021\/Photo2586_normal.jpg","id":27896606,"profile_text_color":"333333"},"in_reply_to_screen_name":"Sassygirl4444","in_reply_to_status_id":1908194587,"id":1908235603,"source":"web"} -{"truncated":false,"text":"Homemade Dog Food Recipes - Learn To Make Your Pet's Food ... http:\/\/bit.ly\/9n7xW","created_at":"Mon May 25 01:59:39 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":623,"favourites_count":2,"description":"Passionate traveller, adventureous, addicted twitterer, Joker.","screen_name":"deannie83","following":null,"utc_offset":36000,"created_at":"Sat May 16 07:49:22 +0000 2009","profile_link_color":"FF0000","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme10\/bg.gif","profile_sidebar_fill_color":"7AC3EE","protected":false,"location":"Australia","name":"Deanne Daniew","profile_sidebar_border_color":"65B0DA","profile_background_tile":true,"url":"http:\/\/tinyurl.com\/owwlpa","time_zone":"Sydney","followers_count":1555,"profile_background_color":"642D8B","friends_count":1917,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/214327707\/l_54c512d9761aea0ee0b67ab77d710540_normal.jpg","id":40429986,"profile_text_color":"3D1957"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235604,"source":"twitterfeed<\/a>"} -{"text":"por que amanh\u00e3 tem que ser segunda-feira? :T t\u00e1\u00e1, eu paro de reclamar ahodiaushoiduha","created_at":"Mon May 25 01:59:39 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"000000","description":"","screen_name":"nicolepaloschi","following":null,"utc_offset":-10800,"created_at":"Sun May 24 03:45:08 +0000 2009","friends_count":18,"profile_text_color":"3f554a","notifications":null,"statuses_count":18,"favourites_count":0,"protected":false,"profile_link_color":"018ec1","location":"","name":"nessie","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/14396312\/Gerard_Way_619.jpg","profile_sidebar_fill_color":"a0a39f","url":null,"profile_sidebar_border_color":"BDDCAD","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/227783174\/16_normal.JPG","id":42157861,"time_zone":"Brasilia","followers_count":6},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235701,"source":"web"} -{"truncated":false,"text":"@mktrob fue antes en la sec en unos 15","created_at":"Mon May 25 01:59:39 +0000 2009","in_reply_to_user_id":16334029,"favorited":false,"user":{"notifications":null,"statuses_count":2081,"favourites_count":6,"description":"CINEASTA QUERETANO, Productor, Guionista, Comunic\u00f3logo, Fotografo, Dise\u00f1ador Gr\u00e1fico, Editor","screen_name":"periclesfilm","following":null,"utc_offset":-21600,"created_at":"Wed Aug 13 07:13:14 +0000 2008","profile_link_color":"3c4ec8","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/14269740\/fondoholga.jpg","profile_sidebar_fill_color":"ffffff","protected":false,"location":"Queretaro Y Mexico D. F.","name":"Pericles dorantes","profile_sidebar_border_color":"ffffff","profile_background_tile":false,"url":"http:\/\/periclesfilm.blogspot.com\/","time_zone":"Mexico City","followers_count":241,"profile_background_color":"000000","friends_count":230,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/226477878\/_holga__by_KittyBoom_normal.jpg","id":15834041,"profile_text_color":"000000"},"in_reply_to_screen_name":"mktrob","in_reply_to_status_id":null,"id":1908235702,"source":"dabr<\/a>"} -{"text":"Does nayone have jobs for me.. or would anyone like to jsut give me money, that'd work.","created_at":"Mon May 25 01:59:39 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"FF0000","description":"I am made of awesome.","screen_name":"itscalum010","following":null,"utc_offset":0,"created_at":"Mon Jul 21 23:31:28 +0000 2008","friends_count":146,"profile_text_color":"00FF59","notifications":null,"statuses_count":3401,"favourites_count":6,"protected":false,"profile_link_color":"FF8723","location":"South Yorkshire, England.","name":"Calum Hopwood","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/2883134\/22400.gif","profile_sidebar_fill_color":"FFFFFF","url":"http:\/\/www.youtube.com\/itscalum010","profile_sidebar_border_color":"00FFEE","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/113448481\/Photo_82_normal.jpg","id":15522503,"time_zone":"London","followers_count":462},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235700,"source":"TweetDeck<\/a>"} -{"text":"officejet problems printer will not print a wordperfect document. http:\/\/ow.ly\/9067","created_at":"Mon May 25 01:59:39 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"ffffff","description":"HP Officejet 6110 Problems and Solutions in Fixya.com","screen_name":"officejet_6110","following":null,"utc_offset":-10800,"created_at":"Sun Mar 01 11:51:22 +0000 2009","friends_count":5,"profile_text_color":"333333","notifications":null,"statuses_count":874,"favourites_count":0,"protected":false,"profile_link_color":"0084B4","location":"","name":"Officejet Problems","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/5317358\/Background_Image.jpg","profile_sidebar_fill_color":"DDFFCC","url":"http:\/\/Fixya.com","profile_sidebar_border_color":"BDDCAD","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/85055322\/Deskjet-6110_normal.jpg","id":22356163,"time_zone":"Greenland","followers_count":43},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235704,"source":"HootSuite<\/a>"} -{"truncated":false,"text":"Best of Todays Gamer Kicks: Kojima\u2019s Game Revealed? - http:\/\/bit.ly\/8ZUGg","created_at":"Mon May 25 01:59:39 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":2675,"favourites_count":1,"description":"Gamekicker.com - Gaming News Rating Website for all Playstation , Xbox 360, Nintendo DS, PSP, PC, Mobile Phone & Online","screen_name":"gamekicker","following":null,"utc_offset":-18000,"created_at":"Fri Dec 12 06:32:07 +0000 2008","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/9144087\/twit_bk4.jpg","profile_sidebar_fill_color":"252429","protected":false,"location":"New York","name":"News For Gamers","profile_sidebar_border_color":"181A1E","profile_background_tile":true,"url":"http:\/\/www.gamekicker.com","time_zone":"Eastern Time (US & Canada)","followers_count":5647,"profile_background_color":"1A1B1F","friends_count":6202,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/75494398\/gk_anim2_normal.gif","id":18071696,"profile_text_color":"666666"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235703,"source":"web"} -{"text":"officejet problems print cartridge is bumping, not printing or copying on hp 6110 all-in-one http:\/\/ow.ly\/9068","created_at":"Mon May 25 01:59:40 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"ffffff","description":"HP Officejet 6110 Problems and Solutions in Fixya.com","screen_name":"officejet_6110","following":null,"utc_offset":-10800,"created_at":"Sun Mar 01 11:51:22 +0000 2009","friends_count":5,"profile_text_color":"333333","notifications":null,"statuses_count":875,"favourites_count":0,"protected":false,"profile_link_color":"0084B4","location":"","name":"Officejet Problems","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/5317358\/Background_Image.jpg","profile_sidebar_fill_color":"DDFFCC","url":"http:\/\/Fixya.com","profile_sidebar_border_color":"BDDCAD","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/85055322\/Deskjet-6110_normal.jpg","id":22356163,"time_zone":"Greenland","followers_count":43},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235800,"source":"HootSuite<\/a>"} -{"text":"bye byee","created_at":"Mon May 25 01:59:40 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"352726","description":"Once a Glambert, Always a Glambert :) --sick of the tears, and all the sorrow. forget yesterday, focus on tomorrow","screen_name":"scenexxqueen","following":null,"utc_offset":-21600,"created_at":"Thu Jan 15 22:07:12 +0000 2009","friends_count":323,"profile_text_color":"3E4415","notifications":null,"statuses_count":1464,"favourites_count":40,"protected":false,"profile_link_color":"D02B55","location":"Lambert Land","name":"Feme Davi","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/6951040\/adamtop11shoot2-1.jpg","profile_sidebar_fill_color":"99CC33","url":null,"profile_sidebar_border_color":"829D5E","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/205152912\/snapp_normal.jpg","id":19041560,"time_zone":"Central Time (US & Canada)","followers_count":143},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235804,"source":"web"} -{"text":"chas.barkley agrees w\/me that officiating has been awful during entire playoffs.","created_at":"Mon May 25 01:59:40 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":"Pro photographer, artist and multidimensional nondenominational hedonist seeking friends and professional contacts in PDX. www.markcolman.com","screen_name":"Kram","following":null,"utc_offset":-28800,"created_at":"Fri May 04 13:38:18 +0000 2007","friends_count":500,"profile_text_color":"000000","notifications":null,"statuses_count":3226,"favourites_count":3,"protected":false,"profile_link_color":"0F6B82","location":"Portland, OR","name":"Mark Colman","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/3154727\/twitter_template_mc3.jpg","profile_sidebar_fill_color":"8E8994","url":"http:\/\/www.markcolemanphoto.com\/","profile_sidebar_border_color":"ADA4A6","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/125056921\/mc_avatar_normal.jpg","id":5766122,"time_zone":"Pacific Time (US & Canada)","followers_count":686},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235802,"source":"web"} -{"truncated":false,"text":"Lebron gets alot of calls go his way","created_at":"Mon May 25 01:59:40 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":200,"favourites_count":0,"description":"waxing philosophic since '77","screen_name":"philOsophic","following":null,"utc_offset":-18000,"created_at":"Thu Sep 25 01:34:17 +0000 2008","profile_link_color":"9D582E","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme8\/bg.gif","profile_sidebar_fill_color":"EADEAA","protected":false,"location":"toronto","name":"philOsophic","profile_sidebar_border_color":"D9B17E","profile_background_tile":false,"url":null,"time_zone":"Quito","followers_count":14,"profile_background_color":"8B542B","friends_count":11,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/60676322\/neruda_normal.jpg","id":16444625,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235803,"source":"TwitterFon<\/a>"} -{"text":"This is how awesome the future is 'dude remember the internet?' haha","created_at":"Mon May 25 01:59:40 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"1A1B1F","description":"Artist,performer and everything else inbetween.","screen_name":"Jakkblood","following":null,"utc_offset":-18000,"created_at":"Sun Sep 07 03:11:02 +0000 2008","friends_count":33,"profile_text_color":"666666","notifications":null,"statuses_count":266,"favourites_count":2,"protected":false,"profile_link_color":"2FC2EF","location":"Maine","name":"Jakk blood","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/4132836\/background.jpg","profile_sidebar_fill_color":"252429","url":"http:\/\/Jakkblood.com","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/73977965\/awesome_008_normal.jpg","id":16165298,"time_zone":"Quito","followers_count":43},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235801,"source":"txt<\/a>"} -{"truncated":false,"text":"... Passa um rato e ela se mija. N\u00e3o se mija com Jason, mas se mija com um rato? Depois achando que ele n\u00e3o estava no quarto, ela sai...","created_at":"Mon May 25 01:59:41 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":836,"favourites_count":0,"description":"","screen_name":"RenatoDeLarge","following":null,"utc_offset":-14400,"created_at":"Mon Mar 23 19:17:33 +0000 2009","profile_link_color":"0a91c2","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/10837607\/fight-club-in-tyler-we-trust.jpg","profile_sidebar_fill_color":"dedfdd","protected":false,"location":"","name":"Renato Supertramp","profile_sidebar_border_color":"49c908","profile_background_tile":false,"url":null,"time_zone":"Santiago","followers_count":86,"profile_background_color":"070808","friends_count":91,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/107567202\/DeLarge_normal.jpg","id":26067988,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235901,"source":"web"} -{"text":"\u305d\u308d\u305d\u308d\u3001\u958b\u6f14\u3067\u3059\u304a!! \u30ea\u30ea\u30fc\u30b9\u3092\u30c1\u30a7\u30c3\u30af!! #au","created_at":"Mon May 25 01:59:41 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"0099B9","description":"I'm \u305b\u3046(seu). Loving digital gadgets(especially ThinkPad, and Japanese KEITAI), Tsundere, and so on. Writing on ITmedia +D, and Mycom Journal.","screen_name":"shoinoue","following":null,"utc_offset":32400,"created_at":"Mon Aug 04 11:46:53 +0000 2008","friends_count":152,"profile_text_color":"3C3940","notifications":null,"statuses_count":3270,"favourites_count":5,"protected":false,"profile_link_color":"0099B9","location":"Tokyo, JAPAN","name":"Sho INOUE","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme4\/bg.gif","profile_sidebar_fill_color":"95E8EC","url":"http:\/\/ch00288.kitaguni.tv\/","profile_sidebar_border_color":"5ED4DC","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/201366496\/YnO_normal.jpg","id":15721090,"time_zone":"Tokyo","followers_count":156},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235902,"source":"web"} -{"text":"The Nature of the Current Financial Crisis: http:\/\/bit.ly\/y8vMm #80stweets @Bojowa963","created_at":"Mon May 25 01:59:41 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9AE4E8","description":"Check us out live http:\/\/www.juarezcartel.com","screen_name":"t3connection","following":null,"utc_offset":-32400,"created_at":"Sat Mar 28 19:16:17 +0000 2009","friends_count":1969,"profile_text_color":"333333","notifications":null,"statuses_count":621,"favourites_count":0,"protected":false,"profile_link_color":"0084B4","location":"Juarez, Mexico","name":"Tomas Nutty","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/9237629\/D1609FN1.jpg","profile_sidebar_fill_color":"DDFFCC","url":"http:\/\/www.juarezcartel.com","profile_sidebar_border_color":"BDDCAD","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/147896851\/Mkennan_normal.jpg","id":27288923,"time_zone":"Alaska","followers_count":336},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235904,"source":"web"} -{"text":"sunday secrets\n<3","created_at":"Mon May 25 01:59:41 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9AE4E8","description":"hiya","screen_name":"italktogalaxies","following":null,"utc_offset":-18000,"created_at":"Thu Mar 05 03:02:32 +0000 2009","friends_count":58,"profile_text_color":"333333","notifications":null,"statuses_count":116,"favourites_count":0,"protected":false,"profile_link_color":"0084B4","location":"los anjelous","name":"Elizabeth Miza","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/5172207\/abblue.jpg","profile_sidebar_fill_color":"DDFFCC","url":null,"profile_sidebar_border_color":"BDDCAD","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/88035158\/summatime021_normal.jpg","id":22870253,"time_zone":"Eastern Time (US & Canada)","followers_count":35},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908235903,"source":"web"} -{"truncated":false,"text":"wonders what it is about fireworks that makes anyone patriotic? July 4, Memorial Day. Any ole day . . . .","created_at":"Mon May 25 01:59:42 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":1276,"favourites_count":1,"description":"Mom to 3, Husband to 1, Friend to Many","screen_name":"hnjmerck","following":null,"utc_offset":-21600,"created_at":"Tue May 06 16:37:23 +0000 2008","profile_link_color":"B40B43","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme11\/bg.gif","profile_sidebar_fill_color":"E5507E","protected":false,"location":"Chicagoland","name":"jennifer","profile_sidebar_border_color":"CC3366","profile_background_tile":true,"url":null,"time_zone":"Central Time (US & Canada)","followers_count":22,"profile_background_color":"FF6699","friends_count":25,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/54030608\/Purple_Flower_Edited_normal.jpg","id":14675489,"profile_text_color":"362720"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908236003,"source":"Tweetie<\/a>"} -{"truncated":false,"text":"@perezhilton-in a few words jesus is a 22 brasilian model, unknown until he worked with madonna on some video","created_at":"Mon May 25 01:59:42 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":120,"favourites_count":0,"description":"","screen_name":"mirense","following":null,"utc_offset":-18000,"created_at":"Sun Apr 19 03:16:05 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"new york","name":"elisete santos","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":"Quito","followers_count":323,"profile_background_color":"9ae4e8","friends_count":999,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":33112123,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908236001,"source":"web"} -{"truncated":false,"text":"@LAMBORGHINIBOW..WHATTTT,,THATS GON BE A LUCKY BITCH TONIGHT..HA!","in_reply_to_user_id":28331519,"favorited":false,"created_at":"Mon May 25 01:59:42 +0000 2009","in_reply_to_screen_name":"lamborghinibow","in_reply_to_status_id":null,"id":1908236004,"user":{"friends_count":79,"location":"LOUiE V, [kY]","utc_offset":-18000,"profile_text_color":"666666","notifications":null,"statuses_count":235,"favourites_count":4,"following":null,"profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/13322719\/Image2.jpg","description":"iM ME! NISEE! [LOL] i LOVE MEETING NEW PPL..SO COME HOLLA AT ME","name":"NiSEE","profile_sidebar_fill_color":"252429","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/223750675\/niblk_normal.jpg","created_at":"Mon Mar 16 04:28:17 +0000 2009","profile_sidebar_border_color":"181A1E","screen_name":"yELLOW0NE","profile_background_tile":false,"time_zone":"Eastern Time (US & Canada)","followers_count":28,"id":24649817,"profile_background_color":"1A1B1F","url":"http:\/\/MYSPACE.COM\/502NISEE"},"source":"mobile web<\/a>"} -{"truncated":false,"text":"Esperando come\u00e7ar Dr. Hollywood e votando no Que Pasa pra conhecer o Dr. Rey pessoalmente! http:\/\/tinyurl.com\/p7eckm =)","in_reply_to_user_id":null,"favorited":false,"created_at":"Mon May 25 01:59:42 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908236002,"user":{"friends_count":53,"location":"Brasil","utc_offset":-10800,"profile_text_color":"f3589a","notifications":null,"statuses_count":95,"favourites_count":0,"following":null,"profile_link_color":"ef2a8a","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/11424014\/porco.jpg","description":"\u00c9 melhor morrer do que perder sua propria vida!","name":"Rafaela","profile_sidebar_fill_color":"fbdae4","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/198108137\/rafa_normal.jpg","created_at":"Mon Apr 27 22:06:16 +0000 2009","profile_sidebar_border_color":"CC3366","screen_name":"rafaelamesquita","profile_background_tile":true,"time_zone":"Brasilia","followers_count":53,"id":35878175,"profile_background_color":"FF6699","url":"http:\/\/rafamesquita.zip.net\/"},"source":"TwitterFox<\/a>"} -{"truncated":false,"text":"@ThePhenomena The 'Girlstranaut' is very cool she got to operate the robotic arm!~ Imagine Kali with Robotic arms *Yikes* ;)","created_at":"Mon May 25 01:59:42 +0000 2009","in_reply_to_user_id":21321813,"favorited":false,"user":{"notifications":null,"statuses_count":1872,"favourites_count":17,"description":"Mother of Twins~'Liker' of UFOS, Crop Circles, Organic Food, Agnihotra, Current Events,HUMOUR, New Media AWESOME New MUSIC and MINDBLOWING aRT!..feed me.... :D","screen_name":"faithsonshyne","following":null,"utc_offset":-36000,"created_at":"Thu Oct 23 22:54:37 +0000 2008","profile_link_color":"df0c0f","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/12518531\/Sound_Wave.jpg","profile_sidebar_fill_color":"db0fd7","protected":false,"location":"Sydney","name":"Faith Hibberd","profile_sidebar_border_color":"e9d61c","profile_background_tile":true,"url":"http:\/\/www.facebook.com\/home.php#\/profile.php?id=525091711&ref=profile","time_zone":"Hawaii","followers_count":696,"profile_background_color":"642D8B","friends_count":916,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/142414481\/Photo_381_normal.jpg","id":16937912,"profile_text_color":"051ed6"},"in_reply_to_screen_name":"ThePhenomena","in_reply_to_status_id":1908213124,"id":1908236102,"source":"TweetDeck<\/a>"} -{"text":"Off to bed! Early flight, but is going to be so worth it to get away from the asshole known as adam warren daniel!! Can't wait,,","created_at":"Mon May 25 01:59:42 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":"this is so me","screen_name":"parkerdaisy","following":null,"utc_offset":-21600,"created_at":"Mon Nov 03 00:36:44 +0000 2008","friends_count":38,"profile_text_color":"000000","notifications":null,"statuses_count":230,"favourites_count":0,"protected":false,"profile_link_color":"0000ff","location":"Georgia","name":"parkerdaisy","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":null,"profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/112275683\/med_fuschia_gerbera_daisy_normal.jpg","id":17122684,"time_zone":"Central Time (US & Canada)","followers_count":19},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908236103,"source":"TwitterBerry<\/a>"} -{"text":"@christianpior J\u00e1 quero um Di\u00e1rio de Cannes com um DVD cheio de extras baf\u00f4nicos by Sabrina e Christian!","created_at":"Mon May 25 01:59:44 +0000 2009","truncated":false,"in_reply_to_user_id":15292534,"user":{"profile_background_color":"0c0e0c","description":"Louco pela loucura da vida","screen_name":"dinhomartins","following":null,"utc_offset":-14400,"created_at":"Fri Mar 20 00:20:14 +0000 2009","friends_count":49,"profile_text_color":"fd2b4e","notifications":null,"statuses_count":232,"favourites_count":5,"protected":false,"profile_link_color":"ffda00","location":"S\u00e3o Paulo,Brasil","name":"dinhomartins","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/14252568\/cuboes.jpg","profile_sidebar_fill_color":"504b35","url":"http:\/\/\u00c9 isso!","profile_sidebar_border_color":"1137e4","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/202539055\/Dinho_martins0032_normal.jpg","id":25418426,"time_zone":"Santiago","followers_count":49},"favorited":false,"in_reply_to_screen_name":"christianpior","in_reply_to_status_id":1907877876,"id":1908236104,"source":"web"} -{"truncated":false,"text":"\u54b1\u4eec\u73ed\u4eba\uff0c\u592a\u96be\u4e86\uff01","created_at":"Mon May 25 01:59:43 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":171,"favourites_count":3,"description":null,"screen_name":"chenghao1205","following":null,"utc_offset":null,"created_at":"Wed Apr 15 04:16:31 +0000 2009","profile_link_color":"1F98C7","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme2\/bg.gif","profile_sidebar_fill_color":"DAECF4","protected":false,"location":null,"name":"chenghao","profile_sidebar_border_color":"C6E2EE","profile_background_tile":false,"url":null,"time_zone":null,"followers_count":12,"profile_background_color":"C6E2EE","friends_count":14,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/142170701\/111_normal.jpg","id":31336959,"profile_text_color":"663B12"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908236200,"source":"twhirl<\/a>"} -{"truncated":false,"text":"@bluevalkyrie Te refieres a saboteadores?","created_at":"Mon May 25 01:59:43 +0000 2009","in_reply_to_user_id":15726744,"favorited":false,"user":{"notifications":null,"statuses_count":528,"favourites_count":3,"description":"","screen_name":"Avencri","following":null,"utc_offset":-25200,"created_at":"Fri Mar 13 02:24:35 +0000 2009","profile_link_color":"D02B55","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme5\/bg.gif","profile_sidebar_fill_color":"99CC33","protected":false,"location":"Mexico","name":"Hugo Arrambide","profile_sidebar_border_color":"829D5E","profile_background_tile":false,"url":"http:\/\/avencri.deviantart.com","time_zone":"Mountain Time (US & Canada)","followers_count":49,"profile_background_color":"352726","friends_count":35,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/120853458\/bettle_normal.jpg","id":24107498,"profile_text_color":"3E4415"},"in_reply_to_screen_name":"bluevalkyrie","in_reply_to_status_id":null,"id":1908236202,"source":"TwitterFox<\/a>"} -{"truncated":false,"text":"@ShawnaeR Awww...ok","created_at":"Mon May 25 01:59:43 +0000 2009","in_reply_to_user_id":25746641,"favorited":false,"user":{"notifications":null,"statuses_count":49,"favourites_count":2,"description":"","screen_name":"Diphrent","following":null,"utc_offset":-18000,"created_at":"Fri Mar 27 14:36:12 +0000 2009","profile_link_color":"f9f624","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/9292826\/KP_020382320.bmp","profile_sidebar_fill_color":"ffffff","protected":false,"location":"Fayetteville, NC","name":"Keon Pacheco","profile_sidebar_border_color":"000000","profile_background_tile":true,"url":"http:\/\/myspace.com\/dynasty2706","time_zone":"Quito","followers_count":71,"profile_background_color":"0810a1","friends_count":203,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/214972799\/KP_041209_1814_00__normal.jpg","id":27015632,"profile_text_color":"050505"},"in_reply_to_screen_name":"ShawnaeR","in_reply_to_status_id":1908174484,"id":1908236300,"source":"web"} -{"truncated":false,"text":"polishing my combat boots. haven't done that in awhile.","created_at":"Mon May 25 01:59:43 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":891,"favourites_count":0,"description":"wanderer, sorta","screen_name":"redwinesus","following":null,"utc_offset":10800,"created_at":"Fri Aug 22 12:36:36 +0000 2008","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/3423766\/BC.jpg","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"Motown","name":"Susan","profile_sidebar_border_color":"87bc44","profile_background_tile":true,"url":null,"time_zone":"Baghdad","followers_count":46,"profile_background_color":"9ae4e8","friends_count":87,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/71089907\/nosepicker2_normal.jpg","id":15944166,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908236301,"source":"web"} -{"truncated":false,"text":"@juant :( no cach\u00e9 que te ibas a Stgo. Suerte est\u00e1 semana","created_at":"Mon May 25 01:59:43 +0000 2009","in_reply_to_user_id":12001962,"favorited":false,"user":{"notifications":null,"statuses_count":2353,"favourites_count":7,"description":"DIgital Experience Designer","screen_name":"jorgebarahona","following":null,"utc_offset":-14400,"created_at":"Tue Dec 12 02:58:49 +0000 2006","profile_link_color":"0084B4","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/7224573\/CE07-2.gif","profile_sidebar_fill_color":"DDFFCC","protected":false,"location":"Vi\u00f1a del Mar, Chile","name":"Jorge Barahona","profile_sidebar_border_color":"BDDCAD","profile_background_tile":true,"url":"http:\/\/www.jbarahona.com","time_zone":"Santiago","followers_count":477,"profile_background_color":"9AE4E8","friends_count":121,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/206102699\/me_bn_normal.gif","id":59173,"profile_text_color":"333333"},"in_reply_to_screen_name":"juant","in_reply_to_status_id":1907958876,"id":1908236302,"source":"Tweetie<\/a>"} -{"truncated":false,"text":"@biz I love Flight of the Conchords. Have fun!","in_reply_to_user_id":13,"favorited":false,"created_at":"Mon May 25 01:59:43 +0000 2009","in_reply_to_screen_name":"biz","in_reply_to_status_id":1906187103,"id":1908236304,"user":{"friends_count":90,"location":"where life is good","utc_offset":-25200,"profile_text_color":"663B12","notifications":null,"statuses_count":141,"favourites_count":186,"following":null,"profile_link_color":"186916","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/6633832\/leaves-1.gif","description":"Be nice and don't suck. If you do suck, (as we all occasionally do) suck less next time. ","name":"Jodi Combs-Kalla","profile_sidebar_fill_color":"DAECF4","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/115410803\/moxie_normal.jpg","created_at":"Tue Feb 10 19:46:00 +0000 2009","profile_sidebar_border_color":"C6E2EE","screen_name":"MoxieFineArt","profile_background_tile":false,"time_zone":"Arizona","followers_count":122,"id":20538920,"profile_background_color":"C6E2EE","url":null},"source":"web"} -{"truncated":false,"text":"@HelloMissJean Barkley needs some speech classes.","created_at":"Mon May 25 01:59:44 +0000 2009","in_reply_to_user_id":18895031,"favorited":false,"user":{"notifications":null,"statuses_count":5266,"favourites_count":10,"description":"Artist,Writer,Filmmaker, Photographer. I love twitter and want the opportunity to share my art with the world","screen_name":"blackjkspollock","following":null,"utc_offset":-21600,"created_at":"Sun Mar 01 16:18:35 +0000 2009","profile_link_color":"0084B4","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/9375744\/tasty_tasteee.JPG","profile_sidebar_fill_color":"DDFFCC","protected":false,"location":"Florida","name":"Gregory Pitts","profile_sidebar_border_color":"BDDCAD","profile_background_tile":false,"url":"http:\/\/theblackjacksonpollock.com","time_zone":"Central Time (US & Canada)","followers_count":1365,"profile_background_color":"9AE4E8","friends_count":2000,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/85162043\/Greg_Artist_22copy_normal.jpg","id":22376139,"profile_text_color":"333333"},"in_reply_to_screen_name":"HelloMissJean","in_reply_to_status_id":1908230691,"id":1908236404,"source":"web"} -{"text":"Take a minute and add us on Facebook http:\/\/tinyurl.com\/oqkfkr","created_at":"Mon May 25 01:59:44 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"000000","description":"Northwests Premier Entertainment Destination","screen_name":"SpiritMTNcasino","following":null,"utc_offset":-28800,"created_at":"Thu Mar 19 02:19:04 +0000 2009","friends_count":781,"profile_text_color":"000000","notifications":null,"statuses_count":206,"favourites_count":0,"protected":false,"profile_link_color":"9D582E","location":" Grand Ronde, Oregon ","name":"SpiritMountainCasino","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/6797204\/twitterbg.jpg","profile_sidebar_fill_color":"79300b","url":"http:\/\/www.spiritmountain.com","profile_sidebar_border_color":"D9B17E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/102597628\/sidebar_coyote_card_normal.jpg","id":25215905,"time_zone":"Pacific Time (US & Canada)","followers_count":411},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908236402,"source":"web"} -{"text":"bom...mas um fds q se foi! Amanh\u00e3 come\u00e7a tudo de novo!","created_at":"Mon May 25 01:59:44 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"1A1B1F","description":"Definir \u00e9 limitar...","screen_name":"vanessa_araujo","following":null,"utc_offset":-10800,"created_at":"Sat Dec 15 19:29:38 +0000 2007","friends_count":50,"profile_text_color":"666666","notifications":null,"statuses_count":328,"favourites_count":2,"protected":false,"profile_link_color":"2FC2EF","location":"Rio de Janeiro","name":"vanessa_araujo","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","url":"http:\/\/www.flickr.com\/photos\/32873042@N03\/","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/181905314\/11995_kboing_normal.jpg","id":11202272,"time_zone":"Brasilia","followers_count":47},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908236400,"source":"yoono<\/a>"} -{"truncated":false,"text":"@acallanan91 cause","created_at":"Mon May 25 01:59:44 +0000 2009","in_reply_to_user_id":41437992,"favorited":false,"user":{"notifications":null,"statuses_count":101,"favourites_count":0,"description":"","screen_name":"AustinHinton","following":null,"utc_offset":-18000,"created_at":"Tue May 19 23:38:37 +0000 2009","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","protected":false,"location":"","name":"Austin Hinton","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"url":null,"time_zone":"Eastern Time (US & Canada)","followers_count":2,"profile_background_color":"1A1B1F","friends_count":2,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":41242284,"profile_text_color":"666666"},"in_reply_to_screen_name":"acallanan91","in_reply_to_status_id":null,"id":1908236401,"source":"txt<\/a>"} -{"truncated":false,"text":"@birdiewhispers still going Lasko?","in_reply_to_user_id":33606197,"favorited":false,"created_at":"Mon May 25 01:59:45 +0000 2009","in_reply_to_screen_name":"birdiewhispers","in_reply_to_status_id":1907605695,"id":1908236503,"user":{"friends_count":43,"location":"Brook green, England","utc_offset":0,"profile_text_color":"666666","notifications":null,"statuses_count":307,"favourites_count":3,"following":null,"profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","description":"If it involved a wave or an Apple then thats sweet with me :)","name":"Chris Hamill","profile_sidebar_fill_color":"252429","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/148740049\/Photo_45_normal.jpg","created_at":"Sat Feb 07 18:03:39 +0000 2009","profile_sidebar_border_color":"181A1E","screen_name":"cihamill","profile_background_tile":false,"time_zone":"London","followers_count":53,"id":20323140,"profile_background_color":"1A1B1F","url":null},"source":"Tweetie<\/a>"} -{"text":"Here are two new additions MyFICO and IDTheft! http:\/\/gabriellebourne.com\/enews.aspx","created_at":"Mon May 25 01:59:45 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"EDECE9","description":"Empowering individuals to live without limits; enhance quality of life and sustainability through conditioning of body, mind and spirit; achieve SMART goals...","screen_name":"gabriellebourne","following":null,"utc_offset":-18000,"created_at":"Mon Nov 24 15:11:07 +0000 2008","friends_count":58,"profile_text_color":"634047","notifications":null,"statuses_count":107,"favourites_count":1,"protected":false,"profile_link_color":"088253","location":"Palm Beach County","name":"Gabrielle Bourne","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme3\/bg.gif","profile_sidebar_fill_color":"E3E2DE","url":"http:\/\/www.gabriellebourne.com","profile_sidebar_border_color":"D3D2CF","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/151066283\/Gabrielle_WEF_2009_normal.jpg","id":17593277,"time_zone":"Eastern Time (US & Canada)","followers_count":54},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908236501,"source":"web"} -{"text":"festival de cannes foi otimo hahahaah saiindo :*","created_at":"Mon May 25 01:59:45 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9AE4E8","description":".. all i know, all i know love will save the day \u266a","screen_name":"kaiohenri","following":null,"utc_offset":-10800,"created_at":"Fri May 22 23:47:21 +0000 2009","friends_count":88,"profile_text_color":"333333","notifications":null,"statuses_count":42,"favourites_count":0,"protected":false,"profile_link_color":"0084B4","location":"Brasil\/Bras\u00edlia","name":"Kaio Henrique","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/14453814\/twi.jpg","profile_sidebar_fill_color":"ffffff","url":"http:\/\/www.orkut.com.br\/Main#Profile.aspx?rl=mp&uid=795541414909485574","profile_sidebar_border_color":"94d8eb","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/226376502\/d_normal.jpg","id":41929554,"time_zone":"Brasilia","followers_count":54},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908236502,"source":"web"} -{"truncated":false,"text":"@emoai \u79c1\u306f\u672c\u4eba\u78ba\u8a8d\u66f8\u767a\u9001\u3055\u308c\u3066\u304b\u3089\u304f\u308b\u306e\u306b10\u65e5\u304b\u304b\u308a\u307e\u3057\u305f\u2026\u304a\u307e\u3051\u306b\u81ea\u5206\u304c\u81ea\u5b85\u3067\u53d7\u3051\u3068\u308a\u3057\u306a\u3044\u3068\u3044\u3051\u306a\u3044\u306e\u3067\u6b21\u306e\u4f11\u65e5\u307e\u3067\u5b9f\u8cea\u53d7\u3051\u53d6\u308a\u3067\u304d\u306a\u3044\u3057\u2026","created_at":"Mon May 25 01:59:45 +0000 2009","in_reply_to_user_id":34569564,"favorited":false,"user":{"notifications":null,"statuses_count":2900,"favourites_count":10,"description":"\u6771\u4eac\u306e\u897f\u5074\u306b\u4f4f\u3080\u30c0\u30e1\u4eba\u9593\u3067\u3059\u3001\u8a71\u984c\u306f\u30b2\u30fc\u30e0\u3001\u30de\u30f3\u30ac\u3001\u30a2\u30cb\u30e1\u3092\u30e1\u30a4\u30f3\u306b\u81ea\u4f5c\uff30\uff23\u3068\u6642\u4e8b\u554f\u984c\u304c\u3082\u591a\u5c11\u304b\u3058\u3063\u3066\u3044\u307e\u3059\u30d5\u30a9\u30ed\u30fc\u3001\u30ea\u30e0\u30fc\u30d6\u304a\u6c17\u8efd\u306b\u3069\u3046\u305e\u3002\uff38\uff22\uff2f\uff38\uff13\uff16\uff10\u30b2\u30fc\u30de\u30fc\u30bf\u30b0\u3082gatarou041\u3067\u3059","screen_name":"gatarou041","following":null,"utc_offset":32400,"created_at":"Fri May 16 15:32:40 +0000 2008","profile_link_color":"0099B9","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/5954409\/www_dotup_org23255.jpg","profile_sidebar_fill_color":"95E8EC","protected":false,"location":"\u6771\u4eac\u90fd\u516b\u738b\u5b50\u5e02","name":"\u305f\u308d\u3046","profile_sidebar_border_color":"5ED4DC","profile_background_tile":true,"url":"http:\/\/gatarou041.blog82.fc2.com\/","time_zone":"Tokyo","followers_count":52,"profile_background_color":"0099B9","friends_count":51,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/224052461\/sc0001_normal.png","id":14800072,"profile_text_color":"3C3940"},"in_reply_to_screen_name":"emoai","in_reply_to_status_id":1908211112,"id":1908236504,"source":"Tween<\/a>"} -{"truncated":false,"text":"@GooberSnattch Already to bed?","created_at":"Mon May 25 01:59:46 +0000 2009","in_reply_to_user_id":16658682,"favorited":false,"user":{"notifications":null,"statuses_count":242,"favourites_count":0,"description":"Only When You've Left, Do You Know Where You've Been!","screen_name":"Wally0726","following":null,"utc_offset":-21600,"created_at":"Sun May 03 02:26:29 +0000 2009","profile_link_color":"0099B9","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme4\/bg.gif","profile_sidebar_fill_color":"95E8EC","protected":false,"location":"Music City","name":"Roland Roles","profile_sidebar_border_color":"5ED4DC","profile_background_tile":false,"url":null,"time_zone":"Central Time (US & Canada)","followers_count":50,"profile_background_color":"0099B9","friends_count":61,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/228713336\/twitter_normal.jpg","id":37342437,"profile_text_color":"3C3940"},"in_reply_to_screen_name":"GooberSnattch","in_reply_to_status_id":1908204426,"id":1908236602,"source":"web"} -{"truncated":false,"text":"listening to Pink Floyd ~ Brain Damage\nhttp:\/\/tinyurl.com\/ywthsb","in_reply_to_user_id":null,"favorited":false,"created_at":"Mon May 25 01:59:46 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908236600,"user":{"friends_count":1519,"location":"boston, ma","utc_offset":-21600,"profile_text_color":"333333","notifications":null,"statuses_count":2384,"favourites_count":40,"following":null,"profile_link_color":"0084B4","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/9811633\/as.jpg","description":"fascinated by organized chaotic systems, rock, metal, punk, psychedelia, technology, anarchism","name":"setv","profile_sidebar_fill_color":"DDFFCC","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/133220893\/page15-1005-full_normal.jpg","created_at":"Sun Dec 28 22:37:37 +0000 2008","profile_sidebar_border_color":"BDDCAD","screen_name":"setv","profile_background_tile":true,"time_zone":"Central Time (US & Canada)","followers_count":1107,"id":18435806,"profile_background_color":"9AE4E8","url":null},"source":"web"} -{"truncated":false,"text":"with hard work comes accomplishment. we got the deck pretty well done.. just gotta finish putting the deck boards on.. job well done.","in_reply_to_user_id":null,"favorited":false,"created_at":"Mon May 25 01:59:46 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908236601,"user":{"friends_count":22,"location":"","utc_offset":-21600,"profile_text_color":"000000","notifications":null,"statuses_count":42,"favourites_count":0,"following":null,"profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","description":"","name":"jason cook","profile_sidebar_fill_color":"e0ff92","protected":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/193928331\/PIC36_normal.JPG","created_at":"Sat May 02 00:40:21 +0000 2009","profile_sidebar_border_color":"87bc44","screen_name":"jasperpso","profile_background_tile":false,"time_zone":"Central Time (US & Canada)","followers_count":14,"id":37091846,"profile_background_color":"9ae4e8","url":null},"source":"web"} -{"truncated":false,"text":"The 'King of the Cats' is building a den. Do you have what it takes?","created_at":"Mon May 25 01:59:46 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":17,"favourites_count":0,"description":"*We Won The War*","screen_name":"jogabot","following":null,"utc_offset":-18000,"created_at":"Fri May 22 00:04:45 +0000 2009","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/14172945\/JoGa_Tabula_Rasa___v1_.jpg","profile_sidebar_fill_color":"252429","protected":false,"location":"","name":"JoGaBot","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"url":"http:\/\/www.gattivision.com","time_zone":"Quito","followers_count":1,"profile_background_color":"1A1B1F","friends_count":1,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/223898441\/JoGa_Tabula_Rasa___v1__normal.jpg","id":41707459,"profile_text_color":"666666"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908236603,"source":"txt<\/a>"} -{"truncated":false,"text":"@suttygal,Hey Hi Sutty! Okay off to FOD I go!","created_at":"Mon May 25 01:59:46 +0000 2009","in_reply_to_user_id":16430085,"favorited":false,"user":{"notifications":null,"statuses_count":935,"favourites_count":3,"description":"","screen_name":"JoeGfod","following":null,"utc_offset":-21600,"created_at":"Sat Apr 04 00:27:45 +0000 2009","profile_link_color":"0099B9","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/13734039\/joegtwitterbackground2.jpg","profile_sidebar_fill_color":"95E8EC","protected":false,"location":"Huntsville TX","name":"Joe Garza","profile_sidebar_border_color":"5ED4DC","profile_background_tile":true,"url":null,"time_zone":"Central Time (US & Canada)","followers_count":55,"profile_background_color":"0099B9","friends_count":88,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/185148590\/106-1_normal.jpg","id":28697015,"profile_text_color":"3C3940"},"in_reply_to_screen_name":"suttygal","in_reply_to_status_id":null,"id":1908236604,"source":"web"} -{"text":"Die Outdoor-Navigationsger\u00e4te von Garmin werden mit den GPS-Chipsets von MediaTek ausgestattet: MediaTek Inc.: H.. http:\/\/twurl.nl\/bfef1d","created_at":"Mon May 25 01:59:47 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":null,"screen_name":"addon","following":null,"utc_offset":null,"created_at":"Mon Feb 23 14:36:30 +0000 2009","friends_count":0,"profile_text_color":"000000","notifications":null,"statuses_count":2488,"favourites_count":0,"protected":false,"profile_link_color":"0000ff","location":null,"name":"active addon","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":null,"profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":21656424,"time_zone":null,"followers_count":87},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908236703,"source":"twitterfeed<\/a>"} -{"truncated":false,"text":"Como rodar o Norton Security Scan de um pendrive: - http:\/\/tinyurl.com\/ofzokv","created_at":"Mon May 25 01:59:47 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":21,"favourites_count":0,"description":"http:\/\/tutoriais.ctdo.com.br","screen_name":"tutoriaisctdo","following":null,"utc_offset":-14400,"created_at":"Mon May 18 04:34:03 +0000 2009","profile_link_color":"2FC2EF","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","protected":false,"location":"Brasil","name":"Tutoriais CTDO","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"url":"http:\/\/tutoriais.ctdo.com.br","time_zone":"Santiago","followers_count":101,"profile_background_color":"1A1B1F","friends_count":1185,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/218292787\/foto-2_normal.png","id":40814100,"profile_text_color":"666666"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908236700,"source":"web"} -{"truncated":false,"text":"@pimpin_idiots phone","created_at":"Mon May 25 01:59:47 +0000 2009","in_reply_to_user_id":17227165,"favorited":false,"user":{"notifications":null,"statuses_count":599,"favourites_count":1,"description":"interaction design. madras. manchester united. sustainability.","screen_name":"arv43","following":null,"utc_offset":-28800,"created_at":"Wed Dec 19 10:38:47 +0000 2007","profile_link_color":"D02B55","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme5\/bg.gif","profile_sidebar_fill_color":"99CC33","protected":false,"location":"SF, CA","name":"Arvind Ashok","profile_sidebar_border_color":"829D5E","profile_background_tile":false,"url":"http:\/\/www.linkedin.com\/in\/arvindashok","time_zone":"Pacific Time (US & Canada)","followers_count":62,"profile_background_color":"352726","friends_count":30,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/51908974\/comic_book_effect_copy_normal.jpg","id":11330392,"profile_text_color":"3E4415"},"in_reply_to_screen_name":"pimpin_idiots","in_reply_to_status_id":1908091560,"id":1908236702,"source":"Twitterrific<\/a>"} -{"truncated":false,"text":"@jwilphotos I think whoever wins 3 games 1st wins both series","created_at":"Mon May 25 01:59:47 +0000 2009","in_reply_to_user_id":20498232,"favorited":false,"user":{"notifications":null,"statuses_count":3483,"favourites_count":8,"description":"NGenius ENT\/Core DJs\/Hustle Squad DJs","screen_name":"djhellayella","following":null,"utc_offset":-25200,"created_at":"Sat Dec 27 00:38:00 +0000 2008","profile_link_color":"2fd4ef","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/5354774\/djhellayellalogo_white__2_.jpg","profile_sidebar_fill_color":"252429","protected":false,"location":"Austin Texas","name":"DJ Hella Yella","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"url":"http:\/\/www.myspace.com\/djhellayella","time_zone":"Mountain Time (US & Canada)","followers_count":2043,"profile_background_color":"1A1B1F","friends_count":522,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/187874990\/n100700270_5329_normal.jpg","id":18398695,"profile_text_color":"a99804"},"in_reply_to_screen_name":"jwilphotos","in_reply_to_status_id":1907764546,"id":1908236704,"source":"UberTwitter<\/a>"} -{"text":"Sometimes ya'll don't need to respond w\/here I am or any LAME a** sh*t like that...be warned u tweet ur number I'm RT'ing it!!!!","created_at":"Mon May 25 01:59:47 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"1A1B1F","description":"Supermom, Blogger, Promoter for @hasanlc and @lcxradio, Staff Writer for @GotDamMagazine, Webdesigner, video editor and Marketer for various clients","screen_name":"DivasMistress","following":null,"utc_offset":-18000,"created_at":"Mon Mar 02 00:50:08 +0000 2009","friends_count":64,"profile_text_color":"666666","notifications":null,"statuses_count":18861,"favourites_count":111,"protected":false,"profile_link_color":"2FC2EF","location":"New Jersey","name":"Miss Tee Is A Diva","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/7839749\/bnw.jpg","profile_sidebar_fill_color":"252429","url":"http:\/\/www.divasmistress.com","profile_sidebar_border_color":"181A1E","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/209169531\/moi3_normal.jpg","id":22429985,"time_zone":"Eastern Time (US & Canada)","followers_count":1881},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908236701,"source":"TweetDeck<\/a>"} -{"truncated":false,"text":"riding in the cab of a tow truck. Fuel problem in Visalia on the way home from Sequoia","created_at":"Mon May 25 01:59:47 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":117,"favourites_count":0,"description":"Just another liberal vegan in southern California","screen_name":"AAronL1968","following":null,"utc_offset":-32400,"created_at":"Thu Mar 05 22:17:43 +0000 2009","profile_link_color":"b40058","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/12744163\/yin_yang_background.gif","profile_sidebar_fill_color":"5fc7dd","protected":false,"location":"Thousand Oaks, CA","name":"AAron Leckinger","profile_sidebar_border_color":"518694","profile_background_tile":true,"url":"http:\/\/www.leckinger.com","time_zone":"Alaska","followers_count":57,"profile_background_color":"9AE4E8","friends_count":242,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/210529909\/AAron_technics_2_normal.jpg","id":22988702,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908236801,"source":"mobile web<\/a>"} -{"truncated":false,"text":"Algu\u00e9m tem receitas de comidas liquidas?? J\u00e1 experimentaram bater arroz e feijao no liquidificador???","created_at":"Mon May 25 01:59:47 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":80,"favourites_count":2,"description":"","screen_name":"anapaulal","following":null,"utc_offset":-32400,"created_at":"Thu May 07 15:52:15 +0000 2009","profile_link_color":"FF0000","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme10\/bg.gif","profile_sidebar_fill_color":"7AC3EE","protected":false,"location":"S\u00e3o Paulo","name":"Ana Paula Louren\u00e7o ","profile_sidebar_border_color":"65B0DA","profile_background_tile":true,"url":null,"time_zone":"Alaska","followers_count":16,"profile_background_color":"642D8B","friends_count":23,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/208677413\/cortadatwitter_normal.JPG","id":38456061,"profile_text_color":"3D1957"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908236802,"source":"Twitterrific<\/a>"} -{"in_reply_to_user_id":null,"text":"Just Relaxing","favorited":false,"created_at":"Mon May 25 01:59:48 +0000 2009","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908236903,"user":{"profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","utc_offset":null,"profile_sidebar_fill_color":"e0ff92","profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","following":null,"created_at":"Mon May 25 01:55:29 +0000 2009","profile_sidebar_border_color":"87bc44","description":null,"screen_name":"Scooter128","name":"Scott Simon","profile_background_tile":false,"protected":false,"time_zone":null,"followers_count":0,"profile_background_color":"9ae4e8","friends_count":10,"location":null,"profile_text_color":"000000","id":42326736,"notifications":null,"statuses_count":1,"favourites_count":0,"url":null},"truncated":false,"source":"web"} -{"truncated":false,"text":"New blog post: Loan Prinicples http:\/\/bit.ly\/kLKiX","created_at":"Mon May 25 01:59:47 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":48823,"favourites_count":0,"description":"","screen_name":"bananafancy","following":null,"utc_offset":-36000,"created_at":"Sat Mar 28 02:36:26 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":"USA","name":"Peter Brown","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":"Hawaii","followers_count":3171,"profile_background_color":"9ae4e8","friends_count":966,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/112672480\/2006413152222546_normal.png","id":27160574,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908236800,"source":"Twitter Tools<\/a>"} -{"truncated":false,"text":"RT @ thecoastnj listening to \"Come Together - The Beatles\" \u266b http:\/\/blip.fm\/~6yyru","created_at":"Mon May 25 01:59:47 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":221,"favourites_count":7,"description":"RE Investor and RE Loan mod acceleration specialist. Entrepreneur, Internet Marketer. Let's meet on FaceBook","screen_name":"JET739","following":null,"utc_offset":-28800,"created_at":"Thu Jan 08 18:18:06 +0000 2009","profile_link_color":"FF0000","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/10819378\/061129151300.jpg","profile_sidebar_fill_color":"7AC3EE","protected":false,"location":"Nationwide","name":"Jan Torrence","profile_sidebar_border_color":"65B0DA","profile_background_tile":true,"url":"http:\/\/www.homemortgagerecovery.com","time_zone":"Pacific Time (US & Canada)","followers_count":6918,"profile_background_color":"642D8B","friends_count":6899,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/70369968\/Alaska_2007_776_normal.jpg","id":18772703,"profile_text_color":"3D1957"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908236804,"source":"web"} -{"truncated":false,"text":"@mikachu02 Hi, I'm Nate. I'm a RE agent in Montgomery county. I'm building my network, so feel free to check out my profile.","created_at":"Mon May 25 01:59:48 +0000 2009","in_reply_to_user_id":21272096,"favorited":false,"user":{"notifications":null,"statuses_count":28,"favourites_count":0,"description":"Real Estate Agent in Montgomery County, Maryland, Olney","screen_name":"natebaker_ehp","following":null,"utc_offset":-18000,"created_at":"Fri May 15 23:37:37 +0000 2009","profile_link_color":"060709","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme2\/bg.gif","profile_sidebar_fill_color":"0d88bf","protected":false,"location":"Olney, MD 20832","name":"Nate Baker","profile_sidebar_border_color":"C6E2EE","profile_background_tile":false,"url":"http:\/\/www.ehomepost.com\/tabid\/8443\/controlType\/ViewProfile20418\/UserID\/111\/Default.aspx","time_zone":"Eastern Time (US & Canada)","followers_count":74,"profile_background_color":"C6E2EE","friends_count":77,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/219346787\/633461711695374160_normal.jpg","id":40362259,"profile_text_color":"443527"},"in_reply_to_screen_name":"mikachu02","in_reply_to_status_id":null,"id":1908236901,"source":"Twitterizer<\/a>"} -{"truncated":false,"text":"@ladymelo mas ai eu teria de repetir alguma letra, tinho ja existe cryando","created_at":"Mon May 25 01:59:48 +0000 2009","in_reply_to_user_id":21439363,"favorited":false,"user":{"notifications":null,"statuses_count":61,"favourites_count":0,"description":"","screen_name":"tinhoohash","following":null,"utc_offset":-14400,"created_at":"Sun Apr 12 23:42:06 +0000 2009","profile_link_color":"18863E","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/8333623\/meu_own.jpg","profile_sidebar_fill_color":"ffffff","protected":false,"location":"Brasil","name":"tinho\/hash","profile_sidebar_border_color":"ffffff","profile_background_tile":false,"url":null,"time_zone":"Santiago","followers_count":75,"profile_background_color":"18863E","friends_count":102,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/228901835\/twitter_normal.jpg","id":30750958,"profile_text_color":"18863E"},"in_reply_to_screen_name":"ladymelo","in_reply_to_status_id":null,"id":1908236904,"source":"web"} -{"text":"@caraalynn yes. yes i do. but it's all good. i mean, i know you really want to stalk me and all.","created_at":"Mon May 25 01:59:49 +0000 2009","truncated":false,"in_reply_to_user_id":21816485,"user":{"profile_background_color":"969696","description":"Commercial photographer during the day, Musician in the evening. This is my life, come pretend you care.","screen_name":"corymorton","following":null,"utc_offset":-18000,"created_at":"Sat Dec 27 23:03:24 +0000 2008","friends_count":148,"profile_text_color":"000000","notifications":null,"statuses_count":1143,"favourites_count":0,"protected":false,"profile_link_color":"234827","location":"Pittsburgh, PA","name":"Cory Morton","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"ed8407","url":"http:\/\/www.corymortonphoto.com","profile_sidebar_border_color":"234827","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/224222881\/_MG_9517-Edit-s_normal.jpg","id":18416630,"time_zone":"Eastern Time (US & Canada)","followers_count":161},"favorited":false,"in_reply_to_screen_name":"caraalynn","in_reply_to_status_id":1908210849,"id":1908237003,"source":"TweetDeck<\/a>"} -{"text":"God, i need Your help...!!","created_at":"Mon May 25 01:59:49 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":"","screen_name":"shiho_i","following":null,"utc_offset":32400,"created_at":"Thu May 21 03:16:45 +0000 2009","friends_count":1,"profile_text_color":"000000","notifications":null,"statuses_count":3,"favourites_count":0,"protected":false,"profile_link_color":"0000ff","location":"","name":"Shiho Ishiguro","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":null,"profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":41518813,"time_zone":"Tokyo","followers_count":0},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908237002,"source":"web"} -{"text":"If Cornel is the new W.E.B. DuBois who is the new Booker T.? #stand","created_at":"Mon May 25 01:59:49 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"0099B9","description":"Leon Rogers is a fireball of energy... - New York Times","screen_name":"LeonX","following":null,"utc_offset":-18000,"created_at":"Tue Oct 09 02:00:21 +0000 2007","friends_count":60,"profile_text_color":"3C3940","notifications":null,"statuses_count":263,"favourites_count":0,"protected":false,"profile_link_color":"0099B9","location":"","name":"Leon Rogers","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/13999884\/brooklynati.jpg","profile_sidebar_fill_color":"95E8EC","url":null,"profile_sidebar_border_color":"5ED4DC","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/32702082\/sekou7_normal.jpg","id":9320262,"time_zone":"Eastern Time (US & Canada)","followers_count":57},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908237000,"source":"TweetDeck<\/a>"} -{"truncated":false,"text":"I wanted to create a corporate-style brand for my work, to promote it as product rather than unique artefacts http:\/\/tinyurl.com\/o48ggx","created_at":"Mon May 25 01:59:49 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":1232,"favourites_count":2,"description":"Hazel Dooney has emerged as one of the Asia-Pacific region's most controversial young female artists.","screen_name":"DooneyStudio","following":null,"utc_offset":36000,"created_at":"Mon Jan 26 11:17:51 +0000 2009","profile_link_color":"00e3fa","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/4072503\/studio_eg2.jpg","profile_sidebar_fill_color":"ffffff","protected":false,"location":"Everywhere you least expect","name":"Hazel Dooney","profile_sidebar_border_color":"ffc2ec","profile_background_tile":false,"url":"http:\/\/hazeldooney.com","time_zone":"Sydney","followers_count":1489,"profile_background_color":"FFFFFF","friends_count":1993,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/121187128\/Aust-Most-Wanted-Portr800_normal.jpg","id":19529306,"profile_text_color":"fd3abf"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908237004,"source":"web"} -{"truncated":false,"text":"Wings 6. BlackHawks 1. Another Dominating performance. Now we can concentrate on closing the series before looking forward to the pens.","created_at":"Mon May 25 01:59:49 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":2,"favourites_count":0,"description":null,"screen_name":"shyamv","following":null,"utc_offset":null,"created_at":"Sat May 23 06:56:20 +0000 2009","profile_link_color":"0000ff","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","protected":false,"location":null,"name":"Shyam Veerasankar","profile_sidebar_border_color":"87bc44","profile_background_tile":false,"url":null,"time_zone":null,"followers_count":10,"profile_background_color":"9ae4e8","friends_count":12,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":41990400,"profile_text_color":"000000"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908237001,"source":"web"} -{"truncated":false,"text":"Up Against the Wal-Marts: How Your Business Can Prosper in the Shadow of the Retail Giants\nhttp:\/\/bit.ly\/u5gOI","created_at":"Mon May 25 01:59:49 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":4,"favourites_count":0,"description":"","screen_name":"retailbooks","following":null,"utc_offset":36000,"created_at":"Thu May 21 04:19:16 +0000 2009","profile_link_color":"0084B4","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/14048002\/Retail-books.jpg","profile_sidebar_fill_color":"DDFFCC","protected":false,"location":"Australia","name":"Retailbooks","profile_sidebar_border_color":"BDDCAD","profile_background_tile":false,"url":"http:\/\/www.retailbooks.com.au","time_zone":"Sydney","followers_count":5,"profile_background_color":"edf2f3","friends_count":1,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/223923559\/Retailbooks-logo-sml_normal.jpg","id":41527718,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908237100,"source":"web"} -{"truncated":false,"text":"Vodka and jager bombs. Keep it classy bloomington. Pimpin since 86.","created_at":"Mon May 25 01:59:49 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":69,"favourites_count":1,"description":"A girl should be two things. Classy and fabulous.","screen_name":"heyuwiththehair","following":null,"utc_offset":-18000,"created_at":"Tue Apr 07 17:06:17 +0000 2009","profile_link_color":"FF3300","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme6\/bg.gif","profile_sidebar_fill_color":"A0C5C7","protected":false,"location":"Bedford, Indiana","name":"Samantha Marshall","profile_sidebar_border_color":"86A4A6","profile_background_tile":false,"url":"http:\/\/facebook.com\/people\/samantha-lee-ann-marshall","time_zone":"Indiana (East)","followers_count":18,"profile_background_color":"709397","friends_count":28,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/205902902\/twit_normal.jpg","id":29490896,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908237103,"source":"TwitterBerry<\/a>"} -{"truncated":false,"text":"@jordanknight is it flava flav, boii? LOL!!","created_at":"Mon May 25 01:59:49 +0000 2009","in_reply_to_user_id":31001575,"favorited":false,"user":{"notifications":null,"statuses_count":2948,"favourites_count":13,"description":"I'm an NKOTB fan and DEW is the MAN. LET'S GET THIS!!","screen_name":"kayheartsdew","following":null,"utc_offset":-28800,"created_at":"Fri Jan 09 21:36:17 +0000 2009","profile_link_color":"FF0000","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/5352626\/donnie_wahlbergedit2.JPG","profile_sidebar_fill_color":"7AC3EE","protected":false,"location":"iPhone: 32.905454,-117.144327","name":"Karla LM","profile_sidebar_border_color":"65B0DA","profile_background_tile":true,"url":null,"time_zone":"Pacific Time (US & Canada)","followers_count":166,"profile_background_color":"642D8B","friends_count":382,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/195620760\/IMG_2088_edited_normal.JPG","id":18816417,"profile_text_color":"3D1957"},"in_reply_to_screen_name":"jordanknight","in_reply_to_status_id":null,"id":1908237104,"source":"TweetDeck<\/a>"} -{"text":"Wind 0,7 m\/s W. Barometer 1013,7 mb, Falling slowly. Temperature 7,3 \u00b0C. Rain today 0,0 mm. Humidity 95%","created_at":"Mon May 25 01:59:49 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":"","screen_name":"pander2208","following":null,"utc_offset":3600,"created_at":"Fri Jan 02 13:35:37 +0000 2009","friends_count":0,"profile_text_color":"000000","notifications":null,"statuses_count":8514,"favourites_count":0,"protected":false,"profile_link_color":"0000ff","location":"sweden","name":"pander2208","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":null,"profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":18551940,"time_zone":"Stockholm","followers_count":47},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908237101,"source":"web"} -{"text":"Thinking sticky rice. Godzirra!","created_at":"Mon May 25 01:59:50 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"1A1B1F","description":"Senior Promotions Producer aka Promo Pimp","screen_name":"Scoob314","following":null,"utc_offset":-18000,"created_at":"Sun Apr 05 01:05:24 +0000 2009","friends_count":73,"profile_text_color":"666666","notifications":null,"statuses_count":126,"favourites_count":2,"protected":false,"profile_link_color":"2FC2EF","location":"Richmond VA","name":"Brandon Seier","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","url":"http:\/\/www.linkedin.com\/in\/bseier","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/130496482\/twitter_pic_normal.JPG","id":28909203,"time_zone":"Eastern Time (US & Canada)","followers_count":39},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908237200,"source":"txt<\/a>"} -{"truncated":false,"text":"@thisishanky that's awesome! I love new music :)","created_at":"Mon May 25 01:59:50 +0000 2009","in_reply_to_user_id":14570535,"favorited":false,"user":{"notifications":null,"statuses_count":379,"favourites_count":0,"description":"","screen_name":"katenaylor","following":null,"utc_offset":-18000,"created_at":"Mon Oct 06 00:31:05 +0000 2008","profile_link_color":"FF0000","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme10\/bg.gif","profile_sidebar_fill_color":"7AC3EE","protected":false,"location":"Cinnaminson","name":"katenaylor","profile_sidebar_border_color":"65B0DA","profile_background_tile":true,"url":"http:\/\/www.myspace.com\/kate_naylor","time_zone":"Eastern Time (US & Canada)","followers_count":50,"profile_background_color":"642D8B","friends_count":49,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/61343019\/Photo_45_normal.jpg","id":16607727,"profile_text_color":"3D1957"},"in_reply_to_screen_name":"ThisisHanky","in_reply_to_status_id":null,"id":1908237201,"source":"txt<\/a>"} -{"text":"CLOSiNG UP SH0P. EF MY LiFE... MEMORiAL DAY WEEkEND SUCkSSS!","created_at":"Mon May 25 01:59:50 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":null,"screen_name":"CO0L_kiD","following":null,"utc_offset":null,"created_at":"Sun May 24 01:56:20 +0000 2009","friends_count":6,"profile_text_color":"000000","notifications":null,"statuses_count":18,"favourites_count":0,"protected":false,"profile_link_color":"0000ff","location":null,"name":"Denisse Davis","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":null,"profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":42140892,"time_zone":null,"followers_count":2},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908237202,"source":"mobile web<\/a>"} -{"truncated":false,"text":"@LaurenConrad where r u going???","created_at":"Mon May 25 01:59:51 +0000 2009","in_reply_to_user_id":34097876,"favorited":false,"user":{"notifications":null,"statuses_count":61,"favourites_count":12,"description":null,"screen_name":"FatenFufu","following":null,"utc_offset":null,"created_at":"Mon Feb 23 11:13:16 +0000 2009","profile_link_color":"990000","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme7\/bg.gif","profile_sidebar_fill_color":"F3F3F3","protected":false,"location":null,"name":"Faten Hammouda","profile_sidebar_border_color":"DFDFDF","profile_background_tile":false,"url":null,"time_zone":null,"followers_count":35,"profile_background_color":"EBEBEB","friends_count":97,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/93697845\/meeeeeeeeeeeeeeeeeeeeeeeeee_normal.jpg","id":21645757,"profile_text_color":"333333"},"in_reply_to_screen_name":"LaurenConrad","in_reply_to_status_id":1904351462,"id":1908237303,"source":"TwitterFon<\/a>"} -{"truncated":false,"text":"Relaxing, bed, wake up, go home.","created_at":"Mon May 25 01:59:51 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":676,"favourites_count":0,"description":"","screen_name":"WilliamMHughes","following":null,"utc_offset":-18000,"created_at":"Fri Sep 19 20:05:36 +0000 2008","profile_link_color":"FF3300","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/11039595\/miking-technique-tip-2.jpg","profile_sidebar_fill_color":"A0C5C7","protected":false,"location":"Cary, NC","name":"Will Hughes","profile_sidebar_border_color":"86A4A6","profile_background_tile":true,"url":"http:\/\/willhughes.wordpress.com","time_zone":"Eastern Time (US & Canada)","followers_count":41,"profile_background_color":"709397","friends_count":57,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/76115361\/n600330485_3611305_2780_normal.jpg","id":16369397,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908237304,"source":"web"} -{"text":"Queens Liinden and Merrick is where i be when im home","created_at":"Mon May 25 01:59:51 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9017ba","description":"Beauty&Brains O Yea I Luv Cash$$","screen_name":"LilBeaUtiie","following":null,"utc_offset":-18000,"created_at":"Mon Apr 13 16:11:09 +0000 2009","friends_count":90,"profile_text_color":"972670","notifications":null,"statuses_count":184,"favourites_count":0,"protected":false,"profile_link_color":"FF0000","location":"Where I Wanna Be","name":"BrandiG","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/14033943\/new_b3.jpg","profile_sidebar_fill_color":"e17aee","url":null,"profile_sidebar_border_color":"da65cf","profile_background_tile":true,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/224028018\/newb-1_normal.jpg","id":30893385,"time_zone":"Quito","followers_count":32},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908237302,"source":"web"} -{"truncated":false,"text":"@sunsetoverdose It's not even 10 here on the east coast, and I have a (7) beer(s). Getcha one!","created_at":"Mon May 25 01:59:51 +0000 2009","in_reply_to_user_id":20826781,"favorited":false,"user":{"notifications":null,"statuses_count":1756,"favourites_count":1,"description":"I take random photos. I love writing but rarely find the right words. My marriage to music is usually rocky. My passport needs more stamps.","screen_name":"JasDunham","following":null,"utc_offset":-18000,"created_at":"Fri Dec 05 03:03:59 +0000 2008","profile_link_color":"c62315","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/12643284\/musictravelwritemosaicblackwhite.JPG","profile_sidebar_fill_color":"d9dbd6","protected":false,"location":"Oak Hill, Virginia","name":"Jason Dunham","profile_sidebar_border_color":"101113","profile_background_tile":false,"url":"http:\/\/www.jadunhamphotography.blogspot.com","time_zone":"Eastern Time (US & Canada)","followers_count":109,"profile_background_color":"0d0d0c","friends_count":144,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/209437269\/twitterwayfarerred_normal.JPG","id":17888230,"profile_text_color":"0b0909"},"in_reply_to_screen_name":"sunsetoverdose","in_reply_to_status_id":1908212119,"id":1908237301,"source":"TwitterFox<\/a>"} -{"text":"@Poooles2sJBG hahah thats what her daughter said ohh","created_at":"Mon May 25 01:59:52 +0000 2009","truncated":false,"in_reply_to_user_id":28838109,"user":{"profile_background_color":"352726","description":"","screen_name":"Patrykxoxo","following":null,"utc_offset":36000,"created_at":"Mon Mar 16 12:20:43 +0000 2009","friends_count":88,"profile_text_color":"3E4415","notifications":null,"statuses_count":375,"favourites_count":2,"protected":false,"profile_link_color":"D02B55","location":"Sydney, Australia","name":"Patrick Zaczkiewicz","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme5\/bg.gif","profile_sidebar_fill_color":"99CC33","url":"http:\/\/www.myspace.com\/zaczkiewicz","profile_sidebar_border_color":"829D5E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/99528535\/1_normal.jpg","id":24682369,"time_zone":"Sydney","followers_count":42},"favorited":false,"in_reply_to_screen_name":"Poooles2sJBG","in_reply_to_status_id":1908229926,"id":1908237402,"source":"web"} -{"text":"On my way here i herd so many ghetto conversations. Makes me wonder.","created_at":"Mon May 25 01:59:52 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"1A1B1F","description":"a writer and lover of words","screen_name":"Blackstarr_","following":null,"utc_offset":-18000,"created_at":"Fri Aug 22 11:09:45 +0000 2008","friends_count":11,"profile_text_color":"666666","notifications":null,"statuses_count":595,"favourites_count":0,"protected":false,"profile_link_color":"2FC2EF","location":"Philadelphia, PA, USA","name":"freedom","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme9\/bg.gif","profile_sidebar_fill_color":"252429","url":"http:\/\/freedom1926.wordpress.com\/","profile_sidebar_border_color":"181A1E","profile_background_tile":false,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/117636984\/freedom_tower_02_normal.jpg","id":15943584,"time_zone":"Eastern Time (US & Canada)","followers_count":33},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908237404,"source":"mobile web<\/a>"} -{"truncated":false,"text":"\u30b3\u30fc\u30d2\u30fc\u98f2\u3093\u3060\u3089\u304a\u306a\u304b\u3044\u305f\u3044 [Eee]","created_at":"Mon May 25 01:59:52 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":12960,"favourites_count":0,"description":"\u6c17\u307e\u3050\u308c\u306b\u97f3\u5f04\u308a\u3068\u304b\u3084\u3063\u3066\u307e\u3059","screen_name":"s1ta","following":null,"utc_offset":32400,"created_at":"Wed Jun 18 01:21:34 +0000 2008","profile_link_color":"088253","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme3\/bg.gif","profile_sidebar_fill_color":"E3E2DE","protected":false,"location":"\u3050\u3093\u307e\u3051\u3093","name":"sita","profile_sidebar_border_color":"D3D2CF","profile_background_tile":false,"url":null,"time_zone":"Tokyo","followers_count":236,"profile_background_color":"EDECE9","friends_count":209,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/65870627\/2811viploader471438_normal.jpg","id":15152548,"profile_text_color":"634047"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908237400,"source":"Tween<\/a>"} -{"truncated":false,"text":"FAP-WINNER.com- Amazing Affiliate Profit: Up To 180 Per Sale! http:\/\/bit.ly\/xGMV6","created_at":"Mon May 25 01:59:52 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":288,"favourites_count":0,"description":"To find products in a specific language, select a category or enter keywords and choose the language from the Language dropdown, then click Go.","screen_name":"Click_Bank","following":null,"utc_offset":-36000,"created_at":"Mon Apr 27 05:28:50 +0000 2009","profile_link_color":"0000FF","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"FFFFFF","protected":false,"location":"Boise","name":"ClickBank","profile_sidebar_border_color":"000000","profile_background_tile":false,"url":"http:\/\/bit.ly\/jhVbH","time_zone":"Hawaii","followers_count":3222,"profile_background_color":"3152A5","friends_count":3496,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/185755408\/cb_normal.jpg","id":35680175,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908237403,"source":"twitterfeed<\/a>"} -{"truncated":false,"text":"@pathfindersar my golden retriever is 2 years old now and she wags her tail and tries to lick Ethan's face when a meltdown happens...","created_at":"Mon May 25 01:59:52 +0000 2009","in_reply_to_user_id":34815761,"favorited":false,"user":{"notifications":null,"statuses_count":2120,"favourites_count":45,"description":"Mother of 4. Son w\/ Asperger's. Fibro. CFS. Mental Health & Gay Rights supporter. Insomniac. Pet lover.Writer. Gardener. Love to sing out loud! Devoted Wife","screen_name":"FranAspiemom","following":null,"utc_offset":-18000,"created_at":"Sat Apr 18 17:40:03 +0000 2009","profile_link_color":"ef0b90","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/12856927\/blueyellowstars.jpg","profile_sidebar_fill_color":"fbf341","protected":false,"location":"Upstate NY","name":"Fran Corrow","profile_sidebar_border_color":"3a11e4","profile_background_tile":true,"url":null,"time_zone":"Eastern Time (US & Canada)","followers_count":455,"profile_background_color":"fff266","friends_count":400,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/224710590\/photo_normal.jpg","id":32953180,"profile_text_color":"3c06c1"},"in_reply_to_screen_name":"pathfindersar","in_reply_to_status_id":1908177805,"id":1908237401,"source":"TweetDeck<\/a>"} -{"truncated":false,"text":"\u201cEnquanto nos derem ao menos 1% de chance, seguiremos lutando. E venceremos! Esse \u00e9 o verdadeiro e \u00fanico Clube da F\u00e9! Vai S\u00e3o Paulo!\u201d","created_at":"Mon May 25 01:59:53 +0000 2009","in_reply_to_user_id":null,"favorited":false,"user":{"notifications":null,"statuses_count":9,"favourites_count":0,"description":"","screen_name":"Renan_Tri","following":null,"utc_offset":-14400,"created_at":"Sat Apr 04 02:36:48 +0000 2009","profile_link_color":"0084B4","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/7448138\/65465040.jpg","profile_sidebar_fill_color":"DDFFCC","protected":false,"location":"","name":"Renan Lopes Leite","profile_sidebar_border_color":"BDDCAD","profile_background_tile":false,"url":null,"time_zone":"Santiago","followers_count":8,"profile_background_color":"9AE4E8","friends_count":29,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/120928824\/Apr22112_normal.JPG","id":28720775,"profile_text_color":"333333"},"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908237502,"source":"web"} -{"truncated":false,"text":"@beckmermaid http:\/\/twitpic.com\/5w9k9 - That's a damn shame.","created_at":"Mon May 25 01:59:53 +0000 2009","in_reply_to_user_id":13530922,"favorited":false,"user":{"notifications":null,"statuses_count":1059,"favourites_count":0,"description":"Bon vivant, raconteur, clusterfuck operator, wang dang doodler.","screen_name":"scearley","following":null,"utc_offset":-28800,"created_at":"Sat Jun 02 04:57:41 +0000 2007","profile_link_color":"2A5E0A","profile_background_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_background_images\/7066002\/darkblue.gif","profile_sidebar_fill_color":"a7d7af","protected":false,"location":"Various areas outside Seattle","name":"Luscious Dick","profile_sidebar_border_color":"60AC34","profile_background_tile":false,"url":"http:\/\/scearley.livejournal.com","time_zone":"Pacific Time (US & Canada)","followers_count":84,"profile_background_color":"c47D3b","friends_count":67,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/114968858\/144736_normal.gif","id":6516702,"profile_text_color":"39375D"},"in_reply_to_screen_name":"beckmermaid","in_reply_to_status_id":null,"id":1908237501,"source":"TwitPic<\/a>"} -{"text":"#humpthestump #humpthestump #humpthestump","created_at":"Mon May 25 01:59:53 +0000 2009","truncated":false,"in_reply_to_user_id":null,"user":{"profile_background_color":"9ae4e8","description":null,"screen_name":"spamzlot","following":null,"utc_offset":null,"created_at":"Mon May 25 01:54:06 +0000 2009","friends_count":0,"profile_text_color":"000000","notifications":null,"statuses_count":123,"favourites_count":0,"protected":false,"profile_link_color":"0000ff","location":null,"name":"hjufykitudkut","profile_background_image_url":"http:\/\/static.twitter.com\/images\/themes\/theme1\/bg.gif","profile_sidebar_fill_color":"e0ff92","url":null,"profile_sidebar_border_color":"87bc44","profile_background_tile":false,"profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","id":42326509,"time_zone":null,"followers_count":0},"favorited":false,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"id":1908237503,"source":"web"} diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/subjects/unicode.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/subjects/unicode.json deleted file mode 100755 index dd890ad..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/benchmark/subjects/unicode.json +++ /dev/null @@ -1 +0,0 @@ -{"results":[{"text":"#ruby \u732e\u672c\u30ad\u30bf\u30fc\u30fc\u30fc\u30fc\u30fc\u30fc\uff08\u309c\u2200\u309c\uff09\u30fc\u30fc\u30fc\u30fc\u30fc\u30fc\uff01\uff01 http:\/\/www.amazon.co.jp\/gp\/product\/4863540221","to_user_id":null,"from_user":"rubikitch","id":1843394737,"from_user_id":847295,"iso_language_code":"ja","source":"<a href="http:\/\/www.misuzilla.org\/dist\/net\/twitterircgateway\/">TwitterIrcGateway<\/a>","profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","created_at":"Tue, 19 May 2009 03:12:47 +0000"},{"text":"Ruby on Rails\u3068CakePHP\u3001\u3069\u3063\u3061\u3067\u88fd\u9020\u3057\u3088\u3046\u304b\u3057\u3089","to_user_id":null,"from_user":"takkada","id":1842694220,"from_user_id":412519,"iso_language_code":"ja","source":"<a href="http:\/\/twitterfox.net\/">TwitterFox<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/16301882\/62305_4124481745_normal.jpg","created_at":"Tue, 19 May 2009 02:00:08 +0000"},{"text":"Ruby on Rails \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306f\u30fc\u3058\u307e\u30fc\u308b\u3088\u30fc","to_user_id":null,"from_user":"Tomohiro","id":1842375120,"from_user_id":38704,"iso_language_code":"ja","source":"<a href="http:\/\/www.misuzilla.org\/dist\/net\/twitterircgateway\/">TwitterIrcGateway<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/20970892\/578576_3772887925_normal.jpg","created_at":"Tue, 19 May 2009 01:27:18 +0000"},{"text":"ruby winole.rb\u3067\u547c\u3073\u51fa\u3057\u305f\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u30e1\u30e2\u30ea\u304c\u9069\u5207\u306b\u958b\u653e\u3055\u308c\u3066\u306a\u304b\u3063\u305f\u3002","to_user_id":null,"from_user":"tomofusa","id":1841955169,"from_user_id":35354,"iso_language_code":"ja","source":"<a href="http:\/\/cheebow.info\/chemt\/archives\/2007\/04\/twitterwindowst.html">Twit<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/18213412\/fusa2.0_about53_normal.png","created_at":"Tue, 19 May 2009 00:43:20 +0000"},{"text":"Ruby HTTP\u4e26\u5217\u3092\u51e6\u7406\u3092\u9ad8\u901f\u5316\u3001"Typhoeus"\u767b\u5834 | \u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba | \u30de\u30a4\u30b3\u30df\u30b8\u30e3\u30fc\u30ca\u30eb http:\/\/ff.im\/-31cez","to_user_id":null,"from_user":"MyGReaderFeed","id":1841206557,"from_user_id":11923042,"iso_language_code":"ja","source":"<a href="http:\/\/friendfeed.com\/">FriendFeed<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/141487706\/3379573163_e79dab7511_normal.bmp","created_at":"Mon, 18 May 2009 23:22:26 +0000"},{"text":"\u3044\u305a\u308c\u306b\u3057\u3066\u3082\u3069\u3053\u304b\u306b Ruby 1.9.1 \u74b0\u5883\u306f\u4f5c\u3089\u306a\u3044\u3068\u30c0\u30e1\u304b\u306a\u3041\u3002Debian lenny \u4efb\u305b\u3060\u3068 1.9.0 \u3057\u304b\u8a66\u305b\u306a\u3044\u3063\u307d\u3044\u3057\u3002","to_user_id":null,"from_user":"wtnabe","id":1840166013,"from_user_id":32040,"iso_language_code":"ja","source":"<a href="http:\/\/www.misuzilla.org\/dist\/net\/twitterircgateway\/">TwitterIrcGateway<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/59828670\/200805-wtnabe-film_normal.png","created_at":"Mon, 18 May 2009 21:26:17 +0000"},{"text":"Ruby 1.9 \u3067\u306f URI#decode \u3060\u3051\u3058\u3083\u610f\u5473\u304c\u306a\u3044\u306e\u304b\u306a\uff1f \u3053\u306e\u8fba\u304b\u3089\u5206\u304b\u3089\u306a\u304f\u306a\u3063\u3066\u304f\u308b\u306a\u3002","to_user_id":null,"from_user":"wtnabe","id":1839967007,"from_user_id":32040,"iso_language_code":"ja","source":"<a href="http:\/\/www.misuzilla.org\/dist\/net\/twitterircgateway\/">TwitterIrcGateway<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/59828670\/200805-wtnabe-film_normal.png","created_at":"Mon, 18 May 2009 21:06:06 +0000"},{"text":"Star Ruby \u3067\u30d5\u30ec\u30fc\u30e0\u30b9\u30ad\u30c3\u30d7\u304c\u5b9f\u88c5\u3057\u306b\u304f\u3044\u7406\u7531\u306e\u3072\u3068\u3064\u306b\u3001\u30b9\u30af\u30ea\u30fc\u30f3\u3078\u306e\u63cf\u753b\u304c\u9045\u5ef6\u3067\u304d\u306a\u3044\u3068\u3044\u3046\u306e\u304c\u3042\u308b\u3002 Texture#[] \u306a\u3069\u3067\u30d4\u30af\u30bb\u30eb\u306e\u5024\u3092\u8aad\u307f\u53d6\u3089\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u305f\u3081\u3002\u8aad\u307f\u53d6\u3089\u308c\u308b\u30ae\u30ea\u30ae\u30ea\u307e\u3067\u9045\u5ef6\u3059\u308b\u306e\u3082\u30a2\u30ea\u3060\u304c\u3001\u5b9f\u88c5\u306f\u9762\u5012\u3067\u3042\u308b\u3002","to_user_id":null,"from_user":"hajimehoshi","id":1837784833,"from_user_id":7543,"iso_language_code":"ja","source":"<a href="http:\/\/twitter.com\/">web<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/14446892\/michael_normal.jpg","created_at":"Mon, 18 May 2009 17:21:16 +0000"},{"text":"ruby-gem\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u3001rails\u306b\u30c1\u30e3\u30ec\u30f3\u30b8","to_user_id":null,"from_user":"tom_a","id":1837459653,"from_user_id":366098,"iso_language_code":"ja","source":"<a href="http:\/\/twitterfox.net\/">TwitterFox<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/16661182\/DSC02701_normal.jpg","created_at":"Mon, 18 May 2009 16:46:36 +0000"},{"text":"@saronpasu \u4e2d\u8eab\u306b\u30a2\u30af\u30bb\u30b9\u3057\u306b\u304f\u3044\u3057\u3001\u4f55\u3088\u308a\u4e0d\u5b89\u5b9a\u3059\u304e\u3067\u3059\u306d\u2026\u4f8b\u5916\u3063\u3066\u30ec\u30d9\u30eb\u3058\u3083\u306a\u304f\u3066 ruby \u5dfb\u304d\u8fbc\u3093\u3067\u843d\u3061\u308b\u306e\u3067\u2026","to_user_id":28082,"to_user":"saronpasu","from_user":"negaton","id":1836710607,"from_user_id":5893,"iso_language_code":"ja","source":"<a href="http:\/\/cheebow.info\/chemt\/archives\/2007\/04\/twitterwindowst.html">Twit<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/35934732\/DSC00338_icon_normal.jpg","created_at":"Mon, 18 May 2009 15:28:25 +0000"},{"text":"\u6628\u65e5 CaboCha-Ruby \u306e token \u306e surface \u3092\u53e9\u3044\u305f\u3089\u843d\u3061\u305f\u306e\u306b\u4eca\u65e5\u306f\u5168\u304f\u540c\u3058\u30b3\u30fc\u30c9\u52d5\u304b\u3057\u3066\u3066\u843d\u3061\u306a\u3044\u3068\u304b\u306a\u3093\u306a\u306e\u2026","to_user_id":null,"from_user":"negaton","id":1836267822,"from_user_id":5893,"iso_language_code":"ja","source":"<a href="http:\/\/cheebow.info\/chemt\/archives\/2007\/04\/twitterwindowst.html">Twit<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/35934732\/DSC00338_icon_normal.jpg","created_at":"Mon, 18 May 2009 14:41:26 +0000"},{"text":"ruby.snippets \u3092\u773a\u3081\u3066\u307f\u3066\u3001\u3053\u308c\u306f\u81ea\u5206\u304c\u4f7f\u3044\u3053\u306a\u305b\u308b\u3082\u306e\u3067\u306f\u306a\u3044\u3068\u308f\u304b\u3063\u305f","to_user_id":null,"from_user":"ursm","id":1835699306,"from_user_id":41919,"iso_language_code":"ja","source":"<a href="http:\/\/www.nambu.com">Nambu<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/28792412\/1153147983506_normal.jpg","created_at":"Mon, 18 May 2009 13:33:59 +0000"},{"text":"\u3068\u3053\u308d\u3067\u3001PHP \u304b\u3089\u306f Ruby \u3063\u3066\u547c\u3079\u308b\u306e\uff1f","to_user_id":null,"from_user":"nov","id":1835354604,"from_user_id":76705,"iso_language_code":"ja","source":"<a href="http:\/\/twitterfon.net\/">TwitterFon<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/60572614\/nov_normal.gif","created_at":"Mon, 18 May 2009 12:47:52 +0000"},{"text":"\u3067\u304d\u3042\u304c\u3063\u305f\u3053\u308d shindig ruby ver. \u51fa\u3066\u305f\u308a\u3057\u305f\u3089\u6ce3\u304f\u3002","to_user_id":null,"from_user":"nov","id":1835155373,"from_user_id":76705,"iso_language_code":"ja","source":"<a href="http:\/\/twitterfon.net\/">TwitterFon<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/60572614\/nov_normal.gif","created_at":"Mon, 18 May 2009 12:17:17 +0000"},{"text":"@papiron ruby-dev\u3067ruby1.9\u306bsqlite\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u6a19\u6e96\u6dfb\u4ed8\u3057\u3088\u3046\u3068\u3044\u3046\u8b70\u8ad6\u304c\u3055\u308c\u3066\u307e\u3059\u3002http:\/\/bit.ly\/Limi9","to_user_id":10226526,"to_user":"papiron","from_user":"taigou","id":1834625775,"from_user_id":3915244,"iso_language_code":"ja","source":"<a href="http:\/\/twitterfox.net\/">TwitterFox<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/95583044\/me_normal.png","created_at":"Mon, 18 May 2009 10:38:40 +0000"}],"since_id":1769782474,"max_id":1843394737,"refresh_url":"?since_id=1843394737&q=ruby","results_per_page":15,"next_page":"?page=2&max_id=1843394737&lang=ja&q=ruby","warning":"adjusted since_id, it was older than allowedsince_id removed for pagination.","completed_in":0.052502,"page":1,"query":"ruby"} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/encoding/chunked_encoding.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/encoding/chunked_encoding.rb deleted file mode 100644 index 2a40d94..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/encoding/chunked_encoding.rb +++ /dev/null @@ -1,27 +0,0 @@ -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../..') -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../../lib') - -require 'yajl' - -obj = { - :a_test => "of encoding in one pass" * 512, - :a_test2 => "of encoding in one pass" * 512, - :a_test3 => "of encoding in one pass" * 512, - :a_test4 => "of encoding in one pass" * 512, - :which_will => "simply return a string when finished" * 512, - :which_will2 => "simply return a string when finished" * 512, - :which_will3 => "simply return a string when finished" * 512, - :which_will4 => "simply return a string when finished" * 512, - :as_easy_as => 123 -} - -chunks = 0 -total_size = 0 - -Yajl::Encoder.encode(obj) do |chunk| - chunks += 1 - total_size += chunk.size - STDOUT << chunk -end - -puts "\n\nEncoder generated #{total_size} bytes of data, in #{chunks} chunks" \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/encoding/one_shot.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/encoding/one_shot.rb deleted file mode 100644 index 717c83c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/encoding/one_shot.rb +++ /dev/null @@ -1,13 +0,0 @@ -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../..') -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../../lib') - -require 'yajl' - -obj = { - :a_test => "of encoding in one pass", - :which_will => "simply return a string when finished", - :as_easy_as => 123 -} - -str = Yajl::Encoder.encode(obj) -puts str \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/encoding/to_an_io.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/encoding/to_an_io.rb deleted file mode 100644 index 05dd4e4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/encoding/to_an_io.rb +++ /dev/null @@ -1,12 +0,0 @@ -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../..') -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../../lib') - -require 'yajl' - -obj = { - :a_test => "of encoding directly to an IO stream", - :which_will => "simply return a string when finished", - :as_easy_as => 123 -} - -Yajl::Encoder.encode(obj, STDOUT) \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/http/twitter_search_api.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/http/twitter_search_api.rb deleted file mode 100644 index c098043..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/http/twitter_search_api.rb +++ /dev/null @@ -1,12 +0,0 @@ -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../..') -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../../lib') - -require 'yajl/http_stream' -require 'uri' - -unless keywords = ARGV[0] - puts "\nUsage: ruby examples/http/twitter_search_api.rb keyword\n\n" - exit(0) -end - -puts Yajl::HttpStream.get("http://search.twitter.com/search.json?q=#{keywords}").inspect \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/http/twitter_stream_api.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/http/twitter_stream_api.rb deleted file mode 100644 index e7c70ee..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/http/twitter_stream_api.rb +++ /dev/null @@ -1,26 +0,0 @@ -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../..') -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../../lib') - -require 'yajl/gzip' -require 'yajl/deflate' -require 'yajl/http_stream' -require 'uri' - -unless (username = ARGV[0]) && (password = ARGV[1]) - puts "\nUsage: ruby examples/http/twitter_stream_api.rb username password\n\n" - exit(0) -end -captured = 0 -uri = URI.parse("http://#{username}:#{password}@stream.twitter.com/1/statuses/sample.json") - -trap('INT') { - puts "\n\nCaptured #{captured} objects from the stream" - puts "CTRL+C caught, later!" - exit(0) -} - -Yajl::HttpStream.get(uri, :symbolize_keys => true) do |hash| - STDOUT.putc '.' - STDOUT.flush - captured += 1 -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/parsing/from_file.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/parsing/from_file.rb deleted file mode 100644 index ec7ee89..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/parsing/from_file.rb +++ /dev/null @@ -1,14 +0,0 @@ -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../..') -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../../lib') - -require 'yajl' - -unless file = ARGV[0] - puts "\nUsage: ruby examples/from_file.rb benchmark/subjects/item.json\n\n" - exit(0) -end - -json = File.new(file, 'r') - -hash = Yajl::Parser.parse(json) -puts hash.inspect \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/parsing/from_stdin.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/parsing/from_stdin.rb deleted file mode 100644 index dbe88b4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/parsing/from_stdin.rb +++ /dev/null @@ -1,9 +0,0 @@ -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../..') -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../../lib') - -require 'yajl' - -# Usage: cat benchmark/subjects/item.json | ruby examples/from_stdin.rb - -hash = Yajl::Parser.parse(STDIN) -puts hash.inspect \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/parsing/from_string.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/parsing/from_string.rb deleted file mode 100644 index 59c5c72..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/examples/parsing/from_string.rb +++ /dev/null @@ -1,13 +0,0 @@ -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../..') -$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../../lib') - -require 'yajl' -require 'stringio' - -unless string = ARGV[0] - puts "\nUsage: ruby examples/from_string.rb '{\"foo\": 1145}'\n\n" - exit(0) -end - -hash = Yajl::Parser.parse(string) -puts hash.inspect \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/.RUBYARCHDIR.-.yajl.time b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/.RUBYARCHDIR.-.yajl.time deleted file mode 100644 index e69de29..0000000 diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/api/yajl_common.h b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/api/yajl_common.h deleted file mode 100644 index dbd84e4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/api/yajl_common.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright 2010, Lloyd Hilaiel. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. Neither the name of Lloyd Hilaiel nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __YAJL_COMMON_H__ -#define __YAJL_COMMON_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#define YAJL_MAX_DEPTH 256 - -/* msft dll export gunk. To build a DLL on windows, you - * must define WIN32, YAJL_SHARED, and YAJL_BUILD. To use a shared - * DLL, you must define YAJL_SHARED and WIN32 */ -#if defined(WIN32) && defined(YAJL_SHARED) -# ifdef YAJL_BUILD -# define YAJL_API __declspec(dllexport) -# else -# define YAJL_API __declspec(dllimport) -# endif -#else -# if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 303 -# define YAJL_API __attribute__ ((visibility("hidden"))) -# else -# define YAJL_API -# endif -#endif - -/** pointer to a malloc function, supporting client overriding memory - * allocation routines */ -typedef void * (*yajl_malloc_func)(void *ctx, unsigned int sz); - -/** pointer to a free function, supporting client overriding memory - * allocation routines */ -typedef void (*yajl_free_func)(void *ctx, void * ptr); - -/** pointer to a realloc function which can resize an allocation. */ -typedef void * (*yajl_realloc_func)(void *ctx, void * ptr, unsigned int sz); - -/** A structure which can be passed to yajl_*_alloc routines to allow the - * client to specify memory allocation functions to be used. */ -typedef struct -{ - /** pointer to a function that can allocate uninitialized memory */ - yajl_malloc_func malloc; - /** pointer to a function that can resize memory allocations */ - yajl_realloc_func realloc; - /** pointer to a function that can free memory allocated using - * reallocFunction or mallocFunction */ - yajl_free_func free; - /** a context pointer that will be passed to above allocation routines */ - void * ctx; -} yajl_alloc_funcs; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/api/yajl_gen.h b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/api/yajl_gen.h deleted file mode 100644 index 032507e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/api/yajl_gen.h +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright 2010, Lloyd Hilaiel. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. Neither the name of Lloyd Hilaiel nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * \file yajl_gen.h - * Interface to YAJL's JSON generation facilities. - */ - -#include "api/yajl_common.h" - -#ifndef __YAJL_GEN_H__ -#define __YAJL_GEN_H__ - -#ifdef __cplusplus -extern "C" { -#endif - /** generator status codes */ - typedef enum { - /** no error */ - yajl_gen_status_ok = 0, - /** at a point where a map key is generated, a function other than - * yajl_gen_string was called */ - yajl_gen_keys_must_be_strings, - /** YAJL's maximum generation depth was exceeded. see - * YAJL_MAX_DEPTH */ - yajl_max_depth_exceeded, - /** A generator function (yajl_gen_XXX) was called while in an error - * state */ - yajl_gen_in_error_state, - /** A complete JSON document has been generated */ - yajl_gen_generation_complete, - /** yajl_gen_double was passed an invalid floating point value - * (infinity or NaN). */ - yajl_gen_invalid_number, - /** A print callback was passed in, so there is no internal - * buffer to get from */ - yajl_gen_no_buf - } yajl_gen_status; - - /** an opaque handle to a generator */ - typedef struct yajl_gen_t * yajl_gen; - - /** a callback used for "printing" the results. */ - typedef void (*yajl_print_t)(void * ctx, - const char * str, - unsigned int len); - - /** configuration structure for the generator */ - typedef struct { - /** generate indented (beautiful) output */ - unsigned int beautify; - /** an opportunity to define an indent string. such as \\t or - * some number of spaces. default is four spaces ' '. This - * member is only relevant when beautify is true */ - const char * indentString; - /** escape the '/' character */ - unsigned int htmlSafe; - } yajl_gen_config; - - /** allocate a generator handle - * \param config a pointer to a structure containing parameters which - * configure the behavior of the json generator - * \param allocFuncs an optional pointer to a structure which allows - * the client to overide the memory allocation - * used by yajl. May be NULL, in which case - * malloc/free/realloc will be used. - * - * \returns an allocated handle on success, NULL on failure (bad params) - */ - YAJL_API yajl_gen yajl_gen_alloc(const yajl_gen_config * config, - const yajl_alloc_funcs * allocFuncs); - - /** allocate a generator handle that will print to the specified - * callback rather than storing the results in an internal buffer. - * \param callback a pointer to a printer function. May be NULL - * in which case, the results will be store in an - * internal buffer. - * \param config a pointer to a structure containing parameters - * which configure the behavior of the json - * generator. - * \param allocFuncs an optional pointer to a structure which allows - * the client to overide the memory allocation - * used by yajl. May be NULL, in which case - * malloc/free/realloc will be used. - * \param ctx a context pointer that will be passed to the - * printer callback. - * - * \returns an allocated handle on success, NULL on failure (bad params) - */ - YAJL_API yajl_gen yajl_gen_alloc2(const yajl_print_t callback, - const yajl_gen_config * config, - const yajl_alloc_funcs * allocFuncs, - void * ctx); - - /** free a generator handle */ - YAJL_API void yajl_gen_free(yajl_gen handle); - - YAJL_API yajl_gen_status yajl_gen_integer(yajl_gen hand, long int number); - /** generate a floating point number. number may not be infinity or - * NaN, as these have no representation in JSON. In these cases the - * generator will return 'yajl_gen_invalid_number' */ - YAJL_API yajl_gen_status yajl_gen_double(yajl_gen hand, double number); - YAJL_API yajl_gen_status yajl_gen_number(yajl_gen hand, - const char * num, - unsigned int len); - YAJL_API yajl_gen_status yajl_gen_string(yajl_gen hand, - const unsigned char * str, - unsigned int len); - YAJL_API yajl_gen_status yajl_gen_null(yajl_gen hand); - YAJL_API yajl_gen_status yajl_gen_bool(yajl_gen hand, int boolean); - YAJL_API yajl_gen_status yajl_gen_map_open(yajl_gen hand); - YAJL_API yajl_gen_status yajl_gen_map_close(yajl_gen hand); - YAJL_API yajl_gen_status yajl_gen_array_open(yajl_gen hand); - YAJL_API yajl_gen_status yajl_gen_array_close(yajl_gen hand); - - /** access the null terminated generator buffer. If incrementally - * outputing JSON, one should call yajl_gen_clear to clear the - * buffer. This allows stream generation. */ - YAJL_API yajl_gen_status yajl_gen_get_buf(yajl_gen hand, - const unsigned char ** buf, - unsigned int * len); - - /** clear yajl's output buffer, but maintain all internal generation - * state. This function will not "reset" the generator state, and is - * intended to enable incremental JSON outputing. */ - YAJL_API void yajl_gen_clear(yajl_gen hand); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/api/yajl_parse.h b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/api/yajl_parse.h deleted file mode 100644 index b65f54f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/api/yajl_parse.h +++ /dev/null @@ -1,196 +0,0 @@ -/* - * Copyright 2010, Lloyd Hilaiel. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. Neither the name of Lloyd Hilaiel nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * \file yajl_parse.h - * Interface to YAJL's JSON parsing facilities. - */ - -#include "api/yajl_common.h" - -#ifndef __YAJL_PARSE_H__ -#define __YAJL_PARSE_H__ - -#ifdef __cplusplus -extern "C" { -#endif - /** error codes returned from this interface */ - typedef enum { - /** no error was encountered */ - yajl_status_ok, - /** a client callback returned zero, stopping the parse */ - yajl_status_client_canceled, - /** The parse cannot yet complete because more json input text - * is required, call yajl_parse with the next buffer of input text. - * (pertinent only when stream parsing) */ - yajl_status_insufficient_data, - /** An error occured during the parse. Call yajl_get_error for - * more information about the encountered error */ - yajl_status_error - } yajl_status; - - /** attain a human readable, english, string for an error */ - YAJL_API const char * yajl_status_to_string(yajl_status code); - - /** an opaque handle to a parser */ - typedef struct yajl_handle_t * yajl_handle; - - /** yajl is an event driven parser. this means as json elements are - * parsed, you are called back to do something with the data. The - * functions in this table indicate the various events for which - * you will be called back. Each callback accepts a "context" - * pointer, this is a void * that is passed into the yajl_parse - * function which the client code may use to pass around context. - * - * All callbacks return an integer. If non-zero, the parse will - * continue. If zero, the parse will be canceled and - * yajl_status_client_canceled will be returned from the parse. - * - * Note about handling of numbers: - * yajl will only convert numbers that can be represented in a double - * or a long int. All other numbers will be passed to the client - * in string form using the yajl_number callback. Furthermore, if - * yajl_number is not NULL, it will always be used to return numbers, - * that is yajl_integer and yajl_double will be ignored. If - * yajl_number is NULL but one of yajl_integer or yajl_double are - * defined, parsing of a number larger than is representable - * in a double or long int will result in a parse error. - */ - typedef struct { - int (* yajl_null)(void * ctx); - int (* yajl_boolean)(void * ctx, int boolVal); - int (* yajl_integer)(void * ctx, long integerVal); - int (* yajl_double)(void * ctx, double doubleVal); - /** A callback which passes the string representation of the number - * back to the client. Will be used for all numbers when present */ - int (* yajl_number)(void * ctx, const char * numberVal, - unsigned int numberLen); - - /** strings are returned as pointers into the JSON text when, - * possible, as a result, they are _not_ null padded */ - int (* yajl_string)(void * ctx, const unsigned char * stringVal, - unsigned int stringLen); - - int (* yajl_start_map)(void * ctx); - int (* yajl_map_key)(void * ctx, const unsigned char * key, - unsigned int stringLen); - int (* yajl_end_map)(void * ctx); - - int (* yajl_start_array)(void * ctx); - int (* yajl_end_array)(void * ctx); - } yajl_callbacks; - - /** configuration structure for the generator */ - typedef struct { - /** if nonzero, javascript style comments will be allowed in - * the json input, both slash star and slash slash */ - unsigned int allowComments; - /** if nonzero, invalid UTF8 strings will cause a parse - * error */ - unsigned int checkUTF8; - } yajl_parser_config; - - /** allocate a parser handle - * \param callbacks a yajl callbacks structure specifying the - * functions to call when different JSON entities - * are encountered in the input text. May be NULL, - * which is only useful for validation. - * \param config configuration parameters for the parse. - * \param ctx a context pointer that will be passed to callbacks. - */ - YAJL_API yajl_handle yajl_alloc(const yajl_callbacks * callbacks, - const yajl_parser_config * config, - const yajl_alloc_funcs * allocFuncs, - void * ctx); - - /** allow resetting of the lexer without the need to realloc a new parser */ - YAJL_API void yajl_reset_parser(yajl_handle hand); - - /** free a parser handle */ - YAJL_API void yajl_free(yajl_handle handle); - - /** Parse some json! - * \param hand - a handle to the json parser allocated with yajl_alloc - * \param jsonText - a pointer to the UTF8 json text to be parsed - * \param jsonTextLength - the length, in bytes, of input text - */ - YAJL_API yajl_status yajl_parse(yajl_handle hand, - const unsigned char * jsonText, - unsigned int jsonTextLength); - - /** Parse any remaining buffered json. - * Since yajl is a stream-based parser, without an explicit end of - * input, yajl sometimes can't decide if content at the end of the - * stream is valid or not. For example, if "1" has been fed in, - * yajl can't know whether another digit is next or some character - * that would terminate the integer token. - * - * \param hand - a handle to the json parser allocated with yajl_alloc - */ - YAJL_API yajl_status yajl_parse_complete(yajl_handle hand); - - /** get an error string describing the state of the - * parse. - * - * If verbose is non-zero, the message will include the JSON - * text where the error occured, along with an arrow pointing to - * the specific char. - * - * \returns A dynamically allocated string will be returned which should - * be freed with yajl_free_error - */ - YAJL_API unsigned char * yajl_get_error(yajl_handle hand, int verbose, - const unsigned char * jsonText, - unsigned int jsonTextLength); - - /** - * get the amount of data consumed from the last chunk passed to YAJL. - * - * In the case of a successful parse this can help you understand if - * the entire buffer was consumed (which will allow you to handle - * "junk at end of input". - * - * In the event an error is encountered during parsing, this function - * affords the client a way to get the offset into the most recent - * chunk where the error occured. 0 will be returned if no error - * was encountered. - */ - YAJL_API unsigned int yajl_get_bytes_consumed(yajl_handle hand); - - /** free an error returned from yajl_get_error */ - YAJL_API void yajl_free_error(yajl_handle hand, unsigned char * str); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/api/yajl_version.h b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/api/yajl_version.h deleted file mode 100644 index c6a7a07..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/api/yajl_version.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef YAJL_VERSION_H_ -#define YAJL_VERSION_H_ - -#include "api/yajl_common.h" - -#define YAJL_MAJOR 1 -#define YAJL_MINOR 0 -#define YAJL_MICRO 12 - -#define YAJL_VERSION ((YAJL_MAJOR * 10000) + (YAJL_MINOR * 100) + YAJL_MICRO) - -#ifdef __cplusplus -extern "C" { -#endif - -extern int YAJL_API yajl_version(void); - -#ifdef __cplusplus -} -#endif - -#endif /* YAJL_VERSION_H_ */ - diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/extconf.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/extconf.rb deleted file mode 100644 index 2c38204..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/extconf.rb +++ /dev/null @@ -1,7 +0,0 @@ -require 'mkmf' -require 'rbconfig' - -$CFLAGS << ' -Wall -funroll-loops' -$CFLAGS << ' -Werror-implicit-function-declaration -Wextra -O0 -ggdb3' if ENV['DEBUG'] - -create_makefile('yajl/yajl') diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl.c b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl.c deleted file mode 100644 index 50bca44..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl.c +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright 2010, Lloyd Hilaiel. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. Neither the name of Lloyd Hilaiel nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include "api/yajl_parse.h" -#include "yajl_lex.h" -#include "yajl_parser.h" -#include "yajl_alloc.h" - -#include -#include -#include - -const char * -yajl_status_to_string(yajl_status stat) -{ - const char * statStr = "unknown"; - switch (stat) { - case yajl_status_ok: - statStr = "ok, no error"; - break; - case yajl_status_client_canceled: - statStr = "client canceled parse"; - break; - case yajl_status_insufficient_data: - statStr = "eof was met before the parse could complete"; - break; - case yajl_status_error: - statStr = "parse error"; - break; - } - return statStr; -} - -yajl_handle -yajl_alloc(const yajl_callbacks * callbacks, - const yajl_parser_config * config, - const yajl_alloc_funcs * afs, - void * ctx) -{ - unsigned int allowComments = 0; - unsigned int validateUTF8 = 0; - yajl_handle hand = NULL; - yajl_alloc_funcs afsBuffer; - - /* first order of business is to set up memory allocation routines */ - if (afs != NULL) { - if (afs->malloc == NULL || afs->realloc == NULL || afs->free == NULL) - { - return NULL; - } - } else { - yajl_set_default_alloc_funcs(&afsBuffer); - afs = &afsBuffer; - } - - hand = (yajl_handle) YA_MALLOC(afs, sizeof(struct yajl_handle_t)); - - /* copy in pointers to allocation routines */ - memcpy((void *) &(hand->alloc), (void *) afs, sizeof(yajl_alloc_funcs)); - - if (config != NULL) { - allowComments = config->allowComments; - validateUTF8 = config->checkUTF8; - } - - hand->callbacks = callbacks; - hand->ctx = ctx; - hand->lexer = yajl_lex_alloc(&(hand->alloc), allowComments, validateUTF8); - hand->bytesConsumed = 0; - hand->decodeBuf = yajl_buf_alloc(&(hand->alloc)); - yajl_bs_init(hand->stateStack, &(hand->alloc)); - - yajl_bs_push(hand->stateStack, yajl_state_start); - - return hand; -} - -void -yajl_reset_parser(yajl_handle hand) { - hand->lexer = yajl_lex_realloc(hand->lexer); -} - -void -yajl_free(yajl_handle handle) -{ - yajl_bs_free(handle->stateStack); - yajl_buf_free(handle->decodeBuf); - yajl_lex_free(handle->lexer); - YA_FREE(&(handle->alloc), handle); -} - -yajl_status -yajl_parse(yajl_handle hand, const unsigned char * jsonText, - unsigned int jsonTextLen) -{ - yajl_status status; - status = yajl_do_parse(hand, jsonText, jsonTextLen); - return status; -} - -yajl_status -yajl_parse_complete(yajl_handle hand) -{ - /* The particular case we want to handle is a trailing number. - * Further input consisting of digits could cause our interpretation - * of the number to change (buffered "1" but "2" comes in). - * A very simple approach to this is to inject whitespace to terminate - * any number in the lex buffer. - */ - return yajl_parse(hand, (const unsigned char *)" ", 1); -} - -unsigned char * -yajl_get_error(yajl_handle hand, int verbose, - const unsigned char * jsonText, unsigned int jsonTextLen) -{ - return yajl_render_error_string(hand, jsonText, jsonTextLen, verbose); -} - -unsigned int -yajl_get_bytes_consumed(yajl_handle hand) -{ - if (!hand) return 0; - else return hand->bytesConsumed; -} - - -void -yajl_free_error(yajl_handle hand, unsigned char * str) -{ - /* use memory allocation functions if set */ - YA_FREE(&(hand->alloc), str); -} - -/* XXX: add utility routines to parse from file */ diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_alloc.c b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_alloc.c deleted file mode 100644 index ccfb7c3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_alloc.c +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 2010, Lloyd Hilaiel. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. Neither the name of Lloyd Hilaiel nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * \file yajl_alloc.h - * default memory allocation routines for yajl which use malloc/realloc and - * free - */ - -#include "yajl_alloc.h" -#include - -static void * yajl_internal_malloc(void *ctx, unsigned int sz) -{ - return malloc(sz); -} - -static void * yajl_internal_realloc(void *ctx, void * previous, - unsigned int sz) -{ - return realloc(previous, sz); -} - -static void yajl_internal_free(void *ctx, void * ptr) -{ - free(ptr); -} - -void yajl_set_default_alloc_funcs(yajl_alloc_funcs * yaf) -{ - yaf->malloc = yajl_internal_malloc; - yaf->free = yajl_internal_free; - yaf->realloc = yajl_internal_realloc; - yaf->ctx = NULL; -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_alloc.h b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_alloc.h deleted file mode 100644 index da73b40..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_alloc.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2010, Lloyd Hilaiel. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. Neither the name of Lloyd Hilaiel nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * \file yajl_alloc.h - * default memory allocation routines for yajl which use malloc/realloc and - * free - */ - -#ifndef __YAJL_ALLOC_H__ -#define __YAJL_ALLOC_H__ - -#include "api/yajl_common.h" - -#define YA_MALLOC(afs, sz) (afs)->malloc((afs)->ctx, (sz)) -#define YA_FREE(afs, ptr) (afs)->free((afs)->ctx, (ptr)) -#define YA_REALLOC(afs, ptr, sz) (afs)->realloc((afs)->ctx, (ptr), (sz)) - -YAJL_API -void yajl_set_default_alloc_funcs(yajl_alloc_funcs * yaf); - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_buf.c b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_buf.c deleted file mode 100644 index 04e608a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_buf.c +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright 2010, Lloyd Hilaiel. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. Neither the name of Lloyd Hilaiel nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include "yajl_buf.h" - -#include -#include -#include - -#define YAJL_BUF_INIT_SIZE 2048 - -struct yajl_buf_t { - unsigned int len; - unsigned int used; - unsigned char * data; - yajl_alloc_funcs * alloc; -}; - -static -void yajl_buf_ensure_available(yajl_buf buf, unsigned int want) -{ - unsigned int need; - - assert(buf != NULL); - - /* first call */ - if (buf->data == NULL) { - buf->len = YAJL_BUF_INIT_SIZE; - buf->data = (unsigned char *) YA_MALLOC(buf->alloc, buf->len); - buf->data[0] = 0; - } - - need = buf->len; - - while (want >= (need - buf->used)) need <<= 1; - - if (need != buf->len) { - buf->data = (unsigned char *) YA_REALLOC(buf->alloc, buf->data, need); - buf->len = need; - } -} - -yajl_buf yajl_buf_alloc(yajl_alloc_funcs * alloc) -{ - yajl_buf b = YA_MALLOC(alloc, sizeof(struct yajl_buf_t)); - memset((void *) b, 0, sizeof(struct yajl_buf_t)); - b->alloc = alloc; - return b; -} - -void yajl_buf_free(yajl_buf buf) -{ - assert(buf != NULL); - if (buf->data) YA_FREE(buf->alloc, buf->data); - YA_FREE(buf->alloc, buf); -} - -void yajl_buf_append(yajl_buf buf, const void * data, unsigned int len) -{ - yajl_buf_ensure_available(buf, len); - if (len > 0) { - assert(data != NULL); - memcpy(buf->data + buf->used, data, len); - buf->used += len; - buf->data[buf->used] = 0; - } -} - -void yajl_buf_clear(yajl_buf buf) -{ - buf->used = 0; - if (buf->data) buf->data[buf->used] = 0; -} - -const unsigned char * yajl_buf_data(yajl_buf buf) -{ - return buf->data; -} - -unsigned int yajl_buf_len(yajl_buf buf) -{ - return buf->used; -} - -void -yajl_buf_truncate(yajl_buf buf, unsigned int len) -{ - assert(len <= buf->used); - buf->used = len; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_buf.h b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_buf.h deleted file mode 100644 index f97355b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_buf.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright 2010, Lloyd Hilaiel. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. Neither the name of Lloyd Hilaiel nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __YAJL_BUF_H__ -#define __YAJL_BUF_H__ - -#include "api/yajl_common.h" -#include "yajl_alloc.h" - -/* - * Implementation/performance notes. If this were moved to a header - * only implementation using #define's where possible we might be - * able to sqeeze a little performance out of the guy by killing function - * call overhead. YMMV. - */ - -/** - * yajl_buf is a buffer with exponential growth. the buffer ensures that - * you are always null padded. - */ -typedef struct yajl_buf_t * yajl_buf; - -/* allocate a new buffer */ -YAJL_API -yajl_buf yajl_buf_alloc(yajl_alloc_funcs * alloc); - -/* free the buffer */ -YAJL_API -void yajl_buf_free(yajl_buf buf); - -/* append a number of bytes to the buffer */ -YAJL_API -void yajl_buf_append(yajl_buf buf, const void * data, unsigned int len); - -/* empty the buffer */ -YAJL_API -void yajl_buf_clear(yajl_buf buf); - -/* get a pointer to the beginning of the buffer */ -YAJL_API -const unsigned char * yajl_buf_data(yajl_buf buf); - -/* get the length of the buffer */ -YAJL_API -unsigned int yajl_buf_len(yajl_buf buf); - -/* truncate the buffer */ -YAJL_API -void yajl_buf_truncate(yajl_buf buf, unsigned int len); - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_bytestack.h b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_bytestack.h deleted file mode 100644 index 872ede1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_bytestack.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright 2010, Lloyd Hilaiel. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. Neither the name of Lloyd Hilaiel nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -/* - * A header only implementation of a simple stack of bytes, used in YAJL - * to maintain parse state. - */ - -#ifndef __YAJL_BYTESTACK_H__ -#define __YAJL_BYTESTACK_H__ - -#include "api/yajl_common.h" - -#define YAJL_BS_INC 128 - -typedef struct yajl_bytestack_t -{ - unsigned char * stack; - unsigned int size; - unsigned int used; - yajl_alloc_funcs * yaf; -} yajl_bytestack; - -/* initialize a bytestack */ -#define yajl_bs_init(obs, _yaf) { \ - (obs).stack = NULL; \ - (obs).size = 0; \ - (obs).used = 0; \ - (obs).yaf = (_yaf); \ - } \ - - -/* initialize a bytestack */ -#define yajl_bs_free(obs) \ - if ((obs).stack) (obs).yaf->free((obs).yaf->ctx, (obs).stack); - -#define yajl_bs_current(obs) \ - (assert((obs).used > 0), (obs).stack[(obs).used - 1]) - -#define yajl_bs_push(obs, byte) { \ - if (((obs).size - (obs).used) == 0) { \ - (obs).size += YAJL_BS_INC; \ - (obs).stack = (obs).yaf->realloc((obs).yaf->ctx,\ - (void *) (obs).stack, (obs).size);\ - } \ - (obs).stack[((obs).used)++] = (byte); \ -} - -/* removes the top item of the stack, returns nothing */ -#define yajl_bs_pop(obs) { ((obs).used)--; } - -#define yajl_bs_set(obs, byte) \ - (obs).stack[((obs).used) - 1] = (byte); - - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_encode.c b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_encode.c deleted file mode 100644 index 716ddde..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_encode.c +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright 2010, Lloyd Hilaiel. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. Neither the name of Lloyd Hilaiel nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include "yajl_encode.h" - -#include -#include -#include -#include - -static void CharToHex(unsigned char c, char * hexBuf) -{ - const char * hexchar = "0123456789ABCDEF"; - hexBuf[0] = hexchar[c >> 4]; - hexBuf[1] = hexchar[c & 0x0F]; -} - -void -yajl_string_encode(yajl_buf buf, const unsigned char * str, - unsigned int len, unsigned int htmlSafe) -{ - yajl_string_encode2((const yajl_print_t) &yajl_buf_append, buf, str, len, htmlSafe); -} - -void -yajl_string_encode2(const yajl_print_t print, - void * ctx, - const unsigned char * str, - unsigned int len, - unsigned int htmlSafe) -{ - unsigned int beg = 0; - unsigned int end = 0; - char hexBuf[7]; - hexBuf[0] = '\\'; hexBuf[1] = 'u'; hexBuf[2] = '0'; hexBuf[3] = '0'; - hexBuf[6] = 0; - - while (end < len) { - const char * escaped = NULL; - switch (str[end]) { - case '\r': escaped = "\\r"; break; - case '\n': escaped = "\\n"; break; - case '\\': escaped = "\\\\"; break; - /* case '/': escaped = "\\/"; break; */ - case '"': escaped = "\\\""; break; - case '\f': escaped = "\\f"; break; - case '\b': escaped = "\\b"; break; - case '\t': escaped = "\\t"; break; - case '/': - if (htmlSafe) { - escaped = "\\/"; - } - break; - default: - if ((unsigned char) str[end] < 32) { - CharToHex(str[end], hexBuf + 4); - escaped = hexBuf; - } - break; - } - if (escaped != NULL) { - print(ctx, (const char *) (str + beg), end - beg); - print(ctx, escaped, (unsigned int)strlen(escaped)); - beg = ++end; - } else { - ++end; - } - } - print(ctx, (const char *) (str + beg), end - beg); -} - -static void hexToDigit(unsigned int * val, const unsigned char * hex) -{ - unsigned int i; - for (i=0;i<4;i++) { - unsigned char c = hex[i]; - if (c >= 'A') c = (c & ~0x20) - 7; - c -= '0'; - assert(!(c & 0xF0)); - *val = (*val << 4) | c; - } -} - -static void Utf32toUtf8(unsigned int codepoint, char * utf8Buf) -{ - if (codepoint < 0x80) { - utf8Buf[0] = (char) codepoint; - utf8Buf[1] = 0; - } else if (codepoint < 0x0800) { - utf8Buf[0] = (char) ((codepoint >> 6) | 0xC0); - utf8Buf[1] = (char) ((codepoint & 0x3F) | 0x80); - utf8Buf[2] = 0; - } else if (codepoint < 0x10000) { - utf8Buf[0] = (char) ((codepoint >> 12) | 0xE0); - utf8Buf[1] = (char) (((codepoint >> 6) & 0x3F) | 0x80); - utf8Buf[2] = (char) ((codepoint & 0x3F) | 0x80); - utf8Buf[3] = 0; - } else if (codepoint < 0x200000) { - utf8Buf[0] =(char)((codepoint >> 18) | 0xF0); - utf8Buf[1] =(char)(((codepoint >> 12) & 0x3F) | 0x80); - utf8Buf[2] =(char)(((codepoint >> 6) & 0x3F) | 0x80); - utf8Buf[3] =(char)((codepoint & 0x3F) | 0x80); - utf8Buf[4] = 0; - } else { - utf8Buf[0] = '?'; - utf8Buf[1] = 0; - } -} - -void yajl_string_decode(yajl_buf buf, const unsigned char * str, - unsigned int len) -{ - unsigned int beg = 0; - unsigned int end = 0; - - while (end < len) { - if (str[end] == '\\') { - char utf8Buf[5]; - const char * unescaped = "?"; - yajl_buf_append(buf, str + beg, end - beg); - switch (str[++end]) { - case 'r': unescaped = "\r"; break; - case 'n': unescaped = "\n"; break; - case '\\': unescaped = "\\"; break; - case '/': unescaped = "/"; break; - case '"': unescaped = "\""; break; - case 'f': unescaped = "\f"; break; - case 'b': unescaped = "\b"; break; - case 't': unescaped = "\t"; break; - case 'u': { - unsigned int codepoint = 0; - hexToDigit(&codepoint, str + ++end); - end+=3; - /* check if this is a surrogate */ - if ((codepoint & 0xFC00) == 0xD800) { - if (end + 2 < len && str[end + 1] == '\\' && str[end + 2] == 'u') { - end++; - unsigned int surrogate = 0; - hexToDigit(&surrogate, str + end + 2); - codepoint = - (((codepoint & 0x3F) << 10) | - ((((codepoint >> 6) & 0xF) + 1) << 16) | - (surrogate & 0x3FF)); - end += 5; - } else { - unescaped = "?"; - break; - } - } - - Utf32toUtf8(codepoint, utf8Buf); - unescaped = utf8Buf; - - if (codepoint == 0) { - yajl_buf_append(buf, unescaped, 1); - beg = ++end; - continue; - } - - break; - } - default: - assert("this should never happen" == NULL); - } - yajl_buf_append(buf, unescaped, (unsigned int)strlen(unescaped)); - beg = ++end; - } else { - end++; - } - } - yajl_buf_append(buf, str + beg, end - beg); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_encode.h b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_encode.h deleted file mode 100644 index 9f3a8d3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_encode.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2010, Lloyd Hilaiel. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. Neither the name of Lloyd Hilaiel nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __YAJL_ENCODE_H__ -#define __YAJL_ENCODE_H__ - -#include "yajl_buf.h" -#include "api/yajl_gen.h" - -YAJL_API -void yajl_string_encode2(const yajl_print_t printer, - void * ctx, - const unsigned char * str, - unsigned int length, - unsigned int htmlSafe); - -YAJL_API -void yajl_string_encode(yajl_buf buf, const unsigned char * str, - unsigned int length, - unsigned int htmlSafe); - -YAJL_API -void yajl_string_decode(yajl_buf buf, const unsigned char * str, - unsigned int length); - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_ext.c b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_ext.c deleted file mode 100644 index 1023e2a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_ext.c +++ /dev/null @@ -1,941 +0,0 @@ -/* - * Copyright (c) 2008-2011 Brian Lopez - http://github.com/brianmario - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#include "yajl_ext.h" - -#define YAJL_RB_TO_JSON \ - VALUE rb_encoder, cls; \ - rb_scan_args(argc, argv, "01", &rb_encoder); \ - cls = rb_obj_class(rb_encoder); \ - if (rb_encoder == Qnil || cls != cEncoder) { \ - rb_encoder = rb_yajl_encoder_new(0, NULL, cEncoder); \ - } \ - return rb_yajl_encoder_encode(1, &self, rb_encoder); \ - -/* Helpers for building objects */ -static void yajl_check_and_fire_callback(void * ctx) { - yajl_parser_wrapper * wrapper; - GetParser((VALUE)ctx, wrapper); - - /* No need to do any of this if the callback isn't even setup */ - if (wrapper->parse_complete_callback != Qnil) { - int len = RARRAY_LEN(wrapper->builderStack); - if (len == 1 && wrapper->nestedArrayLevel == 0 && wrapper->nestedHashLevel == 0) { - rb_funcall(wrapper->parse_complete_callback, intern_call, 1, rb_ary_pop(wrapper->builderStack)); - } - } else { - int len = RARRAY_LEN(wrapper->builderStack); - if (len == 1 && wrapper->nestedArrayLevel == 0 && wrapper->nestedHashLevel == 0) { - wrapper->objectsFound++; - if (wrapper->objectsFound > 1) { - rb_raise(cParseError, "%s", "Found multiple JSON objects in the stream but no block or the on_parse_complete callback was assigned to handle them."); - } - } - } -} - -static char *yajl_raise_encode_error_for_status(yajl_gen_status status, VALUE obj) { - switch (status) { - case yajl_gen_keys_must_be_strings: - rb_raise(cEncodeError, "YAJL internal error: attempted use of non-string object as key"); - case yajl_max_depth_exceeded: - rb_raise(cEncodeError, "Max nesting depth of %d exceeded", YAJL_MAX_DEPTH); - case yajl_gen_in_error_state: - rb_raise(cEncodeError, "YAJL internal error: a generator function (yajl_gen_XXX) was called while in an error state"); - case yajl_gen_generation_complete: - rb_raise(cEncodeError, "YAJL internal error: attempted to encode to an already-complete document"); - case yajl_gen_invalid_number: - rb_raise(cEncodeError, "Invalid number: cannot encode Infinity, -Infinity, or NaN"); - case yajl_gen_no_buf: - rb_raise(cEncodeError, "YAJL internal error: yajl_gen_get_buf was called, but a print callback was specified, so no internal buffer is available"); - default: - return NULL; - } -} - -static void yajl_set_static_value(void * ctx, VALUE val) { - yajl_parser_wrapper * wrapper; - VALUE lastEntry, hash; - int len; - - GetParser((VALUE)ctx, wrapper); - - len = RARRAY_LEN(wrapper->builderStack); - if (len > 0) { - lastEntry = rb_ary_entry(wrapper->builderStack, len-1); - switch (TYPE(lastEntry)) { - case T_ARRAY: - rb_ary_push(lastEntry, val); - if (TYPE(val) == T_HASH || TYPE(val) == T_ARRAY) { - rb_ary_push(wrapper->builderStack, val); - } - break; - case T_HASH: - rb_hash_aset(lastEntry, val, Qnil); - rb_ary_push(wrapper->builderStack, val); - break; - case T_STRING: - case T_SYMBOL: - hash = rb_ary_entry(wrapper->builderStack, len-2); - if (TYPE(hash) == T_HASH) { - rb_hash_aset(hash, lastEntry, val); - rb_ary_pop(wrapper->builderStack); - if (TYPE(val) == T_HASH || TYPE(val) == T_ARRAY) { - rb_ary_push(wrapper->builderStack, val); - } - } - break; - } - } else { - rb_ary_push(wrapper->builderStack, val); - } -} - -static void yajl_encoder_wrapper_free(void * wrapper) { - yajl_encoder_wrapper * w = wrapper; - if (w) { - if (w->indentString) { - xfree(w->indentString); - } - yajl_gen_free(w->encoder); - xfree(w); - } -} - -static void yajl_encoder_wrapper_mark(void * wrapper) { - yajl_encoder_wrapper * w = wrapper; - if (w) { - rb_gc_mark(w->on_progress_callback); - rb_gc_mark(w->terminator); - } -} - -#define CHECK_STATUS(call) \ - if ((status = (call)) != yajl_gen_status_ok) { break; } - -void yajl_encode_part(void * wrapper, VALUE obj, VALUE io) { - VALUE str, outBuff, otherObj; - yajl_encoder_wrapper * w = wrapper; - yajl_gen_status status; - int idx = 0; - const unsigned char * buffer; - const char * cptr; - unsigned int len; - VALUE keys, entry, keyStr; - - if (io != Qnil || w->on_progress_callback != Qnil) { - status = yajl_gen_get_buf(w->encoder, &buffer, &len); - if (status != yajl_gen_status_ok) { - yajl_raise_encode_error_for_status(status, obj); - } - if (len >= WRITE_BUFSIZE) { - outBuff = rb_str_new((const char *)buffer, len); - if (io != Qnil) { - rb_io_write(io, outBuff); - } else if (w->on_progress_callback != Qnil) { - rb_funcall(w->on_progress_callback, intern_call, 1, outBuff); - } - yajl_gen_clear(w->encoder); - } - } - - switch (TYPE(obj)) { - case T_HASH: - CHECK_STATUS(yajl_gen_map_open(w->encoder)); - - /* TODO: itterate through keys in the hash */ - keys = rb_funcall(obj, intern_keys, 0); - for(idx=0; idxencoder)); - break; - case T_ARRAY: - CHECK_STATUS(yajl_gen_array_open(w->encoder)); - for(idx=0; idxencoder)); - break; - case T_NIL: - CHECK_STATUS(yajl_gen_null(w->encoder)); - break; - case T_TRUE: - CHECK_STATUS(yajl_gen_bool(w->encoder, 1)); - break; - case T_FALSE: - CHECK_STATUS(yajl_gen_bool(w->encoder, 0)); - break; - case T_FIXNUM: - case T_FLOAT: - case T_BIGNUM: - str = rb_funcall(obj, intern_to_s, 0); - cptr = RSTRING_PTR(str); - len = RSTRING_LEN(str); - if (memcmp(cptr, "NaN", 3) == 0 || memcmp(cptr, "Infinity", 8) == 0 || memcmp(cptr, "-Infinity", 9) == 0) { - rb_raise(cEncodeError, "'%s' is an invalid number", cptr); - } - CHECK_STATUS(yajl_gen_number(w->encoder, cptr, len)); - break; - case T_STRING: - cptr = RSTRING_PTR(obj); - len = RSTRING_LEN(obj); - CHECK_STATUS(yajl_gen_string(w->encoder, (const unsigned char *)cptr, len)); - break; - default: - if (rb_respond_to(obj, intern_to_json)) { - str = rb_funcall(obj, intern_to_json, 0); - Check_Type(str, T_STRING); - cptr = RSTRING_PTR(str); - len = RSTRING_LEN(str); - CHECK_STATUS(yajl_gen_number(w->encoder, cptr, len)); - } else { - str = rb_funcall(obj, intern_to_s, 0); - Check_Type(str, T_STRING); - cptr = RSTRING_PTR(str); - len = RSTRING_LEN(str); - CHECK_STATUS(yajl_gen_string(w->encoder, (const unsigned char *)cptr, len)); - } - break; - } - - if (status != yajl_gen_status_ok) { - yajl_raise_encode_error_for_status(status, obj); - rb_raise(cEncodeError, "Encountered unknown YAJL status %d during JSON generation", status); - } -} - -void yajl_parser_wrapper_free(void * wrapper) { - yajl_parser_wrapper * w = wrapper; - if (w) { - yajl_free(w->parser); - xfree(w); - } -} - -void yajl_parser_wrapper_mark(void * wrapper) { - yajl_parser_wrapper * w = wrapper; - if (w) { - rb_gc_mark(w->builderStack); - rb_gc_mark(w->parse_complete_callback); - } -} - -void yajl_parse_chunk(const unsigned char * chunk, unsigned int len, yajl_handle parser) { - yajl_status stat; - - stat = yajl_parse(parser, chunk, len); - - if (stat != yajl_status_ok && stat != yajl_status_insufficient_data) { - unsigned char * str = yajl_get_error(parser, 1, chunk, len); - VALUE errobj = rb_exc_new2(cParseError, (const char*) str); - yajl_free_error(parser, str); - rb_exc_raise(errobj); - } -} - -/* YAJL Callbacks */ -static int yajl_found_null(void * ctx) { - yajl_set_static_value(ctx, Qnil); - yajl_check_and_fire_callback(ctx); - return 1; -} - -static int yajl_found_boolean(void * ctx, int boolean) { - yajl_set_static_value(ctx, boolean ? Qtrue : Qfalse); - yajl_check_and_fire_callback(ctx); - return 1; -} - -static int yajl_found_number(void * ctx, const char * numberVal, unsigned int numberLen) { - char* buf = (char*)malloc(numberLen + 1); - buf[numberLen] = 0; - memcpy(buf, numberVal, numberLen); - - if (memchr(buf, '.', numberLen) || - memchr(buf, 'e', numberLen) || - memchr(buf, 'E', numberLen)) { - yajl_set_static_value(ctx, rb_float_new(strtod(buf, NULL))); - } else { - yajl_set_static_value(ctx, rb_cstr2inum(buf, 10)); - } - free(buf); - return 1; -} - -static int yajl_found_string(void * ctx, const unsigned char * stringVal, unsigned int stringLen) { - VALUE str = rb_str_new((const char *)stringVal, stringLen); -#ifdef HAVE_RUBY_ENCODING_H - rb_encoding *default_internal_enc = rb_default_internal_encoding(); - rb_enc_associate(str, utf8Encoding); - if (default_internal_enc) { - str = rb_str_export_to_enc(str, default_internal_enc); - } -#endif - yajl_set_static_value(ctx, str); - yajl_check_and_fire_callback(ctx); - return 1; -} - -static int yajl_found_hash_key(void * ctx, const unsigned char * stringVal, unsigned int stringLen) { - yajl_parser_wrapper * wrapper; - VALUE keyStr; -#ifdef HAVE_RUBY_ENCODING_H - rb_encoding *default_internal_enc; -#endif - GetParser((VALUE)ctx, wrapper); -#ifdef HAVE_RUBY_ENCODING_H - default_internal_enc = rb_default_internal_encoding(); -#endif - - if (wrapper->symbolizeKeys) { -#ifdef HAVE_RUBY_ENCODING_H - ID id = rb_intern3((const char *)stringVal, stringLen, utf8Encoding); - keyStr = ID2SYM(id); -#else - VALUE str = rb_str_new((const char *)stringVal, stringLen); - keyStr = rb_str_intern(str); -#endif - } else { - keyStr = rb_str_new((const char *)stringVal, stringLen); -#ifdef HAVE_RUBY_ENCODING_H - rb_enc_associate(keyStr, utf8Encoding); - if (default_internal_enc) { - keyStr = rb_str_export_to_enc(keyStr, default_internal_enc); - } -#endif - } - yajl_set_static_value(ctx, keyStr); - yajl_check_and_fire_callback(ctx); - return 1; -} - -static int yajl_found_start_hash(void * ctx) { - yajl_parser_wrapper * wrapper; - GetParser((VALUE)ctx, wrapper); - wrapper->nestedHashLevel++; - yajl_set_static_value(ctx, rb_hash_new()); - return 1; -} - -static int yajl_found_end_hash(void * ctx) { - yajl_parser_wrapper * wrapper; - GetParser((VALUE)ctx, wrapper); - wrapper->nestedHashLevel--; - if (RARRAY_LEN(wrapper->builderStack) > 1) { - rb_ary_pop(wrapper->builderStack); - } - yajl_check_and_fire_callback(ctx); - return 1; -} - -static int yajl_found_start_array(void * ctx) { - yajl_parser_wrapper * wrapper; - GetParser((VALUE)ctx, wrapper); - wrapper->nestedArrayLevel++; - yajl_set_static_value(ctx, rb_ary_new()); - return 1; -} - -static int yajl_found_end_array(void * ctx) { - yajl_parser_wrapper * wrapper; - GetParser((VALUE)ctx, wrapper); - wrapper->nestedArrayLevel--; - if (RARRAY_LEN(wrapper->builderStack) > 1) { - rb_ary_pop(wrapper->builderStack); - } - yajl_check_and_fire_callback(ctx); - return 1; -} - - -/* Ruby Interface */ - -/* - * Document-class: Yajl::Parser - * - * This class contains methods for parsing JSON directly from an IO object. - * The only basic requirment currently is that the IO object respond to #read(len) and #eof? - * The IO is parsed until a complete JSON object has been read and a ruby object will be returned. - */ - -/* - * Document-method: new - * - * call-seq: new([:symbolize_keys => true, [:allow_comments => false[, :check_utf8 => false]]]) - * - * :symbolize_keys will turn hash keys into Ruby symbols, defaults to false. - * - * :allow_comments will turn on/off the check for comments inside the JSON stream, defaults to true. - * - * :check_utf8 will validate UTF8 characters found in the JSON stream, defaults to true. - */ -static VALUE rb_yajl_parser_new(int argc, VALUE * argv, VALUE klass) { - yajl_parser_wrapper * wrapper; - yajl_parser_config cfg; - VALUE opts, obj; - int allowComments = 1, checkUTF8 = 1, symbolizeKeys = 0; - - /* Scan off config vars */ - if (rb_scan_args(argc, argv, "01", &opts) == 1) { - Check_Type(opts, T_HASH); - - if (rb_hash_aref(opts, sym_allow_comments) == Qfalse) { - allowComments = 0; - } - if (rb_hash_aref(opts, sym_check_utf8) == Qfalse) { - checkUTF8 = 0; - } - if (rb_hash_aref(opts, sym_symbolize_keys) == Qtrue || rb_hash_aref(opts, sym_symbolize_names) == Qtrue) { - symbolizeKeys = 1; - } - } - cfg = (yajl_parser_config){allowComments, checkUTF8}; - - obj = Data_Make_Struct(klass, yajl_parser_wrapper, yajl_parser_wrapper_mark, yajl_parser_wrapper_free, wrapper); - wrapper->parser = yajl_alloc(&callbacks, &cfg, NULL, (void *)obj); - wrapper->nestedArrayLevel = 0; - wrapper->nestedHashLevel = 0; - wrapper->objectsFound = 0; - wrapper->symbolizeKeys = symbolizeKeys; - wrapper->builderStack = rb_ary_new(); - wrapper->parse_complete_callback = Qnil; - rb_obj_call_init(obj, 0, 0); - return obj; -} - -/* - * Document-method: initialize - * - * call-seq: new([:symbolize_keys => true, [:allow_comments => false[, :check_utf8 => false]]]) - * - * :symbolize_keys will turn hash keys into Ruby symbols, defaults to false. - * - * :allow_comments will turn on/off the check for comments inside the JSON stream, defaults to true. - * - * :check_utf8 will validate UTF8 characters found in the JSON stream, defaults to true. - */ -static VALUE rb_yajl_parser_init(int argc, VALUE * argv, VALUE self) { - return self; -} - -/* - * Document-method: parse - * - * call-seq: - * parse(input, buffer_size=8092) - * parse(input, buffer_size=8092) { |obj| ... } - * - * +input+ can either be a string or an IO to parse JSON from - * - * +buffer_size+ is the size of chunk that will be parsed off the input (if it's an IO) for each loop of the parsing process. - * 8092 is a good balance between the different types of streams (off disk, off a socket, etc...), but this option - * is here so the caller can better tune their parsing depending on the type of stream being passed. - * A larger read buffer will perform better for files off disk, where as a smaller size may be more efficient for - * reading off of a socket directly. - * - * If a block was passed, it's called when an object has been parsed off the stream. This is especially - * usefull when parsing a stream of multiple JSON objects. - * - * NOTE: you can optionally assign the +on_parse_complete+ callback, and it will be called the same way the optional - * block is for this method. -*/ -static VALUE rb_yajl_parser_parse(int argc, VALUE * argv, VALUE self) { - yajl_status stat; - yajl_parser_wrapper * wrapper; - VALUE rbufsize, input, blk; - unsigned int len; - const char * cptr; - - GetParser(self, wrapper); - - /* setup our parameters */ - rb_scan_args(argc, argv, "11&", &input, &rbufsize, &blk); - if (NIL_P(rbufsize)) { - rbufsize = INT2FIX(READ_BUFSIZE); - } else { - Check_Type(rbufsize, T_FIXNUM); - } - if (!NIL_P(blk)) { - rb_yajl_parser_set_complete_cb(self, blk); - } - - if (TYPE(input) == T_STRING) { - cptr = RSTRING_PTR(input); - len = RSTRING_LEN(input); - yajl_parse_chunk((const unsigned char*)cptr, len, wrapper->parser); - } else if (rb_respond_to(input, intern_io_read)) { - VALUE parsed = rb_str_new(0, FIX2LONG(rbufsize)); - while (rb_funcall(input, intern_io_read, 2, rbufsize, parsed) != Qnil) { - cptr = RSTRING_PTR(parsed); - len = RSTRING_LEN(parsed); - yajl_parse_chunk((const unsigned char*)cptr, len, wrapper->parser); - } - } else { - rb_raise(cParseError, "input must be a string or IO"); - } - - /* parse any remaining buffered data */ - stat = yajl_parse_complete(wrapper->parser); - - if (wrapper->parse_complete_callback != Qnil) { - yajl_check_and_fire_callback((void *)self); - return Qnil; - } - - return rb_ary_pop(wrapper->builderStack); -} - -/* - * Document-method: parse_chunk - * - * call-seq: parse_chunk(string_chunk) - * - * +string_chunk+ can be a partial or full JSON string to push on the parser. - * - * This method will throw an exception if the +on_parse_complete+ callback hasn't been assigned yet. - * The +on_parse_complete+ callback assignment is required so the user can handle objects that have been - * parsed off the stream as they're found. - */ -static VALUE rb_yajl_parser_parse_chunk(VALUE self, VALUE chunk) { - yajl_parser_wrapper * wrapper; - unsigned int len; - - GetParser(self, wrapper); - if (NIL_P(chunk)) { - rb_raise(cParseError, "Can't parse a nil string."); - } - - if (wrapper->parse_complete_callback != Qnil) { - const char * cptr = RSTRING_PTR(chunk); - len = RSTRING_LEN(chunk); - yajl_parse_chunk((const unsigned char*)cptr, len, wrapper->parser); - } else { - rb_raise(cParseError, "The on_parse_complete callback isn't setup, parsing useless."); - } - - return Qnil; -} - -/* - * Document-method: on_parse_complete= - * - * call-seq: on_parse_complete = Proc.new { |obj| ... } - * - * This callback setter allows you to pass a Proc/lambda or any other object that responds to #call. - * - * It will pass a single parameter, the ruby object built from the last parsed JSON object - */ -static VALUE rb_yajl_parser_set_complete_cb(VALUE self, VALUE callback) { - yajl_parser_wrapper * wrapper; - GetParser(self, wrapper); - wrapper->parse_complete_callback = callback; - return Qnil; -} - -/* - * Document-class: Yajl::Encoder - * - * This class contains methods for encoding a Ruby object into JSON, streaming it's output into an IO object. - * The IO object need only respond to #write(str) - * The JSON stream created is written to the IO in chunks, as it's being created. - */ - -static unsigned char * defaultIndentString = (unsigned char *)" "; -/* - * Document-method: new - * - * call-seq: initialize([:pretty => false[, :indent => ' '][, :terminator => "\n"]]) - * - * :pretty will enable/disable beautifying or "pretty priting" the output string. - * - * :indent is the character(s) used to indent the output string. - * - * :terminator allows you to specify a character to be used as the termination character after a full JSON string has been generated by - * the encoder. This would be especially useful when encoding in chunks (via a block or callback during the encode process), to be able to - * determine when the last chunk of the current encode is sent. - * If you specify this option to be nil, it will be ignored if encoding directly to an IO or simply returning a string. But if a block is used, - * the encoder will still pass it - I hope that makes sense ;). - */ -static VALUE rb_yajl_encoder_new(int argc, VALUE * argv, VALUE klass) { - yajl_encoder_wrapper * wrapper; - yajl_gen_config cfg; - VALUE opts, obj, indent; - unsigned char *indentString = NULL, *actualIndent = NULL; - int beautify = 0, htmlSafe = 0; - - /* Scan off config vars */ - if (rb_scan_args(argc, argv, "01", &opts) == 1) { - Check_Type(opts, T_HASH); - - if (rb_hash_aref(opts, sym_pretty) == Qtrue) { - beautify = 1; - indent = rb_hash_aref(opts, sym_indent); - if (indent != Qnil) { -#ifdef HAVE_RUBY_ENCODING_H - indent = rb_str_export_to_enc(indent, utf8Encoding); -#endif - Check_Type(indent, T_STRING); - indentString = (unsigned char*)xmalloc(RSTRING_LEN(indent)+1); - memcpy(indentString, RSTRING_PTR(indent), RSTRING_LEN(indent)); - indentString[RSTRING_LEN(indent)] = '\0'; - actualIndent = indentString; - } - } - if (rb_hash_aref(opts, sym_html_safe) == Qtrue) { - htmlSafe = 1; - } - } - if (!indentString) { - indentString = defaultIndentString; - } - cfg = (yajl_gen_config){beautify, (const char *)indentString, htmlSafe}; - - obj = Data_Make_Struct(klass, yajl_encoder_wrapper, yajl_encoder_wrapper_mark, yajl_encoder_wrapper_free, wrapper); - wrapper->indentString = actualIndent; - wrapper->encoder = yajl_gen_alloc(&cfg, NULL); - wrapper->on_progress_callback = Qnil; - if (opts != Qnil && rb_funcall(opts, intern_has_key, 1, sym_terminator) == Qtrue) { - wrapper->terminator = rb_hash_aref(opts, sym_terminator); -#ifdef HAVE_RUBY_ENCODING_H - if (TYPE(wrapper->terminator) == T_STRING) { - wrapper->terminator = rb_str_export_to_enc(wrapper->terminator, utf8Encoding); - } -#endif - } else { - wrapper->terminator = 0; - } - rb_obj_call_init(obj, 0, 0); - return obj; -} - -/* - * Document-method: initialize - * - * call-seq: initialize([:pretty => false[, :indent => ' '][, :terminator => "\n"]]) - * - * :pretty will enable/disable beautifying or "pretty priting" the output string. - * - * :indent is the character(s) used to indent the output string. - * - * :terminator allows you to specify a character to be used as the termination character after a full JSON string has been generated by - * the encoder. This would be especially useful when encoding in chunks (via a block or callback during the encode process), to be able to - * determine when the last chunk of the current encode is sent. - * If you specify this option to be nil, it will be ignored if encoding directly to an IO or simply returning a string. But if a block is used, - * the encoder will still pass it - I hope that makes sense ;). - */ -static VALUE rb_yajl_encoder_init(int argc, VALUE * argv, VALUE self) { - return self; -} - -/* - * Document-method: encode - * - * call-seq: encode(obj[, io[, &block]]) - * - * +obj+ is the Ruby object to encode to JSON - * - * +io+ is an optional IO used to stream the encoded JSON string to. - * If +io+ isn't specified, this method will return the resulting JSON string. If +io+ is specified, this method returns nil - * - * If an optional block is passed, it's called when encoding is complete and passed the resulting JSON string - * - * It should be noted that you can reuse an instance of this class to continue encoding multiple JSON - * to the same stream. Just continue calling this method, passing it the same IO object with new/different - * ruby objects to encode. This is how streaming is accomplished. - */ -static VALUE rb_yajl_encoder_encode(int argc, VALUE * argv, VALUE self) { - yajl_encoder_wrapper * wrapper; - const unsigned char * buffer; - unsigned int len; - VALUE obj, io, blk, outBuff; - - GetEncoder(self, wrapper); - - rb_scan_args(argc, argv, "11&", &obj, &io, &blk); - - if (blk != Qnil) { - wrapper->on_progress_callback = blk; - } - - /* begin encode process */ - yajl_encode_part(wrapper, obj, io); - - /* just make sure we output the remaining buffer */ - yajl_gen_get_buf(wrapper->encoder, &buffer, &len); - outBuff = rb_str_new((const char *)buffer, len); -#ifdef HAVE_RUBY_ENCODING_H - rb_enc_associate(outBuff, utf8Encoding); -#endif - yajl_gen_clear(wrapper->encoder); - - if (io != Qnil) { - rb_io_write(io, outBuff); - if (wrapper->terminator != 0 && wrapper->terminator != Qnil) { - rb_io_write(io, wrapper->terminator); - } - return Qnil; - } else if (blk != Qnil) { - rb_funcall(blk, intern_call, 1, outBuff); - if (wrapper->terminator != 0) { - rb_funcall(blk, intern_call, 1, wrapper->terminator); - } - return Qnil; - } else { - if (wrapper->terminator != 0 && wrapper->terminator != Qnil) { - rb_str_concat(outBuff, wrapper->terminator); - } - return outBuff; - } - return Qnil; -} - -/* - * Document-method: on_progress - * - * call-seq: on_progress = Proc.new {|str| ...} - * - * This callback setter allows you to pass a Proc/lambda or any other object that responds to #call. - * - * It will pass the caller a chunk of the encode buffer after it's reached it's internal max buffer size (defaults to 8kb). - * For example, encoding a large object that would normally result in 24288 bytes of data will result in 3 calls to this callback (assuming the 8kb default encode buffer). - */ -static VALUE rb_yajl_encoder_set_progress_cb(VALUE self, VALUE callback) { - yajl_encoder_wrapper * wrapper; - GetEncoder(self, wrapper); - wrapper->on_progress_callback = callback; - return Qnil; -} - - -/* JSON Gem compatibility */ - -/* - * Document-class: Hash - */ -/* - * Document-method: to_json - * - * call-seq: to_json(encoder=Yajl::Encoder.new) - * - * +encoder+ is an existing Yajl::Encoder used to encode JSON - * - * Encodes an instance of Hash to JSON - */ -static VALUE rb_yajl_json_ext_hash_to_json(int argc, VALUE * argv, VALUE self) { - YAJL_RB_TO_JSON; -} - -/* - * Document-class: Array - */ -/* - * Document-method: to_json - * - * call-seq: to_json(encoder=Yajl::Encoder.new) - * - * +encoder+ is an existing Yajl::Encoder used to encode JSON - * - * Encodes an instance of Array to JSON - */ -static VALUE rb_yajl_json_ext_array_to_json(int argc, VALUE * argv, VALUE self) { - YAJL_RB_TO_JSON; -} - -/* - * Document-class: Fixnum - */ -/* - * Document-method: to_json - * - * call-seq: to_json(encoder=Yajl::Encoder.new) - * - * +encoder+ is an existing Yajl::Encoder used to encode JSON - * - * Encodes an instance of Fixnum to JSON - */ -static VALUE rb_yajl_json_ext_fixnum_to_json(int argc, VALUE * argv, VALUE self) { - YAJL_RB_TO_JSON; -} - -/* - * Document-class: Float - */ -/* - * Document-method: to_json - * - * call-seq: to_json(encoder=Yajl::Encoder.new) - * - * +encoder+ is an existing Yajl::Encoder used to encode JSON - * - * Encodes an instance of Float to JSON - */ -static VALUE rb_yajl_json_ext_float_to_json(int argc, VALUE * argv, VALUE self) { - YAJL_RB_TO_JSON; -} - -/* - * Document-class: String - */ -/* - * Document-method: to_json - * - * call-seq: to_json(encoder=Yajl::Encoder.new) - * - * +encoder+ is an existing Yajl::Encoder used to encode JSON - * - * Encodes an instance of TrueClass to JSON - */ -static VALUE rb_yajl_json_ext_string_to_json(int argc, VALUE * argv, VALUE self) { - YAJL_RB_TO_JSON; -} - -/* - * Document-class: TrueClass - */ -/* - * Document-method: to_json - * - * call-seq: to_json(encoder=Yajl::Encoder.new) - * - * +encoder+ is an existing Yajl::Encoder used to encode JSON - * - * Encodes an instance of TrueClass to JSON - */ -static VALUE rb_yajl_json_ext_true_to_json(int argc, VALUE * argv, VALUE self) { - YAJL_RB_TO_JSON; -} - -/* - * Document-class: FalseClass - */ -/* - * Document-method: to_json - * - * call-seq: to_json(encoder=Yajl::Encoder.new) - * - * +encoder+ is an existing Yajl::Encoder used to encode JSON - * - * Encodes an instance of FalseClass to JSON - */ -static VALUE rb_yajl_json_ext_false_to_json(int argc, VALUE * argv, VALUE self) { - YAJL_RB_TO_JSON; -} - -/* - * Document-class: NilClass - */ -/* - * Document-method: to_json - * - * call-seq: to_json(encoder=Yajl::Encoder.new) - * - * +encoder+ is an existing Yajl::Encoder used to encode JSON - * - * Encodes an instance of NilClass to JSON - */ -static VALUE rb_yajl_json_ext_nil_to_json(int argc, VALUE * argv, VALUE self) { - YAJL_RB_TO_JSON; -} - -/* - * Document-class: Yajl::Encoder - */ -/* - * Document-method: enable_json_gem_compatability - * - * call-seq: enable_json_gem_compatability - * - * Enables the JSON gem compatibility API - */ -static VALUE rb_yajl_encoder_enable_json_gem_ext(VALUE klass) { - rb_define_method(rb_cHash, "to_json", rb_yajl_json_ext_hash_to_json, -1); - rb_define_method(rb_cArray, "to_json", rb_yajl_json_ext_array_to_json, -1); -#ifdef RUBY_INTEGER_UNIFICATION - rb_define_method(rb_cInteger, "to_json", rb_yajl_json_ext_fixnum_to_json, -1); -#else - rb_define_method(rb_cFixnum, "to_json", rb_yajl_json_ext_fixnum_to_json, -1); -#endif - rb_define_method(rb_cFloat, "to_json", rb_yajl_json_ext_float_to_json, -1); - rb_define_method(rb_cString, "to_json", rb_yajl_json_ext_string_to_json, -1); - rb_define_method(rb_cTrueClass, "to_json", rb_yajl_json_ext_true_to_json, -1); - rb_define_method(rb_cFalseClass, "to_json", rb_yajl_json_ext_false_to_json, -1); - rb_define_method(rb_cNilClass, "to_json", rb_yajl_json_ext_nil_to_json, -1); - return Qnil; -} - - -/* Ruby Extension initializer */ -void Init_yajl() { - mYajl = rb_define_module("Yajl"); - - rb_define_const(mYajl, "MAX_DEPTH", INT2NUM(YAJL_MAX_DEPTH)); - - cParseError = rb_define_class_under(mYajl, "ParseError", rb_eStandardError); - cEncodeError = rb_define_class_under(mYajl, "EncodeError", rb_eStandardError); - - cParser = rb_define_class_under(mYajl, "Parser", rb_cObject); - rb_define_singleton_method(cParser, "new", rb_yajl_parser_new, -1); - rb_define_method(cParser, "initialize", rb_yajl_parser_init, -1); - rb_define_method(cParser, "parse", rb_yajl_parser_parse, -1); - rb_define_method(cParser, "parse_chunk", rb_yajl_parser_parse_chunk, 1); - rb_define_method(cParser, "<<", rb_yajl_parser_parse_chunk, 1); - rb_define_method(cParser, "on_parse_complete=", rb_yajl_parser_set_complete_cb, 1); - - cEncoder = rb_define_class_under(mYajl, "Encoder", rb_cObject); - rb_define_singleton_method(cEncoder, "new", rb_yajl_encoder_new, -1); - rb_define_method(cEncoder, "initialize", rb_yajl_encoder_init, -1); - rb_define_method(cEncoder, "encode", rb_yajl_encoder_encode, -1); - rb_define_method(cEncoder, "on_progress=", rb_yajl_encoder_set_progress_cb, 1); - - rb_define_singleton_method(cEncoder, "enable_json_gem_compatability", rb_yajl_encoder_enable_json_gem_ext, 0); - - intern_io_read = rb_intern("read"); - intern_call = rb_intern("call"); - intern_keys = rb_intern("keys"); - intern_to_s = rb_intern("to_s"); - intern_to_json = rb_intern("to_json"); - intern_to_sym = rb_intern("to_sym"); - intern_has_key = rb_intern("has_key?"); - intern_as_json = rb_intern("as_json"); - - sym_allow_comments = ID2SYM(rb_intern("allow_comments")); - sym_check_utf8 = ID2SYM(rb_intern("check_utf8")); - sym_pretty = ID2SYM(rb_intern("pretty")); - sym_indent = ID2SYM(rb_intern("indent")); - sym_html_safe = ID2SYM(rb_intern("html_safe")); - sym_terminator = ID2SYM(rb_intern("terminator")); - sym_symbolize_keys = ID2SYM(rb_intern("symbolize_keys")); - sym_symbolize_names = ID2SYM(rb_intern("symbolize_names")); - -#ifdef HAVE_RUBY_ENCODING_H - utf8Encoding = rb_utf8_encoding(); -#endif -} diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_ext.h b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_ext.h deleted file mode 100644 index e0f5948..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_ext.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (c) 2008-2011 Brian Lopez - http://github.com/brianmario - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#include "api/yajl_parse.h" -#include "api/yajl_gen.h" - -/* tell rbx not to use it's caching compat layer - by doing this we're making a promize to RBX that - we'll never modify the pointers we get back from RSTRING_PTR */ -#define RSTRING_NOT_MODIFIED - -#include - -#ifdef HAVE_RUBY_ENCODING_H -#include -static rb_encoding *utf8Encoding; -#endif - -#define READ_BUFSIZE 8192 -#define WRITE_BUFSIZE 8192 - -/* Older versions of Ruby (< 1.8.6) need these */ -#ifndef RSTRING_PTR -#define RSTRING_PTR(s) (RSTRING(s)->ptr) -#endif -#ifndef RSTRING_LEN -#define RSTRING_LEN(s) (RSTRING(s)->len) -#endif -#ifndef RARRAY_PTR -#define RARRAY_PTR(s) (RARRAY(s)->ptr) -#endif -#ifndef RARRAY_LEN -#define RARRAY_LEN(s) (RARRAY(s)->len) -#endif - -static VALUE cParseError, cEncodeError, mYajl, cParser, cEncoder; -static ID intern_io_read, intern_call, intern_keys, intern_to_s, - intern_to_json, intern_has_key, intern_to_sym, intern_as_json; -static ID sym_allow_comments, sym_check_utf8, sym_pretty, sym_indent, sym_terminator, sym_symbolize_keys, sym_symbolize_names, sym_html_safe; - -#define GetParser(obj, sval) Data_Get_Struct(obj, yajl_parser_wrapper, sval); -#define GetEncoder(obj, sval) Data_Get_Struct(obj, yajl_encoder_wrapper, sval); - -static void yajl_check_and_fire_callback(void * ctx); -static void yajl_set_static_value(void * ctx, VALUE val); -static void yajl_encode_part(void * wrapper, VALUE obj, VALUE io); -static void yajl_parse_chunk(const unsigned char * chunk, unsigned int len, yajl_handle parser); - -static int yajl_found_null(void * ctx); -static int yajl_found_boolean(void * ctx, int boolean); -static int yajl_found_number(void * ctx, const char * numberVal, unsigned int numberLen); -static int yajl_found_string(void * ctx, const unsigned char * stringVal, unsigned int stringLen); -static int yajl_found_hash_key(void * ctx, const unsigned char * stringVal, unsigned int stringLen); -static int yajl_found_start_hash(void * ctx); -static int yajl_found_end_hash(void * ctx); -static int yajl_found_start_array(void * ctx); -static int yajl_found_end_array(void * ctx); - -static yajl_callbacks callbacks = { - yajl_found_null, - yajl_found_boolean, - NULL, - NULL, - yajl_found_number, - yajl_found_string, - yajl_found_start_hash, - yajl_found_hash_key, - yajl_found_end_hash, - yajl_found_start_array, - yajl_found_end_array -}; - -typedef struct { - VALUE builderStack; - VALUE parse_complete_callback; - int nestedArrayLevel; - int nestedHashLevel; - int objectsFound; - int symbolizeKeys; - yajl_handle parser; -} yajl_parser_wrapper; - -typedef struct { - VALUE on_progress_callback; - VALUE terminator; - yajl_gen encoder; - unsigned char *indentString; -} yajl_encoder_wrapper; - -static VALUE rb_yajl_parser_new(int argc, VALUE * argv, VALUE self); -static VALUE rb_yajl_parser_init(int argc, VALUE * argv, VALUE self); -static VALUE rb_yajl_parser_parse(int argc, VALUE * argv, VALUE self); -static VALUE rb_yajl_parser_parse_chunk(VALUE self, VALUE chunk); -static VALUE rb_yajl_parser_set_complete_cb(VALUE self, VALUE callback); -static void yajl_parser_wrapper_free(void * wrapper); -static void yajl_parser_wrapper_mark(void * wrapper); - -static VALUE rb_yajl_encoder_new(int argc, VALUE * argv, VALUE klass); -static VALUE rb_yajl_encoder_init(int argc, VALUE * argv, VALUE self); -static VALUE rb_yajl_encoder_encode(int argc, VALUE * argv, VALUE self); -static VALUE rb_yajl_encoder_set_progress_cb(VALUE self, VALUE callback); -static void yajl_encoder_wrapper_free(void * wrapper); -static void yajl_encoder_wrapper_mark(void * wrapper); - -static VALUE rb_yajl_json_ext_hash_to_json(int argc, VALUE * argv, VALUE self); -static VALUE rb_yajl_json_ext_array_to_json(int argc, VALUE * argv, VALUE self); -static VALUE rb_yajl_json_ext_fixnum_to_json(int argc, VALUE * argv, VALUE self); -static VALUE rb_yajl_json_ext_float_to_json(int argc, VALUE * argv, VALUE self); -static VALUE rb_yajl_json_ext_string_to_json(int argc, VALUE * argv, VALUE self); -static VALUE rb_yajl_json_ext_true_to_json(int argc, VALUE * argv, VALUE self); -static VALUE rb_yajl_json_ext_false_to_json(int argc, VALUE * argv, VALUE self); -static VALUE rb_yajl_json_ext_nil_to_json(int argc, VALUE * argv, VALUE self); -static VALUE rb_yajl_encoder_enable_json_gem_ext(VALUE klass); - -void Init_yajl(); diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_gen.c b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_gen.c deleted file mode 100644 index f5b5bae..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_gen.c +++ /dev/null @@ -1,344 +0,0 @@ -/* - * Copyright 2010, Lloyd Hilaiel. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. Neither the name of Lloyd Hilaiel nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include "api/yajl_gen.h" -#include "yajl_buf.h" -#include "yajl_encode.h" - -#include -#include -#include -#include - -typedef enum { - yajl_gen_start, - yajl_gen_map_start, - yajl_gen_map_key, - yajl_gen_map_val, - yajl_gen_array_start, - yajl_gen_in_array, - yajl_gen_complete, - yajl_gen_error -} yajl_gen_state; - -struct yajl_gen_t -{ - unsigned int depth; - unsigned int pretty; - const char * indentString; - yajl_gen_state state[YAJL_MAX_DEPTH]; - yajl_print_t print; - void * ctx; /* yajl_buf */ - /* memory allocation routines */ - yajl_alloc_funcs alloc; - unsigned int htmlSafe; -}; - -yajl_gen -yajl_gen_alloc(const yajl_gen_config * config, - const yajl_alloc_funcs * afs) -{ - return yajl_gen_alloc2(NULL, config, afs, NULL); -} - -yajl_gen -yajl_gen_alloc2(const yajl_print_t callback, - const yajl_gen_config * config, - const yajl_alloc_funcs * afs, - void * ctx) -{ - yajl_gen g = NULL; - yajl_alloc_funcs afsBuffer; - - /* first order of business is to set up memory allocation routines */ - if (afs != NULL) { - if (afs->malloc == NULL || afs->realloc == NULL || afs->free == NULL) - { - return NULL; - } - } else { - yajl_set_default_alloc_funcs(&afsBuffer); - afs = &afsBuffer; - } - - g = (yajl_gen) YA_MALLOC(afs, sizeof(struct yajl_gen_t)); - if (!g) return NULL; - - memset((void *) g, 0, sizeof(struct yajl_gen_t)); - /* copy in pointers to allocation routines */ - memcpy((void *) &(g->alloc), (void *) afs, sizeof(yajl_alloc_funcs)); - - if (config) { - const char *indent = config->indentString; - g->pretty = config->beautify; - g->indentString = config->indentString; - if (indent) { - for (; *indent; indent++) { - if (*indent != '\n' - && *indent != '\v' - && *indent != '\f' - && *indent != '\t' - && *indent != '\r' - && *indent != ' ') { - g->indentString = NULL; - break; - } - } - } - if (!g->indentString) { - g->indentString = " "; - } - g->htmlSafe = config->htmlSafe; - } - - if (callback) { - g->print = callback; - g->ctx = ctx; - } else { - g->print = (yajl_print_t)&yajl_buf_append; - g->ctx = yajl_buf_alloc(&(g->alloc)); - } - - return g; -} - -void -yajl_gen_free(yajl_gen g) -{ - if (g->print == (yajl_print_t)&yajl_buf_append) yajl_buf_free((yajl_buf)g->ctx); - YA_FREE(&(g->alloc), g); -} - -#define INSERT_SEP \ - if (g->state[g->depth] == yajl_gen_map_key || \ - g->state[g->depth] == yajl_gen_in_array) { \ - g->print(g->ctx, ",", 1); \ - if (g->pretty) g->print(g->ctx, "\n", 1); \ - } else if (g->state[g->depth] == yajl_gen_map_val) { \ - g->print(g->ctx, ":", 1); \ - if (g->pretty) g->print(g->ctx, " ", 1); \ - } - -#define INSERT_WHITESPACE \ - if (g->pretty) { \ - if (g->state[g->depth] != yajl_gen_map_val) { \ - unsigned int _i; \ - for (_i=0;_idepth;_i++) \ - g->print(g->ctx, \ - g->indentString, \ - (unsigned int)strlen(g->indentString)); \ - } \ - } - -#define ENSURE_NOT_KEY \ - if (g->state[g->depth] == yajl_gen_map_key || \ - g->state[g->depth] == yajl_gen_map_start) { \ - return yajl_gen_keys_must_be_strings; \ - } \ - -/* check that we're not complete, or in error state. in a valid state - * to be generating */ -#define ENSURE_VALID_STATE \ - if (g->state[g->depth] == yajl_gen_error) { \ - return yajl_gen_in_error_state;\ - } else if (g->state[g->depth] == yajl_gen_complete) { \ - return yajl_gen_generation_complete; \ - } - -#define INCREMENT_DEPTH \ - if (++(g->depth) >= YAJL_MAX_DEPTH) return yajl_max_depth_exceeded; - -#define DECREMENT_DEPTH \ - if (--(g->depth) >= YAJL_MAX_DEPTH) return yajl_gen_error; - -#define APPENDED_ATOM \ - switch (g->state[g->depth]) { \ - case yajl_gen_map_start: \ - case yajl_gen_map_key: \ - g->state[g->depth] = yajl_gen_map_val; \ - break; \ - case yajl_gen_array_start: \ - g->state[g->depth] = yajl_gen_in_array; \ - break; \ - case yajl_gen_map_val: \ - g->state[g->depth] = yajl_gen_map_key; \ - break; \ - default: \ - break; \ - } \ - -#define FINAL_NEWLINE - -yajl_gen_status -yajl_gen_integer(yajl_gen g, long int number) -{ - char i[32]; - ENSURE_VALID_STATE; ENSURE_NOT_KEY; INSERT_SEP; INSERT_WHITESPACE; - sprintf(i, "%ld", number); - g->print(g->ctx, i, (unsigned int)strlen(i)); - APPENDED_ATOM; - FINAL_NEWLINE; - return yajl_gen_status_ok; -} - -#ifdef WIN32 -#include -#define isnan _isnan -#define isinf !_finite -#endif - -yajl_gen_status -yajl_gen_double(yajl_gen g, double number) -{ - char i[32]; - ENSURE_VALID_STATE; ENSURE_NOT_KEY; - if (isnan(number) || isinf(number)) return yajl_gen_invalid_number; - INSERT_SEP; INSERT_WHITESPACE; - sprintf(i, "%.20g", number); - g->print(g->ctx, i, (unsigned int)strlen(i)); - APPENDED_ATOM; - FINAL_NEWLINE; - return yajl_gen_status_ok; -} - -yajl_gen_status -yajl_gen_number(yajl_gen g, const char * s, unsigned int l) -{ - ENSURE_VALID_STATE; ENSURE_NOT_KEY; INSERT_SEP; INSERT_WHITESPACE; - g->print(g->ctx, s, l); - APPENDED_ATOM; - FINAL_NEWLINE; - return yajl_gen_status_ok; -} - -yajl_gen_status -yajl_gen_string(yajl_gen g, const unsigned char * str, - unsigned int len) -{ - ENSURE_VALID_STATE; INSERT_SEP; INSERT_WHITESPACE; - g->print(g->ctx, "\"", 1); - yajl_string_encode2(g->print, g->ctx, str, len, g->htmlSafe); - g->print(g->ctx, "\"", 1); - APPENDED_ATOM; - FINAL_NEWLINE; - return yajl_gen_status_ok; -} - -yajl_gen_status -yajl_gen_null(yajl_gen g) -{ - ENSURE_VALID_STATE; ENSURE_NOT_KEY; INSERT_SEP; INSERT_WHITESPACE; - g->print(g->ctx, "null", strlen("null")); - APPENDED_ATOM; - FINAL_NEWLINE; - return yajl_gen_status_ok; -} - -yajl_gen_status -yajl_gen_bool(yajl_gen g, int boolean) -{ - const char * val = boolean ? "true" : "false"; - - ENSURE_VALID_STATE; ENSURE_NOT_KEY; INSERT_SEP; INSERT_WHITESPACE; - g->print(g->ctx, val, (unsigned int)strlen(val)); - APPENDED_ATOM; - FINAL_NEWLINE; - return yajl_gen_status_ok; -} - -yajl_gen_status -yajl_gen_map_open(yajl_gen g) -{ - ENSURE_VALID_STATE; ENSURE_NOT_KEY; INSERT_SEP; INSERT_WHITESPACE; - INCREMENT_DEPTH; - - g->state[g->depth] = yajl_gen_map_start; - g->print(g->ctx, "{", 1); - if (g->pretty) g->print(g->ctx, "\n", 1); - FINAL_NEWLINE; - return yajl_gen_status_ok; -} - -yajl_gen_status -yajl_gen_map_close(yajl_gen g) -{ - ENSURE_VALID_STATE; - DECREMENT_DEPTH; - - if (g->pretty) g->print(g->ctx, "\n", 1); - APPENDED_ATOM; - INSERT_WHITESPACE; - g->print(g->ctx, "}", 1); - FINAL_NEWLINE; - return yajl_gen_status_ok; -} - -yajl_gen_status -yajl_gen_array_open(yajl_gen g) -{ - ENSURE_VALID_STATE; ENSURE_NOT_KEY; INSERT_SEP; INSERT_WHITESPACE; - INCREMENT_DEPTH; - g->state[g->depth] = yajl_gen_array_start; - g->print(g->ctx, "[", 1); - if (g->pretty) g->print(g->ctx, "\n", 1); - FINAL_NEWLINE; - return yajl_gen_status_ok; -} - -yajl_gen_status -yajl_gen_array_close(yajl_gen g) -{ - ENSURE_VALID_STATE; - DECREMENT_DEPTH; - if (g->pretty) g->print(g->ctx, "\n", 1); - APPENDED_ATOM; - INSERT_WHITESPACE; - g->print(g->ctx, "]", 1); - FINAL_NEWLINE; - return yajl_gen_status_ok; -} - -yajl_gen_status -yajl_gen_get_buf(yajl_gen g, const unsigned char ** buf, - unsigned int * len) -{ - if (g->print != (yajl_print_t)&yajl_buf_append) return yajl_gen_no_buf; - *buf = yajl_buf_data((yajl_buf)g->ctx); - *len = yajl_buf_len((yajl_buf)g->ctx); - return yajl_gen_status_ok; -} - -void -yajl_gen_clear(yajl_gen g) -{ - if (g->print == (yajl_print_t)&yajl_buf_append) yajl_buf_clear((yajl_buf)g->ctx); -} diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_lex.c b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_lex.c deleted file mode 100644 index 286132d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_lex.c +++ /dev/null @@ -1,748 +0,0 @@ -/* - * Copyright 2010, Lloyd Hilaiel. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. Neither the name of Lloyd Hilaiel nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include "yajl_lex.h" -#include "yajl_buf.h" - -#include -#include -#include -#include - -#ifdef YAJL_LEXER_DEBUG -static const char * -tokToStr(yajl_tok tok) -{ - switch (tok) { - case yajl_tok_bool: return "bool"; - case yajl_tok_colon: return "colon"; - case yajl_tok_comma: return "comma"; - case yajl_tok_eof: return "eof"; - case yajl_tok_error: return "error"; - case yajl_tok_left_brace: return "brace"; - case yajl_tok_left_bracket: return "bracket"; - case yajl_tok_null: return "null"; - case yajl_tok_integer: return "integer"; - case yajl_tok_double: return "double"; - case yajl_tok_right_brace: return "brace"; - case yajl_tok_right_bracket: return "bracket"; - case yajl_tok_string: return "string"; - case yajl_tok_string_with_escapes: return "string_with_escapes"; - } - return "unknown"; -} -#endif - -/* Impact of the stream parsing feature on the lexer: - * - * YAJL support stream parsing. That is, the ability to parse the first - * bits of a chunk of JSON before the last bits are available (still on - * the network or disk). This makes the lexer more complex. The - * responsibility of the lexer is to handle transparently the case where - * a chunk boundary falls in the middle of a token. This is - * accomplished is via a buffer and a character reading abstraction. - * - * Overview of implementation - * - * When we lex to end of input string before end of token is hit, we - * copy all of the input text composing the token into our lexBuf. - * - * Every time we read a character, we do so through the readChar function. - * readChar's responsibility is to handle pulling all chars from the buffer - * before pulling chars from input text - */ - -struct yajl_lexer_t { - /* the overal line and char offset into the data */ - unsigned int lineOff; - unsigned int charOff; - - /* error */ - yajl_lex_error error; - - /* a input buffer to handle the case where a token is spread over - * multiple chunks */ - yajl_buf buf; - - /* in the case where we have data in the lexBuf, bufOff holds - * the current offset into the lexBuf. */ - unsigned int bufOff; - - /* are we using the lex buf? */ - unsigned int bufInUse; - - /* shall we allow comments? */ - unsigned int allowComments; - - /* shall we validate utf8 inside strings? */ - unsigned int validateUTF8; - - yajl_alloc_funcs * alloc; -}; - -#define readChar(lxr, txt, off) \ - (((lxr)->bufInUse && yajl_buf_len((lxr)->buf) && lxr->bufOff < yajl_buf_len((lxr)->buf)) ? \ - (*((const unsigned char *) yajl_buf_data((lxr)->buf) + ((lxr)->bufOff)++)) : \ - ((txt)[(*(off))++])) - -#define unreadChar(lxr, off) ((*(off) > 0) ? (*(off))-- : ((lxr)->bufOff--)) - -yajl_lexer -yajl_lex_alloc(yajl_alloc_funcs * alloc, - unsigned int allowComments, unsigned int validateUTF8) -{ - yajl_lexer lxr = (yajl_lexer) YA_MALLOC(alloc, sizeof(struct yajl_lexer_t)); - memset((void *) lxr, 0, sizeof(struct yajl_lexer_t)); - lxr->buf = yajl_buf_alloc(alloc); - lxr->allowComments = allowComments; - lxr->validateUTF8 = validateUTF8; - lxr->alloc = alloc; - return lxr; -} - -yajl_lexer -yajl_lex_realloc(yajl_lexer orig) { - orig->lineOff = 0; - orig->charOff = 0; - orig->error = yajl_lex_e_ok; - yajl_buf_clear(orig->buf); - orig->bufOff = 0; - orig->bufInUse = 0; - return orig; -} - -void -yajl_lex_free(yajl_lexer lxr) -{ - yajl_buf_free(lxr->buf); - YA_FREE(lxr->alloc, lxr); - return; -} - -/* a lookup table which lets us quickly determine three things: - * VEC - valid escaped conrol char - * IJC - invalid json char - * VHC - valid hex char - * note. the solidus '/' may be escaped or not. - * note. the - */ -#define VEC 1 -#define IJC 2 -#define VHC 4 -static const char charLookupTable[256] = -{ -/*00*/ IJC , IJC , IJC , IJC , IJC , IJC , IJC , IJC , -/*08*/ IJC , IJC , IJC , IJC , IJC , IJC , IJC , IJC , -/*10*/ IJC , IJC , IJC , IJC , IJC , IJC , IJC , IJC , -/*18*/ IJC , IJC , IJC , IJC , IJC , IJC , IJC , IJC , - -/*20*/ 0 , 0 , VEC|IJC, 0 , 0 , 0 , 0 , 0 , -/*28*/ 0 , 0 , 0 , 0 , 0 , 0 , 0 , VEC , -/*30*/ VHC , VHC , VHC , VHC , VHC , VHC , VHC , VHC , -/*38*/ VHC , VHC , 0 , 0 , 0 , 0 , 0 , 0 , - -/*40*/ 0 , VHC , VHC , VHC , VHC , VHC , VHC , 0 , -/*48*/ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , -/*50*/ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , -/*58*/ 0 , 0 , 0 , 0 , VEC|IJC, 0 , 0 , 0 , - -/*60*/ 0 , VHC , VEC|VHC, VHC , VHC , VHC , VEC|VHC, 0 , -/*68*/ 0 , 0 , 0 , 0 , 0 , 0 , VEC , 0 , -/*70*/ 0 , 0 , VEC , 0 , VEC , 0 , 0 , 0 , -/*78*/ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , - -/* include these so we don't have to always check the range of the char */ - 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , - 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , - 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , - 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , - - 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , - 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , - 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , - 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , - - 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , - 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , - 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , - 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , - - 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , - 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , - 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , - 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 -}; - -/** process a variable length utf8 encoded codepoint. - * - * returns: - * yajl_tok_string - if valid utf8 char was parsed and offset was - * advanced - * yajl_tok_eof - if end of input was hit before validation could - * complete - * yajl_tok_error - if invalid utf8 was encountered - * - * NOTE: on error the offset will point to the first char of the - * invalid utf8 */ -#define UTF8_CHECK_EOF if (*offset >= jsonTextLen) { return yajl_tok_eof; } - -static yajl_tok -yajl_lex_utf8_char(yajl_lexer lexer, const unsigned char * jsonText, - unsigned int jsonTextLen, unsigned int * offset, - unsigned char curChar) -{ - if (curChar <= 0x7f) { - /* single byte */ - return yajl_tok_string; - } else if ((curChar >> 5) == 0x6) { - /* two byte */ - UTF8_CHECK_EOF; - curChar = readChar(lexer, jsonText, offset); - if ((curChar >> 6) == 0x2) return yajl_tok_string; - } else if ((curChar >> 4) == 0x0e) { - /* three byte */ - UTF8_CHECK_EOF; - curChar = readChar(lexer, jsonText, offset); - if ((curChar >> 6) == 0x2) { - UTF8_CHECK_EOF; - curChar = readChar(lexer, jsonText, offset); - if ((curChar >> 6) == 0x2) return yajl_tok_string; - } - } else if ((curChar >> 3) == 0x1e) { - /* four byte */ - UTF8_CHECK_EOF; - curChar = readChar(lexer, jsonText, offset); - if ((curChar >> 6) == 0x2) { - UTF8_CHECK_EOF; - curChar = readChar(lexer, jsonText, offset); - if ((curChar >> 6) == 0x2) { - UTF8_CHECK_EOF; - curChar = readChar(lexer, jsonText, offset); - if ((curChar >> 6) == 0x2) return yajl_tok_string; - } - } - } - - return yajl_tok_error; -} - -/* lex a string. input is the lexer, pointer to beginning of - * json text, and start of string (offset). - * a token is returned which has the following meanings: - * yajl_tok_string: lex of string was successful. offset points to - * terminating '"'. - * yajl_tok_eof: end of text was encountered before we could complete - * the lex. - * yajl_tok_error: embedded in the string were unallowable chars. offset - * points to the offending char - */ -#define STR_CHECK_EOF \ -if (*offset >= jsonTextLen) { \ - tok = yajl_tok_eof; \ - goto finish_string_lex; \ -} - -static yajl_tok -yajl_lex_string(yajl_lexer lexer, const unsigned char * jsonText, - unsigned int jsonTextLen, unsigned int * offset) -{ - yajl_tok tok = yajl_tok_error; - int hasEscapes = 0; - - for (;;) { - unsigned char curChar; - - STR_CHECK_EOF; - - curChar = readChar(lexer, jsonText, offset); - - /* quote terminates */ - if (curChar == '"') { - tok = yajl_tok_string; - break; - } - /* backslash escapes a set of control chars, */ - else if (curChar == '\\') { - hasEscapes = 1; - STR_CHECK_EOF; - - /* special case \u */ - curChar = readChar(lexer, jsonText, offset); - if (curChar == 'u') { - unsigned int i = 0; - - for (i=0;i<4;i++) { - STR_CHECK_EOF; - curChar = readChar(lexer, jsonText, offset); - if (!(charLookupTable[curChar] & VHC)) { - /* back up to offending char */ - unreadChar(lexer, offset); - lexer->error = yajl_lex_string_invalid_hex_char; - goto finish_string_lex; - } - } - } else if (!(charLookupTable[curChar] & VEC)) { - /* back up to offending char */ - unreadChar(lexer, offset); - lexer->error = yajl_lex_string_invalid_escaped_char; - goto finish_string_lex; - } - } - /* when not validating UTF8 it's a simple table lookup to determine - * if the present character is invalid */ - else if(charLookupTable[curChar] & IJC) { - /* back up to offending char */ - unreadChar(lexer, offset); - lexer->error = yajl_lex_string_invalid_json_char; - goto finish_string_lex; - } - /* when in validate UTF8 mode we need to do some extra work */ - else if (lexer->validateUTF8) { - yajl_tok t = yajl_lex_utf8_char(lexer, jsonText, jsonTextLen, - offset, curChar); - - if (t == yajl_tok_eof) { - tok = yajl_tok_eof; - goto finish_string_lex; - } else if (t == yajl_tok_error) { - lexer->error = yajl_lex_string_invalid_utf8; - goto finish_string_lex; - } - } - /* accept it, and move on */ - } - finish_string_lex: - /* tell our buddy, the parser, wether he needs to process this string - * again */ - if (hasEscapes && tok == yajl_tok_string) { - tok = yajl_tok_string_with_escapes; - } - - return tok; -} - -#define RETURN_IF_EOF if (*offset >= jsonTextLen) return yajl_tok_eof; - -static yajl_tok -yajl_lex_number(yajl_lexer lexer, const unsigned char * jsonText, - unsigned int jsonTextLen, unsigned int * offset) -{ - /** XXX: numbers are the only entities in json that we must lex - * _beyond_ in order to know that they are complete. There - * is an ambiguous case for integers at EOF. */ - - unsigned char c; - - yajl_tok tok = yajl_tok_integer; - - RETURN_IF_EOF; - c = readChar(lexer, jsonText, offset); - - /* optional leading minus */ - if (c == '-') { - RETURN_IF_EOF; - c = readChar(lexer, jsonText, offset); - } - - /* a single zero, or a series of integers */ - if (c == '0') { - RETURN_IF_EOF; - c = readChar(lexer, jsonText, offset); - } else if (c >= '1' && c <= '9') { - do { - RETURN_IF_EOF; - c = readChar(lexer, jsonText, offset); - } while (c >= '0' && c <= '9'); - } else { - unreadChar(lexer, offset); - lexer->error = yajl_lex_missing_integer_after_minus; - return yajl_tok_error; - } - - /* optional fraction (indicates this is floating point) */ - if (c == '.') { - int numRd = 0; - - RETURN_IF_EOF; - c = readChar(lexer, jsonText, offset); - - while (c >= '0' && c <= '9') { - numRd++; - RETURN_IF_EOF; - c = readChar(lexer, jsonText, offset); - } - - if (!numRd) { - unreadChar(lexer, offset); - lexer->error = yajl_lex_missing_integer_after_decimal; - return yajl_tok_error; - } - tok = yajl_tok_double; - } - - /* optional exponent (indicates this is floating point) */ - if (c == 'e' || c == 'E') { - RETURN_IF_EOF; - c = readChar(lexer, jsonText, offset); - - /* optional sign */ - if (c == '+' || c == '-') { - RETURN_IF_EOF; - c = readChar(lexer, jsonText, offset); - } - - if (c >= '0' && c <= '9') { - do { - RETURN_IF_EOF; - c = readChar(lexer, jsonText, offset); - } while (c >= '0' && c <= '9'); - } else { - unreadChar(lexer, offset); - lexer->error = yajl_lex_missing_integer_after_exponent; - return yajl_tok_error; - } - tok = yajl_tok_double; - } - - /* we always go "one too far" */ - unreadChar(lexer, offset); - - return tok; -} - -static yajl_tok -yajl_lex_comment(yajl_lexer lexer, const unsigned char * jsonText, - unsigned int jsonTextLen, unsigned int * offset) -{ - unsigned char c; - - yajl_tok tok = yajl_tok_comment; - - RETURN_IF_EOF; - c = readChar(lexer, jsonText, offset); - - /* either slash or star expected */ - if (c == '/') { - /* now we throw away until end of line */ - do { - RETURN_IF_EOF; - c = readChar(lexer, jsonText, offset); - } while (c != '\n'); - } else if (c == '*') { - /* now we throw away until end of comment */ - for (;;) { - RETURN_IF_EOF; - c = readChar(lexer, jsonText, offset); - if (c == '*') { - RETURN_IF_EOF; - c = readChar(lexer, jsonText, offset); - if (c == '/') { - break; - } else { - unreadChar(lexer, offset); - } - } - } - } else { - lexer->error = yajl_lex_invalid_char; - tok = yajl_tok_error; - } - - return tok; -} - -yajl_tok -yajl_lex_lex(yajl_lexer lexer, const unsigned char * jsonText, - unsigned int jsonTextLen, unsigned int * offset, - const unsigned char ** outBuf, unsigned int * outLen) -{ - yajl_tok tok = yajl_tok_error; - unsigned char c; - unsigned int startOffset = *offset; - - *outBuf = NULL; - *outLen = 0; - - for (;;) { - assert(*offset <= jsonTextLen); - - if (*offset >= jsonTextLen) { - tok = yajl_tok_eof; - goto lexed; - } - - c = readChar(lexer, jsonText, offset); - - switch (c) { - case '{': - tok = yajl_tok_left_bracket; - goto lexed; - case '}': - tok = yajl_tok_right_bracket; - goto lexed; - case '[': - tok = yajl_tok_left_brace; - goto lexed; - case ']': - tok = yajl_tok_right_brace; - goto lexed; - case ',': - tok = yajl_tok_comma; - goto lexed; - case ':': - tok = yajl_tok_colon; - goto lexed; - case '\t': case '\n': case '\v': case '\f': case '\r': case ' ': - startOffset++; - break; - case 't': { - const char * want = "rue"; - do { - if (*offset >= jsonTextLen) { - tok = yajl_tok_eof; - goto lexed; - } - c = readChar(lexer, jsonText, offset); - if (c != *want) { - unreadChar(lexer, offset); - lexer->error = yajl_lex_invalid_string; - tok = yajl_tok_error; - goto lexed; - } - } while (*(++want)); - tok = yajl_tok_bool; - goto lexed; - } - case 'f': { - const char * want = "alse"; - do { - if (*offset >= jsonTextLen) { - tok = yajl_tok_eof; - goto lexed; - } - c = readChar(lexer, jsonText, offset); - if (c != *want) { - unreadChar(lexer, offset); - lexer->error = yajl_lex_invalid_string; - tok = yajl_tok_error; - goto lexed; - } - } while (*(++want)); - tok = yajl_tok_bool; - goto lexed; - } - case 'n': { - const char * want = "ull"; - do { - if (*offset >= jsonTextLen) { - tok = yajl_tok_eof; - goto lexed; - } - c = readChar(lexer, jsonText, offset); - if (c != *want) { - unreadChar(lexer, offset); - lexer->error = yajl_lex_invalid_string; - tok = yajl_tok_error; - goto lexed; - } - } while (*(++want)); - tok = yajl_tok_null; - goto lexed; - } - case '"': { - tok = yajl_lex_string(lexer, (const unsigned char *) jsonText, - jsonTextLen, offset); - goto lexed; - } - case '-': - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': { - /* integer parsing wants to start from the beginning */ - unreadChar(lexer, offset); - tok = yajl_lex_number(lexer, (const unsigned char *) jsonText, - jsonTextLen, offset); - goto lexed; - } - case '/': - /* hey, look, a probable comment! If comments are disabled - * it's an error. */ - if (!lexer->allowComments) { - unreadChar(lexer, offset); - lexer->error = yajl_lex_unallowed_comment; - tok = yajl_tok_error; - goto lexed; - } - /* if comments are enabled, then we should try to lex - * the thing. possible outcomes are - * - successful lex (tok_comment, which means continue), - * - malformed comment opening (slash not followed by - * '*' or '/') (tok_error) - * - eof hit. (tok_eof) */ - tok = yajl_lex_comment(lexer, (const unsigned char *) jsonText, - jsonTextLen, offset); - if (tok == yajl_tok_comment) { - /* "error" is silly, but that's the initial - * state of tok. guilty until proven innocent. */ - tok = yajl_tok_error; - yajl_buf_clear(lexer->buf); - lexer->bufInUse = 0; - startOffset = *offset; - break; - } - /* hit error or eof, bail */ - goto lexed; - default: - lexer->error = yajl_lex_invalid_char; - tok = yajl_tok_error; - goto lexed; - } - } - - - lexed: - /* need to append to buffer if the buffer is in use or - * if it's an EOF token */ - if (tok == yajl_tok_eof || lexer->bufInUse) { - if (!lexer->bufInUse) yajl_buf_clear(lexer->buf); - lexer->bufInUse = 1; - yajl_buf_append(lexer->buf, jsonText + startOffset, *offset - startOffset); - lexer->bufOff = 0; - - if (tok != yajl_tok_eof) { - *outBuf = yajl_buf_data(lexer->buf); - *outLen = yajl_buf_len(lexer->buf); - lexer->bufInUse = 0; - } - } else if (tok != yajl_tok_error) { - *outBuf = jsonText + startOffset; - *outLen = *offset - startOffset; - } - - /* special case for strings. skip the quotes. */ - if (tok == yajl_tok_string || tok == yajl_tok_string_with_escapes) - { - assert(*outLen >= 2); - (*outBuf)++; - *outLen -= 2; - } - - -#ifdef YAJL_LEXER_DEBUG - if (tok == yajl_tok_error) { - printf("lexical error: %s\n", - yajl_lex_error_to_string(yajl_lex_get_error(lexer))); - } else if (tok == yajl_tok_eof) { - printf("EOF hit\n"); - } else { - printf("lexed %s: '", tokToStr(tok)); - fwrite(*outBuf, 1, *outLen, stdout); - printf("'\n"); - } -#endif - - return tok; -} - -const char * -yajl_lex_error_to_string(yajl_lex_error error) -{ - switch (error) { - case yajl_lex_e_ok: - return "ok, no error"; - case yajl_lex_string_invalid_utf8: - return "invalid bytes in UTF8 string."; - case yajl_lex_string_invalid_escaped_char: - return "inside a string, '\\' occurs before a character " - "which it may not."; - case yajl_lex_string_invalid_json_char: - return "invalid character inside string."; - case yajl_lex_string_invalid_hex_char: - return "invalid (non-hex) character occurs after '\\u' inside " - "string."; - case yajl_lex_invalid_char: - return "invalid char in json text."; - case yajl_lex_invalid_string: - return "invalid string in json text."; - case yajl_lex_missing_integer_after_exponent: - return "malformed number, a digit is required after the exponent."; - case yajl_lex_missing_integer_after_decimal: - return "malformed number, a digit is required after the " - "decimal point."; - case yajl_lex_missing_integer_after_minus: - return "malformed number, a digit is required after the " - "minus sign."; - case yajl_lex_unallowed_comment: - return "probable comment found in input text, comments are " - "not enabled."; - } - return "unknown error code"; -} - - -/** allows access to more specific information about the lexical - * error when yajl_lex_lex returns yajl_tok_error. */ -yajl_lex_error -yajl_lex_get_error(yajl_lexer lexer) -{ - if (lexer == NULL) return (yajl_lex_error) -1; - return lexer->error; -} - -unsigned int yajl_lex_current_line(yajl_lexer lexer) -{ - return lexer->lineOff; -} - -unsigned int yajl_lex_current_char(yajl_lexer lexer) -{ - return lexer->charOff; -} - -yajl_tok yajl_lex_peek(yajl_lexer lexer, const unsigned char * jsonText, - unsigned int jsonTextLen, unsigned int offset) -{ - const unsigned char * outBuf; - unsigned int outLen; - unsigned int bufLen = yajl_buf_len(lexer->buf); - unsigned int bufOff = lexer->bufOff; - unsigned int bufInUse = lexer->bufInUse; - yajl_tok tok; - - tok = yajl_lex_lex(lexer, jsonText, jsonTextLen, &offset, - &outBuf, &outLen); - - lexer->bufOff = bufOff; - lexer->bufInUse = bufInUse; - yajl_buf_truncate(lexer->buf, bufLen); - - return tok; -} diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_lex.h b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_lex.h deleted file mode 100644 index 3cdeef1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_lex.h +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright 2010, Lloyd Hilaiel. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. Neither the name of Lloyd Hilaiel nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __YAJL_LEX_H__ -#define __YAJL_LEX_H__ - -#include "api/yajl_common.h" - -typedef enum { - yajl_tok_bool, - yajl_tok_colon, - yajl_tok_comma, - yajl_tok_eof, - yajl_tok_error, - yajl_tok_left_brace, - yajl_tok_left_bracket, - yajl_tok_null, - yajl_tok_right_brace, - yajl_tok_right_bracket, - - /* we differentiate between integers and doubles to allow the - * parser to interpret the number without re-scanning */ - yajl_tok_integer, - yajl_tok_double, - - /* we differentiate between strings which require further processing, - * and strings that do not */ - yajl_tok_string, - yajl_tok_string_with_escapes, - - /* comment tokens are not currently returned to the parser, ever */ - yajl_tok_comment -} yajl_tok; - -typedef struct yajl_lexer_t * yajl_lexer; - - -YAJL_API -yajl_lexer yajl_lex_alloc(yajl_alloc_funcs * alloc, - unsigned int allowComments, - unsigned int validateUTF8); - -YAJL_API -yajl_lexer yajl_lex_realloc(yajl_lexer orig); - -YAJL_API -void yajl_lex_free(yajl_lexer lexer); - -/** - * run/continue a lex. "offset" is an input/output parameter. - * It should be initialized to zero for a - * new chunk of target text, and upon subsetquent calls with the same - * target text should passed with the value of the previous invocation. - * - * the client may be interested in the value of offset when an error is - * returned from the lexer. This allows the client to render useful -n * error messages. - * - * When you pass the next chunk of data, context should be reinitialized - * to zero. - * - * Finally, the output buffer is usually just a pointer into the jsonText, - * however in cases where the entity being lexed spans multiple chunks, - * the lexer will buffer the entity and the data returned will be - * a pointer into that buffer. - * - * This behavior is abstracted from client code except for the performance - * implications which require that the client choose a reasonable chunk - * size to get adequate performance. - */ -YAJL_API -yajl_tok yajl_lex_lex(yajl_lexer lexer, const unsigned char * jsonText, - unsigned int jsonTextLen, unsigned int * offset, - const unsigned char ** outBuf, unsigned int * outLen); - -/** have a peek at the next token, but don't move the lexer forward */ -YAJL_API -yajl_tok yajl_lex_peek(yajl_lexer lexer, const unsigned char * jsonText, - unsigned int jsonTextLen, unsigned int offset); - - -typedef enum { - yajl_lex_e_ok = 0, - yajl_lex_string_invalid_utf8, - yajl_lex_string_invalid_escaped_char, - yajl_lex_string_invalid_json_char, - yajl_lex_string_invalid_hex_char, - yajl_lex_invalid_char, - yajl_lex_invalid_string, - yajl_lex_missing_integer_after_decimal, - yajl_lex_missing_integer_after_exponent, - yajl_lex_missing_integer_after_minus, - yajl_lex_unallowed_comment -} yajl_lex_error; - -YAJL_API -const char * yajl_lex_error_to_string(yajl_lex_error error); - -/** allows access to more specific information about the lexical - * error when yajl_lex_lex returns yajl_tok_error. */ -YAJL_API -yajl_lex_error yajl_lex_get_error(yajl_lexer lexer); - -/** get the current offset into the most recently lexed json string. */ -YAJL_API -unsigned int yajl_lex_current_offset(yajl_lexer lexer); - -/** get the number of lines lexed by this lexer instance */ -YAJL_API -unsigned int yajl_lex_current_line(yajl_lexer lexer); - -/** get the number of chars lexed by this lexer instance since the last - * \n or \r */ -YAJL_API -unsigned int yajl_lex_current_char(yajl_lexer lexer); - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_parser.c b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_parser.c deleted file mode 100644 index 175fcd4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_parser.c +++ /dev/null @@ -1,450 +0,0 @@ -/* - * Copyright 2010, Lloyd Hilaiel. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. Neither the name of Lloyd Hilaiel nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include "yajl_lex.h" -#include "yajl_parser.h" -#include "yajl_encode.h" -#include "yajl_bytestack.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -unsigned char * -yajl_render_error_string(yajl_handle hand, const unsigned char * jsonText, - unsigned int jsonTextLen, int verbose) -{ - unsigned int offset = hand->bytesConsumed; - unsigned char * str; - const char * errorType = NULL; - const char * errorText = NULL; - char text[72]; - const char * arrow = " (right here) ------^\n"; - - if (yajl_bs_current(hand->stateStack) == yajl_state_parse_error) { - errorType = "parse"; - errorText = hand->parseError; - } else if (yajl_bs_current(hand->stateStack) == yajl_state_lexical_error) { - errorType = "lexical"; - errorText = yajl_lex_error_to_string(yajl_lex_get_error(hand->lexer)); - } else { - errorType = "unknown"; - } - - { - unsigned int memneeded = 0; - memneeded += strlen(errorType); - memneeded += strlen(" error"); - if (errorText != NULL) { - memneeded += strlen(": "); - memneeded += strlen(errorText); - } - str = (unsigned char *) YA_MALLOC(&(hand->alloc), memneeded + 2); - str[0] = 0; - strcat((char *) str, errorType); - strcat((char *) str, " error"); - if (errorText != NULL) { - strcat((char *) str, ": "); - strcat((char *) str, errorText); - } - strcat((char *) str, "\n"); - } - - /* now we append as many spaces as needed to make sure the error - * falls at char 41, if verbose was specified */ - if (verbose) { - unsigned int start, end, i; - unsigned int spacesNeeded; - - spacesNeeded = (offset < 30 ? 40 - offset : 10); - start = (offset >= 30 ? offset - 30 : 0); - end = (offset + 30 > jsonTextLen ? jsonTextLen : offset + 30); - - for (i=0;ialloc), (unsigned int)(strlen((char *) str) + - strlen((char *) text) + - strlen(arrow) + 1)); - newStr[0] = 0; - strcat((char *) newStr, (char *) str); - strcat((char *) newStr, text); - strcat((char *) newStr, arrow); - YA_FREE(&(hand->alloc), str); - str = (unsigned char *) newStr; - } - } - return str; -} - -/* check for client cancelation */ -#define _CC_CHK(x) \ - if (!(x)) { \ - yajl_bs_set(hand->stateStack, yajl_state_parse_error); \ - hand->parseError = \ - "client cancelled parse via callback return value"; \ - return yajl_status_client_canceled; \ - } - - -yajl_status -yajl_do_parse(yajl_handle hand, const unsigned char * jsonText, - unsigned int jsonTextLen) -{ - yajl_tok tok; - const unsigned char * buf; - unsigned int bufLen; - unsigned int * offset = &(hand->bytesConsumed); - - *offset = 0; - - - around_again: - switch (yajl_bs_current(hand->stateStack)) { - case yajl_state_parse_complete: - return yajl_status_ok; - case yajl_state_lexical_error: - case yajl_state_parse_error: - return yajl_status_error; - case yajl_state_start: - case yajl_state_map_need_val: - case yajl_state_array_need_val: - case yajl_state_array_start: { - /* for arrays and maps, we advance the state for this - * depth, then push the state of the next depth. - * If an error occurs during the parsing of the nesting - * enitity, the state at this level will not matter. - * a state that needs pushing will be anything other - * than state_start */ - yajl_state stateToPush = yajl_state_start; - - tok = yajl_lex_lex(hand->lexer, jsonText, jsonTextLen, - offset, &buf, &bufLen); - - switch (tok) { - case yajl_tok_eof: - return yajl_status_insufficient_data; - case yajl_tok_error: - yajl_bs_set(hand->stateStack, yajl_state_lexical_error); - goto around_again; - case yajl_tok_string: - if (hand->callbacks && hand->callbacks->yajl_string) { - _CC_CHK(hand->callbacks->yajl_string(hand->ctx, - buf, bufLen)); - } - break; - case yajl_tok_string_with_escapes: - if (hand->callbacks && hand->callbacks->yajl_string) { - yajl_buf_clear(hand->decodeBuf); - yajl_string_decode(hand->decodeBuf, buf, bufLen); - _CC_CHK(hand->callbacks->yajl_string( - hand->ctx, yajl_buf_data(hand->decodeBuf), - yajl_buf_len(hand->decodeBuf))); - } - break; - case yajl_tok_bool: - if (hand->callbacks && hand->callbacks->yajl_boolean) { - _CC_CHK(hand->callbacks->yajl_boolean(hand->ctx, - *buf == 't')); - } - break; - case yajl_tok_null: - if (hand->callbacks && hand->callbacks->yajl_null) { - _CC_CHK(hand->callbacks->yajl_null(hand->ctx)); - } - break; - case yajl_tok_left_bracket: - if (hand->callbacks && hand->callbacks->yajl_start_map) { - _CC_CHK(hand->callbacks->yajl_start_map(hand->ctx)); - } - stateToPush = yajl_state_map_start; - break; - case yajl_tok_left_brace: - if (hand->callbacks && hand->callbacks->yajl_start_array) { - _CC_CHK(hand->callbacks->yajl_start_array(hand->ctx)); - } - stateToPush = yajl_state_array_start; - break; - case yajl_tok_integer: - /* - * note. strtol does not respect the length of - * the lexical token. in a corner case where the - * lexed number is a integer with a trailing zero, - * immediately followed by the end of buffer, - * sscanf could run off into oblivion and cause a - * crash. for this reason we copy the integer - * (and doubles), into our parse buffer (the same - * one used for unescaping strings), before - * calling strtol. yajl_buf ensures null padding, - * so we're safe. - */ - if (hand->callbacks) { - if (hand->callbacks->yajl_number) { - _CC_CHK(hand->callbacks->yajl_number( - hand->ctx,(const char *) buf, bufLen)); - } else if (hand->callbacks->yajl_integer) { - long int i = 0; - yajl_buf_clear(hand->decodeBuf); - yajl_buf_append(hand->decodeBuf, buf, bufLen); - buf = yajl_buf_data(hand->decodeBuf); - i = strtol((const char *) buf, NULL, 10); - if ((i == LONG_MIN || i == LONG_MAX) && - errno == ERANGE) - { - yajl_bs_set(hand->stateStack, - yajl_state_parse_error); - hand->parseError = "integer overflow" ; - /* try to restore error offset */ - if (*offset >= bufLen) *offset -= bufLen; - else *offset = 0; - goto around_again; - } - _CC_CHK(hand->callbacks->yajl_integer(hand->ctx, - i)); - } - } - break; - case yajl_tok_double: - if (hand->callbacks) { - if (hand->callbacks->yajl_number) { - _CC_CHK(hand->callbacks->yajl_number( - hand->ctx, (const char *) buf, bufLen)); - } else if (hand->callbacks->yajl_double) { - double d = 0.0; - yajl_buf_clear(hand->decodeBuf); - yajl_buf_append(hand->decodeBuf, buf, bufLen); - buf = yajl_buf_data(hand->decodeBuf); - d = strtod((char *) buf, NULL); - if ((d == HUGE_VAL || d == -HUGE_VAL) && - errno == ERANGE) - { - yajl_bs_set(hand->stateStack, - yajl_state_parse_error); - hand->parseError = "numeric (floating point) " - "overflow"; - /* try to restore error offset */ - if (*offset >= bufLen) *offset -= bufLen; - else *offset = 0; - goto around_again; - } - _CC_CHK(hand->callbacks->yajl_double(hand->ctx, - d)); - } - } - break; - case yajl_tok_right_brace: { - if (yajl_bs_current(hand->stateStack) == - yajl_state_array_start) - { - if (hand->callbacks && - hand->callbacks->yajl_end_array) - { - _CC_CHK(hand->callbacks->yajl_end_array(hand->ctx)); - } - yajl_bs_pop(hand->stateStack); - goto around_again; - } - /* intentional fall-through */ - } - case yajl_tok_colon: - case yajl_tok_comma: - case yajl_tok_right_bracket: - yajl_bs_set(hand->stateStack, yajl_state_parse_error); - hand->parseError = - "unallowed token at this point in JSON text"; - goto around_again; - default: - yajl_bs_set(hand->stateStack, yajl_state_parse_error); - hand->parseError = "invalid token, internal error"; - goto around_again; - } - /* got a value. transition depends on the state we're in. */ - { - yajl_state s = yajl_bs_current(hand->stateStack); - if (s == yajl_state_start) { - /* HACK: is this even safe to do? - yajl_bs_set(hand->stateStack, yajl_state_parse_complete); */ - yajl_reset_parser(hand); - } else if (s == yajl_state_map_need_val) { - yajl_bs_set(hand->stateStack, yajl_state_map_got_val); - } else { - yajl_bs_set(hand->stateStack, yajl_state_array_got_val); - } - } - if (stateToPush != yajl_state_start) { - yajl_bs_push(hand->stateStack, stateToPush); - } - - goto around_again; - } - case yajl_state_map_start: - case yajl_state_map_need_key: { - /* only difference between these two states is that in - * start '}' is valid, whereas in need_key, we've parsed - * a comma, and a string key _must_ follow */ - tok = yajl_lex_lex(hand->lexer, jsonText, jsonTextLen, - offset, &buf, &bufLen); - switch (tok) { - case yajl_tok_eof: - return yajl_status_insufficient_data; - case yajl_tok_error: - yajl_bs_set(hand->stateStack, yajl_state_lexical_error); - goto around_again; - case yajl_tok_string_with_escapes: - if (hand->callbacks && hand->callbacks->yajl_map_key) { - yajl_buf_clear(hand->decodeBuf); - yajl_string_decode(hand->decodeBuf, buf, bufLen); - buf = yajl_buf_data(hand->decodeBuf); - bufLen = yajl_buf_len(hand->decodeBuf); - } - /* intentional fall-through */ - case yajl_tok_string: - if (hand->callbacks && hand->callbacks->yajl_map_key) { - _CC_CHK(hand->callbacks->yajl_map_key(hand->ctx, buf, - bufLen)); - } - yajl_bs_set(hand->stateStack, yajl_state_map_sep); - goto around_again; - case yajl_tok_right_bracket: - if (yajl_bs_current(hand->stateStack) == - yajl_state_map_start) - { - if (hand->callbacks && hand->callbacks->yajl_end_map) { - _CC_CHK(hand->callbacks->yajl_end_map(hand->ctx)); - } - yajl_bs_pop(hand->stateStack); - goto around_again; - } - default: - yajl_bs_set(hand->stateStack, yajl_state_parse_error); - hand->parseError = - "invalid object key (must be a string)"; - goto around_again; - } - } - case yajl_state_map_sep: { - tok = yajl_lex_lex(hand->lexer, jsonText, jsonTextLen, - offset, &buf, &bufLen); - switch (tok) { - case yajl_tok_colon: - yajl_bs_set(hand->stateStack, yajl_state_map_need_val); - goto around_again; - case yajl_tok_eof: - return yajl_status_insufficient_data; - case yajl_tok_error: - yajl_bs_set(hand->stateStack, yajl_state_lexical_error); - goto around_again; - default: - yajl_bs_set(hand->stateStack, yajl_state_parse_error); - hand->parseError = "object key and value must " - "be separated by a colon (':')"; - goto around_again; - } - } - case yajl_state_map_got_val: { - tok = yajl_lex_lex(hand->lexer, jsonText, jsonTextLen, - offset, &buf, &bufLen); - switch (tok) { - case yajl_tok_right_bracket: - if (hand->callbacks && hand->callbacks->yajl_end_map) { - _CC_CHK(hand->callbacks->yajl_end_map(hand->ctx)); - } - yajl_bs_pop(hand->stateStack); - goto around_again; - case yajl_tok_comma: - yajl_bs_set(hand->stateStack, yajl_state_map_need_key); - goto around_again; - case yajl_tok_eof: - return yajl_status_insufficient_data; - case yajl_tok_error: - yajl_bs_set(hand->stateStack, yajl_state_lexical_error); - goto around_again; - default: - yajl_bs_set(hand->stateStack, yajl_state_parse_error); - hand->parseError = "after key and value, inside map, " - "I expect ',' or '}'"; - /* try to restore error offset */ - if (*offset >= bufLen) *offset -= bufLen; - else *offset = 0; - goto around_again; - } - } - case yajl_state_array_got_val: { - tok = yajl_lex_lex(hand->lexer, jsonText, jsonTextLen, - offset, &buf, &bufLen); - switch (tok) { - case yajl_tok_right_brace: - if (hand->callbacks && hand->callbacks->yajl_end_array) { - _CC_CHK(hand->callbacks->yajl_end_array(hand->ctx)); - } - yajl_bs_pop(hand->stateStack); - goto around_again; - case yajl_tok_comma: - yajl_bs_set(hand->stateStack, yajl_state_array_need_val); - goto around_again; - case yajl_tok_eof: - return yajl_status_insufficient_data; - case yajl_tok_error: - yajl_bs_set(hand->stateStack, yajl_state_lexical_error); - goto around_again; - default: - yajl_bs_set(hand->stateStack, yajl_state_parse_error); - hand->parseError = - "after array element, I expect ',' or ']'"; - goto around_again; - } - } - } - - abort(); - return yajl_status_error; -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_parser.h b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_parser.h deleted file mode 100644 index ee321e9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_parser.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright 2010, Lloyd Hilaiel. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. Neither the name of Lloyd Hilaiel nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __YAJL_PARSER_H__ -#define __YAJL_PARSER_H__ - -#include "api/yajl_parse.h" -#include "yajl_bytestack.h" -#include "yajl_buf.h" - - -typedef enum { - yajl_state_start = 0, - yajl_state_parse_complete, - yajl_state_parse_error, - yajl_state_lexical_error, - yajl_state_map_start, - yajl_state_map_sep, - yajl_state_map_need_val, - yajl_state_map_got_val, - yajl_state_map_need_key, - yajl_state_array_start, - yajl_state_array_got_val, - yajl_state_array_need_val -} yajl_state; - -struct yajl_handle_t { - const yajl_callbacks * callbacks; - void * ctx; - yajl_lexer lexer; - const char * parseError; - /* the number of bytes consumed from the last client buffer, - * in the case of an error this will be an error offset, in the - * case of an error this can be used as the error offset */ - unsigned int bytesConsumed; - /* temporary storage for decoded strings */ - yajl_buf decodeBuf; - /* a stack of states. access with yajl_state_XXX routines */ - yajl_bytestack stateStack; - /* memory allocation routines */ - yajl_alloc_funcs alloc; -}; - -YAJL_API -yajl_status -yajl_do_parse(yajl_handle handle, const unsigned char * jsonText, - unsigned int jsonTextLen); - -YAJL_API -unsigned char * -yajl_render_error_string(yajl_handle hand, const unsigned char * jsonText, - unsigned int jsonTextLen, int verbose); - - -#endif diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_version.c b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_version.c deleted file mode 100644 index 618ac1b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/ext/yajl/yajl_version.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "api/yajl_version.h" - -int yajl_version(void) -{ - return YAJL_VERSION; -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl.rb deleted file mode 100644 index a9bfb16..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl.rb +++ /dev/null @@ -1,76 +0,0 @@ -require 'yajl/yajl' - -# = Extras -# We're not going to load these auotmatically, because you might not need them ;) -# -# require 'yajl/http_stream.rb' unless defined?(Yajl::HttpStream) -# require 'yajl/gzip.rb' unless defined?(Yajl::Gzip) -# require 'yajl/deflate.rb' unless defined?(Yajl::Deflate) -# require 'yajl/bzip2.rb' unless defined?(Yajl::Bzip2) - -# = Yajl -# -# Ruby bindings to the excellent Yajl (Yet Another JSON Parser) ANSI C library. -module Yajl - - # For compatibility, has the same signature of Yajl::Parser.parse - def self.load(str_or_io, options={}, read_bufsize=nil, &block) - Parser.parse(str_or_io, options, read_bufsize, &block) - end - - # For compatibility, has the same signature of Yajl::Encoder.encode - def self.dump(obj, *args, &block) - Encoder.encode(obj, args, &block) - end - - class Parser - # A helper method for parse-and-forget use-cases - # - # +io+ is the stream to parse JSON from - # - # The +options+ hash allows you to set two parsing options - :allow_comments and :check_utf8 - # - # :allow_comments accepts a boolean will enable/disable checks for in-line comments in the JSON stream - # - # :check_utf8 accepts a boolean will enable/disable UTF8 validation for the JSON stream - def self.parse(str_or_io, options={}, read_bufsize=nil, &block) - new(options).parse(str_or_io, read_bufsize, &block) - end - end - - class Encoder - # A helper method for encode-and-forget use-cases - # - # Examples: - # Yajl::Encoder.encode(obj[, io, :pretty => true, :indent => "\t", &block]) - # - # output = Yajl::Encoder.encode(obj[, :pretty => true, :indent => "\t", &block]) - # - # +obj+ is a ruby object to encode to JSON format - # - # +io+ is the optional IO stream to encode the ruby object to. - # If +io+ isn't passed, the resulting JSON string is returned. If +io+ is passed, nil is returned. - # - # The +options+ hash allows you to set two encoding options - :pretty and :indent - # - # :pretty accepts a boolean and will enable/disable "pretty printing" the resulting output - # - # :indent accepts a string and will be used as the indent character(s) during the pretty print process - # - # If a block is passed, it will be used as (and work the same as) the +on_progress+ callback - def self.encode(obj, *args, &block) - # TODO: this code smells, any ideas? - args.flatten! - options = {} - io = nil - args.each do |arg| - if arg.is_a?(Hash) - options = arg - elsif arg.respond_to?(:write) - io = arg - end - end if args.any? - new(options).encode(obj, io, &block) - end - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/bzip2.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/bzip2.rb deleted file mode 100644 index 190c780..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/bzip2.rb +++ /dev/null @@ -1,11 +0,0 @@ -puts "DEPRECATION WARNING: Yajl's Bzip2 support is going to be removed in 2.0" - -require 'yajl' unless defined?(Yajl::Parser) - -begin - require 'bzip2' unless defined?(Bzip2) - require 'yajl/bzip2/stream_reader.rb' - require 'yajl/bzip2/stream_writer.rb' -rescue LoadError => e - raise "Unable to load the bzip2 library. Is the bzip2-ruby gem installed?" -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/bzip2/stream_reader.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/bzip2/stream_reader.rb deleted file mode 100644 index b3fc911..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/bzip2/stream_reader.rb +++ /dev/null @@ -1,31 +0,0 @@ -module Yajl - module Bzip2 - # This is a wrapper around Bzip::Reader to allow it's #read method to adhere - # to the IO spec, allowing for two parameters (length, and buffer) - class StreamReader < ::Bzip2::Reader - # A helper method to allow use similar to IO#read - def read(len=nil, buffer=nil) - if val = super(len) - unless buffer.nil? - buffer.replace(val) - return buffer - end - super(len) - else - nil - end - end - - # Helper method for one-off parsing from a bzip2-compressed stream - # - # See Yajl::Parser#parse for parameter documentation - def self.parse(input, options={}, buffer_size=nil, &block) - if input.is_a?(String) - input = StringIO.new(input) - end - - Yajl::Parser.new(options).parse(new(input), buffer_size, &block) - end - end - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/bzip2/stream_writer.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/bzip2/stream_writer.rb deleted file mode 100644 index 40af6eb..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/bzip2/stream_writer.rb +++ /dev/null @@ -1,14 +0,0 @@ -module Yajl - module Bzip2 - # A wrapper around the Bzip2::Writer class for easier JSON stream encoding - class StreamWriter < ::Bzip2::Writer - - # A helper method for encoding to a bzip2-compressed stream - # - # Look up Yajl::Encoder#encode for parameter documentation - def self.encode(obj, io) - Yajl::Encoder.new.encode(obj, new(io)) - end - end - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/deflate.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/deflate.rb deleted file mode 100644 index 5f25cca..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/deflate.rb +++ /dev/null @@ -1,6 +0,0 @@ -puts "DEPRECATION WARNING: Yajl's Deflate support is going to be removed in 2.0" - -require 'yajl' unless defined?(Yajl::Parser) -require 'zlib' unless defined?(Zlib) -require 'yajl/deflate/stream_reader.rb' -require 'yajl/deflate/stream_writer.rb' \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/deflate/stream_reader.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/deflate/stream_reader.rb deleted file mode 100644 index e3676af..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/deflate/stream_reader.rb +++ /dev/null @@ -1,43 +0,0 @@ -module Yajl - module Deflate - # This is a wrapper around Zlib::Inflate, creating a #read method that adheres - # to the IO spec, allowing for two parameters (length, and buffer) - class StreamReader < ::Zlib::Inflate - - # Wrapper to the initialize method so we can set the initial IO to parse from. - def initialize(io, options) - @io = io - super(options) - end - - # A helper method to allow use similar to IO#read - def read(len=nil, buffer=nil) - if val = @io.read(len) - unless buffer.nil? - buffer.replace(inflate(val)) - return buffer - end - inflate(@io.read(len)) - else - nil - end - end - - # Helper method for one-off parsing from a deflate-compressed stream - # - # See Yajl::Parser#parse for parameter documentation - def self.parse(input, options={}, buffer_size=nil, &block) - if input.is_a?(String) - input = StringIO.new(input) - end - - if options.is_a?(Hash) - deflate_options = options.delete(:deflate_options) - Yajl::Parser.new(options).parse(new(input, deflate_options), buffer_size, &block) - elsif options.is_a?(Fixnum) - Yajl::Parser.new.parse(new(input, options), buffer_size, &block) - end - end - end - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/deflate/stream_writer.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/deflate/stream_writer.rb deleted file mode 100644 index 55a518d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/deflate/stream_writer.rb +++ /dev/null @@ -1,20 +0,0 @@ -module Yajl - module Deflate - # A wrapper around the Zlib::Deflate class for easier JSON stream parsing - class StreamWriter < ::Zlib::Deflate - - # A helper method to allow use similar to IO#write - def write(str) - deflate(str) - str.size unless str.nil? - end - - # A helper method for one-off encoding to a deflate-compressed stream - # - # Look up Yajl::Encoder#encode for parameter documentation - def self.encode(obj, io) - Yajl::Encoder.new.encode(obj, new(io)) - end - end - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/gzip.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/gzip.rb deleted file mode 100644 index 9851a39..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/gzip.rb +++ /dev/null @@ -1,6 +0,0 @@ -puts "DEPRECATION WARNING: Yajl's Gzip support is going to be removed in 2.0" - -require 'yajl' unless defined?(Yajl::Parser) -require 'zlib' unless defined?(Zlib) -require 'yajl/gzip/stream_reader.rb' -require 'yajl/gzip/stream_writer.rb' \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/gzip/stream_reader.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/gzip/stream_reader.rb deleted file mode 100644 index b788ce2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/gzip/stream_reader.rb +++ /dev/null @@ -1,30 +0,0 @@ -module Yajl - module Gzip - # This is a wrapper around Zlib::GzipReader to allow it's #read method to adhere - # to the IO spec, allowing for two parameters (length, and buffer) - class StreamReader < ::Zlib::GzipReader - # A helper method to allow use similar to IO#read - def read(len=nil, buffer=nil) - if val = super(len) - unless buffer.nil? - buffer.replace(val) - return buffer - end - super(len) - else - nil - end - end - - # Helper method for one-off parsing from a gzip-compressed stream - # - # See Yajl::Parser#parse for parameter documentation - def self.parse(input, options={}, buffer_size=nil, &block) - if input.is_a?(String) - input = StringIO.new(input) - end - Yajl::Parser.new(options).parse(new(input), buffer_size, &block) - end - end - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/gzip/stream_writer.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/gzip/stream_writer.rb deleted file mode 100644 index 74d2780..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/gzip/stream_writer.rb +++ /dev/null @@ -1,13 +0,0 @@ -module Yajl - module Gzip - # Wraper around the Zlib::GzipWriter class - class StreamWriter < ::Zlib::GzipWriter - # A helper method for one-off encoding to a gzip-compressed stream - # - # Look up Yajl::Encoder#encode for parameter documentation - def self.encode(obj, io) - Yajl::Encoder.new.encode(obj, new(io)) - end - end - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/http_stream.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/http_stream.rb deleted file mode 100644 index 1960247..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/http_stream.rb +++ /dev/null @@ -1,212 +0,0 @@ -puts "DEPRECATION WARNING: Yajl::HttpStream is going to be removed in 2.0" - -require 'socket' -require 'yajl' -require 'yajl/version' unless defined? Yajl::VERSION -require 'uri' - -module Yajl - # This module is for making HTTP requests to which the response bodies (and possibly requests in the near future) - # are streamed directly into Yajl. - class HttpStream - - # This Exception is thrown when an HTTP response isn't in ALLOWED_MIME_TYPES - # and therefore cannot be parsed. - class InvalidContentType < Exception; end - class HttpError < StandardError - - attr_reader :message, :headers - - def initialize(message, headers) - @message = message - @headers = headers - end - end - - # The mime-type we expect the response to be. If it's anything else, we can't parse it - # and an InvalidContentType is raised. - ALLOWED_MIME_TYPES = ["application/json", "text/plain"] - - # Makes a basic HTTP GET request to the URI provided - def self.get(uri, opts = {}, &block) - request("GET", uri, opts, &block) - end - - # Makes a basic HTTP GET request to the URI provided allowing the user to terminate the connection - def get(uri, opts = {}, &block) - initialize_socket(uri, opts) - HttpStream::get(uri, opts, &block) - rescue IOError => e - raise e unless @intentional_termination - end - - # Makes a basic HTTP POST request to the URI provided - def self.post(uri, body, opts = {}, &block) - request("POST", uri, opts.merge({:body => body}), &block) - end - - # Makes a basic HTTP POST request to the URI provided allowing the user to terminate the connection - def post(uri, body, opts = {}, &block) - initialize_socket(uri, opts) - HttpStream::post(uri, body, opts, &block) - rescue IOError => e - raise e unless @intentional_termination - end - - # Makes a basic HTTP PUT request to the URI provided - def self.put(uri, body, opts = {}, &block) - request("PUT", uri, opts.merge({:body => body}), &block) - end - - # Makes a basic HTTP PUT request to the URI provided allowing the user to terminate the connection - def put(uri, body, opts = {}, &block) - initialize_socket(uri, opts) - HttpStream::put(uri, body, opts, &block) - rescue IOError => e - raise e unless @intentional_termination - end - - # Makes a basic HTTP DELETE request to the URI provided - def self.delete(uri, opts = {}, &block) - request("DELETE", uri, opts, &block) - end - - # Makes a basic HTTP DELETE request to the URI provided allowing the user to terminate the connection - def delete(uri, opts = {}, &block) - initialize_socket(uri, opts) - HttpStream::delete(uri, opts, &block) - rescue IOError => e - raise e unless @intentional_termination - end - - # Terminate a running HTTPStream instance - def terminate - @intentional_termination = true - @socket.close - end - - protected - def self.request(method, uri, opts = {}, &block) - if uri.is_a?(String) - uri = URI.parse(uri) - end - - default_headers = { - "User-Agent" => opts["User-Agent"] || "Yajl::HttpStream #{Yajl::VERSION}", - "Accept" => "*/*", - "Accept-Charset" => "utf-8" - } - - if method == "POST" || method == "PUT" - default_headers["Content-Type"] = opts["Content-Type"] || "application/x-www-form-urlencoded" - body = opts.delete(:body) - if body.is_a?(Hash) - body = body.keys.collect {|param| "#{URI.escape(param.to_s)}=#{URI.escape(body[param].to_s)}"}.join('&') - end - default_headers["Content-Length"] = body.length - end - - unless uri.userinfo.nil? - default_headers["Authorization"] = "Basic #{[uri.userinfo].pack('m').strip!}\r\n" - end - - encodings = [] - encodings << "bzip2" if defined?(Yajl::Bzip2) - encodings << "gzip" if defined?(Yajl::Gzip) - encodings << "deflate" if defined?(Yajl::Deflate) - if encodings.any? - default_headers["Accept-Encoding"] = "#{encodings.join(',')}\r\n" - end - - headers = default_headers.merge(opts[:headers] || {}) - - socket = opts.delete(:socket) || TCPSocket.new(uri.host, uri.port) - request = "#{method} #{uri.path}#{uri.query ? "?"+uri.query : nil} HTTP/1.1\r\n" - request << "Host: #{uri.host}\r\n" - headers.each do |k, v| - request << "#{k}: #{v}\r\n" - end - request << "\r\n" - if method == "POST" || method == "PUT" - request << body - end - socket.write(request) - response_head = {} - response_head[:headers] = {} - - socket.each_line do |line| - if line == "\r\n" # end of the headers - break - else - header = line.split(": ") - if header.size == 1 - header = header[0].split(" ") - response_head[:version] = header[0] - response_head[:code] = header[1].to_i - response_head[:msg] = header[2] - # this is the response code line - else - response_head[:headers][header[0]] = header[1].strip - end - end - end - - if (response_head[:code] != 200) - raise HttpError.new("Code 200 expected got #{response_head[:code]}", response_head[:headers]) - end - - parser = Yajl::Parser.new(opts) - parser.on_parse_complete = block if block_given? - if response_head[:headers]["Transfer-Encoding"] == 'chunked' - if block_given? - chunkLeft = 0 - while !socket.eof? && (line = socket.gets) - break if line.match /^0.*?\r\n/ - next if line == "\r\n" - size = line.hex - json = socket.read(size) - next if json.nil? - chunkLeft = size-json.size - if chunkLeft == 0 - parser << json - else - # received only part of the chunk, grab the rest - parser << socket.read(chunkLeft) - end - end - else - raise Exception, "Chunked responses detected, but no block given to handle the chunks." - end - else - content_type = response_head[:headers]["Content-Type"].split(';') - content_type = content_type.first - if ALLOWED_MIME_TYPES.include?(content_type) - case response_head[:headers]["Content-Encoding"] - when "gzip" - return Yajl::Gzip::StreamReader.parse(socket, opts, &block) - when "deflate" - return Yajl::Deflate::StreamReader.parse(socket, opts.merge({:deflate_options => -Zlib::MAX_WBITS}), &block) - when "bzip2" - return Yajl::Bzip2::StreamReader.parse(socket, opts, &block) - else - return parser.parse(socket) - end - else - raise InvalidContentType, "The response MIME type #{content_type}" - end - end - ensure - socket.close if !socket.nil? and !socket.closed? - end - - private - # Initialize socket and add it to the opts - def initialize_socket(uri, opts = {}) - return if opts[:socket] - - @socket = TCPSocket.new(uri.host, uri.port) - opts.merge!({:socket => @socket}) - @intentional_termination = false - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/json_gem.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/json_gem.rb deleted file mode 100644 index 93d138c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/json_gem.rb +++ /dev/null @@ -1,13 +0,0 @@ -require 'yajl' unless defined?(Yajl::Parser) -require 'yajl/json_gem/parsing' -require 'yajl/json_gem/encoding' - -module ::Kernel - def JSON(object, opts = {}) - if object.respond_to? :to_s - JSON.parse(object.to_s, JSON.default_options.merge(opts)) - else - JSON.generate(object, opts) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/json_gem/encoding.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/json_gem/encoding.rb deleted file mode 100644 index 0a3edac..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/json_gem/encoding.rb +++ /dev/null @@ -1,50 +0,0 @@ -require 'yajl' unless defined?(Yajl::Parser) - -# NOTE: this is probably temporary until I can split out the JSON compat C code into it's own -# extension that can be included when this file is. -Yajl::Encoder.enable_json_gem_compatability - -# Our fallback to_json definition -unless defined?(ActiveSupport) - class Object - def to_json(*args, &block) - "\"#{to_s}\"" - end - end -end - -module JSON - class JSONError < StandardError; end unless defined?(JSON::JSONError) - class GeneratorError < JSONError; end unless defined?(JSON::GeneratorError) - - def self.generate(obj, opts=nil) - opts ||= {} - options_map = {} - if opts.has_key?(:indent) - options_map[:pretty] = true - options_map[:indent] = opts[:indent] - end - Yajl::Encoder.encode(obj, options_map) - rescue Yajl::EncodeError => e - raise JSON::GeneratorError, e.message - end - - def self.pretty_generate(obj, opts={}) - begin - options_map = {} - options_map[:pretty] = true - options_map[:indent] = opts[:indent] if opts.has_key?(:indent) - Yajl::Encoder.encode(obj, options_map) - rescue Yajl::EncodeError => e - raise JSON::GeneratorError, e.message - end - end - - def self.dump(obj, io=nil, *args) - begin - Yajl::Encoder.encode(obj, io) - rescue Yajl::EncodeError => e - raise JSON::GeneratorError, e.message - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/json_gem/parsing.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/json_gem/parsing.rb deleted file mode 100644 index 80ba475..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/json_gem/parsing.rb +++ /dev/null @@ -1,26 +0,0 @@ -require 'yajl' unless defined?(Yajl::Parser) - -module JSON - class JSONError < StandardError; end unless defined?(JSON::JSONError) - class ParserError < JSONError; end unless defined?(JSON::ParserError) - - def self.default_options - @default_options ||= {:symbolize_keys => false} - end - - def self.parse(str, opts=JSON.default_options) - begin - Yajl::Parser.parse(str, opts) - rescue Yajl::ParseError => e - raise JSON::ParserError, e.message - end - end - - def self.load(input, *args) - begin - Yajl::Parser.parse(input, default_options) - rescue Yajl::ParseError => e - raise JSON::ParserError, e.message - end - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/version.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/version.rb deleted file mode 100644 index 67dadfc..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/lib/yajl/version.rb +++ /dev/null @@ -1,3 +0,0 @@ -module Yajl - VERSION = '1.2.3' -end diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/script/bootstrap b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/script/bootstrap deleted file mode 100755 index 500005c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/script/bootstrap +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -set -e - -cd "$(dirname "$0")/.." -exec bundle install --binstubs --path vendor/gems "$@" diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/encoding/encoding_spec.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/encoding/encoding_spec.rb deleted file mode 100644 index 818f028..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/encoding/encoding_spec.rb +++ /dev/null @@ -1,315 +0,0 @@ -# encoding: UTF-8 -require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb') -require 'tmpdir' -require 'zlib' - -class Dummy2 - def to_json - "{\"hawtness\":true}" - end -end - -class TheMindKiller - def to_json - nil - end -end - -class TheMindKillerDuce - def to_s - nil - end -end - -describe "Yajl JSON encoder" do - FILES = Dir[File.dirname(__FILE__)+'/../../benchmark/subjects/*.json'] - - FILES.each do |file| - it "should encode #{File.basename(file)} to an StringIO" do - # we don't care about testing the stream subject as it has multiple JSON strings in it - if File.basename(file) != 'twitter_stream.json' - input = File.new(File.expand_path(file), 'r') - io = StringIO.new - encoder = Yajl::Encoder.new - hash = Yajl::Parser.parse(input) - encoder.encode(hash, io) - io.rewind - hash2 = Yajl::Parser.parse(io) - io.close - input.close - hash.should == hash2 - end - end - end - - FILES.each do |file| - it "should encode #{File.basename(file)} to a Zlib::GzipWriter" do - # we don't care about testing the stream subject as it has multiple JSON strings in it - if File.basename(file) != 'twitter_stream.json' - hash = File.open(File.expand_path(file), 'r') do |input| - Yajl::Parser.parse(input) - end - hash2 = Dir.mktmpdir do |tmp_dir| - output_filename = File.join(tmp_dir, 'output.json') - Zlib::GzipWriter.open(output_filename) do |writer| - Yajl::Encoder.encode(hash, writer) - end - Zlib::GzipReader.open(output_filename) do |reader| - Yajl::Parser.parse(reader.read) - end - end - hash.should == hash2 - end - end - end - - FILES.each do |file| - it "should encode #{File.basename(file)} and return a String" do - # we don't care about testing the stream subject as it has multiple JSON strings in it - if File.basename(file) != 'twitter_stream.json' - input = File.new(File.expand_path(file), 'r') - encoder = Yajl::Encoder.new - hash = Yajl::Parser.parse(input) - output = encoder.encode(hash) - hash2 = Yajl::Parser.parse(output) - input.close - hash.should == hash2 - end - end - end - - FILES.each do |file| - it "should encode #{File.basename(file)} call the passed block, passing it a String" do - # we don't care about testing the stream subject as it has multiple JSON strings in it - if File.basename(file) != 'twitter_stream.json' - input = File.new(File.expand_path(file), 'r') - encoder = Yajl::Encoder.new - hash = Yajl::Parser.parse(input) - output = '' - encoder.encode(hash) do |json_str| - output << json_str - end - hash2 = Yajl::Parser.parse(output) - input.close - hash.should == hash2 - end - end - end - - it "should encode with :pretty turned on and a single space indent, to an IO" do - output = "{\n \"foo\": 1234\n}" - obj = {:foo => 1234} - io = StringIO.new - encoder = Yajl::Encoder.new(:pretty => true, :indent => ' ') - encoder.encode(obj, io) - io.rewind - io.read.should == output - end - - it "should encode with :pretty turned on and a single space indent, and return a String" do - output = "{\n \"foo\": 1234\n}" - obj = {:foo => 1234} - encoder = Yajl::Encoder.new(:pretty => true, :indent => ' ') - output = encoder.encode(obj) - output.should == output - end - - it "should encode with :pretty turned on and a tab character indent, to an IO" do - output = "{\n\t\"foo\": 1234\n}" - obj = {:foo => 1234} - io = StringIO.new - encoder = Yajl::Encoder.new(:pretty => true, :indent => "\t") - encoder.encode(obj, io) - io.rewind - io.read.should == output - end - - it "should encode with :pretty turned on and a tab character indent, and return a String" do - output = "{\n\t\"foo\": 1234\n}" - obj = {:foo => 1234} - encoder = Yajl::Encoder.new(:pretty => true, :indent => "\t") - output = encoder.encode(obj) - output.should == output - end - - it "should encode with it's class method with :pretty and a tab character indent options set, to an IO" do - output = "{\n\t\"foo\": 1234\n}" - obj = {:foo => 1234} - io = StringIO.new - Yajl::Encoder.encode(obj, io, :pretty => true, :indent => "\t") - io.rewind - io.read.should == output - end - - it "should encode with it's class method with :pretty and a tab character indent options set, and return a String" do - output = "{\n\t\"foo\": 1234\n}" - obj = {:foo => 1234} - output = Yajl::Encoder.encode(obj, :pretty => true, :indent => "\t") - output.should == output - end - - it "should encode with it's class method with :pretty and a tab character indent options set, to a block" do - output = "{\n\t\"foo\": 1234\n}" - obj = {:foo => 1234} - output = '' - Yajl::Encoder.encode(obj, :pretty => true, :indent => "\t") do |json_str| - output = json_str - end - output.should == output - end - - it "should encode multiple objects into a single stream, to an IO" do - io = StringIO.new - obj = {:foo => 1234} - encoder = Yajl::Encoder.new - 5.times do - encoder.encode(obj, io) - end - io.rewind - output = "{\"foo\":1234}{\"foo\":1234}{\"foo\":1234}{\"foo\":1234}{\"foo\":1234}" - io.read.should == output - end - - it "should encode multiple objects into a single stream, and return a String" do - obj = {:foo => 1234} - encoder = Yajl::Encoder.new - json_output = '' - 5.times do - json_output << encoder.encode(obj) - end - output = "{\"foo\":1234}{\"foo\":1234}{\"foo\":1234}{\"foo\":1234}{\"foo\":1234}" - json_output.should == output - end - - it "should encode all map keys as strings" do - Yajl::Encoder.encode({1=>1}).should eql("{\"1\":1}") - end - - it "should check for and call #to_json if it exists on custom objects" do - d = Dummy2.new - Yajl::Encoder.encode({:foo => d}).should eql('{"foo":{"hawtness":true}}') - end - - it "should encode a hash where the key and value can be symbols" do - Yajl::Encoder.encode({:foo => :bar}).should eql('{"foo":"bar"}') - end - - it "should encode using a newline or nil terminator" do - Yajl::Encoder.new(:terminator => "\n").encode({:foo => :bar}).should eql("{\"foo\":\"bar\"}\n") - Yajl::Encoder.new(:terminator => nil).encode({:foo => :bar}).should eql("{\"foo\":\"bar\"}") - end - - it "should encode using a newline or nil terminator, to an IO" do - s = StringIO.new - Yajl::Encoder.new(:terminator => "\n").encode({:foo => :bar}, s) - s.rewind - s.read.should eql("{\"foo\":\"bar\"}\n") - - s = StringIO.new - Yajl::Encoder.new(:terminator => nil).encode({:foo => :bar}, s) - s.rewind - s.read.should eql("{\"foo\":\"bar\"}") - end - - it "should encode using a newline or nil terminator, using a block" do - s = StringIO.new - Yajl::Encoder.new(:terminator => "\n").encode({:foo => :bar}) do |chunk| - s << chunk - end - s.rewind - s.read.should eql("{\"foo\":\"bar\"}\n") - - s = StringIO.new - nilpassed = false - Yajl::Encoder.new(:terminator => nil).encode({:foo => :bar}) do |chunk| - nilpassed = true if chunk.nil? - s << chunk - end - nilpassed.should be_true - s.rewind - s.read.should eql("{\"foo\":\"bar\"}") - end - - it "should not encode NaN" do - lambda { - Yajl::Encoder.encode(0.0/0.0) - }.should raise_error(Yajl::EncodeError) - end - - it "should not encode Infinity or -Infinity" do - lambda { - Yajl::Encoder.encode(1.0/0.0) - }.should raise_error(Yajl::EncodeError) - lambda { - Yajl::Encoder.encode(-1.0/0.0) - }.should raise_error(Yajl::EncodeError) - end - - it "should encode with unicode chars in the key" do - hash = {"æµ…è‰" => "<- those are unicode"} - Yajl::Encoder.encode(hash).should eql("{\"æµ…è‰\":\"<- those are unicode\"}") - end - - if RUBY_VERSION =~ /^1.9/ - it "should return a string encoded in utf-8 if Encoding.default_internal is nil" do - Encoding.default_internal = nil - hash = {"æµ…è‰" => "<- those are unicode"} - Yajl::Encoder.encode(hash).encoding.should eql(Encoding.find('utf-8')) - end - - it "should return a string encoded in utf-8 even if Encoding.default_internal *is* set" do - Encoding.default_internal = Encoding.find('utf-8') - hash = {"æµ…è‰" => "<- those are unicode"} - Yajl::Encoder.encode(hash).encoding.should eql(Encoding.default_internal) - Encoding.default_internal = Encoding.find('us-ascii') - hash = {"æµ…è‰" => "<- those are unicode"} - Yajl::Encoder.encode(hash).encoding.should eql(Encoding.find('utf-8')) - end - end - - it "should be able to escape / characters if html_safe is enabled" do - unsafe_encoder = Yajl::Encoder.new(:html_safe => false) - safe_encoder = Yajl::Encoder.new(:html_safe => true) - - unsafe_encoder.encode("").should_not eql("\"<\\/script>\"") - safe_encoder.encode("").should eql("\"<\\/script>\"") - end - - it "should default to *not* escaping / characters" do - unsafe_encoder = Yajl::Encoder.new - unsafe_encoder.encode("").should_not eql("\"<\\/script>\"") - end - - it "return value of #to_json must be a string" do - lambda { - Yajl::Encoder.encode(TheMindKiller.new) - }.should raise_error(TypeError) - end - - it "return value of #to_s must be a string" do - lambda { - if TheMindKillerDuce.send(:method_defined?, :to_json) - TheMindKillerDuce.send(:undef_method, :to_json) - end - Yajl::Encoder.encode(TheMindKillerDuce.new) - }.should raise_error(TypeError) - end - - it "should raise an exception for deeply nested arrays" do - root = [] - a = root - (Yajl::MAX_DEPTH + 1).times { |_| a << []; a = a[0] } - lambda { - Yajl::Encoder.encode(root) - }.should raise_error(Yajl::EncodeError) - end - - it "should raise an exception for deeply nested hashes" do - root = {} - a = root - (Yajl::MAX_DEPTH + 1).times { |_| a["a"] = {}; a = a["a"] } - lambda { - Yajl::Encoder.encode(root) - }.should raise_error(Yajl::EncodeError) - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/global/global_spec.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/global/global_spec.rb deleted file mode 100644 index 67dc4fd..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/global/global_spec.rb +++ /dev/null @@ -1,54 +0,0 @@ -require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb') - -describe "Yajl" do - context "dump" do - it "should exist as a class-method" do - Yajl.should respond_to(:dump) - end - - it "should be able to encode to a string" do - Yajl.dump({:a => 1234}).should eql('{"a":1234}') - end - - it "should be able to encode to an IO" do - io = StringIO.new - Yajl.dump({:a => 1234}, io) - io.rewind - io.read.should eql('{"a":1234}') - end - - it "should be able to encode with a block supplied" do - Yajl.dump({:a => 1234}) do |chunk| - chunk.should eql('{"a":1234}') - end - end - end - - context "load" do - it "should exist as a class-method" do - Yajl.should respond_to(:load) - end - - it "should be able to parse from a string" do - Yajl.load('{"a":1234}').should eql({"a" => 1234}) - end - - it "should be able to parse from an IO" do - io = StringIO.new('{"a":1234}') - Yajl.load(io).should eql({"a" => 1234}) - end - - it "should be able to parse from a string with a block supplied" do - Yajl.load('{"a":1234}') do |h| - h.should eql({"a" => 1234}) - end - end - - it "should be able to parse from an IO with a block supplied" do - io = StringIO.new('{"a":1234}') - Yajl.load(io) do |h| - h.should eql({"a" => 1234}) - end - end - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/fixtures/http.bzip2.dump b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/fixtures/http.bzip2.dump deleted file mode 100644 index cd1d8b99de01b0870eddef74f0b1aef16c64fbb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4916 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 diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/fixtures/http.chunked.dump b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/fixtures/http.chunked.dump deleted file mode 100644 index 14322da..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/fixtures/http.chunked.dump +++ /dev/null @@ -1,11 +0,0 @@ -HTTP/1.1 200 OK -Content-Type: application/json -Transfer-Encoding: chunked - -12f -{"item": {"name": "generated", "cached_tag_list": "", "updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "price": 1.99, "delta": false, "cost": 0.597, "account_id": 16, "unit": null, "import_tag": null, "taxable": true, "id": 1, "created_by_id": null, "description": null, "company_id": 0, "sk - -48 -u": "06317-0306", "created_at": "2009-03-24T05:25:09Z", "active": true}} - -0 \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/fixtures/http.deflate.dump b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/fixtures/http.deflate.dump deleted file mode 100644 index b143389424f36a5b175bd132acd14159e429e034..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5517 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

    mCbz`%8SpD||-u}%a6T9z>%imCX zEo?6yzCt$ejN1In2L5T;faOfL8>3z{zvanli_ej0BX_>am+-`mY(?Vca16^HLu?;A zoPGN4#1##qY+b*S(*7$k^k8UrNQvaLrkJt=`up zRN$Vtm5_8vy^GLU46=65RtOpeQ)}& POb7mJo!Ix{%ZvX9wg{H{ diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/fixtures/http.error.dump b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/fixtures/http.error.dump deleted file mode 100644 index 43b547b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/fixtures/http.error.dump +++ /dev/null @@ -1,12 +0,0 @@ -HTTP/1.1 404 NOT FOUND -Vary: Accept-Encoding -Content-Type: text/html -Accept-Ranges: bytes -ETag: "-1274243775" -Last-Modified: Thu, 30 Apr 2009 04:36:11 GMT -Content-Length: 32444 -Date: Wed, 24 Jun 2009 06:02:18 GMT -Server: lighttpd/1.4.22 -Transfer-Encoding: chunked - -THIS PAGE COULD NOT BE FOUND! diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/fixtures/http.gzip.dump b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/fixtures/http.gzip.dump deleted file mode 100644 index 46dc3b610374519fc77cb9bc6aa62e6da5357ccb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5531 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 diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/fixtures/http.html.dump b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/fixtures/http.html.dump deleted file mode 100644 index a03133b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/fixtures/http.html.dump +++ /dev/null @@ -1,1220 +0,0 @@ -HTTP/1.1 200 Not Acceptable -Content-Type: text/html; charset=iso-8859-1 -Server: Jetty(6.1.17) - -{ - "command": { - "ps": "ps -ef" - }, - "kernel": { - "modules": { - "org.virtualbox.kext.VBoxDrv": { - "size": 118784, - "version": "2.2.0", - "index": "114", - "refcount": "3" - }, - "com.cisco.nke.ipsec": { - "size": 454656, - "version": "2.0.1", - "index": "111", - "refcount": "0" - }, - "com.apple.driver.AppleAPIC": { - "size": 12288, - "version": "1.4", - "index": "26", - "refcount": "0" - }, - "com.apple.driver.AirPort.Atheros": { - "size": 593920, - "version": "318.8.3", - "index": "88", - "refcount": "0" - }, - "com.apple.driver.AppleIntelCPUPowerManagement": { - "size": 102400, - "version": "59.0.1", - "index": "22", - "refcount": "0" - }, - "com.apple.iokit.IOStorageFamily": { - "size": 98304, - "version": "1.5.5", - "index": "44", - "refcount": "9" - }, - "com.apple.iokit.IOATAPIProtocolTransport": { - "size": 16384, - "version": "1.5.2", - "index": "52", - "refcount": "0" - }, - "com.apple.iokit.IOPCIFamily": { - "size": 65536, - "version": "2.5", - "index": "17", - "refcount": "18" - }, - "com.apple.driver.AppleHPET": { - "size": 12288, - "version": "1.3", - "index": "33", - "refcount": "0" - }, - "com.apple.driver.AppleUSBHub": { - "size": 49152, - "version": "3.2.7", - "index": "47", - "refcount": "0" - }, - "com.apple.iokit.IOFireWireFamily": { - "size": 258048, - "version": "3.4.6", - "index": "49", - "refcount": "2" - }, - "com.apple.driver.AppleUSBComposite": { - "size": 16384, - "version": "3.2.0", - "index": "60", - "refcount": "1" - }, - "com.apple.driver.AppleIntelPIIXATA": { - "size": 36864, - "version": "2.0.0", - "index": "41", - "refcount": "0" - }, - "com.apple.driver.AppleSmartBatteryManager": { - "size": 28672, - "version": "158.6.0", - "index": "32", - "refcount": "0" - }, - "com.apple.filesystems.udf": { - "size": 233472, - "version": "2.0.2", - "index": "119", - "refcount": "0" - }, - "com.apple.iokit.IOSMBusFamily": { - "size": 12288, - "version": "1.1", - "index": "27", - "refcount": "2" - }, - "com.apple.iokit.IOACPIFamily": { - "size": 16384, - "version": "1.2.0", - "index": "18", - "refcount": "10" - }, - "foo.tap": { - "size": 24576, - "version": "1.0", - "index": "113", - "refcount": "0" - }, - "com.vmware.kext.vmx86": { - "size": 864256, - "version": "2.0.4", - "index": "104", - "refcount": "0" - }, - "com.apple.iokit.CHUDUtils": { - "size": 28672, - "version": "200", - "index": "98", - "refcount": "0" - }, - "org.virtualbox.kext.VBoxNetAdp": { - "size": 8192, - "version": "2.2.0", - "index": "117", - "refcount": "0" - }, - "com.apple.filesystems.autofs": { - "size": 45056, - "version": "2.0.1", - "index": "109", - "refcount": "0" - }, - "com.vmware.kext.vmnet": { - "size": 36864, - "version": "2.0.4", - "index": "108", - "refcount": "0" - }, - "com.apple.driver.AppleACPIButtons": { - "size": 16384, - "version": "1.2.4", - "index": "30", - "refcount": "0" - }, - "com.apple.driver.AppleFWOHCI": { - "size": 139264, - "version": "3.7.2", - "index": "50", - "refcount": "0" - }, - "com.apple.iokit.IOSCSIArchitectureModelFamily": { - "size": 102400, - "version": "2.0.5", - "index": "51", - "refcount": "4" - }, - "com.apple.iokit.IOSCSIBlockCommandsDevice": { - "size": 90112, - "version": "2.0.5", - "index": "57", - "refcount": "1" - }, - "com.apple.driver.AppleACPIPCI": { - "size": 12288, - "version": "1.2.4", - "index": "31", - "refcount": "0" - }, - "com.apple.security.seatbelt": { - "size": 98304, - "version": "107.10", - "index": "25", - "refcount": "0" - }, - "com.apple.driver.AppleUpstreamUserClient": { - "size": 16384, - "version": "2.7.2", - "index": "100", - "refcount": "0" - }, - "com.apple.kext.OSvKernDSPLib": { - "size": 12288, - "version": "1.1", - "index": "79", - "refcount": "1" - }, - "com.apple.iokit.IOBDStorageFamily": { - "size": 20480, - "version": "1.5", - "index": "58", - "refcount": "1" - }, - "com.apple.iokit.IOGraphicsFamily": { - "size": 118784, - "version": "1.7.1", - "index": "70", - "refcount": "5" - }, - "com.apple.iokit.IONetworkingFamily": { - "size": 90112, - "version": "1.6.1", - "index": "82", - "refcount": "4" - }, - "com.apple.iokit.IOATAFamily": { - "size": 53248, - "version": "2.0.0", - "index": "40", - "refcount": "2" - }, - "com.apple.iokit.IOUSBHIDDriver": { - "size": 20480, - "version": "3.2.2", - "index": "63", - "refcount": "2" - }, - "org.virtualbox.kext.VBoxUSB": { - "size": 28672, - "version": "2.2.0", - "index": "115", - "refcount": "0" - }, - "com.vmware.kext.vmioplug": { - "size": 24576, - "version": "2.0.4", - "index": "107", - "refcount": "0" - }, - "com.apple.security.TMSafetyNet": { - "size": 12288, - "version": "3", - "index": "23", - "refcount": "0" - }, - "com.apple.iokit.IONDRVSupport": { - "size": 57344, - "version": "1.7.1", - "index": "71", - "refcount": "3" - }, - "com.apple.BootCache": { - "size": 20480, - "version": "30.3", - "index": "20", - "refcount": "0" - }, - "com.apple.iokit.IOUSBUserClient": { - "size": 8192, - "version": "3.2.4", - "index": "46", - "refcount": "1" - }, - "com.apple.iokit.IOSCSIMultimediaCommandsDevice": { - "size": 90112, - "version": "2.0.5", - "index": "59", - "refcount": "0" - }, - "com.apple.driver.AppleIRController": { - "size": 20480, - "version": "110", - "index": "78", - "refcount": "0" - }, - "com.apple.driver.AudioIPCDriver": { - "size": 16384, - "version": "1.0.5", - "index": "81", - "refcount": "0" - }, - "org.virtualbox.kext.VBoxNetFlt": { - "size": 16384, - "version": "2.2.0", - "index": "116", - "refcount": "0" - }, - "com.apple.driver.AppleLPC": { - "size": 12288, - "version": "1.2.11", - "index": "73", - "refcount": "0" - }, - "com.apple.iokit.CHUDKernLib": { - "size": 20480, - "version": "196", - "index": "93", - "refcount": "2" - }, - "com.apple.iokit.CHUDProf": { - "size": 49152, - "version": "207", - "index": "97", - "refcount": "0" - }, - "com.apple.NVDAResman": { - "size": 2478080, - "version": "5.3.6", - "index": "90", - "refcount": "2" - }, - "com.apple.driver.AppleACPIEC": { - "size": 20480, - "version": "1.2.4", - "index": "28", - "refcount": "0" - }, - "foo.tun": { - "size": 24576, - "version": "1.0", - "index": "118", - "refcount": "0" - }, - "com.apple.iokit.IOSerialFamily": { - "size": 36864, - "version": "9.3", - "index": "102", - "refcount": "1" - }, - "com.apple.GeForce": { - "size": 622592, - "version": "5.3.6", - "index": "96", - "refcount": "0" - }, - "com.apple.iokit.IOCDStorageFamily": { - "size": 32768, - "version": "1.5", - "index": "55", - "refcount": "3" - }, - "com.apple.driver.AppleUSBEHCI": { - "size": 73728, - "version": "3.2.5", - "index": "39", - "refcount": "0" - }, - "com.apple.nvidia.nv50hal": { - "size": 2445312, - "version": "5.3.6", - "index": "91", - "refcount": "0" - }, - "com.apple.driver.AppleSMBIOS": { - "size": 16384, - "version": "1.1.1", - "index": "29", - "refcount": "0" - }, - "com.apple.driver.AppleBacklight": { - "size": 16384, - "version": "1.4.4", - "index": "72", - "refcount": "0" - }, - "com.apple.driver.AppleACPIPlatform": { - "size": 253952, - "version": "1.2.4", - "index": "19", - "refcount": "3" - }, - "com.apple.iokit.SCSITaskUserClient": { - "size": 24576, - "version": "2.0.5", - "index": "54", - "refcount": "0" - }, - "com.apple.iokit.IOHIDFamily": { - "size": 233472, - "version": "1.5.3", - "index": "21", - "refcount": "7" - }, - "com.apple.driver.DiskImages": { - "size": 65536, - "version": "195.2.2", - "index": "101", - "refcount": "0" - }, - "com.apple.iokit.IODVDStorageFamily": { - "size": 24576, - "version": "1.5", - "index": "56", - "refcount": "2" - }, - "com.apple.driver.XsanFilter": { - "size": 20480, - "version": "2.7.91", - "index": "53", - "refcount": "0" - }, - "com.apple.driver.AppleEFIRuntime": { - "size": 12288, - "version": "1.2.0", - "index": "35", - "refcount": "1" - }, - "com.apple.driver.AppleRTC": { - "size": 20480, - "version": "1.2.3", - "index": "34", - "refcount": "0" - }, - "com.apple.iokit.IOFireWireIP": { - "size": 36864, - "version": "1.7.6", - "index": "83", - "refcount": "0" - }, - "com.vmware.kext.vmci": { - "size": 45056, - "version": "2.0.4", - "index": "106", - "refcount": "0" - }, - "com.apple.iokit.IO80211Family": { - "size": 126976, - "version": "215.1", - "index": "87", - "refcount": "1" - }, - "com.apple.nke.applicationfirewall": { - "size": 32768, - "version": "1.0.77", - "index": "24", - "refcount": "0" - }, - "com.apple.iokit.IOAHCIBlockStorage": { - "size": 69632, - "version": "1.2.0", - "index": "48", - "refcount": "0" - }, - "com.apple.driver.AppleUSBUHCI": { - "size": 57344, - "version": "3.2.5", - "index": "38", - "refcount": "0" - }, - "com.apple.iokit.IOAHCIFamily": { - "size": 24576, - "version": "1.5.0", - "index": "42", - "refcount": "2" - }, - "com.apple.driver.AppleAHCIPort": { - "size": 53248, - "version": "1.5.2", - "index": "43", - "refcount": "0" - }, - "com.apple.driver.AppleEFINVRAM": { - "size": 24576, - "version": "1.2.0", - "index": "36", - "refcount": "0" - }, - "com.apple.iokit.IOUSBFamily": { - "size": 167936, - "version": "3.2.7", - "index": "37", - "refcount": "13" - }, - "com.apple.driver.AppleUSBMergeNub": { - "size": 12288, - "version": "3.2.4", - "index": "61", - "refcount": "0" - } - }, - "machine": "i386", - "name": "Darwin", - "os": "Darwin", - "version": "Darwin Kernel Version 9.6.0: Mon Nov 24 17:37:00 PST 2008; root:xnu-1228.9.59~1\/RELEASE_I386", - "release": "9.6.0" - }, - "platform_version": "10.5.6", - "platform": "mac_os_x", - "ipaddress": "192.168.88.1", - "keys": { - "ssh": { - "host_dsa_public": "private", - "host_rsa_public": "private" - } - }, - "network": { - "settings": { - "net.inet6.ip6.forwarding": "0", - "net.inet.ip.dummynet.debug": "0", - "net.inet.ip.rtexpire": "10", - "net.inet6.ipsec6.esp_trans_deflev": "1", - "net.inet.tcp.tcbhashsize": "4096", - "net.key.esp_auth": "0", - "net.inet6.ip6.hlim": "64", - "net.inet.ip.fw.dyn_fin_lifetime": "1", - "net.inet.ip.fw.dyn_udp_lifetime": "10", - "net.inet.icmp.bmcastecho": "1", - "net.athforceBias": "2 2", - "net.athbgscan": "1 1", - "net.inet.tcp.reass.maxsegments": "2048", - "net.inet6.ip6.auto_flowlabel": "1", - "net.inet6.ip6.rtmaxcache": "128", - "net.inet.tcp.sendspace": "131072", - "net.inet.tcp.keepinit": "75000", - "net.inet.ip.dummynet.max_chain_len": "16", - "net.inet.tcp.rfc1644": "0", - "net.inet.ip.fw.curr_dyn_buckets": "256", - "net.inet.ip.dummynet.ready_heap": "0", - "net.inet.ip.portrange.first": "49152", - "net.inet.tcp.background_io_trigger": "5", - "net.link.ether.inet.host_down_time": "20", - "net.inet6.ipsec6.def_policy": "1", - "net.inet6.ipsec6.ecn": "0", - "net.inet.ip.fastforwarding": "0", - "net.athaddbaignore": "0 0", - "net.inet6.ip6.v6only": "0", - "net.inet.tcp.sack": "1", - "net.inet6.ip6.rtexpire": "3600", - "net.link.ether.inet.proxyall": "0", - "net.inet6.ip6.keepfaith": "0", - "net.key.spi_trycnt": "1000", - "net.link.ether.inet.prune_intvl": "300", - "net.inet.tcp.ecn_initiate_out": "0", - "net.inet.ip.fw.dyn_rst_lifetime": "1", - "net.local.stream.sendspace": "8192", - "net.inet.tcp.socket_unlocked_on_output": "1", - "net.inet.ip.fw.verbose_limit": "0", - "net.local.dgram.recvspace": "4096", - "net.inet.ipsec.debug": "0", - "net.link.ether.inet.log_arp_warnings": "0", - "net.inet.tcp.ecn_negotiate_in": "0", - "net.inet.tcp.rfc3465": "1", - "net.inet.tcp.icmp_may_rst": "1", - "net.link.ether.inet.sendllconflict": "0", - "net.inet.ipsec.ah_offsetmask": "0", - "net.key.blockacq_count": "10", - "net.inet.tcp.delayed_ack": "3", - "net.inet.ip.fw.verbose": "2", - "net.inet.ip.fw.dyn_count": "0", - "net.inet.tcp.slowlink_wsize": "8192", - "net.inet6.ip6.fw.enable": "1", - "net.inet.ip.portrange.hilast": "65535", - "net.inet.icmp.maskrepl": "0", - "net.link.ether.inet.apple_hwcksum_rx": "1", - "net.inet.tcp.drop_synfin": "1", - "net.key.spi_maxval": "268435455", - "net.inet.ipsec.ecn": "0", - "net.inet.ip.fw.dyn_keepalive": "1", - "net.key.int_random": "60", - "net.key.debug": "0", - "net.inet.ip.dummynet.curr_time": "0", - "net.inet.udp.blackhole": "0", - "net.athaggrqmin": "1 1", - "net.athppmenable": "1 1", - "net.inet.ip.fw.dyn_syn_lifetime": "20", - "net.inet.tcp.keepidle": "7200000", - "net.inet6.ip6.tempvltime": "604800", - "net.inet.tcp.recvspace": "358400", - "net.inet.tcp.keepintvl": "75000", - "net.inet.udp.maxdgram": "9216", - "net.inet.ip.maxchainsent": "0", - "net.inet.ipsec.esp_net_deflev": "1", - "net.inet6.icmp6.nd6_useloopback": "1", - "net.inet.tcp.slowstart_flightsize": "1", - "net.inet.ip.fw.debug": "0", - "net.inet.ip.linklocal.in.allowbadttl": "1", - "net.key.spi_minval": "256", - "net.inet.ip.forwarding": "0", - "net.inet.tcp.v6mssdflt": "1024", - "net.key.larval_lifetime": "30", - "net.inet6.ip6.fw.verbose_limit": "0", - "net.inet.ip.dummynet.red_lookup_depth": "256", - "net.inet.tcp.pcbcount": "36", - "net.inet.ip.fw.dyn_ack_lifetime": "300", - "net.inet.ip.portrange.lowlast": "600", - "net.athCCAThreshold": "28 28", - "net.link.ether.inet.useloopback": "1", - "net.athqdepth": "0 0", - "net.inet.ip.ttl": "64", - "net.inet.ip.rtmaxcache": "128", - "net.inet.ipsec.bypass": "0", - "net.inet6.icmp6.nd6_debug": "0", - "net.inet.ip.use_route_genid": "1", - "net.inet6.icmp6.rediraccept": "1", - "net.inet.ip.fw.static_count": "1", - "net.inet6.ip6.fw.debug": "0", - "net.inet.udp.pcbcount": "104", - "net.inet.ipsec.esp_randpad": "-1", - "net.inet6.icmp6.nd6_maxnudhint": "0", - "net.inet.tcp.always_keepalive": "0", - "net.inet.udp.checksum": "1", - "net.link.ether.inet.keep_announcements": "1", - "net.athfixedDropThresh": "150 150", - "net.inet6.ip6.kame_version": "20010528\/apple-darwin", - "net.inet.ip.fw.dyn_max": "4096", - "net.inet.udp.log_in_vain": "0", - "net.inet6.icmp6.nd6_mmaxtries": "3", - "net.inet.ip.rtminexpire": "10", - "net.inet.ip.fw.dyn_buckets": "256", - "net.inet6.ip6.accept_rtadv": "0", - "net.inet6.ip6.rr_prune": "5", - "net.key.ah_keymin": "128", - "net.inet.ip.redirect": "1", - "net.inet.tcp.sack_globalmaxholes": "65536", - "net.inet.ip.keepfaith": "0", - "net.inet.ip.dummynet.expire": "1", - "net.inet.ip.gifttl": "30", - "net.inet.ip.portrange.last": "65535", - "net.inet.ipsec.ah_net_deflev": "1", - "net.inet6.icmp6.nd6_delay": "5", - "net.inet.tcp.packetchain": "50", - "net.inet6.ip6.hdrnestlimit": "50", - "net.inet.tcp.newreno": "0", - "net.inet6.ip6.dad_count": "1", - "net.inet6.ip6.auto_linklocal": "1", - "net.inet6.ip6.temppltime": "86400", - "net.inet.tcp.strict_rfc1948": "0", - "net.athdupie": "1 1", - "net.inet.ip.dummynet.red_max_pkt_size": "1500", - "net.inet.ip.maxfrags": "2048", - "net.inet.tcp.log_in_vain": "0", - "net.inet.tcp.rfc1323": "1", - "net.inet.ip.subnets_are_local": "0", - "net.inet.ip.dummynet.search_steps": "0", - "net.inet.icmp.icmplim": "250", - "net.link.ether.inet.apple_hwcksum_tx": "1", - "net.inet6.icmp6.redirtimeout": "600", - "net.inet.ipsec.ah_cleartos": "1", - "net.inet6.ip6.log_interval": "5", - "net.link.ether.inet.max_age": "1200", - "net.inet.ip.fw.enable": "1", - "net.inet6.ip6.redirect": "1", - "net.athaggrfmax": "28 28", - "net.inet.ip.maxfragsperpacket": "128", - "net.inet6.ip6.use_deprecated": "1", - "net.link.generic.system.dlil_input_sanity_check": "0", - "net.inet.tcp.sack_globalholes": "0", - "net.inet.tcp.reass.cursegments": "0", - "net.inet6.icmp6.nodeinfo": "3", - "net.local.inflight": "0", - "net.inet.ip.dummynet.hash_size": "64", - "net.inet.ip.dummynet.red_avg_pkt_size": "512", - "net.inet.ipsec.dfbit": "0", - "net.inet.tcp.reass.overflows": "0", - "net.inet.tcp.rexmt_thresh": "2", - "net.inet6.ip6.maxfrags": "8192", - "net.inet6.ip6.rtminexpire": "10", - "net.inet6.ipsec6.esp_net_deflev": "1", - "net.inet.tcp.blackhole": "0", - "net.key.esp_keymin": "256", - "net.inet.ip.check_interface": "0", - "net.inet.tcp.minmssoverload": "0", - "net.link.ether.inet.maxtries": "5", - "net.inet.tcp.do_tcpdrain": "0", - "net.inet.ipsec.esp_port": "4500", - "net.inet6.ipsec6.ah_net_deflev": "1", - "net.inet.ip.dummynet.extract_heap": "0", - "net.inet.tcp.path_mtu_discovery": "1", - "net.inet.ip.intr_queue_maxlen": "50", - "net.inet.ipsec.def_policy": "1", - "net.inet.ip.fw.autoinc_step": "100", - "net.inet.ip.accept_sourceroute": "0", - "net.inet.raw.maxdgram": "8192", - "net.inet.ip.maxfragpackets": "1024", - "net.inet.ip.fw.one_pass": "0", - "net.appletalk.routermix": "2000", - "net.inet.tcp.tcp_lq_overflow": "1", - "net.link.generic.system.ifcount": "9", - "net.link.ether.inet.send_conflicting_probes": "1", - "net.inet.tcp.background_io_enabled": "1", - "net.inet6.ipsec6.debug": "0", - "net.inet.tcp.win_scale_factor": "3", - "net.key.natt_keepalive_interval": "20", - "net.inet.tcp.msl": "15000", - "net.inet.ip.portrange.hifirst": "49152", - "net.inet.ipsec.ah_trans_deflev": "1", - "net.inet.tcp.rtt_min": "1", - "net.inet6.ip6.defmcasthlim": "1", - "net.inet6.icmp6.nd6_prune": "1", - "net.inet6.ip6.fw.verbose": "0", - "net.inet.ip.portrange.lowfirst": "1023", - "net.inet.tcp.maxseg_unacked": "8", - "net.local.dgram.maxdgram": "2048", - "net.key.blockacq_lifetime": "20", - "net.inet.tcp.sack_maxholes": "128", - "net.inet6.ip6.maxfragpackets": "1024", - "net.inet6.ip6.use_tempaddr": "0", - "net.athpowermode": "0 0", - "net.inet.udp.recvspace": "73728", - "net.inet.tcp.isn_reseed_interval": "0", - "net.inet.tcp.local_slowstart_flightsize": "8", - "net.inet.ip.dummynet.searches": "0", - "net.inet.ip.intr_queue_drops": "0", - "net.link.generic.system.multi_threaded_input": "1", - "net.inet.raw.recvspace": "8192", - "net.inet.ipsec.esp_trans_deflev": "1", - "net.key.prefered_oldsa": "0", - "net.local.stream.recvspace": "8192", - "net.inet.tcp.sockthreshold": "64", - "net.inet6.icmp6.nd6_umaxtries": "3", - "net.pstimeout": "20 20", - "net.inet.ip.sourceroute": "0", - "net.inet.ip.fw.dyn_short_lifetime": "5", - "net.inet.tcp.minmss": "216", - "net.inet6.ip6.gifhlim": "0", - "net.athvendorie": "1 1", - "net.inet.ip.check_route_selfref": "1", - "net.inet6.icmp6.errppslimit": "100", - "net.inet.tcp.mssdflt": "512", - "net.inet.icmp.log_redirect": "0", - "net.inet6.ipsec6.ah_trans_deflev": "1", - "net.inet6.ipsec6.esp_randpad": "-1", - "net.inet.icmp.drop_redirect": "0", - "net.inet.icmp.timestamp": "0", - "net.inet.ip.random_id": "1" - }, - "interfaces": { - "vmnet1": { - "flags": [ - "UP", - "BROADCAST", - "SMART", - "RUNNING", - "SIMPLEX", - "MULTICAST" - ], - "addresses": [ - { - "broadcast": "192.168.88.255", - "netmask": "255.255.255.0", - "family": "inet", - "address": "192.168.88.1" - }, - { - "family": "lladdr", - "address": "private" - } - ], - "number": "1", - "mtu": "1500", - "type": "vmnet", - "encapsulation": "Ethernet" - }, - "stf0": { - "flags": [ - - ], - "number": "0", - "mtu": "1280", - "type": "stf", - "encapsulation": "6to4" - }, - "vboxnet0": { - "flags": [ - "BROADCAST", - "RUNNING", - "SIMPLEX", - "MULTICAST" - ], - "addresses": [ - { - "family": "lladdr", - "address": "private" - } - ], - "number": "0", - "mtu": "1500", - "type": "vboxnet", - "encapsulation": "Ethernet" - }, - "lo0": { - "flags": [ - "UP", - "LOOPBACK", - "RUNNING", - "MULTICAST" - ], - "addresses": [ - { - "scope": "Link", - "prefixlen": "64", - "family": "inet6", - "address": "fe80::1" - }, - { - "netmask": "255.0.0.0", - "family": "inet", - "address": "127.0.0.1" - }, - { - "scope": "Node", - "prefixlen": "128", - "family": "inet6", - "address": "::1" - }, - { - "scope": "Node", - "prefixlen": "128", - "family": "inet6", - "address": "private" - } - ], - "number": "0", - "mtu": "16384", - "type": "lo", - "encapsulation": "Loopback" - }, - "vboxn": { - "counters": { - "tx": { - "bytes": "0", - "packets": "0", - "collisions": "0", - "compressed": 0, - "carrier": 0, - "drop": 0, - "errors": "0", - "overrun": 0 - }, - "rx": { - "bytes": "0", - "packets": "0", - "compressed": 0, - "drop": 0, - "errors": "0", - "overrun": 0, - "frame": 0, - "multicast": 0 - } - } - }, - "gif0": { - "flags": [ - "POINTOPOINT", - "MULTICAST" - ], - "number": "0", - "mtu": "1280", - "type": "gif", - "encapsulation": "IPIP" - }, - "vmnet": { - "counters": { - "tx": { - "bytes": "0", - "packets": "0", - "collisions": "0", - "compressed": 0, - "carrier": 0, - "drop": 0, - "errors": "0", - "overrun": 0 - }, - "rx": { - "bytes": "0", - "packets": "0", - "compressed": 0, - "drop": 0, - "errors": "0", - "overrun": 0, - "frame": 0, - "multicast": 0 - } - } - }, - "vmnet8": { - "flags": [ - "UP", - "BROADCAST", - "SMART", - "RUNNING", - "SIMPLEX", - "MULTICAST" - ], - "addresses": [ - { - "broadcast": "192.168.237.255", - "netmask": "255.255.255.0", - "family": "inet", - "address": "192.168.237.1" - }, - { - "family": "lladdr", - "address": "private" - } - ], - "number": "8", - "mtu": "1500", - "type": "vmnet", - "encapsulation": "Ethernet" - }, - "en0": { - "status": "inactive", - "flags": [ - "UP", - "BROADCAST", - "SMART", - "RUNNING", - "SIMPLEX", - "MULTICAST" - ], - "addresses": [ - { - "family": "lladdr", - "address": "private" - } - ], - "number": "0", - "mtu": "1500", - "media": { - "supported": [ - { - "autoselect": { - "options": [ - - ] - } - }, - { - "10baseT\/UTP": { - "options": [ - "half-duplex" - ] - } - }, - { - "10baseT\/UTP": { - "options": [ - "full-duplex" - ] - } - }, - { - "10baseT\/UTP": { - "options": [ - "full-duplex", - "hw-loopback" - ] - } - }, - { - "10baseT\/UTP": { - "options": [ - "full-duplex", - "flow-control" - ] - } - }, - { - "100baseTX": { - "options": [ - "half-duplex" - ] - } - }, - { - "100baseTX": { - "options": [ - "full-duplex" - ] - } - }, - { - "100baseTX": { - "options": [ - "full-duplex", - "hw-loopback" - ] - } - }, - { - "100baseTX": { - "options": [ - "full-duplex", - "flow-control" - ] - } - }, - { - "1000baseT": { - "options": [ - "full-duplex" - ] - } - }, - { - "1000baseT": { - "options": [ - "full-duplex", - "hw-loopback" - ] - } - }, - { - "1000baseT": { - "options": [ - "full-duplex", - "flow-control" - ] - } - }, - { - "none": { - "options": [ - - ] - } - } - ], - "selected": [ - { - "autoselect": { - "options": [ - - ] - } - } - ] - }, - "type": "en", - "counters": { - "tx": { - "bytes": "342", - "packets": "0", - "collisions": "0", - "compressed": 0, - "carrier": 0, - "drop": 0, - "errors": "0", - "overrun": 0 - }, - "rx": { - "bytes": "0", - "packets": "0", - "compressed": 0, - "drop": 0, - "errors": "0", - "overrun": 0, - "frame": 0, - "multicast": 0 - } - }, - "encapsulation": "Ethernet" - }, - "en1": { - "status": "active", - "flags": [ - "UP", - "BROADCAST", - "SMART", - "RUNNING", - "SIMPLEX", - "MULTICAST" - ], - "addresses": [ - { - "scope": "Link", - "prefixlen": "64", - "family": "inet6", - "address": "private" - }, - { - "broadcast": "192.168.1.255", - "netmask": "255.255.255.0", - "family": "inet", - "address": "192.168.1.4" - }, - { - "family": "lladdr", - "address": "private" - } - ], - "number": "1", - "mtu": "1500", - "media": { - "supported": [ - { - "autoselect": { - "options": [ - - ] - } - } - ], - "selected": [ - { - "autoselect": { - "options": [ - - ] - } - } - ] - }, - "type": "en", - "counters": { - "tx": { - "bytes": "449206298", - "packets": "7041789", - "collisions": "0", - "compressed": 0, - "carrier": 0, - "drop": 0, - "errors": "95", - "overrun": 0 - }, - "rx": { - "bytes": "13673879120", - "packets": "19966002", - "compressed": 0, - "drop": 0, - "errors": "1655893", - "overrun": 0, - "frame": 0, - "multicast": 0 - } - }, - "arp": { - "192.168.1.7": "private" - }, - "encapsulation": "Ethernet" - }, - "fw0": { - "status": "inactive", - "flags": [ - "UP", - "BROADCAST", - "SMART", - "RUNNING", - "SIMPLEX", - "MULTICAST" - ], - "addresses": [ - { - "family": "lladdr", - "address": "private" - } - ], - "number": "0", - "mtu": "4078", - "media": { - "supported": [ - { - "autoselect": { - "options": [ - "full-duplex" - ] - } - } - ], - "selected": [ - { - "autoselect": { - "options": [ - "full-duplex" - ] - } - } - ] - }, - "type": "fw", - "counters": { - "tx": { - "bytes": "346", - "packets": "0", - "collisions": "0", - "compressed": 0, - "carrier": 0, - "drop": 0, - "errors": "0", - "overrun": 0 - }, - "rx": { - "bytes": "0", - "packets": "0", - "compressed": 0, - "drop": 0, - "errors": "0", - "overrun": 0, - "frame": 0, - "multicast": 0 - } - }, - "encapsulation": "1394" - } - } - }, - "fqdn": "local.local", - "ohai_time": 1240624355.08575, - "domain": "local", - "os": "darwin", - "platform_build": "9G55", - "os_version": "9.6.0", - "hostname": "local", - "macaddress": "private", - "languages": { - "ruby": { - "target_os": "darwin9.0", - "platform": "universal-darwin9.0", - "host_vendor": "apple", - "target_vendor": "apple", - "target_cpu": "i686", - "host_os": "darwin9.0", - "host_cpu": "i686", - "version": "1.8.6", - "host": "i686-apple-darwin9.0", - "target": "i686-apple-darwin9.0", - "release_date": "2008-03-03" - } - } -} diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/fixtures/http.raw.dump b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/fixtures/http.raw.dump deleted file mode 100644 index c6b42d4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/fixtures/http.raw.dump +++ /dev/null @@ -1,1226 +0,0 @@ -HTTP/1.1 200 OK -Vary: Accept-Encoding -Content-Type: application/json -Accept-Ranges: bytes -ETag: "-1274243775" -Last-Modified: Thu, 30 Apr 2009 04:36:11 GMT -Content-Length: 32444 -Date: Wed, 24 Jun 2009 06:02:18 GMT -Server: lighttpd/1.4.22 - -{ - "command": { - "ps": "ps -ef" - }, - "kernel": { - "modules": { - "org.virtualbox.kext.VBoxDrv": { - "size": 118784, - "version": "2.2.0", - "index": "114", - "refcount": "3" - }, - "com.cisco.nke.ipsec": { - "size": 454656, - "version": "2.0.1", - "index": "111", - "refcount": "0" - }, - "com.apple.driver.AppleAPIC": { - "size": 12288, - "version": "1.4", - "index": "26", - "refcount": "0" - }, - "com.apple.driver.AirPort.Atheros": { - "size": 593920, - "version": "318.8.3", - "index": "88", - "refcount": "0" - }, - "com.apple.driver.AppleIntelCPUPowerManagement": { - "size": 102400, - "version": "59.0.1", - "index": "22", - "refcount": "0" - }, - "com.apple.iokit.IOStorageFamily": { - "size": 98304, - "version": "1.5.5", - "index": "44", - "refcount": "9" - }, - "com.apple.iokit.IOATAPIProtocolTransport": { - "size": 16384, - "version": "1.5.2", - "index": "52", - "refcount": "0" - }, - "com.apple.iokit.IOPCIFamily": { - "size": 65536, - "version": "2.5", - "index": "17", - "refcount": "18" - }, - "com.apple.driver.AppleHPET": { - "size": 12288, - "version": "1.3", - "index": "33", - "refcount": "0" - }, - "com.apple.driver.AppleUSBHub": { - "size": 49152, - "version": "3.2.7", - "index": "47", - "refcount": "0" - }, - "com.apple.iokit.IOFireWireFamily": { - "size": 258048, - "version": "3.4.6", - "index": "49", - "refcount": "2" - }, - "com.apple.driver.AppleUSBComposite": { - "size": 16384, - "version": "3.2.0", - "index": "60", - "refcount": "1" - }, - "com.apple.driver.AppleIntelPIIXATA": { - "size": 36864, - "version": "2.0.0", - "index": "41", - "refcount": "0" - }, - "com.apple.driver.AppleSmartBatteryManager": { - "size": 28672, - "version": "158.6.0", - "index": "32", - "refcount": "0" - }, - "com.apple.filesystems.udf": { - "size": 233472, - "version": "2.0.2", - "index": "119", - "refcount": "0" - }, - "com.apple.iokit.IOSMBusFamily": { - "size": 12288, - "version": "1.1", - "index": "27", - "refcount": "2" - }, - "com.apple.iokit.IOACPIFamily": { - "size": 16384, - "version": "1.2.0", - "index": "18", - "refcount": "10" - }, - "foo.tap": { - "size": 24576, - "version": "1.0", - "index": "113", - "refcount": "0" - }, - "com.vmware.kext.vmx86": { - "size": 864256, - "version": "2.0.4", - "index": "104", - "refcount": "0" - }, - "com.apple.iokit.CHUDUtils": { - "size": 28672, - "version": "200", - "index": "98", - "refcount": "0" - }, - "org.virtualbox.kext.VBoxNetAdp": { - "size": 8192, - "version": "2.2.0", - "index": "117", - "refcount": "0" - }, - "com.apple.filesystems.autofs": { - "size": 45056, - "version": "2.0.1", - "index": "109", - "refcount": "0" - }, - "com.vmware.kext.vmnet": { - "size": 36864, - "version": "2.0.4", - "index": "108", - "refcount": "0" - }, - "com.apple.driver.AppleACPIButtons": { - "size": 16384, - "version": "1.2.4", - "index": "30", - "refcount": "0" - }, - "com.apple.driver.AppleFWOHCI": { - "size": 139264, - "version": "3.7.2", - "index": "50", - "refcount": "0" - }, - "com.apple.iokit.IOSCSIArchitectureModelFamily": { - "size": 102400, - "version": "2.0.5", - "index": "51", - "refcount": "4" - }, - "com.apple.iokit.IOSCSIBlockCommandsDevice": { - "size": 90112, - "version": "2.0.5", - "index": "57", - "refcount": "1" - }, - "com.apple.driver.AppleACPIPCI": { - "size": 12288, - "version": "1.2.4", - "index": "31", - "refcount": "0" - }, - "com.apple.security.seatbelt": { - "size": 98304, - "version": "107.10", - "index": "25", - "refcount": "0" - }, - "com.apple.driver.AppleUpstreamUserClient": { - "size": 16384, - "version": "2.7.2", - "index": "100", - "refcount": "0" - }, - "com.apple.kext.OSvKernDSPLib": { - "size": 12288, - "version": "1.1", - "index": "79", - "refcount": "1" - }, - "com.apple.iokit.IOBDStorageFamily": { - "size": 20480, - "version": "1.5", - "index": "58", - "refcount": "1" - }, - "com.apple.iokit.IOGraphicsFamily": { - "size": 118784, - "version": "1.7.1", - "index": "70", - "refcount": "5" - }, - "com.apple.iokit.IONetworkingFamily": { - "size": 90112, - "version": "1.6.1", - "index": "82", - "refcount": "4" - }, - "com.apple.iokit.IOATAFamily": { - "size": 53248, - "version": "2.0.0", - "index": "40", - "refcount": "2" - }, - "com.apple.iokit.IOUSBHIDDriver": { - "size": 20480, - "version": "3.2.2", - "index": "63", - "refcount": "2" - }, - "org.virtualbox.kext.VBoxUSB": { - "size": 28672, - "version": "2.2.0", - "index": "115", - "refcount": "0" - }, - "com.vmware.kext.vmioplug": { - "size": 24576, - "version": "2.0.4", - "index": "107", - "refcount": "0" - }, - "com.apple.security.TMSafetyNet": { - "size": 12288, - "version": "3", - "index": "23", - "refcount": "0" - }, - "com.apple.iokit.IONDRVSupport": { - "size": 57344, - "version": "1.7.1", - "index": "71", - "refcount": "3" - }, - "com.apple.BootCache": { - "size": 20480, - "version": "30.3", - "index": "20", - "refcount": "0" - }, - "com.apple.iokit.IOUSBUserClient": { - "size": 8192, - "version": "3.2.4", - "index": "46", - "refcount": "1" - }, - "com.apple.iokit.IOSCSIMultimediaCommandsDevice": { - "size": 90112, - "version": "2.0.5", - "index": "59", - "refcount": "0" - }, - "com.apple.driver.AppleIRController": { - "size": 20480, - "version": "110", - "index": "78", - "refcount": "0" - }, - "com.apple.driver.AudioIPCDriver": { - "size": 16384, - "version": "1.0.5", - "index": "81", - "refcount": "0" - }, - "org.virtualbox.kext.VBoxNetFlt": { - "size": 16384, - "version": "2.2.0", - "index": "116", - "refcount": "0" - }, - "com.apple.driver.AppleLPC": { - "size": 12288, - "version": "1.2.11", - "index": "73", - "refcount": "0" - }, - "com.apple.iokit.CHUDKernLib": { - "size": 20480, - "version": "196", - "index": "93", - "refcount": "2" - }, - "com.apple.iokit.CHUDProf": { - "size": 49152, - "version": "207", - "index": "97", - "refcount": "0" - }, - "com.apple.NVDAResman": { - "size": 2478080, - "version": "5.3.6", - "index": "90", - "refcount": "2" - }, - "com.apple.driver.AppleACPIEC": { - "size": 20480, - "version": "1.2.4", - "index": "28", - "refcount": "0" - }, - "foo.tun": { - "size": 24576, - "version": "1.0", - "index": "118", - "refcount": "0" - }, - "com.apple.iokit.IOSerialFamily": { - "size": 36864, - "version": "9.3", - "index": "102", - "refcount": "1" - }, - "com.apple.GeForce": { - "size": 622592, - "version": "5.3.6", - "index": "96", - "refcount": "0" - }, - "com.apple.iokit.IOCDStorageFamily": { - "size": 32768, - "version": "1.5", - "index": "55", - "refcount": "3" - }, - "com.apple.driver.AppleUSBEHCI": { - "size": 73728, - "version": "3.2.5", - "index": "39", - "refcount": "0" - }, - "com.apple.nvidia.nv50hal": { - "size": 2445312, - "version": "5.3.6", - "index": "91", - "refcount": "0" - }, - "com.apple.driver.AppleSMBIOS": { - "size": 16384, - "version": "1.1.1", - "index": "29", - "refcount": "0" - }, - "com.apple.driver.AppleBacklight": { - "size": 16384, - "version": "1.4.4", - "index": "72", - "refcount": "0" - }, - "com.apple.driver.AppleACPIPlatform": { - "size": 253952, - "version": "1.2.4", - "index": "19", - "refcount": "3" - }, - "com.apple.iokit.SCSITaskUserClient": { - "size": 24576, - "version": "2.0.5", - "index": "54", - "refcount": "0" - }, - "com.apple.iokit.IOHIDFamily": { - "size": 233472, - "version": "1.5.3", - "index": "21", - "refcount": "7" - }, - "com.apple.driver.DiskImages": { - "size": 65536, - "version": "195.2.2", - "index": "101", - "refcount": "0" - }, - "com.apple.iokit.IODVDStorageFamily": { - "size": 24576, - "version": "1.5", - "index": "56", - "refcount": "2" - }, - "com.apple.driver.XsanFilter": { - "size": 20480, - "version": "2.7.91", - "index": "53", - "refcount": "0" - }, - "com.apple.driver.AppleEFIRuntime": { - "size": 12288, - "version": "1.2.0", - "index": "35", - "refcount": "1" - }, - "com.apple.driver.AppleRTC": { - "size": 20480, - "version": "1.2.3", - "index": "34", - "refcount": "0" - }, - "com.apple.iokit.IOFireWireIP": { - "size": 36864, - "version": "1.7.6", - "index": "83", - "refcount": "0" - }, - "com.vmware.kext.vmci": { - "size": 45056, - "version": "2.0.4", - "index": "106", - "refcount": "0" - }, - "com.apple.iokit.IO80211Family": { - "size": 126976, - "version": "215.1", - "index": "87", - "refcount": "1" - }, - "com.apple.nke.applicationfirewall": { - "size": 32768, - "version": "1.0.77", - "index": "24", - "refcount": "0" - }, - "com.apple.iokit.IOAHCIBlockStorage": { - "size": 69632, - "version": "1.2.0", - "index": "48", - "refcount": "0" - }, - "com.apple.driver.AppleUSBUHCI": { - "size": 57344, - "version": "3.2.5", - "index": "38", - "refcount": "0" - }, - "com.apple.iokit.IOAHCIFamily": { - "size": 24576, - "version": "1.5.0", - "index": "42", - "refcount": "2" - }, - "com.apple.driver.AppleAHCIPort": { - "size": 53248, - "version": "1.5.2", - "index": "43", - "refcount": "0" - }, - "com.apple.driver.AppleEFINVRAM": { - "size": 24576, - "version": "1.2.0", - "index": "36", - "refcount": "0" - }, - "com.apple.iokit.IOUSBFamily": { - "size": 167936, - "version": "3.2.7", - "index": "37", - "refcount": "13" - }, - "com.apple.driver.AppleUSBMergeNub": { - "size": 12288, - "version": "3.2.4", - "index": "61", - "refcount": "0" - } - }, - "machine": "i386", - "name": "Darwin", - "os": "Darwin", - "version": "Darwin Kernel Version 9.6.0: Mon Nov 24 17:37:00 PST 2008; root:xnu-1228.9.59~1\/RELEASE_I386", - "release": "9.6.0" - }, - "platform_version": "10.5.6", - "platform": "mac_os_x", - "ipaddress": "192.168.88.1", - "keys": { - "ssh": { - "host_dsa_public": "private", - "host_rsa_public": "private" - } - }, - "network": { - "settings": { - "net.inet6.ip6.forwarding": "0", - "net.inet.ip.dummynet.debug": "0", - "net.inet.ip.rtexpire": "10", - "net.inet6.ipsec6.esp_trans_deflev": "1", - "net.inet.tcp.tcbhashsize": "4096", - "net.key.esp_auth": "0", - "net.inet6.ip6.hlim": "64", - "net.inet.ip.fw.dyn_fin_lifetime": "1", - "net.inet.ip.fw.dyn_udp_lifetime": "10", - "net.inet.icmp.bmcastecho": "1", - "net.athforceBias": "2 2", - "net.athbgscan": "1 1", - "net.inet.tcp.reass.maxsegments": "2048", - "net.inet6.ip6.auto_flowlabel": "1", - "net.inet6.ip6.rtmaxcache": "128", - "net.inet.tcp.sendspace": "131072", - "net.inet.tcp.keepinit": "75000", - "net.inet.ip.dummynet.max_chain_len": "16", - "net.inet.tcp.rfc1644": "0", - "net.inet.ip.fw.curr_dyn_buckets": "256", - "net.inet.ip.dummynet.ready_heap": "0", - "net.inet.ip.portrange.first": "49152", - "net.inet.tcp.background_io_trigger": "5", - "net.link.ether.inet.host_down_time": "20", - "net.inet6.ipsec6.def_policy": "1", - "net.inet6.ipsec6.ecn": "0", - "net.inet.ip.fastforwarding": "0", - "net.athaddbaignore": "0 0", - "net.inet6.ip6.v6only": "0", - "net.inet.tcp.sack": "1", - "net.inet6.ip6.rtexpire": "3600", - "net.link.ether.inet.proxyall": "0", - "net.inet6.ip6.keepfaith": "0", - "net.key.spi_trycnt": "1000", - "net.link.ether.inet.prune_intvl": "300", - "net.inet.tcp.ecn_initiate_out": "0", - "net.inet.ip.fw.dyn_rst_lifetime": "1", - "net.local.stream.sendspace": "8192", - "net.inet.tcp.socket_unlocked_on_output": "1", - "net.inet.ip.fw.verbose_limit": "0", - "net.local.dgram.recvspace": "4096", - "net.inet.ipsec.debug": "0", - "net.link.ether.inet.log_arp_warnings": "0", - "net.inet.tcp.ecn_negotiate_in": "0", - "net.inet.tcp.rfc3465": "1", - "net.inet.tcp.icmp_may_rst": "1", - "net.link.ether.inet.sendllconflict": "0", - "net.inet.ipsec.ah_offsetmask": "0", - "net.key.blockacq_count": "10", - "net.inet.tcp.delayed_ack": "3", - "net.inet.ip.fw.verbose": "2", - "net.inet.ip.fw.dyn_count": "0", - "net.inet.tcp.slowlink_wsize": "8192", - "net.inet6.ip6.fw.enable": "1", - "net.inet.ip.portrange.hilast": "65535", - "net.inet.icmp.maskrepl": "0", - "net.link.ether.inet.apple_hwcksum_rx": "1", - "net.inet.tcp.drop_synfin": "1", - "net.key.spi_maxval": "268435455", - "net.inet.ipsec.ecn": "0", - "net.inet.ip.fw.dyn_keepalive": "1", - "net.key.int_random": "60", - "net.key.debug": "0", - "net.inet.ip.dummynet.curr_time": "0", - "net.inet.udp.blackhole": "0", - "net.athaggrqmin": "1 1", - "net.athppmenable": "1 1", - "net.inet.ip.fw.dyn_syn_lifetime": "20", - "net.inet.tcp.keepidle": "7200000", - "net.inet6.ip6.tempvltime": "604800", - "net.inet.tcp.recvspace": "358400", - "net.inet.tcp.keepintvl": "75000", - "net.inet.udp.maxdgram": "9216", - "net.inet.ip.maxchainsent": "0", - "net.inet.ipsec.esp_net_deflev": "1", - "net.inet6.icmp6.nd6_useloopback": "1", - "net.inet.tcp.slowstart_flightsize": "1", - "net.inet.ip.fw.debug": "0", - "net.inet.ip.linklocal.in.allowbadttl": "1", - "net.key.spi_minval": "256", - "net.inet.ip.forwarding": "0", - "net.inet.tcp.v6mssdflt": "1024", - "net.key.larval_lifetime": "30", - "net.inet6.ip6.fw.verbose_limit": "0", - "net.inet.ip.dummynet.red_lookup_depth": "256", - "net.inet.tcp.pcbcount": "36", - "net.inet.ip.fw.dyn_ack_lifetime": "300", - "net.inet.ip.portrange.lowlast": "600", - "net.athCCAThreshold": "28 28", - "net.link.ether.inet.useloopback": "1", - "net.athqdepth": "0 0", - "net.inet.ip.ttl": "64", - "net.inet.ip.rtmaxcache": "128", - "net.inet.ipsec.bypass": "0", - "net.inet6.icmp6.nd6_debug": "0", - "net.inet.ip.use_route_genid": "1", - "net.inet6.icmp6.rediraccept": "1", - "net.inet.ip.fw.static_count": "1", - "net.inet6.ip6.fw.debug": "0", - "net.inet.udp.pcbcount": "104", - "net.inet.ipsec.esp_randpad": "-1", - "net.inet6.icmp6.nd6_maxnudhint": "0", - "net.inet.tcp.always_keepalive": "0", - "net.inet.udp.checksum": "1", - "net.link.ether.inet.keep_announcements": "1", - "net.athfixedDropThresh": "150 150", - "net.inet6.ip6.kame_version": "20010528\/apple-darwin", - "net.inet.ip.fw.dyn_max": "4096", - "net.inet.udp.log_in_vain": "0", - "net.inet6.icmp6.nd6_mmaxtries": "3", - "net.inet.ip.rtminexpire": "10", - "net.inet.ip.fw.dyn_buckets": "256", - "net.inet6.ip6.accept_rtadv": "0", - "net.inet6.ip6.rr_prune": "5", - "net.key.ah_keymin": "128", - "net.inet.ip.redirect": "1", - "net.inet.tcp.sack_globalmaxholes": "65536", - "net.inet.ip.keepfaith": "0", - "net.inet.ip.dummynet.expire": "1", - "net.inet.ip.gifttl": "30", - "net.inet.ip.portrange.last": "65535", - "net.inet.ipsec.ah_net_deflev": "1", - "net.inet6.icmp6.nd6_delay": "5", - "net.inet.tcp.packetchain": "50", - "net.inet6.ip6.hdrnestlimit": "50", - "net.inet.tcp.newreno": "0", - "net.inet6.ip6.dad_count": "1", - "net.inet6.ip6.auto_linklocal": "1", - "net.inet6.ip6.temppltime": "86400", - "net.inet.tcp.strict_rfc1948": "0", - "net.athdupie": "1 1", - "net.inet.ip.dummynet.red_max_pkt_size": "1500", - "net.inet.ip.maxfrags": "2048", - "net.inet.tcp.log_in_vain": "0", - "net.inet.tcp.rfc1323": "1", - "net.inet.ip.subnets_are_local": "0", - "net.inet.ip.dummynet.search_steps": "0", - "net.inet.icmp.icmplim": "250", - "net.link.ether.inet.apple_hwcksum_tx": "1", - "net.inet6.icmp6.redirtimeout": "600", - "net.inet.ipsec.ah_cleartos": "1", - "net.inet6.ip6.log_interval": "5", - "net.link.ether.inet.max_age": "1200", - "net.inet.ip.fw.enable": "1", - "net.inet6.ip6.redirect": "1", - "net.athaggrfmax": "28 28", - "net.inet.ip.maxfragsperpacket": "128", - "net.inet6.ip6.use_deprecated": "1", - "net.link.generic.system.dlil_input_sanity_check": "0", - "net.inet.tcp.sack_globalholes": "0", - "net.inet.tcp.reass.cursegments": "0", - "net.inet6.icmp6.nodeinfo": "3", - "net.local.inflight": "0", - "net.inet.ip.dummynet.hash_size": "64", - "net.inet.ip.dummynet.red_avg_pkt_size": "512", - "net.inet.ipsec.dfbit": "0", - "net.inet.tcp.reass.overflows": "0", - "net.inet.tcp.rexmt_thresh": "2", - "net.inet6.ip6.maxfrags": "8192", - "net.inet6.ip6.rtminexpire": "10", - "net.inet6.ipsec6.esp_net_deflev": "1", - "net.inet.tcp.blackhole": "0", - "net.key.esp_keymin": "256", - "net.inet.ip.check_interface": "0", - "net.inet.tcp.minmssoverload": "0", - "net.link.ether.inet.maxtries": "5", - "net.inet.tcp.do_tcpdrain": "0", - "net.inet.ipsec.esp_port": "4500", - "net.inet6.ipsec6.ah_net_deflev": "1", - "net.inet.ip.dummynet.extract_heap": "0", - "net.inet.tcp.path_mtu_discovery": "1", - "net.inet.ip.intr_queue_maxlen": "50", - "net.inet.ipsec.def_policy": "1", - "net.inet.ip.fw.autoinc_step": "100", - "net.inet.ip.accept_sourceroute": "0", - "net.inet.raw.maxdgram": "8192", - "net.inet.ip.maxfragpackets": "1024", - "net.inet.ip.fw.one_pass": "0", - "net.appletalk.routermix": "2000", - "net.inet.tcp.tcp_lq_overflow": "1", - "net.link.generic.system.ifcount": "9", - "net.link.ether.inet.send_conflicting_probes": "1", - "net.inet.tcp.background_io_enabled": "1", - "net.inet6.ipsec6.debug": "0", - "net.inet.tcp.win_scale_factor": "3", - "net.key.natt_keepalive_interval": "20", - "net.inet.tcp.msl": "15000", - "net.inet.ip.portrange.hifirst": "49152", - "net.inet.ipsec.ah_trans_deflev": "1", - "net.inet.tcp.rtt_min": "1", - "net.inet6.ip6.defmcasthlim": "1", - "net.inet6.icmp6.nd6_prune": "1", - "net.inet6.ip6.fw.verbose": "0", - "net.inet.ip.portrange.lowfirst": "1023", - "net.inet.tcp.maxseg_unacked": "8", - "net.local.dgram.maxdgram": "2048", - "net.key.blockacq_lifetime": "20", - "net.inet.tcp.sack_maxholes": "128", - "net.inet6.ip6.maxfragpackets": "1024", - "net.inet6.ip6.use_tempaddr": "0", - "net.athpowermode": "0 0", - "net.inet.udp.recvspace": "73728", - "net.inet.tcp.isn_reseed_interval": "0", - "net.inet.tcp.local_slowstart_flightsize": "8", - "net.inet.ip.dummynet.searches": "0", - "net.inet.ip.intr_queue_drops": "0", - "net.link.generic.system.multi_threaded_input": "1", - "net.inet.raw.recvspace": "8192", - "net.inet.ipsec.esp_trans_deflev": "1", - "net.key.prefered_oldsa": "0", - "net.local.stream.recvspace": "8192", - "net.inet.tcp.sockthreshold": "64", - "net.inet6.icmp6.nd6_umaxtries": "3", - "net.pstimeout": "20 20", - "net.inet.ip.sourceroute": "0", - "net.inet.ip.fw.dyn_short_lifetime": "5", - "net.inet.tcp.minmss": "216", - "net.inet6.ip6.gifhlim": "0", - "net.athvendorie": "1 1", - "net.inet.ip.check_route_selfref": "1", - "net.inet6.icmp6.errppslimit": "100", - "net.inet.tcp.mssdflt": "512", - "net.inet.icmp.log_redirect": "0", - "net.inet6.ipsec6.ah_trans_deflev": "1", - "net.inet6.ipsec6.esp_randpad": "-1", - "net.inet.icmp.drop_redirect": "0", - "net.inet.icmp.timestamp": "0", - "net.inet.ip.random_id": "1" - }, - "interfaces": { - "vmnet1": { - "flags": [ - "UP", - "BROADCAST", - "SMART", - "RUNNING", - "SIMPLEX", - "MULTICAST" - ], - "addresses": [ - { - "broadcast": "192.168.88.255", - "netmask": "255.255.255.0", - "family": "inet", - "address": "192.168.88.1" - }, - { - "family": "lladdr", - "address": "private" - } - ], - "number": "1", - "mtu": "1500", - "type": "vmnet", - "encapsulation": "Ethernet" - }, - "stf0": { - "flags": [ - - ], - "number": "0", - "mtu": "1280", - "type": "stf", - "encapsulation": "6to4" - }, - "vboxnet0": { - "flags": [ - "BROADCAST", - "RUNNING", - "SIMPLEX", - "MULTICAST" - ], - "addresses": [ - { - "family": "lladdr", - "address": "private" - } - ], - "number": "0", - "mtu": "1500", - "type": "vboxnet", - "encapsulation": "Ethernet" - }, - "lo0": { - "flags": [ - "UP", - "LOOPBACK", - "RUNNING", - "MULTICAST" - ], - "addresses": [ - { - "scope": "Link", - "prefixlen": "64", - "family": "inet6", - "address": "fe80::1" - }, - { - "netmask": "255.0.0.0", - "family": "inet", - "address": "127.0.0.1" - }, - { - "scope": "Node", - "prefixlen": "128", - "family": "inet6", - "address": "::1" - }, - { - "scope": "Node", - "prefixlen": "128", - "family": "inet6", - "address": "private" - } - ], - "number": "0", - "mtu": "16384", - "type": "lo", - "encapsulation": "Loopback" - }, - "vboxn": { - "counters": { - "tx": { - "bytes": "0", - "packets": "0", - "collisions": "0", - "compressed": 0, - "carrier": 0, - "drop": 0, - "errors": "0", - "overrun": 0 - }, - "rx": { - "bytes": "0", - "packets": "0", - "compressed": 0, - "drop": 0, - "errors": "0", - "overrun": 0, - "frame": 0, - "multicast": 0 - } - } - }, - "gif0": { - "flags": [ - "POINTOPOINT", - "MULTICAST" - ], - "number": "0", - "mtu": "1280", - "type": "gif", - "encapsulation": "IPIP" - }, - "vmnet": { - "counters": { - "tx": { - "bytes": "0", - "packets": "0", - "collisions": "0", - "compressed": 0, - "carrier": 0, - "drop": 0, - "errors": "0", - "overrun": 0 - }, - "rx": { - "bytes": "0", - "packets": "0", - "compressed": 0, - "drop": 0, - "errors": "0", - "overrun": 0, - "frame": 0, - "multicast": 0 - } - } - }, - "vmnet8": { - "flags": [ - "UP", - "BROADCAST", - "SMART", - "RUNNING", - "SIMPLEX", - "MULTICAST" - ], - "addresses": [ - { - "broadcast": "192.168.237.255", - "netmask": "255.255.255.0", - "family": "inet", - "address": "192.168.237.1" - }, - { - "family": "lladdr", - "address": "private" - } - ], - "number": "8", - "mtu": "1500", - "type": "vmnet", - "encapsulation": "Ethernet" - }, - "en0": { - "status": "inactive", - "flags": [ - "UP", - "BROADCAST", - "SMART", - "RUNNING", - "SIMPLEX", - "MULTICAST" - ], - "addresses": [ - { - "family": "lladdr", - "address": "private" - } - ], - "number": "0", - "mtu": "1500", - "media": { - "supported": [ - { - "autoselect": { - "options": [ - - ] - } - }, - { - "10baseT\/UTP": { - "options": [ - "half-duplex" - ] - } - }, - { - "10baseT\/UTP": { - "options": [ - "full-duplex" - ] - } - }, - { - "10baseT\/UTP": { - "options": [ - "full-duplex", - "hw-loopback" - ] - } - }, - { - "10baseT\/UTP": { - "options": [ - "full-duplex", - "flow-control" - ] - } - }, - { - "100baseTX": { - "options": [ - "half-duplex" - ] - } - }, - { - "100baseTX": { - "options": [ - "full-duplex" - ] - } - }, - { - "100baseTX": { - "options": [ - "full-duplex", - "hw-loopback" - ] - } - }, - { - "100baseTX": { - "options": [ - "full-duplex", - "flow-control" - ] - } - }, - { - "1000baseT": { - "options": [ - "full-duplex" - ] - } - }, - { - "1000baseT": { - "options": [ - "full-duplex", - "hw-loopback" - ] - } - }, - { - "1000baseT": { - "options": [ - "full-duplex", - "flow-control" - ] - } - }, - { - "none": { - "options": [ - - ] - } - } - ], - "selected": [ - { - "autoselect": { - "options": [ - - ] - } - } - ] - }, - "type": "en", - "counters": { - "tx": { - "bytes": "342", - "packets": "0", - "collisions": "0", - "compressed": 0, - "carrier": 0, - "drop": 0, - "errors": "0", - "overrun": 0 - }, - "rx": { - "bytes": "0", - "packets": "0", - "compressed": 0, - "drop": 0, - "errors": "0", - "overrun": 0, - "frame": 0, - "multicast": 0 - } - }, - "encapsulation": "Ethernet" - }, - "en1": { - "status": "active", - "flags": [ - "UP", - "BROADCAST", - "SMART", - "RUNNING", - "SIMPLEX", - "MULTICAST" - ], - "addresses": [ - { - "scope": "Link", - "prefixlen": "64", - "family": "inet6", - "address": "private" - }, - { - "broadcast": "192.168.1.255", - "netmask": "255.255.255.0", - "family": "inet", - "address": "192.168.1.4" - }, - { - "family": "lladdr", - "address": "private" - } - ], - "number": "1", - "mtu": "1500", - "media": { - "supported": [ - { - "autoselect": { - "options": [ - - ] - } - } - ], - "selected": [ - { - "autoselect": { - "options": [ - - ] - } - } - ] - }, - "type": "en", - "counters": { - "tx": { - "bytes": "449206298", - "packets": "7041789", - "collisions": "0", - "compressed": 0, - "carrier": 0, - "drop": 0, - "errors": "95", - "overrun": 0 - }, - "rx": { - "bytes": "13673879120", - "packets": "19966002", - "compressed": 0, - "drop": 0, - "errors": "1655893", - "overrun": 0, - "frame": 0, - "multicast": 0 - } - }, - "arp": { - "192.168.1.7": "private" - }, - "encapsulation": "Ethernet" - }, - "fw0": { - "status": "inactive", - "flags": [ - "UP", - "BROADCAST", - "SMART", - "RUNNING", - "SIMPLEX", - "MULTICAST" - ], - "addresses": [ - { - "family": "lladdr", - "address": "private" - } - ], - "number": "0", - "mtu": "4078", - "media": { - "supported": [ - { - "autoselect": { - "options": [ - "full-duplex" - ] - } - } - ], - "selected": [ - { - "autoselect": { - "options": [ - "full-duplex" - ] - } - } - ] - }, - "type": "fw", - "counters": { - "tx": { - "bytes": "346", - "packets": "0", - "collisions": "0", - "compressed": 0, - "carrier": 0, - "drop": 0, - "errors": "0", - "overrun": 0 - }, - "rx": { - "bytes": "0", - "packets": "0", - "compressed": 0, - "drop": 0, - "errors": "0", - "overrun": 0, - "frame": 0, - "multicast": 0 - } - }, - "encapsulation": "1394" - } - } - }, - "fqdn": "local.local", - "ohai_time": 1240624355.08575, - "domain": "local", - "os": "darwin", - "platform_build": "9G55", - "os_version": "9.6.0", - "hostname": "local", - "macaddress": "private", - "languages": { - "ruby": { - "target_os": "darwin9.0", - "platform": "universal-darwin9.0", - "host_vendor": "apple", - "target_vendor": "apple", - "target_cpu": "i686", - "host_os": "darwin9.0", - "host_cpu": "i686", - "version": "1.8.6", - "host": "i686-apple-darwin9.0", - "target": "i686-apple-darwin9.0", - "release_date": "2008-03-03" - } - } -} diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/http_delete_spec.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/http_delete_spec.rb deleted file mode 100644 index ce933b9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/http_delete_spec.rb +++ /dev/null @@ -1,98 +0,0 @@ -require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb') -begin - require 'yajl/bzip2' -rescue - warn "Couldn't load yajl/bzip2, maybe you don't have bzip2-ruby installed? Continuing without running bzip2 specs." -end -require 'yajl/gzip' -require 'yajl/deflate' -require 'yajl/http_stream' - -def parse_off_headers(io) - io.each_line do |line| - if line == "\r\n" # end of the headers - break - end - end -end - -describe "Yajl HTTP DELETE request" do - before(:all) do - raw = File.new(File.expand_path(File.dirname(__FILE__) + '/fixtures/http.raw.dump'), 'r') - parse_off_headers(raw) - @template_hash = Yajl::Parser.parse(raw) - - raw.rewind - parse_off_headers(raw) - @template_hash_symbolized = Yajl::Parser.parse(raw, :symbolize_keys => true) - - @deflate = File.new(File.expand_path(File.dirname(__FILE__) + '/fixtures/http.deflate.dump'), 'r') - @gzip = File.new(File.expand_path(File.dirname(__FILE__) + '/fixtures/http.gzip.dump'), 'r') - end - - after(:each) do - @file_path = nil - end - - def prepare_mock_request_dump(format=:raw) - @request = File.new(File.expand_path(File.dirname(__FILE__) + "/fixtures/http.#{format}.dump"), 'r') - @uri = 'file://'+File.expand_path(File.dirname(__FILE__) + "/fixtures/http/http.#{format}.dump") - TCPSocket.should_receive(:new).and_return(@request) - @request.should_receive(:write) - end - - it "should parse a raw response" do - prepare_mock_request_dump :raw - @template_hash.should == Yajl::HttpStream.delete(@uri) - end - - it "should parse a raw response using instance method" do - prepare_mock_request_dump :raw - @uri.should_receive(:host) - @uri.should_receive(:port) - stream = Yajl::HttpStream.new - @template_hash.should == stream.delete(@uri) - end - - it "should parse a raw response and symbolize keys" do - prepare_mock_request_dump :raw - @template_hash_symbolized.should == Yajl::HttpStream.delete(@uri, :symbolize_keys => true) - end - - if defined?(Yajl::Bzip2::StreamReader) - it "should parse a bzip2 compressed response" do - prepare_mock_request_dump :bzip2 - @template_hash.should == Yajl::HttpStream.delete(@uri) - end - - it "should parse a bzip2 compressed response and symbolize keys" do - prepare_mock_request_dump :bzip2 - @template_hash_symbolized.should == Yajl::HttpStream.delete(@uri, :symbolize_keys => true) - end - end - - it "should parse a deflate compressed response" do - prepare_mock_request_dump :deflate - @template_hash.should == Yajl::HttpStream.delete(@uri) - end - - it "should parse a deflate compressed response and symbolize keys" do - prepare_mock_request_dump :deflate - @template_hash_symbolized.should == Yajl::HttpStream.delete(@uri, :symbolize_keys => true) - end - - it "should parse a gzip compressed response" do - prepare_mock_request_dump :gzip - @template_hash.should == Yajl::HttpStream.delete(@uri) - end - - it "should parse a gzip compressed response and symbolize keys" do - prepare_mock_request_dump :gzip - @template_hash_symbolized.should == Yajl::HttpStream.delete(@uri, :symbolize_keys => true) - end - - it "should raise when an HTTP code that isn't 200 is returned" do - prepare_mock_request_dump :error - lambda { Yajl::HttpStream.delete(@uri) }.should raise_exception(Yajl::HttpStream::HttpError) - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/http_error_spec.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/http_error_spec.rb deleted file mode 100644 index 10fe834..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/http_error_spec.rb +++ /dev/null @@ -1,32 +0,0 @@ -require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb') -begin - require 'yajl/bzip2' -rescue - warn "Couldn't load yajl/bzip2, maybe you don't have bzip2-ruby installed? Continuing without running bzip2 specs." -end -require 'yajl/gzip' -require 'yajl/deflate' -require 'yajl/http_stream' - -describe "Yajl HTTP error" do - before(:all) do - @request = File.new(File.expand_path(File.dirname(__FILE__) + "/fixtures/http.error.dump"), 'r') - @uri = 'file://'+File.expand_path(File.dirname(__FILE__) + "/fixtures/http/http.error.dump") - TCPSocket.should_receive(:new).and_return(@request) - @request.should_receive(:write) - - begin - Yajl::HttpStream.get(@uri) - rescue Yajl::HttpStream::HttpError => e - @error = e - end - end - - it "should contain the error code in the message" do - @error.message.should match(/404/) - end - - it "should provide the HTTP response headers" do - @error.headers.keys.should include('ETag', 'Content-Length', 'Server') - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/http_get_spec.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/http_get_spec.rb deleted file mode 100644 index 1d1bf49..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/http_get_spec.rb +++ /dev/null @@ -1,109 +0,0 @@ -require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb') -begin - require 'yajl/bzip2' -rescue - warn "Couldn't load yajl/bzip2, maybe you don't have bzip2-ruby installed? Continuing without running bzip2 specs." -end -require 'yajl/gzip' -require 'yajl/deflate' -require 'yajl/http_stream' - -def parse_off_headers(io) - io.each_line do |line| - if line == "\r\n" # end of the headers - break - end - end -end - -describe "Yajl HTTP GET request" do - before(:all) do - raw = File.new(File.expand_path(File.dirname(__FILE__) + '/fixtures/http.raw.dump'), 'r') - parse_off_headers(raw) - @template_hash = Yajl::Parser.parse(raw) - - raw.rewind - parse_off_headers(raw) - @template_hash_symbolized = Yajl::Parser.parse(raw, :symbolize_keys => true) - - @deflate = File.new(File.expand_path(File.dirname(__FILE__) + '/fixtures/http.deflate.dump'), 'r') - @gzip = File.new(File.expand_path(File.dirname(__FILE__) + '/fixtures/http.gzip.dump'), 'r') - @chunked_body = {"item"=>{"price"=>1.99, "updated_by_id"=>nil, "cached_tag_list"=>"", "name"=>"generated", "created_at"=>"2009-03-24T05:25:09Z", "cost"=>0.597, "delta"=>false, "created_by_id"=>nil, "updated_at"=>"2009-03-24T05:25:09Z", "import_tag"=>nil, "account_id"=>16, "id"=>1, "taxable"=>true, "unit"=>nil, "sku"=>"06317-0306", "company_id"=>0, "description"=>nil, "active"=>true}} - end - - after(:each) do - @file_path = nil - end - - def prepare_mock_request_dump(format=:raw) - @request = File.new(File.expand_path(File.dirname(__FILE__) + "/fixtures/http.#{format}.dump"), 'r') - @uri = 'file://'+File.expand_path(File.dirname(__FILE__) + "/fixtures/http/http.#{format}.dump") - TCPSocket.should_receive(:new).and_return(@request) - @request.should_receive(:write) - end - - it "should parse a raw response" do - prepare_mock_request_dump :raw - @template_hash.should == Yajl::HttpStream.get(@uri) - end - - it "should parse a raw response and symbolize keys" do - prepare_mock_request_dump :raw - @template_hash_symbolized.should == Yajl::HttpStream.get(@uri, :symbolize_keys => true) - end - - it "should parse a raw response using instance method" do - prepare_mock_request_dump :raw - @uri.should_receive(:host) - @uri.should_receive(:port) - stream = Yajl::HttpStream.new - @template_hash.should == stream.get(@uri) - end - - it "should parse a chunked response using instance method" do - prepare_mock_request_dump :chunked - @uri.should_receive(:host) - @uri.should_receive(:port) - stream = Yajl::HttpStream.new - stream.get(@uri) do |obj| - obj.should eql(@chunked_body) - end - end - - if defined?(Yajl::Bzip2::StreamReader) - it "should parse a bzip2 compressed response" do - prepare_mock_request_dump :bzip2 - @template_hash.should == Yajl::HttpStream.get(@uri) - end - - it "should parse a bzip2 compressed response and symbolize keys" do - prepare_mock_request_dump :bzip2 - @template_hash_symbolized.should == Yajl::HttpStream.get(@uri, :symbolize_keys => true) - end - end - - it "should parse a deflate compressed response" do - prepare_mock_request_dump :deflate - @template_hash.should == Yajl::HttpStream.get(@uri) - end - - it "should parse a deflate compressed response and symbolize keys" do - prepare_mock_request_dump :deflate - @template_hash_symbolized.should == Yajl::HttpStream.get(@uri, :symbolize_keys => true) - end - - it "should parse a gzip compressed response" do - prepare_mock_request_dump :gzip - @template_hash.should == Yajl::HttpStream.get(@uri) - end - - it "should parse a gzip compressed response and symbolize keys" do - prepare_mock_request_dump :gzip - @template_hash_symbolized.should == Yajl::HttpStream.get(@uri, :symbolize_keys => true) - end - - it "should raise when an HTTP code that isn't 200 is returned" do - prepare_mock_request_dump :error - lambda { Yajl::HttpStream.get(@uri) }.should raise_exception(Yajl::HttpStream::HttpError) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/http_post_spec.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/http_post_spec.rb deleted file mode 100644 index ebc78c4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/http_post_spec.rb +++ /dev/null @@ -1,123 +0,0 @@ -require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb') -begin - require 'yajl/bzip2' -rescue - warn "Couldn't load yajl/bzip2, maybe you don't have bzip2-ruby installed? Continuing without running bzip2 specs." -end -require 'yajl/gzip' -require 'yajl/deflate' -require 'yajl/http_stream' - -def parse_off_headers(io) - io.each_line do |line| - if line == "\r\n" # end of the headers - break - end - end -end - -describe "Yajl HTTP POST request" do - before(:all) do - raw = File.new(File.expand_path(File.dirname(__FILE__) + '/fixtures/http.raw.dump'), 'r') - parse_off_headers(raw) - @template_hash = Yajl::Parser.parse(raw) - - raw.rewind - parse_off_headers(raw) - @template_hash_symbolized = Yajl::Parser.parse(raw, :symbolize_keys => true) - - @deflate = File.new(File.expand_path(File.dirname(__FILE__) + '/fixtures/http.deflate.dump'), 'r') - @gzip = File.new(File.expand_path(File.dirname(__FILE__) + '/fixtures/http.gzip.dump'), 'r') - @body = "blah=foo&bar=baz" - @hashed_body = {:blah => 'foo', 'bar' => 'baz'} - @chunked_body = {"item"=>{"price"=>1.99, "updated_by_id"=>nil, "cached_tag_list"=>"", "name"=>"generated", "created_at"=>"2009-03-24T05:25:09Z", "cost"=>0.597, "delta"=>false, "created_by_id"=>nil, "updated_at"=>"2009-03-24T05:25:09Z", "import_tag"=>nil, "account_id"=>16, "id"=>1, "taxable"=>true, "unit"=>nil, "sku"=>"06317-0306", "company_id"=>0, "description"=>nil, "active"=>true}} - end - - after(:each) do - @file_path = nil - end - - def prepare_mock_request_dump(format=:raw) - @request = File.new(File.expand_path(File.dirname(__FILE__) + "/fixtures/http.#{format}.dump"), 'r') - @uri = 'file://'+File.expand_path(File.dirname(__FILE__) + "/fixtures/http/http.#{format}.dump") - TCPSocket.should_receive(:new).and_return(@request) - @request.should_receive(:write) - end - - it "should parse a raw response" do - prepare_mock_request_dump :raw - @template_hash.should == Yajl::HttpStream.post(@uri, @body) - end - - it "should parse a raw response using instance method" do - prepare_mock_request_dump :raw - @uri.should_receive(:host) - @uri.should_receive(:port) - stream = Yajl::HttpStream.new - @template_hash.should == stream.post(@uri, @body) - end - - it "should parse a raw response with hashed body" do - prepare_mock_request_dump :raw - @template_hash.should == Yajl::HttpStream.post(@uri, @hashed_body) - end - - it "should parse a raw response and symbolize keys" do - prepare_mock_request_dump :raw - @template_hash_symbolized.should == Yajl::HttpStream.post(@uri, @body, :symbolize_keys => true) - end - - if defined?(Yajl::Bzip2::StreamReader) - it "should parse a bzip2 compressed response" do - prepare_mock_request_dump :bzip2 - @template_hash.should == Yajl::HttpStream.post(@uri, @body) - end - - it "should parse a bzip2 compressed response and symbolize keys" do - prepare_mock_request_dump :bzip2 - @template_hash_symbolized.should == Yajl::HttpStream.post(@uri, @body, :symbolize_keys => true) - end - end - - it "should parse a deflate compressed response" do - prepare_mock_request_dump :deflate - @template_hash.should == Yajl::HttpStream.post(@uri, @body) - end - - it "should parse a deflate compressed response and symbolize keys" do - prepare_mock_request_dump :deflate - @template_hash_symbolized.should == Yajl::HttpStream.post(@uri, @body, :symbolize_keys => true) - end - - it "should parse a gzip compressed response" do - prepare_mock_request_dump :gzip - @template_hash.should == Yajl::HttpStream.post(@uri, @body) - end - - it "should parse a gzip compressed response and symbolize keys" do - prepare_mock_request_dump :gzip - @template_hash_symbolized.should == Yajl::HttpStream.post(@uri, @body, :symbolize_keys => true) - end - - it "should parse a chunked raw response" do - prepare_mock_request_dump :chunked - Yajl::HttpStream.post(@uri, @body) do |obj| - obj.should eql(@chunked_body) - end - end - - it "should throw Exception if chunked response and no block given" do - prepare_mock_request_dump :chunked - lambda {Yajl::HttpStream.post(@uri, @body)}.should raise_error(Exception) - end - - it "should throw InvalidContentType if unable to handle the MIME type" do - prepare_mock_request_dump :html - lambda {Yajl::HttpStream.post(@uri, @body)}.should raise_error(Yajl::HttpStream::InvalidContentType) - end - - it "should raise when an HTTP code that isn't 200 is returned" do - prepare_mock_request_dump :error - lambda { Yajl::HttpStream.post(@uri, @body) }.should raise_exception(Yajl::HttpStream::HttpError) - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/http_put_spec.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/http_put_spec.rb deleted file mode 100644 index dba93e4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/http_put_spec.rb +++ /dev/null @@ -1,105 +0,0 @@ -require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb') -begin - require 'yajl/bzip2' -rescue - warn "Couldn't load yajl/bzip2, maybe you don't have bzip2-ruby installed? Continuing without running bzip2 specs." -end -require 'yajl/gzip' -require 'yajl/deflate' -require 'yajl/http_stream' - -def parse_off_headers(io) - io.each_line do |line| - if line == "\r\n" # end of the headers - break - end - end -end - -describe "Yajl HTTP PUT request" do - before(:all) do - raw = File.new(File.expand_path(File.dirname(__FILE__) + '/fixtures/http.raw.dump'), 'r') - parse_off_headers(raw) - @template_hash = Yajl::Parser.parse(raw) - - raw.rewind - parse_off_headers(raw) - @template_hash_symbolized = Yajl::Parser.parse(raw, :symbolize_keys => true) - - @deflate = File.new(File.expand_path(File.dirname(__FILE__) + '/fixtures/http.deflate.dump'), 'r') - @gzip = File.new(File.expand_path(File.dirname(__FILE__) + '/fixtures/http.gzip.dump'), 'r') - @body = "blah=foo&bar=baz" - @hashed_body = {:blah => 'foo', 'bar' => 'baz'} - end - - after(:each) do - @file_path = nil - end - - def prepare_mock_request_dump(format=:raw) - @request = File.new(File.expand_path(File.dirname(__FILE__) + "/fixtures/http.#{format}.dump"), 'r') - @uri = 'file://'+File.expand_path(File.dirname(__FILE__) + "/fixtures/http/http.#{format}.dump") - TCPSocket.should_receive(:new).and_return(@request) - @request.should_receive(:write) - end - - it "should parse a raw response" do - prepare_mock_request_dump :raw - @template_hash.should == Yajl::HttpStream.put(@uri, @body) - end - - it "should parse a raw response using instance method" do - prepare_mock_request_dump :raw - @uri.should_receive(:host) - @uri.should_receive(:port) - stream = Yajl::HttpStream.new - @template_hash.should == stream.put(@uri, @body) - end - - it "should parse a raw response with hashed body" do - prepare_mock_request_dump :raw - @template_hash.should == Yajl::HttpStream.post(@uri, @hashed_body) - end - - it "should parse a raw response and symbolize keys" do - prepare_mock_request_dump :raw - @template_hash_symbolized.should == Yajl::HttpStream.put(@uri, @body, :symbolize_keys => true) - end - - if defined?(Yajl::Bzip2::StreamReader) - it "should parse a bzip2 compressed response" do - prepare_mock_request_dump :bzip2 - @template_hash.should == Yajl::HttpStream.put(@uri, @body) - end - - it "should parse a bzip2 compressed response and symbolize keys" do - prepare_mock_request_dump :bzip2 - @template_hash_symbolized.should == Yajl::HttpStream.put(@uri, @body, :symbolize_keys => true) - end - end - - it "should parse a deflate compressed response" do - prepare_mock_request_dump :deflate - @template_hash.should == Yajl::HttpStream.put(@uri, @body) - end - - it "should parse a deflate compressed response and symbolize keys" do - prepare_mock_request_dump :deflate - @template_hash_symbolized.should == Yajl::HttpStream.put(@uri, @body, :symbolize_keys => true) - end - - it "should parse a gzip compressed response" do - prepare_mock_request_dump :gzip - @template_hash.should == Yajl::HttpStream.put(@uri, @body) - end - - it "should parse a gzip compressed response and symbolize keys" do - prepare_mock_request_dump :gzip - @template_hash_symbolized.should == Yajl::HttpStream.put(@uri, @body, :symbolize_keys => true) - end - - it "should raise when an HTTP code that isn't 200 is returned" do - prepare_mock_request_dump :error - lambda { Yajl::HttpStream.put(@uri, @body) }.should raise_exception(Yajl::HttpStream::HttpError) - end -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/http_stream_options_spec.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/http_stream_options_spec.rb deleted file mode 100644 index 4863104..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/http/http_stream_options_spec.rb +++ /dev/null @@ -1,27 +0,0 @@ -require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb') -require 'yajl/http_stream' -require 'socket' - -describe "Passing options to HttpStream instance methods" do - before(:all) do - @stream = Yajl::HttpStream.new - end - - it "should not create a new socket it one is provided" do - TCPSocket.should_not_receive(:new) - options = {:socket => :my_provided_socket} - - @stream.send(:initialize_socket, URI.parse("http://google.com"), options) - - options[:socket].should == :my_provided_socket - end - - it "should create a new socket if one is not provided" do - TCPSocket.should_receive(:new).with("google.com", 80).and_return( :tcp_socket ) - options = {} - - @stream.send(:initialize_socket, URI.parse("http://google.com"), options) - - options[:socket].should == :tcp_socket - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/json_gem_compatibility/compatibility_spec.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/json_gem_compatibility/compatibility_spec.rb deleted file mode 100644 index 14ce4b2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/json_gem_compatibility/compatibility_spec.rb +++ /dev/null @@ -1,207 +0,0 @@ -# encoding: UTF-8 -require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb') - -class Dummy; end - -describe "JSON Gem compatability API" do - it "shoud not mixin #to_json on base objects until compatability has been enabled" do - d = Dummy.new - - d.respond_to?(:to_json).should_not be_true - "".respond_to?(:to_json).should_not be_true - 1.respond_to?(:to_json).should_not be_true - "1.5".to_f.respond_to?(:to_json).should_not be_true - [].respond_to?(:to_json).should_not be_true - {:foo => "bar"}.respond_to?(:to_json).should_not be_true - true.respond_to?(:to_json).should_not be_true - false.respond_to?(:to_json).should_not be_true - nil.respond_to?(:to_json).should_not be_true - end - - it "should mixin #to_json on base objects after compatability has been enabled" do - require 'yajl/json_gem' - d = Dummy.new - - d.respond_to?(:to_json).should be_true - "".respond_to?(:to_json).should be_true - 1.respond_to?(:to_json).should be_true - "1.5".to_f.respond_to?(:to_json).should be_true - [].respond_to?(:to_json).should be_true - {:foo => "bar"}.respond_to?(:to_json).should be_true - true.respond_to?(:to_json).should be_true - false.respond_to?(:to_json).should be_true - nil.respond_to?(:to_json).should be_true - end - - it "should require yajl/json_gem to enable the compatability API" do - defined?(JSON).should be_true - - JSON.respond_to?(:parse).should be_true - JSON.respond_to?(:generate).should be_true - JSON.respond_to?(:pretty_generate).should be_true - JSON.respond_to?(:load).should be_true - JSON.respond_to?(:dump).should be_true - end - - it "should allow default parsing options be set with JSON.default_options" do - default = JSON.default_options[:symbolize_keys] - JSON.parse('{"foo": 1234}').should === {"foo" => 1234} - JSON.default_options[:symbolize_keys] = true - JSON.parse('{"foo": 1234}').should === {:foo => 1234} - JSON.default_options[:symbolize_keys] = default # ensure the rest of the test cases expect the default - end - - it "should also allow the json gem's symbolize_names key" do - JSON.parse('{"foo": 1234}', :symbolize_names => true).should === {:foo => 1234} - end - - it "should encode arbitrary classes via their default to_json method" do - d = Dummy.new - d.to_json.should == "\"#{d.to_s}\"" - - t = Time.now - t.to_json.should == "\"#{t.to_s}\"" - - da = Date.today - da.to_json.should == "\"#{da.to_s}\"" - - dt = DateTime.new - dt.to_json.should == "\"#{dt.to_s}\"" - end - - it "should have the standard parsing and encoding exceptions mapped" do - JSON::JSONError.new.is_a?(StandardError).should be_true - JSON::ParserError.new.is_a?(JSON::JSONError).should be_true - JSON::GeneratorError.new.is_a?(JSON::JSONError).should be_true - - lambda { - JSON.parse("blah") - }.should raise_error(JSON::ParserError) - - lambda { - JSON.generate(0.0/0.0) - }.should raise_error(JSON::GeneratorError) - end - - context "ported tests for Unicode" do - it "should be able to encode and parse unicode" do - '""'.should eql(''.to_json) - '"\\b"'.should eql("\b".to_json) - '"\u0001"'.should eql(0x1.chr.to_json) - '"\u001F"'.should eql(0x1f.chr.to_json) - '" "'.should eql(' '.to_json) - "\"#{0x7f.chr}\"".should eql(0x7f.chr.to_json) - utf8 = [ "© ≠ €! \01" ] - json = "[\"© ≠ €! \\u0001\"]" - json.should eql(utf8.to_json) - utf8.should eql(JSON.parse(json)) - utf8 = ["\343\201\202\343\201\204\343\201\206\343\201\210\343\201\212"] - json = "[\"ã‚ã„ã†ãˆãŠ\"]" - json.should eql(utf8.to_json) - utf8.should eql(JSON.parse(json)) - utf8 = ['სáƒáƒ¥áƒáƒ áƒ—ველáƒ'] - json = "[\"სáƒáƒ¥áƒáƒ áƒ—ველáƒ\"]" - json.should eql(utf8.to_json) - utf8.should eql(JSON.parse(json)) - '["Ã"]'.should eql(JSON.generate(["Ã"])) - ["€"].should eql(JSON.parse('["\u20ac"]')) - utf8_str = "\xf0\xa0\x80\x81" - utf8 = [utf8_str] - json = "[\"#{utf8_str}\"]" - json.should eql(JSON.generate(utf8)) - utf8.should eql(JSON.parse(json)) - end - end - - context "ported tests for generation" do - before(:all) do - @hash = { - 'a' => 2, - 'b' => 3.141, - 'c' => 'c', - 'd' => [ 1, "b", 3.14 ], - 'e' => { 'foo' => 'bar' }, - 'g' => "blah", - 'h' => 1000.0, - 'i' => 0.001 - } - - @json2 = '{"a":2,"b":3.141,"c":"c","d":[1,"b",3.14],"e":{"foo":"bar"},"g":"blah","h":1000.0,"i":0.001}' - - @json3 = %{ - { - "a": 2, - "b": 3.141, - "c": "c", - "d": [1, "b", 3.14], - "e": {"foo": "bar"}, - "g": "blah", - "h": 1000.0, - "i": 0.001 - } - }.chomp - end - - it "should be able to unparse" do - json = JSON.generate(@hash) - JSON.parse(@json2).should == JSON.parse(json) - parsed_json = JSON.parse(json) - @hash.should == parsed_json - json = JSON.generate({1=>2}) - '{"1":2}'.should eql(json) - parsed_json = JSON.parse(json) - {"1"=>2}.should == parsed_json - end - - it "should be able to unparse pretty" do - json = JSON.pretty_generate(@hash) - JSON.parse(@json3).should == JSON.parse(json) - parsed_json = JSON.parse(json) - @hash.should == parsed_json - json = JSON.pretty_generate({1=>2}) - test = "{\n \"1\": 2\n}".chomp - test.should == json - parsed_json = JSON.parse(json) - {"1"=>2}.should == parsed_json - end - end - - context "ported fixture tests" do - fixtures = File.join(File.dirname(__FILE__), '../parsing/fixtures/*.json') - passed, failed = Dir[fixtures].partition { |f| f['pass'] } - JSON_PASSED = passed.inject([]) { |a, f| a << [ f, File.read(f) ] }.sort - JSON_FAILED = failed.inject([]) { |a, f| a << [ f, File.read(f) ] }.sort - - JSON_FAILED.each do |name, source| - it "should not be able to parse #{File.basename(name)} as an IO" do - lambda { - JSON.parse(StringIO.new(source)) - }.should raise_error(JSON::ParserError) - end - end - - JSON_FAILED.each do |name, source| - it "should not be able to parse #{File.basename(name)} as a string" do - lambda { - JSON.parse(source) - }.should raise_error(JSON::ParserError) - end - end - - JSON_PASSED.each do |name, source| - it "should be able to parse #{File.basename(name)} as an IO" do - lambda { - JSON.parse(StringIO.new(source)) - }.should_not raise_error - end - end - - JSON_PASSED.each do |name, source| - it "should be able to parse #{File.basename(name)} as a string" do - lambda { - JSON.parse(source) - }.should_not raise_error - end - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/active_support_spec.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/active_support_spec.rb deleted file mode 100644 index 6d83b8b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/active_support_spec.rb +++ /dev/null @@ -1,64 +0,0 @@ -# encoding: UTF-8 -require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb') - -describe "ActiveSupport test cases" do - TESTS = { - %q({"returnTo":{"\/categories":"\/"}}) => {"returnTo" => {"/categories" => "/"}}, - %q({"return\\"To\\":":{"\/categories":"\/"}}) => {"return\"To\":" => {"/categories" => "/"}}, - %q({"returnTo":{"\/categories":1}}) => {"returnTo" => {"/categories" => 1}}, - %({"returnTo":[1,"a"]}) => {"returnTo" => [1, "a"]}, - %({"returnTo":[1,"\\"a\\",", "b"]}) => {"returnTo" => [1, "\"a\",", "b"]}, - %({"a": "'", "b": "5,000"}) => {"a" => "'", "b" => "5,000"}, - %({"a": "a's, b's and c's", "b": "5,000"}) => {"a" => "a's, b's and c's", "b" => "5,000"}, - # multibyte - %({"matzue": "æ¾æ±Ÿ", "asakusa": "æµ…è‰"}) => {"matzue" => "æ¾æ±Ÿ", "asakusa" => "æµ…è‰"}, - %({"a": "2007-01-01"}) => {'a' => "2007-01-01"}, - %({"a": "2007-01-01 01:12:34 Z"}) => {'a' => "2007-01-01 01:12:34 Z"}, - # no time zone - %({"a": "2007-01-01 01:12:34"}) => {'a' => "2007-01-01 01:12:34"}, - # needs to be *exact* - %({"a": " 2007-01-01 01:12:34 Z "}) => {'a' => " 2007-01-01 01:12:34 Z "}, - %({"a": "2007-01-01 : it's your birthday"}) => {'a' => "2007-01-01 : it's your birthday"}, - %([]) => [], - %({}) => {}, - %({"a":1}) => {"a" => 1}, - %({"a": ""}) => {"a" => ""}, - %({"a":"\\""}) => {"a" => "\""}, - %({"a": null}) => {"a" => nil}, - %({"a": true}) => {"a" => true}, - %({"a": false}) => {"a" => false}, - %q({"a": "http:\/\/test.host\/posts\/1"}) => {"a" => "http://test.host/posts/1"}, - %q({"a": "\u003cunicode\u0020escape\u003e"}) => {"a" => ""}, - %q({"a": "\\\\u0020skip double backslashes"}) => {"a" => "\\u0020skip double backslashes"}, - %q({"a": "\u003cbr /\u003e"}) => {'a' => "
    "}, - %q({"b":["\u003ci\u003e","\u003cb\u003e","\u003cu\u003e"]}) => {'b' => ["","",""]} - } - - TESTS.each do |json, expected| - it "should be able to parse #{json} as an IO" do - lambda { - Yajl::Parser.parse(StringIO.new(json)).should == expected - }.should_not raise_error - end - end - - TESTS.each do |json, expected| - it "should be able to parse #{json} as a string" do - lambda { - Yajl::Parser.parse(json).should == expected - }.should_not raise_error - end - end - - it "should fail parsing {: 1} as an IO" do - lambda { - Yajl::Parser.parse(StringIO.new("{: 1}")) - }.should raise_error(Yajl::ParseError) - end - - it "should fail parsing {: 1} as a string" do - lambda { - Yajl::Parser.parse("{: 1}") - }.should raise_error(Yajl::ParseError) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/chunked_spec.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/chunked_spec.rb deleted file mode 100644 index 20248c9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/chunked_spec.rb +++ /dev/null @@ -1,96 +0,0 @@ -require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb') - -describe "Chunked parser" do - before(:all) do - @final = [{"abc" => 123}, {"def" => 456}] - end - - before(:each) do - @callback = lambda { |hash| - # no-op - } - @parser = Yajl::Parser.new - @parser.on_parse_complete = @callback - end - - it "should parse a single chunk" do - @callback.should_receive(:call).with(@final) - @parser << '[{"abc": 123},{"def": 456}]' - end - - it "should parse a single chunk, 3 times" do - @callback.should_receive(:call).with(@final).exactly(3).times - @parser << '[{"abc": 123},{"def": 456}]' - @parser << '[{"abc": 123},{"def": 456}]' - @parser << '[{"abc": 123},{"def": 456}]' - end - - it "should parse in two chunks" do - @callback.should_receive(:call).with(@final) - @parser << '[{"abc": 123},' - @parser << '{"def": 456}]' - end - - it "should parse in 2 chunks, twice" do - @callback.should_receive(:call).with(@final).exactly(2).times - @parser << '[{"abc": 123},' - @parser << '{"def": 456}]' - @parser << '[{"abc": 123},' - @parser << '{"def": 456}]' - end - - it "should parse 2 JSON strings, in 3 chunks" do - @callback.should_receive(:call).with(@final).exactly(2).times - @parser << '[{"abc": 123},' - @parser << '{"def": 456}][{"abc": 123},{"def":' - @parser << ' 456}]' - end - - it "should parse 2 JSON strings in 1 chunk" do - @callback.should_receive(:call).with(@final).exactly(2).times - @parser << '[{"abc": 123},{"def": 456}][{"abc": 123},{"def": 456}]' - end - - it "should parse 2 JSON strings from an IO" do - @callback.should_receive(:call).with(@final).exactly(2).times - @parser.parse(StringIO.new('[{"abc": 123},{"def": 456}][{"abc": 123},{"def": 456}]')) - end - - it "should parse a JSON string an IO and fire callback once" do - @callback.should_receive(:call).with(@final) - @parser.parse(StringIO.new('[{"abc": 123},{"def": 456}]')) - end - - it "should parse twitter_stream.json and fire callback 430 times" do - path = File.expand_path(File.dirname(__FILE__) + '/../../benchmark/subjects/twitter_stream.json') - json = File.new(path, 'r') - @callback.should_receive(:call).exactly(430).times - lambda { - @parser.parse(json) - }.should_not raise_error - end - - it "should parse twitter_stream.json and fire callback 430 times, with a block as the callback" do - path = File.expand_path(File.dirname(__FILE__) + '/../../benchmark/subjects/twitter_stream.json') - json = File.new(path, 'r') - @callback.should_receive(:call).exactly(0).times - @parser.on_parse_complete = nil - lambda { - times = 0 - @parser.parse(json) do |hsh| - times += 1 - end - times.should eql(430) - }.should_not raise_error - end - - it "should raise a Yajl::ParseError error if multiple JSON strings were found when no on_parse_complete callback assigned" do - path = File.expand_path(File.dirname(__FILE__) + '/../../benchmark/subjects/twitter_stream.json') - json = File.new(path, 'r') - @parser.on_parse_complete = nil - @callback.should_receive(:call).exactly(0).times - lambda { - @parser.parse(json) - }.should raise_error(Yajl::ParseError) - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail.15.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail.15.json deleted file mode 100644 index fc8376b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail.15.json +++ /dev/null @@ -1 +0,0 @@ -["Illegal backslash escape: \x15"] \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail.16.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail.16.json deleted file mode 100644 index c43ae3c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail.16.json +++ /dev/null @@ -1 +0,0 @@ -["Illegal backslash escape: \'"] \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail.17.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail.17.json deleted file mode 100644 index 62b9214..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail.17.json +++ /dev/null @@ -1 +0,0 @@ -["Illegal backslash escape: \017"] \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail.26.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail.26.json deleted file mode 100644 index 845d26a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail.26.json +++ /dev/null @@ -1 +0,0 @@ -["tab\ character\ in\ string\ "] \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail11.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail11.json deleted file mode 100644 index 76eb95b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail11.json +++ /dev/null @@ -1 +0,0 @@ -{"Illegal expression": 1 + 2} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail12.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail12.json deleted file mode 100644 index 77580a4..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail12.json +++ /dev/null @@ -1 +0,0 @@ -{"Illegal invocation": alert()} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail13.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail13.json deleted file mode 100644 index 379406b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail13.json +++ /dev/null @@ -1 +0,0 @@ -{"Numbers cannot have leading zeroes": 013} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail14.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail14.json deleted file mode 100644 index 0ed366b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail14.json +++ /dev/null @@ -1 +0,0 @@ -{"Numbers cannot be hex": 0x14} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail19.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail19.json deleted file mode 100644 index 3b9c46f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail19.json +++ /dev/null @@ -1 +0,0 @@ -{"Missing colon" null} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail20.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail20.json deleted file mode 100644 index 27c1af3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail20.json +++ /dev/null @@ -1 +0,0 @@ -{"Double colon":: null} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail21.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail21.json deleted file mode 100644 index 6247457..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail21.json +++ /dev/null @@ -1 +0,0 @@ -{"Comma instead of colon", null} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail22.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail22.json deleted file mode 100644 index a775258..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail22.json +++ /dev/null @@ -1 +0,0 @@ -["Colon instead of comma": false] \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail23.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail23.json deleted file mode 100644 index 494add1..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail23.json +++ /dev/null @@ -1 +0,0 @@ -["Bad value", truth] \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail24.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail24.json deleted file mode 100644 index caff239..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail24.json +++ /dev/null @@ -1 +0,0 @@ -['single quote'] \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail25.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail25.json deleted file mode 100644 index 2dfbd25..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail25.json +++ /dev/null @@ -1 +0,0 @@ -["tab character in string "] diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail27.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail27.json deleted file mode 100644 index 6b01a2c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail27.json +++ /dev/null @@ -1,2 +0,0 @@ -["line -break"] \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail28.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail28.json deleted file mode 100644 index 621a010..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail28.json +++ /dev/null @@ -1,2 +0,0 @@ -["line\ -break"] \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail3.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail3.json deleted file mode 100644 index 168c81e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail3.json +++ /dev/null @@ -1 +0,0 @@ -{unquoted_key: "keys must be quoted"} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail4.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail4.json deleted file mode 100644 index 9de168b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail4.json +++ /dev/null @@ -1 +0,0 @@ -["extra comma",] \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail5.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail5.json deleted file mode 100644 index ddf3ce3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail5.json +++ /dev/null @@ -1 +0,0 @@ -["double extra comma",,] \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail6.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail6.json deleted file mode 100644 index ed91580..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail6.json +++ /dev/null @@ -1 +0,0 @@ -[ , "<-- missing value"] \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail9.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail9.json deleted file mode 100644 index 5815574..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/fail9.json +++ /dev/null @@ -1 +0,0 @@ -{"Extra comma": true,} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.array.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.array.json deleted file mode 100644 index f76058d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.array.json +++ /dev/null @@ -1,6 +0,0 @@ -["foo", - "bar", "baz", - true,false,null,{"key":"value"}, - [null,null,null,[]], - "\n\r\\" -] diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.codepoints_from_unicode_org.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.codepoints_from_unicode_org.json deleted file mode 100644 index f91f3be..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.codepoints_from_unicode_org.json +++ /dev/null @@ -1 +0,0 @@ -"\u004d\u0430\u4e8c\ud800\udf02" diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.contacts.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.contacts.json deleted file mode 100644 index 108d7d6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.contacts.json +++ /dev/null @@ -1 +0,0 @@ -[{"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:04Z", "updated_by_id": null, "contact_id": 1, "id": 1, "created_by_id": null, "subscriber_id": 0, "address": "http://osinski.name/", "created_at": "2009-03-24T05:25:04Z"}], "updated_at": "2009-03-24T05:25:04Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 1, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:04Z", "updated_by_id": null, "number": "261-622-3063", "contact_id": 1, "id": 1, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:04Z"}, {"updated_at": "2009-03-24T05:25:04Z", "updated_by_id": null, "number": "747.620.1318 x8917", "contact_id": 1, "id": 2, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:04Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Orionton", "zip": "42858", "updated_at": "2009-03-24T05:25:04Z", "updated_by_id": null, "country": "United States of America", "contact_id": 1, "id": 1, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "52625 Cremin Ford", "state": "Oklahoma", "created_at": "2009-03-24T05:25:04Z"}, {"lon": null, "city": "South Cale", "zip": "27043-5465", "updated_at": "2009-03-24T05:25:04Z", "updated_by_id": null, "country": "United States of America", "contact_id": 1, "id": 2, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "9685 Wiegand Corners", "state": "Rhode Island", "created_at": "2009-03-24T05:25:04Z"}, {"lon": null, "city": "West Vidal", "zip": "63524", "updated_at": "2009-03-24T05:25:04Z", "updated_by_id": null, "country": "United States of America", "contact_id": 1, "id": 3, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "932 Crystal Station", "state": "Hawaii", "created_at": "2009-03-24T05:25:04Z"}], "first_name": "Tristin", "email_addresses": [{"updated_at": "2009-03-24T05:25:04Z", "updated_by_id": null, "contact_id": 1, "id": 1, "created_by_id": null, "subscriber_id": 0, "address": "ashton_schaefer@yost.name", "created_at": "2009-03-24T05:25:04Z"}, {"updated_at": "2009-03-24T05:25:04Z", "updated_by_id": null, "contact_id": 1, "id": 2, "created_by_id": null, "subscriber_id": 0, "address": "karina.bechtelar@thompsonblanda.co.uk", "created_at": "2009-03-24T05:25:04Z"}, {"updated_at": "2009-03-24T05:25:04Z", "updated_by_id": null, "contact_id": 1, "id": 3, "created_by_id": null, "subscriber_id": 0, "address": "erich@parker.com", "created_at": "2009-03-24T05:25:04Z"}], "last_name": "Bergstrom", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:04Z", "updated_by_id": null, "service": "MobileMe", "username": "kavon.morar", "contact_id": 1, "id": 1, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:04Z"}, {"updated_at": "2009-03-24T05:25:04Z", "updated_by_id": null, "service": "MobileMe", "username": "omari.braun", "contact_id": 1, "id": 2, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:04Z"}, {"updated_at": "2009-03-24T05:25:04Z", "updated_by_id": null, "service": "MobileMe", "username": "dayna", "contact_id": 1, "id": 3, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:04Z"}, {"updated_at": "2009-03-24T05:25:04Z", "updated_by_id": null, "service": "MobileMe", "username": "rosamond", "contact_id": 1, "id": 4, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:04Z"}], "created_at": "2009-03-24T05:25:04Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 2, "id": 2, "created_by_id": null, "subscriber_id": 0, "address": "http://rosenbaum.name/", "created_at": "2009-03-24T05:25:05Z"}], "updated_at": "2009-03-24T05:25:04Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 2, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "(610)903-4082 x65582", "contact_id": 2, "id": 3, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Lake Delmer", "zip": "79717", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 2, "id": 4, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "01278 Will Fords", "state": "Rhode Island", "created_at": "2009-03-24T05:25:05Z"}, {"lon": null, "city": "Godfreystad", "zip": "25350-9223", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 2, "id": 5, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "1163 Rosetta Loop", "state": "Oklahoma", "created_at": "2009-03-24T05:25:05Z"}, {"lon": null, "city": "Millerberg", "zip": "74184-2579", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 2, "id": 6, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "82998 Vandervort Squares", "state": "Arkansas", "created_at": "2009-03-24T05:25:05Z"}], "first_name": "Daisy", "email_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 2, "id": 4, "created_by_id": null, "subscriber_id": 0, "address": "rosemarie@jacobs.uk", "created_at": "2009-03-24T05:25:05Z"}], "last_name": "Russel", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "lila", "contact_id": 2, "id": 5, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "raul_upton", "contact_id": 2, "id": 6, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "pascale.stiedemann", "contact_id": 2, "id": 7, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "created_at": "2009-03-24T05:25:04Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 3, "id": 3, "created_by_id": null, "subscriber_id": 0, "address": "http://raynor.ca/", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 3, "id": 4, "created_by_id": null, "subscriber_id": 0, "address": "http://schulistcronin.uk/", "created_at": "2009-03-24T05:25:05Z"}], "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 3, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "(172)195-6890", "contact_id": 3, "id": 4, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "453-314-7199", "contact_id": 3, "id": 5, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "579-430-7505", "contact_id": 3, "id": 6, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Maggioberg", "zip": "33077-1967", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 3, "id": 7, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "73722 Abernathy Branch", "state": "Mississippi", "created_at": "2009-03-24T05:25:05Z"}], "first_name": "Michaela", "email_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 3, "id": 5, "created_by_id": null, "subscriber_id": 0, "address": "arvid_russel@hilll.biz", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 3, "id": 6, "created_by_id": null, "subscriber_id": 0, "address": "orlo@dubuqueyundt.us", "created_at": "2009-03-24T05:25:05Z"}], "last_name": "Monahan", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "leonardo_swift", "contact_id": 3, "id": 8, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "leanna_windler", "contact_id": 3, "id": 9, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "created_at": "2009-03-24T05:25:05Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [], "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 4, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "842-300-3457 x1770", "contact_id": 4, "id": 7, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "1-188-689-6494 x58364", "contact_id": 4, "id": 8, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "104.711.1053", "contact_id": 4, "id": 9, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Lake Sean", "zip": "59765", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 4, "id": 8, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "89074 Ottis Skyway", "state": "Kentucky", "created_at": "2009-03-24T05:25:05Z"}, {"lon": null, "city": "Haagmouth", "zip": "63072", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 4, "id": 9, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "24569 Jacobs Crossroad", "state": "Kansas", "created_at": "2009-03-24T05:25:05Z"}, {"lon": null, "city": "South Ian", "zip": "99483-8809", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 4, "id": 10, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "6762 Stevie Run", "state": "Alaska", "created_at": "2009-03-24T05:25:05Z"}], "first_name": "Chase", "email_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 4, "id": 7, "created_by_id": null, "subscriber_id": 0, "address": "leopoldo_berge@haley.info", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 4, "id": 8, "created_by_id": null, "subscriber_id": 0, "address": "helen@swiftwalter.name", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 4, "id": 9, "created_by_id": null, "subscriber_id": 0, "address": "glenda_olson@okeeferice.info", "created_at": "2009-03-24T05:25:05Z"}], "last_name": "Zieme", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "hilario", "contact_id": 4, "id": 10, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "created_at": "2009-03-24T05:25:05Z", "active": true}}, {"contact": {"company": true, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 5, "id": 5, "created_by_id": null, "subscriber_id": 0, "address": "http://carroll.us/", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 5, "id": 6, "created_by_id": null, "subscriber_id": 0, "address": "http://mertz.name/", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 5, "id": 7, "created_by_id": null, "subscriber_id": 0, "address": "http://cristmayer.uk/", "created_at": "2009-03-24T05:25:05Z"}], "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "title": null, "delta": false, "company_name": "Heathcote, Harber and Rowe", "id": 5, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "082-754-6635", "contact_id": 5, "id": 10, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "(828)177-6296", "contact_id": 5, "id": 11, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "381.864.7227 x109", "contact_id": 5, "id": 12, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "1-261-032-7889", "contact_id": 5, "id": 13, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "South Seamus", "zip": "93108-2598", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 5, "id": 11, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "293 Reese Expressway", "state": "West Virginia", "created_at": "2009-03-24T05:25:05Z"}, {"lon": null, "city": "East Malvinaport", "zip": "26349", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 5, "id": 12, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "740 Kunde Streets", "state": "Washington", "created_at": "2009-03-24T05:25:05Z"}, {"lon": null, "city": "Linneaburgh", "zip": "02227-2886", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 5, "id": 13, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "694 Howe Walk", "state": "Massachusetts", "created_at": "2009-03-24T05:25:05Z"}], "first_name": "Hayden", "email_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 5, "id": 10, "created_by_id": null, "subscriber_id": 0, "address": "carmela_bednar@kautzer.us", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 5, "id": 11, "created_by_id": null, "subscriber_id": 0, "address": "earnestine.nitzsche@corkery.biz", "created_at": "2009-03-24T05:25:05Z"}], "last_name": "Hintz", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "esperanza", "contact_id": 5, "id": 11, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "mittie", "contact_id": 5, "id": 12, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "obie", "contact_id": 5, "id": 13, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "created_at": "2009-03-24T05:25:05Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 6, "id": 8, "created_by_id": null, "subscriber_id": 0, "address": "http://king.uk/", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 6, "id": 9, "created_by_id": null, "subscriber_id": 0, "address": "http://veumstrosin.name/", "created_at": "2009-03-24T05:25:05Z"}], "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 6, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "558-878-8536", "contact_id": 6, "id": 14, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "501.809.0377 x328", "contact_id": 6, "id": 15, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "112.292.0946 x529", "contact_id": 6, "id": 16, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Olenbury", "zip": "11334-0500", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 6, "id": 14, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "66516 Louvenia Ridges", "state": "Pennsylvania", "created_at": "2009-03-24T05:25:05Z"}, {"lon": null, "city": "Skilesburgh", "zip": "86831-5421", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 6, "id": 15, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "90258 King Dale", "state": "Iowa", "created_at": "2009-03-24T05:25:05Z"}, {"lon": null, "city": "New Arjun", "zip": "96552-4706", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 6, "id": 16, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "44681 Cole Parkways", "state": "Connecticut", "created_at": "2009-03-24T05:25:05Z"}], "first_name": "Jake", "email_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 6, "id": 12, "created_by_id": null, "subscriber_id": 0, "address": "zander_fritsch@willms.co.uk", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 6, "id": 13, "created_by_id": null, "subscriber_id": 0, "address": "breanne.haley@buckridgemckenzie.com", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 6, "id": 14, "created_by_id": null, "subscriber_id": 0, "address": "salvador.donnelly@stammchristiansen.com", "created_at": "2009-03-24T05:25:05Z"}], "last_name": "Deckow", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "ofelia.gorczany", "contact_id": 6, "id": 14, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "created_at": "2009-03-24T05:25:05Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 7, "id": 10, "created_by_id": null, "subscriber_id": 0, "address": "http://berge.info/", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 7, "id": 11, "created_by_id": null, "subscriber_id": 0, "address": "http://gottlieb.uk/", "created_at": "2009-03-24T05:25:05Z"}], "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 7, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "(034)036-8590 x86765", "contact_id": 7, "id": 17, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "(838)071-5887", "contact_id": 7, "id": 18, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "(538)647-5481 x854", "contact_id": 7, "id": 19, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "235.902.6028", "contact_id": 7, "id": 20, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "New Oswaldoborough", "zip": "98460-7628", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 7, "id": 17, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "8515 Keebler Mews", "state": "Alabama", "created_at": "2009-03-24T05:25:05Z"}, {"lon": null, "city": "Torpshire", "zip": "23632", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 7, "id": 18, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "86939 Roberts Prairie", "state": "Idaho", "created_at": "2009-03-24T05:25:05Z"}], "first_name": "Blanca", "email_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 7, "id": 15, "created_by_id": null, "subscriber_id": 0, "address": "leonie.simonis@bayer.ca", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 7, "id": 16, "created_by_id": null, "subscriber_id": 0, "address": "stephania.russel@graham.name", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 7, "id": 17, "created_by_id": null, "subscriber_id": 0, "address": "dell@gleichnerwiegand.info", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 7, "id": 18, "created_by_id": null, "subscriber_id": 0, "address": "shayna@rueckertromp.uk", "created_at": "2009-03-24T05:25:05Z"}], "last_name": "Farrell", "instant_messenger_addresses": [], "created_at": "2009-03-24T05:25:05Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [], "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 8, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "562-172-5798 x49737", "contact_id": 8, "id": 21, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "545.790.4794", "contact_id": 8, "id": 22, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "(659)399-4371 x959", "contact_id": 8, "id": 23, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "West Stewartfurt", "zip": "54763-7974", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 8, "id": 19, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "97314 Bode Pike", "state": "Alaska", "created_at": "2009-03-24T05:25:05Z"}, {"lon": null, "city": "Gaylordstad", "zip": "03401", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 8, "id": 20, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "12572 Joaquin Lock", "state": "Virginia", "created_at": "2009-03-24T05:25:05Z"}, {"lon": null, "city": "Lake Kian", "zip": "16468", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 8, "id": 21, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "87775 Hagenes Flats", "state": "Vermont", "created_at": "2009-03-24T05:25:05Z"}], "first_name": "Jada", "email_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 8, "id": 19, "created_by_id": null, "subscriber_id": 0, "address": "drake_jacobi@padberg.us", "created_at": "2009-03-24T05:25:05Z"}], "last_name": "O'Connell", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "conor_kunde", "contact_id": 8, "id": 15, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "alexane", "contact_id": 8, "id": 16, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "eliezer", "contact_id": 8, "id": 17, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "shaniya.gottlieb", "contact_id": 8, "id": 18, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "created_at": "2009-03-24T05:25:05Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 9, "id": 12, "created_by_id": null, "subscriber_id": 0, "address": "http://hilpert.info/", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 9, "id": 13, "created_by_id": null, "subscriber_id": 0, "address": "http://baumbach.info/", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 9, "id": 14, "created_by_id": null, "subscriber_id": 0, "address": "http://wuckertlangworth.info/", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 9, "id": 15, "created_by_id": null, "subscriber_id": 0, "address": "http://von.info/", "created_at": "2009-03-24T05:25:05Z"}], "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 9, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "(590)366-4306", "contact_id": 9, "id": 24, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "(623)967-8624 x5148", "contact_id": 9, "id": 25, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Aldenshire", "zip": "53652", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 9, "id": 22, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "657 Hershel Villages", "state": "North Dakota", "created_at": "2009-03-24T05:25:05Z"}, {"lon": null, "city": "Renechester", "zip": "39239-3297", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 9, "id": 23, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "400 Jada Valleys", "state": "Georgia", "created_at": "2009-03-24T05:25:05Z"}], "first_name": "Nash", "email_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 9, "id": 20, "created_by_id": null, "subscriber_id": 0, "address": "maxie.schaefer@reynolds.biz", "created_at": "2009-03-24T05:25:05Z"}], "last_name": "Klocko", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "filiberto", "contact_id": 9, "id": 19, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "keaton.moore", "contact_id": 9, "id": 20, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "created_at": "2009-03-24T05:25:05Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 10, "id": 16, "created_by_id": null, "subscriber_id": 0, "address": "http://thompson.biz/", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 10, "id": 17, "created_by_id": null, "subscriber_id": 0, "address": "http://stroman.name/", "created_at": "2009-03-24T05:25:05Z"}], "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 10, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "518.987.9078 x4322", "contact_id": 10, "id": 26, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "West Abdielmouth", "zip": "20914-1382", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 10, "id": 24, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "74707 Mayert Brooks", "state": "Maine", "created_at": "2009-03-24T05:25:05Z"}], "first_name": "Willy", "email_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 10, "id": 21, "created_by_id": null, "subscriber_id": 0, "address": "hillary_davis@walsh.co.uk", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 10, "id": 22, "created_by_id": null, "subscriber_id": 0, "address": "dedrick@lueilwitz.com", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 10, "id": 23, "created_by_id": null, "subscriber_id": 0, "address": "hulda@runolfsdottirabernathy.com", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 10, "id": 24, "created_by_id": null, "subscriber_id": 0, "address": "ebony.mitchell@davis.com", "created_at": "2009-03-24T05:25:05Z"}], "last_name": "Gibson", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "emilio_howe", "contact_id": 10, "id": 21, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "created_at": "2009-03-24T05:25:05Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 11, "id": 18, "created_by_id": null, "subscriber_id": 0, "address": "http://olson.us/", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 11, "id": 19, "created_by_id": null, "subscriber_id": 0, "address": "http://schadenspinka.ca/", "created_at": "2009-03-24T05:25:05Z"}], "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 11, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "(087)998-5318 x64927", "contact_id": 11, "id": 27, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "445-950-7063 x289", "contact_id": 11, "id": 28, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "(598)138-0759 x4941", "contact_id": 11, "id": 29, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "New Kennithmouth", "zip": "37847-0831", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 11, "id": 25, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "032 Clemens Mall", "state": "West Virginia", "created_at": "2009-03-24T05:25:05Z"}, {"lon": null, "city": "Allisonborough", "zip": "28514", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 11, "id": 26, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "97995 Cordie Stravenue", "state": "Nevada", "created_at": "2009-03-24T05:25:05Z"}], "first_name": "Lera", "email_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 11, "id": 25, "created_by_id": null, "subscriber_id": 0, "address": "abel.kuphal@beer.com", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 11, "id": 26, "created_by_id": null, "subscriber_id": 0, "address": "francisca@ward.name", "created_at": "2009-03-24T05:25:05Z"}], "last_name": "Ferry", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "ethan.friesen", "contact_id": 11, "id": 22, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "kelli_rutherford", "contact_id": 11, "id": 23, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "noemi", "contact_id": 11, "id": 24, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "norma.gleason", "contact_id": 11, "id": 25, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "created_at": "2009-03-24T05:25:05Z", "active": true}}, {"contact": {"company": true, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 12, "id": 20, "created_by_id": null, "subscriber_id": 0, "address": "http://greenholt.uk/", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 12, "id": 21, "created_by_id": null, "subscriber_id": 0, "address": "http://hirthe.ca/", "created_at": "2009-03-24T05:25:05Z"}], "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "title": null, "delta": false, "company_name": "Durgan-Bode", "id": 12, "created_by_id": null, "phone_numbers": [], "is_me": false, "subscriber_id": 0, "street_addresses": [], "first_name": "Ashley", "email_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 12, "id": 27, "created_by_id": null, "subscriber_id": 0, "address": "van@okon.biz", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 12, "id": 28, "created_by_id": null, "subscriber_id": 0, "address": "tara.osinski@keeling.biz", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 12, "id": 29, "created_by_id": null, "subscriber_id": 0, "address": "emile@harbermaggio.biz", "created_at": "2009-03-24T05:25:05Z"}], "last_name": "Aufderhar", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "anika.predovic", "contact_id": 12, "id": 26, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "created_at": "2009-03-24T05:25:05Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 13, "id": 22, "created_by_id": null, "subscriber_id": 0, "address": "http://marvin.name/", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 13, "id": 23, "created_by_id": null, "subscriber_id": 0, "address": "http://kshlerin.co.uk/", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 13, "id": 24, "created_by_id": null, "subscriber_id": 0, "address": "http://mcclurezulauf.info/", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 13, "id": 25, "created_by_id": null, "subscriber_id": 0, "address": "http://ziememayert.com/", "created_at": "2009-03-24T05:25:05Z"}], "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 13, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "762-611-1366 x0064", "contact_id": 13, "id": 30, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "(491)761-1120 x2637", "contact_id": 13, "id": 31, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Deonbury", "zip": "85524", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 13, "id": 27, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "0314 Cormier Lock", "state": "Wyoming", "created_at": "2009-03-24T05:25:05Z"}, {"lon": null, "city": "North Ovafort", "zip": "93675-1983", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 13, "id": 28, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "900 Fadel Valleys", "state": "Utah", "created_at": "2009-03-24T05:25:05Z"}], "first_name": "Antonietta", "email_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 13, "id": 30, "created_by_id": null, "subscriber_id": 0, "address": "tomasa@swaniawski.info", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 13, "id": 31, "created_by_id": null, "subscriber_id": 0, "address": "rusty_white@strosin.com", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 13, "id": 32, "created_by_id": null, "subscriber_id": 0, "address": "holden_kessler@corwinmorissette.info", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 13, "id": 33, "created_by_id": null, "subscriber_id": 0, "address": "kadin@nader.com", "created_at": "2009-03-24T05:25:05Z"}], "last_name": "Beatty", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "rudolph", "contact_id": 13, "id": 27, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "created_at": "2009-03-24T05:25:05Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 14, "id": 26, "created_by_id": null, "subscriber_id": 0, "address": "http://collins.us/", "created_at": "2009-03-24T05:25:05Z"}], "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 14, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "519-999-4519 x9971", "contact_id": 14, "id": 32, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "(615)566-6106 x4036", "contact_id": 14, "id": 33, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Kamrynshire", "zip": "56622-3772", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 14, "id": 29, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "6866 Borer Green", "state": "New Hampshire", "created_at": "2009-03-24T05:25:05Z"}], "first_name": "Easton", "email_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 14, "id": 34, "created_by_id": null, "subscriber_id": 0, "address": "casimer_becker@smithambeier.ca", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 14, "id": 35, "created_by_id": null, "subscriber_id": 0, "address": "levi.skiles@emmerich.info", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 14, "id": 36, "created_by_id": null, "subscriber_id": 0, "address": "gracie@hettinger.name", "created_at": "2009-03-24T05:25:05Z"}], "last_name": "Kassulke", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "janessa_lubowitz", "contact_id": 14, "id": 28, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "natasha", "contact_id": 14, "id": 29, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "carson", "contact_id": 14, "id": 30, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "created_at": "2009-03-24T05:25:05Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 15, "id": 27, "created_by_id": null, "subscriber_id": 0, "address": "http://wyman.us/", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 15, "id": 28, "created_by_id": null, "subscriber_id": 0, "address": "http://schinner.name/", "created_at": "2009-03-24T05:25:05Z"}], "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 15, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "964.066.7078 x136", "contact_id": 15, "id": 34, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "903-228-6364 x19706", "contact_id": 15, "id": 35, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Stephenmouth", "zip": "72531-4819", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 15, "id": 30, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "9648 Cassin Rapid", "state": "Kentucky", "created_at": "2009-03-24T05:25:05Z"}], "first_name": "Herta", "email_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 15, "id": 37, "created_by_id": null, "subscriber_id": 0, "address": "breanne_corkery@rutherford.info", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 15, "id": 38, "created_by_id": null, "subscriber_id": 0, "address": "cooper_thompson@mitchell.uk", "created_at": "2009-03-24T05:25:05Z"}], "last_name": "Lesch", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "audrey", "contact_id": 15, "id": 31, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "jarrett", "contact_id": 15, "id": 32, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "carmen.leannon", "contact_id": 15, "id": 33, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "created_at": "2009-03-24T05:25:05Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 16, "id": 29, "created_by_id": null, "subscriber_id": 0, "address": "http://runolfsdottirnitzsche.co.uk/", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 16, "id": 30, "created_by_id": null, "subscriber_id": 0, "address": "http://murraysipes.us/", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 16, "id": 31, "created_by_id": null, "subscriber_id": 0, "address": "http://vonruedenpurdy.uk/", "created_at": "2009-03-24T05:25:05Z"}], "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 16, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "022-860-1486 x1843", "contact_id": 16, "id": 36, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "498-244-6522 x25383", "contact_id": 16, "id": 37, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "284.663.2103", "contact_id": 16, "id": 38, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Darrylhaven", "zip": "76712", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 16, "id": 31, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "317 Montana Rest", "state": "Wisconsin", "created_at": "2009-03-24T05:25:05Z"}], "first_name": "Waino", "email_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 16, "id": 39, "created_by_id": null, "subscriber_id": 0, "address": "chelsey@kautzernitzsche.us", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 16, "id": 40, "created_by_id": null, "subscriber_id": 0, "address": "amaya.kling@jacobson.ca", "created_at": "2009-03-24T05:25:05Z"}], "last_name": "Dicki", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "luis_runte", "contact_id": 16, "id": 34, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "created_at": "2009-03-24T05:25:05Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 17, "id": 32, "created_by_id": null, "subscriber_id": 0, "address": "http://cummingshagenes.uk/", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 17, "id": 33, "created_by_id": null, "subscriber_id": 0, "address": "http://effertz.biz/", "created_at": "2009-03-24T05:25:05Z"}], "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 17, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "261-520-3598 x9502", "contact_id": 17, "id": 39, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "(649)763-2648 x008", "contact_id": 17, "id": 40, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Port Gastonview", "zip": "64116", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 17, "id": 32, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "661 Harvey Island", "state": "Utah", "created_at": "2009-03-24T05:25:05Z"}, {"lon": null, "city": "Port Cecil", "zip": "97870-1130", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 17, "id": 33, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "00325 Gutmann Club", "state": "Utah", "created_at": "2009-03-24T05:25:05Z"}], "first_name": "Ruben", "email_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 17, "id": 41, "created_by_id": null, "subscriber_id": 0, "address": "alyce@kirlin.ca", "created_at": "2009-03-24T05:25:05Z"}], "last_name": "Morissette", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "gavin.mante", "contact_id": 17, "id": 35, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "ezequiel", "contact_id": 17, "id": 36, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "created_at": "2009-03-24T05:25:05Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 18, "id": 34, "created_by_id": null, "subscriber_id": 0, "address": "http://jacobson.com/", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 18, "id": 35, "created_by_id": null, "subscriber_id": 0, "address": "http://ohara.com/", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 18, "id": 36, "created_by_id": null, "subscriber_id": 0, "address": "http://gaylordconsidine.ca/", "created_at": "2009-03-24T05:25:05Z"}], "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 18, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "1-532-228-6386 x1363", "contact_id": 18, "id": 41, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "337-797-7956", "contact_id": 18, "id": 42, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "(083)449-1710 x908", "contact_id": 18, "id": 43, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "(267)047-3591", "contact_id": 18, "id": 44, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [], "first_name": "Okey", "email_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 18, "id": 42, "created_by_id": null, "subscriber_id": 0, "address": "arjun.bogisich@danieldonnelly.info", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 18, "id": 43, "created_by_id": null, "subscriber_id": 0, "address": "lillian_von@senger.info", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 18, "id": 44, "created_by_id": null, "subscriber_id": 0, "address": "emanuel_gottlieb@bergnaum.us", "created_at": "2009-03-24T05:25:05Z"}], "last_name": "Ledner", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "charity_christiansen", "contact_id": 18, "id": 37, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "emily.white", "contact_id": 18, "id": 38, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "katarina_goodwin", "contact_id": 18, "id": 39, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "created_at": "2009-03-24T05:25:05Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 19, "id": 37, "created_by_id": null, "subscriber_id": 0, "address": "http://huelhoeger.us/", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 19, "id": 38, "created_by_id": null, "subscriber_id": 0, "address": "http://hackettolson.info/", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 19, "id": 39, "created_by_id": null, "subscriber_id": 0, "address": "http://runolfssonstroman.info/", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 19, "id": 40, "created_by_id": null, "subscriber_id": 0, "address": "http://kirlinfahey.name/", "created_at": "2009-03-24T05:25:05Z"}], "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 19, "created_by_id": null, "phone_numbers": [], "is_me": false, "subscriber_id": 0, "street_addresses": [], "first_name": "Monroe", "email_addresses": [], "last_name": "Erdman", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "etha_jacobs", "contact_id": 19, "id": 40, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "wayne.borer", "contact_id": 19, "id": 41, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "rosemarie", "contact_id": 19, "id": 42, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "pierre", "contact_id": 19, "id": 43, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "created_at": "2009-03-24T05:25:05Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [], "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 20, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "1-852-143-3800", "contact_id": 20, "id": 45, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "827.538.7627", "contact_id": 20, "id": 46, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "South Hazlemouth", "zip": "41093", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 20, "id": 34, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "179 Durward Drive", "state": "Indiana", "created_at": "2009-03-24T05:25:05Z"}], "first_name": "Millie", "email_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 20, "id": 45, "created_by_id": null, "subscriber_id": 0, "address": "brent.weissnat@rennercorwin.info", "created_at": "2009-03-24T05:25:05Z"}], "last_name": "Stehr", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "foster_ward", "contact_id": 20, "id": 44, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "dena", "contact_id": 20, "id": 45, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "ramon", "contact_id": 20, "id": 46, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "created_at": "2009-03-24T05:25:05Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [], "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 21, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "396-610-7869 x70824", "contact_id": 21, "id": 47, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "067.974.7175 x56750", "contact_id": 21, "id": 48, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "761.949.4571 x45067", "contact_id": 21, "id": 49, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "(154)869-3439 x0431", "contact_id": 21, "id": 50, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "North Jaunita", "zip": "58610", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 21, "id": 35, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "836 Myrtle Mission", "state": "Illinois", "created_at": "2009-03-24T05:25:05Z"}, {"lon": null, "city": "Blickburgh", "zip": "10466-0901", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 21, "id": 36, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "12929 Casper Meadow", "state": "Montana", "created_at": "2009-03-24T05:25:05Z"}, {"lon": null, "city": "West Johnnie", "zip": "14664-7296", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 21, "id": 37, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "13718 Kirstin Stravenue", "state": "Alaska", "created_at": "2009-03-24T05:25:05Z"}], "first_name": "Julianne", "email_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 21, "id": 46, "created_by_id": null, "subscriber_id": 0, "address": "shaylee_hodkiewicz@gulgowski.uk", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 21, "id": 47, "created_by_id": null, "subscriber_id": 0, "address": "valentin_waelchi@lakin.com", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 21, "id": 48, "created_by_id": null, "subscriber_id": 0, "address": "alisha@kertzmann.us", "created_at": "2009-03-24T05:25:05Z"}], "last_name": "Kerluke", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "karen_altenwerth", "contact_id": 21, "id": 47, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "lonnie", "contact_id": 21, "id": 48, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "jadon_kassulke", "contact_id": 21, "id": 49, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "created_at": "2009-03-24T05:25:05Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [], "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 22, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "106-754-1969", "contact_id": 22, "id": 51, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "237.440.1113 x470", "contact_id": 22, "id": 52, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "(895)764-7471", "contact_id": 22, "id": 53, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "number": "793.188.5293", "contact_id": 22, "id": 54, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "New Kathleen", "zip": "18255", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 22, "id": 38, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "5795 Upton Isle", "state": "Georgia", "created_at": "2009-03-24T05:25:05Z"}, {"lon": null, "city": "Port Frances", "zip": "36469-3308", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 22, "id": 39, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "4650 Feest Way", "state": "New Jersey", "created_at": "2009-03-24T05:25:05Z"}], "first_name": "Emma", "email_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 22, "id": 49, "created_by_id": null, "subscriber_id": 0, "address": "oral.hand@witting.ca", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 22, "id": 50, "created_by_id": null, "subscriber_id": 0, "address": "aliza_mckenzie@oberbrunner.biz", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 22, "id": 51, "created_by_id": null, "subscriber_id": 0, "address": "lance@funkquigley.info", "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "contact_id": 22, "id": 52, "created_by_id": null, "subscriber_id": 0, "address": "betty@bosco.biz", "created_at": "2009-03-24T05:25:05Z"}], "last_name": "West", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "giuseppe", "contact_id": 22, "id": 50, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "jay_swift", "contact_id": 22, "id": 51, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}, {"updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "service": "MobileMe", "username": "edison.wyman", "contact_id": 22, "id": 52, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:05Z"}], "created_at": "2009-03-24T05:25:05Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 23, "id": 41, "created_by_id": null, "subscriber_id": 0, "address": "http://cummings.co.uk/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 23, "id": 42, "created_by_id": null, "subscriber_id": 0, "address": "http://berge.name/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 23, "id": 43, "created_by_id": null, "subscriber_id": 0, "address": "http://witting.info/", "created_at": "2009-03-24T05:25:06Z"}], "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 23, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "1-786-582-6618 x11680", "contact_id": 23, "id": 55, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Lake Daxhaven", "zip": "88388", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 23, "id": 40, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "42139 Allison Gateway", "state": "Florida", "created_at": "2009-03-24T05:25:05Z"}, {"lon": null, "city": "Abigaylestad", "zip": "20349", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 23, "id": 41, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "814 Frances Burgs", "state": "Arkansas", "created_at": "2009-03-24T05:25:05Z"}, {"lon": null, "city": "Port Maddison", "zip": "09746-7510", "updated_at": "2009-03-24T05:25:05Z", "updated_by_id": null, "country": "United States of America", "contact_id": 23, "id": 42, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "51832 Johns Port", "state": "Oklahoma", "created_at": "2009-03-24T05:25:05Z"}], "first_name": "Preston", "email_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 23, "id": 53, "created_by_id": null, "subscriber_id": 0, "address": "dominic@macejkovic.ca", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 23, "id": 54, "created_by_id": null, "subscriber_id": 0, "address": "monty.anderson@hermann.us", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 23, "id": 55, "created_by_id": null, "subscriber_id": 0, "address": "koby.carter@toyheaney.co.uk", "created_at": "2009-03-24T05:25:06Z"}], "last_name": "Legros", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "deborah.cartwright", "contact_id": 23, "id": 53, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "destiny", "contact_id": 23, "id": 54, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "barry_herman", "contact_id": 23, "id": 55, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "brant", "contact_id": 23, "id": 56, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "created_at": "2009-03-24T05:25:05Z", "active": true}}, {"contact": {"company": true, "cached_tag_list": "", "web_addresses": [], "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "title": null, "delta": false, "company_name": "Will-VonRueden", "id": 24, "created_by_id": null, "phone_numbers": [], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Port Reba", "zip": "09448-0569", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 24, "id": 43, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "154 Kling Brook", "state": "Texas", "created_at": "2009-03-24T05:25:06Z"}], "first_name": "Chelsie", "email_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 24, "id": 56, "created_by_id": null, "subscriber_id": 0, "address": "reece_dach@walker.uk", "created_at": "2009-03-24T05:25:06Z"}], "last_name": "Klein", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "geo.grimes", "contact_id": 24, "id": 57, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "emmie", "contact_id": 24, "id": 58, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "santos", "contact_id": 24, "id": 59, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "jarrell_heidenreich", "contact_id": 24, "id": 60, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "created_at": "2009-03-24T05:25:06Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 25, "id": 44, "created_by_id": null, "subscriber_id": 0, "address": "http://ferrygrant.biz/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 25, "id": 45, "created_by_id": null, "subscriber_id": 0, "address": "http://steuber.us/", "created_at": "2009-03-24T05:25:06Z"}], "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 25, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "(631)632-1049", "contact_id": 25, "id": 56, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "935-545-0457", "contact_id": 25, "id": 57, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "555-192-9617 x76395", "contact_id": 25, "id": 58, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "686.667.1706 x12932", "contact_id": 25, "id": 59, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "West Vestaberg", "zip": "10367-9678", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 25, "id": 44, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "1825 Macejkovic Landing", "state": "Indiana", "created_at": "2009-03-24T05:25:06Z"}], "first_name": "Jana", "email_addresses": [], "last_name": "Dickinson", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "adonis", "contact_id": 25, "id": 61, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "augustine.doyle", "contact_id": 25, "id": 62, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "lew", "contact_id": 25, "id": 63, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "koby", "contact_id": 25, "id": 64, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "created_at": "2009-03-24T05:25:06Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [], "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 26, "created_by_id": null, "phone_numbers": [], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Jazmynville", "zip": "00797-0953", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 26, "id": 45, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "39924 Filiberto Lane", "state": "Indiana", "created_at": "2009-03-24T05:25:06Z"}, {"lon": null, "city": "Herminioborough", "zip": "77379-3167", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 26, "id": 46, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "3151 Clay Haven", "state": "Pennsylvania", "created_at": "2009-03-24T05:25:06Z"}], "first_name": "Reanna", "email_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 26, "id": 57, "created_by_id": null, "subscriber_id": 0, "address": "darian_kemmer@bashirian.uk", "created_at": "2009-03-24T05:25:06Z"}], "last_name": "Emmerich", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "lessie", "contact_id": 26, "id": 65, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "joy", "contact_id": 26, "id": 66, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "annabel_adams", "contact_id": 26, "id": 67, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "created_at": "2009-03-24T05:25:06Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [], "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 27, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "859.354.0195 x26895", "contact_id": 27, "id": 60, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "New Reynold", "zip": "39706", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 27, "id": 47, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "91470 Heaney Green", "state": "Virginia", "created_at": "2009-03-24T05:25:06Z"}], "first_name": "Kamron", "email_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 27, "id": 58, "created_by_id": null, "subscriber_id": 0, "address": "cleta.price@stantonsimonis.name", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 27, "id": 59, "created_by_id": null, "subscriber_id": 0, "address": "brennon_mayert@walsh.com", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 27, "id": 60, "created_by_id": null, "subscriber_id": 0, "address": "rose@becker.ca", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 27, "id": 61, "created_by_id": null, "subscriber_id": 0, "address": "lew.oconnell@hoppe.name", "created_at": "2009-03-24T05:25:06Z"}], "last_name": "Heller", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "bridget", "contact_id": 27, "id": 68, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "vernie.langworth", "contact_id": 27, "id": 69, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "crystal", "contact_id": 27, "id": 70, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "kyra", "contact_id": 27, "id": 71, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "created_at": "2009-03-24T05:25:06Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [], "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 28, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "953-168-5856", "contact_id": 28, "id": 61, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "1-460-636-7789 x6458", "contact_id": 28, "id": 62, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "142-915-0402 x6822", "contact_id": 28, "id": 63, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "903.037.7937 x2086", "contact_id": 28, "id": 64, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [], "first_name": "Amalia", "email_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 28, "id": 62, "created_by_id": null, "subscriber_id": 0, "address": "chaya@oconnerkris.biz", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 28, "id": 63, "created_by_id": null, "subscriber_id": 0, "address": "kurtis_bechtelar@heidenreich.co.uk", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 28, "id": 64, "created_by_id": null, "subscriber_id": 0, "address": "jayce@miller.us", "created_at": "2009-03-24T05:25:06Z"}], "last_name": "Nolan", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "dorris", "contact_id": 28, "id": 72, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "sydnee", "contact_id": 28, "id": 73, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "nova.jakubowski", "contact_id": 28, "id": 74, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "created_at": "2009-03-24T05:25:06Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [], "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 29, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "113-249-6358 x92848", "contact_id": 29, "id": 65, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [], "first_name": "Lindsey", "email_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 29, "id": 65, "created_by_id": null, "subscriber_id": 0, "address": "xander@morar.name", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 29, "id": 66, "created_by_id": null, "subscriber_id": 0, "address": "justina_franecki@batz.us", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 29, "id": 67, "created_by_id": null, "subscriber_id": 0, "address": "kyleigh_halvorson@gorczany.biz", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 29, "id": 68, "created_by_id": null, "subscriber_id": 0, "address": "cayla_jacobson@lesch.info", "created_at": "2009-03-24T05:25:06Z"}], "last_name": "Breitenberg", "instant_messenger_addresses": [], "created_at": "2009-03-24T05:25:06Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 30, "id": 46, "created_by_id": null, "subscriber_id": 0, "address": "http://dooleystreich.uk/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 30, "id": 47, "created_by_id": null, "subscriber_id": 0, "address": "http://prosaccobalistreri.info/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 30, "id": 48, "created_by_id": null, "subscriber_id": 0, "address": "http://lind.name/", "created_at": "2009-03-24T05:25:06Z"}], "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 30, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "1-477-443-8641 x224", "contact_id": 30, "id": 66, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "785-607-7334 x57740", "contact_id": 30, "id": 67, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Hirtheview", "zip": "92451", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 30, "id": 48, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "6797 Kaycee Streets", "state": "South Carolina", "created_at": "2009-03-24T05:25:06Z"}, {"lon": null, "city": "Tillmantown", "zip": "32258", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 30, "id": 49, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "38961 Von Port", "state": "Indiana", "created_at": "2009-03-24T05:25:06Z"}], "first_name": "Rick", "email_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 30, "id": 69, "created_by_id": null, "subscriber_id": 0, "address": "amelie.volkman@schaefer.uk", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 30, "id": 70, "created_by_id": null, "subscriber_id": 0, "address": "sophia.friesen@sanford.com", "created_at": "2009-03-24T05:25:06Z"}], "last_name": "Hilpert", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "sincere", "contact_id": 30, "id": 75, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "carlos", "contact_id": 30, "id": 76, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "miller.sauer", "contact_id": 30, "id": 77, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "created_at": "2009-03-24T05:25:06Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 31, "id": 49, "created_by_id": null, "subscriber_id": 0, "address": "http://gleichner.biz/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 31, "id": 50, "created_by_id": null, "subscriber_id": 0, "address": "http://corkerymurazik.ca/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 31, "id": 51, "created_by_id": null, "subscriber_id": 0, "address": "http://kuhnsmith.us/", "created_at": "2009-03-24T05:25:06Z"}], "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 31, "created_by_id": null, "phone_numbers": [], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "South Kyle", "zip": "25637", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 31, "id": 50, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "476 Kirk Stream", "state": "Tennessee", "created_at": "2009-03-24T05:25:06Z"}, {"lon": null, "city": "Carafurt", "zip": "37946", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 31, "id": 51, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "581 Lionel Dam", "state": "Colorado", "created_at": "2009-03-24T05:25:06Z"}, {"lon": null, "city": "Wilkinsonton", "zip": "82221-6315", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 31, "id": 52, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "096 Carole Wells", "state": "Pennsylvania", "created_at": "2009-03-24T05:25:06Z"}], "first_name": "Rebeca", "email_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 31, "id": 71, "created_by_id": null, "subscriber_id": 0, "address": "michele_sporer@mills.co.uk", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 31, "id": 72, "created_by_id": null, "subscriber_id": 0, "address": "lindsay@upton.name", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 31, "id": 73, "created_by_id": null, "subscriber_id": 0, "address": "kelsie_bosco@darelangosh.biz", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 31, "id": 74, "created_by_id": null, "subscriber_id": 0, "address": "teresa@bahringerabbott.info", "created_at": "2009-03-24T05:25:06Z"}], "last_name": "Dooley", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "meagan.kohler", "contact_id": 31, "id": 78, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "dannie_kirlin", "contact_id": 31, "id": 79, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "created_at": "2009-03-24T05:25:06Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 32, "id": 52, "created_by_id": null, "subscriber_id": 0, "address": "http://blicksmitham.biz/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 32, "id": 53, "created_by_id": null, "subscriber_id": 0, "address": "http://oreillykutch.co.uk/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 32, "id": 54, "created_by_id": null, "subscriber_id": 0, "address": "http://pfeffer.us/", "created_at": "2009-03-24T05:25:06Z"}], "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 32, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "973.679.8726", "contact_id": 32, "id": 68, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "535-952-5388 x258", "contact_id": 32, "id": 69, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "805.812.1501", "contact_id": 32, "id": 70, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "(000)866-0904", "contact_id": 32, "id": 71, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "North Duncan", "zip": "75863-4321", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 32, "id": 53, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "125 Nienow Streets", "state": "Colorado", "created_at": "2009-03-24T05:25:06Z"}], "first_name": "Carrie", "email_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 32, "id": 75, "created_by_id": null, "subscriber_id": 0, "address": "glennie@feeney.uk", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 32, "id": 76, "created_by_id": null, "subscriber_id": 0, "address": "rico.reilly@howe.us", "created_at": "2009-03-24T05:25:06Z"}], "last_name": "Raynor", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "ryleigh.johnson", "contact_id": 32, "id": 80, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "alisha_romaguera", "contact_id": 32, "id": 81, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "created_at": "2009-03-24T05:25:06Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 33, "id": 55, "created_by_id": null, "subscriber_id": 0, "address": "http://nikolaus.biz/", "created_at": "2009-03-24T05:25:06Z"}], "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 33, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "059.433.8118 x6758", "contact_id": 33, "id": 72, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Rauview", "zip": "54427", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 33, "id": 54, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "64106 Goyette Trace", "state": "South Dakota", "created_at": "2009-03-24T05:25:06Z"}, {"lon": null, "city": "West Monique", "zip": "79231-6131", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 33, "id": 55, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "15203 Heaven Route", "state": "Georgia", "created_at": "2009-03-24T05:25:06Z"}], "first_name": "Sarina", "email_addresses": [], "last_name": "Crona", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "treva.fahey", "contact_id": 33, "id": 82, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "zachery", "contact_id": 33, "id": 83, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "created_at": "2009-03-24T05:25:06Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 34, "id": 56, "created_by_id": null, "subscriber_id": 0, "address": "http://crooks.biz/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 34, "id": 57, "created_by_id": null, "subscriber_id": 0, "address": "http://conroy.co.uk/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 34, "id": 58, "created_by_id": null, "subscriber_id": 0, "address": "http://bartell.ca/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 34, "id": 59, "created_by_id": null, "subscriber_id": 0, "address": "http://doyle.name/", "created_at": "2009-03-24T05:25:06Z"}], "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 34, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "045.066.7984 x274", "contact_id": 34, "id": 73, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "301-263-8387", "contact_id": 34, "id": 74, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Liamstad", "zip": "70428-1482", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 34, "id": 56, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "794 Kamren Glens", "state": "Ohio", "created_at": "2009-03-24T05:25:06Z"}, {"lon": null, "city": "Port Price", "zip": "20749", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 34, "id": 57, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "386 Wendell Fall", "state": "New Hampshire", "created_at": "2009-03-24T05:25:06Z"}, {"lon": null, "city": "Lake Augustfort", "zip": "75861", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 34, "id": 58, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "78447 Kunde Vista", "state": "South Dakota", "created_at": "2009-03-24T05:25:06Z"}], "first_name": "Jennie", "email_addresses": [], "last_name": "Hartmann", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "lucio", "contact_id": 34, "id": 84, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "simone.harber", "contact_id": 34, "id": 85, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "heaven", "contact_id": 34, "id": 86, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "rashawn", "contact_id": 34, "id": 87, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "created_at": "2009-03-24T05:25:06Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 35, "id": 60, "created_by_id": null, "subscriber_id": 0, "address": "http://ernserkeeling.us/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 35, "id": 61, "created_by_id": null, "subscriber_id": 0, "address": "http://conroy.info/", "created_at": "2009-03-24T05:25:06Z"}], "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 35, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "254.564.3393", "contact_id": 35, "id": 75, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [], "first_name": "Evans", "email_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 35, "id": 77, "created_by_id": null, "subscriber_id": 0, "address": "isai_cassin@rowe.co.uk", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 35, "id": 78, "created_by_id": null, "subscriber_id": 0, "address": "fred@labadie.co.uk", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 35, "id": 79, "created_by_id": null, "subscriber_id": 0, "address": "karson.pacocha@leffler.name", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 35, "id": 80, "created_by_id": null, "subscriber_id": 0, "address": "bridgette@johnstonkeebler.com", "created_at": "2009-03-24T05:25:06Z"}], "last_name": "Fadel", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "crystel.bruen", "contact_id": 35, "id": 88, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "abelardo.deckow", "contact_id": 35, "id": 89, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "created_at": "2009-03-24T05:25:06Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 36, "id": 62, "created_by_id": null, "subscriber_id": 0, "address": "http://gleichnerbergstrom.uk/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 36, "id": 63, "created_by_id": null, "subscriber_id": 0, "address": "http://okuneva.uk/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 36, "id": 64, "created_by_id": null, "subscriber_id": 0, "address": "http://wiza.com/", "created_at": "2009-03-24T05:25:06Z"}], "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 36, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "(313)715-1281 x67586", "contact_id": 36, "id": 76, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [], "first_name": "Oscar", "email_addresses": [], "last_name": "Rice", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "raphaelle.renner", "contact_id": 36, "id": 90, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "created_at": "2009-03-24T05:25:06Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 37, "id": 65, "created_by_id": null, "subscriber_id": 0, "address": "http://treutel.ca/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 37, "id": 66, "created_by_id": null, "subscriber_id": 0, "address": "http://torp.biz/", "created_at": "2009-03-24T05:25:06Z"}], "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 37, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "831-771-5717 x667", "contact_id": 37, "id": 77, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Glennieview", "zip": "23339-1414", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 37, "id": 59, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "14029 Reichel Islands", "state": "New Jersey", "created_at": "2009-03-24T05:25:06Z"}, {"lon": null, "city": "West Hershel", "zip": "67101-9164", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 37, "id": 60, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "005 Sallie Pike", "state": "South Carolina", "created_at": "2009-03-24T05:25:06Z"}, {"lon": null, "city": "West Margaretview", "zip": "68014", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 37, "id": 61, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "5683 Jan Springs", "state": "Missouri", "created_at": "2009-03-24T05:25:06Z"}], "first_name": "Ernie", "email_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 37, "id": 81, "created_by_id": null, "subscriber_id": 0, "address": "monty.ohara@schulist.co.uk", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 37, "id": 82, "created_by_id": null, "subscriber_id": 0, "address": "tracy@boyer.biz", "created_at": "2009-03-24T05:25:06Z"}], "last_name": "Borer", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "nikolas", "contact_id": 37, "id": 91, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "joel", "contact_id": 37, "id": 92, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "cleve_herzog", "contact_id": 37, "id": 93, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "created_at": "2009-03-24T05:25:06Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 38, "id": 67, "created_by_id": null, "subscriber_id": 0, "address": "http://purdy.biz/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 38, "id": 68, "created_by_id": null, "subscriber_id": 0, "address": "http://davisschmitt.biz/", "created_at": "2009-03-24T05:25:06Z"}], "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 38, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "1-618-612-6222 x1590", "contact_id": 38, "id": 78, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "(548)144-4161 x326", "contact_id": 38, "id": 79, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "1-576-537-7841", "contact_id": 38, "id": 80, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [], "first_name": "Ubaldo", "email_addresses": [], "last_name": "Rau", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "ferne.oberbrunner", "contact_id": 38, "id": 94, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "allie.okeefe", "contact_id": 38, "id": 95, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "weston", "contact_id": 38, "id": 96, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "created_at": "2009-03-24T05:25:06Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 39, "id": 69, "created_by_id": null, "subscriber_id": 0, "address": "http://block.ca/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 39, "id": 70, "created_by_id": null, "subscriber_id": 0, "address": "http://nienow.uk/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 39, "id": 71, "created_by_id": null, "subscriber_id": 0, "address": "http://franeckiwalter.co.uk/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 39, "id": 72, "created_by_id": null, "subscriber_id": 0, "address": "http://marquardtturner.co.uk/", "created_at": "2009-03-24T05:25:06Z"}], "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 39, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "799-789-4778", "contact_id": 39, "id": 81, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "837-128-6228 x8247", "contact_id": 39, "id": 82, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "1-641-522-9935", "contact_id": 39, "id": 83, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "1-568-641-8891 x9141", "contact_id": 39, "id": 84, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Carterport", "zip": "09754-2303", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 39, "id": 62, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "2913 Nienow Mill", "state": "Oklahoma", "created_at": "2009-03-24T05:25:06Z"}, {"lon": null, "city": "Rocioville", "zip": "99688-4645", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 39, "id": 63, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "56909 Jakubowski Court", "state": "Ohio", "created_at": "2009-03-24T05:25:06Z"}, {"lon": null, "city": "Champlintown", "zip": "75582-5043", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 39, "id": 64, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "68740 Mayert Corner", "state": "South Dakota", "created_at": "2009-03-24T05:25:06Z"}], "first_name": "Kirstin", "email_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 39, "id": 83, "created_by_id": null, "subscriber_id": 0, "address": "brendon@mayert.us", "created_at": "2009-03-24T05:25:06Z"}], "last_name": "Legros", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "dayne_hackett", "contact_id": 39, "id": 97, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "jeramy.brekke", "contact_id": 39, "id": 98, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "kristian", "contact_id": 39, "id": 99, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "created_at": "2009-03-24T05:25:06Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 40, "id": 73, "created_by_id": null, "subscriber_id": 0, "address": "http://emmerich.ca/", "created_at": "2009-03-24T05:25:06Z"}], "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 40, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "(918)244-6002 x13254", "contact_id": 40, "id": 85, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "(326)488-7774 x898", "contact_id": 40, "id": 86, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "235-458-2563 x2579", "contact_id": 40, "id": 87, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Port Marianne", "zip": "44145-5911", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 40, "id": 65, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "35075 Skye Canyon", "state": "South Dakota", "created_at": "2009-03-24T05:25:06Z"}, {"lon": null, "city": "West Josianefort", "zip": "19978", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 40, "id": 66, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "39169 Watsica Roads", "state": "Tennessee", "created_at": "2009-03-24T05:25:06Z"}], "first_name": "Georgianna", "email_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 40, "id": 84, "created_by_id": null, "subscriber_id": 0, "address": "stan@altenwerth.us", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 40, "id": 85, "created_by_id": null, "subscriber_id": 0, "address": "devon.kuvalis@vandervort.biz", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 40, "id": 86, "created_by_id": null, "subscriber_id": 0, "address": "roger.gusikowski@zulauf.uk", "created_at": "2009-03-24T05:25:06Z"}], "last_name": "Cartwright", "instant_messenger_addresses": [], "created_at": "2009-03-24T05:25:06Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 41, "id": 74, "created_by_id": null, "subscriber_id": 0, "address": "http://homenick.uk/", "created_at": "2009-03-24T05:25:06Z"}], "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 41, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "691-044-3254 x530", "contact_id": 41, "id": 88, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "(582)708-9909 x2523", "contact_id": 41, "id": 89, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "1-338-594-0116", "contact_id": 41, "id": 90, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "816.702.3774", "contact_id": 41, "id": 91, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Port Kameronville", "zip": "77527-4776", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 41, "id": 67, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "6742 O'Kon Point", "state": "Nevada", "created_at": "2009-03-24T05:25:06Z"}, {"lon": null, "city": "Coraside", "zip": "26642-2532", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 41, "id": 68, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "8231 White Keys", "state": "Missouri", "created_at": "2009-03-24T05:25:06Z"}, {"lon": null, "city": "North Hillard", "zip": "82631-6450", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 41, "id": 69, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "64782 Wisoky Stravenue", "state": "South Dakota", "created_at": "2009-03-24T05:25:06Z"}], "first_name": "Tyree", "email_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 41, "id": 87, "created_by_id": null, "subscriber_id": 0, "address": "tevin.quitzon@littelskiles.co.uk", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 41, "id": 88, "created_by_id": null, "subscriber_id": 0, "address": "lennie.miller@glover.co.uk", "created_at": "2009-03-24T05:25:06Z"}], "last_name": "Flatley", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "phoebe", "contact_id": 41, "id": 100, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "created_at": "2009-03-24T05:25:06Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 42, "id": 75, "created_by_id": null, "subscriber_id": 0, "address": "http://bashirian.ca/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 42, "id": 76, "created_by_id": null, "subscriber_id": 0, "address": "http://mertzcartwright.uk/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 42, "id": 77, "created_by_id": null, "subscriber_id": 0, "address": "http://denesik.name/", "created_at": "2009-03-24T05:25:06Z"}], "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 42, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "991.813.3694 x660", "contact_id": 42, "id": 92, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "1-536-853-8976 x2458", "contact_id": 42, "id": 93, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "322.472.0955", "contact_id": 42, "id": 94, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "South Luz", "zip": "13702", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 42, "id": 70, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "8262 Kianna Summit", "state": "New Jersey", "created_at": "2009-03-24T05:25:06Z"}], "first_name": "Harmony", "email_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 42, "id": 89, "created_by_id": null, "subscriber_id": 0, "address": "chanel@haag.co.uk", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 42, "id": 90, "created_by_id": null, "subscriber_id": 0, "address": "maritza.feest@reillylangosh.biz", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 42, "id": 91, "created_by_id": null, "subscriber_id": 0, "address": "presley.veum@lindgren.uk", "created_at": "2009-03-24T05:25:06Z"}], "last_name": "Kohler", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "hugh", "contact_id": 42, "id": 101, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "gilbert.veum", "contact_id": 42, "id": 102, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "elsa_leannon", "contact_id": 42, "id": 103, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "created_at": "2009-03-24T05:25:06Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 43, "id": 78, "created_by_id": null, "subscriber_id": 0, "address": "http://cormier.ca/", "created_at": "2009-03-24T05:25:06Z"}], "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 43, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "075-580-4726", "contact_id": 43, "id": 95, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "260.310.7451", "contact_id": 43, "id": 96, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "West Albin", "zip": "73305-9354", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 43, "id": 71, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "5856 Volkman Knolls", "state": "Kentucky", "created_at": "2009-03-24T05:25:06Z"}], "first_name": "Marianne", "email_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 43, "id": 92, "created_by_id": null, "subscriber_id": 0, "address": "terrance.schmidt@hauck.us", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 43, "id": 93, "created_by_id": null, "subscriber_id": 0, "address": "brook@labadie.ca", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 43, "id": 94, "created_by_id": null, "subscriber_id": 0, "address": "lilly.kilback@klein.name", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 43, "id": 95, "created_by_id": null, "subscriber_id": 0, "address": "tristin@kutch.co.uk", "created_at": "2009-03-24T05:25:06Z"}], "last_name": "Simonis", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "daphnee.nicolas", "contact_id": 43, "id": 104, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "abdiel_hoeger", "contact_id": 43, "id": 105, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "eloisa", "contact_id": 43, "id": 106, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "created_at": "2009-03-24T05:25:06Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 44, "id": 79, "created_by_id": null, "subscriber_id": 0, "address": "http://tillmanvandervort.biz/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 44, "id": 80, "created_by_id": null, "subscriber_id": 0, "address": "http://miller.us/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 44, "id": 81, "created_by_id": null, "subscriber_id": 0, "address": "http://langosh.com/", "created_at": "2009-03-24T05:25:06Z"}], "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 44, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "1-695-292-2065 x140", "contact_id": 44, "id": 97, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "600.027.6713 x70410", "contact_id": 44, "id": 98, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "637.146.0155 x198", "contact_id": 44, "id": 99, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Weimannchester", "zip": "00810-9473", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 44, "id": 72, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "484 Bogan Run", "state": "Utah", "created_at": "2009-03-24T05:25:06Z"}], "first_name": "Kiel", "email_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 44, "id": 96, "created_by_id": null, "subscriber_id": 0, "address": "jarred@osinskiblick.info", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 44, "id": 97, "created_by_id": null, "subscriber_id": 0, "address": "queenie@bednarklein.com", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 44, "id": 98, "created_by_id": null, "subscriber_id": 0, "address": "vilma_heaney@blanda.com", "created_at": "2009-03-24T05:25:06Z"}], "last_name": "Hauck", "instant_messenger_addresses": [], "created_at": "2009-03-24T05:25:06Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 45, "id": 82, "created_by_id": null, "subscriber_id": 0, "address": "http://aufderhar.info/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 45, "id": 83, "created_by_id": null, "subscriber_id": 0, "address": "http://gibson.name/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 45, "id": 84, "created_by_id": null, "subscriber_id": 0, "address": "http://cartwright.ca/", "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 45, "id": 85, "created_by_id": null, "subscriber_id": 0, "address": "http://cremin.uk/", "created_at": "2009-03-24T05:25:06Z"}], "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 45, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "534.623.3129", "contact_id": 45, "id": 100, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "(114)805-2985 x04720", "contact_id": 45, "id": 101, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "North Kanemouth", "zip": "40011-8934", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 45, "id": 73, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "150 Audrey Meadows", "state": "Vermont", "created_at": "2009-03-24T05:25:06Z"}, {"lon": null, "city": "Torranceside", "zip": "22137-6616", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 45, "id": 74, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "523 Cleveland Lakes", "state": "Wisconsin", "created_at": "2009-03-24T05:25:06Z"}, {"lon": null, "city": "East Ransomview", "zip": "62012-0539", "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "country": "United States of America", "contact_id": 45, "id": 75, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "23317 Kacey Stream", "state": "Michigan", "created_at": "2009-03-24T05:25:06Z"}], "first_name": "Jaren", "email_addresses": [], "last_name": "Ziemann", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "kelli_lehner", "contact_id": 45, "id": 107, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "amos", "contact_id": 45, "id": 108, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "orrin", "contact_id": 45, "id": 109, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "created_at": "2009-03-24T05:25:06Z", "active": true}}, {"contact": {"company": true, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 46, "id": 86, "created_by_id": null, "subscriber_id": 0, "address": "http://medhurst.ca/", "created_at": "2009-03-24T05:25:06Z"}], "updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "title": null, "delta": false, "company_name": "Becker-Kiehn", "id": 46, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "181-873-8103", "contact_id": 46, "id": 102, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "1-702-526-1516", "contact_id": 46, "id": 103, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}, {"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "number": "(584)235-7431 x440", "contact_id": 46, "id": 104, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [], "first_name": "Daisy", "email_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "contact_id": 46, "id": 99, "created_by_id": null, "subscriber_id": 0, "address": "manley_rath@carroll.co.uk", "created_at": "2009-03-24T05:25:06Z"}], "last_name": "Christiansen", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:06Z", "updated_by_id": null, "service": "MobileMe", "username": "marcelino", "contact_id": 46, "id": 110, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:06Z"}], "created_at": "2009-03-24T05:25:06Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 47, "id": 87, "created_by_id": null, "subscriber_id": 0, "address": "http://kunzegraham.info/", "created_at": "2009-03-24T05:25:07Z"}], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 47, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "(070)344-5984 x977", "contact_id": 47, "id": 105, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "West Mallory", "zip": "31490-7764", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 47, "id": 76, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "9858 Darian Tunnel", "state": "Iowa", "created_at": "2009-03-24T05:25:07Z"}, {"lon": null, "city": "West Kamerontown", "zip": "77703-3051", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 47, "id": 77, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "73231 Casper Via", "state": "Nevada", "created_at": "2009-03-24T05:25:07Z"}, {"lon": null, "city": "McGlynntown", "zip": "74519-7251", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 47, "id": 78, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "7533 Edd Knoll", "state": "Utah", "created_at": "2009-03-24T05:25:07Z"}], "first_name": "Chester", "email_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 47, "id": 100, "created_by_id": null, "subscriber_id": 0, "address": "jeanette_hermiston@kulas.ca", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 47, "id": 101, "created_by_id": null, "subscriber_id": 0, "address": "jarret@braun.biz", "created_at": "2009-03-24T05:25:07Z"}], "last_name": "Haag", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "reagan", "contact_id": 47, "id": 111, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "annie", "contact_id": 47, "id": 112, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "ethan", "contact_id": 47, "id": 113, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 48, "id": 88, "created_by_id": null, "subscriber_id": 0, "address": "http://gulgowski.ca/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 48, "id": 89, "created_by_id": null, "subscriber_id": 0, "address": "http://hirthe.uk/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 48, "id": 90, "created_by_id": null, "subscriber_id": 0, "address": "http://lebsack.uk/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 48, "id": 91, "created_by_id": null, "subscriber_id": 0, "address": "http://schulist.info/", "created_at": "2009-03-24T05:25:07Z"}], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 48, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "695-923-4960 x491", "contact_id": 48, "id": 106, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "1-972-892-5072 x216", "contact_id": 48, "id": 107, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "894.904.7199 x2812", "contact_id": 48, "id": 108, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "West Claud", "zip": "59705", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 48, "id": 79, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "00805 Tromp Mews", "state": "New Jersey", "created_at": "2009-03-24T05:25:07Z"}], "first_name": "Kaya", "email_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 48, "id": 102, "created_by_id": null, "subscriber_id": 0, "address": "rafael_orn@crona.co.uk", "created_at": "2009-03-24T05:25:07Z"}], "last_name": "Tromp", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "aniya", "contact_id": 48, "id": 114, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "jerald.reinger", "contact_id": 48, "id": 115, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "micheal", "contact_id": 48, "id": 116, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 49, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "(786)959-7653", "contact_id": 49, "id": 109, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "(065)578-2911 x08538", "contact_id": 49, "id": 110, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "403-845-5232 x770", "contact_id": 49, "id": 111, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [], "first_name": "Johanna", "email_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 49, "id": 103, "created_by_id": null, "subscriber_id": 0, "address": "winston@jaskolskicrooks.us", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 49, "id": 104, "created_by_id": null, "subscriber_id": 0, "address": "bridget@lang.co.uk", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 49, "id": 105, "created_by_id": null, "subscriber_id": 0, "address": "zakary@danielward.us", "created_at": "2009-03-24T05:25:07Z"}], "last_name": "Moen", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "candace", "contact_id": 49, "id": 117, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "furman_feil", "contact_id": 49, "id": 118, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "rolando_metz", "contact_id": 49, "id": 119, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "bonita_walsh", "contact_id": 49, "id": 120, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 50, "id": 92, "created_by_id": null, "subscriber_id": 0, "address": "http://luettgen.com/", "created_at": "2009-03-24T05:25:07Z"}], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 50, "created_by_id": null, "phone_numbers": [], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Lake Myrtie", "zip": "31671", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 50, "id": 80, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "384 Abraham Plain", "state": "North Carolina", "created_at": "2009-03-24T05:25:07Z"}], "first_name": "Nick", "email_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 50, "id": 106, "created_by_id": null, "subscriber_id": 0, "address": "blake.abshire@reingerhane.info", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 50, "id": 107, "created_by_id": null, "subscriber_id": 0, "address": "nickolas_bergstrom@altenwerthcruickshank.biz", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 50, "id": 108, "created_by_id": null, "subscriber_id": 0, "address": "norberto.huel@heaney.com", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 50, "id": 109, "created_by_id": null, "subscriber_id": 0, "address": "elizabeth_funk@weissnat.us", "created_at": "2009-03-24T05:25:07Z"}], "last_name": "Terry", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "triston.wilkinson", "contact_id": 50, "id": 121, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "maxime", "contact_id": 50, "id": 122, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "daren", "contact_id": 50, "id": 123, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 51, "created_by_id": null, "phone_numbers": [], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "South Cole", "zip": "19411", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 51, "id": 81, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "896 Stanton Lights", "state": "Florida", "created_at": "2009-03-24T05:25:07Z"}, {"lon": null, "city": "O'Konfurt", "zip": "58380-4667", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 51, "id": 82, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "6462 Waino Ramp", "state": "North Carolina", "created_at": "2009-03-24T05:25:07Z"}, {"lon": null, "city": "Makaylamouth", "zip": "99422", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 51, "id": 83, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "52946 Reynolds Stream", "state": "Alabama", "created_at": "2009-03-24T05:25:07Z"}], "first_name": "Kristy", "email_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 51, "id": 110, "created_by_id": null, "subscriber_id": 0, "address": "ryan_rolfson@altenwerth.com", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 51, "id": 111, "created_by_id": null, "subscriber_id": 0, "address": "pearlie.hagenes@lang.co.uk", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 51, "id": 112, "created_by_id": null, "subscriber_id": 0, "address": "bernadine.mills@mcglynn.name", "created_at": "2009-03-24T05:25:07Z"}], "last_name": "Stanton", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "caitlyn", "contact_id": 51, "id": 124, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 52, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "1-739-269-2534 x218", "contact_id": 52, "id": 112, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "(217)250-5613", "contact_id": 52, "id": 113, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [], "first_name": "Kristin", "email_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 52, "id": 113, "created_by_id": null, "subscriber_id": 0, "address": "frank.hermiston@krislindgren.biz", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 52, "id": 114, "created_by_id": null, "subscriber_id": 0, "address": "myrtie_treutel@haagwalter.info", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 52, "id": 115, "created_by_id": null, "subscriber_id": 0, "address": "aurelie_vonrueden@hermanndeckow.name", "created_at": "2009-03-24T05:25:07Z"}], "last_name": "Lind", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "idell", "contact_id": 52, "id": 125, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "autumn", "contact_id": 52, "id": 126, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "dashawn", "contact_id": 52, "id": 127, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": true, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 53, "id": 93, "created_by_id": null, "subscriber_id": 0, "address": "http://schusterwintheiser.uk/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 53, "id": 94, "created_by_id": null, "subscriber_id": 0, "address": "http://prohaskasteuber.name/", "created_at": "2009-03-24T05:25:07Z"}], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": "Kunde, Yost and Schamberger", "id": 53, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "(245)622-9709 x99362", "contact_id": 53, "id": 114, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Leonardoberg", "zip": "39852-7296", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 53, "id": 84, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "90079 Ariel Turnpike", "state": "Arkansas", "created_at": "2009-03-24T05:25:07Z"}], "first_name": "Treva", "email_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 53, "id": 116, "created_by_id": null, "subscriber_id": 0, "address": "jerald@goldnerreichert.co.uk", "created_at": "2009-03-24T05:25:07Z"}], "last_name": "Kuhn", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "peggie_kling", "contact_id": 53, "id": 128, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "marcella.thompson", "contact_id": 53, "id": 129, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "horace", "contact_id": 53, "id": 130, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 54, "id": 95, "created_by_id": null, "subscriber_id": 0, "address": "http://boyerbartoletti.com/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 54, "id": 96, "created_by_id": null, "subscriber_id": 0, "address": "http://smithbergnaum.ca/", "created_at": "2009-03-24T05:25:07Z"}], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 54, "created_by_id": null, "phone_numbers": [], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "South Kielburgh", "zip": "34118", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 54, "id": 85, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "57626 Jaylin Ridges", "state": "Massachusetts", "created_at": "2009-03-24T05:25:07Z"}, {"lon": null, "city": "Lake Hopeland", "zip": "75465-6709", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 54, "id": 86, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "576 Koelpin Knolls", "state": "Maine", "created_at": "2009-03-24T05:25:07Z"}], "first_name": "Skyla", "email_addresses": [], "last_name": "Hansen", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "marge", "contact_id": 54, "id": 131, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 55, "id": 97, "created_by_id": null, "subscriber_id": 0, "address": "http://upton.biz/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 55, "id": 98, "created_by_id": null, "subscriber_id": 0, "address": "http://rathbode.ca/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 55, "id": 99, "created_by_id": null, "subscriber_id": 0, "address": "http://lowecole.co.uk/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 55, "id": 100, "created_by_id": null, "subscriber_id": 0, "address": "http://streich.name/", "created_at": "2009-03-24T05:25:07Z"}], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 55, "created_by_id": null, "phone_numbers": [], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "South Wilfordville", "zip": "29877-8808", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 55, "id": 87, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "4025 Precious Point", "state": "New Jersey", "created_at": "2009-03-24T05:25:07Z"}, {"lon": null, "city": "Darianafort", "zip": "06602", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 55, "id": 88, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "9672 Baumbach Curve", "state": "West Virginia", "created_at": "2009-03-24T05:25:07Z"}, {"lon": null, "city": "Schusterland", "zip": "12796", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 55, "id": 89, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "9678 Casper Well", "state": "North Carolina", "created_at": "2009-03-24T05:25:07Z"}], "first_name": "Faye", "email_addresses": [], "last_name": "Stamm", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "taurean.stoltenberg", "contact_id": 55, "id": 132, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 56, "id": 101, "created_by_id": null, "subscriber_id": 0, "address": "http://jaskolskiweber.uk/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 56, "id": 102, "created_by_id": null, "subscriber_id": 0, "address": "http://hegmann.us/", "created_at": "2009-03-24T05:25:07Z"}], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 56, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "254-168-4924", "contact_id": 56, "id": 115, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "1-327-419-0027 x3252", "contact_id": 56, "id": 116, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "(249)019-9999 x1540", "contact_id": 56, "id": 117, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "East Kennith", "zip": "07869-1085", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 56, "id": 90, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "921 Litzy Ramp", "state": "Maryland", "created_at": "2009-03-24T05:25:07Z"}, {"lon": null, "city": "Lolaville", "zip": "40558", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 56, "id": 91, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "24980 McGlynn Forest", "state": "South Dakota", "created_at": "2009-03-24T05:25:07Z"}, {"lon": null, "city": "New Louvenia", "zip": "00008-6338", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 56, "id": 92, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "7520 Kilback Meadows", "state": "Ohio", "created_at": "2009-03-24T05:25:07Z"}], "first_name": "Jolie", "email_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 56, "id": 117, "created_by_id": null, "subscriber_id": 0, "address": "milan@pollich.info", "created_at": "2009-03-24T05:25:07Z"}], "last_name": "Hintz", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "emile.blanda", "contact_id": 56, "id": 133, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 57, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "1-158-007-0933", "contact_id": 57, "id": 118, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "1-863-183-0098 x649", "contact_id": 57, "id": 119, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "(494)811-7618 x4240", "contact_id": 57, "id": 120, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Lake Alexzander", "zip": "61667-3597", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 57, "id": 93, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "28856 Kemmer Square", "state": "Mississippi", "created_at": "2009-03-24T05:25:07Z"}, {"lon": null, "city": "Vonmouth", "zip": "43466", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 57, "id": 94, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "41622 Michaela Green", "state": "Michigan", "created_at": "2009-03-24T05:25:07Z"}], "first_name": "Patience", "email_addresses": [], "last_name": "Kling", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "devonte_stehr", "contact_id": 57, "id": 134, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "herbert", "contact_id": 57, "id": 135, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "katlyn", "contact_id": 57, "id": 136, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "heidi_parisian", "contact_id": 57, "id": 137, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 58, "id": 103, "created_by_id": null, "subscriber_id": 0, "address": "http://ankundingsporer.co.uk/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 58, "id": 104, "created_by_id": null, "subscriber_id": 0, "address": "http://littel.biz/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 58, "id": 105, "created_by_id": null, "subscriber_id": 0, "address": "http://wiegand.biz/", "created_at": "2009-03-24T05:25:07Z"}], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 58, "created_by_id": null, "phone_numbers": [], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Kadestad", "zip": "80693", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 58, "id": 95, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "612 Farrell Station", "state": "New Hampshire", "created_at": "2009-03-24T05:25:07Z"}], "first_name": "Sandy", "email_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 58, "id": 118, "created_by_id": null, "subscriber_id": 0, "address": "jolie_herman@swaniawski.ca", "created_at": "2009-03-24T05:25:07Z"}], "last_name": "Grant", "instant_messenger_addresses": [], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 59, "id": 106, "created_by_id": null, "subscriber_id": 0, "address": "http://klocko.biz/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 59, "id": 107, "created_by_id": null, "subscriber_id": 0, "address": "http://mante.info/", "created_at": "2009-03-24T05:25:07Z"}], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 59, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "883.144.2280", "contact_id": 59, "id": 121, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "439-972-2074 x1310", "contact_id": 59, "id": 122, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [], "first_name": "Magali", "email_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 59, "id": 119, "created_by_id": null, "subscriber_id": 0, "address": "peyton@brekke.biz", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 59, "id": 120, "created_by_id": null, "subscriber_id": 0, "address": "jovan.boehm@bauch.biz", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 59, "id": 121, "created_by_id": null, "subscriber_id": 0, "address": "noel.olson@pfannerstilldoyle.name", "created_at": "2009-03-24T05:25:07Z"}], "last_name": "Johnson", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "merle_powlowski", "contact_id": 59, "id": 138, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 60, "id": 108, "created_by_id": null, "subscriber_id": 0, "address": "http://langosh.ca/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 60, "id": 109, "created_by_id": null, "subscriber_id": 0, "address": "http://witting.name/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 60, "id": 110, "created_by_id": null, "subscriber_id": 0, "address": "http://runolfsdottir.name/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 60, "id": 111, "created_by_id": null, "subscriber_id": 0, "address": "http://handflatley.com/", "created_at": "2009-03-24T05:25:07Z"}], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 60, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "1-267-271-9483", "contact_id": 60, "id": 123, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "(549)595-9504", "contact_id": 60, "id": 124, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "West Roelport", "zip": "56375-2597", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 60, "id": 96, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "73901 Dooley Creek", "state": "Florida", "created_at": "2009-03-24T05:25:07Z"}], "first_name": "Jessie", "email_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 60, "id": 122, "created_by_id": null, "subscriber_id": 0, "address": "aiyana@hyatthaag.name", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 60, "id": 123, "created_by_id": null, "subscriber_id": 0, "address": "cletus@marks.info", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 60, "id": 124, "created_by_id": null, "subscriber_id": 0, "address": "jordi@fritsch.com", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 60, "id": 125, "created_by_id": null, "subscriber_id": 0, "address": "michele.willms@uptonohara.info", "created_at": "2009-03-24T05:25:07Z"}], "last_name": "Ferry", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "lyric", "contact_id": 60, "id": 139, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "eve.skiles", "contact_id": 60, "id": 140, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "jakob", "contact_id": 60, "id": 141, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "jessika", "contact_id": 60, "id": 142, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 61, "id": 112, "created_by_id": null, "subscriber_id": 0, "address": "http://flatley.uk/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 61, "id": 113, "created_by_id": null, "subscriber_id": 0, "address": "http://osinski.ca/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 61, "id": 114, "created_by_id": null, "subscriber_id": 0, "address": "http://ricerath.info/", "created_at": "2009-03-24T05:25:07Z"}], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 61, "created_by_id": null, "phone_numbers": [], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "South Lelahmouth", "zip": "61790-2710", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 61, "id": 97, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "659 Nathanael Dale", "state": "Idaho", "created_at": "2009-03-24T05:25:07Z"}], "first_name": "Adeline", "email_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 61, "id": 126, "created_by_id": null, "subscriber_id": 0, "address": "karolann_thompson@jacobsoneffertz.com", "created_at": "2009-03-24T05:25:07Z"}], "last_name": "Hirthe", "instant_messenger_addresses": [], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": true, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 62, "id": 115, "created_by_id": null, "subscriber_id": 0, "address": "http://treutel.name/", "created_at": "2009-03-24T05:25:07Z"}], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": "McKenzie-Hills", "id": 62, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "1-227-202-5238", "contact_id": 62, "id": 125, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "(969)354-3492", "contact_id": 62, "id": 126, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "312-492-2605 x76241", "contact_id": 62, "id": 127, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "(822)058-7237 x20178", "contact_id": 62, "id": 128, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Webershire", "zip": "83623-5554", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 62, "id": 98, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "78906 Frederic Viaduct", "state": "Delaware", "created_at": "2009-03-24T05:25:07Z"}], "first_name": "Emil", "email_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 62, "id": 127, "created_by_id": null, "subscriber_id": 0, "address": "nikita@hayes.uk", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 62, "id": 128, "created_by_id": null, "subscriber_id": 0, "address": "piper_dach@pollich.us", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 62, "id": 129, "created_by_id": null, "subscriber_id": 0, "address": "leann.koepp@predovicstark.name", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 62, "id": 130, "created_by_id": null, "subscriber_id": 0, "address": "ray@bednar.uk", "created_at": "2009-03-24T05:25:07Z"}], "last_name": "Dietrich", "instant_messenger_addresses": [], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 63, "id": 116, "created_by_id": null, "subscriber_id": 0, "address": "http://huels.us/", "created_at": "2009-03-24T05:25:07Z"}], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 63, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "101.018.8535 x860", "contact_id": 63, "id": 129, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Salliehaven", "zip": "93145-9188", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 63, "id": 99, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "2135 Dustin Lakes", "state": "Kentucky", "created_at": "2009-03-24T05:25:07Z"}, {"lon": null, "city": "Wildermantown", "zip": "00398", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 63, "id": 100, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "8877 Keely Cove", "state": "Alabama", "created_at": "2009-03-24T05:25:07Z"}, {"lon": null, "city": "Linachester", "zip": "82107-2374", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 63, "id": 101, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "44710 Kellie Lake", "state": "Missouri", "created_at": "2009-03-24T05:25:07Z"}], "first_name": "Brayan", "email_addresses": [], "last_name": "Nolan", "instant_messenger_addresses": [], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 64, "id": 117, "created_by_id": null, "subscriber_id": 0, "address": "http://conn.info/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 64, "id": 118, "created_by_id": null, "subscriber_id": 0, "address": "http://metz.uk/", "created_at": "2009-03-24T05:25:07Z"}], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 64, "created_by_id": null, "phone_numbers": [], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "McGlynnfort", "zip": "68268", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 64, "id": 102, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "46758 Hiram Summit", "state": "Kentucky", "created_at": "2009-03-24T05:25:07Z"}], "first_name": "Ernie", "email_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 64, "id": 131, "created_by_id": null, "subscriber_id": 0, "address": "silas_roberts@hagenesgottlieb.co.uk", "created_at": "2009-03-24T05:25:07Z"}], "last_name": "Runolfsdottir", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "bertrand", "contact_id": 64, "id": 143, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 65, "id": 119, "created_by_id": null, "subscriber_id": 0, "address": "http://bruen.info/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 65, "id": 120, "created_by_id": null, "subscriber_id": 0, "address": "http://morar.com/", "created_at": "2009-03-24T05:25:07Z"}], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 65, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "378.418.3779", "contact_id": 65, "id": 130, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "1-668-781-4482", "contact_id": 65, "id": 131, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "720-171-0730 x66209", "contact_id": 65, "id": 132, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "1-891-845-4384 x4612", "contact_id": 65, "id": 133, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Jaquelinshire", "zip": "25817-6603", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 65, "id": 103, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "2405 Senger Park", "state": "Virginia", "created_at": "2009-03-24T05:25:07Z"}, {"lon": null, "city": "Lake Davonte", "zip": "87486", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 65, "id": 104, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "22513 Mann Drives", "state": "Wisconsin", "created_at": "2009-03-24T05:25:07Z"}, {"lon": null, "city": "East Abigalechester", "zip": "21178", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 65, "id": 105, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "38234 Alfred Lane", "state": "Alaska", "created_at": "2009-03-24T05:25:07Z"}], "first_name": "Modesto", "email_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 65, "id": 132, "created_by_id": null, "subscriber_id": 0, "address": "wilfred@schuppe.co.uk", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 65, "id": 133, "created_by_id": null, "subscriber_id": 0, "address": "bethel.green@schimmelhowell.us", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 65, "id": 134, "created_by_id": null, "subscriber_id": 0, "address": "demetrius_heidenreich@buckridge.com", "created_at": "2009-03-24T05:25:07Z"}], "last_name": "Rath", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "priscilla", "contact_id": 65, "id": 144, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "eda", "contact_id": 65, "id": 145, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "liam_ortiz", "contact_id": 65, "id": 146, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 66, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "715-096-9177 x593", "contact_id": 66, "id": 134, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "1-664-570-3529", "contact_id": 66, "id": 135, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "South Misty", "zip": "29740-0655", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 66, "id": 106, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "0326 Adaline Green", "state": "Kentucky", "created_at": "2009-03-24T05:25:07Z"}], "first_name": "Filomena", "email_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 66, "id": 135, "created_by_id": null, "subscriber_id": 0, "address": "petra.jakubowski@moore.biz", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 66, "id": 136, "created_by_id": null, "subscriber_id": 0, "address": "chet.lindgren@sawaynbruen.ca", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 66, "id": 137, "created_by_id": null, "subscriber_id": 0, "address": "lewis.conn@towne.biz", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 66, "id": 138, "created_by_id": null, "subscriber_id": 0, "address": "myrna.quigley@price.uk", "created_at": "2009-03-24T05:25:07Z"}], "last_name": "Fisher", "instant_messenger_addresses": [], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 67, "id": 121, "created_by_id": null, "subscriber_id": 0, "address": "http://mante.us/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 67, "id": 122, "created_by_id": null, "subscriber_id": 0, "address": "http://abernathycummerata.uk/", "created_at": "2009-03-24T05:25:07Z"}], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 67, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "1-139-669-6164", "contact_id": 67, "id": 136, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "092-025-8472 x25563", "contact_id": 67, "id": 137, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "1-456-405-8733", "contact_id": 67, "id": 138, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "(839)893-1471 x60861", "contact_id": 67, "id": 139, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Pfannerstillhaven", "zip": "27844", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 67, "id": 107, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "893 Lehner Corner", "state": "Mississippi", "created_at": "2009-03-24T05:25:07Z"}, {"lon": null, "city": "Lake Kareemview", "zip": "53872", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 67, "id": 108, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "34165 Anderson Fork", "state": "California", "created_at": "2009-03-24T05:25:07Z"}, {"lon": null, "city": "Raeborough", "zip": "72127", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 67, "id": 109, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "3710 Amara Plain", "state": "Alabama", "created_at": "2009-03-24T05:25:07Z"}], "first_name": "Winona", "email_addresses": [], "last_name": "Dickinson", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "annie.hills", "contact_id": 67, "id": 147, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "jeromy.torphy", "contact_id": 67, "id": 148, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "carrie_little", "contact_id": 67, "id": 149, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 68, "id": 123, "created_by_id": null, "subscriber_id": 0, "address": "http://vandervort.name/", "created_at": "2009-03-24T05:25:07Z"}], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 68, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "1-780-207-5013 x470", "contact_id": 68, "id": 140, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "1-100-279-1229", "contact_id": 68, "id": 141, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "261.668.4617 x175", "contact_id": 68, "id": 142, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "(095)084-4662", "contact_id": 68, "id": 143, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Gilestown", "zip": "70619", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 68, "id": 110, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "718 Botsford Manor", "state": "Mississippi", "created_at": "2009-03-24T05:25:07Z"}, {"lon": null, "city": "West Jadamouth", "zip": "24489-4240", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 68, "id": 111, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "8232 Colin Mountains", "state": "Minnesota", "created_at": "2009-03-24T05:25:07Z"}], "first_name": "Macey", "email_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 68, "id": 139, "created_by_id": null, "subscriber_id": 0, "address": "jeramie_haag@beahanreynolds.com", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 68, "id": 140, "created_by_id": null, "subscriber_id": 0, "address": "christiana_cassin@langworthokuneva.uk", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 68, "id": 141, "created_by_id": null, "subscriber_id": 0, "address": "marcelle@considinegoldner.info", "created_at": "2009-03-24T05:25:07Z"}], "last_name": "Goldner", "instant_messenger_addresses": [], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 69, "id": 124, "created_by_id": null, "subscriber_id": 0, "address": "http://hudson.info/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 69, "id": 125, "created_by_id": null, "subscriber_id": 0, "address": "http://watsicajacobi.info/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 69, "id": 126, "created_by_id": null, "subscriber_id": 0, "address": "http://lindgrenbogan.uk/", "created_at": "2009-03-24T05:25:07Z"}], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 69, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "1-335-022-5170 x9888", "contact_id": 69, "id": 144, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "1-607-405-9987", "contact_id": 69, "id": 145, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "1-243-872-3316 x7984", "contact_id": 69, "id": 146, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "(568)356-0006", "contact_id": 69, "id": 147, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Lake Dalton", "zip": "42373", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 69, "id": 112, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "830 Moore Shoal", "state": "Oregon", "created_at": "2009-03-24T05:25:07Z"}, {"lon": null, "city": "Hazelview", "zip": "70475-7333", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 69, "id": 113, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "11555 Zackery Mountains", "state": "Rhode Island", "created_at": "2009-03-24T05:25:07Z"}, {"lon": null, "city": "Daphneychester", "zip": "28920-6481", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 69, "id": 114, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "068 Loyce Mills", "state": "Colorado", "created_at": "2009-03-24T05:25:07Z"}], "first_name": "Curtis", "email_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 69, "id": 142, "created_by_id": null, "subscriber_id": 0, "address": "trenton_koelpin@gerlach.co.uk", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 69, "id": 143, "created_by_id": null, "subscriber_id": 0, "address": "brown.bednar@brakusschimmel.name", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 69, "id": 144, "created_by_id": null, "subscriber_id": 0, "address": "justyn.hoeger@brownbecker.info", "created_at": "2009-03-24T05:25:07Z"}], "last_name": "Nitzsche", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "alessandro", "contact_id": 69, "id": 150, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "delores_flatley", "contact_id": 69, "id": 151, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "margie.ledner", "contact_id": 69, "id": 152, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "deon_hickle", "contact_id": 69, "id": 153, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": true, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 70, "id": 127, "created_by_id": null, "subscriber_id": 0, "address": "http://hane.co.uk/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 70, "id": 128, "created_by_id": null, "subscriber_id": 0, "address": "http://sporer.ca/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 70, "id": 129, "created_by_id": null, "subscriber_id": 0, "address": "http://christiansen.biz/", "created_at": "2009-03-24T05:25:07Z"}], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": "Wisoky-Spencer", "id": 70, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "(116)841-6562 x545", "contact_id": 70, "id": 148, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "1-036-601-4859", "contact_id": 70, "id": 149, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "798.837.7592", "contact_id": 70, "id": 150, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "West Laylaburgh", "zip": "27384", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 70, "id": 115, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "28796 Annabel Passage", "state": "Florida", "created_at": "2009-03-24T05:25:07Z"}], "first_name": "Norval", "email_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 70, "id": 145, "created_by_id": null, "subscriber_id": 0, "address": "amie@mann.uk", "created_at": "2009-03-24T05:25:07Z"}], "last_name": "Becker", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "marisa", "contact_id": 70, "id": 154, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": true, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 71, "id": 130, "created_by_id": null, "subscriber_id": 0, "address": "http://moen.us/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 71, "id": 131, "created_by_id": null, "subscriber_id": 0, "address": "http://toy.ca/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 71, "id": 132, "created_by_id": null, "subscriber_id": 0, "address": "http://mcclure.uk/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 71, "id": 133, "created_by_id": null, "subscriber_id": 0, "address": "http://haagzboncak.ca/", "created_at": "2009-03-24T05:25:07Z"}], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": "Rosenbaum-O'Kon", "id": 71, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "1-758-912-5499", "contact_id": 71, "id": 151, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "1-618-799-7955", "contact_id": 71, "id": 152, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "910.837.9297", "contact_id": 71, "id": 153, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Skilesstad", "zip": "68403", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 71, "id": 116, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "7523 Tromp View", "state": "Nebraska", "created_at": "2009-03-24T05:25:07Z"}, {"lon": null, "city": "South Bertha", "zip": "56955", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 71, "id": 117, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "06645 Murazik Plaza", "state": "Wisconsin", "created_at": "2009-03-24T05:25:07Z"}, {"lon": null, "city": "Hallehaven", "zip": "60333", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 71, "id": 118, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "0940 Witting Camp", "state": "Georgia", "created_at": "2009-03-24T05:25:07Z"}], "first_name": "Nicolas", "email_addresses": [], "last_name": "Kerluke", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "brandy_bergstrom", "contact_id": 71, "id": 155, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "carmen", "contact_id": 71, "id": 156, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "stacy", "contact_id": 71, "id": 157, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "rodrigo", "contact_id": 71, "id": 158, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 72, "id": 134, "created_by_id": null, "subscriber_id": 0, "address": "http://grimes.uk/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 72, "id": 135, "created_by_id": null, "subscriber_id": 0, "address": "http://stromanoberbrunner.com/", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 72, "id": 136, "created_by_id": null, "subscriber_id": 0, "address": "http://hayeskoch.info/", "created_at": "2009-03-24T05:25:07Z"}], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 72, "created_by_id": null, "phone_numbers": [], "is_me": false, "subscriber_id": 0, "street_addresses": [], "first_name": "Braden", "email_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 72, "id": 146, "created_by_id": null, "subscriber_id": 0, "address": "beaulah.hammes@okeefelittle.biz", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 72, "id": 147, "created_by_id": null, "subscriber_id": 0, "address": "jaime.hansen@rau.co.uk", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 72, "id": 148, "created_by_id": null, "subscriber_id": 0, "address": "isabella@shields.uk", "created_at": "2009-03-24T05:25:07Z"}], "last_name": "Ebert", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "mckayla", "contact_id": 72, "id": 159, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "roman", "contact_id": 72, "id": 160, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "milo", "contact_id": 72, "id": 161, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [], "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 73, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "305.757.2958 x3345", "contact_id": 73, "id": 154, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "number": "843-494-6441", "contact_id": 73, "id": 155, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Abshirefurt", "zip": "49427-6427", "updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "country": "United States of America", "contact_id": 73, "id": 119, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "409 Isobel Inlet", "state": "South Dakota", "created_at": "2009-03-24T05:25:07Z"}], "first_name": "Lula", "email_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 73, "id": 149, "created_by_id": null, "subscriber_id": 0, "address": "maximillian.goldner@herzog.uk", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 73, "id": 150, "created_by_id": null, "subscriber_id": 0, "address": "holden.baumbach@ernser.co.uk", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 73, "id": 151, "created_by_id": null, "subscriber_id": 0, "address": "angus@orncrona.uk", "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "contact_id": 73, "id": 152, "created_by_id": null, "subscriber_id": 0, "address": "rico.hayes@bechtelar.info", "created_at": "2009-03-24T05:25:07Z"}], "last_name": "Rippin", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "mae.reilly", "contact_id": 73, "id": 162, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}, {"updated_at": "2009-03-24T05:25:07Z", "updated_by_id": null, "service": "MobileMe", "username": "kaela", "contact_id": 73, "id": 163, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:07Z"}], "created_at": "2009-03-24T05:25:07Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 74, "id": 137, "created_by_id": null, "subscriber_id": 0, "address": "http://thiel.com/", "created_at": "2009-03-24T05:25:08Z"}], "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 74, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "1-293-773-2694 x92411", "contact_id": 74, "id": 156, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "805-648-6254 x773", "contact_id": 74, "id": 157, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "1-102-520-5048", "contact_id": 74, "id": 158, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Gagehaven", "zip": "27771", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 74, "id": 120, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "8810 Taurean Heights", "state": "New Jersey", "created_at": "2009-03-24T05:25:08Z"}, {"lon": null, "city": "South Keelymouth", "zip": "04586", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 74, "id": 121, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "9833 Josh Walk", "state": "Idaho", "created_at": "2009-03-24T05:25:08Z"}, {"lon": null, "city": "Lake Deangeloshire", "zip": "33677-1077", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 74, "id": 122, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "0142 Nestor Crossing", "state": "Nebraska", "created_at": "2009-03-24T05:25:08Z"}], "first_name": "Davonte", "email_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 74, "id": 153, "created_by_id": null, "subscriber_id": 0, "address": "rusty@lowe.co.uk", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 74, "id": 154, "created_by_id": null, "subscriber_id": 0, "address": "alexa.koss@spinkaklocko.us", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 74, "id": 155, "created_by_id": null, "subscriber_id": 0, "address": "graciela@howell.co.uk", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 74, "id": 156, "created_by_id": null, "subscriber_id": 0, "address": "orpha_goyette@binsbahringer.us", "created_at": "2009-03-24T05:25:08Z"}], "last_name": "Gleichner", "instant_messenger_addresses": [], "created_at": "2009-03-24T05:25:08Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 75, "id": 138, "created_by_id": null, "subscriber_id": 0, "address": "http://reichel.com/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 75, "id": 139, "created_by_id": null, "subscriber_id": 0, "address": "http://price.info/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 75, "id": 140, "created_by_id": null, "subscriber_id": 0, "address": "http://carroll.co.uk/", "created_at": "2009-03-24T05:25:08Z"}], "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 75, "created_by_id": null, "phone_numbers": [], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Klingberg", "zip": "43555-9647", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 75, "id": 123, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "3447 Larry Roads", "state": "Wyoming", "created_at": "2009-03-24T05:25:08Z"}, {"lon": null, "city": "Lake Collin", "zip": "21085-6305", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 75, "id": 124, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "23835 Titus Well", "state": "Mississippi", "created_at": "2009-03-24T05:25:08Z"}, {"lon": null, "city": "West Friedrich", "zip": "33842-1393", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 75, "id": 125, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "594 Marielle Mews", "state": "Maine", "created_at": "2009-03-24T05:25:08Z"}], "first_name": "Gail", "email_addresses": [], "last_name": "Parker", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "janelle.klocko", "contact_id": 75, "id": 164, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "anika.grimes", "contact_id": 75, "id": 165, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "westley.bashirian", "contact_id": 75, "id": 166, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "created_at": "2009-03-24T05:25:08Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 76, "id": 141, "created_by_id": null, "subscriber_id": 0, "address": "http://stark.ca/", "created_at": "2009-03-24T05:25:08Z"}], "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 76, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "832-757-3130", "contact_id": 76, "id": 159, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "North Kristiantown", "zip": "79273", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 76, "id": 126, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "217 Francis Ridges", "state": "Alabama", "created_at": "2009-03-24T05:25:08Z"}], "first_name": "Myrna", "email_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 76, "id": 157, "created_by_id": null, "subscriber_id": 0, "address": "jayde@hessel.ca", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 76, "id": 158, "created_by_id": null, "subscriber_id": 0, "address": "geovanny@armstrongkautzer.name", "created_at": "2009-03-24T05:25:08Z"}], "last_name": "Quigley", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "micaela", "contact_id": 76, "id": 167, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "khalid", "contact_id": 76, "id": 168, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "ambrose", "contact_id": 76, "id": 169, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "created_at": "2009-03-24T05:25:08Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [], "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 77, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "(207)121-4233", "contact_id": 77, "id": 160, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "New Deon", "zip": "81083-2854", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 77, "id": 127, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "7691 Kris Ford", "state": "Rhode Island", "created_at": "2009-03-24T05:25:08Z"}, {"lon": null, "city": "Milanshire", "zip": "48290-3430", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 77, "id": 128, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "7081 Spencer Hills", "state": "Nevada", "created_at": "2009-03-24T05:25:08Z"}, {"lon": null, "city": "Hectorhaven", "zip": "67509", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 77, "id": 129, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "866 Donnelly Corners", "state": "Kansas", "created_at": "2009-03-24T05:25:08Z"}], "first_name": "Sarina", "email_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 77, "id": 159, "created_by_id": null, "subscriber_id": 0, "address": "hermann.murray@conroy.ca", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 77, "id": 160, "created_by_id": null, "subscriber_id": 0, "address": "martina.effertz@sipes.info", "created_at": "2009-03-24T05:25:08Z"}], "last_name": "Price", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "jaleel", "contact_id": 77, "id": 170, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "glenda_rau", "contact_id": 77, "id": 171, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "created_at": "2009-03-24T05:25:08Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 78, "id": 142, "created_by_id": null, "subscriber_id": 0, "address": "http://schimmel.us/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 78, "id": 143, "created_by_id": null, "subscriber_id": 0, "address": "http://buckridge.name/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 78, "id": 144, "created_by_id": null, "subscriber_id": 0, "address": "http://bogisichblick.co.uk/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 78, "id": 145, "created_by_id": null, "subscriber_id": 0, "address": "http://hansenabernathy.uk/", "created_at": "2009-03-24T05:25:08Z"}], "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 78, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "(733)548-6208", "contact_id": 78, "id": 161, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [], "first_name": "Amaya", "email_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 78, "id": 161, "created_by_id": null, "subscriber_id": 0, "address": "madisen_davis@turcotte.biz", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 78, "id": 162, "created_by_id": null, "subscriber_id": 0, "address": "afton_lind@fay.co.uk", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 78, "id": 163, "created_by_id": null, "subscriber_id": 0, "address": "irving.crona@paucek.com", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 78, "id": 164, "created_by_id": null, "subscriber_id": 0, "address": "imogene@zemlaklubowitz.ca", "created_at": "2009-03-24T05:25:08Z"}], "last_name": "Runte", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "marcelino", "contact_id": 78, "id": 172, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "name.kilback", "contact_id": 78, "id": 173, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "zoe", "contact_id": 78, "id": 174, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "created_at": "2009-03-24T05:25:08Z", "active": true}}, {"contact": {"company": true, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 79, "id": 146, "created_by_id": null, "subscriber_id": 0, "address": "http://wisoky.name/", "created_at": "2009-03-24T05:25:08Z"}], "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "title": null, "delta": false, "company_name": "Reichel, Effertz and Crooks", "id": 79, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "(794)357-3456 x7095", "contact_id": 79, "id": 162, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Port Tyler", "zip": "64839", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 79, "id": 130, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "20131 Sipes Dale", "state": "Arkansas", "created_at": "2009-03-24T05:25:08Z"}, {"lon": null, "city": "New Alejandra", "zip": "48285", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 79, "id": 131, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "770 Larson Rue", "state": "Wisconsin", "created_at": "2009-03-24T05:25:08Z"}], "first_name": "Alberto", "email_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 79, "id": 165, "created_by_id": null, "subscriber_id": 0, "address": "cullen@prosacco.name", "created_at": "2009-03-24T05:25:08Z"}], "last_name": "Zulauf", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "oliver_cormier", "contact_id": 79, "id": 175, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "armani", "contact_id": 79, "id": 176, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "created_at": "2009-03-24T05:25:08Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 80, "id": 147, "created_by_id": null, "subscriber_id": 0, "address": "http://krajcik.co.uk/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 80, "id": 148, "created_by_id": null, "subscriber_id": 0, "address": "http://stiedemann.name/", "created_at": "2009-03-24T05:25:08Z"}], "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 80, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "(453)707-7094", "contact_id": 80, "id": 163, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Fabiolafort", "zip": "82209-2566", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 80, "id": 132, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "51957 Dwight Gateway", "state": "North Carolina", "created_at": "2009-03-24T05:25:08Z"}], "first_name": "Isaac", "email_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 80, "id": 166, "created_by_id": null, "subscriber_id": 0, "address": "shania.simonis@ryan.ca", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 80, "id": 167, "created_by_id": null, "subscriber_id": 0, "address": "whitney_marvin@wehner.co.uk", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 80, "id": 168, "created_by_id": null, "subscriber_id": 0, "address": "marcelle@beierwill.biz", "created_at": "2009-03-24T05:25:08Z"}], "last_name": "Harber", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "eli_kling", "contact_id": 80, "id": 177, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "jimmy.paucek", "contact_id": 80, "id": 178, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "created_at": "2009-03-24T05:25:08Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 81, "id": 149, "created_by_id": null, "subscriber_id": 0, "address": "http://oconnerbins.uk/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 81, "id": 150, "created_by_id": null, "subscriber_id": 0, "address": "http://gutmann.us/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 81, "id": 151, "created_by_id": null, "subscriber_id": 0, "address": "http://upton.biz/", "created_at": "2009-03-24T05:25:08Z"}], "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 81, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "(478)297-5894", "contact_id": 81, "id": 164, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "982.200.0305", "contact_id": 81, "id": 165, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Lake Keyshawnton", "zip": "98507-9777", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 81, "id": 133, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "84618 Williamson Parkway", "state": "Texas", "created_at": "2009-03-24T05:25:08Z"}], "first_name": "Adalberto", "email_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 81, "id": 169, "created_by_id": null, "subscriber_id": 0, "address": "rosanna@hammes.co.uk", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 81, "id": 170, "created_by_id": null, "subscriber_id": 0, "address": "antonio@blick.name", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 81, "id": 171, "created_by_id": null, "subscriber_id": 0, "address": "carleton@greenfelder.us", "created_at": "2009-03-24T05:25:08Z"}], "last_name": "Jacobson", "instant_messenger_addresses": [], "created_at": "2009-03-24T05:25:08Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 82, "id": 152, "created_by_id": null, "subscriber_id": 0, "address": "http://ward.ca/", "created_at": "2009-03-24T05:25:08Z"}], "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 82, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "(277)451-6646 x06006", "contact_id": 82, "id": 166, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "537.508.5538 x660", "contact_id": 82, "id": 167, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "(305)749-1252", "contact_id": 82, "id": 168, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [], "first_name": "Desmond", "email_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 82, "id": 172, "created_by_id": null, "subscriber_id": 0, "address": "muriel.kozey@mraz.ca", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 82, "id": 173, "created_by_id": null, "subscriber_id": 0, "address": "jaime@jacobi.co.uk", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 82, "id": 174, "created_by_id": null, "subscriber_id": 0, "address": "nestor.lubowitz@conroy.biz", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 82, "id": 175, "created_by_id": null, "subscriber_id": 0, "address": "pauline@boscocrooks.biz", "created_at": "2009-03-24T05:25:08Z"}], "last_name": "Abshire", "instant_messenger_addresses": [], "created_at": "2009-03-24T05:25:08Z", "active": true}}, {"contact": {"company": true, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 83, "id": 153, "created_by_id": null, "subscriber_id": 0, "address": "http://schowalter.uk/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 83, "id": 154, "created_by_id": null, "subscriber_id": 0, "address": "http://wilderman.uk/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 83, "id": 155, "created_by_id": null, "subscriber_id": 0, "address": "http://hirthemertz.ca/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 83, "id": 156, "created_by_id": null, "subscriber_id": 0, "address": "http://hintz.biz/", "created_at": "2009-03-24T05:25:08Z"}], "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "title": null, "delta": false, "company_name": "Hand-Baumbach", "id": 83, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "1-073-822-1812 x855", "contact_id": 83, "id": 169, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "163-936-9773 x9499", "contact_id": 83, "id": 170, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "1-349-983-8896 x5750", "contact_id": 83, "id": 171, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "West Jaquelin", "zip": "83716", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 83, "id": 134, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "70153 Preston Bypass", "state": "Michigan", "created_at": "2009-03-24T05:25:08Z"}], "first_name": "Felicity", "email_addresses": [], "last_name": "DuBuque", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "zachariah_beier", "contact_id": 83, "id": 179, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "eloy_rowe", "contact_id": 83, "id": 180, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "thad_mohr", "contact_id": 83, "id": 181, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "created_at": "2009-03-24T05:25:08Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 84, "id": 157, "created_by_id": null, "subscriber_id": 0, "address": "http://howell.co.uk/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 84, "id": 158, "created_by_id": null, "subscriber_id": 0, "address": "http://dare.us/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 84, "id": 159, "created_by_id": null, "subscriber_id": 0, "address": "http://zboncaklehner.ca/", "created_at": "2009-03-24T05:25:08Z"}], "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 84, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "(633)630-8463 x59230", "contact_id": 84, "id": 172, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "North Alphonso", "zip": "43694-2563", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 84, "id": 135, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "935 Hilpert Stream", "state": "Montana", "created_at": "2009-03-24T05:25:08Z"}, {"lon": null, "city": "Klingside", "zip": "42670-1668", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 84, "id": 136, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "34365 Stoltenberg Skyway", "state": "Arizona", "created_at": "2009-03-24T05:25:08Z"}], "first_name": "Rubie", "email_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 84, "id": 176, "created_by_id": null, "subscriber_id": 0, "address": "alisha_schinner@kuhicrath.name", "created_at": "2009-03-24T05:25:08Z"}], "last_name": "Kerluke", "instant_messenger_addresses": [], "created_at": "2009-03-24T05:25:08Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 85, "id": 160, "created_by_id": null, "subscriber_id": 0, "address": "http://mertzrogahn.co.uk/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 85, "id": 161, "created_by_id": null, "subscriber_id": 0, "address": "http://trantow.uk/", "created_at": "2009-03-24T05:25:08Z"}], "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 85, "created_by_id": null, "phone_numbers": [], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "East Richard", "zip": "03500", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 85, "id": 137, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "3876 Clarabelle Knolls", "state": "Missouri", "created_at": "2009-03-24T05:25:08Z"}, {"lon": null, "city": "Leschstad", "zip": "39627", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 85, "id": 138, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "96068 Ankunding Trace", "state": "Montana", "created_at": "2009-03-24T05:25:08Z"}, {"lon": null, "city": "East Bria", "zip": "89956-8011", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 85, "id": 139, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "8284 Hanna Island", "state": "Wyoming", "created_at": "2009-03-24T05:25:08Z"}], "first_name": "Preston", "email_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 85, "id": 177, "created_by_id": null, "subscriber_id": 0, "address": "patience@kautzerhuels.com", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 85, "id": 178, "created_by_id": null, "subscriber_id": 0, "address": "alana_greenfelder@bodedach.com", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 85, "id": 179, "created_by_id": null, "subscriber_id": 0, "address": "jessica_hermann@schumm.com", "created_at": "2009-03-24T05:25:08Z"}], "last_name": "Kutch", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "hector", "contact_id": 85, "id": 182, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "moshe_collins", "contact_id": 85, "id": 183, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "alana_barrows", "contact_id": 85, "id": 184, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "hershel_brekke", "contact_id": 85, "id": 185, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "created_at": "2009-03-24T05:25:08Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 86, "id": 162, "created_by_id": null, "subscriber_id": 0, "address": "http://kochreynolds.us/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 86, "id": 163, "created_by_id": null, "subscriber_id": 0, "address": "http://kozey.uk/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 86, "id": 164, "created_by_id": null, "subscriber_id": 0, "address": "http://schuster.ca/", "created_at": "2009-03-24T05:25:08Z"}], "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 86, "created_by_id": null, "phone_numbers": [], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Percivalport", "zip": "72413", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 86, "id": 140, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "771 McCullough Mill", "state": "Mississippi", "created_at": "2009-03-24T05:25:08Z"}, {"lon": null, "city": "West Mireilleshire", "zip": "05042-6304", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 86, "id": 141, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "65314 Murl Throughway", "state": "Massachusetts", "created_at": "2009-03-24T05:25:08Z"}, {"lon": null, "city": "Lake Nathanial", "zip": "42098-5940", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 86, "id": 142, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "3643 Clementine Road", "state": "Nevada", "created_at": "2009-03-24T05:25:08Z"}], "first_name": "Dashawn", "email_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 86, "id": 180, "created_by_id": null, "subscriber_id": 0, "address": "lizzie@williamsonluettgen.biz", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 86, "id": 181, "created_by_id": null, "subscriber_id": 0, "address": "taylor@kochfunk.name", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 86, "id": 182, "created_by_id": null, "subscriber_id": 0, "address": "libby.brakus@schumm.biz", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 86, "id": 183, "created_by_id": null, "subscriber_id": 0, "address": "albertha@wolf.com", "created_at": "2009-03-24T05:25:08Z"}], "last_name": "Thiel", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "dallin.baumbach", "contact_id": 86, "id": 186, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "created_at": "2009-03-24T05:25:08Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 87, "id": 165, "created_by_id": null, "subscriber_id": 0, "address": "http://crooks.co.uk/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 87, "id": 166, "created_by_id": null, "subscriber_id": 0, "address": "http://mckenziestroman.info/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 87, "id": 167, "created_by_id": null, "subscriber_id": 0, "address": "http://kunze.com/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 87, "id": 168, "created_by_id": null, "subscriber_id": 0, "address": "http://kertzmannfay.uk/", "created_at": "2009-03-24T05:25:08Z"}], "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 87, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "(198)475-8306 x61587", "contact_id": 87, "id": 173, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "515-852-2973", "contact_id": 87, "id": 174, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "(445)453-7783 x31410", "contact_id": 87, "id": 175, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [], "first_name": "Mateo", "email_addresses": [], "last_name": "Rau", "instant_messenger_addresses": [], "created_at": "2009-03-24T05:25:08Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 88, "id": 169, "created_by_id": null, "subscriber_id": 0, "address": "http://rippindeckow.co.uk/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 88, "id": 170, "created_by_id": null, "subscriber_id": 0, "address": "http://mannschamberger.co.uk/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 88, "id": 171, "created_by_id": null, "subscriber_id": 0, "address": "http://kuhic.info/", "created_at": "2009-03-24T05:25:08Z"}], "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 88, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "875.575.0950 x454", "contact_id": 88, "id": 176, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "317.276.8733", "contact_id": 88, "id": 177, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "021.069.7476", "contact_id": 88, "id": 178, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "234-045-8135 x59485", "contact_id": 88, "id": 179, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "East Onie", "zip": "14917-9625", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 88, "id": 143, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "274 Hansen Island", "state": "South Carolina", "created_at": "2009-03-24T05:25:08Z"}, {"lon": null, "city": "O'Connellville", "zip": "61781-6725", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 88, "id": 144, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "45287 Leonard Brooks", "state": "Texas", "created_at": "2009-03-24T05:25:08Z"}], "first_name": "Elisha", "email_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 88, "id": 184, "created_by_id": null, "subscriber_id": 0, "address": "milton.bernhard@crist.co.uk", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 88, "id": 185, "created_by_id": null, "subscriber_id": 0, "address": "norris@klocko.info", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 88, "id": 186, "created_by_id": null, "subscriber_id": 0, "address": "randi@blockbeatty.name", "created_at": "2009-03-24T05:25:08Z"}], "last_name": "Brown", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "collin", "contact_id": 88, "id": 187, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "created_at": "2009-03-24T05:25:08Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 89, "id": 172, "created_by_id": null, "subscriber_id": 0, "address": "http://ritchie.biz/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 89, "id": 173, "created_by_id": null, "subscriber_id": 0, "address": "http://emmerich.co.uk/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 89, "id": 174, "created_by_id": null, "subscriber_id": 0, "address": "http://morar.ca/", "created_at": "2009-03-24T05:25:08Z"}], "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 89, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "735-357-6915", "contact_id": 89, "id": 180, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "1-828-328-3930 x558", "contact_id": 89, "id": 181, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "670-938-8577 x0269", "contact_id": 89, "id": 182, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "505.167.3712", "contact_id": 89, "id": 183, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Uniquestad", "zip": "06804-3640", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 89, "id": 145, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "1381 Waters Garden", "state": "Tennessee", "created_at": "2009-03-24T05:25:08Z"}, {"lon": null, "city": "Hilbertberg", "zip": "18329", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 89, "id": 146, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "1522 Edythe Viaduct", "state": "Wyoming", "created_at": "2009-03-24T05:25:08Z"}, {"lon": null, "city": "Altenwerthville", "zip": "56919", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 89, "id": 147, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "21105 Princess Ports", "state": "Utah", "created_at": "2009-03-24T05:25:08Z"}], "first_name": "Howell", "email_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 89, "id": 187, "created_by_id": null, "subscriber_id": 0, "address": "joey_schoen@mosciskijohnston.ca", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 89, "id": 188, "created_by_id": null, "subscriber_id": 0, "address": "cleora@okeefe.us", "created_at": "2009-03-24T05:25:08Z"}], "last_name": "Grady", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "joey", "contact_id": 89, "id": 188, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "montana_roberts", "contact_id": 89, "id": 189, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "yadira", "contact_id": 89, "id": 190, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "created_at": "2009-03-24T05:25:08Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [], "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 90, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "1-639-169-3620 x600", "contact_id": 90, "id": 184, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [], "first_name": "Lexie", "email_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 90, "id": 189, "created_by_id": null, "subscriber_id": 0, "address": "winona_dietrich@ryan.ca", "created_at": "2009-03-24T05:25:08Z"}], "last_name": "Corwin", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "palma", "contact_id": 90, "id": 191, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "created_at": "2009-03-24T05:25:08Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 91, "id": 175, "created_by_id": null, "subscriber_id": 0, "address": "http://collinsheidenreich.uk/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 91, "id": 176, "created_by_id": null, "subscriber_id": 0, "address": "http://reingerroob.ca/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 91, "id": 177, "created_by_id": null, "subscriber_id": 0, "address": "http://jastpagac.name/", "created_at": "2009-03-24T05:25:08Z"}], "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 91, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "(403)242-5209", "contact_id": 91, "id": 185, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Robbieshire", "zip": "40899", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 91, "id": 148, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "8563 Orn Drives", "state": "Maine", "created_at": "2009-03-24T05:25:08Z"}, {"lon": null, "city": "Kohlerchester", "zip": "67190", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 91, "id": 149, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "1269 Weissnat Field", "state": "Alabama", "created_at": "2009-03-24T05:25:08Z"}, {"lon": null, "city": "Lavonneton", "zip": "86398-5231", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 91, "id": 150, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "4514 Hegmann Light", "state": "Texas", "created_at": "2009-03-24T05:25:08Z"}], "first_name": "Wilson", "email_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 91, "id": 190, "created_by_id": null, "subscriber_id": 0, "address": "eugenia@lehner.uk", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 91, "id": 191, "created_by_id": null, "subscriber_id": 0, "address": "marie@quitzon.info", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 91, "id": 192, "created_by_id": null, "subscriber_id": 0, "address": "ferne@gloverkilback.us", "created_at": "2009-03-24T05:25:08Z"}], "last_name": "Barrows", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "clark_rohan", "contact_id": 91, "id": 192, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "created_at": "2009-03-24T05:25:08Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 92, "id": 178, "created_by_id": null, "subscriber_id": 0, "address": "http://jacobs.ca/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 92, "id": 179, "created_by_id": null, "subscriber_id": 0, "address": "http://crookslindgren.us/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 92, "id": 180, "created_by_id": null, "subscriber_id": 0, "address": "http://gottlieb.name/", "created_at": "2009-03-24T05:25:08Z"}], "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 92, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "1-703-614-2944 x59708", "contact_id": 92, "id": 186, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "(851)587-1221 x5677", "contact_id": 92, "id": 187, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Carlosland", "zip": "65538-0463", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 92, "id": 151, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "995 Padberg Flat", "state": "Nevada", "created_at": "2009-03-24T05:25:08Z"}], "first_name": "Rebeka", "email_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 92, "id": 193, "created_by_id": null, "subscriber_id": 0, "address": "idella.spinka@tromp.name", "created_at": "2009-03-24T05:25:08Z"}], "last_name": "Baumbach", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "mekhi.zieme", "contact_id": 92, "id": 193, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "justus_hyatt", "contact_id": 92, "id": 194, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "brennan_moore", "contact_id": 92, "id": 195, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "created_at": "2009-03-24T05:25:08Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 93, "id": 181, "created_by_id": null, "subscriber_id": 0, "address": "http://paucek.uk/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 93, "id": 182, "created_by_id": null, "subscriber_id": 0, "address": "http://yost.co.uk/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 93, "id": 183, "created_by_id": null, "subscriber_id": 0, "address": "http://fishernolan.uk/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 93, "id": 184, "created_by_id": null, "subscriber_id": 0, "address": "http://jonesrobel.biz/", "created_at": "2009-03-24T05:25:08Z"}], "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 93, "created_by_id": null, "phone_numbers": [], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Kerlukeshire", "zip": "60711-6646", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 93, "id": 152, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "03781 Teresa Junction", "state": "North Carolina", "created_at": "2009-03-24T05:25:08Z"}, {"lon": null, "city": "Mariloustad", "zip": "38085", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 93, "id": 153, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "68279 Cronin Garden", "state": "Alaska", "created_at": "2009-03-24T05:25:08Z"}, {"lon": null, "city": "Littleview", "zip": "68966", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 93, "id": 154, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "204 Marquardt Terrace", "state": "Minnesota", "created_at": "2009-03-24T05:25:08Z"}], "first_name": "Austen", "email_addresses": [], "last_name": "Mertz", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "cesar", "contact_id": 93, "id": 196, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "clinton", "contact_id": 93, "id": 197, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "alessandra", "contact_id": 93, "id": 198, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "sherwood", "contact_id": 93, "id": 199, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "created_at": "2009-03-24T05:25:08Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 94, "id": 185, "created_by_id": null, "subscriber_id": 0, "address": "http://kuhlman.co.uk/", "created_at": "2009-03-24T05:25:08Z"}], "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 94, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "624.562.7837", "contact_id": 94, "id": 188, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "622-866-6843 x227", "contact_id": 94, "id": 189, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "(019)867-1593", "contact_id": 94, "id": 190, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "(697)785-3197 x41861", "contact_id": 94, "id": 191, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "West Angelita", "zip": "24365-6992", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 94, "id": 155, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "37069 Kassulke Neck", "state": "Massachusetts", "created_at": "2009-03-24T05:25:08Z"}, {"lon": null, "city": "North Jamirview", "zip": "55982", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 94, "id": 156, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "940 Reichel Fields", "state": "Minnesota", "created_at": "2009-03-24T05:25:08Z"}], "first_name": "Libbie", "email_addresses": [], "last_name": "Simonis", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "geoffrey.jewess", "contact_id": 94, "id": 200, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "delta", "contact_id": 94, "id": 201, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "created_at": "2009-03-24T05:25:08Z", "active": true}}, {"contact": {"company": true, "cached_tag_list": "", "web_addresses": [], "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "title": null, "delta": false, "company_name": "Konopelski, Howe and Nader", "id": 95, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "1-679-210-0617", "contact_id": 95, "id": 192, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "158-422-3133", "contact_id": 95, "id": 193, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "number": "972-780-4315", "contact_id": 95, "id": 194, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Tremblayton", "zip": "81249", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 95, "id": 157, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "025 Shea Underpass", "state": "Illinois", "created_at": "2009-03-24T05:25:08Z"}, {"lon": null, "city": "Port Davionfurt", "zip": "65178-0843", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 95, "id": 158, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "442 Bruen Fords", "state": "Wyoming", "created_at": "2009-03-24T05:25:08Z"}, {"lon": null, "city": "Port Marcellaside", "zip": "92006", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 95, "id": 159, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "00368 Stokes Groves", "state": "Maine", "created_at": "2009-03-24T05:25:08Z"}], "first_name": "Mohamed", "email_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 95, "id": 194, "created_by_id": null, "subscriber_id": 0, "address": "christiana@stiedemann.name", "created_at": "2009-03-24T05:25:08Z"}], "last_name": "Treutel", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "cesar", "contact_id": 95, "id": 202, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "guadalupe_tromp", "contact_id": 95, "id": 203, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "prince.gottlieb", "contact_id": 95, "id": 204, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "created_at": "2009-03-24T05:25:08Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 96, "id": 186, "created_by_id": null, "subscriber_id": 0, "address": "http://durgan.co.uk/", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 96, "id": 187, "created_by_id": null, "subscriber_id": 0, "address": "http://balistrerigerhold.co.uk/", "created_at": "2009-03-24T05:25:08Z"}], "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 96, "created_by_id": null, "phone_numbers": [], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Leonorshire", "zip": "19860-1798", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 96, "id": 160, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "2239 Emery Ville", "state": "Oregon", "created_at": "2009-03-24T05:25:08Z"}, {"lon": null, "city": "North Arlene", "zip": "56478", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 96, "id": 161, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "930 Rodriguez Center", "state": "North Dakota", "created_at": "2009-03-24T05:25:08Z"}, {"lon": null, "city": "Ashashire", "zip": "13354", "updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "country": "United States of America", "contact_id": 96, "id": 162, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "00010 Morissette Center", "state": "Nebraska", "created_at": "2009-03-24T05:25:08Z"}], "first_name": "Meagan", "email_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 96, "id": 195, "created_by_id": null, "subscriber_id": 0, "address": "rene@conroy.info", "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "contact_id": 96, "id": 196, "created_by_id": null, "subscriber_id": 0, "address": "jerrold@russel.ca", "created_at": "2009-03-24T05:25:08Z"}], "last_name": "Herzog", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "althea", "contact_id": 96, "id": 205, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "kyla", "contact_id": 96, "id": 206, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}, {"updated_at": "2009-03-24T05:25:08Z", "updated_by_id": null, "service": "MobileMe", "username": "ignacio.ernser", "contact_id": 96, "id": 207, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:08Z"}], "created_at": "2009-03-24T05:25:08Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "contact_id": 97, "id": 188, "created_by_id": null, "subscriber_id": 0, "address": "http://wilkinson.co.uk/", "created_at": "2009-03-24T05:25:09Z"}], "updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 97, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "number": "517.019.5690 x8334", "contact_id": 97, "id": 195, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:09Z"}, {"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "number": "119.389.7269", "contact_id": 97, "id": 196, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:09Z"}, {"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "number": "201-186-9445", "contact_id": 97, "id": 197, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:09Z"}, {"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "number": "(518)118-1976 x06334", "contact_id": 97, "id": 198, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:09Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [], "first_name": "Darion", "email_addresses": [{"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "contact_id": 97, "id": 197, "created_by_id": null, "subscriber_id": 0, "address": "wilfrid_davis@fritsch.info", "created_at": "2009-03-24T05:25:09Z"}, {"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "contact_id": 97, "id": 198, "created_by_id": null, "subscriber_id": 0, "address": "ines.ward@wunschlarson.info", "created_at": "2009-03-24T05:25:09Z"}], "last_name": "Graham", "instant_messenger_addresses": [], "created_at": "2009-03-24T05:25:09Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "contact_id": 98, "id": 189, "created_by_id": null, "subscriber_id": 0, "address": "http://welch.name/", "created_at": "2009-03-24T05:25:09Z"}, {"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "contact_id": 98, "id": 190, "created_by_id": null, "subscriber_id": 0, "address": "http://fadel.com/", "created_at": "2009-03-24T05:25:09Z"}, {"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "contact_id": 98, "id": 191, "created_by_id": null, "subscriber_id": 0, "address": "http://willmsmorar.uk/", "created_at": "2009-03-24T05:25:09Z"}, {"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "contact_id": 98, "id": 192, "created_by_id": null, "subscriber_id": 0, "address": "http://doyle.us/", "created_at": "2009-03-24T05:25:09Z"}], "updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 98, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "number": "676-052-2716 x9631", "contact_id": 98, "id": 199, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:09Z"}, {"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "number": "425.231.2546", "contact_id": 98, "id": 200, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:09Z"}, {"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "number": "635.813.2112", "contact_id": 98, "id": 201, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:09Z"}, {"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "number": "1-139-748-5856", "contact_id": 98, "id": 202, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:09Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "Ivamouth", "zip": "61105-6492", "updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "country": "United States of America", "contact_id": 98, "id": 163, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "4013 Robert Neck", "state": "Alaska", "created_at": "2009-03-24T05:25:09Z"}, {"lon": null, "city": "Gorczanyshire", "zip": "52634", "updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "country": "United States of America", "contact_id": 98, "id": 164, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "59522 Amalia Rapids", "state": "Rhode Island", "created_at": "2009-03-24T05:25:09Z"}, {"lon": null, "city": "South Kristy", "zip": "10781", "updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "country": "United States of America", "contact_id": 98, "id": 165, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "70708 Edmund Canyon", "state": "North Carolina", "created_at": "2009-03-24T05:25:09Z"}], "first_name": "Ludie", "email_addresses": [{"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "contact_id": 98, "id": 199, "created_by_id": null, "subscriber_id": 0, "address": "adelbert_deckow@sawaynfadel.info", "created_at": "2009-03-24T05:25:09Z"}], "last_name": "Wintheiser", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "service": "MobileMe", "username": "mariela.kunze", "contact_id": 98, "id": 208, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:09Z"}, {"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "service": "MobileMe", "username": "daren", "contact_id": 98, "id": 209, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:09Z"}, {"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "service": "MobileMe", "username": "alycia_rice", "contact_id": 98, "id": 210, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:09Z"}, {"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "service": "MobileMe", "username": "julio", "contact_id": 98, "id": 211, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:09Z"}], "created_at": "2009-03-24T05:25:09Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [{"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "contact_id": 99, "id": 193, "created_by_id": null, "subscriber_id": 0, "address": "http://bogisichborer.info/", "created_at": "2009-03-24T05:25:09Z"}, {"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "contact_id": 99, "id": 194, "created_by_id": null, "subscriber_id": 0, "address": "http://simonis.ca/", "created_at": "2009-03-24T05:25:09Z"}, {"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "contact_id": 99, "id": 195, "created_by_id": null, "subscriber_id": 0, "address": "http://armstrong.info/", "created_at": "2009-03-24T05:25:09Z"}], "updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 99, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "number": "(785)693-4704 x59630", "contact_id": 99, "id": 203, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:09Z"}, {"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "number": "(272)564-8189", "contact_id": 99, "id": 204, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:09Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [], "first_name": "Larissa", "email_addresses": [{"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "contact_id": 99, "id": 200, "created_by_id": null, "subscriber_id": 0, "address": "ryan@bins.ca", "created_at": "2009-03-24T05:25:09Z"}], "last_name": "Wehner", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "service": "MobileMe", "username": "giles", "contact_id": 99, "id": 212, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:09Z"}, {"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "service": "MobileMe", "username": "marlene", "contact_id": 99, "id": 213, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:09Z"}], "created_at": "2009-03-24T05:25:09Z", "active": true}}, {"contact": {"company": false, "cached_tag_list": "", "web_addresses": [], "updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "title": null, "delta": false, "company_name": null, "id": 100, "created_by_id": null, "phone_numbers": [{"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "number": "161.401.2133 x70847", "contact_id": 100, "id": 205, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:09Z"}], "is_me": false, "subscriber_id": 0, "street_addresses": [{"lon": null, "city": "West Laishatown", "zip": "39373", "updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "country": "United States of America", "contact_id": 100, "id": 166, "created_by_id": null, "subscriber_id": 0, "lat": null, "address": "25092 Danika Spurs", "state": "Idaho", "created_at": "2009-03-24T05:25:09Z"}], "first_name": "Adele", "email_addresses": [{"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "contact_id": 100, "id": 201, "created_by_id": null, "subscriber_id": 0, "address": "gwendolyn@kshlerin.co.uk", "created_at": "2009-03-24T05:25:09Z"}, {"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "contact_id": 100, "id": 202, "created_by_id": null, "subscriber_id": 0, "address": "zella_bode@reichert.ca", "created_at": "2009-03-24T05:25:09Z"}, {"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "contact_id": 100, "id": 203, "created_by_id": null, "subscriber_id": 0, "address": "eveline.feest@stiedemann.co.uk", "created_at": "2009-03-24T05:25:09Z"}], "last_name": "Hessel", "instant_messenger_addresses": [{"updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "service": "MobileMe", "username": "vladimir", "contact_id": 100, "id": 214, "created_by_id": null, "subscriber_id": 0, "created_at": "2009-03-24T05:25:09Z"}], "created_at": "2009-03-24T05:25:09Z", "active": true}}] diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.db100.xml.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.db100.xml.json deleted file mode 100644 index 36231e7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.db100.xml.json +++ /dev/null @@ -1 +0,0 @@ -{"table":{"row":[{"id":{"$":"0000"},"firstname":{"$":"Al"},"lastname":{"$":"Aranow"},"street":{"$":"1 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0001"},"firstname":{"$":"Bob"},"lastname":{"$":"Aranow"},"street":{"$":"2 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0002"},"firstname":{"$":"Charles"},"lastname":{"$":"Aranow"},"street":{"$":"3 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0003"},"firstname":{"$":"David"},"lastname":{"$":"Aranow"},"street":{"$":"4 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0004"},"firstname":{"$":"Egon"},"lastname":{"$":"Aranow"},"street":{"$":"5 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0005"},"firstname":{"$":"Farbood"},"lastname":{"$":"Aranow"},"street":{"$":"6 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0006"},"firstname":{"$":"George"},"lastname":{"$":"Aranow"},"street":{"$":"7 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0007"},"firstname":{"$":"Hank"},"lastname":{"$":"Aranow"},"street":{"$":"8 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0008"},"firstname":{"$":"Inki"},"lastname":{"$":"Aranow"},"street":{"$":"9 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0009"},"firstname":{"$":"James"},"lastname":{"$":"Aranow"},"street":{"$":"10 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0010"},"firstname":{"$":"Al"},"lastname":{"$":"Barker"},"street":{"$":"11 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0011"},"firstname":{"$":"Bob"},"lastname":{"$":"Barker"},"street":{"$":"12 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0012"},"firstname":{"$":"Charles"},"lastname":{"$":"Barker"},"street":{"$":"13 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0013"},"firstname":{"$":"David"},"lastname":{"$":"Barker"},"street":{"$":"14 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0014"},"firstname":{"$":"Egon"},"lastname":{"$":"Barker"},"street":{"$":"15 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0015"},"firstname":{"$":"Farbood"},"lastname":{"$":"Barker"},"street":{"$":"16 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0016"},"firstname":{"$":"George"},"lastname":{"$":"Barker"},"street":{"$":"17 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0017"},"firstname":{"$":"Hank"},"lastname":{"$":"Barker"},"street":{"$":"18 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0018"},"firstname":{"$":"Inki"},"lastname":{"$":"Barker"},"street":{"$":"19 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0019"},"firstname":{"$":"James"},"lastname":{"$":"Barker"},"street":{"$":"20 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0020"},"firstname":{"$":"Al"},"lastname":{"$":"Corsetti"},"street":{"$":"21 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0021"},"firstname":{"$":"Bob"},"lastname":{"$":"Corsetti"},"street":{"$":"22 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0022"},"firstname":{"$":"Charles"},"lastname":{"$":"Corsetti"},"street":{"$":"23 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0023"},"firstname":{"$":"David"},"lastname":{"$":"Corsetti"},"street":{"$":"24 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0024"},"firstname":{"$":"Egon"},"lastname":{"$":"Corsetti"},"street":{"$":"25 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0025"},"firstname":{"$":"Farbood"},"lastname":{"$":"Corsetti"},"street":{"$":"26 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0026"},"firstname":{"$":"George"},"lastname":{"$":"Corsetti"},"street":{"$":"27 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0027"},"firstname":{"$":"Hank"},"lastname":{"$":"Corsetti"},"street":{"$":"28 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0028"},"firstname":{"$":"Inki"},"lastname":{"$":"Corsetti"},"street":{"$":"29 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0029"},"firstname":{"$":"James"},"lastname":{"$":"Corsetti"},"street":{"$":"30 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0030"},"firstname":{"$":"Al"},"lastname":{"$":"Dershowitz"},"street":{"$":"31 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0031"},"firstname":{"$":"Bob"},"lastname":{"$":"Dershowitz"},"street":{"$":"32 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0032"},"firstname":{"$":"Charles"},"lastname":{"$":"Dershowitz"},"street":{"$":"33 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0033"},"firstname":{"$":"David"},"lastname":{"$":"Dershowitz"},"street":{"$":"34 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0034"},"firstname":{"$":"Egon"},"lastname":{"$":"Dershowitz"},"street":{"$":"35 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0035"},"firstname":{"$":"Farbood"},"lastname":{"$":"Dershowitz"},"street":{"$":"36 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0036"},"firstname":{"$":"George"},"lastname":{"$":"Dershowitz"},"street":{"$":"37 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0037"},"firstname":{"$":"Hank"},"lastname":{"$":"Dershowitz"},"street":{"$":"38 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0038"},"firstname":{"$":"Inki"},"lastname":{"$":"Dershowitz"},"street":{"$":"39 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0039"},"firstname":{"$":"James"},"lastname":{"$":"Dershowitz"},"street":{"$":"40 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0040"},"firstname":{"$":"Al"},"lastname":{"$":"Engleman"},"street":{"$":"41 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0041"},"firstname":{"$":"Bob"},"lastname":{"$":"Engleman"},"street":{"$":"42 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0042"},"firstname":{"$":"Charles"},"lastname":{"$":"Engleman"},"street":{"$":"43 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0043"},"firstname":{"$":"David"},"lastname":{"$":"Engleman"},"street":{"$":"44 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0044"},"firstname":{"$":"Egon"},"lastname":{"$":"Engleman"},"street":{"$":"45 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0045"},"firstname":{"$":"Farbood"},"lastname":{"$":"Engleman"},"street":{"$":"46 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0046"},"firstname":{"$":"George"},"lastname":{"$":"Engleman"},"street":{"$":"47 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0047"},"firstname":{"$":"Hank"},"lastname":{"$":"Engleman"},"street":{"$":"48 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0048"},"firstname":{"$":"Inki"},"lastname":{"$":"Engleman"},"street":{"$":"49 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0049"},"firstname":{"$":"James"},"lastname":{"$":"Engleman"},"street":{"$":"50 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0050"},"firstname":{"$":"Al"},"lastname":{"$":"Franklin"},"street":{"$":"51 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0051"},"firstname":{"$":"Bob"},"lastname":{"$":"Franklin"},"street":{"$":"52 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0052"},"firstname":{"$":"Charles"},"lastname":{"$":"Franklin"},"street":{"$":"53 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0053"},"firstname":{"$":"David"},"lastname":{"$":"Franklin"},"street":{"$":"54 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0054"},"firstname":{"$":"Egon"},"lastname":{"$":"Franklin"},"street":{"$":"55 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0055"},"firstname":{"$":"Farbood"},"lastname":{"$":"Franklin"},"street":{"$":"56 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0056"},"firstname":{"$":"George"},"lastname":{"$":"Franklin"},"street":{"$":"57 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0057"},"firstname":{"$":"Hank"},"lastname":{"$":"Franklin"},"street":{"$":"58 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0058"},"firstname":{"$":"Inki"},"lastname":{"$":"Franklin"},"street":{"$":"59 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0059"},"firstname":{"$":"James"},"lastname":{"$":"Franklin"},"street":{"$":"60 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0060"},"firstname":{"$":"Al"},"lastname":{"$":"Grice"},"street":{"$":"61 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0061"},"firstname":{"$":"Bob"},"lastname":{"$":"Grice"},"street":{"$":"62 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0062"},"firstname":{"$":"Charles"},"lastname":{"$":"Grice"},"street":{"$":"63 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0063"},"firstname":{"$":"David"},"lastname":{"$":"Grice"},"street":{"$":"64 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0064"},"firstname":{"$":"Egon"},"lastname":{"$":"Grice"},"street":{"$":"65 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0065"},"firstname":{"$":"Farbood"},"lastname":{"$":"Grice"},"street":{"$":"66 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0066"},"firstname":{"$":"George"},"lastname":{"$":"Grice"},"street":{"$":"67 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0067"},"firstname":{"$":"Hank"},"lastname":{"$":"Grice"},"street":{"$":"68 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0068"},"firstname":{"$":"Inki"},"lastname":{"$":"Grice"},"street":{"$":"69 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0069"},"firstname":{"$":"James"},"lastname":{"$":"Grice"},"street":{"$":"70 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0070"},"firstname":{"$":"Al"},"lastname":{"$":"Haverford"},"street":{"$":"71 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0071"},"firstname":{"$":"Bob"},"lastname":{"$":"Haverford"},"street":{"$":"72 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0072"},"firstname":{"$":"Charles"},"lastname":{"$":"Haverford"},"street":{"$":"73 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0073"},"firstname":{"$":"David"},"lastname":{"$":"Haverford"},"street":{"$":"74 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0074"},"firstname":{"$":"Egon"},"lastname":{"$":"Haverford"},"street":{"$":"75 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0075"},"firstname":{"$":"Farbood"},"lastname":{"$":"Haverford"},"street":{"$":"76 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0076"},"firstname":{"$":"George"},"lastname":{"$":"Haverford"},"street":{"$":"77 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0077"},"firstname":{"$":"Hank"},"lastname":{"$":"Haverford"},"street":{"$":"78 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0078"},"firstname":{"$":"Inki"},"lastname":{"$":"Haverford"},"street":{"$":"79 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0079"},"firstname":{"$":"James"},"lastname":{"$":"Haverford"},"street":{"$":"80 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0080"},"firstname":{"$":"Al"},"lastname":{"$":"Ilvedson"},"street":{"$":"81 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0081"},"firstname":{"$":"Bob"},"lastname":{"$":"Ilvedson"},"street":{"$":"82 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0082"},"firstname":{"$":"Charles"},"lastname":{"$":"Ilvedson"},"street":{"$":"83 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0083"},"firstname":{"$":"David"},"lastname":{"$":"Ilvedson"},"street":{"$":"84 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0084"},"firstname":{"$":"Egon"},"lastname":{"$":"Ilvedson"},"street":{"$":"85 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0085"},"firstname":{"$":"Farbood"},"lastname":{"$":"Ilvedson"},"street":{"$":"86 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0086"},"firstname":{"$":"George"},"lastname":{"$":"Ilvedson"},"street":{"$":"87 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0087"},"firstname":{"$":"Hank"},"lastname":{"$":"Ilvedson"},"street":{"$":"88 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0088"},"firstname":{"$":"Inki"},"lastname":{"$":"Ilvedson"},"street":{"$":"89 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0089"},"firstname":{"$":"James"},"lastname":{"$":"Ilvedson"},"street":{"$":"90 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0090"},"firstname":{"$":"Al"},"lastname":{"$":"Jones"},"street":{"$":"91 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0091"},"firstname":{"$":"Bob"},"lastname":{"$":"Jones"},"street":{"$":"92 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0092"},"firstname":{"$":"Charles"},"lastname":{"$":"Jones"},"street":{"$":"93 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0093"},"firstname":{"$":"David"},"lastname":{"$":"Jones"},"street":{"$":"94 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0094"},"firstname":{"$":"Egon"},"lastname":{"$":"Jones"},"street":{"$":"95 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0095"},"firstname":{"$":"Farbood"},"lastname":{"$":"Jones"},"street":{"$":"96 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0096"},"firstname":{"$":"George"},"lastname":{"$":"Jones"},"street":{"$":"97 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0097"},"firstname":{"$":"Hank"},"lastname":{"$":"Jones"},"street":{"$":"98 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0098"},"firstname":{"$":"Inki"},"lastname":{"$":"Jones"},"street":{"$":"99 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0099"},"firstname":{"$":"James"},"lastname":{"$":"Jones"},"street":{"$":"100 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}}]}} diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.db1000.xml.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.db1000.xml.json deleted file mode 100644 index f9f33a9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.db1000.xml.json +++ /dev/null @@ -1 +0,0 @@ -{"table":{"row":[{"id":{"$":"0000"},"firstname":{"$":"Al"},"lastname":{"$":"Aranow"},"street":{"$":"1 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0001"},"firstname":{"$":"Bob"},"lastname":{"$":"Aranow"},"street":{"$":"2 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0002"},"firstname":{"$":"Charles"},"lastname":{"$":"Aranow"},"street":{"$":"3 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0003"},"firstname":{"$":"David"},"lastname":{"$":"Aranow"},"street":{"$":"4 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0004"},"firstname":{"$":"Egon"},"lastname":{"$":"Aranow"},"street":{"$":"5 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0005"},"firstname":{"$":"Farbood"},"lastname":{"$":"Aranow"},"street":{"$":"6 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0006"},"firstname":{"$":"George"},"lastname":{"$":"Aranow"},"street":{"$":"7 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0007"},"firstname":{"$":"Hank"},"lastname":{"$":"Aranow"},"street":{"$":"8 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0008"},"firstname":{"$":"Inki"},"lastname":{"$":"Aranow"},"street":{"$":"9 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0009"},"firstname":{"$":"James"},"lastname":{"$":"Aranow"},"street":{"$":"10 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0010"},"firstname":{"$":"Al"},"lastname":{"$":"Barker"},"street":{"$":"11 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0011"},"firstname":{"$":"Bob"},"lastname":{"$":"Barker"},"street":{"$":"12 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0012"},"firstname":{"$":"Charles"},"lastname":{"$":"Barker"},"street":{"$":"13 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0013"},"firstname":{"$":"David"},"lastname":{"$":"Barker"},"street":{"$":"14 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0014"},"firstname":{"$":"Egon"},"lastname":{"$":"Barker"},"street":{"$":"15 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0015"},"firstname":{"$":"Farbood"},"lastname":{"$":"Barker"},"street":{"$":"16 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0016"},"firstname":{"$":"George"},"lastname":{"$":"Barker"},"street":{"$":"17 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0017"},"firstname":{"$":"Hank"},"lastname":{"$":"Barker"},"street":{"$":"18 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0018"},"firstname":{"$":"Inki"},"lastname":{"$":"Barker"},"street":{"$":"19 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0019"},"firstname":{"$":"James"},"lastname":{"$":"Barker"},"street":{"$":"20 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0020"},"firstname":{"$":"Al"},"lastname":{"$":"Corsetti"},"street":{"$":"21 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0021"},"firstname":{"$":"Bob"},"lastname":{"$":"Corsetti"},"street":{"$":"22 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0022"},"firstname":{"$":"Charles"},"lastname":{"$":"Corsetti"},"street":{"$":"23 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0023"},"firstname":{"$":"David"},"lastname":{"$":"Corsetti"},"street":{"$":"24 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0024"},"firstname":{"$":"Egon"},"lastname":{"$":"Corsetti"},"street":{"$":"25 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0025"},"firstname":{"$":"Farbood"},"lastname":{"$":"Corsetti"},"street":{"$":"26 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0026"},"firstname":{"$":"George"},"lastname":{"$":"Corsetti"},"street":{"$":"27 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0027"},"firstname":{"$":"Hank"},"lastname":{"$":"Corsetti"},"street":{"$":"28 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0028"},"firstname":{"$":"Inki"},"lastname":{"$":"Corsetti"},"street":{"$":"29 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0029"},"firstname":{"$":"James"},"lastname":{"$":"Corsetti"},"street":{"$":"30 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0030"},"firstname":{"$":"Al"},"lastname":{"$":"Dershowitz"},"street":{"$":"31 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0031"},"firstname":{"$":"Bob"},"lastname":{"$":"Dershowitz"},"street":{"$":"32 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0032"},"firstname":{"$":"Charles"},"lastname":{"$":"Dershowitz"},"street":{"$":"33 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0033"},"firstname":{"$":"David"},"lastname":{"$":"Dershowitz"},"street":{"$":"34 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0034"},"firstname":{"$":"Egon"},"lastname":{"$":"Dershowitz"},"street":{"$":"35 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0035"},"firstname":{"$":"Farbood"},"lastname":{"$":"Dershowitz"},"street":{"$":"36 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0036"},"firstname":{"$":"George"},"lastname":{"$":"Dershowitz"},"street":{"$":"37 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0037"},"firstname":{"$":"Hank"},"lastname":{"$":"Dershowitz"},"street":{"$":"38 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0038"},"firstname":{"$":"Inki"},"lastname":{"$":"Dershowitz"},"street":{"$":"39 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0039"},"firstname":{"$":"James"},"lastname":{"$":"Dershowitz"},"street":{"$":"40 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0040"},"firstname":{"$":"Al"},"lastname":{"$":"Engleman"},"street":{"$":"41 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0041"},"firstname":{"$":"Bob"},"lastname":{"$":"Engleman"},"street":{"$":"42 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0042"},"firstname":{"$":"Charles"},"lastname":{"$":"Engleman"},"street":{"$":"43 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0043"},"firstname":{"$":"David"},"lastname":{"$":"Engleman"},"street":{"$":"44 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0044"},"firstname":{"$":"Egon"},"lastname":{"$":"Engleman"},"street":{"$":"45 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0045"},"firstname":{"$":"Farbood"},"lastname":{"$":"Engleman"},"street":{"$":"46 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0046"},"firstname":{"$":"George"},"lastname":{"$":"Engleman"},"street":{"$":"47 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0047"},"firstname":{"$":"Hank"},"lastname":{"$":"Engleman"},"street":{"$":"48 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0048"},"firstname":{"$":"Inki"},"lastname":{"$":"Engleman"},"street":{"$":"49 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0049"},"firstname":{"$":"James"},"lastname":{"$":"Engleman"},"street":{"$":"50 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0050"},"firstname":{"$":"Al"},"lastname":{"$":"Franklin"},"street":{"$":"51 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0051"},"firstname":{"$":"Bob"},"lastname":{"$":"Franklin"},"street":{"$":"52 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0052"},"firstname":{"$":"Charles"},"lastname":{"$":"Franklin"},"street":{"$":"53 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0053"},"firstname":{"$":"David"},"lastname":{"$":"Franklin"},"street":{"$":"54 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0054"},"firstname":{"$":"Egon"},"lastname":{"$":"Franklin"},"street":{"$":"55 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0055"},"firstname":{"$":"Farbood"},"lastname":{"$":"Franklin"},"street":{"$":"56 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0056"},"firstname":{"$":"George"},"lastname":{"$":"Franklin"},"street":{"$":"57 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0057"},"firstname":{"$":"Hank"},"lastname":{"$":"Franklin"},"street":{"$":"58 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0058"},"firstname":{"$":"Inki"},"lastname":{"$":"Franklin"},"street":{"$":"59 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0059"},"firstname":{"$":"James"},"lastname":{"$":"Franklin"},"street":{"$":"60 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0060"},"firstname":{"$":"Al"},"lastname":{"$":"Grice"},"street":{"$":"61 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0061"},"firstname":{"$":"Bob"},"lastname":{"$":"Grice"},"street":{"$":"62 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0062"},"firstname":{"$":"Charles"},"lastname":{"$":"Grice"},"street":{"$":"63 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0063"},"firstname":{"$":"David"},"lastname":{"$":"Grice"},"street":{"$":"64 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0064"},"firstname":{"$":"Egon"},"lastname":{"$":"Grice"},"street":{"$":"65 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0065"},"firstname":{"$":"Farbood"},"lastname":{"$":"Grice"},"street":{"$":"66 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0066"},"firstname":{"$":"George"},"lastname":{"$":"Grice"},"street":{"$":"67 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0067"},"firstname":{"$":"Hank"},"lastname":{"$":"Grice"},"street":{"$":"68 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0068"},"firstname":{"$":"Inki"},"lastname":{"$":"Grice"},"street":{"$":"69 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0069"},"firstname":{"$":"James"},"lastname":{"$":"Grice"},"street":{"$":"70 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0070"},"firstname":{"$":"Al"},"lastname":{"$":"Haverford"},"street":{"$":"71 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0071"},"firstname":{"$":"Bob"},"lastname":{"$":"Haverford"},"street":{"$":"72 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0072"},"firstname":{"$":"Charles"},"lastname":{"$":"Haverford"},"street":{"$":"73 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0073"},"firstname":{"$":"David"},"lastname":{"$":"Haverford"},"street":{"$":"74 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0074"},"firstname":{"$":"Egon"},"lastname":{"$":"Haverford"},"street":{"$":"75 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0075"},"firstname":{"$":"Farbood"},"lastname":{"$":"Haverford"},"street":{"$":"76 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0076"},"firstname":{"$":"George"},"lastname":{"$":"Haverford"},"street":{"$":"77 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0077"},"firstname":{"$":"Hank"},"lastname":{"$":"Haverford"},"street":{"$":"78 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0078"},"firstname":{"$":"Inki"},"lastname":{"$":"Haverford"},"street":{"$":"79 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0079"},"firstname":{"$":"James"},"lastname":{"$":"Haverford"},"street":{"$":"80 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0080"},"firstname":{"$":"Al"},"lastname":{"$":"Ilvedson"},"street":{"$":"81 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0081"},"firstname":{"$":"Bob"},"lastname":{"$":"Ilvedson"},"street":{"$":"82 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0082"},"firstname":{"$":"Charles"},"lastname":{"$":"Ilvedson"},"street":{"$":"83 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0083"},"firstname":{"$":"David"},"lastname":{"$":"Ilvedson"},"street":{"$":"84 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0084"},"firstname":{"$":"Egon"},"lastname":{"$":"Ilvedson"},"street":{"$":"85 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0085"},"firstname":{"$":"Farbood"},"lastname":{"$":"Ilvedson"},"street":{"$":"86 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0086"},"firstname":{"$":"George"},"lastname":{"$":"Ilvedson"},"street":{"$":"87 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0087"},"firstname":{"$":"Hank"},"lastname":{"$":"Ilvedson"},"street":{"$":"88 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0088"},"firstname":{"$":"Inki"},"lastname":{"$":"Ilvedson"},"street":{"$":"89 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0089"},"firstname":{"$":"James"},"lastname":{"$":"Ilvedson"},"street":{"$":"90 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0090"},"firstname":{"$":"Al"},"lastname":{"$":"Jones"},"street":{"$":"91 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0091"},"firstname":{"$":"Bob"},"lastname":{"$":"Jones"},"street":{"$":"92 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0092"},"firstname":{"$":"Charles"},"lastname":{"$":"Jones"},"street":{"$":"93 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0093"},"firstname":{"$":"David"},"lastname":{"$":"Jones"},"street":{"$":"94 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0094"},"firstname":{"$":"Egon"},"lastname":{"$":"Jones"},"street":{"$":"95 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0095"},"firstname":{"$":"Farbood"},"lastname":{"$":"Jones"},"street":{"$":"96 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0096"},"firstname":{"$":"George"},"lastname":{"$":"Jones"},"street":{"$":"97 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0097"},"firstname":{"$":"Hank"},"lastname":{"$":"Jones"},"street":{"$":"98 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0098"},"firstname":{"$":"Inki"},"lastname":{"$":"Jones"},"street":{"$":"99 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0099"},"firstname":{"$":"James"},"lastname":{"$":"Jones"},"street":{"$":"100 Any St."},"city":{"$":"Anytown"},"state":{"$":"AL"},"zip":{"$":"22000"}},{"id":{"$":"0100"},"firstname":{"$":"Al"},"lastname":{"$":"Aranow"},"street":{"$":"1 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0101"},"firstname":{"$":"Bob"},"lastname":{"$":"Aranow"},"street":{"$":"2 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0102"},"firstname":{"$":"Charles"},"lastname":{"$":"Aranow"},"street":{"$":"3 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0103"},"firstname":{"$":"David"},"lastname":{"$":"Aranow"},"street":{"$":"4 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0104"},"firstname":{"$":"Egon"},"lastname":{"$":"Aranow"},"street":{"$":"5 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0105"},"firstname":{"$":"Farbood"},"lastname":{"$":"Aranow"},"street":{"$":"6 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0106"},"firstname":{"$":"George"},"lastname":{"$":"Aranow"},"street":{"$":"7 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0107"},"firstname":{"$":"Hank"},"lastname":{"$":"Aranow"},"street":{"$":"8 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0108"},"firstname":{"$":"Inki"},"lastname":{"$":"Aranow"},"street":{"$":"9 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0109"},"firstname":{"$":"James"},"lastname":{"$":"Aranow"},"street":{"$":"10 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0110"},"firstname":{"$":"Al"},"lastname":{"$":"Barker"},"street":{"$":"11 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0111"},"firstname":{"$":"Bob"},"lastname":{"$":"Barker"},"street":{"$":"12 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0112"},"firstname":{"$":"Charles"},"lastname":{"$":"Barker"},"street":{"$":"13 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0113"},"firstname":{"$":"David"},"lastname":{"$":"Barker"},"street":{"$":"14 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0114"},"firstname":{"$":"Egon"},"lastname":{"$":"Barker"},"street":{"$":"15 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0115"},"firstname":{"$":"Farbood"},"lastname":{"$":"Barker"},"street":{"$":"16 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0116"},"firstname":{"$":"George"},"lastname":{"$":"Barker"},"street":{"$":"17 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0117"},"firstname":{"$":"Hank"},"lastname":{"$":"Barker"},"street":{"$":"18 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0118"},"firstname":{"$":"Inki"},"lastname":{"$":"Barker"},"street":{"$":"19 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0119"},"firstname":{"$":"James"},"lastname":{"$":"Barker"},"street":{"$":"20 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0120"},"firstname":{"$":"Al"},"lastname":{"$":"Corsetti"},"street":{"$":"21 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0121"},"firstname":{"$":"Bob"},"lastname":{"$":"Corsetti"},"street":{"$":"22 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0122"},"firstname":{"$":"Charles"},"lastname":{"$":"Corsetti"},"street":{"$":"23 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0123"},"firstname":{"$":"David"},"lastname":{"$":"Corsetti"},"street":{"$":"24 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0124"},"firstname":{"$":"Egon"},"lastname":{"$":"Corsetti"},"street":{"$":"25 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0125"},"firstname":{"$":"Farbood"},"lastname":{"$":"Corsetti"},"street":{"$":"26 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0126"},"firstname":{"$":"George"},"lastname":{"$":"Corsetti"},"street":{"$":"27 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0127"},"firstname":{"$":"Hank"},"lastname":{"$":"Corsetti"},"street":{"$":"28 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0128"},"firstname":{"$":"Inki"},"lastname":{"$":"Corsetti"},"street":{"$":"29 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0129"},"firstname":{"$":"James"},"lastname":{"$":"Corsetti"},"street":{"$":"30 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0130"},"firstname":{"$":"Al"},"lastname":{"$":"Dershowitz"},"street":{"$":"31 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0131"},"firstname":{"$":"Bob"},"lastname":{"$":"Dershowitz"},"street":{"$":"32 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0132"},"firstname":{"$":"Charles"},"lastname":{"$":"Dershowitz"},"street":{"$":"33 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0133"},"firstname":{"$":"David"},"lastname":{"$":"Dershowitz"},"street":{"$":"34 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0134"},"firstname":{"$":"Egon"},"lastname":{"$":"Dershowitz"},"street":{"$":"35 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0135"},"firstname":{"$":"Farbood"},"lastname":{"$":"Dershowitz"},"street":{"$":"36 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0136"},"firstname":{"$":"George"},"lastname":{"$":"Dershowitz"},"street":{"$":"37 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0137"},"firstname":{"$":"Hank"},"lastname":{"$":"Dershowitz"},"street":{"$":"38 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0138"},"firstname":{"$":"Inki"},"lastname":{"$":"Dershowitz"},"street":{"$":"39 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0139"},"firstname":{"$":"James"},"lastname":{"$":"Dershowitz"},"street":{"$":"40 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0140"},"firstname":{"$":"Al"},"lastname":{"$":"Engleman"},"street":{"$":"41 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0141"},"firstname":{"$":"Bob"},"lastname":{"$":"Engleman"},"street":{"$":"42 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0142"},"firstname":{"$":"Charles"},"lastname":{"$":"Engleman"},"street":{"$":"43 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0143"},"firstname":{"$":"David"},"lastname":{"$":"Engleman"},"street":{"$":"44 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0144"},"firstname":{"$":"Egon"},"lastname":{"$":"Engleman"},"street":{"$":"45 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0145"},"firstname":{"$":"Farbood"},"lastname":{"$":"Engleman"},"street":{"$":"46 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0146"},"firstname":{"$":"George"},"lastname":{"$":"Engleman"},"street":{"$":"47 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0147"},"firstname":{"$":"Hank"},"lastname":{"$":"Engleman"},"street":{"$":"48 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0148"},"firstname":{"$":"Inki"},"lastname":{"$":"Engleman"},"street":{"$":"49 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0149"},"firstname":{"$":"James"},"lastname":{"$":"Engleman"},"street":{"$":"50 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0150"},"firstname":{"$":"Al"},"lastname":{"$":"Franklin"},"street":{"$":"51 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0151"},"firstname":{"$":"Bob"},"lastname":{"$":"Franklin"},"street":{"$":"52 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0152"},"firstname":{"$":"Charles"},"lastname":{"$":"Franklin"},"street":{"$":"53 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0153"},"firstname":{"$":"David"},"lastname":{"$":"Franklin"},"street":{"$":"54 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0154"},"firstname":{"$":"Egon"},"lastname":{"$":"Franklin"},"street":{"$":"55 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0155"},"firstname":{"$":"Farbood"},"lastname":{"$":"Franklin"},"street":{"$":"56 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0156"},"firstname":{"$":"George"},"lastname":{"$":"Franklin"},"street":{"$":"57 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0157"},"firstname":{"$":"Hank"},"lastname":{"$":"Franklin"},"street":{"$":"58 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0158"},"firstname":{"$":"Inki"},"lastname":{"$":"Franklin"},"street":{"$":"59 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0159"},"firstname":{"$":"James"},"lastname":{"$":"Franklin"},"street":{"$":"60 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0160"},"firstname":{"$":"Al"},"lastname":{"$":"Grice"},"street":{"$":"61 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0161"},"firstname":{"$":"Bob"},"lastname":{"$":"Grice"},"street":{"$":"62 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0162"},"firstname":{"$":"Charles"},"lastname":{"$":"Grice"},"street":{"$":"63 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0163"},"firstname":{"$":"David"},"lastname":{"$":"Grice"},"street":{"$":"64 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0164"},"firstname":{"$":"Egon"},"lastname":{"$":"Grice"},"street":{"$":"65 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0165"},"firstname":{"$":"Farbood"},"lastname":{"$":"Grice"},"street":{"$":"66 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0166"},"firstname":{"$":"George"},"lastname":{"$":"Grice"},"street":{"$":"67 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0167"},"firstname":{"$":"Hank"},"lastname":{"$":"Grice"},"street":{"$":"68 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0168"},"firstname":{"$":"Inki"},"lastname":{"$":"Grice"},"street":{"$":"69 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0169"},"firstname":{"$":"James"},"lastname":{"$":"Grice"},"street":{"$":"70 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0170"},"firstname":{"$":"Al"},"lastname":{"$":"Haverford"},"street":{"$":"71 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0171"},"firstname":{"$":"Bob"},"lastname":{"$":"Haverford"},"street":{"$":"72 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0172"},"firstname":{"$":"Charles"},"lastname":{"$":"Haverford"},"street":{"$":"73 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0173"},"firstname":{"$":"David"},"lastname":{"$":"Haverford"},"street":{"$":"74 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0174"},"firstname":{"$":"Egon"},"lastname":{"$":"Haverford"},"street":{"$":"75 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0175"},"firstname":{"$":"Farbood"},"lastname":{"$":"Haverford"},"street":{"$":"76 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0176"},"firstname":{"$":"George"},"lastname":{"$":"Haverford"},"street":{"$":"77 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0177"},"firstname":{"$":"Hank"},"lastname":{"$":"Haverford"},"street":{"$":"78 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0178"},"firstname":{"$":"Inki"},"lastname":{"$":"Haverford"},"street":{"$":"79 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0179"},"firstname":{"$":"James"},"lastname":{"$":"Haverford"},"street":{"$":"80 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0180"},"firstname":{"$":"Al"},"lastname":{"$":"Ilvedson"},"street":{"$":"81 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0181"},"firstname":{"$":"Bob"},"lastname":{"$":"Ilvedson"},"street":{"$":"82 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0182"},"firstname":{"$":"Charles"},"lastname":{"$":"Ilvedson"},"street":{"$":"83 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0183"},"firstname":{"$":"David"},"lastname":{"$":"Ilvedson"},"street":{"$":"84 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0184"},"firstname":{"$":"Egon"},"lastname":{"$":"Ilvedson"},"street":{"$":"85 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0185"},"firstname":{"$":"Farbood"},"lastname":{"$":"Ilvedson"},"street":{"$":"86 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0186"},"firstname":{"$":"George"},"lastname":{"$":"Ilvedson"},"street":{"$":"87 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0187"},"firstname":{"$":"Hank"},"lastname":{"$":"Ilvedson"},"street":{"$":"88 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0188"},"firstname":{"$":"Inki"},"lastname":{"$":"Ilvedson"},"street":{"$":"89 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0189"},"firstname":{"$":"James"},"lastname":{"$":"Ilvedson"},"street":{"$":"90 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0190"},"firstname":{"$":"Al"},"lastname":{"$":"Jones"},"street":{"$":"91 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0191"},"firstname":{"$":"Bob"},"lastname":{"$":"Jones"},"street":{"$":"92 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0192"},"firstname":{"$":"Charles"},"lastname":{"$":"Jones"},"street":{"$":"93 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0193"},"firstname":{"$":"David"},"lastname":{"$":"Jones"},"street":{"$":"94 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0194"},"firstname":{"$":"Egon"},"lastname":{"$":"Jones"},"street":{"$":"95 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0195"},"firstname":{"$":"Farbood"},"lastname":{"$":"Jones"},"street":{"$":"96 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0196"},"firstname":{"$":"George"},"lastname":{"$":"Jones"},"street":{"$":"97 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0197"},"firstname":{"$":"Hank"},"lastname":{"$":"Jones"},"street":{"$":"98 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0198"},"firstname":{"$":"Inki"},"lastname":{"$":"Jones"},"street":{"$":"99 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0199"},"firstname":{"$":"James"},"lastname":{"$":"Jones"},"street":{"$":"100 Any St."},"city":{"$":"Anytown"},"state":{"$":"AK"},"zip":{"$":"22000"}},{"id":{"$":"0200"},"firstname":{"$":"Al"},"lastname":{"$":"Aranow"},"street":{"$":"1 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0201"},"firstname":{"$":"Bob"},"lastname":{"$":"Aranow"},"street":{"$":"2 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0202"},"firstname":{"$":"Charles"},"lastname":{"$":"Aranow"},"street":{"$":"3 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0203"},"firstname":{"$":"David"},"lastname":{"$":"Aranow"},"street":{"$":"4 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0204"},"firstname":{"$":"Egon"},"lastname":{"$":"Aranow"},"street":{"$":"5 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0205"},"firstname":{"$":"Farbood"},"lastname":{"$":"Aranow"},"street":{"$":"6 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0206"},"firstname":{"$":"George"},"lastname":{"$":"Aranow"},"street":{"$":"7 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0207"},"firstname":{"$":"Hank"},"lastname":{"$":"Aranow"},"street":{"$":"8 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0208"},"firstname":{"$":"Inki"},"lastname":{"$":"Aranow"},"street":{"$":"9 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0209"},"firstname":{"$":"James"},"lastname":{"$":"Aranow"},"street":{"$":"10 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0210"},"firstname":{"$":"Al"},"lastname":{"$":"Barker"},"street":{"$":"11 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0211"},"firstname":{"$":"Bob"},"lastname":{"$":"Barker"},"street":{"$":"12 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0212"},"firstname":{"$":"Charles"},"lastname":{"$":"Barker"},"street":{"$":"13 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0213"},"firstname":{"$":"David"},"lastname":{"$":"Barker"},"street":{"$":"14 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0214"},"firstname":{"$":"Egon"},"lastname":{"$":"Barker"},"street":{"$":"15 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0215"},"firstname":{"$":"Farbood"},"lastname":{"$":"Barker"},"street":{"$":"16 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0216"},"firstname":{"$":"George"},"lastname":{"$":"Barker"},"street":{"$":"17 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0217"},"firstname":{"$":"Hank"},"lastname":{"$":"Barker"},"street":{"$":"18 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0218"},"firstname":{"$":"Inki"},"lastname":{"$":"Barker"},"street":{"$":"19 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0219"},"firstname":{"$":"James"},"lastname":{"$":"Barker"},"street":{"$":"20 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0220"},"firstname":{"$":"Al"},"lastname":{"$":"Corsetti"},"street":{"$":"21 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0221"},"firstname":{"$":"Bob"},"lastname":{"$":"Corsetti"},"street":{"$":"22 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0222"},"firstname":{"$":"Charles"},"lastname":{"$":"Corsetti"},"street":{"$":"23 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0223"},"firstname":{"$":"David"},"lastname":{"$":"Corsetti"},"street":{"$":"24 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0224"},"firstname":{"$":"Egon"},"lastname":{"$":"Corsetti"},"street":{"$":"25 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0225"},"firstname":{"$":"Farbood"},"lastname":{"$":"Corsetti"},"street":{"$":"26 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0226"},"firstname":{"$":"George"},"lastname":{"$":"Corsetti"},"street":{"$":"27 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0227"},"firstname":{"$":"Hank"},"lastname":{"$":"Corsetti"},"street":{"$":"28 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0228"},"firstname":{"$":"Inki"},"lastname":{"$":"Corsetti"},"street":{"$":"29 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0229"},"firstname":{"$":"James"},"lastname":{"$":"Corsetti"},"street":{"$":"30 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0230"},"firstname":{"$":"Al"},"lastname":{"$":"Dershowitz"},"street":{"$":"31 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0231"},"firstname":{"$":"Bob"},"lastname":{"$":"Dershowitz"},"street":{"$":"32 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0232"},"firstname":{"$":"Charles"},"lastname":{"$":"Dershowitz"},"street":{"$":"33 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0233"},"firstname":{"$":"David"},"lastname":{"$":"Dershowitz"},"street":{"$":"34 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0234"},"firstname":{"$":"Egon"},"lastname":{"$":"Dershowitz"},"street":{"$":"35 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0235"},"firstname":{"$":"Farbood"},"lastname":{"$":"Dershowitz"},"street":{"$":"36 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0236"},"firstname":{"$":"George"},"lastname":{"$":"Dershowitz"},"street":{"$":"37 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0237"},"firstname":{"$":"Hank"},"lastname":{"$":"Dershowitz"},"street":{"$":"38 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0238"},"firstname":{"$":"Inki"},"lastname":{"$":"Dershowitz"},"street":{"$":"39 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0239"},"firstname":{"$":"James"},"lastname":{"$":"Dershowitz"},"street":{"$":"40 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0240"},"firstname":{"$":"Al"},"lastname":{"$":"Engleman"},"street":{"$":"41 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0241"},"firstname":{"$":"Bob"},"lastname":{"$":"Engleman"},"street":{"$":"42 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0242"},"firstname":{"$":"Charles"},"lastname":{"$":"Engleman"},"street":{"$":"43 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0243"},"firstname":{"$":"David"},"lastname":{"$":"Engleman"},"street":{"$":"44 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0244"},"firstname":{"$":"Egon"},"lastname":{"$":"Engleman"},"street":{"$":"45 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0245"},"firstname":{"$":"Farbood"},"lastname":{"$":"Engleman"},"street":{"$":"46 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0246"},"firstname":{"$":"George"},"lastname":{"$":"Engleman"},"street":{"$":"47 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0247"},"firstname":{"$":"Hank"},"lastname":{"$":"Engleman"},"street":{"$":"48 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0248"},"firstname":{"$":"Inki"},"lastname":{"$":"Engleman"},"street":{"$":"49 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0249"},"firstname":{"$":"James"},"lastname":{"$":"Engleman"},"street":{"$":"50 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0250"},"firstname":{"$":"Al"},"lastname":{"$":"Franklin"},"street":{"$":"51 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0251"},"firstname":{"$":"Bob"},"lastname":{"$":"Franklin"},"street":{"$":"52 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0252"},"firstname":{"$":"Charles"},"lastname":{"$":"Franklin"},"street":{"$":"53 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0253"},"firstname":{"$":"David"},"lastname":{"$":"Franklin"},"street":{"$":"54 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0254"},"firstname":{"$":"Egon"},"lastname":{"$":"Franklin"},"street":{"$":"55 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0255"},"firstname":{"$":"Farbood"},"lastname":{"$":"Franklin"},"street":{"$":"56 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0256"},"firstname":{"$":"George"},"lastname":{"$":"Franklin"},"street":{"$":"57 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0257"},"firstname":{"$":"Hank"},"lastname":{"$":"Franklin"},"street":{"$":"58 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0258"},"firstname":{"$":"Inki"},"lastname":{"$":"Franklin"},"street":{"$":"59 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0259"},"firstname":{"$":"James"},"lastname":{"$":"Franklin"},"street":{"$":"60 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0260"},"firstname":{"$":"Al"},"lastname":{"$":"Grice"},"street":{"$":"61 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0261"},"firstname":{"$":"Bob"},"lastname":{"$":"Grice"},"street":{"$":"62 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0262"},"firstname":{"$":"Charles"},"lastname":{"$":"Grice"},"street":{"$":"63 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0263"},"firstname":{"$":"David"},"lastname":{"$":"Grice"},"street":{"$":"64 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0264"},"firstname":{"$":"Egon"},"lastname":{"$":"Grice"},"street":{"$":"65 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0265"},"firstname":{"$":"Farbood"},"lastname":{"$":"Grice"},"street":{"$":"66 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0266"},"firstname":{"$":"George"},"lastname":{"$":"Grice"},"street":{"$":"67 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0267"},"firstname":{"$":"Hank"},"lastname":{"$":"Grice"},"street":{"$":"68 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0268"},"firstname":{"$":"Inki"},"lastname":{"$":"Grice"},"street":{"$":"69 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0269"},"firstname":{"$":"James"},"lastname":{"$":"Grice"},"street":{"$":"70 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0270"},"firstname":{"$":"Al"},"lastname":{"$":"Haverford"},"street":{"$":"71 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0271"},"firstname":{"$":"Bob"},"lastname":{"$":"Haverford"},"street":{"$":"72 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0272"},"firstname":{"$":"Charles"},"lastname":{"$":"Haverford"},"street":{"$":"73 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0273"},"firstname":{"$":"David"},"lastname":{"$":"Haverford"},"street":{"$":"74 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0274"},"firstname":{"$":"Egon"},"lastname":{"$":"Haverford"},"street":{"$":"75 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0275"},"firstname":{"$":"Farbood"},"lastname":{"$":"Haverford"},"street":{"$":"76 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0276"},"firstname":{"$":"George"},"lastname":{"$":"Haverford"},"street":{"$":"77 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0277"},"firstname":{"$":"Hank"},"lastname":{"$":"Haverford"},"street":{"$":"78 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0278"},"firstname":{"$":"Inki"},"lastname":{"$":"Haverford"},"street":{"$":"79 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0279"},"firstname":{"$":"James"},"lastname":{"$":"Haverford"},"street":{"$":"80 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0280"},"firstname":{"$":"Al"},"lastname":{"$":"Ilvedson"},"street":{"$":"81 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0281"},"firstname":{"$":"Bob"},"lastname":{"$":"Ilvedson"},"street":{"$":"82 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0282"},"firstname":{"$":"Charles"},"lastname":{"$":"Ilvedson"},"street":{"$":"83 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0283"},"firstname":{"$":"David"},"lastname":{"$":"Ilvedson"},"street":{"$":"84 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0284"},"firstname":{"$":"Egon"},"lastname":{"$":"Ilvedson"},"street":{"$":"85 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0285"},"firstname":{"$":"Farbood"},"lastname":{"$":"Ilvedson"},"street":{"$":"86 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0286"},"firstname":{"$":"George"},"lastname":{"$":"Ilvedson"},"street":{"$":"87 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0287"},"firstname":{"$":"Hank"},"lastname":{"$":"Ilvedson"},"street":{"$":"88 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0288"},"firstname":{"$":"Inki"},"lastname":{"$":"Ilvedson"},"street":{"$":"89 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0289"},"firstname":{"$":"James"},"lastname":{"$":"Ilvedson"},"street":{"$":"90 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0290"},"firstname":{"$":"Al"},"lastname":{"$":"Jones"},"street":{"$":"91 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0291"},"firstname":{"$":"Bob"},"lastname":{"$":"Jones"},"street":{"$":"92 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0292"},"firstname":{"$":"Charles"},"lastname":{"$":"Jones"},"street":{"$":"93 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0293"},"firstname":{"$":"David"},"lastname":{"$":"Jones"},"street":{"$":"94 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0294"},"firstname":{"$":"Egon"},"lastname":{"$":"Jones"},"street":{"$":"95 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0295"},"firstname":{"$":"Farbood"},"lastname":{"$":"Jones"},"street":{"$":"96 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0296"},"firstname":{"$":"George"},"lastname":{"$":"Jones"},"street":{"$":"97 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0297"},"firstname":{"$":"Hank"},"lastname":{"$":"Jones"},"street":{"$":"98 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0298"},"firstname":{"$":"Inki"},"lastname":{"$":"Jones"},"street":{"$":"99 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0299"},"firstname":{"$":"James"},"lastname":{"$":"Jones"},"street":{"$":"100 Any St."},"city":{"$":"Anytown"},"state":{"$":"AZ"},"zip":{"$":"22000"}},{"id":{"$":"0300"},"firstname":{"$":"Al"},"lastname":{"$":"Aranow"},"street":{"$":"1 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0301"},"firstname":{"$":"Bob"},"lastname":{"$":"Aranow"},"street":{"$":"2 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0302"},"firstname":{"$":"Charles"},"lastname":{"$":"Aranow"},"street":{"$":"3 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0303"},"firstname":{"$":"David"},"lastname":{"$":"Aranow"},"street":{"$":"4 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0304"},"firstname":{"$":"Egon"},"lastname":{"$":"Aranow"},"street":{"$":"5 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0305"},"firstname":{"$":"Farbood"},"lastname":{"$":"Aranow"},"street":{"$":"6 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0306"},"firstname":{"$":"George"},"lastname":{"$":"Aranow"},"street":{"$":"7 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0307"},"firstname":{"$":"Hank"},"lastname":{"$":"Aranow"},"street":{"$":"8 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0308"},"firstname":{"$":"Inki"},"lastname":{"$":"Aranow"},"street":{"$":"9 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0309"},"firstname":{"$":"James"},"lastname":{"$":"Aranow"},"street":{"$":"10 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0310"},"firstname":{"$":"Al"},"lastname":{"$":"Barker"},"street":{"$":"11 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0311"},"firstname":{"$":"Bob"},"lastname":{"$":"Barker"},"street":{"$":"12 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0312"},"firstname":{"$":"Charles"},"lastname":{"$":"Barker"},"street":{"$":"13 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0313"},"firstname":{"$":"David"},"lastname":{"$":"Barker"},"street":{"$":"14 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0314"},"firstname":{"$":"Egon"},"lastname":{"$":"Barker"},"street":{"$":"15 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0315"},"firstname":{"$":"Farbood"},"lastname":{"$":"Barker"},"street":{"$":"16 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0316"},"firstname":{"$":"George"},"lastname":{"$":"Barker"},"street":{"$":"17 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0317"},"firstname":{"$":"Hank"},"lastname":{"$":"Barker"},"street":{"$":"18 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0318"},"firstname":{"$":"Inki"},"lastname":{"$":"Barker"},"street":{"$":"19 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0319"},"firstname":{"$":"James"},"lastname":{"$":"Barker"},"street":{"$":"20 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0320"},"firstname":{"$":"Al"},"lastname":{"$":"Corsetti"},"street":{"$":"21 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0321"},"firstname":{"$":"Bob"},"lastname":{"$":"Corsetti"},"street":{"$":"22 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0322"},"firstname":{"$":"Charles"},"lastname":{"$":"Corsetti"},"street":{"$":"23 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0323"},"firstname":{"$":"David"},"lastname":{"$":"Corsetti"},"street":{"$":"24 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0324"},"firstname":{"$":"Egon"},"lastname":{"$":"Corsetti"},"street":{"$":"25 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0325"},"firstname":{"$":"Farbood"},"lastname":{"$":"Corsetti"},"street":{"$":"26 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0326"},"firstname":{"$":"George"},"lastname":{"$":"Corsetti"},"street":{"$":"27 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0327"},"firstname":{"$":"Hank"},"lastname":{"$":"Corsetti"},"street":{"$":"28 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0328"},"firstname":{"$":"Inki"},"lastname":{"$":"Corsetti"},"street":{"$":"29 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0329"},"firstname":{"$":"James"},"lastname":{"$":"Corsetti"},"street":{"$":"30 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0330"},"firstname":{"$":"Al"},"lastname":{"$":"Dershowitz"},"street":{"$":"31 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0331"},"firstname":{"$":"Bob"},"lastname":{"$":"Dershowitz"},"street":{"$":"32 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0332"},"firstname":{"$":"Charles"},"lastname":{"$":"Dershowitz"},"street":{"$":"33 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0333"},"firstname":{"$":"David"},"lastname":{"$":"Dershowitz"},"street":{"$":"34 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0334"},"firstname":{"$":"Egon"},"lastname":{"$":"Dershowitz"},"street":{"$":"35 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0335"},"firstname":{"$":"Farbood"},"lastname":{"$":"Dershowitz"},"street":{"$":"36 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0336"},"firstname":{"$":"George"},"lastname":{"$":"Dershowitz"},"street":{"$":"37 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0337"},"firstname":{"$":"Hank"},"lastname":{"$":"Dershowitz"},"street":{"$":"38 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0338"},"firstname":{"$":"Inki"},"lastname":{"$":"Dershowitz"},"street":{"$":"39 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0339"},"firstname":{"$":"James"},"lastname":{"$":"Dershowitz"},"street":{"$":"40 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0340"},"firstname":{"$":"Al"},"lastname":{"$":"Engleman"},"street":{"$":"41 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0341"},"firstname":{"$":"Bob"},"lastname":{"$":"Engleman"},"street":{"$":"42 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0342"},"firstname":{"$":"Charles"},"lastname":{"$":"Engleman"},"street":{"$":"43 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0343"},"firstname":{"$":"David"},"lastname":{"$":"Engleman"},"street":{"$":"44 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0344"},"firstname":{"$":"Egon"},"lastname":{"$":"Engleman"},"street":{"$":"45 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0345"},"firstname":{"$":"Farbood"},"lastname":{"$":"Engleman"},"street":{"$":"46 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0346"},"firstname":{"$":"George"},"lastname":{"$":"Engleman"},"street":{"$":"47 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0347"},"firstname":{"$":"Hank"},"lastname":{"$":"Engleman"},"street":{"$":"48 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0348"},"firstname":{"$":"Inki"},"lastname":{"$":"Engleman"},"street":{"$":"49 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0349"},"firstname":{"$":"James"},"lastname":{"$":"Engleman"},"street":{"$":"50 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0350"},"firstname":{"$":"Al"},"lastname":{"$":"Franklin"},"street":{"$":"51 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0351"},"firstname":{"$":"Bob"},"lastname":{"$":"Franklin"},"street":{"$":"52 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0352"},"firstname":{"$":"Charles"},"lastname":{"$":"Franklin"},"street":{"$":"53 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0353"},"firstname":{"$":"David"},"lastname":{"$":"Franklin"},"street":{"$":"54 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0354"},"firstname":{"$":"Egon"},"lastname":{"$":"Franklin"},"street":{"$":"55 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0355"},"firstname":{"$":"Farbood"},"lastname":{"$":"Franklin"},"street":{"$":"56 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0356"},"firstname":{"$":"George"},"lastname":{"$":"Franklin"},"street":{"$":"57 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0357"},"firstname":{"$":"Hank"},"lastname":{"$":"Franklin"},"street":{"$":"58 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0358"},"firstname":{"$":"Inki"},"lastname":{"$":"Franklin"},"street":{"$":"59 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0359"},"firstname":{"$":"James"},"lastname":{"$":"Franklin"},"street":{"$":"60 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0360"},"firstname":{"$":"Al"},"lastname":{"$":"Grice"},"street":{"$":"61 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0361"},"firstname":{"$":"Bob"},"lastname":{"$":"Grice"},"street":{"$":"62 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0362"},"firstname":{"$":"Charles"},"lastname":{"$":"Grice"},"street":{"$":"63 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0363"},"firstname":{"$":"David"},"lastname":{"$":"Grice"},"street":{"$":"64 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0364"},"firstname":{"$":"Egon"},"lastname":{"$":"Grice"},"street":{"$":"65 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0365"},"firstname":{"$":"Farbood"},"lastname":{"$":"Grice"},"street":{"$":"66 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0366"},"firstname":{"$":"George"},"lastname":{"$":"Grice"},"street":{"$":"67 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0367"},"firstname":{"$":"Hank"},"lastname":{"$":"Grice"},"street":{"$":"68 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0368"},"firstname":{"$":"Inki"},"lastname":{"$":"Grice"},"street":{"$":"69 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0369"},"firstname":{"$":"James"},"lastname":{"$":"Grice"},"street":{"$":"70 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0370"},"firstname":{"$":"Al"},"lastname":{"$":"Haverford"},"street":{"$":"71 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0371"},"firstname":{"$":"Bob"},"lastname":{"$":"Haverford"},"street":{"$":"72 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0372"},"firstname":{"$":"Charles"},"lastname":{"$":"Haverford"},"street":{"$":"73 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0373"},"firstname":{"$":"David"},"lastname":{"$":"Haverford"},"street":{"$":"74 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0374"},"firstname":{"$":"Egon"},"lastname":{"$":"Haverford"},"street":{"$":"75 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0375"},"firstname":{"$":"Farbood"},"lastname":{"$":"Haverford"},"street":{"$":"76 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0376"},"firstname":{"$":"George"},"lastname":{"$":"Haverford"},"street":{"$":"77 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0377"},"firstname":{"$":"Hank"},"lastname":{"$":"Haverford"},"street":{"$":"78 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0378"},"firstname":{"$":"Inki"},"lastname":{"$":"Haverford"},"street":{"$":"79 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0379"},"firstname":{"$":"James"},"lastname":{"$":"Haverford"},"street":{"$":"80 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0380"},"firstname":{"$":"Al"},"lastname":{"$":"Ilvedson"},"street":{"$":"81 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0381"},"firstname":{"$":"Bob"},"lastname":{"$":"Ilvedson"},"street":{"$":"82 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0382"},"firstname":{"$":"Charles"},"lastname":{"$":"Ilvedson"},"street":{"$":"83 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0383"},"firstname":{"$":"David"},"lastname":{"$":"Ilvedson"},"street":{"$":"84 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0384"},"firstname":{"$":"Egon"},"lastname":{"$":"Ilvedson"},"street":{"$":"85 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0385"},"firstname":{"$":"Farbood"},"lastname":{"$":"Ilvedson"},"street":{"$":"86 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0386"},"firstname":{"$":"George"},"lastname":{"$":"Ilvedson"},"street":{"$":"87 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0387"},"firstname":{"$":"Hank"},"lastname":{"$":"Ilvedson"},"street":{"$":"88 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0388"},"firstname":{"$":"Inki"},"lastname":{"$":"Ilvedson"},"street":{"$":"89 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0389"},"firstname":{"$":"James"},"lastname":{"$":"Ilvedson"},"street":{"$":"90 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0390"},"firstname":{"$":"Al"},"lastname":{"$":"Jones"},"street":{"$":"91 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0391"},"firstname":{"$":"Bob"},"lastname":{"$":"Jones"},"street":{"$":"92 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0392"},"firstname":{"$":"Charles"},"lastname":{"$":"Jones"},"street":{"$":"93 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0393"},"firstname":{"$":"David"},"lastname":{"$":"Jones"},"street":{"$":"94 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0394"},"firstname":{"$":"Egon"},"lastname":{"$":"Jones"},"street":{"$":"95 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0395"},"firstname":{"$":"Farbood"},"lastname":{"$":"Jones"},"street":{"$":"96 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0396"},"firstname":{"$":"George"},"lastname":{"$":"Jones"},"street":{"$":"97 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0397"},"firstname":{"$":"Hank"},"lastname":{"$":"Jones"},"street":{"$":"98 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0398"},"firstname":{"$":"Inki"},"lastname":{"$":"Jones"},"street":{"$":"99 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0399"},"firstname":{"$":"James"},"lastname":{"$":"Jones"},"street":{"$":"100 Any St."},"city":{"$":"Anytown"},"state":{"$":"AR"},"zip":{"$":"22000"}},{"id":{"$":"0400"},"firstname":{"$":"Al"},"lastname":{"$":"Aranow"},"street":{"$":"1 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0401"},"firstname":{"$":"Bob"},"lastname":{"$":"Aranow"},"street":{"$":"2 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0402"},"firstname":{"$":"Charles"},"lastname":{"$":"Aranow"},"street":{"$":"3 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0403"},"firstname":{"$":"David"},"lastname":{"$":"Aranow"},"street":{"$":"4 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0404"},"firstname":{"$":"Egon"},"lastname":{"$":"Aranow"},"street":{"$":"5 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0405"},"firstname":{"$":"Farbood"},"lastname":{"$":"Aranow"},"street":{"$":"6 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0406"},"firstname":{"$":"George"},"lastname":{"$":"Aranow"},"street":{"$":"7 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0407"},"firstname":{"$":"Hank"},"lastname":{"$":"Aranow"},"street":{"$":"8 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0408"},"firstname":{"$":"Inki"},"lastname":{"$":"Aranow"},"street":{"$":"9 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0409"},"firstname":{"$":"James"},"lastname":{"$":"Aranow"},"street":{"$":"10 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0410"},"firstname":{"$":"Al"},"lastname":{"$":"Barker"},"street":{"$":"11 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0411"},"firstname":{"$":"Bob"},"lastname":{"$":"Barker"},"street":{"$":"12 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0412"},"firstname":{"$":"Charles"},"lastname":{"$":"Barker"},"street":{"$":"13 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0413"},"firstname":{"$":"David"},"lastname":{"$":"Barker"},"street":{"$":"14 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0414"},"firstname":{"$":"Egon"},"lastname":{"$":"Barker"},"street":{"$":"15 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0415"},"firstname":{"$":"Farbood"},"lastname":{"$":"Barker"},"street":{"$":"16 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0416"},"firstname":{"$":"George"},"lastname":{"$":"Barker"},"street":{"$":"17 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0417"},"firstname":{"$":"Hank"},"lastname":{"$":"Barker"},"street":{"$":"18 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0418"},"firstname":{"$":"Inki"},"lastname":{"$":"Barker"},"street":{"$":"19 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0419"},"firstname":{"$":"James"},"lastname":{"$":"Barker"},"street":{"$":"20 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0420"},"firstname":{"$":"Al"},"lastname":{"$":"Corsetti"},"street":{"$":"21 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0421"},"firstname":{"$":"Bob"},"lastname":{"$":"Corsetti"},"street":{"$":"22 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0422"},"firstname":{"$":"Charles"},"lastname":{"$":"Corsetti"},"street":{"$":"23 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0423"},"firstname":{"$":"David"},"lastname":{"$":"Corsetti"},"street":{"$":"24 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0424"},"firstname":{"$":"Egon"},"lastname":{"$":"Corsetti"},"street":{"$":"25 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0425"},"firstname":{"$":"Farbood"},"lastname":{"$":"Corsetti"},"street":{"$":"26 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0426"},"firstname":{"$":"George"},"lastname":{"$":"Corsetti"},"street":{"$":"27 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0427"},"firstname":{"$":"Hank"},"lastname":{"$":"Corsetti"},"street":{"$":"28 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0428"},"firstname":{"$":"Inki"},"lastname":{"$":"Corsetti"},"street":{"$":"29 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0429"},"firstname":{"$":"James"},"lastname":{"$":"Corsetti"},"street":{"$":"30 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0430"},"firstname":{"$":"Al"},"lastname":{"$":"Dershowitz"},"street":{"$":"31 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0431"},"firstname":{"$":"Bob"},"lastname":{"$":"Dershowitz"},"street":{"$":"32 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0432"},"firstname":{"$":"Charles"},"lastname":{"$":"Dershowitz"},"street":{"$":"33 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0433"},"firstname":{"$":"David"},"lastname":{"$":"Dershowitz"},"street":{"$":"34 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0434"},"firstname":{"$":"Egon"},"lastname":{"$":"Dershowitz"},"street":{"$":"35 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0435"},"firstname":{"$":"Farbood"},"lastname":{"$":"Dershowitz"},"street":{"$":"36 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0436"},"firstname":{"$":"George"},"lastname":{"$":"Dershowitz"},"street":{"$":"37 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0437"},"firstname":{"$":"Hank"},"lastname":{"$":"Dershowitz"},"street":{"$":"38 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0438"},"firstname":{"$":"Inki"},"lastname":{"$":"Dershowitz"},"street":{"$":"39 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0439"},"firstname":{"$":"James"},"lastname":{"$":"Dershowitz"},"street":{"$":"40 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0440"},"firstname":{"$":"Al"},"lastname":{"$":"Engleman"},"street":{"$":"41 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0441"},"firstname":{"$":"Bob"},"lastname":{"$":"Engleman"},"street":{"$":"42 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0442"},"firstname":{"$":"Charles"},"lastname":{"$":"Engleman"},"street":{"$":"43 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0443"},"firstname":{"$":"David"},"lastname":{"$":"Engleman"},"street":{"$":"44 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0444"},"firstname":{"$":"Egon"},"lastname":{"$":"Engleman"},"street":{"$":"45 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0445"},"firstname":{"$":"Farbood"},"lastname":{"$":"Engleman"},"street":{"$":"46 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0446"},"firstname":{"$":"George"},"lastname":{"$":"Engleman"},"street":{"$":"47 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0447"},"firstname":{"$":"Hank"},"lastname":{"$":"Engleman"},"street":{"$":"48 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0448"},"firstname":{"$":"Inki"},"lastname":{"$":"Engleman"},"street":{"$":"49 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0449"},"firstname":{"$":"James"},"lastname":{"$":"Engleman"},"street":{"$":"50 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0450"},"firstname":{"$":"Al"},"lastname":{"$":"Franklin"},"street":{"$":"51 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0451"},"firstname":{"$":"Bob"},"lastname":{"$":"Franklin"},"street":{"$":"52 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0452"},"firstname":{"$":"Charles"},"lastname":{"$":"Franklin"},"street":{"$":"53 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0453"},"firstname":{"$":"David"},"lastname":{"$":"Franklin"},"street":{"$":"54 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0454"},"firstname":{"$":"Egon"},"lastname":{"$":"Franklin"},"street":{"$":"55 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0455"},"firstname":{"$":"Farbood"},"lastname":{"$":"Franklin"},"street":{"$":"56 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0456"},"firstname":{"$":"George"},"lastname":{"$":"Franklin"},"street":{"$":"57 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0457"},"firstname":{"$":"Hank"},"lastname":{"$":"Franklin"},"street":{"$":"58 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0458"},"firstname":{"$":"Inki"},"lastname":{"$":"Franklin"},"street":{"$":"59 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0459"},"firstname":{"$":"James"},"lastname":{"$":"Franklin"},"street":{"$":"60 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0460"},"firstname":{"$":"Al"},"lastname":{"$":"Grice"},"street":{"$":"61 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0461"},"firstname":{"$":"Bob"},"lastname":{"$":"Grice"},"street":{"$":"62 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0462"},"firstname":{"$":"Charles"},"lastname":{"$":"Grice"},"street":{"$":"63 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0463"},"firstname":{"$":"David"},"lastname":{"$":"Grice"},"street":{"$":"64 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0464"},"firstname":{"$":"Egon"},"lastname":{"$":"Grice"},"street":{"$":"65 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0465"},"firstname":{"$":"Farbood"},"lastname":{"$":"Grice"},"street":{"$":"66 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0466"},"firstname":{"$":"George"},"lastname":{"$":"Grice"},"street":{"$":"67 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0467"},"firstname":{"$":"Hank"},"lastname":{"$":"Grice"},"street":{"$":"68 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0468"},"firstname":{"$":"Inki"},"lastname":{"$":"Grice"},"street":{"$":"69 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0469"},"firstname":{"$":"James"},"lastname":{"$":"Grice"},"street":{"$":"70 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0470"},"firstname":{"$":"Al"},"lastname":{"$":"Haverford"},"street":{"$":"71 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0471"},"firstname":{"$":"Bob"},"lastname":{"$":"Haverford"},"street":{"$":"72 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0472"},"firstname":{"$":"Charles"},"lastname":{"$":"Haverford"},"street":{"$":"73 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0473"},"firstname":{"$":"David"},"lastname":{"$":"Haverford"},"street":{"$":"74 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0474"},"firstname":{"$":"Egon"},"lastname":{"$":"Haverford"},"street":{"$":"75 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0475"},"firstname":{"$":"Farbood"},"lastname":{"$":"Haverford"},"street":{"$":"76 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0476"},"firstname":{"$":"George"},"lastname":{"$":"Haverford"},"street":{"$":"77 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0477"},"firstname":{"$":"Hank"},"lastname":{"$":"Haverford"},"street":{"$":"78 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0478"},"firstname":{"$":"Inki"},"lastname":{"$":"Haverford"},"street":{"$":"79 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0479"},"firstname":{"$":"James"},"lastname":{"$":"Haverford"},"street":{"$":"80 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0480"},"firstname":{"$":"Al"},"lastname":{"$":"Ilvedson"},"street":{"$":"81 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0481"},"firstname":{"$":"Bob"},"lastname":{"$":"Ilvedson"},"street":{"$":"82 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0482"},"firstname":{"$":"Charles"},"lastname":{"$":"Ilvedson"},"street":{"$":"83 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0483"},"firstname":{"$":"David"},"lastname":{"$":"Ilvedson"},"street":{"$":"84 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0484"},"firstname":{"$":"Egon"},"lastname":{"$":"Ilvedson"},"street":{"$":"85 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0485"},"firstname":{"$":"Farbood"},"lastname":{"$":"Ilvedson"},"street":{"$":"86 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0486"},"firstname":{"$":"George"},"lastname":{"$":"Ilvedson"},"street":{"$":"87 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0487"},"firstname":{"$":"Hank"},"lastname":{"$":"Ilvedson"},"street":{"$":"88 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0488"},"firstname":{"$":"Inki"},"lastname":{"$":"Ilvedson"},"street":{"$":"89 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0489"},"firstname":{"$":"James"},"lastname":{"$":"Ilvedson"},"street":{"$":"90 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0490"},"firstname":{"$":"Al"},"lastname":{"$":"Jones"},"street":{"$":"91 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0491"},"firstname":{"$":"Bob"},"lastname":{"$":"Jones"},"street":{"$":"92 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0492"},"firstname":{"$":"Charles"},"lastname":{"$":"Jones"},"street":{"$":"93 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0493"},"firstname":{"$":"David"},"lastname":{"$":"Jones"},"street":{"$":"94 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0494"},"firstname":{"$":"Egon"},"lastname":{"$":"Jones"},"street":{"$":"95 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0495"},"firstname":{"$":"Farbood"},"lastname":{"$":"Jones"},"street":{"$":"96 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0496"},"firstname":{"$":"George"},"lastname":{"$":"Jones"},"street":{"$":"97 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0497"},"firstname":{"$":"Hank"},"lastname":{"$":"Jones"},"street":{"$":"98 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0498"},"firstname":{"$":"Inki"},"lastname":{"$":"Jones"},"street":{"$":"99 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0499"},"firstname":{"$":"James"},"lastname":{"$":"Jones"},"street":{"$":"100 Any St."},"city":{"$":"Anytown"},"state":{"$":"CA"},"zip":{"$":"22000"}},{"id":{"$":"0500"},"firstname":{"$":"Al"},"lastname":{"$":"Aranow"},"street":{"$":"1 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0501"},"firstname":{"$":"Bob"},"lastname":{"$":"Aranow"},"street":{"$":"2 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0502"},"firstname":{"$":"Charles"},"lastname":{"$":"Aranow"},"street":{"$":"3 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0503"},"firstname":{"$":"David"},"lastname":{"$":"Aranow"},"street":{"$":"4 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0504"},"firstname":{"$":"Egon"},"lastname":{"$":"Aranow"},"street":{"$":"5 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0505"},"firstname":{"$":"Farbood"},"lastname":{"$":"Aranow"},"street":{"$":"6 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0506"},"firstname":{"$":"George"},"lastname":{"$":"Aranow"},"street":{"$":"7 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0507"},"firstname":{"$":"Hank"},"lastname":{"$":"Aranow"},"street":{"$":"8 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0508"},"firstname":{"$":"Inki"},"lastname":{"$":"Aranow"},"street":{"$":"9 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0509"},"firstname":{"$":"James"},"lastname":{"$":"Aranow"},"street":{"$":"10 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0510"},"firstname":{"$":"Al"},"lastname":{"$":"Barker"},"street":{"$":"11 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0511"},"firstname":{"$":"Bob"},"lastname":{"$":"Barker"},"street":{"$":"12 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0512"},"firstname":{"$":"Charles"},"lastname":{"$":"Barker"},"street":{"$":"13 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0513"},"firstname":{"$":"David"},"lastname":{"$":"Barker"},"street":{"$":"14 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0514"},"firstname":{"$":"Egon"},"lastname":{"$":"Barker"},"street":{"$":"15 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0515"},"firstname":{"$":"Farbood"},"lastname":{"$":"Barker"},"street":{"$":"16 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0516"},"firstname":{"$":"George"},"lastname":{"$":"Barker"},"street":{"$":"17 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0517"},"firstname":{"$":"Hank"},"lastname":{"$":"Barker"},"street":{"$":"18 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0518"},"firstname":{"$":"Inki"},"lastname":{"$":"Barker"},"street":{"$":"19 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0519"},"firstname":{"$":"James"},"lastname":{"$":"Barker"},"street":{"$":"20 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0520"},"firstname":{"$":"Al"},"lastname":{"$":"Corsetti"},"street":{"$":"21 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0521"},"firstname":{"$":"Bob"},"lastname":{"$":"Corsetti"},"street":{"$":"22 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0522"},"firstname":{"$":"Charles"},"lastname":{"$":"Corsetti"},"street":{"$":"23 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0523"},"firstname":{"$":"David"},"lastname":{"$":"Corsetti"},"street":{"$":"24 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0524"},"firstname":{"$":"Egon"},"lastname":{"$":"Corsetti"},"street":{"$":"25 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0525"},"firstname":{"$":"Farbood"},"lastname":{"$":"Corsetti"},"street":{"$":"26 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0526"},"firstname":{"$":"George"},"lastname":{"$":"Corsetti"},"street":{"$":"27 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0527"},"firstname":{"$":"Hank"},"lastname":{"$":"Corsetti"},"street":{"$":"28 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0528"},"firstname":{"$":"Inki"},"lastname":{"$":"Corsetti"},"street":{"$":"29 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0529"},"firstname":{"$":"James"},"lastname":{"$":"Corsetti"},"street":{"$":"30 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0530"},"firstname":{"$":"Al"},"lastname":{"$":"Dershowitz"},"street":{"$":"31 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0531"},"firstname":{"$":"Bob"},"lastname":{"$":"Dershowitz"},"street":{"$":"32 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0532"},"firstname":{"$":"Charles"},"lastname":{"$":"Dershowitz"},"street":{"$":"33 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0533"},"firstname":{"$":"David"},"lastname":{"$":"Dershowitz"},"street":{"$":"34 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0534"},"firstname":{"$":"Egon"},"lastname":{"$":"Dershowitz"},"street":{"$":"35 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0535"},"firstname":{"$":"Farbood"},"lastname":{"$":"Dershowitz"},"street":{"$":"36 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0536"},"firstname":{"$":"George"},"lastname":{"$":"Dershowitz"},"street":{"$":"37 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0537"},"firstname":{"$":"Hank"},"lastname":{"$":"Dershowitz"},"street":{"$":"38 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0538"},"firstname":{"$":"Inki"},"lastname":{"$":"Dershowitz"},"street":{"$":"39 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0539"},"firstname":{"$":"James"},"lastname":{"$":"Dershowitz"},"street":{"$":"40 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0540"},"firstname":{"$":"Al"},"lastname":{"$":"Engleman"},"street":{"$":"41 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0541"},"firstname":{"$":"Bob"},"lastname":{"$":"Engleman"},"street":{"$":"42 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0542"},"firstname":{"$":"Charles"},"lastname":{"$":"Engleman"},"street":{"$":"43 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0543"},"firstname":{"$":"David"},"lastname":{"$":"Engleman"},"street":{"$":"44 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0544"},"firstname":{"$":"Egon"},"lastname":{"$":"Engleman"},"street":{"$":"45 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0545"},"firstname":{"$":"Farbood"},"lastname":{"$":"Engleman"},"street":{"$":"46 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0546"},"firstname":{"$":"George"},"lastname":{"$":"Engleman"},"street":{"$":"47 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0547"},"firstname":{"$":"Hank"},"lastname":{"$":"Engleman"},"street":{"$":"48 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0548"},"firstname":{"$":"Inki"},"lastname":{"$":"Engleman"},"street":{"$":"49 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0549"},"firstname":{"$":"James"},"lastname":{"$":"Engleman"},"street":{"$":"50 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0550"},"firstname":{"$":"Al"},"lastname":{"$":"Franklin"},"street":{"$":"51 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0551"},"firstname":{"$":"Bob"},"lastname":{"$":"Franklin"},"street":{"$":"52 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0552"},"firstname":{"$":"Charles"},"lastname":{"$":"Franklin"},"street":{"$":"53 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0553"},"firstname":{"$":"David"},"lastname":{"$":"Franklin"},"street":{"$":"54 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0554"},"firstname":{"$":"Egon"},"lastname":{"$":"Franklin"},"street":{"$":"55 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0555"},"firstname":{"$":"Farbood"},"lastname":{"$":"Franklin"},"street":{"$":"56 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0556"},"firstname":{"$":"George"},"lastname":{"$":"Franklin"},"street":{"$":"57 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0557"},"firstname":{"$":"Hank"},"lastname":{"$":"Franklin"},"street":{"$":"58 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0558"},"firstname":{"$":"Inki"},"lastname":{"$":"Franklin"},"street":{"$":"59 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0559"},"firstname":{"$":"James"},"lastname":{"$":"Franklin"},"street":{"$":"60 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0560"},"firstname":{"$":"Al"},"lastname":{"$":"Grice"},"street":{"$":"61 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0561"},"firstname":{"$":"Bob"},"lastname":{"$":"Grice"},"street":{"$":"62 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0562"},"firstname":{"$":"Charles"},"lastname":{"$":"Grice"},"street":{"$":"63 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0563"},"firstname":{"$":"David"},"lastname":{"$":"Grice"},"street":{"$":"64 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0564"},"firstname":{"$":"Egon"},"lastname":{"$":"Grice"},"street":{"$":"65 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0565"},"firstname":{"$":"Farbood"},"lastname":{"$":"Grice"},"street":{"$":"66 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0566"},"firstname":{"$":"George"},"lastname":{"$":"Grice"},"street":{"$":"67 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0567"},"firstname":{"$":"Hank"},"lastname":{"$":"Grice"},"street":{"$":"68 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0568"},"firstname":{"$":"Inki"},"lastname":{"$":"Grice"},"street":{"$":"69 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0569"},"firstname":{"$":"James"},"lastname":{"$":"Grice"},"street":{"$":"70 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0570"},"firstname":{"$":"Al"},"lastname":{"$":"Haverford"},"street":{"$":"71 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0571"},"firstname":{"$":"Bob"},"lastname":{"$":"Haverford"},"street":{"$":"72 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0572"},"firstname":{"$":"Charles"},"lastname":{"$":"Haverford"},"street":{"$":"73 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0573"},"firstname":{"$":"David"},"lastname":{"$":"Haverford"},"street":{"$":"74 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0574"},"firstname":{"$":"Egon"},"lastname":{"$":"Haverford"},"street":{"$":"75 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0575"},"firstname":{"$":"Farbood"},"lastname":{"$":"Haverford"},"street":{"$":"76 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0576"},"firstname":{"$":"George"},"lastname":{"$":"Haverford"},"street":{"$":"77 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0577"},"firstname":{"$":"Hank"},"lastname":{"$":"Haverford"},"street":{"$":"78 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0578"},"firstname":{"$":"Inki"},"lastname":{"$":"Haverford"},"street":{"$":"79 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0579"},"firstname":{"$":"James"},"lastname":{"$":"Haverford"},"street":{"$":"80 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0580"},"firstname":{"$":"Al"},"lastname":{"$":"Ilvedson"},"street":{"$":"81 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0581"},"firstname":{"$":"Bob"},"lastname":{"$":"Ilvedson"},"street":{"$":"82 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0582"},"firstname":{"$":"Charles"},"lastname":{"$":"Ilvedson"},"street":{"$":"83 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0583"},"firstname":{"$":"David"},"lastname":{"$":"Ilvedson"},"street":{"$":"84 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0584"},"firstname":{"$":"Egon"},"lastname":{"$":"Ilvedson"},"street":{"$":"85 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0585"},"firstname":{"$":"Farbood"},"lastname":{"$":"Ilvedson"},"street":{"$":"86 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0586"},"firstname":{"$":"George"},"lastname":{"$":"Ilvedson"},"street":{"$":"87 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0587"},"firstname":{"$":"Hank"},"lastname":{"$":"Ilvedson"},"street":{"$":"88 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0588"},"firstname":{"$":"Inki"},"lastname":{"$":"Ilvedson"},"street":{"$":"89 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0589"},"firstname":{"$":"James"},"lastname":{"$":"Ilvedson"},"street":{"$":"90 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0590"},"firstname":{"$":"Al"},"lastname":{"$":"Jones"},"street":{"$":"91 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0591"},"firstname":{"$":"Bob"},"lastname":{"$":"Jones"},"street":{"$":"92 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0592"},"firstname":{"$":"Charles"},"lastname":{"$":"Jones"},"street":{"$":"93 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0593"},"firstname":{"$":"David"},"lastname":{"$":"Jones"},"street":{"$":"94 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0594"},"firstname":{"$":"Egon"},"lastname":{"$":"Jones"},"street":{"$":"95 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0595"},"firstname":{"$":"Farbood"},"lastname":{"$":"Jones"},"street":{"$":"96 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0596"},"firstname":{"$":"George"},"lastname":{"$":"Jones"},"street":{"$":"97 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0597"},"firstname":{"$":"Hank"},"lastname":{"$":"Jones"},"street":{"$":"98 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0598"},"firstname":{"$":"Inki"},"lastname":{"$":"Jones"},"street":{"$":"99 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0599"},"firstname":{"$":"James"},"lastname":{"$":"Jones"},"street":{"$":"100 Any St."},"city":{"$":"Anytown"},"state":{"$":"CO"},"zip":{"$":"22000"}},{"id":{"$":"0600"},"firstname":{"$":"Al"},"lastname":{"$":"Aranow"},"street":{"$":"1 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0601"},"firstname":{"$":"Bob"},"lastname":{"$":"Aranow"},"street":{"$":"2 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0602"},"firstname":{"$":"Charles"},"lastname":{"$":"Aranow"},"street":{"$":"3 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0603"},"firstname":{"$":"David"},"lastname":{"$":"Aranow"},"street":{"$":"4 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0604"},"firstname":{"$":"Egon"},"lastname":{"$":"Aranow"},"street":{"$":"5 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0605"},"firstname":{"$":"Farbood"},"lastname":{"$":"Aranow"},"street":{"$":"6 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0606"},"firstname":{"$":"George"},"lastname":{"$":"Aranow"},"street":{"$":"7 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0607"},"firstname":{"$":"Hank"},"lastname":{"$":"Aranow"},"street":{"$":"8 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0608"},"firstname":{"$":"Inki"},"lastname":{"$":"Aranow"},"street":{"$":"9 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0609"},"firstname":{"$":"James"},"lastname":{"$":"Aranow"},"street":{"$":"10 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0610"},"firstname":{"$":"Al"},"lastname":{"$":"Barker"},"street":{"$":"11 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0611"},"firstname":{"$":"Bob"},"lastname":{"$":"Barker"},"street":{"$":"12 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0612"},"firstname":{"$":"Charles"},"lastname":{"$":"Barker"},"street":{"$":"13 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0613"},"firstname":{"$":"David"},"lastname":{"$":"Barker"},"street":{"$":"14 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0614"},"firstname":{"$":"Egon"},"lastname":{"$":"Barker"},"street":{"$":"15 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0615"},"firstname":{"$":"Farbood"},"lastname":{"$":"Barker"},"street":{"$":"16 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0616"},"firstname":{"$":"George"},"lastname":{"$":"Barker"},"street":{"$":"17 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0617"},"firstname":{"$":"Hank"},"lastname":{"$":"Barker"},"street":{"$":"18 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0618"},"firstname":{"$":"Inki"},"lastname":{"$":"Barker"},"street":{"$":"19 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0619"},"firstname":{"$":"James"},"lastname":{"$":"Barker"},"street":{"$":"20 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0620"},"firstname":{"$":"Al"},"lastname":{"$":"Corsetti"},"street":{"$":"21 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0621"},"firstname":{"$":"Bob"},"lastname":{"$":"Corsetti"},"street":{"$":"22 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0622"},"firstname":{"$":"Charles"},"lastname":{"$":"Corsetti"},"street":{"$":"23 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0623"},"firstname":{"$":"David"},"lastname":{"$":"Corsetti"},"street":{"$":"24 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0624"},"firstname":{"$":"Egon"},"lastname":{"$":"Corsetti"},"street":{"$":"25 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0625"},"firstname":{"$":"Farbood"},"lastname":{"$":"Corsetti"},"street":{"$":"26 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0626"},"firstname":{"$":"George"},"lastname":{"$":"Corsetti"},"street":{"$":"27 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0627"},"firstname":{"$":"Hank"},"lastname":{"$":"Corsetti"},"street":{"$":"28 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0628"},"firstname":{"$":"Inki"},"lastname":{"$":"Corsetti"},"street":{"$":"29 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0629"},"firstname":{"$":"James"},"lastname":{"$":"Corsetti"},"street":{"$":"30 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0630"},"firstname":{"$":"Al"},"lastname":{"$":"Dershowitz"},"street":{"$":"31 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0631"},"firstname":{"$":"Bob"},"lastname":{"$":"Dershowitz"},"street":{"$":"32 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0632"},"firstname":{"$":"Charles"},"lastname":{"$":"Dershowitz"},"street":{"$":"33 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0633"},"firstname":{"$":"David"},"lastname":{"$":"Dershowitz"},"street":{"$":"34 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0634"},"firstname":{"$":"Egon"},"lastname":{"$":"Dershowitz"},"street":{"$":"35 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0635"},"firstname":{"$":"Farbood"},"lastname":{"$":"Dershowitz"},"street":{"$":"36 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0636"},"firstname":{"$":"George"},"lastname":{"$":"Dershowitz"},"street":{"$":"37 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0637"},"firstname":{"$":"Hank"},"lastname":{"$":"Dershowitz"},"street":{"$":"38 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0638"},"firstname":{"$":"Inki"},"lastname":{"$":"Dershowitz"},"street":{"$":"39 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0639"},"firstname":{"$":"James"},"lastname":{"$":"Dershowitz"},"street":{"$":"40 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0640"},"firstname":{"$":"Al"},"lastname":{"$":"Engleman"},"street":{"$":"41 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0641"},"firstname":{"$":"Bob"},"lastname":{"$":"Engleman"},"street":{"$":"42 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0642"},"firstname":{"$":"Charles"},"lastname":{"$":"Engleman"},"street":{"$":"43 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0643"},"firstname":{"$":"David"},"lastname":{"$":"Engleman"},"street":{"$":"44 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0644"},"firstname":{"$":"Egon"},"lastname":{"$":"Engleman"},"street":{"$":"45 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0645"},"firstname":{"$":"Farbood"},"lastname":{"$":"Engleman"},"street":{"$":"46 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0646"},"firstname":{"$":"George"},"lastname":{"$":"Engleman"},"street":{"$":"47 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0647"},"firstname":{"$":"Hank"},"lastname":{"$":"Engleman"},"street":{"$":"48 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0648"},"firstname":{"$":"Inki"},"lastname":{"$":"Engleman"},"street":{"$":"49 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0649"},"firstname":{"$":"James"},"lastname":{"$":"Engleman"},"street":{"$":"50 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0650"},"firstname":{"$":"Al"},"lastname":{"$":"Franklin"},"street":{"$":"51 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0651"},"firstname":{"$":"Bob"},"lastname":{"$":"Franklin"},"street":{"$":"52 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0652"},"firstname":{"$":"Charles"},"lastname":{"$":"Franklin"},"street":{"$":"53 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0653"},"firstname":{"$":"David"},"lastname":{"$":"Franklin"},"street":{"$":"54 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0654"},"firstname":{"$":"Egon"},"lastname":{"$":"Franklin"},"street":{"$":"55 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0655"},"firstname":{"$":"Farbood"},"lastname":{"$":"Franklin"},"street":{"$":"56 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0656"},"firstname":{"$":"George"},"lastname":{"$":"Franklin"},"street":{"$":"57 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0657"},"firstname":{"$":"Hank"},"lastname":{"$":"Franklin"},"street":{"$":"58 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0658"},"firstname":{"$":"Inki"},"lastname":{"$":"Franklin"},"street":{"$":"59 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0659"},"firstname":{"$":"James"},"lastname":{"$":"Franklin"},"street":{"$":"60 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0660"},"firstname":{"$":"Al"},"lastname":{"$":"Grice"},"street":{"$":"61 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0661"},"firstname":{"$":"Bob"},"lastname":{"$":"Grice"},"street":{"$":"62 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0662"},"firstname":{"$":"Charles"},"lastname":{"$":"Grice"},"street":{"$":"63 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0663"},"firstname":{"$":"David"},"lastname":{"$":"Grice"},"street":{"$":"64 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0664"},"firstname":{"$":"Egon"},"lastname":{"$":"Grice"},"street":{"$":"65 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0665"},"firstname":{"$":"Farbood"},"lastname":{"$":"Grice"},"street":{"$":"66 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0666"},"firstname":{"$":"George"},"lastname":{"$":"Grice"},"street":{"$":"67 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0667"},"firstname":{"$":"Hank"},"lastname":{"$":"Grice"},"street":{"$":"68 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0668"},"firstname":{"$":"Inki"},"lastname":{"$":"Grice"},"street":{"$":"69 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0669"},"firstname":{"$":"James"},"lastname":{"$":"Grice"},"street":{"$":"70 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0670"},"firstname":{"$":"Al"},"lastname":{"$":"Haverford"},"street":{"$":"71 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0671"},"firstname":{"$":"Bob"},"lastname":{"$":"Haverford"},"street":{"$":"72 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0672"},"firstname":{"$":"Charles"},"lastname":{"$":"Haverford"},"street":{"$":"73 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0673"},"firstname":{"$":"David"},"lastname":{"$":"Haverford"},"street":{"$":"74 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0674"},"firstname":{"$":"Egon"},"lastname":{"$":"Haverford"},"street":{"$":"75 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0675"},"firstname":{"$":"Farbood"},"lastname":{"$":"Haverford"},"street":{"$":"76 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0676"},"firstname":{"$":"George"},"lastname":{"$":"Haverford"},"street":{"$":"77 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0677"},"firstname":{"$":"Hank"},"lastname":{"$":"Haverford"},"street":{"$":"78 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0678"},"firstname":{"$":"Inki"},"lastname":{"$":"Haverford"},"street":{"$":"79 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0679"},"firstname":{"$":"James"},"lastname":{"$":"Haverford"},"street":{"$":"80 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0680"},"firstname":{"$":"Al"},"lastname":{"$":"Ilvedson"},"street":{"$":"81 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0681"},"firstname":{"$":"Bob"},"lastname":{"$":"Ilvedson"},"street":{"$":"82 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0682"},"firstname":{"$":"Charles"},"lastname":{"$":"Ilvedson"},"street":{"$":"83 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0683"},"firstname":{"$":"David"},"lastname":{"$":"Ilvedson"},"street":{"$":"84 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0684"},"firstname":{"$":"Egon"},"lastname":{"$":"Ilvedson"},"street":{"$":"85 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0685"},"firstname":{"$":"Farbood"},"lastname":{"$":"Ilvedson"},"street":{"$":"86 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0686"},"firstname":{"$":"George"},"lastname":{"$":"Ilvedson"},"street":{"$":"87 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0687"},"firstname":{"$":"Hank"},"lastname":{"$":"Ilvedson"},"street":{"$":"88 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0688"},"firstname":{"$":"Inki"},"lastname":{"$":"Ilvedson"},"street":{"$":"89 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0689"},"firstname":{"$":"James"},"lastname":{"$":"Ilvedson"},"street":{"$":"90 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0690"},"firstname":{"$":"Al"},"lastname":{"$":"Jones"},"street":{"$":"91 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0691"},"firstname":{"$":"Bob"},"lastname":{"$":"Jones"},"street":{"$":"92 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0692"},"firstname":{"$":"Charles"},"lastname":{"$":"Jones"},"street":{"$":"93 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0693"},"firstname":{"$":"David"},"lastname":{"$":"Jones"},"street":{"$":"94 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0694"},"firstname":{"$":"Egon"},"lastname":{"$":"Jones"},"street":{"$":"95 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0695"},"firstname":{"$":"Farbood"},"lastname":{"$":"Jones"},"street":{"$":"96 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0696"},"firstname":{"$":"George"},"lastname":{"$":"Jones"},"street":{"$":"97 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0697"},"firstname":{"$":"Hank"},"lastname":{"$":"Jones"},"street":{"$":"98 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0698"},"firstname":{"$":"Inki"},"lastname":{"$":"Jones"},"street":{"$":"99 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0699"},"firstname":{"$":"James"},"lastname":{"$":"Jones"},"street":{"$":"100 Any St."},"city":{"$":"Anytown"},"state":{"$":"CT"},"zip":{"$":"22000"}},{"id":{"$":"0700"},"firstname":{"$":"Al"},"lastname":{"$":"Aranow"},"street":{"$":"1 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0701"},"firstname":{"$":"Bob"},"lastname":{"$":"Aranow"},"street":{"$":"2 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0702"},"firstname":{"$":"Charles"},"lastname":{"$":"Aranow"},"street":{"$":"3 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0703"},"firstname":{"$":"David"},"lastname":{"$":"Aranow"},"street":{"$":"4 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0704"},"firstname":{"$":"Egon"},"lastname":{"$":"Aranow"},"street":{"$":"5 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0705"},"firstname":{"$":"Farbood"},"lastname":{"$":"Aranow"},"street":{"$":"6 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0706"},"firstname":{"$":"George"},"lastname":{"$":"Aranow"},"street":{"$":"7 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0707"},"firstname":{"$":"Hank"},"lastname":{"$":"Aranow"},"street":{"$":"8 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0708"},"firstname":{"$":"Inki"},"lastname":{"$":"Aranow"},"street":{"$":"9 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0709"},"firstname":{"$":"James"},"lastname":{"$":"Aranow"},"street":{"$":"10 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0710"},"firstname":{"$":"Al"},"lastname":{"$":"Barker"},"street":{"$":"11 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0711"},"firstname":{"$":"Bob"},"lastname":{"$":"Barker"},"street":{"$":"12 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0712"},"firstname":{"$":"Charles"},"lastname":{"$":"Barker"},"street":{"$":"13 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0713"},"firstname":{"$":"David"},"lastname":{"$":"Barker"},"street":{"$":"14 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0714"},"firstname":{"$":"Egon"},"lastname":{"$":"Barker"},"street":{"$":"15 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0715"},"firstname":{"$":"Farbood"},"lastname":{"$":"Barker"},"street":{"$":"16 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0716"},"firstname":{"$":"George"},"lastname":{"$":"Barker"},"street":{"$":"17 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0717"},"firstname":{"$":"Hank"},"lastname":{"$":"Barker"},"street":{"$":"18 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0718"},"firstname":{"$":"Inki"},"lastname":{"$":"Barker"},"street":{"$":"19 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0719"},"firstname":{"$":"James"},"lastname":{"$":"Barker"},"street":{"$":"20 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0720"},"firstname":{"$":"Al"},"lastname":{"$":"Corsetti"},"street":{"$":"21 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0721"},"firstname":{"$":"Bob"},"lastname":{"$":"Corsetti"},"street":{"$":"22 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0722"},"firstname":{"$":"Charles"},"lastname":{"$":"Corsetti"},"street":{"$":"23 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0723"},"firstname":{"$":"David"},"lastname":{"$":"Corsetti"},"street":{"$":"24 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0724"},"firstname":{"$":"Egon"},"lastname":{"$":"Corsetti"},"street":{"$":"25 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0725"},"firstname":{"$":"Farbood"},"lastname":{"$":"Corsetti"},"street":{"$":"26 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0726"},"firstname":{"$":"George"},"lastname":{"$":"Corsetti"},"street":{"$":"27 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0727"},"firstname":{"$":"Hank"},"lastname":{"$":"Corsetti"},"street":{"$":"28 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0728"},"firstname":{"$":"Inki"},"lastname":{"$":"Corsetti"},"street":{"$":"29 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0729"},"firstname":{"$":"James"},"lastname":{"$":"Corsetti"},"street":{"$":"30 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0730"},"firstname":{"$":"Al"},"lastname":{"$":"Dershowitz"},"street":{"$":"31 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0731"},"firstname":{"$":"Bob"},"lastname":{"$":"Dershowitz"},"street":{"$":"32 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0732"},"firstname":{"$":"Charles"},"lastname":{"$":"Dershowitz"},"street":{"$":"33 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0733"},"firstname":{"$":"David"},"lastname":{"$":"Dershowitz"},"street":{"$":"34 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0734"},"firstname":{"$":"Egon"},"lastname":{"$":"Dershowitz"},"street":{"$":"35 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0735"},"firstname":{"$":"Farbood"},"lastname":{"$":"Dershowitz"},"street":{"$":"36 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0736"},"firstname":{"$":"George"},"lastname":{"$":"Dershowitz"},"street":{"$":"37 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0737"},"firstname":{"$":"Hank"},"lastname":{"$":"Dershowitz"},"street":{"$":"38 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0738"},"firstname":{"$":"Inki"},"lastname":{"$":"Dershowitz"},"street":{"$":"39 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0739"},"firstname":{"$":"James"},"lastname":{"$":"Dershowitz"},"street":{"$":"40 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0740"},"firstname":{"$":"Al"},"lastname":{"$":"Engleman"},"street":{"$":"41 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0741"},"firstname":{"$":"Bob"},"lastname":{"$":"Engleman"},"street":{"$":"42 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0742"},"firstname":{"$":"Charles"},"lastname":{"$":"Engleman"},"street":{"$":"43 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0743"},"firstname":{"$":"David"},"lastname":{"$":"Engleman"},"street":{"$":"44 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0744"},"firstname":{"$":"Egon"},"lastname":{"$":"Engleman"},"street":{"$":"45 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0745"},"firstname":{"$":"Farbood"},"lastname":{"$":"Engleman"},"street":{"$":"46 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0746"},"firstname":{"$":"George"},"lastname":{"$":"Engleman"},"street":{"$":"47 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0747"},"firstname":{"$":"Hank"},"lastname":{"$":"Engleman"},"street":{"$":"48 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0748"},"firstname":{"$":"Inki"},"lastname":{"$":"Engleman"},"street":{"$":"49 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0749"},"firstname":{"$":"James"},"lastname":{"$":"Engleman"},"street":{"$":"50 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0750"},"firstname":{"$":"Al"},"lastname":{"$":"Franklin"},"street":{"$":"51 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0751"},"firstname":{"$":"Bob"},"lastname":{"$":"Franklin"},"street":{"$":"52 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0752"},"firstname":{"$":"Charles"},"lastname":{"$":"Franklin"},"street":{"$":"53 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0753"},"firstname":{"$":"David"},"lastname":{"$":"Franklin"},"street":{"$":"54 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0754"},"firstname":{"$":"Egon"},"lastname":{"$":"Franklin"},"street":{"$":"55 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0755"},"firstname":{"$":"Farbood"},"lastname":{"$":"Franklin"},"street":{"$":"56 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0756"},"firstname":{"$":"George"},"lastname":{"$":"Franklin"},"street":{"$":"57 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0757"},"firstname":{"$":"Hank"},"lastname":{"$":"Franklin"},"street":{"$":"58 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0758"},"firstname":{"$":"Inki"},"lastname":{"$":"Franklin"},"street":{"$":"59 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0759"},"firstname":{"$":"James"},"lastname":{"$":"Franklin"},"street":{"$":"60 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0760"},"firstname":{"$":"Al"},"lastname":{"$":"Grice"},"street":{"$":"61 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0761"},"firstname":{"$":"Bob"},"lastname":{"$":"Grice"},"street":{"$":"62 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0762"},"firstname":{"$":"Charles"},"lastname":{"$":"Grice"},"street":{"$":"63 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0763"},"firstname":{"$":"David"},"lastname":{"$":"Grice"},"street":{"$":"64 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0764"},"firstname":{"$":"Egon"},"lastname":{"$":"Grice"},"street":{"$":"65 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0765"},"firstname":{"$":"Farbood"},"lastname":{"$":"Grice"},"street":{"$":"66 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0766"},"firstname":{"$":"George"},"lastname":{"$":"Grice"},"street":{"$":"67 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0767"},"firstname":{"$":"Hank"},"lastname":{"$":"Grice"},"street":{"$":"68 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0768"},"firstname":{"$":"Inki"},"lastname":{"$":"Grice"},"street":{"$":"69 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0769"},"firstname":{"$":"James"},"lastname":{"$":"Grice"},"street":{"$":"70 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0770"},"firstname":{"$":"Al"},"lastname":{"$":"Haverford"},"street":{"$":"71 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0771"},"firstname":{"$":"Bob"},"lastname":{"$":"Haverford"},"street":{"$":"72 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0772"},"firstname":{"$":"Charles"},"lastname":{"$":"Haverford"},"street":{"$":"73 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0773"},"firstname":{"$":"David"},"lastname":{"$":"Haverford"},"street":{"$":"74 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0774"},"firstname":{"$":"Egon"},"lastname":{"$":"Haverford"},"street":{"$":"75 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0775"},"firstname":{"$":"Farbood"},"lastname":{"$":"Haverford"},"street":{"$":"76 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0776"},"firstname":{"$":"George"},"lastname":{"$":"Haverford"},"street":{"$":"77 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0777"},"firstname":{"$":"Hank"},"lastname":{"$":"Haverford"},"street":{"$":"78 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0778"},"firstname":{"$":"Inki"},"lastname":{"$":"Haverford"},"street":{"$":"79 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0779"},"firstname":{"$":"James"},"lastname":{"$":"Haverford"},"street":{"$":"80 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0780"},"firstname":{"$":"Al"},"lastname":{"$":"Ilvedson"},"street":{"$":"81 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0781"},"firstname":{"$":"Bob"},"lastname":{"$":"Ilvedson"},"street":{"$":"82 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0782"},"firstname":{"$":"Charles"},"lastname":{"$":"Ilvedson"},"street":{"$":"83 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0783"},"firstname":{"$":"David"},"lastname":{"$":"Ilvedson"},"street":{"$":"84 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0784"},"firstname":{"$":"Egon"},"lastname":{"$":"Ilvedson"},"street":{"$":"85 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0785"},"firstname":{"$":"Farbood"},"lastname":{"$":"Ilvedson"},"street":{"$":"86 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0786"},"firstname":{"$":"George"},"lastname":{"$":"Ilvedson"},"street":{"$":"87 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0787"},"firstname":{"$":"Hank"},"lastname":{"$":"Ilvedson"},"street":{"$":"88 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0788"},"firstname":{"$":"Inki"},"lastname":{"$":"Ilvedson"},"street":{"$":"89 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0789"},"firstname":{"$":"James"},"lastname":{"$":"Ilvedson"},"street":{"$":"90 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0790"},"firstname":{"$":"Al"},"lastname":{"$":"Jones"},"street":{"$":"91 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0791"},"firstname":{"$":"Bob"},"lastname":{"$":"Jones"},"street":{"$":"92 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0792"},"firstname":{"$":"Charles"},"lastname":{"$":"Jones"},"street":{"$":"93 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0793"},"firstname":{"$":"David"},"lastname":{"$":"Jones"},"street":{"$":"94 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0794"},"firstname":{"$":"Egon"},"lastname":{"$":"Jones"},"street":{"$":"95 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0795"},"firstname":{"$":"Farbood"},"lastname":{"$":"Jones"},"street":{"$":"96 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0796"},"firstname":{"$":"George"},"lastname":{"$":"Jones"},"street":{"$":"97 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0797"},"firstname":{"$":"Hank"},"lastname":{"$":"Jones"},"street":{"$":"98 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0798"},"firstname":{"$":"Inki"},"lastname":{"$":"Jones"},"street":{"$":"99 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0799"},"firstname":{"$":"James"},"lastname":{"$":"Jones"},"street":{"$":"100 Any St."},"city":{"$":"Anytown"},"state":{"$":"DE"},"zip":{"$":"22000"}},{"id":{"$":"0800"},"firstname":{"$":"Al"},"lastname":{"$":"Aranow"},"street":{"$":"1 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0801"},"firstname":{"$":"Bob"},"lastname":{"$":"Aranow"},"street":{"$":"2 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0802"},"firstname":{"$":"Charles"},"lastname":{"$":"Aranow"},"street":{"$":"3 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0803"},"firstname":{"$":"David"},"lastname":{"$":"Aranow"},"street":{"$":"4 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0804"},"firstname":{"$":"Egon"},"lastname":{"$":"Aranow"},"street":{"$":"5 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0805"},"firstname":{"$":"Farbood"},"lastname":{"$":"Aranow"},"street":{"$":"6 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0806"},"firstname":{"$":"George"},"lastname":{"$":"Aranow"},"street":{"$":"7 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0807"},"firstname":{"$":"Hank"},"lastname":{"$":"Aranow"},"street":{"$":"8 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0808"},"firstname":{"$":"Inki"},"lastname":{"$":"Aranow"},"street":{"$":"9 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0809"},"firstname":{"$":"James"},"lastname":{"$":"Aranow"},"street":{"$":"10 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0810"},"firstname":{"$":"Al"},"lastname":{"$":"Barker"},"street":{"$":"11 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0811"},"firstname":{"$":"Bob"},"lastname":{"$":"Barker"},"street":{"$":"12 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0812"},"firstname":{"$":"Charles"},"lastname":{"$":"Barker"},"street":{"$":"13 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0813"},"firstname":{"$":"David"},"lastname":{"$":"Barker"},"street":{"$":"14 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0814"},"firstname":{"$":"Egon"},"lastname":{"$":"Barker"},"street":{"$":"15 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0815"},"firstname":{"$":"Farbood"},"lastname":{"$":"Barker"},"street":{"$":"16 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0816"},"firstname":{"$":"George"},"lastname":{"$":"Barker"},"street":{"$":"17 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0817"},"firstname":{"$":"Hank"},"lastname":{"$":"Barker"},"street":{"$":"18 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0818"},"firstname":{"$":"Inki"},"lastname":{"$":"Barker"},"street":{"$":"19 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0819"},"firstname":{"$":"James"},"lastname":{"$":"Barker"},"street":{"$":"20 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0820"},"firstname":{"$":"Al"},"lastname":{"$":"Corsetti"},"street":{"$":"21 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0821"},"firstname":{"$":"Bob"},"lastname":{"$":"Corsetti"},"street":{"$":"22 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0822"},"firstname":{"$":"Charles"},"lastname":{"$":"Corsetti"},"street":{"$":"23 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0823"},"firstname":{"$":"David"},"lastname":{"$":"Corsetti"},"street":{"$":"24 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0824"},"firstname":{"$":"Egon"},"lastname":{"$":"Corsetti"},"street":{"$":"25 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0825"},"firstname":{"$":"Farbood"},"lastname":{"$":"Corsetti"},"street":{"$":"26 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0826"},"firstname":{"$":"George"},"lastname":{"$":"Corsetti"},"street":{"$":"27 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0827"},"firstname":{"$":"Hank"},"lastname":{"$":"Corsetti"},"street":{"$":"28 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0828"},"firstname":{"$":"Inki"},"lastname":{"$":"Corsetti"},"street":{"$":"29 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0829"},"firstname":{"$":"James"},"lastname":{"$":"Corsetti"},"street":{"$":"30 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0830"},"firstname":{"$":"Al"},"lastname":{"$":"Dershowitz"},"street":{"$":"31 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0831"},"firstname":{"$":"Bob"},"lastname":{"$":"Dershowitz"},"street":{"$":"32 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0832"},"firstname":{"$":"Charles"},"lastname":{"$":"Dershowitz"},"street":{"$":"33 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0833"},"firstname":{"$":"David"},"lastname":{"$":"Dershowitz"},"street":{"$":"34 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0834"},"firstname":{"$":"Egon"},"lastname":{"$":"Dershowitz"},"street":{"$":"35 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0835"},"firstname":{"$":"Farbood"},"lastname":{"$":"Dershowitz"},"street":{"$":"36 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0836"},"firstname":{"$":"George"},"lastname":{"$":"Dershowitz"},"street":{"$":"37 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0837"},"firstname":{"$":"Hank"},"lastname":{"$":"Dershowitz"},"street":{"$":"38 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0838"},"firstname":{"$":"Inki"},"lastname":{"$":"Dershowitz"},"street":{"$":"39 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0839"},"firstname":{"$":"James"},"lastname":{"$":"Dershowitz"},"street":{"$":"40 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0840"},"firstname":{"$":"Al"},"lastname":{"$":"Engleman"},"street":{"$":"41 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0841"},"firstname":{"$":"Bob"},"lastname":{"$":"Engleman"},"street":{"$":"42 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0842"},"firstname":{"$":"Charles"},"lastname":{"$":"Engleman"},"street":{"$":"43 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0843"},"firstname":{"$":"David"},"lastname":{"$":"Engleman"},"street":{"$":"44 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0844"},"firstname":{"$":"Egon"},"lastname":{"$":"Engleman"},"street":{"$":"45 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0845"},"firstname":{"$":"Farbood"},"lastname":{"$":"Engleman"},"street":{"$":"46 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0846"},"firstname":{"$":"George"},"lastname":{"$":"Engleman"},"street":{"$":"47 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0847"},"firstname":{"$":"Hank"},"lastname":{"$":"Engleman"},"street":{"$":"48 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0848"},"firstname":{"$":"Inki"},"lastname":{"$":"Engleman"},"street":{"$":"49 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0849"},"firstname":{"$":"James"},"lastname":{"$":"Engleman"},"street":{"$":"50 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0850"},"firstname":{"$":"Al"},"lastname":{"$":"Franklin"},"street":{"$":"51 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0851"},"firstname":{"$":"Bob"},"lastname":{"$":"Franklin"},"street":{"$":"52 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0852"},"firstname":{"$":"Charles"},"lastname":{"$":"Franklin"},"street":{"$":"53 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0853"},"firstname":{"$":"David"},"lastname":{"$":"Franklin"},"street":{"$":"54 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0854"},"firstname":{"$":"Egon"},"lastname":{"$":"Franklin"},"street":{"$":"55 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0855"},"firstname":{"$":"Farbood"},"lastname":{"$":"Franklin"},"street":{"$":"56 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0856"},"firstname":{"$":"George"},"lastname":{"$":"Franklin"},"street":{"$":"57 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0857"},"firstname":{"$":"Hank"},"lastname":{"$":"Franklin"},"street":{"$":"58 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0858"},"firstname":{"$":"Inki"},"lastname":{"$":"Franklin"},"street":{"$":"59 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0859"},"firstname":{"$":"James"},"lastname":{"$":"Franklin"},"street":{"$":"60 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0860"},"firstname":{"$":"Al"},"lastname":{"$":"Grice"},"street":{"$":"61 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0861"},"firstname":{"$":"Bob"},"lastname":{"$":"Grice"},"street":{"$":"62 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0862"},"firstname":{"$":"Charles"},"lastname":{"$":"Grice"},"street":{"$":"63 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0863"},"firstname":{"$":"David"},"lastname":{"$":"Grice"},"street":{"$":"64 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0864"},"firstname":{"$":"Egon"},"lastname":{"$":"Grice"},"street":{"$":"65 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0865"},"firstname":{"$":"Farbood"},"lastname":{"$":"Grice"},"street":{"$":"66 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0866"},"firstname":{"$":"George"},"lastname":{"$":"Grice"},"street":{"$":"67 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0867"},"firstname":{"$":"Hank"},"lastname":{"$":"Grice"},"street":{"$":"68 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0868"},"firstname":{"$":"Inki"},"lastname":{"$":"Grice"},"street":{"$":"69 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0869"},"firstname":{"$":"James"},"lastname":{"$":"Grice"},"street":{"$":"70 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0870"},"firstname":{"$":"Al"},"lastname":{"$":"Haverford"},"street":{"$":"71 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0871"},"firstname":{"$":"Bob"},"lastname":{"$":"Haverford"},"street":{"$":"72 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0872"},"firstname":{"$":"Charles"},"lastname":{"$":"Haverford"},"street":{"$":"73 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0873"},"firstname":{"$":"David"},"lastname":{"$":"Haverford"},"street":{"$":"74 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0874"},"firstname":{"$":"Egon"},"lastname":{"$":"Haverford"},"street":{"$":"75 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0875"},"firstname":{"$":"Farbood"},"lastname":{"$":"Haverford"},"street":{"$":"76 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0876"},"firstname":{"$":"George"},"lastname":{"$":"Haverford"},"street":{"$":"77 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0877"},"firstname":{"$":"Hank"},"lastname":{"$":"Haverford"},"street":{"$":"78 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0878"},"firstname":{"$":"Inki"},"lastname":{"$":"Haverford"},"street":{"$":"79 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0879"},"firstname":{"$":"James"},"lastname":{"$":"Haverford"},"street":{"$":"80 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0880"},"firstname":{"$":"Al"},"lastname":{"$":"Ilvedson"},"street":{"$":"81 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0881"},"firstname":{"$":"Bob"},"lastname":{"$":"Ilvedson"},"street":{"$":"82 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0882"},"firstname":{"$":"Charles"},"lastname":{"$":"Ilvedson"},"street":{"$":"83 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0883"},"firstname":{"$":"David"},"lastname":{"$":"Ilvedson"},"street":{"$":"84 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0884"},"firstname":{"$":"Egon"},"lastname":{"$":"Ilvedson"},"street":{"$":"85 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0885"},"firstname":{"$":"Farbood"},"lastname":{"$":"Ilvedson"},"street":{"$":"86 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0886"},"firstname":{"$":"George"},"lastname":{"$":"Ilvedson"},"street":{"$":"87 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0887"},"firstname":{"$":"Hank"},"lastname":{"$":"Ilvedson"},"street":{"$":"88 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0888"},"firstname":{"$":"Inki"},"lastname":{"$":"Ilvedson"},"street":{"$":"89 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0889"},"firstname":{"$":"James"},"lastname":{"$":"Ilvedson"},"street":{"$":"90 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0890"},"firstname":{"$":"Al"},"lastname":{"$":"Jones"},"street":{"$":"91 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0891"},"firstname":{"$":"Bob"},"lastname":{"$":"Jones"},"street":{"$":"92 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0892"},"firstname":{"$":"Charles"},"lastname":{"$":"Jones"},"street":{"$":"93 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0893"},"firstname":{"$":"David"},"lastname":{"$":"Jones"},"street":{"$":"94 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0894"},"firstname":{"$":"Egon"},"lastname":{"$":"Jones"},"street":{"$":"95 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0895"},"firstname":{"$":"Farbood"},"lastname":{"$":"Jones"},"street":{"$":"96 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0896"},"firstname":{"$":"George"},"lastname":{"$":"Jones"},"street":{"$":"97 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0897"},"firstname":{"$":"Hank"},"lastname":{"$":"Jones"},"street":{"$":"98 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0898"},"firstname":{"$":"Inki"},"lastname":{"$":"Jones"},"street":{"$":"99 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0899"},"firstname":{"$":"James"},"lastname":{"$":"Jones"},"street":{"$":"100 Any St."},"city":{"$":"Anytown"},"state":{"$":"FL"},"zip":{"$":"22000"}},{"id":{"$":"0900"},"firstname":{"$":"Al"},"lastname":{"$":"Aranow"},"street":{"$":"1 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0901"},"firstname":{"$":"Bob"},"lastname":{"$":"Aranow"},"street":{"$":"2 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0902"},"firstname":{"$":"Charles"},"lastname":{"$":"Aranow"},"street":{"$":"3 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0903"},"firstname":{"$":"David"},"lastname":{"$":"Aranow"},"street":{"$":"4 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0904"},"firstname":{"$":"Egon"},"lastname":{"$":"Aranow"},"street":{"$":"5 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0905"},"firstname":{"$":"Farbood"},"lastname":{"$":"Aranow"},"street":{"$":"6 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0906"},"firstname":{"$":"George"},"lastname":{"$":"Aranow"},"street":{"$":"7 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0907"},"firstname":{"$":"Hank"},"lastname":{"$":"Aranow"},"street":{"$":"8 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0908"},"firstname":{"$":"Inki"},"lastname":{"$":"Aranow"},"street":{"$":"9 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0909"},"firstname":{"$":"James"},"lastname":{"$":"Aranow"},"street":{"$":"10 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0910"},"firstname":{"$":"Al"},"lastname":{"$":"Barker"},"street":{"$":"11 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0911"},"firstname":{"$":"Bob"},"lastname":{"$":"Barker"},"street":{"$":"12 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0912"},"firstname":{"$":"Charles"},"lastname":{"$":"Barker"},"street":{"$":"13 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0913"},"firstname":{"$":"David"},"lastname":{"$":"Barker"},"street":{"$":"14 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0914"},"firstname":{"$":"Egon"},"lastname":{"$":"Barker"},"street":{"$":"15 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0915"},"firstname":{"$":"Farbood"},"lastname":{"$":"Barker"},"street":{"$":"16 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0916"},"firstname":{"$":"George"},"lastname":{"$":"Barker"},"street":{"$":"17 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0917"},"firstname":{"$":"Hank"},"lastname":{"$":"Barker"},"street":{"$":"18 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0918"},"firstname":{"$":"Inki"},"lastname":{"$":"Barker"},"street":{"$":"19 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0919"},"firstname":{"$":"James"},"lastname":{"$":"Barker"},"street":{"$":"20 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0920"},"firstname":{"$":"Al"},"lastname":{"$":"Corsetti"},"street":{"$":"21 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0921"},"firstname":{"$":"Bob"},"lastname":{"$":"Corsetti"},"street":{"$":"22 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0922"},"firstname":{"$":"Charles"},"lastname":{"$":"Corsetti"},"street":{"$":"23 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0923"},"firstname":{"$":"David"},"lastname":{"$":"Corsetti"},"street":{"$":"24 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0924"},"firstname":{"$":"Egon"},"lastname":{"$":"Corsetti"},"street":{"$":"25 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0925"},"firstname":{"$":"Farbood"},"lastname":{"$":"Corsetti"},"street":{"$":"26 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0926"},"firstname":{"$":"George"},"lastname":{"$":"Corsetti"},"street":{"$":"27 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0927"},"firstname":{"$":"Hank"},"lastname":{"$":"Corsetti"},"street":{"$":"28 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0928"},"firstname":{"$":"Inki"},"lastname":{"$":"Corsetti"},"street":{"$":"29 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0929"},"firstname":{"$":"James"},"lastname":{"$":"Corsetti"},"street":{"$":"30 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0930"},"firstname":{"$":"Al"},"lastname":{"$":"Dershowitz"},"street":{"$":"31 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0931"},"firstname":{"$":"Bob"},"lastname":{"$":"Dershowitz"},"street":{"$":"32 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0932"},"firstname":{"$":"Charles"},"lastname":{"$":"Dershowitz"},"street":{"$":"33 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0933"},"firstname":{"$":"David"},"lastname":{"$":"Dershowitz"},"street":{"$":"34 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0934"},"firstname":{"$":"Egon"},"lastname":{"$":"Dershowitz"},"street":{"$":"35 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0935"},"firstname":{"$":"Farbood"},"lastname":{"$":"Dershowitz"},"street":{"$":"36 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0936"},"firstname":{"$":"George"},"lastname":{"$":"Dershowitz"},"street":{"$":"37 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0937"},"firstname":{"$":"Hank"},"lastname":{"$":"Dershowitz"},"street":{"$":"38 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0938"},"firstname":{"$":"Inki"},"lastname":{"$":"Dershowitz"},"street":{"$":"39 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0939"},"firstname":{"$":"James"},"lastname":{"$":"Dershowitz"},"street":{"$":"40 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0940"},"firstname":{"$":"Al"},"lastname":{"$":"Engleman"},"street":{"$":"41 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0941"},"firstname":{"$":"Bob"},"lastname":{"$":"Engleman"},"street":{"$":"42 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0942"},"firstname":{"$":"Charles"},"lastname":{"$":"Engleman"},"street":{"$":"43 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0943"},"firstname":{"$":"David"},"lastname":{"$":"Engleman"},"street":{"$":"44 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0944"},"firstname":{"$":"Egon"},"lastname":{"$":"Engleman"},"street":{"$":"45 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0945"},"firstname":{"$":"Farbood"},"lastname":{"$":"Engleman"},"street":{"$":"46 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0946"},"firstname":{"$":"George"},"lastname":{"$":"Engleman"},"street":{"$":"47 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0947"},"firstname":{"$":"Hank"},"lastname":{"$":"Engleman"},"street":{"$":"48 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0948"},"firstname":{"$":"Inki"},"lastname":{"$":"Engleman"},"street":{"$":"49 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0949"},"firstname":{"$":"James"},"lastname":{"$":"Engleman"},"street":{"$":"50 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0950"},"firstname":{"$":"Al"},"lastname":{"$":"Franklin"},"street":{"$":"51 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0951"},"firstname":{"$":"Bob"},"lastname":{"$":"Franklin"},"street":{"$":"52 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0952"},"firstname":{"$":"Charles"},"lastname":{"$":"Franklin"},"street":{"$":"53 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0953"},"firstname":{"$":"David"},"lastname":{"$":"Franklin"},"street":{"$":"54 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0954"},"firstname":{"$":"Egon"},"lastname":{"$":"Franklin"},"street":{"$":"55 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0955"},"firstname":{"$":"Farbood"},"lastname":{"$":"Franklin"},"street":{"$":"56 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0956"},"firstname":{"$":"George"},"lastname":{"$":"Franklin"},"street":{"$":"57 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0957"},"firstname":{"$":"Hank"},"lastname":{"$":"Franklin"},"street":{"$":"58 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0958"},"firstname":{"$":"Inki"},"lastname":{"$":"Franklin"},"street":{"$":"59 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0959"},"firstname":{"$":"James"},"lastname":{"$":"Franklin"},"street":{"$":"60 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0960"},"firstname":{"$":"Al"},"lastname":{"$":"Grice"},"street":{"$":"61 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0961"},"firstname":{"$":"Bob"},"lastname":{"$":"Grice"},"street":{"$":"62 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0962"},"firstname":{"$":"Charles"},"lastname":{"$":"Grice"},"street":{"$":"63 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0963"},"firstname":{"$":"David"},"lastname":{"$":"Grice"},"street":{"$":"64 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0964"},"firstname":{"$":"Egon"},"lastname":{"$":"Grice"},"street":{"$":"65 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0965"},"firstname":{"$":"Farbood"},"lastname":{"$":"Grice"},"street":{"$":"66 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0966"},"firstname":{"$":"George"},"lastname":{"$":"Grice"},"street":{"$":"67 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0967"},"firstname":{"$":"Hank"},"lastname":{"$":"Grice"},"street":{"$":"68 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0968"},"firstname":{"$":"Inki"},"lastname":{"$":"Grice"},"street":{"$":"69 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0969"},"firstname":{"$":"James"},"lastname":{"$":"Grice"},"street":{"$":"70 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0970"},"firstname":{"$":"Al"},"lastname":{"$":"Haverford"},"street":{"$":"71 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0971"},"firstname":{"$":"Bob"},"lastname":{"$":"Haverford"},"street":{"$":"72 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0972"},"firstname":{"$":"Charles"},"lastname":{"$":"Haverford"},"street":{"$":"73 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0973"},"firstname":{"$":"David"},"lastname":{"$":"Haverford"},"street":{"$":"74 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0974"},"firstname":{"$":"Egon"},"lastname":{"$":"Haverford"},"street":{"$":"75 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0975"},"firstname":{"$":"Farbood"},"lastname":{"$":"Haverford"},"street":{"$":"76 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0976"},"firstname":{"$":"George"},"lastname":{"$":"Haverford"},"street":{"$":"77 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0977"},"firstname":{"$":"Hank"},"lastname":{"$":"Haverford"},"street":{"$":"78 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0978"},"firstname":{"$":"Inki"},"lastname":{"$":"Haverford"},"street":{"$":"79 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0979"},"firstname":{"$":"James"},"lastname":{"$":"Haverford"},"street":{"$":"80 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0980"},"firstname":{"$":"Al"},"lastname":{"$":"Ilvedson"},"street":{"$":"81 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0981"},"firstname":{"$":"Bob"},"lastname":{"$":"Ilvedson"},"street":{"$":"82 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0982"},"firstname":{"$":"Charles"},"lastname":{"$":"Ilvedson"},"street":{"$":"83 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0983"},"firstname":{"$":"David"},"lastname":{"$":"Ilvedson"},"street":{"$":"84 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0984"},"firstname":{"$":"Egon"},"lastname":{"$":"Ilvedson"},"street":{"$":"85 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0985"},"firstname":{"$":"Farbood"},"lastname":{"$":"Ilvedson"},"street":{"$":"86 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0986"},"firstname":{"$":"George"},"lastname":{"$":"Ilvedson"},"street":{"$":"87 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0987"},"firstname":{"$":"Hank"},"lastname":{"$":"Ilvedson"},"street":{"$":"88 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0988"},"firstname":{"$":"Inki"},"lastname":{"$":"Ilvedson"},"street":{"$":"89 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0989"},"firstname":{"$":"James"},"lastname":{"$":"Ilvedson"},"street":{"$":"90 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0990"},"firstname":{"$":"Al"},"lastname":{"$":"Jones"},"street":{"$":"91 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0991"},"firstname":{"$":"Bob"},"lastname":{"$":"Jones"},"street":{"$":"92 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0992"},"firstname":{"$":"Charles"},"lastname":{"$":"Jones"},"street":{"$":"93 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0993"},"firstname":{"$":"David"},"lastname":{"$":"Jones"},"street":{"$":"94 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0994"},"firstname":{"$":"Egon"},"lastname":{"$":"Jones"},"street":{"$":"95 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0995"},"firstname":{"$":"Farbood"},"lastname":{"$":"Jones"},"street":{"$":"96 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0996"},"firstname":{"$":"George"},"lastname":{"$":"Jones"},"street":{"$":"97 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0997"},"firstname":{"$":"Hank"},"lastname":{"$":"Jones"},"street":{"$":"98 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0998"},"firstname":{"$":"Inki"},"lastname":{"$":"Jones"},"street":{"$":"99 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}},{"id":{"$":"0999"},"firstname":{"$":"James"},"lastname":{"$":"Jones"},"street":{"$":"100 Any St."},"city":{"$":"Anytown"},"state":{"$":"GA"},"zip":{"$":"22000"}}]}} diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.dc_simple_with_comments.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.dc_simple_with_comments.json deleted file mode 100644 index 3b79bba..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.dc_simple_with_comments.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "this": "is", // ignore this - "really": "simple", - /* ignore -this -too * / -** // -(/ -******/ - "json": "right?" -} diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.deep_arrays.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.deep_arrays.json deleted file mode 100644 index 82d1b0d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.deep_arrays.json +++ /dev/null @@ -1 +0,0 @@ -[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.difficult_json_c_test_case.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.difficult_json_c_test_case.json deleted file mode 100644 index 6998f55..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.difficult_json_c_test_case.json +++ /dev/null @@ -1 +0,0 @@ -{ "glossary": { "title": "example glossary", "GlossDiv": { "title": "S", "GlossList": [ { "ID": "SGML", "SortAs": "SGML", "GlossTerm": "Standard Generalized Markup Language", "Acronym": "SGML", "Abbrev": "ISO 8879:1986", "GlossDef": "A meta-markup language, used to create markup languages such as DocBook.", "GlossSeeAlso": ["GML", "XML", "markup"] } ] } } } diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.difficult_json_c_test_case_with_comments.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.difficult_json_c_test_case_with_comments.json deleted file mode 100644 index 2463c71..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.difficult_json_c_test_case_with_comments.json +++ /dev/null @@ -1 +0,0 @@ -{ "glossary": { /* you */ "title": /**/ "example glossary", /*should*/"GlossDiv": { "title": /*never*/"S", /*ever*/"GlossList": [ { "ID": "SGML", "SortAs": "SGML", "GlossTerm": "Standard Generalized Markup Language", "Acronym": "SGML", "Abbrev": "ISO 8879:1986", "GlossDef": "A meta-markup language, used to create markup languages such as DocBook.", /*see*/"GlossSeeAlso"/*this*/:/*coming*/[/*out*/"GML"/*of*/,/*the*/"XML"/*parser!*/, "markup"] /*hey*/}/*ho*/]/*hey*/}/*ho*/} } // and the parser won't even get this far, so chill. /* hah! diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.doubles.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.doubles.json deleted file mode 100644 index 626f21c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.doubles.json +++ /dev/null @@ -1 +0,0 @@ -[ 0.1e2, 1e1, 3.141569, 10000000000000e-10] diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.empty_array.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.empty_array.json deleted file mode 100644 index 0637a08..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.empty_array.json +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.empty_string.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.empty_string.json deleted file mode 100644 index e16c76d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.empty_string.json +++ /dev/null @@ -1 +0,0 @@ -"" diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.escaped_bulgarian.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.escaped_bulgarian.json deleted file mode 100644 index 9ce1d1c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.escaped_bulgarian.json +++ /dev/null @@ -1,4 +0,0 @@ -["\u0414\u0430", - "\u041c\u0443", - "\u0415\u0431\u0430", - "\u041c\u0430\u0439\u043a\u0430\u0442\u0430"] diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.escaped_foobar.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.escaped_foobar.json deleted file mode 100644 index 2c0e25f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.escaped_foobar.json +++ /dev/null @@ -1 +0,0 @@ -"\u0066\u006f\u006f\u0062\u0061\u0072" diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.item.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.item.json deleted file mode 100644 index dbf7647..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.item.json +++ /dev/null @@ -1 +0,0 @@ -{"item": {"name": "generated", "cached_tag_list": "", "updated_at": "2009-03-24T05:25:09Z", "updated_by_id": null, "price": 1.99, "delta": false, "cost": 0.597, "account_id": 16, "unit": null, "import_tag": null, "taxable": true, "id": 1, "created_by_id": null, "description": null, "company_id": 0, "sku": "06317-0306", "created_at": "2009-03-24T05:25:09Z", "active": true}} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.json-org-sample1.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.json-org-sample1.json deleted file mode 100644 index dd01f7d..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.json-org-sample1.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "glossary": { - "title": "example glossary", - "GlossDiv": { - "title": "S", - "GlossList": { - "GlossEntry": { - "ID": "SGML", - "SortAs": "SGML", - "GlossTerm": "Standard Generalized Markup Language", - "Acronym": "SGML", - "Abbrev": "ISO 8879:1986", - "GlossDef": { - "para": "A meta-markup language, used to create markup languages such as DocBook.", - "GlossSeeAlso": ["GML", "XML"] - }, - "GlossSee": "markup" - } - } - } - } -} - diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.json-org-sample2.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.json-org-sample2.json deleted file mode 100644 index 5600991..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.json-org-sample2.json +++ /dev/null @@ -1,11 +0,0 @@ -{"menu": { - "id": "file", - "value": "File", - "popup": { - "menuitem": [ - {"value": "New", "onclick": "CreateNewDoc()"}, - {"value": "Open", "onclick": "OpenDoc()"}, - {"value": "Close", "onclick": "CloseDoc()"} - ] - } -}} diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.json-org-sample3.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.json-org-sample3.json deleted file mode 100644 index 64832a6..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.json-org-sample3.json +++ /dev/null @@ -1,26 +0,0 @@ -{"widget": { - "debug": "on", - "window": { - "title": "Sample Konfabulator Widget", - "name": "main_window", - "width": 500, - "height": 500 - }, - "image": { - "src": "Images/Sun.png", - "name": "sun1", - "hOffset": 250, - "vOffset": 250, - "alignment": "center" - }, - "text": { - "data": "Click Here", - "size": 36, - "style": "bold", - "name": "text1", - "hOffset": 250, - "vOffset": 100, - "alignment": "center", - "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" - } -}} diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.json-org-sample4-nows.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.json-org-sample4-nows.json deleted file mode 100644 index 3392be9..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.json-org-sample4-nows.json +++ /dev/null @@ -1,88 +0,0 @@ -{"web-app":{ -"servlet":[ -{ -"servlet-name": "cofaxCDS", -"servlet-class": "org.cofax.cds.CDSServlet", -"init-param": { -"configGlossary:installationAt": "Philadelphia, PA", -"configGlossary:adminEmail": "ksm@pobox.com", -"configGlossary:poweredBy": "Cofax", -"configGlossary:poweredByIcon": "/images/cofax.gif", -"configGlossary:staticPath": "/content/static", -"templateProcessorClass": "org.cofax.WysiwygTemplate", -"templateLoaderClass": "org.cofax.FilesTemplateLoader", -"templatePath": "templates", -"templateOverridePath": "", -"defaultListTemplate": "listTemplate.htm", -"defaultFileTemplate": "articleTemplate.htm", -"useJSP": false, -"jspListTemplate": "listTemplate.jsp", -"jspFileTemplate": "articleTemplate.jsp", -"cachePackageTagsTrack": 200, -"cachePackageTagsStore": 200, -"cachePackageTagsRefresh": 60, -"cacheTemplatesTrack": 100, -"cacheTemplatesStore": 50, -"cacheTemplatesRefresh": 15, -"cachePagesTrack": 200, -"cachePagesStore": 100, -"cachePagesRefresh": 10, -"cachePagesDirtyRead": 10, -"searchEngineListTemplate": "forSearchEnginesList.htm", -"searchEngineFileTemplate": "forSearchEngines.htm", -"searchEngineRobotsDb": "WEB-INF/robots.db", -"useDataStore": true, -"dataStoreClass": "org.cofax.SqlDataStore", -"redirectionClass": "org.cofax.SqlRedirection", -"dataStoreName": "cofax", -"dataStoreDriver": "com.microsoft.jdbc.sqlserver.SQLServerDriver", -"dataStoreUrl": "jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon", -"dataStoreUser": "sa", -"dataStorePassword": "dataStoreTestQuery", -"dataStoreTestQuery": "SET NOCOUNT ON;select test='test';", -"dataStoreLogFile": "/usr/local/tomcat/logs/datastore.log", -"dataStoreInitConns": 10, -"dataStoreMaxConns": 100, -"dataStoreConnUsageLimit": 100, -"dataStoreLogLevel": "debug", -"maxUrlLength": 500}}, -{ -"servlet-name": "cofaxEmail", -"servlet-class": "org.cofax.cds.EmailServlet", -"init-param": { -"mailHost": "mail1", -"mailHostOverride": "mail2"}}, -{ -"servlet-name": "cofaxAdmin", -"servlet-class": "org.cofax.cds.AdminServlet"}, - -{ -"servlet-name": "fileServlet", -"servlet-class": "org.cofax.cds.FileServlet"}, -{ -"servlet-name": "cofaxTools", -"servlet-class": "org.cofax.cms.CofaxToolsServlet", -"init-param": { -"templatePath": "toolstemplates/", -"log": 1, -"logLocation": "/usr/local/tomcat/logs/CofaxTools.log", -"logMaxSize": "", -"dataLog": 1, -"dataLogLocation": "/usr/local/tomcat/logs/dataLog.log", -"dataLogMaxSize": "", -"removePageCache": "/content/admin/remove?cache=pages&id=", -"removeTemplateCache": "/content/admin/remove?cache=templates&id=", -"fileTransferFolder": "/usr/local/tomcat/webapps/content/fileTransferFolder", -"lookInContext": 1, -"adminGroupID": 4, -"betaServer": true}}], -"servlet-mapping": { -"cofaxCDS": "/", -"cofaxEmail": "/cofaxutil/aemail/*", -"cofaxAdmin": "/admin/*", -"fileServlet": "/static/*", -"cofaxTools": "/tools/*"}, -"taglib": { -"taglib-uri": "cofax.tld", -"taglib-location": "/WEB-INF/tlds/cofax.tld"} -}} diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.json-org-sample4.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.json-org-sample4.json deleted file mode 100644 index d5a8b35..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.json-org-sample4.json +++ /dev/null @@ -1,89 +0,0 @@ -{"web-app": { - "servlet": [ - { - "servlet-name": "cofaxCDS", - "servlet-class": "org.cofax.cds.CDSServlet", - "init-param": { - "configGlossary:installationAt": "Philadelphia, PA", - "configGlossary:adminEmail": "ksm@pobox.com", - "configGlossary:poweredBy": "Cofax", - "configGlossary:poweredByIcon": "/images/cofax.gif", - "configGlossary:staticPath": "/content/static", - "templateProcessorClass": "org.cofax.WysiwygTemplate", - "templateLoaderClass": "org.cofax.FilesTemplateLoader", - "templatePath": "templates", - "templateOverridePath": "", - "defaultListTemplate": "listTemplate.htm", - "defaultFileTemplate": "articleTemplate.htm", - "useJSP": false, - "jspListTemplate": "listTemplate.jsp", - "jspFileTemplate": "articleTemplate.jsp", - "cachePackageTagsTrack": 200, - "cachePackageTagsStore": 200, - "cachePackageTagsRefresh": 60, - "cacheTemplatesTrack": 100, - "cacheTemplatesStore": 50, - "cacheTemplatesRefresh": 15, - "cachePagesTrack": 200, - "cachePagesStore": 100, - "cachePagesRefresh": 10, - "cachePagesDirtyRead": 10, - "searchEngineListTemplate": "forSearchEnginesList.htm", - "searchEngineFileTemplate": "forSearchEngines.htm", - "searchEngineRobotsDb": "WEB-INF/robots.db", - "useDataStore": true, - "dataStoreClass": "org.cofax.SqlDataStore", - "redirectionClass": "org.cofax.SqlRedirection", - "dataStoreName": "cofax", - "dataStoreDriver": "com.microsoft.jdbc.sqlserver.SQLServerDriver", - "dataStoreUrl": "jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon", - "dataStoreUser": "sa", - "dataStorePassword": "dataStoreTestQuery", - "dataStoreTestQuery": "SET NOCOUNT ON;select test='test';", - "dataStoreLogFile": "/usr/local/tomcat/logs/datastore.log", - "dataStoreInitConns": 10, - "dataStoreMaxConns": 100, - "dataStoreConnUsageLimit": 100, - "dataStoreLogLevel": "debug", - "maxUrlLength": 500}}, - { - "servlet-name": "cofaxEmail", - "servlet-class": "org.cofax.cds.EmailServlet", - "init-param": { - "mailHost": "mail1", - "mailHostOverride": "mail2"}}, - { - "servlet-name": "cofaxAdmin", - "servlet-class": "org.cofax.cds.AdminServlet"}, - - { - "servlet-name": "fileServlet", - "servlet-class": "org.cofax.cds.FileServlet"}, - { - "servlet-name": "cofaxTools", - "servlet-class": "org.cofax.cms.CofaxToolsServlet", - "init-param": { - "templatePath": "toolstemplates/", - "log": 1, - "logLocation": "/usr/local/tomcat/logs/CofaxTools.log", - "logMaxSize": "", - "dataLog": 1, - "dataLogLocation": "/usr/local/tomcat/logs/dataLog.log", - "dataLogMaxSize": "", - "removePageCache": "/content/admin/remove?cache=pages&id=", - "removeTemplateCache": "/content/admin/remove?cache=templates&id=", - "fileTransferFolder": "/usr/local/tomcat/webapps/content/fileTransferFolder", - "lookInContext": 1, - "adminGroupID": 4, - "betaServer": true}}], - "servlet-mapping": { - "cofaxCDS": "/", - "cofaxEmail": "/cofaxutil/aemail/*", - "cofaxAdmin": "/admin/*", - "fileServlet": "/static/*", - "cofaxTools": "/tools/*"}, - - "taglib": { - "taglib-uri": "cofax.tld", - "taglib-location": "/WEB-INF/tlds/cofax.tld"} -}} diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.json-org-sample5.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.json-org-sample5.json deleted file mode 100644 index 49980ca..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.json-org-sample5.json +++ /dev/null @@ -1,27 +0,0 @@ -{"menu": { - "header": "SVG Viewer", - "items": [ - {"id": "Open"}, - {"id": "OpenNew", "label": "Open New"}, - null, - {"id": "ZoomIn", "label": "Zoom In"}, - {"id": "ZoomOut", "label": "Zoom Out"}, - {"id": "OriginalView", "label": "Original View"}, - null, - {"id": "Quality"}, - {"id": "Pause"}, - {"id": "Mute"}, - null, - {"id": "Find", "label": "Find..."}, - {"id": "FindAgain", "label": "Find Again"}, - {"id": "Copy"}, - {"id": "CopyAgain", "label": "Copy Again"}, - {"id": "CopySVG", "label": "Copy SVG"}, - {"id": "ViewSVG", "label": "View SVG"}, - {"id": "ViewSource", "label": "View Source"}, - {"id": "SaveAs", "label": "Save As"}, - null, - {"id": "Help"}, - {"id": "About", "label": "About Adobe CVG Viewer..."} - ] -}} diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.map-spain.xml.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.map-spain.xml.json deleted file mode 100644 index faa1281..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.map-spain.xml.json +++ /dev/null @@ -1 +0,0 @@ -{"svg":{"svg":{"defs":{"font":[{"font-face":{"@id":"Symbol","@font-variant":"normal","@font-weight":"400","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"missing-glyph":{"@horiz-adv-x":"500","@d":"M63 0V800H438V0H63ZM125 63H375V738H125V63Z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"glyph":{"path":{"@d":"M51 3688l0 5 -40 20 40 19 0 5 -48 -23 0 -3 48 -23zm-48 55l48 0 0 5 -48 0 0 -5z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"163","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@id":"FontID5","@horiz-adv-x":"1000","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"font-face":{"@id":"Humnst777_Lt_BT","@font-variant":"normal","@font-style":"italic","@font-weight":"400","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"missing-glyph":{"@horiz-adv-x":"500","@d":"M63 0V800H438V0H63ZM125 63H375V738H125V63Z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"glyph":[{"path":{"@d":"M5 3698l41 0 -2 9 -41 0 2 -9z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"45","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M15 3632l54 0 0 10 -43 -1 0 42 41 0 0 10 -41 0 0 55 -11 0 0 -116z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"70","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M15 3632l17 0 39 95c0,2 1,3 1,5 1,2 1,4 1,6 1,-2 1,-4 1,-5 1,-2 1,-3 2,-5l41 -96 16 0 0 116 -10 0 0 -98c0,0 -1,0 -1,-1 0,-1 0,-1 0,-2 0,-1 0,-2 1,-3 0,-1 0,-2 0,-4 -1,3 -2,6 -3,8 0,1 0,1 0,1l-42 99 -10 0 -41 -99c0,-1 -1,-3 -2,-6 0,-1 0,-2 0,-3 0,2 0,4 0,7 0,2 0,3 0,3l0 98 -10 0 0 -116z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"77","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M101 3677c0,-12 -3,-21 -9,-28 -6,-6 -14,-10 -24,-10 -6,0 -12,2 -18,5 -6,2 -11,7 -15,12 -5,6 -9,13 -11,21 -3,8 -5,17 -5,25 0,12 3,21 9,28 6,7 14,10 24,10 7,0 13,-1 19,-4 6,-3 11,-8 16,-15 4,-5 8,-12 10,-20 3,-8 4,-16 4,-24zm-32 -47c13,0 24,4 32,13 8,8 11,19 11,33 0,8 -1,16 -3,24 -2,8 -5,15 -9,21 -6,9 -13,17 -21,22 -8,5 -17,7 -27,7 -14,0 -24,-4 -32,-13 -8,-9 -12,-20 -12,-35 0,-10 2,-20 5,-30 4,-10 10,-18 16,-25 5,-5 11,-9 18,-12 7,-3 14,-5 22,-5z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"79","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M68 3642l-39 65 50 0 -11 -65zm-4 -10l12 0 23 116 -11 0 -7 -31 -58 0 -19 31 -12 0 72 -116z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"65","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M26 3642l0 47 12 0c9,0 16,-2 21,-7 6,-4 8,-10 8,-17 0,-7 -2,-13 -7,-17 -5,-4 -11,-6 -19,-6l-15 0zm-11 -10l25 0c12,0 22,3 29,9 6,5 10,13 10,24 0,10 -4,19 -11,25 -7,5 -17,8 -30,8l-12 0 0 50 -11 0 0 -116z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"80","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M44 3672c-8,0 -13,3 -18,9 -4,6 -6,14 -6,24 0,11 2,19 6,25 5,6 11,9 18,9 8,0 14,-3 18,-9 5,-6 7,-14 7,-24 0,-11 -2,-19 -7,-25 -4,-6 -10,-9 -18,-9zm26 9l0 -16 10 0 0 74c0,15 -3,27 -10,34 -6,8 -15,12 -28,12 -4,0 -9,-1 -14,-2 -4,0 -8,-2 -12,-3l1 -11c4,2 8,4 12,5 4,1 9,1 13,1 9,0 16,-3 21,-9 5,-6 7,-14 7,-25l0 -11c-3,6 -7,11 -12,14 -4,3 -10,4 -16,4 -10,0 -18,-4 -24,-11 -6,-8 -9,-18 -9,-31 0,-13 3,-24 9,-31 6,-8 14,-12 25,-12 6,0 11,2 16,5 5,3 9,7 11,13z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"103","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M15 3624l10 0 0 73 37 -32 13 0 -40 35 45 48 -14 0 -41 -44 0 44 -10 0 0 -124z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"107","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M46 3672c-8,0 -14,3 -19,9 -5,7 -8,15 -8,25 0,11 3,19 8,25 5,7 11,10 19,10 9,0 15,-3 20,-10 5,-6 8,-14 8,-25 0,-10 -3,-18 -8,-25 -4,-6 -11,-9 -20,-9zm0 -9c12,0 22,4 29,12 6,8 10,18 10,31 0,14 -4,24 -10,32 -7,8 -17,12 -29,12 -11,0 -21,-4 -28,-12 -7,-8 -10,-18 -10,-31 0,-14 3,-24 10,-32 7,-8 17,-12 28,-12z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"111","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M67 3698c0,-8 -2,-14 -6,-18 -4,-5 -9,-8 -16,-8 -3,1 -6,1 -9,2 -3,2 -6,4 -8,6 -4,4 -7,10 -10,16 -2,7 -4,14 -4,21 0,7 2,13 6,18 4,4 9,6 15,6 5,0 9,-1 13,-4 4,-3 8,-7 11,-12 3,-3 4,-8 6,-12 1,-5 2,-10 2,-15zm17 -74l10 0 -26 124 -9 0 2 -14c-4,5 -8,9 -13,12 -5,3 -10,4 -15,4 -9,0 -17,-3 -22,-9 -5,-6 -8,-14 -8,-25 0,-5 1,-11 3,-17 1,-6 4,-11 7,-16 4,-7 8,-11 14,-15 5,-3 11,-5 17,-5 7,0 13,2 18,5 4,3 8,8 10,14l12 -58z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"100","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M77 3702l0 6 -59 0c0,11 3,19 8,25 6,5 13,8 22,8 4,0 8,-1 11,-2 4,-1 8,-2 11,-4l0 10c-3,2 -7,3 -11,4 -4,1 -8,1 -12,1 -12,0 -22,-4 -29,-12 -7,-7 -10,-18 -10,-32 0,-13 3,-23 10,-31 7,-8 16,-12 27,-12 9,0 17,4 23,11 6,7 9,16 9,28zm-10 -1c-1,-10 -3,-17 -7,-22 -4,-5 -10,-7 -17,-7 -6,0 -12,2 -17,8 -4,5 -7,12 -8,21l49 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"101","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M15 3624l10 0 0 55c3,-5 7,-9 11,-12 5,-2 10,-4 17,-4 9,0 15,3 20,9 5,6 7,14 7,25l0 51 -10 0 0 -48c0,-10 -2,-16 -5,-21 -3,-4 -8,-6 -15,-6 -8,0 -14,2 -18,8 -5,6 -7,14 -7,24l0 43 -10 0 0 -124z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"104","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M69 3668l-1 10c-2,-1 -5,-3 -8,-3 -3,-1 -7,-1 -10,-1 -9,0 -17,3 -22,9 -6,6 -9,14 -9,23 0,11 3,19 8,24 6,6 13,9 22,9 3,0 6,0 9,-1 4,-1 7,-2 11,-3l1 10c-4,1 -7,2 -11,3 -3,1 -7,1 -11,1 -12,0 -22,-4 -29,-12 -7,-7 -11,-18 -11,-31 0,-12 4,-22 12,-30 7,-8 18,-12 30,-12 4,0 7,1 10,1 3,1 6,1 9,3z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"99","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M14 3665l10 0 0 83 -10 0 0 -83zm-1 -39l12 0 0 14 -12 0 0 -14z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"105","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M80 3697l0 51 -10 0 0 -48c0,-10 -2,-16 -5,-21 -3,-4 -8,-6 -15,-6 -8,0 -14,2 -18,8 -5,6 -7,14 -7,24l0 43 -10 0 0 -83 9 0 0 16c3,-6 7,-11 12,-13 5,-3 10,-5 17,-5 9,0 15,3 20,9 5,6 7,14 7,25z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"110","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M48 3706c-10,0 -17,1 -22,5 -6,3 -8,8 -8,14 0,4 1,8 4,11 3,3 8,5 13,5 7,0 13,-3 18,-8 5,-5 7,-11 7,-20l0 -7 -12 0zm22 -11l0 53 -9 0 0 -14c-3,5 -7,9 -12,11 -4,3 -10,4 -16,4 -8,0 -14,-2 -19,-6 -5,-5 -7,-10 -7,-18 0,-9 4,-15 11,-20 7,-5 18,-8 31,-8l11 0c0,0 0,0 0,-1 0,-1 0,-1 0,-1 0,-7 -2,-13 -5,-17 -4,-4 -8,-6 -14,-6 -5,0 -9,1 -13,2 -4,1 -7,3 -11,5l0 -10c4,-2 8,-3 12,-4 4,-1 9,-2 13,-2 9,0 16,3 21,8 5,5 7,13 7,24z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"97","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M14 3624l10 0 0 124 -10 0 0 -124z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"108","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M13 3665l10 0 0 48c0,9 2,16 5,20 3,5 8,7 15,7 8,0 14,-3 18,-9 5,-6 7,-15 7,-27l0 -39 10 0 0 83 -9 0 0 -16c-4,5 -7,10 -12,13 -5,3 -10,4 -17,4 -9,0 -16,-3 -20,-9 -5,-5 -7,-14 -7,-25l0 -50z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"117","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M14 3665l61 0 -2 9 -64 66 51 0 -2 8 -64 0 2 -10 65 -65 -48 0 1 -8z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"122","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M53 3664l0 11c-1,0 -2,0 -3,-1 -1,0 -2,0 -3,0 -7,0 -12,3 -16,8 -4,5 -6,13 -6,22l0 44 -10 0 0 -83 9 0 0 18c2,-6 5,-11 10,-14 4,-3 9,-5 14,-5 1,0 2,0 2,0 1,0 2,0 3,0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"114","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M61 3667l-3 10c-3,-2 -6,-3 -9,-4 -3,-1 -6,-1 -10,-1 -5,0 -10,1 -13,3 -4,2 -6,5 -6,9 0,4 5,9 14,15 3,2 5,4 6,5 5,3 8,6 10,10 2,3 3,7 3,11 0,8 -3,14 -9,18 -6,5 -14,7 -25,7 -4,0 -8,0 -12,-1 -4,-1 -8,-2 -12,-4l4 -10c3,2 7,3 10,4 4,1 8,2 12,2 6,0 11,-2 15,-4 4,-3 5,-7 5,-12 0,-3 0,-5 -2,-8 -2,-2 -5,-5 -11,-9 -1,-1 -1,-1 -1,-1 -12,-8 -17,-15 -17,-21 0,-7 3,-13 8,-17 5,-4 13,-6 22,-6 4,0 7,0 10,1 4,1 7,2 11,3z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"115","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M32 3640l-1 25 20 0 0 9 -20 0 0 48c0,7 1,11 3,14 2,3 5,4 9,4 2,0 3,0 5,0 1,-1 2,-1 4,-2l0 10c-2,0 -4,1 -5,1 -2,0 -4,0 -6,0 -7,0 -12,-2 -15,-6 -3,-3 -5,-10 -5,-19l0 -50 -17 0 0 -9 17 0 0 -21 11 -4z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"116","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M58 3705c-1,0 -2,0 -3,0 -1,0 -3,0 -6,0 -13,0 -23,2 -29,5 -6,3 -9,9 -9,16 0,4 2,8 5,10 3,3 6,5 11,5 9,0 16,-4 21,-10 5,-6 9,-15 10,-26zm11 -5l-5 26c-1,7 -2,12 -3,14 0,3 -1,6 -1,8l-9 0 2 -13c-4,5 -8,8 -13,11 -4,2 -9,3 -15,3 -7,0 -13,-2 -18,-6 -5,-4 -7,-10 -7,-17 0,-9 4,-17 12,-22 8,-5 19,-8 33,-8 2,0 4,0 6,1 2,0 5,0 8,0 1,-2 1,-4 1,-5 0,-1 0,-2 0,-3 0,-5 -1,-10 -4,-13 -3,-3 -8,-4 -14,-4 -3,0 -6,0 -10,1 -5,1 -9,3 -15,5l1 -11c6,-1 10,-3 14,-3 4,-1 8,-1 11,-1 9,0 15,2 20,6 5,5 7,11 7,19 0,1 0,3 0,5 0,2 -1,4 -1,7zm-13 -66l12 0 -3 14 -12 0 3 -14zm-26 0l11 0 -2 14 -12 0 3 -14z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"228","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@id":"FontID1","@horiz-adv-x":"1000","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"font-face":{"@id":"Humnst777_BT","@font-variant":"normal","@font-style":"italic","@font-weight":"400,700","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"missing-glyph":{"@horiz-adv-x":"500","@d":"M63 0V800H438V0H63ZM125 63H375V738H125V63Z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"glyph":[{"path":{"@d":"M56 3723c-2,0 -4,1 -5,3 -1,1 -2,4 -2,7 0,4 1,6 2,8 1,2 3,3 5,3 2,0 4,-1 5,-3 2,-2 2,-4 2,-8 0,-3 0,-6 -2,-7 -1,-2 -3,-3 -5,-3zm0 -5c4,0 8,1 10,4 2,3 4,7 4,11 0,5 -2,9 -4,12 -2,3 -6,4 -10,4 -4,0 -7,-1 -10,-4 -2,-3 -3,-7 -3,-12 0,-4 1,-8 3,-11 3,-3 6,-4 10,-4zm-39 -24c-2,0 -4,1 -5,3 -2,2 -2,4 -2,8 0,3 0,6 2,7 1,2 3,3 5,3 2,0 3,-1 5,-3 1,-1 1,-4 1,-7 0,-4 0,-6 -1,-8 -2,-2 -3,-3 -5,-3zm32 -5l6 0 -31 60 -6 0 31 -60zm-32 0c4,0 7,1 9,4 3,3 4,7 4,12 0,4 -1,8 -4,11 -2,3 -5,4 -9,4 -4,0 -8,-1 -10,-4 -3,-3 -4,-6 -4,-11 0,-5 1,-9 4,-12 2,-3 6,-4 10,-4z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"37","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M16 3699l5 0 -20 55 -5 0 20 -55z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"47","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M4 3722l21 0 0 6 -21 0 0 -6z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"45","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M2 3685l6 0c5,7 8,13 10,19 2,6 3,12 3,18 0,6 -1,12 -3,18 -2,6 -5,13 -10,19l-6 0c4,-7 7,-13 9,-19 2,-6 3,-12 3,-18 0,-6 -1,-12 -3,-18 -2,-6 -5,-12 -9,-19z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"41","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M19 3685l6 0c-4,7 -7,13 -9,19 -2,6 -3,12 -3,18 0,6 1,12 3,18 2,6 5,12 9,19l-6 0c-5,-6 -8,-13 -10,-19 -2,-6 -3,-12 -3,-18 0,-6 1,-12 3,-18 2,-6 5,-13 10,-19z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"40","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M9 3739l9 0 -7 19 -7 0 5 -19z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"44","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M8 3739l8 0 0 9 -8 0 0 -9z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"46","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M8 3690l32 0 0 6 -24 0 -1 16c2,0 3,0 4,0 2,0 3,-1 4,-1 6,0 11,2 14,5 4,3 5,8 5,13 0,6 -2,11 -6,14 -4,4 -9,6 -16,6 -3,0 -5,-1 -7,-1 -2,0 -4,-1 -6,-2l0 -7c2,1 4,2 6,2 2,1 4,1 7,1 4,0 8,-1 10,-3 3,-3 4,-6 4,-10 0,-3 -1,-6 -4,-8 -2,-2 -5,-3 -10,-3 -1,0 -3,0 -5,0 -2,0 -5,1 -7,2l0 -30z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"53","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M5 3690l36 0 0 7 -22 51 -9 0 23 -51 -28 0 0 -7z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"55","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M35 3708c0,-4 -1,-7 -3,-9 -2,-3 -5,-4 -8,-4 -3,0 -6,2 -8,4 -2,2 -3,6 -3,9 0,4 1,7 3,9 2,2 4,3 8,3 3,0 6,-1 8,-3 2,-2 3,-6 3,-9zm-28 39l1 -7c1,1 3,1 4,2 2,0 4,0 6,0 6,0 10,-2 13,-6 3,-3 5,-9 5,-17 -1,3 -3,5 -6,6 -2,1 -5,2 -8,2 -5,0 -9,-2 -12,-5 -4,-4 -5,-8 -5,-13 0,-6 2,-11 5,-14 4,-4 8,-6 14,-6 6,0 11,2 14,7 4,5 6,12 6,20 0,11 -3,19 -7,24 -4,6 -10,9 -18,9 -2,0 -4,0 -6,-1 -2,0 -4,-1 -6,-1z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"57","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M8 3739l8 0 0 9 -8 0 0 -9zm0 -33l8 0 0 9 -8 0 0 -9z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"58","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M28 3718c4,0 7,2 10,4 2,3 3,6 3,9 0,5 -2,10 -6,13 -4,3 -10,4 -17,4 -2,0 -5,0 -7,0 -3,0 -5,-1 -7,-2l1 -7c2,1 4,2 6,2 2,1 4,1 6,1 5,0 8,-1 11,-3 3,-2 4,-5 4,-8 0,-3 -1,-6 -3,-7 -2,-2 -6,-3 -10,-3l-6 0 0 -6 6 0c4,0 7,-1 10,-3 2,-2 3,-4 3,-7 0,-2 -1,-5 -3,-6 -3,-2 -6,-3 -9,-3 -2,0 -4,0 -6,1 -3,0 -5,1 -7,2l0 -7c2,-1 5,-1 7,-2 3,0 5,0 7,0 6,0 11,1 14,4 4,3 5,6 5,11 0,3 -1,6 -3,8 -2,2 -5,4 -9,5z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"51","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M12 3743l22 0 0 5 -30 0 0 -6c9,-8 15,-15 18,-19 3,-4 4,-8 4,-11 0,-2 -1,-4 -2,-5 -2,-1 -4,-2 -7,-2 -2,0 -3,0 -5,1 -2,0 -4,1 -6,2l0 -6c2,-1 4,-2 6,-2 3,-1 5,-1 7,-1 4,0 7,1 10,4 3,2 4,5 4,9 0,4 -2,8 -5,12 -3,5 -8,11 -16,19z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"50","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M30 3697l-21 32 21 0 0 -32zm-2 -7l9 0 0 39 9 0 0 6 -9 0 0 13 -7 0 0 -13 -28 0 0 -7 26 -38z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"52","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M25 3718c-3,0 -6,1 -8,3 -2,3 -3,6 -3,9 0,4 1,7 3,9 2,3 5,4 8,4 3,0 6,-1 8,-4 2,-2 3,-5 3,-9 0,-4 -1,-7 -3,-9 -2,-2 -5,-3 -8,-3zm17 -27l-1 7c-1,-1 -3,-1 -4,-2 -2,0 -4,0 -6,0 -6,0 -10,2 -13,6 -3,4 -5,9 -5,17 1,-3 3,-4 6,-6 2,-1 5,-2 8,-2 5,0 9,2 12,5 4,4 5,8 5,13 0,6 -2,11 -5,14 -4,4 -8,6 -14,6 -6,0 -11,-2 -15,-7 -3,-5 -5,-11 -5,-20 0,-11 2,-18 7,-24 4,-6 10,-9 18,-9 2,0 4,1 6,1 2,0 4,1 6,1z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"54","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M24 3715c4,-1 6,-3 8,-5 1,-2 2,-4 2,-7 0,-2 -1,-4 -2,-6 -2,-1 -5,-2 -7,-2 -4,0 -6,1 -8,2 -2,2 -3,4 -3,7 0,2 1,4 2,6 2,2 5,4 8,5zm-1 6c-4,1 -6,3 -8,5 -2,2 -3,4 -3,6 0,3 1,6 3,8 3,2 5,3 9,3 3,0 6,-1 8,-3 2,-2 4,-4 4,-7 0,-3 -1,-5 -3,-7 -2,-2 -6,-4 -10,-5zm8 -3c4,1 7,3 10,6 2,2 3,5 3,9 0,5 -2,9 -6,12 -3,3 -8,4 -14,4 -6,0 -11,-2 -15,-5 -3,-3 -5,-6 -5,-11 0,-4 1,-7 3,-9 3,-3 6,-5 10,-6 -3,-2 -6,-4 -8,-6 -2,-3 -3,-6 -3,-9 0,-4 2,-7 5,-10 4,-3 8,-4 14,-4 5,0 9,1 12,4 3,2 5,6 5,10 0,3 -1,6 -3,8 -2,3 -5,5 -8,7z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"56","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M24 3695c-4,0 -7,2 -9,6 -2,4 -3,10 -3,18 0,8 1,14 3,18 2,4 5,6 9,6 4,0 7,-2 8,-6 2,-4 3,-10 3,-18 0,-8 -1,-14 -2,-18 -2,-4 -5,-6 -9,-6zm0 -6c6,0 11,3 15,8 3,5 5,12 5,22 0,10 -2,17 -5,22 -4,6 -9,8 -15,8 -6,0 -11,-2 -15,-8 -3,-5 -5,-12 -5,-22 0,-10 2,-17 5,-22 4,-5 9,-8 15,-8z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"48","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M23 3690l7 0 0 58 -8 0 0 -49 -9 8 -4 -5 14 -12z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"49","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M7 3690l8 0 0 25 27 0 0 -25 8 0 0 58 -8 0 0 -27 -27 0 0 27 -8 0 0 -58z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"72","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M6 3700l8 0 21 37c1,1 1,2 1,3 1,1 1,2 2,4 -1,-2 -1,-4 -1,-5 0,-1 0,-3 0,-4l0 -35 6 0 0 48 -8 0 -22 -38c0,0 0,-1 -1,-2 0,-1 0,-3 -1,-4 1,2 1,4 1,6 0,1 0,2 0,3l0 35 -6 0 0 -48z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"78","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M13 3705l0 37 5 0c6,0 11,-1 14,-5 4,-3 5,-7 5,-13 0,-6 -1,-11 -5,-14 -3,-3 -7,-5 -14,-5l-5 0zm-7 -5l11 0c9,0 16,2 21,6 4,4 6,10 6,18 0,8 -2,14 -7,18 -4,4 -11,6 -20,6l-11 0 0 -48z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"68","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M10 3671l41 0 0 8 -31 0 0 25 30 0 0 8 -30 0 0 27 32 0 0 9 -42 0 0 -77z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"69","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M28 3697l-11 30 22 0 -11 -30zm-5 -7l10 0 23 58 -9 0 -5 -15 -28 0 -5 15 -9 0 23 -58z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"65","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M41 3702l-1 5c-2,0 -3,-1 -5,-1 -2,-1 -4,-1 -6,-1 -5,0 -10,2 -13,5 -4,4 -5,8 -5,14 0,6 1,10 5,14 3,3 8,5 14,5 1,0 3,-1 5,-1 2,0 3,-1 5,-2l0 6c-1,1 -3,1 -5,2 -2,0 -4,0 -6,0 -8,0 -14,-2 -19,-6 -4,-5 -7,-10 -7,-18 0,-7 3,-13 7,-18 5,-4 11,-6 19,-6 2,0 4,0 6,0 2,0 4,1 6,2z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"67","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M6 3700l7 0 0 48 -7 0 0 -48z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"73","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M29 3705l0 29 11 0c6,0 11,-1 15,-4 3,-2 5,-6 5,-11 0,-4 -2,-8 -5,-10 -3,-3 -8,-4 -14,-4l-12 0zm0 -40l0 27 9 0c7,0 11,-1 15,-4 3,-2 5,-5 5,-9 0,-5 -2,-8 -5,-10 -3,-3 -8,-4 -13,-4l-11 0zm-18 -13l32 0c11,0 19,2 25,6 6,4 9,10 9,19 0,5 -2,9 -5,13 -3,4 -8,6 -13,8 6,1 11,4 15,8 3,4 5,9 5,15 0,9 -3,16 -9,20 -7,5 -16,7 -28,7l-31 0 0 -96z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"66","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M7 3690l8 0 0 51 23 0 0 7 -31 0 0 -58z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"76","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M6 3700l7 0 0 21 20 -21 8 0 -22 22 24 26 -9 0 -21 -24 0 24 -7 0 0 -48z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"75","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M7 3690l12 0 18 45c0,1 0,2 0,3 1,2 1,3 1,4 0,-1 0,-3 1,-4 0,-2 0,-2 0,-3l18 -45 12 0 0 58 -8 0 0 -45c0,-2 0,-3 0,-5 1,-1 1,-3 1,-4 0,1 -1,3 -1,4 -1,1 -1,2 -1,4l-19 46 -7 0 -18 -47c-1,-1 -1,-2 -1,-3 0,-1 -1,-3 -1,-4 0,2 0,4 0,6 0,1 0,2 0,3l0 45 -7 0 0 -58z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"77","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M51 3693l-1 7c-2,-2 -4,-2 -7,-3 -2,0 -5,-1 -7,-1 -7,0 -13,2 -17,7 -4,4 -6,9 -6,16 0,7 2,13 6,17 4,4 10,6 17,6 2,0 3,0 5,-1 1,0 3,0 4,-1l0 -17 -12 0 0 -7 20 0 0 29c-3,1 -5,2 -8,2 -3,1 -6,1 -10,1 -9,0 -17,-2 -22,-8 -6,-5 -9,-12 -9,-21 0,-9 3,-16 9,-21 5,-5 13,-8 22,-8 3,0 6,0 9,1 2,0 5,1 7,2z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"71","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M42 3747l12 12 -9 0 -11 -10c-1,0 -1,0 -2,0 0,0 -1,0 -1,0 -8,0 -15,-3 -20,-8 -4,-5 -7,-13 -7,-22 0,-9 3,-17 7,-22 5,-5 11,-8 20,-8 8,0 14,3 19,8 4,5 7,13 7,22 0,7 -2,13 -4,17 -3,5 -6,8 -11,11zm-11 -51c-6,0 -10,2 -13,6 -4,4 -5,10 -5,17 0,7 1,13 5,17 3,4 7,6 13,6 5,0 9,-2 12,-6 4,-4 5,-10 5,-17 0,-7 -1,-13 -5,-17 -3,-4 -7,-6 -12,-6z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"81","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M1 3700l7 0 9 38c0,1 1,1 1,2 0,1 0,3 0,4 0,-1 0,-2 0,-3 1,-1 1,-2 1,-2l10 -39 9 0 9 39c1,0 1,1 1,2 0,1 0,2 0,3 0,-1 0,-2 1,-3 0,-1 0,-2 0,-2l10 -39 6 0 -13 48 -8 0 -10 -39c-1,-1 -1,-2 -1,-3 0,-1 0,-2 0,-3 0,2 0,4 -1,4 0,1 0,2 0,2l-10 39 -8 0 -13 -48z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"87","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M6 3700l6 0 0 28c0,5 1,9 3,12 2,2 5,3 9,3 4,0 6,-1 8,-4 2,-2 3,-6 3,-11l0 -28 7 0 0 28c0,7 -2,12 -5,16 -3,3 -7,5 -14,5 -5,0 -10,-2 -13,-5 -3,-4 -4,-9 -4,-16l0 -28z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"85","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M13 3705l0 16 5 0c3,0 6,0 8,-2 2,-1 3,-3 3,-6 0,-3 -1,-5 -3,-6 -2,-1 -5,-2 -8,-2l-5 0zm-7 -5l13 0c5,0 10,1 12,3 3,2 5,5 5,9 0,3 -1,6 -3,8 -2,2 -5,3 -8,4 1,0 3,1 4,2 0,1 1,2 2,5l8 17 -8 0 -6 -16c-1,-2 -2,-3 -3,-4 -1,-1 -3,-1 -5,-1l-4 0 0 21 -7 0 0 -48z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"82","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M1 3690l40 0 0 7 -16 0 0 51 -8 0 0 -51 -16 0 0 -7z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"84","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M15 3696l0 22 6 0c4,0 7,-1 9,-3 3,-2 4,-4 4,-8 0,-3 -1,-6 -3,-8 -2,-2 -5,-3 -9,-3l-7 0zm-8 -6l15 0c6,0 12,2 15,4 4,3 5,8 5,13 0,6 -2,10 -5,13 -4,3 -9,4 -16,4l-6 0 0 24 -8 0 0 -58z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"80","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M37 3692l-1 7c-2,-1 -3,-2 -5,-2 -2,-1 -4,-1 -6,-1 -4,0 -6,1 -8,2 -2,1 -3,3 -3,5 0,2 0,4 2,5 1,2 4,4 8,6 6,3 10,6 12,9 2,2 3,5 3,9 0,5 -2,9 -5,12 -4,3 -8,4 -14,4 -3,0 -5,0 -8,0 -2,-1 -5,-1 -7,-2l1 -8c2,1 5,2 7,3 2,0 4,1 6,1 4,0 7,-1 9,-3 2,-1 3,-3 3,-6 0,-3 -4,-8 -12,-12 -2,-1 -3,-2 -4,-2 -3,-2 -5,-4 -7,-7 -2,-2 -2,-5 -2,-8 0,-4 1,-8 5,-10 3,-3 8,-4 14,-4 2,0 4,0 6,0 2,1 4,1 6,2z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"83","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M1 3690l9 0 17 50 17 -50 8 0 -21 58 -9 0 -21 -58z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"86","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M4 3690l37 0 0 7 -30 44 31 0 0 7 -39 0 0 -8 30 -43 -29 0 0 -7z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"90","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M27 3711c-4,0 -7,2 -9,4 -2,3 -3,7 -3,12 0,5 1,8 3,11 2,3 5,4 8,4 4,0 6,-1 8,-4 3,-2 4,-6 4,-11 0,-5 -1,-9 -3,-12 -2,-2 -5,-4 -8,-4zm-20 -25l8 0 0 27c1,-3 3,-5 5,-6 3,-1 5,-2 8,-2 6,0 10,2 13,6 3,4 5,9 5,15 0,7 -2,12 -5,16 -3,5 -7,7 -13,7 -3,0 -6,-1 -8,-3 -2,-1 -4,-3 -6,-7l0 9 -7 0 0 -62z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"98","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M40 3714c2,-3 4,-5 6,-6 3,-2 5,-3 8,-3 5,0 8,2 10,5 3,3 4,7 4,13l0 25 -8 0 0 -24c0,-4 -1,-7 -2,-9 -1,-2 -3,-3 -6,-3 -3,0 -6,1 -8,4 -2,3 -3,6 -3,11l0 21 -8 0 0 -24c0,-4 0,-7 -2,-9 -1,-2 -3,-3 -6,-3 -3,0 -6,1 -7,4 -2,3 -3,6 -3,11l0 21 -8 0 0 -42 7 0 0 8c2,-3 3,-5 6,-7 2,-1 5,-2 8,-2 3,0 5,1 7,3 3,1 4,3 5,6z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"109","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M26 3727c-5,0 -9,1 -11,3 -3,1 -4,3 -4,6 0,2 1,4 2,5 2,1 3,2 6,2 3,0 6,-1 8,-3 2,-3 3,-6 3,-10l0 -3 -4 0zm12 -4l0 25 -7 0 0 -7c-2,3 -4,4 -6,6 -2,1 -5,2 -8,2 -4,0 -8,-2 -10,-4 -2,-2 -4,-5 -4,-9 0,-4 2,-8 6,-10 4,-3 9,-4 16,-4l5 0 0 -1c0,-3 0,-5 -2,-7 -2,-2 -5,-3 -8,-3 -2,0 -4,0 -6,1 -2,0 -4,1 -6,3l0 -7c2,-1 5,-2 7,-2 2,-1 5,-1 7,-1 6,0 9,2 12,5 3,2 4,7 4,13z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"97","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M6 3696l6 0 0 31 14 -14 8 0 -16 15 17 20 -8 0 -15 -18 0 18 -6 0 0 -52z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"107","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M7 3706l7 0 0 44c0,6 -1,10 -3,12 -1,3 -4,4 -9,4 0,0 -1,0 -2,0 -1,0 -2,-1 -3,-1l1 -5c0,0 1,0 1,0 1,0 1,0 2,0 2,0 3,-1 4,-2 1,-2 2,-4 2,-8l0 -44zm0 -19l7 0 0 8 -7 0 0 -8z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"106","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M23 3711c-3,0 -6,2 -8,4 -2,3 -3,7 -3,12 0,4 1,8 3,11 2,2 5,4 8,4 4,0 7,-2 9,-4 2,-3 3,-7 3,-11 0,-5 -1,-9 -3,-12 -2,-2 -5,-4 -9,-4zm13 3l0 -8 7 0 0 37c0,8 -2,14 -5,18 -4,3 -9,5 -16,5 -2,0 -5,0 -7,0 -3,-1 -5,-1 -7,-2l1 -7c2,1 4,2 6,2 2,1 4,1 6,1 5,0 8,-1 11,-4 2,-3 3,-6 3,-11l0 -5c-1,2 -3,4 -6,6 -2,1 -5,2 -8,2 -5,0 -9,-2 -12,-6 -3,-4 -5,-9 -5,-15 0,-7 2,-12 5,-16 3,-4 7,-6 13,-6 3,0 6,1 8,2 2,2 4,4 6,7z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"103","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M39 3665l0 8c-2,0 -3,0 -4,-1 0,0 -1,0 -2,0 -3,0 -5,1 -6,3 -2,2 -2,5 -2,9l0 8 13 0 0 8 -13 0 0 48 -11 0 0 -48 -11 0 0 -8 11 0 0 -9c0,-6 2,-11 5,-14 3,-3 7,-5 13,-5 1,0 2,0 3,0 1,0 3,1 4,1z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"102","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M23 3711c-3,0 -6,2 -8,4 -2,3 -3,7 -3,12 0,5 1,8 3,11 2,3 5,4 8,4 4,0 7,-1 9,-4 2,-3 3,-6 3,-11 0,-5 -1,-9 -3,-12 -2,-2 -5,-4 -9,-4zm12 -25l8 0 0 62 -7 0 0 -9c-2,4 -4,6 -6,7 -3,2 -6,3 -9,3 -5,0 -9,-2 -12,-7 -3,-4 -5,-9 -5,-16 0,-6 1,-11 5,-15 3,-4 7,-6 12,-6 3,0 6,1 8,2 3,1 4,3 6,6l0 -27z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"100","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M25 3711c-4,0 -7,2 -10,4 -2,3 -3,7 -3,12 0,5 1,9 3,11 3,3 6,5 10,5 3,0 6,-2 9,-4 2,-3 3,-7 3,-12 0,-5 -1,-9 -3,-12 -3,-2 -6,-4 -9,-4zm-1 -6c7,0 12,2 16,6 3,4 5,9 5,16 0,7 -2,12 -5,16 -4,4 -9,6 -16,6 -6,0 -11,-2 -15,-6 -3,-4 -5,-9 -5,-16 0,-7 2,-12 5,-16 4,-4 9,-6 15,-6z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"111","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M7 3686l8 0 0 27c1,-3 3,-5 5,-6 3,-1 5,-2 9,-2 4,0 8,2 10,5 3,3 4,7 4,13l0 25 -8 0 0 -24c0,-4 -1,-7 -2,-9 -2,-2 -4,-3 -7,-3 -4,0 -6,1 -8,4 -2,2 -3,6 -3,11l0 21 -8 0 0 -62z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"104","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M36 3708l-1 6c-1,0 -2,-1 -4,-1 -1,-1 -3,-1 -5,-1 -4,0 -7,1 -10,4 -3,3 -4,7 -4,11 0,5 1,8 4,11 2,3 6,4 10,4 2,0 3,0 5,-1 2,0 3,0 5,-1l0 7c-2,0 -3,1 -5,1 -2,0 -4,0 -6,0 -6,0 -12,-1 -15,-5 -4,-4 -6,-9 -6,-16 0,-6 2,-11 6,-15 4,-4 9,-6 16,-6 2,0 3,0 5,0 2,1 3,1 5,2z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"99","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M7 3706l7 0 0 42 -7 0 0 -42zm0 -19l7 0 0 8 -7 0 0 -8z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"105","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M43 3723l0 25 -8 0 0 -24c0,-4 -1,-7 -2,-9 -2,-2 -4,-3 -7,-3 -4,0 -6,1 -8,4 -2,2 -3,6 -3,11l0 21 -8 0 0 -42 7 0 0 8c2,-3 4,-5 6,-7 2,-1 5,-2 9,-2 4,0 8,2 10,5 3,3 4,7 4,13z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"110","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M7 3686l7 0 0 62 -7 0 0 -62z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"108","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M41 3726l0 3 -30 0c1,4 2,8 5,10 2,3 6,4 10,4 2,0 4,0 6,-1 2,0 4,-1 6,-2l0 7c-2,0 -4,1 -7,1 -2,1 -4,1 -7,1 -6,0 -11,-2 -15,-6 -3,-4 -5,-9 -5,-16 0,-7 2,-12 5,-16 4,-4 8,-6 14,-6 6,0 10,2 13,6 3,3 5,8 5,15zm-7 -2c-1,-4 -2,-8 -4,-10 -1,-2 -4,-3 -7,-3 -3,0 -6,1 -8,3 -2,3 -3,6 -4,10l23 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"101","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M1 3706l8 0 12 35 11 -35 8 0 -17 46c-2,5 -4,9 -6,11 -2,2 -5,3 -9,3 0,0 -1,0 -2,0 -1,0 -2,0 -3,0l1 -7c1,0 1,0 2,1 0,0 1,0 2,0 1,0 3,-1 5,-3 1,-1 2,-4 4,-7l-16 -44z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"121","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M2 3706l9 0 9 15 9 -15 9 0 -13 20 14 22 -9 0 -10 -17 -11 17 -8 0 14 -22 -13 -20z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"120","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M34 3723c0,-3 -1,-6 -2,-8 -2,-2 -5,-3 -8,-3 -3,0 -7,1 -10,5 -2,4 -4,9 -4,15 0,3 1,6 3,8 1,2 4,3 7,3 4,0 7,-2 10,-6 3,-4 4,-8 4,-14zm4 -17l8 0 -13 59 -7 0 5 -23c-2,3 -4,4 -6,5 -3,1 -5,2 -8,2 -5,0 -8,-2 -11,-5 -3,-3 -4,-7 -4,-13 0,-4 1,-7 2,-11 1,-3 3,-6 5,-9 2,-2 4,-3 7,-4 2,-1 4,-2 7,-2 4,0 6,1 9,3 2,1 4,4 4,7l2 -9z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"113","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M6 3706l8 0 0 23c0,5 0,8 2,10 1,2 4,3 7,3 4,0 6,-2 8,-4 2,-3 3,-7 3,-13l0 -19 8 0 0 42 -7 0 0 -8c-2,3 -4,5 -6,6 -2,2 -5,3 -9,3 -4,0 -8,-2 -10,-5 -3,-3 -4,-7 -4,-13l0 -25z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"117","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M15 3741l0 24 -8 0 0 -59 7 0 0 8c2,-3 4,-5 6,-7 3,-1 6,-2 9,-2 5,0 9,2 12,6 3,4 5,9 5,15 0,7 -2,13 -5,17 -3,4 -7,6 -13,6 -3,0 -5,-1 -8,-2 -2,-1 -4,-3 -5,-6zm23 -14c0,-5 -1,-9 -3,-12 -2,-2 -5,-4 -8,-4 -4,0 -7,2 -9,5 -2,2 -3,6 -3,11 0,5 1,9 3,11 2,3 5,5 8,5 4,0 7,-2 9,-5 2,-3 3,-6 3,-11z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"112","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M4 3706l31 0 0 7 -23 29 23 0 0 6 -32 0 0 -7 24 -29 -23 0 0 -6z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"122","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M29 3706l0 7c-1,0 -1,0 -2,0 0,0 -1,0 -1,0 -4,0 -7,1 -8,3 -2,3 -3,6 -3,11l0 21 -8 0 0 -42 7 0 0 9c1,-3 3,-6 5,-7 2,-2 4,-3 7,-3 0,0 1,0 2,0 0,1 1,1 1,1z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"114","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M1 3706l8 0 11 35 12 -35 7 0 -14 42 -9 0 -15 -42z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"118","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M18 3693l0 13 10 0 0 6 -10 0 0 22c0,3 0,5 1,7 1,1 3,2 5,2 1,0 1,0 2,0 1,-1 1,-1 2,-1l0 6c-1,0 -2,0 -3,1 -1,0 -2,0 -3,0 -4,0 -7,-1 -9,-4 -2,-2 -3,-5 -3,-11l0 -22 -8 0 0 -6 9 0 0 -10 7 -3z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"116","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M30 3707l0 7c-2,-1 -4,-2 -5,-2 -2,-1 -4,-1 -6,-1 -2,0 -4,1 -5,1 -1,1 -2,2 -2,4 0,1 1,2 2,3 1,1 3,3 6,4 5,2 8,4 9,6 2,2 3,4 3,7 0,4 -2,7 -5,9 -3,2 -7,3 -12,3 -2,0 -4,0 -6,0 -2,0 -3,-1 -5,-2l0 -6c2,1 4,2 6,2 2,1 4,1 5,1 3,0 5,-1 6,-2 2,-1 3,-2 3,-4 0,-2 -1,-3 -2,-4 -1,-1 -3,-2 -6,-4 -4,-2 -7,-4 -9,-6 -2,-2 -2,-4 -2,-6 0,-4 1,-6 4,-8 2,-2 6,-3 11,-3 1,0 3,0 5,0 2,0 3,1 5,1z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"115","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M2 3692l11 0 12 43c0,0 0,1 0,2 0,2 1,3 1,5 0,-3 0,-4 1,-5 0,-1 0,-2 0,-2l12 -43 13 0 13 43c0,0 0,1 0,2 0,1 1,3 1,5 0,-2 0,-3 0,-5 1,-1 1,-2 1,-2l12 -43 11 0 -19 56 -11 0 -14 -44c0,-1 0,-2 0,-3 0,-1 0,-2 -1,-4 0,2 0,3 0,4 0,1 0,2 -1,3l-13 44 -12 0 -17 -56z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"119","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M18 3708c0,-1 -1,-3 -2,-4 -1,-2 -3,-2 -5,-2 -1,0 -3,0 -4,2 -2,1 -2,3 -2,4 0,2 0,4 2,5 1,1 3,2 4,2 2,0 4,-1 5,-2 1,-1 2,-3 2,-5zm-7 -9c3,0 5,1 7,2 2,2 3,5 3,7 0,3 -1,5 -3,7 -2,2 -4,3 -7,3 -2,0 -5,-1 -7,-3 -1,-2 -2,-4 -2,-7 0,-2 1,-5 3,-7 1,-1 4,-2 6,-2z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"176","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M34 3720c-6,0 -11,1 -14,3 -4,2 -5,5 -5,9 0,3 1,5 3,7 1,1 4,2 7,2 5,0 8,-1 11,-4 3,-3 5,-7 5,-12l0 -5 -7 0zm17 -6l0 34 -10 0 0 -9c-2,3 -5,6 -8,7 -3,2 -7,3 -11,3 -5,0 -9,-2 -13,-5 -3,-3 -5,-7 -5,-12 0,-6 3,-10 8,-14 5,-3 12,-4 21,-4l8 0 0 -2c0,-4 -2,-7 -4,-10 -3,-2 -6,-3 -10,-3 -3,0 -5,0 -8,1 -2,1 -5,2 -8,3l0 -8c3,-1 6,-2 9,-3 3,-1 6,-1 10,-1 7,0 12,2 15,6 4,4 6,9 6,17zm-17 -43l9 0 0 10 -9 0 0 -10zm-18 0l9 0 0 10 -9 0 0 -10z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"228","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M8 3692l10 0 0 31c0,6 1,10 3,13 2,3 5,4 10,4 4,0 8,-2 11,-6 2,-3 4,-9 4,-16l0 -26 10 0 0 56 -10 0 0 -11c-2,4 -4,7 -7,9 -4,2 -7,3 -12,3 -6,0 -11,-2 -14,-6 -3,-4 -5,-10 -5,-18l0 -33zm29 -21l9 0 0 10 -9 0 0 -10zm-18 0l9 0 0 10 -9 0 0 -10z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"252","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":{"@d":"M43 3689c-5,0 -10,2 -13,6 -4,5 -5,10 -5,18 0,7 1,12 5,17 3,4 8,6 13,6 6,0 10,-2 14,-6 3,-5 5,-10 5,-17 0,-8 -2,-13 -5,-18 -4,-4 -8,-6 -14,-6zm0 -13c12,0 21,3 28,10 6,6 10,15 10,27 0,11 -4,20 -10,27 -7,7 -16,10 -28,10 -11,0 -21,-3 -27,-10 -7,-7 -10,-16 -10,-27 0,-12 3,-21 10,-27 6,-7 16,-10 27,-10zm5 -27l14 0 0 15 -14 0 0 -15zm-24 0l14 0 0 15 -14 0 0 -15z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@unicode":"246","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@id":"FontID0","@horiz-adv-x":"1000","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"style":{"$":"\n .str18 {stroke:#1F1A17;stroke-width:3}\n .str7 {stroke:#0093DD;stroke-width:4;stroke-linejoin:round}\n .str2 {stroke:#0093DD;stroke-width:4;stroke-linejoin:round}\n .str11 {stroke:#1F1A17;stroke-width:4}\n .str15 {stroke:#1F1A17;stroke-width:4;stroke-linejoin:round}\n .str16 {stroke:#131516;stroke-width:4;stroke-linejoin:round}\n .str13 {stroke:#1F1A17;stroke-width:4;stroke-linejoin:round}\n .str6 {stroke:#0093DD;stroke-width:6;stroke-linejoin:round}\n .str17 {stroke:#1F1A17;stroke-width:6}\n .str9 {stroke:#131516;stroke-width:6;stroke-linejoin:round}\n .str0 {stroke:#4E4B4A;stroke-width:6;stroke-linejoin:round}\n .str5 {stroke:#0093DD;stroke-width:8;stroke-linejoin:round}\n .str12 {stroke:#1F1A17;stroke-width:8}\n .str14 {stroke:#131516;stroke-width:8;stroke-linejoin:round}\n .str8 {stroke:#449285;stroke-width:8;stroke-linejoin:round}\n .str4 {stroke:#0093DD;stroke-width:10;stroke-linejoin:round}\n .str3 {stroke:#0093DD;stroke-width:12;stroke-linejoin:round}\n .str10 {stroke:#131516;stroke-width:12;stroke-linejoin:round}\n .str1 {stroke:#4E4B4A;stroke-width:12;stroke-linejoin:round}\n .fil7 {fill:none}\n .fil19 {fill:#0093DD}\n .fil8 {fill:#1F1A17}\n .fil20 {fill:#FFFFFF}\n .fil9 {fill:#DA251D}\n .fil18 {fill:#F1A400}\n .fil16 {fill:#0096D4}\n .fil13 {fill:#96C7EB}\n .fil5 {fill:#C4E1F6}\n .fil15 {fill:#E1553F}\n .fil17 {fill:#E57A51}\n .fil10 {fill:#EDF5D4}\n .fil11 {fill:#EEA45C}\n .fil14 {fill:#EFB289}\n .fil12 {fill:#F5E0A0}\n .fil6 {fill:#C3C3C2;fill-opacity:0.501961}\n .fil4 {fill:#DA251D;fill-opacity:0.501961}\n .fil3 {fill:#EC914F;fill-opacity:0.501961}\n .fil1 {fill:#EECB97;fill-opacity:0.501961}\n .fil2 {fill:#F4B770;fill-opacity:0.501961}\n .fil0 {fill:#FFFEE3;fill-opacity:0.501961}\n .fnt0 {font-weight:normal;font-size:69;font-family:FontID0, 'Humnst777 BT'}\n .fnt42 {font-weight:normal;font-size:69;font-family:FontID34, 'Humnst777 BT'}\n .fnt8 {font-weight:normal;font-size:69;font-family:FontID4, 'Humnst777 BT'}\n .fnt41 {font-weight:normal;font-size:83;font-family:FontID34, 'Humnst777 BT'}\n .fnt5 {font-weight:normal;font-size:83;font-family:FontID4, 'Humnst777 BT'}\n .fnt17 {font-weight:normal;font-size:97;font-family:FontID10, 'Humnst777 BT'}\n .fnt19 {font-weight:normal;font-size:97;font-family:FontID12, 'Humnst777 BT'}\n .fnt21 {font-weight:normal;font-size:97;font-family:FontID14, 'Humnst777 BT'}\n .fnt23 {font-weight:normal;font-size:97;font-family:FontID16, 'Humnst777 BT'}\n .fnt25 {font-weight:normal;font-size:97;font-family:FontID18, 'Humnst777 BT'}\n .fnt27 {font-weight:normal;font-size:97;font-family:FontID20, 'Humnst777 BT'}\n .fnt29 {font-weight:normal;font-size:97;font-family:FontID22, 'Humnst777 BT'}\n .fnt31 {font-weight:normal;font-size:97;font-family:FontID24, 'Humnst777 BT'}\n .fnt33 {font-weight:normal;font-size:97;font-family:FontID26, 'Humnst777 BT'}\n .fnt35 {font-weight:normal;font-size:97;font-family:FontID28, 'Humnst777 BT'}\n .fnt37 {font-weight:normal;font-size:97;font-family:FontID30, 'Humnst777 BT'}\n .fnt39 {font-weight:normal;font-size:97;font-family:FontID32, 'Humnst777 BT'}\n .fnt13 {font-weight:normal;font-size:97;font-family:FontID6, 'Humnst777 BT'}\n .fnt15 {font-weight:normal;font-size:97;font-family:FontID8, 'Humnst777 BT'}\n .fnt18 {font-weight:normal;font-size:97;font-family:FontID11, Symbol}\n .fnt20 {font-weight:normal;font-size:97;font-family:FontID13, Symbol}\n .fnt22 {font-weight:normal;font-size:97;font-family:FontID15, Symbol}\n .fnt24 {font-weight:normal;font-size:97;font-family:FontID17, Symbol}\n .fnt26 {font-weight:normal;font-size:97;font-family:FontID19, Symbol}\n .fnt28 {font-weight:normal;font-size:97;font-family:FontID21, Symbol}\n .fnt30 {font-weight:normal;font-size:97;font-family:FontID23, Symbol}\n .fnt32 {font-weight:normal;font-size:97;font-family:FontID25, Symbol}\n .fnt34 {font-weight:normal;font-size:97;font-family:FontID27, Symbol}\n .fnt36 {font-weight:normal;font-size:97;font-family:FontID29, Symbol}\n .fnt38 {font-weight:normal;font-size:97;font-family:FontID31, Symbol}\n .fnt40 {font-weight:normal;font-size:97;font-family:FontID33, Symbol}\n .fnt12 {font-weight:normal;font-size:97;font-family:FontID5, Symbol}\n .fnt14 {font-weight:normal;font-size:97;font-family:FontID7, Symbol}\n .fnt16 {font-weight:normal;font-size:97;font-family:FontID9, Symbol}\n .fnt3 {font-weight:normal;font-size:111;font-family:FontID2, 'Humnst777 BT'}\n .fnt7 {font-weight:normal;font-size:111;font-family:FontID4, 'Humnst777 BT'}\n .fnt2 {font-weight:normal;font-size:130;font-family:FontID2, 'Humnst777 BT'}\n .fnt9 {font-weight:normal;font-size:130;font-family:FontID4, 'Humnst777 BT'}\n .fnt11 {font-weight:bold;font-size:130;font-family:FontID4, 'Humnst777 BT'}\n .fnt4 {font-weight:normal;font-size:167;font-family:FontID3, 'Humnst777 Lt BT'}\n .fnt10 {font-weight:bold;font-size:222;font-family:FontID4, 'Humnst777 BT'}\n .fnt6 {font-style:italic;font-weight:normal;font-size:83;font-family:FontID4, 'Humnst777 BT'}\n .fnt1 {font-style:italic;font-weight:normal;font-size:167;font-family:FontID1, 'Humnst777 Lt BT'}\n ","@type":"text\/css","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"g":[{"image":{"@transform":"matrix(0.555102 0 0 0.555268 -5368.74 5205.7)","@x":"0","@y":"-8696","@width":"15792","@height":"12444","@xlink:href":"tests\/resources\/images\/spainRelief.png","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@id":"relief","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil0","@d":"M-1948 1100l87 -3 57 -27 23 7 33 53 60 13 10 77 14 7 30 -17 3 20 -30 17 57 36 -10 20 -20 -13 -80 50 13 43 -17 47 24 50 -4 23 -33 7 -13 20 10 33 26 0 44 184 46 3 24 20 -17 17 7 26 46 0 7 10 -13 27 13 17 53 -17 -3 20 -43 23 -10 27 -50 17 -4 26 27 47 -30 -3 -17 -24 -60 -3 -36 27 -47 -14 -20 20 -23 0 -17 -13 10 -27 -13 -13 -37 13 -33 -46 -27 -4 -33 34 -30 -7 -40 -63 -60 10 -10 -20 53 -107 -13 -43 -50 -10 16 -90 20 -4 10 -23 0 -13 -16 3 3 -23 37 -14 -10 -33 16 -67 -13 -13 23 -117 -33 -26 23 -30 0 -57 20 -7 37 -83 33 -20z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil0","@d":"M199 1140l0 20 53 23 37 54 20 -7 10 -27 60 17 47 -37 60 40 23 -3 27 47 53 26 100 -40 43 10 24 30 33 -36 40 23 113 -10 17 -23 -20 -24 10 -63 23 -13 70 20 -73 103 7 47 36 16 -16 74 -20 10 30 60 6 63 -20 143 -30 97 -40 43 24 44 -144 153 20 53 44 4 10 33 -24 40 -30 10 0 50 -6 3 -50 -10 -7 14 -7 -4 -3 -3 -7 -3 -6 0 -4 0 -6 3 -7 0 -3 3 -7 4 -3 3 -4 7 -3 3 -7 3 -3 4 -3 6 -4 4 0 6 -3 7 0 7 -37 0 -6 -14 -7 0 0 14 -27 -10 -66 -164 -24 -3 -20 17 -63 -40 -10 -37 -73 -27 -7 -80 -77 -80 -60 0 -60 -30 30 -66 17 26 13 -10 -6 -130 16 -40 -6 -50 -7 -3 -10 10 0 17 -17 46 -33 -6 -13 26 -17 -6 53 -104 -46 -23 3 -60 -23 -3 16 -27 -16 -17 13 -20 -7 -36 17 -24 -17 -16 4 -27 30 -27 -4 -46 17 -47 50 -10z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil0","@d":"M-3064 1633l40 34 36 -7 84 30 93 -13 53 43 97 -3 43 23 37 -17 20 27 43 -20 24 17 33 -17 43 67 34 -37 13 30 13 30 -10 23 20 7 10 -30 37 -17 47 47 -27 27 17 20 -14 63 7 3 -3 20 -30 24 0 23 23 37 0 50 30 10 -10 26 17 14 -4 23 -40 23 -3 4 17 43 -17 37 23 83 -26 47 26 6 -3 34 -20 13 -33 -17 -10 -36 -30 6 -7 24 -43 -54 -24 7 -26 -27 -67 17 -70 -17 -30 57 -10 3 -3 -10 -17 7 -10 -7 0 -30 -43 -3 -7 -7 -3 -3 -4 0 -6 7 -4 3 -6 0 -4 -3 -3 -4 -3 -6 -4 -7 0 -3 -6 -7 -4 -3 -3 -4 -7 0 -6 0 -4 -3 -3 -3 0 -7 0 -7 0 -6 0 -7 0 -3 -7 -7 -3 -3 -7 0 -3 3 -3 7 -4 3 -3 7 -7 3 -3 3 -7 4 -3 0 -7 0 -3 -4 -7 -3 -6 0 -4 0 -6 0 -7 -3 -7 0 -3 0 -7 0 -6 0 -7 0 -10 0 7 -7 3 -3 7 -4 3 -3 7 -3 3 -4 7 -3 3 -3 3 -7 4 -3 3 -7 0 -3 3 -7 4 -3 3 -7 3 0 7 0 7 0 6 -3 4 -4 3 -3 0 -7 0 -6 3 -7 0 -3 4 -7 3 -3 3 -7 4 -3 3 -7 3 -3 0 -7 4 -3 3 -7 3 -3 4 -7 3 -3 3 -7 4 -3 3 -7 3 -3 4 -4 3 -6 7 -4 10 -16 -84 -67 -50 -7 -36 17 -24 -20 -6 -47 30 -86 -30 -14 10 -40 -17 -20 -20 20 -53 0 -30 -26 -10 -14 -27 30 -50 0 -30 -20 13 -46 -20 -17 0 -23 30 -27 10 -33 40 -34 34 10 10 -30m530 317l-4 7 -3 3 -3 7 -4 3 -6 0 -4 0 -3 7 -3 3 0 7 0 6 3 7 3 3 4 7 0 3 0 7 0 7 -4 6 -3 4 -3 3 -4 3 -6 4 -4 6 -3 4 -3 6 0 4 -7 3 -3 7 -7 0 -3 0 -4 3 -3 7 0 6 0 7 0 7 -3 3 -7 3 -3 0 -7 4 -7 3 -3 3 -7 0 -6 0 -4 0 0 7 0 7 7 3 3 3 0 7 0 7 4 3 0 7 3 6 3 -3 7 -3 3 -4 0 -6 -3 -4 0 -6 3 -7 0 -3 4 -7 6 -3 7 0 3 0 7 -4 3 -3 0 -7 0 -6 4 -4 0 -6 3 -7 3 -3 7 0 3 -4 7 4 7 0 6 -4 0 -3 -3 -7 -3 -6 -4 -4 4 -6 0 -7 6 0 7 0 3 0 7 0 7 -3 6 -4 0 -3 0 -7 -3 -6 0 -7 -3 -3 -4 -7 -3 -3 -3 -7 0 -7 0 -3 0 -7 3 -3 3 -7 4 -3 3 -7 0 -6 -3 -7z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil0","@d":"M-964 1820l23 10 33 -23 7 -47 27 -13 16 23 -20 53 90 14 37 -50 0 -20 10 -14 7 4 33 -24 67 -3 20 40 40 -17 33 7 -13 37 26 23 4 47 76 23 57 -30 27 77 -24 43 40 57 -16 40 -24 0 -36 43 -20 -7 -17 10 13 30 -6 44 26 60 -50 23 -6 -37 -37 -6 -10 50 -23 36 16 100 50 24 -3 50 -7 0 -26 -20 -17 0 -13 20 -34 -4 -46 24 -20 -17 -30 20 -27 -17 -37 -56 -23 6 -7 -6 4 -14 -24 -10 14 -16 -4 -4 -13 4 -10 -20 -37 -4 -3 -13 -10 -3 -27 16 -30 -10 -26 -33 -20 0 -17 13 -57 14 -80 -20 -80 -64 7 -50 -47 -13 -16 -40 -20 10 -20 -13 -10 -30 3 -24 43 17 7 -20 20 -43 23 -14 4 -30 36 -23 0 -53 20 -10 50 40 30 -44 -3 -16 47 -7 10 -30 20 -3 3 -37 27 -30z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil0","@d":"M-1304 2147l10 30 20 13 20 -10 16 40 47 13 -7 50 80 64 -26 33 -77 -3 -17 13 4 27 -74 33 -43 13 -90 110 -63 24 -27 43 -17 87 -53 0 -47 70 -63 6 7 10 -10 10 -20 0 -24 4 -30 -10 -6 -54 -27 -30 -7 -43 -30 -3 0 -4 10 -16 -16 -14 -4 -50 -50 -66 -36 -14 0 -66 20 -24 20 7 6 -3 -6 -30 43 -37 -10 -27 7 -6 33 10 17 -24 -17 -50 90 -30 133 -23 64 -30 10 -43 43 20 43 53 17 -27 10 4 0 26 7 7 10 0 6 -40 27 -27 77 -16z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil0","@d":"M766 2463l6 24 27 10 13 36 -23 57 17 53 -24 37 -33 20 3 10 -73 33 -13 -30 -47 10 -63 -43 -20 27 -10 46 -37 20 -13 -13 -27 13 3 37 47 3 -3 70 23 24 -43 30 36 46 -60 57 -10 37 -50 16 -26 -10 0 40 -37 87 -30 23 -40 0 -10 30 -30 17 -3 43 26 30 -53 20 -23 -76 -44 -14 -80 10 -13 -30 47 -20 0 -20 -40 -36 -54 0 -16 -30 -14 -27 -13 0 -3 40 -67 -3 0 -37 -60 7 -73 -77 -4 3 -13 -13 3 -3 -3 -4 -7 -6 -3 -4 -3 -3 -7 -3 -3 -7 -4 -3 -3 -4 -3 -6 -4 -4 -3 -3 -7 -3 -3 -4 -7 -3 30 -47 30 -13 10 -80 47 17 27 -20 3 -64 -17 -36 14 -54 -47 -56 -3 -47 83 -7 13 -26 -10 -20 54 -54 16 24 24 3 23 -17 -7 -33 27 -17 33 7 27 -27 43 20 24 -6 -10 36 30 14 33 -50 17 26 30 0 23 -46 43 33 34 -60 -30 -23 20 -14 0 -43 23 -3 0 3 3 -3 4 -30 46 3 44 53 36 17 14 -13 50 46 120 47 33 53 17 -23 80 3z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil0","@d":"M-1118 2347l80 20 57 -14 17 -13 20 0 26 33 30 10 27 -16 10 3 3 13 37 4 10 20 13 -4 4 4 -14 16 24 10 -4 14 7 6 23 -6 37 56 27 17 30 -20 20 17 46 -24 34 4 13 -20 17 0 26 20 7 0 3 -50 54 -20 16 23 70 37 104 103 3 47 47 56 -14 54 17 36 -3 64 -27 20 -47 -17 -10 80 -30 13 -30 47 -6 -3 -4 -4 -3 0 -3 -3 0 -3 -4 -7 -3 -3 -3 -7 -4 -3 -6 -4 0 -6 -4 -7 0 -3 0 -7 -3 -7 0 -3 -3 -7 0 -6 0 -7 -4 -3 -3 -7 0 -7 -3 -3 0 -7 -4 -6 0 -4 -3 -6 -3 -10 -20 -10 -7 16 -27 -3 -40 -37 -33 -10 -23 30 -54 -6 4 36 -17 10 -50 -30 -10 20 23 27 -10 17 -63 10 -10 16 17 30 -7 14 -7 0 -3 -4 -3 -3 -4 -7 0 -3 -3 -7 -7 0 -6 0 -4 0 -6 4 -7 0 -3 3 -7 0 -7 3 -3 0 -7 0 -6 0 -7 0 -3 0 -7 4 -3 3 -7 0 -7 3 -3 4 -7 3 -3 3 -3 4 -7 -7 -17 7 -13 46 13 67 -13 43 -47 34 -53 -34 -10 37 -30 0 0 -3 -17 -84 -40 27 -10 -7 34 -106 -14 -24 -26 -13 0 -50 -30 -20 -20 7 0 -24 -24 -23 10 -37 -26 4 -14 -34 -10 14 -33 -14 13 -50 -33 -26 57 -147 -24 -37 4 -23 -34 -10 -30 -50 74 -33 -4 -27 17 -13 77 3 26 -33m314 456l-7 0 -3 0 -7 0 -7 4 -6 0 -4 3 -3 7 -3 3 0 7 -4 6 -3 4 -3 6 0 4 -4 6 0 7 -3 3 -3 7 0 7 3 3 3 7 4 3 0 7 -4 3 0 7 -3 6 0 7 0 3 -3 7 6 7 4 0 3 -7 3 -3 4 -7 0 -3 0 -7 3 -7 3 -3 4 -3 3 -7 3 -3 -3 -7 -3 -3 -7 -4 -3 -3 0 -7 0 -6 0 -7 3 -3 0 -7 3 -3 4 -7 6 -3 4 -4 3 -3 7 0 6 -3 4 -4 0 -10z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil0","@d":"M-1954 2457l0 66 36 14 50 66 4 50 16 14 -10 16 0 4 30 3 7 43 27 30 6 54 30 10 24 -4 20 0 10 -10 -7 -10 63 -6 -6 50 -40 13 -17 -13 -7 6 4 24 -24 26 0 97 -56 7 -24 60 -30 -14 -10 7 4 27 -24 56 -50 10 -23 -63 -57 10 -3 33 -90 80 -20 0 -10 -36 -77 53 -93 -23 -20 -47 10 -40 -20 -13 -23 3 -24 30 -36 10 -107 -77 30 -30 -3 -56 33 -34 37 -10 -7 24 30 16 3 -30 27 0 17 -53 -10 -17 -37 10 3 -33 30 7 27 -14 27 -33 -7 -23 73 -40 50 -57 37 -127 -7 -26 -23 -17 13 -63 74 -17 80 47 26 -30 44 -10z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil0","@d":"M-731 2977l7 -14 -17 -30 10 -16 63 -10 10 -17 -23 -27 10 -20 50 30 17 -10 -4 -36 54 6 23 -30 33 10 40 37 27 3 7 -16 20 10 3 10 3 6 0 4 4 6 0 7 3 3 0 7 3 7 4 3 0 7 0 6 3 7 0 3 3 7 0 7 0 3 4 7 0 6 6 4 4 3 3 7 3 3 4 7 0 3 3 3 3 0 4 4 6 3 7 3 3 4 7 3 3 3 4 4 3 6 3 4 4 3 3 7 7 3 3 3 3 4 7 6 3 4 -3 3 13 13 4 -3 73 77 60 -7 0 37 40 96 43 7 37 7 40 -14 13 30 -36 17 3 17 3 46 -36 87 3 43 -27 14 -36 -10 -64 86 -13 87 13 20 -133 77 -27 30 -60 -17 -53 7 -20 -44 -37 -3 0 10 4 3 0 7 0 7 3 3 0 7 3 6 0 4 4 6 3 7 0 3 3 7 -70 -10 -56 40 -30 -40 -30 33 -74 -73 -80 10 -6 0 -7 3 -3 0 -7 0 -7 4 -6 0 -4 0 -10 0 -13 -37 -20 -7 -20 24 -3 3 -30 -7 13 -23 -33 -57 6 -130 -46 -50 -44 -100 -30 -16 17 -80 -33 -7 -7 -53 57 -17 -20 -40 13 -10 30 0 10 -37 53 34 47 -34 13 -43 -13 -67 13 -46 17 -7 7 7 -4 6 -6 4 -4 6 0 4 7 3 3 3 7 4 3 3 4 7 0 6 0 4 0 6 0 7 3 7 0 3 3 7 4 3 3 3 7 0 6 0 4 0 3 -6 0 -7 3 -7 0 -3 0 -7 -3 -6 -3 -4 -4 -3 -3 -7 -3 -3 -4 -7 0 -3 0 -7 0 -6 4 -4 3 -6 3 -4 4 -3 6 -3 7 0 3 -4 7 0 7 0 6 0 4 0 6 0 7 0 7 4 3 0 7 3 3 3 7 0 3 4 7 3 6 0 4 3 6 0 7 0 3 -6 0 -4 -3 -3 -7 -3 -6 0 -7 0m247 626l-4 -6 -3 -4 -3 -6 -4 -4 0 -6 0 -4 -3 -6 -7 -4 -6 0 -7 0 -3 0 -7 -3 -3 -3 -4 -7 -6 -3 -4 -4 -3 -6 0 -4 -3 -6 0 -7 3 -3 3 -7 0 -3 -6 -7 -4 0 -6 0 -7 0 -7 -3 -3 -4 -3 -6 0 -4 -4 -6 -3 -4 -7 -3 -3 -3 -3 -4 -4 7 0 7 0 6 4 4 0 6 3 7 0 3 7 4 3 3 3 3 4 7 3 7 3 3 4 3 3 7 7 3 3 4 3 3 4 7 3 3 0 7 0 6 3 4 7 3 3 3 7 0 7 0 6 0 4 4 3 3 3 7 4 3 6 3 4 4 6 0 4 -4z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil0","@d":"M-2521 3073l107 77 36 -10 24 -30 23 -3 20 13 -10 40 20 47 -23 16 3 60 -27 97 44 -7 23 14 -20 70 7 6 3 4 3 3 7 0 7 3 3 0 7 0 3 -3 3 -7 4 -3 6 -7 4 0 6 -3 4 -3 6 0 7 0 3 0 7 0 -3 30 16 26 -36 90 133 134 -7 0 -6 0 -4 3 -6 0 -4 3 -6 4 -4 6 -3 4 -3 10 -7 0 -27 -17 -13 40 -57 23 -43 -20 -23 14 -7 53 -23 47 -37 3 -30 -33 -33 0 -20 16 16 24 -10 30 -43 20 -77 -44 -13 24 -53 16 -14 -20 -33 34 -7 -34 -20 -3 -53 53 -50 -40 -40 -10 -10 -46 -20 -4 -13 7 -87 -17 -7 20 -40 -30 -43 10 -43 -10 -17 -40 33 -53 -26 -17 -4 -33 -46 -3 -90 -37 -10 17 26 20 -26 46 -17 7 -7 -33 17 -17 -30 -7 -27 24 -6 16 10 4 -24 36 -20 -3 -43 -50 13 -90 -46 -23 -4 -24 -66 -60 -10 -43 6 0 4 0 6 0 7 0 7 0 3 3 7 0 6 4 4 0 6 3 7 0 3 0 7 3 7 0 6 0 4 4 6 0 7 3 7 0 3 -3 7 0 3 -4 7 -3 6 -3 4 0 6 -4 7 0 3 0 7 0 7 4 6 0 4 0 6 0 7 3 3 0 7 0 7 0 6 0 4 0 6 3 7 0 7 -3 3 0 7 0 6 0 7 -3 10 0 7 0 3 -4 7 0 20 -96 43 -40 30 -107 -33 -67 -44 -20 -10 -46 17 -27 77 -27 20 20 36 7 24 -17 16 14 67 -20 10 -40 190 -107 83 60 -3 7 -10 3 -3 7 -4 3 -3 3 -3 7 -4 3 -3 4 -7 3 -3 3 -7 7 -3 0 -7 -3 -6 0 -4 -4 -6 4 -4 6 -3 7 0 3 7 0 6 -3 7 0 7 -3 3 3 7 0 3 3 3 7 0 7 0 3 0 7 -6 3 -4 7 -3 3 -3 3 -4 7 0 7 -3 3 0 7 3 3 7 3 3 4 7 0 7 -4 6 0 7 0 3 -3 7 -3 3 -4 4 -3 3 -3 0 -7 0 -7 0 -6 -7 -4 -3 0 -7 -3 -3 -3 -7 -4 0 -6 -3 -7 0 -3 0 -7 0 -7 3 -6 4 -4 3 -3 7 -3 40 13 20 27 43 16 13 -30 50 -20 0 44 37 -4m-150 324l7 3 6 0 4 -3 3 -4 7 -3 3 -3 7 -4 6 -3 0 -3 0 -7 4 -7 0 -3 3 -7 0 -6 -3 -4 -7 0 -3 4 -4 6 0 7 0 3 -3 7 -3 7 -4 3 -3 3 -7 0 -6 4 -4 3 -3 7m207 56l6 0 4 0 6 -3 4 -3 6 -4 4 -3 6 0 7 -3 3 0 7 0 7 0 6 0 4 0 6 0 7 3 3 7 7 0 3 -4 7 -3 3 0 7 -3 7 0 6 -4 4 4 6 3 4 3 3 4 10 0 -7 -4 -3 -3 -3 -7 0 -6 0 -7 3 -3 0 -7 3 -7 0 -3 0 -7 -3 -6 -7 0 -6 0 0 3 -4 7 0 6 -3 7 -3 3 -7 4 -3 3 -7 0 -7 0 -3 3 -7 -3 -6 3 -7 0 -3 0 -7 0 -7 0 -6 0 -4 0 -6 0 -7 4 -3 0 -7 0 -7 3 -3 3 -7 4 -3 3 -3 3 0 10m-204 -46l7 3 3 3 7 4 3 3 7 0 3 3 4 7 3 7 3 0 7 3 7 0 6 0 4 0 6 0 7 3 3 4 4 6 3 4 3 3 4 3 6 0 7 0 7 0 3 0 7 -3 6 0 4 -3 6 0 7 0 3 -4 7 -3 -3 -3 3 -7 3 -3 4 -4 6 -3 0 -7 -3 -3 -7 0 -3 3 -3 4 -4 6 -3 4 -3 3 -7 3 -7 4 -3 3 -3 3 -7 0 -7 0 -6 0 -4 -3 -6 0 -4 -3 -3 -7 -7 -3 -3 -4 -7 -3 -3 0 -7 0 -6 -3 -4 0 -3 -7 -3 -7 -4 -3 -3 -3 -7 3 -6 0 -7 -3 -3 0 -14 0m-510 60l4 3 6 0 7 0 3 -3 7 -4 3 -3 4 -3 6 -4 4 -3 6 0 7 0 7 -3 3 0 7 3 6 0 4 0 6 0 7 0 7 0 3 0 7 0 6 0 7 0 3 0 7 -3 3 0 7 0 7 3 3 0 7 7 3 3 7 3 3 4 7 3 3 3 7 0 3 4 7 3 3 3 7 4 0 6 0 4 -4 6 4 7 6 0 4 0 6 0 4 3 3 7 3 3 4 7 3 3 3 7 0 7 4 3 3 7 3 3 4 7 3 3 3 3 7 4 3 3 7 3 3 4 7 0 7 0 6 0 4 0 6 0 7 0 7 0 3 0 7 3 6 0 4 3 6 4 7 0 3 3 7 3 3 4 4 3 6 3 4 4 6 3 4 3 6 0 7 0 3 0 7 -3 0 -7 -3 -3 -7 -3 -3 0 -7 -4 -7 0 -3 -3 -7 -3 -3 -4 -7 -3 -3 -3 -7 -4 -3 -3 -7 -3 -3 -4 -3 -3 -7 -3 -7 0 -3 0 -7 0 -6 3 -7 0 -3 0 -7 0 -7 0 -6 -3 -4 -4 -6 0 -4 -6 -3 -4 -3 -3 -4 -7 -3 -3 -3 -3 -4 -7 -6 -3 -4 -7 -3 -3 -3 -4 0 -6 -4 -7 -3 -3 3 -7 4 -3 6 -4 7 0 3 -3 7 0 7 -3 3 0 7 0 6 -4 7 0 3 0 7 -3 7 0 3 -3 7 0 6 0 7 0 3 0 7 0 7 0 3 -4 7 0 6 -3 4 -3 6 0 7 -4 3 -3 7 -3 3 0 7 -4 7 -3 3 0 7 -3 6 0 4 0 6 0 4 -4 3 -6 7 -4 3 -3 3 -3 10 -7 -3 -7 0 -6 0 -7 -3 0 -7 7 0 3 0 7 -7 6 -3 4 -3 3 -7 3 -3 0 -7 0 -7 4 -3 3 -7 0 -6 3 -4 4 -6 0 -7 3 -3 0 -7 3 -3 4 -7 0 -7 3 -3 0 -7 3 -6 0 -7 0 -3 0 -7 4 -7 0 -6 0 -4 0 -6 0 -7 3 -3 0 -7 0 -7 3 -3 4 -7 3 -3 3 -7 0 -3 0 -7 -3 0 -7 0 -3 -6 -3 -7 0 -3 -4 -7 0 -7 4 -3 6 0 4 -7 3 -6 -3 -7 0 -3 -4 -4 -3 -6 -3 -4 -4 -6 -3 -4 -3 -3 -4 -3 -6 -4 -7 -3 -3 -3 -4 -7 4 -7 0 -6 0 -4 3 -3 3 -7 4 -6 0 -7 0 -3 -4 0 -6 6 -4 4 -3 -4 -7 -3 0 -7 4 -3 3 -3 3 -7 4 -3 0 -7 3 -7 0 -6 0 -4 3 -6 4 -7 0 -3 3 -7 3 -3 0 -7 4 -3 3 -7 3 -3 -3 -4 -3 7 -7 3 -3 4 -4 3 -6 3 -4 4 -6 3 -4 3 -6 4 -4 0 -6 3 -4 3 -6 0 -7 4 -3 3 -7 0 -3 3 -7 7 0 7 -3 6 0 4 -4 6 0 7 0 3 -3 4 -7 6 -3 4 -3 3 -4 7 -3 3 -3 7 -4 3 0 7 -3 6 0 4 0 6 -3 7 -4 3 -3 7 0 7 0 0 -3 -4 -7 -6 0 -7 0 -7 3 -3 0 -7 4 -3 3 -7 3 -3 0 -7 4 -6 3 -4 3 -3 4 -7 3 -3 3 -7 0 -3 -3 0 -7 3 -6 -3 -4 -7 -3 -3 7 0 6 0 4 0 6 0 7 -7 3 -3 0 -7 4 -3 3 -7 3 -3 4 -7 3 -3 3 -3 7 -4 3 0 7 -3 3 -3 7 -4 3 0 7 -3 3 -3 7 -4 7 0 3 -3 7 -3 3 -4 7 -3 3 -3 7 -4 3 -3 7 0 3 3 7z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil0","@d":"M-901 3767l20 -24 20 7 13 37 14 40 -64 93 17 70 -43 73 63 34 23 73 57 40 -17 60 -33 27 -17 -7 0 70 -73 53 -17 -10 -63 17 -20 -23 -40 26 -113 -23 -20 7 -14 33 -40 20 -40 -7 -16 -30 -24 37 -110 -20 -53 43 -213 -23 -10 37 -104 -30 -46 -57 -44 -17 -56 -60 -84 -30 -6 -50 -54 0 -40 -33 30 -7 27 -90 23 -20 30 4 7 -30 -50 -27 -23 -63 46 13 27 -10 -23 -37 16 -50 20 -26 50 3 7 -13 -27 -70 27 -14 23 -60 -10 -26 37 -4 7 -26 60 -47 20 50 23 -30 107 33 26 -16 20 -50 60 -4 10 40 -16 7 -4 40 -23 0 -17 67 24 16 16 -16 54 10 6 43 60 27 44 -24 33 17 43 -20 64 -7 66 -70 60 4 10 -57 54 0 23 -17 83 37 44 -17 33 57 -13 23 30 7 3 -3z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil0","@d":"M-2094 3723l13 -13 23 -73 24 -17 53 40 -3 60 -57 30 -3 0 6 -3 -3 -7 0 -7 -7 -3 -3 -3 -7 0 -6 -4 -4 -3 -6 0 -7 0 -3 3 -10 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil0","@d":"M-798 3780l80 -10 74 73 30 -33 30 40 56 -40 70 10 -3 -7 0 -3 -3 -7 -4 -6 0 -4 -3 -6 0 -7 -3 -3 0 -7 0 -7 -4 -3 0 -10 37 3 20 44 53 -7 60 17 27 -30 133 -77 34 40 26 -10 34 27 100 20 -10 76 0 4 -40 106 73 84 103 -10 24 43 0 67 -20 16 33 64 -67 23 -50 -37 -6 -26 -30 -10 -47 16 -47 40 -16 -13 -20 7 -27 26 -3 57 -27 30 17 113 -44 44 -53 10 -23 -40 -37 -7 -3 3 -87 64 -47 13 -33 -20 -30 47 -63 36 -67 124 -120 -40 60 -87 7 -53 -10 -7 -24 -13 0 -70 -50 -14 -13 -70 -53 10 -44 -23 0 -70 17 7 33 -27 17 -60 -57 -40 -23 -73 -63 -34 43 -73 -17 -70 64 -93 -14 -40 10 0 4 0 6 0 7 -4 7 0 3 0 7 -3 6 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil1","@d":"M-3514 537l36 -4 10 37 10 7 20 -34 44 4 -4 13 54 20 36 63 34 24 103 10 -3 50 -30 40 -37 0 -3 30 20 6 3 34 33 30 4 46 46 27 0 47 44 -24 26 20 -23 37 -40 10 -30 40 13 23 24 -13 40 20 10 50 -20 27 0 53 -30 37 -27 0 -43 36 16 44 -23 16 7 27 -20 57 -50 83 -7 -3 -7 0 -3 -4 -7 -3 -3 -3 -3 -7 -4 -7 0 -3 -3 -7 0 -6 -3 -4 -7 -3 -3 -3 -7 -4 -3 -3 -7 0 -7 0 -6 0 -4 0 -6 0 -7 0 -7 0 -3 0 -7 3 -6 0 -4 4 -6 0 -4 3 -6 7 -4 3 -3 3 -7 4 -3 3 -7 3 -3 0 -7 4 -6 0 -4 3 -6 0 -7 0 -7 0 -3 -3 -7 0 -6 0 -4 0 -6 0 -7 3 -3 0 -7 0 -7 -3 -6 0 -4 -4 -6 0 -4 -3 -6 -3 -4 -4 -6 -3 -4 -3 -6 -4 -4 -3 -3 -3 -10 -7 3 0 -20 -13 10 -10 -3 -7 -73 -10 10 -33 -17 -20 37 -100 -57 -47 7 -53 -14 -4 50 -80 -16 -66 16 -34 -23 -70 23 -46 -6 -20 30 -37 0 -47 33 0 30 -50 27 -110 20 -16 -10 -27 10 -33m-54 810l7 -7 3 -3 0 -7 0 -7 0 -6 0 -4 0 -6 4 -7 0 -3 6 -4 4 -3 6 -3 0 -7 0 -7 4 -3 3 -7 3 -3 0 -7 4 -3 3 -7 3 -3 4 -7 3 -3 0 -7 3 -3 7 -3 7 -4 3 -3 3 -3 4 -7 3 -3 3 -7 4 -3 -7 -4 -7 4 -6 0 -4 3 -3 7 -7 3 -3 3 -3 7 -4 3 0 7 -3 3 -3 7 -4 3 -3 4 -7 6 -3 4 -3 3 0 7 -4 6 0 4 -3 6 -3 4 -4 3 -6 3 -4 7 -3 3 0 7 -3 7 0 3 0 7 0 6 0 7 3 3 3 7 0 7z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil1","@d":"M-2001 973l-3 57 36 20 20 50 -33 20 -37 83 -20 7 0 57 -23 30 33 26 -23 117 13 13 -16 67 10 33 -37 14 -3 23 16 -3 0 13 -10 23 -20 4 -23 -7 -3 13 -14 0 -6 -6 -14 -17 -36 33 -27 -6 -13 23 6 7 -6 6 -20 -3 -10 20 -20 -10 -20 20 0 33 3 70 -37 17 -10 30 -20 -7 10 -23 -13 -30 -13 -30 -34 37 -43 -67 -33 17 -24 -17 -43 20 -20 -27 -37 17 -43 -23 -97 3 -53 -43 -93 13 -84 -30 -36 7 -40 -34 30 -63 -57 -50 17 -50 -17 -10 -50 -23 -23 20 -50 -10 20 -57 -7 -27 23 -16 -16 -44 43 -36 27 0 30 -37 0 -53 20 -27 33 20 33 -27 77 10 63 -16 4 -17 -10 -7 6 -13 14 0 30 -47 73 37 10 -27 50 17 17 -30 33 10 20 -10 17 40 36 23 60 10 27 -36 43 -14 54 17 30 -3 10 -24 40 4 16 -30 80 6 37 -23 17 13 26 -56 37 0 47 -40 26 6 17 30z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil1","@d":"M-1251 1010l83 -47 67 27 -17 27 24 16 -4 47 -16 13 60 7 43 57 -67 23 -60 -33 -33 56 33 34 10 -27 24 0 10 -10 6 7 -10 66 10 10 10 -3 7 0 3 0 7 0 7 0 6 0 4 3 3 7 3 3 4 4 6 6 4 4 3 3 7 3 3 4 7 3 3 0 7 3 6 0 4 4 6 0 7 3 3 3 4 4 6 3 4 3 3 7 3 3 0 7 4 7 0 3 -27 13 -27 -13 -50 3 -6 14 3 20 -23 26 0 10 16 4 -6 36 23 27 -3 43 -7 4 -10 -24 -10 10 20 30 -30 14 17 60 -20 46 53 84 57 0 10 43 -27 30 -3 37 -20 3 -10 30 -47 7 3 16 -30 44 -50 -40 -20 10 0 53 -36 23 -4 30 -23 14 -20 43 -7 20 -43 -17 -3 24 -77 16 -27 27 -6 40 -10 0 -7 -7 0 -26 -10 -4 -17 27 -43 -53 -43 -20 -17 -27 0 -3 -17 6 7 -56 -30 -27 20 -30 -27 -47 4 -26 50 -17 10 -27 43 -23 3 -20 -53 17 -13 -17 13 -27 -7 -10 -46 0 -7 -26 17 -17 -24 -20 -46 -3 -44 -184 -26 0 -10 -33 13 -20 33 -7 4 -23 -24 -50 17 -47 -13 -43 80 -50 20 13 10 -20 76 4 27 -30 40 0 -3 -27 -4 -27 -33 20 -10 -23 43 -27 -10 -20 -53 30 -20 -16 17 -50 10 0 6 0 4 0 6 0 7 3 3 0 7 3 3 -6 4 -4 0 -6 0 -7 -4 -3 -3 -7 -3 -3 23 -14 7 -26 43 -7 50 -60 77 30 43 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil1","@d":"M1042 1167l50 23 14 -10 70 10 46 53 30 -13 67 3 53 80 -10 44 30 16 -26 20 20 37 53 0 23 -27 30 0 7 -26 30 -7 3 10 0 40 44 13 -4 34 0 3 30 -3 -3 43 -87 23 14 34 -7 26 27 7 6 17 -20 23 14 37 -24 26 14 20 -24 17 20 7 -3 6 -17 7 0 33 -36 37 30 10 -17 67 -27 16 -23 -20 -13 14 -4 -24 -26 7 3 50 -17 17 37 43 -43 20 20 27 -4 16 -93 -3 -27 27 7 36 -30 14 -27 -10 -10 6 10 20 -63 74 -43 10 -20 -14 -14 24 -30 0 -76 36 -20 -16 -74 10 -10 23 -23 0 -20 -37 13 -20 -33 -23 7 -17 6 -3 0 -50 30 -10 24 -40 -10 -33 -44 -4 -20 -53 144 -153 -24 -44 40 -43 30 -97 20 -143 -6 -63 -30 -60 20 -10 16 -74 -36 -16 -7 -47 73 -103z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil1","@d":"M-921 1257l123 20 7 16 -17 30 20 17 7 3 10 -6 10 0 3 16 -10 7 -53 0 -23 -20 -44 10 -53 -50 20 -43z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil1","@d":"M-2841 2347l3 3 7 7 3 3 4 3 3 7 -3 7 0 6 -4 4 -3 6 3 7 0 3 7 4 3 -4 7 -3 3 -7 4 -3 0 -7 3 -3 7 0 3 7 3 3 7 3 7 0 3 4 7 3 3 7 3 0 7 0 7 0 3 3 3 7 4 3 0 7 0 6 0 4 3 6 3 4 4 0 0 -7 3 -3 7 0 6 0 7 0 3 3 4 3 3 7 0 7 3 3 0 7 4 6 3 4 7 3 3 3 3 4 7 -7 0 -3 0 -7 -3 -7 0 -3 -4 -7 -3 -3 -3 -7 -4 -3 -3 -7 -3 -3 -7 -3 -3 -7 -4 -3 -3 -4 -3 -6 -4 -4 -6 -3 43 3 0 30 10 7 17 -7 3 10 10 -3 30 -57 70 17 67 -17 26 27 24 -7 43 54 7 -24 30 -6 10 36 33 17 20 -13 3 -34 7 -13 20 3 13 24 20 -4 30 24 -13 63 23 17 7 26 -37 127 -50 57 -73 40 7 23 -27 33 -27 14 -30 -7 -3 33 37 -10 10 17 -17 53 -27 0 -3 30 -30 -16 7 -24 -37 10 -33 34 3 56 -30 30 -37 4 0 -44 -50 20 -13 30 -43 -16 -20 -27 -40 -13 3 -4 3 -6 4 -4 3 -3 3 -7 -3 -6 3 -7 -83 -60 -190 107 -10 40 -67 20 -16 -14 -24 17 -36 -7 -20 -20 46 -60 -33 -66 33 -54 -26 -36 23 -64 -13 -73 6 -60 14 -10 -50 -93 6 -37 7 0 7 0 6 0 4 0 6 -3 7 -4 3 -3 7 -3 3 -4 4 -3 3 -7 3 -3 0 -7 4 -6 0 -4 3 -6 3 -4 0 -6 4 -7 3 -3 3 -7 4 -3 3 -7 3 -3 4 -7 0 -3 3 -7 3 -3 7 -4 3 -3 4 -7 3 -3 7 -3 3 -4 3 -6 7 -4 3 0 7 -3 7 0 3 0 7 0 6 -3 7 0 3 0 7 0 3 -4 7 -6 3 -4 4 -3 6 -3 7 0 3 -4 4 -3 3 -3 10 0 7 0 6 0 7 0 3 0 7 0 7 3 6 0 4 0 6 0 7 3 3 4 7 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil1","@d":"M-2301 3207l93 23 77 -53 10 36 20 0 90 -80 3 -33 57 -10 23 63 50 -10 27 14 47 -30 30 -44 16 4 7 26 30 27 30 -40 30 -13 30 36 43 -16 34 36 110 30 23 27 20 -7 57 20 6 24 -13 23 -7 0 -3 3 -7 4 -3 3 -3 3 -7 4 -3 6 -4 4 -6 3 -4 3 -3 4 -3 6 -4 4 0 6 -6 4 -4 0 -6 0 -7 0 -7 3 -3 3 -7 4 -3 0 -7 3 -3 3 -7 4 -3 3 -7 3 -3 4 -3 3 23 27 7 3 50 -47 50 -10 0 -20 60 -20 13 -20 27 0 6 0 7 0 7 0 3 0 7 0 6 0 10 0 7 0 7 0 6 0 4 0 6 0 7 0 3 -3 4 0 26 0 40 -30 7 17 7 53 33 7 -17 80 30 16 44 100 46 50 -6 130 -44 17 -83 -37 -23 17 -54 0 -10 57 -60 -4 -66 70 -64 7 -43 20 -33 -17 -44 24 -60 -27 -6 -43 -54 -10 -16 16 -24 -16 17 -67 23 0 4 -40 16 -7 -10 -40 -60 4 -20 50 -26 16 -107 -33 -23 30 -20 -50 -60 47 -7 26 -37 4 -36 23 3 -60 -53 -40 -24 17 -23 73 -13 13 -7 4 -133 -134 36 -90 -16 -26 3 -30 -7 0 -3 0 -7 0 -6 0 -4 3 -6 3 -4 0 -6 7 -4 3 -3 7 -3 3 -7 0 -3 0 -7 -3 -7 0 -3 -3 -3 -4 -7 -6 20 -70 -23 -14 -44 7 27 -97 -3 -60 23 -16z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil1","@d":"M-1984 3720l36 -23 10 26 -23 60 -27 14 27 70 -7 13 -50 -3 -20 26 -16 50 23 37 -27 10 -46 -13 23 63 50 27 -7 30 -30 -4 -23 20 -27 90 -30 7 -63 0 -13 10 6 23 -13 10 -43 24 -30 36 -40 0 -20 50 -90 57 -4 70 27 50 3 43 -10 34 -30 20 -26 -4 -50 40 -14 -30 30 -20 -10 -20 -26 -10 -47 10 -50 47 3 33 -20 40 -96 20 -44 30 -96 -46 -4 -24 -30 -20 -23 4 -13 33 -60 -13 -10 -44 -120 -23 10 -50 -80 -27 -90 24 -30 -74 -70 -110 -20 -13 3 -3 3 -7 4 -3 3 -7 3 -3 0 -7 -3 -7 0 -6 0 -4 0 -6 0 -7 0 -3 0 -7 3 -7 0 -6 4 -4 3 -6 3 -4 4 -3 3 -7 3 -3 4 -3 3 -7 3 -7 0 -3 4 -7 0 -6 -4 -4 0 -6 -3 -7 -7 -3 0 -7 0 -7 0 -6 0 -7 0 -3 0 -7 4 -7 3 -3 3 -3 7 -4 3 -6 4 -4 6 -3 4 -3 3 -4 7 -3 3 -3 7 -4 3 -3 7 -3 3 -4 3 -3 7 -3 3 -4 7 -3 3 -3 4 -4 6 -6 4 -4 3 -3 7 -3 3 -4 3 -3 7 -7 3 -3 -3 -30 53 -80 -6 -40 -27 -30 -73 0 6 -43 -56 -30 6 -47 20 3 24 -36 -10 -4 6 -16 27 -24 30 7 -17 17 7 33 17 -7 26 -46 -26 -20 10 -17 90 37 46 3 4 33 26 17 -33 53 17 40 43 10 43 -10 40 30 7 -20 87 17 13 -7 20 4 10 46 40 10 50 40 53 -53 20 3 7 34 33 -34 14 20 53 -16 13 -24 77 44 43 -20 10 -30 -16 -24 20 -16 33 0 30 33 37 -3 23 -47 7 -53 23 -14 43 20 57 -23 13 -40 27 17 7 0 0 3 -4 7 0 6 0 4 0 6 -3 7 0 7 0 3 -3 7 -4 6 -3 4 -3 6 -4 4 -3 3 -7 3 -3 4 -7 3 -3 3 -7 0 -3 -3 -3 -7 -4 -3 0 -7 -6 0 -4 4 0 3 0 7 0 6 0 7 0 3 -3 7 0 7 -3 3 0 7 -4 6 0 7 0 3 4 10 3 4 7 -4 -4 -6 0 -4 0 -6 0 -7 0 -7 4 -3 6 -3 4 -4 6 -3 4 -3 6 0 4 -4 6 -3 4 -3 6 -4 4 -3 6 -3 4 -4 3 -6 3 -4 4 -6 3 -4 3 -6 0 -4 4 -6 3 -7 0 -3 3 -7 0 -7 4 -3 3 -7 0 -3 7 -3 3 -4 7 -3 6 0 7 3 3 4 4 6 3 4 3 6 4 4 3 3 3 7 7 3 3 0 7 3 3 7 0 3 4 7 3 7 0 3 3 7 4 3 6 3 10 0 -3 -3 0 -7 -3 -6 -4 -4 -3 -6 -3 -4 3 -6 3 -7 -3 -3 -3 -4 -4 -3 -6 -3 -4 -4 -6 -3 -4 -3 -6 -4 -4 -3 0 -7 7 -3 3 3 7 0 7 -3 3 0 57 -30m-437 303l0 4 7 0 6 0 4 -4 6 -3 4 -3 6 -4 4 -3 6 0 7 -3 3 0 7 -4 7 -3 3 -3 7 -4 3 -3 3 -3 7 -4 3 -3 4 -3 3 -7 10 -7 -7 0 -6 0 -7 0 -3 4 -7 3 -3 3 -7 4 -3 3 0 7 -7 3 -3 3 -7 0 -7 4 -3 3 -7 0 -6 3 -4 0 -6 4 -7 0 -3 3 -4 7 -3 6m30 60l3 -3 7 0 7 0 6 3 4 0 6 0 7 4 3 0 7 3 7 0 6 0 4 0 6 -3 7 0 3 -7 7 0 3 0 7 -3 7 0 6 0 4 0 6 0 7 0 7 0 3 3 7 3 3 4 0 6 3 7 4 3 3 4 7 3 3 3 7 4 3 3 3 3 7 4 3 3 7 3 7 0 3 -6 0 -7 -3 -3 -4 -7 -3 -3 -7 0 -6 -4 -4 -3 -6 0 -4 -3 -6 -7 -4 -3 -3 -4 -3 -6 3 -7 0 -3 3 -7 0 -7 -3 -3 -7 0 -6 0 -4 3 -6 4 -4 3 -6 3 -7 0 -3 0 -7 0 -7 0 -6 0 -4 0 -6 0 -7 0 -3 4 -7 3 -3 3 -7 0 -7 4 -6 0 -4 0 -6 -4 -7 0 -3 -3 -7 -3 -3 -4 -7 0 -7 4 -3 3 0 7 0 6z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil1","@d":"M-2818 4783l4 17 26 7 -20 33 20 27 -36 20 -7 40 -17 3 -20 -20 -116 23 -44 60 7 17 80 10 0 33 47 90 -30 17 6 37 -23 13 27 37 -14 40 4 86 -27 30 17 64 -14 40 27 30 -17 50 -13 6 -20 -10 -23 -56 -57 -70 -217 -140 10 -27 -6 -3 -30 16 6 14 -10 6 -80 -33 -113 13 -27 14 -10 -7 -20 -37 -6 -13 -4 -7 0 -6 0 -7 0 -7 0 -3 0 -7 0 -6 0 -4 -3 -6 0 -7 0 -7 0 -3 0 -7 0 -6 0 -7 0 -3 -3 -7 0 -7 0 -6 0 -4 0 -6 0 -7 0 -7 0 -3 0 -7 0 -6 -4 -7 0 -7 0 -3 -3 -7 0 -3 -3 -7 -4 -3 -6 -7 -4 -3 -3 -3 -3 -7 -7 -7 47 -73 16 -73 77 -64 30 -106 70 -7 13 -30 57 13 47 -130 80 27 -10 50 120 23 10 44 60 13 13 -33 23 -4 30 20 4 24 96 46z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil2","@d":"M-348 880l47 -10 20 40 30 -30 83 17 7 50 -20 53 -27 27 27 33 43 7 4 -50 16 -10 10 6 -6 20 20 20 30 -6 146 70 60 3 44 -13 13 33 -50 10 -17 47 4 46 -30 27 -67 37 -7 40 -56 0 -27 70 -27 -7 -16 23 10 37 -37 37 -7 33 14 23 -30 37 -17 63 17 70 50 54 -50 86 -4 14 -46 -10 -30 13 -60 -40 -24 10 -40 -30 -43 -3 -27 -20 0 -34 44 -56 53 3 13 -20 -3 -13 -7 -4 -3 -3 -7 -3 -3 -4 -7 0 -3 -3 -7 -3 -6 -4 -4 -3 -6 0 -4 -3 -6 -4 -7 0 -3 -3 -7 0 -7 -3 -3 -4 -3 -3 0 -7 0 -6 -4 -7 -6 -7 -4 -3 -6 -7 -4 -3 -3 -3 -3 -4 -7 -3 -3 -7 -4 -3 -6 -3 -4 -4 -3 -3 -13 -3 -7 -4 -7 0 -3 0 -7 0 -6 0 -7 0 -3 0 -4 -3 -6 -7 -4 -3 -3 -7 -3 -3 -4 -3 -3 -4 -7 -3 -3 0 -7 0 -6 0 -7 0 -3 0 -7 -3 -7 0 -3 -4 -7 -3 -3 -3 -7 -4 -3 -3 -7 0 -3 -3 -7 -4 -6 0 -4 -3 -6 0 -7 0 -7 0 -3 -3 -7 0 -6 0 -7 -4 -3 0 -7 -3 -7 0 -3 0 -7 -3 -6 0 -4 -4 -6 0 -7 0 -7 -3 37 -7 13 -50 -13 -26 -23 20 -24 -30 47 -37 27 20 36 -17 -20 -56 27 -14 -3 -36 23 -34 -10 -36 23 -44 40 10 20 -26 27 -7 13 -60 60 -47 -6 -60 43 -10 23 -46 30 -7z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil2","@d":"M-391 1827l43 3 40 30 24 -10 60 40 30 -13 46 10 4 -14 50 -86 -50 -54 -17 -70 17 -63 30 -37 -14 -23 7 -33 37 -37 -10 -37 16 -23 27 7 27 -70 56 0 7 -40 67 -37 -4 27 17 16 -17 24 7 36 -13 20 16 17 -16 27 23 3 -3 60 46 23 -53 104 17 6 13 -26 33 6 17 -46 0 -17 10 -10 7 3 6 50 -16 40 6 130 -13 10 -17 -26 -30 66 60 30 60 0 77 80 7 80 73 27 10 37 63 40 20 -17 24 3 66 164 27 10 0 -14 7 0 6 14 37 0 -3 6 -4 4 -3 3 -7 3 -6 0 -4 0 -6 0 -7 0 -3 4 -7 3 0 7 0 6 -3 4 0 6 0 7 -7 0 -7 0 -3 0 -7 -3 -6 -4 -4 0 -6 0 -7 0 -3 4 -7 3 0 10 3 3 7 0 7 0 6 4 4 0 6 0 7 3 3 3 7 0 7 0 3 0 7 -3 3 -7 3 -3 0 -7 4 -6 3 -4 3 -6 4 -4 6 0 4 -3 6 0 7 -3 3 -4 4 -3 3 -7 3 -3 4 -7 3 -3 3 -7 0 -6 4 -4 0 -6 0 -7 3 -3 3 -4 7 -3 7 -3 6 0 4 0 6 0 7 0 3 3 7 3 3 7 4 3 3 4 7 3 6 0 10 0 -3 -7 -3 -3 -4 -7 -3 -3 -3 -3 -7 -4 -3 -3 -7 -3 7 -14 50 10 -7 17 33 23 -13 20 20 37 -3 23 0 4 -34 23 -6 37 -47 26 7 40 -80 -3 -17 23 -33 -53 -120 -47 -50 -46 -14 13 -36 -17 -44 -53 -46 -3 -4 30 -3 3 0 -3 -23 3 0 43 -20 14 30 23 -34 60 -43 -33 -23 46 -30 0 -17 -26 -33 50 -30 -14 10 -36 -24 6 -43 -20 -27 27 -33 -7 -27 17 7 33 -23 17 -24 -3 -16 -24 -54 54 10 20 -13 26 -83 7 -104 -103 -70 -37 -16 -23 -54 20 -50 -24 -16 -100 23 -36 10 -50 37 6 6 37 50 -23 -26 -60 6 -44 -13 -30 17 -10 20 7 36 -43 24 0 16 -40 -40 -57 24 -43 -27 -77 0 -33z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil2","@d":"M-914 1427l33 -47 33 27 -10 53 10 3 7 0 3 4 4 3 3 7 3 3 7 0 7 3 6 0 4 0 6 0 7 -3 3 -3 7 0 7 0 3 -4 7 0 6 0 7 0 3 4 7 0 3 3 7 3 7 0 6 0 4 4 6 0 7 3 3 0 7 0 7 3 3 0 7 4 6 0 7 0 3 3 7 0 7 0 6 0 4 3 6 0 7 4 3 3 7 0 3 3 7 4 3 3 7 3 3 4 7 0 7 3 3 0 7 0 6 0 7 0 3 0 7 3 3 4 4 3 3 3 3 7 4 3 6 7 4 3 3 0 7 0 6 0 7 0 3 0 7 0 7 4 13 3 3 3 4 4 6 3 4 3 3 7 7 3 3 4 3 3 4 3 6 7 4 3 6 7 4 7 0 6 0 7 3 3 3 4 7 3 7 0 3 3 7 0 6 4 4 3 6 0 4 3 6 4 7 3 3 3 7 0 3 4 7 3 3 3 7 4 3 13 -13 20 -53 -3 -44 56 0 34 27 20 0 33 -57 30 -76 -23 -4 -47 -26 -23 13 -37 -33 -7 -40 17 -20 -40 -67 3 -33 24 -7 -4 -10 14 0 20 -37 50 -90 -14 20 -53 -16 -23 -27 13 -7 47 -33 23 -23 -10 -10 -43 -57 0 -53 -84 20 -46 -17 -60 30 -14 -20 -30 10 -10 10 24 7 -4 3 -43 -23 -27 6 -36 -16 -4 0 -10 23 -26 -3 -20 6 -14 50 -3 27 13 27 -13 3 10 0 7 3 3 4 7 3 3 3 7 4 3 3 7 3 3 4 7z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil2","@d":"M-3671 1377l17 20 -10 33 73 10 3 7 -10 10 20 13 -3 0 10 7 3 3 4 3 6 4 4 3 6 3 4 4 6 3 4 3 6 0 4 4 6 0 7 3 7 0 3 0 7 -3 6 0 4 0 6 0 7 0 3 3 7 0 7 0 6 0 4 -3 6 0 7 -4 3 0 7 -3 3 -3 7 -4 3 -3 4 -3 6 -7 4 -3 6 0 4 -4 6 0 7 -3 3 0 7 0 7 0 6 0 4 0 6 0 7 0 7 0 3 3 7 4 3 3 7 3 3 4 0 6 3 7 0 3 4 7 3 7 3 3 7 3 3 4 7 0 7 3 50 -83 50 10 23 -20 50 23 17 10 -17 50 57 50 -30 63 -10 30 -34 -10 -40 34 -10 33 -30 27 0 23 20 17 -13 46 -30 17 -43 -33 -34 6 -10 70 -70 27 -26 -3 -27 23 -17 -37 -6 0 -17 -6 -13 23 -47 3 7 -33 -57 -23 -73 13 -20 17 -7 0 -3 -34 -14 0 -6 20 -27 0 -43 40 -44 7 -20 -10 4 -33 -24 -10 -6 -27 36 -50 40 -23 4 -27 -24 -20 -30 10 -6 -70 3 0 3 -7 4 -3 3 -7 0 -3 0 -7 0 -6 0 -7 -3 -3 3 -7 0 -7 -27 7 -16 -13 3 -40 -37 -37 -6 -100 93 -50 87 17 53 -20z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil2","@d":"M-2098 1627l-16 90 50 10 13 43 -53 107 10 20 60 -10 40 63 30 7 33 -34 27 4 33 46 37 -13 13 13 -10 27 17 13 23 0 20 -20 47 14 36 -27 60 3 17 24 30 3 -20 30 30 27 -7 56 17 -6 0 3 17 27 -10 43 -64 30 -133 23 -90 30 17 50 -17 24 -33 -10 -7 6 10 27 -43 37 6 30 -6 3 -20 -7 -20 24 -44 10 -26 30 -80 -47 -74 17 -30 -24 -20 4 -13 -24 -20 -3 -7 13 -26 -6 26 -47 -23 -83 17 -37 -17 -43 3 -4 40 -23 4 -23 -17 -14 10 -26 -30 -10 0 -50 -23 -37 0 -23 30 -24 3 -20 -7 -3 14 -63 -17 -20 27 -27 -47 -47 -3 -70 0 -33 20 -20 20 10 10 -20 20 3 6 -6 -6 -7 13 -23 27 6 36 -33 14 17 6 6 14 0 3 -13 23 7z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil2","@d":"M752 2710l24 0 13 20 33 10 -6 37 70 20 23 36 43 17 -83 170 -90 103 -17 60 -56 40 -20 80 -57 70 -43 80 -47 -16 -17 -30 -36 -7 -24 40 -43 33 -23 -33 -67 3 -10 -63 -20 -7 -20 27 -37 -47 -26 -30 3 -43 30 -17 10 -30 40 0 30 -23 37 -87 0 -40 26 10 50 -16 10 -37 60 -57 -36 -46 43 -30 -23 -24 3 -70 -47 -3 -3 -37 27 -13 13 13 37 -20 10 -46 20 -27 63 43 47 -10 13 30 73 -33z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil2","@d":"M-2148 4220l40 33 54 0 6 50 84 30 56 60 44 17 46 57 104 30 20 6 16 34 -3 36 30 64 -60 113 -3 3 -7 147 43 13 -20 40 40 27 -26 47 30 10 60 76 -7 14 43 63 -53 -7 -37 44 -43 6 -13 80 -40 34 -34 -27 -10 -43 -36 6 -17 37 -27 10 -33 0 -10 -30 -23 -3 -27 -70 -50 16 -17 -16 -10 -60 -30 -7 -30 -50 4 -67 -4 -6 -16 3 -4 -3 10 -27 -30 -47 -43 7 0 17 -7 0 -10 -14 -3 17 -10 3 -33 -6 -97 66 -30 -33 0 -33 3 -4 7 0 7 -3 3 -3 7 0 3 -4 7 -3 3 -3 7 0 6 -4 7 -3 -7 -47 -16 -13 -4 -40 -36 -23 0 -54 -37 -30 0 -33 -57 -73 30 -20 10 -34 -3 -43 -27 -50 4 -70 90 -57 20 -50 40 0 30 -36 43 -24 13 -10 -6 -23 13 -10 63 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil2","@d":"M-1714 4497l10 -37 213 23 53 -43 110 20 24 -37 16 30 40 7 40 -20 14 -33 20 -7 113 23 40 -26 20 23 63 -17 17 10 73 -53 44 23 53 -10 13 70 50 14 0 70 24 13 10 7 -7 53 -60 87 -27 13 -10 57 -26 16 -27 -6 -47 40 -63 123 7 53 -47 30 -10 27 -33 -10 -30 13 -50 -33 -27 0 -40 40 -47 20 -80 -40 -60 63 -80 37 -23 -3 -27 70 -56 10 -34 -17 -43 -63 7 -14 -60 -76 -30 -10 26 -47 -40 -27 20 -40 -43 -13 7 -147 3 -3 60 -113 -30 -64 3 -36 -16 -34 -20 -6m846 186l7 -3 7 -3 3 -4 3 -6 4 -4 0 -6 -4 -4 -3 -6 -3 -7 0 -3 0 -7 3 -3 3 -7 7 -3 3 -4 4 -6 3 -4 3 -3 0 -7 0 -3 -6 0 -4 7 -3 3 -3 7 -4 3 -3 3 -3 7 -7 3 3 4 0 6 0 7 -3 7 0 3 0 7 -3 6 -4 4 0 6 -3 7 3 3z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil2","@d":"M-721 4687l120 40 77 76 -47 37 -3 50 13 20 -27 67 7 40 -33 -4 -4 14 10 50 -10 16 -40 10 -3 14 -50 23 -53 47 -14 120 -13 10 -47 -14 -13 -20 -37 -10 -56 130 -30 -3 -10 10 26 90 -53 47 27 50 -67 40 3 26 -120 7 -23 23 -40 14 -93 -40 -74 16 -30 -10 7 -43 -33 -40 -127 -37 -33 -33 -64 -27 -6 -23 -30 -3 -10 -77 -20 -43 40 -34 13 -80 43 -6 37 -44 53 7 34 17 56 -10 27 -70 23 3 80 -37 60 -63 80 40 47 -20 40 -40 27 0 50 33 30 -13 33 10 10 -27 47 -30 -7 -53 63 -123 47 -40 27 6 26 -16 10 -57 27 -13z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil2","@d":"M-524 4803l23 20 23 -10 24 17 43 0 17 23 -10 40 3 104 103 146 54 0 63 47 -77 97 -16 -7 0 3 10 7 -64 220 -56 40 0 33 -34 24 -3 26 -37 30 -36 14 -57 -74 -43 -13 -37 20 -33 -10 -47 10 -43 80 -50 23 -34 -3 -23 -17 -27 7 -40 -40 -120 3 -3 -26 67 -40 -27 -50 53 -47 -26 -90 10 -10 30 3 56 -130 37 10 13 20 47 14 13 -10 14 -120 53 -47 50 -23 3 -14 40 -10 10 -16 -10 -50 4 -14 33 4 -7 -40 27 -67 -13 -20 3 -50 47 -37z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil3","@d":"M-3514 537l-10 33 10 27 -20 16 -27 110 -30 50 -33 0 0 47 -30 37 6 20 -23 46 23 70 -16 34 16 66 -50 80 -33 7 -17 -13 -53 -7 -17 7 4 16 -27 -6 -10 13 -20 -17 -10 10 -7 24 -30 0 -10 26 -73 -10 -97 40 -10 34 -23 10 -37 -20 -3 26 -7 4 -6 -14 -17 4 -10 33 -47 37 -10 -7 0 -27 -16 -3 -4 -17 30 -73 40 -27 -13 -23 -43 -7 -14 34 -30 -44 24 -20 -20 -30 6 -33 -3 -3 -23 -10 0 6 -24 -13 -16 27 -20 -27 20 -30 -7 -50 20 -37 47 -16 0 -14 -20 10 0 -26 40 -27 36 13 30 -33 20 3 7 -13 -10 -27 73 -36 70 40 57 -20 33 6 60 -43 30 17 14 -4 0 -23 16 -10 30 33 30 -6 7 -30 -27 0 -46 -34 10 -43 16 -7 -6 -10 16 -13 17 0 37 -47 13 10 30 -26 20 3 7 -43 40 0 46 -37 20 0 0 33 -3 7 7 10 13 3 7 -23 66 -37 14 7 -20 27z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil3","@d":"M-3174 727l20 -27 -4 -27 40 -10 80 20 20 -10 17 17 47 -13 70 16 90 -6 56 -17 64 20 46 -23 30 10 34 -34 36 -13 70 57 7 20 150 -4 67 20 36 37 47 -10 30 17 290 56 -17 30 14 30 -7 24 -40 -17 -13 20 -47 7 -7 53 -53 3 -17 -30 -26 -6 -47 40 -37 0 -26 56 -17 -13 -37 23 -80 -6 -16 30 -40 -4 -10 24 -30 3 -54 -17 -43 14 -27 36 -60 -10 -36 -23 -17 -40 -20 10 -33 -10 -17 30 -50 -17 -10 27 -73 -37 -30 47 -14 0 -6 13 10 7 -4 17 -63 16 -77 -10 -33 27 -33 -20 -10 -50 -40 -20 -24 13 -13 -23 30 -40 40 -10 23 -37 -26 -20 -44 24 0 -47 -46 -27 -4 -46 -33 -30 -3 -34 -20 -6 3 -30 37 0 30 -40z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil3","@d":"M-1831 823l157 0 220 -73 20 20 -34 17 4 16 13 4 40 -37 80 -30 77 33 0 14 -14 3 17 20 50 -3 7 10 46 3 44 33 0 27 -17 13 -77 -3 -63 47 10 73 -43 0 -77 -30 -50 60 -43 7 -7 26 -23 14 -7 0 -7 -4 -6 0 -4 0 -6 -3 -7 0 -3 3 -7 4 -3 3 -4 7 -3 3 -3 3 -7 4 -3 3 -7 0 -7 -3 -3 0 -7 -4 -6 0 -7 0 -3 4 -7 0 -3 3 -4 7 4 6 3 4 3 3 7 3 7 -3 6 0 7 0 7 -3 6 0 7 0 3 0 7 -4 7 -3 3 0 7 -3 -17 50 20 16 53 -30 10 20 -43 27 10 23 33 -20 4 27 3 27 -40 0 -27 30 -76 -4 -57 -36 30 -17 -3 -20 -30 17 -14 -7 -10 -77 -60 -13 -33 -53 -23 -7 -57 27 -87 3 -20 -50 -36 -20 3 -57 53 -3 7 -53 47 -7 13 -20 40 17 7 -24 -14 -30 17 -30z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil3","@d":"M-778 1040l10 30 -40 27 4 23 26 13 77 0 80 44 10 36 -23 34 3 36 -27 14 20 56 -36 17 -27 -20 -47 37 24 30 23 -20 13 26 -13 50 -37 7 -3 -3 -7 0 -3 -4 -7 0 -6 0 -7 0 -3 4 -7 0 -7 0 -3 3 -7 3 -6 0 -4 0 -6 0 -7 -3 -7 0 -3 -3 -3 -7 -4 -3 -3 -4 -7 0 -10 -3 10 -53 -33 -27 -33 47 -4 -7 -3 -3 -3 -7 -4 -3 -3 -7 -3 -3 -4 -7 -3 -3 0 -7 -3 -10 0 -3 -4 -7 0 -7 -3 -3 -3 -7 -4 -3 -6 -3 -4 -4 -3 -3 -7 -3 -6 0 -4 -4 -6 0 -7 -3 -3 0 -7 -3 -3 -4 -7 -3 -3 -3 -4 -4 -6 -6 -4 -4 -3 -3 -3 -7 -4 -3 -6 0 -7 0 -7 0 -3 0 -7 0 -10 3 -10 -10 10 -66 -6 -7 -10 10 -24 0 -10 27 -33 -34 33 -56 60 33 67 -23 -43 -57 -60 -7 16 -13 4 -47 -24 -16 17 -27 57 3 3 -36 30 3 20 40 -13 40 93 43 83 7 -10 -40 60 -10m-143 217l-20 43 53 50 44 -10 23 20 53 0 10 -7 -3 -16 -10 0 -10 6 -7 -3 -20 -17 17 -30 -7 -16 -123 -20z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil3","@d":"M1532 1380l114 27 3 6 20 47 23 13 40 -10 27 -43 67 -17 93 27 20 30 30 10 23 -23 40 6 20 -43 57 -10 80 -53 50 0 30 30 43 -10 0 56 20 14 37 -7 20 20 -10 40 -37 23 -26 -20 -24 37 10 63 34 14 20 30 -10 33 23 40 -10 50 -53 40 -24 43 -53 54 -60 23 -23 30 -14 -60 -56 -3 -60 26 -44 -46 -73 -14 -7 -43 4 -7 20 4 50 -30 -4 -17 -26 -20 26 -10 10 -37 -10 -30 -36 4 -34 -37 -33 10 -20 -27 -73 30 -64 -23 -16 -20 3 -13 23 0 0 -14 -10 -13 17 -47 -77 -13 -43 10 3 -43 -30 3 0 -3 4 -34 -44 -13 0 -40z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil3","@d":"M1396 2057l26 6 4 20 -27 20 47 30 3 54 57 26 -10 14 16 33 24 -3 -7 30 -20 3 3 7 30 10 0 23 -230 77 -23 40 -30 -10 -77 30 -140 176 24 27 33 -3 57 36 -4 4 -63 46 -50 64 -33 0 -7 -14 43 -10 -3 -30 -47 17 -40 70 -43 -17 -23 -36 -70 -20 6 -37 -33 -10 -13 -20 -24 0 -3 -10 33 -20 24 -37 -17 -53 23 -57 -13 -36 -27 -10 -6 -24 -7 -40 47 -26 6 -37 34 -23 0 -4 3 -23 23 0 10 -23 74 -10 20 16 76 -36 30 0 14 -24 20 14 43 -10 63 -74 -10 -20 10 -6 27 10 30 -14 -7 -36 27 -27 93 3 4 -16z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil3","@d":"M-601 4727l67 -124 63 -36 30 -47 33 20 47 -13 87 -64 3 -3 37 7 23 40 53 -10 44 -44 -17 -113 27 -30 3 -57 27 -26 20 -7 16 13 47 -40 47 -16 30 10 6 26 50 37 10 113 -43 60 7 50 50 14 16 33 -6 57 -30 56 6 34 7 10 67 103 43 40 43 13 7 27 -7 10 -10 -7 -13 7 -30 60 33 40 40 13 7 -3 -3 -17 3 0 20 24 -20 23 -113 40 -37 -23 -50 6 -27 17 4 10 -10 3 -54 -26 -20 16 -43 0 -70 54 -17 50 -23 0 -60 33 -63 -47 -54 0 -103 -146 -3 -104 10 -40 -17 -23 -43 0 -24 -17 -23 10 -23 -20 -77 -76z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil3","@d":"M-2468 4647l57 73 0 33 37 30 0 54 36 23 4 40 16 13 7 47 -7 3 -6 4 -7 0 -3 3 -7 3 -3 4 -7 0 -3 3 -7 3 -7 0 -3 4 0 33 30 33 97 -66 33 6 10 -3 3 -17 10 14 7 0 0 -17 43 -7 30 47 -10 27 4 3 16 -3 4 6 -4 67 30 50 30 7 10 60 17 16 50 -16 27 70 -44 3 7 37 -40 30 -23 -34 -30 30 -24 -6 -6 6 16 17 -6 20 -60 43 -70 17 -7 17 -43 36 -20 -3 -24 -37 -26 -3 -57 50 -10 -3 -10 -24 23 -20 0 -26 -33 -7 -17 10 17 30 -3 17 -30 33 -17 0 -13 -17 -24 -10 -33 4 -13 20 -84 13 -26 43 -100 -3 -64 -33 -43 -4 0 -3 -20 -13 -30 10 -27 -30 14 -40 -17 -64 27 -30 -4 -86 14 -40 -27 -37 23 -13 -6 -37 30 -17 -47 -90 0 -33 -80 -10 -7 -17 44 -60 116 -23 20 20 17 -3 7 -40 36 -20 -20 -27 20 -33 -26 -7 -4 -17 44 -30 96 -20 20 -40 -3 -33 50 -47 47 -10 26 10 10 20 -30 20 14 30 50 -40 26 4z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil3","@d":"M-2871 5540l0 3 43 4 64 33 100 3 26 -43 84 -13 13 -20 33 -4 24 10 13 17 17 0 30 -33 3 -17 -17 -30 17 -10 33 7 0 26 -23 20 10 24 10 3 57 -50 26 3 24 37 20 3 43 -36 23 30 7 40 -27 50 -33 10 -37 -30 -26 -4 -30 30 30 44 -24 66 -36 34 -37 10 -40 63 -47 -10 -6 3 3 20 43 10 20 -23 17 -3 30 3 43 80 10 60 10 7 17 -7 20 20 -43 60 -14 53 -6 0 -14 -13 -30 -3 -6 3 0 77 -90 43 -17 -3 -40 -37 -73 -17 -54 -66 -16 -7 -57 -3 -17 -14 -36 -63 -27 -17 -90 -170 17 0 26 47 7 3 20 -26 -3 -7 -17 3 -7 -13 0 -37 -36 -30 -44 -3 -33 -73 10 -24 53 -30 14 -60 13 -13 30 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil4","@d":"M-1104 853l26 -10 37 20 -3 -30 46 -23 4 -20 73 3 23 -20 34 34 100 23 50 40 -10 23 10 17 -37 47 -3 63 -24 20 -60 10 10 40 -83 -7 -93 -43 13 -40 -20 -40 -30 -3 -3 36 -57 -3 -67 -27 -83 47 -10 -73 63 -47 77 3 17 -13 0 -27z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil4","@d":"M-378 833l30 47 -30 7 -23 46 -43 10 6 60 -60 47 -13 60 -27 7 -20 26 -40 -10 -23 44 -80 -44 -77 0 -26 -13 -4 -23 40 -27 -10 -30 24 -20 3 -63 37 -47 -10 -17 10 -23 50 17 63 -14 40 17 127 -40 46 -37 10 20z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil4","@d":"M-4108 1297l10 -34 97 -40 73 10 10 -26 30 0 7 -24 10 -10 20 17 10 -13 27 6 -4 -16 17 -7 53 7 17 13 33 -7 14 4 -7 53 57 47 -37 100 -53 20 -87 -17 -93 50 6 100 37 37 -3 40 16 13 27 -7 0 7 -3 7 3 3 0 7 0 6 0 7 0 3 -3 7 -4 3 -3 7 -3 0 -7 3 -3 4 -7 3 -7 0 -3 3 -7 0 -6 4 -4 3 -6 3 -4 4 -3 3 -7 3 -3 4 -7 3 -3 3 -7 0 -6 4 -4 0 -6 3 -7 0 -7 0 -3 0 -7 0 -6 0 -7 0 -3 0 -7 -3 -7 0 -3 0 -7 0 -6 0 -7 3 -3 3 -4 4 -6 3 -4 3 -6 4 -4 0 -6 0 -7 -4 -7 0 -3 4 -7 3 -3 0 -7 3 -3 4 -7 3 -3 3 -3 7 -4 3 -3 7 -3 3 -4 4 -3 6 -7 4 -3 3 -3 3 -4 4 -6 6 -4 4 -3 3 -73 40 0 -160 23 -13 7 3 6 -10 -6 -13 43 -47 83 -43 7 -40 -7 -7 -30 50 -70 13 0 -53 20 -3 54 -64 -7 -10 -40 30 -43 0 -17 -46 -27 -7 4 -10 26 -17 10 14 -3 10 10 10 13 -4 -3 -20 13 -3 -13 -53 33 -17 20 -43z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil4","@d":"M1599 1510l43 -10 77 13 -17 47 10 13 0 14 -23 0 -3 13 16 20 64 23 73 -30 20 27 33 -10 34 37 36 -4 10 30 -10 37 -26 10 26 20 4 17 -50 30 -20 -4 -4 7 7 43 73 14 44 46 60 -26 56 3 14 60 -274 167 -70 126 -260 87 0 -23 -30 -10 -3 -7 20 -3 7 -30 -24 3 -16 -33 10 -14 -57 -26 -3 -54 -47 -30 27 -20 -4 -20 -26 -6 -20 -27 43 -20 -37 -43 17 -17 -3 -50 26 -7 4 24 13 -14 23 20 27 -16 17 -67 -30 -10 36 -37 0 -33 17 -7 3 -6 -20 -7 24 -17 -14 -20 24 -26 -14 -37 20 -23 -6 -17 -27 -7 7 -26 -14 -34 87 -23z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil4","@d":"M-1308 2450l30 50 34 10 -4 23 24 37 -57 147 33 26 -13 50 33 14 10 -14 14 34 26 -4 -10 37 24 23 0 24 20 -7 30 20 0 50 26 13 14 24 -34 106 10 7 40 -27 17 84 0 3 -13 10 20 40 -57 17 -7 -17 -40 30 -26 0 -4 0 -3 3 -7 0 -6 0 -4 0 -6 0 -7 0 -7 0 -10 0 -6 0 -7 0 -3 0 -7 0 -7 0 -6 0 -27 0 -13 20 -60 20 0 20 -50 10 -50 47 -7 -3 -23 -27 3 -3 3 -4 7 -3 3 -3 7 -4 3 -3 7 -3 3 0 7 -4 3 -3 7 -3 7 0 6 0 4 0 6 -4 0 -6 4 -4 3 -6 3 -4 4 -3 6 -3 4 -4 3 -6 7 -4 3 -3 3 -3 7 -4 3 -3 7 0 13 -23 -6 -24 -57 -20 -20 7 -23 -27 -110 -30 -34 -36 -43 16 -30 -36 -30 13 -30 40 -30 -27 -7 -26 -16 -4 -30 44 -47 30 -27 -14 24 -56 -4 -27 10 -7 30 14 24 -60 56 -7 0 -97 24 -26 -4 -24 7 -6 17 13 40 -13 6 -50 47 -70 53 0 17 -87 27 -43 63 -24 90 -110 43 -13z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil4","@d":"M3082 3223l-163 -76 -83 16 -10 -6 0 -47 -24 -17 20 -30 124 -10 16 -10 0 -10 14 24 16 -7 0 -3 4 -7 13 0 23 43 37 4 13 53 24 23 0 7 -20 -7 0 7 16 20 -20 33z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil4","@d":"M-131 3167l67 3 3 -40 13 0 14 27 16 30 54 0 40 36 0 20 -47 20 -40 14 -37 -7 -43 -7 -40 -96z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil4","@d":"M2509 3607l-7 10 -3 0 -60 53 -13 0 -54 -60 -73 10 -30 -10 -33 -70 13 -27 -47 -36 -73 30 -10 46 -7 0 -30 -43 -50 0 -13 -30 7 -27 113 -80 107 -113 36 -10 54 -47 66 -6 57 -37 17 3 3 4 -63 40 13 30 43 -20 7 3 -7 30 -33 7 10 36 70 34 53 -47 60 23 10 20 -13 64 -23 6 6 34 -53 60 -13 66 -7 14 -27 36 -3 4z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil4","@d":"M242 3353l37 47 20 -27 20 7 10 63 67 -3 23 33 43 -33 24 -40 36 7 17 30 47 16 -7 47 -63 113 -7 57 0 7 27 83 46 83 -6 24 -4 6 37 84 90 103 0 23 -23 -23 -40 23 -14 -16 -30 23 -53 -20 -83 60 -67 3 0 24 40 3 7 13 -67 47 -17 -37 -50 -16 -46 23 -20 -27 -27 0 -13 -16 0 -67 -24 -43 -103 10 -73 -84 40 -106 0 -4 10 -76 -100 -20 -34 -27 -26 10 -34 -40 -13 -20 13 -87 64 -86 36 10 27 -14 -3 -43 36 -87 -3 -46 -3 -17 36 -17 80 -10 44 14 23 76 53 -20z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil4","@d":"M2382 3780l-23 -20 3 -3 24 -4 3 7 -7 20z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil4","@d":"M1499 4057l-13 -27 -7 0 -57 0 -10 -3 -6 -54 3 -6 40 -10 3 -10 -6 -34 36 -30 94 -43 43 17 -7 20 17 20 0 10 -40 33 -23 43 -40 20 -4 47 -23 7z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil4","@d":"M699 4060l130 50 0 17 27 33 -70 50 -14 30 -60 13 -33 67 -33 -3 -117 63 -23 30 -10 50 -20 -7 -30 20 0 94 -64 33 -3 33 -7 94 -26 13 -34 93 -43 -13 -43 -40 -67 -103 -7 -10 -6 -34 30 -56 6 -57 -16 -33 -50 -14 -7 -50 43 -60 -10 -113 67 -23 -33 -64 20 -16 13 16 27 0 20 27 46 -23 50 16 17 37 67 -47 -7 -13 -40 -3 0 -24 67 -3 83 -60 53 20 30 -23 14 16 40 -23 23 23 0 -23z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil4","@d":"M1519 4193l-10 -56 27 -30 6 0 34 46 23 10 20 -10 3 0 4 7 -4 7 -23 13 -33 -17 -14 0 -33 30z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil4","@d":"M-1934 5297l23 3 10 30 33 0 27 -10 17 -37 36 -6 10 43 34 27 20 43 10 77 30 3 6 23 64 27 33 33 127 37 33 40 -7 43 -33 -13 -77 23 -66 -20 -34 27 -156 -7 -64 94 -53 20 -20 43 -57 17 -126 -7 -134 57 -43 73 -20 -20 -17 7 -10 -7 -10 -60 -43 -80 -30 -3 -17 3 -20 23 -43 -10 -3 -20 6 -3 47 10 40 -63 37 -10 36 -34 24 -66 -30 -44 30 -30 26 4 37 30 33 -10 27 -50 -7 -40 -23 -30 7 -17 70 -17 60 -43 6 -20 -16 -17 6 -6 24 6 30 -30 23 34 40 -30 -7 -37 44 -3z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil5","@d":"M-3514 537l20 -27 -14 -7 -66 37 -7 23 -13 -3 -7 -10 3 -7 0 -33 -20 0 -46 37 -40 0 -7 43 -20 -3 -30 26 -13 -10 -37 47 -17 0 -16 13 6 10 -16 7 -10 43 46 34 27 0 -7 30 -30 6 -30 -33 -16 10 0 23 -14 4 -30 -17 -60 43 -33 -6 -57 20 -70 -40 -73 36 10 27 -7 13 -20 -3 -30 33 -36 -13 -40 27 0 26 20 -10 0 14 -47 16 -20 37 7 50 -20 30 20 27 16 -27 24 13 0 -6 23 10 3 3 -6 33 20 30 -24 20 30 44 14 -34 43 7 13 23 -40 27 -30 73 4 17 16 3 0 27 10 7 47 -37 10 -33 17 -4 6 14 7 -4 3 -26 37 20 23 -10 -20 43 -33 17 13 53 -13 3 3 20 -13 4 -10 -10 3 -10 -10 -14 -26 17 -4 10 27 7 17 46 43 0 40 -30 7 10 -54 64 -20 3 0 53 70 -13 30 -50 7 7 -7 40 -83 43 -43 47 6 13 -6 10 -7 -3 -23 13 0 160 73 -40 3 -3 -73 60 -10 83 23 47 24 156 -10 40 23 64 10 103 20 33 7 7 6 87 -66 250 3 0 23 -34 20 -80 10 0 7 10 0 7 -20 20 -3 10 0 20 23 10 0 3 -17 4 -20 50 -33 0 -10 26 -60 214 -37 83 27 40 0 3 -123 287 -20 103 -94 117 -73 33 -7 30 10 24 0 43 -53 113 0 94 -57 120 14 26 -7 20 7 14 80 23 100 -17 20 -13 30 -83 36 -50 14 0 3 50 27 50 -4 13 -70 33 4 17 36 -3 0 3 -16 7 -4 13 -3 0 -17 -10 -20 7 7 30 0 3 -10 -13 -23 -4 -4 -3 7 -3 -10 -24 -13 0 -44 14 -6 13 33 83 -20 74 7 6 16 -10 57 0 110 -53 63 33 10 -36 10 0 10 6 4 10 -20 37 16 17 -3 6 -53 -16 0 10 -7 0 -17 -17 -3 0 30 50 10 127 -33 123 -37 57 43 30 -10 126 20 14 0 6 -10 7 -20 70 10 107 -53 103 7 37 -37 53 3 30 -50 97 24 16 70 -43 93 -10 33 -37 44 17 3 -13 7 3 3 17 27 16 56 -10 54 27 60 -13 113 66 110 -3 127 -87 60 -20 20 4 13 -10 -3 -47 6 13 20 37 10 7 27 -14 113 -13 80 33 10 -6 -6 -14 30 -16 6 3 -10 27 217 140 57 70 23 56 20 10 13 -6 17 -50 30 -10 20 13 -30 0 -13 13 -14 60 -53 30 -10 24 33 73 44 3 36 30 0 37 7 13 17 -3 3 7 -20 26 -7 -3 -26 -47 -17 0 90 170 27 17 36 63 17 14 57 3 16 7 54 66 73 17 40 37 17 3 90 -43 0 -77 6 -3 30 3 14 13 0 24 6 -24 14 -53 43 -60 43 -73 134 -57 126 7 57 -17 20 -43 53 -20 64 -94 156 7 34 -27 66 20 77 -23 33 13 30 10 74 -16 93 40 40 -14 23 -23 120 -7 120 -3 40 40 27 -7 23 17 34 3 50 -23 43 -80 47 -10 33 10 37 -20 43 13 57 74 36 -14 37 -30 3 -26 34 -24 0 -33 56 -40 64 -220 -10 -7 0 -3 16 7 77 -97 60 -33 23 0 17 -50 70 -54 43 0 20 -16 54 26 10 -3 -4 -10 27 -17 50 -6 37 23 113 -40 20 -23 -20 -24 -3 0 3 17 -7 3 -40 -13 -33 -40 30 -60 13 -7 10 7 7 -10 -7 -27 34 -93 26 -13 7 -94 3 -33 64 -33 0 -94 30 -20 20 7 10 -50 23 -30 117 -63 33 3 33 -67 60 -13 14 -30 70 -50 -27 -33 0 -17 -130 -50 -90 -103 -37 -84 4 -6 6 -24 -46 -83 -27 -83 0 -7 7 -57 63 -113 7 -47 43 -80 57 -70 20 -80 56 -40 17 -60 90 -103 83 -170 40 -70 47 -17 3 30 -43 10 7 14 33 0 50 -64 63 -46 4 -4 -57 -36 -33 3 -24 -27 140 -176 77 -30 30 10 23 -40 230 -77 260 -87 70 -126 274 -167 23 -30 60 -23 53 -54 24 -43 53 -40 10 -50 -23 -40 10 -33 -20 -30 -34 -14 -10 -63 24 -37 26 20 37 -23 10 -40 -20 -20 -37 7 -20 -14 0 -56 -26 -34 3 -23 -50 -23 -17 -220 -3 0 -10 43 -23 -3 -10 -24 20 -43 20 -7 0 -16 -20 -14 3 -6 13 0 17 -67 -17 -10 0 -7 17 4 23 -60 80 -90 64 -30 43 6 70 -90 190 -140 47 0 10 40 30 20 40 0 3 -6 -13 -10 20 -17 16 7 7 23 37 -3 60 -7 40 0 36 23 34 14 16 0 37 6 0 -3 3 -20 24 -3 23 23 17 20 43 3 33 -3 34 0 20 -17 -20 -10 13 -10 53 0 24 -3 16 -7 0 4750 -36 -6 -277 40 -37 -17 -86 30 -50 53 -90 44 -100 0 -50 -20 -10 43 -40 17 -30 -7 -40 -40 -70 13 -57 84 -123 80 -100 6 -10 -20 -34 -6 -183 66 -93 0 -220 47 -77 -10 -50 30 -50 0 -67 23 -66 30 -44 54 -66 36 -64 10 -106 80 -67 20 -23 44 -50 23 -47 47 -3 10 -40 120 -87 70 -110 -24 -3 -3 -7 -30 -40 -23 -67 20 -23 76 -30 10 -30 37 -37 0 -16 -20 -64 -17 -26 40 -37 -3 -60 33 -70 80 -20 0 -40 130 -27 37 -43 33 -53 4 -37 20 -140 120 -23 -4 -87 40 -57 4 -63 -20 -40 10 -67 -27 -50 -20 -53 40 -100 -3 -57 -24 -66 -66 20 36 53 44 -20 6 -67 -33 -10 -83 -20 -40 -13 -34 10 -40 -17 -6 -53 110 -33 0 -34 36 -83 34 -140 -17 -73 -50 -37 10 -13 40 -30 13 -50 -10 -20 -33 -34 20 -36 -7 -60 34 -67 6 -43 27 -220 -43 -217 -147 -67 -97 -43 -23 -17 -80 -26 -13 -14 -107 30 -30 -3 -13 -53 -10 -47 3 -70 60 -60 -7 -47 37 -70 -13 -26 10 -60 213 -170 433 -144 284 -2296 0 0 -6920 5206 0 -33 183 3 73 -43 80 -33 70 -44 40 -43 4 -17 16 -10 -20 -46 37 -127 40 -40 -17 -63 14 -50 -17 -50 -40 -100 -23 -34 -34 -23 20 -73 -3 -4 20 -46 23 3 30 -37 -20 -26 10 -44 -33 -46 -3 -7 -10 -50 3 -17 -20 14 -3 0 -14 -77 -33 -80 30 -40 37 -13 -4 -4 -16 34 -17 -20 -20 -220 73 -157 0 -290 -56 -30 -17 -47 10 -36 -37 -67 -20 -150 4 -7 -20 -70 -57 -36 13 -34 34 -30 -10 -46 23 -64 -20 -56 17 -90 6 -70 -16 -47 13 -17 -17 -20 10 -80 -20 -40 10 4 27 -20 27 3 -50 -103 -10 -34 -24 -36 -63 -54 -20 4 -13 -44 -4 -20 34 -10 -7 -10 -37 -36 4m6596 2686l20 -33 -16 -20 0 -7 20 7 0 -7 -24 -23 -13 -53 -37 -4 -23 -43 -13 0 -4 7 0 3 -16 7 -14 -24 0 10 -16 10 -124 10 -20 30 24 17 0 47 10 6 83 -16 163 76m-573 384l3 -4 27 -36 7 -14 13 -66 53 -60 -6 -34 23 -6 13 -64 -10 -20 -60 -23 -53 47 -70 -34 -10 -36 33 -7 7 -30 -7 -3 -43 20 -13 -30 63 -40 -3 -4 -17 -3 -57 37 -66 6 -54 47 -36 10 -107 113 -113 80 -7 27 13 30 50 0 30 43 7 0 10 -46 73 -30 47 36 -13 27 33 70 30 10 73 -10 54 60 13 0 60 -53 3 0 7 -10m-127 173l7 -20 -3 -7 -24 4 -3 3 23 20m-883 277l23 -7 4 -47 40 -20 23 -43 40 -33 0 -10 -17 -20 7 -20 -43 -17 -94 43 -36 30 6 34 -3 10 -40 10 -3 6 6 54 10 3 57 0 7 0 13 27m20 136l33 -30 14 0 33 17 23 -13 4 -7 -4 -7 -3 0 -20 10 -23 -10 -34 -46 -6 0 -27 30 10 56z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil5","@d":"M-1494 1087l3 3 3 7 4 3 0 7 0 6 -4 4 -3 6 -7 -3 -3 0 -7 -3 -6 0 -4 0 -6 0 -10 0 -7 3 -3 0 -7 3 -7 4 -3 0 -7 0 -6 0 -7 3 -7 0 -6 0 -7 3 -7 -3 -3 -3 -3 -4 -4 -6 4 -7 3 -3 7 0 3 -4 7 0 6 0 7 4 3 0 7 3 7 0 3 -3 7 -4 3 -3 3 -3 4 -7 3 -3 7 -4 3 -3 7 0 6 3 4 0 6 0 7 4 7 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil5","@d":"M-3568 1347l0 -7 -3 -7 -3 -3 0 -7 0 -6 0 -7 0 -3 3 -7 0 -7 3 -3 4 -7 6 -3 4 -3 3 -4 3 -6 0 -4 4 -6 0 -7 3 -3 3 -4 7 -6 3 -4 4 -3 3 -7 3 -3 0 -7 4 -3 3 -7 3 -3 7 -3 3 -7 4 -3 6 0 7 -4 7 4 -4 3 -3 7 -3 3 -4 7 -3 3 -3 3 -7 4 -7 3 -3 3 0 7 -3 3 -4 7 -3 3 -3 7 -4 3 0 7 -3 3 -3 7 -4 3 0 7 0 7 -6 3 -4 3 -6 4 0 3 -4 7 0 6 0 4 0 6 0 7 0 7 -3 3 -7 7z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil5","@d":"M-2534 1950l3 7 0 6 -3 7 -4 3 -3 7 -3 3 0 7 0 3 0 7 3 7 3 3 4 7 3 3 0 7 3 6 0 7 0 3 -6 4 -7 3 -7 0 -3 0 -7 0 -6 0 0 7 -4 6 4 4 3 6 3 7 0 3 -6 4 -7 0 -7 -4 -3 4 -7 0 -3 3 -3 7 0 6 -4 4 0 6 0 7 -3 3 -7 4 -3 0 -7 0 -6 3 -4 7 0 3 -3 7 0 6 3 4 0 6 -3 4 -7 3 -3 3 -3 -6 0 -7 -4 -3 0 -7 0 -7 -3 -3 -7 -3 0 -7 0 -7 4 0 6 0 7 0 3 -3 7 -3 7 -4 3 0 7 -3 3 -3 0 -7 0 -7 0 -6 3 -7 4 -3 3 0 7 0 3 -7 7 -3 0 -4 3 -6 3 -4 4 -6 6 -4 4 -3 3 -3 3 -4 4 -6 0 -7 0 -7 0 -3 -4 -7 -3 -3 -3 -7 0 -6 0 -7 3 -3 3 -7 4 0 6 0 4 -3 3 -7 3 -3 4 -7z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil5","@d":"M759 2217l7 3 3 3 7 4 3 3 3 3 4 7 3 3 3 7 -10 0 -6 0 -7 -3 -3 -4 -4 -3 -3 -7 -7 -3 -3 -3 -7 0 -6 0 -4 0 -6 0 -7 3 -7 3 -3 4 -3 3 0 7 0 6 -4 4 0 6 -3 7 -3 3 -4 7 -3 3 -3 7 -4 3 -3 4 -7 3 -6 0 -4 3 -6 0 -4 4 -3 6 -3 4 -4 6 0 7 -3 3 -3 7 -7 3 -3 0 -7 0 -7 0 -3 -3 -7 -3 -6 0 -4 0 -6 -4 -7 0 -7 0 -3 -3 0 -10 7 -3 3 -4 7 0 6 0 4 0 6 4 7 3 3 0 7 0 7 0 0 -7 0 -6 3 -4 0 -6 0 -7 7 -3 3 -4 7 0 6 0 4 0 6 0 7 -3 3 -3 4 -4 3 -6 0 -7 3 -7 0 -6 4 -4 3 -6 3 -4 7 -3 3 -3 4 -7 3 -3 7 -4 3 -3 7 0 6 -3 4 0 6 0 7 3 3 3 7 4z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil5","@d":"M-2838 2350l-3 -3 3 0 7 -4 3 -3 7 -3 3 -7 4 -3 3 -7 3 -3 7 0 3 3 7 7 0 3 0 7 0 6 0 7 0 7 3 3 4 3 6 0 7 0 3 4 4 3 6 7 0 3 4 7 3 6 3 4 4 3 6 0 4 -3 6 -7 4 0 3 3 7 7 6 3 4 4 3 6 3 4 4 3 3 7 7 3 3 3 3 7 4 3 3 7 3 3 4 7 0 3 3 7 0 7 0 3 -7 7 -3 -4 -3 -3 -7 -3 -3 -4 -4 -6 0 -7 -3 -3 0 -7 -3 -7 -4 -3 -3 -3 -7 0 -6 0 -7 0 -3 3 0 7 -4 0 -3 -4 -3 -6 0 -4 0 -6 0 -7 -4 -3 -3 -7 -3 -3 -7 0 -7 0 -3 0 -3 -7 -7 -3 -3 -4 -7 0 -7 -3 -3 -3 -3 -7 -7 0 -3 3 0 7 -4 3 -3 7 -7 3 -3 4 -7 -4 0 -3 -3 -7 3 -6 4 -4 0 -6 3 -7 -3 -7 -4 -3 -3 -3 -7 -7z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil5","@d":"M-804 2803l0 10 -4 4 -6 3 -7 0 -3 3 -4 4 -6 3 -4 7 -3 3 0 7 -3 3 0 7 0 6 0 7 3 3 7 4 3 3 3 7 -3 3 -3 7 -4 3 -3 3 -3 7 0 7 0 3 -4 7 -3 3 -3 7 -4 0 -6 -7 3 -7 0 -3 0 -7 3 -6 0 -7 4 -3 0 -7 -4 -3 -3 -7 -3 -3 0 -7 3 -7 3 -3 0 -7 4 -6 0 -4 3 -6 3 -4 4 -6 0 -7 3 -3 3 -7 4 -3 6 0 7 -4 7 0 3 0 7 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil5","@d":"M-731 2977l7 0 6 0 7 3 3 3 0 4 -3 6 -7 0 -6 0 -4 -3 -6 0 -7 -3 -3 -4 -7 0 -3 -3 -7 -3 -3 0 -7 -4 -7 0 -6 0 -4 0 -6 0 -7 0 -7 0 -3 4 -7 0 -6 3 -4 3 -3 4 -3 6 -4 4 0 6 0 7 0 3 4 7 3 3 3 7 4 3 3 4 3 6 0 7 0 3 -3 7 0 7 -3 6 -4 0 -6 0 -7 0 -3 -3 -4 -3 -3 -7 0 -3 -3 -7 0 -7 0 -6 0 -4 0 -6 -4 -7 -3 -3 -7 -4 -3 -3 -7 -3 0 -4 4 -6 6 -4 4 -6 3 -4 3 -3 7 -3 3 -4 7 -3 7 0 3 -3 7 -4 3 0 7 0 6 0 7 0 3 0 7 -3 7 0 3 -3 7 0 6 -4 4 0 6 0 7 0 3 7 0 3 4 7 3 3 3 4 7 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil5","@d":"M-2711 2997l3 6 -3 7 -3 3 -4 4 -3 6 -3 4 -7 3 -3 3 -4 4 -3 6 0 7 0 7 0 3 3 7 0 6 7 4 3 3 7 3 3 0 7 4 0 6 0 7 0 7 -3 3 -4 3 -3 4 -7 3 -3 3 -7 0 -6 0 -7 4 -7 0 -3 -4 -7 -3 -3 -3 0 -7 3 -3 0 -7 4 -7 3 -3 3 -3 4 -7 6 -3 0 -7 0 -3 0 -7 -3 -7 -3 -3 -7 0 -3 -3 -7 3 -7 0 -6 3 -7 0 0 -3 3 -7 4 -6 6 -4 4 4 6 0 7 3 3 0 7 -7 3 -3 7 -3 3 -4 4 -3 3 -7 3 -3 4 -3 3 -7 10 -3z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil5","@d":"M-3178 3467l-3 -7 0 -3 3 -7 4 -3 3 -7 3 -3 4 -7 3 -3 3 -7 0 -3 4 -7 3 -7 3 -3 0 -7 4 -3 3 -7 3 -3 0 -7 4 -3 3 -7 3 -3 7 -3 3 -4 7 -3 3 -3 7 -4 3 0 7 -3 0 -7 0 -6 0 -4 0 -6 3 -7 7 3 3 4 -3 6 0 7 3 3 7 0 3 -3 7 -3 3 -4 4 -3 6 -3 7 -4 3 0 7 -3 3 -3 7 -4 3 0 7 -3 7 0 6 0 4 7 0 3 -7 0 -7 0 -3 3 -7 4 -6 3 -4 0 -6 0 -7 3 -3 0 -7 4 -3 3 -7 3 -3 4 -4 3 -6 3 -4 7 -3 3 -7 0 -6 0 -4 4 -6 0 -7 3 -7 0 -3 7 0 3 -3 7 -4 3 0 7 -3 6 -3 4 0 6 -4 4 -3 6 -3 4 -4 6 -3 4 -3 6 -4 4 -3 3 -7 7 4 3 3 3 7 -3 3 -3 7 -4 3 0 7 -3 3 -3 7 0 6 -4 4 -3 6 0 7 0 7 -3 3 0 7 -4 3 -3 3 -3 7 -4 3 0 4 7 -4 3 -6 4 0 6 3 4 7 0 6 0 7 -4 3 -3 4 -3 6 0 7 0 7 -4 3 4 3 3 4 7 3 6 3 4 4 3 6 3 4 4 6 3 4 3 3 4 7 0 6 3 7 -3 0 -4 3 -6 7 -4 7 0 3 4 7 0 6 3 0 3 0 7 7 3 3 0 7 0 3 -3 7 -3 3 -4 7 -3 7 0 3 0 7 -3 6 0 4 0 6 0 7 0 7 -4 3 0 7 0 6 0 7 -3 3 0 7 -3 7 0 3 -4 7 -3 3 0 7 -3 6 0 4 -4 6 -3 7 0 3 -3 7 -4 7 0 3 0 7 -3 3 -3 3 -4 7 -6 0 -7 0 -3 7 -7 3 0 0 7 0 6 3 7 -10 7 -3 3 -3 3 -7 4 -3 6 -4 4 -6 0 -4 0 -6 0 -7 3 -3 0 -7 3 -7 4 -3 0 -7 3 -3 3 -7 4 -6 0 -4 3 -6 3 -7 0 -3 4 -7 0 -7 0 -3 0 -7 0 -6 0 -7 0 -3 3 -7 0 -7 3 -3 0 -7 0 -6 4 -7 0 -3 0 -7 3 -7 0 -3 3 -7 0 -6 4 -4 3 -3 7 3 3 4 7 0 6 3 4 3 3 4 7 6 3 4 7 3 3 3 3 4 7 3 3 3 4 4 6 6 0 4 4 6 3 7 0 7 0 3 0 7 0 6 -3 7 0 3 0 7 0 7 3 3 3 3 4 7 3 3 3 7 4 3 3 7 3 3 4 7 3 3 3 7 0 7 4 3 0 7 3 3 3 0 7 -7 3 -3 0 -7 0 -6 0 -4 -3 -6 -3 -4 -4 -6 -3 -4 -3 -3 -4 -7 -3 -3 -3 -7 0 -6 -4 -4 -3 -6 0 -7 -3 -3 0 -7 0 -7 0 -6 0 -4 0 -6 0 -7 0 -7 0 -3 -4 -7 -3 -3 -3 -7 -4 -3 -3 -3 -3 -4 -7 -3 -3 -3 -7 -4 -3 0 -7 -3 -7 -3 -3 -4 -7 -3 -3 -3 -7 -4 -3 -6 0 -4 0 -6 0 -4 -7 4 -6 0 -4 0 -6 -7 -4 -3 -3 -7 -3 -3 -4 -7 0 -3 -3 -7 -3 -3 -4 -7 -3 -3 -3 -7 -7 -3 0 -7 -3 -7 0 -3 0 -7 3 -3 0 -7 0 -6 0 -7 0 -3 0 -7 0 -7 0 -6 0 -4 0 -6 0 -7 -3 -3 0 -7 3 -7 0 -6 0 -4 3 -6 4 -4 3 -3 3 -7 4 -3 3 -7 0 -6 0 -4 -3z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil5","@d":"M-2671 3397l3 -7 4 -3 6 -4 7 0 3 -3 4 -3 3 -7 3 -7 0 -3 0 -7 4 -6 3 -4 7 0 3 4 0 6 -3 7 0 3 -4 7 0 7 0 3 -6 3 -7 4 -3 3 -7 3 -3 4 -4 3 -6 0 -7 -3z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil5","@d":"M-2464 3453l0 -10 3 -3 3 -3 7 -4 3 -3 7 -3 7 0 3 0 7 -4 6 0 4 0 6 0 7 0 7 0 3 0 7 0 6 -3 7 3 3 -3 7 0 7 0 3 -3 7 -4 3 -3 3 -7 0 -6 4 -7 0 -3 6 0 7 0 3 6 0 7 0 3 -3 7 0 7 -3 3 0 7 0 6 3 7 3 3 7 4 -10 0 -3 -4 -4 -3 -6 -3 -4 -4 -6 4 -7 0 -7 3 -3 0 -7 3 -3 4 -7 0 -3 -7 -7 -3 -6 0 -4 0 -6 0 -7 0 -7 0 -3 0 -7 3 -6 0 -4 3 -6 4 -4 3 -6 3 -4 0 -6 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil5","@d":"M-3991 3567l0 -7 0 -7 3 -6 4 -4 6 0 7 4 3 -4 7 -3 3 -3 0 -7 -3 -3 -7 -4 0 -6 0 -7 4 -3 3 -7 3 -3 4 -7 3 -3 3 -4 4 -6 3 -4 0 -6 0 -7 0 -7 0 -3 0 -7 0 -6 0 -7 3 -3 0 -7 -3 -3 -3 -7 -4 -3 0 -7 4 0 6 0 7 3 7 0 3 4 3 6 -3 7 0 7 -3 3 0 7 -4 6 0 4 0 6 0 7 0 7 0 3 -3 7 0 6 0 7 0 3 7 4 6 0 4 3 3 3 -3 4 -7 0 -7 0 -3 0 -7 0 -3 6 0 4 3 6 0 7 0 7 -3 0 -3 3 -7 3 -3 7 -4 3 -3 7 -3 3 -4 4 -6 3 -7 0 -3 -3 -7 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil5","@d":"M-2668 3407l14 0 3 0 7 3 6 0 7 -3 3 3 4 3 3 7 3 7 4 0 6 3 7 0 3 0 7 3 3 4 7 3 3 7 4 3 6 0 4 3 6 0 7 0 7 0 3 -3 3 -3 7 -4 7 -3 3 -3 3 -4 4 -6 3 -4 3 -3 7 0 3 3 0 7 -6 3 -4 4 -3 3 -3 7 3 3 -7 3 -3 4 -7 0 -6 0 -4 3 -6 0 -7 3 -3 0 -7 0 -7 0 -6 0 -4 -3 -3 -3 -3 -4 -4 -6 -3 -4 -7 -3 -6 0 -4 0 -6 0 -7 0 -7 -3 -3 0 -3 -7 -4 -7 -3 -3 -7 0 -3 -3 -7 -4 -3 -3 -7 -3z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil5","@d":"M-484 3603l-4 4 -6 0 -4 -4 -6 -3 -4 -3 -3 -7 -3 -3 -4 -4 -6 0 -7 0 -7 0 -3 -3 -7 -3 -3 -4 0 -6 0 -7 -3 -3 -4 -7 -3 -3 -3 -4 -7 -3 -3 -7 -4 -3 -3 -3 -3 -7 -4 -7 -3 -3 -3 -3 -7 -4 0 -3 -3 -7 0 -6 -4 -4 0 -6 0 -7 4 -7 3 4 3 3 7 3 3 4 4 6 0 4 3 6 3 4 7 3 7 0 6 0 4 0 6 7 0 3 -3 7 -3 3 0 7 3 6 0 4 3 6 4 4 6 3 4 7 3 3 7 3 3 0 7 0 6 0 7 4 3 6 0 4 0 6 4 4 3 6 3 4 4 6z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil5","@d":"M-2094 3723l10 0 3 -3 7 0 6 0 4 3 6 4 7 0 3 3 7 3 0 7 3 7 -6 3 -7 3 -7 0 -3 -3 -7 3 0 7 4 3 6 4 4 3 6 3 4 4 6 3 4 3 3 4 3 3 -3 7 -3 6 3 4 3 6 4 4 3 6 0 7 3 3 -10 0 -6 -3 -4 -3 -3 -7 0 -3 -3 -7 -4 -7 0 -3 -3 -7 -7 -3 -3 0 -7 -3 -3 -7 -3 -3 -4 -4 -3 -6 -3 -4 -4 -6 -3 -4 -7 -3 -6 0 -7 3 -3 4 -7 3 0 3 -3 7 -4 3 0 7 -3 7 0 3 -3 7 -4 6 0 4 -3 6 -3 4 -4 6 -3 4 -3 6 -4 4 -6 3 -4 3 -6 4 -4 3 -6 3 -4 4 -6 0 -4 3 -6 3 -4 4 -6 3 -4 3 0 7 0 7 0 6 0 4 4 6 -7 4 -3 -4 -4 -10 0 -3 0 -7 4 -6 0 -7 3 -3 0 -7 3 -7 0 -3 0 -7 0 -6 0 -7 0 -3 4 -4 6 0 0 7 4 3 3 7 3 3 7 0 3 -3 7 -3 3 -4 7 -3 3 -3 4 -4 3 -6 3 -4 4 -6 3 -7 0 -3 0 -7 3 -7 0 -6 0 -4 0 -6 4 -7 0 -3 3 -10 3 -4 4 -6 6 -4 4 -3 6 0 4 -3 6 0 7 0 7 -4z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil5","@d":"M-2421 4023l3 -6 4 -7 3 -3 7 0 6 -4 4 0 6 -3 7 0 3 -3 7 -4 7 0 3 -3 7 -3 0 -7 3 -3 7 -4 3 -3 7 -3 3 -4 7 0 6 0 7 0 -10 7 -3 7 -4 3 -3 3 -7 4 -3 3 -3 3 -7 4 -3 3 -7 3 -7 4 -3 0 -7 3 -6 0 -4 3 -6 4 -4 3 -6 3 -4 4 -6 0 -7 0 0 -4z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil5","@d":"M-2391 4083l0 -6 0 -7 3 -3 7 -4 7 0 3 4 7 3 3 3 7 0 6 4 4 0 6 0 7 -4 7 0 3 -3 7 -3 3 -4 7 0 6 0 4 0 6 0 7 0 7 0 3 0 7 0 6 -3 4 -3 6 -4 4 -3 6 0 7 0 3 3 0 7 -3 7 0 3 -3 7 3 6 3 4 4 3 6 7 4 3 6 0 4 3 6 4 7 0 3 3 4 7 3 3 0 7 -3 6 -7 0 -7 -3 -3 -3 -7 -4 -3 -3 -3 -3 -7 -4 -3 -3 -7 -3 -3 -4 -4 -3 -3 -7 0 -6 -3 -4 -7 -3 -3 -3 -7 0 -7 0 -6 0 -4 0 -6 0 -7 0 -7 3 -3 0 -7 0 -3 7 -7 0 -6 3 -4 0 -6 0 -7 0 -7 -3 -3 0 -7 -4 -6 0 -4 0 -6 -3 -7 0 -7 0 -3 3z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil5","@d":"M-3454 4400l-7 7 -3 3 -4 3 -3 7 -3 3 -4 7 -3 3 -3 7 -4 3 -3 7 -3 3 -4 4 -3 6 -3 4 -4 6 -3 4 0 6 0 7 3 3 7 4 3 0 7 0 7 0 3 -4 7 0 6 -3 4 0 6 -3 7 0 3 -4 7 0 7 0 6 -3 4 0 6 0 7 3 7 0 3 4 7 0 3 6 0 7 0 7 -3 3 -4 0 -6 0 -7 0 -3 -3 -7 0 -7 0 -6 -4 -7 0 -3 0 -7 0 -7 0 -3 0 -7 0 -6 4 -4 3 -3 7 0 3 0 7 -3 6 -4 4 -3 6 -7 0 -3 4 -7 0 -6 0 -7 3 -3 0 -7 3 -3 4 -7 3 -3 3 -7 4 -3 3 0 7 -4 3 -3 7 -3 3 -7 3 -7 -6 0 -7 -3 -7 0 -3 0 -7 3 -6 0 -4 0 -6 0 -7 0 -7 -3 -3 0 -7 -3 -3 -7 -3 -3 -4 -7 -3 -7 0 -3 -7 3 -6 0 -4 -3 -6 0 -7 -3 -3 0 -7 0 -7 3 -3 7 -3 3 -4 3 4 4 6 0 7 0 7 3 3 3 7 4 3 3 7 3 3 4 3 3 7 3 3 4 7 3 3 0 7 3 7 4 0 3 -4 3 -6 4 -7 0 -3 3 -7 3 -7 0 -3 4 -7 0 -6 3 -4 0 -6 0 -7 0 -3 3 -7 4 -7 0 -6 -4 -4 -3 -6 -3 -4 0 -6 0 -4 3 -3 7 -3 6 0 7 0 7 3 6 0 4 -3 3 -4 3 -6 0 -7 4 -3 3 -7 0 -7 3 -3 4 -7 3 -3 3 -7 4 -3 0 -7 3 -3 0 -7 0 -6 0 -7 3 -3 0 -7 0 -7 -3 -6 -3 -4 -4 -3 -3 -7 0 -6 3 -4 7 4 7 3 6 0 4 0 6 -3 4 -7 0 -3 3 -7 0 -7 -3 -6 3 -4 0 -6 3 -4 7 -6 3 0 7 3 3 7 0 6 4 4 0 6 -4 7 0 3 -3 7 -3 7 -4 3 -3 3 -3 7 -4 3 -3 4 -3 6 -4 4 0 6 -3 7 0 7 0 3 0 7 0 6 0 4 0 6 3 7 0 7 -3 3 -3 7 -4 3 -3 7 -3 3z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil5","@d":"M-868 4683l-3 -3 3 -7 0 -6 4 -4 3 -6 0 -7 0 -3 3 -7 0 -7 0 -6 -3 -4 7 -3 3 -7 3 -3 4 -3 3 -7 3 -3 4 -7 6 0 0 3 0 7 -3 3 -3 4 -4 6 -3 4 -7 3 -3 7 -3 3 0 7 0 3 3 7 3 6 4 4 0 6 -4 4 -3 6 -3 4 -7 3 -7 3z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil5","@d":"M3402 6413l-6 -6 -4 0 -6 0 -7 0 -7 0 -3 -4 -7 -3 0 -7 0 -6 4 -4 0 -6 0 -7 0 -7 0 -6 0 -7 3 -3 3 0 7 3 7 0 6 3 7 0 3 4 0 56z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil5","@d":"M366 6487l6 -4 7 0 3 -3 7 0 7 -3 3 -4 7 0 6 -3 4 0 6 -3 7 -4 3 0 7 -3 7 0 3 0 7 3 6 4 4 3 0 7 0 3 0 7 -4 6 -3 4 -3 6 -4 4 -3 3 -7 3 -6 4 -4 0 -6 0 -7 0 -7 3 -3 0 -7 0 -6 0 -7 0 -3 3 -7 0 -7 0 -3 4 -7 3 -3 0 -7 7 -3 3 -3 3 -7 4 -3 3 -7 3 -3 4 -7 0 -7 0 -3 -4 -7 0 -6 -3 -7 0 -3 0 -7 0 -7 3 -3 0 -7 0 -6 4 -7 0 -3 0 -7 0 -7 0 -3 -4 -3 -6 3 -7 3 -3 7 -4 7 -3 3 0 3 -7 7 -3 3 -3 4 -4 6 -3 4 -3 6 -4 4 0 6 -3 7 -3 7 0 3 0 7 -4 6 4 4 3 6 3 4 0 6 -3 4 -3 6 -4 7 -3 7 -3z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil5","@d":"M2859 6683l0 -3 3 -7 0 -6 4 -4 0 -6 3 -7 3 -3 0 -7 4 -3 3 -7 3 -3 4 -7 3 -3 3 -7 4 -3 3 -7 3 -3 4 -7 3 -3 0 -7 3 -3 4 -7 3 -7 3 -3 4 -3 3 -7 7 -3 3 0 7 -4 3 -3 7 0 6 0 7 -3 3 0 7 -4 7 -3 3 -3 3 -4 4 -3 6 -3 4 -4 6 -3 7 0 3 -3 7 -4 7 -3 3 0 7 -3 6 0 4 3 3 7 3 3 4 7 0 6 0 7 0 3 -4 7 -3 3 -7 4 -3 0 -7 3 -6 -3 -7 3 -3 0 -7 0 -7 3 -3 4 -7 3 0 7 -3 3 -3 7 -4 6 0 4 -6 3 -4 7 -3 3 -7 3 -3 4 -7 3 -3 0 -7 0 -6 3 -4 4 -3 3 -7 3 -3 4 -3 6 -7 4 -3 3 -4 3 -6 4 -4 6 -3 4 -3 3 -4 7 -3 3 -3 3 -7 7 -3 3 -7 0 -10 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil5","@d":"M2599 6813l-3 7 -4 3 -3 7 0 3 -7 7 -3 3 -3 4 -7 0 -7 0 -6 0 -4 0 -6 3 -4 3 0 7 -6 3 -4 4 -6 3 -4 3 -6 0 -7 0 -7 0 -3 -3 -7 0 -6 0 -4 0 -6 0 -7 0 -7 0 -3 0 -7 0 -6 -3 -4 -4 -6 -3 -4 -3 -6 -4 -4 -3 0 -7 0 -6 7 -4 7 0 6 0 4 0 6 0 7 4 3 3 7 3 3 0 4 -6 3 -4 0 -6 3 -7 4 -3 3 -7 3 -3 7 -4 3 -3 7 0 7 3 3 0 7 -3 6 0 7 -3 3 0 7 -4 3 -3 4 -7 3 -3 3 -3 7 -4 7 0 6 0 4 -3 6 0 7 0 7 0 3 0 7 -3 6 0 7 3 3 3 0 7 -3 3 -3 7 -4 3 -6 4 -4 6 -3 4 -7 3 -3 3z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil5","@d":"M1512 7287l-220 0 7 -4 7 -3 3 -3 7 0 3 -4 7 0 6 -3 4 -3 6 -4 4 -3 3 -7 7 0 3 -3 7 3 6 0 7 0 7 0 3 -6 3 -4 0 -6 4 -7 0 -3 -4 -7 -3 -3 -3 -7 -4 -3 -6 -7 0 -3 0 -7 0 -3 3 -7 3 -7 4 -3 3 -3 3 -7 7 -3 3 -4 7 -3 3 0 7 -3 3 3 4 7 -4 3 0 7 0 6 0 7 0 7 4 3 3 3 7 4 6 0 7 0 3 -4 7 0 7 0 6 -3 4 0 6 -3 7 0 3 -4 7 -3 3 0 7 -3 3 -4 7 -3 0 -7 3 -6 4 -4 3 -6 3 -4 4 -6 3 -4 3 -3 7 -7 3 -3 7 0 3 3 4 7 0 7 3 6 0 4 3 6 -3 7 0 3 -3 7 -4 3 -6 4 -4 3 -6 3 -4 7 -3 3 -3 4 -7 3 -3 7 -4 3 -3 7 -3 3 -4 3 -3 7 0 7 0 3 0 7 0 6 0 7 0 3 0 7 0 7 3 6 0 4z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil6","@d":"M2996 367l3 0 403 0 0 206 -16 7 -24 3 -53 0 -13 10 20 10 -20 17 -34 0 -33 3 -43 -3 -17 -20 -23 -23 -24 3 -3 20 0 3 -37 -6 -16 0 -34 -14 -36 -23 -40 0 -60 7 -37 3 -7 -23 -16 -7 -20 17 13 10 -3 6 -40 0 -30 -20 -10 -40 -47 0 -190 140 -70 90 -43 -6 -64 30 -80 90 -23 60 -17 -4 0 7 17 10 -17 67 -13 0 -3 6 20 14 0 16 -20 7 -20 43 10 24 23 3 10 -43 3 0 17 220 50 23 -3 23 26 34 -43 10 -30 -30 -50 0 -80 53 -57 10 -20 43 -40 -6 -23 23 -30 -10 -20 -30 -93 -27 -67 17 -27 43 -40 10 -23 -13 -20 -47 -3 -6 -114 -27 -3 -10 3 -37 24 -13 -27 -10 -3 -20 -130 -17 -7 37 -17 3 -53 -80 -67 -3 -30 13 -46 -53 -70 -10 -14 10 -50 -23 -70 -20 -23 13 -10 63 20 24 -17 23 -113 10 -40 -23 -33 36 -24 -30 -43 -10 -100 40 -53 -26 -27 -47 -23 3 -60 -40 -47 37 -60 -17 -10 27 -20 7 -37 -54 -53 -23 0 -20 -13 -33 -44 13 -60 -3 -146 -70 -30 6 -20 -20 6 -20 -10 -6 -16 10 -4 50 -43 -7 -27 -33 27 -27 20 -53 -7 -50 -83 -17 -30 30 -20 -40 -47 10 -30 -47 17 -16 43 -4 44 -40 33 -70 43 -80 -3 -73 33 -183 3164 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil6","@d":"M1372 1313l17 -3 7 -37 130 17 3 20 27 10 -24 13 -3 37 -30 7 -7 26 -30 0 -23 27 -53 0 -20 -37 26 -20 -30 -16 10 -44z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil6","@d":"M-3834 1670l6 70 30 -10 24 20 -4 27 -40 23 -36 50 6 27 24 10 -4 33 20 10 44 -7 43 -40 27 0 6 -20 14 0 3 34 7 0 20 -17 73 -13 57 23 -7 33 47 -3 13 -23 17 6 6 0 17 37 27 -23 26 3 70 -27 10 -70 34 -6 43 33 30 -17 30 20 50 0 27 -30 10 14 30 26 53 0 20 -20 17 20 -10 40 30 14 -30 86 6 47 24 20 36 -17 50 7 84 67 -10 16 -7 4 -3 6 -4 4 -3 3 -3 7 -4 3 -3 7 -3 3 -4 7 -3 3 -3 7 -4 3 0 7 -3 3 -3 7 -4 3 -3 7 -3 3 -4 7 0 3 -3 7 0 6 0 7 -3 3 -4 4 -6 3 -7 0 -7 0 -3 0 -3 7 -4 3 -3 7 0 3 -3 7 -4 3 -3 7 -3 3 -7 3 -3 4 -7 3 -3 3 -7 4 -3 3 -7 7 -3 3 -4 3 -3 4 -7 0 -6 3 -4 3 -3 4 -7 6 -3 4 -7 0 -3 0 -7 0 -6 3 -7 0 -3 0 -7 0 -7 3 -3 0 -7 4 -3 6 -3 4 -7 3 -3 3 -4 7 -3 3 -7 4 -3 3 -3 7 0 3 -4 7 -3 3 -3 7 -4 3 -3 7 -3 3 -4 7 0 6 -3 4 -3 6 0 4 -4 6 0 7 -3 3 -3 7 -4 3 -3 4 -7 3 -3 3 -7 4 -6 3 -4 0 -6 0 -7 0 -7 0 -6 37 50 93 -14 10 -6 60 13 73 -23 64 26 36 -33 54 33 66 -46 60 -77 27 -17 27 10 46 44 20 33 67 -30 107 -43 40 -20 96 -7 0 -3 4 -7 0 -10 0 -7 3 -6 0 -7 0 -3 0 -7 3 -7 0 -6 -3 -4 0 -6 0 -7 0 -7 0 -3 0 -7 -3 -6 0 -4 0 -6 0 -7 -4 -7 0 -3 0 -7 0 -6 4 -4 0 -6 3 -7 3 -3 4 -7 0 -3 3 -7 0 -7 -3 -6 0 -4 -4 -6 0 -7 0 -7 -3 -3 0 -7 0 -6 -3 -4 0 -6 -4 -7 0 -3 -3 -7 0 -7 0 -6 0 -4 0 -6 0 10 43 66 60 4 24 46 23 -13 90 43 50 -6 47 56 30 -6 43 73 0 27 30 6 40 -53 80 3 30 -3 3 -7 7 -3 3 -3 4 -7 3 -3 3 -4 4 -6 6 -4 4 -3 3 -7 3 -3 4 -7 3 -3 3 -3 4 -7 3 -3 3 -7 4 -3 3 -7 3 -3 4 -4 3 -6 3 -4 4 -3 6 -7 4 -3 3 -3 3 -4 7 0 7 0 3 0 7 0 6 0 7 0 7 -3 0 -7 6 -3 4 0 6 -3 4 3 6 0 7 -3 7 0 3 -4 7 -6 3 -4 0 -6 0 -7 -3 -7 -4 -3 4 0 6 3 7 4 3 3 4 3 6 0 7 0 7 -3 3 0 7 0 6 0 7 -3 3 0 7 -4 3 -3 7 -3 3 -4 7 -3 3 0 7 -3 7 -4 3 0 7 -3 6 -3 4 -4 3 -6 0 -7 -3 -7 0 -6 0 -7 3 -3 3 0 4 0 6 3 4 3 6 4 4 0 6 -4 7 -3 7 0 3 0 7 0 6 -3 4 0 6 -4 7 0 3 -3 7 -3 7 0 3 -4 7 -3 6 -3 4 -4 0 -3 -7 0 -7 -3 -3 -4 -7 -3 -3 -3 -7 -4 -3 -3 -3 -3 -7 -4 -3 -3 -7 -3 -3 0 -7 0 -7 -4 -6 -3 -4 -3 4 -7 3 -3 3 0 7 0 7 3 3 0 7 3 6 0 4 -3 6 3 7 7 0 7 3 3 4 7 3 3 3 0 7 3 3 0 7 0 7 0 6 0 4 -3 6 0 7 0 3 3 7 0 7 7 6 7 -3 3 -3 3 -7 4 -3 0 -7 3 -3 7 -4 3 -3 7 -3 3 -4 7 -3 3 0 7 -3 6 0 7 0 3 -4 7 0 3 -6 4 -4 3 -6 0 -7 0 -3 3 -7 4 -3 6 -4 7 0 3 0 7 0 7 0 3 0 7 0 6 4 7 0 7 0 3 3 7 0 6 0 4 0 3 -3 0 -7 0 -7 -3 -6 -7 0 -3 -4 -7 0 -7 -3 -6 0 -4 0 -6 3 -7 0 -7 0 -3 4 -7 0 -6 3 -4 0 -6 3 -7 0 -3 4 -7 0 -7 0 -3 0 -7 -4 -3 -3 0 -7 0 -6 3 -4 4 -6 3 -4 3 -6 4 -4 3 -3 3 -7 4 -3 3 -7 3 -3 4 -7 3 -3 3 -7 4 -3 3 -3 7 -7 20 13 70 110 30 74 90 -24 -47 130 -57 -13 -13 30 -70 7 -30 106 -77 64 -16 73 -47 73 7 7 3 7 3 3 4 3 6 7 4 3 3 7 0 3 3 7 0 3 0 7 4 7 0 6 0 7 0 3 0 7 0 7 0 6 0 4 0 6 0 7 3 7 0 3 0 7 0 6 0 7 0 3 0 7 0 7 3 6 0 4 0 6 0 7 0 3 0 7 0 7 0 6 4 7 3 47 -13 10 -20 -4 -60 20 -127 87 -110 3 -113 -66 -60 13 -54 -27 -56 10 -27 -16 -3 -17 -7 -3 -3 13 -44 -17 -33 37 -93 10 -70 43 -24 -16 50 -97 -3 -30 37 -53 -7 -37 53 -103 -10 -107 20 -70 10 -7 0 -6 -20 -14 10 -126 -43 -30 37 -57 33 -123 -10 -127 -30 -50 3 0 17 17 7 0 0 -10 53 16 3 -6 -16 -17 20 -37 -4 -10 -10 -6 -10 0 -10 36 -63 -33 -110 53 -57 0 -16 10 -7 -6 20 -74 -33 -83 6 -13 44 -14 13 0 10 24 -7 3 4 3 23 4 10 13 0 -3 -7 -30 20 -7 17 10 3 0 4 -13 16 -7 0 -3 -36 3 -4 -17 70 -33 4 -13 -27 -50 -3 -50 -14 0 -36 50 -30 83 -20 13 -100 17 -80 -23 -7 -14 7 -20 -14 -26 57 -120 0 -94 53 -113 0 -43 -10 -24 7 -30 73 -33 94 -117 20 -103 123 -287 0 -3 -27 -40 37 -83 60 -214 10 -26 33 0 20 -50 17 -4 0 -3 -23 -10 0 -20 3 -10 20 -20 0 -7 -7 -10 -10 0 -20 80 -23 34 -3 0 66 -250 -6 -87 -7 -7 -20 -33 -10 -103 -23 -64 10 -40 -24 -156 -23 -47 10 -83 73 -60 4 -4 6 -6 4 -4 3 -3 3 -3 7 -4 3 -6 4 -4 3 -3 3 -7 4 -3 3 -7 3 -3 7 -3 3 -4 7 -3 3 0 7 -3 3 -4 7 0 7 4 6 0 4 0 6 -4 4 -3 6 -3 4 -4 3 -3 7 -3 6 0 7 0 3 0 7 0 7 3 3 0 7 0 6 0 7 0 3 0 7 0 7 0 6 -3 4 0 6 -4 7 0 3 -3 7 -3 3 -4 7 -3 3 -3 4 -4 6 -3 4 -3 6 -4 7 0 3 -3 7 0 7 -3 3 -4 7 -3m-157 1897l7 0 3 3 7 0 6 -3 4 -4 3 -3 3 -7 4 -3 3 -7 7 -3 3 -3 3 0 0 -7 0 -7 -3 -6 0 -4 3 -6 7 0 3 0 7 0 7 0 3 -4 -3 -3 -4 -3 -6 0 -7 -4 0 -3 0 -7 0 -6 3 -7 0 -3 0 -7 0 -7 0 -6 0 -4 4 -6 0 -7 3 -3 0 -7 3 -7 -3 -6 -3 -4 -7 0 -7 -3 -6 0 -4 0 0 7 4 3 3 7 3 3 0 7 -3 3 0 7 0 6 0 7 0 3 0 7 0 7 0 6 -3 4 -4 6 -3 4 -3 3 -4 7 -3 3 -3 7 -4 3 0 7 0 6 7 4 3 3 0 7 -3 3 -7 3 -3 4 -7 -4 -6 0 -4 4 -3 6 0 7 0 7z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil6","@d":"M3402 6357l-3 -4 -7 0 -6 -3 -7 0 -7 -3 -3 0 -3 3 0 7 0 6 0 7 0 7 0 6 -4 4 0 6 0 7 7 3 3 4 7 0 7 0 6 0 4 0 6 6 0 874 -1890 0 0 -4 -3 -6 0 -7 0 -7 0 -3 0 -7 0 -6 0 -7 0 -3 0 -7 3 -7 4 -3 3 -3 3 -7 4 -3 3 -7 7 -3 3 -4 3 -3 4 -7 6 -3 4 -3 6 -4 4 -3 3 -7 0 -3 3 -7 -3 -6 0 -4 -3 -6 0 -7 -4 -7 -3 -3 -7 0 -3 3 -7 7 -3 3 -3 4 -4 6 -3 4 -3 6 -4 4 -3 6 0 7 -7 3 -3 4 -7 3 -3 0 -7 3 -3 4 -7 0 -6 3 -4 0 -6 3 -7 0 -7 0 -3 4 -7 0 -6 0 -7 -4 -3 -3 -4 -3 0 -7 0 -7 0 -6 0 -7 4 -3 -4 -7 -3 -3 -7 3 -3 0 -7 3 -3 4 -7 3 -3 7 -3 3 -4 3 -3 7 -3 7 0 3 0 7 0 3 6 7 4 3 3 7 3 3 4 7 0 3 -4 7 0 6 -3 4 -3 6 -7 0 -7 0 -6 0 -7 -3 -3 3 -7 0 -3 7 -4 3 -6 4 -4 3 -6 3 -7 0 -3 4 -7 0 -3 3 -7 3 -7 4 -1633 0 -57 -94 0 -46 34 -57 -34 -63 -40 -84 -30 -23 -23 -53 40 -10 63 20 57 -4 87 -40 23 4 140 -120 37 -20 53 -4 43 -33 27 -37 40 -130 20 0 70 -80 60 -33 37 3 26 -40 64 17 16 20 37 0 30 -37 30 -10 23 -76 67 -20 40 23 7 30 3 3 110 24 87 -70 40 -120 3 -10 47 -47 50 -23 23 -44 67 -20 106 -80 64 -10 66 -36 44 -54 66 -30 67 -23 50 0 50 -30 77 10 220 -47 93 0 183 -66 34 6 10 20 100 -6 123 -80 57 -84 70 -13 40 40 30 7 40 -17 10 -43 50 20 100 0 90 -44 50 -53 86 -30 37 17 277 -40 36 6 0 1034m-3036 130l-7 3 -7 3 -6 4 -4 3 -6 3 -4 0 -6 -3 -4 -3 -6 -4 -7 4 -3 0 -7 0 -7 3 -6 3 -4 0 -6 4 -4 3 -6 3 -4 4 -3 3 -7 3 -3 7 -3 0 -7 3 -7 4 -3 3 -3 7 3 6 3 4 7 0 7 0 3 0 7 0 6 -4 7 0 3 0 7 -3 7 0 3 0 7 0 6 3 7 0 3 4 7 0 7 0 3 -4 7 -3 3 -3 7 -4 3 -3 3 -3 7 -7 3 0 7 -3 3 -4 7 0 7 0 3 -3 7 0 6 0 7 0 3 0 7 -3 7 0 6 0 4 0 6 -4 7 -3 3 -3 4 -4 3 -6 3 -4 4 -6 0 -7 0 -3 0 -7 -4 -3 -6 -4 -7 -3 -3 0 -7 0 -7 3 -3 0 -7 4 -6 3 -4 0 -6 3 -7 0 -3 4 -7 3 -7 0 -3 3 -7 0 -6 4m2493 196l10 0 7 0 3 -3 7 -7 3 -3 3 -3 4 -7 3 -3 3 -4 4 -6 6 -4 4 -3 3 -3 7 -4 3 -6 3 -4 7 -3 3 -3 4 -4 6 -3 7 0 3 0 7 -3 3 -4 7 -3 3 -3 4 -7 6 -3 0 -4 4 -6 3 -7 3 -3 0 -7 7 -3 3 -4 7 -3 7 0 3 0 7 -3 6 3 7 -3 3 0 7 -4 3 -3 4 -7 0 -3 0 -7 0 -6 -4 -7 -3 -3 -3 -7 -4 -3 -6 0 -7 3 -3 0 -7 3 -7 4 -3 3 -7 0 -6 3 -4 4 -6 3 -4 3 -3 4 -3 3 -7 3 -7 4 -3 0 -7 3 -6 0 -7 0 -3 3 -7 4 -3 0 -7 3 -3 7 -4 3 -3 3 -3 7 -4 7 -3 3 0 7 -3 3 -4 7 -3 3 -3 7 -4 3 -3 7 -3 3 -4 7 -3 3 -3 7 -4 3 0 7 -3 3 -3 7 0 6 -4 4 0 6 -3 7 0 3m-260 130l3 -3 7 -3 3 -4 4 -6 6 -4 4 -3 3 -7 3 -3 0 -7 -3 -3 -7 -3 -6 0 -7 3 -3 0 -7 0 -7 0 -6 0 -4 3 -6 0 -7 0 -7 4 -3 3 -3 3 -4 7 -3 3 -7 4 -3 0 -7 3 -6 0 -7 3 -3 0 -7 -3 -7 0 -3 3 -7 4 -3 3 -3 7 -4 3 -3 7 0 6 -3 4 -4 6 -3 0 -7 -3 -3 -3 -7 -4 -6 0 -4 0 -6 0 -7 0 -7 4 0 6 0 7 4 3 6 4 4 3 6 3 4 4 6 3 7 0 3 0 7 0 7 0 6 0 4 0 6 0 7 0 3 3 7 0 7 0 6 0 4 -3 6 -3 4 -4 6 -3 0 -7 4 -3 6 -3 4 0 6 0 7 0 7 0 3 -4 3 -3 7 -7 0 -3 3 -7 4 -3 3 -7z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil6","@d":"M-2354 6093l6 0 -6 24 0 -24z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil6","@d":"M-2358 6320l14 107 26 13 17 80 43 23 67 97 217 147 220 43 43 -27 67 -6 60 -34 36 7 34 -20 20 33 50 10 30 -13 13 -40 37 -10 73 50 140 17 83 -34 34 -36 33 0 53 -110 17 6 -10 40 13 34 -10 36 30 4 10 83 67 33 20 -6 -53 -44 -20 -36 66 66 57 24 100 3 53 -40 50 20 67 27 23 53 30 23 40 84 34 63 -34 57 0 46 57 94 -2737 0 144 -284 170 -433 60 -213 26 -10 70 13 47 -37 60 7 70 -60 47 -3 26 53z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil6","@d":"M-2358 6320l-26 -53 53 10 3 13 -30 30z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil6","@d":"M-928 6697l0 0 -10 36 30 4 -20 -40z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@id":"areas_density","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"g":[{"path":[{"@class":"fil7 str0","@d":"M3001 367l-3 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1830 821l-15 32 14 28 -8 26 -41 -18 -13 22 -47 6 -6 51 -54 3","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1248 1007l83 -46 67 27","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1104 851l2 29 -16 12 -78 -4 -63 48 11 71","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-712 867l-11 25 10 16 -37 47 -2 65 -25 18","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1493 1087l24 -16 6 -26 43 -7 52 -59 76 29 44 -1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-777 1038l-60 13 11 38 -83 -7 -94 -45 14 -37 -20 -40 -29 -5 -5 36 -55 -3","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2000 971l-1 57 34 20 22 50","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-3173 725l-30 42 -37 0 -4 28 21 8 3 33 33 28 5 49 45 27 2 46 43 -23 27 19 -25 35 -41 10 -27 41 12 23 23 -12 39 20 12 50","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2000 971l-15 -29 -28 -7 -47 41 -35 -2 -27 59 -18 -13 -37 21 -77 -6 -17 30 -43 -1 -8 20 -30 6 -53 -18 -45 12 -25 38 -61 -8 -37 -26 -15 -38 -20 10 -34 -12 -17 32 -50 -16 -8 24 -74 -36 -31 45 -12 1 -7 14 9 8 -3 16 -64 18 -76 -11 -36 26 -31 -20","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-3511 537l-13 33 10 24 -19 18 -25 110 -31 51 -32 -2 -3 48 -30 36 10 20 -24 48 21 71 -17 31 18 66 -50 80","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-346 877l-29 9 -25 46 -43 12 7 59 -60 46 -12 59 -28 8 -21 26 -40 -11 -22 44","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-777 1038l11 32 -39 25 3 23 28 13 77 0 78 44","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M200 1138l-48 12 -19 45 3 46 -28 29","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1098 988l-19 28 23 16 -2 46 -16 13 58 9 46 57 -67 20 -62 -33 -34 59 36 32 11 -25 23 -2 7 -9 8 7 -10 65 12 10","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1945 1098l88 -3 54 -25 24 7 35 52 58 13 10 77 14 7 31 -16 2 19 -28 17 55 38","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1602 1284l75 1 27 -28 42 -3 -3 -24 -5 -29 -32 21 -12 -25 44 -24 -10 -22 -53 31 -20 -15 17 -50","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-4107 1294l13 -32 95 -41 72 10 12 -25 28 0 8 -25 12 -8 18 17 11 -15 25 7 -4 -15 18 -7 54 5 15 15 34 -9","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-920 1257l123 19 9 17 -17 28 18 19 7 1 10 -7 10 2 3 17 -10 7 -52 -3 -22 -17 -46 9 -53 -51 20 -41","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-3696 1171l14 4 -8 53 58 46 -36 101","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-3212 1444l19 -54 -6 -27 24 -16 -16 -45 42 -37 25 1 30 -36 1 -54 21 -27","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-914 1424l34 -44 34 27 -10 51","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-3668 1375l16 22 -10 31 71 12 6 6 -9 11 17 12","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-619 1175l10 37 -22 33 3 38 -28 12 21 56 -37 19 -26 -21 -46 37 22 30 23 -22 12 28 -13 50 -34 6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M1535 1379l-1 39 45 14 -3 34 0 2 30 -3 -4 44","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-3264 1528l52 -84","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-3668 1375l-54 21 -87 -19 -93 53 6 99 35 35 -2 40 18 15 27 -6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1945 1098l-33 21 -38 85 -20 6 0 55 -23 30 32 29 -23 114 15 14 -16 66 7 35 -35 13 -4 23 18 -2 1 13 -13 24 -20 1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-3212 1444l49 11 25 -19 48 24 18 8 -17 51 57 49 -31 64","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2097 1625l-21 -7 -4 13 -15 2 -5 -7 -13 -17 -38 34 -25 -8 -13 22 4 8 -6 7 -20 -4 -10 21 -19 -9 -21 18 1 35 2 69","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-941 1370l-28 13 -27 -15 -48 3 -9 14 5 20 -24 26 1 11 16 2 -8 38 23 27 -3 44 -5 2 -12 -23 -10 9 20 30 -28 14 17 62 -21 45 55 83 53 1 10 43","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-310 1686l4 13 -14 20 -54 -3 -41 55 0 35 26 19","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-3063 1632l-10 31 -32 -12 -41 35 -11 32 -30 28 0 24 21 14 -12 48","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-3063 1632l41 34 35 -5 83 29 95 -14 53 42 97 -1 42 23 38 -17 21 26 44 -19 21 17 35 -18 43 65 33 -34 14 30 12 28 -11 23 20 9 11 -31 36 -17","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-389 1825l-2 34","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M108 1270l-68 34 -6 40 -55 0 -29 71 -25 -5 -16 24 8 35 -36 37 -6 35 13 22 -31 35 -15 65 15 69 50 52 -48 90 -6 11 -45 -8 -31 11 -58 -39 -26 10 -40 -30 -42 -4","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-964 1819l24 9 35 -21 6 -47 26 -14 17 24 -21 53 93 14 34 -52 2 -19 11 -12 6 2 32 -25 68 -3 20 40 38 -17 35 7 -13 36 25 26 3 44 78 25 54 -30","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M1602 1509l42 -11 78 15 -18 46 11 15 -1 13 -22 -1 -5 13 17 20 64 22 74 -28 18 27 36 -11 33 38 35 -6 12 30 -10 38 -28 10 28 20 1 18 -48 29 -20 -5 -6 8 10 44 70 14 43 47 60 -27 58 3 13 60","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1602 1284l-11 19 -21 -13 -78 49 13 42 -18 48 24 50 -4 24 -31 6 -13 19 9 33 27 1 43 183 45 5 24 19 -17 16 9 28 45 0 8 9 -14 28 13 15 52 -16 0 21 -45 21 -9 30 -52 14 -3 27 26 47","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2097 1625l-15 92 50 8 14 43 -55 107 11 22 61 -11 39 64 28 5 35 -32 25 3 35 45 36 -11 13 11 -8 28 14 13 25 0 18 -19 48 14 36 -29 62 6 17 22 28 3","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M1602 1509l-88 24 15 33 -7 25 26 7 5 17 -18 23 14 39 -24 24 14 20 -25 19 19 4 -1 9 -16 5 -2 35 -37 34 31 13 -17 66 -28 18 -23 -22 -12 13 -2 -22 -29 5 4 50 -16 17 37 45 -43 18 17 28","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1580 2009l-18 28 30 30 -6 56 15 -6 1 1 15 27","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-964 1819l-26 30 -3 37 -21 4 -10 29 -46 7 4 16 -31 45 -48 -43 -20 11 0 55 -39 22 -1 31 -23 12 -20 44 -8 19 -43 -16 -4 24","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M1043 1166l-73 104 9 47 35 14 -16 75 -20 9 30 61 5 64 -18 142 -30 97 -40 43 24 45 -144 151 18 55 44 2 9 35 -22 38 -29 10 -2 50","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M760 2215l8 -11 49 10","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1303 2146l-76 17 -26 27 -6 37 -12 2 -7 -6 0 -28 -8 -3 -18 27 -44 -54 -43 -20","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M108 1270l-4 27 19 15 -20 25 8 34 -15 23 20 15 -17 28 20 2 0 61 44 24 -51 101 15 7 13 -28 33 9 20 -46 -4 -18 12 -11 8 4 4 49 -14 42 5 131 -14 7 -17 -26 -29 66 61 33 59 -1 78 79 6 80 73 28 11 35 61 41 21 -17 25 4 64 164 29 9 -2 -13 8 -1 7 12 35 1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M1396 2056l-3 17 -91 -3 -29 26 7 35 -30 14 -26 -10 -10 9 10 17 -63 75 -43 11 -22 -14 -12 24 -30 -1 -77 36 -19 -15 -75 10 -7 22 -27 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M812 2230l31 21 -12 21 18 37","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M1396 2056l30 6 1 19 -27 20 49 30 3 55 55 25 -9 14 15 35 24 -5 -7 31 -18 3 3 5 30 10 -1 25","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1303 2146l11 31 20 12 19 -9 18 39 45 14 -5 51 79 63","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2300 1802l49 48 -26 27 15 18 -15 63 8 4 -3 20 -31 23 -1 25 25 35 1 50 28 10 -8 26 16 15 -2 21 -42 26 -3 2 17 45 -17 36 22 82 -26 47 28 6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-391 1859l27 75 -20 46 38 56 -15 39 -25 1 -35 43 -21 -8 -16 12 12 28 -6 46 25 59 -49 21 -7 -34 -37 -9 -7 52 -26 35 16 101 53 25","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1116 2347l-28 32 -74 -5 -17 16 4 26 -75 34","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1543 2145l-9 43 -65 32 -133 21 -88 30 14 50 -14 25 -35 -9 -7 6 11 25 -44 39 7 27 -6 6 -20 -7 -21 24","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M849 2309l-2 24 -1 3 -31 22 -6 38 -48 26 6 40","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2265 2431l4 -13 22 3 12 23 21 -1 29 24","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2265 2431l-4 34 -19 13 -33 -16 -12 -35 -30 4 -6 23 -44 -53 -22 8 -29 -27 -66 16 -69 -15 -29 57 -10 3 -6 -11 -15 6 -9 -7 -1 -28 -43 -3","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1953 2457l-43 10 -26 29 -82 -47 -73 18","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-484 2447l-4 48 -8 2 -25 -21 -16 0 -17 19 -32 -3 -46 24 -20 -18 -29 19 -29 -15 -36 -58 -23 9 -6 -6 4 -15 -23 -10 13 -17 -3 -4 -14 4 -12 -19 -35 -4 -6 -14 -9 -2 -24 15 -33 -8 -24 -33 -22 -2 -16 15 -56 13 -81 -19","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M767 2462l-78 -4 -19 24 -32 -52 -121 -48 -49 -45 -12 13 -38 -18 -44 -52 -45 -6 -3 32 -6 2 -1 -2 -22 1 2 46 -21 12 31 24 -36 59 -43 -33 -22 47 -29 0 -18 -27 -34 50 -29 -14 9 -37 -24 9 -41 -21 -26 28 -34 -9 -28 19 6 32 -22 18 -25 -3 -14 -24 -55 52 12 21 -14 26 -85 8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-484 2447l52 -20 17 24 70 34 102 105","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M767 2462l8 23 28 9 12 39 -25 56 19 52 -24 38 -36 20 6 11","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1306 2450l-42 14 -91 109 -63 23 -28 43 -16 85 -52 2 -47 70","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1645 2796l-64 6 6 11 -9 9 -21 2 -22 3 -32 -10 -4 -55 -27 -31 -6 -43 -30 -3 -3 -4 10 -15 -15 -15 -4 -49 -50 -65 -35 -14 -2 -66","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M755 2710l23 -1 12 21 33 10 -7 36 71 19 23 36 44 17","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-728 2977l5 -16 -15 -29 8 -18 63 -7 12 -19 -23 -25 9 -21 51 29 14 -10 -2 -34 53 7 24 -33 35 12 37 36 28 4 5 -16 22 9","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-243 2590l3 46 48 56 -13 53 17 37 -6 64 -26 20 -46 -17 -9 81 -29 11 -32 48","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2177 2467l-13 62 26 17 4 28 -36 124 -51 57 -72 41 7 22 -28 35 -26 14 -29 -7 -4 32 36 -9 12 15 -17 53 -29 1 -2 30 -30 -15 6 -26 -36 11 -32 34 3 55 -31 32","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2519 3073l-37 2 0 -42 -49 20 -14 30 -43 -17 -19 -27 -42 -13","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2710 2997l5 -9 -86 -59 -187 105 -12 43 -65 17 -19 -12 -22 16 -37 -5 -19 -20","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1645 2796l-7 50 -40 13 -18 -12 -7 5 3 24 -22 26 2 96 -59 7 -22 61 -32 -14 -8 6 4 27 -24 56","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-276 3045l-1 3 12 14 3 -2 74 75 58 -5 -1 37","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1306 2450l31 49 32 10 -4 23 24 37 -56 147 32 25 -12 52 33 13 11 -15 13 34 28 -3 -11 37 24 23 -2 25 21 -9 29 20 0 51 29 12 11 24 -32 106 11 8 38 -27 17 83 1 4","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1038 3179l28 2 12 -39 54 35 46 -33 13 -44 -13 -69 14 -44 14 -9 7 9","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2519 3073l107 75 35 -8 26 -32 24 -3 17 15 -9 39 21 48","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2298 3207l91 22 76 -53 11 35 22 0 87 -80 5 -30 55 -11 24 61 52 -10","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1088 3246l55 -19 -18 -38 13 -10","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1164 3258l0 1 28 1 41 -30 7 16","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1875 3141l25 14 48 -28 30 -44 15 3 8 25 29 27 31 -39 31 -14 28 36 45 -16 33 37 108 32 26 26 18 -7 58 21 5 22 -12 24","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-131 3167l70 3 1 -40 15 -2 14 27 16 31 51 0 43 36 -2 19 -45 22","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-131 3167l42 97 44 6 35 6 42 -13","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M32 3263l11 28","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M755 2710l-75 32 -12 -28 -46 7 -63 -41 -23 24 -9 50 -35 20 -15 -14 -26 13 4 36 48 4 -4 70 20 21 -41 32 37 47 -61 55 -9 39 -51 14 -25 -8 0 39 -37 87 -33 22 -40 2 -6 30 -34 16 0 44 25 30","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M244 3353l-53 21 -22 -79 -43 -13 -83 9","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1483 3350l23 27 8 1 50 -46 49 -10 -1 -20 61 -20 15 -21","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2298 3207l-23 15 3 60 -26 96 42 -7 22 15 -19 70","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M588 3454l-46 -18 -18 -32 -36 -7 -23 43 -45 31 -22 -31 -67 4 -11 -65 -18 -7 -23 27 -35 -46","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1088 3246l7 54 30 6 -16 81 32 15 44 99 46 52 -8 129","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M43 3291l-36 17 3 17 6 46 -39 90 5 41 -26 13 -40 -8 -63 85 -11 87 13 19","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1981 3718l34 -22","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2092 3722l15 -13 22 -73 23 -16 53 40 -2 58","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2208 3444l-6 32 18 25 -36 91 132 132","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1981 3718l-58 31 -2 -1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-953 3682l35 56 -14 24 28 5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-901 3767l24 -24 17 6 13 36","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-477 3749l37 5 20 43 53 -9 63 19 25 -31 134 -78","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1947 3696l40 -4 4 -25 61 -47 20 49 22 -29 108 31 25 -15 21 -51 59 -2 11 38 -15 7 -5 42 -24 0 -17 66 24 17 18 -17 54 9 6 43 59 29 42 -24 34 17 45 -22 61 -5 67 -70 61 1 12 -54 50 -2 24 -16 85 38 42 -18","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-797 3779l82 -10 74 74 29 -35 31 42 55 -40 69 9","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2142 3754l-7 3 -26 -19 -16 40 -56 23 -44 -18 -21 11 -7 55 -24 47 -36 4 -31 -33 -34 -2 -20 18 19 21 -10 32 -43 21 -79 -46 -13 24 -53 17 -12 -19 -33 33 -7 -34 -20 -2 -54 53 -49 -39 -41 -12 -9 -46 -21 -5 -12 7 -89 -15 -5 18 -42 -29 -41 10 -44 -11 -18 -37 34 -54 -25 -18 -6 -35 -47 0 -87 -39 -12 17 26 22 -26 47 -17 3 -7 -33 17 -15 -30 -7 -25 23 -7 17 11 5 -25 34 -20 -1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-145 3698l34 41 24 -11 33 26 103 22 -10 78 -1 2 -42 105 74 85 104 -9 24 42 0 67","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M701 4059l0 23 -22 -22 -42 22 -12 -16 -32 22 -51 -19 -85 60 -66 2 1 24 38 5 7 13 -67 45 -15 -35 -51 -19 -47 23 -19 -25 -28 0 -12 -16","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2147 4219l30 -7 28 -91 25 -18 27 3 9 -31 -51 -25 -22 -64 47 14 27 -11 -24 -37 14 -51 21 -24 49 2 10 -12 -1 -1 -29 -72 29 -13 22 -57 -11 -28","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M198 4146l-20 17 34 63 -68 22","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-844 4360l-1 -70 16 4 35 -24 15 -61 -57 -41 -22 -71 -63 -35 43 -75 -19 -67 64 -96 -14 -39 0 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1714 4497l10 -39 214 23 55 -41 111 20 23 -39 17 30 39 7 40 -19 12 -35 19 -6 114 26 42 -28 19 23 64 -17 16 10 75 -52","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2147 4219l41 32 54 0 7 51 81 30 60 61 43 17 45 55 102 32","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2147 4219l-61 1 -15 8 6 23 -10 12 -46 22 -28 38 -40 -1 -22 49 -89 56 -4 73 28 48 3 43 -12 34 -28 21","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-844 4360l41 23 55 -10 12 70 50 11 2 71 21 15 9 7 -6 53 -60 87","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-599 4725l66 -122 65 -39 29 -44 35 17 45 -10 87 -65 3 -3 35 6 25 42 55 -10 42 -46 -16 -112 26 -30 3 -56 26 -28 21 -7 18 15 47 -42 45 -15 31 11 7 26 48 35","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-720 4687l121 38","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2465 4646l-28 -4 -49 40 -15 -28 31 -23 -11 -20 -27 -10 -45 11 -51 48 5 33 -21 41 -95 17 -44 31","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2815 4782l-97 -45 -5 -23 -29 -22 -22 4 -15 31 -58 -10 -11 -46 -119 -23 8 -49 -78 -26","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-599 4725l76 79","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M144 4248l9 116 -41 59 6 50 50 13 17 34 -7 56 -30 57 6 31 8 12 66 102 44 42 42 11","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2465 4646l55 73 0 34 37 29 0 54 38 23 3 38 18 17 4 45","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-523 4804l25 18 21 -11 25 18 43 1 17 23 -10 40 4 102 103 147 53 1 62 45","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1554 5190l-45 -64 5 -15 -60 -75 -29 -9 29 -48 -41 -27 20 -40 -45 -14 9 -145 3 -5 60 -111 -30 -65 2 -36 -17 -34 -21 -5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-720 4687l-26 11 -11 58 -26 15 -24 -6 -49 40 -64 125 8 53 -46 29 -12 27 -31 -9 -33 12 -48 -32 -28 0 -38 40 -49 20 -80 -40 -57 62 -81 38 -23 -4 -26 71 -57 8 -33 -15","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2370 4984l0 33 32 34 96 -67 34 9 10 -4 1 -17 2 -1 9 15 7 -2 0 -14 42 -6 32 46 -10 26 3 4 15 -4 5 7 -3 68 30 47 28 8 10 59 19 17 48 -16 28 69","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1554 5190l-55 -6 -37 43 -42 5 -15 79 -40 34","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1932 5295l23 3 10 32 34 0 25 -10 19 -39 37 -4 9 41 32 27","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2219 5475l7 -15 68 -19 62 -42 5 -19 -15 -19 5 -6 24 8 29 -31 24 34 42 -31 -7 -37 43 -3","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2920 5534l-26 -28 15 -41 -16 -62 24 -31 -4 -87 15 -40 -26 -36 21 -12 -5 -36 30 -19 -48 -89 0 -36 -80 -9 -4 -15 40 -60 118 -26 21 23 17 -5 6 -40 37 -19 -21 -26 22 -33 -28 -8 -3 -17","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2870 5540l1 1 45 4 62 35 100 4 25 -46 86 -11 13 -23 33 -1 21 9 14 16 16 -1 32 -32 3 -16 -16 -30 17 -10 32 8 -1 25 -23 19 12 26 11 1 55 -50 26 4 23 36 20 3 44 -36","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-523 4804l-47 34 -3 51 14 21 -26 64 6 42 -35 -3 -3 13 12 49 -11 19 -38 7 -4 16 -52 21 -53 47 -11 119 -16 10 -47 -10 -13 -22 -37 -9 -56 130 -29 -5 -11 12 26 90 -52 46 26 50 -66 38 3 29","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-1743 5345l22 43 10 79 28 1 7 23 62 27 35 35 128 37 32 38 -8 43","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str0","@d":"M-2219 5475l25 31 4 41 -26 50 -33 10 -36 -32 -28 -3 -28 32 28 41 -24 69 -35 33 -39 7 -39 65 -45 -10 -7 4 2 18 43 10 22 -22 15 -4 29 6 44 77 12 62 10 4 17 -4 18 18","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil7 str1","@d":"M-374 834l28 43","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str1","@d":"M-346 877l49 -8 18 40 31 -29 81 17 9 48 -20 54 -27 28 27 34 42 3 2 -49 17 -8 10 6 -7 18 22 21 28 -5 149 70 61 3 40 -16 14 34","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str1","@d":"M200 1138l0 21 54 25 38 51 18 -5 11 -26 61 16 46 -39 60 42 24 -6 25 48 55 28 97 -41 45 9 24 31 32 -37 39 25 116 -10 15 -23 -18 -24 9 -64 25 -12 67 19","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str1","@d":"M1043 1166l50 24 14 -10 72 10 45 52 30 -14 66 3 56 81","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str1","@d":"M1376 1312l15 -5 7 -34 128 14 4 22 29 10 -24 13 -6 37","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str1","@d":"M1529 1369l6 10","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str1","@d":"M1376 1312l-11 44 28 18 -24 19 19 35 52 -1 25 -24 29 -1 8 -27 27 -6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str1","@d":"M1535 1379l114 25 3 7 20 47 22 14 39 -9 29 -45 67 -16 91 27 21 29 31 11 22 -22 42 6 17 -45 57 -9 81 -55 50 0 29 30 46 -8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str1","@d":"M-3834 1670l7 69 31 -9 25 18 -5 27 -41 23 -34 51 6 27 22 11 -1 31 17 10 46 -7 42 -38 27 -2 8 -18 10 0 5 31 8 2 20 -17 72 -12 58 22 -9 34 46 -6 15 -22 18 6 4 2 17 37 27 -26 26 5 70 -27 11 -68 33 -9 44 33 31 -16","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str1","@d":"M-3178 1832l30 20 49 2 25 -32 13 12 29 30 54 -2 19 -18 18 20 -13 38 32 14 -31 87 6 47 25 20 35 -19 50 9 84 66 -10 17","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str1","@d":"M-3146 2517l-8 38 50 93 -13 10 -5 61 14 74 -24 62 26 37 -34 55 36 64 -48 62","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str1","@d":"M-3152 3073l-77 25 -16 28 8 47 44 21 34 64 -30 108 -43 41 -20 95","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str1","@d":"M-3544 3500l13 43 64 58 3 24 50 24 -14 90 42 51","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str1","@d":"M-3386 3790l-6 46 56 30 -6 42 73 3 27 29 8 40 -56 79 4 32","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str1","@d":"M-3453 4399l21 15 70 108 30 72 91 -21","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str1","@d":"M-3241 4573l-47 129 -57 -14 -14 31 -71 8 -30 107 -76 62 -17 72 -46 73 7 9","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str1","@d":"M-2352 6093l7 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str1","@d":"M-2355 6320l-29 -55","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str1","@d":"M-906 6736l-31 -4 11 -36","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str1","@d":"M-489 6865l22 54 30 23 40 83 33 65 -33 57 2 44 56 96","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@id":"borders","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"g":[{"path":[{"@class":"fil7 str2","@d":"M-1532 1117l-6 2 -5 1 -6 2 -6 2 -5 1 -6 1 -6 1 -6 1 -9 2","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-1587 1130l-6 1 -6 0 -5 -1 -6 -3 -3 -5 -1 -6 1 -6 4 -3 5 -3 6 -1 6 0 6 1 6 1 5 1 6 1 6 1 5 -2 6 -3 4 -3 4 -5 2 -5 4 -5 4 -4 6 -1 5 0 6 1 6 1 6 1 6 2 6 2","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-3565 1344l-2 -5 -2 -6 -2 -5 -1 -6 0 -6 0 -6 1 -6 1 -5 2 -6 2 -5 4 -5 5 -3 4 -3 4 -5 3 -5 2 -5 1 -6 2 -6 3 -4 4 -5 4 -4 4 -4 3 -5 3 -5 3 -5 3 -5 3 -5 3 -5 4 -5 4 -4 4 -4 5 -3 5 -2 7 -1 5 1 -1 4 -4 6 -3 5 -4 5 -3 4 -5 4 -5 2 -6 3 -3 4 -2 6 -1 5 -3 5 -4 5 -4 4 -2 6 -3 5 -3 5 -4 4 0 6 -1 6 -2 6 -4 4 -5 2 -5 3 -3 5 -1 6 -1 6 0 6 0 6 0 6 0 6 -3 4 -6 5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-2635 2170l6 -3 2 -4 0 -6 -1 -6 -1 -6 2 -6 3 -5 3 -5 4 -4 6 0 7 0 5 -1 3 -5 1 -6 1 -6 0 -6 1 -6 3 -5 4 -3 6 -3 6 -1 6 1 6 1 5 -2 1 -5 -2 -7 -4 -4 -3 -5 1 -6 3 -5 5 -3 6 1 6 0 6 -1 6 -3 5 -3 1 -4 0 -6 -2 -6 -2 -6 -2 -6 -3 -5 -4 -4 -2 -5 -1 -6 0 -6 0 -6 3 -5 4 -4 3 -5 2 -6 2 -5 -4 -8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-2532 1949l-3 6 -3 5 -3 5 -4 3 -6 1 -5 1 -4 5 -1 6 -1 5 1 6 1 6 3 5 3 5 2 6 0 6 0 5 -2 6 -4 5 -4 3 -5 4 -4 4 -4 4 -4 4 -2 6 -3 5 -4 4 -4 4 -6 1 -5 1 -3 4 -2 6 -2 6 1 6 0 6 -4 4 -5 3 -6 2 -5 3 -5 3 -5 2 -6 1 -7 0 -5 2 0 6 3 4 5 4 3 5 1 5 1 6 1 6 2 6 1 5 5 -1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M680 2265l-2 6 -3 5 -5 3 -5 2 -6 2 -6 0 -5 -2 -6 2 -5 3 -4 4 -3 5 -1 6 0 6 0 7 -2 4 -5 2 -7 0 -6 -1 -5 -3 -5 -3 -6 -2 -5 0 -6 2 -6 3 -3 3 -1 9","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-2723 3026l-5 3 -5 4 -4 4 -2 6 -1 5 0 6 2 6 2 6 2 5 3 4 5 3 6 3 5 2 5 3 1 6 -1 6 1 6 -2 5 -4 4 -5 4 -5 3 -5 2 -6 1 -6 1 -6 1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-2668 3397l6 1 5 0 5 -3 5 -4 4 -3 6 -3 5 -2 5 -3 2 -5 1 -6 0 -6 3 -5 2 -5 0 -6 -5 -4 -5 -1 -3 4 -3 6 -1 6 -1 6 -1 5 -3 5 -5 4 -4 3 -6 3 -6 1 -3 4 -3 8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-2311 3446l-4 -4 -3 -5 -3 -5 -1 -6 0 -5 2 -6 2 -6 1 -5 1 -6 -1 -6 -3 -5 -5 -2 -6 1 -3 5 0 6 -2 6 -3 5 -4 4 -4 3 -6 3 -6 1 -5 2 -6 0 -6 -1 -6 1 -5 1 -6 1 -6 0 -6 0 -6 0 -6 0 -5 1 -6 0 -6 1 -6 2 -5 1 -5 3 -5 3 -4 5 -3 5 -1 8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-2463 3452l6 1 5 -1 6 -3 5 -2 5 -3 5 -3 5 -3 6 -2 5 0 6 0 6 1 6 0 6 0 6 0 5 3 4 4 5 1 6 -2 5 -3 6 -2 5 -2 6 -1 6 -1 6 0 4 5 4 4 5 2 7 1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-2509 3450l-3 -5 2 -5 4 -4 5 -4 4 -4 2 -6 -4 -3 -6 0 -4 3 -4 5 -3 5 -3 5 -5 3 -5 3 -5 2 -5 4 -4 3 -6 1 -6 0 -6 -1 -6 -1 -5 -3 -4 -4 -4 -4 -4 -4 -5 -4 -5 -2 -6 -1 -6 -1 -6 -1 -5 -3 -3 -5 -2 -5 -3 -5 -5 -3 -6 2 -6 -1 -6 -1 -5 -1 -12 1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-2665 3406l5 4 5 3 4 3 6 3 6 1 3 4 3 5 3 5 5 3 6 1 6 1 6 -1 6 1 5 0 5 3 5 4 4 5 2 5 3 4 6 1 6 1 6 1 5 0 6 0 6 -3 5 -2 5 -3 6 -1 6 0 5 -2 6 -2","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-2994 3305l-3 -5 -5 0 -6 0 -6 1 -6 2 -4 4 -5 2 -6 2 -5 2 -6 3 -5 3 -5 2 -4 4 -5 4 -5 3 -6 0 -3 -4 0 -6 2 -6 -3 -4 -6 -2 -3 5 -1 6 1 6 1 6 -1 5 -5 3 -6 2 -5 3 -6 2 -5 3 -5 3 -4 4 -4 4 -3 5 -2 6 -2 5 -2 6 -4 4 -3 5 -2 6 -3 5 -2 5 -2 6 -3 5 -3 5 -3 5 -3 5 -3 5 -3 5 -2 5 -4 5 -2 5 4 7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-2707 3409l-1 -6 -1 -6 -1 -6 -3 -1 -5 5 -2 6 -1 5 -3 5 -5 4 -4 4 -5 3 -5 1 -6 1 -6 2 -5 2 -6 2 -5 2 -5 2 -6 2 -5 2 -6 2 -5 2 -6 2 -5 2 -6 2 -5 2 -6 1 -6 1 -6 1 -5 0 -6 1 -6 1 -6 -1 -6 0 -5 1 -6 2 -6 2 -5 1 -6 2 -5 2 -5 4 -4 4 -6 1 -6 0 -3 -5 -1 -6 -1 -4 -5 -2 -6 -2 -6 0 -7 0 -4 2 -4 6 -3 5 -5 1 -6 -1 -5 -3 -5 -2 -5 -4 -5 -3 -5 -3 -5 -3 -4 -4 -5 -4 -2 -5 -1 -6 -4 -4 -6 -3 -5 2 -6 1 -6 1 -5 2 -4 4 -6 3 -6 0 -6 -1 -3 -3 0 -7 5 -3 3 -5 -1 -6 -5 0 -6 3 -4 4 -4 4 -6 3 -5 2 -6 2 -5 0 -6 1 -6 2 -5 2 -5 2 -6 3 -5 2 -6 2 -5 3 -5 4 -5 2 -5 -2 0 -5 4 -5 3 -5 5 -4 3 -4 4 -5 3 -5 3 -5 3 -5 3 -5 2 -5 2 -6 2 -5 2 -6 2 -5 2 -6 3 -5 4 -4 5 -2 6 -2 6 -1 5 -1 6 -1 6 -2 5 -3 4 -4 4 -4 4 -4 5 -4 4 -3 5 -4 5 -2 6 -2 6 -1 6 0 5 -2 5 -3 6 -2 5 -3 6 -1 6 0 -1 -4","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-3947 3399l2 5 2 6 3 5 4 4 1 6 -3 5 -1 6 0 6 -1 6 0 5 1 6 0 6 0 6 -2 5 -3 5 -4 5 -4 4 -3 5 -4 5 -3 5 -2 5 -2 6 1 6 5 4 4 4 -1 5 -3 5 -5 4 -5 0 -6 -2 -6 1 -5 3 -2 6 0 6 0 7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-3989 3565l5 2 6 2 6 -1 5 -2 5 -3 4 -5 2 -5 4 -5 4 -4 4 -4 6 -3 4 -3 -1 -5 -2 -6 -1 -6 0 -6 3 -5 5 -1 6 2 6 0 7 -1 3 -2 -3 -6 -6 -3 -6 -1 -5 -1 -2 -5 2 -6 0 -6 1 -6 0 -6 0 -6 0 -6 0 -5 2 -6 2 -6 1 -5 2 -6 2 -5 1 -6 -2 -6 -5 -4 -5 -1 -6 -2 -6 0 -6 -1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-604 3461l5 3 5 4 4 4 4 4 3 5 2 6 3 5 4 4 5 3 6 2 6 -2 5 1 5 4 0 5 -4 5 -1 6 0 6 1 5 3 6 3 5 4 4 4 5 4 3 5 4 5 3 6 1 6 0 5 2 5 3 5 4 1 5 -1 6 3 5 3 4 4 5 5 6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-481 3602l-5 3 -6 0 -4 -2 -5 -5 -4 -4 -4 -5 -3 -5 -4 -2 -6 0 -7 0 -5 0 -6 -2 -5 -3 -2 -5 -2 -6 -2 -6 -1 -6 -3 -5 -4 -4 -4 -4 -5 -3 -4 -5 -4 -4 -3 -5 -2 -5 -3 -5 -5 -4 -5 -3 -4 -4 -2 -5 -2 -6 -1 -6 -1 -5 -1 -6 0 -6 1 -8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-3176 3467l4 3 6 0 6 -1 5 -2 5 -3 4 -4 4 -5 5 -2 6 -3 5 -1 6 -2 6 0 6 0 5 2 6 1 6 0 6 0 5 0 6 0 6 0 6 0 6 0 6 0 5 -2 5 -3 6 0 6 1 6 2 5 2 4 4 5 4 5 3 4 3 5 4 5 3 5 3 5 3 5 3 5 3 5 3 3 5 -1 6 -2 6 1 4 6 3 6 0 6 -1 4 4 3 5 3 5 3 6 2 5 3 5 2 5 3 5 3 5 3 6 3 4 4 5 4 4 5 3 5 3 5 3 6 2 5 1 6 0 6 0 6 1 6 0 6 0 6 0 5 0 6 2 6 2 5 2 5 2 6 3 5 2 5 4 4 3 5 4 4 4 5 3 5 3 5 2 6 2 6 0 6 -1 4 -5 1 -6 -4 -4 -5 -3 -6 -1 -6 0 -5 -3 -5 -2 -5 -4 -5 -3 -5 -3 -5 -3 -5 -3 -5 -3 -4 -4 -5 -3 -5 -4 -5 -3 -6 0 -5 0 -6 1 -6 1 -6 1 -6 1 -5 -1 -6 -1 -6 -2 -5 -2 -5 -3 -5 -4 -4 -4 -4 -4 -3 -5 -3 -5 -4 -5 -3 -4 -4 -5 -3 -5 -4 -4 -3 -5 -3 -5 -2 -6 -1 -6 1 -5 5 -4 5 -2 6 -2 6 -1 5 -1 6 -2 5 -2 6 -1 6 -1 5 -1 6 -1 6 -2 5 -1 6 -1 6 0 6 0 6 0 5 -1 6 -1 6 -1 6 -1 5 -2 6 -2 5 -2 5 -2 6 -3 5 -2 5 -3 5 -3 6 -2 5 -3 5 -2 6 -1 6 0 6 1 5 -2 5 -3 3 -5 4 -4 5 -4 4 -4 8 -6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-2017 3833l-1 -6 -2 -5 -3 -5 -3 -5 -3 -5 -2 -5 1 -6 3 -6 -1 -5 -4 -4 -5 -4 -5 -3 -5 -3 -5 -3 -5 -3 -5 -3 -4 -4 1 -6 5 -2 6 1 6 1 7 -4","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-2142 3754l-1 6 -1 6 -1 5 -1 6 -1 6 -1 6 -1 5 -2 6 -2 5 -2 6 -3 5 -3 5 -4 4 -5 4 -5 3 -5 3 -5 4 -5 3 -5 0 -5 -3 -4 -5 -2 -6 -1 -6 -4 -1 -6 4 0 5 2 6 -1 6 0 6 -1 6 -1 5 -2 6 -2 5 -1 6 -2 6 -1 5 -1 6 3 10","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-2224 3903l5 2 5 -3 0 -5 -1 -6 -2 -6 0 -6 2 -5 3 -5 5 -4 4 -4 6 -2 5 -2 6 -3 5 -3 5 -3 5 -3 4 -3 5 -3 5 -4 4 -4 4 -5 3 -4 3 -5 3 -5 3 -6 2 -5 3 -5 2 -6 2 -5 2 -6 2 -5 2 -6 2 -5 2 -5 5 -4 5 -2 6 -2 6 1 6 1 4 4 3 5 3 5 3 5 4 5 3 5 5 3 5 3 5 3 4 4 4 4 3 5 2 6 2 5 2 6 3 5 4 5 5 2 9 1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-2310 3962l-6 1 -6 0 -6 1 -5 1 -6 2 -5 4 -4 4 -3 5 -3 5 -4 4 -5 3 -6 2 -5 2 -6 2 -5 1 -6 2 -6 1 -5 2 -5 3 -5 3 -3 5 -5 7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-2420 4022l2 3 6 1 6 -1 5 -3 5 -3 5 -3 5 -3 5 -3 6 -2 5 -2 6 -2 5 -2 5 -3 5 -3 5 -3 5 -3 5 -4 4 -3 5 -4 4 -4 4 -5 7 -8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-2391 4081l1 -7 1 -5 4 -3 6 -2 6 -1 6 1 4 5 5 3 5 2 6 1 6 0 6 0 6 -1 5 -2 6 -3 4 -3 5 -3 6 0 6 0 6 0 6 0 6 0 5 0 6 -1 6 -1 5 -2 6 -2 5 -4 4 -3 6 -2 6 2 4 3 0 5 -3 6 -1 6 -1 6 2 5 4 5 4 4 4 4 5 4 5 2 6 3 5 1 6 2 4 4 4 5 3 6 0 5 -5 5 -5 0 -5 -2 -5 -3 -6 -3 -4 -3 -5 -5 -4 -4 -5 -2 -6 -2 -3 -5 -3 -5 -3 -5 -2 -5 -4 -5 -4 -4 -6 -2 -5 -1 -6 0 -6 1 -6 0 -6 1 -6 0 -5 1 -6 1 -6 1 -4 4 -5 3 -6 1 -6 0 -6 0 -6 0 -5 -1 -6 -2 -6 -2 -5 -1 -6 -1 -6 -1 -6 0 -5 1 -7 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-858 4621l4 -3 5 -4 4 -4 4 -5 3 -5 3 -5 3 -5 5 -3 3 5 -1 6 -4 4 -4 4 -4 5 -4 4 -4 4 -3 5 -3 5 -1 6 1 5 3 6 2 5 3 6 0 5 -3 5 -4 5 -4 4 -4 4 -9 3","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-867 4683l-1 -5 1 -6 2 -6 2 -5 2 -5 2 -6 1 -5 1 -6 1 -6 -1 -6 -1 -6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M3405 6355l-6 -2 -5 -2 -6 -1 -5 -2 -7 -2 -5 0 -2 4 0 6 0 7 0 6 -1 6 -2 6 -1 6 -1 5 2 6 4 5 5 2 6 0 6 -1 6 1 5 2 7 4","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M369 6486l6 -2 5 -2 6 -2 5 -2 6 -2 5 -2 6 -2 5 -2 6 -2 5 -2 6 -3 5 -2 6 -1 5 -1 6 0 6 2 5 4 4 4 2 5 -1 6 -2 6 -2 6 -3 5 -3 5 -4 5 -4 3 -5 2 -6 2 -6 1 -6 1 -5 1 -6 0 -6 0 -6 1 -6 1 -5 1 -6 1 -6 1 -6 2 -5 1 -6 3 -5 2 -4 4 -4 4 -4 5 -5 4 -4 3 -6 2 -5 2 -6 1 -6 0 -5 -1 -6 -2 -6 -2 -6 -1 -5 0 -6 1 -6 1 -6 1 -5 1 -6 1 -6 1 -6 0 -6 0 -6 0 -4 -3 -1 -6 2 -6 5 -3 5 -3 5 -3 5 -4 5 -3 4 -4 5 -4 4 -4 5 -3 5 -3 5 -3 5 -2 6 -2 6 -2 5 -2 6 -1 6 0 5 1 5 4 5 3 5 -1 5 -3 6 -4 5 -2 5 -2 10 -4","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M2860 6683l2 -5 2 -6 1 -6 2 -5 2 -6 2 -5 2 -5 3 -6 2 -5 3 -5 3 -5 3 -5 3 -5 4 -5 3 -5 3 -5 3 -4 3 -5 4 -5 2 -5 3 -6 3 -5 3 -5 4 -5 3 -5 4 -4 4 -3 5 -3 6 -2 5 -1 6 -2 6 -1 6 -2 6 -1 5 -2 5 -3 5 -3 4 -5 4 -4 5 -3 5 -2 6 -3 5 -2 6 -2 5 -3 6 -3 6 -2 5 -1 5 0 5 3 4 5 3 5 2 6 1 6 0 6 -1 6 -2 5 -5 4 -5 3 -6 1 -5 0 -6 0 -6 0 -6 1 -6 2 -5 3 -5 3 -4 4 -3 5 -1 6 -3 5 -3 5 -3 5 -4 4 -4 4 -4 4 -5 4 -5 3 -5 2 -6 2 -6 1 -5 3 -5 3 -4 4 -5 3 -5 4 -4 4 -4 4 -5 4 -4 4 -4 4 -4 4 -4 4 -4 5 -4 4 -3 5 -4 5 -4 4 -5 3 -5 1 -12 1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-3569 4591l5 -3 5 -3 4 -5 1 -5 2 -6 4 -4 5 -3 5 -3 5 -3 5 -3 5 -3 6 -2 5 -2 6 -1 6 0 6 -1 5 -3 4 -4 3 -5 2 -5 0 -7 1 -5 3 -5 5 -4 5 -3 5 -2 6 0 6 0 6 1 5 1 6 1 6 1 6 1 6 0 6 1 7 2 6 1 4 -1 3 -4 0 -7 -1 -6 -4 -5 -5 -3 -6 -2 -5 -1 -6 -1 -6 0 -6 0 -6 1 -5 1 -6 1 -6 1 -5 2 -6 1 -6 2 -6 2 -5 2 -6 2 -6 1 -5 1 -5 0 -6 -3 -3 -6 0 -5 1 -6 3 -6 2 -5 4 -5 3 -4 5 -4 3 -5 4 -4 3 -5 3 -5 3 -5 3 -6 2 -5 3 -5 4 -4 4 -4 6 -6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-3415 4234l-6 3 -4 4 -3 5 -2 5 -2 6 2 6 0 5 -2 6 -1 6 -3 5 -5 4 -5 1 -6 -3 -6 -2 -6 -2 -3 2 -1 7 2 6 4 4 4 5 1 5 0 6 0 6 -1 6 0 6 -1 6 0 6 -2 5 -3 5 -3 5 -3 5 -4 5 -2 5 -2 5 -2 6 -2 5 -3 6 -2 5 -3 6 -3 5 -4 2 -6 0 -7 -1 -6 0 -6 0 -5 1 -5 3 -2 6 1 5 4 5 4 5 2 5 -1 6 -2 5 -1 6 -1 6 -1 6 -1 6 -1 5 -2 6 -2 5 -2 6 -2 5 -2 6 -2 5 -3 6 -2 6 -3 4 -4 -1 -3 -6 -3 -5 -2 -6 -2 -5 -4 -5 -3 -5 -4 -4 -4 -5 -4 -4 -3 -5 -2 -5 -2 -5 -1 -6 -1 -7 -2 -6 -3 -3 -6 1 -6 4 -2 4 0 6 1 6 1 6 2 6 1 5 0 6 -1 6 3 5 5 2 6 2 5 3 5 4 4 4 2 5 2 6 1 6 0 6 0 6 -1 5 -3 5 -1 6 1 5 2 6 3 5 5 7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-2748 3125l-6 -1 -6 -1 -5 -2 -3 -5 1 -6 1 -6 1 -6 2 -4 5 -5 3 -4 4 -5 4 -4 2 -5 1 -6 -1 -6 -3 -5 -5 -4 -5 -2 -6 -1 -6 1 -5 1 -7 2 -6 0 -1 -3 3 -7 4 -5 5 -2 6 0 6 1 5 2 6 0 4 -3 5 -4 4 -4 5 -4 4 -4 4 -4 4 -5 3 -5 4 -4 7 -3","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-856 2935l4 -1 4 -4 4 -4 1 -6 0 -6 0 -5 3 -6 3 -5 5 -3 3 -5 2 -6 -1 -5 -4 -3 -6 -3 -3 -5 -2 -6 0 -6 1 -6 2 -5 2 -6 3 -5 4 -4 4 -5 4 -3 5 -3 7 -1 5 -2 2 -5 2 -9","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-802 2802l-6 0 -6 0 -6 1 -6 2 -5 2 -4 3 -4 5 -3 5 -2 6 -2 5 -3 5 -2 6 -2 5 -2 6 -1 5 -3 6 -2 5 0 6 2 5 4 5 3 5 -1 5 -3 6 -1 5 0 6 -1 6 -3 5 0 6 5 6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M572 2328l4 3 5 2 6 1 6 1 6 1 5 1 6 2 5 3 6 2 5 -1 6 -2 5 -3 4 -5 2 -5 2 -6 2 -5 3 -5 3 -5 5 -4 5 -1 6 -1 6 -3 5 -3 4 -3 5 -4 3 -4 4 -5 3 -5 2 -6 2 -5 2 -6 1 -6 1 -6 2 -5 2 -5 5 -4 5 -2 6 -2 6 -2 6 0 6 1 5 1 5 3 5 4 4 4 4 5 4 3 5 2 6 0 11 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M794 2248l-2 -5 -3 -6 -3 -4 -5 -4 -5 -3 -4 -4 -5 -3 -7 -4","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M1514 7287l-1 -6 -1 -6 0 -6 -1 -6 -1 -5 0 -6 -1 -6 0 -6 1 -6 1 -5 3 -5 4 -5 3 -5 4 -5 3 -4 4 -4 4 -5 4 -4 5 -4 4 -4 5 -4 4 -4 5 -4 4 -4 3 -5 2 -4 1 -6 -1 -6 -1 -6 -2 -6 -2 -6 -4 -6 -3 -3 -5 0 -6 4 -4 4 -4 4 -4 5 -3 5 -4 5 -3 4 -3 6 -2 5 -3 5 -4 4 -4 4 -5 3 -6 2 -5 2 -6 3 -5 2 -6 1 -5 2 -6 2 -6 1 -5 1 -6 1 -7 0 -6 -1 -5 -1 -4 -3 -3 -5 -1 -6 0 -7 0 -6 2 -6 1 -5 -1 -5 -6 -3 -5 1 -5 2 -6 4 -4 3 -5 3 -5 4 -3 5 -4 5 -3 5 -2 6 -2 5 0 5 3 5 4 5 5 4 3 5 4 5 2 5 -1 6 -1 6 -2 6 -3 5 -4 4 -6 0 -6 0 -6 0 -6 -1 -6 1 -4 3 -5 3 -4 5 -5 4 -5 3 -5 2 -5 2 -6 2 -5 2 -6 2 -5 3 -8 5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M2600 6812l5 -4 5 -3 4 -4 5 -4 4 -5 4 -4 4 -4 2 -5 0 -7 -3 -4 -6 -1 -6 0 -6 1 -6 0 -6 1 -6 1 -5 0 -6 2 -6 1 -6 0 -6 2 -4 3 -4 4 -3 5 -4 5 -5 3 -5 2 -6 2 -6 1 -6 1 -6 0 -6 -1 -6 0 -5 2 -4 3 -5 4 -3 5 -3 5 -2 6 -1 6 -2 5 -4 5 -5 1 -5 -3 -5 -4 -6 -2 -5 -1 -6 0 -6 0 -6 1 -5 3 -2 5 1 7 3 4 5 4 5 3 5 3 6 3 5 2 5 2 6 0 6 0 6 0 6 0 6 0 5 0 6 2 6 1 6 1 5 0 6 -2 6 -2 5 -2 5 -3 4 -5 3 -5 3 -5 4 -3 6 -1 6 1 6 1 6 -1 5 -4 4 -4 4 -5 3 -4 2 -6 3 -5 2 -6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-2710 2997l3 5 -1 6 -4 5 -3 4 -4 4 -4 5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-2041 3748l4 -3 -1 -6 -3 -5 -4 -4 -5 -3 -5 -3 -6 -2 -5 -1 -6 -1 -6 0 -6 1 -8 1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-2100 3724l-5 1 -6 1 -6 2 -5 2 -5 3 -5 4 -4 4 -4 4 -2 9","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-2092 3722l-8 2","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-728 2977l-6 0 -5 -3 -4 -5 -1 -6 -2 -5 -4 -5 -5 -2 -6 0 -6 1 -5 2 -6 2 -5 2 -6 2 -5 1 -6 1 -6 1 -6 0 -6 0 -5 0 -6 2 -5 3 -5 2 -5 3 -6 2 -5 3 -4 4 -4 5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-863 2987l-4 5 -4 4 -4 5 0 5 5 4 5 3 6 3 4 4 2 5 1 6 1 6 0 5 0 6 0 6 2 6 2 6 3 4 6 2 6 1 6 0 5 -2 2 -5 1 -6 1 -6 1 -6 -1 -6 -3 -5 -2 -5 -4 -4 -4 -5 -4 -5 -2 -5 -1 -6 0 -6 1 -5 3 -5 4 -4 3 -5 5 -3 5 -3 6 -2 6 0 5 -1 6 -1 6 0 6 0 6 1 5 0 6 1 6 1 5 3 5 3 5 3 6 2 5 2 5 2 6 1 6 1 6 -1 5 -5 -1 -4 -5 -4 -5 -3 -6 1 -7 1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M760 2215l-5 -3 -5 -3 -5 -2 -6 -1 -6 0 -6 1 -6 2 -4 3 -5 4 -4 4 -4 4 -5 4 -4 5 -3 4 -4 5 -2 5 -3 5 -1 6 -2 7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-2840 2347l5 -3 5 -3 5 -3 4 -4 5 -4 4 -5 3 -5 4 -4 5 1 6 3 4 5 1 5 -1 6 0 6 1 6 1 7 2 5 4 2 6 0 7 0 4 3 4 4 4 5 3 6 3 6 3 5 3 5 3 3 5 0 5 -4 6 -5 5 -1 3 4 6 7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-2712 2400l5 3 4 4 4 4 4 5 4 4 4 4 3 5 4 4 4 5 3 5 4 4 3 5 2 6 3 5 2 6 1 6 -1 5 -5 4 -5 -1 -5 -4 -5 -4 -4 -4 -3 -5 -1 -6 -2 -6 -1 -6 -2 -5 -3 -4 -5 -3 -6 -2 -6 0 -6 1 -5 3 0 8 -2 1 -4 -4 -3 -7 -1 -5 2 -6 0 -6 -3 -5 -5 -5 -4 -3 -6 0 -6 1 -5 -3 -4 -5 -4 -3 -6 -2 -5 -2 -5 -3 -5 -5 -5 -4 -4 -1 -3 3 -3 6 -3 6 -3 5 -5 5 -5 2 -4 -2 -3 -6 -1 -6 2 -5 2 -6 2 -6 1 -6 0 -5 -4 -5 -4 -4 -6 -6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-3453 4399l5 -4 3 -5 4 -5 3 -5 1 -5 0 -6 -1 -6 -1 -6 0 -6 -1 -5 0 -6 0 -6 2 -6 1 -5 2 -6 2 -5 3 -5 4 -4 4 -5 4 -4 4 -5 3 -4 3 -6 2 -5 1 -6 1 -6 0 -5 -1 -6 -2 -6 -3 -4 -5 -7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str2","@d":"M-1493 1087l4 3 4 5 3 5 1 5 -1 7 -2 5 -4 4 -6 -1 -6 -2 -6 -1 -5 -2 -6 0 -6 0 -9 2","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil7 str3","@d":"M-3176 3467l-5 3 -4 3 -5 4 -5 3 -5 4 -4 3 -5 3 -5 3 -5 3 -6 2 -6 1 -5 1 -6 1 -10 1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str3","@d":"M-3544 3500l-6 0 -6 1 -6 0 -5 2 -5 2 -5 3 -5 4 -5 3 -5 3 -6 2 -5 0 -6 -2 -6 -1 -5 -2 -6 -2 -6 1 -5 2 -5 4 -4 4 -4 4 -4 4 -4 4 -4 4 -5 4 -4 4 -4 4 -5 4 -4 3 -5 4 -5 4 -4 3 -5 4 -4 3 -5 4 -4 4 -4 4 -4 4 -4 5 -3 4 -4 5 -4 5 -4 4 -4 4 -5 2 -6 1 -6 0 -6 -2 -5 -2 -6 -1 -6 -1 -6 -1 -5 1 -6 2 -5 2 -6 2 -6 1 -6 1 -5 1 -6 1 -6 0 -6 -1 -6 -1 -5 -1 -5 -3 -6 -2 -5 -2 -6 -1 -6 -1 -5 1 -6 2 -5 3 -5 4 -4 4 -5 3 -6 2 -6 1 -5 0 -5 -3 -5 -3 -5 -4 -5 -3 -5 -2 -6 -1 -6 0 -6 1 -5 -1 -6 0 -7 -1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str3","@d":"M-3997 3618l-4 4 -5 3 -5 2 -6 1 -6 0 -6 0 -5 0 -6 0 -6 0 -6 1 -6 1 -5 2 -4 4 -3 5 -2 6 -2 5 -2 6 -2 5 -4 5 -4 4 -4 4 -4 4 -4 5 -4 4 -4 4 -4 4 -4 5 -4 3 -5 4 -5 3 -5 4 -4 3 -5 3 -5 3 -5 4 -5 3 -4 4 -4 4 -3 5 -3 5 -1 6 -1 6 -3 4 -5 4 -5 3 -4 4 -3 5 -4 5 -4 4 -3 5 -2 5 -2 6 -1 6 0 6 0 5 -2 6 -2 6 -2 5 -2 5 -3 5 -4 5 -3 5 -4 4 -3 5 -4 5 -3 4 -4 5 -4 4 -4 4 -4 4 -5 4 -5 3 -4 4 -5 3 -5 4 -5 3 -5 3 -5 2 -5 1 -6 0 -6 0 -6 0 -6 0 -6 0 -6 1 -5 1 -6 2 -5 3 -5 3 -4 5 -3 4 -1 6 -2 6 -2 5 -2 6 -2 5 -3 5 -2 5 -3 6 -3 5 -3 5 -3 5 -3 6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str3","@d":"M-3252 3502l-6 1 -5 1 -6 1 -11 2","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str3","@d":"M-3280 3507l-6 0 -6 1 -6 1 -5 1 -6 1 -6 0 -6 -1 -6 0 -5 -1 -6 0 -6 -1 -6 0 -6 -1 -5 -1 -6 0 -6 -2 -6 -1 -5 -1 -6 0 -6 2 -5 2 -6 1 -5 2 -6 2 -5 3 -5 2 -6 2 -6 -1 -5 -1 -6 -2 -6 -1 -6 -1 -5 -1 -6 -1 -6 0 -6 -1 -5 -2 -6 -2 -5 -1 -6 -2 -6 -2 -5 0 -6 -1 -6 0 -6 1 -7 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str3","@d":"M-2869 5541l6 -3 5 -2 5 -4 4 -4 4 -5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str3","@d":"M1155 2704l-6 1 -6 1 -5 1 -6 1 -6 1 -6 1 -5 1 -6 1 -6 1 -6 0 -5 0 -6 -2 -6 -2 -5 -1 -6 -1 -6 -1 -6 -1 -6 0 -5 -1 -6 0 -6 0 -6 0 -6 0 -6 0 -5 1 -6 2 -5 3 -6 1 -5 -1 -5 -3 -5 -4 -4 -3 -5 -4 -5 -3 -5 -4 -4 -3 -5 -3 -6 -3 -5 -3 -4 -4 -3 -4 -3 -6 -1 -6 0 -5 2 -6 1 -6 2 -6 0 -5 0 -6 0 -6 0 -6 -1 -6 0 -5 -2 -6 -1 -6 -2 -5 -2 -6 -1 -6 -2 -5 -1 -6 -1 -6 -1 -6 0 -5 0 -6 1 -6 2 -5 2 -6 3 -5 4 -4 4 -4 5 -3 5 -3 6 -3 5 -2 6 -2 5 -2 6 -3 4 -3 3 -5 3 -5 2 -5 3 -6 2 -5 3 -6 2 -5 2 -6 1 -5 1 -6 1 -6 1 -6 0 -5 -1 -6 -1 -6 -2 -6 -3 -5 -4 -4 -5 -3 -4 -4 -5 -3 -4 -4 -5 -4 -4 -5 -2 -5 -2 -5 -1 -6 0 -6 -1 -6 -3 -5 -5 -3 -6 -3 -5 -2 -6 -1 -6 -1 -5 -1 -6 1 -6 2 -5 2 -6 1 -6 2 -5 2 -6 1 -6 1 -5 1 -6 0 -6 0 -6 0 -6 -1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str3","@d":"M-3921 2460l-6 2 -5 2 -4 4 -5 4 -4 3 -6 2 -6 1 -5 -1 -6 -2 -5 -3 -6 -1 -5 1 -6 1 -6 -1 -6 -2 -5 -2 -3 -5 -3 -5 -5 -2 -6 -2 -6 -1 -5 -2 -5 -3 -5 -4 -3 -5 -3 -5 -3 -5 -4 -4 -3 -5 -4 -4 -5 -5 -4 -3 -5 -3 -5 -2 -6 -2 -6 -2 -5 -2 -6 -1 -5 -2 -6 -1 -11 -2","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str3","@d":"M847 2333l-6 -1 -7 -1 -4 -3 -3 -5 -2 -5 -1 -6 -1 -6 0 -6 2 -6 1 -5 1 -6 1 -6 1 -6 0 -6 -3 -4 -6 -4 -5 -2 -8 -3","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str3","@d":"M794 2248l4 0 9 4","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str3","@d":"M3001 367l0 6 0 6 0 6 0 5 1 6 0 6 1 6 2 5 2 6 2 5 3 5 2 6 2 5 3 5 2 6 2 5 3 5 2 6 3 5 3 5 2 5 3 6 3 5 3 5 2 5 3 5 3 5 3 5 3 5 3 5 3 5 3 5 4 5 3 4 4 5 3 4 4 5 4 4 4 5 4 4 4 4 4 5 4 4 4 4 4 5 3 6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil7 str4","@d":"M1184 367l2 5 3 5 3 5 3 5 4 5 3 5 3 5 3 5 2 5 3 5 2 6 3 5 3 5 4 4 4 4 4 5 4 4 4 4 2 6 2 5 1 6 2 5 3 5 3 5 4 5 4 4 4 5 3 4 4 5 4 4 3 5 4 5 3 5 2 5 3 5 2 5 3 6 2 5 3 5 3 5 4 4 5 4 7 5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str4","@d":"M-2665 3406l-5 -2 -6 -2 -10 -1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str4","@d":"M-2686 3401l-6 2 -5 2 -10 4","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str4","@d":"M-2463 3452l-5 2 -6 2 -5 0 -6 -1 -6 -1 -5 -2 -6 -1 -7 -1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str4","@d":"M-3569 4591l-6 1 -5 1 -6 1 -6 -1 -6 -1 -5 -1 -6 0 -6 0 -6 2 -4 3 -4 5 -3 5 -3 5 -4 4 -4 4 -4 5 -3 5 -3 5 -2 5 -1 6 -1 6 -1 6 0 5 0 6 0 6 1 6 1 6 1 6 2 5 1 6 0 6 -1 5 -3 5 -3 5 -3 5 -3 5 -4 5 -3 5 -1 6 -1 6 1 6 1 5 3 6 2 5 2 5 0 6 1 6 0 6 0 6 0 6 0 5 1 6 2 6 1 6 1 5 2 6 0 6 0 5 -1 6 -2 6 -1 5 -1 6 0 6 1 6 2 6 -1 5 -1 6 -3 5 -2 6 -2 5 -2 6 -2 5 -2 6 -1 5 -1 6 -1 6 0 6 0 6 1 5 2 6 2 6 3 5 3 5 4 4 5 3 5 3 4 4 5 4 4 4 4 4 4 4 5 4 4 4 5 3 5 1 6 1 6 2 8 6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str4","@d":"M-3592 5050l3 5 4 4 4 5 4 4 4 5 3 5 2 5 2 5 1 6 1 6 0 5 0 6 0 6 0 6 1 6 0 6 0 6 1 6 0 6 1 5 0 6 1 6 0 6 1 6 0 5 1 6 0 6 0 6 1 6 0 5 1 6 0 6 0 6 1 6 0 6 1 5 0 7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str4","@d":"M-2224 3903l-4 4 -5 4 -4 3 -5 3 -6 3 -5 2 -6 2 -5 2 -5 2 -6 3 -5 3 -4 3 -5 4 -4 4 -4 4 -4 4 -5 5 -4 4","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str4","@d":"M-2420 4022l-6 2 -6 1 -5 0 -6 -2 -6 -2 -5 -2 -5 -3 -5 -3 -5 -3 -5 -3 -6 -1 -6 -1 -5 1 -6 0 -6 0 -6 0 -6 0 -6 0 -6 0 -5 -1 -6 0 -6 -1 -6 0 -6 -1 -5 -1 -10 -2","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str4","@d":"M-2571 4000l-6 0 -6 -1 -6 -1 -6 0 -6 0 -5 2 -6 1 -5 2 -6 3 -5 2 -5 3 -6 2 -5 3 -4 3 -5 4 -5 4 -4 4 -4 4 -4 5 -4 4 -4 4 -4 4 -5 3 -6 1 -6 -1 -6 0 -6 0 -5 0 -6 -2 -5 -3 -5 -3 -5 -3 -6 -2 -5 -1 -6 1 -6 0 -6 2 -6 1 -5 2 -6 2 -4 3 -4 5 -3 5 -3 5 -2 5 -2 6 -1 6 -1 5 -1 6 -1 6 -2 6 -3 4 -5 4 -5 3 -5 3 -6 2 -5 2 -6 2 -6 0 -5 -1 -6 -1 -6 -3 -5 -3 -5 -3 -4 -4 -3 -5 -1 -6 -2 -6 0 -5 0 -6 0 -6 -2 -6 -3 -5 -4 -4 -5 -3 -5 -2 -6 -2 -6 -1 -6 0 -6 1 -5 1 -6 2 -5 3 -6 2 -4 4 -5 3 -4 4 -4 5 -4 4 -5 2 -6 2 -6 2 -6 1 -5 0 -6 0 -6 1 -6 0 -6 0 -6 0 -5 0 -6 0 -6 0 -6 0 -6 0 -6 -1 -5 0 -6 -1 -6 0 -6 -1 -5 -2 -6 -1 -6 -2 -5 -2 -5 -3 -5 -3 -4 -4 -5 -4 -5 -3 -5 -3 -5 -3 -5 -3 -5 -2 -6 -1 -6 -1 -6 0 -6 1 -5 1 -6 1 -6 1 -6 1 -5 2 -6 1 -6 2 -5 1 -6 2 -5 3 -5 2 -6 2 -5 2 -6 2 -5 3 -5 2 -6 3 -5 2 -10 5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str4","@d":"M-3286 4091l-5 3 -4 4 -4 3 -5 4 -4 4 -4 4 -5 4 -4 4 -5 3 -4 4 -5 4 -5 3 -4 3 -5 4 -5 3 -5 3 -5 4 -4 3 -5 3 -5 3 -5 4 -4 4 -4 4 -5 4 -4 4 -4 4 -4 4 -4 4 -3 5 1 6 -1 6 0 6 0 6 0 6 0 6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str4","@d":"M-2310 4959l5 -3 5 -3 5 -3 5 -1 6 -2 6 -1 6 -1 4 -3 4 -5 3 -5 3 -5 3 -5 4 -5 4 -3 6 -2 6 -1 5 -1 6 -1 6 -2 5 -3 5 -2 6 -2 5 -2 6 -1 6 -1 6 -1 5 0 6 0 6 1 6 1 5 1 6 0 6 -1 6 -1 6 -1 5 -1 6 -2 5 -1 6 -2 6 -2 5 -2 6 -2 5 -2 6 -1 5 -2 6 -2 5 -2 6 -2 5 -1 6 -2 5 -3 6 -2 5 -3 5 -3 5 -3 5 -3 5 -2 5 -2 6 -2 6 -2 5 -3 6 -2 5 -2 5 -3 5 -2 3 -5 3 -5 4 -5 4 -4 5 -3 5 -3 5 -4 5 -2 5 -1 6 1 6 1 6 1 6 1 5 -1 6 -1 6 -1 6 -1 5 -2 6 -1 6 -2 5 -2 6 -1 5 -3 5 -2 6 -3 5 -3 4 -3 5 -4 3 -5 3 -5 3 -5 2 -6 2 -5 3 -5 5 -3 5 -3 6 -2 6 -1 5 -1 6 0 6 1 6 1 5 1 6 2 6 1 5 2 6 2 4 4 6 1 6 0 8 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str4","@d":"M-2481 5030l5 0 6 -1 6 -1 5 -2 5 -3 6 -3 5 -3 5 -3 5 -3 4 -3 5 -3 6 -3 5 -1 6 -1 6 -2 5 -1 6 -2 5 -3 5 -2 10 -6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str4","@d":"M-2845 5523l2 -6 3 -5 2 -5 2 -5 2 -6 2 -6 1 -5 2 -6 2 -5 3 -6 2 -5 3 -5 3 -5 3 -5 4 -4 6 -2 6 -2 5 -3 4 -3 5 -4 4 -4 3 -5 3 -5 1 -6 1 -6 0 -6 -1 -6 0 -5 -2 -6 -1 -6 -1 -6 -2 -5 -1 -6 -1 -6 -1 -5 0 -6 1 -6 2 -6 1 -5 3 -5 3 -5 3 -5 3 -5 3 -6 2 -5 1 -6 1 -6 1 -5 2 -6 3 -5 2 -5 3 -5 3 -5 3 -5 4 -5 4 -4 4 -5 3 -4 3 -5 2 -6 1 -6 1 -5 1 -6 1 -6 1 -6 2 -5 1 -6 1 -6 1 -6 0 -5 -1 -6 -1 -6 -2 -6 -1 -5 0 -6 1 -6 1 -6 2 -5 2 -6 3 -5 4 -4 4 -4 5 -4 5 -3 5 -2 6 -2 5 -2 5 -3 5 -4 4 -3 5 -4 4 -4 4 -4 5 -4 4 -4 4 -4 5 -3 5 -2 6 -2 6 -2 5 -2 6 -1 5 -3 5 -2 6 -3 5 -2 6 -1 6 -1 5 0 6 0 6 0 6 1 5 2 6 3 5 2 6 2 5 0 6 0 6 -1 6 0 6 -1 5 0 7 -1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str4","@d":"M-2845 5523l5 0 6 1 6 1 6 2 5 2 5 3 4 5 3 5 4 3 6 -1 4 -5 1 -6 2 -5 2 -5 4 -5 4 -4 5 -4 4 -3 5 -4 5 -3 4 -4 5 -3 5 -3 5 -3 5 -4 4 -3 5 -3 5 -4 5 -2 5 -3 6 -3 5 -2 6 -1 6 -1 6 0 5 3 5 3 5 -1 5 -4 5 -3 4 -4 4 -5 3 -5 2 -6 2 -5 0 -6 0 -6 0 -6 0 -6 2 -5 3 -5 3 -5 2 -6 0 -5 0 -6 0 -6 -1 -6 -2 -6 -2 -5 -3 -5 -4 -5 -4 -4 -5 -2 -5 -3 -6 -2 -5 -2 -6 -2 -5 -2 -5 -3 -5 -4 -5 -3 -3 -4 -3 -6 -2 -5 -2 -6 -1 -6 -1 -5 1 -6 0 -6 2 -6 1 -5 1 -6 1 -6 2 -6 1 -5 2 -6 3 -5 3 -5 3 -4 5 -4 5 -3 5 -3 5 -2 3 -5 2 -6 2 -5 2 -6 2 -5 2 -6 1 -6 1 -5 2 -6 1 -6 1 -6 0 -5 -1 -6 0 -6 0 -6 0 -6 1 -5 2 -6 3 -5 3 -5 3 -5 3 -5 4 -4 5 -4 5 -3 5 -3 5 -3 5 -3 5 -3 5 -2 6 -2 5 -2 6 -2 5 -2 6 -1 6 -1 6 0 6 0 5 0 6 0 6 0 6 1 6 0 5 -1 6 -2 5 -2 6 -3 5 -2 5 -3 7 -9","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str4","@d":"M-2370 4984l5 -2 6 -1 5 -2 6 -2 5 -3 5 -2 5 -3 6 -2 5 -3 5 -2 7 -3","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str4","@d":"M-141 1874l-3 -5 -4 -5 -5 -3 -4 -3 -5 -3 -5 -4 -5 -3 -4 -4 -5 -4 -4 -4 -4 -4 -5 -3 -5 -4 -5 -2 -5 -3 -5 -3 -5 -3 -4 -5 -2 -5 0 -6 1 -6 -1 -5 -4 -3 -6 -2 -6 -3 -4 -3 -4 -5 -3 -5 -2 -6 1 -5 2 -6 1 -6 -1 -6 -1 -5 -3 -6 -3 -5 -4 -4 -4 -4 -5 -4 -5 -3 -5 -3 -4 -4 -5 -3 -6 -2 -5 -3 -9 -5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str4","@d":"M572 2328l-5 -3 -5 -2 -5 -3 -6 -3 -5 -2 -5 -2 -6 -2 -6 -1 -6 -1 -5 0 -6 0 -6 0 -5 2 -6 3 -5 2 -6 2 -5 1 -6 1 -6 1 -6 1 -6 1 -6 1 -6 1 -5 0 -5 -4 -3 -5 1 -4 5 -4 6 -4 3 -4 4 -5 2 -6 1 -5 -3 -6 -5 -2 -6 0 -5 3 -5 4 -5 3 -5 0 -5 -3 -6 -2 -6 -2 -5 -3 -3 -4 -3 -5 -2 -6 -2 -6 -4 -5 -3 -4 -3 -5 -4 -5 -4 -4 -4 -4 -4 -5 -4 -4 -4 -4 -4 -4 -3 -5 -4 -5 -3 -4 -3 -5 -3 -5 -3 -6 -2 -5 -1 -6 -3 -6 -3 -4 -4 -3 -6 -1 -7 -1 -5 0 -6 0 -6 1 -6 -1 -6 -1 -5 -2 -5 -2 -5 -3 -6 -3 -5 -3 -5 -3 -5 -3 -5 -3 -4 -3 -5 -3 -5 -4 -5 -3 -5 -3 -5 -3 -5 -3 -5 -3 -5 -3 -5 -3 -5 -3 -5 -3 -5 -3 -5 -3 -5 -3 -5 -3 -5 -3 -5 -3 -5 -3 -5 -3 -5 -3 -5 -2 -5 -3 -5 -3 -5 -3 -5 -3 -5 -3 -5 -4 -5 -3 -5 -3 -5 -3 -5 -4 -4 -3 -5 -3 -5 -4 -5 -3 -5 -2 -5 -3 -6 -2 -5 -2 -6 -3 -5 -2 -4 -4 -5 -3 -5 -3 -5 -4 -4 -3 -5 -4 -4 -4 -5 -3 -5 -4 -4 -3 -5 -4 -4 -4 -5 -3 -5 -4 -4 -3 -5 -3 -5 -3 -5 -3 -5 -3 -5 -4 -4 -4 -4 -4 -4 -4 -4 -5 -4 -4 -4 -5 -4 -4 -4 -4 -4 -4 -5 -3 -5 -3 -5 -3 -5 -4 -4 -4 -4 -3 -6 -6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str4","@d":"M-473 1564l-5 -1 -6 0 -6 0 -6 0 -6 0 -6 1 -5 -2 -4 -4 -4 -5 -3 -5 -4 -4 -3 -5 -3 -5 -5 -3 -5 -1 -6 -2 -6 0 -6 1 -6 0 -5 -1 -6 -1 -5 -3 -5 -3 -5 -3 -6 -3 -5 -2 -5 -3 -5 -2 -6 -2 -5 -3 -6 -2 -5 -1 -6 -1 -6 -1 -5 -1 -6 0 -6 -1 -6 -1 -5 -2 -6 -1 -6 -1 -5 -2 -6 -1 -6 -2 -5 -1 -6 -1 -6 -2 -5 -1 -6 -3","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str4","@d":"M-3298 2439l-6 1 -5 1 -6 0 -6 -1 -6 -1 -5 -2 -6 -1 -6 -1 -5 -1 -6 -1 -6 -1 -6 0 -6 -1 -5 -1 -6 -2 -5 -2 -5 -4 -4 -4 -5 -4 -4 -4 -4 -4 -3 -5 -3 -5 -4 -4 -5 -4 -4 -4 -5 -3 -5 -2 -6 -1 -6 0 -6 1 -6 1 -6 1 -5 2 -6 2 -5 2 -5 2 -6 3 -5 3 -5 3 -5 3 -5 2 -6 2 -5 1 -6 0 -6 0 -6 -1 -6 0 -5 -1 -6 1 -6 1 -6 2 -5 2 -6 1 -5 3 -5 4 -5 0 -5 -2 -6 -4 -5 -2 -6 -2 -5 -1 -6 -1 -6 -1 -6 0 -6 0 -5 -1 -6 0 -6 0 -6 0 -6 0 -6 1 -5 1 -6 2 -5 2 -6 2 -5 3 -5 2 -5 3 -5 3 -5 3 -5 4 -4 4 -5 2 -6 3 -5 1 -6 2 -6 1 -6 1 -5 1 -6 0 -6 0 -6 0 -6 0 -5 0 -6 0 -6 0 -6 1 -6 1 -5 1 -6 1 -6 -1 -6 -1 -5 0 -6 0 -6 1 -6 1 -6 1 -5 2 -6 1 -6 1 -5 2 -6 2 -6 2","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str4","@d":"M-3146 2517l-6 -1 -6 -2 -5 0 -6 1 -5 2 -6 2 -6 2 -5 2 -6 2 -5 1 -6 -1 -6 -2 -5 -3 -4 -4 -4 -4 -4 -4 -3 -6 -3 -4 -6 -3 -4 -3 -5 -4 -5 -4 -4 -4 -2 -4 1 -6 2 -5 2 -6 0 -7 0 -6 -4 -3 -5 -3 -6 -1 -6 -1 -6 -1 -6 1 -7 1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str4","@d":"M-2917 2335l-4 5 -4 4 -6 2 -6 0 -5 2 -4 4 -4 5 -4 4 -5 3 -5 2 -6 1 -6 0 -6 0 -6 1 -6 1 -5 1 -6 1 -5 2 -5 4 -4 4 -4 4 -5 4 -4 4 -4 4 -4 5 -4 4 -4 4 -3 5 -3 5 -3 5 -3 5 -3 5 -3 5 -3 5 -3 5 -2 5 -3 6 -2 5 -2 6 -2 5 -2 5 -2 6 -3 5 -2 5 -4 5 -4 4 -5 3 -4 4 -6 2 -6 1 -5 2 -6 0 -6 -1 -8 -1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str4","@d":"M-310 1686l-5 -3 -5 -3 -5 -4 -5 -2 -5 -3 -5 -3 -6 -2 -5 -3 -5 -2 -5 -3 -5 -3 -6 -2 -5 -2 -6 -2 -6 -1 -6 -2 -4 -3 -3 -5 -1 -6 0 -6 -3 -6 -7 -8 -4 -4 -4 -4 -4 -5 -4 -4 -5 -4 -4 -4 -4 -3 -5 -4 -4 -4 -5 -4 -5 -2 -10 -5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil7 str5","@d":"M2998 367l0 6 -3 5 -5 2 -6 -1 -6 -1 -6 -1 -5 -1 -6 0 -6 1 -6 2 -5 2 -6 2 -4 3 -5 4 -4 4 -4 5 -2 5 -2 5 -2 6 -1 6 -1 5 -1 6 0 6 0 7 2 5 6 1 6 0 2 6 -2 5 -4 4 -5 4 -5 4 -4 3 -4 5 -4 4 -5 3 -4 4 -5 4 -4 4 -2 6 -1 5 1 6 1 6 1 6 1 5 2 6 2 5 3 6 2 5 4 9","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M1321 577l6 1 4 4 5 3 3 5 3 5 3 5 3 5 2 6 3 5 3 5 3 5 3 5 2 5 3 6 3 5 4 4 3 5 4 4 4 4 5 4 4 3 5 4 5 3 5 3 5 3 5 4 5 3 4 3 5 3 5 3 5 4 5 3 4 4 5 4 4 3 5 3 5 3 5 3 5 3 5 3 6 3 5 2 5 3 6 2 5 2 5 2 6 2 5 2 6 2 5 2 6 1 6 2 5 2 6 2 5 2 6 1 5 2 6 3 5 2 6 1 5 2 6 0 6 0 6 1 5 2 6 2 5 3 5 2 6 2 5 3 5 2 6 2 5 2 6 3 5 2 6 1 5 2 6 2 5 1 6 2 5 2 6 2 6 2 5 1 6 2 5 1 6 1 6 0 6 1 6 0 5 0 6 0 6 0 6 0 6 2 5 2 6 3 5 2 5 2 6 0 5 -2 5 -3 6 -2 6 -2 5 -1 6 1 6 1 6 1 5 1 6 -1 6 -1 6 0 5 1 6 3 5 2 6 2 5 1 6 0 6 -2 5 -2 5 -4 4 -4 4 -4 4 -4 4 -5 3 -5 4 -4 4 -4 5 -4 5 -3 5 -3 5 -3 5 -3 5 -2 5 -3 6 -2 5 -2 6 -2 6 -1 6 0 5 2 5 3 5 4 5 3 5 3 5 2 6 1 6 0 5 0 6 -1 6 -1 6 -1 6 -1 5 -1 5 -3 4 -4 4 -5 3 -5 3 -5 3 -5 3 -5 3 -5 4 -4 4 -5 5 -3 5 -3 5 -2 6 -2 6 -2 5 -1 6 -2 6 -1 5 -1 6 -1 6 0 6 1 5 2 6 2 5 2 6 -2 5 -2 6 -2 5 -1 6 -1 6 0 6 -1 6 -1 5 -1 6 -1 6 -1 6 1 5 2 6 1 5 2 6 2 6 1 5 0 6 0 6 0 6 1 5 2 6 2 6 1 6 1 6 1 5 1 6 0 6 0 5 0 5 -4 4 -4 3 -5 2 -6 2 -6 3 -5 4 -4 6 -1 5 0 6 1 6 0 6 -2 4 -3 5 -5 3 -4 3 -5 2 -6 2 -6 1 -5 3 -5 3 -6 3 -4 3 -5 4 -5 4 -4 4 -4 4 -4 4 -4 4 -5 5 -4 5 -3 5 2 5 3 6 1 6 0 6 -1 5 -1 6 -2 6 -1 5 -2 6 -2 5 -3 4 -3 5 -4 4 -4 5 -4 4 -4 4 -4 4 -4 4 -5 4 -4 4 -4 4 -4 4 -5 4 -4 4 -4 4 -4 5 -4 4 -4 5 -4 4 -3 5 -3 5 -3 6 -2 5 -3 5 -2 6 -1 6 -2 5 -2 6 -1 5 -2 6 -2 6 -1 5 -2 6 -2 5 -4 4 -4 5 -3 5 -1 6 1 6 2 5 2 6 2 6 1 5 -1 6 -3 4 -3 4 -5 4 -4 3 -5 4 -4 4 -5 4 -4 4 -4 4 -5 4 -4 5 -3 4 -4 5 -4 5 -3 5 -2 5 -2 6 1 6 0 6 1 6 1 6 1 6 -1 6 -1 5 -3 2 -4 2 -6 1 -6 1 -6 1 -6 2 -5 4 -5 3 -4 3 -5 3 -11","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M1321 367l3 5 3 5 2 5 3 5 4 5 3 5 4 4 4 4 5 4 4 4 5 3 5 4 5 3 5 3 5 3 5 2 5 2 6 2 6 1 6 1 5 1 6 0 6 0 6 -1 6 -1 5 -1 6 -3 5 -2 5 -3 4 -4 5 -3 5 -4 5 -3 5 -3 5 -2 6 -2 5 -2 5 -3 5 -4 3 -4 4 -5 3 -5 4 -5 4 -4 4 -3 6 -2 10 -2","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M770 1225l-1 -5 -1 -6 -1 -6 0 -6 -1 -6 -1 -5 0 -6 -1 -6 -1 -6 0 -6 1 -5 2 -6 1 -6 2 -5 1 -6 0 -6 1 -6 1 -5 1 -6 0 -6 1 -6 0 -6 1 -5 0 -6 0 -6 -1 -6 0 -6 -1 -6 0 -5 -1 -6 0 -6 0 -6 0 -6 0 -6 1 -6 1 -5 2 -6 4 -4 4 -5 5 -3 5 -1 6 0 6 1 6 1 6 0 6 -1 6 0 6 -1 5 0 6 -1 6 -1 6 -1 5 -1 6 -1 6 -2 5 -1 6 -2 6 -1 5 -2 5 -2 6 -3 5 -3 5 -2 6 -2 5 -1 6 0 6 0 6 0 6 0 6 0 5 1 6 0 6 0 6 -1 6 0 6 0 5 -1 6 -1 6 0 6 -1 5 -1 6 -2 6 -1 5 -2 6 -2 5 -3 5 -3 4 -4 5 -4 4 -4 4 -4 3 -5 2 -6 3 -5 3 -5 4 -4 4 -4 4 -5 4 -3 5 -4 4 -4 5 -3 5 -3 5 -3 5 -3 6 -2 5 -2 6 -2 5 -1 6 -2 6 -2 4 -3 5 -3 4 -4 4 -5 4 -4 4 -4 4 -5 4 -4 3 -5 4 -4 5 -4 4 -4 4 -4 4 -4 4 -4 4 -5 3 -5 4 -4 3 -5 3 -5 3 -5 3 -5 3 -5 1 -6 2 -5 0 -6 1 -6 1 -6 1 -6 2 -5 1 -6 2 -6 1 -5 2 -6 1 -6 2 -5 2 -5 3 -6 2 -5 3 -5 3 -5 3 -5 4 -4 4 -5 4 -4 5 -4 4 -4 4 -4 5 -4 2 -5 3 -5 2 -5 1 -6 2 -6 0 -6 1 -6 -1 -5 -1 -6 -1 -10","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M706 1099l1 -5 1 -6 -2 -6 -3 -5 -4 -4 -5 -4 -4 -3 -5 -3 -5 -4 -5 -3 -3 -5 -4 -5 -3 -5 -2 -5 -2 -5 0 -6 0 -6 -1 -6 -2 -5 -2 -6 -2 -5 -3 -5 -3 -6 -2 -5 -3 -5 -2 -5 -3 -6 -3 -5 -3 -5 -2 -5 -2 -6 -2 -5 -1 -6 -2 -6 -1 -5 -1 -6 -2 -6 -1 -5 -1 -6 -1 -6 -1 -6 -1 -5 0 -6 -1 -6 0 -6 0 -6 1 -5 0 -6 0 -6 1 -6 0 -6 1 -6 0 -5 0 -6 1 -6 0 -6 0 -6 0 -6 0 -5 0 -6 -1 -6 0 -6 -1 -6 -1 -5 -2 -6 -2 -5 -3 -5 -3 -5 -3 -5 -4 -5 -3 -5 -2 -5 -1 -6 -1 -6 -1 -6 0 -5 0 -6 -1 -6 -1 -6 -1 -6 -1 -5 -2 -6 -2 -5 -2 -6 -3 -5 -2 -5 -3 -6 -2 -5 -3 -5 -2 -5 -3 -6 -3 -5 -2 -5 -3 -5 -4 -5 -4 -4 -5 -2 -6 -2 -6 0 -6 -1 -6 1 -5 0 -6 1 -6 1 -6 1 -6 0 -5 0 -6 -1 -6 -2 -5 -2 -5 -3 -5 -3 -5 -3 -5 -3 -5 -4 -4 -3 -5 -4 -4 -4 -4 -5 -4 -4 -3 -5 -4 -4 -4 -4 -4 -5 -4 -4 -4 -4 -5 -4 -5 -2 -5 -2 -6 -2 -6 -1 -6 0 -6 -1 -5 1 -6 0 -6 1 -6 0 -6 -1 -5 0 -6 0 -6 0 -6 0 -6 -1 -6 0 -5 -1 -6 0 -6 -1 -6 0 -6 0 -5 1 -6 1 -6 2 -5 2 -6 1 -5 3 -5 3 -5 3 -6 2 -5 1 -6 0 -6 0 -6 0 -6 0 -6 1 -6 0 -5 -1 -6 0 -6 -2 -5 -1 -6 -2 -5 -2 -6 -2 -5 -3 -5 -3 -5 -4 -5 -3 -5 -2 -6 -2 -5 -2 -6 0 -6 2 -4 3 -4 5 -4 4 -5 3 -5 4 -3 5 -2 6 -2 5 -3 5 -4 3 -6 3 -5 2 -5 2 -6 3 -5 2 -5 3 -5 3 -5 2 -6 2 -6 2 -5 2 -5 2 -5 4 -3 5 -4 4 -4 5 -3 5 -3 5 -4 4 -4 4 -5 3 -6 2 -5 2 -6 1 -5 2 -5 4 -3 5 -4 4 -3 6 -2 5 -1 6 2 5 2 6 3 5 2 5 1 6 1 6 0 6 -1 5 -1 6 -2 6 -3 5 -4 4 -5 3 -5 3 -5 3 -5 3 -5 3 -5 3 -5 3 -6 1 -6 0 -6 -1 -6 0 -5 0 -6 0 -6 0 -6 1 -6 0 -5 1 -6 0 -6 2 -5 3 -6 1 -5 -2 -6 -2 -4 -4 -3 -5 -4 -5 -4 -4 -4 -5 -4 -5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M3405 5687l-5 2 -6 3 -5 2 -5 3 -4 5 -3 5 -3 5 -3 4 -4 6 -3 4 -4 4 -5 3 -6 2 -6 2 -5 1 -6 0 -6 1 -6 0 -6 -1 -5 0 -6 0 -6 0 -6 0 -6 -1 -6 1 -5 1 -6 2 -5 2 -6 2 -6 1 -5 0 -6 0 -6 -1 -6 -1 -6 -1 -5 -1 -6 -1 -6 0 -6 -1 -5 0 -6 1 -6 1 -6 1 -6 1 -5 0 -6 0 -6 1 -6 0 -6 -1 -5 0 -6 0 -6 0 -6 -1 -6 0 -6 -1 -5 0 -6 -1 -7 -1 -6 -1 -5 0 -6 1 -4 2 -4 5 -3 6 -2 5 0 6 0 6 0 6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M2442 6139l2 -6 2 -6 1 -5 1 -6 2 -6 2 -6 1 -6 1 -5 -1 -6 -2 -4 -5 -4 -5 -4 -5 -3 -6 -1 -6 -2 -5 -1 -6 -1 -6 -2 -5 -2 -6 -2 -6 -2 -6 -2 -5 -3 -4 -3 -2 -5 0 -6 0 -6 1 -6 -1 -6 -1 -6 -2 -6 -2 -5 -2 -6 -2 -5 -2 -6 -2 -5 -2 -6 -3 -4 -4 -5 -3 -4 -4 -5 -4 -4 -4 -4 -5 -4 -4 -4 -4 -4 -4 -5 -4 -4 -4 -4 -5 -4 -4 -4 -4 -4 -5 -4 -4 -3 -5 -3 -6 -3 -5 -1 -6 -1 -6 0 -6 0 -6 2 -5 2 -5 3 -5 3 -5 3 -5 2 -6 2 -6 1 -6 0 -5 0 -6 0 -6 -1 -6 0 -6 -1 -6 0 -5 -1 -6 -1 -6 -1 -6 -1 -5 -1 -6 -2 -6 -1 -5 -1 -6 -2 -6 -2 -5 -1 -6 -2 -5 -1 -6 -2 -6 -1 -5 -2 -6 -1 -6 -2 -5 -1 -6 -2 -6 -1 -5 -1 -6 -1 -6 -1 -6 0 -5 0 -6 -1 -6 0 -6 0 -6 -1 -6 0 -5 -1 -6 -1 -6 0 -6 -1 -6 0 -5 0 -6 0 -6 1 -6 1 -5 1 -6 2 -6 1 -5 2 -6 2 -5 2 -6 2 -5 2 -6 2 -5 3 -5 3 -5 2 -6 2 -5 1 -6 1 -6 1 -6 1 -5 1 -6 2 -6 1 -5 2 -6 1 -6 2 -5 0 -6 1 -6 0 -6 0 -6 1 -5 0 -6 1 -6 1 -6 1 -5 1 -6 1 -6 1 -6 1 -5 1 -6 1 -6 1 -6 1 -6 1 -5 1 -6 1 -5 2 -6 2 -5 3 -5 2 -6 2 -5 2 -6 2 -5 2 -6 2 -5 2 -6 2 -5 2 -6 2 -5 3 -5 3 -5 3 -4 4 -5 3 -5 3 -5 3 -5 3 -6 2 -5 2 -5 3 -6 2 -5 3 -5 2 -5 4 -5 3 -5 2 -6 2 -6 0 -6 -1 -5 0 -6 1 -6 2 -5 2 -6 3 -5 2 -5 3 -5 3 -2 5 -1 6 -2 6 -3 5 -5 3 -5 2 -6 2 -6 1 -5 1 -6 1 -6 1 -6 1 -5 2 -6 2 -5 3 -4 3 -4 5 -4 4 -3 5 -4 5 -4 4 -4 4 -4 4 -4 4 -5 4 -4 4 -4 4 -5 4 -5 2 -6 2 -5 1 -6 2 -6 1 -5 2 -4 4 -4 5 -5 4 -5 2 -5 1 -6 2 -6 1 -6 1 -6 1 -5 1 -6 0 -6 0 -6 0 -5 -1 -6 -1 -6 -1 -6 -1 -5 -2 -6 -1 -6 -1 -6 0 -5 1 -6 1 -6 0 -6 1 -6 0 -5 0 -6 0 -6 1 -6 1 -6 1 -5 1 -6 1 -6 0 -6 0 -6 -2 -4 -4 -3 -5 -2 -6 -4 -4 -5 -3 -5 -3 -5 -2 -6 -2 -5 -2 -6 -1 -6 -2 -6 -1 -5 0 -6 1 -6 1 -6 1 -6 2 -5 1 -6 2 -5 1 -6 2 -6 0 -6 1 -5 0 -6 0 -6 0 -6 0 -6 1 -6 0 -6 0 -5 0 -6 0 -6 0 -6 0 -6 0 -5 -1 -6 -1 -6 -1 -6 -1 -5 0 -6 -1 -6 0 -6 1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-556 6840l-5 2 -5 3 -6 3 -5 2 -5 3 -5 4 -4 3 -4 5 -4 5 -2 5 -2 5 -1 6 0 6 -1 6 0 6 -1 5 -2 6 -2 5 -2 6 -2 5 -3 6 -3 5 -3 4 -4 5 -4 4 -5 3 -5 3 -6 2 -5 2 -6 1 -6 1 -5 1 -6 1 -6 1 -6 2 -5 1 -6 3 -5 2 -5 3 -5 3 -5 2 -5 3 -6 3 -5 3 -5 3 -5 3 -4 4 -3 5 -4 4 -4 5 -4 4 -4 4 -4 4 -5 4 -4 4 -4 4 -4 4 -4 4 -4 5 -4 4 -4 4 -4 5 -4 4 -3 5 -3 5 -2 5 -2 6 -2 5 -2 6 -2 5 -3 6 -3 5 -3 5 -3 4 -4 5 -4 4 -4 4 -5 4 -5 3 -5 3 -5 2 -6 2 -5 0 -6 1 -6 2 -6 2 -5 2 -5 3 -4 4 -3 5 -2 6 -1 5 2 6 2 6 0 5 0 6 -2 6 -2 5 -2 6 -3 5 -4 5 -4 4 -4 3 -6 3 -5 2 -6 2 -5 3 -5 3 -4 4 -4 4 -3 5 -4 4 -4 5 -5 8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M648 6287l0 6 0 6 0 6 1 6 2 5 1 6 2 6 2 5 3 5 1 6 0 5 -2 6 -3 5 -2 6 -4 5 -3 4 -4 5 -4 4 -3 5 -4 4 -4 5 -4 4 -5 3 -4 4 -5 3 -5 4 -4 4 -3 5 -2 5 -1 6 -4 5 -4 4 -4 4 -4 4 -5 4 -4 4 -3 4 -2 6 0 6 2 5 2 6 3 5 4 4 4 5 3 5 2 5 3 5 2 6 2 5 3 6 2 5 1 6 -1 5 -1 6 -1 6 -1 6 -1 5 -1 6 0 6 -1 6 -1 6 -1 5 -2 6 -1 6 -2 5 -2 6 -2 5 -2 6 -3 5 -3 5 -3 4 -4 5 -4 4 -5 4 -4 4 -5 3 -4 4 -5 4 -5 3 -5 3 -5 3 -4 3 -5 4 -4 4 -3 5 -4 4 -4 5 -3 5 -4 4 -3 5 -4 4 -3 5 -4 5 -3 5 -3 5 -3 5 -3 5 -3 5 -3 5 -3 4 -4 5 -4 4 -4 5 -3 4 -4 5 -3 5 -4 4 -4 5 -4 5 -3 4 -3 5 -3 5 -2 5 -2 6 -1 6 0 6 0 6 -1 5 0 6 0 6 0 6 1 6 0 6 0 5 1 6 0 6 1 6 0 6 1 5 0 6 1 6 0 6 1 6 0 6 1 5 0 6 -1 6 -1 6 -1 5 -1 6 -1 6 0 6 -1 5 0 6 -1 6 -1 6 -2 5 -1 6 -1 6 -1 5 -2 6 -1 6 -1 6 0 5 0 6 0 6 1 6 1 6 2 5 0 6 1 6 0 6 -1 6 0 6 -1 5 -2 6 -2 5 -3 5 -3 5 -4 5 -4 4 -4 5 -3 5 -2 5 -2 5 -2 6 -2 5 -2 6 -1 6 -2 5 -2 5 -3 6 -2 5 -4 5 -3 5 -3 4 -4 5 -4 4 -4 5 -3 4 -4 5 -3 5 -2 5 -5 10","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-2705 7287l-4 -5 -3 -5 -3 -5 0 -6 -1 -6 0 -6 1 -6 0 -5 -2 -6 -3 -5 -5 -2 -6 -1 -6 -1 -6 -1 -6 0 -5 -1 -6 0 -6 -1 -6 -1 -5 -2 -6 -2 -5 -2 -6 -2 -5 -2 -6 -1 -5 -2 -6 -1 -6 -1 -6 -1 -6 -1 -5 -1 -6 0 -6 2 -5 2 -5 2 -5 3 -5 4 -4 4 -4 4 -4 5 -4 4 -5 4 -4 4 -4 4 -5 3 -4 4 -5 3 -5 2 -6 3 -5 3 -4 4 -5 3 -6 1 -6 0 -6 -1 -4 -4 -2 -6 -5 -2 -6 0 -6 1 -5 3 -3 5 -2 6 -1 11","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-3947 3399l-5 -4 -4 -3 -2 -6 0 -6 0 -6 1 -5 2 -6 2 -6 3 -5 4 -3 6 -2 5 -1 6 -1 6 -1 5 -2 5 -3 5 -3 5 -4 5 -3 4 -3 5 -4 4 -4 4 -5 4 -4 3 -5 3 -5 3 -5 3 -5 3 -5 4 -4 4 -4 5 -4 5 -3 5 -3 5 -2 5 -3 5 -3 6 -3 5 -2 6 -1 5 -1 6 -1 6 0 6 0 6 -1 6 -1 5 -1 6 -1 6 -2 5 -1 6 -2 4 -4 5 -4 5 -2 6 0 6 1 6 0 6 1 5 -1 4 -3 4 -6 3 -4 3 -5 3 -6 1 -5 1 -6 3 -5 3 -5 5 -4 5 -3 5 -3 4 -3 5 -4 5 -4 4 -3 5 -4 5 -3 5 -3 5 -3 5 -3 5 -3 5 -3 4 -3 5 -4 5 -3 5 -2 6 -2 6 -1 5 0 6 -2 6 -1 6 -1 5 -2 6 -1 5 -2 6 -3 5 -3 4 -3 5 -4 4 -4 4 -5 3 -4 3 -5 4 -5 3 -4 4 -5 4 -4 5 -4 4 -4 5 -3 5 -4 4 -3 4 -4 4 -5 2 -5 2 -6 3 -5 3 -5 3 -5 4 -4","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-4270 3123l5 2 6 2 5 1 6 2 6 2 5 0 6 -1 6 -2 5 -2 6 -2 5 -2 5 -3 4 -4 5 -4 5 -2 6 -2 5 -2 6 -1 6 -2 5 -1 6 -2 5 -2 6 -1 6 -2 5 -2 6 -2 5 -1 6 -2 5 -2 6 -2 5 -2 6 -2 5 -1 6 -2 6 -1 6 -1 5 -1 6 0 6 -1 6 1 6 1 5 2 5 4 3 5 3 5 4 4 5 4 5 3 5 2 5 -2 5 -4 5 -4 4 -4 5 -3 4 -4 5 -4 4 -4 5 -3 4 -4 4 -4 5 -4 4 -4 4 -5 3 -4 3 -5 3 -6 2 -5 2 -6 3 -5 3 -5 3 -4 5 -4 4 -4 5 -3 6 -3 5 -3 5 -2 6 -1 6 -1 5 0 6 0 6 0 6 1 6 0 6 0 6 -1 5 -1 5 -3 4 -4 5 -4 4 -4 5 -3 5 -3 6 -3 5 -2 5 -2 5 -3 6 -2 5 -2 6 -2 5 -3 6 -2 5 -2 5 -4 4 -3 4 -5 3 -4 4 -5 4 -4 4 -4 5 -4 4 -4 4 -4 5 -4 5 -3 4 -4 5 -2 6 -3 5 -1 6 -2 6 0 6 -1 6 -1 5 -2 5 -3 5 -3 5 -3 5 -2 6 -3 5 -2 5 -3 5 -2 6 -2 5 -2 6 -2 5 -1 6 -1 6 -1 6 -1 5 -2 6 -2 5 -2 5 -3 6 -3 5 -2 5 -3 5 -3 5 -3 5 -3 5 -3 5 -3 5 -3 5 -3 5 -4 4 -3 5 -3 5 -4 4 -3 5 -3 5 -3 6 -3 5 -3 5 -2 6 -1 6 0 6 0 6 0 6 1 6 1 5 1 5 3 4 4 3 5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-3997 3618l-1 -6 0 -6 -1 -6 -1 -5 -2 -6 -1 -5 1 -6 4 -5 4 -4 5 -4","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-2994 3305l6 -3 4 -3 5 -5 5 -2 6 -1 5 0 6 -1 6 0 6 2 4 3 5 4 5 4 5 3 5 1 6 1 6 1 6 1 5 2 6 1 5 3 6 2 5 1 6 -1 5 -3 6 -1 6 0 6 0 5 -1 5 -4 1 -5 -3 -6 -3 -5 -3 -5 -4 -4 -2 -6 -1 -5 -1 -6 0 -6 0 -6 -1 -6 1 -6 3 -4 5 -4 4 -4 4 -4 5 -4 4 -4 4 -5 4 -4 3 -4 4 -5 4 -4 4 -5 3 -5 3 -5 3 -5 4 -4 4 -3 5 -4 5 -3 5 -3 5 -3 5 -4 4 -4 4 -4 3 -5 2 -6 2 -9","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-3280 3507l4 3 4 4 4 5 3 5 3 5 3 5 2 5 2 6 1 5 2 6 2 6 2 5 2 6 2 5 2 5 3 6 2 5 3 5 4 5 3 4 4 5 4 4 4 4 4 4 5 4 4 4 4 4 5 4 5 3 4 4 5 3 5 3 5 3 5 3 5 3 5 3 6 2 5 3 5 2 6 2 6 1 5 0 6 -1 5 -3 6 -2 5 -2 6 -2 6 -2 5 0 6 1 6 2 4 4 4 4 4 4 4 5 4 4 2 6 4 5 4 3 5 3 5 2 6 2 6 1 5 2 6 1 6 0 6 1 5 1 6 0 6 1 6 0 6 0 6 1 5 0 6 0 6 1 6 1 5 2 6 1 6 2 5 1 6 2 6 1 5 2 6 1 5 2 6 2 5 2 6 1 6 2 5 2 6 1 5 2 6 2 6 1 5 2","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-2668 3397l-6 0 -6 1 -6 3","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-1483 3350l-4 4 -6 3 -5 2 -5 3 -5 4 -4 3 -5 3 -5 4 -5 3 -4 4 -5 3 -5 2 -6 1 -6 -1 -6 0 -6 0 -6 0 -5 0 -6 0 -6 0 -6 0 -6 0 -6 0 -5 -1 -6 -2 -5 -2 -6 -2 -5 -2 -6 -1 -6 -1 -6 0 -6 1 -5 1 -6 2 -5 2 -5 3 -6 3 -4 3 -5 3 -6 3 -5 2 -5 3 -4 4 -4 5 -3 5 -3 4 -4 5 -5 4 -5 1 -6 -1 -6 -2 -4 -4 -4 -4 -4 -4 -6 -2 -5 -2 -6 -1 -6 -2 -5 -1 -6 -2 -6 -1 -5 -2 -5 -3 -4 -4 -4 -5 -4 -4 -4 -4 -4 -4 -5 -4 -4 -4 -5 -3 -5 -3 -6 -2 -5 -3 -5 -2 -6 -3 -5 -2 -5 -2 -6 -3 -5 -2 -5 -2 -5 -3 -6 -3 -5 -3 -5 -2 -5 -3 -5 -3 -5 -2 -6 -3 -5 -2 -6 -2 -5 -1 -6 -1 -6 -1 -6 0 -5 -1 -6 0 -6 -1 -6 0 -6 0 -5 1 -6 2 -6 2 -5 3 -4 3 -5 4 -4 4 -4 5 -4 4 -4 4 -4 4 -5 4 -4 4 -4 4 -4 4 -4 4 -3 5 -3 5 -3 5 -3 5 -3 5 -2 6 -3 5 -3 5 -2 5 -3 5 -3 6 -3 5 -3 5 -3 5 -4 4 -4 4 -5 3 -5 2 -6 1 -6 0 -6 0 -6 0 -6 -1 -5 -1 -6 -1 -6 -2 -5 -2 -6 -1 -5 -2 -6 -1 -6 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-2299 3456l-4 -5 -8 -5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-2208 3444l-6 0 -6 0 -6 1 -5 1 -6 2 -5 3 -5 3 -4 4 -3 5 -4 5 -4 3 -6 0 -5 1 -6 -2 -6 -2 -5 -2 -4 -4 -5 -6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-856 2935l-6 2 -6 1 -5 1 -4 5 -3 5 -4 4 -3 5 -3 5 -2 5 -2 6 -2 5 -2 6 -2 5 -2 6 -3 5 -3 5 -3 5 -3 5 -4 4 -4 4 -5 4 -4 4 -5 3 -5 3 -5 3 -5 3 -3 5 -1 6 -1 6 -3 5 -4 4 -4 5 -4 4 -4 4 -4 4 -3 5 -3 5 -3 5 -3 5 -2 6 -2 5 -2 5 -3 6 -3 5 -3 5 -3 5 -3 5 -3 4 -4 5 -4 4 -4 4 -5 4 -7 5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-1039 3175l-4 4 -5 3 -5 3 -5 4 -5 3 -4 3 -5 4 -5 3 -4 4 -5 3 -5 4 -4 4 -5 3 -4 4 -5 3 -5 4 -4 3 -5 3 -5 3 -5 3 -6 3 -5 2 -5 3 -5 3 -10 4","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-1278 3261l-6 0 -5 0 -6 0 -6 -1 -6 0 -6 0 -6 -1 -5 0 -6 0 -6 0 -6 0 -7 1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-1349 3260l-6 0 -5 3 -5 3 -4 4 -5 3 -4 4 -5 4 -4 4 -5 3 -4 4 -4 5 -4 4 -1 6 -2 6 -4 2 -6 0 -6 1 -6 1 -5 2 -5 3 -6 2 -5 3 -5 2 -5 3 -5 3 -5 3 -4 4 -5 4 -4 4","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-2391 4081l-6 0 -6 0 -6 0 -5 -1 -6 -2 -5 -2 -6 -2 -5 -3 -4 -4 -5 -4 -3 -4 -3 -5 -4 -5 -4 -4 -4 -4 -5 -3 -5 -3 -5 -3 -5 -3 -6 -2 -5 -2 -6 -1 -6 -1 -6 1 -6 0 -6 1 -6 0 -5 -1 -5 -2 -5 -3 -5 -3 -5 -4 -5 -3 -5 -4 -6 -5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-1958 3866l-4 -3 -5 -3 -6 -2 -5 -3 -5 -2 -6 -2 -5 -3 -5 -3 -5 -3 -5 -3 -8 -6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-904 3767l-6 1 -5 1 -6 1 -6 1 -6 1 -5 0 -6 0 -6 0 -6 -1 -6 0 -6 0 -5 0 -6 -1 -6 0 -6 0 -6 0 -6 -1 -6 0 -5 0 -6 1 -6 0 -5 3 -5 3 -5 3 -6 2 -5 3 -5 3 -5 2 -6 2 -5 2 -6 2 -6 0 -5 1 -6 0 -6 0 -6 1 -6 0 -6 0 -5 1 -6 0 -6 0 -6 0 -6 0 -6 1 -5 0 -6 0 -6 1 -6 0 -6 1 -5 1 -6 2 -5 2 -6 3 -5 3 -4 4 -3 5 -2 5 -2 6 -3 5 -3 4 -5 5 -4 3 -5 4 -5 3 -5 3 -6 2 -5 2 -6 2 -5 1 -6 1 -6 2 -5 1 -6 2 -6 1 -5 2 -6 1 -5 2 -6 3 -5 2 -5 2 -5 3 -5 3 -5 3 -5 4 -5 3 -5 3 -5 3 -5 4 -4 3 -5 4 -4 4 -4 4 -4 4 -5 3 -5 3 -5 3 -5 3 -5 3 -5 3 -6 2 -5 3 -5 3 -5 3 -5 3 -4 4 -5 3 -5 4 -5 2 -5 3 -6 2 -5 1 -6 1 -6 1 -6 0 -6 1 -6 -2 -5 -1 -6 -2 -6 0 -6 0 -6 1 -5 2 -5 2 -5 4 -4 4 -4 4 -4 5 -4 4 -3 5 -1 6 1 6 3 5 3 5 2 5 3 6 2 5 1 6 1 6 1 6 0 6 0 6 -1 5 -3 5 -5 3 -6 3 -5 3 -5 3 -6 2 -5 1 -5 0 -6 -3 -5 -3 -5 -3 -5 -3 -5 -4 -5 -3 -5 -1 -6 -1 -6 -1 -6 -1 -6 -1 -5 -2 -5 -3 -4 -4 -5 -4 -4 -4 -6 -2 -5 -2 -5 -3 -5 -4 -5 -3 -4 -4 -5 -3 -5 -3 -5 -2 -6 0 -6 1 -6 0 -6 0 -6 0 -6 1 -6 0 -5 0 -6 -1 -6 -1 -5 -2 -6 -2 -5 -3 -5 -3 -5 -3 -5 -3 -4 -4 -5 -3 -4 -4 -4 -5 -3 -5 -3 -5 -4 -4 -5 -3 -5 -3 -6 -2 -5 -2 -6 -2 -5 -3 -4 -3 -5 -4 -5 -3 -4 -4 -5 -4 -4 -4 -4 -4 -4 -4 -4 -4 -3 -5 -3 -6 -2 -5 0 -6 1 -6 1 -6 -1 -5 -2 -6 -1 -6 -3 -5 -3 -5 -5 -3 -5 -4 -5 -3 -6 -4","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-847 3785l-6 0 -5 -2 -5 -3 -5 -4 -5 -4 -4 -3 -5 -3 -6 -1 -6 1 -7 1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-721 3304l-1 6 -1 6 0 6 -1 6 0 6 0 5 -1 6 -2 6 -3 5 -4 4 -5 3 -6 1 -5 2 -5 4 -3 5 -2 6 -2 5 -1 6 0 6 0 6 1 6 0 5 -2 6 -4 5 -3 4 -3 5 -3 5 -3 5 -2 6 -3 5 -2 6 -1 5 0 6 0 6 1 6 0 6 1 5 1 6 2 6 1 5 2 6 2 5 2 6 3 5 3 5 4 4 3 5 3 5 4 5 3 5 2 5 1 6 1 6 0 5 0 6 -1 6 -2 5 -2 6 -3 5 -1 6 -1 6 -1 6 0 5 0 6 1 6 1 6 1 5 2 6 0 6 1 6 0 6 0 5 1 6 0 6 1 6 0 6 1 6 0 5 0 6 0 6 0 6 -1 6 -1 5 -3 6 -3 5 -4 5 -4 3 -5 2 -6 1 -6 2 -6 1 -7 1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-45 3270l-1 -5 -2 -6 -1 -6 -1 -5 0 -6 0 -6 1 -6 0 -6 1 -5 1 -6 1 -6 1 -6 1 -5 2 -6 1 -6 2 -5 1 -6 2 -6 2 -5 3 -7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M10 3325l-4 -4 -5 -4 -4 -4 -4 -4 -4 -4 -4 -4 -5 -4 -4 -4 -4 -4 -5 -4 -4 -4 -4 -4 -4 -7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M512 3668l-5 -1 -6 -1 -6 -1 -5 -2 -6 -1 -6 -2 -5 -2 -4 -4 -5 -4 -4 -4 -4 -4 -4 -5 -4 -4 -5 -3 -4 -4 -5 -4 -4 -3 -5 -3 -5 -4 -5 -3 -5 -3 -5 -4 -4 -3 -5 -3 -5 -3 -5 -3 -5 -3 -5 -3 -5 -3 -6 -2 -5 -3 -5 -3 -5 -3 -5 -3 -5 -3 -4 -4 -5 -4 -4 -3 -6 -1 -6 0 -6 1 -6 0 -6 0 -5 -1 -6 0 -6 1 -6 1 -5 1 -6 1 -6 1 -6 1 -6 1 -5 1 -6 1 -6 0 -6 -1 -5 -1 -6 -2 -5 -3 -5 -4 -4 -4 -3 -5 -2 -5 -2 -6 -2 -5 -1 -6 -2 -6 -1 -6 -1 -5 -2 -6 -2 -5 -2 -6 -3 -4 -4 -5 -4 -5 -4 -4 -4 -3 -6 -1 -6 -1 -6 0 -6 0 -6 0 -5 1 -6 1 -6 1 -6 0 -6 1 -5 0 -7 0 -5 -2 -4 -3 -4 -5 -3 -5 -4 -5 -3 -4 -3 -6 -3 -5 -4 -4 -4 -5 -4 -4 -4 -4 -3 -5 -3 -5 0 -5 1 -6 1 -6 -1 -6 -1 -6 -1 -6 -2 -5 -1 -6 -2 -6 -2 -5 -3 -5 -3 -5 -4 -4 -8 -8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-477 3749l-1 -6 0 -6 -1 -5 0 -6 0 -6 0 -6 0 -6 0 -6 1 -5 0 -6 1 -6 1 -6 1 -5 2 -6 3 -5 2 -6 2 -5 1 -6 1 -6 -1 -6 -1 -5 -1 -6 -3 -5 -3 -5 -3 -5 -5 -6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M39 3854l-6 -2 -6 -1 -6 -1 -5 0 -6 0 -6 -1 -6 0 -6 0 -5 1 -6 0 -6 0 -6 0 -6 0 -6 0 -5 1 -6 0 -6 1 -6 0 -6 1 -6 0 -5 1 -6 1 -6 2 -5 1 -6 2 -6 1 -5 2 -6 2 -5 3 -5 3 -5 3 -4 4 -5 3 -6 2 -5 2 -6 1 -6 2 -5 1 -6 1 -6 1 -5 2 -6 1 -6 1 -6 1 -5 1 -6 0 -6 0 -6 0 -6 0 -6 0 -5 0 -6 0 -6 0 -6 0 -6 0 -6 0 -5 0 -6 -1 -6 0 -6 -2 -5 -1 -6 -1 -6 -2 -5 -1 -6 -1 -6 -2 -5 -1 -6 -1 -6 -1 -6 0 -6 0 -6 1 -5 0 -6 0 -6 0 -6 -2 -5 -1 -6 -2 -5 -3 -5 -3 -5 -3 -4 -4 -4 -4 -4 -5 -4 -4 -3 -5 -4 -5 -3 -4 -3 -5 -3 -5 -4 -10","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M577 3867l-5 -3 -5 -3 -5 -3 -5 -3 -5 -3 -5 -3 -5 -3 -5 -4 -5 -3 -5 -3 -5 -2 -5 -3 -6 -1 -6 1 -6 0 -6 2 -5 1 -6 3 -5 3 -4 3 -5 4 -4 4 -4 4 -4 5 -3 4 -4 5 -3 5 -4 4 -3 5 -4 5 -4 4 -3 5 -3 5 -4 4 -2 6 -2 6 -3 5 -3 4 -5 3 -5 2 -6 2 -6 0 -6 0 -6 -1 -5 -3 -4 -4 -3 -5 -3 -5 -2 -6 -2 -5 -1 -6 -1 -6 -2 -5 -4 -5 -3 -4 -4 -5 -4 -4 -4 -5 -4 -4 -4 -4 -4 -4 -5 -4 -4 -3 -5 -4 -4 -4 -4 -4 -4 -5 -3 -4 -4 -5 -4 -4 -4 -4 -4 -4 -5 -4 -5 -3 -5 -3 -6 -2 -5 -2 -6 -2 -5 -2 -6 -1 -6 -1 -5 -2 -6 0 -6 -1 -6 0 -5 1 -6 1 -6 2 -5 1 -6 2 -5 3 -5 2 -6 3 -5 2 -6 2 -5 1 -6 1 -6 1 -6 1 -5 1 -6 1 -6 2 -5 2 -4 5 -2 5 -3 5 -3 5 -4 5 -4 4 -5 3 -5 3 -5 3 -6 1 -5 0 -6 1 -6 0 -9 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-353 3088l-3 5 -3 5 -4 4 -3 5 -4 5 -4 4 -3 4 -5 5 -4 4 -5 3 -5 1 -6 0 -6 -1 -5 -2 -5 -3 -5 -3 -5 -4 -4 -4 -4 -4 -5 -4 -5 -3 -5 -1 -6 -1 -6 0 -6 0 -6 0 -6 0 -5 1 -6 2 -5 2 -5 3 -5 4 -4 4 -4 5 -3 5 -2 5 -2 6 -1 5 -2 6 -1 6 -1 6 0 5 -1 6 0 6 -1 6 -1 6 -2 5 -2 6 -2 5 -3 5 -3 5 -4 4 -5 3 -5 4 -3 4 -4 5 -3 5 -4 5 -3 5 -3 5 -2 5 -2 5 -2 6 -2 6 -2 5 -1 6 -1 5 -1 6 0 6 0 6 0 6 0 6 0 5 0 6 -1 6 -2 6 -2 5 -4 5 -4 4 -3 5 -2 5 -2 6 -1 6 -1 5 1 6 1 6 1 6 2 5 1 6 1 6 1 6 0 5 0 6 0 6 0 6 -1 7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-31 3155l2 -5 3 -6 3 -5 3 -5 3 -4 3 -5 3 -5 4 -5 3 -5 3 -5 4 -4 3 -5 4 -4 4 -4 4 -4 4 -5 4 -4 3 -5 3 -5 3 -5 3 -5 3 -6 2 -5 2 -5 1 -6 1 -6 -1 -6 -4 -3 -5 -3 -6 -2 -5 -2 -6 -1 -6 -1 -6 -1 -5 -1 -6 -2 -6 -1 -5 -2 -6 -1 -6 -2 -5 -1 -6 -2 -5 -2 -6 -3 -4 -3 -5 -3 -5 -4 -4 -4 -5 -3 -6 -2 -5 -2 -6 -1 -5 -2 -6 -1 -6 -2 -5 -1 -6 -1 -6 -1 -6 1 -5 2 -6 2 -5 3 -5 3 -6 1 -5 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-797 3779l-6 1 -5 2 -6 1 -6 1 -5 1 -6 0 -6 0 -10 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-457 3819l-2 -6 -2 -5 -2 -5 -2 -6 -1 -5 -2 -6 -2 -6 -1 -5 -1 -6 -1 -6 -2 -5 -2 -9","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-272 4462l-6 -1 -6 -1 -6 0 -5 0 -6 0 -6 -1 -5 -2 -6 -2 -5 -2 -6 -1 -6 -2 -5 -2 -6 -1 -6 0 -6 0 -6 0 -5 0 -6 1 -6 2 -5 1 -6 0 -5 -3 -6 -2 -5 -2 -6 -2 -5 -1 -6 -1 -6 -1 -6 -1 -6 0 -5 -1 -6 0 -6 0 -6 0 -6 0 -6 1 -5 0 -6 0 -6 1 -6 1 -6 1 -5 1 -6 1 -5 2 -6 2 -5 3 -6 2 -5 3 -5 3 -5 3 -4 4 -5 3 -4 4 -5 3 -5 4 -5 3 -4 3 -5 4 -5 3 -5 4 -5 3 -4 3 -5 3 -6 2 -6 1 -6 0 -5 2 -5 3 -4 4 -4 4 -4 5 -3 5 -4 9","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M380 4634l-4 3 -5 4 -5 3 -5 3 -5 2 -6 2 -6 2 -5 1 -6 2 -6 1 -5 1 -6 1 -6 1 -6 1 -5 0 -6 0 -6 0 -6 -2 -5 -1 -6 -1 -6 0 -6 0 -6 0 -5 0 -6 0 -6 0 -6 0 -6 1 -6 0 -5 1 -6 0 -6 1 -6 2 -5 1 -6 2 -5 2 -6 3 -5 2 -5 4","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M162 4676l-5 3 -4 5 -4 4 -4 4 -4 4 -5 4 -5 3 -4 4 -5 3 -4 4 -4 4 -5 4 -5 3 -4 4 -5 3 -5 3 -5 3 -5 3 -6 2 -5 0 -6 0 -6 -1 -6 -1 -5 -3 -3 -5 -2 -6 -1 -6 -1 -6 0 -5 0 -6 -1 -6 0 -6 -2 -6 -1 -5 -1 -6 -1 -6 -2 -5 -1 -6 -2 -6 -1 -5 -2 -6 -1 -5 -2 -6 -2 -5 -3 -6 -2 -5 -2 -6 -4 -5 -3 -4 -4 -4 -4 -4 -5 -4 -4 -4 -5 -3 -5 -4 -5 -3 -5 -3 -5 -3 -5 -2 -6 -2 -5 -2 -6 -2 -5 -2 -6 -1 -6 -1 -5 -1 -6 -1 -6 0 -6 -1 -6 0 -6 -1 -5 0 -6 0 -6 -1 -6 0 -6 0 -5 -1 -6 -1 -6 0 -6 -1 -6 -1 -5 0 -6 -1 -6 0 -6 0 -6 0 -6 0 -5 -1 -6 0 -6 -1 -6 -1 -6 -2 -5 -2 -4 -3 -2 -6 0 -6 0 -6 1 -6 2 -5 2 -6 2 -5 1 -6 1 -6 0 -6 -2 -5 -5 -4 -5 -3 -6 -1 -5 -1 -6 -1 -9 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-1708 4748l5 -1 6 -1 6 -2 5 -2 5 -3 5 -4 4 -4 3 -5 3 -5 4 -4 5 -3 6 -2 6 0 6 0 5 2 6 2 5 2 6 2 5 1 6 2 6 1 5 1 6 2 6 1 5 2 6 2 5 2 5 3 6 2 5 2 6 1 6 0 6 0 6 1 5 0 6 0 6 -2 5 -2 4 -4 3 -6 3 -4 6 -1 6 1 5 1 6 2 5 2 6 3 5 2 5 3 4 4 3 5 3 5 3 5 5 3 5 3 5 3 5 3 6 3 5 2 5 3 5 2 6 2 5 3 6 2 5 2 6 2 5 1 6 1 6 0 6 -1 6 0 5 -2 6 -1 6 -1 5 -1 6 -1 6 -1 6 1 5 1 6 1 6 1 6 1 5 1 6 2 6 2 5 2 5 2 6 2 5 2 6 3 5 2 5 3 6 1 5 1 6 0 6 -1 6 -1 6 -1 5 -2 6 -1 6 -2 5 -1 6 -2 5 -2 6 -1 6 -2 5 -1 6 -1 6 0 6 0 6 1 5 -2 5 -3 5 -3 5 -3 5 -4 4 -4 5 -4 4 -4 3 -5 3 -5 2 -5 2 -6 2 -5 3 -5 2 -6 4 -4 4 -5 4 -3 6 -2 5 -2 6 -2 5 -2 5 -3 4 -4 5 -4 5 -3 5 -3 5 -3 4 -4 4 -4 4 -5 3 -4 4 -5 3 -5 3 -5 3 -5 3 -5 3 -5 3 -5 3 -5 3 -5 4 -4 5 -4 4 -4 5 -2 6 -2 6 -2 5 -1 6 0 6 0 6 1 6 1 5 0 6 1 6 2 6 1 5 2 8 3","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M1576 1466l-6 2 -5 1 -6 1 -6 1 -6 1 -5 1 -6 2 -6 1 -5 1 -6 0 -6 0 -6 0 -6 0 -5 0 -6 0 -6 0 -6 0 -6 0 -6 0 -5 0 -6 0 -6 0 -6 1 -6 0 -6 1 -5 1 -6 1 -6 1 -6 0 -5 2 -6 1 -6 2 -5 2 -6 2 -5 2 -6 2 -5 3 -4 3 -4 5 -4 4 -3 5 -3 5 -4 5 -3 5 -3 5 -2 5 -1 6 -1 6 -1 6 0 5 0 6 1 6 -1 6 -2 5 -3 6 -2 5 -2 5 -2 6 -2 6 -1 5 -2 6 -2 5 -1 6 -2 6 -1 5 0 6 0 6 0 6 0 6 1 5 0 6 1 6 1 6 1 6 1 5 0 6 -1 6 0 6 -2 5 -1 6 -3 5 -3 5 -3 5 -4 5 -4 4 -4 4 -5 3 -5 4 -4 3 -5 3 -5 3 -5 4 -5 3 -5 3 -5 3 -4 4 -5 3 -5 4 -4 4 -3 4 -5 4 -5 4 -5 3 -5 3 -5 3 -5 2 -6 1 -6 1 -5 -1 -6 -1 -6 -2 -5 -1 -6 -1 -6 0 -6 -1 -6 -1 -6 1 -6 0 -5 3 -3 3 -4 6 -3 5 -3 5 -4 4 -4 5 -4 4 -4 4 -4 5 -3 5 -2 5 -3 5 -2 6 -2 5 -2 5 -2 6 -2 6 -1 5 -1 6 -2 6 -2 5 -2 5 -3 6 -2 5 -3 5 -2 5 -3 6 -3 5 -3 4 -4 5 -3 5 -4 5 -3 4 -4 4 -4 5 -4 4 -4 5 -4 4 -4 4 -4 5 -3 4 -4 4 -4 5 -4 4 -4 4 -4 4 -5 4 -4 5 -4 4 -4 4 -4 4 -4 4 -4 4 -4 4 -5 4 -4 4 -4 4 -4 4 -4 5 -4 4 -5 4 -4 4 -3 4 -4 5 -4 4 -3 5 -3 5 -4 5 -4 4 -3 5 -4 4 -4 4 -4 5 -4 4 -4 4 -4 5 -4 4 -4 4 -4 4 -5 4 -4 3 -5 4 -8 7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M812 2230l-2 5 -1 6 -2 11","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M823 2208l-6 6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M817 2214l-5 16","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-1461 1230l-6 -2 -6 -1 -6 -1 -5 0 -6 0 -6 0 -6 2 -5 1 -5 3 -5 4 -4 4 -4 4 -5 4 -4 4 -5 4 -5 2 -6 1 -6 0 -6 -2 -5 -2 -3 -5 -3 -5 -3 -6 -2 -5 -1 -6 -1 -5 -2 -6 -1 -6 -1 -6 -1 -5 -1 -6 -1 -6 -1 -6 -1 -5 0 -6 0 -6 0 -6 0 -6 1 -6 0 -5 1 -12","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-1084 1281l-6 1 -6 1 -6 -1 -5 -1 -6 -2 -5 -2 -6 -3 -5 -2 -6 -2 -5 -2 -6 -2 -5 0 -4 5 -4 3 -6 1 -6 -1 -6 -1 -6 -1 -5 0 -6 -1 -6 -1 -6 -2 -5 -3 -4 -5 -5 -4 -4 -1 -5 2 -5 4 -5 4 -4 5 -4 5 -4 1 -6 0 -6 -1 -6 -1 -6 -1 -6 0 -6 -2 -5 -1 -5 -3 -5 -3 -5 -4 -4 -4 -4 -4 -5 -4 -4 -4 -4 -4 -4 -5 -4 -4 -4 -5 -3 -4 -3 -5 -1 -6 1 -6 1 -6 -2 -6 -3 -5 -4 -3 -6 -2 -5 -2 -6 -1 -6 -1 -6 0 -6 0 -5 2 -6 3 -6 1 -6 1 -4 4 -3 5 -2 6 -1 5 1 6 1 6 -3 5 -4 4 -5 4 -6 2 -5 0 -6 0 -6 -1 -6 -2","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-856 1458l-6 -2 -4 -4 -5 -3 -5 -3 -6 -1 -5 -1 -5 -3 -5 -4 -5 -3 -4 -4 -8 -6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-941 1370l-1 -6 -3 -5 -2 -5 -3 -5 -3 -5 -4 -4 -4 -4 -5 -4 -4 -4 -6 -1 -5 -2 -6 -2 -6 -1 -5 -2 -6 -2 -5 -2 -5 -3 -4 -4 -5 -4 -4 -4 -4 -4 -4 -5 -4 -4 -4 -5 -4 -3 -5 -2 -6 0 -6 0 -6 0 -6 2 -8 1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-914 1424l-3 -4 -4 -5 -3 -5 -3 -5 -3 -5 -3 -5 -3 -5 -2 -5 -1 -6 -2 -9","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-734 1478l-6 -2 -5 -2 -6 -2 -5 -1 -6 1 -6 1 -5 1 -6 1 -6 2 -5 3 -5 1 -6 0 -6 0 -6 0 -6 -1 -5 -1 -4 -4 -4 -5 -4 -4 -4 -3 -6 -2 -10 -3","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-2142 1626l-4 4 -5 4 -4 3 -5 3 -5 4 -5 3 -5 3 -5 3 -5 3 -5 2 -5 3 -5 3 -5 3 -5 3 -5 3 -5 3 -5 4 -5 3 -5 3 -5 3 -4 4 -5 3 -5 4 -4 3 -5 4 -4 4 -5 4 -4 3 -5 3 -5 3 -6 3 -5 3 -5 3","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-2302 1733l-5 2 -5 3 -5 3 -5 4 -4 4 -4 4 -4 4 -4 4 -4 4 -4 4 -5 5 -4 4 -4 4 -4 4 -5 4","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-2368 1790l-5 4 -4 4 -4 4 -5 4 -5 3 -4 3 -5 3 -6 3 -5 3 -5 3 -5 3 -5 3 -5 3 -5 3 -5 2 -5 3 -6 2 -6 1 -5 2 -5 3 -4 4 -3 5 -4 5 -3 5 -3 5 -4 5 -3 4 -3 5 -3 5 -2 6 -2 6 -2 5 -2 5 -4 5 -4 4 -4 4 -4 4 -3 5 -3 5 -4 8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-1248 2119l-5 -3 -5 -3 -5 -2 -5 -3 -6 -2 -5 -2 -6 -1 -5 -1 -6 -1 -6 -1 -6 -2 -5 -1 -6 -1 -6 -1 -5 -2 -6 -1 -6 -1 -5 -2 -6 -1 -6 -2 -5 -1 -6 -2 -5 -2 -6 -2 -5 -2 -6 -2 -6 -1 -5 0 -6 1 -6 1 -6 0 -6 0 -5 -1 -6 -2 -5 -2 -6 -2 -6 -2 -5 -2 -5 -2 -6 -3 -5 -2 -6 -1 -5 -1 -6 0 -6 0 -6 1 -6 2 -5 2 -4 4 -4 5 -2 5 -3 5 -3 6 -3 4 -4 5 -3 5 -4 4 -4 5 -3 4 -5 5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-2635 2170l-1 5 -2 6 -2 6 -2 5 -4 4 -5 2 -6 2 -6 1 -6 0 -5 3 -7 5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-2286 2213l-3 -5 -3 -6 -3 -5 -5 -2 -5 -2 -6 0 -6 -1 -6 0 -6 -1 -6 0 -6 -1 -5 0 -6 1 -6 0 -6 1 -6 0 -6 0 -6 0 -5 -1 -5 -4 -4 -4 -4 -4 -6 -1 -5 3 -5 3 -5 4 -4 3 -6 2 -6 1 -6 -1 -5 -2 -5 -3 -6 -1 -6 -1 -6 0 -5 1 -6 1 -6 1 -5 2 -6 1 -6 1 -5 2 -6 1 -6 1 -6 1 -5 1 -6 1 -6 1 -6 1 -5 -1 -3 -6 -4 -4 -5 -3 -6 -1 -5 3 -4 4 -4 4 -3 5 -2 6 0 6 -2 6 -2 5 -3 5 -5 4 -5 1 -6 -1 -6 -2 -5 -2 -6 -2 -5 -2 -5 -2 -6 -3 -5 -2 -5 -3 -6 -2 -5 -2 -6 -2 -6 -2","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-1558 2118l-5 3 -6 3 -5 1 -6 -1 -6 0 -6 -1 -5 -1 -6 -2 -6 -1 -5 -2 -6 -3 -5 -3 -5 -3 -5 -2 -5 0 -6 3 -5 2 -6 0 -6 -1 -6 0 -6 -1 -5 0 -6 0 -6 0 -6 0 -6 -1 -5 -1 -6 -1 -6 -1 -6 0 -6 0 -5 0 -6 1 -6 1 -5 2 -6 2 -5 3 -6 2 -5 3 -5 3 -5 2 -6 1 -6 0 -6 0 -5 -1 -6 0 -6 0 -6 0 -6 0 -6 1 -5 0 -6 2 -6 1 -5 2 -6 2 -5 1 -6 2 -5 2 -6 2 -5 3 -6 2 -5 3 -5 2 -5 3 -6 2 -5 2 -6 2 -5 2 -6 1 -6 1 -5 1 -6 0 -6 0 -6 0 -6 0 -5 -1 -6 -1 -6 -1 -6 -1 -6 0 -5 1 -6 1 -5 3 -5 4 -4 3 -5 4 -4 4 -5 4 -4 4 -4 4 -5 3 -5 4 -4 3 -6 2 -5 1 -6 0 -6 1 -6 1 -6 1 -5 1 -6 1 -6 1 -6 1 -6 1 -5 1 -6 1 -5 2 -6 3 -5 3 -5 2 -5 3 -6 1 -6 1 -5 1 -6 0 -6 1 -6 2 -5 2 -5 3 -4 4 -4 4 -4 5 -4 5 -4 4 -4 1 -6 -2 -5 -4 -4 -4 -3 -5 -4 -4 -4 -5 -4 -4 -4 -4 -4 -4 -4 -5 -5 -7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-2114 1350l-1 6 -1 5 -1 6 -1 6 -1 5 -2 6 -2 5 -3 6 -2 5 -2 6 -2 5 -1 6 -1 6 -1 5 1 6 2 6 1 6 2 5 1 6 2 6 1 5 1 6 1 6 0 5 0 6 1 6 0 6 0 6 0 6 0 5 0 6 0 6 0 6 0 6 0 6 0 5 0 6 -1 6 0 6 -1 6 0 6 -1 6 -1 5 -1 6 -1 6 -2 5 -3 5 -5 4 -4 4","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-872 1910l5 2 5 3 5 3 6 1 5 2 6 2 6 1 5 1 6 0 6 0 6 -1 6 -2 6 -1 5 1 3 5 2 6 4 4 4 4 5 3 6 2 5 2 6 2 5 2 6 2 5 2 6 2 5 3 5 2 6 3 4 4 3 5 1 5 1 6 1 6 0 6 0 6 0 6 -2 6 -2 5 -2 5 -1 6 0 6 2 6 3 5 3 4 4 5 4 4 4 5 4 4 4 4 3 5 2 5 1 6 1 6 0 6 -1 6 -1 5 -2 6 -2 5 -4 5 -4 4 -5 3 -6 2 -5 2 -6 1 -6 2 -4 4 -3 4 -2 6 -3 5 -2 6 -2 6 -2 5 -1 6 -3 5 -3 5 -4 4 -5 2 -6 2 -5 2 -6 2 -6 2 -5 1 -6 1 -6 0 -6 0 -6 -1 -5 0 -6 0 -6 1 -6 -1 -5 -3 -5 -3 -6 -1 -5 0 -6 0 -6 0 -6 0 -6 0 -6 -1 -5 -2 -6 -2 -5 -3 -5 -3 -6 -2 -5 -3 -5 -1 -6 0 -5 2 -6 3 -5 2 -6 3 -5 3 -5 2 -5 3 -6 2 -5 1 -6 0 -6 1 -6 -1 -6 0 -6 0 -6 -1 -6 -1 -3 -4 0 -7 -3 -4 -6 -3 -5 -1 -6 2 -5 3 -6 0 -5 -2 -6 -3 -5 -2 -6 -2 -5 -2 -5 -3 -4 -5 -3 -5 -4 -2 -6 2 -6 2 -4 -3 -3 -6 -3 -5 -4 -3 -6 -2 -6 -1 -5 -2 -6 -2 -5 -2 -6 -2 -6 0 -5 0 -6 1 -6 1 -6 0 -6 -1 -5 -2 -6 -2 -5 -2 -6 -2 -5 -2 -6 -2 -5 -2 -6 -2 -5 -3 -9 -5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-3441 1901l1 6 0 6 0 6 0 6 0 6 -1 5 0 6 -1 6 -1 6 -1 6 -2 5 -2 6 -2 5 -3 5 -3 5 -3 5 -4 4 -4 5 -4 4 -4 4 -5 4 -4 4 -5 3 -4 4 -5 4 -5 3 -4 3 -5 3 -5 4 -5 3 -4 4 -4 4 -4 5 -4 4 -4 4 -4 4 -5 4 -4 3 -5 4 -5 3 -6 2 -5 2 -5 2 -6 2 -6 1 -5 2 -6 2 -5 2 -6 2 -5 3 -4 3 -5 4 -5 3 -5 4 -4 3 -5 4 -4 4 -5 3 -4 4 -4 4 -5 4 -5 3 -5 3 -5 2 -6 2 -5 3 -5 2 -6 3 -5 3 -5 3 -4 4 -5 4 -3 4 -2 5 -2 6 -2 6 -1 5 -2 6 -1 6 0 6 -2 5 -1 6 -3 5 -2 6 -2 5 -3 5 -3 5 -3 5 -3 5 -3 5 -3 5 -4 5 -4 4 -4 4 -4 4 -4 4 -4 4 -4 5 -4 4 -3 5 -2 6 -3 5 -4 4 -4 4 -4 5 -4 4 -4 4 -5 4 -4 4 -4 4 -4 4 -4 4 -4 5 -4 4 -4 4 -4 4 -4 5 -4 4 -3 5 -4 4 -4 4 -4 5 -3 4 -4 5 -3 5 -3 5 -4 4 -3 5 -3 5 -3 5 -4 5 -4 7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-3720 1802l5 -4 4 -3 5 -4 5 -3 5 -3 5 -3 5 -2 6 -2 5 -2 6 -1 6 -2 5 -1 6 -1 6 -2 5 -2 5 -3 5 -3 5 -4 5 -3 5 -3 5 -1 6 -1 6 1 6 1 5 1 6 0 6 0 6 0 6 0 6 0 5 -1 6 0 6 0 6 -1 6 -1 5 -1 6 -2 5 -3 5 -4 4 -3 5 -3 5 -3 5 -4 5 -3 5 -2 6 -1 6 1 5 3 4 4 3 5 3 5 3 5 3 5 3 5 3 5 3 6 2 5 2 5 1 6 1 6 1 6 1 5 1 6 0 6 0 6 -1 6 -2 5 -2 6 -2 5 -1 6 -1 5 -1 6 -1 6 -1 6 -1 6 0 5 -1 6 0 6 1 6 0 6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-3032 1971l3 5 3 5 2 5 3 6 2 5 3 5 1 6 2 5 2 6 1 6 1 6 1 5 1 6 1 6 0 6 0 5 0 6 0 6 -1 6 0 6 -1 6 -1 5 -1 6 -1 6 -1 5 -2 6 -1 6 -2 5 -1 6 -1 6 -1 6 0 5 -1 6 0 6 -1 6 -1 6 -1 5 -2 6 -2 6 -2 5 -3 5 -4 4 -5 3 -5 4 -6 2 -5 2 -6 1 -5 2 -6 1 -6 2 -5 2 -6 2 -6 3 -5 2 -5 3 -4 4 -3 5 -2 5 0 5 0 7 -1 6 0 6 -1 6 -2 5 -2 5 -3 5 -3 5 -4 5 -3 5 -2 6 -3 5 -2 5 -3 6 -2 5 -3 5 -4 4 -5 3 -5 3 -6 2 -5 3 -5 2 -6 2 -5 2 -6 3 -5 2 -5 4 -5 3 -4 3 -6 3 -5 2 -5 1 -6 1 -6 0 -6 0 -6 2 -4 3 -5 4 -4 4 -4 5 -4 4 -3 5 -3 5 -4 5 -3 5 -2 5 -5 8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-2763 2143l-5 4 -4 4 -4 5 -3 4 -3 5 -4 5 -3 5 -3 5 -3 5 -3 5 -3 5 -3 5 -3 5 -3 5 -3 5 -3 5 -3 5 -3 5 -3 5 -1 6 -2 5 -1 6 0 6 -3 4 -5 3 -5 3 -6 0 -6 1 -6 1 -3 4 -4 5 -1 6 -2 5 -3 5 -3 5 -4 5 -4 4 -5 3 -4 3 -5 4 -5 3 -5 4 -4 3 -5 6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-2840 2347l-5 -2 -6 -2 -5 -2 -6 -2 -5 -1 -6 -1 -6 0 -6 0 -6 0 -5 0 -6 -1 -6 0 -9 -1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-3565 1344l0 6 0 6 -1 5 0 6 0 6 0 6 1 6 3 5 2 6 -1 5 0 6 -1 6 0 6 -1 6 0 6 0 5 0 6 -1 6 0 6 -1 6 -3 4 -9 5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-3264 1528l-5 -1 -5 -3 -6 -3 -4 -3 -4 -4 -4 -5 -2 -5 -3 -6 -2 -5 -2 -6 -3 -4 -4 -5 -5 -3 -5 -3 -5 -2 -6 -1 -6 0 -6 0 -6 0 -6 0 -5 0 -6 0 -6 1 -6 1 -5 1 -6 2 -5 3 -5 3 -4 4 -4 4 -5 4 -5 3 -5 3 -5 3 -5 3 -6 2 -5 1 -6 2 -6 0 -6 1 -5 -1 -6 -2 -6 -1 -6 -2 -5 0 -6 2 -5 3 -6 0 -6 -1 -5 -1 -6 -2 -5 -2 -6 -2 -5 -3 -5 -3 -5 -3 -4 -4 -5 -3 -5 -4 -5 -3 -4 -4 -7 -5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-3090 1460l1 5 1 6 0 6 -1 6 -3 5 -3 5 -3 5 -4 5 -4 4 -4 3 -6 2 -6 -1 -6 -1 -5 -1 -6 -2 -6 -2 -5 -1 -6 0 -6 1 -5 1 -6 2 -6 2 -5 2 -6 2 -5 3 -5 2 -6 2 -5 2 -6 2 -5 1 -6 2 -6 1 -6 1 -5 1 -6 0 -6 -1 -7 -2","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-3577 1469l-5 3 -5 3 -6 3 -5 3 -5 2 -4 4 -3 5 -3 5 -3 5 -4 5 -4 4 -4 4 -3 5 -4 5 -3 4 -4 5 -5 4 -5 1 -6 0 -6 0 -5 2 -6 3 -5 2 -6 3 -5 -1 -5 -4 -5 -1 -6 -1 -6 0 -6 0 -6 1 -6 1 -6 0 -5 1 -5 3 -5 4 -5 2 -6 1 -6 2 -5 1 -6 1 -6 1 -6 0 -5 3 -4 4 -3 5 -3 5 -3 5 -1 6 -2 6 -1 5 -2 6 -2 8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-3818 1613l-2 5 -1 6 1 6 0 6 1 6 1 5 -1 6 -2 5 -3 5 -4 4 -6 3","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-2681 2209l-4 -4 -5 -4 -3 -4 -3 -5 -3 -5 -3 -6 -2 -5 -1 -6 1 -6 1 -6 -1 -5 -2 -5 -4 -5 -4 -4 -5 -3 -6 -2 -6 -1 -5 -1 -6 -1 -6 0 -6 2 -4 4 -5 6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-3834 1670l-5 3 -5 3 -5 3 -6 1 -6 1 -5 2 -5 2 -5 3 -5 4 -5 3 -5 3 -5 4 -4 3 -5 3 -5 3 -6 2 -5 2 -6 2 -6 1 -5 0 -6 0 -6 0 -6 1 -6 0 -6 0 -5 -1 -6 -1 -6 -1 -6 -1 -5 0 -6 2 -6 1 -4 4 -5 3 -4 4 -5 3 -6 2 -5 2 -6 -2 -6 -1 -5 -1 -5 3 -6 3 -5 3 -5 2 -5 3 -5 4 -4 3 -4 5 -3 5 -3 5 -3 5 -4 4 -5 4 -4 4 -4 4 -4 4 -4 4 -4 4 -5 5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-1164 3258l-6 3 -5 1 -6 0 -6 0 -6 0 -6 0 -5 0 -12 -1 -6 0 -5 0 -6 0 -6 0 -6 0 -6 0 -6 0 -5 0 -6 0 -10 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-402 2846l-3 -5 -3 -5 -4 -5 -3 -5 -3 -4 -4 -5 -4 -4 -5 -3 -5 -3 -5 -3 -5 -3 -5 -3 -5 -2 -5 -4 -5 -3 -4 -4 -5 -3 -5 -4 -5 -3 -5 -3 -4 -4 -4 -4 -4 -5 -2 -5 -2 -5 -2 -6 -2 -6 -1 -6 -1 -5 -2 -5 -4 -4 -5 -4 -5 -3 -5 -3 -6 -2 -6 -1 -5 -1 -6 -1 -6 0 -6 1 -6 1 -6 0 -5 1 -6 1 -6 1 -6 1 -5 0 -6 0 -6 0 -6 0 -6 -1 -6 0 -5 0 -6 1 -6 2 -5 3 -5 3 -4 4 -3 5 -2 6 -2 5 -3 5 -2 6 -3 5 -4 5 -4 3 -5 2 -6 2 -6 1 -6 1 -5 1 -6 1 -6 1 -6 2 -5 1 -6 1 -6 1 -5 1 -6 0 -6 1 -6 0 -6 1 -5 2 -5 3 -3 5 -3 6 -2 9","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str5","@d":"M-336 2989l-5 -3 -5 -3 -1 -1 -4 -2 -3 -5 -3 -5 -4 -5 -3 -5 -3 -4 -4 -5 -3 -5 -1 -6 -1 -6 -1 -5 -1 -6 -2 -6 -1 -5 -1 -6 -2 -6 -2 -5 -1 -6 -2 -5 -2 -6 -2 -5 -2 -6 -2 -5 -2 -6 -3 -10","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil7 str6","@d":"M774 1248l0 -6 -1 -6 -2 -5 -1 -6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str6","@d":"M692 1118l5 -4 3 -5 4 -4 2 -6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str6","@d":"M3058 5776l-3 5 -3 5 -3 5 -3 5 -2 6 -3 5 -2 5 -2 6 -2 5 0 6 1 6 1 6 1 5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str6","@d":"M2501 6261l-3 -6 -2 -5 -3 -5 -2 -6 -3 -5 -3 -5 -3 -4 -4 -5 -3 -5 -4 -4 -4 -5 -3 -4 -3 -5 -4 -5 -3 -5 -4 -5 -3 -5 -3 -5 -3 -5 -1 -6 -1 -5 0 -5 1 -6 2 -6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str6","@d":"M-2298 7095l-6 -3 -5 -3 -5 -3 -5 -2 -5 -3 -6 -2 -5 -2 -6 -1 -6 0 -6 1 -5 1 -6 1 -6 1 -6 1 -6 2 -4 3 -4 5 -2 5 -2 6 -2 5 -3 6 -2 5 -3 5 -4 5 -3 4 -5 4 -4 4 -5 3 -6 3 -5 2 -6 1 -5 1 -6 1 -6 2 -5 2 -5 4 -3 5 -2 5 -1 6 0 6 0 6 0 6 0 6 0 6 0 5 -2 6 -2 6 -3 5 -4 4 -4 4 -5 4 -5 2 -6 2 -6 1 -6 0 -5 -1 -5 -3 -5 -4 -5 -3 -6 -1 -6 0 -5 1 -6 1 -6 2 -5 1 -6 0 -7 0 -5 1 -5 2 -4 4 -3 6 -3 4 -4 4 -5 4 -4 4 -4 4 -4 5 -4 4 -5 8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str6","@d":"M-3441 3011l4 -4 5 -4 4 -5 2 -5 2 -6 1 -5 -2 -6 -4 -4 -6 -2 -5 -3 -6 -1 -5 -1 -6 -1 -6 -1 -6 -1 -6 0 -5 0 -6 0 -6 0 -6 0 -6 0 -6 0 -5 2 -5 3 -4 4 -4 5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str6","@d":"M-3398 2795l3 5 3 6 2 5 1 6 1 6 -1 6 -1 6 -1 5 -1 6 -2 6 -2 5 -3 6 -2 5 -4 4 -3 5 -4 5 -4 4 -4 4 -4 4 -5 4 -4 4 -5 3 -5 3 -5 3 -5 3 -5 3","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str6","@d":"M-2710 2997l5 -4 4 -4 4 -4 4 -5 3 -4 4 -5 3 -5 4 -4 4 -5 3 -5 4 -4 3 -5 4 -4 4 -4 5 -4 5 -3 5 -3 5 -2 6 -2 5 -2 5 -3 6 -2 6 -2 4 -3 4 -4 3 -5 2 -6 2 -5 0 -6 1 -6 1 -6 2 -6 1 -5 2 -6 3 -5 3 -5 5 -4 5 -3 5 -1 6 -2 6 -1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str6","@d":"M-2831 3750l6 1 6 1 6 1 5 0 6 1 6 1 6 1 5 2 5 3 5 4 3 5 3 5 2 6 0 6 0 6 0 5 -1 6 -1 6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str6","@d":"M-285 3037l-4 -4 -4 -4 -4 -4 -4 -5 -3 -4 -4 -5 -3 -5 -4 -4 -4 -4 -5 -3 -5 -3 -7 -3","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str6","@d":"M-654 3268l-6 0 -6 0 -6 1 -6 0 -6 1 -6 1 -5 3 -5 3 -4 3 -4 5 -4 4 -4 5 -3 5 -2 5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str6","@d":"M-160 2973l-6 0 -6 0 -6 -1 -6 -1 -5 -2 -6 -1 -6 -1 -5 2 -6 2 -5 2 -6 1 -6 2 -5 1 -6 1 -6 1 -6 1 -5 1 -6 1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str6","@d":"M-358 3029l1 6 3 5 3 5 3 5 2 5 2 6 1 5 -2 6 -3 5 -2 5 -3 6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str6","@d":"M-867 4683l-3 5 -3 5 -4 5 -3 5 -4 4 -3 5 -3 5 -4 4 -3 5 -4 5 -3 4 -4 5 -3 5 -4 4 -4 5 -4 4 -4 4 -3 5 -3 5 -3 5 -3 5 -3 5 -3 5 -2 5 -3 6 -3 5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str6","@d":"M-663 4540l-3 5 -3 5 -3 5 -3 5 -4 5 -4 4 -5 3 -5 3 -5 3 -5 3 -5 3 -4 4 -5 3 -5 3 -5 4 -5 3","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str6","@d":"M1652 1411l-4 4 -5 3 -4 4 -5 3 -5 3 -5 3 -5 4 -4 4 -3 5 -4 4 -4 4 -5 4 -5 3 -5 3 -5 2 -8 2","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str6","@d":"M-2080 1229l0 6 0 5 -1 6 -1 6 -2 5 -3 6 -3 5 -3 4 -4 5 -3 5 -2 5 -3 6 -2 5 -2 6 -1 5 -1 6 -1 6 -1 5 0 6 -1 6 0 6 0 6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str6","@d":"M-971 1874l3 5 3 5 4 5 4 4 5 3 5 3 5 2 6 2 5 1 6 2 6 1 6 1 6 1 5 1 6 0 6 0 6 -1 6 0 6 1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str6","@d":"M-3798 1862l5 -3 5 -3 5 -3 5 -3 4 -4 4 -4 4 -4 4 -4 5 -4 4 -4 5 -4 4 -3 5 -3 5 -4 5 -3 5 -3 4 -4","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str6","@d":"M-3066 1874l2 5 4 6 2 5 3 5 2 5 2 6 1 6 0 5 0 6 0 6 1 6 1 6 1 6 2 5 2 5 3 5 4 5 4 4","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str6","@d":"M-2970 1415l-5 3 -5 3 -5 3 -6 2 -5 2 -6 1 -6 0 -6 1 -5 -1 -6 0 -6 -1 -6 -1 -6 0 -5 0 -6 1 -6 2 -5 2 -5 3 -5 3 -5 3 -4 4 -3 5 -3 10","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil7 str7","@d":"M775 1260l-1 -6 0 -6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str7","@d":"M688 1122l4 -4","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str7","@d":"M3038 5846l0 6 1 6 0 6 1 8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str7","@d":"M2513 6287l-2 -5 -3 -6 -2 -5 -3 -5 -2 -5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str7","@d":"M-3528 2976l-3 5 -3 5 -2 5 -2 6 -3 5 -4 4 -5 6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str7","@d":"M-3458 2917l-5 3 -5 3 -5 2 -6 3 -5 2 -5 2 -9 3","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str7","@d":"M-2769 3810l-1 6 -1 5 -4 7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str7","@d":"M-2554 2833l5 -1 6 -1 6 -2 4 -3 4 -5 2 -5 2 -7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str7","@d":"M-276 3045l-5 -4 -4 -4","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str7","@d":"M-637 3268l-6 0 -6 0 -5 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str7","@d":"M-263 2982l-6 2 -5 1 -6 1 -8 2","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str7","@d":"M-358 3017l-1 6 1 6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str7","@d":"M-953 4808l-2 5 -2 6 -1 5 -2 6 -1 6 -1 5 -1 10","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str7","@d":"M-732 4601l-4 3 -5 4 -5 3 -5 3 -4 4 -5 3 -8 6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str7","@d":"M1680 1389l-5 3 -4 4 -5 3 -5 4 -4 4 -5 4","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str7","@d":"M-2084 1171l-1 6 -1 6 0 5 0 6 0 6 1 6 1 6 1 5 2 6 1 6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str7","@d":"M-963 1840l-2 6 -2 5 -2 6 -2 5 0 6 0 6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str7","@d":"M-3827 1868l6 0 6 -1 6 -1 5 -2 6 -2","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str7","@d":"M-3061 1834l-1 6 -2 6 -1 6 -1 5 -1 6 0 6 1 5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str7","@d":"M-2935 1394l-5 3 -6 2 -5 3 -5 3 -5 3 -5 3 -4 4","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@id":"rivers_lakes","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil7 str8","@d":"M-3511 537l35 -6 9 37 12 6 19 -31 45 2 -4 15 51 19 39 63 33 24 103 11 -4 48","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M-3173 725l20 -27 -4 -27 40 -8 80 20 23 -9 14 14 48 -14 70 17 89 -4 56 -19 66 20 45 -21 32 10 30 -34 38 -13 70 54 6 21 150 -4 69 21 34 36 47 -8 30 17 290 54","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M-374 834l16 -17 43 -4 42 -41 35 -69 42 -81 -2 -73 33 -182","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M-1830 821l157 3 222 -74 18 18 -31 18 2 16 13 4 39 -38 81 -31 77 36 1 13 -16 1 18 23 51 -6 4 12 50 3 40 32","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M-1104 851l27 -9 39 21 -3 -30 46 -26 2 -17 75 3 21 -19 34 33 102 23 49 37","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M-712 867l50 18 63 -12 39 16 127 -40 48 -38 11 23","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M2316 1366l-27 -35 2 -24 -51 -23 -16 -218 -5 -2 -9 44 -21 -2 -13 -22 20 -44 20 -9 0 -14 -18 -15 2 -8 13 1 17 -67 -16 -10 1 -6 15 2 26 -57 80 -92 61 -29 42 7 72 -90 191 -142 47 2 7 40 32 20 39 0 5 -7 -15 -12 21 -15 16 7 7 24 35 -4 60 -8 42 2 35 22 36 13 17 2 35 5 0 -2 2 -22 25 -1 23 23 18 20 41 4 35 -7 33 3 19 -19 -18 -10 12 -10 53 2 25 -5 16 -6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M-4107 1294l-22 11 -37 -18 -4 26 -7 3 -6 -13 -16 3 -9 34 -48 35 -10 -5 1 -29 -19 -1 -3 -17 33 -73 37 -26 1 -2 -14 -23 -41 -8 -15 36 -28 -45 21 -20 -20 -30 6 -33 -3 -4 -22 -11 0 8 -24 -12 -17 25 -18 -26 20 -29 -8 -51 19 -37 49 -15 -1 -16 -19 10 -3 -26 41 -27 39 13 28 -32 20 2 7 -14 -10 -26 74 -34 68 38 58 -19 33 8 61 -46 29 19 13 -5 1 -21 17 -11 31 32 29 -6 5 -32 -25 0 -47 -33 8 -43 18 -7 -5 -10 16 -13 17 -1 35 -43 14 8 28 -27 22 5 6 -44 39 1 47 -39 21 2 1 33 -5 7 9 10 13 2 7 -22 67 -39 11 7 -18 29","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M-4136 1806l-4 2 -71 39 -2 -158 25 -15 7 4 4 -9 -5 -14 42 -46 86 -43 6 -41 -9 -5 -29 48 -70 14 1 -52 20 -5 53 -62 -8 -9 -40 29 -42 0 -18 -48 -25 -6 3 -9 26 -18 12 13 -5 9 11 10 12 -1 -4 -20 13 -6 -12 -51 34 -17 18 -45","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M2316 1366l-1 55 19 13 39 -5 19 20 -10 41 -38 22 -27 -19 -23 37 12 63 31 12 20 31 -8 34 22 39 -10 50 -55 39 -21 45 -55 52 -59 25 -24 30","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M2147 1950l-274 164 -68 128 -261 87","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M1544 2329l-229 77 -24 40 -29 -12 -79 32 -139 177 24 26 32 -4 58 37 -3 2 -65 48 -50 64 -33 1 -5 -14 43 -12 -5 -28 -45 15 -41 70","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M3085 3222l-165 -75 -83 15 -8 -7 -1 -47 -24 -15 21 -31 123 -10 17 -10 -2 -11 2 0 12 24 17 -7 0 0 1 -2 1 -6 14 0 25 42 37 4 11 53 24 24 0 4 -18 -4 -2 6 18 21 -20 32","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M954 2848l-84 172 -88 101 -19 61 -56 40 -19 80 -58 69 -42 83","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M2511 3605l2 -3 27 -37 0 0 9 -12 12 -67 53 -61 -6 -33 22 -8 15 -60 -10 -22 -61 -24 -53 46 -71 -33 -8 -35 34 -8 6 -28 -8 -4 -42 21 -15 -30 62 -41 0 -5 -18 0 -57 34 -67 9 -53 45 -36 9 -106 115 -113 80 -9 27 14 30 52 -1 28 44 7 1 11 -47 72 -31 46 37 -13 26 33 70 30 11 76 -12 53 59 11 3 63 -53 0 0 8 -12","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M1501 4056l-14 -26 -6 -3 -58 2 -8 -4 -7 -52 3 -8 40 -9 4 -9 -6 -35 35 -31 94 -41 43 17 -5 20 14 18 1 10 -42 36 -20 42 -43 21 -3 45 -22 7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M588 3454l-9 46 -61 111 -6 57 0 8 24 81 50 86 -9 24 -3 7 37 82 90 103","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M1520 4191l-7 -55 24 -29 6 -1 35 47 22 9 20 -11 4 1 4 7 -2 8 -26 12 -33 -18 -14 0 -33 30","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M701 4059l131 50 -2 18 27 33 -68 49 -14 31 -61 12 -35 68 -32 -6 -115 65 -25 29 -8 51 -23 -5 -27 17 -1 94 -65 33 -3 36 -6 90 -25 16 -35 91","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M314 4831l6 29 -5 8 -12 -7 -13 9 -29 59 33 41 40 13 6 -4 -3 -17 4 -1 19 26 -19 22 -114 40 -38 -25 -49 8 -25 17 3 10 -10 2 -52 -24 -23 16 -41 -1 -72 55 -15 48 -25 -1 -60 34","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M-3554 5258l6 48 -14 10 -20 -4 -59 20 -127 87 -111 4 -112 -66 -63 12 -50 -26 -58 8 -29 -15 -1 -18 -5 -1 -5 11 -45 -17 -31 38 -95 9 -70 45 -24 -19 52 -97 -6 -29 38 -52 -7 -38 55 -103 -11 -107 20 -69 11 -7 1 -7 -22 -11 12 -129 -46 -30 36 -57 36 -123 -11 -125 -31 -50 4 -3 19 20 5 -1 1 -11 51 17 6 -6 -17 -16 20 -38 -3 -11 -11 -6 -9 1 -11 37 -65 -35 -109 56 -57 -2 -18 10 -6 -5 22 -76 -34 -83 7 -13 42 -13 13 1 12 23 -7 4 3 3 23 2 9 13 3 -3 -10 -29 22 -8 15 11 6 0 2 -15 16 -5 -1 -3 -36 2 -3 -16 70 -33 3 -12 -28 -53 -2 -47 -1 0 -11 -3 -36 51 -30 85 -21 11 -100 18 -79 -24 -6 -14 5 -18 -13 -29 55 -120 2 -90 53 -115 1 -44 -13 -24 7 -27 73 -35 96 -116 20 -102 121 -288 1 -3 -27 -41 39 -82 58 -214 10 -26 35 -3 18 -49 17 -3 0 -5 -24 -9 -1 -18 5 -11 21 -19 0 -8 -9 -10 -8 2 -21 78 -24 34 -3 -2 66 -249 -7 -86 -5 -8 -20 -32 -9 -104 -25 -62 10 -42 -23 -155 -22 -47 10 -82 72 -61","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M-2870 5540l-20 -14 -30 8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M-2920 5534l-17 51 -11 7 -2 0 -18 -9 -23 -58 -59 -69 -215 -140 10 -27 -7 -5 -30 18 6 14 -9 5 -82 -32 -113 12 -25 14 -11 -5 -20 -37 -8 -15","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M-1046 5663l-120 7 -22 23 -43 12 -90 -40 -73 16 -33 -10","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M-180 5188l-76 98 -15 -8 -2 3 11 9 -65 219 -56 39 1 36 -35 21 -3 28 -34 31 -38 13 -57 -74 -45 -15 -36 22 -34 -13 -45 12 -43 79 -49 23 -35 -1 -22 -18 -28 7 -38 -39 -122 3","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M-1427 5671l-31 -11 -77 21 -68 -18 -34 25 -154 -4 -65 91 -52 19 -22 43 -56 17 -128 -4 -133 55 -43 73","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M-2290 5978l-42 60 -13 55","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M-2345 6093l-6 24 -1 0 0 -24","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M-2352 6093l-13 -15 -32 -2 -5 3 1 75 -90 44 -19 -3 -41 -37 -70 -14 -55 -69 -16 -7 -57 -3 -18 -12 -35 -65 -27 -14 -91 -171 16 -2 27 49 8 2 19 -27 -3 -6 -17 4 -7 -13 3 -38 -40 -31 -43 -2 -32 -72 10 -25 53 -29 14 -61 12 -13 30 1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M-2355 6320l30 -32 -3 -11 -56 -12","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M-906 6736l-20 -40","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M-926 6696l-13 -33 10 -41 -16 -7 -53 111 -33 0 -36 38 -82 33 -142 -19 -71 -49 -38 11 -14 39 -30 14 -49 -12 -18 -31 -36 19 -34 -5 -62 32 -66 5 -45 28 -219 -43 -217 -148 -66 -97 -43 -22 -16 -80 -26 -14 -14 -105","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M-489 6865l-67 -25 -51 -21 -53 41 -98 -3 -56 -25 -68 -67 19 36 55 45 -19 6 -69 -33 -10 -83","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M3405 5323l-36 -9 -278 41 -37 -17 -87 30 -49 53 -90 45 -100 -1 -51 -19 -9 43 -41 15 -29 -5 -41 -40 -69 13 -56 83 -125 82 -99 5 -11 -20 -32 -7 -185 66 -91 0 -222 49 -75 -11 -50 29 -49 0 -69 24 -66 29 -44 55 -66 36 -64 10 -106 80 -68 20 -23 45 -49 22 -48 47 -3 10 -41 118 -83 71 -114 -23 -1 -5 -8 -28 -40 -23 -66 18 -23 79 -30 8 -30 39 -38 0 -16 -20 -63 -16 -26 38 -38 -2 -58 34 -71 78 -20 2 -41 128 -27 38 -43 32 -53 2 -36 23 -140 119 -24 -3 -88 40 -54 3 -64 -19 -39 9 -1 -1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M-2384 6265l-45 4 -69 61 -61 -7 -48 35 -70 -13 -25 11 -62 211 -168 436 -144 284","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M2383 3779l-21 -19 2 -4 22 -3 4 5 -7 21","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@id":"coastline","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil7 str9","@d":"M-5373 7287l0 -6920 8778 0 0 6920 -8778 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str10","@d":"M-5472 7385l0 -7117 8975 0 0 7117 -8975 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"text":[{"$":"10","@x":"-4756","@y":"344","@class":"fil8 fnt0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"10","@x":"-5234","@y":"7357","@class":"fil8 fnt0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"8","@x":"-3682","@y":"344","@class":"fil8 fnt0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"8","@x":"-3999","@y":"7357","@class":"fil8 fnt0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"6","@x":"-2627","@y":"344","@class":"fil8 fnt0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"6","@x":"-2784","@y":"7357","@class":"fil8 fnt0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"4","@x":"-1581","@y":"344","@class":"fil8 fnt0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"4","@x":"-1580","@y":"7357","@class":"fil8 fnt0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"2","@x":"1592","@y":"344","@class":"fil8 fnt0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"2","@x":"2060","@y":"7357","@class":"fil8 fnt0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"0","@x":"534","@y":"344","@class":"fil8 fnt0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"0","@x":"841","@y":"7357","@class":"fil8 fnt0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"2","@x":"-522","@y":"344","@class":"fil8 fnt0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"2","@x":"-365","@y":"7357","@class":"fil8 fnt0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"4","@x":"2648","@y":"344","@class":"fil8 fnt0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"4","@x":"3274","@y":"7357","@class":"fil8 fnt0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"36","@x":"3412","@y":"5999","@class":"fil8 fnt0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"36","@x":"-5457","@y":"6096","@class":"fil8 fnt0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"38","@x":"3412","@y":"4539","@class":"fil8 fnt0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"38","@x":"-5457","@y":"4636","@class":"fil8 fnt0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"40","@x":"3414","@y":"3065","@class":"fil8 fnt0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"40","@x":"-5457","@y":"3176","@class":"fil8 fnt0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"42","@x":"3415","@y":"1608","@class":"fil8 fnt0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"42","@x":"-5460","@y":"1720","@class":"fil8 fnt0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"switch":[{"text":[{"$":"westl. v. Greenwich","@x":"-146","@y":"344","@class":"fil8 fnt0","@systemLanguage":"de","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"west of Greenwich","@x":"-146","@y":"344","@class":"fil8 fnt0","@systemLanguage":"en","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":[{"$":"westl. v. Greenwich","@x":"161","@y":"7357","@class":"fil8 fnt0","@systemLanguage":"de","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"west of Greenwich","@x":"161","@y":"7357","@class":"fil8 fnt0","@systemLanguage":"en","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":[{"$":"\u00f6stl. v. Greenwich","@x":"664","@y":"344","@class":"fil8 fnt0","@systemLanguage":"de","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"east of Greenwich","@x":"664","@y":"344","@class":"fil8 fnt0","@systemLanguage":"en","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":[{"$":"\u00f6stl. v. Greenwich","@x":"950","@y":"7357","@class":"fil8 fnt0","@systemLanguage":"de","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"east of Greenwich","@x":"950","@y":"7357","@class":"fil8 fnt0","@systemLanguage":"en","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":[{"$":"Modifizierte Kegelprojektion nach Lambert","@x":"3500","@y":"7501","@class":"fil8 fnt0","@style":"text-anchor:end;","@systemLanguage":"de","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Modified conic projection after Lambert","@x":"3500","@y":"7501","@class":"fil8 fnt0","@style":"text-anchor:end;","@systemLanguage":"en","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":[{"$":"Ber\u00fchrungsbreitenkreise: 38\u00b0 und 42\u00b0 n\u00f6rdl. Breite, (Kanarische Inseln: 28\u00b0 n\u00f6rdl. Breite)","@x":"3500","@y":"7585","@class":"fil8 fnt0","@style":"text-anchor:end;","@systemLanguage":"de","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Touching latitudes: 38\u00b0 and 42\u00b0 north latitude (Canary Islands: 28\u00b0 north latitude)","@x":"3500","@y":"7585","@class":"fil8 fnt0","@style":"text-anchor:end;","@systemLanguage":"en","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":[{"$":"Zentralmeridian: 4\u00b0 westl. L\u00e4nge, (Kanarische Inseln: 16\u00b0 westl. L\u00e4nge)","@x":"3500","@y":"7669","@class":"fil8 fnt0","@style":"text-anchor:end;","@systemLanguage":"de","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Central meridian: 4\u00b0 west longitude, (Canary Islands: 16\u00b0 west longitude)","@x":"3500","@y":"7669","@class":"fil8 fnt0","@style":"text-anchor:end;","@systemLanguage":"en","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@id":"gridline_lettering","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"g":[{"path":[{"@class":"fil9 str11","@d":"M-1010 3230l0 -663 -663 0 0 663 663 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil10 str11","@d":"M-1150 3230l0 -523 -523 0 0 523 523 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil11 str11","@d":"M1893 2362l0 -644 -647 0 0 644 647 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil10 str11","@d":"M1639 2362l0 -393 -393 0 0 393 393 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil10 str11","@d":"M-791 977l0 -334 -334 0 0 334 334 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil10 str11","@d":"M-919 977l0 -210 -206 0 0 210 206 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil10 str11","@d":"M-387 1045l0 -264 -264 0 0 264 264 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil10 str11","@d":"M-491 1045l0 -164 -160 0 0 164 160 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil11 str11","@d":"M450 4025l0 -440 -437 0 0 440 437 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil12 str11","@d":"M290 4025l0 -274 -277 0 0 274 277 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str11","@d":"M0 3748l0 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil11 str11","@d":"M-2287 5402l0 -384 -383 0 0 384 383 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil12 str11","@d":"M-2407 5402l0 -260 -263 0 0 260 263 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil10 str11","@d":"M-2519 1022l0 -327 -327 0 0 327 327 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil12 str11","@d":"M-2682 1022l0 -164 -164 0 0 164 164 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil10 str11","@d":"M-1537 1059l0 -237 -240 0 0 237 240 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil12 str11","@d":"M-1610 1059l0 -163 -167 0 0 163 167 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil10 str11","@d":"M-195 1467l0 -237 -237 0 0 237 237 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil12 str11","@d":"M-272 1467l0 -160 -160 0 0 160 160 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil13 str11","@d":"M-2737 2807l0 -207 -207 0 0 207 207 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil12 str11","@d":"M-2788 2807l0 -153 -156 0 0 153 156 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil11 str11","@d":"M-2488 6003l0 -320 -320 0 0 320 320 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil12 str11","@d":"M-2655 6003l0 -153 -153 0 0 153 153 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil13 str11","@d":"M-2811 4508l0 -260 -260 0 0 260 260 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil12 str11","@d":"M-2927 4508l0 -143 -144 0 0 143 144 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil10 str11","@d":"M1303 1629l0 -203 -203 0 0 203 203 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil12 str11","@d":"M1237 1629l0 -137 -137 0 0 137 137 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil13 str11","@d":"M-3308 1106l0 -213 -214 0 0 213 214 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil12 str11","@d":"M-3396 1106l0 -127 -126 0 0 127 126 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil13 str11","@d":"M-2695 2041l0 -174 -173 0 0 174 173 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil12 str11","@d":"M-2752 2041l0 -117 -116 0 0 117 116 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil13 str11","@d":"M-353 3592l0 -170 -170 0 0 170 170 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil12 str11","@d":"M-419 3592l0 -104 -104 0 0 104 104 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil13 str11","@d":"M534 1659l0 -170 -170 0 0 170 170 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil12 str11","@d":"M467 1659l0 -103 -103 0 0 103 103 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil11 str11","@d":"M-1904 2272l0 -233 -233 0 0 233 233 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M-1937 2272l0 -200 -200 0 0 200 200 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil15 str11","@d":"M2541 3567l0 -273 -277 0 0 273 277 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M2461 3567l0 -196 -197 0 0 196 197 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil11 str11","@d":"M-14 4970l0 -320 -317 0 0 320 317 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M-134 4970l0 -194 -197 0 0 194 197 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil10 str11","@d":"M-1860 4895l0 -277 -273 0 0 277 273 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M-1940 4895l0 -194 -193 0 0 194 193 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil10 str11","@d":"M-1100 5523l0 -283 -284 0 0 283 284 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M-1200 5523l0 -183 -184 0 0 183 184 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil15 str11","@d":"M599 4608l0 -344 -343 0 0 344 343 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M439 4608l0 -184 -183 0 0 184 183 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil10 str11","@d":"M-3800 1072l0 -326 -327 0 0 326 327 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M-3947 1072l0 -180 -180 0 0 180 180 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil10 str11","@d":"M-1245 1681l0 -203 -207 0 0 203 207 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M-1299 1681l0 -157 -153 0 0 157 153 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil10 str11","@d":"M-663 1315l0 -204 -206 0 0 204 206 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M-715 1315l0 -156 -154 0 0 156 154 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil11 str11","@d":"M-458 5475l0 -224 -227 0 0 224 227 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M-532 5475l0 -156 -153 0 0 156 153 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil13 str11","@d":"M-2517 1522l0 -237 -237 0 0 237 237 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M-2608 1522l0 -146 -146 0 0 146 146 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil11 str11","@d":"M640 3226l0 -223 -223 0 0 223 223 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M564 3226l0 -143 -147 0 0 143 147 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil10 str11","@d":"M-312 4250l0 -200 -200 0 0 200 200 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M-369 4250l0 -143 -143 0 0 143 143 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil10 str11","@d":"M-723 1705l0 -183 -184 0 0 183 184 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M-767 1705l0 -143 -140 0 0 143 140 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil11 str11","@d":"M1148 2597l0 -240 -240 0 0 240 240 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M1044 2597l0 -137 -136 0 0 137 136 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil10 str11","@d":"M-1200 4922l0 -260 -257 0 0 260 257 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M-1320 4922l0 -137 -137 0 0 137 137 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil13 str11","@d":"M-1802 1675l0 -163 -164 0 0 163 164 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M-1842 1675l0 -123 -124 0 0 123 124 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil13 str11","@d":"M-2401 3769l0 -216 -216 0 0 216 216 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M-2493 3769l0 -120 -124 0 0 120 124 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil11 str11","@d":"M2259 1720l0 -237 -233 0 0 237 233 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M2146 1720l0 -123 -120 0 0 123 120 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil11 str11","@d":"M-3825 1565l0 -297 -300 0 0 297 300 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M-4005 1565l0 -120 -120 0 0 120 120 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil10 str11","@d":"M-1662 3525l0 -230 -230 0 0 230 230 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M-1775 3525l0 -117 -117 0 0 117 117 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil13 str11","@d":"M-1157 4308l0 -230 -230 0 0 230 230 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M-1274 4308l0 -113 -113 0 0 113 113 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil13 str11","@d":"M-1612 2535l0 -150 -153 0 0 150 153 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M-1652 2535l0 -113 -113 0 0 113 113 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil16 str11","@d":"M-803 2148l0 -130 -130 0 0 130 130 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M-837 2148l0 -96 -96 0 0 96 96 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil13 str11","@d":"M234 2837l0 -150 -150 0 0 150 150 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M177 2837l0 -93 -93 0 0 93 93 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil15 str11","@d":"M-1810 5814l0 -337 -337 0 0 337 337 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil17 str11","@d":"M-1904 5814l0 -243 -243 0 0 243 243 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil11 str11","@d":"M-933 1247l0 -186 -183 0 0 186 183 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil17 str11","@d":"M-946 1247l0 -166 -170 0 0 166 170 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil10 str11","@d":"M-3130 5156l0 -223 -223 0 0 223 223 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil17 str11","@d":"M-3203 5156l0 -147 -150 0 0 147 150 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil10 str11","@d":"M-3291 1785l0 -220 -220 0 0 220 220 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil17 str11","@d":"M-3374 1785l0 -136 -137 0 0 136 137 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil13 str11","@d":"M-1987 2939l0 -160 -160 0 0 160 160 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil17 str11","@d":"M-2041 2939l0 -106 -106 0 0 106 106 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil15 str11","@d":"M25 2378l0 -303 -300 0 0 303 300 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M12 2378l0 -286 -287 0 0 286 287 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil18 str11","@d":"M-723 2722l0 -150 -154 0 0 150 154 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil9 str11","@d":"M-760 2722l0 -116 -117 0 0 116 117 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@id":"rects_for_legend","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@id":"textPathAtlantic","@style":"visibility:hidden;","@d":"M -4900,5300 C -4950,4300 -4950,1800 -4900,800","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@id":"textPathMiddle","@style":"visibility:hidden;","@d":"M -1900,6500 C -1400,6400 -600,6150 -100,6000","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@id":"textPathMiddleSea","@style":"visibility:hidden;","@d":"M 1200,5500 C 2200,5100 2400,4950 3400,4500","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@id":"textPathBalearic","@style":"visibility:hidden;","@d":"M 1500,3600 C 2000,3200 2100,3150 2600,2900","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@id":"textPathMorocco","@style":"visibility:hidden;","@d":"M -2700,7120 C -2200,7070 -1000,7070 -500,7120","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@id":"textPathPortugal","@style":"visibility:hidden;","@d":"M -3900,4600 C -3850,4000 -3700,2900 -3500,2300","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@id":"textPathFranceText","@style":"visibility:hidden;","@d":"M 50,650 C 500,850 1400,1020 1850,1050","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@id":"textPathEbro","@style":"visibility:hidden;","@d":"M 30,1960 C 50,1970 170,2050 200,2065","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@id":"textPathGuadalquivir","@style":"visibility:hidden;","@d":"M -2860,5500 C -2850,5350 -2800,5200 -2700,5000","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@id":"textPathGuadiana","@style":"visibility:hidden;","@d":"M -3725,4950 C -3710,4800 -3700,4720 -3670,4570","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"switch":[{"text":[{"textPath":{"$":"Atlantischer Ozean","@xlink:href":"#textPathAtlantic","@startOffset":"5%","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@systemLanguage":"de","@class":"fil19 fnt1","@style":"letter-spacing:150px;","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"textPath":{"$":"Atlantic Ocean","@xlink:href":"#textPathAtlantic","@startOffset":"10%","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@systemLanguage":"en","@class":"fil19 fnt1","@style":"letter-spacing:200px;","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":[{"textPath":{"$":"Mittel-","@xlink:href":"#textPathMiddle","@startOffset":"25%","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@systemLanguage":"de","@class":"fil19 fnt1","@style":"letter-spacing:70px;","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"textPath":{"$":"Mediter-","@xlink:href":"#textPathMiddle","@startOffset":"5%","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@systemLanguage":"en","@class":"fil19 fnt1","@style":"letter-spacing:130px;","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":[{"textPath":{"$":"l\u00e4ndisches Meer","@xlink:href":"#textPathMiddleSea","@startOffset":"0%","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@systemLanguage":"de","@class":"fil19 fnt1","@style":"letter-spacing:70px;","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"textPath":{"$":"ranean Sea","@xlink:href":"#textPathMiddleSea","@startOffset":"5%","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@systemLanguage":"en","@class":"fil19 fnt1","@style":"letter-spacing:130px;","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":[{"textPath":{"$":"Balearen","@xlink:href":"#textPathBalearic","@startOffset":"5%","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@systemLanguage":"de","@class":"fil8 fnt2","@style":"letter-spacing:85px;","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"textPath":{"$":"Balearics","@xlink:href":"#textPathBalearic","@startOffset":"5%","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@systemLanguage":"en","@class":"fil8 fnt2","@style":"letter-spacing:80px;","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":[{"textPath":{"$":"Marokko","@xlink:href":"#textPathMorocco","@startOffset":"5%","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@systemLanguage":"de","@class":"fil8 fnt4","@style":"letter-spacing:220px;","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"textPath":{"$":"Morocco","@xlink:href":"#textPathMorocco","@startOffset":"5%","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@systemLanguage":"en","@class":"fil8 fnt4","@style":"letter-spacing:220px;","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":[{"textPath":{"$":"Frankreich","@xlink:href":"#textPathFranceText","@startOffset":"10%","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@systemLanguage":"de","@class":"fil8 fnt4","@style":"letter-spacing:70px;","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"textPath":{"$":"France","@xlink:href":"#textPathFranceText","@startOffset":"5%","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@systemLanguage":"en","@class":"fil8 fnt4","@style":"letter-spacing:190px;","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":[{"$":"Sevilla","@x":"-2247","@y":"5318","@class":"fil8 fnt5","@systemLanguage":"de","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Seville","@x":"-2247","@y":"5318","@class":"fil8 fnt5","@systemLanguage":"en","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":[{"$":"Lissabon","@x":"-4885","@y":"4076","@class":"fil8 fnt5","@systemLanguage":"de","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Lisbon","@x":"-4806","@y":"4076","@class":"fil8 fnt5","@systemLanguage":"en","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":[{"$":"Algier","@x":"2298","@y":"5447","@class":"fil8 fnt5","@systemLanguage":"de","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Algiers","@x":"2298","@y":"5447","@class":"fil8 fnt5","@systemLanguage":"en","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"text":[{"$":"Mallorca","@x":"2488","@y":"3766","@class":"fil8 fnt3","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Menorca","@x":"2928","@y":"3006","@class":"fil8 fnt3","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"textPath":{"$":"Portugal","@xlink:href":"#textPathPortugal","@startOffset":"5%","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@class":"fil8 fnt4","@style":"letter-spacing:200px;","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Barcelona","@x":"1998","@y":"2171","@class":"fil8 fnt5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Valencia","@x":"619","@y":"3777","@class":"fil8 fnt5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Madrid","@x":"-966","@y":"3255","@class":"fil8 fnt5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Bilbao","@x":"-1400","@y":"715","@class":"fil8 fnt5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"La Coru\u00f1a","@x":"-4377","@y":"663","@class":"fil8 fnt5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Marseille","@x":"3035","@y":"484","@class":"fil8 fnt5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Montpellier","@x":"2125","@y":"485","@class":"fil8 fnt5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Perpignan","@x":"1710","@y":"1200","@class":"fil8 fnt5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Porto","@x":"-4225","@y":"3046","@class":"fil8 fnt5","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"textPath":{"$":"Ebro","@xlink:href":"#textPathEbro","@startOffset":"0%","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@class":"fil19 fnt6","@style":"letter-spacing:5px;","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"textPath":{"$":"Guadalquivir","@xlink:href":"#textPathGuadalquivir","@startOffset":"0%","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@class":"fil19 fnt6","@style":"letter-spacing:0px;","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"textPath":{"$":"Guadiana","@xlink:href":"#textPathGuadiana","@startOffset":"0%","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@class":"fil19 fnt6","@style":"letter-spacing:0px;","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Ibiza","@x":"1598","@y":"4068","@class":"fil8 fnt7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"ellipse":[{"@class":"fil20 str12","@cx":"-4524","@cy":"4115","@rx":"20","@ry":"20","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil20 str12","@cx":"2539","@cy":"5508","@rx":"20","@ry":"20","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil20 str12","@cx":"-4248","@cy":"3087","@rx":"20","@ry":"20","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil20 str12","@cx":"3344","@cy":"541","@rx":"20","@ry":"20","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil20 str12","@cx":"2602","@cy":"516","@rx":"20","@ry":"20","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil20 str12","@cx":"2139","@cy":"1235","@rx":"20","@ry":"20","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"g":[{"text":{"$":"Tajo","@x":"0","@y":"3748","@class":"fil19 fnt6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@transform":"matrix(0.999514 -0.0311582 0.0311582 0.999514 -774.816 -1079.23)","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":{"$":"Tejo","@x":"0","@y":"3748","@class":"fil19 fnt6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@transform":"matrix(0.788941 -0.614468 0.614468 0.788941 -6525.95 784.685)","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":{"$":"Duero","@x":"0","@y":"3748","@class":"fil19 fnt6","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@transform":"matrix(0.974789 0.22313 -0.22313 0.974789 -642.438 -1622.51)","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@id":"lettering","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"g":{"path":[{"@class":"fil7 str13","@d":"M-5373 1689l93 8 103 7 103 8 103 7 103 8 53 3 50 4 104 6 103 7 103 6 103 6 103 6 104 6 103 5 103 5 104 5 103 5 3 0 100 5 103 4 104 4 103 4 103 3 104 4 103 3 104 3 103 3 103 2 56 2 48 1 103 2 103 2 104 1 103 2 104 1 103 1 103 1 104 0 103 1 104 0 5 0 98 0 103 -1 104 0 103 -1 104 -1 103 -1 103 -1 104 -2 103 -2 104 -2 58 -1 45 -1 103 -3 104 -3 103 -3 103 -3 104 -3 103 -4 104 -4 103 -4 103 -4 103 -5 9 0 95 -4 103 -5 103 -5 104 -6 103 -5 103 -6 103 -6 104 -7 103 -6 103 -7 61 -4 42 -3 103 -7 103 -7 104 -8 103 -8 103 -8 103 -8 103 -8 103 -9 103 -9 103 -9 11 -1 92 -9 103 -9 103 -10 103 -10 103 -10 103 -11 11 -1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str13","@d":"M-5373 3150l87 7 106 8 106 7 107 8 54 3 52 4 106 7 107 7 106 6 106 6 106 6 107 6 106 6 107 5 106 5 106 5 3 0 104 5 106 4 107 5 106 3 107 4 106 4 106 3 107 3 106 3 107 3 57 1 49 1 107 2 106 2 107 2 106 1 107 2 106 1 107 0 106 1 107 0 106 1 6 0 101 -1 107 0 106 0 107 -1 106 -1 107 -1 106 -2 107 -2 106 -2 107 -2 60 -1 46 -1 107 -3 106 -2 106 -4 107 -3 106 -3 107 -4 106 -4 107 -4 106 -5 107 -4 8 -1 98 -4 106 -5 107 -6 106 -5 106 -6 107 -6 106 -6 106 -7 107 -6 106 -7 63 -5 43 -2 107 -8 106 -7 106 -8 106 -8 107 -9 106 -8 106 -9 106 -9 106 -9 106 -9 12 -1 94 -9 106 -10 106 -10 106 -10 75 -8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str13","@d":"M-5373 4611l87 6 110 8 109 8 56 3 53 4 110 7 109 7 110 7 109 6 110 6 109 6 109 6 110 6 109 5 110 5 3 0 107 5 109 4 110 5 109 4 110 4 109 3 110 4 109 3 110 3 110 2 59 2 50 1 110 2 109 2 110 2 110 1 109 2 110 1 109 1 110 0 110 1 109 0 6 0 104 0 110 -1 109 0 110 -1 109 -1 110 -1 110 -2 109 -2 110 -2 109 -2 63 -1 47 -1 110 -3 109 -3 110 -3 109 -3 110 -4 110 -4 109 -4 110 -4 109 -5 110 -5 8 0 101 -5 110 -5 109 -5 110 -6 109 -6 110 -6 109 -7 109 -6 110 -7 109 -7 65 -5 45 -3 109 -7 109 -8 110 -8 109 -8 109 -9 110 -9 109 -9 109 -9 109 -9 109 -10 12 -1 98 -9 109 -10 109 -10 41 -4","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str13","@d":"M-5373 6072l94 7 112 8 58 3 55 4 112 7 113 8 112 6 113 7 113 6 112 7 113 6 112 5 113 6 113 5 3 0 109 5 113 4 112 5 113 4 113 4 112 4 113 3 113 4 112 3 113 2 61 2 52 1 113 2 112 2 113 2 113 2 112 1 113 1 113 1 113 1 112 0 113 0 6 0 107 0 113 0 112 -1 113 -1 113 -1 113 -1 112 -2 113 -1 113 -3 112 -2 64 -1 49 -1 113 -3 113 -3 112 -3 113 -4 113 -3 112 -4 113 -5 113 -4 112 -5 113 -5 9 0 103 -5 113 -5 113 -6 112 -6 113 -6 112 -6 113 -7 112 -7 113 -7 112 -7 67 -5 46 -3 112 -7 113 -8 112 -9 113 -8 112 -9 112 -9 113 -9 112 -10 112 -9 113 -10 12 -2 100 -9 112 -10 14 -1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str13","@d":"M-5189 7287l1 -17 9 -139 9 -138 10 -139 9 -138 9 -139 10 -139 9 -138 9 -138 5 -72 5 -67 9 -138 9 -139 10 -138 9 -138 9 -139 10 -138 9 -138 9 -138 10 -139 9 -138 0 -4 9 -134 10 -138 9 -139 9 -138 10 -138 9 -138 9 -138 10 -139 9 -138 9 -138 5 -75 4 -63 10 -138 9 -138 9 -139 10 -138 9 -138 9 -138 10 -139 9 -138 9 -138 10 -138 0 -8 9 -131 9 -138 10 -139 9 -138 9 -138 10 -139 9 -138 9 -139 10 -138 8 -125","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str13","@d":"M-3976 7287l4 -88 6 -139 6 -138 6 -139 7 -139 6 -139 6 -138 6 -139 4 -71 3 -68 6 -138 6 -139 6 -138 6 -139 7 -138 6 -139 6 -138 6 -139 7 -138 6 -138 0 -4 6 -135 6 -138 6 -138 7 -139 6 -138 6 -139 6 -138 6 -138 7 -139 6 -138 3 -75 3 -63 6 -139 7 -138 6 -138 6 -139 6 -138 6 -139 7 -138 6 -139 6 -138 6 -138 1 -8 5 -131 7 -139 6 -138 6 -139 6 -138 7 -139 6 -139 6 -138 6 -139 7 -139 2 -45","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str13","@d":"M-2765 7287l1 -47 3 -139 3 -139 3 -139 3 -139 3 -138 3 -139 3 -139 2 -71 2 -68 3 -138 3 -139 3 -139 3 -138 3 -139 3 -138 3 -139 3 -138 4 -139 3 -139 0 -3 3 -135 3 -139 3 -138 3 -138 3 -139 3 -138 3 -139 4 -138 3 -139 3 -138 1 -75 2 -64 3 -138 3 -139 3 -138 3 -139 3 -138 4 -139 3 -138 3 -139 3 -138 3 -139 0 -7 3 -132 3 -138 3 -139 3 -138 4 -139 3 -139 3 -139 3 -138 3 -139 3 -139 2 -79 0 -2","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str13","@d":"M-1556 7287l0 -34 0 -139 0 -139 0 -138 0 -139 0 -139 0 -139 0 -139 0 -71 0 -67 0 -139 0 -139 0 -138 0 -139 0 -139 0 -138 0 -139 0 -138 0 -139 0 -139 0 -3 0 -135 0 -139 0 -138 0 -139 0 -138 0 -139 0 -138 0 -139 0 -138 0 -139 0 -74 0 -64 0 -139 0 -138 0 -139 0 -138 0 -139 0 -138 0 -139 0 -138 0 -139 0 -139 0 -7 0 -131 0 -139 0 -139 0 -138 0 -139 0 -139 0 -139 0 -139 0 -138 0 -139 0 -79 0 -14","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str13","@d":"M-346 7287l-1 -47 -3 -139 -4 -139 -3 -139 -3 -139 -3 -138 -3 -139 -3 -139 -2 -71 -1 -68 -3 -138 -3 -139 -4 -139 -3 -138 -3 -139 -3 -138 -3 -139 -3 -138 -3 -139 -3 -139 0 -3 -3 -135 -4 -139 -3 -138 -3 -138 -3 -139 -3 -138 -3 -139 -3 -138 -3 -139 -3 -138 -2 -75 -2 -64 -3 -138 -3 -139 -3 -138 -3 -139 -3 -138 -3 -139 -3 -138 -3 -139 -4 -138 -3 -139 0 -7 -3 -132 -3 -138 -3 -139 -3 -138 -3 -139 -3 -139 -3 -139 -4 -138 -3 -139 -3 -139 -2 -79 0 -2","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str13","@d":"M865 7287l-4 -88 -7 -139 -6 -138 -6 -139 -6 -139 -7 -139 -6 -138 -6 -139 -3 -71 -3 -68 -6 -138 -7 -139 -6 -138 -6 -139 -6 -138 -7 -139 -6 -138 -6 -139 -6 -138 -6 -138 -1 -4 -6 -135 -6 -138 -6 -138 -6 -139 -6 -138 -7 -139 -6 -138 -6 -138 -6 -139 -7 -138 -3 -75 -3 -63 -6 -139 -6 -138 -6 -138 -7 -139 -6 -138 -6 -139 -6 -138 -6 -139 -7 -138 -6 -138 0 -8 -6 -131 -6 -139 -7 -138 -6 -139 -6 -138 -6 -139 -7 -139 -6 -138 -6 -139 -6 -139 -2 -45","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str13","@d":"M2078 7287l-1 -17 -10 -139 -9 -138 -9 -139 -10 -138 -9 -139 -9 -139 -10 -138 -9 -138 -5 -72 -4 -67 -10 -138 -9 -139 -9 -138 -10 -138 -9 -139 -9 -138 -10 -138 -9 -138 -9 -139 -10 -138 0 -4 -9 -134 -9 -138 -10 -139 -9 -138 -9 -138 -10 -138 -9 -138 -9 -139 -10 -138 -9 -138 -5 -75 -4 -63 -9 -138 -10 -138 -9 -139 -9 -138 -10 -138 -9 -138 -9 -139 -10 -138 -9 -138 -9 -138 -1 -8 -9 -131 -9 -138 -9 -139 -10 -138 -9 -138 -9 -139 -10 -138 -9 -139 -9 -138 -9 -125","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str13","@d":"M3295 7287l-10 -112 -13 -138 -12 -139 -13 -138 -12 -139 -13 -138 -12 -138 -12 -138 -13 -139 -6 -71 -6 -67 -13 -138 -12 -138 -13 -138 -12 -138 -13 -138 -12 -138 -12 -138 -13 -138 -12 -138 -13 -138 0 -4 -12 -134 -12 -138 -13 -138 -12 -138 -13 -138 -12 -138 -13 -138 -12 -138 -12 -138 -13 -138 -6 -74 -6 -64 -13 -138 -12 -138 -12 -138 -13 -138 -12 -138 -13 -138 -12 -138 -13 -138 -12 -138 -12 -138 -1 -7 -12 -131 -12 -138 -13 -138 -12 -138 -13 -138 -12 -139 -12 -138 -13 -138 -12 -138 -4 -42","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@id":"gridlines","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil20 str14","@d":"M-12 7218l0 0 0 -1637 3344 0 0 1637 -3344 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str15","@d":"M85 7122l0 -1444 3149 0 0 1444 -3149 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@id":"textPathCanary","@style":"visibility:hidden;","@d":"M 700,6300 C 1200,6125 2100,6000 2600,6000","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"image":{"@transform":"matrix(0.930151 0 0 0.929032 86.3544 3637.68)","@x":"0","@y":"2198","@width":"3383","@height":"1550","@xlink:href":"tests\/resources\/images\/canaryRelief.png","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"g":[{"g":[{"path":[{"@class":"fil4","@d":"M3152 5774l-14 0 0 -3 -3 -3 3 -4 4 -6 10 -7 6 0 4 3 0 7 0 3 -7 4 0 3 -3 3z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil4","@d":"M3138 5898l-3 0 -3 -4 0 -3 -4 -3 4 0 3 -4 7 -6 0 -4 0 -3 0 -3 6 -20 4 0 3 0 7 3 6 3 4 4 0 6 0 4 -4 0 -3 3 -7 10 0 3 -3 7 -7 0 -6 3 -4 4z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil4","@d":"M2988 6178l-6 0 0 -4 -4 -3 0 -3 -6 0 -7 0 -3 -4 -4 0 -10 0 -13 0 -3 4 -4 0 -3 -7 0 -7 -3 -3 0 -3 0 -4 0 -6 3 0 7 -4 3 -6 7 -4 3 -3 0 -3 3 -4 0 -6 0 -10 4 -17 -4 -13 0 -4 4 -6 0 -4 6 -10 0 -3 7 -7 3 -3 4 -10 3 0 7 -3 6 -7 10 -10 17 0 7 -3 6 3 4 -3 3 -4 7 -3 3 -7 7 -3 3 -3 7 -10 6 0 4 0 3 0 3 0 7 -4 3 -3 7 -3 3 0 4 -4 3 4 3 0 4 3 3 3 3 4 4 0 3 0 3 0 7 -4 3 -3 4 -7 0 -3 3 -3 0 -4 0 -6 3 -4 0 -3 4 -7 0 -3 0 -3 3 -7 3 -13 14 -17 3 -3 3 3 7 3 7 4 10 10 3 6 3 4 -3 6 0 14 0 3 0 7 -3 3 -7 3 -10 7 -3 7 0 3 0 7 3 6 0 7 3 3 0 7 0 3 0 4 -3 6 -3 7 -4 33 0 4 -6 0 0 10 -4 3 -6 3 0 4 -4 0 -3 3 -3 3 -7 4 -3 0 -7 3 0 3 0 7 -3 0 -4 0 -10 0 -6 -3 -4 3 -6 3 0 4 -4 0 -6 10 0 3 -17 3 -13 7 -4 0 -10 -3 -6 0 -7 0 -10 6 -3 0 -4 4 -6 3 -4 10 -3 13 -3 0 -4 7 -3 3 -7 4 0 10z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil4","@d":"M2638 6761l-10 -3 -13 0 -3 0 -10 0 -7 -7 -7 -3 -3 0 -10 -4 -10 0 -20 0 -7 0 -3 4 -3 0 -4 0 -3 0 -3 -4 6 -6 4 -7 0 -7 0 -3 6 0 4 0 3 3 10 0 10 4 17 -4 3 -3 10 -3 7 -4 3 -3 17 -7 20 -10 6 -3 4 -3 6 -10 4 0 6 -7 7 -3 3 -4 4 0 6 -6 10 -14 4 -6 10 -10 3 -4 3 -10 0 -10 -3 -20 3 -6 4 -10 3 -10 0 -4 7 -6 6 -7 4 -7 3 -6 0 -4 3 -13 0 -7 4 -3 0 -3 0 -4 0 -10 0 -3 6 -7 4 -3 3 -3 3 -7 4 -7 10 -10 3 -6 3 -10 4 -10 0 -4 3 -3 3 -3 4 -7 0 -7 3 -3 3 -7 4 -3 0 -3 6 -7 7 -10 3 -3 -3 -17 3 -3 0 -7 4 -3 3 -17 3 -3 0 -10 0 -14 0 -10 4 -3 0 -3 10 -4 3 0 3 -3 4 -3 6 0 7 -7 3 0 7 -3 3 -4 7 -3 3 0 7 0 3 0 7 -3 7 3 3 0 3 3 4 7 0 3 10 4 6 10 4 3 0 3 3 14 -3 13 3 17 0 6 3 7 0 3 0 14 4 10 0 10 -4 3 0 7 0 20 -3 3 -3 13 -4 7 -3 7 -3 3 -4 7 0 6 0 4 4 10 0 3 -4 7 0 6 4 7 3 7 3 3 0 3 -6 7 0 3 -4 7 -6 3 -4 17 -3 7 0 3 -3 10 0 3 -7 7 -3 3 0 7 0 3 0 10 -7 4 0 3 -3 10 -4 7 -3 6 -10 7 -3 3 -4 0 -3 -3 -3 0 -4 0 -10 7 -3 3 -13 0 -7 3 -7 0 -10 0 -13 4 -7 3 -13 3 -10 4 -7 3 -10 7 -10 6 -10 4 -16 0 -7 6 -7 10 -3 4 -10 16 -3 4 -7 6 -3 4 -4 3 -10 10 -3 7 -3 3 -4 0 -10 10 -3 3 -3 4 -4 3z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil4","@d":"M1835 6994l-10 -3 -7 -7 -3 0 -10 -3 -27 0 -6 0 0 -3 -14 -14 -10 -3 -3 -3 0 -4 -13 -10 -4 -3 -3 -7 -7 -6 -10 -4 -3 -3 -3 0 0 -3 -7 -20 -7 -4 0 -6 -3 -10 -10 -17 0 -3 3 -10 0 -4 0 -6 0 -4 0 -3 0 -3 0 -14 0 -13 4 -7 3 0 3 -3 10 0 4 0 3 0 3 -7 7 -6 3 -7 7 0 3 0 4 -3 3 -4 3 -3 0 -3 0 -4 4 -3 3 0 3 -3 0 -4 4 -3 0 -7 -4 -6 4 -7 3 -3 -3 -4 3 -6 0 -7 3 -3 -3 -7 -3 -7 0 -6 13 3 10 0 3 0 10 0 4 0 3 7 10 3 7 0 3 3 3 0 17 0 10 0 7 0 3 4 3 -4 7 -3 3 0 4 3 6 4 4 -4 3 4 10 6 7 0 3 4 3 -4 7 -3 7 0 3 0 3 -3 0 -4 0 -3 0 -3 -6 -7 3 -7 10 0 3 -6 4 3 6 3 4 4 -4 3 -10 13 0 4 -3 6 0 7 3 3 7 7 0 3 0 7 0 7 -3 3 0 3 0 7 0 3 0 4 3 10 0 3 7 3 3 7 7 0 0 3 6 4 4 3 0 3 -4 7 -3 10 -3 3 0 7 3 3 3 7 0 3 0 7 7 3 0 7 -10 0 -3 3 0 4 -4 6 -3 7 3 7 0 3 4 3 6 7 4 3 -4 4 0 3 -10 7 -6 3 0 3 -4 4 -3 0 -3 6 -4 7 -3 3 -3 10 -10 7 -4 0 -16 7 -7 0 -7 3 -3 3 -3 0 -7 0 -7 4 -3 0 -3 3 -14 7 0 3 -3 3 -3 7 -4 3 -3 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil4","@d":"M415 6408l0 6 0 7 -3 3 -4 4 -3 3 -7 3 -3 4 0 6 -7 7 -3 10 -3 0 0 -3 -7 -4 -7 -6 -3 -4 0 -3 0 -7 0 -3 0 -3 -3 -4 -4 -3 0 -17 0 -6 0 -4 0 -3 0 -3 -3 -4 -13 -13 -7 -10 0 -3 0 -14 -3 -6 0 -7 -4 -3 -6 -7 0 -3 -4 -7 -6 -3 0 -7 0 -3 0 -4 -4 -6 0 -4 0 -3 -3 -7 -3 -3 -4 -3 -3 -10 -7 -4 -3 0 -7 -10 0 -3 0 -7 4 -6 0 -4 10 -10 3 -3 0 -7 0 -3 3 0 10 -3 7 -7 13 -7 7 -6 3 -4 4 -3 3 3 7 4 3 3 3 0 4 0 6 0 7 3 7 0 13 -3 7 -3 3 0 7 0 3 0 7 3 10 10 3 7 0 3 0 3 0 4 0 3 3 3 7 10 0 4 0 6 3 4 10 6 4 4 0 6 -4 7 0 3 -10 7 -6 13 -4 7 -3 10 0 10 0 3 3 7 4 13 3 10 0 7 -3 10 -4 3 0 4 -3 3 0 3 -3 7 -14 20 0 3 -3 4z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil4","@d":"M1128 6811l-3 0 -3 -3 -7 -4 0 -3 -3 -3 3 -14 0 -6 -3 -4 -4 -3 -3 -3 -3 0 -4 -4 -3 -3 0 -7 0 -6 -3 0 -7 -10 -10 -14 -7 -6 -3 -7 -7 -3 0 -4 -3 -3 -3 -7 -4 -16 -3 -7 -7 -3 -3 -4 -3 0 0 -3 -7 -7 0 -3 -3 -7 0 -13 -4 -17 0 -3 -3 -7 -10 -16 0 -4 -7 -10 -3 -3 -7 -3 -3 -4 -3 -6 -4 -4 -3 -6 3 -4 0 -3 10 0 7 -3 3 0 4 -4 6 -3 4 0 6 -3 10 -4 4 0 3 4 3 0 10 6 20 0 10 0 4 0 13 -6 10 0 10 3 10 -10 3 -3 4 0 3 -4 7 0 13 0 3 4 20 0 4 -4 16 0 4 -3 3 -3 3 -4 7 -6 7 -4 3 0 10 4 3 0 4 0 3 -4 3 -6 7 -4 7 -3 0 -3 3 -4 3 -6 4 -4 0 -3 6 -3 4 -4 3 0 3 -3 4 -3 3 -7 3 -13 4 -7 3 -3 7 0 6 -7 0 -3 10 3 10 -3 7 -7 7 -3 3 0 0 -4 3 -6 7 0 7 3 3 0 7 -3 3 -4 7 4 3 0 7 0 3 0 13 6 7 0 3 0 7 -3 10 0 3 0 7 -7 7 0 3 -6 3 -4 10 4 4 0 0 3 3 10 3 3 0 4 0 13 0 3 -3 7 0 3 -3 4 -7 3 -10 3 -3 0 -14 7 -13 7 -3 3 -4 0 -6 3 -7 4 -3 6 -10 10 -4 4 -3 3 -7 7 -6 10 -7 10 -7 6 -10 4 -3 3 -7 3 -6 7 -4 3 -3 4 0 13 0 3 0 14 3 6 0 4 -3 6 -3 4 -4 3 0 3 -3 4 0 6 -7 10 0 4 -10 20 -3 6 -3 10 -4 10 0 4 -6 16 0 10 0 4 0 3 -17 10 -7 3 0 4 -6 13 -7 10 -7 7 -3 3 -3 10 -4 3 -3 0 -7 10 -6 4 0 3 -4 3 -10 0 -10 0 -6 0 -20 7 -7 7 -3 3 -4 0 -10 0 -6 0 -4 3 -3 0 -7 7z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil4","@d":"M768 6788l-10 0 -10 -7 -13 -17 -7 0 -3 -3 -7 -7 -3 -10 -7 -6 -3 -4 0 -6 -3 -17 3 -3 0 -7 0 -10 7 -10 0 -3 0 -4 0 -3 3 -3 7 -4 3 -3 10 -7 17 -10 3 0 3 4 4 0 6 6 4 0 3 0 17 7 3 0 10 7 10 10 3 0 10 6 0 4 10 0 7 3 7 7 0 3 6 10 0 3 0 10 0 10 -3 4 0 3 -3 0 -7 10 -7 3 -3 7 -3 3 -4 0 -6 7 -7 7 -3 0 -7 3 -3 3 -4 0 -3 0 -13 -3 -4 3 -6 4 -4 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil4","@d":"M278 7051l-10 0 -3 0 -7 -7 -3 -3 -3 -3 -10 -20 -4 0 -3 -4 -3 0 -10 -3 -4 3 -6 -3 -10 0 -10 -3 -7 -4 -13 0 -4 -3 -3 0 -3 -10 -4 -10 0 -3 0 -4 0 -6 7 -7 10 -7 7 -3 3 3 7 7 3 0 7 0 6 0 7 0 7 3 3 0 7 0 6 -3 4 0 3 -3 7 -10 6 -7 4 0 10 -7 0 -3 -4 -3 -3 -4 3 -3 4 -3 3 0 10 0 3 0 4 -7 3 0 7 0 3 -3 3 -4 4 -3 3 -3 13 3 7 3 3 10 4 4 0 3 3 3 0 4 0 6 -3 4 -10 10 -4 3 -3 3 -3 7 0 3 0 4 -4 6 0 4 -3 16 -7 4 -3 3 -7 7 0 3 -3 3 -3 4 -4 3 0 7 0 6 0 4 -3 3 0 3 0 4 0 3 -7 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"path":{"@class":"fil5","@d":"M85 7121l0 -1443 3150 0 0 1443 -3150 0m3053 -1223l4 -4 6 -3 7 0 3 -7 0 -3 7 -10 3 -3 4 0 0 -4 0 -6 -4 -4 -6 -3 -7 -3 -3 0 -4 0 -6 20 0 3 0 3 0 4 -7 6 -3 4 -4 0 4 3 0 3 3 4 3 0m-150 280l0 -10 7 -4 3 -3 4 -7 3 0 3 -13 4 -10 6 -3 4 -4 3 0 10 -6 7 0 6 0 10 3 4 0 13 -7 17 -3 0 -3 6 -10 4 0 0 -4 6 -3 4 -3 6 3 10 0 4 0 3 0 0 -7 0 -3 7 -3 3 0 7 -4 3 -3 3 -3 4 0 0 -4 6 -3 4 -3 0 -10 6 0 0 -4 4 -33 3 -7 3 -6 0 -4 0 -3 0 -7 -3 -3 0 -7 -3 -6 0 -7 0 -3 3 -7 10 -7 7 -3 3 -3 0 -7 0 -3 0 -14 3 -6 -3 -4 -3 -6 -10 -10 -7 -4 -7 -3 -3 -3 -3 3 -14 17 -3 13 -3 7 0 3 0 3 -4 7 0 3 -3 4 0 6 0 4 -3 3 0 3 -4 7 -3 3 -7 4 -3 0 -3 0 -4 0 -3 -4 -3 -3 -4 -3 -3 0 -3 -4 -4 4 -3 0 -7 3 -3 3 -7 4 -3 0 -3 0 -4 0 -6 0 -7 10 -3 3 -7 3 -3 7 -7 3 -3 4 -4 3 -6 -3 -7 3 -17 0 -10 10 -6 7 -7 3 -3 0 -4 10 -3 3 -7 7 0 3 -6 10 0 4 -4 6 0 4 4 13 -4 17 0 10 0 6 -3 4 0 3 -3 3 -7 4 -3 6 -7 4 -3 0 0 6 0 4 0 3 3 3 0 7 3 7 4 0 3 -4 13 0 10 0 4 0 3 4 7 0 6 0 0 3 4 3 0 4 6 0m-2573 230l3 -4 0 -3 14 -20 3 -7 0 -3 3 -3 0 -4 4 -3 3 -10 0 -7 -3 -10 -4 -13 -3 -7 0 -3 0 -10 3 -10 4 -7 6 -13 10 -7 0 -3 4 -7 0 -6 -4 -4 -10 -6 -3 -4 0 -6 0 -4 -7 -10 -3 -3 0 -3 0 -4 0 -3 0 -3 -3 -7 -10 -10 -7 -3 -3 0 -7 0 -3 0 -7 3 -13 3 -7 0 -7 -3 -6 0 -4 0 -3 0 -3 -3 -7 -4 -3 -3 -4 3 -3 4 -7 6 -13 7 -7 7 -10 3 -3 0 0 3 0 7 -3 3 -10 10 0 4 -4 6 0 7 0 3 7 10 3 0 7 4 3 10 4 3 3 3 3 7 0 3 0 4 4 6 0 4 0 3 0 7 6 3 4 7 0 3 6 7 4 3 0 7 3 6 0 14 0 3 7 10 13 13 3 4 0 3 0 3 0 4 0 6 0 17 4 3 3 4 0 3 0 3 0 7 0 3 3 4 7 6 7 4 0 3 3 0 3 -10 7 -7 0 -6 3 -4 7 -3 3 -3 4 -4 3 -3 0 -7 0 -6m2223 353l4 -3 3 -4 3 -3 10 -10 4 0 3 -3 3 -7 10 -10 4 -3 3 -4 7 -6 3 -4 10 -16 3 -4 7 -10 7 -6 16 0 10 -4 10 -6 10 -7 7 -3 10 -4 13 -3 7 -3 13 -4 10 0 7 0 7 -3 13 0 3 -3 10 -7 4 0 3 0 3 3 4 0 3 -3 10 -7 3 -6 4 -7 3 -10 0 -3 7 -4 0 -10 0 -3 0 -7 3 -3 7 -7 0 -3 3 -10 0 -3 3 -7 4 -17 6 -3 4 -7 0 -3 6 -7 0 -3 -3 -3 -3 -7 -4 -7 0 -6 4 -7 0 -3 -4 -10 0 -4 0 -6 4 -7 3 -3 3 -7 4 -7 3 -13 3 -3 0 -20 0 -7 4 -3 0 -10 -4 -10 0 -14 0 -3 -3 -7 0 -6 -3 -17 3 -13 -3 -14 0 -3 -4 -3 -6 -10 -10 -4 0 -3 -4 -7 -3 -3 -3 0 -7 -3 -7 3 -3 0 -7 0 -3 0 -7 3 -3 4 -7 3 -3 0 -7 7 -6 0 -4 3 -3 3 -3 0 -10 4 0 3 -4 3 0 10 0 14 0 10 -3 3 -3 17 -4 3 0 7 -3 3 3 17 -3 3 -7 10 -6 7 0 3 -4 3 -3 7 -3 3 0 7 -4 7 -3 3 -3 3 0 4 -4 10 -3 10 -3 6 -10 10 -4 7 -3 7 -3 3 -4 3 -6 7 0 3 0 10 0 4 0 3 -4 3 0 7 -3 13 0 4 -3 6 -4 7 -6 7 -7 6 0 4 -3 10 -4 10 -3 6 3 20 0 10 -3 10 -3 4 -10 10 -4 6 -10 14 -6 6 -4 0 -3 4 -7 3 -6 7 -4 0 -6 10 -4 3 -6 3 -20 10 -17 7 -3 3 -7 4 -10 3 -3 3 -17 4 -10 -4 -10 0 -3 -3 -4 0 -6 0 0 3 0 7 -4 7 -6 6 3 4 3 0 4 0 3 0 3 -4 7 0 20 0 10 0 10 4 3 0 7 3 7 7 10 0 3 0 13 0 10 3m-1870 27l4 0 6 -4 4 -3 13 3 3 0 4 0 3 -3 7 -3 3 0 7 -7 6 -7 4 0 3 -3 3 -7 7 -3 7 -10 3 0 0 -3 3 -4 0 -10 0 -10 0 -3 -6 -10 0 -3 -7 -7 -7 -3 -10 0 0 -4 -10 -6 -3 0 -10 -10 -10 -7 -3 0 -17 -7 -3 0 -4 0 -6 -6 -4 0 -3 -4 -3 0 -17 10 -10 7 -3 3 -7 4 -3 3 0 3 0 4 0 3 -7 10 0 10 0 7 -3 3 3 17 0 6 3 4 7 6 3 10 7 7 3 3 7 0 13 17 10 7 10 0m360 23l7 -7 3 0 4 -3 6 0 10 0 4 0 3 -3 7 -7 20 -7 6 0 10 0 10 0 4 -3 0 -3 6 -4 7 -10 3 0 4 -3 3 -10 3 -3 7 -7 7 -10 6 -13 0 -4 7 -3 17 -10 0 -3 0 -4 0 -10 6 -16 0 -4 4 -10 3 -10 3 -6 10 -20 0 -4 7 -10 0 -6 3 -4 0 -3 4 -3 3 -4 3 -6 0 -4 -3 -6 0 -14 0 -3 0 -13 3 -4 4 -3 6 -7 7 -3 3 -3 10 -4 7 -6 7 -10 6 -10 7 -7 3 -3 4 -4 10 -10 3 -6 7 -4 6 -3 4 0 3 -3 13 -7 14 -7 3 0 10 -3 7 -3 3 -4 0 -3 3 -7 0 -3 0 -13 0 -4 -3 -3 -3 -10 0 -3 -4 0 -10 -4 -3 4 -3 6 -7 0 -7 7 -3 0 -10 0 -7 3 -3 0 -7 0 -13 -6 -3 0 -7 0 -3 0 -7 -4 -3 4 -7 3 -3 0 -7 -3 -7 0 -3 6 0 4 -3 0 -7 3 -7 7 -10 3 -10 -3 0 3 -6 7 -7 0 -3 3 -4 7 -3 13 -3 7 -4 3 -3 3 -3 0 -4 4 -6 3 0 3 -4 4 -3 6 -3 4 0 3 -7 3 -7 4 -3 6 -3 4 -4 0 -3 0 -10 -4 -3 0 -7 4 -7 6 -3 4 -3 3 -4 3 -16 0 -4 4 -20 0 -3 -4 -13 0 -7 0 -3 4 -4 0 -3 3 -10 10 -10 -3 -10 0 -13 6 -4 0 -10 0 -20 0 -10 -6 -3 0 -3 -4 -4 0 -10 4 -6 3 -4 0 -6 3 -4 4 -3 0 -7 3 -10 0 0 3 -3 4 3 6 4 4 3 6 3 4 7 3 3 3 7 10 0 4 10 16 3 7 0 3 4 17 0 13 3 7 0 3 7 7 0 3 3 0 3 4 7 3 3 7 4 16 3 7 3 3 0 4 7 3 3 7 7 6 10 14 7 10 3 0 0 6 0 7 3 3 4 4 3 0 3 3 4 3 3 4 0 6 -3 14 3 3 0 3 7 4 3 3 3 0m707 183l3 0 4 -3 3 -7 3 -3 0 -3 14 -7 3 -3 3 0 7 -4 7 0 3 0 3 -3 7 -3 7 0 16 -7 4 0 10 -7 3 -10 3 -3 4 -7 3 -6 3 0 4 -4 0 -3 6 -3 10 -7 0 -3 4 -4 -4 -3 -6 -7 -4 -3 0 -3 -3 -7 3 -7 4 -6 0 -4 3 -3 10 0 0 -7 -7 -3 0 -7 0 -3 -3 -7 -3 -3 0 -7 3 -3 3 -10 4 -7 0 -3 -4 -3 -6 -4 0 -3 -7 0 -3 -7 -7 -3 0 -3 -3 -10 0 -4 0 -3 0 -7 0 -3 3 -3 0 -7 0 -7 0 -3 -7 -7 -3 -3 0 -7 3 -6 0 -4 10 -13 4 -3 -4 -4 -6 -3 -4 -3 -3 6 -10 0 -3 7 6 7 0 3 0 3 0 4 -3 3 -3 0 -7 0 -7 3 -3 4 -3 -4 -7 0 -10 -6 -3 -4 -4 4 -6 -4 -4 -3 -3 0 -7 3 -3 4 -3 -4 -7 0 -10 0 -17 0 -3 0 -3 -3 -7 0 -10 -3 -3 -7 -4 0 -10 0 -3 0 -10 0 -13 -3 0 6 3 7 3 7 -3 3 0 7 -3 6 3 4 -3 3 -4 7 4 6 0 7 -4 3 0 4 -3 3 -3 0 -4 3 0 4 0 3 -3 3 -3 4 -4 3 -3 0 -7 0 -3 7 -7 6 -3 7 -3 0 -4 0 -10 0 -3 3 -3 0 -4 7 0 13 0 14 0 3 0 3 0 4 0 6 0 4 -3 10 0 3 10 17 3 10 0 6 7 4 7 20 0 3 3 0 3 3 10 4 7 6 3 7 4 3 13 10 0 4 3 3 10 3 14 14 0 3 6 0 27 0 10 3 3 0 7 7 10 3m-1557 57l7 0 0 -3 0 -4 0 -3 3 -3 0 -4 0 -6 0 -7 4 -3 3 -4 3 -3 0 -3 7 -7 3 -3 7 -4 3 -16 0 -4 4 -6 0 -4 0 -3 3 -7 3 -3 4 -3 10 -10 3 -4 0 -6 0 -4 -3 -3 0 -3 -4 -4 -3 -10 -7 -3 -13 -3 -3 3 -4 3 -3 4 -3 3 -7 0 -3 0 -4 7 -3 0 -10 0 -3 0 -4 3 -3 3 3 4 4 3 0 3 -10 7 -4 0 -6 7 -7 10 -3 3 -4 0 -6 3 -7 0 -3 0 -7 -3 -7 0 -6 0 -7 0 -3 0 -7 -7 -3 -3 -7 3 -10 7 -7 7 0 6 0 4 0 3 4 10 3 10 3 0 4 3 13 0 7 4 10 3 10 0 6 3 4 -3 10 3 3 0 3 4 4 0 10 20 3 3 3 3 7 7 3 0 10 0m2874 -1277l3 -3 0 -3 7 -4 0 -3 0 -7 -4 -3 -6 0 -10 7 -4 6 -3 4 3 3 0 3 14 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":[{"$":"18","@x":"242","@y":"5654","@class":"fil8 fnt8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"16","@x":"1525","@y":"5654","@class":"fil8 fnt8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"14","@x":"2797","@y":"5654","@class":"fil8 fnt8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"18","@x":"222","@y":"7192","@class":"fil8 fnt8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"16","@x":"1517","@y":"7192","@class":"fil8 fnt8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"14","@x":"2834","@y":"7192","@class":"fil8 fnt8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"28","@x":"3244","@y":"6808","@class":"fil8 fnt8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"28","@x":"-2","@y":"6812","@class":"fil8 fnt8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"switch":{"text":[{"$":"westl. v. Greenwich","@x":"377","@y":"5654","@class":"fil8 fnt8","@systemLanguage":"de","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"west of Greenwich","@x":"377","@y":"5654","@class":"fil8 fnt8","@systemLanguage":"en","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil7 str8","@d":"M3152 5776l2 -4 2 -3 5 -5 2 -3 0 -5 -4 -5 -6 0 -2 3 -11 3 -3 7 -1 5 1 4 2 1 13 2","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M3140 5897l-4 0 -4 -2 -1 -2 -1 -3 2 -3 3 -2 5 -5 0 -4 1 -4 1 -3 6 -19 4 -2 3 1 8 3 5 2 5 6 -1 4 -2 3 -3 2 -2 3 -6 10 0 4 -6 5 -4 0 -6 5 -3 1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M2987 6178l-5 -1 -2 -3 -1 -3 -2 -3 -4 -1 -9 1 -3 -2 -4 -1 -9 1 -12 0 -3 2 -4 -1 -3 -5 -2 -7 -2 -3 -2 -4 0 -4 2 -4 3 -2 8 -1 3 -8 5 -5 3 -2 2 -3 1 -3 0 -8 0 -10 3 -17 -3 -11 0 -5 3 -7 1 -4 6 -9 2 -3 5 -6 4 -6 3 -7 3 -2 6 -3 9 -7 10 -10 14 0 9 -1 4 0 4 -1 6 -4 5 -4 4 -7 6 -3 3 -3 6 -8 3 -3 4 0 3 2 5 1 4 -1 6 -4 3 -2 6 -4 4 -1 4 -1 3 0 3 2 4 5 3 1 2 3 4 2 4 0 4 -2 6 -3 2 -3 4 -6 1 -5 2 -3 1 -3 0 -5 2 -4 1 -4 4 -5 1 -5 0 -5 1 -3 2 -3 3 -13 12 -18 4 0 2 3 7 3 9 2 8 11 5 5 1 4 -2 8 -2 13 1 4 -1 5 -2 3 -5 5 -10 6 -3 7 -1 4 -1 5 3 7 2 8 2 4 1 4 0 3 -1 5 -5 6 -3 6 -1 35 -2 3 -4 1 -2 9 -2 2 -6 4 -3 2 -3 2 -2 3 -3 2 -7 3 -3 3 -6 3 -3 3 0 5 -2 2 -4 -1 -9 -2 -5 0 -4 1 -6 3 -3 3 -3 2 -4 11 -3 2 -15 2 -12 8 -5 0 -11 -4 -5 -1 -8 3 -10 4 -4 1 -3 2 -5 5 -5 10 -3 12 -3 3 -4 6 -2 3 -6 4 -2 8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M416 6407l2 -3 1 -4 13 -17 3 -7 0 -5 2 -4 1 -3 2 -3 5 -11 1 -4 -5 -11 -2 -12 -3 -7 -1 -4 0 -9 2 -12 4 -7 8 -12 8 -7 2 -3 2 -8 0 -4 -4 -4 -9 -7 -2 -2 0 -9 -2 -4 -7 -8 -2 -3 -1 -4 0 -5 2 -3 -1 -3 -4 -6 -10 -10 -7 -3 -4 -1 -5 0 -3 1 -7 4 -12 3 -8 -2 -8 -3 -5 0 -4 1 -4 -1 -4 -1 -5 -5 -3 -2 -3 2 -5 5 -7 4 -13 6 -7 9 -8 1 -3 3 -1 3 0 4 -2 4 -2 3 -8 7 -2 3 -3 7 -1 9 1 4 8 7 3 1 5 4 4 10 2 3 4 2 3 7 0 4 1 4 4 5 0 5 -1 5 2 3 3 6 6 5 1 4 4 6 4 6 2 3 1 8 2 14 0 4 7 8 12 14 2 3 0 3 1 4 1 4 0 5 1 19 2 2 2 3 1 4 -1 4 0 5 2 4 4 5 4 5 6 4 2 3 2 -1 4 -10 5 -5 3 -7 3 -3 6 -4 3 -2 4 -6 1 -3 2 -4 1 -10","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M2637 6761l3 -2 6 -4 3 -3 10 -9 3 -2 2 -3 5 -6 8 -11 3 -3 6 -4 5 -4 4 -6 10 -17 2 -2 6 -9 8 -7 18 -2 8 -1 10 -6 2 -2 9 -6 8 -2 10 -5 12 -3 7 -3 12 -3 13 -1 3 -1 9 -1 12 -2 4 -2 9 -6 3 -1 3 0 6 4 2 0 2 -3 3 -2 8 -7 4 -6 4 -7 2 -8 1 -4 5 -5 1 -9 0 -4 1 -5 1 -3 8 -8 1 -4 2 -8 2 -3 2 -9 5 -14 4 -7 4 -6 1 -3 5 -5 0 -5 -2 -4 -2 -7 -4 -6 -1 -4 2 -8 1 -4 -2 -9 0 -5 0 -4 2 -7 5 -6 4 -6 0 -5 6 -14 1 -3 1 -19 1 -8 1 -4 1 -10 -2 -8 0 -15 -1 -4 -3 -7 0 -4 -3 -18 2 -14 -3 -12 -1 -3 -2 -3 -5 -11 -11 -4 -2 -2 -1 -8 -3 -3 -4 -1 -7 -2 -7 3 -4 1 -5 0 -4 0 -7 3 -4 1 -5 5 -5 0 -4 6 -9 1 -3 2 -2 3 -3 2 -11 4 -2 3 -2 3 -1 9 2 13 -1 10 -2 3 -4 16 -4 7 -1 3 -1 4 1 18 -1 4 -7 8 -7 9 -1 3 -3 3 -4 6 -1 4 0 4 -6 9 -2 4 -2 3 -2 3 -2 8 -2 3 -2 8 -3 7 -9 11 -5 5 -4 6 -2 4 -5 4 -4 6 -1 4 -2 9 1 5 -1 4 -1 4 -1 4 -2 13 -2 3 -4 7 -2 8 -8 7 -5 5 -1 4 -3 12 -3 7 -2 9 2 18 -1 10 -3 12 -2 3 -10 11 -4 6 -11 13 -6 5 -3 2 -2 3 -7 3 -9 6 -3 2 -6 9 -3 2 -7 3 -19 11 -17 7 -3 2 -8 3 -9 6 -3 1 -17 4 -11 -4 -9 0 -5 -1 -3 -1 -5 0 -2 3 1 8 -4 6 -5 6 2 3 3 2 4 -1 4 -1 2 -2 9 -2 19 0 9 0 12 4 3 2 7 3 6 4 9 1 4 -1 13 3 9 1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M767 6789l4 -1 6 -4 4 -1 13 2 4 0 5 -1 3 -1 6 -5 4 1 4 -6 3 -3 6 -3 3 -3 1 -3 5 -6 7 -3 6 -8 3 -3 2 -3 1 -4 1 -9 1 -9 -2 -3 -4 -11 -2 -3 -8 -8 -6 -2 -8 -2 -2 -1 -7 -8 -5 -1 -11 -9 -9 -6 -3 -2 -17 -4 -5 0 -3 -2 -6 -4 -2 -2 -4 -2 -5 0 -16 11 -10 5 -3 2 -6 4 -2 2 -2 4 -1 4 0 5 -5 10 0 10 -1 4 -2 4 1 18 3 7 2 4 7 6 4 10 5 6 3 2 7 3 15 15 9 6 9 1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M1128 6811l6 -4 3 -3 4 -1 8 -2 8 1 4 -2 2 -2 10 -6 17 -7 9 -1 9 1 10 -1 3 -1 2 -4 5 -5 6 -9 4 -1 2 -3 5 -10 2 -3 8 -7 6 -9 6 -14 3 -3 5 -5 15 -9 2 -3 0 -4 1 -9 5 -16 0 -4 2 -8 5 -10 2 -9 10 -20 1 -4 5 -10 1 -4 5 -6 1 -3 2 -3 2 -2 4 -7 1 -4 -4 -7 -1 -13 0 -4 2 -11 1 -4 5 -5 7 -7 7 -3 3 -2 10 -5 6 -4 5 -10 8 -12 5 -5 3 -2 3 -2 3 -3 8 -12 5 -4 6 -4 7 -3 3 -2 4 -1 12 -8 14 -7 3 -1 12 -3 6 -4 3 -2 1 -5 1 -4 2 -3 0 -14 -1 -4 -2 -2 -3 -12 -1 -3 -4 0 -11 -3 -2 4 -5 5 -4 1 -9 6 -3 1 -9 1 -8 3 -4 -1 -4 -1 -14 -4 -4 -1 -5 1 -4 -1 -7 -3 -3 1 -6 4 -5 0 -7 -3 -4 0 -3 2 -1 4 -2 3 -2 3 -8 2 -7 8 -9 1 -8 -2 -3 2 -5 6 -6 3 -4 2 -4 6 -3 13 -3 6 -5 5 -4 2 -3 2 -2 3 -5 4 -2 3 -2 4 -5 5 -2 3 -1 4 -7 2 -6 5 -2 7 -3 2 -5 1 -4 -1 -8 -2 -5 1 -7 2 -6 5 -4 6 -2 3 -3 2 -18 2 -3 1 -19 -1 -4 -1 -15 0 -4 1 -3 1 -5 1 -3 2 -10 9 -9 -1 -13 0 -10 5 -5 1 -9 -1 -20 0 -11 -4 -3 -2 -3 -2 -5 0 -9 1 -6 4 -3 2 -6 4 -4 1 -4 1 -7 3 -8 1 -3 2 -2 3 -1 2 4 6 2 3 4 6 3 2 7 3 2 3 1 3 6 10 2 3 9 16 3 7 2 3 4 16 -1 14 2 8 1 3 6 6 1 3 3 2 3 2 6 4 5 5 3 17 4 6 2 3 1 3 4 5 6 5 7 8 9 14 8 8 2 3 1 4 0 9 2 4 3 2 4 1 3 2 2 3 3 5 2 4 -2 13 1 4 2 3 5 5 3 2 4 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M1833 6995l4 -1 3 -2 6 -8 1 -4 3 -3 10 -4 6 -4 4 -1 4 -1 7 -3 4 0 3 -2 6 -3 9 -2 16 -3 4 -2 8 -7 5 -10 1 -4 3 -6 6 -5 3 -2 2 -3 2 -3 5 -5 9 -6 2 -3 1 -4 -2 -3 -5 -5 -5 -6 -1 -3 -1 -5 2 -7 3 -7 2 -3 2 -3 8 -1 1 -4 -5 -4 -1 -7 -1 -3 -3 -7 -1 -4 0 -5 2 -3 5 -11 1 -7 0 -4 -3 -2 -5 -5 -3 -2 -4 -2 -6 -4 -4 -6 -1 -3 -2 -8 -1 -5 1 -5 -1 -4 0 -4 2 -3 2 -8 0 -5 -1 -3 -8 -8 -1 -4 0 -5 2 -8 1 -4 10 -11 1 -4 -2 -3 -5 -5 -3 -2 -4 6 -10 0 -3 2 0 4 4 6 2 4 -1 5 -1 3 -2 3 -4 1 -5 0 -7 4 -4 0 -4 0 -7 -3 -9 -7 -4 -1 -4 1 -4 -1 -6 -4 -3 0 -6 5 -5 0 -3 -1 -4 -1 -13 2 -14 -1 -5 -1 -3 -2 -5 0 -10 -5 -6 -5 -3 -1 -9 1 -5 0 -8 -2 -14 -2 0 5 2 3 3 6 1 5 -1 4 -2 8 -1 5 1 4 -2 2 -4 7 2 8 0 5 -1 5 -1 3 -2 3 -4 1 -2 3 -1 4 -2 3 -2 3 -3 2 -3 2 -3 2 -9 1 -4 7 -4 5 -5 5 -3 2 -4 1 -10 1 -4 0 -2 3 -2 4 1 14 -3 13 0 4 1 4 0 4 1 5 0 3 -4 12 1 3 10 16 1 8 2 8 5 5 6 18 2 3 4 2 3 1 7 3 8 8 4 6 5 5 11 9 2 3 2 3 10 5 12 13 2 2 5 0 29 2 7 2 4 1 9 7 7 2","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str8","@d":"M277 7053l7 -2 2 -2 -1 -3 1 -4 2 -3 1 -4 0 -8 0 -4 2 -4 2 -2 2 -3 2 -3 2 -2 4 -6 6 -4 6 -2 1 -3 1 -15 1 -3 4 -6 1 -5 0 -4 1 -4 2 -3 3 -3 3 -2 11 -9 1 -3 1 -9 -1 -3 -1 -3 -3 -3 -1 -4 -5 -10 -5 -4 -14 -1 -4 1 -2 3 -4 6 -4 1 -5 0 -4 1 -5 5 -3 2 -9 0 -4 1 -3 2 -2 4 4 1 1 3 0 5 -9 5 -4 2 -8 7 -5 11 -2 2 -4 2 -9 2 -4 1 -5 -1 -6 -4 -5 0 -9 1 -5 -1 -3 -1 -9 -7 -4 -1 -7 3 -9 5 -5 6 -2 8 0 4 1 4 4 10 3 8 2 2 4 2 14 1 8 3 8 2 10 0 7 3 5 0 10 0 3 1 3 2 2 3 12 19 2 2 2 3 9 7 3 2 8 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil15 str11","@d":"M2977 6617l0 -283 -283 0 0 283 283 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@d":"M2901 6617l0 -206 -207 0 0 206 207 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil7 str16","@d":"M85 7121l0 -1443 3150 0 0 1443 -3150 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str16","@d":"M271 6790l0 -8 1 -37 0 -36 1 -37 0 -37 1 -36 1 -37 0 -36 1 -37 0 -36 1 -37 1 -36 0 -37 1 -37 0 -36 1 -37 1 -36 0 -37 1 -36 0 -37 1 -36 1 -37 0 -37 1 -36 0 -37 1 -36 1 -37 0 -36 1 -37 0 -37 1 -36 0 -7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str16","@d":"M85 6786l27 1 33 0 32 1 32 1 33 0 29 1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str16","@d":"M2852 6790l18 -1 32 0 33 -1 32 0 33 -1 32 -1 33 0 32 -1 32 0 33 -1 32 -1 33 0 8 -1","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str16","@d":"M2852 6790l0 -8 -1 -37 0 -36 -1 -37 0 -37 -1 -36 -1 -37 0 -36 -1 -37 0 -36 -1 -37 -1 -36 0 -37 -1 -37 0 -36 -1 -37 -1 -36 0 -37 -1 -36 0 -37 -1 -36 -1 -37 0 -37 -1 -36 0 -37 -1 -36 -1 -37 0 -36 -1 -37 0 -37 -1 -36 0 -7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str16","@d":"M1561 6800l11 0 33 0 32 0 32 0 33 0 32 0 33 0 32 0 33 0 32 0 33 0 32 -1 32 0 33 0 32 0 33 0 32 -1 33 0 32 0 33 0 32 -1 32 0 33 0 32 0 33 -1 32 0 33 0 32 -1 33 0 32 -1 32 0 33 0 32 -1 33 0 32 -1 33 0 32 -1 33 0 32 -1 32 0 15 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str16","@d":"M1561 6800l0 -8 0 -36 0 -37 0 -36 0 -37 0 -37 0 -36 0 -37 0 -36 0 -37 0 -36 0 -37 0 -36 0 -37 0 -37 0 -36 0 -37 0 -36 0 -37 0 -36 0 -37 0 -37 0 -36 0 -37 0 -36 0 -37 0 -36 0 -37 0 -37 0 -36 0 -37 0 -17","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str16","@d":"M271 6790l3 0 33 0 32 1 33 0 32 1 33 0 32 1 32 0 33 1 32 0 33 0 32 1 33 0 32 0 33 1 32 0 32 0 33 1 32 0 33 0 32 1 33 0 32 0 33 0 32 1 32 0 33 0 32 0 33 0 32 0 33 1 32 0 33 0 32 0 32 0 33 0 32 0 33 0 32 0 33 0 21 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str16","@d":"M1561 7121l0 -36 0 -37 0 -36 0 -37 0 -37 0 -36 0 -37 0 -36 0 -29","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str16","@d":"M2857 7121l0 -10 0 -37 -1 -37 0 -36 -1 -37 -1 -36 0 -37 -1 -36 0 -37 -1 -28","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str16","@d":"M265 7121l1 -10 0 -37 1 -37 0 -36 1 -37 1 -36 0 -37 1 -36 0 -37 1 -28","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil15 str11","@d":"M1248 6705l0 -273 -276 0 0 273 276 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil17 str11","@d":"M1145 6705l0 -173 -173 0 0 173 173 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"switch":{"text":[{"textPath":{"$":"Kanarische Inseln","@xlink:href":"#textPathCanary","@startOffset":"5%","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@systemLanguage":"de","@class":"fil8 fnt9","@style":"letter-spacing:40px;","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"textPath":{"$":"Canary Islands","@xlink:href":"#textPathCanary","@startOffset":"5%","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@systemLanguage":"en","@class":"fil8 fnt9","@style":"letter-spacing:60px;","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"text":[{"$":"Teneriffa","@x":"1221","@y":"6344","@class":"fil8 fnt7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Gran Canaria","@x":"1893","@y":"7067","@class":"fil8 fnt7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@id":"islands","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"switch":[{"g":[{"text":[{"$":"Spanien - Bev\u00f6lkerung","@x":"-5481","@y":"166","@class":"fil8 fnt10","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"1970 - 1990","@x":"3500","@y":"157","@class":"fil8 fnt10","@style":"text-anchor:end;","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Erstellt v. Andreas Neumann im Rahmen d. Kartenentwurfspraktikums, Sommersemester 1998,","@x":"-5483","@y":"7499","@class":"fil8 fnt8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"geleitet v. Prof. Ingrid Kretschmer, Institut f\u00fcr Geographie der Universit\u00e4t Wien.","@x":"-5483","@y":"7583","@class":"fil8 fnt8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Verwendete Software: Arc\/Info und Module, CorelDRAW und div. Perl-Scripts.","@x":"-5483","@y":"7666","@class":"fil8 fnt8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Bev\u00f6lkerungsdichte","@x":"3665","@y":"363","@class":"fil8 fnt11","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Bev\u00f6lkerungsver\u00e4nderung","@x":"3665","@y":"4063","@class":"fil8 fnt11","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Bev\u00f6lkerung absolut","@x":"3665","@y":"1815","@class":"fil8 fnt11","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Einwohner\/km\u00b2 auf Provinzebene","@x":"3665","@y":"510","@class":"fil8 fnt7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Prozentuelle Ver\u00e4nderung der","@x":"3665","@y":"4210","@class":"fil8 fnt7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Provinzen gegen\u00fcber Stand 1970","@x":"3665","@y":"4344","@class":"fil8 fnt7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Prozentuelle Ver\u00e4nderung der","@x":"3665","@y":"5750","@class":"fil8 fnt7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Hauptst\u00e4dte gegen\u00fcber Stand 1970","@x":"3665","@y":"5884","@class":"fil8 fnt7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Auf Provinzebene und in den","@x":"3665","@y":"1962","@class":"fil8 fnt7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Hauptst\u00e4dten (inneres Quadrat)","@x":"3665","@y":"2096","@class":"fil8 fnt7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@systemLanguage":"de","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":[{"$":"Spain - Population","@x":"-5481","@y":"166","@class":"fil8 fnt10","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"1970 - 1990","@x":"3500","@y":"157","@class":"fil8 fnt10","@style":"text-anchor:end;","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Created by Andreas Neumann for the map design course, summer semester 1998,","@x":"-5483","@y":"7499","@class":"fil8 fnt8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"led by Prof. Ingrid Kretschmer, Geography Institute of Vienna University.","@x":"-5483","@y":"7583","@class":"fil8 fnt8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Used software: Arc\/Info and Modules, CorelDRAW and various Perl scripts.","@x":"-5483","@y":"7666","@class":"fil8 fnt8","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Population density","@x":"3665","@y":"363","@class":"fil8 fnt11","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Population change","@x":"3665","@y":"4063","@class":"fil8 fnt11","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Population absolute","@x":"3665","@y":"1815","@class":"fil8 fnt11","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Inhab. per km\u00b2 at province level","@x":"3665","@y":"510","@class":"fil8 fnt7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Percentual change of the","@x":"3665","@y":"4210","@class":"fil8 fnt7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"province vs situation 1970","@x":"3665","@y":"4344","@class":"fil8 fnt7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Percentual change of the","@x":"3665","@y":"5750","@class":"fil8 fnt7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"capitals vs situation 1970","@x":"3665","@y":"5884","@class":"fil8 fnt7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"At provincial level and in the","@x":"3665","@y":"1962","@class":"fil8 fnt7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"capitals (inner square)","@x":"3665","@y":"2096","@class":"fil8 fnt7","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@systemLanguage":"en","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":[{"$":"Angaben in tausend","@x":"4151","@y":"3193","@class":"fil8 fnt41","@systemLanguage":"de","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Indications in thousands","@x":"4151","@y":"3193","@class":"fil8 fnt41","@systemLanguage":"en","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":[{"$":"Massstab 1 : 6.000.000","@x":"-1325","@y":"7682","@class":"fil8 fnt41","@systemLanguage":"de","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Scale 1 : 6.000.000","@x":"-1325","@y":"7682","@class":"fil8 fnt41","@systemLanguage":"en","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":[{"$":"Quelle: Spanisches Statistisches Zentralamt","@x":"3665","@y":"7280","@class":"fil8 fnt41","@systemLanguage":"de","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Source: Spanish Central Office for Statistics","@x":"3665","@y":"7280","@class":"fil8 fnt41","@systemLanguage":"en","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":[{"$":"Minimum (Provinz): Soria - 97.268","@x":"3665","@y":"3331","@class":"fil8 fnt41","@systemLanguage":"de","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Minimum (Province): Soria - 97.268","@x":"3665","@y":"3331","@class":"fil8 fnt41","@systemLanguage":"en","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":[{"$":"Maximum (Provinz): Madrid - 5.028.120","@x":"3665","@y":"3432","@class":"fil8 fnt41","@systemLanguage":"de","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Maximum (Province): Madrid - 5.028.120","@x":"3665","@y":"3432","@class":"fil8 fnt41","@systemLanguage":"en","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":[{"$":"Minimum (Hauptstadt): Teruel - 28.488","@x":"3665","@y":"3532","@class":"fil8 fnt41","@systemLanguage":"de","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Minimum (capital): Teruel - 28.488","@x":"3665","@y":"3532","@class":"fil8 fnt41","@systemLanguage":"en","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":[{"$":"Maximum (Hauptstadt): Madrid - 3.120.732","@x":"3665","@y":"3633","@class":"fil8 fnt41","@systemLanguage":"de","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Maximum (capital): Madrid - 3.120.732","@x":"3665","@y":"3633","@class":"fil8 fnt41","@systemLanguage":"en","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":[{"$":"Stand 1990","@x":"4779","@y":"1362","@class":"fil8 fnt41","@systemLanguage":"de","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Situation 1990","@x":"4779","@y":"1362","@class":"fil8 fnt41","@systemLanguage":"en","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"text":[{"$":"Stand 1990","@x":"5063","@y":"3022","@class":"fil8 fnt41","@systemLanguage":"de","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Sit. 1990","@x":"5063","@y":"3022","@class":"fil8 fnt41","@systemLanguage":"en","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"g":[{"path":[{"@class":"fil0 str11","@d":"M3665 634l196 0 0 98 -196 0 0 -98z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str11","@d":"M3665 634l196 0 0 98 -196 0 0 -98z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil1 str11","@d":"M3665 791l196 0 0 99 -196 0 0 -99z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str11","@d":"M3665 791l196 0 0 99 -196 0 0 -99z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil2 str11","@d":"M3665 949l196 0 0 98 -196 0 0 -98z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str11","@d":"M3665 949l196 0 0 98 -196 0 0 -98z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil3 str11","@d":"M3665 1106l196 0 0 99 -196 0 0 -99z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str11","@d":"M3665 1106l196 0 0 99 -196 0 0 -99z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"path":[{"@class":"fil4 str11","@d":"M3665 1264l196 0 0 98 -196 0 0 -98z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str11","@d":"M3665 1264l196 0 0 98 -196 0 0 -98z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"rect":{"@class":"fil7 str11","@x":"-2090","@y":"7529","@width":"2295","@height":"39","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"path":[{"@class":"fil7 str11","@d":"M-2090 7568l0 -48","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str11","@d":"M-2024 7568l0 -40","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str11","@d":"M-1959 7568l0 -40","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str11","@d":"M-1893 7568l0 -40","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str11","@d":"M-1827 7568l0 -40","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str11","@d":"M-1762 7568l0 -48","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str11","@d":"M-1434 7568l0 -40","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str11","@d":"M-1106 7568l0 -48","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str11","@d":"M-778 7568l0 -40","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str11","@d":"M-450 7568l0 -48","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str11","@d":"M-121 7568l0 -40","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str11","@d":"M206 7567l0 -47","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str11","@d":"M-1434 7547l328 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str11","@d":"M-1828 7547l66 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str11","@d":"M-1959 7547l65 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str11","@d":"M-2090 7547l65 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str11","@d":"M-778 7547l328 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str11","@d":"M-122 7547l328 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"text":[{"$":"0","@x":"-1783","@y":"7500","@class":"fil8 fnt42","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"100","@x":"-1167","@y":"7500","@class":"fil8 fnt42","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"200","@x":"-511","@y":"7500","@class":"fil8 fnt42","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"300 km","@x":"146","@y":"7500","@class":"fil8 fnt42","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"50","@x":"-2131","@y":"7500","@class":"fil8 fnt42","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"rect":[{"@class":"fil16 str11","@x":"3665","@y":"4473","@width":"197","@height":"98","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil10 str11","@x":"3665","@y":"6014","@width":"197","@height":"98","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil13 str11","@x":"3665","@y":"4631","@width":"197","@height":"98","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil12 str11","@x":"3665","@y":"6172","@width":"197","@height":"98","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil10 str11","@x":"3665","@y":"4788","@width":"197","@height":"98","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil14 str11","@x":"3665","@y":"6329","@width":"197","@height":"98","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil11 str11","@x":"3665","@y":"4946","@width":"197","@height":"98","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil17 str11","@x":"3665","@y":"6487","@width":"197","@height":"98","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil15 str11","@x":"3665","@y":"5103","@width":"197","@height":"98","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil15 str11","@x":"3665","@y":"6644","@width":"197","@height":"98","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"text":[{"$":"<","@x":"4250","@y":"723","@class":"fil8 fnt12","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":" 25","@x":"4304","@y":"723","@class":"fil8 fnt13","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"<","@x":"4338","@y":"4563","@class":"fil8 fnt14","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":" 85 %","@x":"4392","@y":"4563","@class":"fil8 fnt15","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"<","@x":"4338","@y":"6104","@class":"fil8 fnt16","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":" 115 %","@x":"4392","@y":"6104","@class":"fil8 fnt17","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"25 ","@x":"4111","@y":"881","@class":"fil8 fnt17","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":" 45","@x":"4304","@y":"881","@class":"fil8 fnt17","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"<","@x":"4250","@y":"881","@class":"fil8 fnt18","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"85 % ","@x":"4086","@y":"4720","@class":"fil8 fnt19","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":" 100 %","@x":"4392","@y":"4720","@class":"fil8 fnt19","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"<","@x":"4338","@y":"4720","@class":"fil8 fnt20","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"115 % ","@x":"4030","@y":"6261","@class":"fil8 fnt21","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":" 130 %","@x":"4392","@y":"6261","@class":"fil8 fnt21","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"<","@x":"4338","@y":"6261","@class":"fil8 fnt22","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"45 ","@x":"4111","@y":"1038","@class":"fil8 fnt23","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":" 75","@x":"4304","@y":"1038","@class":"fil8 fnt23","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"<","@x":"4250","@y":"1038","@class":"fil8 fnt24","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"100 % ","@x":"4030","@y":"4878","@class":"fil8 fnt25","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":" 115 %","@x":"4392","@y":"4878","@class":"fil8 fnt25","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"<","@x":"4338","@y":"4878","@class":"fil8 fnt26","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"130 % ","@x":"4030","@y":"6417","@class":"fil8 fnt27","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":" 145 %","@x":"4391","@y":"6417","@class":"fil8 fnt27","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"<","@x":"4337","@y":"6417","@class":"fil8 fnt28","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"75 ","@x":"4111","@y":"1196","@class":"fil8 fnt29","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":" 150","@x":"4304","@y":"1196","@class":"fil8 fnt29","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"<","@x":"4251","@y":"1196","@class":"fil8 fnt30","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"115 % ","@x":"4030","@y":"5035","@class":"fil8 fnt31","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":" 130 %","@x":"4392","@y":"5035","@class":"fil8 fnt31","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"<","@x":"4338","@y":"5035","@class":"fil8 fnt32","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"145 % ","@x":"4030","@y":"6576","@class":"fil8 fnt33","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":" 160 %","@x":"4392","@y":"6576","@class":"fil8 fnt33","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"<","@x":"4338","@y":"6576","@class":"fil8 fnt34","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"150 ","@x":"4054","@y":"1353","@class":"fil8 fnt35","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"<","@x":"4249","@y":"1353","@class":"fil8 fnt36","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"130 % ","@x":"4035","@y":"5193","@class":"fil8 fnt37","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"<","@x":"4343","@y":"5193","@class":"fil8 fnt38","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"160 % ","@x":"4035","@y":"6734","@class":"fil8 fnt39","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"<","@x":"4343","@y":"6734","@class":"fil8 fnt40","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"5.000","@x":"4712","@y":"2359","@class":"fil8 fnt41","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"1.000","@x":"4709","@y":"2484","@class":"fil8 fnt41","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"500","@x":"4769","@y":"2608","@class":"fil8 fnt41","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"200","@x":"4770","@y":"2733","@class":"fil8 fnt41","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"100","@x":"4770","@y":"2857","@class":"fil8 fnt41","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"50","@x":"4809","@y":"2982","@class":"fil8 fnt41","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Min.: Soria - 9,46, Max.: Madrid - 628,91","@x":"3665","@y":"1543","@class":"fil8 fnt41","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Minimum: Soria - 84,61 %,","@x":"3665","@y":"5400","@class":"fil8 fnt41","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Maximum: Las Palmas - 141,24 %","@x":"3665","@y":"5500","@class":"fil8 fnt41","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Minimum: Vizcaya - 93,50 %,","@x":"3665","@y":"6939","@class":"fil8 fnt41","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"$":"Maximum: Guadalajara - 199,18 %","@x":"3665","@y":"7040","@class":"fil8 fnt41","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"path":[{"@class":"fil7 str17","@d":"M4451 3032l0 -783 -786 0 0 783 786 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str17","@d":"M4022 3032l0 -357 -357 0 0 357 357 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str17","@d":"M3928 3032l0 -263 -263 0 0 263 263 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str17","@d":"M3851 3032l0 -184 -186 0 0 184 186 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str17","@d":"M3812 3032l0 -143 -147 0 0 143 147 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str17","@d":"M3778 3032l0 -114 -113 0 0 114 113 0z","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str18","@d":"M4680 2334l-232 0","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str18","@d":"M4680 2460l-331 0 -327 277","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str18","@d":"M4738 2576l-389 0 -424 263","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str18","@d":"M4738 2706l-389 0 -498 209","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str18","@d":"M4738 2832l-389 0 -536 137","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},{"@class":"fil7 str18","@d":"M4779 2952l-430 0 -570 51","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@id":"text_legend","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}],"@xml:space":"preserve","@x":"25","@y":"25","@width":"550","@height":"382.36","@style":"shape-rendering:geometricPrecision; text-rendering:auto; image-rendering:optimizeSpeed","@viewBox":"-5483 0 11053 7684","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}},"@viewBox":"0 0 600 420","@width":"600","@height":"420","@xmlns":{"xlink":"http:\/\/www.w3.org\/1999\/xlink","$":"http:\/\/www.w3.org\/2000\/svg"}}} diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.ns-invoice100.xml.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.ns-invoice100.xml.json deleted file mode 100644 index 0743265..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.ns-invoice100.xml.json +++ /dev/null @@ -1 +0,0 @@ -{"ns1:invoice":{"Header":{"IssueDateTime":{"$":"2003-03-13T13:13:32-08:00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Identifier":{"$":"15570720","@schemeAgencyName":"ISO","@schemeName":"Invoice","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"POIdentifier":{"$":"691","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"BuyerParty":{"PartyID":{"$":"1","@schemeName":"SpiderMarkExpress","@schemeAgencyName":"SUNW","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Name":{"$":"IDES Retail INC US","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Address":{"Street":{"$":"Hill St.","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"HouseID":{"$":"5555","@schemeName":"HouseID","@schemeAgencyName":"house","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"RoomID":{"$":"Suite 3","@schemeName":"RoomID","@schemeAgencyName":"room","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"CityName":{"$":"Boston","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PostalZoneID":{"$":"01234","@schemeName":"Zipcode","@schemeAgencyName":"USPS","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"StateName":{"$":"MA","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"CountryIdentificationCode":{"$":"US","@listAgencyId":"ISO","@listId":"3166","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Contact":{"Name":{"$":"Joe Buyer","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Communication":[{"Value":{"$":"313-555-1212","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ChannelID":{"$":"phone","@schemeName":"SpiderMarkExpress","@schemeAgencyName":"SUNW","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"Value":{"$":"313-555-1213","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ChannelID":{"$":"fax","@schemeName":"SpiderMarkExpress","@schemeAgencyName":"SUNW","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}}],"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"SellerParty":{"PartyID":{"$":"10","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Name":{"$":"1YvMdIkxZRXszgQfmoKqkit","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Address":{"Street":{"$":"ZNk","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"HouseID":{"$":"1234","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"RoomID":{"$":"Ste 301","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"CityName":{"$":"tzFMMtlE1lxdag","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PostalZoneID":{"$":"992292786","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"StateName":{"$":"FL","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"CountryIdentificationCode":{"$":"SY","@listAgencyId":"ISO","@listId":"3166","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Contact":{"Name":{"$":"jjzxxgwwqgwqjf","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Communication":[{"Value":{"$":"jjzxxgwwqgwqjf@1YvMdIkxZRXszgQfmoKqkit.com","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ChannelID":{"$":"email","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"Value":{"$":"9433593740064593","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ChannelID":{"$":"phone","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"Value":{"$":"38667976759785","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ChannelID":{"$":"fax","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}}],"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Shipment":{"ShipDate":{"$":"2003-03-13T13:13:32-08:00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TransportModeID":{"$":"sea","@schemeAgencyName":"ISO","@schemeName":"TransportMode","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"CarrierID":{"$":"UPS","@schemeAgencyName":"ISO","@schemeName":"Carrier","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PaymentMeans":{"PaymentDate":{"$":"2003-04-13","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PayeeFinancialAccount":{"Identifier":{"$":"312098283","@schemeAgencyName":"ISO","@schemeName":"Account","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"FinancialInstitution":{"Identifier":{"$":"33747420","@schemeAgencyName":"UN","@schemeName":"Financial Institution","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Name":{"$":"Caaco","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Address":{"Street":{"$":"H9LHLljO Street","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"HouseID":{"$":"15","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"CityName":{"$":"Yigmnvii","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PostalZoneID":{"$":"48839","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"StateName":{"$":"CT","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"CountryIdentificationCode":{"$":"US","@listAgencyId":"ISO","@listId":"3166","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TypeID":{"$":"vozbix","@schemeAgencyName":"ISO","@schemeName":"Account Type","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"AccountName":{"$":"Adrvgrri","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"LineItem":[{"LineID":{"$":"0","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"1","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"2","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"3","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"4","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"5","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"6","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"7","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"8","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"9","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"10","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"11","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"12","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"13","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"14","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"15","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"16","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"17","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"18","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"19","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"21","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"22","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"23","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"24","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"25","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"26","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"27","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"28","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"29","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"30","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"31","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"32","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"33","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"34","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"35","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"36","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"37","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"38","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"39","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"40","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"41","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"42","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"43","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"44","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"45","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"46","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"47","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"48","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"49","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"50","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"51","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"52","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"53","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"54","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"55","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"56","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"57","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"58","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"59","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"60","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"61","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"62","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"63","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"64","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"65","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"66","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"67","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"68","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"69","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"70","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"71","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"72","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"73","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"74","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"75","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"76","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"77","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"78","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"79","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"80","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"81","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"82","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"83","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"84","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"85","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"86","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"87","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"88","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"89","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"90","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"91","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"92","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"93","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"94","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"95","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"96","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"97","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"98","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},{"LineID":{"$":"99","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Item":{"StandardItemIdentifier":{"$":"20","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Description":{"$":"vZCwLwz1AGtbQT7t0diKccyB0rm0DXS5JFUWZyFcDFW7t","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Quantity":{"$":"10","@unitCode":"number","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"OrderStatus":{"$":"FULFILLED","@listId":"OrderStatus","@listAgencyId":"Sun","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Pricing":{"GrossUnitPriceAmount":{"$":"437.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"NetUnitPriceAmount":{"$":"367.08","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"discount","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"allowance","@schemeName":"Generic","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"Rate":{"$":"16.00","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"TotalAmount":{"$":"3670.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}}],"Summary":{"LineItemCountValue":{"$":"2","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"SubtotalAmount":{"$":"18215.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PricingVariation":{"ServiceID":{"$":"shipping and handling","@schemeName":"Variations","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"ConditionID":{"$":"charge","@schemeName":"Conditions","@schemeAgencyName":"ISO","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"LumpSumAmount":{"$":"7.00","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PriceAmount":{"$":"18222.80","@currencyId":"USD","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"PackingSlipIdentifier":{"$":"156263","@schemeAgencyName":"ISO","@schemeName":"Packing Slip","@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}},"@xmlns":{"ns1":"http:\/\/www.sun.com\/schema\/spidermarkexpress\/sm-inv"}}} diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.ns-soap.xml.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.ns-soap.xml.json deleted file mode 100644 index 63973a2..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.ns-soap.xml.json +++ /dev/null @@ -1 +0,0 @@ -{"soapenv:Envelope":{"soapenv:Body":{"ns1:reverseResponse":{"reverseReturn":{"@href":"#id0","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns1":"urn:axis.sosnoski.com"}},"@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns1":"urn:axis.sosnoski.com"}},"multiRef":[{"routes":{"item":[{"@href":"#id1","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id2","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id3","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id4","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id5","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id6","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id7","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id8","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id9","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id10","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id11","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id12","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id13","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id14","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id15","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id16","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id17","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id18","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id19","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id20","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id21","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id22","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id23","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id24","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id25","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id26","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id27","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id28","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id29","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id30","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id31","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id32","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id33","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id34","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id35","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id36","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id37","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id38","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id39","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id40","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id41","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id42","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id43","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id44","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id45","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id46","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id47","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id48","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id49","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id50","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id51","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id52","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id53","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id54","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id55","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},{"@href":"#id56","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns2:RouteBean[56]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns3":"urn:axis.sosnoski.com"}},"airports":{"item":[{"@href":"#id57","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns4":"urn:axis.sosnoski.com"}},{"@href":"#id58","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns4":"urn:axis.sosnoski.com"}},{"@href":"#id59","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns4":"urn:axis.sosnoski.com"}},{"@href":"#id60","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns4":"urn:axis.sosnoski.com"}},{"@href":"#id61","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns4":"urn:axis.sosnoski.com"}},{"@href":"#id62","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns4":"urn:axis.sosnoski.com"}},{"@href":"#id63","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns4":"urn:axis.sosnoski.com"}},{"@href":"#id64","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns4":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns2:AirportBean[8]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns4":"urn:axis.sosnoski.com"}},"carriers":{"item":[{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns5":"urn:axis.sosnoski.com"}},{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns5":"urn:axis.sosnoski.com"}},{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns5":"urn:axis.sosnoski.com"}},{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns5":"urn:axis.sosnoski.com"}},{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns5":"urn:axis.sosnoski.com"}},{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns5":"urn:axis.sosnoski.com"}},{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns5":"urn:axis.sosnoski.com"}},{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns5":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns2:CarrierBean[8]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns5":"urn:axis.sosnoski.com"}},"@id":"id0","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns2:TimeTableBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","ns2":"http:\/\/flightsraw","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/"}},{"flights":{"item":[{"@href":"#id73","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns6":"http:\/\/flightsraw","ns7":"urn:axis.sosnoski.com"}},{"@href":"#id74","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns6":"http:\/\/flightsraw","ns7":"urn:axis.sosnoski.com"}},{"@href":"#id75","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns6":"http:\/\/flightsraw","ns7":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns6:FlightBean[3]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns6":"http:\/\/flightsraw","ns7":"urn:axis.sosnoski.com"}},"from":{"@href":"#id61","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns6":"http:\/\/flightsraw"}},"to":{"@href":"#id64","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns6":"http:\/\/flightsraw"}},"@id":"id49","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns6:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns6":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id76","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns8":"http:\/\/flightsraw","ns9":"urn:axis.sosnoski.com"}},{"@href":"#id77","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns8":"http:\/\/flightsraw","ns9":"urn:axis.sosnoski.com"}},{"@href":"#id78","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns8":"http:\/\/flightsraw","ns9":"urn:axis.sosnoski.com"}},{"@href":"#id79","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns8":"http:\/\/flightsraw","ns9":"urn:axis.sosnoski.com"}},{"@href":"#id80","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns8":"http:\/\/flightsraw","ns9":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns8:FlightBean[5]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns8":"http:\/\/flightsraw","ns9":"urn:axis.sosnoski.com"}},"from":{"@href":"#id60","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns8":"http:\/\/flightsraw"}},"to":{"@href":"#id59","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns8":"http:\/\/flightsraw"}},"@id":"id28","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns8:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns8":"http:\/\/flightsraw"}},{"location":{"$":"Chicago, IL","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns10":"http:\/\/flightsraw"}},"name":{"$":"O'Hare International Airport","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns10":"http:\/\/flightsraw"}},"ident":{"$":"ORD","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns10":"http:\/\/flightsraw"}},"@id":"id61","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns10:AirportBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns10":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id81","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns11":"http:\/\/flightsraw","ns12":"urn:axis.sosnoski.com"}},{"@href":"#id82","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns11":"http:\/\/flightsraw","ns12":"urn:axis.sosnoski.com"}},{"@href":"#id83","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns11":"http:\/\/flightsraw","ns12":"urn:axis.sosnoski.com"}},{"@href":"#id84","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns11":"http:\/\/flightsraw","ns12":"urn:axis.sosnoski.com"}},{"@href":"#id85","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns11":"http:\/\/flightsraw","ns12":"urn:axis.sosnoski.com"}},{"@href":"#id86","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns11":"http:\/\/flightsraw","ns12":"urn:axis.sosnoski.com"}},{"@href":"#id87","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns11":"http:\/\/flightsraw","ns12":"urn:axis.sosnoski.com"}},{"@href":"#id88","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns11":"http:\/\/flightsraw","ns12":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns11:FlightBean[8]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns11":"http:\/\/flightsraw","ns12":"urn:axis.sosnoski.com"}},"from":{"@href":"#id60","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns11":"http:\/\/flightsraw"}},"to":{"@href":"#id61","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns11":"http:\/\/flightsraw"}},"@id":"id37","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns11:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns11":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id89","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns13":"http:\/\/flightsraw","ns14":"urn:axis.sosnoski.com"}},{"@href":"#id90","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns13":"http:\/\/flightsraw","ns14":"urn:axis.sosnoski.com"}},{"@href":"#id91","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns13":"http:\/\/flightsraw","ns14":"urn:axis.sosnoski.com"}},{"@href":"#id92","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns13":"http:\/\/flightsraw","ns14":"urn:axis.sosnoski.com"}},{"@href":"#id93","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns13":"http:\/\/flightsraw","ns14":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns13:FlightBean[5]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns13":"http:\/\/flightsraw","ns14":"urn:axis.sosnoski.com"}},"from":{"@href":"#id63","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns13":"http:\/\/flightsraw"}},"to":{"@href":"#id60","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns13":"http:\/\/flightsraw"}},"@id":"id42","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns13:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns13":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id94","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns15":"http:\/\/flightsraw","ns16":"urn:axis.sosnoski.com"}},{"@href":"#id95","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns15":"http:\/\/flightsraw","ns16":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns15:FlightBean[2]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns15":"http:\/\/flightsraw","ns16":"urn:axis.sosnoski.com"}},"from":{"@href":"#id61","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns15":"http:\/\/flightsraw"}},"to":{"@href":"#id59","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns15":"http:\/\/flightsraw"}},"@id":"id30","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns15:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns15":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id96","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns17":"http:\/\/flightsraw","ns18":"urn:axis.sosnoski.com"}},{"@href":"#id97","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns17":"http:\/\/flightsraw","ns18":"urn:axis.sosnoski.com"}},{"@href":"#id98","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns17":"http:\/\/flightsraw","ns18":"urn:axis.sosnoski.com"}},{"@href":"#id99","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns17":"http:\/\/flightsraw","ns18":"urn:axis.sosnoski.com"}},{"@href":"#id100","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns17":"http:\/\/flightsraw","ns18":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns17:FlightBean[5]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns17":"http:\/\/flightsraw","ns18":"urn:axis.sosnoski.com"}},"from":{"@href":"#id58","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns17":"http:\/\/flightsraw"}},"to":{"@href":"#id61","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns17":"http:\/\/flightsraw"}},"@id":"id19","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns17:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns17":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id101","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns19":"http:\/\/flightsraw","ns20":"urn:axis.sosnoski.com"}},{"@href":"#id102","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns19":"http:\/\/flightsraw","ns20":"urn:axis.sosnoski.com"}},{"@href":"#id103","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns19":"http:\/\/flightsraw","ns20":"urn:axis.sosnoski.com"}},{"@href":"#id104","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns19":"http:\/\/flightsraw","ns20":"urn:axis.sosnoski.com"}},{"@href":"#id105","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns19":"http:\/\/flightsraw","ns20":"urn:axis.sosnoski.com"}},{"@href":"#id106","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns19":"http:\/\/flightsraw","ns20":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns19:FlightBean[6]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns19":"http:\/\/flightsraw","ns20":"urn:axis.sosnoski.com"}},"from":{"@href":"#id64","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns19":"http:\/\/flightsraw"}},"to":{"@href":"#id62","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns19":"http:\/\/flightsraw"}},"@id":"id54","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns19:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns19":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id107","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns21":"http:\/\/flightsraw","ns22":"urn:axis.sosnoski.com"}},{"@href":"#id108","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns21":"http:\/\/flightsraw","ns22":"urn:axis.sosnoski.com"}},{"@href":"#id109","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns21":"http:\/\/flightsraw","ns22":"urn:axis.sosnoski.com"}},{"@href":"#id110","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns21":"http:\/\/flightsraw","ns22":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns21:FlightBean[4]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns21":"http:\/\/flightsraw","ns22":"urn:axis.sosnoski.com"}},"from":{"@href":"#id59","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns21":"http:\/\/flightsraw"}},"to":{"@href":"#id58","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns21":"http:\/\/flightsraw"}},"@id":"id16","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns21:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns21":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id111","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns23":"http:\/\/flightsraw","ns24":"urn:axis.sosnoski.com"}},{"@href":"#id112","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns23":"http:\/\/flightsraw","ns24":"urn:axis.sosnoski.com"}},{"@href":"#id113","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns23":"http:\/\/flightsraw","ns24":"urn:axis.sosnoski.com"}},{"@href":"#id114","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns23":"http:\/\/flightsraw","ns24":"urn:axis.sosnoski.com"}},{"@href":"#id115","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns23":"http:\/\/flightsraw","ns24":"urn:axis.sosnoski.com"}},{"@href":"#id116","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns23":"http:\/\/flightsraw","ns24":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns23:FlightBean[6]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns23":"http:\/\/flightsraw","ns24":"urn:axis.sosnoski.com"}},"from":{"@href":"#id64","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns23":"http:\/\/flightsraw"}},"to":{"@href":"#id58","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns23":"http:\/\/flightsraw"}},"@id":"id26","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns23:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns23":"http:\/\/flightsraw"}},{"URL":{"$":"http:\/\/www.northleft.com","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns25":"http:\/\/flightsraw"}},"name":{"$":"Northleft Airlines","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns25":"http:\/\/flightsraw"}},"rating":{"$":"4","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns25":"http:\/\/flightsraw"}},"ident":{"$":"NL","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns25":"http:\/\/flightsraw"}},"@id":"id70","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns25:CarrierBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns25":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id117","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns26":"http:\/\/flightsraw","ns27":"urn:axis.sosnoski.com"}},{"@href":"#id118","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns26":"http:\/\/flightsraw","ns27":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns26:FlightBean[2]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns26":"http:\/\/flightsraw","ns27":"urn:axis.sosnoski.com"}},"from":{"@href":"#id59","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns26":"http:\/\/flightsraw"}},"to":{"@href":"#id61","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns26":"http:\/\/flightsraw"}},"@id":"id29","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns26:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns26":"http:\/\/flightsraw"}},{"flights":{"item":{"@href":"#id119","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns28":"http:\/\/flightsraw","ns29":"urn:axis.sosnoski.com"}},"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns28:FlightBean[1]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns28":"http:\/\/flightsraw","ns29":"urn:axis.sosnoski.com"}},"from":{"@href":"#id57","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns28":"http:\/\/flightsraw"}},"to":{"@href":"#id63","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns28":"http:\/\/flightsraw"}},"@id":"id11","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns28:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns28":"http:\/\/flightsraw"}},{"flights":{"item":{"@href":"#id120","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns30":"http:\/\/flightsraw","ns31":"urn:axis.sosnoski.com"}},"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns30:FlightBean[1]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns30":"http:\/\/flightsraw","ns31":"urn:axis.sosnoski.com"}},"from":{"@href":"#id64","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns30":"http:\/\/flightsraw"}},"to":{"@href":"#id57","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns30":"http:\/\/flightsraw"}},"@id":"id14","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns30:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns30":"http:\/\/flightsraw"}},{"location":{"$":"San Francisco, CA","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns32":"http:\/\/flightsraw"}},"name":{"$":"San Francisco International Airport","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns32":"http:\/\/flightsraw"}},"ident":{"$":"SFO","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns32":"http:\/\/flightsraw"}},"@id":"id63","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns32:AirportBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns32":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id121","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns33":"http:\/\/flightsraw","ns34":"urn:axis.sosnoski.com"}},{"@href":"#id122","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns33":"http:\/\/flightsraw","ns34":"urn:axis.sosnoski.com"}},{"@href":"#id123","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns33":"http:\/\/flightsraw","ns34":"urn:axis.sosnoski.com"}},{"@href":"#id124","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns33":"http:\/\/flightsraw","ns34":"urn:axis.sosnoski.com"}},{"@href":"#id125","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns33":"http:\/\/flightsraw","ns34":"urn:axis.sosnoski.com"}},{"@href":"#id126","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns33":"http:\/\/flightsraw","ns34":"urn:axis.sosnoski.com"}},{"@href":"#id127","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns33":"http:\/\/flightsraw","ns34":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns33:FlightBean[7]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns33":"http:\/\/flightsraw","ns34":"urn:axis.sosnoski.com"}},"from":{"@href":"#id62","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns33":"http:\/\/flightsraw"}},"to":{"@href":"#id60","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns33":"http:\/\/flightsraw"}},"@id":"id40","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns33:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns33":"http:\/\/flightsraw"}},{"flights":{"item":{"@href":"#id128","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns35":"http:\/\/flightsraw","ns36":"urn:axis.sosnoski.com"}},"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns35:FlightBean[1]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns35":"http:\/\/flightsraw","ns36":"urn:axis.sosnoski.com"}},"from":{"@href":"#id57","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns35":"http:\/\/flightsraw"}},"to":{"@href":"#id64","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns35":"http:\/\/flightsraw"}},"@id":"id13","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns35:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns35":"http:\/\/flightsraw"}},{"URL":{"$":"http:\/\/www.arcticairlines.com","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns37":"http:\/\/flightsraw"}},"name":{"$":"Arctic Airlines","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns37":"http:\/\/flightsraw"}},"rating":{"$":"9","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns37":"http:\/\/flightsraw"}},"ident":{"$":"AR","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns37":"http:\/\/flightsraw"}},"@id":"id65","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns37:CarrierBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns37":"http:\/\/flightsraw"}},{"URL":{"$":"http:\/\/www.classyskylines.com","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns38":"http:\/\/flightsraw"}},"name":{"$":"Classy Skylines","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns38":"http:\/\/flightsraw"}},"rating":{"$":"9","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns38":"http:\/\/flightsraw"}},"ident":{"$":"CL","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns38":"http:\/\/flightsraw"}},"@id":"id69","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns38:CarrierBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns38":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id129","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns39":"http:\/\/flightsraw","ns40":"urn:axis.sosnoski.com"}},{"@href":"#id130","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns39":"http:\/\/flightsraw","ns40":"urn:axis.sosnoski.com"}},{"@href":"#id131","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns39":"http:\/\/flightsraw","ns40":"urn:axis.sosnoski.com"}},{"@href":"#id132","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns39":"http:\/\/flightsraw","ns40":"urn:axis.sosnoski.com"}},{"@href":"#id133","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns39":"http:\/\/flightsraw","ns40":"urn:axis.sosnoski.com"}},{"@href":"#id134","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns39":"http:\/\/flightsraw","ns40":"urn:axis.sosnoski.com"}},{"@href":"#id135","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns39":"http:\/\/flightsraw","ns40":"urn:axis.sosnoski.com"}},{"@href":"#id136","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns39":"http:\/\/flightsraw","ns40":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns39:FlightBean[8]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns39":"http:\/\/flightsraw","ns40":"urn:axis.sosnoski.com"}},"from":{"@href":"#id63","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns39":"http:\/\/flightsraw"}},"to":{"@href":"#id64","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns39":"http:\/\/flightsraw"}},"@id":"id55","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns39:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns39":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id137","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns41":"http:\/\/flightsraw","ns42":"urn:axis.sosnoski.com"}},{"@href":"#id138","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns41":"http:\/\/flightsraw","ns42":"urn:axis.sosnoski.com"}},{"@href":"#id139","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns41":"http:\/\/flightsraw","ns42":"urn:axis.sosnoski.com"}},{"@href":"#id140","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns41":"http:\/\/flightsraw","ns42":"urn:axis.sosnoski.com"}},{"@href":"#id141","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns41":"http:\/\/flightsraw","ns42":"urn:axis.sosnoski.com"}},{"@href":"#id142","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns41":"http:\/\/flightsraw","ns42":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns41:FlightBean[6]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns41":"http:\/\/flightsraw","ns42":"urn:axis.sosnoski.com"}},"from":{"@href":"#id63","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns41":"http:\/\/flightsraw"}},"to":{"@href":"#id58","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns41":"http:\/\/flightsraw"}},"@id":"id24","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns41:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns41":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id143","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns43":"http:\/\/flightsraw","ns44":"urn:axis.sosnoski.com"}},{"@href":"#id144","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns43":"http:\/\/flightsraw","ns44":"urn:axis.sosnoski.com"}},{"@href":"#id145","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns43":"http:\/\/flightsraw","ns44":"urn:axis.sosnoski.com"}},{"@href":"#id146","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns43":"http:\/\/flightsraw","ns44":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns43:FlightBean[4]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns43":"http:\/\/flightsraw","ns44":"urn:axis.sosnoski.com"}},"from":{"@href":"#id64","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns43":"http:\/\/flightsraw"}},"to":{"@href":"#id59","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns43":"http:\/\/flightsraw"}},"@id":"id36","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns43:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns43":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id147","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns45":"http:\/\/flightsraw","ns46":"urn:axis.sosnoski.com"}},{"@href":"#id148","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns45":"http:\/\/flightsraw","ns46":"urn:axis.sosnoski.com"}},{"@href":"#id149","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns45":"http:\/\/flightsraw","ns46":"urn:axis.sosnoski.com"}},{"@href":"#id150","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns45":"http:\/\/flightsraw","ns46":"urn:axis.sosnoski.com"}},{"@href":"#id151","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns45":"http:\/\/flightsraw","ns46":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns45:FlightBean[5]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns45":"http:\/\/flightsraw","ns46":"urn:axis.sosnoski.com"}},"from":{"@href":"#id60","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns45":"http:\/\/flightsraw"}},"to":{"@href":"#id63","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns45":"http:\/\/flightsraw"}},"@id":"id41","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns45:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns45":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id152","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns47":"http:\/\/flightsraw","ns48":"urn:axis.sosnoski.com"}},{"@href":"#id153","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns47":"http:\/\/flightsraw","ns48":"urn:axis.sosnoski.com"}},{"@href":"#id154","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns47":"http:\/\/flightsraw","ns48":"urn:axis.sosnoski.com"}},{"@href":"#id155","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns47":"http:\/\/flightsraw","ns48":"urn:axis.sosnoski.com"}},{"@href":"#id156","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns47":"http:\/\/flightsraw","ns48":"urn:axis.sosnoski.com"}},{"@href":"#id157","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns47":"http:\/\/flightsraw","ns48":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns47:FlightBean[6]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns47":"http:\/\/flightsraw","ns48":"urn:axis.sosnoski.com"}},"from":{"@href":"#id63","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns47":"http:\/\/flightsraw"}},"to":{"@href":"#id59","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns47":"http:\/\/flightsraw"}},"@id":"id34","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns47:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns47":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id158","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns49":"http:\/\/flightsraw","ns50":"urn:axis.sosnoski.com"}},{"@href":"#id159","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns49":"http:\/\/flightsraw","ns50":"urn:axis.sosnoski.com"}},{"@href":"#id160","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns49":"http:\/\/flightsraw","ns50":"urn:axis.sosnoski.com"}},{"@href":"#id161","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns49":"http:\/\/flightsraw","ns50":"urn:axis.sosnoski.com"}},{"@href":"#id162","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns49":"http:\/\/flightsraw","ns50":"urn:axis.sosnoski.com"}},{"@href":"#id163","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns49":"http:\/\/flightsraw","ns50":"urn:axis.sosnoski.com"}},{"@href":"#id164","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns49":"http:\/\/flightsraw","ns50":"urn:axis.sosnoski.com"}},{"@href":"#id165","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns49":"http:\/\/flightsraw","ns50":"urn:axis.sosnoski.com"}},{"@href":"#id166","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns49":"http:\/\/flightsraw","ns50":"urn:axis.sosnoski.com"}},{"@href":"#id167","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns49":"http:\/\/flightsraw","ns50":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns49:FlightBean[10]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns49":"http:\/\/flightsraw","ns50":"urn:axis.sosnoski.com"}},"from":{"@href":"#id62","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns49":"http:\/\/flightsraw"}},"to":{"@href":"#id58","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns49":"http:\/\/flightsraw"}},"@id":"id22","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns49:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns49":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id168","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns51":"http:\/\/flightsraw","ns52":"urn:axis.sosnoski.com"}},{"@href":"#id169","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns51":"http:\/\/flightsraw","ns52":"urn:axis.sosnoski.com"}},{"@href":"#id170","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns51":"http:\/\/flightsraw","ns52":"urn:axis.sosnoski.com"}},{"@href":"#id171","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns51":"http:\/\/flightsraw","ns52":"urn:axis.sosnoski.com"}},{"@href":"#id172","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns51":"http:\/\/flightsraw","ns52":"urn:axis.sosnoski.com"}},{"@href":"#id173","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns51":"http:\/\/flightsraw","ns52":"urn:axis.sosnoski.com"}},{"@href":"#id174","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns51":"http:\/\/flightsraw","ns52":"urn:axis.sosnoski.com"}},{"@href":"#id175","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns51":"http:\/\/flightsraw","ns52":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns51:FlightBean[8]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns51":"http:\/\/flightsraw","ns52":"urn:axis.sosnoski.com"}},"from":{"@href":"#id64","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns51":"http:\/\/flightsraw"}},"to":{"@href":"#id63","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns51":"http:\/\/flightsraw"}},"@id":"id56","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns51:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns51":"http:\/\/flightsraw"}},{"URL":{"$":"http:\/\/www.bumblingint.com","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns53":"http:\/\/flightsraw"}},"name":{"$":"Bumbling International","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns53":"http:\/\/flightsraw"}},"rating":{"$":"2","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns53":"http:\/\/flightsraw"}},"ident":{"$":"BI","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns53":"http:\/\/flightsraw"}},"@id":"id67","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns53:CarrierBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns53":"http:\/\/flightsraw"}},{"URL":{"$":"http:\/\/www.combinedlines.com","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns54":"http:\/\/flightsraw"}},"name":{"$":"Combined Airlines","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns54":"http:\/\/flightsraw"}},"rating":{"$":"7","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns54":"http:\/\/flightsraw"}},"ident":{"$":"CA","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns54":"http:\/\/flightsraw"}},"@id":"id66","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns54:CarrierBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns54":"http:\/\/flightsraw"}},{"location":{"$":"Miami, FL","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns55":"http:\/\/flightsraw"}},"name":{"$":"Miami International Airport","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns55":"http:\/\/flightsraw"}},"ident":{"$":"MIA","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns55":"http:\/\/flightsraw"}},"@id":"id58","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns55:AirportBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns55":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id176","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns56":"http:\/\/flightsraw","ns57":"urn:axis.sosnoski.com"}},{"@href":"#id177","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns56":"http:\/\/flightsraw","ns57":"urn:axis.sosnoski.com"}},{"@href":"#id178","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns56":"http:\/\/flightsraw","ns57":"urn:axis.sosnoski.com"}},{"@href":"#id179","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns56":"http:\/\/flightsraw","ns57":"urn:axis.sosnoski.com"}},{"@href":"#id180","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns56":"http:\/\/flightsraw","ns57":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns56:FlightBean[5]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns56":"http:\/\/flightsraw","ns57":"urn:axis.sosnoski.com"}},"from":{"@href":"#id58","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns56":"http:\/\/flightsraw"}},"to":{"@href":"#id57","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns56":"http:\/\/flightsraw"}},"@id":"id2","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns56:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns56":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id181","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns58":"http:\/\/flightsraw","ns59":"urn:axis.sosnoski.com"}},{"@href":"#id182","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns58":"http:\/\/flightsraw","ns59":"urn:axis.sosnoski.com"}},{"@href":"#id183","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns58":"http:\/\/flightsraw","ns59":"urn:axis.sosnoski.com"}},{"@href":"#id184","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns58":"http:\/\/flightsraw","ns59":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns58:FlightBean[4]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns58":"http:\/\/flightsraw","ns59":"urn:axis.sosnoski.com"}},"from":{"@href":"#id61","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns58":"http:\/\/flightsraw"}},"to":{"@href":"#id63","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns58":"http:\/\/flightsraw"}},"@id":"id47","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns58:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns58":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id185","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns60":"http:\/\/flightsraw","ns61":"urn:axis.sosnoski.com"}},{"@href":"#id186","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns60":"http:\/\/flightsraw","ns61":"urn:axis.sosnoski.com"}},{"@href":"#id187","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns60":"http:\/\/flightsraw","ns61":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns60:FlightBean[3]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns60":"http:\/\/flightsraw","ns61":"urn:axis.sosnoski.com"}},"from":{"@href":"#id61","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns60":"http:\/\/flightsraw"}},"to":{"@href":"#id57","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns60":"http:\/\/flightsraw"}},"@id":"id8","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns60:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns60":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id188","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns62":"http:\/\/flightsraw","ns63":"urn:axis.sosnoski.com"}},{"@href":"#id189","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns62":"http:\/\/flightsraw","ns63":"urn:axis.sosnoski.com"}},{"@href":"#id190","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns62":"http:\/\/flightsraw","ns63":"urn:axis.sosnoski.com"}},{"@href":"#id191","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns62":"http:\/\/flightsraw","ns63":"urn:axis.sosnoski.com"}},{"@href":"#id192","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns62":"http:\/\/flightsraw","ns63":"urn:axis.sosnoski.com"}},{"@href":"#id193","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns62":"http:\/\/flightsraw","ns63":"urn:axis.sosnoski.com"}},{"@href":"#id194","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns62":"http:\/\/flightsraw","ns63":"urn:axis.sosnoski.com"}},{"@href":"#id195","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns62":"http:\/\/flightsraw","ns63":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns62:FlightBean[8]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns62":"http:\/\/flightsraw","ns63":"urn:axis.sosnoski.com"}},"from":{"@href":"#id61","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns62":"http:\/\/flightsraw"}},"to":{"@href":"#id60","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns62":"http:\/\/flightsraw"}},"@id":"id38","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns62:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns62":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id196","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns64":"http:\/\/flightsraw","ns65":"urn:axis.sosnoski.com"}},{"@href":"#id197","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns64":"http:\/\/flightsraw","ns65":"urn:axis.sosnoski.com"}},{"@href":"#id198","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns64":"http:\/\/flightsraw","ns65":"urn:axis.sosnoski.com"}},{"@href":"#id199","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns64":"http:\/\/flightsraw","ns65":"urn:axis.sosnoski.com"}},{"@href":"#id200","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns64":"http:\/\/flightsraw","ns65":"urn:axis.sosnoski.com"}},{"@href":"#id201","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns64":"http:\/\/flightsraw","ns65":"urn:axis.sosnoski.com"}},{"@href":"#id202","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns64":"http:\/\/flightsraw","ns65":"urn:axis.sosnoski.com"}},{"@href":"#id203","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns64":"http:\/\/flightsraw","ns65":"urn:axis.sosnoski.com"}},{"@href":"#id204","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns64":"http:\/\/flightsraw","ns65":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns64:FlightBean[9]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns64":"http:\/\/flightsraw","ns65":"urn:axis.sosnoski.com"}},"from":{"@href":"#id61","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns64":"http:\/\/flightsraw"}},"to":{"@href":"#id62","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns64":"http:\/\/flightsraw"}},"@id":"id45","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns64:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns64":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id205","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns66":"http:\/\/flightsraw","ns67":"urn:axis.sosnoski.com"}},{"@href":"#id206","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns66":"http:\/\/flightsraw","ns67":"urn:axis.sosnoski.com"}},{"@href":"#id207","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns66":"http:\/\/flightsraw","ns67":"urn:axis.sosnoski.com"}},{"@href":"#id208","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns66":"http:\/\/flightsraw","ns67":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns66:FlightBean[4]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns66":"http:\/\/flightsraw","ns67":"urn:axis.sosnoski.com"}},"from":{"@href":"#id59","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns66":"http:\/\/flightsraw"}},"to":{"@href":"#id57","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns66":"http:\/\/flightsraw"}},"@id":"id4","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns66:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns66":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id209","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns68":"http:\/\/flightsraw","ns69":"urn:axis.sosnoski.com"}},{"@href":"#id210","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns68":"http:\/\/flightsraw","ns69":"urn:axis.sosnoski.com"}},{"@href":"#id211","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns68":"http:\/\/flightsraw","ns69":"urn:axis.sosnoski.com"}},{"@href":"#id212","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns68":"http:\/\/flightsraw","ns69":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns68:FlightBean[4]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns68":"http:\/\/flightsraw","ns69":"urn:axis.sosnoski.com"}},"from":{"@href":"#id62","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns68":"http:\/\/flightsraw"}},"to":{"@href":"#id59","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns68":"http:\/\/flightsraw"}},"@id":"id32","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns68:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns68":"http:\/\/flightsraw"}},{"URL":{"$":"http:\/\/www.serenityflights.com","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns70":"http:\/\/flightsraw"}},"name":{"$":"Serenity Flights, Inc.","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns70":"http:\/\/flightsraw"}},"rating":{"$":"7","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns70":"http:\/\/flightsraw"}},"ident":{"$":"SF","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns70":"http:\/\/flightsraw"}},"@id":"id72","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns70:CarrierBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns70":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id213","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns71":"http:\/\/flightsraw","ns72":"urn:axis.sosnoski.com"}},{"@href":"#id214","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns71":"http:\/\/flightsraw","ns72":"urn:axis.sosnoski.com"}},{"@href":"#id215","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns71":"http:\/\/flightsraw","ns72":"urn:axis.sosnoski.com"}},{"@href":"#id216","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns71":"http:\/\/flightsraw","ns72":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns71:FlightBean[4]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns71":"http:\/\/flightsraw","ns72":"urn:axis.sosnoski.com"}},"from":{"@href":"#id59","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns71":"http:\/\/flightsraw"}},"to":{"@href":"#id64","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns71":"http:\/\/flightsraw"}},"@id":"id35","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns71:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns71":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id217","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns73":"http:\/\/flightsraw","ns74":"urn:axis.sosnoski.com"}},{"@href":"#id218","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns73":"http:\/\/flightsraw","ns74":"urn:axis.sosnoski.com"}},{"@href":"#id219","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns73":"http:\/\/flightsraw","ns74":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns73:FlightBean[3]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns73":"http:\/\/flightsraw","ns74":"urn:axis.sosnoski.com"}},"from":{"@href":"#id57","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns73":"http:\/\/flightsraw"}},"to":{"@href":"#id61","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns73":"http:\/\/flightsraw"}},"@id":"id7","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns73:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns73":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id220","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns75":"http:\/\/flightsraw","ns76":"urn:axis.sosnoski.com"}},{"@href":"#id221","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns75":"http:\/\/flightsraw","ns76":"urn:axis.sosnoski.com"}},{"@href":"#id222","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns75":"http:\/\/flightsraw","ns76":"urn:axis.sosnoski.com"}},{"@href":"#id223","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns75":"http:\/\/flightsraw","ns76":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns75:FlightBean[4]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns75":"http:\/\/flightsraw","ns76":"urn:axis.sosnoski.com"}},"from":{"@href":"#id58","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns75":"http:\/\/flightsraw"}},"to":{"@href":"#id59","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns75":"http:\/\/flightsraw"}},"@id":"id15","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns75:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns75":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id224","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns77":"http:\/\/flightsraw","ns78":"urn:axis.sosnoski.com"}},{"@href":"#id225","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns77":"http:\/\/flightsraw","ns78":"urn:axis.sosnoski.com"}},{"@href":"#id226","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns77":"http:\/\/flightsraw","ns78":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns77:FlightBean[3]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns77":"http:\/\/flightsraw","ns78":"urn:axis.sosnoski.com"}},"from":{"@href":"#id63","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns77":"http:\/\/flightsraw"}},"to":{"@href":"#id62","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns77":"http:\/\/flightsraw"}},"@id":"id52","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns77:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns77":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id227","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns79":"http:\/\/flightsraw","ns80":"urn:axis.sosnoski.com"}},{"@href":"#id228","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns79":"http:\/\/flightsraw","ns80":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns79:FlightBean[2]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns79":"http:\/\/flightsraw","ns80":"urn:axis.sosnoski.com"}},"from":{"@href":"#id57","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns79":"http:\/\/flightsraw"}},"to":{"@href":"#id62","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns79":"http:\/\/flightsraw"}},"@id":"id9","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns79:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns79":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id229","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns81":"http:\/\/flightsraw","ns82":"urn:axis.sosnoski.com"}},{"@href":"#id230","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns81":"http:\/\/flightsraw","ns82":"urn:axis.sosnoski.com"}},{"@href":"#id231","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns81":"http:\/\/flightsraw","ns82":"urn:axis.sosnoski.com"}},{"@href":"#id232","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns81":"http:\/\/flightsraw","ns82":"urn:axis.sosnoski.com"}},{"@href":"#id233","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns81":"http:\/\/flightsraw","ns82":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns81:FlightBean[5]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns81":"http:\/\/flightsraw","ns82":"urn:axis.sosnoski.com"}},"from":{"@href":"#id59","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns81":"http:\/\/flightsraw"}},"to":{"@href":"#id60","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns81":"http:\/\/flightsraw"}},"@id":"id27","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns81:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns81":"http:\/\/flightsraw"}},{"location":{"$":"New York, NY","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns83":"http:\/\/flightsraw"}},"name":{"$":"John F. Kennedy International Airport","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns83":"http:\/\/flightsraw"}},"ident":{"$":"JFK","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns83":"http:\/\/flightsraw"}},"@id":"id62","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns83:AirportBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns83":"http:\/\/flightsraw"}},{"URL":{"$":"http:\/\/www.classyskylines.com","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns84":"http:\/\/flightsraw"}},"name":{"$":"Worldwide Airlines","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns84":"http:\/\/flightsraw"}},"rating":{"$":"7","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns84":"http:\/\/flightsraw"}},"ident":{"$":"WA","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns84":"http:\/\/flightsraw"}},"@id":"id68","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns84:CarrierBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns84":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id234","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns85":"http:\/\/flightsraw","ns86":"urn:axis.sosnoski.com"}},{"@href":"#id235","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns85":"http:\/\/flightsraw","ns86":"urn:axis.sosnoski.com"}},{"@href":"#id236","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns85":"http:\/\/flightsraw","ns86":"urn:axis.sosnoski.com"}},{"@href":"#id237","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns85":"http:\/\/flightsraw","ns86":"urn:axis.sosnoski.com"}},{"@href":"#id238","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns85":"http:\/\/flightsraw","ns86":"urn:axis.sosnoski.com"}},{"@href":"#id239","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns85":"http:\/\/flightsraw","ns86":"urn:axis.sosnoski.com"}},{"@href":"#id240","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns85":"http:\/\/flightsraw","ns86":"urn:axis.sosnoski.com"}},{"@href":"#id241","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns85":"http:\/\/flightsraw","ns86":"urn:axis.sosnoski.com"}},{"@href":"#id242","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns85":"http:\/\/flightsraw","ns86":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns85:FlightBean[9]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns85":"http:\/\/flightsraw","ns86":"urn:axis.sosnoski.com"}},"from":{"@href":"#id60","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns85":"http:\/\/flightsraw"}},"to":{"@href":"#id58","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns85":"http:\/\/flightsraw"}},"@id":"id18","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns85:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns85":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id243","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns87":"http:\/\/flightsraw","ns88":"urn:axis.sosnoski.com"}},{"@href":"#id244","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns87":"http:\/\/flightsraw","ns88":"urn:axis.sosnoski.com"}},{"@href":"#id245","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns87":"http:\/\/flightsraw","ns88":"urn:axis.sosnoski.com"}},{"@href":"#id246","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns87":"http:\/\/flightsraw","ns88":"urn:axis.sosnoski.com"}},{"@href":"#id247","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns87":"http:\/\/flightsraw","ns88":"urn:axis.sosnoski.com"}},{"@href":"#id248","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns87":"http:\/\/flightsraw","ns88":"urn:axis.sosnoski.com"}},{"@href":"#id249","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns87":"http:\/\/flightsraw","ns88":"urn:axis.sosnoski.com"}},{"@href":"#id250","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns87":"http:\/\/flightsraw","ns88":"urn:axis.sosnoski.com"}},{"@href":"#id251","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns87":"http:\/\/flightsraw","ns88":"urn:axis.sosnoski.com"}},{"@href":"#id252","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns87":"http:\/\/flightsraw","ns88":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns87:FlightBean[10]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns87":"http:\/\/flightsraw","ns88":"urn:axis.sosnoski.com"}},"from":{"@href":"#id58","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns87":"http:\/\/flightsraw"}},"to":{"@href":"#id62","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns87":"http:\/\/flightsraw"}},"@id":"id21","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns87:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns87":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id253","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns89":"http:\/\/flightsraw","ns90":"urn:axis.sosnoski.com"}},{"@href":"#id254","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns89":"http:\/\/flightsraw","ns90":"urn:axis.sosnoski.com"}},{"@href":"#id255","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns89":"http:\/\/flightsraw","ns90":"urn:axis.sosnoski.com"}},{"@href":"#id256","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns89":"http:\/\/flightsraw","ns90":"urn:axis.sosnoski.com"}},{"@href":"#id257","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns89":"http:\/\/flightsraw","ns90":"urn:axis.sosnoski.com"}},{"@href":"#id258","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns89":"http:\/\/flightsraw","ns90":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns89:FlightBean[6]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns89":"http:\/\/flightsraw","ns90":"urn:axis.sosnoski.com"}},"from":{"@href":"#id62","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns89":"http:\/\/flightsraw"}},"to":{"@href":"#id64","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns89":"http:\/\/flightsraw"}},"@id":"id53","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns89:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns89":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id259","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns91":"http:\/\/flightsraw","ns92":"urn:axis.sosnoski.com"}},{"@href":"#id260","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns91":"http:\/\/flightsraw","ns92":"urn:axis.sosnoski.com"}},{"@href":"#id261","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns91":"http:\/\/flightsraw","ns92":"urn:axis.sosnoski.com"}},{"@href":"#id262","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns91":"http:\/\/flightsraw","ns92":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns91:FlightBean[4]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns91":"http:\/\/flightsraw","ns92":"urn:axis.sosnoski.com"}},"from":{"@href":"#id59","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns91":"http:\/\/flightsraw"}},"to":{"@href":"#id62","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns91":"http:\/\/flightsraw"}},"@id":"id31","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns91:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns91":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id263","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns93":"http:\/\/flightsraw","ns94":"urn:axis.sosnoski.com"}},{"@href":"#id264","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns93":"http:\/\/flightsraw","ns94":"urn:axis.sosnoski.com"}},{"@href":"#id265","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns93":"http:\/\/flightsraw","ns94":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns93:FlightBean[3]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns93":"http:\/\/flightsraw","ns94":"urn:axis.sosnoski.com"}},"from":{"@href":"#id62","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns93":"http:\/\/flightsraw"}},"to":{"@href":"#id63","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns93":"http:\/\/flightsraw"}},"@id":"id51","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns93:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns93":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id266","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns95":"http:\/\/flightsraw","ns96":"urn:axis.sosnoski.com"}},{"@href":"#id267","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns95":"http:\/\/flightsraw","ns96":"urn:axis.sosnoski.com"}},{"@href":"#id268","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns95":"http:\/\/flightsraw","ns96":"urn:axis.sosnoski.com"}},{"@href":"#id269","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns95":"http:\/\/flightsraw","ns96":"urn:axis.sosnoski.com"}},{"@href":"#id270","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns95":"http:\/\/flightsraw","ns96":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns95:FlightBean[5]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns95":"http:\/\/flightsraw","ns96":"urn:axis.sosnoski.com"}},"from":{"@href":"#id57","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns95":"http:\/\/flightsraw"}},"to":{"@href":"#id58","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns95":"http:\/\/flightsraw"}},"@id":"id1","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns95:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns95":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id271","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns97":"http:\/\/flightsraw","ns98":"urn:axis.sosnoski.com"}},{"@href":"#id272","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns97":"http:\/\/flightsraw","ns98":"urn:axis.sosnoski.com"}},{"@href":"#id273","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns97":"http:\/\/flightsraw","ns98":"urn:axis.sosnoski.com"}},{"@href":"#id274","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns97":"http:\/\/flightsraw","ns98":"urn:axis.sosnoski.com"}},{"@href":"#id275","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns97":"http:\/\/flightsraw","ns98":"urn:axis.sosnoski.com"}},{"@href":"#id276","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns97":"http:\/\/flightsraw","ns98":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns97:FlightBean[6]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns97":"http:\/\/flightsraw","ns98":"urn:axis.sosnoski.com"}},"from":{"@href":"#id64","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns97":"http:\/\/flightsraw"}},"to":{"@href":"#id60","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns97":"http:\/\/flightsraw"}},"@id":"id44","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns97:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns97":"http:\/\/flightsraw"}},{"location":{"$":"Boston, MA","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns99":"http:\/\/flightsraw"}},"name":{"$":"Logan International Airport","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns99":"http:\/\/flightsraw"}},"ident":{"$":"BOS","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns99":"http:\/\/flightsraw"}},"@id":"id60","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns99:AirportBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns99":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id277","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns100":"http:\/\/flightsraw","ns101":"urn:axis.sosnoski.com"}},{"@href":"#id278","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns100":"http:\/\/flightsraw","ns101":"urn:axis.sosnoski.com"}},{"@href":"#id279","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns100":"http:\/\/flightsraw","ns101":"urn:axis.sosnoski.com"}},{"@href":"#id280","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns100":"http:\/\/flightsraw","ns101":"urn:axis.sosnoski.com"}},{"@href":"#id281","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns100":"http:\/\/flightsraw","ns101":"urn:axis.sosnoski.com"}},{"@href":"#id282","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns100":"http:\/\/flightsraw","ns101":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns100:FlightBean[6]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns100":"http:\/\/flightsraw","ns101":"urn:axis.sosnoski.com"}},"from":{"@href":"#id60","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns100":"http:\/\/flightsraw"}},"to":{"@href":"#id64","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns100":"http:\/\/flightsraw"}},"@id":"id43","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns100:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns100":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id283","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns102":"http:\/\/flightsraw","ns103":"urn:axis.sosnoski.com"}},{"@href":"#id284","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns102":"http:\/\/flightsraw","ns103":"urn:axis.sosnoski.com"}},{"@href":"#id285","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns102":"http:\/\/flightsraw","ns103":"urn:axis.sosnoski.com"}},{"@href":"#id286","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns102":"http:\/\/flightsraw","ns103":"urn:axis.sosnoski.com"}},{"@href":"#id287","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns102":"http:\/\/flightsraw","ns103":"urn:axis.sosnoski.com"}},{"@href":"#id288","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns102":"http:\/\/flightsraw","ns103":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns102:FlightBean[6]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns102":"http:\/\/flightsraw","ns103":"urn:axis.sosnoski.com"}},"from":{"@href":"#id59","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns102":"http:\/\/flightsraw"}},"to":{"@href":"#id63","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns102":"http:\/\/flightsraw"}},"@id":"id33","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns102:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns102":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id289","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns104":"http:\/\/flightsraw","ns105":"urn:axis.sosnoski.com"}},{"@href":"#id290","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns104":"http:\/\/flightsraw","ns105":"urn:axis.sosnoski.com"}},{"@href":"#id291","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns104":"http:\/\/flightsraw","ns105":"urn:axis.sosnoski.com"}},{"@href":"#id292","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns104":"http:\/\/flightsraw","ns105":"urn:axis.sosnoski.com"}},{"@href":"#id293","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns104":"http:\/\/flightsraw","ns105":"urn:axis.sosnoski.com"}},{"@href":"#id294","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns104":"http:\/\/flightsraw","ns105":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns104:FlightBean[6]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns104":"http:\/\/flightsraw","ns105":"urn:axis.sosnoski.com"}},"from":{"@href":"#id58","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns104":"http:\/\/flightsraw"}},"to":{"@href":"#id63","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns104":"http:\/\/flightsraw"}},"@id":"id23","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns104:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns104":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id295","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns106":"http:\/\/flightsraw","ns107":"urn:axis.sosnoski.com"}},{"@href":"#id296","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns106":"http:\/\/flightsraw","ns107":"urn:axis.sosnoski.com"}},{"@href":"#id297","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns106":"http:\/\/flightsraw","ns107":"urn:axis.sosnoski.com"}},{"@href":"#id298","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns106":"http:\/\/flightsraw","ns107":"urn:axis.sosnoski.com"}},{"@href":"#id299","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns106":"http:\/\/flightsraw","ns107":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns106:FlightBean[5]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns106":"http:\/\/flightsraw","ns107":"urn:axis.sosnoski.com"}},"from":{"@href":"#id61","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns106":"http:\/\/flightsraw"}},"to":{"@href":"#id58","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns106":"http:\/\/flightsraw"}},"@id":"id20","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns106:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns106":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id300","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns108":"http:\/\/flightsraw","ns109":"urn:axis.sosnoski.com"}},{"@href":"#id301","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns108":"http:\/\/flightsraw","ns109":"urn:axis.sosnoski.com"}},{"@href":"#id302","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns108":"http:\/\/flightsraw","ns109":"urn:axis.sosnoski.com"}},{"@href":"#id303","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns108":"http:\/\/flightsraw","ns109":"urn:axis.sosnoski.com"}},{"@href":"#id304","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns108":"http:\/\/flightsraw","ns109":"urn:axis.sosnoski.com"}},{"@href":"#id305","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns108":"http:\/\/flightsraw","ns109":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns108:FlightBean[6]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns108":"http:\/\/flightsraw","ns109":"urn:axis.sosnoski.com"}},"from":{"@href":"#id58","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns108":"http:\/\/flightsraw"}},"to":{"@href":"#id64","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns108":"http:\/\/flightsraw"}},"@id":"id25","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns108:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns108":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id306","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns110":"http:\/\/flightsraw","ns111":"urn:axis.sosnoski.com"}},{"@href":"#id307","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns110":"http:\/\/flightsraw","ns111":"urn:axis.sosnoski.com"}},{"@href":"#id308","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns110":"http:\/\/flightsraw","ns111":"urn:axis.sosnoski.com"}},{"@href":"#id309","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns110":"http:\/\/flightsraw","ns111":"urn:axis.sosnoski.com"}},{"@href":"#id310","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns110":"http:\/\/flightsraw","ns111":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns110:FlightBean[5]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns110":"http:\/\/flightsraw","ns111":"urn:axis.sosnoski.com"}},"from":{"@href":"#id60","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns110":"http:\/\/flightsraw"}},"to":{"@href":"#id57","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns110":"http:\/\/flightsraw"}},"@id":"id6","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns110:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns110":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id311","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns112":"http:\/\/flightsraw","ns113":"urn:axis.sosnoski.com"}},{"@href":"#id312","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns112":"http:\/\/flightsraw","ns113":"urn:axis.sosnoski.com"}},{"@href":"#id313","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns112":"http:\/\/flightsraw","ns113":"urn:axis.sosnoski.com"}},{"@href":"#id314","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns112":"http:\/\/flightsraw","ns113":"urn:axis.sosnoski.com"}},{"@href":"#id315","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns112":"http:\/\/flightsraw","ns113":"urn:axis.sosnoski.com"}},{"@href":"#id316","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns112":"http:\/\/flightsraw","ns113":"urn:axis.sosnoski.com"}},{"@href":"#id317","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns112":"http:\/\/flightsraw","ns113":"urn:axis.sosnoski.com"}},{"@href":"#id318","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns112":"http:\/\/flightsraw","ns113":"urn:axis.sosnoski.com"}},{"@href":"#id319","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns112":"http:\/\/flightsraw","ns113":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns112:FlightBean[9]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns112":"http:\/\/flightsraw","ns113":"urn:axis.sosnoski.com"}},"from":{"@href":"#id58","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns112":"http:\/\/flightsraw"}},"to":{"@href":"#id60","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns112":"http:\/\/flightsraw"}},"@id":"id17","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns112:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns112":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id320","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns114":"http:\/\/flightsraw","ns115":"urn:axis.sosnoski.com"}},{"@href":"#id321","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns114":"http:\/\/flightsraw","ns115":"urn:axis.sosnoski.com"}},{"@href":"#id322","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns114":"http:\/\/flightsraw","ns115":"urn:axis.sosnoski.com"}},{"@href":"#id323","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns114":"http:\/\/flightsraw","ns115":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns114:FlightBean[4]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns114":"http:\/\/flightsraw","ns115":"urn:axis.sosnoski.com"}},"from":{"@href":"#id63","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns114":"http:\/\/flightsraw"}},"to":{"@href":"#id61","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns114":"http:\/\/flightsraw"}},"@id":"id48","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns114:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns114":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id324","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns116":"http:\/\/flightsraw","ns117":"urn:axis.sosnoski.com"}},{"@href":"#id325","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns116":"http:\/\/flightsraw","ns117":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns116:FlightBean[2]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns116":"http:\/\/flightsraw","ns117":"urn:axis.sosnoski.com"}},"from":{"@href":"#id62","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns116":"http:\/\/flightsraw"}},"to":{"@href":"#id57","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns116":"http:\/\/flightsraw"}},"@id":"id10","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns116:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns116":"http:\/\/flightsraw"}},{"location":{"$":"Los Angeles, CA","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns118":"http:\/\/flightsraw"}},"name":{"$":"Los Angeles International Airport","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns118":"http:\/\/flightsraw"}},"ident":{"$":"LAX","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns118":"http:\/\/flightsraw"}},"@id":"id59","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns118:AirportBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns118":"http:\/\/flightsraw"}},{"location":{"$":"Denver, CO","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns119":"http:\/\/flightsraw"}},"name":{"$":"Denver International Airport","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns119":"http:\/\/flightsraw"}},"ident":{"$":"DEN","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns119":"http:\/\/flightsraw"}},"@id":"id64","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns119:AirportBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns119":"http:\/\/flightsraw"}},{"URL":{"$":"http:\/\/www.tempusfugit.com","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns120":"http:\/\/flightsraw"}},"name":{"$":"Tempus Fugit Lines","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns120":"http:\/\/flightsraw"}},"rating":{"$":"7","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns120":"http:\/\/flightsraw"}},"ident":{"$":"TF","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns120":"http:\/\/flightsraw"}},"@id":"id71","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns120:CarrierBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns120":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id326","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns121":"http:\/\/flightsraw","ns122":"urn:axis.sosnoski.com"}},{"@href":"#id327","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns121":"http:\/\/flightsraw","ns122":"urn:axis.sosnoski.com"}},{"@href":"#id328","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns121":"http:\/\/flightsraw","ns122":"urn:axis.sosnoski.com"}},{"@href":"#id329","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns121":"http:\/\/flightsraw","ns122":"urn:axis.sosnoski.com"}},{"@href":"#id330","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns121":"http:\/\/flightsraw","ns122":"urn:axis.sosnoski.com"}},{"@href":"#id331","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns121":"http:\/\/flightsraw","ns122":"urn:axis.sosnoski.com"}},{"@href":"#id332","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns121":"http:\/\/flightsraw","ns122":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns121:FlightBean[7]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns121":"http:\/\/flightsraw","ns122":"urn:axis.sosnoski.com"}},"from":{"@href":"#id60","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns121":"http:\/\/flightsraw"}},"to":{"@href":"#id62","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns121":"http:\/\/flightsraw"}},"@id":"id39","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns121:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns121":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id333","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns123":"http:\/\/flightsraw","ns124":"urn:axis.sosnoski.com"}},{"@href":"#id334","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns123":"http:\/\/flightsraw","ns124":"urn:axis.sosnoski.com"}},{"@href":"#id335","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns123":"http:\/\/flightsraw","ns124":"urn:axis.sosnoski.com"}},{"@href":"#id336","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns123":"http:\/\/flightsraw","ns124":"urn:axis.sosnoski.com"}},{"@href":"#id337","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns123":"http:\/\/flightsraw","ns124":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns123:FlightBean[5]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns123":"http:\/\/flightsraw","ns124":"urn:axis.sosnoski.com"}},"from":{"@href":"#id57","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns123":"http:\/\/flightsraw"}},"to":{"@href":"#id60","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns123":"http:\/\/flightsraw"}},"@id":"id5","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns123:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns123":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id338","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns125":"http:\/\/flightsraw","ns126":"urn:axis.sosnoski.com"}},{"@href":"#id339","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns125":"http:\/\/flightsraw","ns126":"urn:axis.sosnoski.com"}},{"@href":"#id340","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns125":"http:\/\/flightsraw","ns126":"urn:axis.sosnoski.com"}},{"@href":"#id341","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns125":"http:\/\/flightsraw","ns126":"urn:axis.sosnoski.com"}},{"@href":"#id342","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns125":"http:\/\/flightsraw","ns126":"urn:axis.sosnoski.com"}},{"@href":"#id343","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns125":"http:\/\/flightsraw","ns126":"urn:axis.sosnoski.com"}},{"@href":"#id344","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns125":"http:\/\/flightsraw","ns126":"urn:axis.sosnoski.com"}},{"@href":"#id345","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns125":"http:\/\/flightsraw","ns126":"urn:axis.sosnoski.com"}},{"@href":"#id346","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns125":"http:\/\/flightsraw","ns126":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns125:FlightBean[9]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns125":"http:\/\/flightsraw","ns126":"urn:axis.sosnoski.com"}},"from":{"@href":"#id62","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns125":"http:\/\/flightsraw"}},"to":{"@href":"#id61","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns125":"http:\/\/flightsraw"}},"@id":"id46","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns125:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns125":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id347","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns127":"http:\/\/flightsraw","ns128":"urn:axis.sosnoski.com"}},{"@href":"#id348","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns127":"http:\/\/flightsraw","ns128":"urn:axis.sosnoski.com"}},{"@href":"#id349","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns127":"http:\/\/flightsraw","ns128":"urn:axis.sosnoski.com"}},{"@href":"#id350","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns127":"http:\/\/flightsraw","ns128":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns127:FlightBean[4]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns127":"http:\/\/flightsraw","ns128":"urn:axis.sosnoski.com"}},"from":{"@href":"#id57","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns127":"http:\/\/flightsraw"}},"to":{"@href":"#id59","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns127":"http:\/\/flightsraw"}},"@id":"id3","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns127:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns127":"http:\/\/flightsraw"}},{"flights":{"item":[{"@href":"#id351","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns129":"http:\/\/flightsraw","ns130":"urn:axis.sosnoski.com"}},{"@href":"#id352","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns129":"http:\/\/flightsraw","ns130":"urn:axis.sosnoski.com"}},{"@href":"#id353","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns129":"http:\/\/flightsraw","ns130":"urn:axis.sosnoski.com"}}],"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns129:FlightBean[3]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns129":"http:\/\/flightsraw","ns130":"urn:axis.sosnoski.com"}},"from":{"@href":"#id64","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns129":"http:\/\/flightsraw"}},"to":{"@href":"#id61","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns129":"http:\/\/flightsraw"}},"@id":"id50","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns129:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns129":"http:\/\/flightsraw"}},{"flights":{"item":{"@href":"#id354","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns131":"http:\/\/flightsraw","ns132":"urn:axis.sosnoski.com"}},"@xsi:type":"soapenc:Array","@soapenc:arrayType":"ns131:FlightBean[1]","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns131":"http:\/\/flightsraw","ns132":"urn:axis.sosnoski.com"}},"from":{"@href":"#id63","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns131":"http:\/\/flightsraw"}},"to":{"@href":"#id57","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns131":"http:\/\/flightsraw"}},"@id":"id12","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns131:RouteBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns131":"http:\/\/flightsraw"}},{"location":{"$":"Seattle, WA","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns133":"http:\/\/flightsraw"}},"name":{"$":"Seattle-Tacoma International Airport","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns133":"http:\/\/flightsraw"}},"ident":{"$":"SEA","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns133":"http:\/\/flightsraw"}},"@id":"id57","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns133:AirportBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns133":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"7:57p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns134":"http:\/\/flightsraw"}},"departureTime":{"$":"5:08p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns134":"http:\/\/flightsraw"}},"number":{"$":"671","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns134":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns134":"http:\/\/flightsraw"}},"@id":"id102","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns134:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns134":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:58a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns135":"http:\/\/flightsraw"}},"departureTime":{"$":"1:46a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns135":"http:\/\/flightsraw"}},"number":{"$":"709","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns135":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns135":"http:\/\/flightsraw"}},"@id":"id301","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns135:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns135":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:54a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns136":"http:\/\/flightsraw"}},"departureTime":{"$":"11:08p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns136":"http:\/\/flightsraw"}},"number":{"$":"275","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns136":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns136":"http:\/\/flightsraw"}},"@id":"id125","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns136:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns136":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:15a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns137":"http:\/\/flightsraw"}},"departureTime":{"$":"3:11a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns137":"http:\/\/flightsraw"}},"number":{"$":"809","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns137":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns137":"http:\/\/flightsraw"}},"@id":"id319","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns137:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns137":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:46a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns138":"http:\/\/flightsraw"}},"departureTime":{"$":"1:45a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns138":"http:\/\/flightsraw"}},"number":{"$":"709","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns138":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns138":"http:\/\/flightsraw"}},"@id":"id201","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns138:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns138":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:56a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns139":"http:\/\/flightsraw"}},"departureTime":{"$":"1:46a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns139":"http:\/\/flightsraw"}},"number":{"$":"346","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns139":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns139":"http:\/\/flightsraw"}},"@id":"id148","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns139:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns139":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:49p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns140":"http:\/\/flightsraw"}},"departureTime":{"$":"11:46a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns140":"http:\/\/flightsraw"}},"number":{"$":"523","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns140":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns140":"http:\/\/flightsraw"}},"@id":"id306","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns140:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns140":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:42a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns141":"http:\/\/flightsraw"}},"departureTime":{"$":"3:05a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns141":"http:\/\/flightsraw"}},"number":{"$":"934","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns141":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns141":"http:\/\/flightsraw"}},"@id":"id206","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns141:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns141":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:46a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns142":"http:\/\/flightsraw"}},"departureTime":{"$":"3:17a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns142":"http:\/\/flightsraw"}},"number":{"$":"749","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns142":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns142":"http:\/\/flightsraw"}},"@id":"id128","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns142:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns142":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:43p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns143":"http:\/\/flightsraw"}},"departureTime":{"$":"1:43p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns143":"http:\/\/flightsraw"}},"number":{"$":"569","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns143":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns143":"http:\/\/flightsraw"}},"@id":"id278","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns143:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns143":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"9:31a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns144":"http:\/\/flightsraw"}},"departureTime":{"$":"6:08a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns144":"http:\/\/flightsraw"}},"number":{"$":"690","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns144":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns144":"http:\/\/flightsraw"}},"@id":"id152","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns144:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns144":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"8:42a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns145":"http:\/\/flightsraw"}},"departureTime":{"$":"4:07a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns145":"http:\/\/flightsraw"}},"number":{"$":"731","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns145":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns145":"http:\/\/flightsraw"}},"@id":"id169","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns145:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns145":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"9:03a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns146":"http:\/\/flightsraw"}},"departureTime":{"$":"4:24a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns146":"http:\/\/flightsraw"}},"number":{"$":"600","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns146":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns146":"http:\/\/flightsraw"}},"@id":"id326","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns146:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns146":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"6:15p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns147":"http:\/\/flightsraw"}},"departureTime":{"$":"3:11p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns147":"http:\/\/flightsraw"}},"number":{"$":"485","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns147":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns147":"http:\/\/flightsraw"}},"@id":"id251","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns147:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns147":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:48a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns148":"http:\/\/flightsraw"}},"departureTime":{"$":"11:28p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns148":"http:\/\/flightsraw"}},"number":{"$":"409","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns148":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns148":"http:\/\/flightsraw"}},"@id":"id316","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns148:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns148":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:05a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns149":"http:\/\/flightsraw"}},"departureTime":{"$":"1:49a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns149":"http:\/\/flightsraw"}},"number":{"$":"714","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns149":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns149":"http:\/\/flightsraw"}},"@id":"id273","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns149:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns149":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:57a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns150":"http:\/\/flightsraw"}},"departureTime":{"$":"1:15a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns150":"http:\/\/flightsraw"}},"number":{"$":"861","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns150":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns150":"http:\/\/flightsraw"}},"@id":"id303","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns150:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns150":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"9:53a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns151":"http:\/\/flightsraw"}},"departureTime":{"$":"8:04a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns151":"http:\/\/flightsraw"}},"number":{"$":"687","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns151":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns151":"http:\/\/flightsraw"}},"@id":"id80","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns151:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns151":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:42a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns152":"http:\/\/flightsraw"}},"departureTime":{"$":"3:08a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns152":"http:\/\/flightsraw"}},"number":{"$":"316","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns152":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns152":"http:\/\/flightsraw"}},"@id":"id168","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns152:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns152":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"9:52a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns153":"http:\/\/flightsraw"}},"departureTime":{"$":"6:52a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns153":"http:\/\/flightsraw"}},"number":{"$":"292","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns153":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns153":"http:\/\/flightsraw"}},"@id":"id249","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns153:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns153":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:43a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns154":"http:\/\/flightsraw"}},"departureTime":{"$":"2:04a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns154":"http:\/\/flightsraw"}},"number":{"$":"357","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns154":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns154":"http:\/\/flightsraw"}},"@id":"id131","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns154:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns154":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"8:22p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns155":"http:\/\/flightsraw"}},"departureTime":{"$":"5:12p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns155":"http:\/\/flightsraw"}},"number":{"$":"848","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns155":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns155":"http:\/\/flightsraw"}},"@id":"id165","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns155:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns155":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:33a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns156":"http:\/\/flightsraw"}},"departureTime":{"$":"2:47a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns156":"http:\/\/flightsraw"}},"number":{"$":"649","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns156":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns156":"http:\/\/flightsraw"}},"@id":"id342","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns156:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns156":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:15a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns157":"http:\/\/flightsraw"}},"departureTime":{"$":"3:08a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns157":"http:\/\/flightsraw"}},"number":{"$":"213","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns157":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns157":"http:\/\/flightsraw"}},"@id":"id107","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns157:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns157":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:00a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns158":"http:\/\/flightsraw"}},"departureTime":{"$":"1:06a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns158":"http:\/\/flightsraw"}},"number":{"$":"778","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns158":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns158":"http:\/\/flightsraw"}},"@id":"id333","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns158:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns158":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"11:14p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns159":"http:\/\/flightsraw"}},"departureTime":{"$":"6:34p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns159":"http:\/\/flightsraw"}},"number":{"$":"769","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns159":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns159":"http:\/\/flightsraw"}},"@id":"id297","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns159:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns159":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:25a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns160":"http:\/\/flightsraw"}},"departureTime":{"$":"1:01a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns160":"http:\/\/flightsraw"}},"number":{"$":"891","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns160":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns160":"http:\/\/flightsraw"}},"@id":"id325","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns160:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns160":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"6:51p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns161":"http:\/\/flightsraw"}},"departureTime":{"$":"2:48p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns161":"http:\/\/flightsraw"}},"number":{"$":"672","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns161":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns161":"http:\/\/flightsraw"}},"@id":"id309","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns161:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns161":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:25a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns162":"http:\/\/flightsraw"}},"departureTime":{"$":"2:49a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns162":"http:\/\/flightsraw"}},"number":{"$":"439","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns162":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns162":"http:\/\/flightsraw"}},"@id":"id287","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns162:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns162":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"11:27p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns163":"http:\/\/flightsraw"}},"departureTime":{"$":"8:05p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns163":"http:\/\/flightsraw"}},"number":{"$":"812","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns163":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns163":"http:\/\/flightsraw"}},"@id":"id157","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns163:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns163":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:56a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns164":"http:\/\/flightsraw"}},"departureTime":{"$":"1:06a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns164":"http:\/\/flightsraw"}},"number":{"$":"585","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns164":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns164":"http:\/\/flightsraw"}},"@id":"id336","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns164:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns164":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"10:22p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns165":"http:\/\/flightsraw"}},"departureTime":{"$":"5:42p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns165":"http:\/\/flightsraw"}},"number":{"$":"226","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns165":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns165":"http:\/\/flightsraw"}},"@id":"id134","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns165:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns165":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:57p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns166":"http:\/\/flightsraw"}},"departureTime":{"$":"12:19p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns166":"http:\/\/flightsraw"}},"number":{"$":"898","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns166":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns166":"http:\/\/flightsraw"}},"@id":"id289","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns166:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns166":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:45p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns167":"http:\/\/flightsraw"}},"departureTime":{"$":"2:39p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns167":"http:\/\/flightsraw"}},"number":{"$":"749","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns167":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns167":"http:\/\/flightsraw"}},"@id":"id223","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns167:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns167":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:16p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns168":"http:\/\/flightsraw"}},"departureTime":{"$":"1:10p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns168":"http:\/\/flightsraw"}},"number":{"$":"726","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns168":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns168":"http:\/\/flightsraw"}},"@id":"id162","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns168:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns168":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:37a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns169":"http:\/\/flightsraw"}},"departureTime":{"$":"1:26a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns169":"http:\/\/flightsraw"}},"number":{"$":"919","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns169":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns169":"http:\/\/flightsraw"}},"@id":"id197","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns169:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns169":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"6:20p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns170":"http:\/\/flightsraw"}},"departureTime":{"$":"2:47p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns170":"http:\/\/flightsraw"}},"number":{"$":"372","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns170":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns170":"http:\/\/flightsraw"}},"@id":"id212","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns170:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns170":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:54p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns171":"http:\/\/flightsraw"}},"departureTime":{"$":"3:04p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns171":"http:\/\/flightsraw"}},"number":{"$":"293","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns171":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns171":"http:\/\/flightsraw"}},"@id":"id79","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns171:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns171":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:10a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns172":"http:\/\/flightsraw"}},"departureTime":{"$":"1:56a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns172":"http:\/\/flightsraw"}},"number":{"$":"906","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns172":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns172":"http:\/\/flightsraw"}},"@id":"id166","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns172:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns172":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:46a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns173":"http:\/\/flightsraw"}},"departureTime":{"$":"1:13a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns173":"http:\/\/flightsraw"}},"number":{"$":"212","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns173":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns173":"http:\/\/flightsraw"}},"@id":"id199","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns173:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns173":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:57a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns174":"http:\/\/flightsraw"}},"departureTime":{"$":"3:44a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns174":"http:\/\/flightsraw"}},"number":{"$":"747","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns174":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns174":"http:\/\/flightsraw"}},"@id":"id247","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns174:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns174":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:35a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns175":"http:\/\/flightsraw"}},"departureTime":{"$":"1:47a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns175":"http:\/\/flightsraw"}},"number":{"$":"595","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns175":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns175":"http:\/\/flightsraw"}},"@id":"id174","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns175:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns175":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:08p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns176":"http:\/\/flightsraw"}},"departureTime":{"$":"12:42p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns176":"http:\/\/flightsraw"}},"number":{"$":"647","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns176":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns176":"http:\/\/flightsraw"}},"@id":"id286","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns176:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns176":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"12:20p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns177":"http:\/\/flightsraw"}},"departureTime":{"$":"10:50a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns177":"http:\/\/flightsraw"}},"number":{"$":"404","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns177":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns177":"http:\/\/flightsraw"}},"@id":"id291","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns177:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns177":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:42a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns178":"http:\/\/flightsraw"}},"departureTime":{"$":"1:31a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns178":"http:\/\/flightsraw"}},"number":{"$":"349","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns178":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns178":"http:\/\/flightsraw"}},"@id":"id183","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns178:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns178":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:46a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns179":"http:\/\/flightsraw"}},"departureTime":{"$":"1:57a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns179":"http:\/\/flightsraw"}},"number":{"$":"377","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns179":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns179":"http:\/\/flightsraw"}},"@id":"id181","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns179:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns179":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"10:37p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns180":"http:\/\/flightsraw"}},"departureTime":{"$":"7:49p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns180":"http:\/\/flightsraw"}},"number":{"$":"420","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns180":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns180":"http:\/\/flightsraw"}},"@id":"id106","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns180:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns180":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"12:37a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns181":"http:\/\/flightsraw"}},"departureTime":{"$":"10:35p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns181":"http:\/\/flightsraw"}},"number":{"$":"932","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns181":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns181":"http:\/\/flightsraw"}},"@id":"id149","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns181:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns181":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:37p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns182":"http:\/\/flightsraw"}},"departureTime":{"$":"12:52p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns182":"http:\/\/flightsraw"}},"number":{"$":"891","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns182":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns182":"http:\/\/flightsraw"}},"@id":"id354","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns182:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns182":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"6:30a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns183":"http:\/\/flightsraw"}},"departureTime":{"$":"4:49a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns183":"http:\/\/flightsraw"}},"number":{"$":"823","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns183":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns183":"http:\/\/flightsraw"}},"@id":"id200","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns183:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns183":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:31a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns184":"http:\/\/flightsraw"}},"departureTime":{"$":"1:16a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns184":"http:\/\/flightsraw"}},"number":{"$":"259","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns184":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns184":"http:\/\/flightsraw"}},"@id":"id295","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns184:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns184":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:39a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns185":"http:\/\/flightsraw"}},"departureTime":{"$":"2:23a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns185":"http:\/\/flightsraw"}},"number":{"$":"692","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns185":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns185":"http:\/\/flightsraw"}},"@id":"id345","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns185:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns185":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"8:21p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns186":"http:\/\/flightsraw"}},"departureTime":{"$":"5:25p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns186":"http:\/\/flightsraw"}},"number":{"$":"979","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns186":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns186":"http:\/\/flightsraw"}},"@id":"id347","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns186:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns186":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:57a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns187":"http:\/\/flightsraw"}},"departureTime":{"$":"3:20a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns187":"http:\/\/flightsraw"}},"number":{"$":"299","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns187":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns187":"http:\/\/flightsraw"}},"@id":"id250","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns187:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns187":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"11:46a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns188":"http:\/\/flightsraw"}},"departureTime":{"$":"7:45a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns188":"http:\/\/flightsraw"}},"number":{"$":"269","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns188":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns188":"http:\/\/flightsraw"}},"@id":"id263","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns188:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns188":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"7:23p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns189":"http:\/\/flightsraw"}},"departureTime":{"$":"4:03p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns189":"http:\/\/flightsraw"}},"number":{"$":"847","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns189":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns189":"http:\/\/flightsraw"}},"@id":"id144","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns189:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns189":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:35a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns190":"http:\/\/flightsraw"}},"departureTime":{"$":"2:52a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns190":"http:\/\/flightsraw"}},"number":{"$":"291","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns190":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns190":"http:\/\/flightsraw"}},"@id":"id211","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns190:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns190":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"7:56p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns191":"http:\/\/flightsraw"}},"departureTime":{"$":"4:49p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns191":"http:\/\/flightsraw"}},"number":{"$":"768","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns191":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns191":"http:\/\/flightsraw"}},"@id":"id238","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns191:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns191":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"7:14p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns192":"http:\/\/flightsraw"}},"departureTime":{"$":"4:24p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns192":"http:\/\/flightsraw"}},"number":{"$":"373","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns192":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns192":"http:\/\/flightsraw"}},"@id":"id188","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns192:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns192":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:36p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns193":"http:\/\/flightsraw"}},"departureTime":{"$":"8:54a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns193":"http:\/\/flightsraw"}},"number":{"$":"267","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns193":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns193":"http:\/\/flightsraw"}},"@id":"id96","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns193:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns193":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:44a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns194":"http:\/\/flightsraw"}},"departureTime":{"$":"3:26a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns194":"http:\/\/flightsraw"}},"number":{"$":"339","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns194":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns194":"http:\/\/flightsraw"}},"@id":"id328","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns194:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns194":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"10:53p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns195":"http:\/\/flightsraw"}},"departureTime":{"$":"7:39p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns195":"http:\/\/flightsraw"}},"number":{"$":"871","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns195":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns195":"http:\/\/flightsraw"}},"@id":"id158","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns195:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns195":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"10:38a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns196":"http:\/\/flightsraw"}},"departureTime":{"$":"6:50a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns196":"http:\/\/flightsraw"}},"number":{"$":"718","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns196":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns196":"http:\/\/flightsraw"}},"@id":"id74","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns196:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns196":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"8:52a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns197":"http:\/\/flightsraw"}},"departureTime":{"$":"5:46a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns197":"http:\/\/flightsraw"}},"number":{"$":"239","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns197":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns197":"http:\/\/flightsraw"}},"@id":"id267","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns197:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns197":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:38a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns198":"http:\/\/flightsraw"}},"departureTime":{"$":"1:45a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns198":"http:\/\/flightsraw"}},"number":{"$":"277","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns198":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns198":"http:\/\/flightsraw"}},"@id":"id299","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns198:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns198":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"8:48p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns199":"http:\/\/flightsraw"}},"departureTime":{"$":"4:08p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns199":"http:\/\/flightsraw"}},"number":{"$":"279","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns199":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns199":"http:\/\/flightsraw"}},"@id":"id136","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns199:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns199":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:45a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns200":"http:\/\/flightsraw"}},"departureTime":{"$":"3:09a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns200":"http:\/\/flightsraw"}},"number":{"$":"889","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns200":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns200":"http:\/\/flightsraw"}},"@id":"id126","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns200:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns200":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:16a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns201":"http:\/\/flightsraw"}},"departureTime":{"$":"3:05a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns201":"http:\/\/flightsraw"}},"number":{"$":"994","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns201":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns201":"http:\/\/flightsraw"}},"@id":"id312","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns201:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns201":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:50a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns202":"http:\/\/flightsraw"}},"departureTime":{"$":"1:57a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns202":"http:\/\/flightsraw"}},"number":{"$":"862","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns202":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns202":"http:\/\/flightsraw"}},"@id":"id81","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns202:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns202":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:27a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns203":"http:\/\/flightsraw"}},"departureTime":{"$":"9:25p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns203":"http:\/\/flightsraw"}},"number":{"$":"363","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns203":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns203":"http:\/\/flightsraw"}},"@id":"id310","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns203:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns203":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:41a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns204":"http:\/\/flightsraw"}},"departureTime":{"$":"2:25a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns204":"http:\/\/flightsraw"}},"number":{"$":"273","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns204":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns204":"http:\/\/flightsraw"}},"@id":"id204","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns204:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns204":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"12:28p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns205":"http:\/\/flightsraw"}},"departureTime":{"$":"10:20a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns205":"http:\/\/flightsraw"}},"number":{"$":"625","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns205":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns205":"http:\/\/flightsraw"}},"@id":"id89","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns205:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns205":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"9:20p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns206":"http:\/\/flightsraw"}},"departureTime":{"$":"6:22p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns206":"http:\/\/flightsraw"}},"number":{"$":"945","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns206":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns206":"http:\/\/flightsraw"}},"@id":"id252","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns206:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns206":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:47a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns207":"http:\/\/flightsraw"}},"departureTime":{"$":"3:20a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns207":"http:\/\/flightsraw"}},"number":{"$":"406","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns207":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns207":"http:\/\/flightsraw"}},"@id":"id77","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns207:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns207":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:08a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns208":"http:\/\/flightsraw"}},"departureTime":{"$":"2:18a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns208":"http:\/\/flightsraw"}},"number":{"$":"497","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns208":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns208":"http:\/\/flightsraw"}},"@id":"id177","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns208:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns208":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:33a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns209":"http:\/\/flightsraw"}},"departureTime":{"$":"4:19a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns209":"http:\/\/flightsraw"}},"number":{"$":"746","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns209":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns209":"http:\/\/flightsraw"}},"@id":"id262","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns209:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns209":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"11:17p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns210":"http:\/\/flightsraw"}},"departureTime":{"$":"8:24p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns210":"http:\/\/flightsraw"}},"number":{"$":"823","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns210":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns210":"http:\/\/flightsraw"}},"@id":"id191","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns210:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns210":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"5:48a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns211":"http:\/\/flightsraw"}},"departureTime":{"$":"1:02a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns211":"http:\/\/flightsraw"}},"number":{"$":"332","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns211":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns211":"http:\/\/flightsraw"}},"@id":"id122","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns211:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns211":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"7:30p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns212":"http:\/\/flightsraw"}},"departureTime":{"$":"2:49p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns212":"http:\/\/flightsraw"}},"number":{"$":"549","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns212":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns212":"http:\/\/flightsraw"}},"@id":"id100","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns212:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns212":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"5:18p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns213":"http:\/\/flightsraw"}},"departureTime":{"$":"2:33p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns213":"http:\/\/flightsraw"}},"number":{"$":"609","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns213":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns213":"http:\/\/flightsraw"}},"@id":"id256","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns213:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns213":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:03a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns214":"http:\/\/flightsraw"}},"departureTime":{"$":"9:19p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns214":"http:\/\/flightsraw"}},"number":{"$":"263","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns214":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns214":"http:\/\/flightsraw"}},"@id":"id132","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns214:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns214":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"9:08a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns215":"http:\/\/flightsraw"}},"departureTime":{"$":"7:03a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns215":"http:\/\/flightsraw"}},"number":{"$":"310","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns215":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns215":"http:\/\/flightsraw"}},"@id":"id279","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns215:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns215":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:56a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns216":"http:\/\/flightsraw"}},"departureTime":{"$":"2:41a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns216":"http:\/\/flightsraw"}},"number":{"$":"836","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns216":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns216":"http:\/\/flightsraw"}},"@id":"id147","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns216:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns216":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"6:40a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns217":"http:\/\/flightsraw"}},"departureTime":{"$":"3:53a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns217":"http:\/\/flightsraw"}},"number":{"$":"612","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns217":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns217":"http:\/\/flightsraw"}},"@id":"id194","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns217:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns217":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"10:07p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns218":"http:\/\/flightsraw"}},"departureTime":{"$":"8:28p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns218":"http:\/\/flightsraw"}},"number":{"$":"508","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns218":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns218":"http:\/\/flightsraw"}},"@id":"id231","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns218:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns218":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:53p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns219":"http:\/\/flightsraw"}},"departureTime":{"$":"10:12a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns219":"http:\/\/flightsraw"}},"number":{"$":"753","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns219":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns219":"http:\/\/flightsraw"}},"@id":"id135","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns219:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns219":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:15a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns220":"http:\/\/flightsraw"}},"departureTime":{"$":"3:08a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns220":"http:\/\/flightsraw"}},"number":{"$":"572","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns220":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns220":"http:\/\/flightsraw"}},"@id":"id315","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns220:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns220":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:07a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns221":"http:\/\/flightsraw"}},"departureTime":{"$":"2:28a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns221":"http:\/\/flightsraw"}},"number":{"$":"511","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns221":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns221":"http:\/\/flightsraw"}},"@id":"id176","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns221:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns221":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:01a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns222":"http:\/\/flightsraw"}},"departureTime":{"$":"3:25a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns222":"http:\/\/flightsraw"}},"number":{"$":"832","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns222":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns222":"http:\/\/flightsraw"}},"@id":"id265","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns222:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns222":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:29a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns223":"http:\/\/flightsraw"}},"departureTime":{"$":"12:33a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns223":"http:\/\/flightsraw"}},"number":{"$":"493","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns223":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns223":"http:\/\/flightsraw"}},"@id":"id349","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns223:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns223":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:38a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns224":"http:\/\/flightsraw"}},"departureTime":{"$":"2:10a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns224":"http:\/\/flightsraw"}},"number":{"$":"785","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns224":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns224":"http:\/\/flightsraw"}},"@id":"id172","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns224:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns224":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:51p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns225":"http:\/\/flightsraw"}},"departureTime":{"$":"2:10p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns225":"http:\/\/flightsraw"}},"number":{"$":"940","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns225":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns225":"http:\/\/flightsraw"}},"@id":"id253","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns225:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns225":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"7:24p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns226":"http:\/\/flightsraw"}},"departureTime":{"$":"6:14p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns226":"http:\/\/flightsraw"}},"number":{"$":"767","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns226":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns226":"http:\/\/flightsraw"}},"@id":"id222","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns226:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns226":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"7:57p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns227":"http:\/\/flightsraw"}},"departureTime":{"$":"3:16p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns227":"http:\/\/flightsraw"}},"number":{"$":"707","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns227":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns227":"http:\/\/flightsraw"}},"@id":"id99","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns227:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns227":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:29a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns228":"http:\/\/flightsraw"}},"departureTime":{"$":"3:21a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns228":"http:\/\/flightsraw"}},"number":{"$":"987","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns228":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns228":"http:\/\/flightsraw"}},"@id":"id119","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns228:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns228":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"7:20p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns229":"http:\/\/flightsraw"}},"departureTime":{"$":"2:42p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns229":"http:\/\/flightsraw"}},"number":{"$":"963","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns229":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns229":"http:\/\/flightsraw"}},"@id":"id331","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns229:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns229":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:44a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns230":"http:\/\/flightsraw"}},"departureTime":{"$":"3:00a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns230":"http:\/\/flightsraw"}},"number":{"$":"363","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns230":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns230":"http:\/\/flightsraw"}},"@id":"id141","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns230:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns230":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:40a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns231":"http:\/\/flightsraw"}},"departureTime":{"$":"2:23a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns231":"http:\/\/flightsraw"}},"number":{"$":"774","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns231":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns231":"http:\/\/flightsraw"}},"@id":"id137","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns231:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns231":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:15a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns232":"http:\/\/flightsraw"}},"departureTime":{"$":"2:39a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns232":"http:\/\/flightsraw"}},"number":{"$":"355","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns232":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns232":"http:\/\/flightsraw"}},"@id":"id159","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns232:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns232":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"12:48p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns233":"http:\/\/flightsraw"}},"departureTime":{"$":"11:11a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns233":"http:\/\/flightsraw"}},"number":{"$":"610","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns233":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns233":"http:\/\/flightsraw"}},"@id":"id343","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns233:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns233":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:03a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns234":"http:\/\/flightsraw"}},"departureTime":{"$":"4:11a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns234":"http:\/\/flightsraw"}},"number":{"$":"771","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns234":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns234":"http:\/\/flightsraw"}},"@id":"id335","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns234:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns234":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:18a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns235":"http:\/\/flightsraw"}},"departureTime":{"$":"1:48a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns235":"http:\/\/flightsraw"}},"number":{"$":"388","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns235":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns235":"http:\/\/flightsraw"}},"@id":"id145","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns235:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns235":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"11:54a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns236":"http:\/\/flightsraw"}},"departureTime":{"$":"7:15a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns236":"http:\/\/flightsraw"}},"number":{"$":"920","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns236":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns236":"http:\/\/flightsraw"}},"@id":"id123","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns236:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns236":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"12:42a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns237":"http:\/\/flightsraw"}},"departureTime":{"$":"9:59p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns237":"http:\/\/flightsraw"}},"number":{"$":"589","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns237":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns237":"http:\/\/flightsraw"}},"@id":"id217","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns237:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns237":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:55p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns238":"http:\/\/flightsraw"}},"departureTime":{"$":"2:55p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns238":"http:\/\/flightsraw"}},"number":{"$":"648","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns238":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns238":"http:\/\/flightsraw"}},"@id":"id276","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns238:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns238":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:20a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns239":"http:\/\/flightsraw"}},"departureTime":{"$":"3:38a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns239":"http:\/\/flightsraw"}},"number":{"$":"476","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns239":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns239":"http:\/\/flightsraw"}},"@id":"id154","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns239:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns239":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"10:49a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns240":"http:\/\/flightsraw"}},"departureTime":{"$":"7:05a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns240":"http:\/\/flightsraw"}},"number":{"$":"910","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns240":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns240":"http:\/\/flightsraw"}},"@id":"id75","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns240:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns240":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:14a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns241":"http:\/\/flightsraw"}},"departureTime":{"$":"2:13a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns241":"http:\/\/flightsraw"}},"number":{"$":"804","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns241":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns241":"http:\/\/flightsraw"}},"@id":"id160","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns241:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns241":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:55a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns242":"http:\/\/flightsraw"}},"departureTime":{"$":"3:18a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns242":"http:\/\/flightsraw"}},"number":{"$":"646","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns242":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns242":"http:\/\/flightsraw"}},"@id":"id86","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns242:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns242":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:59a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns243":"http:\/\/flightsraw"}},"departureTime":{"$":"1:37a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns243":"http:\/\/flightsraw"}},"number":{"$":"602","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns243":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns243":"http:\/\/flightsraw"}},"@id":"id180","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns243:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns243":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:08p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns244":"http:\/\/flightsraw"}},"departureTime":{"$":"11:52a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns244":"http:\/\/flightsraw"}},"number":{"$":"716","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns244":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns244":"http:\/\/flightsraw"}},"@id":"id314","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns244:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns244":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:34a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns245":"http:\/\/flightsraw"}},"departureTime":{"$":"2:07a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns245":"http:\/\/flightsraw"}},"number":{"$":"231","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns245":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns245":"http:\/\/flightsraw"}},"@id":"id290","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns245:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns245":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:09a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns246":"http:\/\/flightsraw"}},"departureTime":{"$":"2:13a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns246":"http:\/\/flightsraw"}},"number":{"$":"576","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns246":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns246":"http:\/\/flightsraw"}},"@id":"id95","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns246:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns246":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:12p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns247":"http:\/\/flightsraw"}},"departureTime":{"$":"2:32p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns247":"http:\/\/flightsraw"}},"number":{"$":"378","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns247":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns247":"http:\/\/flightsraw"}},"@id":"id196","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns247:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns247":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:30p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns248":"http:\/\/flightsraw"}},"departureTime":{"$":"12:18p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns248":"http:\/\/flightsraw"}},"number":{"$":"484","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns248":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns248":"http:\/\/flightsraw"}},"@id":"id94","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns248:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns248":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"10:35p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns249":"http:\/\/flightsraw"}},"departureTime":{"$":"8:52p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns249":"http:\/\/flightsraw"}},"number":{"$":"408","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns249":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns249":"http:\/\/flightsraw"}},"@id":"id198","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns249:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns249":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:15a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns250":"http:\/\/flightsraw"}},"departureTime":{"$":"2:38a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns250":"http:\/\/flightsraw"}},"number":{"$":"627","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns250":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns250":"http:\/\/flightsraw"}},"@id":"id318","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns250:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns250":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"9:19p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns251":"http:\/\/flightsraw"}},"departureTime":{"$":"8:09p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns251":"http:\/\/flightsraw"}},"number":{"$":"547","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns251":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns251":"http:\/\/flightsraw"}},"@id":"id220","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns251:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns251":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:23a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns252":"http:\/\/flightsraw"}},"departureTime":{"$":"3:11a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns252":"http:\/\/flightsraw"}},"number":{"$":"318","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns252":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns252":"http:\/\/flightsraw"}},"@id":"id216","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns252:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns252":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:03p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns253":"http:\/\/flightsraw"}},"departureTime":{"$":"11:52a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns253":"http:\/\/flightsraw"}},"number":{"$":"544","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns253":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns253":"http:\/\/flightsraw"}},"@id":"id161","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns253:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns253":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:38a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns254":"http:\/\/flightsraw"}},"departureTime":{"$":"3:41a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns254":"http:\/\/flightsraw"}},"number":{"$":"454","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns254":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns254":"http:\/\/flightsraw"}},"@id":"id232","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns254:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns254":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:30a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns255":"http:\/\/flightsraw"}},"departureTime":{"$":"1:45a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns255":"http:\/\/flightsraw"}},"number":{"$":"538","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns255":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns255":"http:\/\/flightsraw"}},"@id":"id214","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns255:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns255":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:42a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns256":"http:\/\/flightsraw"}},"departureTime":{"$":"3:13a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns256":"http:\/\/flightsraw"}},"number":{"$":"598","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns256":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns256":"http:\/\/flightsraw"}},"@id":"id127","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns256:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns256":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"10:42a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns257":"http:\/\/flightsraw"}},"departureTime":{"$":"7:31a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns257":"http:\/\/flightsraw"}},"number":{"$":"436","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns257":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns257":"http:\/\/flightsraw"}},"@id":"id266","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns257:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns257":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:58a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns258":"http:\/\/flightsraw"}},"departureTime":{"$":"3:33a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns258":"http:\/\/flightsraw"}},"number":{"$":"536","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns258":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns258":"http:\/\/flightsraw"}},"@id":"id264","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns258:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns258":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"10:39p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns259":"http:\/\/flightsraw"}},"departureTime":{"$":"6:48p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns259":"http:\/\/flightsraw"}},"number":{"$":"897","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns259":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns259":"http:\/\/flightsraw"}},"@id":"id225","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns259:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns259":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:37a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns260":"http:\/\/flightsraw"}},"departureTime":{"$":"2:53a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns260":"http:\/\/flightsraw"}},"number":{"$":"246","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns260":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns260":"http:\/\/flightsraw"}},"@id":"id353","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns260:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns260":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"7:51a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns261":"http:\/\/flightsraw"}},"departureTime":{"$":"3:17a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns261":"http:\/\/flightsraw"}},"number":{"$":"654","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns261":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns261":"http:\/\/flightsraw"}},"@id":"id296","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns261:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns261":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:43a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns262":"http:\/\/flightsraw"}},"departureTime":{"$":"1:26a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns262":"http:\/\/flightsraw"}},"number":{"$":"673","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns262":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns262":"http:\/\/flightsraw"}},"@id":"id352","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns262:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns262":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:38a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns263":"http:\/\/flightsraw"}},"departureTime":{"$":"2:52a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns263":"http:\/\/flightsraw"}},"number":{"$":"244","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns263":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns263":"http:\/\/flightsraw"}},"@id":"id175","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns263:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns263":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"8:35p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns264":"http:\/\/flightsraw"}},"departureTime":{"$":"5:37p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns264":"http:\/\/flightsraw"}},"number":{"$":"369","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns264":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns264":"http:\/\/flightsraw"}},"@id":"id88","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns264:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns264":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"10:13a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns265":"http:\/\/flightsraw"}},"departureTime":{"$":"7:08a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns265":"http:\/\/flightsraw"}},"number":{"$":"771","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns265":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns265":"http:\/\/flightsraw"}},"@id":"id235","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns265:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns265":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"6:05a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns266":"http:\/\/flightsraw"}},"departureTime":{"$":"3:09a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns266":"http:\/\/flightsraw"}},"number":{"$":"361","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns266":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns266":"http:\/\/flightsraw"}},"@id":"id245","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns266:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns266":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:05a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns267":"http:\/\/flightsraw"}},"departureTime":{"$":"1:28a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns267":"http:\/\/flightsraw"}},"number":{"$":"371","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns267":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns267":"http:\/\/flightsraw"}},"@id":"id178","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns267:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns267":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"5:33p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns268":"http:\/\/flightsraw"}},"departureTime":{"$":"1:52p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns268":"http:\/\/flightsraw"}},"number":{"$":"715","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns268":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns268":"http:\/\/flightsraw"}},"@id":"id182","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns268:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns268":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"5:36p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns269":"http:\/\/flightsraw"}},"departureTime":{"$":"2:41p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns269":"http:\/\/flightsraw"}},"number":{"$":"714","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns269":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns269":"http:\/\/flightsraw"}},"@id":"id85","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns269:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns269":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"8:27p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns270":"http:\/\/flightsraw"}},"departureTime":{"$":"3:45p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns270":"http:\/\/flightsraw"}},"number":{"$":"365","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns270":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns270":"http:\/\/flightsraw"}},"@id":"id133","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns270:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns270":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"10:53p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns271":"http:\/\/flightsraw"}},"departureTime":{"$":"7:12p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns271":"http:\/\/flightsraw"}},"number":{"$":"576","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns271":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns271":"http:\/\/flightsraw"}},"@id":"id351","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns271:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns271":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:42a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns272":"http:\/\/flightsraw"}},"departureTime":{"$":"3:26a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns272":"http:\/\/flightsraw"}},"number":{"$":"616","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns272":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns272":"http:\/\/flightsraw"}},"@id":"id233","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns272:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns272":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:01p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns273":"http:\/\/flightsraw"}},"departureTime":{"$":"1:59p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns273":"http:\/\/flightsraw"}},"number":{"$":"892","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns273":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns273":"http:\/\/flightsraw"}},"@id":"id277","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns273:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns273":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:42p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns274":"http:\/\/flightsraw"}},"departureTime":{"$":"12:08p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns274":"http:\/\/flightsraw"}},"number":{"$":"302","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns274":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns274":"http:\/\/flightsraw"}},"@id":"id259","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns274:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns274":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:21a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns275":"http:\/\/flightsraw"}},"departureTime":{"$":"3:19a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns275":"http:\/\/flightsraw"}},"number":{"$":"509","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns275":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns275":"http:\/\/flightsraw"}},"@id":"id155","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns275:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns275":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:26a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns276":"http:\/\/flightsraw"}},"departureTime":{"$":"1:35a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns276":"http:\/\/flightsraw"}},"number":{"$":"970","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns276":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns276":"http:\/\/flightsraw"}},"@id":"id153","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns276:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns276":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"12:26p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns277":"http:\/\/flightsraw"}},"departureTime":{"$":"9:27a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns277":"http:\/\/flightsraw"}},"number":{"$":"870","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns277":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns277":"http:\/\/flightsraw"}},"@id":"id244","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns277:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns277":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:34a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns278":"http:\/\/flightsraw"}},"departureTime":{"$":"1:49a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns278":"http:\/\/flightsraw"}},"number":{"$":"994","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns278":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns278":"http:\/\/flightsraw"}},"@id":"id338","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns278:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns278":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:26a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns279":"http:\/\/flightsraw"}},"departureTime":{"$":"11:24p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns279":"http:\/\/flightsraw"}},"number":{"$":"733","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns279":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns279":"http:\/\/flightsraw"}},"@id":"id302","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns279:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns279":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:57a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns280":"http:\/\/flightsraw"}},"departureTime":{"$":"3:40a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns280":"http:\/\/flightsraw"}},"number":{"$":"370","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns280":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns280":"http:\/\/flightsraw"}},"@id":"id300","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns280:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns280":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"10:16a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns281":"http:\/\/flightsraw"}},"departureTime":{"$":"9:04a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns281":"http:\/\/flightsraw"}},"number":{"$":"267","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns281":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns281":"http:\/\/flightsraw"}},"@id":"id108","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns281:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns281":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:26a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns282":"http:\/\/flightsraw"}},"departureTime":{"$":"1:22a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns282":"http:\/\/flightsraw"}},"number":{"$":"724","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns282":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns282":"http:\/\/flightsraw"}},"@id":"id324","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns282:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns282":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:03a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns283":"http:\/\/flightsraw"}},"departureTime":{"$":"2:03a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns283":"http:\/\/flightsraw"}},"number":{"$":"842","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns283":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns283":"http:\/\/flightsraw"}},"@id":"id271","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns283:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns283":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:03a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns284":"http:\/\/flightsraw"}},"departureTime":{"$":"1:49a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns284":"http:\/\/flightsraw"}},"number":{"$":"630","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns284":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns284":"http:\/\/flightsraw"}},"@id":"id221","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns284:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns284":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:42a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns285":"http:\/\/flightsraw"}},"departureTime":{"$":"1:52a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns285":"http:\/\/flightsraw"}},"number":{"$":"565","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns285":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns285":"http:\/\/flightsraw"}},"@id":"id104","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns285:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns285":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"7:36p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns286":"http:\/\/flightsraw"}},"departureTime":{"$":"6:01p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns286":"http:\/\/flightsraw"}},"number":{"$":"933","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns286":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns286":"http:\/\/flightsraw"}},"@id":"id293","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns286:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns286":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"12:20a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns287":"http:\/\/flightsraw"}},"departureTime":{"$":"9:16p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns287":"http:\/\/flightsraw"}},"number":{"$":"348","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns287":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns287":"http:\/\/flightsraw"}},"@id":"id242","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns287:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns287":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"9:37p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns288":"http:\/\/flightsraw"}},"departureTime":{"$":"5:34p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns288":"http:\/\/flightsraw"}},"number":{"$":"356","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns288":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns288":"http:\/\/flightsraw"}},"@id":"id305","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns288:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns288":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"7:23p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns289":"http:\/\/flightsraw"}},"departureTime":{"$":"4:00p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns289":"http:\/\/flightsraw"}},"number":{"$":"963","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns289":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns289":"http:\/\/flightsraw"}},"@id":"id146","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns289:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns289":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:39a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns290":"http:\/\/flightsraw"}},"departureTime":{"$":"11:25p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns290":"http:\/\/flightsraw"}},"number":{"$":"919","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns290":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns290":"http:\/\/flightsraw"}},"@id":"id92","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns290:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns290":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:15a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns291":"http:\/\/flightsraw"}},"departureTime":{"$":"2:06a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns291":"http:\/\/flightsraw"}},"number":{"$":"708","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns291":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns291":"http:\/\/flightsraw"}},"@id":"id164","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns291:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns291":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"8:35p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns292":"http:\/\/flightsraw"}},"departureTime":{"$":"6:18p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns292":"http:\/\/flightsraw"}},"number":{"$":"823","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns292":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns292":"http:\/\/flightsraw"}},"@id":"id118","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns292:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns292":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:59a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns293":"http:\/\/flightsraw"}},"departureTime":{"$":"2:45a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns293":"http:\/\/flightsraw"}},"number":{"$":"563","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns293":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns293":"http:\/\/flightsraw"}},"@id":"id281","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns293:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns293":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:45a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns294":"http:\/\/flightsraw"}},"departureTime":{"$":"3:31a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns294":"http:\/\/flightsraw"}},"number":{"$":"883","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns294":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns294":"http:\/\/flightsraw"}},"@id":"id121","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns294:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns294":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:46a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns295":"http:\/\/flightsraw"}},"departureTime":{"$":"2:35a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns295":"http:\/\/flightsraw"}},"number":{"$":"210","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns295":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns295":"http:\/\/flightsraw"}},"@id":"id205","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns295:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns295":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:11p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns296":"http:\/\/flightsraw"}},"departureTime":{"$":"12:41p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns296":"http:\/\/flightsraw"}},"number":{"$":"763","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns296":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns296":"http:\/\/flightsraw"}},"@id":"id215","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns296:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns296":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"9:39p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns297":"http:\/\/flightsraw"}},"departureTime":{"$":"6:13p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns297":"http:\/\/flightsraw"}},"number":{"$":"689","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns297":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns297":"http:\/\/flightsraw"}},"@id":"id156","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns297:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns297":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"5:39a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns298":"http:\/\/flightsraw"}},"departureTime":{"$":"1:46a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns298":"http:\/\/flightsraw"}},"number":{"$":"476","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns298":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns298":"http:\/\/flightsraw"}},"@id":"id111","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns298:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns298":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:38a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns299":"http:\/\/flightsraw"}},"departureTime":{"$":"1:22a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns299":"http:\/\/flightsraw"}},"number":{"$":"370","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns299":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns299":"http:\/\/flightsraw"}},"@id":"id292","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns299:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns299":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:42a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns300":"http:\/\/flightsraw"}},"departureTime":{"$":"1:37a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns300":"http:\/\/flightsraw"}},"number":{"$":"581","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns300":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns300":"http:\/\/flightsraw"}},"@id":"id257","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns300:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns300":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:09a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns301":"http:\/\/flightsraw"}},"departureTime":{"$":"3:10a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns301":"http:\/\/flightsraw"}},"number":{"$":"613","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns301":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns301":"http:\/\/flightsraw"}},"@id":"id91","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns301:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns301":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:42a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns302":"http:\/\/flightsraw"}},"departureTime":{"$":"3:01a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns302":"http:\/\/flightsraw"}},"number":{"$":"699","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns302":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns302":"http:\/\/flightsraw"}},"@id":"id219","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns302:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns302":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:06a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns303":"http:\/\/flightsraw"}},"departureTime":{"$":"3:14a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns303":"http:\/\/flightsraw"}},"number":{"$":"732","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns303":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns303":"http:\/\/flightsraw"}},"@id":"id167","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns303:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns303":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:29a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns304":"http:\/\/flightsraw"}},"departureTime":{"$":"2:35a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns304":"http:\/\/flightsraw"}},"number":{"$":"629","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns304":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns304":"http:\/\/flightsraw"}},"@id":"id260","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns304:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns304":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"11:05a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns305":"http:\/\/flightsraw"}},"departureTime":{"$":"8:15a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns305":"http:\/\/flightsraw"}},"number":{"$":"680","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns305":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns305":"http:\/\/flightsraw"}},"@id":"id83","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns305:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns305":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"12:50a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns306":"http:\/\/flightsraw"}},"departureTime":{"$":"10:01p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns306":"http:\/\/flightsraw"}},"number":{"$":"499","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns306":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns306":"http:\/\/flightsraw"}},"@id":"id348","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns306:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns306":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"7:15a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns307":"http:\/\/flightsraw"}},"departureTime":{"$":"3:55a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns307":"http:\/\/flightsraw"}},"number":{"$":"862","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns307":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns307":"http:\/\/flightsraw"}},"@id":"id313","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns307:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns307":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:29a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns308":"http:\/\/flightsraw"}},"departureTime":{"$":"11:03p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns308":"http:\/\/flightsraw"}},"number":{"$":"223","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns308":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns308":"http:\/\/flightsraw"}},"@id":"id261","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns308:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns308":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:35a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns309":"http:\/\/flightsraw"}},"departureTime":{"$":"1:47a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns309":"http:\/\/flightsraw"}},"number":{"$":"671","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns309":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns309":"http:\/\/flightsraw"}},"@id":"id340","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns309:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns309":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:43a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns310":"http:\/\/flightsraw"}},"departureTime":{"$":"1:17a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns310":"http:\/\/flightsraw"}},"number":{"$":"945","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns310":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns310":"http:\/\/flightsraw"}},"@id":"id327","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns310:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns310":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:52a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns311":"http:\/\/flightsraw"}},"departureTime":{"$":"11:36p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns311":"http:\/\/flightsraw"}},"number":{"$":"937","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns311":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns311":"http:\/\/flightsraw"}},"@id":"id317","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns311:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns311":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"10:09p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns312":"http:\/\/flightsraw"}},"departureTime":{"$":"6:15p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns312":"http:\/\/flightsraw"}},"number":{"$":"886","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns312":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns312":"http:\/\/flightsraw"}},"@id":"id112","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns312:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns312":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:58p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns313":"http:\/\/flightsraw"}},"departureTime":{"$":"11:13a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns313":"http:\/\/flightsraw"}},"number":{"$":"639","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns313":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns313":"http:\/\/flightsraw"}},"@id":"id120","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns313:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns313":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"11:17a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns314":"http:\/\/flightsraw"}},"departureTime":{"$":"7:11a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns314":"http:\/\/flightsraw"}},"number":{"$":"422","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns314":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns314":"http:\/\/flightsraw"}},"@id":"id308","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns314:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns314":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"11:17p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns315":"http:\/\/flightsraw"}},"departureTime":{"$":"9:34p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns315":"http:\/\/flightsraw"}},"number":{"$":"294","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns315":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns315":"http:\/\/flightsraw"}},"@id":"id229","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns315:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns315":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:06a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns316":"http:\/\/flightsraw"}},"departureTime":{"$":"3:48a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns316":"http:\/\/flightsraw"}},"number":{"$":"978","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns316":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns316":"http:\/\/flightsraw"}},"@id":"id163","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns316:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns316":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"11:44p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns317":"http:\/\/flightsraw"}},"departureTime":{"$":"10:10p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns317":"http:\/\/flightsraw"}},"number":{"$":"825","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns317":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns317":"http:\/\/flightsraw"}},"@id":"id344","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns317:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns317":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:37a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns318":"http:\/\/flightsraw"}},"departureTime":{"$":"3:52a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns318":"http:\/\/flightsraw"}},"number":{"$":"221","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns318":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns318":"http:\/\/flightsraw"}},"@id":"id294","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns318:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns318":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:47a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns319":"http:\/\/flightsraw"}},"departureTime":{"$":"3:09a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns319":"http:\/\/flightsraw"}},"number":{"$":"429","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns319":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns319":"http:\/\/flightsraw"}},"@id":"id203","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns319:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns319":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:54a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns320":"http:\/\/flightsraw"}},"departureTime":{"$":"1:26a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns320":"http:\/\/flightsraw"}},"number":{"$":"680","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns320":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns320":"http:\/\/flightsraw"}},"@id":"id84","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns320:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns320":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:50a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns321":"http:\/\/flightsraw"}},"departureTime":{"$":"1:24a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns321":"http:\/\/flightsraw"}},"number":{"$":"743","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns321":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns321":"http:\/\/flightsraw"}},"@id":"id76","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns321:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns321":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:15p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns322":"http:\/\/flightsraw"}},"departureTime":{"$":"9:31a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns322":"http:\/\/flightsraw"}},"number":{"$":"339","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns322":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns322":"http:\/\/flightsraw"}},"@id":"id323","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns322:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns322":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:11p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns323":"http:\/\/flightsraw"}},"departureTime":{"$":"12:49p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns323":"http:\/\/flightsraw"}},"number":{"$":"340","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns323":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns323":"http:\/\/flightsraw"}},"@id":"id285","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns323:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns323":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:43p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns324":"http:\/\/flightsraw"}},"departureTime":{"$":"9:59a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns324":"http:\/\/flightsraw"}},"number":{"$":"633","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns324":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns324":"http:\/\/flightsraw"}},"@id":"id322","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns324:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns324":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:56a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns325":"http:\/\/flightsraw"}},"departureTime":{"$":"2:03a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns325":"http:\/\/flightsraw"}},"number":{"$":"759","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns325":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns325":"http:\/\/flightsraw"}},"@id":"id150","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns325:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns325":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:51a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns326":"http:\/\/flightsraw"}},"departureTime":{"$":"2:14a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns326":"http:\/\/flightsraw"}},"number":{"$":"833","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns326":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns326":"http:\/\/flightsraw"}},"@id":"id192","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns326:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns326":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:50a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns327":"http:\/\/flightsraw"}},"departureTime":{"$":"3:53a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns327":"http:\/\/flightsraw"}},"number":{"$":"311","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns327":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns327":"http:\/\/flightsraw"}},"@id":"id101","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns327:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns327":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:50a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns328":"http:\/\/flightsraw"}},"departureTime":{"$":"2:48a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns328":"http:\/\/flightsraw"}},"number":{"$":"486","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns328":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns328":"http:\/\/flightsraw"}},"@id":"id116","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns328:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns328":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:02p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns329":"http:\/\/flightsraw"}},"departureTime":{"$":"9:30a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns329":"http:\/\/flightsraw"}},"number":{"$":"813","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns329":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns329":"http:\/\/flightsraw"}},"@id":"id210","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns329:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns329":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:48a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns330":"http:\/\/flightsraw"}},"departureTime":{"$":"2:49a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns330":"http:\/\/flightsraw"}},"number":{"$":"796","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns330":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns330":"http:\/\/flightsraw"}},"@id":"id321","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns330:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns330":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:08a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns331":"http:\/\/flightsraw"}},"departureTime":{"$":"2:29a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns331":"http:\/\/flightsraw"}},"number":{"$":"449","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns331":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns331":"http:\/\/flightsraw"}},"@id":"id272","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns331:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns331":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:18a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns332":"http:\/\/flightsraw"}},"departureTime":{"$":"2:43a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns332":"http:\/\/flightsraw"}},"number":{"$":"329","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns332":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns332":"http:\/\/flightsraw"}},"@id":"id143","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns332:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns332":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:48a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns333":"http:\/\/flightsraw"}},"departureTime":{"$":"2:40a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns333":"http:\/\/flightsraw"}},"number":{"$":"675","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns333":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns333":"http:\/\/flightsraw"}},"@id":"id224","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns333:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns333":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"9:01p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns334":"http:\/\/flightsraw"}},"departureTime":{"$":"7:20p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns334":"http:\/\/flightsraw"}},"number":{"$":"447","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns334":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns334":"http:\/\/flightsraw"}},"@id":"id138","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns334:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns334":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:48a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns335":"http:\/\/flightsraw"}},"departureTime":{"$":"4:06a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns335":"http:\/\/flightsraw"}},"number":{"$":"503","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns335":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns335":"http:\/\/flightsraw"}},"@id":"id124","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns335:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns335":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:43a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns336":"http:\/\/flightsraw"}},"departureTime":{"$":"1:01a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns336":"http:\/\/flightsraw"}},"number":{"$":"688","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns336":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns336":"http:\/\/flightsraw"}},"@id":"id130","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns336:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns336":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"10:56a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns337":"http:\/\/flightsraw"}},"departureTime":{"$":"7:43a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns337":"http:\/\/flightsraw"}},"number":{"$":"294","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns337":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns337":"http:\/\/flightsraw"}},"@id":"id311","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns337:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns337":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:19p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns338":"http:\/\/flightsraw"}},"departureTime":{"$":"11:54a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns338":"http:\/\/flightsraw"}},"number":{"$":"900","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns338":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns338":"http:\/\/flightsraw"}},"@id":"id227","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns338:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns338":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:13a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns339":"http:\/\/flightsraw"}},"departureTime":{"$":"11:08p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns339":"http:\/\/flightsraw"}},"number":{"$":"542","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns339":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns339":"http:\/\/flightsraw"}},"@id":"id241","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns339:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns339":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:41a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns340":"http:\/\/flightsraw"}},"departureTime":{"$":"4:02a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns340":"http:\/\/flightsraw"}},"number":{"$":"461","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns340":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns340":"http:\/\/flightsraw"}},"@id":"id184","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns340:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns340":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:32a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns341":"http:\/\/flightsraw"}},"departureTime":{"$":"12:27a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns341":"http:\/\/flightsraw"}},"number":{"$":"646","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns341":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns341":"http:\/\/flightsraw"}},"@id":"id275","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns341:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns341":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"11:53a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns342":"http:\/\/flightsraw"}},"departureTime":{"$":"7:13a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns342":"http:\/\/flightsraw"}},"number":{"$":"409","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns342":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns342":"http:\/\/flightsraw"}},"@id":"id332","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns342:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns342":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:01a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns343":"http:\/\/flightsraw"}},"departureTime":{"$":"3:30a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns343":"http:\/\/flightsraw"}},"number":{"$":"295","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns343":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns343":"http:\/\/flightsraw"}},"@id":"id243","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns343:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns343":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:00a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns344":"http:\/\/flightsraw"}},"departureTime":{"$":"3:17a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns344":"http:\/\/flightsraw"}},"number":{"$":"298","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns344":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns344":"http:\/\/flightsraw"}},"@id":"id334","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns344:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns344":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:41a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns345":"http:\/\/flightsraw"}},"departureTime":{"$":"2:32a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns345":"http:\/\/flightsraw"}},"number":{"$":"946","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns345":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns345":"http:\/\/flightsraw"}},"@id":"id98","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns345:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns345":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:05a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns346":"http:\/\/flightsraw"}},"departureTime":{"$":"3:08a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns346":"http:\/\/flightsraw"}},"number":{"$":"806","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns346":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns346":"http:\/\/flightsraw"}},"@id":"id282","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns346:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns346":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:16p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns347":"http:\/\/flightsraw"}},"departureTime":{"$":"10:53a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns347":"http:\/\/flightsraw"}},"number":{"$":"405","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns347":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns347":"http:\/\/flightsraw"}},"@id":"id213","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns347:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns347":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:50p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns348":"http:\/\/flightsraw"}},"departureTime":{"$":"10:45a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns348":"http:\/\/flightsraw"}},"number":{"$":"876","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns348":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns348":"http:\/\/flightsraw"}},"@id":"id270","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns348:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns348":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"6:59p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns349":"http:\/\/flightsraw"}},"departureTime":{"$":"4:16p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns349":"http:\/\/flightsraw"}},"number":{"$":"633","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns349":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns349":"http:\/\/flightsraw"}},"@id":"id255","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns349:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns349":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"10:27p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns350":"http:\/\/flightsraw"}},"departureTime":{"$":"8:44p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns350":"http:\/\/flightsraw"}},"number":{"$":"852","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns350":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns350":"http:\/\/flightsraw"}},"@id":"id142","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns350:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns350":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:39a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns351":"http:\/\/flightsraw"}},"departureTime":{"$":"4:05a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns351":"http:\/\/flightsraw"}},"number":{"$":"624","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns351":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns351":"http:\/\/flightsraw"}},"@id":"id330","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns351:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns351":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"8:19a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns352":"http:\/\/flightsraw"}},"departureTime":{"$":"4:16a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns352":"http:\/\/flightsraw"}},"number":{"$":"775","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns352":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns352":"http:\/\/flightsraw"}},"@id":"id307","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns352:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns352":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:39a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns353":"http:\/\/flightsraw"}},"departureTime":{"$":"9:01p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns353":"http:\/\/flightsraw"}},"number":{"$":"757","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns353":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns353":"http:\/\/flightsraw"}},"@id":"id170","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns353:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns353":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:36a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns354":"http:\/\/flightsraw"}},"departureTime":{"$":"1:03a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns354":"http:\/\/flightsraw"}},"number":{"$":"939","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns354":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns354":"http:\/\/flightsraw"}},"@id":"id258","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns354:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns354":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:09a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns355":"http:\/\/flightsraw"}},"departureTime":{"$":"2:42a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns355":"http:\/\/flightsraw"}},"number":{"$":"530","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns355":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns355":"http:\/\/flightsraw"}},"@id":"id239","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns355:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns355":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:43a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns356":"http:\/\/flightsraw"}},"departureTime":{"$":"2:09a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns356":"http:\/\/flightsraw"}},"number":{"$":"587","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns356":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns356":"http:\/\/flightsraw"}},"@id":"id346","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns356:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns356":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:38a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns357":"http:\/\/flightsraw"}},"departureTime":{"$":"2:12a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns357":"http:\/\/flightsraw"}},"number":{"$":"842","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns357":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns357":"http:\/\/flightsraw"}},"@id":"id202","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns357:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns357":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:14a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns358":"http:\/\/flightsraw"}},"departureTime":{"$":"3:30a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns358":"http:\/\/flightsraw"}},"number":{"$":"293","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns358":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns358":"http:\/\/flightsraw"}},"@id":"id109","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns358:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns358":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:52p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns359":"http:\/\/flightsraw"}},"departureTime":{"$":"2:28p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns359":"http:\/\/flightsraw"}},"number":{"$":"600","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns359":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns359":"http:\/\/flightsraw"}},"@id":"id228","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns359:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns359":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"8:50p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns360":"http:\/\/flightsraw"}},"departureTime":{"$":"6:07p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns360":"http:\/\/flightsraw"}},"number":{"$":"313","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns360":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns360":"http:\/\/flightsraw"}},"@id":"id105","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns360:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns360":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:28a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns361":"http:\/\/flightsraw"}},"departureTime":{"$":"3:34a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns361":"http:\/\/flightsraw"}},"number":{"$":"904","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns361":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns361":"http:\/\/flightsraw"}},"@id":"id186","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns361:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns361":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:27a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns362":"http:\/\/flightsraw"}},"departureTime":{"$":"2:06a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns362":"http:\/\/flightsraw"}},"number":{"$":"820","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns362":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns362":"http:\/\/flightsraw"}},"@id":"id185","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns362:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns362":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:37a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns363":"http:\/\/flightsraw"}},"departureTime":{"$":"3:34a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns363":"http:\/\/flightsraw"}},"number":{"$":"255","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns363":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns363":"http:\/\/flightsraw"}},"@id":"id208","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns363:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns363":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:29a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns364":"http:\/\/flightsraw"}},"departureTime":{"$":"4:19a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns364":"http:\/\/flightsraw"}},"number":{"$":"260","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns364":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns364":"http:\/\/flightsraw"}},"@id":"id209","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns364:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns364":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"6:01a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns365":"http:\/\/flightsraw"}},"departureTime":{"$":"4:15a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns365":"http:\/\/flightsraw"}},"number":{"$":"840","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns365":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns365":"http:\/\/flightsraw"}},"@id":"id230","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns365:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns365":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:49a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns366":"http:\/\/flightsraw"}},"departureTime":{"$":"2:36a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns366":"http:\/\/flightsraw"}},"number":{"$":"680","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns366":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns366":"http:\/\/flightsraw"}},"@id":"id195","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns366:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns366":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:35a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns367":"http:\/\/flightsraw"}},"departureTime":{"$":"2:07a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns367":"http:\/\/flightsraw"}},"number":{"$":"939","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns367":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns367":"http:\/\/flightsraw"}},"@id":"id171","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns367:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns367":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:44a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns368":"http:\/\/flightsraw"}},"departureTime":{"$":"4:04a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns368":"http:\/\/flightsraw"}},"number":{"$":"504","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns368":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns368":"http:\/\/flightsraw"}},"@id":"id254","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns368:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns368":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:28p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns369":"http:\/\/flightsraw"}},"departureTime":{"$":"11:48a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns369":"http:\/\/flightsraw"}},"number":{"$":"465","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns369":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns369":"http:\/\/flightsraw"}},"@id":"id129","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns369:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns369":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:25a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns370":"http:\/\/flightsraw"}},"departureTime":{"$":"3:11a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns370":"http:\/\/flightsraw"}},"number":{"$":"270","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns370":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns370":"http:\/\/flightsraw"}},"@id":"id288","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns370:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns370":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:51a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns371":"http:\/\/flightsraw"}},"departureTime":{"$":"1:21a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns371":"http:\/\/flightsraw"}},"number":{"$":"253","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns371":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns371":"http:\/\/flightsraw"}},"@id":"id189","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns371:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns371":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:38a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns372":"http:\/\/flightsraw"}},"departureTime":{"$":"2:00a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns372":"http:\/\/flightsraw"}},"number":{"$":"291","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns372":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns372":"http:\/\/flightsraw"}},"@id":"id97","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns372:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns372":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:54a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns373":"http:\/\/flightsraw"}},"departureTime":{"$":"2:48a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns373":"http:\/\/flightsraw"}},"number":{"$":"827","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns373":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns373":"http:\/\/flightsraw"}},"@id":"id113","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns373:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns373":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:20a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns374":"http:\/\/flightsraw"}},"departureTime":{"$":"1:08a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns374":"http:\/\/flightsraw"}},"number":{"$":"573","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns374":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns374":"http:\/\/flightsraw"}},"@id":"id117","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns374:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns374":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:07a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns375":"http:\/\/flightsraw"}},"departureTime":{"$":"1:10a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns375":"http:\/\/flightsraw"}},"number":{"$":"404","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns375":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns375":"http:\/\/flightsraw"}},"@id":"id234","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns375:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns375":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:38a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns376":"http:\/\/flightsraw"}},"departureTime":{"$":"1:34a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns376":"http:\/\/flightsraw"}},"number":{"$":"706","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns376":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns376":"http:\/\/flightsraw"}},"@id":"id207","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns376:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns376":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"6:18p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns377":"http:\/\/flightsraw"}},"departureTime":{"$":"1:35p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns377":"http:\/\/flightsraw"}},"number":{"$":"217","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns377":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns377":"http:\/\/flightsraw"}},"@id":"id329","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns377:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns377":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:32a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns378":"http:\/\/flightsraw"}},"departureTime":{"$":"2:51a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns378":"http:\/\/flightsraw"}},"number":{"$":"490","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns378":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns378":"http:\/\/flightsraw"}},"@id":"id298","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns378:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns378":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"10:35a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns379":"http:\/\/flightsraw"}},"departureTime":{"$":"6:50a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns379":"http:\/\/flightsraw"}},"number":{"$":"733","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns379":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns379":"http:\/\/flightsraw"}},"@id":"id226","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns379:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns379":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:54a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns380":"http:\/\/flightsraw"}},"departureTime":{"$":"2:40a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns380":"http:\/\/flightsraw"}},"number":{"$":"793","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns380":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns380":"http:\/\/flightsraw"}},"@id":"id115","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns380:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns380":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:51p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns381":"http:\/\/flightsraw"}},"departureTime":{"$":"12:37p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns381":"http:\/\/flightsraw"}},"number":{"$":"683","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns381":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns381":"http:\/\/flightsraw"}},"@id":"id90","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns381:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns381":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"11:00p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns382":"http:\/\/flightsraw"}},"departureTime":{"$":"9:21p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns382":"http:\/\/flightsraw"}},"number":{"$":"620","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns382":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns382":"http:\/\/flightsraw"}},"@id":"id339","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns382:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns382":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"11:13a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns383":"http:\/\/flightsraw"}},"departureTime":{"$":"8:39a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns383":"http:\/\/flightsraw"}},"number":{"$":"330","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns383":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns383":"http:\/\/flightsraw"}},"@id":"id187","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns383:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns383":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:02a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns384":"http:\/\/flightsraw"}},"departureTime":{"$":"4:10a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns384":"http:\/\/flightsraw"}},"number":{"$":"402","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns384":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns384":"http:\/\/flightsraw"}},"@id":"id237","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns384:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns384":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:01a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns385":"http:\/\/flightsraw"}},"departureTime":{"$":"3:51a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns385":"http:\/\/flightsraw"}},"number":{"$":"740","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns385":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns385":"http:\/\/flightsraw"}},"@id":"id151","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns385:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns385":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:45a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns386":"http:\/\/flightsraw"}},"departureTime":{"$":"10:17p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns386":"http:\/\/flightsraw"}},"number":{"$":"742","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns386":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns386":"http:\/\/flightsraw"}},"@id":"id284","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns386:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns386":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"12:41p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns387":"http:\/\/flightsraw"}},"departureTime":{"$":"10:28a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns387":"http:\/\/flightsraw"}},"number":{"$":"394","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns387":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns387":"http:\/\/flightsraw"}},"@id":"id93","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns387:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns387":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"12:11p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns388":"http:\/\/flightsraw"}},"departureTime":{"$":"10:07a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns388":"http:\/\/flightsraw"}},"number":{"$":"789","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns388":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns388":"http:\/\/flightsraw"}},"@id":"id274","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns388:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns388":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:05a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns389":"http:\/\/flightsraw"}},"departureTime":{"$":"1:18a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns389":"http:\/\/flightsraw"}},"number":{"$":"295","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns389":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns389":"http:\/\/flightsraw"}},"@id":"id179","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns389:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns389":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:35a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns390":"http:\/\/flightsraw"}},"departureTime":{"$":"1:29a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns390":"http:\/\/flightsraw"}},"number":{"$":"888","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns390":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns390":"http:\/\/flightsraw"}},"@id":"id173","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns390:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns390":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:13a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns391":"http:\/\/flightsraw"}},"departureTime":{"$":"1:18a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns391":"http:\/\/flightsraw"}},"number":{"$":"859","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns391":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns391":"http:\/\/flightsraw"}},"@id":"id110","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns391:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns391":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"9:45p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns392":"http:\/\/flightsraw"}},"departureTime":{"$":"6:49p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns392":"http:\/\/flightsraw"}},"number":{"$":"982","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns392":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns392":"http:\/\/flightsraw"}},"@id":"id350","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns392:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns392":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:44a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns393":"http:\/\/flightsraw"}},"departureTime":{"$":"1:30a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns393":"http:\/\/flightsraw"}},"number":{"$":"406","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns393":"http:\/\/flightsraw"}},"carrier":{"@href":"#id69","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns393":"http:\/\/flightsraw"}},"@id":"id103","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns393:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns393":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:03p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns394":"http:\/\/flightsraw"}},"departureTime":{"$":"12:20p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns394":"http:\/\/flightsraw"}},"number":{"$":"433","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns394":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns394":"http:\/\/flightsraw"}},"@id":"id320","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns394:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns394":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:11a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns395":"http:\/\/flightsraw"}},"departureTime":{"$":"3:17a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns395":"http:\/\/flightsraw"}},"number":{"$":"766","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns395":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns395":"http:\/\/flightsraw"}},"@id":"id236","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns395:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns395":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:30p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns396":"http:\/\/flightsraw"}},"departureTime":{"$":"12:35p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns396":"http:\/\/flightsraw"}},"number":{"$":"637","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns396":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns396":"http:\/\/flightsraw"}},"@id":"id304","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns396:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns396":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:01a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns397":"http:\/\/flightsraw"}},"departureTime":{"$":"4:07a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns397":"http:\/\/flightsraw"}},"number":{"$":"238","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns397":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns397":"http:\/\/flightsraw"}},"@id":"id280","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns397:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns397":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:51a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns398":"http:\/\/flightsraw"}},"departureTime":{"$":"2:57a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns398":"http:\/\/flightsraw"}},"number":{"$":"911","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns398":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns398":"http:\/\/flightsraw"}},"@id":"id190","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns398:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns398":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"2:54a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns399":"http:\/\/flightsraw"}},"departureTime":{"$":"3:52a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns399":"http:\/\/flightsraw"}},"number":{"$":"436","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns399":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns399":"http:\/\/flightsraw"}},"@id":"id87","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns399:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns399":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:17a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns400":"http:\/\/flightsraw"}},"departureTime":{"$":"12:20a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns400":"http:\/\/flightsraw"}},"number":{"$":"893","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns400":"http:\/\/flightsraw"}},"carrier":{"@href":"#id66","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns400":"http:\/\/flightsraw"}},"@id":"id248","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns400:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns400":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"6:23a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns401":"http:\/\/flightsraw"}},"departureTime":{"$":"3:49a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns401":"http:\/\/flightsraw"}},"number":{"$":"989","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns401":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns401":"http:\/\/flightsraw"}},"@id":"id218","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns401:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns401":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:26a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns402":"http:\/\/flightsraw"}},"departureTime":{"$":"2:16a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns402":"http:\/\/flightsraw"}},"number":{"$":"896","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns402":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns402":"http:\/\/flightsraw"}},"@id":"id283","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns402:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns402":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"10:34a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns403":"http:\/\/flightsraw"}},"departureTime":{"$":"7:21a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns403":"http:\/\/flightsraw"}},"number":{"$":"564","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns403":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns403":"http:\/\/flightsraw"}},"@id":"id268","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns403:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns403":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"4:01p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns404":"http:\/\/flightsraw"}},"departureTime":{"$":"2:24p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns404":"http:\/\/flightsraw"}},"number":{"$":"705","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns404":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns404":"http:\/\/flightsraw"}},"@id":"id140","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns404:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns404":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:47a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns405":"http:\/\/flightsraw"}},"departureTime":{"$":"1:53a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns405":"http:\/\/flightsraw"}},"number":{"$":"335","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns405":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns405":"http:\/\/flightsraw"}},"@id":"id73","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns405:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns405":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:02a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns406":"http:\/\/flightsraw"}},"departureTime":{"$":"3:56a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns406":"http:\/\/flightsraw"}},"number":{"$":"790","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns406":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns406":"http:\/\/flightsraw"}},"@id":"id246","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns406:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns406":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:59a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns407":"http:\/\/flightsraw"}},"departureTime":{"$":"3:16a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns407":"http:\/\/flightsraw"}},"number":{"$":"293","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns407":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns407":"http:\/\/flightsraw"}},"@id":"id337","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns407:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns407":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"6:06a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns408":"http:\/\/flightsraw"}},"departureTime":{"$":"2:58a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns408":"http:\/\/flightsraw"}},"number":{"$":"787","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns408":"http:\/\/flightsraw"}},"carrier":{"@href":"#id65","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns408":"http:\/\/flightsraw"}},"@id":"id269","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns408:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns408":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:46a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns409":"http:\/\/flightsraw"}},"departureTime":{"$":"2:59a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns409":"http:\/\/flightsraw"}},"number":{"$":"764","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns409":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns409":"http:\/\/flightsraw"}},"@id":"id139","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns409:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns409":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"3:03a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns410":"http:\/\/flightsraw"}},"departureTime":{"$":"4:19a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns410":"http:\/\/flightsraw"}},"number":{"$":"618","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns410":"http:\/\/flightsraw"}},"carrier":{"@href":"#id68","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns410":"http:\/\/flightsraw"}},"@id":"id240","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns410:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns410":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"8:02p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns411":"http:\/\/flightsraw"}},"departureTime":{"$":"5:11p","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns411":"http:\/\/flightsraw"}},"number":{"$":"839","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns411":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns411":"http:\/\/flightsraw"}},"@id":"id193","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns411:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns411":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:58a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns412":"http:\/\/flightsraw"}},"departureTime":{"$":"12:28a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns412":"http:\/\/flightsraw"}},"number":{"$":"811","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns412":"http:\/\/flightsraw"}},"carrier":{"@href":"#id70","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns412":"http:\/\/flightsraw"}},"@id":"id341","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns412:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns412":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"11:03a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns413":"http:\/\/flightsraw"}},"departureTime":{"$":"8:07a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns413":"http:\/\/flightsraw"}},"number":{"$":"681","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns413":"http:\/\/flightsraw"}},"carrier":{"@href":"#id72","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns413":"http:\/\/flightsraw"}},"@id":"id82","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns413:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns413":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"11:40a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns414":"http:\/\/flightsraw"}},"departureTime":{"$":"7:50a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns414":"http:\/\/flightsraw"}},"number":{"$":"537","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns414":"http:\/\/flightsraw"}},"carrier":{"@href":"#id71","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns414":"http:\/\/flightsraw"}},"@id":"id114","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns414:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns414":"http:\/\/flightsraw"}},{"arrivalTime":{"$":"1:47a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns415":"http:\/\/flightsraw"}},"departureTime":{"$":"2:43a","@xsi:type":"xsd:string","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns415":"http:\/\/flightsraw"}},"number":{"$":"229","@xsi:type":"xsd:int","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns415":"http:\/\/flightsraw"}},"carrier":{"@href":"#id67","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns415":"http:\/\/flightsraw"}},"@id":"id78","@soapenc:root":"0","@soapenv:encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","@xsi:type":"ns415:FlightBean","@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/","soapenc":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/","ns415":"http:\/\/flightsraw"}}],"@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/"}},"@xmlns":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soapenv":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/"}}} diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.numbers-fp-4k.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.numbers-fp-4k.json deleted file mode 100644 index 617542f..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.numbers-fp-4k.json +++ /dev/null @@ -1,6 +0,0 @@ -[[-4.0517697E24,-4.6834714E9,2.3016275E-5,429379.38,4.1035245E-35,-3.0304818E-8,-6.054423E8,1.2708386E-15,-1.715156E27,-277.43622,2.0346915E-38,-0.01638545,-1.2856552E32,-4.69584413E11,7.477022E-10,1.07893673E12,-3.5855834,103206.47,0.0017756876,-1.61412621E9,-54.93887,-139561.4,-2.378658E22,-3.158278E-35,5.233813E-31,1.76682848E15],[1.0974016E37,5.3739964E-11,-4.9716053E-33,-1.66076738E14,-4.0119002E37,-1.4027267E-32,-2.72471598E18,2.5744203E-19,-4.572614E-38,3.2234583E31,8.654537E19,-3.4919776E-29,-3.25070671E12,-9.000992E-29,1.0441233E36,4.079525E25,1.2051055E-15,-2.29235541E14,-3.2437188E-13,-1.5618475E-4,-4.0124833E-25,2.8310637E-38,-2.7477381E37,1.32944947E9,2.18171494E12,-1.25300354E17,6.0274116E15,-2.107706E23,6.3065464E34,2.51101692E11,5.254233E25,-2.0404816E-19,1.7693594E-33,-1.1974275E35,2.8162636E34,6.4890817E-21,7.184675E-25,7.5984363E34,-5.618655E-11,-3280961.8,1.28438128E8,8.6140408E18,1.1140984E25,1.47108772E10,3.3097485E24,-2052130.9,1.63728826E17,-6256.014,2835.2756,-2.4856512E24,1.2163494E-7,-1.1225695E13,3185.818],[-5.7091426E35,-7.046804E-12,2.8546067E37,-772.3046,-2.1437726E-18,7.247147E36,-1.5350201E29,-8.961063E-10,0.85318434,-7.483097E-33] -,[-1.2860384E8,-8.602547E-36],[-2.944476E-12,2.77460487E13,2.2238986E-12,-4.3412906E19,-5175.8833,-0.0073129623,-2.4091398E-20,-4.1746454E-10,4.45905856E8,1.2805583E28,2.5504562E20,5048020.5,-2.664713E28,-1.3501865E-10,4659.968,-5.82742E-35,-1679.142,-3.875056E-26,-4.033507E24,-4.6903224,1.9332838E38,-2.0680365E29,8.525517E-14,-5.230842E-32,3.673353E-35,-1.7281757E38,-8.2598E-9,-17152.049,-4.852759E-29,-1.0426323E-22,-0.020246392,-3.1350626E-6,1.2408656E-37,1.120012E-28,2.4116303E-15,-0.4785474,346436.97,-5.232122E-33,-1.91926374E9,-3.2487415E19,-8.650112E24,-5.055328E-34,-7.409502E-23,1.2598161E-17,5.4119855E13,-1.1477772E-4,4.6083254E-12,-254158.67,-3562.668,6.329796E-33,1.8004916E-23,9.1474255E-32,2.3754586E-25,-0.3737642,-3.8334996E-8,1.6320389E-21,1.00855703E-16,2.8689735E-36,-1.4815323E20] -,[1.06485072E8,-1.0298127E-36,0.24806988,-1.49687634E10,-3.6207398E32,-1.0312921E-5,-1.2935636E-31,-1.2929703E37,-3.9697367E-19],[1.0102053E15,3.1466665E20,0.08864031,-3.9789494E-35,-2.5044518E-17,4.97892847E17,3.361501E-38,1.9492607E-32,2.0493702E-34,3.00903369E16,-1.6402363E-7,-2.6451675E-18,1.262038E-30,-9.804624E30,-1.2246598E34,-3.315567E25,182204.17,-3.130359E-19,-7.119018E26,-1.48141686E17,4.419125E-31,-2.8471037E-15] -,[8.0939505E9,1.1374584E-19,-1.4202437E-27,1.313552E33,-4.2573942E12,-5.8381478E13],[-2.6502555E30,4.1753343E-29,9.083372E19,-0.068183176,-1.1031515E-26,-2.4913055E-16,-3.6719114E-37,5.8186E37,5.715726,-1.0163735E34,-8.84853E37,-1.1815134E-37,1.0027934E-16] -,[-1.4073724E34,1.30061288E13,0.008461121,-1.3376654E-10,-6.0671164E20,1.1833966E-16,14.809583,3.5770768E-22,-7.530457E-32,-1.5393923E-12,-7.8060027E34,2.1101567E-16,-6.2677943E-17,2.2152926E-20,-1.1757083E-31,2.3695316E19,1.4274136E-12,-1.9480981E26,6.291982E-10,-9.367635E-8,6.9291846E15,4.72749638E11,1.0033393E-12,6.817596E31,-1.2097972E-24,-1.9492175E-8,3.22030314E13,-7.977198E24,-3.4311988,-9.747453,1.6084044E-20,-9.820089E-30,-121.80733,-1.6177538E-27,-8.8467775E-4,5.6503555E-11,2.0995368E26,-5.455361E-9,1.8685779E-32,8.574378E-4,2.1685172E-30],[6.861861E-37,-4.4493197E35] -,[-1.1613617E-18,-4.8534297E20,1.0546074E-20,6.6119614E-25,-2.24921029E17,1.5837627E-19,-186516.12,-3.640935E-33,8.555976E-17,3.2709814E-30,3.63576335E18,1.4442433E-30,2.4232822E-36,-9.666912E31,1.5853016E35,3.73195E21,-125.010605,-2.1777477E-17,1.00537485E-29,-3.1489299E-30,3540.4128,-1.2457142E19,0.002879089,3316.8232,-2.399002E-8,1.2665383E-9,-6.6589328E-21,1.569398E37,-4.0816245E33,7.659948E-29,3.50496255E15,5.2147024E-14,-7.601605E23,3.6567388E7,9.476331E29,6.5074084E7,-3.8742284E-16,-2.8865025E38,-5.8460764E-21,-2.8586424E-36,-1.7062408E32,4.27118324E14,-6.7125395E-28],[3.56796591E16,-618868.25,2.933427E-12,7.236035E-39,1.2127505E-37,9.672922E-34,-4.398644E7,3.5170867E-22,-4.2779222E-30,1.7244597E-28,-2.516157E-4,2.8513992E7,5.198693E-23,1.4477405E19,-1.13826478E10,-2.3829098E-36,18.335575,1.8759609E-13,-1.968288E-22,1.7264434E-37,2.1186231E-17,-1.366064E-37,-2.3724215E-26,-1.83045278E15,-4.5891318E20,1.4144087E33,5517011.0,-1.80326367E18,-3.4664499E-31,8.6163241E12,-3.4160834E-37,1.6376802E-32,-4.1883656E-29,2.1600535E-8,142394.83,-7.924927E24,6.102368E31,5.108181E-15,-3.3982544E21,-0.7968685,1.1872208E35,-5.3212889E17,1.4372333E-9,-2.59713466E11,-1.2630338E34,3.519925E10,7.971905E22,7.0312736E-12,-8.266714E-27],[-1588131.2]] diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.numbers-fp-64k.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.numbers-fp-64k.json deleted file mode 100644 index 3bee5e3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.numbers-fp-64k.json +++ /dev/null @@ -1,61 +0,0 @@ -[[2.6535229E-31,-6.3308956E19,-3.6612234E15,-2.678559E7,2.6702905,-5.9068637E15,-8.157387E-25] -,[0.0034602399,-4.9989574E-12,5.6027035E-24,2.391569E-20,-4.8545338E-26,-1.9128763E31,-2.2797304E35,-5.6475305E-31,-8.4942343E-16,-3.465149E-16,7.0482251E11,3.126214E-33,1.6426457E-29,-1.07047094E14,2.04265933E9,6459852.5,1.2455255E-19,0.04852945,-4.6918415E-16],[2.993882E-32,-1.2256164E-6,-3.88535779E11,-1.56255725E14,-7.0686278E8,-1.1825112E-8,6.4509857E37,-1.1007136E27,3.5498442E-25,-3.9212004E22,-4.5836344E7,-5.940224E25,69802.234,-5.0968E21,-1.8074694E-8,-3.4485917E31,-0.6611753,2.3213966E24],[1.172189E-29,9.733035E-17,1.0992753E24,8.4844704E12,-8.6683997E-13,1.1094605E11,-1.7965676E7,1.02709966E34,1.0741854E28,1.9185885E-16,-8.3655151E11,-9.856661E-20,-2.85404893E16,-2.379941E-4,-8.3776928E12,1.7867977E-25,0.011597245,-1.41081335E26,-6.6038745E-24,-1.9745221E29,1.539104E24,-5.5591727E28],[1.7871889E25,7.8421593E-26,9.461137E21] -,[-2.12173072E8,-3.795819E31,-1.2554509E28,-2.5654093E-10],[6.5999994,1.7218609E33,-0.012438993,939.1766,7.093138E-23,1.2209317E-25,2.7071306E20,1.77743E-6,2.7941877E-30,1.0859481E-36,-1.0772707E22,1.32352934E9,0.14167772,-6.0089815E-29,-8.502864E25,-5.1308295E-4,-6021.425,-8.89324E-25,-2.500707E-8,0.08228797,-6.8578757E37,-2.9590106E-28,-1.0877065E-20,4.65055536E14,452.99426,-1.69357939E9,1.0729684E10,1.2038169E-24,-144473.9,-1.0064578E-37,-3.062391E-34,-1.100933E-37,-3.0693718E-17,6.763583E-27,4.117854E-39,-1.6736398E-15,8.445957E-9,6.4264248E7,2.2029085E21,-15921.255,-4.3933734E-10,6.940127E32,-3.81793408E9,1.358563E-36,4.1276015E10,-1.4802012E-27,-2.7596408E-32,1.059699E-10,9.104807E-10,8.404422E-26,3.5004688E-9,1.9395138E-21,6.892398E-35,2.03699521E15,8.767824E-20,-2.2651784E23,2.7166499E-17,1.4053419E-4,-1.1724944E25,1.6230291E-24,-1.8291197E29,-4.7328948E10,1.15966246E13,-2.5645604E-21,2.1966392E-20,9.4178323E8,-4.32126144E8,-4.327374E-14,-6.2280279E15,0.004526022,1.9304582E-17,2.3337225E27,6.9692502E16,1.2586697E29],[5997.7617,5.22090368E8,2.19173435E17,1.7981851E37,-9.979369E-12,-0.0017380471,6.2215564E7,-5.697561E37,-1.6502797E37,-3.24494711E14,1.451294E36,-5.835783E-22,0.061836954,1.3775194E-19,-16.837942,-0.23230144,-3.7539396E37,-0.01888702,-2.2541351E-35,1.9484589E-21,-6.7566396E33,0.048821412,-3.495256E27,-1.3285373E-38,4.50898E-28,1.7268163E-20,-955773.6,-6.622828E-29,-8.2036756E-17,2.924259E-13,5.0647647E32,1.1643229E-26,7.2521586E-11,-3.7323227E32,-12991.916,2.339732E29,-2.7075122E-20,-6.8960704E-17,0.51900554,-5.9936054E21,-0.015137768,-3.247555E22,-2.56008961E15,1.47095685E-36,1.4622153E-12,7.7171934E34,-7.544193E-7,5.0779845E-6,3.9633572E-25,2.4219777E-29,0.6069506,2.4379258E34,4.9829147E35,6.2219044E-23,7.4407635E26,-4.8400582E-26,-4.4876697E-10,40811.668,-3.9690345E33,8.862469E-31,-3.20557075E16,-1.1514233E7,-1.9178896E-9,2.11979568E8] -,[-80848.914,-0.0026732397,3.30004746E10,4.9471102E-28,3.8687313E-31,-2.9855964E-5,-3.67212442E9,3.0627095E15,7.8276194E-19,5.3863646E22,-404934.72,1.4820337E-32,1.4192764E-23,1.0121303E-14,-1.7668878E33,-0.06838432,4.233391E22,-4.222806E-39,1.2118468E-30,-35556.418,1.5127279E-15,3.6557565E19,1.5424345E30,6.068394E-39,8.638708E22,3.9049457E24,4.281842E-22,-2.9109668E-30,5.462076E-23,-1.14303206E27,4.688778E-38,-2.8907022E-27,6775.112,-4.3717151E9,5.5270997E-9,-2801.2212,5.6459445E-5,-2.1581222E-27,6.5815562E9,-1.089469E-13,7.1918055E-7,4.5751317E21,-204.8502,-2.8087629E-21,2.6423045E22,-3.340172E-34,5.0326556E-9,-5.22535076E11,-5.4474794E13,6.4334326E21,6.070314E20,23.221071,-6.030393E32,4.538023E-22,-1.9926042E-11,-41.89369],[6.324611E-31,2.6348025E-18,-8.242288E35,2.000639E-16,-3.6666114E26,-5.6946114E26,-4.071132E29],[4.4360223E-14,-2.0585313E36,4.4855497E12,-13.27239,-1.1073428E23,-6.4541437E18,-4.4476496E-25,1.20953678E14,25470.965,-2.7886143E32,3.7357097E-33,-2.2606373E32,-4.23796E35,7720065.5,-2.5043382E-28,4.5656885E-30,-6.961639E-11,-1.9319312E-13,1.26833861E11,1.2163623E-12,-124173.125,3.662106E16,-3.285093E23,5.6386879E11,9.28752E24,5.3346226E25,-4.4209505E20,2.1439174E7,-3.2421666E-22,3.8165513E19,-2.1260923E24,-2.63838945E10,9.541649E-21,-2.5550854E20,0.021623548,5.9854567E26,-5.8091084E11,-7.065009E-32,3.5037792E30,-2.331532E23,5.8431462E8,1.0341694E7,3.896418E-11,4.0183097E-14,2293077.5,-1.5654026E-35,-2.6699253E-14,-7.822621E33,4.315322E-24,-0.002313517,-1.6574543E-21,1.4579729E-20,3591.1572,-4.5170944E-18,-2.78611952E17,-2.1110734E-23,-4.3113246E-6,9.1698276E21,-1.6756981E-15,-6.854833E-6,-2.6159627E-29,412.33392,9.90769E-16,2.8810426E23,-4.9117775E36,5.78823E-40,4.7816546E-9,-1.3817376E7,-3.156944E7,1.5150228E-18,-1.4314575E-32,-4.428179E-28,-2.072301E-34,-5.129252,8.1669195E17,-252.1206,7.001677E-9,-8.144433E-33,-6.253973E-16,-1.8238805E-26,2.4729717E29,3.0851753E25,-3.451688E-35,1.3591939E-11,0.10220055,-1.16058014E11,1.3878365,2.399862E37,-4.3815566E-20,8.3958796E37,-327.94388,5.167833E-38,1.3481001E-36,-4.5197708E-36,0.39352754,-1436.4678],[-3.2871463,-4.2376574E-24,-1.2515325E25,-0.0019005111,-1.2113293E28,9.2862456E-9,-0.0037906703,-1.1611638E37],[-7.978034E-23,2.4743534E36,8.521475E-28,-7.8929362E12,9.952491E-31,1.8642626E-22,-1.719193E-16,0.10001894,-3.523265E-36,249.89531,3.0933438E-35,-1.2585429E7,8.857643E-26,-88230.21,-2.8092234E28,-8.0354126E-13,0.12322309,1.473056E25,-6.8615936E18] -,[-2.5297348E36,-7.368013E-38,-1.076627E-28,-7.7007749E15,-22.372606,-8.977881E22,-7.501992E37,3.7989866E25,2.5683582E28,8.2770024E16,1.87827292E14,-1.33954095E13] -,[2.83583E-36,-3.017899E-34,-9.3147485E-4,-2.9735795E-12,-8.9076545E-31,6.9782866E-36,1.9726709E-22,9.541568E29,-4.834942E-19,-4.6985393E-12,2.4275021E11,-7.481386E-7,6.4340796E-20,-9.9854425E-33,6.7009603E-10,9.471227E-13,-260.90906,1.8235383E-33,-4.95706771E14,-6.952875E-19,9.612285E-8,-1.2719771E-12,-1.12211087E15,55514.207,-4.5526364E27,4.656814E20,1.9872182E-13,0.9946952,2.069911E-5,1.31716538E11,4.0740787E24,-2.487807E-31,4.1312148E7,1.340491E-6,-3.635888E-35,-9.5867587E16,-1.7570944E32],[-2.5722143E27,1.1238163E-38,6.0498795E24,-9.611712E-6,-1.5955684E27,-1.0723542E10,-8.5553495E-7,-4.2760327E-14,-2.630693E21,1.95525083E11,9.127949E29,-7.524899E-23,-2.119795E37,-2.04406235E18,-5.3023616E-19,-3.3658996,8.377197E23,-1.7043822E-5,1.3179344E28,-1.11099537E12,-6.363299E30,-4.7785908E7,3.30950848E8,-3.03227827E9,4.5047694E-32,7.994301E20,3.938957E21,-1.1805678E36,-1.149164E-38,-1.1955668E-17,-1.7497947E-5,1.5460201E-14,0.0011019544,-9.772907E-18,1.6204629E20,3.7992635E19,-0.52898777,-449814.47,1.6927752E-26,-1.890229E-5,3.0518583E31,3.77259452E12,-4.9841966E-17,1.9143402E25,-7.949224E31,7.7348874E-32,-2.44324835E14,-1.2597142E7,3.0461904E28,-1.8065428E36,-5.9193197E-12,29.584963,-9.967072E22,-6.1103116E-22,-2.5339657E-31,-1.24389758E16,5.311816E30,-9.717531E-23,9.976159E-20,-0.4442942,2.046243E-26] -,[-2.96422872E13,-6.3277275E25,5.1580752E-8,1.7779605E-5,-1.4448909,1.041386E19,0.0673465,6428132.0,-0.0062295296,-6.0453197E17,-0.2114366,4.97585952E8,-2.729206E-5,1.82667791E15,-1.3350689E20,1.3113594E20,4.8448774E23,-2.5136028E-36,8.6560627E8,1.32157318E14,1.39104131E12,-1.84373661E12,-1.7154715E-33,2.6342105E-24,5.9719614E34,-1.1233949E31,-1.0465356E-36,1.3186333E-36,-5.2523444E34,-1.5381603E-38,-8.032629E27,1.4126238E-19,-2.4494736E-15,-14.433311,1.0122156E-19,1.5462485E-4,5.852681E-20,-2.2212762E23,-1.01059875E24,-6.394611E20,-0.79532546,-8.351006E-12,2.2660747E-16,4.977851E-10,4.905539E-4,-3.51602465E13,-2.30332976E16,5.59634776E14,-1.0818905E-11,-3.1019576E34,-1273.1372,1.9252214E-22,-9.166295E-20,2.2443522E33,8.7383146E-26,-6.007704E29,-1.6720691E-23,9.061457E-8,-1.2947306E-23,-4.6964997E-38],[7.8893924E31,3.07141837E10,3.5064477E-30,511.66837,2.0288735E-21,1.5008125E-11,4.1229615E19,153.60852,-5.00198464E8,1.0709774E21,4.2353862E-33,-2.55101846E11,-2069187.6,6.164251E-32,-2.7413694E34,4.188528E20,141.74352,-2.6147399E23,7.729892E31,-5.2636273E-18,-0.28653175,5.106643E21,-1.8035745E34,1.9061558E25,4.501794E36,-1.20316945E13,1016.1254,6.061748E-20,-6.4808927E32,5.1562366,5.3972E-38,-0.0032188573,-13.5752735,-3.0721177E22,4.131355E35,-105.52056,8.15333E35,5.363832E29,-0.18775955,4.0500894E22,-1.4168374E21,0.038646944,-7.297702E29,1.1156196E-21,-2.6687906E35,-4.544637E-26,-3.3141204E-4,-4.931643E-19,-5.0394877E12,220407.58,6.1996923E32,1.09094394E-17,-8.928763E-11,0.16848186,1.94481944E15,-7.207436E32,2.3807752E-19,-8.5378472E7,-1.5565517E-15,-934355.0,2.3759372E29,-4.68141849E17,6.417166E-35,-2.2429213E-27,-4.815584E-29,-0.0053960076,105.3496,1.2972911E-24,-2.1951991E23,-4.705652E-22,-6.099291E24,-15635.991,-0.0012562996,6.922176E22,-8.5089015E23,58865.164,2.3982756E-16,9.242356E24,-3.8435752E-9,-6.936914E-14,3.53225146E11,-4.79937E35,3.020672E27,-4.0472785E-24,0.06208434,-0.0010544735,3.2205075E23,2.8516762E21,7.926591E21,-6.8404767E-31,1.1215144E17,-3.3998662E22,7.4122036E34,-4.3587058E22,2.845305E-12,-1.2178893E-24,-4.5326104E16,-1.474497E35,1.6776792E-16,5.79595E-15,7.830873E16,2.212906E-35,2.840859E29,-5.301346E25,3.0949E-36,5.843128E24,2.6651596E-18,4.23338E36,-2.9150254E-25,-8.1340363E12,5.3269786E-36,-1.8946328E-16,-3.8732234E20,3.8953363E11,-1.4908035E-37,1.3413529E7] -,[-4.5626298E-38,4.9297265E9,5.37850817E17,3.974901E30,-7.5143934E37,7.3995796E-9,1.6215814E20,-0.012788779,0.07565902,-7.383337E-23,2.2363313E32],[-9.0022535E-15,2.4458215E32,-8.955363E-29,3.910716E-22,1.1812161E29,-7.7128334E29,-6.5684406E-22,2.6877297E-29,-1.3060789E-11,-1.4532642E19,-1.5384355E36,-9.650132E-19,1.89742E25,-1.26561638E10,1.957695E-37,1.6230686E31,2.8771005E-30] -,[-2.0386938E-10,2.34681E25,-6.2329929E15,-1.4005585E19,1.08749964E14,-461007.44,3.0655994E-16,-3.0385334E25,-1.9790804E31,4.340749E-39,5.184542E-7,-7.290088E-13,3934.4355,3.079712,-1.3798011E-33,-1.1360229E-26,-6.155818E-6,-7.5368058E31,1.999573E-7],[9.224108E-15,-3.3340793E-23,1.791771E-21,1.3469135E35,-1.1501752E-14,-3.6089584E-22,2.1340398E-26,2.6019689E38,1.0074474E-4,-10.901403,2.3974809E-12,1.1665053E-30,1.78668372E11,-1632184.9,-8.519279E-7,-6.876629E-5,-6.1764878E15,-4.9004257E36,5.2117971E10,6.8897178E10,0.0014059772,2.8422242E27,-5.2190044E-36,4.4039364E7,1.5955432E20,-1.0467144E-19,-4.044522E-17,-2.4481046,7.0801434E-6,-6.0419743E9,-1.66617123E17,9.4009554E27,1.9044671E-31,7.0450094E-23,-1.1768533E28] -,[3.87857E-21,-9.583951E20,-2.70598605E9,-6.307099E-35,2.22536506E12,-59.811153,9.1209144E20,3.4833005E-12,-1.9121487E22,-2.191084E-5,-4.5865073E-28,-6.108937E-30,-3.45633068E13,3.8241077E-19,1.04878048E8,2.9121276E-8,-6.501428E10,-5.8277903E-21] -,[-2.752694E-20,1.674041E38,1.7459461E37,-2.12437861E17] -,[6.991386E-10,3.4141742E-15,-2.3748144E24,-0.007935386,-4.7132715E-17,5.66245E-40,-1.087321E-28,0.0025962195,-1.3299807E25,3.923745E-5,2.1293476E-28,-5.198644E33,-4.2812498E13,8.061859E-33,1.8939721E-8,-4.8484296E-32,8.246557E30,-3.8046344E-28,1.2675797E-23,-1.7817929E-37,1.7236113E-26,-1.5601187E7,1.5747247E-37,-3.748514E-33,1.6529484E-30,-2.7024744E-10,-3.2312002E-25,-235.09137,-2.85875686E17,-1.762145,7.830253E28,4.75398341E11,-3.0335843E-6,-5.6157214E-26,0.0030372695,-8.860499E-31,3.318433E30,-6.7724163E-6,-1.5482294E-27,-4.4418993E-36,6.499332E-34,1.5978082E-32,-2.270039E-4,-0.2433885,1.18475146E14,-0.16603182,3.32074E23,4.82078E-33,1.1191186E23,1.5621392E15,71.506615,6.1661815E10,4.5710682E-17,6.1759707E-37,-7.3347425E23,1.27841115E-8,3.2572577E35,-43.802284,5.324903E-28,-2.830785E22,-4.499699E-26,4.191541E34,3.1751783E-6,-2.66276E-6,-3.0833334E-33,3.3614098E-23,-0.0036774008,-3.8589498E28,-1.2548406,8.259908E7,1.6195077E-28,2.1304361E36,1.4567335E-16,4.3310415E-13,3.3383633E-11,7.885624E-20,-480.6271,1.0037746E35,1.2754476E-9,83.81333,7.898458E-5,-4.03667038E15,-2.2329178E-15,-2.0152636E-13,2.081016E35,1.6286735E-34,1.6121435E24,-6.1771156E-31,-1.7282902E-34],[-3.96941065E15,27.970276,-1.53067066E13,3.6667887E24,2.85265795E15,4.2997931E12,1.4818504E-6,1.0321158E-14,1.5508368E-8,2.927697E-9,-3.39338018E14,-4.4746353E29,-1.5560365E-32,-4.124734E-28,9.0650603E-4,2.30105399E11,-1.3441657E-21,1.9883716E36,15880.264,2.8150516E-36,-11.915885,1.0706588E21,4.223408E8,5.4251542E-12,-1.1481796E-27,5.822903E-33,-3.505783E34,-4.8237903E-14,-7.849323E-38,-4.43749E35,2.2351224E-13,1.8254235E-36,8.9989259E10,1.813454E-36,-1.0558517E-24,-3.6580843E-38,1.4184178E27,1.4560464E34],[85629.22,-1.7003546E-10,-3.5413635E-16,105.94623,-1.4186892E-5,5.2413778E36,9.342507E-9,-1.3427592E-6,-1.2367598E21,-1.55271383E18,-3.2187312E-24,6.251089E35,-1.3887139E-9,-1.03444714E27,1.7714859E-11,-0.005817533,2.4563237E-32,-2.0803736E-28,-13.471874,-1.5048416E-23,-1.7501842E33,-7.2776375,-2.1466478E19,4.853822E36,3.0963873E-12,-3.3486038E37,-1.4131504E25,5.0066066E-18,-1.087173E38,-1.1019988E-18,-7.9779854E37,9.017251E-10,4.0723884E15,-1.341312E-18,-1.0717458E-22,3.46674849E12,-0.02340292,0.22586018,8.6854499E12,2.72159923E16,1.65686212E16,8.758956E-23,2.867559E22,-2.4451188E-9,-1.3564005E24] -,[-6229597.5,2.0014847E31,-3.4308033E-37,-8147.847,-9.0806074E32,-2.1128706E-4,6.6282367E15,1.61200688E8,-2.1548193E-26,2.2858645E31,-6.9279332E22,3.712441E-38],[-3.13842208E18],[-1.9934488E-11,1.3296543E-14,6.088549E-29,2.1249287E-5,-2.3573263E-9,-0.0058179013,1.17241576E21,4.07445E-22],[-1.3451417E-37,-1.5636806E37,-3.764115E-15,-1.0246142E-14,-2.94194173E15,1.9969695E-23,1.2336216E-11,-1.5648814E-38,-1.3196884E-17,4.1131836E-9,-3.1402063E28,-8.293467E-35,-1.79982945E16,-2.0917452E-30,-5.379634E-8,-5.0319304E37,-2.9847737E-12,-1134.7717,1.69248052E13,4.9066194E27,-3.4882248E22,3.7649075E22,4.3517765E-32,2.3000411E32,3.0656001E29,-1.034691E33,5.433126E-7,-7.913855E-16,1.3481003E-8,-9.742205E-31,36.262638,435678.12,1.5763418E-33,-4.031753E-38,4.523754E12] -,[9.943559E23,-1.14064816E-35,-9.176797E-24,-8.234128E-12,0.15862457,-5.4980867E-18,7.7291604E36,-2.6331496E27,4.4836097E-30,-0.041381553,-2.3864592E36,1.0077372E-16,5.853387E37,226.83781,1.8226199E-28,4.0925454E-7,-0.43729714,9.1037206E-11,2.3414647E32,-2.4859513E38,3.1183667E-19,-1.2243246E-11,7.8740177E31,8.458513E-16,1.8281419E-19,1.2040764E7,2.6616312E-34,-67977.56,-1.20570615E30,-6.119411E-38,-1.928541E19,6.815997E-25,-4.2523086E-33,2.876159E31,5.9133672E26,-1.07138136E-29,3.6584114E-38,-4.8518688E-32,1.5660016E33,-5.3123855E-17,-7.438176E-6,-1.0479898E-21,-1432.1406,-1.83065854E15,8.559633E-36,7.294675E-13,6.7877282E15,7.6135919E14,8.0692963E37,5.114364E34,4.2127463E19,1.383909E-7,-4.8990693E-25,6.472123E-37,3.6370087E29,-335.7757,7.5406672E16,1.3973097E-9,-9.911163E28,-5.218519E-19,3.9373206E10,5.8175686E-35,3.3169375E34,0.035486404,-9.863275E24,-3.3888747E19,-2.8939148E19,4.5834077E-35] -,[2.4604633E-21,1.1454275E-37,-4.773637E22,6.88222E-35,2.4849248E-11,5.3971255E13,-0.08682255,-2.1922608E-27,1.48448282E9,-3.808519E-18,-3.891184E31,-2.3028217E-34,5.6621474E32,3.9170726E-27,-1.7524487E22,1.6244168E19,-1.4417567E-34,30673.639,-3.33029107E15,-1.6279645E25,4.7073638E13,-97.48056,1.705634E30,-1.0281326E-10,2.8019733E-7,-8.2943033E-13,14734.208,-9.4815846E8,-7.4620836E14,-6.621855E-15,9.3110124E-8,1.85352217E17,2.3451458E-33,-9.9309604E-17,-4.11369701E11,-5.812215E-11,2.5101806E21,1352671.6,1.7365033E29,2.8036528E-8,5.824094E23,-4.479246E-38,7.213573,-4.2111656E-32,1240764.5,6.305584E28,-7.8413074E-13,-0.0056190337,4.338572E-14,-6.080884E-39,2.7675316E-5,1.5327403E-18,-6.9403528E11,7.8947424E-26,3.1761916E-14,-3151681.0,-2.76852271E13,1.2255282E28,-2344.65,3.2276745E32,1.3160247E22,1.165898E-34,2.5202588E-26,8.5282336E7,2.2256924E33,-6.93265E-8,0.003912731,-1.65872976E11,-3.027568E-12,1.560891E-37,-1.1190163E-30,1.0223823E-24,-2.5976526E-16,3.6897457E20,13499.478,-1.7299861E-18,-3.2848326E37,-1.6212045E-19,1.7557212E-36,-1.0860156E-11,-7.023582E-34,5.6786053E-33,82.14449,-2.5030997E-7,1.400592E-7,1.0625092E21,-8.970597E-17,0.0016552821,-1.0208666E7,1.0773274E29,2.5338252E-6,-3.3852126E11,-1.68228595E9,-7.4949714E-24,-13.60802,1.4036958E7,-1.27623475E13,2.6202063E18,-5.77665E33,-0.1566148,9.465927E-17,6.6991395E-31,2.5110508E27,-1.3195912E26,-509.82,2.650505E-9,1.13659032E18,-4.28806E34,-5.4878118E13,-7.0968315E-22,-173.36906,8.822957E-5,-1.7134555E27,-7.1029226E18,-2.6966985E-33,-1.0770072E30,-7.381477E19,7.909763E-10,-8.2960996E-32,-8.370223E-17,-1.15937536E27,-2.9323547E-32,-5.9325394E-18,4.9792977E28,-5.385977E35,-3064.914,4.4215977E-8,7.5121353E12,-1.1877986E-32,-9.972842E33,-6.1029396E-24,1.4030575E20,7.952922E-20,3.1911554E22,1608748.4,1.5529038E29,-2.1203335E30],[0.013377522,1.6594402E35,9.912939E35,1.9785817E34,2.13610731E17,6.0896337E-9,2.1988515E37,6.2055763E11,-1.4581766E-34,-2.3577012E18,-1.7991664E-36,1.9981725E29,-4.6943924E-9,-1.7148108E33,-9.130543E-39,-6.5057292E11,4784.42,-2.611576E28,3.93782152E17,3.266582E-4,-5.0465737E-10,-6.0319315E-23,-2.8338947E23,-2.2517677E-32,-3.0678122E-22,4.078392E-22,-3.712211E27,9.5129143E-32,6.0775647E16,2.3798107E-30,8.1528656E-10,-2.8964038E-16,-5.9301293E-15,-3.9867887E-29,4.91129064E17,6.320737E-34,-421.9368,2.5257999E-12,-1.17176794E9,1.2343717E-35,1627299.4,-5.810829E-31,-1.185004E38,2.7569042E-33,3.108391E23,2.7838576E25,-1.9218348E-32,3.3662658E-5,2.7247193E-35],[1.3685117E22,-2.2543395E-29,-6.117453E20,-7.79229E-39,1.8904142E-14,-8.3240606E21,15163.21,1.01575E27,1.8002075E-9,-5.4488195E29,0.45126706,-5.16225728E8,-1.4412709E-28,-8.408332E24,-3.6276004E30,1.2204871E23,6.8886653E27,6.2265E31,3.7241733E-33,-2.2511392E32,-1.407166E-23,1.2922098E33,4.2585494E-35,-2.31755248E8,-1.0083557E-38,-4.0378742E29,-3.5291334E-9,-1.4577695E37,9.897636E-39,9.405287E-18,1.3555452E37,-9.078515E-13,-6.2135303E15,4.0782264E-27,-1.4096508E-34,1.2087257E-17,421.17807,-7746.6357,4.445309E-16,-6.2729027E-6,1.8640488E-33,-1.14912232E8,-5.752873E-29,-7.3915064E21,22.460936,5.0996106E9,2.284282,1.7432648E-25,3.2066492E25,20254.875,6.7530603E-22,-3.824307E35,6.3122816E-25,4.1893254E36,7.97705E21,-1.22047866E-29,1.2005957E-36,-8.6610641E10,-5.8215637E-36,4.8796124E-27,1.3179117E36,1.4779165E21,-1301062.1,1.1417486E32,1.3796029E38,6.521187E24,-9.8611437E8,8.250178E-21,4.2303167E-28,1.4423644E-16,2.4052232E-4,-4.4350903E25,961.1548,-2.6661182E-9,4.5496615E-32,1.0892181E33,1.7163632E31,1.3610958E7,6.518452E-9,3.15344788E12,2.2173E-11,-6.5766945E-21,-5.5663702E-5,1.6629153E19,-9.93888E23,-8.599363E-35,2.8860872E-28,1.3699179E-34,8.4352621E15,3.0661657E-24,1.6219009E34,1.157281E37,6.886313E-30,-1.3597877E26,6.9964746E11,-7.2001284E-33,1.4486607E-32,5.7523265E13,-5.6805125E19,4520.4814,-6.977568E35,-1.75602369E15,2.1526697E-17,1.61094E-36,-7.375187E-18,-2.1948729],[-8.791754E-34,6.968372E19,-1.1207005E-24,2.4216982E7,-9.766945E-20,-3.4977608E28,2.1244133E19,-2.9989238E-7,3.10057533E11,-3.2766864E-34,-5.641571E-7,-2.6787975,-1.8415956E27,4.795678E-21,-5.5918408E12,-2.1467392E8,-18879.3,2.6500825E34,7.977973E-10,6.660919E-16,-1.8085991E-25,-6.1228274E20,-3.7943924E-22,1.341398E-8,-8.5483282E10,-8.000307E-35] -,[-5.945489E-11,2.5332061E33,1.2185245E-7,-9.038794E-33,-130.48666,-7.893069E23,29473.13,8.166829E34,-3.9134607E-31,-1.3088044E-14,-5.8650714E10,1.01793837E9,-72652.24,-2.8106998E24,1.6246853E7,-3.39357839E17,-4.67704938E11,-3.2914292E19,4.8891508E-32,2.6304217E-25,0.25187346,-1.7076134E-18,1.754977E38,2.565563E20,-7.8236297E31,8.807448E-4,-8998.401,-1.59900998E12,9.9990304E-29,-2.6473468E36,-2.5573411E-21,-2.55667E-22] -,[-2.65560096E18,-1.4007897E35,12.530237,-3.955555E-36,-5.4991985E9,-1.2324911E-31,0.0026004754,1.5829873E28,1.7246417E19,-8.541806E-9,3.574526E31,-4.9842272E-18,-2.0235442E25,2.02045181E12,-1.6821323E-6,-6.4785885E-11,-5936152.5,-1.720913E7,9.6065487E11],[2.5189547E30,4.408919E25,0.31051606,13.032929,177.4452,-0.01821126,-6.2282225E-21,-7.7406095E-28,3.0242627E-31,-4.0431882E-23,5.8649226E-33,3.675122E26,14912.729,-1.8584317E-24,-4.3161943E-38,6510.859,3.070655E-38,2.7767634E34,3.8474953E-27,-7.2744527E15,1.0053946E37,2.62716481E13,0.013282104],[-1.2254288E20,-4.00565436E11,2.1728722E35,-2.1016934E20,-3.7011133E-36,-8.822166E35,-2463.6926,-56765.113,1.3969837E28,-3.4087975E31,-3.7205904E-38,1.4049089E21,4.38297E-40,-2.1295102E-27,-1.50500217E14],[-2.2349372E29,-6.6248518E15,2.1348871E21,-0.8594765,-5.2489933E-33,-7.7569626E-15,-4.7306723E-28,-1.4602794E-7,-6.2428418E18,-8.1971305E20,-2.029365E-34,-4.4834547E31,1.4006753E-29,1.244169E-33,-1.4092677E-24,-0.0066948957,-2.0225407E-7,-0.14170189,-1.2626884E32,-1.6745427E29,1.14762365E21,4466168.0,-2.7383464E-26,1.2850034E-31,-7.5223203E-31,1.3311776E-37,1.3275721E37,-4.2543905E-30,-0.012650995,-6.6229973E-21,-1.6714041E38,-1.70922376E13,-1.14074306E14,1.6011432,-8.910942E-28,-1.0628991E23,-2.1925081E18,-1.4939666E-37,0.111466296,-5.1021055E-15,-0.0027280378,-1.0441042E-15,4.9724447E-20,-1.9659653E-6,-4.2630705E30,-1.6915913E-11,-1.4960305E-28,-5.5604384E36,-3.870055E25,-6.143615E26,-1.2545532E-33,6.857317E-32,1.4830949E-10,8.35413E30,3406168.2,2.586748E-9,-3.087689E-29,1.3097007E34],[1.5496766E-36] -,[2.277385E-12,-11922.696,-1.0601711E23,6.967414E-19,-5.206316E-22,1.8865904E-23,-3.0848947E-17,-14.666902,2.057501E-13,7.532893,-1.13831456E8,-5.00169834E11,-1.2749845E-15,-26.820055,-3.4026826E12,-8.797125E34,-848.84973,-2746.5835,-303442.44,-7.0334454E22,3.1788996E-24,1.0448093E-33,3.1548128E-26,-3.0011015E-38,-0.7247722,-1.8878101E-17,6.630335E27,-1.5456015E-7,1.0367542E23,2.9280086E36,-2.6455633E-5,3.00810109E12,-9.0245086E33,6.530137E21],[1.38867311E12,-27.486586,-2.434253E-32,2.5778796E20,7.59485E-29,-2.76198201E16,-2.8273008E-13,4.3305346E-23,9.955619E18],[-2.958574E-13,-5.855436E-29,3.1332264E-26,3.2782405E-5,2.23353157E15,3.3291744E-21,-2.33294893E17,-0.001710379,-2.9223552E8,-0.0029085996,1.8074379E31] -,[-4.5601818E24,-8.476378E-37,-1.5906557E-26,4.5619851E10,-5.761538E-19,2.744682E32,-1.10971565E-14,-2.9210783E-9],[5.0052375E-8,-1.6796031E29,6.909423E-30,9.27159E19,1.1730386E-14,0.002774217,-1.6338386E-30,2.4220062E-4,1.6383446E32,1.08755484E14,-1.2060308E-21,6.948288E30,1.6505052E29,8.7491535E-6,-4.480187E34,2.8718891E-27,-6.9487276E-14,-601758.4,-2.92426791E13,2.7383085E-12,1.4675421E-12,1.5540477E33,-9.7484941E17,-1.3063929E-33,-1.5785367E-23,0.21390437,1.69939722E10,4.5304178E-6],[1.0418203E-34,-4.514773E-9,1.03528753E12,6.9052304E-29,-1260908.2,1.59600672E8,3.9271218E14,4.16676172E15,-1.8749305E-10,-6.609547E29],[-4.500122E-4,-1.3003437E26] -,[4.6993582E24,-2.2476652E-35,-2.025543E-38,1.41192624E8,2.2379E12,-6.6317874E-38] -,[-5.4267844E-24,48.191216,-2.3404034E-16,1.0695002E35,-0.24409178,4.834642E-34,2.4793964E-11,-1.5104987E-15,-6.766781E20,3.2134312E-24,2.52508321E13,1.5620833E-5,-2.9720262E-32,8.575686E-26,1.6031063E-6] -,[-3612.9854,-5.444763E-32,-4.4612526E-20,-3.116652E19,-9.344697E-17,0.0052720644,2.338387E-19,2.5050427E-11,-1.998682E19,2.7275892E-13,-1.9041895E24,-1.6710945E-14,230.90535,-3.2392546E38,3.4847934E-11,3.0620878E32,-0.009189749,9.5089046E27,7.239263E-9,-82.75874,5.417001E-21,2.5520123E-8,1.4205682E-13,-3551071.0,5.2756236E-15,-4174.0215,-1.1783311E25,1.0482635E-38,-1.2417504E33,6.4708315E26,-2.1582315E-37,2.4447767E30,2.2057793E-4,1.5143285E-31,-1.98159483E11,-7.471942E-21,-63.107765,6.668308E-14,-1.9725835E36,4.8566816E-4,1.15405865E30,-3.3622467E36,-1.39017204E16,1.9544464E21,2.8000494E-29,4.7190023E31,-7.4939015E17,-5.420105E-5,2.405227E29,180702.77,-1.807901E38,-0.46347526,-1.1928653E38,-1.7304545E22,9.07161E16,-1.8148965E-11,4.7496613E-33,2.7463635E-13,1.542372E24,-5.675163E-38,7.068117E-11,4.9238943E36,-3.983349E32,-13337.522,-3.4916945E-4,1.1932984E31,8.135749E-38],[-2.9809817E-31,3.24457291E17,2.682666E-33,3.5102253E-20,2.6367989E-28,-2.0844399E33,3.528736E-5,-1.0223548E-12,4.36395959E17],[-3.088835E-9,-4.1452816E-25,-5.1354884E37,3.6966E20,-6.658147E21,-4.1318012E-22,-1.43992154E17,2.0267156E-14,-0.019217206,1.8195781E27,-5.35714E-22,3.7145734E-13,-6.06098E22,-1.9937858E-35,-2.750705E-20,-1.3403197E-31,-1.0186433E-31,4.4217047E-18,-2058901.4,4.0615858E-29,-5.590844E29,3.0171224E-19,-1.7438155E22,1.39589798E9,-4.191031E22,2.7864587E-13,1.8216821E19,-1.1428524E17,0.04039231,1.1269817E13,1.145838E19,2.2917673E29,-2.1779514E-21,4.9807283E19,2.8074933E12,4.6995681E10] -,[6.9146962E19,-3.1758063E-8,-1.8491408E-19,-4.4880697E36],[-1.13149512E10,-128055.64,-3.91928033E15,-7.9312525E-37,-8.809E26,-12.84868,2.1193459E-15,6.507739E-22,6.717573E-23],[-47.159573,-4.2953694E23,3.885824E37,-5.25599474E11,3.4922824E-33,240669.95,-5.5850285E23,1.31169579E18],[5.7589196E-35,12876.559,-8.7142436E24,-1.6547342E37],[-5.8402E-31,-8.3912557E12,7.5898206E-6,1.6322806E-34] -,[-33158.465,1.9812552E-27,-4.4407776E-20,5.0424244E-18,1.41699E33,-8.757934E-27,-1081726.5,-2.015518E20,-1.01422044E-26,-3.3002863E-33,13055.995],[1.1319426E20,-1.0948676E22,2.06028027E12,4.1488543E23,-0.005341658,1.18227305E-7,14.305751,-1.6706637E-34,1.56692025E16,-1.6945705E-18,-62.314365,1.9962698E31] -,[-7.368051E-11,-1.2094854E-18,1.0210027E-25,-1995.4661,2.1134639E30,-5.044628E-16,-8.869583E-20] -,[-112.03558,-5.235014E22,-1.2228524E-22,-11133.814,6.6177122E-34,9.791691E37,-1.4827242E25,-3.4249252E-20,4.7146255E35,3.6159345E-5,4.1903357E-7,4.7366243E36,195.98805,-4.5289881E13,2.4037113E-35,2.4560953E16,0.001738607,-5.589831E31,1.7033344E8,1.7232977,-3.3759536E37,-6.339997E-26,1.1119883E-17,9.1740393E-38,-2.51201488E8,5.607045E-39,0.006527377,2.1330482E11,-7.357917E34,-2.1029858E-33,6.9727943E-12,5.6792646E8,1.4564352E-37,-4.3727807E-19,-6.77699E-28,2.296647E38,2.6269462E-12,9.4065273E14,1.3558843E31,-2.3683035E-15,-3.4923606,-3951991.5,256.90814,-3.3386005E23,-3.95611699E9,2.56281504E14,1.87798387E9,-2.75495885E12,-2.237272E20,1.30207002E17,1.07428245E15,-6.6090907E18,-1.3631758E-19,2.9680282E-19,-187.37361,-3.5074108E22,2.8213424E-5,4.292452E-29,-7.131377E-18,15034.558,-4.39418461E12,-2.24211147E18,-1.0460587E-11,-2.80428773E11,1.2054711E22,1.0710614E-12,2.0090904E-20,-5.46057E19,-1.3642586E-35,4.6023165E26,2.43557663E11,-1.2364676E-31,6.8898344E11,1.5083254E-11,-1.6089095E30,-3.843059E-29,-6.4030325E-30,-0.3760086,2.75948E19,3.2108447E26,-4.17577E-30,1.155235E-26,0.060416292,-2.5216004E-26,3.513795E-16,6.519042E-7,-9.254507E-14,441085.44,-0.004158272,-3.1504228E33,2.2683187E-8,1.27185186E-26,-1.2902433E-15,-0.012782133,0.38049155,-3.0701978E-15,-4.3906153E24,1.1270128E-38,1.8822772E-25,-3.9289614E-25,2.05648834E18,-2.8693992E31,-3.1571132E-22,-1.1130514E-7,-1.8716855E-30,1.4887326E-26,4.241542E-13,53695.383,126207.73,-6.6300595E-6],[-1.126504E-27,1.26586E36,2.1201758E-34,1.6026291,-2.430941E38,1.2518707E-37,-1.30829913E14,1.2198096E-29,4.472551E-24,-5.0354387E-26,-7.8567092E14,-0.0025371416,1.0146015E-25,4.2213214E-17,4.7672683E-26,6.0185034E-24,-506132.6,-6.5684215E16,-3.4724798E31,-5.657057E-28,5.647748E-35,5.3402655E-8,7.613152E37,-1.0350687E-12,0.0010120873,-3.70309307E12,-1.6472158E-14,-4.3954373E34,4.00592256E8,-1.2581203E-27,6.0080873E10,1.4912756E35,-4.526522E-19,3.3112363E-18,-6.8008626E-4,5.645379E-16,8.9279052E17,-9.7158696E-20,2.4546924E36,-1.943974E28,-3407.7,-0.019545026,-6.833853,-2.307492E-29,-1.3366143E-35,1.0086338E-11,-3.9686054E-10,8.711066E20,1.1184001E-5,-1.9225208E31,-1.2123996E-37,-1.00854275E-4,3.3385193E28,89.92665,-1.5094693E-8,-1.2247425E-36,-1.0060454E-6,6.858928E-35,3.2533488E-28,-4.2138997E-20,-0.8893121,-3.8721677E-33,1.74107329E11,-1.532285E-16,2.9378392E-33,1.44622561E10] -,[-779.1359,4.5957345E-6,16371.021,-2.3385797E-14,2.704047E-4,-2.6768743E19,1636294.4,7.5111019E11,4.0232038E-32,5.1089298E26,5.76607E-29,-4.393163,3.6522783E22,-2.1372208E38,-5.279335E29,-2.0130148E-34,2.650583,2.15663287E15] -,[2.046967E25,1.0039325E-23,-2.2611841E25,1.5242264E-4,-1.4143259E-9,1.5972371E24,-4.8323383E-4,5.234195E-27,-2.513276E-6,8.543087E-37,2.1127578E19,2.37881679E14,-0.04639983,-3.94664975E12,-1.37400112E8,2.0494555E-15,1.08244195E-14,-2.3964122E-33,1046.1315,-2.5760156E-13,-2.5466814E-23,1.3196846E-8,4.419426E7,2.5098136E-28,-1.825383E-20,-1.1994996E-7,4.9286856E-20,2.0914078E-22,-0.006780296,-9.133744E26,3.7026085E-31,2.17505046E14,-74399.16,-2.07406019E10,1.8340747E-25,470.96228,1.491452E31,9.6333675E36,-7.670459E-26],[1.61482414E10,-2.8478575E25,1.2709846E-26,-6.1345093E22,-3.800501E-37,9.3568824E7,-2.693006E7,3.0798662E-36,-5.6782275E29,-2071453.4,6.9762805E-6,4.672038E-8,2.6068692E-18,4.20126786E12,-1.07101955E-36,1.0209723E23,6.207284E-36,-8.287924E-20,1.1460687E-37,3.6898683E23,-136.22513,-5.19742882E11,3488806.8,1.5953734E19,-1.49981765E-33,4.39981913E17,9.784874E34,2.7060543E25,4.967802E-7,1.947157E12,-5.4016232,-3.9612005E36,7.916292E-25,1.57858513E11,-2.7847707E-15,-2.6330374E-23,4910309.5,-1.5633807E-15,2.1883852E-6,-1.177046E-10,-2.9196513E-13,3.636523E-27,-1.4500978E-9,-6.522685E27,1.0628074E-18,-2.4396341E38,-2.5516168E-14,-3.9965467E10,-6.6444979E8,1.2650369E-5,-3.1459347E34,4.0481756E-18,-3.0360475E-34,-3.41636515E18,-4.3524706E-16,-3.310614E-38,4.6696927E23,1.0129248E-20,-20.945423,-2.961957E31,0.8271526,-4.1675294E-26,3.1402283E-22,1.3237225E38,4.0011433E32,1.7345148E-8,4.880175E-35,-3.2156436E-28,3.7479937E-14,9.995417E26,6.754229E32,-1.0856749E19,3.844049E35,1429744.1,1.7327997E38,-2.04644248E17,-1.5014568E-23,-3.8478078E-4,-1.0011582E-24,-2.0399752E-4,2.13295429E17,7.7851425E-26,1.1652908E-36,7.902411E-25,2.23918653E17,1.0414118E35,-4.670963E-35,8.8482973E-16,-8.801244E34,-6.2454901E12,-104170.57,4.8949002E-21],[-2.2799947E-8,7.639495E-31,-3.66534486E12,8.437986E-5,6.569095E32,1.94218413E12],[29082.746,-5.3562345E-14,3.2055792E-19,3.3885144E24,-2.7307507E-24,1.8294183E-7,2654368.5,-1.9740678E-8,-4.944283E-36,6.881815E-38,5.5142777E-6,1.94791949E9,2.1895704E29,9.1628676E33,-7.475101E33,-4.629694E-26,6.65608E29,-1.0455601E27,2.2842445E-29,-6.2825983E32,3.7540669E-22,2.9792422E17,-2.5226271E19,16431.475,311042.6,-3.2972104E-18,2.836561E-27,2.61553358E14,3.7825254E-20,-9.882928E37],[-1.970304E37,3.280495E-27,-2.8025064E25,-2.0974132E-29,2.52699684E16,-1.1505945E-5,1.519187E23,-9.1113748E15,1.9568832],[-1.9624752E35,3.0642792E33,1.0752591E-28,-5.0235985E-7,3.1543805E-35,-1.2295649E37,5.7295845E33,-1.1539233E22,-9.0622387E8,15.298786,-4.971065,-1.2618188E34,31825.23,8.984011E-14,-1.3667475E-30,-1.317679E21,-1.0995402E32,-8.0578126E-8,-6.4011076E22,1.55622127E17,-6.792501E29,-5.373949E-26,1.6993843E-17,2.3380963E19,3.5186366E25,-161.54507,8.420609E34,-9.641602E-31,4.6381245E-12,1.2518536E-32,7668.5166,4.57002528E8,1.1678749E-20,1.14689526E24,-4.910587E-10,1.6756772E15,-1.2106079E-22,2.3696143E-20,56.631264,-1.6328846E-17,-3.5300533E-26,7.205307E-12,-1.09665414E27,-7.300533E-32,-7.4928196E33,4.3696905E-27,-0.0013854192,-9.873465E-38,0.058501676,-3.1682173E-19,-7.3268664E7,2.0019415E23,1.0920521E24,-3.01774364E13,-1.3145713E-34,4.405406E-5,4.0539798E37,-4.022517E-6,-4.87522912E8,-878.46344,-6.1742166E-30],[-7.4965005E-22,4.581275E-10,5.5573954E-29,6.8123869E13,8.116277E-10,1.98728532E11,-1.644467E-7,2.9436897E-38,1950598.1,3.6343374E-23,-1.3466281E-21,-5.7043828E17,-6.7534076E19,2.9582421E-5,1.5244628E-23] -,[3.9592146E27,-6.5587216E-7,2.1917113E-14,4.4261157E-17,-7.264177E36,-5.739904E-25,5.1055973E-24,-1.1733025E-9,-1.5893152E31],[1.9867963E23,-1.2950139E-37,-6.6832675E-31,3.2167792,3.5190208E-23,-2.806175E23,3.8209556E20,-27186.88,1.7099301E-25,4.4661606E-6,-1.5348093E-7,-1.0886492E-5,5.655572E-28,-244.71165,-1.8909471E19,1.12281036E-7,1.1101646E-11,-4.3777592E20,-0.01849799,8.133171E-19,0.48796266,4464373.0,1.5413162E35,-2.682901E30,-1.9861821E-19,3.2546906E-26,-12.077345,-59279.52,-1.5408482E20,1.6293913,-1.7978099E26,7.1885422E18,-0.74339813,1.8792492E-25,3.3169637E-22,-5.815724E25,1.68538272E8,7.0266443E-35,8.565368E24,7.230063E-30,4.7242993E19,-6.7460835E-22,-4.6872835E-29,-0.1013058,6287194.5,8.7331007E27,2.1940543E19,1.0707918E38,8.664748E22,-6.127593,-4.411171E-19,8.836836E-24,2.1027147E-21,-7.6232244E-35,9.3210624E8,3.5025013E-7,4.6373402E-29,2.5462144E-16,-5.5543312E7,-3.6632652E-13,3.7985408E7,8.538071E-16,3.6094397E-13,-9118150.0,-4.4035589E12,-4.71622E-34,-0.5478556,-0.051223088,-4.8766134E-38,-4.755721E26,-2.7295384E29,-7.2450435E-37,-4.6478435E-17,19.083307,-0.002011672,-6.4378231E15,7.4626866E-29,-6.6496673E24,7.114146,1.10221048E16,-1.1319554E25,3.6191812E29,-5.245042E-4,-3.42991543E12,-3.9315055E36,1.4112847E7,0.001767671,-3.4352837,-2.921994E-22,-394148.47,1.2442059E-28,1.0903586E-28,-1.14717656E-29,-2.4340287E-17,-1.5136631E26,9.304202E27,1.7609354E-7,11337.007,-8.373158E-24,3.1022862E-31,-1.2444933E20,-3.7436606E-17,-1.0777715E37,-2.111371E32,1.9485887E22,6.222807,-1.7070699E-18,7.130554E33,-2.4125381E11,1.1414538E33,-7.7300704E-28,1.1997317E-34,-4.19287532E11,-1.8712265E-21,6.4402985E-7,1.9199932E28,7.761017E21,1.4760437E-34,1.311639E21,-3.473825E-26,1340306.5,7.165198E-25,2.1375271E27,-3.7441183E-20,4.4497543E27,-2.7439192E20,-2.8833095E-33,0.011356765,7.1803647E-28,-2.5945176E23,-1.6136751E22,3.485619E23],[-6.044063E36,-2.6103998E22,1.3173548E-18,-6.674972E-11,3.6872715E30,-8.716288E-33,8.0604186E9,-1.35196679E13,3.954288E32,-1.930289E-29,1.0282257E-8,6.2271836E-35,4.7967978E27] -,[111.52081,-3.4265005E-4,2.08950378E11,-2.6038165E33,-1.2778452E-20,2.0138853E32,5.1685737E13,5.9989783E10,2.7165724E21,-6.1999948E7,-4.2563575E-15,-5.9826374E18,-2.4955483E14,-9.74889E-9,1.998957E-23,1.8474495E34,-4.000669E-24,-1.83592672E16],[-5.9103235E23,1.755274E38,-2.5553578E-12,3.6658224E-4,-5.233411E-24,9.8123824E-36,1.1832269E-15,0.01923362,8.813129E-10,-8.9343013E-13,-8.7737985E-15,5.108798E-18,2.7233456E21,-1.89397654E18,-1.4993371E-18,-1.1762382E-21,-7.55091E-13,1.6910232E25,-6.68898E-36,-4.366135,5.0130123E26,5.658987E-10,1.12944734E-4],[7.670068E-15,-2.80775584E17,-2.9787247E-25,-2.1149537E-8,1.6231991E37,1.1651223E-23,2.0636201E10,-5.1762626E-38,-2.97536597E15,-0.0029359923,2.4034574E21,-1.2315049E29,7.753713E-25,-1.69600369E10,4.523179E31,1.7020673E-18,1338386.4,2.9649162E-21,5.1408284E-30,8.914675E-15,4.534591E-15,1.0657312E-24,-8022.8022,-1.542446E23,9.582449E23,1847851.1,-4.9340898E-26,-38.082893,1123326.2,3.593817E-20,1.328062E-12,-6.9038993E-35],[1.7058306E-37,1.0561656E-18,-3.5017737E-7,-2.309725E32,-3.8855506E-38,-6.4111076E16,-61132.098,7.402418E-32,4.137606E-7,7.0176926E15,-3.8560205E-12,-1.26492795E-36,-229.90636],[-2.0367467E-38,1.7735674E-35] -,[7.8801927E-28,8.99017E-23,-0.12334686,2.267776E-35,6.602E22,-4.1353434E-7,3.8295074E-38,27.062914,-2.6815113E-11,6.647715E30,-6.8557477E22,-0.1737599,3.9544336E-8,4.1595755E-12,-3.9169864E20,3.1313735E-7,-2.22775E19,-2.1013196E30,-5.4897552E7,6.840488E-29,0.5352197,-1.7332099E-18,-8.756769E-33,2.8363015E22,3.6271528E30,-1.32938244E11,2.0292455E-10,1.34025388E13,9.956878E-17,4.8682307E-9,-7.788116E-18,-1.08557995E30,-1.4297638E20,2.306014,-4.2963852E7,1.13428134E9,-1.1373578E29,1.5360171E36,1862.9814,-3.214738E19,1.08695509E15,1.4640759E22] -,[1.28409919E17,3.929078E19,7.398264E37,-5.456806E26,-6.3881414E13,1.995884E-7,2.7377916E-36,2.2008916E29,3.0644462E-15,7.273561E-9,1.01013604E13,-8.7379744E30,926.3532,6.2766252E-37,-6.486869E-25,1.91109896E18,2.3674893E-32,6.6363405E-15,-1.5708478E-32],[2.4038063E-10,-3.50169945E15,-1.8565553E-25,1.3835687E33,-187.00838,-5.0665634E-37,-1.7776346E-8] -,[-7.902012E-19,-2.9315193E28,2.0374592E-23,-8.705462E-38,-3.4425498E-4,2.347934E33,-1.66798356E10,-1.65792252E11,3.1059933E-16,-3.7615085E28,-0.60163826,2.36192557E12,1.8849123E32,-0.026402213,4.7024084E-38,-2.2423211E-38,-1.34600385E13,-2.0817311E23,-3.6401177E-35,9.537745E-18,3.92991736E11,-8.163994E33,5.8147135,-1.510791E30,3.949444E-8,1.38609995E-8,-332381.97,-3.1736623E27,-2.2812714E-29,-2.291572E-9,-4.386445E-25,-8.3170586E37,3.14790117E11,-2753682.5,-4.2155164E26,3.7463407E-31,4.0294633E-26,-1.1594631E-25] -,[-2.787611E38,-1.20194217E15,208.19893,-1.10117254E-16,-2.1501943E24,2.2999115E28,1.03285407E14,4.1158448E-38,-5.9500535E-6,8.709221E-18,-0.41958737,1.4456883E-22,-0.27423915,5.9594743E-23,6.329182E32,-3.8571793E34,3.8146403,-4.4398383E16,1.8653683E-35,-2.0999737E-7,-1.7420561E-15,-4.4825488E8,0.009006739,-1.013476E8,-5.784616E29,5.546931E-33,2.1903438E7,8.8903685E-18,4.2145106E-16,1.06082695E-11,9.3994234E21,-3.2573135E-28,-0.027600484,-1.2911376E-10,2.4733934E-6,1.2162123E30,-3.6730052E-10,-4.779868E-36,7.863201E35,-6.4165717E-21,-2.1013622E29,2.04848678E18,4.4834E-29,4.749279E22,58226.336,1.6627068E-38,5.8317545E12,-1.053897E27,-2.15538E23,-9.140853E-18,-875.62756,-1.830947E-10,-3.415372E34,8.6856913E-32,-5.5848467E-8,-1.2828722E-28,-2.6577513E32,166.79366,1.2213504E-16,2.7111211E14,-2.5846598E-37,-1.5204548E-21,4.3596547E-11,4.4801724E7,-18146.887,-7.418924E28,9.643046E-36,1.2505698E-8,-1.787065E-19,-4.80839765E17,-5.3036786E16,-4.880802E-10,-1.14240748E15,1.1889918E-10,-3.487458E20,-1.72746512E8,-2.6002013E-27,9.447709E24,8.448562E25,3.3825377E-11,1.1789647E23,-7.5225364E15,-1.3568401E23,0.34649983,2797.5444,-8.634043E-10,-1.488431E-23,-4.966701E-24,1.05700284E-14,-398547.53,1.24994286E15,-7.226216E-30,-5.437547E-23,6.955646E-11,4.580792E-15,-2.1163867E27,-8.436962E-9,-8.915255E-23,-3.70964E-8,-1.6971955E-15,-1.09088072E10,-9.016622E-37,-8.4399056E-7,1.303762E31,1.7701865E13,-2.050575E-9,-3.9340855E30,-5.86469E33,-1.9108958E36,-9.45013E-13,1.3413494E-5,-2.3332007E-32,-4.2000536E12,-13.862848,-1.0764852E23,5.2004128E7,9.002588E-34,-2.07457301E13,-7.768945E22,-1.1382736E-10,2.71225426E10,-2.6740375E-18,-1.755016E-33,2.2179205E33,-1633229.8,-6.3014133E-22,-6.6278984E9,-9.227446E-36,3.5444855E-6,2.9015085E-10,-1.003169E-10,-55589.418,-3.0689526E35,-3.0863537E-20,-5.1336855E-38,3.6434092E-32,2.3369965E-24,3.6052084E25,-4.4839972E-35,-1.4167258E-38,3380.7002,-1.2905357,2.82058233E17],[5.338831E-24,2.6178479E36,9.0546997E14,3.7206219E34,1.9083935E-5,6.3134293E-4,-8.3112653E9,-1.9926666E24,3.1517186E27,-2.5517091E20,-1.05800744E8,-9.793455E-14,-2.0169154E37,-3.1260331E-24,-7.613612E-28,6.448219E31,-7.3234214E-29,2.71411919E14,-9.1385004E-8,0.09265018,1.07860514E21,-2.2735031E34,-2.5812135E-15,4770.381,-7.851698E-25,3.49187E-25,-1.2396227E32,-34585.13,17.54151,-3.505097,-1.8355975E-32,-0.037202276,1.5864158E38,3.0053117E-13,5.9356287E-36,-0.008556399,-3.07177E33,-3.8731779E27],[-5.8432459E12,-9.3744706E-29,-3.0442952E31,1.4456566E-20,-2.5532715E25,-1.5532156E-31,4.0604127E-6,3.6498957E35,-3.3537944E19,-6.8137027E-25,-2.1100003E-27,1.4886213E7,-3.0698327E19,2.83065503E13,-4.3249327E30,-6.073115E-23,2.1917574E-35,-205.4083,-9.675174E25,3.5117817E-30,-2.8977774E-36,-5.581732E-14,-1.6782692E-12,1.6625899E-34,-2.0087757E26,-1.5675231E-21,8.767787E-31,47245.637,-1.317919E21,1.5282041E36,2.7906064E-15,2.5141342E35,-1.6795639E34,2.7701904E-34,-7.9624705E31,0.7160752,-1.5922899E-25,1.34162743E11,4.7727696E-8,-3.536734E33,7.8552523,6.858665E27,9.245525E-10,7.298415E-24,9.457784E7,-1.4218246E-27],[-1.3826582E-4,-8365.937,1.5826727E-33,-4.3762118E13,-1.638345E19,2.3506025E-14,7.5632305E35,1.7000062E22,-1.9258136E-26,-3.7648986E-38,-2.1044617E-20,-1.94231665E10,1.4021162E-30,-1.8531586E27,2.2573868E-26,1.8158826E19,-4.8769556E16,-3.519775E-33,-2.776269E30,0.06618641,-1.0570512E31,-2.1206823E-12,-6.407421E-16,-2.4483065E-18,-2.9193552E-36,-1.2697332E-38,-9.11313E-14,-3.60744627E9,5.851594E32,3.343895E19,-1.79549422E16,-1.9918633,1.3503544E-4,-1.9426696E-36,4647990.0,-1.372953E33,-7262599.0,-6.5252539E14,4.9826445E-35,-7.995364E-22,7283753.5,4.2300386E13,-1.4573794E38,3.9310373E-28,-1.8676528E-27,-204610.77] -,[1.1690469E-5] -,[-1.7490238E-20,-335.36093,-0.03876838,5.7398714E-11,2.58614863E16,1.7895315E24,6.746036E-19,8.335507E27,-1.1199012E-8,-70.68674,-100628.875,9.1079204E-23,95.32721,-8.3105464E-5,-1.4512805E-9,1.8253357E-20,9.043557E-12,-1.4538089E34,-1458.933,-1.5232609E13,-3.5019788E21,-6.431496E7,-2.9235591E-34,-3.4052817E30,-5.42358E-15,-1.162009E-19,-1.2892123E25,-1.1598687E-24,-4.9787108E-8,-1.2004785E-23,3.264165E-25,1.08954664E-29,-6.9852667E-25,2.8870893E-35] -,[-5.9509536E-11,3.022469E-31,1.37522086E11,-5.43904525E14,6.7213414E-28,-3.109001E-38,-3.08868E-30,6.997175E-34,-5.7764715E-17,3.0259297E31,8.995435E25,862.57745,5.0345965E-32,-3.75554887E12,3.9959064E-33,7.711432E-29,3.1212494E19,-4.5898716E33,-3.1595166E-27,5.19588E30,3.158304E-28,1.8022409E36,2.9463178E31,-2.0824029E-17,5.21766976E8,4.5923488E-18,-6.8528934E-23,-1.2853099E-8,2.2906182E-14,-7.2089754E-14,-2.5029027E-11,-9.334377E20,1.5007181E34,-4.1258442E27,3.170124E36,1.4901184E8,-2.0482806E-12,-3.1524406E21,-3.684307E-8,2.25045607E18,1.7534187E-16,0.09259096,-1.2650649E7,3.5243125E34,-3.839742E-36,-2.0951473E22,8.4107808E14,2.49820672E9,5.943513E-14,-8.370782,1.7470015E31,2.4800524E-16] -,[-1.8314581E-24,5.3156383E-15,4.06149739E12,-2.0778908E-24],[4.7414213E35,-1.4472924E-24,1.0667976E-27],[1.6747693E-36,-6.3536463E-24,-2.9848924E26,-1.93258496E8,-2.5724427E-17,-4.7488213E15,-2.9393788E36,-24.488659,-1.6337917E-13,0.015942302,-4.50737E-22,0.09000197,-3.7305844E-7,2.705776E-27,5.522876E37,4.9042255E-6,-2.5144967E33,6.326865E-8,-1.6325168E-28,-2.12185456E8,-3.1032023E28,-730.28314,-2.81790566E9,-9.1335451E10,1.944591E32,-1.796695E28,-1.9997478E33,1.5470966E-13,9.697748E-11,2.8183301E-38,9.839224E27,-3.3696503E-36,1.5711026E34,-2.7216077E38,-3.4466444E-32,7.4459716E-10],[4.7447296E8,1.3187252E20,9.5262305E-18,3.48214431E16,-1.48230152E18,3.2828393E9,-89.32659,1.32706145E-5,-2.2086582,4.23790194E15,1.8866916E-38,-1.040885E-9,-19.96205,1.8702944E31,-3.7670456E-10,6.5041374E35,-6.5374434E-29,-2.2779346E-29,-1.930791E-14,-2.0355456E-36,-1.8985005E38,-6.1017356E-38,-9.783483E-11,-2.590552E-10,-2.144385E-14,-5.8224094E-27,-2.1036241E-18,-9.508679E-4,1.046445E-17,-1.06253011E9,6.1921203E9,-5.1182716E-26,-2.8552844E13,-1.0548943E38,-3.1364824E-28,-2.439762E-14,-1.8849034E-22,3.175472E-33,2.85419831E11],[-1.2728546E-25,-2.4089081E-15,-5.345997E25,-2.0281554E-8,3.8364284E-5,-4.7256496E21,-203018.06,-4.859113E-25,1.2689607E-23,1.04371476E10,-1.99889603E16,-1289.2817,-4.082002E21,1.7250264E-18,-4.2471706E35,-1.8774203E-35,-1.80572385E10,6.5519203E28,-2.4870927E-37,-5.33203972E17,-2.0176224E-26,-5.4523193E-34,-2.1113368E8,7.6477055E-20,109985.51,6.157952E-6,3.8773703E-29,1.6886053E-17,-4.7609815E33,-1.730315E-36,1.35175844E-20,5.721813E-18] -,[2.578383E-29,2.1407522E-17,31.79031,7.6587745E-35,1.7669703E-16,-2.2143754E-11,-9.592619E-5,0.25148433,-0.0015977436,-24.724857,-1.0479573E-11,7.600209E26,3.03723119E11,1.60510268E13,-6.43998E37,1.156153E-30,-1260.8202,5.9056794E-31,1.8560622E-13],[2.3129828E21,-1.3179114E-17,0.0018293444,-0.028355591,-5.1170008E20,-1.639061E-35,-4.288461E-12,2.7321386E21,1.2945997E-8,-3.14421658E9,-1.19789886E-29,1.2108384E-19,4.3150282E-38,4178308.2,4.1494581E10,-6.315856E-18,-1.07972675E16,6.0284429E13,-2.5340403E-24,-7.053255E-32,-1.38768728E11,2.5930558E7,3.6359193E34,2.8237853E-36,-3.8022302E-27,-5.9270603E-38,0.0014557667,-3.4602648E18,2.85290394E9,2.15717088E8,-4.783179E21] -,[7.3165595E-21,1.6330827E7,1.949938E22,-3.0818687E36,-9.492587E-15,-8.018424E-19,3.6766472E-25,4.710477E-9,2.4674065E27,8.4178804E-23,-3.0549799E19,0.011932457,-0.064435445,2.8665436E-8,6.5510726E8] -,[4.143027E-8,1.05527866E9,-3.3034116E-17,-0.01745993,-1.6025022E-11,3.98332128E8,-8.147302E-5,-0.0024260967,2.0681027E-15,4.12118E-6,7.8326714E-8,3.033146E-29,0.4014876,-1.7636612E19,-2.1729423E27,4.658796E-9,4.692644E-13,5.6560588E-18,-1.4236583E26,2.1093095E-7,2.8377602E10] -,[-5.3543276E-34,1.2162258E23,-1.725136E38,5.8121733E-21,9698725.0,-1.3808126E-27,-1.9920243E33],[-6.8163403E-28,3.7531467E-29,-1.0797245E-25,-2.04896998E9,-3.2018075E33,6.17484E-5,-6.9869959E15,-1.2112279E-22,-6.8622163E-31,3.27222374E10,0.2774757,9.447319E-20,5.3670025E35,2.5768802E-26,-5.908172E-15,7.111735E31,-1.0841741E-5,-4.5920173E-12,-35.24335,-4.1909565E-10,-1.451999E7,3.113321E32,-2.0105926E-38,7.360878E-22,1.1959701E26,7.8103871E11,-1.01281424E31,2.825187E31,7.791911E-37,-3.8097867E-25,-2.0257489E-22,-6.2790656E-5,-1.0638966E-13,-5.607467E-39,1.4443735E-11],[-1.5659822E12,-1.8548425E20,4.379502E-8,1.6227315E21,0.023761006,-1.4084973E23,-1.0373781E28,-3.92045302E17,-3.6820947E-21,7.721931E-7,4.953904E-5,9.829162E-23,-3.0381864E34,2.2705972E-20,0.45697522,1.37205135E23,-6.7923245E-28,-3.8678106E-14,-2.8258558E-34,-3.4087187E-22,9.985425E-35,-3.208587E23,4.7699587E26,341.0504,1.9148532E-23,1.5104017E-27,2.2115055E-6,-785.40796,2.47666442E10,-1.09997891E15,5.4106214E22,-1.7257473E-19,-1.0920247E28,-1.98869012E16,-3.8831403E31,7.180658E30,1.3781747E26,-9.8714429E13,-2.8494894E-21,3.0224927E-15,7.1029867E19,0.36988097,-52938.695,-3.6699495E-26,-2.1958775E-7,9.4241516E-12,1.3375675E-20,1.641165E-9,-2.1869612E30,-1.592192E35,-1.4863947E32,1.1867613E-34,-1.7990541E31,-9.2414015E-37],[-1.38330671E14,-1.0093699E-25,2.07890816E8,2.495359E-21,2.8600511E-30,1.52352735E13,-3.5963658E-5,-8.4457796E-23,3.2360748E-37,-2.5366527E19,-3.0223868E-10,7.704658E29,-4.891117E-39,1.8510434E-9,-1.9662264E-6,-8.5123343E-35,1.0233703E-29,-4.07778E-4,-4.9774094,-2.1434484E-22],[6.1155787E-15,3.5030426E-35,-2.1463117E36,-3.5930778E-10,2.5891168E31,-2.034399E33,-15.845953,1.2520056E-15,9.271135E-13,-1.0094107E29,-6.2471997E-26,1.6837067E37,-480.735,2.805314E-5,7.38588E16,628.3713,-4.178089E-17,3.659356E-32,1.06922208E9,-3.6458355E32,2.093946E-11,-0.009274969,3.435875E-38,-2.647997E35,4.8889696E-23,-1566708.4,1.8100004E22,-9.7933875E-37,1.6057602E-36,223176.4,7.6059896E7,-1.6038903E-22,8.0857737E-32,4.6276833E22,1.7561114E26,-8.4496947E-16] -,[8.960487E-20,3.8659976E20,3.3677843E19,0.3636747,4.001805E-36,-8.3070655E-30,1.1630094E30,-0.2936796,-1.0943436E-24,2.2370308E32,1.3145464E-21,1.8699703E-12,6.6084256,-1.14621564E-7,5.449864E33],[-9.001434E-5,-0.013550841,0.0024260508,5.977011E-5,0.023893138,-0.79309505,-4.05305385E18,4.2951996E-21,1.8245819E-34,2.092976E22,-1.9596499E37,-1.9850101E-19,-2.95824677E15,-8.9322776E-24,4.7877494E-37,4.6591217E-11,-8.8906435E-32,-6.551076E-26,108380.734,7.2342685E-22,7.864914E-36,-0.74648815,8.7611578E8,2.8797029E-8,-2.16400036E11,-3.991639E-14,8.8960174E32,-3.3295037E-22,3.805071E-34,2.505315E-6,-2.2189872E-15,7.3960384E-25,-1.4324795E28,1.19091597E9,0.30877537,-65596.45,-9.1923716E16,0.002302992,-3.5947764E-6,-2.7453833E25,1.8256555E22,6.296076E32,1.7969349E-29,-1.3224854E-25,-1.865051E-13,-1.6795361E-9,4.58929E-32,-7.5768415E31,8.609212E-13,-1.405573E20,-2.1593589E-20,1.4146859E20,-1.5759025E25,4.11518787E17,-6.6402119E18,-6.538252E-13,6.8095654E-20,4.904244E36,-8.702819E11,-7.804506E27,1.9414134E-30,-7.285966E-6,10.765796,2.6755415E38,-1.080392E-33,-3.3392953E25,3.3808866E36,9.690364E-18,9.63493E-23,3.02373373E13,-186.63098,-3.608344E29,-2.369865E-31,-2.65095208E17,4.233673E36],[1.863118E-38,4.2373912E-32,-5.6873272E9,4.89264807E17,1.4580419E-8,5.801327E25,-3407944.2,-9.989441E-27,-2.3140594E20,-7.439021E37,-4.070032E-8,8.152068E-13,-2.3844628E-13,-1.5062257E-31,-7.664698E-27,-1.0964827E20,1.343938E-12,3.3020196E-27,1.1043192E31,1.2754209E29,1.3173707E-12,6.776007E-15,3.0201242E23,-1.02439533E18,3.9109428E-28,8.868579E31,-2.6422139E-11,-2.794292E37,-7.890599E36,-6.0250507E23,-3.762835E-19,1.54682065E11,-5.7581316E7,3.1687102E-27,1.383549E30,4.5978523E-9,6.571768E-34,3.1372478E-5,-9.483022E29,2896239.0,-1.5946105E-23,-9.604633E23,-3.074529,-7.823916E27,-6.328333E30,-9859902.0,-1.16368385E-26,8536995.0,8.7641715E22,1.3236179E-20,-7.314045E-32,-3.2939533E-17,7.584158E-26,2.2639514E34] -,[2.4222497E31,8.4374126E16,2.7139265E-34,-3.0442354E-12,1.0319381E28,-0.012431737,14300.638,9.864925E31,-8.148761E22,1.6651499E-19,-2897.8486,1.7007772E-21,-2.5553316E-12,-3.8972147E13,-1.3397367E19,-4.28240589E9,-7.330018E-24,-1.3116366E-35,4.0559863E-16,-2.7402616E-30,-9.2888735E-26,-3.033942E32,-3.7567037E28,5.7873286E-29,-2.56340896E8,-2.001569E29,667.44653,2.3909379E-29,-3.8634906E-16,-6.7680235E-26,9.0435826E23,6.6319652E22,-3.3968045E34,-3.48282163E9,-6.46849E31,-6.701696E25,4.722044E-15,-3.899074E-14,3.559046E28,-2.32093161E16,0.92322904],[2.1500663E-14,3.049157E25,-1.77232036E10,0.00621631,9.8988935E-11,-9.894642E19,-1.97949784E11,6.211777E14,2.7481554E28,3.45673034E16,-7.2608294E-8,-7.640893E-5] -,[5.763044E-25,-4.494909E36,7.363763E-29,2.9826397E30,-4.9785089E18,-5.7037541E11,2.6963912E32,3.173759E36,-3.4239266E-37,-229933.92,-1.65245376E8,1.7023391E-19,-1.4045989E23,7.2134404E13,3.421599E-22,-9.9753748E11,-26708.273,1.82239462E15,-7.4102952E7,2.8951376E-15,6.9537265E-25,-1.3446756E28,-7573.729,-1.8991696E-29,-1.1015584E-23,3.071476E34,1.1310751E-36,1.4858923E-24,-6.435571E-11,4.8536323E-14,3.9481112E-17,-8.239384E-8,-1.7388548E23,1.9631239E-14,-7895389.5,5.780547E28,7.1938254E16,0.0014096443,-3.36592E-23,-3.330957E37,5.9715877E27,-5.96862E-12,-27938.877,1.4260314E-28,-7.3189333E-13,1.4535185E35,-6.764541E35,2.0084628E30,4.142594E-25,-6.3855526E11,1.06434352E8,2.064847E-35,4.097626E-33,-2.9355786E-15,-4.885569E-29,-3.34775789E14,3.9914883E-29,5.8714615E13,9.219286E-11,-1.1424285E-10,8.861739E-25,1.01399724E34,-5.582282E33,4.7519065E-36,7.070825E-23,-6.9288425E-37,1.4018126E-21,-1.5138554E26],[-0.014581802,-0.014699543,-0.4107308,-3.1366124E25,2.9320444E-7,-3.89730638E18,5.061011E-35,8.1635905E-30,-1.9888839E33,1.1674182E24,-9.3102266E-36,-4.1034733E35,8.1275039E9,-2.34244896E8,-5.3807376E-21,-2.3239405E30,-1.852454E13,-8.253771E-11,254.91922,1.94037378E14,-1.7782805E-19,1.3514357E-29,7.8769123E17,1.9456303E-38,1.6169681E32,-196.27563,-18449.299,-3.1785905E-25,1.0165525E-7,-6.6392956E-14,-1.9442488E-23,1.72436339E9,1.36848299E16] -,[-9.3395342E17,7.373187E18,1.1399847E-27,-5.316129E-30,7.2988406E-21,2.2520927E34,2.3066718E-32,6.5449464E-30,-6653136.0,-5.077006E24,7.06684E-30,-9.627278E21,5.100456E-19,4.5153296E29,79.27249,-7.572292E-6,-2.206689E34,1.570405E23,1.9953152E7,-5.0584735E37,-2.7735241E-11] -,[3.8347066E16,4.7537537E-21,0.43369678,11.544229,9.141825E-12,3.206481E-7,-5.40461E37,-3.912049E30,2.1420896E-29,-11621.5625,-1.2781598E-26],[1.12640424E16,2.4187301E-11,-3.73978266E9,3.3488855E19,123.37761,1.451703E-22,40880.918,2.8787174,7.8736654E-22,-6614.9106,-67.738495,2.7019217E37,-1.29506644E14,-4.59274304E8,-7.691104E-10,6.803491E30] -,[2.546722E38,6.3388975E27,-3.83930631E17,3.3236818E33,2.2989126E-29,8.8564961E17,-1.6703415E25,5261816.5,-1.6122646E26,-6.534883E-12,-1.4734447E-34,4.461915E32,7.614744E37,-2.5144255E27,3.9098264E20,-25671.889,7.867279E27,4.54826098E14,-2.1246989E24,-6.5303327E-9,-4.1615433E-17,2.27374538E16,4.5768346E-4,11.746855,-3.13760212E17,-1.5043964E-26,-5.7728556E7,6.378261E30,-1.6621725E-34,-2.9804674E25,6.2865331E9,6.566137E-37,-1.3021403E-36,4.8349145E-18,-9.623567E-23,-1852880.6,1.3170271E-6,2.8417924E-10,-1.0297846E-28,7.8908384E-20,1.1305975E-18,-2.298566E-29,0.28349736,-4.1232098E-32],[-53378.02,-2.4348677E-5,2.0141289E22,-2.3816893E19,6.1437776E16,-1.673584E-17,-6.4791756E-8,-2.517094E-29,-2.063491E-33,-2.20992E38,-2.820192E-7,7.1575211E15,1.6017266E-37,-4.1947107E-16,83.15008,1.48910131E18,4.9730394E37,-6.193448E-6,-6.1033527E-38,1.4470078E-11,-109360.18,-2.98181271E13,4.546957E27,28.050613,2.22219595E14,1.76234946E17,6.24209,-3.804794E-13,-2.7770268E34,-1.6883155E21,1.17251257E12,2.85061511E16,7.688295E-26,-8.5139256E20,2.4504939E26,2.5029476E-14,5.9073295E-19,-8.40137E-28,3.663849,1.509104E-29,1.8793774E38,-3.26979486E11,2.2339417E-16,0.0057175397,5.914664E-35,-5.8366517E-18,1.17936447E13,6.9955204E-6,-1.682988E21,-6.0758643E-15,7.311768E23,-9.2867125E14,3.233391E-15,0.4262526,-3.32802392E11,-1.1501448E-11,-1.701389E27] -,[-0.0017165262,-1.2724064E33,-9.009366E-16] -,[1.7839068E-10,7.7823914E-10,-3.07036058E10,-1.5130077E-37,-446.29678,-1.774378E-16,-1.6339367E-16,-1.698852E-31,4.1384502E-14,9.514817E27,-7.864796E-25,-2.9919293E23,0.13843381] -,[2.1279191E-4,190355.83,-4.1957372E-7,1.6358798E-10,-5.546888E24,9.579898E21,9.0732345E-7,-4.8682492E26,1.2438232E-25,-8.743151E-12,1.6934396E34,-1.0441042E-14,1.6620653E19,-8.675206E-27,-758141.7,5.904506E-5,-7.380854E25,3.8057492,-0.00773271,2.5373261E-26,-6.6881906E-10,2.095169E-11,-1.791023E26,7.159086E-32,-9.0563107E33,-6.6240623E16,1.4647568E-12,1.2714292E23,5.4157537E24,7.0665114E-6,9.473122E-35,-1.1077577E-32,8.3889456E16,-1.4109704E25,-4.6205777E-31,272257.78,-1.6126594E-16,-3.998725E-6,-1.0632713E-11,3.4417483E-21,-6.3214898E18,-3.5661094E-12,3.655405E-30,-3.7573435E37,4.25798192E14,-3.514179E30,9.361147E-32,1.1075149E21,0.0029928624,-5.2112356E-13,-6.5362262E15,-1.2038075E-21,3.115808E-21,-2.05605E-36,2.7845992E-30,-4.020312,5.582345E-20,5.8310703E-9,-0.17258346,-52.747665,7.285912E-29,2.61914273E15,9.815328E-23,-1844.2174,9.002968E33,2.1011398E-19,6.693701E-29,-3.1481093E30,0.23139499,-4.3402977E23,-2.6744801E-14,-5.0197025E-16,-689385.5,1.4711415E29,9.5353845E-26,1.0982829E-16,-2.097193E-15,1.0374574E-11,2.8988225E-15,-1.1387278E-29,-2.1959857E-17,3.0753384E-18,-2.1534387E-27,1297446.2,-8.081576E32,7.3064278E11,-2.0182112E27,-1.9000503E-25,3.8570384E34,-1.5915849E-29,3.51232908E17,-5.329934E-6,2.38143219E14,-9.6799263E27,6.160485E-13,2.4711058E35,2.4747681E16,0.09800296,-1.1182718E36,-8.7405578E9,7.566347E-27,54503.645,6.6824335E-21,-3.3890405E-30,2.717748E29,-2.1986161E-5,-245.0435,1.6598992E19,-1.130798E20,1.4756107E-9,-1.5944864E28,8.0335363E30,4.537881E-15,4.99391E-28,-1.9242471E31,1.5696506E21,1.5965287E-36,4.2670817E-6,1.7389909E-36,2.7348243E33,5.4664225E26,3.3139525E-29,-1.6460602E-6,3.43947622E9,-3.470771,54.989876,-0.19886814,-1.85754547E9,1.0683111E27,5.6301133E-24,9.848386E-21,5.2225376E-31,-4.32787E-14,-3.320742E38,-7777458.5,-4.145566E31] -,[-2.5351684E38,5.5903027E-19,1040321.56,3.38312458E10,1.4903255E-12,0.025317257,153.47539,6.8795531E10,7889.5537,-8.9482164E-27,3.12200499E9,1.9048915E-4,2.6747952E8,8.365426E37,3.6656786E-8,4.179911E-19,-1.7171582E31,22418.111,8.0066557E16,-83767.76,109.396736,1.3821912E-31,-2.8017373E-27,58816.56,8.6286327E-26,2.96344124E13,1.6938506E-37,2.62191E-8,3.5752467E-4,3.3806003E31,-1.3314564,-5.653364E-25,-1.7542277E13,-6.0345686E26,-6.1112406E13,49.768883,-7.9691228E9,-3.809219E-17,-2.1541923E-38,-3.9188712E-4,-2.3283323E-17,1.65297894E9,4.83322501E14],[1.8270576E-22,-4.960506E-13,-1446.0315,3.6918467E-19,-3.50016776E15,-2.5466105E-7,1.3753059E27,1.0404823E-8,4723.4307,-2.819457E24,-1.3786469E30,-5.357719E-7,1.58583521E10,1.4863654E28,3.8821987E-13,1.5235958E-6,5.430119,-1.7409842E33,-4.7633066E-21,-2.7903541E26,-2.1037476E29,2.8976874E31,-2.0810089E38,1.1160759E-30,3.1547093E-10,-14455.295,-1.0687387E-26,3.0977924E-28,1.00432466E-13,-1.9730476E-24,9.334673E19,-4.400483E35,-2.0237804E-16,-2.4839214E26,1.2820549E27,-2.9480559E-12,-8.0636827E33,1.0154122E19],[-4.3857993E19,1.877893E-23,-2.7546048E-19,-1.3387484E-37,114.46374,3.4824585E-17,-2.8232162E-32,7.8781281E9,-5.1475985E-30,0.0019016591,1.4153812E7,2.6432982E-37,1.6322665E34,1.7036795E-5,-9.2699866E36,-4.8939908E-15,2.8015324E30,5.558837E19,2.4107695E-22,1.5226718E-36,5.0422913E19] -,[1.8566589E22,1.2250837E37,4.5599097E-14,-4.0511993E-30,6.5709867E11,-2.67016E31,-5.3984523E-14,4.389576E-35,5.0318777E37,-2.30779313E14,-5.773945E-27,-6.68303E-18,-4.458687E-36,-6.861388E-5,-9.377162E31,4.809452E-13,2.58250608E8,405.7435,-8.5590437E27,20.174587,486501.72,5.704466E20],[-9.584733E26,3.3663747E-12,-1.0657247E32,-4.996626E30,1.5157849E25,-5.6416478E-27,-2.8021502E35,1.6830677E-16,4.063297E25,3.884891E-7,-0.20764667,4.2618368E-36,-2.2505126E24,-2.16989951E16,-3.3791352E-23,-2.2622431E-12,-1.9832247E-18,7.9941054E37,4.3089252E10,-3.9480576E16,2738.2466,1.4452786E36,1.321338,-5.733875E-22,-1.23433347E15,2.4229963E38,-1.1628368E-8,4.8816623E31,-2.823122E-6,-1.6411271E31,-6.02098E-22,-6.287941E36,1.8752344E-14,4.3050327E-10,-0.02403785,5.7330963E-37,-2.1668185E22,-2.00985612E14,-4.7075902E21,8.27232E36,-2.6243335E35,3.92364023E17,1.8086118E26,-3.5541944E19,-9.298125E-36,-1.6644138E19,5.4246154E-8,-15749.5,2.19071035E13,7.02522E-12,5.4936867E16,3.0804336E-37,3.0653246E-32,-5.08605E34,-0.0011060967,-2.4211834E-6,-5.309445E-21,1.1074681E-26,-6.079166E-16,8.9123897E10,5.1624315E-22,-8.689611E-9,-8.623229E13,-3.27240473E16,1.3190854E36,-1.4852208E-21,3.027946E21,0.0035015726,-5.748167E-8,-1.9010928E-30,-1.1107124E-17,-6.8929363E18,1.7260037E-38,-0.007688139,4.202356E29,3.5537087E22,9.378857E-24,1.1471318E-24,-4.9013718E-8,-3.6719764E-5,1.01447354E9,-9.823231E-18,8.8776794E16,1.9152184E24,2.4040656E-24,-0.029477606,-5.6788453E26,-7578.009,2918.2883,0.057530016,2.3970672E37,-6.4669535E21,3.5951024E-22,-1019938.8,-0.011560057,8.943859E-6,6.1301847E-33,-1577910.2,-8.1258654E-13,1.0505744E22,6.453602E-21,3.4392283E-30,5.6482457E-14,3.08532364E18,2.0574037E24,2649.5166,5.6074753E-31,-1.65605897E16,-3.6331367E-30,1.0064234E-32,8.064997E24,-3.65624492E11,3.88990658E14,-3.5895756E-27,-2.0697576E34,-7.2641886E-11,-7.456001E-21,-3.9443768E-20,7.68356E-40,-1.3052598E-38,8.222302E-6,-2.0499108E-23,-8.028338E22,-4.527867E-16,-1.0447115E-27,-3.8851717E-12,-4.0457946E-16,1.507552E-34,2.1087501E33,-1.1247249E-4,-2.63530925E15,3.2929465E-18,1.1921536E-27,6.477329E-24,7.7310992E16,1.9015664E-33,-1.0365526E7,3.18606103E17,-6.2920983E16,2.5957222E35,-1.9258832E-31,2.6266172E-19,3.5621542E33,3.0454332E7,1.2476855E-16,-1.8176861E-31,1.36548031E13,4.9214045E25,2.7438851E-17,-1.8473959E33,-3.0454578E-23,-4.8897692E7,7.0721573E37,5.9847318E-27,-4.1846877E25,3.3531302E23,-3.364228E28,-3.74606E-27,8.870112E-19,3.2105653E-19,6.9492075E-24,5.413313E36,-7.762603E28,-2.3253088E-35,-3.31289446E16,-2.16585744E8,1.34195825E10,3.7324236E27,-4.01608869E14,8.3575915E-12,0.0041716653,3.3479494E24,-4.2670086E-19,-2.8259825E-31,1.2722923E-10,-0.0017439951,2.0298965E26,-5.0272176E-21,1.99348746E15,0.18023208,-1.5176701E-24,-2.1410287E-10,5.6091987E8,-1.4499126E-9,1.1885654E-9,2.6898118E-36,-0.18070306,1.4850517E10,-6.852806E20,5.1599894E-22,9.411071,4.89038217E11,1.07041925E-13,-0.020197956,8.366439E-13,-6.4576534E35,3.0023203E-11,-105.14248,2.2960459E14,-2.7814795E-28,2.8688215E-17,-2.3964953E19,-1.6446723E27,-2.1542435E-36,222250.61,2.1277626E31,-3.5781515E-37,13.174928,7.4567587E-19,-2.0350378E-14,5.2352136E24,2.9334891E-5,1.0556122E-7,-140545.3,2.2071881E33,-1.0923296E-35,6.8107282E17,-1.1686143E-36] -,[-3.7570866E-36,4.3920528E-21,-3.0267458E33,-4.8123838E-4,2.12880242E15,2956280.0,-7.4784644E-8,7.6129017E36,-30.573015,2.8056875E-28,6.55768E-28,-1.16929085E-26,-174.06331,80.37314,-1.04798074E14,-1.0279604E8],[2.628307E-16,-1.7618769E-37,-5.0951494E-27,-1.5004825E-38,-1.6793842E-36,4.6419328E9,-1.1114292E-14,-6.980926E-35,-1.10313708E12,5.6927907E-26,1.40455E34,-1.5325342E35,1.3978647E-7,-6.990763E33,1.7162768E31,4.07759687E18,-1.8870195E-22,262014.48,-4.193267E-20,-1.3926199E-21,1.59593477E13,-1.19191731E16,-2.5215198E32,9.60373E23,9.7813126E-11,-1.57487411E9,-1.35527411E9,3.1812082E-9,-6.177941E-16,1.3771007E-36,-6.0719493E15,0.04487049,-1.1324775E33,-5.3247848E7,-6.4157197E-22,2.1571381E-32,-3.3804733E-13,-1.7190284E24,-5.294223E34,1.5343845E25,-7.05058E-9,-3.4925557E-27,-1.2725383E-34,-7.734155E-36,-3.4937855E-28,9.50521E-23,-3555126.5,-4.5004522E-27,8.518416E31,-2.8177185E-35,-5.541759E-34,2.2947006E-17],[6.8358187E34,2.04636401E16,9.12752E30,6.527289E-24,2.9402646E29,2.5824407E36,-4.8833208E30,-5.94667E-15,1.30115923E17,5.6415725E-14,2.4838693E-16,2.2218246E-29,-3.1267355E34,-7.4469495E-32,-2.7373522E-12,-2.622843E34,-1.9547955E20,-8.692458E-33,1.9223859E-5,-4.5640927E-27,-25.795946,4.1003613E29,-9.2776E37,-6.434533E-23,-3.1305103E-38,-9.306484E26,-245004.48,-6.335563E-24,2.0519342E-9,1.2816643E-38,5.482879E33,3.1055513E25,-5.860269E-6,2.974895E21,6.796779E-27,7.070272,6.444903E30,4.9232947E-37],[-21.336824,-4.7621618E-20,-0.66497993,8.3766025E31,-2.3898977E-8,-3.5307857E-9,-1.0266436E-5,1.7609032E38,-7.6773987E-38,3.5121708E33,1.7548092E-35,-1.1697135E-18,2.8212008E-15,-1.986672E-11,317.6892,3.99097434E15,3.63208097E15,4.381874E-11,1.12951248E8,103042.68,2.4132948E23,3.33862067E16,2.4436065E23,-8.328726E32,-4.43866986E14,5.46849E-33,1.1179067E20,1.68093248E9,1.4400609E-4,3.0030544E28,-3.0063615E29,-3.01945897E10,-45050.22,1.398677E-9,-3.7032833E28,9.7888625E25,-1.3143519E-28,1.3282156E-33,-1.06655865E21,-1.4759362E-25,2.58851945E16,-1.7093964E-5,3.72831656E12] -,[1.7212977E22,-1.6110315E-34,4.1975646E19,-5.9847237E18,19.350712] -,[220476.72,-1.18574151E17,2.2182982E-24,-7.739423E-37,-1.9043889E-31,-5.6461822E-8,-2.7649708E-20,13.952787,4.1838666E20,4.38796E37] -,[2.7655644E-4,-5.724242E23,1.96025779E9,-1.5486204E-8,-5.4481943E-11,2.1857963E-5,1.63553918E17,-7.113666E-13,-2.1068328E34,-12630.789,-3.297585E-31,-1.4076463E-7,-9.1754084E-23,-4.44090816E8,1.3148161E-19,-3.0914472E-11,-1.4561927E31,-6.301541E-27,8.399797E30,3.67614331E15,-0.0055200066,-5.7940585E13,-3.43707807E16,2.716806E34,-1.0018717E-8,-2.33219988E17,1.4592641E38,2.6494505E9,1.05013653E14,-8.009347E-33,1.9547011E-29,1.883113E26,31231.357,-1.011895E-5,-9.6077873E12,-1.7764658E-13,4.7828343E32,1.31251164E14,-1.5896487E-16,259.09628,1.0760773E22,-5.309685E-4,12.104666,3.6872232E27,-1.7278494E-33,227827.33,1.17411065E-35,-2.2445887E24,2.4458088E7,-5.3171926E-22,2.1767572E-32,1.85946416E8,2.8596588E7,-1.91242043E11,-7.835202E-18,-2.7471544E-35,0.0010917947,2.1841521E-4,-2.1312299E-29,5.930519E-8,6.6859726E-11,96240.48,4.051071E33,3.168662E-16,4.687558E-8,-4.9372333E20,-1.12451607E17,5.8929087E-5,-1.467048E8,-1.6280365E-30,3.76742784E9],[-1.75584351E16,1.2245168E-33,5123130.0,-4.514292E-33,-1.4935367E22,2764259.5,-1.45118991E17,-6.9147292E13,9.674682E-33,-119250.984,-3.703168E-14,5.6170836E33,116.853165,-5.27508374E11,1.1289592E-15,9.946945E-22,-3.9366324E-30,-1.3504566E33,-1.1016756E38,5.08689719E14,-1.2788694E-32,6.599717E22,-12502.141,2.2842587E21,3.667297E-10,-4.5007733E-32,7309935.0,-1.73013051E17,2.4907978E7,2.02769039E10,-8.224463E-11,3.0989545E35,5.774948E-17,3.74249878E17,-2.061192E-5,9.947499E16,3.0657485E28,2.5322439E32,6.6040974E-15,-0.07022908,1.716999E-9,-1.3621023E21,-1.0400885E-7,-2.9722635E-13,4.9212E29,-1.0066843E-19,1.6089257E-11,2.3340341E20,-6.290064E-29,6.886818E-38,-1327744.8,1.5810359E-38,1.1454622E-28,1.3125685E21,-1.1477186E33,1.7961565E14,8.71463E-36,3.65589472E17,1.1879758E-23,-2.081335E-37,-6.836266E23,5.2622714E-30,-7.0061786E-12,2.9054075E30,-1.7370435E-18,-1.9153267E28,-2.7897597E-18,0.39471734,-2.676496E-23,-4.381145E-9,-2.1551504E-18,-0.52318925,2.546482E-11,-1.0389E29,-10.113984,-4.4505333E-11,-5.4575633E-8,1.2912783E-9,-2.1069744E-37,33.521736,3.1073418E-7,3401.844,-4.8082936E-30,7.357117E-33,3530.7163,-1.0631536E27,1.06069036E15,-1.5604408E-33,2.2575062E-19,-7.26557E36,1.2502042E-34,2.4010126E-34,-1.10593291E18,-4.842133E-36,5.8919647E20,-2986.734,-1.3374483E32,-2.3035782E-27,1.4147205E-18,-1.7623882E7,2.7470034E37,-1.8373128E-16,3.1367524E-35,2.44237078E17,-4.451739E-37,3.404541E-31,1750.7219,1.3187349E-16,-4.686884E-27] -,[-1.2303181E-9,9.170093E-37,0.4784891,-6.1942696E14],[-0.0037292065,1.5047219E21,1.9131262E-14,-2.627254E-27,-1.5929944E-22,-1.4257981E-12,-7.630401E-5,-75804.51],[9.935494E-21,-1.8472805E-36,-5.8191081E10,1.53035242E13,5.576163E-17,0.30631384,4.803341E-28,1.6066789E31,6.2460291E11,1.2759892E29,6.1332144E15,-4.130231E37,-1.2088627E15,4.6335262E-18,1.73138E-38,-2.7958729E-27,4.6879826E24,4.1132406E20,-1.7825944E35,-1.03556544E-19,3.3949943E-9,4.11711579E17,-3.35493888E9,-7744065.0,1.0330292E36,7.724934E-15,0.5944197,-7.936431E-10,3.9887612E29,9.94681E-37,1.04271539E18,-1.6114264E24,-1.0828852E-21,-5.4225265E-28,3.41002289E11,1.375858E-18,1.08457798E14,-372435.97,1.878048E-4,2.839687E19,-3.5429884E-12,-1.4272401E-13,1.1276847E-16,-2.859622E19,1.04727879E15,1.1058462E-28,1.3562694E-28,7.651554E21,-5.4016757E37,-1.0013809E23,1.33454879E10,-1.1905907E21,4.0029266E-10,2.9158632E-21,8.4604236E-24,-2.9850152E-34,-0.012190459] -,[-5.764414E31,-5.2196752E26,6.7858896E7,0.909799,-6077.3174,2.3042354E-21,-5.212471E-5,-5.1442374E-36,-6.9973688E7,-2.727006E34,-1.1359338E-4,-3.9407945E32,1.30400625E11,-9.346719E-24,2.1532475E-26,3.8182804E-22,0.10658172,4.39766374E17,3.70600675E18,3.5758696E11,-6.778952E-15,4681.533,-4.5092954E-24,-2.08312356E16] -,[3.2162023E-22,8.221859E-24,6.462382E-31,9.4229164E21,1.1810377E38,-0.12487992,-1.0157863E-4,1.15495858E15,-6.2867823E31,1.2492463E-23,9.601541E-26,-1.6277776E11,-2.931216E7,3.6215828E-25,-2.7987744E-13,9.694505E-35,1.23615048E10,4.1462154E-13,1.4492912E-25,-32598.293,2.0894494E38,1.2132723E-37,2.2854747E-5,-1.3249754E37,1.8793671,1.1965214E-16,1.2201502E-32,7.583581E19,1.5794895E-9,1.182034E-9,-2.5222528E-12,-9.3422186E36,8.056309E36,-135772.14,-1.523953,-436.8168,-3.447895E-30,8.5902084E-11,-6.1617074E-17,-1.3981657E-14,-4.2009978E19,-6.309546E-29,-731046.6,-4.27337921E18,-9.168636E-26,3.95471999E14,-6.735841E-6,-5.207519E-6],[1.4292304E-8,4.1480423E32,2.0948E-9,-7.849331E23,4.3482833E29,-3.7333004E-27,1.0487214E-9,-7.913312,7.495433E24,1.11571444E-13,6.9270526E31,5.0445893E-12,-5.2592262E20,-3.56502897E11,5019.301,-1.1874029E-27,-1.0265498E35,6.7177503E15,6.86319E-19,1.04973047E17,2.49409959E15] -,[-2.79268102E17]] diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.numbers-int-4k.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.numbers-int-4k.json deleted file mode 100644 index 3a1e557..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.numbers-int-4k.json +++ /dev/null @@ -1,11 +0,0 @@ -[[ -6815,-15 ,25 ,-2379,-30,20,8 ,-148966676 ,-25,-15 ,-475215790,27 ,-21 ,-18 ,-10 ,-860 ,-2703 ,-747,2886 ,-13,-390],[-242 ,22,-55475680,-11,70 ,8,21 ,-5712,22 ,41741460 ,25,-28 ,175967856,20 ,180766425,425383080,-15,100 ,-22 ,0,-4,-1656 ,-195903072 ,-14 ,103871680 ,1,-30,22,5,30,-7 ,-6566160 ,3,0 ,-5100 ,1,4207210 ,2568240 ,262598850 ,3885852 ,-2968],[30,-14421168 ,16,-30 ,21 ,21,-89984160 ,-36689745 ,656 ,-8 ,29 ,27 ,-45057880 ,-2320 ,31,-24 ,-12,22,22],[0 ,840 ,-12,4548996 ,-4,-15 ,21887400 ,27,2255 ,-15,9 ,28,30 ,-4867 ,-19,4 ,5,-12 ,-3,-2964] -,[-2288,-27,0 ,-450877856,-25 ,-1428,288,68410304 ,-2783,10283700,25,0,3360,3220,2,-14,-3 ,-12,162483684,26,962325,-336726192] -,[2080 ,-18 ,-226446836,24,-9010575],[572,-14 ,0,10,9 ,18,4228 ,474152068 ,-9 ,-249 ,-3504],[29,-8 ,88136384 ,0 ,-31 ,26,-5425,342 ,-6 ,29,22 ,-3 ,29 ,4300 ,9710532,-10,-4,-1326 ,19 ,1420,-11 ,15447796 ,-9,11],[-4,101 ,-26148096,2086410 ,-5100,13 ,-396,-11835750,-1204,-15 ,-2562,25 ,-2418,-65220672 ,0 ,-5200,2],[12 ,25 ,1768,29 ,10,-266238792 ,190918080 ,-66498600 ,74835240,-14,-753 ,-31] -,[-19424880,14 ,673847790 ,2088],[1909 ,-6] -,[-1150 ,864 ,1043,24003072 ,-446 ,-12532509 ,31,-1,26,23 ,29 ,27,-234 ,23,-27,8 ,-5424,59461944,-24 ,-37243800 ,-31 ,429 ,-12950162,-741951 ,330,-1513 ,3744 ,-104324880 ,-1363,13723920 ,1072,0 ,-66401460,-7 ,-28 ,14,-496 ,222896688 ,2392 ,10 ,852 ,10,710600 ,-702268,252678888,31,8],[107921457,0,-69005788 ,-110735688,-2,21 ,620 ,-1],[4,-27,-4,16 ,-1197 ,12575995 ,3248 ,-17 ,-341727540 ,25385304 ,265557816 ,-341890794,44668932,-686426364,-27 ,6 ,-2,850],[59970240,-12 ,-30,26 ,-24 ,640498719,5425,-48,-2418 ,83878272,-948 ,-26,308087920,-22 ,-7320,28,18,-2312,-5084 ,24,18229519 ,-833,30],[17082996 ,7,-12,-493723332 ,184624128,-364 ,10 ,-1950 ,-51792480 ,3,1742,21150360 ,9 ,-730,11 ,153 ,7,-2,-25,342078609 ,123,5 ,48,-19,6500592 ,0,-11] -,[-13,-31 ,-1683 ,-26,-4264 ,1005 ,-18,195189561 ,-13780200 ,-3842 ,19,-109547490 ,-13,22,15] -,[-4247 ,163096443 ,4455,4312824 ,-39474240,221,896] -,[18 ,563669100,-4975,-18,-12 ,8,-14 ,11,12 ,0,24,-337153320,5,237760740,-4520,490,-36,54106920,5 ,1337,-31355456,-26,-5751 ,21 ,-91954704 ,-2952 ,-23,468 ,-97562412,2080,28,5 ,14 ,262828602 ,-1 ,7,-7,6000 ,-28 ,-193977180,-24 ,546,-1615 ,-1,-357052350 ,15,-20,7,-71564800 ,-30,-21,4867 ,-11,14 ,12,-13 ,-8,23],[339311000,-20 ,-459,-20,0] -,[-16,-920,1116 ,11 ,14 ,-6,452 ,-4025 ,20,-347848875 ,-5640,-185852250,6604,-174912615 ,-9 ,11,-38637780 ,-26,19,-3,-2757977,-29,92153700 ,17 ,-341 ,-9 ,1 ,19,17 ,2527,19 ,-10 ,5673,-14 ,30 ,5456,398044154 ,-12 ,27 ,-5,-6356 ,-1 ,0 ,-24,-429469920,9,-30],[449989148 ,-6,37694916 ,26 ,980 ,18 ,-11484696,-14 ,0,7 ,1408 ,3689,22 ,-560 ,-349350300,28238400,702 ,4104 ,1701 ,-13,-2,-17058312 ,-31 ,-25832520 ,31700160 ,-2508,1 ,865 ,-376597728,3484 ,16,83891808,-111926304,0 ,180025335 ,-10,-7 ,-21,2044,73 ,-23,-221454648],[-2875 ,0,-13 ,14 ,-7 ,6448 ,9,-24,48582105 ,-20 ,4885162 ,650,-3770 ,-17632350,-32004840 ,-468,26955450 ,-25,-2223 ,2040 ,246021300 ,3720 ,-71730560,-27,-88855200 ,88889504,-20,16 ,-137357280,-69545280 ,-4,87012325 ,111810816,-415,8 ,14,9,27,-14592798,3,-31,-5060 ,216 ,-9,-6,-3696,-24 ,427221360,-8,-20,16 ,-99887940 ,13 ,11 ,-2596] -,[19 ,8 ,154626318 ,1],[-3072 ,-792 ,27 ,-3438 ,5 ,-13,-5 ,27,-1824 ,9,-75,-108 ,-12,-4028 ,26 ,-2442 ,420,59505320 ,-6],[7 ,97876512 ,-300 ,1955,19],[-3750 ,-3 ,-945,-5,0 ,2028,-5 ,6 ,3 ,5928,357979776 ,-4,-24 ,22,-18,3458,-25363756 ,-28 ,-1816,17 ,9 ,-45321881 ,-30,-26,0,20 ,-15,16520672,-4 ,13 ,-19] -,[93313272,-252644854,3 ,-233450 ,899,6,-26,295789200 ,-840,-13,9,-12 ,-24 ,-5675,-18],[2522 ,339500832 ,0 ,-21 ,14 ,-31,184500,-4 ,0 ,1695330 ,6,-7 ,-27 ,6,-16470210,-4420 ,-15 ,28,2712 ,4,212084622,-26 ,26780400 ,-15,468084708 ,870,-54512648,30923640,59129470,166213800,-69060576,110 ,5,22,47040588,155440992,10],[-759 ,168 ,2938,24 ,1312 ,-18 ,-210243550,171418600,107993520,6,-1918 ,1720 ,3819,20 ,21,-261,-205366356 ,-750675750 ,5 ,19 ,-176472244 ,110 ,194590704 ,-2 ,-23 ,1,278327610,-6 ,0,11,-1,-244155912,15,8,11,-1,-1 ,27 ,-15 ,-22 ,-3696],[-15]] diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.numbers-int-64k.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.numbers-int-64k.json deleted file mode 100644 index 7fbe559..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.numbers-int-64k.json +++ /dev/null @@ -1,154 +0,0 @@ -[[-5493516,-17565660 ,21,0 ,515145906,23 ,10937052 ,20,-4620 ,1440,-47879778 ,-8 ,13321935],[1,-27,-10,10,-26 ,278053965,-285202170,522,15 ,-8718624],[8 ,22] -,[2,-30,2184 ,-165381615 ,708 ,127883304 ,25,-103616391 ,-3822 ,20,-17,21 ,20,60093036 ,2,-7,-3,28 ,-2 ,-17 ,-234 ,-3472,13,3,-27 ,-21,-14086896,-3360,-592740720 ,-464,46114320,-109179840,26 ,-5 ,-12,146850480 ,-28,-16,22,-20 ,24909960 ,-18,-248,4425] -,[-24,-16,4554,-31,1,65097736 ,-6,4,-21,13 ,-4 ,0 ,-2,42024360,-59395842 ,1620 ,-4320,-8,29822904,-19225596,-29],[-54302595,-480689496,9639280,31 ,-19 ,-38030958 ,-11,-8,-2100,17830400 ,0,-26,6554 ,5,-84105480,3779055,-800792 ,30 ,-22,-28 ,31,74368660 ,-64643320,-4085 ,-20,22 ,5 ,-4 ,-2394,26,-7],[-3648 ,-100 ,31 ,15 ,13] -,[20 ,-28,-53671800 ,-69036933,-142748730 ,-1123836,20,-10] -,[0 ,17,14 ,-1722,-4482 ,24 ,3440 ,-233026686,8979705,-13,11,6615 ,0 ,-17216760 ,12 ,-546099235,24 ,-11,-30,2509 ,-12 ,194635350,-4392 ,4600 ,23 ,20 ,11,25 ,2500 ,-19 ,22 ,570] -,[6084,-1628 ,-9 ,-832 ,2464,-924 ,-2110,13,-6122640 ,-79437728,3,-3910 ,0,28 ,208356300,24 ,-1 ,-30,1281945 ,10,24,84771348,-21717570 ,103233317,221295564,-207229575,-31235848,0,183428940,269512137 ,30 ,-24451560 ,6 ,-4,-1,-816 ,20 ,0 ,-7,-520255008 ,274987448,37809408,-10,-2581,1188 ,-11 ,3435 ,1555080,-9 ,-14,-17,245288250 ,190557000 ,-9 ,9,-840 ,23 ,16] -,[31 ,3 ,-4284,27,20 ,-31,-1 ,-322462868 ,-110720650 ,0,31,-18 ,6,2880 ,-21,-11 ,7427904,-25 ,183814512,16,16,-33760720,118156428,-19,25,-144086850 ,12 ,-230576970 ,27 ,-6 ,477,-4298496,442944544,18 ,29,6420,2728,-3,-161 ,-1 ,0,-22,18 ,15 ,2376,1442376 ,-15,1056,19,28,5278 ,-60587604,-442 ,3726 ,15,-26],[2904,-10 ,-20,14,-17],[27 ,-27 ,10,24,-26 ,-5616,19,-15,-21167916,-1 ,35552800,23,-18,30,208722906 ,-20,-22 ,2205,-1305,-122874700 ,29607207,0 ,38506734,71241456 ,23 ,990,-76136720,-1820 ,0 ,-2070,-3],[-7140000,-207460792],[-469476 ,-72 ,-16,0 ,-5526900 ,30,16315600,3444 ,15,2657088 ,-10 ,-16 ,23 ,-26772705,31,19 ,1140,3312 ,532,-16 ,-3870,-192 ,17 ,-4,-22 ,-3258,-62669288 ,-624,18 ,11 ,-3572 ,109160415,-162],[0,20 ,-23,-14338940,-6 ,1485 ,2820 ,-14,198 ,-27,0,375240600 ,1008,-1152,9 ,-996,-198,1 ,-2860,-2 ,9249808,-129703980,-391,21 ,-10366400,17,680 ,20 ,-17 ,419744364 ,-9,59357600,15,24,-108559969 ,-11 ,-3699 ,0 ,-20 ,2060,24,-1478295,-27 ,-999],[847,9,15 ,135523840 ,-233421441,0,-22 ,117282060 ,-8 ,-48 ,-372,-1056,26 ,31,22,42 ,-17 ,6,-21660480 ,-7 ,113050320,-6,4590,-36883848 ,136,-2565,3553 ,85366848,-25 ,-8,8,-2],[45371755 ,17 ,-828,-144121824 ,-13,-2,-7,776,26811750,74118130,-28,-10,3,1,1380,-3290,-1952370 ,24 ,-12,94710336 ,18,-22 ,-6,-25,0,324699624 ,-26] -,[21,-301316548,-18 ,176284185 ,29 ,2090400,-28 ,15 ,-23 ,26 ,-15617515,31 ,235085200,-14 ,-14 ,-26 ,442007916,-13,7,-67563600,-1380 ,-1216,22,-2,-23,-3 ,-25 ,-4016 ,-14,1568 ,-120 ,-9,-213614520,423411678 ,1 ,-97522128 ,26,-216,-14 ,471416050 ,26 ,-176542740,-50331288,-12762960 ,-272371712 ,-17 ,14,122,-132 ,0 ,-492,-17,-428341420 ,-31 ,60481248,8,-23,4464 ,22 ,16,169607999,200460906,-3 ,-15,11 ,-301622750,46882560,1610 ,390 ,11,-21450335,-11 ,124228764,31 ,400518692,-16 ,-17,6,-7 ,10 ,-28 ,237548850 ,33377136,16,-8450244,-2420,-360 ,-6,-9320784,-244067904 ,1680,1115 ,4100 ,5 ,-27,24,28 ,-788,635 ,14,-156939264,-1190 ,6758,-20,95208960,683216058,21,-26 ,5 ,105055951,-3,-31],[492 ,29 ,21589630 ,23622144 ,6 ,-5 ,-56659912,7161 ,-36724416,53453650,54585100 ,12,-288 ,-560 ,-161335680 ,9],[3 ,378031500,-9,3,2478592 ,26,-5841645,35808752,291812192,8 ,-1020,11 ,-1771,-43215336 ,230590512,-83174850 ,-22 ,-289695297 ,-25622616 ,0,-357 ,-31,13 ,0 ,765,0 ,-31 ,11 ,229068950 ,0,-275265900,-27,251016,-3538 ,503445051 ,5 ,-2128,1411 ,-73133905,28,9305550,-6,156381096,69329196 ,-3424,-1674 ,104380992,16,22,15,399 ,1836720 ,23,23] -,[683575650,0,-1680 ,-21,-3952 ,20 ,-19 ,-2337 ,-112663584 ,9,-660 ,3860,267858844,-2 ,396 ,1] -,[24,0 ,-15 ,907788,377316360 ,-704,-3,-1490 ,-2,-15,-4876,-4,-1360,16,3420,8377530,105796800,-12,18,29 ,540,0 ,204 ,0 ,19,63616890,-1210,689 ,6916,-20,375 ,36113490 ,-4 ,125932336 ,18,-294707160 ,-3 ,12,3,-13 ,18,12 ,15,-64877196 ,-420 ,0,14 ,-4 ,3388 ,-5,35475048,-2616 ,-37500528 ,16,25 ,-3458,-2169 ,-31609176,-14464818 ,762 ,-15 ,-143553780,27],[31,-1701 ,-14 ,0,31,-27069000 ,2752,18,-24,-15,-20 ,9,-700 ,-198 ,-1,42300726,16 ,-1264 ,3510,-325876860 ,-3,-14 ,6 ,25,-3 ,-164],[28,-23287140 ,-3 ,3 ,-3456] -,[28 ,-26 ,-22,54374580,215029760,-24 ,-30,-48048297,1239,2 ,4 ,195 ,0,6 ,-189932544],[402,-29 ,4250,24 ,-26 ,-10854436 ,167269041 ,756 ,-720,-673097850,-26,-19,-5 ,263432520 ,-8,-164350248 ,-13,-2380,160 ,19,6,-12,-27 ,19 ,-2820 ,335281296 ,-2394,-14,-960,36] -,[1480 ,1629,10 ,-41119435 ,-15 ,4142,-15,-3075,29500128,4 ,-31278357,33930750,6,-357723975,21,332867584,-667,-16 ,3,-26 ,291925200 ,-18,28 ,16,-4 ,-101395800,1 ,275218293 ,19,-28,0,-8,169445724,616,-52252560,142371840 ,26,5 ,-555186880 ,-1950,-17 ,11] -,[11,29848320,31,6 ,-13,1674,750 ,5588,-16] -,[4760 ,2214 ,-962 ,-25,-23 ,48461490,793,30817200 ,-3009 ,-8 ,-1710 ,-18 ,27 ,1976,0 ,-7752000 ,31 ,14 ,-20,-7 ,14,4,10 ,-23,4,159148224,11,24 ,-10 ,-537551040 ,7 ,4410,11 ,-34083378 ,29,-64299312 ,2288 ,-25,-28 ,-12 ,8,-3366,-3816 ,19,-197053098 ,-30208064 ,-8,-5324 ,2278,-26 ,31 ,-26 ,28,17 ,-14751288,-16,-24 ,-700],[-1742,189,23 ,-24561075 ,28 ,-45495849 ,2410 ,-10,-9 ,107006580 ,-200353200 ,-208809657,0 ,-3 ,4032,918 ,21147399 ,11 ,931,29 ,8110220 ,3180,3444,3720 ,7 ,10 ,2,6,0 ,-16,1080,-173294592 ,-6,2 ,148752480 ,-6775130 ,-10739718,-30,23 ,-28 ,-18014400 ,-774,-6083028,-362235456,9 ,4 ,225104873,89396937,-700144926 ,-751068864 ,-139500072 ,138 ,-108,-82,20615958 ,-9 ,9567800,2 ,-90 ,15 ,-27 ,-19,-100056960,2431,-21 ,2 ,1421 ,-16,-5,14 ,-24 ,19,18],[0 ,-431028216 ,-256,-12474000,-6,-61380319 ,499792 ,-4960 ,0,-31,3,7 ,-2133,308 ,250921616,-15 ,-7591545 ,0 ,398408400 ,-9 ,-26 ,1579000,-3 ,146901216 ,97546050,-638066,-133298000,-7743750 ,14512302,96 ,1008,24 ,-916560 ,23 ,335329288,15,196,3 ,-7 ,-3724,20 ,544,-6,27 ,186019920,-29 ,105598976 ,-9] -,[11579400,-39621939,-38734462 ,23,153 ,0 ,900 ,6,164459774,9 ,6] -,[17 ,17 ,-18],[-288 ,2142,-19,15],[-300,-37399733 ,4356,3,920 ,-18 ,5765410],[-26,-23 ,-6664 ,-28,-3,-31,-18 ,-225 ,13,1,24 ,-29 ,-29 ,-20,-26,1 ,-24 ,15],[185056188 ,0 ,-3 ,12] -,[1 ,-1027 ,-2373,0 ,20914624 ,0 ,-7,24,60145416 ,-10,-8,-10 ,-5,0,1572,-18 ,1,912520 ,11,-670 ,18,-12,2618 ,23,-15,-2985579 ,-4960 ,31,-17,5 ,23,161903520 ,-26 ,20 ,0 ,-159009768,175160000 ,-277153380,30 ,1548,-11 ,-26,-26,-2790,-17,31] -,[240183450 ,3348,-1,-14,-25 ,10537488 ,-239568840,-29,13,-4,2 ,-7980896 ,-16 ,5741078 ,1687 ,-10609056 ,582310575,10 ,420] -,[1274 ,-8 ,-928,1053 ,-26 ,334698000 ,-62619288,2696100,15447600,-194609952 ,27,-13,3,-1023,265082160 ,-11 ,-69,-28 ,26,-57278188,4060] -,[-26,4000,-29 ,-2044 ,-2,-4 ,-1120,-22,-19,15993392 ,-10 ,-34799506,0 ,416,0 ,-1638360 ,-3],[-23 ,0,0,0 ,-2205216 ,-25,-14312700 ,-14 ,300 ,1482] -,[2538 ,1,1 ,2175,448 ,-3000 ,-5363,186,-9 ,30 ,580,3230,3,-29 ,24 ,155511552] -,[15 ,-27,-11,-90180090,27,-133564464,416774820 ,51377690,25 ,-2688 ,43146272 ,6 ,-21,17 ,-3 ,-22 ,-1793 ,-406095040,21 ,744 ,0,26,-15,-8 ,-4619 ,452,31 ,120 ,18,0,-21,-2060,-16,-21] -,[-23 ,141 ,-207268587 ,1705,-18,171 ,28,-636,-2520,-11 ,10,-8,-4470,-27748474 ,1248,621,17 ,111956952 ,-364 ,14805560 ,-1197 ,-17,-3097920 ,-23,-31] -,[24,-9,139260170,31146600,900 ,-127,-9,0 ,-29,-52391220 ,-671 ,25 ,-24506502,-2280,3000 ,486,20,1498 ,-21,-1520,19],[-1 ,-4497240,4,-25 ,23212008 ,71821823 ,765 ,-20 ,24,810,10,342 ,-233043120 ,-6,-2560 ,8,-2,24 ,2390 ,-8 ,-143,5,0 ,-30 ,-47 ,-14,19 ,512259475 ,2046 ,18 ,1056 ,-5 ,525,18 ,2280,25,-16,710 ,-2898,318896214 ,-23,-13,29,17 ,-28 ,30 ,3102 ,-6,-93884931 ,-1312,-117842202 ,-19,2090 ,-30 ,-10 ,-8075001 ,444929856,-2899 ,-17 ,-20559440,-23784729 ,32332680 ,-3 ,-4350 ,65054580,-20,396,3 ,-2128 ,14053732 ,-29,12 ,-756 ,-8 ,4275,17 ,1133,69328800,-4150,436487874,0,-348985784 ,20,332099750,21,-1,-344,18499264,-78522745 ,-483090300,22 ,-2856,-4],[-245895150 ,25,-1144 ,-149855680 ,23 ,-7,-18,-2727 ,23 ,8 ,-410,2507 ,-10,-26621000,23,-22804848,-306,-3264,-2242 ,23,3390 ,-2735388,-1712],[-4 ,2476656 ,76637600,-144,14 ,27 ,-1615 ,17 ,5150 ,-12,-7 ,-2943,6972 ,-47053125 ,9 ,18 ,3520,-28 ,336 ,-918,4 ,-196881272 ,-1100 ,24 ,-1890000 ,-5913 ,-1470,21,14],[-24 ,-116812696,22 ,4,20 ,13 ,506,15 ,326145816 ,12,-16 ,-26,-2829,-226,590,2652 ,-8,27 ,-162690444,31,-26,-9 ,4 ,-21 ,-112457466 ,15 ,-30,0,350135032 ,3402,1650,-8 ,598,20,233 ,17,-1980,1,-281358000,-6,6,-29,-1350,37555210],[27,11923120 ,4123,2499 ,-13],[-4182,-1606 ,-40257756,27,664 ,-11,-19 ,-18935532 ,215951340,-485,50 ,-131700528 ,-275 ,25 ,276911460,-7 ,8043750 ,-447636392,-3059,-8,-15 ,25091550,0 ,4625 ,-76350330 ,-7793775,16,21,3360,27 ,12 ,-32708185 ,3 ,-4248,7,22 ,-11 ,18 ,-93637440 ,19,34403512,-31 ,14,-395036928,19 ,1425 ,-5487,11,-22 ,259772800 ,5213700,128496450,-803,-3264 ,-1088,54,11,-480 ,-27],[3,10,23 ,25,-26,4 ,5 ,29,-6,-24 ,-14342400 ,31 ,-64156730,-162150660 ,-286569582,21482016 ,14 ,6,-6,-22 ,-5 ,22 ,2759,31 ,-20,16,-6,137,-261762816 ,-25625500 ,3838,12 ,-3220,-358712172,-27689904 ,-7 ,-31,-21,-1395,-28 ,2508,-7 ,128028897 ,-9 ,0 ,13,-15,-9362610 ,5616,-336068852,1428,121983344 ,1,-18 ,-14 ,-1,0,18 ,-1644 ,4071 ,31 ,570,15,4 ,3211 ,4 ,-7,440215424,-16115325,-798411120,25 ,-13 ,-10 ,2205495,-1830,544,725372825 ,44856900 ,-243203380 ,6 ,0 ,-13],[-2610,-27,135,15,-4050,29 ,3632,12 ,-31,-802779120 ,0 ,16 ,-117 ,6 ,11 ,-35099688 ,1729 ,29 ,0,16 ,-18,20,15,-9,-4 ,108754688 ,-6,515074560] -,[1711,7,115977638,-16 ,-98368320,-22 ,13,-3 ,1400,22364160 ,1 ,-8,-23,12,1632 ,-30 ,-5980],[-9,19,-12,0 ,-27,1417,-1782] -,[-4284,42594504 ,-9 ,2 ,28,-14 ,-13,29 ,-1944 ,23 ,-6,-9 ,-23 ,1139022,23,-14 ,629 ,20,-143720085 ,-2136 ,2,21159600 ,28 ,1298,-28,-5138856,-33666120 ,13 ,1656 ,25 ,-13,-17,-560,41,931 ,8,25 ,0 ,-10,-10 ,-540 ,-1,59257800,20 ,-1 ,-78624470,-2412360,4422 ,2,-178849356 ,7 ,15 ,-30,-70116138 ,0 ,-1584 ,-24 ,26 ,304,2 ,-8 ,14,-17,29,-477322560,-1957800,-23 ,4775,-28 ,0 ,876 ,10,-144021960,17,20 ,212339232,16698136,-12,0 ,23 ,-8,17,-75344880 ,-26,-2772 ,0,3,-28,1 ,-285812076,-3,4309 ,14 ,0 ,-4373818 ,-25 ,-400,21121600 ,50506140,-4816 ,-7 ,-2886 ,-2816 ,-12 ,152017488,962,-4807,20 ,696954000 ,-27,-8 ,-6,1403,179759304,28212800 ,5566,-247629177,608,-238,4077,0 ,-2 ,2382900 ,17564508 ,-2730 ,12 ,-10558944 ,-704,-642 ,-5671116 ,-9 ,-461685728,24,-2987040,16,1408,-14,-16,-1510627,56076324,-5510,29 ,-323024016 ,18,-1432,-27 ,915,28,23,48589680 ,335 ,214740526 ,22 ,-6 ,-28 ,60 ,-12,7 ,9,-9,5 ,10 ,182,-15 ,7657,294958755 ,1 ,112677660,-89913240,-2,-1224],[-25 ,-15 ,5220 ,1341 ,-2562 ,-35650602 ,210141000,7 ,296,86113500,131163480 ,-20,7172928 ,20 ,29,-80617332 ,8 ,-5292 ,0 ,0,24,-264,1725],[8,483192675,-2704 ,14 ,-26 ,-385141978 ,1159] -,[-61809318 ,26 ,-1 ,20,-31,-23 ,-1430,9,-2364 ,300,-4080 ,6972,184,-93317301,-394] -,[-1,48814056,-440,-14,4540 ,-7 ,-1,-31 ,-112482180 ,48084704 ,39427046,-7 ,21,-15,26,3 ,21,819,20 ,4424 ,363483936 ,2296,26 ,20,11 ,-3366,115506840,-26 ,29,-27 ,-14,-16 ,27] -,[-20,16661088 ,-12,30591912] -,[-31,-194795790 ,12 ,-99204168,-1665,-28,-11,0 ,-1320,20 ,-376732446,-4066 ,-131922777,-8 ,19,-1719720] -,[-5 ,20 ,-75601253 ,-416038964,24087000,6870],[-3247,-79494870 ,-227768464 ,8297802 ,-13 ,-6,-15,124188750,29659374,11,-7,-2 ,-30 ,0 ,22646580,606662281 ,-13,-4,-21,-25,18245418 ,-9 ,-22 ,-22,4 ,23 ,4,-118270256 ,-25,-32630752,-3888,-89617482,0 ,-4 ,-2500,-8891400,-248,-36 ,58390200 ,7,20 ,10 ,27 ,-6,149634496,28,16786575,12 ,2 ,-16 ,27 ,-17 ,-223677760 ,-22,-228434850,25252787 ,2112,0 ,-18,-6880236,-170549946 ,3 ,30,-4730,-147463232,-26 ,286,16,25,-183,-295,-20 ,-25 ,22 ,36724770,-29 ,-122 ,-92736360 ,-26,-17,3971370 ,-13 ,-18 ,13,20,-2500,2964 ,145931328,29 ,31 ,-16,1943 ,-688842 ,3,12 ,387583119,165678392 ,575 ,10],[50090274,-6 ,-2,466131780,-28 ,162 ,18,100719000 ,24 ,-101334324,-6 ,109600776 ,26,-874,25 ,-3 ,2,1110 ,20,3750 ,-15840836,14,-26552709 ,23 ,27 ,24754368,-16 ,-29 ,54232416,406625200,-5 ,-17346462,-15 ,26,25605168 ,-1303552 ,-15 ,-31,0,1664002,30 ,-216106270,-1376,-2,-3136 ,-1 ,13 ,405748512 ,23 ,7] -,[-2966166,1075032,-4326 ,-3640,5,-2070 ,12206560,3066,-32334336,-7 ,-19 ,22 ,-73863504,-3288660 ,-14,3584,19 ,-28,2688,-525,153811860,-161431296 ,31 ,-108346812,12 ,-156241824,-49663824,-85124256,25 ,0 ,-34692100 ,19599300,13] -,[-3,352,-2 ,106858560 ,-28,15,13 ,21,22,600526360,28 ,-12,-4945149,-14 ,-2125,-21 ,-1650 ,-10,333243900,-146018340 ,1738,-597039696,-31 ,-25,-5,-28126660 ,5080 ,0,-13 ,-2 ,-615 ,476,-22668124,27 ,912,24 ,-25 ,1425 ,14 ,1350,23709378,-21 ,66969100 ,-179585250 ,-2242,443293536,25 ,45749207,602,1944 ,-16855224,15,1771 ,-7 ,-2],[3000 ,120,14 ,-25 ,-3,260000,27 ,-4712,25 ,-6106800,-338696640 ,-3 ,1953 ,-1976 ,144999300 ,27 ,-320254272 ,-25],[11,-47455056,5766 ,310370566 ,-4 ,-29395170,118839840,14 ,-24,-73768338] -,[22 ,174 ,2392 ,450131565,-46205934 ,-14,23,31 ,350555130 ,-28,-6 ,-5,-504 ,424,19 ,-920 ,1323 ,-1000,-840,-30582048 ,-12 ,-25,-50843376,-20677020] -,[-27,7 ,-10173184,1404,-22 ,29,2880,1 ,20 ,5 ,283176000,-9,-14 ,-396538170,-1414],[-870 ,25,24 ,-11,11 ,-2352,-20 ,2520 ,27,19,44968040,197399664,29,30,-1,-30,-3,-7,-8,-2244,-25 ,-687 ,-11 ,-1144 ,-21 ,-14 ,21446400,-2142,-68172960 ,-54684448 ,0 ,24632832 ,882,-1746,24756774 ,-1472046,-11 ,16 ,25 ,-2300 ,46310670,-23,0,0 ,2044 ,-9 ,24352075,-27] -,[25338470,-1452,31 ,14 ,-14 ,-24493014,6,-23,2,-31,2,682 ,1106 ,-30,520 ,-28,-1,-454207860,-532 ,-22,-6541 ,-45384192,3900],[4 ,-10,0 ,687831768 ,7,1152,22,309918570 ,24,-18,26973320,19,-16,16,9,3240 ,261192000,-5 ,-6,-8,29 ,-1,-18 ,102760164,5748048,-132015360,12 ,-27 ,30 ,-735 ,0 ,-572 ,-12,2268,10 ,-63620025 ,-62067600,31 ,11622852,241348564,-56701879 ,-115 ,7 ,-18,-24,12,-12 ,-25 ,64581300],[-75622120,-19 ,44 ,-24,112783712,7,19,-300,5,5 ,-7 ,938,5166,-211981800 ,-10 ,27 ,436,6,-98 ,18,2040,142769536 ,10,-400929408],[-9 ,-16,83225736 ,24,203906100,92101200 ,-1617 ,-15 ,-46952640,-31 ,-2,-309670390 ,-4,-19,-4089,10 ,6390826 ,840,3735] -,[-15,25 ,1716,-42970932,-300534192 ,3,-5684 ,-4482 ,-840 ,9993687,33556320,63784224,0,228,-244446150 ,7 ,112404000 ,3936,87495635 ,28 ,26,-1200,19,26456480,-3,-24794500,20,55302870,-9,-24 ,-14],[20,-1479078] -,[-244976358 ,-24 ,1200 ,143647182 ,93801760,-2327 ,-31,40896898 ,276737250,-21 ,6 ,28,640,238 ,-1,34594800,22 ,12694016 ,69087168 ,516,-11833884,1692 ,-202277372,-14 ,27,-195 ,27 ,-544,16 ,29830944 ,27,0 ,-2106,-41724396,2832 ,165 ,-55291842,27 ,-478705545,7 ,1380,-1152,-29,8 ,14] -,[-27,126772712 ,-4767 ,-11,5 ,-2449,-26,30 ,718485 ,-1680 ,0 ,-1320 ,-6,24,2016,-531,3248 ,55,11,-437141760 ,-22,34,-9,-26,15595356,99038784,-5,0 ,-4,0,14,-31,340,112130620 ,-1612,-23 ,-30,-17499354,-23,102328950,9,392935941 ,1,-29 ,372 ,1482,243497268 ,-30 ,31],[-4082 ,-11,64012410 ,-3,3045 ,-15,230 ,25 ,-11,-8 ,1,648,-213196536,503921250 ,19,-3400 ,-2,-57200640 ,3702006 ,351 ,19,-4 ,316202080 ,-10 ,564] -,[26 ,4560,-17 ,14 ,18,3000 ,16 ,-7099 ,-6 ,10 ,-27 ,636,15331050,-36314902] -,[0 ,17,-212,6225296 ,-11,2616,2448,5,253666336,-261 ,-11535678,16 ,776 ,-11284882 ,5 ,6003,1946088,363,8,145139058 ,5,14 ,-1133,698186940,-15 ,-13517840 ,-249 ,25530816 ,6 ,-677489400,123 ,80502240 ,50,-3,-16,21,-7,-160511940 ,-7 ,0,-8,-2580 ,-2635 ,2460,6,17,18 ,-329,31,-4945 ,31931700 ,13,13,26598465 ,38233278 ,7125532 ,28,-12031155,-3 ,-24,380592775,28,22090950,400 ,-351,-20,22 ,0,1000,-11 ,-85108464 ,5 ,5680440,3841,31 ,-3813 ,-6409,0,7192 ,-4872 ,697249800 ,24 ,2175 ,28,-23 ,67919975,15,12,-3,-23 ,-39512022 ,580,2449,14 ,7 ,0 ,-28,26 ,-201050432 ,-7710105,-2068 ,21,18,2664,-14,21 ,4961938,18 ,-10303020,0,-60081210 ,2366520,13,1320,21 ,-6,-4752 ,-8 ,22,-88,28,-17,-240 ,-780 ,17,-23,31,2929 ,397582812 ,6,-105938532,18,4410 ,0,1,0,10,-68 ,-962],[-10006265 ,83538 ,-28,-6,4700 ,8,237591816,-18 ,7 ,28 ,-5280 ,-3060 ,-1,289333506 ,-1632,18,-20 ,-173058600,486530604 ,1920,-12,81902310,12,174383264 ,-3,-26 ,2682 ,-5 ,-145 ,19606815,996,324847237 ,3,13 ,-7032567,-11,-26,-5 ,18,-23 ,352 ,-3576 ,-182741020 ,1224,28 ,-149884695 ,19,6,20 ,15 ,7,24,21904432 ,573255,-12 ,-1000,-130153760,-19,-25 ,-6 ,-18829824,-14,20 ,-1373675,-15 ,3920,0 ,-10303080,10,25],[-2780 ,8] -,[-12993435 ,713,3360,14325168 ,22,52527552 ,-6024 ,5 ,10 ,30,-16 ,-7 ,-31 ,8 ,-17 ,1932,-16,-27 ,-21 ,22,18,-3 ,-22,24782640,4,-28917119,27 ,1560,-134 ,-1743,-77443908,1770 ,-29238104,-6344 ,13,-26,-226921100,-290844312 ,-3024 ,-1014,-30 ,2,28 ,2175,-31 ,30],[-20,105223500 ,49377244,143736600,1,8 ,14,3150 ,12 ,67945848,-213011526,-1440 ,14] -,[-3591,-5516,396685968 ,31079020 ,28 ,-22 ,-18,17 ,1116,-1 ,19,-21,-5165370,24 ,850,13 ,1827 ,-896 ,10,-3354,-6],[3472 ,-1331,1710 ,30 ,-25,-2712780,3150 ,0 ,11,2941,8 ,-24 ,-10 ,10,-477 ,-396 ,17 ,4179 ,11 ,102765936 ,1278 ,5,30 ,-20,184901424 ,-6757,-11] -,[3 ,43163136 ,-4920 ,-23 ,9,1185 ,-29,12426384 ,24,-210,93918528,-493190,-19,19,-12 ,-606 ,-994,5 ,-13,-25 ,-189 ,-460 ,4,17 ,-187 ,-22 ,-2724,370686960 ,164,2193,25,0,-31,3,1314 ,-99736858 ,3162 ,76107000,-31 ,0,-15 ,-3220,-23681865 ,0 ,13 ,6 ,-3596 ,-32398032,11 ,3420 ,-29,-28 ,3,21,18,21 ,-17 ,30,-57914120 ,905661,54319146 ,182,555,13 ,47419200 ,-1456,1089 ,-43820490 ,91332144 ,-13 ,-3,-2 ,-29 ,2449],[29,-2839 ,13 ,-3378753 ,49048077,53505816,13 ,-22,0,-13,-28282680,-23 ,300,-4843,-27 ,10181640 ,28],[-20] -,[9] -,[-9,-24,25 ,20,31 ,30 ,1],[18 ,-2288,-20,-21,-29,-3332,12],[0 ,-1,-50969604,-8383900 ,-3116694 ,-22446770 ,18,2440 ,-796,-5656 ,2 ,141214320 ,-14,-360,75224968 ,-4 ,-344069000,-29 ,-16474860 ,-16 ,476] -,[-12 ,0,-70509824 ,-2,4 ,260063784 ,-1700 ,1710,-28,14,-16,8,0,119967311 ,22,28273180,-880,702906624,-1056 ,-24,1188 ,0 ,21 ,28 ,4,-28 ,2291,-4 ,-462 ,-940 ,-5932820,19,-20 ,1098,-3,4142 ,-3635450,-34505240,4174800 ,-16,-8 ,4032,362796720,2 ,-28 ,2220 ,8,-2,30,-3173 ,28 ,-475 ,32122160,-8436717 ,38920500 ,-2896,-24 ,-27,-7876080,25 ,-9 ,117250848,7 ,27,13,2,10 ,-1320,26 ,-320 ,280051830 ,-4300 ,-10 ,-10981656,-18 ,-29 ,0,-28 ,1032 ,400233960,11,5,2,5] -,[-8 ,17,-65148800],[-4706600 ,-3 ,0 ,-179794944,7,-2945 ,55431012 ,-28 ,-24 ,1397,9,25 ,-28 ,28,476,-6,-900,4760,30726905 ,11 ,-756,-27,-990,6210,-9167478 ,-1647,-26 ,-96531138,-780],[-77841522,-3781,-12,-29 ,2184,-3289 ,-10,-1012,26,-9 ,-25 ,-18 ,-521783262 ,-1760,-280891611 ,456 ,-29 ,129099648,-5] -,[-183948840 ,8359188,-28 ,-144532752,198,56629881,3111 ,11 ,4446 ,29,605,-91156740 ,10 ,75 ,55 ,-7,29 ,-161628390,448,15711808 ,-58739640,-24 ,-29 ,-85350804 ,174 ,19,-174067404 ,16 ,-28],[16,3942 ,2490,-16200084,19503588,-624 ,62455204 ,-7,-2 ,11477839],[-24,3718 ,3038 ,-72940560,22,-864 ,-7 ,143,3838,26 ,17 ,10 ,-7590 ,-517449920,357106428],[-3906,-29 ,3552 ,-184787320 ,13,30 ,-564355350,32754510,45454080,21,-1162,-30,-486 ,23,-141995000 ,-20 ,-75457410,-2520,-510,-2500] -,[-24,-15,-29,1884,2],[0 ,15,-7,26,-3344],[-18237240 ,0,9,-11,7,-29 ,-16 ,19726416 ,-28 ,1284,3150700 ,-31 ,25 ,2110,0 ,26 ,-24,6,16,-5,138402880 ,316 ,26,-22 ,-30,-204484500,11 ,-14303520,11,30 ,26 ,-9 ,90043272,17,11 ,-2450,871,-694705752,-73301076 ,0,0 ,71706720 ,88229790,-21,-17554880,13919360 ,-2880 ,357980698 ,-120 ,5 ,126365512,-6,-25 ,27,10 ,-28 ,16660720,20,1807240,11 ,-3280 ,4,31,60871440,92743044 ,-24,-1896 ,-19,-26354160 ,100639776,530127000 ,29 ,377260416,1449 ,-6789,10186655,1254,-101534160 ,0 ,-3 ,24,-332550192 ,14,-1330 ,1100 ,1380,27 ,1555747 ,2058 ,211711680 ,-820,-198446355 ,0 ,-1630 ,-14,-17,-19598107,240190076,10478160,-10 ,29 ,1456,-25 ,-59529600 ,20,-6,-173740160] -,[3480680,4370,-1554,30 ,-173851020 ,0 ,-1,-336,11 ,4464,4234 ,-1,23,-3280],[-1,-11 ,-1050 ,23 ,-28 ,-14 ,2944 ,6595200 ,250 ,-11069790,-774,-94 ,-1836,-29 ,-42380811 ,55200870 ,2187,-99540320 ,441775776,-6,5 ,7134,66027318 ,-15391260,81411075,-16,23,32476206 ,-782537743 ,60266240 ,-10,-5 ,11775798 ,23 ,-15 ,-6 ,265750914 ,-198,-23,9 ,1 ,-4500 ,16 ,31 ,13 ,-111085128] -,[15,-17683452,0,-768,15 ,-28 ,-2618 ,551145780,-349133652,23 ,14,-28 ,6,-4 ,1032,-2142,9] -,[-300046068,-4,76082327 ,1472,-4088,12,-26,24,-5 ,-16 ,10,1403 ,8 ,-11 ,-20 ,-2448,-4293,19,13 ,93754284 ,22,-10,-19,2 ,-4,-30 ,15,6390324 ,5,-469,2,-15 ,-377,28,-3,-29 ,-5,-1035 ,398646720 ,320752080 ,-18589500 ,624085632,2 ,252 ,30159394 ,31,1584 ,-28,30 ,-142774344,-16297820 ,20,45591024,373775600 ,-27 ,-67898970,-2736,-576 ,-9 ,20 ,234,-4280,10,4305,5080 ,69223050 ,14 ,63222120,24 ,-1266 ,467409008 ,18 ,27194490,5427 ,28,761669572 ,340810974 ,-38400880 ,4532192 ,11 ,22670460 ,-2352,-7 ,164498880 ,-22 ,-26 ,369203200,-352494090 ,-4465 ,-16,-2 ,-21 ,15,-11221938 ,7 ,233914260 ,579492000,-4 ,-31811028,-4607680,2483 ,136490886 ,5 ,1 ,-15 ,-27 ,9,24 ,-15,30,6561 ,1338,97110108,11 ,-111149901 ,-14,-12992476 ,-12 ,-22 ,3,3456,-5250 ,3,-19,5496,26] -,[-285170325,28 ,-2158,-5974] -,[2,901,1 ,14 ,-31 ,2556,-3120] -,[20 ,-4,-869 ,1728 ,23798125,-2 ,-18 ,-21,-5,340,2 ,-8,13,-8 ,0 ,-437 ,4 ,-18,-211,5126718 ,-106901616,-651 ,407982960,-2716 ,-5 ,-63816662,-25 ,144 ,-12 ,275,-36428028,118037250],[5890 ,106973460 ,-30,4180 ,-21,-18,222472528 ,10 ,10982500 ,-12,-738 ,-26248320],[-785,31,-11 ,18] -,[-457520140],[18,13],[-30,24,-2522],[1225,-185744160 ,-738000 ,2736 ,12,-28,5803625,0 ,20,400246980 ,73571840 ,-20 ,-30,952 ,726831504 ,-76,383505390,-18,240 ,-28,381 ,2822358 ,85395576 ,271558818 ,-27,-23] -,[-19,28 ,-469185838,-19,-13,-18,-400698330,3222 ,-16,-4929 ,18,91372248 ,2 ,11,-187642560,-6 ,341231013 ,6,-52226208 ,-8,-11,9 ,-2070,-19 ,-5,-30,-3243,26 ,16,-2,2415],[-50015700,0,-17 ,155858040] -,[-9,15,-13 ,-11,-20 ,-1026069,49677500 ,-10,-31 ,28 ,282 ,-16,68319600,87606750 ,1 ,1440 ,-1495,5668,-2751 ,15,-18 ,1222 ,8 ,-5 ,90166544,0,-10142028 ,-7 ,440 ,1584,14,-2,-20775555 ,-3006 ,-1482 ,30,-575,1881 ,-7,-14 ,98685600,-119642454 ,-28 ,-475],[-9254520,-6,-3874,-25784148,3 ,9563333 ,-10 ,0 ,-204,1820,6,6,20,68460840,23] -,[855,-28,-30 ,-3050 ,0 ,-13,-241685700,18,3,-1332 ,29,1218,-4,-10,0 ,-7 ,1539,26,1408,-383212980,8,-308 ,-27753460 ,26,-27 ,4,13 ,-6,448],[-25 ,-5512 ,16,-1476 ,57928040 ,17,0 ,-79250600,0,0,2070 ,132,-3] -,[-18875208 ,21 ,5,-20 ,-3791 ,-420521696,-159620890 ,0 ,25 ,-520,390,-13,0,-7,-21,-2740 ,222721065,-7 ,14,20605200,22 ,-528 ,6162,-24 ,-15 ,-75492480 ,4 ,-31,-45394076,2,-1893006 ,4876,0 ,13,8 ,-22 ,-19,-1998 ,-15 ,-340569765 ,-2366,7 ,-20 ,5 ,31 ,-28 ,126499034,-19 ,-60 ,-32478138 ,-225989520],[-9,0,4,-25 ,-156836169,-10 ,-1767 ,9,-285,6 ,414126090 ,-5 ,-31 ,-274760800 ,-3107 ,223992440 ,-472164 ,-2 ,27,21,-10 ,15 ,-3990 ,78704900 ,-26 ,10 ,-20 ,-28 ,-14,-198,-31 ,-98652036 ,1755 ,-540 ,5 ,-2160 ,16 ,-12 ,15,-2291 ,9],[-1832 ,-8,84187740 ,-14 ,-5 ,-120285891 ,-20,-7,2,31 ,-298507587,24 ,-232,-3819 ,1323,10 ,-26499690,24,17787984 ,-8,-18 ,31,1597200 ,-143174560 ,-14 ,-241886880 ,35245440 ,-267,-27] -,[-2466,-207 ,20 ,4,0,-781650],[349123302 ,23509416 ,0,-390 ,-15 ,-4669 ,15,-229139820 ,24 ,2734600 ,-369889632,-27 ,13 ,-2976 ,74053024,-21,1595 ,47597088,109658106 ,-4482],[-160,-167686096 ,22 ,-28,14 ,153050850,-4437477,-29 ,13040080 ,0 ,-24,5 ,-20 ,-5 ,-27 ,7234282 ,-136507500,-226432206,-23,26,23 ,102778200 ,110791850,-100582944 ,-320,24,-1444320,1000 ,-151045500,399231104 ,9,157752882 ,-8415792 ,-64122480 ,-90313540 ,3091086,-279422178,2,-16 ,21 ,-2508,-213551325,2618,418 ,10,-230 ,-1878177,11,-2430,-481,204 ,5109786,23 ,24 ,-3294,-28741614 ,2464,-3640,23,-16 ,-5,-22 ,-1078 ,-4 ,13,-23,28,-9,336,19,7000] -,[-11 ,-25315696 ,-12604800,-15,-1001,17,10,-363142050 ,4525,12 ,-19 ,10 ,-28,9202536,-1566] -,[-43 ,-26,2625,-11438544,-16 ,-9 ,-2 ,100693521 ,1610 ,11,25 ,-256 ,-1482,912 ,164894751 ,-33788502 ,403253400,25 ,-21 ,-4744935 ,-127576944 ,23 ,-4131,-78999904,4613220 ,-27,-13 ,-13151200 ,-1422,-171716020 ,-1568,24 ,58102209 ,11 ,658,-415633170 ,-7,-2356 ,21,-582 ,70774200,-21,31 ,4,-31979352 ,-4548096,-244212150,-1020 ,11 ,9,10,26,-47214488 ,12728430,18 ,-472 ,21,-261326200,7 ,13 ,-21841800,-2 ,-1760,-18,26,-14,-1479 ,17 ,-252,14,-1547 ,-7080 ,-610 ,1440 ,-11 ,-8,1162 ,2,444 ,-9 ,-11664768 ,7,-25],[-21,-4704,-8090760,-1120 ,-918 ,-14 ,-19,-1,-216703800 ,-38544465,241352825,8,23,-20 ,6860,-225700551,13 ,-8 ,-29,-4818 ,-28,0,-196477380,25 ,490,-9 ,-2324 ,-19,-14,15394860,-177302268 ,2898 ,-4712,-7,-9,52019610 ,-23,306619950,4290 ,8 ,-128779488 ,78907616 ,-525872 ,5 ,-5 ,-74542000,-62628027 ,88551372 ,-1380 ,11,4640 ,-2250 ,-19,-9 ,0 ,23,18,-3885,168724920,4351590,-1260 ,-12,420,-29 ,-22 ,-29 ,9,248965024,18,-17,1800 ,243230400],[91450944,11,-37892448 ,-16,-24 ,-6420078] -,[960 ,3636,-2420 ,22 ,-93510384 ,-2859268,-46,-9 ,-1462 ,26 ,3374,4576 ,4080,11,18,27 ,19,-9,31 ,-8,-4290 ,-25,-196948080 ,6,23,151484929,1096056,-14 ,-20 ,-31 ,-10968300,-31,-141860280,3,29510932],[85858080,-8172516 ,-228,-748,6797288,30 ,2782 ,11663100,7047,17 ,13,-5 ,64967040 ,2 ,0,-1148,-21 ,5510 ,-6902,17325340 ,-26 ,-17 ,19 ,612,-16,13 ,-5 ,-28,63914940,-19 ,65924946,-20 ,4752 ,165804585 ,-45499806,11,25,22 ,22,-5615360,-972 ,-20,9,15 ,14 ,220680060 ,225367472 ,10,-22 ,171089808 ,-2 ,320132016,15,73532394],[-1044,-2185,-868,-616,-22,-19 ,28 ,4340 ,10,196,-9,-7,-354207560 ,28 ,-17 ,206957751,-14,-15062975 ,-51126933 ,21 ,2769,27,13,-1720 ,15 ,2004,19,-30,407,-134438400 ,13,-22,4086 ,6,28,-354774168 ,9,-166076504 ,2761,-48274056,-30,29,-51074496,1400,-26,34724875,17 ,-37853475,-75919416,30 ,-4 ,27619460 ,-207029758,177 ,2450 ,-8,-5162 ,-18 ,10885950 ,5 ,15282150,28 ,12,3146 ,0 ,-1156,29,-1 ,93399270,1593 ,-29 ,-490957530 ,7562016 ,-5971968,29,-840 ,0,-3,-24,-8203140,0,28,28 ,-20,-226 ,3654 ,-4200 ,-5 ,29,13597402 ,-72082703,-522 ,16,-10,1534 ,-6534 ,663,-10,-8,28,-184009292 ,-2097,200,31,-24 ,-22,19,24,-1 ,-182626080 ,44505240,-7,-1005,-66734640 ,-9 ,-637 ,-22,-798 ,-8505720 ,550,-143996250,-26,-197450560,8 ,116590914,2 ,-23 ,6,520 ,-18,24 ,288 ,2,-768,-4880 ,18 ,-7,165058740] -,[-18,-3216 ,-27,-714 ,9,-19 ,-3570 ,-16403040,-3360 ,-18,-7,-22 ,-2607,0,43015104 ,6 ,-5177,-28 ,759 ,17,1632 ,7,26,16 ,-15] -,[9 ,-770,16] -,[14 ,-76802600 ,-10],[-306478600,-1710,-2727,4,-5,-22,-21 ,-9,-4,105518966 ,20 ,-373281156,-493,298019834 ,17 ,-12,89861940 ,7 ,-250 ,25],[191874420 ,-200059740],[24 ,4,13 ,2613 ,-30,-19,194345814,16 ,-833952204 ,8 ,-29 ,15,256007760 ,35547675,32,-10 ,43 ,-5656,-690148554 ,65829582 ,-2508 ,18 ,12,464348 ,30607650,13,-1980,342 ,-68174736 ,-8,0,31 ,18 ,5000 ,5 ,-1400,-14 ,-14,-189 ,-29,-57931608,-9 ,28,-26,-9,-705 ,645 ,-126071120,-2,14 ,13 ,23 ,15 ,214511196 ,1111 ,128686833 ,188047710,-30 ,-5,-4400,17,184589130,-13,-22 ,-4 ,-11,10,-5037,615 ,-6,-192917526 ,-29,31,-16,-8 ,-2 ,-15,14 ,5320,26 ,-2680 ,-3600 ,16,-18 ,-767,14 ,-1450,27,22 ,21,65265984 ,250850640,9458667,675,140487864,-2503250 ,1 ,3825612 ,-55,-25 ,-5434,138,-2057,-35635242 ,187077423 ,-5 ,-4 ,-3,-3155790 ,51266457 ,-26 ,-10,-2250 ,-150 ,4232529,-11,3023100 ,6713232,-525311820,1284 ,127895460 ,-10 ,-16,-11,1904 ,-4600,464 ,-137640000,29957585,0,3864,31,-5 ,73524162 ,-436241430 ,498 ,14,14,2472],[690,-6 ,-935,2,-13 ,-15,5 ,3 ,1 ,6820,57075504,4 ,9,-3 ,28 ,-1804,-265268700,-82153568,6571845 ,302999697,-2040,21,4968,7 ,-81925380,6,-22 ,21 ,21,-23,-2112 ,1260 ,12 ,-16 ,-7,-8,27 ,-21,-13 ,12 ,-17,10,3 ,8,-956 ,-3 ,25,-736],[1200,-22,9,18 ,-4 ,141571100 ,-4 ,58397008 ,28,-247 ,-40075020 ,39376480 ,-144 ,150178644 ,-78 ,12 ,25 ,3,-6 ,-11 ,111016224,30,280375290,-3180 ,-19 ,0 ,27555472,-1410,0,-1832 ,-3645 ,-19 ,-6,-190202040,-118995912,-1320,-6858240 ,32038080 ,21,-120582756 ,2373 ,21010400,-3582240 ,-22,-3760 ,-772124610,-18] -,[-18,767 ,2400,29,1659 ,-15 ,10 ,-36246200 ,-88597350 ,30,75091968 ,20 ,481027750 ,-28,2 ,84657536,31,-19,2957420,-7] -,[1,-6318 ,5060,-21,-2,5818020,-1407,-298014145 ,-10 ,-1896,24,-37943948,9 ,-410006080 ,-6250 ,30,20,0 ,19 ,-1992 ,0 ,6 ,2097,4158],[-224 ,25 ,270 ,-14,17 ,-47839446 ,24,108,20 ,11 ,17,2265750] -,[26 ,4025 ,-28,-1508562 ,0,5217885,23,-2044 ,646,-1692 ,-202700960,-4263 ,0 ,-6 ,-29592168,-25 ,26 ,28,-24,0,3,9 ,-11,19,-69 ,2 ,-65002665,-696,-732,14 ,-372,19,98810226 ,-528 ,0 ,-23752197,246,-495],[-27,2312 ,-222884805 ,-247466752,-26,310518 ,4290,8 ,-3 ,-216 ,21 ,-8,-975 ,-330,28,6,-12 ,25,1836,-1976 ,78132276,-575 ,-31779376 ,-12,27 ,-13 ,2169,1048344 ,-6873 ,6075,-10,450,-260,0 ,620 ,-8,13 ,-2323 ,-15,15459048,-605025036,-13 ,18,-258,-1 ,-21,0,2,23 ,3629 ,23,40981200 ,182,1025,-1820 ,-2940 ,-2 ,7,8145306 ,-14 ,8,-23,0,76 ,27 ,496 ,3475,1,-18 ,-20 ,-25838934,7,-67056800 ,-24,10,-5,1743 ,-181152840,76,16971600,73738350,15284740 ,576 ,-1032,152366400,1 ,26 ,-20480750,-1088 ,-12,-28,-1,-3604 ,11728545 ,61127300,-1853544 ,-22 ,1674 ,-15 ,6 ,20 ,-18,-22,7 ,300 ,-15,19,23,-7,-6021,25 ,25 ,1148,-28 ,5,-12 ,-222,4738 ,230 ,728 ,-246118400 ,-2385,-52297372 ,279311760,22 ,21,28,-2175 ,-2277,29,220913640,1190,3,-112490868 ,26,-2,7,-703107900,20 ,-180754332 ,27 ,-496 ,-399614644,21 ,-72087444,7] -,[-1000 ,1456,-936 ,-620 ,17,-17,-19,-2000 ,-107890664,796 ,16,-4,3706 ,482694444,22 ,-3323024,-24587808,-78 ,-15,-13 ,8512152] -,[26,20 ,330 ,-18 ,5,0 ,-3344874 ,20,-3700 ,12 ,-26,-19 ,137969040 ,171721620 ,139926156 ,-391 ,-7,3040 ,33897045,-10,9,-7440 ,262410792 ,58699020,-7 ,8,23 ,49188750 ,-15 ,-4320,-16 ,110819214 ,21 ,1 ,-62384322,9 ,-37542816] -,[4920,-4,241638000 ,-5,19 ,148203520,54835950],[-429 ,18,96881304,159 ,-60,-142733792 ,225,22 ,-6 ,-10,-4860 ,-1458,-25 ,-8,-14,-4966,923220 ,-17 ,-4,-17,1302332 ,-1,10 ,141441904 ,-1 ,-263918088 ,79677108 ,10 ,3672 ,22 ,-287415408 ,-15 ,-30 ,10] -,[-121831736 ,-270272835 ,-14,-16,0 ,-20 ,56684684,22,20],[-5304 ,9 ,-9 ,0 ,31 ,-10 ,1972,516960],[128063705 ,-2376,-30 ,84,19 ,-28,14,-22 ,33859800,24 ,-1482 ,-6982040 ,4972,-4025,8,-29 ,3 ,-5 ,-1104,-16 ,154219032 ,1431,18010380 ,-75647390 ,-19,-15,8019330,17,6,0 ,0 ,204 ,0 ,230608560,-48102208 ,1846 ,1207 ,-3480 ,-726,0 ,-34,-23,-26,-77,-3 ,-5236 ,-12 ,21 ,-27 ,216 ,-3099132,20 ,197917344 ,29,3,2765488 ,-30 ,5175,4600,9537456,-30 ,235486440,8 ,22 ,-20 ,-366429492,-6,-1,16,-1320,27250320 ,7 ,-22,1188 ,-904,-19,1,1936,-4 ,16,-1040,-30 ,-13 ,-26 ,-23 ,18624200,0,122109912 ,676,-13,-29 ,-12 ,4,-7,-312495020,-1 ,-5,-291400188 ,-237 ,20 ,-1 ,801 ,0 ,21,-27,-100055760],[-754 ,-3759,-1872,20149200 ,-19 ,-333898774 ,1964622,389795392 ,3,6,-15] -,[-11,17,-28234800,-17,-7 ,1 ,-696,-9,50115450,2675,-820,50181831 ,30,290580252,-20 ,82086016 ,-1691 ,-1624,-27 ,31 ,16 ,20,0,77085744,2060,40104252 ,68739710,-16,17,10 ,-7 ,-7 ,4680,384,666950986,-3468,232051456 ,3096 ,1 ,-4636 ,0,17507880 ,26 ,-9,-1782,6 ,26 ,426350025,51521570,1,185235876 ,-20,-196,0],[-684,2928,-4,258009720 ,31 ,5 ,-11,14825993,-18,10 ,12,165790656 ,0 ,-4095 ,-3 ,25,594 ,29 ,-6 ,8,6 ,-41387580 ,1624,-13,10 ,45512502,17 ,-24862800 ,30 ,-31,62 ,-495590324,-16 ,896,-27,-17,-25 ,10 ,38988230 ,0 ,8,-3296 ,1134,2 ,-1820] -,[5824 ,-7 ,-30,14 ,4740,3472 ,-14,-98061432 ,-4 ,27 ,29,-3,440228096],[-25,19,-21 ,2299 ,153 ,26 ,29 ,13 ,6599340 ,-163537380,-121627818 ,61821396,-286 ,5,10,31 ,-26,-11,-1378,7380 ,176,-18,-23 ,-26 ,1 ,3564 ,-25 ,-5304 ,-69270080,-8,277200198 ,0,840 ,-53417870,3,-197239962 ,10 ,-4375,3322 ,18,-232895520 ,454,6 ,0,-4444 ,78445314 ,23 ,46085598 ,-3043 ,39814840 ,364 ,-5520 ,-988,-24,178861608,2 ,-2784,-16,42 ,-63349418 ,0 ,281105264 ,177128352 ,-2196 ,-6,0,31 ,-9,457299434 ,-1336 ,4030,-4617984,19] -,[21,0,9,-51830660,1113,-11 ,424,4,26011206 ,19,-645557472,-27],[0 ,-2178,-16 ,-18,-29 ,19 ,83738512],[-16,67544358 ,14,678,-192,20,-24 ,-2,-18 ,-31 ,0,6 ,-2 ,-14724620 ,-155,-12 ,0,-10202465 ,288,-117831762,-26 ,-22,-74400960 ,-5 ,17 ,6975 ,-31,-7080 ,3304 ,-552,-30,-9,-31,3762,19,-25,-13 ,12,49602204 ,-2353,3,14 ,456,3317 ,6500375 ,14,221 ,-67557312 ,0,315,-39121680,-360690975,0,27 ,-367937388 ,1,651,-2 ,738999072,42158550,-1736,-1344,207392400,-429781520 ,0 ,-20,-20882568,-1 ,-95903925 ,-20,-28 ,25 ,0,-28 ,-320,-681,12 ,4158 ,23] -,[658 ,285241400],[8 ,18 ,4 ,-2,-22,-10 ,2 ,17,126704320],[-2580 ,93500496 ,-1757 ,-1243 ,-12 ,2415,2755 ,-2484,-264,-276864750,-10 ,-530881659 ,-18,-24 ,106164,-20 ,-322662120 ,4050 ,201308800 ,-280,2784 ,-2600,-5,-104715648 ,-98829024 ,7560,2266,-22,-1899,-2222,1185 ,-62367840 ,4554,-186 ,-30,-5,3332 ,-15 ,2 ,-5775 ,-280296720,78190800 ,-42366411 ,27,-4994 ,0,6757,-21,-204 ,269712,8092032,-6,-22 ,-5250 ,-2268 ,25974300,10 ,-17 ,43636144 ,11 ,4 ,-3,0 ,29 ,-23 ,5400 ,-134779350 ,-26] -,[14352884 ,-2240 ,29,16 ,-11,-6750,-24 ,2416,888 ,-12,7,8 ,0,21,-563338656 ,-1209,2070,1332 ,-1170 ,-17,-22],[3276 ,30 ,-127666560,-4800 ,-202344716,132157954 ,-4,-7,19],[2 ,21,186965558 ,7,19,4284 ,24 ,-900 ,2511 ,5974,42 ,23,-30 ,-18],[2 ,5,-31,-303251130 ,0,-25,-25 ,-25,-26,17 ,-1,23752872,4121936 ,3306,-2,20] -,[-18,281226296,-5,-3 ,-3864,7,22 ,26,-885,-1116,-7,-5,16,-168862375,-1992,1340 ,-26 ,9850968 ,8 ,8 ,-792 ,-16 ,-19,74410740 ,16,4340,104603520 ,363661740 ,-449766930,259084260] -,[-21 ,744 ,14,-19391424 ,-169683696 ,-4,488 ,408 ,-28,18 ,-26,3 ,-2,16 ,0 ,-159 ,-9 ,26 ,6,0,955 ,1 ,-30,-26 ,5,-9141792 ,-18,3277 ,0,162 ,-27,108 ,4,286101720 ,6,-13700512,-12 ,23 ,180980904 ,24 ,16,-54714330,-67] -,[-28,28 ,150725750 ,-29865472 ,0,-5967,-29,-30 ,-29 ,30 ,-13483596 ,-31 ,2232 ,-297765504 ,0,133803360,89671480,37441440 ,31,26586819 ,0,-31 ,-108426303 ,-14,17,-29 ,30,29 ,-27,128555925 ,0,-300,-4740,9,279863425 ,-23 ,1008 ,27 ,-3 ,-344890128 ,1104 ,-212144988,177,-94197054,16,3268 ,-27,-644,26 ,-26,0 ,-4,-2522 ,-7179732 ,20 ,8,-28,-14,27],[-432 ,-882,-45861200,-72167040 ,23,0 ,14,-20,-576,4212 ,2,2128 ,-23,29,363781594 ,18] -,[-34584870,28 ,5292,3472,2115,1008 ,11 ,-28,-8 ,632382660,9,-17 ,-5,-6 ,6,20424642,-2,1680,-2520,7378 ,-22 ,16 ,-62916966,580 ,3234,16 ,-21],[-755,323,816 ,1554,493,-14 ,-24 ,371897055 ,0 ,-37316496 ,253,-231621460 ,-3668,0 ,21,-249917448 ,13 ,5,27 ,291345080,-12,5 ,7,-11,-2567 ,1] -,[25 ,-13081596,1976,-16505280,26 ,540,3648 ,-36 ,-11 ,-21 ,-21 ,1311 ,-22,-27,28 ,3570,-29,-5564,-11 ,187917912 ,-20599200 ,180669600 ,14,-2378464 ,9 ,-3451 ,107576784 ,-2982,-4263 ,-3840 ,-10 ,-22 ,-21,3360 ,-8,20,1 ,321002000,-2986230,-5460,0 ,-14624712 ,-27,1470 ,8 ,-1296,43547088 ,12],[22 ,0,8 ,682216416 ,6683427,1165236 ,621 ,36251910 ,3,23,-20080,96265400,-441,6 ,56 ,28,-3 ,-5010,-10,9,-44157900 ,18,-19 ,-12,16 ,296978220,1624,-6269090,-2016 ,11,-84898440 ,3466736 ,-11,12 ,9 ,-16 ,26,19 ,-6,4163,183 ,-4150,20 ,-2100 ,0 ,-41321475,315163002 ,-11 ,14 ,274,29 ,-48153960,-3 ,8 ,-2480688 ,560 ,-16148352 ,19 ,25 ,-940 ,-23 ,6247080 ,-14,38234730,29,28 ,-22 ,12 ,-29,-82837872,5 ,0 ,-31 ,-930 ,1160 ,-30,0 ,-16598552 ,21 ,24 ,-3,732 ,150270633,7,16,2460 ,27 ,-10 ,1],[364 ,10646720 ,19,18 ,-7 ,-9 ,1886 ,54012744 ,-25 ,-648] -,[-4848,105137084 ,-17 ,-968 ,18,29 ,37429140,-4 ,21,3205944 ,-3151,-7140 ,19,12 ,-26,1120] -,[30540600,70865760,12376452,9,840 ,16,47 ,0 ,-32,233639599 ,30676840,18,2,8 ,-24,126877608 ,33937512,-1040,-10,13 ,80094600,-5361752 ,31 ,-39981480 ,193889825 ,-159621840,-2 ,-447124608 ,12,482140890 ,1820 ,10,-16 ,26,-1333,-15,18],[-14,-175184856 ,-3340 ,-6 ,-30 ,-4440,-27,12],[-249129270 ,-154,15 ,1819630,3 ,2790 ,696,-174689382 ,-468 ,-22,1206240 ,247589664 ,-300728241,1215 ,-215824056,-12,219168078,28,51214330,2001 ,2231,-858,-20 ,-160,125 ,-18 ,76761384 ,-260895600,36849960,-4 ,23,-2304 ,-19336005 ,-31,6448,0 ,23 ,-6412 ,8,-345,211077432,-10472544 ,-8295363,-1891,29,1666],[192,16 ,0,-2,22 ,11 ,28 ,2,155052660,20,-825,-1 ,2156 ,-3895,-8 ,7,0,1118,-4,1707156 ,10 ,1930,-3,429189192,82452916,10999170,23,15 ,4776992 ,15,-10,-22 ,-16 ,118519000 ,-8,200889920,-12,-30,258081600,-13 ,-11,-193641640 ,317541642,-37506392],[14,-56311728 ,620,19 ,-143,192928176 ,18 ,30 ,-23,-244385700,0 ,27 ,1008,51622164,-29,1674,-256288320,7530,-1243,33802340 ,-6235696 ,1350,-11,-25,26470917 ,102630600 ,9 ,20 ,25,-13,30 ,15,-285 ,18 ,-26 ,3,132369514 ,1534 ,0,25 ,-22 ,912,1 ,-16,-5,-3,-31 ,263797326 ,-1710 ,-31,6 ,9] -,[-12,-161891136 ,-2128,18,1896 ,-6540 ,-546 ,-11 ,8 ,-26 ,1144 ,-9 ,6,31 ,-17,1 ,-30 ,20 ,8,-1,26,7816743,4813460,-8 ,-11,-16,-93755376,-54259260 ,29,-1730,846,-1,13 ,8 ,28 ,20 ,-306 ,-16,46559712,3213 ,81554814 ,-306653225,-27 ,0] -,[21 ,748,-12 ,-2646 ,51161376 ,21,-1 ,31 ,2002 ,-16 ,-118435740,504,22,-199612100 ,26,-1 ,-24,0,-6 ,-19,-8 ,-7 ,15,-5040,78616656,6 ,-9 ,-13 ,-420,-5250 ,-1207844 ,-1776 ,608,25 ,16],[-4,25 ,-107680828 ,-29,27,1,27,229039500 ,244 ,-24 ,-121572594 ,3838,28,-2074,20,-1020,25,-113460480,-4843,441 ,-24 ,6 ,223411176,-16,28,-413236096 ,-1008,1235 ,22712522,-29,-6264 ,-5448 ,-11,125216520 ,16,-11,14,10 ,-14 ,26 ,-1 ,-14,-4851 ,-11392164 ,860861640,85664000 ,750,-10 ,23,14,-43703305,1,-20,46257876 ,70451160 ,3751,-25 ,26,-4,-15,-65788675 ,-23 ,-2366 ,101 ,-4312,-4,78,14662017 ,-123547200,8,38822000,12,-7 ,-6015960 ,21,-4 ,-18,4140 ,5 ,26,14 ,156],[-11 ,10 ,-9792952 ,309246000,15348879 ,22,-77455500 ,-16,-6,-3768,-27,2628 ,5310760,-24,19],[-23417100 ,-4810,1596,-3,-18,-4483608 ,31,22 ,232048896 ,-8,-522 ,-83204800 ,6,0,-28 ,-25 ,0,-17,-26 ,24 ,5832 ,775 ,-29,-22 ,-28245430,-642107340 ,-28,-4 ,-96976 ,-28,5119200 ,-868,0 ,-3712,-31 ,9 ,-1695,-28 ,-22,104251200,11,-4 ,4194,2200],[-31 ,3762160,-2150192 ,3] -,[13,-378599776 ,-3,28010880 ,-21,4914,17,-13,-79473440 ,21,-1230 ,47020160 ,-453189984,3,-148 ,-123831678 ,546],[-371135100 ,8372889,316,-631468344,3108 ,-417384 ,-14,-21 ,306020819,125593416 ,-22,1 ,-27 ,296886601,4114,-3069036 ,15 ,16,138924370 ,28723968,12 ,158455740,152947904,-175142880,-15,-7,-8 ,-124218400,-44,2263,1464 ,-1408 ,133],[-21 ,7,-480590704,-9 ,-10,-11 ,-17 ,23] -,[100,1978,1212 ,-2060 ,-2024 ,-7311360 ,-88742400,-26388675],[-21 ,-3927,-7050 ,-13 ,-22,26,-722,19 ,27 ,11992133 ,-142742880,-200,31 ,-15 ,30 ,-27 ,31,3135 ,1368,21,990,-28,-1 ,15 ,-19 ,-21,2520,-2772,26,24,-1392 ,-14,589 ,24] -,[-5 ,32579412 ,11,8 ,6330 ,-6 ,-29,15 ,-3,-6604,27780000 ,-616,-1560 ,76281832 ,-17 ,-227077189 ,-80869104 ,26 ,30,-25 ,6 ,-4700 ,6 ,-233760800,7,21,7,22,-8,130 ,-6],[-146038551],[-4 ,29 ,19,-16 ,392] -,[-11908910,-3360,4693 ,-358783620 ,189165600],[-1,7778260] -,[14,1276 ,-28,1,13,3637396 ,0],[2080,-24 ,0,-28,-18 ,-17 ,24 ,-25,-4082176 ,-2553],[-131076000 ,-106576722 ,-438412338,89666976,-9 ,3,494,210],[-29,4,-29 ,0,-5 ,279778976,29,-20,15 ,-15 ,-25 ,29 ,-160801452 ,2960,49204688,-25761600,-19,-3240],[-1 ,292097640,-42680000],[584623296 ,-315,-3,-23,-218604312,-8,12,-1 ,-96339342 ,-119214953 ,-8 ,-27 ,438,-2,-27,378609840,25 ,-6 ,-1782704 ,-210,-19402560,-1485,-13,46639700,-5,39413436,27,2320,-13,4,0,418527125,-7,9,432,-22708800 ,-31408566,22 ,-27 ,725 ,0,-771840 ,-76219260 ,-10,0,320,-29 ,-134847396 ,-1737,-990] -,[-68274360 ,11,31 ,26,16 ,-31 ,15] -,[-44 ,9,11 ,-31 ,-1007,2662 ,-6,-915,-47719282,-8 ,-189849640 ,-6] -,[5 ,115,15,13434336,-3630,-17 ,23,-10230920 ,29 ,15 ,-3188160 ,-10 ,-563035,208060500 ,2,7 ,34829406 ,25,-19,4368],[-1,-9,9,-8,11889360,-80403400,768,19 ,-6,-426 ,4,-12 ,1760 ,5 ,174540096 ,-29 ,182229996 ,-4 ,-810 ,144827550 ,-711 ,166752684,-72065136] -,[-56632128 ,-33811456 ,3,300452784,2100,8,107846011 ,-1072,-168715950,19,-6 ,-4,7,-9 ,-200] -,[23 ,-1712 ,1953,15,25,-770 ,10677072,12 ,-872,13856370 ,-23,3348 ,-1416 ,7555275 ,-300,516 ,0 ,-16 ,320279400,-194961816,-62935056,87744564,-23232762,-4800,24,51,10885410,-5 ,1276 ,1201537,-133508370,31257207,-4 ,-1,-25],[-18,-180,-5452,-16,2 ,-31,22121856,-21,796 ,17,23 ,9,11 ,-271697400 ,2 ,-595563936,-30 ,-31 ,11,-30 ,24 ,3 ,1280,0 ,-5,1 ,0 ,24 ,317252754 ,19,20 ,-31 ,66193556 ,26,-138606710,9 ,-20 ,1 ,9,-4620,119660541 ,27,-22,-8 ,-2002,-3328],[5544 ,7,-894360 ,-30,-20890200,-60 ,-1136 ,-30 ,-8,0 ,10,25,29,-462933630,-3 ,258663600,7192 ,2436,2852,-14,-1962,-16,22,-15893350 ,31,-8 ,-4,22 ,5642,-12,23,27 ,14 ,-22 ,-24 ,9 ,-252,-772 ,330792,25,-4,-20 ,1,-15,-26,17,-176508670 ,-442183770,436153830,12 ,-119336008 ,-1040 ,-17,-58023200,-11 ,29,4,-2989884 ,21,13 ,-2320 ,1287,18,-31,-25,10,36 ,-1904,-10,25,432,-309,-5180 ,-3,-22 ,-23 ,153542610,-337345560 ,48 ,2,4290 ,23231160 ,280 ,-26 ,-359915946,-27 ,44693250,-34777665 ,-26] -,[-26,-5,21,-17 ,-1482 ,0 ,-182,2496 ,-306247392,-23 ,27 ,-24,4239 ,-16885330,-1190 ,-170,-3 ,-336,-20,-51975495 ,1628,680,285,0,-186,17 ,29 ,2 ,-19,-7112,-17 ,-23,-2730 ,10 ,223976760],[7,-100 ,24304116 ,-13,405 ,2676833 ,-6,18 ,-57 ,3709696 ,4224,-1272,-19292350,25,3 ,1391,110010672 ,-26,-13933440 ,2608,5232,-11,239263605,289543680 ,3,-13 ,10929490,23,-117672444 ,29,3895 ,-24,432 ,25 ,1 ,665,1824 ,-1,-14,20,-12 ,-4660],[-22 ,121694470 ,-417245400,-462296289 ,-10 ,525,10 ,28,-17],[13,-1696 ,21098088,29 ,2 ,-9,-23,-60718500 ,8],[0 ,288,280,-4,-27 ,363 ,21 ,105918180 ,-353030184 ,-2697 ,1720,-1558 ,4584,21 ,-29151960 ,10546970,0,-22,-1107 ,-19,-16 ,4080,-29 ,2080,30,-4712,-2706 ,1755,-8,2604,23 ,-231267315,23,-3656730,469 ,-15,-22 ,-2,15 ,-16,0 ,68439900 ,-11,-3894 ,4,-1969 ,-28,-387,-59127615,9 ,-10092648 ,-1650 ,-5101428 ,-884,-10 ,-11,-249119640,-25490388 ,165545400 ,-4686 ,0 ,-3287,6,-10 ,-24,18 ,23 ,502 ,6102 ,63704800,-20,-1140,0 ,-5,20 ,3008,-232007516,31,29 ,-16,11,-67118184 ,18 ,-86891332],[-4 ,-12,-7 ,-2068,-29,-25 ,-4 ,14 ,-5832480,-2460 ,-4600,2436,-25 ,8 ,-1470 ,-8,31714144,-6 ,-10 ,-14 ,1411704 ,-86837240 ,-123160128 ,98052864 ,-6,5850 ,232241465 ,8,770,3759552,-8,11 ,-27] -,[-10,27,154 ,5],[4579887 ,-2180 ,12478656,1,408,198,22575240,-24 ,-129542490,4,68517952 ,-20,0 ,20,0,0 ,29,88689835 ,-3674160 ,22,-11 ,24197355 ,-2,25,2500 ,16,-570250800 ,25 ,276450 ,-15590340,-24,11,-24 ,-27,13,21,-23 ,1580,29] -,[1,5,12 ,1,24 ,96938415 ,-28257024,1416,22,2664,-786,-20,-2470,540 ,-341089920 ,-7,-96634944,-380,-136,1036,-306784800,5,-551,-2142 ,11,4,133521388,8 ,-1 ,0,-38862486,22492050,14 ,-174 ,28],[-104,-6 ,-103014072,-28 ,-129708390,-15,-24 ,30,61863480,18 ,-22 ,3,-20,-269748000 ,23,-48 ,4 ,0,-3990 ,18 ,25,-13 ,-5430,40328560 ,-116910196 ,5335248,21 ,-23 ,-28 ,10427400 ,-20,-11 ,-920 ,127181556,3306 ,9 ,28,5 ,6390,10 ,-25 ,-18307120 ,7110 ,21 ,959 ,-9 ,870,330 ,-24,-25,4553 ,-26 ,580 ,-19 ,2057 ,-9930060 ,5 ,648 ,-16 ,-24201384 ,6348372 ,456 ,-27 ,-24 ,252 ,-172016768,11 ,1848 ,16,-148,11,-37695528 ,-8930493,133546392,-27,26637105 ,-194238328 ,76857984 ,21 ,-3268,-10 ,-995 ,63369960 ,-118274640,-237 ,2658736 ,-29,-14 ,774,-22 ,2 ,3360 ,-45749880 ,8 ,-351,-19 ,10066176,78 ,-567666,3] -,[0 ,-15,31581725,-21,-162 ,-6 ,-19,25 ,4752 ,1036 ,-12830706 ,-56050155,12,-20,9930720,3,17,185,10,-26,-24,-2054 ,32 ,868,-21,-144 ,-18 ,4,-7 ,21 ,2178 ,-13,11,-10,63120660,-19 ,27,-67648284,-11,358398710,-1215 ,-18,-17540874 ,0,11122056 ,-31 ,1356,2,-631275390,-1208,-56909820 ,-25 ,-6902 ,0 ,11 ,21,5160,2925 ,86348700 ,16,-13,-2068,160],[-114403520],[-17,-8,-1,1,19,-4 ,17,629 ,6 ,21],[107505 ,30 ,1143 ,-16 ,107521925,17 ,2056865,21 ,-8,-164464020 ,-26,1235 ,124,13 ,7,525 ,164577088,8814750 ,-330,-358918620,0,-10 ,0 ,-13,44604000 ,26 ,6240 ,-580 ,18 ,-8 ,-1,13 ,2 ,8 ,4480 ,-594 ,-2 ,366988496,261365400,-12148840 ,-6,2133,16,-20 ,62797170,9 ,142012416 ,0,0,-99483750,1638 ,407660,-5271 ,-9,-32844070,-1586,380912 ,-6240,0 ,-1,-156,-3570,19,-1052058,5,3402,1 ,-10,-200662000,1134,7 ,-1044 ,-3 ,-2034617,4752,-418803800,-20331540 ,10,20,8,-25 ,6 ,-31147920,-10 ,7,-276 ,-246369546 ,2760500,1278,-129486420 ,-52544376,14,22 ,25,142845612,-5964,-29,2988 ,3 ,-2 ,-13 ,4478292],[-2 ,15 ,2916,9616640 ,1 ,-1 ,7006,14 ,20,-24 ,94645080,14 ,-12,-1746 ,-2 ,729 ,-16 ,28 ,9,-76946100,-23,222,-1,-25,-3952 ,12 ,-23,6634971 ,28 ,-15,2 ,-2002,206892480,13],[234,-9266880 ,16 ,230099760,5 ,-24 ,29,-749,-2016 ,-30,75001550,-22 ,10,-1372,7 ,-30,-5355,80090960,8687744,3015000 ,528636500,1717,-8,27590080,15 ,80354690,13,29 ,-27 ,0 ,-3 ,-20,-4,1360 ,-339,-984,-108 ,-738 ,-25 ,-15 ,-25 ,30 ,-184463818,-29,13,19 ,17,622485,8 ,13 ,1782,-59128380 ,264 ,2354 ,8,-270 ,-24,-22,542651850 ,30,-3893 ,-31,-1582],[61475148 ,-29,-10,73475392,21 ,-5,-19 ,72859176,-19 ,1860,-1938 ,-2266,-7999120 ,2590,-15 ,17 ,-29,-11,26 ,-39142656,-23,-1088 ,211671250,-1476 ,2574,-2,107330598 ,100,-13 ,-5824,-1704,-15 ,104610240 ,-122478312,2610,-69891856,-29 ,-590 ,-31,184370340,-2295 ,-16,-290051892 ,4416,-165,18 ,-25,0,61 ,26,-426 ,24,19 ,-28,-23,-5600,22,-17,27,15 ,-30 ,2728 ,-451237644,1158,3744,-28 ,4 ,-54126300,-2088,-249247320],[3125,109506306 ,-2171 ,252148120 ,3612,-30761289 ,6] -,[-183865344,12564384 ,78006654,-1,-73759500,-4 ,1 ,-3 ,4796,755263440,24,-2782500,0 ,1760 ,11,-18,-100824768 ,-2178 ,5,15,-401903775] -,[25,-67880218 ,15916392,248 ,-21 ,-18 ,47289580 ,2 ,-393,26253220 ,8,-3,3648480 ,-12,3 ,-1645,-1 ,14,-24,-4 ,-6386092,-7,-7,1426,344742660 ,4,-31502308,1 ,233981415 ,-31,1271,3 ,-4843 ,258,30572880 ,-588 ,7,4 ,-1300 ,-16,37690224,-8,-10,-77904560,-46327890,-267658749 ,1755,-28 ,22] -,[-3150,27,-34116768,-28 ,-220700214 ,28,-13,-22001200,-1 ,114385200,-77729287 ,5 ,-112913352,-12 ,-2814 ,13 ,336 ,1508,2525,-3 ,26,-9 ,13 ,102 ,-5,2442 ,-20] -,[-31490389 ,2332,-16,-25,281865194 ,9 ,-525428316 ,16 ,1864 ,31 ,-360,3726,-17 ,-2 ,31,-24,78978412,-45,6904681 ,806,1194,-5,1596,19880994,-10 ,-1404 ,-19 ,-160260000,74105550 ,-5,-19,10,24,84669750 ,2028 ,117 ,17,91,180 ,1032 ,30,31,-103370526 ,9,-17,29,-400],[18458836 ,23,-33608520,27573780 ,26,-1 ,-13,-1,-14 ,10914408 ,5,21 ,-31801050,-10 ,-195458562,15] -,[-22555360 ,-18 ,-19,-14 ,-31 ,-10 ,-30,-8 ,-30,-1 ,2574 ,-2964 ,-52901376 ,714,-29,21,43825680,0 ,2355,180713484,-43846110 ,1476 ,-9820836 ,30,-4020744 ,226 ,-274785467,-1166 ,19 ,26,-7792200,84489780 ,136082232,-1780 ,-7,-3834,0 ,16,25,4 ,-1,-21,-351 ,-237 ,-2415,-15,31 ,121200912,1,8,-1000 ,464 ,-10,36132420,-25 ,20 ,0 ,-16,-3692073 ,-28 ,23,-1661,-265052000 ,22 ,-127416242,80937510 ,14,-8 ,30 ,-17,3 ,-6 ,15 ,44269680 ,-5,0,2180,-596,45075480 ,-25,6426,127243530 ,18 ,-97343840 ,0,81741750 ,-10 ,23 ,9 ,0 ,-19],[-31,-27 ,16 ,10,29119716,18,-6 ,-11 ,-16 ,224 ,-23 ,12,-70525224 ,-11 ,-1339170,447526800 ,2431] -,[-416,7 ,-5 ,-200 ,8],[-62686000 ,5,-277134528 ,80798130] -,[550579680 ,642,18605210,261205680,4 ,1020,-13 ,-5589,-94285620 ,10,-1500 ,4316,27 ,-31,197130080 ,19 ,388911600 ,26 ,371 ,-1692 ,-4,8 ,-32175735 ,-27,-23,-3 ,45093600 ,-53440940 ,23],[-13,3523325,-6757,2 ,-234,31 ,-10 ,406291041,0 ,-247490400,4832724,-29,1830 ,0,-14 ,-25 ,-22 ,-28,-7,-5750,-275,1645434,8 ,78 ,-9,1] -,[52166970,648 ,11043648,10,21 ,6356,-32761440,19,31827128,-67161600,-286226100 ,1550 ,5099040,-26 ,-2737150,6,1955 ,-81798444 ,19,10494236,-3806880 ,29 ,23,71823094 ,-57815775,640 ,1710,4 ,-18,1410,-10347194 ,-9,9 ,-25,8,-6786 ,-2025 ,0 ,-690 ,-4,-23,4094 ,-27 ,1782 ,-28,2,-1812 ,-4,-106072720,-280 ,11 ,-7000999 ,19 ,237097476,1488,1680,-8,-197581760 ,-608994380 ,0,-7192 ,-17,-12021490,-11666336 ,-615 ,34102449,-29 ,24,-3620,6972 ,374,1904,2453724,8 ,25544708 ,1185,-792 ,24 ,-5304 ,0,17 ,17 ,2240,3798,1 ,-65810070 ,6 ,0 ,98785728 ,1275,14,-9261039 ,31 ,-69351072,1716 ,-130,1584,-6,315091260 ,30,132495360 ,-592,6334524 ,437 ,4 ,5 ,-224447795 ,22 ,-5187 ,-297 ,15,118386525,-22,-4420 ,201794779,0 ,-10 ,-424003620,-200,29235816,720,23,-25,-43167924 ,-19,-28 ,-140136750,3546 ,-167652980 ,-9865824 ,5490,9029200,15783840,-45699804 ,-10,2299 ,2441824 ,-97463080,16 ,223411157 ,0 ,2616 ,14 ,7 ,6030,-27 ,8929800,28,282225888 ,-8 ,15 ,50442000 ,-89755560,-41671840 ,-3,1454355 ,65735040 ,-16,3145 ,-27657806,-4046 ,-3304 ,0,-3,638 ,-15 ,-23 ,-93936528 ,28 ,8342624 ,0,-18 ,18449991 ,-2 ,29 ,18,23,43187116,-137887344,-91230075 ,-5 ,-1 ,-22 ,8 ,-3 ,-4360,1212,-28,-4 ,-317239230 ,-7,-8 ,-22,-2,-14 ,864,-2106,30 ,4 ,-25 ,-4,8 ,1776 ,-12 ,-29,1976 ,-30,15 ,-1998 ,0,-7 ,19 ,-324 ,21 ,-16,17,-552 ,-11 ,87441120 ,190079820,28 ,8,2100 ,9105761,30,0,552006 ,20,-24,-9 ,24 ,-9,20,20 ,-5 ,-21489258 ,-77577588 ,24 ,3648 ,0,-17,575,9689940 ,296318898 ,0 ,-9,21 ,95805990 ,-24,194],[2600,-87658256,12 ,26 ,202433688 ,0 ,42008019 ,17,14016990,11 ,-19 ,10,-1998,233624475,7 ,-21,-5,5,0 ,-23,-25 ,768,-26,-28 ,2,11,17 ,206264718 ,24,10,-25 ,12,3,-1890],[784,-18972450,378,24 ,3732300 ,-22,-388855080,8547360,-17,918 ,-188306382 ,0,262719360,26 ,0 ,-30 ,-1 ,-21,7,-7 ,9 ,-1292,-5 ,-12,774 ,235,-505102500,-16 ,68312720 ,2 ,-3111330,-11,184196320,-24,10643496 ,-158814600 ,399420,-10 ,66965096,4218 ,-24 ,3069 ,-1,-34681218 ,2,10,14778575,5 ,88806256,20,-22,-5 ,-369158400,-216702390 ,115453800,-144169130 ,248360112 ,28 ,1248 ,4140 ,-1416,-2366,22,-16 ,26,-18 ,2660 ,3410240,-525780 ,21,-4137,11 ,-1269 ,162583420 ,-5 ,-5,-264,-1651 ,1080,19 ,-527 ,-3 ,-30,14905358 ,-6969312 ,5880 ,-125650764 ,-23,-15,-7320,275 ,-19 ,6664 ,4469820 ,-684 ,-14,-112 ,-26 ,21,-25 ,25 ,16 ,17,9 ,24 ,-1340,156507414,-20,-27 ,13 ,-23,19,7 ,31 ,-16 ,-8],[-27,-26,6 ,-205706592,-14,-8,-5,66539648 ,14,-27 ,-25,-270284220 ,-10,12 ,-18 ,5,2 ,1582920 ,12 ,-2 ,-2233,31 ,-27 ,12,28246995,199408716,1161,-172476690 ,-1358,-28,29828512,7,894255600 ,16 ,700 ,-58525560,-104478561 ,-1,40231296,96779232 ,-12712410 ,26,-1090 ,8 ,23,2896,1066 ,-13,-10,1717 ,12 ,18 ,-4824 ,-34899600,7063200 ,2940 ,16 ,16 ,-29,252 ,-26],[-276,165123000 ,-18 ,-1518 ,-19,-228,-898560 ,-730 ,3,14 ,61063872 ,-14 ,-10154136 ,10 ,95290560 ,24 ,0 ,-2034,18 ,-30,4,19 ,46,-15,-9] -,[247864617 ,-170847600 ,-1053,-5688820,-273,-3264,1030 ,6,-26,242 ,-175262080 ,18 ,0 ,-2736 ,-25 ,-125586756,252,484,-23471289 ,-9019248 ,420 ,-15 ,1390,-5478 ,1030 ,-12 ,-6804 ,-19 ,-21,3364596,-2223,31,-24 ,3054420,12,290197650 ,-28 ,10,14],[482631552,-8 ,0 ,-864,6] -,[0,-2825,79493700,-1,1428 ,28 ,-22,23 ,18130560 ,-5,-26 ,-29881920,-21,16 ,14 ,-25,-3 ,-4818 ,-21,29,13 ,-376202232],[0,5,1582 ,30 ,-513603288,500780610 ,-31 ,-2043 ,59908080 ,23,-26,5112 ,163550070,-4 ,9 ,-416,265067640],[-508232308,20 ,17649920,18],[-33706920 ,-410,-104837820 ,30 ,-11,-82122184 ,238154462 ,-13,21,-15,-2970,-18 ,50004416,16128720 ,-1566 ,-25,-864,966,-3615],[890 ,330 ,161472 ,25898264,-672,25,-61383672,777 ,3 ,-77549160 ,-8 ,-23 ,315424018 ,-26633816,-478,-29,-285,4 ,-1224,-24,-22,-8,10,-783,-19 ,50882544 ,140 ,-63167580 ,-17,-15 ,2,8,4,-19,-24843240 ,227863950,-32059560,24574613,0,3990,-30,14,-22 ,24,24,6 ,16 ,-23 ,-17013360,-23,-2120 ,318,1064 ,3210,-12 ,148974896 ,-5784,-199563085 ,2,-352836441,-596892972 ,1035,5,28,736,131632644,-2387952,-13 ,2241 ,21,22,-23,-23667680 ,15 ,0,2 ,16,2640,1638] -,[3,0 ,26 ,5075 ,-14 ,19 ,-9 ,-220] -,[-19 ,-25,0 ,-11 ,-77435160] -,[1881 ,31,-260,8 ,14145120,18,-25713639 ,-19,448594925,-799 ,-21,-479287776 ,-4488,15 ,-6,-41394046,14,-294 ,20,-5 ,4368,26,27 ,-20 ,6,174531830],[-9118396 ,1375380 ,-396 ,28,-15 ,-1035,-548 ,-6,0,-28,1600 ,18,-4,-88277202 ,-738888 ,-5730 ,6200,13,-3556 ,-20 ,349046550 ,-414,2,-460539673 ,-3079692 ,-1188,25 ,-11 ,-8 ,5699220,-294068016 ,5,-27,-12 ,-15 ,14 ,12,6,1261 ,-15,-19,17 ,23 ,17 ,-188201160,9 ,-27,-4332,-20 ,18,37806470 ,-10 ,-26,-22 ,213 ,15,15 ,67378152 ,965 ,-30 ,-22851752,273948318 ,24 ,-53793180 ,27],[88882332 ,-3281 ,-29,0,0 ,-310317120 ,-20 ,-22 ,-30,-51519678,-498718945 ,28,-47449890 ,0,637080 ,31 ,28,30,-2670,-5,-16],[-11 ,390,2052,955,-6510,20 ,29,236758756,-4785] -,[0,855 ,-8,2,-16 ,-148512480 ,0,-218147265 ,-846 ,360,49703358,-6 ,42482220,-148656024,1,-7395,-57403500 ,121806720,-302,58447350 ,132507960,-13 ,-8 ,0,14,-21 ,-29,-564 ,21,12 ,22222468 ,11 ,4 ,15,14,186244380 ,15,-292719648,13,-16,-4 ,-88672880,21,-1026000 ,-28,-15,13 ,11,-1952 ,-4048,-17 ,-24 ,-30,4237,-16204599,-9,-550,27 ,-737],[10684960 ,26 ,792,-240,-18 ,2697 ,1] -,[6 ,397786312,4784514 ,-651,24,17,47879916 ,6708240,12 ,-29 ,3910,-1 ,-29 ,31 ,-822 ,-26,26,-2832,4248,1584 ,-7 ,8,17411600,-69101400,-19,-1887 ,5301,-4692,4 ,-29,1071,28,-14,-1521,-16,-20 ,-30,-6214 ,19,-24 ,3,18 ,-8,9 ,-31,15 ,-15 ,11 ,-301826616,0,-406817840,-19130085,17,-12 ,44821361,-19,475230720,-5 ,383364300,-5177,-70224000,4475,-1280 ,9 ,4 ,135666140 ,3,0 ,0 ,27 ,408882600,-17 ,-3924,-2,-25 ,8 ,5,-163214304 ,4401,-25,4 ,-690 ,-654,26,-18 ,-1242,24,18,23,249253200 ,-12 ,-12,-1440 ,29,5220,-30,-2744,6,-680 ,-9612720 ,31 ,19 ,6,-704,18258464 ,-17 ,-58287934,-108005760,416,-136 ,104311152 ,-29 ,27199040 ,-19 ,-16 ,-1926 ,-762 ,-1 ,7 ,-247 ,27,14 ,19 ,4,5300491,2,8,-170226360,28 ,110001672 ,-2227,8,-1,29],[-3,354451916 ,-6,-7 ,19 ,30,-213990016 ,-24,-23,-265031493,4,-13 ,-31820162 ,14 ,15 ,-15 ,-9535008 ,-44408736,24735900,108756570,-211,0,-99 ,-26,-24,-13 ,29,20 ,-3454,20 ,1917,514410468 ,2939976,19,23 ,-735 ,15,-19 ,1575,-25 ,-7,165655378,29 ,149618040,-10575552,0,3,7,-19 ,26 ,-28 ,-20,30,326,-29 ,-19,-9 ,161726616 ,-65771160,15,901 ,-580,-78258250,-123865308,-8 ,3948 ,-11,-8,-5236,-2,-978466 ,3 ,7409 ,-8,108,16 ,27,37092160] -,[4 ,6014 ,-186050976 ,-2028,5146 ,-1 ,-1884 ,-3192,-1701 ,-3 ,-6,-252,117453985,-27 ,27 ,3618,2140,2684 ,-6 ,-215197819,23 ,-25,6240,18,29,0 ,-12,-11 ,2717,-25,-28,-247 ,31 ,-55813464,-30],[-4725,702 ,30,-2840 ,166213351 ,-7 ,20 ,-1 ,-4,76,-3555,1096,4,8713200 ,57769740 ,30 ,23,-4 ,-7] -,[-3225 ,163819938,54614868 ,-238713552 ,13 ,24,15],[26,339442116 ,-4 ,76 ,74868480 ,4075,-189026383,10 ,1364 ,2240 ,-28,-450,-23,-27,-754650,50992500,19 ,18,-696240,-198698880 ,31 ,-1890,1,20 ,-136,-26,22 ,-29,13,27 ,-28 ,0 ,-14 ,3,0,6318 ,17,24,-28,0 ,2400 ,-430856400 ,-5066358 ,3],[-25,-7047],[-4032 ,549 ,-17 ,27716992 ,13473120,-2289,837 ,31 ,8 ,-594901944],[-15] -,[124317720 ,-580 ,-25 ,22 ,-15805970,27 ,-11 ,-21 ,-3486 ,13] -,[29 ,-13] -,[3,-18,-52787664 ,1135,-88 ,4991,-28,-3552 ,14487795,34021080 ,-2100,-44106216 ,-6 ,-216,1260,2070 ,-1854 ,-22 ,-1341 ,-1587,18617000,26356500,10485447 ,-24,-4394,27 ,3510 ,-30 ,-31952851 ,-18 ,-2,31,150 ,22 ,-74 ,3,-3300 ,-1552,3900,-376,67120704 ,2301312,1,-23 ,11 ,-29,-1,91577213 ,5520,0],[-2004300 ,0,-12 ,326332638 ,-13831818,-20 ,127072652,-3,13 ,1,2760 ,-15 ,-1712],[-26,-171753 ,-84823600,22,-486402147,25 ,472013580,10 ,-3,22 ,-4252932 ,-717336837 ,28,-18,17,-27,2300,-447120 ,4131,3956 ,8,4554,-391,-22 ,70797909 ,14,76 ,1,-149289400,7130,-5,-2626 ,-3451,-21,432646099 ,1958 ,24,1,31,-3080,255461696 ,18],[212402960] -,[9,4,-28,117984240,3840 ,9 ,-31,15 ,29 ,19254312 ,-24,-211963500 ,-23,-14 ,9,-25],[1650,53155872 ,-139994008 ,23,1 ,0,-364,-20,-139320610 ,12,-11372608 ,-417810,10 ,-21,210,1464,15 ,-18,15 ,4 ,-7766550,-22,11 ,193392 ,-6,-8 ,28,-27695160,-12127130,-49655340,-31,9,-158584218,310676544,6,27 ,2632,3,26,-9,-16,-17 ,0 ,1 ,-252 ,-2958,6,0,-25],[4060,-3375,-3420 ,-96327525,-339165000],[-7,-3 ,-4 ,-31],[-27 ,-15 ,3360,6846420,-15 ,0,-12 ,6,125034325 ,16184718,247873920,-26 ,232,-28 ,1440,21,131702571,24,-21,-17,-289912392 ,0 ,0,28 ,-1540,57003606,-4150 ,1 ,-31 ,20,3780,-26 ,-7122204,-3675,324 ,-40084786 ,14790238,124614704 ,-16],[452182830 ,14,-3 ,5,11 ,23,-2325 ,-2 ,-25,0,16,24 ,20,-4847040,165754314 ,18,-8,12,163,20 ,346752945,3000,-420877976,-23 ,-12,6,-26,-56,64488080] -,[3105,12,29 ,14] -,[1308 ,-3 ,4050,-379124550,-2522 ,-23,21 ,-1705,-873 ,-14649999,-23 ,-144682720,-15,-1880 ,-20 ,127601280 ,-21 ,0,-1564,42905984,23 ,-3276,0,-7,-3474 ,-3660,-9 ,-4 ,-30,1800 ,2 ,1,376920320 ,3129041 ,-18 ,-5 ,-4290 ,-9 ,31 ,529439814],[26 ,108 ,-10,-22,196,-585,3,-18,149848818,-14250240],[25 ,-692 ,-3906,310294040,-48471654,-1 ,-6,17,4180,-1964100 ,26,-3,-11,20,-93937473 ,-25 ,2,17,-25 ,23 ,770 ,-23,-545 ,2,9 ,-3289 ,682,0,1 ,30,30 ,-73012992,3420 ,26144076 ,-19,172 ,131136789 ,7 ,-1260,-825,-8,0 ,16 ,91103232,-6552 ,340468920 ,-18 ,-48828224,6],[-1748 ,-855324,72494298 ,-23,40292720,15,-21,26 ,-3 ,2548 ,26 ,-410032392,420 ,-29 ,28 ,39394296,19,1414,6,9 ,-19,-22 ,9738162,-29 ,8 ,18,31 ,30 ,341181708 ,-576,-2 ,-20,-2982 ,4220,3192] -,[-26,-26,4,-10,151967340 ,-21,1136 ,-66 ,-58540725,1533 ,-3500,1620,-1,-19,28 ,187124080,-5,20,-1595,0,-67055100,0,-3,10 ,-9553986,24 ,-5365 ,-55411776,49227948 ,23,24,-1872,-3225 ,20 ,-2176,18,285631890 ,4,-19,-25,-68592656 ,-5145,-3952 ,-9133306] -,[1648792,-78699390 ,-6,133358454,0,127693746 ,0 ,-25,0 ,3075016,0,-9353421 ,5,-29,-527 ,13 ,-2230 ,0 ,167554576,3514,-30 ,-240 ,3400,2757144,270 ,-316680624,90067200 ,9596710,-27,3542,-110760842,26 ,21,-475673022 ,21 ,-9 ,12,24494960,-64224696,-24 ,2520 ,357371190 ,30,-29,2,212 ,19,-1190 ,21,-10 ,-2 ,-21 ,0,-24 ,-3024,82,1,0,-112,0,-11 ,-31,66832470,29,434 ,180692370,27,-20 ,24185850 ,171745368,99865560 ,-115525840,0 ,1 ,1 ,2600,765,-91387464,-6,-132197454 ,27,-74,-110544098,26 ,-29,77874804,413550005,59963760,3540,-2530,2016 ,28 ,-10,30 ,20,1 ,3,41713444,-1323 ,69840120,-2,-2] -,[-28,-295589376,72707292 ,480719808,-26 ,5324 ,-4110 ,-26,552,-11 ,-350,10 ,-15,5,-29 ,12837930 ,-92 ,10,-24,-24,-13,-167246664 ,0,-18,-168,-26 ,-16 ,3450,16,-20,6,-5508 ,-2352 ,-18,-1467 ,-1140,14 ,87365750 ,-376479714 ,29651328,24,-405905214 ,122925600 ,31,-4599,-3,-1,0] -,[-882,24164973 ,-3267855 ,-1725003,134832900,7,-310859076 ,8249904,2662 ,-215,13 ,1152,1475,-30 ,29,689 ,0 ,-10 ,3795 ,-3,2 ,423658390,0,-22 ,-11 ,19,-24,17 ,3 ,369312762,-69569280 ,-840 ,2,-476,-72469323,-12 ,-30 ,990,29,-4,29 ,2124 ,20,495,97402905 ,395335603,-238844448,-4543236 ,-12 ,2070 ,15] -,[14 ,-14613750,12 ,-798,-11 ,-17,29 ,3777900,13 ,17 ,2716,-1056 ,4628 ,560,320466510 ,117868863,117,8879452,984 ,-16,6384 ,28 ,-7,16941600,142599852 ,-1480,-259653240 ,22 ,-5,-1020,252603360 ,29,-30 ,-22 ,0,-144503190 ,12,-9 ,-21 ,-1375 ,1645497] -,[108529824 ,7 ,-1025,656,54092640 ,12 ,-4,-1656 ,-16 ,-14 ,-27 ,-15,-31,-8,26 ,-642 ,4061,-2628780 ,-2700,-31079664,-512047055 ,-81148844 ,810 ,-3770,8 ,7285 ,-14,14 ,-18803343,2 ,16,9,-23 ,-6,68748328,-2 ,-28,-54555174,-14,-17,-12,-74 ,-2 ,20 ,340565760 ,201],[10 ,-22 ,-28 ,10,8 ,178270752,-1150,22 ,-11 ,-1398,-17 ,-2460 ,1824 ,946 ,-860 ,-7590 ,-7 ,89781000 ,-35513280 ,3 ,122710896,-4 ,-4738480,29,520,-1,-175348688 ,120341760 ,-658 ,-548523008,-67381144 ,21925683 ,47773236 ,17,-20 ,10 ,-14,-4480 ,-426,18,21 ,562102272 ,4515,93873432,-17,27 ,-3696,-552 ,-3,-3,11 ,37931400,-190565725,-19,-40226760 ,-5486],[13 ,-1700,6060],[23,740 ,40700166,11,5,29,25675104 ,5,40,15 ,-4,-28,2494,45760780 ,-3 ,10 ,-10,1,27 ,2432 ,-5 ,-81546630,20133540 ,80406560 ,-197247330,-5,-23 ,-19,1,-2 ,-43977400,-4508,28,20,8,-20,-192435880 ,-400440600 ,2912 ,-1,-491425440,-28 ,4129947 ,-12,-21 ,-16,550,19,6006 ,252 ,20,6,85660084,-491183592,2 ,-2,23769864 ,-4108 ,-636398400 ,26,166937568 ,23,115806600,-13,2704 ,-31 ,3,16 ,5 ,22 ,-104017914,242994720 ,-1716,-2436,-980,2604 ,21 ,-8 ,17,16,18 ,0,21,20879480,19410795 ,5,327006360,4925,-18 ,-5456,-18,-24,-20 ,-260234854,3,0 ,360,262992450 ,218608560,-15 ,1,-238,-1085 ,3 ,17,-2064 ,-236634801,2926 ,-298517184 ,20 ,-170],[1113 ,-27057888 ,30,4579 ,-157899384 ,-143 ,714 ,10,-9,-25 ,-5 ,-2772 ,12 ,4,-18576844 ,31,1256 ,-952,28,-256 ,-1 ,47411580 ,208 ,-13 ,2420,14 ,2352 ,2 ,1032 ,-6018528 ,-1026 ,6 ,-16 ,-3 ,-10 ,-544 ,-5] -,[-18 ,20,13 ,-22,89742450,0,30,-150,-184609320 ,-7] -,[29150100 ,-23,-12,-390,7071840,16 ,-451,-7,-21,60403152,4,-210 ,25,18,22 ,7350 ,-1,-462 ,3200 ,-69149484 ,-26 ,2460 ,6,-21] -,[-8 ,3185,27724476,-317469746 ,26,-27 ,7 ,4,-119802298,24 ,4960 ,6,12,-21 ,4300 ,26,-21,305324080,-402020772,2775 ,-97617277 ,9 ,-18 ,5,163144692 ,2261 ,-1068,-14] -,[-10,-23157660 ,3816 ,-25 ,240,16 ,-98315856,0 ,25,-20,-26779599,-3300,10,-375500903,31,-21,13,1872,16464000 ,28 ,-1,-6479] -,[-2520 ,2904,-419896120 ,-109098696,-1305 ,30 ,-7 ,0,-30 ,-21 ,-3 ,-26,512502767,5130 ,-181762372 ,-2780 ,19,2754,6125 ,-2856,4425,-410911788 ,3 ,31 ,12 ,29 ,4920 ,-1 ,390 ,2 ,24 ,-3382,-406 ,44786736 ,-4,24 ,-5944752 ,538383240,29,9 ,-13 ,-1454733,17 ,-71000976 ,-11 ,-3572 ,104,-12,31,-1691] -,[-20,21,0 ,-26175540,-34011120 ,29,15,15 ,182,-29 ,31 ,-7,5,-3465 ,13 ,-27 ,-29836992 ,21,5070,-150933276,-27 ,24 ,44983350 ,-2350,2673,12 ,-31 ,2250,-26 ,-14145000,18,21531312,26,-1920,2500 ,594 ,-1,-249 ,-164792628 ,-2 ,-8,-34453152 ,3 ,-7] -,[-3 ,150,-336311040 ,-24 ,-2205 ,4320,21 ,-14,31 ,25,-57851136,-17 ,22 ,-3],[-262251990 ,0,61747920 ,453302244,-11464704 ,-75850740,23 ,-5,-234145670,-3 ,30 ,20287017 ,-22,95308902 ,6458760,18,-84530592,18,-13,6,-13 ,78954057,56107000 ,-6900,428,18 ,-86625000 ,7466536,2552 ,-8290926,-25 ,18382600,0 ,529287696,25,2060 ,88141584,13,-1102 ,-448153160,2322,0 ,21 ,-141618375,-1870,-80788266,784,-86107032 ,-22 ,-21 ,6692,-191252880 ,-85158627 ,0,5,-4389,1860,-22 ,-20,3] -,[-592120320,30 ,1755,-36301475,0,29,14 ,17 ,17,-3,21,-184075398 ,73385447,1800687,-3,-8 ,121628913 ,7 ,1750 ,-24,3960,2964,42995232 ,29 ,-11,300597765 ,31012256 ,-16,2892 ,42054600],[26 ,-3,0 ,-22,160,0,3258840,-21,185895336,-3502 ,7 ,3661290,108 ,108804555,18,-45506340,-24 ,-13 ,0,-142857702 ,-21 ,-165349616,22 ,11,8 ,22 ,-30,-6 ,-5 ,920,-1612,52286475,30] -,[-8847696,-780 ,-1 ,0,20 ,177799509 ,3744 ,10427157 ,-4680 ,-76 ,-2180,18,-3912040,-15,5,8239374,-5736,2,-13 ,-10,2001046 ,74422845 ,-18 ,-3630 ,-47685000 ,2659392 ,9,23655300 ,-3,-4488 ,-12,-11,23 ,7 ,12 ,0 ,16,-2 ,-3211,-29 ,11,0 ,-250354260 ,-238 ,0,1468929 ,527,96271860 ,39963022 ,3979,4,-5,-504 ,25 ,-16,250180144 ,35091043 ,-3136 ,14,13 ,-13,-10 ,400 ,-25,-1197 ,-171 ,-23,-1570,13,18 ,-21,8,2 ,-103646970 ,27 ,87702784,264212940,13886378,25,-6348000 ,20 ,-2272 ,1586 ,-21 ,10,15 ,-47871792,1200,-456 ,320024208] -,[20 ,-166190700 ,21 ,22 ,4524,-3 ,-31],[-16,-41307420 ,-2,475202700 ,-32406000,-1792,2587296 ,207,386347000,-6 ,-13,19 ,190896096 ,0,-8,-745,-22 ,23,1212],[17,-222362560,-154951069 ,-14221792,512,-2175 ,-1001,-576,-2142 ,-3 ,-89438310 ,102616480 ,157615470,-135337986,30,644 ,6 ,-490 ,4,28,-8,10 ,255841536 ,-27,-4636440 ,-9 ,17,-80631590,238569786,-23,-9,-890,4340,-17 ,29,0 ,278,12 ,-19 ,-65165405,-782 ,-238 ,23 ,-3528,-5],[675,-1768,936,31,-381251226 ,-16 ,3654,-9 ,23 ,287601600,-2060 ,394880,-138511500,-11947936,4509,-4,3007 ,-4,70425290,27 ,-180433620,8366358 ,-31 ,-26,0 ,-990,27,2982,49597800] -,[-92456250,2436840,-31,0,2727,22971240 ,-20,0,-164,23,-5,-8199200 ,7,6,23 ,700,16,28,29,10,492,13,3760 ,-19,-1272 ,-13 ,12484104 ,861 ,1512,31],[397646982 ,25 ,9],[-4675 ,814 ,-26,3712,3 ,-15 ,-24 ,-21 ,28 ,7006,309446592 ,-5797 ,27 ,24,28 ,-5304 ,0,26 ,-25 ,21,-454475,22],[-102 ,1264 ,-18,1751250,-5 ,-25 ,7,23 ,924,-209630750,5 ,-366171330,-536085480,26,0 ,-41575040,22,-31,480 ,-2 ,-25,24 ,-17 ,21],[-12644544,-24 ,-115822005,-1,190042560,12841620 ,-10 ,6,3 ,-1502585,-18 ,-446003910,-162 ,-24865000,24,54932150,4620 ,-27,-23,-31,14,-4 ,859902568 ,23374728 ,-28415772 ,-110584800,7 ,-130756194 ,16 ,-123969780 ,30,11,84423534 ,9,27 ,-172224936 ,17 ,19 ,-2385 ,219956880,-1188],[93485448 ,13875840,-14885955,10,17 ,-12] -,[-4554 ,824 ,795 ,-2912 ,-20,23,26,-19 ,-7,15 ,53701380,5040,-9186690] -,[-3648,4712,-76 ,46871748 ,-1673 ,1,31796184 ,13 ,3872 ,13,955 ,-8541592,22,-33611602,60138180,13,-29 ,-2178 ,-459545520 ,2962120,-95500248 ,-5,-3,-31,2419380 ,2784,254594300,-8 ,30929760,-1337 ,17,9 ,0 ,0 ,961632],[-466569840,-26 ,209556900,6726645 ,-26 ,108112290 ,1666 ,-4625,-26,-1275372,8,-1125 ,26,4650,-46597815 ,-23 ,-2,140803677 ,26,-1233 ,-10,-824 ,-108590820 ,-6630,-594306076,21] -,[1 ,546,66110198,25 ,-608784363 ,12 ,21 ,-28 ,-7,25,15 ,0,-3,1344,-30 ,1496 ,5 ,-25,1 ,-3280,-5857024 ,28,-18,-30,84110832,1988,-3016 ,30,20 ,30,23437184,1330 ,35,-4 ,-12 ,-3968,234853830,505614060,640711384 ,21 ,-2184,-2,2231 ,-9,-5,-25,-920 ,1,3196,17,-22 ,-11,924 ,20,-2 ,-9 ,18 ,79583400],[-17,16388816 ,2 ,-135 ,60 ,708 ,-28 ,-14,-20,10,10080720 ,22,-21,35932650,18 ,5905380,-13 ,-10 ,32995080,31 ,-13,-25] -,[-364,35,12,255,-22559328 ,31,30 ,11503096,100566000,-1070,2340,7,-45786972,103558620,-340,16 ,302377519 ,21 ,28 ,-486,4,0,6 ,-2] -,[-17507952 ,4,-13],[18,-7,-4935,19 ,-12,-31 ,586269320 ,94248756 ,-14,-2,-9 ,1056 ,-17,-2240 ,-536,54269556 ,-373637544 ,19 ,-22 ,-185907696,77205960 ,-252,306,9,19,5,17,1188 ,-558 ,3381,23 ,118742400,6840 ,-2 ,-3420 ,458163720],[5684 ,26 ,-12 ,16,-11,-4698,164163285,40922910 ,447213690,7 ,2859885 ,98382200 ,67216810,17 ,-15,3696,5334,-12 ,-20 ,15,-5040,30,16020018,-4 ,-10321419 ,10,0 ,-16 ,6,21,-34251300 ,-13,20 ,19,99,510 ,242672724,-13] -,[-544293984,-30 ,-390 ,3726 ,-200 ,-18,3234,24,8,19,17040240,0,3,-139063320 ,-117010410,336,20 ,-1004,22609314 ,6 ,-1584,13,-35266560 ,-112822227,581416408 ,-17,-9 ,3,-5549,93279312 ,36349040 ,19,28311360,27],[11 ,-21 ,1340 ,108 ,546,3 ,113782548,-28 ,2 ,-25 ,90818400 ,12809988,462,178335625,-17 ,-812880636,88 ,-7] -,[-17 ,378 ,180155136,17 ,-21 ,-13 ,-13,23 ,31,-30,-10 ,-261623362 ,-1652 ,-12,-15277200 ,46070712,-20,-349139520,-9022862 ,17,532,3,119279250] -,[7 ,3247 ,-17,11 ,-21,810,-16 ,-2079 ,-22 ,-6 ,-25 ,6] -,[21 ,-16,-280,-352,319,21 ,-29] -,[0,6,-29378921 ,-1 ,-33256665 ,-7,197411994 ,-18 ,-24,-300 ,-28 ,27,1998,208728000,3 ,1392 ,-195,-31540992 ,25,84068600 ,-19856964 ,12 ,-27,-31 ,0 ,5308576 ,-4 ,-83394360,28 ,-306533190 ,-11 ,-132402256 ,14,3024,-12,16 ,-280768950,29210368 ,0,58397100 ,31 ,-31 ,-12 ,3 ,4620 ,-28,8,997440,27 ,4 ,2625 ,27,-67382718 ,9,639,103714200 ,-7,945 ,-1404],[-16,382 ,-26 ,1 ,10 ,-6,-17,-7 ,-20,-30,15,-2716,-27,5 ,19572570,-11,5,-2 ,9 ,59773440 ,-36112635 ,-10,144879644 ,16 ,36187200,58673855,2000,-116289420] -,[23]] diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.twitter-search.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.twitter-search.json deleted file mode 100644 index d81b044..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.twitter-search.json +++ /dev/null @@ -1 +0,0 @@ -{"results":[{"text":"@stroughtonsmith You need to add a "Favourites" tab to TC\/iPhone. Like what TwitterFon did. I can't WAIT for your Twitter App!! :) Any ETA?","to_user_id":815309,"to_user":"stroughtonsmith","from_user":"Shaun_R","id":1125687077,"from_user_id":855523,"iso_language_code":"en","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/68778135\/Safari_Dude_normal.jpg","created_at":"Sat, 17 Jan 2009 06:14:13 +0000"},{"text":"Beginning to understand the Twitter world...and liking it.","to_user_id":null,"from_user":"AWheeler15","id":1125687050,"from_user_id":3694831,"iso_language_code":"en","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/71564236\/Photo_2_normal.jpg","created_at":"Sat, 17 Jan 2009 06:14:11 +0000"},{"text":"@genar hehe, she cant twitter from work, hasnt got it set up on the phone, and on our workout nights generally the computer is untouched too","to_user_id":1089113,"to_user":"genar","from_user":"donro","id":1125687042,"from_user_id":1907789,"iso_language_code":"en","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/68316085\/stef_and_don_normal.jpg","created_at":"Sat, 17 Jan 2009 06:14:11 +0000"},{"text":"My morning routine: mail, flickr, google reader, friendfeed, twitter replies http:\/\/ff.im\/-DMrn","to_user_id":null,"from_user":"hakandahlstrom","id":1125686913,"from_user_id":213116,"iso_language_code":"en","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/67707376\/squarelg_normal.jpg","created_at":"Sat, 17 Jan 2009 06:14:04 +0000"},{"text":"@LeeCollins If you have not seen Lee's Website..Check it out ..Perfect layout. Also.. Twitter Photo tool","to_user_id":381690,"to_user":"leecollins","from_user":"MichaelGPerry","id":1125686877,"from_user_id":2765433,"iso_language_code":"en","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/70614206\/MG_Perry_normal.JPG","created_at":"Sat, 17 Jan 2009 06:14:02 +0000"},{"text":"Just Buzzed My Blog:: New Friend @AlohaArlene Gets Twooted From Twitter http:\/\/tinyurl.com\/8hd7qy","to_user_id":null,"from_user":"BabyBloggerBrie","id":1125686854,"from_user_id":3593267,"iso_language_code":"nl","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/70969980\/brie_normal.jpg","created_at":"Sat, 17 Jan 2009 06:14:02 +0000"},{"text":"Current will air the inauguration while streaming tweets from the twitter audience on the TV as we watch. Check it - http:\/\/ub0.cc\/7C\/2d","to_user_id":null,"from_user":"my3rdeye","id":1125686843,"from_user_id":2553098,"iso_language_code":"en","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/67353656\/Charlie_Boognish_normal.jpg","created_at":"Sat, 17 Jan 2009 06:14:01 +0000"},{"text":"milestone: Twitter Grader has now graded 1,000,000 unique twitter accounts. Woo hoo! (via @grader)","to_user_id":null,"from_user":"christyitamoto","id":1125686812,"from_user_id":1549031,"iso_language_code":"en","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/60294809\/MyPicture_normal.jpg","created_at":"Sat, 17 Jan 2009 06:13:59 +0000"},{"text":"Twitter-Yahoo Mashup Yields Impressive News Search Engine http:\/\/twurl.nl\/pg8sxs","to_user_id":null,"from_user":"synectic","id":1125686791,"from_user_id":2563073,"iso_language_code":"en","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/67483750\/8yplOv7l.kokopelli_trans_normal.png","created_at":"Sat, 17 Jan 2009 06:13:58 +0000"},{"text":"RT: @sarahamrin You really know how to work Twitter. *scribbles another mark for Sarah on the International T.. http:\/\/tinyurl.com\/7xt8hb","to_user_id":null,"from_user":"howtotweets","id":1125686790,"from_user_id":3437258,"iso_language_code":"en","profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","created_at":"Sat, 17 Jan 2009 06:13:58 +0000"},{"text":"IPhone App Reviews - Breaking News in the 09s: iPhone and Twitter: Breaking News in the 09s: iPhone and Twitter .. http:\/\/tinyurl.com\/922qcl","to_user_id":null,"from_user":"ifones","id":1125686749,"from_user_id":1412337,"iso_language_code":"en","profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","created_at":"Sat, 17 Jan 2009 06:13:56 +0000"},{"text":"RT: @davidall's book about how to use twitter RULES!! You can get it here: http:\/\/tinyurl.com\/495nm2 http:\/\/tinyurl.com\/8kuva5","to_user_id":null,"from_user":"howtotweets","id":1125686716,"from_user_id":3437258,"iso_language_code":"en","profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","created_at":"Sat, 17 Jan 2009 06:13:54 +0000"},{"text":"@ev new 2 twitter & already hooked, thx 4 the welcome. It's rough being a newbie","to_user_id":5621,"to_user":"ev","from_user":"jgordo","id":1125686687,"from_user_id":3696186,"iso_language_code":"en","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/68508879\/Img00020_normal.jpg","created_at":"Sat, 17 Jan 2009 06:13:53 +0000"},{"text":"Twitter applicatie TweetDeck heeft een investering v $500k binnengehaald: http:\/\/twurl.nl\/gfei3i","to_user_id":null,"from_user":"gvenkdaily","id":1125686526,"from_user_id":230616,"iso_language_code":"nl","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/55316327\/gvenkdaily-logo-vierkant_normal.png","created_at":"Sat, 17 Jan 2009 06:13:46 +0000"},{"text":"We are like Twitter Retards.. HA ha ha. I thought I was going to be gay, but I totally changed my mind after being chewed on the other night","to_user_id":null,"from_user":"Aroyal88","id":1125686475,"from_user_id":3219428,"iso_language_code":"en","profile_image_url":"http:\/\/static.twitter.com\/images\/default_profile_normal.png","created_at":"Sat, 17 Jan 2009 06:13:43 +0000"}],"since_id":0,"max_id":1125687077,"refresh_url":"?since_id=1125687077&q=twitter","results_per_page":15,"next_page":"?page=2&max_id=1125687077&q=twitter","completed_in":0.01338,"page":1,"query":"twitter"} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.twitter-search2.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.twitter-search2.json deleted file mode 100644 index a85b49c..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.twitter-search2.json +++ /dev/null @@ -1 +0,0 @@ -{"results":[{"text":"RT @tmornini: Engine Yard Express = perfect way to test merb or rails deployment - http:\/\/express.engineyard.com\/","to_user_id":null,"from_user":"seanhealy","id":1429979943,"from_user_id":4485910,"iso_language_code":"en","source":"<a href="http:\/\/iconfactory.com\/software\/twitterrific">twitterrific<\/a>","profile_image_url":"https:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/62254150\/irish_noir_normal.jpg","created_at":"Wed, 01 Apr 2009 07:06:16 +0000"},{"text":"RT: Engine Yard Express = perfect way to test merb or rails deployment - http:\/\/express.engineyard.com\/ (via @digsby)","to_user_id":null,"from_user":"tmornini","id":1429966620,"from_user_id":168963,"iso_language_code":"en","source":"<a href="http:\/\/twitter.com\/">web<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/49018042\/Tom_Icon_64x64_normal.png","created_at":"Wed, 01 Apr 2009 07:02:00 +0000"},{"text":"Engine Yard Express = perfect way to test merb or rails deployment - http:\/\/express.engineyard.com\/","to_user_id":null,"from_user":"richardholland","id":1428644441,"from_user_id":1608628,"iso_language_code":"en","source":"<a href="http:\/\/www.digsby.com\/">digsby<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/63723025\/mesarah_normal.jpg","created_at":"Wed, 01 Apr 2009 02:07:30 +0000"},{"text":"RT @wycats: How to survive monster attacks. Some tips from your friends at EngineYard http:\/\/twitpic.com\/2nl7x","to_user_id":null,"from_user":"AmandaMorin","id":1427373261,"from_user_id":1756964,"iso_language_code":"en","source":"<a href="http:\/\/www.tweetdeck.com\/">TweetDeck<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/67971839\/avatar_normal.jpg","created_at":"Tue, 31 Mar 2009 22:19:29 +0000"},{"text":"engineyard added jarnold to mongrel: \n\n \n \n \n mongrel is at engineyard\/mongrel http:\/\/tinyurl.com\/dm7ldz","to_user_id":null,"from_user":"_snax","id":1427357028,"from_user_id":118386,"iso_language_code":"en","source":"<a href="http:\/\/twitterfeed.com">twitterfeed<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/19934062\/logo_large_normal.gif","created_at":"Tue, 31 Mar 2009 22:16:38 +0000"},{"text":"RT: LOL! RT @wycats:How to survive monster attacks. Some tips from your friends at EngineYard http:\/\/twitpic... http:\/\/tinyurl.com\/cgs2hj","to_user_id":null,"from_user":"howtotweets","id":1427228937,"from_user_id":3437258,"iso_language_code":"en","source":"<a href="http:\/\/twitterfeed.com">twitterfeed<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/81039760\/images_normal.jpg","created_at":"Tue, 31 Mar 2009 21:54:32 +0000"},{"text":"LOL! RT @wycats:How to survive monster attacks. Some tips from your friends at EngineYard http:\/\/twitpic.com\/2nl7x","to_user_id":null,"from_user":"tsykoduk","id":1427225099,"from_user_id":71236,"iso_language_code":"en","source":"<a href="http:\/\/www.nambu.com">Nambu<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/63278451\/Photo_33_normal.jpg","created_at":"Tue, 31 Mar 2009 21:53:52 +0000"},{"text":"RT @wycats: How to survive monster attacks. Some tips from your friends at EngineYard http:\/\/twitpic.com\/2nl7x","to_user_id":null,"from_user":"bratta","id":1427177698,"from_user_id":8376,"iso_language_code":"en","source":"<a href="http:\/\/thecosmicmachine.com\/eventbox\/">EventBox<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/80333638\/photo_normal.jpg","created_at":"Tue, 31 Mar 2009 21:45:46 +0000"},{"text":"additional infos on the engineyard outage: http:\/\/tinyurl.com\/cbhbkn","to_user_id":null,"from_user":"aentos","id":1427149457,"from_user_id":6459508,"iso_language_code":"en","source":"<a href="http:\/\/twitterfox.net\/">TwitterFox<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/66789130\/aentos_a_normal.png","created_at":"Tue, 31 Mar 2009 21:40:47 +0000"},{"text":"http:\/\/twitpic.com\/2nl9z - Surviving monster attacks. A PSA from your friends @engineyard","to_user_id":null,"from_user":"carllerche","id":1427108503,"from_user_id":880629,"iso_language_code":"en","source":"<a href="http:\/\/twitpic.com\/">TwitPic<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/56520194\/fry_coffee2_normal.jpg","created_at":"Tue, 31 Mar 2009 21:33:38 +0000"},{"text":"How to survive monster attacks. Some tips from your friends at EngineYard http:\/\/twitpic.com\/2nl7x","to_user_id":null,"from_user":"wycats","id":1427099726,"from_user_id":18414,"iso_language_code":"en","source":"<a href="http:\/\/twitterfon.net\/">TwitterFon<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/51747258\/Yehuda_-_Looking_at_Sky_normal.jpg","created_at":"Tue, 31 Mar 2009 21:32:07 +0000"},{"text":"RT @engineyard: Our CEO posted an update on yesterday's outage: http:\/\/bit.ly\/yA4p5 Good job keeping people in the loop!","to_user_id":null,"from_user":"fatnutz","id":1426857591,"from_user_id":706358,"iso_language_code":"en","source":"<a href="http:\/\/www.tweetdeck.com\/">TweetDeck<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/55573179\/snipe_normal.jpg","created_at":"Tue, 31 Mar 2009 20:50:21 +0000"},{"text":"loving our @entryway @engineyard solo instance, we built an integrity server in mins flat with @atmos lovely chef scripts: http:\/\/is.gd\/pVXw","to_user_id":null,"from_user":"gustin","id":1426653742,"from_user_id":3736601,"iso_language_code":"en","source":"<a href="http:\/\/83degrees.com\/to\/powertwitter">Power Twitter<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/116498033\/face_normal.png","created_at":"Tue, 31 Mar 2009 20:16:36 +0000"},{"text":"RT: Our CEO posted an update on yesterday's outage: http:\/\/bit.ly\/yA4p5 (via @engineyard)","to_user_id":null,"from_user":"tmornini","id":1426483075,"from_user_id":168963,"iso_language_code":"en","source":"<a href="http:\/\/twitter.com\/">web<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/49018042\/Tom_Icon_64x64_normal.png","created_at":"Tue, 31 Mar 2009 19:47:00 +0000"},{"text":"#engineyard #github very impressive - both the reason and the response - I must have missed the blog sorry","to_user_id":null,"from_user":"rickwindham","id":1426328592,"from_user_id":1819414,"iso_language_code":"en","source":"<a href="http:\/\/www.tweetdeck.com\/">TweetDeck<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/73617189\/me_new_normal.jpg","created_at":"Tue, 31 Mar 2009 19:16:30 +0000"}],"since_id":1386843259,"max_id":1429979943,"refresh_url":"?since_id=1429979943&q=engineyard","results_per_page":15,"next_page":"?page=2&max_id=1429979943&since_id=1386843259&q=engineyard","warning":"adjusted since_id, it was older than allowed","completed_in":0.037275,"page":1,"query":"engineyard"} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.unicode.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.unicode.json deleted file mode 100755 index 30930e7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.unicode.json +++ /dev/null @@ -1,3315 +0,0 @@ -{ - "a": { - "6U閆崬밺뀫颒myj츥휘:$è–ˆmYí–š#rzé£+玭V㭢뾿愴Yî°‘ê–šX亥ᮉ푊\u0006åž¡ã­ë£\"厓ᔧḅ^Sqpv媫\"⤽걒\"˽Ἆ?ꇆ䬔未tv{DV鯀Tἆl凸g\\㈭ĭ즿UH㽤": null, - "b茤z\\î¨.N": [[ - "ZL:ᅣዎ*Y|çŒ«åŠæ«•è¾Oj为1糕쪥æ³S룂w࡛á²â¸¥èš™)", - { - "\"䬰á»wDæ¾V`邀⠕VDãºsH6[칑.:醥葹*뻵倻aD\"": true, - "e浱uî¿£p蔽Crà· JK軵xCʨ<뜡癙Yç©ï½¹é½ˆX/螗唻?<蘡+뷄㩤쳖3å‘犾&\\첊xzå崦ݻé´\"åµ¥B3㰃詤豺嚼aqJ⑆∥韼@\u000b㢊\u0015L臯.샥": false, - "l?Ǩ喳e6㔡$M꼄I,(3á縢,䊀疅뉲B㴔傳䂴\u0088㮰钘ꜵ!ᅛ韽>": -5514085325291784739, - "o㮚?\"춛㵉<\/﬊ࠃ䃪ä£wp6ἀ䱄[s*S嬈貒pᛥ㰉'ë€": [{ - "(QP윤懊FI<ꃣ『䕷[\"ç’å¶®?%Ḭå£à²»ä‡Ÿ0è¤!è—²ë¹bdæµ¶tl\u2049#쯀@僞": {"î—i妾8홫": { - ",Mï£ë§ƒäž›K5nAㆴVNã’Ší–¬$n꩑&êŽæ¤žî·é˜«?/á¹ì„¸ë‰ª1x쥼㻤㪙`\"$쟒薟B煌܀ì¨à­2掳7㙟鴙Xå©¢\u0002": "Vዉèˆï ’᧷⦌kîŒï®žà°ˆnz*ï·œFM\"è­7ê€-VR<\/';ä™E9$䩉\f @s?íªo3^è¡´cî˜à¶Žä§ªaK鼟q䆨c{ä³ 5mᒲՙ蘹ᮩ": { - "Fã²·JGoâ¯Pëµxë’³p䘧☔\"+ꨲå¿JfR㔹)4nç´¬G练Qáž!C|": true, - "p^㫮솎ocî’£.೚A㤠??r\u000f)⾽⌲們M2.䴘䩳:⫭胃\\á¾@Fá­Œ\\K": false, - "蟌Tk愙潦伩": { - "aï‘<\/@ᾛ慂侇瘎": -7271305752851720826, - "艓藬/>á„ṯ,XW~㲆w": {"Eç—§î–郶)㜓ha朗!N赻瞉駠uC\u20adè¾ x퓮⣫P1à «LMMX'M刼唳ë¤": null, - "P쓫晥%k覛ዩIUᇸ滨:å™í˜²lMR5䋈V梗>%å¹½ué –\\)쟟": null, - "eg+昉~矠䧞难\b?gQì­·ç­\\eê® Nl{ಢ哭|]Mn銌╥zê–˜zⱷ⭤ᮜ^": [ - -1.30142114406914976E17, - -1.7555215491128452E-19, - null, - "渾ã¨ß牄귛r?ëŒ?w[âšžÓ»~廩輫㼧/", - -4.5737191805302129E18, - null, - "xyà¿‘M[ocì…’ç«“â’ºx?뜓y䊦>-Dì¼(&&?XKkc꩖ﺸá‹ëµžK伕6à§€)딀PæœyWæ™îž¢?훻魢傎EG碸9類៌g踲C⟌aEX舲:z꒸许", - 3808159498143417627, - null, - {"m試\u20df1{G8&뚈h홯J<\/": { - "3ஸ厠zs#1K7:rᥞoꅔꯧ&ë‡éµ¼éž«6è·œ#赿5l'8{7㕳(b/j\"厢aqç±€êš\u0015厼稥": [ - -2226135764510113982, - true, - null, - { - "h%'ë§žï–±Sì‹…Hs&dï”l슾W0jé¿M×D놯L~S-㇡Rì­¬%": null, - "⟓咔謡칲\u0000孺ꛭx旑檉㶆?": null, - "æ‡I転;￸B2Y`z\\ç“w,ë†æ¿æ’埵䂄)!ä¶¢D=à´­ã´ŸjyY": { - "$ࡘt厛毣ൢIèŠ<겿骫⫦6tr惺a": [ - 6.385779736989334E-20, - false, - true, - true, - [ - -6.891946211462334E-19, - null, - { - "]-\\êŸ1/è–“â§á½Š\\l牑\u0007A郃)阜ᇒᓌ-塯`W峬G}SDb㬨Q臉⮻빌O鞟톴첂B㺱<ƈmu챑J㴹㷳픷Oㆩs": { - "\"â—‰B\"pᶉt骔J꩸ᄇá›iâ•°æ ›K쉷㉯é©!ãˆnì¹äŸ…難>盥yé“¿eà­”è’M貹ヅ8å˜‹í€¯ä‰¶áŒ¥ã¢æ®Šë»³\"絧╿ꉑ䠥?∃蓊{}㣣Gk긔H1哵峱": false, - "6.瀫cN䇮F㧺?\\椯=ÚˆT䘆4â˜ïšŒ8qv": -3.5687501019676885E-19, - "Q?yऴr혴{஀䳘p惭f1ﹸ䅷䕋贲<ྃᄊ繲hq\\b|#QSTî“¶s1c-7(äµ¢\u2069åŒçµ˜ê¯‰:læ¯´ï›æ±žt戀oà·Ÿáµ¶ë®±á£-醇Jx䙬äí–¢0࣫á¡grã„›": "\u0011_xM/蘇Chv;dhA5.嗀绱V爤ﰦiëµ²M", - "â‘[\"ugoy^儣횎~U\\섯겜ï¥l2jw஌yD腅̂\u0019": true, - "ⵯɇä²á«¿à¢š!㯢l샅笶戮1꣖0Xe": null, - "劅fë„€ï‹ï§¼bå®ç„ŠE찓橵G!ʱç“뭔雩괛": [{"p⹣켙[q>燣äƒãž½î›œá©²x:쓤삘7玑퇼0<\/qç’‚á‘[ï ™Z\\3䅵䧳\u0011㤧|妱緒C['ì·“Yꞟ3Z鳱雼P錻BUì”§U`ᢶg蓱>.1Ó§è­«'L_5VäµÐ¦": [ - false, - false, - {"22ä‚盥N霂얢躰îe9â‘©_뵜斌n@B}$ê´»Yá±@ä§‹î´½V\"☒-諯cVë¯Ê ": true, - "Ű螧ᔼæªéŽë•’딜qꄃH뜣<ç§à¥‚CYå“â¸>XQ㵡趌oë¬k픀빯a(ܵç”ë†à­¯/6Nᪧ}æšá†šì§ŒP牰泱鈷^d꣟#Lì‚€\"㕹襻;k㸊\\f+": true, - "쎣\",|⫝̸阊x庿k잣v庅$éˆê´Žç‚”k쬪O_": [ - "ìž©AzZGz3v愠ꉈⵎ?㊱}Så°³à¯p\r2>ì·IP䘈M)w|\u000eE", - -9222726055990423201, - null, - [ - false, - {"´킮'뮤쯽Wxè®V,6ᩪ1ç´²aႈ\u205czD": [ - -930994432421097536, - 3157232031581030121, - "l貚PY䃛5@ä­„ê·»m㎮ç¸fî§¡": 1.0318894506812084E-19, - "࢜⩢Ш䧔1肽씮+༎ᣰ闺馺窃䕨8Mƶqè…½xc(៯å¤J5굄ä•Qj_훨/~価.䢵慯틠퇱豠㼇Qﵘ$DuSp(8Uà¸<\/ಟ룴𥳐ݩ$": 8350772684161555590, - "ㆎQ䄾\u001bpá©­${[諟^^骴᤮b^ã…¥Iâ”§T㉇⾞\"绦rä°‚f矩'-î½7ä¡­æ¡¥Dz兔V9è°¶å±…ãºá”Šä©¯ë².\u001eL0ὅㅷ釣": [{ - "<쯬Jå·^숞u࠯䌗艞R9닪gã¾ë³Ža䂈歖æ„:%é”|ﵤ|y}î¡»>;2,覂⶚啵tb*ä»›8ä¹’ã“¶B࿠㯉戩oX 貘5V嗆렽ë‚߼4hä§›êºM空\\b꿋貼": 8478577078537189402, - "VD*|ï§­z~hè­ºaᯒ": { - "YIì·¢K<\/濳xNne玗rJo쾘3í•°é´Š\"↱AR:ࢷ\"9?\"è‡ï¦¡)?誚êŠe)_D翾W?&F6J@뺾ê°NZ醊Z쾈വHï±å¶¿?炫㷱鬰M겈᭨b,â»éˆµP䕡䀠८ⱄ홎鄣": { - "@?k2é¶–ã‹®\"Oರ K㨇廪儲\u0017ä¾î¿‚J?);\b*묀㗠섳햭1MC V": null, - "UIICP!BUA`î€á¢ˆã‹¸~袩㗪⾒=fBï®´l1ꡛ죘R辂여ҳ7쮡<䩲`熕8é ": 4481809488267626463, - "Y?+8먙ᚔ鋳蜩ï–럶1㥔y璜౩`": [ - null, - 1.2850335807501874E-19, - "~V2", - 2035406654801997866, - { - "<숻1>\"": -8062468865199390827, - "Mã¿£ï€E]}qwG莎Gná¶(ê”™\\D⬲iꇲs寢t駇S뀡ꢜ": false, - "pê¤ãŽ9W%>M;-Uç’fî£(^j1?&RBéš§ å¿“b똊îƒE": "#G?C8.躬ꥯ'?냪#< 渟&헿란zpo왓Kj}é·§XﻘMツbä•–;㪻", - "vE풤幉xz뱕쫥Ug㦲aH} ᣟp:鬼Yá°ŸH3镔ᴚ斦\\é‘r*2橱Gâ¼”F/.j": true, - "RK좬뎂aí™ f*f㱉á®â¦‹æ½™ã¨‹Gu곌SGI3Ië¿\\F',)t`è蘯囯ﮉ裲뇟쥼_ገ驪▵æ’ᕤV": 1.52738225997956557E18, - "^k굲䪿꠹B逤%F㱢漥O披M㽯镞竇霒i꼂焅륓\u00059=皫之눃\u2047娤é–銤唫á•b<\/w踲䔼u솆맚,ä’á³'/it": "B餹饴is権ꖪ怯ꦂẉဎt\"!凢谵⧿ï™0\\<=(uLä·åˆ¨ì‘ª>俆æ“Cy襸Q힆䆭涷<\/á±0î É§îŠ‹䗾䚹\\ኜ?ꄢᇘ`ä´¢{囇}᠈䴥X4퓪檄]ꥷ/3謒ሴn+gé¨X", - "GgG꽬[(å«“ëª6\u0004ê¶宩㙻/>\u0011^è¾dTè…ªhxÇ‘%ꊇk,8(Wâ§‚çµP鬜O": [{ - "Mã´¾c>\\ᓲ\u0019V{>ꤩ혙넪㭪躂TS-痴໸闓âµ/徯O.Mã¥Ê·D囎⧔ì³íœ¤T??鉬뇙=#ꢫ숣BXä­¼<\/d똬졬g榿)eꨋﯪ좇첻\u001a\u0011\";~쓆BH4勿”Š7힪", - "iT:L闞椕윚*æ»›gI≀Wਟඊ'ꢆ縺뱹鮚Nê©á§¬è•¼21줧\\䋯``â\\ã±é³¨": 1927052677739832894, - "ì®ç¼¦è…ƒg]礿Y㬙 fî¼ãƒºSɪ꾾N㞈": [ - null, - null, - { - "!t,çY 1䗉罵?c饃호䉂Cá­ì’˜z(즽sZG㬣sഖE4ï‚뢜㓕äžä¸®Qpç°6EZឪ겛fx'ꩱQ0ç½£i{k锩*㤴㯞r迎jTⲤ渔m炅肳": [ - -3.3325685522591933E18, - [{"ã“5]A䢕1룥Bï²C?Ꙍ`r룔Ⳛ䙡uä¼²+\u0001àµo": [ - null, - 4975309147809803991, - null, - null, - {"T팘8Dﯲ稟MM☻㧚䥧/8ﻥ⥯aXLaH\"顾S☟耲ît7fSà·‰ë†ë®”/ꕼ䓈ìº4\\霶䠴ᩢ<\/t4?죵>uDï›5➶༆쉌럮⢀秙䘥\u20972ETR3æ¿¡æ†vB? ~鸆\u0005": { - "`é––mç’㥉b뜴?Wf;?DV콜\u2020í‰à±“æ“å®ZMj3mJ먡-å‚·ë±™yח㸷꥿ ໘u=Mì!5å­L4v\\?ÇŽ7C홫": null, - "|": false, - "~Ztᛋ䚘\\æ“­ã—傪Wé™–+ã—¶qᵿ蘥ᙄp%䫎)}=â ”6ᮢS湟-èž¾-mXH?cp": 448751162044282216, - "\u209fad놹j檋䇌ᶾ梕ã‰bוּ": {"?è‹´ê© D䋓帘5騱qï±–PF?☸ç—é¡’yU á¡«cb䫎 S@㥚gꮒ쎘泴멖\\:Ié®±TZ듒ᶨQ3+f7캙\"?\fí’¾\\oæžç´Ÿï»½M.âŽï˜¸é‘OP": [ - -2.6990368911551596E18, - [{"ä’–@<á°¿<\/⽬tTrè…ž&G%᳊秩蜰擻f㎳?Sãµ§\r*k뎾-乢겹隷j軛겷0ë£é®ï µ": {")DO0è…¦:ì¶é€¿:1㥨่!è›æ¨‹2": [{ - ",ꌣf侴笾m๫ꆽ?1?U?\u0011ꌈꂇ": { - "xæ—ç” nVqä…¦w`CD⦂惺嘴0I#vỵ} \\ê·‚Së´Dì–¾?Ô’j溯\"v餄a": { - "@ç¿™c⢃趚痋i\u0015OQâlqë†Y0pࢥ3쉨䜩^<8g懥0w)]䊑næ´ºo5ì­QL댊랖L镈Qnt⪟㒅십q헎鳒⮤眉ᔹ梠@O縠u泌ㄘb榚癸Xî©­Þ”Ftj;iC": false, - "I&뱋゘|ï£è“”䔕측瓯%6á—»HW\\N1貇#?åƒá—œghá­ªo'䗈꽹Rcìš/蔳迄à¼!0邔䨷푪8ç–©)[쭶緄㇈୧á": { - "B+:ꉰ`sì¾­)ë¹¼Cç¾A䫊pMgjdxäHf9᥸W0!C樃'ï¤f䫤סи\u0017Jve? è¦f둀⬣퓉Whk\"஼=չï³î•¤çš†ç¬BIW虨쫓F廰饞": -642906201042308791, - "sb,XcZ<\/m㉹ ;ä‘·@cäµ€s奤⬷7`ꘖ蕘戚?Feb#輜}p4nH⬮eKL트}": [ - "RKé³—z=袤Pf|[,u욺", - "Ẏá»ç½¯ë‰‹âº–锅젯㷻{H䰞쬙-ì©“D]~\u0013Oã³¢gb@æ¶è”‰|kᦂâ—!\u001ebMè¤sca쨜襒y⺉룓", - null, - null, - true, - -1.650777344339075E-19, - false, - "☑lꄆs힨꤇]'uTന⌳ë†].1â‹”ê´æ²°\"IWà´©\u0019æ°œ8쟇䔻;3衲æ‹,窌zíŽå–íš—?4?Cë„é—®?ᥙ橭{稻Ⴗ_ì”", - "n?]讇빽å—}1å­…9#ê­¨é¶v\u0014å–ˆ)vw祔}룼쮿I", - -2.7033457331882025E18, - { - ";⚃^㱋x:饬ኡj'ê§µT☽O㔬RO婎?향ᒭæ©$渣y4i;(Q>꿘e8q": "j~錘}0g;Lèº*;á•­ê„®0l潛烢5H▄쳂ê’ï­‹ê™¶T犘≫x閦웧v", - "~î¢æ¯\u2018c4è·ë E~ᑅቚꈂ?nq뎤.:æ…¹`F햘+%鉎Oç€œìŸæ•›è®âŒæµ¢<\/㮺紿P鳆ࠉ8I-o?#jﮨîŸ7v3Dt赻J9": null, - "à£W䌈0êŽqC逖,íš…î·Žcáƒswj;jJSæ«5æ§—OaB>D踾Y": {"ã’°äµF%î©®?59.î„„ãˆcᕨï†í•틎á¸ã‹©B=9IÛⓌ{:9.ywï½å‘°ã†®è‚’᎒tIã¾´62\"ዃ抡C﹬B<\/ì´‹jo朣", - [ - -7675533242647793366, - {"ᙧ呃ï£:[㒺쳀쌡ì‚H稈㢤\u001dá¶—GG-{GHྻຊꡃ哸䵬;$?&d\\⥬ã“Nåœ´ë¤æŒ¨-'ê•®$î“‹PU%?冕눖ié­q騎Q": [ - false, - [[ - 7929823049157504248, - [[ - true, - "Zè™\u0017'eꕤ᱕l,0\\X\u001c[=雿8è ¬L<\/낲긯W99g톉4ퟋbãº\u0007åŠ'!麕Q궈oW:@XáŽïœ¬z蘻m絙璩귓죉+3柚怫tSæ‡è’£ä -æ“¶D[0=퉿8)q0ÙŸ", - "唉\nFA椭穒巯\\䥴䅺鿤S#bè¿…ç˜ ï¶—ê¬˜\\?q1qN犠pX꜅^䤊⛤㢌[⬛휖岺q唻ⳡí‹\"ã™™Eh@oA賑㗠yå¿…Nꊑᗘ", - -2154220236962890773, - -3.2442003245397908E18, - "Wá„¿ç­ :瘫퀩?o貸q⊻(᎞KWf宛尨h^残3[U(='æ©„", - -7857990034281549164, - 1.44283696979059942E18, - null, - {"ꫯAwè·­å–€ ?_ï““9\"Aty背F=9缉ྦྷ@;?^鞀w:uN㘢Rá»": [ - 7.393662029337442E15, - 3564680942654233068, - [ - false, - -5253931502642112194, - "ç…‰\\îš¶î¶è¾Žî›¢à³†ç½5â’­1äªäƒ‘s䎢:[e5}峳ﴱn騎3?è…³Hyêƒè†¼N潭錖,Yá‹ËœYAá“㬠bG렣䰣:", - true, - null, - { - "â’›'P&%죮|:â«¶ì¶ž": -3818336746965687085, - "钖m<\/0ÝŽMtF2Pk=瓰୮洽겎.": [[ - -8757574841556350607, - -3045234949333270161, - null, - { - "áœî…½rè¼³>⫇9hU#î¦#w@ê·ªA\\Cî’¢ é‹ºã˜“ê–æ¢’뒬묹㹻+郸å¬ìœ¤'+g<\/碴,}ꙫ>ì†;情d齆Jä¬àº©æ’›ì±íƒ¹/R澡7剌tꤼ?ặ!`â²ç¤\u00002똥଴âŸ": null, - "\u20f2ܹe\\tAê¥Æ°\\x当뿖ï»ë ‰ç¦›;G檳ﯪï…Sà«°3~㘠#[J<}{奲 5箉⨔{ë†<\/釿抋,åš /曳m&WaOvT赋皺璑ï“í…": [[ - false, - null, - true, - -5.7131445659795661E18, - "è­m䓪D5|3å©à°ž>î‰è ‡æ™¼6nï´ºPp禽羱î¤DS<ç“닫屚ì‚å§¿", - true, - [ - -8759747687917306831, - { - ">ⓛ\t,odKr{䘠?b퓸C嶈=DyEᙬï¿@ᴔ쨺芛髿UT퓻春<\/yê¸>豚W釺N뜨^?꽴﨟5殺ᗃç¿%>í‚ဿ䄸沂Ea;A_\u0005閹殀W+窊?Ꭼd\u0013Pæ±´G5ì“æ˜": 4.342729067882445E-18, - "Q^즾眆@AN\u0011Kb榰냎Y#ä€ê€’ᳺ'q暇çµs\"!3#I⊆畼寤@HxJ9": false, - "⿾D[)袨㇩i]웪䀤ᛰMvR<èŸã£¨": {"v퇓L㪱ꖣ豛톤î£\\ê³±#ï–©kDTN": [{ - "(ì¾´ä¡£,寴ph(C\"ã³¶w\"憳2s馆E!n!&柄<\/0Pꈗſ?㿳Qdéµ”": {"娇堰孹L錮h嵅⛤èºé¡’?CglNæŸ+쨣ﺜ\\MrH": {"çžäŽ‡ë‘ƒá‰²å¼­íŒ­^ꄞ踦涟XK錆쳞ឌ`;੶S炥騞ଋ褂B៎{Ú’ä­·á¶¼éœpIè—è™¶K$": [{"â—–S~躘蒉꫿輜è­Qã½™é—@ᢗ¥Eæ¦iØ¡5┄^B[絮跉ᰥé™PWi3wㄾⵀDJ9!w㞣ᄎ{ë“’ê““b6\\篴??c⼰鶹⟧\\鮇ꮇ": [[ - 654120831325413520, - -1.9562073916357608E-19, - { - "DC(æ˜è¡µá¼¡ê¸™ê°µå§­|Ö›[t": 7.6979110359897907E18, - "Jâ…))嫼â³9Xfd飉j7猬ᩉ+⤻î®çœ—벎Eé°‰Zï¾¶63zá69}Zá¶L崭ᦥ⡦éšâ‹›êŽ¨î´µ~i㨃咊ꧭo䰠阀3C(": -3.5844809362512589E17, - "p꣑팱쒬ꎑ뛡Ꙩ挴æèƒ”&7ᔈ묒4Hdç¡¶í›ãŽ–zꢼè±ã¿¢aሃ=<\/湉鵲Eî„¡Ó…%$F!í¶æ£Œå­¼{Oé§à¨ºgeu+": ")\u001bìž“kÅ€Xì©«Aë°Â®Ú£ç™¦ç‹¢)扔弒p}k縕ꩋ,䃉tࣼi", - "ã‚¡F肿輸<솄G-䢹䛸êŠl`Tqê•—îŠè’ža氷⸅ᴉ蠰]S/{J왲m5{9.uá½³~㕚㣹u>x8Uè®Bëºè¥ªç›ŽQhVS맅킃i识{벂磄Ià·„ä™…xZy/æŠà«­Zï–Šé²î¦š-霳Væ®æŒ¦â„’": null, - "㯛|Nî½™ê¸b7âµb?æ‹ O\u0014Þ†?-(EꞨ4ꕷᄤYᯕï‘OW瞺~螸\"욿ќe㺰\"'㌢ÆW\u0004çž•>0?V鷵엳": true, - "뤥G\\î¡‹è¿‹ä ¿[庩'꼡\u001aiá©®Vì¯á³ªä¦ªÃ”î²…;倱ନë›èªˆ": null, - "쥹䄆䚟Qæ¦äŽá¢­<\/2ã•£p}HW蟔|äƒî‚꿈ꚉ锳2Pb7㙑Tⅹᵅ": { - "Y?Ö­$>#cVBꩨ:>ï†eLè’å‹™": { - "86柡0po äš&-æ‘Ћ祌<\/휃-G*㶢הּì©s㶟餇c걺yu꽎還5*í„§ç°•Ogå©¥Sê": null, - "a+葞h٥ࠆ裈嗫ﵢ5輙퀟ᛜ,QDﹼ⟶Y騠锪E_|x죗jä¾µ;m蜫轘趥?븅w5+miì½›L": { - ";⯭ﱢ!ä¹°Fâ½æŸ¤é¶‚näµ£V㫚墱2ë ¾ELEl⣆": [ - true, - -3.6479311868339015E-18, - -7270785619461995400, - 3.334081886177621E18, - 2.581457786298155E18, - -6.605252412954115E-20, - -3.9232347037744167E-20, - { - "B6㊕.k1": null, - "ZAê„®Jé®·á³±o갘硥鈠䠒츼": { - "á•…}럡}.@y陪é¶r業'æ´î‰°í€‰x䉴ﵴlí˜):씭脴ᥞhiꃰblﲂ䡲엕8߇Mã¶­0燋標æŒ-?PCwe⾕J碻Ᾱ䬈䈥뷰憵賣뵓痬+": {"aì·©v礗X⋈耓áŠfç½…é®!㔽YYᣓwæ¾33⎔芲F|\"äœT↮輦挑6ᓘL侘?ᅥ]ë†1R௯✎餘6ê½<\/௨\\?qå–·ê«j~@ulq": {"嗫欆뾔Xꆹ4H㌋Fåµ§]à Ž]ã –1ꞤT<$më«O i댳0ä²iï—Œ": {"?à·©?\u20cd슮|ꯆjs{?îž…d7?eNs⢚嫥氂䡮쎱:鑵롟2hJꎒﯭ鱢3춲亄:ë¼£v䊭諱Yj択cVmR䩃㘬T\"Ní™*ै%x^F\\_s9ë³´zz4æ·—?q": [ - null, - "?", - 2941869570821073737, - "{5{殇0ä¾ïž¢g6ë°–í‹è‡©ç¶¹R$ä–­j紋釰7î‹‘sXI繳漪행y", - false, - "aH磂?뛡#惇då©…?Fe,ì˜+늵ä˜\"3r瘆唊å‹ï¢Šj⳧࠴ꇓ<\/唕윈x⬌讣䋵%拗ᛆⰿ妴á”M2ã³—å¿…ê§‚æ·²?ゥ젯檢<8ë’ï¶MidXä’3á³»Qî”â–®ä½UT|⤪봦éâŠ", - [[{ - "颉(&뜸귙{yîš’^\"P퟉ì¶á²Ÿä®­î‹ºDé¡¡9=?}Y誱<$bë±£RvO8cH煉@tk~4ǂ⤧â©å±‹Sî›ïž¢S;J{vV#剤餓ᯅc?#a6D,s": [ - -7.8781018564821536E16, - true, - [ - -2.28770899315832371E18, - false, - -1.0863912140143876E-20, - -6282721572097446995, - 6767121921199223078, - -2545487755405567831, - false, - null, - -9065970397975641765, - [ - -5.928721243413937E-20, - {"6ì´Š\u001a홯kB0w撨燠룉{绎6⳹!í„è´‘y▾鱧ժ[;7ᨷ∀*땒䪮1x霆Hᩭ☔\"rî¹›ä7毟á°r惃3ꉭE+>僒æ¾": [ - "Ta쎩aÆt쵯ⰪVb", - [ - -5222472249213580702, - null, - -2851641861541559595, - null, - 4808804630502809099, - 5657671602244269874, - "5犲﨣4mᥣ?yf젫꾯|䋬ìž$`Iⳉﴷ扳å…,'î±c", - false, - [ - null, - { - "DyUIN쎾M仼惀⮥裎岶泭lh扠\u001e礼.tEC癯튻@_Qd4cï…«5S熯A<\/ï¼¼6U윲蹴Q=%푫汹\\\u20614b[௒Câ’¥Xe⊇囙b,ï®æœ3ss땊ë¢i~逇PA쇸1": -2.63273619193485312E17, - "Mq꺋貘k휕=nKç¡ë«žè¼©>㾆~á¼žà¡¹ê¸æ¦µlâ‹™Hw뮢帋M엳뢯î¹…vâ…ƒ^": 1877913476688465125, - "á¶´ë»—`~ç­—å…⚽টW˃â½b犳䓺Iz篤p;乨A\u20efì©?ç–Šmã€ì»©ë«¡b탔鄃ᾈV(é¢ç³=뎲ିeF仢䆡谨8t0醄7㭧瘵⻰컆r厡궥d)a阄á·Ed&c﯄伮1p": null, - "â¯w4曢\"(欷輡": "\"Má­«]䣒頳B\\燧ࠃN㡇j姈g⊸⺌忉ꡥF矉স%^", - "㣡Oᄦ昵⫮Y祎Sì級㭻撥>{I$": -378474210562741663, - "䛒掷留Q%ì“—1*1J*ë“헩ᦢ﫫哉쩧EↅIcê…¡\\?â´Šl귛顮4": false, - "寔愆샠5]ä—„IHï©¥=d﯊/å¶?ॊn%晥D視Nò—˜ˆ'᫂⚦|X쵩넽z질tsî¦kxDQ莮Aoﱻ뛓": true, - "é’£xp?&\u001e侉/yä´¼~?U篔蘚缣/î”›I畚ï—?Q绊": -3034854258736382234, - "꺲໣眀)â¿·J暘î©pИfAVì‚•ì³­Nꯗ4々'唄ⶑ伻㷯騑倭D*Okï¯ê§3bâ½_ï„¡<\/ì±£Xm톰á•䆄`*fl㭀暮滠毡?": [ - "Dç”·p`V뙸擨å¿ë¸ª9c麺`淂⢦Yw⡢+kzÜ–\fY1䬡Hæ­)ë²¾Z♤溊-혰셢?1ï”<-\u0005;æ¢Tále\\ᛵߓﭩ榩è¨-xJ;å·¡8깊è ï»“U$K": { - "Vê•¡è«…æ“W=斸s︪vﲜ츧$)iꡟ싉eî®å¯³?ጭムVથ嵬iæ¥Fg<\/Z|៪ꩆ-5'@ꃱ80!燱R쇤tç³³]罛逇dṌ֣XHiͦ{": true, - "Ya矲Cë©—Q9膲墅æºíœ»c\\ë”¶Gç””<\/.齵휴": -1.1456247877031811E-19, - "z#.OOï¿J": -8263224695871959017, - "å´_3夼ᮟ1Fë¸ë½¯á¦“é´­V豈Ь": [{ - "Nè’¬74": null, - "yuB?厅vK笗!ᔸcXQ旦컶P-ë…«mᄉ麟_": "1R@ 톘xa_|﩯é˜î¥§sæ§žd!d껀筤⬫è–焵먑D{\\ïƒïŽ¿6k共倌☀G~AS_D\"딟쬚뮥馲렓쓠攥WTMÜ­8nX㩴䕅檹E\u0007ï­¨N 2 ℆æ¶ê¥ê µï“3▙玽|ë¨_\u2048", - "æA Cä§©G": {":Mí£5e들\\ê€æ¼á”„é¸|Iï¨$)n": { - "|U䬫㟯SKV6ꛤ㗮\bn봻䲄fXT:㾯쳤'笓0b/à³¢Cì³–?2浓uO.ä°´": "à½ê¼‹e?``,ᚇæ…^8ꜙNM䂱\u0001Iá–™ê§M'vKdꌊH牮r\\O@䊷ᓵ쀆(fî »yè»i툺\"?<\/峧ࣞ⓺ᤤ쵒߯ꎺ騬?)刦\u2072læ…ªy꺜ﲖTjî’•+u", - "뽫hh䈵î”w>1â²ì­V[â…Ž\\헑벑F_ã–⠗㫇hæ½;á¿æ±°á±¼ç€–J옆9RRì…vsZ柺鶶툤r뢱橾/ꉇ囦FGm\"謗ꉦ⨶쒿⥡%]鵩#ᖣ_蹎 u5|祥?O", - null, - 2.0150326776036215E-19, - null, - true, - false, - true, - {"\faá­¶Pæ¤WWcá Ÿf뚉á¬í“—â³€Wç¹5:HXH=q7xì°™X$)모r뚥ᆟ!Jﳸf": [ - -2995806398034583407, - [ - 6441377066589744683, - "Mﶒ醹i)Gἦ廃s6몞 KJ౹礎VZ螺费힀\u0000冺업{è°¥'꡾뱻:.ꘘ굄奉攼Diá·‘Ké¶²y繈욊阓v㻘}枭캗e矮1c?íœ\"4\u0005厑莔뀾墓ë‚⽴洗ṹ䇃糞@b1\u0016즽Yè½¹", - { - "1⽕⌰鉟í”M㤭n⧴ỼD#%é˜âŠ¯ì¿¼ç¨ë¸£ëªç´§á…‡ã“•ᛖcw嬀~ഌ㖓(0r⧦Qä‘•é«à´°é“‚㓻Rå„®\"@ꇱmâˆà¯¿á¦¯é Œ8}㿹犴?xn잆꥽R": 2.07321075750427366E18, - "˳b18㗈䃟柵Z曆VTAu7+㛂cb0﯑Wp執<\/臋뭡뚋刼틮è‹ë²²î·´TLP预庰܈G\\O@VD'鱃#ä¹–ëº*鑪ꬳ?MÞždï­¹{â‡åœ¯ì‡œã¼ž顄︖Y홡g": [{ - "0a,FZ": true, - "2z̬è£î’®ê§¦é©¸\u0006L↛Ḣ4๚뿀'?lcwá„§ã®!蓚䃦-|7.飑挴.樵*+1ﮊ\u0010ꛌ%貨啺/JdM:ë˜ïˆ!FBe?鰴㨗0Oè´¢I藻ʔWAá«“Gì³›u`<\/I": [{ - "$Ï„5Vé´a뾆両環iZp頻යn븃v": -4869131188151215571, - "*즢[⦃b礞Râ—šnΰꕢH=귰燙[yc誘g䆌?ଜ臛": { - "洤湌鲒)⟻\\䥳va}PeAMnï¼®[": "ã³Éª/(軆lZR,Cpæ®È®Nå•·\"3Bå©´?i=r$펽á¤ì€¸", - "阄R4㒿㯔ڀ69ZᲦ2ç™í•Œå™—På´œîž#\\-ì­è¢›îˆµ&é‘/$4ç«¥Vê©‘_ZHAæ¾¢fZ3": {"x;P{긳:Gé–‰:9?æ´»H": [ - "繺漮6?z犞焃슳\">á»[Ⳛ䌜ë…䂹>èµâ¼¶ç…œï’˜Yæ¡¥[泥뚩MvK$4ï‰jtï¾›", - "E#갶霠좭㦻ୗ먵F+䪀oè’ba쮎4X㣵 h", - -335836610224228782, - null, - null, - [ - "r1á«©0>danjYì§¿bs{", - [ - -9.594464059325631E-23, - 1.0456894622831624E-20, - null, - 5.803973284253454E-20, - -8141787905188892123, - true, - -4735305442504973382, - 9.513150514479281E-20, - "7넳$螔忷㶪}䪪lì§´\u0007é¹Pé°šHFéŠZJﳴ/âŽ1ᷓ忉ç‡áœ‹ì“ˆxëµ mä·çª¥á”^\u0019á¶Œå­#ヂt☆áƒpáŽè‡¶äŸ±5ï‰$ä°µ&๵分ìˆ]äˆë‰â™‚åŽ\u0011<>", - "C蒑貑è—lï°°}X喇몛;të°¿O7/᯹f\u0015îµ¼kI嘦<ዴ㟮ᗎZ`GWퟩ瑹࡮ᅴB꿊칈??Ræ ¡s脚", - { - "9çµæˆ¬+AU^洘拻ቒy柭床'ç²™XG鞕᠜繀伪%]hï ¾C,$è¼™?Utä¹–Qmë–šWï¶8઼}~qâ ªrU䤶CQ痗ig@#≲t샌f㈥酧l;yé—¥ZHæ–¦e⸬]j⸗?ঢ拻퀆滌": null, - "畯}ã§¢J罚å¸VX㨑>1ꢶkT⿄蘥ã‘o|<嗸層沈挄GEOM@-äžšä§°$만峬è¼ä ±V✩5宸-æ‚î¡§D'ã—ªyP掶7bâ ŸJã•»SfP?d}v㼂á…'猘": { - "陓y잀v>╪": null, - "鬿L+7:ë‘Y=ç„ U;킻䯌잫!韎ஔ\f": { - "é§«WmGጶ": { - "\\~m6ç‹©K": -2586304199791962143, - "ႜࠀ%Í‘lâ¿…D.ç‘¢Dk%0ç´ªdḨTI픸%뗜☓s榗኉\"?V籄7w髄♲쟗翛歂E䤓皹t ?)ᄟ鬲éœ6Cî³´": { - "_ì·¤a圷1\u000eB-XOy缿請∎$`쳌eZ~æï€§íŠ»/蜞`塣৙\"⪰\"æ²’l}蕌\\ë¡ƒè«æ°Œ.望wZ|o!)Hnçqg}": null, - "kOSܧ䖨钨:಼é‰ê­O醧Sî…¨`ì‹­`ꓭì­ï¯¢N&Et㺪馻ã¢â…³ã¢ºå´¡àºŠèœšé”«\\%ahx켨|ż劻ꎄ㢄ìŸA躊᰹p譞綨Ir쿯\u0016ﵚOd럂*僨郀N*bã•·63z": { - ":Lï œ5r+T㡲": [{ - "VK泓ë²á®™Ry㓤➙Ⱗ38oi}LJቨ7Ó㹡৘*q)1豢⛃e᫛뙪壥镇æž7Gè—¯g㨛oI䄽 孂L缊ꋕ'EN`": -2148138481412096818, - "`â›á˜‘$(खꊲ⤖á„ꤒ䦦3=)]Y㢌跨NĴ驳줟秠++då­³>8ᎊ떩Eê¡£Sv룃 쯫أ?#Eî·°|á­™ãŽ?zv:5ï©^â‹‘V": [ - -1.4691944435285607E-19, - 3.4128661569395795E17, - "ãƒì´—^G9ä½­é¾¶n募8R厞eEw⺡_ㆱ%⼨D뉄퉠2ê©µá›…â³æ¿L팹Là·€n=\"æ…‰ë…á›®y>!`g!í’²î¦ï¨’[/;?[vï®ê²è»‡}⤳â¤í•∌Tã½²R홓é‰ã“¥", - "æ„°_⮹T䓒妒閤둥?0î°šaB@㈧gç„»-#~è·¬x<\/èˆPÝ„ê¡=\\׳P\u0015jᳪá¢qï‹¶;ã¯l%á­—;砢觨â–,è¬ê°Gy?躤O黩í‹Yã’a擯\n7覌똟_䔡]fJ晋IAS", - 4367930106786121250, - -4.9421193149720582E17, - null, - { - ";ᄌ똾柉곟ⰺKpá‡ä±»à¸ºä–{o~h!ï½…ê¿àª»ìš„Úš\u0002y?xUd\u207c悜ꌭ": [ - 1.6010824122815255E-19, - [ - "宨︩9앉檥pr쇷?WxLb", - "æ°‡9】J玚\u000f옛呲~ è¼ 1D嬛,î•*mW3?n휂糊γ虻*á´«ê¾ ?qîžå‡è¶—Ko↦GTé“®", - "ã¶¢ážmOã”k'诔栀Z蛟}GZé’¹D", - false, - -6.366995517736813E-20, - -4894479530745302899, - null, - "V%᫡IIç’…ï»ä…›ä“Ží’¹ï±¢/pU9seë˜ë›žx梔~C)䨧䩻蜺(g㘚R?/á»°[å¿“C뾠ࢤc왈邠买?嫥挤풜隊枕", - ",vç¢å–”㌲쟚蔚톬៓ꭶ", - 3.9625444752577524E-19, - null, - [ - "kO8란뿒䱕馔b臻âŸéš¨\"㜮鲣Yq5mí”K#ꢘug㼈á¦=P^6탲@ä§”%$CqSw铜랊0&m⟭<\/a逎ym\u0013îš¡vᯗ": true, - "æ´«`|XN뤮\u0018詞=ç´©é´˜_sX)㯅鿻á»ì‹¹": 7.168252736947373E-20, - "ꛊ饤ï´è¢(逊+~⽫얢鈮ï«è‰¬O힉7Dç­—S곯wæ“I斞᠈븘蓷x": [[[[ - -7.3136069426336952E18, - -2.13572396712722688E18, - { - "ç¡¢3㇩R:o칢行E<=\u0018á¬YuH!\u00044U%å炼2>\u001eSi$â“·ê’ˆ'ï‘¿ë ¢gᙫ番ꯒ㛹럥嶀澈v;è‘·é„•x蓎\\惩+稘Uî“´Eᖸﳊ㊈壋Nå«¿â¾æŒŽ,袯苷ኢ\\x|3c": 7540762493381776411, - "?!*^á¢çª¯?\u0001ڔꙃw虜ë³îšFgJ?&⨫*uo籤:?}ꃹ=ٴ惨瓜Z媊@ત戹ã”똩Ԛ耦Wtè½\\æž’^\\ꩵ}}}ꀣD\\]6M_⌫)Hè±£:36섘㑜": { - ";í™—á°°U஋㙛`D왔ཿЃS회çˆ\u001b-㢈`ë´†?盂㛣듿ᦾ蒽_AD~EEຆ㊋(eNwk=RÉ å³­qï’«\"5Ἠ婾^>'ls\n8QAK)- Q䲌mo펹L_îŽ¦ì¹æ¨–庫9ê©ìª¹á˜¹ä‘–ç€aK îž?*趤fë­“å»p=磕", - "î“å“‘z懅á¤-ê¹ux쀭", - [ - true, - 3998739591332339511, - "ጻ㙙?᳸aK<\/囩U`B3袗ﱱ?\"/ké”ä§2ï…¤l@쿎VZ쨎/6ꃭ脥|B?31+on颼-ê®§,O嫚m à¡­`KH葦:粘i]aSUì“™$ì‚f+詛頖b", - [{"^<9<ç®&絡;%iï«¡2攑紴\\켉hì“™-柂äšven\u20f7浯-Ꮏ\r^í›ä“ší—¬\u000e?\\ã…¡ÖºJë–·VOt": [{ - "-௄å¶k㘆í˜à®½y⎱㢬sS઄+^瞥h;á¾·jî­;抭\u0003ë°«f<\/5â°§ï§§ï¡™_朻ï—%*[-撵䷮彈-芈": { - "㩩p3篊G|å®®hz䑊oê³¥j^Co0": [ - 653239109285256503, - {"ê¶²?|\":N1Û¿æ°ƒNZ#깩:쇡o8킗ࡊ[\"ë¸Po핇1(6é°$膓}â½*)渽J'DN<ì™ê¸˜æ¯¦ë²Ysì¹–": { - "2Pr?Xjㆠ?æ®/?㓦柖馃5뚣Nᦼ|é“¢rè¡´ã©–\"ç”æ¹—Üæ†": "\"뾯ië‡ç­ç‰»$ç²/4ka $åŒíœ´ï‹è¯‘zbAá©ê‡¸ç‘…&뵲衯ꎀᆿ7@ꈋ'ᶨH@á ´l+", - "7뢽ëšv?4^ꊥ_⪛.>pởr渲<\/⢕疻c\"g䇘vU剺dஔ鮥꒚(dïŸv祴Xâ¼¹\\îºa8y5å†": true, - "o뼄Bìšžç¾hrï·”í˜ë’šâ¿›U5pꪴfg!6\\\"爑ì䢱W<ï¶•î\\í…£ç‡oI/BK뺡'谑♟[Ut븷亮g(\"t⡎有?ꬊ躺ç¿è‰©nl F⤿蠜": 1695826030502619742, - "ÛŠê¹–>ࡹ햹^ⵕ쌾BnN〳2C䌕tʬ]ì° ?ݾ2饺蹳ã¶êŒ­è¨\"â—¹á¬D鯎4e滨T輀ﵣ੃3\u20f3í‚™D瘮g\\擦+泙᧠鬹ﯨַ肋7놷郟lPå†{ß’hà§œr5,ê“‹": null, - "á¿‹N$y{}2\\N﹯ⱙK'8ɜͣwt,.钟廣䎘ꆚk媄_î­®": null, - "䎥eᾆá¦î‘§ì‰,JÞªn岪ã¥sî­•æ–謽䚔5tã¯ï–µï£šã°³ã±ŠZhD䃭f絕s鋡篟îža`Q鬃┦鸳n_é‚(E4è¿ _è§…ë·_宪D(NLî²ç–¶hL追V熑%]vè‚«=惂!㇫5⬒\u001fï²å–º4랪옑": { - "2aè¼85먙R㮧㚪Sm}E2yîŠê†£ê«¨rRymã±è†¶á”¨\\tç¶¾A☰.ç„„ë™—9<쫷챻䒵셴᭛䮜.<\/慌꽒9å»Okä°ŠZ㥪幸k": [ - null, - true, - {"쌞ì": { - "â–ŸGL K2ië›±iï¼±\"Ì .옛1X$}涺]éŽæ‡ Ú¦ëŠ·?tfçŸÝžã‚Ÿ{": 1.227740268699265E-19, - "ê’¶]퓚%ฬKâ…": [{ - "(à·›@Ç®ã£ä§¼äµ¤[aテൖvEnAdUë –ë—ˆ@볓yꈪ,mÔ´|꟢ìº(而첸죕CX4Y믅": "2⯩㳿ꢚ훀~迯?᪑\\啚;4X\u20c2è¥B箹)ä¿£eá»»w䇄", - "75༂f詳䅫ê§é¿ }3\u20b5'∓ä±è™€fè¼î‘”Iq鈆﨤gí©)BFa왢d0뮪痮Mé‹¡nw∵謊;ê§f美箈ḋ*\u001cî±ïœŸ`퇚í‹ä³«$!V#N㹲抗ⱉçŽ(V嵟ï«_bã³…\u0019": null, - "e_m@(i㜀3ꦗ䕯䭰Oc+-ë ¨0뭦⢹苿蟰ê‚SVä°­å‹¢ë¥.ྈ爑Vd,á•¥=í€)vz뱊ꈊB_6듯\"?{ã’²&㵞뵫ç–ë¡ë¯ˆ%Qwé™,?\ræž®\"? N~癃ruà¡—dn&": null, - "㉹&'Pfs䑜공j<\/?|8oc᧨L7\\pXá­ 9᪘": -2.423073789014103E18, - "ä„瑄䢸穊f盈᥸,Bî§§ë¾§í‘—íšµB1쟢f\u001f凄": "é­–âš2儉j꼂긾껢嗎0ࢇ纬xI4]ï„(à©“`蕞;픬\fC\"æ–’\")2æ«·I﹥迧", - "ퟯ詔xæ‚ë ¹+T?Bg⥄섅kOeQí¼ã»´*{Eé¼6æ°¿L缋\u001c둌๶-㥂2==-츫I즃ã ï–˜Lg踞ꙂEG貨鞠\"\u0014d'.ç¼—ï¡gI-lIb䋱ᎂDy缦?": null, - "î’¢ç´Mã¦çŠ¿w浴詟棓쵫G:äœ?V2íž½7N*n&ã–ŠNd-'ຊ?-樹DIv⊜)g䑜9뉂ㄹí‘阉~ê…쵃#R^\u000bïž®B䌎䦾]p.䀳": [{"ϒ爛\"ꄱ︗竒G䃓-î†ã¾å¸³ã‚.j)qguæ‰å¾£à¨Zé¼—A9A鸦甈!kè”å–™:3Tî†%&ã ˜+,ä·ž|ì±½v䚞문H<\/醯rì…“ã¶¾\\a볜åºzEä·_죤ဵ뿰᎟CB": [ - 6233512720017661219, - null, - -1638543730522713294, - false, - -8901187771615024724, - [ - 3891351109509829590, - true, - false, - -1.03836679125188032E18, - { - "j랎:g曞ѕᘼ}链N", - -1.1103819473845426E-19, - true, - [ - true, - null, - -7.9091791735309888E17, - true, - {"}蔰鋈+ê¨å•µ0?g*사%`J?*": [{ - "\"2wG?yn,ç™·BK\\龞䑞x?è ¢": -3.7220345009853505E-19, - ";饹়â€)çš‹`噿焒j(3â¿w>å5Xè–™å©è¿3aFÆÃ": "2,ê“´g?_섦_>Y쪥션钺;=趘F~?D㨫\bX?㹤+>/믟kᠪ멅쬂Uzỵ]$ç§`mé›ç‘Šî’ඖ鯬cꙉ梢f묛bB", - "♽n$YjKiXX*GOè´©éƒè±®ç¥´éžK醞眡}ê—¨v嵎꼷0à­¸+Mè‹eH徸Jîžê£†:â¼æ‚¥B켽迚㯃bè«‚\u000bjꠜ碱逮m8": [ - "푷᣺ﻯd8ﱖ嬇ភHîªé¹Žâ¡±á±…0g:æžœ6$GQ췎{vá·§Yy-è„•xå¹ç ¡ï¨¬â®¸Cï§‚êš=軄H犠Gè°–ES詤Zè ‚3î§™lë´Ÿhï¿’7䦹1GPQG癸숟~[#é§¥8zQ뛣J소obg,", - null, - 1513751096373485652, - null, - -6.851466660824754E-19, - {"ä©‚-â´®2Ù°K솖풄꾚ႻP앳1Hî³é·›wmR䗂皎칄?醜<\/&à §ã¬X濬䵈K`vJ륒Q/IC묛!;$vÏ‘": { - "@-êš—xྐྵ@m瘬\u0010U絨ﮌé©\\켑寛넆T=tQã­¤Lì—°@脸삯e-ï–…î–‘:⩼u㎳VQ㋱襗ຓ<Ⅶ䌸cML3+\u001e_C)r\\9+Jn\\Pﺔ8蠱檾è…Pqé³è¯î¦§Tä„I": -1.80683891195530061E18, - "á·­á‹»U~ཷsgSJ`᪅'%ã–”n5픆桪砳峣3ç®æž¾äŒ·âа呀ïŒ": { - "Ş੉䓰邟自~X耤pl7间懑徛s첦5ਕXexh⬖鎥á€nNr(J컗|ૃF\"Q겮葲놔엞^겄+㈆è¯ã€¾í¬ç´G'E?飕1fâ¼í…¬æ‚šï•¦æ³¬ë¨Uç¬í›¶Qs": false, - "î³…(\u20dag8í½íŠ£>^Y{뤋.袊䂓î†;_ïg]S\u202a꽬L;^'#î—™ë•bႌ?Cç·¡<ä²ä²æ–­ê6\u001asD7IK5Wxo8\u0006på¼Šâ¼‚ê¯æ‰µ\u0003`뵂픋%ꄰ⫙ë¶lå›å°›ïˆ®+ä—…E쟇\\": [ - true, - { - "\n鱿aKã¡â’ã¼™2ì´¹f;`ì¾qIà¡”G}ã·äç“°w늮*ç²…9뒪ㄊCj倡翑閳R渚MiUO~仨䜶RꙀA僈㉋⦋n{ã–¥0딿벑î§é€¦â¥»0î¾®h薓쯴ê»": [ - 5188716534221998369, - 2579413015347802508, - 9.010794400256652E-21, - -6.5327297761238093E17, - 1.11635352494065523E18, - -6656281618760253655, - { - "": ")?", - "TWKLꑙ裑꺔UE俸塑炌Ũ᜕-ï’‚o\"徚#": {"M/癟6!oI51niíš=댡>xê¨\u0004 ?": { - "çš­": {"⢫䋖>u%wî²´ìž¼<ä•ê˜P䋵$é­‹æ‹U䮎緧皇Y훂&|羋ꋕ잿cJ䨈跓齳5\u001a삱籷I꿾뤔S8㌷繖_Yឯ䲱B턼Oæ­µF\\l醴o_欬6ç±=D": [ - false, - true, - {"Mt|êžD|Fê¶£MQ뵕T,ëºk+?ãµi": [ - 7828094884540988137, - false, - { - "!༦鯠,&aﳑ>[euJê½ç¶·æB.h": -7648546591767075632, - "-n켧嘰{7æŒæ¯„Y,>â螵煫乌pv醑Qå¶š!|âŒè²¬0왾ë¢ê…蛨S\\)ç«°'舓Q}A釡5#v": 3344849660672723988, - "8é–ªéºV=鈢1녈幬6棉⪮둌\u207d᚛驉ꛃ'r䆉æƒà¥ˆ|bἧﺢᒙ<=穊强s혧eꮿ慩⌡ \\æ§³W븧J檀C,ᘉì˜0俯퀉M;筷ࣴ瓿{늊埂鄧_4æ¸Nn阼Jੵ˥(社": true, - "oë¼€vwï…®)4A뢵(î¼±a䵢)p姃뛸\u000fK#KiQp\u0005ê…芅ì…îª": null, - "ç ¥$ꥸ┇耽uæ–®Gc{z빔깎밇\\숰\u001eê´·å„㶇쵿_á´„+hç©¢p촀Ნ䃬zäé…³Ó‚31xꔄ1_ç šWë ˜G#2葊P ": [ - -3709692921720865059, - null, - [ - 6669892810652602379, - -135535375466621127, - "뎴iO}Z? 馢녱稹ᄾä©rSt帤넆&7ié¨ë©—ç•–ï”9誧鄜'w{Ͻ^2窭외b㑎粖i矪ꦨ탪跣)KEㆹ\u0015V8[W?⽉>'kc$䨘ᮛ뉻٬M5", - 1.10439588726055846E18, - false, - -4349729830749729097, - null, - [ - false, - "_è ¢ã ^䟪/D녒㡋ỎCä’ˆíŒïŒ¢\u0006àªq@O펢%;é¹ìŒo戥~A[ꡉ濽ỳ&虃᩾è£å”™ï¤£èŒ¨Ig楡꒻M窓冉?", - true, - 2.17220752996421728E17, - -5079714907315156164, - -9.960375974658589E-20, - "ᾎ戞༒", - true, - false, - [[ - "ⶉᖌX⧕홇)g엃⹪xëšç™Ÿ\u0002", - -5185853871623955469, - { - "L㜤9ợㇶKé°â‹“V뽋˖!æ–«as|9"á¬ä†ª?î¾¶7胜&n薑~": -2.11545634977136992E17, - "O8뀩D}캖qè‚6༣ã—䈓煮å½à¨†á޼Dᣘí›;": false, - "YTá¡…^ï—Lã—ŽcbY$pᣞ縿#fh!ꘂb삵玊颟샞ဢ$ä—é¼’ëª~rkH^:닮먖츸륈⪺쒉砉?㙓扫㆕꣒`R䢱Bé…‚?C뇞<5Iޚ讳騕S瞦z": null, - "\\RB?`mG댵鉡å¹ç‰©äµŽæœ‰5*e骄T㌓ᛪç¾é§’Ku\u001a[柆jUq8⋈5鿋츿myï»—?é›ux঴?": 5828963951918205428, - "n0æ™…:黯 î¶·xu씪^퓞cB㎊á¬âº˜Ù¤Öƒ~B岚3㥕擄vᲂ~F?Cä¶–@$mï›~å¿”S왖㲚?챴⊟W#벌{'ã°Iä ç¸s樘\\X뢻9í•¡I6èㄛî‚î«8쯶]wॽ0L\"q": null, - "x增줖j⦦tä¢áŽ™ïŠ­ã›¿Yf鼘~ê«“æ„4惊\u209c": "oOhbᤃ᛽z&Bi犑\\3B㩬劇䄑oÅ쨅孥ë©àº–acA㖫借ãžvg싰샂ãœ#譞⢤@k]鋰嘘䜾L熶塥_<\/â¾å±ˆï®Š_mYè¹t뙺}Ox=wé®®4S1ê©ï¬¾'å·‘", - "㗓蟵ꂾe蠅匳(JPä—à·¸\u0089耀왲": [{ - "ᤃ㵥韎뤽\r?挥O쯡⇔㞚3ä¼–\u0005Pî•⋪\"Dê¶£QLn(⚘罩䩢Ŏv䤘尗뼤ë›O淽鋋î¡é—šrå´©a{4ç®™{煷m6〈": { - "l곺1L": { - "T'ਤ?ç …|੬Km]ä„©\"(à¿¶<\/6U爢䫈倔郴l2ã´±^줣k'Læµ–Lé°„Rp今鎗⒗Cì–¨Mí›ã¡§Î˜X粜뫈N꤇輊㌻켑#㮮샶-ä—룲è ç™œã±V>=\\I尬癤t=": 7648082845323511446, - "鋞EP:<\/_`á§e混ㇹBd⯢㮂驋\\q碽饩跓྿ᴜ+j箿ë ã—‘yK毢宸p謹h䦹乕U媣\\炤": [[ - "3", - [ - true, - 3.4058271399411134E-20, - true, - "æ€+憱f逮@먻BpW曉\u001aã£âŽŠ$n劈D枤㡞좾\u001aá›ïŒƒè‹”౩é—1B䷒Ṋ݋âžê€žêƒç£$t੤_:蘺⮼(#N", - 697483894874368636, - [ - "vᘯ锴)0訶}䳅⩚0O壱韈ߜ\u0018*Ué¾ä–=䧉뽑å•휻ID쿇嘗?ꌸῬ07", - -5.4858784319382006E18, - 7.5467775182251151E18, - -8911128589670029195, - -7531052386005780140, - null, - [ - null, - true, - [[{ - "1欯twG<\/ï†Q:0怯押殃탷è«ì‚¬<ỗꕧ蚨ä¡ï¨î³‰nDꌕ\u001cë…¬~蓩鲃g儊>ê¡l㻿/â‘·*ì±³6㻜W毤緛ﹺᨪ4\u0013뺚J髬e3쳸䘦伧?æª&{L掾p+꬜MäŠd娘6": { - "2p첼양棜h䜢﮶aQ*c扦v︥뮓kC寵횂S銩&Ç{O*य़iH`Uí…à¡“rä©•5ꄸ?`\\á§«?ᮼ?t〟崾훈kè–ì/iy꤃뵰z1<\/AQ#ë¿©8jJ1z@u䕥": 1.82135747285215155E18, - "ZdN &=dë…„á…†'ì‘â…‰:烋5&áŸï”‹á„‚汎æ¥L㯄固{é’§u\\ãŠíŠšeæ‘‘&tå—„ê–„UbâŒ?m䴘熚9EW": [{ - "ଛ{i*a(": -8.0314147546006822E17, - "⫾ꃆY\u000e+W`௸ \"Më’¶+\\ë·lKE}(NTí‚¶Yjé¸ç¯’î©¥ì¶'jNQ硾(똡\\\"逌â´y? IRꜘ὞鄬﨧:M\\fâ ‹Cꚜ쫊ᚴNV^Dä•—ã…–á¼”Iao꿬Câ8": [ - 287156137829026547, - { - "H丞N逕⯲": {"": { - "7-;枮阕梒9á‘„Z": [[[[ - null, - { - "": [[[[ - -7.365909561486078E-19, - 2948694324944243408, - null, - [ - true, - "荒\"并孷䂡쵼9o䀘F\u0002龬7⮹Wz%厖/*? a*R枈㌦ë¾g뒠䤈q딄㺿$쮸tᶎ릑弣^éŽ<\/Y鷇驜L鿽<\/ì¶‹9Mᲆឨ^<\/庲3'lë‚¢", - "c鮦\u001bë‘\\~?眾ಢu݆綑෪蘛轋◜gȃ<\/â´ƒcpkDt誩܅\"Y", - [[ - null, - null, - [ - 3113744396744005402, - true, - "v(y", - { - "AQ幆h쾜O+꺷铀ꛉ練A蚗⼺螔jãŒ3꽂楎䥯뎸먩?": null, - "蠗渗izé±–w]擪E": 1.2927828494783804E-17, - "튷|䀭n*曎b✿~æ¤U]î­¡Gz鄭kW|ã´š#㟗ഠ8u擨": [[ - true, - null, - null, - {"⾪壯톽g7?㥜ώQê‘㦀æƒã§½î“¡ä¼“\\î¦*᧰閖樧뢇赸N휶䎈pIæ°‡ï®é•Šmaᬠ탷#X?î³A+kÐM ༑᩟Ø?5꧎鰜ṚY즫궔 =ঈî³;ﳈ?*s|켦蜌wM笙莔": [ - null, - -3808207793125626469, - [ - -469910450345251234, - 7852761921290328872, - -2.7979740127017492E18, - 1.4458504352519893E-20, - true, - "㽙깹?ë¨ä†¢:ä´ŽÛ»gæ® JBTU⇞}ꄹꗣi#Iî’¡ëµ£é‰r혯~脀ìƒ#釯:场:ä”>ä°®o'ã¼½HZ擓௧nd", - [ - 974441101787238751, - null, - -2.1647718292441327E-19, - 1.03602824249831488E18, - [ - null, - 1.0311977941822604E-17, - false, - true, - { - "": -3.7019778830816707E18, - "Eå³¾æ†èŒ6xLIm縂0n2视֯J-ᤜz+ᨣè·mYDè±ç¹¹â¹ºäŠ“ëª“ï´€E(@è©®(!ï’Y膽#᎙2䟓섣A䈀㟎,囪QbKæ’wcG湎ꤧtGì—xâ¥ä¿Žj'A一ᯥ뛙6ㅑ鬀": 8999803005418087004, - "よ殳\\zDâ§…%Y泥簳Uꈩ*wîRL{3#3FYHା[d岀䉯T稉駅䞘礄P:é—ˆWæ€ElBã¤å–¬èµ”bGä ¼U଄Nw鰯闀楈ePsDꥷ꭬⊊": [ - 6.77723657904486E-20, - null, - [ - "ཚ_뷎꾑è¹q'㾱ꂓ钚蘞慵렜떆`ⴹ⎼櫯]J?[t9Ⓢ !컶躔I᮸uz>3aã •i,錃L$æ°°í…°@7ë…«W㸮?ç¾§W뇧ꃞ,î—‘N鋮숪2ɼì½â”ä²6", - "&y?뢶=킕올Za惻HZk>c\u20b58i?ꦶcfBv잉ETî…9jä¡¡", - "imçŠÕƒbì¹§æ ¡\\뼾쯀", - 9.555715121193197E-20, - true, - { - "<㫚v6腓㨭e1ã•”&&V∌ᗈT奄5Lጥ>탤?튣瑦㳆ꉰ!(ᙪ㿬擇_n쌯IMá¿‹î£ã•¨â°æ«ˆá±·5풔蟹&L.ì²½e鰷쯃劼﫭b#ï­¶í“€7ë·„Wr㢈๧Tʴશ㶑澕é%": -1810142373373748101, - "fg晌o?߲ꗄ;>C>?=鑰監侯Ktêµ…": true, - "䫡蓺ꑷ]C蒹㦘\"1à°ƒ@å‘«\u0014NLä¾egå‘®á³,r$裢k>/\\?ㄤᇰﻛ쉕1஥'ÄŠ\" \\_?쨔\"ʾr: 9Sä˜ç¦ºáª§ê„‚㲄", - [[{ - "*ç¡™^+E쌺I1䀖ju?:⦈Ꞓl๴竣迃xKC/饉:\fl\"XTFᄄ蟭,芢<\/骡軺ëœhê˜\u001f銿<棔햳▨(궆*=ä¹¥b8\\媦ä·€ë«}닶ꇭ(Kej䤑M": [{ - "1á¬?>옿Iâ•…C<ÞŽ?ꊌ冉SV5A㢊㶆z-๎玶绢2F뵨@㉌뀌oå¶”f9-庒茪ç“ë·³4": null, - ";lá°³": "CbB+è‚»aä„·è‹*/볳+/4fq=ã°h6瘉샴4é“¢Yéª.⌖@哼猎㦞+'gꋸ㒕ߤï—ãž‘(ä¶’è·²tiâ‘´aî¥ç¡‚#Noë³”", - "t?/jE幸YHT셵⩎Kî¹!Eq糦ꗣv刴w\"l$ο:=6:ç§»": { - "z]鑪醊嫗J-Xm銌ç¿çµ¨c里ëç‚™Ep㣋é£ë˜¼åšŒä€“GPï¹–cmf4é¹­T䅿꣭姧â¸wy6ꦶ;S&(}ᎧKxᾂQ|tï¹ë»³k\"d6\"|Mlì·†hwLtê¼¼4$&8Պ褵婶鯀9": {"嵃닢ᒯ'î–›dá§«ä³³#Nî‡Xe3-붋鸿î¢à¬¢ë–“î§ž%dK\u0013䲎ê–YV.裸Râ‰rR3蟛\\:ì ¯:å—ĺLʆ넕>|텩鴷矔ꋅⒹ{tå­¶ã“‘4_": [ - true, - null, - [ - false, - "l怨콈lá’", - { - "0wä²å¬§-:`䉅쉇漧\\Ü‚yㄨb%㽄j7ᦶ涶<": 3.7899452730383747E-19, - "ꯛTẀq纤qå¶Vâ¿£?\"g}ი艹(쥯B î­T騠I=仵ë°X": {"KX6颠+&á…ƒ^fç•’y[": { - "H?뱜^?꤂-⦲1a㋞&î‘®êƒç²¾Ii᤾챪咽쬘唂쫷<땡劈훫놡o㥂\\ Kâ´™Dç§¼Fæ°®[{'좴:례晰Iq+Iì­¥_T綺砸GOç…䟪ᚪ`î‘↹l羉qì¼Dê½áœ…훦: vUV": true, - "u^yï³0㱓#[y뜌앸ꊬLã·©?蕶蘾â»KӼ": -7931695755102841701, - "䤬轉車>\u001c鴵惋\"$쯃྆⇻në½€Gæ° Såª]à²²ê¨æ‡Qxኻ椕駔\\9ࣼ﫻ìœç£¡ï©ˆëºªá¶šë³l㕆t+sζ": [[[ - true, - false, - [ - null, - 3363739578828074923, - true, - { - "\"鸣詩 î›ë³°ã‘µgLã¯¦á¿…ì¶æ—«}ED辗ﮈI쀤-ꧤ|ã ¦Z\"娑ᕸ4çˆé¨ã£\"]ì³Af]茛⬻싦oèšk䢯ä©è½3廇喑ޅ": 4.5017999150704666E17, - "TYႇ7ʠ值4챳唤~Zo&Ý›": false, - "`å¡„J袛㭆ëºã³€N㺣`ê½å¶¥Kï¯SVᶔ∲퀠ç¾N딂X\"á¤hNﬨvI": {"\u20bbã­˜I䖵䰼?sw䂷쇪]î(泒f\"~;꼪FÔsá¦": {"p,'ꉂ軿=Aèš¶?bƉãµä…°è«¬'LYKL6B깯⋩겦뎙(ᜭ\u0006噣d꾆㗼Z;ä„äš”cd<情@äž‚3苼㸲U{)<6&ꩻ钛\u001au〷N숨囖愙j=BXWìš•^x芜å á¿™çˆ‚ë›·ê’»t✘Q\b": [[ - "ç±›&ଃ䩹.ꃩ㦔\\C颫#暪&!勹ꇶ놽攺J堬镙~軌C'꾖䣹㮅ï¶å²ƒá™´éµ£", - 4.317829988264744E15, - 6.013585322002147E-20, - false, - true, - null, - null, - -3.084633632357326E-20, - false, - null, - { - "\"짫愔昻 Xï«\"è—£j\"\"ë¨à½…ѻ㘤㬯0晲DU꟒㸃dë²€î¢ìœ’l䦾cà©»*3": null, - "è°ˆWm陧阦咟ฯ歖擓Nå–´ã‹éŠ­rCCnVࢥ^♼Ⅾ젲씗刊Sà¼+_tèµ”\\bäšë‰¨ê¬«6펛cL䊘᜼<\/澤pF懽&H": [ - null, - { - "W\"HDUuΌ퀟M'P4à¿°H똆ⰱﮯ<\/å‡è˜²\"C鴫ﭒж}ꭩ쥾t5yd诪ﮡí‰â´°@?æ°é†³rj4I6Qt": 6.9090159359219891E17, - "絛ﳛ⺂": {"è«°Pã—®î˜è¦`ZQ?ꫦh*à´±cbâ§±}埌茥h{棩렛툽o3é’›5é®l7Q榛6_g)ὄ\u0013kj뤬^爖eO4Ⱈ槞鉨ͺ订%qX0Tì—å«·$?\\\"봅늆'%": [ - -2.348150870600346E-19, - [[ - true, - -6619392047819511778, - false, - [[ - -1.2929189982356161E-20, - 1.7417192219309838E-19, - {"?åµ²2à¿2\u0001啑㷳c縯": [ - null, - [ - false, - true, - 2578060295690793218, - { - "?\"殃呎ïˆ#ã‘‘F": true, - "}F炊_æ®›oU헢兔êˆ,èµ­9703.Bæ•°gTz3â¬": { - "5&t3,í–“Mݸᵣ㴵;꣫ä©â†³#ï¢@ë«·ä …ï¦+W-ࣇzᓃ鿕ಔ梭?T䮑ꥬ旴]u뫵막bBè®:왳둛lEh=숾鱠på’î›î­ˆ$ì§#?gâ¹·á—Švã·µ.æ–ˆu頻\u0018-G.": "ë½™m-ouࣤ஫牷\"`Ksꕞ筼3HlȨvCï¢î›¦å ˆ\"I]㖡玎r먞#'W賜鴇k'c룼髋䆿飉㗆xgå·¤9;芔cáŒ/ax䊨♢í“rå“㸫೼䢗da᩾\"]å±£`", - ":M딪<䢥喠\u0013ã–…x9è•ã‘‚XO]f*Q呰瞊å­VP@9,㨣 D\\穎vˤƩs㜂-曱唅L걬/롬j㈹EB8g<\/ì„©o渀\"u0y&룣": ">æ°ç·©L/ä•‘ë¯êŸ˜îŸ”蕞^aBë’£+0jK⪄瑨痜LXK^힦1qK{æ·št츔X:Vm{2rçB뾄H첚7æ°¥?쉟䨗ꠂv팳圎è¸é½€\\", - "D彤5㢷Gꪻ[lㄆ@὜⓰絳[ଃç½ì®¹â˜’[*0ꑚ㜳": 9022717159376231865, - "Ò–aV銣tW+$é­¿\u20c3ïœäºœ~ë«¡ᙰ禿쨽ã¡fá¹¼zE/h": "5è‡ï’Œã‹‡á²¯ì®º? 昨탰Wム밎#'\"崲钅U?幫뺀â¾@4kh>騧\\0Ò¾EV=çˆî©®ÍŒUæ€%ꉼ 㮋<{j]{R>:gÔ©L\u001c瀈锌ﯲﳡꚒ'â«¿E4æšãŒ—뵉X\"Háœ", - "ᱚגּ;s醒}çŠSἿ㦣&{T$jkB\\\tḮ앾䤹o<é¿(tW": "vb⯽䴪䮢@|)", - "⥒í껉%惀뗌+녣迺顀qæ¢g⚯i⤭ë£Mç¹j̈́⽜A": -8385214638503106917, - "逨ꊶZ<\/W⫟솪㎮ᘇb?ê ”i\"H㧺x෷韒Xꫨฟ|]窽\u001a熑}Agn?Má¶–a9韲4$3á»´^=ì煤áë·2䣃%ï…Žé· /eQ9頸쥎", - 2398360204813891033, - false, - 3.2658897259932633E-19, - null, - "?ꚃ8Nnãž·å¹µd䲳䱲뀙ꪛQ瑓鎴]î’¶ä©‹-é°¾æ¡ï¾ä³¡??掊", - false, - -1309779089385483661, - "ᦲxu_/yecR.6èŠ.áœ‡éŽ ~", - -5658779764160586501, - "ì’Œ:æ› =lìœä¢œwk#s蕚\"互㮉m䉤~0ë“䋙#Gîš¿;h숄옥顇෤勹(C7㢅雚ã¯Lâ …VVç°…<", - null, - -4.664877097240962E18, - -4.1931322262828017E18, - { - ",": { - "v㮟麑䄠뤵g{Më®.\u001bzt뢜뵡0Ǥ龍떟Ᾰ怷ϓRT@Lꀌ樂Uã â¾•e扉|bJg(뵒㠶唺~ꂿ(땉x⻫싉ìŠ;%0鎻V(o\f,NéŠ%nk郼螺": -1.73631993428376141E18, - "쟧摑繮Q@Rᕾ㭚㾣4隅待㓎3è’Ÿ": [ - 4971487283312058201, - 8973067552274458613, - { - "`aæ™á£—î\u0015iBo¸": 4.3236479112537999E18, - "HW&퉡ãåœïŸ†Y?ç‘¡Qyí›q!帰ï©s舠㫸zêš—aSæ­²v`G株巷Jp6킼 (ê·¶é”â¾î‹¥â¡ˆ>Mæ±ãžá‰´ê™²dv@i㳓ᇆ?é»": [ - null, - 4997607199327183467, - "E㻎蠫á¾é«˜ä™Ÿè˜¬æ´¼æ—¾ï« í…›ã‡›?'M$㣒蔸=A_亀绉앭rN帮", - null, - [{ - "Eᑞ)8餧A5u&ã—¾q?": [ - -1.969987519306507E-19, - null, - [ - 3.42437673373841E-20, - true, - "eê±·Må¢\"割Pâ›í§åŽ€R䱜3ï»´Oí“«r﹉⹊", - [ - -8164221302779285367, - [ - true, - null, - "爘y^-î¬?蘞Ⲽꪓaâ…ê¨}I", - 1.4645984996724427E-19, - [{ - "tY좗⧑mrzïºã¿¥â´–᥷jè«…\u0000q賋è­êž„â®±S\nà¡£B/íƒêµª3ZÉ‘å¤o<\/;ë¡‹": null, - "彟hæµ _|V4䦭Dᙣ♞uì¿»=ì‚®ã¦\u001e哀鬌": [{"6횣楠,qʎꗇ鎆빙]ã±­R굋鈌%æ ²j分僅ペ䇰wí¦î¼‹p蛃N溈ê¡ê€?@(GI뉬$ﮄ9èªê“š2e甸ڋ[äº,\u0011\u001cࢃ=\\+衪䷨ᯕ鬸K": [[ - "ㅩ拏鈩勥\u000etgWVî–¨Xs陂è¦p狵w퓼{뮵_i\u0002ퟑႢâ¬d6é‹«F~챿æŸ\u0096äš¼1ۼ칥0꣯å„=鋷牋ⅈêžé¾", - -7283717290969427831, - true, - [ - 4911644391234541055, - { - "Iî¹éˆ’ì²½P릜朸W徨觘-HᎄíŸâ“º>8kr1{ê²µäƒã€›á¬¡Ì¨Oê·‘oä•'쿡鉕p5": "fvç²–RNçž–è›a?q꤄\u001d⸥}'ꣴ犿ꦼ?뤋?鵆쥴ë‹ä¡«s矷̄?à¶£/;괱絢oWfV<\/\u202cC,ã–¦0䑾%nè³¹g&T;|lj_欂N4w", - "짨䠗;䌕u i+rà¹0": [{"9ä¥\\à°©8\"馇z䇔<\/á‚¡Y3e狚ì¡\"ุ6ï°†Zé–c\"Ll:ïŠê®¾ç–£<\/᭙O◌납୕湞9⡳Und㫜\u0018^4pj1;ä§å„‚ä—·à­—>@e톬": { - "aâ‘‚Fé‹»Qèž°'<퇽Qè´ç€§{ᘪ,cP&~䮃Z?gI彃": [ - -1.69158726118025933E18, - [ - "ê¶‚z簽㔛㮨瘥⤜䛖Gℤ逆Y⪾j08î±²Sn昞ꘔ캻禀鴚P謦b{ê“®mNéMᥙ5\"ç2냑I\u0011.L&=?6á„ ë»·X鸌t刑\"#z)o꫚n쳟줋", - null, - 7517598198523963704, - "ኑQp襟`uá©„ræ–¹]*F48ꔵn俺ሙ9뇒", - null, - null, - 6645782462773449868, - 1219168146640438184, - null, - { - ")ယ넌竀Sdä°¾zqâ«£âŒÊ¥\u0010á¿“' |磪&p牢蔑mï³V蘸૰짬꺵;K": [ - -7.539062290108008E-20, - [ - true, - false, - null, - true, - 6574577753576444630, - [[ - 1.2760162530699766E-19, - [ - null, - [ - "顊\\憎zXB,", - [{ - "㇆{CVC9ï¼MN㜋ઘR눽#{h@ퟨ!鼚׼XOvXS\u0017á£=cS+梽៲綆16së½íœy屬?ᇳG2á´­\u00054쫖y룇nKcW̭炦s/鰘ᬽ?J|퓀髣n勌\u0010í™ P>j": false, - "ç®´": [ - false, - "éžj\"ꮾ*엇칬瘫xṬ⭽ì©äƒ³\"-⋵?ᦽ댎Ĝ": true, - "Pg帯佃籛n㔠⭹࠳ë·â‰»à¿Ÿ3ãž±ï“!î—-ì’¾!}쭪䃕!籿næ¶»J5ਲ਼yî˜vy;Rኂ%ᔡጀ裃;M⣼)쵂쑈": 1.80447711803435366E18, - "ꈑC⡂ᑆ㤉壂뎃Xub<\/쀆༈憓قì¨×§\\": [ - 7706977185172797197, - {"": {"K╥踮砆NWࡆFy韣7ä밥{|紒︧䃀榫rᩛꦡTSy잺iH8}ퟴ,M?Ʂ勺ᴹ@T@~꾂=I㙕뾰_涀쑜嫴曣8IY?Ò¿o줫fऒ}\\S\"ᦨ뵼#nDX": { - "♘k6?଱癫d68?㽚乳䬳-Vé¡·\u0005è•?\u0018䞊V{邾zã˜l]é›k臤~ൖHë’iꢥ]g?.G碄懺䔛pR$ä…’X觨lë´œA刊8R梒',}u邩퉕?;91Eî¦a䈈ë¯G⊶芔h袪&廣㺄j;ã¡ç¶½\u001bN頸쳘橆": -2272208444812560733, - "æ‹‘Wﵚî²j鵼駳Oࣿ)#ã¾…é¡‚N傓çºy僱栜'Bê-!KF*ꭇK¦?䈴^:啤wG逭w᧯": "xᣱmYe1Û@霄F$ě꧘푫O䤕í€Pq52憬ꀜ兴㑗ᡚ?ï—ƒLé·íŸî—¼ë­zJê‘™}╆ᅨJB]\"袌㺲u8䯆f", - "꿽á…㔂긱Ǧ?SI": -1669030251960539193, - "ì‡É¨`!葎>瞺瘡驷錶â¤ï»®é…œ=": -6961311505642101651, - "?f7♄꫄Jᡔ훮eì‡îª¼í¾á£ä­´KhखT;Qty}O\\|ë«Iá¿’Ne(5æƒê¥¶ã†·Y9ﮡ\\ oyâ­–-䆩å©m#xë´‰>Y鈕Eç–£s驇↙ᙰm<": {"퉻:dê‚&efᅫ쫢[ï„™\"ëˆëŠ–êº™|Ôå‰1Í–-K:Êšá­•/;ì–㷛]Iç—èŒ4gZ4âœkเꛘZ⥺\\Bʫᇩ鄨魢弞&幟ᓮ2̊盜", - -9006004849098116748, - -3118404930403695681, - { - "_彃Y艘-\"Xx㤩㳷瑃?%2ä¡éµ›o귵옔夘v*탋èŒ&㳈챗|Oé’§": [ - false, - "daꧺdᗹ羞쯧Hã¤é„³é ³<型孒ン냆㹀f4ã¹°\u000f|C*ሟ鰠(O<ꨭ峹ipຠ*yà³§4VQè””hVæ·¬{?ᵌEfrI_", - "j;ꗣ밷é‚副]á—“", - -4299029053086432759, - -5610837526958786727, - [ - null, - [ - -1.3958390678662759E-19, - { - "lh좈T_ë¯Y\"伨\u001cꔌG爔겕ꫳ晚è¸â¿»ìT䯎]~e#฽燇\"5hٔ嶰`泯r;ᗜ쮪Q):/tç­‘,榄&5ï¤ëŽ«ç‹(": [{ - "2áâ“›]r3C攟וּ9è³µsâ›”6'ஂ|\"ⵈ鶆ä¹ç¦3\"痰ࢤéœäµ©ì˜†äŒ€?æ •r7Oç°‚Isd?K᫜`^è®¶}zî°’8?zì–°î§T:X倫⨎ꑹ": -6731128077618251511, - "|︦僰~m漿햭\\Y1'Vvخ굇á‰ì±¢cè¶–": [null] - }], - "虌魿閆5⛔煊뎰㞤ᗴꥰF䮥蘦䂪樳-Ká·-(^\u20dd_": 2.11318679791770592E17 - } - ] - ] - ]}, - "묗E䀳㧯᳀逞GMc\bï•¹å¢¹ã“„ë–Æ &U??íŽŒé‘ åª‹k))ᄊ": null, - "묥7콽벼諌J_DɯﮪMæ®´ä£,煚ྼ`Y:ì”§<\/â©«%yf䦀!1á²¶kì¶ŽQç±³W∠WC跉鬽*á›±iã´•L꘻ê€ì“ª\"_gé¿„'#tâ½™?,Wg㥖|D鑆eâ¥ìª¸åƒ¬h鯔咼ඡ;4TKèŽî¾‘졠嫞" - } - ] - ] - } - ] - ] - ]}} - } - ]} - }, - "뿋뀾淣截䔲踀&XJ펖꙯^Xb訅ꫥgá¬>棟S\"혧騾밫ê²7-": "擹8C憎W\"ìµ®yR뢩浗絆䠣簿9äˆå¼•Wcy䤶孖ꯥïž;íŒ]輩ä3@{å 뽸0ï€á¡ˆìµ¡î›„Ⲇ\u001dLåŒê§2F~ݕ㪂@W^é½L襒ᦘî¢~沦zZ棸!꒲栬R" - } - ] - ], - "Z:ëƒàµ›5Iz찇䅄駠㭧蓡K1": "e8᧤좱U%?ⵇ䯿é¿\u0013縮R∱骒EO\u000fg?幤îš@֗퉙vU`", - "äƒìªˆï‘’埽້=Ij,쭗쓇చ": false - }]}} - ] - } - ]} - } - ] - ] - ], - "咰긖VM]á¼6䓑쇎çºetDÒŒ?ãžê©„퇫밉gj8è ƒ\"â©5䛹1ࣚ㵪": "ക蹊?⎲⧘⾚̀I#\"䈈⦞ë·`wo窭戕෱휾䃼)앷嵃꾞稧,Ⴆ윧9S?೗EMk3Მ3+e{â¹”Te驨7äµ’?타Ulg悳o43ï“¢" - } - ], - "zQᤚ纂땺6#ٽ﹧vï¿¿#ࠫ휊冟蹧텈ꃊʆ?&a䥯Deæ½|ì¿“pt瓞㭻啹^盚2êŠf醪,ì–T窧\\Di䕎谄nn父ꋊE": -2914269627845628872, - "䉩è·|㨻ᷢã‰B{蓧瞸`î°²I!℄욃힕#ೲᙾ竛ᔺCjk췒늕貭è¯\u0017署?W딚%(pê⤼ë³^=on뺲l䆼bzrﳨ[&j狸䠠=ᜑꦦ\u2061Õµnj=牲攑)Mî»\\é¾": false, - "뎕y絬᫡⥮Ϙᯑ㌔/NF*Ë“.ïž¿,QEzvK!Iwz?|쥾\"ê©»Lê¼—Bê”§è³´ç·œs뉣隤茛>ロ?(?^îµ­`>冺飒=噸泥⺭Ᲊ婓鎔븜z^å·è£®Ãªâ“…à»—jM7ﶕ找\\O": 1.376745434746303E-19 - }, - "ä›ræ»–wã¤,|Nዜ": false - } - ]], - "@ê¿™?è–•å°¬ gd晆(ë„5躕ﻫS蔺4)떒錸ç“?~": 1665108992286702624, - "wë¯ná =`঺ᅥC>'從ë槷ä¤çœ·èž„ãŽ»æ°æ‰°XᅧCè´½uáƒë‚ŸjKD03T!lDV쀉Ӊy뢖,袛!终캨G?鉮Q)â‘—1쾅庅O4ê‰H7?d\u0010蠈줘월Þ粯Q!낇껉6í…|{": null, - "~Ë·jg쿤촖쉯y": -5.5527605669177098E18, - "펅Wᶺzê†ã¨í‘­e?4j仪열[D<鈑皶婆䵽ehS?袪;Hê¨Më—Žã°[(å—M3qíŸg4y╸鰧茀[Bi盤~ï«å”Žé‹†å½ºî½«â¦Šq?î–³B4쉓癚O洙킋툈䶯_?ퟲ": null - } - ] - ]] - ]], - "꟱Ԕã¤7æ›ï¦—ಃéŒVä·°?v㪃૦~K\"$%请|ꇹn\"kä«›ã¨é²¨\u2023ä„¢\u0004[︊Vï‹•J?䶟ាꮈ䗱=깘U빩": -4863152493797013264 - } - ]}]} - ] - }}} - ], - "ì·ì²Û¹í‰ƒ~aEå”™a챑,9㮹gLHd'ä”|í‚—ãžäŽ¥&KZYTë§µ7䥺Nâ±³åŒèŽžé¿§w\\༌疣n/+ꎥU\"å°ëž¾â—‹íŸ™AJá­Œ?9ä›$?é©”9è®ì§˜é­¡TÖ¯cè—³`虉Cì‡ì¦T" - } - ], - "è°¶ê°œgTRï¿>áµÍšdtæ™‘ä‰‡é™æ»º}9㉸P漄": -3350307268584339381 - }] - ] - ] - ]] - ] - ], - "0y꟭馋X뱔瑇:䌚ï¿å»¿jîžg-懲鸭䷭垤㒬茭u賚찶ಽ+\\mT땱\u20821殑ã„J쩩䭛ꬿNSæ½”*d\\X,壠뒦e殟%LxG9:摸": 3737064585881894882, - "í’µO^-â§§â…¶vѪ8廸鉵㈉רâ†Q㿴뺟EႳvNM:磇>wî·/៻唎뷭୥!냹D䯙iëµ±è²C#⼉NH6`柴ʗ#\\!2ä‚—â±§f?諳.Pëˆ-è¿”I꘶6?8î“ê˜": -8934657287877777844, - "溎-è˜å¯ƒi诖ര\"æ±µ\"\ftl,?d⼡쾪⺋h匱[,à·©I8MÒ§F{kç“¿PAî…§'橸ꩯ綷퉲翓": null - } - ] - ], - "ោ係Øî½<å…ƒ": 1.7926963090826924E-18 - }}] - } - ] - ]]}] - }] - ] - ] - ] - ], - "ጩV<\"Ú¸sOᤘ": 2.0527167903723048E-19 - }] - ]} - ] - ]], - "∳㙰3ì ´pá§—ä±™?`yZA8Ez0,^á™›4_0븢\u001ft:~䎼s.bb룦明yNP8弆Cå¯;⪾ì§'蕴뮛": -6976654157771105701, - "íµê¦€\\㇑:nî‹™v+뒤燻䀪ﴣï·9ᚈ኷K㚊誦撪䚛,ꮪxሲ쳊\u0005HSf?asg昱dqꬌVꙇ㼺'k*'㈈": -5.937042203633044E-20 - } - ] - }], - "?}\u20e0],så¶³è‹@#2uì’´sQSä©—=ꥮ;烌,|ꘔ䘆": "á…©ì˜Nç’ kZ먕眻?2ቲ芋眑D륟渂⸑ﴃIRE]å•—`K'" - }}, - "쨀jmV賂ﰊå§ä‚¦çŽžã¬™áªM᪟ïՎ씜~`uOn*ॠ8\u000ef6??\\@/?9見d筜ﳋB|Sä¬è‘«ã½o": true - }, - "즛ꄤ酳艚â‚㺘봿㎨iGà§•à¡¿?1\"䘓您\u001fSáŠâº¿æºzៀ뻤B\u0019?ìœa䳵᭱䉺膷d:<\/": 3935553551038864272 - } - ] - ]} - ]] - ]] - ]} - } - ] - } - ]]}}, - "᥺3h↛!ê‹°y\"攜(ெl䪕oUkc1A㘞ᡲî촾ᣫ<\/ä’ŒEã›æ½¨i{ï  v?Wà±¾H\\RჅpzè¬R脾;v:碽✘↯삞鷱o㸧瑠jcmK7㶧뾥찲n": true, - "ⶸ?x䊺â¬-ä°…â‰!e쩆2ꎿ准G踌XXᩯ1ß}0?.í—€Z馟;稄\baDꟹ{-寪⚈ꉷ鮸_L7ƽᾚ<\u001bጨA䧆송뇵⨔\\ç¤ë—”d设룱㶉cq{Hyã±R㥽å¢ï¬…p": -7985372423148569301, - "ç·«#ì½®IB6<\/=5Eh礹\t8럭@饹韠r㰛斣$ç”LVì·a갵îŸ'请o0g:^": "䔨(.", - "ë³â„¡åœ¤pï¾à¯„Ä倧訜BìŸGä™”\"Sbâ“®;$$â–S1J뢙SF|赡gï„€*\"Vu䲌y": "䪈&í‹),\\kT鬜1í’¥;ë·´'Zေ䩹@Jéž½Nã¼M?å¥eWb6榀ƩZڮ淽⺞삳煳xჿ絯8eâ¶ç¾·V}ჿ쎱䄫R뱃9Z>'\u20f1â“•äœé½®" - } - ] - ]]] - }} - } - ] - ]}, - "펮b.hç²”í¯2npXè©«g錰鷇㇒<ì™S値bBi@?镬矉`剔}c2壧ଭfhY깨R()痩⺃a\\â”?M&ﯟ<劜꺄ï‘멊ᄟA\"_=": null - }, - "~æ½¹Rqn榢㆓aR鬨侅?䜑亡V_ç¿…ã­”(ä“·w劸á³Dp䀅<\/ï°Žé¶Šm䵱팱긽ꆘ긓准D3掱;o:_Ñœ)껚콥8곤d矦8nP倥ꃸI": null, - "뾎/Q㣩㫸벯➡㠦◕挮aé¶§â‹“å¼\u00001뱓fm覞n?㛅\"": 2.8515592202045408E17 - }], - ",": -5426918750465854828, - "2æ««@0柡g䢻/gꆑ6演&D稒肩Y?艘/놘p{f투`飷ᒉ챻ëŽîª–<늛ä˜ï´¡ì¤°ì«„": false, - "8î™–(鸑嵀⵹ퟡ<9㣎Tߗ┘d슒ل蘯&㠦뮮eà kç g ì—»": false, - "d-\u208b?0ﳮ嵙'(J`蔿d^踅⤔榥\\Jâµ²v7": 6.8002426206715341E17, - "ཎ耰í“ê•ï’ã±·\u0013y=詽I\"盈xm{0쾽倻䉚ષso#é°‘/8㸴짯%ꀄ떸b츟*\\鲷礬ZQå…©?np㋄椂榨kc᡹醅3": false, - "싊j20": false - }]] - ]], - "ä¿›\u0017nç·½Tu뫉èœé¼Ÿçƒ¬.ï‘ꭠIâ°“\"Ἀ᜾uC쎆J@å¤%ê›m뻨ᾀ画è›íœƒT:錖㑸ዚ9죡$": true - } - ] - ], - "ãµâ‡˜ê¦–辈s}㱮慀밒s`\"㞟j:`ií”»Zì„«^諎0Ok{켿æ­à·£èƒ°a2﨤[탳뚬쎼嫭뉮m": 409440660915023105, - "w墄#*ᢄ峠밮jLa`ㆪ꺊漓Lã§ëŽ!Agkï¹ï¾'ê›ë¢ƒã¯å²¬D#ã’¦": false, - "ଦPGI䕺L몥罭ꃑ궩﮶#⮈ᢓӢ䚬p7웼臧%ï‘¥~Sè âŒíž€6îž’&t䳙y㪘ëƒ\\*;é‰ï¿Šé¿µ'å—•pa\"oL쇿꬈Cgî“": "ã¶½1ç¸D⟸䴅ᆤ뉎﷛渤csî¸x ä”цꬃ锚æ¬?ຽ+x~꘩uI࡞\u0007æ ²5呚ẓem?è¢\")=㥴䨃pac!/æŽY", - "á·±o\\||뎂몷r篙|#X䦜I#딌媸픕åžRDæ–³X4t⯩夬=[ï‹ë­²r=绥jhë·±ì¸âª˜%]⚋܈㖴スHí…¹m(WOæ›åЉ0~K3c柢Õã‰ïªªé€³~": false, - "ç…½_qb[첑\\륌wEâ½Ztï”´CNï­+餌ᕜOê›­": "{ﳾ쉌&s惧á­âµ†3䢫;䨞팑ï›ê’ªí˜è¤€à¢–Qä ¿V5뭀䎂澻%ë°›u5í…¸oA⮥U㎦;B䳌wzä•™$áž¿\\௅婺ëµâª¾í†\\`Kyौꋟ._\u0006L챯l뇠Hi䧈å’5", - "艊ä½à£ƒë¡‡ä± çˆ¬ï˜‚!*;⨣æŽïžæ…“qé“|儑ᨋL+è¿¥=6㒺딉6弄3è¾…J-㕎뛄듘SG㆛(\noAzQê±ä°©X*ã¢O퀌%펠낌moí‹®a^<\/F&_눊ᾉ㨦ы4\"8H": 2974648459619059400, - "鬙@뎣䫳á®ë¡?){y?5K;î§„TA*k溱䫜J汃ꂯ싔ì\u001dA}룖(<\/^,": false, - "ëª@QꋦFꊩá’뎶î‡lXl垨4î¤^郣|ꮇ;ä´á“}ìµ²zç–": null - } - ]]]], - ":_=ë‹§å¼—D䙋暨é›. 㱻붘ä‚Jå„’&ZK/녩䪜rå›â½¯D喠죥7ï“⹌䪥c\u001a\u2076￞妈朹oLkè®F౟覛ì§ã®7T;}è›™2{9\"å´“bB<\/⡷룀;즮鿹)丒툃୤뷠5W⊢嶜(fb뭳갣": "E{å“1WM" - }}, - "䘨tjJ驳豨?y輊M*᳑梵瞻઻ofQGç‘®e": 2.222802939724948E-19, - "ä®´=â‘âž¶Tà·‹wäžœ\"垦ꃼUt\u001dx;B$뵣䙶E↌艣ᡥ!á§Ÿ;ä±€[䔯k쬃`à©8饙른ç†î‹”'2_'袻tGfè’­J땟as꯳╖&å•’zWࡇᒫYSá¬\u0014ℑ첥鈤|cG~Pá“®\">\"": "ႆl\f7V儊㦬nHꄬꨧC{ì¢~C⮃⛓嶦vꄎ1w鰠嘩뿠魄&\"_qMâµ–é‡”ë…®îœ¡ê‡ ãš{ç³Jå“‹ cî°¸v?-jkﻯྌ鹑L舟r", - "龧葆yB✱H盋夔ﶉ?n*0(": "ꧣኆ㢓氥î³qZZ酒ຜ)鮢樛)X䣆gTSî»»Ò‘Gí…žï’˜k.J圬ç–ë¡«ïœì¯­z L:\\ྤ@w炋塜쿖ᾳy뢀䶃ë±N䥨㚔勇ê²#p", - "ë„畎Q娡\"@S/뼋:äµ!Pè¡…ì´šfVHQs✜á«i㻑殡B䜇%믚k*U#濨낄~": "êŸá‹•ì³¸êˆæ•‹&lå¦\u0005憡멗瘌uPgá…ªm<\/To쯬锩h뒓k" - } - ] - }], - "墥홞r绚<\/⸹ⰃB}<躅\\Y;๑@䔸>韫䜲뱀X뗩鿥쩗SI%ﴞ㳕䛇?<\/\u00018x\\&侂9é‹™a[LRã‹­W胕)â¡¿8ãž™0JF,}?í—ˆd1cDMáƒâ›é„ⱕ%X)!XQ": "â³ê—³=橇a;3t⦾꼑仈î¥á€°aᚯ⯋ꕃAsé´·Nâ•_䎃ꙎAz\u0016䯷\\<à¿«>8q{}ï½·?ᣰ}'0ᴕ펓B┦lF#趤厃T?㕊#撹圂䆲" - }, - "Ü‹ë‹é¾«ï¥c웑": false, - "ㇿ/q\"6-co髨íœCí¦#\u001b4~?3ä¹E삇<<": 7.600917488140322E-20, - "äE6?㣖êƒé—´t祗*é‘ {ḣV(æµ¾h逇íž=W?ૉ?nꇽ8ꅉຉj으쮺@Ꚅ㰤u]Oyr": "vâ‰á«¸_*όAඤԆl)ۓᦇQ}í zà¼q滚", - "ソ᥊/넺I": true - }]] - ] - ] - ] - ]] - }, - "ä­‘Ik攑\u0002QV烄:芩.麑㟴㘨≕": true, - "å„꿕C쇻풉~å´%碼\\8\"䬦꣙": null, - "欌L圬䅘Y8c(♺2?ON}o椳s宥2䉀eJ%é—¹rå†O^K諭%凞⺉⡻,掜?$ꥉ?略焕찳㯊艼誜4?\"﯎<ï±ã‚›XáˆINT:è©“ +": -1.0750456770694562E-19, - "ç’àc뜭싼ﺳ뎤K`ïŸ]p隨LtE": null, - "ç”™8䵊神EIꩤé¯á¢€,ïµ®Uä‘u疒ử驺䚿≚ഋ梶秓F`覤è­#짾蔀묊4<åªì¬¦éª_Yzgcà¡¶î²§4kç´¥`kc[Lï®—î°£ç°*I瀑[â¾°L殽鑥_mGÈ <\/|囹ç gæ¡°iri": true, - "챓ꖙꟻì¢è‡ou,å— 0\\jK핻뜠qwQ?ഩ㼕3Y彦b\u009bJ榶N棨f?ë¦é–綃6é³µM[OEë´¨uí–.Ꮁ癜蟳뽲ꩌ뻾rM豈Rï¨ç¾« uDꎚ%": null - }, - "V傜2<": 7175127699521359521 - }], - "é“«aG切<\/\"ী⊆e<^g࢛)Dé¡ï½Žï¬®é¥¼\u008c猪繩嵿ﱚCꡬ㻊g엺Aì—¦\u000fæš¿_f꿤ë³ã¦•桦`蒦䎔j甬%å²rj ç³": "䚢åŽëˆ´Au<4箞7礦Iï±”å eȧ䪸uï„€äµp|逹$嗫쨘ꖾï·!胠z寓팢^㨔|u8Nሇe텔ꅦ抷]،鹎ã³#༔繁 ", - "낂乕ꃻ볨ϱ-ꇋã–fsâ¿«)zꜦ/K?솞♞ꑌ宭hJ᤭瑥Fu": false, - "쟰ãœé­›G\u0003u?`㾕ℾ㣭5螠烶這趩ꖢ:@å’•ê¶xë’˜ëŠmä°¨bç—ƒë 0鳊喵熬딃$摉_~7*ⱦ녯1錾GKhJ惎秴6'H妈Tᧅ窹㺒疄矤铟wላ": null, - "쯆q4!3錕ã²âµ†ã‡›ê˜·Zç‘©ë­†\\â—ªNH\u001d\\ã½°U~㯶<\"쑣낞3ᵤ'峉eꢬ;鬹o꣒木X*é•·PXᘱu\"ä ¹n惞": null, - "ᅸ祊\"&ꥴCjࢼ﴿?䡉`U效5殼㮞V昽êª#ﺸ\\&t6x꠹盥꣰a[\u001aêªSpe鎿蠹": -1.1564713893659811E-19 - } - ]] - ] - ] - ], - "羵䥳H,6ⱎ겾|@t\"#í–Šî¦1|稃 ì„­)ëœ=뻔ꡜ???櫎~*ῡ꫌/繣ﻠq": null - } - ]} - ]}, - "츤": false - }}, - "s": 3.7339341963399598E18 - } - ], - "N,I?1+㢓|ࣱ嶃쩥V2\u0012(4EE虪朶$|w颇væ­¥": "~ì¢~_,Mzrã«YB溓Eæ·š\"â…¹äˆ”áºæŠ™ b,nt5Vã’J檶ê¨â»”?", - "Q껑ꡡ}$넎qHç…”æƒ/ez^!ẳF댙äŒé¦»å‰8": "梲;yté’°$i冄}Aî‘”L%a jëœå¥·ê±³ëš¾d꿽*ሬuDY3î…—?뮟鼯뮟wãªí‹±îŸ‚V", - "o{Q/K O胟ãzUdê€m&⨺J舕â¾é­¸è¨ŸãŒ¥[T籨櫉å”í‚ aṭ뱫촙莛>碶覆⧬짙쭰ׯdAiH໥벤í¥_æ¸[ 0î­¬e:죃TCå¼¼èŽëµDA:w唵ê£": null, - "á½æ¨Žäµ®è»§|?à±—aWH쩃1 ê…­su": null - } - ] - }, - "å‹‚\\&mé°ˆJ釮=Ⲽ鳋+䂡郑": null, - "殣b綊倶5㥗惢⳷è¢á‘€ä¬„é•§M^ï±´3⣢翣næ«»1㨵}ኯ뗙顖Z.Q➷ꮨ뗇\u0004": "ê”™ä¼>n^[GीA䨟AMç¢á’ŠS쨲w?d㶣젊嘶çºéº“+æ„£a%気ྞScë“ᔘ:8bM7Xd8㶑臌]Ꙥ0ê­ì’™ä«£æŒµCè–½î€Dfⵃ떼᷸", - "?ç´¡.ì…ª_à·¨j\u0013Oxâ” $Xᶨ-á…‡oè–¹-}軫;yæ¯ãªœKã£?.EVì®±4둽⛻䤜'2盡\u001f60(|eì°ã¼Žá¦€ã’§-$l@ﻑå³\u0003ä­±å“å·—WFo5c㧆Tí„Y맸♤(": -2.50917882560589088E17 - }} - ], - "侸\\릩.᳠뎠狣살cs项䭩畳H1s瀉븇19?.w骴崖㤊h痠볭㞳㞳ä®Ql怠㦵": "@䟴-=7f", - "鹟1x௢+d ;viä­´FSDS\u0004hꎹãš?â’â¦Ñž6u,扩@ë·Su)Pag휛Tá’—Vç—©!çžé‡€ê–žè˜¥&ೞè˜ê­°êž‡áŽ": "ah懱Ժ&\u20f7䵅♎඀䞧鿪굛ౕ湚粎蚵ᯋ幌YOE)५襦ãŠY*^\"R+ඈî¶å’·è¶9î—ꥂ榨艦멎헦é–ë¶v좛咊E)K㓷ྭr", - "æ†q쮦4綱켙ì….f4<\/g<籽늷?#蚴픘:fF\u00051㹉뀭.á°–í’ŽfÖ¦Hv蔎㧤.!ä­½=éž½]ìŒH:?\"-4": 8.740133984938656E-20 - }]} - } - ], - "tVKn딩꘥⊾蹓᤹{\u0003lR꼽ᄲQFá…傅ﱋ猢⤊á”,E㓒秤nTà¶­v`â™›I\u0000]꫔ṞD\"麵cè¸î“²æ°X&æ¿¿ë˜ê£¹ê¹³à±¥è‘‚鿎\\aꡨ?": 3900062609292104525 - } - ], - "ਉ샒⊩Lu@Sä§°^g": -1.1487677090371648E18, - "⎢k⑊꬗yá«7^err糎Dt\u000bJç¤¯í™•ã†æ²‘サꋽeèµ”ã¢^J\u0004笲㿋idra剰-᪉C錇/Ĝ䂾ညSì§€?~ì½®gR敉⬹'ä§­": 1901472137232418266, - "ç—kä¶¥:?ì´½è´ì“‰ê“ˆã’¸gç˜[뵎\\胕?\u0014_榙p.j稶,$`糉妋0>Fá¡°ly㘽$?": "]ê™›O赎&#ã ƒë±å‰³î°·\"<â—†>0誉é½_|z|裵씪>áŒã¼\"Z[ç•}O?G뚇諦cs⠜撺5cuç—‘U圲\u001c?鴴計lì¶¥/╓哼䄗èŒîšªê®…뫈댽AëŒë¡–뤫V窗讬sHd&\nOi;_î´–u" - } - ], - "Uﺗ\\Y\\梷䄬~\u0002": null, - "k\"Y磓ᗔ휎@U冈<\/w컑)[": false, - "æ›Jè·âŒ»ë¦\u001f㙳s꥓âŸé‚«P늮쥄c∬ྡྷ舆렮칤Zè¶£5콡넛A쳨\\뀙骫(棻.*&è¼›LiIfi{@EA婳KᬰTXT": -4.3088230431977587E17 - }]} - ] - ], - "곃㲧<\/dఓꂟså…¶à¡§&Nè‘¶=?c㠤Ჴ'횠숄臼#\u001a~": false - } - ] - ]}] - }] - }} - ], - "2f`â½°E쵟>Jî•笂裭!〛觬囀ۺ쟰#桊l鹛ⲋ|RA_Vxá­gEë“h﵀mfá»|?juTUæ¡£[d⢼⺻p濚7E峿": 5613688852456817133 - }, - "濘ë¶gå¿®7ãµæ®¬W팕Qæ› ë«°)惃廊5%-î«è¹šzYZ樭ﴷQ锘쯤崫îŸgg": true, - "絥ᇑâ¦ì’“븣爚H.ã—Šß„o蘵貆ꂚ(쎔O᥉î¼ï®“]姨Wê“!RMA|o퉢THxè½®7Mê»U즨'i뾘舯o": "è·¥f꜃?" - }} - ], - "é·°é¹®K-9k;ï°°?_ݦѷ-ꅣ䩨Zꥱ\"mꠟ屎/콑Y╘2&鸞脇ã¢ê€‡à ºâ°¼æ‹¾å–­í‹®îL꽩bt俸墶 [l/웄\"꾦\u20d3iও-&+\u000fQ+໱뵞": -1.296494662286671E-19 - }, - "HX੹/⨇୕붷Uﮘ旧\\쾜͔3l鄈磣糂̖䟎Eá³wæ©–bá¿€_딕huè‘°î¤çª³é—¹Ð²U颵|染H죶.fPä—®:jä«¢\\b뎖i燕ꜚGâ® W-≚뉗lè¶•": "ଊ칭Oa᡺$IVã·§L\u0019脴셀붿餲햪$迳å‘ì¯ì¼‚PqfT\" ?î¹€I屉鴼쿕@ç¡™z^é•㊵M}ãš›T젣쓌-Wâ©-g%⺵<ë®±~빅╴瑿浂脬\u0005왦燲4áƒb|Då § <\/oEQh", - "䘶#㥘à©îººìº”ï” f巋ἡAJ䢚쭈ࣨ뫒*mᇊK,ࣺAꑱ\u000bR<\/A\"1a6鵌㯀bh곿w(\"$ê˜*rà²è¶£.dà¿©k/抶면䒎9W⊃9": "漩b挋Swè—Ž\u0000", - "ç•€e㨼mK꙼HglKb,\"'䤜": null - }]}] - ] - ] - }] - ]} - ] - ]} - ], - "æ­™>駿ꣂ숰Q`J΋方樛(d鱾뼣(ë«–í„­\u20f9lচ9æ­Œ8o]8윶lì–¶?é•–G摄탗6í‹íµ+g:䱫홊<멀뀿/س|ê­ºsê±è·¶ç¨šW々c㫣⎖": "㣮蔊깚Cꓔ舊|XRfé»ã†šï¸†'쾉ì·\\&言", - "æ®­\"cÞɨê™äž˜:嬮eæ½½Y펪㳅/\"O@à —ê²´]ì·–YÇž(t>R\"N?梳LDæ­=næ°¯Tè±°2R諸#N}*ç§ï¡§4}ã¶ŠGä£bì–š": null, - "襞<\/å•§ B|싞W瓇)6簭鼡艆lNì©`|펭佡\\é–“é‚[z릶&쭟愱ꅅ\\Tá°½1靝忠ˆ4̸s윜R7â’/똽?치X": "âŠèº–Cﱰ2Qẫè„&இ?%ëƒæ‚Š", - ",é°§åµì…£îˆ›ì‹¹xᎹ힨᯳EṬHïŽã¹–9": -4604276727380542356 - } - } - ]]]], - "웺㚑xs}q䭵䪠馯8?LB犯zK'osäš›HZ\"L?ì…Žs^ã¿§ã´˜Cv2": null - }] - ] - ] - ], - "Kdî©´2Kv+|z": 7367845130646124107, - "ᦂⶨ?ᢠ祂些ഷ牢㋇æ“\"腭䙾㖪\\(y4cE뽺ㆷ쫺ᔖ%zfÛ»$Ñž1柦,ã¶¢9r漢": -3.133230960444846E-20, - "ç˜Mç„€q%㢟f鸯Oâ£è“‘맕鯊$Oå™·|)z褫^㢦⠮ꚯ꫞`毕1qꢚ{ĭ䎀বώT\"뱘3G൴?ï¢ï¢^^oï…¯f": null - } - ], - "aî¶¹8V᯺?:ﺃ/8ꉿBq|9啓댚;*i2": null, - "cpT瀇Hç°á»ªpೃi鎪Rrâ£ìˆ¬-鹸ҩ䠚z脚цGoN8å…¥y%è¶ŒI┽2ឪЀiJNcN)æ§£/â–Ÿ6S숆牟\"箑X僛G殱娇葱T%æ»:J諹昰qV쨰": 8331037591040855245 - }], - "G5ᩜ䄗巢껳": true - } - }, - "Ồ巢ゕ@_è­™A`碫é„㡥砄㠓(^K": "?܃B혢▦@犑ὺD~Tâ§|é†;o=J牌9냚⢽㨘{4è§èš”9#$∺\u0016p囅\\3Xk阖⪚\"UzA穕롬✎âžã­’춺C㣌ဉ\"2瓑员ᅽê¶ë«}꽚ꞇ鶂舟彺]ê½JCè§éЉ", - "â†Äšè†\"b-í‰ACR言J謈53~V튥x䜢?ꃽɄY뮩ꚜ": "K/↾eèƒ}]Bs⾿q룅鷦-膋?m+æ­»^魊镲6", - "粡霦cæž‹AHíŸo礼Ke?qWcA趸㡔ê‚?\u000eì¶‚8iতᦜ婪\u0015㢼nﵿê»!á´é–¢\u001d5j㨻gfá¿©UK5Juä¸tã‹TI'?ã“t>⼟o a>i}á°—;뤕Ü": false, - "ꄮ匴껢ꂰ涽+䜨B蛹H䛓-k蕞fu7kLè°–,'涃V~챳逋穞cT\"vQ쓕ObaCRQã“¡â²®?轭⫦輢墳?vA餽=h䮇킵ní²í‰…喙?\"'1ç–¬V嬗Qdç—'Lự": "6v!së¯ã­Ÿî€µî¦˜ã£¯çƒ!磸餠ቂh0C뿯봗Fé·­gê–¶~コkK<ᦈTtïŽ\\è·“w㭣횋钘ᆹ듡䑚W䟾X'ê…”4ï€FL勉Vܴ邨y)2'〚쭉⽵-鞣E,Q.?å—", - "?(˧쩯@å´Ÿå‹æ­„K": null - }, - "Gc럃녧>?2DYIé´¿\\륨)æ¾”0ᔬlx'è§”7젘⤡縷螩%Sv׫묈/]↱&S ï…h\u0006æ­‹á‘›xi̘}ã²Y蔯_醨鯘煑橾8?䵎쨋z儬ê*@츾:": null - } - } - } - ] - ] - ]} - }, - "HO츧G": 3.694949578823609E17, - "QC\u0012(翻曇Tfã·ŸbGBJ옉53\\嚇ᛎDï–/\u001b夾á‰4\"í•€@祎)쫆yD\"i먎Vnî¿ã¿¿V1Wá¨ä¶€": -6150931500380982286, - "Zã“®P翸é±é‰¼K䋞꘺튿â­Y": -7704503411315138850, - "]모开ꬖP븣c霤<[3aΠ\"é»ä––䰑뮋ꤦ秽∼㑷冹T+YUt\"싳F↭ä–&鋌": -2.7231911483181824E18, - "tꎖ": -4.9517948741799555E-19, - "䋘즊îŽ.⬅IꬃۣQ챢ꄑé»|f?C⾺|å…•ì¯sC鬸섾整腨솷V": "旆柩l쪦sá–¸My㦅울ì‰ç˜—㎜檵9ï……ê‚駓ૉᚿ/u3ì”…å¾ï¤¥[Z䞸ࡗ1ꆱ&Q풘?Ç‚8\u0011BCDY2볨;é¸": null, - "幫 nç…¥sì‡íއ 왊-$C\"è¡:\u0014㣯舼.3ë™—Yl⋇\"K迎멎[ê½µs}9鉳UK8ì¥\"掄㹖h㙈!얄સ?Ꜳ봺R伕UTD媚I䜘Wé¨è”®": -4.150842714188901E-17, - "ﺯ^ã„„\b죵@fྉkf颡팋î¤êž¦{/Pm0V둳⻿/è½éŸ’ꊔᚬ@5螺G\\å’¸a谆⊪ቧ慷绖?è´¢(é·‡uéŒF=ráæ©¢áž³n:^iá´µtD볠覅Nèµ´": null - }] - }] - } - ] - ]} - ]}, - "謯?w厓奰Tï§¡í——èážè²–o⪇弒L!캶$ᆅ": -4299324168507841322, - "뺊奉_åžæµ¸å»¶ëªå­„Z舰2i$q붿좾껇d▵é¤\"v暜Ҭì„mï¿´g>": -1.60911932510533427E18 - } - ] - } - ] - ]], - "í‰êº”㠦楶Pê…±": 7517896876489142899, - "ï™°": false - } - ]}, - "是u&I狻餼|è°–j\"7cë®sï­-踳鉷`䣷쉄_A艣鳞凃*m⯾☦椿q㎭Nîœæº”铉tlㆈ^": 1.93547720203604352E18, - "ï…µkⲨ\\%vr#\u000bâ’ºY\\t<\/3﬌R訤='﹠8è¤êž´ë ´æ›”r": false - } - ]}, - "阨{c?C\u001d~K?鎌Ԭ8烫#뙣Pì´ˆé—tã­±E­ë’䆺}ç”—[R*1!\\~hã•…á°º@<9JêષIä³–æ ­6綘걹ᅩM\"▯是∔v鬽顭⋊譬": "ìš´ï¶Kæ•‚(欖C취پ℄爦賾" - } - }} - }], - "鷨赼鸙+\\ä­£t圙ڹx᜾ČN<\/踘\"S_ë§¶a鷺漇T彚⎲i㈥LT-xA캔$\u001cUH=a0츺l릦": "溣㣂0æ¿•=鉵氬駘>Pꌢpb솇쬤h힊줎çªãª¬CrQ矠a&è„꼬爼M茴/á¿®\u0017å¼è½¼y#êž c6ë‘´=?Rå´ë· éº–w?" - }, - "閕ᘜ]CT)䵞l9z'xZF{:ØI/躅匽ì¡:䟇AGF૸\u001cퟗ9)駬慟ꡒꆒRS״툋A<>\u0010\"ꂔ炃7gëšEà§îˆbꅰ輤]oã±_뷕ܘ暂\"u": "芢+U^+㢩^鱆8*1鈶鮀\u0002뺰9⬳ꪮlL䃣괟,G8\u20a8DF㉪錖0ㄤ瓶8Nଷd?眡GLc陓\\_죌Vì°à¤²äºŒ?cë¦æ± \u0019JC\u0011b⤉zẒT볕\"绣蘨뚋cꡉkî« I\u001eé³´", - "ꃣI'{6u^㡃#཰Kq4逹y൒䧠䵮!㱙ï®/n??{Lí’“ZETã™ í¿X2᩟綳跠葿㚙w཮x캽扳B唕S|å°¾}ì´•%N?o䪨": null, - "ⰴFjà·Ÿì…ˆ[\u0018è¾·px?椯\\1<ﲻ栘á£ë´¢æ† ë‰´p": -5263694954586507640 - } - ] - ]] - ]} - ]}] - ] - ], - "?#癘82禩鋆êŠty?&": -1.9419029518535086E-19 - } - ] - ] - ]} - ] - ] - ], - "훊榲.|῕戄&.ãšZꛦ2\"䢥ሆ⤢fV_æ‘•å©”?â‰Fji冀탆꜕iã¬_ẑKᅢ꫄蔻XWc|饡Siẘ^㲦?羡2ã´1ç¸á™…?ì‰Ou": false - }]] - ]}}}, - "æ…‚ë—„å“è“”á“åŒåš–/颹蘯/翻ㆼL?뇊,í…µ<\\ç·ã”Cボ": null - }, - "p溉ᑟi짣z:䒤棇r^Ù«%G9缑r砌롧.물农g?0׼ሩ4ƸO㣥㯄쩞ጩ": null, - "껎繥YxK\"F젷쨹뤤1wq轫o?鱑뜀瘊?뎃hç‘\\ꛣ}Kå³^ኖâ¤ï§´ê‰“hy": null - } - ], - "á±€nè‚“ã„›\"å »2>mæ®®'1橌%êž´êµ°=Ӳ鯨9耛<\/n據0u彘8㬇៩fá¿è¯™]嚊": "䋯쪦S럶åŒã…›#î½)O`ሀX_éªæ¸²â›€ã¨»å®…闩➈ꢙஶDRâª" - }, - "tAì“龇 â‹¥bj왎录r땽✒롰;羋^\\?툳*┎?ì€ma䵳넅U䳆૘〹䆀LQ0\bç–€U~u$M}(鵸gï­â³¾i抦뛹?䤈땚검.鹆?ê©¡tâ¶¥GÄ’;!ቹHïš©Så³»B츪ì¼f5≺": 2366175040075384032, - "ì „pJjleb]áž½": -7.5418493141528422E18, - "n.鎖ጲ\n?,$䪘": true - }, - "欈Ar㉣螵᪚茩?O)": null - }, - "쫸M#x}Dç§±æ¬K=侫们ä¸ï‡ª.KꕾxẠ\u001e㿯䣛FÜ캗ï¬qq8꟞ṢFD훎⵳簕꭛^鳜\u205cÙ«~⑟~冫ऊ2ì«°<\/戲윱o<\"": true - }, - "ã·è¥/T뱂\u0010锕|内䞇xä¾â‰¦ã­–:M?iM᣿IJeç…œdG࣯尃⚩gPt*辂.{磼럾äª@a\\袛?}ᓺBç¼": true - } - } - ]]}]}}, - "tn\"6î´ê«¤ìƒ¾ä„„;銞^%VBPwu묪`Y僑N.↺Ws?3C⤻9唩Sä ®á´m;sᇷ냞඘B/;툥B?lB∤)G+O9m裢0kC햪䪤": -4.5941249382502277E18, - "áš”t'\\æ„«?éµ€@\\ã³ê‚•Pí <<]ç…¹G-b!S?\nꖽ鼫,Ý›&é ºy踦?Eæ†î¬–릱H}햧캡b@手.p탻>췽㣬ꒅ`qeä½­P>á“‚&?u}毚ᜉ蟶頳졪áŽzl2wO": -2.53561440423275936E17 - }]} - } - ] - ]], - "潈촒⿂å¡": 5495738871964062986 - } - ]] - } - ] - ]} - ]] - ]] - ]} - ] - ]}, - "á‚qí‚è“…R`謈èŸá¦î’³å„‚æ§åƒ»ï¹¶9å©Œî¬æ«žé‡ˆ~\"%匹躾ɢ뤥>࢟瀴愅?殕节/냔O✬H鲽엢?ᮈà©î“Žâ‹§dâ½ã«zCe*": 2.15062231586689536E17, - "ã¶µUi曚ç°é‹ªá¾¼è‡§P{ä䷪쨑̟A뼿T渠誈äšD1!ìž¶<\/ã¡7?)2l≣穷᛾ç¨{:;㡹nemיּ訊`Gî¹²": null, - "䀕\"飕辭påœf#뫆䶷뛮;â›´á©3çšëá°ìŽ“â¦·è©µ%᜖Մfs⇫(\u001e~P|ï­—CⲾផv湟W첋(텪બTî¾·<บSê‰à©—⋲X婵i ӵ⇮?L䬇|êˆ?졸": 1.548341247351782E-19 - } - ] - }, - "t;:N\u0015qé¦Rt缆{ê®C?஛㷱敪\\+鲊㉫㓪몗릙ç«(æ°µkYS": "Xá°‚T?൮ô", - "碕飦幑|+ 㚦é¶`é•¥ê© B<\/加륙": -4314053432419755959, - "秌孳(p!G?Vå‚«%8ሽ8w;5鲗㦙LI檸\u2098": "zG N볞䆭éŽí˜\\ONK3íš™<\/樚立圌Q튅k쩎Ffì‹aׂJK銆ઘì¦ç‹©6༥✙䩜篥CzP(è»é§‡HHퟲ讃%,ά{ë p而刲vy䦅ክ^톺M楒é¢ã¹³]Mdg2>䤉洞", - "踛Mì §>忔芿㌜Zk": 2215369545966507819, - "ì”A`$æ§­é °í»^U覒\bG毲aᣴU;8!팲f꜇E⸃_åµ{å«ç¾ƒX쀳C7ë—®m(åš¼u NÜè°ŸD劯9]#": true, - "ﻩ!뵸-ç­šPá­›}á¼°å±¥lPh?౮ⶹꆛ穉뎃gè‘㑓溢CX뾇Gã–¬A錟]RKï’î´²aꄘ]Yo+@ä˜'s섎襠$^í™°}F": null - }, - "粘ꪒ4HXᕘ蹵.$å€\r\u001dë¬77pPc^yî¶ç¬²Q<\/ê–¶ è¨äƒá¨•G?*": 1.73773035935040224E17 - }, - "婅拳?bkU;#D矠â´vVN쩆t㜷A풃갮娪a%é®çµª3dAv룒#tm쑬⌛qYwc4|L8KZ;xU⓭㳔밆拓EZ7襨eD|隰ऌ䧼u9Ô¢+]è´´Pè¿": 2.9628516456987075E18 - }]}}] - ]} - }} - ]}] - ], - "|g翉F*湹̶\u0005â1脉̀eI쩓ᖂ㫱0碞l䴨ꑅ㵽7AtἈ턧yq䳥塑:z:é€ï¾¼X눔擉)`N3昛oQì…–y-ڨ⾶æ¢êˆµq^<\/": null, - "è¹\\ëž“G^璬x৴뭸ゆUSê²§ï®·Bꮤ ┉銜᯻0%N7}~fæ´‹å„Xꔼ<\/4妟Vꄟ9:౟곡t킅冩䧉笭裟炂4ë´‹â±³åºæ€Št+怯涗\"0ã–ˆHq": false, - "졬믟'ﺇফ圪쓬멤m邸QLà¦¬ä—æ„4jvsç¿™ à¾ê§€è‰³H-|": null, - "컮襱⣱뗠 R毪/鹙꾀%í—³8&": -5770986448525107020 - } - ], - "î½­B䔚bê»ë™å§“展槰T-똌鷺tcï§ç¿á«½^㓟ä€o3o$꘭趙è¬Ié¡©)뇭Ἑä“\f@{ᣨ`x3è”›": null - } - ] - ] - }], - "⦖扚vWꃱ꥙㾠壢輓{-⎳鹷è´ç’¿äœ‘bG倛â‹ç£Žc皇皩7a~ﳫUâ•£Q࠭ꎉS摅姽OW.홌ೞ.": null, - "蚪eVlH献r}á®ë¯ ï°©ê”„@ç‘„â²±": null, - "퀭$JWoê©¢gì—­ì䖔㑺h&à­¢tXX愰㱇?㾫I_6 OaB瑈q裿": null, - "꽦ﲼLyr纛ZduçB絟쬴糔?ã•‚ì§¹äµe": "ḱ\u2009cX9ë©€i䶛簆㳀k" - } - ]]]], - "(_ê®g່澮?ᩑyM<艷\u001aꪽ\\庼뙭Zë§·ã°©Vm\\lYç­º]3㋲2㌩㄀Eਟäµâ¨„ì¨á”ŸgङHné–⤇놋瓇Q탚單oY\"♆臾jHᶈå¾îž«á‰„??uㇰA?#1侓": null - }, - "è§“^~ሢ&iIë†g륎ḱ캀.ᓡꀮ胙鈉": 1.0664523593012836E-19, - "yè©­GbᔶऽsëŒU:æœî „⤎ϲì—⮼D醄诿që™°I#즧v蔎xHᵿt᡽[**?崮耖p缫쿃Lè,ë´¬ï–ꤦC쯵#=X1çž»@OZc鱗CQTï‹„x": null - } - ] - }}], - "剘ç´\u0004\\Xn⊠6,á€×±;嵣崇}讃iႽ)d1\\䔓": null - }, - "脨z\"{X,1uì°œ<'k&@?1}Yn$\u0015Rd輲ーa쮂굄+B$l": true, - "諳>*ì­®ê´äµŸÒ+<ç®}빀䅱⡔æªï€è‡’hIH脟ꩪCí•ଗP좕\"0i<\/C褻DÛžæ—+^5?'ꂱ䚫^7}ã¡ cq6\\쨪ꔞꥢ?纖䫀氮蒫侲빦敶q{Aç…²G": -6880961710038544266 - }}] - }, - "5s⨲JvಽῶꭂᄢI.aà§Š": null, - "?1qê½ì¿»ê›‹DR%Uå¨>DgNä¹­G": -1.2105047302732358E-19 - } - ] - ]}, - "qZz`撋뙹둣j碇ì\\ꆥ\u0018@ïœè—´ç–°Wz)O{Fä¶›l᷂绘訥$]ë®å¤»ä¢‹ä©‡è¿ç°æ¨§çŒµâ£­jè¶q)$꬚⵷0馢W:â°!Qoe": -1666634370862219540, - "t": "=î¹›wp|~碎Q鬳Ó\\l-<\/^ﳊhní–}ä”t碵ḛ혷?é»äŠ—", - "邙쇡㯇%#=,î‰E4勃驆V繚q[Y댻XV㡸[逹á°è‘¢B@u=JS5?bLRnì–®ã‰â…ï°³?a6[&íŸ!è—ˆ": 1.2722786745736667E-19 - }, - "X블땨4{ph鵋ꉯ웸 5p簂䦭s_E徔濧dç¨~No穔噕뽲)뉈c5M윅>âš‹[岦䲟懷æ?éŽê“†à¸¬çˆ‹ç äœ”s{\u001bméšå„¸ç…›%bﯿXT>ê—˜@8G": 1157841540507770724, - "媤娪Qæ¸ï‡\u0011SAyᡈ쿯": true, - "çš^ಸ%ê±<\/蛯?\"祴å“\\\\'í": -3.4614808555942579E18, - "釴U:O湛㴑䀣렑縓\ta)(j:숾å´ä—ŒgCiB뽬Oyuqè¼¥åŽ/7)?今hY︺Q": null - } - ] - ]]]}] - ], - "I笔趠Ph!<ཛྷ㸞诘X$畉F\u0005笷èŸ.Esr릙!W☆ï›ä²–뗷莾뒭U\"䀸犜Uo3ï¯Gꯌx4r蔇᡹㧪쨢準<ä‚€%ࡡꟼç‘8ç‚Xs0ä€é”€?fi쥱ê†àª²BB": -8571484181158525797, - "Lâ¦o#J|\"⽩-ã±¢d㌛8d\\㶤傩儻E[Y熯)r噤὘勇 }": "e(濨쓌K䧚僒ã˜è ¤Vᛸ\"络QJL2,嬓ì™î¿‰ä¼¢ã‹’䴿考澰@(ã¾`kX$ë‘ÑE斡,èœ&~y", - "vj.|统圪ᵮPL?2oŶ`ë°§\"勃+0ue%⿥绬췈체$6:qaë Q;~晘3㙘鹑": true, - "à·Ø™4ç„â¶¿c︋iâš…:ã‚“é–Ⳙ苆籦kw{䙞셕pCì·ƒê¬âœêŸ¯êš“é…„bížhwkê­­M鬋8B耳쑘WQ\\å™ac'唀x᪌\u2048*hì§Ž#á‡é® ë¾áž¿ë€Œ": false, - "⎀jꄒ牺3Ⓝ컴~?親ꕽã¼Ü“å–瘘!@<튋ãŒê¿±â©¦{a?Yv%⪧笯Uܱ栅Eæši뚬:ꄃx7䙳ꦋ&䓹vq☶Iä˜á¾˜æ¶œ\\ì‰ëºŒLr%Bcãœ3?î¤ï…¨ê­ç ¿è£ž]": null, - "⭤뙓z(ã¡‚%亳K䌽꫿AԾ岺㦦㼴輞낚Vꦴw냟鬓㹈뽈+o3è­»K1ìžž": 2091209026076965894, - "ㇲ\t⋇轑ꠤ룫X긒\"zoYì‡í¬wjæ¢ì‘l侸`e%s": -9.9240075473576563E17, - "啸ꮑ㉰!áš“}éŠ": -4.0694813896301194E18, - "ï‰>]囋੽EK뇜>_ꀣ緳碖{ì裔[<ನ\"䇅\"5L?#îµ³xTwv#ç½\u0005래t应\\N?빗;": "v쮽瞭pë­ƒ" - } - ]], - "æ–´æ§¾?Zç¿\"~æ…弞ﻆ=꜡o5é‹ï’½dw\"?Kè ¡i샾ogDï²°_C*⬟iㇷ4nયèŸ[㟉U꽌娛苸 à§æ“贻洞펻)쿗૊許X⨪VY츚Zä¾ã¶­~튃ᵦ<\/E臭tve猑x嚢": null, - "锡⛩<\/칥ꈙᬙè€&êšç±¬â– 865?_>Lè©ì¿¨äˆŒæµ¿å¼¥ï©‰Ì«î¾½ï‘lj&zx<\/C쉾?覯n?": null, - "꾳鑤/꼩ï¨d=ᘈn挫ᑩ䰬ZC": "3錢爋6Ƹ䴗v⪿Wr益G韠[\u0010å±—9ì¡é’u?殢c䳀蓃樄욂NAq赟c튒ç˜ë ¶î‚³Aà«¡Éšæ" - } - ] - ] - ]} - ] - ] - }]]]}} - ]}], - "ï‚’Ejä—³U<\/Q=ç’샎䞦,å °é  @褙g_\u0003ꤾfâ¶½?퇋!łB〙ד3CC䌴鈌U:뭔咎(Qો臃䡬è‹BO7î¼§ã¢äŸ¸\"Yb": 2.36010731779814E-20, - "逸'0å²”j\u000e눘먷翌C츊秦=ꭣ棭ှ;鳸=麱$XP⩉駚橄A\\좱⛌jqvä°ž3Ь踌v㳆¹gT┌gvLBè³–ïžçƒ¡m?@E঳i": null - }, - "曺vì°˜×?&绫OáŸ": 9107241066550187880 - } - ] - ], - "(e屄\u0019昜훕ç–b蓘ᬄ0/۲묇Z蘮á€â¨è›˜èƒ¯ë¢ƒ@㘉8ሪWᨮ⦬ᅳ䅴HIá‡ì¨³z囕陻엣1赳o": true, - ",b刈Z,á æ™Tì†Å•B⩆ou'í¼â‰ƒç»—é›—dè­Š": null, - "a唥KB\"ï³è‚•$u\n^â…„P䟼냉䞸⩪u윗瀱ꔨ#yÅŸsî««ê’¬=ï‹•1ïš–|ﲤ爢`tà±íмî£ì³«_Az(Ṋ擬㦷좕耈6": 2099309172767331582, - "?ã´¸U<\/䢔ꯡ阽扆ã¤qé‹?f㔫wM嬙-;UV죫嚔픞G&\"Cá—äªí’ŠQ": "VM7ç–¹+陕枡툩窲}ç¿¡ä–¶8欞ÄsTë®}ç’¤:jﺋ鎴}HfAàµâ§»Zd#Qï¬u茅J髒皣Y-︴[?-~쉜vë”璮㹚䅊﩯<-#\u000eê±€h\u0004u抱﵊㼃U<㱷⊱IC進" - }, - "숌dee節é½é‚ºp넱蹓+e罕U": true - } - ], - "b⧴ë£??á” 3ã±>%郿劃ç¿ê¬ê ›Wï¡°çž³á«ëˆ„躨狀ໄy੽\"ីuS=㨞馸k乆E": "トz݈^9R䬑<ﮛGRꨳ\u000fTT泠纷꽀MRᴱ纊:ã ­ë³®?%N56%鈕1ä—äœaä²—j陇=ë¿»å‚衋࿘ᓸ?ᕵZ+<\/}H耢bä€z^f$&ã’LkꢳI脚뙛u": 5.694374481577558E-20 - }] - } - ]], - "obj": {"key": "wrong value"}, - "퓲꽪m{ã¶©/뇿#â¼¢&᭙硞㪔E嚉c樱㬇1aç¶‘á–DḾä©": null - }, - "key": "6.908319653520691E8", - "z": { - "6U閆崬밺뀫颒myj츥휘:$è–ˆmYí–š#rzé£+玭V㭢뾿愴Yî°‘ê–šX亥ᮉ푊\u0006åž¡ã­ë£\"厓ᔧḅ^Sqpv媫\"⤽걒\"˽Ἆ?ꇆ䬔未tv{DV鯀Tἆl凸g\\㈭ĭ즿UH㽤": null, - "b茤z\\î¨.N": [[ - "ZL:ᅣዎ*Y|çŒ«åŠæ«•è¾Oj为1糕쪥æ³S룂w࡛á²â¸¥èš™)", - { - "\"䬰á»wDæ¾V`邀⠕VDãºsH6[칑.:醥葹*뻵倻aD\"": true, - "e浱uî¿£p蔽Crà· JK軵xCʨ<뜡癙Yç©ï½¹é½ˆX/螗唻?<蘡+뷄㩤쳖3å‘犾&\\첊xzå崦ݻé´\"åµ¥B3㰃詤豺嚼aqJ⑆∥韼@\u000b㢊\u0015L臯.샥": false, - "l?Ǩ喳e6㔡$M꼄I,(3á縢,䊀疅뉲B㴔傳䂴\u0088㮰钘ꜵ!ᅛ韽>": -5514085325291784739, - "o㮚?\"춛㵉<\/﬊ࠃ䃪ä£wp6ἀ䱄[s*S嬈貒pᛥ㰉'ë€": [{ - "(QP윤懊FI<ꃣ『䕷[\"ç’å¶®?%Ḭå£à²»ä‡Ÿ0è¤!è—²ë¹bdæµ¶tl\u2049#쯀@僞": {"î—i妾8홫": { - ",Mï£ë§ƒäž›K5nAㆴVNã’Ší–¬$n꩑&êŽæ¤žî·é˜«?/á¹ì„¸ë‰ª1x쥼㻤㪙`\"$쟒薟B煌܀ì¨à­2掳7㙟鴙Xå©¢\u0002": "Vዉèˆï ’᧷⦌kîŒï®žà°ˆnz*ï·œFM\"è­7ê€-VR<\/';ä™E9$䩉\f @s?íªo3^è¡´cî˜à¶Žä§ªaK鼟q䆨c{ä³ 5mᒲՙ蘹ᮩ": { - "Fã²·JGoâ¯Pëµxë’³p䘧☔\"+ꨲå¿JfR㔹)4nç´¬G练Qáž!C|": true, - "p^㫮솎ocî’£.೚A㤠??r\u000f)⾽⌲們M2.䴘䩳:⫭胃\\á¾@Fá­Œ\\K": false, - "蟌Tk愙潦伩": { - "aï‘<\/@ᾛ慂侇瘎": -7271305752851720826, - "艓藬/>á„ṯ,XW~㲆w": {"Eç—§î–郶)㜓ha朗!N赻瞉駠uC\u20adè¾ x퓮⣫P1à «LMMX'M刼唳ë¤": null, - "P쓫晥%k覛ዩIUᇸ滨:å™í˜²lMR5䋈V梗>%å¹½ué –\\)쟟": null, - "eg+昉~矠䧞难\b?gQì­·ç­\\eê® Nl{ಢ哭|]Mn銌╥zê–˜zⱷ⭤ᮜ^": [ - -1.30142114406914976E17, - -1.7555215491128452E-19, - null, - "渾ã¨ß牄귛r?ëŒ?w[âšžÓ»~廩輫㼧/", - -4.5737191805302129E18, - null, - "xyà¿‘M[ocì…’ç«“â’ºx?뜓y䊦>-Dì¼(&&?XKkc꩖ﺸá‹ëµžK伕6à§€)딀PæœyWæ™îž¢?훻魢傎EG碸9類៌g踲C⟌aEX舲:z꒸许", - 3808159498143417627, - null, - {"m試\u20df1{G8&뚈h홯J<\/": { - "3ஸ厠zs#1K7:rᥞoꅔꯧ&ë‡éµ¼éž«6è·œ#赿5l'8{7㕳(b/j\"厢aqç±€êš\u0015厼稥": [ - -2226135764510113982, - true, - null, - { - "h%'ë§žï–±Sì‹…Hs&dï”l슾W0jé¿M×D놯L~S-㇡Rì­¬%": null, - "⟓咔謡칲\u0000孺ꛭx旑檉㶆?": null, - "æ‡I転;￸B2Y`z\\ç“w,ë†æ¿æ’埵䂄)!ä¶¢D=à´­ã´ŸjyY": { - "$ࡘt厛毣ൢIèŠ<겿骫⫦6tr惺a": [ - 6.385779736989334E-20, - false, - true, - true, - [ - -6.891946211462334E-19, - null, - { - "]-\\êŸ1/è–“â§á½Š\\l牑\u0007A郃)阜ᇒᓌ-塯`W峬G}SDb㬨Q臉⮻빌O鞟톴첂B㺱<ƈmu챑J㴹㷳픷Oㆩs": { - "\"â—‰B\"pᶉt骔J꩸ᄇá›iâ•°æ ›K쉷㉯é©!ãˆnì¹äŸ…難>盥yé“¿eà­”è’M貹ヅ8å˜‹í€¯ä‰¶áŒ¥ã¢æ®Šë»³\"絧╿ꉑ䠥?∃蓊{}㣣Gk긔H1哵峱": false, - "6.瀫cN䇮F㧺?\\椯=ÚˆT䘆4â˜ïšŒ8qv": -3.5687501019676885E-19, - "Q?yऴr혴{஀䳘p惭f1ﹸ䅷䕋贲<ྃᄊ繲hq\\b|#QSTî“¶s1c-7(äµ¢\u2069åŒçµ˜ê¯‰:læ¯´ï›æ±žt戀oà·Ÿáµ¶ë®±á£-醇Jx䙬äí–¢0࣫á¡grã„›": "\u0011_xM/蘇Chv;dhA5.嗀绱V爤ﰦiëµ²M", - "â‘[\"ugoy^儣횎~U\\섯겜ï¥l2jw஌yD腅̂\u0019": true, - "ⵯɇä²á«¿à¢š!㯢l샅笶戮1꣖0Xe": null, - "劅fë„€ï‹ï§¼bå®ç„ŠE찓橵G!ʱç“뭔雩괛": [{"p⹣켙[q>燣äƒãž½î›œá©²x:쓤삘7玑퇼0<\/qç’‚á‘[ï ™Z\\3䅵䧳\u0011㤧|妱緒C['ì·“Yꞟ3Z鳱雼P錻BUì”§U`ᢶg蓱>.1Ó§è­«'L_5VäµÐ¦": [ - false, - false, - {"22ä‚盥N霂얢躰îe9â‘©_뵜斌n@B}$ê´»Yá±@ä§‹î´½V\"☒-諯cVë¯Ê ": true, - "Ű螧ᔼæªéŽë•’딜qꄃH뜣<ç§à¥‚CYå“â¸>XQ㵡趌oë¬k픀빯a(ܵç”ë†à­¯/6Nᪧ}æšá†šì§ŒP牰泱鈷^d꣟#Lì‚€\"㕹襻;k㸊\\f+": true, - "쎣\",|⫝̸阊x庿k잣v庅$éˆê´Žç‚”k쬪O_": [ - "ìž©AzZGz3v愠ꉈⵎ?㊱}Så°³à¯p\r2>ì·IP䘈M)w|\u000eE", - -9222726055990423201, - null, - [ - false, - {"´킮'뮤쯽Wxè®V,6ᩪ1ç´²aႈ\u205czD": [ - -930994432421097536, - 3157232031581030121, - "l貚PY䃛5@ä­„ê·»m㎮ç¸fî§¡": 1.0318894506812084E-19, - "࢜⩢Ш䧔1肽씮+༎ᣰ闺馺窃䕨8Mƶqè…½xc(៯å¤J5굄ä•Qj_훨/~価.䢵慯틠퇱豠㼇Qﵘ$DuSp(8Uà¸<\/ಟ룴𥳐ݩ$": 8350772684161555590, - "ㆎQ䄾\u001bpá©­${[諟^^骴᤮b^ã…¥Iâ”§T㉇⾞\"绦rä°‚f矩'-î½7ä¡­æ¡¥Dz兔V9è°¶å±…ãºá”Šä©¯ë².\u001eL0ὅㅷ釣": [{ - "<쯬Jå·^숞u࠯䌗艞R9닪gã¾ë³Ža䂈歖æ„:%é”|ﵤ|y}î¡»>;2,覂⶚啵tb*ä»›8ä¹’ã“¶B࿠㯉戩oX 貘5V嗆렽ë‚߼4hä§›êºM空\\b꿋貼": 8478577078537189402, - "VD*|ï§­z~hè­ºaᯒ": { - "YIì·¢K<\/濳xNne玗rJo쾘3í•°é´Š\"↱AR:ࢷ\"9?\"è‡ï¦¡)?誚êŠe)_D翾W?&F6J@뺾ê°NZ醊Z쾈വHï±å¶¿?炫㷱鬰M겈᭨b,â»éˆµP䕡䀠८ⱄ홎鄣": { - "@?k2é¶–ã‹®\"Oರ K㨇廪儲\u0017ä¾î¿‚J?);\b*묀㗠섳햭1MC V": null, - "UIICP!BUA`î€á¢ˆã‹¸~袩㗪⾒=fBï®´l1ꡛ죘R辂여ҳ7쮡<䩲`熕8é ": 4481809488267626463, - "Y?+8먙ᚔ鋳蜩ï–럶1㥔y璜౩`": [ - null, - 1.2850335807501874E-19, - "~V2", - 2035406654801997866, - { - "<숻1>\"": -8062468865199390827, - "Mã¿£ï€E]}qwG莎Gná¶(ê”™\\D⬲iꇲs寢t駇S뀡ꢜ": false, - "pê¤ãŽ9W%>M;-Uç’fî£(^j1?&RBéš§ å¿“b똊îƒE": "#G?C8.躬ꥯ'?냪#< 渟&헿란zpo왓Kj}é·§XﻘMツbä•–;㪻", - "vE풤幉xz뱕쫥Ug㦲aH} ᣟp:鬼Yá°ŸH3镔ᴚ斦\\é‘r*2橱Gâ¼”F/.j": true, - "RK좬뎂aí™ f*f㱉á®â¦‹æ½™ã¨‹Gu곌SGI3Ië¿\\F',)t`è蘯囯ﮉ裲뇟쥼_ገ驪▵æ’ᕤV": 1.52738225997956557E18, - "^k굲䪿꠹B逤%F㱢漥O披M㽯镞竇霒i꼂焅륓\u00059=皫之눃\u2047娤é–銤唫á•b<\/w踲䔼u솆맚,ä’á³'/it": "B餹饴is権ꖪ怯ꦂẉဎt\"!凢谵⧿ï™0\\<=(uLä·åˆ¨ì‘ª>俆æ“Cy襸Q힆䆭涷<\/á±0î É§îŠ‹䗾䚹\\ኜ?ꄢᇘ`ä´¢{囇}᠈䴥X4퓪檄]ꥷ/3謒ሴn+gé¨X", - "GgG꽬[(å«“ëª6\u0004ê¶宩㙻/>\u0011^è¾dTè…ªhxÇ‘%ꊇk,8(Wâ§‚çµP鬜O": [{ - "Mã´¾c>\\ᓲ\u0019V{>ꤩ혙넪㭪躂TS-痴໸闓âµ/徯O.Mã¥Ê·D囎⧔ì³íœ¤T??鉬뇙=#ꢫ숣BXä­¼<\/d똬졬g榿)eꨋﯪ좇첻\u001a\u0011\";~쓆BH4勿”Š7힪", - "iT:L闞椕윚*æ»›gI≀Wਟඊ'ꢆ縺뱹鮚Nê©á§¬è•¼21줧\\䋯``â\\ã±é³¨": 1927052677739832894, - "ì®ç¼¦è…ƒg]礿Y㬙 fî¼ãƒºSɪ꾾N㞈": [ - null, - null, - { - "!t,çY 1䗉罵?c饃호䉂Cá­ì’˜z(즽sZG㬣sഖE4ï‚뢜㓕äžä¸®Qpç°6EZឪ겛fx'ꩱQ0ç½£i{k锩*㤴㯞r迎jTⲤ渔m炅肳": [ - -3.3325685522591933E18, - [{"ã“5]A䢕1룥Bï²C?Ꙍ`r룔Ⳛ䙡uä¼²+\u0001àµo": [ - null, - 4975309147809803991, - null, - null, - {"T팘8Dﯲ稟MM☻㧚䥧/8ﻥ⥯aXLaH\"顾S☟耲ît7fSà·‰ë†ë®”/ꕼ䓈ìº4\\霶䠴ᩢ<\/t4?죵>uDï›5➶༆쉌럮⢀秙䘥\u20972ETR3æ¿¡æ†vB? ~鸆\u0005": { - "`é––mç’㥉b뜴?Wf;?DV콜\u2020í‰à±“æ“å®ZMj3mJ먡-å‚·ë±™yח㸷꥿ ໘u=Mì!5å­L4v\\?ÇŽ7C홫": null, - "|": false, - "~Ztᛋ䚘\\æ“­ã—傪Wé™–+ã—¶qᵿ蘥ᙄp%䫎)}=â ”6ᮢS湟-èž¾-mXH?cp": 448751162044282216, - "\u209fad놹j檋䇌ᶾ梕ã‰bוּ": {"?è‹´ê© D䋓帘5騱qï±–PF?☸ç—é¡’yU á¡«cb䫎 S@㥚gꮒ쎘泴멖\\:Ié®±TZ듒ᶨQ3+f7캙\"?\fí’¾\\oæžç´Ÿï»½M.âŽï˜¸é‘OP": [ - -2.6990368911551596E18, - [{"ä’–@<á°¿<\/⽬tTrè…ž&G%᳊秩蜰擻f㎳?Sãµ§\r*k뎾-乢겹隷j軛겷0ë£é®ï µ": {")DO0è…¦:ì¶é€¿:1㥨่!è›æ¨‹2": [{ - ",ꌣf侴笾m๫ꆽ?1?U?\u0011ꌈꂇ": { - "xæ—ç” nVqä…¦w`CD⦂惺嘴0I#vỵ} \\ê·‚Së´Dì–¾?Ô’j溯\"v餄a": { - "@ç¿™c⢃趚痋i\u0015OQâlqë†Y0pࢥ3쉨䜩^<8g懥0w)]䊑næ´ºo5ì­QL댊랖L镈Qnt⪟㒅십q헎鳒⮤眉ᔹ梠@O縠u泌ㄘb榚癸Xî©­Þ”Ftj;iC": false, - "I&뱋゘|ï£è“”䔕측瓯%6á—»HW\\N1貇#?åƒá—œghá­ªo'䗈꽹Rcìš/蔳迄à¼!0邔䨷푪8ç–©)[쭶緄㇈୧á": { - "B+:ꉰ`sì¾­)ë¹¼Cç¾A䫊pMgjdxäHf9᥸W0!C樃'ï¤f䫤סи\u0017Jve? è¦f둀⬣퓉Whk\"஼=չï³î•¤çš†ç¬BIW虨쫓F廰饞": -642906201042308791, - "sb,XcZ<\/m㉹ ;ä‘·@cäµ€s奤⬷7`ꘖ蕘戚?Feb#輜}p4nH⬮eKL트}": [ - "RKé³—z=袤Pf|[,u욺", - "Ẏá»ç½¯ë‰‹âº–锅젯㷻{H䰞쬙-ì©“D]~\u0013Oã³¢gb@æ¶è”‰|kᦂâ—!\u001ebMè¤sca쨜襒y⺉룓", - null, - null, - true, - -1.650777344339075E-19, - false, - "☑lꄆs힨꤇]'uTന⌳ë†].1â‹”ê´æ²°\"IWà´©\u0019æ°œ8쟇䔻;3衲æ‹,窌zíŽå–íš—?4?Cë„é—®?ᥙ橭{稻Ⴗ_ì”", - "n?]讇빽å—}1å­…9#ê­¨é¶v\u0014å–ˆ)vw祔}룼쮿I", - -2.7033457331882025E18, - { - ";⚃^㱋x:饬ኡj'ê§µT☽O㔬RO婎?향ᒭæ©$渣y4i;(Q>꿘e8q": "j~錘}0g;Lèº*;á•­ê„®0l潛烢5H▄쳂ê’ï­‹ê™¶T犘≫x閦웧v", - "~î¢æ¯\u2018c4è·ë E~ᑅቚꈂ?nq뎤.:æ…¹`F햘+%鉎Oç€œìŸæ•›è®âŒæµ¢<\/㮺紿P鳆ࠉ8I-o?#jﮨîŸ7v3Dt赻J9": null, - "à£W䌈0êŽqC逖,íš…î·Žcáƒswj;jJSæ«5æ§—OaB>D踾Y": {"ã’°äµF%î©®?59.î„„ãˆcᕨï†í•틎á¸ã‹©B=9IÛⓌ{:9.ywï½å‘°ã†®è‚’᎒tIã¾´62\"ዃ抡C﹬B<\/ì´‹jo朣", - [ - -7675533242647793366, - {"ᙧ呃ï£:[㒺쳀쌡ì‚H稈㢤\u001dá¶—GG-{GHྻຊꡃ哸䵬;$?&d\\⥬ã“Nåœ´ë¤æŒ¨-'ê•®$î“‹PU%?冕눖ié­q騎Q": [ - false, - [[ - 7929823049157504248, - [[ - true, - "Zè™\u0017'eꕤ᱕l,0\\X\u001c[=雿8è ¬L<\/낲긯W99g톉4ퟋbãº\u0007åŠ'!麕Q궈oW:@XáŽïœ¬z蘻m絙璩귓죉+3柚怫tSæ‡è’£ä -æ“¶D[0=퉿8)q0ÙŸ", - "唉\nFA椭穒巯\\䥴䅺鿤S#bè¿…ç˜ ï¶—ê¬˜\\?q1qN犠pX꜅^䤊⛤㢌[⬛휖岺q唻ⳡí‹\"ã™™Eh@oA賑㗠yå¿…Nꊑᗘ", - -2154220236962890773, - -3.2442003245397908E18, - "Wá„¿ç­ :瘫퀩?o貸q⊻(᎞KWf宛尨h^残3[U(='æ©„", - -7857990034281549164, - 1.44283696979059942E18, - null, - {"ꫯAwè·­å–€ ?_ï““9\"Aty背F=9缉ྦྷ@;?^鞀w:uN㘢Rá»": [ - 7.393662029337442E15, - 3564680942654233068, - [ - false, - -5253931502642112194, - "ç…‰\\îš¶î¶è¾Žî›¢à³†ç½5â’­1äªäƒ‘s䎢:[e5}峳ﴱn騎3?è…³Hyêƒè†¼N潭錖,Yá‹ËœYAá“㬠bG렣䰣:", - true, - null, - { - "â’›'P&%죮|:â«¶ì¶ž": -3818336746965687085, - "钖m<\/0ÝŽMtF2Pk=瓰୮洽겎.": [[ - -8757574841556350607, - -3045234949333270161, - null, - { - "áœî…½rè¼³>⫇9hU#î¦#w@ê·ªA\\Cî’¢ é‹ºã˜“ê–æ¢’뒬묹㹻+郸å¬ìœ¤'+g<\/碴,}ꙫ>ì†;情d齆Jä¬àº©æ’›ì±íƒ¹/R澡7剌tꤼ?ặ!`â²ç¤\u00002똥଴âŸ": null, - "\u20f2ܹe\\tAê¥Æ°\\x当뿖ï»ë ‰ç¦›;G檳ﯪï…Sà«°3~㘠#[J<}{奲 5箉⨔{ë†<\/釿抋,åš /曳m&WaOvT赋皺璑ï“í…": [[ - false, - null, - true, - -5.7131445659795661E18, - "è­m䓪D5|3å©à°ž>î‰è ‡æ™¼6nï´ºPp禽羱î¤DS<ç“닫屚ì‚å§¿", - true, - [ - -8759747687917306831, - { - ">ⓛ\t,odKr{䘠?b퓸C嶈=DyEᙬï¿@ᴔ쨺芛髿UT퓻春<\/yê¸>豚W釺N뜨^?꽴﨟5殺ᗃç¿%>í‚ဿ䄸沂Ea;A_\u0005閹殀W+窊?Ꭼd\u0013Pæ±´G5ì“æ˜": 4.342729067882445E-18, - "Q^즾眆@AN\u0011Kb榰냎Y#ä€ê€’ᳺ'q暇çµs\"!3#I⊆畼寤@HxJ9": false, - "⿾D[)袨㇩i]웪䀤ᛰMvR<èŸã£¨": {"v퇓L㪱ꖣ豛톤î£\\ê³±#ï–©kDTN": [{ - "(ì¾´ä¡£,寴ph(C\"ã³¶w\"憳2s馆E!n!&柄<\/0Pꈗſ?㿳Qdéµ”": {"娇堰孹L錮h嵅⛤èºé¡’?CglNæŸ+쨣ﺜ\\MrH": {"çžäŽ‡ë‘ƒá‰²å¼­íŒ­^ꄞ踦涟XK錆쳞ឌ`;੶S炥騞ଋ褂B៎{Ú’ä­·á¶¼éœpIè—è™¶K$": [{"â—–S~躘蒉꫿輜è­Qã½™é—@ᢗ¥Eæ¦iØ¡5┄^B[絮跉ᰥé™PWi3wㄾⵀDJ9!w㞣ᄎ{ë“’ê““b6\\篴??c⼰鶹⟧\\鮇ꮇ": [[ - 654120831325413520, - -1.9562073916357608E-19, - { - "DC(æ˜è¡µá¼¡ê¸™ê°µå§­|Ö›[t": 7.6979110359897907E18, - "Jâ…))嫼â³9Xfd飉j7猬ᩉ+⤻î®çœ—벎Eé°‰Zï¾¶63zá69}Zá¶L崭ᦥ⡦éšâ‹›êŽ¨î´µ~i㨃咊ꧭo䰠阀3C(": -3.5844809362512589E17, - "p꣑팱쒬ꎑ뛡Ꙩ挴æèƒ”&7ᔈ묒4Hdç¡¶í›ãŽ–zꢼè±ã¿¢aሃ=<\/湉鵲Eî„¡Ó…%$F!í¶æ£Œå­¼{Oé§à¨ºgeu+": ")\u001bìž“kÅ€Xì©«Aë°Â®Ú£ç™¦ç‹¢)扔弒p}k縕ꩋ,䃉tࣼi", - "ã‚¡F肿輸<솄G-䢹䛸êŠl`Tqê•—îŠè’ža氷⸅ᴉ蠰]S/{J왲m5{9.uá½³~㕚㣹u>x8Uè®Bëºè¥ªç›ŽQhVS맅킃i识{벂磄Ià·„ä™…xZy/æŠà«­Zï–Šé²î¦š-霳Væ®æŒ¦â„’": null, - "㯛|Nî½™ê¸b7âµb?æ‹ O\u0014Þ†?-(EꞨ4ꕷᄤYᯕï‘OW瞺~螸\"욿ќe㺰\"'㌢ÆW\u0004çž•>0?V鷵엳": true, - "뤥G\\î¡‹è¿‹ä ¿[庩'꼡\u001aiá©®Vì¯á³ªä¦ªÃ”î²…;倱ନë›èªˆ": null, - "쥹䄆䚟Qæ¦äŽá¢­<\/2ã•£p}HW蟔|äƒî‚꿈ꚉ锳2Pb7㙑Tⅹᵅ": { - "Y?Ö­$>#cVBꩨ:>ï†eLè’å‹™": { - "86柡0po äš&-æ‘Ћ祌<\/휃-G*㶢הּì©s㶟餇c걺yu꽎還5*í„§ç°•Ogå©¥Sê": null, - "a+葞h٥ࠆ裈嗫ﵢ5輙퀟ᛜ,QDﹼ⟶Y騠锪E_|x죗jä¾µ;m蜫轘趥?븅w5+miì½›L": { - ";⯭ﱢ!ä¹°Fâ½æŸ¤é¶‚näµ£V㫚墱2ë ¾ELEl⣆": [ - true, - -3.6479311868339015E-18, - -7270785619461995400, - 3.334081886177621E18, - 2.581457786298155E18, - -6.605252412954115E-20, - -3.9232347037744167E-20, - { - "B6㊕.k1": null, - "ZAê„®Jé®·á³±o갘硥鈠䠒츼": { - "á•…}럡}.@y陪é¶r業'æ´î‰°í€‰x䉴ﵴlí˜):씭脴ᥞhiꃰblﲂ䡲엕8߇Mã¶­0燋標æŒ-?PCwe⾕J碻Ᾱ䬈䈥뷰憵賣뵓痬+": {"aì·©v礗X⋈耓áŠfç½…é®!㔽YYᣓwæ¾33⎔芲F|\"äœT↮輦挑6ᓘL侘?ᅥ]ë†1R௯✎餘6ê½<\/௨\\?qå–·ê«j~@ulq": {"嗫欆뾔Xꆹ4H㌋Fåµ§]à Ž]ã –1ꞤT<$më«O i댳0ä²iï—Œ": {"?à·©?\u20cd슮|ꯆjs{?îž…d7?eNs⢚嫥氂䡮쎱:鑵롟2hJꎒﯭ鱢3춲亄:ë¼£v䊭諱Yj択cVmR䩃㘬T\"Ní™*ै%x^F\\_s9ë³´zz4æ·—?q": [ - null, - "?", - 2941869570821073737, - "{5{殇0ä¾ïž¢g6ë°–í‹è‡©ç¶¹R$ä–­j紋釰7î‹‘sXI繳漪행y", - false, - "aH磂?뛡#惇då©…?Fe,ì˜+늵ä˜\"3r瘆唊å‹ï¢Šj⳧࠴ꇓ<\/唕윈x⬌讣䋵%拗ᛆⰿ妴á”M2ã³—å¿…ê§‚æ·²?ゥ젯檢<8ë’ï¶MidXä’3á³»Qî”â–®ä½UT|⤪봦éâŠ", - [[{ - "颉(&뜸귙{yîš’^\"P퟉ì¶á²Ÿä®­î‹ºDé¡¡9=?}Y誱<$bë±£RvO8cH煉@tk~4ǂ⤧â©å±‹Sî›ïž¢S;J{vV#剤餓ᯅc?#a6D,s": [ - -7.8781018564821536E16, - true, - [ - -2.28770899315832371E18, - false, - -1.0863912140143876E-20, - -6282721572097446995, - 6767121921199223078, - -2545487755405567831, - false, - null, - -9065970397975641765, - [ - -5.928721243413937E-20, - {"6ì´Š\u001a홯kB0w撨燠룉{绎6⳹!í„è´‘y▾鱧ժ[;7ᨷ∀*땒䪮1x霆Hᩭ☔\"rî¹›ä7毟á°r惃3ꉭE+>僒æ¾": [ - "Ta쎩aÆt쵯ⰪVb", - [ - -5222472249213580702, - null, - -2851641861541559595, - null, - 4808804630502809099, - 5657671602244269874, - "5犲﨣4mᥣ?yf젫꾯|䋬ìž$`Iⳉﴷ扳å…,'î±c", - false, - [ - null, - { - "DyUIN쎾M仼惀⮥裎岶泭lh扠\u001e礼.tEC癯튻@_Qd4cï…«5S熯A<\/ï¼¼6U윲蹴Q=%푫汹\\\u20614b[௒Câ’¥Xe⊇囙b,ï®æœ3ss땊ë¢i~逇PA쇸1": -2.63273619193485312E17, - "Mq꺋貘k휕=nKç¡ë«žè¼©>㾆~á¼žà¡¹ê¸æ¦µlâ‹™Hw뮢帋M엳뢯î¹…vâ…ƒ^": 1877913476688465125, - "á¶´ë»—`~ç­—å…⚽টW˃â½b犳䓺Iz篤p;乨A\u20efì©?ç–Šmã€ì»©ë«¡b탔鄃ᾈV(é¢ç³=뎲ିeF仢䆡谨8t0醄7㭧瘵⻰컆r厡궥d)a阄á·Ed&c﯄伮1p": null, - "â¯w4曢\"(欷輡": "\"Má­«]䣒頳B\\燧ࠃN㡇j姈g⊸⺌忉ꡥF矉স%^", - "㣡Oᄦ昵⫮Y祎Sì級㭻撥>{I$": -378474210562741663, - "䛒掷留Q%ì“—1*1J*ë“헩ᦢ﫫哉쩧EↅIcê…¡\\?â´Šl귛顮4": false, - "寔愆샠5]ä—„IHï©¥=d﯊/å¶?ॊn%晥D視Nò—˜ˆ'᫂⚦|X쵩넽z질tsî¦kxDQ莮Aoﱻ뛓": true, - "é’£xp?&\u001e侉/yä´¼~?U篔蘚缣/î”›I畚ï—?Q绊": -3034854258736382234, - "꺲໣眀)â¿·J暘î©pИfAVì‚•ì³­Nꯗ4々'唄ⶑ伻㷯騑倭D*Okï¯ê§3bâ½_ï„¡<\/ì±£Xm톰á•䆄`*fl㭀暮滠毡?": [ - "Dç”·p`V뙸擨å¿ë¸ª9c麺`淂⢦Yw⡢+kzÜ–\fY1䬡Hæ­)ë²¾Z♤溊-혰셢?1ï”<-\u0005;æ¢Tále\\ᛵߓﭩ榩è¨-xJ;å·¡8깊è ï»“U$K": { - "Vê•¡è«…æ“W=斸s︪vﲜ츧$)iꡟ싉eî®å¯³?ጭムVથ嵬iæ¥Fg<\/Z|៪ꩆ-5'@ꃱ80!燱R쇤tç³³]罛逇dṌ֣XHiͦ{": true, - "Ya矲Cë©—Q9膲墅æºíœ»c\\ë”¶Gç””<\/.齵휴": -1.1456247877031811E-19, - "z#.OOï¿J": -8263224695871959017, - "å´_3夼ᮟ1Fë¸ë½¯á¦“é´­V豈Ь": [{ - "Nè’¬74": null, - "yuB?厅vK笗!ᔸcXQ旦컶P-ë…«mᄉ麟_": "1R@ 톘xa_|﩯é˜î¥§sæ§žd!d껀筤⬫è–焵먑D{\\ïƒïŽ¿6k共倌☀G~AS_D\"딟쬚뮥馲렓쓠攥WTMÜ­8nX㩴䕅檹E\u0007ï­¨N 2 ℆æ¶ê¥ê µï“3▙玽|ë¨_\u2048", - "æA Cä§©G": {":Mí£5e들\\ê€æ¼á”„é¸|Iï¨$)n": { - "|U䬫㟯SKV6ꛤ㗮\bn봻䲄fXT:㾯쳤'笓0b/à³¢Cì³–?2浓uO.ä°´": "à½ê¼‹e?``,ᚇæ…^8ꜙNM䂱\u0001Iá–™ê§M'vKdꌊH牮r\\O@䊷ᓵ쀆(fî »yè»i툺\"?<\/峧ࣞ⓺ᤤ쵒߯ꎺ騬?)刦\u2072læ…ªy꺜ﲖTjî’•+u", - "뽫hh䈵î”w>1â²ì­V[â…Ž\\헑벑F_ã–⠗㫇hæ½;á¿æ±°á±¼ç€–J옆9RRì…vsZ柺鶶툤r뢱橾/ꉇ囦FGm\"謗ꉦ⨶쒿⥡%]鵩#ᖣ_蹎 u5|祥?O", - null, - 2.0150326776036215E-19, - null, - true, - false, - true, - {"\faá­¶Pæ¤WWcá Ÿf뚉á¬í“—â³€Wç¹5:HXH=q7xì°™X$)모r뚥ᆟ!Jﳸf": [ - -2995806398034583407, - [ - 6441377066589744683, - "Mﶒ醹i)Gἦ廃s6몞 KJ౹礎VZ螺费힀\u0000冺업{è°¥'꡾뱻:.ꘘ굄奉攼Diá·‘Ké¶²y繈욊阓v㻘}枭캗e矮1c?íœ\"4\u0005厑莔뀾墓ë‚⽴洗ṹ䇃糞@b1\u0016즽Yè½¹", - { - "1⽕⌰鉟í”M㤭n⧴ỼD#%é˜âŠ¯ì¿¼ç¨ë¸£ëªç´§á…‡ã“•ᛖcw嬀~ഌ㖓(0r⧦Qä‘•é«à´°é“‚㓻Rå„®\"@ꇱmâˆà¯¿á¦¯é Œ8}㿹犴?xn잆꥽R": 2.07321075750427366E18, - "˳b18㗈䃟柵Z曆VTAu7+㛂cb0﯑Wp執<\/臋뭡뚋刼틮è‹ë²²î·´TLP预庰܈G\\O@VD'鱃#ä¹–ëº*鑪ꬳ?MÞždï­¹{â‡åœ¯ì‡œã¼ž顄︖Y홡g": [{ - "0a,FZ": true, - "2z̬è£î’®ê§¦é©¸\u0006L↛Ḣ4๚뿀'?lcwá„§ã®!蓚䃦-|7.飑挴.樵*+1ﮊ\u0010ꛌ%貨啺/JdM:ë˜ïˆ!FBe?鰴㨗0Oè´¢I藻ʔWAá«“Gì³›u`<\/I": [{ - "$Ï„5Vé´a뾆両環iZp頻යn븃v": -4869131188151215571, - "*즢[⦃b礞Râ—šnΰꕢH=귰燙[yc誘g䆌?ଜ臛": { - "洤湌鲒)⟻\\䥳va}PeAMnï¼®[": "ã³Éª/(軆lZR,Cpæ®È®Nå•·\"3Bå©´?i=r$펽á¤ì€¸", - "阄R4㒿㯔ڀ69ZᲦ2ç™í•Œå™—På´œîž#\\-ì­è¢›îˆµ&é‘/$4ç«¥Vê©‘_ZHAæ¾¢fZ3": {"x;P{긳:Gé–‰:9?æ´»H": [ - "繺漮6?z犞焃슳\">á»[Ⳛ䌜ë…䂹>èµâ¼¶ç…œï’˜Yæ¡¥[泥뚩MvK$4ï‰jtï¾›", - "E#갶霠좭㦻ୗ먵F+䪀oè’ba쮎4X㣵 h", - -335836610224228782, - null, - null, - [ - "r1á«©0>danjYì§¿bs{", - [ - -9.594464059325631E-23, - 1.0456894622831624E-20, - null, - 5.803973284253454E-20, - -8141787905188892123, - true, - -4735305442504973382, - 9.513150514479281E-20, - "7넳$螔忷㶪}䪪lì§´\u0007é¹Pé°šHFéŠZJﳴ/âŽ1ᷓ忉ç‡áœ‹ì“ˆxëµ mä·çª¥á”^\u0019á¶Œå­#ヂt☆áƒpáŽè‡¶äŸ±5ï‰$ä°µ&๵分ìˆ]äˆë‰â™‚åŽ\u0011<>", - "C蒑貑è—lï°°}X喇몛;të°¿O7/᯹f\u0015îµ¼kI嘦<ዴ㟮ᗎZ`GWퟩ瑹࡮ᅴB꿊칈??Ræ ¡s脚", - { - "9çµæˆ¬+AU^洘拻ቒy柭床'ç²™XG鞕᠜繀伪%]hï ¾C,$è¼™?Utä¹–Qmë–šWï¶8઼}~qâ ªrU䤶CQ痗ig@#≲t샌f㈥酧l;yé—¥ZHæ–¦e⸬]j⸗?ঢ拻퀆滌": null, - "畯}ã§¢J罚å¸VX㨑>1ꢶkT⿄蘥ã‘o|<嗸層沈挄GEOM@-äžšä§°$만峬è¼ä ±V✩5宸-æ‚î¡§D'ã—ªyP掶7bâ ŸJã•»SfP?d}v㼂á…'猘": { - "陓y잀v>╪": null, - "鬿L+7:ë‘Y=ç„ U;킻䯌잫!韎ஔ\f": { - "é§«WmGጶ": { - "\\~m6ç‹©K": -2586304199791962143, - "ႜࠀ%Í‘lâ¿…D.ç‘¢Dk%0ç´ªdḨTI픸%뗜☓s榗኉\"?V籄7w髄♲쟗翛歂E䤓皹t ?)ᄟ鬲éœ6Cî³´": { - "_ì·¤a圷1\u000eB-XOy缿請∎$`쳌eZ~æï€§íŠ»/蜞`塣৙\"⪰\"æ²’l}蕌\\ë¡ƒè«æ°Œ.望wZ|o!)Hnçqg}": null, - "kOSܧ䖨钨:಼é‰ê­O醧Sî…¨`ì‹­`ꓭì­ï¯¢N&Et㺪馻ã¢â…³ã¢ºå´¡àºŠèœšé”«\\%ahx켨|ż劻ꎄ㢄ìŸA躊᰹p譞綨Ir쿯\u0016ﵚOd럂*僨郀N*bã•·63z": { - ":Lï œ5r+T㡲": [{ - "VK泓ë²á®™Ry㓤➙Ⱗ38oi}LJቨ7Ó㹡৘*q)1豢⛃e᫛뙪壥镇æž7Gè—¯g㨛oI䄽 孂L缊ꋕ'EN`": -2148138481412096818, - "`â›á˜‘$(खꊲ⤖á„ꤒ䦦3=)]Y㢌跨NĴ驳줟秠++då­³>8ᎊ떩Eê¡£Sv룃 쯫أ?#Eî·°|á­™ãŽ?zv:5ï©^â‹‘V": [ - -1.4691944435285607E-19, - 3.4128661569395795E17, - "ãƒì´—^G9ä½­é¾¶n募8R厞eEw⺡_ㆱ%⼨D뉄퉠2ê©µá›…â³æ¿L팹Là·€n=\"æ…‰ë…á›®y>!`g!í’²î¦ï¨’[/;?[vï®ê²è»‡}⤳â¤í•∌Tã½²R홓é‰ã“¥", - "æ„°_⮹T䓒妒閤둥?0î°šaB@㈧gç„»-#~è·¬x<\/èˆPÝ„ê¡=\\׳P\u0015jᳪá¢qï‹¶;ã¯l%á­—;砢觨â–,è¬ê°Gy?躤O黩í‹Yã’a擯\n7覌똟_䔡]fJ晋IAS", - 4367930106786121250, - -4.9421193149720582E17, - null, - { - ";ᄌ똾柉곟ⰺKpá‡ä±»à¸ºä–{o~h!ï½…ê¿àª»ìš„Úš\u0002y?xUd\u207c悜ꌭ": [ - 1.6010824122815255E-19, - [ - "宨︩9앉檥pr쇷?WxLb", - "æ°‡9】J玚\u000f옛呲~ è¼ 1D嬛,î•*mW3?n휂糊γ虻*á´«ê¾ ?qîžå‡è¶—Ko↦GTé“®", - "ã¶¢ážmOã”k'诔栀Z蛟}GZé’¹D", - false, - -6.366995517736813E-20, - -4894479530745302899, - null, - "V%᫡IIç’…ï»ä…›ä“Ží’¹ï±¢/pU9seë˜ë›žx梔~C)䨧䩻蜺(g㘚R?/á»°[å¿“C뾠ࢤc왈邠买?嫥挤풜隊枕", - ",vç¢å–”㌲쟚蔚톬៓ꭶ", - 3.9625444752577524E-19, - null, - [ - "kO8란뿒䱕馔b臻âŸéš¨\"㜮鲣Yq5mí”K#ꢘug㼈á¦=P^6탲@ä§”%$CqSw铜랊0&m⟭<\/a逎ym\u0013îš¡vᯗ": true, - "æ´«`|XN뤮\u0018詞=ç´©é´˜_sX)㯅鿻á»ì‹¹": 7.168252736947373E-20, - "ꛊ饤ï´è¢(逊+~⽫얢鈮ï«è‰¬O힉7Dç­—S곯wæ“I斞᠈븘蓷x": [[[[ - -7.3136069426336952E18, - -2.13572396712722688E18, - { - "ç¡¢3㇩R:o칢行E<=\u0018á¬YuH!\u00044U%å炼2>\u001eSi$â“·ê’ˆ'ï‘¿ë ¢gᙫ番ꯒ㛹럥嶀澈v;è‘·é„•x蓎\\惩+稘Uî“´Eᖸﳊ㊈壋Nå«¿â¾æŒŽ,袯苷ኢ\\x|3c": 7540762493381776411, - "?!*^á¢çª¯?\u0001ڔꙃw虜ë³îšFgJ?&⨫*uo籤:?}ꃹ=ٴ惨瓜Z媊@ત戹ã”똩Ԛ耦Wtè½\\æž’^\\ꩵ}}}ꀣD\\]6M_⌫)Hè±£:36섘㑜": { - ";í™—á°°U஋㙛`D왔ཿЃS회çˆ\u001b-㢈`ë´†?盂㛣듿ᦾ蒽_AD~EEຆ㊋(eNwk=RÉ å³­qï’«\"5Ἠ婾^>'ls\n8QAK)- Q䲌mo펹L_îŽ¦ì¹æ¨–庫9ê©ìª¹á˜¹ä‘–ç€aK îž?*趤fë­“å»p=磕", - "î“å“‘z懅á¤-ê¹ux쀭", - [ - true, - 3998739591332339511, - "ጻ㙙?᳸aK<\/囩U`B3袗ﱱ?\"/ké”ä§2ï…¤l@쿎VZ쨎/6ꃭ脥|B?31+on颼-ê®§,O嫚m à¡­`KH葦:粘i]aSUì“™$ì‚f+詛頖b", - [{"^<9<ç®&絡;%iï«¡2攑紴\\켉hì“™-柂äšven\u20f7浯-Ꮏ\r^í›ä“ší—¬\u000e?\\ã…¡ÖºJë–·VOt": [{ - "-௄å¶k㘆í˜à®½y⎱㢬sS઄+^瞥h;á¾·jî­;抭\u0003ë°«f<\/5â°§ï§§ï¡™_朻ï—%*[-撵䷮彈-芈": { - "㩩p3篊G|å®®hz䑊oê³¥j^Co0": [ - 653239109285256503, - {"ê¶²?|\":N1Û¿æ°ƒNZ#깩:쇡o8킗ࡊ[\"ë¸Po핇1(6é°$膓}â½*)渽J'DN<ì™ê¸˜æ¯¦ë²Ysì¹–": { - "2Pr?Xjㆠ?æ®/?㓦柖馃5뚣Nᦼ|é“¢rè¡´ã©–\"ç”æ¹—Üæ†": "\"뾯ië‡ç­ç‰»$ç²/4ka $åŒíœ´ï‹è¯‘zbAá©ê‡¸ç‘…&뵲衯ꎀᆿ7@ꈋ'ᶨH@á ´l+", - "7뢽ëšv?4^ꊥ_⪛.>pởr渲<\/⢕疻c\"g䇘vU剺dஔ鮥꒚(dïŸv祴Xâ¼¹\\îºa8y5å†": true, - "o뼄Bìšžç¾hrï·”í˜ë’šâ¿›U5pꪴfg!6\\\"爑ì䢱W<ï¶•î\\í…£ç‡oI/BK뺡'谑♟[Ut븷亮g(\"t⡎有?ꬊ躺ç¿è‰©nl F⤿蠜": 1695826030502619742, - "ÛŠê¹–>ࡹ햹^ⵕ쌾BnN〳2C䌕tʬ]ì° ?ݾ2饺蹳ã¶êŒ­è¨\"â—¹á¬D鯎4e滨T輀ﵣ੃3\u20f3í‚™D瘮g\\擦+泙᧠鬹ﯨַ肋7놷郟lPå†{ß’hà§œr5,ê“‹": null, - "á¿‹N$y{}2\\N﹯ⱙK'8ɜͣwt,.钟廣䎘ꆚk媄_î­®": null, - "䎥eᾆá¦î‘§ì‰,JÞªn岪ã¥sî­•æ–謽䚔5tã¯ï–µï£šã°³ã±ŠZhD䃭f絕s鋡篟îža`Q鬃┦鸳n_é‚(E4è¿ _è§…ë·_宪D(NLî²ç–¶hL追V熑%]vè‚«=惂!㇫5⬒\u001fï²å–º4랪옑": { - "2aè¼85먙R㮧㚪Sm}E2yîŠê†£ê«¨rRymã±è†¶á”¨\\tç¶¾A☰.ç„„ë™—9<쫷챻䒵셴᭛䮜.<\/慌꽒9å»Okä°ŠZ㥪幸k": [ - null, - true, - {"쌞ì": { - "â–ŸGL K2ië›±iï¼±\"Ì .옛1X$}涺]éŽæ‡ Ú¦ëŠ·?tfçŸÝžã‚Ÿ{": 1.227740268699265E-19, - "ê’¶]퓚%ฬKâ…": [{ - "(à·›@Ç®ã£ä§¼äµ¤[aテൖvEnAdUë –ë—ˆ@볓yꈪ,mÔ´|꟢ìº(而첸죕CX4Y믅": "2⯩㳿ꢚ훀~迯?᪑\\啚;4X\u20c2è¥B箹)ä¿£eá»»w䇄", - "75༂f詳䅫ê§é¿ }3\u20b5'∓ä±è™€fè¼î‘”Iq鈆﨤gí©)BFa왢d0뮪痮Mé‹¡nw∵謊;ê§f美箈ḋ*\u001cî±ïœŸ`퇚í‹ä³«$!V#N㹲抗ⱉçŽ(V嵟ï«_bã³…\u0019": null, - "e_m@(i㜀3ꦗ䕯䭰Oc+-ë ¨0뭦⢹苿蟰ê‚SVä°­å‹¢ë¥.ྈ爑Vd,á•¥=í€)vz뱊ꈊB_6듯\"?{ã’²&㵞뵫ç–ë¡ë¯ˆ%Qwé™,?\ræž®\"? N~癃ruà¡—dn&": null, - "㉹&'Pfs䑜공j<\/?|8oc᧨L7\\pXá­ 9᪘": -2.423073789014103E18, - "ä„瑄䢸穊f盈᥸,Bî§§ë¾§í‘—íšµB1쟢f\u001f凄": "é­–âš2儉j꼂긾껢嗎0ࢇ纬xI4]ï„(à©“`蕞;픬\fC\"æ–’\")2æ«·I﹥迧", - "ퟯ詔xæ‚ë ¹+T?Bg⥄섅kOeQí¼ã»´*{Eé¼6æ°¿L缋\u001c둌๶-㥂2==-츫I즃ã ï–˜Lg踞ꙂEG貨鞠\"\u0014d'.ç¼—ï¡gI-lIb䋱ᎂDy缦?": null, - "î’¢ç´Mã¦çŠ¿w浴詟棓쵫G:äœ?V2íž½7N*n&ã–ŠNd-'ຊ?-樹DIv⊜)g䑜9뉂ㄹí‘阉~ê…쵃#R^\u000bïž®B䌎䦾]p.䀳": [{"ϒ爛\"ꄱ︗竒G䃓-î†ã¾å¸³ã‚.j)qguæ‰å¾£à¨Zé¼—A9A鸦甈!kè”å–™:3Tî†%&ã ˜+,ä·ž|ì±½v䚞문H<\/醯rì…“ã¶¾\\a볜åºzEä·_죤ဵ뿰᎟CB": [ - 6233512720017661219, - null, - -1638543730522713294, - false, - -8901187771615024724, - [ - 3891351109509829590, - true, - false, - -1.03836679125188032E18, - { - "j랎:g曞ѕᘼ}链N", - -1.1103819473845426E-19, - true, - [ - true, - null, - -7.9091791735309888E17, - true, - {"}蔰鋈+ê¨å•µ0?g*사%`J?*": [{ - "\"2wG?yn,ç™·BK\\龞䑞x?è ¢": -3.7220345009853505E-19, - ";饹়â€)çš‹`噿焒j(3â¿w>å5Xè–™å©è¿3aFÆÃ": "2,ê“´g?_섦_>Y쪥션钺;=趘F~?D㨫\bX?㹤+>/믟kᠪ멅쬂Uzỵ]$ç§`mé›ç‘Šî’ඖ鯬cꙉ梢f묛bB", - "♽n$YjKiXX*GOè´©éƒè±®ç¥´éžK醞眡}ê—¨v嵎꼷0à­¸+Mè‹eH徸Jîžê£†:â¼æ‚¥B켽迚㯃bè«‚\u000bjꠜ碱逮m8": [ - "푷᣺ﻯd8ﱖ嬇ភHîªé¹Žâ¡±á±…0g:æžœ6$GQ췎{vá·§Yy-è„•xå¹ç ¡ï¨¬â®¸Cï§‚êš=軄H犠Gè°–ES詤Zè ‚3î§™lë´Ÿhï¿’7䦹1GPQG癸숟~[#é§¥8zQ뛣J소obg,", - null, - 1513751096373485652, - null, - -6.851466660824754E-19, - {"ä©‚-â´®2Ù°K솖풄꾚ႻP앳1Hî³é·›wmR䗂皎칄?醜<\/&à §ã¬X濬䵈K`vJ륒Q/IC묛!;$vÏ‘": { - "@-êš—xྐྵ@m瘬\u0010U絨ﮌé©\\켑寛넆T=tQã­¤Lì—°@脸삯e-ï–…î–‘:⩼u㎳VQ㋱襗ຓ<Ⅶ䌸cML3+\u001e_C)r\\9+Jn\\Pﺔ8蠱檾è…Pqé³è¯î¦§Tä„I": -1.80683891195530061E18, - "á·­á‹»U~ཷsgSJ`᪅'%ã–”n5픆桪砳峣3ç®æž¾äŒ·âа呀ïŒ": { - "Ş੉䓰邟自~X耤pl7间懑徛s첦5ਕXexh⬖鎥á€nNr(J컗|ૃF\"Q겮葲놔엞^겄+㈆è¯ã€¾í¬ç´G'E?飕1fâ¼í…¬æ‚šï•¦æ³¬ë¨Uç¬í›¶Qs": false, - "î³…(\u20dag8í½íŠ£>^Y{뤋.袊䂓î†;_ïg]S\u202a꽬L;^'#î—™ë•bႌ?Cç·¡<ä²ä²æ–­ê6\u001asD7IK5Wxo8\u0006på¼Šâ¼‚ê¯æ‰µ\u0003`뵂픋%ꄰ⫙ë¶lå›å°›ïˆ®+ä—…E쟇\\": [ - true, - { - "\n鱿aKã¡â’ã¼™2ì´¹f;`ì¾qIà¡”G}ã·äç“°w늮*ç²…9뒪ㄊCj倡翑閳R渚MiUO~仨䜶RꙀA僈㉋⦋n{ã–¥0딿벑î§é€¦â¥»0î¾®h薓쯴ê»": [ - 5188716534221998369, - 2579413015347802508, - 9.010794400256652E-21, - -6.5327297761238093E17, - 1.11635352494065523E18, - -6656281618760253655, - { - "": ")?", - "TWKLꑙ裑꺔UE俸塑炌Ũ᜕-ï’‚o\"徚#": {"M/癟6!oI51niíš=댡>xê¨\u0004 ?": { - "çš­": {"⢫䋖>u%wî²´ìž¼<ä•ê˜P䋵$é­‹æ‹U䮎緧皇Y훂&|羋ꋕ잿cJ䨈跓齳5\u001a삱籷I꿾뤔S8㌷繖_Yឯ䲱B턼Oæ­µF\\l醴o_欬6ç±=D": [ - false, - true, - {"Mt|êžD|Fê¶£MQ뵕T,ëºk+?ãµi": [ - 7828094884540988137, - false, - { - "!༦鯠,&aﳑ>[euJê½ç¶·æB.h": -7648546591767075632, - "-n켧嘰{7æŒæ¯„Y,>â螵煫乌pv醑Qå¶š!|âŒè²¬0왾ë¢ê…蛨S\\)ç«°'舓Q}A釡5#v": 3344849660672723988, - "8é–ªéºV=鈢1녈幬6棉⪮둌\u207d᚛驉ꛃ'r䆉æƒà¥ˆ|bἧﺢᒙ<=穊强s혧eꮿ慩⌡ \\æ§³W븧J檀C,ᘉì˜0俯퀉M;筷ࣴ瓿{늊埂鄧_4æ¸Nn阼Jੵ˥(社": true, - "oë¼€vwï…®)4A뢵(î¼±a䵢)p姃뛸\u000fK#KiQp\u0005ê…芅ì…îª": null, - "ç ¥$ꥸ┇耽uæ–®Gc{z빔깎밇\\숰\u001eê´·å„㶇쵿_á´„+hç©¢p촀Ნ䃬zäé…³Ó‚31xꔄ1_ç šWë ˜G#2葊P ": [ - -3709692921720865059, - null, - [ - 6669892810652602379, - -135535375466621127, - "뎴iO}Z? 馢녱稹ᄾä©rSt帤넆&7ié¨ë©—ç•–ï”9誧鄜'w{Ͻ^2窭외b㑎粖i矪ꦨ탪跣)KEㆹ\u0015V8[W?⽉>'kc$䨘ᮛ뉻٬M5", - 1.10439588726055846E18, - false, - -4349729830749729097, - null, - [ - false, - "_è ¢ã ^䟪/D녒㡋ỎCä’ˆíŒïŒ¢\u0006àªq@O펢%;é¹ìŒo戥~A[ꡉ濽ỳ&虃᩾è£å”™ï¤£èŒ¨Ig楡꒻M窓冉?", - true, - 2.17220752996421728E17, - -5079714907315156164, - -9.960375974658589E-20, - "ᾎ戞༒", - true, - false, - [[ - "ⶉᖌX⧕홇)g엃⹪xëšç™Ÿ\u0002", - -5185853871623955469, - { - "L㜤9ợㇶKé°â‹“V뽋˖!æ–«as|9"á¬ä†ª?î¾¶7胜&n薑~": -2.11545634977136992E17, - "O8뀩D}캖qè‚6༣ã—䈓煮å½à¨†á޼Dᣘí›;": false, - "YTá¡…^ï—Lã—ŽcbY$pᣞ縿#fh!ꘂb삵玊颟샞ဢ$ä—é¼’ëª~rkH^:닮먖츸륈⪺쒉砉?㙓扫㆕꣒`R䢱Bé…‚?C뇞<5Iޚ讳騕S瞦z": null, - "\\RB?`mG댵鉡å¹ç‰©äµŽæœ‰5*e骄T㌓ᛪç¾é§’Ku\u001a[柆jUq8⋈5鿋츿myï»—?é›ux঴?": 5828963951918205428, - "n0æ™…:黯 î¶·xu씪^퓞cB㎊á¬âº˜Ù¤Öƒ~B岚3㥕擄vᲂ~F?Cä¶–@$mï›~å¿”S왖㲚?챴⊟W#벌{'ã°Iä ç¸s樘\\X뢻9í•¡I6èㄛî‚î«8쯶]wॽ0L\"q": null, - "x增줖j⦦tä¢áŽ™ïŠ­ã›¿Yf鼘~ê«“æ„4惊\u209c": "oOhbᤃ᛽z&Bi犑\\3B㩬劇䄑oÅ쨅孥ë©àº–acA㖫借ãžvg싰샂ãœ#譞⢤@k]鋰嘘䜾L熶塥_<\/â¾å±ˆï®Š_mYè¹t뙺}Ox=wé®®4S1ê©ï¬¾'å·‘", - "㗓蟵ꂾe蠅匳(JPä—à·¸\u0089耀왲": [{ - "ᤃ㵥韎뤽\r?挥O쯡⇔㞚3ä¼–\u0005Pî•⋪\"Dê¶£QLn(⚘罩䩢Ŏv䤘尗뼤ë›O淽鋋î¡é—šrå´©a{4ç®™{煷m6〈": { - "l곺1L": { - "T'ਤ?ç …|੬Km]ä„©\"(à¿¶<\/6U爢䫈倔郴l2ã´±^줣k'Læµ–Lé°„Rp今鎗⒗Cì–¨Mí›ã¡§Î˜X粜뫈N꤇輊㌻켑#㮮샶-ä—룲è ç™œã±V>=\\I尬癤t=": 7648082845323511446, - "鋞EP:<\/_`á§e混ㇹBd⯢㮂驋\\q碽饩跓྿ᴜ+j箿ë ã—‘yK毢宸p謹h䦹乕U媣\\炤": [[ - "3", - [ - true, - 3.4058271399411134E-20, - true, - "æ€+憱f逮@먻BpW曉\u001aã£âŽŠ$n劈D枤㡞좾\u001aá›ïŒƒè‹”౩é—1B䷒Ṋ݋âžê€žêƒç£$t੤_:蘺⮼(#N", - 697483894874368636, - [ - "vᘯ锴)0訶}䳅⩚0O壱韈ߜ\u0018*Ué¾ä–=䧉뽑å•휻ID쿇嘗?ꌸῬ07", - -5.4858784319382006E18, - 7.5467775182251151E18, - -8911128589670029195, - -7531052386005780140, - null, - [ - null, - true, - [[{ - "1欯twG<\/ï†Q:0怯押殃탷è«ì‚¬<ỗꕧ蚨ä¡ï¨î³‰nDꌕ\u001cë…¬~蓩鲃g儊>ê¡l㻿/â‘·*ì±³6㻜W毤緛ﹺᨪ4\u0013뺚J髬e3쳸䘦伧?æª&{L掾p+꬜MäŠd娘6": { - "2p첼양棜h䜢﮶aQ*c扦v︥뮓kC寵횂S銩&Ç{O*य़iH`Uí…à¡“rä©•5ꄸ?`\\á§«?ᮼ?t〟崾훈kè–ì/iy꤃뵰z1<\/AQ#ë¿©8jJ1z@u䕥": 1.82135747285215155E18, - "ZdN &=dë…„á…†'ì‘â…‰:烋5&áŸï”‹á„‚汎æ¥L㯄固{é’§u\\ãŠíŠšeæ‘‘&tå—„ê–„UbâŒ?m䴘熚9EW": [{ - "ଛ{i*a(": -8.0314147546006822E17, - "⫾ꃆY\u000e+W`௸ \"Më’¶+\\ë·lKE}(NTí‚¶Yjé¸ç¯’î©¥ì¶'jNQ硾(똡\\\"逌â´y? IRꜘ὞鄬﨧:M\\fâ ‹Cꚜ쫊ᚴNV^Dä•—ã…–á¼”Iao꿬Câ8": [ - 287156137829026547, - { - "H丞N逕⯲": {"": { - "7-;枮阕梒9á‘„Z": [[[[ - null, - { - "": [[[[ - -7.365909561486078E-19, - 2948694324944243408, - null, - [ - true, - "荒\"并孷䂡쵼9o䀘F\u0002龬7⮹Wz%厖/*? a*R枈㌦ë¾g뒠䤈q딄㺿$쮸tᶎ릑弣^éŽ<\/Y鷇驜L鿽<\/ì¶‹9Mᲆឨ^<\/庲3'lë‚¢", - "c鮦\u001bë‘\\~?眾ಢu݆綑෪蘛轋◜gȃ<\/â´ƒcpkDt誩܅\"Y", - [[ - null, - null, - [ - 3113744396744005402, - true, - "v(y", - { - "AQ幆h쾜O+꺷铀ꛉ練A蚗⼺螔jãŒ3꽂楎䥯뎸먩?": null, - "蠗渗izé±–w]擪E": 1.2927828494783804E-17, - "튷|䀭n*曎b✿~æ¤U]î­¡Gz鄭kW|ã´š#㟗ഠ8u擨": [[ - true, - null, - null, - {"⾪壯톽g7?㥜ώQê‘㦀æƒã§½î“¡ä¼“\\î¦*᧰閖樧뢇赸N휶䎈pIæ°‡ï®é•Šmaᬠ탷#X?î³A+kÐM ༑᩟Ø?5꧎鰜ṚY즫궔 =ঈî³;ﳈ?*s|켦蜌wM笙莔": [ - null, - -3808207793125626469, - [ - -469910450345251234, - 7852761921290328872, - -2.7979740127017492E18, - 1.4458504352519893E-20, - true, - "㽙깹?ë¨ä†¢:ä´ŽÛ»gæ® JBTU⇞}ꄹꗣi#Iî’¡ëµ£é‰r혯~脀ìƒ#釯:场:ä”>ä°®o'ã¼½HZ擓௧nd", - [ - 974441101787238751, - null, - -2.1647718292441327E-19, - 1.03602824249831488E18, - [ - null, - 1.0311977941822604E-17, - false, - true, - { - "": -3.7019778830816707E18, - "Eå³¾æ†èŒ6xLIm縂0n2视֯J-ᤜz+ᨣè·mYDè±ç¹¹â¹ºäŠ“ëª“ï´€E(@è©®(!ï’Y膽#᎙2䟓섣A䈀㟎,囪QbKæ’wcG湎ꤧtGì—xâ¥ä¿Žj'A一ᯥ뛙6ㅑ鬀": 8999803005418087004, - "よ殳\\zDâ§…%Y泥簳Uꈩ*wîRL{3#3FYHା[d岀䉯T稉駅䞘礄P:é—ˆWæ€ElBã¤å–¬èµ”bGä ¼U଄Nw鰯闀楈ePsDꥷ꭬⊊": [ - 6.77723657904486E-20, - null, - [ - "ཚ_뷎꾑è¹q'㾱ꂓ钚蘞慵렜떆`ⴹ⎼櫯]J?[t9Ⓢ !컶躔I᮸uz>3aã •i,錃L$æ°°í…°@7ë…«W㸮?ç¾§W뇧ꃞ,î—‘N鋮숪2ɼì½â”ä²6", - "&y?뢶=킕올Za惻HZk>c\u20b58i?ꦶcfBv잉ETî…9jä¡¡", - "imçŠÕƒbì¹§æ ¡\\뼾쯀", - 9.555715121193197E-20, - true, - { - "<㫚v6腓㨭e1ã•”&&V∌ᗈT奄5Lጥ>탤?튣瑦㳆ꉰ!(ᙪ㿬擇_n쌯IMá¿‹î£ã•¨â°æ«ˆá±·5풔蟹&L.ì²½e鰷쯃劼﫭b#ï­¶í“€7ë·„Wr㢈๧Tʴશ㶑澕é%": -1810142373373748101, - "fg晌o?߲ꗄ;>C>?=鑰監侯Ktêµ…": true, - "䫡蓺ꑷ]C蒹㦘\"1à°ƒ@å‘«\u0014NLä¾egå‘®á³,r$裢k>/\\?ㄤᇰﻛ쉕1஥'ÄŠ\" \\_?쨔\"ʾr: 9Sä˜ç¦ºáª§ê„‚㲄", - [[{ - "*ç¡™^+E쌺I1䀖ju?:⦈Ꞓl๴竣迃xKC/饉:\fl\"XTFᄄ蟭,芢<\/骡軺ëœhê˜\u001f銿<棔햳▨(궆*=ä¹¥b8\\媦ä·€ë«}닶ꇭ(Kej䤑M": [{ - "1á¬?>옿Iâ•…C<ÞŽ?ꊌ冉SV5A㢊㶆z-๎玶绢2F뵨@㉌뀌oå¶”f9-庒茪ç“ë·³4": null, - ";lá°³": "CbB+è‚»aä„·è‹*/볳+/4fq=ã°h6瘉샴4é“¢Yéª.⌖@哼猎㦞+'gꋸ㒕ߤï—ãž‘(ä¶’è·²tiâ‘´aî¥ç¡‚#Noë³”", - "t?/jE幸YHT셵⩎Kî¹!Eq糦ꗣv刴w\"l$ο:=6:ç§»": { - "z]鑪醊嫗J-Xm銌ç¿çµ¨c里ëç‚™Ep㣋é£ë˜¼åšŒä€“GPï¹–cmf4é¹­T䅿꣭姧â¸wy6ꦶ;S&(}ᎧKxᾂQ|tï¹ë»³k\"d6\"|Mlì·†hwLtê¼¼4$&8Պ褵婶鯀9": {"嵃닢ᒯ'î–›dá§«ä³³#Nî‡Xe3-붋鸿î¢à¬¢ë–“î§ž%dK\u0013䲎ê–YV.裸Râ‰rR3蟛\\:ì ¯:å—ĺLʆ넕>|텩鴷矔ꋅⒹ{tå­¶ã“‘4_": [ - true, - null, - [ - false, - "l怨콈lá’", - { - "0wä²å¬§-:`䉅쉇漧\\Ü‚yㄨb%㽄j7ᦶ涶<": 3.7899452730383747E-19, - "ꯛTẀq纤qå¶Vâ¿£?\"g}ი艹(쥯B î­T騠I=仵ë°X": {"KX6颠+&á…ƒ^fç•’y[": { - "H?뱜^?꤂-⦲1a㋞&î‘®êƒç²¾Ii᤾챪咽쬘唂쫷<땡劈훫놡o㥂\\ Kâ´™Dç§¼Fæ°®[{'좴:례晰Iq+Iì­¥_T綺砸GOç…䟪ᚪ`î‘↹l羉qì¼Dê½áœ…훦: vUV": true, - "u^yï³0㱓#[y뜌앸ꊬLã·©?蕶蘾â»KӼ": -7931695755102841701, - "䤬轉車>\u001c鴵惋\"$쯃྆⇻në½€Gæ° Såª]à²²ê¨æ‡Qxኻ椕駔\\9ࣼ﫻ìœç£¡ï©ˆëºªá¶šë³l㕆t+sζ": [[[ - true, - false, - [ - null, - 3363739578828074923, - true, - { - "\"鸣詩 î›ë³°ã‘µgLã¯¦á¿…ì¶æ—«}ED辗ﮈI쀤-ꧤ|ã ¦Z\"娑ᕸ4çˆé¨ã£\"]ì³Af]茛⬻싦oèšk䢯ä©è½3廇喑ޅ": 4.5017999150704666E17, - "TYႇ7ʠ值4챳唤~Zo&Ý›": false, - "`å¡„J袛㭆ëºã³€N㺣`ê½å¶¥Kï¯SVᶔ∲퀠ç¾N딂X\"á¤hNﬨvI": {"\u20bbã­˜I䖵䰼?sw䂷쇪]î(泒f\"~;꼪FÔsá¦": {"p,'ꉂ軿=Aèš¶?bƉãµä…°è«¬'LYKL6B깯⋩겦뎙(ᜭ\u0006噣d꾆㗼Z;ä„äš”cd<情@äž‚3苼㸲U{)<6&ꩻ钛\u001au〷N숨囖愙j=BXWìš•^x芜å á¿™çˆ‚ë›·ê’»t✘Q\b": [[ - "ç±›&ଃ䩹.ꃩ㦔\\C颫#暪&!勹ꇶ놽攺J堬镙~軌C'꾖䣹㮅ï¶å²ƒá™´éµ£", - 4.317829988264744E15, - 6.013585322002147E-20, - false, - true, - null, - null, - -3.084633632357326E-20, - false, - null, - { - "\"짫愔昻 Xï«\"è—£j\"\"ë¨à½…ѻ㘤㬯0晲DU꟒㸃dë²€î¢ìœ’l䦾cà©»*3": null, - "è°ˆWm陧阦咟ฯ歖擓Nå–´ã‹éŠ­rCCnVࢥ^♼Ⅾ젲씗刊Sà¼+_tèµ”\\bäšë‰¨ê¬«6펛cL䊘᜼<\/澤pF懽&H": [ - null, - { - "W\"HDUuΌ퀟M'P4à¿°H똆ⰱﮯ<\/å‡è˜²\"C鴫ﭒж}ꭩ쥾t5yd诪ﮡí‰â´°@?æ°é†³rj4I6Qt": 6.9090159359219891E17, - "絛ﳛ⺂": {"è«°Pã—®î˜è¦`ZQ?ꫦh*à´±cbâ§±}埌茥h{棩렛툽o3é’›5é®l7Q榛6_g)ὄ\u0013kj뤬^爖eO4Ⱈ槞鉨ͺ订%qX0Tì—å«·$?\\\"봅늆'%": [ - -2.348150870600346E-19, - [[ - true, - -6619392047819511778, - false, - [[ - -1.2929189982356161E-20, - 1.7417192219309838E-19, - {"?åµ²2à¿2\u0001啑㷳c縯": [ - null, - [ - false, - true, - 2578060295690793218, - { - "?\"殃呎ïˆ#ã‘‘F": true, - "}F炊_æ®›oU헢兔êˆ,èµ­9703.Bæ•°gTz3â¬": { - "5&t3,í–“Mݸᵣ㴵;꣫ä©â†³#ï¢@ë«·ä …ï¦+W-ࣇzᓃ鿕ಔ梭?T䮑ꥬ旴]u뫵막bBè®:왳둛lEh=숾鱠på’î›î­ˆ$ì§#?gâ¹·á—Švã·µ.æ–ˆu頻\u0018-G.": "ë½™m-ouࣤ஫牷\"`Ksꕞ筼3HlȨvCï¢î›¦å ˆ\"I]㖡玎r먞#'W賜鴇k'c룼髋䆿飉㗆xgå·¤9;芔cáŒ/ax䊨♢í“rå“㸫೼䢗da᩾\"]å±£`", - ":M딪<䢥喠\u0013ã–…x9è•ã‘‚XO]f*Q呰瞊å­VP@9,㨣 D\\穎vˤƩs㜂-曱唅L걬/롬j㈹EB8g<\/ì„©o渀\"u0y&룣": ">æ°ç·©L/ä•‘ë¯êŸ˜îŸ”蕞^aBë’£+0jK⪄瑨痜LXK^힦1qK{æ·št츔X:Vm{2rçB뾄H첚7æ°¥?쉟䨗ꠂv팳圎è¸é½€\\", - "D彤5㢷Gꪻ[lㄆ@὜⓰絳[ଃç½ì®¹â˜’[*0ꑚ㜳": 9022717159376231865, - "Ò–aV銣tW+$é­¿\u20c3ïœäºœ~ë«¡ᙰ禿쨽ã¡fá¹¼zE/h": "5è‡ï’Œã‹‡á²¯ì®º? 昨탰Wム밎#'\"崲钅U?幫뺀â¾@4kh>騧\\0Ò¾EV=çˆî©®ÍŒUæ€%ꉼ 㮋<{j]{R>:gÔ©L\u001c瀈锌ﯲﳡꚒ'â«¿E4æšãŒ—뵉X\"Háœ", - "ᱚגּ;s醒}çŠSἿ㦣&{T$jkB\\\tḮ앾䤹o<é¿(tW": "vb⯽䴪䮢@|)", - "⥒í껉%惀뗌+녣迺顀qæ¢g⚯i⤭ë£Mç¹j̈́⽜A": -8385214638503106917, - "逨ꊶZ<\/W⫟솪㎮ᘇb?ê ”i\"H㧺x෷韒Xꫨฟ|]窽\u001a熑}Agn?Má¶–a9韲4$3á»´^=ì煤áë·2䣃%ï…Žé· /eQ9頸쥎", - 2398360204813891033, - false, - 3.2658897259932633E-19, - null, - "?ꚃ8Nnãž·å¹µd䲳䱲뀙ꪛQ瑓鎴]î’¶ä©‹-é°¾æ¡ï¾ä³¡??掊", - false, - -1309779089385483661, - "ᦲxu_/yecR.6èŠ.áœ‡éŽ ~", - -5658779764160586501, - "ì’Œ:æ› =lìœä¢œwk#s蕚\"互㮉m䉤~0ë“䋙#Gîš¿;h숄옥顇෤勹(C7㢅雚ã¯Lâ …VVç°…<", - null, - -4.664877097240962E18, - -4.1931322262828017E18, - { - ",": { - "v㮟麑䄠뤵g{Më®.\u001bzt뢜뵡0Ǥ龍떟Ᾰ怷ϓRT@Lꀌ樂Uã â¾•e扉|bJg(뵒㠶唺~ꂿ(땉x⻫싉ìŠ;%0鎻V(o\f,NéŠ%nk郼螺": -1.73631993428376141E18, - "쟧摑繮Q@Rᕾ㭚㾣4隅待㓎3è’Ÿ": [ - 4971487283312058201, - 8973067552274458613, - { - "`aæ™á£—î\u0015iBo¸": 4.3236479112537999E18, - "HW&퉡ãåœïŸ†Y?ç‘¡Qyí›q!帰ï©s舠㫸zêš—aSæ­²v`G株巷Jp6킼 (ê·¶é”â¾î‹¥â¡ˆ>Mæ±ãžá‰´ê™²dv@i㳓ᇆ?é»": [ - null, - 4997607199327183467, - "E㻎蠫á¾é«˜ä™Ÿè˜¬æ´¼æ—¾ï« í…›ã‡›?'M$㣒蔸=A_亀绉앭rN帮", - null, - [{ - "Eᑞ)8餧A5u&ã—¾q?": [ - -1.969987519306507E-19, - null, - [ - 3.42437673373841E-20, - true, - "eê±·Må¢\"割Pâ›í§åŽ€R䱜3ï»´Oí“«r﹉⹊", - [ - -8164221302779285367, - [ - true, - null, - "爘y^-î¬?蘞Ⲽꪓaâ…ê¨}I", - 1.4645984996724427E-19, - [{ - "tY좗⧑mrzïºã¿¥â´–᥷jè«…\u0000q賋è­êž„â®±S\nà¡£B/íƒêµª3ZÉ‘å¤o<\/;ë¡‹": null, - "彟hæµ _|V4䦭Dᙣ♞uì¿»=ì‚®ã¦\u001e哀鬌": [{"6횣楠,qʎꗇ鎆빙]ã±­R굋鈌%æ ²j分僅ペ䇰wí¦î¼‹p蛃N溈ê¡ê€?@(GI뉬$ﮄ9èªê“š2e甸ڋ[äº,\u0011\u001cࢃ=\\+衪䷨ᯕ鬸K": [[ - "ㅩ拏鈩勥\u000etgWVî–¨Xs陂è¦p狵w퓼{뮵_i\u0002ퟑႢâ¬d6é‹«F~챿æŸ\u0096äš¼1ۼ칥0꣯å„=鋷牋ⅈêžé¾", - -7283717290969427831, - true, - [ - 4911644391234541055, - { - "Iî¹éˆ’ì²½P릜朸W徨觘-HᎄíŸâ“º>8kr1{ê²µäƒã€›á¬¡Ì¨Oê·‘oä•'쿡鉕p5": "fvç²–RNçž–è›a?q꤄\u001d⸥}'ꣴ犿ꦼ?뤋?鵆쥴ë‹ä¡«s矷̄?à¶£/;괱絢oWfV<\/\u202cC,ã–¦0䑾%nè³¹g&T;|lj_欂N4w", - "짨䠗;䌕u i+rà¹0": [{"9ä¥\\à°©8\"馇z䇔<\/á‚¡Y3e狚ì¡\"ุ6ï°†Zé–c\"Ll:ïŠê®¾ç–£<\/᭙O◌납୕湞9⡳Und㫜\u0018^4pj1;ä§å„‚ä—·à­—>@e톬": { - "aâ‘‚Fé‹»Qèž°'<퇽Qè´ç€§{ᘪ,cP&~䮃Z?gI彃": [ - -1.69158726118025933E18, - [ - "ê¶‚z簽㔛㮨瘥⤜䛖Gℤ逆Y⪾j08î±²Sn昞ꘔ캻禀鴚P謦b{ê“®mNéMᥙ5\"ç2냑I\u0011.L&=?6á„ ë»·X鸌t刑\"#z)o꫚n쳟줋", - null, - 7517598198523963704, - "ኑQp襟`uá©„ræ–¹]*F48ꔵn俺ሙ9뇒", - null, - null, - 6645782462773449868, - 1219168146640438184, - null, - { - ")ယ넌竀Sdä°¾zqâ«£âŒÊ¥\u0010á¿“' |磪&p牢蔑mï³V蘸૰짬꺵;K": [ - -7.539062290108008E-20, - [ - true, - false, - null, - true, - 6574577753576444630, - [[ - 1.2760162530699766E-19, - [ - null, - [ - "顊\\憎zXB,", - [{ - "㇆{CVC9ï¼MN㜋ઘR눽#{h@ퟨ!鼚׼XOvXS\u0017á£=cS+梽៲綆16së½íœy屬?ᇳG2á´­\u00054쫖y룇nKcW̭炦s/鰘ᬽ?J|퓀髣n勌\u0010í™ P>j": false, - "ç®´": [ - false, - "éžj\"ꮾ*엇칬瘫xṬ⭽ì©äƒ³\"-⋵?ᦽ댎Ĝ": true, - "Pg帯佃籛n㔠⭹࠳ë·â‰»à¿Ÿ3ãž±ï“!î—-ì’¾!}쭪䃕!籿næ¶»J5ਲ਼yî˜vy;Rኂ%ᔡጀ裃;M⣼)쵂쑈": 1.80447711803435366E18, - "ꈑC⡂ᑆ㤉壂뎃Xub<\/쀆༈憓قì¨×§\\": [ - 7706977185172797197, - {"": {"K╥踮砆NWࡆFy韣7ä밥{|紒︧䃀榫rᩛꦡTSy잺iH8}ퟴ,M?Ʂ勺ᴹ@T@~꾂=I㙕뾰_涀쑜嫴曣8IY?Ò¿o줫fऒ}\\S\"ᦨ뵼#nDX": { - "♘k6?଱癫d68?㽚乳䬳-Vé¡·\u0005è•?\u0018䞊V{邾zã˜l]é›k臤~ൖHë’iꢥ]g?.G碄懺䔛pR$ä…’X觨lë´œA刊8R梒',}u邩퉕?;91Eî¦a䈈ë¯G⊶芔h袪&廣㺄j;ã¡ç¶½\u001bN頸쳘橆": -2272208444812560733, - "æ‹‘Wﵚî²j鵼駳Oࣿ)#ã¾…é¡‚N傓çºy僱栜'Bê-!KF*ꭇK¦?䈴^:啤wG逭w᧯": "xᣱmYe1Û@霄F$ě꧘푫O䤕í€Pq52憬ꀜ兴㑗ᡚ?ï—ƒLé·íŸî—¼ë­zJê‘™}╆ᅨJB]\"袌㺲u8䯆f", - "꿽á…㔂긱Ǧ?SI": -1669030251960539193, - "ì‡É¨`!葎>瞺瘡驷錶â¤ï»®é…œ=": -6961311505642101651, - "?f7♄꫄Jᡔ훮eì‡îª¼í¾á£ä­´KhखT;Qty}O\\|ë«Iá¿’Ne(5æƒê¥¶ã†·Y9ﮡ\\ oyâ­–-䆩å©m#xë´‰>Y鈕Eç–£s驇↙ᙰm<": {"퉻:dê‚&efᅫ쫢[ï„™\"ëˆëŠ–êº™|Ôå‰1Í–-K:Êšá­•/;ì–㷛]Iç—èŒ4gZ4âœkเꛘZ⥺\\Bʫᇩ鄨魢弞&幟ᓮ2̊盜", - -9006004849098116748, - -3118404930403695681, - { - "_彃Y艘-\"Xx㤩㳷瑃?%2ä¡éµ›o귵옔夘v*탋èŒ&㳈챗|Oé’§": [ - false, - "daꧺdᗹ羞쯧Hã¤é„³é ³<型孒ン냆㹀f4ã¹°\u000f|C*ሟ鰠(O<ꨭ峹ipຠ*yà³§4VQè””hVæ·¬{?ᵌEfrI_", - "j;ꗣ밷é‚副]á—“", - -4299029053086432759, - -5610837526958786727, - [ - null, - [ - -1.3958390678662759E-19, - { - "lh좈T_ë¯Y\"伨\u001cꔌG爔겕ꫳ晚è¸â¿»ìT䯎]~e#฽燇\"5hٔ嶰`泯r;ᗜ쮪Q):/tç­‘,榄&5ï¤ëŽ«ç‹(": [{ - "2áâ“›]r3C攟וּ9è³µsâ›”6'ஂ|\"ⵈ鶆ä¹ç¦3\"痰ࢤéœäµ©ì˜†äŒ€?æ •r7Oç°‚Isd?K᫜`^è®¶}zî°’8?zì–°î§T:X倫⨎ꑹ": -6731128077618251511, - "|︦僰~m漿햭\\Y1'Vvخ굇á‰ì±¢cè¶–": [null] - }], - "虌魿閆5⛔煊뎰㞤ᗴꥰF䮥蘦䂪樳-Ká·-(^\u20dd_": 2.11318679791770592E17 - } - ] - ] - ]}, - "묗E䀳㧯᳀逞GMc\bï•¹å¢¹ã“„ë–Æ &U??íŽŒé‘ åª‹k))ᄊ": null, - "묥7콽벼諌J_DɯﮪMæ®´ä£,煚ྼ`Y:ì”§<\/â©«%yf䦀!1á²¶kì¶ŽQç±³W∠WC跉鬽*á›±iã´•L꘻ê€ì“ª\"_gé¿„'#tâ½™?,Wg㥖|D鑆eâ¥ìª¸åƒ¬h鯔咼ඡ;4TKèŽî¾‘졠嫞" - } - ] - ] - } - ] - ] - ]}} - } - ]} - }, - "뿋뀾淣截䔲踀&XJ펖꙯^Xb訅ꫥgá¬>棟S\"혧騾밫ê²7-": "擹8C憎W\"ìµ®yR뢩浗絆䠣簿9äˆå¼•Wcy䤶孖ꯥïž;íŒ]輩ä3@{å 뽸0ï€á¡ˆìµ¡î›„Ⲇ\u001dLåŒê§2F~ݕ㪂@W^é½L襒ᦘî¢~沦zZ棸!꒲栬R" - } - ] - ], - "Z:ëƒàµ›5Iz찇䅄駠㭧蓡K1": "e8᧤좱U%?ⵇ䯿é¿\u0013縮R∱骒EO\u000fg?幤îš@֗퉙vU`", - "äƒìªˆï‘’埽້=Ij,쭗쓇చ": false - }]}} - ] - } - ]} - } - ] - ] - ], - "咰긖VM]á¼6䓑쇎çºetDÒŒ?ãžê©„퇫밉gj8è ƒ\"â©5䛹1ࣚ㵪": "ക蹊?⎲⧘⾚̀I#\"䈈⦞ë·`wo窭戕෱휾䃼)앷嵃꾞稧,Ⴆ윧9S?೗EMk3Მ3+e{â¹”Te驨7äµ’?타Ulg悳o43ï“¢" - } - ], - "zQᤚ纂땺6#ٽ﹧vï¿¿#ࠫ휊冟蹧텈ꃊʆ?&a䥯Deæ½|ì¿“pt瓞㭻啹^盚2êŠf醪,ì–T窧\\Di䕎谄nn父ꋊE": -2914269627845628872, - "䉩è·|㨻ᷢã‰B{蓧瞸`î°²I!℄욃힕#ೲᙾ竛ᔺCjk췒늕貭è¯\u0017署?W딚%(pê⤼ë³^=on뺲l䆼bzrﳨ[&j狸䠠=ᜑꦦ\u2061Õµnj=牲攑)Mî»\\é¾": false, - "뎕y絬᫡⥮Ϙᯑ㌔/NF*Ë“.ïž¿,QEzvK!Iwz?|쥾\"ê©»Lê¼—Bê”§è³´ç·œs뉣隤茛>ロ?(?^îµ­`>冺飒=噸泥⺭Ᲊ婓鎔븜z^å·è£®Ãªâ“…à»—jM7ﶕ找\\O": 1.376745434746303E-19 - }, - "ä›ræ»–wã¤,|Nዜ": false - } - ]], - "@ê¿™?è–•å°¬ gd晆(ë„5躕ﻫS蔺4)떒錸ç“?~": 1665108992286702624, - "wë¯ná =`঺ᅥC>'從ë槷ä¤çœ·èž„ãŽ»æ°æ‰°XᅧCè´½uáƒë‚ŸjKD03T!lDV쀉Ӊy뢖,袛!终캨G?鉮Q)â‘—1쾅庅O4ê‰H7?d\u0010蠈줘월Þ粯Q!낇껉6í…|{": null, - "~Ë·jg쿤촖쉯y": -5.5527605669177098E18, - "펅Wᶺzê†ã¨í‘­e?4j仪열[D<鈑皶婆䵽ehS?袪;Hê¨Më—Žã°[(å—M3qíŸg4y╸鰧茀[Bi盤~ï«å”Žé‹†å½ºî½«â¦Šq?î–³B4쉓癚O洙킋툈䶯_?ퟲ": null - } - ] - ]] - ]], - "꟱Ԕã¤7æ›ï¦—ಃéŒVä·°?v㪃૦~K\"$%请|ꇹn\"kä«›ã¨é²¨\u2023ä„¢\u0004[︊Vï‹•J?䶟ាꮈ䗱=깘U빩": -4863152493797013264 - } - ]}]} - ] - }}} - ], - "ì·ì²Û¹í‰ƒ~aEå”™a챑,9㮹gLHd'ä”|í‚—ãžäŽ¥&KZYTë§µ7䥺Nâ±³åŒèŽžé¿§w\\༌疣n/+ꎥU\"å°ëž¾â—‹íŸ™AJá­Œ?9ä›$?é©”9è®ì§˜é­¡TÖ¯cè—³`虉Cì‡ì¦T" - } - ], - "è°¶ê°œgTRï¿>áµÍšdtæ™‘ä‰‡é™æ»º}9㉸P漄": -3350307268584339381 - }] - ] - ] - ]] - ] - ], - "0y꟭馋X뱔瑇:䌚ï¿å»¿jîžg-懲鸭䷭垤㒬茭u賚찶ಽ+\\mT땱\u20821殑ã„J쩩䭛ꬿNSæ½”*d\\X,壠뒦e殟%LxG9:摸": 3737064585881894882, - "í’µO^-â§§â…¶vѪ8廸鉵㈉רâ†Q㿴뺟EႳvNM:磇>wî·/៻唎뷭୥!냹D䯙iëµ±è²C#⼉NH6`柴ʗ#\\!2ä‚—â±§f?諳.Pëˆ-è¿”I꘶6?8î“ê˜": -8934657287877777844, - "溎-è˜å¯ƒi诖ര\"æ±µ\"\ftl,?d⼡쾪⺋h匱[,à·©I8MÒ§F{kç“¿PAî…§'橸ꩯ綷퉲翓": null - } - ] - ], - "ោ係Øî½<å…ƒ": 1.7926963090826924E-18 - }}] - } - ] - ]]}] - }] - ] - ] - ] - ], - "ጩV<\"Ú¸sOᤘ": 2.0527167903723048E-19 - }] - ]} - ] - ]], - "∳㙰3ì ´pá§—ä±™?`yZA8Ez0,^á™›4_0븢\u001ft:~䎼s.bb룦明yNP8弆Cå¯;⪾ì§'蕴뮛": -6976654157771105701, - "íµê¦€\\㇑:nî‹™v+뒤燻䀪ﴣï·9ᚈ኷K㚊誦撪䚛,ꮪxሲ쳊\u0005HSf?asg昱dqꬌVꙇ㼺'k*'㈈": -5.937042203633044E-20 - } - ] - }], - "?}\u20e0],så¶³è‹@#2uì’´sQSä©—=ꥮ;烌,|ꘔ䘆": "á…©ì˜Nç’ kZ먕眻?2ቲ芋眑D륟渂⸑ﴃIRE]å•—`K'" - }}, - "쨀jmV賂ﰊå§ä‚¦çŽžã¬™áªM᪟ïՎ씜~`uOn*ॠ8\u000ef6??\\@/?9見d筜ﳋB|Sä¬è‘«ã½o": true - }, - "즛ꄤ酳艚â‚㺘봿㎨iGà§•à¡¿?1\"䘓您\u001fSáŠâº¿æºzៀ뻤B\u0019?ìœa䳵᭱䉺膷d:<\/": 3935553551038864272 - } - ] - ]} - ]] - ]] - ]} - } - ] - } - ]]}}, - "᥺3h↛!ê‹°y\"攜(ெl䪕oUkc1A㘞ᡲî촾ᣫ<\/ä’ŒEã›æ½¨i{ï  v?Wà±¾H\\RჅpzè¬R脾;v:碽✘↯삞鷱o㸧瑠jcmK7㶧뾥찲n": true, - "ⶸ?x䊺â¬-ä°…â‰!e쩆2ꎿ准G踌XXᩯ1ß}0?.í—€Z馟;稄\baDꟹ{-寪⚈ꉷ鮸_L7ƽᾚ<\u001bጨA䧆송뇵⨔\\ç¤ë—”d设룱㶉cq{Hyã±R㥽å¢ï¬…p": -7985372423148569301, - "ç·«#ì½®IB6<\/=5Eh礹\t8럭@饹韠r㰛斣$ç”LVì·a갵îŸ'请o0g:^": "䔨(.", - "ë³â„¡åœ¤pï¾à¯„Ä倧訜BìŸGä™”\"Sbâ“®;$$â–S1J뢙SF|赡gï„€*\"Vu䲌y": "䪈&í‹),\\kT鬜1í’¥;ë·´'Zေ䩹@Jéž½Nã¼M?å¥eWb6榀ƩZڮ淽⺞삳煳xჿ絯8eâ¶ç¾·V}ჿ쎱䄫R뱃9Z>'\u20f1â“•äœé½®" - } - ] - ]]] - }} - } - ] - ]}, - "펮b.hç²”í¯2npXè©«g錰鷇㇒<ì™S値bBi@?镬矉`剔}c2壧ଭfhY깨R()痩⺃a\\â”?M&ﯟ<劜꺄ï‘멊ᄟA\"_=": null - }, - "~æ½¹Rqn榢㆓aR鬨侅?䜑亡V_ç¿…ã­”(ä“·w劸á³Dp䀅<\/ï°Žé¶Šm䵱팱긽ꆘ긓准D3掱;o:_Ñœ)껚콥8곤d矦8nP倥ꃸI": null, - "뾎/Q㣩㫸벯➡㠦◕挮aé¶§â‹“å¼\u00001뱓fm覞n?㛅\"": 2.8515592202045408E17 - }], - ",": -5426918750465854828, - "2æ««@0柡g䢻/gꆑ6演&D稒肩Y?艘/놘p{f투`飷ᒉ챻ëŽîª–<늛ä˜ï´¡ì¤°ì«„": false, - "8î™–(鸑嵀⵹ퟡ<9㣎Tߗ┘d슒ل蘯&㠦뮮eà kç g ì—»": false, - "d-\u208b?0ﳮ嵙'(J`蔿d^踅⤔榥\\Jâµ²v7": 6.8002426206715341E17, - "ཎ耰í“ê•ï’ã±·\u0013y=詽I\"盈xm{0쾽倻䉚ષso#é°‘/8㸴짯%ꀄ떸b츟*\\鲷礬ZQå…©?np㋄椂榨kc᡹醅3": false, - "싊j20": false - }]] - ]], - "ä¿›\u0017nç·½Tu뫉èœé¼Ÿçƒ¬.ï‘ꭠIâ°“\"Ἀ᜾uC쎆J@å¤%ê›m뻨ᾀ画è›íœƒT:錖㑸ዚ9죡$": true - } - ] - ], - "ãµâ‡˜ê¦–辈s}㱮慀밒s`\"㞟j:`ií”»Zì„«^諎0Ok{켿æ­à·£èƒ°a2﨤[탳뚬쎼嫭뉮m": 409440660915023105, - "w墄#*ᢄ峠밮jLa`ㆪ꺊漓Lã§ëŽ!Agkï¹ï¾'ê›ë¢ƒã¯å²¬D#ã’¦": false, - "ଦPGI䕺L몥罭ꃑ궩﮶#⮈ᢓӢ䚬p7웼臧%ï‘¥~Sè âŒíž€6îž’&t䳙y㪘ëƒ\\*;é‰ï¿Šé¿µ'å—•pa\"oL쇿꬈Cgî“": "ã¶½1ç¸D⟸䴅ᆤ뉎﷛渤csî¸x ä”цꬃ锚æ¬?ຽ+x~꘩uI࡞\u0007æ ²5呚ẓem?è¢\")=㥴䨃pac!/æŽY", - "á·±o\\||뎂몷r篙|#X䦜I#딌媸픕åžRDæ–³X4t⯩夬=[ï‹ë­²r=绥jhë·±ì¸âª˜%]⚋܈㖴スHí…¹m(WOæ›åЉ0~K3c柢Õã‰ïªªé€³~": false, - "ç…½_qb[첑\\륌wEâ½Ztï”´CNï­+餌ᕜOê›­": "{ﳾ쉌&s惧á­âµ†3䢫;䨞팑ï›ê’ªí˜è¤€à¢–Qä ¿V5뭀䎂澻%ë°›u5í…¸oA⮥U㎦;B䳌wzä•™$áž¿\\௅婺ëµâª¾í†\\`Kyौꋟ._\u0006L챯l뇠Hi䧈å’5", - "艊ä½à£ƒë¡‡ä± çˆ¬ï˜‚!*;⨣æŽïžæ…“qé“|儑ᨋL+è¿¥=6㒺딉6弄3è¾…J-㕎뛄듘SG㆛(\noAzQê±ä°©X*ã¢O퀌%펠낌moí‹®a^<\/F&_눊ᾉ㨦ы4\"8H": 2974648459619059400, - "鬙@뎣䫳á®ë¡?){y?5K;î§„TA*k溱䫜J汃ꂯ싔ì\u001dA}룖(<\/^,": false, - "ëª@QꋦFꊩá’뎶î‡lXl垨4î¤^郣|ꮇ;ä´á“}ìµ²zç–": null - } - ]]]], - ":_=ë‹§å¼—D䙋暨é›. 㱻붘ä‚Jå„’&ZK/녩䪜rå›â½¯D喠죥7ï“⹌䪥c\u001a\u2076￞妈朹oLkè®F౟覛ì§ã®7T;}è›™2{9\"å´“bB<\/⡷룀;즮鿹)丒툃୤뷠5W⊢嶜(fb뭳갣": "E{å“1WM" - }}, - "䘨tjJ驳豨?y輊M*᳑梵瞻઻ofQGç‘®e": 2.222802939724948E-19, - "ä®´=â‘âž¶Tà·‹wäžœ\"垦ꃼUt\u001dx;B$뵣䙶E↌艣ᡥ!á§Ÿ;ä±€[䔯k쬃`à©8饙른ç†î‹”'2_'袻tGfè’­J땟as꯳╖&å•’zWࡇᒫYSá¬\u0014ℑ첥鈤|cG~Pá“®\">\"": "ႆl\f7V儊㦬nHꄬꨧC{ì¢~C⮃⛓嶦vꄎ1w鰠嘩뿠魄&\"_qMâµ–é‡”ë…®îœ¡ê‡ ãš{ç³Jå“‹ cî°¸v?-jkﻯྌ鹑L舟r", - "龧葆yB✱H盋夔ﶉ?n*0(": "ꧣኆ㢓氥î³qZZ酒ຜ)鮢樛)X䣆gTSî»»Ò‘Gí…žï’˜k.J圬ç–ë¡«ïœì¯­z L:\\ྤ@w炋塜쿖ᾳy뢀䶃ë±N䥨㚔勇ê²#p", - "ë„畎Q娡\"@S/뼋:äµ!Pè¡…ì´šfVHQs✜á«i㻑殡B䜇%믚k*U#濨낄~": "êŸá‹•ì³¸êˆæ•‹&lå¦\u0005憡멗瘌uPgá…ªm<\/To쯬锩h뒓k" - } - ] - }], - "墥홞r绚<\/⸹ⰃB}<躅\\Y;๑@䔸>韫䜲뱀X뗩鿥쩗SI%ﴞ㳕䛇?<\/\u00018x\\&侂9é‹™a[LRã‹­W胕)â¡¿8ãž™0JF,}?í—ˆd1cDMáƒâ›é„ⱕ%X)!XQ": "â³ê—³=橇a;3t⦾꼑仈î¥á€°aᚯ⯋ꕃAsé´·Nâ•_䎃ꙎAz\u0016䯷\\<à¿«>8q{}ï½·?ᣰ}'0ᴕ펓B┦lF#趤厃T?㕊#撹圂䆲" - }, - "Ü‹ë‹é¾«ï¥c웑": false, - "ㇿ/q\"6-co髨íœCí¦#\u001b4~?3ä¹E삇<<": 7.600917488140322E-20, - "äE6?㣖êƒé—´t祗*é‘ {ḣV(æµ¾h逇íž=W?ૉ?nꇽ8ꅉຉj으쮺@Ꚅ㰤u]Oyr": "vâ‰á«¸_*όAඤԆl)ۓᦇQ}í zà¼q滚", - "ソ᥊/넺I": true - }]] - ] - ] - ] - ]] - }, - "ä­‘Ik攑\u0002QV烄:芩.麑㟴㘨≕": true, - "å„꿕C쇻풉~å´%碼\\8\"䬦꣙": null, - "欌L圬䅘Y8c(♺2?ON}o椳s宥2䉀eJ%é—¹rå†O^K諭%凞⺉⡻,掜?$ꥉ?略焕찳㯊艼誜4?\"﯎<ï±ã‚›XáˆINT:è©“ +": -1.0750456770694562E-19, - "ç’àc뜭싼ﺳ뎤K`ïŸ]p隨LtE": null, - "ç”™8䵊神EIꩤé¯á¢€,ïµ®Uä‘u疒ử驺䚿≚ഋ梶秓F`覤è­#짾蔀묊4<åªì¬¦éª_Yzgcà¡¶î²§4kç´¥`kc[Lï®—î°£ç°*I瀑[â¾°L殽鑥_mGÈ <\/|囹ç gæ¡°iri": true, - "챓ꖙꟻì¢è‡ou,å— 0\\jK핻뜠qwQ?ഩ㼕3Y彦b\u009bJ榶N棨f?ë¦é–綃6é³µM[OEë´¨uí–.Ꮁ癜蟳뽲ꩌ뻾rM豈Rï¨ç¾« uDꎚ%": null - }, - "V傜2<": 7175127699521359521 - }], - "é“«aG切<\/\"ী⊆e<^g࢛)Dé¡ï½Žï¬®é¥¼\u008c猪繩嵿ﱚCꡬ㻊g엺Aì—¦\u000fæš¿_f꿤ë³ã¦•桦`蒦䎔j甬%å²rj ç³": "䚢åŽëˆ´Au<4箞7礦Iï±”å eȧ䪸uï„€äµp|逹$嗫쨘ꖾï·!胠z寓팢^㨔|u8Nሇe텔ꅦ抷]،鹎ã³#༔繁 ", - "낂乕ꃻ볨ϱ-ꇋã–fsâ¿«)zꜦ/K?솞♞ꑌ宭hJ᤭瑥Fu": false, - "쟰ãœé­›G\u0003u?`㾕ℾ㣭5螠烶這趩ꖢ:@å’•ê¶xë’˜ëŠmä°¨bç—ƒë 0鳊喵熬딃$摉_~7*ⱦ녯1錾GKhJ惎秴6'H妈Tᧅ窹㺒疄矤铟wላ": null, - "쯆q4!3錕ã²âµ†ã‡›ê˜·Zç‘©ë­†\\â—ªNH\u001d\\ã½°U~㯶<\"쑣낞3ᵤ'峉eꢬ;鬹o꣒木X*é•·PXᘱu\"ä ¹n惞": null, - "ᅸ祊\"&ꥴCjࢼ﴿?䡉`U效5殼㮞V昽êª#ﺸ\\&t6x꠹盥꣰a[\u001aêªSpe鎿蠹": -1.1564713893659811E-19 - } - ]] - ] - ] - ], - "羵䥳H,6ⱎ겾|@t\"#í–Šî¦1|稃 ì„­)ëœ=뻔ꡜ???櫎~*ῡ꫌/繣ﻠq": null - } - ]} - ]}, - "츤": false - }}, - "s": 3.7339341963399598E18 - } - ], - "N,I?1+㢓|ࣱ嶃쩥V2\u0012(4EE虪朶$|w颇væ­¥": "~ì¢~_,Mzrã«YB溓Eæ·š\"â…¹äˆ”áºæŠ™ b,nt5Vã’J檶ê¨â»”?", - "Q껑ꡡ}$넎qHç…”æƒ/ez^!ẳF댙äŒé¦»å‰8": "梲;yté’°$i冄}Aî‘”L%a jëœå¥·ê±³ëš¾d꿽*ሬuDY3î…—?뮟鼯뮟wãªí‹±îŸ‚V", - "o{Q/K O胟ãzUdê€m&⨺J舕â¾é­¸è¨ŸãŒ¥[T籨櫉å”í‚ aṭ뱫촙莛>碶覆⧬짙쭰ׯdAiH໥벤í¥_æ¸[ 0î­¬e:죃TCå¼¼èŽëµDA:w唵ê£": null, - "á½æ¨Žäµ®è»§|?à±—aWH쩃1 ê…­su": null - } - ] - }, - "å‹‚\\&mé°ˆJ釮=Ⲽ鳋+䂡郑": null, - "殣b綊倶5㥗惢⳷è¢á‘€ä¬„é•§M^ï±´3⣢翣næ«»1㨵}ኯ뗙顖Z.Q➷ꮨ뗇\u0004": "ê”™ä¼>n^[GीA䨟AMç¢á’ŠS쨲w?d㶣젊嘶çºéº“+æ„£a%気ྞScë“ᔘ:8bM7Xd8㶑臌]Ꙥ0ê­ì’™ä«£æŒµCè–½î€Dfⵃ떼᷸", - "?ç´¡.ì…ª_à·¨j\u0013Oxâ” $Xᶨ-á…‡oè–¹-}軫;yæ¯ãªœKã£?.EVì®±4둽⛻䤜'2盡\u001f60(|eì°ã¼Žá¦€ã’§-$l@ﻑå³\u0003ä­±å“å·—WFo5c㧆Tí„Y맸♤(": -2.50917882560589088E17 - }} - ], - "侸\\릩.᳠뎠狣살cs项䭩畳H1s瀉븇19?.w骴崖㤊h痠볭㞳㞳ä®Ql怠㦵": "@䟴-=7f", - "鹟1x௢+d ;viä­´FSDS\u0004hꎹãš?â’â¦Ñž6u,扩@ë·Su)Pag휛Tá’—Vç—©!çžé‡€ê–žè˜¥&ೞè˜ê­°êž‡áŽ": "ah懱Ժ&\u20f7䵅♎඀䞧鿪굛ౕ湚粎蚵ᯋ幌YOE)५襦ãŠY*^\"R+ඈî¶å’·è¶9î—ꥂ榨艦멎헦é–ë¶v좛咊E)K㓷ྭr", - "æ†q쮦4綱켙ì….f4<\/g<籽늷?#蚴픘:fF\u00051㹉뀭.á°–í’ŽfÖ¦Hv蔎㧤.!ä­½=éž½]ìŒH:?\"-4": 8.740133984938656E-20 - }]} - } - ], - "tVKn딩꘥⊾蹓᤹{\u0003lR꼽ᄲQFá…傅ﱋ猢⤊á”,E㓒秤nTà¶­v`â™›I\u0000]꫔ṞD\"麵cè¸î“²æ°X&æ¿¿ë˜ê£¹ê¹³à±¥è‘‚鿎\\aꡨ?": 3900062609292104525 - } - ], - "ਉ샒⊩Lu@Sä§°^g": -1.1487677090371648E18, - "⎢k⑊꬗yá«7^err糎Dt\u000bJç¤¯í™•ã†æ²‘サꋽeèµ”ã¢^J\u0004笲㿋idra剰-᪉C錇/Ĝ䂾ညSì§€?~ì½®gR敉⬹'ä§­": 1901472137232418266, - "ç—kä¶¥:?ì´½è´ì“‰ê“ˆã’¸gç˜[뵎\\胕?\u0014_榙p.j稶,$`糉妋0>Fá¡°ly㘽$?": "]ê™›O赎&#ã ƒë±å‰³î°·\"<â—†>0誉é½_|z|裵씪>áŒã¼\"Z[ç•}O?G뚇諦cs⠜撺5cuç—‘U圲\u001c?鴴計lì¶¥/╓哼䄗èŒîšªê®…뫈댽AëŒë¡–뤫V窗讬sHd&\nOi;_î´–u" - } - ], - "Uﺗ\\Y\\梷䄬~\u0002": null, - "k\"Y磓ᗔ휎@U冈<\/w컑)[": false, - "æ›Jè·âŒ»ë¦\u001f㙳s꥓âŸé‚«P늮쥄c∬ྡྷ舆렮칤Zè¶£5콡넛A쳨\\뀙骫(棻.*&è¼›LiIfi{@EA婳KᬰTXT": -4.3088230431977587E17 - }]} - ] - ], - "곃㲧<\/dఓꂟså…¶à¡§&Nè‘¶=?c㠤Ჴ'횠숄臼#\u001a~": false - } - ] - ]}] - }] - }} - ], - "2f`â½°E쵟>Jî•笂裭!〛觬囀ۺ쟰#桊l鹛ⲋ|RA_Vxá­gEë“h﵀mfá»|?juTUæ¡£[d⢼⺻p濚7E峿": 5613688852456817133 - }, - "濘ë¶gå¿®7ãµæ®¬W팕Qæ› ë«°)惃廊5%-î«è¹šzYZ樭ﴷQ锘쯤崫îŸgg": true, - "絥ᇑâ¦ì’“븣爚H.ã—Šß„o蘵貆ꂚ(쎔O᥉î¼ï®“]姨Wê“!RMA|o퉢THxè½®7Mê»U즨'i뾘舯o": "è·¥f꜃?" - }} - ], - "é·°é¹®K-9k;ï°°?_ݦѷ-ꅣ䩨Zꥱ\"mꠟ屎/콑Y╘2&鸞脇ã¢ê€‡à ºâ°¼æ‹¾å–­í‹®îL꽩bt俸墶 [l/웄\"꾦\u20d3iও-&+\u000fQ+໱뵞": -1.296494662286671E-19 - }, - "HX੹/⨇୕붷Uﮘ旧\\쾜͔3l鄈磣糂̖䟎Eá³wæ©–bá¿€_딕huè‘°î¤çª³é—¹Ð²U颵|染H죶.fPä—®:jä«¢\\b뎖i燕ꜚGâ® W-≚뉗lè¶•": "ଊ칭Oa᡺$IVã·§L\u0019脴셀붿餲햪$迳å‘ì¯ì¼‚PqfT\" ?î¹€I屉鴼쿕@ç¡™z^é•㊵M}ãš›T젣쓌-Wâ©-g%⺵<ë®±~빅╴瑿浂脬\u0005왦燲4áƒb|Då § <\/oEQh", - "䘶#㥘à©îººìº”ï” f巋ἡAJ䢚쭈ࣨ뫒*mᇊK,ࣺAꑱ\u000bR<\/A\"1a6鵌㯀bh곿w(\"$ê˜*rà²è¶£.dà¿©k/抶면䒎9W⊃9": "漩b挋Swè—Ž\u0000", - "ç•€e㨼mK꙼HglKb,\"'䤜": null - }]}] - ] - ] - }] - ]} - ] - ]} - ], - "æ­™>駿ꣂ숰Q`J΋方樛(d鱾뼣(ë«–í„­\u20f9lচ9æ­Œ8o]8윶lì–¶?é•–G摄탗6í‹íµ+g:䱫홊<멀뀿/س|ê­ºsê±è·¶ç¨šW々c㫣⎖": "㣮蔊깚Cꓔ舊|XRfé»ã†šï¸†'쾉ì·\\&言", - "æ®­\"cÞɨê™äž˜:嬮eæ½½Y펪㳅/\"O@à —ê²´]ì·–YÇž(t>R\"N?梳LDæ­=næ°¯Tè±°2R諸#N}*ç§ï¡§4}ã¶ŠGä£bì–š": null, - "襞<\/å•§ B|싞W瓇)6簭鼡艆lNì©`|펭佡\\é–“é‚[z릶&쭟愱ꅅ\\Tá°½1靝忠ˆ4̸s윜R7â’/똽?치X": "âŠèº–Cﱰ2Qẫè„&இ?%ëƒæ‚Š", - ",é°§åµì…£îˆ›ì‹¹xᎹ힨᯳EṬHïŽã¹–9": -4604276727380542356 - } - } - ]]]], - "웺㚑xs}q䭵䪠馯8?LB犯zK'osäš›HZ\"L?ì…Žs^ã¿§ã´˜Cv2": null - }] - ] - ] - ], - "Kdî©´2Kv+|z": 7367845130646124107, - "ᦂⶨ?ᢠ祂些ഷ牢㋇æ“\"腭䙾㖪\\(y4cE뽺ㆷ쫺ᔖ%zfÛ»$Ñž1柦,ã¶¢9r漢": -3.133230960444846E-20, - "ç˜Mç„€q%㢟f鸯Oâ£è“‘맕鯊$Oå™·|)z褫^㢦⠮ꚯ꫞`毕1qꢚ{ĭ䎀বώT\"뱘3G൴?ï¢ï¢^^oï…¯f": null - } - ], - "aî¶¹8V᯺?:ﺃ/8ꉿBq|9啓댚;*i2": null, - "cpT瀇Hç°á»ªpೃi鎪Rrâ£ìˆ¬-鹸ҩ䠚z脚цGoN8å…¥y%è¶ŒI┽2ឪЀiJNcN)æ§£/â–Ÿ6S숆牟\"箑X僛G殱娇葱T%æ»:J諹昰qV쨰": 8331037591040855245 - }], - "G5ᩜ䄗巢껳": true - } - }, - "Ồ巢ゕ@_è­™A`碫é„㡥砄㠓(^K": "?܃B혢▦@犑ὺD~Tâ§|é†;o=J牌9냚⢽㨘{4è§èš”9#$∺\u0016p囅\\3Xk阖⪚\"UzA穕롬✎âžã­’춺C㣌ဉ\"2瓑员ᅽê¶ë«}꽚ꞇ鶂舟彺]ê½JCè§éЉ", - "â†Äšè†\"b-í‰ACR言J謈53~V튥x䜢?ꃽɄY뮩ꚜ": "K/↾eèƒ}]Bs⾿q룅鷦-膋?m+æ­»^魊镲6", - "粡霦cæž‹AHíŸo礼Ke?qWcA趸㡔ê‚?\u000eì¶‚8iতᦜ婪\u0015㢼nﵿê»!á´é–¢\u001d5j㨻gfá¿©UK5Juä¸tã‹TI'?ã“t>⼟o a>i}á°—;뤕Ü": false, - "ꄮ匴껢ꂰ涽+䜨B蛹H䛓-k蕞fu7kLè°–,'涃V~챳逋穞cT\"vQ쓕ObaCRQã“¡â²®?轭⫦輢墳?vA餽=h䮇킵ní²í‰…喙?\"'1ç–¬V嬗Qdç—'Lự": "6v!së¯ã­Ÿî€µî¦˜ã£¯çƒ!磸餠ቂh0C뿯봗Fé·­gê–¶~コkK<ᦈTtïŽ\\è·“w㭣횋钘ᆹ듡䑚W䟾X'ê…”4ï€FL勉Vܴ邨y)2'〚쭉⽵-鞣E,Q.?å—", - "?(˧쩯@å´Ÿå‹æ­„K": null - }, - "Gc럃녧>?2DYIé´¿\\륨)æ¾”0ᔬlx'è§”7젘⤡縷螩%Sv׫묈/]↱&S ï…h\u0006æ­‹á‘›xi̘}ã²Y蔯_醨鯘煑橾8?䵎쨋z儬ê*@츾:": null - } - } - } - ] - ] - ]} - }, - "HO츧G": 3.694949578823609E17, - "QC\u0012(翻曇Tfã·ŸbGBJ옉53\\嚇ᛎDï–/\u001b夾á‰4\"í•€@祎)쫆yD\"i먎Vnî¿ã¿¿V1Wá¨ä¶€": -6150931500380982286, - "Zã“®P翸é±é‰¼K䋞꘺튿â­Y": -7704503411315138850, - "]모开ꬖP븣c霤<[3aΠ\"é»ä––䰑뮋ꤦ秽∼㑷冹T+YUt\"싳F↭ä–&鋌": -2.7231911483181824E18, - "tꎖ": -4.9517948741799555E-19, - "䋘즊îŽ.⬅IꬃۣQ챢ꄑé»|f?C⾺|å…•ì¯sC鬸섾整腨솷V": "旆柩l쪦sá–¸My㦅울ì‰ç˜—㎜檵9ï……ê‚駓ૉᚿ/u3ì”…å¾ï¤¥[Z䞸ࡗ1ꆱ&Q풘?Ç‚8\u0011BCDY2볨;é¸": null, - "幫 nç…¥sì‡íއ 왊-$C\"è¡:\u0014㣯舼.3ë™—Yl⋇\"K迎멎[ê½µs}9鉳UK8ì¥\"掄㹖h㙈!얄સ?Ꜳ봺R伕UTD媚I䜘Wé¨è”®": -4.150842714188901E-17, - "ﺯ^ã„„\b죵@fྉkf颡팋î¤êž¦{/Pm0V둳⻿/è½éŸ’ꊔᚬ@5螺G\\å’¸a谆⊪ቧ慷绖?è´¢(é·‡uéŒF=ráæ©¢áž³n:^iá´µtD볠覅Nèµ´": null - }] - }] - } - ] - ]} - ]}, - "謯?w厓奰Tï§¡í——èážè²–o⪇弒L!캶$ᆅ": -4299324168507841322, - "뺊奉_åžæµ¸å»¶ëªå­„Z舰2i$q붿좾껇d▵é¤\"v暜Ҭì„mï¿´g>": -1.60911932510533427E18 - } - ] - } - ] - ]], - "í‰êº”㠦楶Pê…±": 7517896876489142899, - "ï™°": false - } - ]}, - "是u&I狻餼|è°–j\"7cë®sï­-踳鉷`䣷쉄_A艣鳞凃*m⯾☦椿q㎭Nîœæº”铉tlㆈ^": 1.93547720203604352E18, - "ï…µkⲨ\\%vr#\u000bâ’ºY\\t<\/3﬌R訤='﹠8è¤êž´ë ´æ›”r": false - } - ]}, - "阨{c?C\u001d~K?鎌Ԭ8烫#뙣Pì´ˆé—tã­±E­ë’䆺}ç”—[R*1!\\~hã•…á°º@<9JêષIä³–æ ­6綘걹ᅩM\"▯是∔v鬽顭⋊譬": "ìš´ï¶Kæ•‚(欖C취پ℄爦賾" - } - }} - }], - "鷨赼鸙+\\ä­£t圙ڹx᜾ČN<\/踘\"S_ë§¶a鷺漇T彚⎲i㈥LT-xA캔$\u001cUH=a0츺l릦": "溣㣂0æ¿•=鉵氬駘>Pꌢpb솇쬤h힊줎çªãª¬CrQ矠a&è„꼬爼M茴/á¿®\u0017å¼è½¼y#êž c6ë‘´=?Rå´ë· éº–w?" - }, - "閕ᘜ]CT)䵞l9z'xZF{:ØI/躅匽ì¡:䟇AGF૸\u001cퟗ9)駬慟ꡒꆒRS״툋A<>\u0010\"ꂔ炃7gëšEà§îˆbꅰ輤]oã±_뷕ܘ暂\"u": "芢+U^+㢩^鱆8*1鈶鮀\u0002뺰9⬳ꪮlL䃣괟,G8\u20a8DF㉪錖0ㄤ瓶8Nଷd?眡GLc陓\\_죌Vì°à¤²äºŒ?cë¦æ± \u0019JC\u0011b⤉zẒT볕\"绣蘨뚋cꡉkî« I\u001eé³´", - "ꃣI'{6u^㡃#཰Kq4逹y൒䧠䵮!㱙ï®/n??{Lí’“ZETã™ í¿X2᩟綳跠葿㚙w཮x캽扳B唕S|å°¾}ì´•%N?o䪨": null, - "ⰴFjà·Ÿì…ˆ[\u0018è¾·px?椯\\1<ﲻ栘á£ë´¢æ† ë‰´p": -5263694954586507640 - } - ] - ]] - ]} - ]}] - ] - ], - "?#癘82禩鋆êŠty?&": -1.9419029518535086E-19 - } - ] - ] - ]} - ] - ] - ], - "훊榲.|῕戄&.ãšZꛦ2\"䢥ሆ⤢fV_æ‘•å©”?â‰Fji冀탆꜕iã¬_ẑKᅢ꫄蔻XWc|饡Siẘ^㲦?羡2ã´1ç¸á™…?ì‰Ou": false - }]] - ]}}}, - "æ…‚ë—„å“è“”á“åŒåš–/颹蘯/翻ㆼL?뇊,í…µ<\\ç·ã”Cボ": null - }, - "p溉ᑟi짣z:䒤棇r^Ù«%G9缑r砌롧.물农g?0׼ሩ4ƸO㣥㯄쩞ጩ": null, - "껎繥YxK\"F젷쨹뤤1wq轫o?鱑뜀瘊?뎃hç‘\\ꛣ}Kå³^ኖâ¤ï§´ê‰“hy": null - } - ], - "á±€nè‚“ã„›\"å »2>mæ®®'1橌%êž´êµ°=Ӳ鯨9耛<\/n據0u彘8㬇៩fá¿è¯™]嚊": "䋯쪦S럶åŒã…›#î½)O`ሀX_éªæ¸²â›€ã¨»å®…闩➈ꢙஶDRâª" - }, - "tAì“龇 â‹¥bj왎录r땽✒롰;羋^\\?툳*┎?ì€ma䵳넅U䳆૘〹䆀LQ0\bç–€U~u$M}(鵸gï­â³¾i抦뛹?䤈땚검.鹆?ê©¡tâ¶¥GÄ’;!ቹHïš©Så³»B츪ì¼f5≺": 2366175040075384032, - "ì „pJjleb]áž½": -7.5418493141528422E18, - "n.鎖ጲ\n?,$䪘": true - }, - "欈Ar㉣螵᪚茩?O)": null - }, - "쫸M#x}Dç§±æ¬K=侫们ä¸ï‡ª.KꕾxẠ\u001e㿯䣛FÜ캗ï¬qq8꟞ṢFD훎⵳簕꭛^鳜\u205cÙ«~⑟~冫ऊ2ì«°<\/戲윱o<\"": true - }, - "ã·è¥/T뱂\u0010锕|内䞇xä¾â‰¦ã­–:M?iM᣿IJeç…œdG࣯尃⚩gPt*辂.{磼럾äª@a\\袛?}ᓺBç¼": true - } - } - ]]}]}}, - "tn\"6î´ê«¤ìƒ¾ä„„;銞^%VBPwu묪`Y僑N.↺Ws?3C⤻9唩Sä ®á´m;sᇷ냞඘B/;툥B?lB∤)G+O9m裢0kC햪䪤": -4.5941249382502277E18, - "áš”t'\\æ„«?éµ€@\\ã³ê‚•Pí <<]ç…¹G-b!S?\nꖽ鼫,Ý›&é ºy踦?Eæ†î¬–릱H}햧캡b@手.p탻>췽㣬ꒅ`qeä½­P>á“‚&?u}毚ᜉ蟶頳졪áŽzl2wO": -2.53561440423275936E17 - }]} - } - ] - ]], - "潈촒⿂å¡": 5495738871964062986 - } - ]] - } - ] - ]} - ]] - ]] - ]} - ] - ]}, - "á‚qí‚è“…R`謈èŸá¦î’³å„‚æ§åƒ»ï¹¶9å©Œî¬æ«žé‡ˆ~\"%匹躾ɢ뤥>࢟瀴愅?殕节/냔O✬H鲽엢?ᮈà©î“Žâ‹§dâ½ã«zCe*": 2.15062231586689536E17, - "ã¶µUi曚ç°é‹ªá¾¼è‡§P{ä䷪쨑̟A뼿T渠誈äšD1!ìž¶<\/ã¡7?)2l≣穷᛾ç¨{:;㡹nemיּ訊`Gî¹²": null, - "䀕\"飕辭påœf#뫆䶷뛮;â›´á©3çšëá°ìŽ“â¦·è©µ%᜖Մfs⇫(\u001e~P|ï­—CⲾផv湟W첋(텪બTî¾·<บSê‰à©—⋲X婵i ӵ⇮?L䬇|êˆ?졸": 1.548341247351782E-19 - } - ] - }, - "t;:N\u0015qé¦Rt缆{ê®C?஛㷱敪\\+鲊㉫㓪몗릙ç«(æ°µkYS": "Xá°‚T?൮ô", - "碕飦幑|+ 㚦é¶`é•¥ê© B<\/加륙": -4314053432419755959, - "秌孳(p!G?Vå‚«%8ሽ8w;5鲗㦙LI檸\u2098": "zG N볞䆭éŽí˜\\ONK3íš™<\/樚立圌Q튅k쩎Ffì‹aׂJK銆ઘì¦ç‹©6༥✙䩜篥CzP(è»é§‡HHퟲ讃%,ά{ë p而刲vy䦅ክ^톺M楒é¢ã¹³]Mdg2>䤉洞", - "踛Mì §>忔芿㌜Zk": 2215369545966507819, - "ì”A`$æ§­é °í»^U覒\bG毲aᣴU;8!팲f꜇E⸃_åµ{å«ç¾ƒX쀳C7ë—®m(åš¼u NÜè°ŸD劯9]#": true, - "ﻩ!뵸-ç­šPá­›}á¼°å±¥lPh?౮ⶹꆛ穉뎃gè‘㑓溢CX뾇Gã–¬A錟]RKï’î´²aꄘ]Yo+@ä˜'s섎襠$^í™°}F": null - }, - "粘ꪒ4HXᕘ蹵.$å€\r\u001dë¬77pPc^yî¶ç¬²Q<\/ê–¶ è¨äƒá¨•G?*": 1.73773035935040224E17 - }, - "婅拳?bkU;#D矠â´vVN쩆t㜷A풃갮娪a%é®çµª3dAv룒#tm쑬⌛qYwc4|L8KZ;xU⓭㳔밆拓EZ7襨eD|隰ऌ䧼u9Ô¢+]è´´Pè¿": 2.9628516456987075E18 - }]}}] - ]} - }} - ]}] - ], - "|g翉F*湹̶\u0005â1脉̀eI쩓ᖂ㫱0碞l䴨ꑅ㵽7AtἈ턧yq䳥塑:z:é€ï¾¼X눔擉)`N3昛oQì…–y-ڨ⾶æ¢êˆµq^<\/": null, - "è¹\\ëž“G^璬x৴뭸ゆUSê²§ï®·Bꮤ ┉銜᯻0%N7}~fæ´‹å„Xꔼ<\/4妟Vꄟ9:౟곡t킅冩䧉笭裟炂4ë´‹â±³åºæ€Št+怯涗\"0ã–ˆHq": false, - "졬믟'ﺇফ圪쓬멤m邸QLà¦¬ä—æ„4jvsç¿™ à¾ê§€è‰³H-|": null, - "컮襱⣱뗠 R毪/鹙꾀%í—³8&": -5770986448525107020 - } - ], - "î½­B䔚bê»ë™å§“展槰T-똌鷺tcï§ç¿á«½^㓟ä€o3o$꘭趙è¬Ié¡©)뇭Ἑä“\f@{ᣨ`x3è”›": null - } - ] - ] - }], - "⦖扚vWꃱ꥙㾠壢輓{-⎳鹷è´ç’¿äœ‘bG倛â‹ç£Žc皇皩7a~ﳫUâ•£Q࠭ꎉS摅姽OW.홌ೞ.": null, - "蚪eVlH献r}á®ë¯ ï°©ê”„@ç‘„â²±": null, - "퀭$JWoê©¢gì—­ì䖔㑺h&à­¢tXX愰㱇?㾫I_6 OaB瑈q裿": null, - "꽦ﲼLyr纛ZduçB絟쬴糔?ã•‚ì§¹äµe": "ḱ\u2009cX9ë©€i䶛簆㳀k" - } - ]]]], - "(_ê®g່澮?ᩑyM<艷\u001aꪽ\\庼뙭Zë§·ã°©Vm\\lYç­º]3㋲2㌩㄀Eਟäµâ¨„ì¨á”ŸgङHné–⤇놋瓇Q탚單oY\"♆臾jHᶈå¾îž«á‰„??uㇰA?#1侓": null - }, - "è§“^~ሢ&iIë†g륎ḱ캀.ᓡꀮ胙鈉": 1.0664523593012836E-19, - "yè©­GbᔶऽsëŒU:æœî „⤎ϲì—⮼D醄诿që™°I#즧v蔎xHᵿt᡽[**?崮耖p缫쿃Lè,ë´¬ï–ꤦC쯵#=X1çž»@OZc鱗CQTï‹„x": null - } - ] - }}], - "剘ç´\u0004\\Xn⊠6,á€×±;嵣崇}讃iႽ)d1\\䔓": null - }, - "脨z\"{X,1uì°œ<'k&@?1}Yn$\u0015Rd輲ーa쮂굄+B$l": true, - "諳>*ì­®ê´äµŸÒ+<ç®}빀䅱⡔æªï€è‡’hIH脟ꩪCí•ଗP좕\"0i<\/C褻DÛžæ—+^5?'ꂱ䚫^7}ã¡ cq6\\쨪ꔞꥢ?纖䫀氮蒫侲빦敶q{Aç…²G": -6880961710038544266 - }}] - }, - "5s⨲JvಽῶꭂᄢI.aà§Š": null, - "?1qê½ì¿»ê›‹DR%Uå¨>DgNä¹­G": -1.2105047302732358E-19 - } - ] - ]}, - "qZz`撋뙹둣j碇ì\\ꆥ\u0018@ïœè—´ç–°Wz)O{Fä¶›l᷂绘訥$]ë®å¤»ä¢‹ä©‡è¿ç°æ¨§çŒµâ£­jè¶q)$꬚⵷0馢W:â°!Qoe": -1666634370862219540, - "t": "=î¹›wp|~碎Q鬳Ó\\l-<\/^ﳊhní–}ä”t碵ḛ혷?é»äŠ—", - "邙쇡㯇%#=,î‰E4勃驆V繚q[Y댻XV㡸[逹á°è‘¢B@u=JS5?bLRnì–®ã‰â…ï°³?a6[&íŸ!è—ˆ": 1.2722786745736667E-19 - }, - "X블땨4{ph鵋ꉯ웸 5p簂䦭s_E徔濧dç¨~No穔噕뽲)뉈c5M윅>âš‹[岦䲟懷æ?éŽê“†à¸¬çˆ‹ç äœ”s{\u001bméšå„¸ç…›%bﯿXT>ê—˜@8G": 1157841540507770724, - "媤娪Qæ¸ï‡\u0011SAyᡈ쿯": true, - "çš^ಸ%ê±<\/蛯?\"祴å“\\\\'í": -3.4614808555942579E18, - "釴U:O湛㴑䀣렑縓\ta)(j:숾å´ä—ŒgCiB뽬Oyuqè¼¥åŽ/7)?今hY︺Q": null - } - ] - ]]]}] - ], - "I笔趠Ph!<ཛྷ㸞诘X$畉F\u0005笷èŸ.Esr릙!W☆ï›ä²–뗷莾뒭U\"䀸犜Uo3ï¯Gꯌx4r蔇᡹㧪쨢準<ä‚€%ࡡꟼç‘8ç‚Xs0ä€é”€?fi쥱ê†àª²BB": -8571484181158525797, - "Lâ¦o#J|\"⽩-ã±¢d㌛8d\\㶤傩儻E[Y熯)r噤὘勇 }": "e(濨쓌K䧚僒ã˜è ¤Vᛸ\"络QJL2,嬓ì™î¿‰ä¼¢ã‹’䴿考澰@(ã¾`kX$ë‘ÑE斡,èœ&~y", - "vj.|统圪ᵮPL?2oŶ`ë°§\"勃+0ue%⿥绬췈체$6:qaë Q;~晘3㙘鹑": true, - "à·Ø™4ç„â¶¿c︋iâš…:ã‚“é–Ⳙ苆籦kw{䙞셕pCì·ƒê¬âœêŸ¯êš“é…„bížhwkê­­M鬋8B耳쑘WQ\\å™ac'唀x᪌\u2048*hì§Ž#á‡é® ë¾áž¿ë€Œ": false, - "⎀jꄒ牺3Ⓝ컴~?親ꕽã¼Ü“å–瘘!@<튋ãŒê¿±â©¦{a?Yv%⪧笯Uܱ栅Eæši뚬:ꄃx7䙳ꦋ&䓹vq☶Iä˜á¾˜æ¶œ\\ì‰ëºŒLr%Bcãœ3?î¤ï…¨ê­ç ¿è£ž]": null, - "⭤뙓z(ã¡‚%亳K䌽꫿AԾ岺㦦㼴輞낚Vꦴw냟鬓㹈뽈+o3è­»K1ìžž": 2091209026076965894, - "ㇲ\t⋇轑ꠤ룫X긒\"zoYì‡í¬wjæ¢ì‘l侸`e%s": -9.9240075473576563E17, - "啸ꮑ㉰!áš“}éŠ": -4.0694813896301194E18, - "ï‰>]囋੽EK뇜>_ꀣ緳碖{ì裔[<ನ\"䇅\"5L?#îµ³xTwv#ç½\u0005래t应\\N?빗;": "v쮽瞭pë­ƒ" - } - ]], - "æ–´æ§¾?Zç¿\"~æ…弞ﻆ=꜡o5é‹ï’½dw\"?Kè ¡i샾ogDï²°_C*⬟iㇷ4nયèŸ[㟉U꽌娛苸 à§æ“贻洞펻)쿗૊許X⨪VY츚Zä¾ã¶­~튃ᵦ<\/E臭tve猑x嚢": null, - "锡⛩<\/칥ꈙᬙè€&êšç±¬â– 865?_>Lè©ì¿¨äˆŒæµ¿å¼¥ï©‰Ì«î¾½ï‘lj&zx<\/C쉾?覯n?": null, - "꾳鑤/꼩ï¨d=ᘈn挫ᑩ䰬ZC": "3錢爋6Ƹ䴗v⪿Wr益G韠[\u0010å±—9ì¡é’u?殢c䳀蓃樄욂NAq赟c튒ç˜ë ¶î‚³Aà«¡Éšæ" - } - ] - ] - ]} - ] - ] - }]]]}} - ]}], - "ï‚’Ejä—³U<\/Q=ç’샎䞦,å °é  @褙g_\u0003ꤾfâ¶½?퇋!łB〙ד3CC䌴鈌U:뭔咎(Qો臃䡬è‹BO7î¼§ã¢äŸ¸\"Yb": 2.36010731779814E-20, - "逸'0å²”j\u000e눘먷翌C츊秦=ꭣ棭ှ;鳸=麱$XP⩉駚橄A\\좱⛌jqvä°ž3Ь踌v㳆¹gT┌gvLBè³–ïžçƒ¡m?@E঳i": null - }, - "曺vì°˜×?&绫OáŸ": 9107241066550187880 - } - ] - ], - "(e屄\u0019昜훕ç–b蓘ᬄ0/۲묇Z蘮á€â¨è›˜èƒ¯ë¢ƒ@㘉8ሪWᨮ⦬ᅳ䅴HIá‡ì¨³z囕陻엣1赳o": true, - ",b刈Z,á æ™Tì†Å•B⩆ou'í¼â‰ƒç»—é›—dè­Š": null, - "a唥KB\"ï³è‚•$u\n^â…„P䟼냉䞸⩪u윗瀱ꔨ#yÅŸsî««ê’¬=ï‹•1ïš–|ﲤ爢`tà±íмî£ì³«_Az(Ṋ擬㦷좕耈6": 2099309172767331582, - "?ã´¸U<\/䢔ꯡ阽扆ã¤qé‹?f㔫wM嬙-;UV죫嚔픞G&\"Cá—äªí’ŠQ": "VM7ç–¹+陕枡툩窲}ç¿¡ä–¶8欞ÄsTë®}ç’¤:jﺋ鎴}HfAàµâ§»Zd#Qï¬u茅J髒皣Y-︴[?-~쉜vë”璮㹚䅊﩯<-#\u000eê±€h\u0004u抱﵊㼃U<㱷⊱IC進" - }, - "숌dee節é½é‚ºp넱蹓+e罕U": true - } - ], - "b⧴ë£??á” 3ã±>%郿劃ç¿ê¬ê ›Wï¡°çž³á«ëˆ„躨狀ໄy੽\"ីuS=㨞馸k乆E": "トz݈^9R䬑<ﮛGRꨳ\u000fTT泠纷꽀MRᴱ纊:ã ­ë³®?%N56%鈕1ä—äœaä²—j陇=ë¿»å‚衋࿘ᓸ?ᕵZ+<\/}H耢bä€z^f$&ã’LkꢳI脚뙛u": 5.694374481577558E-20 - }] - } - ]], - "obj": {"key": "wrong value"}, - "퓲꽪m{ã¶©/뇿#â¼¢&᭙硞㪔E嚉c樱㬇1aç¶‘á–DḾä©": null - } -} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.yelp.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.yelp.json deleted file mode 100644 index ff3d8c3..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass.yelp.json +++ /dev/null @@ -1 +0,0 @@ -{"message": {"text": "OK", "code": 0, "version": 1.1000000000000001}, "businesses": [{"rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4_half.png", "country_code": "US", "id": "7vqUGG9ZBZKOjOFPs8lEgQ", "is_closed": false, "city": "San Francisco", "mobile_url": "http://mobile.yelp.com/biz/7vqUGG9ZBZKOjOFPs8lEgQ", "review_count": 223, "zip": "94103", "state": "CA", "latitude": 37.775596, "rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4_half.png", "address1": "1168 Folsom St", "address2": "", "address3": "", "phone": "4155031033", "state_code": "CA", "categories": [{"category_filter": "beer_and_wine", "search_url": "http://www.yelp.com/search?find_loc=1168+Folsom+St%2C+San+Francisco%2C+CA+94103&cflt=beer_and_wine", "name": "Beer, Wine & Spirits"}, {"category_filter": "wine_bars", "search_url": "http://www.yelp.com/search?find_loc=1168+Folsom+St%2C+San+Francisco%2C+CA+94103&cflt=wine_bars", "name": "Wine Bars"}], "photo_url": "http://static.px.yelp.com/bpthumb/QS62ET0YNIqDYzQlmeKtRQ/ms", "distance": 0.54462140798568726, "name": "The City Beer Store & Tasting Bar", "neighborhoods": [{"url": "http://www.yelp.com/search?find_loc=SOMA%2C+San+Francisco%2C+CA", "name": "SOMA"}], "url": "http://www.yelp.com/biz/the-city-beer-store-and-tasting-bar-san-francisco", "country": "USA", "avg_rating": 4.5, "longitude": -122.40933699999999, "photo_url_small": "http://static.px.yelp.com/bpthumb/QS62ET0YNIqDYzQlmeKtRQ/ss", "reviews": [{"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/CjwEJm0_LW7l3Gtc96Nq_A/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4.png", "rating": 4, "mobile_uri": "http://mobile.yelp.com/biz/7vqUGG9ZBZKOjOFPs8lEgQ?srid=prmIARCGNmaIKQj-szj0FQ", "url": "http://www.yelp.com/biz/the-city-beer-store-and-tasting-bar-san-francisco#hrid:prmIARCGNmaIKQj-szj0FQ", "user_url": "http://www.yelp.com/user_details?userid=LnZUtFx6qTWs8NV6lAARxQ", "text_excerpt": "Not that I need to remind people of this awesome place, but I need to really drop some knowledge: It's cheaper to have a specialty brew here than to go to...", "user_photo_url": "http://static.px.yelp.com/upthumb/CjwEJm0_LW7l3Gtc96Nq_A/ms", "date": "2009-04-18", "user_name": "Lisa N.", "id": "prmIARCGNmaIKQj-szj0FQ"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/fXjNyGsXPVjIHk46Y5dPrA/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/7vqUGG9ZBZKOjOFPs8lEgQ?srid=5U87A3dHbLN55unJLj0VjQ", "url": "http://www.yelp.com/biz/the-city-beer-store-and-tasting-bar-san-francisco#hrid:5U87A3dHbLN55unJLj0VjQ", "user_url": "http://www.yelp.com/user_details?userid=XDQCUG6dB_NntrZNsn5Frw", "text_excerpt": "Once in a while, I come across a place that I hesitate to write a review, because I want it to be a secret . . . because it is such a rare treasure. . .The...", "user_photo_url": "http://static.px.yelp.com/upthumb/fXjNyGsXPVjIHk46Y5dPrA/ms", "date": "2009-04-12", "user_name": "Su K.", "id": "5U87A3dHbLN55unJLj0VjQ"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/Wzjwe41JVxcJ8S1T6FMJlQ/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/7vqUGG9ZBZKOjOFPs8lEgQ?srid=OhJUOg-CPz6JPs9l6p8xZg", "url": "http://www.yelp.com/biz/the-city-beer-store-and-tasting-bar-san-francisco#hrid:OhJUOg-CPz6JPs9l6p8xZg", "user_url": "http://www.yelp.com/user_details?userid=kzkAXy9mJS6gMljzC4xGXw", "text_excerpt": "This place absolutely rules! Forget BevMo or any other half assed excuse of a liquor store for trying to find the dankest of the dank.\n\nYou want REAL...", "user_photo_url": "http://static.px.yelp.com/upthumb/Wzjwe41JVxcJ8S1T6FMJlQ/ms", "date": "2009-04-10", "user_name": "Gary T.", "id": "OhJUOg-CPz6JPs9l6p8xZg"}], "nearby_url": "http://www.yelp.com/search?find_loc=1168+Folsom+St%2C+San+Francisco%2C+CA+94103"}, {"rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4_half.png", "country_code": "US", "id": "bJm7lxFjXPTg1yJ3WBikMg", "is_closed": false, "city": "San Francisco", "mobile_url": "http://mobile.yelp.com/biz/bJm7lxFjXPTg1yJ3WBikMg", "review_count": 332, "zip": "94109", "state": "CA", "latitude": 37.787863000000002, "rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4_half.png", "address1": "620 Post St", "address2": "", "address3": "", "phone": "4156743567", "state_code": "CA", "categories": [{"category_filter": "wine_bars", "search_url": "http://www.yelp.com/search?find_loc=620+Post+St%2C+San+Francisco%2C+CA+94109&cflt=wine_bars", "name": "Wine Bars"}], "photo_url": "http://static.px.yelp.com/bpthumb/K7_INof0EiUXR52hv5jfiQ/ms", "distance": 0.97077900171279907, "name": "The Hidden Vine", "neighborhoods": [{"url": "http://www.yelp.com/search?find_loc=Civic+Center%2FTenderloin%2C+San+Francisco%2C+CA", "name": "Civic Center/Tenderloin"}, {"url": "http://www.yelp.com/search?find_loc=Nob+Hill%2C+San+Francisco%2C+CA", "name": "Nob Hill"}], "url": "http://www.yelp.com/biz/the-hidden-vine-san-francisco", "country": "USA", "avg_rating": 4.5, "longitude": -122.41209499999999, "photo_url_small": "http://static.px.yelp.com/bpthumb/K7_INof0EiUXR52hv5jfiQ/ss", "reviews": [{"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/yswMVVQ6HUVHHrs_5H5GPw/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/bJm7lxFjXPTg1yJ3WBikMg?srid=EHIPPWgySoXzd_YJpkjqyA", "url": "http://www.yelp.com/biz/the-hidden-vine-san-francisco#hrid:EHIPPWgySoXzd_YJpkjqyA", "user_url": "http://www.yelp.com/user_details?userid=M_4EmxzznybTzMwT7FDg_g", "text_excerpt": "I better write this before I forget about going here and how good it was. Too late! It's almost a fading memory. \n\nI do remember several kinds of wine,...", "user_photo_url": "http://static.px.yelp.com/upthumb/yswMVVQ6HUVHHrs_5H5GPw/ms", "date": "2009-04-16", "user_name": "Michael M.", "id": "EHIPPWgySoXzd_YJpkjqyA"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/g9ivlET2xM1MFi_C_Ktrbg/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4.png", "rating": 4, "mobile_uri": "http://mobile.yelp.com/biz/bJm7lxFjXPTg1yJ3WBikMg?srid=0SEtOwc5fxrk9E4BzOX3Lg", "url": "http://www.yelp.com/biz/the-hidden-vine-san-francisco#hrid:0SEtOwc5fxrk9E4BzOX3Lg", "user_url": "http://www.yelp.com/user_details?userid=mg4gZL6QRMSX-lnLFyEKAg", "text_excerpt": "Best most quaint wine bar in town, try a flight of red or white, and enjoy the music and cozy European-style ambiance.", "user_photo_url": "http://static.px.yelp.com/upthumb/g9ivlET2xM1MFi_C_Ktrbg/ms", "date": "2009-04-16", "user_name": "PJ T.", "id": "0SEtOwc5fxrk9E4BzOX3Lg"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/afmXmGSDfksrEhrEJauNJw/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/bJm7lxFjXPTg1yJ3WBikMg?srid=A3dtzAGxYjRb5lh1mUSOhg", "url": "http://www.yelp.com/biz/the-hidden-vine-san-francisco#hrid:A3dtzAGxYjRb5lh1mUSOhg", "user_url": "http://www.yelp.com/user_details?userid=qD51vvp5Zf5DgPEGy7yfDQ", "text_excerpt": "The terms, \"cozy\" and \"intimate\" have been used frequently in the reviews, and I can't think of better descriptives for The Hidden Vine. For a perpetual...", "user_photo_url": "http://static.px.yelp.com/upthumb/afmXmGSDfksrEhrEJauNJw/ms", "date": "2009-04-15", "user_name": "Marsha Z.", "id": "A3dtzAGxYjRb5lh1mUSOhg"}], "nearby_url": "http://www.yelp.com/search?find_loc=620+Post+St%2C+San+Francisco%2C+CA+94109"}, {"rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4_half.png", "country_code": "US", "id": "rPwB56EQ9JfEo2mN24fqOQ", "is_closed": false, "city": "San Francisco", "mobile_url": "http://mobile.yelp.com/biz/rPwB56EQ9JfEo2mN24fqOQ", "review_count": 63, "zip": "94122", "state": "CA", "latitude": 37.765385700000003, "rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4_half.png", "address1": "1849 Lincoln Way", "address2": "", "address3": "", "phone": "4152429930", "state_code": "CA", "categories": [{"category_filter": "sportsbars", "search_url": "http://www.yelp.com/search?find_loc=1849+Lincoln+Way%2C+San+Francisco%2C+CA+94122&cflt=sportsbars", "name": "Sports Bars"}, {"category_filter": "pubs", "search_url": "http://www.yelp.com/search?find_loc=1849+Lincoln+Way%2C+San+Francisco%2C+CA+94122&cflt=pubs", "name": "Pubs"}], "photo_url": "http://static.px.yelp.com/bpthumb/Qi-qAAMOBSuXunNQMb2ttw/ms", "distance": 3.2772026062011719, "name": "Chug Pub", "neighborhoods": [], "url": "http://www.yelp.com/biz/chug-pub-san-francisco", "country": "USA", "avg_rating": 4.5, "longitude": -122.4780387, "photo_url_small": "http://static.px.yelp.com/bpthumb/Qi-qAAMOBSuXunNQMb2ttw/ss", "reviews": [{"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/hYTM9RV4e8642z2NCNty2A/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4.png", "rating": 4, "mobile_uri": "http://mobile.yelp.com/biz/rPwB56EQ9JfEo2mN24fqOQ?srid=jLYJ2se_DN73QiAogNfnJQ", "url": "http://www.yelp.com/biz/chug-pub-san-francisco#hrid:jLYJ2se_DN73QiAogNfnJQ", "user_url": "http://www.yelp.com/user_details?userid=RjQkoF8llTiXoO1bc4gOMQ", "text_excerpt": "Okay, so we met a couple of girls who brought us to this place late Monday night.... we got closed out on the other restaurant and we wanted to have a few...", "user_photo_url": "http://static.px.yelp.com/upthumb/hYTM9RV4e8642z2NCNty2A/ms", "date": "2009-04-08", "user_name": "John R.", "id": "jLYJ2se_DN73QiAogNfnJQ"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/nXk12V7x30v9LUoTye0gsw/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/rPwB56EQ9JfEo2mN24fqOQ?srid=kZgc0_KkkGy0cmi2C7fEHA", "url": "http://www.yelp.com/biz/chug-pub-san-francisco#hrid:kZgc0_KkkGy0cmi2C7fEHA", "user_url": "http://www.yelp.com/user_details?userid=ipleTHGh9KR8hO5U1yxzXw", "text_excerpt": "I'm all for phallic innuendo. The sexual implications of beer bongs is not lost on me and I adore the flavor of Blowjobs and yes I do like whipped cream on...", "user_photo_url": "http://static.px.yelp.com/upthumb/nXk12V7x30v9LUoTye0gsw/ms", "date": "2009-04-06", "user_name": "jay h.", "id": "kZgc0_KkkGy0cmi2C7fEHA"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/QNtJA5nm_FuSnwTzVcXhag/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4.png", "rating": 4, "mobile_uri": "http://mobile.yelp.com/biz/rPwB56EQ9JfEo2mN24fqOQ?srid=o45vWqKfPlGTSaYwK7Ziug", "url": "http://www.yelp.com/biz/chug-pub-san-francisco#hrid:o45vWqKfPlGTSaYwK7Ziug", "user_url": "http://www.yelp.com/user_details?userid=21SRsnSJqvk3gWXY1iDRiQ", "text_excerpt": "This is a great place to go for nachos. They also have a great special. Last time I was there it was a shot of Cobo Wabo and a Pabst for $6. It has a...", "user_photo_url": "http://static.px.yelp.com/upthumb/QNtJA5nm_FuSnwTzVcXhag/ms", "date": "2009-03-17", "user_name": "Jared S.", "id": "o45vWqKfPlGTSaYwK7Ziug"}], "nearby_url": "http://www.yelp.com/search?find_loc=1849+Lincoln+Way%2C+San+Francisco%2C+CA+94122"}, {"rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4_half.png", "country_code": "US", "id": "z_kf-vKkCLI1WTnEBSPudw", "is_closed": false, "city": "San Francisco", "mobile_url": "http://mobile.yelp.com/biz/z_kf-vKkCLI1WTnEBSPudw", "review_count": 68, "zip": "94103", "state": "CA", "latitude": 37.786693, "rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4_half.png", "address1": "757 Market St.", "address2": "Inside The Four Seasons", "address3": "", "phone": "4156333000", "state_code": "CA", "categories": [{"category_filter": "lounges", "search_url": "http://www.yelp.com/search?find_loc=757+Market+St.%2C+San+Francisco%2C+CA+94103&cflt=lounges", "name": "Lounges"}], "photo_url": "http://static.px.yelp.com/bpthumb/anR-QVqjMYDupPLYJ5lqwQ/ms", "distance": 1.1350789070129395, "name": "The Bar At The Four Seasons", "neighborhoods": [{"url": "http://www.yelp.com/search?find_loc=SOMA%2C+San+Francisco%2C+CA", "name": "SOMA"}, {"url": "http://www.yelp.com/search?find_loc=Union+Square%2C+San+Francisco%2C+CA", "name": "Union Square"}], "url": "http://www.yelp.com/biz/the-bar-at-the-four-seasons-san-francisco", "country": "USA", "avg_rating": 4.5, "longitude": -122.404662, "photo_url_small": "http://static.px.yelp.com/bpthumb/anR-QVqjMYDupPLYJ5lqwQ/ss", "reviews": [{"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_3.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/t4zvXYHqYmm-QW0-Te2j1g/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_3.png", "rating": 3, "mobile_uri": "http://mobile.yelp.com/biz/z_kf-vKkCLI1WTnEBSPudw?srid=1IlPciKzq2Z0SZrsLSANsA", "url": "http://www.yelp.com/biz/the-bar-at-the-four-seasons-san-francisco#hrid:1IlPciKzq2Z0SZrsLSANsA", "user_url": "http://www.yelp.com/user_details?userid=UBAfc-KuDXV8XLurou_i6g", "text_excerpt": "Love the wine selection and \"lambsicles\"...Dee lish! \n\nFour Seasons pricing but of course ;) but a nice place to grab drinks with a few friends or larger...", "user_photo_url": "http://static.px.yelp.com/upthumb/t4zvXYHqYmm-QW0-Te2j1g/ms", "date": "2009-04-06", "user_name": "Abby W.", "id": "1IlPciKzq2Z0SZrsLSANsA"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4.png", "user_photo_url_small": "http://static.px.yelp.com/static/20090416/i/new/gfx/blank_user_extra_small.gif", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4.png", "rating": 4, "mobile_uri": "http://mobile.yelp.com/biz/z_kf-vKkCLI1WTnEBSPudw?srid=oia-XcRxPrqwx11GtCuw8Q", "url": "http://www.yelp.com/biz/the-bar-at-the-four-seasons-san-francisco#hrid:oia-XcRxPrqwx11GtCuw8Q", "user_url": "http://www.yelp.com/user_details?userid=1O1MfZlHbQx_U5G47a90JA", "text_excerpt": "This would be a 5, but I did not really like the dried peas and spicy almonds. Other than that the service was a 5. Wish i could remember the waitresses...", "user_photo_url": "http://static.px.yelp.com/static/20090416/i/new/gfx/blank_user_small.gif", "date": "2009-03-23", "user_name": "Michael T.", "id": "oia-XcRxPrqwx11GtCuw8Q"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/3loDhmkFIGyUQDATuo6e1Q/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4.png", "rating": 4, "mobile_uri": "http://mobile.yelp.com/biz/z_kf-vKkCLI1WTnEBSPudw?srid=Ez_hn7-Kor2EZ38lO37jMQ", "url": "http://www.yelp.com/biz/the-bar-at-the-four-seasons-san-francisco#hrid:Ez_hn7-Kor2EZ38lO37jMQ", "user_url": "http://www.yelp.com/user_details?userid=rdSJ_jlij_2x5glkrEEZxg", "text_excerpt": "My second favorite hotel cocktail bar! \n\nThe old man inside of me loves that I can go drink here with friends, meet a date, or even stop in for a proper...", "user_photo_url": "http://static.px.yelp.com/upthumb/3loDhmkFIGyUQDATuo6e1Q/ms", "date": "2009-03-15", "user_name": "Sean W.", "id": "Ez_hn7-Kor2EZ38lO37jMQ"}], "nearby_url": "http://www.yelp.com/search?find_loc=757+Market+St.%2C+San+Francisco%2C+CA+94103"}, {"rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4_half.png", "country_code": "US", "id": "QCQ3WN7hd9xMPs2_ycHa_A", "is_closed": false, "city": "San Francisco", "mobile_url": "http://mobile.yelp.com/biz/QCQ3WN7hd9xMPs2_ycHa_A", "review_count": 160, "zip": "94112", "state": "CA", "latitude": 37.714413999999998, "rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4_half.png", "address1": "1166 Geneva Ave", "address2": "", "address3": "", "phone": "4159631713", "state_code": "CA", "categories": [{"category_filter": "divebars", "search_url": "http://www.yelp.com/search?find_loc=1166+Geneva+Ave%2C+San+Francisco%2C+CA+94112&cflt=divebars", "name": "Dive Bars"}, {"category_filter": "soulfood", "search_url": "http://www.yelp.com/search?find_loc=1166+Geneva+Ave%2C+San+Francisco%2C+CA+94112&cflt=soulfood", "name": "Soul Food"}], "photo_url": "http://static.px.yelp.com/bpthumb/ANbY5m01ROgbtzteMQNIxw/ms", "distance": 4.2946634292602539, "name": "Broken Record", "neighborhoods": [], "url": "http://www.yelp.com/biz/broken-record-san-francisco", "country": "USA", "avg_rating": 4.5, "longitude": -122.43676000000001, "photo_url_small": "http://static.px.yelp.com/bpthumb/ANbY5m01ROgbtzteMQNIxw/ss", "reviews": [{"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/lLF6FjlIh_9itgOeqvjW6w/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/QCQ3WN7hd9xMPs2_ycHa_A?srid=0xMF-emnZXwMxpLdx7AmeQ", "url": "http://www.yelp.com/biz/broken-record-san-francisco#hrid:0xMF-emnZXwMxpLdx7AmeQ", "user_url": "http://www.yelp.com/user_details?userid=k4oMdCSDqa_1iP3hVaozZA", "text_excerpt": "Seriously, the food here is amazing. I recently tried out the smoked tofu sandwich! OMG, it is OFF THE CHIZZAIN!\n\nIt reminded me of a Bahn Mi aka Vietnamese...", "user_photo_url": "http://static.px.yelp.com/upthumb/lLF6FjlIh_9itgOeqvjW6w/ms", "date": "2009-04-16", "user_name": "Sheila S.", "id": "0xMF-emnZXwMxpLdx7AmeQ"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_3.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/5ZWqY4DRQ3X67uEbiFBv9Q/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_3.png", "rating": 3, "mobile_uri": "http://mobile.yelp.com/biz/QCQ3WN7hd9xMPs2_ycHa_A?srid=VZ50hhJuPJwjHF2t9UZ0HA", "url": "http://www.yelp.com/biz/broken-record-san-francisco#hrid:VZ50hhJuPJwjHF2t9UZ0HA", "user_url": "http://www.yelp.com/user_details?userid=P7_vx8jtm7tNz38N1H1NWw", "text_excerpt": "Yes, yes, I know -- when in the Excelsior, it's the only game in town, as R and I found out only too well tonight when we committed the unspeakable sin of...", "user_photo_url": "http://static.px.yelp.com/upthumb/5ZWqY4DRQ3X67uEbiFBv9Q/ms", "date": "2009-04-15", "user_name": "Chad P.", "id": "VZ50hhJuPJwjHF2t9UZ0HA"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/static/20090416/i/new/gfx/blank_user_extra_small.gif", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/QCQ3WN7hd9xMPs2_ycHa_A?srid=KA6C2DQShJhY4TQIT9Whbw", "url": "http://www.yelp.com/biz/broken-record-san-francisco#hrid:KA6C2DQShJhY4TQIT9Whbw", "user_url": "http://www.yelp.com/user_details?userid=fjNmLQcw2oSYhUASdlo27w", "text_excerpt": "You can expect all levels of comfort and excitement from the first and last time you come here. Meeting unforgettable people such as Bret (the lively, yet...", "user_photo_url": "http://static.px.yelp.com/static/20090416/i/new/gfx/blank_user_small.gif", "date": "2009-04-08", "user_name": "Kristoffer C.", "id": "KA6C2DQShJhY4TQIT9Whbw"}], "nearby_url": "http://www.yelp.com/search?find_loc=1166+Geneva+Ave%2C+San+Francisco%2C+CA+94112"}, {"rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4_half.png", "country_code": "US", "id": "kM64kcWiK3TqhB0HeAUGeg", "is_closed": false, "city": "San Francisco", "mobile_url": "http://mobile.yelp.com/biz/kM64kcWiK3TqhB0HeAUGeg", "review_count": 114, "zip": "94123", "state": "CA", "latitude": 37.798518000000001, "rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4_half.png", "address1": "1514 Union St", "address2": "", "address3": "", "phone": "4159282414", "state_code": "CA", "categories": [{"category_filter": "pubs", "search_url": "http://www.yelp.com/search?find_loc=1514+Union+St%2C+San+Francisco%2C+CA+94123&cflt=pubs", "name": "Pubs"}], "photo_url": "http://static.px.yelp.com/bpthumb/_Q0KPbKmAgQeLrcOgajjwA/ms", "distance": 1.6471928358078003, "name": "The Black Horse London Pub", "neighborhoods": [{"url": "http://www.yelp.com/search?find_loc=Marina%2FCow+Hollow%2C+San+Francisco%2C+CA", "name": "Marina/Cow Hollow"}], "url": "http://www.yelp.com/biz/the-black-horse-london-pub-san-francisco", "country": "USA", "avg_rating": 4.5, "longitude": -122.42431500000001, "photo_url_small": "http://static.px.yelp.com/bpthumb/_Q0KPbKmAgQeLrcOgajjwA/ss", "reviews": [{"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/vAKX9CLC4EJDm9X_YvP4WQ/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/kM64kcWiK3TqhB0HeAUGeg?srid=henYRKh-HFv-f0q25OrK-A", "url": "http://www.yelp.com/biz/the-black-horse-london-pub-san-francisco#hrid:henYRKh-HFv-f0q25OrK-A", "user_url": "http://www.yelp.com/user_details?userid=xZ1htr_9ZiOamddSoDWMqw", "text_excerpt": "Finding a place like this is why I am addicted to yelping. I am visiting the city for a conference and I wanted to find some local flavor and stay away...", "user_photo_url": "http://static.px.yelp.com/upthumb/vAKX9CLC4EJDm9X_YvP4WQ/ms", "date": "2009-04-18", "user_name": "Juliana M.", "id": "henYRKh-HFv-f0q25OrK-A"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_1.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/9s2WKYMKnCM4FwBLNTifyA/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_1.png", "rating": 1, "mobile_uri": "http://mobile.yelp.com/biz/kM64kcWiK3TqhB0HeAUGeg?srid=bwfzeVc_6gto9kFN_dXwZw", "url": "http://www.yelp.com/biz/the-black-horse-london-pub-san-francisco#hrid:bwfzeVc_6gto9kFN_dXwZw", "user_url": "http://www.yelp.com/user_details?userid=K1NLdTfT1IizE-6smhsSug", "text_excerpt": "REALLY??? I've been coming here for the last 8 or so years and I have never seen such a horrible sight before in such a beautiful place...PBR cans on the...", "user_photo_url": "http://static.px.yelp.com/upthumb/9s2WKYMKnCM4FwBLNTifyA/ms", "date": "2009-04-16", "user_name": "Creamy A.", "id": "bwfzeVc_6gto9kFN_dXwZw"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/wwoUpPp1AG2REqM-tONdYw/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4.png", "rating": 4, "mobile_uri": "http://mobile.yelp.com/biz/kM64kcWiK3TqhB0HeAUGeg?srid=Zau3gO0fZmnLrwf_MeDDVQ", "url": "http://www.yelp.com/biz/the-black-horse-london-pub-san-francisco#hrid:Zau3gO0fZmnLrwf_MeDDVQ", "user_url": "http://www.yelp.com/user_details?userid=dpEtyfB2o7MH1Mc_Ygoolg", "text_excerpt": "I came here for the first time last night and it's a really cool place. James was bartending and he's a really friendly guy. I tried the Kasteel Cru -- a...", "user_photo_url": "http://static.px.yelp.com/upthumb/wwoUpPp1AG2REqM-tONdYw/ms", "date": "2009-04-07", "user_name": "Aaron V.", "id": "Zau3gO0fZmnLrwf_MeDDVQ"}], "nearby_url": "http://www.yelp.com/search?find_loc=1514+Union+St%2C+San+Francisco%2C+CA+94123"}, {"rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4_half.png", "country_code": "US", "id": "5Ebc8-ecaLuaLDjKnmY7eg", "is_closed": false, "city": "San Francisco", "mobile_url": "http://mobile.yelp.com/biz/5Ebc8-ecaLuaLDjKnmY7eg", "review_count": 43, "zip": "94109", "state": "CA", "latitude": 37.79712, "rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4_half.png", "address1": "2211 Polk St", "address2": "", "address3": "", "phone": "4156732211", "state_code": "CA", "categories": [{"category_filter": "divebars", "search_url": "http://www.yelp.com/search?find_loc=2211+Polk+St%2C+San+Francisco%2C+CA+94109&cflt=divebars", "name": "Dive Bars"}], "photo_url": "http://static.px.yelp.com/bpthumb/IXDxbdklFZPJOHHM2rSzVw/ms", "distance": 1.5348267555236816, "name": "Cresta's Twenty Two Eleven Club", "neighborhoods": [{"url": "http://www.yelp.com/search?find_loc=Russian+Hill%2C+San+Francisco%2C+CA", "name": "Russian Hill"}], "url": "http://www.yelp.com/biz/crestas-twenty-two-eleven-club-san-francisco", "country": "USA", "avg_rating": 4.5, "longitude": -122.42204099999999, "photo_url_small": "http://static.px.yelp.com/bpthumb/IXDxbdklFZPJOHHM2rSzVw/ss", "reviews": [{"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_1.png", "user_photo_url_small": "http://static.px.yelp.com/static/20090416/i/new/gfx/blank_user_extra_small.gif", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_1.png", "rating": 1, "mobile_uri": "http://mobile.yelp.com/biz/5Ebc8-ecaLuaLDjKnmY7eg?srid=PLzThYFVEqlMWIp1j8FVjA", "url": "http://www.yelp.com/biz/crestas-twenty-two-eleven-club-san-francisco#hrid:PLzThYFVEqlMWIp1j8FVjA", "user_url": "http://www.yelp.com/user_details?userid=QmmdnVRrxAZLm76-8OTD7Q", "text_excerpt": "The youngish female bartender is a bitch!", "user_photo_url": "http://static.px.yelp.com/static/20090416/i/new/gfx/blank_user_small.gif", "date": "2009-04-02", "user_name": "Adrian B.", "id": "PLzThYFVEqlMWIp1j8FVjA"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/iAufJ9qyXdH0n36yWkOCag/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4.png", "rating": 4, "mobile_uri": "http://mobile.yelp.com/biz/5Ebc8-ecaLuaLDjKnmY7eg?srid=EsRVbt4a0PVZLVQJcqslwg", "url": "http://www.yelp.com/biz/crestas-twenty-two-eleven-club-san-francisco#hrid:EsRVbt4a0PVZLVQJcqslwg", "user_url": "http://www.yelp.com/user_details?userid=1D5EQITb4hOzPMZT8gDPQQ", "text_excerpt": "This place kind of makes me laugh, probably because I never would have known how it existed until I discovered it in a pretty unusual way... So I was...", "user_photo_url": "http://static.px.yelp.com/upthumb/iAufJ9qyXdH0n36yWkOCag/ms", "date": "2009-02-08", "user_name": "Krista S.", "id": "EsRVbt4a0PVZLVQJcqslwg"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/S1x1MObQYQTRCrcxwal8Dw/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4.png", "rating": 4, "mobile_uri": "http://mobile.yelp.com/biz/5Ebc8-ecaLuaLDjKnmY7eg?srid=Bzq9fk2KAlSDNJYoYZwzSA", "url": "http://www.yelp.com/biz/crestas-twenty-two-eleven-club-san-francisco#hrid:Bzq9fk2KAlSDNJYoYZwzSA", "user_url": "http://www.yelp.com/user_details?userid=xADAW32u15sgA18Hfy9PsQ", "text_excerpt": "where everybody knows your name.\n\nwell, they're not mindreaders... so they don't know your name cause you haven't been there. if you have been there, then...", "user_photo_url": "http://static.px.yelp.com/upthumb/S1x1MObQYQTRCrcxwal8Dw/ms", "date": "2009-01-19", "user_name": "Kevin F.", "id": "Bzq9fk2KAlSDNJYoYZwzSA"}], "nearby_url": "http://www.yelp.com/search?find_loc=2211+Polk+St%2C+San+Francisco%2C+CA+94109"}, {"rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4_half.png", "country_code": "US", "id": "3K82F5PA3OSU8-LzWDfgHg", "is_closed": false, "city": "San Francisco", "mobile_url": "http://mobile.yelp.com/biz/3K82F5PA3OSU8-LzWDfgHg", "review_count": 138, "zip": "94110", "state": "CA", "latitude": 37.739147000000003, "rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4_half.png", "address1": "424 Cortland Ave", "address2": "", "address3": "", "phone": "4156473099", "state_code": "CA", "categories": [{"category_filter": "gaybars", "search_url": "http://www.yelp.com/search?find_loc=424+Cortland+Ave%2C+San+Francisco%2C+CA+94110&cflt=gaybars", "name": "Gay Bars"}, {"category_filter": "divebars", "search_url": "http://www.yelp.com/search?find_loc=424+Cortland+Ave%2C+San+Francisco%2C+CA+94110&cflt=divebars", "name": "Dive Bars"}], "photo_url": "http://static.px.yelp.com/bpthumb/zYyt2w6e_gBAOmIVBUqRPA/ms", "distance": 2.4808199405670166, "name": "Wild Side West", "neighborhoods": [{"url": "http://www.yelp.com/search?find_loc=Bernal+Heights%2C+San+Francisco%2C+CA", "name": "Bernal Heights"}], "url": "http://www.yelp.com/biz/wild-side-west-san-francisco", "country": "USA", "avg_rating": 4.5, "longitude": -122.41716, "photo_url_small": "http://static.px.yelp.com/bpthumb/zYyt2w6e_gBAOmIVBUqRPA/ss", "reviews": [{"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/l80OO5ruhFcYFiUjNX-Y9w/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4.png", "rating": 4, "mobile_uri": "http://mobile.yelp.com/biz/3K82F5PA3OSU8-LzWDfgHg?srid=qfBP6DYib_Jq97XZdSKqRg", "url": "http://www.yelp.com/biz/wild-side-west-san-francisco#hrid:qfBP6DYib_Jq97XZdSKqRg", "user_url": "http://www.yelp.com/user_details?userid=IUEkE8T7SvEw4LXSWSOknw", "text_excerpt": "This place is fun if you want to go and chill and have a conversation. Say...for a first date. I recommend going early (so maybe a place to go before you...", "user_photo_url": "http://static.px.yelp.com/upthumb/l80OO5ruhFcYFiUjNX-Y9w/ms", "date": "2009-04-15", "user_name": "Heather S.", "id": "qfBP6DYib_Jq97XZdSKqRg"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/static/20090416/i/new/gfx/blank_user_extra_small.gif", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/3K82F5PA3OSU8-LzWDfgHg?srid=sZcTfRdns9N9o6rsCbmEqA", "url": "http://www.yelp.com/biz/wild-side-west-san-francisco#hrid:sZcTfRdns9N9o6rsCbmEqA", "user_url": "http://www.yelp.com/user_details?userid=_Dv1gLCvRlrLTxxP5TX8GA", "text_excerpt": "Wild Side has a great vibe. Been going there for years and love the outdoor spaces, particularly the back patio in the afternoon on a sunny day. The...", "user_photo_url": "http://static.px.yelp.com/static/20090416/i/new/gfx/blank_user_small.gif", "date": "2009-04-06", "user_name": "Armand C.", "id": "sZcTfRdns9N9o6rsCbmEqA"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_3.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/bxtZFTMp6Lib0xWcVNywwQ/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_3.png", "rating": 3, "mobile_uri": "http://mobile.yelp.com/biz/3K82F5PA3OSU8-LzWDfgHg?srid=t6CLo9DTqlAB1WQ0xGBwKw", "url": "http://www.yelp.com/biz/wild-side-west-san-francisco#hrid:t6CLo9DTqlAB1WQ0xGBwKw", "user_url": "http://www.yelp.com/user_details?userid=9-y579gMphAItFxc9XA8yQ", "text_excerpt": "I like this place enough - it has a nice backyard.\n\nBut sometimes you never know what you're going to get here. I went here for my birthday last year and...", "user_photo_url": "http://static.px.yelp.com/upthumb/bxtZFTMp6Lib0xWcVNywwQ/ms", "date": "2009-04-05", "user_name": "Whitney D.", "id": "t6CLo9DTqlAB1WQ0xGBwKw"}], "nearby_url": "http://www.yelp.com/search?find_loc=424+Cortland+Ave%2C+San+Francisco%2C+CA+94110"}, {"rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4_half.png", "country_code": "US", "id": "GTy7Up0mCTDoYpu0gLsUOQ", "is_closed": false, "city": "San Francisco", "mobile_url": "http://mobile.yelp.com/biz/GTy7Up0mCTDoYpu0gLsUOQ", "review_count": 61, "zip": "94109", "state": "CA", "latitude": 37.7864990234375, "rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4_half.png", "address1": "768 Geary Street", "address2": "", "address3": "", "phone": "4154419336", "state_code": "CA", "categories": [{"category_filter": "divebars", "search_url": "http://www.yelp.com/search?find_loc=768+Geary+Street%2C+San+Francisco%2C+CA+94109&cflt=divebars", "name": "Dive Bars"}], "photo_url": "http://static.px.yelp.com/bpthumb/1aK0JUrH9QLrmn76RnlxNA/ms", "distance": 0.81350231170654297, "name": "Geary Club", "neighborhoods": [{"url": "http://www.yelp.com/search?find_loc=Civic+Center%2FTenderloin%2C+San+Francisco%2C+CA", "name": "Civic Center/Tenderloin"}, {"url": "http://www.yelp.com/search?find_loc=Nob+Hill%2C+San+Francisco%2C+CA", "name": "Nob Hill"}], "url": "http://www.yelp.com/biz/geary-club-san-francisco", "country": "USA", "avg_rating": 4.5, "longitude": -122.41600036621099, "photo_url_small": "http://static.px.yelp.com/bpthumb/1aK0JUrH9QLrmn76RnlxNA/ss", "reviews": [{"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_3.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/vAKX9CLC4EJDm9X_YvP4WQ/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_3.png", "rating": 3, "mobile_uri": "http://mobile.yelp.com/biz/GTy7Up0mCTDoYpu0gLsUOQ?srid=3BF5IQWRCa5kE4CG66O7lg", "url": "http://www.yelp.com/biz/geary-club-san-francisco#hrid:3BF5IQWRCa5kE4CG66O7lg", "user_url": "http://www.yelp.com/user_details?userid=xZ1htr_9ZiOamddSoDWMqw", "text_excerpt": "if you like dives you will like the Geary Club. Not only is there a fake stuffed tiger head front and center, but bartender I had didn't seem to know how...", "user_photo_url": "http://static.px.yelp.com/upthumb/vAKX9CLC4EJDm9X_YvP4WQ/ms", "date": "2009-04-18", "user_name": "Juliana M.", "id": "3BF5IQWRCa5kE4CG66O7lg"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/_naF53nRZT9HYVeplcX5Hg/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/GTy7Up0mCTDoYpu0gLsUOQ?srid=7WfO0LKgRp0Tl_C-Zf-D4Q", "url": "http://www.yelp.com/biz/geary-club-san-francisco#hrid:7WfO0LKgRp0Tl_C-Zf-D4Q", "user_url": "http://www.yelp.com/user_details?userid=JF-7fBtuA_l5R650Iqe7RQ", "text_excerpt": "I still love Geary Club and Lillian! I kinda like it when a bartender isnt afraid to down a few drinks while working and also make some weird tv dinner for...", "user_photo_url": "http://static.px.yelp.com/upthumb/_naF53nRZT9HYVeplcX5Hg/ms", "date": "2009-03-08", "user_name": "jen d.", "id": "7WfO0LKgRp0Tl_C-Zf-D4Q"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/gdb2pU0wnmsXjAlo_skMgg/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/GTy7Up0mCTDoYpu0gLsUOQ?srid=fwBDJyffi2muLlxF5gRgFQ", "url": "http://www.yelp.com/biz/geary-club-san-francisco#hrid:fwBDJyffi2muLlxF5gRgFQ", "user_url": "http://www.yelp.com/user_details?userid=Sw4e9geYXjwG8-JgsuZTSw", "text_excerpt": "Finally I made it to Geary Club!\n\nA rainy Monday night after having a weird \"building party\" at my house.\nI was already a bit drunk and the Geary Club was...", "user_photo_url": "http://static.px.yelp.com/upthumb/gdb2pU0wnmsXjAlo_skMgg/ms", "date": "2009-02-25", "user_name": "cecilia b.", "id": "fwBDJyffi2muLlxF5gRgFQ"}], "nearby_url": "http://www.yelp.com/search?find_loc=768+Geary+Street%2C+San+Francisco%2C+CA+94109"}, {"rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4_half.png", "country_code": "US", "id": "vDdJPPRT4_6TociAEHJvgw", "is_closed": false, "city": "San Francisco", "mobile_url": "http://mobile.yelp.com/biz/vDdJPPRT4_6TociAEHJvgw", "review_count": 23, "zip": "94117", "state": "CA", "latitude": 37.776829900000003, "rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4_half.png", "address1": "1304 Fulton Street", "address2": "", "address3": "", "phone": "4155676503", "state_code": "CA", "categories": [{"category_filter": "wine_bars", "search_url": "http://www.yelp.com/search?find_loc=1304+Fulton+Street%2C+San+Francisco%2C+CA+94117&cflt=wine_bars", "name": "Wine Bars"}, {"category_filter": "beer_and_wine", "search_url": "http://www.yelp.com/search?find_loc=1304+Fulton+Street%2C+San+Francisco%2C+CA+94117&cflt=beer_and_wine", "name": "Beer, Wine & Spirits"}], "photo_url": "http://static.px.yelp.com/bpthumb/TRFnGi4Dk5XYkX38KMQ_Uw/ms", "distance": 1.0542008876800537, "name": "Corkage Sake and Wine Shop", "neighborhoods": [{"url": "http://www.yelp.com/search?find_loc=Western+Addition%2FNOPA%2C+San+Francisco%2C+CA", "name": "Western Addition/NOPA"}], "url": "http://www.yelp.com/biz/corkage-sake-and-wine-shop-san-francisco", "country": "USA", "avg_rating": 4.5, "longitude": -122.4384484, "photo_url_small": "http://static.px.yelp.com/bpthumb/TRFnGi4Dk5XYkX38KMQ_Uw/ss", "reviews": [{"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/static/20090416/i/new/gfx/blank_user_extra_small.gif", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/vDdJPPRT4_6TociAEHJvgw?srid=qR9gfXBG2bAI--ffudbb8g", "url": "http://www.yelp.com/biz/corkage-sake-and-wine-shop-san-francisco#hrid:qR9gfXBG2bAI--ffudbb8g", "user_url": "http://www.yelp.com/user_details?userid=NRGUOpoK1RvIUWZPQ13QTg", "text_excerpt": "I'm just getting into writing reviews but I feel I'd be remiss if i didn't write a review for one of my favorite spots in town. Even though it scares me...", "user_photo_url": "http://static.px.yelp.com/static/20090416/i/new/gfx/blank_user_small.gif", "date": "2009-04-03", "user_name": "ezra d.", "id": "qR9gfXBG2bAI--ffudbb8g"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/JiWacKWw01QjoL3Kqz-gYQ/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/vDdJPPRT4_6TociAEHJvgw?srid=v-TypFJpjx3sI5imG3muHg", "url": "http://www.yelp.com/biz/corkage-sake-and-wine-shop-san-francisco#hrid:v-TypFJpjx3sI5imG3muHg", "user_url": "http://www.yelp.com/user_details?userid=LIr-srYm2nOmPlXQxaYELQ", "text_excerpt": "Yoshi rocks!\nHe is sooo cool! and finds the right sake for you. \nI got my 'Happy Bride'!\n\nthank you Yoshi for such a wonderful time! =)", "user_photo_url": "http://static.px.yelp.com/upthumb/JiWacKWw01QjoL3Kqz-gYQ/ms", "date": "2009-03-27", "user_name": "Daniela D.", "id": "v-TypFJpjx3sI5imG3muHg"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/2whWATS5zogQQcAX-gGRGQ/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4.png", "rating": 4, "mobile_uri": "http://mobile.yelp.com/biz/vDdJPPRT4_6TociAEHJvgw?srid=zS2Q_jRPYnSvApjcJnERbg", "url": "http://www.yelp.com/biz/corkage-sake-and-wine-shop-san-francisco#hrid:zS2Q_jRPYnSvApjcJnERbg", "user_url": "http://www.yelp.com/user_details?userid=uTSGqJGFwngSLTSckILesw", "text_excerpt": "this is a great spot for wine or sake. well, for me, mainly wine :)\n\nthey have a pretty decent selection of wines ranging from $15-45, however there are...", "user_photo_url": "http://static.px.yelp.com/upthumb/2whWATS5zogQQcAX-gGRGQ/ms", "date": "2009-02-26", "user_name": "Kandace J.", "id": "zS2Q_jRPYnSvApjcJnERbg"}], "nearby_url": "http://www.yelp.com/search?find_loc=1304+Fulton+Street%2C+San+Francisco%2C+CA+94117"}, {"rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4_half.png", "country_code": "US", "id": "vqIWlQ0AHMFBOiagpB9sGw", "is_closed": false, "city": "San Francisco", "mobile_url": "http://mobile.yelp.com/biz/vqIWlQ0AHMFBOiagpB9sGw", "review_count": 43, "zip": "94122", "state": "CA", "latitude": 37.754299163818402, "rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4_half.png", "address1": "1232 Noriega Street", "address2": "", "address3": "", "phone": "4156610166", "state_code": "CA", "categories": [{"category_filter": "divebars", "search_url": "http://www.yelp.com/search?find_loc=1232+Noriega+Street%2C+San+Francisco%2C+CA+94122&cflt=divebars", "name": "Dive Bars"}], "photo_url": "http://static.px.yelp.com/bpthumb/nD2x6wclDBcaSd6ftQOl8A/ms", "distance": 3.4622526168823242, "name": "Eagle's Drift In Lounge", "neighborhoods": [{"url": "http://www.yelp.com/search?find_loc=Outer+Sunset%2C+San+Francisco%2C+CA", "name": "Outer Sunset"}], "url": "http://www.yelp.com/biz/eagles-drift-in-lounge-san-francisco", "country": "USA", "avg_rating": 4.5, "longitude": -122.476997375488, "photo_url_small": "http://static.px.yelp.com/bpthumb/nD2x6wclDBcaSd6ftQOl8A/ss", "reviews": [{"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_3.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/Fz-tRBmSVG8i1Dm6s-Q0yA/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_3.png", "rating": 3, "mobile_uri": "http://mobile.yelp.com/biz/vqIWlQ0AHMFBOiagpB9sGw?srid=nRaORNVURLfU32LijX-fOg", "url": "http://www.yelp.com/biz/eagles-drift-in-lounge-san-francisco#hrid:nRaORNVURLfU32LijX-fOg", "user_url": "http://www.yelp.com/user_details?userid=hE34xpG35WugHznWf79HfQ", "text_excerpt": "For a bar that seems serious about their darts I have not been in here a single time when anyone is playing them. Which is a good thing, because I would...", "user_photo_url": "http://static.px.yelp.com/upthumb/Fz-tRBmSVG8i1Dm6s-Q0yA/ms", "date": "2009-04-17", "user_name": "Drue C.", "id": "nRaORNVURLfU32LijX-fOg"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/UdPPgUlMb2DYpxQI3L-xAg/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/vqIWlQ0AHMFBOiagpB9sGw?srid=2e-Y3tM2mbL8XmNSrKvOFg", "url": "http://www.yelp.com/biz/eagles-drift-in-lounge-san-francisco#hrid:2e-Y3tM2mbL8XmNSrKvOFg", "user_url": "http://www.yelp.com/user_details?userid=zvAZsfg7Id2c9X5Vx8uMvQ", "text_excerpt": "When it comes to bars, I like it empty and almost having the place all to myself and with my friends. This place is great because it is a great place to...", "user_photo_url": "http://static.px.yelp.com/upthumb/UdPPgUlMb2DYpxQI3L-xAg/ms", "date": "2009-03-18", "user_name": "Christina W.", "id": "2e-Y3tM2mbL8XmNSrKvOFg"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/-3EK3uAM0q8SkB9uJCKLtw/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/vqIWlQ0AHMFBOiagpB9sGw?srid=I53XvaUKFN8CirxYnFLPdQ", "url": "http://www.yelp.com/biz/eagles-drift-in-lounge-san-francisco#hrid:I53XvaUKFN8CirxYnFLPdQ", "user_url": "http://www.yelp.com/user_details?userid=smx4hf_nkWhFklxLwfGLjw", "text_excerpt": "The first time I came here we walked in at about 9 or 10 on a Saturday night and there wasn't a soul in sight--not even a bartender--and the placed smelled...", "user_photo_url": "http://static.px.yelp.com/upthumb/-3EK3uAM0q8SkB9uJCKLtw/ms", "date": "2009-01-10", "user_name": "Trav W.", "id": "I53XvaUKFN8CirxYnFLPdQ"}], "nearby_url": "http://www.yelp.com/search?find_loc=1232+Noriega+Street%2C+San+Francisco%2C+CA+94122"}, {"rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4_half.png", "country_code": "US", "id": "rDlZHmGNnbBQWf-Ujfc2KA", "is_closed": false, "city": "San Francisco", "mobile_url": "http://mobile.yelp.com/biz/rDlZHmGNnbBQWf-Ujfc2KA", "review_count": 126, "zip": "94122", "state": "CA", "latitude": 37.763401031494098, "rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4_half.png", "address1": "2328 Irving Street", "address2": "", "address3": "", "phone": "4156642555", "state_code": "CA", "categories": [{"category_filter": "pubs", "search_url": "http://www.yelp.com/search?find_loc=2328+Irving+Street%2C+San+Francisco%2C+CA+94122&cflt=pubs", "name": "Pubs"}, {"category_filter": "irish", "search_url": "http://www.yelp.com/search?find_loc=2328+Irving+Street%2C+San+Francisco%2C+CA+94122&cflt=irish", "name": "Irish"}], "photo_url": "http://static.px.yelp.com/bpthumb/TSwz87bjS4THX5X8W8kffA/ms", "distance": 3.5711524486541748, "name": "Durty Nelly's", "neighborhoods": [{"url": "http://www.yelp.com/search?find_loc=Outer+Sunset%2C+San+Francisco%2C+CA", "name": "Outer Sunset"}], "url": "http://www.yelp.com/biz/durty-nellys-san-francisco", "country": "USA", "avg_rating": 4.5, "longitude": -122.48300170898401, "photo_url_small": "http://static.px.yelp.com/bpthumb/TSwz87bjS4THX5X8W8kffA/ss", "reviews": [{"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/static/20090416/i/new/gfx/blank_user_extra_small.gif", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/rDlZHmGNnbBQWf-Ujfc2KA?srid=zAr0i4_-Yvx3bMhAHxtRww", "url": "http://www.yelp.com/biz/durty-nellys-san-francisco#hrid:zAr0i4_-Yvx3bMhAHxtRww", "user_url": "http://www.yelp.com/user_details?userid=fYWW7lFdHcvUJ-gsTRJttw", "text_excerpt": "This place is the Shiznack!", "user_photo_url": "http://static.px.yelp.com/static/20090416/i/new/gfx/blank_user_small.gif", "date": "2009-04-07", "user_name": "shoo b.", "id": "zAr0i4_-Yvx3bMhAHxtRww"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/PBwngRvnIdtYIy9iF3tbbQ/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4.png", "rating": 4, "mobile_uri": "http://mobile.yelp.com/biz/rDlZHmGNnbBQWf-Ujfc2KA?srid=3w_awDdrGBWsJVpu8Cg8Kg", "url": "http://www.yelp.com/biz/durty-nellys-san-francisco#hrid:3w_awDdrGBWsJVpu8Cg8Kg", "user_url": "http://www.yelp.com/user_details?userid=RbaIxpAbwl6JrIPgIX4XIw", "text_excerpt": "I love Durty's!!! Not only is it a rad and pretty authentic Irish bar, but it has amazing food too! Bangers and mash, chicken pot pie, and an EXCELLENT...", "user_photo_url": "http://static.px.yelp.com/upthumb/PBwngRvnIdtYIy9iF3tbbQ/ms", "date": "2009-04-01", "user_name": "Jamie J.", "id": "3w_awDdrGBWsJVpu8Cg8Kg"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4.png", "user_photo_url_small": "http://static.px.yelp.com/static/20090416/i/new/gfx/blank_user_extra_small.gif", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4.png", "rating": 4, "mobile_uri": "http://mobile.yelp.com/biz/rDlZHmGNnbBQWf-Ujfc2KA?srid=CNIUSa4Os71fVYOk8Tu0lA", "url": "http://www.yelp.com/biz/durty-nellys-san-francisco#hrid:CNIUSa4Os71fVYOk8Tu0lA", "user_url": "http://www.yelp.com/user_details?userid=zlxg7BQ6StisAAC0cpUsZQ", "text_excerpt": "If this place was closer to where I live, I think I might go here once a week. A great little Irish pub. They pour a perfect Guinness. I had the...", "user_photo_url": "http://static.px.yelp.com/static/20090416/i/new/gfx/blank_user_small.gif", "date": "2009-03-22", "user_name": "Luke P.", "id": "CNIUSa4Os71fVYOk8Tu0lA"}], "nearby_url": "http://www.yelp.com/search?find_loc=2328+Irving+Street%2C+San+Francisco%2C+CA+94122"}, {"rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4_half.png", "country_code": "US", "id": "c7BkLCKjHjIg7oS63LsI1Q", "is_closed": false, "city": "San Francisco", "mobile_url": "http://mobile.yelp.com/biz/c7BkLCKjHjIg7oS63LsI1Q", "review_count": 47, "zip": "94114", "state": "CA", "latitude": 37.759743, "rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4_half.png", "address1": "572 Castro St", "address2": "", "address3": "", "phone": "4158642262", "state_code": "CA", "categories": [{"category_filter": "beer_and_wine", "search_url": "http://www.yelp.com/search?find_loc=572+Castro+St%2C+San+Francisco%2C+CA+94114&cflt=beer_and_wine", "name": "Beer, Wine & Spirits"}, {"category_filter": "wine_bars", "search_url": "http://www.yelp.com/search?find_loc=572+Castro+St%2C+San+Francisco%2C+CA+94114&cflt=wine_bars", "name": "Wine Bars"}], "photo_url": "http://static.px.yelp.com/bpthumb/i7c6kns-SbJj6xe6Uy_34A/ms", "distance": 1.3577183485031128, "name": "Swirl on Castro", "neighborhoods": [{"url": "http://www.yelp.com/search?find_loc=Castro%2C+San+Francisco%2C+CA", "name": "Castro"}], "url": "http://www.yelp.com/biz/swirl-on-castro-san-francisco", "country": "USA", "avg_rating": 4.5, "longitude": -122.434932, "photo_url_small": "http://static.px.yelp.com/bpthumb/i7c6kns-SbJj6xe6Uy_34A/ss", "reviews": [{"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/x0-s9hvClAZWTTbvm-A_Hg/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/c7BkLCKjHjIg7oS63LsI1Q?srid=V0CDM76r13GbsFBujh5tSg", "url": "http://www.yelp.com/biz/swirl-on-castro-san-francisco#hrid:V0CDM76r13GbsFBujh5tSg", "user_url": "http://www.yelp.com/user_details?userid=9hJYqwXzjbLsw_WUqYyzMg", "text_excerpt": "Here's an update since I went back last night - Thanks Jerry for a great time. You and your staff... Kelly, Josh and Kenny's Twin (sorry I forgot your name)...", "user_photo_url": "http://static.px.yelp.com/upthumb/x0-s9hvClAZWTTbvm-A_Hg/ms", "date": "2009-03-20", "user_name": "Jodi B.", "id": "V0CDM76r13GbsFBujh5tSg"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_3.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/hspGLwRANroWkFZutDcO4w/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_3.png", "rating": 3, "mobile_uri": "http://mobile.yelp.com/biz/c7BkLCKjHjIg7oS63LsI1Q?srid=f2EFPOtE2cWlwKwOyyUZuQ", "url": "http://www.yelp.com/biz/swirl-on-castro-san-francisco#hrid:f2EFPOtE2cWlwKwOyyUZuQ", "user_url": "http://www.yelp.com/user_details?userid=uSCYNal_CJDPGBYUAenyoA", "text_excerpt": "From the outside it's easy to get the impression that if Melissa Rivers married one of the Alitos and started a wine label to keep busy, this is where the...", "user_photo_url": "http://static.px.yelp.com/upthumb/hspGLwRANroWkFZutDcO4w/ms", "date": "2009-03-18", "user_name": "Luke M.", "id": "f2EFPOtE2cWlwKwOyyUZuQ"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/wwRGU_D9-Ajfs1mwko-nlw/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/c7BkLCKjHjIg7oS63LsI1Q?srid=FR6vaLqh-MvXUAO1AHGHXQ", "url": "http://www.yelp.com/biz/swirl-on-castro-san-francisco#hrid:FR6vaLqh-MvXUAO1AHGHXQ", "user_url": "http://www.yelp.com/user_details?userid=V8t5zmkH-o5IHmKeds6DuA", "text_excerpt": "Great store with wine tasting bar. Nice alternative from the \"meat market\" bars in the Castro. Great place to hang with friends before or after dinner....", "user_photo_url": "http://static.px.yelp.com/upthumb/wwRGU_D9-Ajfs1mwko-nlw/ms", "date": "2009-03-17", "user_name": "Danny B.", "id": "FR6vaLqh-MvXUAO1AHGHXQ"}], "nearby_url": "http://www.yelp.com/search?find_loc=572+Castro+St%2C+San+Francisco%2C+CA+94114"}, {"rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4_half.png", "country_code": "US", "id": "qxaYckrMuYu1PugSY1njzA", "is_closed": false, "city": "San Francisco", "mobile_url": "http://mobile.yelp.com/biz/qxaYckrMuYu1PugSY1njzA", "review_count": 190, "zip": "94107", "state": "CA", "latitude": 37.758201599121101, "rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4_half.png", "address1": "2490 3rd St", "address2": "", "address3": "", "phone": "4154018984", "state_code": "CA", "categories": [{"category_filter": "wine_bars", "search_url": "http://www.yelp.com/search?find_loc=2490+3rd+St%2C+San+Francisco%2C+CA+94107&cflt=wine_bars", "name": "Wine Bars"}], "photo_url": "http://static.px.yelp.com/bpthumb/vX704tjDFSzctwRTE5oaEA/ms", "distance": 2.021336555480957, "name": "Yield Wine Bar", "neighborhoods": [{"url": "http://www.yelp.com/search?find_loc=Dogpatch%2C+San+Francisco%2C+CA", "name": "Dogpatch"}, {"url": "http://www.yelp.com/search?find_loc=Potrero+Hill%2C+San+Francisco%2C+CA", "name": "Potrero Hill"}], "url": "http://www.yelp.com/biz/yield-wine-bar-san-francisco", "country": "USA", "avg_rating": 4.5, "longitude": -122.388999938965, "photo_url_small": "http://static.px.yelp.com/bpthumb/vX704tjDFSzctwRTE5oaEA/ss", "reviews": [{"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/t4zvXYHqYmm-QW0-Te2j1g/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4.png", "rating": 4, "mobile_uri": "http://mobile.yelp.com/biz/qxaYckrMuYu1PugSY1njzA?srid=E_DBJLUf03v8nzUDML-vIQ", "url": "http://www.yelp.com/biz/yield-wine-bar-san-francisco#hrid:E_DBJLUf03v8nzUDML-vIQ", "user_url": "http://www.yelp.com/user_details?userid=UBAfc-KuDXV8XLurou_i6g", "text_excerpt": "Really enjoyed this place. Nice selection of wine, smaller venue great for just catching up w/a friend or two over a drink. Some great bites to nosh on too....", "user_photo_url": "http://static.px.yelp.com/upthumb/t4zvXYHqYmm-QW0-Te2j1g/ms", "date": "2009-04-17", "user_name": "Abby W.", "id": "E_DBJLUf03v8nzUDML-vIQ"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/NR3YhAUjzQ4SZgkg6vqheA/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4.png", "rating": 4, "mobile_uri": "http://mobile.yelp.com/biz/qxaYckrMuYu1PugSY1njzA?srid=ukTS7oSTJ9jLZwX32JBVpA", "url": "http://www.yelp.com/biz/yield-wine-bar-san-francisco#hrid:ukTS7oSTJ9jLZwX32JBVpA", "user_url": "http://www.yelp.com/user_details?userid=Fnw_f0X0-cBscRr4sX5JYg", "text_excerpt": "Great find, a friend of mine suggested this place and I most say it was a great find, the wine selection is accompanied by a wonderful description, the...", "user_photo_url": "http://static.px.yelp.com/upthumb/NR3YhAUjzQ4SZgkg6vqheA/ms", "date": "2009-04-15", "user_name": "Emmy B.", "id": "ukTS7oSTJ9jLZwX32JBVpA"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/Ig55RB3mMzhZoptC6kJtPA/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/qxaYckrMuYu1PugSY1njzA?srid=5ti4DbCQHC0Jv0BICzMqoA", "url": "http://www.yelp.com/biz/yield-wine-bar-san-francisco#hrid:5ti4DbCQHC0Jv0BICzMqoA", "user_url": "http://www.yelp.com/user_details?userid=d7RGLy5EPXEFpLAfh3uwvA", "text_excerpt": "I almost don't want to write this review. Yield is a rare gem and I don't want everyone and their brother stealing all the seats! 100 words or less:...", "user_photo_url": "http://static.px.yelp.com/upthumb/Ig55RB3mMzhZoptC6kJtPA/ms", "date": "2009-04-12", "user_name": "Meadow L.", "id": "5ti4DbCQHC0Jv0BICzMqoA"}], "nearby_url": "http://www.yelp.com/search?find_loc=2490+3rd+St%2C+San+Francisco%2C+CA+94107"}, {"rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4_half.png", "country_code": "US", "id": "7-dAb6BdjgJE_KHTX9CNGA", "is_closed": false, "city": "San Francisco", "mobile_url": "http://mobile.yelp.com/biz/7-dAb6BdjgJE_KHTX9CNGA", "review_count": 54, "zip": "94133", "state": "CA", "latitude": 37.804698944091797, "rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4_half.png", "address1": "475 Francisco Street", "address2": "", "address3": "", "phone": "4154332343", "state_code": "CA", "categories": [{"category_filter": "lounges", "search_url": "http://www.yelp.com/search?find_loc=475+Francisco+Street%2C+San+Francisco%2C+CA+94133&cflt=lounges", "name": "Lounges"}], "photo_url": "http://static.px.yelp.com/bpthumb/uooIx_I_pm2PwbBOcDTRuw/ms", "distance": 2.0795242786407471, "name": "Sweeties", "neighborhoods": [{"url": "http://www.yelp.com/search?find_loc=North+Beach%2FTelegraph+Hill%2C+San+Francisco%2C+CA", "name": "North Beach/Telegraph Hill"}], "url": "http://www.yelp.com/biz/sweeties-san-francisco", "country": "USA", "avg_rating": 4.5, "longitude": -122.41300201416, "photo_url_small": "http://static.px.yelp.com/bpthumb/uooIx_I_pm2PwbBOcDTRuw/ss", "reviews": [{"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/gy2uwuDpWj8mnewYVCWVVw/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/7-dAb6BdjgJE_KHTX9CNGA?srid=6RoFwO-RdkMW6YqeORQFPw", "url": "http://www.yelp.com/biz/sweeties-san-francisco#hrid:6RoFwO-RdkMW6YqeORQFPw", "user_url": "http://www.yelp.com/user_details?userid=Vnja4xoPVQ7BLXIsVy_cFw", "text_excerpt": "Perfect place for a get together if you need a back room to yourselves. Pizza was delish. I'm glad we went. Cozy and charming and edgy all at the same time.", "user_photo_url": "http://static.px.yelp.com/upthumb/gy2uwuDpWj8mnewYVCWVVw/ms", "date": "2009-03-15", "user_name": "Amy J.", "id": "6RoFwO-RdkMW6YqeORQFPw"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/U7VW_Q_ITvOx-_oV5ThIhg/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4.png", "rating": 4, "mobile_uri": "http://mobile.yelp.com/biz/7-dAb6BdjgJE_KHTX9CNGA?srid=6AEH1ho2sFA6SuzGoEDWMg", "url": "http://www.yelp.com/biz/sweeties-san-francisco#hrid:6AEH1ho2sFA6SuzGoEDWMg", "user_url": "http://www.yelp.com/user_details?userid=e1FuiYSV1v29q2OTR9ojBA", "text_excerpt": "You would probably NEVER know there was a bar here, unless you were in the neighborhood all the time. I thought I knew where almost every bar was in North...", "user_photo_url": "http://static.px.yelp.com/upthumb/U7VW_Q_ITvOx-_oV5ThIhg/ms", "date": "2009-03-01", "user_name": "Berna T.", "id": "6AEH1ho2sFA6SuzGoEDWMg"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/static/20090416/i/new/gfx/blank_user_extra_small.gif", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/7-dAb6BdjgJE_KHTX9CNGA?srid=8_kbZ8PfEEzREMiYqv6iyQ", "url": "http://www.yelp.com/biz/sweeties-san-francisco#hrid:8_kbZ8PfEEzREMiYqv6iyQ", "user_url": "http://www.yelp.com/user_details?userid=3xsmXxDysn5yqflq3AzWKQ", "text_excerpt": "We don't live in the North Beach, but we still felt like neighbors when we visited Sweeties on Valentine's Day 2009. My fiancee and I dropped by after...", "user_photo_url": "http://static.px.yelp.com/static/20090416/i/new/gfx/blank_user_small.gif", "date": "2009-02-28", "user_name": "Tim N.", "id": "8_kbZ8PfEEzREMiYqv6iyQ"}], "nearby_url": "http://www.yelp.com/search?find_loc=475+Francisco+Street%2C+San+Francisco%2C+CA+94133"}, {"rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4_half.png", "country_code": "US", "id": "_cJARVZ55acNpNeCRmHTmQ", "is_closed": false, "city": "San Francisco", "mobile_url": "http://mobile.yelp.com/biz/_cJARVZ55acNpNeCRmHTmQ", "review_count": 88, "zip": "94109", "state": "CA", "latitude": 37.785784999999997, "rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4_half.png", "address1": "1060 Geary St", "address2": "", "address3": "", "phone": "4158854788", "state_code": "CA", "categories": [{"category_filter": "bars", "search_url": "http://www.yelp.com/search?find_loc=1060+Geary+St%2C+San+Francisco%2C+CA+94109&cflt=bars", "name": "Bars"}], "photo_url": "http://static.px.yelp.com/bpthumb/U_PzfAHm5cyg7wOF2FjE-w/ms", "distance": 0.74834960699081421, "name": "KoKo Cocktails", "neighborhoods": [{"url": "http://www.yelp.com/search?find_loc=Civic+Center%2FTenderloin%2C+San+Francisco%2C+CA", "name": "Civic Center/Tenderloin"}, {"url": "http://www.yelp.com/search?find_loc=Nob+Hill%2C+San+Francisco%2C+CA", "name": "Nob Hill"}], "url": "http://www.yelp.com/biz/koko-cocktails-san-francisco", "country": "USA", "avg_rating": 4.5, "longitude": -122.420721, "photo_url_small": "http://static.px.yelp.com/bpthumb/U_PzfAHm5cyg7wOF2FjE-w/ss", "reviews": [{"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/8JO3AwYQADb4oEgywyiHkw/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/_cJARVZ55acNpNeCRmHTmQ?srid=tWELGmx8xmZv9fUENn7jIA", "url": "http://www.yelp.com/biz/koko-cocktails-san-francisco#hrid:tWELGmx8xmZv9fUENn7jIA", "user_url": "http://www.yelp.com/user_details?userid=iV_Hnp3sFxncd6MNhkndGA", "text_excerpt": "Epic drinks and legendary bartenders. I wish I was at Koko's right now.\n\np.s. Autumn K. at Koko's? I'll believe it when I see it. :D", "user_photo_url": "http://static.px.yelp.com/upthumb/8JO3AwYQADb4oEgywyiHkw/ms", "date": "2009-04-02", "user_name": "Chris R.", "id": "tWELGmx8xmZv9fUENn7jIA"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/gqiMnFeJ-Ddlw_4b0w1-VA/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/_cJARVZ55acNpNeCRmHTmQ?srid=zlYWR5eGTcK3UbCD_URGHQ", "url": "http://www.yelp.com/biz/koko-cocktails-san-francisco#hrid:zlYWR5eGTcK3UbCD_URGHQ", "user_url": "http://www.yelp.com/user_details?userid=0sPPamYvk77rDOYECr_85A", "text_excerpt": "New and much cooler cocktail menu!! Who wants some?", "user_photo_url": "http://static.px.yelp.com/upthumb/gqiMnFeJ-Ddlw_4b0w1-VA/ms", "date": "2009-04-02", "user_name": "Chard M.", "id": "zlYWR5eGTcK3UbCD_URGHQ"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/O4cr5BaYOCApJIHhnqDEtw/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/_cJARVZ55acNpNeCRmHTmQ?srid=u3pvhJyoOZ0Q602Xjc-7kA", "url": "http://www.yelp.com/biz/koko-cocktails-san-francisco#hrid:u3pvhJyoOZ0Q602Xjc-7kA", "user_url": "http://www.yelp.com/user_details?userid=K6jTnDUtLuxyTFASgCS-gw", "text_excerpt": "Yes, people do still say rad (at least I do) and this bar is definitely rad! As are the bartenders, if you hook them up, they will hook you up. But don't...", "user_photo_url": "http://static.px.yelp.com/upthumb/O4cr5BaYOCApJIHhnqDEtw/ms", "date": "2009-03-29", "user_name": "Ronaldo T.", "id": "u3pvhJyoOZ0Q602Xjc-7kA"}], "nearby_url": "http://www.yelp.com/search?find_loc=1060+Geary+St%2C+San+Francisco%2C+CA+94109"}, {"rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4_half.png", "country_code": "US", "id": "WS9QI7amntnRUu-cgewQAw", "is_closed": false, "city": "San Francisco", "mobile_url": "http://mobile.yelp.com/biz/WS9QI7amntnRUu-cgewQAw", "review_count": 33, "zip": "94118", "state": "CA", "latitude": 37.777500152587898, "rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4_half.png", "address1": "598 5th Avenue", "address2": "", "address3": "", "phone": "4157511449", "state_code": "CA", "categories": [{"category_filter": "bars", "search_url": "http://www.yelp.com/search?find_loc=598+5th+Avenue%2C+San+Francisco%2C+CA+94118&cflt=bars", "name": "Bars"}], "photo_url": "http://static.px.yelp.com/bpthumb/e6tjIs4o7g4prs25U2nkxg/ms", "distance": 2.3935027122497559, "name": "O'Keeffe's Bar", "neighborhoods": [{"url": "http://www.yelp.com/search?find_loc=Inner+Richmond%2C+San+Francisco%2C+CA", "name": "Inner Richmond"}], "url": "http://www.yelp.com/biz/okeeffes-bar-san-francisco", "country": "USA", "avg_rating": 4.5, "longitude": -122.462997436523, "photo_url_small": "http://static.px.yelp.com/bpthumb/e6tjIs4o7g4prs25U2nkxg/ss", "reviews": [{"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/static/20090416/i/new/gfx/blank_user_extra_small.gif", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/WS9QI7amntnRUu-cgewQAw?srid=NJfFkIR1k1SFkACtePHnWA", "url": "http://www.yelp.com/biz/okeeffes-bar-san-francisco#hrid:NJfFkIR1k1SFkACtePHnWA", "user_url": "http://www.yelp.com/user_details?userid=qxEwdvhxDw51cAEejXK83g", "text_excerpt": "Met Annie at her spot behind the bar. She is one tough lady, old school irish. My bud Jim grew up around there, heard him tell many cool stories from the...", "user_photo_url": "http://static.px.yelp.com/static/20090416/i/new/gfx/blank_user_small.gif", "date": "2009-04-17", "user_name": "Dan M.", "id": "NJfFkIR1k1SFkACtePHnWA"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/OhMim2CBXFYiz7uOpGu2jQ/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4.png", "rating": 4, "mobile_uri": "http://mobile.yelp.com/biz/WS9QI7amntnRUu-cgewQAw?srid=6tuZws8FKafDWTwV8gPiAg", "url": "http://www.yelp.com/biz/okeeffes-bar-san-francisco#hrid:6tuZws8FKafDWTwV8gPiAg", "user_url": "http://www.yelp.com/user_details?userid=DcmI6NlZykgvvZ4SkYoTdA", "text_excerpt": "This place is the epitome of \"Dive.\" Came here on St. Patty's day, and it surely lived up to being Irish. The small band with children playing drums and...", "user_photo_url": "http://static.px.yelp.com/upthumb/OhMim2CBXFYiz7uOpGu2jQ/ms", "date": "2009-03-18", "user_name": "Ruchi P.", "id": "6tuZws8FKafDWTwV8gPiAg"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/-wkOaTBgkX78kgWd9qKLDg/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4.png", "rating": 4, "mobile_uri": "http://mobile.yelp.com/biz/WS9QI7amntnRUu-cgewQAw?srid=GgR8AfSlTQWN0kF-lKk-zw", "url": "http://www.yelp.com/biz/okeeffes-bar-san-francisco#hrid:GgR8AfSlTQWN0kF-lKk-zw", "user_url": "http://www.yelp.com/user_details?userid=emF8KqAfI2VL6Sfaek9gFg", "text_excerpt": "You know it's time to go home on St. Patrick's Day when you're at a smoky 95% authentic Irish bar, the live drum and recorder band of Irish children has...", "user_photo_url": "http://static.px.yelp.com/upthumb/-wkOaTBgkX78kgWd9qKLDg/ms", "date": "2009-03-17", "user_name": "Kate V.", "id": "GgR8AfSlTQWN0kF-lKk-zw"}], "nearby_url": "http://www.yelp.com/search?find_loc=598+5th+Avenue%2C+San+Francisco%2C+CA+94118"}, {"rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4.png", "country_code": "US", "id": "BOQOJXezjYZWolsmTcF2UA", "is_closed": false, "city": "San Francisco", "mobile_url": "http://mobile.yelp.com/biz/BOQOJXezjYZWolsmTcF2UA", "review_count": 36, "zip": "94103", "state": "CA", "latitude": 37.768317000000003, "rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4.png", "address1": "1799 Mission St", "address2": "at 14th St", "address3": "", "phone": "4158613002", "state_code": "CA", "categories": [{"category_filter": "bars", "search_url": "http://www.yelp.com/search?find_loc=1799+Mission+St%2C+San+Francisco%2C+CA+94103&cflt=bars", "name": "Bars"}], "photo_url": "http://static.px.yelp.com/bpthumb/gBxuzXOtKuRR9t29myOPYg/ms", "distance": 0.46441715955734253, "name": "Ace Cafe", "neighborhoods": [{"url": "http://www.yelp.com/search?find_loc=Mission%2C+San+Francisco%2C+CA", "name": "Mission"}], "url": "http://www.yelp.com/biz/ace-cafe-san-francisco", "country": "USA", "avg_rating": 4.0, "longitude": -122.420008, "photo_url_small": "http://static.px.yelp.com/bpthumb/gBxuzXOtKuRR9t29myOPYg/ss", "reviews": [{"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/-LlBQzy_lMDN8rqcZxxduQ/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4.png", "rating": 4, "mobile_uri": "http://mobile.yelp.com/biz/BOQOJXezjYZWolsmTcF2UA?srid=7Dh2kxj3f8r_kgRdZPUvvQ", "url": "http://www.yelp.com/biz/ace-cafe-san-francisco#hrid:7Dh2kxj3f8r_kgRdZPUvvQ", "user_url": "http://www.yelp.com/user_details?userid=CqMlDAQW_5Rj7Nu2hIrwfw", "text_excerpt": "I thoroughly enjoyed The Ace Caf\u00e9 at 14th and Mission Street and highly recommend it to anyone who doesn't mind a little smoke, can appreciate a diverse...", "user_photo_url": "http://static.px.yelp.com/upthumb/-LlBQzy_lMDN8rqcZxxduQ/ms", "date": "2009-02-24", "user_name": "Gadiel M.", "id": "7Dh2kxj3f8r_kgRdZPUvvQ"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4.png", "user_photo_url_small": "http://static.px.yelp.com/static/20090416/i/new/gfx/blank_user_extra_small.gif", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4.png", "rating": 4, "mobile_uri": "http://mobile.yelp.com/biz/BOQOJXezjYZWolsmTcF2UA?srid=Vo3lgIL74UZSi5J7iPw1oQ", "url": "http://www.yelp.com/biz/ace-cafe-san-francisco#hrid:Vo3lgIL74UZSi5J7iPw1oQ", "user_url": "http://www.yelp.com/user_details?userid=17AUx3RVchxyaqk71ygWaw", "text_excerpt": "Best fish and chips around. ( don't worry about the bikers, they're weak )", "user_photo_url": "http://static.px.yelp.com/static/20090416/i/new/gfx/blank_user_small.gif", "date": "2009-01-09", "user_name": "jeff b.", "id": "Vo3lgIL74UZSi5J7iPw1oQ"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_3.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/PoGEmHpxRjKFiNOFz1a2jw/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_3.png", "rating": 3, "mobile_uri": "http://mobile.yelp.com/biz/BOQOJXezjYZWolsmTcF2UA?srid=6GvHJ_XmbQNd74VihlIDdA", "url": "http://www.yelp.com/biz/ace-cafe-san-francisco#hrid:6GvHJ_XmbQNd74VihlIDdA", "user_url": "http://www.yelp.com/user_details?userid=XnbGrJNw0wglmqXekW138Q", "text_excerpt": "funny little dive bar... they do have snacks, plenty of tables, a pool table, and a good jukebox. minus one star because you can smoke there (which for...", "user_photo_url": "http://static.px.yelp.com/upthumb/PoGEmHpxRjKFiNOFz1a2jw/ms", "date": "2008-12-08", "user_name": "Carolyn B.", "id": "6GvHJ_XmbQNd74VihlIDdA"}], "nearby_url": "http://www.yelp.com/search?find_loc=1799+Mission+St%2C+San+Francisco%2C+CA+94103"}, {"rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4.png", "country_code": "US", "id": "owj5tzY8w8zXSXza_LS8NQ", "is_closed": false, "city": "San Francisco", "mobile_url": "http://mobile.yelp.com/biz/owj5tzY8w8zXSXza_LS8NQ", "review_count": 371, "zip": "94102", "state": "CA", "latitude": 37.773701000000003, "rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4.png", "address1": "45 Rose St", "address2": "", "address3": "", "phone": "4157030403", "state_code": "CA", "categories": [{"category_filter": "wine_bars", "search_url": "http://www.yelp.com/search?find_loc=45+Rose+St%2C+San+Francisco%2C+CA+94102&cflt=wine_bars", "name": "Wine Bars"}], "photo_url": "http://static.px.yelp.com/bpthumb/xOFIYiRKU8NjyBsyGw5Rxg/ms", "distance": 0.16015078127384186, "name": "H\u00f4tel Biron", "neighborhoods": [{"url": "http://www.yelp.com/search?find_loc=Hayes+Valley%2C+San+Francisco%2C+CA", "name": "Hayes Valley"}], "url": "http://www.yelp.com/biz/hotel-biron-san-francisco", "country": "USA", "avg_rating": 4.0, "longitude": -122.42170400000001, "photo_url_small": "http://static.px.yelp.com/bpthumb/xOFIYiRKU8NjyBsyGw5Rxg/ss", "reviews": [{"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/NR3YhAUjzQ4SZgkg6vqheA/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/owj5tzY8w8zXSXza_LS8NQ?srid=vabDEJCITNijgdNAU0nugQ", "url": "http://www.yelp.com/biz/hotel-biron-san-francisco#hrid:vabDEJCITNijgdNAU0nugQ", "user_url": "http://www.yelp.com/user_details?userid=Fnw_f0X0-cBscRr4sX5JYg", "text_excerpt": "I checked this place out on Monday, and it lived up to all the hype. The wine selection was impressive, and the staff friendly. Its tiny, but yet it gives...", "user_photo_url": "http://static.px.yelp.com/upthumb/NR3YhAUjzQ4SZgkg6vqheA/ms", "date": "2009-04-15", "user_name": "Emmy B.", "id": "vabDEJCITNijgdNAU0nugQ"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/-9iUpFLA7gUwU-xeVczgLA/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4.png", "rating": 4, "mobile_uri": "http://mobile.yelp.com/biz/owj5tzY8w8zXSXza_LS8NQ?srid=rZvHiZioZHzbK9SGEsAfhA", "url": "http://www.yelp.com/biz/hotel-biron-san-francisco#hrid:rZvHiZioZHzbK9SGEsAfhA", "user_url": "http://www.yelp.com/user_details?userid=AzUISA7zjPXVzxOBuNVUBA", "text_excerpt": "Amazingly I was taken here on a \"date\". I say amazingly in reference to this economy and the fact that some one was willing to spend such ridiculous monies...", "user_photo_url": "http://static.px.yelp.com/upthumb/-9iUpFLA7gUwU-xeVczgLA/ms", "date": "2009-04-06", "user_name": "montgomery r.", "id": "rZvHiZioZHzbK9SGEsAfhA"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/AL3w82TCtSeJHHWon43RUw/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/owj5tzY8w8zXSXza_LS8NQ?srid=6kA_HdUvQuOPZGiYaRoMOw", "url": "http://www.yelp.com/biz/hotel-biron-san-francisco#hrid:6kA_HdUvQuOPZGiYaRoMOw", "user_url": "http://www.yelp.com/user_details?userid=zpXqbJQ2CT4PsUBTy30DbQ", "text_excerpt": "Adorable, amazing. The cutest little European hotel / wine bar I've ever seen in San Francisco\n\nCame here for a drink before dinner in Hayes Valley. It's...", "user_photo_url": "http://static.px.yelp.com/upthumb/AL3w82TCtSeJHHWon43RUw/ms", "date": "2009-04-04", "user_name": "Jenny W.", "id": "6kA_HdUvQuOPZGiYaRoMOw"}], "nearby_url": "http://www.yelp.com/search?find_loc=45+Rose+St%2C+San+Francisco%2C+CA+94102"}, {"rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4_half.png", "country_code": "US", "id": "bcXY_zGB4zWQuNnxfR7Z3w", "is_closed": false, "city": "San Francisco", "mobile_url": "http://mobile.yelp.com/biz/bcXY_zGB4zWQuNnxfR7Z3w", "review_count": 141, "zip": "94133", "state": "CA", "latitude": 37.797460899999997, "rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4_half.png", "address1": "242 Columbus Avenue", "address2": "", "address3": "", "phone": "4159869651", "state_code": "CA", "categories": [{"category_filter": "bars", "search_url": "http://www.yelp.com/search?find_loc=242+Columbus+Avenue%2C+San+Francisco%2C+CA+94133&cflt=bars", "name": "Bars"}], "photo_url": "http://static.px.yelp.com/bpthumb/eetod47ppa8zUbX8L80o_A/ms", "distance": 1.7111668586730957, "name": "Tosca Cafe", "neighborhoods": [{"url": "http://www.yelp.com/search?find_loc=North+Beach%2FTelegraph+Hill%2C+San+Francisco%2C+CA", "name": "North Beach/Telegraph Hill"}, {"url": "http://www.yelp.com/search?find_loc=Nob+Hill%2C+San+Francisco%2C+CA", "name": "Nob Hill"}], "url": "http://www.yelp.com/biz/tosca-cafe-san-francisco", "country": "USA", "avg_rating": 4.5, "longitude": -122.40604879999999, "photo_url_small": "http://static.px.yelp.com/bpthumb/eetod47ppa8zUbX8L80o_A/ss", "reviews": [{"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_4.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/QS-jEagZ4se63l9kV87XWA/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_4.png", "rating": 4, "mobile_uri": "http://mobile.yelp.com/biz/bcXY_zGB4zWQuNnxfR7Z3w?srid=YaZ8zIeIhOGE0Q90hyaHxQ", "url": "http://www.yelp.com/biz/tosca-cafe-san-francisco#hrid:YaZ8zIeIhOGE0Q90hyaHxQ", "user_url": "http://www.yelp.com/user_details?userid=KpwPavO0PtuSTIaJ2Uslfg", "text_excerpt": "The vibe here is spooky!! I like being spooked out, I think it's fun, like watching a scary movie or something, so I really liked it. The seating is 50s...", "user_photo_url": "http://static.px.yelp.com/upthumb/QS-jEagZ4se63l9kV87XWA/ms", "date": "2009-04-11", "user_name": "Elizabeth B.", "id": "YaZ8zIeIhOGE0Q90hyaHxQ"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_5.png", "user_photo_url_small": "http://static.px.yelp.com/static/20090416/i/new/gfx/blank_user_extra_small.gif", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_5.png", "rating": 5, "mobile_uri": "http://mobile.yelp.com/biz/bcXY_zGB4zWQuNnxfR7Z3w?srid=bDXqtUlB4_xbAXhPG_eslw", "url": "http://www.yelp.com/biz/tosca-cafe-san-francisco#hrid:bDXqtUlB4_xbAXhPG_eslw", "user_url": "http://www.yelp.com/user_details?userid=755f5UrhlcEiPjfLUcKdDw", "text_excerpt": "The world famous Tosca Cafe is a home away from home, a private club, a public meeting place, shelter from the storm, what you need when you need it,\nThe...", "user_photo_url": "http://static.px.yelp.com/static/20090416/i/new/gfx/blank_user_small.gif", "date": "2009-04-10", "user_name": "Dale D.", "id": "bDXqtUlB4_xbAXhPG_eslw"}, {"rating_img_url_small": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_small_2.png", "user_photo_url_small": "http://static.px.yelp.com/upthumb/XyhcfxLEyoEJl1jLB1gkLA/ss", "rating_img_url": "http://static.px.yelp.com/static/20090416/i/new/ico/stars/stars_2.png", "rating": 2, "mobile_uri": "http://mobile.yelp.com/biz/bcXY_zGB4zWQuNnxfR7Z3w?srid=JqOunqnq9xLTYW1LfVjsfA", "url": "http://www.yelp.com/biz/tosca-cafe-san-francisco#hrid:JqOunqnq9xLTYW1LfVjsfA", "user_url": "http://www.yelp.com/user_details?userid=IWal1ziP1AlfcgDJj5CKFw", "text_excerpt": "2.stars for the ambiance, the rest, eh.\nCool spot but it was pretty empty on a friday evening from when we got there at 9 o'clock until we left a couple of...", "user_photo_url": "http://static.px.yelp.com/upthumb/XyhcfxLEyoEJl1jLB1gkLA/ms", "date": "2009-04-04", "user_name": "Aaron T.", "id": "JqOunqnq9xLTYW1LfVjsfA"}], "nearby_url": "http://www.yelp.com/search?find_loc=242+Columbus+Avenue%2C+San+Francisco%2C+CA+94133"}]} \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass1.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass1.json deleted file mode 100644 index fa9058b..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass1.json +++ /dev/null @@ -1,56 +0,0 @@ -[ - "JSON Test Pattern pass1", - {"object with 1 member":["array with 1 element"]}, - {}, - [], - -42, - true, - false, - null, - { - "integer": 1234567890, - "real": -9876.543210, - "e": 0.123456789e-12, - "E": 1.234567890E+34, - "": 23456789012E66, - "zero": 0, - "one": 1, - "space": " ", - "quote": "\"", - "backslash": "\\", - "controls": "\b\f\n\r\t", - "slash": "/ & \/", - "alpha": "abcdefghijklmnopqrstuvwyz", - "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ", - "digit": "0123456789", - "special": "`1~!@#$%^&*()_+-={':[,]}|;.?", - "hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A", - "true": true, - "false": false, - "null": null, - "array":[ ], - "object":{ }, - "address": "50 St. James Street", - "url": "http://www.JSON.org/", - "comment": "// /* */": " ", - " s p a c e d " :[1,2 , 3 - -, - -4 , 5 , 6 ,7 ], - "compact": [1,2,3,4,5,6,7], - "jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}", - "quotes": "" \u0022 %22 0x22 034 "", - "\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?" -: "A key can be any string" - }, - 0.5 ,98.6 -, -99.44 -, - -1066 - - -,"rosebud"] \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass2.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass2.json deleted file mode 100644 index d3c63c7..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass2.json +++ /dev/null @@ -1 +0,0 @@ -[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]] \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass3.json b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass3.json deleted file mode 100644 index 4528d51..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures/pass3.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "JSON Test Pattern pass3": { - "The outermost value": "must be an object or array.", - "In this test": "It is an object." - } -} diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures_spec.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures_spec.rb deleted file mode 100644 index 926c5b0..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/fixtures_spec.rb +++ /dev/null @@ -1,40 +0,0 @@ -require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb') - -describe "Parsing JSON Fixtures" do - fixtures = File.join(File.dirname(__FILE__), 'fixtures/*.json') - passed, failed = Dir[fixtures].partition { |f| f['pass'] } - PASSED = passed.inject([]) { |a, f| a << [ f, File.read(f) ] }.sort - FAILED = failed.inject([]) { |a, f| a << [ f, File.read(f) ] }.sort - - FAILED.each do |name, source| - it "should not be able to parse #{File.basename(name)} as an IO" do - lambda { - Yajl::Parser.parse(StringIO.new(source)) - }.should raise_error(Yajl::ParseError) - end - end - - FAILED.each do |name, source| - it "should not be able to parse #{File.basename(name)} as a string" do - lambda { - Yajl::Parser.parse(source) - }.should raise_error(Yajl::ParseError) - end - end - - PASSED.each do |name, source| - it "should be able to parse #{File.basename(name)} as an IO" do - lambda { - Yajl::Parser.parse(StringIO.new(source)) - }.should_not raise_error - end - end - - PASSED.each do |name, source| - it "should be able to parse #{File.basename(name)} as a string" do - lambda { - Yajl::Parser.parse(source) - }.should_not raise_error - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/large_number_spec.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/large_number_spec.rb deleted file mode 100644 index d174a6e..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/large_number_spec.rb +++ /dev/null @@ -1,60 +0,0 @@ -require 'spec_helper' - -describe 'Parsing very long text' do - shared_examples 'running script successfully' do |script| - def dup_pipe(parent_half, child_half, new_io) - parent_half.close - new_io.reopen(child_half) - child_half.close - end - - def capture(cmd, stdin_data) - child_in, child_out, child_err = IO::pipe, IO::pipe, IO::pipe - - child_pid = fork do - dup_pipe(child_in[1], child_in[0], STDIN) - dup_pipe(child_out[0], child_out[1], STDOUT) - dup_pipe(child_err[0], child_err[1], STDERR) - - exec(cmd) - end - - [ - child_in[0], - child_out[1], - child_err[1], - ].each(&:close) - - child_in[1].write(stdin_data) - child_in[1].close - _, status = Process.waitpid2(child_pid) - - return child_out[0].read, child_err[0].read, status - ensure - [ - child_in[1], - child_out[0], - child_err[0], - ].reject(&:closed?).each(&:close) - end - - it 'runs successfully' do - out, err, status = capture('ruby', script) - [err, status.exitstatus].should eq(['', 0]) - end - end - - context 'when parseing big floats' do - include_examples('running script successfully', <<-EOS) -require "yajl" -Yajl::Parser.parse('[0.' + '1' * 2**23 + ']') - EOS - end - - context 'when parseing long hash key with symbolize_keys option' do - include_examples('running script successfully', <<-EOS) -require "yajl" -Yajl::Parser.parse('{"' + 'a' * 2**23 + '": 0}', :symbolize_keys => true) - EOS - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/one_off_spec.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/one_off_spec.rb deleted file mode 100644 index ccc1f97..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/parsing/one_off_spec.rb +++ /dev/null @@ -1,97 +0,0 @@ -# encoding: UTF-8 -require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb') - -describe "One-off JSON examples" do - it "should not blow up with a bad surrogate trailer" do - # https://github.com/brianmario/yajl-ruby/issues/176 - bad_json = "{\"e\":{\"\\uD800\\\\DC00\":\"a\"}}" - - Yajl::Parser.new.parse(bad_json) - end - - it "should parse 23456789012E666 and return Infinity" do - infinity = (1.0/0) - silence_warnings do - Yajl::Parser.parse(StringIO.new('{"key": 23456789012E666}')).should == {"key" => infinity} - end - end - - it "should not parse JSON with a comment, with :allow_comments set to false" do - json = StringIO.new('{"key": /* this is a comment */ "value"}') - lambda { - Yajl::Parser.parse(json, :allow_comments => false) - }.should raise_error(Yajl::ParseError) - end - - it "should parse JSON with a comment, with :allow_comments set to true" do - json = StringIO.new('{"key": /* this is a comment */ "value"}') - lambda { - Yajl::Parser.parse(json, :allow_comments => true) - }.should_not raise_error - end - - it "should not parse invalid UTF8 with :check_utf8 set to true" do - parser = Yajl::Parser.new(:check_utf8 => true) - lambda { - parser.parse("[\"#{"\201\203"}\"]") - }.should raise_error(Yajl::ParseError) - end - - it "should parse invalid UTF8 with :check_utf8 set to false" do - parser = Yajl::Parser.new(:check_utf8 => false) - parser.parse("[\"#{"\201\203"}\"]").inspect - end - - it "should parse using it's class method, from an IO" do - io = StringIO.new('{"key": 1234}') - Yajl::Parser.parse(io).should == {"key" => 1234} - end - - it "should parse using it's class method, from a string with symbolized keys" do - Yajl::Parser.parse('{"key": 1234}', :symbolize_keys => true).should == {:key => 1234} - end - - it "should parse using it's class method, from a utf-8 string with multibyte characters, with symbolized keys" do - Yajl::Parser.parse('{"日本語": 1234}', :symbolize_keys => true).should == {:"日本語" => 1234} - end - - it "should parse using it's class method, from a string" do - Yajl::Parser.parse('{"key": 1234}').should == {"key" => 1234} - end - - it "should parse using it's class method, from a string with a block" do - output = nil - Yajl::Parser.parse('{"key": 1234}') do |obj| - output = obj - end - output.should == {"key" => 1234} - end - - it "should parse numbers greater than 2,147,483,648" do - Yajl::Parser.parse("{\"id\": 2147483649}").should eql({"id" => 2147483649}) - Yajl::Parser.parse("{\"id\": 5687389800}").should eql({"id" => 5687389800}) - Yajl::Parser.parse("{\"id\": 1046289770033519442869495707521600000000}").should eql({"id" => 1046289770033519442869495707521600000000}) - end - - if RUBY_VERSION =~ /^1.9/ - it "should encode non-ascii symbols in utf-8" do - parsed = Yajl::Parser.parse('{"曦": 1234}', :symbolize_keys => true) - parsed.keys.fetch(0).encoding.should eq(Encoding::UTF_8) - end - - it "should return strings and hash keys in utf-8 if Encoding.default_internal is nil" do - Encoding.default_internal = nil - Yajl::Parser.parse('{"key": "value"}').keys.first.encoding.should eql(Encoding.find('utf-8')) - Yajl::Parser.parse('{"key": "value"}').values.first.encoding.should eql(Encoding.find('utf-8')) - end - - it "should return strings and hash keys encoded as specified in Encoding.default_internal if it's set" do - Encoding.default_internal = Encoding.find('utf-8') - Yajl::Parser.parse('{"key": "value"}').keys.first.encoding.should eql(Encoding.default_internal) - Yajl::Parser.parse('{"key": "value"}').values.first.encoding.should eql(Encoding.default_internal) - Encoding.default_internal = Encoding.find('us-ascii') - Yajl::Parser.parse('{"key": "value"}').keys.first.encoding.should eql(Encoding.default_internal) - Yajl::Parser.parse('{"key": "value"}').values.first.encoding.should eql(Encoding.default_internal) - end - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/rcov.opts b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/rcov.opts deleted file mode 100644 index 62e8126..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/rcov.opts +++ /dev/null @@ -1,3 +0,0 @@ ---exclude spec,gem ---text-summary ---sort coverage --sort-reverse diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/spec_helper.rb b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/spec_helper.rb deleted file mode 100644 index fcdedcf..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/spec/spec_helper.rb +++ /dev/null @@ -1,13 +0,0 @@ -require 'rspec' -require 'yajl' -require 'date' -require 'stringio' - -module Kernel - def silence_warnings - old_verbose, $VERBOSE = $VERBOSE, nil - yield - ensure - $VERBOSE = old_verbose - end -end diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/tasks/compile.rake b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/tasks/compile.rake deleted file mode 100644 index 77848ba..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/tasks/compile.rake +++ /dev/null @@ -1,35 +0,0 @@ -require 'rake/extensiontask' - -def gemspec - @clean_gemspec ||= eval(File.read(File.expand_path('../../yajl-ruby.gemspec', __FILE__))) -end - -Rake::ExtensionTask.new('yajl', gemspec) do |ext| - # automatically add build options to avoid need of manual input - ext.cross_compile = true - ext.cross_platform = ['x86-mingw32', 'x86-mswin32-60'] - - # inject 1.8/1.9 pure-ruby entry point when cross compiling only - ext.cross_compiling do |spec| - spec.files << 'lib/yajl/yajl.rb' - end - - ext.lib_dir = File.join 'lib', 'yajl' - - # clean compiled extension - CLEAN.include "#{ext.lib_dir}/*.#{RbConfig::CONFIG['DLEXT']}" -end -Rake::Task[:spec].prerequisites << :compile - -file 'lib/yajl/yajl.rb' do |t| - File.open(t.name, 'wb') do |f| - f.write <<-eoruby -RUBY_VERSION =~ /(\\d+.\\d+)/ -require "yajl/\#{$1}/yajl" - eoruby - end -end - -if Rake::Task.task_defined?(:cross) - Rake::Task[:cross].prerequisites << 'lib/yajl/yajl.rb' -end diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/tasks/rspec.rake b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/tasks/rspec.rake deleted file mode 100644 index a6628e8..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/tasks/rspec.rake +++ /dev/null @@ -1,16 +0,0 @@ -begin - require 'rspec' - require 'rspec/core/rake_task' - - desc "Run all examples with RCov" - RSpec::Core::RakeTask.new('spec:rcov') do |t| - t.rcov = true - end - RSpec::Core::RakeTask.new('spec') do |t| - t.verbose = true - end - - task :default => :spec -rescue LoadError - puts "rspec, or one of its dependencies, is not available. Install it with: sudo gem install rspec" -end \ No newline at end of file diff --git a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/yajl-ruby.gemspec b/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/yajl-ruby.gemspec deleted file mode 100644 index 917e49a..0000000 --- a/vendor/bundle/ruby/2.2.0/gems/yajl-ruby-1.2.3/yajl-ruby.gemspec +++ /dev/null @@ -1,26 +0,0 @@ -require './lib/yajl/version' - -Gem::Specification.new do |s| - s.name = %q{yajl-ruby} - s.version = Yajl::VERSION - s.license = "MIT" - s.authors = ["Brian Lopez", "Lloyd Hilaiel"] - s.date = Time.now.utc.strftime("%Y-%m-%d") - s.email = %q{seniorlopez@gmail.com} - s.extensions = ["ext/yajl/extconf.rb"] - s.files = `git ls-files`.split("\n") - s.homepage = %q{http://github.com/brianmario/yajl-ruby} - s.require_paths = ["lib"] - s.rubygems_version = %q{1.4.2} - s.summary = %q{Ruby C bindings to the excellent Yajl JSON stream-based parser library.} - s.test_files = `git ls-files spec examples`.split("\n") - s.required_ruby_version = ">= 1.8.6" - - # tests - s.add_development_dependency 'rake-compiler', ">= 0.7.5" - s.add_development_dependency 'rspec', "~> 2.14" - # benchmarks - s.add_development_dependency 'activesupport', '~> 3.1.2' - s.add_development_dependency 'json' -end - diff --git a/vendor/bundle/ruby/2.2.0/specifications/blankslate-2.1.2.4.gemspec b/vendor/bundle/ruby/2.2.0/specifications/blankslate-2.1.2.4.gemspec deleted file mode 100644 index 6ecf282..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/blankslate-2.1.2.4.gemspec +++ /dev/null @@ -1,33 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: blankslate 2.1.2.4 ruby lib - -Gem::Specification.new do |s| - s.name = "blankslate" - s.version = "2.1.2.4" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Jim Weirich", "David Masover", "Jack Danger Canty"] - s.date = "2011-03-16" - s.email = "rubygems@6brand.com" - s.homepage = "http://github.com/masover/blankslate" - s.rubygems_version = "2.4.6" - s.summary = "BlankSlate extracted from Builder." - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 3 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, [">= 0"]) - else - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - end - else - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/celluloid-0.16.0.gemspec b/vendor/bundle/ruby/2.2.0/specifications/celluloid-0.16.0.gemspec deleted file mode 100644 index 5febaca..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/celluloid-0.16.0.gemspec +++ /dev/null @@ -1,48 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: celluloid 0.16.0 ruby lib - -Gem::Specification.new do |s| - s.name = "celluloid" - s.version = "0.16.0" - - s.required_rubygems_version = Gem::Requirement.new(">= 1.3.6") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Tony Arcieri"] - s.date = "2014-09-05" - s.description = "Celluloid enables people to build concurrent programs out of concurrent objects just as easily as they build sequential programs out of sequential objects" - s.email = ["tony.arcieri@gmail.com"] - s.homepage = "https://github.com/celluloid/celluloid" - s.licenses = ["MIT"] - s.required_ruby_version = Gem::Requirement.new(">= 1.9.2") - s.rubygems_version = "2.4.6" - s.summary = "Actor-based concurrent object framework for Ruby" - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 4 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_runtime_dependency(%q, ["~> 4.0.0"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, ["~> 2.14.1"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, [">= 0"]) - else - s.add_dependency(%q, ["~> 4.0.0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, ["~> 2.14.1"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - end - else - s.add_dependency(%q, ["~> 4.0.0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, ["~> 2.14.1"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/classifier-reborn-2.0.3.gemspec b/vendor/bundle/ruby/2.2.0/specifications/classifier-reborn-2.0.3.gemspec deleted file mode 100644 index f38c51a..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/classifier-reborn-2.0.3.gemspec +++ /dev/null @@ -1,42 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: classifier-reborn 2.0.3 ruby lib - -Gem::Specification.new do |s| - s.name = "classifier-reborn" - s.version = "2.0.3" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Lucas Carlson", "Parker Moore"] - s.date = "2014-12-23" - s.email = ["lucas@rufy.com", "parkrmoore@gmail.com"] - s.executables = ["bayes.rb", "summarize.rb"] - s.extra_rdoc_files = ["README.markdown", "LICENSE"] - s.files = ["LICENSE", "README.markdown", "bin/bayes.rb", "bin/summarize.rb"] - s.homepage = "https://github.com/jekyll/classifier-reborn" - s.licenses = ["LGPL"] - s.rdoc_options = ["--charset=UTF-8"] - s.required_ruby_version = Gem::Requirement.new(">= 1.9.3") - s.rubygems_version = "2.4.6" - s.summary = "A general classifier module to allow Bayesian and other types of classifications." - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 2 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_runtime_dependency(%q, ["~> 1.0"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, [">= 0"]) - else - s.add_dependency(%q, ["~> 1.0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - end - else - s.add_dependency(%q, ["~> 1.0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/coffee-script-2.4.1.gemspec b/vendor/bundle/ruby/2.2.0/specifications/coffee-script-2.4.1.gemspec deleted file mode 100644 index 5c8ff58..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/coffee-script-2.4.1.gemspec +++ /dev/null @@ -1,41 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: coffee-script 2.4.1 ruby lib - -Gem::Specification.new do |s| - s.name = "coffee-script" - s.version = "2.4.1" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Jeremy Ashkenas", "Joshua Peek", "Sam Stephenson"] - s.date = "2015-04-06" - s.description = " Ruby CoffeeScript is a bridge to the JS CoffeeScript compiler.\n" - s.email = "josh@joshpeek.com" - s.homepage = "http://github.com/josh/ruby-coffee-script" - s.licenses = ["MIT"] - s.rubygems_version = "2.4.6" - s.summary = "Ruby CoffeeScript Compiler" - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 4 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_runtime_dependency(%q, [">= 0"]) - s.add_runtime_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, [">= 0"]) - else - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - end - else - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/coffee-script-source-1.9.1.1.gemspec b/vendor/bundle/ruby/2.2.0/specifications/coffee-script-source-1.9.1.1.gemspec deleted file mode 100644 index 3127cf1..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/coffee-script-source-1.9.1.1.gemspec +++ /dev/null @@ -1,21 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: coffee-script-source 1.9.1.1 ruby lib - -Gem::Specification.new do |s| - s.name = "coffee-script-source" - s.version = "1.9.1.1" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Jeremy Ashkenas"] - s.date = "2015-03-09" - s.description = " CoffeeScript is a little language that compiles into JavaScript.\n Underneath all of those embarrassing braces and semicolons,\n JavaScript has always had a gorgeous object model at its heart.\n CoffeeScript is an attempt to expose the good parts of JavaScript\n in a simple way.\n" - s.email = "jashkenas@gmail.com" - s.homepage = "http://jashkenas.github.com/coffee-script/" - s.licenses = ["MIT"] - s.rubyforge_project = "coffee-script-source" - s.rubygems_version = "2.4.6" - s.summary = "The CoffeeScript Compiler" - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/colorator-0.1.gemspec b/vendor/bundle/ruby/2.2.0/specifications/colorator-0.1.gemspec deleted file mode 100644 index 4ac5a80..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/colorator-0.1.gemspec +++ /dev/null @@ -1,38 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: colorator 0.1 ruby lib - -Gem::Specification.new do |s| - s.name = "colorator" - s.version = "0.1" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Parker Moore", "Brandon Mathis"] - s.date = "2013-04-13" - s.description = "Colorize your text in the terminal." - s.email = ["parkrmoore@gmail.com", "brandon@imathis.com"] - s.extra_rdoc_files = ["README.markdown", "LICENSE"] - s.files = ["LICENSE", "README.markdown"] - s.homepage = "https://github.com/octopress/colorator" - s.licenses = ["MIT"] - s.rdoc_options = ["--charset=UTF-8"] - s.rubygems_version = "2.4.6" - s.summary = "String core extensions for terminal coloring." - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 2 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_development_dependency(%q, ["~> 10.0"]) - s.add_development_dependency(%q, ["~> 2.13.0"]) - else - s.add_dependency(%q, ["~> 10.0"]) - s.add_dependency(%q, ["~> 2.13.0"]) - end - else - s.add_dependency(%q, ["~> 10.0"]) - s.add_dependency(%q, ["~> 2.13.0"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/execjs-2.5.2.gemspec b/vendor/bundle/ruby/2.2.0/specifications/execjs-2.5.2.gemspec deleted file mode 100644 index 207be06..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/execjs-2.5.2.gemspec +++ /dev/null @@ -1,33 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: execjs 2.5.2 ruby lib - -Gem::Specification.new do |s| - s.name = "execjs" - s.version = "2.5.2" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Sam Stephenson", "Josh Peek"] - s.date = "2015-04-09" - s.description = "ExecJS lets you run JavaScript code from Ruby." - s.email = ["sstephenson@gmail.com", "josh@joshpeek.com"] - s.homepage = "https://github.com/rails/execjs" - s.licenses = ["MIT"] - s.required_ruby_version = Gem::Requirement.new(">= 1.9.3") - s.rubygems_version = "2.4.6" - s.summary = "Run JavaScript code from Ruby" - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 4 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_development_dependency(%q, [">= 0"]) - else - s.add_dependency(%q, [">= 0"]) - end - else - s.add_dependency(%q, [">= 0"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/fast-stemmer-1.0.2.gemspec b/vendor/bundle/ruby/2.2.0/specifications/fast-stemmer-1.0.2.gemspec deleted file mode 100644 index 92a62dd..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/fast-stemmer-1.0.2.gemspec +++ /dev/null @@ -1,23 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: fast-stemmer 1.0.2 ruby lib -# stub: ext/extconf.rb - -Gem::Specification.new do |s| - s.name = "fast-stemmer" - s.version = "1.0.2" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Roman Shterenzon"] - s.date = "2013-02-06" - s.description = "Fast Porter stemmer based on a C version of algorithm" - s.email = "romanbsd@yahoo.com" - s.extensions = ["ext/extconf.rb"] - s.extra_rdoc_files = ["LICENSE", "README"] - s.files = ["LICENSE", "README", "ext/extconf.rb"] - s.homepage = "http://github.com/romanbsd/fast-stemmer" - s.rubygems_version = "2.4.6" - s.summary = "Fast Porter stemmer based on a C version of algorithm" - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/ffi-1.9.8.gemspec b/vendor/bundle/ruby/2.2.0/specifications/ffi-1.9.8.gemspec deleted file mode 100644 index 72fe7ed..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/ffi-1.9.8.gemspec +++ /dev/null @@ -1,46 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: ffi 1.9.8 ruby lib -# stub: ext/ffi_c/extconf.rb - -Gem::Specification.new do |s| - s.name = "ffi" - s.version = "1.9.8" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Wayne Meissner"] - s.date = "2015-03-15" - s.description = "Ruby FFI library" - s.email = "wmeissner@gmail.com" - s.extensions = ["ext/ffi_c/extconf.rb"] - s.files = ["ext/ffi_c/extconf.rb"] - s.homepage = "http://wiki.github.com/ffi/ffi" - s.licenses = ["BSD"] - s.rdoc_options = ["--exclude=ext/ffi_c/.*\\.o$", "--exclude=ffi_c\\.(bundle|so)$"] - s.required_ruby_version = Gem::Requirement.new(">= 1.8.7") - s.rubygems_version = "2.4.6" - s.summary = "Ruby FFI" - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 4 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_development_dependency(%q, ["~> 10.1"]) - s.add_development_dependency(%q, ["~> 0.9"]) - s.add_development_dependency(%q, ["~> 2.14.1"]) - s.add_development_dependency(%q, ["~> 0.2.4"]) - else - s.add_dependency(%q, ["~> 10.1"]) - s.add_dependency(%q, ["~> 0.9"]) - s.add_dependency(%q, ["~> 2.14.1"]) - s.add_dependency(%q, ["~> 0.2.4"]) - end - else - s.add_dependency(%q, ["~> 10.1"]) - s.add_dependency(%q, ["~> 0.9"]) - s.add_dependency(%q, ["~> 2.14.1"]) - s.add_dependency(%q, ["~> 0.2.4"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/guides_style_18f-0.0.1.gemspec b/vendor/bundle/ruby/2.2.0/specifications/guides_style_18f-0.0.1.gemspec deleted file mode 100644 index e34e74d..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/guides_style_18f-0.0.1.gemspec +++ /dev/null @@ -1,44 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: guides_style_18f 0.0.1 ruby lib - -Gem::Specification.new do |s| - s.name = "guides_style_18f" - s.version = "0.0.1" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Mike Bland"] - s.date = "2015-08-22" - s.description = "Provides consistent style elements for documents based on the 18F Guides Template (https://pages.18f.gov/guides-template/). The 18F Guides theme is based on DOCter (https://github.com/cfpb/docter/) from CFPB (http://cfpb.github.io/)." - s.email = ["michael.bland@gsa.gov"] - s.homepage = "https://github.com/18F/guides-style" - s.licenses = ["CC0"] - s.rubygems_version = "2.4.6" - s.summary = "18F Guides Template style elements" - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 4 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_runtime_dependency(%q, ["~> 2.5"]) - s.add_runtime_dependency(%q, ["~> 3.4"]) - s.add_runtime_dependency(%q, ["~> 1.9"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, [">= 0"]) - else - s.add_dependency(%q, ["~> 2.5"]) - s.add_dependency(%q, ["~> 3.4"]) - s.add_dependency(%q, ["~> 1.9"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - end - else - s.add_dependency(%q, ["~> 2.5"]) - s.add_dependency(%q, ["~> 3.4"]) - s.add_dependency(%q, ["~> 1.9"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/hitimes-1.2.2.gemspec b/vendor/bundle/ruby/2.2.0/specifications/hitimes-1.2.2.gemspec deleted file mode 100644 index 46084a5..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/hitimes-1.2.2.gemspec +++ /dev/null @@ -1,49 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: hitimes 1.2.2 ruby lib -# stub: ext/hitimes/c/extconf.rb - -Gem::Specification.new do |s| - s.name = "hitimes" - s.version = "1.2.2" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Jeremy Hinegardner"] - s.date = "2014-07-09" - s.description = "Hitimes is a fast, high resolution timer library for recording performance metrics. It uses the appropriate low method calls for each system to get the highest granularity time increments possible. It currently supports any of the following systems: * any system with the POSIX call `clock_gettime()` * Mac OS X * Windows * JRuby Using Hitimes can be faster than using a series of `Time.new` calls, and it will have a much higher granularity. It is definitely faster than using `Process.times`." - s.email = "jeremy@copiousfreetime.org" - s.extensions = ["ext/hitimes/c/extconf.rb"] - s.extra_rdoc_files = ["CONTRIBUTING.md", "HISTORY.md", "Manifest.txt", "README.md"] - s.files = ["CONTRIBUTING.md", "HISTORY.md", "Manifest.txt", "README.md", "ext/hitimes/c/extconf.rb"] - s.homepage = "http://github.com/copiousfreetime/hitimes" - s.licenses = ["ISC"] - s.rdoc_options = ["--main", "README.md", "--markup", "tomdoc"] - s.rubygems_version = "2.4.6" - s.summary = "Hitimes is a fast, high resolution timer library for recording performance metrics. It uses the appropriate low method calls for each system to get the highest granularity time increments possible." - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 4 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_development_dependency(%q, ["~> 10.0"]) - s.add_development_dependency(%q, ["~> 5.3"]) - s.add_development_dependency(%q, ["~> 4.1"]) - s.add_development_dependency(%q, ["~> 1.7.7"]) - s.add_development_dependency(%q, ["~> 0.9"]) - else - s.add_dependency(%q, ["~> 10.0"]) - s.add_dependency(%q, ["~> 5.3"]) - s.add_dependency(%q, ["~> 4.1"]) - s.add_dependency(%q, ["~> 1.7.7"]) - s.add_dependency(%q, ["~> 0.9"]) - end - else - s.add_dependency(%q, ["~> 10.0"]) - s.add_dependency(%q, ["~> 5.3"]) - s.add_dependency(%q, ["~> 4.1"]) - s.add_dependency(%q, ["~> 1.7.7"]) - s.add_dependency(%q, ["~> 0.9"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/jekyll-2.5.3.gemspec b/vendor/bundle/ruby/2.2.0/specifications/jekyll-2.5.3.gemspec deleted file mode 100644 index 9f4a498..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/jekyll-2.5.3.gemspec +++ /dev/null @@ -1,127 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: jekyll 2.5.3 ruby lib - -Gem::Specification.new do |s| - s.name = "jekyll" - s.version = "2.5.3" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Tom Preston-Werner"] - s.date = "2014-12-22" - s.description = "Jekyll is a simple, blog aware, static site generator." - s.email = "tom@mojombo.com" - s.executables = ["jekyll"] - s.extra_rdoc_files = ["README.markdown", "LICENSE"] - s.files = ["LICENSE", "README.markdown", "bin/jekyll"] - s.homepage = "https://github.com/jekyll/jekyll" - s.licenses = ["MIT"] - s.rdoc_options = ["--charset=UTF-8"] - s.required_ruby_version = Gem::Requirement.new(">= 1.9.3") - s.rubygems_version = "2.4.6" - s.summary = "A simple, blog aware, static site generator." - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 2 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_runtime_dependency(%q, ["~> 2.6.1"]) - s.add_runtime_dependency(%q, ["~> 1.3"]) - s.add_runtime_dependency(%q, ["~> 0.3.3"]) - s.add_runtime_dependency(%q, ["~> 1.0"]) - s.add_runtime_dependency(%q, ["~> 0.1"]) - s.add_runtime_dependency(%q, ["~> 0.6.0"]) - s.add_runtime_dependency(%q, ["~> 3.1"]) - s.add_runtime_dependency(%q, ["~> 0.1.0"]) - s.add_runtime_dependency(%q, ["~> 1.0"]) - s.add_runtime_dependency(%q, ["~> 1.0"]) - s.add_runtime_dependency(%q, ["~> 1.0"]) - s.add_runtime_dependency(%q, ["~> 1.0"]) - s.add_runtime_dependency(%q, ["~> 1.1"]) - s.add_runtime_dependency(%q, ["~> 2.0"]) - s.add_development_dependency(%q, ["~> 10.1"]) - s.add_development_dependency(%q, ["~> 3.11"]) - s.add_development_dependency(%q, ["~> 1.2"]) - s.add_development_dependency(%q, ["~> 3.5"]) - s.add_development_dependency(%q, ["~> 1.1"]) - s.add_development_dependency(%q, ["= 1.3.11"]) - s.add_development_dependency(%q, ["~> 4.2"]) - s.add_development_dependency(%q, ["~> 0.7.0"]) - s.add_development_dependency(%q, ["~> 1.6"]) - s.add_development_dependency(%q, ["~> 2.3"]) - s.add_development_dependency(%q, ["~> 0.9"]) - s.add_development_dependency(%q, ["~> 1.0.1"]) - s.add_development_dependency(%q, ["~> 1.5"]) - s.add_development_dependency(%q, ["~> 3.2.13"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, ["~> 1.7"]) - else - s.add_dependency(%q, ["~> 2.6.1"]) - s.add_dependency(%q, ["~> 1.3"]) - s.add_dependency(%q, ["~> 0.3.3"]) - s.add_dependency(%q, ["~> 1.0"]) - s.add_dependency(%q, ["~> 0.1"]) - s.add_dependency(%q, ["~> 0.6.0"]) - s.add_dependency(%q, ["~> 3.1"]) - s.add_dependency(%q, ["~> 0.1.0"]) - s.add_dependency(%q, ["~> 1.0"]) - s.add_dependency(%q, ["~> 1.0"]) - s.add_dependency(%q, ["~> 1.0"]) - s.add_dependency(%q, ["~> 1.0"]) - s.add_dependency(%q, ["~> 1.1"]) - s.add_dependency(%q, ["~> 2.0"]) - s.add_dependency(%q, ["~> 10.1"]) - s.add_dependency(%q, ["~> 3.11"]) - s.add_dependency(%q, ["~> 1.2"]) - s.add_dependency(%q, ["~> 3.5"]) - s.add_dependency(%q, ["~> 1.1"]) - s.add_dependency(%q, ["= 1.3.11"]) - s.add_dependency(%q, ["~> 4.2"]) - s.add_dependency(%q, ["~> 0.7.0"]) - s.add_dependency(%q, ["~> 1.6"]) - s.add_dependency(%q, ["~> 2.3"]) - s.add_dependency(%q, ["~> 0.9"]) - s.add_dependency(%q, ["~> 1.0.1"]) - s.add_dependency(%q, ["~> 1.5"]) - s.add_dependency(%q, ["~> 3.2.13"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, ["~> 1.7"]) - end - else - s.add_dependency(%q, ["~> 2.6.1"]) - s.add_dependency(%q, ["~> 1.3"]) - s.add_dependency(%q, ["~> 0.3.3"]) - s.add_dependency(%q, ["~> 1.0"]) - s.add_dependency(%q, ["~> 0.1"]) - s.add_dependency(%q, ["~> 0.6.0"]) - s.add_dependency(%q, ["~> 3.1"]) - s.add_dependency(%q, ["~> 0.1.0"]) - s.add_dependency(%q, ["~> 1.0"]) - s.add_dependency(%q, ["~> 1.0"]) - s.add_dependency(%q, ["~> 1.0"]) - s.add_dependency(%q, ["~> 1.0"]) - s.add_dependency(%q, ["~> 1.1"]) - s.add_dependency(%q, ["~> 2.0"]) - s.add_dependency(%q, ["~> 10.1"]) - s.add_dependency(%q, ["~> 3.11"]) - s.add_dependency(%q, ["~> 1.2"]) - s.add_dependency(%q, ["~> 3.5"]) - s.add_dependency(%q, ["~> 1.1"]) - s.add_dependency(%q, ["= 1.3.11"]) - s.add_dependency(%q, ["~> 4.2"]) - s.add_dependency(%q, ["~> 0.7.0"]) - s.add_dependency(%q, ["~> 1.6"]) - s.add_dependency(%q, ["~> 2.3"]) - s.add_dependency(%q, ["~> 0.9"]) - s.add_dependency(%q, ["~> 1.0.1"]) - s.add_dependency(%q, ["~> 1.5"]) - s.add_dependency(%q, ["~> 3.2.13"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, ["~> 1.7"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/jekyll-coffeescript-1.0.1.gemspec b/vendor/bundle/ruby/2.2.0/specifications/jekyll-coffeescript-1.0.1.gemspec deleted file mode 100644 index e227948..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/jekyll-coffeescript-1.0.1.gemspec +++ /dev/null @@ -1,43 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: jekyll-coffeescript 1.0.1 ruby lib - -Gem::Specification.new do |s| - s.name = "jekyll-coffeescript" - s.version = "1.0.1" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Parker Moore"] - s.date = "2014-08-31" - s.email = ["parkrmoore@gmail.com"] - s.homepage = "https://github.com/jekyll/jekyll-coffeescript" - s.licenses = ["MIT"] - s.rubygems_version = "2.4.6" - s.summary = "A CoffeeScript converter for Jekyll." - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 4 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_runtime_dependency(%q, ["~> 2.2"]) - s.add_development_dependency(%q, ["~> 2.0"]) - s.add_development_dependency(%q, ["~> 1.5"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, [">= 0"]) - else - s.add_dependency(%q, ["~> 2.2"]) - s.add_dependency(%q, ["~> 2.0"]) - s.add_dependency(%q, ["~> 1.5"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - end - else - s.add_dependency(%q, ["~> 2.2"]) - s.add_dependency(%q, ["~> 2.0"]) - s.add_dependency(%q, ["~> 1.5"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/jekyll-gist-1.2.1.gemspec b/vendor/bundle/ruby/2.2.0/specifications/jekyll-gist-1.2.1.gemspec deleted file mode 100644 index 2ea819c..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/jekyll-gist-1.2.1.gemspec +++ /dev/null @@ -1,40 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: jekyll-gist 1.2.1 ruby lib - -Gem::Specification.new do |s| - s.name = "jekyll-gist" - s.version = "1.2.1" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Parker Moore"] - s.date = "2015-03-22" - s.email = ["parkrmoore@gmail.com"] - s.homepage = "https://github.com/jekyll/jekyll-gist" - s.licenses = ["MIT"] - s.rubygems_version = "2.4.6" - s.summary = "Liquid tag for displaying GitHub Gists in Jekyll sites." - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 4 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_development_dependency(%q, ["~> 1.6"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, ["~> 2.0"]) - else - s.add_dependency(%q, ["~> 1.6"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, ["~> 2.0"]) - end - else - s.add_dependency(%q, ["~> 1.6"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, ["~> 2.0"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/jekyll-paginate-1.1.0.gemspec b/vendor/bundle/ruby/2.2.0/specifications/jekyll-paginate-1.1.0.gemspec deleted file mode 100644 index 020844e..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/jekyll-paginate-1.1.0.gemspec +++ /dev/null @@ -1,40 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: jekyll-paginate 1.1.0 ruby lib - -Gem::Specification.new do |s| - s.name = "jekyll-paginate" - s.version = "1.1.0" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Parker Moore"] - s.date = "2014-10-14" - s.email = ["parkrmoore@gmail.com"] - s.homepage = "https://github.com/jekyll/jekyll-paginate" - s.licenses = ["MIT"] - s.rubygems_version = "2.4.6" - s.summary = "Built-in Pagination Generator for Jekyll" - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 4 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_development_dependency(%q, ["~> 2.0"]) - s.add_development_dependency(%q, ["~> 1.5"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, ["~> 3.0"]) - else - s.add_dependency(%q, ["~> 2.0"]) - s.add_dependency(%q, ["~> 1.5"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, ["~> 3.0"]) - end - else - s.add_dependency(%q, ["~> 2.0"]) - s.add_dependency(%q, ["~> 1.5"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, ["~> 3.0"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/jekyll-sass-converter-1.3.0.gemspec b/vendor/bundle/ruby/2.2.0/specifications/jekyll-sass-converter-1.3.0.gemspec deleted file mode 100644 index e9a1f5f..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/jekyll-sass-converter-1.3.0.gemspec +++ /dev/null @@ -1,43 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: jekyll-sass-converter 1.3.0 ruby lib - -Gem::Specification.new do |s| - s.name = "jekyll-sass-converter" - s.version = "1.3.0" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Parker Moore"] - s.date = "2014-12-08" - s.email = ["parkrmoore@gmail.com"] - s.homepage = "https://github.com/jekyll/jekyll-sass-converter" - s.licenses = ["MIT"] - s.rubygems_version = "2.4.6" - s.summary = "A basic Sass converter for Jekyll." - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 4 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_runtime_dependency(%q, ["~> 3.2"]) - s.add_development_dependency(%q, ["~> 1.5"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, ["~> 2.0"]) - else - s.add_dependency(%q, ["~> 3.2"]) - s.add_dependency(%q, ["~> 1.5"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, ["~> 2.0"]) - end - else - s.add_dependency(%q, ["~> 3.2"]) - s.add_dependency(%q, ["~> 1.5"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, ["~> 2.0"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/jekyll-watch-1.2.1.gemspec b/vendor/bundle/ruby/2.2.0/specifications/jekyll-watch-1.2.1.gemspec deleted file mode 100644 index 4ecd906..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/jekyll-watch-1.2.1.gemspec +++ /dev/null @@ -1,43 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: jekyll-watch 1.2.1 ruby lib - -Gem::Specification.new do |s| - s.name = "jekyll-watch" - s.version = "1.2.1" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Parker Moore"] - s.date = "2015-01-24" - s.email = ["parkrmoore@gmail.com"] - s.homepage = "https://github.com/jekyll/jekyll-watch" - s.licenses = ["MIT"] - s.rubygems_version = "2.4.6" - s.summary = "Rebuild your Jekyll site when a file changes with the `--watch` switch." - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 4 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_runtime_dependency(%q, ["~> 2.7"]) - s.add_development_dependency(%q, ["~> 1.6"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, ["~> 3.0"]) - s.add_development_dependency(%q, ["~> 2.0"]) - else - s.add_dependency(%q, ["~> 2.7"]) - s.add_dependency(%q, ["~> 1.6"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, ["~> 3.0"]) - s.add_dependency(%q, ["~> 2.0"]) - end - else - s.add_dependency(%q, ["~> 2.7"]) - s.add_dependency(%q, ["~> 1.6"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, ["~> 3.0"]) - s.add_dependency(%q, ["~> 2.0"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/kramdown-1.7.0.gemspec b/vendor/bundle/ruby/2.2.0/specifications/kramdown-1.7.0.gemspec deleted file mode 100644 index 297ac0d..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/kramdown-1.7.0.gemspec +++ /dev/null @@ -1,53 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: kramdown 1.7.0 ruby lib - -Gem::Specification.new do |s| - s.name = "kramdown" - s.version = "1.7.0" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Thomas Leitner"] - s.date = "2015-04-27" - s.description = "kramdown is yet-another-markdown-parser but fast, pure Ruby,\nusing a strict syntax definition and supporting several common extensions.\n" - s.email = "t_leitner@gmx.at" - s.executables = ["kramdown"] - s.files = ["bin/kramdown"] - s.homepage = "http://kramdown.gettalong.org" - s.licenses = ["MIT"] - s.rdoc_options = ["--main", "lib/kramdown/document.rb"] - s.rubygems_version = "2.4.6" - s.summary = "kramdown is a fast, pure-Ruby Markdown-superset converter." - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 4 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_development_dependency(%q, ["~> 5.0"]) - s.add_development_dependency(%q, ["~> 1.0.0"]) - s.add_development_dependency(%q, ["~> 1.8"]) - s.add_development_dependency(%q, ["~> 1.5.1"]) - s.add_development_dependency(%q, ["~> 2.0"]) - s.add_development_dependency(%q, ["~> 1.0"]) - s.add_development_dependency(%q, ["~> 1.5"]) - else - s.add_dependency(%q, ["~> 5.0"]) - s.add_dependency(%q, ["~> 1.0.0"]) - s.add_dependency(%q, ["~> 1.8"]) - s.add_dependency(%q, ["~> 1.5.1"]) - s.add_dependency(%q, ["~> 2.0"]) - s.add_dependency(%q, ["~> 1.0"]) - s.add_dependency(%q, ["~> 1.5"]) - end - else - s.add_dependency(%q, ["~> 5.0"]) - s.add_dependency(%q, ["~> 1.0.0"]) - s.add_dependency(%q, ["~> 1.8"]) - s.add_dependency(%q, ["~> 1.5.1"]) - s.add_dependency(%q, ["~> 2.0"]) - s.add_dependency(%q, ["~> 1.0"]) - s.add_dependency(%q, ["~> 1.5"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/liquid-2.6.2.gemspec b/vendor/bundle/ruby/2.2.0/specifications/liquid-2.6.2.gemspec deleted file mode 100644 index 264ea71..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/liquid-2.6.2.gemspec +++ /dev/null @@ -1,20 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: liquid 2.6.2 ruby lib - -Gem::Specification.new do |s| - s.name = "liquid" - s.version = "2.6.2" - - s.required_rubygems_version = Gem::Requirement.new(">= 1.3.7") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Tobias Luetke"] - s.date = "2015-01-23" - s.email = ["tobi@leetsoft.com"] - s.extra_rdoc_files = ["History.md", "README.md"] - s.files = ["History.md", "README.md"] - s.homepage = "http://www.liquidmarkup.org" - s.rubygems_version = "2.4.6" - s.summary = "A secure, non-evaling end user template engine with aesthetic markup." - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/listen-2.10.0.gemspec b/vendor/bundle/ruby/2.2.0/specifications/listen-2.10.0.gemspec deleted file mode 100644 index 54a2a3f..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/listen-2.10.0.gemspec +++ /dev/null @@ -1,44 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: listen 2.10.0 ruby lib - -Gem::Specification.new do |s| - s.name = "listen" - s.version = "2.10.0" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Thibaud Guillaume-Gentil"] - s.date = "2015-03-26" - s.description = "The Listen gem listens to file modifications and notifies you about the changes. Works everywhere!" - s.email = "thibaud@thibaud.gg" - s.executables = ["listen"] - s.files = ["bin/listen"] - s.homepage = "https://github.com/guard/listen" - s.licenses = ["MIT"] - s.required_ruby_version = Gem::Requirement.new(">= 1.9.3") - s.rubygems_version = "2.4.6" - s.summary = "Listen to file modifications" - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 4 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_runtime_dependency(%q, ["~> 0.16.0"]) - s.add_runtime_dependency(%q, [">= 0.9.3"]) - s.add_runtime_dependency(%q, [">= 0.9"]) - s.add_development_dependency(%q, [">= 1.3.5"]) - else - s.add_dependency(%q, ["~> 0.16.0"]) - s.add_dependency(%q, [">= 0.9.3"]) - s.add_dependency(%q, [">= 0.9"]) - s.add_dependency(%q, [">= 1.3.5"]) - end - else - s.add_dependency(%q, ["~> 0.16.0"]) - s.add_dependency(%q, [">= 0.9.3"]) - s.add_dependency(%q, [">= 0.9"]) - s.add_dependency(%q, [">= 1.3.5"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/mercenary-0.3.5.gemspec b/vendor/bundle/ruby/2.2.0/specifications/mercenary-0.3.5.gemspec deleted file mode 100644 index 2dccfc4..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/mercenary-0.3.5.gemspec +++ /dev/null @@ -1,38 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: mercenary 0.3.5 ruby lib - -Gem::Specification.new do |s| - s.name = "mercenary" - s.version = "0.3.5" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Tom Preston-Werner", "Parker Moore"] - s.date = "2014-11-12" - s.description = "Lightweight and flexible library for writing command-line apps in Ruby." - s.email = ["tom@mojombo.com", "parkrmoore@gmail.com"] - s.homepage = "https://github.com/jekyll/mercenary" - s.licenses = ["MIT"] - s.rubygems_version = "2.4.6" - s.summary = "Lightweight and flexible library for writing command-line apps in Ruby." - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 4 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_development_dependency(%q, ["~> 1.3"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, ["~> 3.0"]) - else - s.add_dependency(%q, ["~> 1.3"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, ["~> 3.0"]) - end - else - s.add_dependency(%q, ["~> 1.3"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, ["~> 3.0"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/parslet-1.5.0.gemspec b/vendor/bundle/ruby/2.2.0/specifications/parslet-1.5.0.gemspec deleted file mode 100644 index 2af6225..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/parslet-1.5.0.gemspec +++ /dev/null @@ -1,57 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: parslet 1.5.0 ruby lib - -Gem::Specification.new do |s| - s.name = "parslet" - s.version = "1.5.0" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Kaspar Schiess"] - s.date = "2012-12-27" - s.email = "kaspar.schiess@absurd.li" - s.extra_rdoc_files = ["README"] - s.files = ["README"] - s.homepage = "http://kschiess.github.com/parslet" - s.rdoc_options = ["--main", "README"] - s.rubygems_version = "2.4.6" - s.summary = "Parser construction library with great error reporting in Ruby." - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 3 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_runtime_dependency(%q, ["~> 2.0"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, [">= 0"]) - else - s.add_dependency(%q, ["~> 2.0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - end - else - s.add_dependency(%q, ["~> 2.0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/posix-spawn-0.3.11.gemspec b/vendor/bundle/ruby/2.2.0/specifications/posix-spawn-0.3.11.gemspec deleted file mode 100644 index 1328637..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/posix-spawn-0.3.11.gemspec +++ /dev/null @@ -1,40 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: posix-spawn 0.3.11 ruby lib -# stub: ext/extconf.rb - -Gem::Specification.new do |s| - s.name = "posix-spawn" - s.version = "0.3.11" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Ryan Tomayko", "Aman Gupta"] - s.date = "2015-04-07" - s.description = "posix-spawn uses posix_spawnp(2) for faster process spawning" - s.email = ["r@tomayko.com", "aman@tmm1.net"] - s.executables = ["posix-spawn-benchmark"] - s.extensions = ["ext/extconf.rb"] - s.extra_rdoc_files = ["COPYING", "HACKING"] - s.files = ["COPYING", "HACKING", "bin/posix-spawn-benchmark", "ext/extconf.rb"] - s.homepage = "https://github.com/rtomayko/posix-spawn" - s.licenses = ["MIT", "LGPL"] - s.rubygems_version = "2.4.6" - s.summary = "posix_spawnp(2) for ruby" - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 4 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_development_dependency(%q, ["= 0.7.6"]) - s.add_development_dependency(%q, [">= 4"]) - else - s.add_dependency(%q, ["= 0.7.6"]) - s.add_dependency(%q, [">= 4"]) - end - else - s.add_dependency(%q, ["= 0.7.6"]) - s.add_dependency(%q, [">= 4"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/pygments.rb-0.6.3.gemspec b/vendor/bundle/ruby/2.2.0/specifications/pygments.rb-0.6.3.gemspec deleted file mode 100644 index fb7ff44..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/pygments.rb-0.6.3.gemspec +++ /dev/null @@ -1,38 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: pygments.rb 0.6.3 ruby lib - -Gem::Specification.new do |s| - s.name = "pygments.rb" - s.version = "0.6.3" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Aman Gupta", "Ted Nyman"] - s.date = "2015-03-24" - s.description = "pygments.rb exposes the pygments syntax highlighter to Ruby" - s.email = ["aman@tmm1.net"] - s.homepage = "https://github.com/tmm1/pygments.rb" - s.licenses = ["MIT"] - s.rubygems_version = "2.4.6" - s.summary = "pygments wrapper for ruby" - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 3 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_runtime_dependency(%q, ["~> 1.2.0"]) - s.add_runtime_dependency(%q, ["~> 0.3.6"]) - s.add_development_dependency(%q, ["~> 0.7.6"]) - else - s.add_dependency(%q, ["~> 1.2.0"]) - s.add_dependency(%q, ["~> 0.3.6"]) - s.add_dependency(%q, ["~> 0.7.6"]) - end - else - s.add_dependency(%q, ["~> 1.2.0"]) - s.add_dependency(%q, ["~> 0.3.6"]) - s.add_dependency(%q, ["~> 0.7.6"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/rb-fsevent-0.9.4.gemspec b/vendor/bundle/ruby/2.2.0/specifications/rb-fsevent-0.9.4.gemspec deleted file mode 100644 index 1e20f1a..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/rb-fsevent-0.9.4.gemspec +++ /dev/null @@ -1,38 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: rb-fsevent 0.9.4 ruby lib - -Gem::Specification.new do |s| - s.name = "rb-fsevent" - s.version = "0.9.4" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Thibaud Guillaume-Gentil", "Travis Tilley"] - s.date = "2013-12-30" - s.description = "FSEvents API with Signals catching (without RubyCocoa)" - s.email = ["thibaud@thibaud.gg", "ttilley@gmail.com"] - s.homepage = "http://rubygems.org/gems/rb-fsevent" - s.licenses = ["MIT"] - s.rubygems_version = "2.4.6" - s.summary = "Very simple & usable FSEvents API" - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 4 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_development_dependency(%q, ["~> 1.0"]) - s.add_development_dependency(%q, ["~> 2.11"]) - s.add_development_dependency(%q, ["~> 4.2"]) - else - s.add_dependency(%q, ["~> 1.0"]) - s.add_dependency(%q, ["~> 2.11"]) - s.add_dependency(%q, ["~> 4.2"]) - end - else - s.add_dependency(%q, ["~> 1.0"]) - s.add_dependency(%q, ["~> 2.11"]) - s.add_dependency(%q, ["~> 4.2"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/rb-inotify-0.9.5.gemspec b/vendor/bundle/ruby/2.2.0/specifications/rb-inotify-0.9.5.gemspec deleted file mode 100644 index 2b90e25..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/rb-inotify-0.9.5.gemspec +++ /dev/null @@ -1,36 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: rb-inotify 0.9.5 ruby lib - -Gem::Specification.new do |s| - s.name = "rb-inotify" - s.version = "0.9.5" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Nathan Weizenbaum"] - s.date = "2014-06-06" - s.description = "A Ruby wrapper for Linux's inotify, using FFI" - s.email = "nex342@gmail.com" - s.extra_rdoc_files = ["README.md"] - s.files = ["README.md"] - s.homepage = "http://github.com/nex3/rb-inotify" - s.rubygems_version = "2.4.6" - s.summary = "A Ruby wrapper for Linux's inotify, using FFI" - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 4 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_runtime_dependency(%q, [">= 0.5.0"]) - s.add_development_dependency(%q, [">= 0.4.0"]) - else - s.add_dependency(%q, [">= 0.5.0"]) - s.add_dependency(%q, [">= 0.4.0"]) - end - else - s.add_dependency(%q, [">= 0.5.0"]) - s.add_dependency(%q, [">= 0.4.0"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/redcarpet-3.2.3.gemspec b/vendor/bundle/ruby/2.2.0/specifications/redcarpet-3.2.3.gemspec deleted file mode 100644 index be5fad7..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/redcarpet-3.2.3.gemspec +++ /dev/null @@ -1,44 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: redcarpet 3.2.3 ruby lib -# stub: ext/redcarpet/extconf.rb - -Gem::Specification.new do |s| - s.name = "redcarpet" - s.version = "3.2.3" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Natacha Port\u{e9}", "Vicent Mart\u{ed}"] - s.date = "2015-04-05" - s.description = "A fast, safe and extensible Markdown to (X)HTML parser" - s.email = "vicent@github.com" - s.executables = ["redcarpet"] - s.extensions = ["ext/redcarpet/extconf.rb"] - s.extra_rdoc_files = ["COPYING"] - s.files = ["COPYING", "bin/redcarpet", "ext/redcarpet/extconf.rb"] - s.homepage = "http://github.com/vmg/redcarpet" - s.licenses = ["MIT"] - s.required_ruby_version = Gem::Requirement.new(">= 1.9.2") - s.rubygems_version = "2.4.6" - s.summary = "Markdown that smells nice" - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 4 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_development_dependency(%q, ["~> 1.6.0"]) - s.add_development_dependency(%q, ["~> 0.8.3"]) - s.add_development_dependency(%q, ["~> 2.5.4"]) - else - s.add_dependency(%q, ["~> 1.6.0"]) - s.add_dependency(%q, ["~> 0.8.3"]) - s.add_dependency(%q, ["~> 2.5.4"]) - end - else - s.add_dependency(%q, ["~> 1.6.0"]) - s.add_dependency(%q, ["~> 0.8.3"]) - s.add_dependency(%q, ["~> 2.5.4"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/rouge-1.9.1.gemspec b/vendor/bundle/ruby/2.2.0/specifications/rouge-1.9.1.gemspec deleted file mode 100644 index 5209e33..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/rouge-1.9.1.gemspec +++ /dev/null @@ -1,23 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: rouge 1.9.1 ruby lib - -Gem::Specification.new do |s| - s.name = "rouge" - s.version = "1.9.1" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Jeanine Adkisson"] - s.date = "2015-07-13" - s.description = "Rouge aims to a be a simple, easy-to-extend drop-in replacement for pygments." - s.email = ["jneen@jneen.net"] - s.executables = ["rougify"] - s.files = ["bin/rougify"] - s.homepage = "http://rouge.jneen.net/" - s.licenses = ["MIT (see LICENSE file)"] - s.rubyforge_project = "rouge" - s.rubygems_version = "2.4.6" - s.summary = "A pure-ruby colorizer based on pygments" - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/safe_yaml-1.0.4.gemspec b/vendor/bundle/ruby/2.2.0/specifications/safe_yaml-1.0.4.gemspec deleted file mode 100644 index 8bcb9b7..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/safe_yaml-1.0.4.gemspec +++ /dev/null @@ -1,23 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: safe_yaml 1.0.4 ruby lib - -Gem::Specification.new do |s| - s.name = "safe_yaml" - s.version = "1.0.4" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Dan Tao"] - s.date = "2014-09-28" - s.description = "Parse YAML safely" - s.email = "daniel.tao@gmail.com" - s.executables = ["safe_yaml"] - s.files = ["bin/safe_yaml"] - s.homepage = "https://github.com/dtao/safe_yaml" - s.licenses = ["MIT"] - s.required_ruby_version = Gem::Requirement.new(">= 1.8.7") - s.rubygems_version = "2.4.6" - s.summary = "SameYAML provides an alternative implementation of YAML.load suitable for accepting user input in Ruby applications." - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/sass-3.4.13.gemspec b/vendor/bundle/ruby/2.2.0/specifications/sass-3.4.13.gemspec deleted file mode 100644 index 3bf084a..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/sass-3.4.13.gemspec +++ /dev/null @@ -1,42 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: sass 3.4.13 ruby lib - -Gem::Specification.new do |s| - s.name = "sass" - s.version = "3.4.13" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Natalie Weizenbaum", "Chris Eppstein", "Hampton Catlin"] - s.date = "2015-02-27" - s.description = " Sass makes CSS fun again. Sass is an extension of CSS3, adding\n nested rules, variables, mixins, selector inheritance, and more.\n It's translated to well-formatted, standard CSS using the\n command line tool or a web-framework plugin.\n" - s.email = "sass-lang@googlegroups.com" - s.executables = ["sass", "sass-convert", "scss"] - s.files = ["bin/sass", "bin/sass-convert", "bin/scss"] - s.homepage = "http://sass-lang.com/" - s.licenses = ["MIT"] - s.required_ruby_version = Gem::Requirement.new(">= 1.8.7") - s.rubyforge_project = "sass" - s.rubygems_version = "2.4.6" - s.summary = "A powerful but elegant CSS compiler that makes CSS fun again." - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 4 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_development_dependency(%q, [">= 0.5.3"]) - s.add_development_dependency(%q, [">= 0.5.9"]) - s.add_development_dependency(%q, [">= 5"]) - else - s.add_dependency(%q, [">= 0.5.3"]) - s.add_dependency(%q, [">= 0.5.9"]) - s.add_dependency(%q, [">= 5"]) - end - else - s.add_dependency(%q, [">= 0.5.3"]) - s.add_dependency(%q, [">= 0.5.9"]) - s.add_dependency(%q, [">= 5"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/timers-4.0.1.gemspec b/vendor/bundle/ruby/2.2.0/specifications/timers-4.0.1.gemspec deleted file mode 100644 index e44bebc..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/timers-4.0.1.gemspec +++ /dev/null @@ -1,38 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: timers 4.0.1 ruby lib - -Gem::Specification.new do |s| - s.name = "timers" - s.version = "4.0.1" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Tony Arcieri"] - s.date = "2014-09-10" - s.description = "Pure Ruby one-shot and periodic timers" - s.email = ["tony.arcieri@gmail.com"] - s.homepage = "https://github.com/celluloid/timers" - s.licenses = ["MIT"] - s.rubygems_version = "2.4.6" - s.summary = "Schedule procs to run after a certain time, or at periodic intervals, using any API that accepts a timeout" - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 4 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_runtime_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, ["~> 3.0.0"]) - else - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, ["~> 3.0.0"]) - end - else - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, ["~> 3.0.0"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/toml-0.1.2.gemspec b/vendor/bundle/ruby/2.2.0/specifications/toml-0.1.2.gemspec deleted file mode 100644 index 0524716..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/toml-0.1.2.gemspec +++ /dev/null @@ -1,38 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: toml 0.1.2 ruby lib - -Gem::Specification.new do |s| - s.name = "toml" - s.version = "0.1.2" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Jeremy McAnally", "Dirk Gadsden"] - s.date = "2014-10-16" - s.description = "Parse your TOML, seriously." - s.email = "jeremy@github.com" - s.extra_rdoc_files = ["README.md", "LICENSE", "CHANGELOG.md"] - s.files = ["CHANGELOG.md", "LICENSE", "README.md"] - s.homepage = "http://github.com/jm/toml" - s.licenses = ["MIT"] - s.rdoc_options = ["--charset=UTF-8"] - s.rubygems_version = "2.4.6" - s.summary = "Parse your TOML." - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 2 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_runtime_dependency(%q, ["~> 1.5.0"]) - s.add_development_dependency(%q, [">= 0"]) - else - s.add_dependency(%q, ["~> 1.5.0"]) - s.add_dependency(%q, [">= 0"]) - end - else - s.add_dependency(%q, ["~> 1.5.0"]) - s.add_dependency(%q, [">= 0"]) - end -end diff --git a/vendor/bundle/ruby/2.2.0/specifications/yajl-ruby-1.2.3.gemspec b/vendor/bundle/ruby/2.2.0/specifications/yajl-ruby-1.2.3.gemspec deleted file mode 100644 index e9c94ac..0000000 --- a/vendor/bundle/ruby/2.2.0/specifications/yajl-ruby-1.2.3.gemspec +++ /dev/null @@ -1,44 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: yajl-ruby 1.2.3 ruby lib -# stub: ext/yajl/extconf.rb - -Gem::Specification.new do |s| - s.name = "yajl-ruby" - s.version = "1.2.3" - - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib"] - s.authors = ["Brian Lopez", "Lloyd Hilaiel"] - s.date = "2017-11-29" - s.email = "seniorlopez@gmail.com" - s.extensions = ["ext/yajl/extconf.rb"] - s.files = ["ext/yajl/extconf.rb"] - s.homepage = "http://github.com/brianmario/yajl-ruby" - s.licenses = ["MIT"] - s.required_ruby_version = Gem::Requirement.new(">= 1.8.6") - s.rubygems_version = "2.4.6" - s.summary = "Ruby C bindings to the excellent Yajl JSON stream-based parser library." - - s.installed_by_version = "2.4.6" if s.respond_to? :installed_by_version - - if s.respond_to? :specification_version then - s.specification_version = 4 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_development_dependency(%q, [">= 0.7.5"]) - s.add_development_dependency(%q, ["~> 2.14"]) - s.add_development_dependency(%q, ["~> 3.1.2"]) - s.add_development_dependency(%q, [">= 0"]) - else - s.add_dependency(%q, [">= 0.7.5"]) - s.add_dependency(%q, ["~> 2.14"]) - s.add_dependency(%q, ["~> 3.1.2"]) - s.add_dependency(%q, [">= 0"]) - end - else - s.add_dependency(%q, [">= 0.7.5"]) - s.add_dependency(%q, ["~> 2.14"]) - s.add_dependency(%q, ["~> 3.1.2"]) - s.add_dependency(%q, [">= 0"]) - end -end From 9caac2ba08168f9e085becc015eb08cdc81f144e Mon Sep 17 00:00:00 2001 From: Ryan Ahearn Date: Fri, 22 Mar 2019 11:22:44 -0400 Subject: [PATCH 2/2] Run bundle update to remove security warning --- Gemfile.lock | 125 +++++++++++++++++++++++++-------------------------- 1 file changed, 62 insertions(+), 63 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 36cf7a4..2b28a30 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,72 +1,68 @@ GEM remote: https://rubygems.org/ specs: - blankslate (2.1.2.4) - celluloid (0.16.0) - timers (~> 4.0.0) - classifier-reborn (2.0.3) - fast-stemmer (~> 1.0) - coffee-script (2.4.1) - coffee-script-source - execjs - coffee-script-source (1.9.1.1) - colorator (0.1) - execjs (2.5.2) - fast-stemmer (1.0.2) - ffi (1.9.8) - guides_style_18f (0.0.1) - jekyll (~> 2.5) - rouge (~> 1.9) - sass (~> 3.4) - hitimes (1.2.2) - jekyll (2.5.3) - classifier-reborn (~> 2.0) - colorator (~> 0.1) - jekyll-coffeescript (~> 1.0) - jekyll-gist (~> 1.0) - jekyll-paginate (~> 1.0) + addressable (2.6.0) + public_suffix (>= 2.0.2, < 4.0) + colorator (1.1.0) + concurrent-ruby (1.1.5) + em-websocket (0.5.1) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0.6.0) + eventmachine (1.2.7) + ffi (1.10.0) + forwardable-extended (2.6.0) + guides_style_18f (2.0.1) + jekyll (~> 3.3) + jekyll_pages_api + jekyll_pages_api_search + htmlentities (4.3.4) + http_parser.rb (0.6.0) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jekyll (3.8.5) + addressable (~> 2.4) + colorator (~> 1.0) + em-websocket (~> 0.5) + i18n (~> 0.7) jekyll-sass-converter (~> 1.0) - jekyll-watch (~> 1.1) - kramdown (~> 1.3) - liquid (~> 2.6.1) + jekyll-watch (~> 2.0) + kramdown (~> 1.14) + liquid (~> 4.0) mercenary (~> 0.3.3) - pygments.rb (~> 0.6.0) - redcarpet (~> 3.1) + pathutil (~> 0.9) + rouge (>= 1.7, < 4) safe_yaml (~> 1.0) - toml (~> 0.1.0) - jekyll-coffeescript (1.0.1) - coffee-script (~> 2.2) - jekyll-gist (1.2.1) - jekyll-paginate (1.1.0) - jekyll-sass-converter (1.3.0) - sass (~> 3.2) - jekyll-watch (1.2.1) - listen (~> 2.7) - kramdown (1.7.0) - liquid (2.6.2) - listen (2.10.0) - celluloid (~> 0.16.0) - rb-fsevent (>= 0.9.3) - rb-inotify (>= 0.9) - mercenary (0.3.5) - parslet (1.5.0) - blankslate (~> 2.0) - posix-spawn (0.3.11) - pygments.rb (0.6.3) - posix-spawn (~> 0.3.6) - yajl-ruby (~> 1.2.0) - rb-fsevent (0.9.4) - rb-inotify (0.9.5) - ffi (>= 0.5.0) - redcarpet (3.2.3) - rouge (1.9.1) - safe_yaml (1.0.4) - sass (3.4.13) - timers (4.0.1) - hitimes - toml (0.1.2) - parslet (~> 1.5.0) - yajl-ruby (1.2.3) + jekyll-sass-converter (1.5.2) + sass (~> 3.4) + jekyll-watch (2.2.0) + listen (~> 3.0) + jekyll_pages_api (0.1.6) + htmlentities (~> 4.3) + jekyll (>= 2.0, < 4.0) + jekyll_pages_api_search (0.5.0) + jekyll_pages_api (~> 0.1.4) + sass (~> 3.4) + kramdown (1.17.0) + liquid (4.0.3) + listen (3.1.5) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + ruby_dep (~> 1.2) + mercenary (0.3.6) + pathutil (0.16.2) + forwardable-extended (~> 2.6) + public_suffix (3.0.3) + rb-fsevent (0.10.3) + rb-inotify (0.10.0) + ffi (~> 1.0) + rouge (3.3.0) + ruby_dep (1.5.0) + safe_yaml (1.0.5) + sass (3.7.3) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) PLATFORMS ruby @@ -74,3 +70,6 @@ PLATFORMS DEPENDENCIES guides_style_18f jekyll + +BUNDLED WITH + 2.0.1

    r!hfUPt^LVs)4y8$ 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 diff --git a/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/ffi-1.9.8/gem.build_complete b/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/ffi-1.9.8/gem.build_complete deleted file mode 100644 index e69de29..0000000 diff --git a/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/ffi-1.9.8/gem_make.out b/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/ffi-1.9.8/gem_make.out deleted file mode 100644 index bad9e2d..0000000 --- a/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/ffi-1.9.8/gem_make.out +++ /dev/null @@ -1,56 +0,0 @@ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/bin/ruby -r ./siteconf20180423-68206-10d82pl.rb extconf.rb -checking for ffi.h... no -checking for ffi.h in /usr/local/include,/usr/include/ffi... yes -checking for ffi_call() in -lffi... yes -checking for ffi_prep_closure()... yes -checking for ffi_raw_call()... no -checking for rb_thread_blocking_region()... no -checking for rb_thread_call_with_gvl()... yes -checking for rb_thread_call_without_gvl()... yes -checking for ffi_prep_cif_var()... no -creating extconf.h -creating Makefile - -make "DESTDIR=" clean - -make "DESTDIR=" -compiling AbstractMemory.c -compiling ArrayType.c -compiling Buffer.c -compiling Call.c -Call.c:368:5: warning: implicit declaration of function 'rb_thread_call_without_gvl' is invalid in C99 [-Wimplicit-function-declaration] - rbffi_thread_blocking_region(call_blocking_function, data, (void *) -1, NULL); - ^ -./Thread.h:78:39: note: expanded from macro 'rbffi_thread_blocking_region' -# define rbffi_thread_blocking_region rb_thread_call_without_gvl - ^ -1 warning generated. -compiling ClosurePool.c -compiling DataConverter.c -compiling DynamicLibrary.c -compiling ffi.c -compiling Function.c -Function.c:563:9: warning: implicit declaration of function 'rb_thread_call_without_gvl' is invalid in C99 [-Wimplicit-function-declaration] - rb_thread_call_without_gvl(async_cb_wait, &w, async_cb_stop, &w); - ^ -1 warning generated. -compiling FunctionInfo.c -compiling LastError.c -compiling LongDouble.c -compiling MappedType.c -compiling MemoryPointer.c -compiling MethodHandle.c -compiling Platform.c -compiling Pointer.c -compiling Struct.c -compiling StructByReference.c -compiling StructByValue.c -compiling StructLayout.c -compiling Thread.c -compiling Type.c -compiling Types.c -compiling Variadic.c -linking shared-object ffi_c.bundle - -make "DESTDIR=" install -/usr/bin/install -c -m 0755 ffi_c.bundle ./.gem.20180423-68206-141lfcp diff --git a/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/ffi-1.9.8/mkmf.log b/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/ffi-1.9.8/mkmf.log deleted file mode 100644 index b1b533a..0000000 --- a/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/ffi-1.9.8/mkmf.log +++ /dev/null @@ -1,402 +0,0 @@ -package configuration for libffi is not found -have_header: checking for ffi.h... -------------------- no - -"gcc -o conftest -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/x86_64-darwin14 -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/backward -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0 -I. -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens -fno-common -pipe conftest.c -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L. -L/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/lib -L. -fstack-protector -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -lruby.2.2.0 -lpthread -ldl -lobjc " -checked program was: -/* begin */ -1: #include "ruby.h" -2: -3: int main(int argc, char **argv) -4: { -5: return 0; -6: } -/* end */ - -"gcc -E -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/x86_64-darwin14 -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/backward -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0 -I. -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens -fno-common -pipe conftest.c -o conftest.i" -conftest.c:3:10: fatal error: 'ffi.h' file not found -#include - ^~~~~~~ -1 error generated. -checked program was: -/* begin */ -1: #include "ruby.h" -2: -3: #include -/* end */ - --------------------- - -find_header: checking for ffi.h in /usr/local/include,/usr/include/ffi... -------------------- yes - -"gcc -E -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/x86_64-darwin14 -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/backward -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0 -I. -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens -fno-common -pipe conftest.c -o conftest.i" -conftest.c:3:10: fatal error: 'ffi.h' file not found -#include - ^~~~~~~ -1 error generated. -checked program was: -/* begin */ -1: #include "ruby.h" -2: -3: #include -/* end */ - -"gcc -E -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/x86_64-darwin14 -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/backward -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0 -I. -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens -fno-common -pipe -I/usr/local/include conftest.c -o conftest.i" -conftest.c:3:10: fatal error: 'ffi.h' file not found -#include - ^~~~~~~ -1 error generated. -checked program was: -/* begin */ -1: #include "ruby.h" -2: -3: #include -/* end */ - -"gcc -E -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/x86_64-darwin14 -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/backward -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0 -I. -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens -fno-common -pipe -I/usr/include/ffi conftest.c -o conftest.i" -checked program was: -/* begin */ -1: #include "ruby.h" -2: -3: #include -/* end */ - --------------------- - -have_library: checking for ffi_call() in -lffi... -------------------- yes - -"gcc -o conftest -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/x86_64-darwin14 -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/backward -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0 -I. -I/usr/include/ffi -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens -fno-common -pipe conftest.c -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L. -L/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/lib -L. -fstack-protector -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -lruby.2.2.0 -lffi -lpthread -ldl -lobjc " -checked program was: -/* begin */ - 1: #include "ruby.h" - 2: - 3: #include - 4: - 5: /*top*/ - 6: extern int t(void); - 7: int main(int argc, char **argv) - 8: { - 9: if (argc > 1000000) { -10: printf("%p", &t); -11: } -12: -13: return 0; -14: } -15: int t(void) { void ((*volatile p)()); p = (void ((*)()))ffi_call; return 0; } -/* end */ - --------------------- - -have_func: checking for ffi_prep_closure()... -------------------- yes - -"gcc -o conftest -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/x86_64-darwin14 -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/backward -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0 -I. -I/usr/include/ffi -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens -fno-common -pipe conftest.c -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L. -L/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/lib -L. -fstack-protector -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -lffi -lruby.2.2.0 -lffi -lpthread -ldl -lobjc " -conftest.c:13:57: error: use of undeclared identifier 'ffi_prep_closure' -int t(void) { void ((*volatile p)()); p = (void ((*)()))ffi_prep_closure; return 0; } - ^ -1 error generated. -checked program was: -/* begin */ - 1: #include "ruby.h" - 2: - 3: /*top*/ - 4: extern int t(void); - 5: int main(int argc, char **argv) - 6: { - 7: if (argc > 1000000) { - 8: printf("%p", &t); - 9: } -10: -11: return 0; -12: } -13: int t(void) { void ((*volatile p)()); p = (void ((*)()))ffi_prep_closure; return 0; } -/* end */ - -"gcc -o conftest -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/x86_64-darwin14 -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/backward -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0 -I. -I/usr/include/ffi -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens -fno-common -pipe conftest.c -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L. -L/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/lib -L. -fstack-protector -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -lffi -lruby.2.2.0 -lffi -lpthread -ldl -lobjc " -conftest.c:13:15: warning: implicit declaration of function 'ffi_prep_closure' is invalid in C99 [-Wimplicit-function-declaration] -int t(void) { ffi_prep_closure(); return 0; } - ^ -1 warning generated. -checked program was: -/* begin */ - 1: #include "ruby.h" - 2: - 3: /*top*/ - 4: extern int t(void); - 5: int main(int argc, char **argv) - 6: { - 7: if (argc > 1000000) { - 8: printf("%p", &t); - 9: } -10: -11: return 0; -12: } -13: int t(void) { ffi_prep_closure(); return 0; } -/* end */ - --------------------- - -have_func: checking for ffi_raw_call()... -------------------- no - -"gcc -o conftest -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/x86_64-darwin14 -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/backward -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0 -I. -I/usr/include/ffi -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens -fno-common -pipe conftest.c -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L. -L/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/lib -L. -fstack-protector -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -lffi -lruby.2.2.0 -lffi -lpthread -ldl -lobjc " -conftest.c:13:57: error: use of undeclared identifier 'ffi_raw_call' -int t(void) { void ((*volatile p)()); p = (void ((*)()))ffi_raw_call; return 0; } - ^ -1 error generated. -checked program was: -/* begin */ - 1: #include "ruby.h" - 2: - 3: /*top*/ - 4: extern int t(void); - 5: int main(int argc, char **argv) - 6: { - 7: if (argc > 1000000) { - 8: printf("%p", &t); - 9: } -10: -11: return 0; -12: } -13: int t(void) { void ((*volatile p)()); p = (void ((*)()))ffi_raw_call; return 0; } -/* end */ - -"gcc -o conftest -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/x86_64-darwin14 -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/backward -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0 -I. -I/usr/include/ffi -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens -fno-common -pipe conftest.c -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L. -L/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/lib -L. -fstack-protector -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -lffi -lruby.2.2.0 -lffi -lpthread -ldl -lobjc " -conftest.c:13:15: warning: implicit declaration of function 'ffi_raw_call' is invalid in C99 [-Wimplicit-function-declaration] -int t(void) { ffi_raw_call(); return 0; } - ^ -1 warning generated. -Undefined symbols for architecture x86_64: - "_ffi_raw_call", referenced from: - _t in conftest-2d5580.o -ld: symbol(s) not found for architecture x86_64 -clang: error: linker command failed with exit code 1 (use -v to see invocation) -checked program was: -/* begin */ - 1: #include "ruby.h" - 2: - 3: /*top*/ - 4: extern int t(void); - 5: int main(int argc, char **argv) - 6: { - 7: if (argc > 1000000) { - 8: printf("%p", &t); - 9: } -10: -11: return 0; -12: } -13: int t(void) { ffi_raw_call(); return 0; } -/* end */ - --------------------- - -have_func: checking for rb_thread_blocking_region()... -------------------- no - -"gcc -o conftest -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/x86_64-darwin14 -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/backward -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0 -I. -I/usr/include/ffi -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens -fno-common -pipe conftest.c -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L. -L/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/lib -L. -fstack-protector -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -lffi -lruby.2.2.0 -lffi -lpthread -ldl -lobjc " -conftest.c:13:57: error: use of undeclared identifier 'rb_thread_blocking_region' -int t(void) { void ((*volatile p)()); p = (void ((*)()))rb_thread_blocking_region; return 0; } - ^ -1 error generated. -checked program was: -/* begin */ - 1: #include "ruby.h" - 2: - 3: /*top*/ - 4: extern int t(void); - 5: int main(int argc, char **argv) - 6: { - 7: if (argc > 1000000) { - 8: printf("%p", &t); - 9: } -10: -11: return 0; -12: } -13: int t(void) { void ((*volatile p)()); p = (void ((*)()))rb_thread_blocking_region; return 0; } -/* end */ - -"gcc -o conftest -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/x86_64-darwin14 -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/backward -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0 -I. -I/usr/include/ffi -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens -fno-common -pipe conftest.c -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L. -L/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/lib -L. -fstack-protector -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -lffi -lruby.2.2.0 -lffi -lpthread -ldl -lobjc " -conftest.c:13:15: warning: implicit declaration of function 'rb_thread_blocking_region' is invalid in C99 [-Wimplicit-function-declaration] -int t(void) { rb_thread_blocking_region(); return 0; } - ^ -1 warning generated. -Undefined symbols for architecture x86_64: - "_rb_thread_blocking_region", referenced from: - _t in conftest-9a3441.o -ld: symbol(s) not found for architecture x86_64 -clang: error: linker command failed with exit code 1 (use -v to see invocation) -checked program was: -/* begin */ - 1: #include "ruby.h" - 2: - 3: /*top*/ - 4: extern int t(void); - 5: int main(int argc, char **argv) - 6: { - 7: if (argc > 1000000) { - 8: printf("%p", &t); - 9: } -10: -11: return 0; -12: } -13: int t(void) { rb_thread_blocking_region(); return 0; } -/* end */ - --------------------- - -have_func: checking for rb_thread_call_with_gvl()... -------------------- yes - -"gcc -o conftest -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/x86_64-darwin14 -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/backward -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0 -I. -I/usr/include/ffi -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens -fno-common -pipe conftest.c -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L. -L/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/lib -L. -fstack-protector -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -lffi -lruby.2.2.0 -lffi -lpthread -ldl -lobjc " -conftest.c:13:57: error: use of undeclared identifier 'rb_thread_call_with_gvl' -int t(void) { void ((*volatile p)()); p = (void ((*)()))rb_thread_call_with_gvl; return 0; } - ^ -1 error generated. -checked program was: -/* begin */ - 1: #include "ruby.h" - 2: - 3: /*top*/ - 4: extern int t(void); - 5: int main(int argc, char **argv) - 6: { - 7: if (argc > 1000000) { - 8: printf("%p", &t); - 9: } -10: -11: return 0; -12: } -13: int t(void) { void ((*volatile p)()); p = (void ((*)()))rb_thread_call_with_gvl; return 0; } -/* end */ - -"gcc -o conftest -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/x86_64-darwin14 -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/backward -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0 -I. -I/usr/include/ffi -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens -fno-common -pipe conftest.c -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L. -L/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/lib -L. -fstack-protector -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -lffi -lruby.2.2.0 -lffi -lpthread -ldl -lobjc " -conftest.c:13:15: warning: implicit declaration of function 'rb_thread_call_with_gvl' is invalid in C99 [-Wimplicit-function-declaration] -int t(void) { rb_thread_call_with_gvl(); return 0; } - ^ -1 warning generated. -checked program was: -/* begin */ - 1: #include "ruby.h" - 2: - 3: /*top*/ - 4: extern int t(void); - 5: int main(int argc, char **argv) - 6: { - 7: if (argc > 1000000) { - 8: printf("%p", &t); - 9: } -10: -11: return 0; -12: } -13: int t(void) { rb_thread_call_with_gvl(); return 0; } -/* end */ - --------------------- - -have_func: checking for rb_thread_call_without_gvl()... -------------------- yes - -"gcc -o conftest -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/x86_64-darwin14 -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/backward -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0 -I. -I/usr/include/ffi -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens -fno-common -pipe conftest.c -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L. -L/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/lib -L. -fstack-protector -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -lffi -lruby.2.2.0 -lffi -lpthread -ldl -lobjc " -conftest.c:13:57: error: use of undeclared identifier 'rb_thread_call_without_gvl' -int t(void) { void ((*volatile p)()); p = (void ((*)()))rb_thread_call_without_gvl; return 0; } - ^ -1 error generated. -checked program was: -/* begin */ - 1: #include "ruby.h" - 2: - 3: /*top*/ - 4: extern int t(void); - 5: int main(int argc, char **argv) - 6: { - 7: if (argc > 1000000) { - 8: printf("%p", &t); - 9: } -10: -11: return 0; -12: } -13: int t(void) { void ((*volatile p)()); p = (void ((*)()))rb_thread_call_without_gvl; return 0; } -/* end */ - -"gcc -o conftest -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/x86_64-darwin14 -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/backward -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0 -I. -I/usr/include/ffi -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens -fno-common -pipe conftest.c -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L. -L/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/lib -L. -fstack-protector -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -lffi -lruby.2.2.0 -lffi -lpthread -ldl -lobjc " -conftest.c:13:15: warning: implicit declaration of function 'rb_thread_call_without_gvl' is invalid in C99 [-Wimplicit-function-declaration] -int t(void) { rb_thread_call_without_gvl(); return 0; } - ^ -1 warning generated. -checked program was: -/* begin */ - 1: #include "ruby.h" - 2: - 3: /*top*/ - 4: extern int t(void); - 5: int main(int argc, char **argv) - 6: { - 7: if (argc > 1000000) { - 8: printf("%p", &t); - 9: } -10: -11: return 0; -12: } -13: int t(void) { rb_thread_call_without_gvl(); return 0; } -/* end */ - --------------------- - -have_func: checking for ffi_prep_cif_var()... -------------------- no - -"gcc -o conftest -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/x86_64-darwin14 -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/backward -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0 -I. -I/usr/include/ffi -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens -fno-common -pipe conftest.c -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L. -L/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/lib -L. -fstack-protector -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -lffi -lruby.2.2.0 -lffi -lpthread -ldl -lobjc " -conftest.c:13:57: error: use of undeclared identifier 'ffi_prep_cif_var' -int t(void) { void ((*volatile p)()); p = (void ((*)()))ffi_prep_cif_var; return 0; } - ^ -1 error generated. -checked program was: -/* begin */ - 1: #include "ruby.h" - 2: - 3: /*top*/ - 4: extern int t(void); - 5: int main(int argc, char **argv) - 6: { - 7: if (argc > 1000000) { - 8: printf("%p", &t); - 9: } -10: -11: return 0; -12: } -13: int t(void) { void ((*volatile p)()); p = (void ((*)()))ffi_prep_cif_var; return 0; } -/* end */ - -"gcc -o conftest -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/x86_64-darwin14 -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0/ruby/backward -I/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/include/ruby-2.2.0 -I. -I/usr/include/ffi -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens -fno-common -pipe conftest.c -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L. -L/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/lib -L. -fstack-protector -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -lffi -lruby.2.2.0 -lffi -lpthread -ldl -lobjc " -conftest.c:13:15: warning: implicit declaration of function 'ffi_prep_cif_var' is invalid in C99 [-Wimplicit-function-declaration] -int t(void) { ffi_prep_cif_var(); return 0; } - ^ -1 warning generated. -Undefined symbols for architecture x86_64: - "_ffi_prep_cif_var", referenced from: - _t in conftest-e66037.o -ld: symbol(s) not found for architecture x86_64 -clang: error: linker command failed with exit code 1 (use -v to see invocation) -checked program was: -/* begin */ - 1: #include "ruby.h" - 2: - 3: /*top*/ - 4: extern int t(void); - 5: int main(int argc, char **argv) - 6: { - 7: if (argc > 1000000) { - 8: printf("%p", &t); - 9: } -10: -11: return 0; -12: } -13: int t(void) { ffi_prep_cif_var(); return 0; } -/* end */ - --------------------- - -extconf.h is: -/* begin */ -1: #ifndef EXTCONF_H -2: #define EXTCONF_H -3: #define HAVE_FFI_PREP_CLOSURE 1 -4: #define HAVE_RB_THREAD_CALL_WITH_GVL 1 -5: #define HAVE_RB_THREAD_CALL_WITHOUT_GVL 1 -6: #define RUBY_1_9 1 -7: #endif -/* end */ - diff --git a/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/hitimes-1.2.2/gem.build_complete b/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/hitimes-1.2.2/gem.build_complete deleted file mode 100644 index e69de29..0000000 diff --git a/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/hitimes-1.2.2/gem_make.out b/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/hitimes-1.2.2/gem_make.out deleted file mode 100644 index 01dfc3d..0000000 --- a/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/hitimes-1.2.2/gem_make.out +++ /dev/null @@ -1,16 +0,0 @@ -/Users/elainekamlley/.rvm/rubies/ruby-2.2.0/bin/ruby -r ./siteconf20180423-68206-2lla4.rb extconf.rb -creating Makefile - -make "DESTDIR=" clean - -make "DESTDIR=" -compiling hitimes.c -compiling hitimes_instant_clock_gettime.c -compiling hitimes_instant_osx.c -compiling hitimes_instant_windows.c -compiling hitimes_interval.c -compiling hitimes_stats.c -linking shared-object hitimes/2.2/hitimes.bundle - -make "DESTDIR=" install -/usr/bin/install -c -m 0755 hitimes.bundle ./.gem.20180423-68206-xz1dep/hitimes/2.2 diff --git a/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/hitimes-1.2.2/hitimes/2.2/hitimes.bundle b/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/hitimes-1.2.2/hitimes/2.2/hitimes.bundle deleted file mode 100755 index 4fd33dfdb59db78a2891d5742c09c37c91919b96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19504 zcmeHPdvILUc|WVQvFzALJWOy>@HN=P1}v?e7@RQXWEiG@>=~WM@B7a8opZkP(*5q0e)HacemG5tKu`!#i&%%)d5REsAZM6^xUfbD z$JwxY(*{W@O{`KVG=@$w6%ndra2z+*<7$A+uP=0(;yw5|l@m{ytWJ>gLdVIvU9H(7 z$*=E~KT)iNu0b3q*2Y-1zRCVkpVJXbbjC8M=htVSqlBN)I*4JG$xzn6wyc|pr?%=E zetk2~Rg9SKl)*+}iEa=br!AezP8!g!uV=23tk(*NIj1KJj?_F%GgTFtI!+?;QT?+Z&(NN-z|oD@OAbEXzK^_tKOyaxiumk6;O3yo{-Y{cfT2yqa3 zXOj?vGlbyr(2U4%w~o*)evUXB@nm5*jB~64^NXOdo!kHN*KZ$PvEt(U8-KL%C*PZQ z^?cCkS$`%PMZC~p(hz1Mb|6xgeHCX;!?XlMVkKlZ|6Hq%r5Y8mbnkTA*ry zss*YRs9KC>h3D`vV&|vE;WM#&XFYc+v(xOpWsiet z=MNNqsQA}|zhtm*1s-vi47QAa0S^@Y#jtDTwRE|-(?%Dw-hQcn*RguEu>`nq8Fchc zy?`oSd}rBt$nE^<6GxLLMrQ4uCB&h@(Uo&Z-1SU-%l^8#g7Pind`wbJ5Erfoe5@AD zv`GEyo9+DjPg%f)mEhF<>0sR=aj0-;Y_tdM&KjDSm{{_noj+>lpM~Dq%`M{x(dYKM zxvPZKzrI-svlTnPA7lF_MC^RfK5!*lQMzuew|iH%&?tSgy0yw9T3=78K6}@(g@sL^ z-7)BHgt|+my8Ta4S>aotgLXbu4B3lDF#bZ_z59+P3wGbsCt&K4DR++E_A06jd^j;N zntb)hn}=JDzg1Vi`Z!u!h~76q1L_XJUUu(tOwc@Z9Q7B1PWv=%T)!s&p&HZ0tefBe zB%iz1=HDqCoG!$*z1UTN9Awe}rD z%A|Fx_Gz=~{Ui5>sy|e$Z&wm%@8|mQ)W28OzXtR9RpFjatM9B8d*#fbnb&LNJYYv* zt5#eOHx}DluKF~d2gPsC$?+^I*6*p+0-GpMX8+|y6TA(Vmb8Cw(7t1^Zg(G-Rqr(% zo_odUw)#VF93Ag&JUoJByl9`DzxH6=y-y!a9>i=nV~$6r^pDH*74;E3F+Bal8_N@J^1da98=+%iVNF?4=8w(2f+u5aqO+=X&oJ%`bt z{%xRp&L5nP*MU*6W%XHq;F8Y=a0sttNgl#4(lR)N=denC>Tk*DTlT?wT>A$KAK);? z@${sk{)~0|W?Qn~g?AP2e#QH~;%!j8!;1G!#oHx$=iI|hKV;`$DLky$TNOJAwxZvs z=+`Ow%|-g{ihil0uPM@RQS`Zrewl1$_CH|JFBvMVQ@o(!g%oeL+%tuxiuVV(JC~iK zcsDBES&H}1iZ?^?W+~o#Q=~b5rg-m2tIm!n-Vw$7w&IN|UYFuMt#~^W?-j+HqfGT< z#oMfS&nVutig%adU9NZ!Dc*L>4a}u(oDS6B4JPley8+7XFM0tBw}Er$4J^Ush`7BD zgu@{7TI{h#dqOyof2FUUqm#GUd+^kG_aDxGoS^k<@^2S6$qT5$O~NbSeU#s-J8gC0 z@ah82jxctOJA3q^(ecq2Mptmd42_N>zVP}fXm$l6ZoY{@oUq~1ZPv)X(Oa!o4~}jN z9YHCyHqT3`p0@*zfK~cFK050d<9Jsn)O7xwg^+63}U@Ua^@S*O{+r8m1Pk-ty-k68pI6R`&o`9pV?0nk` zBG1p!4)2Y?UlE4DDL+5+rv5_Hb3MQJ$?9SMeR!j;Z};|u?Z@PZgb3S#6FoESzEzh8 zl=ObBWHV}i^!+;BwBKR*Ixt6ez~BBMxS-YeLcaRr;F$51*!Ra$1V?^vQ@CBu%88mk zyJ$2X8jWM(jfLMmGHy>0jU7#nP0r(6b=R9|yc2qqy>Ys2NAC)^P;=j`>D;*TbaSxU z)#;Ywq~aV~!7BNwACl3x>?lqMQs>Gptt=?&O|08D`*dvCy?;&ID-W^4 zaa6#;_>kgVta$IJ-Tqs}<8DM_XDZ$b#p7H-u1oPgpxOIo|Ci$ZK=E!=yx%L{dd15r z-b%%LUhytfeTgdGJjHuN@vc!kTk)nU-X6tsB(G)sA~5?W7KG8mi3J?r#DY~ay-KFG zOs|&dTA8ksX|qgkkm&}QaxYFS*d$Y$abm&EGW~{3x5%^=DSlV%JBNFtY5l~42a)%8 z(4Rg28V;Y1wJg2LQiP=!S-Op-gDl<4(vvJb!qP8TdY+}fW9c=P_OLV!lQ#Z6mcGc+ zU$eBBrQ2Bwv(&@V^(>`W;;Y5+C`;We-NaI!rDm3(Sd3rA(id2|3?)16#*?wESe?nF zGh$uZYE7iuwpm-_-LaJArmZz87q2fOiH2k>lI_aGM3akG9i1+DSvTEjMN(E=*RkA= zh--C3vQ{eXf*Z-Wv8Y!d6YET8Tq|NlyD||MFF-8(e5?Y~1(8bc5T+YOgGj_uTip)f zrk!>s*%;oLMzg~3oh%rUjL^NgTx7aZDZHY+9F%ltXDrGBI*NCq$WyK)djMFHB(j}} zxGUDX5jQKkI-?OcCfd?n5J*OP*sGLC#!~{riivDjk};9hfI-0(>tX24FPrxLKy$OflWOmJ1954+lg|7z#S4i9inb z{qQtV(_AaWmKm}+)cE*tLcjN}(eJA_Y22#wgwDHlp40hVI{%K&f2i{ZbpEi;AJ_S_ zIv>{gD?0z3&fn1a$M?8eqiTVw1*#UPTA*ryss*YRs9Ka7bv4WMk^vb8tecb?I($q`S%K zq{MRFtBzRPHpkuBDb<7(5nh*wgD*_cT_=)&qlyBy=Ed6aRjeXA?OiF!YcAonB_i1@ zzJccmAh@Z7nT)v|=_u)2O6lonS3-88qXJ#FL{An4J5`1DL^|R+sn`zEdK3*VvZbx@ zt)%1vij?X~E{(P(NV-##GLd*zHr1~QU5UifI4ZKzJ({*N9!to6?vVt1;Oq3XXJS(B zfk{%*7zh&`aPY1D)HSKN>vU*;-!ffr#MhFxxNAzxcGPtL&6GCV5#N~-6a(i$?r@C= z!mrh~HRd{PU71WQHR&q*Rsb$DH|vOZYDA6np79SBy4APM@Vd3Ra4F^k%7N&JZ{rV6 za_7TqHGIAh(`1)_9Z7 z0X$~XIrm1u75~jfE&zp&yIf7WQ+yX9$1kXXC-SM9qGRuQ5C^|h1OK0RW|I06#$gY-}N#7+Zv-|3V~#OmY_?8DKI7uXBxYe~Pzg1h@z9pz#))F+LDfV|*y6-G&bb zlj6~!^b|fHR6fMR!L0cAU{LH?Ld{HaOX1(6S8*r^|KdxWgAr87eHpxACVRfZ5|i9A zbOLMS&7kr&=Ft4`vH;wV?^EIuR2g8>e<@2%NFHl~MA5DK;1q0lbo-}}8zlQ6*bD>b zH8$W*(nq3|oqSnZ{!p zv;IeoZ#(LH$G01}()h-7|M>2g<1?80Ilg*C24arSi#fjITK-h{nJI5D>r+0A$Usc_ zFaZKFf_d{-{#M`I(OgB}KAwx1(FAZGjG3?d;mYI%cGz`GSo zrmV{TbZQzg^?5P%b!vTkwLXK5e6vs9izz>-6-%1{?XD z4gRF^VJ-hPEpM=q5Bu8pVz!^t@|(20 z!A9QO-*q5*G35uee2;1Nl)VI{44Omr*}zn8;rPu5>=^Ia^iQh|f;A9t@^x?uUBCF80TZ<#@FGEn0p+ zVL3)-_hY@r1A0GyNn_KW6~xdnXrX{$ zBN899h=jNSk@zu-NQj#eso(rQu~TF7`w73jAm7}_ztGs6N59e7+z)RWzV2@=WGQd% z*Yh+s_w#a%!}`3tL1S}&@*5V)oBQu}jdQyG{TiG5=5dY9efN^a=KOt2V{@O(gn_Bw zoG0@%HtYQojm>#=wZ>-uwV3*PfAhl|>NERmx5j3_-=ncve?K*Ry&v{zY}WV725bGt zh%tWy77UGW92m{<^}P)Ey}JaTtuSh-aG?)h;=`+bc(V_0_u)Hz_&y*0dmldF!>{;o z!H56Hhs6{*zT$Xh`0(d_c%Bb0_Td!@qZJi?j*M&k9}yo#CmpcL~BHsd_*ztps-qpUE6Nj29o& z2-KsRQ+!-E5A;r@2lOISf80{x@!V5IKc}mw)pC0AY5e3Y^Xyz+Lq6@7lg;yfIfwp$ za;k9ylylVQITh&qxTk_9nAh{s&q?Iq9jL^CQ=u}s=w7JIrnjNUk@Ks)SU#fi3HXSm z7F5#w^vG9Deu?C#!Fk{#N$-P?raxBlQ{h=CCuO($iQ2j0z?)Rb7pQ2ZUO;*uOZ|Ud zf21r=dI1T`{eO~L=K1qb+dMu$4_SNrycFf2<5 za_zBH^yv{OXP(19)7M@+UDocqGS6$p{{g_S>e|zZc)D?GS3HV;1b~nCqUlUyD}0@a znEbZ@jq2Y5Y>g$ejoS6McnSYAKqLM|i=i~OH44paXsi7120q26OiSs~lMl-WOQ?9j z89${t!qVBE&#rG~Lpy90{q%RH+}&BM^2eRW4O!_rpY)U$^_lUPHQ7)`F>_eFT0T>Q z>F-5LtfjA((lg9leEvhQNUwYcoczvEcR", level, header_anchor(text)); - ^~~~ -html.c:268:33: note: passing argument to parameter 'text' here -char *header_anchor(struct buf *text) - ^ -html.c:638:51: warning: passing 'const struct buf *' to parameter of type 'struct buf *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - bufprintf(ob, "", header_anchor(text)); - ^~~~ -html.c:268:33: note: passing argument to parameter 'text' here -char *header_anchor(struct buf *text) - ^ -3 warnings generated. -compiling html_smartypants.c -html_smartypants.c:92:39: warning: initializing 'char *' with an expression of type 'const char [2]' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - static char* single_quote_list[] = { "'", "'", "'", "'", NULL }; - ^~~ -html_smartypants.c:92:44: warning: initializing 'char *' with an expression of type 'const char [6]' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - static char* single_quote_list[] = { "'", "'", "'", "'", NULL }; - ^~~~~~~ -html_smartypants.c:92:53: warning: initializing 'char *' with an expression of type 'const char [7]' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - static char* single_quote_list[] = { "'", "'", "'", "'", NULL }; - ^~~~~~~~ -html_smartypants.c:92:63: warning: initializing 'char *' with an expression of type 'const char [7]' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] - static char* single_quote_list[] = { "'", "'", "'", "'", NULL }; - ^~~~~~~~ -html_smartypants.c:133:25: warning: implicit conversion loses integer precision: 'size_t' (aka 'unsigned long') to 'int' [-Wshorten-64-to-32] - int next_squote_len = squote_len(text+1, size-1); - ~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~ -html_smartypants.c:137:30: warning: comparison of integers of different signs: 'size_t' (aka 'unsigned long') and 'int' [-Wsign-compare] - uint8_t next_char = (size > 1+next_squote_len) ? text[1+next_squote_len] : 0; - ~~~~ ^ ~~~~~~~~~~~~~~~~~ -html_smartypants.c:238:12: warning: implicit conversion loses integer precision: 'size_t' (aka 'unsigned long') to 'int' [-Wshorten-64-to-32] - int len = squote_len(text, size); - ~~~ ^~~~~~~~~~~~~~~~~~~~~~ -7 warnings generated. -compiling markdown.c -markdown.c:90:15: warning: unused function 'char_underline' [-Wunused-function] -static size_t char_underline(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t offset, size_t size); - ^ -markdown.c:91:15: warning: unused function 'char_highlight' [-Wunused-function] -static size_t char_highlight(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t offset, size_t size); - ^ -2 warnings generated. -compiling rc_markdown.c -compiling rc_render.c -compiling stack.c -linking shared-object redcarpet.bundle - -make "DESTDIR=" install -/usr/bin/install -c -m 0755 redcarpet.bundle ./.gem.20180423-68206-zz9zoz diff --git a/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/redcarpet-3.2.3/redcarpet.bundle b/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0/redcarpet-3.2.3/redcarpet.bundle deleted file mode 100755 index 7e159ddb3f0d68ab945880bebe15a06f92afa368..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101568 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ℜy|^^BRLQzd|J@&9zxtu7>yiW=8yGJh8FE{BGf4 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